ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDI3ZmQzNzYuLmUxZDVjMTcgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMTIsNiArMTIsOSBAQAogKi5rbwogKi5zbwogKi5tb2QuYworKi5pCisqLmxzdAorKi5zeW10eXBlcwogCiAjCiAjIFRvcC1sZXZlbCBnZW5lcmljIGZpbGVzCkBAIC0zMCw2ICszMywxMSBAQAogaW5jbHVkZS9saW51eC9hdXRvY29uZi5oCiBpbmNsdWRlL2xpbnV4L2NvbXBpbGUuaAogaW5jbHVkZS9saW51eC92ZXJzaW9uLmgKK2luY2x1ZGUvbGludXgvdXRzcmVsZWFzZS5oCiAKICMgc3RnaXQgZ2VuZXJhdGVkIGRpcnMKIHBhdGNoZXMtKgorCisjIHF1aWx0J3MgZmlsZXMKK3BhdGNoZXMKK3NlcmllcwpkaWZmIC0tZ2l0IGEvQ1JFRElUUyBiL0NSRURJVFMKaW5kZXggMjliZTZkMS4uMGZlOTA0ZSAxMDA2NDQKLS0tIGEvQ1JFRElUUworKysgYi9DUkVESVRTCkBAIC0yMjA5LDcgKzIyMDksNyBAQAogUzogVVNBCiAKIE46IElhbiBNY0RvbmFsZAotRTogaWFtNEBjcy53YWlrYXRvLmFjLm56CitFOiBpYW4ubWNkb25hbGRAamFuZGkuY28ubnoKIEU6IGltY2RuemxAZ21haWwuY29tCiBXOiBodHRwOi8vd2FuZC5uZXQubnovfmlhbTQKIFc6IGh0dHA6Ly9pbWNkbnpsLmJsb2dzcG90LmNvbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggMWFlNGRjMC4uZjhmZTg4MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC01OSw2ICs1OSw5IEBACiAhSWluY2x1ZGUvbGludXgvaHJ0aW1lci5oCiAhRWtlcm5lbC9ocnRpbWVyLmMKICAgICAgPC9zZWN0MT4KKyAgICAgPHNlY3QxPjx0aXRsZT5Xb3JrcXVldWVzIGFuZCBLZXZlbnRzPC90aXRsZT4KKyFFa2VybmVsL3dvcmtxdWV1ZS5jCisgICAgIDwvc2VjdDE+CiAgICAgIDxzZWN0MT48dGl0bGU+SW50ZXJuYWwgRnVuY3Rpb25zPC90aXRsZT4KICFJa2VybmVsL2V4aXQuYwogIUlrZXJuZWwvc2lnbmFsLmMKQEAgLTMwMCw3ICszMDMsNyBAQAogICAgICA8L3NlY3QxPgogCiAgICAgIDxzZWN0MT48dGl0bGU+UmVzb3VyY2VzIE1hbmFnZW1lbnQ8L3RpdGxlPgotIUVrZXJuZWwvcmVzb3VyY2UuYworIUlrZXJuZWwvcmVzb3VyY2UuYwogICAgICA8L3NlY3QxPgogCiAgICAgIDxzZWN0MT48dGl0bGU+TVRSUiBIYW5kbGluZzwvdGl0bGU+CkBAIC0zMTIsOSArMzE1LDcgQEAKICFFZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCiAhRWRyaXZlcnMvcGNpL3JlbW92ZS5jCiAhRWRyaXZlcnMvcGNpL3BjaS1hY3BpLmMKLTwhLS0ga2VybmVsZG9jIGRvZXMgbm90IHVuZGVyc3RhbmQgX19kZXZpbml0Ci1YIUVkcml2ZXJzL3BjaS9zZWFyY2guYwotIC0tPgorIUVkcml2ZXJzL3BjaS9zZWFyY2guYwogIUVkcml2ZXJzL3BjaS9tc2kuYwogIUVkcml2ZXJzL3BjaS9idXMuYwogPCEtLSBGSVhNRTogUmVtb3ZlZCBmb3Igbm93IHNpbmNlIG5vIHN0cnVjdHVyZWQgY29tbWVudHMgaW4gc291cmNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCBjMmM4NWJjLi5kNDJhYjRjIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTEwLDcgKzEwLDkgQEAKIHdpdGggInRoZSBzeXN0ZW0uIiAgVGhpcyB0ZXh0IGlzIGEgY29sbGVjdGlvbiBvZiBzdWdnZXN0aW9ucyB3aGljaAogY2FuIGdyZWF0bHkgaW5jcmVhc2UgdGhlIGNoYW5jZXMgb2YgeW91ciBjaGFuZ2UgYmVpbmcgYWNjZXB0ZWQuCiAKLUlmIHlvdSBhcmUgc3VibWl0dGluZyBhIGRyaXZlciwgYWxzbyByZWFkIERvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMuCitSZWFkIERvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0IGZvciBhIGxpc3Qgb2YgaXRlbXMgdG8gY2hlY2sKK2JlZm9yZSBzdWJtaXR0aW5nIGNvZGUuICBJZiB5b3UgYXJlIHN1Ym1pdHRpbmcgYSBkcml2ZXIsIGFsc28gcmVhZAorRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycy4KIAogCiAKQEAgLTc0LDkgKzc2LDYgQEAKIFF1aWx0OgogaHR0cDovL3NhdmFubmFoLm5vbmdudS5vcmcvcHJvamVjdHMvcXVpbHQKIAotUmFuZHkgRHVubGFwJ3MgcGF0Y2ggc2NyaXB0czoKLWh0dHA6Ly93d3cueGVub3RpbWUubmV0L2xpbnV4L3NjcmlwdHMvcGF0Y2hpbmctc2NyaXB0cy0wMDIudGFyLmd6Ci0KIEFuZHJldyBNb3J0b24ncyBwYXRjaCBzY3JpcHRzOgogaHR0cDovL3d3dy56aXAuY29tLmF1L35ha3BtL2xpbnV4L3BhdGNoZXMvCiBJbnN0ZWFkIG9mIHRoZXNlIHNjcmlwdHMsIHF1aWx0IGlzIHRoZSByZWNvbW1lbmRlZCBwYXRjaCBtYW5hZ2VtZW50CkBAIC0zMDksNiArMzA4LDggQEAKIAogCVNpZ25lZC1vZmYtYnk6IFJhbmRvbSBKIERldmVsb3BlciA8cmFuZG9tQGRldmVsb3Blci5leGFtcGxlLm9yZz4KIAordXNpbmcgeW91ciByZWFsIG5hbWUgKHNvcnJ5LCBubyBwc2V1ZG9ueW1zIG9yIGFub255bW91cyBjb250cmlidXRpb25zLikKKwogU29tZSBwZW9wbGUgYWxzbyBwdXQgZXh0cmEgdGFncyBhdCB0aGUgZW5kLiAgVGhleSdsbCBqdXN0IGJlIGlnbm9yZWQgZm9yCiBub3csIGJ1dCB5b3UgY2FuIGRvIHRoaXMgdG8gbWFyayBpbnRlcm5hbCBjb21wYW55IHByb2NlZHVyZXMgb3IganVzdAogcG9pbnQgb3V0IHNvbWUgc3BlY2lhbCBkZXRhaWwgYWJvdXQgdGhlIHNpZ24tb2ZmLiAKQEAgLTQ4NCw3ICs0ODUsNyBAQAogICA8aHR0cDovL3d3dy5rcm9haC5jb20vbG9nLzIwMDUvMTAvMTkvPgogICA8aHR0cDovL3d3dy5rcm9haC5jb20vbG9nLzIwMDYvMDEvMTEvPgogCi1OTyEhISEgTm8gbW9yZSBodWdlIHBhdGNoIGJvbWJzIHRvIGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcgcGVvcGxlIS4KK05PISEhISBObyBtb3JlIGh1Z2UgcGF0Y2ggYm9tYnMgdG8gbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyBwZW9wbGUhCiAgIDxodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWxpbnV4LWtlcm5lbCZtPTExMjExMjc0OTkxMjk0NCZ3PTI+CiAKIEtlcm5lbCBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCkBAIC00OTMsNCArNDk0LDMgQEAKIExpbnVzIFRvcnZhbGQncyBtYWlsIG9uIHRoZSBjYW5vbmljYWwgcGF0Y2ggZm9ybWF0OgogICA8aHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNS80LzcvMTgzPgogLS0KLUxhc3QgdXBkYXRlZCBvbiAxNyBOb3YgMjAwNS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9kZWxheS1hY2NvdW50aW5nLnR4dCBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9kZWxheS1hY2NvdW50aW5nLnR4dAppbmRleCBiZTIxNWU1Li4xNDQzY2Q3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZGVsYXktYWNjb3VudGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2RlbGF5LWFjY291bnRpbmcudHh0CkBAIC02NCwxMSArNjQsMTMgQEAKIAlDT05GSUdfVEFTS19ERUxBWV9BQ0NUPXkKIAlDT05GSUdfVEFTS1NUQVRTPXkKIAotRW5hYmxlIHRoZSBhY2NvdW50aW5nIGF0IGJvb3QgdGltZSBieSBhZGRpbmcKLXRoZSBmb2xsb3dpbmcgdG8gdGhlIGtlcm5lbCBib290IG9wdGlvbnMKLQlkZWxheWFjY3QKK0RlbGF5IGFjY291bnRpbmcgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IGJvb3QgdXAuCitUbyBkaXNhYmxlLCBhZGQKKyAgIG5vZGVsYXlhY2N0Cit0byB0aGUga2VybmVsIGJvb3Qgb3B0aW9ucy4gVGhlIHJlc3Qgb2YgdGhlIGluc3RydWN0aW9ucworYmVsb3cgYXNzdW1lIHRoaXMgaGFzIG5vdCBiZWVuIGRvbmUuCiAKLWFuZCBhZnRlciB0aGUgc3lzdGVtIGhhcyBib290ZWQgdXAsIHVzZSBhIHV0aWxpdHkKK0FmdGVyIHRoZSBzeXN0ZW0gaGFzIGJvb3RlZCB1cCwgdXNlIGEgdXRpbGl0eQogc2ltaWxhciB0byAgZ2V0ZGVsYXlzLmMgdG8gYWNjZXNzIHRoZSBkZWxheXMKIHNlZW4gYnkgYSBnaXZlbiB0YXNrIG9yIGEgdGFzayBncm91cCAodGdpZCkuCiBUaGUgdXRpbGl0eSBhbHNvIGFsbG93cyBhIGdpdmVuIGNvbW1hbmQgdG8gYmUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2Npc3MudHh0IGIvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKaW5kZXggMTUzNzg0Mi4uOWM2MjlmZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jY2lzcy50eHQKQEAgLTIwLDYgKzIwLDcgQEAKIAkqIFNBIFA0MDBpCiAJKiBTQSBFMjAwCiAJKiBTQSBFMjAwaQorCSogU0EgRTUwMAogCiBJZiBub2RlcyBhcmUgbm90IGFscmVhZHkgY3JlYXRlZCBpbiB0aGUgL2Rldi9jY2lzcyBkaXJlY3RvcnksIHJ1biBhcyByb290OgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci91Y29uLmMgYi9Eb2N1bWVudGF0aW9uL2Nvbm5lY3Rvci91Y29uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDczOGNkZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY29ubmVjdG9yL3Vjb24uYwpAQCAtMCwwICsxLDIwNiBAQAorLyoKKyAqIAl1Y29uLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQrIEV2Z2VuaXkgUG9seWFrb3YgPGpvaG5wb2xAMmthLm1pcHQucnU+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKworI2RlZmluZSBERUJVRworI2RlZmluZSBORVRMSU5LX0NPTk5FQ1RPUiAJMTEKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIHVsb2coZiwgYS4uLikgZnByaW50ZihzdGRvdXQsIGYsICMjYSkKKyNlbHNlCisjZGVmaW5lIHVsb2coZiwgYS4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGludCBuZWVkX2V4aXQ7CitzdGF0aWMgX191MzIgc2VxOworCitzdGF0aWMgaW50IG5ldGxpbmtfc2VuZChpbnQgcywgc3RydWN0IGNuX21zZyAqbXNnKQoreworCXN0cnVjdCBubG1zZ2hkciAqbmxoOworCXVuc2lnbmVkIGludCBzaXplOworCWludCBlcnI7CisJY2hhciBidWZbMTI4XTsKKwlzdHJ1Y3QgY25fbXNnICptOworCisJc2l6ZSA9IE5MTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgY25fbXNnKSArIG1zZy0+bGVuKTsKKworCW5saCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7CisJbmxoLT5ubG1zZ19zZXEgPSBzZXErKzsKKwlubGgtPm5sbXNnX3BpZCA9IGdldHBpZCgpOworCW5saC0+bmxtc2dfdHlwZSA9IE5MTVNHX0RPTkU7CisJbmxoLT5ubG1zZ19sZW4gPSBOTE1TR19MRU5HVEgoc2l6ZSAtIHNpemVvZigqbmxoKSk7CisJbmxoLT5ubG1zZ19mbGFncyA9IDA7CisKKwltID0gTkxNU0dfREFUQShubGgpOworI2lmIDAKKwl1bG9nKCIlczogWyUwOHguJTA4eF0gbGVuPSV1LCBzZXE9JXUsIGFjaz0ldS5cbiIsCisJICAgICAgIF9fZnVuY19fLCBtc2ctPmlkLmlkeCwgbXNnLT5pZC52YWwsIG1zZy0+bGVuLCBtc2ctPnNlcSwgbXNnLT5hY2spOworI2VuZGlmCisJbWVtY3B5KG0sIG1zZywgc2l6ZW9mKCptKSArIG1zZy0+bGVuKTsKKworCWVyciA9IHNlbmQocywgbmxoLCBzaXplLCAwKTsKKwlpZiAoZXJyID09IC0xKQorCQl1bG9nKCJGYWlsZWQgdG8gc2VuZDogJXMgWyVkXS5cbiIsCisJCQlzdHJlcnJvcihlcnJubyksIGVycm5vKTsKKworCXJldHVybiBlcnI7Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJaW50IHM7CisJY2hhciBidWZbMTAyNF07CisJaW50IGxlbjsKKwlzdHJ1Y3Qgbmxtc2doZHIgKnJlcGx5OworCXN0cnVjdCBzb2NrYWRkcl9ubCBsX2xvY2FsOworCXN0cnVjdCBjbl9tc2cgKmRhdGE7CisJRklMRSAqb3V0OworCXRpbWVfdCB0bTsKKwlzdHJ1Y3QgcG9sbGZkIHBmZDsKKworCWlmIChhcmdjIDwgMikKKwkJb3V0ID0gc3Rkb3V0OworCWVsc2UgeworCQlvdXQgPSBmb3Blbihhcmd2WzFdLCAiYSsiKTsKKwkJaWYgKCFvdXQpIHsKKwkJCXVsb2coIlVuYWJsZSB0byBvcGVuICVzIGZvciB3cml0aW5nOiAlc1xuIiwKKwkJCQlhcmd2WzFdLCBzdHJlcnJvcihlcnJubykpOworCQkJb3V0ID0gc3Rkb3V0OworCQl9CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCisJcyA9IHNvY2tldChQRl9ORVRMSU5LLCBTT0NLX0RHUkFNLCBORVRMSU5LX0NPTk5FQ1RPUik7CisJaWYgKHMgPT0gLTEpIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWxfbG9jYWwubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKwlsX2xvY2FsLm5sX2dyb3VwcyA9IDB4MTIzOyAvKiBiaXRtYXNrIG9mIHJlcXVlc3RlZCBncm91cHMgKi8KKwlsX2xvY2FsLm5sX3BpZCA9IDA7CisKKwlpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJmxfbG9jYWwsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKSA9PSAtMSkgeworCQlwZXJyb3IoImJpbmQiKTsKKwkJY2xvc2Uocyk7CisJCXJldHVybiAtMTsKKwl9CisKKyNpZiAwCisJeworCQlpbnQgb24gPSAweDU3OyAvKiBBZGRpdGlvbmFsIGdyb3VwIG51bWJlciAqLworCQlzZXRzb2Nrb3B0KHMsIFNPTF9ORVRMSU5LLCBORVRMSU5LX0FERF9NRU1CRVJTSElQLCAmb24sIHNpemVvZihvbikpOworCX0KKyNlbmRpZgorCWlmICgwKSB7CisJCWludCBpLCBqOworCisJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKworCQlkYXRhID0gKHN0cnVjdCBjbl9tc2cgKilidWY7CisKKwkJZGF0YS0+aWQuaWR4ID0gMHgxMjM7CisJCWRhdGEtPmlkLnZhbCA9IDB4NDU2OworCQlkYXRhLT5zZXEgPSBzZXErKzsKKwkJZGF0YS0+YWNrID0gMDsKKwkJZGF0YS0+bGVuID0gMDsKKworCQlmb3IgKGo9MDsgajwxMDsgKytqKSB7CisJCQlmb3IgKGk9MDsgaTwxMDAwOyArK2kpIHsKKwkJCQlsZW4gPSBuZXRsaW5rX3NlbmQocywgZGF0YSk7CisJCQl9CisKKwkJCXVsb2coIiVkIG1lc3NhZ2VzIGhhdmUgYmVlbiBzZW50IHRvICUwOHguJTA4eC5cbiIsIGksIGRhdGEtPmlkLmlkeCwgZGF0YS0+aWQudmFsKTsKKwkJfQorCisJCXJldHVybiAwOworCX0KKworCisJcGZkLmZkID0gczsKKworCXdoaWxlICghbmVlZF9leGl0KSB7CisJCXBmZC5ldmVudHMgPSBQT0xMSU47CisJCXBmZC5yZXZlbnRzID0gMDsKKwkJc3dpdGNoIChwb2xsKCZwZmQsIDEsIC0xKSkgeworCQkJY2FzZSAwOgorCQkJCW5lZWRfZXhpdCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIC0xOgorCQkJCWlmIChlcnJubyAhPSBFSU5UUikgeworCQkJCQluZWVkX2V4aXQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJY29udGludWU7CisJCX0KKwkJaWYgKG5lZWRfZXhpdCkKKwkJCWJyZWFrOworCisJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwkJbGVuID0gcmVjdihzLCBidWYsIHNpemVvZihidWYpLCAwKTsKKwkJaWYgKGxlbiA9PSAtMSkgeworCQkJcGVycm9yKCJyZWN2IGJ1ZiIpOworCQkJY2xvc2Uocyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJcmVwbHkgPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOworCisJCXN3aXRjaCAocmVwbHktPm5sbXNnX3R5cGUpIHsKKwkJY2FzZSBOTE1TR19FUlJPUjoKKwkJCWZwcmludGYob3V0LCAiRXJyb3IgbWVzc2FnZSByZWNlaXZlZC5cbiIpOworCQkJZmZsdXNoKG91dCk7CisJCQlicmVhazsKKwkJY2FzZSBOTE1TR19ET05FOgorCQkJZGF0YSA9IChzdHJ1Y3QgY25fbXNnICopTkxNU0dfREFUQShyZXBseSk7CisKKwkJCXRpbWUoJnRtKTsKKwkJCWZwcmludGYob3V0LCAiJS4yNHMgOiBbJXguJXhdIFslMDh1LiUwOHVdLlxuIiwKKwkJCQljdGltZSgmdG0pLCBkYXRhLT5pZC5pZHgsIGRhdGEtPmlkLnZhbCwgZGF0YS0+c2VxLCBkYXRhLT5hY2spOworCQkJZmZsdXNoKG91dCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorCisJY2xvc2Uocyk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS91c2VyLWd1aWRlLnR4dAppbmRleCA3ZmVkYzAwLi41NTVjOGNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdS1mcmVxL3VzZXItZ3VpZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvdXNlci1ndWlkZS50eHQKQEAgLTE1MywxMCArMTUzLDEzIEBACiAJCQkJdGhhdCBzb21lIGdvdmVybm9ycyB3b24ndCBsb2FkIC0gdGhleSBvbmx5CiAJCQkJd29yayBvbiBzb21lIHNwZWNpZmljIGFyY2hpdGVjdHVyZXMgb3IKIAkJCQlwcm9jZXNzb3JzLgotc2NhbGluZ19taW5fZnJlcSBhbmQgCitzY2FsaW5nX21pbl9mcmVxIGFuZAogc2NhbGluZ19tYXhfZnJlcQkJc2hvdyB0aGUgY3VycmVudCAicG9saWN5IGxpbWl0cyIgKGluCiAJCQkJa0h6KS4gQnkgZWNob2luZyBuZXcgdmFsdWVzIGludG8gdGhlc2UKIAkJCQlmaWxlcywgeW91IGNhbiBjaGFuZ2UgdGhlc2UgbGltaXRzLgorCQkJCU5PVEU6IHdoZW4gc2V0dGluZyBhIHBvbGljeSB5b3UgbmVlZCB0bworCQkJCWZpcnN0IHNldCBzY2FsaW5nX21heF9mcmVxLCB0aGVuCisJCQkJc2NhbGluZ19taW5fZnJlcS4KIAogCiBJZiB5b3UgaGF2ZSBzZWxlY3RlZCB0aGUgInVzZXJzcGFjZSIgZ292ZXJub3Igd2hpY2ggYWxsb3dzIHlvdSB0bwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQgYi9Eb2N1bWVudGF0aW9uL2NwdS1ob3RwbHVnLnR4dAppbmRleCAxYmNmNjk5OS4uYmMxMDdjYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jcHUtaG90cGx1Zy50eHQKQEAgLTI1MSwxNiArMjUxLDI0IEBACiAJCXJldHVybiBOT1RJRllfT0s7CiAJfQogCi0Jc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBmb29iYXJfY3B1X25vdGlmZXIgPQorCXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBmb29iYXJfY3B1X25vdGlmZXIgPQogCXsKIAkgICAubm90aWZpZXJfY2FsbCA9IGZvb2Jhcl9jcHVfY2FsbGJhY2ssCiAJfTsKIAorWW91IG5lZWQgdG8gY2FsbCByZWdpc3Rlcl9jcHVfbm90aWZpZXIoKSBmcm9tIHlvdXIgaW5pdCBmdW5jdGlvbi4KK0luaXQgZnVuY3Rpb25zIGNvdWxkIGJlIG9mIHR3byB0eXBlczoKKzEuIGVhcmx5IGluaXQgKGluaXQgZnVuY3Rpb24gY2FsbGVkIHdoZW4gb25seSB0aGUgYm9vdCBwcm9jZXNzb3IgaXMgb25saW5lKS4KKzIuIGxhdGUgaW5pdCAoaW5pdCBmdW5jdGlvbiBjYWxsZWQgX2FmdGVyXyBhbGwgdGhlIENQVXMgYXJlIG9ubGluZSkuCiAKLUluIHlvdXIgaW5pdCBmdW5jdGlvbiwKK0ZvciB0aGUgZmlyc3QgY2FzZSwgeW91IHNob3VsZCBhZGQgdGhlIGZvbGxvd2luZyB0byB5b3VyIGluaXQgZnVuY3Rpb24KIAogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmZm9vYmFyX2NwdV9ub3RpZmllcik7CiAKK0ZvciB0aGUgc2Vjb25kIGNhc2UsIHlvdSBzaG91bGQgYWRkIHRoZSBmb2xsb3dpbmcgdG8geW91ciBpbml0IGZ1bmN0aW9uCisKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmZvb2Jhcl9jcHVfbm90aWZpZXIpOworCiBZb3UgY2FuIGZhaWwgUFJFUEFSRSBub3RpZmllcnMgaWYgc29tZXRoaW5nIGRvZXNuJ3Qgd29yayB0byBwcmVwYXJlIHJlc291cmNlcy4KIFRoaXMgd2lsbCBzdG9wIHRoZSBhY3Rpdml0eSBhbmQgc2VuZCBhIGZvbGxvd2luZyBDQU5DRUxFRCBldmVudCBiYWNrLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dAppbmRleCAxNTllMmEwLi43NmI0NDI5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKQEAgLTIxNyw2ICsyMTcsMTIgQEAKIHRvIHJlcHJlc2VudCB0aGUgY3B1c2V0IGhpZXJhcmNoeSBwcm92aWRlcyBmb3IgYSBmYW1pbGlhciBwZXJtaXNzaW9uCiBhbmQgbmFtZSBzcGFjZSBmb3IgY3B1c2V0cywgd2l0aCBhIG1pbmltdW0gb2YgYWRkaXRpb25hbCBrZXJuZWwgY29kZS4KIAorVGhlIGNwdXMgZmlsZSBpbiB0aGUgcm9vdCAodG9wX2NwdXNldCkgY3B1c2V0IGlzIHJlYWQtb25seS4KK0l0IGF1dG9tYXRpY2FsbHkgdHJhY2tzIHRoZSB2YWx1ZSBvZiBjcHVfb25saW5lX21hcCwgdXNpbmcgYSBDUFUKK2hvdHBsdWcgbm90aWZpZXIuICBJZiBhbmQgd2hlbiBtZW1vcnkgbm9kZXMgY2FuIGJlIGhvdHBsdWdnZWQsCit3ZSBleHBlY3QgdG8gbWFrZSB0aGUgbWVtcyBmaWxlIGluIHRoZSByb290IGNwdXNldCByZWFkLW9ubHkKK2FzIHdlbGwsIGFuZCBoYXZlIGl0IHRyYWNrIHRoZSB2YWx1ZSBvZiBub2RlX29ubGluZV9tYXAuCisKIAogMS40IFdoYXQgYXJlIGV4Y2x1c2l2ZSBjcHVzZXRzID8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0IGIvRG9jdW1lbnRhdGlvbi9jcnlwdG8vYXBpLWludHJvLnR4dAppbmRleCA3NGRmZmM2Li41YTAzYTI4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NyeXB0by9hcGktaW50cm8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3J5cHRvL2FwaS1pbnRyby50eHQKQEAgLTE5LDE1ICsxOSwxNCBAQAogQVBJLgogCiAnVHJhbnNmb3JtcycgYXJlIHVzZXItaW5zdGFudGlhdGVkIG9iamVjdHMsIHdoaWNoIG1haW50YWluIHN0YXRlLCBoYW5kbGUgYWxsCi1vZiB0aGUgaW1wbGVtZW50YXRpb24gbG9naWMgKGUuZy4gbWFuaXB1bGF0aW5nIHBhZ2UgdmVjdG9ycyksIHByb3ZpZGUgYW4gCi1hYnN0cmFjdGlvbiB0byB0aGUgdW5kZXJseWluZyBhbGdvcml0aG1zLCBhbmQgaGFuZGxlIGNvbW1vbiBsb2dpY2FsIAotb3BlcmF0aW9ucyAoZS5nLiBjaXBoZXIgbW9kZXMsIEhNQUMgZm9yIGRpZ2VzdHMpLiAgSG93ZXZlciwgYXQgdGhlIHVzZXIgCitvZiB0aGUgaW1wbGVtZW50YXRpb24gbG9naWMgKGUuZy4gbWFuaXB1bGF0aW5nIHBhZ2UgdmVjdG9ycykgYW5kIHByb3ZpZGUgYW4gCithYnN0cmFjdGlvbiB0byB0aGUgdW5kZXJseWluZyBhbGdvcml0aG1zLiAgSG93ZXZlciwgYXQgdGhlIHVzZXIgCiBsZXZlbCB0aGV5IGFyZSB2ZXJ5IHNpbXBsZS4KIAogQ29uY2VwdHVhbGx5LCB0aGUgQVBJIGxheWVyaW5nIGxvb2tzIGxpa2UgdGhpczoKIAogICBbdHJhbnNmb3JtIGFwaV0gICh1c2VyIGludGVyZmFjZSkKLSAgW3RyYW5zZm9ybSBvcHNdICAocGVyLXR5cGUgbG9naWMgZ2x1ZSBlLmcuIGNpcGhlci5jLCBkaWdlc3QuYykKKyAgW3RyYW5zZm9ybSBvcHNdICAocGVyLXR5cGUgbG9naWMgZ2x1ZSBlLmcuIGNpcGhlci5jLCBjb21wcmVzcy5jKQogICBbYWxnb3JpdGhtIGFwaV0gIChmb3IgcmVnaXN0ZXJpbmcgYWxnb3JpdGhtcykKICAgCiBUaGUgaWRlYSBpcyB0byBtYWtlIHRoZSB1c2VyIGludGVyZmFjZSBhbmQgYWxnb3JpdGhtIHJlZ2lzdHJhdGlvbiBBUEkKQEAgLTQ0LDIyICs0MywyNyBAQAogSGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGUgQVBJOgogCiAJI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKwkjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAkKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMl07CiAJY2hhciByZXN1bHRbMTI4XTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAkKLQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJtZDUiLCAwKTsKLQlpZiAodGZtID09IE5VTEwpCisJdGZtID0gY3J5cHRvX2FsbG9jX2hhc2goIm1kNSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIodGZtKSkKIAkJZmFpbCgpOwogCQkKIAkvKiAuLi4gc2V0IHVwIHRoZSBzY2F0dGVybGlzdHMgLi4uICovCisKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmZsYWdzID0gMDsKIAkKLQljcnlwdG9fZGlnZXN0X2luaXQodGZtKTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm0sICZzZywgMik7Ci0JY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIHJlc3VsdCk7CisJaWYgKGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnNnLCAyLCByZXN1bHQpKQorCQlmYWlsKCk7CiAJCi0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOwogCiAgICAgCiBNYW55IHJlYWwgZXhhbXBsZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgcmVncmVzc2lvbiB0ZXN0IG1vZHVsZSAodGNyeXB0LmMpLgpAQCAtMTI2LDcgKzEzMCw3IEBACiBCVUdTCiAKIFNlbmQgYnVnIHJlcG9ydHMgdG86Ci1KYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KK0hlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KIENjOiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+CiAKIApAQCAtMTM0LDEzICsxMzgsMTQgQEAKIAogRm9yIGZ1cnRoZXIgcGF0Y2hlcyBhbmQgdmFyaW91cyB1cGRhdGVzLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgVE9ETwogbGlzdCwgc2VlOgotaHR0cDovL3NhbWJhLm9yZy9+amFtZXNtL2NyeXB0by8KK2h0dHA6Ly9nb25kb3IuYXBhbmEub3JnLmF1L35oZXJiZXJ0L2NyeXB0by8KIAogCiBBVVRIT1JTCiAKIEphbWVzIE1vcnJpcwogRGF2aWQgUy4gTWlsbGVyCitIZXJiZXJ0IFh1CiAKIAogQ1JFRElUUwpAQCAtMjM4LDggKzI0MywxMSBAQAogVGlnZXIgYWxnb3JpdGhtIGNvbnRyaWJ1dG9yczoKICAgQWFyb24gR3JvdGhlCiAKK1ZJQSBQYWRMb2NrIGNvbnRyaWJ1dG9yczoKKyAgTWljaGFsIEx1ZHZpZworCiBHZW5lcmljIHNjYXR0ZXJ3YWxrIGNvZGUgYnkgQWRhbSBKLiBSaWNodGVyIDxhZGFtQHlnZ2RyYXNpbC5jb20+CiAKIFBsZWFzZSBzZW5kIGFueSBjcmVkaXRzIHVwZGF0ZXMgb3IgY29ycmVjdGlvbnMgdG86Ci1KYW1lcyBNb3JyaXMgPGptb3JyaXNAcmVkaGF0LmNvbT4KK0hlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKaW5kZXggNGFhZjY4Zi4uNjZjNzI1ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CkBAIC0yNTY1LDEwICsyNTY1LDEwIEBACiAJCTI0MyA9IC9kZXYvdXNiL2RhYnVzYjMJRm91cnRoIGRhYnVzYiBkZXZpY2UKIAogMTgwIGJsb2NrCVVTQiBibG9jayBkZXZpY2VzCi0JCTAgPSAvZGV2L3ViYQkJRmlyc3QgVVNCIGJsb2NrIGRldmljZQotCQk4ID0gL2Rldi91YmIJCVNlY29uZCBVU0IgYmxvY2sgZGV2aWNlCi0JCTE2ID0gL2Rldi91YmMJCVRocmlkIFVTQiBibG9jayBkZXZpY2UKLQkJLi4uCisJCSAgMCA9IC9kZXYvdWJhCQlGaXJzdCBVU0IgYmxvY2sgZGV2aWNlCisJCSAgOCA9IC9kZXYvdWJiCQlTZWNvbmQgVVNCIGJsb2NrIGRldmljZQorCQkgMTYgPSAvZGV2L3ViYwkJVGhpcmQgVVNCIGJsb2NrIGRldmljZQorCQkgICAgLi4uCiAKIDE4MSBjaGFyCUNvbnJhZCBFbGVjdHJvbmljIHBhcmFsbGVsIHBvcnQgcmFkaW8gY2xvY2tzCiAJCSAgMCA9IC9kZXYvcGNmY2xvY2swCUZpcnN0IENvbnJhZCByYWRpbyBjbG9jawpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYi9pbWFjZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9pbWFjZmIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTAyODUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZiL2ltYWNmYi50eHQKQEAgLTAsMCArMSwzMSBAQAorCitXaGF0IGlzIGltYWNmYj8KKz09PT09PT09PT09PT09PQorCitUaGlzIGlzIGEgZ2VuZXJpYyBFRkkgcGxhdGZvcm0gZHJpdmVyIGZvciBJbnRlbCBiYXNlZCBBcHBsZSBjb21wdXRlcnMuCitJbWFjZmIgaXMgb25seSBmb3IgRUZJIGJvb3RlZCBJbnRlbCBNYWNzLgorCitTdXBwb3J0ZWQgSGFyZHdhcmUKKz09PT09PT09PT09PT09PT09PQorCitpTWFjIDE3Ii8yMCIKK01hY2Jvb2sKK01hY2Jvb2sgUHJvIDE1Ii8xNyIKK01hY01pbmkKKworSG93IHRvIHVzZSBpdD8KKz09PT09PT09PT09PT09CisKK0ltYWNmYiBkb2VzIG5vdCBoYXZlIGFueSBraW5kIG9mIGF1dG9kZXRlY3Rpb24gb2YgeW91ciBtYWNoaW5lLgorWW91IGhhdmUgdG8gYWRkIHRoZSBmaWxsb3dpbmcga2VybmVsIHBhcmFtZXRlcnMgaW4geW91ciBlbGlsby5jb25mOgorCU1hY2Jvb2sgOgorCQl2aWRlbz1pbWFjZmI6bWFjYm9vaworCU1hY01pbmkgOgorCQl2aWRlbz1pbWFjZmI6bWluaQorCU1hY2Jvb2sgUHJvIDE1IiwgaU1hYyAxNyIgOgorCQl2aWRlbz1pbWFjZmI6aTE3CisJTWFjYm9vayBQcm8gMTciLCBpTWFjIDIwIiA6CisJCXZpZGVvPWltYWNmYjppMjAKKworLS0KK0VkZ2FyIEh1Y2VrIDxnaW1saUBkYXJrLWdyZWVuLmNvbT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA4Nzg1MWVmLi41NTI1MDdmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC0xMjAsNiArMTIwLDEzIEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCitXaGF0OiAgZHJpdmVycyBkZXBlbmRpbmcgb24gT1NTX09CU09MRVRFX0RSSVZFUgorV2hlbjogIG9wdGlvbnMgaW4gMi42LjIwLCBjb2RlIGluIDIuNi4yMgorV2h5OiAgIE9TUyBkcml2ZXJzIHdpdGggQUxTQSByZXBsYWNlbWVudHMKK1dobzogICBBZHJpYW4gQnVuayA8YnVua0BzdHVzdGEuZGU+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCiBXaGF0OglwY2lfbW9kdWxlX2luaXQoZHJpdmVyKQogV2hlbjoJSmFudWFyeSAyMDA3CiBXaHk6CUlzIHJlcGxhY2VkIGJ5IHBjaV9yZWdpc3Rlcl9kcml2ZXIocGNpX2RyaXZlcikuCkBAIC0yNzQsMyArMjgxLDE2IEBACiBXaG86CVBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJZnJhbWUgZGl2ZXJ0ZXIKK1doZW46CU5vdmVtYmVyIDIwMDYKK1doeToJVGhlIGZyYW1lIGRpdmVydGVyIGlzIGluY2x1ZGVkIGluIG1vc3QgZGlzdHJpYnV0aW9uIGtlcm5lbHMsIGJ1dCBpcworCWJyb2tlbi4gSXQgZG9lcyBub3QgY29ycmVjdGx5IGhhbmRsZSBtYW55IHRoaW5nczoKKwktIElQVjYKKwktIG5vbi1saW5lYXIgc2tiJ3MKKwktIG5ldHdvcmsgZGV2aWNlIFJDVSBvbiByZW1vdmFsCisJLSBpbnB1dCBmcmFtZXMgbm90IGNvcnJlY3RseSBjaGVja2VkIGZvciBwcm90b2NvbCBlcnJvcnMKKwlJdCBhbHNvIGFkZHMgYWxsb2NhdGlvbiBvdmVyaGVhZCBldmVuIGlmIG5vdCBlbmFibGVkLgorCUl0IGlzIG5vdCBjbGVhciBpZiBhbnlvbmUgaXMgc3RpbGwgdXNpbmcgaXQuCitXaG86CVN0ZXBoZW4gSGVtbWluZ2VyIDxzaGVtbWluZ2VyQG9zZGwub3JnPgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWAppbmRleCA2NmZkYzA3Li4xNmRlYzYxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKQEAgLTYyLDggKzYyLDggQEAKIAktIGluZm8gb24gdGhlICdpbiBtZW1vcnknIGZpbGVzeXN0ZW1zIHJhbWZzLCByb290ZnMgYW5kIGluaXRyYW1mcy4KIHJlaXNlcjQudHh0CiAJLSBpbmZvIG9uIHRoZSBSZWlzZXI0IGZpbGVzeXN0ZW0gYmFzZWQgb24gZGFuY2luZyB0cmVlIGFsZ29yaXRobXMuCi1yZWxheWZzLnR4dAotCS0gaW5mbyBvbiByZWxheWZzLCBmb3IgZWZmaWNpZW50IHN0cmVhbWluZyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlLgorcmVsYXkudHh0CisJLSBpbmZvIG9uIHJlbGF5LCBmb3IgZWZmaWNpZW50IHN0cmVhbWluZyBmcm9tIGtlcm5lbCB0byB1c2VyIHNwYWNlLgogcm9tZnMudHh0CiAJLSBkZXNjcmlwdGlvbiBvZiB0aGUgUk9NRlMgZmlsZXN5c3RlbS4KIHNtYmZzLnR4dApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yZWxheS50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjc4OGRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yZWxheS50eHQKQEAgLTAsMCArMSw0NzkgQEAKK3JlbGF5IGludGVyZmFjZSAoZm9ybWVybHkgcmVsYXlmcykKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIHJlbGF5IGludGVyZmFjZSBwcm92aWRlcyBhIG1lYW5zIGZvciBrZXJuZWwgYXBwbGljYXRpb25zIHRvCitlZmZpY2llbnRseSBsb2cgYW5kIHRyYW5zZmVyIGxhcmdlIHF1YW50aXRpZXMgb2YgZGF0YSBmcm9tIHRoZSBrZXJuZWwKK3RvIHVzZXJzcGFjZSB2aWEgdXNlci1kZWZpbmVkICdyZWxheSBjaGFubmVscycuCisKK0EgJ3JlbGF5IGNoYW5uZWwnIGlzIGEga2VybmVsLT51c2VyIGRhdGEgcmVsYXkgbWVjaGFuaXNtIGltcGxlbWVudGVkCithcyBhIHNldCBvZiBwZXItY3B1IGtlcm5lbCBidWZmZXJzICgnY2hhbm5lbCBidWZmZXJzJyksIGVhY2gKK3JlcHJlc2VudGVkIGFzIGEgcmVndWxhciBmaWxlICgncmVsYXkgZmlsZScpIGluIHVzZXIgc3BhY2UuICBLZXJuZWwKK2NsaWVudHMgd3JpdGUgaW50byB0aGUgY2hhbm5lbCBidWZmZXJzIHVzaW5nIGVmZmljaWVudCB3cml0ZQorZnVuY3Rpb25zOyB0aGVzZSBhdXRvbWF0aWNhbGx5IGxvZyBpbnRvIHRoZSBjdXJyZW50IGNwdSdzIGNoYW5uZWwKK2J1ZmZlci4gIFVzZXIgc3BhY2UgYXBwbGljYXRpb25zIG1tYXAoKSBvciByZWFkKCkgZnJvbSB0aGUgcmVsYXkgZmlsZXMKK2FuZCByZXRyaWV2ZSB0aGUgZGF0YSBhcyBpdCBiZWNvbWVzIGF2YWlsYWJsZS4gIFRoZSByZWxheSBmaWxlcwordGhlbXNlbHZlcyBhcmUgZmlsZXMgY3JlYXRlZCBpbiBhIGhvc3QgZmlsZXN5c3RlbSwgZS5nLiBkZWJ1Z2ZzLCBhbmQKK2FyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNoYW5uZWwgYnVmZmVycyB1c2luZyB0aGUgQVBJIGRlc2NyaWJlZCBiZWxvdy4KKworVGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBsb2dnZWQgaW50byB0aGUgY2hhbm5lbCBidWZmZXJzIGlzIGNvbXBsZXRlbHkKK3VwIHRvIHRoZSBrZXJuZWwgY2xpZW50OyB0aGUgcmVsYXkgaW50ZXJmYWNlIGRvZXMgaG93ZXZlciBwcm92aWRlCitob29rcyB3aGljaCBhbGxvdyBrZXJuZWwgY2xpZW50cyB0byBpbXBvc2Ugc29tZSBzdHJ1Y3R1cmUgb24gdGhlCitidWZmZXIgZGF0YS4gIFRoZSByZWxheSBpbnRlcmZhY2UgZG9lc24ndCBpbXBsZW1lbnQgYW55IGZvcm0gb2YgZGF0YQorZmlsdGVyaW5nIC0gdGhpcyBhbHNvIGlzIGxlZnQgdG8gdGhlIGtlcm5lbCBjbGllbnQuICBUaGUgcHVycG9zZSBpcyB0bwora2VlcCB0aGluZ3MgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLgorCitUaGlzIGRvY3VtZW50IHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSByZWxheSBpbnRlcmZhY2UgQVBJLiAgVGhlCitkZXRhaWxzIG9mIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFyZSBkb2N1bWVudGVkIGFsb25nIHdpdGggdGhlCitmdW5jdGlvbnMgaW4gdGhlIHJlbGF5IGludGVyZmFjZSBjb2RlIC0gcGxlYXNlIHNlZSB0aGF0IGZvciBkZXRhaWxzLgorCitTZW1hbnRpY3MKKz09PT09PT09PQorCitFYWNoIHJlbGF5IGNoYW5uZWwgaGFzIG9uZSBidWZmZXIgcGVyIENQVSwgZWFjaCBidWZmZXIgaGFzIG9uZSBvciBtb3JlCitzdWItYnVmZmVycy4gIE1lc3NhZ2VzIGFyZSB3cml0dGVuIHRvIHRoZSBmaXJzdCBzdWItYnVmZmVyIHVudGlsIGl0IGlzCit0b28gZnVsbCB0byBjb250YWluIGEgbmV3IG1lc3NhZ2UsIGluIHdoaWNoIGNhc2UgaXQgaXQgaXMgd3JpdHRlbiB0bwordGhlIG5leHQgKGlmIGF2YWlsYWJsZSkuICBNZXNzYWdlcyBhcmUgbmV2ZXIgc3BsaXQgYWNyb3NzIHN1Yi1idWZmZXJzLgorQXQgdGhpcyBwb2ludCwgdXNlcnNwYWNlIGNhbiBiZSBub3RpZmllZCBzbyBpdCBlbXB0aWVzIHRoZSBmaXJzdAorc3ViLWJ1ZmZlciwgd2hpbGUgdGhlIGtlcm5lbCBjb250aW51ZXMgd3JpdGluZyB0byB0aGUgbmV4dC4KKworV2hlbiBub3RpZmllZCB0aGF0IGEgc3ViLWJ1ZmZlciBpcyBmdWxsLCB0aGUga2VybmVsIGtub3dzIGhvdyBtYW55CitieXRlcyBvZiBpdCBhcmUgcGFkZGluZyBpLmUuIHVudXNlZCBzcGFjZSBvY2N1cnJpbmcgYmVjYXVzZSBhIGNvbXBsZXRlCittZXNzYWdlIGNvdWxkbid0IGZpdCBpbnRvIGEgc3ViLWJ1ZmZlci4gIFVzZXJzcGFjZSBjYW4gdXNlIHRoaXMKK2tub3dsZWRnZSB0byBjb3B5IG9ubHkgdmFsaWQgZGF0YS4KKworQWZ0ZXIgY29weWluZyBpdCwgdXNlcnNwYWNlIGNhbiBub3RpZnkgdGhlIGtlcm5lbCB0aGF0IGEgc3ViLWJ1ZmZlcgoraGFzIGJlZW4gY29uc3VtZWQuCisKK0EgcmVsYXkgY2hhbm5lbCBjYW4gb3BlcmF0ZSBpbiBhIG1vZGUgd2hlcmUgaXQgd2lsbCBvdmVyd3JpdGUgZGF0YSBub3QKK3lldCBjb2xsZWN0ZWQgYnkgdXNlcnNwYWNlLCBhbmQgbm90IHdhaXQgZm9yIGl0IHRvIGJlIGNvbnN1bWVkLgorCitUaGUgcmVsYXkgY2hhbm5lbCBpdHNlbGYgZG9lcyBub3QgcHJvdmlkZSBmb3IgY29tbXVuaWNhdGlvbiBvZiBzdWNoCitkYXRhIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwsIGFsbG93aW5nIHRoZSBrZXJuZWwgc2lkZSB0byByZW1haW4KK3NpbXBsZSBhbmQgbm90IGltcG9zZSBhIHNpbmdsZSBpbnRlcmZhY2Ugb24gdXNlcnNwYWNlLiAgSXQgZG9lcworcHJvdmlkZSBhIHNldCBvZiBleGFtcGxlcyBhbmQgYSBzZXBhcmF0ZSBoZWxwZXIgdGhvdWdoLCBkZXNjcmliZWQKK2JlbG93LgorCitUaGUgcmVhZCgpIGludGVyZmFjZSBib3RoIHJlbW92ZXMgcGFkZGluZyBhbmQgaW50ZXJuYWxseSBjb25zdW1lcyB0aGUKK3JlYWQgc3ViLWJ1ZmZlcnM7IHRodXMgaW4gY2FzZXMgd2hlcmUgcmVhZCgyKSBpcyBiZWluZyB1c2VkIHRvIGRyYWluCit0aGUgY2hhbm5lbCBidWZmZXJzLCBzcGVjaWFsLXB1cnBvc2UgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGtlcm5lbCBhbmQKK3VzZXIgaXNuJ3QgbmVjZXNzYXJ5IGZvciBiYXNpYyBvcGVyYXRpb24uCisKK09uZSBvZiB0aGUgbWFqb3IgZ29hbHMgb2YgdGhlIHJlbGF5IGludGVyZmFjZSBpcyB0byBwcm92aWRlIGEgbG93CitvdmVyaGVhZCBtZWNoYW5pc20gZm9yIGNvbnZleWluZyBrZXJuZWwgZGF0YSB0byB1c2Vyc3BhY2UuICBXaGlsZSB0aGUKK3JlYWQoKSBpbnRlcmZhY2UgaXMgZWFzeSB0byB1c2UsIGl0J3Mgbm90IGFzIGVmZmljaWVudCBhcyB0aGUgbW1hcCgpCithcHByb2FjaDsgdGhlIGV4YW1wbGUgY29kZSBhdHRlbXB0cyB0byBtYWtlIHRoZSB0cmFkZW9mZiBiZXR3ZWVuIHRoZQordHdvIGFwcHJvYWNoZXMgYXMgc21hbGwgYXMgcG9zc2libGUuCisKK2tsb2cgYW5kIHJlbGF5LWFwcHMgZXhhbXBsZSBjb2RlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcmVsYXkgaW50ZXJmYWNlIGl0c2VsZiBpcyByZWFkeSB0byB1c2UsIGJ1dCB0byBtYWtlIHRoaW5ncyBlYXNpZXIsCithIGNvdXBsZSBzaW1wbGUgdXRpbGl0eSBmdW5jdGlvbnMgYW5kIGEgc2V0IG9mIGV4YW1wbGVzIGFyZSBwcm92aWRlZC4KKworVGhlIHJlbGF5LWFwcHMgZXhhbXBsZSB0YXJiYWxsLCBhdmFpbGFibGUgb24gdGhlIHJlbGF5IHNvdXJjZWZvcmdlCitzaXRlLCBjb250YWlucyBhIHNldCBvZiBzZWxmLWNvbnRhaW5lZCBleGFtcGxlcywgZWFjaCBjb25zaXN0aW5nIG9mIGEKK3BhaXIgb2YgLmMgZmlsZXMgY29udGFpbmluZyBib2lsZXJwbGF0ZSBjb2RlIGZvciBlYWNoIG9mIHRoZSB1c2VyIGFuZAora2VybmVsIHNpZGVzIG9mIGEgcmVsYXkgYXBwbGljYXRpb24uICBXaGVuIGNvbWJpbmVkIHRoZXNlIHR3byBzZXRzIG9mCitib2lsZXJwbGF0ZSBjb2RlIHByb3ZpZGUgZ2x1ZSB0byBlYXNpbHkgc3RyZWFtIGRhdGEgdG8gZGlzaywgd2l0aG91dAoraGF2aW5nIHRvIGJvdGhlciB3aXRoIG11bmRhbmUgaG91c2VrZWVwaW5nIGNob3Jlcy4KKworVGhlICdrbG9nIGRlYnVnZ2luZyBmdW5jdGlvbnMnIHBhdGNoIChrbG9nLnBhdGNoIGluIHRoZSByZWxheS1hcHBzCit0YXJiYWxsKSBwcm92aWRlcyBhIGNvdXBsZSBvZiBoaWdoLWxldmVsIGxvZ2dpbmcgZnVuY3Rpb25zIHRvIHRoZQora2VybmVsIHdoaWNoIGFsbG93IHdyaXRpbmcgZm9ybWF0dGVkIHRleHQgb3IgcmF3IGRhdGEgdG8gYSBjaGFubmVsLAorcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgY2hhbm5lbCB0byB3cml0ZSBpbnRvIGV4aXN0cyBvciBub3QsIG9yIGV2ZW4KK3doZXRoZXIgdGhlIHJlbGF5IGludGVyZmFjZSBpcyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwgb3Igbm90LiAgVGhlc2UKK2Z1bmN0aW9ucyBhbGxvdyB5b3UgdG8gcHV0IHVuY29uZGl0aW9uYWwgJ3RyYWNlJyBzdGF0ZW1lbnRzIGFueXdoZXJlCitpbiB0aGUga2VybmVsIG9yIGtlcm5lbCBtb2R1bGVzOyBvbmx5IHdoZW4gdGhlcmUgaXMgYSAna2xvZyBoYW5kbGVyJworcmVnaXN0ZXJlZCB3aWxsIGRhdGEgYWN0dWFsbHkgYmUgbG9nZ2VkIChzZWUgdGhlIGtsb2cgYW5kIGtsZWFrCitleGFtcGxlcyBmb3IgZGV0YWlscykuCisKK0l0IGlzIG9mIGNvdXJzZSBwb3NzaWJsZSB0byB1c2UgdGhlIHJlbGF5IGludGVyZmFjZSBmcm9tIHNjcmF0Y2gsCitpLmUuIHdpdGhvdXQgdXNpbmcgYW55IG9mIHRoZSByZWxheS1hcHBzIGV4YW1wbGUgY29kZSBvciBrbG9nLCBidXQKK3lvdSdsbCBoYXZlIHRvIGltcGxlbWVudCBjb21tdW5pY2F0aW9uIGJldHdlZW4gdXNlcnNwYWNlIGFuZCBrZXJuZWwsCithbGxvd2luZyBib3RoIHRvIGNvbnZleSB0aGUgc3RhdGUgb2YgYnVmZmVycyAoZnVsbCwgZW1wdHksIGFtb3VudCBvZgorcGFkZGluZykuICBUaGUgcmVhZCgpIGludGVyZmFjZSBib3RoIHJlbW92ZXMgcGFkZGluZyBhbmQgaW50ZXJuYWxseQorY29uc3VtZXMgdGhlIHJlYWQgc3ViLWJ1ZmZlcnM7IHRodXMgaW4gY2FzZXMgd2hlcmUgcmVhZCgyKSBpcyBiZWluZwordXNlZCB0byBkcmFpbiB0aGUgY2hhbm5lbCBidWZmZXJzLCBzcGVjaWFsLXB1cnBvc2UgY29tbXVuaWNhdGlvbgorYmV0d2VlbiBrZXJuZWwgYW5kIHVzZXIgaXNuJ3QgbmVjZXNzYXJ5IGZvciBiYXNpYyBvcGVyYXRpb24uICBUaGluZ3MKK3N1Y2ggYXMgYnVmZmVyLWZ1bGwgY29uZGl0aW9ucyB3b3VsZCBzdGlsbCBuZWVkIHRvIGJlIGNvbW11bmljYXRlZCB2aWEKK3NvbWUgY2hhbm5lbCB0aG91Z2guCisKK2tsb2cgYW5kIHRoZSByZWxheS1hcHBzIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVsYXktYXBwcwordGFyYmFsbCBvbiBodHRwOi8vcmVsYXlmcy5zb3VyY2Vmb3JnZS5uZXQKKworVGhlIHJlbGF5IGludGVyZmFjZSB1c2VyIHNwYWNlIEFQSQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgcmVsYXkgaW50ZXJmYWNlIGltcGxlbWVudHMgYmFzaWMgZmlsZSBvcGVyYXRpb25zIGZvciB1c2VyIHNwYWNlCithY2Nlc3MgdG8gcmVsYXkgY2hhbm5lbCBidWZmZXIgZGF0YS4gIEhlcmUgYXJlIHRoZSBmaWxlIG9wZXJhdGlvbnMKK3RoYXQgYXJlIGF2YWlsYWJsZSBhbmQgc29tZSBjb21tZW50cyByZWdhcmRpbmcgdGhlaXIgYmVoYXZpb3I6CisKK29wZW4oKQkgICAgZW5hYmxlcyB1c2VyIHRvIG9wZW4gYW4gX2V4aXN0aW5nXyBjaGFubmVsIGJ1ZmZlci4KKworbW1hcCgpICAgICAgcmVzdWx0cyBpbiBjaGFubmVsIGJ1ZmZlciBiZWluZyBtYXBwZWQgaW50byB0aGUgY2FsbGVyJ3MKKwkgICAgbWVtb3J5IHNwYWNlLiBOb3RlIHRoYXQgeW91IGNhbid0IGRvIGEgcGFydGlhbCBtbWFwIC0geW91CisJICAgIG11c3QgbWFwIHRoZSBlbnRpcmUgZmlsZSwgd2hpY2ggaXMgTlJCVUYgKiBTVUJCVUZTSVpFLgorCityZWFkKCkgICAgICByZWFkIHRoZSBjb250ZW50cyBvZiBhIGNoYW5uZWwgYnVmZmVyLiAgVGhlIGJ5dGVzIHJlYWQgYXJlCisJICAgICdjb25zdW1lZCcgYnkgdGhlIHJlYWRlciwgaS5lLiB0aGV5IHdvbid0IGJlIGF2YWlsYWJsZQorCSAgICBhZ2FpbiB0byBzdWJzZXF1ZW50IHJlYWRzLiAgSWYgdGhlIGNoYW5uZWwgaXMgYmVpbmcgdXNlZAorCSAgICBpbiBuby1vdmVyd3JpdGUgbW9kZSAodGhlIGRlZmF1bHQpLCBpdCBjYW4gYmUgcmVhZCBhdCBhbnkKKwkgICAgdGltZSBldmVuIGlmIHRoZXJlJ3MgYW4gYWN0aXZlIGtlcm5lbCB3cml0ZXIuICBJZiB0aGUKKwkgICAgY2hhbm5lbCBpcyBiZWluZyB1c2VkIGluIG92ZXJ3cml0ZSBtb2RlIGFuZCB0aGVyZSBhcmUKKwkgICAgYWN0aXZlIGNoYW5uZWwgd3JpdGVycywgcmVzdWx0cyBtYXkgYmUgdW5wcmVkaWN0YWJsZSAtCisJICAgIHVzZXJzIHNob3VsZCBtYWtlIHN1cmUgdGhhdCBhbGwgbG9nZ2luZyB0byB0aGUgY2hhbm5lbCBoYXMKKwkgICAgZW5kZWQgYmVmb3JlIHVzaW5nIHJlYWQoKSB3aXRoIG92ZXJ3cml0ZSBtb2RlLiAgU3ViLWJ1ZmZlcgorCSAgICBwYWRkaW5nIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhbmQgd2lsbCBub3QgYmUgc2VlbiBieQorCSAgICB0aGUgcmVhZGVyLgorCitzZW5kZmlsZSgpICB0cmFuc2ZlciBkYXRhIGZyb20gYSBjaGFubmVsIGJ1ZmZlciB0byBhbiBvdXRwdXQgZmlsZQorCSAgICBkZXNjcmlwdG9yLiBTdWItYnVmZmVyIHBhZGRpbmcgaXMgYXV0b21hdGljYWxseSByZW1vdmVkCisJICAgIGFuZCB3aWxsIG5vdCBiZSBzZWVuIGJ5IHRoZSByZWFkZXIuCisKK3BvbGwoKSAgICAgIFBPTExJTi9QT0xMUkROT1JNL1BPTExFUlIgc3VwcG9ydGVkLiAgVXNlciBhcHBsaWNhdGlvbnMgYXJlCisJICAgIG5vdGlmaWVkIHdoZW4gc3ViLWJ1ZmZlciBib3VuZGFyaWVzIGFyZSBjcm9zc2VkLgorCitjbG9zZSgpICAgICBkZWNyZW1lbnRzIHRoZSBjaGFubmVsIGJ1ZmZlcidzIHJlZmNvdW50LiAgV2hlbiB0aGUgcmVmY291bnQKKwkgICAgcmVhY2hlcyAwLCBpLmUuIHdoZW4gbm8gcHJvY2VzcyBvciBrZXJuZWwgY2xpZW50IGhhcyB0aGUKKwkgICAgYnVmZmVyIG9wZW4sIHRoZSBjaGFubmVsIGJ1ZmZlciBpcyBmcmVlZC4KKworSW4gb3JkZXIgZm9yIGEgdXNlciBhcHBsaWNhdGlvbiB0byBtYWtlIHVzZSBvZiByZWxheSBmaWxlcywgdGhlCitob3N0IGZpbGVzeXN0ZW0gbXVzdCBiZSBtb3VudGVkLiAgRm9yIGV4YW1wbGUsCisKKwltb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnZnMgL2RlYnVnCisKK05PVEU6ICAgdGhlIGhvc3QgZmlsZXN5c3RlbSBkb2Vzbid0IG5lZWQgdG8gYmUgbW91bnRlZCBmb3Iga2VybmVsCisJY2xpZW50cyB0byBjcmVhdGUgb3IgdXNlIGNoYW5uZWxzIC0gaXQgb25seSBuZWVkcyB0byBiZQorCW1vdW50ZWQgd2hlbiB1c2VyIHNwYWNlIGFwcGxpY2F0aW9ucyBuZWVkIGFjY2VzcyB0byB0aGUgYnVmZmVyCisJZGF0YS4KKworCitUaGUgcmVsYXkgaW50ZXJmYWNlIGtlcm5lbCBBUEkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitIZXJlJ3MgYSBzdW1tYXJ5IG9mIHRoZSBBUEkgdGhlIHJlbGF5IGludGVyZmFjZSBwcm92aWRlcyB0byBpbi1rZXJuZWwgY2xpZW50czoKKworVEJEKGN1cnIuIGxpbmUgTVQ6L0FQSS8pCisgIGNoYW5uZWwgbWFuYWdlbWVudCBmdW5jdGlvbnM6CisKKyAgICByZWxheV9vcGVuKGJhc2VfZmlsZW5hbWUsIHBhcmVudCwgc3ViYnVmX3NpemUsIG5fc3ViYnVmcywKKyAgICAgICAgICAgICAgIGNhbGxiYWNrcykKKyAgICByZWxheV9jbG9zZShjaGFuKQorICAgIHJlbGF5X2ZsdXNoKGNoYW4pCisgICAgcmVsYXlfcmVzZXQoY2hhbikKKworICBjaGFubmVsIG1hbmFnZW1lbnQgdHlwaWNhbGx5IGNhbGxlZCBvbiBpbnN0aWdhdGlvbiBvZiB1c2Vyc3BhY2U6CisKKyAgICByZWxheV9zdWJidWZzX2NvbnN1bWVkKGNoYW4sIGNwdSwgc3ViYnVmc19jb25zdW1lZCkKKworICB3cml0ZSBmdW5jdGlvbnM6CisKKyAgICByZWxheV93cml0ZShjaGFuLCBkYXRhLCBsZW5ndGgpCisgICAgX19yZWxheV93cml0ZShjaGFuLCBkYXRhLCBsZW5ndGgpCisgICAgcmVsYXlfcmVzZXJ2ZShjaGFuLCBsZW5ndGgpCisKKyAgY2FsbGJhY2tzOgorCisgICAgc3ViYnVmX3N0YXJ0KGJ1Ziwgc3ViYnVmLCBwcmV2X3N1YmJ1ZiwgcHJldl9wYWRkaW5nKQorICAgIGJ1Zl9tYXBwZWQoYnVmLCBmaWxwKQorICAgIGJ1Zl91bm1hcHBlZChidWYsIGZpbHApCisgICAgY3JlYXRlX2J1Zl9maWxlKGZpbGVuYW1lLCBwYXJlbnQsIG1vZGUsIGJ1ZiwgaXNfZ2xvYmFsKQorICAgIHJlbW92ZV9idWZfZmlsZShkZW50cnkpCisKKyAgaGVscGVyIGZ1bmN0aW9uczoKKworICAgIHJlbGF5X2J1Zl9mdWxsKGJ1ZikKKyAgICBzdWJidWZfc3RhcnRfcmVzZXJ2ZShidWYsIGxlbmd0aCkKKworCitDcmVhdGluZyBhIGNoYW5uZWwKKy0tLS0tLS0tLS0tLS0tLS0tLQorCityZWxheV9vcGVuKCkgaXMgdXNlZCB0byBjcmVhdGUgYSBjaGFubmVsLCBhbG9uZyB3aXRoIGl0cyBwZXItY3B1CitjaGFubmVsIGJ1ZmZlcnMuICBFYWNoIGNoYW5uZWwgYnVmZmVyIHdpbGwgaGF2ZSBhbiBhc3NvY2lhdGVkIGZpbGUKK2NyZWF0ZWQgZm9yIGl0IGluIHRoZSBob3N0IGZpbGVzeXN0ZW0sIHdoaWNoIGNhbiBiZSBhbmQgbW1hcHBlZCBvcgorcmVhZCBmcm9tIGluIHVzZXIgc3BhY2UuICBUaGUgZmlsZXMgYXJlIG5hbWVkIGJhc2VuYW1lMC4uLmJhc2VuYW1lTi0xCit3aGVyZSBOIGlzIHRoZSBudW1iZXIgb2Ygb25saW5lIGNwdXMsIGFuZCBieSBkZWZhdWx0IHdpbGwgYmUgY3JlYXRlZAoraW4gdGhlIHJvb3Qgb2YgdGhlIGZpbGVzeXN0ZW0gKGlmIHRoZSBwYXJlbnQgcGFyYW0gaXMgTlVMTCkuICBJZiB5b3UKK3dhbnQgYSBkaXJlY3Rvcnkgc3RydWN0dXJlIHRvIGNvbnRhaW4geW91ciByZWxheSBmaWxlcywgeW91IHNob3VsZAorY3JlYXRlIGl0IHVzaW5nIHRoZSBob3N0IGZpbGVzeXN0ZW0ncyBkaXJlY3RvcnkgY3JlYXRpb24gZnVuY3Rpb24sCitlLmcuIGRlYnVnZnNfY3JlYXRlX2RpcigpLCBhbmQgcGFzcyB0aGUgcGFyZW50IGRpcmVjdG9yeSB0bworcmVsYXlfb3BlbigpLiAgVXNlcnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjbGVhbmluZyB1cCBhbnkgZGlyZWN0b3J5CitzdHJ1Y3R1cmUgdGhleSBjcmVhdGUsIHdoZW4gdGhlIGNoYW5uZWwgaXMgY2xvc2VkIC0gYWdhaW4gdGhlIGhvc3QKK2ZpbGVzeXN0ZW0ncyBkaXJlY3RvcnkgcmVtb3ZhbCBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgZm9yIHRoYXQsCitlLmcuIGRlYnVnZnNfcmVtb3ZlKCkuCisKK0luIG9yZGVyIGZvciBhIGNoYW5uZWwgdG8gYmUgY3JlYXRlZCBhbmQgdGhlIGhvc3QgZmlsZXN5c3RlbSdzIGZpbGVzCithc3NvY2lhdGVkIHdpdGggaXRzIGNoYW5uZWwgYnVmZmVycywgdGhlIHVzZXIgbXVzdCBwcm92aWRlIGRlZmluaXRpb25zCitmb3IgdHdvIGNhbGxiYWNrIGZ1bmN0aW9ucywgY3JlYXRlX2J1Zl9maWxlKCkgYW5kIHJlbW92ZV9idWZfZmlsZSgpLgorY3JlYXRlX2J1Zl9maWxlKCkgaXMgY2FsbGVkIG9uY2UgZm9yIGVhY2ggcGVyLWNwdSBidWZmZXIgZnJvbQorcmVsYXlfb3BlbigpIGFuZCBhbGxvd3MgdGhlIHVzZXIgdG8gY3JlYXRlIHRoZSBmaWxlIHdoaWNoIHdpbGwgYmUgdXNlZAordG8gcmVwcmVzZW50IHRoZSBjb3JyZXNwb25kaW5nIGNoYW5uZWwgYnVmZmVyLiAgVGhlIGNhbGxiYWNrIHNob3VsZAorcmV0dXJuIHRoZSBkZW50cnkgb2YgdGhlIGZpbGUgY3JlYXRlZCB0byByZXByZXNlbnQgdGhlIGNoYW5uZWwgYnVmZmVyLgorcmVtb3ZlX2J1Zl9maWxlKCkgbXVzdCBhbHNvIGJlIGRlZmluZWQ7IGl0J3MgcmVzcG9uc2libGUgZm9yIGRlbGV0aW5nCit0aGUgZmlsZShzKSBjcmVhdGVkIGluIGNyZWF0ZV9idWZfZmlsZSgpIGFuZCBpcyBjYWxsZWQgZHVyaW5nCityZWxheV9jbG9zZSgpLgorCitIZXJlIGFyZSBzb21lIHR5cGljYWwgZGVmaW5pdGlvbnMgZm9yIHRoZXNlIGNhbGxiYWNrcywgaW4gdGhpcyBjYXNlCit1c2luZyBkZWJ1Z2ZzOgorCisvKgorICogY3JlYXRlX2J1Zl9maWxlKCkgY2FsbGJhY2suICBDcmVhdGVzIHJlbGF5IGZpbGUgaW4gZGVidWdmcy4KKyAqLworc3RhdGljIHN0cnVjdCBkZW50cnkgKmNyZWF0ZV9idWZfZmlsZV9oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppc19nbG9iYWwpCit7CisgICAgICAgIHJldHVybiBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZpbGVuYW1lLCBtb2RlLCBwYXJlbnQsIGJ1ZiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmVsYXlfZmlsZV9vcGVyYXRpb25zKTsKK30KKworLyoKKyAqIHJlbW92ZV9idWZfZmlsZSgpIGNhbGxiYWNrLiAgUmVtb3ZlcyByZWxheSBmaWxlIGZyb20gZGVidWdmcy4KKyAqLworc3RhdGljIGludCByZW1vdmVfYnVmX2ZpbGVfaGFuZGxlcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisgICAgICAgIGRlYnVnZnNfcmVtb3ZlKGRlbnRyeSk7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZWxheSBpbnRlcmZhY2UgY2FsbGJhY2tzCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmNoYW5fY2FsbGJhY2tzIHJlbGF5X2NhbGxiYWNrcyA9Cit7CisgICAgICAgIC5jcmVhdGVfYnVmX2ZpbGUgPSBjcmVhdGVfYnVmX2ZpbGVfaGFuZGxlciwKKyAgICAgICAgLnJlbW92ZV9idWZfZmlsZSA9IHJlbW92ZV9idWZfZmlsZV9oYW5kbGVyLAorfTsKKworQW5kIGFuIGV4YW1wbGUgcmVsYXlfb3BlbigpIGludm9jYXRpb24gdXNpbmcgdGhlbToKKworICBjaGFuID0gcmVsYXlfb3BlbigiY3B1IiwgTlVMTCwgU1VCQlVGX1NJWkUsIE5fU1VCQlVGUywgJnJlbGF5X2NhbGxiYWNrcyk7CisKK0lmIHRoZSBjcmVhdGVfYnVmX2ZpbGUoKSBjYWxsYmFjayBmYWlscywgb3IgaXNuJ3QgZGVmaW5lZCwgY2hhbm5lbAorY3JlYXRpb24gYW5kIHRodXMgcmVsYXlfb3BlbigpIHdpbGwgZmFpbC4KKworVGhlIHRvdGFsIHNpemUgb2YgZWFjaCBwZXItY3B1IGJ1ZmZlciBpcyBjYWxjdWxhdGVkIGJ5IG11bHRpcGx5aW5nIHRoZQorbnVtYmVyIG9mIHN1Yi1idWZmZXJzIGJ5IHRoZSBzdWItYnVmZmVyIHNpemUgcGFzc2VkIGludG8gcmVsYXlfb3BlbigpLgorVGhlIGlkZWEgYmVoaW5kIHN1Yi1idWZmZXJzIGlzIHRoYXQgdGhleSdyZSBiYXNpY2FsbHkgYW4gZXh0ZW5zaW9uIG9mCitkb3VibGUtYnVmZmVyaW5nIHRvIE4gYnVmZmVycywgYW5kIHRoZXkgYWxzbyBhbGxvdyBhcHBsaWNhdGlvbnMgdG8KK2Vhc2lseSBpbXBsZW1lbnQgcmFuZG9tLWFjY2Vzcy1vbi1idWZmZXItYm91bmRhcnkgc2NoZW1lcywgd2hpY2ggY2FuCitiZSBpbXBvcnRhbnQgZm9yIHNvbWUgaGlnaC12b2x1bWUgYXBwbGljYXRpb25zLiAgVGhlIG51bWJlciBhbmQgc2l6ZQorb2Ygc3ViLWJ1ZmZlcnMgaXMgY29tcGxldGVseSBkZXBlbmRlbnQgb24gdGhlIGFwcGxpY2F0aW9uIGFuZCBldmVuIGZvcgordGhlIHNhbWUgYXBwbGljYXRpb24sIGRpZmZlcmVudCBjb25kaXRpb25zIHdpbGwgd2FycmFudCBkaWZmZXJlbnQKK3ZhbHVlcyBmb3IgdGhlc2UgcGFyYW1ldGVycyBhdCBkaWZmZXJlbnQgdGltZXMuICBUeXBpY2FsbHksIHRoZSByaWdodAordmFsdWVzIHRvIHVzZSBhcmUgYmVzdCBkZWNpZGVkIGFmdGVyIHNvbWUgZXhwZXJpbWVudGF0aW9uOyBpbiBnZW5lcmFsLAordGhvdWdoLCBpdCdzIHNhZmUgdG8gYXNzdW1lIHRoYXQgaGF2aW5nIG9ubHkgMSBzdWItYnVmZmVyIGlzIGEgYmFkCitpZGVhIC0geW91J3JlIGd1YXJhbnRlZWQgdG8gZWl0aGVyIG92ZXJ3cml0ZSBkYXRhIG9yIGxvc2UgZXZlbnRzCitkZXBlbmRpbmcgb24gdGhlIGNoYW5uZWwgbW9kZSBiZWluZyB1c2VkLgorCitUaGUgY3JlYXRlX2J1Zl9maWxlKCkgaW1wbGVtZW50YXRpb24gY2FuIGFsc28gYmUgZGVmaW5lZCBpbiBzdWNoIGEgd2F5CithcyB0byBhbGxvdyB0aGUgY3JlYXRpb24gb2YgYSBzaW5nbGUgJ2dsb2JhbCcgYnVmZmVyIGluc3RlYWQgb2YgdGhlCitkZWZhdWx0IHBlci1jcHUgc2V0LiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBhcHBsaWNhdGlvbnMgaW50ZXJlc3RlZAorbWFpbmx5IGluIHNlZWluZyB0aGUgcmVsYXRpdmUgb3JkZXJpbmcgb2Ygc3lzdGVtLXdpZGUgZXZlbnRzIHdpdGhvdXQKK3RoZSBuZWVkIHRvIGJvdGhlciB3aXRoIHNhdmluZyBleHBsaWNpdCB0aW1lc3RhbXBzIGZvciB0aGUgcHVycG9zZSBvZgorbWVyZ2luZy9zb3J0aW5nIHBlci1jcHUgZmlsZXMgaW4gYSBwb3N0cHJvY2Vzc2luZyBzdGVwLgorCitUbyBoYXZlIHJlbGF5X29wZW4oKSBjcmVhdGUgYSBnbG9iYWwgYnVmZmVyLCB0aGUgY3JlYXRlX2J1Zl9maWxlKCkKK2ltcGxlbWVudGF0aW9uIHNob3VsZCBzZXQgdGhlIHZhbHVlIG9mIHRoZSBpc19nbG9iYWwgb3V0cGFyYW0gdG8gYQorbm9uLXplcm8gdmFsdWUgaW4gYWRkaXRpb24gdG8gY3JlYXRpbmcgdGhlIGZpbGUgdGhhdCB3aWxsIGJlIHVzZWQgdG8KK3JlcHJlc2VudCB0aGUgc2luZ2xlIGJ1ZmZlci4gIEluIHRoZSBjYXNlIG9mIGEgZ2xvYmFsIGJ1ZmZlciwKK2NyZWF0ZV9idWZfZmlsZSgpIGFuZCByZW1vdmVfYnVmX2ZpbGUoKSB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UuICBUaGUKK25vcm1hbCBjaGFubmVsLXdyaXRpbmcgZnVuY3Rpb25zLCBlLmcuIHJlbGF5X3dyaXRlKCksIGNhbiBzdGlsbCBiZQordXNlZCAtIHdyaXRlcyBmcm9tIGFueSBjcHUgd2lsbCB0cmFuc3BhcmVudGx5IGVuZCB1cCBpbiB0aGUgZ2xvYmFsCitidWZmZXIgLSBidXQgc2luY2UgaXQgaXMgYSBnbG9iYWwgYnVmZmVyLCBjYWxsZXJzIHNob3VsZCBtYWtlIHN1cmUKK3RoZXkgdXNlIHRoZSBwcm9wZXIgbG9ja2luZyBmb3Igc3VjaCBhIGJ1ZmZlciwgZWl0aGVyIGJ5IHdyYXBwaW5nCit3cml0ZXMgaW4gYSBzcGlubG9jaywgb3IgYnkgY29weWluZyBhIHdyaXRlIGZ1bmN0aW9uIGZyb20gcmVsYXkuaCBhbmQKK2NyZWF0aW5nIGEgbG9jYWwgdmVyc2lvbiB0aGF0IGludGVybmFsbHkgZG9lcyB0aGUgcHJvcGVyIGxvY2tpbmcuCisKK0NoYW5uZWwgJ21vZGVzJworLS0tLS0tLS0tLS0tLS0tCisKK3JlbGF5IGNoYW5uZWxzIGNhbiBiZSB1c2VkIGluIGVpdGhlciBvZiB0d28gbW9kZXMgLSAnb3ZlcndyaXRlJyBvcgorJ25vLW92ZXJ3cml0ZScuICBUaGUgbW9kZSBpcyBlbnRpcmVseSBkZXRlcm1pbmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbgorb2YgdGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrLCBhcyBkZXNjcmliZWQgYmVsb3cuICBUaGUgZGVmYXVsdCBpZiBubworc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2sgaXMgZGVmaW5lZCBpcyAnbm8tb3ZlcndyaXRlJyBtb2RlLiAgSWYgdGhlCitkZWZhdWx0IG1vZGUgc3VpdHMgeW91ciBuZWVkcywgYW5kIHlvdSBwbGFuIHRvIHVzZSB0aGUgcmVhZCgpCitpbnRlcmZhY2UgdG8gcmV0cmlldmUgY2hhbm5lbCBkYXRhLCB5b3UgY2FuIGlnbm9yZSB0aGUgZGV0YWlscyBvZiB0aGlzCitzZWN0aW9uLCBhcyBpdCBwZXJ0YWlucyBtYWlubHkgdG8gbW1hcCgpIGltcGxlbWVudGF0aW9ucy4KKworSW4gJ292ZXJ3cml0ZScgbW9kZSwgYWxzbyBrbm93biBhcyAnZmxpZ2h0IHJlY29yZGVyJyBtb2RlLCB3cml0ZXMKK2NvbnRpbnVvdXNseSBjeWNsZSBhcm91bmQgdGhlIGJ1ZmZlciBhbmQgd2lsbCBuZXZlciBmYWlsLCBidXQgd2lsbAordW5jb25kaXRpb25hbGx5IG92ZXJ3cml0ZSBvbGQgZGF0YSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBhY3R1YWxseQorYmVlbiBjb25zdW1lZC4gIEluIG5vLW92ZXJ3cml0ZSBtb2RlLCB3cml0ZXMgd2lsbCBmYWlsLCBpLmUuIGRhdGEgd2lsbAorYmUgbG9zdCwgaWYgdGhlIG51bWJlciBvZiB1bmNvbnN1bWVkIHN1Yi1idWZmZXJzIGVxdWFscyB0aGUgdG90YWwKK251bWJlciBvZiBzdWItYnVmZmVycyBpbiB0aGUgY2hhbm5lbC4gIEl0IHNob3VsZCBiZSBjbGVhciB0aGF0IGlmCit0aGVyZSBpcyBubyBjb25zdW1lciBvciBpZiB0aGUgY29uc3VtZXIgY2FuJ3QgY29uc3VtZSBzdWItYnVmZmVycyBmYXN0Citlbm91Z2gsIGRhdGEgd2lsbCBiZSBsb3N0IGluIGVpdGhlciBjYXNlOyB0aGUgb25seSBkaWZmZXJlbmNlIGlzCit3aGV0aGVyIGRhdGEgaXMgbG9zdCBmcm9tIHRoZSBiZWdpbm5pbmcgb3IgdGhlIGVuZCBvZiBhIGJ1ZmZlci4KKworQXMgZXhwbGFpbmVkIGFib3ZlLCBhIHJlbGF5IGNoYW5uZWwgaXMgbWFkZSBvZiB1cCBvbmUgb3IgbW9yZQorcGVyLWNwdSBjaGFubmVsIGJ1ZmZlcnMsIGVhY2ggaW1wbGVtZW50ZWQgYXMgYSBjaXJjdWxhciBidWZmZXIKK3N1YmRpdmlkZWQgaW50byBvbmUgb3IgbW9yZSBzdWItYnVmZmVycy4gIE1lc3NhZ2VzIGFyZSB3cml0dGVuIGludG8KK3RoZSBjdXJyZW50IHN1Yi1idWZmZXIgb2YgdGhlIGNoYW5uZWwncyBjdXJyZW50IHBlci1jcHUgYnVmZmVyIHZpYSB0aGUKK3dyaXRlIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3cuICBXaGVuZXZlciBhIG1lc3NhZ2UgY2FuJ3QgZml0IGludG8KK3RoZSBjdXJyZW50IHN1Yi1idWZmZXIsIGJlY2F1c2UgdGhlcmUncyBubyByb29tIGxlZnQgZm9yIGl0LCB0aGUKK2NsaWVudCBpcyBub3RpZmllZCB2aWEgdGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrIHRoYXQgYSBzd2l0Y2ggdG8gYQorbmV3IHN1Yi1idWZmZXIgaXMgYWJvdXQgdG8gb2NjdXIuICBUaGUgY2xpZW50IHVzZXMgdGhpcyBjYWxsYmFjayB0byAxKQoraW5pdGlhbGl6ZSB0aGUgbmV4dCBzdWItYnVmZmVyIGlmIGFwcHJvcHJpYXRlIDIpIGZpbmFsaXplIHRoZSBwcmV2aW91cworc3ViLWJ1ZmZlciBpZiBhcHByb3ByaWF0ZSBhbmQgMykgcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nCit3aGV0aGVyIG9yIG5vdCB0byBhY3R1YWxseSBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN1Yi1idWZmZXIuCisKK1RvIGltcGxlbWVudCAnbm8tb3ZlcndyaXRlJyBtb2RlLCB0aGUgdXNlcnNwYWNlIGNsaWVudCB3b3VsZCBwcm92aWRlCithbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2sgc29tZXRoaW5nIGxpa2UgdGhlCitmb2xsb3dpbmc6CisKK3N0YXRpYyBpbnQgc3ViYnVmX3N0YXJ0KHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN1YmJ1ZiwKKwkJCXZvaWQgKnByZXZfc3ViYnVmLAorCQkJdW5zaWduZWQgaW50IHByZXZfcGFkZGluZykKK3sKKwlpZiAocHJldl9zdWJidWYpCisJCSooKHVuc2lnbmVkICopcHJldl9zdWJidWYpID0gcHJldl9wYWRkaW5nOworCisJaWYgKHJlbGF5X2J1Zl9mdWxsKGJ1ZikpCisJCXJldHVybiAwOworCisJc3ViYnVmX3N0YXJ0X3Jlc2VydmUoYnVmLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwlyZXR1cm4gMTsKK30KKworSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGZ1bGwsIGkuZS4gYWxsIHN1Yi1idWZmZXJzIHJlbWFpbiB1bmNvbnN1bWVkLAordGhlIGNhbGxiYWNrIHJldHVybnMgMCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBidWZmZXIgc3dpdGNoIHNob3VsZCBub3QKK29jY3VyIHlldCwgaS5lLiB1bnRpbCB0aGUgY29uc3VtZXIgaGFzIGhhZCBhIGNoYW5jZSB0byByZWFkIHRoZQorY3VycmVudCBzZXQgb2YgcmVhZHkgc3ViLWJ1ZmZlcnMuICBGb3IgdGhlIHJlbGF5X2J1Zl9mdWxsKCkgZnVuY3Rpb24KK3RvIG1ha2Ugc2Vuc2UsIHRoZSBjb25zdW1lciBpcyByZXBvbnNpYmxlIGZvciBub3RpZnlpbmcgdGhlIHJlbGF5CitpbnRlcmZhY2Ugd2hlbiBzdWItYnVmZmVycyBoYXZlIGJlZW4gY29uc3VtZWQgdmlhCityZWxheV9zdWJidWZzX2NvbnN1bWVkKCkuICBBbnkgc3Vic2VxdWVudCBhdHRlbXB0cyB0byB3cml0ZSBpbnRvIHRoZQorYnVmZmVyIHdpbGwgYWdhaW4gaW52b2tlIHRoZSBzdWJidWZfc3RhcnQoKSBjYWxsYmFjayB3aXRoIHRoZSBzYW1lCitwYXJhbWV0ZXJzOyBvbmx5IHdoZW4gdGhlIGNvbnN1bWVyIGhhcyBjb25zdW1lZCBvbmUgb3IgbW9yZSBvZiB0aGUKK3JlYWR5IHN1Yi1idWZmZXJzIHdpbGwgcmVsYXlfYnVmX2Z1bGwoKSByZXR1cm4gMCwgaW4gd2hpY2ggY2FzZSB0aGUKK2J1ZmZlciBzd2l0Y2ggY2FuIGNvbnRpbnVlLgorCitUaGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrIGZvciAnb3ZlcndyaXRlJyBtb2RlCit3b3VsZCBiZSB2ZXJ5IHNpbWlsYXI6CisKK3N0YXRpYyBpbnQgc3ViYnVmX3N0YXJ0KHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN1YmJ1ZiwKKwkJCXZvaWQgKnByZXZfc3ViYnVmLAorCQkJdW5zaWduZWQgaW50IHByZXZfcGFkZGluZykKK3sKKwlpZiAocHJldl9zdWJidWYpCisJCSooKHVuc2lnbmVkICopcHJldl9zdWJidWYpID0gcHJldl9wYWRkaW5nOworCisJc3ViYnVmX3N0YXJ0X3Jlc2VydmUoYnVmLCBzaXplb2YodW5zaWduZWQgaW50KSk7CisKKwlyZXR1cm4gMTsKK30KKworSW4gdGhpcyBjYXNlLCB0aGUgcmVsYXlfYnVmX2Z1bGwoKSBjaGVjayBpcyBtZWFuaW5nbGVzcyBhbmQgdGhlCitjYWxsYmFjayBhbHdheXMgcmV0dXJucyAxLCBjYXVzaW5nIHRoZSBidWZmZXIgc3dpdGNoIHRvIG9jY3VyCit1bmNvbmRpdGlvbmFsbHkuICBJdCdzIGFsc28gbWVhbmluZ2xlc3MgZm9yIHRoZSBjbGllbnQgdG8gdXNlIHRoZQorcmVsYXlfc3ViYnVmc19jb25zdW1lZCgpIGZ1bmN0aW9uIGluIHRoaXMgbW9kZSwgYXMgaXQncyBuZXZlcgorY29uc3VsdGVkLgorCitUaGUgZGVmYXVsdCBzdWJidWZfc3RhcnQoKSBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpZiB0aGUgY2xpZW50IGRvZXNuJ3QKK2RlZmluZSBhbnkgY2FsbGJhY2tzLCBvciBkb2Vzbid0IGRlZmluZSB0aGUgc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2ssCitpbXBsZW1lbnRzIHRoZSBzaW1wbGVzdCBwb3NzaWJsZSAnbm8tb3ZlcndyaXRlJyBtb2RlLCBpLmUuIGl0IGRvZXMKK25vdGhpbmcgYnV0IHJldHVybiAwLgorCitIZWFkZXIgaW5mb3JtYXRpb24gY2FuIGJlIHJlc2VydmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzdWItYnVmZmVyCitieSBjYWxsaW5nIHRoZSBzdWJidWZfc3RhcnRfcmVzZXJ2ZSgpIGhlbHBlciBmdW5jdGlvbiBmcm9tIHdpdGhpbiB0aGUKK3N1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrLiAgVGhpcyByZXNlcnZlZCBhcmVhIGNhbiBiZSB1c2VkIHRvIHN0b3JlCit3aGF0ZXZlciBpbmZvcm1hdGlvbiB0aGUgY2xpZW50IHdhbnRzLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHJvb20gaXMKK3Jlc2VydmVkIGluIGVhY2ggc3ViLWJ1ZmZlciB0byBzdG9yZSB0aGUgcGFkZGluZyBjb3VudCBmb3IgdGhhdAorc3ViLWJ1ZmZlci4gIFRoaXMgaXMgZmlsbGVkIGluIGZvciB0aGUgcHJldmlvdXMgc3ViLWJ1ZmZlciBpbiB0aGUKK3N1YmJ1Zl9zdGFydCgpIGltcGxlbWVudGF0aW9uOyB0aGUgcGFkZGluZyB2YWx1ZSBmb3IgdGhlIHByZXZpb3VzCitzdWItYnVmZmVyIGlzIHBhc3NlZCBpbnRvIHRoZSBzdWJidWZfc3RhcnQoKSBjYWxsYmFjayBhbG9uZyB3aXRoIGEKK3BvaW50ZXIgdG8gdGhlIHByZXZpb3VzIHN1Yi1idWZmZXIsIHNpbmNlIHRoZSBwYWRkaW5nIHZhbHVlIGlzbid0Citrbm93biB1bnRpbCBhIHN1Yi1idWZmZXIgaXMgZmlsbGVkLiAgVGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrIGlzCithbHNvIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHN1Yi1idWZmZXIgd2hlbiB0aGUgY2hhbm5lbCBpcyBvcGVuZWQsIHRvCitnaXZlIHRoZSBjbGllbnQgYSBjaGFuY2UgdG8gcmVzZXJ2ZSBzcGFjZSBpbiBpdC4gIEluIHRoaXMgY2FzZSB0aGUKK3ByZXZpb3VzIHN1Yi1idWZmZXIgcG9pbnRlciBwYXNzZWQgaW50byB0aGUgY2FsbGJhY2sgd2lsbCBiZSBOVUxMLCBzbwordGhlIGNsaWVudCBzaG91bGQgY2hlY2sgdGhlIHZhbHVlIG9mIHRoZSBwcmV2X3N1YmJ1ZiBwb2ludGVyIGJlZm9yZQord3JpdGluZyBpbnRvIHRoZSBwcmV2aW91cyBzdWItYnVmZmVyLgorCitXcml0aW5nIHRvIGEgY2hhbm5lbAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworS2VybmVsIGNsaWVudHMgd3JpdGUgZGF0YSBpbnRvIHRoZSBjdXJyZW50IGNwdSdzIGNoYW5uZWwgYnVmZmVyIHVzaW5nCityZWxheV93cml0ZSgpIG9yIF9fcmVsYXlfd3JpdGUoKS4gIHJlbGF5X3dyaXRlKCkgaXMgdGhlIG1haW4gbG9nZ2luZworZnVuY3Rpb24gLSBpdCB1c2VzIGxvY2FsX2lycXNhdmUoKSB0byBwcm90ZWN0IHRoZSBidWZmZXIgYW5kIHNob3VsZCBiZQordXNlZCBpZiB5b3UgbWlnaHQgYmUgbG9nZ2luZyBmcm9tIGludGVycnVwdCBjb250ZXh0LiAgSWYgeW91IGtub3cKK3lvdSdsbCBuZXZlciBiZSBsb2dnaW5nIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHlvdSBjYW4gdXNlCitfX3JlbGF5X3dyaXRlKCksIHdoaWNoIG9ubHkgZGlzYWJsZXMgcHJlZW1wdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucworZG9uJ3QgcmV0dXJuIGEgdmFsdWUsIHNvIHlvdSBjYW4ndCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhleQorZmFpbGVkIC0gdGhlIGFzc3VtcHRpb24gaXMgdGhhdCB5b3Ugd291bGRuJ3Qgd2FudCB0byBjaGVjayBhIHJldHVybgordmFsdWUgaW4gdGhlIGZhc3QgbG9nZ2luZyBwYXRoIGFueXdheSwgYW5kIHRoYXQgdGhleSdsbCBhbHdheXMgc3VjY2VlZAordW5sZXNzIHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgbm8tb3ZlcndyaXRlIG1vZGUgaXMgYmVpbmcgdXNlZCwgaW4KK3doaWNoIGNhc2UgeW91IGNhbiBkZXRlY3QgYSBmYWlsZWQgd3JpdGUgaW4gdGhlIHN1YmJ1Zl9zdGFydCgpCitjYWxsYmFjayBieSBjYWxsaW5nIHRoZSByZWxheV9idWZfZnVsbCgpIGhlbHBlciBmdW5jdGlvbi4KKworcmVsYXlfcmVzZXJ2ZSgpIGlzIHVzZWQgdG8gcmVzZXJ2ZSBhIHNsb3QgaW4gYSBjaGFubmVsIGJ1ZmZlciB3aGljaAorY2FuIGJlIHdyaXR0ZW4gdG8gbGF0ZXIuICBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSB1c2VkIGluIGFwcGxpY2F0aW9ucwordGhhdCBuZWVkIHRvIHdyaXRlIGRpcmVjdGx5IGludG8gYSBjaGFubmVsIGJ1ZmZlciB3aXRob3V0IGhhdmluZyB0bworc3RhZ2UgZGF0YSBpbiBhIHRlbXBvcmFyeSBidWZmZXIgYmVmb3JlaGFuZC4gIEJlY2F1c2UgdGhlIGFjdHVhbCB3cml0ZQorbWF5IG5vdCBoYXBwZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNsb3QgaXMgcmVzZXJ2ZWQsIGFwcGxpY2F0aW9ucwordXNpbmcgcmVsYXlfcmVzZXJ2ZSgpIGNhbiBrZWVwIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseQord3JpdHRlbiwgZWl0aGVyIGluIHNwYWNlIHJlc2VydmVkIGluIHRoZSBzdWItYnVmZmVycyB0aGVtc2VsdmVzIG9yIGFzCithIHNlcGFyYXRlIGFycmF5LiAgU2VlIHRoZSAncmVzZXJ2ZScgZXhhbXBsZSBpbiB0aGUgcmVsYXktYXBwcyB0YXJiYWxsCithdCBodHRwOi8vcmVsYXlmcy5zb3VyY2Vmb3JnZS5uZXQgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRoaXMgY2FuIGJlCitkb25lLiAgQmVjYXVzZSB0aGUgd3JpdGUgaXMgdW5kZXIgY29udHJvbCBvZiB0aGUgY2xpZW50IGFuZCBpcworc2VwYXJhdGVkIGZyb20gdGhlIHJlc2VydmUsIHJlbGF5X3Jlc2VydmUoKSBkb2Vzbid0IHByb3RlY3QgdGhlIGJ1ZmZlcgorYXQgYWxsIC0gaXQncyB1cCB0byB0aGUgY2xpZW50IHRvIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlCitzeW5jaHJvbml6YXRpb24gd2hlbiB1c2luZyByZWxheV9yZXNlcnZlKCkuCisKK0Nsb3NpbmcgYSBjaGFubmVsCistLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgY2xpZW50IGNhbGxzIHJlbGF5X2Nsb3NlKCkgd2hlbiBpdCdzIGZpbmlzaGVkIHVzaW5nIHRoZSBjaGFubmVsLgorVGhlIGNoYW5uZWwgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1ZmZlcnMgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZXJlIGFyZSBubworbG9uZ2VyIGFueSByZWZlcmVuY2VzIHRvIGFueSBvZiB0aGUgY2hhbm5lbCBidWZmZXJzLiAgcmVsYXlfZmx1c2goKQorZm9yY2VzIGEgc3ViLWJ1ZmZlciBzd2l0Y2ggb24gYWxsIHRoZSBjaGFubmVsIGJ1ZmZlcnMsIGFuZCBjYW4gYmUgdXNlZAordG8gZmluYWxpemUgYW5kIHByb2Nlc3MgdGhlIGxhc3Qgc3ViLWJ1ZmZlcnMgYmVmb3JlIHRoZSBjaGFubmVsIGlzCitjbG9zZWQuCisKK01pc2MKKy0tLS0KKworU29tZSBhcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8ga2VlcCBhIGNoYW5uZWwgYXJvdW5kIGFuZCByZS11c2UgaXQKK3JhdGhlciB0aGFuIG9wZW4gYW5kIGNsb3NlIGEgbmV3IGNoYW5uZWwgZm9yIGVhY2ggdXNlLiAgcmVsYXlfcmVzZXQoKQorY2FuIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZSAtIGl0IHJlc2V0cyBhIGNoYW5uZWwgdG8gaXRzIGluaXRpYWwKK3N0YXRlIHdpdGhvdXQgcmVhbGxvY2F0aW5nIGNoYW5uZWwgYnVmZmVyIG1lbW9yeSBvciBkZXN0cm95aW5nCitleGlzdGluZyBtYXBwaW5ncy4gIEl0IHNob3VsZCBob3dldmVyIG9ubHkgYmUgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvCitkbyBzbywgaS5lLiB3aGVuIHRoZSBjaGFubmVsIGlzbid0IGN1cnJlbnRseSBiZWluZyB3cml0dGVuIHRvLgorCitGaW5hbGx5LCB0aGVyZSBhcmUgYSBjb3VwbGUgb2YgdXRpbGl0eSBjYWxsYmFja3MgdGhhdCBjYW4gYmUgdXNlZCBmb3IKK2RpZmZlcmVudCBwdXJwb3Nlcy4gIGJ1Zl9tYXBwZWQoKSBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBjaGFubmVsIGJ1ZmZlcgoraXMgbW1hcHBlZCBmcm9tIHVzZXIgc3BhY2UgYW5kIGJ1Zl91bm1hcHBlZCgpIGlzIGNhbGxlZCB3aGVuIGl0J3MKK3VubWFwcGVkLiAgVGhlIGNsaWVudCBjYW4gdXNlIHRoaXMgbm90aWZpY2F0aW9uIHRvIHRyaWdnZXIgYWN0aW9ucword2l0aGluIHRoZSBrZXJuZWwgYXBwbGljYXRpb24sIHN1Y2ggYXMgZW5hYmxpbmcvZGlzYWJsaW5nIGxvZ2dpbmcgdG8KK3RoZSBjaGFubmVsLgorCisKK1Jlc291cmNlcworPT09PT09PT09CisKK0ZvciBuZXdzLCBleGFtcGxlIGNvZGUsIG1haWxpbmcgbGlzdCwgZXRjLiBzZWUgdGhlIHJlbGF5IGludGVyZmFjZSBob21lcGFnZToKKworICAgIGh0dHA6Ly9yZWxheWZzLnNvdXJjZWZvcmdlLm5ldAorCisKK0NyZWRpdHMKKz09PT09PT0KKworVGhlIGlkZWFzIGFuZCBzcGVjcyBmb3IgdGhlIHJlbGF5IGludGVyZmFjZSBjYW1lIGFib3V0IGFzIGEgcmVzdWx0IG9mCitkaXNjdXNzaW9ucyBvbiB0cmFjaW5nIGludm9sdmluZyB0aGUgZm9sbG93aW5nOgorCitNaWNoZWwgRGFnZW5haXMJCTxtaWNoZWwuZGFnZW5haXNAcG9seW10bC5jYT4KK1JpY2hhcmQgTW9vcmUJCTxyaWNoYXJkal9tb29yZUB1ay5pYm0uY29tPgorQm9iIFdpc25pZXdza2kJCTxib2JAd2F0c29uLmlibS5jb20+CitLYXJpbSBZYWdobW91cgkJPGthcmltQG9wZXJzeXMuY29tPgorVG9tIFphbnVzc2kJCTx6YW51c3NpQHVzLmlibS5jb20+CisKK0Fsc28gdGhhbmtzIHRvIEh1YmVydHVzIEZyYW5rZSBmb3IgYSBsb3Qgb2YgdXNlZnVsIHN1Z2dlc3Rpb25zIGFuZCBidWcKK3JlcG9ydHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9yZWxheWZzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTgzMjM3Ny4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3JlbGF5ZnMudHh0CisrKyAvZGV2L251bGwKQEAgLTEsNDQyICswLDAgQEAKLQotcmVsYXlmcyAtIGEgaGlnaC1zcGVlZCBkYXRhIHJlbGF5IGZpbGVzeXN0ZW0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXJlbGF5ZnMgaXMgYSBmaWxlc3lzdGVtIGRlc2lnbmVkIHRvIHByb3ZpZGUgYW4gZWZmaWNpZW50IG1lY2hhbmlzbSBmb3IKLXRvb2xzIGFuZCBmYWNpbGl0aWVzIHRvIHJlbGF5IGxhcmdlIGFuZCBwb3RlbnRpYWxseSBzdXN0YWluZWQgc3RyZWFtcwotb2YgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0byB1c2VyIHNwYWNlLgotCi1UaGUgbWFpbiBhYnN0cmFjdGlvbiBvZiByZWxheWZzIGlzIHRoZSAnY2hhbm5lbCcuICBBIGNoYW5uZWwgY29uc2lzdHMKLW9mIGEgc2V0IG9mIHBlci1jcHUga2VybmVsIGJ1ZmZlcnMgZWFjaCByZXByZXNlbnRlZCBieSBhIGZpbGUgaW4gdGhlCi1yZWxheWZzIGZpbGVzeXN0ZW0uICBLZXJuZWwgY2xpZW50cyB3cml0ZSBpbnRvIGEgY2hhbm5lbCB1c2luZwotZWZmaWNpZW50IHdyaXRlIGZ1bmN0aW9ucyB3aGljaCBhdXRvbWF0aWNhbGx5IGxvZyB0byB0aGUgY3VycmVudCBjcHUncwotY2hhbm5lbCBidWZmZXIuICBVc2VyIHNwYWNlIGFwcGxpY2F0aW9ucyBtbWFwKCkgdGhlIHBlci1jcHUgZmlsZXMgYW5kCi1yZXRyaWV2ZSB0aGUgZGF0YSBhcyBpdCBiZWNvbWVzIGF2YWlsYWJsZS4KLQotVGhlIGZvcm1hdCBvZiB0aGUgZGF0YSBsb2dnZWQgaW50byB0aGUgY2hhbm5lbCBidWZmZXJzIGlzIGNvbXBsZXRlbHkKLXVwIHRvIHRoZSByZWxheWZzIGNsaWVudDsgcmVsYXlmcyBkb2VzIGhvd2V2ZXIgcHJvdmlkZSBob29rcyB3aGljaAotYWxsb3cgY2xpZW50cyB0byBpbXBvc2Ugc29tZSBzdHJ1Y3R1cmUgb24gdGhlIGJ1ZmZlciBkYXRhLiAgTm9yIGRvZXMKLXJlbGF5ZnMgaW1wbGVtZW50IGFueSBmb3JtIG9mIGRhdGEgZmlsdGVyaW5nIC0gdGhpcyBhbHNvIGlzIGxlZnQgdG8KLXRoZSBjbGllbnQuICBUaGUgcHVycG9zZSBpcyB0byBrZWVwIHJlbGF5ZnMgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLgotCi1UaGlzIGRvY3VtZW50IHByb3ZpZGVzIGFuIG92ZXJ2aWV3IG9mIHRoZSByZWxheWZzIEFQSS4gIFRoZSBkZXRhaWxzIG9mCi10aGUgZnVuY3Rpb24gcGFyYW1ldGVycyBhcmUgZG9jdW1lbnRlZCBhbG9uZyB3aXRoIHRoZSBmdW5jdGlvbnMgaW4gdGhlCi1maWxlc3lzdGVtIGNvZGUgLSBwbGVhc2Ugc2VlIHRoYXQgZm9yIGRldGFpbHMuCi0KLVNlbWFudGljcwotPT09PT09PT09Ci0KLUVhY2ggcmVsYXlmcyBjaGFubmVsIGhhcyBvbmUgYnVmZmVyIHBlciBDUFUsIGVhY2ggYnVmZmVyIGhhcyBvbmUgb3IKLW1vcmUgc3ViLWJ1ZmZlcnMuIE1lc3NhZ2VzIGFyZSB3cml0dGVuIHRvIHRoZSBmaXJzdCBzdWItYnVmZmVyIHVudGlsCi1pdCBpcyB0b28gZnVsbCB0byBjb250YWluIGEgbmV3IG1lc3NhZ2UsIGluIHdoaWNoIGNhc2UgaXQgaXQgaXMKLXdyaXR0ZW4gdG8gdGhlIG5leHQgKGlmIGF2YWlsYWJsZSkuICBNZXNzYWdlcyBhcmUgbmV2ZXIgc3BsaXQgYWNyb3NzCi1zdWItYnVmZmVycy4gIEF0IHRoaXMgcG9pbnQsIHVzZXJzcGFjZSBjYW4gYmUgbm90aWZpZWQgc28gaXQgZW1wdGllcwotdGhlIGZpcnN0IHN1Yi1idWZmZXIsIHdoaWxlIHRoZSBrZXJuZWwgY29udGludWVzIHdyaXRpbmcgdG8gdGhlIG5leHQuCi0KLVdoZW4gbm90aWZpZWQgdGhhdCBhIHN1Yi1idWZmZXIgaXMgZnVsbCwgdGhlIGtlcm5lbCBrbm93cyBob3cgbWFueQotYnl0ZXMgb2YgaXQgYXJlIHBhZGRpbmcgaS5lLiB1bnVzZWQuICBVc2Vyc3BhY2UgY2FuIHVzZSB0aGlzIGtub3dsZWRnZQotdG8gY29weSBvbmx5IHZhbGlkIGRhdGEuCi0KLUFmdGVyIGNvcHlpbmcgaXQsIHVzZXJzcGFjZSBjYW4gbm90aWZ5IHRoZSBrZXJuZWwgdGhhdCBhIHN1Yi1idWZmZXIKLWhhcyBiZWVuIGNvbnN1bWVkLgotCi1yZWxheWZzIGNhbiBvcGVyYXRlIGluIGEgbW9kZSB3aGVyZSBpdCB3aWxsIG92ZXJ3cml0ZSBkYXRhIG5vdCB5ZXQKLWNvbGxlY3RlZCBieSB1c2Vyc3BhY2UsIGFuZCBub3Qgd2FpdCBmb3IgaXQgdG8gY29uc3VtZSBpdC4KLQotcmVsYXlmcyBpdHNlbGYgZG9lcyBub3QgcHJvdmlkZSBmb3IgY29tbXVuaWNhdGlvbiBvZiBzdWNoIGRhdGEgYmV0d2VlbgotdXNlcnNwYWNlIGFuZCBrZXJuZWwsIGFsbG93aW5nIHRoZSBrZXJuZWwgc2lkZSB0byByZW1haW4gc2ltcGxlIGFuZAotbm90IGltcG9zZSBhIHNpbmdsZSBpbnRlcmZhY2Ugb24gdXNlcnNwYWNlLiBJdCBkb2VzIHByb3ZpZGUgYSBzZXQgb2YKLWV4YW1wbGVzIGFuZCBhIHNlcGFyYXRlIGhlbHBlciB0aG91Z2gsIGRlc2NyaWJlZCBiZWxvdy4KLQota2xvZyBhbmQgcmVsYXktYXBwcyBleGFtcGxlIGNvZGUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLXJlbGF5ZnMgaXRzZWxmIGlzIHJlYWR5IHRvIHVzZSwgYnV0IHRvIG1ha2UgdGhpbmdzIGVhc2llciwgYSBjb3VwbGUKLXNpbXBsZSB1dGlsaXR5IGZ1bmN0aW9ucyBhbmQgYSBzZXQgb2YgZXhhbXBsZXMgYXJlIHByb3ZpZGVkLgotCi1UaGUgcmVsYXktYXBwcyBleGFtcGxlIHRhcmJhbGwsIGF2YWlsYWJsZSBvbiB0aGUgcmVsYXlmcyBzb3VyY2Vmb3JnZQotc2l0ZSwgY29udGFpbnMgYSBzZXQgb2Ygc2VsZi1jb250YWluZWQgZXhhbXBsZXMsIGVhY2ggY29uc2lzdGluZyBvZiBhCi1wYWlyIG9mIC5jIGZpbGVzIGNvbnRhaW5pbmcgYm9pbGVycGxhdGUgY29kZSBmb3IgZWFjaCBvZiB0aGUgdXNlciBhbmQKLWtlcm5lbCBzaWRlcyBvZiBhIHJlbGF5ZnMgYXBwbGljYXRpb247IGNvbWJpbmVkIHRoZXNlIHR3byBzZXRzIG9mCi1ib2lsZXJwbGF0ZSBjb2RlIHByb3ZpZGUgZ2x1ZSB0byBlYXNpbHkgc3RyZWFtIGRhdGEgdG8gZGlzaywgd2l0aG91dAotaGF2aW5nIHRvIGJvdGhlciB3aXRoIG11bmRhbmUgaG91c2VrZWVwaW5nIGNob3Jlcy4KLQotVGhlICdrbG9nIGRlYnVnZ2luZyBmdW5jdGlvbnMnIHBhdGNoIChrbG9nLnBhdGNoIGluIHRoZSByZWxheS1hcHBzCi10YXJiYWxsKSBwcm92aWRlcyBhIGNvdXBsZSBvZiBoaWdoLWxldmVsIGxvZ2dpbmcgZnVuY3Rpb25zIHRvIHRoZQota2VybmVsIHdoaWNoIGFsbG93IHdyaXRpbmcgZm9ybWF0dGVkIHRleHQgb3IgcmF3IGRhdGEgdG8gYSBjaGFubmVsLAotcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGEgY2hhbm5lbCB0byB3cml0ZSBpbnRvIGV4aXN0cyBvciBub3QsIG9yCi13aGV0aGVyIHJlbGF5ZnMgaXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsIG9yIGlzIGNvbmZpZ3VyZWQgYXMgYQotbW9kdWxlLiAgVGhlc2UgZnVuY3Rpb25zIGFsbG93IHlvdSB0byBwdXQgdW5jb25kaXRpb25hbCAndHJhY2UnCi1zdGF0ZW1lbnRzIGFueXdoZXJlIGluIHRoZSBrZXJuZWwgb3Iga2VybmVsIG1vZHVsZXM7IG9ubHkgd2hlbiB0aGVyZQotaXMgYSAna2xvZyBoYW5kbGVyJyByZWdpc3RlcmVkIHdpbGwgZGF0YSBhY3R1YWxseSBiZSBsb2dnZWQgKHNlZSB0aGUKLWtsb2cgYW5kIGtsZWFrIGV4YW1wbGVzIGZvciBkZXRhaWxzKS4KLQotSXQgaXMgb2YgY291cnNlIHBvc3NpYmxlIHRvIHVzZSByZWxheWZzIGZyb20gc2NyYXRjaCBpLmUuIHdpdGhvdXQKLXVzaW5nIGFueSBvZiB0aGUgcmVsYXktYXBwcyBleGFtcGxlIGNvZGUgb3Iga2xvZywgYnV0IHlvdSdsbCBoYXZlIHRvCi1pbXBsZW1lbnQgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQga2VybmVsLCBhbGxvd2luZyBib3RoIHRvCi1jb252ZXkgdGhlIHN0YXRlIG9mIGJ1ZmZlcnMgKGZ1bGwsIGVtcHR5LCBhbW91bnQgb2YgcGFkZGluZykuCi0KLWtsb2cgYW5kIHRoZSByZWxheS1hcHBzIGV4YW1wbGVzIGNhbiBiZSBmb3VuZCBpbiB0aGUgcmVsYXktYXBwcwotdGFyYmFsbCBvbiBodHRwOi8vcmVsYXlmcy5zb3VyY2Vmb3JnZS5uZXQKLQotCi1UaGUgcmVsYXlmcyB1c2VyIHNwYWNlIEFQSQotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotcmVsYXlmcyBpbXBsZW1lbnRzIGJhc2ljIGZpbGUgb3BlcmF0aW9ucyBmb3IgdXNlciBzcGFjZSBhY2Nlc3MgdG8KLXJlbGF5ZnMgY2hhbm5lbCBidWZmZXIgZGF0YS4gIEhlcmUgYXJlIHRoZSBmaWxlIG9wZXJhdGlvbnMgdGhhdCBhcmUKLWF2YWlsYWJsZSBhbmQgc29tZSBjb21tZW50cyByZWdhcmRpbmcgdGhlaXIgYmVoYXZpb3I6Ci0KLW9wZW4oKQkgZW5hYmxlcyB1c2VyIHRvIG9wZW4gYW4gX2V4aXN0aW5nXyBidWZmZXIuCi0KLW1tYXAoKQkgcmVzdWx0cyBpbiBjaGFubmVsIGJ1ZmZlciBiZWluZyBtYXBwZWQgaW50byB0aGUgY2FsbGVyJ3MKLQkgbWVtb3J5IHNwYWNlLiBOb3RlIHRoYXQgeW91IGNhbid0IGRvIGEgcGFydGlhbCBtbWFwIC0geW91IG11c3QKLQkgbWFwIHRoZSBlbnRpcmUgZmlsZSwgd2hpY2ggaXMgTlJCVUYgKiBTVUJCVUZTSVpFLgotCi1yZWFkKCkJIHJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgY2hhbm5lbCBidWZmZXIuICBUaGUgYnl0ZXMgcmVhZCBhcmUKLQkgJ2NvbnN1bWVkJyBieSB0aGUgcmVhZGVyIGkuZS4gdGhleSB3b24ndCBiZSBhdmFpbGFibGUgYWdhaW4KLQkgdG8gc3Vic2VxdWVudCByZWFkcy4gIElmIHRoZSBjaGFubmVsIGlzIGJlaW5nIHVzZWQgaW4KLQkgbm8tb3ZlcndyaXRlIG1vZGUgKHRoZSBkZWZhdWx0KSwgaXQgY2FuIGJlIHJlYWQgYXQgYW55IHRpbWUKLQkgZXZlbiBpZiB0aGVyZSdzIGFuIGFjdGl2ZSBrZXJuZWwgd3JpdGVyLiAgSWYgdGhlIGNoYW5uZWwgaXMKLQkgYmVpbmcgdXNlZCBpbiBvdmVyd3JpdGUgbW9kZSBhbmQgdGhlcmUgYXJlIGFjdGl2ZSBjaGFubmVsCi0JIHdyaXRlcnMsIHJlc3VsdHMgbWF5IGJlIHVucHJlZGljdGFibGUgLSB1c2VycyBzaG91bGQgbWFrZQotCSBzdXJlIHRoYXQgYWxsIGxvZ2dpbmcgdG8gdGhlIGNoYW5uZWwgaGFzIGVuZGVkIGJlZm9yZSB1c2luZwotCSByZWFkKCkgd2l0aCBvdmVyd3JpdGUgbW9kZS4KLQotcG9sbCgpCSBQT0xMSU4vUE9MTFJETk9STS9QT0xMRVJSIHN1cHBvcnRlZC4gIFVzZXIgYXBwbGljYXRpb25zIGFyZQotCSBub3RpZmllZCB3aGVuIHN1Yi1idWZmZXIgYm91bmRhcmllcyBhcmUgY3Jvc3NlZC4KLQotY2xvc2UoKSBkZWNyZW1lbnRzIHRoZSBjaGFubmVsIGJ1ZmZlcidzIHJlZmNvdW50LiAgV2hlbiB0aGUgcmVmY291bnQKLQlyZWFjaGVzIDAgaS5lLiB3aGVuIG5vIHByb2Nlc3Mgb3Iga2VybmVsIGNsaWVudCBoYXMgdGhlIGJ1ZmZlcgotCW9wZW4sIHRoZSBjaGFubmVsIGJ1ZmZlciBpcyBmcmVlZC4KLQotCi1JbiBvcmRlciBmb3IgYSB1c2VyIGFwcGxpY2F0aW9uIHRvIG1ha2UgdXNlIG9mIHJlbGF5ZnMgZmlsZXMsIHRoZQotcmVsYXlmcyBmaWxlc3lzdGVtIG11c3QgYmUgbW91bnRlZC4gIEZvciBleGFtcGxlLAotCi0JbW91bnQgLXQgcmVsYXlmcyByZWxheWZzIC9tbnQvcmVsYXkKLQotTk9URToJcmVsYXlmcyBkb2Vzbid0IG5lZWQgdG8gYmUgbW91bnRlZCBmb3Iga2VybmVsIGNsaWVudHMgdG8gY3JlYXRlCi0Jb3IgdXNlIGNoYW5uZWxzIC0gaXQgb25seSBuZWVkcyB0byBiZSBtb3VudGVkIHdoZW4gdXNlciBzcGFjZQotCWFwcGxpY2F0aW9ucyBuZWVkIGFjY2VzcyB0byB0aGUgYnVmZmVyIGRhdGEuCi0KLQotVGhlIHJlbGF5ZnMga2VybmVsIEFQSQotPT09PT09PT09PT09PT09PT09PT09PQotCi1IZXJlJ3MgYSBzdW1tYXJ5IG9mIHRoZSBBUEkgcmVsYXlmcyBwcm92aWRlcyB0byBpbi1rZXJuZWwgY2xpZW50czoKLQotCi0gIGNoYW5uZWwgbWFuYWdlbWVudCBmdW5jdGlvbnM6Ci0KLSAgICByZWxheV9vcGVuKGJhc2VfZmlsZW5hbWUsIHBhcmVudCwgc3ViYnVmX3NpemUsIG5fc3ViYnVmcywKLSAgICAgICAgICAgICAgIGNhbGxiYWNrcykKLSAgICByZWxheV9jbG9zZShjaGFuKQotICAgIHJlbGF5X2ZsdXNoKGNoYW4pCi0gICAgcmVsYXlfcmVzZXQoY2hhbikKLSAgICByZWxheWZzX2NyZWF0ZV9kaXIobmFtZSwgcGFyZW50KQotICAgIHJlbGF5ZnNfcmVtb3ZlX2RpcihkZW50cnkpCi0gICAgcmVsYXlmc19jcmVhdGVfZmlsZShuYW1lLCBwYXJlbnQsIG1vZGUsIGZvcHMsIGRhdGEpCi0gICAgcmVsYXlmc19yZW1vdmVfZmlsZShkZW50cnkpCi0KLSAgY2hhbm5lbCBtYW5hZ2VtZW50IHR5cGljYWxseSBjYWxsZWQgb24gaW5zdGlnYXRpb24gb2YgdXNlcnNwYWNlOgotCi0gICAgcmVsYXlfc3ViYnVmc19jb25zdW1lZChjaGFuLCBjcHUsIHN1YmJ1ZnNfY29uc3VtZWQpCi0KLSAgd3JpdGUgZnVuY3Rpb25zOgotCi0gICAgcmVsYXlfd3JpdGUoY2hhbiwgZGF0YSwgbGVuZ3RoKQotICAgIF9fcmVsYXlfd3JpdGUoY2hhbiwgZGF0YSwgbGVuZ3RoKQotICAgIHJlbGF5X3Jlc2VydmUoY2hhbiwgbGVuZ3RoKQotCi0gIGNhbGxiYWNrczoKLQotICAgIHN1YmJ1Zl9zdGFydChidWYsIHN1YmJ1ZiwgcHJldl9zdWJidWYsIHByZXZfcGFkZGluZykKLSAgICBidWZfbWFwcGVkKGJ1ZiwgZmlscCkKLSAgICBidWZfdW5tYXBwZWQoYnVmLCBmaWxwKQotICAgIGNyZWF0ZV9idWZfZmlsZShmaWxlbmFtZSwgcGFyZW50LCBtb2RlLCBidWYsIGlzX2dsb2JhbCkKLSAgICByZW1vdmVfYnVmX2ZpbGUoZGVudHJ5KQotCi0gIGhlbHBlciBmdW5jdGlvbnM6Ci0KLSAgICByZWxheV9idWZfZnVsbChidWYpCi0gICAgc3ViYnVmX3N0YXJ0X3Jlc2VydmUoYnVmLCBsZW5ndGgpCi0KLQotQ3JlYXRpbmcgYSBjaGFubmVsCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotcmVsYXlfb3BlbigpIGlzIHVzZWQgdG8gY3JlYXRlIGEgY2hhbm5lbCwgYWxvbmcgd2l0aCBpdHMgcGVyLWNwdQotY2hhbm5lbCBidWZmZXJzLiAgRWFjaCBjaGFubmVsIGJ1ZmZlciB3aWxsIGhhdmUgYW4gYXNzb2NpYXRlZCBmaWxlCi1jcmVhdGVkIGZvciBpdCBpbiB0aGUgcmVsYXlmcyBmaWxlc3lzdGVtLCB3aGljaCBjYW4gYmUgb3BlbmVkIGFuZAotbW1hcHBlZCBmcm9tIHVzZXIgc3BhY2UgaWYgZGVzaXJlZC4gIFRoZSBmaWxlcyBhcmUgbmFtZWQKLWJhc2VuYW1lMC4uLmJhc2VuYW1lTi0xIHdoZXJlIE4gaXMgdGhlIG51bWJlciBvZiBvbmxpbmUgY3B1cywgYW5kIGJ5Ci1kZWZhdWx0IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGUgcm9vdCBvZiB0aGUgZmlsZXN5c3RlbS4gIElmIHlvdSB3YW50IGEKLWRpcmVjdG9yeSBzdHJ1Y3R1cmUgdG8gY29udGFpbiB5b3VyIHJlbGF5ZnMgZmlsZXMsIHlvdSBjYW4gY3JlYXRlIGl0Ci13aXRoIHJlbGF5ZnNfY3JlYXRlX2RpcigpIGFuZCBwYXNzIHRoZSBwYXJlbnQgZGlyZWN0b3J5IHRvCi1yZWxheV9vcGVuKCkuICBDbGllbnRzIGFyZSByZXNwb25zaWJsZSBmb3IgY2xlYW5pbmcgdXAgYW55IGRpcmVjdG9yeQotc3RydWN0dXJlIHRoZXkgY3JlYXRlIHdoZW4gdGhlIGNoYW5uZWwgaXMgY2xvc2VkIC0gdXNlCi1yZWxheWZzX3JlbW92ZV9kaXIoKSBmb3IgdGhhdC4KLQotVGhlIHRvdGFsIHNpemUgb2YgZWFjaCBwZXItY3B1IGJ1ZmZlciBpcyBjYWxjdWxhdGVkIGJ5IG11bHRpcGx5aW5nIHRoZQotbnVtYmVyIG9mIHN1Yi1idWZmZXJzIGJ5IHRoZSBzdWItYnVmZmVyIHNpemUgcGFzc2VkIGludG8gcmVsYXlfb3BlbigpLgotVGhlIGlkZWEgYmVoaW5kIHN1Yi1idWZmZXJzIGlzIHRoYXQgdGhleSdyZSBiYXNpY2FsbHkgYW4gZXh0ZW5zaW9uIG9mCi1kb3VibGUtYnVmZmVyaW5nIHRvIE4gYnVmZmVycywgYW5kIHRoZXkgYWxzbyBhbGxvdyBhcHBsaWNhdGlvbnMgdG8KLWVhc2lseSBpbXBsZW1lbnQgcmFuZG9tLWFjY2Vzcy1vbi1idWZmZXItYm91bmRhcnkgc2NoZW1lcywgd2hpY2ggY2FuCi1iZSBpbXBvcnRhbnQgZm9yIHNvbWUgaGlnaC12b2x1bWUgYXBwbGljYXRpb25zLiAgVGhlIG51bWJlciBhbmQgc2l6ZQotb2Ygc3ViLWJ1ZmZlcnMgaXMgY29tcGxldGVseSBkZXBlbmRlbnQgb24gdGhlIGFwcGxpY2F0aW9uIGFuZCBldmVuIGZvcgotdGhlIHNhbWUgYXBwbGljYXRpb24sIGRpZmZlcmVudCBjb25kaXRpb25zIHdpbGwgd2FycmFudCBkaWZmZXJlbnQKLXZhbHVlcyBmb3IgdGhlc2UgcGFyYW1ldGVycyBhdCBkaWZmZXJlbnQgdGltZXMuICBUeXBpY2FsbHksIHRoZSByaWdodAotdmFsdWVzIHRvIHVzZSBhcmUgYmVzdCBkZWNpZGVkIGFmdGVyIHNvbWUgZXhwZXJpbWVudGF0aW9uOyBpbiBnZW5lcmFsLAotdGhvdWdoLCBpdCdzIHNhZmUgdG8gYXNzdW1lIHRoYXQgaGF2aW5nIG9ubHkgMSBzdWItYnVmZmVyIGlzIGEgYmFkCi1pZGVhIC0geW91J3JlIGd1YXJhbnRlZWQgdG8gZWl0aGVyIG92ZXJ3cml0ZSBkYXRhIG9yIGxvc2UgZXZlbnRzCi1kZXBlbmRpbmcgb24gdGhlIGNoYW5uZWwgbW9kZSBiZWluZyB1c2VkLgotCi1DaGFubmVsICdtb2RlcycKLS0tLS0tLS0tLS0tLS0tLQotCi1yZWxheWZzIGNoYW5uZWxzIGNhbiBiZSB1c2VkIGluIGVpdGhlciBvZiB0d28gbW9kZXMgLSAnb3ZlcndyaXRlJyBvcgotJ25vLW92ZXJ3cml0ZScuICBUaGUgbW9kZSBpcyBlbnRpcmVseSBkZXRlcm1pbmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbgotb2YgdGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrLCBhcyBkZXNjcmliZWQgYmVsb3cuICBJbiAnb3ZlcndyaXRlJwotbW9kZSwgYWxzbyBrbm93biBhcyAnZmxpZ2h0IHJlY29yZGVyJyBtb2RlLCB3cml0ZXMgY29udGludW91c2x5IGN5Y2xlCi1hcm91bmQgdGhlIGJ1ZmZlciBhbmQgd2lsbCBuZXZlciBmYWlsLCBidXQgd2lsbCB1bmNvbmRpdGlvbmFsbHkKLW92ZXJ3cml0ZSBvbGQgZGF0YSByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQncyBhY3R1YWxseSBiZWVuIGNvbnN1bWVkLgotSW4gbm8tb3ZlcndyaXRlIG1vZGUsIHdyaXRlcyB3aWxsIGZhaWwgaS5lLiBkYXRhIHdpbGwgYmUgbG9zdCwgaWYgdGhlCi1udW1iZXIgb2YgdW5jb25zdW1lZCBzdWItYnVmZmVycyBlcXVhbHMgdGhlIHRvdGFsIG51bWJlciBvZgotc3ViLWJ1ZmZlcnMgaW4gdGhlIGNoYW5uZWwuICBJdCBzaG91bGQgYmUgY2xlYXIgdGhhdCBpZiB0aGVyZSBpcyBubwotY29uc3VtZXIgb3IgaWYgdGhlIGNvbnN1bWVyIGNhbid0IGNvbnN1bWUgc3ViLWJ1ZmZlcnMgZmFzdCBlbm91Z2h0LAotZGF0YSB3aWxsIGJlIGxvc3QgaW4gZWl0aGVyIGNhc2U7IHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2hldGhlciBkYXRhCi1pcyBsb3N0IGZyb20gdGhlIGJlZ2lubmluZyBvciB0aGUgZW5kIG9mIGEgYnVmZmVyLgotCi1BcyBleHBsYWluZWQgYWJvdmUsIGEgcmVsYXlmcyBjaGFubmVsIGlzIG1hZGUgb2YgdXAgb25lIG9yIG1vcmUKLXBlci1jcHUgY2hhbm5lbCBidWZmZXJzLCBlYWNoIGltcGxlbWVudGVkIGFzIGEgY2lyY3VsYXIgYnVmZmVyCi1zdWJkaXZpZGVkIGludG8gb25lIG9yIG1vcmUgc3ViLWJ1ZmZlcnMuICBNZXNzYWdlcyBhcmUgd3JpdHRlbiBpbnRvCi10aGUgY3VycmVudCBzdWItYnVmZmVyIG9mIHRoZSBjaGFubmVsJ3MgY3VycmVudCBwZXItY3B1IGJ1ZmZlciB2aWEgdGhlCi13cml0ZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGJlbG93LiAgV2hlbmV2ZXIgYSBtZXNzYWdlIGNhbid0IGZpdCBpbnRvCi10aGUgY3VycmVudCBzdWItYnVmZmVyLCBiZWNhdXNlIHRoZXJlJ3Mgbm8gcm9vbSBsZWZ0IGZvciBpdCwgdGhlCi1jbGllbnQgaXMgbm90aWZpZWQgdmlhIHRoZSBzdWJidWZfc3RhcnQoKSBjYWxsYmFjayB0aGF0IGEgc3dpdGNoIHRvIGEKLW5ldyBzdWItYnVmZmVyIGlzIGFib3V0IHRvIG9jY3VyLiAgVGhlIGNsaWVudCB1c2VzIHRoaXMgY2FsbGJhY2sgdG8gMSkKLWluaXRpYWxpemUgdGhlIG5leHQgc3ViLWJ1ZmZlciBpZiBhcHByb3ByaWF0ZSAyKSBmaW5hbGl6ZSB0aGUgcHJldmlvdXMKLXN1Yi1idWZmZXIgaWYgYXBwcm9wcmlhdGUgYW5kIDMpIHJldHVybiBhIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZwotd2hldGhlciBvciBub3QgdG8gYWN0dWFsbHkgZ28gYWhlYWQgd2l0aCB0aGUgc3ViLWJ1ZmZlciBzd2l0Y2guCi0KLVRvIGltcGxlbWVudCAnbm8tb3ZlcndyaXRlJyBtb2RlLCB0aGUgdXNlcnNwYWNlIGNsaWVudCB3b3VsZCBwcm92aWRlCi1hbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2sgc29tZXRoaW5nIGxpa2UgdGhlCi1mb2xsb3dpbmc6Ci0KLXN0YXRpYyBpbnQgc3ViYnVmX3N0YXJ0KHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnN1YmJ1ZiwKLQkJCXZvaWQgKnByZXZfc3ViYnVmLAotCQkJdW5zaWduZWQgaW50IHByZXZfcGFkZGluZykKLXsKLQlpZiAocHJldl9zdWJidWYpCi0JCSooKHVuc2lnbmVkICopcHJldl9zdWJidWYpID0gcHJldl9wYWRkaW5nOwotCi0JaWYgKHJlbGF5X2J1Zl9mdWxsKGJ1ZikpCi0JCXJldHVybiAwOwotCi0Jc3ViYnVmX3N0YXJ0X3Jlc2VydmUoYnVmLCBzaXplb2YodW5zaWduZWQgaW50KSk7Ci0KLQlyZXR1cm4gMTsKLX0KLQotSWYgdGhlIGN1cnJlbnQgYnVmZmVyIGlzIGZ1bGwgaS5lLiBhbGwgc3ViLWJ1ZmZlcnMgcmVtYWluIHVuY29uc3VtZWQsCi10aGUgY2FsbGJhY2sgcmV0dXJucyAwIHRvIGluZGljYXRlIHRoYXQgdGhlIGJ1ZmZlciBzd2l0Y2ggc2hvdWxkIG5vdAotb2NjdXIgeWV0IGkuZS4gdW50aWwgdGhlIGNvbnN1bWVyIGhhcyBoYWQgYSBjaGFuY2UgdG8gcmVhZCB0aGUgY3VycmVudAotc2V0IG9mIHJlYWR5IHN1Yi1idWZmZXJzLiAgRm9yIHRoZSByZWxheV9idWZfZnVsbCgpIGZ1bmN0aW9uIHRvIG1ha2UKLXNlbnNlLCB0aGUgY29uc3VtZXIgaXMgcmVwb25zaWJsZSBmb3Igbm90aWZ5aW5nIHJlbGF5ZnMgd2hlbgotc3ViLWJ1ZmZlcnMgaGF2ZSBiZWVuIGNvbnN1bWVkIHZpYSByZWxheV9zdWJidWZzX2NvbnN1bWVkKCkuICBBbnkKLXN1YnNlcXVlbnQgYXR0ZW1wdHMgdG8gd3JpdGUgaW50byB0aGUgYnVmZmVyIHdpbGwgYWdhaW4gaW52b2tlIHRoZQotc3ViYnVmX3N0YXJ0KCkgY2FsbGJhY2sgd2l0aCB0aGUgc2FtZSBwYXJhbWV0ZXJzOyBvbmx5IHdoZW4gdGhlCi1jb25zdW1lciBoYXMgY29uc3VtZWQgb25lIG9yIG1vcmUgb2YgdGhlIHJlYWR5IHN1Yi1idWZmZXJzIHdpbGwKLXJlbGF5X2J1Zl9mdWxsKCkgcmV0dXJuIDAsIGluIHdoaWNoIGNhc2UgdGhlIGJ1ZmZlciBzd2l0Y2ggY2FuCi1jb250aW51ZS4KLQotVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBzdWJidWZfc3RhcnQoKSBjYWxsYmFjayBmb3IgJ292ZXJ3cml0ZScgbW9kZQotd291bGQgYmUgdmVyeSBzaW1pbGFyOgotCi1zdGF0aWMgaW50IHN1YmJ1Zl9zdGFydChzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzdWJidWYsCi0JCQl2b2lkICpwcmV2X3N1YmJ1ZiwKLQkJCXVuc2lnbmVkIGludCBwcmV2X3BhZGRpbmcpCi17Ci0JaWYgKHByZXZfc3ViYnVmKQotCQkqKCh1bnNpZ25lZCAqKXByZXZfc3ViYnVmKSA9IHByZXZfcGFkZGluZzsKLQotCXN1YmJ1Zl9zdGFydF9yZXNlcnZlKGJ1Ziwgc2l6ZW9mKHVuc2lnbmVkIGludCkpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLUluIHRoaXMgY2FzZSwgdGhlIHJlbGF5X2J1Zl9mdWxsKCkgY2hlY2sgaXMgbWVhbmluZ2xlc3MgYW5kIHRoZQotY2FsbGJhY2sgYWx3YXlzIHJldHVybnMgMSwgY2F1c2luZyB0aGUgYnVmZmVyIHN3aXRjaCB0byBvY2N1cgotdW5jb25kaXRpb25hbGx5LiAgSXQncyBhbHNvIG1lYW5pbmdsZXNzIGZvciB0aGUgY2xpZW50IHRvIHVzZSB0aGUKLXJlbGF5X3N1YmJ1ZnNfY29uc3VtZWQoKSBmdW5jdGlvbiBpbiB0aGlzIG1vZGUsIGFzIGl0J3MgbmV2ZXIKLWNvbnN1bHRlZC4KLQotVGhlIGRlZmF1bHQgc3ViYnVmX3N0YXJ0KCkgaW1wbGVtZW50YXRpb24sIHVzZWQgaWYgdGhlIGNsaWVudCBkb2Vzbid0Ci1kZWZpbmUgYW55IGNhbGxiYWNrcywgb3IgZG9lc24ndCBkZWZpbmUgdGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrLAotaW1wbGVtZW50cyB0aGUgc2ltcGxlc3QgcG9zc2libGUgJ25vLW92ZXJ3cml0ZScgbW9kZSBpLmUuIGl0IGRvZXMKLW5vdGhpbmcgYnV0IHJldHVybiAwLgotCi1IZWFkZXIgaW5mb3JtYXRpb24gY2FuIGJlIHJlc2VydmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzdWItYnVmZmVyCi1ieSBjYWxsaW5nIHRoZSBzdWJidWZfc3RhcnRfcmVzZXJ2ZSgpIGhlbHBlciBmdW5jdGlvbiBmcm9tIHdpdGhpbiB0aGUKLXN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrLiAgVGhpcyByZXNlcnZlZCBhcmVhIGNhbiBiZSB1c2VkIHRvIHN0b3JlCi13aGF0ZXZlciBpbmZvcm1hdGlvbiB0aGUgY2xpZW50IHdhbnRzLiAgSW4gdGhlIGV4YW1wbGUgYWJvdmUsIHJvb20gaXMKLXJlc2VydmVkIGluIGVhY2ggc3ViLWJ1ZmZlciB0byBzdG9yZSB0aGUgcGFkZGluZyBjb3VudCBmb3IgdGhhdAotc3ViLWJ1ZmZlci4gIFRoaXMgaXMgZmlsbGVkIGluIGZvciB0aGUgcHJldmlvdXMgc3ViLWJ1ZmZlciBpbiB0aGUKLXN1YmJ1Zl9zdGFydCgpIGltcGxlbWVudGF0aW9uOyB0aGUgcGFkZGluZyB2YWx1ZSBmb3IgdGhlIHByZXZpb3VzCi1zdWItYnVmZmVyIGlzIHBhc3NlZCBpbnRvIHRoZSBzdWJidWZfc3RhcnQoKSBjYWxsYmFjayBhbG9uZyB3aXRoIGEKLXBvaW50ZXIgdG8gdGhlIHByZXZpb3VzIHN1Yi1idWZmZXIsIHNpbmNlIHRoZSBwYWRkaW5nIHZhbHVlIGlzbid0Ci1rbm93biB1bnRpbCBhIHN1Yi1idWZmZXIgaXMgZmlsbGVkLiAgVGhlIHN1YmJ1Zl9zdGFydCgpIGNhbGxiYWNrIGlzCi1hbHNvIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHN1Yi1idWZmZXIgd2hlbiB0aGUgY2hhbm5lbCBpcyBvcGVuZWQsIHRvCi1naXZlIHRoZSBjbGllbnQgYSBjaGFuY2UgdG8gcmVzZXJ2ZSBzcGFjZSBpbiBpdC4gIEluIHRoaXMgY2FzZSB0aGUKLXByZXZpb3VzIHN1Yi1idWZmZXIgcG9pbnRlciBwYXNzZWQgaW50byB0aGUgY2FsbGJhY2sgd2lsbCBiZSBOVUxMLCBzbwotdGhlIGNsaWVudCBzaG91bGQgY2hlY2sgdGhlIHZhbHVlIG9mIHRoZSBwcmV2X3N1YmJ1ZiBwb2ludGVyIGJlZm9yZQotd3JpdGluZyBpbnRvIHRoZSBwcmV2aW91cyBzdWItYnVmZmVyLgotCi1Xcml0aW5nIHRvIGEgY2hhbm5lbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQota2VybmVsIGNsaWVudHMgd3JpdGUgZGF0YSBpbnRvIHRoZSBjdXJyZW50IGNwdSdzIGNoYW5uZWwgYnVmZmVyIHVzaW5nCi1yZWxheV93cml0ZSgpIG9yIF9fcmVsYXlfd3JpdGUoKS4gIHJlbGF5X3dyaXRlKCkgaXMgdGhlIG1haW4gbG9nZ2luZwotZnVuY3Rpb24gLSBpdCB1c2VzIGxvY2FsX2lycXNhdmUoKSB0byBwcm90ZWN0IHRoZSBidWZmZXIgYW5kIHNob3VsZCBiZQotdXNlZCBpZiB5b3UgbWlnaHQgYmUgbG9nZ2luZyBmcm9tIGludGVycnVwdCBjb250ZXh0LiAgSWYgeW91IGtub3cKLXlvdSdsbCBuZXZlciBiZSBsb2dnaW5nIGZyb20gaW50ZXJydXB0IGNvbnRleHQsIHlvdSBjYW4gdXNlCi1fX3JlbGF5X3dyaXRlKCksIHdoaWNoIG9ubHkgZGlzYWJsZXMgcHJlZW1wdGlvbi4gIFRoZXNlIGZ1bmN0aW9ucwotZG9uJ3QgcmV0dXJuIGEgdmFsdWUsIHNvIHlvdSBjYW4ndCBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgdGhleQotZmFpbGVkIC0gdGhlIGFzc3VtcHRpb24gaXMgdGhhdCB5b3Ugd291bGRuJ3Qgd2FudCB0byBjaGVjayBhIHJldHVybgotdmFsdWUgaW4gdGhlIGZhc3QgbG9nZ2luZyBwYXRoIGFueXdheSwgYW5kIHRoYXQgdGhleSdsbCBhbHdheXMgc3VjY2VlZAotdW5sZXNzIHRoZSBidWZmZXIgaXMgZnVsbCBhbmQgbm8tb3ZlcndyaXRlIG1vZGUgaXMgYmVpbmcgdXNlZCwgaW4KLXdoaWNoIGNhc2UgeW91IGNhbiBkZXRlY3QgYSBmYWlsZWQgd3JpdGUgaW4gdGhlIHN1YmJ1Zl9zdGFydCgpCi1jYWxsYmFjayBieSBjYWxsaW5nIHRoZSByZWxheV9idWZfZnVsbCgpIGhlbHBlciBmdW5jdGlvbi4KLQotcmVsYXlfcmVzZXJ2ZSgpIGlzIHVzZWQgdG8gcmVzZXJ2ZSBhIHNsb3QgaW4gYSBjaGFubmVsIGJ1ZmZlciB3aGljaAotY2FuIGJlIHdyaXR0ZW4gdG8gbGF0ZXIuICBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSB1c2VkIGluIGFwcGxpY2F0aW9ucwotdGhhdCBuZWVkIHRvIHdyaXRlIGRpcmVjdGx5IGludG8gYSBjaGFubmVsIGJ1ZmZlciB3aXRob3V0IGhhdmluZyB0bwotc3RhZ2UgZGF0YSBpbiBhIHRlbXBvcmFyeSBidWZmZXIgYmVmb3JlaGFuZC4gIEJlY2F1c2UgdGhlIGFjdHVhbCB3cml0ZQotbWF5IG5vdCBoYXBwZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHNsb3QgaXMgcmVzZXJ2ZWQsIGFwcGxpY2F0aW9ucwotdXNpbmcgcmVsYXlfcmVzZXJ2ZSgpIGNhbiBrZWVwIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBieXRlcyBhY3R1YWxseQotd3JpdHRlbiwgZWl0aGVyIGluIHNwYWNlIHJlc2VydmVkIGluIHRoZSBzdWItYnVmZmVycyB0aGVtc2VsdmVzIG9yIGFzCi1hIHNlcGFyYXRlIGFycmF5LiAgU2VlIHRoZSAncmVzZXJ2ZScgZXhhbXBsZSBpbiB0aGUgcmVsYXktYXBwcyB0YXJiYWxsCi1hdCBodHRwOi8vcmVsYXlmcy5zb3VyY2Vmb3JnZS5uZXQgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRoaXMgY2FuIGJlCi1kb25lLiAgQmVjYXVzZSB0aGUgd3JpdGUgaXMgdW5kZXIgY29udHJvbCBvZiB0aGUgY2xpZW50IGFuZCBpcwotc2VwYXJhdGVkIGZyb20gdGhlIHJlc2VydmUsIHJlbGF5X3Jlc2VydmUoKSBkb2Vzbid0IHByb3RlY3QgdGhlIGJ1ZmZlcgotYXQgYWxsIC0gaXQncyB1cCB0byB0aGUgY2xpZW50IHRvIHByb3ZpZGUgdGhlIGFwcHJvcHJpYXRlCi1zeW5jaHJvbml6YXRpb24gd2hlbiB1c2luZyByZWxheV9yZXNlcnZlKCkuCi0KLUNsb3NpbmcgYSBjaGFubmVsCi0tLS0tLS0tLS0tLS0tLS0tLQotCi1UaGUgY2xpZW50IGNhbGxzIHJlbGF5X2Nsb3NlKCkgd2hlbiBpdCdzIGZpbmlzaGVkIHVzaW5nIHRoZSBjaGFubmVsLgotVGhlIGNoYW5uZWwgYW5kIGl0cyBhc3NvY2lhdGVkIGJ1ZmZlcnMgYXJlIGRlc3Ryb3llZCB3aGVuIHRoZXJlIGFyZSBubwotbG9uZ2VyIGFueSByZWZlcmVuY2VzIHRvIGFueSBvZiB0aGUgY2hhbm5lbCBidWZmZXJzLiAgcmVsYXlfZmx1c2goKQotZm9yY2VzIGEgc3ViLWJ1ZmZlciBzd2l0Y2ggb24gYWxsIHRoZSBjaGFubmVsIGJ1ZmZlcnMsIGFuZCBjYW4gYmUgdXNlZAotdG8gZmluYWxpemUgYW5kIHByb2Nlc3MgdGhlIGxhc3Qgc3ViLWJ1ZmZlcnMgYmVmb3JlIHRoZSBjaGFubmVsIGlzCi1jbG9zZWQuCi0KLUNyZWF0aW5nIG5vbi1yZWxheSBmaWxlcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXJlbGF5X29wZW4oKSBhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgZmlsZXMgaW4gdGhlIHJlbGF5ZnMgZmlsZXN5c3RlbSB0bwotcmVwcmVzZW50IHRoZSBwZXItY3B1IGtlcm5lbCBidWZmZXJzOyBpdCdzIG9mdGVuIHVzZWZ1bCBmb3IKLWFwcGxpY2F0aW9ucyB0byBiZSBhYmxlIHRvIGNyZWF0ZSB0aGVpciBvd24gZmlsZXMgYWxvbmdzaWRlIHRoZSByZWxheQotZmlsZXMgaW4gdGhlIHJlbGF5ZnMgZmlsZXN5c3RlbSBhcyB3ZWxsIGUuZy4gJ2NvbnRyb2wnIGZpbGVzIG11Y2ggbGlrZQotdGhvc2UgY3JlYXRlZCBpbiAvcHJvYyBvciBkZWJ1Z2ZzIGZvciBzaW1pbGFyIHB1cnBvc2VzLCB1c2VkIHRvCi1jb21tdW5pY2F0ZSBjb250cm9sIGluZm9ybWF0aW9uIGJldHdlZW4gdGhlIGtlcm5lbCBhbmQgdXNlciBzaWRlcyBvZiBhCi1yZWxheWZzIGFwcGxpY2F0aW9uLiAgRm9yIHRoaXMgcHVycG9zZSB0aGUgcmVsYXlmc19jcmVhdGVfZmlsZSgpIGFuZAotcmVsYXlmc19yZW1vdmVfZmlsZSgpIEFQSSBmdW5jdGlvbnMgZXhpc3QuICBGb3IgcmVsYXlmc19jcmVhdGVfZmlsZSgpLAotdGhlIGNhbGxlciBwYXNzZXMgaW4gYSBzZXQgb2YgdXNlci1kZWZpbmVkIGZpbGUgb3BlcmF0aW9ucyB0byBiZSB1c2VkCi1mb3IgdGhlIGZpbGUgYW5kIGFuIG9wdGlvbmFsIHZvaWQgKiB0byBhIHVzZXItc3BlY2lmaWVkIGRhdGEgaXRlbSwKLXdoaWNoIHdpbGwgYmUgYWNjZXNzaWJsZSB2aWEgaW5vZGUtPnUuZ2VuZXJpY19pcCAoc2VlIHRoZSByZWxheS1hcHBzCi10YXJiYWxsIGZvciBleGFtcGxlcykuICBUaGUgZmlsZV9vcGVyYXRpb25zIGFyZSBhIHJlcXVpcmVkIHBhcmFtZXRlcgotdG8gcmVsYXlmc19jcmVhdGVfZmlsZSgpIGFuZCB0aHVzIHRoZSBzZW1hbnRpY3Mgb2YgdGhlc2UgZmlsZXMgYXJlCi1jb21wbGV0ZWx5IGRlZmluZWQgYnkgdGhlIGNhbGxlci4KLQotU2VlIHRoZSByZWxheS1hcHBzIHRhcmJhbGwgYXQgaHR0cDovL3JlbGF5ZnMuc291cmNlZm9yZ2UubmV0IGZvcgotZXhhbXBsZXMgb2YgaG93IHRoZXNlIG5vbi1yZWxheSBmaWxlcyBhcmUgbWVhbnQgdG8gYmUgdXNlZC4KLQotQ3JlYXRpbmcgcmVsYXkgZmlsZXMgaW4gb3RoZXIgZmlsZXN5c3RlbXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUJ5IGRlZmF1bHQgb2YgY291cnNlLCByZWxheV9vcGVuKCkgY3JlYXRlcyByZWxheSBmaWxlcyBpbiB0aGUgcmVsYXlmcwotZmlsZXN5c3RlbS4gIEJlY2F1c2UgcmVsYXlfZmlsZV9vcGVyYXRpb25zIGlzIGV4cG9ydGVkLCBob3dldmVyLCBpdCdzCi1hbHNvIHBvc3NpYmxlIHRvIGNyZWF0ZSBhbmQgdXNlIHJlbGF5IGZpbGVzIGluIG90aGVyIHBzZXVkby1maWxlc3l0ZW1zCi1zdWNoIGFzIGRlYnVnZnMuCi0KLUZvciB0aGlzIHB1cnBvc2UsIHR3byBjYWxsYmFjayBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkLAotY3JlYXRlX2J1Zl9maWxlKCkgYW5kIHJlbW92ZV9idWZfZmlsZSgpLiAgY3JlYXRlX2J1Zl9maWxlKCkgaXMgY2FsbGVkCi1vbmNlIGZvciBlYWNoIHBlci1jcHUgYnVmZmVyIGZyb20gcmVsYXlfb3BlbigpIHRvIGFsbG93IHRoZSBjbGllbnQgdG8KLWNyZWF0ZSBhIGZpbGUgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgdGhlIGNvcnJlc3BvbmRpbmcgYnVmZmVyOyBpZgotdGhpcyBjYWxsYmFjayBpcyBub3QgZGVmaW5lZCwgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2lsbCBjcmVhdGUKLWFuZCByZXR1cm4gYSBmaWxlIGluIHRoZSByZWxheWZzIGZpbGVzeXN0ZW0gdG8gcmVwcmVzZW50IHRoZSBidWZmZXIuCi1UaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiB0aGUgZGVudHJ5IG9mIHRoZSBmaWxlIGNyZWF0ZWQgdG8gcmVwcmVzZW50Ci10aGUgcmVsYXkgYnVmZmVyLiAgTm90ZSB0aGF0IHRoZSBwYXJlbnQgZGlyZWN0b3J5IHBhc3NlZCB0bwotcmVsYXlfb3BlbigpIChhbmQgcGFzc2VkIGFsb25nIHRvIHRoZSBjYWxsYmFjayksIGlmIHNwZWNpZmllZCwgbXVzdAotZXhpc3QgaW4gdGhlIHNhbWUgZmlsZXN5c3RlbSB0aGUgbmV3IHJlbGF5IGZpbGUgaXMgY3JlYXRlZCBpbi4gIElmCi1jcmVhdGVfYnVmX2ZpbGUoKSBpcyBkZWZpbmVkLCByZW1vdmVfYnVmX2ZpbGUoKSBtdXN0IGFsc28gYmUgZGVmaW5lZDsKLWl0J3MgcmVzcG9uc2libGUgZm9yIGRlbGV0aW5nIHRoZSBmaWxlKHMpIGNyZWF0ZWQgaW4gY3JlYXRlX2J1Zl9maWxlKCkKLWFuZCBpcyBjYWxsZWQgZHVyaW5nIHJlbGF5X2Nsb3NlKCkuCi0KLVRoZSBjcmVhdGVfYnVmX2ZpbGUoKSBpbXBsZW1lbnRhdGlvbiBjYW4gYWxzbyBiZSBkZWZpbmVkIGluIHN1Y2ggYSB3YXkKLWFzIHRvIGFsbG93IHRoZSBjcmVhdGlvbiBvZiBhIHNpbmdsZSAnZ2xvYmFsJyBidWZmZXIgaW5zdGVhZCBvZiB0aGUKLWRlZmF1bHQgcGVyLWNwdSBzZXQuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGFwcGxpY2F0aW9ucyBpbnRlcmVzdGVkCi1tYWlubHkgaW4gc2VlaW5nIHRoZSByZWxhdGl2ZSBvcmRlcmluZyBvZiBzeXN0ZW0td2lkZSBldmVudHMgd2l0aG91dAotdGhlIG5lZWQgdG8gYm90aGVyIHdpdGggc2F2aW5nIGV4cGxpY2l0IHRpbWVzdGFtcHMgZm9yIHRoZSBwdXJwb3NlIG9mCi1tZXJnaW5nL3NvcnRpbmcgcGVyLWNwdSBmaWxlcyBpbiBhIHBvc3Rwcm9jZXNzaW5nIHN0ZXAuCi0KLVRvIGhhdmUgcmVsYXlfb3BlbigpIGNyZWF0ZSBhIGdsb2JhbCBidWZmZXIsIHRoZSBjcmVhdGVfYnVmX2ZpbGUoKQotaW1wbGVtZW50YXRpb24gc2hvdWxkIHNldCB0aGUgdmFsdWUgb2YgdGhlIGlzX2dsb2JhbCBvdXRwYXJhbSB0byBhCi1ub24temVybyB2YWx1ZSBpbiBhZGRpdGlvbiB0byBjcmVhdGluZyB0aGUgZmlsZSB0aGF0IHdpbGwgYmUgdXNlZCB0bwotcmVwcmVzZW50IHRoZSBzaW5nbGUgYnVmZmVyLiAgSW4gdGhlIGNhc2Ugb2YgYSBnbG9iYWwgYnVmZmVyLAotY3JlYXRlX2J1Zl9maWxlKCkgYW5kIHJlbW92ZV9idWZfZmlsZSgpIHdpbGwgYmUgY2FsbGVkIG9ubHkgb25jZS4gIFRoZQotbm9ybWFsIGNoYW5uZWwtd3JpdGluZyBmdW5jdGlvbnMgZS5nLiByZWxheV93cml0ZSgpIGNhbiBzdGlsbCBiZSB1c2VkCi0tIHdyaXRlcyBmcm9tIGFueSBjcHUgd2lsbCB0cmFuc3BhcmVudGx5IGVuZCB1cCBpbiB0aGUgZ2xvYmFsIGJ1ZmZlciAtCi1idXQgc2luY2UgaXQgaXMgYSBnbG9iYWwgYnVmZmVyLCBjYWxsZXJzIHNob3VsZCBtYWtlIHN1cmUgdGhleSB1c2UgdGhlCi1wcm9wZXIgbG9ja2luZyBmb3Igc3VjaCBhIGJ1ZmZlciwgZWl0aGVyIGJ5IHdyYXBwaW5nIHdyaXRlcyBpbiBhCi1zcGlubG9jaywgb3IgYnkgY29weWluZyBhIHdyaXRlIGZ1bmN0aW9uIGZyb20gcmVsYXlmc19mcy5oIGFuZAotY3JlYXRpbmcgYSBsb2NhbCB2ZXJzaW9uIHRoYXQgaW50ZXJuYWxseSBkb2VzIHRoZSBwcm9wZXIgbG9ja2luZy4KLQotU2VlIHRoZSAnZXhwb3J0ZWQtcmVsYXlmaWxlJyBleGFtcGxlcyBpbiB0aGUgcmVsYXktYXBwcyB0YXJiYWxsIGZvcgotZXhhbXBsZXMgb2YgY3JlYXRpbmcgYW5kIHVzaW5nIHJlbGF5IGZpbGVzIGluIGRlYnVnZnMuCi0KLU1pc2MKLS0tLS0KLQotU29tZSBhcHBsaWNhdGlvbnMgbWF5IHdhbnQgdG8ga2VlcCBhIGNoYW5uZWwgYXJvdW5kIGFuZCByZS11c2UgaXQKLXJhdGhlciB0aGFuIG9wZW4gYW5kIGNsb3NlIGEgbmV3IGNoYW5uZWwgZm9yIGVhY2ggdXNlLiAgcmVsYXlfcmVzZXQoKQotY2FuIGJlIHVzZWQgZm9yIHRoaXMgcHVycG9zZSAtIGl0IHJlc2V0cyBhIGNoYW5uZWwgdG8gaXRzIGluaXRpYWwKLXN0YXRlIHdpdGhvdXQgcmVhbGxvY2F0aW5nIGNoYW5uZWwgYnVmZmVyIG1lbW9yeSBvciBkZXN0cm95aW5nCi1leGlzdGluZyBtYXBwaW5ncy4gIEl0IHNob3VsZCBob3dldmVyIG9ubHkgYmUgY2FsbGVkIHdoZW4gaXQncyBzYWZlIHRvCi1kbyBzbyBpLmUuIHdoZW4gdGhlIGNoYW5uZWwgaXNuJ3QgY3VycmVudGx5IGJlaW5nIHdyaXR0ZW4gdG8uCi0KLUZpbmFsbHksIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB1dGlsaXR5IGNhbGxiYWNrcyB0aGF0IGNhbiBiZSB1c2VkIGZvcgotZGlmZmVyZW50IHB1cnBvc2VzLiAgYnVmX21hcHBlZCgpIGlzIGNhbGxlZCB3aGVuZXZlciBhIGNoYW5uZWwgYnVmZmVyCi1pcyBtbWFwcGVkIGZyb20gdXNlciBzcGFjZSBhbmQgYnVmX3VubWFwcGVkKCkgaXMgY2FsbGVkIHdoZW4gaXQncwotdW5tYXBwZWQuICBUaGUgY2xpZW50IGNhbiB1c2UgdGhpcyBub3RpZmljYXRpb24gdG8gdHJpZ2dlciBhY3Rpb25zCi13aXRoaW4gdGhlIGtlcm5lbCBhcHBsaWNhdGlvbiwgc3VjaCBhcyBlbmFibGluZy9kaXNhYmxpbmcgbG9nZ2luZyB0bwotdGhlIGNoYW5uZWwuCi0KLQotUmVzb3VyY2VzCi09PT09PT09PT0KLQotRm9yIG5ld3MsIGV4YW1wbGUgY29kZSwgbWFpbGluZyBsaXN0LCBldGMuIHNlZSB0aGUgcmVsYXlmcyBob21lcGFnZToKLQotICAgIGh0dHA6Ly9yZWxheWZzLnNvdXJjZWZvcmdlLm5ldAotCi0KLUNyZWRpdHMKLT09PT09PT0KLQotVGhlIGlkZWFzIGFuZCBzcGVjcyBmb3IgcmVsYXlmcyBjYW1lIGFib3V0IGFzIGEgcmVzdWx0IG9mIGRpc2N1c3Npb25zCi1vbiB0cmFjaW5nIGludm9sdmluZyB0aGUgZm9sbG93aW5nOgotCi1NaWNoZWwgRGFnZW5haXMJCTxtaWNoZWwuZGFnZW5haXNAcG9seW10bC5jYT4KLVJpY2hhcmQgTW9vcmUJCTxyaWNoYXJkal9tb29yZUB1ay5pYm0uY29tPgotQm9iIFdpc25pZXdza2kJCTxib2JAd2F0c29uLmlibS5jb20+Ci1LYXJpbSBZYWdobW91cgkJPGthcmltQG9wZXJzeXMuY29tPgotVG9tIFphbnVzc2kJCTx6YW51c3NpQHVzLmlibS5jb20+Ci0KLUFsc28gdGhhbmtzIHRvIEh1YmVydHVzIEZyYW5rZSBmb3IgYSBsb3Qgb2YgdXNlZnVsIHN1Z2dlc3Rpb25zIGFuZCBidWcKLXJlcG9ydHMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQgYi9Eb2N1bWVudGF0aW9uL2kzODYvYm9vdC50eHQKaW5kZXggMTAzMTJiZS4uYzUxMzE0YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaTM4Ni9ib290LnR4dApAQCAtMTgxLDYgKzE4MSw3IEBACiAJNSAgRUxJTE8KIAk3ICBHUnVCCiAJOCAgVS1CT09UCisJOSAgWGVuCiAKIAlQbGVhc2UgY29udGFjdCA8aHBhQHp5dG9yLmNvbT4gaWYgeW91IG5lZWQgYSBib290bG9hZGVyIElECiAJdmFsdWUgYXNzaWduZWQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kzODYvemVyby1wYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vaTM4Ni96ZXJvLXBhZ2UudHh0CmluZGV4IGRmMjhjNzQuLmMwNGE0MjFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kzODYvemVyby1wYWdlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2kzODYvemVyby1wYWdlLnR4dApAQCAtNjMsNiArNjMsMTAgQEAKIAkJCQkyIGZvciBib290c2VjdC1sb2FkZXIKIAkJCQkzIGZvciBTWVNMSU5VWAogCQkJCTQgZm9yIEVUSEVSQk9PVAorCQkJCTUgZm9yIEVMSUxPCisJCQkJNyBmb3IgR1J1QgorCQkJCTggZm9yIFUtQk9PVAorCQkJCTkgZm9yIFhlbgogCQkJCVYgPSB2ZXJzaW9uCiAweDIxMQljaGFyCQlsb2FkZmxhZ3M6CiAJCQliaXQwID0gMToga2VybmVsIGlzIGxvYWRlZCBoaWdoIChiekltYWdlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dCBiL0RvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQKaW5kZXggMTg3MDM1NS4uODY0ZmYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbmZpbmliYW5kL2lwb2liLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2luZmluaWJhbmQvaXBvaWIudHh0CkBAIC01MSw4ICs1MSw2IEBACiAKIFJlZmVyZW5jZXMKIAotICBJRVRGIElQIG92ZXIgSW5maW5pQmFuZCAoaXBvaWIpIFdvcmtpbmcgR3JvdXAKLSAgICBodHRwOi8vaWV0Zi5vcmcvaHRtbC5jaGFydGVycy9pcG9pYi1jaGFydGVyLmh0bWwKICAgVHJhbnNtaXNzaW9uIG9mIElQIG92ZXIgSW5maW5pQmFuZCAoSVBvSUIpIChSRkMgNDM5MSkKICAgICBodHRwOi8vaWV0Zi5vcmcvcmZjL3JmYzQzOTEudHh0IAogICBJUCBvdmVyIEluZmluaUJhbmQgKElQb0lCKSBBcmNoaXRlY3R1cmUgKFJGQyA0MzkyKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0IGIvRG9jdW1lbnRhdGlvbi9pbml0cmQudHh0CmluZGV4IGIxYjY0NDAuLjE1ZjFiMzUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5pdHJkLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2luaXRyZC50eHQKQEAgLTcyLDYgKzcyLDIyIEBACiAgICAgaW5pdHJkIGlzIG1vdW50ZWQgYXMgcm9vdCwgYW5kIHRoZSBub3JtYWwgYm9vdCBwcm9jZWR1cmUgaXMgZm9sbG93ZWQsCiAgICAgd2l0aCB0aGUgUkFNIGRpc2sgc3RpbGwgbW91bnRlZCBhcyByb290LgogCitDb21wcmVzc2VkIGNwaW8gaW1hZ2VzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1JlY2VudCBrZXJuZWxzIGhhdmUgc3VwcG9ydCBmb3IgcG9wdWxhdGluZyBhIHJhbWRpc2sgZnJvbSBhIGNvbXByZXNzZWQgY3BpbworYXJjaGl2ZSwgb24gc3VjaCBzeXN0ZW1zLCB0aGUgY3JlYXRpb24gb2YgYSByYW1kaXNrIGltYWdlIGRvZXNuJ3QgbmVlZCB0bworaW52b2x2ZSBzcGVjaWFsIGJsb2NrIGRldmljZXMgb3IgbG9vcGJhY2tzLCB5b3UgbWVyZWx5IGNyZWF0ZSBhIGRpcmVjdG9yeSBvbgorZGlzayB3aXRoIHRoZSBkZXNpcmVkIGluaXRyZCBjb250ZW50LCBjZCB0byB0aGF0IGRpcmVjdG9yeSwgYW5kIHJ1biAoYXMgYW4KK2V4YW1wbGUpOgorCitmaW5kIC4gfCBjcGlvIC0tcXVpZXQgLWMgLW8gfCBnemlwIC05IC1uID4gL2Jvb3QvaW1hZ2VmaWxlLmltZworCitFeGFtaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGFuIGV4aXN0aW5nIGltYWdlIGZpbGUgaXMganVzdCBhcyBzaW1wbGU6CisKK21rZGlyIC90bXAvaW1hZ2VmaWxlCitjZCAvdG1wL2ltYWdlZmlsZQorZ3ppcCAtY2QgL2Jvb3QvaW1hZ2VmaWxlLmltZyB8IGNwaW8gLWltZCAtLXF1aWV0CiAKIEluc3RhbGxhdGlvbgogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lucHV0L2pveXN0aWNrLnR4dCBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0CmluZGV4IGQ1M2I4NTcuLjg0MWMzNTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0CisrKyBiL0RvY3VtZW50YXRpb24vaW5wdXQvam95c3RpY2sudHh0CkBAIC0zOSw3ICszOSw2IEBACiAKICAgVGhlIGlucHV0IHByb2plY3Qgd2Vic2l0ZSBpcyBhdDoKIAotCWh0dHA6Ly93d3cuc3VzZS5jei9kZXZlbG9wbWVudC9pbnB1dC8KIAlodHRwOi8vYXRyZXkua2FybGluLm1mZi5jdW5pLmN6L352b2p0ZWNoL2lucHV0LwogCiAgIFRoZXJlIGlzIGFsc28gYSBtYWlsaW5nIGxpc3QgZm9yIHRoZSBkcml2ZXIgYXQ6CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAppbmRleCAxNGVmMzg2OC4uMDcwNjY5OSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rYnVpbGQvbWFrZWZpbGVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tidWlsZC9tYWtlZmlsZXMudHh0CkBAIC00MDcsNiArNDA3LDIwIEBACiAJVGhlIHNlY29uZCBhcmd1bWVudCBpcyBvcHRpb25hbCwgYW5kIGlmIHN1cHBsaWVkIHdpbGwgYmUgdXNlZAogCWlmIGZpcnN0IGFyZ3VtZW50IGlzIG5vdCBzdXBwb3J0ZWQuCiAKKyAgICBsZC1vcHRpb24KKyAgICAJbGQtb3B0aW9uIGlzIHVzZWQgdG8gY2hlY2sgaWYgJChDQykgd2hlbiB1c2VkIHRvIGxpbmsgb2JqZWN0IGZpbGVzCisJc3VwcG9ydHMgdGhlIGdpdmVuIG9wdGlvbi4gIEFuIG9wdGlvbmFsIHNlY29uZCBvcHRpb24gbWF5IGJlCisJc3BlY2lmaWVkIGlmIGZpcnN0IG9wdGlvbiBhcmUgbm90IHN1cHBvcnRlZC4KKworCUV4YW1wbGU6CisJCSNhcmNoL2kzODYva2VybmVsL01ha2VmaWxlCisJCXZzeXNjYWxsLWZsYWdzICs9ICQoY2FsbCBsZC1vcHRpb24sIC1XbCQoY29tbWEpLS1oYXNoLXN0eWxlPXN5c3YpCisKKwlJbiB0aGUgYWJvdmUgZXhhbXBsZSB2c3lzY2FsbC1mbGFncyB3aWxsIGJlIGFzc2lnbmVkIHRoZSBvcHRpb24KKwktV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2IGlmIGl0IGlzIHN1cHBvcnRlZCBieSAkKENDKS4KKwlUaGUgc2Vjb25kIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCBhbmQgaWYgc3VwcGxpZWQgd2lsbCBiZSB1c2VkCisJaWYgZmlyc3QgYXJndW1lbnQgaXMgbm90IHN1cHBvcnRlZC4KKwogICAgIGNjLW9wdGlvbgogCWNjLW9wdGlvbiBpcyB1c2VkIHRvIGNoZWNrIGlmICQoQ0MpIHN1cHBvcnQgYSBnaXZlbiBvcHRpb24sIGFuZCBub3QKIAlzdXBwb3J0ZWQgdG8gdXNlIGFuIG9wdGlvbmFsIHNlY29uZCBvcHRpb24uCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IGUxMWY3NzIuLjcxZDA1ZjQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC00NDgsOCArNDQ4LDYgQEAKIAkJCUZvcm1hdDogPGFyZWE+Wyw8bm9kZT5dCiAJCQlTZWUgYWxzbyBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGVjbmV0LnR4dC4KIAotCWRlbGF5YWNjdAlbS05MXSBFbmFibGUgcGVyLXRhc2sgZGVsYXkgYWNjb3VudGluZwotCiAJZGhhc2hfZW50cmllcz0JW0tOTF0KIAkJCVNldCBudW1iZXIgb2YgaGFzaCBidWNrZXRzIGZvciBkZW50cnkgY2FjaGUuCiAKQEAgLTY5OSw2ICs2OTcsMTIgQEAKIAlpcHM9CQlbSFcsU0NTSV0gQWRhcHRlYyAvIElCTSBTZXJ2ZVJBSUQgY29udHJvbGxlcgogCQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL3Njc2kvaXBzLmMuCiAKKwlwb3J0cz0JCVtJUF9WU19GVFBdIElQVlMgZnRwIGhlbHBlciBtb2R1bGUKKwkJCURlZmF1bHQgaXMgMjEuCisJCQlVcCB0byA4IChJUF9WU19BUFBfTUFYX1BPUlRTKSBwb3J0cworCQkJbWF5IGJlIHNwZWNpZmllZC4KKwkJCUZvcm1hdDogPHBvcnQ+LDxwb3J0Pi4uLi4KKwogCWlycWZpeHVwCVtIV10KIAkJCVdoZW4gYW4gaW50ZXJydXB0IGlzIG5vdCBoYW5kbGVkIHNlYXJjaCBhbGwgaGFuZGxlcnMKIAkJCWZvciBpdC4gSW50ZW5kZWQgdG8gZ2V0IHN5c3RlbXMgd2l0aCBiYWRseSBicm9rZW4KQEAgLTEwMzEsNiArMTAzNSw4IEBACiAKIAlub2NhY2hlCQlbQVJNXQogCisJbm9kZWxheWFjY3QJW0tOTF0gRGlzYWJsZSBwZXItdGFzayBkZWxheSBhY2NvdW50aW5nCisKIAlub2Rpc2Nvbm5lY3QJW0hXLFNDU0ksTTY4S10gRGlzYWJsZXMgU0NTSSBkaXNjb25uZWN0cy4KIAogCW5vZXhlYwkJW0lBLTY0XQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dCBiL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKaW5kZXggOGQ5YmZmYi4uOTQ5ZjdiNSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tvYmplY3QudHh0CkBAIC0yNDcsNyArMjQ3LDcgQEAKIC0gZGVmYXVsdF9hdHRyczogRGVmYXVsdCBhdHRyaWJ1dGVzIHRvIGJlIGV4cG9ydGVkIHZpYSBzeXNmcyB3aGVuIHRoZQogICBvYmplY3QgaXMgcmVnaXN0ZXJlZC5Ob3RlIHRoYXQgdGhlIGxhc3QgYXR0cmlidXRlIGhhcyB0byBiZQogICBpbml0aWFsaXplZCB0byBOVUxMICEgWW91IGNhbiBmaW5kIGEgY29tcGxldGUgaW1wbGVtZW50YXRpb24KLSAgaW4gZHJpdmVycy9ibG9jay9nZW5oZC5jCisgIGluIGJsb2NrL2dlbmhkLmMKIAogCiBJbnN0YW5jZXMgb2Ygc3RydWN0IGtvYmpfdHlwZSBhcmUgbm90IHJlZ2lzdGVyZWQ7IG9ubHkgcmVmZXJlbmNlZCBieQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL0xJQ0VOU0UucWxhM3h4eCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9MSUNFTlNFLnFsYTN4eHgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyMDc3ZQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9MSUNFTlNFLnFsYTN4eHgKQEAgLTAsMCArMSw0NiBAQAorQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorUUxvZ2ljIExpbnV4IE5ldHdvcmtpbmcgSEJBIERyaXZlcgorCitUaGlzIHByb2dyYW0gaW5jbHVkZXMgYSBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCAyLjYgdGhhdCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIHdpdGggUUxvZ2ljIGhhcmR3YXJlIHNwZWNpZmljIGZpcm13YXJlIGJpbmFyeSBmaWxlLgorWW91IG1heSBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgZGV2aWNlIGRyaXZlciBjb2RlIHVuZGVyIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uICh2ZXJzaW9uIDIgb3IgYSBsYXRlciB2ZXJzaW9uKS4KKworWW91IG1heSByZWRpc3RyaWJ1dGUgdGhlIGhhcmR3YXJlIHNwZWNpZmljIGZpcm13YXJlIGJpbmFyeSBmaWxlCit1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zOgorCisJMS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgKG9ubHkgaWYgYXBwbGljYWJsZSksCisJICAgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorCSAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworCTIuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorCSAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKKwkgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKwkgICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisJMy4gVGhlIG5hbWUgb2YgUUxvZ2ljIENvcnBvcmF0aW9uIG1heSBub3QgYmUgdXNlZCB0bworCSAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorCSAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisKK1JFR0FSRExFU1MgT0YgV0hBVCBMSUNFTlNJTkcgTUVDSEFOSVNNIElTIFVTRUQgT1IgQVBQTElDQUJMRSwKK1RISVMgUFJPR1JBTSBJUyBQUk9WSURFRCBCWSBRTE9HSUMgQ09SUE9SQVRJT04gIkFTIElTJycgQU5EIEFOWQorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUgorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KK0FOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitVU0VSIEFDS05PV0xFREdFUyBBTkQgQUdSRUVTIFRIQVQgVVNFIE9GIFRISVMgUFJPR1JBTSBXSUxMIE5PVAorQ1JFQVRFIE9SIEdJVkUgR1JPVU5EUyBGT1IgQSBMSUNFTlNFIEJZIElNUExJQ0FUSU9OLCBFU1RPUFBFTCwgT1IKK09USEVSV0lTRSBJTiBBTlkgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyAoUEFURU5ULCBDT1BZUklHSFQsCitUUkFERSBTRUNSRVQsIE1BU0sgV09SSywgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQpIEVNQk9ESUVEIElOCitBTlkgT1RIRVIgUUxPR0lDIEhBUkRXQVJFIE9SIFNPRlRXQVJFIEVJVEhFUiBTT0xFTFkgT1IgSU4KK0NPTUJJTkFUSU9OIFdJVEggVEhJUyBQUk9HUkFNLgorCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGQ0NjMzOGEuLjkwZWQ3ODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CkBAIC0xMDIsOSArMTAyLDE1IEBACiBUQ1AgdmFyaWFibGVzOiAKIAogdGNwX2FiYyAtIElOVEVHRVIKLQlDb250cm9scyBBcHByb3ByaWF0ZSBCeXRlIENvdW50IGRlZmluZWQgaW4gUkZDMzQ2NS4gSWYgc2V0IHRvCi0JMCB0aGVuIGRvZXMgY29uZ2VzdGlvbiBhdm9pZCBvbmNlIHBlciBhY2suIDEgaXMgY29uc2VydmF0aXZlCi0JdmFsdWUsIGFuZCAyIGlzIG1vcmUgYWdyZXNzaXZlLgorCUNvbnRyb2xzIEFwcHJvcHJpYXRlIEJ5dGUgQ291bnQgKEFCQykgZGVmaW5lZCBpbiBSRkMzNDY1LgorCUFCQyBpcyBhIHdheSBvZiBpbmNyZWFzaW5nIGNvbmdlc3Rpb24gd2luZG93IChjd25kKSBtb3JlIHNsb3dseQorCWluIHJlc3BvbnNlIHRvIHBhcnRpYWwgYWNrbm93bGVkZ21lbnRzLgorCVBvc3NpYmxlIHZhbHVlcyBhcmU6CisJCTAgaW5jcmVhc2UgY3duZCBvbmNlIHBlciBhY2tub3dsZWRnbWVudCAobm8gQUJDKQorCQkxIGluY3JlYXNlIGN3bmQgb25jZSBwZXIgYWNrbm93bGVkZ21lbnQgb2YgZnVsbCBzaXplZCBzZWdtZW50CisJCTIgYWxsb3cgaW5jcmVhc2UgY3duZCBieSB0d28gaWYgYWNrbm93bGVkZ21lbnQgaXMKKwkJICBvZiB0d28gc2VnbWVudHMgdG8gY29tcGVuc2F0ZSBmb3IgZGVsYXllZCBhY2tub3dsZWRnbWVudHMuCisJRGVmYXVsdDogMCAob2ZmKQogCiB0Y3Bfc3luX3JldHJpZXMgLSBJTlRFR0VSCiAJTnVtYmVyIG9mIHRpbWVzIGluaXRpYWwgU1lOcyBmb3IgYW4gYWN0aXZlIFRDUCBjb25uZWN0aW9uIGF0dGVtcHQKQEAgLTI5NCwxNSArMzAwLDE1IEBACiAJRGVmYXVsdDogODczODAqMiBieXRlcy4KIAogdGNwX21lbSAtIHZlY3RvciBvZiAzIElOVEVHRVJzOiBtaW4sIHByZXNzdXJlLCBtYXgKLQlsb3c6IGJlbG93IHRoaXMgbnVtYmVyIG9mIHBhZ2VzIFRDUCBpcyBub3QgYm90aGVyZWQgYWJvdXQgaXRzCisJbWluOiBiZWxvdyB0aGlzIG51bWJlciBvZiBwYWdlcyBUQ1AgaXMgbm90IGJvdGhlcmVkIGFib3V0IGl0cwogCW1lbW9yeSBhcHBldGl0ZS4KIAogCXByZXNzdXJlOiB3aGVuIGFtb3VudCBvZiBtZW1vcnkgYWxsb2NhdGVkIGJ5IFRDUCBleGNlZWRzIHRoaXMgbnVtYmVyCiAJb2YgcGFnZXMsIFRDUCBtb2RlcmF0ZXMgaXRzIG1lbW9yeSBjb25zdW1wdGlvbiBhbmQgZW50ZXJzIG1lbW9yeQogCXByZXNzdXJlIG1vZGUsIHdoaWNoIGlzIGV4aXRlZCB3aGVuIG1lbW9yeSBjb25zdW1wdGlvbiBmYWxscwotCXVuZGVyICJsb3ciLgorCXVuZGVyICJtaW4iLgogCi0JaGlnaDogbnVtYmVyIG9mIHBhZ2VzIGFsbG93ZWQgZm9yIHF1ZXVlaW5nIGJ5IGFsbCBUQ1Agc29ja2V0cy4KKwltYXg6IG51bWJlciBvZiBwYWdlcyBhbGxvd2VkIGZvciBxdWV1ZWluZyBieSBhbGwgVENQIHNvY2tldHMuCiAKIAlEZWZhdWx0cyBhcmUgY2FsY3VsYXRlZCBhdCBib290IHRpbWUgZnJvbSBhbW91bnQgb2YgYXZhaWxhYmxlCiAJbWVtb3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2Jvb3Rpbmctd2l0aG91dC1vZi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAppbmRleCAzYzYyZTY2Li41YzBiYTIzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvYm9vdGluZy13aXRob3V0LW9mLnR4dApAQCAtMTEzNiwxMCArMTEzNiwxMCBAQAogICAgRGV2aWNlcyBjb25uZWN0ZWQgdG8gb3BlblBJQy1jb21wYXRpYmxlIGNvbnRyb2xsZXJzIHNob3VsZCBlbmNvZGUKICAgIHNlbnNlIGFuZCBwb2xhcml0eSBhcyBmb2xsb3dzOgogCi0JMCA9IGhpZ2ggdG8gbG93IGVkZ2Ugc2Vuc2l0aXZlIHR5cGUgZW5hYmxlZAorCTAgPSBsb3cgdG8gaGlnaCBlZGdlIHNlbnNpdGl2ZSB0eXBlIGVuYWJsZWQKIAkxID0gYWN0aXZlIGxvdyBsZXZlbCBzZW5zaXRpdmUgdHlwZSBlbmFibGVkCi0JMiA9IGxvdyB0byBoaWdoIGVkZ2Ugc2Vuc2l0aXZlIHR5cGUgZW5hYmxlZAotCTMgPSBhY3RpdmUgaGlnaCBsZXZlbCBzZW5zaXRpdmUgdHlwZSBlbmFibGVkCisJMiA9IGFjdGl2ZSBoaWdoIGxldmVsIHNlbnNpdGl2ZSB0eXBlIGVuYWJsZWQKKwkzID0gaGlnaCB0byBsb3cgZWRnZSBzZW5zaXRpdmUgdHlwZSBlbmFibGVkCiAKICAgIElTQSBQSUMgaW50ZXJydXB0IGNvbnRyb2xsZXJzIHNob3VsZCBhZGhlcmUgdG8gdGhlIElTQSBQSUMKICAgIGVuY29kaW5ncyBsaXN0ZWQgYmVsb3c6CkBAIC0xMTk2LDcgKzExOTYsNyBAQAogICAgIC0gbW9kZWwgOiBNb2RlbCBvZiB0aGUgZGV2aWNlLiAgQ2FuIGJlICJUU0VDIiwgImVUU0VDIiwgb3IgIkZFQyIKICAgICAtIGNvbXBhdGlibGUgOiBTaG91bGQgYmUgImdpYW5mYXIiCiAgICAgLSByZWcgOiBPZmZzZXQgYW5kIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgc2V0IGZvciB0aGUgZGV2aWNlCi0gICAgLSBhZGRyZXNzIDogTGlzdCBvZiBieXRlcyByZXByZXNlbnRpbmcgdGhlIGV0aGVybmV0IGFkZHJlc3Mgb2YKKyAgICAtIG1hYy1hZGRyZXNzIDogTGlzdCBvZiBieXRlcyByZXByZXNlbnRpbmcgdGhlIGV0aGVybmV0IGFkZHJlc3Mgb2YKICAgICAgIHRoaXMgY29udHJvbGxlcgogICAgIC0gaW50ZXJydXB0cyA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgYW5kIGIgaXMgYQogICAgICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwKQEAgLTEyMTYsNyArMTIxNiw3IEBACiAJCW1vZGVsID0gIlRTRUMiOwogCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQlyZWcgPSA8MjQwMDAgMTAwMD47Ci0JCWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAwIF07CisJCW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOwogCQlpbnRlcnJ1cHRzID0gPGQgMyBlIDMgMTIgMz47CiAJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwogCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+CkBAIC0xNDk4LDcgKzE0OTgsNyBAQAogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDI0MDAwIDEwMDA+OwotCQkJYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDAgXTsKKwkJCW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDxkIDMgZSAzIDEyIDM+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CiAJCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OwpAQCAtMTUxMSw3ICsxNTExLDcgQEAKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKLQkJCWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAxIF07CisJCQltYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKIAkJCWludGVycnVwdHMgPSA8MTMgMyAxNCAzIDE4IDM+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CiAJCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OwpAQCAtMTUyNCw3ICsxNTI0LDcgQEAKIAkJCW1vZGVsID0gIkZFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDI2MDAwIDEwMDA+OwotCQkJYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDIgXTsKKwkJCW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMiBdOwogCQkJaW50ZXJydXB0cyA9IDwxOSAzPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OwogCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAyPjsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLm1lZ2FyYWlkCmluZGV4IGMxNzM4MDYuLmEwNTZiYmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubWVnYXJhaWQKKysrIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5tZWdhcmFpZApAQCAtMSwzICsxLDEyNiBAQAorUmVsZWFzZSBEYXRlCTogRnJpIE1heSAxOSAwOTozMTo0NSBFU1QgMjAwNiAtIFNlb2ttYW5uIEp1IDxzanVAbHNpbC5jb20+CitDdXJyZW50IFZlcnNpb24gOiAyLjIwLjQuOSAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNiAoY21tIG1vZHVsZSkKK09sZGVyIFZlcnNpb24JOiAyLjIwLjQuOCAoc2NzaSBtb2R1bGUpLCAyLjIwLjIuNiAoY21tIG1vZHVsZSkKKworMS4JRml4ZWQgYSBidWcgaW4gbWVnYXJhaWRfaW5pdF9tYm94KCkuCisJQ3VzdG9tZXIgcmVwb3J0ZWQgImdhcmJhZ2UgaW4gZmlsZSBvbiB4ODZfNjQgcGxhdGZvcm0iLgorCVJvb3QgQ2F1c2U6IHRoZSBkcml2ZXIgcmVnaXN0ZXJlZCBjb250cm9sbGVycyBhcyA2NC1iaXQgRE1BIGNhcGFibGUKKwlmb3IgdGhvc2Ugd2hpY2ggYXJlIG5vdCBzdXBwb3J0IGl0LgorCUZpeDogTWFkZSBjaGFuZ2UgaW4gdGhlIGZ1bmN0aW9uIGluc2VydGluZyBpZGVudGlmaWNhdGlvbiBtYWNoYW5pc20KKwlpZGVudGlmeWluZyA2NC1iaXQgRE1BIGNhcGFibGUgY29udHJvbGxlcnMuCisKKwk+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCisJPiBGcm9tOiBWYXNpbHkgQXZlcmluIFttYWlsdG86dnZzQHN3LnJ1XQorCT4gU2VudDogVGh1cnNkYXksIE1heSAwNCwgMjAwNiAyOjQ5IFBNCisJPiBUbzogbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmc7IEtvbGxpLCBOZWVsYTsgTXVra2VyLCBBdHVsOworCT4gSnUsIFNlb2ttYW5uOyBCYWdhbGtvdGUsIFNyZWVuaXZhczsKKwk+IEphbWVzLkJvdHRvbWxleUBTdGVlbEV5ZS5jb207IGRldmVsQG9wZW52ei5vcmcKKwk+IFN1YmplY3Q6IG1lZ2FyYWlkX21ib3g6IGdhcmJhZ2UgaW4gZmlsZQorCT4KKwk+IEhlbGxvIGFsbCwKKwk+CisJPiBJJ3ZlIGludmVzdGlnYXRlZCBjdXN0b21lcnMgY2xhaW0gb24gdGhlIHVuc3RhYmxlIHdvcmsgb2YKKwk+IHRoZWlyIG5vZGUgYW5kIGZvdW5kIGEKKwk+IHN0cmFuZ2UgZWZmZWN0OiByZWFkaW5nIGZyb20gc29tZSBmaWxlcyBsZWFkcyB0byB0aGUKKwk+ICAiYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UiIG1lc3NhZ2VzLgorCT4KKwk+IEkndmUgY2hlY2tlZCBmaWxlc3lzdGVtLCBtZW1vcnkgb24gdGhlIG5vZGUsIG1vdGhlcmJvYXJkIEJJT1MKKwk+IHZlcnNpb24sIGJ1dCBpdAorCT4gZG9lcyBub3QgaGVscCBhbmQgaXNzdWUgc3RpbGwgaGFzIGJlZW4gcmVwcm9kdWNlZCBieSBzaW1wbGUKKwk+IGZpbGUgcmVhZGluZy4KKwk+CisJPiBSZXByb2R1Y2VyIGlzIHNpbXBsZToKKwk+CisJPiBlY2hvIDB4ZmZmZmZmZmYgPi9wcm9jL3N5cy9kZXYvc2NzaS9sb2dnaW5nX2xldmVsIDsKKwk+IGNhdCAvdnovcHJpdmF0ZS8xMDEvcm9vdC9ldGMvbGQuc28uY2FjaGUgPi90bXAvdHR0ICA7CisJPiBlY2hvIDAgPi9wcm9jL3N5cy9kZXYvc2NzaS9sb2dnaW5nCisJPgorCT4gSXQgbGVhZHMgdG8gdGhlIGZvbGxvd2luZyBtZXNzYWdlcyBpbiBkbWVzZworCT4KKwk+IHNkX2luaXRfY29tbWFuZDogZGlzaz1zZGEsIGJsb2NrPTg3MTc2OTI2MCwgY291bnQ9MjYKKwk+IHNkYSA6IGJsb2NrPTg3MTc2OTI2MAorCT4gc2RhIDogcmVhZGluZyAyNi8yNiA1MTIgYnl0ZSBibG9ja3MuCisJPiBzY3NpX2FkZF90aW1lcjogc2NtZDogZjc5ZWQ5ODAsIHRpbWU6IDc1MDAsIChjMDJiMTQyMCkKKwk+IHNkIDA6MTowOjA6IHNlbmQgMHhmNzllZDk4MCAgICAgICAgICAgICAgICAgIHNkIDA6MTowOjA6CisJPiAgICAgICAgIGNvbW1hbmQ6IFJlYWQgKDEwKTogMjggMDAgMzMgZjYgMjQgYWMgMDAgMDAgMWEgMDAKKwk+IGJ1ZmZlciA9IDB4ZjdjZmI1NDAsIGJ1ZmZsZW4gPSAxMzMxMiwgZG9uZSA9IDB4YzAzNjZiNDAsCisJPiBxdWV1ZWNvbW1hbmQgMHhjMDM0NDAxMAorCT4gbGVhdmluZyBzY3NpX2Rpc3BhdGNoX2NtbmQoKQorCT4gc2NzaV9kZWxldGVfdGltZXI6IHNjbWQ6IGY3OWVkOTgwLCBydG46IDEKKwk+IHNkIDA6MTowOjA6IGRvbmUgMHhmNzllZDk4MCBTVUNDRVNTICAgICAgICAwIHNkIDA6MTowOjA6CisJPiAgICAgICAgIGNvbW1hbmQ6IFJlYWQgKDEwKTogMjggMDAgMzMgZjYgMjQgYWMgMDAgMDAgMWEgMDAKKwk+IHNjc2kgaG9zdCBidXN5IDEgZmFpbGVkIDAKKwk+IHNkIDA6MTowOjA6IE5vdGlmeWluZyB1cHBlciBkcml2ZXIgb2YgY29tcGxldGlvbiAocmVzdWx0IDApCisJPiBzZF9yd19pbnRyOiBzZGE6IHJlcz0weDAKKwk+IDI2IHNlY3RvcnMgdG90YWwsIDEzMzEyIGJ5dGVzIGRvbmUuCisJPiB1c2Vfc2cgaXMgNAorCT4gYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UKKwk+IHNkYTY6IHJ3PTAsIHdhbnQ9MTA0NDEzNDQ1OCwgbGltaXQ9OTUxNDAxMzY3CisJPiBCdWZmZXIgSS9PIGVycm9yIG9uIGRldmljZSBzZGE2LCBsb2dpY2FsIGJsb2NrIDUyMjA2NzIyOAorCT4gYXR0ZW1wdCB0byBhY2Nlc3MgYmV5b25kIGVuZCBvZiBkZXZpY2UKKworMi4JV2hlbiBJTlFVSVJZIHdpdGggRVZQRCBiaXQgc2V0IGlzc3VlZCB0byB0aGUgTWVnYVJBSUQgY29udHJvbGxlciwKKwlzeXN0ZW0gbWVtb3J5IGdldHMgY29ycnVwdGVkLgorCVJvb3QgQ2F1c2U6IE1lZ2FSQUlEIEYvVyBoYW5kbGUgdGhlIElOUVVJUlkgd2l0aCBFVlBEIGJpdCBzZXQKKwlpbmNvcnJlY3RseS4KKwlGaXg6IE1lZ2FSQUlEIEYvVyBoYXMgZml4ZWQgdGhlIHByb2JsZW0gYW5kIGJlaW5nIHByb2Nlc3Mgb2YgcmVsZWFzZSwKKwlzb29uLiBNZWFud2hpbGUsIGRyaXZlciB3aWxsIGZpbHRlciBvdXQgdGhlIHJlcXVlc3QuCisKKzMuCU9uZSBvZiBtZW1iZXIgaW4gdGhlIGRhdGEgc3RydWN0dXJlIG9mIHRoZSBkcml2ZXIgbGVhZHMgdW5hbGlnbmUKKwlpc3N1ZSBvbiA2NC1iaXQgcGxhdGZvcm0uCisJQ3VzdG9tZXIgcmVwb3JldGVkICJrZXJuZWwgdW5hbGlnbmVkIGFjY2VzcyBhZGRyc3MiIGlzc3VlIHdoZW4KKwlhcHBsaWNhdGlvbiBjb21tdW5pY2F0ZXMgd2l0aCBNZWdhUkFJRCBIQkEgZHJpdmVyLgorCVJvb3QgQ2F1c2U6IGluIHVpb2NfdCBzdHJ1Y3R1cmUsIG9uZSBvZiBtZW1iZXIgaGFkIG1pc2FsaWduZWQgYW5kIGl0CisJbGVkIHN5c3RlbSB0byBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlLgorCUZpeDogQSBwYXRjaCBzdWJtaXR0ZWQgdG8gY29tbXVuaXR5IGZyb20gZm9sbG93aW5nIGZvbGsuCisKKwk+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tCisJPiBGcm9tOiBsaW51eC1zY3NpLW93bmVyQHZnZXIua2VybmVsLm9yZworCT4gW21haWx0bzpsaW51eC1zY3NpLW93bmVyQHZnZXIua2VybmVsLm9yZ10gT24gQmVoYWxmIE9mIFNha3VyYWkgSGlyb29taQorCT4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDEyLCAyMDA2IDQ6MjAgQU0KKwk+IFRvOiBsaW51eC1zY3NpQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworCT4gU3ViamVjdDogUmU6IEhlbHA6IHN0cmFuZ2UgbWVzc2FnZXMgZnJvbSBrZXJuZWwgb24gSUE2NCBwbGF0Zm9ybQorCT4KKwk+IEhpLAorCT4KKwk+IEkgc2F3IHNhbWUgbWVzc2FnZS4KKwk+CisJPiBXaGVuIEdBTShHbG9iYWwgQXJyYXkgTWFuYWdlcikgaXMgc3RhcnRlZCwgVGhlIGZvbGxvd2luZworCT4gbWVzc2FnZSBvdXRwdXQuCisJPiBrZXJuZWw6IGtlcm5lbCB1bmFsaWduZWQgYWNjZXNzIHRvIDB4ZTAwMDAwMDFmZTEwODBkNCwKKwk+IGlwPTB4YTAwMDAwMDIwMDA1MzM3MQorCT4KKwk+IFRoZSB1aW9jIHN0cnVjdHVyZSB1c2VkIGJ5IGlvY3RsIGlzIGRlZmluZWQgYnkgcGFja2VkLAorCT4gdGhlIGFsbGlnbm1lbnQgb2YgZWFjaCBtZW1iZXIgYXJlIGRpc3R1cmJlZC4KKwk+IEluIGEgNjQgYml0IHN0cnVjdHVyZSwgdGhlIGFsbGlnbm1lbnQgb2YgbWVtYmVyIGRvZXNuJ3QgZml0IDY0IGJpdAorCT4gYm91bmRhcnkuIHRoaXMgY2F1c2VzIHRoaXMgbWVzc2FnZXMuCisJPiBJbiBhIDMyIGJpdCBzdHJ1Y3R1cmUsIHdlIGRvbid0IHNlZSB0aGUgbWVzc2FnZSBiZWNhdXNlIHRoZSBhbGxpbm1lbnQKKwk+IG9mIG1lbWJlciBmaXQgMzIgYml0IGJvdW5kYXJ5IGV2ZW4gaWYgcGFja2VkIGlzIHNwZWNpZmllZC4KKwk+CisJPiBwYXRjaAorCT4gSSBBZGQgMzIgYml0IGR1bW15IG1lbWJlciB0byBmaXQgNjQgYml0IGJvdW5kYXJ5LiBJIHRlc3RlZC4KKwk+IFdlIGNvbmZpcm1lZCB0aGlzIHBhdGNoIGZpeCB0aGUgcHJvYmxlbSBieSBJQTY0IHNlcnZlci4KKwk+CisJPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCT4gKioqKioqKioqKioqKioqKgorCT4gLS0tIGxpbnV4LTIuNi45L2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9pb2N0bC5oLm9yaWcKKwk+IDIwMDYtMDQtMDMgMTc6MTM6MDMuMDAwMDAwMDAwICswOTAwCisJPiArKysgbGludXgtMi42LjkvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX2lvY3RsLmgKKwk+IDIwMDYtMDQtMDMgMTc6MTQ6MDkuMDAwMDAwMDAwICswOTAwCisJPiBAQCAtMTMyLDYgKzEzMiwxMCBAQAorCT4gIC8qIERyaXZlciBEYXRhOiAqLworCT4gICAgICAgICAgdm9pZCBfX3VzZXIgKiAgICAgICAgICAgdXNlcl9kYXRhOworCT4gICAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgdXNlcl9kYXRhX2xlbjsKKwk+ICsKKwk+ICsgICAgICAgIC8qIDY0Yml0IGFsaWdubWVudCAqLworCT4gKyAgICAgICAgdWludDMyX3QgICAgICAgICAgICAgICAgcGFkXzB4QkM7CisJPiArCisJPiAgICAgICAgICBtcmFpZF9wYXNzdGhydV90ICAgICAgICBfX3VzZXIgKnVzZXJfcHRocnU7CisJPgorCT4gICAgICAgICAgbXJhaWRfcGFzc3RocnVfdCAgICAgICAgKnB0aHJ1MzI7CisJPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCT4gKioqKioqKioqKioqKioqKgorCiBSZWxlYXNlIERhdGUJOiBNb24gQXByIDExIDEyOjI3OjIyIEVTVCAyMDA2IC0gU2Vva21hbm4gSnUgPHNqdUBsc2lsLmNvbT4KIEN1cnJlbnQgVmVyc2lvbiA6IDIuMjAuNC44IChzY3NpIG1vZHVsZSksIDIuMjAuMi42IChjbW0gbW9kdWxlKQogT2xkZXIgVmVyc2lvbgk6IDIuMjAuNC43IChzY3NpIG1vZHVsZSksIDIuMjAuMi42IChjbW0gbW9kdWxlKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwvZnMudHh0CmluZGV4IDBiNjJjNjIuLjVjM2E1MTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2ZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9mcy50eHQKQEAgLTI1LDYgKzI1LDcgQEAKIC0gaW5vZGUtc3RhdGUKIC0gb3ZlcmZsb3d1aWQKIC0gb3ZlcmZsb3dnaWQKKy0gc3VpZF9kdW1wYWJsZQogLSBzdXBlci1tYXgKIC0gc3VwZXItbnIKIApAQCAtMTMxLDYgKzEzMiwyNSBAQAogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCitzdWlkX2R1bXBhYmxlOgorCitUaGlzIHZhbHVlIGNhbiBiZSB1c2VkIHRvIHF1ZXJ5IGFuZCBzZXQgdGhlIGNvcmUgZHVtcCBtb2RlIGZvciBzZXR1aWQKK29yIG90aGVyd2lzZSBwcm90ZWN0ZWQvdGFpbnRlZCBiaW5hcmllcy4gVGhlIG1vZGVzIGFyZQorCiswIC0gKGRlZmF1bHQpIC0gdHJhZGl0aW9uYWwgYmVoYXZpb3VyLiBBbnkgcHJvY2VzcyB3aGljaCBoYXMgY2hhbmdlZAorCXByaXZpbGVnZSBsZXZlbHMgb3IgaXMgZXhlY3V0ZSBvbmx5IHdpbGwgbm90IGJlIGR1bXBlZAorMSAtIChkZWJ1ZykgLSBhbGwgcHJvY2Vzc2VzIGR1bXAgY29yZSB3aGVuIHBvc3NpYmxlLiBUaGUgY29yZSBkdW1wIGlzCisJb3duZWQgYnkgdGhlIGN1cnJlbnQgdXNlciBhbmQgbm8gc2VjdXJpdHkgaXMgYXBwbGllZC4gVGhpcyBpcworCWludGVuZGVkIGZvciBzeXN0ZW0gZGVidWdnaW5nIHNpdHVhdGlvbnMgb25seS4gUHRyYWNlIGlzIHVuY2hlY2tlZC4KKzIgLSAoc3VpZHNhZmUpIC0gYW55IGJpbmFyeSB3aGljaCBub3JtYWxseSB3b3VsZCBub3QgYmUgZHVtcGVkIGlzIGR1bXBlZAorCXJlYWRhYmxlIGJ5IHJvb3Qgb25seS4gVGhpcyBhbGxvd3MgdGhlIGVuZCB1c2VyIHRvIHJlbW92ZQorCXN1Y2ggYSBkdW1wIGJ1dCBub3QgYWNjZXNzIGl0IGRpcmVjdGx5LiBGb3Igc2VjdXJpdHkgcmVhc29ucworCWNvcmUgZHVtcHMgaW4gdGhpcyBtb2RlIHdpbGwgbm90IG92ZXJ3cml0ZSBvbmUgYW5vdGhlciBvcgorCW90aGVyIGZpbGVzLiBUaGlzIG1vZGUgaXMgYXBwcm9wcmlhdGUgd2hlbiBhZG1pbnN0cmF0b3JzIGFyZQorCWF0dGVtcHRpbmcgdG8gZGVidWcgcHJvYmxlbXMgaW4gYSBub3JtYWwgZW52aXJvbm1lbnQuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKIHN1cGVyLW1heCAmIHN1cGVyLW5yOgogCiBUaGVzZSBudW1iZXJzIGNvbnRyb2wgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN1cGVyYmxvY2tzLCBhbmQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC9rZXJuZWwudHh0CmluZGV4IGIwYzdhYjkuLjg5YmY4YzIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc3lzY3RsL2tlcm5lbC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9zeXNjdGwva2VybmVsLnR4dApAQCAtNTAsNyArNTAsNiBAQAogLSBzaG1tYXggICAgICAgICAgICAgICAgICAgICAgWyBzeXN2IGlwYyBdCiAtIHNobW1uaQogLSBzdG9wLWEgICAgICAgICAgICAgICAgICAgICAgWyBTUEFSQyBvbmx5IF0KLS0gc3VpZF9kdW1wYWJsZQogLSBzeXNycSAgICAgICAgICAgICAgICAgICAgICAgPT0+IERvY3VtZW50YXRpb24vc3lzcnEudHh0CiAtIHRhaW50ZWQKIC0gdGhyZWFkcy1tYXgKQEAgLTIxMSw5ICsyMTAsOCBAQAogCiAwOiB0cnkgdG8gY29udGludWUgb3BlcmF0aW9uCiAKLTE6IGRlbGF5IGEgZmV3IHNlY29uZHMgKHRvIGdpdmUga2xvZ2QgdGltZSB0byByZWNvcmQgdGhlIG9vcHMgb3V0cHV0KSBhbmQKLSAgIHRoZW4gcGFuaWMuICBJZiB0aGUgYHBhbmljJyBzeXNjdGwgaXMgYWxzbyBub24temVybyB0aGVuIHRoZSBtYWNoaW5lIHdpbGwKLSAgIGJlIHJlYm9vdGVkLgorMTogcGFuaWMgaW1tZWRpYXRseS4gIElmIHRoZSBgcGFuaWMnIHN5c2N0bCBpcyBhbHNvIG5vbi16ZXJvIHRoZW4gdGhlCisgICBtYWNoaW5lIHdpbGwgYmUgcmVib290ZWQuCiAKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTMxMSwyNSArMzA5LDYgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAotc3VpZF9kdW1wYWJsZToKLQotVGhpcyB2YWx1ZSBjYW4gYmUgdXNlZCB0byBxdWVyeSBhbmQgc2V0IHRoZSBjb3JlIGR1bXAgbW9kZSBmb3Igc2V0dWlkCi1vciBvdGhlcndpc2UgcHJvdGVjdGVkL3RhaW50ZWQgYmluYXJpZXMuIFRoZSBtb2RlcyBhcmUKLQotMCAtIChkZWZhdWx0KSAtIHRyYWRpdGlvbmFsIGJlaGF2aW91ci4gQW55IHByb2Nlc3Mgd2hpY2ggaGFzIGNoYW5nZWQKLQlwcml2aWxlZ2UgbGV2ZWxzIG9yIGlzIGV4ZWN1dGUgb25seSB3aWxsIG5vdCBiZSBkdW1wZWQKLTEgLSAoZGVidWcpIC0gYWxsIHByb2Nlc3NlcyBkdW1wIGNvcmUgd2hlbiBwb3NzaWJsZS4gVGhlIGNvcmUgZHVtcCBpcwotCW93bmVkIGJ5IHRoZSBjdXJyZW50IHVzZXIgYW5kIG5vIHNlY3VyaXR5IGlzIGFwcGxpZWQuIFRoaXMgaXMKLQlpbnRlbmRlZCBmb3Igc3lzdGVtIGRlYnVnZ2luZyBzaXR1YXRpb25zIG9ubHkuIFB0cmFjZSBpcyB1bmNoZWNrZWQuCi0yIC0gKHN1aWRzYWZlKSAtIGFueSBiaW5hcnkgd2hpY2ggbm9ybWFsbHkgd291bGQgbm90IGJlIGR1bXBlZCBpcyBkdW1wZWQKLQlyZWFkYWJsZSBieSByb290IG9ubHkuIFRoaXMgYWxsb3dzIHRoZSBlbmQgdXNlciB0byByZW1vdmUKLQlzdWNoIGEgZHVtcCBidXQgbm90IGFjY2VzcyBpdCBkaXJlY3RseS4gRm9yIHNlY3VyaXR5IHJlYXNvbnMKLQljb3JlIGR1bXBzIGluIHRoaXMgbW9kZSB3aWxsIG5vdCBvdmVyd3JpdGUgb25lIGFub3RoZXIgb3IKLQlvdGhlciBmaWxlcy4gVGhpcyBtb2RlIGlzIGFwcHJvcHJpYXRlIHdoZW4gYWRtaW5zdHJhdG9ycyBhcmUKLQlhdHRlbXB0aW5nIHRvIGRlYnVnIHByb2JsZW1zIGluIGEgbm9ybWFsIGVudmlyb25tZW50LgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCiB0YWludGVkOiAKIAogTm9uLXplcm8gaWYgdGhlIGtlcm5lbCBoYXMgYmVlbiB0YWludGVkLiAgTnVtZXJpYyB2YWx1ZXMsIHdoaWNoCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wcm9jX3VzYl9pbmZvLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0CmluZGV4IGY4NjU1MGYuLjIyYzUzMzEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Byb2NfdXNiX2luZm8udHh0CkBAIC01OSw3ICs1OSw3IEBACiB3b3VsZCBpc3N1ZSBtb3JlIGlvY3RscyB0byB0aGUgZGV2aWNlIHRvIGNvbW11bmljYXRlIHRvIGl0IHVzaW5nCiBjb250cm9sLCBidWxrLCBvciBvdGhlciBraW5kcyBvZiBVU0IgdHJhbnNmZXJzLiAgVGhlIElPQ1RMcyBhcmUKIGxpc3RlZCBpbiB0aGUgPGxpbnV4L3VzYmRldmljZV9mcy5oPiBmaWxlLCBhbmQgYXQgdGhpcyB3cml0aW5nIHRoZQotc291cmNlIGNvZGUgKGxpbnV4L2RyaXZlcnMvdXNiL2RldmlvLmMpIGlzIHRoZSBwcmltYXJ5IHJlZmVyZW5jZQorc291cmNlIGNvZGUgKGxpbnV4L2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYykgaXMgdGhlIHByaW1hcnkgcmVmZXJlbmNlCiBmb3IgaG93IHRvIGFjY2VzcyBkZXZpY2VzIHRocm91Z2ggdGhvc2UgZmlsZXMuCiAKIE5vdGUgdGhhdCBzaW5jZSBieSBkZWZhdWx0IHRoZXNlIEJCQi9EREQgZmlsZXMgYXJlIHdyaXRhYmxlIG9ubHkgYnkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1oZWxwLnR4dAppbmRleCBiN2MzMjQ5Li5hNzQwODU5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi91c2ItaGVscC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvdXNiLWhlbHAudHh0CkBAIC01LDggKzUsNyBAQAogRG9jdW1lbnRhdGlvbi91c2IvKiwgc2VlIHRoZSBmb2xsb3dpbmc6CiAKIExpbnV4LVVTQiBwcm9qZWN0OiAgaHR0cDovL3d3dy5saW51eC11c2Iub3JnCi0gIG1pcnJvcnMgYXQgICAgICAgIGh0dHA6Ly93d3cuc3VzZS5jei9kZXZlbG9wbWVudC9saW51eC11c2IvCi0gICAgICAgICBhbmQgICAgICAgIGh0dHA6Ly91c2IuaW4udHVtLmRlL2xpbnV4LXVzYi8KKyAgbWlycm9ycyBhdCAgICAgICAgaHR0cDovL3VzYi5pbi50dW0uZGUvbGludXgtdXNiLwogICAgICAgICAgYW5kICAgICAgICBodHRwOi8vaXQubGludXgtdXNiLm9yZwogTGludXggVVNCIEd1aWRlOiAgICBodHRwOi8vbGludXgtdXNiLnNvdXJjZWZvcmdlLm5ldAogTGludXgtVVNCIGRldmljZSBvdmVydmlldyAod29ya2luZyBkZXZpY2VzIGFuZCBkcml2ZXJzKToKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CmluZGV4IDY4ODdkNDQuLjZkYTI0ZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dApAQCAtMjM4LDYgKzIzOCwxMyBAQAogICBwYWdlZmF1bHR0cmFjZSBEdW1wIGFsbCBwYWdlIGZhdWx0cy4gT25seSB1c2VmdWwgZm9yIGV4dHJlbWUgZGVidWdnaW5nCiAJCWFuZCB3aWxsIGNyZWF0ZSBhIGxvdCBvZiBvdXRwdXQuCiAKKyAgY2FsbF90cmFjZT1bb2xkfGJvdGh8bmV3ZmFsbGJhY2t8bmV3XQorCQlvbGQ6IHVzZSBvbGQgaW5leGFjdCBiYWNrdHJhY2VyCisJCW5ldzogdXNlIG5ldyBleGFjdCBkd2FyZjIgdW53aW5kZXIKKyAJCWJvdGg6IHByaW50IGVudHJpZXMgZnJvbSBib3RoCisJCW5ld2ZhbGxiYWNrOiB1c2UgbmV3IHVud2luZGVyIGJ1dCBmYWxsIGJhY2sgdG8gb2xkIGlmIGl0IGdldHMKKwkJCXN0dWNrIChkZWZhdWx0KQorCiBNaXNjCiAKICAgbm9yZXBsYWNlbWVudCAgRG9uJ3QgcmVwbGFjZSBpbnN0cnVjdGlvbnMgd2l0aCBtb3JlIGFwcHJvcHJpYXRlIG9uZXMKZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMKaW5kZXggYjJhZmM3YS4uNzY2YjFhZCAxMDA2NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIxNCw2ICsyMTQsMTIgQEAKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGVuYi9saW51eC1hY3BpLTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorQUNQSSBQQ0kgSE9UUExVRyBEUklWRVIKK1A6CUtyaXN0ZW4gQ2FybHNvbiBBY2NhcmRpCitNOglrcmlzdGVuLmMuYWNjYXJkaUBpbnRlbC5jb20KK0w6CXBjaWhwZC1kaXNjdXNzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUzoJTWFpbnRhaW5lZAorCiBBRDE4MTYgU09VTkQgRFJJVkVSCiBQOglUaG9yc3RlbiBLbmFiZQogTToJVGhvcnN0ZW4gS25hYmUgPGxpbnV4QHRob3JzdGVuLWtuYWJlLmRlPgpAQCAtMjkyLDYgKzI5OCwyMSBAQAogVzoJaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL0Nvbm5lY3Rpdml0eVNvbHV0aW9ucy9UZWNobmljYWxSZXNvdXJjZXMvMCwsNTBfMjMzNF8yNDUyXzExMzYzLDAwLmh0bWwKIFM6CVN1cHBvcnRlZAogCitBTVNPMTEwMCBSTklDIERSSVZFUgorUDoJVG9tIFR1Y2tlcgorTToJdG9tQG9wZW5ncmlkY29tcHV0aW5nLmNvbQorUDoJU3RldmUgV2lzZQorTToJc3dpc2VAb3BlbmdyaWRjb21wdXRpbmcuY29tCitMOglvcGVuaWItZ2VuZXJhbEBvcGVuaWIub3JnCitTOglNYWludGFpbmVkCisKK0FPQSAoQXBwbGUgT25ib2FyZCBBdWRpbykgQUxTQSBEUklWRVIKK1A6CUpvaGFubmVzIEJlcmcKK006CWpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQKK0w6CWxpbnV4cHBjLWRldkBvemxhYnMub3JnCitMOglhbHNhLWRldmVsQGFsc2EtcHJvamVjdC5vcmcKK1M6CU1haW50YWluZWQKKwogQVBNIERSSVZFUgogUDoJU3RlcGhlbiBSb3Rod2VsbAogTToJc2ZyQGNhbmIuYXV1Zy5vcmcuYXUKQEAgLTQwMyw3ICs0MjQsNyBAQAogQVRNCiBQOglDaGFzIFdpbGxpYW1zCiBNOgljaGFzQGNtZi5ucmwubmF2eS5taWwKLUw6CWxpbnV4LWF0bS1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorTDoJbGludXgtYXRtLWdlbmVyYWxAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQogVzoJaHR0cDovL2xpbnV4LWF0bS5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIApAQCAtNDM2LDkgKzQ1Nyw5IEBACiBXOglodHRwOi8vd3d3LmJheWNvbS5vcmcvfnRvbS9oYW0vaGFtLmh0bWwKIFM6CU1haW50YWluZWQKIAotQkNNNDNYWCBXSVJFTEVTUyBEUklWRVIKLVA6CU1pY2hhZWwgQnVlc2NoCi1NOgltYkBidTNzY2guZGUKK0JDTTQzWFggV0lSRUxFU1MgRFJJVkVSIChTT0ZUTUFDIEJBU0VEIFZFUlNJT04pCitQOglMYXJyeSBGaW5nZXIKK006CUxhcnJ5LkZpbmdlckBsd2Zpbmdlci5uZXQKIFA6CVN0ZWZhbm8gQnJpdmlvCiBNOglzdDNAcmlzZXVwLm5ldAogVzoJaHR0cDovL2JjbTQzeHguYmVybGlvcy5kZS8KQEAgLTg3Niw2ICs4OTcsMTIgQEAKIFQ6CWdpdCBodHRwOi8vdGFsaS5hZG1pbmdpbGRlLm9yZy9naXQvbGludXgtZG9jYm9vay5naXQKIFM6CU1haW50YWluZWQKIAorRE9DS0lORyBTVEFUSU9OIERSSVZFUgorUDoJS3Jpc3RlbiBDYXJsc29uIEFjY2FyZGkKK006CWtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbQorTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogRE9VQkxFVEFMSyBEUklWRVIKIFA6CUphbWVzIFIuIFZhbiBaYW5kdAogTToJanJ2QHZhbnphbmR0Lm12LmNvbQpAQCAtOTY4LDYgKzk5NSwxOCBAQAogTToJc2F3QHNhdy5zdy5jb20uc2cKIFM6CU1haW50YWluZWQKIAorRUZTIEZJTEVTWVNURU0KK1c6CWh0dHA6Ly9hZXNjaGkuY2guZXUub3JnL2Vmcy8KK1M6CU9ycGhhbgorCitFSENBIChJQk0gR1ggYnVzIEluZmluaUJhbmQgYWRhcHRlcikgRFJJVkVSOgorUDoJSG9hbmctTmFtIE5ndXllbgorTToJaG5ndXllbkBkZS5pYm0uY29tCitQOglDaHJpc3RvcGggUmFpc2NoCitNOglyYWlzY2hAZGUuaWJtLmNvbQorTDoJb3BlbmliLWdlbmVyYWxAb3BlbmliLm9yZworUzoJU3VwcG9ydGVkCisKIEVNVTEwSzEgU09VTkQgRFJJVkVSCiBQOglKYW1lcyBDb3VydGllci1EdXR0b24KIE06CUphbWVzQHN1cGVyYnVnLmRlbW9uLmNvLnVrCkBAIC0xNTk4LDcgKzE2MzcsNyBAQAogVDoJZ2l0IGtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9zaGFnZ3kvamZzLTIuNi5naXQKIFM6CVN1cHBvcnRlZAogCi1KT1VSTkFMTElORyBMQVlFUiBGT1IgQkxPQ0sgREVWSUNTIChKQkQpCitKT1VSTkFMTElORyBMQVlFUiBGT1IgQkxPQ0sgREVWSUNFUyAoSkJEKQogUDoJU3RlcGhlbiBUd2VlZGllLCBBbmRyZXcgTW9ydG9uCiBNOglzY3RAcmVkaGF0LmNvbSwgYWtwbUBvc2RsLm9yZwogTDoJZXh0Mi1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKQEAgLTE2NDIsOSArMTY4MSw4IEBACiAKIEtFUk5FTCBKQU5JVE9SUwogUDoJU2V2ZXJhbAotTDoJa2VybmVsLWphbml0b3JzQG9zZGwub3JnCitMOglrZXJuZWwtamFuaXRvcnNAbGlzdHMub3NkbC5vcmcKIFc6CWh0dHA6Ly93d3cua2VybmVsamFuaXRvcnMub3JnLwotVzoJaHR0cDovL3NmLm5ldC9wcm9qZWN0cy9rZXJuZWwtamFuaXRvci8KIFM6CU1haW50YWluZWQKIAogS0VSTkVMIE5GU0QKQEAgLTE3NjEsNiArMTc5OSwxMyBAQAogTDogICAgIGxpbnV4cHBjLWVtYmVkZGVkQG96bGFicy5vcmcKIFM6ICAgICBNYWludGFpbmVkCiAKK0xJTlVYIEZPUiBQT1dFUlBDIFBBIFNFTUkgUFdSRklDSUVOVAorUDoJT2xvZiBKb2hhbnNzb24KK006CW9sb2ZAbGl4b20ubmV0CitXOglodHRwOi8vd3d3LnBhc2VtaS5jb20vCitMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZworUzoJU3VwcG9ydGVkCisKIExMQyAoODAyLjIpCiBQOglBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8KIE06CWFjbWVAY29uZWN0aXZhLmNvbS5icgpAQCAtMTg4Miw2ICsxOTI3LDEyIEBACiBXOiAgICAgaHR0cDovL21lZ2FyYWlkLmxzaWxvZ2ljLmNvbQogUzogICAgIE1haW50YWluZWQKIAorTUVNT1JZIE1BTkFHRU1FTlQKK0w6CWxpbnV4LW1tQGt2YWNrLm9yZworTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZworVzoJaHR0cDovL3d3dy5saW51eC1tbS5vcmcKK1M6CU1haW50YWluZWQKKwogTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUyAoTVREKQogUDoJRGF2aWQgV29vZGhvdXNlCiBNOglkd213MkBpbmZyYWRlYWQub3JnCkBAIC0yMzM4LDYgKzIzODksMTIgQEAKIEw6CWxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnCiBTOglTdXBwb3J0ZWQKIAorUUxPR0lDIFFMQTNYWFggTkVUV09SSyBEUklWRVIKK1A6CVJvbiBNZXJjZXIKK006CWxpbnV4LWRyaXZlckBxbG9naWMuY29tCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKKwogUU5YNCBGSUxFU1lTVEVNCiBQOglBbmRlcnMgTGFyc2VuCiBNOglhbEBhbGFyc2VuLm5ldApAQCAtMjQxNyw2ICsyNDc0LDggQEAKIFMzOTAKIFA6CU1hcnRpbiBTY2h3aWRlZnNreQogTToJc2Nod2lkZWZza3lAZGUuaWJtLmNvbQorUDoJSGVpa28gQ2Fyc3RlbnMKK006CWhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20KIE06CWxpbnV4MzkwQGRlLmlibS5jb20KIEw6CWxpbnV4LTM5MEB2bS5tYXJpc3QuZWR1CiBXOglodHRwOi8vd3d3LmlibS5jb20vZGV2ZWxvcGVyd29ya3MvbGludXgvbGludXgzOTAvCkBAIC0yNTg4LDYgKzI2NDcsMTggQEAKIE06CW5pY29AY2FtLm9yZwogUzoJTWFpbnRhaW5lZAogCitTT0ZUTUFDIExBWUVSIChJRUVFIDgwMi4xMSkKK1A6CUpvaGFubmVzIEJlcmcKK006CWpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQKK1A6CUpvZSBKZXphaworTToJam9zZWp4QGdlbnRvby5vcmcKK1A6CURhbmllbCBEcmFrZQorTToJZHNkQGdlbnRvby5vcmcKK1c6CWh0dHA6Ly9zb2Z0bWFjLnNpcHNvbHV0aW9ucy5uZXQvCitMOglzb2Z0bWFjLWRldkBzaXBzb2x1dGlvbnMubmV0CitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCisKIFNPRlRXQVJFIFJBSUQgKE11bHRpcGxlIERpc2tzKSBTVVBQT1JUCiBQOglJbmdvIE1vbG5hcgogTToJbWluZ29AcmVkaGF0LmNvbQpAQCAtMjYyNiw2ICsyNjk3LDIyIEBACiBMOglzcGktZGV2ZWwtZ2VuZXJhbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFM6CU1haW50YWluZWQKIAorU1RBQkxFIEJSQU5DSDoKK1A6CUdyZWcgS3JvYWgtSGFydG1hbgorTToJZ3JlZ0Brcm9haC5jb20KK1A6CUNocmlzIFdyaWdodAorTToJY2hyaXN3QHNvdXMtc29sLm9yZworTDoJc3RhYmxlQGtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKworU1RBQkxFIEJSQU5DSDoKK1A6CUdyZWcgS3JvYWgtSGFydG1hbgorTToJZ3JlZ0Brcm9haC5jb20KK1A6CUNocmlzIFdyaWdodAorTToJY2hyaXN3QHNvdXMtc29sLm9yZworTDoJc3RhYmxlQGtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKKwogVFBNIERFVklDRSBEUklWRVIKIFA6CUt5bGVuZSBIYWxsCiBNOglramhhbGxAdXMuaWJtLmNvbQpAQCAtMjc2Niw2ICsyODUzLDE0IEBACiBMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiAKK1RDUCBMT1cgUFJJT1JJVFkgTU9EVUxFCitQOglXb25nIEhvaSBTaW5nLCBFZGlzb24KK006CWhzd29uZzNpQGdtYWlsLmNvbQorUDoJSHVuZyBIaW5nIEx1biwgTWlrZQorTToJaGxodW5nM2lAZ21haWwuY29tCitXOglodHRwOi8vdGNwLWxwLW1vZC5zb3VyY2Vmb3JnZS5uZXQvCitTOglNYWludGFpbmVkCisKIFRJIE9NQVAgUkFORE9NIE5VTUJFUiBHRU5FUkFUT1IgU1VQUE9SVAogUDoJRGVlcGFrIFNheGVuYQogTToJZHNheGVuYUBwbGV4aXR5Lm5ldApAQCAtMjg0NSw4ICsyOTQwLDggQEAKIFM6CU1haW50YWluZWQKIAogVFVMSVAgTkVUV09SSyBEUklWRVIKLVA6CUplZmYgR2FyemlrCi1NOglqZ2FyemlrQHBvYm94LmNvbQorUDoJVmFsZXJpZSBIZW5zb24KK006CXZhbF9oZW5zb25AbGludXguaW50ZWwuY29tCiBMOgl0dWxpcC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKIFc6CWh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdHVsaXAvCiBTOglNYWludGFpbmVkCkBAIC0zMjUyLDEwICszMzQ3LDExIEBACiAKIFhGUyBGSUxFU1lTVEVNCiBQOglTaWxpY29uIEdyYXBoaWNzIEluYworUDoJVGltIFNoaW1taW4sIERhdmlkIENoYXR0ZXJ0b24KIE06CXhmcy1tYXN0ZXJzQG9zcy5zZ2kuY29tCi1NOgluYXRoYW5zQHNnaS5jb20KIEw6CXhmc0Bvc3Muc2dpLmNvbQogVzoJaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL3hmcworVDoJZ2l0IGdpdDovL29zcy5zZ2kuY29tOjgwOTAveGZzL3hmcy0yLjYKIFM6CVN1cHBvcnRlZAogCiBYODYgMy1MRVZFTCBQQUdJTkcgKFBBRSkgU1VQUE9SVApAQCAtMzI5Niw2ICszMzkyLDE1IEBACiBMOglsaW51eC1oYW1zQHZnZXIua2VybmVsLm9yZwogUzoJTWFpbnRhaW5lZAogCitaRDEyMTFSVyBXSVJFTEVTUyBEUklWRVIKK1A6CURhbmllbCBEcmFrZQorTToJZHNkQGdlbnRvby5vcmcKK1A6CVVscmljaCBLdW5pdHoKK006CWt1bmVAZGVpbmUtdGFsZXIuZGUKK1c6CWh0dHA6Ly96ZDEyMTEuYXRoLmN4L3dpa2kvRHJpdmVyUmV3cml0ZQorTDoJemQxMjExLWRldnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IChzdWJzY3JpYmVycy1vbmx5KQorUzoJTWFpbnRhaW5lZAorCiBaRiBNQUNIWiBXQVRDSERPRwogUDoJRmVybmFuZG8gRnVnYW50aQogTToJZnVnYW50aUBuZXRiYW5rLmNvbS5icgpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCAxZGQ1OGQzLi5lZGZjMmZkIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMSw4ICsxLDggQEAKIFZFUlNJT04gPSAyCiBQQVRDSExFVkVMID0gNgogU1VCTEVWRUwgPSAxOAotRVhUUkFWRVJTSU9OID0gLXJjMgotTkFNRT1DcmF6ZWQgU25vdy1XZWFzZWwKK0VYVFJBVkVSU0lPTiA9CitOQU1FPUF2YXN0ISBBIGJpbGdlIHJhdCEKIAogIyAqRE9DVU1FTlRBVElPTioKICMgVG8gc2VlIGEgbGlzdCBvZiB0eXBpY2FsIHRhcmdldHMgZXhlY3V0ZSAibWFrZSBoZWxwIgpAQCAtMzA5LDkgKzMwOSw2IEBACiAKIENGTEFHUyAgICAgICAgICA6PSAtV2FsbCAtV3VuZGVmIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVduby10cmlncmFwaHMgXAogICAgICAgICAgICAgICAgICAgIC1mbm8tc3RyaWN0LWFsaWFzaW5nIC1mbm8tY29tbW9uCi0jIEZvcmNlIGdjYyB0byBiZWhhdmUgY29ycmVjdCBldmVuIGZvciBidWdneSBkaXN0cmlidXRpb25zCi1DRkxBR1MgICAgICAgICAgKz0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3ItYWxsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZm5vLXN0YWNrLXByb3RlY3RvcikKIEFGTEFHUyAgICAgICAgICA6PSAtRF9fQVNTRU1CTFlfXwogCiAjIFJlYWQgS0VSTkVMUkVMRUFTRSBmcm9tIGluY2x1ZGUvY29uZmlnL2tlcm5lbC5yZWxlYXNlIChpZiBpdCBleGlzdHMpCkBAIC0zNjgsNiArMzY1LDcgQEAKIAogbm8tZG90LWNvbmZpZy10YXJnZXRzIDo9IGNsZWFuIG1ycHJvcGVyIGRpc3RjbGVhbiBcCiAJCQkgY3Njb3BlIFRBR1MgdGFncyBoZWxwICVkb2NzIGNoZWNrJSBcCisJCQkgaW5jbHVkZS9saW51eC92ZXJzaW9uLmggaGVhZGVyc18lIFwKIAkJCSBrZXJuZWxyZWxlYXNlIGtlcm5lbHZlcnNpb24KIAogY29uZmlnLXRhcmdldHMgOj0gMApAQCAtNDM1LDEyICs0MzMsMTMgQEAKIGVuZGlmICMgS0JVSUxEX0VYVE1PRAogCiBpZmVxICgkKGRvdC1jb25maWcpLDEpCi0jIEluIHRoaXMgc2VjdGlvbiwgd2UgbmVlZCAuY29uZmlnCisjIFJlYWQgaW4gY29uZmlnCistaW5jbHVkZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKIAoraWZlcSAoJChLQlVJTERfRVhUTU9EKSwpCiAjIFJlYWQgaW4gZGVwZW5kZW5jaWVzIHRvIGFsbCBLY29uZmlnKiBmaWxlcywgbWFrZSBzdXJlIHRvIHJ1bgogIyBvbGRjb25maWcgaWYgY2hhbmdlcyBhcmUgZGV0ZWN0ZWQuCiAtaW5jbHVkZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYuY21kCi0taW5jbHVkZSBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYKIAogIyBUbyBhdm9pZCBhbnkgaW1wbGljaXQgcnVsZSB0byBraWNrIGluLCBkZWZpbmUgYW4gZW1wdHkgY29tbWFuZAogJChLQ09ORklHX0NPTkZJRykgaW5jbHVkZS9jb25maWcvYXV0by5jb25mLmNtZDogOwpAQCAtNDUwLDE2ICs0NDksMjcgQEAKICMgaWYgYXV0by5jb25mLmNtZCBpcyBtaXNzaW5nIHRoZW4gd2UgYXJlIHByb2JhYmx5IGluIGEgY2xlYW5lZCB0cmVlIHNvCiAjIHdlIGV4ZWN1dGUgdGhlIGNvbmZpZyBzdGVwIHRvIGJlIHN1cmUgdG8gY2F0Y2ggdXBkYXRlZCBLY29uZmlnIGZpbGVzCiBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6ICQoS0NPTkZJR19DT05GSUcpIGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZi5jbWQKLWlmZXEgKCQoS0JVSUxEX0VYVE1PRCksKQogCSQoUSkkKE1BS0UpIC1mICQoc3JjdHJlZSkvTWFrZWZpbGUgc2lsZW50b2xkY29uZmlnCiBlbHNlCi0JJChlcnJvciBrZXJuZWwgY29uZmlndXJhdGlvbiBub3QgdmFsaWQgLSBydW4gJ21ha2UgcHJlcGFyZScgaW4gJChzcmN0cmVlKSB0byB1cGRhdGUgaXQpCi1lbmRpZgorIyBleHRlcm5hbCBtb2R1bGVzIG5lZWRzIGluY2x1ZGUvbGludXgvYXV0b2NvbmYuaCBhbmQgaW5jbHVkZS9jb25maWcvYXV0by5jb25mCisjIGJ1dCBkbyBub3QgY2FyZSBpZiB0aGV5IGFyZSB1cC10by1kYXRlLiBVc2UgYXV0by5jb25mIHRvIHRyaWdnZXIgdGhlIHRlc3QKK1BIT05ZICs9IGluY2x1ZGUvY29uZmlnL2F1dG8uY29uZgorCitpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6CisJJChRKXRlc3QgLWUgaW5jbHVkZS9saW51eC9hdXRvY29uZi5oIC1hIC1lICRAIHx8ICgJCVwKKwllY2hvOwkJCQkJCQkJXAorCWVjaG8gIiAgRVJST1I6IEtlcm5lbCBjb25maWd1cmF0aW9uIGlzIGludmFsaWQuIjsJCVwKKwllY2hvICIgICAgICAgICBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmggb3IgJEAgYXJlIG1pc3NpbmcuIjsJXAorCWVjaG8gIiAgICAgICAgIFJ1biAnbWFrZSBvbGRjb25maWcgJiYgbWFrZSBwcmVwYXJlJyBvbiBrZXJuZWwgc3JjIHRvIGZpeCBpdC4iOwlcCisJZWNobzsJCQkJCQkJCVwKKwkvYmluL2ZhbHNlKQorCitlbmRpZiAjIEtCVUlMRF9FWFRNT0QKIAogZWxzZQogIyBEdW1teSB0YXJnZXQgbmVlZGVkLCBiZWNhdXNlIHVzZWQgYXMgcHJlcmVxdWlzaXRlCiBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmY6IDsKLWVuZGlmCitlbmRpZiAjICQoZG90LWNvbmZpZykKIAogIyBUaGUgYWxsOiB0YXJnZXQgaXMgdGhlIGRlZmF1bHQgd2hlbiBubyB0YXJnZXQgaXMgZ2l2ZW4gb24gdGhlCiAjIGNvbW1hbmQgbGluZS4KQEAgLTQ3Myw2ICs0ODMsOCBAQAogQ0ZMQUdTCQkrPSAtTzIKIGVuZGlmCiAKK2luY2x1ZGUgJChzcmN0cmVlKS9hcmNoLyQoQVJDSCkvTWFrZWZpbGUKKwogaWZkZWYgQ09ORklHX0ZSQU1FX1BPSU5URVIKIENGTEFHUwkJKz0gLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgJChjYWxsIGNjLW9wdGlvbiwtZm5vLW9wdGltaXplLXNpYmxpbmctY2FsbHMsKQogZWxzZQpAQCAtNDg3LDcgKzQ5OSw4IEBACiBDRkxBR1MJCSs9IC1nCiBlbmRpZgogCi1pbmNsdWRlICQoc3JjdHJlZSkvYXJjaC8kKEFSQ0gpL01ha2VmaWxlCisjIEZvcmNlIGdjYyB0byBiZWhhdmUgY29ycmVjdCBldmVuIGZvciBidWdneSBkaXN0cmlidXRpb25zCitDRkxBR1MgICAgICAgICAgKz0gJChjYWxsIGNjLW9wdGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCiAKICMgYXJjaCBNYWtlZmlsZSBtYXkgb3ZlcnJpZGUgQ0Mgc28ga2VlcCB0aGlzIGFmdGVyIGFyY2ggTWFrZWZpbGUgaXMgaW5jbHVkZWQKIE5PU1RESU5DX0ZMQUdTICs9IC1ub3N0ZGluYyAtaXN5c3RlbSAkKHNoZWxsICQoQ0MpIC1wcmludC1maWxlLW5hbWU9aW5jbHVkZSkKQEAgLTg3Niw3ICs4ODksNyBAQAogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBLZXJuZWwgaGVhZGVycwotSU5TVEFMTF9IRFJfUEFUSD0kKE1PRExJQikvYWJpCitJTlNUQUxMX0hEUl9QQVRIPSQob2JqdHJlZSkvdXNyCiBleHBvcnQgSU5TVEFMTF9IRFJfUEFUSAogCiBQSE9OWSArPSBoZWFkZXJzX2luc3RhbGwKQEAgLTk3Myw3ICs5ODYsNyBAQAogICAgICAgICAgICAgICAgIC50bXBfa2FsbHN5bXMqIC50bXBfdmVyc2lvbiAudG1wX3ZtbGludXgqIC50bXBfU3lzdGVtLm1hcAogCiAjIERpcmVjdG9yaWVzICYgZmlsZXMgcmVtb3ZlZCB3aXRoICdtYWtlIG1ycHJvcGVyJwotTVJQUk9QRVJfRElSUyAgKz0gaW5jbHVkZS9jb25maWcgaW5jbHVkZTIKK01SUFJPUEVSX0RJUlMgICs9IGluY2x1ZGUvY29uZmlnIGluY2x1ZGUyIHVzci9pbmNsdWRlCiBNUlBST1BFUl9GSUxFUyArPSAuY29uZmlnIC5jb25maWcub2xkIGluY2x1ZGUvYXNtIC52ZXJzaW9uIC5vbGRfdmVyc2lvbiBcCiAgICAgICAgICAgICAgICAgICBpbmNsdWRlL2xpbnV4L2F1dG9jb25mLmggaW5jbHVkZS9saW51eC92ZXJzaW9uLmggICAgICBcCiAgICAgICAgICAgICAgICAgICBpbmNsdWRlL2xpbnV4L3V0c3JlbGVhc2UuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMDY0LDExICsxMDc3LDEyIEBACiAJQGVjaG8gICcgIGtlcm5lbHJlbGVhc2UJICAtIE91dHB1dCB0aGUgcmVsZWFzZSB2ZXJzaW9uIHN0cmluZycKIAlAZWNobyAgJyAga2VybmVsdmVyc2lvbgkgIC0gT3V0cHV0IHRoZSB2ZXJzaW9uIHN0b3JlZCBpbiBNYWtlZmlsZScKIAlAZWNobyAgJyAgaGVhZGVyc19pbnN0YWxsIC0gSW5zdGFsbCBzYW5pdGlzZWQga2VybmVsIGhlYWRlcnMgdG8gSU5TVEFMTF9IRFJfUEFUSCcKLQlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6IC9saWIvbW9kdWxlcy8kJFZFUlNJT04vYWJpKScKKwlAZWNobyAgJyAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQ6ICQoSU5TVEFMTF9IRFJfUEFUSCkpJwogCUBlY2hvICAnJwogCUBlY2hvICAnU3RhdGljIGFuYWx5c2VycycKIAlAZWNobyAgJyAgY2hlY2tzdGFjayAgICAgIC0gR2VuZXJhdGUgYSBsaXN0IG9mIHN0YWNrIGhvZ3MnCiAJQGVjaG8gICcgIG5hbWVzcGFjZWNoZWNrICAtIE5hbWUgc3BhY2UgYW5hbHlzaXMgb24gY29tcGlsZWQga2VybmVsJworCUBlY2hvICAnICBoZWFkZXJzX2NoZWNrICAgLSBTYW5pdHkgY2hlY2sgb24gZXhwb3J0ZWQgaGVhZGVycycKIAlAZWNobyAgJycKIAlAZWNobyAgJ0tlcm5lbCBwYWNrYWdpbmc6JwogCUAkKE1BS0UpICQoYnVpbGQpPSQocGFja2FnZS1kaXIpIGhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL2Vycl9ldjcuYyBiL2FyY2gvYWxwaGEva2VybmVsL2Vycl9ldjcuYwppbmRleCBiZjUyYmE2Li5mZWQ2YjNkIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9lcnJfZXY3LmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvZXJyX2V2Ny5jCkBAIC0yNzQsMTYgKzI3NCwxNCBAQAogc3RydWN0IGVsX3N1YnBhY2tldF9oYW5kbGVyIGV2N19wYWxfc3VicGFja2V0X2hhbmRsZXIgPQogCVNVQlBBQ0tFVF9IQU5ETEVSX0lOSVQoRUxfQ0xBU1NfX1BBTCwgZXY3X3Byb2Nlc3NfcGFsX3N1YnBhY2tldCk7CiAKLXZvaWQgCit2b2lkCiBldjdfcmVnaXN0ZXJfZXJyb3JfaGFuZGxlcnModm9pZCkKIHsKIAlpbnQgaTsKIAotCWZvcihpID0gMDsKLQkgICAgaTxzaXplb2YoZWxfZXY3X3BhbF9hbm5vdGF0aW9ucykvc2l6ZW9mKGVsX2V2N19wYWxfYW5ub3RhdGlvbnNbMV0pOwotCSAgICBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlbF9ldjdfcGFsX2Fubm90YXRpb25zKTsgaSsrKQogCQljZGxfcmVnaXN0ZXJfc3VicGFja2V0X2Fubm90YXRpb24oJmVsX2V2N19wYWxfYW5ub3RhdGlvbnNbaV0pOwotCX0JCisKIAljZGxfcmVnaXN0ZXJfc3VicGFja2V0X2hhbmRsZXIoJmV2N19wYWxfc3VicGFja2V0X2hhbmRsZXIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKaW5kZXggZTE1ZGNmNC4uNzNjNzYyMmI1IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCkBAIC02MjMsMTIgKzYyMywxMiBAQAogCWxvbmcgbGVuLCBlcnIgPSAtRUlOVkFMOwogCiAJb2Zmc2V0ID0gY29tbWFuZC0xOwotCWlmIChvZmZzZXQgPj0gc2l6ZW9mKHN5c2luZm9fdGFibGUpL3NpemVvZihjaGFyICopKSB7CisJaWYgKG9mZnNldCA+PSBBUlJBWV9TSVpFKHN5c2luZm9fdGFibGUpKSB7CiAJCS8qIERpZ2l0YWwgVU5JWCBoYXMgYSBmZXcgdW5wdWJsaXNoZWQgaW50ZXJmYWNlcyBoZXJlICovCiAJCXByaW50aygic3lzaW5mbyglZCkiLCBjb21tYW5kKTsKIAkJZ290byBvdXQ7CiAJfQotCQorCiAJZG93bl9yZWFkKCZ1dHNfc2VtKTsKIAlyZXMgPSBzeXNpbmZvX3RhYmxlW29mZnNldF07CiAJbGVuID0gc3RybGVuKHJlcykrMTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMgYi9hcmNoL2FscGhhL2tlcm5lbC9zZXR1cC5jCmluZGV4IDJjYjljNDMuLmZkNGE4ZmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvc2V0dXAuYwpAQCAtMTE0LDggKzExNCw2IEBACiBpbnQgYWxwaGFfdXNpbmdfc3JtOwogI2VuZGlmCiAKLSNkZWZpbmUgTihhKSAoc2l6ZW9mKGEpL3NpemVvZihhWzBdKSkKLQogc3RhdGljIHN0cnVjdCBhbHBoYV9tYWNoaW5lX3ZlY3RvciAqZ2V0X3N5c3ZlYyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLAogCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgc3RydWN0IGFscGhhX21hY2hpbmVfdmVjdG9yICpnZXRfc3lzdmVjX2J5bmFtZShjb25zdCBjaGFyICopOwpAQCAtMjQwLDcgKzIzOCw3IEBACiAJc3RhbmRhcmRfaW9fcmVzb3VyY2VzWzBdLnN0YXJ0ID0gUlRDX1BPUlQoMCk7CiAJc3RhbmRhcmRfaW9fcmVzb3VyY2VzWzBdLmVuZCA9IFJUQ19QT1JUKDApICsgMHgxMDsKIAotCWZvciAoaSA9IDA7IGkgPCBOKHN0YW5kYXJkX2lvX3Jlc291cmNlcyk7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFuZGFyZF9pb19yZXNvdXJjZXMpOyArK2kpCiAJCXJlcXVlc3RfcmVzb3VyY2UoaW8sIHN0YW5kYXJkX2lvX3Jlc291cmNlcytpKTsKIH0KIApAQCAtOTE4LDEzICs5MTYsMTMgQEAKIAogCS8qIFNlYXJjaCB0aGUgc3lzdGVtIHRhYmxlcyBmaXJzdC4uLiAqLwogCXZlYyA9IE5VTEw7Ci0JaWYgKHR5cGUgPCBOKHN5c3R5cGVfdmVjcykpIHsKKwlpZiAodHlwZSA8IEFSUkFZX1NJWkUoc3lzdHlwZV92ZWNzKSkgewogCQl2ZWMgPSBzeXN0eXBlX3ZlY3NbdHlwZV07CiAJfSBlbHNlIGlmICgodHlwZSA+IFNUX0FQSV9CSUFTKSAmJgotCQkgICAodHlwZSAtIFNUX0FQSV9CSUFTKSA8IE4oYXBpX3ZlY3MpKSB7CisJCSAgICh0eXBlIC0gU1RfQVBJX0JJQVMpIDwgQVJSQVlfU0laRShhcGlfdmVjcykpIHsKIAkJdmVjID0gYXBpX3ZlY3NbdHlwZSAtIFNUX0FQSV9CSUFTXTsKIAl9IGVsc2UgaWYgKCh0eXBlID4gU1RfVU5PRkZJQ0lBTF9CSUFTKSAmJgotCQkgICAodHlwZSAtIFNUX1VOT0ZGSUNJQUxfQklBUykgPCBOKHVub2ZmaWNpYWxfdmVjcykpIHsKKwkJICAgKHR5cGUgLSBTVF9VTk9GRklDSUFMX0JJQVMpIDwgQVJSQVlfU0laRSh1bm9mZmljaWFsX3ZlY3MpKSB7CiAJCXZlYyA9IHVub2ZmaWNpYWxfdmVjc1t0eXBlIC0gU1RfVU5PRkZJQ0lBTF9CSUFTXTsKIAl9CiAKQEAgLTkzOCwxMSArOTM2LDExIEBACiAKIAkJc3dpdGNoICh0eXBlKSB7CiAJCWNhc2UgU1RfREVDX0FMQ09SOgotCQkJaWYgKG1lbWJlciA8IE4oYWxjb3JfaW5kaWNlcykpCisJCQlpZiAobWVtYmVyIDwgQVJSQVlfU0laRShhbGNvcl9pbmRpY2VzKSkKIAkJCQl2ZWMgPSBhbGNvcl92ZWNzW2FsY29yX2luZGljZXNbbWVtYmVyXV07CiAJCQlicmVhazsKIAkJY2FzZSBTVF9ERUNfRUIxNjQ6Ci0JCQlpZiAobWVtYmVyIDwgTihlYjE2NF9pbmRpY2VzKSkKKwkJCWlmIChtZW1iZXIgPCBBUlJBWV9TSVpFKGViMTY0X2luZGljZXMpKQogCQkJCXZlYyA9IGViMTY0X3ZlY3NbZWIxNjRfaW5kaWNlc1ttZW1iZXJdXTsKIAkJCS8qIFBDMTY0IG1heSBzaG93IGFzIEVCMTY0IHZhcmlhdGlvbiB3aXRoIEVWNTYgQ1BVLAogCQkJICAgYnV0LCBzaW5jZSBubyB0cnVlIEVCMTY0IGhhZCBhbnl0aGluZyBidXQgRVY1Li4uICovCkBAIC05NTAsMjQgKzk0OCwyNCBAQAogCQkJCXZlYyA9ICZwYzE2NF9tdjsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0RFQ19FQjY0UDoKLQkJCWlmIChtZW1iZXIgPCBOKGViNjRwX2luZGljZXMpKQorCQkJaWYgKG1lbWJlciA8IEFSUkFZX1NJWkUoZWI2NHBfaW5kaWNlcykpCiAJCQkJdmVjID0gZWI2NHBfdmVjc1tlYjY0cF9pbmRpY2VzW21lbWJlcl1dOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RfREVDX0VCNjY6Ci0JCQlpZiAobWVtYmVyIDwgTihlYjY2X2luZGljZXMpKQorCQkJaWYgKG1lbWJlciA8IEFSUkFZX1NJWkUoZWI2Nl9pbmRpY2VzKSkKIAkJCQl2ZWMgPSBlYjY2X3ZlY3NbZWI2Nl9pbmRpY2VzW21lbWJlcl1dOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RfREVDX01BUlZFTDoKLQkJCWlmIChtZW1iZXIgPCBOKG1hcnZlbF9pbmRpY2VzKSkKKwkJCWlmIChtZW1iZXIgPCBBUlJBWV9TSVpFKG1hcnZlbF9pbmRpY2VzKSkKIAkJCQl2ZWMgPSBtYXJ2ZWxfdmVjc1ttYXJ2ZWxfaW5kaWNlc1ttZW1iZXJdXTsKIAkJCWJyZWFrOwogCQljYXNlIFNUX0RFQ19USVRBTjoKIAkJCXZlYyA9IHRpdGFuX3ZlY3NbMF07CS8qIGRlZmF1bHQgKi8KLQkJCWlmIChtZW1iZXIgPCBOKHRpdGFuX2luZGljZXMpKQorCQkJaWYgKG1lbWJlciA8IEFSUkFZX1NJWkUodGl0YW5faW5kaWNlcykpCiAJCQkJdmVjID0gdGl0YW5fdmVjc1t0aXRhbl9pbmRpY2VzW21lbWJlcl1dOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RfREVDX1RTVU5BTUk6Ci0JCQlpZiAobWVtYmVyIDwgTih0c3VuYW1pX2luZGljZXMpKQorCQkJaWYgKG1lbWJlciA8IEFSUkFZX1NJWkUodHN1bmFtaV9pbmRpY2VzKSkKIAkJCQl2ZWMgPSB0c3VuYW1pX3ZlY3NbdHN1bmFtaV9pbmRpY2VzW21lbWJlcl1dOwogCQkJYnJlYWs7CiAJCWNhc2UgU1RfREVDXzEwMDA6CkBAIC0xMDM5LDcgKzEwMzcsNyBAQAogCiAJc2l6ZV90IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTihhbGxfdmVjcyk7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFsbF92ZWNzKTsgKytpKSB7CiAJCXN0cnVjdCBhbHBoYV9tYWNoaW5lX3ZlY3RvciAqbXYgPSBhbGxfdmVjc1tpXTsKIAkJaWYgKHN0cmNhc2VjbXAobXYtPnZlY3Rvcl9uYW1lLCBuYW1lKSA9PSAwKQogCQkJcmV0dXJuIG12OwpAQCAtMTA1NSwxMyArMTA1MywxMyBAQAogCiAJLyogSWYgbm90IGluIHRoZSB0YWJsZXMsIG1ha2UgaXQgVU5LTk9XTiwKIAkgICBlbHNlIHNldCB0eXBlIG5hbWUgdG8gZmFtaWx5ICovCi0JaWYgKHR5cGUgPCBOKHN5c3R5cGVfbmFtZXMpKSB7CisJaWYgKHR5cGUgPCBBUlJBWV9TSVpFKHN5c3R5cGVfbmFtZXMpKSB7CiAJCSp0eXBlX25hbWUgPSBzeXN0eXBlX25hbWVzW3R5cGVdOwogCX0gZWxzZSBpZiAoKHR5cGUgPiBTVF9BUElfQklBUykgJiYKLQkJICAgKHR5cGUgLSBTVF9BUElfQklBUykgPCBOKGFwaV9uYW1lcykpIHsKKwkJICAgKHR5cGUgLSBTVF9BUElfQklBUykgPCBBUlJBWV9TSVpFKGFwaV9uYW1lcykpIHsKIAkJKnR5cGVfbmFtZSA9IGFwaV9uYW1lc1t0eXBlIC0gU1RfQVBJX0JJQVNdOwogCX0gZWxzZSBpZiAoKHR5cGUgPiBTVF9VTk9GRklDSUFMX0JJQVMpICYmCi0JCSAgICh0eXBlIC0gU1RfVU5PRkZJQ0lBTF9CSUFTKSA8IE4odW5vZmZpY2lhbF9uYW1lcykpIHsKKwkJICAgKHR5cGUgLSBTVF9VTk9GRklDSUFMX0JJQVMpIDwgQVJSQVlfU0laRSh1bm9mZmljaWFsX25hbWVzKSkgewogCQkqdHlwZV9uYW1lID0gdW5vZmZpY2lhbF9uYW1lc1t0eXBlIC0gU1RfVU5PRkZJQ0lBTF9CSUFTXTsKIAl9IGVsc2UgewogCQkqdHlwZV9uYW1lID0gc3lzX3Vua25vd247CkBAIC0xMDgzLDcgKzEwODEsNyBAQAogCWRlZmF1bHQ6IC8qIGRlZmF1bHQgdG8gdmFyaWF0aW9uICIwIiBmb3Igbm93ICovCiAJCWJyZWFrOwogCWNhc2UgU1RfREVDX0VCMTY0OgotCQlpZiAobWVtYmVyIDwgTihlYjE2NF9pbmRpY2VzKSkKKwkJaWYgKG1lbWJlciA8IEFSUkFZX1NJWkUoZWIxNjRfaW5kaWNlcykpCiAJCQkqdmFyaWF0aW9uX25hbWUgPSBlYjE2NF9uYW1lc1tlYjE2NF9pbmRpY2VzW21lbWJlcl1dOwogCQkvKiBQQzE2NCBtYXkgc2hvdyBhcyBFQjE2NCB2YXJpYXRpb24sIGJ1dCB3aXRoIEVWNTYgQ1BVLAogCQkgICBzbywgc2luY2Ugbm8gdHJ1ZSBFQjE2NCBoYWQgYW55dGhpbmcgYnV0IEVWNS4uLiAqLwpAQCAtMTA5MSwzMiArMTA4OSwzMiBAQAogCQkJKnZhcmlhdGlvbl9uYW1lID0gZWIxNjRfbmFtZXNbMV07IC8qIG1ha2UgaXQgUEMxNjQgKi8KIAkJYnJlYWs7CiAJY2FzZSBTVF9ERUNfQUxDT1I6Ci0JCWlmIChtZW1iZXIgPCBOKGFsY29yX2luZGljZXMpKQorCQlpZiAobWVtYmVyIDwgQVJSQVlfU0laRShhbGNvcl9pbmRpY2VzKSkKIAkJCSp2YXJpYXRpb25fbmFtZSA9IGFsY29yX25hbWVzW2FsY29yX2luZGljZXNbbWVtYmVyXV07CiAJCWJyZWFrOwogCWNhc2UgU1RfREVDX0VCNjRQOgotCQlpZiAobWVtYmVyIDwgTihlYjY0cF9pbmRpY2VzKSkKKwkJaWYgKG1lbWJlciA8IEFSUkFZX1NJWkUoZWI2NHBfaW5kaWNlcykpCiAJCQkqdmFyaWF0aW9uX25hbWUgPSBlYjY0cF9uYW1lc1tlYjY0cF9pbmRpY2VzW21lbWJlcl1dOwogCQlicmVhazsKIAljYXNlIFNUX0RFQ19FQjY2OgotCQlpZiAobWVtYmVyIDwgTihlYjY2X2luZGljZXMpKQorCQlpZiAobWVtYmVyIDwgQVJSQVlfU0laRShlYjY2X2luZGljZXMpKQogCQkJKnZhcmlhdGlvbl9uYW1lID0gZWI2Nl9uYW1lc1tlYjY2X2luZGljZXNbbWVtYmVyXV07CiAJCWJyZWFrOwogCWNhc2UgU1RfREVDX01BUlZFTDoKLQkJaWYgKG1lbWJlciA8IE4obWFydmVsX2luZGljZXMpKQorCQlpZiAobWVtYmVyIDwgQVJSQVlfU0laRShtYXJ2ZWxfaW5kaWNlcykpCiAJCQkqdmFyaWF0aW9uX25hbWUgPSBtYXJ2ZWxfbmFtZXNbbWFydmVsX2luZGljZXNbbWVtYmVyXV07CiAJCWJyZWFrOwogCWNhc2UgU1RfREVDX1JBV0hJREU6Ci0JCWlmIChtZW1iZXIgPCBOKHJhd2hpZGVfaW5kaWNlcykpCisJCWlmIChtZW1iZXIgPCBBUlJBWV9TSVpFKHJhd2hpZGVfaW5kaWNlcykpCiAJCQkqdmFyaWF0aW9uX25hbWUgPSByYXdoaWRlX25hbWVzW3Jhd2hpZGVfaW5kaWNlc1ttZW1iZXJdXTsKIAkJYnJlYWs7CiAJY2FzZSBTVF9ERUNfVElUQU46CiAJCSp2YXJpYXRpb25fbmFtZSA9IHRpdGFuX25hbWVzWzBdOwkvKiBkZWZhdWx0ICovCi0JCWlmIChtZW1iZXIgPCBOKHRpdGFuX2luZGljZXMpKQorCQlpZiAobWVtYmVyIDwgQVJSQVlfU0laRSh0aXRhbl9pbmRpY2VzKSkKIAkJCSp2YXJpYXRpb25fbmFtZSA9IHRpdGFuX25hbWVzW3RpdGFuX2luZGljZXNbbWVtYmVyXV07CiAJCWJyZWFrOwogCWNhc2UgU1RfREVDX1RTVU5BTUk6Ci0JCWlmIChtZW1iZXIgPCBOKHRzdW5hbWlfaW5kaWNlcykpCisJCWlmIChtZW1iZXIgPCBBUlJBWV9TSVpFKHRzdW5hbWlfaW5kaWNlcykpCiAJCQkqdmFyaWF0aW9uX25hbWUgPSB0c3VuYW1pX25hbWVzW3RzdW5hbWlfaW5kaWNlc1ttZW1iZXJdXTsKIAkJYnJlYWs7CiAJfQpAQCAtMTIxMSw3ICsxMjA5LDcgQEAKIAogCWNwdV9pbmRleCA9ICh1bnNpZ25lZCkgKGNwdS0+dHlwZSAtIDEpOwogCWNwdV9uYW1lID0gIlVua25vd24iOwotCWlmIChjcHVfaW5kZXggPCBOKGNwdV9uYW1lcykpCisJaWYgKGNwdV9pbmRleCA8IEFSUkFZX1NJWkUoY3B1X25hbWVzKSkKIAkJY3B1X25hbWUgPSBjcHVfbmFtZXNbY3B1X2luZGV4XTsKIAogCWdldF9zeXNuYW1lcyhod3JwYi0+c3lzX3R5cGUsIGh3cnBiLT5zeXNfdmFyaWF0aW9uLApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J1ZmZpYW4uYyBiL2FyY2gvYWxwaGEva2VybmVsL3N5c19ydWZmaWFuLmMKaW5kZXggNzhjMzBkZS4uNWI5OWNmMyAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9rZXJuZWwvc3lzX3J1ZmZpYW4uYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zeXNfcnVmZmlhbi5jCkBAIC0xODIsMTYgKzE4MiwxNiBAQAogcnVmZmlhbl9nZXRfYmFua19zaXplKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCXVuc2lnbmVkIGxvbmcgYmFua19hZGRyLCBiYW5rLCByZXQgPSAwOwotICAKKwogCS8qIFZhbGlkIG9mZnNldHMgYXJlOiAweDgwMCwgMHg4NDAgYW5kIDB4ODgwCiAJICAgc2luY2UgUnVmZmlhbiBvbmx5IHVzZXMgdGhyZWUgYmFua3MuICAqLwogCWJhbmtfYWRkciA9ICh1bnNpZ25lZCBsb25nKVBZWElTX01DUiArIG9mZnNldDsKIAliYW5rID0gKih2dWxwKWJhbmtfYWRkcjsKLSAgICAKKwogCS8qIENoZWNrIEJBTktfRU5BQkxFICovCiAJaWYgKGJhbmsgJiAweDAxKSB7CiAJCXN0YXRpYyB1bnNpZ25lZCBsb25nIHNpemVbXSBfX2luaXRkYXRhID0gewotCQkJMHg0MDAwMDAwMFVMLCAvKiAweDAwLCAgIDFHICovIAorCQkJMHg0MDAwMDAwMFVMLCAvKiAweDAwLCAgIDFHICovCiAJCQkweDIwMDAwMDAwVUwsIC8qIDB4MDIsIDUxMk0gKi8KIAkJCTB4MTAwMDAwMDBVTCwgLyogMHgwNCwgMjU2TSAqLwogCQkJMHgwODAwMDAwMFVMLCAvKiAweDA2LCAxMjhNICovCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJfTsKIAogCQliYW5rID0gKGJhbmsgJiAweDFlKSA+PiAxOwotCQlpZiAoYmFuayA8IHNpemVvZihzaXplKS9zaXplb2YoKnNpemUpKQorCQlpZiAoYmFuayA8IEFSUkFZX1NJWkUoc2l6ZSkpCiAJCQlyZXQgPSBzaXplW2JhbmtdOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCmluZGV4IDUwZWNjZGUuLmIxOTFjYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKQEAgLTIzMyw3ICsyMzMsNyBAQAogCWluZGV4ID0gY3B1LT50eXBlICYgMHhmZmZmZmZmZjsKIAogCS8qIElmIGluZGV4IG91dCBvZiBib3VuZHMsIG5vIHdheSB0byB2YWxpZGF0ZS4gICovCi0JaWYgKGluZGV4ID49IHNpemVvZihjcHVfaHopL3NpemVvZihjcHVfaHpbMF0pKQorCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKGNwdV9oeikpCiAJCXJldHVybiBjYzsKIAogCS8qIElmIGluZGV4IGNvbnRhaW5zIG5vIGRhdGEsIG5vIHdheSB0byB2YWxpZGF0ZS4gICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9NYWtlZmlsZSBiL2FyY2gvYXJtL01ha2VmaWxlCmluZGV4IDMzNDVjNmQuLjkyODczY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL01ha2VmaWxlCkBAIC00Nyw3ICs0Nyw4IEBACiAjIHRlc3RpbmcgZm9yIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGxhdGVyIHJhdGhlciBpbXBvc3NpYmxlLgogYXJjaC0kKENPTkZJR19DUFVfMzJ2NikJCTo9LURfX0xJTlVYX0FSTV9BUkNIX189NiAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1hcm12NiwtbWFyY2g9YXJtdjV0IC1XYSQoY29tbWEpLW1hcmNoPWFybXY2KQogYXJjaC0kKENPTkZJR19DUFVfMzJ2NkspCTo9LURfX0xJTlVYX0FSTV9BUkNIX189NiAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1hcm12NmssLW1hcmNoPWFybXY1dCAtV2EkKGNvbW1hKS1tYXJjaD1hcm12NmspCi1hcmNoLSQoQ09ORklHX0NQVV8zMnY1KQkJOj0tRF9fTElOVVhfQVJNX0FSQ0hfXz01ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPWFybXY1dGUsLW1hcmNoPWFybXY0KQorYXJjaC0kKENPTkZJR19DUFVfMzJ2NSkJCTo9LURfX0xJTlVYX0FSTV9BUkNIX189NSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1hcm12NXRlLC1tYXJjaD1hcm12NHQpCithcmNoLSQoQ09ORklHX0NQVV8zMnY0VCkJOj0tRF9fTElOVVhfQVJNX0FSQ0hfXz00IC1tYXJjaD1hcm12NHQKIGFyY2gtJChDT05GSUdfQ1BVXzMydjQpCQk6PS1EX19MSU5VWF9BUk1fQVJDSF9fPTQgLW1hcmNoPWFybXY0CiBhcmNoLSQoQ09ORklHX0NQVV8zMnYzKQkJOj0tRF9fTElOVVhfQVJNX0FSQ0hfXz0zIC1tYXJjaD1hcm12MwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMgYi9hcmNoL2FybS9jb21tb24vZG1hYm91bmNlLmMKaW5kZXggNWI3YzI2My4uMDI4YmRjOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2RtYWJvdW5jZS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9kbWFib3VuY2UuYwpAQCAtMTc5LDE3ICsxNzksMTkgQEAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNhZmVfYnVmZmVyICoKIGZpbmRfc2FmZV9idWZmZXIoc3RydWN0IGRtYWJvdW5jZV9kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm8sIGRtYV9hZGRyX3Qgc2FmZV9kbWFfYWRkcikKIHsKLQlzdHJ1Y3Qgc2FmZV9idWZmZXIgKmIgPSBOVUxMOworCXN0cnVjdCBzYWZlX2J1ZmZlciAqYiwgKnJiID0gTlVMTDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcmVhZF9sb2NrX2lycXNhdmUoJmRldmljZV9pbmZvLT5sb2NrLCBmbGFncyk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGIsICZkZXZpY2VfaW5mby0+c2FmZV9idWZmZXJzLCBub2RlKQotCQlpZiAoYi0+c2FmZV9kbWFfYWRkciA9PSBzYWZlX2RtYV9hZGRyKQorCQlpZiAoYi0+c2FmZV9kbWFfYWRkciA9PSBzYWZlX2RtYV9hZGRyKSB7CisJCQlyYiA9IGI7CiAJCQlicmVhazsKKwkJfQogCiAJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2luZm8tPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gYjsKKwlyZXR1cm4gcmI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2dpYy5jIGIvYXJjaC9hcm0vY29tbW9uL2dpYy5jCmluZGV4IGYzYzFlYmYuLmYzZTAyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9naWMuYworKysgYi9hcmNoL2FybS9jb21tb24vZ2ljLmMKQEAgLTk1LDcgKzk1LDggQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgZ2ljX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdpY19jaGlwID0geworCS5uYW1lCQk9ICJHSUMiLAogCS5hY2sJCT0gZ2ljX2Fja19pcnEsCiAJLm1hc2sJCT0gZ2ljX21hc2tfaXJxLAogCS51bm1hc2sJCT0gZ2ljX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKaW5kZXggMDRkZTgzZi4uNGUwZGNhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwpAQCAtMjA0LDcgKzIwNCw4IEBACiAJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0lDUik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsb2NvbW9fY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbG9jb21vX2NoaXAgPSB7CisJLm5hbWUJPSAiTE9DT01PIiwKIAkuYWNrCT0gbG9jb21vX2Fja19pcnEsCiAJLm1hc2sJPSBsb2NvbW9fbWFza19pcnEsCiAJLnVubWFzawk9IGxvY29tb191bm1hc2tfaXJxLApAQCAtMjQ5LDcgKzI1MCw4IEBACiAJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0tFWUJPQVJEICsgTE9DT01PX0tJQyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsb2NvbW9fa2V5X2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGxvY29tb19rZXlfY2hpcCA9IHsKKwkubmFtZQk9ICJMT0NPTU8ta2V5IiwKIAkuYWNrCT0gbG9jb21vX2tleV9hY2tfaXJxLAogCS5tYXNrCT0gbG9jb21vX2tleV9tYXNrX2lycSwKIAkudW5tYXNrCT0gbG9jb21vX2tleV91bm1hc2tfaXJxLApAQCAtMzEyLDcgKzMxNCw4IEBACiAJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0dJRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsb2NvbW9fZ3Bpb19jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsb2NvbW9fZ3Bpb19jaGlwID0geworCS5uYW1lCT0gIkxPQ09NTy1ncGlvIiwKIAkuYWNrCT0gbG9jb21vX2dwaW9fYWNrX2lycSwKIAkubWFzawk9IGxvY29tb19ncGlvX21hc2tfaXJxLAogCS51bm1hc2sJPSBsb2NvbW9fZ3Bpb191bm1hc2tfaXJxLApAQCAtMzU3LDcgKzM2MCw4IEBACiAJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0xUSU5UKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGxvY29tb19sdF9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsb2NvbW9fbHRfY2hpcCA9IHsKKwkubmFtZQk9ICJMT0NPTU8tbHQiLAogCS5hY2sJPSBsb2NvbW9fbHRfYWNrX2lycSwKIAkubWFzawk9IGxvY29tb19sdF9tYXNrX2lycSwKIAkudW5tYXNrCT0gbG9jb21vX2x0X3VubWFza19pcnEsCkBAIC00MTgsNyArNDIyLDggQEAKIAlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJSUUpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbG9jb21vX3NwaV9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsb2NvbW9fc3BpX2NoaXAgPSB7CisJLm5hbWUJPSAiTE9DT01PLXNwaSIsCiAJLmFjawk9IGxvY29tb19zcGlfYWNrX2lycSwKIAkubWFzawk9IGxvY29tb19zcGlfbWFza19pcnEsCiAJLnVubWFzawk9IGxvY29tb19zcGlfdW5tYXNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMgYi9hcmNoL2FybS9jb21tb24vcnRjdGltZS5jCmluZGV4IDM1YzlhNjQuLjRlNTQ0NWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9ydGN0aW1lLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL3J0Y3RpbWUuYwpAQCAtNjgsNiArNjgsNyBAQAogCQlydGNfdGltZV90b190bShuZXh0X3RpbWUsIG5leHQpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0wocnRjX25leHRfYWxhcm1fdGltZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJ0Y19hcm1fcmVhZF90aW1lKHN0cnVjdCBydGNfb3BzICpvcHMsIHN0cnVjdCBydGNfdGltZSAqdG0pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggMWNkYjI2YS4uMjk4MThiZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMjcyLDcgKzI3Miw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzYTExMTFfbG93X2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhMTExMV9sb3dfY2hpcCA9IHsKKwkubmFtZQkJPSAiU0ExMTExLWwiLAogCS5hY2sJCT0gc2ExMTExX2Fja19pcnEsCiAJLm1hc2sJCT0gc2ExMTExX21hc2tfbG93aXJxLAogCS51bm1hc2sJCT0gc2ExMTExX3VubWFza19sb3dpcnEsCkBAIC0zNjgsNyArMzY5LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNhMTExMV9oaWdoX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhMTExMV9oaWdoX2NoaXAgPSB7CisJLm5hbWUJCT0gIlNBMTExMS1oIiwKIAkuYWNrCQk9IHNhMTExMV9hY2tfaXJxLAogCS5tYXNrCQk9IHNhMTExMV9tYXNrX2hpZ2hpcnEsCiAJLnVubWFzawkJPSBzYTExMTFfdW5tYXNrX2hpZ2hpcnEsCkBAIC02MTYsNyArNjE4LDcgQEAKIHsKIAlzdHJ1Y3Qgc2ExMTExICpzYWNoaXA7CiAJdW5zaWduZWQgbG9uZyBpZDsKLQl1bnNpZ25lZCBpbnQgaGFzX2RldnMsIHZhbDsKKwl1bnNpZ25lZCBpbnQgaGFzX2RldnM7CiAJaW50IGksIHJldCA9IC1FTk9ERVY7CiAKIAlzYWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2ExMTExKSwgR0ZQX0tFUk5FTCk7CkBAIC02NjcsNiArNjY5LDkgQEAKIAlzYTExMTFfd2FrZShzYWNoaXApOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfU0ExMTAwCisJeworCXVuc2lnbmVkIGludCB2YWw7CisKIAkvKgogCSAqIFRoZSBTRFJBTSBjb25maWd1cmF0aW9uIG9mIHRoZSBTQTExMTAgYW5kIHRoZSBTQTExMTEgbXVzdAogCSAqIG1hdGNoLiAgVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byBlbnN1cmUgdGhhdCBTQTExMTEgYWNjZXNzZXMKQEAgLTY5MCw2ICs2OTUsNyBAQAogCSAqIEVuYWJsZSB0aGUgU0ExMTEwIG1lbW9yeSBidXMgcmVxdWVzdCBhbmQgZ3JhbnQgc2lnbmFscy4KIAkgKi8KIAlzYTExMTBfbWJfZW5hYmxlKCk7CisJfQogI2VuZGlmCiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL3ZpYy5jIGIvYXJjaC9hcm0vY29tbW9uL3ZpYy5jCmluZGV4IGExOWJjNGEuLjQzZDI3ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi92aWMuYworKysgYi9hcmNoL2FybS9jb21tb24vdmljLmMKQEAgLTM5LDcgKzM5LDggQEAKIAl3cml0ZWwoMSA8PCBpcnEsIGJhc2UgKyBWSUNfSU5UX0VOQUJMRSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCB2aWNfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdmljX2NoaXAgPSB7CisJLm5hbWUJPSAiVklDIiwKIAkuYWNrCT0gdmljX21hc2tfaXJxLAogCS5tYXNrCT0gdmljX21hc2tfaXJxLAogCS51bm1hc2sJPSB2aWNfdW5tYXNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvY3NiMzM3X2RlZmNvbmZpZwppbmRleCAzNTk0MTU1Li5jZjNmYTVjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2NzYjMzN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9jc2IzMzdfZGVmY29uZmlnCkBAIC02MjEsOSArNjIxLDggQEAKICMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfUlRDPXkKLSMgQ09ORklHX0FUOTFfUlRDIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCkBAIC05NTYsMTAgKzk1NSw0MiBAQAogQ09ORklHX01NQz15CiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogQ09ORklHX01NQ19CTE9DSz15Ci0jIENPTkZJR19NTUNfV0JTRCBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX0FUOTFSTTkyMDA9eQogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMSIKKworIworIyBSVEMgaW50ZXJmYWNlcworIworIyBDT05GSUdfUlRDX0lOVEZfU1lTRlMgaXMgbm90IHNldAorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorCisjCisjIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX0RTMTMwNz15CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfQVQ5MT15CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKaW5kZXggYzBkZTZmYy4uMjk0OGI0NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzEKLSMgU3VuIEp1bCAgOSAxNToyMTozMCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxLWdpdDkKKyMgU2F0IEp1bCAxNSAxNTowODoxMCAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQpAQCAtMzAsNiArMzAsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKQEAgLTc0OSw3ICs3NTAsNyBAQAogIyBVU0Igc3VwcG9ydAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKICMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKIENPTkZJR19VU0I9eQogQ09ORklHX1VTQl9ERUJVRz15CkBAIC03NjYsNiArNzY3LDkgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKICMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAogCiAjCkBAIC04NTUsNiArODU5LDcgQEAKIENPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz15CiAjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfU0lFUlJBV0lSRUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CkBAIC04NzEsNyArODc2LDcgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldApAQCAtOTE2LDYgKzkyMSw3IEBACiAjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldApAQCAtMTAyMyw3ICsxMDI5LDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3BueDQwMDhfZGVmY29uZmlnCmluZGV4IDhhMDc4ZDQuLmE0OTg5ZjQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvcG54NDAwOF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9wbng0MDA4X2RlZmNvbmZpZwpAQCAtMSwxNCArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQotIyBUaHUgQXByICA2IDE3OjA1OjU4IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKKyMgTW9uIFNlcCAxMSAxMzo1OToyNCAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQogQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtMjgsNiArMzIsNyBAQAogQ09ORklHX1BPU0lYX01RVUVVRT15CiBDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BVURJVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CkBAIC00NCwxNCArNDksMTUgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9bQogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC04NCwxOCArOTAsMjYgQEAKICMKICMgU3lzdGVtIFR5cGUKICMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9QTlg0MDA4PXkKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKQEAgLTEwMywxMyArMTE3LDYgQEAKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfUE5YNDAwOD15CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTEzOCwxNSArMTQ1LDcgQEAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAogIwotQ09ORklHX1BDQ0FSRD1tCi0jIENPTkZJR19QQ01DSUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1BDTUNJQT1tCi1DT05GSUdfUENNQ0lBX0xPQURfQ0lTPXkKLUNPTkZJR19QQ01DSUFfSU9DVEw9eQotCi0jCi0jIFBDLWNhcmQgYnJpZGdlcwotIworIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgRmVhdHVyZXMKQEAgLTE2NCwxMyArMTYzLDE0IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKICMgQm9vdCBvcHRpb25zCiAjCi1DT05GSUdfWkJPT1RfUk9NX1RFWFQ9MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MAorQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCiBDT05GSUdfQ01ETElORT0ibWVtPTY0TSBjb25zb2xlPXR0eVMwLDExNTIwMCIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogCkBAIC0xODEsNyArMTgxLDggQEAKICMKICMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCiAjCi0jIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAogIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAogIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKIApAQCAtMTk5LDcgKzIwMCw3IEBACiBDT05GSUdfUE09eQogQ09ORklHX1BNX0xFR0FDWT15CiAjIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQVBNPW0KKyMgQ09ORklHX0FQTSBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29ya2luZwpAQCAtMjEwLDEyICsyMTEsMTIgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiAjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFDS0VUPW0KK0NPTkZJR19QQUNLRVQ9eQogQ09ORklHX1BBQ0tFVF9NTUFQPXkKLUNPTkZJR19VTklYPW0KK0NPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKLUNPTkZJR19YRlJNX1VTRVI9bQotQ09ORklHX05FVF9LRVk9bQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CiBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKQEAgLTIyNywxMCArMjI4LDEyIEBACiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKICMgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQgaXMgbm90IHNldAogQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0U9eQotIyBDT05GSUdfSVBfUE5QIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfSVBJUD1tCi1DT05GSUdfTkVUX0lQR1JFPW0KLUNPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9NUk9VVEU9eQogQ09ORklHX0lQX1BJTVNNX1YxPXkKIENPTkZJR19JUF9QSU1TTV9WMj15CkBAIC0yNDEsNiArMjQ0LDggQEAKIENPTkZJR19JTkVUX0lQQ09NUD1tCiBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9bQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjg3LDcgKzI5MiwxMCBAQAogQ09ORklHX0lORVQ2X0lQQ09NUD1tCiBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVQ2X1RVTk5FTD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD1tCiBDT05GSUdfSVBWNl9UVU5ORUw9bQorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19CUklER0VfTkVURklMVEVSPXkKQEAgLTMxMyw2ICszMjEsNyBAQAogQ09ORklHX0lQX05GX0FNQU5EQT1tCiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAKICMKQEAgLTM4NCw3ICszOTMsNyBAQAogQ09ORklHX0lQWD1tCiAjIENPTkZJR19JUFhfSU5URVJOIGlzIG5vdCBzZXQKIENPTkZJR19BVEFMSz1tCi1DT05GSUdfREVWX0FQUExFVEFMSz15CitDT05GSUdfREVWX0FQUExFVEFMSz1tCiBDT05GSUdfSVBERFA9bQogQ09ORklHX0lQRERQX0VOQ0FQPXkKIENPTkZJR19JUEREUF9ERUNBUD15CkBAIC00NDUsMTEwICs0NTQsOSBAQAogIyBOZXR3b3JrIHRlc3RpbmcKICMKIENPTkZJR19ORVRfUEtUR0VOPW0KLUNPTkZJR19IQU1SQURJTz15Ci0KLSMKLSMgUGFja2V0IFJhZGlvIHByb3RvY29scwotIwotQ09ORklHX0FYMjU9bQotIyBDT05GSUdfQVgyNV9EQU1BX1NMQVZFIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRST009bQotQ09ORklHX1JPU0U9bQotCi0jCi0jIEFYLjI1IG5ldHdvcmsgZGV2aWNlIGRyaXZlcnMKLSMKLUNPTkZJR19NS0lTUz1tCi1DT05GSUdfNlBBQ0s9bQotQ09ORklHX0JQUUVUSEVSPW0KLUNPTkZJR19CQVlDT01fU0VSX0ZEWD1tCi1DT05GSUdfQkFZQ09NX1NFUl9IRFg9bQotQ09ORklHX0JBWUNPTV9QQVI9bQotQ09ORklHX0JBWUNPTV9FUFA9bQotQ09ORklHX1lBTT1tCi1DT05GSUdfSVJEQT1tCi0KLSMKLSMgSXJEQSBwcm90b2NvbHMKLSMKLUNPTkZJR19JUkxBTj1tCi1DT05GSUdfSVJORVQ9bQotQ09ORklHX0lSQ09NTT1tCi0jIENPTkZJR19JUkRBX1VMVFJBIGlzIG5vdCBzZXQKLQotIwotIyBJckRBIG9wdGlvbnMKLSMKLUNPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUD15Ci1DT05GSUdfSVJEQV9GQVNUX1JSPXkKLUNPTkZJR19JUkRBX0RFQlVHPXkKLQotIwotIyBJbmZyYXJlZC1wb3J0IGRldmljZSBkcml2ZXJzCi0jCi0KLSMKLSMgU0lSIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfSVJUVFlfU0lSPW0KLQotIwotIyBEb25nbGUgc3VwcG9ydAotIwotQ09ORklHX0RPTkdMRT15Ci1DT05GSUdfRVNJX0RPTkdMRT1tCi1DT05GSUdfQUNUSVNZU19ET05HTEU9bQotQ09ORklHX1RFS1JBTV9ET05HTEU9bQotIyBDT05GSUdfVE9JTTMyMzJfRE9OR0xFIGlzIG5vdCBzZXQKLUNPTkZJR19MSVRFTElOS19ET05HTEU9bQotQ09ORklHX01BNjAwX0RPTkdMRT1tCi1DT05GSUdfR0lSQklMX0RPTkdMRT1tCi1DT05GSUdfTUNQMjEyMF9ET05HTEU9bQotQ09ORklHX09MRF9CRUxLSU5fRE9OR0xFPW0KLUNPTkZJR19BQ1QyMDBMX0RPTkdMRT1tCi0KLSMKLSMgT2xkIFNJUiBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX0lSUE9SVF9TSVI9bQotCi0jCi0jIE9sZCBTZXJpYWwgZG9uZ2xlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RPTkdMRV9PTEQgaXMgbm90IHNldAotCi0jCi0jIEZJUiBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX1VTQl9JUkRBPW0KLUNPTkZJR19TSUdNQVRFTF9GSVI9bQotQ09ORklHX0JUPW0KLUNPTkZJR19CVF9MMkNBUD1tCi1DT05GSUdfQlRfU0NPPW0KLUNPTkZJR19CVF9SRkNPTU09bQotQ09ORklHX0JUX1JGQ09NTV9UVFk9eQotQ09ORklHX0JUX0JORVA9bQotQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKLUNPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15Ci1DT05GSUdfQlRfQ01UUD1tCi1DT05GSUdfQlRfSElEUD1tCi0KLSMKLSMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCi0jCi1DT05GSUdfQlRfSENJVVNCPW0KLUNPTkZJR19CVF9IQ0lVU0JfU0NPPXkKLUNPTkZJR19CVF9IQ0lVQVJUPW0KLUNPTkZJR19CVF9IQ0lVQVJUX0g0PXkKLUNPTkZJR19CVF9IQ0lVQVJUX0JDU1A9eQotQ09ORklHX0JUX0hDSUJDTTIwM1g9bQotIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKLUNPTkZJR19CVF9IQ0lCRlVTQj1tCi1DT05GSUdfQlRfSENJRFRMMT1tCi1DT05GSUdfQlRfSENJQlQzQz1tCi1DT05GSUdfQlRfSENJQkxVRUNBUkQ9bQotQ09ORklHX0JUX0hDSUJUVUFSVD1tCi1DT05GSUdfQlRfSENJVkhDST1tCisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19JRUVFODAyMTE9bQogIyBDT05GSUdfSUVFRTgwMjExX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX0lFRUU4MDIxMV9DUllQVF9XRVAgaXMgbm90IHNldApAQCAtNTY2LDggKzQ3NCw5IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci1DT05GSUdfRldfTE9BREVSPW0KK0NPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCkBAIC01NzcsMTEgKzQ4NiwxMSBAQAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCiAjCi1DT05GSUdfTVREPW0KK0NPTkZJR19NVEQ9eQogIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ09OQ0FUPW0KK0NPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX1JFREJPT1RfUEFSVFM9bQorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKIENPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKQEAgLTU5MSwyMiArNTAwLDE4IEBACiAjCiAjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCiAjCi1DT05GSUdfTVREX0NIQVI9bQotQ09ORklHX01URF9CTE9DSz1tCi1DT05GSUdfTVREX0JMT0NLX1JPPW0KLUNPTkZJR19GVEw9bQotQ09ORklHX05GVEw9bQotQ09ORklHX05GVExfUlc9eQotQ09ORklHX0lORlRMPW0KK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAogCiAjCiAjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCiAjCi1DT05GSUdfTVREX0NGST1tCi1DT05GSUdfTVREX0pFREVDUFJPQkU9bQotQ09ORklHX01URF9HRU5fUFJPQkU9bQotIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CiBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQogQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKQEAgLTYxNywzNiArNTIyLDI3IEBACiBDT05GSUdfTVREX0NGSV9JMj15CiAjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9bQotQ09ORklHX01URF9DRklfQU1EU1REPW0KLUNPTkZJR19NVERfQ0ZJX1NUQUE9bQotQ09ORklHX01URF9DRklfVVRJTD1tCi1DT05GSUdfTVREX1JBTT1tCi1DT05GSUdfTVREX1JPTT1tCi1DT05GSUdfTVREX0FCU0VOVD1tCisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfT0JTT0xFVEVfQ0hJUFMgaXMgbm90IHNldAogCiAjCiAjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKICMKLUNPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUz15Ci1DT05GSUdfTVREX1BIWVNNQVA9bQotQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4ODAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDQwMDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9JTVBBNyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCiAjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAogQ09ORklHX01URF9TTFJBTT1tCiBDT05GSUdfTVREX1BIUkFNPW0KIENPTkZJR19NVERfTVREUkFNPW0KIENPTkZJR19NVERSQU1fVE9UQUxfU0laRT00MDk2CiBDT05GSUdfTVREUkFNX0VSQVNFX1NJWkU9MTI4Ci1DT05GSUdfTVREX0JMS01URD1tCiAjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKIAogIwpAQCAtNjYzLDE0ICs1NTksMTIgQEAKICMKICMgTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycwogIwotQ09ORklHX01URF9OQU5EPW0KK0NPTkZJR19NVERfTkFORD15CiAjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAotQ09ORklHX01URF9OQU5EX0lEUz1tCi1DT05GSUdfTVREX05BTkRfRElTS09OQ0hJUD1tCi0jIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FEVkFOQ0VEIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTkFORF9ESVNLT05DSElQX1BST0JFX0FERFJFU1M9MAotIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUF9CQlRXUklURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9OQU5EU0lNPW0KIAogIwogIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCkBAIC02ODAsMTUgKzU3NCw3IEBACiAjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAogIwotQ09ORklHX1BBUlBPUlQ9bQotQ09ORklHX1BBUlBPUlRfUEM9bQotQ09ORklHX1BBUlBPUlRfUENfRklGTz15Ci0jIENPTkZJR19QQVJQT1JUX1BDX1NVUEVSSU8gaXMgbm90IHNldAotQ09ORklHX1BBUlBPUlRfUENfUENNQ0lBPW0KLUNPTkZJR19QQVJQT1JUX05PVF9QQz15Ci0jIENPTkZJR19QQVJQT1JUX0FSQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0Ci1DT05GSUdfUEFSUE9SVF8xMjg0PXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogCiAjCiAjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydApAQCAtNjk3LDQ1ICs1ODMsMTUgQEAKICMKICMgQmxvY2sgZGV2aWNlcwogIwotQ09ORklHX1BBUklERT1tCi1DT05GSUdfUEFSSURFX1BBUlBPUlQ9bQotCi0jCi0jIFBhcmFsbGVsIElERSBoaWdoLWxldmVsIGRyaXZlcnMKLSMKLUNPTkZJR19QQVJJREVfUEQ9bQotQ09ORklHX1BBUklERV9QQ0Q9bQotQ09ORklHX1BBUklERV9QRj1tCi1DT05GSUdfUEFSSURFX1BUPW0KLUNPTkZJR19QQVJJREVfUEc9bQotCi0jCi0jIFBhcmFsbGVsIElERSBwcm90b2NvbCBtb2R1bGVzCi0jCi1DT05GSUdfUEFSSURFX0FURU49bQotQ09ORklHX1BBUklERV9CUENLPW0KLUNPTkZJR19QQVJJREVfQlBDSzY9bQotQ09ORklHX1BBUklERV9DT01NPW0KLUNPTkZJR19QQVJJREVfRFNUUj1tCi1DT05GSUdfUEFSSURFX0ZJVDI9bQotQ09ORklHX1BBUklERV9GSVQzPW0KLUNPTkZJR19QQVJJREVfRVBBVD1tCi0jIENPTkZJR19QQVJJREVfRVBBVEM4IGlzIG5vdCBzZXQKLUNPTkZJR19QQVJJREVfRVBJQT1tCi1DT05GSUdfUEFSSURFX0ZSSVE9bQotQ09ORklHX1BBUklERV9GUlBXPW0KLUNPTkZJR19QQVJJREVfS0JJQz1tCi1DT05GSUdfUEFSSURFX0tUVEk9bQotQ09ORklHX1BBUklERV9PTjIwPW0KLUNPTkZJR19QQVJJREVfT04yNj1tCiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfTE9PUD1tCi1DT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLUNPTkZJR19CTEtfREVWX05CRD1tCitDT05GSUdfQkxLX0RFVl9MT09QPXkKK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9eQorQ09ORklHX0JMS19ERVZfTkJEPXkKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CkBAIC03NDMsMzQgKzU5OSw2IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLUNPTkZJR19JREU9bQotQ09ORklHX0JMS19ERVZfSURFPW0KLQotIwotIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFRElTSz1tCi0jIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSURFQ1M9bQotQ09ORklHX0JMS19ERVZfSURFQ0Q9bQotQ09ORklHX0JMS19ERVZfSURFVEFQRT1tCi1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9bQotQ09ORklHX0JMS19ERVZfSURFU0NTST1tCi0jIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcwotIwotQ09ORklHX0lERV9HRU5FUklDPW0KLSMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JREVETUEgaXMgbm90IHNldAotIyBDT05GSUdfSURFRE1BX0FVVE8gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9IRCBpcyBub3Qgc2V0Ci0KLSMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CkBAIC04MDgsNDEgKzYzNiwxMiBAQAogIwogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX1NBVEE9bQotQ09ORklHX1NDU0lfUFBBPW0KLUNPTkZJR19TQ1NJX0lNTT1tCi0jIENPTkZJR19TQ1NJX0laSVBfRVBQMTYgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JWklQX1NMT1dfQ1RSIGlzIG5vdCBzZXQKIENPTkZJR19TQ1NJX0RFQlVHPW0KIAogIwotIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKLSMKLUNPTkZJR19QQ01DSUFfQUhBMTUyWD1tCi1DT05GSUdfUENNQ0lBX0ZET01BSU49bQotQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJPW0KLUNPTkZJR19QQ01DSUFfUUxPR0lDPW0KLUNPTkZJR19QQ01DSUFfU1lNNTNDNTAwPW0KLQotIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwotQ09ORklHX01EPXkKLUNPTkZJR19CTEtfREVWX01EPW0KLUNPTkZJR19NRF9MSU5FQVI9bQotQ09ORklHX01EX1JBSUQwPW0KLUNPTkZJR19NRF9SQUlEMT1tCi1DT05GSUdfTURfUkFJRDEwPW0KLUNPTkZJR19NRF9SQUlENT1tCi0jIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENj1tCi1DT05GSUdfTURfTVVMVElQQVRIPW0KLUNPTkZJR19NRF9GQVVMVFk9bQotQ09ORklHX0JMS19ERVZfRE09bQotQ09ORklHX0RNX0NSWVBUPW0KLUNPTkZJR19ETV9TTkFQU0hPVD1tCi1DT05GSUdfRE1fTUlSUk9SPW0KLUNPTkZJR19ETV9aRVJPPW0KLSMgQ09ORklHX0RNX01VTFRJUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CiAKICMKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydApAQCAtODc4LDkgKzY3Nyw2IEBACiBDT05GSUdfTUlJPW0KICMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotQ09ORklHX05FVF9QT0NLRVQ9eQotQ09ORklHX0RFNjAwPW0KLUNPTkZJR19ERTYyMD1tCiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTkwNCw0OSArNzAwLDEzIEBACiAjIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCiAjCiBDT05GSUdfU1RSSVA9bQotQ09ORklHX1BDTUNJQV9XQVZFTEFOPW0KLUNPTkZJR19QQ01DSUFfTkVUV0FWRT1tCi0KLSMKLSMgV2lyZWxlc3MgODAyLjExIEZyZXF1ZW5jeSBIb3BwaW5nIGNhcmRzIHN1cHBvcnQKLSMKLUNPTkZJR19QQ01DSUFfUkFZQ1M9bQotCi0jCi0jIFdpcmVsZXNzIDgwMi4xMWIgSVNBL1BDSSBjYXJkcyBzdXBwb3J0Ci0jCi1DT05GSUdfSEVSTUVTPW0KLUNPTkZJR19BVE1FTD1tCi0KLSMKLSMgV2lyZWxlc3MgODAyLjExYiBQY21jaWEvQ2FyZGJ1cyBjYXJkcyBzdXBwb3J0Ci0jCi1DT05GSUdfUENNQ0lBX0hFUk1FUz1tCi0jIENPTkZJR19QQ01DSUFfU1BFQ1RSVU0gaXMgbm90IHNldAotQ09ORklHX0FJUk9fQ1M9bQotQ09ORklHX1BDTUNJQV9BVE1FTD1tCi1DT05GSUdfUENNQ0lBX1dMMzUwMT1tCisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUX1dJUkVMRVNTPXkKLQotIwotIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX05FVF9QQ01DSUE9eQotQ09ORklHX1BDTUNJQV8zQzU4OT1tCi1DT05GSUdfUENNQ0lBXzNDNTc0PW0KLUNPTkZJR19QQ01DSUFfRk1WSjE4WD1tCi1DT05GSUdfUENNQ0lBX1BDTkVUPW0KLUNPTkZJR19QQ01DSUFfTk1DTEFOPW0KLUNPTkZJR19QQ01DSUFfU01DOTFDOTI9bQotQ09ORklHX1BDTUNJQV9YSVJDMlBTPW0KLUNPTkZJR19QQ01DSUFfQVhORVQ9bQogCiAjCiAjIFdhbiBpbnRlcmZhY2VzCiAjCiBDT05GSUdfV0FOPXkKLUNPTkZJR19TWU5DTElOS19TWU5DUFBQPW0KIENPTkZJR19IRExDPW0KIENPTkZJR19IRExDX1JBVz15CiBDT05GSUdfSERMQ19SQVdfRVRIPXkKQEAgLTk2Niw3ICs3MjYsNiBAQAogIwogIyBDT05GSUdfQVRNX0RVTU1ZIGlzIG5vdCBzZXQKIENPTkZJR19BVE1fVENQPW0KLUNPTkZJR19QTElQPW0KIENPTkZJR19QUFA9bQogQ09ORklHX1BQUF9NVUxUSUxJTks9eQogQ09ORklHX1BQUF9GSUxURVI9eQpAQCAtOTkxLDExNCArNzUwLDcgQEAKICMKICMgSVNETiBzdWJzeXN0ZW0KICMKLUNPTkZJR19JU0ROPW0KLQotIwotIyBPbGQgSVNETjRMaW51eAotIwotQ09ORklHX0lTRE5fSTRMPW0KLUNPTkZJR19JU0ROX1BQUD15Ci1DT05GSUdfSVNETl9QUFBfVko9eQotQ09ORklHX0lTRE5fTVBQPXkKLUNPTkZJR19JUFBQX0ZJTFRFUj15Ci1DT05GSUdfSVNETl9QUFBfQlNEQ09NUD1tCi1DT05GSUdfSVNETl9BVURJTz15Ci1DT05GSUdfSVNETl9UVFlfRkFYPXkKLUNPTkZJR19JU0ROX1gyNT15Ci0KLSMKLSMgSVNETiBmZWF0dXJlIHN1Ym1vZHVsZXMKLSMKLUNPTkZJR19JU0ROX0RSVl9MT09QPW0KLUNPTkZJR19JU0ROX0RJVkVSU0lPTj1tCi0KLSMKLSMgSVNETjRMaW51eCBoYXJkd2FyZSBkcml2ZXJzCi0jCi0KLSMKLSMgUGFzc2l2ZSBjYXJkcwotIwotQ09ORklHX0lTRE5fRFJWX0hJU0FYPW0KLQotIwotIyBELWNoYW5uZWwgcHJvdG9jb2wgZmVhdHVyZXMKLSMKLUNPTkZJR19ISVNBWF9FVVJPPXkKLUNPTkZJR19ERV9BT0M9eQotIyBDT05GSUdfSElTQVhfTk9fU0VORENPTVBMRVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJU0FYX05PX0xMQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVNBWF9OT19LRVlQQUQgaXMgbm90IHNldAotQ09ORklHX0hJU0FYXzFUUjY9eQotQ09ORklHX0hJU0FYX05JMT15Ci1DT05GSUdfSElTQVhfTUFYX0NBUkRTPTgKLQotIwotIyBIaVNheCBzdXBwb3J0ZWQgY2FyZHMKLSMKLUNPTkZJR19ISVNBWF8xNl8zPXkKLUNPTkZJR19ISVNBWF9TMEJPWD15Ci1DT05GSUdfSElTQVhfRlJJVFpQQ0k9eQotQ09ORklHX0hJU0FYX0FWTV9BMV9QQ01DSUE9eQotQ09ORklHX0hJU0FYX0VMU0E9eQotQ09ORklHX0hJU0FYX0RJRUhMRElWQT15Ci1DT05GSUdfSElTQVhfU0VETEJBVUVSPXkKLUNPTkZJR19ISVNBWF9OSUNDWT15Ci1DT05GSUdfSElTQVhfR0FaRUw9eQotQ09ORklHX0hJU0FYX0hGQ19TWD15Ci0jIENPTkZJR19ISVNBWF9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGlTYXggUENNQ0lBIGNhcmQgc2VydmljZSBtb2R1bGVzCi0jCi1DT05GSUdfSElTQVhfU0VETEJBVUVSX0NTPW0KLUNPTkZJR19ISVNBWF9FTFNBX0NTPW0KLUNPTkZJR19ISVNBWF9BVk1fQTFfQ1M9bQotQ09ORklHX0hJU0FYX1RFTEVTX0NTPW0KLQotIwotIyBIaVNheCBzdWIgZHJpdmVyIG1vZHVsZXMKLSMKLUNPTkZJR19ISVNBWF9TVDU0ODE9bQotQ09ORklHX0hJU0FYX0hGQ1VTQj1tCi0jIENPTkZJR19ISVNBWF9IRkM0UzhTIGlzIG5vdCBzZXQKLUNPTkZJR19ISVNBWF9IRExDPXkKLQotIwotIyBBY3RpdmUgY2FyZHMKLSMKLQotIwotIyBTaWVtZW5zIEdpZ2FzZXQKLSMKLSMgQ09ORklHX0lTRE5fRFJWX0dJR0FTRVQgaXMgbm90IHNldAotCi0jCi0jIENBUEkgc3Vic3lzdGVtCi0jCi1DT05GSUdfSVNETl9DQVBJPW0KLUNPTkZJR19JU0ROX0RSVl9BVk1CMV9WRVJCT1NFX1JFQVNPTj15Ci1DT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkU9eQotQ09ORklHX0lTRE5fQ0FQSV9DQVBJMjA9bQotQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfQk9PTD15Ci1DT05GSUdfSVNETl9DQVBJX0NBUElGUz1tCi1DT05GSUdfSVNETl9DQVBJX0NBUElEUlY9bQotCi0jCi0jIENBUEkgaGFyZHdhcmUgZHJpdmVycwotIwotCi0jCi0jIEFjdGl2ZSBBVk0gY2FyZHMKLSMKLUNPTkZJR19DQVBJX0FWTT15Ci1DT05GSUdfSVNETl9EUlZfQVZNQjFfQjFQQ01DSUE9bQotQ09ORklHX0lTRE5fRFJWX0FWTUIxX0FWTV9DUz1tCi0KLSMKLSMgQWN0aXZlIEVpY29uIERJVkEgU2VydmVyIGNhcmRzCi0jCi1DT05GSUdfQ0FQSV9FSUNPTj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtMTEwOCwxMCArNzYwLDcgQEAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwogIwotQ09ORklHX0lOUFVUX01PVVNFREVWPW0KLUNPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX0pPWURFVj1tCiBDT05GSUdfSU5QVVRfVFNERVY9bQogQ09ORklHX0lOUFVUX1RTREVWX1NDUkVFTl9YPTI0MApAQCAtMTE1MywxMSArODAyLDkgQEAKIENPTkZJR19KT1lTVElDS19TUEFDRUJBTEw9bQogQ09ORklHX0pPWVNUSUNLX1NUSU5HRVI9bQogIyBDT05GSUdfSk9ZU1RJQ0tfVFdJREpPWSBpcyBub3Qgc2V0Ci1DT05GSUdfSk9ZU1RJQ0tfREI5PW0KLUNPTkZJR19KT1lTVElDS19HQU1FQ09OPW0KLUNPTkZJR19KT1lTVElDS19UVVJCT0dSQUZYPW0KIENPTkZJR19KT1lTVElDS19KT1lEVU1QPW0KIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2IGlzIG5vdCBzZXQKIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRT1tCiAjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKQEAgLTExNzAsNyArODE3LDYgQEAKICMKIENPTkZJR19TRVJJTz15CiBDT05GSUdfU0VSSU9fU0VSUE9SVD1tCi1DT05GSUdfU0VSSU9fUEFSS0JEPW0KIENPTkZJR19TRVJJT19MSUJQUzI9eQogQ09ORklHX1NFUklPX1JBVz1tCiBDT05GSUdfR0FNRVBPUlQ9bQpAQCAtMTE4MywzMiArODI5LDE0IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9OT05TVEFOREFSRD15Ci1DT05GSUdfQ09NUFVUT05FPW0KLUNPTkZJR19ST0NLRVRQT1JUPW0KLUNPTkZJR19DWUNMQURFUz1tCi0jIENPTkZJR19DWVpfSU5UUiBpcyBub3Qgc2V0Ci1DT05GSUdfRElHSUVQQ0E9bQotQ09ORklHX01PWEFfSU5URUxMSU89bQotQ09ORklHX01PWEFfU01BUlRJTz1tCi0jIENPTkZJR19JU0kgaXMgbm90IHNldAotQ09ORklHX1NZTkNMSU5LTVA9bQotQ09ORklHX05fSERMQz1tCi0jIENPTkZJR19SSVNDT004IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQRUNJQUxJWCBpcyBub3Qgc2V0Ci1DT05GSUdfU1g9bQotQ09ORklHX1JJTz1tCi1DT05GSUdfUklPX09MRFBDST15Ci1DT05GSUdfU1RBTERSVj15Ci1DT05GSUdfU1RBTExJT049bQotQ09ORklHX0lTVEFMTElPTj1tCisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKIAogIwogIyBTZXJpYWwgZHJpdmVycwogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DUz1tCiBDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAogQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKQEAgLTEyMjUsMjAgKzg1MywxMSBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLUNPTkZJR19QUklOVEVSPW0KLSMgQ09ORklHX0xQX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX1BQREVWPW0KLUNPTkZJR19USVBBUj1tCiAKICMKICMgSVBNSQogIwotQ09ORklHX0lQTUlfSEFORExFUj1tCi0jIENPTkZJR19JUE1JX1BBTklDX0VWRU5UIGlzIG5vdCBzZXQKLUNPTkZJR19JUE1JX0RFVklDRV9JTlRFUkZBQ0U9bQotQ09ORklHX0lQTUlfU0k9bQotQ09ORklHX0lQTUlfV0FUQ0hET0c9bQotQ09ORklHX0lQTUlfUE9XRVJPRkY9bQorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKIAogIwogIyBXYXRjaGRvZyBDYXJkcwpAQCAtMTI1NSwyMiArODc0LDE1IEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogQ09ORklHX1VTQlBDV0FUQ0hET0c9bQotQ09ORklHX05WUkFNPW0KLUNPTkZJR19EVExLPW0KLUNPTkZJR19SMzk2ND1tCitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RUTEsgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogCiAjCiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwotCi0jCi0jIFBDTUNJQSBjaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1NZTkNMSU5LX0NTPW0KLSMgQ09ORklHX0NBUkRNQU5fNDAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DQVJETUFOXzQwNDAgaXMgbm90IHNldAotQ09ORklHX1JBV19EUklWRVI9bQotQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCkBAIC0xMjgxLDggKzg5Myw4IEBACiAjCiAjIEkyQyBzdXBwb3J0CiAjCi1DT05GSUdfSTJDPW0KLUNPTkZJR19JMkNfQ0hBUkRFVj1tCitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CiAKICMKICMgSTJDIEFsZ29yaXRobXMKQEAgLTEyOTQsMTEgKzkwNiwxMCBAQAogIwogIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKICMKLUNPTkZJR19JMkNfSVNBPW0KLUNPTkZJR19JMkNfUEFSUE9SVD1tCi1DT05GSUdfSTJDX1BBUlBPUlRfTElHSFQ9bQotQ09ORklHX0kyQ19TVFVCPW0KLUNPTkZJR19JMkNfUENBX0lTQT1tCisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwogIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKQEAgLTEzMTgsNjYgKzkyOSwyOCBAQAogIwogIyBTUEkgc3VwcG9ydAogIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCiAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwotQ09ORklHX1cxPW0KLQotIwotIyAxLXdpcmUgQnVzIE1hc3RlcnMKLSMKLSMgQ09ORklHX1cxX01BU1RFUl9EUzk0OTAgaXMgbm90IHNldAotIyBDT05GSUdfVzFfTUFTVEVSX0RTMjQ4MiBpcyBub3Qgc2V0Ci0KLSMKLSMgMS13aXJlIFNsYXZlcwotIwotIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVzFfU0xBVkVfU01FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19XMV9TTEFWRV9EUzI0MzMgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwotQ09ORklHX0hXTU9OPXkKLUNPTkZJR19IV01PTl9WSUQ9bQotQ09ORklHX1NFTlNPUlNfQURNMTAyMT1tCi1DT05GSUdfU0VOU09SU19BRE0xMDI1PW0KLUNPTkZJR19TRU5TT1JTX0FETTEwMjY9bQotQ09ORklHX1NFTlNPUlNfQURNMTAzMT1tCi0jIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfQVNCMTAwPW0KLSMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfRFMxNjIxPW0KLSMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19GU0NIRVI9bQotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfR0w1MThTTT1tCi0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfSVQ4Nz1tCi1DT05GSUdfU0VOU09SU19MTTYzPW0KLUNPTkZJR19TRU5TT1JTX0xNNzU9bQotQ09ORklHX1NFTlNPUlNfTE03Nz1tCi1DT05GSUdfU0VOU09SU19MTTc4PW0KLUNPTkZJR19TRU5TT1JTX0xNODA9bQotQ09ORklHX1NFTlNPUlNfTE04Mz1tCi1DT05GSUdfU0VOU09SU19MTTg1PW0KLUNPTkZJR19TRU5TT1JTX0xNODc9bQotQ09ORklHX1NFTlNPUlNfTE05MD1tCi0jIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAotQ09ORklHX1NFTlNPUlNfTUFYMTYxOT1tCi1DT05GSUdfU0VOU09SU19QQzg3MzYwPW0KLUNPTkZJR19TRU5TT1JTX1NNU0M0N00xPW0KLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19XODM3ODFEPW0KLSMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0VOU09SU19XODNMNzg1VFM9bQotQ09ORklHX1NFTlNPUlNfVzgzNjI3SEY9bQotIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtMTM4OSw5ICs5NjIsMTggQEAKICMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC0xNDYwLDE4ICsxMDQyLDI1IEBACiBDT05GSUdfRFZCX1NUVjAyOTc9bQogCiAjCi0jIEFUU0MgKE5vcnRoIEFtZXJpY2FuL0tvcmVhbiBUZXJyZXN0ZXJpYWwgRFRWKSBmcm9udGVuZHMKKyMgQVRTQyAoTm9ydGggQW1lcmljYW4vS29yZWFuIFRlcnJlc3RyaWFsL0NhYmxlIERUVikgZnJvbnRlbmRzCiAjCiAjIENPTkZJR19EVkJfTlhUMjAwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfT1I1MTIxMSBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfT1I1MTEzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfQkNNMzUxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVkJfTEdEVDMzMFggaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZGV2aWNlcworIworQ09ORklHX0RWQl9MTkJQMjE9bQorIyBDT05GSUdfRFZCX0lTTDY0MjEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAogCiAjCkBAIC0xNDc5LDYgKzEwNjgsNyBAQAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtMTUyNiwxNyArMTExNiwxMiBAQAogQ09ORklHX1NORF9VU0JfQVVESU89bQogCiAjCi0jIFBDTUNJQSBkZXZpY2VzCi0jCi0KLSMKICMgT3BlbiBTb3VuZCBTeXN0ZW0KICMKIENPTkZJR19TT1VORF9QUklNRT1tCi0jIENPTkZJR19PQlNPTEVURV9PU1NfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TU19PQlNPTEVURV9EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfVFZNSVhFUj1tCiAKICMKICMgVVNCIHN1cHBvcnQKQEAgLTE1NDQsNyArMTEyOSw3IEBACiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCPW0KK0NPTkZJR19VU0I9eQogIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU2MSw3ICsxMTQ2LDYgQEAKICMKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NMODExX0hDRD1tCi0jIENPTkZJR19VU0JfU0w4MTFfQ1MgaXMgbm90IHNldAogCiAjCiAjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycwpAQCAtMTU4MCw3ICsxMTY0LDYgQEAKICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCPXkKIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NPXkKLUNPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDA9eQogQ09ORklHX1VTQl9TVE9SQUdFX0RQQ009eQogQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUPXkKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQpAQCAtMTYwOCw5ICsxMTkxLDcgQEAKICMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAogQ09ORklHX1VTQl9LQlRBQj1tCiBDT05GSUdfVVNCX1BPV0VSTUFURT1tCi1DT05GSUdfVVNCX01UT1VDSD1tCi0jIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAotQ09ORklHX1VTQl9FR0FMQVg9bQorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfWFBBRD1tCiBDT05GSUdfVVNCX0FUSV9SRU1PVEU9bQpAQCAtMTY0MCwxMyArMTIyMSwxMSBAQAogIyBDT05GSUdfVVNCX05FVF9STkRJU19IT1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX05FVF9aQVVSVVM9bQotIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX01PTj15CiAKICMKICMgVVNCIHBvcnQgZHJpdmVycwogIwotQ09ORklHX1VTQl9VU1M3MjA9bQogCiAjCiAjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKQEAgLTE2NTQsNyArMTIzMyw3IEBACiBDT05GSUdfVVNCX1NFUklBTD1tCiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKICMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BTllEQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU49bQogQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUPW0KIENPTkZJR19VU0JfU0VSSUFMX0RJR0lfQUNDRUxFUE9SVD1tCkBAIC0xNjYyLDYgKzEyNDEsNyBAQAogQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOD1tCiBDT05GSUdfVVNCX1NFUklBTF9FTVBFRz1tCiBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTz1tCisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfVklTT1I9bQogQ09ORklHX1VTQl9TRVJJQUxfSVBBUT1tCiBDT05GSUdfVVNCX1NFUklBTF9JUj1tCkBAIC0xNjkxLDkgKzEyNzEsMTEgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9TQUZFPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSz1tCiBDT05GSUdfVVNCX1NFUklBTF9YSVJDT009bQorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVD1tCiBDT05GSUdfVVNCX0VaVVNCPXkKIApAQCAtMTcwNywxMCArMTI4OSwxMiBAQAogQ09ORklHX1VTQl9MRUdPVE9XRVI9bQogQ09ORklHX1VTQl9MQ0Q9bQogQ09ORklHX1VTQl9MRUQ9bQorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfQ1lUSEVSTT1tCiBDT05GSUdfVVNCX1BISURHRVRLSVQ9bQogQ09ORklHX1VTQl9QSElER0VUU0VSVk89bQogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogQ09ORklHX1VTQl9URVNUPW0KIApAQCAtMTc4Nyw3ICsxMzcxLDYgQEAKIENPTkZJR19KRlNfU1RBVElTVElDUz15CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQogQ09ORklHX1hGU19RVU9UQT15CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKQEAgLTE3OTYsNiArMTM3OSw3IEBACiBDT05GSUdfTUlOSVhfRlM9bQogQ09ORklHX1JPTUZTX0ZTPW0KIENPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogQ09ORklHX1FVT1RBPXkKIENPTkZJR19RRk1UX1YxPW0KIENPTkZJR19RRk1UX1YyPW0KQEAgLTE4NTYsNiArMTQ0MCw3IEBACiBDT05GSUdfSkZGUzJfRlNfREVCVUc9MAogQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKICMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpAQCAtMTg2NiwxMSArMTQ1MSwxMyBAQAogQ09ORklHX1FOWDRGU19GUz1tCiBDT05GSUdfU1lTVl9GUz1tCiBDT05GSUdfVUZTX0ZTPW0KKyMgQ09ORklHX1VGU19GU19XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCiAjCi1DT05GSUdfTkZTX0ZTPW0KK0NPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CiAjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKIENPTkZJR19ORlNfVjQ9eQpAQCAtMTg4MCwxOSArMTQ2NywyMiBAQAogIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogQ09ORklHX05GU0RfVjQ9eQogQ09ORklHX05GU0RfVENQPXkKLUNPTkZJR19MT0NLRD1tCitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9bQogQ09ORklHX05GU19DT01NT049eQotQ09ORklHX1NVTlJQQz1tCi1DT05GSUdfU1VOUlBDX0dTUz1tCi1DT05GSUdfUlBDU0VDX0dTU19LUkI1PW0KK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiBDT05GSUdfUlBDU0VDX0dTU19TUEtNMz1tCiBDT05GSUdfU01CX0ZTPW0KICMgQ09ORklHX1NNQl9OTFNfREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogQ09ORklHX05DUF9GUz1tCiBDT05GSUdfTkNQRlNfUEFDS0VUX1NJR05JTkc9eQpAQCAtMTk0MCw3ICsxNTMwLDcgQEAKICMKICMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKICMKLUNPTkZJR19OTFM9eQorQ09ORklHX05MUz1tCiBDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgogQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQogQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQpAQCAtMTk4NCwyNiArMTU3NCwyOSBAQAogIwogIyBQcm9maWxpbmcgc3VwcG9ydAogIwotQ09ORklHX1BST0ZJTElORz15Ci1DT05GSUdfT1BST0ZJTEU9bQorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX1BSRUVNUFQ9eQotQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CkBAIC0yMDEzLDggKzE2MDYsNyBAQAogIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0xMPXkKLSMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMjAzOSw3ICsxNjMxLDcgQEAKIENPTkZJR19DUllQVE9fU0hBNTEyPW0KIENPTkZJR19DUllQVE9fV1A1MTI9bQogIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0RFUz15CiBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KIENPTkZJR19DUllQVE9fVFdPRklTSD1tCiBDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQpAQCAtMjA2OCw1ICsxNjYwLDYgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KLUNPTkZJR19SRUVEX1NPTE9NT049bQotQ09ORklHX1JFRURfU09MT01PTl9ERUMxNj15CitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1BMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvYXJtL2tlcm5lbC9NYWtlZmlsZQppbmRleCBmMGMwY2RiLi4xMzIwYTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0va2VybmVsL01ha2VmaWxlCkBAIC0xMywxMiArMTMsMTEgQEAKIG9iai0kKENPTkZJR19BUE0pCQkrPSBhcG0ubwogb2JqLSQoQ09ORklHX0lTQV9ETUFfQVBJKQkrPSBkbWEubwogb2JqLSQoQ09ORklHX0FSQ0hfQUNPUk4pCSs9IGVjYXJkLm8gCi1vYmotJChDT05GSUdfRk9PVEJSSURHRSkJKz0gaXNhLm8KIG9iai0kKENPTkZJR19GSVEpCQkrPSBmaXEubwogb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBhcm1rc3ltcy5vIG1vZHVsZS5vCiBvYmotJChDT05GSUdfQVJUSFVSKQkJKz0gYXJ0aHVyLm8KIG9iai0kKENPTkZJR19JU0FfRE1BKQkJKz0gZG1hLWlzYS5vCi1vYmotJChDT05GSUdfUENJKQkJKz0gYmlvczMyLm8KK29iai0kKENPTkZJR19QQ0kpCQkrPSBiaW9zMzIubyBpc2Eubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiBvYmotJChDT05GSUdfT0FCSV9DT01QQVQpCSs9IHN5c19vYWJpLWNvbXBhdC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKaW5kZXggYjlhNzRhNy4uZWNhMjQ4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKQEAgLTQ3MCw3ICs0NzAsOCBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGVjYXJkX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGVjYXJkX2NoaXAgPSB7CisJLm5hbWUJPSAiRUNBUkQiLAogCS5hY2sJPSBlY2FyZF9pcnFfbWFzaywKIAkubWFzawk9IGVjYXJkX2lycV9tYXNrLAogCS51bm1hc2sgPSBlY2FyZF9pcnFfdW5tYXNrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKaW5kZXggN2VhNWYwMS4uZGU0ZTMzMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCkBAIC02MzQsNiArNjM0LDE0IEBACiAgKiBwdXJwb3NlLgogICovCiAKKwkubWFjcm8JdXNyX3JldCwgcmVnCisjaWZkZWYgQ09ORklHX0FSTV9USFVNQgorCWJ4CVxyZWcKKyNlbHNlCisJbW92CXBjLCBccmVnCisjZW5kaWYKKwkuZW5kbQorCiAJLmFsaWduCTUKIAkuZ2xvYmwJX19rdXNlcl9oZWxwZXJfc3RhcnQKIF9fa3VzZXJfaGVscGVyX3N0YXJ0OgpAQCAtNjc1LDcgKzY4Myw3IEBACiAjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYgJiYgZGVmaW5lZChDT05GSUdfU01QKQogCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA1CUAgZG1iCiAjZW5kaWYKLQltb3YJcGMsIGxyCisJdXNyX3JldAlscgogCiAJLmFsaWduCTUKIApAQCAtNzc4LDcgKzc4Niw3IEBACiAJbW92CXIwLCAjLTEKIAlhZGRzCXIwLCByMCwgIzAKICNlbmRpZgotCW1vdglwYywgbHIKKwl1c3JfcmV0CWxyCiAKICNlbHNlCiAKQEAgLTc5Miw3ICs4MDAsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRtYgogI2VuZGlmCi0JbW92CXBjLCBscgorCXVzcl9yZXQJbHIKIAogI2VuZGlmCiAKQEAgLTgzNCwxNiArODQyLDExIEBACiBfX2t1c2VyX2dldF90bHM6CQkJCUAgMHhmZmZmMGZlMAogCiAjaWYgIWRlZmluZWQoQ09ORklHX0hBU19UTFNfUkVHKSAmJiAhZGVmaW5lZChDT05GSUdfVExTX1JFR19FTVVMKQotCiAJbGRyCXIwLCBbcGMsICMoMTYgLSA4KV0JCUAgVExTIHN0b3JlZCBhdCAweGZmZmYwZmYwCi0JbW92CXBjLCBscgotCiAjZWxzZQotCiAJbXJjCXAxNSwgMCwgcjAsIGMxMywgYzAsIDMJCUAgcmVhZCBUTFMgcmVnaXN0ZXIKLQltb3YJcGMsIGxyCi0KICNlbmRpZgorCXVzcl9yZXQJbHIKIAogCS5yZXAJNQogCS53b3JkCTAJCQlAIHBhZCB1cCB0byBfX2t1c2VyX2hlbHBlcl92ZXJzaW9uCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TIGIvYXJjaC9hcm0va2VybmVsL2hlYWQuUwppbmRleCAyMjQyZjVmLi41MzY1ZDRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9oZWFkLlMKQEAgLTExNCwxOCArMTE0LDE4IEBACiAJICogVXNlIHRoZSBwYWdlIHRhYmxlcyBzdXBwbGllZCBmcm9tICBfX2NwdV91cC4KIAkgKi8KIAlhZHIJcjQsIF9fc2Vjb25kYXJ5X2RhdGEKLQlsZG1pYQlyNCwge3I1LCByNiwgcjEzfQkJQCBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIKKwlsZG1pYQlyNCwge3I1LCByNywgcjEzfQkJQCBhZGRyZXNzIHRvIGp1bXAgdG8gYWZ0ZXIKIAlzdWIJcjQsIHI0LCByNQkJCUAgbW11IGhhcyBiZWVuIGVuYWJsZWQKLQlsZHIJcjQsIFtyNiwgcjRdCQkJQCBnZXQgc2Vjb25kYXJ5X2RhdGEucGdkaXIKKwlsZHIJcjQsIFtyNywgcjRdCQkJQCBnZXQgc2Vjb25kYXJ5X2RhdGEucGdkaXIKIAlhZHIJbHIsIF9fZW5hYmxlX21tdQkJQCByZXR1cm4gYWRkcmVzcwotCWFkZAlwYywgcjEwLCAjMTIJCQlAIGluaXRpYWxpc2UgcHJvY2Vzc29yCisJYWRkCXBjLCByMTAsICNQUk9DSU5GT19JTklURlVOQwlAIGluaXRpYWxpc2UgcHJvY2Vzc29yCiAJCQkJCQlAIChyZXR1cm4gY29udHJvbCByZWcpCiAKIAkvKgogCSAqIHI2ICA9ICZzZWNvbmRhcnlfZGF0YQogCSAqLwogRU5UUlkoX19zZWNvbmRhcnlfc3dpdGNoZWQpCi0JbGRyCXNwLCBbcjYsICM0XQkJCUAgZ2V0IHNlY29uZGFyeV9kYXRhLnN0YWNrCisJbGRyCXNwLCBbcjcsICM0XQkJCUAgZ2V0IHNlY29uZGFyeV9kYXRhLnN0YWNrCiAJbW92CWZwLCAjMAogCWIJc2Vjb25kYXJ5X3N0YXJ0X2tlcm5lbAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXJxLmMgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKaW5kZXggNjI2ZmVlZWMuLjJlMWJmODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2FybS9rZXJuZWwvaXJxLmMKQEAgLTc3LDYgKzc3LDcgQEAKIAkJc2VxX3ByaW50ZihwLCAiJTNkOiAiLCBpKTsKIAkJZm9yX2VhY2hfcHJlc2VudF9jcHUoY3B1KQogCQkJc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9jcHUoY3B1KS5pcnFzW2ldKTsKKwkJc2VxX3ByaW50ZihwLCAiICUxMHMiLCBpcnFfZGVzY1tpXS5jaGlwLT5uYW1lID8gOiAiLSIpOwogCQlzZXFfcHJpbnRmKHAsICIgICVzIiwgYWN0aW9uLT5uYW1lKTsKIAkJZm9yIChhY3Rpb24gPSBhY3Rpb24tPm5leHQ7IGFjdGlvbjsgYWN0aW9uID0gYWN0aW9uLT5uZXh0KQogCQkJc2VxX3ByaW50ZihwLCAiLCAlcyIsIGFjdGlvbi0+bmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvaXNhLmMgYi9hcmNoL2FybS9rZXJuZWwvaXNhLmMKaW5kZXggNjg1YzNlNS4uNTRiYmQ5ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2lzYS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9pc2EuYwpAQCAtMywyMSArMywxNCBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgUGhpbCBCbHVuZGVsbAogICoKLSAqICBJU0Egc2hhcmVkIG1lbW9yeSBhbmQgSS9PIHBvcnQgc3VwcG9ydAotICovCi0KLS8qCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBJU0Egc2hhcmVkIG1lbW9yeSBhbmQgSS9PIHBvcnQgc3VwcG9ydCwgYW5kIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQKKyAqICBpb3BsLCBpbmIsIG91dGIgYW5kIGZyaWVuZHMgaW4gdXNlcnNwYWNlIHZpYSBnbGliYyBlbXVsYXRpb24uCiAgKi8KLQotLyogCi0gKiBOb3RoaW5nIGFib3V0IHRoaXMgaXMgYWN0dWFsbHkgQVJNIHNwZWNpZmljLiAgT25lIGRheSB3ZSBjb3VsZCBtb3ZlCi0gKiBpdCBpbnRvIGtlcm5lbC9yZXNvdXJjZS5jIG9yIHNvbWUgcGxhY2UgbGlrZSB0aGF0LiAgCi0gKi8KLQogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTI3LDIxICsyMCw0OSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBpc2FfbWVtYmFzZSwgaXNhX3BvcnRiYXNlLCBpc2FfcG9ydHNoaWZ0OwogCiBzdGF0aWMgY3RsX3RhYmxlIGN0bF9pc2FfdmFyc1s0XSA9IHsKLQl7QlVTX0lTQV9NRU1fQkFTRSwgIm1lbWJhc2UiLCAmaXNhX21lbWJhc2UsIAotCSBzaXplb2YoaXNhX21lbWJhc2UpLCAwNDQ0LCBOVUxMLCAmcHJvY19kb2ludHZlY30sCi0Je0JVU19JU0FfUE9SVF9CQVNFLCAicG9ydGJhc2UiLCAmaXNhX3BvcnRiYXNlLCAKLQkgc2l6ZW9mKGlzYV9wb3J0YmFzZSksIDA0NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKLQl7QlVTX0lTQV9QT1JUX1NISUZULCAicG9ydHNoaWZ0IiwgJmlzYV9wb3J0c2hpZnQsIAotCSBzaXplb2YoaXNhX3BvcnRzaGlmdCksIDA0NDQsIE5VTEwsICZwcm9jX2RvaW50dmVjfSwKLQl7MH0KKwl7CisJCS5jdGxfbmFtZQk9IEJVU19JU0FfTUVNX0JBU0UsCisJCS5wcm9jbmFtZQk9ICJtZW1iYXNlIiwKKwkJLmRhdGEJCT0gJmlzYV9tZW1iYXNlLCAKKwkJLm1heGxlbgkJPSBzaXplb2YoaXNhX21lbWJhc2UpLAorCQkubW9kZQkJPSAwNDQ0LAorCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMsCisJfSwgeworCQkuY3RsX25hbWUJPSBCVVNfSVNBX1BPUlRfQkFTRSwKKwkJLnByb2NuYW1lCT0gInBvcnRiYXNlIiwKKwkJLmRhdGEJCT0gJmlzYV9wb3J0YmFzZSwgCisJCS5tYXhsZW4JCT0gc2l6ZW9mKGlzYV9wb3J0YmFzZSksCisJCS5tb2RlCQk9IDA0NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LCB7CisJCS5jdGxfbmFtZQk9IEJVU19JU0FfUE9SVF9TSElGVCwKKwkJLnByb2NuYW1lCT0gInBvcnRzaGlmdCIsCisJCS5kYXRhCQk9ICZpc2FfcG9ydHNoaWZ0LCAKKwkJLm1heGxlbgkJPSBzaXplb2YoaXNhX3BvcnRzaGlmdCksCisJCS5tb2RlCQk9IDA0NDQsCisJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYywKKwl9LCB7MH0KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaXNhX3N5c2N0bF9oZWFkZXI7CiAKLXN0YXRpYyBjdGxfdGFibGUgY3RsX2lzYVsyXSA9IHt7Q1RMX0JVU19JU0EsICJpc2EiLCBOVUxMLCAwLCAwNTU1LCBjdGxfaXNhX3ZhcnN9LAotCQkJICAgICAgIHswfX07Ci1zdGF0aWMgY3RsX3RhYmxlIGN0bF9idXNbMl0gPSB7e0NUTF9CVVMsICJidXMiLCBOVUxMLCAwLCAwNTU1LCBjdGxfaXNhfSwKLQkJCSAgICAgICB7MH19Oworc3RhdGljIGN0bF90YWJsZSBjdGxfaXNhWzJdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX0JVU19JU0EsCisJCS5wcm9jbmFtZQk9ICJpc2EiLAorCQkubW9kZQkJPSAwNTU1LAorCQkuY2hpbGQJCT0gY3RsX2lzYV92YXJzLAorCX0sIHswfQorfTsKKworc3RhdGljIGN0bF90YWJsZSBjdGxfYnVzWzJdID0geworCXsKKwkJLmN0bF9uYW1lCT0gQ1RMX0JVUywKKwkJLnByb2NuYW1lCT0gImJ1cyIsCisJCS5tb2RlCQk9IDA1NTUsCisJCS5jaGlsZAkJPSBjdGxfaXNhLAorCX0sIHswfQorfTsKIAogdm9pZCBfX2luaXQKIHJlZ2lzdGVyX2lzYV9wb3J0cyh1bnNpZ25lZCBpbnQgbWVtYmFzZSwgdW5zaWduZWQgaW50IHBvcnRiYXNlLCB1bnNpZ25lZCBpbnQgcG9ydHNoaWZ0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCAzNWEwNTJmLi5hZWVlZDgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMjMyLDExICsyMzIsOCBAQAogCWJ1c3Rfc3BpbmxvY2tzKDApOwogCXNwaW5fdW5sb2NrX2lycSgmZGllX2xvY2spOwogCi0JaWYgKHBhbmljX29uX29vcHMpIHsKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIkZhdGFsIGV4Y2VwdGlvbjogcGFuaWMgaW4gNSBzZWNvbmRzXG4iKTsKLQkJc3NsZWVwKDUpOworCWlmIChwYW5pY19vbl9vb3BzKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIik7Ci0JfQogCiAJZG9fZXhpdChTSUdTRUdWKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCmluZGV4IDU3ODNjMjguLmNlYzE5OWZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKQEAgLTMyNyw3ICszMjcsOCBAQAogCXJldHVybiAodHlwZSA9PSBJUlFUX0JPVEhFREdFKSA/IDAgOiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgZ3Bpb19pcnFjaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycWNoaXAgPSB7CisJLm5hbWUJCT0gIkdQSU8iLAogCS5tYXNrCQk9IGdwaW9faXJxX21hc2ssCiAJLnVubWFzawkJPSBncGlvX2lycV91bm1hc2ssCiAJLnNldF90eXBlCT0gZ3Bpb19pcnFfdHlwZSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYwppbmRleCA5YjA5MTEzLi5jM2E1ZTc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCkBAIC0xMTQsNyArMTE0LDggQEAKICNkZWZpbmUgYXQ5MV9haWNfc2V0X3dha2UJTlVMTAogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBhdDkxX2FpY19jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBhdDkxX2FpY19jaGlwID0geworCS5uYW1lCQk9ICJBSUMiLAogCS5hY2sJCT0gYXQ5MV9haWNfbWFza19pcnEsCiAJLm1hc2sJCT0gYXQ5MV9haWNfbWFza19pcnEsCiAJLnVubWFzawkJPSBhdDkxX2FpY191bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtaHcuYyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9jYXRzLWh3LmMKaW5kZXggNWI2NGQ1Yy4uZWY2Y2NjOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2NhdHMtaHcuYworKysgYi9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvY2F0cy1ody5jCkBAIC04LDcgKzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY3JlZW5faW5mby5oPgogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2RlYzIxMjg1Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYwppbmRleCA2MDdlZDFmLi44MjNlMjVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMKQEAgLTM1LDcgKzM1LDYgQEAKIAogZXh0ZXJuIGludCBzZXR1cF9hcm1faXJxKGludCwgc3RydWN0IGlycWFjdGlvbiAqKTsKIGV4dGVybiB2b2lkIHBjaWJpb3NfcmVwb3J0X3N0YXR1cyh1X2ludCBzdGF0dXNfbWFzaywgaW50IHdhcm4pOwotZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaXNhX3BvcnRzKHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZwogZGMyMTI4NV9iYXNlX2FkZHJlc3Moc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbXgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWlteC9pcnEuYwppbmRleCBhNWRlNWYxLi4yNjg4YmQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlteC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlteC9pcnEuYwpAQCAtMjA0LDEzICsyMDQsMTUgQEAKIAlpbXhfZ3Bpb19oYW5kbGVyKG1hc2ssIGlycSwgZGVzYywgcmVncyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpbXhfaW50ZXJuYWxfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW14X2ludGVybmFsX2NoaXAgPSB7CisJLm5hbWUgPSAiTVBVIiwKIAkuYWNrID0gaW14X21hc2tfaXJxLAogCS5tYXNrID0gaW14X21hc2tfaXJxLAogCS51bm1hc2sgPSBpbXhfdW5tYXNrX2lycSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBpbXhfZ3Bpb19jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpbXhfZ3Bpb19jaGlwID0geworCS5uYW1lID0gIkdQSU8iLAogCS5hY2sgPSBpbXhfZ3Bpb19hY2tfaXJxLAogCS5tYXNrID0gaW14X2dwaW9fbWFza19pcnEsCiAJLnVubWFzayA9IGlteF9ncGlvX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jIGIvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfYXAuYwppbmRleCA2ZDY1Yzk2Li4xOTFjNTdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9hcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2FwLmMKQEAgLTE2MSw3ICsxNjEsOCBAQAogCXdyaXRlbCgxIDw8IGlycSwgVkFfSUNfQkFTRSArIElSUV9FTkFCTEVfU0VUKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNjX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNjX2NoaXAgPSB7CisJLm5hbWUJPSAiU0MiLAogCS5hY2sJPSBzY19tYXNrX2lycSwKIAkubWFzawk9IHNjX21hc2tfaXJxLAogCS51bm1hc2sgPSBzY191bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9pbnRlZ3JhdG9yX2NwLmMKaW5kZXggOWY1NWY1YS4uNjc4YjZiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL2ludGVncmF0b3JfY3AuYworKysgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvaW50ZWdyYXRvcl9jcC5jCkBAIC0xNTYsNyArMTU2LDggQEAKIAljaWNfd3JpdGVsKDEgPDwgaXJxLCBJTlRDUF9WQV9DSUNfQkFTRSArIElSUV9FTkFCTEVfU0VUKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGNpY19jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBjaWNfY2hpcCA9IHsKKwkubmFtZQk9ICJDSUMiLAogCS5hY2sJPSBjaWNfbWFza19pcnEsCiAJLm1hc2sJPSBjaWNfbWFza19pcnEsCiAJLnVubWFzawk9IGNpY191bm1hc2tfaXJxLApAQCAtMTc0LDcgKzE3NSw4IEBACiAJcGljX3dyaXRlbCgxIDw8IGlycSwgSU5UQ1BfVkFfUElDX0JBU0UgKyBJUlFfRU5BQkxFX1NFVCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBwaWNfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGljX2NoaXAgPSB7CisJLm5hbWUJPSAiUElDIiwKIAkuYWNrCT0gcGljX21hc2tfaXJxLAogCS5tYXNrCT0gcGljX21hc2tfaXJxLAogCS51bm1hc2sgPSBwaWNfdW5tYXNrX2lycSwKQEAgLTE5Miw3ICsxOTQsOCBAQAogCXNpY193cml0ZWwoMSA8PCBpcnEsIElOVENQX1ZBX1NJQ19CQVNFICsgSVJRX0VOQUJMRV9TRVQpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgc2ljX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNpY19jaGlwID0geworCS5uYW1lCT0gIlNJQyIsCiAJLmFjawk9IHNpY19tYXNrX2lycSwKIAkubWFzawk9IHNpY19tYXNrX2lycSwKIAkudW5tYXNrCT0gc2ljX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMgYi9hcmNoL2FybS9tYWNoLWludGVncmF0b3IvcGNpX3YzLmMKaW5kZXggZjkwNDM1OS4uNDQxOGY2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1pbnRlZ3JhdG9yL3BjaV92My5jCisrKyBiL2FyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9wY2lfdjMuYwpAQCAtNjAwLDQgKzYwMCw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiB1bmFibGUgdG8gZ3JhYiBsb2NhbCBidXMgdGltZW91dCAiCiAJCSAgICAgICAiaW50ZXJydXB0OiAlZFxuIiwgcmV0KTsKICNlbmRpZgorCisJcmVnaXN0ZXJfaXNhX3BvcnRzKFBIWVNfUENJX01FTV9CQVNFLCBQSFlTX1BDSV9JT19CQVNFLCAwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1pcnEuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1pcnEuYwppbmRleCBkNDJhYWU2Li44OGFjMzMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLWlycS5jCkBAIC01Miw3ICs1Miw4IEBACiAJaW50Y3RsX3dyaXRlKGlvcDMyMV9tYXNrKTsKIH0KIAotc3RydWN0IGlycWNoaXAgZXh0X2NoaXAgPSB7CitzdHJ1Y3QgaXJxX2NoaXAgZXh0X2NoaXAgPSB7CisJLm5hbWUJPSAiSU9QIiwKIAkuYWNrICAgID0gaW9wMzIxX2lycV9tYXNrLAogCS5tYXNrICAgPSBpb3AzMjFfaXJxX21hc2ssCiAJLnVubWFzayA9IGlvcDMyMV9pcnFfdW5tYXNrLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLWlycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLWlycS5jCmluZGV4IGY0ZDQzMjEuLmNhYjExNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtaXJxLmMKQEAgLTc3LDEzICs3NywxNSBAQAogICAgICAgICBpbnRjdGxfd3JpdGUxKGlvcDMzMV9tYXNrMSk7CiB9CiAKLXN0cnVjdCBpcnFjaGlwIGlvcDMzMV9pcnFjaGlwMSA9IHsKK3N0cnVjdCBpcnFfY2hpcCBpb3AzMzFfaXJxY2hpcDEgPSB7CisJLm5hbWUJPSAiSU9QLTEiLAogCS5hY2sgICAgPSBpb3AzMzFfaXJxX21hc2sxLAogCS5tYXNrICAgPSBpb3AzMzFfaXJxX21hc2sxLAogCS51bm1hc2sgPSBpb3AzMzFfaXJxX3VubWFzazEsCiB9OwogCi1zdHJ1Y3QgaXJxY2hpcCBpb3AzMzFfaXJxY2hpcDIgPSB7CitzdHJ1Y3QgaXJxX2NoaXAgaW9wMzMxX2lycWNoaXAyID0geworCS5uYW1lCT0gIklPUC0yIiwKIAkuYWNrICAgID0gaW9wMzMxX2lycV9tYXNrMiwKIAkubWFzayAgID0gaW9wMzMxX2lycV9tYXNrMiwKIAkudW5tYXNrID0gaW9wMzMxX2lycV91bm1hc2syLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCmluZGV4IDJkNDBmZTEuLjk1NjIxNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKQEAgLTUzMiw4ICs1MzIsNiBAQAogCXJldHVybiAtRUlPOwogfQogCi1FWFBPUlRfU1lNQk9MKHBjaV9zZXRfZG1hX21hc2spOwotRVhQT1JUX1NZTUJPTChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2spOwogRVhQT1JUX1NZTUJPTChpeHA0eHhfcGNpX3JlYWQpOwogRVhQT1JUX1NZTUJPTChpeHA0eHhfcGNpX3dyaXRlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMKaW5kZXggNjU0ZTJlZS4uMzBmMTMwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2d0d3g1NzE1LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvZ3R3eDU3MTUtc2V0dXAuYwpAQCAtMTA3LDkgKzEwNyw5IEBACiAJLndpZHRoCQk9IDIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGd0dzU3MTVfZmxhc2hfcmVzb3VyY2UgPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGd0d3g1NzE1X2ZsYXNoX3Jlc291cmNlID0gewogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLX0KK307CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGd0d3g1NzE1X2ZsYXNoID0gewogCS5uYW1lCQk9ICJJWFA0WFgtRmxhc2giLApAQCAtMTMwLDkgKzEzMCw2IEBACiB7CiAJaXhwNHh4X3N5c19pbml0KCk7CiAKLQlpZiAoIWZsYXNoX3Jlc291cmNlKQotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBhbGxvY2F0ZSBmbGFzaCByZXNvdXJjZVxuIik7Ci0KIAlndHd4NTcxNV9mbGFzaF9yZXNvdXJjZS5zdGFydCA9IElYUDRYWF9FWFBfQlVTX0JBU0UoMCk7CiAJZ3R3eDU3MTVfZmxhc2hfcmVzb3VyY2UuZW5kID0gSVhQNFhYX0VYUF9CVVNfQkFTRSgwKSArIFNaXzhNIC0gMTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwppbmRleCAwZGU2MzlkLi4wNDY2MWZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wY2kuYwpAQCAtMTcsNiArMTcsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1wb3dlci5jCmluZGV4IGUyYTIyMzAuLmEyOWIzYjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXBvd2VyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItcG93ZXIuYwpAQCAtMTksNiArMTksNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWtldjdhNDAwLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1rZXY3YTQwMC5jCmluZGV4IDJjY2NjMjcuLjRmMmFiNDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWtldjdhNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gta2V2N2E0MDAuYwpAQCAtNjMsNyArNjMsOCBAQAogCUNQTERfV1JfUEJfSU5UX01BU0sgPSBDUExEX0lSUV9tYXNrOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAga2V2N2E0MDBfY3BsZF9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBrZXY3YTQwMF9jcGxkX2NoaXAgPSB7CisJLm5hbWUJPSAiQ1BMRCIsCiAJLmFjawk9IGtldjdhNDAwX2Fja19jcGxkX2lycSwKIAkubWFzawk9IGtldjdhNDAwX21hc2tfY3BsZF9pcnEsCiAJLnVubWFzawk9IGtldjdhNDAwX3VubWFza19jcGxkX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvYXJjaC1scGQ3YTQweC5jCmluZGV4IDM1YzM2MDYuLmE2OTEwMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9hcmNoLWxwZDdhNDB4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2FyY2gtbHBkN2E0MHguYwpAQCAtMjAwLDcgKzIwMCw4IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbHBkN2E0MHhfY3BsZF9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBscGQ3YTQweF9jcGxkX2NoaXAgPSB7CisJLm5hbWUJPSAiQ1BMRCIsCiAJLmFjawk9IGxoN2E0MHhfYWNrX2NwbGRfaXJxLAogCS5tYXNrCT0gbGg3YTQweF9tYXNrX2NwbGRfaXJxLAogCS51bm1hc2sJPSBsaDdhNDB4X3VubWFza19jcGxkX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEta2V2N2E0MDAuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEta2V2N2E0MDAuYwppbmRleCA4NTM1NzY0Li5mOWIzZmU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWtldjdhNDAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1rZXY3YTQwMC5jCkBAIC00Myw3ICs0Myw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QKLWlycWNoaXAgbGg3YTQwMF9jcGxkX2NoaXAgPSB7CitpcnFfY2hpcCBsaDdhNDAwX2NwbGRfY2hpcCA9IHsKKwkubmFtZQk9ICJDUExEIiwKIAkuYWNrCT0gbGg3YTQwMF9hY2tfY3BsZF9pcnEsCiAJLm1hc2sJPSBsaDdhNDAwX21hc2tfY3BsZF9pcnEsCiAJLnVubWFzawk9IGxoN2E0MDBfdW5tYXNrX2NwbGRfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1saDdhNDAwLmMgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDAuYwppbmRleCBmOWZkZWZlLi4wOTFiMmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDAuYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDAuYwpAQCAtMzgsMTMgKzM4LDE1IEBACiAJSU5UQ19JTlRFTkMgPSAoMSA8PCBpcnEpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbGg3YTQwMF9pbnRlcm5hbF9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsaDdhNDAwX2ludGVybmFsX2NoaXAgPSB7CisJLm5hbWUJPSAiTVBVIiwKIAkuYWNrCT0gbGg3YTQwMF9tYXNrX2lycSwgLyogTGV2ZWwgdHJpZ2dlcmluZyAtPiBtYXNrIGlzIGFjayAqLwogCS5tYXNrCT0gbGg3YTQwMF9tYXNrX2lycSwKIAkudW5tYXNrCT0gbGg3YTQwMF91bm1hc2tfaXJxLAogfTsKIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGxoN2E0MDBfZ3Bpb19jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsaDdhNDAwX2dwaW9fY2hpcCA9IHsKKwkubmFtZQk9ICJHUElPIiwKIAkuYWNrCT0gbGg3YTQwMF9hY2tfZ3Bpb19pcnEsCiAJLm1hc2sJPSBsaDdhNDAwX21hc2tfaXJxLAogCS51bm1hc2sJPSBsaDdhNDAwX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxoN2E0MDQuYyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCmluZGV4IDI2ODVhODEuLjcwNTliOTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbGg3YTQwNC5jCkBAIC03NiwyNSArNzYsMjkgQEAKIAlWSUMyX0lOVEVOQ0xSID0gKDEgPDwgaXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIGxoN2E0MDRfdmljMV9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsaDdhNDA0X3ZpYzFfY2hpcCA9IHsKKwkubmFtZQk9ICJWSUMxIiwKIAkuYWNrCT0gbGg3YTQwNF92aWMxX21hc2tfaXJxLCAvKiBCZWNhdXNlIGxldmVsLXRyaWdnZXJlZCAqLwogCS5tYXNrCT0gbGg3YTQwNF92aWMxX21hc2tfaXJxLAogCS51bm1hc2sJPSBsaDdhNDA0X3ZpYzFfdW5tYXNrX2lycSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDA0X3ZpYzJfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGg3YTQwNF92aWMyX2NoaXAgPSB7CisJLm5hbWUJPSAiVklDMiIsCiAJLmFjawk9IGxoN2E0MDRfdmljMl9tYXNrX2lycSwgLyogQmVjYXVzZSBsZXZlbC10cmlnZ2VyZWQgKi8KIAkubWFzawk9IGxoN2E0MDRfdmljMl9tYXNrX2lycSwKIAkudW5tYXNrCT0gbGg3YTQwNF92aWMyX3VubWFza19pcnEsCiB9OwogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbGg3YTQwNF9ncGlvX3ZpYzFfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGg3YTQwNF9ncGlvX3ZpYzFfY2hpcCA9IHsKKwkubmFtZQk9ICJHUElPLVZJQzEiLAogCS5hY2sJPSBsaDdhNDA0X3ZpYzFfYWNrX2dwaW9faXJxLAogCS5tYXNrCT0gbGg3YTQwNF92aWMxX21hc2tfaXJxLAogCS51bm1hc2sJPSBsaDdhNDA0X3ZpYzFfdW5tYXNrX2lycSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDA0X2dwaW9fdmljMl9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsaDdhNDA0X2dwaW9fdmljMl9jaGlwID0geworCS5uYW1lCT0gIkdQSU8tVklDMiIsCiAJLmFjawk9IGxoN2E0MDRfdmljMl9hY2tfZ3Bpb19pcnEsCiAJLm1hc2sJPSBsaDdhNDA0X3ZpYzJfbWFza19pcnEsCiAJLnVubWFzawk9IGxoN2E0MDRfdmljMl91bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1scGQ3YTQweC5jIGIvYXJjaC9hcm0vbWFjaC1saDdhNDB4L2lycS1scGQ3YTQweC5jCmluZGV4IGRjYjRlMTcuLmQ2MDU1ZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbGg3YTQweC9pcnEtbHBkN2E0MHguYworKysgYi9hcmNoL2FybS9tYWNoLWxoN2E0MHgvaXJxLWxwZDdhNDB4LmMKQEAgLTUwLDcgKzUwLDggQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBsaDdhNDB4X2NwbGRfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbGg3YTQweF9jcGxkX2NoaXAgPSB7CisJLm5hbWUJPSAiQ1BMRCIsCiAJLmFjawk9IGxoN2E0MHhfYWNrX2NwbGRfaXJxLAogCS5tYXNrCT0gbGg3YTQweF9tYXNrX2NwbGRfaXJxLAogCS51bm1hc2sJPSBsaDdhNDB4X3VubWFza19jcGxkX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZnBnYS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKaW5kZXggMzRlYjc5ZS4uZWZlOWJmYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mcGdhLmMKQEAgLTEwNiwxNCArMTA2LDE2IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9mcGdhX2lycV9hY2sgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG9tYXBfZnBnYV9pcnFfYWNrID0geworCS5uYW1lCQk9ICJGUEdBLWFjayIsCiAJLmFjawkJPSBmcGdhX21hc2tfYWNrX2lycSwKIAkubWFzawkJPSBmcGdhX21hc2tfaXJxLAogCS51bm1hc2sJCT0gZnBnYV91bm1hc2tfaXJxLAogfTsKIAogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9mcGdhX2lycSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb21hcF9mcGdhX2lycSA9IHsKKwkubmFtZQkJPSAiRlBHQSIsCiAJLmFjawkJPSBmcGdhX2Fja19pcnEsCiAJLm1hc2sJCT0gZnBnYV9tYXNrX2lycSwKIAkudW5tYXNrCQk9IGZwZ2FfdW5tYXNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2lycS5jCmluZGV4IDllMDM5ODQuLjNlYTE0MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9pcnEuYwpAQCAtMTY4LDcgKzE2OCw4IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBvbWFwX2lycV9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBvbWFwX2lycV9jaGlwID0geworCS5uYW1lCQk9ICJNUFUiLAogCS5hY2sJCT0gb21hcF9tYXNrX2Fja19pcnEsCiAJLm1hc2sJCT0gb21hcF9tYXNrX2lycSwKIAkudW5tYXNrCQk9IG9tYXBfdW5tYXNrX2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCmluZGV4IDNlZWQ2YTcuLmRmYzNiMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYwpAQCAtOTQsNyArOTQsOCBAQAogCW9tYXBfYWNrX2lycShpcnEpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgb21hcF9pcnFfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgb21hcF9pcnFfY2hpcCA9IHsKKwkubmFtZQk9ICJJTlRDIiwKIAkuYWNrCT0gb21hcF9tYXNrX2Fja19pcnEsCiAJLm1hc2sJPSBvbWFwX21hc2tfaXJxLAogCS51bm1hc2sJPSBvbWFwX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCmluZGV4IGY5NDIxMzEuLmZmNmI0ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpX3NzcC5jCkBAIC00NywxNCArNDcsMTUgQEAKICAqLwogdW5zaWduZWQgbG9uZyBjb3JnaV9zc3BfYWRzNzg0Nl9wdXRnZXQodWxvbmcgZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHJldCxmbGFnOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKwl1MzIgcmV0ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb3JnaV9zc3BfbG9jaywgZmxhZyk7CiAJaWYgKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NiA+PSAwKQogCQlHUENSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOwogCiAJc3NwX3dyaXRlX3dvcmQoJmNvcmdpX3NzcF9kZXYsZGF0YSk7Ci0JcmV0ID0gc3NwX3JlYWRfd29yZCgmY29yZ2lfc3NwX2Rldik7CisgCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYsICZyZXQpOwogCiAJaWYgKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NiA+PSAwKQogCQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfYWRzNzg0NikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2Fkczc4NDYpOwpAQCAtODgsNyArODksOSBAQAogCiB1bnNpZ25lZCBsb25nIGNvcmdpX3NzcF9hZHM3ODQ2X2dldCh2b2lkKQogewotCXJldHVybiBzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2KTsKKwl1MzIgcmV0ID0gMDsKKwlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2LCAmcmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNvcmdpX3NzcF9hZHM3ODQ2X3B1dGdldCk7CkBAIC0xMDQsNiArMTA3LDcgQEAKIHVuc2lnbmVkIGxvbmcgY29yZ2lfc3NwX2RhY19wdXQodWxvbmcgZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWcsIHNzY3IxID0gU1NDUjFfU1BIOworCXUzMiB0bXA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29yZ2lfc3NwX2xvY2ssIGZsYWcpOwogCkBAIC0xMTgsNyArMTIyLDcgQEAKIAkJR1BDUihzc3BfbWFjaGluZm8tPmNzX2xjZGNvbikgPSBHUElPX2JpdChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbik7CiAJc3NwX3dyaXRlX3dvcmQoJmNvcmdpX3NzcF9kZXYsZGF0YSk7CiAJLyogUmVhZCBudWxsIGRhdGEgYmFjayBmcm9tIGRldmljZSB0byBwcmV2ZW50IFNTUCBvdmVyZmxvdyAqLwotCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYpOworCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYsICZ0bXApOwogCWlmIChzc3BfbWFjaGluZm8tPmNzX2xjZGNvbiA+PSAwKQogCQlHUFNSKHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKSA9IEdQSU9fYml0KHNzcF9tYWNoaW5mby0+Y3NfbGNkY29uKTsKIApAQCAtMTUwLDcgKzE1NCw3IEBACiBpbnQgY29yZ2lfc3NwX21heDExMTFfZ2V0KHVsb25nIGRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnOwotCWludCB2b2x0YWdlLHZvbHRhZ2UxLHZvbHRhZ2UyOworCWxvbmcgdm9sdGFnZSA9IDAsIHZvbHRhZ2UxID0gMCwgdm9sdGFnZTIgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvcmdpX3NzcF9sb2NrLCBmbGFnKTsKIAlpZiAoc3NwX21hY2hpbmZvLT5jc19tYXgxMTExID49IDApCkBAIC0xNjMsMTUgKzE2NywxNSBAQAogCiAJLyogVEIxL1JCMSAqLwogCXNzcF93cml0ZV93b3JkKCZjb3JnaV9zc3BfZGV2LGRhdGEpOwotCXNzcF9yZWFkX3dvcmQoJmNvcmdpX3NzcF9kZXYpOyAvKiBudWxsIHJlYWQgKi8KKwlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2LCAodTMyKikmdm9sdGFnZTEpOyAvKiBudWxsIHJlYWQgKi8KIAogCS8qIFRCMTIvUkIyICovCiAJc3NwX3dyaXRlX3dvcmQoJmNvcmdpX3NzcF9kZXYsMCk7Ci0Jdm9sdGFnZTE9c3NwX3JlYWRfd29yZCgmY29yZ2lfc3NwX2Rldik7CisJc3NwX3JlYWRfd29yZCgmY29yZ2lfc3NwX2RldiwgKHUzMiopJnZvbHRhZ2UxKTsKIAogCS8qIFRCMTMvUkIzKi8KIAlzc3Bfd3JpdGVfd29yZCgmY29yZ2lfc3NwX2RldiwwKTsKLQl2b2x0YWdlMj1zc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2KTsKKwlzc3BfcmVhZF93b3JkKCZjb3JnaV9zc3BfZGV2LCAodTMyKikmdm9sdGFnZTIpOwogCiAJc3NwX2Rpc2FibGUoJmNvcmdpX3NzcF9kZXYpOwogCXNzcF9jb25maWcoJmNvcmdpX3NzcF9kZXYsIChTU0NSMF9OYXRpb25hbCB8IChTU0NSMF9EU1MgJiAweDBiICkpLCAwLCAwLCBTU0NSMF9TZXJDbGtEaXYoc3NwX21hY2hpbmZvLT5jbGtfYWRzNzg0NikpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwppbmRleCBkOTYzNWZmLi4xMjE0MWUyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pcnEuYwpAQCAtMzksNyArMzksOCBAQAogCUlDTVIgfD0gKDEgPDwgKGlycSArIFBYQV9JUlFfU0tJUCkpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgcHhhX2ludGVybmFsX2NoaXBfbG93ID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBweGFfaW50ZXJuYWxfY2hpcF9sb3cgPSB7CisJLm5hbWUJCT0gIlNDIiwKIAkuYWNrCQk9IHB4YV9tYXNrX2xvd19pcnEsCiAJLm1hc2sJCT0gcHhhX21hc2tfbG93X2lycSwKIAkudW5tYXNrCQk9IHB4YV91bm1hc2tfbG93X2lycSwKQEAgLTYxLDcgKzYyLDggQEAKIAlJQ01SMiB8PSAoMSA8PCAoaXJxIC0gMzIgKyBQWEFfSVJRX1NLSVApKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIHB4YV9pbnRlcm5hbF9jaGlwX2hpZ2ggPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9pbnRlcm5hbF9jaGlwX2hpZ2ggPSB7CisJLm5hbWUJCT0gIlNDLWhpIiwKIAkuYWNrCQk9IHB4YV9tYXNrX2hpZ2hfaXJxLAogCS5tYXNrCQk9IHB4YV9tYXNrX2hpZ2hfaXJxLAogCS51bm1hc2sJCT0gcHhhX3VubWFza19oaWdoX2lycSwKQEAgLTEyOSw3ICsxMzEsOCBAQAogCUdFRFIwID0gKDEgPDwgKGlycSAtIElSUV9HUElPMCkpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgcHhhX2xvd19ncGlvX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHB4YV9sb3dfZ3Bpb19jaGlwID0geworCS5uYW1lCQk9ICJHUElPLWwiLAogCS5hY2sJCT0gcHhhX2Fja19sb3dfZ3BpbywKIAkubWFzawkJPSBweGFfbWFza19sb3dfaXJxLAogCS51bm1hc2sJCT0gcHhhX3VubWFza19sb3dfaXJxLApAQCAtMjM3LDcgKzI0MCw4IEBACiAJR0ZFUihncGlvKSA9IEdQSU9fSVJRX2ZhbGxpbmdfZWRnZVtpZHhdICYgR1BJT19JUlFfbWFza1tpZHhdOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgcHhhX211eGVkX2dwaW9fY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcHhhX211eGVkX2dwaW9fY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTyIsCiAJLmFjawkJPSBweGFfYWNrX211eGVkX2dwaW8sCiAJLm1hc2sJCT0gcHhhX21hc2tfbXV4ZWRfZ3BpbywKIAkudW5tYXNrCQk9IHB4YV91bm1hc2tfbXV4ZWRfZ3BpbywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKaW5kZXggMWE1ZjVjMi4uMTI0NzlhZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbHBkMjcwLmMKQEAgLTY4LDcgKzY4LDggQEAKIAlfX3Jhd193cml0ZXcobHBkMjcwX2lycV9lbmFibGVkLCBMUEQyNzBfSU5UX01BU0spOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbHBkMjcwX2lycV9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBscGQyNzBfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkNQTEQiLAogCS5hY2sJCT0gbHBkMjcwX21hc2tfaXJxLAogCS5tYXNrCQk9IGxwZDI3MF9tYXNrX2lycSwKIAkudW5tYXNrCQk9IGxwZDI3MF91bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCmluZGV4IDZhOWE2NjkuLjgzZmY1Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKQEAgLTc4LDcgKzc4LDggQEAKIAlMVUJfSVJRX01BU0tfRU4gPSAobHViYm9ja19pcnFfZW5hYmxlZCB8PSAoMSA8PCBsdWJib2NrX2lycSkpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbHViYm9ja19pcnFfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbHViYm9ja19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiRlBHQSIsCiAJLmFjawkJPSBsdWJib2NrX21hc2tfaXJxLAogCS5tYXNrCQk9IGx1YmJvY2tfbWFza19pcnEsCiAJLnVubWFzawkJPSBsdWJib2NrX3VubWFza19pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCmluZGV4IDIxZGRmM2QuLmE3ZTliOTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL21haW5zdG9uZS5jCkBAIC02NCw3ICs2NCw4IEBACiAJTVNUX0lOVE1TS0VOQSA9IChtYWluc3RvbmVfaXJxX2VuYWJsZWQgfD0gKDEgPDwgbWFpbnN0b25lX2lycSkpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgbWFpbnN0b25lX2lycV9jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtYWluc3RvbmVfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gIkZQR0EiLAogCS5hY2sJCT0gbWFpbnN0b25lX21hc2tfaXJxLAogCS5tYXNrCQk9IG1haW5zdG9uZV9tYXNrX2lycSwKIAkudW5tYXNrCQk9IG1haW5zdG9uZV91bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwppbmRleCA5MzA5NmJlLi4xZmRkZmVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYwpAQCAtNDAsNiArNDAsOCBAQAogCiAjZGVmaW5lIFBYQV9TU1BfUE9SVFMgCTMKIAorI2RlZmluZSBUSU1FT1VUIDEwMDAwMAorCiBzdHJ1Y3Qgc3NwX2luZm9fIHsKIAlpbnQgaXJxOwogCXUzMiBjbG9jazsKQEAgLTkyLDEzICs5NCwxOCBAQAogICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgbG9ja2luZy4KICAqCiAgKiBSZXR1cm5zOgotICogICAlLUVUSU1FRE9VVAl0aW1lb3V0IG9jY3VycmVkIChmb3IgZnV0dXJlKQorICogICAlLUVUSU1FRE9VVAl0aW1lb3V0IG9jY3VycmVkCiAgKiAgIDAJCQlzdWNjZXNzCiAgKi8KIGludCBzc3Bfd3JpdGVfd29yZChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgZGF0YSkKIHsKLQl3aGlsZSAoIShTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfVE5GKSkKKwlpbnQgdGltZW91dCA9IFRJTUVPVVQ7CisKKwl3aGlsZSAoIShTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfVE5GKSkgeworCSAgICAgICAgaWYgKCEtLXRpbWVvdXQpCisJICAgICAgICAJcmV0dXJuIC1FVElNRURPVVQ7CiAJCWNwdV9yZWxheCgpOworCX0KIAogCVNTRFJfUChkZXYtPnBvcnQpID0gZGF0YTsKIApAQCAtMTE3LDE1ICsxMjQsMjEgQEAKICAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcuCiAgKgogICogUmV0dXJuczoKLSAqICAgJS1FVElNRURPVVQJdGltZW91dCBvY2N1cnJlZCAoZm9yIGZ1dHVyZSkKKyAqICAgJS1FVElNRURPVVQJdGltZW91dCBvY2N1cnJlZAogICogICAzMi1iaXQgZGF0YQlzdWNjZXNzCiAgKi8KLWludCBzc3BfcmVhZF93b3JkKHN0cnVjdCBzc3BfZGV2ICpkZXYpCitpbnQgc3NwX3JlYWRfd29yZChzdHJ1Y3Qgc3NwX2RldiAqZGV2LCB1MzIgKmRhdGEpCiB7Ci0Jd2hpbGUgKCEoU1NTUl9QKGRldi0+cG9ydCkgJiBTU1NSX1JORSkpCi0JCWNwdV9yZWxheCgpOworCWludCB0aW1lb3V0ID0gVElNRU9VVDsKIAotCXJldHVybiBTU0RSX1AoZGV2LT5wb3J0KTsKKwl3aGlsZSAoIShTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfUk5FKSkgeworCSAgICAgICAgaWYgKCEtLXRpbWVvdXQpCisJICAgICAgICAJcmV0dXJuIC1FVElNRURPVVQ7CisJCWNwdV9yZWxheCgpOworCX0KKworCSpkYXRhID0gU1NEUl9QKGRldi0+cG9ydCk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTM2LDEzICsxNDksMjEgQEAKICAqCiAgKiBUaGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gdGhlIG5lY2Vzc2FyeSBsb2NraW5nLgogICovCi12b2lkIHNzcF9mbHVzaChzdHJ1Y3Qgc3NwX2RldiAqZGV2KQoraW50IHNzcF9mbHVzaChzdHJ1Y3Qgc3NwX2RldiAqZGV2KQogeworCWludCB0aW1lb3V0ID0gVElNRU9VVCAqIDI7CisKIAlkbyB7CiAJCXdoaWxlIChTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfUk5FKSB7CisJCSAgICAgICAgaWYgKCEtLXRpbWVvdXQpCisJCSAgICAgICAgCXJldHVybiAtRVRJTUVET1VUOwogCQkJKHZvaWQpIFNTRFJfUChkZXYtPnBvcnQpOwogCQl9CisJICAgICAgICBpZiAoIS0tdGltZW91dCkKKwkgICAgICAgIAlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9IHdoaWxlIChTU1NSX1AoZGV2LT5wb3J0KSAmIFNTU1JfQlNZKTsKKworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKaW5kZXggYjQxNzFkZC4uYmJkMTM4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL0tjb25maWcKQEAgLTgxLDkgKzgxLDE3IEBACiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0NDAKIAlzZWxlY3QgQ1BVX1MzQzI0NDIKIAorY29uZmlnIE1BQ0hfUzNDMjQxMworCWJvb2wKKwloZWxwCisJICBJbnRlcm5hbCBub2RlIGZvciBTM0MyNDEzIHZlcmlzb24gb2YgU01ESzI0MTMsIHNvIHRoYXQKKwkgIG1hY2hpbmVfaXNfczNjMjQxMygpIHdpbGwgd29yayB3aGVuIE1BQ0hfU01ESzI0MTMgaXMKKwkgIHNlbGVjdGVkCisKIGNvbmZpZyBNQUNIX1NNREsyNDEzCiAJYm9vbCAiU01ESzI0MTMiCiAJc2VsZWN0IENQVV9TM0MyNDEyCisJc2VsZWN0IE1BQ0hfUzNDMjQxMwogCXNlbGVjdCBNQUNIX1NNREsKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgYW4gU01ESzI0MTMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQppbmRleCAwYzc5Mzg2Li4wZWFkZWM5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCkBAIC0xMCw0NSArMTAsNDggQEAKIG9iai1uCQkJOj0KIG9iai0JCQk6PQogCisjIERNQQorb2JqLSQoQ09ORklHX1MzQzI0MTBfRE1BKQkrPSBkbWEubworCiAjIFMzQzI0MDAgc3VwcG9ydCBmaWxlcwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDAwKSAgKz0gczNjMjQwMC1ncGlvLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQwMCkJKz0gczNjMjQwMC1ncGlvLm8KIAogIyBTM0MyNDEwIHN1cHBvcnQgZmlsZXMKIAotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwKSAgKz0gczNjMjQxMC5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0MTApICArPSBzM2MyNDEwLWdwaW8ubwotb2JqLSQoQ09ORklHX1MzQzI0MTBfRE1BKSAgKz0gZG1hLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQxMCkJKz0gczNjMjQxMC5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTApCSs9IHMzYzI0MTAtZ3Bpby5vCiAKICMgUG93ZXIgTWFuYWdlbWVudCBzdXBwb3J0CiAKLW9iai0kKENPTkZJR19QTSkJICAgKz0gcG0ubyBzbGVlcC5vCi1vYmotJChDT05GSUdfUE1fU0lNVEVDKQkgICArPSBwbS1zaW10ZWMubworb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubyBzbGVlcC5vCitvYmotJChDT05GSUdfUE1fU0lNVEVDKQkJKz0gcG0tc2ltdGVjLm8KIAogIyBTM0MyNDEyIHN1cHBvcnQKLW9iai0kKENPTkZJR19DUFVfUzNDMjQxMikgICs9IHMzYzI0MTIubwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEyKSAgKz0gczNjMjQxMi1jbG9jay5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IHMzYzI0MTIubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEyKQkrPSBzM2MyNDEyLWlycS5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IHMzYzI0MTItY2xvY2subwogCiAjCiAjIFMzQzI0NFggc3VwcG9ydAogCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpICArPSBzM2MyNDR4Lm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkgICs9IHMzYzI0NHgtaXJxLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgtaXJxLm8KIAogIyBDbG9jayBjb250cm9sCiAKLW9iai0kKENPTkZJR19TM0MyNDEwX0NMT0NLKSArPSBzM2MyNDEwLWNsb2NrLm8KK29iai0kKENPTkZJR19TM0MyNDEwX0NMT0NLKQkrPSBzM2MyNDEwLWNsb2NrLm8KIAogIyBTM0MyNDQwIHN1cHBvcnQKIAotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQ0MC5vIHMzYzI0NDAtZHNjLm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkgICs9IHMzYzI0NDAtaXJxLm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkgICs9IHMzYzI0NDAtY2xvY2subwotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKSAgKz0gczNjMjQxMC1ncGlvLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkJKz0gczNjMjQ0MC5vIHMzYzI0NDAtZHNjLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkJKz0gczNjMjQ0MC1pcnEubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBzM2MyNDQwLWNsb2NrLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkJKz0gczNjMjQxMC1ncGlvLm8KIAogIyBTM0MyNDQyIHN1cHBvcnQKIAotb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQyKSAgKz0gczNjMjQ0Mi5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpICArPSBzM2MyNDQyLWNsb2NrLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0MikJKz0gczNjMjQ0Mi5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpCSs9IHMzYzI0NDItY2xvY2subwogCiAjIGJhc3QgZXh0cmFzCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuaAppbmRleCBiMGVkOWQyLi5iZTQyZTQwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5oCkBAIC04LDE2ICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogTW9kaWZpY2F0aW9uczoKLSAqICAgICAyNC1BdWctMjAwNCBCSkQgIFN0YXJ0IG9mIGdlbmVyaWMgUzNDMjRYWCBzdXBwb3J0Ci0gKiAgICAgMTgtT2N0LTIwMDQgQkpEICBNb3ZlZCBib2FyZCBzdHJ1Y3QgaW50byB0aGlzIGZpbGUKLSAqICAgICAwNC1KYW4tMjAwNSBCSkQgIE5ldyB1YXJ0IGluaXRpYWxpc2F0aW9uCi0gKiAgICAgMTAtSmFuLTIwMDUgQkpEICBNb3ZlZCBnZW5lcmljIGluaXQgaGVyZSwgc3BlY2lmaWMgdG8gY3B1IGhlYWRlcnMKLSAqICAgICAxNC1KYW4tMjAwNSBCSkQgIEFkZGVkIHMzYzI0eHhfaW5pdF9jbG9ja3MoKSBjYWxsCi0gKiAgICAgMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfe1ZBLFNafSB0byBTM0MyNFhYX3tWQSxTWn0gJiBJT0RFU0NfRU5UCi0gKiAgICAgMTQtTWFyLTIwMDUgQkpEICBVcGRhdGVkIGZvciBfX2lvbWVtCi0gKiAgICAgMTUtSmFuLTIwMDYgTENWUiBVcGRhdGVkIFMzQzI0MTBfUEFfIyN4IHRvIG5ldyBTM0MyNFhYX1BBXyMjeCBtYWNybwogKi8KIAogLyogdG9kbyAtIGZpeCB3aGVuIHJtayBjaGFuZ2VzIGlvZGVzY3MgdG8gdXNlIGB2b2lkIF9faW9tZW0gKmAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5jCmluZGV4IGFkMzg0NWUuLmNhZTM1ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYwpAQCAtMSwyMiArMSwxNCBAQAogLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RldnMuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCi0gKiBCYXNlIFMzQzI0MTAgcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zCisgKiBCYXNlIFMzQzI0WFggcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgIDE1LUphbi0yMDA2IExDVlIgVXNpbmcgUzNDMjRYWF9QQV8jI3ggbWFjcm8gZm9yIGNvbW1vbiBTM0MyNFhYIGRldmljZXMKLSAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF97VkEsU1p9IHRvIFMzQzI0WFhfe1ZBLFNafQotICogICAgIDEwLUZlYi0yMDA1IEJKRCAgQWRkZWQgY2FtZXJhIGZyb20gZ3VpbGxhdW1lLmdvdXJhdEBuZXh2aXNpb24udHYKLSAqICAgICAyOS1BdWctMjAwNCBCSkQgIEFkZGVkIHRpbWVycyAwIHRocm91Z2ggMwotICogICAgIDI5LUF1Zy0yMDA0IEJKRCAgQ2hhbmdlZCBpbmRleCBvZiBkZXZpY2VzIHdlIG9ubHkgaGF2ZSBvbmUgb2YgdG8gLTEKLSAqICAgICAyMS1BdWctMjAwNCBCSkQgIEFkZGVkIElSUV9USUNLIHRvIFJUQyByZXNvdXJjZXMKLSAqICAgICAxOC1BdWctMjAwNCBCSkQgIENyZWF0ZWQgaW5pdGlhbCB2ZXJzaW9uCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKaW5kZXggMDk0Y2M1Mi4uY2M5MmE3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIGttZW1fY2FjaGVfdCAqZG1hX2ttZW07CiAKIC8qIGRtYSBjaGFubmVsIHN0YXRlIGluZm9ybWF0aW9uICovCi1zM2MyNDEwX2RtYV9jaGFuX3QgczNjMjQxMF9jaGFuc1tTM0MyNDEwX0RNQV9DSEFOTkVMU107CitzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiBzM2MyNDEwX2NoYW5zW1MzQzI0MTBfRE1BX0NIQU5ORUxTXTsKIAogLyogZGVidWdnaW5nIGZ1bmN0aW9ucyAqLwogCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIGRtYV93cnJlZyhjaGFuLCByZWcsIHZhbCkgd3JpdGVsKCh2YWwpLCAoY2hhbiktPnJlZ3MgKyAocmVnKSkKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKLWRtYV93cnJlZyhzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4sIGludCByZWcsIHVuc2lnbmVkIGxvbmcgdmFsKQorZG1hX3dycmVnKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAlwcl9kZWJ1Zygid3JpdGluZyAlMDh4IHRvIHJlZ2lzdGVyICUwOHhcbiIsKHVuc2lnbmVkIGludCl2YWwscmVnKTsKIAl3cml0ZWwodmFsLCBkbWFfcmVnYWRkcihjaGFuLCByZWcpKTsKQEAgLTEwMiw3ICsxMDIsNyBAQAogKi8KIAogc3RhdGljIHZvaWQKLWRtYWRiZ19jYXB0dXJlKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwgc3RydWN0IHMzYzI0MTBfZG1hX3JlZ3N0YXRlICpyZWdzKQorZG1hZGJnX2NhcHR1cmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSAqcmVncykKIHsKIAlyZWdzLT5kY3NyYyAgICA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ1NSQyk7CiAJcmVncy0+ZGlzcmMgICAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRElTUkMpOwpAQCAtMTEyLDcgKzExMiw3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1kbWFkYmdfc2hvd3JlZ3MoY29uc3QgY2hhciAqZm5hbWUsIGludCBsaW5lLCBzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4sCitkbWFkYmdfZHVtcHJlZ3MoY29uc3QgY2hhciAqZm5hbWUsIGludCBsaW5lLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKIAkJIHN0cnVjdCBzM2MyNDEwX2RtYV9yZWdzdGF0ZSAqcmVncykKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiZG1hJWQ6ICVzOiVkOiBEQ1NSQz0lMDhseCwgRElTUkM9JTA4bHgsIERTVEFUPSUwOGx4IERNVD0lMDJseCwgRENPTj0lMDhseFxuIiwKQEAgLTEyMiw3ICsxMjIsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotZG1hZGJnX3Nob3djaGFuKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZSwgczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQorZG1hZGJnX3Nob3djaGFuKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZSwgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IHMzYzI0MTBfZG1hX3JlZ3N0YXRlIHN0YXRlOwogCkBAIC0xMzIsNyArMTMyLDE2IEBACiAJICAgICAgIGNoYW4tPm51bWJlciwgZm5hbWUsIGxpbmUsIGNoYW4tPmxvYWRfc3RhdGUsCiAJICAgICAgIGNoYW4tPmN1cnIsIGNoYW4tPm5leHQsIGNoYW4tPmVuZCk7CiAKLQlkbWFkYmdfc2hvd3JlZ3MoZm5hbWUsIGxpbmUsIGNoYW4sICZzdGF0ZSk7CisJZG1hZGJnX2R1bXByZWdzKGZuYW1lLCBsaW5lLCBjaGFuLCAmc3RhdGUpOworfQorCitzdGF0aWMgdm9pZAorZG1hZGJnX3Nob3dyZWdzKGNvbnN0IGNoYXIgKmZuYW1lLCBpbnQgbGluZSwgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX3JlZ3N0YXRlIHN0YXRlOworCisJZG1hZGJnX2NhcHR1cmUoY2hhbiwgJnN0YXRlKTsKKwlkbWFkYmdfZHVtcHJlZ3MoZm5hbWUsIGxpbmUsIGNoYW4sICZzdGF0ZSk7CiB9CiAKICNkZWZpbmUgZGJnX3Nob3dyZWdzKGNoYW4pIGRtYWRiZ19zaG93cmVncyhfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAoY2hhbikpCkBAIC0xNTUsNyArMTY0LDcgQEAKICovCiAKIHN0YXRpYyB2b2lkCi1zM2MyNDEwX2RtYV9zdGF0c190aW1lb3V0KHMzYzI0MTBfZG1hX3N0YXRzX3QgKnN0YXRzLCBpbnQgdmFsKQorczNjMjQxMF9kbWFfc3RhdHNfdGltZW91dChzdHJ1Y3QgczNjMjQxMF9kbWFfc3RhdHMgKnN0YXRzLCBpbnQgdmFsKQogewogCWlmIChzdGF0cyA9PSBOVUxMKQogCQlyZXR1cm47CkBAIC0xNzQsNyArMTgzLDcgQEAKICovCiAKIHN0YXRpYyBpbnQKLXMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwgaW50IGxpbmUpCitzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwgaW50IGxpbmUpCiB7CiAJaW50IHRpbWVvdXQgPSBjaGFuLT5sb2FkX3RpbWVvdXQ7CiAJaW50IHRvb2s7CkBAIC0yMjEsOCArMjMwLDggQEAKICovCiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1zM2MyNDEwX2RtYV9sb2FkYnVmZmVyKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwKLQkJICAgICAgIHMzYzI0MTBfZG1hX2J1Zl90ICpidWYpCitzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkgICAgICAgc3RydWN0IHMzYzI0MTBfZG1hX2J1ZiAqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcmVsb2FkOwogCkBAIC0yNTMsMTAgKzI2MiwxNCBAQAogCQkJIGJ1Zi0+bmV4dCk7CiAJCXJlbG9hZCA9IChidWYtPm5leHQgPT0gTlVMTCkgPyBTM0MyNDEwX0RDT05fTk9SRUxPQUQgOiAwOwogCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJsb2FkX3N0YXRlIGlzICVkID0+IGF1dG9yZWxvYWRcbiIsIGNoYW4tPmxvYWRfc3RhdGUpOworCQkvL3ByX2RlYnVnKCJsb2FkX3N0YXRlIGlzICVkID0+IGF1dG9yZWxvYWRcbiIsIGNoYW4tPmxvYWRfc3RhdGUpOwogCQlyZWxvYWQgPSBTM0MyNDEwX0RDT05fQVVUT1JFTE9BRDsKIAl9CiAKKwlpZiAoKGJ1Zi0+ZGF0YSAmIDB4ZjAwMDAwMDApICE9IDB4MzAwMDAwMDApIHsKKwkJZG1hd2FybigiZG1hbG9hZDogYnVmZmVyIGlzICVwXG4iLCAodm9pZCAqKWJ1Zi0+ZGF0YSk7CisJfQorCiAJd3JpdGVsKGJ1Zi0+ZGF0YSwgY2hhbi0+YWRkcl9yZWcpOwogCiAJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04sCkBAIC0yOTEsNyArMzA0LDcgQEAKICovCiAKIHN0YXRpYyB2b2lkCi1zM2MyNDEwX2RtYV9jYWxsX29wKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiwgczNjMjQxMF9jaGFuX29wX3Qgb3ApCitzM2MyNDEwX2RtYV9jYWxsX29wKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLCBlbnVtIHMzYzI0MTBfY2hhbl9vcCBvcCkKIHsKIAlpZiAoY2hhbi0+b3BfZm4gIT0gTlVMTCkgewogCQkoY2hhbi0+b3BfZm4pKGNoYW4sIG9wKTsKQEAgLTMwNSw4ICszMTgsOCBAQAogKi8KIAogc3RhdGljIGlubGluZSB2b2lkCi1zM2MyNDEwX2RtYV9idWZmZG9uZShzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4sIHMzYzI0MTBfZG1hX2J1Zl90ICpidWYsCi0JCSAgICAgczNjMjQxMF9kbWFfYnVmZnJlc3VsdF90IHJlc3VsdCkKK3MzYzI0MTBfZG1hX2J1ZmZkb25lKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLCBzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWYsCisJCSAgICAgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlc3VsdCkKIHsKIAlwcl9kZWJ1ZygiY2FsbGJhY2tfZm49JXAsIGJ1Zj0lcCwgaWQ9JXAsIHNpemU9JWQsIHJlc3VsdD0lZFxuIiwKIAkJIGNoYW4tPmNhbGxiYWNrX2ZuLCBidWYsIGJ1Zi0+aWQsIGJ1Zi0+c2l6ZSwgcmVzdWx0KTsKQEAgLTMyMSw3ICszMzQsNyBAQAogICogc3RhcnQgYSBkbWEgY2hhbm5lbCBnb2luZwogKi8KIAotc3RhdGljIGludCBzM2MyNDEwX2RtYV9zdGFydChzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4pCitzdGF0aWMgaW50IHMzYzI0MTBfZG1hX3N0YXJ0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zNzAsNyArMzgzLDcgQEAKIAl0bXAgfD0gUzNDMjQxMF9ETUFTS1RSSUdfT047CiAJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RNQVNLVFJJRywgdG1wKTsKIAotCXByX2RlYnVnKCJ3cm90ZSAlMDhseCB0byBETUFTS1RSSUdcbiIsIHRtcCk7CisJcHJfZGVidWcoImRtYSVkOiAlMDhseCB0byBETUFTS1RSSUdcbiIsIGNoYW4tPm51bWJlciwgdG1wKTsKIAogI2lmIDAKIAkvKiB0aGUgZG1hIGJ1ZmZlciBsb2FkcyBzaG91bGQgdGFrZSBjYXJlIG9mIGNsZWFyaW5nIHRoZSBBVVRPCkBAIC0zODQsNyArMzk3LDMwIEBACiAKIAlkYmdfc2hvd2NoYW4oY2hhbik7CiAKKwkvKiBpZiB3ZSd2ZSBvbmx5IGxvYWRlZCBvbmUgYnVmZmVyIG9udG8gdGhlIGNoYW5uZWwsIHRoZW4gY2hlYworCSAqIHRvIHNlZSBpZiB3ZSBoYXZlIGFub3RoZXIsIGFuZCBpZiBzbywgdHJ5IGFuZCBsb2FkIGl0IHNvIHdoZW4KKwkgKiB0aGUgZmlyc3QgYnVmZmVyIGlzIGZpbmlzaGVkLCB0aGUgbmV3IG9uZSB3aWxsIGJlIGxvYWRlZCBvbnRvCisJICogdGhlIGNoYW5uZWwgKi8KKworCWlmIChjaGFuLT5uZXh0ICE9IE5VTEwpIHsKKwkJaWYgKGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQpIHsKKworCQkJaWYgKHMzYzI0MTBfZG1hX3dhaXRmb3Jsb2FkKGNoYW4sIF9fTElORV9fKSA9PSAwKSB7CisJCQkJcHJfZGVidWcoIiVzOiBidWZmIG5vdCB5ZXQgbG9hZGVkLCBubyBtb3JlIHRvZG9cbiIsCisJCQkJCSBfX0ZVTkNUSU9OX18pOworCQkJfSBlbHNlIHsKKwkJCQljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HOworCQkJCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7CisJCQl9CisKKwkJfSBlbHNlIGlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORykgeworCQkJczNjMjQxMF9kbWFfbG9hZGJ1ZmZlcihjaGFuLCBjaGFuLT5uZXh0KTsKKwkJfQorCX0KKworCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5NCw3ICs0MzAsNyBAQAogKi8KIAogc3RhdGljIGludAotczNjMjQxMF9kbWFfY2FubG9hZChzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4pCitzM2MyNDEwX2RtYV9jYW5sb2FkKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQogewogCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF9OT05FIHx8CiAJICAgIGNoYW4tPmxvYWRfc3RhdGUgPT0gUzNDMjQxMF9ETUFMT0FEXzFSVU5OSU5HKQpAQCAtNDI0LDggKzQ2MCw4IEBACiBpbnQgczNjMjQxMF9kbWFfZW5xdWV1ZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdm9pZCAqaWQsCiAJCQlkbWFfYWRkcl90IGRhdGEsIGludCBzaXplKQogewotCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwotCXMzYzI0MTBfZG1hX2J1Zl90ICpidWY7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWNoZWNrX2NoYW5uZWwoY2hhbm5lbCk7CkBAIC00MzYsMTIgKzQ3MiwxMSBAQAogCWJ1ZiA9IGttZW1fY2FjaGVfYWxsb2MoZG1hX2ttZW0sIEdGUF9BVE9NSUMpOwogCWlmIChidWYgPT0gTlVMTCkgewogCQlwcl9kZWJ1ZygiJXM6IG91dCBvZiBtZW1vcnkgKCVsZCBhbGxvYylcbiIsCi0JCQkgX19GVU5DVElPTl9fLCBzaXplb2YoKmJ1ZikpOworCQkJIF9fRlVOQ1RJT05fXywgKGxvbmcpc2l6ZW9mKCpidWYpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JcHJfZGVidWcoIiVzOiBuZXcgYnVmZmVyICVwXG4iLCBfX0ZVTkNUSU9OX18sIGJ1Zik7Ci0KKwkvL3ByX2RlYnVnKCIlczogbmV3IGJ1ZmZlciAlcFxuIiwgX19GVU5DVElPTl9fLCBidWYpOwogCS8vZGJnX3Nob3djaGFuKGNoYW4pOwogCiAJYnVmLT5uZXh0ICA9IE5VTEw7CkBAIC01MDUsNyArNTQwLDcgQEAKIEVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZW5xdWV1ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotczNjMjQxMF9kbWFfZnJlZWJ1ZihzM2MyNDEwX2RtYV9idWZfdCAqYnVmKQorczNjMjQxMF9kbWFfZnJlZWJ1ZihzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWYpCiB7CiAJaW50IG1hZ2ljb2sgPSAoYnVmLT5tYWdpYyA9PSBCVUZfTUFHSUMpOwogCkBAIC01MjUsNyArNTYwLDcgQEAKICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotczNjMjQxMF9kbWFfbGFzdHhmZXIoczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQorczNjMjQxMF9kbWFfbGFzdHhmZXIoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCiB7CiAJcHJfZGVidWcoImRtYSVkOiBzM2MyNDEwX2RtYV9sYXN0eGZlcjogbG9hZF9zdGF0ZSAlZFxuIiwKIAkJIGNoYW4tPm51bWJlciwgY2hhbi0+bG9hZF9zdGF0ZSk7CkBAIC01MzcsMTQgKzU3MiwyMCBAQAogCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQ6CiAJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgewogCQkJCS8qIGZsYWcgZXJyb3I/ICovCi0JCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWRcbiIsCi0JCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRpbWVvdXQgd2FpdGluZyBmb3IgbG9hZCAoJXMpXG4iLAorCQkJICAgICAgIGNoYW4tPm51bWJlciwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybjsKIAkJfQogCQlicmVhazsKIAorCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERURfMVJVTk5JTkc6CisJCS8qIEkgYmVsaXZlIGluIHRoaXMgY2FzZSB3ZSBkbyBub3QgaGF2ZSBhbnl0aGluZyB0byBkbworCQkgKiB1bnRpbCB0aGUgbmV4dCBidWZmZXIgY29tZXMgYWxvbmcsIGFuZCB3ZSB0dXJuIG9mZiB0aGUKKwkJICogcmVsb2FkICovCisJCXJldHVybjsKKwogCWRlZmF1bHQ6Ci0JCXByX2RlYnVnKCJkbWElZDogbGFzdHhmZXI6IHVuaGFuZGxlZCBsb2FkX3N0YXRlICVkIHdpdGggbm8gbmV4dCIsCisJCXByX2RlYnVnKCJkbWElZDogbGFzdHhmZXI6IHVuaGFuZGxlZCBsb2FkX3N0YXRlICVkIHdpdGggbm8gbmV4dFxuIiwKIAkJCSBjaGFuLT5udW1iZXIsIGNoYW4tPmxvYWRfc3RhdGUpOwogCQlyZXR1cm47CiAKQEAgLTU2MCw4ICs2MDEsOCBAQAogc3RhdGljIGlycXJldHVybl90CiBzM2MyNDEwX2RtYV9pcnEoaW50IGlycSwgdm9pZCAqZGV2cHcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9IChzM2MyNDEwX2RtYV9jaGFuX3QgKilkZXZwdzsKLQlzM2MyNDEwX2RtYV9idWZfdCAgKmJ1ZjsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqKWRldnB3OworCXN0cnVjdCBzM2MyNDEwX2RtYV9idWYgICpidWY7CiAKIAlidWYgPSBjaGFuLT5jdXJyOwogCkBAIC02MjksNyArNjcwLDE0IEBACiAJfSBlbHNlIHsKIAl9CiAKLQlpZiAoY2hhbi0+bmV4dCAhPSBOVUxMKSB7CisJLyogb25seSByZWxvYWQgaWYgdGhlIGNoYW5uZWwgaXMgc3RpbGwgcnVubmluZy4uLiBvdXIgYnVmZmVyIGRvbmUKKwkgKiByb3V0aW5lIG1heSBoYXZlIGFsdGVyZWQgdGhlIHN0YXRlIGJ5IHJlcXVlc3RpbmcgdGhlIGRtYSBjaGFubmVsCisJICogdG8gc3RvcCBvciBzaHV0ZG93bi4uLiAqLworCisJLyogdG9kbzogY2hlY2sgdGhhdCB3aGVuIHRoZSBjaGFubmVsIGlzIHNodXQtZG93biBmcm9tIGluc2lkZSB0aGlzCisJICogZnVuY3Rpb24sIHdlIGNvcGUgd2l0aCB1bnNldHRpbmcgcmVsb2FkLCBldGMgKi8KKworCWlmIChjaGFuLT5uZXh0ICE9IE5VTEwgJiYgY2hhbi0+c3RhdGUgIT0gUzNDMjQxMF9ETUFfSURMRSkgewogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCXN3aXRjaCAoY2hhbi0+bG9hZF9zdGF0ZSkgewpAQCAtNjQ0LDggKzY5Miw4IEBACiAJCWNhc2UgUzNDMjQxMF9ETUFMT0FEXzFMT0FERUQ6CiAJCQlpZiAoczNjMjQxMF9kbWFfd2FpdGZvcmxvYWQoY2hhbiwgX19MSU5FX18pID09IDApIHsKIAkJCQkvKiBmbGFnIGVycm9yPyAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IHRpbWVvdXQgd2FpdGluZyBmb3IgbG9hZFxuIiwKLQkJCQkgICAgICAgY2hhbi0+bnVtYmVyKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgImRtYSVkOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGxvYWQgKCVzKVxuIiwKKwkJCQkgICAgICAgY2hhbi0+bnVtYmVyLCBfX0ZVTkNUSU9OX18pOwogCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCX0KIApAQCAtNjc4LDE3ICs3MjYsMTUgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQotCiAvKiBzM2MyNDEwX3JlcXVlc3RfZG1hCiAgKgogICogZ2V0IGNvbnRyb2wgb2YgYW4gZG1hIGNoYW5uZWwKICovCiAKLWludCBzM2MyNDEwX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFubmVsLCBzM2MyNDEwX2RtYV9jbGllbnRfdCAqY2xpZW50LAoraW50IHMzYzI0MTBfZG1hX3JlcXVlc3QodW5zaWduZWQgaW50IGNoYW5uZWwsIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudCwKIAkJCXZvaWQgKmRldikKIHsKLQlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtNzE4LDExICs3NjQsMTcgQEAKIAkJcHJfZGVidWcoImRtYSVkOiAlcyA6IHJlcXVlc3RpbmcgaXJxICVkXG4iLAogCQkJIGNoYW5uZWwsIF9fRlVOQ1RJT05fXywgY2hhbi0+aXJxKTsKIAorCQljaGFuLT5pcnFfY2xhaW1lZCA9IDE7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCQllcnIgPSByZXF1ZXN0X2lycShjaGFuLT5pcnEsIHMzYzI0MTBfZG1hX2lycSwgSVJRRl9ESVNBQkxFRCwKIAkJCQkgIGNsaWVudC0+bmFtZSwgKHZvaWQgKiljaGFuKTsKIAorCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKIAkJaWYgKGVycikgewogCQkJY2hhbi0+aW5fdXNlID0gMDsKKwkJCWNoYW4tPmlycV9jbGFpbWVkID0gMDsKIAkJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2Fubm90IGdldCBJUlEgJWQgZm9yIERNQSAlZFxuIiwKQEAgLTczMCw3ICs3ODIsNiBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWNoYW4tPmlycV9jbGFpbWVkID0gMTsKIAkJY2hhbi0+aXJxX2VuYWJsZWQgPSAxOwogCX0KIApAQCAtNzU2LDkgKzgwNyw5IEBACiAgKiBhbGxvd2VkIHRvIGdvIHRocm91Z2guCiAqLwogCi1pbnQgczNjMjQxMF9kbWFfZnJlZShkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NsaWVudF90ICpjbGllbnQpCitpbnQgczNjMjQxMF9kbWFfZnJlZShkbWFjaF90IGNoYW5uZWwsIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudCkKIHsKLQlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAljaGVja19jaGFubmVsKGNoYW5uZWwpOwpAQCAtNzk1LDcgKzg0Niw3IEBACiAKIEVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZnJlZSk7CiAKLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfZG9zdG9wKHMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbikKK3N0YXRpYyBpbnQgczNjMjQxMF9kbWFfZG9zdG9wKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04MTAsNiArODYxLDcgQEAKIAogCXRtcCA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9ETUFTS1RSSUcpOwogCXRtcCB8PSBTM0MyNDEwX0RNQVNLVFJJR19TVE9QOworCS8vdG1wICY9IH5TM0MyNDEwX0RNQVNLVFJJR19PTjsKIAlkbWFfd3JyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRE1BU0tUUklHLCB0bXApOwogCiAjaWYgMApAQCAtODE5LDYgKzg3MSw3IEBACiAJZG1hX3dycmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RDT04sIHRtcCk7CiAjZW5kaWYKIAorCS8qIHNob3VsZCBzdG9wIGRvIHRoaXMsIG9yIHNob3VsZCB3ZSB3YWl0IGZvciBmbHVzaD8gKi8KIAljaGFuLT5zdGF0ZSAgICAgID0gUzNDMjQxMF9ETUFfSURMRTsKIAljaGFuLT5sb2FkX3N0YXRlID0gUzNDMjQxMF9ETUFMT0FEX05PTkU7CiAKQEAgLTgyNywxNyArODgwLDM1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgczNjMjQxMF9kbWFfd2FpdGZvcnN0b3Aoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisJdW5zaWduZWQgaW50IHRpbWVvdXQgPSAweDEwMDAwOworCisJd2hpbGUgKHRpbWVvdXQtLSA+IDApIHsKKwkJdG1wID0gZG1hX3JkcmVnKGNoYW4sIFMzQzI0MTBfRE1BX0RNQVNLVFJJRyk7CisKKwkJaWYgKCEodG1wICYgUzNDMjQxMF9ETUFTS1RSSUdfT04pKQorCQkJcmV0dXJuOworCX0KKworCXByX2RlYnVnKCJkbWElZDogZmFpbGVkIHRvIHN0b3A/XG4iLCBjaGFuLT5udW1iZXIpOworfQorCisKIC8qIHMzYzI0MTBfZG1hX2ZsdXNoCiAgKgogICogc3RvcCB0aGUgY2hhbm5lbCwgYW5kIHJlbW92ZSBhbGwgY3VycmVudCBhbmQgcGVuZGluZyB0cmFuc2ZlcnMKICovCiAKLXN0YXRpYyBpbnQgczNjMjQxMF9kbWFfZmx1c2goczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuKQorc3RhdGljIGludCBzM2MyNDEwX2RtYV9mbHVzaChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKIHsKLQlzM2MyNDEwX2RtYV9idWZfdCAqYnVmLCAqbmV4dDsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmICpidWYsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwcl9kZWJ1ZygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOworCXByX2RlYnVnKCIlczogY2hhbiAlcCAoJWQpXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIGNoYW4tPm51bWJlcik7CisKKwlkYmdfc2hvd2NoYW4oY2hhbik7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAKQEAgLTg2NCwxNiArOTM1LDY5IEBACiAJCX0KIAl9CiAKKwlkYmdfc2hvd3JlZ3MoY2hhbik7CisKKwlzM2MyNDEwX2RtYV93YWl0Zm9yc3RvcChjaGFuKTsKKworI2lmIDAKKwkvKiBzaG91bGQgYWxzbyBjbGVhciBpbnRlcnJ1cHRzLCBhY2NvcmRpbmcgdG8gV2luQ0UgQlNQICovCisJeworCQl1bnNpZ25lZCBsb25nIHRtcDsKKworCQl0bXAgPSBkbWFfcmRyZWcoY2hhbiwgUzNDMjQxMF9ETUFfRENPTik7CisJCXRtcCB8PSBTM0MyNDEwX0RDT05fTk9SRUxPQUQ7CisJCWRtYV93cnJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ09OLCB0bXApOworCX0KKyNlbmRpZgorCisJZGJnX3Nob3dyZWdzKGNoYW4pOworCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CiAKK2ludAorczNjMjQxMF9kbWFfc3RhcnRlZChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJLyogaWYgd2UndmUgb25seSBsb2FkZWQgb25lIGJ1ZmZlciBvbnRvIHRoZSBjaGFubmVsLCB0aGVuIGNoZWMKKwkgKiB0byBzZWUgaWYgd2UgaGF2ZSBhbm90aGVyLCBhbmQgaWYgc28sIHRyeSBhbmQgbG9hZCBpdCBzbyB3aGVuCisJICogdGhlIGZpcnN0IGJ1ZmZlciBpcyBmaW5pc2hlZCwgdGhlIG5ldyBvbmUgd2lsbCBiZSBsb2FkZWQgb250bworCSAqIHRoZSBjaGFubmVsICovCisKKwlpZiAoY2hhbi0+bmV4dCAhPSBOVUxMKSB7CisJCWlmIChjaGFuLT5sb2FkX3N0YXRlID09IFMzQzI0MTBfRE1BTE9BRF8xTE9BREVEKSB7CisKKwkJCWlmIChzM2MyNDEwX2RtYV93YWl0Zm9ybG9hZChjaGFuLCBfX0xJTkVfXykgPT0gMCkgeworCQkJCXByX2RlYnVnKCIlczogYnVmZiBub3QgeWV0IGxvYWRlZCwgbm8gbW9yZSB0b2RvXG4iLAorCQkJCQkgX19GVU5DVElPTl9fKTsKKwkJCX0gZWxzZSB7CisJCQkJY2hhbi0+bG9hZF9zdGF0ZSA9IFMzQzI0MTBfRE1BTE9BRF8xUlVOTklORzsKKwkJCQlzM2MyNDEwX2RtYV9sb2FkYnVmZmVyKGNoYW4sIGNoYW4tPm5leHQpOworCQkJfQorCisJCX0gZWxzZSBpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfMVJVTk5JTkcpIHsKKwkJCXMzYzI0MTBfZG1hX2xvYWRidWZmZXIoY2hhbiwgY2hhbi0+bmV4dCk7CisJCX0KKwl9CisKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCXJldHVybiAwOworCit9CiAKIGludAotczNjMjQxMF9kbWFfY3RybChkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfY2hhbl9vcF90IG9wKQorczNjMjQxMF9kbWFfY3RybChkbWFjaF90IGNoYW5uZWwsIGVudW0gczNjMjQxMF9jaGFuX29wIG9wKQogewotCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CiAKIAljaGVja19jaGFubmVsKGNoYW5uZWwpOwogCkBAIC04ODUsMTQgKzEwMDksMTUgQEAKIAkJcmV0dXJuIHMzYzI0MTBfZG1hX2Rvc3RvcChjaGFuKTsKIAogCWNhc2UgUzNDMjQxMF9ETUFPUF9QQVVTRToKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KIAljYXNlIFMzQzI0MTBfRE1BT1BfUkVTVU1FOgogCQlyZXR1cm4gLUVOT0VOVDsKIAogCWNhc2UgUzNDMjQxMF9ETUFPUF9GTFVTSDoKIAkJcmV0dXJuIHMzYzI0MTBfZG1hX2ZsdXNoKGNoYW4pOwogCisJY2FzZSBTM0MyNDEwX0RNQU9QX1NUQVJURUQ6CisJCXJldHVybiBzM2MyNDEwX2RtYV9zdGFydGVkKGNoYW4pOworCiAJY2FzZSBTM0MyNDEwX0RNQU9QX1RJTUVPVVQ6CiAJCXJldHVybiAwOwogCkBAIC05MjEsNyArMTA0Niw3IEBACiAJCSAgICAgICBpbnQgeGZlcnVuaXQsCiAJCSAgICAgICBpbnQgZGNvbikKIHsKLQlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCiAJcHJfZGVidWcoIiVzOiBjaGFuPSVkLCB4ZmVyX3VuaXQ9JWQsIGRjb249JTA4eFxuIiwKIAkJIF9fRlVOQ1RJT05fXywgY2hhbm5lbCwgeGZlcnVuaXQsIGRjb24pOwpAQCAtOTYxLDcgKzEwODYsNyBAQAogCiBpbnQgczNjMjQxMF9kbWFfc2V0ZmxhZ3MoZG1hY2hfdCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JczNjMjQxMF9kbWFfY2hhbl90ICpjaGFuID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKIAogCWNoZWNrX2NoYW5uZWwoY2hhbm5lbCk7CiAKQEAgLTk4MSw3ICsxMTA2LDcgQEAKIAogaW50IHMzYzI0MTBfZG1hX3NldF9vcGZuKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9kbWFfb3Bmbl90IHJ0bikKIHsKLQlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCiAJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKIApAQCAtOTk2LDcgKzExMjEsNyBAQAogCiBpbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9kbWFfY2Jmbl90IHJ0bikKIHsKLQlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCiAJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKIApAQCAtMTAyNCwxMSArMTE0OSwxMSBAQAogKi8KIAogaW50IHMzYzI0MTBfZG1hX2RldmNvbmZpZyhpbnQgY2hhbm5lbCwKLQkJCSAgczNjMjQxMF9kbWFzcmNfdCBzb3VyY2UsCisJCQkgIGVudW0gczNjMjQxMF9kbWFzcmMgc291cmNlLAogCQkJICBpbnQgaHdjZmcsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZGV2YWRkcikKIHsKLQlzM2MyNDEwX2RtYV9jaGFuX3QgKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCiAJY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKIApAQCAtMTA3NSw3ICsxMjAwLDcgQEAKIAogaW50IHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKGRtYWNoX3QgY2hhbm5lbCwgZG1hX2FkZHJfdCAqc3JjLCBkbWFfYWRkcl90ICpkc3QpCiB7Ci0gCXMzYzI0MTBfZG1hX2NoYW5fdCAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworIAlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOwogCiAgCWNoZWNrX2NoYW5uZWwoY2hhbm5lbCk7CiAKQEAgLTEwOTcsNyArMTIyMiw3IEBACiAKIHN0YXRpYyBpbnQgczNjMjQxMF9kbWFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0JczNjMjQxMF9kbWFfY2hhbl90ICpjcCA9IGNvbnRhaW5lcl9vZihkZXYsIHMzYzI0MTBfZG1hX2NoYW5fdCwgZGV2KTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY3AgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiwgZGV2KTsKIAogCXByaW50ayhLRVJOX0RFQlVHICJzdXNwZW5kaW5nIGRtYSBjaGFubmVsICVkXG4iLCBjcC0+bnVtYmVyKTsKIApAQCAtMTEzNyw3ICsxMjYyLDcgQEAKIAogc3RhdGljIHZvaWQgczNjMjQxMF9kbWFfY2FjaGVfY3Rvcih2b2lkICpwLCBrbWVtX2NhY2hlX3QgKmMsIHVuc2lnbmVkIGxvbmcgZikKIHsKLQltZW1zZXQocCwgMCwgc2l6ZW9mKHMzYzI0MTBfZG1hX2J1Zl90KSk7CisJbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmKSk7CiB9CiAKIApAQCAtMTE0NSw3ICsxMjcwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9pbml0X2RtYSh2b2lkKQogewotCXMzYzI0MTBfZG1hX2NoYW5fdCAqY3A7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNwOwogCWludCBjaGFubmVsOwogCWludCByZXQ7CiAKQEAgLTExNjMsNyArMTI4OCw3IEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWRtYV9rbWVtID0ga21lbV9jYWNoZV9jcmVhdGUoImRtYV9kZXNjIiwgc2l6ZW9mKHMzYzI0MTBfZG1hX2J1Zl90KSwgMCwKKwlkbWFfa21lbSA9IGttZW1fY2FjaGVfY3JlYXRlKCJkbWFfZGVzYyIsIHNpemVvZihzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmKSwgMCwKIAkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwKIAkJCQkgICAgIHMzYzI0MTBfZG1hX2NhY2hlX2N0b3IsIE5VTEwpOwogCkBAIC0xMTc2LDcgKzEzMDEsNyBAQAogCWZvciAoY2hhbm5lbCA9IDA7IGNoYW5uZWwgPCBTM0MyNDEwX0RNQV9DSEFOTkVMUzsgY2hhbm5lbCsrKSB7CiAJCWNwID0gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbF07CiAKLQkJbWVtc2V0KGNwLCAwLCBzaXplb2YoczNjMjQxMF9kbWFfY2hhbl90KSk7CisJCW1lbXNldChjcCwgMCwgc2l6ZW9mKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuKSk7CiAKIAkJLyogZG1hIGNoYW5uZWwgaXJxcyBhcmUgaW4gb3JkZXIuLiAqLwogCQljcC0+bnVtYmVyID0gY2hhbm5lbDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYwppbmRleCA2ODIyZGM3Li5jZDYxMzliIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCkBAIC04Niw3ICs4Niw3IEBACiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRhbGxvdwk9IDB4MDAwMGZmZjBMOwogdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOwogCi1zdGF0aWMgaW50CitpbnQKIHMzY19pcnFfd2FrZSh1bnNpZ25lZCBpbnQgaXJxbm8sIHVuc2lnbmVkIGludCBzdGF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGlycWJpdCA9IDEgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKQEAgLTI2MCw3ICsyNjAsNyBAQAogCXMzY19pcnFfdW5tYXNrKChpcnFubyA8PSAoSVJRX0VJTlQ3IC0gRVhUSU5UX09GRikpID8gSVJRX0VJTlQ0dDcgOiBJUlFfRUlOVDh0MjMpOwogfQogCi1zdGF0aWMgaW50CitpbnQKIHMzY19pcnFleHRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKIHsKIAl2b2lkIF9faW9tZW0gKmV4dGludF9yZWc7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmgKaW5kZXggNGFiZjBjYS4uODQyYTlmNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuaApAQCAtOTcsMyArOTcsMTMgQEAKIAkJX19yYXdfd3JpdGVsKHBhcmVudG1hc2ssIFMzQzI0MTBfSU5UUE5EKTsKIAl9CiB9CisKKy8qIGV4cG9ydGVkIGZvciB1c2UgaW4gYXJjaC9hcm0vbWFjaC1zM2MyNDEwICovCisKKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgczNjX2lycV93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKTsKKyNlbHNlCisjZGVmaW5lIHMzY19pcnFfd2FrZSBOVUxMCisjZW5kaWYKKworZXh0ZXJuIGludCBzM2NfaXJxZXh0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW51YmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwppbmRleCA0YTkyZDZmLi42MDY0MWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYwpAQCAtNjAsMTEgKzYwLDEyIEBACiAJLnZpcnR1YWwJPSAodTMyKVMzQzI0WFhfVkFfSVNBX0JZVEUsCiAJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4MCksCiAJLmxlbmd0aAkJPSBTWl80TSwKLQkudHlwZQkJPSBNVF9ERVZJQ0UKKwkudHlwZQkJPSBNVF9ERVZJQ0UsCiAgIH0sIHsKIAkudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9JU0FfV09SRCwKIAkucGZuCQk9IF9fcGh5c190b19wZm4oMHgwKSwKLQkubGVuZ3RoIAk9IFNaXzRNLCBNVF9ERVZJQ0UKKwkubGVuZ3RoIAk9IFNaXzRNLAorCS50eXBlCQk9IE1UX0RFVklDRSwKICAgfSwKIAogICAvKiB3ZSBjb3VsZCBwb3NzaWJseSBjb21wcmVzcyB0aGUgbmV4dCBzZXQgZG93biBpbnRvIGEgc2V0IG9mIHNtYWxsZXIgdGFibGVzCkBAIC03OCwzNiArNzksMTIgQEAKIAkudmlydHVhbAk9ICh1MzIpQU5VQklTX1ZBX0NUUkwxLAogCS5wZm4JCT0gX19waHlzX3RvX3BmbihBTlVCSVNfUEFfQ1RSTDEpLAogCS5sZW5ndGgJCT0gU1pfNEssCi0JLnR5cGUJCT0gTVRfREVWSUNFCisJLnR5cGUJCT0gTVRfREVWSUNFLAogICB9LCB7CiAJLnZpcnR1YWwJPSAodTMyKUFOVUJJU19WQV9DVFJMMiwKIAkucGZuCQk9IF9fcGh5c190b19wZm4oQU5VQklTX1BBX0NUUkwyKSwKIAkubGVuZ3RoCQk9IFNaXzRLLAotCS50eXBlCQk9TVRfREVWSUNFCi0gIH0sCi0KLSAgLyogSURFIGRyaXZlcyAqLwotCi0gIHsKLQkudmlydHVhbAk9ICh1MzIpQU5VQklTX0lERVBSSSwKLQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzMpLAotCS5sZW5ndGgJCT0gU1pfMU0sCi0JLnR5cGUJCT0gTVRfREVWSUNFCi0gIH0sIHsKLQkudmlydHVhbAk9ICh1MzIpQU5VQklTX0lERVBSSUFVWCwKLQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzMrKDE8PDI2KSksCi0JLmxlbmd0aAkJPSBTWl8xTSwKLQkudHlwZQkJPSBNVF9ERVZJQ0UKLSAgfSwgewotCS52aXJ0dWFsCT0gKHUzMilBTlVCSVNfSURFU0VDLAotCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTNCksCi0JLmxlbmd0aAkJPSBTWl8xTSwKLQkudHlwZQkJPSBNVF9ERVZJQ0UKLSAgfSwgewotCS52aXJ0dWFsCT0gKHUzMilBTlVCSVNfSURFU0VDQVVYLAotCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX0NTNCsoMTw8MjYpKSwKLQkubGVuZ3RoCQk9IFNaXzFNLAotCS50eXBlCQk9IE1UX0RFVklDRQorCS50eXBlCQk9IE1UX0RFVklDRSwKICAgfSwKIH07CiAKQEAgLTEyNiw3ICsxMDMsNyBAQAogCQkubmFtZQkJPSAicGNsayIsCiAJCS5kaXZpc29yCT0gMSwKIAkJLm1pbl9iYXVkCT0gMCwKLQkJLm1heF9iYXVkCT0gMC4KKwkJLm1heF9iYXVkCT0gMCwKIAl9CiB9OwogCkBAIC0xMzksNyArMTE2LDcgQEAKIAkJLnVsY29uCSAgICAgPSBVTENPTiwKIAkJLnVmY29uCSAgICAgPSBVRkNPTiwKIAkJLmNsb2NrcwkgICAgID0gYW51YmlzX3NlcmlhbF9jbG9ja3MsCi0JCS5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUoYW51YmlzX3NlcmlhbF9jbG9ja3MpCisJCS5jbG9ja3Nfc2l6ZSA9IEFSUkFZX1NJWkUoYW51YmlzX3NlcmlhbF9jbG9ja3MpLAogCX0sCiAJWzFdID0gewogCQkuaHdwb3J0CSAgICAgPSAyLApAQCAtMTQ4LDcgKzEyNSw3IEBACiAJCS51bGNvbgkgICAgID0gVUxDT04sCiAJCS51ZmNvbgkgICAgID0gVUZDT04sCiAJCS5jbG9ja3MJICAgICA9IGFudWJpc19zZXJpYWxfY2xvY2tzLAotCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKGFudWJpc19zZXJpYWxfY2xvY2tzKQorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKGFudWJpc19zZXJpYWxfY2xvY2tzKSwKIAl9LAogfTsKIApAQCAtMTYyLDcgKzEzOSw3IEBACiAJWzBdID0gewogCQkubmFtZQk9ICJCb290IEFnZW50IiwKIAkJLnNpemUJPSBTWl8xNkssCi0JCS5vZmZzZXQJPSAwCisJCS5vZmZzZXQJPSAwLAogCX0sCiAJWzFdID0gewogCQkubmFtZQk9ICIvYm9vdCIsCkBAIC0xOTQsMjEgKzE3MSwyMSBAQAogCQkubnJfY2hpcHMJPSAxLAogCQkubnJfbWFwCQk9IGV4dGVybmFsX21hcCwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGFudWJpc19kZWZhdWx0X25hbmRfcGFydCksCi0JCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0CisJCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0LAogCX0sCiAJWzBdID0gewogCQkubmFtZQkJPSAiY2hpcDAiLAogCQkubnJfY2hpcHMJPSAxLAogCQkubnJfbWFwCQk9IGNoaXAwX21hcCwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGFudWJpc19kZWZhdWx0X25hbmRfcGFydCksCi0JCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0CisJCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0LAogCX0sCiAJWzJdID0gewogCQkubmFtZQkJPSAiY2hpcDEiLAogCQkubnJfY2hpcHMJPSAxLAogCQkubnJfbWFwCQk9IGNoaXAxX21hcCwKIAkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGFudWJpc19kZWZhdWx0X25hbmRfcGFydCksCi0JCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0CisJCS5wYXJ0aXRpb25zCT0gYW51YmlzX2RlZmF1bHRfbmFuZF9wYXJ0LAogCX0sCiB9OwogCkBAIC0zMTMsNyArMjkwLDcgQEAKIAkuZGV2aWNlcyAgICAgICA9IGFudWJpc19kZXZpY2VzLAogCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShhbnViaXNfZGV2aWNlcyksCiAJLmNsb2NrcwkgICAgICAgPSBhbnViaXNfY2xvY2tzLAotCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShhbnViaXNfY2xvY2tzKQorCS5jbG9ja3NfY291bnQgID0gQVJSQVlfU0laRShhbnViaXNfY2xvY2tzKSwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbnViaXNfbWFwX2lvKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggOTQ3MjM0ZC4uMjk2OGZiMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYmFzdC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYwpAQCAtOCwzMSArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAgMTQtU2VwLTIwMDQgQkpEICBVU0IgcG93ZXIgY29udHJvbAotICogICAgIDIwLUF1Zy0yMDA0IEJKRCAgQWRkZWQgczNjMjQxMF9ib2FyZCBzdHJ1Y3QKLSAqICAgICAxOC1BdWctMjAwNCBCSkQgIEFkZGVkIHBsYXRmb3JtIGRldmljZXMgZnJvbSBkZWZhdWx0IHNldAotICogICAgIDE2LU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBpbml0aWFsIHZlcnNpb24KLSAqICAgICAxNi1BdWctMjAwMyBCSkQgIEZpeGVkIGhlYWRlciBmaWxlcyBhbmQgY29weXJpZ2h0LCBhZGRlZCBVUkwKLSAqICAgICAwNS1TZXAtMjAwMyBCSkQgIE1vdmVkIHRvIHYyLjYga2VybmVsCi0gKiAgICAgMDYtSmFuLTIwMDMgQkpEICBVcGRhdGVzIGZvciA8YXJjaC9tYXAuaD4KLSAqICAgICAxOC1KYW4tMjAwMyBCSkQgIEFkZGVkIHNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24KLSAqICAgICAwNS1PY3QtMjAwNCBCSkQgIFBvd2VyIG1hbmFnZW1lbnQgY29kZQotICogICAgIDA0LU5vdi0yMDA0IEJKRCAgVXBkYXRlZCBzZXJpYWwgcG9ydCBjbG9ja3MKLSAqICAgICAwNC1KYW4tMjAwNSBCSkQgIE5ldyB1YXJ0IGluaXQgY2FsbAotICogICAgIDEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCBpbmNsdWRlIG9mIHMzYzI0MTAuaAotICogICAgIDE0LUphbi0yMDA1IEJKRCAgQWRkIHN1cHBvcnQgZm9yIG11aXRscGxlIE5BTkQgZGV2aWNlcwotICogICAgIDAzLU1hci0yMDA1IEJKRCAgRW5zdXJlZCB0aGF0IGJhc3QtY3BsZC5oIGlzIGluY2x1ZGVkCi0gKiAgICAgMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICogICAgIDE0LU1hci0yMDA1IEJKRCAgVXBkYXRlZCBmb3IgX19pb21lbSBjaGFuZ2VzCi0gKiAgICAgMjItSnVuLTIwMDUgQkpEICBBZGRlZCBETTkwMDAgcGxhdGZvcm0gaW5mb3JtYXRpb24KLSAqICAgICAyOC1KdW4tMjAwNSBCSkQgIE1vdmVkIHBtIGZ1bmN0aW9uYWxpdHkgb3V0IHRvIGNvbW1vbiBjb2RlCi0gKiAgICAgMTctSnVsLTIwMDUgQkpEICBDaGFuZ2VkIHRvIHBsYXRmb3JtIGRldmljZSBmb3IgU3VwZXJJTyAxNjU1MHMKLSAqICAgICAyNS1KdWwtMjAwNSBCSkQgIFJlbW92ZWQgQVNJWCBzdGF0aWMgbWFwcGluZ3MKLSAqICAgICAyNy1KdWwtMjAwNSBCSkQgIEVuc3VyZSBtYXhpbXVtIGZyZXF1ZW5jeSBvZiBpMmMgYnVzCi0gKiAgICAgMjAtU2VwLTIwMDUgQkpEICBBZGRlZCBzdGF0aWMgdG8gbm9uLWV4cG9ydGVkIGl0ZW1zCi0gKiAgICAgMjYtT2N0LTIwMDUgQkpEICBBZGRlZCBGQiBwbGF0Zm9ybSBkYXRhCiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCBhZWM0MzFiLi44Yzg5NWMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTksMjMgKzksNiBAQAogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAgMTYtTWF5LTIwMDMgQkpEICBDcmVhdGVkIGluaXRpYWwgdmVyc2lvbgotICogICAgIDE2LUF1Zy0yMDAzIEJKRCAgRml4ZWQgaGVhZGVyIGZpbGVzIGFuZCBjb3B5cmlnaHQsIGFkZGVkIFVSTAotICogICAgIDA1LVNlcC0yMDAzIEJKRCAgTW92ZWQgdG8gdjIuNiBrZXJuZWwKLSAqICAgICAwNi1KYW4tMjAwMyBCSkQgIFVwZGF0ZXMgZm9yIDxhcmNoL21hcC5oPgotICogICAgIDE4LUphbi0yMDAzIEJKRCAgQWRkZWQgc2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbgotICogICAgIDE3LUZlYi0yMDAzIEJKRCAgQ29waWVkIHRvIG1hY2gtaXBhcS5jCi0gKiAgICAgMjEtQXVnLTIwMDQgQkpEICBBZGRlZCBzdHJ1Y3QgczNjMjQxMF9ib2FyZAotICogICAgIDA0LVNlcC0yMDA0IEJKRCAgQ2hhbmdlZCB1YXJ0IGluaXQsIHJlbmFtZWQgaXBhcV8gLT4gaDE5NDBfCi0gKiAgICAgMTgtT2N0LTIwMDQgQkpEICBVcGRhdGVkIG5ldyBib2FyZCBzdHJ1Y3R1cmUgbmFtZQotICogICAgIDA0LU5vdi0yMDA0IEJKRCAgQ2hhbmdlIGZvciBuZXcgc2VyaWFsIGNsb2NrCi0gKiAgICAgMDQtSmFuLTIwMDUgQkpEICBVcGRhdGVkIHVhcnQgaW5pdCBjYWxsCi0gKiAgICAgMTAtSmFuLTIwMDUgQkpEICBSZW1vdmVkIGluY2x1ZGUgb2YgczNjMjQxMC5oCi0gKiAgICAgMTQtSmFuLTIwMDUgQkpEICBBZGRlZCBjbG9jayBpbml0Ci0gKiAgICAgMTAtTWFyLTIwMDUgTENWUiBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICogICAgIDIwLVNlcC0yMDA1IEJKRCAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwotICogICAgIDI2LU9jdC0yMDA1IEJKRCAgQ2hhbmdlZCBuYW1lIG9mIGZiIGluaXQgY2FsbAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3NpcmlzLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwppbmRleCA4NThmZDAzLi5lMTkzYmE2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vc2lyaXMuYwpAQCAtNjcsMTIgKzY3LDEyIEBACiAJICAudmlydHVhbAk9ICh1MzIpT1NJUklTX1ZBX0NUUkwxLAogCSAgLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE9TSVJJU19QQV9DVFJMMSksCiAJICAubGVuZ3RoCT0gU1pfMTZLLAotCSAgLnR5cGUJCT0gTVRfREVWSUNFCisJICAudHlwZQkJPSBNVF9ERVZJQ0UsCiAgIH0sIHsKIAkgIC52aXJ0dWFsCT0gKHUzMilPU0lSSVNfVkFfQ1RSTDIsCiAJICAucGZuCQk9IF9fcGh5c190b19wZm4oT1NJUklTX1BBX0NUUkwyKSwKIAkgIC5sZW5ndGgJPSBTWl8xNkssCi0JICAudHlwZQkJPSBNVF9ERVZJQ0UKKwkgIC50eXBlCQk9IE1UX0RFVklDRSwKICAgfSwKIH07CiAKQEAgLTkxLDcgKzkxLDcgQEAKIAkJLm5hbWUJCT0gInBjbGsiLAogCQkuZGl2aXNvcgk9IDEsCiAJCS5taW5fYmF1ZAk9IDAsCi0JCS5tYXhfYmF1ZAk9IDAuCisJCS5tYXhfYmF1ZAk9IDAsCiAJfQogfTsKIApAQCAtMTAzLDcgKzEwMyw3IEBACiAJCS51bGNvbgkgICAgID0gVUxDT04sCiAJCS51ZmNvbgkgICAgID0gVUZDT04sCiAJCS5jbG9ja3MJICAgICA9IG9zaXJpc19zZXJpYWxfY2xvY2tzLAotCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKG9zaXJpc19zZXJpYWxfY2xvY2tzKQorCQkuY2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKG9zaXJpc19zZXJpYWxfY2xvY2tzKSwKIAl9LAogCVsxXSA9IHsKIAkJLmh3cG9ydAkgICAgID0gMSwKQEAgLTExMiw3ICsxMTIsNyBAQAogCQkudWxjb24JICAgICA9IFVMQ09OLAogCQkudWZjb24JICAgICA9IFVGQ09OLAogCQkuY2xvY2tzCSAgICAgPSBvc2lyaXNfc2VyaWFsX2Nsb2NrcywKLQkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShvc2lyaXNfc2VyaWFsX2Nsb2NrcykKKwkJLmNsb2Nrc19zaXplID0gQVJSQVlfU0laRShvc2lyaXNfc2VyaWFsX2Nsb2NrcyksCiAJfSwKIH07CiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogCVswXSA9IHsKIAkJLm5hbWUJPSAiQm9vdCBBZ2VudCIsCiAJCS5zaXplCT0gU1pfMTZLLAotCQkub2Zmc2V0CT0gMAorCQkub2Zmc2V0CT0gMCwKIAl9LAogCVsxXSA9IHsKIAkJLm5hbWUJPSAiL2Jvb3QiLApAQCAtMTU4LDIxICsxNTgsMjEgQEAKIAkJLm5yX2NoaXBzCT0gMSwKIAkJLm5yX21hcAkJPSBleHRlcm5hbF9tYXAsCiAJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAotCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydAorCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCwKIAl9LAogCVswXSA9IHsKIAkJLm5hbWUJCT0gImNoaXAwIiwKIAkJLm5yX2NoaXBzCT0gMSwKIAkJLm5yX21hcAkJPSBjaGlwMF9tYXAsCiAJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAotCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydAorCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCwKIAl9LAogCVsyXSA9IHsKIAkJLm5hbWUJCT0gImNoaXAxIiwKIAkJLm5yX2NoaXBzCT0gMSwKIAkJLm5yX21hcAkJPSBjaGlwMV9tYXAsCiAJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShvc2lyaXNfZGVmYXVsdF9uYW5kX3BhcnQpLAotCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydAorCQkucGFydGl0aW9ucwk9IG9zaXJpc19kZWZhdWx0X25hbmRfcGFydCwKIAl9LAogfTsKIApAQCAtMjQ1LDcgKzI0NSw3IEBACiAJLmRldmljZXMgICAgICAgPSBvc2lyaXNfZGV2aWNlcywKIAkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUob3NpcmlzX2RldmljZXMpLAogCS5jbG9ja3MJICAgICAgID0gb3NpcmlzX2Nsb2NrcywKLQkuY2xvY2tzX2NvdW50ICA9IEFSUkFZX1NJWkUob3NpcmlzX2Nsb2NrcykKKwkuY2xvY2tzX2NvdW50ICA9IEFSUkFZX1NJWkUob3NpcmlzX2Nsb2NrcyksCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgb3NpcmlzX21hcF9pbyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtcngzNzE1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwppbmRleCAzMDZhZmMxLi4yM2Q3YzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1yeDM3MTUuYwpAQCAtOSwxNSArOSw2IEBACiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgotICogTW9kaWZpY2F0aW9uczoKLSAqCTE2LVNlcC0yMDA0IEJKRCAgQ29waWVkIGZyb20gbWFjaC1oMTk0MC5jCi0gKgkyNS1PY3QtMjAwNCBCSkQgIFVwZGF0ZXMgZm9yIDIuNi4xMC1yYzEKLSAqCTEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCBpbmNsdWRlIG9mIHMzYzI0MTAuaCBzM2MyNDQwLmgKLSAqCTE0LUphbi0yMDA1IEJKRCAgQWRkZWQgbmV3IGNsb2NrIGluaXQKLSAqCTEwLU1hci0yMDA1IExDVlIgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKLSAqCTE0LU1hci0yMDA1IEJKRCAgRml4ZWQgX19pb21lbSB3YXJuaW5ncwotICoJMjAtU2VwLTIwMDUgQkpEICBBZGRlZCBzdGF0aWMgdG8gbm9uLWV4cG9ydGVkIGl0ZW1zCi0gKgkzMS1PY3QtMjAwNSBCSkQgIEFkZGVkIExDRCBzZXR1cCBmb3IgZnJhbWVidWZmZXIKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCmluZGV4IDI1ZjdlOWYuLmIzYjAxNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwpAQCAtMjcsMTAgKzI3LDYgQEAKICAqIGRlcml2ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMsIHdyaXR0ZW4gYnkKICAqIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCi0gKiAxMC1NYXItMjAwNSBMQ1ZSICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICogMjAtU2VwLTIwMDUgQkpEICAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwotICogMDEtQXByLTIwMDYgQkpEICAgTW92ZWQgaW5pdCBjb2RlIHRvIGNvbW1vbiBzbWRrCi0gKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTMuYwppbmRleCBiN2VmN2QzLi4zYTRjYTdmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEzLmMKQEAgLTExMiw3ICsxMTIsMjAgQEAKIAlzbWRrX21hY2hpbmVfaW5pdCgpOwogfQogCi1NQUNISU5FX1NUQVJUKFMzQzI0MTMsICJTTURLMjQxMyIpCitNQUNISU5FX1NUQVJUKFMzQzI0MTMsICJTM0MyNDEzIikKKwkvKiBNYWludGFpbmVyOiBCZW4gRG9va3MgPGJlbkBmbHVmZi5vcmc+ICovCisJLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKKworCS5maXh1cAkJPSBzbWRrMjQxM19maXh1cCwKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazI0MTNfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrMjQxM19tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKKworTUFDSElORV9TVEFSVChTTURLMjQxMywgIlNNREsyNDEzIikKIAkvKiBNYWludGFpbmVyOiBCZW4gRG9va3MgPGJlbkBmbHVmZi5vcmc+ICovCiAJLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCiAJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwppbmRleCBkMThlZmIyLi5hMGQ3NjkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwpAQCAtMTAsMjUgKzEwLDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgIDE0LVNlcC0yMDA0IEJKRCAgVVNCIFBvd2VyIGNvbnRyb2wKLSAqICAgICAwNC1TZXAtMjAwNCBCSkQgIEFkZGVkIG5ldyB1YXJ0IGluaXQsIGFuZCBpbyBpbml0Ci0gKiAgICAgMjEtQXVnLTIwMDQgQkpEICBBZGRlZCBzdHJ1Y3QgczNjMjQxMF9ib2FyZAotICogICAgIDA2LUF1Zy0yMDA0IEJKRCAgRml4ZWQgY2FsbCB0byB0aW1lIGluaXRpYWxpc2F0aW9uCi0gKiAgICAgMDUtQXByLTIwMDQgQkpEICBDb3BpZWQgdG8gbWFrZSBtYWNoLXZyMTAwMC5jCi0gKiAgICAgMTgtT2N0LTIwMDQgQkpEICBVcGRhdGVkIGJvYXJkIHN0cnVjdAotICogICAgIDA0LU5vdi0yMDA0IEJKRCAgQ2xvY2sgYW5kIHNlcmlhbCBjb25maWd1cmF0aW9uIHVwZGF0ZQotICoKLSAqICAgICAwNC1KYW4tMjAwNSBCSkQgIFVwZGF0ZWQgdWFydCBpbml0IGNhbGwKLSAqICAgICAxMC1KYW4tMjAwNSBCSkQgIFJlbW92ZWQgaW5jbHVkZSBvZiBzM2MyNDEwLmgKLSAqICAgICAxNC1KYW4tMjAwNSBCSkQgIEFkZGVkIGNsb2NrIGluaXQKLSAqICAgICAxNS1KYW4tMjAwNSBCSkQgIEFkZCBzZXJpYWwgcG9ydCBkZXZpY2UgZGVmaW5pdGlvbgotICogICAgIDIwLUphbi0yMDA1IEJKRCAgVXNlIFVQRl9JT1JFTUFQIGZvciBwb3J0cwotICogICAgIDEwLUZlYi0yMDA1IEJKRCAgQWRkZWQgcG93ZXItb2ZmIGNhcGFiaWxpdHkKLSAqICAgICAxMC1NYXItMjAwNSBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCi0gKiAgICAgMTQtTWFyLTIwMDYgQkpEICB2b2lkIF9faW9tZW0gZml4ZXMKLSAqICAgICAyMi1KdW4tMjAwNiBCSkQgIEFkZGVkIERNOTAwMCBwbGF0Zm9ybSBpbmZvcm1hdGlvbgotICogICAgIDIwLVNlcC0yMDA1IEJKRCAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MDAtZ3Bpby5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MDAtZ3Bpby5jCmluZGV4IDUxMjdmMzkuLmYyYTc4MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDAwLWdwaW8uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQwMC1ncGlvLmMKQEAgLTE3LDEwICsxNyw3IEBACiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKiBDaGFuZ2Vsb2cKLSAqCTE1LUphbi0yMDA2ICBMQ1ZSICBTcGxpdHRlZCBmcm9tIGdwaW8uYywgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBTM0MyNDAwCi0gKi8KKyovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuaAppbmRleCA3M2YxYTI0Ny4uZmJlZDA4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5oCkBAIC05LDE0ICs5LDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgIDE4LUF1Zy0yMDA0IEJKRCAgQ3JlYXRlZCBpbml0aWFsIHZlcnNpb24KLSAqICAgICAyMC1BdWctMjAwNCBCSkQgIEFkZGVkIHMzYzI0MTBfYm9hcmQgc3RydWN0Ci0gKiAgICAgMDQtU2VwLTIwMDQgQkpEICBBZGRlZCBzM2MyNDEwX2luaXRfdWFydHMoKSBjYWxsCi0gKiAgICAgMTctT2N0LTIwMDQgQkpEICBNb3ZlZCBib2FyZCBvdXQgdG8gY3B1Ci0gKiAgICAgMDQtSmFuLTIwMDUgQkpEICBDaGFuZ2VkIHVhcnQgaW5pdAotICogICAgIDEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCB0aW1lciB0byBjcHUuaCwgbW92ZWQgMjQxMCBzcGVjaWZpYyBiaXRzIGhlcmUKLSAqICAgICAxNC1KYW4tMjAwNSBCSkQgIEFkZGVkIHMzYzI0MTBfaW5pdF9jbG9ja3MgY2FsbAogKi8KIAogI2lmZGVmIENPTkZJR19DUFVfUzNDMjQxMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODBlYzkzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItaXJxLmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMi9zM2MyNDEyLWlycS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlycS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAiaXJxLmgiCisKKy8qIHRoZSBzM2MyNDEyIGNoYW5nZXMgdGhlIGJlaGF2aW91ciBvZiBJUlFfRUlOVDAgdGhyb3VnaCBJUlFfRUlOVDMgYnkKKyAqIGhhdmluZyB0aGVtIHR1cm4gdXAgaW4gYm90aCB0aGUgSU5UKiBhbmQgdGhlIEVJTlQqIHJlZ2lzdGVycy4gV2hpbHN0CisgKiBib3RoIHNob3cgdGhlIHN0YXR1cywgdGhleSBib3RoIG5vdyBuZWVkIHRvIGJlIGFja2VkIHdoZW4gdGhlIElSUXMKKyAqIGdvIG9mZi4KKyovCisKK3N0YXRpYyB2b2lkCitzM2MyNDEyX2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIGJpdHZhbCA9IDFVTCA8PCAoaXJxbm8gLSBJUlFfRUlOVDApOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7CisJX19yYXdfd3JpdGVsKG1hc2sgfCBiaXR2YWwsIFMzQzI0MTBfSU5UTVNLKTsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEyX0VJTlRNQVNLKTsKKwlfX3Jhd193cml0ZWwobWFzayB8IGJpdHZhbCwgUzNDMjQxMl9FSU5UTUFTSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorczNjMjQxMl9pcnFfYWNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIGJpdHZhbCA9IDFVTCA8PCAoaXJxbm8gLSBJUlFfRUlOVDApOworCisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMl9FSU5UUEVORCk7CisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9TUkNQTkQpOworCV9fcmF3X3dyaXRlbChiaXR2YWwsIFMzQzI0MTBfSU5UUE5EKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzM2MyNDEyX2lycV9tYXNrYWNrKHVuc2lnbmVkIGludCBpcnFubykKK3sKKwl1bnNpZ25lZCBsb25nIGJpdHZhbCA9IDFVTCA8PCAoaXJxbm8gLSBJUlFfRUlOVDApOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7CisJX19yYXdfd3JpdGVsKG1hc2t8Yml0dmFsLCBTM0MyNDEwX0lOVE1TSyk7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMl9FSU5UTUFTSyk7CisJX19yYXdfd3JpdGVsKG1hc2sgfCBiaXR2YWwsIFMzQzI0MTJfRUlOVE1BU0spOworCisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMl9FSU5UUEVORCk7CisJX19yYXdfd3JpdGVsKGJpdHZhbCwgUzNDMjQxMF9TUkNQTkQpOworCV9fcmF3X3dyaXRlbChiaXR2YWwsIFMzQzI0MTBfSU5UUE5EKTsKK30KKworc3RhdGljIHZvaWQKK3MzYzI0MTJfaXJxX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxbm8pCit7CisJdW5zaWduZWQgbG9uZyBiaXR2YWwgPSAxVUwgPDwgKGlycW5vIC0gSVJRX0VJTlQwKTsKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDMjQxMl9FSU5UTUFTSyk7CisJX19yYXdfd3JpdGVsKG1hc2sgJiB+Yml0dmFsLCBTM0MyNDEyX0VJTlRNQVNLKTsKKworCW1hc2sgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0lOVE1TSyk7CisJX19yYXdfd3JpdGVsKG1hc2sgJiB+Yml0dmFsLCBTM0MyNDEwX0lOVE1TSyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2MyNDEyX2lycV9laW50MHQ0ID0geworCS5hY2sJICAgPSBzM2MyNDEyX2lycV9hY2ssCisJLm1hc2sJICAgPSBzM2MyNDEyX2lycV9tYXNrLAorCS51bm1hc2sJICAgPSBzM2MyNDEyX2lycV91bm1hc2ssCisJLnNldF93YWtlICA9IHMzY19pcnFfd2FrZSwKKwkuc2V0X3R5cGUgID0gczNjX2lycWV4dF90eXBlLAorfTsKKworc3RhdGljIGludCBzM2MyNDEyX2lycV9hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwl1bnNpZ25lZCBpbnQgaXJxbm87CisKKwlmb3IgKGlycW5vID0gSVJRX0VJTlQwOyBpcnFubyA8PSBJUlFfRUlOVDM7IGlycW5vKyspIHsKKwkJc2V0X2lycV9jaGlwKGlycW5vLCAmczNjMjQxMl9pcnFfZWludDB0NCk7CisJCXNldF9pcnFfaGFuZGxlcihpcnFubywgZG9fZWRnZV9JUlEpOworCQlzZXRfaXJxX2ZsYWdzKGlycW5vLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTJfaXJxX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0MTJfaXJxX2FkZCwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMl9pcnFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEyX3N5c2NsYXNzLCAmczNjMjQxMl9pcnFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEyX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi5jCmluZGV4IGUyNGZmZDUuLjJkMTYzZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuYwpAQCAtMzUsMTEgKzM1LDE1IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlIDxhc20vYXJjaC9pZGxlLmg+CisKICNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXBvd2VyLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvai5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZHNjLmg+CkBAIC03NSw2ICs3OSwyNyBAQAogCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzI0MTItbmFuZCI7CiB9CiAKKy8qIHMzYzI0MTJfaWRsZQorICoKKyAqIHVzZSB0aGUgc3RhbmRhcmQgaWRsZSBjYWxsIGJ5IGVuc3VyaW5nIHRoZSBpZGxlIG1vZGUKKyAqIGluIHBvd2VyIGNvbmZpZywgdGhlbiBpc3N1aW5nIHRoZSBpZGxlIGNvLXByb2Nlc3NvcgorICogaW5zdHJ1Y3Rpb24KKyovCisKK3N0YXRpYyB2b2lkIHMzYzI0MTJfaWRsZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJLyogZW5zdXJlIG91ciBpZGxlIG1vZGUgaXMgdG8gZ28gdG8gaWRsZSAqLworCisJdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMl9QV1JDRkcpOworCXRtcCAmPSB+UzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9NQVNLOworCXRtcCB8PSBTM0MyNDEyX1BXUkNGR19TVEFOREJZV0ZJX0lETEU7CisJX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMl9QV1JDRkcpOworCisJY3B1X2RvX2lkbGUoKTsKK30KKwogLyogczNjMjQxMl9tYXBfaW8KICAqCiAgKiByZWdpc3RlciB0aGUgc3RhbmRhcmQgY3B1IElPIGFyZWFzLCBhbmQgYW55IHBhc3NlZCBpbiBmcm9tIHRoZQpAQCAtODcsNiArMTEyLDEwIEBACiAKIAlzM2MyNHh4X3ZhX2dwaW8yID0gUzNDMjRYWF9WQV9HUElPICsgMHgxMDsKIAorCS8qIHNldCBvdXIgaWRsZSBmdW5jdGlvbiAqLworCisJczNjMjR4eF9pZGxlID0gczNjMjQxMl9pZGxlOworCiAJLyogcmVnaXN0ZXIgb3VyIGlvLXRhYmxlcyAqLwogCiAJaW90YWJsZV9pbml0KHMzYzI0MTJfaW9kZXNjLCBBUlJBWV9TSVpFKHMzYzI0MTJfaW9kZXNjKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCmluZGV4IGFjZmUzODcuLjE2NjdiYTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCkBAIC0xNyw5ICsxNyw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICoKLSAqIENoYW5nZWxvZzoKLSAqCTI1LUp1bC0yMDA1IEJKRAkJU3BsaXQgZnJvbSBpcnEuYwotICoKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCmluZGV4IDJhYWRjYTEuLjQ0YzVhZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCkBAIC0xNyw5ICsxNyw2IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQogICoKLSAqIENoYW5nZWxvZzoKLSAqCTI1LUp1bC0yMDA1IEJKRAkJU3BsaXQgZnJvbSBpcnEuYwotICoKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0xMjIsMjEgKzExOSwyNCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0eF9pcnFfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfaXJxX2RyaXZlciA9IHsKIAkuYWRkCT0gczNjMjQ0eF9pcnFfYWRkLAogfTsKIAogc3RhdGljIGludCBzM2MyNDQwX2lycV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsICZzM2MyNDR4X2lycV9kcml2ZXIpOworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLCAmczNjMjQ0MF9pcnFfZHJpdmVyKTsKIH0KIAogYXJjaF9pbml0Y2FsbChzM2MyNDQwX2lycV9pbml0KTsKIAorc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfaXJxX2RyaXZlciA9IHsKKwkuYWRkCT0gczNjMjQ0eF9pcnFfYWRkLAorfTsKIAogc3RhdGljIGludCBzM2MyNDQyX2lycV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDR4X2lycV9kcml2ZXIpOworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLCAmczNjMjQ0Ml9pcnFfZHJpdmVyKTsKIH0KIAogYXJjaF9pbml0Y2FsbChzM2MyNDQyX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKaW5kZXggMjg5MWI4Yy4uYjU1YjkwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaXJxLmMKQEAgLTk1LDcgKzk1LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFjaGlwIHNhMTEwMF9sb3dfZ3Bpb19jaGlwID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzYTExMDBfbG93X2dwaW9fY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTy1sIiwKIAkuYWNrCQk9IHNhMTEwMF9sb3dfZ3Bpb19hY2ssCiAJLm1hc2sJCT0gc2ExMTAwX2xvd19ncGlvX21hc2ssCiAJLnVubWFzawkJPSBzYTExMDBfbG93X2dwaW9fdW5tYXNrLApAQCAtMTc4LDcgKzE3OSw4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzYTExMDBfaGlnaF9ncGlvX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhMTEwMF9oaWdoX2dwaW9fY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTy1oIiwKIAkuYWNrCQk9IHNhMTEwMF9oaWdoX2dwaW9fYWNrLAogCS5tYXNrCQk9IHNhMTEwMF9oaWdoX2dwaW9fbWFzaywKIAkudW5tYXNrCQk9IHNhMTEwMF9oaWdoX2dwaW9fdW5tYXNrLApAQCAtMjE1LDcgKzIxNyw4IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzYTExMDBfbm9ybWFsX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNhMTEwMF9ub3JtYWxfY2hpcCA9IHsKKwkubmFtZQkJPSAiU0MiLAogCS5hY2sJCT0gc2ExMTAwX21hc2tfaXJxLAogCS5tYXNrCQk9IHNhMTEwMF9tYXNrX2lycSwKIAkudW5tYXNrCQk9IHNhMTEwMF91bm1hc2tfaXJxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvc3NwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zc3AuYwppbmRleCAxNjA0ZGFkLi41ZWJhNWZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9zc3AuYwpAQCAtMjMsNiArMjMsOCBAQAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zc3AuaD4KIAorI2RlZmluZSBUSU1FT1VUIDEwMDAwMAorCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3NwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGludCBzdGF0dXMgPSBTZXI0U1NTUjsKQEAgLTQ3LDE4ICs0OSwyNyBAQAogICogVGhlIGNhbGxlciBpcyBleHBlY3RlZCB0byBwZXJmb3JtIHRoZSBuZWNlc3NhcnkgbG9ja2luZy4KICAqCiAgKiBSZXR1cm5zOgotICogICAlLUVUSU1FRE9VVAl0aW1lb3V0IG9jY3VycmVkIChmb3IgZnV0dXJlKQorICogICAlLUVUSU1FRE9VVAl0aW1lb3V0IG9jY3VycmVkCiAgKiAgIDAJCQlzdWNjZXNzCiAgKi8KIGludCBzc3Bfd3JpdGVfd29yZCh1MTYgZGF0YSkKIHsKLQl3aGlsZSAoIShTZXI0U1NTUiAmIFNTU1JfVE5GKSkKKwlpbnQgdGltZW91dCA9IFRJTUVPVVQ7CisKKwl3aGlsZSAoIShTZXI0U1NTUiAmIFNTU1JfVE5GKSkgeworCSAgICAgICAgaWYgKCEtLXRpbWVvdXQpCisJICAgICAgICAJcmV0dXJuIC1FVElNRURPVVQ7CiAJCWNwdV9yZWxheCgpOworCX0KIAogCVNlcjRTU0RSID0gZGF0YTsKIAotCXdoaWxlICghKFNlcjRTU1NSICYgU1NTUl9CU1kpKQorCXRpbWVvdXQgPSBUSU1FT1VUOworCXdoaWxlICghKFNlcjRTU1NSICYgU1NTUl9CU1kpKSB7CisJICAgICAgICBpZiAoIS0tdGltZW91dCkKKwkgICAgICAgIAlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJY3B1X3JlbGF4KCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC03NSwxNSArODYsMjIgQEAKICAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcuCiAgKgogICogUmV0dXJuczoKLSAqICAgJS1FVElNRURPVVQJdGltZW91dCBvY2N1cnJlZCAoZm9yIGZ1dHVyZSkKKyAqICAgJS1FVElNRURPVVQJdGltZW91dCBvY2N1cnJlZAogICogICAxNi1iaXQgZGF0YQlzdWNjZXNzCiAgKi8KLWludCBzc3BfcmVhZF93b3JkKHZvaWQpCitpbnQgc3NwX3JlYWRfd29yZCh1MTYgKmRhdGEpCiB7Ci0Jd2hpbGUgKCEoU2VyNFNTU1IgJiBTU1NSX1JORSkpCi0JCWNwdV9yZWxheCgpOworCWludCB0aW1lb3V0ID0gVElNRU9VVDsKIAotCXJldHVybiBTZXI0U1NEUjsKKwl3aGlsZSAoIShTZXI0U1NTUiAmIFNTU1JfUk5FKSkgeworCSAgICAgICAgaWYgKCEtLXRpbWVvdXQpCisJICAgICAgICAJcmV0dXJuIC1FVElNRURPVVQ7CisJCWNwdV9yZWxheCgpOworCX0KKworCSpkYXRhID0gKHUxNilTZXI0U1NEUjsKKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTkzLDE0ICsxMTEsMjYgQEAKICAqIGlzIGVtcHR5LgogICoKICAqIFRoZSBjYWxsZXIgaXMgZXhwZWN0ZWQgdG8gcGVyZm9ybSB0aGUgbmVjZXNzYXJ5IGxvY2tpbmcuCisgKgorICogUmV0dXJuczoKKyAqICAgJS1FVElNRURPVVQJdGltZW91dCBvY2N1cnJlZAorICogICAwCQkJc3VjY2VzcwogICovCi12b2lkIHNzcF9mbHVzaCh2b2lkKQoraW50IHNzcF9mbHVzaCh2b2lkKQogeworCWludCB0aW1lb3V0ID0gVElNRU9VVCAqIDI7CisKIAlkbyB7CiAJCXdoaWxlIChTZXI0U1NTUiAmIFNTU1JfUk5FKSB7CisJCSAgICAgICAgaWYgKCEtLXRpbWVvdXQpCisJCSAgICAgICAgCXJldHVybiAtRVRJTUVET1VUOwogCQkJKHZvaWQpIFNlcjRTU0RSOwogCQl9CisJICAgICAgICBpZiAoIS0tdGltZW91dCkKKwkgICAgICAgIAlyZXR1cm4gLUVUSU1FRE9VVDsKIAl9IHdoaWxlIChTZXI0U1NTUiAmIFNTU1JfQlNZKTsKKworCXJldHVybiAwOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXNoYXJrL2lycS5jCmluZGV4IDZjYjY3YmQuLmIyMjcwNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2hhcmsvaXJxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zaGFyay9pcnEuYwpAQCAtNjksNyArNjksOCBAQAogCiBzdGF0aWMgc3RydWN0IGlycWFjdGlvbiBjYXNjYWRlOwogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgZmJfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZmJfY2hpcCA9IHsKKwkubmFtZQk9ICJYVC1QSUMiLAogCS5hY2sJPSBzaGFya19hY2tfODI1OUFfaXJxLAogCS5tYXNrCT0gc2hhcmtfZGlzYWJsZV84MjU5QV9pcnEsCiAJLnVubWFzayA9IHNoYXJrX2VuYWJsZV84MjU5QV9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jb3JlLmMKaW5kZXggODY0Mzc3MS4uZjJiYmVmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvY29yZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2NvcmUuYwpAQCAtNjksNyArNjksOCBAQAogCXdyaXRlbCgxIDw8IGlycSwgVkFfU0lDX0JBU0UgKyBTSUNfSVJRX0VOQUJMRV9TRVQpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgc2ljX2NoaXAgPSB7CitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHNpY19jaGlwID0geworCS5uYW1lCT0gIlNJQyIsCiAJLmFjawk9IHNpY19tYXNrX2lycSwKIAkubWFzawk9IHNpY19tYXNrX2lycSwKIAkudW5tYXNrCT0gc2ljX3VubWFza19pcnEsCkBAIC0yODQsNyArMjg1LDcgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2ZXJzYXRpbGVfZmxhc2hfcmVzb3VyY2UgPSB7CiAJLnN0YXJ0CQkJPSBWRVJTQVRJTEVfRkxBU0hfQkFTRSwKLQkuZW5kCQkJPSBWRVJTQVRJTEVfRkxBU0hfQkFTRSArIFZFUlNBVElMRV9GTEFTSF9TSVpFLAorCS5lbmQJCQk9IFZFUlNBVElMRV9GTEFTSF9CQVNFICsgVkVSU0FUSUxFX0ZMQVNIX1NJWkUgLSAxLAogCS5mbGFncwkJCT0gSU9SRVNPVVJDRV9NRU0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9LY29uZmlnIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwppbmRleCA1ZjgwZjE4Li5iNGYyMjBkZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vS2NvbmZpZworKysgYi9hcmNoL2FybS9tbS9LY29uZmlnCkBAIC00Niw3ICs0Niw3IEBACiBjb25maWcgQ1BVX0FSTTcyMFQKIAlib29sICJTdXBwb3J0IEFSTTcyMFQgcHJvY2Vzc29yIiBpZiAhQVJDSF9DTFBTNzExWCAmJiAhQVJDSF9MNzIwMCAmJiAhQVJDSF9DREI4OTcxMiAmJiBBUkNIX0lOVEVHUkFUT1IKIAlkZWZhdWx0IHkgaWYgQVJDSF9DTFBTNzExWCB8fCBBUkNIX0w3MjAwIHx8IEFSQ0hfQ0RCODk3MTIgfHwgQVJDSF9INzIwWAotCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKQEAgLTY0LDcgKzY0LDcgQEAKIAlib29sICJTdXBwb3J0IEFSTTkyMFQgcHJvY2Vzc29yIgogCWRlcGVuZHMgb24gQVJDSF9FUDkzWFggfHwgQVJDSF9JTlRFR1JBVE9SIHx8IENQVV9TM0MyNDEwIHx8IENQVV9TM0MyNDQwIHx8IENQVV9TM0MyNDQyIHx8IEFSQ0hfSU1YIHx8IEFSQ0hfQUFFQzIwMDAgfHwgQVJDSF9BVDkxUk05MjAwCiAJZGVmYXVsdCB5IGlmIENQVV9TM0MyNDEwIHx8IENQVV9TM0MyNDQwIHx8IENQVV9TM0MyNDQyIHx8IEFSQ0hfQVQ5MVJNOTIwMAotCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVApAQCAtODUsNyArODUsNyBAQAogCWJvb2wgIlN1cHBvcnQgQVJNOTIyVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgogCWRlcGVuZHMgb24gQVJDSF9MSDdBNDBYIHx8IEFSQ0hfSU5URUdSQVRPUgogCWRlZmF1bHQgeSBpZiBBUkNIX0xIN0E0MFgKLQlzZWxlY3QgQ1BVXzMydjQKKwlzZWxlY3QgQ1BVXzMydjRUCiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKQEAgLTEwNCw3ICsxMDQsNyBAQAogIAlib29sICJTdXBwb3J0IEFSTTkyNVQgcHJvY2Vzc29yIiBpZiBBUkNIX09NQVAxCiAgCWRlcGVuZHMgb24gQVJDSF9PTUFQMTVYWAogIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMTVYWAotCXNlbGVjdCBDUFVfMzJ2NAorCXNlbGVjdCBDUFVfMzJ2NFQKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVApAQCAtMjg1LDYgKzI4NSwxMSBAQAogCXNlbGVjdCBUTFNfUkVHX0VNVUwgaWYgU01QIHx8ICFNTVUKIAlzZWxlY3QgTkVFRFNfU1lTQ0FMTF9GT1JfQ01QWENIRyBpZiBTTVAKIAorY29uZmlnIENQVV8zMnY0VAorCWJvb2wKKwlzZWxlY3QgVExTX1JFR19FTVVMIGlmIFNNUCB8fCAhTU1VCisJc2VsZWN0IE5FRURTX1NZU0NBTExfRk9SX0NNUFhDSEcgaWYgU01QCisKIGNvbmZpZyBDUFVfMzJ2NQogCWJvb2wKIAlzZWxlY3QgVExTX1JFR19FTVVMIGlmIFNNUCB8fCAhTU1VCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9mbHVzaC5jIGIvYXJjaC9hcm0vbW0vZmx1c2guYwppbmRleCBiMTAzZTU2Li5kNDM4Y2U0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9mbHVzaC5jCisrKyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKQEAgLTg3LDYgKzg3LDMyIEBACiAJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkKIAkJZmx1c2hfcGZuX2FsaWFzKHBmbiwgdXNlcl9hZGRyKTsKIH0KKwordm9pZCBmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSB1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwKKwkJCSB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHdyaXRlKQoreworCWlmIChjYWNoZV9pc192aXZ0KCkpIHsKKwkJaWYgKGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIHZtYS0+dm1fbW0tPmNwdV92bV9tYXNrKSkgeworCQkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FkZHI7CisJCQlfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZShhZGRyLCBhZGRyICsgbGVuKTsKKwkJfQorCQlyZXR1cm47CisJfQorCisJaWYgKGNhY2hlX2lzX3ZpcHRfYWxpYXNpbmcoKSkgeworCQlmbHVzaF9wZm5fYWxpYXMocGFnZV90b19wZm4ocGFnZSksIHVhZGRyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFZJUFQgbm9uLWFsaWFzaW5nIGNhY2hlICovCisJaWYgKGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIHZtYS0+dm1fbW0tPmNwdV92bV9tYXNrKSAmJgorCSAgICB2bWEtPnZtX2ZsYWdzIHwgVk1fRVhFQykgeworCQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylrYWRkcjsKKwkJLyogb25seSBmbHVzaGluZyB0aGUga2VybmVsIG1hcHBpbmcgb24gbm9uLWFsaWFzaW5nIFZJUFQgKi8KKwkJX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UoYWRkciwgYWRkciArIGxlbik7CisJfQorfQogI2Vsc2UKICNkZWZpbmUgZmx1c2hfcGZuX2FsaWFzKHBmbix2YWRkcikJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9pb3JlbWFwLmMgYi9hcmNoL2FybS9tbS9pb3JlbWFwLmMKaW5kZXggZGJhN2RkZC4uODhhOTk5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvYXJtL21tL2lvcmVtYXAuYwpAQCAtMzYzLDcgKzM2Myw5IEBACiAKIHZvaWQgX19pb3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKKyNpZm5kZWYgQ09ORklHX1NNUAogCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wOworI2VuZGlmCiAJdW5zaWduZWQgaW50IHNlY3Rpb25fbWFwcGluZyA9IDA7CiAKIAlhZGRyID0gKHZvaWQgX19pb21lbSAqKShQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZylhZGRyKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMgYi9hcmNoL2FybS9tbS9wcm9jLWFybTkyNi5TCmluZGV4IDFlODlkNDAuLjQ0YTdhNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOTI2LlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05MjYuUwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJYglfX2FybTkyNl9zZXR1cAogCS5sb25nCWNwdV9hcmNoX25hbWUKIAkubG9uZwljcHVfZWxmX25hbWUKLQkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUHxIV0NBUF9KQVZBCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX1ZGUHxIV0NBUF9FRFNQfEhXQ0FQX0pBVkEKIAkubG9uZwljcHVfYXJtOTI2X25hbWUKIAkubG9uZwlhcm05MjZfcHJvY2Vzc29yX2Z1bmN0aW9ucwogCS5sb25nCXY0d2JpX3RsYl9mbnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2Mtc3ltcy5jIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKaW5kZXggNmM1ZjBmZS4uYWIxNDM1NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1zeW1zLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNpZm5kZWYgTVVMVElfQ1BVCiBFWFBPUlRfU1lNQk9MKGNwdV9kY2FjaGVfY2xlYW5fYXJlYSk7CkBAIC0zMCw2ICszMSwxMyBAQAogRVhQT1JUX1NZTUJPTChjcHVfY2FjaGUpOwogI2VuZGlmCiAKKyNpZm5kZWYgTVVMVElfVVNFUgorRVhQT1JUX1NZTUJPTChfX2NwdV9jbGVhcl91c2VyX3BhZ2UpOworRVhQT1JUX1NZTUJPTChfX2NwdV9jb3B5X3VzZXJfcGFnZSk7CisjZWxzZQorRVhQT1JUX1NZTUJPTChjcHVfdXNlcik7CisjZW5kaWYKKwogLyoKICAqIE5vIG1vZHVsZSBzaG91bGQgbmVlZCB0byB0b3VjaCB0aGUgVExCIChhbmQgY3VycmVudGx5CiAgKiBubyBtb2R1bGVzIGRvLiAgV2UgZXhwb3J0IHRoaXMgZm9yICJsb2Fka2VybmVsIiBzdXBwb3J0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwppbmRleCA1MjE1Mzg2Li4zY2EwYzkyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCisrKyBiL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKQEAgLTUzNiw2ICs1MzYsMTEgQEAKIAkuYXNjaXoJIlhTY2FsZS04MDIwMCIKIAkuc2l6ZQljcHVfODAyMDBfbmFtZSwgLiAtIGNwdV84MDIwMF9uYW1lCiAKKwkudHlwZQljcHVfODAyMTlfbmFtZSwgI29iamVjdAorY3B1XzgwMjE5X25hbWU6CisJLmFzY2l6CSJYU2NhbGUtODAyMTkiCisJLnNpemUJY3B1XzgwMjE5X25hbWUsIC4gLSBjcHVfODAyMTlfbmFtZQorCiAJLnR5cGUJY3B1XzgwMzJ4X25hbWUsICNvYmplY3QKIGNwdV84MDMyeF9uYW1lOgogCS5hc2NpegkiWFNjYWxlLUlPUDgwMzJ4IEZhbWlseSIKQEAgLTYxMywxMCArNjE4LDMzIEBACiAJLmxvbmcJeHNjYWxlX2NhY2hlX2ZucwogCS5zaXplCV9fODAyMDBfcHJvY19pbmZvLCAuIC0gX184MDIwMF9wcm9jX2luZm8KIAorCS50eXBlCV9fODAyMTlfcHJvY19pbmZvLCNvYmplY3QKK19fODAyMTlfcHJvY19pbmZvOgorCS5sb25nCTB4NjkwNTJlMjAKKwkubG9uZwkweGZmZmZmZmUwCisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9CVUZGRVJBQkxFIHwgXAorCQlQTURfU0VDVF9DQUNIRUFCTEUgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJLmxvbmcgICBQTURfVFlQRV9TRUNUIHwgXAorCQlQTURfU0VDVF9BUF9XUklURSB8IFwKKwkJUE1EX1NFQ1RfQVBfUkVBRAorCWIJX194c2NhbGVfc2V0dXAKKwkubG9uZwljcHVfYXJjaF9uYW1lCisJLmxvbmcJY3B1X2VsZl9uYW1lCisJLmxvbmcJSFdDQVBfU1dQfEhXQ0FQX0hBTEZ8SFdDQVBfVEhVTUJ8SFdDQVBfRkFTVF9NVUxUfEhXQ0FQX0VEU1AKKwkubG9uZwljcHVfODAyMTlfbmFtZQorCS5sb25nCXhzY2FsZV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJdjR3YmlfdGxiX2ZucworCS5sb25nCXhzY2FsZV9tY191c2VyX2ZucworCS5sb25nCXhzY2FsZV9jYWNoZV9mbnMKKwkuc2l6ZQlfXzgwMjE5X3Byb2NfaW5mbywgLiAtIF9fODAyMTlfcHJvY19pbmZvCisKIAkudHlwZQlfXzgwMzJ4X3Byb2NfaW5mbywjb2JqZWN0CiBfXzgwMzJ4X3Byb2NfaW5mbzoKIAkubG9uZwkweDY5MDUyNDIwCi0JLmxvbmcJMHhmZmZmZjVlMCAgICAgIEAgbWFzayBzaG91bGQgYWNjb21vZGF0ZSBJT1A4MDIxOSBhbHNvCisJLmxvbmcJMHhmZmZmZjdlMAogCS5sb25nICAgUE1EX1RZUEVfU0VDVCB8IFwKIAkJUE1EX1NFQ1RfQlVGRkVSQUJMRSB8IFwKIAkJUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgXApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggZmVjNzk3MC4uY2Q3Zjk3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC05NDQsNyArOTQ0LDggQEAKIAlfc2V0X2dwaW9faXJxZW5hYmxlKGJhbmssIGdwaW8sIDEpOwogfQogCi1zdGF0aWMgc3RydWN0IGlycWNoaXAgZ3Bpb19pcnFfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZ3Bpb19pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiR1BJTyIsCiAJLmFjawkJPSBncGlvX2Fja19pcnEsCiAJLm1hc2sJCT0gZ3Bpb19tYXNrX2lycSwKIAkudW5tYXNrCQk9IGdwaW9fdW5tYXNrX2lycSwKQEAgLTk1MiwxMCArOTUzLDExIEBACiAJLnNldF93YWtlCT0gZ3Bpb193YWtlX2VuYWJsZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBtcHVpb19pcnFfY2hpcCA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXB1aW9faXJxX2NoaXAgPSB7CisJLm5hbWUJPSAiTVBVSU8iLAogCS5hY2sJPSBtcHVpb19hY2tfaXJxLAogCS5tYXNrCT0gbXB1aW9fbWFza19pcnEsCi0JLnVubWFzayA9IG1wdWlvX3VubWFza19pcnEKKwkudW5tYXNrCT0gbXB1aW9fdW5tYXNrX2lycQogfTsKIAogc3RhdGljIGludCBpbml0aWFsaXplZDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnAuaCBiL2FyY2gvYXJtL3ZmcC92ZnAuaAppbmRleCA0Yjk3OTUwLi45NmZkZjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwLmgKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcC5oCkBAIC0xNTYsNyArMTU2LDcgQEAKIH07CiAKIGV4dGVybiBzMzIgdmZwX2dldF9mbG9hdCh1bnNpZ25lZCBpbnQgcmVnKTsKLWV4dGVybiB2b2lkIHZmcF9wdXRfZmxvYXQodW5zaWduZWQgaW50IHJlZywgczMyIHZhbCk7CitleHRlcm4gdm9pZCB2ZnBfcHV0X2Zsb2F0KHMzMiB2YWwsIHVuc2lnbmVkIGludCByZWcpOwogCiAvKgogICogVkZQX1NJTkdMRV9NQU5USVNTQV9CSVRTIC0gbnVtYmVyIG9mIGJpdHMgaW4gdGhlIG1hbnRpc3NhCkBAIC0yNjcsNyArMjY3LDcgQEAKICAqLwogI2RlZmluZSBWRlBfUkVHX1pFUk8JMTYKIGV4dGVybiB1NjQgdmZwX2dldF9kb3VibGUodW5zaWduZWQgaW50IHJlZyk7Ci1leHRlcm4gdm9pZCB2ZnBfcHV0X2RvdWJsZSh1bnNpZ25lZCBpbnQgcmVnLCB1NjQgdmFsKTsKK2V4dGVybiB2b2lkIHZmcF9wdXRfZG91YmxlKHU2NCB2YWwsIHVuc2lnbmVkIGludCByZWcpOwogCiAjZGVmaW5lIFZGUF9ET1VCTEVfTUFOVElTU0FfQklUUwkoNTIpCiAjZGVmaW5lIFZGUF9ET1VCTEVfRVhQT05FTlRfQklUUwkoMTEpCkBAIC0zNDEsMTUgKzM0MSwxNyBAQAogCiB1MzIgdmZwX2RvdWJsZV9ub3JtYWxpc2Vyb3VuZChpbnQgZGQsIHN0cnVjdCB2ZnBfZG91YmxlICp2ZCwgdTMyIGZwc2NyLCB1MzIgZXhjZXB0aW9ucywgY29uc3QgY2hhciAqZnVuYyk7CiAKLS8qCi0gKiBTeXN0ZW0gcmVnaXN0ZXJzCi0gKi8KLWV4dGVybiB1MzIgdmZwX2dldF9zeXModW5zaWduZWQgaW50IHJlZyk7Ci1leHRlcm4gdm9pZCB2ZnBfcHV0X3N5cyh1bnNpZ25lZCBpbnQgcmVnLCB1MzIgdmFsKTsKLQogdTMyIHZmcF9lc3RpbWF0ZV9zcXJ0X3NpZ25pZmljYW5kKHUzMiBleHBvbmVudCwgdTMyIHNpZ25pZmljYW5kKTsKIAogLyoKICAqIEEgc3BlY2lhbCBmbGFnIHRvIHRlbGwgdGhlIG5vcm1hbGlzYXRpb24gY29kZSBub3QgdG8gbm9ybWFsaXNlLgogICovCiAjZGVmaW5lIFZGUF9OQU5fRkxBRwkweDEwMAorCisvKgorICogQSBiaXQgcGF0dGVybiB1c2VkIHRvIGluZGljYXRlIHRoZSBpbml0aWFsICh1bnNldCkgdmFsdWUgb2YgdGhlCisgKiBleGNlcHRpb24gbWFzaywgaW4gY2FzZSBub3RoaW5nIGhhbmRsZXMgYW4gaW5zdHJ1Y3Rpb24uICBUaGlzCisgKiBkb2Vzbid0IGluY2x1ZGUgdGhlIE5BTiBmbGFnLCB3aGljaCBnZXQgbWFza2VkIG91dCBiZWZvcmUKKyAqIHdlIGNoZWNrIGZvciBhbiBlcnJvci4KKyAqLworI2RlZmluZSBWRlBfRVhDRVBUSU9OX0VSUk9SCSgodTMyKS0xICYgflZGUF9OQU5fRkxBRykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwppbmRleCAwMDkwMzhjLi5hZGQ0OGUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJczY0IGQgPSB2ZnBfZG91YmxlX3BhY2sodmQpOwogCQlwcl9kZWJ1ZygiVkZQOiAlczogZChkJWQpPSUwMTZsbHggZXhjZXB0aW9ucz0lMDh4XG4iLCBmdW5jLAogCQkJIGRkLCBkLCBleGNlcHRpb25zKTsKLQkJdmZwX3B1dF9kb3VibGUoZGQsIGQpOworCQl2ZnBfcHV0X2RvdWJsZShkLCBkZCk7CiAJfQogCXJldHVybiBleGNlcHRpb25zOwogfQpAQCAtMjUwLDE5ICsyNTAsMTkgQEAKICAqLwogc3RhdGljIHUzMiB2ZnBfZG91YmxlX2ZhYnMoaW50IGRkLCBpbnQgdW51c2VkLCBpbnQgZG0sIHUzMiBmcHNjcikKIHsKLQl2ZnBfcHV0X2RvdWJsZShkZCwgdmZwX2RvdWJsZV9wYWNrZWRfYWJzKHZmcF9nZXRfZG91YmxlKGRtKSkpOworCXZmcF9wdXRfZG91YmxlKHZmcF9kb3VibGVfcGFja2VkX2Ficyh2ZnBfZ2V0X2RvdWJsZShkbSkpLCBkZCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgdmZwX2RvdWJsZV9mY3B5KGludCBkZCwgaW50IHVudXNlZCwgaW50IGRtLCB1MzIgZnBzY3IpCiB7Ci0JdmZwX3B1dF9kb3VibGUoZGQsIHZmcF9nZXRfZG91YmxlKGRtKSk7CisJdmZwX3B1dF9kb3VibGUodmZwX2dldF9kb3VibGUoZG0pLCBkZCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgdmZwX2RvdWJsZV9mbmVnKGludCBkZCwgaW50IHVudXNlZCwgaW50IGRtLCB1MzIgZnBzY3IpCiB7Ci0JdmZwX3B1dF9kb3VibGUoZGQsIHZmcF9kb3VibGVfcGFja2VkX25lZ2F0ZSh2ZnBfZ2V0X2RvdWJsZShkbSkpKTsKKwl2ZnBfcHV0X2RvdWJsZSh2ZnBfZG91YmxlX3BhY2tlZF9uZWdhdGUodmZwX2dldF9kb3VibGUoZG0pKSwgZGQpOwogCXJldHVybiAwOwogfQogCkBAIC0yODcsNyArMjg3LDcgQEAKIAkJCXZkcCA9ICZ2ZnBfZG91YmxlX2RlZmF1bHRfcW5hbjsKIAkJCXJldCA9IEZQU0NSX0lPQzsKIAkJfQotCQl2ZnBfcHV0X2RvdWJsZShkZCwgdmZwX2RvdWJsZV9wYWNrKHZkcCkpOworCQl2ZnBfcHV0X2RvdWJsZSh2ZnBfZG91YmxlX3BhY2sodmRwKSwgZGQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNDY1LDcgKzQ2NSw3IEBACiAJICovCiAJaWYgKHRtICYgKFZGUF9JTkZJTklUWXxWRlBfTkFOKSkgewogCQl2c2QuZXhwb25lbnQgPSAyNTU7Ci0JCWlmICh0bSAmIFZGUF9OQU4pCisJCWlmICh0bSA9PSBWRlBfUU5BTikKIAkJCXZzZC5zaWduaWZpY2FuZCB8PSBWRlBfU0lOR0xFX1NJR05JRklDQU5EX1FOQU47CiAJCWdvdG8gcGFja19uYW47CiAJfSBlbHNlIGlmICh0bSAmIFZGUF9aRVJPKQpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJcmV0dXJuIHZmcF9zaW5nbGVfbm9ybWFsaXNlcm91bmQoc2QsICZ2c2QsIGZwc2NyLCBleGNlcHRpb25zLCAiZmN2dHMiKTsKIAogIHBhY2tfbmFuOgotCXZmcF9wdXRfZmxvYXQoc2QsIHZmcF9zaW5nbGVfcGFjaygmdnNkKSk7CisJdmZwX3B1dF9mbG9hdCh2ZnBfc2luZ2xlX3BhY2soJnZzZCksIHNkKTsKIAlyZXR1cm4gZXhjZXB0aW9uczsKIH0KIApAQCAtNTczLDcgKzU3Myw3IEBACiAKIAlwcl9kZWJ1ZygiVkZQOiBmdG91aTogZChzJWQpPSUwOHggZXhjZXB0aW9ucz0lMDh4XG4iLCBzZCwgZCwgZXhjZXB0aW9ucyk7CiAKLQl2ZnBfcHV0X2Zsb2F0KHNkLCBkKTsKKwl2ZnBfcHV0X2Zsb2F0KGQsIHNkKTsKIAogCXJldHVybiBleGNlcHRpb25zOwogfQpAQCAtNjQ4LDcgKzY0OCw3IEBACiAKIAlwcl9kZWJ1ZygiVkZQOiBmdG9zaTogZChzJWQpPSUwOHggZXhjZXB0aW9ucz0lMDh4XG4iLCBzZCwgZCwgZXhjZXB0aW9ucyk7CiAKLQl2ZnBfcHV0X2Zsb2F0KHNkLCAoczMyKWQpOworCXZmcF9wdXRfZmxvYXQoKHMzMilkLCBzZCk7CiAKIAlyZXR1cm4gZXhjZXB0aW9uczsKIH0KQEAgLTEwODQsNyArMTA4NCw3IEBACiAgdmRuX25hbjoKIAlleGNlcHRpb25zID0gdmZwX3Byb3BhZ2F0ZV9uYW4oJnZkZCwgJnZkbiwgJnZkbSwgZnBzY3IpOwogIHBhY2s6Ci0JdmZwX3B1dF9kb3VibGUoZGQsIHZmcF9kb3VibGVfcGFjaygmdmRkKSk7CisJdmZwX3B1dF9kb3VibGUodmZwX2RvdWJsZV9wYWNrKCZ2ZGQpLCBkZCk7CiAJcmV0dXJuIGV4Y2VwdGlvbnM7CiAKICB2ZG1fbmFuOgpAQCAtMTEwNCw3ICsxMTA0LDcgQEAKIAlnb3RvIHBhY2s7CiAKICBpbnZhbGlkOgotCXZmcF9wdXRfZG91YmxlKGRkLCB2ZnBfZG91YmxlX3BhY2soJnZmcF9kb3VibGVfZGVmYXVsdF9xbmFuKSk7CisJdmZwX3B1dF9kb3VibGUodmZwX2RvdWJsZV9wYWNrKCZ2ZnBfZG91YmxlX2RlZmF1bHRfcW5hbiksIGRkKTsKIAlyZXR1cm4gRlBTQ1JfSU9DOwogfQogCkBAIC0xMTI3LDcgKzExMjcsNyBAQAogewogCXUzMiBvcCA9IGluc3QgJiBGT1BfTUFTSzsKIAl1MzIgZXhjZXB0aW9ucyA9IDA7Ci0JdW5zaWduZWQgaW50IGRkID0gdmZwX2dldF9kZChpbnN0KTsKKwl1bnNpZ25lZCBpbnQgZGVzdDsKIAl1bnNpZ25lZCBpbnQgZG4gPSB2ZnBfZ2V0X2RuKGluc3QpOwogCXVuc2lnbmVkIGludCBkbSA9IHZmcF9nZXRfZG0oaW5zdCk7CiAJdW5zaWduZWQgaW50IHZlY2l0ciwgdmVjbGVuLCB2ZWNzdHJpZGU7CkBAIC0xMTM3LDEwICsxMTM3LDIwIEBACiAJdmVjc3RyaWRlID0gKDEgKyAoKGZwc2NyICYgRlBTQ1JfU1RSSURFX01BU0spID09IEZQU0NSX1NUUklERV9NQVNLKSkgKiAyOwogCiAJLyoKKwkgKiBmY3Z0ZHMgdGFrZXMgYW4gc04gcmVnaXN0ZXIgbnVtYmVyIGFzIGRlc3RpbmF0aW9uLCBub3QgZE4uCisJICogSXQgYWxzbyBhbHdheXMgb3BlcmF0ZXMgb24gc2NhbGFycy4KKwkgKi8KKwlpZiAoKGluc3QgJiBGRVhUX01BU0spID09IEZFWFRfRkNWVCkgeworCQl2ZWNsZW4gPSAwOworCQlkZXN0ID0gdmZwX2dldF9zZChpbnN0KTsKKwl9IGVsc2UKKwkJZGVzdCA9IHZmcF9nZXRfZGQoaW5zdCk7CisKKwkvKgogCSAqIElmIGRlc3RpbmF0aW9uIGJhbmsgaXMgemVybywgdmVjdG9yIGxlbmd0aCBpcyBhbHdheXMgJzEnLgogCSAqIEFSTSBEREkwMTAwRiBDNS4xLjMsIEM1LjMuMi4KIAkgKi8KLQlpZiAoRlJFR19CQU5LKGRkKSA9PSAwKQorCWlmIChGUkVHX0JBTksoZGVzdCkgPT0gMCkKIAkJdmVjbGVuID0gMDsKIAogCXByX2RlYnVnKCJWRlA6IHZlY3N0cmlkZT0ldSB2ZWNsZW49JXVcbiIsIHZlY3N0cmlkZSwKQEAgLTExNTMsMTYgKzExNjMsMjAgQEAKIAlmb3IgKHZlY2l0ciA9IDA7IHZlY2l0ciA8PSB2ZWNsZW47IHZlY2l0ciArPSAxIDw8IEZQU0NSX0xFTkdUSF9CSVQpIHsKIAkJdTMyIGV4Y2VwdDsKIAotCQlpZiAob3AgPT0gRk9QX0VYVCkKKwkJaWYgKG9wID09IEZPUF9FWFQgJiYgKGluc3QgJiBGRVhUX01BU0spID09IEZFWFRfRkNWVCkKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChzJXUpID0gb3BbJXVdIChkJXUpXG4iLAorCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKKwkJCQkgZGVzdCwgZG4sIGRtKTsKKwkJZWxzZSBpZiAob3AgPT0gRk9QX0VYVCkKIAkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gb3BbJXVdIChkJXUpXG4iLAogCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGQsIGRuLCBkbSk7CisJCQkJIGRlc3QsIGRuLCBkbSk7CiAJCWVsc2UKIAkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gKGQldSkgb3BbJXVdIChkJXUpXG4iLAogCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGQsIGRuLCBGT1BfVE9fSURYKG9wKSwgZG0pOworCQkJCSBkZXN0LCBkbiwgRk9QX1RPX0lEWChvcCksIGRtKTsKIAotCQlleGNlcHQgPSBmb3AoZGQsIGRuLCBkbSwgZnBzY3IpOworCQlleGNlcHQgPSBmb3AoZGVzdCwgZG4sIGRtLCBmcHNjcik7CiAJCXByX2RlYnVnKCJWRlA6IGl0ciVkOiBleGNlcHRpb25zPSUwOHhcbiIsCiAJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIGV4Y2VwdCk7CiAKQEAgLTExODAsNyArMTE5NCw3IEBACiAJCSAqIHdlIGVuY291bnRlciBhbiBleGNlcHRpb24uICBXZSBjb250aW51ZS4KIAkJICovCiAKLQkJZGQgPSBGUkVHX0JBTksoZGQpICsgKChGUkVHX0lEWChkZCkgKyB2ZWNzdHJpZGUpICYgNik7CisJCWRlc3QgPSBGUkVHX0JBTksoZGVzdCkgKyAoKEZSRUdfSURYKGRlc3QpICsgdmVjc3RyaWRlKSAmIDYpOwogCQlkbiA9IEZSRUdfQkFOSyhkbikgKyAoKEZSRUdfSURYKGRuKSArIHZlY3N0cmlkZSkgJiA2KTsKIAkJaWYgKEZSRUdfQkFOSyhkbSkgIT0gMCkKIAkJCWRtID0gRlJFR19CQU5LKGRtKSArICgoRlJFR19JRFgoZG0pICsgdmVjc3RyaWRlKSAmIDYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcGh3LlMgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwppbmRleCBlYjY4M2NkLi5lNTFlNjY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwaHcuUworKysgYi9hcmNoL2FybS92ZnAvdmZwaHcuUwpAQCAtMTc4LDEyICsxNzgsMTIgQEAKIAogCS5nbG9ibAl2ZnBfcHV0X2Zsb2F0CiB2ZnBfcHV0X2Zsb2F0OgotCWFkZAlwYywgcGMsIHIwLCBsc2wgIzMKKwlhZGQJcGMsIHBjLCByMSwgbHNsICMzCiAJbW92CXIwLCByMAogCS5pcnAJZHIsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNQotCW1jcglwMTAsIDAsIHIxLCBjXGRyLCBjMCwgMAlAIGZtc3IJcjAsIHMwCisJbWNyCXAxMCwgMCwgcjAsIGNcZHIsIGMwLCAwCUAgZm1zcglyMCwgczAKIAltb3YJcGMsIGxyCi0JbWNyCXAxMCwgMCwgcjEsIGNcZHIsIGMwLCA0CUAgZm1zcglyMCwgczEKKwltY3IJcDEwLCAwLCByMCwgY1xkciwgYzAsIDQJQCBmbXNyCXIwLCBzMQogCW1vdglwYywgbHIKIAkuZW5kcgogCkBAIC0yMDMsOSArMjAzLDkgQEAKIAogCS5nbG9ibAl2ZnBfcHV0X2RvdWJsZQogdmZwX3B1dF9kb3VibGU6Ci0JYWRkCXBjLCBwYywgcjAsIGxzbCAjMworCWFkZAlwYywgcGMsIHIyLCBsc2wgIzMKIAltb3YJcjAsIHIwCiAJLmlycAlkciwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1Ci0JZm1kcnIJZFxkciwgcjEsIHIyCisJZm1kcnIJZFxkciwgcjAsIHIxCiAJbW92CXBjLCBscgogCS5lbmRyCmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggOWQyNjVkNS4uNDE3OGY2YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIAlwcl9kZWJ1ZygiVkZQOiByYWlzaW5nIGV4Y2VwdGlvbnMgJTA4eFxuIiwgZXhjZXB0aW9ucyk7CiAKLQlpZiAoZXhjZXB0aW9ucyA9PSAodTMyKS0xKSB7CisJaWYgKGV4Y2VwdGlvbnMgPT0gVkZQX0VYQ0VQVElPTl9FUlJPUikgewogCQl2ZnBfcGFuaWMoInVuaGFuZGxlZCBib3VuY2UiKTsKIAkJdmZwX3JhaXNlX3NpZ2ZwZSgwLCByZWdzKTsKIAkJcmV0dXJuOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAgKi8KIHN0YXRpYyB1MzIgdmZwX2VtdWxhdGVfaW5zdHJ1Y3Rpb24odTMyIGluc3QsIHUzMiBmcHNjciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdTMyIGV4Y2VwdGlvbnMgPSAodTMyKS0xOworCXUzMiBleGNlcHRpb25zID0gVkZQX0VYQ0VQVElPTl9FUlJPUjsKIAogCXByX2RlYnVnKCJWRlA6IGVtdWxhdGU6IElOU1Q9MHglMDh4IFNDUj0weCUwOHhcbiIsIGluc3QsIGZwc2NyKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jIGIvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCmluZGV4IGRhZTJjMmYuLjhmNmMxNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYworKysgYi9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKQEAgLTIwMCw3ICsyMDAsNyBAQAogCQlzMzIgZCA9IHZmcF9zaW5nbGVfcGFjayh2cyk7CiAJCXByX2RlYnVnKCJWRlA6ICVzOiBkKHMlZCk9JTA4eCBleGNlcHRpb25zPSUwOHhcbiIsIGZ1bmMsCiAJCQkgc2QsIGQsIGV4Y2VwdGlvbnMpOwotCQl2ZnBfcHV0X2Zsb2F0KHNkLCBkKTsKKwkJdmZwX3B1dF9mbG9hdChkLCBzZCk7CiAJfQogCiAJcmV0dXJuIGV4Y2VwdGlvbnM7CkBAIC0yNTcsMTkgKzI1NywxOSBAQAogICovCiBzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZmFicyhpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCiB7Ci0JdmZwX3B1dF9mbG9hdChzZCwgdmZwX3NpbmdsZV9wYWNrZWRfYWJzKG0pKTsKKwl2ZnBfcHV0X2Zsb2F0KHZmcF9zaW5nbGVfcGFja2VkX2FicyhtKSwgc2QpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIHZmcF9zaW5nbGVfZmNweShpbnQgc2QsIGludCB1bnVzZWQsIHMzMiBtLCB1MzIgZnBzY3IpCiB7Ci0JdmZwX3B1dF9mbG9hdChzZCwgbSk7CisJdmZwX3B1dF9mbG9hdChtLCBzZCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB1MzIgdmZwX3NpbmdsZV9mbmVnKGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikKIHsKLQl2ZnBfcHV0X2Zsb2F0KHNkLCB2ZnBfc2luZ2xlX3BhY2tlZF9uZWdhdGUobSkpOworCXZmcF9wdXRfZmxvYXQodmZwX3NpbmdsZV9wYWNrZWRfbmVnYXRlKG0pLCBzZCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMzMyw3ICszMzMsNyBAQAogCQkJdnNwID0gJnZmcF9zaW5nbGVfZGVmYXVsdF9xbmFuOwogCQkJcmV0ID0gRlBTQ1JfSU9DOwogCQl9Ci0JCXZmcF9wdXRfZmxvYXQoc2QsIHZmcF9zaW5nbGVfcGFjayh2c3ApKTsKKwkJdmZwX3B1dF9mbG9hdCh2ZnBfc2luZ2xlX3BhY2sodnNwKSwgc2QpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNTA2LDcgKzUwNiw3IEBACiAJICovCiAJaWYgKHRtICYgKFZGUF9JTkZJTklUWXxWRlBfTkFOKSkgewogCQl2ZGQuZXhwb25lbnQgPSAyMDQ3OwotCQlpZiAodG0gJiBWRlBfTkFOKQorCQlpZiAodG0gPT0gVkZQX1FOQU4pCiAJCQl2ZGQuc2lnbmlmaWNhbmQgfD0gVkZQX0RPVUJMRV9TSUdOSUZJQ0FORF9RTkFOOwogCQlnb3RvIHBhY2tfbmFuOwogCX0gZWxzZSBpZiAodG0gJiBWRlBfWkVSTykKQEAgLTUxNCwxNCArNTE0LDEwIEBACiAJZWxzZQogCQl2ZGQuZXhwb25lbnQgPSB2c20uZXhwb25lbnQgKyAoMTAyMyAtIDEyNyk7CiAKLQkvKgotCSAqIFRlY2huaWNhbGx5LCBpZiBiaXQgMCBvZiBkZCBpcyBzZXQsIHRoaXMgaXMgYW4gaW52YWxpZAotCSAqIGluc3RydWN0aW9uLiAgSG93ZXZlciwgd2UgaWdub3JlIHRoaXMgZm9yIGVmZmljaWVuY3kuCi0JICovCiAJcmV0dXJuIHZmcF9kb3VibGVfbm9ybWFsaXNlcm91bmQoZGQsICZ2ZGQsIGZwc2NyLCBleGNlcHRpb25zLCAiZmN2dGQiKTsKIAogIHBhY2tfbmFuOgotCXZmcF9wdXRfZG91YmxlKGRkLCB2ZnBfZG91YmxlX3BhY2soJnZkZCkpOworCXZmcF9wdXRfZG91YmxlKHZmcF9kb3VibGVfcGFjaygmdmRkKSwgZGQpOwogCXJldHVybiBleGNlcHRpb25zOwogfQogCkBAIC02MTcsNyArNjEzLDcgQEAKIAogCXByX2RlYnVnKCJWRlA6IGZ0b3VpOiBkKHMlZCk9JTA4eCBleGNlcHRpb25zPSUwOHhcbiIsIHNkLCBkLCBleGNlcHRpb25zKTsKIAotCXZmcF9wdXRfZmxvYXQoc2QsIGQpOworCXZmcF9wdXRfZmxvYXQoZCwgc2QpOwogCiAJcmV0dXJuIGV4Y2VwdGlvbnM7CiB9CkBAIC02OTYsNyArNjkyLDcgQEAKIAogCXByX2RlYnVnKCJWRlA6IGZ0b3NpOiBkKHMlZCk9JTA4eCBleGNlcHRpb25zPSUwOHhcbiIsIHNkLCBkLCBleGNlcHRpb25zKTsKIAotCXZmcF9wdXRfZmxvYXQoc2QsIChzMzIpZCk7CisJdmZwX3B1dF9mbG9hdCgoczMyKWQsIHNkKTsKIAogCXJldHVybiBleGNlcHRpb25zOwogfQpAQCAtMTEzMSw3ICsxMTI3LDcgQEAKICB2c25fbmFuOgogCWV4Y2VwdGlvbnMgPSB2ZnBfcHJvcGFnYXRlX25hbigmdnNkLCAmdnNuLCAmdnNtLCBmcHNjcik7CiAgcGFjazoKLQl2ZnBfcHV0X2Zsb2F0KHNkLCB2ZnBfc2luZ2xlX3BhY2soJnZzZCkpOworCXZmcF9wdXRfZmxvYXQodmZwX3NpbmdsZV9wYWNrKCZ2c2QpLCBzZCk7CiAJcmV0dXJuIGV4Y2VwdGlvbnM7CiAKICB2c21fbmFuOgpAQCAtMTE1MSw3ICsxMTQ3LDcgQEAKIAlnb3RvIHBhY2s7CiAKICBpbnZhbGlkOgotCXZmcF9wdXRfZmxvYXQoc2QsIHZmcF9zaW5nbGVfcGFjaygmdmZwX3NpbmdsZV9kZWZhdWx0X3FuYW4pKTsKKwl2ZnBfcHV0X2Zsb2F0KHZmcF9zaW5nbGVfcGFjaygmdmZwX3NpbmdsZV9kZWZhdWx0X3FuYW4pLCBzZCk7CiAJcmV0dXJuIEZQU0NSX0lPQzsKIH0KIApAQCAtMTE3NCw3ICsxMTcwLDcgQEAKIHsKIAl1MzIgb3AgPSBpbnN0ICYgRk9QX01BU0s7CiAJdTMyIGV4Y2VwdGlvbnMgPSAwOwotCXVuc2lnbmVkIGludCBzZCA9IHZmcF9nZXRfc2QoaW5zdCk7CisJdW5zaWduZWQgaW50IGRlc3Q7CiAJdW5zaWduZWQgaW50IHNuID0gdmZwX2dldF9zbihpbnN0KTsKIAl1bnNpZ25lZCBpbnQgc20gPSB2ZnBfZ2V0X3NtKGluc3QpOwogCXVuc2lnbmVkIGludCB2ZWNpdHIsIHZlY2xlbiwgdmVjc3RyaWRlOwpAQCAtMTE4NCwxMCArMTE4MCwyMiBAQAogCXZlY3N0cmlkZSA9IDEgKyAoKGZwc2NyICYgRlBTQ1JfU1RSSURFX01BU0spID09IEZQU0NSX1NUUklERV9NQVNLKTsKIAogCS8qCisJICogZmN2dHNkIHRha2VzIGEgZE4gcmVnaXN0ZXIgbnVtYmVyIGFzIGRlc3RpbmF0aW9uLCBub3Qgc04uCisJICogVGVjaG5pY2FsbHksIGlmIGJpdCAwIG9mIGRkIGlzIHNldCwgdGhpcyBpcyBhbiBpbnZhbGlkCisJICogaW5zdHJ1Y3Rpb24uICBIb3dldmVyLCB3ZSBpZ25vcmUgdGhpcyBmb3IgZWZmaWNpZW5jeS4KKwkgKiBJdCBhbHNvIG9ubHkgb3BlcmF0ZXMgb24gc2NhbGFycy4KKwkgKi8KKwlpZiAoKGluc3QgJiBGRVhUX01BU0spID09IEZFWFRfRkNWVCkgeworCQl2ZWNsZW4gPSAwOworCQlkZXN0ID0gdmZwX2dldF9kZChpbnN0KTsKKwl9IGVsc2UKKwkJZGVzdCA9IHZmcF9nZXRfc2QoaW5zdCk7CisKKwkvKgogCSAqIElmIGRlc3RpbmF0aW9uIGJhbmsgaXMgemVybywgdmVjdG9yIGxlbmd0aCBpcyBhbHdheXMgJzEnLgogCSAqIEFSTSBEREkwMTAwRiBDNS4xLjMsIEM1LjMuMi4KIAkgKi8KLQlpZiAoRlJFR19CQU5LKHNkKSA9PSAwKQorCWlmIChGUkVHX0JBTksoZGVzdCkgPT0gMCkKIAkJdmVjbGVuID0gMDsKIAogCXByX2RlYnVnKCJWRlA6IHZlY3N0cmlkZT0ldSB2ZWNsZW49JXVcbiIsIHZlY3N0cmlkZSwKQEAgLTEyMDEsMTUgKzEyMDksMTggQEAKIAkJczMyIG0gPSB2ZnBfZ2V0X2Zsb2F0KHNtKTsKIAkJdTMyIGV4Y2VwdDsKIAotCQlpZiAob3AgPT0gRk9QX0VYVCkKKwkJaWYgKG9wID09IEZPUF9FWFQgJiYgKGluc3QgJiBGRVhUX01BU0spID09IEZFWFRfRkNWVCkKKwkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gb3BbJXVdIChzJXU9JTA4eClcbiIsCisJCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULCBkZXN0LCBzbiwgc20sIG0pOworCQllbHNlIGlmIChvcCA9PSBGT1BfRVhUKQogCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKHMldSkgPSBvcFsldV0gKHMldT0lMDh4KVxuIiwKLQkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIHNkLCBzbiwgc20sIG0pOworCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwgZGVzdCwgc24sIHNtLCBtKTsKIAkJZWxzZQogCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKHMldSkgPSAocyV1KSBvcFsldV0gKHMldT0lMDh4KVxuIiwKLQkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIHNkLCBzbiwKKwkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIGRlc3QsIHNuLAogCQkJCSBGT1BfVE9fSURYKG9wKSwgc20sIG0pOwogCi0JCWV4Y2VwdCA9IGZvcChzZCwgc24sIG0sIGZwc2NyKTsKKwkJZXhjZXB0ID0gZm9wKGRlc3QsIHNuLCBtLCBmcHNjcik7CiAJCXByX2RlYnVnKCJWRlA6IGl0ciVkOiBleGNlcHRpb25zPSUwOHhcbiIsCiAJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIGV4Y2VwdCk7CiAKQEAgLTEyMjcsNyArMTIzOCw3IEBACiAJCSAqIHdlIGVuY291bnRlciBhbiBleGNlcHRpb24uICBXZSBjb250aW51ZS4KIAkJICovCiAKLQkJc2QgPSBGUkVHX0JBTksoc2QpICsgKChGUkVHX0lEWChzZCkgKyB2ZWNzdHJpZGUpICYgNyk7CisJCWRlc3QgPSBGUkVHX0JBTksoZGVzdCkgKyAoKEZSRUdfSURYKGRlc3QpICsgdmVjc3RyaWRlKSAmIDcpOwogCQlzbiA9IEZSRUdfQkFOSyhzbikgKyAoKEZSRUdfSURYKHNuKSArIHZlY3N0cmlkZSkgJiA3KTsKIAkJaWYgKEZSRUdfQkFOSyhzbSkgIT0gMCkKIAkJCXNtID0gRlJFR19CQU5LKHNtKSArICgoRlJFR19JRFgoc20pICsgdmVjc3RyaWRlKSAmIDcpOwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvS2NvbmZpZyBiL2FyY2gvZnJ2L0tjb25maWcKaW5kZXggOTVhMzg5Mi4uYTYwMWExNyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvS2NvbmZpZworKysgYi9hcmNoL2Zydi9LY29uZmlnCkBAIC0yOSw2ICsyOSwxMCBAQAogCWJvb2wKIAlkZWZhdWx0IG4KIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIFRJTUVfTE9XX1JFUwogCWJvb2wKIAlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2Zydi9rZXJuZWwvdGltZS5jCmluZGV4IGQ1YjY0ZTEuLjY4YTc3ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3RpbWUuYwpAQCAtMzIsOCArMzIsNiBAQAogCiAjZGVmaW5lIFRJQ0tfU0laRSAodGlja19uc2VjIC8gMTAwMCkKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgX19jbGtpbl9jbG9ja19zcGVlZF9IWjsKIHVuc2lnbmVkIGxvbmcgX19ub25ncHJlbGJzcyBfX2V4dF9idXNfY2xvY2tfc3BlZWRfSFo7CiB1bnNpZ25lZCBsb25nIF9fbm9uZ3ByZWxic3MgX19yZXNfYnVzX2Nsb2NrX3NwZWVkX0haOwpAQCAtMTQ1LDg1ICsxNDMsNiBAQAogfQogCiAvKgotICogVGhpcyB2ZXJzaW9uIG9mIGdldHRpbWVvZmRheSBoYXMgbmVhciBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgotICovCi12b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCi17Ci0JdW5zaWduZWQgbG9uZyBzZXE7Ci0JdW5zaWduZWQgbG9uZyB1c2VjLCBzZWM7Ci0JdW5zaWduZWQgbG9uZyBtYXhfbnRwX3RpY2s7Ci0KLQlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9zdDsKLQotCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKLQotCQl1c2VjID0gMDsKLQkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7Ci0KLQkJLyoKLQkJICogSWYgdGltZV9hZGp1c3QgaXMgbmVnYXRpdmUgdGhlbiBOVFAgaXMgc2xvd2luZyB0aGUgY2xvY2sKLQkJICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCi0JCSAqIEJldHRlciB0byBsb3NlIHNvbWUgYWNjdXJhY3kgdGhhbiBoYXZlIHRpbWUgZ28gYmFja3dhcmRzLi4KLQkJICovCi0JCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApKSB7Ci0JCQltYXhfbnRwX3RpY2sgPSAoVVNFQ19QRVJfU0VDIC8gSFopIC0gdGlja2FkajsKLQkJCXVzZWMgPSBtaW4odXNlYywgbWF4X250cF90aWNrKTsKLQotCQkJaWYgKGxvc3QpCi0JCQkJdXNlYyArPSBsb3N0ICogbWF4X250cF90aWNrOwotCQl9Ci0JCWVsc2UgaWYgKHVubGlrZWx5KGxvc3QpKQotCQkJdXNlYyArPSBsb3N0ICogKFVTRUNfUEVSX1NFQyAvIEhaKTsKLQotCQlzZWMgPSB4dGltZS50dl9zZWM7Ci0JCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKLQl9IHdoaWxlIChyZWFkX3NlcXJldHJ5KCZ4dGltZV9sb2NrLCBzZXEpKTsKLQotCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKLQkJdXNlYyAtPSAxMDAwMDAwOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKLX0KLQotRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JLyoKLQkgKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgInh0aW1lIiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZQotCSAqIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMgdGhlIHZhbHVlIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUgb2YKLQkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQotCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSAwICogTlNFQ19QRVJfVVNFQzsKLQluc2VjIC09IChqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIFRJQ0tfTlNFQzsKLQotCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7Ci0Jd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKLQotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ4dGltZSwgc2VjLCBuc2VjKTsKLQlzZXRfbm9ybWFsaXplZF90aW1lc3BlYygmd2FsbF90b19tb25vdG9uaWMsIHd0bV9zZWMsIHd0bV9uc2VjKTsKLQotCW50cF9jbGVhcigpOwotCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOwotCWNsb2NrX3dhc19zZXQoKTsKLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwotCi0vKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KICAqLwogdW5zaWduZWQgbG9uZyBsb25nIHNjaGVkX2Nsb2NrKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvS2NvbmZpZyBiL2FyY2gvaTM4Ni9LY29uZmlnCmluZGV4IGRhYTc1Y2UuLmIyNzUxZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9LY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9LY29uZmlnCkBAIC0xNDIsNiArMTQyLDcgQEAKIAkgIEluIHBhcnRpY3VsYXIsIGl0IGlzIG5lZWRlZCBmb3IgdGhlIHg0NDAuCiAKIAkgIElmIHlvdSBkb24ndCBoYXZlIG9uZSBvZiB0aGVzZSBjb21wdXRlcnMsIHlvdSBzaG91bGQgc2F5IE4gaGVyZS4KKwkgIElmIHlvdSB3YW50IHRvIGJ1aWxkIGEgTlVNQSBrZXJuZWwsIHlvdSBtdXN0IHNlbGVjdCBBQ1BJLgogCiBjb25maWcgWDg2X0JJR1NNUAogCWJvb2wgIlN1cHBvcnQgZm9yIG90aGVyIHN1Yi1hcmNoIFNNUCBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDggQ1BVcyIKQEAgLTE2OSw2ICsxNzAsNyBAQAogICAgICAgIGhlbHAKICAgICAgICAgICBUaGlzIG9wdGlvbiBjb21waWxlcyBpbiB0aGUgU3VtbWl0LCBiaWdzbXAsIEVTNzAwMCwgZGVmYXVsdCBzdWJhcmNoaXRlY3R1cmVzLgogCSAgSXQgaXMgaW50ZW5kZWQgZm9yIGEgZ2VuZXJpYyBiaW5hcnkga2VybmVsLgorCSAgSWYgeW91IHdhbnQgYSBOVU1BIGtlcm5lbCwgc2VsZWN0IEFDUEkuICAgV2UgbmVlZCBTUkFUIGZvciBOVU1BLgogCiBjb25maWcgWDg2X0VTNzAwMAogCWJvb2wgIlN1cHBvcnQgZm9yIFVuaXN5cyBFUzcwMDAgSUEzMiBzZXJpZXMiCkBAIC01NDIsNyArNTQ0LDcgQEAKICMgQ29tbW9uIE5VTUEgRmVhdHVyZXMKIGNvbmZpZyBOVU1BCiAJYm9vbCAiTnVtYSBNZW1vcnkgQWxsb2NhdGlvbiBhbmQgU2NoZWR1bGVyIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTTVAgJiYgSElHSE1FTTY0RyAmJiAoWDg2X05VTUFRIHx8IFg4Nl9HRU5FUklDQVJDSCB8fCAoWDg2X1NVTU1JVCAmJiBBQ1BJKSkKKwlkZXBlbmRzIG9uIFNNUCAmJiBISUdITUVNNjRHICYmIChYODZfTlVNQVEgfHwgKFg4Nl9TVU1NSVQgfHwgWDg2X0dFTkVSSUNBUkNIKSAmJiBBQ1BJKQogCWRlZmF1bHQgbiBpZiBYODZfUEMKIAlkZWZhdWx0IHkgaWYgKFg4Nl9OVU1BUSB8fCBYODZfU1VNTUlUKQogCkBAIC02NzIsNyArNjc0LDcgQEAKIAkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL210cnIudHh0PiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KIAogY29uZmlnIEVGSQotCWJvb2wgIkJvb3QgZnJvbSBFRkkgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJCb290IGZyb20gRUZJIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBQ1BJCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2NyeXB0by9NYWtlZmlsZSBiL2FyY2gvaTM4Ni9jcnlwdG8vTWFrZWZpbGUKaW5kZXggMTAzYzM1My4uM2ZkMTlhZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2NyeXB0by9NYWtlZmlsZQorKysgYi9hcmNoL2kzODYvY3J5cHRvL01ha2VmaWxlCkBAIC01LDUgKzUsOCBAQAogIyAKIAogb2JqLSQoQ09ORklHX0NSWVBUT19BRVNfNTg2KSArPSBhZXMtaTU4Ni5vCitvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfNTg2KSArPSB0d29maXNoLWk1ODYubwogCiBhZXMtaTU4Ni15IDo9IGFlcy1pNTg2LWFzbS5vIGFlcy5vCit0d29maXNoLWk1ODYteSA6PSB0d29maXNoLWk1ODYtYXNtLm8gdHdvZmlzaC5vCisKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLmMgYi9hcmNoL2kzODYvY3J5cHRvL2Flcy5jCmluZGV4IGQzODA2ZGEuLjQ5YWFkOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9jcnlwdG8vYWVzLmMKKysrIGIvYXJjaC9pMzg2L2NyeXB0by9hZXMuYwpAQCAtMzc5LDEyICszNzksMTMgQEAKIH0KIAogc3RhdGljIGludCBhZXNfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAotCQkgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKIAlpbnQgaTsKIAl1MzIgc3NbOF07CiAJc3RydWN0IGFlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAKIAkvKiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCiAJCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvY3J5cHRvL3R3b2Zpc2gtaTU4Ni1hc20uUyBiL2FyY2gvaTM4Ni9jcnlwdG8vdHdvZmlzaC1pNTg2LWFzbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5Yjk4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2kzODYvY3J5cHRvL3R3b2Zpc2gtaTU4Ni1hc20uUwpAQCAtMCwwICsxLDMzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgIENvcHlyaWdodCAoQykgMjAwNiBieSBKb2FjaGltIEZyaXRzY2hpLCA8amZyaXRzY2hpQGZyZWVuZXQuZGU+ICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAgKgorKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5ICAqCisqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgICAgICoKKyogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsICAgICAgICoKKyogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiAgICAgICAgKgorKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgICAgICAgICAqCisqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4gICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICAgICAqCisqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLiAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy5maWxlICJ0d29maXNoLWk1ODYtYXNtLlMiCisudGV4dAorCisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisKKy8qIHJldHVybiBhZHJlc3MgYXQgMCAqLworCisjZGVmaW5lIGluX2JsayAgICAxMiAgLyogaW5wdXQgYnl0ZSBhcnJheSBhZGRyZXNzIHBhcmFtZXRlciovCisjZGVmaW5lIG91dF9ibGsgICA4ICAvKiBvdXRwdXQgYnl0ZSBhcnJheSBhZGRyZXNzIHBhcmFtZXRlciovCisjZGVmaW5lIHRmbSAgICAgICA0ICAvKiBUd29maXNoIGNvbnRleHQgc3RydWN0dXJlICovCisKKyNkZWZpbmUgYV9vZmZzZXQJMAorI2RlZmluZSBiX29mZnNldAk0CisjZGVmaW5lIGNfb2Zmc2V0CTgKKyNkZWZpbmUgZF9vZmZzZXQJMTIKKworLyogU3RydWN0dXJlIG9mIHRoZSBjcnlwdG8gY29udGV4dCBzdHJ1Y3QqLworCisjZGVmaW5lIHMwCTAJLyogUzAgQXJyYXkgMjU2IFdvcmRzIGVhY2ggKi8KKyNkZWZpbmUgczEJMTAyNAkvKiBTMSBBcnJheSAqLworI2RlZmluZSBzMgkyMDQ4CS8qIFMyIEFycmF5ICovCisjZGVmaW5lIHMzCTMwNzIJLyogUzMgQXJyYXkgKi8KKyNkZWZpbmUgdwk0MDk2CS8qIDggd2hpdGVuaW5nIGtleXMgKHdvcmQpICovCisjZGVmaW5lIGsJNDEyOAkvKiBrZXkgMS0zMiAoIHdvcmQgKSAqLworCisvKiBkZWZpbmUgYSBmZXcgcmVnaXN0ZXIgYWxpYXNlcyB0byBhbGxvdyBtYWNybyBzdWJzdGl0dXRpb24gKi8KKworI2RlZmluZSBSMEQgICAgJWVheAorI2RlZmluZSBSMEIgICAgJWFsCisjZGVmaW5lIFIwSCAgICAlYWgKKworI2RlZmluZSBSMUQgICAgJWVieAorI2RlZmluZSBSMUIgICAgJWJsCisjZGVmaW5lIFIxSCAgICAlYmgKKworI2RlZmluZSBSMkQgICAgJWVjeAorI2RlZmluZSBSMkIgICAgJWNsCisjZGVmaW5lIFIySCAgICAlY2gKKworI2RlZmluZSBSM0QgICAgJWVkeAorI2RlZmluZSBSM0IgICAgJWRsCisjZGVmaW5lIFIzSCAgICAlZGgKKworCisvKiBwZXJmb3JtcyBpbnB1dCB3aGl0ZW5pbmcgKi8KKyNkZWZpbmUgaW5wdXRfd2hpdGVuaW5nKHNyYyxjb250ZXh0LG9mZnNldClcCisJeG9yCXcrb2Zmc2V0KGNvbnRleHQpLAlzcmM7CisKKy8qIHBlcmZvcm1zIGlucHV0IHdoaXRlbmluZyAqLworI2RlZmluZSBvdXRwdXRfd2hpdGVuaW5nKHNyYyxjb250ZXh0LG9mZnNldClcCisJeG9yCXcrMTYrb2Zmc2V0KGNvbnRleHQpLAlzcmM7CisKKy8qCisgKiBhIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYSAocm90YXRlZCAxNikKKyAqIGIgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBiCisgKiBjIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYworICogZCBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGQgKGFscmVhZHkgcm9sICQxKQorICogb3BlcmF0aW9ucyBvbiBhIGFuZCBiIGFyZSBpbnRlcmxlYXZlZCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZQorICovCisjZGVmaW5lIGVuY3J5cHRfcm91bmQoYSxiLGMsZCxyb3VuZClcCisJcHVzaAlkICMjIEQ7XAorCW1vdnp4CWIgIyMgQiwJCSVlZGk7XAorCW1vdglzMSglZWJwLCVlZGksNCksZCAjIyBEO1wKKwltb3Z6eAlhICMjIEIsCQklZWRpO1wKKwltb3YJczIoJWVicCwlZWRpLDQpLCVlc2k7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQliICMjIEQ7XAorCXhvcglzMiglZWJwLCVlZGksNCksZCAjIyBEO1wKKwltb3Z6eAlhICMjIEgsCQklZWRpO1wKKwlyb3IJJDE2LAkJYSAjIyBEO1wKKwl4b3IJczMoJWVicCwlZWRpLDQpLCVlc2k7XAorCW1vdnp4CWIgIyMgQiwJCSVlZGk7XAorCXhvcglzMyglZWJwLCVlZGksNCksZCAjIyBEO1wKKwltb3Z6eAlhICMjIEIsCQklZWRpO1wKKwl4b3IJKCVlYnAsJWVkaSw0KSwJJWVzaTtcCisJbW92engJYiAjIyBILAkJJWVkaTtcCisJcm9yCSQxNSwJCWIgIyMgRDtcCisJeG9yCSglZWJwLCVlZGksNCksCWQgIyMgRDtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJeG9yCXMxKCVlYnAsJWVkaSw0KSwlZXNpO1wKKwlwb3AJJWVkaTtcCisJYWRkCWQgIyMgRCwJCSVlc2k7XAorCWFkZAklZXNpLAkJZCAjIyBEO1wKKwlhZGQJaytyb3VuZCglZWJwKSwJJWVzaTtcCisJeG9yCSVlc2ksCQljICMjIEQ7XAorCXJvbAkkMTUsCQljICMjIEQ7XAorCWFkZAlrKzQrcm91bmQoJWVicCksZCAjIyBEO1wKKwl4b3IJJWVkaSwJCWQgIyMgRDsKKworLyoKKyAqIGEgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBhIChyb3RhdGVkIDE2KQorICogYiBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGIKKyAqIGMgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBjCisgKiBkIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgZCAoYWxyZWFkeSByb2wgJDEpCisgKiBvcGVyYXRpb25zIG9uIGEgYW5kIGIgYXJlIGludGVybGVhdmVkIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlCisgKiBsYXN0IHJvdW5kIGhhcyBkaWZmZXJlbnQgcm90YXRpb25zIGZvciB0aGUgb3V0cHV0IHByZXBhcmF0aW9uCisgKi8KKyNkZWZpbmUgZW5jcnlwdF9sYXN0X3JvdW5kKGEsYixjLGQscm91bmQpXAorCXB1c2gJZCAjIyBEO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwltb3YJczEoJWVicCwlZWRpLDQpLGQgIyMgRDtcCisJbW92engJYSAjIyBCLAkJJWVkaTtcCisJbW92CXMyKCVlYnAsJWVkaSw0KSwlZXNpO1wKKwltb3Z6eAliICMjIEgsCQklZWRpO1wKKwlyb3IJJDE2LAkJYiAjIyBEO1wKKwl4b3IJczIoJWVicCwlZWRpLDQpLGQgIyMgRDtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJcm9yCSQxNiwJCWEgIyMgRDtcCisJeG9yCXMzKCVlYnAsJWVkaSw0KSwlZXNpO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwl4b3IJczMoJWVicCwlZWRpLDQpLGQgIyMgRDtcCisJbW92engJYSAjIyBCLAkJJWVkaTtcCisJeG9yCSglZWJwLCVlZGksNCksCSVlc2k7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQliICMjIEQ7XAorCXhvcgkoJWVicCwlZWRpLDQpLAlkICMjIEQ7XAorCW1vdnp4CWEgIyMgSCwJCSVlZGk7XAorCXhvcglzMSglZWJwLCVlZGksNCksJWVzaTtcCisJcG9wCSVlZGk7XAorCWFkZAlkICMjIEQsCQklZXNpO1wKKwlhZGQJJWVzaSwJCWQgIyMgRDtcCisJYWRkCWsrcm91bmQoJWVicCksCSVlc2k7XAorCXhvcgklZXNpLAkJYyAjIyBEO1wKKwlyb3IJJDEsCQljICMjIEQ7XAorCWFkZAlrKzQrcm91bmQoJWVicCksZCAjIyBEO1wKKwl4b3IJJWVkaSwJCWQgIyMgRDsKKworLyoKKyAqIGEgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBhCisgKiBiIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYiAocm90YXRlZCAxNikKKyAqIGMgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBjCisgKiBkIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgZCAoYWxyZWFkeSByb2wgJDEpCisgKiBvcGVyYXRpb25zIG9uIGEgYW5kIGIgYXJlIGludGVybGVhdmVkIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlCisgKi8KKyNkZWZpbmUgZGVjcnlwdF9yb3VuZChhLGIsYyxkLHJvdW5kKVwKKwlwdXNoCWMgIyMgRDtcCisJbW92engJYSAjIyBCLAkJJWVkaTtcCisJbW92CSglZWJwLCVlZGksNCksCWMgIyMgRDtcCisJbW92engJYiAjIyBCLAkJJWVkaTtcCisJbW92CXMzKCVlYnAsJWVkaSw0KSwlZXNpO1wKKwltb3Z6eAlhICMjIEgsCQklZWRpO1wKKwlyb3IJJDE2LAkJYSAjIyBEO1wKKwl4b3IJczEoJWVicCwlZWRpLDQpLGMgIyMgRDtcCisJbW92engJYiAjIyBILAkJJWVkaTtcCisJcm9yCSQxNiwJCWIgIyMgRDtcCisJeG9yCSglZWJwLCVlZGksNCksCSVlc2k7XAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCXhvcglzMiglZWJwLCVlZGksNCksYyAjIyBEO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwl4b3IJczEoJWVicCwlZWRpLDQpLCVlc2k7XAorCW1vdnp4CWEgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTUsCQlhICMjIEQ7XAorCXhvcglzMyglZWJwLCVlZGksNCksYyAjIyBEO1wKKwltb3Z6eAliICMjIEgsCQklZWRpO1wKKwl4b3IJczIoJWVicCwlZWRpLDQpLCVlc2k7XAorCXBvcAklZWRpO1wKKwlhZGQJJWVzaSwJCWMgIyMgRDtcCisJYWRkCWMgIyMgRCwJCSVlc2k7XAorCWFkZAlrK3JvdW5kKCVlYnApLAljICMjIEQ7XAorCXhvcgklZWRpLAkJYyAjIyBEO1wKKwlhZGQJays0K3JvdW5kKCVlYnApLCVlc2k7XAorCXhvcgklZXNpLAkJZCAjIyBEO1wKKwlyb2wJJDE1LAkJZCAjIyBEOworCisvKgorICogYSBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGEKKyAqIGIgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBiIChyb3RhdGVkIDE2KQorICogYyBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGMKKyAqIGQgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBkIChhbHJlYWR5IHJvbCAkMSkKKyAqIG9wZXJhdGlvbnMgb24gYSBhbmQgYiBhcmUgaW50ZXJsZWF2ZWQgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UKKyAqIGxhc3Qgcm91bmQgaGFzIGRpZmZlcmVudCByb3RhdGlvbnMgZm9yIHRoZSBvdXRwdXQgcHJlcGFyYXRpb24KKyAqLworI2RlZmluZSBkZWNyeXB0X2xhc3Rfcm91bmQoYSxiLGMsZCxyb3VuZClcCisJcHVzaAljICMjIEQ7XAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCW1vdgkoJWVicCwlZWRpLDQpLAljICMjIEQ7XAorCW1vdnp4CWIgIyMgQiwJCSVlZGk7XAorCW1vdglzMyglZWJwLCVlZGksNCksJWVzaTtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJcm9yCSQxNiwJCWEgIyMgRDtcCisJeG9yCXMxKCVlYnAsJWVkaSw0KSxjICMjIEQ7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQliICMjIEQ7XAorCXhvcgkoJWVicCwlZWRpLDQpLAklZXNpO1wKKwltb3Z6eAlhICMjIEIsCQklZWRpO1wKKwl4b3IJczIoJWVicCwlZWRpLDQpLGMgIyMgRDtcCisJbW92engJYiAjIyBCLAkJJWVkaTtcCisJeG9yCXMxKCVlYnAsJWVkaSw0KSwlZXNpO1wKKwltb3Z6eAlhICMjIEgsCQklZWRpO1wKKwlyb3IJJDE2LAkJYSAjIyBEO1wKKwl4b3IJczMoJWVicCwlZWRpLDQpLGMgIyMgRDtcCisJbW92engJYiAjIyBILAkJJWVkaTtcCisJeG9yCXMyKCVlYnAsJWVkaSw0KSwlZXNpO1wKKwlwb3AJJWVkaTtcCisJYWRkCSVlc2ksCQljICMjIEQ7XAorCWFkZAljICMjIEQsCQklZXNpO1wKKwlhZGQJaytyb3VuZCglZWJwKSwJYyAjIyBEO1wKKwl4b3IJJWVkaSwJCWMgIyMgRDtcCisJYWRkCWsrNCtyb3VuZCglZWJwKSwlZXNpO1wKKwl4b3IJJWVzaSwJCWQgIyMgRDtcCisJcm9yCSQxLAkJZCAjIyBEOworCisuYWxpZ24gNAorLmdsb2JhbCB0d29maXNoX2VuY19ibGsKKy5nbG9iYWwgdHdvZmlzaF9kZWNfYmxrCisKK3R3b2Zpc2hfZW5jX2JsazoKKwlwdXNoCSVlYnAJCQkvKiBzYXZlIHJlZ2lzdGVycyBhY2NvcmRpbmcgdG8gY2FsbGluZyBjb252ZW50aW9uKi8KKwlwdXNoICAgICVlYngKKwlwdXNoICAgICVlc2kKKwlwdXNoICAgICVlZGkKKworCW1vdgl0Zm0gKyAxNiglZXNwKSwJJWVicAkvKiBhYnVzZSB0aGUgYmFzZSBwb2ludGVyOiBzZXQgbmV3IGJhc2UgYm9pbnRlciB0byB0aGUgY3J5cHRvIHRmbSAqLworCWFkZAkkY3J5cHRvX3RmbV9jdHhfb2Zmc2V0LCAlZWJwCS8qIGN0eCBhZHJlc3MgKi8KKwltb3YgICAgIGluX2JsaysxNiglZXNwKSwlZWRpCS8qIGlucHV0IGFkcmVzcyBpbiBlZGkgKi8KKworCW1vdgkoJWVkaSksCQklZWF4CisJbW92CWJfb2Zmc2V0KCVlZGkpLAklZWJ4CisJbW92CWNfb2Zmc2V0KCVlZGkpLAklZWN4CisJbW92CWRfb2Zmc2V0KCVlZGkpLAklZWR4CisJaW5wdXRfd2hpdGVuaW5nKCVlYXgsJWVicCxhX29mZnNldCkKKwlyb3IJJDE2LAklZWF4CisJaW5wdXRfd2hpdGVuaW5nKCVlYngsJWVicCxiX29mZnNldCkKKwlpbnB1dF93aGl0ZW5pbmcoJWVjeCwlZWJwLGNfb2Zmc2V0KQorCWlucHV0X3doaXRlbmluZyglZWR4LCVlYnAsZF9vZmZzZXQpCisJcm9sCSQxLAklZWR4CisKKwllbmNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDApOworCWVuY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsOCk7CisJZW5jcnlwdF9yb3VuZChSMCxSMSxSMixSMywyKjgpOworCWVuY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsMyo4KTsKKwllbmNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDQqOCk7CisJZW5jcnlwdF9yb3VuZChSMixSMyxSMCxSMSw1KjgpOworCWVuY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsNio4KTsKKwllbmNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDcqOCk7CisJZW5jcnlwdF9yb3VuZChSMCxSMSxSMixSMyw4KjgpOworCWVuY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsOSo4KTsKKwllbmNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDEwKjgpOworCWVuY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsMTEqOCk7CisJZW5jcnlwdF9yb3VuZChSMCxSMSxSMixSMywxMio4KTsKKwllbmNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDEzKjgpOworCWVuY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMTQqOCk7CisJZW5jcnlwdF9sYXN0X3JvdW5kKFIyLFIzLFIwLFIxLDE1KjgpOworCisJb3V0cHV0X3doaXRlbmluZyglZWF4LCVlYnAsY19vZmZzZXQpCisJb3V0cHV0X3doaXRlbmluZyglZWJ4LCVlYnAsZF9vZmZzZXQpCisJb3V0cHV0X3doaXRlbmluZyglZWN4LCVlYnAsYV9vZmZzZXQpCisJb3V0cHV0X3doaXRlbmluZyglZWR4LCVlYnAsYl9vZmZzZXQpCisJbW92CW91dF9ibGsrMTYoJWVzcCksJWVkaTsKKwltb3YJJWVheCwJCWNfb2Zmc2V0KCVlZGkpCisJbW92CSVlYngsCQlkX29mZnNldCglZWRpKQorCW1vdgklZWN4LAkJKCVlZGkpCisJbW92CSVlZHgsCQliX29mZnNldCglZWRpKQorCisJcG9wCSVlZGkKKwlwb3AJJWVzaQorCXBvcAklZWJ4CisJcG9wCSVlYnAKKwltb3YJJDEsCSVlYXgKKwlyZXQKKwordHdvZmlzaF9kZWNfYmxrOgorCXB1c2gJJWVicAkJCS8qIHNhdmUgcmVnaXN0ZXJzIGFjY29yZGluZyB0byBjYWxsaW5nIGNvbnZlbnRpb24qLworCXB1c2ggICAgJWVieAorCXB1c2ggICAgJWVzaQorCXB1c2ggICAgJWVkaQorCisKKwltb3YJdGZtICsgMTYoJWVzcCksCSVlYnAJLyogYWJ1c2UgdGhlIGJhc2UgcG9pbnRlcjogc2V0IG5ldyBiYXNlIGJvaW50ZXIgdG8gdGhlIGNyeXB0byB0Zm0gKi8KKwlhZGQJJGNyeXB0b190Zm1fY3R4X29mZnNldCwgJWVicAkvKiBjdHggYWRyZXNzICovCisJbW92ICAgICBpbl9ibGsrMTYoJWVzcCksJWVkaQkvKiBpbnB1dCBhZHJlc3MgaW4gZWRpICovCisKKwltb3YJKCVlZGkpLAkJJWVheAorCW1vdgliX29mZnNldCglZWRpKSwJJWVieAorCW1vdgljX29mZnNldCglZWRpKSwJJWVjeAorCW1vdglkX29mZnNldCglZWRpKSwJJWVkeAorCW91dHB1dF93aGl0ZW5pbmcoJWVheCwlZWJwLGFfb2Zmc2V0KQorCW91dHB1dF93aGl0ZW5pbmcoJWVieCwlZWJwLGJfb2Zmc2V0KQorCXJvcgkkMTYsCSVlYngKKwlvdXRwdXRfd2hpdGVuaW5nKCVlY3gsJWVicCxjX29mZnNldCkKKwlvdXRwdXRfd2hpdGVuaW5nKCVlZHgsJWVicCxkX29mZnNldCkKKwlyb2wJJDEsCSVlY3gKKworCWRlY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMTUqOCk7CisJZGVjcnlwdF9yb3VuZChSMixSMyxSMCxSMSwxNCo4KTsKKwlkZWNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDEzKjgpOworCWRlY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsMTIqOCk7CisJZGVjcnlwdF9yb3VuZChSMCxSMSxSMixSMywxMSo4KTsKKwlkZWNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDEwKjgpOworCWRlY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsOSo4KTsKKwlkZWNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDgqOCk7CisJZGVjcnlwdF9yb3VuZChSMCxSMSxSMixSMyw3KjgpOworCWRlY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsNio4KTsKKwlkZWNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDUqOCk7CisJZGVjcnlwdF9yb3VuZChSMixSMyxSMCxSMSw0KjgpOworCWRlY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMyo4KTsKKwlkZWNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDIqOCk7CisJZGVjcnlwdF9yb3VuZChSMCxSMSxSMixSMywxKjgpOworCWRlY3J5cHRfbGFzdF9yb3VuZChSMixSMyxSMCxSMSwwKTsKKworCWlucHV0X3doaXRlbmluZyglZWF4LCVlYnAsY19vZmZzZXQpCisJaW5wdXRfd2hpdGVuaW5nKCVlYngsJWVicCxkX29mZnNldCkKKwlpbnB1dF93aGl0ZW5pbmcoJWVjeCwlZWJwLGFfb2Zmc2V0KQorCWlucHV0X3doaXRlbmluZyglZWR4LCVlYnAsYl9vZmZzZXQpCisJbW92CW91dF9ibGsrMTYoJWVzcCksJWVkaTsKKwltb3YJJWVheCwJCWNfb2Zmc2V0KCVlZGkpCisJbW92CSVlYngsCQlkX29mZnNldCglZWRpKQorCW1vdgklZWN4LAkJKCVlZGkpCisJbW92CSVlZHgsCQliX29mZnNldCglZWRpKQorCisJcG9wCSVlZGkKKwlwb3AJJWVzaQorCXBvcAklZWJ4CisJcG9wCSVlYnAKKwltb3YJJDEsCSVlYXgKKwlyZXQKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9jcnlwdG8vdHdvZmlzaC5jIGIvYXJjaC9pMzg2L2NyeXB0by90d29maXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMwMDRkZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaTM4Ni9jcnlwdG8vdHdvZmlzaC5jCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgR2x1ZSBDb2RlIGZvciBvcHRpbWl6ZWQgNTg2IGFzc2VtYmxlciB2ZXJzaW9uIG9mIFRXT0ZJU0gKKyAqCisgKiBPcmlnaW5hbGx5IFR3b2Zpc2ggZm9yIEdQRworICogQnkgTWF0dGhldyBTa2FsYSA8bXNrYWxhQGFuc3V6LnNvb2tlLmJjLmNhPiwgSnVseSAyNiwgMTk5OAorICogMjU2LWJpdCBrZXkgbGVuZ3RoIGFkZGVkIE1hcmNoIDIwLCAxOTk5CisgKiBTb21lIG1vZGlmaWNhdGlvbnMgdG8gcmVkdWNlIHRoZSB0ZXh0IHNpemUgYnkgV2VybmVyIEtvY2gsIEFwcmlsLCAxOTk4CisgKiBQb3J0ZWQgdG8gdGhlIGtlcm5lbGkgcGF0Y2ggYnkgTWFyYyBNdXR6IDxNYXJjQE11dHouY29tPgorICogUG9ydGVkIHRvIENyeXB0b0FQSSBieSBDb2xpbiBTbGF0ZXIgPGhvaG9AdGFjb21lYXQubmV0PgorICoKKyAqIFRoZSBvcmlnaW5hbCBhdXRob3IgaGFzIGRpc2NsYWltZWQgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGlzCisgKiBjb2RlIGFuZCB0aHVzIHB1dCBpdCBpbiB0aGUgcHVibGljIGRvbWFpbi4gVGhlIHN1YnNlcXVlbnQgYXV0aG9ycworICogaGF2ZSBwdXQgdGhpcyB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKKyAqIFVTQQorICoKKyAqIFRoaXMgY29kZSBpcyBhICJjbGVhbiByb29tIiBpbXBsZW1lbnRhdGlvbiwgd3JpdHRlbiBmcm9tIHRoZSBwYXBlcgorICogX1R3b2Zpc2g6IEEgMTI4LUJpdCBCbG9jayBDaXBoZXJfIGJ5IEJydWNlIFNjaG5laWVyLCBKb2huIEtlbHNleSwKKyAqIERvdWcgV2hpdGluZywgRGF2aWQgV2FnbmVyLCBDaHJpcyBIYWxsLCBhbmQgTmllbHMgRmVyZ3Vzb24sIGF2YWlsYWJsZQorICogdGhyb3VnaCBodHRwOi8vd3d3LmNvdW50ZXJwYW5lLmNvbS90d29maXNoLmh0bWwKKyAqCisgKiBGb3IgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBvbiBtdWx0aXBsaWNhdGlvbiBpbiBmaW5pdGUgZmllbGRzLCB1c2VkIGZvcgorICogdGhlIG1hdHJpeCBvcGVyYXRpb25zIGluIHRoZSBrZXkgc2NoZWR1bGUsIHNlZSB0aGUgYm9vayBfQ29udGVtcG9yYXJ5CisgKiBBYnN0cmFjdCBBbGdlYnJhXyBieSBKb3NlcGggQS4gR2FsbGlhbiwgZXNwZWNpYWxseSBjaGFwdGVyIDIyIGluIHRoZQorICogVGhpcmQgRWRpdGlvbi4KKyAqLworCisjaW5jbHVkZSA8Y3J5cHRvL3R3b2Zpc2guaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworCithc21saW5rYWdlIHZvaWQgdHdvZmlzaF9lbmNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworYXNtbGlua2FnZSB2b2lkIHR3b2Zpc2hfZGVjX2JsayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKTsKKworc3RhdGljIHZvaWQgdHdvZmlzaF9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJdHdvZmlzaF9lbmNfYmxrKHRmbSwgZHN0LCBzcmMpOworfQorCitzdGF0aWMgdm9pZCB0d29maXNoX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwl0d29maXNoX2RlY19ibGsodGZtLCBkc3QsIHNyYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJ0d29maXNoIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JInR3b2Zpc2gtaTU4NiIsCisJLmNyYV9wcmlvcml0eQkJPQkyMDAsCisJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9CVRGX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgdHdvZmlzaF9jdHgpLAorCS5jcmFfYWxpZ25tYXNrCQk9CTMsCisJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKGFsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5jaXBoZXIgPSB7CisJCQkuY2lhX21pbl9rZXlzaXplCT0JVEZfTUlOX0tFWV9TSVpFLAorCQkJLmNpYV9tYXhfa2V5c2l6ZQk9CVRGX01BWF9LRVlfU0laRSwKKwkJCS5jaWFfc2V0a2V5CQk9CXR3b2Zpc2hfc2V0a2V5LAorCQkJLmNpYV9lbmNyeXB0CQk9CXR3b2Zpc2hfZW5jcnlwdCwKKwkJCS5jaWFfZGVjcnlwdAkJPQl0d29maXNoX2RlY3J5cHQKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGluaXQodm9pZCkKK3sKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWxnKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZpbmkodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmFsZyk7Cit9CisKK21vZHVsZV9pbml0KGluaXQpOworbW9kdWxlX2V4aXQoZmluaSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTiAoIlR3b2Zpc2ggQ2lwaGVyIEFsZ29yaXRobSwgaTU4NiBhc20gb3B0aW1pemVkIik7CitNT0RVTEVfQUxJQVMoInR3b2Zpc2giKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCmluZGV4IDFiNDUyYTEuLjU0MjdhODQgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtMzksNyArMzksNiBAQAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KIG9iai0kKENPTkZJR19IUEVUX1RJTUVSKSAJKz0gaHBldC5vCiBvYmotJChDT05GSUdfSzhfTkIpCQkrPSBrOC5vCi1vYmotJChDT05GSUdfQVVESVQpCQkrPSBhdWRpdC5vCiAKIEVYVFJBX0FGTEFHUyAgIDo9IC10cmFkaXRpb25hbAogCkBAIC01OSw3ICs1OCw4IEBACiAKIGV4cG9ydCBDUFBGTEFHU192c3lzY2FsbC5sZHMgKz0gLVAgLUMgLVUkKEFSQ0gpCiAKLXZzeXNjYWxsLWZsYWdzID0gLXNoYXJlZCAtcyAtV2wsLXNvbmFtZT1saW51eC1nYXRlLnNvLjEKK3ZzeXNjYWxsLWZsYWdzID0gLXNoYXJlZCAtcyAtV2wsLXNvbmFtZT1saW51eC1nYXRlLnNvLjEgXAorCQkgJChjYWxsIGxkLW9wdGlvbiwgLVdsJChjb21tYSktLWhhc2gtc3R5bGU9c3lzdikKIFNZU0NGTEFHU192c3lzY2FsbC1zeXNlbnRlci5zbwk9ICQodnN5c2NhbGwtZmxhZ3MpCiBTWVNDRkxBR1NfdnN5c2NhbGwtaW50ODAuc28JPSAkKHZzeXNjYWxsLWZsYWdzKQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCAwZGI2Mzg3Li5lZTAwM2JjIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2FjcGkvYm9vdC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS9ib290LmMKQEAgLTU5LDcgKzU5LDcgQEAKIAogI2RlZmluZSBCQURfTUFEVF9FTlRSWShlbnRyeSwgZW5kKSAoCQkJCQkgICAgXAogCQkoIWVudHJ5KSB8fCAodW5zaWduZWQgbG9uZyllbnRyeSArIHNpemVvZigqZW50cnkpID4gZW5kIHx8ICBcCi0JCSgoYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIgKillbnRyeSktPmxlbmd0aCAhPSBzaXplb2YoKmVudHJ5KSkKKwkJKChhY3BpX3RhYmxlX2VudHJ5X2hlYWRlciAqKWVudHJ5KS0+bGVuZ3RoIDwgc2l6ZW9mKCplbnRyeSkpCiAKICNkZWZpbmUgUFJFRklYCQkJIkFDUEk6ICIKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL3dha2V1cC5TIGIvYXJjaC9pMzg2L2tlcm5lbC9hY3BpL3dha2V1cC5TCmluZGV4IDlmNDA4ZWUuLmI3ODFiMzggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYWNwaS93YWtldXAuUworKysgYi9hcmNoL2kzODYva2VybmVsL2FjcGkvd2FrZXVwLlMKQEAgLTI5Miw3ICsyOTIsMTAgQEAKIAlwdXNobAkkMwogCWNhbGwJYWNwaV9lbnRlcl9zbGVlcF9zdGF0ZQogCWFkZGwJJDQsICVlc3AKLQlyZXQKKworIwlJbiBjYXNlIG9mIFMzIGZhaWx1cmUsIHdlJ2xsIGVtZXJnZSBoZXJlLiAgSnVtcAorIyAJdG8gcmV0X3BvaW50IHRvIHJlY292ZXIKKwlqbXAJcmV0X3BvaW50CiAJLnAyYWxpZ24gNCwsNwogcmV0X3BvaW50OgogCWNhbGwJcmVzdG9yZV9yZWdpc3RlcnMKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvYXVkaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWE1M2M2Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2kzODYva2VybmVsL2F1ZGl0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBkaXJfY2xhc3NbXSA9IHsKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaD4KLX4wVQotfTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXR0cl9jbGFzc1tdID0gewotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Ci1+MFUKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF1ZGl0X2NsYXNzZXNfaW5pdCh2b2lkKQotewotCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKLQlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFIsIGNoYXR0cl9jbGFzcyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9faW5pdGNhbGwoYXVkaXRfY2xhc3Nlc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwppbmRleCBlNDRhNGM2YS4uY2NjMWVkZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvS2NvbmZpZwpAQCAtOTYsNiArOTYsNyBAQAogCiBjb25maWcgWDg2X0dYX1NVU1BNT0QKIAl0cmlzdGF0ZSAiQ3lyaXggTWVkaWFHWC9OYXRTZW1pIEdlb2RlIFN1c3BlbmQgTW9kdWxhdGlvbiIKKwlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgVGhpcyBhZGQgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBOYXRTZW1pIEdlb2RlIHByb2Nlc3NvcnMgd2hpY2gKIAkgc3VwcG9ydCBzdXNwZW5kIG1vZHVsYXRpb24uCkBAIC0yMDIsNyArMjAzLDcgQEAKIGNvbmZpZyBYODZfTE9OR0hBVUwKIAl0cmlzdGF0ZSAiVklBIEN5cml4IElJSSBMb25naGF1bCIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKLQlkZXBlbmRzIG9uIEJST0tFTgorCWRlcGVuZHMgb24gQUNQSV9QUk9DRVNTT1IKIAloZWxwCiAJICBUaGlzIGFkZHMgdGhlIENQVUZyZXEgZHJpdmVyIGZvciBWSUEgU2FtdWVsL0N5cml4SUlJLAogCSAgVklBIEN5cml4IFNhbXVlbC9DMywgVklBIEN5cml4IEV6cmEgYW5kIFZJQSBDeXJpeCBFenJhLVQKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCmluZGV4IDU2N2IzOWIuLmU2ZWEwMGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwpAQCAtMzg0LDggKzM4NCw3IEBACiAJfQogCiAJLyogRG8gaW5pdGlhbGl6YXRpb24gaW4gQUNQSSBjb3JlICovCi0JYWNwaV9wcm9jZXNzb3JfcHJlcmVnaXN0ZXJfcGVyZm9ybWFuY2UoYWNwaV9wZXJmX2RhdGEpOwotCXJldHVybiAwOworCXJldHVybiBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZShhY3BpX3BlcmZfZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTU2OCwxNiArNTY3LDExIEBACiBzdGF0aWMgaW50IF9faW5pdAogYWNwaV9jcHVmcmVxX2luaXQgKHZvaWQpCiB7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKLQogCWRwcmludGsoImFjcGlfY3B1ZnJlcV9pbml0XG4iKTsKIAotCXJlc3VsdCA9IGFjcGlfY3B1ZnJlcV9lYXJseV9pbml0X2FjcGkoKTsKKwlhY3BpX2NwdWZyZXFfZWFybHlfaW5pdF9hY3BpKCk7CiAKLQlpZiAoIXJlc3VsdCkKLSAJCXJlc3VsdCA9IGNwdWZyZXFfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX2NwdWZyZXFfZHJpdmVyKTsKLQkKLQlyZXR1cm4gKHJlc3VsdCk7CisgCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9jcHVmcmVxX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IDE0NmY2MDcuLjRmMmMzYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTI5LDExICsyOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KIAogI2luY2x1ZGUgImxvbmdoYXVsLmgiCiAKQEAgLTU2LDYgKzU4LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbWlubXVsdCwgbWF4bXVsdDsKIHN0YXRpYyBpbnQgY2FuX3NjYWxlX3ZvbHRhZ2U7CiBzdGF0aWMgaW50IHZybXJldjsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKnByID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfY3ggKmN4ID0gTlVMTDsKIAogLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KIHN0YXRpYyBpbnQgZG9udF9zY2FsZV92b2x0YWdlOwpAQCAtMTE4LDg0ICsxMjIsNjUgQEAKIAlyZXR1cm4gZWJsY3JfdGFibGVbaW52YWx1ZV07CiB9CiAKKy8qIEZvciBwcm9jZXNzb3Igd2l0aCBCQ1IyIE1TUiAqLwogCi1zdGF0aWMgdm9pZCBkb19wb3dlcnNhdmVyKHVuaW9uIG1zcl9sb25naGF1bCAqbG9uZ2hhdWwsCi0JCQl1bnNpZ25lZCBpbnQgY2xvY2tfcmF0aW9faW5kZXgpCitzdGF0aWMgdm9pZCBkb19sb25naGF1bDEoaW50IGN4X2FkZHJlc3MsIHVuc2lnbmVkIGludCBjbG9ja19yYXRpb19pbmRleCkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IHRtcF9tYXNrOwotCWludCB2ZXJzaW9uOwotCWludCBpOwotCXUxNiBwY2lfY21kOwotCXUxNiBjbWRfc3RhdGVbNjRdOworCXVuaW9uIG1zcl9iY3IyIGJjcjI7CisJdTMyIHQ7CiAKLQlzd2l0Y2ggKGNwdV9tb2RlbCkgewotCWNhc2UgQ1BVX0VaUkFfVDoKLQkJdmVyc2lvbiA9IDM7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX05FSEVNSUFIOgotCQl2ZXJzaW9uID0gMHhmOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm47Ci0JfQorCXJkbXNybChNU1JfVklBX0JDUjIsIGJjcjIudmFsKTsKKwkvKiBFbmFibGUgc29mdHdhcmUgY2xvY2sgbXVsdGlwbGllciAqLworCWJjcjIuYml0cy5FU09GVEJGID0gMTsKKwliY3IyLmJpdHMuQ0xPQ0tNVUwgPSBjbG9ja19yYXRpb19pbmRleDsKIAotCXJkbXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC0+dmFsKTsKLQlsb25naGF1bC0+Yml0cy5Tb2Z0QnVzUmF0aW8gPSBjbG9ja19yYXRpb19pbmRleCAmIDB4ZjsKLQlsb25naGF1bC0+Yml0cy5Tb2Z0QnVzUmF0aW80ID0gKGNsb2NrX3JhdGlvX2luZGV4ICYgMHgxMCkgPj4gNDsKLQlsb25naGF1bC0+Yml0cy5FbmFibGVTb2Z0QnVzUmF0aW8gPSAxOwotCWxvbmdoYXVsLT5iaXRzLlJldmlzaW9uS2V5ID0gMDsKLQotCXByZWVtcHRfZGlzYWJsZSgpOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCS8qCi0JICogZ2V0IGN1cnJlbnQgcGNpIGJ1cyBtYXN0ZXIgc3RhdGUgZm9yIGFsbCBkZXZpY2VzCi0JICogYW5kIGNsZWFyIGJ1cyBtYXN0ZXIgYml0Ci0JICovCi0JZGV2ID0gTlVMTDsKLQlpID0gMDsKLQlkbyB7Ci0JCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldik7Ci0JCWlmIChkZXYgIT0gTlVMTCkgewotCQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwotCQkJY21kX3N0YXRlW2krK10gPSBwY2lfY21kOwotCQkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfTUFTVEVSOwotCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwotCQl9Ci0JfSB3aGlsZSAoZGV2ICE9IE5VTEwpOwotCi0JdG1wX21hc2s9aW5iKDB4MjEpOwkvKiB3b3JrcyBvbiBDMy4gc2F2ZSBtYXNrLiAqLwotCW91dGIoMHhGRSwweDIxKTsJLyogVE1SMCBvbmx5ICovCi0Jb3V0YigweEZGLDB4ODApOwkvKiBkZWxheSAqLwotCisJLyogU3luYyB0byB0aW1lciB0aWNrICovCiAJc2FmZV9oYWx0KCk7Ci0Jd3Jtc3JsKE1TUl9WSUFfTE9OR0hBVUwsIGxvbmdoYXVsLT52YWwpOwotCWhhbHQoKTsKKwlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOworCS8qIENoYW5nZSBmcmVxdWVuY3kgb24gbmV4dCBoYWx0IG9yIHNsZWVwICovCisJd3Jtc3JsKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOworCS8qIEludm9rZSBDMyAqLworCWluYihjeF9hZGRyZXNzKTsKKwkvKiBEdW1teSBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwzIHJlYWQgKi8KKwl0ID0gaW5sKGFjcGlfZmFkdC54cG1fdG1yX2Jsay5hZGRyZXNzKTsKIAorCS8qIERpc2FibGUgc29mdHdhcmUgY2xvY2sgbXVsdGlwbGllciAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJcmRtc3JsKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOworCWJjcjIuYml0cy5FU09GVEJGID0gMDsKKwl3cm1zcmwoTVNSX1ZJQV9CQ1IyLCBiY3IyLnZhbCk7Cit9CiAKLQlvdXRiKHRtcF9tYXNrLDB4MjEpOwkvKiByZXN0b3JlIG1hc2sgKi8KKy8qIEZvciBwcm9jZXNzb3Igd2l0aCBMb25naGF1bCBNU1IgKi8KIAotCS8qIHJlc3RvcmUgcGNpIGJ1cyBtYXN0ZXIgc3RhdGUgZm9yIGFsbCBkZXZpY2VzICovCi0JZGV2ID0gTlVMTDsKLQlpID0gMDsKLQlkbyB7Ci0JCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIGRldik7Ci0JCWlmIChkZXYgIT0gTlVMTCkgewotCQkJcGNpX2NtZCA9IGNtZF9zdGF0ZVtpKytdOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0NPTU1BTkQsIHBjaV9jbWQpOwotCQl9Ci0JfSB3aGlsZSAoZGV2ICE9IE5VTEwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQlwcmVlbXB0X2VuYWJsZSgpOworc3RhdGljIHZvaWQgZG9fcG93ZXJzYXZlcihpbnQgY3hfYWRkcmVzcywgdW5zaWduZWQgaW50IGNsb2NrX3JhdGlvX2luZGV4KQoreworCXVuaW9uIG1zcl9sb25naGF1bCBsb25naGF1bDsKKwl1MzIgdDsKIAotCS8qIGRpc2FibGUgYnVzIHJhdGlvIGJpdCAqLwotCXJkbXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC0+dmFsKTsKLQlsb25naGF1bC0+Yml0cy5FbmFibGVTb2Z0QnVzUmF0aW8gPSAwOwotCWxvbmdoYXVsLT5iaXRzLlJldmlzaW9uS2V5ID0gdmVyc2lvbjsKLQl3cm1zcmwoTVNSX1ZJQV9MT05HSEFVTCwgbG9uZ2hhdWwtPnZhbCk7CisJcmRtc3JsKE1TUl9WSUFfTE9OR0hBVUwsIGxvbmdoYXVsLnZhbCk7CisJbG9uZ2hhdWwuYml0cy5SZXZpc2lvbktleSA9IGxvbmdoYXVsLmJpdHMuUmV2aXNpb25JRDsKKwlsb25naGF1bC5iaXRzLlNvZnRCdXNSYXRpbyA9IGNsb2NrX3JhdGlvX2luZGV4ICYgMHhmOworCWxvbmdoYXVsLmJpdHMuU29mdEJ1c1JhdGlvNCA9IChjbG9ja19yYXRpb19pbmRleCAmIDB4MTApID4+IDQ7CisJbG9uZ2hhdWwuYml0cy5FbmFibGVTb2Z0QnVzUmF0aW8gPSAxOworCisJLyogU3luYyB0byB0aW1lciB0aWNrICovCisJc2FmZV9oYWx0KCk7CisJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKKwkvKiBDaGFuZ2UgZnJlcXVlbmN5IG9uIG5leHQgaGFsdCBvciBzbGVlcCAqLworCXdybXNybChNU1JfVklBX0xPTkdIQVVMLCBsb25naGF1bC52YWwpOworCS8qIEludm9rZSBDMyAqLworCWluYihjeF9hZGRyZXNzKTsKKwkvKiBEdW1teSBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwzIHJlYWQgKi8KKwl0ID0gaW5sKGFjcGlfZmFkdC54cG1fdG1yX2Jsay5hZGRyZXNzKTsKKworCS8qIERpc2FibGUgYnVzIHJhdGlvIGJpdCAqLworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9uZ2hhdWwuYml0cy5SZXZpc2lvbktleSA9IGxvbmdoYXVsLmJpdHMuUmV2aXNpb25JRDsKKwlsb25naGF1bC5iaXRzLkVuYWJsZVNvZnRCdXNSYXRpbyA9IDA7CisJbG9uZ2hhdWwuYml0cy5FbmFibGVTb2Z0QlNFTCA9IDA7CisJbG9uZ2hhdWwuYml0cy5FbmFibGVTb2Z0VklEID0gMDsKKwl3cm1zcmwoTVNSX1ZJQV9MT05HSEFVTCwgbG9uZ2hhdWwudmFsKTsKIH0KIAogLyoqCkBAIC0yMDksOSArMTk0LDkgQEAKIHsKIAlpbnQgc3BlZWQsIG11bHQ7CiAJc3RydWN0IGNwdWZyZXFfZnJlcXMgZnJlcXM7Ci0JdW5pb24gbXNyX2xvbmdoYXVsIGxvbmdoYXVsOwotCXVuaW9uIG1zcl9iY3IyIGJjcjI7CiAJc3RhdGljIHVuc2lnbmVkIGludCBvbGRfcmF0aW89LTE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgcGljMV9tYXNrLCBwaWMyX21hc2s7CiAKIAlpZiAob2xkX3JhdGlvID09IGNsb2NrX3JhdGlvX2luZGV4KQogCQlyZXR1cm47CkBAIC0yMzQsNiArMjE5LDIwIEBACiAJZHByaW50ayAoIlNldHRpbmcgdG8gRlNCOiVkTUh6IE11bHQ6JWQuJWR4ICglcylcbiIsCiAJCQlmc2IsIG11bHQvMTAsIG11bHQlMTAsIHByaW50X3NwZWVkKHNwZWVkLzEwMDApKTsKIAorCXByZWVtcHRfZGlzYWJsZSgpOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXBpYzJfbWFzayA9IGluYigweEExKTsKKwlwaWMxX21hc2sgPSBpbmIoMHgyMSk7CS8qIHdvcmtzIG9uIEMzLiBzYXZlIG1hc2suICovCisJb3V0YigweEZGLDB4QTEpOwkvKiBPdmVya2lsbCAqLworCW91dGIoMHhGRSwweDIxKTsJLyogVE1SMCBvbmx5ICovCisKKwkvKiBEaXNhYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KKwlpZiAocHItPmZsYWdzLmJtX2NoZWNrKSB7CisJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAxLAorCQkJCSAgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOworCX0KKwogCXN3aXRjaCAobG9uZ2hhdWxfdmVyc2lvbikgewogCiAJLyoKQEAgLTI0NSwyMCArMjQ0LDcgQEAKIAkgKi8KIAljYXNlIFRZUEVfTE9OR0hBVUxfVjE6CiAJY2FzZSBUWVBFX0xPTkdIQVVMX1YyOgotCQlyZG1zcmwgKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOwotCQkvKiBFbmFibGUgc29mdHdhcmUgY2xvY2sgbXVsdGlwbGllciAqLwotCQliY3IyLmJpdHMuRVNPRlRCRiA9IDE7Ci0JCWJjcjIuYml0cy5DTE9DS01VTCA9IGNsb2NrX3JhdGlvX2luZGV4OwotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl3cm1zcmwgKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOwotCQlzYWZlX2hhbHQoKTsKLQotCQkvKiBEaXNhYmxlIHNvZnR3YXJlIGNsb2NrIG11bHRpcGxpZXIgKi8KLQkJcmRtc3JsIChNU1JfVklBX0JDUjIsIGJjcjIudmFsKTsKLQkJYmNyMi5iaXRzLkVTT0ZUQkYgPSAwOwotCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl3cm1zcmwgKE1TUl9WSUFfQkNSMiwgYmNyMi52YWwpOwotCQlsb2NhbF9pcnFfZW5hYmxlKCk7CisJCWRvX2xvbmdoYXVsMShjeC0+YWRkcmVzcywgY2xvY2tfcmF0aW9faW5kZXgpOwogCQlicmVhazsKIAogCS8qCkBAIC0yNzMsMTAgKzI1OSwyMiBAQAogCSAqIHRvIHdvcmsgaW4gcHJhY3RpY2UuCiAJICovCiAJY2FzZSBUWVBFX1BPV0VSU0FWRVI6Ci0JCWRvX3Bvd2Vyc2F2ZXIoJmxvbmdoYXVsLCBjbG9ja19yYXRpb19pbmRleCk7CisJCWRvX3Bvd2Vyc2F2ZXIoY3gtPmFkZHJlc3MsIGNsb2NrX3JhdGlvX2luZGV4KTsKIAkJYnJlYWs7CiAJfQogCisJLyogRW5hYmxlIGJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gKi8KKwlpZiAocHItPmZsYWdzLmJtX2NoZWNrKSB7CisJCWFjcGlfc2V0X3JlZ2lzdGVyKEFDUElfQklUUkVHX0FSQl9ESVNBQkxFLCAwLAorCQkJCSAgQUNQSV9NVFhfRE9fTk9UX0xPQ0spOworCX0KKworCW91dGIocGljMl9tYXNrLDB4QTEpOwkvKiByZXN0b3JlIG1hc2sgKi8KKwlvdXRiKHBpYzFfbWFzaywweDIxKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlwcmVlbXB0X2VuYWJsZSgpOworCiAJY3B1ZnJlcV9ub3RpZnlfdHJhbnNpdGlvbigmZnJlcXMsIENQVUZSRVFfUE9TVENIQU5HRSk7CiB9CiAKQEAgLTMyNCw5ICszMjIsMTEgQEAKIHN0YXRpYyBpbnQgX19pbml0IGxvbmdoYXVsX2dldF9yYW5nZXModm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGludmFsdWU7Ci0JdW5zaWduZWQgaW50IG11bHRpcGxpZXJzWzMyXT0gewotCQk1MCwzMCw0MCwxMDAsNTUsMzUsNDUsOTUsOTAsNzAsODAsNjAsMTIwLDc1LDg1LDY1LAotCQktMSwxMTAsMTIwLC0xLDEzNSwxMTUsMTI1LDEwNSwxMzAsMTUwLDE2MCwxNDAsLTEsMTU1LC0xLDE0NSB9OworCXVuc2lnbmVkIGludCBlenJhX3RfbXVsdGlwbGllcnNbMzJdPSB7CisJCQk5MCwgIDMwLCAgNDAsIDEwMCwgIDU1LCAgMzUsICA0NSwgIDk1LAorCQkJNTAsICA3MCwgIDgwLCAgNjAsIDEyMCwgIDc1LCAgODUsICA2NSwKKwkJCS0xLCAxMTAsIDEyMCwgIC0xLCAxMzUsIDExNSwgMTI1LCAxMDUsCisJCQkxMzAsIDE1MCwgMTYwLCAxNDAsICAtMSwgMTU1LCAgLTEsIDE0NSB9OwogCXVuc2lnbmVkIGludCBqLCBrID0gMDsKIAl1bmlvbiBtc3JfbG9uZ2hhdWwgbG9uZ2hhdWw7CiAJdW5zaWduZWQgbG9uZyBsbywgaGk7CkBAIC0zNTUsMTMgKzM1NSwxMyBAQAogCQkJaW52YWx1ZSA9IGxvbmdoYXVsLmJpdHMuTWF4TUh6QlI7CiAJCQlpZiAobG9uZ2hhdWwuYml0cy5NYXhNSHpCUjQpCiAJCQkJaW52YWx1ZSArPSAxNjsKLQkJCW1heG11bHQ9bXVsdGlwbGllcnNbaW52YWx1ZV07CisJCQltYXhtdWx0PWV6cmFfdF9tdWx0aXBsaWVyc1tpbnZhbHVlXTsKIAogCQkJaW52YWx1ZSA9IGxvbmdoYXVsLmJpdHMuTWluTUh6QlI7CiAJCQlpZiAobG9uZ2hhdWwuYml0cy5NaW5NSHpCUjQgPT0gMSkKIAkJCQltaW5tdWx0ID0gMzA7CiAJCQllbHNlCi0JCQkJbWlubXVsdCA9IG11bHRpcGxpZXJzW2ludmFsdWVdOworCQkJCW1pbm11bHQgPSBlenJhX3RfbXVsdGlwbGllcnNbaW52YWx1ZV07CiAJCQlmc2IgPSBlYmxjcl9mc2JfdGFibGVfdjJbbG9uZ2hhdWwuYml0cy5NYXhNSHpGU0JdOwogCQkJYnJlYWs7CiAJCX0KQEAgLTUyNyw2ICs1MjcsMTggQEAKIAlyZXR1cm4gY2FsY19zcGVlZChsb25naGF1bF9nZXRfY3B1X211bHQoKSk7CiB9CiAKK3N0YXRpYyBhY3BpX3N0YXR1cyBsb25naGF1bF93YWxrX2NhbGxiYWNrKGFjcGlfaGFuZGxlIG9ial9oYW5kbGUsCisJCQkJCSAgdTMyIG5lc3RpbmdfbGV2ZWwsCisJCQkJCSAgdm9pZCAqY29udGV4dCwgdm9pZCAqKnJldHVybl92YWx1ZSkKK3sKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmQ7CisKKwlpZiAoIGFjcGlfYnVzX2dldF9kZXZpY2Uob2JqX2hhbmRsZSwgJmQpICkgeworCQlyZXR1cm4gMDsKKwl9CisJKnJldHVybl92YWx1ZSA9ICh2b2lkICopYWNwaV9kcml2ZXJfZGF0YShkKTsKKwlyZXR1cm4gMTsKK30KIAogc3RhdGljIGludCBfX2luaXQgbG9uZ2hhdWxfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7CkBAIC01MzQsNiArNTQ2LDE1IEBACiAJY2hhciAqY3B1bmFtZT1OVUxMOwogCWludCByZXQ7CiAKKwkvKiBDaGVjayBBQ1BJIHN1cHBvcnQgZm9yIEMzIHN0YXRlICovCisJYWNwaV93YWxrX25hbWVzcGFjZShBQ1BJX1RZUEVfUFJPQ0VTU09SLCBBQ1BJX1JPT1RfT0JKRUNULCBBQ1BJX1VJTlQzMl9NQVgsCisJCQkgJmxvbmdoYXVsX3dhbGtfY2FsbGJhY2ssIE5VTEwsICh2b2lkICopJnByKTsKKwlpZiAocHIgPT0gTlVMTCkgZ290byBlcnJfYWNwaTsKKworCWN4ID0gJnByLT5wb3dlci5zdGF0ZXNbQUNQSV9TVEFURV9DM107CisJaWYgKGN4LT5hZGRyZXNzID09IDAgfHwgY3gtPmxhdGVuY3kgPiAxMDAwKSBnb3RvIGVycl9hY3BpOworCisJLyogTm93IGNoZWNrIHdoYXQgd2UgaGF2ZSBvbiB0aGlzIG1vdGhlcmJvYXJkICovCiAJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAljYXNlIDY6CiAJCWNwdV9tb2RlbCA9IENQVV9TQU1VRUw7CkBAIC02MzQsNiArNjU1LDEwIEBACiAJY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGVfZ2V0X2F0dHIobG9uZ2hhdWxfdGFibGUsIHBvbGljeS0+Y3B1KTsKIAogCXJldHVybiAwOworCitlcnJfYWNwaToKKwlwcmludGsoS0VSTl9FUlIgUEZYICJObyBBQ1BJIHN1cHBvcnQgZm9yIENQVSBmcmVxdWVuY3kgY2hhbmdlcy5cbiIpOworCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBsb25naGF1bF9jcHVfZXhpdChzdHJ1Y3QgY3B1ZnJlcV9wb2xpY3kgKnBvbGljeSkKQEAgLTY2Niw2ICs2OTEsMTggQEAKIAlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0NFTlRBVVIgfHwgYy0+eDg2ICE9IDYpCiAJCXJldHVybiAtRU5PREVWOwogCisjaWZkZWYgQ09ORklHX1NNUAorCWlmIChudW1fb25saW5lX2NwdXMoKSA+IDEpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIk1vcmUgdGhhbiAxIENQVSBkZXRlY3RlZCwgbG9uZ2hhdWwgZGlzYWJsZWQuXG4iKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKKwlpZiAoY3B1X2hhc19hcGljKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIkFQSUMgZGV0ZWN0ZWQuIExvbmdoYXVsIGlzIGN1cnJlbnRseSBicm9rZW4gaW4gdGhpcyBjb25maWd1cmF0aW9uLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKyNlbmRpZgogCXN3aXRjaCAoYy0+eDg2X21vZGVsKSB7CiAJY2FzZSA2IC4uLiA5OgogCQlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmxvbmdoYXVsX2RyaXZlcik7CkBAIC02OTksNiArNzM2LDYgQEAKIE1PRFVMRV9ERVNDUklQVElPTiAoIkxvbmdoYXVsIGRyaXZlciBmb3IgVklBIEN5cml4IHByb2Nlc3NvcnMuIik7CiBNT0RVTEVfTElDRU5TRSAoIkdQTCIpOwogCi1tb2R1bGVfaW5pdChsb25naGF1bF9pbml0KTsKK2xhdGVfaW5pdGNhbGwobG9uZ2hhdWxfaW5pdCk7CiBtb2R1bGVfZXhpdChsb25naGF1bF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwppbmRleCBlOWYwYjkyLi41YzQzYmU0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtNzU5LDcgKzc1OSw3IEBACiAJaWYgKG51bV9jYWNoZV9sZWF2ZXMgPT0gMCkKIAkJcmV0dXJuIDA7CiAKLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNhY2hlaW5mb19jcHVfbm90aWZpZXIpOworCXJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmY2FjaGVpbmZvX2NwdV9ub3RpZmllcik7CiAKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGkpIHsKIAkJY2FjaGVpbmZvX2NwdV9jYWxsYmFjaygmY2FjaGVpbmZvX2NwdV9ub3RpZmllciwgQ1BVX09OTElORSwKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuaCBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuaAppbmRleCBkYzI0MTZkLi44NGZkNGNmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9tY2hlY2svbWNlLmgKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5oCkBAIC05LDYgKzksNiBAQAogLyogQ2FsbCB0aGUgaW5zdGFsbGVkIG1hY2hpbmUgY2hlY2sgaGFuZGxlciBmb3IgdGhpcyBDUFUgc2V0dXAuICovCiBleHRlcm4gZmFzdGNhbGwgdm9pZCAoKm1hY2hpbmVfY2hlY2tfdmVjdG9yKShzdHJ1Y3QgcHRfcmVncyAqLCBsb25nIGVycm9yX2NvZGUpOwogCi1leHRlcm4gaW50IG1jZV9kaXNhYmxlZCBfX2luaXRkYXRhOworZXh0ZXJuIGludCBtY2VfZGlzYWJsZWQ7CiBleHRlcm4gaW50IG5yX21jZV9iYW5rczsKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9pMzg2L2tlcm5lbC9lbnRyeS5TCmluZGV4IGQ5YTI2MGYuLjg3ZjlmNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMKQEAgLTIwNCwxMSArMjA0LDE1IEBACiBFTlRSWShyZXRfZnJvbV9mb3JrKQogCUNGSV9TVEFSVFBST0MKIAlwdXNobCAlZWF4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC00CisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKIAljYWxsIHNjaGVkdWxlX3RhaWwKIAlHRVRfVEhSRUFEX0lORk8oJWVicCkKIAlwb3BsICVlYXgKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKKwlwdXNobCAkMHgwMjAyCQkJIyBSZXNldCBrZXJuZWwgZWZsYWdzCisJQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIDQKKwlwb3BmbAorCUNGSV9BREpVU1RfQ0ZBX09GRlNFVCAtNAogCWptcCBzeXNjYWxsX2V4aXQKIAlDRklfRU5EUFJPQwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2hlYWQuUyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCmluZGV4IGViNzlhYTIuLmE2YjhiZDggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvaGVhZC5TCkBAIC0zMTcsMjAgKzMxNywxNCBAQAogCW1vdmwgJWVheCwlZ3MKIAlsbGR0ICVheAogCWNsZAkJCSMgZ2NjMiB3YW50cyB0aGUgZGlyZWN0aW9uIGZsYWcgY2xlYXJlZCBhdCBhbGwgdGltZXMKKwlwdXNobCAlZWF4CQkjIGZha2UgcmV0dXJuIGFkZHJlc3MKICNpZmRlZiBDT05GSUdfU01QCiAJbW92YiByZWFkeSwgJWNsCiAJbW92YiAkMSwgcmVhZHkKLQljbXBiICQwLCVjbAotCWplIDFmCQkJIyB0aGUgZmlyc3QgQ1BVIGNhbGxzIHN0YXJ0X2tlcm5lbAotCQkJCSMgYWxsIG90aGVyIENQVXMgY2FsbCBpbml0aWFsaXplX3NlY29uZGFyeQotCWNhbGwgaW5pdGlhbGl6ZV9zZWNvbmRhcnkKLQlqbXAgTDYKLTE6CisJY21wYiAkMCwlY2wJCSMgdGhlIGZpcnN0IENQVSBjYWxscyBzdGFydF9rZXJuZWwKKwlqbmUgaW5pdGlhbGl6ZV9zZWNvbmRhcnkgIyBhbGwgb3RoZXIgQ1BVcyBjYWxsIGluaXRpYWxpemVfc2Vjb25kYXJ5CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCWNhbGwgc3RhcnRfa2VybmVsCi1MNjoKLQlqbXAgTDYJCQkjIG1haW4gc2hvdWxkIG5ldmVyIHJldHVybiBoZXJlLCBidXQKLQkJCQkjIGp1c3QgaW4gY2FzZSwgd2Uga25vdyB3aGF0IGhhcHBlbnMuCisJam1wIHN0YXJ0X2tlcm5lbAogCiAvKgogICogV2UgZGVwZW5kIG9uIEVUIHRvIGJlIGNvcnJlY3QuIFRoaXMgY2hlY2tzIGZvciAyODcvMzg3LgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9ocGV0LmMgYi9hcmNoL2kzODYva2VybmVsL2hwZXQuYwppbmRleCBjNjczN2MzLi4xNzY0N2E1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2hwZXQuYworKysgYi9hcmNoL2kzODYva2VybmVsL2hwZXQuYwpAQCAtMzUsNyArMzUsNyBAQAogCXZvaWQgX19pb21lbSogaHBldF9iYXNlOwogCXU2NCB0bXA7CiAKLQlpZiAoIWhwZXRfYWRkcmVzcykKKwlpZiAoIWlzX2hwZXRfZW5hYmxlZCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGNhbGN1bGF0ZSB0aGUgaHBldCBhZGRyZXNzOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pcnEuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvaXJxLmMKaW5kZXggNmNiNTI5Zi4uNWZlNTQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9pcnEuYworKysgYi9hcmNoL2kzODYva2VybmVsL2lycS5jCkBAIC04MiwxMCArODIsNiBAQAogCX0KICNlbmRpZgogCi0JaWYgKCFpcnFfZGVzY1tpcnFdLmhhbmRsZV9pcnEpIHsKLQkJX19kb19JUlEoaXJxLCByZWdzKTsKLQkJZ290byBvdXRfZXhpdDsKLQl9CiAjaWZkZWYgQ09ORklHXzRLU1RBQ0tTCiAKIAljdXJjdHggPSAodW5pb24gaXJxX2N0eCAqKSBjdXJyZW50X3RocmVhZF9pbmZvKCk7CkBAIC0xMjUsNyArMTIxLDYgQEAKICNlbmRpZgogCQlfX2RvX0lSUShpcnEsIHJlZ3MpOwogCi1vdXRfZXhpdDoKIAlpcnFfZXhpdCgpOwogCiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IGRlMmUxNmUuLmFmZTY1MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwva3Byb2Jlcy5jCkBAIC0yNTYsMTEgKzI1Niw2IEBACiAJaW50IHJldCA9IDA7CiAJa3Byb2JlX29wY29kZV90ICphZGRyOwogCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2I7Ci0jaWZkZWYgQ09ORklHX1BSRUVNUFQKLQl1bnNpZ25lZCBwcmVfcHJlZW1wdF9jb3VudCA9IHByZWVtcHRfY291bnQoKTsKLSNlbHNlCi0JdW5zaWduZWQgcHJlX3ByZWVtcHRfY291bnQgPSAxOwotI2VuZGlmCiAKIAlhZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKShyZWdzLT5laXAgLSBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiAKQEAgLTMzOCwxMyArMzMzLDE1IEBACiAJCXJldHVybiAxOwogCiBzc19wcm9iZToKLQlpZiAocHJlX3ByZWVtcHRfY291bnQgJiYgcC0+YWluc24uYm9vc3RhYmxlID09IDEgJiYgIXAtPnBvc3RfaGFuZGxlcil7CisjaWZuZGVmIENPTkZJR19QUkVFTVBUCisJaWYgKHAtPmFpbnNuLmJvb3N0YWJsZSA9PSAxICYmICFwLT5wb3N0X2hhbmRsZXIpewogCQkvKiBCb29zdCB1cCAtLSB3ZSBjYW4gZXhlY3V0ZSBjb3BpZWQgaW5zdHJ1Y3Rpb25zIGRpcmVjdGx5ICovCiAJCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CiAJCXJlZ3MtPmVpcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc247CiAJCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKIAkJcmV0dXJuIDE7CiAJfQorI2VuZGlmCiAJcHJlcGFyZV9zaW5nbGVzdGVwKHAsIHJlZ3MpOwogCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCmluZGV4IDUxMWFiZTUuLjZiMWFlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0xODksMTQgKzE4OSwxMSBAQAogCW1lbWNweSgodm9pZCAqKXJlYm9vdF9jb2RlX2J1ZmZlciwgcmVsb2NhdGVfbmV3X2tlcm5lbCwKIAkJCQkJCXJlbG9jYXRlX25ld19rZXJuZWxfc2l6ZSk7CiAKLQkvKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBhcmUKLQkgKiBhdXRvbWF0aWNhbGx5IGxvYWRlZCBmcm9tIGEgdGFibGUsIGluIG1lbW9yeSB3aGVyZXZlciB5b3UKLQkgKiBzZXQgdGhlbSB0byBhIHNwZWNpZmljIHNlbGVjdG9yLCBidXQgdGhpcyB0YWJsZSBpcyBuZXZlcgotCSAqIGFjY2Vzc2VkIGFnYWluIHlvdSBzZXQgdGhlIHNlZ21lbnQgdG8gYSBkaWZmZXJlbnQgc2VsZWN0b3IuCi0JICoKLQkgKiBUaGUgbW9yZSBjb21tb24gbW9kZWwgaXMgYXJlIGNhY2hlcyB3aGVyZSB0aGUgYmVoaWRlCi0JICogdGhlIHNjZW5lcyB3b3JrIGlzIGRvbmUsIGJ1dCBpcyBhbHNvIGRyb3BwZWQgYXQgYXJiaXRyYXJ5Ci0JICogdGltZXMuCisJLyogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKKwkgKiB2aXNpYmxlIGFuZCBhbiBpbnZpc2libGUgcGFydC4gIFdoZW5ldmVyIHRoZSB2aXNpYmxlIHBhcnQgaXMKKwkgKiBzZXQgdG8gYSBzcGVjaWZpYyBzZWxlY3RvciwgdGhlIGludmlzaWJsZSBwYXJ0IGlzIGxvYWRlZAorCSAqIHdpdGggZnJvbSBhIHRhYmxlIGluIG1lbW9yeS4gIEF0IG5vIG90aGVyIHRpbWUgaXMgdGhlCisJICogZGVzY3JpcHRvciB0YWJsZSBpbiBtZW1vcnkgYWNjZXNzZWQuCiAJICoKIAkgKiBJIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgaGVyZSBieSBmb3JjZSBsb2FkaW5nIHRoZQogCSAqIHNlZ21lbnRzLCBiZWZvcmUgSSB6YXAgdGhlIGdkdCB3aXRoIGFuIGludmFsaWQgdmFsdWUuCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL25taS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwppbmRleCAyZGQ5MjhhLi5hY2IzNTE0IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL25taS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKQEAgLTU3NSw2ICs1NzUsNyBAQAogCSAqLwogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIH0KK0VYUE9SVF9TWU1CT0wodG91Y2hfbm1pX3dhdGNoZG9nKTsKIAogZXh0ZXJuIHZvaWQgZGllX25taShzdHJ1Y3QgcHRfcmVncyAqLCBjb25zdCBjaGFyICptc2cpOwogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IDkyM2JiMjkuLjg2NTdjNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC02OTAsOCArNjkwLDggQEAKIAkvKgogCSAqIE5vdyBtYXliZSBoYW5kbGUgZGVidWcgcmVnaXN0ZXJzIGFuZC9vciBJTyBiaXRtYXBzCiAJICovCi0JaWYgKHVubGlrZWx5KCh0YXNrX3RocmVhZF9pbmZvKG5leHRfcCktPmZsYWdzICYgX1RJRl9XT1JLX0NUWFNXKSkKLQkgICAgfHwgdGVzdF90c2tfdGhyZWFkX2ZsYWcocHJldl9wLCBUSUZfSU9fQklUTUFQKSkKKwlpZiAodW5saWtlbHkoKHRhc2tfdGhyZWFkX2luZm8obmV4dF9wKS0+ZmxhZ3MgJiBfVElGX1dPUktfQ1RYU1cpCisJICAgIHx8IHRlc3RfdHNrX3RocmVhZF9mbGFnKHByZXZfcCwgVElGX0lPX0JJVE1BUCkpKQogCQlfX3N3aXRjaF90b194dHJhKG5leHRfcCwgdHNzKTsKIAogCWRpc2FibGVfdHNjKHByZXZfcCwgbmV4dF9wKTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggNmY1ZmVhMC4uZjk0ODQxOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKQEAgLTIxMiwxNCArMjEyLDIwIEBACiAgKiB0aGVuIHdlIHByaW50IGEgd2FybmluZyBpZiBub3QsIGFuZCBhbHdheXMgcmVzeW5jLgogICovCiAKLXN0YXRpYyBhdG9taWNfdCB0c2Nfc3RhcnRfZmxhZyA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIGF0b21pY190IHRzY19jb3VudF9zdGFydCA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIGF0b21pY190IHRzY19jb3VudF9zdG9wID0gQVRPTUlDX0lOSVQoMCk7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHRzY192YWx1ZXNbTlJfQ1BVU107CitzdGF0aWMgc3RydWN0IHsKKwlhdG9taWNfdCBzdGFydF9mbGFnOworCWF0b21pY190IGNvdW50X3N0YXJ0OworCWF0b21pY190IGNvdW50X3N0b3A7CisJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlc1tOUl9DUFVTXTsKK30gdHNjIF9faW5pdGRhdGEgPSB7CisJLnN0YXJ0X2ZsYWcgPSBBVE9NSUNfSU5JVCgwKSwKKwkuY291bnRfc3RhcnQgPSBBVE9NSUNfSU5JVCgwKSwKKwkuY291bnRfc3RvcCA9IEFUT01JQ19JTklUKDApLAorfTsKIAogI2RlZmluZSBOUl9MT09QUyA1CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzeW5jaHJvbml6ZV90c2NfYnAgKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgc3luY2hyb25pemVfdHNjX2JwKHZvaWQpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBsb25nIHQwOwpAQCAtMjMzLDcgKzIzOSw3IEBACiAJLyogY29udmVydCBmcm9tIGtjeWMvc2VjIHRvIGN5Yy91c2VjICovCiAJb25lX3VzZWMgPSBjcHVfa2h6IC8gMTAwMDsKIAotCWF0b21pY19zZXQoJnRzY19zdGFydF9mbGFnLCAxKTsKKwlhdG9taWNfc2V0KCZ0c2Muc3RhcnRfZmxhZywgMSk7CiAJd21iKCk7CiAKIAkvKgpAQCAtMjUwLDE2ICsyNTYsMTYgQEAKIAkJLyoKIAkJICogYWxsIEFQcyBzeW5jaHJvbml6ZSBidXQgdGhleSBsb29wIG9uICc9PSBudW1fY3B1cycKIAkJICovCi0JCXdoaWxlIChhdG9taWNfcmVhZCgmdHNjX2NvdW50X3N0YXJ0KSAhPSBudW1fYm9vdGluZ19jcHVzKCktMSkKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZ0c2MuY291bnRfc3RhcnQpICE9IG51bV9ib290aW5nX2NwdXMoKS0xKQogCQkJY3B1X3JlbGF4KCk7Ci0JCWF0b21pY19zZXQoJnRzY19jb3VudF9zdG9wLCAwKTsKKwkJYXRvbWljX3NldCgmdHNjLmNvdW50X3N0b3AsIDApOwogCQl3bWIoKTsKIAkJLyoKIAkJICogdGhpcyBsZXRzIHRoZSBBUHMgc2F2ZSB0aGVpciBjdXJyZW50IFRTQzoKIAkJICovCi0JCWF0b21pY19pbmMoJnRzY19jb3VudF9zdGFydCk7CisJCWF0b21pY19pbmMoJnRzYy5jb3VudF9zdGFydCk7CiAKLQkJcmR0c2NsbCh0c2NfdmFsdWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOworCQlyZHRzY2xsKHRzYy52YWx1ZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXSk7CiAJCS8qCiAJCSAqIFdlIGNsZWFyIHRoZSBUU0MgaW4gdGhlIGxhc3QgbG9vcDoKIAkJICovCkBAIC0yNjksNTYgKzI3NSw1NCBAQAogCQkvKgogCQkgKiBXYWl0IGZvciBhbGwgQVBzIHRvIGxlYXZlIHRoZSBzeW5jaHJvbml6YXRpb24gcG9pbnQ6CiAJCSAqLwotCQl3aGlsZSAoYXRvbWljX3JlYWQoJnRzY19jb3VudF9zdG9wKSAhPSBudW1fYm9vdGluZ19jcHVzKCktMSkKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZ0c2MuY291bnRfc3RvcCkgIT0gbnVtX2Jvb3RpbmdfY3B1cygpLTEpCiAJCQljcHVfcmVsYXgoKTsKLQkJYXRvbWljX3NldCgmdHNjX2NvdW50X3N0YXJ0LCAwKTsKKwkJYXRvbWljX3NldCgmdHNjLmNvdW50X3N0YXJ0LCAwKTsKIAkJd21iKCk7Ci0JCWF0b21pY19pbmMoJnRzY19jb3VudF9zdG9wKTsKKwkJYXRvbWljX2luYygmdHNjLmNvdW50X3N0b3ApOwogCX0KIAogCXN1bSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewogCQlpZiAoY3B1X2lzc2V0KGksIGNwdV9jYWxsb3V0X21hcCkpIHsKLQkJCXQwID0gdHNjX3ZhbHVlc1tpXTsKKwkJCXQwID0gdHNjLnZhbHVlc1tpXTsKIAkJCXN1bSArPSB0MDsKIAkJfQogCX0KIAlhdmcgPSBzdW07CiAJZG9fZGl2KGF2ZywgbnVtX2Jvb3RpbmdfY3B1cygpKTsKIAotCXN1bSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgewogCQlpZiAoIWNwdV9pc3NldChpLCBjcHVfY2FsbG91dF9tYXApKQogCQkJY29udGludWU7Ci0JCWRlbHRhID0gdHNjX3ZhbHVlc1tpXSAtIGF2ZzsKKwkJZGVsdGEgPSB0c2MudmFsdWVzW2ldIC0gYXZnOwogCQlpZiAoZGVsdGEgPCAwKQogCQkJZGVsdGEgPSAtZGVsdGE7CiAJCS8qCiAJCSAqIFdlIHJlcG9ydCBiaWdnZXIgdGhhbiAyIG1pY3Jvc2Vjb25kcyBjbG9jayBkaWZmZXJlbmNlcy4KIAkJICovCiAJCWlmIChkZWx0YSA+IDIqb25lX3VzZWMpIHsKLQkJCWxvbmcgcmVhbGRlbHRhOworCQkJbG9uZyBsb25nIHJlYWxkZWx0YTsKKwogCQkJaWYgKCFidWdneSkgewogCQkJCWJ1Z2d5ID0gMTsKIAkJCQlwcmludGsoIlxuIik7CiAJCQl9CiAJCQlyZWFsZGVsdGEgPSBkZWx0YTsKIAkJCWRvX2RpdihyZWFsZGVsdGEsIG9uZV91c2VjKTsKLQkJCWlmICh0c2NfdmFsdWVzW2ldIDwgYXZnKQorCQkJaWYgKHRzYy52YWx1ZXNbaV0gPCBhdmcpCiAJCQkJcmVhbGRlbHRhID0gLXJlYWxkZWx0YTsKIAotCQkJaWYgKHJlYWxkZWx0YSA+IDApCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIyVkIGhhZCAlbGQgdXNlY3MgVFNDICIKKwkJCWlmIChyZWFsZGVsdGEpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIyVkIGhhZCAlTGQgdXNlY3MgVFNDICIKIAkJCQkJInNrZXcsIGZpeGVkIGl0IHVwLlxuIiwgaSwgcmVhbGRlbHRhKTsKIAkJfQotCi0JCXN1bSArPSBkZWx0YTsKIAl9CiAJaWYgKCFidWdneSkKIAkJcHJpbnRrKCJwYXNzZWQuXG4iKTsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IHN5bmNocm9uaXplX3RzY19hcCAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzeW5jaHJvbml6ZV90c2NfYXAodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtMzI3LDIwICszMzEsMjAgQEAKIAkgKiB0aGlzIGdldHMgY2FsbGVkLCBzbyB3ZSBmaXJzdCB3YWl0IGZvciB0aGUgQlAgdG8KIAkgKiBmaW5pc2ggU01QIGluaXRpYWxpemF0aW9uOgogCSAqLwotCXdoaWxlICghYXRvbWljX3JlYWQoJnRzY19zdGFydF9mbGFnKSkKKwl3aGlsZSAoIWF0b21pY19yZWFkKCZ0c2Muc3RhcnRfZmxhZykpCiAJCWNwdV9yZWxheCgpOwogCiAJZm9yIChpID0gMDsgaSA8IE5SX0xPT1BTOyBpKyspIHsKLQkJYXRvbWljX2luYygmdHNjX2NvdW50X3N0YXJ0KTsKLQkJd2hpbGUgKGF0b21pY19yZWFkKCZ0c2NfY291bnRfc3RhcnQpICE9IG51bV9ib290aW5nX2NwdXMoKSkKKwkJYXRvbWljX2luYygmdHNjLmNvdW50X3N0YXJ0KTsKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZ0c2MuY291bnRfc3RhcnQpICE9IG51bV9ib290aW5nX2NwdXMoKSkKIAkJCWNwdV9yZWxheCgpOwogCi0JCXJkdHNjbGwodHNjX3ZhbHVlc1tzbXBfcHJvY2Vzc29yX2lkKCldKTsKKwkJcmR0c2NsbCh0c2MudmFsdWVzW3NtcF9wcm9jZXNzb3JfaWQoKV0pOwogCQlpZiAoaSA9PSBOUl9MT09QUy0xKQogCQkJd3JpdGVfdHNjKDAsIDApOwogCi0JCWF0b21pY19pbmMoJnRzY19jb3VudF9zdG9wKTsKLQkJd2hpbGUgKGF0b21pY19yZWFkKCZ0c2NfY291bnRfc3RvcCkgIT0gbnVtX2Jvb3RpbmdfY3B1cygpKQorCQlhdG9taWNfaW5jKCZ0c2MuY291bnRfc3RvcCk7CisJCXdoaWxlIChhdG9taWNfcmVhZCgmdHNjLmNvdW50X3N0b3ApICE9IG51bV9ib290aW5nX2NwdXMoKSkKIAkJCWNwdV9yZWxheCgpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdGltZS5jIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMKaW5kZXggODcwNWMwZi4uZWRkMDBmNiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgcGMgPSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpOwogCi0JaWYgKGluX2xvY2tfZnVuY3Rpb25zKHBjKSkKKwlpZiAoIXVzZXJfbW9kZV92bShyZWdzKSAmJiBpbl9sb2NrX2Z1bmN0aW9ucyhwYykpCiAJCXJldHVybiAqKHVuc2lnbmVkIGxvbmcgKikocmVncy0+ZWJwICsgNCk7CiAKIAlyZXR1cm4gcGM7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMgYi9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKaW5kZXggMzEzYWMxZi4uN2U5ZWRhZiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwpAQCAtOTIsNyArOTIsMTEgQEAKIGFzbWxpbmthZ2Ugdm9pZCBtYWNoaW5lX2NoZWNrKHZvaWQpOwogCiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDI0OworI2lmZGVmIENPTkZJR19TVEFDS19VTldJTkQKIHN0YXRpYyBpbnQgY2FsbF90cmFjZSA9IDE7CisjZWxzZQorI2RlZmluZSBjYWxsX3RyYWNlICgtMSkKKyNlbmRpZgogQVRPTUlDX05PVElGSUVSX0hFQUQoaTM4NmRpZV9jaGFpbik7CiAKIGludCByZWdpc3Rlcl9kaWVfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKQEAgLTE4OCwxMCArMTkyLDIwIEBACiAJCQkJdW53X3JldCA9IHNob3dfdHJhY2VfdW53aW5kKCZpbmZvLCBsb2dfbHZsKTsKIAkJfQogCQlpZiAodW53X3JldCA+IDApIHsKLQkJCWlmIChjYWxsX3RyYWNlID4gMCkKKwkJCWlmIChjYWxsX3RyYWNlID09IDEgJiYgIWFyY2hfdW53X3VzZXJfbW9kZSgmaW5mbykpIHsKKwkJCQlwcmludF9zeW1ib2woIkRXQVJGMiB1bndpbmRlciBzdHVjayBhdCAlc1xuIiwKKwkJCQkJICAgICBVTldfUEMoJmluZm8pKTsKKwkJCQlpZiAoVU5XX1NQKCZpbmZvKSA+PSBQQUdFX09GRlNFVCkgeworCQkJCQlwcmludGsoIkxlZnRvdmVyIGluZXhhY3QgYmFja3RyYWNlOlxuIik7CisJCQkJCXN0YWNrID0gKHZvaWQgKilVTldfU1AoJmluZm8pOworCQkJCX0gZWxzZQorCQkJCQlwcmludGsoIkZ1bGwgaW5leGFjdCBiYWNrdHJhY2UgYWdhaW46XG4iKTsKKwkJCX0gZWxzZSBpZiAoY2FsbF90cmFjZSA+PSAxKQogCQkJCXJldHVybjsKLQkJCXByaW50aygiJXNMZWdhY3kgY2FsbCB0cmFjZTpcbiIsIGxvZ19sdmwpOwotCQl9CisJCQllbHNlCisJCQkJcHJpbnRrKCJGdWxsIGluZXhhY3QgYmFja3RyYWNlIGFnYWluOlxuIik7CisJCX0gZWxzZQorCQkJcHJpbnRrKCJJbmV4YWN0IGJhY2t0cmFjZTpcbiIpOwogCX0KIAogCWlmICh0YXNrID09IGN1cnJlbnQpIHsKQEAgLTQ0MiwxMSArNDU2LDkgQEAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Iik7CiAKLQlpZiAocGFuaWNfb25fb29wcykgewotCQlwcmludGsoS0VSTl9FTUVSRyAiRmF0YWwgZXhjZXB0aW9uOiBwYW5pYyBpbiA1IHNlY29uZHNcbiIpOwotCQlzc2xlZXAoNSk7CisJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKLQl9CisKIAlvb3BzX2V4aXQoKTsKIAlkb19leGl0KFNJR1NFR1YpOwogfQpAQCAtMTIzMiwxNCArMTI0NCwxOCBAQAogfQogX19zZXR1cCgia3N0YWNrPSIsIGtzdGFja19zZXR1cCk7CiAKKyNpZmRlZiBDT05GSUdfU1RBQ0tfVU5XSU5ECiBzdGF0aWMgaW50IF9faW5pdCBjYWxsX3RyYWNlX3NldHVwKGNoYXIgKnMpCiB7CiAJaWYgKHN0cmNtcChzLCAib2xkIikgPT0gMCkKIAkJY2FsbF90cmFjZSA9IC0xOwogCWVsc2UgaWYgKHN0cmNtcChzLCAiYm90aCIpID09IDApCiAJCWNhbGxfdHJhY2UgPSAwOwotCWVsc2UgaWYgKHN0cmNtcChzLCAibmV3IikgPT0gMCkKKwllbHNlIGlmIChzdHJjbXAocywgIm5ld2ZhbGxiYWNrIikgPT0gMCkKIAkJY2FsbF90cmFjZSA9IDE7CisJZWxzZSBpZiAoc3RyY21wKHMsICJuZXciKSA9PSAyKQorCQljYWxsX3RyYWNlID0gMjsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImNhbGxfdHJhY2U9IiwgY2FsbF90cmFjZV9zZXR1cCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdnN5c2NhbGwubGRzLlMgYi9hcmNoL2kzODYva2VybmVsL3ZzeXNjYWxsLmxkcy5TCmluZGV4IGUyNjk3NWYuLmY2NmNkMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvdnN5c2NhbGwubGRzLlMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC92c3lzY2FsbC5sZHMuUwpAQCAtMTAsNiArMTAsNyBAQAogICAuID0gVkRTT19QUkVMSU5LICsgU0laRU9GX0hFQURFUlM7CiAKICAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CQk6dGV4dAorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CiAgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CiAgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CiAgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMgYi9hcmNoL2kzODYvb3Byb2ZpbGUvbm1pX2ludC5jCmluZGV4IGM4YzFkZjguLjVmOGRjOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9vcHJvZmlsZS9ubWlfaW50LmMKKysrIGIvYXJjaC9pMzg2L29wcm9maWxlL25taV9pbnQuYwpAQCAtMzM3LDYgKzMzNyw4IEBACiAKIAlpZiAoY3B1X21vZGVsID09IDE0KQogCQkqY3B1X3R5cGUgPSAiaTM4Ni9jb3JlIjsKKwllbHNlIGlmIChjcHVfbW9kZWwgPT0gMTUpCisJCSpjcHVfdHlwZSA9ICJpMzg2L2NvcmVfMiI7CiAJZWxzZSBpZiAoY3B1X21vZGVsID4gMHhkKQogCQlyZXR1cm4gMDsKIAllbHNlIGlmIChjcHVfbW9kZWwgPT0gOSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9pbml0LmMgYi9hcmNoL2kzODYvcGNpL2luaXQuYwppbmRleCBjNzY1MGE3ZS4uNTEwODdhOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L3BjaS9pbml0LmMKKysrIGIvYXJjaC9pMzg2L3BjaS9pbml0LmMKQEAgLTE0LDggKzE0LDEyIEBACiAjaWZkZWYgQ09ORklHX1BDSV9CSU9TCiAJcGNpX3BjYmlvc19pbml0KCk7CiAjZW5kaWYKLQlpZiAocmF3X3BjaV9vcHMpCi0JCXJldHVybiAwOworCS8qCisJICogZG9uJ3QgY2hlY2sgZm9yIHJhd19wY2lfb3BzIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHBjYmlvcyBhcyBsYXN0CisJICogZmFsbGJhY2ssIHlldCBpdCdzIG5lZWRlZCB0byBydW4gZmlyc3QgdG8gc2V0IHBjaWJpb3NfbGFzdF9idXMKKwkgKiBpbiBjYXNlIGxlZ2FjeSBQQ0kgcHJvYmluZyBpcyB1c2VkLiBvdGhlcndpc2UgZGV0ZWN0aW5nIHBlZXIgYnVzc2VzCisJICogZmFpbHMuCisJICovCiAjaWZkZWYgQ09ORklHX1BDSV9ESVJFQ1QKIAlwY2lfZGlyZWN0X2luaXQoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCmluZGV4IGU1NDViMDkuLjk3MjE4MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYworKysgYi9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCQkJCXBjaV9leHBfc2V0X2Rldl9iYXNlKGFkZHIsIGssIFBDSV9ERVZGTihpLCAwKSk7CiAJCQlpZiAoYWRkciA9PSAwIHx8CiAJCQkgICAgcmVhZGwoKHUzMiBfX2lvbWVtICopbW1jZmdfdmlydF9hZGRyKSAhPSB2YWwxKSB7Ci0JCQkJc2V0X2JpdChpLCBmYWxsYmFja19zbG90cyk7CisJCQkJc2V0X2JpdChpICsgMzIqaywgZmFsbGJhY2tfc2xvdHMpOwogCQkJCXByaW50ayhLRVJOX05PVElDRQogCQkJIlBDSTogTm8gbW1jb25maWcgcG9zc2libGUgb24gJXg6JXhcbiIsIGssIGkpOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA0N2RlOWVlLi5kYjI3NGRhIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNzUsNiArNzUsMTAgQEAKIAlkZXBlbmRzIG9uIElBNjRfU0dJX1NOMgogCWRlZmF1bHQgeQogCitjb25maWcgQVVESVRfQVJDSAorCWJvb2wKKwlkZWZhdWx0IHkKKwogY2hvaWNlCiAJcHJvbXB0ICJTeXN0ZW0gdHlwZSIKIAlkZWZhdWx0IElBNjRfR0VORVJJQwpAQCAtMjU4LDcgKzI2Miw3IEBACiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBDUFVzICgyLTEwMjQpIgogCXJhbmdlIDIgMTAyNAogCWRlcGVuZHMgb24gU01QCi0JZGVmYXVsdCAiNjQiCisJZGVmYXVsdCAiMTAyNCIKIAloZWxwCiAJICBZb3Ugc2hvdWxkIHNldCB0aGlzIHRvIHRoZSBudW1iZXIgb2YgQ1BVcyBpbiB5b3VyIHN5c3RlbSwgYnV0CiAJICBrZWVwIGluIG1pbmQgdGhhdCBhIGtlcm5lbCBjb21waWxlZCBmb3IsIGUuZy4sIDIgQ1BVcyB3aWxsIGJvb3QgYnV0CkBAIC0zNTQsNyArMzU4LDcgQEAKIGNvbmZpZyBOT0RFU19TSElGVAogCWludCAiTWF4IG51bSBub2RlcyBzaGlmdCgzLTEwKSIKIAlyYW5nZSAzIDEwCi0JZGVmYXVsdCAiOCIKKwlkZWZhdWx0ICIxMCIKIAlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIHlvdXIgU1NJIHN5c3RlbS4KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcgYi9hcmNoL2lhNjQvY29uZmlncy9zbjJfZGVmY29uZmlnCmluZGV4IDllYTM1MzkuLjBmMTRhODIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9jb25maWdzL3NuMl9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc24yX2RlZmNvbmZpZwpAQCAtMzYzLDcgKzM2Myw3IEBACiAjCiBDT05GSUdfSURFX0dFTkVSSUM9eQogQ09ORklHX0JMS19ERVZfSURFUENJPXkKLSMgQ09ORklHX0lERVBDSV9TSEFSRV9JUlEgaXMgbm90IHNldAorQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kZWZjb25maWcgYi9hcmNoL2lhNjQvZGVmY29uZmlnCmluZGV4IDZjYmE1NWQuLjkwMDFiM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kZWZjb25maWcKKysrIGIvYXJjaC9pYTY0L2RlZmNvbmZpZwpAQCAtMzY2LDcgKzM2Niw3IEBACiAjIENPTkZJR19JREVfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lERVBOUCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQotIyBDT05GSUdfSURFUENJX1NIQVJFX0lSUSBpcyBub3Qgc2V0CitDT05GSUdfSURFUENJX1NIQVJFX0lSUT15CiAjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0dFTkVSSUM9eQogIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1zY3NpLmMKaW5kZXggYTNmZTk3NS4uOGYwYTE2YTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jCisrKyBiL2FyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jCkBAIC0xNTEsNyArMTUxLDcgQEAKIHNpbXNjc2lfc2dfcmVhZHdyaXRlIChzdHJ1Y3Qgc2NzaV9jbW5kICpzYywgaW50IG1vZGUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQogewogCWludCBsaXN0X2xlbiA9IHNjLT51c2Vfc2c7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzbCA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKilzYy0+YnVmZmVyOworCXN0cnVjdCBzY2F0dGVybGlzdCAqc2wgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopc2MtPnJlcXVlc3RfYnVmZmVyOwogCXN0cnVjdCBkaXNrX3N0YXQgc3RhdDsKIAlzdHJ1Y3QgZGlza19yZXEgcmVxOwogCkBAIC0yNDQsNyArMjQ0LDggQEAKIAogCWlmIChzY2F0dGVybGVuID09IDApCiAJCW1lbWNweShzYy0+cmVxdWVzdF9idWZmZXIsIGJ1ZiwgbGVuKTsKLQllbHNlIGZvciAoc2xwID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjLT5idWZmZXI7IHNjYXR0ZXJsZW4tLSA+IDAgJiYgbGVuID4gMDsgc2xwKyspIHsKKwllbHNlIGZvciAoc2xwID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKXNjLT5yZXF1ZXN0X2J1ZmZlcjsKKwkJICBzY2F0dGVybGVuLS0gPiAwICYmIGxlbiA+IDA7IHNscCsrKSB7CiAJCXVuc2lnbmVkIHRoaXNsZW4gPSBtaW4obGVuLCBzbHAtPmxlbmd0aCk7CiAKIAkJbWVtY3B5KHBhZ2VfYWRkcmVzcyhzbHAtPnBhZ2UpICsgc2xwLT5vZmZzZXQsIGJ1ZiwgdGhpc2xlbik7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jIGIvYXJjaC9pYTY0L2lhMzIvYXVkaXQuYwppbmRleCBhYjk0ZjJlLi45MmQ3ZDBjIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9hdWRpdC5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL2F1ZGl0LmMKQEAgLTksMyArOSwyOSBAQAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+CiB+MFUKIH07CisKK3Vuc2lnbmVkIGlhMzJfd3JpdGVfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF93cml0ZS5oPgorfjBVCit9OworCit1bnNpZ25lZCBpYTMyX3JlYWRfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9yZWFkLmg+Cit+MFUKK307CisKK2ludCBpYTMyX2NsYXNzaWZ5X3N5c2NhbGwodW5zaWduZWQgc3lzY2FsbCkKK3sKKwlzd2l0Y2goc3lzY2FsbCkgeworCWNhc2UgX19OUl9vcGVuOgorCQlyZXR1cm4gMjsKKwljYXNlIF9fTlJfb3BlbmF0OgorCQlyZXR1cm4gMzsKKwljYXNlIF9fTlJfc29ja2V0Y2FsbDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBfX05SX2V4ZWN2ZToKKwkJcmV0dXJuIDU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggMGU0NTUzZi4uYWQ4MjE1YSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC00NSw3ICs0NSw4IEBACiBxdWlldF9jbWRfZ2F0ZSA9IEdBVEUgJEAKICAgICAgIGNtZF9nYXRlID0gJChDQykgLW5vc3RkbGliICQoR0FURUNGTEFHU18kKEBGKSkgLVdsLC1ULCQoZmlsdGVyLW91dCBGT1JDRSwkXikgLW8gJEAKIAotR0FURUNGTEFHU19nYXRlLnNvID0gLXNoYXJlZCAtcyAtV2wsLXNvbmFtZT1saW51eC1nYXRlLnNvLjEKK0dBVEVDRkxBR1NfZ2F0ZS5zbyA9IC1zaGFyZWQgLXMgLVdsLC1zb25hbWU9bGludXgtZ2F0ZS5zby4xIFwKKwkJICAgICAkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQogJChvYmopL2dhdGUuc286ICQob2JqKS9nYXRlLmxkcyAkKG9iaikvZ2F0ZS5vIEZPUkNFCiAJJChjYWxsIGlmX2NoYW5nZWQsZ2F0ZSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCA5OTc2MWI4Li4wMTc2NTU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtNTUsNyArNTUsNyBAQAogCiAjZGVmaW5lIEJBRF9NQURUX0VOVFJZKGVudHJ5LCBlbmQpICggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCQkoIWVudHJ5KSB8fCAodW5zaWduZWQgbG9uZyllbnRyeSArIHNpemVvZigqZW50cnkpID4gZW5kIHx8ICBcCi0JCSgoYWNwaV90YWJsZV9lbnRyeV9oZWFkZXIgKillbnRyeSktPmxlbmd0aCAhPSBzaXplb2YoKmVudHJ5KSkKKwkJKChhY3BpX3RhYmxlX2VudHJ5X2hlYWRlciAqKWVudHJ5KS0+bGVuZ3RoIDwgc2l6ZW9mKCplbnRyeSkpCiAKICNkZWZpbmUgUFJFRklYCQkJIkFDUEk6ICIKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9hdWRpdC5jCmluZGV4IGYyNTEyOTMuLjA0NjgyNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvYXVkaXQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2F1ZGl0LmMKQEAgLTgsMTkgKzgsNTQgQEAKIH4wVQogfTsKIAorc3RhdGljIHVuc2lnbmVkIHJlYWRfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9yZWFkLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCB3cml0ZV9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3dyaXRlLmg+Cit+MFUKK307CisKIHN0YXRpYyB1bnNpZ25lZCBjaGF0dHJfY2xhc3NbXSA9IHsKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgogfjBVCiB9OwogCitpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKQoreworI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKKwlleHRlcm4gaW50IGlhMzJfY2xhc3NpZnlfc3lzY2FsbCh1bnNpZ25lZCk7CisJaWYgKGFiaSA9PSBBVURJVF9BUkNIX0kzODYpCisJCXJldHVybiBpYTMyX2NsYXNzaWZ5X3N5c2NhbGwoc3lzY2FsbCk7CisjZW5kaWYKKwlzd2l0Y2goc3lzY2FsbCkgeworCWNhc2UgX19OUl9vcGVuOgorCQlyZXR1cm4gMjsKKwljYXNlIF9fTlJfb3BlbmF0OgorCQlyZXR1cm4gMzsKKwljYXNlIF9fTlJfZXhlY3ZlOgorCQlyZXR1cm4gNTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IGF1ZGl0X2NsYXNzZXNfaW5pdCh2b2lkKQogewogI2lmZGVmIENPTkZJR19JQTMyX1NVUFBPUlQKIAlleHRlcm4gX191MzIgaWEzMl9kaXJfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgaWEzMl93cml0ZV9jbGFzc1tdOworCWV4dGVybiBfX3UzMiBpYTMyX3JlYWRfY2xhc3NbXTsKIAlleHRlcm4gX191MzIgaWEzMl9jaGF0dHJfY2xhc3NbXTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURV8zMiwgaWEzMl93cml0ZV9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRF8zMiwgaWEzMl9yZWFkX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEVfMzIsIGlhMzJfZGlyX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFJfMzIsIGlhMzJfY2hhdHRyX2NsYXNzKTsKICNlbmRpZgorCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFLCB3cml0ZV9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRCwgcmVhZF9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFLCBkaXJfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUiwgY2hhdHRyX2NsYXNzKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMgYi9hcmNoL2lhNjQva2VybmVsL2VmaS5jCmluZGV4IGU0YmZhOWQuLmJiODc3MGEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvZWZpLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lZmkuYwpAQCAtNjMyLDcgKzYzMiw3IEBACiAJCWlmIChwaHlzX2FkZHIgLSBtZC0+c3RhcnQgPCAobWQtPm51bV9wYWdlcyA8PCBFRklfUEFHRV9TSElGVCkpCiAJCQkgcmV0dXJuIG1kOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGVmaV9tZW1vcnlfZGVzY190ICoKQEAgLTY1Miw3ICs2NTIsNyBAQAogCQlpZiAocGh5c19hZGRyIC0gbWQtPnBoeXNfYWRkciA8IChtZC0+bnVtX3BhZ2VzIDw8IEVGSV9QQUdFX1NISUZUKSkKIAkJCSByZXR1cm4gbWQ7CiAJfQotCXJldHVybiAwOworCXJldHVybiBOVUxMOwogfQogCiB1MzIKQEAgLTkyMyw3ICs5MjMsNyBAQAogdm9pZAogZWZpX21lbW1hcF9pbml0KHVuc2lnbmVkIGxvbmcgKnMsIHVuc2lnbmVkIGxvbmcgKmUpCiB7Ci0Jc3RydWN0IGtlcm5fbWVtZGVzYyAqaywgKnByZXYgPSAwOworCXN0cnVjdCBrZXJuX21lbWRlc2MgKmssICpwcmV2ID0gTlVMTDsKIAl1NjQJY29udGlnX2xvdz0wLCBjb250aWdfaGlnaD0wOwogCXU2NAlhcywgYWUsIGxpbTsKIAl2b2lkICplZmlfbWFwX3N0YXJ0LCAqZWZpX21hcF9lbmQsICpwLCAqcTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwppbmRleCAxMjcwMWNmLi5mZWYwNjU3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCkBAIC0xNjA1LDggKzE2MDUsOCBAQAogCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkJLy8gMTI5NSByZXNlcnZlZCBmb3IgcHBvbGwKIAlkYXRhOCBzeXNfdW5zaGFyZQogCWRhdGE4IHN5c19zcGxpY2UKLQlkYXRhOCBzeXNfc2V0X3JvYnVzdF9saXN0Ci0JZGF0YTggc3lzX2dldF9yb2J1c3RfbGlzdAorCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkJLy8gcmVzZXJ2ZWQgZm9yIHNldF9yb2J1c3RfbGlzdAorCWRhdGE4IHN5c19uaV9zeXNjYWxsCQkJLy8gcmVzZXJ2ZWQgZm9yIGdldF9yb2J1c3RfbGlzdAogCWRhdGE4IHN5c19zeW5jX2ZpbGVfcmFuZ2UJCS8vIDEzMDAKIAlkYXRhOCBzeXNfdGVlCiAJZGF0YTggc3lzX3Ztc3BsaWNlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2dhdGUubGRzLlMgYi9hcmNoL2lhNjQva2VybmVsL2dhdGUubGRzLlMKaW5kZXggY2MzNWNkZC4uNmQxOTgzMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9nYXRlLmxkcy5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZ2F0ZS5sZHMuUwpAQCAtMTIsNiArMTIsNyBAQAogICAuID0gR0FURV9BRERSICsgU0laRU9GX0hFQURFUlM7CiAKICAgLmhhc2gJCQkJOiB7ICooLmhhc2gpIH0JCQkJOnJlYWRhYmxlCisgIC5nbnUuaGFzaAkJCTogeyAqKC5nbnUuaGFzaCkgfQogICAuZHluc3ltCQkJOiB7ICooLmR5bnN5bSkgfQogICAuZHluc3RyCQkJOiB7ICooLmR5bnN0cikgfQogICAuZ251LnZlcnNpb24JCQk6IHsgKiguZ251LnZlcnNpb24pIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKaW5kZXggNTYxYjhmMS4uNDRkNTQwZSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9oZWFkLlMKQEAgLTE5Nyw2ICsxOTcsMTEgQEAKIAk7OwogCXNybHouaQogCTs7CisgeworCWZsdXNocnMJCQkJLy8gbXVzdCBiZSBmaXJzdCBpbnNuIGluIGdyb3VwCisJc3Jsei5pCisgfQorCTs7CiAJLyoKIAkgKiBTYXZlIHRoZSByZWdpb24gcmVnaXN0ZXJzLCBwcmVkaWNhdGUgYmVmb3JlIHRoZXkgZ2V0IGNsb2JiZXJlZAogCSAqLwpAQCAtODUzLDcgKzg1OCw2IEBACiAgKi8KIEdMT0JBTF9FTlRSWShpYTY0X3N3aXRjaF9tb2RlX3BoeXMpCiAgewotCWFsbG9jIHIyPWFyLnBmcywwLDAsMCwwCiAJcnNtIHBzci5pIHwgcHNyLmljCQkvLyBkaXNhYmxlIGludGVycnVwdHMgYW5kIGludGVycnVwdCBjb2xsZWN0aW9uCiAJbW92IHIxNT1pcAogIH0KQEAgLTkwMiw3ICs5MDYsNiBAQAogICovCiBHTE9CQUxfRU5UUlkoaWE2NF9zd2l0Y2hfbW9kZV92aXJ0KQogIHsKLQlhbGxvYyByMj1hci5wZnMsMCwwLDAsMAogCXJzbSBwc3IuaSB8IHBzci5pYwkJLy8gZGlzYWJsZSBpbnRlcnJ1cHRzIGFuZCBpbnRlcnJ1cHQgY29sbGVjdGlvbgogCW1vdiByMTU9aXAKICB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCmluZGV4IGI3Y2Y2NTEuLjNlYWQyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCkBAIC02Miw3ICs2Miw3IEBACiBFWFBPUlRfU1lNQk9MKF9fbW9kZGkzKTsKIEVYUE9SVF9TWU1CT0woX191bW9kZGkzKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX01EX1JBSUQ1KSB8fCBkZWZpbmVkKENPTkZJR19NRF9SQUlENV9NT0RVTEUpCisjaWYgZGVmaW5lZChDT05GSUdfTURfUkFJRDQ1NikgfHwgZGVmaW5lZChDT05GSUdfTURfUkFJRDQ1Nl9NT0RVTEUpCiBleHRlcm4gdm9pZCB4b3JfaWE2NF8yKHZvaWQpOwogZXh0ZXJuIHZvaWQgeG9yX2lhNjRfMyh2b2lkKTsKIGV4dGVybiB2b2lkIHhvcl9pYTY0XzQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDAwZDljODMuLjc4MTk2MGYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC00NDgsMTEgKzQ0OCwyMCBAQAogCXJldHVybiAwOwogfQogCit2b2lkIF9fa3Byb2JlcyBmbHVzaF9pbnNuX3Nsb3Qoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGFybV9hZGRyOworCisJYXJtX2FkZHIgPSAoKHVuc2lnbmVkIGxvbmcpJnAtPm9wY29kZS5idW5kbGUpICYgfjB4RlVMTDsKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoYXJtX2FkZHIsIGFybV9hZGRyICsgc2l6ZW9mKGJ1bmRsZV90KSk7Cit9CisKIHZvaWQgX19rcHJvYmVzIGFyY2hfYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7CiAJdW5zaWduZWQgbG9uZyBhcm1fYWRkciA9IGFkZHIgJiB+MHhGVUxMOwogCisJZmx1c2hfaW5zbl9zbG90KHApOwogCW1lbWNweSgoY2hhciAqKWFybV9hZGRyLCAmcC0+YWluc24uaW5zbi5idW5kbGUsIHNpemVvZihidW5kbGVfdCkpOwogCWZsdXNoX2ljYWNoZV9yYW5nZShhcm1fYWRkciwgYXJtX2FkZHIgKyBzaXplb2YoYnVuZGxlX3QpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsLlMgYi9hcmNoL2lhNjQva2VybmVsL3BhbC5TCmluZGV4IDUwMThjN2YuLmViYWYxZTYgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wYWwuUwpAQCAtMjE3LDEyICsyMTcsNyBAQAogCS5ib2R5CiAJOzsKIAlsZDggbG9jMiA9IFtsb2MyXQkJLy8gbG9jMiA8LSBlbnRyeSBwb2ludAotCW1vdiBvdXQwID0gaW4wCQkvLyBmaXJzdCBhcmd1bWVudAotCW1vdiBvdXQxID0gaW4xCQkvLyBjb3B5IGFyZzIKLQltb3Ygb3V0MiA9IGluMgkJLy8gY29weSBhcmczCi0JbW92IG91dDMgPSBpbjMJCS8vIGNvcHkgYXJnMwotCTs7Ci0JbW92IGxvYzMgPSBwc3IJCS8vIHNhdmUgcHNyCisJbW92IGxvYzMgPSBwc3IJCQkvLyBzYXZlIHBzcgogCTs7CiAJbW92IGxvYzQ9YXIucnNjCQkJLy8gc2F2ZSBSU0UgY29uZmlndXJhdGlvbgogCWRlcC56IGxvYzI9bG9jMiwwLDYxCQkvLyBjb252ZXJ0IHBhbCBlbnRyeSBwb2ludCB0byBwaHlzaWNhbApAQCAtMjM2LDE4ICsyMzEsMjMgQEAKIAk7OwogCWFuZGNtIHIxNj1sb2MzLHIxNgkJLy8gcmVtb3ZlcyBiaXRzIHRvIGNsZWFyIGZyb20gcHNyCiAJYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9kZV9waHlzCi0ucmV0NjoKKworCW1vdiBvdXQwID0gaW4wCQkJLy8gZmlyc3QgYXJndW1lbnQKKwltb3Ygb3V0MSA9IGluMQkJCS8vIGNvcHkgYXJnMgorCW1vdiBvdXQyID0gaW4yCQkJLy8gY29weSBhcmczCisJbW92IG91dDMgPSBpbjMJCQkvLyBjb3B5IGFyZzMKIAltb3YgbG9jNSA9IHIxOQogCW1vdiBsb2M2ID0gcjIwCisKIAlici5jYWxsLnNwdGsubWFueSBycD1iNwkJLy8gbm93IG1ha2UgdGhlIGNhbGwKLS5yZXQ3OgorCiAJbW92IGFyLnJzYz0wCQkJLy8gcHV0IFJTRSBpbiBlbmZvcmNlZCBsYXp5LCBMRSBtb2RlCiAJbW92IHIxNj1sb2MzCQkJLy8gcjE2PSBvcmlnaW5hbCBwc3IKIAltb3YgcjE5PWxvYzUKIAltb3YgcjIwPWxvYzYKIAlici5jYWxsLnNwdGsubWFueSBycD1pYTY0X3N3aXRjaF9tb2RlX3ZpcnQJLy8gcmV0dXJuIHRvIHZpcnR1YWwgbW9kZQogCi0ucmV0ODoJbW92IHBzci5sICA9IGxvYzMJCS8vIHJlc3RvcmUgaW5pdCBQU1IKKwltb3YgcHNyLmwgID0gbG9jMwkJLy8gcmVzdG9yZSBpbml0IFBTUgogCW1vdiBhci5wZnMgPSBsb2MxCiAJbW92IHJwID0gbG9jMAogCTs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCmluZGV4IDNmNWJhYzUuLjBiNTQ2ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGFsaW5mby5jCkBAIC01NjYsMjkgKzU2NiwyMyBAQAogCXBhbF92ZXJzaW9uX3VfdCBtaW5fdmVyLCBjdXJfdmVyOwogCWNoYXIgKnAgPSBwYWdlOwogCi0JLyogVGhlIFBBTF9WRVJTSU9OIGNhbGwgaXMgYWR2ZXJ0aXNlZCBhcyBiZWluZyBhYmxlIHRvIHN1cHBvcnQKLQkgKiBib3RoIHBoeXNpY2FsIGFuZCB2aXJ0dWFsIG1vZGUgY2FsbHMuIFRoaXMgc2VlbXMgdG8gYmUgYSBkb2N1bWVudGF0aW9uCi0JICogYnVnIHJhdGhlciB0aGFuIGZpcm13YXJlIGJ1Zy4gSW4gZmFjdCwgaXQgZG9lcyBvbmx5IHN1cHBvcnQgcGh5c2ljYWwgbW9kZS4KLQkgKiBTbyBub3cgdGhlIGNvZGUgcmVmbGVjdHMgdGhpcyBmYWN0IGFuZCB0aGUgcGFsX3ZlcnNpb24oKSBoYXMgYmVlbiB1cGRhdGVkCi0JICogYWNjb3JkaW5nbHkuCi0JICovCi0JaWYgKGlhNjRfcGFsX3ZlcnNpb24oJm1pbl92ZXIsICZjdXJfdmVyKSAhPSAwKSByZXR1cm4gMDsKKwlpZiAoaWE2NF9wYWxfdmVyc2lvbigmbWluX3ZlciwgJmN1cl92ZXIpICE9IDApCisJCXJldHVybiAwOwogCiAJcCArPSBzcHJpbnRmKHAsCiAJCSAgICAgIlBBTF92ZW5kb3IgOiAweCUwMnggKG1pbj0weCUwMngpXG4iCi0JCSAgICAgIlBBTF9BICAgICAgOiAleC4leC4leCAobWluPSV4LiV4LiV4KVxuIgotCQkgICAgICJQQUxfQiAgICAgIDogJXguJXguJXggKG1pbj0leC4leC4leClcbiIsCi0JCSAgICAgY3VyX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF92ZW5kb3IsIG1pbl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfdmVuZG9yLAotCi0JCSAgICAgY3VyX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF9hX21vZGVsPj40LAotCQkgICAgIGN1cl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYV9tb2RlbCYweGYsIGN1cl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYV9yZXYsCi0JCSAgICAgbWluX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF9hX21vZGVsPj40LAotCQkgICAgIG1pbl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYV9tb2RlbCYweGYsIG1pbl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYV9yZXYsCi0KLQkJICAgICBjdXJfdmVyLnBhbF92ZXJzaW9uX3MucHZfcGFsX2JfbW9kZWw+PjQsCi0JCSAgICAgY3VyX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF9iX21vZGVsJjB4ZiwgY3VyX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF9iX3JldiwKLQkJICAgICBtaW5fdmVyLnBhbF92ZXJzaW9uX3MucHZfcGFsX2JfbW9kZWw+PjQsCi0JCSAgICAgbWluX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF9iX21vZGVsJjB4ZiwgbWluX3Zlci5wYWxfdmVyc2lvbl9zLnB2X3BhbF9iX3Jldik7CisJCSAgICAgIlBBTF9BICAgICAgOiAlMDJ4LiUwMnggKG1pbj0lMDJ4LiUwMngpXG4iCisJCSAgICAgIlBBTF9CICAgICAgOiAlMDJ4LiUwMnggKG1pbj0lMDJ4LiUwMngpXG4iLAorCQkgICAgIGN1cl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfdmVuZG9yLAorCQkgICAgIG1pbl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfdmVuZG9yLAorCQkgICAgIGN1cl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYV9tb2RlbCwKKwkJICAgICBjdXJfdmVyLnBhbF92ZXJzaW9uX3MucHZfcGFsX2FfcmV2LAorCQkgICAgIG1pbl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYV9tb2RlbCwKKwkJICAgICBtaW5fdmVyLnBhbF92ZXJzaW9uX3MucHZfcGFsX2FfcmV2LAorCQkgICAgIGN1cl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYl9tb2RlbCwKKwkJICAgICBjdXJfdmVyLnBhbF92ZXJzaW9uX3MucHZfcGFsX2JfcmV2LAorCQkgICAgIG1pbl92ZXIucGFsX3ZlcnNpb25fcy5wdl9wYWxfYl9tb2RlbCwKKwkJICAgICBtaW5fdmVyLnBhbF92ZXJzaW9uX3MucHZfcGFsX2JfcmV2KTsKIAlyZXR1cm4gcCAtIHBhZ2U7CiB9CiAKQEAgLTk1OCw5ICs5NTIsOSBAQAogCX0KIH0KIAotc3RhdGljIGludCBfX2NwdWluaXQgcGFsaW5mb19jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCi0JCQkJCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAotCQkJCQkJCQl2b2lkICpoY3B1KQorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCBwYWxpbmZvX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJdW5zaWduZWQgaW50IGhvdGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CiAKQEAgLTk2OCwyMCArOTYyLDE5IEBACiAJY2FzZSBDUFVfT05MSU5FOgogCQljcmVhdGVfcGFsaW5mb19wcm9jX2VudHJpZXMoaG90Y3B1KTsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJY2FzZSBDUFVfREVBRDoKIAkJcmVtb3ZlX3BhbGluZm9fcHJvY19lbnRyaWVzKGhvdGNwdSk7CiAJCWJyZWFrOwotI2VuZGlmCiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBwYWxpbmZvX2NwdV9ub3RpZmllciA9CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBhbGluZm9fY3B1X25vdGlmaWVyID0KIHsKIAkubm90aWZpZXJfY2FsbCA9IHBhbGluZm9fY3B1X2NhbGxiYWNrLAogCS5wcmlvcml0eSA9IDAsCiB9OworI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19pbml0CiBwYWxpbmZvX2luaXQodm9pZCkKQEAgLTEwMjAsNyArMTAxMyw3IEBACiAJLyoKIAkgKiBVbnJlZ2lzdGVyIGZyb20gY3B1IG5vdGlmaWVyIGNhbGxiYWNrcwogCSAqLwotCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZwYWxpbmZvX2NwdV9ub3RpZmllcik7CisJdW5yZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnBhbGluZm9fY3B1X25vdGlmaWVyKTsKIH0KIAogbW9kdWxlX2luaXQocGFsaW5mb19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKaW5kZXggYzdjY2Q2ZS4uODRhN2U1MiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMKQEAgLTQ5MzYsMTMgKzQ5MzYsMTUgQEAKIAlpZiAobGlrZWx5KGN0eCkpIHsKIAkJRFBSSU5UKCgiY29udGV4dCB1bmxvY2tlZFxuIikpOwogCQlVTlBST1RFQ1RfQ1RYKGN0eCwgZmxhZ3MpOwotCQlmcHV0KGZpbGUpOwogCX0KIAogCS8qIGNvcHkgYXJndW1lbnQgYmFjayB0byB1c2VyLCBpZiBuZWVkZWQgKi8KIAlpZiAoY2FsbF9tYWRlICYmIFBGTV9DTURfUldfQVJHKGNtZCkgJiYgY29weV90b191c2VyKGFyZywgYXJnc19rLCBiYXNlX3N6KmNvdW50KSkgcmV0ID0gLUVGQVVMVDsKIAogZXJyb3JfYXJnczoKKwlpZiAoZmlsZSkKKwkJZnB1dChmaWxlKTsKKwogCWtmcmVlKGFyZ3Nfayk7CiAKIAlEUFJJTlQoKCJjbWQ9JXMgcmV0PSVsZFxuIiwgUEZNX0NNRF9OQU1FKGNtZCksIHJldCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jIGIvYXJjaC9pYTY0L2tlcm5lbC9zeXNfaWE2NC5jCmluZGV4IDQwNzIyZDguLjllZjYyYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc3lzX2lhNjQuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3N5c19pYTY0LmMKQEAgLTE2MywxMCArMTYzLDI1IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAoraW50IGlhNjRfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXVuc2lnbmVkIGxvbmcgcm9mZjsKKworCS8qCisJICogRG9uJ3QgcGVybWl0IG1hcHBpbmdzIGludG8gdW5tYXBwZWQgc3BhY2UsIHRoZSB2aXJ0dWFsIHBhZ2UgdGFibGUKKwkgKiBvZiBhIHJlZ2lvbiwgb3IgYWNyb3NzIGEgcmVnaW9uIGJvdW5kYXJ5LiAgTm90ZTogUkdOX01BUF9MSU1JVCBpcworCSAqIGVxdWFsIHRvIDJebi1QQUdFX1NJWkUgKGZvciBzb21lIGludGVnZXIgbiA8PSA2MSkgYW5kIGxlbiA+IDAuCisJICovCisJcm9mZiA9IFJFR0lPTl9PRkZTRVQoYWRkcik7CisJaWYgKChsZW4gPiBSR05fTUFQX0xJTUlUKSB8fCAocm9mZiA+IChSR05fTUFQX0xJTUlUIC0gbGVuKSkpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGRvX21tYXAyICh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgcHJvdCwgaW50IGZsYWdzLCBpbnQgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCiB7Ci0JdW5zaWduZWQgbG9uZyByb2ZmOwogCXN0cnVjdCBmaWxlICpmaWxlID0gTlVMTDsKIAogCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKQEAgLTE4OCwxNyArMjAzLDYgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyoKLQkgKiBEb24ndCBwZXJtaXQgbWFwcGluZ3MgaW50byB1bm1hcHBlZCBzcGFjZSwgdGhlIHZpcnR1YWwgcGFnZSB0YWJsZSBvZiBhIHJlZ2lvbiwKLQkgKiBvciBhY3Jvc3MgYSByZWdpb24gYm91bmRhcnkuICBOb3RlOiBSR05fTUFQX0xJTUlUIGlzIGVxdWFsIHRvIDJebi1QQUdFX1NJWkUKLQkgKiAoZm9yIHNvbWUgaW50ZWdlciBuIDw9IDYxKSBhbmQgbGVuID4gMC4KLQkgKi8KLQlyb2ZmID0gUkVHSU9OX09GRlNFVChhZGRyKTsKLQlpZiAoKGxlbiA+IFJHTl9NQVBfTElNSVQpIHx8IChyb2ZmID4gKFJHTl9NQVBfTElNSVQgLSBsZW4pKSkgewotCQlhZGRyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlhZGRyID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CiAJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggYjE0NmYxYy4uZjY0OGM2MSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtNjcsMTAgKzY3LDggQEAKICNlbmRpZgogCiAJc3lzZnNfY3B1cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpYTY0X2NwdSkgKiBOUl9DUFVTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXN5c2ZzX2NwdXMpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICghc3lzZnNfY3B1cykKKwkJcGFuaWMoImt6YWxsb2MgaW4gdG9wb2xvZ3lfaW5pdCBmYWlsZWQgLSBOUl9DUFVTIHRvbyBiaWc/Iik7CiAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7CiAJCWlmKChlcnIgPSBhcmNoX3JlZ2lzdGVyX2NwdShpKSkpCkBAIC00MzUsNyArNDMzLDcgQEAKIAkJCQkodm9pZCAqKShsb25nKWkpOwogCX0KIAotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmY2FjaGVfY3B1X25vdGlmaWVyKTsKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmNhY2hlX2NwdV9ub3RpZmllcik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdHJhcHMuYwppbmRleCBlN2JiYjBmLi5mZmZhOWUwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC90cmFwcy5jCkBAIC0xMTcsMTEgKzExNyw4IEBACiAJZGllLmxvY2tfb3duZXIgPSAtMTsKIAlzcGluX3VubG9ja19pcnEoJmRpZS5sb2NrKTsKIAotCWlmIChwYW5pY19vbl9vb3BzKSB7Ci0JCXByaW50ayhLRVJOX0VNRVJHICJGYXRhbCBleGNlcHRpb246IHBhbmljIGluIDUgc2Vjb25kc1xuIik7Ci0JCXNzbGVlcCg1KTsKKwlpZiAocGFuaWNfb25fb29wcykKIAkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwotCX0KIAogICAJZG9fZXhpdChTSUdTRUdWKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvdW5jYWNoZWQuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdW5jYWNoZWQuYwppbmRleCA1ZjAzYjllLi40YzczYTY3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3VuY2FjaGVkLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC91bmNhY2hlZC5jCkBAIC0zMiwzMiArMzIsMzggQEAKIAogZXh0ZXJuIHZvaWQgX19pbml0IGVmaV9tZW1tYXBfd2Fsa191YyhlZmlfZnJlZW1lbV9jYWxsYmFja190LCB2b2lkICopOwogCi0jZGVmaW5lIE1BWF9VTkNBQ0hFRF9HUkFOVUxFUwk1Ci1zdGF0aWMgaW50IGFsbG9jYXRlZF9ncmFudWxlczsKK3N0cnVjdCB1bmNhY2hlZF9wb29sIHsKKwlzdHJ1Y3QgZ2VuX3Bvb2wgKnBvb2w7CisJc3RydWN0IG11dGV4IGFkZF9jaHVua19tdXRleDsJLyogc2VyaWFsaXplIGFkZGluZyBhIGNvbnZlcnRlZCBjaHVuayAqLworCWludCBuY2h1bmtzX2FkZGVkOwkJLyogI29mIGNvbnZlcnRlZCBjaHVua3MgYWRkZWQgdG8gcG9vbCAqLworCWF0b21pY190IHN0YXR1czsJCS8qIHNtcCBjYWxsZWQgZnVuY3Rpb24ncyByZXR1cm4gc3RhdHVzKi8KK307CiAKLXN0cnVjdCBnZW5fcG9vbCAqdW5jYWNoZWRfcG9vbFtNQVhfTlVNTk9ERVNdOworI2RlZmluZSBNQVhfQ09OVkVSVEVEX0NIVU5LU19QRVJfTk9ERQkyCisKK3N0cnVjdCB1bmNhY2hlZF9wb29sIHVuY2FjaGVkX3Bvb2xzW01BWF9OVU1OT0RFU107CiAKIAogc3RhdGljIHZvaWQgdW5jYWNoZWRfaXBpX3Zpc2liaWxpdHkodm9pZCAqZGF0YSkKIHsKIAlpbnQgc3RhdHVzOworCXN0cnVjdCB1bmNhY2hlZF9wb29sICp1Y19wb29sID0gKHN0cnVjdCB1bmNhY2hlZF9wb29sICopZGF0YTsKIAogCXN0YXR1cyA9IGlhNjRfcGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoUEFMX1ZJU0lCSUxJVFlfUEhZU0lDQUwpOwogCWlmICgoc3RhdHVzICE9IFBBTF9WSVNJQklMSVRZX09LKSAmJgogCSAgICAoc3RhdHVzICE9IFBBTF9WSVNJQklMSVRZX09LX1JFTU9URV9ORUVERUQpKQotCQlwcmludGsoS0VSTl9ERUJVRyAicGFsX3ByZWZldGNoX3Zpc2liaWxpdHkoKSByZXR1cm5zICVpIG9uICIKLQkJICAgICAgICJDUFUgJWlcbiIsIHN0YXR1cywgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJCWF0b21pY19pbmMoJnVjX3Bvb2wtPnN0YXR1cyk7CiB9CiAKIAogc3RhdGljIHZvaWQgdW5jYWNoZWRfaXBpX21jX2RyYWluKHZvaWQgKmRhdGEpCiB7CiAJaW50IHN0YXR1czsKKwlzdHJ1Y3QgdW5jYWNoZWRfcG9vbCAqdWNfcG9vbCA9IChzdHJ1Y3QgdW5jYWNoZWRfcG9vbCAqKWRhdGE7CiAKIAlzdGF0dXMgPSBpYTY0X3BhbF9tY19kcmFpbigpOwotCWlmIChzdGF0dXMpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlhNjRfcGFsX21jX2RyYWluKCkgZmFpbGVkIHdpdGggJWkgb24gIgotCQkgICAgICAgIkNQVSAlaVxuIiwgc3RhdHVzLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAoc3RhdHVzICE9IFBBTF9TVEFUVVNfU1VDQ0VTUykKKwkJYXRvbWljX2luYygmdWNfcG9vbC0+c3RhdHVzKTsKIH0KIAogCkBAIC03MCwyMSArNzYsMzQgQEAKICAqIFRoaXMgaXMgYWNjb21wbGlzaGVkIGJ5IGZpcnN0IGFsbG9jYXRpbmcgYSBncmFudWxlIG9mIGNhY2hlZCBtZW1vcnkgcGFnZXMKICAqIGFuZCB0aGVuIGNvbnZlcnRpbmcgdGhlbSB0byB1bmNhY2hlZCBtZW1vcnkgcGFnZXMuCiAgKi8KLXN0YXRpYyBpbnQgdW5jYWNoZWRfYWRkX2NodW5rKHN0cnVjdCBnZW5fcG9vbCAqcG9vbCwgaW50IG5pZCkKK3N0YXRpYyBpbnQgdW5jYWNoZWRfYWRkX2NodW5rKHN0cnVjdCB1bmNhY2hlZF9wb29sICp1Y19wb29sLCBpbnQgbmlkKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBzdGF0dXMsIGk7CisJaW50IHN0YXR1cywgaSwgbmNodW5rc19hZGRlZCA9IHVjX3Bvb2wtPm5jaHVua3NfYWRkZWQ7CiAJdW5zaWduZWQgbG9uZyBjX2FkZHIsIHVjX2FkZHI7CiAKLQlpZiAoYWxsb2NhdGVkX2dyYW51bGVzID49IE1BWF9VTkNBQ0hFRF9HUkFOVUxFUykKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ1Y19wb29sLT5hZGRfY2h1bmtfbXV0ZXgpICE9IDApCisJCXJldHVybiAtMTsJLyogaW50ZXJydXB0ZWQgYnkgYSBzaWduYWwgKi8KKworCWlmICh1Y19wb29sLT5uY2h1bmtzX2FkZGVkID4gbmNodW5rc19hZGRlZCkgeworCQkvKiBzb21lb25lIGFkZGVkIGEgbmV3IGNodW5rIHdoaWxlIHdlIHdlcmUgd2FpdGluZyAqLworCQltdXRleF91bmxvY2soJnVjX3Bvb2wtPmFkZF9jaHVua19tdXRleCk7CisJCXJldHVybiAwOworCX0KKworCWlmICh1Y19wb29sLT5uY2h1bmtzX2FkZGVkID49IE1BWF9DT05WRVJURURfQ0hVTktTX1BFUl9OT0RFKSB7CisJCW11dGV4X3VubG9jaygmdWNfcG9vbC0+YWRkX2NodW5rX211dGV4KTsKIAkJcmV0dXJuIC0xOworCX0KIAogCS8qIGF0dGVtcHQgdG8gYWxsb2NhdGUgYSBncmFudWxlJ3Mgd29ydGggb2YgY2FjaGVkIG1lbW9yeSBwYWdlcyAqLwogCiAJcGFnZSA9IGFsbG9jX3BhZ2VzX25vZGUobmlkLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywKIAkJCQlJQTY0X0dSQU5VTEVfU0hJRlQtUEFHRV9TSElGVCk7Ci0JaWYgKCFwYWdlKQorCWlmICghcGFnZSkgeworCQltdXRleF91bmxvY2soJnVjX3Bvb2wtPmFkZF9jaHVua19tdXRleCk7CiAJCXJldHVybiAtMTsKKwl9CiAKIAkvKiBjb252ZXJ0IHRoZSBtZW1vcnkgcGFnZXMgZnJvbSBjYWNoZWQgdG8gdW5jYWNoZWQgKi8KIApAQCAtMTAyLDExICsxMjEsMTQgQEAKIAlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVjX2FkZHIsIHVjX2FkZGRyICsgSUE2NF9HUkFOVUxFX1NJWkUpOwogCiAJc3RhdHVzID0gaWE2NF9wYWxfcHJlZmV0Y2hfdmlzaWJpbGl0eShQQUxfVklTSUJJTElUWV9QSFlTSUNBTCk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gc21wX2NhbGxfZnVuY3Rpb24odW5jYWNoZWRfaXBpX3Zpc2liaWxpdHksIE5VTEwsIDAsIDEpOwotCQlpZiAoc3RhdHVzKQorCWlmIChzdGF0dXMgPT0gUEFMX1ZJU0lCSUxJVFlfT0tfUkVNT1RFX05FRURFRCkgeworCQlhdG9taWNfc2V0KCZ1Y19wb29sLT5zdGF0dXMsIDApOworCQlzdGF0dXMgPSBzbXBfY2FsbF9mdW5jdGlvbih1bmNhY2hlZF9pcGlfdmlzaWJpbGl0eSwgdWNfcG9vbCwKKwkJCQkJICAgMCwgMSk7CisJCWlmIChzdGF0dXMgfHwgYXRvbWljX3JlYWQoJnVjX3Bvb2wtPnN0YXR1cykpCiAJCQlnb3RvIGZhaWxlZDsKLQl9CisJfSBlbHNlIGlmIChzdGF0dXMgIT0gUEFMX1ZJU0lCSUxJVFlfT0spCisJCWdvdG8gZmFpbGVkOwogCiAJcHJlZW1wdF9kaXNhYmxlKCk7CiAKQEAgLTEyMCwyMCArMTQyLDI0IEBACiAKIAlwcmVlbXB0X2VuYWJsZSgpOwogCi0JaWE2NF9wYWxfbWNfZHJhaW4oKTsKLQlzdGF0dXMgPSBzbXBfY2FsbF9mdW5jdGlvbih1bmNhY2hlZF9pcGlfbWNfZHJhaW4sIE5VTEwsIDAsIDEpOwotCWlmIChzdGF0dXMpCisJc3RhdHVzID0gaWE2NF9wYWxfbWNfZHJhaW4oKTsKKwlpZiAoc3RhdHVzICE9IFBBTF9TVEFUVVNfU1VDQ0VTUykKKwkJZ290byBmYWlsZWQ7CisJYXRvbWljX3NldCgmdWNfcG9vbC0+c3RhdHVzLCAwKTsKKwlzdGF0dXMgPSBzbXBfY2FsbF9mdW5jdGlvbih1bmNhY2hlZF9pcGlfbWNfZHJhaW4sIHVjX3Bvb2wsIDAsIDEpOworCWlmIChzdGF0dXMgfHwgYXRvbWljX3JlYWQoJnVjX3Bvb2wtPnN0YXR1cykpCiAJCWdvdG8gZmFpbGVkOwogCiAJLyoKIAkgKiBUaGUgY2h1bmsgb2YgbWVtb3J5IHBhZ2VzIGhhcyBiZWVuIGNvbnZlcnRlZCB0byB1bmNhY2hlZCBzbyBub3cgd2UKIAkgKiBjYW4gYWRkIGl0IHRvIHRoZSBwb29sLgogCSAqLwotCXN0YXR1cyA9IGdlbl9wb29sX2FkZChwb29sLCB1Y19hZGRyLCBJQTY0X0dSQU5VTEVfU0laRSwgbmlkKTsKKwlzdGF0dXMgPSBnZW5fcG9vbF9hZGQodWNfcG9vbC0+cG9vbCwgdWNfYWRkciwgSUE2NF9HUkFOVUxFX1NJWkUsIG5pZCk7CiAJaWYgKHN0YXR1cykKIAkJZ290byBmYWlsZWQ7CiAKLQlhbGxvY2F0ZWRfZ3JhbnVsZXMrKzsKKwl1Y19wb29sLT5uY2h1bmtzX2FkZGVkKys7CisJbXV0ZXhfdW5sb2NrKCZ1Y19wb29sLT5hZGRfY2h1bmtfbXV0ZXgpOwogCXJldHVybiAwOwogCiAJLyogZmFpbGVkIHRvIGNvbnZlcnQgb3IgYWRkIHRoZSBjaHVuayBzbyBnaXZlIGl0IGJhY2sgdG8gdGhlIGtlcm5lbCAqLwpAQCAtMTQyLDYgKzE2OCw3IEBACiAJCUNsZWFyUGFnZVVuY2FjaGVkKCZwYWdlW2ldKTsKIAogCWZyZWVfcGFnZXMoY19hZGRyLCBJQTY0X0dSQU5VTEVfU0hJRlQtUEFHRV9TSElGVCk7CisJbXV0ZXhfdW5sb2NrKCZ1Y19wb29sLT5hZGRfY2h1bmtfbXV0ZXgpOwogCXJldHVybiAtMTsKIH0KIApAQCAtMTU4LDcgKzE4NSw3IEBACiB1bnNpZ25lZCBsb25nIHVuY2FjaGVkX2FsbG9jX3BhZ2UoaW50IHN0YXJ0aW5nX25pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHVjX2FkZHI7Ci0Jc3RydWN0IGdlbl9wb29sICpwb29sOworCXN0cnVjdCB1bmNhY2hlZF9wb29sICp1Y19wb29sOwogCWludCBuaWQ7CiAKIAlpZiAodW5saWtlbHkoc3RhcnRpbmdfbmlkID49IE1BWF9OVU1OT0RFUykpCkBAIC0xNzEsMTQgKzE5OCwxNCBAQAogCWRvIHsKIAkJaWYgKCFub2RlX29ubGluZShuaWQpKQogCQkJY29udGludWU7Ci0JCXBvb2wgPSB1bmNhY2hlZF9wb29sW25pZF07Ci0JCWlmIChwb29sID09IE5VTEwpCisJCXVjX3Bvb2wgPSAmdW5jYWNoZWRfcG9vbHNbbmlkXTsKKwkJaWYgKHVjX3Bvb2wtPnBvb2wgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlkbyB7Ci0JCQl1Y19hZGRyID0gZ2VuX3Bvb2xfYWxsb2MocG9vbCwgUEFHRV9TSVpFKTsKKwkJCXVjX2FkZHIgPSBnZW5fcG9vbF9hbGxvYyh1Y19wb29sLT5wb29sLCBQQUdFX1NJWkUpOwogCQkJaWYgKHVjX2FkZHIgIT0gMCkKIAkJCQlyZXR1cm4gdWNfYWRkcjsKLQkJfSB3aGlsZSAodW5jYWNoZWRfYWRkX2NodW5rKHBvb2wsIG5pZCkgPT0gMCk7CisJCX0gd2hpbGUgKHVuY2FjaGVkX2FkZF9jaHVuayh1Y19wb29sLCBuaWQpID09IDApOwogCiAJfSB3aGlsZSAoKG5pZCA9IChuaWQgKyAxKSAlIE1BWF9OVU1OT0RFUykgIT0gc3RhcnRpbmdfbmlkKTsKIApAQCAtMTk3LDcgKzIyNCw3IEBACiB2b2lkIHVuY2FjaGVkX2ZyZWVfcGFnZSh1bnNpZ25lZCBsb25nIHVjX2FkZHIpCiB7CiAJaW50IG5pZCA9IHBhZGRyX3RvX25pZCh1Y19hZGRyIC0gX19JQTY0X1VOQ0FDSEVEX09GRlNFVCk7Ci0Jc3RydWN0IGdlbl9wb29sICpwb29sID0gdW5jYWNoZWRfcG9vbFtuaWRdOworCXN0cnVjdCBnZW5fcG9vbCAqcG9vbCA9IHVuY2FjaGVkX3Bvb2xzW25pZF0ucG9vbDsKIAogCWlmICh1bmxpa2VseShwb29sID09IE5VTEwpKQogCQlyZXR1cm47CkBAIC0yMjQsNyArMjUxLDcgQEAKIAkJCQkJdW5zaWduZWQgbG9uZyB1Y19lbmQsIHZvaWQgKmFyZykKIHsKIAlpbnQgbmlkID0gcGFkZHJfdG9fbmlkKHVjX3N0YXJ0IC0gX19JQTY0X1VOQ0FDSEVEX09GRlNFVCk7Ci0Jc3RydWN0IGdlbl9wb29sICpwb29sID0gdW5jYWNoZWRfcG9vbFtuaWRdOworCXN0cnVjdCBnZW5fcG9vbCAqcG9vbCA9IHVuY2FjaGVkX3Bvb2xzW25pZF0ucG9vbDsKIAlzaXplX3Qgc2l6ZSA9IHVjX2VuZCAtIHVjX3N0YXJ0OwogCiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwpAQCAtMjQyLDcgKzI2OSw4IEBACiAJaW50IG5pZDsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQl1bmNhY2hlZF9wb29sW25pZF0gPSBnZW5fcG9vbF9jcmVhdGUoUEFHRV9TSElGVCwgbmlkKTsKKwkJdW5jYWNoZWRfcG9vbHNbbmlkXS5wb29sID0gZ2VuX3Bvb2xfY3JlYXRlKFBBR0VfU0hJRlQsIG5pZCk7CisJCW11dGV4X2luaXQoJnVuY2FjaGVkX3Bvb2xzW25pZF0uYWRkX2NodW5rX211dGV4KTsKIAl9CiAKIAllZmlfbWVtbWFwX3dhbGtfdWModW5jYWNoZWRfYnVpbGRfbWVtbWFwLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9saWIvTWFrZWZpbGUgYi9hcmNoL2lhNjQvbGliL01ha2VmaWxlCmluZGV4IGQ4NTM2YTIuLjM4ZmE2ZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2xpYi9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNyBAQAogbGliLSQoQ09ORklHX0lUQU5JVU0pCSs9IGNvcHlfcGFnZS5vIGNvcHlfdXNlci5vIG1lbWNweS5vCiBsaWItJChDT05GSUdfTUNLSU5MRVkpCSs9IGNvcHlfcGFnZV9tY2subyBtZW1jcHlfbWNrLm8KIGxpYi0kKENPTkZJR19QRVJGTU9OKQkrPSBjYXJ0YV9yYW5kb20ubwotbGliLSQoQ09ORklHX01EX1JBSUQ1KQkrPSB4b3IubworbGliLSQoQ09ORklHX01EX1JBSUQ0NTYpCSs9IHhvci5vCiAKIEFGTEFHU19fX2RpdmRpMy5vCT0KIEFGTEFHU19fX3VkaXZkaTMubwk9IC1EVU5TSUdORUQKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9jb250aWcuYyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwppbmRleCAyYTg4Y2RkLi5lMDA0MTQzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2NvbnRpZy5jCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1fZG1hX3BoeXNwYWdlczsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1heF9nYXA7CiAjZW5kaWYKIAogLyoqCkBAIC00NSw5ICs0NiwxNSBAQAogCiAJcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKIAlpID0gbWF4X21hcG5yOwotCXdoaWxlIChpLS0gPiAwKSB7Ci0JCWlmICghcGZuX3ZhbGlkKGkpKQorCWZvciAoaSA9IDA7IGkgPCBtYXhfbWFwbnI7IGkrKykgeworCQlpZiAoIXBmbl92YWxpZChpKSkgeworI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKKwkJCWlmIChtYXhfZ2FwIDwgTEFSR0VfR0FQKQorCQkJCWNvbnRpbnVlOworCQkJaSA9IHZtZW1tYXBfZmluZF9uZXh0X3ZhbGlkX3BmbigwLCBpKSAtIDE7CisjZW5kaWYKIAkJCWNvbnRpbnVlOworCQl9CiAJCXRvdGFsKys7CiAJCWlmIChQYWdlUmVzZXJ2ZWQobWVtX21hcCtpKSkKIAkJCXJlc2VydmVkKys7CkBAIC0yMzQsNyArMjQxLDYgQEAKIAl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKICNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCiAJdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwotCXVuc2lnbmVkIGxvbmcgbWF4X2dhcDsKICNlbmRpZgogCiAJLyogaW5pdGlhbGl6ZSBtZW1fbWFwW10gKi8KQEAgLTI2Niw3ICsyNzIsNiBAQAogCQl9CiAJfQogCi0JbWF4X2dhcCA9IDA7CiAJZWZpX21lbW1hcF93YWxrKGZpbmRfbGFyZ2VzdF9ob2xlLCAodTY0ICopJm1heF9nYXApOwogCWlmIChtYXhfZ2FwIDwgTEFSR0VfR0FQKSB7CiAJCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIDA7CkBAIC0yNzcsNyArMjgyLDggQEAKIAogCQkvKiBhbGxvY2F0ZSB2aXJ0dWFsX21lbV9tYXAgKi8KIAotCQltYXBfc2l6ZSA9IFBBR0VfQUxJR04obWF4X2xvd19wZm4gKiBzaXplb2Yoc3RydWN0IHBhZ2UpKTsKKwkJbWFwX3NpemUgPSBQQUdFX0FMSUdOKEFMSUdOKG1heF9sb3dfcGZuLCBNQVhfT1JERVJfTlJfUEFHRVMpICoKKwkJCXNpemVvZihzdHJ1Y3QgcGFnZSkpOwogCQl2bWFsbG9jX2VuZCAtPSBtYXBfc2l6ZTsKIAkJdm1lbV9tYXAgPSAoc3RydWN0IHBhZ2UgKikgdm1hbGxvY19lbmQ7CiAJCWVmaV9tZW1tYXBfd2FsayhjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwppbmRleCA5OWJkOWUzLi5kMjYwYmZmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCkBAIC01MzQsNjggKzUzNCw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCi0jaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAotc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3ZhbGlkX3Bmbl9mb3JfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGkpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcywgaG9sZV9uZXh0X3BmbjsKLQl1bnNpZ25lZCBsb25nIHN0b3BfYWRkcmVzczsKLQotCWVuZF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZ2bWVtX21hcFtwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpXTsKLQllbmRfYWRkcmVzcyA9IFBBR0VfQUxJR04oZW5kX2FkZHJlc3MpOwotCi0Jc3RvcF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpICZ2bWVtX21hcFsKLQkJcGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlc107Ci0KLQlkbyB7Ci0JCXBnZF90ICpwZ2Q7Ci0JCXB1ZF90ICpwdWQ7Ci0JCXBtZF90ICpwbWQ7Ci0JCXB0ZV90ICpwdGU7Ci0KLQkJcGdkID0gcGdkX29mZnNldF9rKGVuZF9hZGRyZXNzKTsKLQkJaWYgKHBnZF9ub25lKCpwZ2QpKSB7Ci0JCQllbmRfYWRkcmVzcyArPSBQR0RJUl9TSVpFOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgZW5kX2FkZHJlc3MpOwotCQlpZiAocHVkX25vbmUoKnB1ZCkpIHsKLQkJCWVuZF9hZGRyZXNzICs9IFBVRF9TSVpFOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgZW5kX2FkZHJlc3MpOwotCQlpZiAocG1kX25vbmUoKnBtZCkpIHsKLQkJCWVuZF9hZGRyZXNzICs9IFBNRF9TSVpFOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGVuZF9hZGRyZXNzKTsKLXJldHJ5X3B0ZToKLQkJaWYgKHB0ZV9ub25lKCpwdGUpKSB7Ci0JCQllbmRfYWRkcmVzcyArPSBQQUdFX1NJWkU7Ci0JCQlwdGUrKzsKLQkJCWlmICgoZW5kX2FkZHJlc3MgPCBzdG9wX2FkZHJlc3MpICYmCi0JCQkgICAgKGVuZF9hZGRyZXNzICE9IEFMSUdOKGVuZF9hZGRyZXNzLCAxVUwgPDwgUE1EX1NISUZUKSkpCi0JCQkJZ290byByZXRyeV9wdGU7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBGb3VuZCBuZXh0IHZhbGlkIHZtZW1fbWFwIHBhZ2UgKi8KLQkJYnJlYWs7Ci0JfSB3aGlsZSAoZW5kX2FkZHJlc3MgPCBzdG9wX2FkZHJlc3MpOwotCi0JZW5kX2FkZHJlc3MgPSBtaW4oZW5kX2FkZHJlc3MsIHN0b3BfYWRkcmVzcyk7Ci0JZW5kX2FkZHJlc3MgPSBlbmRfYWRkcmVzcyAtICh1bnNpZ25lZCBsb25nKSB2bWVtX21hcCArIHNpemVvZihzdHJ1Y3QgcGFnZSkgLSAxOwotCWhvbGVfbmV4dF9wZm4gPSBlbmRfYWRkcmVzcyAvIHNpemVvZihzdHJ1Y3QgcGFnZSk7Ci0JcmV0dXJuIGhvbGVfbmV4dF9wZm4gLSBwZ2RhdC0+bm9kZV9zdGFydF9wZm47Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X3ZhbGlkX3Bmbl9mb3JfcGdkYXQocGdfZGF0YV90ICpwZ2RhdCwgaW50IGkpCi17Ci0JcmV0dXJuIGkgKyAxOwotfQotI2VuZGlmCi0KIC8qKgogICogc2hvd19tZW0gLSBnaXZlIHNob3J0IHN1bW1hcnkgb2YgbWVtb3J5IHN0YXRzCiAgKgpAQCAtNjI1LDcgKzU2Myw4IEBACiAJCQlpZiAocGZuX3ZhbGlkKHBnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIGkpKQogCQkJCXBhZ2UgPSBwZm5fdG9fcGFnZShwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBpKTsKIAkJCWVsc2UgewotCQkJCWkgPSBmaW5kX25leHRfdmFsaWRfcGZuX2Zvcl9wZ2RhdChwZ2RhdCwgaSkgLSAxOworCQkJCWkgPSB2bWVtbWFwX2ZpbmRfbmV4dF92YWxpZF9wZm4ocGdkYXQtPm5vZGVfaWQsCisJCQkJCSBpKSAtIDE7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlpZiAoUGFnZVJlc2VydmVkKHBhZ2UpKQpAQCAtNzUxLDcgKzY5MCw4IEBACiAJZWZpX21lbW1hcF93YWxrKGZpbHRlcl9yc3ZkX21lbW9yeSwgY291bnRfbm9kZV9wYWdlcyk7CiAKICNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCi0Jdm1hbGxvY19lbmQgLT0gUEFHRV9BTElHTihtYXhfbG93X3BmbiAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpOworCXZtYWxsb2NfZW5kIC09IFBBR0VfQUxJR04oQUxJR04obWF4X2xvd19wZm4sIE1BWF9PUkRFUl9OUl9QQUdFUykgKgorCQlzaXplb2Yoc3RydWN0IHBhZ2UpKTsKIAl2bWVtX21hcCA9IChzdHJ1Y3QgcGFnZSAqKSB2bWFsbG9jX2VuZDsKIAllZmlfbWVtbWFwX3dhbGsoY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSwgTlVMTCk7CiAJcHJpbnRrKCJWaXJ0dWFsIG1lbV9tYXAgc3RhcnRzIGF0IDB4JXBcbiIsIHZtZW1fbWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDJmNTBjMDYuLjMwNjE3Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNDE1LDYgKzQxNSw2MSBAQAogfQogCiAjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAoraW50IHZtZW1tYXBfZmluZF9uZXh0X3ZhbGlkX3BmbihpbnQgbm9kZSwgaW50IGkpCit7CisJdW5zaWduZWQgbG9uZyBlbmRfYWRkcmVzcywgaG9sZV9uZXh0X3BmbjsKKwl1bnNpZ25lZCBsb25nIHN0b3BfYWRkcmVzczsKKwlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5vZGUpOworCisJZW5kX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJnZtZW1fbWFwW3BnZGF0LT5ub2RlX3N0YXJ0X3BmbiArIGldOworCWVuZF9hZGRyZXNzID0gUEFHRV9BTElHTihlbmRfYWRkcmVzcyk7CisKKwlzdG9wX2FkZHJlc3MgPSAodW5zaWduZWQgbG9uZykgJnZtZW1fbWFwWworCQlwZ2RhdC0+bm9kZV9zdGFydF9wZm4gKyBwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzXTsKKworCWRvIHsKKwkJcGdkX3QgKnBnZDsKKwkJcHVkX3QgKnB1ZDsKKwkJcG1kX3QgKnBtZDsKKwkJcHRlX3QgKnB0ZTsKKworCQlwZ2QgPSBwZ2Rfb2Zmc2V0X2soZW5kX2FkZHJlc3MpOworCQlpZiAocGdkX25vbmUoKnBnZCkpIHsKKwkJCWVuZF9hZGRyZXNzICs9IFBHRElSX1NJWkU7CisJCQljb250aW51ZTsKKwkJfQorCisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBlbmRfYWRkcmVzcyk7CisJCWlmIChwdWRfbm9uZSgqcHVkKSkgeworCQkJZW5kX2FkZHJlc3MgKz0gUFVEX1NJWkU7CisJCQljb250aW51ZTsKKwkJfQorCisJCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBlbmRfYWRkcmVzcyk7CisJCWlmIChwbWRfbm9uZSgqcG1kKSkgeworCQkJZW5kX2FkZHJlc3MgKz0gUE1EX1NJWkU7CisJCQljb250aW51ZTsKKwkJfQorCisJCXB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgZW5kX2FkZHJlc3MpOworcmV0cnlfcHRlOgorCQlpZiAocHRlX25vbmUoKnB0ZSkpIHsKKwkJCWVuZF9hZGRyZXNzICs9IFBBR0VfU0laRTsKKwkJCXB0ZSsrOworCQkJaWYgKChlbmRfYWRkcmVzcyA8IHN0b3BfYWRkcmVzcykgJiYKKwkJCSAgICAoZW5kX2FkZHJlc3MgIT0gQUxJR04oZW5kX2FkZHJlc3MsIDFVTCA8PCBQTURfU0hJRlQpKSkKKwkJCQlnb3RvIHJldHJ5X3B0ZTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEZvdW5kIG5leHQgdmFsaWQgdm1lbV9tYXAgcGFnZSAqLworCQlicmVhazsKKwl9IHdoaWxlIChlbmRfYWRkcmVzcyA8IHN0b3BfYWRkcmVzcyk7CisKKwllbmRfYWRkcmVzcyA9IG1pbihlbmRfYWRkcmVzcywgc3RvcF9hZGRyZXNzKTsKKwllbmRfYWRkcmVzcyA9IGVuZF9hZGRyZXNzIC0gKHVuc2lnbmVkIGxvbmcpIHZtZW1fbWFwICsgc2l6ZW9mKHN0cnVjdCBwYWdlKSAtIDE7CisJaG9sZV9uZXh0X3BmbiA9IGVuZF9hZGRyZXNzIC8gc2l6ZW9mKHN0cnVjdCBwYWdlKTsKKwlyZXR1cm4gaG9sZV9uZXh0X3BmbiAtIHBnZGF0LT5ub2RlX3N0YXJ0X3BmbjsKK30KIAogaW50IF9faW5pdAogY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSAodTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICphcmcpCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC9pYTY0L21tL2lvcmVtYXAuYwppbmRleCAwN2JkMDJiLi40MjgwYzA3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvaWE2NC9tbS9pb3JlbWFwLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAkgKi8KIAlhdHRyID0ga2Vybl9tZW1fYXR0cmlidXRlKG9mZnNldCwgc2l6ZSk7CiAJaWYgKGF0dHIgJiBFRklfTUVNT1JZX1dCKQotCQlyZXR1cm4gcGh5c190b192aXJ0KG9mZnNldCk7CisJCXJldHVybiAodm9pZCBfX2lvbWVtICopIHBoeXNfdG9fdmlydChvZmZzZXQpOwogCWVsc2UgaWYgKGF0dHIgJiBFRklfTUVNT1JZX1VDKQogCQlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSk7CiAKQEAgLTQzLDcgKzQzLDcgQEAKIAlncmFuX2Jhc2UgPSBHUkFOVUxFUk9VTkRET1dOKG9mZnNldCk7CiAJZ3Jhbl9zaXplID0gR1JBTlVMRVJPVU5EVVAob2Zmc2V0ICsgc2l6ZSkgLSBncmFuX2Jhc2U7CiAJaWYgKGVmaV9tZW1fYXR0cmlidXRlKGdyYW5fYmFzZSwgZ3Jhbl9zaXplKSAmIEVGSV9NRU1PUllfV0IpCi0JCXJldHVybiBwaHlzX3RvX3ZpcnQob2Zmc2V0KTsKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikgcGh5c190b192aXJ0KG9mZnNldCk7CiAKIAlyZXR1cm4gX19pb3JlbWFwKG9mZnNldCwgc2l6ZSk7CiB9CkBAIC01Myw3ICs1Myw3IEBACiBpb3JlbWFwX25vY2FjaGUgKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJaWYgKGtlcm5fbWVtX2F0dHJpYnV0ZShvZmZzZXQsIHNpemUpICYgRUZJX01FTU9SWV9XQikKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIF9faW9yZW1hcChvZmZzZXQsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCmluZGV4IGMxMTllOGIuLjVmMmRjYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKQEAgLTU2NSw3ICs1NjUsNyBAQAogICogQWxzbyBzZXRzIHVwIGEgZmV3IGZpZWxkcyBpbiB0aGUgbm9kZXBkYS4gIEFsc28ga25vd24gYXMKICAqIHBsYXRmb3JtX2NwdV9pbml0KCkgYnkgdGhlIGlhNjQgbWFjaHZlYyBjb2RlLgogICovCi12b2lkIF9faW5pdCBzbl9jcHVfaW5pdCh2b2lkKQordm9pZCBfX2NwdWluaXQgc25fY3B1X2luaXQodm9pZCkKIHsKIAlpbnQgY3B1aWQ7CiAJaW50IGNwdXBoeWlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfY2hhbm5lbC5jCmluZGV4IGMyZjY5ZjcuLjFmMzU0MDggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX2NoYW5uZWwuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19jaGFubmVsLmMKQEAgLTI3OSw4ICsyNzksOCBAQAogCQlyZXR1cm4gcGFydC0+cmVhc29uOwogCX0KIAotCWJ0ZV9yZXQgPSB4cF9idGVfY29weSgodTY0KSBzcmMsICh1NjQpIGlhNjRfdHBhKCh1NjQpIGRzdCksCi0JCQkJKHU2NCkgY250LCAoQlRFX05PUk1BTCB8IEJURV9XQUNRVUlSRSksIE5VTEwpOworCWJ0ZV9yZXQgPSB4cF9idGVfY29weSgodTY0KSBzcmMsICh1NjQpIGRzdCwgKHU2NCkgY250LAorCQkJCQkoQlRFX05PUk1BTCB8IEJURV9XQUNRVUlSRSksIE5VTEwpOwogCWlmIChidGVfcmV0ID09IEJURV9TVUNDRVNTKSB7CiAJCXJldHVybiB4cGNTdWNjZXNzOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwppbmRleCA5OWIxMjNhNi4uNGQwMjZmOSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfbWFpbi5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwveHBjX21haW4uYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJcGFydGlkX3QgcGFydGlkID0gKHU2NCkgX19wYXJ0aWQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQgPSAmeHBjX3BhcnRpdGlvbnNbcGFydGlkXTsKIAl1bnNpZ25lZCBsb25nIGlycV9mbGFnczsKLQlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IHNjaGVkX3ByaW9yaXR5OiBNQVhfUlRfUFJJTyAtIDEgfTsKKwlzdHJ1Y3Qgc2NoZWRfcGFyYW0gcGFyYW0gPSB7IC5zY2hlZF9wcmlvcml0eSA9IE1BWF9SVF9QUklPIC0gMSB9OwogCWludCByZXQ7CiAKIApAQCAtMTA1Miw2ICsxMDUyLDggQEAKIAlpZiAoeHBjX3N5c2N0bCkgewogCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZSh4cGNfc3lzY3RsKTsKIAl9CisKKwlrZnJlZSh4cGNfcmVtb3RlX2NvcHlfYnVmZmVyX2Jhc2UpOwogfQogCiAKQEAgLTEyMTIsMjQgKzEyMTQsMjAgQEAKIAlwYXJ0aWRfdCBwYXJ0aWQ7CiAJc3RydWN0IHhwY19wYXJ0aXRpb24gKnBhcnQ7CiAJcGlkX3QgcGlkOworCXNpemVfdCBidWZfc2l6ZTsKIAogCiAJaWYgKCFpYTY0X3BsYXRmb3JtX2lzKCJzbjIiKSkgewogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQkvKgotCSAqIHhwY19yZW1vdGVfY29weV9idWZmZXIgaXMgdXNlZCBhcyBhIHRlbXBvcmFyeSBidWZmZXIgZm9yIGJ0ZV9jb3B5J25nCi0JICogdmFyaW91cyBwb3J0aW9ucyBvZiBhIHBhcnRpdGlvbidzIHJlc2VydmVkIHBhZ2UuIEl0cyBzaXplIGlzIGJhc2VkCi0JICogb24gdGhlIHNpemUgb2YgdGhlIHJlc2VydmVkIHBhZ2UgaGVhZGVyIGFuZCBwYXJ0X25hc2lkcyBtYXNrLiBTbyB3ZQotCSAqIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG90aGVyIGl0ZW1zIHdpbGwgZml0IGFzIHdlbGwuCi0JICovCi0JaWYgKFhQQ19SUF9WQVJTX1NJWkUgPiBYUENfUlBfSEVBREVSX1NJWkUgKyBYUF9OQVNJRF9NQVNLX0JZVEVTKSB7Ci0JCWRldl9lcnIoeHBjX3BhcnQsICJ4cGNfcmVtb3RlX2NvcHlfYnVmZmVyIGlzIG5vdCBiaWcgZW5vdWdoXG4iKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0JREJVR19PTigodTY0KSB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyICE9Ci0JCQkJTDFfQ0FDSEVfQUxJR04oKHU2NCkgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcikpOworCisJYnVmX3NpemUgPSBtYXgoWFBDX1JQX1ZBUlNfU0laRSwKKwkJCQlYUENfUlBfSEVBREVSX1NJWkUgKyBYUF9OQVNJRF9NQVNLX0JZVEVTKTsKKwl4cGNfcmVtb3RlX2NvcHlfYnVmZmVyID0geHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoYnVmX3NpemUsCisJCQkJICAgICBHRlBfS0VSTkVMLCAmeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcl9iYXNlKTsKKwlpZiAoeHBjX3JlbW90ZV9jb3B5X2J1ZmZlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNucHJpbnRmKHhwY19wYXJ0LT5idXNfaWQsIEJVU19JRF9TSVpFLCAicGFydCIpOwogCXNucHJpbnRmKHhwY19jaGFuLT5idXNfaWQsIEJVU19JRF9TSVpFLCAiY2hhbiIpOwpAQCAtMTI5Myw2ICsxMjkxLDggQEAKIAkJaWYgKHhwY19zeXNjdGwpIHsKIAkJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHhwY19zeXNjdGwpOwogCQl9CisKKwkJa2ZyZWUoeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcl9iYXNlKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTEzMTEsNiArMTMxMSw4IEBACiAJCWlmICh4cGNfc3lzY3RsKSB7CiAJCQl1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZSh4cGNfc3lzY3RsKTsKIAkJfQorCisJCWtmcmVlKHhwY19yZW1vdGVfY29weV9idWZmZXJfYmFzZSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xMzYyLDYgKzEzNjQsOCBAQAogCQlpZiAoeHBjX3N5c2N0bCkgewogCQkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUoeHBjX3N5c2N0bCk7CiAJCX0KKworCQlrZnJlZSh4cGNfcmVtb3RlX2NvcHlfYnVmZmVyX2Jhc2UpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC94cGNfcGFydGl0aW9uLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwppbmRleCAyYTg5Y2ZjLi41N2M3MjNmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL3hwY19wYXJ0aXRpb24uYwpAQCAtNzEsMTkgKzcxLDE1IEBACiAgKiBHZW5lcmljIGJ1ZmZlciB1c2VkIHRvIHN0b3JlIGEgbG9jYWwgY29weSBvZiBwb3J0aW9ucyBvZiBhIHJlbW90ZQogICogcGFydGl0aW9uJ3MgcmVzZXJ2ZWQgcGFnZSAoZWl0aGVyIGl0cyBoZWFkZXIgYW5kIHBhcnRfbmFzaWRzIG1hc2ssCiAgKiBvciBpdHMgdmFycykuCi0gKgotICogeHBjX2Rpc2NvdmVyeSBydW5zIG9ubHkgb25jZSBhbmQgaXMgYSBzZXBlcmF0ZSB0aHJlYWQgdGhhdCBpcwotICogdmVyeSBsaWtlbHkgZ29pbmcgdG8gYmUgcHJvY2Vzc2luZyBpbiBwYXJhbGxlbCB3aXRoIHJlY2VpdmluZwotICogaW50ZXJydXB0cy4KICAqLwotY2hhciBfX19fY2FjaGVsaW5lX2FsaWduZWQgeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcltYUENfUlBfSEVBREVSX1NJWkUgKwotCQkJCQkJCVhQX05BU0lEX01BU0tfQllURVNdOworY2hhciAqeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcjsKK3ZvaWQgKnhwY19yZW1vdGVfY29weV9idWZmZXJfYmFzZTsKIAogCiAvKgogICogR3VhcmFudGVlIHRoYXQgdGhlIGttYWxsb2MnZCBtZW1vcnkgaXMgY2FjaGVsaW5lIGFsaWduZWQuCiAgKi8KLXN0YXRpYyB2b2lkICoKK3ZvaWQgKgogeHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCB2b2lkICoqYmFzZSkKIHsKIAkvKiBzZWUgaWYga21hbGxvYyB3aWxsIGdpdmUgdXMgY2FjaGxpbmUgYWxpZ25lZCBtZW1vcnkgYnkgZGVmYXVsdCAqLwpAQCAtMTQ4LDcgKzE0NCw3IEBACiAJCQl9CiAJCX0KIAotCQlidGVfcmVzID0geHBfYnRlX2NvcHkocnBfcGEsIGlhNjRfdHBhKGJ1ZiksIGJ1Zl9sZW4sCisJCWJ0ZV9yZXMgPSB4cF9idGVfY29weShycF9wYSwgYnVmLCBidWZfbGVuLAogCQkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOwogCQlpZiAoYnRlX3JlcyAhPSBCVEVfU1VDQ0VTUykgewogCQkJZGV2X2RiZyh4cGNfcGFydCwgInhwX2J0ZV9jb3B5IGZhaWxlZCAlaVxuIiwgYnRlX3Jlcyk7CkBAIC00NDcsNyArNDQzLDcgQEAKIAogCQkvKiBwdWxsIHRoZSByZW1vdGVfaGIgY2FjaGUgbGluZSAqLwogCQlicmVzID0geHBfYnRlX2NvcHkocGFydC0+cmVtb3RlX3ZhcnNfcGEsCi0JCQkJCWlhNjRfdHBhKCh1NjQpIHJlbW90ZV92YXJzKSwKKwkJCQkJKHU2NCkgcmVtb3RlX3ZhcnMsCiAJCQkJCVhQQ19SUF9WQVJTX1NJWkUsCiAJCQkJCShCVEVfTk9USUZZIHwgQlRFX1dBQ1FVSVJFKSwgTlVMTCk7CiAJCWlmIChicmVzICE9IEJURV9TVUNDRVNTKSB7CkBAIC00OTgsOCArNDk0LDcgQEAKIAogCiAJLyogcHVsbCBvdmVyIHRoZSByZXNlcnZlZCBwYWdlIGhlYWRlciBhbmQgcGFydF9uYXNpZHMgbWFzayAqLwotCi0JYnJlcyA9IHhwX2J0ZV9jb3B5KCpyZW1vdGVfcnBfcGEsIGlhNjRfdHBhKCh1NjQpIHJlbW90ZV9ycCksCisJYnJlcyA9IHhwX2J0ZV9jb3B5KCpyZW1vdGVfcnBfcGEsICh1NjQpIHJlbW90ZV9ycCwKIAkJCQlYUENfUlBfSEVBREVSX1NJWkUgKyB4cF9uYXNpZF9tYXNrX2J5dGVzLAogCQkJCShCVEVfTk9USUZZIHwgQlRFX1dBQ1FVSVJFKSwgTlVMTCk7CiAJaWYgKGJyZXMgIT0gQlRFX1NVQ0NFU1MpIHsKQEAgLTU1NCwxMSArNTQ5LDggQEAKIAkJcmV0dXJuIHhwY1ZhcnNOb3RTZXQ7CiAJfQogCi0KIAkvKiBwdWxsIG92ZXIgdGhlIGNyb3NzIHBhcnRpdGlvbiB2YXJpYWJsZXMgKi8KLQotCWJyZXMgPSB4cF9idGVfY29weShyZW1vdGVfdmFyc19wYSwgaWE2NF90cGEoKHU2NCkgcmVtb3RlX3ZhcnMpLAotCQkJCVhQQ19SUF9WQVJTX1NJWkUsCisJYnJlcyA9IHhwX2J0ZV9jb3B5KHJlbW90ZV92YXJzX3BhLCAodTY0KSByZW1vdGVfdmFycywgWFBDX1JQX1ZBUlNfU0laRSwKIAkJCQkoQlRFX05PVElGWSB8IEJURV9XQUNRVUlSRSksIE5VTEwpOwogCWlmIChicmVzICE9IEJURV9TVUNDRVNTKSB7CiAJCXJldHVybiB4cGNfbWFwX2J0ZV9lcnJvcnMoYnJlcyk7CkBAIC0xMjM5LDcgKzEyMzEsNyBAQAogCiAJcGFydF9uYXNpZF9wYSA9ICh1NjQpIFhQQ19SUF9QQVJUX05BU0lEUyhwYXJ0LT5yZW1vdGVfcnBfcGEpOwogCi0JYnRlX3JlcyA9IHhwX2J0ZV9jb3B5KHBhcnRfbmFzaWRfcGEsIGlhNjRfdHBhKCh1NjQpIG5hc2lkX21hc2spLAorCWJ0ZV9yZXMgPSB4cF9idGVfY29weShwYXJ0X25hc2lkX3BhLCAodTY0KSBuYXNpZF9tYXNrLAogCQkJeHBfbmFzaWRfbWFza19ieXRlcywgKEJURV9OT1RJRlkgfCBCVEVfV0FDUVVJUkUpLCBOVUxMKTsKIAogCXJldHVybiB4cGNfbWFwX2J0ZV9lcnJvcnMoYnRlX3Jlcyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMgYi9hcmNoL2lhNjQvc24vcGNpL3Rpb2NlX3Byb3ZpZGVyLmMKaW5kZXggMTdjZDM0Mi4uYWY3MTcxYSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS90aW9jZV9wcm92aWRlci5jCisrKyBiL2FyY2gvaWE2NC9zbi9wY2kvdGlvY2VfcHJvdmlkZXIuYwpAQCAtNzQsNyArNzQsNyBAQAogCQllbHNlCiAJCQltbXJfd2FyX29mZnNldCA9IDB4MTU4OwogCi0JCXJlYWRxX3JlbGF4ZWQoKHZvaWQgKikobW1yX2Jhc2UgKyBtbXJfd2FyX29mZnNldCkpOworCQlyZWFkcV9yZWxheGVkKCh2b2lkIF9faW9tZW0gKikobW1yX2Jhc2UgKyBtbXJfd2FyX29mZnNldCkpOwogCX0KIH0KIApAQCAtOTIsOCArOTIsOCBAQAogCiAJaWYgKG1tcl9vZmZzZXQgPCAweDQ1MDAwKSB7CiAJCWlmIChtbXJfb2Zmc2V0ID09IDB4MTAwKQotCQkJcmVhZHFfcmVsYXhlZCgodm9pZCAqKShtbXJfYmFzZSArIDB4MzgpKTsKLQkJcmVhZHFfcmVsYXhlZCgodm9pZCAqKShtbXJfYmFzZSArIDB4YjA1MCkpOworCQkJcmVhZHFfcmVsYXhlZCgodm9pZCBfX2lvbWVtICopKG1tcl9iYXNlICsgMHgzOCkpOworCQlyZWFkcV9yZWxheGVkKCh2b2lkIF9faW9tZW0gKikobW1yX2Jhc2UgKyAweGIwNTApKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOTk4OTQ5NS4uYjM2NzdmYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yMDQsNiArMjA0LDcgQEAKIAkqKC5keW5zdHIpCiAJKiguZHluYW1pYykKIAkqKC5oYXNoKQorCSooLmdudS5oYXNoKQogI2VuZGlmCiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCmluZGV4IDI2NDNkYmMuLmRlMWVmMmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnCkBAIC05NSw2ICs5NSwxMCBAQAogCWRlZmF1bHQgeSBpZiBQUEMzMiAmJiBTTVAKIAlkZWZhdWx0IG4KIAorY29uZmlnIEFVRElUX0FSQ0gKKwlib29sCisJZGVmYXVsdCB5CisKIGNvbmZpZyBERUZBVUxUX1VJTUFHRQogCWJvb2wKIAloZWxwCkBAIC0zNTQsNiArMzU4LDcgQEAKIGNvbmZpZyBQUENfUFNFUklFUwogCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKIAlib29sICJJQk0gcFNlcmllcyAmIG5ldyAoUE9XRVI1LWJhc2VkKSBpU2VyaWVzIgorCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBQQ19JODI1OQogCXNlbGVjdCBQUENfUlRBUwogCXNlbGVjdCBSVEFTX0VSUk9SX0xPR0dJTkcKQEAgLTM2Myw2ICszNjgsNyBAQAogY29uZmlnIFBQQ19DSFJQCiAJYm9vbCAiQ29tbW9uIEhhcmR3YXJlIFJlZmVyZW5jZSBQbGF0Zm9ybSAoQ0hSUCkgYmFzZWQgbWFjaGluZXMiCiAJZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMgorCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBQQ19JODI1OQogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCiAJc2VsZWN0IFBQQ19SVEFTCkBAIC0zNzMsNiArMzc5LDcgQEAKIGNvbmZpZyBQUENfUE1BQwogCWJvb2wgIkFwcGxlIFBvd2VyTWFjIGJhc2VkIG1hY2hpbmVzIgogCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0KKwlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJIGlmIFBQQzMyCiAJc2VsZWN0IFBQQ19NUEMxMDYgaWYgUFBDMzIKIAlkZWZhdWx0IHkKQEAgLTM4MCw2ICszODcsNyBAQAogY29uZmlnIFBQQ19QTUFDNjQKIAlib29sCiAJZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBQT1dFUjQKKwlzZWxlY3QgTVBJQwogCXNlbGVjdCBVM19EQVJUCiAJc2VsZWN0IE1QSUNfQlJPS0VOX1UzCiAJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCkBAIC0zODksNiArMzk3LDcgQEAKIGNvbmZpZyBQUENfUFJFUAogCWJvb2wgIlBvd2VyUEMgUmVmZXJlbmNlIFBsYXRmb3JtIChQUmVQKSBiYXNlZCBtYWNoaW5lcyIKIAlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyICYmIEJST0tFTgorCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBQQ19JODI1OQogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCkBAIC0zOTcsNiArNDA2LDcgQEAKIGNvbmZpZyBQUENfTUFQTEUKIAlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CiAJYm9vbCAiTWFwbGUgOTcwRlggRXZhbHVhdGlvbiBCb2FyZCIKKwlzZWxlY3QgTVBJQwogCXNlbGVjdCBVM19EQVJUCiAJc2VsZWN0IE1QSUNfQlJPS0VOX1UzCiAJc2VsZWN0IEdFTkVSSUNfVEJTWU5DCkBAIC00MDcsNiArNDE3LDE3IEBACiAgICAgICAgICAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTWFwbGUgOTcwRlggRXZhbHVhdGlvbiBCb2FyZC4KIAkgIEZvciBtb3JlIGluZm9ybWF0aW9ucywgcmVmZXIgdG8gPGh0dHA6Ly93d3cuOTcwZXZhbC5jb20+CiAKK2NvbmZpZyBQUENfUEFTRU1JCisJZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWJvb2wgIlBBIFNlbWkgU29DLWJhc2VkIHBsYXRmb3JtcyIKKwlkZWZhdWx0IG4KKwlzZWxlY3QgTVBJQworCXNlbGVjdCBQUENfVURCR18xNjU1MAorCXNlbGVjdCBHRU5FUklDX1RCU1lOQworCWhlbHAKKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgUEEgU2VtaSdzIFBXUmZpY2llbnQgbGluZQorCSAgb2YgU29DIHByb2Nlc3NvcnMsIGluY2x1ZGluZyBQQTZULTE2ODJNCisKIGNvbmZpZyBQUENfQ0VMTAogCWJvb2wKIAlkZWZhdWx0IG4KQEAgLTQyNiw3ICs0NDcsOCBAQAogCXNlbGVjdCBVREJHX1JUQVNfQ09OU09MRQogCiBjb25maWcgVURCR19SVEFTX0NPTlNPTEUKLQlib29sCisJYm9vbCAiUlRBUyBiYXNlZCBkZWJ1ZyBjb25zb2xlIgorCWRlcGVuZHMgb24gUFBDX1JUQVMKIAlkZWZhdWx0IG4KIAogY29uZmlnIFhJQ1MKQEAgLTQzOSwxMiArNDYxLDYgQEAKIAlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CiAJZGVmYXVsdCBuCiAKLWNvbmZpZyBNUElDCi0JZGVwZW5kcyBvbiBQUENfUFNFUklFUyB8fCBQUENfUE1BQyB8fCBQUENfTUFQTEUgfHwgUFBDX0NIUlAgXAotCQkJICAgICAgIHx8IE1QQzc0NDhIUEMyCi0JYm9vbAotCWRlZmF1bHQgeQotCiBjb25maWcgUFBDX1JUQVMKIAlib29sCiAJZGVmYXVsdCBuCkBAIC01MDQsNyArNTIwLDcgQEAKIAogY29uZmlnIENQVV9GUkVRX1BNQUM2NAogCWJvb2wgIlN1cHBvcnQgZm9yIHNvbWUgQXBwbGUgRzVzIgotCWRlcGVuZHMgb24gQ1BVX0ZSRVEgJiYgUE1BQ19TTVUgJiYgUFBDNjQKKwlkZXBlbmRzIG9uIENQVV9GUkVRICYmIFBQQzY0CiAJc2VsZWN0IENQVV9GUkVRX1RBQkxFCiAJaGVscAogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGZyZXF1ZW5jeSBzd2l0Y2hpbmcgb24gQXBwbGUgaU1hYyBHNSwKQEAgLTgxMiw2ICs4MjgsMTQgQEAKIAlkZXBlbmRzIG9uIFBQQzY0IHx8IFBPV0VSNCB8fCA2eHggJiYgIUNQTTIKIAlkZWZhdWx0IHkKIAorY29uZmlnIE1QSUMKKwlib29sCisJZGVmYXVsdCBuCisKK2NvbmZpZyBNUElDX1dFSVJECisJYm9vbAorCWRlZmF1bHQgbgorCiBjb25maWcgUFBDX0k4MjU5CiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtODM2LDkgKzg2MCwxMCBAQAogCWJvb2wKIAogY29uZmlnIFBDSQotCWJvb2wgIlBDSSBzdXBwb3J0IiBpZiA0MHggfHwgQ1BNMiB8fCBQUENfODN4eCB8fCBQUENfODV4eCB8fCBQUENfTVBDNTJ4eCB8fCAoRU1CRURERUQgJiYgUFBDX0lTRVJJRVMpIFwKLQkJCQkgIHx8IE1QQzc0NDhIUEMyCi0JZGVmYXVsdCB5IGlmICE0MHggJiYgIUNQTTIgJiYgITh4eCAmJiAhQVBVUyAmJiAhUFBDXzgzeHggJiYgIVBQQ184NXh4ICYmICFQUENfODZ4eAorCWJvb2wgIlBDSSBzdXBwb3J0IiBpZiA0MHggfHwgQ1BNMiB8fCBQUENfODN4eCB8fCBQUENfODV4eCB8fCBQUENfODZ4eCBcCisJCXx8IFBQQ19NUEM1Mnh4IHx8IChFTUJFRERFRCAmJiBQUENfSVNFUklFUykgfHwgTVBDNzQ0OEhQQzIKKwlkZWZhdWx0IHkgaWYgITQweCAmJiAhQ1BNMiAmJiAhOHh4ICYmICFBUFVTICYmICFQUENfODN4eCBcCisJCSYmICFQUENfODV4eCAmJiAhUFBDXzg2eHgKIAlkZWZhdWx0IFBDSV9QRVJNRURJQSBpZiAhNHh4ICYmICFDUE0yICYmICE4eHggJiYgQVBVUwogCWRlZmF1bHQgUENJX1FTUEFOIGlmICE0eHggJiYgIUNQTTIgJiYgOHh4CiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZwppbmRleCBlMjllZjc3ZC4uNWFkMTQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcuZGVidWcKQEAgLTE4LDYgKzE4LDIwIEBACiAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCiAKK2NvbmZpZyBIQ0FMTF9TVEFUUworCWJvb2wgIkh5cGVydmlzb3IgY2FsbCBpbnN0cnVtZW50YXRpb24iCisJZGVwZW5kcyBvbiBQUENfUFNFUklFUyAmJiBERUJVR19GUworCWhlbHAKKwkgIEFkZHMgY29kZSB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgaHlwZXJ2aXNvciBjYWxscyBtYWRlIGFuZAorCSAgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IGluIGh5cGVydmlzb3IgY2FsbHNyLiAgV2FsbCB0aW1lIHNwZW50IGluCisJICBlYWNoIGNhbGwgaXMgYWx3YXlzIGNhbGN1bGF0ZWQsIGFuZCBpZiBhdmFpbGFibGUgQ1BVIGN5Y2xlcyBzcGVudAorCSAgYXJlIGFsc28gY2FsY3VsYXRlZC4gIEEgZGlyZWN0b3J5IG5hbWVkIGhjYWxsX2luc3QgaXMgYWRkZWQgYXQgdGhlCisJICByb290IG9mIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0uICBXaXRoaW4gdGhlIGhjYWxsX2luc3QgZGlyZWN0b3J5CisJICBhcmUgZmlsZXMgdGhhdCBjb250YWluIENQVSBzcGVjaWZpYyBjYWxsIHN0YXRpc3RpY3MuCisKKwkgIFRoaXMgb3B0aW9uIHdpbGwgYWRkIGEgc21hbGwgYW1vdW50IG9mIG92ZXJoZWFkIHRvIGFsbCBoeXBlcnZpc29yCisJICBjYWxscy4KKwogY29uZmlnIERFQlVHR0VSCiAJYm9vbCAiRW5hYmxlIGRlYnVnZ2VyIGhvb2tzIgogCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCkBAIC03NCw2ICs4OCw4IEBACiAJICB2ZXJ5IGVhcmx5IGR1cmluZyBib290LiAneG1vbj1vbicgd2lsbCBqdXN0IGVuYWJsZSB0aGUgeG1vbgogCSAgZGVidWdnZXIgaG9va3MuICAneG1vbj1vZmYnIHdpbGwgZGlzYWJsZSB0aGUgZGVidWdnZXIgaG9va3MKIAkgIGlmIENPTkZJR19YTU9OX0RFRkFVTFQgaXMgc2V0LgorCSAgeG1vbiB3aWxsIHByaW50IGEgYmFja3RyYWNlIG9uIHRoZSB2ZXJ5IGZpcnN0IGludm9jYXRpb24uCisJICAneG1vbj1ub2J0JyB3aWxsIGRpc2FibGUgdGhpcyBhdXRvYmFja3RyYWNlLgogCiBjb25maWcgWE1PTl9ERUZBVUxUCiAJYm9vbCAiRW5hYmxlIHhtb24gYnkgZGVmYXVsdCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggZDk2MWJmZS4uZTczNzc0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTM2LDExICszNiwxNiBAQAogJChhZGRwcmVmaXggJChvYmopLywkKHpsaWIpIG1haW4ubyk6ICQoYWRkcHJlZml4ICQob2JqKS8sJCh6bGlibGludXhoZWFkZXIpKSAkKGFkZHByZWZpeCAkKG9iaikvLCQoemxpYmhlYWRlcikpCiAjJChhZGRwcmVmaXggJChvYmopLyxtYWluLm8pOiAkKGFkZHByZWZpeCAkKG9iaikvLHpsaWIuaCkKIAotc3JjLWJvb3QgOj0gY3J0MC5TIHN0cmluZy5TIHByb20uYyBzdGRpby5jIG1haW4uYyBkaXY2NC5TCitzcmMtYm9vdC0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkgOj0gb2YuYworc3JjLWJvb3QgOj0gY3J0MC5TIHN0cmluZy5TIHN0ZGlvLmMgbWFpbi5jIGRpdjY0LlMgJChzcmMtYm9vdC15KQogc3JjLWJvb3QgKz0gJCh6bGliKQogc3JjLWJvb3QgOj0gJChhZGRwcmVmaXggJChvYmopLywgJChzcmMtYm9vdCkpCiBvYmotYm9vdCA6PSAkKGFkZHN1ZmZpeCAubywgJChiYXNlbmFtZSAkKHNyYy1ib290KSkpCiAKK2lmZXEgKCQoY2FsbCBjYy1vcHRpb24teW4sIC1mc3RhY2stcHJvdGVjdG9yKSx5KQorQk9PVENGTEFHUwkrPSAtZm5vLXN0YWNrLXByb3RlY3RvcgorZW5kaWYKKwogQk9PVENGTEFHUwkrPSAtSSQob2JqKSAtSSQoc3JjdHJlZSkvJChvYmopCiAKIHF1aWV0X2NtZF9jb3B5X3psaWIgPSBDT1BZICAgICRACmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjNzQ0OGhwYzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzc0NDhocGMyLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2I5ODVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzc0NDhocGMyLmR0cwpAQCAtMCwwICsxLDE5MCBAQAorLyoKKyAqIE1QQzc0NDhIUEMyIChUYWlnYSkgYm9hcmQgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICogMjAwNiBSb3kgWmFuZyA8Um95IFphbmcgYXQgZnJlZXNjYWxlLmNvbT4uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisKKy8geworCW1vZGVsID0gIm1wYzc0NDhocGMyIjsKKwljb21wYXRpYmxlID0gIm1wYzc0eHgiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWxpbnV4LHBoYW5kbGUgPSA8MTAwPjsKKworCWNwdXMgeworCQkjY3B1cyA9IDwxPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID08MD47CisJCWxpbnV4LHBoYW5kbGUgPSA8MjAwPjsKKwkJCQkKKwkJUG93ZXJQQyw3NDQ4QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksgYnl0ZXMKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksgYnl0ZXMKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gMzMgTUh6LCBmcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIFUtQm9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gVS1Cb290CisJCQkzMi1iaXQ7CisJCQlsaW51eCxwaGFuZGxlID0gPDIwMT47CisJCQlsaW51eCxib290LWNwdTsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJbGludXgscGhhbmRsZSA9IDwzMDA+OworCQlyZWcgPSA8MDAwMDAwMDAgMjAwMDAwMDAJLy8gRERSMiAgIDUxMk0gYXQgMAorCQkgICAgICAgPjsKKwl9OworCisgIAl0c2kxMDhAYzAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWRldmljZV90eXBlID0gInRzaS1icmlkZ2UiOworCQlyYW5nZXMgPSA8MDAwMDAwMDAgYzAwMDAwMDAgMDAwMTAwMDA+OworCQlyZWcgPSA8YzAwMDAwMDAgMDAwMTAwMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCWkyY0A3MDAwIHsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzQwMD47CisJCQlpbnRlcnJ1cHRzID0gPEUgMD47CisJCQlyZWcgPSA8NzAwMCA0MDA+OworCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCWNvbXBhdGlibGUgID0gInRzaS1pMmMiOworCQl9OworCisJCW1kaW9ANjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKKwkJCWNvbXBhdGlibGUgPSAidHNpLWV0aGVybmV0IjsKKworCQkJZXRoZXJuZXQtcGh5QDYwMDAgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8NjAwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIgMT47CisJCQkJcmVnID0gPDYwMDAgNTA+OworCQkJCXBoeS1pZCA9IDw4PjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKworCQkJZXRoZXJuZXQtcGh5QDY0MDAgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8NjQwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIgMT47CisJCQkJcmVnID0gPDYwMDAgNTA+OworCQkJCXBoeS1pZCA9IDw5PjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKworCQl9OworCisJCWV0aGVybmV0QDYyMDAgeworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTSS1FVEgiOworCQkJY29tcGF0aWJsZSA9ICJ0c2ktZXRoZXJuZXQiOworCQkJcmVnID0gPDYwMDAgMjAwPjsKKwkJCWFkZHJlc3MgPSBbIDAwIDA2IEQyIDAwIDAwIDAxIF07CisJCQlpbnRlcnJ1cHRzID0gPDEwIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3NDAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8NjAwMD47CisJCX07CisKKwkJZXRoZXJuZXRANjYwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0ktRVRIIjsKKwkJCWNvbXBhdGlibGUgPSAidHNpLWV0aGVybmV0IjsKKwkJCXJlZyA9IDw2NDAwIDIwMD47CisJCQlhZGRyZXNzID0gWyAwMCAwNiBEMiAwMCAwMCAwMiBdOworCQkJaW50ZXJydXB0cyA9IDwxMSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzQwMD47CisJCQlwaHktaGFuZGxlID0gPDY0MDA+OworCQl9OworCisJCXNlcmlhbEA3ODA4IHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDc4MDggMjAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjZiNWEwMD47CisJCQlpbnRlcnJ1cHRzID0gPGMgMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDc0MDA+OworCQl9OworCisJCXNlcmlhbEA3YzA4IHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDdjMDggMjAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjZiNWEwMD47CisJCQlpbnRlcnJ1cHRzID0gPGQgMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDc0MDA+OworCQl9OworCisJICAJcGljQDc0MDAgeworCQkJbGludXgscGhhbmRsZSA9IDw3NDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDc0MDAgNDAwPjsKKwkJCWJ1aWx0LWluOworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKyAgICAgICAgICAgICAgICAgICAgICAgCWJpZy1lbmRpYW47CisJCX07CisJCXBjaUAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAidHNpMTB4IjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlsaW51eCxwaGFuZGxlID0gPDEwMDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8MTAwMCAxMDAwPjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgZTAwMDAwMDAgZTAwMDAwMDAgMCAxQTAwMDAwMAkKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZmEwMDAwMDAgMCAwMDAxMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8N2YyODE1ND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDc0MDA+OworCQkJaW50ZXJydXB0cyA9IDwxNyAyPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisKKwkJCQkvKiBJRFNFTCAweDExICovCisJCQkJMDgwMCAwIDAgMSA3NDAwIDI0IDAKKwkJCQkwODAwIDAgMCAyIDc0MDAgMjUgMAorCQkJCTA4MDAgMCAwIDMgNzQwMCAyNiAwCisJCQkJMDgwMCAwIDAgNCA3NDAwIDI3IDAKKworCQkJCS8qIElEU0VMIDB4MTIgKi8KKwkJCQkxMDAwIDAgMCAxIDc0MDAgMjUgMAorCQkJCTEwMDAgMCAwIDIgNzQwMCAyNiAwCisJCQkJMTAwMCAwIDAgMyA3NDAwIDI3IDAKKwkJCQkxMDAwIDAgMCA0IDc0MDAgMjQgMAorCisJCQkJLyogSURTRUwgMHgxMyAqLworCQkJCTE4MDAgMCAwIDEgNzQwMCAyNiAwCisJCQkJMTgwMCAwIDAgMiA3NDAwIDI3IDAKKwkJCQkxODAwIDAgMCAzIDc0MDAgMjQgMAorCQkJCTE4MDAgMCAwIDQgNzQwMCAyNSAwCisKKwkJCQkvKiBJRFNFTCAweDE0ICovCisJCQkJMjAwMCAwIDAgMSA3NDAwIDI3IDAKKwkJCQkyMDAwIDAgMCAyIDc0MDAgMjQgMAorCQkJCTIwMDAgMCAwIDMgNzQwMCAyNSAwCisJCQkJMjAwMCAwIDAgNCA3NDAwIDI2IDAKKwkJCQk+OworCQl9OworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWRzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmNlYjM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWRzLmR0cwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIE1QQzgzNDlFIE1EUyBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSwgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvIHsKKwltb2RlbCA9ICJNUEM4MzQ5RU1EUyI7CisJY29tcGF0aWJsZSA9ICJNUEM4MzR4TURTIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKworCWNwdXMgeworCQkjY3B1cyA9IDwxPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODM0OUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQkzMi1iaXQ7CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwwMDAwMDAwMCAxMDAwMDAwMD47CS8vIDI1Nk1CIGF0IDAKKwl9OworCisJc29jODM0OUBlMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJcmFuZ2VzID0gPDAgZTAwMDAwMDAgMDAxMDAwMDA+OworCQlyZWcgPSA8ZTAwMDAwMDAgMDAwMDAyMDA+OworCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCXdkdEAyMDAgeworCQkJZGV2aWNlX3R5cGUgPSAid2F0Y2hkb2ciOworCQkJY29tcGF0aWJsZSA9ICJtcGM4M3h4X3dkdCI7CisJCQlyZWcgPSA8MjAwIDEwMD47CisJCX07CisKKwkJaTJjQDMwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MzAwMCAxMDA+OworCQkJaW50ZXJydXB0cyA9IDxlIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MzEwMCAxMDA+OworCQkJaW50ZXJydXB0cyA9IDxmIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJZGZzcnI7CisJCX07CisKKwkJc3BpQDcwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAic3BpIjsKKwkJCWNvbXBhdGlibGUgPSAibXBjODN4eF9zcGkiOworCQkJcmVnID0gPDcwMDAgMTAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDEwIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJbW9kZSA9IDwwPjsKKwkJfTsKKworCQkvKiBwaHkgdHlwZSAoVUxQSSBvciBTRVJJQUwpIGFyZSBvbmx5IHR5cGVzIHN1cHBvcnR0ZWQgZm9yIE1QSCAqLworCQkvKiBwb3J0ID0gMCBvciAxICovCisJCXVzYkAyMjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJ1c2IiOworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1tcGgiOworCQkJcmVnID0gPDIyMDAwIDEwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdHMgPSA8MjcgMj47CisJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXBvcnQxOworCQl9OworCQkvKiBwaHkgdHlwZSAoVUxQSSwgVVRNSSwgVVRNSV9XSURFLCBTRVJJQUwpICovCisJCXVzYkAyMzAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJ1c2IiOworCQkJY29tcGF0aWJsZSA9ICJmc2wtdXNiMi1kciI7CisJCQlyZWcgPSA8MjMwMDAgMTAwMD47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwkJCXBoeV90eXBlID0gInVscGkiOworCQl9OworCisJCW1kaW9AMjQ1MjAgeworCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI0NTIwIDIwPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKKwkJCWV0aGVybmV0LXBoeUAwIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDExIDI+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCWV0aGVybmV0LXBoeUAxIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDEyIDI+OworCQkJCXJlZyA9IDwxPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJfTsKKworCQlldGhlcm5ldEAyNDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjAgOCAyMSA4IDIyIDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAwPjsKKwkJfTsKKworCQlldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjUwMDAgMTAwMD47CisJCQlhZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIzIDggMjQgOCAyNSA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCX07CisKKwkJc2VyaWFsQDQ1MDAgeworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8NDUwMCAxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDw5IDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQl9OworCisJCXNlcmlhbEA0NjAwIHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDQ2MDAgMTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8YSA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJfTsKKworCQlwY2lAODUwMCB7CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCisJCQkJCS8qIElEU0VMIDB4MTEgKi8KKwkJCQkJIDg4MDAgMCAwIDEgNzAwIDE0IDgKKwkJCQkJIDg4MDAgMCAwIDIgNzAwIDE1IDgKKwkJCQkJIDg4MDAgMCAwIDMgNzAwIDE2IDgKKwkJCQkJIDg4MDAgMCAwIDQgNzAwIDE3IDgKKworCQkJCQkvKiBJRFNFTCAweDEyICovCisJCQkJCSA5MDAwIDAgMCAxIDcwMCAxNiA4CisJCQkJCSA5MDAwIDAgMCAyIDcwMCAxNyA4CisJCQkJCSA5MDAwIDAgMCAzIDcwMCAxNCA4CisJCQkJCSA5MDAwIDAgMCA0IDcwMCAxNSA4CisKKwkJCQkJLyogSURTRUwgMHgxMyAqLworCQkJCQkgOTgwMCAwIDAgMSA3MDAgMTcgOAorCQkJCQkgOTgwMCAwIDAgMiA3MDAgMTQgOAorCQkJCQkgOTgwMCAwIDAgMyA3MDAgMTUgOAorCQkJCQkgOTgwMCAwIDAgNCA3MDAgMTYgOAorCisJCQkJCS8qIElEU0VMIDB4MTUgKi8KKwkJCQkJIGE4MDAgMCAwIDEgNzAwIDE0IDgKKwkJCQkJIGE4MDAgMCAwIDIgNzAwIDE1IDgKKwkJCQkJIGE4MDAgMCAwIDMgNzAwIDE2IDgKKwkJCQkJIGE4MDAgMCAwIDQgNzAwIDE3IDgKKworCQkJCQkvKiBJRFNFTCAweDE2ICovCisJCQkJCSBiMDAwIDAgMCAxIDcwMCAxNyA4CisJCQkJCSBiMDAwIDAgMCAyIDcwMCAxNCA4CisJCQkJCSBiMDAwIDAgMCAzIDcwMCAxNSA4CisJCQkJCSBiMDAwIDAgMCA0IDcwMCAxNiA4CisKKwkJCQkJLyogSURTRUwgMHgxNyAqLworCQkJCQkgYjgwMCAwIDAgMSA3MDAgMTYgOAorCQkJCQkgYjgwMCAwIDAgMiA3MDAgMTcgOAorCQkJCQkgYjgwMCAwIDAgMyA3MDAgMTQgOAorCQkJCQkgYjgwMCAwIDAgNCA3MDAgMTUgOAorCisJCQkJCS8qIElEU0VMIDB4MTggKi8KKwkJCQkJIGMwMDAgMCAwIDEgNzAwIDE1IDgKKwkJCQkJIGMwMDAgMCAwIDIgNzAwIDE2IDgKKwkJCQkJIGMwMDAgMCAwIDMgNzAwIDE3IDgKKwkJCQkJIGMwMDAgMCAwIDQgNzAwIDE0IDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw3MDA+OworCQkJaW50ZXJydXB0cyA9IDw0MiA4PjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAxMDAwMDAwMAorCQkJCSAgNDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDEwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDAxMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8ODUwMCAxMDA+OworCQkJY29tcGF0aWJsZSA9ICI4M3h4IjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCX07CisKKwkJcGNpQDg2MDAgeworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKworCQkJCQkvKiBJRFNFTCAweDExICovCisJCQkJCSA4ODAwIDAgMCAxIDcwMCAxNCA4CisJCQkJCSA4ODAwIDAgMCAyIDcwMCAxNSA4CisJCQkJCSA4ODAwIDAgMCAzIDcwMCAxNiA4CisJCQkJCSA4ODAwIDAgMCA0IDcwMCAxNyA4CisKKwkJCQkJLyogSURTRUwgMHgxMiAqLworCQkJCQkgOTAwMCAwIDAgMSA3MDAgMTYgOAorCQkJCQkgOTAwMCAwIDAgMiA3MDAgMTcgOAorCQkJCQkgOTAwMCAwIDAgMyA3MDAgMTQgOAorCQkJCQkgOTAwMCAwIDAgNCA3MDAgMTUgOAorCisJCQkJCS8qIElEU0VMIDB4MTMgKi8KKwkJCQkJIDk4MDAgMCAwIDEgNzAwIDE3IDgKKwkJCQkJIDk4MDAgMCAwIDIgNzAwIDE0IDgKKwkJCQkJIDk4MDAgMCAwIDMgNzAwIDE1IDgKKwkJCQkJIDk4MDAgMCAwIDQgNzAwIDE2IDgKKworCQkJCQkvKiBJRFNFTCAweDE1ICovCisJCQkJCSBhODAwIDAgMCAxIDcwMCAxNCA4CisJCQkJCSBhODAwIDAgMCAyIDcwMCAxNSA4CisJCQkJCSBhODAwIDAgMCAzIDcwMCAxNiA4CisJCQkJCSBhODAwIDAgMCA0IDcwMCAxNyA4CisKKwkJCQkJLyogSURTRUwgMHgxNiAqLworCQkJCQkgYjAwMCAwIDAgMSA3MDAgMTcgOAorCQkJCQkgYjAwMCAwIDAgMiA3MDAgMTQgOAorCQkJCQkgYjAwMCAwIDAgMyA3MDAgMTUgOAorCQkJCQkgYjAwMCAwIDAgNCA3MDAgMTYgOAorCisJCQkJCS8qIElEU0VMIDB4MTcgKi8KKwkJCQkJIGI4MDAgMCAwIDEgNzAwIDE2IDgKKwkJCQkJIGI4MDAgMCAwIDIgNzAwIDE3IDgKKwkJCQkJIGI4MDAgMCAwIDMgNzAwIDE0IDgKKwkJCQkJIGI4MDAgMCAwIDQgNzAwIDE1IDgKKworCQkJCQkvKiBJRFNFTCAweDE4ICovCisJCQkJCSBjMDAwIDAgMCAxIDcwMCAxNSA4CisJCQkJCSBjMDAwIDAgMCAyIDcwMCAxNiA4CisJCQkJCSBjMDAwIDAgMCAzIDcwMCAxNyA4CisJCQkJCSBjMDAwIDAgMCA0IDcwMCAxNCA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgOD47CisJCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGIwMDAwMDAwIGIwMDAwMDAwIDAgMTAwMDAwMDAKKwkJCQkgIDQyMDAwMDAwIDAgOTAwMDAwMDAgOTAwMDAwMDAgMCAxMDAwMDAwMAorCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMjEwMDAwMCAwIDAwMTAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJcmVnID0gPDg2MDAgMTAwPjsKKwkJCWNvbXBhdGlibGUgPSAiODN4eCI7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQl9OworCisJCS8qIE1heSBuZWVkIHRvIHJlbW92ZSBpZiBvbiBhIHBhcnQgd2l0aG91dCBjcnlwdG8gZW5naW5lICovCisJCWNyeXB0b0AzMDAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcnlwdG8iOworCQkJbW9kZWwgPSAiU0VDMiI7CisJCQljb21wYXRpYmxlID0gInRhbGl0b3MiOworCQkJcmVnID0gPDMwMDAwIDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8YiA4PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NzAwPjsKKwkJCW51bS1jaGFubmVscyA9IDw0PjsKKwkJCWNoYW5uZWwtZmlmby1sZW4gPSA8MTg+OworCQkJZXhlYy11bml0cy1tYXNrID0gPDAwMDAwMDdlPjsKKwkJCS8qIGRlc2MgbWFzayBpcyBmb3IgcmV2Mi4wLAorCQkJICogd2UgbmVlZCBydW50aW1lIGZpeHVwIGZvciA+Mi4wICovCisJCQlkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MDEwMTBlYmY+OworCQl9OworCisJCS8qIElQSUMKKwkJICogaW50ZXJydXB0cyBjZWxsID0gPGludHIgIywgc2Vuc2U+CisJCSAqIHNlbnNlIHZhbHVlcyBtYXRjaCBsaW51eCBJT1JFU09VUkNFX0lSUV8qIGRlZmluZXM6CisJCSAqIHNlbnNlID09IDg6IExldmVsLCBsb3cgYXNzZXJ0aW9uCisJCSAqIHNlbnNlID09IDI6IEVkZ2UsIGhpZ2gtdG8tbG93IGNoYW5nZQorCQkgKi8KKwkJcGljQDcwMCB7CisJCQlsaW51eCxwaGFuZGxlID0gPDcwMD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDw3MDAgMTAwPjsKKwkJCWJ1aWx0LWluOworCQkJZGV2aWNlX3R5cGUgPSAiaXBpYyI7CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY0MWMxZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cwpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIE1QQzg1NDAgQURTIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyB7CisJbW9kZWwgPSAiTVBDODU0MEFEUyI7CisJY29tcGF0aWJsZSA9ICJNUEM4NXh4QURTIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlsaW51eCxwaGFuZGxlID0gPDEwMD47CisKKwljcHVzIHsKKwkJI2NwdXMgPSA8MT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJbGludXgscGhhbmRsZSA9IDwyMDA+OworCisJCVBvd2VyUEMsODU0MEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vICAzMyBNSHosIGZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CS8vIDE2NiBNSHoKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gODI1IE1IeiwgZnJvbSB1Ym9vdAorCQkJMzItYml0OworCQkJbGludXgscGhhbmRsZSA9IDwyMDE+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlsaW51eCxwaGFuZGxlID0gPDMwMD47CisJCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCisJfTsKKworCXNvYzg1NDBAZTAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlcyA9IDwwIGUwMDAwMDAwIDAwMTAwMDAwPjsKKwkJcmVnID0gPGUwMDAwMDAwIDAwMTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCWkyY0AzMDAwIHsKKwkJCWRldmljZV90eXBlID0gImkyYyI7CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDMwMDAgMTAwPjsKKwkJCWludGVycnVwdHMgPSA8MWIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWRmc3JyOworCQl9OworCisJCW1kaW9AMjQ1MjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm1kaW8iOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNDUyMCAyMD47CisJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKKwkJCWV0aGVybmV0LXBoeUAwIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMT47CisJCQkJcmVnID0gPDA+OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQl9OworCQkJZXRoZXJuZXQtcGh5QDEgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzNSAxPjsKKwkJCQlyZWcgPSA8MT47CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCX07CisJCQlldGhlcm5ldC1waHlAMyB7CisJCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM3IDE+OworCQkJCXJlZyA9IDwzPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJfTsKKworCQlldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjQwMDAgMTAwMD47CisJCQlhZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPGQgMiBlIDIgMTIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMD47CisJCX07CisKKwkJZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI1MDAwIDEwMDA+OworCQkJYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMSBdOworCQkJaW50ZXJydXB0cyA9IDwxMyAyIDE0IDIgMTggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCX07CisKKwkJZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiRkVDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjYwMDAgMTAwMD47CisJCQlhZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMiBdOworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAyIF07CisJCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHktaGFuZGxlID0gPDI0NTIwMDM+OworCQl9OworCisJCXNlcmlhbEA0NTAwIHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDQ1MDAgMTAwPjsgCS8vIHJlZyBiYXNlLCBzaXplCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KKwkJCWludGVycnVwdHMgPSA8MWEgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJfTsKKworCQlzZXJpYWxANDYwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDw0NjAwIDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KKwkJCWludGVycnVwdHMgPSA8MWEgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJfTsKKwkJcGNpQDgwMDAgeworCQkJbGludXgscGhhbmRsZSA9IDw4MDAwPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisKKwkJCQkvKiBJRFNFTCAweDAyICovCisJCQkJMTAwMCAwIDAgMSA0MDAwMCAzMSAxCisJCQkJMTAwMCAwIDAgMiA0MDAwMCAzMiAxCisJCQkJMTAwMCAwIDAgMyA0MDAwMCAzMyAxCisJCQkJMTAwMCAwIDAgNCA0MDAwMCAzNCAxCisKKwkJCQkvKiBJRFNFTCAweDAzICovCisJCQkJMTgwMCAwIDAgMSA0MDAwMCAzNCAxCisJCQkJMTgwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJMTgwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJMTgwMCAwIDAgNCA0MDAwMCAzMyAxCisKKwkJCQkvKiBJRFNFTCAweDA0ICovCisJCQkJMjAwMCAwIDAgMSA0MDAwMCAzMyAxCisJCQkJMjAwMCAwIDAgMiA0MDAwMCAzNCAxCisJCQkJMjAwMCAwIDAgMyA0MDAwMCAzMSAxCisJCQkJMjAwMCAwIDAgNCA0MDAwMCAzMiAxCisKKwkJCQkvKiBJRFNFTCAweDA1ICovCisJCQkJMjgwMCAwIDAgMSA0MDAwMCAzMiAxCisJCQkJMjgwMCAwIDAgMiA0MDAwMCAzMyAxCisJCQkJMjgwMCAwIDAgMyA0MDAwMCAzNCAxCisJCQkJMjgwMCAwIDAgNCA0MDAwMCAzMSAxCisKKwkJCQkvKiBJRFNFTCAweDBjICovCisJCQkJNjAwMCAwIDAgMSA0MDAwMCAzMSAxCisJCQkJNjAwMCAwIDAgMiA0MDAwMCAzMiAxCisJCQkJNjAwMCAwIDAgMyA0MDAwMCAzMyAxCisJCQkJNjAwMCAwIDAgNCA0MDAwMCAzNCAxCisKKwkJCQkvKiBJRFNFTCAweDBkICovCisJCQkJNjgwMCAwIDAgMSA0MDAwMCAzNCAxCisJCQkJNjgwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJNjgwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJNjgwMCAwIDAgNCA0MDAwMCAzMyAxCisKKwkJCQkvKiBJRFNFTCAweDBlICovCisJCQkJNzAwMCAwIDAgMSA0MDAwMCAzMyAxCisJCQkJNzAwMCAwIDAgMiA0MDAwMCAzNCAxCisJCQkJNzAwMCAwIDAgMyA0MDAwMCAzMSAxCisJCQkJNzAwMCAwIDAgNCA0MDAwMCAzMiAxCisKKwkJCQkvKiBJRFNFTCAweDBmICovCisJCQkJNzgwMCAwIDAgMSA0MDAwMCAzMiAxCisJCQkJNzgwMCAwIDAgMiA0MDAwMCAzMyAxCisJCQkJNzgwMCAwIDAgMyA0MDAwMCAzNCAxCisJCQkJNzgwMCAwIDAgNCA0MDAwMCAzMSAxCisKKwkJCQkvKiBJRFNFTCAweDEyICovCisJCQkJOTAwMCAwIDAgMSA0MDAwMCAzMSAxCisJCQkJOTAwMCAwIDAgMiA0MDAwMCAzMiAxCisJCQkJOTAwMCAwIDAgMyA0MDAwMCAzMyAxCisJCQkJOTAwMCAwIDAgNCA0MDAwMCAzNCAxCisKKwkJCQkvKiBJRFNFTCAweDEzICovCisJCQkJOTgwMCAwIDAgMSA0MDAwMCAzNCAxCisJCQkJOTgwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJOTgwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJOTgwMCAwIDAgNCA0MDAwMCAzMyAxCisKKwkJCQkvKiBJRFNFTCAweDE0ICovCisJCQkJYTAwMCAwIDAgMSA0MDAwMCAzMyAxCisJCQkJYTAwMCAwIDAgMiA0MDAwMCAzNCAxCisJCQkJYTAwMCAwIDAgMyA0MDAwMCAzMSAxCisJCQkJYTAwMCAwIDAgNCA0MDAwMCAzMiAxCisKKwkJCQkvKiBJRFNFTCAweDE1ICovCisJCQkJYTgwMCAwIDAgMSA0MDAwMCAzMiAxCisJCQkJYTgwMCAwIDAgMiA0MDAwMCAzMyAxCisJCQkJYTgwMCAwIDAgMyA0MDAwMCAzNCAxCisJCQkJYTgwMCAwIDAgNCA0MDAwMCAzMSAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwOCAyPjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAorCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMjAwMDAwMCAwIDAwMTAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJcmVnID0gPDgwMDAgMTAwMD47CisJCQljb21wYXRpYmxlID0gIjg1eHgiOworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJfTsKKworCQlwaWNANDAwMDAgeworCQkJbGludXgscGhhbmRsZSA9IDw0MDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDw0MDAwMCA0MDAwMD47CisJCQlidWlsdC1pbjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisJCQliaWctZW5kaWFuOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiZTBiYzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBNUEM4NTQxIENEUyBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisKKy8geworCW1vZGVsID0gIk1QQzg1NDFDRFMiOworCWNvbXBhdGlibGUgPSAiTVBDODV4eENEUyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbGludXgscGhhbmRsZSA9IDwxMDA+OworCisJY3B1cyB7CisJCSNjcHVzID0gPDE+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWxpbnV4LHBoYW5kbGUgPSA8MjAwPjsKKworCQlQb3dlclBDLDg1NDFAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyAgMzMgTUh6LCBmcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkvLyAxNjYgTUh6CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CS8vIDgyNSBNSHosIGZyb20gdWJvb3QKKwkJCTMyLWJpdDsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJbGludXgscGhhbmRsZSA9IDwzMDA+OworCQlyZWcgPSA8MDAwMDAwMDAgMDgwMDAwMDA+OwkvLyAxMjhNIGF0IDB4MAorCX07CisKKwlzb2M4NTQxQGUwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQlyYW5nZXMgPSA8MCBlMDAwMDAwMCAwMDEwMDAwMD47CisJCXJlZyA9IDxlMDAwMDAwMCAwMDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlpMmNAMzAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwzMDAwIDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDFiIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlkZnNycjsKKwkJfTsKKworCQltZGlvQDI0NTIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjQ1MjAgMjA+OworCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMD47CisJCQlldGhlcm5ldC1waHlAMCB7CisJCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM1IDA+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCWV0aGVybmV0LXBoeUAxIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMD47CisJCQkJcmVnID0gPDE+OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQl9OworCQl9OworCisJCWV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOworCQkJaW50ZXJydXB0cyA9IDxkIDIgZSAyIDEyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQl9OworCisJCWV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNTAwMCAxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMSBdOworCQkJaW50ZXJydXB0cyA9IDwxMyAyIDE0IDIgMTggMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCX07CisKKwkJc2VyaWFsQDQ1MDAgeworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8NDUwMCAxMDA+OyAJLy8gcmVnIGJhc2UsIHNpemUKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PworCQkJaW50ZXJydXB0cyA9IDwxYSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQl9OworCisJCXNlcmlhbEA0NjAwIHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDQ2MDAgMTAwPjsJLy8gcmVnIGJhc2UsIHNpemUKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgCS8vIHNob3VsZCB3ZSBmaWxsIGluIGluIHVib290PworCQkJaW50ZXJydXB0cyA9IDwxYSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQl9OworCisJCXBjaUA4MDAwIHsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8ODAwMD47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MWY4MDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKworCQkJCS8qIElEU0VMIDB4MTAgKi8KKwkJCQkwODAwMCAwIDAgMSA0MDAwMCAzMCAxCisJCQkJMDgwMDAgMCAwIDIgNDAwMDAgMzEgMQorCQkJCTA4MDAwIDAgMCAzIDQwMDAwIDMyIDEKKwkJCQkwODAwMCAwIDAgNCA0MDAwMCAzMyAxCisKKwkJCQkvKiBJRFNFTCAweDExICovCisJCQkJMDg4MDAgMCAwIDEgNDAwMDAgMzAgMQorCQkJCTA4ODAwIDAgMCAyIDQwMDAwIDMxIDEKKwkJCQkwODgwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJMDg4MDAgMCAwIDQgNDAwMDAgMzMgMQorCisJCQkJLyogSURTRUwgMHgxMiAoU2xvdCAxKSAqLworCQkJCTA5MDAwIDAgMCAxIDQwMDAwIDMwIDEKKwkJCQkwOTAwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJMDkwMDAgMCAwIDMgNDAwMDAgMzIgMQorCQkJCTA5MDAwIDAgMCA0IDQwMDAwIDMzIDEKKworCQkJCS8qIElEU0VMIDB4MTMgKFNsb3QgMikgKi8KKwkJCQkwOTgwMCAwIDAgMSA0MDAwMCAzMSAxCisJCQkJMDk4MDAgMCAwIDIgNDAwMDAgMzIgMQorCQkJCTA5ODAwIDAgMCAzIDQwMDAwIDMzIDEKKwkJCQkwOTgwMCAwIDAgNCA0MDAwMCAzMCAxCisKKwkJCQkvKiBJRFNFTCAweDE0IChTbG90IDMpICovCisJCQkJMGEwMDAgMCAwIDEgNDAwMDAgMzIgMQorCQkJCTBhMDAwIDAgMCAyIDQwMDAwIDMzIDEKKwkJCQkwYTAwMCAwIDAgMyA0MDAwMCAzMCAxCisJCQkJMGEwMDAgMCAwIDQgNDAwMDAgMzEgMQorCisJCQkJLyogSURTRUwgMHgxNSAoU2xvdCA0KSAqLworCQkJCTBhODAwIDAgMCAxIDQwMDAwIDMzIDEKKwkJCQkwYTgwMCAwIDAgMiA0MDAwMCAzMCAxCisJCQkJMGE4MDAgMCAwIDMgNDAwMDAgMzEgMQorCQkJCTBhODAwIDAgMCA0IDQwMDAwIDMyIDEKKworCQkJCS8qIEJ1cyAxIChUdW5kcmEgQnJpZGdlKSAqLworCQkJCS8qIElEU0VMIDB4MTIgKElTQSBicmlkZ2UpICovCisJCQkJMTkwMDAgMCAwIDEgNDAwMDAgMzAgMQorCQkJCTE5MDAwIDAgMCAyIDQwMDAwIDMxIDEKKwkJCQkxOTAwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJMTkwMDAgMCAwIDQgNDAwMDAgMzMgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MDggMj47CisJCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgMjAwMDAwMDAKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTIwMDAwMDAgMCAwMDEwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y5NDBhYT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDw4MDAwIDEwMDA+OworCQkJY29tcGF0aWJsZSA9ICI4NXh4IjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisKKwkJCWk4MjU5QDE5MDAwIHsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOworCQkJCXJlZyA9IDwxOTAwMCAwIDAgMCAxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJCWJ1aWx0LWluOworCQkJCWNvbXBhdGlibGUgPSAiY2hycCxpaWMiOworCQkJCWJpZy1lbmRpYW47CisJCQkJaW50ZXJydXB0cyA9IDwxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDgwMDA+OworCQkJfTsKKwkJfTsKKworCQlwY2lAOTAwMCB7CisJCQlsaW51eCxwaGFuZGxlID0gPDkwMDA+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPGY4MDAgMCAwIDc+OworCQkJaW50ZXJydXB0LW1hcCA9IDwKKworCQkJCS8qIElEU0VMIDB4MTUgKi8KKwkJCQlhODAwIDAgMCAxIDQwMDAwIDNiIDEKKwkJCQlhODAwIDAgMCAyIDQwMDAwIDNiIDEKKwkJCQlhODAwIDAgMCAzIDQwMDAwIDNiIDEKKwkJCQlhODAwIDAgMCA0IDQwMDAwIDNiIDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDA5IDI+OworCQkJYnVzLXJhbmdlID0gPDAgMD47CisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCBhMDAwMDAwMCBhMDAwMDAwMCAwIDIwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUzMDAwMDAwIDAgMDAxMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8OTAwMCAxMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiODV4eCI7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQl9OworCisJCXBpY0A0MDAwMCB7CisJCQlsaW51eCxwaGFuZGxlID0gPDQwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDQwMDAwIDQwMDAwPjsKKwkJCWJ1aWx0LWluOworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpZy1lbmRpYW47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkzZDc5NQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIE1QQzg1NTUgQ0RTIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyB7CisJbW9kZWwgPSAiTVBDODU0OENEUyI7CisJY29tcGF0aWJsZSA9ICJNUEM4NXh4Q0RTIjsKKwkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkjc2l6ZS1jZWxscyA9IDwxPjsKKwlsaW51eCxwaGFuZGxlID0gPDEwMD47CisKKwljcHVzIHsKKwkJI2NwdXMgPSA8MT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJbGludXgscGhhbmRsZSA9IDwyMDA+OworCisJCVBvd2VyUEMsODU0OEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwyMD47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8ODAwMD47CQkvLyBMMSwgMzJLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vICAzMyBNSHosIGZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CS8vIDE2NiBNSHoKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJLy8gODI1IE1IeiwgZnJvbSB1Ym9vdAorCQkJMzItYml0OworCQkJbGludXgscGhhbmRsZSA9IDwyMDE+OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlsaW51eCxwaGFuZGxlID0gPDMwMD47CisJCXJlZyA9IDwwMDAwMDAwMCAwODAwMDAwMD47CS8vIDEyOE0gYXQgMHgwCisJfTsKKworCXNvYzg1NDhAZTAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWRldmljZV90eXBlID0gInNvYyI7CisJCXJhbmdlcyA9IDwwIGUwMDAwMDAwIDAwMTAwMDAwPjsKKwkJcmVnID0gPGUwMDAwMDAwIDAwMTAwMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDA+OworCisJCWkyY0AzMDAwIHsKKwkJCWRldmljZV90eXBlID0gImkyYyI7CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDMwMDAgMTAwPjsKKwkJCWludGVycnVwdHMgPSA8MWIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWRmc3JyOworCQl9OworCisJCW1kaW9AMjQ1MjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm1kaW8iOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNDUyMCAyMD47CisJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwPjsKKwkJCWV0aGVybmV0LXBoeUAwIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMD47CisJCQkJcmVnID0gPDA+OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQl9OworCQkJZXRoZXJuZXQtcGh5QDEgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzNSAwPjsKKwkJCQlyZWcgPSA8MT47CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCX07CisKKwkJCWV0aGVybmV0LXBoeUAyIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMD47CisJCQkJcmVnID0gPDI+OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQl9OworCQkJZXRoZXJuZXQtcGh5QDMgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJaW50ZXJydXB0cyA9IDwzNSAwPjsKKwkJCQlyZWcgPSA8Mz47CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCX07CisJCX07CisKKwkJZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOworCQkJaW50ZXJydXB0cyA9IDxkIDIgZSAyIDEyIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHktaGFuZGxlID0gPDI0NTIwMDA+OworCQl9OworCisJCWV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjUwMDAgMTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKKwkJCWludGVycnVwdHMgPSA8MTMgMiAxNCAyIDE4IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OworCQl9OworCisJCWV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjYwMDAgMTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDIgXTsKKwkJCWludGVycnVwdHMgPSA8ZiAyIDEwIDIgMTEgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMT47CisJCX07CisKKy8qIGVUU0VDIDQgaXMgY3VycmVudGx5IGJyb2tlbgorCQlldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI3MDAwIDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAzIF07CisJCQlpbnRlcnJ1cHRzID0gPDE1IDIgMTYgMiAxNyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAxPjsKKwkJfTsKKyAqLworCisJCXNlcmlhbEA0NTAwIHsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDQ1MDAgMTAwPjsgCS8vIHJlZyBiYXNlLCBzaXplCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KKwkJCWludGVycnVwdHMgPSA8MWEgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJfTsKKworCQlzZXJpYWxANDYwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDw0NjAwIDEwMD47CS8vIHJlZyBiYXNlLCBzaXplCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IAkvLyBzaG91bGQgd2UgZmlsbCBpbiBpbiB1Ym9vdD8KKwkJCWludGVycnVwdHMgPSA8MWEgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJfTsKKworCQlwY2lAODAwMCB7CisJCQlsaW51eCxwaGFuZGxlID0gPDgwMDA+OworCQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDFmODAwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisKKwkJCQkvKiBJRFNFTCAweDEwICovCisJCQkJMDgwMDAgMCAwIDEgNDAwMDAgMzAgMQorCQkJCTA4MDAwIDAgMCAyIDQwMDAwIDMxIDEKKwkJCQkwODAwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJMDgwMDAgMCAwIDQgNDAwMDAgMzMgMQorCisJCQkJLyogSURTRUwgMHgxMSAqLworCQkJCTA4ODAwIDAgMCAxIDQwMDAwIDMwIDEKKwkJCQkwODgwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJMDg4MDAgMCAwIDMgNDAwMDAgMzIgMQorCQkJCTA4ODAwIDAgMCA0IDQwMDAwIDMzIDEKKworCQkJCS8qIElEU0VMIDB4MTIgKFNsb3QgMSkgKi8KKwkJCQkwOTAwMCAwIDAgMSA0MDAwMCAzMCAxCisJCQkJMDkwMDAgMCAwIDIgNDAwMDAgMzEgMQorCQkJCTA5MDAwIDAgMCAzIDQwMDAwIDMyIDEKKwkJCQkwOTAwMCAwIDAgNCA0MDAwMCAzMyAxCisKKwkJCQkvKiBJRFNFTCAweDEzIChTbG90IDIpICovCisJCQkJMDk4MDAgMCAwIDEgNDAwMDAgMzEgMQorCQkJCTA5ODAwIDAgMCAyIDQwMDAwIDMyIDEKKwkJCQkwOTgwMCAwIDAgMyA0MDAwMCAzMyAxCisJCQkJMDk4MDAgMCAwIDQgNDAwMDAgMzAgMQorCisJCQkJLyogSURTRUwgMHgxNCAoU2xvdCAzKSAqLworCQkJCTBhMDAwIDAgMCAxIDQwMDAwIDMyIDEKKwkJCQkwYTAwMCAwIDAgMiA0MDAwMCAzMyAxCisJCQkJMGEwMDAgMCAwIDMgNDAwMDAgMzAgMQorCQkJCTBhMDAwIDAgMCA0IDQwMDAwIDMxIDEKKworCQkJCS8qIElEU0VMIDB4MTUgKFNsb3QgNCkgKi8KKwkJCQkwYTgwMCAwIDAgMSA0MDAwMCAzMyAxCisJCQkJMGE4MDAgMCAwIDIgNDAwMDAgMzAgMQorCQkJCTBhODAwIDAgMCAzIDQwMDAwIDMxIDEKKwkJCQkwYTgwMCAwIDAgNCA0MDAwMCAzMiAxCisKKwkJCQkvKiBCdXMgMSAoVHVuZHJhIEJyaWRnZSkgKi8KKwkJCQkvKiBJRFNFTCAweDEyIChJU0EgYnJpZGdlKSAqLworCQkJCTE5MDAwIDAgMCAxIDQwMDAwIDMwIDEKKwkJCQkxOTAwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJMTkwMDAgMCAwIDMgNDAwMDAgMzIgMQorCQkJCTE5MDAwIDAgMCA0IDQwMDAwIDMzIDE+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlpbnRlcnJ1cHRzID0gPDA4IDI+OworCQkJYnVzLXJhbmdlID0gPDAgMD47CisJCQlyYW5nZXMgPSA8MDIwMDAwMDAgMCA4MDAwMDAwMCA4MDAwMDAwMCAwIDIwMDAwMDAwCisJCQkJICAwMTAwMDAwMCAwIDAwMDAwMDAwIGUyMDAwMDAwIDAgMDAxMDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDNmOTQwYWE+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8ODAwMCAxMDAwPjsKKwkJCWNvbXBhdGlibGUgPSAiODV4eCI7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCisJCQlpODI1OUAxOTAwMCB7CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKKwkJCQlyZWcgPSA8MTkwMDAgMCAwIDAgMT47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQlidWlsdC1pbjsKKwkJCQljb21wYXRpYmxlID0gImNocnAsaWljIjsKKwkJCQliaWctZW5kaWFuOworCQkJCWludGVycnVwdHMgPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw4MDAwPjsKKwkJCX07CisJCX07CisKKwkJcGNpQDkwMDAgeworCQkJbGludXgscGhhbmRsZSA9IDw5MDAwPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDxmODAwIDAgMCA3PjsKKwkJCWludGVycnVwdC1tYXAgPSA8CisKKwkJCQkvKiBJRFNFTCAweDE1ICovCisJCQkJYTgwMCAwIDAgMSA0MDAwMCAzYiAxCisJCQkJYTgwMCAwIDAgMiA0MDAwMCAzYiAxCisJCQkJYTgwMCAwIDAgMyA0MDAwMCAzYiAxCisJCQkJYTgwMCAwIDAgNCA0MDAwMCAzYiAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwOSAyPjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgYTAwMDAwMDAgYTAwMDAwMDAgMCAyMDAwMDAwMAorCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMzAwMDAwMCAwIDAwMTAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJcmVnID0gPDkwMDAgMTAwMD47CisJCQljb21wYXRpYmxlID0gIjg1eHgiOworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJfTsKKworCQlwaWNANDAwMDAgeworCQkJbGludXgscGhhbmRsZSA9IDw0MDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDw0MDAwMCA0MDAwMD47CisJCQlidWlsdC1pbjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWctZW5kaWFuOworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExOGY1YTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKQEAgLTAsMCArMSwyNDQgQEAKKy8qCisgKiBNUEM4NTU1IENEUyBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisKKy8geworCW1vZGVsID0gIk1QQzg1NTVDRFMiOworCWNvbXBhdGlibGUgPSAiTVBDODV4eENEUyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbGludXgscGhhbmRsZSA9IDwxMDA+OworCisJY3B1cyB7CisJCSNjcHVzID0gPDE+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCWxpbnV4LHBoYW5kbGUgPSA8MjAwPjsKKworCQlQb3dlclBDLDg1NTVAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyAgMzMgTUh6LCBmcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkvLyAxNjYgTUh6CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CS8vIDgyNSBNSHosIGZyb20gdWJvb3QKKwkJCTMyLWJpdDsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8MjAxPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJbGludXgscGhhbmRsZSA9IDwzMDA+OworCQlyZWcgPSA8MDAwMDAwMDAgMDgwMDAwMDA+OwkvLyAxMjhNIGF0IDB4MAorCX07CisKKwlzb2M4NTU1QGUwMDAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQlyYW5nZXMgPSA8MCBlMDAwMDAwMCAwMDEwMDAwMD47CisJCXJlZyA9IDxlMDAwMDAwMCAwMDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlpMmNAMzAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJpMmMiOworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwzMDAwIDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDFiIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlkZnNycjsKKwkJfTsKKworCQltZGlvQDI0NTIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJtZGlvIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjQ1MjAgMjA+OworCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMD47CisJCQlldGhlcm5ldC1waHlAMCB7CisJCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDM1IDA+OworCQkJCXJlZyA9IDwwPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCWV0aGVybmV0LXBoeUAxIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8MzUgMD47CisJCQkJcmVnID0gPDE+OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQl9OworCQl9OworCisJCWV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gIlRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwyNDAwMCAxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCBFMCAwQyAwMCA3MyAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwwZCAyIDBlIDIgMTIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8MjQ1MjAwMD47CisJCX07CisKKwkJZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI1MDAwIDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAxIF07CisJCQlpbnRlcnJ1cHRzID0gPDEzIDIgMTQgMiAxOCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAxPjsKKwkJfTsKKworCQlzZXJpYWxANDUwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDw0NTAwIDEwMD47IAkvLyByZWcgYmFzZSwgc2l6ZQorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/CisJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCX07CisKKwkJc2VyaWFsQDQ2MDAgeworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8NDYwMCAxMDA+OwkvLyByZWcgYmFzZSwgc2l6ZQorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAJLy8gc2hvdWxkIHdlIGZpbGwgaW4gaW4gdWJvb3Q/CisJCQlpbnRlcnJ1cHRzID0gPDFhIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCX07CisKKwkJcGNpQDgwMDAgeworCQkJbGludXgscGhhbmRsZSA9IDw4MDAwPjsKKwkJCWludGVycnVwdC1tYXAtbWFzayA9IDwxZjgwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCisJCQkJLyogSURTRUwgMHgxMCAqLworCQkJCTA4MDAwIDAgMCAxIDQwMDAwIDMwIDEKKwkJCQkwODAwMCAwIDAgMiA0MDAwMCAzMSAxCisJCQkJMDgwMDAgMCAwIDMgNDAwMDAgMzIgMQorCQkJCTA4MDAwIDAgMCA0IDQwMDAwIDMzIDEKKworCQkJCS8qIElEU0VMIDB4MTEgKi8KKwkJCQkwODgwMCAwIDAgMSA0MDAwMCAzMCAxCisJCQkJMDg4MDAgMCAwIDIgNDAwMDAgMzEgMQorCQkJCTA4ODAwIDAgMCAzIDQwMDAwIDMyIDEKKwkJCQkwODgwMCAwIDAgNCA0MDAwMCAzMyAxCisKKwkJCQkvKiBJRFNFTCAweDEyIChTbG90IDEpICovCisJCQkJMDkwMDAgMCAwIDEgNDAwMDAgMzAgMQorCQkJCTA5MDAwIDAgMCAyIDQwMDAwIDMxIDEKKwkJCQkwOTAwMCAwIDAgMyA0MDAwMCAzMiAxCisJCQkJMDkwMDAgMCAwIDQgNDAwMDAgMzMgMQorCisJCQkJLyogSURTRUwgMHgxMyAoU2xvdCAyKSAqLworCQkJCTA5ODAwIDAgMCAxIDQwMDAwIDMxIDEKKwkJCQkwOTgwMCAwIDAgMiA0MDAwMCAzMiAxCisJCQkJMDk4MDAgMCAwIDMgNDAwMDAgMzMgMQorCQkJCTA5ODAwIDAgMCA0IDQwMDAwIDMwIDEKKworCQkJCS8qIElEU0VMIDB4MTQgKFNsb3QgMykgKi8KKwkJCQkwYTAwMCAwIDAgMSA0MDAwMCAzMiAxCisJCQkJMGEwMDAgMCAwIDIgNDAwMDAgMzMgMQorCQkJCTBhMDAwIDAgMCAzIDQwMDAwIDMwIDEKKwkJCQkwYTAwMCAwIDAgNCA0MDAwMCAzMSAxCisKKwkJCQkvKiBJRFNFTCAweDE1IChTbG90IDQpICovCisJCQkJMGE4MDAgMCAwIDEgNDAwMDAgMzMgMQorCQkJCTBhODAwIDAgMCAyIDQwMDAwIDMwIDEKKwkJCQkwYTgwMCAwIDAgMyA0MDAwMCAzMSAxCisJCQkJMGE4MDAgMCAwIDQgNDAwMDAgMzIgMQorCisJCQkJLyogQnVzIDEgKFR1bmRyYSBCcmlkZ2UpICovCisJCQkJLyogSURTRUwgMHgxMiAoSVNBIGJyaWRnZSkgKi8KKwkJCQkxOTAwMCAwIDAgMSA0MDAwMCAzMCAxCisJCQkJMTkwMDAgMCAwIDIgNDAwMDAgMzEgMQorCQkJCTE5MDAwIDAgMCAzIDQwMDAwIDMyIDEKKwkJCQkxOTAwMCAwIDAgNCA0MDAwMCAzMyAxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJaW50ZXJydXB0cyA9IDwwOCAyPjsKKwkJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQkJcmFuZ2VzID0gPDAyMDAwMDAwIDAgODAwMDAwMDAgODAwMDAwMDAgMCAyMDAwMDAwMAorCQkJCSAgMDEwMDAwMDAgMCAwMDAwMDAwMCBlMjAwMDAwMCAwIDAwMTAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzZjk0MGFhPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJcmVnID0gPDgwMDAgMTAwMD47CisJCQljb21wYXRpYmxlID0gIjg1eHgiOworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKworCQkJaTgyNTlAMTkwMDAgeworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CisJCQkJcmVnID0gPDE5MDAwIDAgMCAwIDE+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJYnVpbHQtaW47CisJCQkJY29tcGF0aWJsZSA9ICJjaHJwLGlpYyI7CisJCQkJYmlnLWVuZGlhbjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8ODAwMD47CisJCQl9OworCQl9OworCisJCXBjaUA5MDAwIHsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8OTAwMD47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCisJCQkJLyogSURTRUwgMHgxNSAqLworCQkJCWE4MDAgMCAwIDEgNDAwMDAgM2IgMQorCQkJCWE4MDAgMCAwIDIgNDAwMDAgM2IgMQorCQkJCWE4MDAgMCAwIDMgNDAwMDAgM2IgMQorCQkJCWE4MDAgMCAwIDQgNDAwMDAgM2IgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MDkgMj47CisJCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIGEwMDAwMDAwIGEwMDAwMDAwIDAgMjAwMDAwMDAKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTMwMDAwMDAgMCAwMDEwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8M2Y5NDBhYT47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCXJlZyA9IDw5MDAwIDEwMDA+OworCQkJY29tcGF0aWJsZSA9ICI4NXh4IjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCX07CisKKwkJcGljQDQwMDAwIHsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8NDAwMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQlyZWcgPSA8NDAwMDAgNDAwMDA+OworCQkJYnVpbHQtaW47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworICAgICAgICAgICAgICAgICAgICAgICAgYmlnLWVuZGlhbjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjBjNzczMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjQxX2hwY24uZHRzCkBAIC0wLDAgKzEsMzM5IEBACisvKgorICogTVBDODY0MSBIUENOIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworLyB7CisJbW9kZWwgPSAiTVBDODY0MUhQQ04iOworCWNvbXBhdGlibGUgPSAibXBjODZ4eCI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwljcHVzIHsKKwkJI2NwdXMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKworCQlQb3dlclBDLDg2NDFAMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJjcHUiOworCQkJcmVnID0gPDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MjA+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDgwMDA+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyAzMyBNSHosIGZyb20gdWJvb3QKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBGcm9tIHVib290CisJCQkzMi1iaXQ7CisJCQlsaW51eCxib290LWNwdTsKKwkJfTsKKwkJUG93ZXJQQyw4NjQxQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDIwPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKKwkJCWktY2FjaGUtc2l6ZSA9IDw4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gMzMgTUh6LCBmcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJMzItYml0OworCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MDAwMDAwMDAgNDAwMDAwMDA+OwkvLyAxRyBhdCAweDAKKwl9OworCisJc29jODY0MUBmODAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJcmFuZ2VzID0gPDAgZjgwMDAwMDAgMDAxMDAwMDA+OworCQlyZWcgPSA8ZjgwMDAwMDAgMDAxMDAwMDA+OwkvLyBDQ1NSQkFSIDFNCisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisKKwkJaTJjQDMwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MzAwMCAxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJZGV2aWNlX3R5cGUgPSAiaTJjIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MzEwMCAxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyYiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJZGZzcnI7CisJCX07CisKKwkJbWRpb0AyNDUyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibWRpbyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI0NTIwIDIwPjsKKwkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjA+OworCQkJZXRoZXJuZXQtcGh5QDAgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0YSAxPjsKKwkJCQlyZWcgPSA8MD47CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCX07CisJCQlldGhlcm5ldC1waHlAMSB7CisJCQkJbGludXgscGhhbmRsZSA9IDwyNDUyMDAxPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDRhIDE+OworCQkJCXJlZyA9IDwxPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJfTsKKwkJCWV0aGVybmV0LXBoeUAyIHsKKwkJCQlsaW51eCxwaGFuZGxlID0gPDI0NTIwMDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJCWludGVycnVwdHMgPSA8NGEgMT47CisJCQkJcmVnID0gPDI+OworCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQl9OworCQkJZXRoZXJuZXQtcGh5QDMgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8MjQ1MjAwMz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0YSAxPjsKKwkJCQlyZWcgPSA8Mz47CisJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCX07CisJCX07CisKKwkJZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI0MDAwIDEwMDA+OworCQkJbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDczIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDFkIDIgMWUgMiAyMiAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAwPjsKKwkJfTsKKworCQlldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjUwMDAgMTAwMD47CisJCQltYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgNzMgMDEgXTsKKwkJCWludGVycnVwdHMgPSA8MjMgMiAyNCAyIDI4IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHktaGFuZGxlID0gPDI0NTIwMDE+OworCQl9OworCQkKKwkJZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDI2MDAwIDEwMDA+OworCQkJbWFjLWFkZHJlc3MgPSBbIDAwIEUwIDBDIDAwIDAyIEZEIF07CisJCQlpbnRlcnJ1cHRzID0gPDFGIDIgMjAgMiAyMSAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJcGh5LWhhbmRsZSA9IDwyNDUyMDAyPjsKKwkJfTsKKworCQlldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MjcwMDAgMTAwMD47CisJCQltYWMtYWRkcmVzcyA9IFsgMDAgRTAgMEMgMDAgMDMgRkQgXTsKKwkJCWludGVycnVwdHMgPSA8MjUgMiAyNiAyIDI3IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCQlwaHktaGFuZGxlID0gPDI0NTIwMDM+OworCQl9OworCQlzZXJpYWxANDUwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDw0NTAwIDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDJhIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDw0MDAwMD47CisJCX07CisKKwkJc2VyaWFsQDQ2MDAgeworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8NDYwMCAxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwxYyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQl9OworCisJCXBjaUA4MDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiODZ4eCI7CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlyZWcgPSA8ODAwMCAxMDAwPjsKKwkJCWJ1cy1yYW5nZSA9IDwwIGZlPjsKKwkJCXJhbmdlcyA9IDwwMjAwMDAwMCAwIDgwMDAwMDAwIDgwMDAwMDAwIDAgMjAwMDAwMDAKKwkJCQkgIDAxMDAwMDAwIDAgMDAwMDAwMDAgZTIwMDAwMDAgMCAwMDEwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MWZjYTA1NT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CisJCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8ZjgwMCAwIDAgNz47CisJCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCS8qIElEU0VMIDB4MTEgKi8KKwkJCQk4ODAwIDAgMCAxIDRkMCAzIDIKKwkJCQk4ODAwIDAgMCAyIDRkMCA0IDIKKwkJCQk4ODAwIDAgMCAzIDRkMCA1IDIKKwkJCQk4ODAwIDAgMCA0IDRkMCA2IDIKKworCQkJCS8qIElEU0VMIDB4MTIgKi8KKwkJCQk5MDAwIDAgMCAxIDRkMCA0IDIKKwkJCQk5MDAwIDAgMCAyIDRkMCA1IDIKKwkJCQk5MDAwIDAgMCAzIDRkMCA2IDIKKwkJCQk5MDAwIDAgMCA0IDRkMCAzIDIKKworCQkJCS8qIElEU0VMIDB4MTMgKi8KKwkJCQk5ODAwIDAgMCAxIDRkMCAwIDAKKwkJCQk5ODAwIDAgMCAyIDRkMCAwIDAKKwkJCQk5ODAwIDAgMCAzIDRkMCAwIDAKKwkJCQk5ODAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MTQgKi8KKwkJCQlhMDAwIDAgMCAxIDRkMCAwIDAKKwkJCQlhMDAwIDAgMCAyIDRkMCAwIDAKKwkJCQlhMDAwIDAgMCAzIDRkMCAwIDAKKwkJCQlhMDAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MTUgKi8KKwkJCQlhODAwIDAgMCAxIDRkMCAwIDAKKwkJCQlhODAwIDAgMCAyIDRkMCAwIDAKKwkJCQlhODAwIDAgMCAzIDRkMCAwIDAKKwkJCQlhODAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MTYgKi8KKwkJCQliMDAwIDAgMCAxIDRkMCAwIDAKKwkJCQliMDAwIDAgMCAyIDRkMCAwIDAKKwkJCQliMDAwIDAgMCAzIDRkMCAwIDAKKwkJCQliMDAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MTcgKi8KKwkJCQliODAwIDAgMCAxIDRkMCAwIDAKKwkJCQliODAwIDAgMCAyIDRkMCAwIDAKKwkJCQliODAwIDAgMCAzIDRkMCAwIDAKKwkJCQliODAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MTggKi8KKwkJCQljMDAwIDAgMCAxIDRkMCAwIDAKKwkJCQljMDAwIDAgMCAyIDRkMCAwIDAKKwkJCQljMDAwIDAgMCAzIDRkMCAwIDAKKwkJCQljMDAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MTkgKi8KKwkJCQljODAwIDAgMCAxIDRkMCAwIDAKKwkJCQljODAwIDAgMCAyIDRkMCAwIDAKKwkJCQljODAwIDAgMCAzIDRkMCAwIDAKKwkJCQljODAwIDAgMCA0IDRkMCAwIDAKKworCQkJCS8qIElEU0VMIDB4MWEgKi8KKwkJCQlkMDAwIDAgMCAxIDRkMCA2IDIKKwkJCQlkMDAwIDAgMCAyIDRkMCAzIDIKKwkJCQlkMDAwIDAgMCAzIDRkMCA0IDIKKwkJCQlkMDAwIDAgMCA0IDRkMCA1IDIKKworCisJCQkJLyogSURTRUwgMHgxYiAqLworCQkJCWQ4MDAgMCAwIDEgNGQwIDUgMgorCQkJCWQ4MDAgMCAwIDIgNGQwIDAgMAorCQkJCWQ4MDAgMCAwIDMgNGQwIDAgMAorCQkJCWQ4MDAgMCAwIDQgNGQwIDAgMAorCisJCQkJLyogSURTRUwgMHgxYyAqLworCQkJCWUwMDAgMCAwIDEgNGQwIDkgMgorCQkJCWUwMDAgMCAwIDIgNGQwIGEgMgorCQkJCWUwMDAgMCAwIDMgNGQwIGMgMgorCQkJCWUwMDAgMCAwIDQgNGQwIDcgMgorCisJCQkJLyogSURTRUwgMHgxZCAqLworCQkJCWU4MDAgMCAwIDEgNGQwIDkgMgorCQkJCWU4MDAgMCAwIDIgNGQwIGEgMgorCQkJCWU4MDAgMCAwIDMgNGQwIGIgMgorCQkJCWU4MDAgMCAwIDQgNGQwIDAgMAorCisJCQkJLyogSURTRUwgMHgxZSAqLworCQkJCWYwMDAgMCAwIDEgNGQwIGMgMgorCQkJCWYwMDAgMCAwIDIgNGQwIDAgMAorCQkJCWYwMDAgMCAwIDMgNGQwIDAgMAorCQkJCWYwMDAgMCAwIDQgNGQwIDAgMAorCisJCQkJLyogSURTRUwgMHgxZiAqLworCQkJCWY4MDAgMCAwIDEgNGQwIDYgMgorCQkJCWY4MDAgMCAwIDIgNGQwIDAgMAorCQkJCWY4MDAgMCAwIDMgNGQwIDAgMAorCQkJCWY4MDAgMCAwIDQgNGQwIDAgMAorCQkJCT47CisJCQlpODI1OUA0ZDAgeworCQkJCWxpbnV4LHBoYW5kbGUgPSA8NGQwPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJYnVpbHQtaW47CisJCQkJY29tcGF0aWJsZSA9ICJjaHJwLGlpYyI7CisgICAgICAgICAgICAgICAgCSAgICAgICAgYmlnLWVuZGlhbjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQ5IDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8NDAwMDA+OworCQkJfTsKKworCQl9OworCQlwaWNANDAwMDAgeworCQkJbGludXgscGhhbmRsZSA9IDw0MDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDw0MDAwMCA0MDAwMD47CisJCQlidWlsdC1pbjsKKwkJCWNvbXBhdGlibGUgPSAiY2hycCxvcGVuLXBpYyI7CisJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CisgICAgICAgICAgICAgICAgICAgICAgICBiaWctZW5kaWFuOworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkxMCAyIDExIDIgMTIgMiAxMyAyCisJCQkJMTQgMiAxNSAyIDE2IDIgMTcgMgorCQkJCTE4IDIgMTkgMiAxYSAyIDFiIDIKKwkJCQkxYyAyIDFkIDIgMWUgMiAxZiAyCisJCQkJMjAgMiAyMSAyIDIyIDIgMjMgMgorCQkJCTI0IDIgMjUgMiAyNiAyIDI3IDIKKwkJCQkyOCAyIDI5IDIgMmEgMiAyYiAyCisJCQkJMmMgMiAyZCAyIDJlIDIgMmYgMgorCQkJCTMwIDIgMzEgMiAzMiAyIDMzIDIKKwkJCQkzNCAyIDM1IDIgMzYgMiAzNyAyCisJCQkJMzggMiAzOSAyIDJhIDIgM2IgMgorCQkJCTNjIDIgM2QgMiAzZSAyIDNmIDIKKwkJCQk0OCAxIDQ5IDIgNGEgMQorCQkJCT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPDQwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2ZsYXRkZXZ0cmVlLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9mbGF0ZGV2dHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2MWM4ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9mbGF0ZGV2dHJlZS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBGTEFUREVWVFJFRV9ICisjZGVmaW5lIEZMQVRERVZUUkVFX0gKKworI2luY2x1ZGUgInR5cGVzLmgiCisKKy8qIERlZmluaXRpb25zIHVzZWQgYnkgdGhlIGZsYXR0ZW5lZCBkZXZpY2UgdHJlZSAqLworI2RlZmluZSBPRl9EVF9IRUFERVIgICAgICAgICAgICAweGQwMGRmZWVkICAgICAgLyogbWFya2VyICovCisjZGVmaW5lIE9GX0RUX0JFR0lOX05PREUgICAgICAgIDB4MSAgICAgLyogU3RhcnQgb2Ygbm9kZSwgZnVsbCBuYW1lICovCisjZGVmaW5lIE9GX0RUX0VORF9OT0RFICAgICAgICAgIDB4MiAgICAgLyogRW5kIG5vZGUgKi8KKyNkZWZpbmUgT0ZfRFRfUFJPUCAgICAgICAgICAgICAgMHgzICAgICAvKiBQcm9wZXJ0eTogbmFtZSBvZmYsIHNpemUsIGNvbnRlbnQgKi8KKyNkZWZpbmUgT0ZfRFRfTk9QICAgICAgICAgICAgICAgMHg0ICAgICAvKiBub3AgKi8KKyNkZWZpbmUgT0ZfRFRfRU5EICAgICAgICAgICAgICAgMHg5CisKKyNkZWZpbmUgT0ZfRFRfVkVSU0lPTiAgICAgICAgICAgMHgxMAorCitzdHJ1Y3QgYm9vdF9wYXJhbV9oZWFkZXIgeworCXUzMiBtYWdpYzsgICAgICAgICAgICAgIC8qIG1hZ2ljIHdvcmQgT0ZfRFRfSEVBREVSICovCisJdTMyIHRvdGFsc2l6ZTsgICAgICAgICAgLyogdG90YWwgc2l6ZSBvZiBEVCBibG9jayAqLworCXUzMiBvZmZfZHRfc3RydWN0OyAgICAgIC8qIG9mZnNldCB0byBzdHJ1Y3R1cmUgKi8KKwl1MzIgb2ZmX2R0X3N0cmluZ3M7ICAgICAvKiBvZmZzZXQgdG8gc3RyaW5ncyAqLworCXUzMiBvZmZfbWVtX3Jzdm1hcDsgICAgIC8qIG9mZnNldCB0byBtZW1vcnkgcmVzZXJ2ZSBtYXAgKi8KKwl1MzIgdmVyc2lvbjsgICAgICAgICAgICAvKiBmb3JtYXQgdmVyc2lvbiAqLworCXUzMiBsYXN0X2NvbXBfdmVyc2lvbjsgIC8qIGxhc3QgY29tcGF0aWJsZSB2ZXJzaW9uICovCisJLyogdmVyc2lvbiAyIGZpZWxkcyBiZWxvdyAqLworCXUzMiBib290X2NwdWlkX3BoeXM7ICAgIC8qIFBoeXNpY2FsIENQVSBpZCB3ZSdyZSBib290aW5nIG9uICovCisJLyogdmVyc2lvbiAzIGZpZWxkcyBiZWxvdyAqLworCXUzMiBkdF9zdHJpbmdzX3NpemU7ICAgIC8qIHNpemUgb2YgdGhlIERUIHN0cmluZ3MgYmxvY2sgKi8KK307CisKKyNlbmRpZiAvKiBGTEFUREVWVFJFRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9tYWluLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9tYWluLmMKaW5kZXggYjY2NjM0Yy4uZDcxOWJiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvbWFpbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L21haW4uYwpAQCAtMTQsMTcgKzE0LDEyIEBACiAjaW5jbHVkZSAicGFnZS5oIgogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgInN0ZGlvLmgiCi0jaW5jbHVkZSAicHJvbS5oIgogI2luY2x1ZGUgInpsaWIuaCIKKyNpbmNsdWRlICJvcHMuaCIKKyNpbmNsdWRlICJmbGF0ZGV2dHJlZS5oIgogCiBleHRlcm4gdm9pZCBmbHVzaF9jYWNoZSh2b2lkICosIHVuc2lnbmVkIGxvbmcpOwogCi0KLS8qIFZhbHVlIHBpY2tlZCB0byBtYXRjaCB0aGF0IHVzZWQgYnkgeWFib290ICovCi0jZGVmaW5lIFBST0dfU1RBUlQJMHgwMTQwMDAwMAkvKiBvbmx5IHVzZWQgb24gNjQtYml0IHN5c3RlbXMgKi8KLSNkZWZpbmUgUkFNX0VORAkJKDUxMjw8MjApCS8qIEZpeG1lOiB1c2UgT0YgKi8KLSNkZWZpbmUJT05FX01CCQkweDEwMDAwMAotCiBleHRlcm4gY2hhciBfc3RhcnRbXTsKIGV4dGVybiBjaGFyIF9fYnNzX3N0YXJ0W107CiBleHRlcm4gY2hhciBfZW5kW107CkBAIC0zMywxNCArMjgsNiBAQAogZXh0ZXJuIGNoYXIgX2luaXRyZF9zdGFydFtdOwogZXh0ZXJuIGNoYXIgX2luaXRyZF9lbmRbXTsKIAotLyogQSBidWZmZXIgdGhhdCBtYXkgYmUgZWRpdGVkIGJ5IHRvb2xzIG9wZXJhdGluZyBvbiBhIHpJbWFnZSBiaW5hcnkgc28gYXMgdG8KLSAqIGVkaXQgdGhlIGNvbW1hbmQgbGluZSBwYXNzZWQgdG8gdm1saW51eCAoYnkgc2V0dGluZyAvY2hvc2VuL2Jvb3RhcmdzKS4KLSAqIFRoZSBidWZmZXIgaXMgcHV0IGluIGl0J3Mgb3duIHNlY3Rpb24gc28gdGhhdCB0b29scyBtYXkgbG9jYXRlIGl0IGVhc2llci4KLSAqLwotc3RhdGljIGNoYXIgYnVpbHRpbl9jbWRsaW5lWzUxMl0KLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKCJfX2J1aWx0aW5fY21kbGluZSIpKSk7Ci0KLQogc3RydWN0IGFkZHJfcmFuZ2UgewogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAl1bnNpZ25lZCBsb25nIHNpemU7CkBAIC01MSwyMSArMzgsMTYgQEAKIHN0YXRpYyBzdHJ1Y3QgYWRkcl9yYW5nZSBpbml0cmQ7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVsZm9mZnNldDsKK3N0YXRpYyBpbnQgaXNfNjRiaXQ7CiAKLXN0YXRpYyBjaGFyIHNjcmF0Y2hbNDY5MTJdOwkvKiBzY3JhdGNoIHNwYWNlIGZvciBndW56aXAsIGZyb20gemxpYl9pbmZsYXRlX3dvcmtzcGFjZXNpemUoKSAqLworLyogc2NyYXRjaCBzcGFjZSBmb3IgZ3VuemlwOyA0NjkxMiBpcyBmcm9tIHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCkgKi8KK3N0YXRpYyBjaGFyIHNjcmF0Y2hbNDY5MTJdOwogc3RhdGljIGNoYXIgZWxmaGVhZGVyWzI1Nl07CiAKLQotdHlwZWRlZiB2b2lkICgqa2VybmVsX2VudHJ5X3QpKCB1bnNpZ25lZCBsb25nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosCi0JCQkJdm9pZCAqKTsKLQordHlwZWRlZiB2b2lkICgqa2VybmVsX2VudHJ5X3QpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiAKICN1bmRlZiBERUJVRwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGFpbV9iYXNlOwotCiAjZGVmaW5lIEhFQURfQ1JDCTIKICNkZWZpbmUgRVhUUkFfRklFTEQJNAogI2RlZmluZSBPUklHX05BTUUJOApAQCAtMTIzLDI0ICsxMDUsNiBAQAogCXpsaWJfaW5mbGF0ZUVuZCgmcyk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyeV9jbGFpbSh1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gMDsKLQotCWZvcig7IGNsYWltX2Jhc2UgPCBSQU1fRU5EOyBjbGFpbV9iYXNlICs9IE9ORV9NQikgewotI2lmZGVmIERFQlVHCi0JCXByaW50ZigiICAgIHRyeWluZzogMHglMDhseFxuXHIiLCBjbGFpbV9iYXNlKTsKLSNlbmRpZgotCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpY2xhaW0oY2xhaW1fYmFzZSwgc2l6ZSwgMCk7Ci0JCWlmICgodm9pZCAqKWFkZHIgIT0gKHZvaWQgKiktMSkKLQkJCWJyZWFrOwotCX0KLQlpZiAoYWRkciA9PSAwKQotCQlyZXR1cm4gMDsKLQljbGFpbV9iYXNlID0gUEFHRV9BTElHTihjbGFpbV9iYXNlICsgc2l6ZSk7Ci0JcmV0dXJuIGFkZHI7Ci19Ci0KIHN0YXRpYyBpbnQgaXNfZWxmNjQodm9pZCAqaGRyKQogewogCUVsZjY0X0VoZHIgKmVsZjY0ID0gaGRyOwpAQCAtMTY5LDE2ICsxMzMsNyBAQAogCXZtbGludXguc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWVsZjY0cGgtPnBfZmlsZXN6ICsgZWxmb2Zmc2V0OwogCXZtbGludXgubWVtc2l6ZSA9ICh1bnNpZ25lZCBsb25nKWVsZjY0cGgtPnBfbWVtc3ogKyBlbGZvZmZzZXQ7CiAKLSNpZiBkZWZpbmVkKFBST0dfU1RBUlQpCi0JLyoKLQkgKiBNYWludGFpbiBhICJtYWdpYyIgbWluaW11bSBhZGRyZXNzLiBUaGlzIGtlZXBzIHNvbWUgb2xkZXIKLQkgKiBmaXJtd2FyZSBwbGF0Zm9ybXMgcnVubmluZy4KLQkgKi8KLQotCWlmIChjbGFpbV9iYXNlIDwgUFJPR19TVEFSVCkKLQkJY2xhaW1fYmFzZSA9IFBST0dfU1RBUlQ7Ci0jZW5kaWYKLQorCWlzXzY0Yml0ID0gMTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtMjEyLDQ3ICsxNjcsOSBAQAogCXJldHVybiAxOwogfQogCi12b2lkIGV4cG9ydF9jbWRsaW5lKHZvaWQqIGNob3Nlbl9oYW5kbGUpCi17Ci0gICAgICAgIGludCBsZW47Ci0gICAgICAgIGNoYXIgY21kbGluZVsyXSA9IHsgMCwgMCB9OwotCi0JaWYgKGJ1aWx0aW5fY21kbGluZVswXSA9PSAwKQotCQlyZXR1cm47Ci0KLSAgICAgICAgbGVuID0gZ2V0cHJvcChjaG9zZW5faGFuZGxlLCAiYm9vdGFyZ3MiLCBjbWRsaW5lLCBzaXplb2YoY21kbGluZSkpOwotICAgICAgICBpZiAobGVuID4gMCAmJiBjbWRsaW5lWzBdICE9IDApCi0JCXJldHVybjsKLQotCXNldHByb3AoY2hvc2VuX2hhbmRsZSwgImJvb3RhcmdzIiwgYnVpbHRpbl9jbWRsaW5lLAotCQlzdHJsZW4oYnVpbHRpbl9jbWRsaW5lKSArIDEpOwotfQotCi0KLXZvaWQgc3RhcnQodW5zaWduZWQgbG9uZyBhMSwgdW5zaWduZWQgbG9uZyBhMiwgdm9pZCAqcHJvbXB0ciwgdm9pZCAqc3ApCitzdGF0aWMgdm9pZCBwcmVwX2tlcm5lbCh1bnNpZ25lZCBsb25nICphMSwgdW5zaWduZWQgbG9uZyAqYTIpCiB7CiAJaW50IGxlbjsKLQlrZXJuZWxfZW50cnlfdCBrZXJuZWxfZW50cnk7Ci0KLQltZW1zZXQoX19ic3Nfc3RhcnQsIDAsIF9lbmQgLSBfX2Jzc19zdGFydCk7Ci0KLQlwcm9tID0gKGludCAoKikodm9pZCAqKSkgcHJvbXB0cjsKLQljaG9zZW5faGFuZGxlID0gZmluZGRldmljZSgiL2Nob3NlbiIpOwotCWlmIChjaG9zZW5faGFuZGxlID09ICh2b2lkICopIC0xKQotCQlleGl0KCk7Ci0JaWYgKGdldHByb3AoY2hvc2VuX2hhbmRsZSwgInN0ZG91dCIsICZzdGRvdXQsIHNpemVvZihzdGRvdXQpKSAhPSA0KQotCQlleGl0KCk7Ci0KLQlwcmludGYoIlxuXHJ6SW1hZ2Ugc3RhcnRpbmc6IGxvYWRlZCBhdCAweCVwIChzcDogMHglcClcblxyIiwgX3N0YXJ0LCBzcCk7Ci0KLQkvKgotCSAqIFRoZSBmaXJzdCBhdmFpbGFibGUgY2xhaW1fYmFzZSBtdXN0IGJlIGFib3ZlIHRoZSBlbmQgb2YgdGhlCi0JICogdGhlIGxvYWRlZCBrZXJuZWwgd3JhcHBlciBmaWxlIChfc3RhcnQgdG8gX2VuZCBpbmNsdWRlcyB0aGUKLQkgKiBpbml0cmQgaW1hZ2UgaWYgaXQgaXMgcHJlc2VudCkgYW5kIHJvdW5kZWQgdXAgdG8gYSBuaWNlCi0JICogMSBNQiBib3VuZGFyeSBmb3IgZ29vZCBtZWFzdXJlLgotCSAqLwotCi0JY2xhaW1fYmFzZSA9IF9BTElHTl9VUCgodW5zaWduZWQgbG9uZylfZW5kLCBPTkVfTUIpOwogCiAJdm1saW51ei5hZGRyID0gKHVuc2lnbmVkIGxvbmcpX3ZtbGludXhfc3RhcnQ7CiAJdm1saW51ei5zaXplID0gKHVuc2lnbmVkIGxvbmcpKF92bWxpbnV4X2VuZCAtIF92bWxpbnV4X3N0YXJ0KTsKQEAgLTI2Myw0MyArMTgwLDUxIEBACiAJCWd1bnppcChlbGZoZWFkZXIsIHNpemVvZihlbGZoZWFkZXIpLAogCQkJCSh1bnNpZ25lZCBjaGFyICopdm1saW51ei5hZGRyLCAmbGVuKTsKIAl9IGVsc2UKLQkJbWVtY3B5KGVsZmhlYWRlciwgKGNvbnN0IHZvaWQgKil2bWxpbnV6LmFkZHIsIHNpemVvZihlbGZoZWFkZXIpKTsKKwkJbWVtY3B5KGVsZmhlYWRlciwgKGNvbnN0IHZvaWQgKil2bWxpbnV6LmFkZHIsCisJCSAgICAgICBzaXplb2YoZWxmaGVhZGVyKSk7CiAKIAlpZiAoIWlzX2VsZjY0KGVsZmhlYWRlcikgJiYgIWlzX2VsZjMyKGVsZmhlYWRlcikpIHsKIAkJcHJpbnRmKCJFcnJvcjogbm90IGEgdmFsaWQgUFBDMzIgb3IgUFBDNjQgRUxGIGZpbGUhXG5cciIpOwogCQlleGl0KCk7CiAJfQorCWlmIChwbGF0Zm9ybV9vcHMuaW1hZ2VfaGRyKQorCQlwbGF0Zm9ybV9vcHMuaW1hZ2VfaGRyKGVsZmhlYWRlcik7CiAKLQkvKiBXZSBuZWVkIHRvIGNsYWltIHRoZSBtZW1zaXplIHBsdXMgdGhlIGZpbGUgb2Zmc2V0IHNpbmNlIGd6aXAKKwkvKiBXZSBuZWVkIHRvIGFsbG9jIHRoZSBtZW1zaXplIHBsdXMgdGhlIGZpbGUgb2Zmc2V0IHNpbmNlIGd6aXAKIAkgKiB3aWxsIGV4cGFuZCB0aGUgaGVhZGVyIChmaWxlIG9mZnNldCksIHRoZW4gdGhlIGtlcm5lbCwgdGhlbgogCSAqIHBvc3NpYmxlIHJ1YmJpc2ggd2UgZG9uJ3QgY2FyZSBhYm91dC4gQnV0IHRoZSBrZXJuZWwgYnNzIG11c3QKIAkgKiBiZSBjbGFpbWVkIChpdCB3aWxsIGJlIHplcm8nZCBieSB0aGUga2VybmVsIGl0c2VsZikKIAkgKi8KIAlwcmludGYoIkFsbG9jYXRpbmcgMHglbHggYnl0ZXMgZm9yIGtlcm5lbCAuLi5cblxyIiwgdm1saW51eC5tZW1zaXplKTsKLQl2bWxpbnV4LmFkZHIgPSB0cnlfY2xhaW0odm1saW51eC5tZW1zaXplKTsKKwl2bWxpbnV4LmFkZHIgPSAodW5zaWduZWQgbG9uZyltYWxsb2Modm1saW51eC5tZW1zaXplKTsKIAlpZiAodm1saW51eC5hZGRyID09IDApIHsKIAkJcHJpbnRmKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGtlcm5lbCBpbWFnZSAhXG5cciIpOwogCQlleGl0KCk7CiAJfQogCiAJLyoKLQkgKiBOb3cgd2UgdHJ5IHRvIGNsYWltIG1lbW9yeSBmb3IgdGhlIGluaXRyZCAoYW5kIGNvcHkgaXQgdGhlcmUpCisJICogTm93IHdlIHRyeSB0byBhbGxvYyBtZW1vcnkgZm9yIHRoZSBpbml0cmQgKGFuZCBjb3B5IGl0IHRoZXJlKQogCSAqLwogCWluaXRyZC5zaXplID0gKHVuc2lnbmVkIGxvbmcpKF9pbml0cmRfZW5kIC0gX2luaXRyZF9zdGFydCk7CiAJaW5pdHJkLm1lbXNpemUgPSBpbml0cmQuc2l6ZTsKIAlpZiAoIGluaXRyZC5zaXplID4gMCApIHsKLQkJcHJpbnRmKCJBbGxvY2F0aW5nIDB4JWx4IGJ5dGVzIGZvciBpbml0cmQgLi4uXG5cciIsIGluaXRyZC5zaXplKTsKLQkJaW5pdHJkLmFkZHIgPSB0cnlfY2xhaW0oaW5pdHJkLnNpemUpOworCQlwcmludGYoIkFsbG9jYXRpbmcgMHglbHggYnl0ZXMgZm9yIGluaXRyZCAuLi5cblxyIiwKKwkJICAgICAgIGluaXRyZC5zaXplKTsKKwkJaW5pdHJkLmFkZHIgPSAodW5zaWduZWQgbG9uZyltYWxsb2MoKHUzMilpbml0cmQuc2l6ZSk7CiAJCWlmIChpbml0cmQuYWRkciA9PSAwKSB7Ci0JCQlwcmludGYoIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5pdGlhbCByYW1kaXNrICFcblxyIik7CisJCQlwcmludGYoIkNhbid0IGFsbG9jYXRlIG1lbW9yeSBmb3IgaW5pdGlhbCAiCisJCQkJCSJyYW1kaXNrICFcblxyIik7CiAJCQlleGl0KCk7CiAJCX0KLQkJYTEgPSBpbml0cmQuYWRkcjsKLQkJYTIgPSBpbml0cmQuc2l6ZTsKLQkJcHJpbnRmKCJpbml0aWFsIHJhbWRpc2sgbW92aW5nIDB4JWx4IDwtIDB4JWx4ICgweCVseCBieXRlcylcblxyIiwKLQkJICAgICAgIGluaXRyZC5hZGRyLCAodW5zaWduZWQgbG9uZylfaW5pdHJkX3N0YXJ0LCBpbml0cmQuc2l6ZSk7Ci0JCW1lbW1vdmUoKHZvaWQgKilpbml0cmQuYWRkciwgKHZvaWQgKilfaW5pdHJkX3N0YXJ0LCBpbml0cmQuc2l6ZSk7Ci0JCXByaW50ZigiaW5pdHJkIGhlYWQ6IDB4JWx4XG5cciIsICooKHVuc2lnbmVkIGxvbmcgKilpbml0cmQuYWRkcikpOworCQkqYTEgPSBpbml0cmQuYWRkcjsKKwkJKmEyID0gaW5pdHJkLnNpemU7CisJCXByaW50ZigiaW5pdGlhbCByYW1kaXNrIG1vdmluZyAweCVseCA8LSAweCVseCAiCisJCQkiKDB4JWx4IGJ5dGVzKVxuXHIiLCBpbml0cmQuYWRkciwKKwkJCSh1bnNpZ25lZCBsb25nKV9pbml0cmRfc3RhcnQsIGluaXRyZC5zaXplKTsKKwkJbWVtbW92ZSgodm9pZCAqKWluaXRyZC5hZGRyLCAodm9pZCAqKV9pbml0cmRfc3RhcnQsCisJCQlpbml0cmQuc2l6ZSk7CisJCXByaW50ZigiaW5pdHJkIGhlYWQ6IDB4JWx4XG5cciIsCisJCQkJKigodW5zaWduZWQgbG9uZyAqKWluaXRyZC5hZGRyKSk7CiAJfQogCiAJLyogRXZlbnR1YWxseSBndW56aXAgdGhlIGtlcm5lbCAqLwpAQCAtMzExLDExICsyMzYsMTAgQEAKIAkJCSh1bnNpZ25lZCBjaGFyICopdm1saW51ei5hZGRyLCAmbGVuKTsKIAkJcHJpbnRmKCJkb25lIDB4JWx4IGJ5dGVzXG5cciIsIGxlbik7CiAJfSBlbHNlIHsKLQkJbWVtbW92ZSgodm9pZCAqKXZtbGludXguYWRkciwodm9pZCAqKXZtbGludXouYWRkcix2bWxpbnV6LnNpemUpOworCQltZW1tb3ZlKCh2b2lkICopdm1saW51eC5hZGRyLCh2b2lkICopdm1saW51ei5hZGRyLAorCQkJdm1saW51ei5zaXplKTsKIAl9CiAKLQlleHBvcnRfY21kbGluZShjaG9zZW5faGFuZGxlKTsKLQogCS8qIFNraXAgb3ZlciB0aGUgRUxGIGhlYWRlciAqLwogI2lmZGVmIERFQlVHCiAJcHJpbnRmKCIuLi4gc2tpcHBpbmcgMHglbHggYnl0ZXMgb2YgRUxGIGhlYWRlclxuXHIiLApAQCAtMzI0LDIzICsyNDgsMTA3IEBACiAJdm1saW51eC5hZGRyICs9IGVsZm9mZnNldDsKIAogCWZsdXNoX2NhY2hlKCh2b2lkICopdm1saW51eC5hZGRyLCB2bWxpbnV4LnNpemUpOwotCi0Ja2VybmVsX2VudHJ5ID0gKGtlcm5lbF9lbnRyeV90KXZtbGludXguYWRkcjsKLSNpZmRlZiBERUJVRwotCXByaW50ZiggImtlcm5lbDpcblxyIgotCQkiICAgICAgICBlbnRyeSBhZGRyID0gMHglbHhcblxyIgotCQkiICAgICAgICBhMSAgICAgICAgID0gMHglbHgsXG5cciIKLQkJIiAgICAgICAgYTIgICAgICAgICA9IDB4JWx4LFxuXHIiCi0JCSIgICAgICAgIHByb20gICAgICAgPSAweCVseCxcblxyIgotCQkiICAgICAgICBiaV9yZWNzICAgID0gMHglbHgsXG5cciIsCi0JCSh1bnNpZ25lZCBsb25nKWtlcm5lbF9lbnRyeSwgYTEsIGEyLAotCQkodW5zaWduZWQgbG9uZylwcm9tLCBOVUxMKTsKLSNlbmRpZgotCi0Ja2VybmVsX2VudHJ5KGExLCBhMiwgcHJvbSwgTlVMTCk7Ci0KLQlwcmludGYoIkVycm9yOiBMaW51eCBrZXJuZWwgcmV0dXJuZWQgdG8gekltYWdlIGJvb3Rsb2FkZXIhXG5cciIpOwotCi0JZXhpdCgpOwogfQogCit2b2lkIF9fYXR0cmlidXRlX18gKCh3ZWFrKSkgZnRfaW5pdCh2b2lkICpkdF9ibG9iKQoreworfQorCisvKiBBIGJ1ZmZlciB0aGF0IG1heSBiZSBlZGl0ZWQgYnkgdG9vbHMgb3BlcmF0aW5nIG9uIGEgekltYWdlIGJpbmFyeSBzbyBhcyB0bworICogZWRpdCB0aGUgY29tbWFuZCBsaW5lIHBhc3NlZCB0byB2bWxpbnV4IChieSBzZXR0aW5nIC9jaG9zZW4vYm9vdGFyZ3MpLgorICogVGhlIGJ1ZmZlciBpcyBwdXQgaW4gaXQncyBvd24gc2VjdGlvbiBzbyB0aGF0IHRvb2xzIG1heSBsb2NhdGUgaXQgZWFzaWVyLgorICovCitzdGF0aWMgY2hhciBidWlsdGluX2NtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdCisJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIl9fYnVpbHRpbl9jbWRsaW5lIikpKTsKKworc3RhdGljIHZvaWQgZ2V0X2NtZGxpbmUoY2hhciAqYnVmLCBpbnQgc2l6ZSkKK3sKKwl2b2lkICpkZXZwOworCWludCBsZW4gPSBzdHJsZW4oYnVpbHRpbl9jbWRsaW5lKTsKKworCWJ1ZlswXSA9ICdcMCc7CisKKwlpZiAobGVuID4gMCkgeyAvKiBidWlsdGluX2NtZGxpbmUgb3ZlcnJpZGVzIGR0J3MgL2Nob3Nlbi9ib290YXJncyAqLworCQlsZW4gPSBtaW4obGVuLCBzaXplLTEpOworCQlzdHJuY3B5KGJ1ZiwgYnVpbHRpbl9jbWRsaW5lLCBsZW4pOworCQlidWZbbGVuXSA9ICdcMCc7CisJfQorCWVsc2UgaWYgKChkZXZwID0gZmluZGRldmljZSgiL2Nob3NlbiIpKSkKKwkJZ2V0cHJvcChkZXZwLCAiYm9vdGFyZ3MiLCBidWYsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBzZXRfY21kbGluZShjaGFyICpidWYpCit7CisJdm9pZCAqZGV2cDsKKworCWlmICgoZGV2cCA9IGZpbmRkZXZpY2UoIi9jaG9zZW4iKSkpCisJCXNldHByb3AoZGV2cCwgImJvb3RhcmdzIiwgYnVmLCBzdHJsZW4oYnVmKSArIDEpOworfQorCisvKiBTZWN0aW9uIHdoZXJlIGZ0IGNhbiBiZSB0YWNrZWQgb24gYWZ0ZXIgekltYWdlIGlzIGJ1aWx0ICovCit1bmlvbiBibG9ic3BhY2UgeworCXN0cnVjdCBib290X3BhcmFtX2hlYWRlciBoZHI7CisJY2hhciBzcGFjZVs4KjEwMjRdOworfSBkdF9ibG9iIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCJfX2J1aWx0aW5fZnQiKSkpOworCitzdHJ1Y3QgcGxhdGZvcm1fb3BzIHBsYXRmb3JtX29wczsKK3N0cnVjdCBkdF9vcHMgZHRfb3BzOworc3RydWN0IGNvbnNvbGVfb3BzIGNvbnNvbGVfb3BzOworCit2b2lkIHN0YXJ0KHVuc2lnbmVkIGxvbmcgYTEsIHVuc2lnbmVkIGxvbmcgYTIsIHZvaWQgKnByb21wdHIsIHZvaWQgKnNwKQoreworCWludCBoYXZlX2R0ID0gMDsKKwlrZXJuZWxfZW50cnlfdCBrZW50cnk7CisJY2hhciBjbWRsaW5lW0NPTU1BTkRfTElORV9TSVpFXTsKKworCW1lbXNldChfX2Jzc19zdGFydCwgMCwgX2VuZCAtIF9fYnNzX3N0YXJ0KTsKKwltZW1zZXQoJnBsYXRmb3JtX29wcywgMCwgc2l6ZW9mKHBsYXRmb3JtX29wcykpOworCW1lbXNldCgmZHRfb3BzLCAwLCBzaXplb2YoZHRfb3BzKSk7CisJbWVtc2V0KCZjb25zb2xlX29wcywgMCwgc2l6ZW9mKGNvbnNvbGVfb3BzKSk7CisKKwkvKiBPdmVycmlkZSB0aGUgZHRfb3BzIGFuZCBkZXZpY2UgdHJlZSBpZiB0aGVyZSB3YXMgYW4gZmxhdCBkZXYKKwkgKiB0cmVlIGF0dGFjaGVkIHRvIHRoZSB6SW1hZ2UuCisJICovCisJaWYgKGR0X2Jsb2IuaGRyLm1hZ2ljID09IE9GX0RUX0hFQURFUikgeworCQloYXZlX2R0ID0gMTsKKwkJZnRfaW5pdCgmZHRfYmxvYik7CisJfQorCisJaWYgKHBsYXRmb3JtX2luaXQocHJvbXB0cikpCisJCWV4aXQoKTsKKwlpZiAoY29uc29sZV9vcHMub3BlbiAmJiAoY29uc29sZV9vcHMub3BlbigpIDwgMCkpCisJCWV4aXQoKTsKKwlpZiAocGxhdGZvcm1fb3BzLmZpeHVwcykKKwkJcGxhdGZvcm1fb3BzLmZpeHVwcygpOworCisJcHJpbnRmKCJcblxyekltYWdlIHN0YXJ0aW5nOiBsb2FkZWQgYXQgMHglcCAoc3A6IDB4JXApXG5cciIsCisJICAgICAgIF9zdGFydCwgc3ApOworCisJcHJlcF9rZXJuZWwoJmExLCAmYTIpOworCisJLyogSWYgY21kbGluZSBjYW1lIGZyb20gemltYWdlIHdyYXBwZXIgb3IgaWYgd2UgY2FuIGVkaXQgdGhlIG9uZQorCSAqIGluIHRoZSBkdCwgcHJpbnQgaXQgb3V0IGFuZCBlZGl0IGl0LCBpZiBwb3NzaWJsZS4KKwkgKi8KKwlpZiAoKHN0cmxlbihidWlsdGluX2NtZGxpbmUpID4gMCkgfHwgY29uc29sZV9vcHMuZWRpdF9jbWRsaW5lKSB7CisJCWdldF9jbWRsaW5lKGNtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKwkJcHJpbnRmKCJcblxyTGludXgvUG93ZXJQQyBsb2FkOiAlcyIsIGNtZGxpbmUpOworCQlpZiAoY29uc29sZV9vcHMuZWRpdF9jbWRsaW5lKQorCQkJY29uc29sZV9vcHMuZWRpdF9jbWRsaW5lKGNtZGxpbmUsIENPTU1BTkRfTElORV9TSVpFKTsKKwkJcHJpbnRmKCJcblxyIik7CisJCXNldF9jbWRsaW5lKGNtZGxpbmUpOworCX0KKworCWlmIChjb25zb2xlX29wcy5jbG9zZSkKKwkJY29uc29sZV9vcHMuY2xvc2UoKTsKKworCWtlbnRyeSA9IChrZXJuZWxfZW50cnlfdCkgdm1saW51eC5hZGRyOworCWlmIChoYXZlX2R0KQorCQlrZW50cnkoZHRfb3BzLmZ0X2FkZHIoKSwgMCwgTlVMTCk7CisJZWxzZQorCQkvKiBYWFggaW5pdHJkIGFkZHIvc2l6ZSBzaG91bGQgYmUgcGFzc2VkIGluIHByb3BlcnRpZXMgKi8KKwkJa2VudHJ5KGExLCBhMiwgcHJvbXB0cik7CisKKwkvKiBjb25zb2xlIGNsb3NlZCBzbyBwcmludGYgYmVsb3cgbWF5IG5vdCB3b3JrICovCisJcHJpbnRmKCJFcnJvcjogTGludXgga2VybmVsIHJldHVybmVkIHRvIHpJbWFnZSBib290IHdyYXBwZXIhXG5cciIpOworCWV4aXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L29mLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9vZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkOTlmNzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9vZi5jCkBAIC0wLDAgKzEsMjgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSBQYXVsIE1hY2tlcnJhcyAxOTk3LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlICJ0eXBlcy5oIgorI2luY2x1ZGUgImVsZi5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAicGFnZS5oIgorI2luY2x1ZGUgIm9wcy5oIgorCit0eXBlZGVmIHZvaWQgKmloYW5kbGU7Cit0eXBlZGVmIHZvaWQgKnBoYW5kbGU7CisKK2V4dGVybiBjaGFyIF9lbmRbXTsKKworLyogVmFsdWUgcGlja2VkIHRvIG1hdGNoIHRoYXQgdXNlZCBieSB5YWJvb3QgKi8KKyNkZWZpbmUgUFJPR19TVEFSVAkweDAxNDAwMDAwCS8qIG9ubHkgdXNlZCBvbiA2NC1iaXQgc3lzdGVtcyAqLworI2RlZmluZSBSQU1fRU5ECQkoNTEyPDwyMCkJLyogRml4bWU6IHVzZSBPRiAqLworI2RlZmluZQlPTkVfTUIJCTB4MTAwMDAwCisKK2ludCAoKnByb20pICh2b2lkICopOworCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsYWltX2Jhc2U7CisKK3N0YXRpYyBpbnQgY2FsbF9wcm9tKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsIC4uLikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcHJvbV9hcmdzIHsKKwkJY29uc3QgY2hhciAqc2VydmljZTsKKwkJaW50IG5hcmdzOworCQlpbnQgbnJldDsKKwkJdW5zaWduZWQgaW50IGFyZ3NbMTJdOworCX0gYXJnczsKKwl2YV9saXN0IGxpc3Q7CisKKwlhcmdzLnNlcnZpY2UgPSBzZXJ2aWNlOworCWFyZ3MubmFyZ3MgPSBuYXJnczsKKwlhcmdzLm5yZXQgPSBucmV0OworCisJdmFfc3RhcnQobGlzdCwgbnJldCk7CisJZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCisJCWFyZ3MuYXJnc1tpXSA9IHZhX2FyZyhsaXN0LCB1bnNpZ25lZCBpbnQpOworCXZhX2VuZChsaXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucmV0OyBpKyspCisJCWFyZ3MuYXJnc1tuYXJncytpXSA9IDA7CisKKwlpZiAocHJvbSgmYXJncykgPCAwKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gKG5yZXQgPiAwKT8gYXJncy5hcmdzW25hcmdzXTogMDsKK30KKworc3RhdGljIGludCBjYWxsX3Byb21fcmV0KGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsCisJCSAgdW5zaWduZWQgaW50ICpyZXRzLCAuLi4pCit7CisJaW50IGk7CisJc3RydWN0IHByb21fYXJncyB7CisJCWNvbnN0IGNoYXIgKnNlcnZpY2U7CisJCWludCBuYXJnczsKKwkJaW50IG5yZXQ7CisJCXVuc2lnbmVkIGludCBhcmdzWzEyXTsKKwl9IGFyZ3M7CisJdmFfbGlzdCBsaXN0OworCisJYXJncy5zZXJ2aWNlID0gc2VydmljZTsKKwlhcmdzLm5hcmdzID0gbmFyZ3M7CisJYXJncy5ucmV0ID0gbnJldDsKKworCXZhX3N0YXJ0KGxpc3QsIHJldHMpOworCWZvciAoaSA9IDA7IGkgPCBuYXJnczsgaSsrKQorCQlhcmdzLmFyZ3NbaV0gPSB2YV9hcmcobGlzdCwgdW5zaWduZWQgaW50KTsKKwl2YV9lbmQobGlzdCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJldDsgaSsrKQorCQlhcmdzLmFyZ3NbbmFyZ3MraV0gPSAwOworCisJaWYgKHByb20oJmFyZ3MpIDwgMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHJldHMgIT0gKHZvaWQgKikgMCkKKwkJZm9yIChpID0gMTsgaSA8IG5yZXQ7ICsraSkKKwkJCXJldHNbaS0xXSA9IGFyZ3MuYXJnc1tuYXJncytpXTsKKworCXJldHVybiAobnJldCA+IDApPyBhcmdzLmFyZ3NbbmFyZ3NdOiAwOworfQorCisvKgorICogT2xkZXIgT0YncyByZXF1aXJlIHRoYXQgd2hlbiBjbGFpbWluZyBhIHNwZWNpZmljIHJhbmdlIG9mIGFkZHJlc3NlcywKKyAqIHdlIGNsYWltIHRoZSBwaHlzaWNhbCBzcGFjZSBpbiB0aGUgL21lbW9yeSBub2RlIGFuZCB0aGUgdmlydHVhbAorICogc3BhY2UgaW4gdGhlIGNob3NlbiBtbXUgbm9kZSwgYW5kIHRoZW4gZG8gYSBtYXAgb3BlcmF0aW9uIHRvCisgKiBtYXAgdmlydHVhbCB0byBwaHlzaWNhbC4KKyAqLworc3RhdGljIGludCBuZWVkX21hcCA9IC0xOworc3RhdGljIGloYW5kbGUgY2hvc2VuX21tdTsKK3N0YXRpYyBwaGFuZGxlIG1lbW9yeTsKKworLyogcmV0dXJucyB0cnVlIGlmIHMyIGlzIGEgcHJlZml4IG9mIHMxICovCitzdGF0aWMgaW50IHN0cmluZ19tYXRjaChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJZm9yICg7ICpzMjsgKytzMikKKwkJaWYgKCpzMSsrICE9ICpzMikKKwkJCXJldHVybiAwOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNoZWNrX29mX3ZlcnNpb24odm9pZCkKK3sKKwlwaGFuZGxlIG9wcm9tLCBjaG9zZW47CisJY2hhciB2ZXJzaW9uWzY0XTsKKworCW9wcm9tID0gZmluZGRldmljZSgiL29wZW5wcm9tIik7CisJaWYgKG9wcm9tID09IChwaGFuZGxlKSAtMSkKKwkJcmV0dXJuIDA7CisJaWYgKGdldHByb3Aob3Byb20sICJtb2RlbCIsIHZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSkgPD0gMCkKKwkJcmV0dXJuIDA7CisJdmVyc2lvbltzaXplb2YodmVyc2lvbiktMV0gPSAwOworCXByaW50ZigiT0YgdmVyc2lvbiA9ICclcydcclxuIiwgdmVyc2lvbik7CisJaWYgKCFzdHJpbmdfbWF0Y2godmVyc2lvbiwgIk9wZW4gRmlybXdhcmUsIDEuIikKKwkgICAgJiYgIXN0cmluZ19tYXRjaCh2ZXJzaW9uLCAiRmlybVdvcmtzLDMuIikpCisJCXJldHVybiAwOworCWNob3NlbiA9IGZpbmRkZXZpY2UoIi9jaG9zZW4iKTsKKwlpZiAoY2hvc2VuID09IChwaGFuZGxlKSAtMSkgeworCQljaG9zZW4gPSBmaW5kZGV2aWNlKCIvY2hvc2VuQDAiKTsKKwkJaWYgKGNob3NlbiA9PSAocGhhbmRsZSkgLTEpIHsKKwkJCXByaW50Zigibm8gY2hvc2VuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCWlmIChnZXRwcm9wKGNob3NlbiwgIm1tdSIsICZjaG9zZW5fbW11LCBzaXplb2YoY2hvc2VuX21tdSkpIDw9IDApIHsKKwkJcHJpbnRmKCJubyBtbXVcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJbWVtb3J5ID0gKGloYW5kbGUpIGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsICIvbWVtb3J5Iik7CisJaWYgKG1lbW9yeSA9PSAoaWhhbmRsZSkgLTEpIHsKKwkJbWVtb3J5ID0gKGloYW5kbGUpIGNhbGxfcHJvbSgib3BlbiIsIDEsIDEsICIvbWVtb3J5QDAiKTsKKwkJaWYgKG1lbW9yeSA9PSAoaWhhbmRsZSkgLTEpIHsKKwkJCXByaW50Zigibm8gbWVtb3J5IG5vZGVcbiIpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcHJpbnRmKCJvbGQgT0YgZGV0ZWN0ZWRcclxuIik7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkICpjbGFpbSh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCByZXN1bHQ7CisKKwlpZiAobmVlZF9tYXAgPCAwKQorCQluZWVkX21hcCA9IGNoZWNrX29mX3ZlcnNpb24oKTsKKwlpZiAoYWxpZ24gfHwgIW5lZWRfbWFwKQorCQlyZXR1cm4gKHZvaWQgKikgY2FsbF9wcm9tKCJjbGFpbSIsIDMsIDEsIHZpcnQsIHNpemUsIGFsaWduKTsKKworCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwgImNsYWltIiwgbWVtb3J5LAorCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwlpZiAocmV0ICE9IDAgfHwgcmVzdWx0ID09IC0xKQorCQlyZXR1cm4gKHZvaWQgKikgLTE7CisJcmV0ID0gY2FsbF9wcm9tX3JldCgiY2FsbC1tZXRob2QiLCA1LCAyLCAmcmVzdWx0LCAiY2xhaW0iLCBjaG9zZW5fbW11LAorCQkJICAgIGFsaWduLCBzaXplLCB2aXJ0KTsKKwkvKiAweDEyID09IGNvaGVyZW50ICsgcmVhZC93cml0ZSAqLworCXJldCA9IGNhbGxfcHJvbSgiY2FsbC1tZXRob2QiLCA2LCAxLCAibWFwIiwgY2hvc2VuX21tdSwKKwkJCTB4MTIsIHNpemUsIHZpcnQsIHZpcnQpOworCXJldHVybiAodm9pZCAqKSB2aXJ0OworfQorCitzdGF0aWMgdm9pZCAqb2ZfdHJ5X2NsYWltKHUzMiBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IDA7CisJc3RhdGljIHU4IGZpcnN0X3RpbWUgPSAxOworCisJaWYgKGZpcnN0X3RpbWUpIHsKKwkJY2xhaW1fYmFzZSA9IF9BTElHTl9VUCgodW5zaWduZWQgbG9uZylfZW5kLCBPTkVfTUIpOworCQlmaXJzdF90aW1lID0gMDsKKwl9CisKKwlmb3IoOyBjbGFpbV9iYXNlIDwgUkFNX0VORDsgY2xhaW1fYmFzZSArPSBPTkVfTUIpIHsKKyNpZmRlZiBERUJVRworCQlwcmludGYoIiAgICB0cnlpbmc6IDB4JTA4bHhcblxyIiwgY2xhaW1fYmFzZSk7CisjZW5kaWYKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKWNsYWltKGNsYWltX2Jhc2UsIHNpemUsIDApOworCQlpZiAoKHZvaWQgKilhZGRyICE9ICh2b2lkICopLTEpCisJCQlicmVhazsKKwl9CisJaWYgKGFkZHIgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisJY2xhaW1fYmFzZSA9IFBBR0VfQUxJR04oY2xhaW1fYmFzZSArIHNpemUpOworCXJldHVybiAodm9pZCAqKWFkZHI7Cit9CisKK3N0YXRpYyB2b2lkIG9mX2ltYWdlX2hkcihjb25zdCB2b2lkICpoZHIpCit7CisJY29uc3QgRWxmNjRfRWhkciAqZWxmNjQgPSBoZHI7CisKKwlpZiAoZWxmNjQtPmVfaWRlbnRbRUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpIHsKKwkJLyoKKwkJICogTWFpbnRhaW4gYSAibWFnaWMiIG1pbmltdW0gYWRkcmVzcy4gVGhpcyBrZWVwcyBzb21lIG9sZGVyCisJCSAqIGZpcm13YXJlIHBsYXRmb3JtcyBydW5uaW5nLgorCQkgKi8KKwkJaWYgKGNsYWltX2Jhc2UgPCBQUk9HX1NUQVJUKQorCQkJY2xhaW1fYmFzZSA9IFBST0dfU1RBUlQ7CisJfQorfQorCitzdGF0aWMgdm9pZCBvZl9leGl0KHZvaWQpCit7CisJY2FsbF9wcm9tKCJleGl0IiwgMCwgMCk7Cit9CisKKy8qCisgKiBPRiBkZXZpY2UgdHJlZSByb3V0aW5lcworICovCitzdGF0aWMgdm9pZCAqb2ZfZmluZGRldmljZShjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAocGhhbmRsZSkgY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQgb2ZfZ2V0cHJvcChjb25zdCB2b2lkICpwaGFuZGxlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWYsCisJCWNvbnN0IGludCBidWZsZW4pCit7CisJcmV0dXJuIGNhbGxfcHJvbSgiZ2V0cHJvcCIsIDQsIDEsIHBoYW5kbGUsIG5hbWUsIGJ1ZiwgYnVmbGVuKTsKK30KKworc3RhdGljIGludCBvZl9zZXRwcm9wKGNvbnN0IHZvaWQgKnBoYW5kbGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZiwKKwkJY29uc3QgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gY2FsbF9wcm9tKCJzZXRwcm9wIiwgNCwgMSwgcGhhbmRsZSwgbmFtZSwgYnVmLCBidWZsZW4pOworfQorCisvKgorICogT0YgY29uc29sZSByb3V0aW5lcworICovCitzdGF0aWMgdm9pZCAqb2Zfc3Rkb3V0X2hhbmRsZTsKKworc3RhdGljIGludCBvZl9jb25zb2xlX29wZW4odm9pZCkKK3sKKwl2b2lkICpkZXZwOworCisJaWYgKCgoZGV2cCA9IGZpbmRkZXZpY2UoIi9jaG9zZW4iKSkgIT0gTlVMTCkKKwkJCSYmIChnZXRwcm9wKGRldnAsICJzdGRvdXQiLCAmb2Zfc3Rkb3V0X2hhbmRsZSwKKwkJCQlzaXplb2Yob2Zfc3Rkb3V0X2hhbmRsZSkpCisJCQkJPT0gc2l6ZW9mKG9mX3N0ZG91dF9oYW5kbGUpKSkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIG9mX2NvbnNvbGVfd3JpdGUoY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWNhbGxfcHJvbSgid3JpdGUiLCAzLCAxLCBvZl9zdGRvdXRfaGFuZGxlLCBidWYsIGxlbik7Cit9CisKK2ludCBwbGF0Zm9ybV9pbml0KHZvaWQgKnByb21wdHIpCit7CisJcGxhdGZvcm1fb3BzLmZpeHVwcyA9IE5VTEw7CisJcGxhdGZvcm1fb3BzLmltYWdlX2hkciA9IG9mX2ltYWdlX2hkcjsKKwlwbGF0Zm9ybV9vcHMubWFsbG9jID0gb2ZfdHJ5X2NsYWltOworCXBsYXRmb3JtX29wcy5mcmVlID0gTlVMTDsKKwlwbGF0Zm9ybV9vcHMuZXhpdCA9IG9mX2V4aXQ7CisKKwlkdF9vcHMuZmluZGRldmljZSA9IG9mX2ZpbmRkZXZpY2U7CisJZHRfb3BzLmdldHByb3AgPSBvZl9nZXRwcm9wOworCWR0X29wcy5zZXRwcm9wID0gb2Zfc2V0cHJvcDsKKwlkdF9vcHMudHJhbnNsYXRlX2FkZHIgPSBOVUxMOworCisJY29uc29sZV9vcHMub3BlbiA9IG9mX2NvbnNvbGVfb3BlbjsKKwljb25zb2xlX29wcy53cml0ZSA9IG9mX2NvbnNvbGVfd3JpdGU7CisJY29uc29sZV9vcHMuZWRpdF9jbWRsaW5lID0gTlVMTDsKKwljb25zb2xlX29wcy5jbG9zZSA9IE5VTEw7CisJY29uc29sZV9vcHMuZGF0YSA9IE5VTEw7CisKKwlwcm9tID0gKGludCAoKikodm9pZCAqKSlwcm9tcHRyOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvb3BzLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9vcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzVlYjRiYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L29wcy5oCkBAIC0wLDAgKzEsMTAwIEBACisvKgorICogR2xvYmFsIGRlZmluaXRpb24gb2YgYWxsIHRoZSBib290d3JhcHBlciBvcGVyYXRpb25zLgorICoKKyAqIEF1dGhvcjogTWFyayBBLiBHcmVlciA8bWdyZWVyQG12aXN0YS5jb20+CisgKgorICogMjAwNiAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAgVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaWZuZGVmIF9QUENfQk9PVF9PUFNfSF8KKyNkZWZpbmUgX1BQQ19CT09UX09QU19IXworCisjaW5jbHVkZSAidHlwZXMuaCIKKworI2RlZmluZQlDT01NQU5EX0xJTkVfU0laRQk1MTIKKyNkZWZpbmUJTUFYX1BBVEhfTEVOCQkyNTYKKyNkZWZpbmUJTUFYX1BST1BfTEVOCQkyNTYgLyogV2hhdCBzaG91bGQgdGhpcyBiZT8gKi8KKworLyogUGxhdGZvcm0gc3BlY2lmaWMgb3BlcmF0aW9ucyAqLworc3RydWN0IHBsYXRmb3JtX29wcyB7CisJdm9pZAkoKmZpeHVwcykodm9pZCk7CisJdm9pZAkoKmltYWdlX2hkcikoY29uc3Qgdm9pZCAqKTsKKwl2b2lkICoJKCptYWxsb2MpKHUzMiBzaXplKTsKKwl2b2lkCSgqZnJlZSkodm9pZCAqcHRyLCB1MzIgc2l6ZSk7CisJdm9pZAkoKmV4aXQpKHZvaWQpOworfTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fb3BzIHBsYXRmb3JtX29wczsKKworLyogRGV2aWNlIFRyZWUgb3BlcmF0aW9ucyAqLworc3RydWN0IGR0X29wcyB7CisJdm9pZCAqCSgqZmluZGRldmljZSkoY29uc3QgY2hhciAqbmFtZSk7CisJaW50CSgqZ2V0cHJvcCkoY29uc3Qgdm9pZCAqbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmLAorCQkJY29uc3QgaW50IGJ1Zmxlbik7CisJaW50CSgqc2V0cHJvcCkoY29uc3Qgdm9pZCAqbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCWNvbnN0IHZvaWQgKmJ1ZiwgY29uc3QgaW50IGJ1Zmxlbik7CisJdTY0CSgqdHJhbnNsYXRlX2FkZHIpKGNvbnN0IGNoYXIgKnBhdGgsIGNvbnN0IHUzMiAqaW5fYWRkciwKKwkJCWNvbnN0IHUzMiBhZGRyX2xlbik7CisJdW5zaWduZWQgbG9uZyAoKmZ0X2FkZHIpKHZvaWQpOworfTsKK2V4dGVybiBzdHJ1Y3QgZHRfb3BzIGR0X29wczsKKworLyogQ29uc29sZSBvcGVyYXRpb25zICovCitzdHJ1Y3QgY29uc29sZV9vcHMgeworCWludAkoKm9wZW4pKHZvaWQpOworCXZvaWQJKCp3cml0ZSkoY2hhciAqYnVmLCBpbnQgbGVuKTsKKwl2b2lkCSgqZWRpdF9jbWRsaW5lKShjaGFyICpidWYsIGludCBsZW4pOworCXZvaWQJKCpjbG9zZSkodm9pZCk7CisJdm9pZAkqZGF0YTsKK307CitleHRlcm4gc3RydWN0IGNvbnNvbGVfb3BzIGNvbnNvbGVfb3BzOworCisvKiBTZXJpYWwgY29uc29sZSBvcGVyYXRpb25zICovCitzdHJ1Y3Qgc2VyaWFsX2NvbnNvbGVfZGF0YSB7CisJaW50CQkoKm9wZW4pKHZvaWQpOworCXZvaWQJCSgqcHV0YykodW5zaWduZWQgY2hhciBjKTsKKwl1bnNpZ25lZCBjaGFyCSgqZ2V0Yykodm9pZCk7CisJdTgJCSgqdHN0Yykodm9pZCk7CisJdm9pZAkJKCpjbG9zZSkodm9pZCk7Cit9OworCitleHRlcm4gaW50IHBsYXRmb3JtX2luaXQodm9pZCAqcHJvbXB0cik7CitleHRlcm4gdm9pZCBzaW1wbGVfYWxsb2NfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGZ0X2luaXQodm9pZCAqZHRfYmxvYik7CitleHRlcm4gaW50IHNlcmlhbF9jb25zb2xlX2luaXQodm9pZCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZmluZGRldmljZShjb25zdCBjaGFyICpuYW1lKQoreworCXJldHVybiAoZHRfb3BzLmZpbmRkZXZpY2UpID8gZHRfb3BzLmZpbmRkZXZpY2UobmFtZSkgOiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIGludCBnZXRwcm9wKHZvaWQgKmRldnAsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gKGR0X29wcy5nZXRwcm9wKSA/IGR0X29wcy5nZXRwcm9wKGRldnAsIG5hbWUsIGJ1ZiwgYnVmbGVuKSA6IC0xOworfQorCitzdGF0aWMgaW5saW5lIGludCBzZXRwcm9wKHZvaWQgKmRldnAsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlyZXR1cm4gKGR0X29wcy5zZXRwcm9wKSA/IGR0X29wcy5zZXRwcm9wKGRldnAsIG5hbWUsIGJ1ZiwgYnVmbGVuKSA6IC0xOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKm1hbGxvYyh1MzIgc2l6ZSkKK3sKKwlyZXR1cm4gKHBsYXRmb3JtX29wcy5tYWxsb2MpID8gcGxhdGZvcm1fb3BzLm1hbGxvYyhzaXplKSA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlKHZvaWQgKnB0ciwgdTMyIHNpemUpCit7CisJaWYgKHBsYXRmb3JtX29wcy5mcmVlKQorCQlwbGF0Zm9ybV9vcHMuZnJlZShwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdCh2b2lkKQoreworCWlmIChwbGF0Zm9ybV9vcHMuZXhpdCkKKwkJcGxhdGZvcm1fb3BzLmV4aXQoKTsKKwlmb3IoOzspOworfQorCisjZW5kaWYgLyogX1BQQ19CT09UX09QU19IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvcHJvbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTAwNTc3Li4wMDAwMDAwCi0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3Byb20uYworKysgL2Rldi9udWxsCkBAIC0xLDE2NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSBQYXVsIE1hY2tlcnJhcyAxOTk3LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KLSAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNpbmNsdWRlICJzdHJpbmcuaCIKLSNpbmNsdWRlICJzdGRpby5oIgotI2luY2x1ZGUgInByb20uaCIKLQotaW50ICgqcHJvbSkodm9pZCAqKTsKLXBoYW5kbGUgY2hvc2VuX2hhbmRsZTsKLWloYW5kbGUgc3Rkb3V0OwotCi1pbnQgY2FsbF9wcm9tKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGludCBuYXJncywgaW50IG5yZXQsIC4uLikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcHJvbV9hcmdzIHsKLQkJY29uc3QgY2hhciAqc2VydmljZTsKLQkJaW50IG5hcmdzOwotCQlpbnQgbnJldDsKLQkJdW5zaWduZWQgaW50IGFyZ3NbMTJdOwotCX0gYXJnczsKLQl2YV9saXN0IGxpc3Q7Ci0KLQlhcmdzLnNlcnZpY2UgPSBzZXJ2aWNlOwotCWFyZ3MubmFyZ3MgPSBuYXJnczsKLQlhcmdzLm5yZXQgPSBucmV0OwotCi0JdmFfc3RhcnQobGlzdCwgbnJldCk7Ci0JZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCi0JCWFyZ3MuYXJnc1tpXSA9IHZhX2FyZyhsaXN0LCB1bnNpZ25lZCBpbnQpOwotCXZhX2VuZChsaXN0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBucmV0OyBpKyspCi0JCWFyZ3MuYXJnc1tuYXJncytpXSA9IDA7Ci0KLQlpZiAocHJvbSgmYXJncykgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlyZXR1cm4gKG5yZXQgPiAwKT8gYXJncy5hcmdzW25hcmdzXTogMDsKLX0KLQotaW50IGNhbGxfcHJvbV9yZXQoY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwKLQkJICB1bnNpZ25lZCBpbnQgKnJldHMsIC4uLikKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgcHJvbV9hcmdzIHsKLQkJY29uc3QgY2hhciAqc2VydmljZTsKLQkJaW50IG5hcmdzOwotCQlpbnQgbnJldDsKLQkJdW5zaWduZWQgaW50IGFyZ3NbMTJdOwotCX0gYXJnczsKLQl2YV9saXN0IGxpc3Q7Ci0KLQlhcmdzLnNlcnZpY2UgPSBzZXJ2aWNlOwotCWFyZ3MubmFyZ3MgPSBuYXJnczsKLQlhcmdzLm5yZXQgPSBucmV0OwotCi0JdmFfc3RhcnQobGlzdCwgcmV0cyk7Ci0JZm9yIChpID0gMDsgaSA8IG5hcmdzOyBpKyspCi0JCWFyZ3MuYXJnc1tpXSA9IHZhX2FyZyhsaXN0LCB1bnNpZ25lZCBpbnQpOwotCXZhX2VuZChsaXN0KTsKLQotCWZvciAoaSA9IDA7IGkgPCBucmV0OyBpKyspCi0JCWFyZ3MuYXJnc1tuYXJncytpXSA9IDA7Ci0KLQlpZiAocHJvbSgmYXJncykgPCAwKQotCQlyZXR1cm4gLTE7Ci0KLQlpZiAocmV0cyAhPSAodm9pZCAqKSAwKQotCQlmb3IgKGkgPSAxOyBpIDwgbnJldDsgKytpKQotCQkJcmV0c1tpLTFdID0gYXJncy5hcmdzW25hcmdzK2ldOwotCi0JcmV0dXJuIChucmV0ID4gMCk/IGFyZ3MuYXJnc1tuYXJnc106IDA7Ci19Ci0KLWludCB3cml0ZSh2b2lkICpoYW5kbGUsIHZvaWQgKnB0ciwgaW50IG5iKQotewotCXJldHVybiBjYWxsX3Byb20oIndyaXRlIiwgMywgMSwgaGFuZGxlLCBwdHIsIG5iKTsKLX0KLQotLyoKLSAqIE9sZGVyIE9GJ3MgcmVxdWlyZSB0aGF0IHdoZW4gY2xhaW1pbmcgYSBzcGVjaWZpYyByYW5nZSBvZiBhZGRyZXNzZXMsCi0gKiB3ZSBjbGFpbSB0aGUgcGh5c2ljYWwgc3BhY2UgaW4gdGhlIC9tZW1vcnkgbm9kZSBhbmQgdGhlIHZpcnR1YWwKLSAqIHNwYWNlIGluIHRoZSBjaG9zZW4gbW11IG5vZGUsIGFuZCB0aGVuIGRvIGEgbWFwIG9wZXJhdGlvbiB0bwotICogbWFwIHZpcnR1YWwgdG8gcGh5c2ljYWwuCi0gKi8KLXN0YXRpYyBpbnQgbmVlZF9tYXAgPSAtMTsKLXN0YXRpYyBpaGFuZGxlIGNob3Nlbl9tbXU7Ci1zdGF0aWMgcGhhbmRsZSBtZW1vcnk7Ci0KLS8qIHJldHVybnMgdHJ1ZSBpZiBzMiBpcyBhIHByZWZpeCBvZiBzMSAqLwotc3RhdGljIGludCBzdHJpbmdfbWF0Y2goY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQotewotCWZvciAoOyAqczI7ICsrczIpCi0JCWlmICgqczErKyAhPSAqczIpCi0JCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIGludCBjaGVja19vZl92ZXJzaW9uKHZvaWQpCi17Ci0JcGhhbmRsZSBvcHJvbSwgY2hvc2VuOwotCWNoYXIgdmVyc2lvbls2NF07Ci0KLQlvcHJvbSA9IGZpbmRkZXZpY2UoIi9vcGVucHJvbSIpOwotCWlmIChvcHJvbSA9PSAocGhhbmRsZSkgLTEpCi0JCXJldHVybiAwOwotCWlmIChnZXRwcm9wKG9wcm9tLCAibW9kZWwiLCB2ZXJzaW9uLCBzaXplb2YodmVyc2lvbikpIDw9IDApCi0JCXJldHVybiAwOwotCXZlcnNpb25bc2l6ZW9mKHZlcnNpb24pLTFdID0gMDsKLQlwcmludGYoIk9GIHZlcnNpb24gPSAnJXMnXHJcbiIsIHZlcnNpb24pOwotCWlmICghc3RyaW5nX21hdGNoKHZlcnNpb24sICJPcGVuIEZpcm13YXJlLCAxLiIpCi0JICAgICYmICFzdHJpbmdfbWF0Y2godmVyc2lvbiwgIkZpcm1Xb3JrcywzLiIpKQotCQlyZXR1cm4gMDsKLQljaG9zZW4gPSBmaW5kZGV2aWNlKCIvY2hvc2VuIik7Ci0JaWYgKGNob3NlbiA9PSAocGhhbmRsZSkgLTEpIHsKLQkJY2hvc2VuID0gZmluZGRldmljZSgiL2Nob3NlbkAwIik7Ci0JCWlmIChjaG9zZW4gPT0gKHBoYW5kbGUpIC0xKSB7Ci0JCQlwcmludGYoIm5vIGNob3NlblxuIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlpZiAoZ2V0cHJvcChjaG9zZW4sICJtbXUiLCAmY2hvc2VuX21tdSwgc2l6ZW9mKGNob3Nlbl9tbXUpKSA8PSAwKSB7Ci0JCXByaW50Zigibm8gbW11XG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCW1lbW9yeSA9IChpaGFuZGxlKSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCAiL21lbW9yeSIpOwotCWlmIChtZW1vcnkgPT0gKGloYW5kbGUpIC0xKSB7Ci0JCW1lbW9yeSA9IChpaGFuZGxlKSBjYWxsX3Byb20oIm9wZW4iLCAxLCAxLCAiL21lbW9yeUAwIik7Ci0JCWlmIChtZW1vcnkgPT0gKGloYW5kbGUpIC0xKSB7Ci0JCQlwcmludGYoIm5vIG1lbW9yeSBub2RlXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXByaW50Zigib2xkIE9GIGRldGVjdGVkXHJcbiIpOwotCXJldHVybiAxOwotfQotCi12b2lkICpjbGFpbSh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbikKLXsKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGludCByZXN1bHQ7Ci0KLQlpZiAobmVlZF9tYXAgPCAwKQotCQluZWVkX21hcCA9IGNoZWNrX29mX3ZlcnNpb24oKTsKLQlpZiAoYWxpZ24gfHwgIW5lZWRfbWFwKQotCQlyZXR1cm4gKHZvaWQgKikgY2FsbF9wcm9tKCJjbGFpbSIsIDMsIDEsIHZpcnQsIHNpemUsIGFsaWduKTsKLQkKLQlyZXQgPSBjYWxsX3Byb21fcmV0KCJjYWxsLW1ldGhvZCIsIDUsIDIsICZyZXN1bHQsICJjbGFpbSIsIG1lbW9yeSwKLQkJCSAgICBhbGlnbiwgc2l6ZSwgdmlydCk7Ci0JaWYgKHJldCAhPSAwIHx8IHJlc3VsdCA9PSAtMSkKLQkJcmV0dXJuICh2b2lkICopIC0xOwotCXJldCA9IGNhbGxfcHJvbV9yZXQoImNhbGwtbWV0aG9kIiwgNSwgMiwgJnJlc3VsdCwgImNsYWltIiwgY2hvc2VuX21tdSwKLQkJCSAgICBhbGlnbiwgc2l6ZSwgdmlydCk7Ci0JLyogMHgxMiA9PSBjb2hlcmVudCArIHJlYWQvd3JpdGUgKi8KLQlyZXQgPSBjYWxsX3Byb20oImNhbGwtbWV0aG9kIiwgNiwgMSwgIm1hcCIsIGNob3Nlbl9tbXUsCi0JCQkweDEyLCBzaXplLCB2aXJ0LCB2aXJ0KTsKLQlyZXR1cm4gKHZvaWQgKikgdmlydDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3Byb20uaCBiL2FyY2gvcG93ZXJwYy9ib290L3Byb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTU3YjE4NC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9wcm9tLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0jaWZuZGVmIF9QUENfQk9PVF9QUk9NX0hfCi0jZGVmaW5lIF9QUENfQk9PVF9QUk9NX0hfCi0KLXR5cGVkZWYgdm9pZCAqcGhhbmRsZTsKLXR5cGVkZWYgdm9pZCAqaWhhbmRsZTsKLQotZXh0ZXJuIGludCAoKnByb20pICh2b2lkICopOwotZXh0ZXJuIHBoYW5kbGUgY2hvc2VuX2hhbmRsZTsKLWV4dGVybiBpaGFuZGxlIHN0ZG91dDsKLQotaW50CWNhbGxfcHJvbShjb25zdCBjaGFyICpzZXJ2aWNlLCBpbnQgbmFyZ3MsIGludCBucmV0LCAuLi4pOwotaW50CWNhbGxfcHJvbV9yZXQoY29uc3QgY2hhciAqc2VydmljZSwgaW50IG5hcmdzLCBpbnQgbnJldCwKLQkJICAgICAgdW5zaWduZWQgaW50ICpyZXRzLCAuLi4pOwotCi1leHRlcm4gaW50IHdyaXRlKHZvaWQgKmhhbmRsZSwgdm9pZCAqcHRyLCBpbnQgbmIpOwotZXh0ZXJuIHZvaWQgKmNsYWltKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsbik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBleGl0KHZvaWQpCi17Ci0JY2FsbF9wcm9tKCJleGl0IiwgMCwgMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgcGhhbmRsZSBmaW5kZGV2aWNlKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0JcmV0dXJuIChwaGFuZGxlKSBjYWxsX3Byb20oImZpbmRkZXZpY2UiLCAxLCAxLCBuYW1lKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ2V0cHJvcCh2b2lkICpwaGFuZGxlLCBjb25zdCBjaGFyICpuYW1lLAotCQkJICB2b2lkICpidWYsIGludCBidWZsZW4pCi17Ci0JcmV0dXJuIGNhbGxfcHJvbSgiZ2V0cHJvcCIsIDQsIDEsIHBoYW5kbGUsIG5hbWUsIGJ1ZiwgYnVmbGVuKTsKLX0KLQotCi1zdGF0aWMgaW5saW5lIGludCBzZXRwcm9wKHZvaWQgKnBoYW5kbGUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgIHZvaWQgKmJ1ZiwgaW50IGJ1ZmxlbikKLXsKLQlyZXR1cm4gY2FsbF9wcm9tKCJzZXRwcm9wIiwgNCwgMSwgcGhhbmRsZSwgbmFtZSwgYnVmLCBidWZsZW4pOwotfQotCi0jZW5kaWYJCQkJLyogX1BQQ19CT09UX1BST01fSF8gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3N0ZGlvLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9zdGRpby5jCmluZGV4IGI1YWE1MjIuLjZkNWY2MzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3N0ZGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc3RkaW8uYwpAQCAtMTAsNyArMTAsNyBAQAogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2luY2x1ZGUgInN0cmluZy5oIgogI2luY2x1ZGUgInN0ZGlvLmgiCi0jaW5jbHVkZSAicHJvbS5oIgorI2luY2x1ZGUgIm9wcy5oIgogCiBzaXplX3Qgc3Rybmxlbihjb25zdCBjaGFyICogcywgc2l6ZV90IGNvdW50KQogewpAQCAtMzIwLDYgKzMyMCw2IEBACiAJdmFfc3RhcnQoYXJncywgZm10KTsKIAluID0gdnNwcmludGYoc3ByaW50X2J1ZiwgZm10LCBhcmdzKTsKIAl2YV9lbmQoYXJncyk7Ci0Jd3JpdGUoc3Rkb3V0LCBzcHJpbnRfYnVmLCBuKTsKKwljb25zb2xlX29wcy53cml0ZShzcHJpbnRfYnVmLCBuKTsKIAlyZXR1cm4gbjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L3N0ZGlvLmggYi9hcmNoL3Bvd2VycGMvYm9vdC9zdGRpby5oCmluZGV4IGViOWUxNmMuLjczYjhhOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L3N0ZGlvLmgKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3Qvc3RkaW8uaApAQCAtMSw4ICsxLDE2IEBACiAjaWZuZGVmIF9QUENfQk9PVF9TVERJT19IXwogI2RlZmluZSBfUFBDX0JPT1RfU1RESU9fSF8KIAorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCisjZGVmaW5lCUVOT01FTQkJMTIJLyogT3V0IG9mIE1lbW9yeSAqLworI2RlZmluZQlFSU5WQUwJCTIyCS8qIEludmFsaWQgYXJndW1lbnQgKi8KKyNkZWZpbmUgRU5PU1BDCQkyOAkvKiBObyBzcGFjZSBsZWZ0IG9uIGRldmljZSAqLworCiBleHRlcm4gaW50IHByaW50Zihjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKKyNkZWZpbmUgZnByaW50ZihmbXQsIGFyZ3MuLi4pCXByaW50ZihhcmdzKQorCiBleHRlcm4gaW50IHNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKIGV4dGVybiBpbnQgdnNwcmludGYoY2hhciAqYnVmLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXJncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC90eXBlcy5oIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWQyNmU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvdHlwZXMuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9UWVBFU19IXworI2RlZmluZSBfVFlQRVNfSF8KKworI2RlZmluZSBBUlJBWV9TSVpFKHgpIChzaXplb2YoeCkgLyBzaXplb2YoKHgpWzBdKSkKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyCQl1ODsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQJCXUxNjsKK3R5cGVkZWYgdW5zaWduZWQgaW50CQl1MzI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZwl1NjQ7CisKKyNkZWZpbmUgbWluKHgseSkgKHsgXAorCXR5cGVvZih4KSBfeCA9ICh4KTsJXAorCXR5cGVvZih5KSBfeSA9ICh5KTsJXAorCSh2b2lkKSAoJl94ID09ICZfeSk7CVwKKwlfeCA8IF95ID8gX3ggOiBfeTsgfSkKKworI2RlZmluZSBtYXgoeCx5KSAoeyBcCisJdHlwZW9mKHgpIF94ID0gKHgpOwlcCisJdHlwZW9mKHkpIF95ID0gKHkpOwlcCisJKHZvaWQpICgmX3ggPT0gJl95KTsJXAorCV94ID4gX3kgPyBfeCA6IF95OyB9KQorCisjZW5kaWYgLyogX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9jZWxsX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCmluZGV4IGUwMjhhMmUuLjZmZDllN2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NlbGxfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmM2Ci0jIFRodSBKdW4gMjIgMTU6Mjg6MzYgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgorIyBTdW4gU2VwIDEwIDEwOjIwOjMyIDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX1BQQ19NRVJHRT15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQpAQCAtMzUsNiArMzYsNyBAQAogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtNTIsNiArNTQsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKQEAgLTY5LDEwICs3MiwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExOSw3ICsxMjQsNyBAQAogQ09ORklHX1BQQ19DRUxMPXkKIENPTkZJR19QUENfQ0VMTF9OQVRJVkU9eQogQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERT15Ci1DT05GSUdfUFBDX1NZU1RFTVNJTT15CitDT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQogIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX1JUQVM9eQogIyBDT05GSUdfUlRBU19FUlJPUl9MT0dHSU5HIGlzIG5vdCBzZXQKQEAgLTEzMCw2ICsxMzUsNyBAQAogIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CiAKICMKICMgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIG9wdGlvbnMKQEAgLTE1NCw2ICsxNjAsNyBAQAogQ09ORklHX0JJTkZNVF9NSVNDPW0KIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiAjIENPTkZJR19JT01NVV9WTUVSR0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQpAQCAtMTczLDYgKzE4MCw3IEBACiBDT05GSUdfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKIENPTkZJR19NSUdSQVRJT049eQorQ09ORklHX1JFU09VUkNFU182NEJJVD15CiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQ9eQogQ09ORklHX0FSQ0hfTUVNT1JZX1BST0JFPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldApAQCAtMTg3LDYgKzE5NSw3IEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CkBAIC0yMzUsNiArMjQ0LDggQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI1Miw3ICsyNjMsMTAgQEAKIENPTkZJR19JTkVUNl9JUENPTVA9bQogQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUNl9UVU5ORUw9bQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lQVjZfVFVOTkVMPW0KKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTI3Nyw2ICsyOTEsNyBAQAogQ09ORklHX0lQX05GX0FNQU5EQT1tCiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9RVUVVRT1tCiAKICMKQEAgLTMzNiw2ICszNTEsNyBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTM3Miw2ICszODgsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC00NDksOCArNDY2LDcgQEAKIENPTkZJR19NRF9SQUlEMD1tCiBDT05GSUdfTURfUkFJRDE9bQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ1IGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT1tCkBAIC01NDQsNiArNTYwLDcgQEAKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTYyMCw2ICs2MzcsNyBAQAogQ09ORklHX1ZUPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEPXkKICMgQ09ORklHX0NPTVBVVE9ORSBpcyBub3Qgc2V0CiAjIENPTkZJR19ST0NLRVRQT1JUIGlzIG5vdCBzZXQKQEAgLTY4MCw2ICs2OTgsNyBAQAogIwogIyBDT05GSUdfUENJUENXQVRDSERPRyBpcyBub3Qgc2V0CiAjIENPTkZJR19XRFRQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTcyNSw2ICs3NDQsNyBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CkBAIC03NjEsNyArNzgxLDYgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtNzg3LDYgKzgwNiw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzk0LDYgKzgxNCw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04NDEsNiArODYyLDcgQEAKIENPTkZJR19JTkZJTklCQU5EPXkKIENPTkZJR19JTkZJTklCQU5EX1VTRVJfTUFEPW0KIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTPW0KK0NPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0FfREVCVUc9eQogQ09ORklHX0lORklOSUJBTkRfSVBPSUI9bQpAQCAtODU3LDYgKzg3OSwxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg3Nyw2ICs5MTIsNyBAQAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtMTAzNCw2ICsxMDcwLDkgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPW0KIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTEwNDYsMTQgKzEwODUsMTkgQEAKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2NocnAzMl9kZWZjb25maWcKaW5kZXggMGZhMDEwYS4uYmJmMmI1ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvY2hycDMyX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9jaHJwMzJfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKLSMgTW9uIEp1bCAgMyAxMjowODo0MSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2CisjIFN1biBTZXAgMTAgMTA6MjI6NTQgMjAwNgogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKQEAgLTQyLDYgKzQzLDcgQEAKIENPTkZJR19QUENfU1REX01NVV8zMj15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC01OSw2ICs2MSw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogQ09ORklHX0lLQ09ORklHPXkKQEAgLTc2LDEwICs3OSwxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTEyNiw3ICsxMzEsNyBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKLUNPTkZJR19NUElDPXkKKyMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUlRBUz15CiAjIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkcgaXMgbm90IHNldAogQ09ORklHX1JUQVNfUFJPQz15CkBAIC0xMzYsNiArMTQxLDcgQEAKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBVSBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTE1MSw2ICsxNTcsNyBAQAogQ09ORklHX1BSRUVNUFRfQktMPXkKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CkBAIC0xNjIsNiArMTY5LDcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldApAQCAtMTczLDYgKzE4MSw3IEBACiAjCiBDT05GSUdfSVNBPXkKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0k4MjU5PXkKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKIENPTkZJR19QQ0k9eQpAQCAtMzY2LDYgKzM3NSw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC02MjIsNiArNjMyLDcgQEAKICMgQ09ORklHX1RMQU4gaXMgbm90IHNldAogQ09ORklHX1ZJQV9SSElORT15CiAjIENPTkZJR19WSUFfUkhJTkVfTU1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkVfTkFQSSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKQEAgLTc1MSw2ICs3NjIsNyBAQAogQ09ORklHX1ZUPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC03ODMsNiArNzk1LDcgQEAKICMgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfTlZSQU09eQogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKQEAgLTg5NCwxMiArOTA3LDEyIEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogQ09ORklHX0ZCX01BQ01PREVTPXkKLUNPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIENPTkZJR19GQl9USUxFQkxJVFRJTkc9eQpAQCAtMTA3OSw3ICsxMDkyLDcgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldApAQCAtMTMwNSw2ICsxMzE4LDcgQEAKIENPTkZJR19aTElCX0RFRkxBVEU9bQogQ09ORklHX1RFWFRTRUFSQ0g9eQogQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTEzMTYsMTQgKzEzMzAsMTkgQEAKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE1CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSElHSE1FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwppbmRleCBhNDU2Mjc1Li40YjljMmVkOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvZzVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2c1X2RlZmNvbmZpZwpAQCAtMSwxNiArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQotIyBXZWQgQXByIDE5IDEzOjI0OjM3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKKyMgU3VuIFNlcCAxMCAxMDoyMjo1NSAyMDA2CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DT01QQVQ9eQpAQCAtMzMsNiArMzUsNyBAQAogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz00CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtNTAsNiArNTMsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CkBAIC02NywxMCArNzEsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTYsMTIgKzEyMiwxNSBAQAogQ09ORklHX1BQQ19QTUFDNjQ9eQogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1UzX0RBUlQ9eQotQ09ORklHX01QSUM9eQogIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAogIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfTVBJQ19CUk9LRU5fVTM9eQogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzk3MF9OQVA9eQogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15CiAjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xMzYsNiArMTQ1LDcgQEAKICMgQ09ORklHX0NQVV9GUkVRX0dPVl9DT05TRVJWQVRJVkUgaXMgbm90IHNldAogQ09ORklHX0NQVV9GUkVRX1BNQUM2ND15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTE1Myw2ICsxNjMsNyBAQAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19JT01NVV9WTUVSR0U9eQogIyBDT05GSUdfSE9UUExVR19DUFUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19LRVhFQz15CiAjIENPTkZJR19DUkFTSF9EVU1QIGlzIG5vdCBzZXQKIENPTkZJR19JUlFfQUxMX0NQVVM9eQpAQCAtMTY4LDYgKzE3OSw3IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKQEAgLTE4MCwxMCArMTkyLDEyIEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMjI3LDYgKzI0MSw4IEBACiBDT05GSUdfSU5FVF9JUENPTVA9bQogQ09ORklHX0lORVRfWEZSTV9UVU5ORUw9bQogQ09ORklHX0lORVRfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTIzOSw2ICsyNTUsNyBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjYzLDYgKzI4MCw3IEBACiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KICMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9TSVAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KIAogIwpAQCAtMzE4LDYgKzMzNiw3IEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgpAQCAtMzU1LDYgKzM3NCw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogQ09ORklHX0NEUk9NX1BLVENEVkQ9bQogQ09ORklHX0NEUk9NX1BLVENEVkRfQlVGRkVSUz04CkBAIC00MTcsNyArNDM3LDYgQEAKIENPTkZJR19CTEtfREVWX0lERV9QTUFDPXkKIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0FUQTEwMEZJUlNUPXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksgaXMgbm90IHNldAogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CkBAIC00NzgsNiArNDk3LDcgQEAKICMgQ09ORklHX1NDU0lfU0FUQV9NViBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfTlYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfUVNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1BST01JU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1NYNCBpcyBub3Qgc2V0CkBAIC00OTcsNyArNTE3LDYgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTUxNCw5ICs1MzMsNyBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KLUNPTkZJR19NRF9SQUlENT15Ci0jIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENj1tCisjIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC01NTksNyArNTc2LDYgQEAKICMKIENPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1NCUDI9bQotIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19JRUVFMTM5NF9SQVdJTz15CkBAIC01NzMsNiArNTg5LDcgQEAKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCiBDT05GSUdfQURCX1BNVT15CisjIENPTkZJR19BREJfUE1VX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfUE1BQ19TTVU9eQogQ09ORklHX1RIRVJNX1BNNzI9eQogQ09ORklHX1dJTkRGQVJNPXkKQEAgLTY0Myw2ICs2NjAsNyBAQAogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzM5LDYgKzc1Nyw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc2NCw2ICs3ODMsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTc3NCw2ICs3OTQsNyBAQAogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKIENPTkZJR19BR1A9bQorIyBDT05GSUdfQUdQX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKIENPTkZJR19BR1BfVU5JTk9SVEg9bQogIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKQEAgLTgxMyw2ICs4MzQsNyBAQAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKIENPTkZJR19JMkNfUE9XRVJNQUM9eQogIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKQEAgLTg0OSw3ICs4NzEsNiBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC04NjUsNiArODg2LDcgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTg3NSwyMiArODk3LDE5IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogQ09ORklHX0ZCX01BQ01PREVTPXkKLUNPTkZJR19GQl9GSVJNV0FSRV9FRElEPXkKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIENPTkZJR19GQl9USUxFQkxJVFRJTkc9eQogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAogQ09ORklHX0ZCX09GPXkKLSMgQ09ORklHX0ZCX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUExBVElOVU0gaXMgbm90IHNldAotIyBDT05GSUdfRkJfVkFMS1lSSUUgaXMgbm90IHNldAotIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CkBAIC05OTAsNiArMTAwOSwxOCBAQAogIyBDT05GSUdfU05EX0NNSVBDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0MjgxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQ2WFggaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfREFSTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfR0lOQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9MQVlMQTI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NT05BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSUEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VDSE8zRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9JTkRJR09JTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPREogaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VNVTEwSzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTlMxMzcwIGlzIG5vdCBzZXQKQEAgLTEwMjcsNiArMTA1OCwxNyBAQAogQ09ORklHX1NORF9QT1dFUk1BQ19BVVRPX0RSQz15CiAKICMKKyMgQXBwbGUgT25ib2FyZCBBdWRpbyBkcml2ZXIKKyMKK0NPTkZJR19TTkRfQU9BPW0KK0NPTkZJR19TTkRfQU9BX0ZBQlJJQ19MQVlPVVQ9bQorQ09ORklHX1NORF9BT0FfT05ZWD1tCitDT05GSUdfU05EX0FPQV9UQVM9bQorQ09ORklHX1NORF9BT0FfVE9PTklFPW0KK0NPTkZJR19TTkRfQU9BX1NPVU5EQlVTPW0KK0NPTkZJR19TTkRfQU9BX1NPVU5EQlVTX0kyUz1tCisKKyMKICMgVVNCIGRldmljZXMKICMKIENPTkZJR19TTkRfVVNCX0FVRElPPW0KQEAgLTEwNjAsNiArMTEwMiw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTExMTAsOSArMTE1Myw3IEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKQEAgLTExNTQsNyArMTE5NSw3IEBACiBDT05GSUdfVVNCX1NFUklBTD1tCiBDT05GSUdfVVNCX1NFUklBTF9HRU5FUklDPXkKICMgQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NFUklBTF9BTllEQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNiBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU49bQogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUPW0KQEAgLTExNjIsNiArMTIwMyw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHPW0KIENPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfRlVOU09GVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9WSVNPUj1tCiBDT05GSUdfVVNCX1NFUklBTF9JUEFRPW0KIENPTkZJR19VU0JfU0VSSUFMX0lSPW0KQEAgLTExOTEsOSArMTIzMywxMSBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1NBRkU9bQogQ09ORklHX1VTQl9TRVJJQUxfU0FGRV9QQURERUQ9eQorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX1NFUklBTF9UST1tCiBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0s9bQogQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQ9bQogQ09ORklHX1VTQl9FWlVTQj15CiAKQEAgLTEyMDcsMTAgKzEyNTEsMTIgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKQEAgLTEyMzUsNiArMTI4MSwxNCBAQAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAogCiAjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKQEAgLTEyNDksNiArMTMwMywxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTEyNzMsNyArMTM0MCw2IEBACiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19YRlNfRVhQT1JUPXkKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKQEAgLTEyODIsNiArMTM0OCw3IEBACiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19BVVRPRlNfRlM9bQpAQCAtMTM2Myw3ICsxNDMwLDkgQEAKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTQ0NCw2ICsxNTEzLDkgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfUExJU1Q9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xNDU3LDE0ICsxNTI5LDE5IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQpAQCAtMTQ3NiwxMSArMTU1Myw3IEBACiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CiBDT05GSUdfSVJRU1RBQ0tTPXkKIENPTkZJR19CT09UWF9URVhUPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9pc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCmluZGV4IGE5NWU0NTUuLmViMDg4NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL2lzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDE2ICsxLDE4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMxCi0jIFdlZCBBcHIgMTkgMTE6NDY6NDQgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgorIyBTdW4gU2VwIDEwIDEwOjIyOjU3IDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX1BQQ19NRVJHRT15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfUFBDPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0NPTVBBVD15CkBAIC0zNCw2ICszNiw3IEBACiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORz15CiBDT05GSUdfU01QPXkKIENPTkZJR19OUl9DUFVTPTMyCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtNTEsNiArNTQsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BVURJVD15CiBDT05GSUdfQVVESVRTWVNDQUxMPXkKQEAgLTY5LDEwICs3MywxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTExMywxMiArMTE5LDE3IEBACiBDT05GSUdfUFBDX0lTRVJJRVM9eQogIyBDT05GSUdfRU1CRURERUQ2eHggaXMgbm90IHNldAogIyBDT05GSUdfQVBVUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAogIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfSUJNVklPPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTVBJQyBpcyBub3Qgc2V0CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTEzNSw2ICsxNDYsNyBAQAogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19JT01NVV9WTUVSR0U9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19JUlFfQUxMX0NQVVM9eQogQ09ORklHX0xQQVJDRkc9eQogIyBDT05GSUdfTlVNQSBpcyBub3Qgc2V0CkBAIC0xNDksNiArMTYxLDcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQpAQCAtMTYwLDEwICsxNzMsMTIgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMDcsNiArMjIyLDggQEAKIENPTkZJR19JTkVUX0lQQ09NUD1tCiBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjE5LDYgKzIzNiw3IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yNDYsOSArMjY0LDExIEBACiAjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUE9MSUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCkBAIC0yNjcsNiArMjg3LDcgQEAKIENPTkZJR19JUF9ORl9BTUFOREE9bQogIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KIENPTkZJR19JUF9ORl9NQVRDSF9JUFJBTkdFPW0KQEAgLTM2MCw2ICszODEsNyBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj1tCiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTM5Niw2ICs0MTgsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKQEAgLTQ1Myw2ICs0NzYsNyBAQAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CkBAIC00NjQsNyArNDg4LDYgQEAKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKQEAgLTQ4MSw5ICs1MDQsNyBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiBDT05GSUdfTURfUkFJRDEwPW0KLUNPTkZJR19NRF9SQUlENT15Ci0jIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENj1tCisjIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC01OTYsNiArNjE3LDcgQEAKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTcwNiw2ICs3MjgsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTc0MSw3ICs3NjQsNiBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC03NTcsNiArNzc5LDcgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTc2Niw3ICs3ODksOSBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC04MDEsNiArODI2LDE0IEBACiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtODE1LDYgKzg0OCwxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTg0Myw3ICs4ODksNiBAQAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfWEZTX0ZTPW0KLUNPTkZJR19YRlNfRVhQT1JUPXkKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKQEAgLTg1Miw2ICs4OTcsNyBAQAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfQVVUT0ZTX0ZTPW0KQEAgLTkzMyw4ICs5NzksMTAgQEAKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGUz1tCiAjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTX1hBVFRSPXkKIENPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMTMsMTAgKzEwNjEsMTIgQEAKIENPTkZJR19URVhUU0VBUkNIX0tNUD1tCiBDT05GSUdfVEVYVFNFQVJDSF9CTT1tCiBDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX1BMSVNUPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydAogIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAogCiAjCkBAIC0xMDI0LDE0ICsxMDc0LDE5IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKQEAgLTEwNDIsMTEgKzEwOTcsNyBAQAogQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFPXkKICMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKIENPTkZJR19JUlFTVEFDS1M9eQotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZwppbmRleCA4MGEwZGI0Li42MmJhNjYwOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbWFwbGVfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21hcGxlX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE2LXJjNgotIyBXZWQgTWFyIDE1IDE2OjE5OjU0IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKKyMgU3VuIFNlcCAxMCAxMDoyNDo1NSAyMDA2CiAjCiBDT05GSUdfUFBDNjQ9eQogQ09ORklHXzY0QklUPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19DT01QQVQ9eQpAQCAtMjksOCArMzIsMTAgQEAKIENPTkZJR19QUENfRlBVPXkKICMgQ09ORklHX0FMVElWRUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19TVERfTU1VPXkKK0NPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HPXkKIENPTkZJR19TTVA9eQogQ09ORklHX05SX0NQVVM9MgorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTQ4LDExICs1MywxMyBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiAjIENPTkZJR19DUFVTRVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldApAQCAtNjQsMTQgKzcxLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKIENPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtODIsNyArODcsNiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15CiBDT05GSUdfS01PRD15CkBAIC05MSw2ICs5NSw3IEBACiAjCiAjIEJsb2NrIGxheWVyCiAjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMTYsMTQgKzEyMSwxOCBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogQ09ORklHX1BQQ19NQVBMRT15CiAjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lCTV9DRUxMX0JMQURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19VM19EQVJUPXkKLUNPTkZJR19NUElDPXkKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogQ09ORklHX01QSUNfQlJPS0VOX1UzPXkKICMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorQ09ORklHX1BQQ185NzBfTkFQPXkKICMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMTQwLDYgKzE0OSw3IEBACiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMwogQ09ORklHX0lPTU1VX1ZNRVJHRT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CkBAIC0xNTUsNiArMTY1LDcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NIRURfU01UIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQpAQCAtMTY3LDExICsxNzgsMTIgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15Ci1DT05GSUdfUENJX0xFR0FDWV9QUk9DPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE5Nyw2ICsyMDksOCBAQAogQ09ORklHX1BBQ0tFVD15CiBDT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorQ09ORklHX1hGUk1fVVNFUj1tCiAjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKIENPTkZJR19JTkVUPXkKIENPTkZJR19JUF9NVUxUSUNBU1Q9eQpAQCAtMjE0LDEyICsyMjgsMTggQEAKICMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CiBDT05GSUdfVENQX0NPTkdfQklDPXkKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAogCiAjCkBAIC0yNzQsNiArMjk0LDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTMxMCw2ICszMzEsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiAjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC00NzQsNyArNDk2LDcgQEAKICMgQ09ORklHX1NLWTIgaXMgbm90IHNldAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKK0NPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAKQEAgLTQ4NCw2ICs1MDYsNyBAQAogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTU2LDYgKzU3OSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU2Myw2ICs1ODcsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTU4Niw3ICs2MTEsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15CiAjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CkBAIC02MzIsMTAgKzY1NywxMCBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CkBAIC02NTQsOSArNjc5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTY3MSw3ICs2OTQsNiBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC02ODQsMjIgKzcwNiwyMSBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAogCiAjCkBAIC03MDcsNiArNzI4LDcgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTcxOCw2ICs3NDAsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTczNSw2ICs3NTgsNyBAQAogQ09ORklHX1VTQl9FSENJX0hDRD15CiBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTc3MSw5ICs3OTUsNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC03ODcsMTUgKzgwOSw2IEBACiAjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtODE2LDcgKzgyOSw3IEBACiAjIENPTkZJR19VU0JfU0VSSUFMX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQU5ZREFUQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldApAQCAtODI0LDYgKzgzNyw3IEBACiBDT05GSUdfVVNCX1NFUklBTF9DWVBSRVNTX004PW0KICMgQ09ORklHX1VTQl9TRVJJQUxfRU1QRUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9GVERJX1NJTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0ZVTlNPRlQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CkBAIC04NDgsMTIgKzg2MiwxNSBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1RJPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfT1BUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfT01OSU5FVCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VaVVNCPXkKIApAQCAtODY3LDEwICs4ODQsMTIgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldApAQCAtODkwLDYgKzkwOSwxOSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKQEAgLTg5OSw2ICs5MzEsMjQgQEAKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIEVuZ2luZSBzdXBwb3J0CisjCisjIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBETUEgQ2xpZW50cworIworCisjCisjIERNQSBEZXZpY2VzCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC05MTcsNiArOTY3LDcgQEAKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTk0OSw3ICsxMDAwLDYgQEAKIENPTkZJR19IVUdFVExCRlM9eQogQ09ORklHX0hVR0VUTEJfUEFHRT15CiBDT05GSUdfUkFNRlM9eQotIyBDT05GSUdfUkVMQVlGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKQEAgLTEwNjcsNiArMTExNyw3IEBACiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1BMSVNUPXkKIAogIwogIyBJbnN0cnVtZW50YXRpb24gU3VwcG9ydApAQCAtMTA3OSwxNCArMTEzMCwyMCBAQAogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TTEFCPXkKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQl9MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CkBAIC0xMTAwLDExICsxMTU3LDcgQEAKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKIENPTkZJR19CT09UWF9URVhUPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjNzQ0OF9ocGMyX2RlZmNvbmZpZwppbmRleCAxNWE1MGY0Li43MTlmYmE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM3NDQ4X2hwYzJfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzc0NDhfaHBjMl9kZWZjb25maWcKQEAgLTEsMTYgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1yYzQKLSMgU2F0IE1heSAyNyAxODo0NTo1NSAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2CisjIFN1biBTZXAgMTAgMTA6MjY6NTUgMjAwNgogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19HRU5FUklDX05WUkFNPXkKQEAgLTI5LDYgKzMxLDcgQEAKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKQEAgLTM5LDYgKzQyLDcgQEAKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC01Niw2ICs2MCw3IEBACiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CkBAIC03MCwxMCArNzUsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMTAsMTMgKzExNywxNiBAQAogIyBDT05GSUdfUFBDX0lTRVJJRVMgaXMgbm90IHNldAogQ09ORklHX0VNQkVEREVENnh4PXkKICMgQ09ORklHX0FQVVMgaXMgbm90IHNldAotQ09ORklHX01QSUM9eQorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VEQkdfUlRBU19DT05TT0xFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKICMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1RPREMgaXMgbm90IHNldAogIyBDT05GSUdfS0FUQU5BIGlzIG5vdCBzZXQKICMgQ09ORklHX1dJTExPVyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUENJNjkwIGlzIG5vdCBzZXQKQEAgLTE0Niw2ICsxNTYsNyBAQAogIyBDT05GSUdfRVY2NDM2MCBpcyBub3Qgc2V0CiBDT05GSUdfVFNJMTA4X0JSSURHRT15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfTVBJQz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTE2MCw2ICsxNzEsNyBAQAogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xNjksMTAgKzE4MSwxMCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ0NPTVAgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKIApAQCAtMTgwLDEwICsxOTIsMTIgQEAKICMgQnVzIG9wdGlvbnMKICMKIENPTkZJR19HRU5FUklDX0lTQV9ETUE9eQorQ09ORklHX01QSUNfV0VJUkQ9eQogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0kgaXMgbm90IHNldAogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogCiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKQEAgLTIyMSw2ICsyMzUsOCBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yNDAsNiArMjU2LDggQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjQ3LDYgKzI2NSw3IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMzAwLDYgKzMxOSw3IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTMzNiw2ICszNTYsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC0zOTksNiArNDIwLDcgQEAKIENPTkZJR19TQ1NJX1NBVEFfTVY9eQogIyBDT05GSUdfU0NTSV9TQVRBX05WIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUERDX0FETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1FTVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQV9TWDQgaXMgbm90IHNldApAQCAtNDgxLDYgKzUwMyw5IEBACiAjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC01MzgsNyArNTYzLDYgQEAKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci1DT05GSUdfVFNJMTA4X0VUSD15CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCkBAIC01NDYsNiArNTcwLDcgQEAKICMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTY0NSw2ICs2NzAsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CkBAIC02NzksMTMgKzcwNSwxMyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIApAQCAtNjk3LDYgKzcyMyw3IEBACiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03MDYsNyArNzMzLDkgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNzYzLDYgKzc5MiwxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc4Myw2ICs4MjUsNyBAQAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtODg0LDYgKzkyNyw3IEBACiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTg5NSwxNyArOTM5LDEzIEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOV0lORF9JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4X2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfaXR4X2RlZmNvbmZpZwppbmRleCBmYzJkOTc4Li44ZGE2YTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X2l0eF9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9pdHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3Ci0jIEZyaSBKdW4gMzAgMTc6NTM6MjUgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgorIyBTdW4gU2VwIDEwIDEwOjI4OjA1IDIwMDYKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CkBAIC02MCw2ICs2MCw3IEBACiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CkBAIC03OCw2ICs3OSw3IEBACiAjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC0xMjAsNiArMTIyLDcgQEAKICMgQ09ORklHX01QQzgzNHhfU1lTIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4MzR4X0lUWD15CiBDT05GSUdfTVBDODM0eD15CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMTQ4LDcgKzE1MSw2IEBACiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTE1Niw2ICsxNTgsNyBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0lORElSRUNUX1BDST15CiBDT05GSUdfRlNMX1NPQz15CkBAIC00MDEsNiArNDA0LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC01NjEsNiArNTY1LDcgQEAKIENPTkZJR19DSUNBREFfUEhZPXkKICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC05MDUsNiArOTEwLDcgQEAKICMKIENPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTEwMjUsNyArMTAzMSw3IEBACiAjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKQEAgLTExMTAsNiArMTExNiw3IEBACiAjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX0RTMTMwNz15CiAjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKQEAgLTEyMjYsNyArMTIzMyw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xMjc5LDExICsxMjg1LDEzIEBACiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0lORk89eQogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9zeXNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9tZHNfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggOTAlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODM0eF9tZHNfZGVmY29uZmlnCmluZGV4IDUwNzhiMDQuLjllZWZhYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzgzNHhfc3lzX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4MzR4X21kc19kZWZjb25maWcKQEAgLTEsMTUgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzYKLSMgV2VkIE1hciAxNSAxNjoxOTo1NiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2CisjIFN1biBTZXAgMTAgMTA6Mjg6NTQgMjAwNgogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19HRU5FUklDX05WUkFNPXkKQEAgLTI3LDE3ICszMCwxOSBAQAogIyBDT05GSUdfUFBDXzUyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogQ09ORklHX1BQQ184M3h4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Nnh4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQweCBpcyBub3Qgc2V0CiAjIENPTkZJR180NHggaXMgbm90IHNldAogIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAotIyBDT05GSUdfRTUwMCBpcyBub3Qgc2V0CiBDT05GSUdfNnh4PXkKIENPTkZJR184M3h4PXkKIENPTkZJR19QUENfRlBVPXkKIENPTkZJR19QUENfU1REX01NVT15CiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC01NSw5ICs2MCwxMSBAQAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKICMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKIENPTkZJR19FTUJFRERFRD15CkBAIC02NywxNCArNzQsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKICMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKIENPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCiBDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTg1LDcgKzkwLDYgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0tNT0QgaXMgbm90IHNldApAQCAtOTQsNiArOTgsOCBAQAogIyBCbG9jayBsYXllcgogIwogIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMTQsNyArMTIwLDkgQEAKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogQ09ORklHX01QQzgzNHhfU1lTPXkKKyMgQ09ORklHX01QQzgzNHhfSVRYIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4MzR4PXkKKyMgQ09ORklHX01QSUMgaXMgbm90IHNldAogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0xMjksNiArMTM3LDcgQEAKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CkBAIC0xMzgsMTAgKzE0NywxMCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EIGlzIG5vdCBzZXQKIENPTkZJR19TRUNDT01QPXkKIENPTkZJR19JU0FfRE1BX0FQST15CiAKQEAgLTE0OSwxMiArMTU4LDEzIEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKIENPTkZJR19GU0xfU09DPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTkyLDYgKzIwMiw4IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiBDT05GSUdfSVBfTVVMVElDQVNUPXkKQEAgLTIwOSwxMiArMjIxLDE4IEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAogQ09ORklHX1RDUF9DT05HX0JJQz15CiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjY4LDYgKzI4Niw3IEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTMwNCw2ICszMjMsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKQEAgLTM3MSw2ICszOTEsOSBAQAogIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAogCiAjCiAjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQpAQCAtNDMzLDYgKzQ1Niw3IEBACiAjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC01MDcsNiArNTMxLDcgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CiBDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CkBAIC01NDMsNiArNTY4LDcgQEAKICMKICMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAogIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15CiAjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldApAQCAtNTg5LDEwICs2MTUsMTAgQEAKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtNjExLDEwICs2MzcsOCBAQAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTTQxVDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVENfWDEyMDVfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldApAQCAtNjI5LDEzICs2NTMsMTMgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAogIwogQ09ORklHX0hXTU9OPXkKICMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CkBAIC02NjQsMTAgKzY4OCwxMiBAQAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldApAQCAtNjc5LDEzICs3MDUsMTAgQEAKICMKIAogIwotIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKLSMKLQotIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjk1LDcgKzcxOCw5IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTcwNyw2ICs3MzIsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiAjIENPTkZJR19VU0IgaXMgbm90IHNldAogCiAjCkBAIC03MjQsNiArNzUwLDE5IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtNzMzLDYgKzc3MiwyNCBAQAogIwogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTc1Myw2ICs4MTAsNyBAQAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtNzgxLDcgKzgzOSw2IEBACiBDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtODU0LDYgKzkxMSw3IEBACiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTg2NSwxNSArOTIzLDEzIEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAogIyBDT05GSUdfU0VSSUFMX1RFWFRfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDBfYWRzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1NDBfYWRzX2RlZmNvbmZpZwppbmRleCA3ZjA3ODBmLi42N2U3ZDBiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NTQwX2Fkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODU0MF9hZHNfZGVmY29uZmlnCkBAIC0xLDE2ICsxLDE4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYKLSMgTW9uIE1hciAyNyAyMzozNzozNiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2CisjIFN1biBTZXAgMTAgMTA6Mjk6MjMgMjAwNgogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19HRU5FUklDX05WUkFNPXkKQEAgLTI5LDYgKzMxLDcgQEAKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKIENPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHXzh4eCBpcyBub3Qgc2V0CkBAIC0zOSw2ICs0Miw3IEBACiBDT05GSUdfRlNMX0JPT0tFPXkKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtNTYsNiArNjAsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldApAQCAtNzEsMTAgKzc2LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTAzLDE1ICsxMTAsMTYgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfTVBJQz15CiAjIENPTkZJR19XQU5UX0VBUkxZX1NFUklBTCBpcyBub3Qgc2V0CiAKICMKICMgUGxhdGZvcm0gc3VwcG9ydAogIwogQ09ORklHX01QQzg1NDBfQURTPXkKKyMgQ09ORklHX01QQzg1eHhfQ0RTIGlzIG5vdCBzZXQKIENPTkZJR19NUEM4NTQwPXkKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJX0JFPXkKK0NPTkZJR19NUElDPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMTI3LDYgKzEzNSw3IEBACiBDT05GSUdfQklORk1UX0VMRj15CiBDT05GSUdfQklORk1UX01JU0M9eQogQ09ORklHX01BVEhfRU1VTEFUSU9OPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQpAQCAtMTM2LDE2ICsxNDUsMTcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1BST0NfREVWSUNFVFJFRT15CiAjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAogIyBDT05GSUdfUE0gaXMgbm90IHNldAotIyBDT05GSUdfU09GVFdBUkVfU1VTUEVORCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNDT01QIGlzIG5vdCBzZXQKIENPTkZJR19JU0FfRE1BX0FQST15CiAKICMKICMgQnVzIG9wdGlvbnMKICMKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKIENPTkZJR19GU0xfU09DPXkKQEAgLTE4Nyw2ICsxOTcsOCBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yMDQsMTIgKzIxNiwxOCBAQAogIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI2NCw2ICsyODIsNyBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CiAKICMKICMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgpAQCAtMjk1LDYgKzMxNCw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0zMjc2OAorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtMzU1LDYgKzM3NSw5IEBACiAjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCkBAIC00NjQsNiArNDg3LDcgQEAKICMgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfR0VOX1JUQz15CiAjIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldApAQCAtNDczLDcgKzQ5Nyw2IEBACiAjCiAjIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgogIwotIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCkBAIC00OTYsMTMgKzUxOSwxMyBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUJJVFVHVVJVIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKIApAQCAtNTE0LDYgKzUzNyw3IEBACiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC01MjMsNyArNTQ3LDkgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtNTUyLDYgKzU3OCwxOSBAQAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKIAogIworIyBMRUQgZGV2aWNlcworIworIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorCisjCisjIExFRCBkcml2ZXJzCisjCisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCisKKyMKICMgSW5maW5pQmFuZCBzdXBwb3J0CiAjCiAKQEAgLTU2MCw2ICs1OTksMjQgQEAKICMKIAogIworIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIEVuZ2luZSBzdXBwb3J0CisjCisjIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBETUEgQ2xpZW50cworIworCisjCisjIERNQSBEZXZpY2VzCisjCisKKyMKICMgRmlsZSBzeXN0ZW1zCiAjCiBDT05GSUdfRVhUMl9GUz15CkBAIC01ODAsNiArNjM3LDcgQEAKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTY3Nyw2ICs3MzUsNyBAQAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC02ODgsMTQgKzc0NywxOSBAQAogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CkBAIC03MDYsMTEgKzc3MCw3IEBACiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfY2RzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg1eHhfY2RzX2RlZmNvbmZpZwppbmRleCA5YmIwMjJhLi43MmVkZjlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NXh4X2Nkc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODV4eF9jZHNfZGVmY29uZmlnCkBAIC0xLDE2ICsxLDE4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTYKLSMgU3VuIEFwciAgMiAxMToyMzo0MiAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2CisjIFN1biBTZXAgMTAgMTA6Mjk6NDkgMjAwNgogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogQ09ORklHX1BQQzMyPXkKIENPTkZJR19QUENfTUVSR0U9eQogQ09ORklHX01NVT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfSVJRX1BFUl9DUFU9eQogQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX1BQQz15CiBDT05GSUdfRUFSTFlfUFJJTlRLPXkKIENPTkZJR19HRU5FUklDX05WUkFNPXkKQEAgLTE5LDcgKzIxLDcgQEAKIENPTkZJR19QUENfT0Y9eQogQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKICMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfVUlNQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CiAKICMKICMgUHJvY2Vzc29yIHN1cHBvcnQKQEAgLTI5LDYgKzMxLDcgQEAKICMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ184M3h4IGlzIG5vdCBzZXQKIENPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKICMgQ09ORklHXzh4eCBpcyBub3Qgc2V0CkBAIC0zOSw2ICs0Miw3IEBACiBDT05GSUdfRlNMX0JPT0tFPXkKICMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX1NQRT15CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtNTYsNiArNjAsNyBAQAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldApAQCAtNzEsMTAgKzc2LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTAzLDcgKzExMCw2IEBACiAjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgotQ09ORklHX01QSUM9eQogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAogCiAjCkBAIC0xMTMsNiArMTE5LDcgQEAKIENPTkZJR19NUEM4NXh4X0NEUz15CiBDT05GSUdfTVBDODU0MD15CiBDT05GSUdfUFBDX0lORElSRUNUX1BDSV9CRT15CitDT05GSUdfTVBJQz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTEyOCw2ICsxMzUsNyBAQAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPXkKIENPTkZJR19NQVRIX0VNVUxBVElPTj15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQogQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKQEAgLTEzNywyMSArMTQ1LDIzIEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQgaXMgbm90IHNldAogIyBDT05GSUdfU0VDQ09NUCBpcyBub3Qgc2V0CiBDT05GSUdfSVNBX0RNQV9BUEk9eQogCiAjCiAjIEJ1cyBvcHRpb25zCiAjCi1DT05GSUdfUFBDX0k4MjU5PXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKIENPTkZJR19GU0xfU09DPXkKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKQEAgLTE5MCw2ICsyMDAsOCBAQAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CitDT05GSUdfWEZSTV9VU0VSPXkKICMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAogQ09ORklHX0lORVQ9eQogQ09ORklHX0lQX01VTFRJQ0FTVD15CkBAIC0yMDksNiArMjIxLDggQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjE2LDYgKzIzMCw3IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjcwLDYgKzI4NSw3IEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCkBAIC0zMDYsNiArMzIyLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTMyNzY4CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC00MjUsNiArNDQyLDkgQEAKICMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTQ3MCw2ICs0OTAsNyBAQAogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTY4LDYgKzU4OSw3IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKQEAgLTYwMiwxMyArNjI0LDEzIEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKICMKIENPTkZJR19IV01PTj15CiAjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCkBAIC02MjAsNiArNjQyLDcgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKQEAgLTYyOSw3ICs2NTIsOSBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfRklSTVdBUkVfRURJRD15CiAjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC02NjQsNiArNjg5LDE0IEBACiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldApAQCAtNjc4LDYgKzcxMSwxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTY5OCw2ICs3NDQsNyBAQAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtNzk1LDYgKzg0Miw3IEBACiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTgwNiwxNCArODU0LDE5IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKQEAgLTgyNCwxMSArODc3LDcgQEAKICMgQ09ORklHX0RFQlVHR0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAogIyBDT05GSUdfQk9PVFhfVEVYVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzg2NDFfaHBjbl9kZWZjb25maWcKaW5kZXggZDdhMzBmOS4uOTJhNTI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvbXBjODY0MV9ocGNuX2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM4NjQxX2hwY25fZGVmY29uZmlnCkBAIC0xLDE2ICsxLDE4IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmMzCi0jIEZyaSBKdW4gMTYgMTA6NDc6MDkgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgorIyBTdW4gU2VwIDEwIDEwOjMwOjE1IDIwMDYKICMKICMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKIENPTkZJR19QUEMzMj15CiBDT05GSUdfUFBDX01FUkdFPXkKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfR0VORVJJQ19OVlJBTT15CkBAIC00MSw2ICs0Myw3IEBACiBDT05GSUdfUFBDX1NURF9NTVVfMzI9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0yCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgogCiAjCiAjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwpAQCAtNTgsNiArNjEsNyBAQAogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQpAQCAtNzUsMTAgKzc5LDEyIEBACiBDT05GSUdfQlVHPXkKICMgQ09ORklHX0VMRl9DT1JFIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiBDT05GSUdfU0xPQj15CkBAIC0xMDcsOSArMTEzLDkgQEAKICMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJkZWFkbGluZSIKLUNPTkZJR19NUElDPXkKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSU5ESVJFQ1RfUENJX0JFPXkKK0NPTkZJR19NUElDPXkKIAogIwogIyBQbGF0Zm9ybSBTdXBwb3J0CkBAIC0xMzEsNiArMTM3LDcgQEAKIENPTkZJR19QUkVFTVBUX0JLTD15CiBDT05GSUdfQklORk1UX0VMRj15CiAjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogIyBDT05GSUdfSVJRX0FMTF9DUFVTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0ZMQVRNRU1fRU5BQkxFPXkKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKQEAgLTE0MSw2ICsxNDgsNyBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CkBAIC0xNTEsMTEgKzE1OSwxMyBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSTgyNTk9eQogQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQogQ09ORklHX0ZTTF9TT0M9eQogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIAogIwpAQCAtMTk0LDYgKzIwNCw4IEBACiBDT05GSUdfUEFDS0VUPXkKICMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9eQogIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVD15CiAjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldApAQCAtMjEyLDYgKzIyNCw4IEBACiAjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTIyNCw3ICsyMzgsMTAgQEAKICMgQ09ORklHX0lORVQ2X0lQQ09NUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVQ2X1hGUk1fTU9ERV9UVU5ORUw9eQogIyBDT05GSUdfSVBWNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTI3OSw2ICsyOTYsNyBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTMxNSw2ICszMzMsNyBAQAogQ09ORklHX0JMS19ERVZfUkFNPXkKIENPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgogQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MTMxMDcyCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC0zODMsNiArNDAyLDggQEAKICMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAogIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CiBDT05GSUdfVklURVNTRV9QSFk9eQorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKQEAgLTQyNiw2ICs0NDcsNyBAQAogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNTAwLDYgKzUyMiw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTUzNCw2ICs1NTcsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CkBAIC01NzksNiArNjAzLDcgQEAKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX01QQz15CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldApAQCAtNjE1LDcgKzY0MCw2IEBACiAjCiAjIERhbGxhcydzIDEtd2lyZSBidXMKICMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKQEAgLTYzMSw2ICs2NTUsNyBAQAogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNjQwLDYgKzY2NSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwpAQCAtNjQ4LDYgKzY3NCw3IEBACiBDT05GSUdfVkdBX0NPTlNPTEU9eQogIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03MDQsNiArNzMxLDE5IEBACiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogCiAjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcworIworCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQpAQCAtODcwLDYgKzkxMCw3IEBACiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9eQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTg4MSwxMyArOTIyLDE4IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0hJR0hNRU0gaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CkBAIC04OTksMTEgKzk0NSw3IEBACiAjIENPTkZJR19ERUJVR0dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0xQQVIgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0c1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19SVEFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19NQVBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfSVNFUklFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRUFSTFlfREVCVUcgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wbWFjMzJfZGVmY29uZmlnCmluZGV4IGFkZGM3OTMuLjY4NjFkZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BtYWMzMl9kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcG1hYzMyX2RlZmNvbmZpZwpAQCAtMSwxNiArMSwxOCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjNQotIyBNb24gTWF5IDI5IDE0OjQ3OjQ5IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKKyMgU3VuIFNlcCAxMCAxMDozMDoyMyAyMDA2CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDMzI9eQogQ09ORklHX1BQQ19NRVJHRT15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CiBDT05GSUdfUFBDPXkKIENPTkZJR19FQVJMWV9QUklOVEs9eQogQ09ORklHX0dFTkVSSUNfTlZSQU09eQpAQCAtMjksNiArMzEsNyBAQAogIyBDT05GSUdfUFBDXzgyeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAogIyBDT05GSUdfUFBDXzg1eHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzg2eHggaXMgbm90IHNldAogIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKICMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CiAjIENPTkZJR184eHggaXMgbm90IHNldApAQCAtMzksNiArNDIsNyBAQAogQ09ORklHX1BQQ19TVERfTU1VPXkKIENPTkZJR19QUENfU1REX01NVV8zMj15CiAjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTU2LDYgKzYwLDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQpAQCAtNzIsMTAgKzc3LDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE5LDcgKzEyNiw5IEBACiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DSFJQIGlzIG5vdCBzZXQKIENPTkZJR19QUENfUE1BQz15Ci1DT05GSUdfTVBJQz15CisjIENPTkZJR19QUENfQ0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0VMTF9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAogIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX01QQzEwNj15CkBAIC0xNDAsNiArMTQ5LDcgQEAKIENPTkZJR19QUEM2MDFfU1lOQ19GSVg9eQogIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKIAogIwogIyBLZXJuZWwgb3B0aW9ucwpAQCAtMTU0LDYgKzE2NCw3IEBACiAjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKIENPTkZJR19CSU5GTVRfRUxGPXkKIENPTkZJR19CSU5GTVRfTUlTQz1tCitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQogQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQpAQCAtMTY0LDYgKzE3NSw3IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKIENPTkZJR19QTT15CkBAIC0xNzgsMTAgKzE5MCwxMiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19JODI1OSBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0lORElSRUNUX1BDST15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yNTYsNiArMjcwLDggQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKQEAgLTI2OCw2ICsyODQsNyBAQAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIApAQCAtMjkyLDkgKzMwOSwxMSBAQAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QT0xJQ1k9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU0NUUD1tCiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRFPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUMgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQogQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQogCkBAIC0zMTMsNiArMzMyLDcgQEAKIENPTkZJR19JUF9ORl9BTUFOREE9bQogQ09ORklHX0lQX05GX1BQVFA9bQogQ09ORklHX0lQX05GX0gzMjM9bQorIyBDT05GSUdfSVBfTkZfU0lQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19JUF9ORl9JUFRBQkxFUz1tCiBDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCkBAIC00NTcsNiArNDc3LDcgQEAKICMgQ09ORklHX0FMSV9GSVIgaXMgbm90IHNldAogIyBDT05GSUdfVkxTSV9GSVIgaXMgbm90IHNldAogIyBDT05GSUdfVklBX0ZJUiBpcyBub3Qgc2V0CisjIENPTkZJR19NQ1NfRklSIGlzIG5vdCBzZXQKIENPTkZJR19CVD1tCiBDT05GSUdfQlRfTDJDQVA9bQogQ09ORklHX0JUX1NDTz1tCkBAIC01MDAsNiArNTIxLDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCkBAIC01MzksNiArNTYxLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKQEAgLTYwMCw3ICs2MjMsNiBAQAogQ09ORklHX0JMS19ERVZfSURFX1BNQUM9eQogQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQVRBMTAwRklSU1Q9eQogQ09ORklHX0JMS19ERVZfSURFRE1BX1BNQUM9eQotQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTks9eQogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CkBAIC02NjEsNiArNjgzLDcgQEAKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldApAQCAtNzA1LDkgKzcyOCw3IEBACiBDT05GSUdfTURfUkFJRDA9bQogQ09ORklHX01EX1JBSUQxPW0KIENPTkZJR19NRF9SQUlEMTA9bQotQ09ORklHX01EX1JBSUQ1PW0KLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKLUNPTkZJR19NRF9SQUlENj1tCisjIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT1tCkBAIC03NTAsNyArNzcxLDYgQEAKICMKIENPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1NCUDI9bQotIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NF9FVEgxMzk0IGlzIG5vdCBzZXQKIENPTkZJR19JRUVFMTM5NF9EVjEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1JBV0lPPW0KQEAgLTc2Niw5ICs3ODYsMTIgQEAKIENPTkZJR19BREI9eQogQ09ORklHX0FEQl9DVURBPXkKIENPTkZJR19BREJfUE1VPXkKK0NPTkZJR19BREJfUE1VX0xFRD15CitDT05GSUdfQURCX1BNVV9MRURfSURFPXkKIENPTkZJR19QTUFDX0FQTV9FTVU9bQogQ09ORklHX1BNQUNfTUVESUFCQVk9eQogQ09ORklHX1BNQUNfQkFDS0xJR0hUPXkKK0NPTkZJR19QTUFDX0JBQ0tMSUdIVF9MRUdBQ1k9eQogQ09ORklHX0lOUFVUX0FEQkhJRD15CiBDT05GSUdfTUFDX0VNVU1PVVNFQlROPXkKIENPTkZJR19USEVSTV9XSU5EVFVOTkVMPW0KQEAgLTg1OCw2ICs4ODEsNyBAQAogIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtOTA4LDYgKzkzMiw3IEBACiAjIFByaXNtIEdUL0R1ZXR0ZSA4MDIuMTEoYS9iL2cpIFBDSS9DYXJkYnVzIHN1cHBvcnQKICMKIENPTkZJR19QUklTTTU0PW0KKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAogIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfV0lSRUxFU1M9eQogCkBAIC05OTgsNiArMTAyMyw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTEwMjksNiArMTA1NSw3IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CkBAIC0xMDQwLDYgKzEwNjcsNyBAQAogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKIENPTkZJR19BR1A9bQorIyBDT05GSUdfQUdQX1NJUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BR1BfVklBIGlzIG5vdCBzZXQKIENPTkZJR19BR1BfVU5JTk9SVEg9bQogQ09ORklHX0RSTT1tCkBAIC0xMDkyLDYgKzExMjAsNyBAQAogQ09ORklHX0kyQ19QT1dFUk1BQz15CiAjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CkBAIC0xMTU2LDEyICsxMTg1LDEzIEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiBDT05GSUdfRkJfTUFDTU9ERVM9eQotQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQorQ09ORklHX0ZCX0JBQ0tMSUdIVD15CiBDT05GSUdfRkJfTU9ERV9IRUxQRVJTPXkKIENPTkZJR19GQl9USUxFQkxJVFRJTkc9eQogIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKQEAgLTExNzgsNiArMTIwOCw3IEBACiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfTlZJRElBPXkKIENPTkZJR19GQl9OVklESUFfSTJDPXkKK0NPTkZJR19GQl9OVklESUFfQkFDS0xJR0hUPXkKICMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAogQ09ORklHX0ZCX01BVFJPWD15CiBDT05GSUdfRkJfTUFUUk9YX01JTExFTklVTT15CkBAIC0xMTg3LDEyICsxMjE4LDE1IEBACiAjIENPTkZJR19GQl9NQVRST1hfTVVMVElIRUFEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9SQURFT049eQogQ09ORklHX0ZCX1JBREVPTl9JMkM9eQorQ09ORklHX0ZCX1JBREVPTl9CQUNLTElHSFQ9eQogIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19GQl9BVFkxMjg9eQorQ09ORklHX0ZCX0FUWTEyOF9CQUNLTElHSFQ9eQogQ09ORklHX0ZCX0FUWT15CiBDT05GSUdfRkJfQVRZX0NUPXkKICMgQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfQVRZX0dYPXkKK0NPTkZJR19GQl9BVFlfQkFDS0xJR0hUPXkKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldApAQCAtMTIyMSw3ICsxMjU1LDExIEBACiBDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKIENPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQotIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9ERVZJQ0U9eQorQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9bQorQ09ORklHX0xDRF9ERVZJQ0U9eQogCiAjCiAjIFNvdW5kCkBAIC0xMjc4LDYgKzEzMTYsMTggQEAKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CkBAIC0xMzE1LDYgKzEzNjUsMTcgQEAKIENPTkZJR19TTkRfUE9XRVJNQUNfQVVUT19EUkM9eQogCiAjCisjIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyCisjCitDT05GSUdfU05EX0FPQT1tCitDT05GSUdfU05EX0FPQV9GQUJSSUNfTEFZT1VUPW0KK0NPTkZJR19TTkRfQU9BX09OWVg9bQorQ09ORklHX1NORF9BT0FfVEFTPW0KK0NPTkZJR19TTkRfQU9BX1RPT05JRT1tCitDT05GSUdfU05EX0FPQV9TT1VOREJVUz1tCitDT05GSUdfU05EX0FPQV9TT1VOREJVU19JMlM9bQorCisjCiAjIFVTQiBkZXZpY2VzCiAjCiBDT05GSUdfU05EX1VTQl9BVURJTz1tCkBAIC0xMzU1LDYgKzE0MTYsNyBAQAogQ09ORklHX1VTQl9FSENJX0hDRD1tCiBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPPXkKIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAogQ09ORklHX1VTQl9PSENJX0hDRD15CiAjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKQEAgLTE0MzEsNyArMTQ5Myw2IEBACiAjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTkVUX1pBVVJVUz1tCi0jIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfTU9OPXkKIAogIwpAQCAtMTQ0NCw3ICsxNTA1LDYgQEAKIENPTkZJR19VU0JfU0VSSUFMPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TRVJJQUxfQU5ZREFUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldApAQCAtMTQ4Miw2ICsxNTQyLDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TSUVSUkFXSVJFTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX1RJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lCRVJKQUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NIGlzIG5vdCBzZXQKQEAgLTE0OTksMTAgKzE1NjAsMTIgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKQEAgLTE1MjQsNyArMTU4Nyw4IEBACiAjCiAjIExFRCBkZXZpY2VzCiAjCi0jIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQogCiAjCiAjIExFRCBkcml2ZXJzCkBAIC0xNTMzLDYgKzE1OTcsMTAgQEAKICMKICMgTEVEIFRyaWdnZXJzCiAjCitDT05GSUdfTEVEU19UUklHR0VSUz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfVElNRVIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfVFJJR0dFUl9JREVfRElTSz15CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKIAogIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKQEAgLTE1NDksNiArMTYxNywxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTE1NjksNiArMTY1MCw3IEBACiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CkBAIC0xNzMyLDYgKzE4MTQsNyBAQAogQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KIENPTkZJR19URVhUU0VBUkNIX0JNPW0KIENPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfUExJU1Q9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xNzQ0LDE0ICsxODI3LDE5IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CkBAIC0xNzYzLDExICsxODUxLDcgQEAKIENPTkZJR19YTU9OX0RFRkFVTFQ9eQogIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFhfVEVYVD15Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTFBBUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfRzUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX1JUQVMgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX01BUExFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19JU0VSSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCmluZGV4IDM5NWU0OTguLjc1MTdkMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKQEAgLTEsMTUgKzEsMTggQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNi1yYzIKLSMgRnJpIEZlYiAxMCAxNzozMjoxNCAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM2CisjIFN1biBTZXAgMTAgMTA6NDU6MTEgMjAwNgogIwogQ09ORklHX1BQQzY0PXkKIENPTkZJR182NEJJVD15CiBDT05GSUdfUFBDX01FUkdFPXkKIENPTkZJR19NTVU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0lSUV9QRVJfQ1BVPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19QUEM9eQogQ09ORklHX0VBUkxZX1BSSU5USz15CiBDT05GSUdfQ09NUEFUPXkKQEAgLTMwLDggKzMzLDEwIEBACiBDT05GSUdfUFBDX0ZQVT15CiBDT05GSUdfQUxUSVZFQz15CiBDT05GSUdfUFBDX1NURF9NTVU9eQorQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0zMgorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTQ5LDExICs1NCwxNCBAQAogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1BPU0lYX01RVUVVRT15CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19UQVNLU1RBVFM9eQorQ09ORklHX1RBU0tfREVMQVlfQUNDVD15CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfQ1BVU0VUUz15CitDT05GSUdfUkVMQVk9eQogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CkBAIC02NSwxNCArNzMsMTIgQEAKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAogQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC04Myw3ICs4OSw2IEBACiBDT05GSUdfTU9EVUxFUz15CiBDT05GSUdfTU9EVUxFX1VOTE9BRD15CiAjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKIENPTkZJR19NT0RWRVJTSU9OUz15CiBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMPXkKIENPTkZJR19LTU9EPXkKQEAgLTkyLDYgKzk3LDcgQEAKICMKICMgQmxvY2sgbGF5ZXIKICMKK0NPTkZJR19CTEtfREVWX0lPX1RSQUNFPXkKIAogIwogIyBJTyBTY2hlZHVsZXJzCkBAIC0xMTcsMTkgKzEyMywyMiBAQAogQ09ORklHX1BQQ19QTUFDPXkKIENPTkZJR19QUENfUE1BQzY0PXkKIENPTkZJR19QUENfTUFQTEU9eQotIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorQ09ORklHX1BQQ19DRUxMPXkKK0NPTkZJR19QUENfQ0VMTF9OQVRJVkU9eQorQ09ORklHX1BQQ19JQk1fQ0VMTF9CTEFERT15CitDT05GSUdfVURCR19SVEFTX0NPTlNPTEU9eQogQ09ORklHX1hJQ1M9eQogQ09ORklHX1UzX0RBUlQ9eQotQ09ORklHX01QSUM9eQogQ09ORklHX1BQQ19SVEFTPXkKIENPTkZJR19SVEFTX0VSUk9SX0xPR0dJTkc9eQogQ09ORklHX1JUQVNfUFJPQz15CiBDT05GSUdfUlRBU19GTEFTSD1tCi0jIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NTUlPX05WUkFNPXkKIENPTkZJR19NUElDX0JST0tFTl9VMz15CiBDT05GSUdfSUJNVklPPXkKICMgQ09ORklHX0lCTUVCVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzk3MF9OQVA9eQogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15CiAjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CkBAIC0xNDQsNiArMTUzLDE1IEBACiAjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9QTUFDNjQ9eQogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorCisjCisjIENlbGwgQnJvYWRiYW5kIEVuZ2luZSBvcHRpb25zCisjCitDT05GSUdfU1BVX0ZTPW0KK0NPTkZJR19TUFVfQkFTRT15CitDT05GSUdfU1BVRlNfTU1BUD15CitDT05GSUdfQ0JFX1JBUz15CiAKICMKICMgS2VybmVsIG9wdGlvbnMKQEAgLTE2MSw2ICsxNzksNyBAQAogQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTMKIENPTkZJR19JT01NVV9WTUVSR0U9eQogQ09ORklHX0hPVFBMVUdfQ1BVPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CiBDT05GSUdfS0VYRUM9eQogIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRX0FMTF9DUFVTPXkKQEAgLTE4MSw5ICsyMDAsMTAgQEAKIENPTkZJR19IQVZFX01FTU9SWV9QUkVTRU5UPXkKICMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAogQ09ORklHX1NQQVJTRU1FTV9FWFRSRU1FPXkKLSMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1PUllfSE9UUExVRz15CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfUkVTT1VSQ0VTXzY0QklUPXkKK0NPTkZJR19BUkNIX01FTU9SWV9QUk9CRT15CiAjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1NNVCBpcyBub3Qgc2V0CiBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFPXkKQEAgLTE5NiwxMSArMjE2LDEyIEBACiAjIEJ1cyBvcHRpb25zCiAjCiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAogQ09ORklHX1BQQ19JODI1OT15CiAjIENPTkZJR19QUENfSU5ESVJFQ1RfUENJIGlzIG5vdCBzZXQKIENPTkZJR19QQ0k9eQogQ09ORklHX1BDSV9ET01BSU5TPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yNDcsNyArMjY4LDEwIEBACiBDT05GSUdfSU5FVF9BSD1tCiBDT05GSUdfSU5FVF9FU1A9bQogQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KIENPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQogQ09ORklHX0lORVRfRElBRz15CiBDT05GSUdfSU5FVF9UQ1BfRElBRz15CiAjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CkBAIC0yNTgsNiArMjgyLDkgQEAKICMKICMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CiBDT05GSUdfTkVURklMVEVSPXkKICMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTI4NCw2ICszMTEsOCBAQAogQ09ORklHX0lQX05GX1RGVFA9bQogQ09ORklHX0lQX05GX0FNQU5EQT1tCiAjIENPTkZJR19JUF9ORl9QUFRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0gzMjMgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1NJUD1tCiBDT05GSUdfSVBfTkZfUVVFVUU9bQogCiAjCkBAIC0zMzksNiArMzY4LDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKIENPTkZJR19GV19MT0FERVI9eQogIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCkBAIC0zNzYsNiArNDA2LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTY1NTM2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CkBAIC00MzYsNyArNDY3LDYgQEAKIENPTkZJR19CTEtfREVWX0lERV9QTUFDPXkKIENPTkZJR19CTEtfREVWX0lERV9QTUFDX0FUQTEwMEZJUlNUPXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QTUFDPXkKLSMgQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksgaXMgbm90IHNldAogIyBDT05GSUdfSURFX0FSTSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQogIyBDT05GSUdfSURFRE1BX0lWQiBpcyBub3Qgc2V0CkBAIC00OTcsNiArNTI3LDcgQEAKICMgQ09ORklHX1NDU0lfU0FUQV9NViBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfTlYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QRENfQURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEFfUVNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1BST01JU0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBX1NYNCBpcyBub3Qgc2V0CkBAIC01MTksMTEgKzU1MCwxMCBAQAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAogQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgogQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9JT01BUFBFRCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TWU01M0M4WFhfTU1JTz15CiBDT05GSUdfU0NTSV9JUFI9eQogQ09ORklHX1NDU0lfSVBSX1RSQUNFPXkKIENPTkZJR19TQ1NJX0lQUl9EVU1QPXkKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTFBGQz1tCkBAIC01NDAsOCArNTcwLDggQEAKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogQ09ORklHX01EX1JBSUQxMD15Ci1DT05GSUdfTURfUkFJRDU9eQotQ09ORklHX01EX1JBSUQ2PW0KK0NPTkZJR19NRF9SQUlENDU2PXkKK0NPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC01ODUsNyArNjE1LDYgQEAKICMKIENPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1NCUDI9bQotIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19JRUVFMTM5NF9SQVdJTz15CkBAIC01OTksNiArNjI4LDcgQEAKICMgTWFjaW50b3NoIGRldmljZSBkcml2ZXJzCiAjCiBDT05GSUdfQURCX1BNVT15CisjIENPTkZJR19BREJfUE1VX0xFRCBpcyBub3Qgc2V0CiBDT05GSUdfUE1BQ19TTVU9eQogQ09ORklHX1RIRVJNX1BNNzI9eQogQ09ORklHX1dJTkRGQVJNPXkKQEAgLTY4Miw2ICs3MTIsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CitDT05GSUdfU1BJREVSX05FVD1tCiAjIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAKICMKQEAgLTY5MSw2ICs3MjIsNyBAQAogQ09ORklHX0lYR0I9bQogIyBDT05GSUdfSVhHQl9OQVBJIGlzIG5vdCBzZXQKICMgQ09ORklHX1MySU8gaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzkyLDYgKzgyNCw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5OSw2ICs4MzIsNyBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKIENPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKQEAgLTgxNCw3ICs4NDgsOSBAQAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKK0NPTkZJR19IVkNfRFJJVkVSPXkKIENPTkZJR19IVkNfQ09OU09MRT15CitDT05GSUdfSFZDX1JUQVM9eQogQ09ORklHX0hWQ1M9bQogCiAjCkBAIC04MjYsNyArODYyLDcgQEAKICMgV2F0Y2hkb2cgQ2FyZHMKICMKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX0dFTl9SVEM9eQogIyBDT05GSUdfR0VOX1JUQ19YIGlzIG5vdCBzZXQKICMgQ09ORklHX0RUTEsgaXMgbm90IHNldApAQCAtODc0LDEwICs5MTAsMTAgQEAKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1BPV0VSTUFDPXkKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CkBAIC04OTYsOSArOTMyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX1gxMjA1X0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKQEAgLTkxMyw3ICs5NDcsNiBAQAogIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CkBAIC05MjYsMzcgKzk1OSwzMyBAQAogIwogCiAjCi0jIE11bHRpbWVkaWEgQ2FwYWJpbGl0aWVzIFBvcnQgZHJpdmVycwotIwotCi0jCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCiAjCiAjIENPTkZJR19EVkIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CiAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogQ09ORklHX0ZCPXkKIENPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQogQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CiBDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CiBDT05GSUdfRkJfTUFDTU9ERVM9eQorIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogQ09ORklHX0ZCX1RJTEVCTElUVElORz15CiAjIENPTkZJR19GQl9DSVJSVVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfUE0yIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0NZQkVSMjAwMCBpcyBub3Qgc2V0CiBDT05GSUdfRkJfT0Y9eQotIyBDT05GSUdfRkJfQ09OVFJPTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9QTEFUSU5VTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9WQUxLWVJJRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKQEAgLTk3MCw3ICs5OTksNiBAQAogQ09ORklHX0ZCX01BVFJPWF9JMkM9bQogQ09ORklHX0ZCX01BVFJPWF9NQVZFTj1tCiBDT05GSUdfRkJfTUFUUk9YX01VTFRJSEVBRD15Ci0jIENPTkZJR19GQl9SQURFT05fT0xEIGlzIG5vdCBzZXQKIENPTkZJR19GQl9SQURFT049eQogQ09ORklHX0ZCX1JBREVPTl9JMkM9eQogIyBDT05GSUdfRkJfUkFERU9OX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEwMjUsOSArMTA1MywxMSBAQAogQ09ORklHX1NORF9PU1NFTVVMPXkKIENPTkZJR19TTkRfTUlYRVJfT1NTPW0KIENPTkZJR19TTkRfUENNX09TUz1tCitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CiBDT05GSUdfU05EX1NFUVVFTkNFUl9PU1M9eQogIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEwNDQsNiArMTA3NCw3IEBACiAjIFBDSSBkZXZpY2VzCiAjCiAjIENPTkZJR19TTkRfQUQxODg5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BTFMzMDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMUzQwMDAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FMSTU0NTEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0FUSUlYUCBpcyBub3Qgc2V0CkBAIC0xMDU3LDYgKzEwODgsMTggQEAKICMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRU5TMTM3MCBpcyBub3Qgc2V0CkBAIC0xMDc2LDYgKzExMTksNyBAQAogIyBDT05GSUdfU05EX01JWEFSVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfTk0yNTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1BDWEhSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SSVBUSURFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9STUUzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfUk1FOTYgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1JNRTk2NTIgaXMgbm90IHNldApAQCAtMTA5Myw2ICsxMTM3LDE3IEBACiBDT05GSUdfU05EX1BPV0VSTUFDX0FVVE9fRFJDPXkKIAogIworIyBBcHBsZSBPbmJvYXJkIEF1ZGlvIGRyaXZlcgorIworQ09ORklHX1NORF9BT0E9bQorQ09ORklHX1NORF9BT0FfRkFCUklDX0xBWU9VVD1tCitDT05GSUdfU05EX0FPQV9PTllYPW0KK0NPTkZJR19TTkRfQU9BX1RBUz1tCitDT05GSUdfU05EX0FPQV9UT09OSUU9bQorQ09ORklHX1NORF9BT0FfU09VTkRCVVM9bQorQ09ORklHX1NORF9BT0FfU09VTkRCVVNfSTJTPW0KKworIwogIyBVU0IgZGV2aWNlcwogIwogIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CkBAIC0xMTA4LDYgKzExNjMsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTExMjUsNiArMTE4MSw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPXkKICMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQ9eQogIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfT0hDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTiBpcyBub3Qgc2V0CkBAIC0xMTM1LDcgKzExOTIsNiBAQAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKLSMgQ09ORklHX09CU09MRVRFX09TU19VU0JfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAogCkBAIC0xMTczLDkgKzEyMjksNyBAQAogIyBDT05GSUdfVVNCX0FDRUNBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0JUQUIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BPV0VSTUFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9JVE1UT1VDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfRUdBTEFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CkBAIC0xMTkwLDE1ICsxMjQ0LDYgQEAKICMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CiAKICMKLSMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKICMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKICMKICMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKQEAgLTEyMjcsMTAgKzEyNzIsMTIgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUEhJREdFVFNFUlZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVBQTEVESVNQTEFZPW0KICMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9URVNUIGlzIG5vdCBzZXQKQEAgLTEyNTAsMjMgKzEyOTcsNTMgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIEluZmluaUJhbmQgc3VwcG9ydAogIwogQ09ORklHX0lORklOSUJBTkQ9bQogIyBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EX1VTRVJfQUNDRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0FERFJfVFJBTlM9eQogQ09ORklHX0lORklOSUJBTkRfTVRIQ0E9bQotIyBDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9NVEhDQV9ERUJVRz15CiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQj1tCi0jIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKKyMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19JTkZJTklCQU5EX1NSUCBpcyBub3Qgc2V0CitDT05GSUdfSU5GSU5JQkFORF9JU0VSPW0KIAogIwotIyBTTiBEZXZpY2VzCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQogIwogCiAjCi0jIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKQorIyBSZWFsIFRpbWUgQ2xvY2sKKyMKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIEVuZ2luZSBzdXBwb3J0CisjCisjIENPTkZJR19ETUFfRU5HSU5FIGlzIG5vdCBzZXQKKworIworIyBETUEgQ2xpZW50cworIworCisjCisjIERNQSBEZXZpY2VzCiAjCiAKICMKQEAgLTEyOTgsNyArMTM3NSw2IEBACiAjIENPTkZJR19KRlNfU1RBVElTVElDUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQogIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19YRlNfU0VDVVJJVFk9eQogQ09ORklHX1hGU19QT1NJWF9BQ0w9eQpAQCAtMTMwNyw2ICsxMzgzLDcgQEAKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogQ09ORklHX0FVVE9GU19GUz15CkBAIC0xMzQyLDcgKzE0MTksNiBAQAogQ09ORklHX0hVR0VUTEJGUz15CiBDT05GSUdfSFVHRVRMQl9QQUdFPXkKIENPTkZJR19SQU1GUz15Ci0jIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM4OCw4ICsxNDY0LDEwIEBACiAjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAogQ09ORklHX0NJRlM9bQogIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CiBDT05GSUdfQ0lGU19YQVRUUj15CiBDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CkBAIC0xNDcwLDYgKzE1NDgsOSBAQAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19QTElTVD15CiAKICMKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKQEAgLTE0ODMsMTQgKzE1NjQsMTkgQEAKICMKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKIENPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE3CiBDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19GUz15CkBAIC0xNTA0LDExICsxNTkwLDcgQEAKICMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfSVJRU1RBQ0tTPXkKIENPTkZJR19CT09UWF9URVhUPXkKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19MUEFSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BQQ19FQVJMWV9ERUJVR19HNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfUlRBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUENfRUFSTFlfREVCVUdfTUFQTEUgaXMgbm90IHNldAotIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHX0lTRVJJRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKIAogIwogIyBTZWN1cml0eSBvcHRpb25zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wc2VyaWVzX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCmluZGV4IDMxNzA4YWQuLmE4Y2RmMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzZXJpZXNfZGVmY29uZmlnCkBAIC0xLDEzICsxLDE0IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTctcmM0Ci0jIFN1biBNYXkgMjggMDc6MjY6NTYgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNgorIyBTdW4gU2VwIDEwIDEwOjQ1OjEyIDIwMDYKICMKIENPTkZJR19QUEM2ND15CiBDT05GSUdfNjRCSVQ9eQogQ09ORklHX1BQQ19NRVJHRT15CiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19JUlFfUEVSX0NQVT15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQpAQCAtMzUsNiArMzYsNyBAQAogQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkc9eQogQ09ORklHX1NNUD15CiBDT05GSUdfTlJfQ1BVUz0xMjgKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCkBAIC01Miw2ICs1NCw3IEBACiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogQ09ORklHX0FVRElUPXkKIENPTkZJR19BVURJVFNZU0NBTEw9eQpAQCAtNzAsMTAgKzczLDEyIEBACiBDT05GSUdfQlVHPXkKIENPTkZJR19FTEZfQ09SRT15CiBDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKIENPTkZJR19GVVRFWD15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldApAQCAtMTE4LDkgKzEyMywxMSBAQAogIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAogIyBDT05GSUdfUFBDX01BUExFIGlzIG5vdCBzZXQKICMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSUJNX0NFTExfQkxBREUgaXMgbm90IHNldAorIyBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX1hJQ1M9eQogIyBDT05GSUdfVTNfREFSVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVBJQz15CiBDT05GSUdfUFBDX1JUQVM9eQogQ09ORklHX1JUQVNfRVJST1JfTE9HR0lORz15CiBDT05GSUdfUlRBU19QUk9DPXkKQEAgLTEzMiw2ICsxMzksNyBAQAogIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAogIyBDT05GSUdfV0FOVF9FQVJMWV9TRVJJQUwgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQogCiAjCiAjIEtlcm5lbCBvcHRpb25zCkBAIC0xNDksNiArMTU3LDcgQEAKIENPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTEzCiBDT05GSUdfSU9NTVVfVk1FUkdFPXkKIENPTkZJR19IT1RQTFVHX0NQVT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQogQ09ORklHX0tFWEVDPXkKICMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAogQ09ORklHX0lSUV9BTExfQ1BVUz15CkBAIC0xNzMsNiArMTgyLDcgQEAKICMgQ09ORklHX01FTU9SWV9IT1RQTFVHIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CiBDT05GSUdfTUlHUkFUSU9OPXkKK0NPTkZJR19SRVNPVVJDRVNfNjRCSVQ9eQogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEPXkKICMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAogQ09ORklHX1NDSEVEX1NNVD15CkBAIC0xODYsMTAgKzE5NiwxMiBAQAogIyBCdXMgb3B0aW9ucwogIwogQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CisjIENPTkZJR19NUElDX1dFSVJEIGlzIG5vdCBzZXQKIENPTkZJR19QUENfSTgyNTk9eQogIyBDT05GSUdfUFBDX0lORElSRUNUX1BDSSBpcyBub3Qgc2V0CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19QQ0lFUE9SVEJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0yMzgsNiArMjUwLDggQEAKIENPTkZJR19JTkVUX0lQQ09NUD1tCiBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTD1tCiBDT05GSUdfSU5FVF9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMjUwLDYgKzI2NCw3IEBACiAjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogQ09ORklHX05FVEZJTFRFUj15CiAjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAogCkBAIC0yNzcsNiArMjkyLDcgQEAKIENPTkZJR19JUF9ORl9BTUFOREE9bQogIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1NJUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfUVVFVUU9bQogCiAjCkBAIC0zMTYsNiArMzMyLDcgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UQ1BQUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKQEAgLTMzMiw2ICszNDksNyBAQAogQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQogQ09ORklHX0ZXX0xPQURFUj15CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCiAjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKQEAgLTM1Miw2ICszNzAsNyBAQAogIyBDT05GSUdfUEFSUE9SVF9QQ19GSUZPIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVF8xMjg0IGlzIG5vdCBzZXQKIAogIwpAQCAtMzc2LDYgKzM5NSw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT02NTUzNgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CiBDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtNDg3LDYgKzUwNyw3IEBACiAjIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfU0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKQEAgLTUwOCwxMiArNTI5LDYgQEAKIENPTkZJR19TQ1NJX0lQUl9EVU1QPXkKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAogQ09ORklHX1NDU0lfUUxBX0ZDPW0KLUNPTkZJR19TQ1NJX1FMQTJYWFhfRU1CRURERURfRklSTVdBUkU9eQotQ09ORklHX1NDU0lfUUxBMjFYWD1tCi1DT05GSUdfU0NTSV9RTEEyMlhYPW0KLUNPTkZJR19TQ1NJX1FMQTIzMDA9bQotQ09ORklHX1NDU0lfUUxBMjMyMj1tCi1DT05GSUdfU0NTSV9RTEEyNFhYPW0KIENPTkZJR19TQ1NJX0xQRkM9bQogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldApAQCAtNTI4LDkgKzU0Myw3IEBACiBDT05GSUdfTURfUkFJRDA9eQogQ09ORklHX01EX1JBSUQxPXkKIENPTkZJR19NRF9SQUlEMTA9bQotQ09ORklHX01EX1JBSUQ1PXkKLUNPTkZJR19NRF9SQUlENV9SRVNIQVBFPXkKLUNPTkZJR19NRF9SQUlENj1tCisjIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKIENPTkZJR19NRF9NVUxUSVBBVEg9bQogQ09ORklHX01EX0ZBVUxUWT1tCiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC02NTEsNiArNjY0LDcgQEAKICMgQ09ORklHX0lYR0JfTkFQSSBpcyBub3Qgc2V0CiBDT05GSUdfUzJJTz1tCiAjIENPTkZJR19TMklPX05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfTVlSSTEwR0UgaXMgbm90IHNldAogCiAjCiAjIFRva2VuIFJpbmcgZGV2aWNlcwpAQCAtNzU0LDYgKzc2OCw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTc5Myw2ICs4MDgsNyBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTgzOSw2ICs4NTUsNyBAQAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CkBAIC04NzYsNyArODkzLDYgQEAKICMKICMgRGFsbGFzJ3MgMS13aXJlIGJ1cwogIwotIyBDT05GSUdfVzEgaXMgbm90IHNldAogCiAjCiAjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydApAQCAtODkyLDYgKzkwOCw3IEBACiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC05MDIsMTkgKzkxOSwxOSBAQAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCitDT05GSUdfRklSTVdBUkVfRURJRD15CiBDT05GSUdfRkI9eQogQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CiBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKIENPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKIENPTkZJR19GQl9NQUNNT0RFUz15Ci1DT05GSUdfRkJfRklSTVdBUkVfRURJRD15CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PRj15Ci0jIENPTkZJR19GQl9DVDY1NTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0FTSUxJQU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKQEAgLTk5Myw2ICsxMDEwLDcgQEAKIENPTkZJR19VU0JfRUhDSV9IQ0Q9eQogIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTA4MywxMCArMTEwMSwxMiBAQAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CkBAIC0xMTI0LDEyICsxMTQ0LDE0IEBACiBDT05GSUdfSU5GSU5JQkFORD1tCiBDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRD1tCiBDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUz1tCitDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TPXkKIENPTkZJR19JTkZJTklCQU5EX01USENBPW0KIENPTkZJR19JTkZJTklCQU5EX01USENBX0RFQlVHPXkKIENPTkZJR19JTkZJTklCQU5EX0lQT0lCPW0KIENPTkZJR19JTkZJTklCQU5EX0lQT0lCX0RFQlVHPXkKICMgQ09ORklHX0lORklOSUJBTkRfSVBPSUJfREVCVUdfREFUQSBpcyBub3Qgc2V0CiBDT05GSUdfSU5GSU5JQkFORF9TUlA9bQorIyBDT05GSUdfSU5GSU5JQkFORF9JU0VSIGlzIG5vdCBzZXQKIAogIwogIyBFREFDIC0gZXJyb3IgZGV0ZWN0aW9uIGFuZCByZXBvcnRpbmcgKFJBUykgKEVYUEVSSU1FTlRBTCkKQEAgLTExNDEsNiArMTE2MywxOSBAQAogIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKIAogIworIyBETUEgRW5naW5lIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RNQV9FTkdJTkUgaXMgbm90IHNldAorCisjCisjIERNQSBDbGllbnRzCisjCisKKyMKKyMgRE1BIERldmljZXMKKyMKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTExNjksMTUgKzEyMDQsMTYgQEAKICMgQ09ORklHX0pGU19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKIENPTkZJR19GU19QT1NJWF9BQ0w9eQogQ09ORklHX1hGU19GUz1tCi1DT05GSUdfWEZTX0VYUE9SVD15CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CiAjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAogQ09ORklHX09DRlMyX0ZTPW0KK0NPTkZJR19PQ0ZTMl9ERUJVR19NQVNLTE9HPXkKICMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQogIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEyNTksOCArMTI5NSwxMCBAQAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DSUZTPW0KICMgQ09ORklHX0NJRlNfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19XRUFLX1BXX0hBU0ggaXMgbm90IHNldAogQ09ORklHX0NJRlNfWEFUVFI9eQogQ09ORklHX0NJRlNfUE9TSVg9eQorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldApAQCAtMTMyNiw2ICsxMzY0LDkgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPW0KK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfUExJU1Q9eQogCiAjCiAjIEluc3RydW1lbnRhdGlvbiBTdXBwb3J0CkBAIC0xMzM5LDE0ICsxMzgwLDE5IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNwogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0ZTPXkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDgxNGYyNDIuLjhiMTMzYWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTYsNyArMTYsNyBAQAogb2JqLXkJCQkJKz0gdmRzbzMyLwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gc2V0dXBfNjQubyBiaW5mbXRfZWxmMzIubyBzeXNfcHBjMzIubyBcCiAJCQkJICAgc2lnbmFsXzY0Lm8gcHRyYWNlMzIubyBcCi0JCQkJICAgcGFjYS5vIGNwdV9zZXR1cF9wb3dlcjQubyBcCisJCQkJICAgcGFjYS5vIGNwdV9zZXR1cF9wcGM5NzAubyBcCiAJCQkJICAgZmlybXdhcmUubyBzeXNmcy5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSB2ZHNvNjQvCiBvYmotJChDT05GSUdfQUxUSVZFQykJCSs9IHZlY2VtdS5vIHZlY3Rvci5vCkBAIC01MSw3ICs1MSw3IEBACiBleHRyYS15CQkJCSs9IHZtbGludXgubGRzCiAKIG9iai15CQkJCSs9IHRpbWUubyBwcm9tLm8gdHJhcHMubyBzZXR1cC1jb21tb24ubyBcCi0JCQkJICAgdWRiZy5vIG1pc2MubworCQkJCSAgIHVkYmcubyBtaXNjLm8gaW8ubwogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vIG1pc2NfMzIubwogb2JqLSQoQ09ORklHX1BQQzY0KQkJKz0gbWlzY182NC5vIGRtYV82NC5vIGlvbW11Lm8KIG9iai0kKENPTkZJR19QUENfTVVMVElQTEFURk9STSkJKz0gcHJvbV9pbml0Lm8KQEAgLTY3LDkgKzY3LDExIEBACiAJCQkJICAgcGNpX2RpcmVjdF9pb21tdS5vIGlvbWFwLm8KIHBjaTMyLSQoQ09ORklHX1BQQzMyKQkJOj0gcGNpXzMyLm8KIG9iai0kKENPTkZJR19QQ0kpCQkrPSAkKHBjaTY0LXkpICQocGNpMzIteSkKLWtleGVjLSQoQ09ORklHX1BQQzY0KQkJOj0gbWFjaGluZV9rZXhlY182NC5vIGNyYXNoLm8KK2tleGVjLSQoQ09ORklHX1BQQzY0KQkJOj0gbWFjaGluZV9rZXhlY182NC5vCiBrZXhlYy0kKENPTkZJR19QUEMzMikJCTo9IG1hY2hpbmVfa2V4ZWNfMzIubwotb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gbWFjaGluZV9rZXhlYy5vICQoa2V4ZWMteSkKK29iai0kKENPTkZJR19LRVhFQykJCSs9IG1hY2hpbmVfa2V4ZWMubyBjcmFzaC5vICQoa2V4ZWMteSkKK29iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KK29iajY0LSQoQ09ORklHX0FVRElUKQkJKz0gY29tcGF0X2F1ZGl0Lm8KIAogaWZlcSAoJChDT05GSUdfUFBDX0lTRVJJRVMpLHkpCiAkKG9iaikvaGVhZF82NC5vOiAkKG9iaikvbHBhcm1hcC5zCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggN2VlODQ5Ni4uZDA2ZjM3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtNDAsOSArNDAsMTAgQEAKICNpZmRlZiBDT05GSUdfUFBDNjQKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9jb21wYXQuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CisjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2VuZGlmCiAKICNkZWZpbmUgREVGSU5FKHN5bSwgdmFsKSBcCkBAIC0xMzYsMTEgKzEzNywxOCBAQAogCURFRklORShQQUNBX1NUQVJUUFVSUiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzdGFydHB1cnIpKTsKIAlERUZJTkUoUEFDQV9VU0VSX1RJTUUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgdXNlcl90aW1lKSk7CiAJREVGSU5FKFBBQ0FfU1lTVEVNX1RJTUUsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc3lzdGVtX3RpbWUpKTsKKwlERUZJTkUoUEFDQV9TTEJTSEFET1dQVFIsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2xiX3NoYWRvd19wdHIpKTsKKwlERUZJTkUoUEFDQV9EQVRBX09GRlNFVCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBkYXRhX29mZnNldCkpOwogCisJREVGSU5FKFNMQlNIQURPV19TVEFDS1ZTSUQsCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbGJfc2hhZG93LCBzYXZlX2FyZWFbU0xCX05VTV9CT0xURUQgLSAxXS52c2lkKSk7CisJREVGSU5FKFNMQlNIQURPV19TVEFDS0VTSUQsCisJICAgICAgIG9mZnNldG9mKHN0cnVjdCBzbGJfc2hhZG93LCBzYXZlX2FyZWFbU0xCX05VTV9CT0xURUQgLSAxXS5lc2lkKSk7CiAJREVGSU5FKExQUEFDQVNSUjAsIG9mZnNldG9mKHN0cnVjdCBscHBhY2EsIHNhdmVkX3NycjApKTsKIAlERUZJTkUoTFBQQUNBU1JSMSwgb2Zmc2V0b2Yoc3RydWN0IGxwcGFjYSwgc2F2ZWRfc3JyMSkpOwogCURFRklORShMUFBBQ0FBTllJTlQsIG9mZnNldG9mKHN0cnVjdCBscHBhY2EsIGludF9kd29yZC5hbnlfaW50KSk7CiAJREVGSU5FKExQUEFDQURFQ1JJTlQsIG9mZnNldG9mKHN0cnVjdCBscHBhY2EsIGludF9kd29yZC5maWVsZHMuZGVjcl9pbnQpKTsKKwlERUZJTkUoU0xCU0hBRE9XX1NBVkVBUkVBLCBvZmZzZXRvZihzdHJ1Y3Qgc2xiX3NoYWRvdywgc2F2ZV9hcmVhKSk7CiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIAkvKiBSVEFTICovCkBAIC0xNTksNiArMTY3LDEyIEBACiAJLyogQ3JlYXRlIGV4dHJhIHN0YWNrIHNwYWNlIGZvciBTUlIwIGFuZCBTUlIxIHdoZW4gY2FsbGluZyBwcm9tL3J0YXMuICovCiAJREVGSU5FKFBST01fRlJBTUVfU0laRSwgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpICsgMTYpOwogCURFRklORShSVEFTX0ZSQU1FX1NJWkUsIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgc2l6ZW9mKHN0cnVjdCBwdF9yZWdzKSArIDE2KTsKKworCS8qIGhjYWxsIHN0YXRpc3RpY3MgKi8KKwlERUZJTkUoSENBTExfU1RBVF9TSVpFLCBzaXplb2Yoc3RydWN0IGhjYWxsX3N0YXRzKSk7CisJREVGSU5FKEhDQUxMX1NUQVRfQ0FMTFMsIG9mZnNldG9mKHN0cnVjdCBoY2FsbF9zdGF0cywgbnVtX2NhbGxzKSk7CisJREVGSU5FKEhDQUxMX1NUQVRfVEIsIG9mZnNldG9mKHN0cnVjdCBoY2FsbF9zdGF0cywgdGJfdG90YWwpKTsKKwlERUZJTkUoSENBTExfU1RBVF9QVVJSLCBvZmZzZXRvZihzdHJ1Y3QgaGNhbGxfc3RhdHMsIHB1cnJfdG90YWwpKTsKICNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAlERUZJTkUoR1BSMCwgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQrb2Zmc2V0b2Yoc3RydWN0IHB0X3JlZ3MsIGdwclswXSkpOwogCURFRklORShHUFIxLCBTVEFDS19GUkFNRV9PVkVSSEVBRCtvZmZzZXRvZihzdHJ1Y3QgcHRfcmVncywgZ3ByWzFdKSk7CkBAIC0yNDAsNiArMjU0LDcgQEAKIAlERUZJTkUoQ1BVX1NQRUNfUFZSX1ZBTFVFLCBvZmZzZXRvZihzdHJ1Y3QgY3B1X3NwZWMsIHB2cl92YWx1ZSkpOwogCURFRklORShDUFVfU1BFQ19GRUFUVVJFUywgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfZmVhdHVyZXMpKTsKIAlERUZJTkUoQ1BVX1NQRUNfU0VUVVAsIG9mZnNldG9mKHN0cnVjdCBjcHVfc3BlYywgY3B1X3NldHVwKSk7CisJREVGSU5FKENQVV9TUEVDX1JFU1RPUkUsIG9mZnNldG9mKHN0cnVjdCBjcHVfc3BlYywgY3B1X3Jlc3RvcmUpKTsKIAogI2lmbmRlZiBDT05GSUdfUFBDNjQKIAlERUZJTkUocGJlX2FkZHJlc3MsIG9mZnNldG9mKHN0cnVjdCBwYmUsIGFkZHJlc3MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmU1ZTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hdWRpdC5jCkBAIC0wLDAgKzEsNjYgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworc3RhdGljIHVuc2lnbmVkIGRpcl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oPgorfjBVCit9OworCitzdGF0aWMgdW5zaWduZWQgcmVhZF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIHdyaXRlX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXR0cl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Cit+MFUKK307CisKK2ludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCit7CisjaWZkZWYgQ09ORklHX1BQQzY0CisJZXh0ZXJuIGludCBwcGMzMl9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkKTsKKwlpZiAoYWJpID09IEFVRElUX0FSQ0hfUFBDKQorCQlyZXR1cm4gcHBjMzJfY2xhc3NpZnlfc3lzY2FsbChzeXNjYWxsKTsKKyNlbmRpZgorCXN3aXRjaChzeXNjYWxsKSB7CisJY2FzZSBfX05SX29wZW46CisJCXJldHVybiAyOworCWNhc2UgX19OUl9vcGVuYXQ6CisJCXJldHVybiAzOworCWNhc2UgX19OUl9zb2NrZXRjYWxsOgorCQlyZXR1cm4gNDsKKwljYXNlIF9fTlJfZXhlY3ZlOgorCQlyZXR1cm4gNTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGF1ZGl0X2NsYXNzZXNfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19QUEM2NAorCWV4dGVybiBfX3UzMiBwcGMzMl9kaXJfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgcHBjMzJfd3JpdGVfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgcHBjMzJfcmVhZF9jbGFzc1tdOworCWV4dGVybiBfX3UzMiBwcGMzMl9jaGF0dHJfY2xhc3NbXTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURV8zMiwgcHBjMzJfd3JpdGVfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQURfMzIsIHBwYzMyX3JlYWRfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiwgcHBjMzJfZGlyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFJfMzIsIHBwYzMyX2NoYXR0cl9jbGFzcyk7CisjZW5kaWYKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURSwgd3JpdGVfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQUQsIHJlYWRfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFIsIGNoYXR0cl9jbGFzcyk7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwoYXVkaXRfY2xhc3Nlc19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwppbmRleCBmNGU1ZTE0ZS4uOTk1ZmNlZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9idGV4dC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYnRleHQuYwpAQCAtMTU4LDM1ICsxNTgsMzUgQEAKIHsKIAl1bnNpZ25lZCBpbnQgd2lkdGgsIGhlaWdodCwgZGVwdGgsIHBpdGNoOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IDA7Ci0JdTMyICpwcm9wOworCWNvbnN0IHUzMiAqcHJvcDsKIAotCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtd2lkdGgiLCBOVUxMKTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtd2lkdGgiLCBOVUxMKTsKIAlpZiAocHJvcCA9PSBOVUxMKQotCQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgIndpZHRoIiwgTlVMTCk7CisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJ3aWR0aCIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCXdpZHRoID0gKnByb3A7Ci0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJsaW51eCxib290eC1oZWlnaHQiLCBOVUxMKTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtaGVpZ2h0IiwgTlVMTCk7CiAJaWYgKHByb3AgPT0gTlVMTCkKLQkJcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJoZWlnaHQiLCBOVUxMKTsKKwkJcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgImhlaWdodCIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCWhlaWdodCA9ICpwcm9wOwotCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtZGVwdGgiLCBOVUxMKTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtZGVwdGgiLCBOVUxMKTsKIAlpZiAocHJvcCA9PSBOVUxMKQotCQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImRlcHRoIiwgTlVMTCk7CisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJkZXB0aCIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCWRlcHRoID0gKnByb3A7CiAJcGl0Y2ggPSB3aWR0aCAqICgoZGVwdGggKyA3KSAvIDgpOwotCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAibGludXgsYm9vdHgtbGluZWJ5dGVzIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgImxpbnV4LGJvb3R4LWxpbmVieXRlcyIsIE5VTEwpOwogCWlmIChwcm9wID09IE5VTEwpCi0JCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAibGluZWJ5dGVzIiwgTlVMTCk7CisJCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJsaW5lYnl0ZXMiLCBOVUxMKTsKIAlpZiAocHJvcCkKIAkJcGl0Y2ggPSAqcHJvcDsKIAlpZiAocGl0Y2ggPT0gMSkKIAkJcGl0Y2ggPSAweDEwMDA7Ci0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJhZGRyZXNzIiwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgImFkZHJlc3MiLCBOVUxMKTsKIAlpZiAocHJvcCkKIAkJYWRkcmVzcyA9ICpwcm9wOwogCkBAIC0yMTQsMTEgKzIxNCwxMSBAQAogCiBpbnQgX19pbml0IGJ0ZXh0X2ZpbmRfZGlzcGxheShpbnQgYWxsb3dfbm9uc3Rkb3V0KQogewotCWNoYXIgKm5hbWU7CisJY29uc3QgY2hhciAqbmFtZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gTlVMTDsgCiAJaW50IHJjID0gLUVOT0RFVjsKIAotCW5hbWUgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxzdGRvdXQtcGF0aCIsIE5VTEwpOworCW5hbWUgPSBnZXRfcHJvcGVydHkob2ZfY2hvc2VuLCAibGludXgsc3Rkb3V0LXBhdGgiLCBOVUxMKTsKIAlpZiAobmFtZSAhPSBOVUxMKSB7CiAJCW5wID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgobmFtZSk7CiAJCWlmIChucCAhPSBOVUxMKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NvbXBhdF9hdWRpdC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jb21wYXRfYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDBkNGJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jb21wYXRfYXVkaXQuYwpAQCAtMCwwICsxLDM4IEBACisjdW5kZWYgX19wb3dlcnBjNjRfXworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKwordW5zaWduZWQgcHBjMzJfZGlyX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfZGlyX3dyaXRlLmg+Cit+MFUKK307CisKK3Vuc2lnbmVkIHBwYzMyX2NoYXR0cl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Cit+MFUKK307CisKK3Vuc2lnbmVkIHBwYzMyX3dyaXRlX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaD4KK34wVQorfTsKKwordW5zaWduZWQgcHBjMzJfcmVhZF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaD4KK34wVQorfTsKKworaW50IHBwYzMyX2NsYXNzaWZ5X3N5c2NhbGwodW5zaWduZWQgc3lzY2FsbCkKK3sKKwlzd2l0Y2goc3lzY2FsbCkgeworCWNhc2UgX19OUl9vcGVuOgorCQlyZXR1cm4gMjsKKwljYXNlIF9fTlJfb3BlbmF0OgorCQlyZXR1cm4gMzsKKwljYXNlIF9fTlJfc29ja2V0Y2FsbDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBfX05SX2V4ZWN2ZToKKwkJcmV0dXJuIDU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wcGM5NzAuUwpzaW1pbGFyaXR5IGluZGV4IDczJQpyZW5hbWUgZnJvbSBhcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF9wb3dlcjQuUwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcHBjOTcwLlMKaW5kZXggZjY5YWYyYy4uNjUyNTk0OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcG93ZXI0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfcHBjOTcwLlMKQEAgLTE2LDI3ICsxNiwxMiBAQAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogCi1fR0xPQkFMKF9fOTcwX2NwdV9wcmVpbml0KQotCS8qCi0JICogRG8gbm90aGluZyBpZiBub3QgcnVubmluZyBpbiBIViBtb2RlCi0JICovCitfR0xPQkFMKF9fY3B1X3ByZWluaXRfcHBjOTcwKQorCS8qIERvIG5vdGhpbmcgaWYgbm90IHJ1bm5pbmcgaW4gSFYgbW9kZSAqLwogCW1mbXNyCXIwCiAJcmxkaWNsLglyMCxyMCw0LDYzCiAJYmVxbHIKIAotCS8qCi0JICogRGVhbCBvbmx5IHdpdGggUFBDOTcwIGFuZCBQUEM5NzBGWC4KLQkgKi8KLQltZnNwcglyMCxTUFJOX1BWUgotCXNyd2kJcjAscjAsMTYKLQljbXB3aQlyMCwweDM5Ci0JYmVxCTFmCi0JY21wd2kJcjAsMHgzYwotCWJlcQkxZgotCWNtcHdpCXIwLDB4NDQKLQlibmVscgotMToKLQogCS8qIE1ha2Ugc3VyZSBISUQ0OnJtX2NpIGlzIG9mZiBiZWZvcmUgTU1VIGlzIHR1cm5lZCBvZmYsIHRoYXQgbGFyZ2UKIAkgKiBwYWdlcyBhcmUgZW5hYmxlZCB3aXRoIEhJRDQ6NjEgYW5kIGNsZWFyIEhJRDU6RENCWl9zaXplIGFuZAogCSAqIEhJRDU6RENCWjMyX2lsbApAQCAtNzIsMjEgKzU3LDYgQEAKIAlpc3luYwogCWJscgogCi1fR0xPQkFMKF9fc2V0dXBfY3B1X3BwYzk3MCkKLQltZnNwcglyMCxTUFJOX0hJRDAKLQlsaQlyMTEsNQkJCS8qIGNsZWFyIERPWkUgYW5kIFNMRUVQICovCi0JcmxkaW1pCXIwLHIxMSw1Miw4CQkvKiBzZXQgTkFQIGFuZCBEUE0gKi8KLQltdHNwcglTUFJOX0hJRDAscjAKLQltZnNwcglyMCxTUFJOX0hJRDAKLQltZnNwcglyMCxTUFJOX0hJRDAKLQltZnNwcglyMCxTUFJOX0hJRDAKLQltZnNwcglyMCxTUFJOX0hJRDAKLQltZnNwcglyMCxTUFJOX0hJRDAKLQltZnNwcglyMCxTUFJOX0hJRDAKLQlzeW5jCi0JaXN5bmMKLQlibHIKLQogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSB0YWJsZSB1c2UgdG8gc2F2ZSBDUFUgc3RhdGVzICovCiAjZGVmaW5lIENTX0hJRDAJCTAKICNkZWZpbmUgQ1NfSElEMQkJOApAQCAtMTAxLDMzICs3MSwzMCBAQAogCS5iYWxpZ24JTDFfQ0FDSEVfQllURVMsMAogCS50ZXh0CiAKLS8qIENhbGxlZCBpbiBub3JtYWwgY29udGV4dCB0byBiYWNrdXAgQ1BVIDAgc3RhdGUuIFRoaXMKLSAqIGRvZXMgbm90IGluY2x1ZGUgY2FjaGUgc2V0dGluZ3MuIFRoaXMgZnVuY3Rpb24gaXMgYWxzbwotICogY2FsbGVkIGZvciBtYWNoaW5lIHNsZWVwLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgdGhlIE1NVQotICogc2V0dXAsIEJBVHMsIGV0Yy4uLiBidXQgcmF0aGVyIHRoZSAic3BlY2lhbCIgcmVnaXN0ZXJzCi0gKiBsaWtlIEhJRDAsIEhJRDEsIEhJRDQsIGV0Yy4uLgotICovCi1fR0xPQkFMKF9fc2F2ZV9jcHVfc2V0dXApCi0JLyogU29tZSBDUiBmaWVsZHMgYXJlIHZvbGF0aWxlLCB3ZSBiYWNrIGl0IHVwIGFsbCAqLwotCW1mY3IJcjcKIAotCS8qIEdldCBzdG9yYWdlIHB0ciAqLwotCUxPQURfUkVHX0lNTUVESUFURShyNSxjcHVfc3RhdGVfc3RvcmFnZSkKLQotCS8qIFdlIG9ubHkgZGVhbCB3aXRoIDk3MCBmb3Igbm93ICovCi0JbWZzcHIJcjAsU1BSTl9QVlIKLQlzcndpCXIwLHIwLDE2Ci0JY21wd2kJcjAsMHgzOQotCWJlcQkxZgotCWNtcHdpCXIwLDB4M2MKLQliZXEJMWYKLQljbXB3aQlyMCwweDQ0Ci0JYm5lCTJmCi0KLTE6CS8qIHNraXAgaWYgbm90IHJ1bm5pbmcgaW4gSFYgbW9kZSAqLworX0dMT0JBTChfX3NldHVwX2NwdV9wcGM5NzApCisJLyogRG8gbm90aGluZyBpZiBub3QgcnVubmluZyBpbiBIViBtb2RlICovCiAJbWZtc3IJcjAKIAlybGRpY2wuCXIwLHIwLDQsNjMKLQliZXEJMmYKKwliZXFscgorCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJbGkJcjExLDUJCQkvKiBjbGVhciBET1pFIGFuZCBTTEVFUCAqLworCXJsZGltaQlyMCxyMTEsNTIsOAkJLyogc2V0IE5BUCBhbmQgRFBNICovCisJbGkJcjExLDAKKwlybGRpbWkJcjAscjExLDMyLDMxCQkvKiBjbGVhciBFTl9BVFROICovCisJbXRzcHIJU1BSTl9ISUQwLHIwCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJbWZzcHIJcjAsU1BSTl9ISUQwCisJc3luYworCWlzeW5jCisKKwkvKiBTYXZlIGF3YXkgY3B1IHN0YXRlICovCisJTE9BRF9SRUdfSU1NRURJQVRFKHI1LGNwdV9zdGF0ZV9zdG9yYWdlKQogCiAJLyogU2F2ZSBISUQwLDEsNCBhbmQgNSAqLwogCW1mc3ByCXIzLFNQUk5fSElEMApAQCAtMTM5LDM1ICsxMDYsMTkgQEAKIAltZnNwcglyMyxTUFJOX0hJRDUKIAlzdGQJcjMsQ1NfSElENShyNSkKIAotMjoKLQltdGNyCXI3CiAJYmxyCiAKIC8qIENhbGxlZCB3aXRoIG5vIE1NVSBjb250ZXh0ICh0eXBpY2FsbHkgTVNSOklSL0RSIG9mZikgdG8KICAqIHJlc3RvcmUgQ1BVIHN0YXRlIGFzIGJhY2tlZCB1cCBieSB0aGUgcHJldmlvdXMKICAqIGZ1bmN0aW9uLiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgY2FjaGUgc2V0dGluZwogICovCi1fR0xPQkFMKF9fcmVzdG9yZV9jcHVfc2V0dXApCi0JLyogR2V0IHN0b3JhZ2UgcHRyIChGSVhNRSB3aGVuIHVzaW5nIGFudG9uIHJlbG9jIGFzIHdlCi0JICogYXJlIHJ1bm5pbmcgd2l0aCB0cmFuc2xhdGlvbiBkaXNhYmxlZCBoZXJlCi0JICovCi0JTE9BRF9SRUdfSU1NRURJQVRFKHI1LGNwdV9zdGF0ZV9zdG9yYWdlKQotCi0JLyogV2Ugb25seSBkZWFsIHdpdGggOTcwIGZvciBub3cgKi8KLQltZnNwcglyMCxTUFJOX1BWUgotCXNyd2kJcjAscjAsMTYKLQljbXB3aQlyMCwweDM5Ci0JYmVxCTFmCi0JY21wd2kJcjAsMHgzYwotCWJlcQkxZgotCWNtcHdpCXIwLDB4NDQKLQlibmVscgotCi0xOgkvKiBza2lwIGlmIG5vdCBydW5uaW5nIGluIEhWIG1vZGUgKi8KK19HTE9CQUwoX19yZXN0b3JlX2NwdV9wcGM5NzApCisJLyogRG8gbm90aGluZyBpZiBub3QgcnVubmluZyBpbiBIViBtb2RlICovCiAJbWZtc3IJcjAKIAlybGRpY2wuCXIwLHIwLDQsNjMKIAliZXFscgogCisJTE9BRF9SRUdfSU1NRURJQVRFKHI1LGNwdV9zdGF0ZV9zdG9yYWdlKQogCS8qIEJlZm9yZSBhY2Nlc3NpbmcgbWVtb3J5LCB3ZSBtYWtlIHN1cmUgcm1fY2kgaXMgY2xlYXIgKi8KIAlsaQlyMCwwCiAJbWZzcHIJcjMsU1BSTl9ISUQ0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKaW5kZXggMjcyZTQzNi4uMTkwYTU3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwpAQCAtMzksNyArMzksMTAgQEAKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1Xzc0MTAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV83NDV4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwogI2VuZGlmIC8qIENPTkZJR19QUEMzMiAqLworI2lmZGVmIENPTkZJR19QUEM2NAogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfcHBjOTcwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19yZXN0b3JlX2NwdV9wcGM5NzAodm9pZCk7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKIC8qIFRoaXMgdGFibGUgb25seSBjb250YWlucyAiZGVza3RvcCIgQ1BVcywgaXQgbmVlZCB0byBiZSBmaWxsZWQgd2l0aCBlbWJlZGRlZAogICogb25lcyBhcyB3ZWxsLi4uCkBAIC01NSw2ICs1OCw5IEBACiAjZGVmaW5lIENPTU1PTl9VU0VSX1BPV0VSNgkoQ09NTU9OX1VTRVJfUFBDNjQgfCBQUENfRkVBVFVSRV9BUkNIXzJfMDUgfFwKIAkJCQkgUFBDX0ZFQVRVUkVfU01UIHwgUFBDX0ZFQVRVUkVfSUNBQ0hFX1NOT09QIHwgXAogCQkJCSBQUENfRkVBVFVSRV9UUlVFX0xFKQorI2RlZmluZSBDT01NT05fVVNFUl9QQTZUCShDT01NT05fVVNFUl9QUEM2NCB8IFBQQ19GRUFUVVJFX1BBNlQgfFwKKwkJCQkgUFBDX0ZFQVRVUkVfVFJVRV9MRSB8IFwKKwkJCQkgUFBDX0ZFQVRVUkVfSEFTX0FMVElWRUNfQ09NUCkKICNkZWZpbmUgQ09NTU9OX1VTRVJfQk9PS0UJKFBQQ19GRUFUVVJFXzMyIHwgUFBDX0ZFQVRVUkVfSEFTX01NVSB8IFwKIAkJCQkgUFBDX0ZFQVRVUkVfQk9PS0UpCiAKQEAgLTE4NCw2ICsxOTAsNyBAQAogCQkuZGNhY2hlX2JzaXplCQk9IDEyOCwKIAkJLm51bV9wbWNzCQk9IDgsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfcHBjOTcwLAorCQkuY3B1X3Jlc3RvcmUJCT0gX19yZXN0b3JlX2NwdV9wcGM5NzAsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGM2NC85NzAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfUE9XRVI0LAogCQkucGxhdGZvcm0JCT0gInBwYzk3MCIsCkBAIC0xOTksNiArMjA2LDcgQEAKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5udW1fcG1jcwkJPSA4LAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X3BwYzk3MCwKKwkJLmNwdV9yZXN0b3JlCQk9IF9fcmVzdG9yZV9jcHVfcHBjOTcwLAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjNjQvOTcwIiwKIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX1BPV0VSNCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM5NzAiLApAQCAtMjE0LDYgKzIyMiw3IEBACiAJCS5kY2FjaGVfYnNpemUJCT0gMTI4LAogCQkubnVtX3BtY3MJCT0gOCwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9wcGM5NzAsCisJCS5jcHVfcmVzdG9yZQkJPSBfX3Jlc3RvcmVfY3B1X3BwYzk3MCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYzY0Lzk3MCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9QT1dFUjQsCiAJCS5wbGF0Zm9ybQkJPSAicHBjOTcwIiwKQEAgLTI4MCw2ICsyODksMTcgQEAKIAkJLmRjYWNoZV9ic2l6ZQkJPSAxMjgsCiAJCS5wbGF0Zm9ybQkJPSAicHBjLWNlbGwtYmUiLAogCX0sCisJewkvKiBQQSBTZW1pIFBBNlQgKi8KKwkJLnB2cl9tYXNrCQk9IDB4N2ZmZjAwMDAsCisJCS5wdnJfdmFsdWUJCT0gMHgwMDkwMDAwMCwKKwkJLmNwdV9uYW1lCQk9ICJQQTZUIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19QQTZULAorCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUl9QQTZULAorCQkuaWNhY2hlX2JzaXplCQk9IDY0LAorCQkuZGNhY2hlX2JzaXplCQk9IDY0LAorCQkubnVtX3BtY3MJCT0gNiwKKwkJLnBsYXRmb3JtCQk9ICJwYTZ0IiwKKwl9LAogCXsJLyogZGVmYXVsdCBtYXRjaCAqLwogCQkucHZyX21hc2sJCT0gMHgwMDAwMDAwMCwKIAkJLnB2cl92YWx1ZQkJPSAweDAwMDAwMDAwLApAQCAtOTI5LDYgKzk0OSw3IEBACiAJCQlQUENfRkVBVFVSRV9IQVNfTU1VIHwgUFBDX0ZFQVRVUkVfSEFTXzR4eE1BQywKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0MDUiLAogCX0sCiAJewkvKiA0MDVFUCAqLwogCQkucHZyX21hc2sJCT0gMHhmZmZmMDAwMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2guYwppbmRleCAzNThjZWNkLi4xYWY0MWY3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaC5jCkBAIC00NCw2ICs0NCw3IEBACiAvKiBUaGlzIGtlZXBzIGEgdHJhY2sgb2Ygd2hpY2ggb25lIGlzIGNyYXNoaW5nIGNwdS4gKi8KIGludCBjcmFzaGluZ19jcHUgPSAtMTsKIHN0YXRpYyBjcHVtYXNrX3QgY3B1c19pbl9jcmFzaCA9IENQVV9NQVNLX05PTkU7CitjcHVtYXNrX3QgY3B1c19pbl9zciA9IENQVV9NQVNLX05PTkU7CiAKIHN0YXRpYyB1MzIgKmFwcGVuZF9lbGZfbm90ZSh1MzIgKmJ1ZiwgY2hhciAqbmFtZSwgdW5zaWduZWQgdHlwZSwgdm9pZCAqZGF0YSwKIAkJCQkJCQkgICAgICAgc2l6ZV90IGRhdGFfbGVuKQpAQCAtMTM5LDcgKzE0MCwxMyBAQAogCiAJaWYgKHBwY19tZC5rZXhlY19jcHVfZG93bikKIAkJcHBjX21kLmtleGVjX2NwdV9kb3duKDEsIDEpOworCisjaWZkZWYgQ09ORklHX1BQQzY0CiAJa2V4ZWNfc21wX3dhaXQoKTsKKyNlbHNlCisJZm9yICg7Oyk7CS8qIEZJWE1FICovCisjZW5kaWYKKwogCS8qIE5PVFJFQUNIRUQgKi8KIH0KIApAQCAtMjU1LDcgKzI2MiwxMSBAQAogCSAqCiAJICogZG8gdGhpcyBpZiBrZXhlYyBpbiBzZXR1cC5jID8KIAkgKi8KKyNpZmRlZiBDT05GSUdfUFBDNjQKIAlzbXBfcmVsZWFzZV9jcHVzKCk7CisjZWxzZQorCS8qIEZJWE1FICovCisjZW5kaWYKIH0KIAogdm9pZCBjcmFzaF9rZXhlY19zZWNvbmRhcnkoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0yODQsNyArMjk1LDcgQEAKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAKIAkJaWYgKGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKQotCQkJZGVzYy0+Y2hpcC0+ZW5kKGlycSk7CisJCQlkZXNjLT5jaGlwLT5lb2koaXJxKTsKIAogCQlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpKQogCQkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcmFzaF9kdW1wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYwppbmRleCAzNzE5NzNiLi4yZjZmNWE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYwpAQCAtODAsNyArODAsNyBAQAogfQogX19zZXR1cCgic2F2ZW1heG1lbT0iLCBwYXJzZV9zYXZlbWF4bWVtKTsKIAotLyoKKy8qKgogICogY29weV9vbGRtZW1fcGFnZSAtIGNvcHkgb25lIHBhZ2UgZnJvbSAib2xkbWVtIgogICogQHBmbjogcGFnZSBmcmFtZSBudW1iZXIgdG8gYmUgY29waWVkCiAgKiBAYnVmOiB0YXJnZXQgbWVtb3J5IGFkZHJlc3MgZm9yIHRoZSBjb3B5OyB0aGlzIGNhbiBiZSBpbiBrZXJuZWwgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWFfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZG1hXzY0LmMKaW5kZXggMzZhYWE3Ni4uNmMxNjhmNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9kbWFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2RtYV82NC5jCkBAIC0zNSwxMCArMzUsOSBAQAogewogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCi0JaWYgKGRtYV9vcHMpCi0JCXJldHVybiBkbWFfb3BzLT5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7Ci0JQlVHKCk7Ci0JcmV0dXJuIDA7CisJQlVHX09OKCFkbWFfb3BzKTsKKworCXJldHVybiBkbWFfb3BzLT5kbWFfc3VwcG9ydGVkKGRldiwgbWFzayk7CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9zdXBwb3J0ZWQpOwogCkBAIC02NiwxMCArNjUsOSBAQAogewogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCi0JaWYgKGRtYV9vcHMpCi0JCXJldHVybiBkbWFfb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOwotCUJVRygpOwotCXJldHVybiBOVUxMOworCUJVR19PTighZG1hX29wcyk7CisKKwlyZXR1cm4gZG1hX29wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFnKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX2FsbG9jX2NvaGVyZW50KTsKIApAQCAtNzgsMTAgKzc2LDkgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCWlmIChkbWFfb3BzKQotCQlkbWFfb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOwotCWVsc2UKLQkJQlVHKCk7CisJQlVHX09OKCFkbWFfb3BzKTsKKworCWRtYV9vcHMtPmZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2NvaGVyZW50KTsKIApAQCAtOTAsMTAgKzg3LDkgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCWlmIChkbWFfb3BzKQotCQlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwotCUJVRygpOwotCXJldHVybiAoZG1hX2FkZHJfdCkwOworCUJVR19PTighZG1hX29wcyk7CisKKwlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsIGNwdV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwogfQogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NpbmdsZSk7CiAKQEAgLTEwMiwxMCArOTgsOSBAQAogewogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCi0JaWYgKGRtYV9vcHMpCi0JCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwotCWVsc2UKLQkJQlVHKCk7CisJQlVHX09OKCFkbWFfb3BzKTsKKworCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXJlY3Rpb24pOwogfQogRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfc2luZ2xlKTsKIApAQCAtMTE1LDExICsxMTAsMTAgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCWlmIChkbWFfb3BzKQotCQlyZXR1cm4gZG1hX29wcy0+bWFwX3NpbmdsZShkZXYsCi0JCQkJKHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCksIHNpemUsIGRpcmVjdGlvbik7Ci0JQlVHKCk7Ci0JcmV0dXJuIChkbWFfYWRkcl90KTA7CisJQlVHX09OKCFkbWFfb3BzKTsKKworCXJldHVybiBkbWFfb3BzLT5tYXBfc2luZ2xlKGRldiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBzaXplLAorCQkJZGlyZWN0aW9uKTsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX21hcF9wYWdlKTsKIApAQCAtMTI4LDEwICsxMjIsOSBAQAogewogCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCi0JaWYgKGRtYV9vcHMpCi0JCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24pOwotCWVsc2UKLQkJQlVHKCk7CisJQlVHX09OKCFkbWFfb3BzKTsKKworCWRtYV9vcHMtPnVubWFwX3NpbmdsZShkZXYsIGRtYV9hZGRyZXNzLCBzaXplLCBkaXJlY3Rpb24pOwogfQogRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfcGFnZSk7CiAKQEAgLTE0MCwxMCArMTMzLDkgQEAKIHsKIAlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCWlmIChkbWFfb3BzKQotCQlyZXR1cm4gZG1hX29wcy0+bWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOwotCUJVRygpOwotCXJldHVybiAwOworCUJVR19PTighZG1hX29wcyk7CisKKwlyZXR1cm4gZG1hX29wcy0+bWFwX3NnKGRldiwgc2csIG5lbnRzLCBkaXJlY3Rpb24pOwogfQogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKIApAQCAtMTUyLDkgKzE0NCw4IEBACiB7CiAJc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKLQlpZiAoZG1hX29wcykKLQkJZG1hX29wcy0+dW5tYXBfc2coZGV2LCBzZywgbmh3ZW50cmllcywgZGlyZWN0aW9uKTsKLQllbHNlCi0JCUJVRygpOworCUJVR19PTighZG1hX29wcyk7CisKKwlkbWFfb3BzLT51bm1hcF9zZyhkZXYsIHNnLCBuaHdlbnRyaWVzLCBkaXJlY3Rpb24pOwogfQogRVhQT1JUX1NZTUJPTChkbWFfdW5tYXBfc2cpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDU0ZDlmNWMuLjJjZDg3MmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTM3NSw2ICszNzUsMTQgQEAKIAlsZAlyNyxLU1BfVlNJRChyNCkJLyogR2V0IG5ldyBzdGFjaydzIFZTSUQgKi8KIAlvcmlzCXIwLHI2LChTTEJfRVNJRF9WKUBoCiAJb3JpCXIwLHIwLChTTEJfTlVNX0JPTFRFRC0xKUBsCisKKwkvKiBVcGRhdGUgdGhlIGxhc3QgYm9sdGVkIFNMQiAqLworCWxkCXI5LFBBQ0FfU0xCU0hBRE9XUFRSKHIxMykKKwlsaQlyMTIsMAorCXN0ZAlyMTIsU0xCU0hBRE9XX1NUQUNLRVNJRChyOSkgLyogQ2xlYXIgRVNJRCAqLworCXN0ZAlyNyxTTEJTSEFET1dfU1RBQ0tWU0lEKHI5KSAgLyogU2F2ZSBWU0lEICovCisJc3RkCXIwLFNMQlNIQURPV19TVEFDS0VTSUQocjkpICAvKiBTYXZlIEVTSUQgKi8KKwogCXNsYmllCXI2CiAJc2xiaWUJcjYJCS8qIFdvcmthcm91bmQgUE9XRVI1IDwgREQyLjEgaXNzdWUgKi8KIAlzbGJtdGUJcjcscjAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2ZwdS5TCmluZGV4IDdlMmM5ZmUuLjgyMWUxNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnB1LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mcHUuUwpAQCAtMiw2ICsyLDExIEBACiAgKiAgRlBVIHN1cHBvcnQgY29kZSwgbW92ZWQgaGVyZSBmcm9tIGhlYWQuUyBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkCiAgKiAgYnkgY2hpcHMgd2hpY2ggdXNlIG90aGVyIGhlYWQtd2hhdGV2ZXIuUyBmaWxlcy4KICAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKKyAqICAgIENvcHlyaWdodCAoQykgMTk5NiBDb3J0IERvdWdhbiA8Y29ydEBjcy5ubXQuZWR1PgorICogICAgQ29weXJpZ2h0IChDKSAxOTk2IFBhdWwgTWFja2VycmFzLgorICogICAgQ29weXJpZ2h0IChDKSAxOTk3IERhbiBNYWxlayAoZG1hbGVrQGpsYy5uZXQpLgorICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZTE2ZWIyYS4uMzA2NWI0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTEzMiw3ICsxMzIsNyBAQAogCWJuZQkxMDBiCiAKICNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX0tFWEVDKQotCUxPQURfUkVHX0lNTUVESUFURShyNCwgLnBTZXJpZXNfc2Vjb25kYXJ5X3NtcF9pbml0KQorCUxPQURfUkVHX0lNTUVESUFURShyNCwgLmdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KQogCW10Y3RyCXI0CiAJbXIJcjMscjI0CiAJYmN0cgpAQCAtMTkxLDYgKzE5MSwzNyBAQAogCW9yaQlyZWcscmVnLChsYWJlbClAbDsJLyogdmlydCBhZGRyIG9mIGhhbmRsZXIgLi4uICovCiAjZW5kaWYKIAorLyoKKyAqIEVxdWFsIHRvIEVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUywgZXhjZXB0IHRoYXQgaXQgZm9yY2VzIDY0Yml0IG1vZGUuCisgKiBUaGUgZmlybXdhcmUgY2FsbHMgdGhlIHJlZ2lzdGVyZWQgc3lzdGVtX3Jlc2V0X2Z3bm1pIGFuZAorICogbWFjaGluZV9jaGVja19md25taSBoYW5kbGVycyBpbiAzMmJpdCBtb2RlIGlmIHRoZSBjcHUgaGFwcGVucyB0byBydW4KKyAqIGEgMzJiaXQgYXBwbGljYXRpb24gYXQgdGhlIHRpbWUgb2YgdGhlIGV2ZW50LgorICogVGhpcyBmaXJtd2FyZSBidWcgaXMgcHJlc2VudCBvbiBQT1dFUjQgYW5kIEpTMjAuCisgKi8KKyNkZWZpbmUgRVhDRVBUSU9OX1BST0xPR19QU0VSSUVTX0ZPUkNFXzY0QklUKGFyZWEsIGxhYmVsKQkJXAorCW1mc3ByCXIxMyxTUFJOX1NQUkczOwkJLyogZ2V0IHBhY2EgYWRkcmVzcyBpbnRvIHIxMyAqLwlcCisJc3RkCXI5LGFyZWErRVhfUjkocjEzKTsJLyogc2F2ZSByOSAtIHIxMiAqLwkJXAorCXN0ZAlyMTAsYXJlYStFWF9SMTAocjEzKTsJCQkJCVwKKwlzdGQJcjExLGFyZWErRVhfUjExKHIxMyk7CQkJCQlcCisJc3RkCXIxMixhcmVhK0VYX1IxMihyMTMpOwkJCQkJXAorCW1mc3ByCXI5LFNQUk5fU1BSRzE7CQkJCQkJXAorCXN0ZAlyOSxhcmVhK0VYX1IxMyhyMTMpOwkJCQkJXAorCW1mY3IJcjk7CQkJCQkJCVwKKwljbHJyZGkJcjEyLHIxMywzMjsJCS8qIGdldCBoaWdoIHBhcnQgb2YgJmxhYmVsICovCVwKKwltZm1zcglyMTA7CQkJCQkJCVwKKwkvKiBmb3JjZSA2NGJpdCBtb2RlICovCQkJCQkJXAorCWxpCXIxMSw1OwkJCS8qIE1TUl9TRl9MR3xNU1JfSVNGX0xHICovCVwKKwlybGRpbWkJcjEwLHIxMSw2MSwwOwkJLyogaW5zZXJ0IGludG8gdG9wIDMgYml0cyAqLwlcCisJLyogZG9uZSA2NGJpdCBtb2RlICovCQkJCQkJXAorCW1mc3ByCXIxMSxTUFJOX1NSUjA7CQkvKiBzYXZlIFNSUjAgKi8JCQlcCisJTE9BRF9IQU5ETEVSKHIxMixsYWJlbCkJCQkJCQlcCisJb3JpCXIxMCxyMTAsTVNSX0lSfE1TUl9EUnxNU1JfUkk7CQkJCVwKKwltdHNwcglTUFJOX1NSUjAscjEyOwkJCQkJCVwKKwltZnNwcglyMTIsU1BSTl9TUlIxOwkJLyogYW5kIFNSUjEgKi8JCQlcCisJbXRzcHIJU1BSTl9TUlIxLHIxMDsJCQkJCQlcCisJcmZpZDsJCQkJCQkJCVwKKwliCS4JLyogcHJldmVudCBzcGVjdWxhdGl2ZSBleGVjdXRpb24gKi8KKwogI2RlZmluZSBFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoYXJlYSwgbGFiZWwpCQkJCVwKIAltZnNwcglyMTMsU1BSTl9TUFJHMzsJCS8qIGdldCBwYWNhIGFkZHJlc3MgaW50byByMTMgKi8JXAogCXN0ZAlyOSxhcmVhK0VYX1I5KHIxMyk7CS8qIHNhdmUgcjkgLSByMTIgKi8JCVwKQEAgLTYwNCwxNCArNjM1LDE0IEBACiBzeXN0ZW1fcmVzZXRfZndubWk6CiAJSE1UX01FRElVTQogCW10c3ByCVNQUk5fU1BSRzEscjEzCQkvKiBzYXZlIHIxMyAqLwotCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFUyhQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uKQorCUVYQ0VQVElPTl9QUk9MT0dfUFNFUklFU19GT1JDRV82NEJJVChQQUNBX0VYR0VOLCBzeXN0ZW1fcmVzZXRfY29tbW9uKQogCiAJLmdsb2JsIG1hY2hpbmVfY2hlY2tfZndubWkKICAgICAgIC5hbGlnbiA3CiBtYWNoaW5lX2NoZWNrX2Z3bm1pOgogCUhNVF9NRURJVU0KIAltdHNwcglTUFJOX1NQUkcxLHIxMwkJLyogc2F2ZSByMTMgKi8KLQlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVMoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbikKKwlFWENFUFRJT05fUFJPTE9HX1BTRVJJRVNfRk9SQ0VfNjRCSVQoUEFDQV9FWE1DLCBtYWNoaW5lX2NoZWNrX2NvbW1vbikKIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogLyoqKiAgSVNlcmllcy1MUEFSIGludGVycnVwdCBoYW5kbGVycyAqKiovCkBAIC0xNDUzLDE5ICsxNDg0LDE3IEBACiAgICAgICAgIC4gPSAweDgwMDAKIAogLyoKLSAqIE9uIHBTZXJpZXMsIHNlY29uZGFyeSBwcm9jZXNzb3JzIHNwaW4gaW4gdGhlIGZvbGxvd2luZyBjb2RlLgorICogT24gcFNlcmllcyBhbmQgbW9zdCBvdGhlciBwbGF0Zm9ybXMsIHNlY29uZGFyeSBwcm9jZXNzb3JzIHNwaW4KKyAqIGluIHRoZSBmb2xsb3dpbmcgY29kZS4KICAqIEF0IGVudHJ5LCByMyA9IHRoaXMgcHJvY2Vzc29yJ3MgbnVtYmVyIChwaHlzaWNhbCBjcHUgaWQpCiAgKi8KLV9HTE9CQUwocFNlcmllc19zZWNvbmRhcnlfc21wX2luaXQpCitfR0xPQkFMKGdlbmVyaWNfc2Vjb25kYXJ5X3NtcF9pbml0KQogCW1yCXIyNCxyMwogCQogCS8qIHR1cm4gb24gNjQtYml0IG1vZGUgKi8KIAlibAkuZW5hYmxlXzY0Yl9tb2RlCiAJaXN5bmMKIAotCS8qIENvcHkgc29tZSBDUFUgc2V0dGluZ3MgZnJvbSBDUFUgMCAqLwotCWJsCS5fX3Jlc3RvcmVfY3B1X3NldHVwCi0KIAkvKiBTZXQgdXAgYSBwYWNhIHZhbHVlIGZvciB0aGlzIHByb2Nlc3Nvci4gU2luY2Ugd2UgaGF2ZSB0aGUKIAkgKiBwaHlzaWNhbCBjcHUgaWQgaW4gcjI0LCB3ZSBuZWVkIHRvIHNlYXJjaCB0aGUgcGFjYXMgdG8gZmluZAogCSAqIHdoaWNoIGxvZ2ljYWwgaWQgbWFwcyB0byBvdXIgcGh5c2ljYWwgb25lLgpAQCAtMTQ5MSwxNSArMTUyMCwyOCBAQAogCQkJCQkvKiBzdGFydC4JCQkgKi8KIAlzeW5jCiAKLQkvKiBDcmVhdGUgYSB0ZW1wIGtlcm5lbCBzdGFjayBmb3IgdXNlIGJlZm9yZSByZWxvY2F0aW9uIGlzIG9uLgkqLworI2lmbmRlZiBDT05GSUdfU01QCisJYgkzYgkJCS8qIE5ldmVyIGdvIG9uIG5vbi1TTVAJCSAqLworI2Vsc2UKKwljbXB3aQkwLHIyMywwCisJYmVxCTNiCQkJLyogTG9vcCB1bnRpbCB0b2xkIHRvIGdvCSAqLworCisJLyogU2VlIGlmIHdlIG5lZWQgdG8gY2FsbCBhIGNwdSBzdGF0ZSByZXN0b3JlIGhhbmRsZXIgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjIzLCBjdXJfY3B1X3NwZWMpCisJbGQJcjIzLDAocjIzKQorCWxkCXIyMyxDUFVfU1BFQ19SRVNUT1JFKHIyMykKKwljbXBkaQkwLHIyMywwCisJYmVxCTRmCisJbGQJcjIzLDAocjIzKQorCW10Y3RyCXIyMworCWJjdHJsCisKKzQ6CS8qIENyZWF0ZSBhIHRlbXAga2VybmVsIHN0YWNrIGZvciB1c2UgYmVmb3JlIHJlbG9jYXRpb24gaXMgb24uCSovCiAJbGQJcjEsUEFDQUVNRVJHU1AocjEzKQogCXN1YmkJcjEscjEsU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKIAotCWNtcHdpCTAscjIzLDAKLSNpZmRlZiBDT05GSUdfU01QCi0JYm5lCS5fX3NlY29uZGFyeV9zdGFydAorCWIJLl9fc2Vjb25kYXJ5X3N0YXJ0CiAjZW5kaWYKLQliIAkzYgkJCS8qIExvb3AgdW50aWwgdG9sZCB0byBnbwkgKi8KIAogI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwogX1NUQVRJQyhfX3N0YXJ0X2luaXRpYWxpemF0aW9uX2lTZXJpZXMpCkBAIC0xNTgwLDcgKzE2MjIsMTYgQEAKIAlibAkuZW5hYmxlXzY0Yl9tb2RlCiAKIAkvKiBTZXR1cCBzb21lIGNyaXRpY2FsIDk3MCBTUFJzIGJlZm9yZSBzd2l0Y2hpbmcgTU1VIG9mZiAqLwotCWJsCS5fXzk3MF9jcHVfcHJlaW5pdAorCW1mc3ByCXIwLFNQUk5fUFZSCisJc3J3aQlyMCxyMCwxNgorCWNtcHdpCXIwLDB4MzkJCS8qIDk3MCAqLworCWJlcQkxZgorCWNtcHdpCXIwLDB4M2MJCS8qIDk3MEZYICovCisJYmVxCTFmCisJY21wd2kJcjAsMHg0NAkJLyogOTcwTVAgKi8KKwlibmUJMmYKKzE6CWJsCS5fX2NwdV9wcmVpbml0X3BwYzk3MAorMjoKIAogCS8qIFN3aXRjaCBvZmYgTU1VIGlmIG5vdCBhbHJlYWR5ICovCiAJTE9BRF9SRUdfSU1NRURJQVRFKHI0LCAuX19hZnRlcl9wcm9tX3N0YXJ0IC0gS0VSTkVMQkFTRSkKQEAgLTE2OTcsNyArMTc0OCw3IEBACiBfR0xPQkFMKGNvcHlfYW5kX2ZsdXNoKQogCWFkZGkJcjUscjUsLTgKIAlhZGRpCXI2LHI2LC04Ci00OglsaQlyMCwxNgkJCS8qIFVzZSB0aGUgbGVhc3QgY29tbW9uCQkqLworNDoJbGkJcjAsOAkJCS8qIFVzZSB0aGUgc21hbGxlc3QgY29tbW9uCSovCiAJCQkJCS8qIGRlbm9taW5hdG9yIGNhY2hlIGxpbmUJKi8KIAkJCQkJLyogc2l6ZS4gIFRoaXMgcmVzdWx0cyBpbgkqLwogCQkJCQkvKiBleHRyYSBjYWNoZSBsaW5lIGZsdXNoZXMJKi8KQEAgLTE3NTEsNyArMTgwMiw3IEBACiAJaXN5bmMKIAogCS8qIENvcHkgc29tZSBDUFUgc2V0dGluZ3MgZnJvbSBDUFUgMCAqLwotCWJsCS5fX3Jlc3RvcmVfY3B1X3NldHVwCisJYmwJLl9fcmVzdG9yZV9jcHVfcHBjOTcwCiAKIAkvKiBwU2VyaWVzIGRvIHRoYXQgZWFybHkgdGhvdWdoIEkgZG9uJ3QgdGhpbmsgd2UgcmVhbGx5IG5lZWQgaXQgKi8KIAltZm1zcglyMwpAQCAtMTkwMSwxMiArMTk1Miw2IEBACiAJbXIJcjUscjI2CiAJYmwJLmlkZW50aWZ5X2NwdQogCi0JLyogU2F2ZSBzb21lIGxvdyBsZXZlbCBjb25maWcgSElEcyBvZiBDUFUwIHRvIGJlIGNvcGllZCB0bwotCSAqIG90aGVyIENQVXMgbGF0ZXIgb24sIG9yIHVzZWQgZm9yIHN1c3BlbmQvcmVzdW1lCi0JICovCi0JYmwJLl9fc2F2ZV9jcHVfc2V0dXAKLQlzeW5jCi0KIAkvKiBEbyB2ZXJ5IGVhcmx5IGtlcm5lbCBpbml0aWFsaXphdGlvbnMsIGluY2x1ZGluZyBpbml0aWFsIGhhc2ggdGFibGUsCiAJICogc3RhYiBhbmQgc2xiIHNldHVwIGJlZm9yZSB3ZSB0dXJuIG9uIHJlbG9jYXRpb24uCSovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaWJtZWJ1cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKaW5kZXggNjhlNWFiMC4uMTI0ZGJjYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pYm1lYnVzLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkgICBOVUxMKTsKIAogc3RhdGljIHN0cnVjdCBpYm1lYnVzX2RldiogX19kZXZpbml0IGlibWVidXNfcmVnaXN0ZXJfZGV2aWNlX2NvbW1vbigKLQlzdHJ1Y3QgaWJtZWJ1c19kZXYgKmRldiwgY2hhciAqbmFtZSkKKwlzdHJ1Y3QgaWJtZWJ1c19kZXYgKmRldiwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQgZXJyID0gMDsKIApAQCAtMTk0LDEwICsxOTQsMTAgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBpYm1lYnVzX2RldiAqZGV2OwotCWNoYXIgKmxvY19jb2RlOworCWNvbnN0IGNoYXIgKmxvY19jb2RlOwogCWludCBsZW5ndGg7CiAKLQlsb2NfY29kZSA9IChjaGFyICopZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGxvYy1jb2RlIiwgTlVMTCk7CisJbG9jX2NvZGUgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0sbG9jLWNvZGUiLCBOVUxMKTsKIAlpZiAoIWxvY19jb2RlKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IG5vZGUgJXMgbWlzc2luZyAnaWJtLGxvYy1jb2RlJ1xuIiwKIAkJICAgICAgIF9fRlVOQ1RJT05fXywgZG4tPm5hbWUgPyBkbi0+bmFtZSA6ICI8dW5rbm93bj4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW8uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTgxODA2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pby5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogSS9PIHN0cmluZyBvcGVyYXRpb25zCisgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKKyAqICAgIENvcHlyaWdodCAoQykgMjAwNiBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBMYXJnZWx5IHJld3JpdHRlbiBieSBDb3J0IERvdWdhbiAoY29ydEBjcy5ubXQuZWR1KQorICogYW5kIFBhdWwgTWFja2VycmFzLgorICoKKyAqIEFkYXB0ZWQgZm9yIGlTZXJpZXMgYnkgTWlrZSBDb3JyaWdhbiAobWlrZWpjQHVzLmlibS5jb20pCisgKiBQUEM2NCB1cGRhdGVzIGJ5IERhdmUgRW5nZWJyZXRzZW4gKGVuZ2VicmV0QHVzLmlibS5jb20pCisgKgorICogUmV3cml0dGVuIGluIEMgYnkgU3RlcGhlbiBSb3Rod2VsbC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CisjaW5jbHVkZSA8YXNtL2J1Zy5oPgorCit2b2lkIF9pbnNiKHZvbGF0aWxlIHU4IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgbG9uZyBjb3VudCkKK3sKKwl1OCAqdGJ1ZiA9IGJ1ZjsKKwl1OCB0bXA7CisKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwlpZiAodW5saWtlbHkoY291bnQgPD0gMCkpCisJCXJldHVybjsKKwlhc20gdm9sYXRpbGUoInN5bmMiKTsKKwlkbyB7CisJCXRtcCA9ICpwb3J0OworCQlhc20gdm9sYXRpbGUoImVpZWlvIik7CisJCSp0YnVmKysgPSB0bXA7CisJfSB3aGlsZSAoLS1jb3VudCAhPSAwKTsKKwlhc20gdm9sYXRpbGUoInR3aSAwLCUwLDA7IGlzeW5jIiA6IDogInIiICh0bXApKTsKK30KK0VYUE9SVF9TWU1CT0woX2luc2IpOworCit2b2lkIF9vdXRzYih2b2xhdGlsZSB1OCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGxvbmcgY291bnQpCit7CisJY29uc3QgdTggKnRidWYgPSBidWY7CisKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwlpZiAodW5saWtlbHkoY291bnQgPD0gMCkpCisJCXJldHVybjsKKwlhc20gdm9sYXRpbGUoInN5bmMiKTsKKwlkbyB7CisJCSpwb3J0ID0gKnRidWYrKzsKKwl9IHdoaWxlICgtLWNvdW50ICE9IDApOworCWFzbSB2b2xhdGlsZSgic3luYyIpOworfQorRVhQT1JUX1NZTUJPTChfb3V0c2IpOworCit2b2lkIF9pbnN3X25zKHZvbGF0aWxlIHUxNiBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIGxvbmcgY291bnQpCit7CisJdTE2ICp0YnVmID0gYnVmOworCXUxNiB0bXA7CisKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwlpZiAodW5saWtlbHkoY291bnQgPD0gMCkpCisJCXJldHVybjsKKwlhc20gdm9sYXRpbGUoInN5bmMiKTsKKwlkbyB7CisJCXRtcCA9ICpwb3J0OworCQlhc20gdm9sYXRpbGUoImVpZWlvIik7CisJCSp0YnVmKysgPSB0bXA7CisJfSB3aGlsZSAoLS1jb3VudCAhPSAwKTsKKwlhc20gdm9sYXRpbGUoInR3aSAwLCUwLDA7IGlzeW5jIiA6IDogInIiICh0bXApKTsKK30KK0VYUE9SVF9TWU1CT0woX2luc3dfbnMpOworCit2b2lkIF9vdXRzd19ucyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBsb25nIGNvdW50KQoreworCWNvbnN0IHUxNiAqdGJ1ZiA9IGJ1ZjsKKworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCWlmICh1bmxpa2VseShjb3VudCA8PSAwKSkKKwkJcmV0dXJuOworCWFzbSB2b2xhdGlsZSgic3luYyIpOworCWRvIHsKKwkJKnBvcnQgPSAqdGJ1ZisrOworCX0gd2hpbGUgKC0tY291bnQgIT0gMCk7CisJYXNtIHZvbGF0aWxlKCJzeW5jIik7Cit9CitFWFBPUlRfU1lNQk9MKF9vdXRzd19ucyk7CisKK3ZvaWQgX2luc2xfbnModm9sYXRpbGUgdTMyIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgbG9uZyBjb3VudCkKK3sKKwl1MzIgKnRidWYgPSBidWY7CisJdTMyIHRtcDsKKworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCWlmICh1bmxpa2VseShjb3VudCA8PSAwKSkKKwkJcmV0dXJuOworCWFzbSB2b2xhdGlsZSgic3luYyIpOworCWRvIHsKKwkJdG1wID0gKnBvcnQ7CisJCWFzbSB2b2xhdGlsZSgiZWllaW8iKTsKKwkJKnRidWYrKyA9IHRtcDsKKwl9IHdoaWxlICgtLWNvdW50ICE9IDApOworCWFzbSB2b2xhdGlsZSgidHdpIDAsJTAsMDsgaXN5bmMiIDogOiAiciIgKHRtcCkpOworfQorRVhQT1JUX1NZTUJPTChfaW5zbF9ucyk7CisKK3ZvaWQgX291dHNsX25zKHZvbGF0aWxlIHUzMiBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGxvbmcgY291bnQpCit7CisJY29uc3QgdTMyICp0YnVmID0gYnVmOworCisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJaWYgKHVubGlrZWx5KGNvdW50IDw9IDApKQorCQlyZXR1cm47CisJYXNtIHZvbGF0aWxlKCJzeW5jIik7CisJZG8geworCQkqcG9ydCA9ICp0YnVmKys7CisJfSB3aGlsZSAoLS1jb3VudCAhPSAwKTsKKwlhc20gdm9sYXRpbGUoInN5bmMiKTsKK30KK0VYUE9SVF9TWU1CT0woX291dHNsX25zKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCmluZGV4IDAxYmRhZTMuLmI0NDMyMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwpAQCAtNTIsNiArNTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtMzIyLDcgKzMyMyw4IEBACiAKIHN0YXRpYyBMSVNUX0hFQUQoaXJxX2hvc3RzKTsKIHN0YXRpYyBzcGlubG9ja190IGlycV9iaWdfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRDsKLQorc3RhdGljIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgaXJxX3JhZGl4X3JlYWRlcik7CitzdGF0aWMgdW5zaWduZWQgaW50IGlycV9yYWRpeF93cml0ZXI7CiBzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOwogc3RhdGljIHVuc2lnbmVkIGludCBpcnFfdmlycV9jb3VudCA9IE5SX0lSUVM7CiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICppcnFfZGVmYXVsdF9ob3N0OwpAQCAtNDU1LDYgKzQ1Nyw1OCBAQAogCQlpcnFfdmlycV9jb3VudCA9IGNvdW50OwogfQogCisvKiByYWRpeCB0cmVlIG5vdCBsb2NrbGVzcyBzYWZlICEgd2UgdXNlIGEgYnJsb2NrLXR5cGUgbWVjYW5pc20KKyAqIGZvciBub3csIHVudGlsIHdlIGNhbiB1c2UgYSBsb2NrbGVzcyByYWRpeCB0cmVlCisgKi8KK3N0YXRpYyB2b2lkIGlycV9yYWRpeF93cmxvY2sodW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IGNwdSwgb2s7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCAqZmxhZ3MpOworCWlycV9yYWRpeF93cml0ZXIgPSAxOworCXNtcF9tYigpOworCWRvIHsKKwkJYmFycmllcigpOworCQlvayA9IDE7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJCWlmIChwZXJfY3B1KGlycV9yYWRpeF9yZWFkZXIsIGNwdSkpIHsKKwkJCQlvayA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFvaykKKwkJCWNwdV9yZWxheCgpOworCX0gd2hpbGUoIW9rKTsKK30KKworc3RhdGljIHZvaWQgaXJxX3JhZGl4X3dydW5sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJc21wX3dtYigpOworCWlycV9yYWRpeF93cml0ZXIgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBpcnFfcmFkaXhfcmRsb2NrKHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCWxvY2FsX2lycV9zYXZlKCpmbGFncyk7CisJX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDE7CisJc21wX21iKCk7CisJaWYgKGxpa2VseShpcnFfcmFkaXhfd3JpdGVyID09IDApKQorCQlyZXR1cm47CisJX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDA7CisJc21wX3dtYigpOworCXNwaW5fbG9jaygmaXJxX2JpZ19sb2NrKTsKKwlfX2dldF9jcHVfdmFyKGlycV9yYWRpeF9yZWFkZXIpID0gMTsKKwlzcGluX3VubG9jaygmaXJxX2JpZ19sb2NrKTsKK30KKworc3RhdGljIHZvaWQgaXJxX3JhZGl4X3JkdW5sb2NrKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisJX19nZXRfY3B1X3ZhcihpcnFfcmFkaXhfcmVhZGVyKSA9IDA7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisKIHVuc2lnbmVkIGludCBpcnFfY3JlYXRlX21hcHBpbmcoc3RydWN0IGlycV9ob3N0ICpob3N0LAogCQkJCWlycV9od19udW1iZXJfdCBod2lycSkKIHsKQEAgLTYwNCwxMyArNjU4LDkgQEAKIAkJLyogQ2hlY2sgaWYgcmFkaXggdHJlZSBhbGxvY2F0ZWQgeWV0ICovCiAJCWlmIChob3N0LT5yZXZtYXBfZGF0YS50cmVlLmdmcF9tYXNrID09IDApCiAJCQlicmVhazsKLQkJLyogWFhYIHJhZGl4IHRyZWUgbm90IHNhZmUgISByZW1vdmUgbG9jayB3aGVtIGl0IGJlY29tZXMgc2FmZQotCQkgKiBhbmQgdXNlIHNvbWUgUkNVIHN5bmMgdG8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgaXMgb2sgYmVmb3JlIHdlCi0JCSAqIGNhbiByZS11c2UgdGhhdCBtYXAgZW50cnkKLQkJICovCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJaXJxX3JhZGl4X3dybG9jaygmZmxhZ3MpOwogCQlyYWRpeF90cmVlX2RlbGV0ZSgmaG9zdC0+cmV2bWFwX2RhdGEudHJlZSwgaHdpcnEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwkJaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC02NzcsMjUgKzcyNywyNCBAQAogCWlmICh0cmVlLT5nZnBfbWFzayA9PSAwKQogCQlyZXR1cm4gaXJxX2ZpbmRfbWFwcGluZyhob3N0LCBod2lycSk7CiAKLQkvKiBYWFggQ3VycmVudCByYWRpeCB0cmVlcyBhcmUgTk9UIFNNUCBzYWZlICEhISBSZW1vdmUgdGhhdCBsb2NrCi0JICogd2hlbiB0aGF0IGlzIGZpeGVkICh3aGVuIE5pY2sncyBwYXRjaCBnZXRzIGluCi0JICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlycV9iaWdfbG9jaywgZmxhZ3MpOwotCiAJLyogTm93IHRyeSB0byByZXNvbHZlICovCisJaXJxX3JhZGl4X3JkbG9jaygmZmxhZ3MpOwogCXB0ciA9IHJhZGl4X3RyZWVfbG9va3VwKHRyZWUsIGh3aXJxKTsKKwlpcnFfcmFkaXhfcmR1bmxvY2soZmxhZ3MpOworCiAJLyogRm91bmQgaXQsIHJldHVybiAqLwogCWlmIChwdHIpIHsKIAkJdmlycSA9IHB0ciAtIGlycV9tYXA7Ci0JCWdvdG8gYmFpbDsKKwkJcmV0dXJuIHZpcnE7CiAJfQogCiAJLyogSWYgbm90IHRoZXJlLCB0cnkgdG8gaW5zZXJ0IGl0ICovCiAJdmlycSA9IGlycV9maW5kX21hcHBpbmcoaG9zdCwgaHdpcnEpOwotCWlmICh2aXJxICE9IE5PX0lSUSkKLQkJcmFkaXhfdHJlZV9pbnNlcnQodHJlZSwgdmlycSwgJmlycV9tYXBbdmlycV0pOwotIGJhaWw6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJaWYgKHZpcnEgIT0gTk9fSVJRKSB7CisJCWlycV9yYWRpeF93cmxvY2soJmZsYWdzKTsKKwkJcmFkaXhfdHJlZV9pbnNlcnQodHJlZSwgaHdpcnEsICZpcnFfbWFwW3ZpcnFdKTsKKwkJaXJxX3JhZGl4X3dydW5sb2NrKGZsYWdzKTsKKwl9CiAJcmV0dXJuIHZpcnE7CiB9CiAKQEAgLTgwNiwxMiArODU1LDEyIEBACiAJc3RydWN0IGlycV9ob3N0ICpoOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxX2JpZ19sb2NrLCBmbGFncyk7CisJaXJxX3JhZGl4X3dybG9jaygmZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaCwgJmlycV9ob3N0cywgbGluaykgewogCQlpZiAoaC0+cmV2bWFwX3R5cGUgPT0gSVJRX0hPU1RfTUFQX1RSRUUpCiAJCQlJTklUX1JBRElYX1RSRUUoJmgtPnJldm1hcF9kYXRhLnRyZWUsIEdGUF9BVE9NSUMpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfYmlnX2xvY2ssIGZsYWdzKTsKKwlpcnFfcmFkaXhfd3J1bmxvY2soZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MjcsMTIgKzg3NiwxNCBAQAogCWVsc2UKIAkJcmV0dXJuIC0xOwogfQorRVhQT1JUX1NZTUJPTChwY2lfZW5hYmxlX21zaSk7CiAKIHZvaWQgcGNpX2Rpc2FibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICogcGRldikKIHsKIAlpZiAocHBjX21kLmRpc2FibGVfbXNpKQogCQlwcGNfbWQuZGlzYWJsZV9tc2kocGRldik7CiB9CitFWFBPUlRfU1lNQk9MKHBjaV9kaXNhYmxlX21zaSk7CiAKIHZvaWQgcGNpX3NjYW5fbXNpX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQogaW50IHBjaV9lbmFibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiogZGV2LCBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpIHtyZXR1cm4gLTE7fQpAQCAtODQwLDYgKzg5MSw4IEBACiB2b2lkIG1zaV9yZW1vdmVfcGNpX2lycV92ZWN0b3JzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHt9CiB2b2lkIGRpc2FibGVfbXNpX21vZGUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBvcywgaW50IHR5cGUpIHt9CiB2b2lkIHBjaV9ub19tc2kodm9pZCkge30KK0VYUE9SVF9TWU1CT0wocGNpX2VuYWJsZV9tc2l4KTsKK0VYUE9SVF9TWU1CT0wocGNpX2Rpc2FibGVfbXNpeCk7CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDlmMDg5OGMuLmNkNjVjMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwva3Byb2Jlcy5jCkBAIC02MSw2ICs2MSw4IEBACiAJaWYgKCFyZXQpIHsKIAkJbWVtY3B5KHAtPmFpbnNuLmluc24sIHAtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiAJCXAtPm9wY29kZSA9ICpwLT5hZGRyOworCQlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbiwKKwkJCSh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24gKyBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CiAJfQogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9sZWdhY3lfc2VyaWFsLmMKaW5kZXggN2U5OGU3Ny4uNWU2ZGRmYTQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCkBAIC0zOSwxNiArMzksMTcgQEAKIAkJCQkgIHBoeXNfYWRkcl90IHRhZGRyLCB1bnNpZ25lZCBsb25nIGlycSwKIAkJCQkgIHVwZl90IGZsYWdzLCBpbnQgaXJxX2NoZWNrX3BhcmVudCkKIHsKLQl1MzIgKmNsaywgKnNwZCwgY2xvY2sgPSBCQVNFX0JBVUQgKiAxNjsKKwljb25zdCB1MzIgKmNsaywgKnNwZDsKKwl1MzIgY2xvY2sgPSBCQVNFX0JBVUQgKiAxNjsKIAlpbnQgaW5kZXg7CiAKIAkvKiBnZXQgY2xvY2sgZnJlcS4gaWYgcHJlc2VudCAqLwotCWNsayA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwljbGsgPSBnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKIAlpZiAoY2xrICYmICpjbGspCiAJCWNsb2NrID0gKmNsazsKIAogCS8qIGdldCBkZWZhdWx0IHNwZWVkIGlmIHByZXNlbnQgKi8KLQlzcGQgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiY3VycmVudC1zcGVlZCIsIE5VTEwpOworCXNwZCA9IGdldF9wcm9wZXJ0eShucCwgImN1cnJlbnQtc3BlZWQiLCBOVUxMKTsKIAogCS8qIElmIHdlIGhhdmUgYSBsb2NhdGlvbiBpbmRleCwgdGhlbiB0cnkgdG8gdXNlIGl0ICovCiAJaWYgKHdhbnRfaW5kZXggPj0gMCAmJiB3YW50X2luZGV4IDwgTUFYX0xFR0FDWV9TRVJJQUxfUE9SVFMpCkBAIC0xMTIsOSArMTEzLDEwIEBACiBzdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X3NvY19wb3J0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpzb2NfZGV2KQogewotCXBoeXNfYWRkcl90IGFkZHI7Ci0JdTMyICphZGRycDsKKwl1NjQgYWRkcjsKKwljb25zdCB1MzIgKmFkZHJwOwogCXVwZl90IGZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX1NIQVJFX0lSUTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRzaSA9IG9mX2dldF9wYXJlbnQobnApOwogCiAJLyogV2Ugb25seSBzdXBwb3J0IHBvcnRzIHRoYXQgaGF2ZSBhIGNsb2NrIGZyZXF1ZW5jeSBwcm9wZXJseQogCSAqIGVuY29kZWQgaW4gdGhlIGRldmljZS10cmVlLgpAQCAtMTM0LDIxICsxMzYsMjQgQEAKIAkvKiBBZGQgcG9ydCwgaXJxIHdpbGwgYmUgZGVhbHQgd2l0aCBsYXRlci4gV2UgcGFzc2VkIGEgdHJhbnNsYXRlZAogCSAqIElPIHBvcnQgdmFsdWUuIEl0IHdpbGwgYmUgZml4ZWQgdXAgbGF0ZXIgYWxvbmcgd2l0aCB0aGUgaXJxCiAJICovCi0JcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgLTEsIFVQSU9fTUVNLCBhZGRyLCBhZGRyLCBOT19JUlEsIGZsYWdzLCAwKTsKKwlpZiAodHNpICYmICFzdHJjbXAodHNpLT50eXBlLCAidHNpLWJyaWRnZSIpKQorCQlyZXR1cm4gYWRkX2xlZ2FjeV9wb3J0KG5wLCAtMSwgVVBJT19UU0ksIGFkZHIsIGFkZHIsIE5PX0lSUSwgZmxhZ3MsIDApOworCWVsc2UKKwkJcmV0dXJuIGFkZF9sZWdhY3lfcG9ydChucCwgLTEsIFVQSU9fTUVNLCBhZGRyLCBhZGRyLCBOT19JUlEsIGZsYWdzLCAwKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYWRkX2xlZ2FjeV9pc2FfcG9ydChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqaXNhX2JyZykKIHsKLQl1MzIgKnJlZzsKLQljaGFyICp0eXBlcDsKKwljb25zdCB1MzIgKnJlZzsKKwljb25zdCBjaGFyICp0eXBlcDsKIAlpbnQgaW5kZXggPSAtMTsKLQlwaHlzX2FkZHJfdCB0YWRkcjsKKwl1NjQgdGFkZHI7CiAKIAlEQkcoIiAtPiBhZGRfbGVnYWN5X2lzYV9wb3J0KCVzKVxuIiwgbnAtPmZ1bGxfbmFtZSk7CiAKIAkvKiBHZXQgdGhlIElTQSBwb3J0IG51bWJlciAqLwotCXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwlyZWcgPSBnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKIAlpZiAocmVnID09IE5VTEwpCiAJCXJldHVybiAtMTsKIApAQCAtMTU5LDE2ICsxNjQsMTkgQEAKIAkvKiBOb3cgbG9vayBmb3IgYW4gImlibSxhaXgtbG9jIiBwcm9wZXJ0eSB0aGF0IGdpdmVzIHVzIG9yZGVyaW5nCiAJICogaWYgYW55Li4uCiAJICovCi0JdHlwZXAgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShucCwgImlibSxhaXgtbG9jIiwgTlVMTCk7CisJdHlwZXAgPSBnZXRfcHJvcGVydHkobnAsICJpYm0sYWl4LWxvYyIsIE5VTEwpOwogCiAJLyogSWYgd2UgaGF2ZSBhIGxvY2F0aW9uIGluZGV4LCB0aGVuIHVzZSBpdCAqLwogCWlmICh0eXBlcCAmJiAqdHlwZXAgPT0gJ1MnKQogCQlpbmRleCA9IHNpbXBsZV9zdHJ0b2wodHlwZXArMSwgTlVMTCwgMCkgLSAxOwogCi0JLyogVHJhbnNsYXRlIElTQSBhZGRyZXNzICovCisJLyogVHJhbnNsYXRlIElTQSBhZGRyZXNzLiBJZiBpdCBmYWlscywgd2Ugc3RpbGwgcmVnaXN0ZXIgdGhlIHBvcnQKKwkgKiB3aXRoIG5vIHRyYW5zbGF0ZWQgYWRkcmVzcyBzbyB0aGF0IGl0IGNhbiBiZSBwaWNrZWQgdXAgYXMgYW4gSU8KKwkgKiBwb3J0IGxhdGVyIGJ5IHRoZSBzZXJpYWwgZHJpdmVyCisJICovCiAJdGFkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhucCwgcmVnKTsKIAlpZiAodGFkZHIgPT0gT0ZfQkFEX0FERFIpCi0JCXJldHVybiAtMTsKKwkJdGFkZHIgPSAwOwogCiAJLyogQWRkIHBvcnQsIGlycSB3aWxsIGJlIGRlYWx0IHdpdGggbGF0ZXIgKi8KIAlyZXR1cm4gYWRkX2xlZ2FjeV9wb3J0KG5wLCBpbmRleCwgVVBJT19QT1JULCByZWdbMV0sIHRhZGRyLApAQCAtMTgwLDggKzE4OCw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBhZGRfbGVnYWN5X3BjaV9wb3J0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsCiAJCQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpwY2lfZGV2KQogewotCXBoeXNfYWRkcl90IGFkZHIsIGJhc2U7Ci0JdTMyICphZGRycDsKKwl1NjQgYWRkciwgYmFzZTsKKwljb25zdCB1MzIgKmFkZHJwOwogCXVuc2lnbmVkIGludCBmbGFnczsKIAlpbnQgaW90eXBlLCBpbmRleCA9IC0xLCBsaW5kZXggPSAwOwogCkBAIC0yMjAsNyArMjI4LDcgQEAKIAkgKiB3ZSBnZXQgdG8gdGhlaXIgInJlZyIgcHJvcGVydHkKIAkgKi8KIAlpZiAobnAgIT0gcGNpX2RldikgewotCQl1MzIgKnJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJY29uc3QgdTMyICpyZWcgPSBnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKIAkJaWYgKHJlZyAmJiAoKnJlZyA8IDQpKQogCQkJaW5kZXggPSBsaW5kZXggPSAqcmVnOwogCX0KQEAgLTI3OCwxMyArMjg2LDEzIEBACiB2b2lkIF9faW5pdCBmaW5kX2xlZ2FjeV9zZXJpYWxfcG9ydHModm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCAqc3Rkb3V0ID0gTlVMTDsKLQljaGFyICpwYXRoOworCWNvbnN0IGNoYXIgKnBhdGg7CiAJaW50IGluZGV4OwogCiAJREJHKCIgLT4gZmluZF9sZWdhY3lfc2VyaWFsX3BvcnQoKVxuIik7CiAKIAkvKiBOb3cgZmluZCBvdXQgaWYgb25lIG9mIHRoZXNlIGlzIG91dCBmaXJtd2FyZSBjb25zb2xlICovCi0JcGF0aCA9IChjaGFyICopZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LHN0ZG91dC1wYXRoIiwgTlVMTCk7CisJcGF0aCA9IGdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxzdGRvdXQtcGF0aCIsIE5VTEwpOwogCWlmIChwYXRoICE9IE5VTEwpIHsKIAkJc3Rkb3V0ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgocGF0aCk7CiAJCWlmIChzdGRvdXQpCkBAIC00NjEsNyArNDY5LDcgQEAKIAkJCWZpeHVwX3BvcnRfaXJxKGksIG5wLCBwb3J0KTsKIAkJaWYgKHBvcnQtPmlvdHlwZSA9PSBVUElPX1BPUlQpCiAJCQlmaXh1cF9wb3J0X3BpbyhpLCBucCwgcG9ydCk7Ci0JCWlmIChwb3J0LT5pb3R5cGUgPT0gVVBJT19NRU0pCisJCWlmICgocG9ydC0+aW90eXBlID09IFVQSU9fTUVNKSB8fCAocG9ydC0+aW90eXBlID09IFVQSU9fVFNJKSkKIAkJCWZpeHVwX3BvcnRfbW1pbyhpLCBucCwgcG9ydCk7CiAJfQogCkBAIC00ODQsOCArNDkyLDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnByb21fc3Rkb3V0ID0gTlVMTDsKIAlpbnQgc3BlZWQgPSAwLCBvZmZzZXQgPSAwOwotCWNoYXIgKm5hbWU7Ci0JdTMyICpzcGQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCB1MzIgKnNwZDsKIAogCURCRygiIC0+IGNoZWNrX2xlZ2FjeV9zZXJpYWxfY29uc29sZSgpXG4iKTsKIApAQCAtNTA2LDcgKzUxNCw3IEBACiAJfQogCS8qIFdlIGFyZSBnZXR0aW5nIGEgd2VpcmQgcGhhbmRsZSBmcm9tIE9GIC4uLiAqLwogCS8qIC4uLiBTbyB1c2UgdGhlIGZ1bGwgcGF0aCBpbnN0ZWFkICovCi0JbmFtZSA9IChjaGFyICopZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LHN0ZG91dC1wYXRoIiwgTlVMTCk7CisJbmFtZSA9IGdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxzdGRvdXQtcGF0aCIsIE5VTEwpOwogCWlmIChuYW1lID09IE5VTEwpIHsKIAkJREJHKCIgbm8gbGludXgsc3Rkb3V0LXBhdGggIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTE4LDEyICs1MjYsMTIgQEAKIAl9CiAJREJHKCJzdGRvdXQgaXMgJXNcbiIsIHByb21fc3Rkb3V0LT5mdWxsX25hbWUpOwogCi0JbmFtZSA9IChjaGFyICopZ2V0X3Byb3BlcnR5KHByb21fc3Rkb3V0LCAibmFtZSIsIE5VTEwpOworCW5hbWUgPSBnZXRfcHJvcGVydHkocHJvbV9zdGRvdXQsICJuYW1lIiwgTlVMTCk7CiAJaWYgKCFuYW1lKSB7CiAJCURCRygiIHN0ZG91dCBwYWNrYWdlIGhhcyBubyBuYW1lICFcbiIpOwogCQlnb3RvIG5vdF9mb3VuZDsKIAl9Ci0Jc3BkID0gKHUzMiAqKWdldF9wcm9wZXJ0eShwcm9tX3N0ZG91dCwgImN1cnJlbnQtc3BlZWQiLCBOVUxMKTsKKwlzcGQgPSBnZXRfcHJvcGVydHkocHJvbV9zdGRvdXQsICJjdXJyZW50LXNwZWVkIiwgTlVMTCk7CiAJaWYgKHNwZCkKIAkJc3BlZWQgPSAqc3BkOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xwYXJjZmcuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCmluZGV4IDIzZjM0ZGEuLjQxYzA1ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbHBhcmNmZy5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8YXNtL3J0YXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9leHBfdnBkX3BhbmVsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgogCkBAIC0xODMsOCArMTgyLDE0IEBACiAJCQkgICAgICB1bnNpZ25lZCBsb25nICpyZXNvdXJjZSkKIHsKIAl1bnNpZ25lZCBsb25nIHJjOwotCXJjID0gcGxwYXJfaGNhbGxfNG91dChIX0dFVF9QUFAsIDAsIDAsIDAsIDAsIGVudGl0bGVkLCB1bmFsbG9jYXRlZCwKLQkJCSAgICAgIGFnZ3JlZ2F0aW9uLCByZXNvdXJjZSk7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVGU0laRV07CisKKwlyYyA9IHBscGFyX2hjYWxsKEhfR0VUX1BQUCwgcmV0YnVmKTsKKworCSplbnRpdGxlZCA9IHJldGJ1ZlswXTsKKwkqdW5hbGxvY2F0ZWQgPSByZXRidWZbMV07CisJKmFnZ3JlZ2F0aW9uID0gcmV0YnVmWzJdOworCSpyZXNvdXJjZSA9IHJldGJ1ZlszXTsKIAogCWxvZ19wbHBhcl9oY2FsbF9yZXR1cm4ocmMsICJIX0dFVF9QUFAiKTsKIApAQCAtMTk0LDggKzE5OSwxMiBAQAogc3RhdGljIHZvaWQgaF9waWModW5zaWduZWQgbG9uZyAqcG9vbF9pZGxlX3RpbWUsIHVuc2lnbmVkIGxvbmcgKm51bV9wcm9jcykKIHsKIAl1bnNpZ25lZCBsb25nIHJjOwotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0JcmMgPSBwbHBhcl9oY2FsbChIX1BJQywgMCwgMCwgMCwgMCwgcG9vbF9pZGxlX3RpbWUsIG51bV9wcm9jcywgJmR1bW15KTsKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpFXTsKKworCXJjID0gcGxwYXJfaGNhbGwoSF9QSUMsIHJldGJ1Zik7CisKKwkqcG9vbF9pZGxlX3RpbWUgPSByZXRidWZbMF07CisJKm51bV9wcm9jcyA9IHJldGJ1ZlsxXTsKIAogCWlmIChyYyAhPSBIX0FVVEhPUklUWSkKIAkJbG9nX3BscGFyX2hjYWxsX3JldHVybihyYywgIkhfUElDIik7CkBAIC0zMTAsMTIgKzMxOSwxMSBAQAogCWludCBwYXJ0aXRpb25fcG90ZW50aWFsX3Byb2Nlc3NvcnM7CiAJaW50IHBhcnRpdGlvbl9hY3RpdmVfcHJvY2Vzc29yczsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJ0YXNfbm9kZTsKLQlpbnQgKmxyZHJwID0gTlVMTDsKKwljb25zdCBpbnQgKmxyZHJwID0gTlVMTDsKIAogCXJ0YXNfbm9kZSA9IGZpbmRfcGF0aF9kZXZpY2UoIi9ydGFzIik7CiAJaWYgKHJ0YXNfbm9kZSkKLQkJbHJkcnAgPSAoaW50ICopZ2V0X3Byb3BlcnR5KHJ0YXNfbm9kZSwgImlibSxscmRyLWNhcGFjaXR5IiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCQlscmRycCA9IGdldF9wcm9wZXJ0eShydGFzX25vZGUsICJpYm0sbHJkci1jYXBhY2l0eSIsIE5VTEwpOwogCiAJaWYgKGxyZHJwID09IE5VTEwpIHsKIAkJcGFydGl0aW9uX3BvdGVudGlhbF9wcm9jZXNzb3JzID0gdmRzb19kYXRhLT5wcm9jZXNzb3JDb3VudDsKQEAgLTUyMCw3ICs1MjgsOCBAQAogCWNvbnN0IGNoYXIgKm1vZGVsID0gIiI7CiAJY29uc3QgY2hhciAqc3lzdGVtX2lkID0gIiI7CiAJY29uc3QgY2hhciAqdG1wOwotCXVuc2lnbmVkIGludCAqbHBfaW5kZXhfcHRyLCBscF9pbmRleCA9IDA7CisJY29uc3QgdW5zaWduZWQgaW50ICpscF9pbmRleF9wdHI7CisJdW5zaWduZWQgaW50IGxwX2luZGV4ID0gMDsKIAogCXNlcV9wcmludGYobSwgIiVzICVzIFxuIiwgTU9EVUxFX05BTUUsIE1PRFVMRV9WRVJTKTsKIApAQCAtNTQwLDggKzU0OSw3IEBACiAJCQlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKIAkJCQlzeXN0ZW1faWQgKz0gNDsKIAkJfQotCQlscF9pbmRleF9wdHIgPSAodW5zaWduZWQgaW50ICopCi0JCQlnZXRfcHJvcGVydHkocm9vdGRuLCAiaWJtLHBhcnRpdGlvbi1ubyIsIE5VTEwpOworCQlscF9pbmRleF9wdHIgPSBnZXRfcHJvcGVydHkocm9vdGRuLCAiaWJtLHBhcnRpdGlvbi1ubyIsIE5VTEwpOwogCQlpZiAobHBfaW5kZXhfcHRyKQogCQkJbHBfaW5kZXggPSAqbHBfaW5kZXhfcHRyOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggYTgxY2ExYi4uZTYwYTBjNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbG1iLmg+CiAKIHZvaWQgbWFjaGluZV9jcmFzaF9zaHV0ZG93bihzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKQEAgLTU5LDMgKzYwLDU4IEBACiAJfQogCWZvcig7Oyk7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IGVhcmx5X3BhcnNlX2NyYXNoayhjaGFyICpwKQoreworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCWlmICghcCkKKwkJcmV0dXJuIDE7CisKKwlzaXplID0gbWVtcGFyc2UocCwgJnApOworCisJaWYgKCpwID09ICdAJykKKwkJY3Jhc2hrX3Jlcy5zdGFydCA9IG1lbXBhcnNlKHAgKyAxLCAmcCk7CisJZWxzZQorCQljcmFzaGtfcmVzLnN0YXJ0ID0gS0RVTVBfS0VSTkVMQkFTRTsKKworCWNyYXNoa19yZXMuZW5kID0gY3Jhc2hrX3Jlcy5zdGFydCArIHNpemUgLSAxOworCisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiY3Jhc2hrZXJuZWwiLCBlYXJseV9wYXJzZV9jcmFzaGspOworCit2b2lkIF9faW5pdCByZXNlcnZlX2NyYXNoa2VybmVsKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBzaXplOworCisJaWYgKGNyYXNoa19yZXMuc3RhcnQgPT0gMCkKKwkJcmV0dXJuOworCisJLyogV2UgbWlnaHQgaGF2ZSBnb3QgdGhlc2UgdmFsdWVzIHZpYSB0aGUgY29tbWFuZCBsaW5lIG9yIHRoZQorCSAqIGRldmljZSB0cmVlLCBlaXRoZXIgd2F5IHNhbml0aXNlIHRoZW0gbm93LiAqLworCisJc2l6ZSA9IGNyYXNoa19yZXMuZW5kIC0gY3Jhc2hrX3Jlcy5zdGFydCArIDE7CisKKwlpZiAoY3Jhc2hrX3Jlcy5zdGFydCAhPSBLRFVNUF9LRVJORUxCQVNFKQorCQlwcmludGsoIkNyYXNoIGtlcm5lbCBsb2NhdGlvbiBtdXN0IGJlIDB4JXhcbiIsCisJCQkJS0RVTVBfS0VSTkVMQkFTRSk7CisKKwljcmFzaGtfcmVzLnN0YXJ0ID0gS0RVTVBfS0VSTkVMQkFTRTsKKwlzaXplID0gUEFHRV9BTElHTihzaXplKTsKKwljcmFzaGtfcmVzLmVuZCA9IGNyYXNoa19yZXMuc3RhcnQgKyBzaXplIC0gMTsKKworCS8qIENyYXNoIGtlcm5lbCB0cnVtcHMgbWVtb3J5IGxpbWl0ICovCisJaWYgKG1lbW9yeV9saW1pdCAmJiBtZW1vcnlfbGltaXQgPD0gY3Jhc2hrX3Jlcy5lbmQpIHsKKwkJbWVtb3J5X2xpbWl0ID0gY3Jhc2hrX3Jlcy5lbmQgKyAxOworCQlwcmludGsoIkFkanVzdGVkIG1lbW9yeSBsaW1pdCBmb3IgY3Jhc2hrZXJuZWwsIG5vdyAweCVseFxuIiwKKwkJCQltZW1vcnlfbGltaXQpOworCX0KKworCWxtYl9yZXNlcnZlKGNyYXNoa19yZXMuc3RhcnQsIHNpemUpOworfQorCitpbnQgb3ZlcmxhcHNfY3Jhc2hrZXJuZWwodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAoc3RhcnQgKyBzaXplKSA+IGNyYXNoa19yZXMuc3RhcnQgJiYgc3RhcnQgPD0gY3Jhc2hrX3Jlcy5lbmQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCmluZGV4IGI0MzhkNDUuLmEyNGIwOWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCkBAIC0xMCw3ICsxMCw2IEBACiAgKi8KIAogCi0jaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KQEAgLTIxLDcgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KLSNpbmNsdWRlIDxhc20vbG1iLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgkvKiBfZW5kICovCiAjaW5jbHVkZSA8YXNtL3Byb20uaD4KQEAgLTMzLDggKzMxLDggQEAKIAl1bnNpZ25lZCBsb25nIGJlZ2luLCBlbmQ7CS8qIGxpbWl0cyBvZiBzZWdtZW50ICovCiAJdW5zaWduZWQgbG9uZyBsb3csIGhpZ2g7CS8qIGxpbWl0cyBvZiBibG9ja2VkIG1lbW9yeSByYW5nZSAqLwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQl1bnNpZ25lZCBsb25nICpiYXNlcDsKLQl1bnNpZ25lZCBpbnQgKnNpemVwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJhc2VwOworCWNvbnN0IHVuc2lnbmVkIGludCAqc2l6ZXA7CiAKIAlpZiAoIXBwY19tZC5ocHRlX2NsZWFyX2FsbCkKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC03NCwxMCArNzIsOCBAQAogCS8qIFdlIGFsc28gc2hvdWxkIG5vdCBvdmVyd3JpdGUgdGhlIHRjZSB0YWJsZXMgKi8KIAlmb3IgKG5vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAicGNpIik7IG5vZGUgIT0gTlVMTDsKIAkJCW5vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShub2RlLCAicGNpIikpIHsKLQkJYmFzZXAgPSAodW5zaWduZWQgbG9uZyAqKWdldF9wcm9wZXJ0eShub2RlLCAibGludXgsdGNlLWJhc2UiLAotCQkJCQkJCU5VTEwpOwotCQlzaXplcCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkobm9kZSwgImxpbnV4LHRjZS1zaXplIiwKLQkJCQkJCQlOVUxMKTsKKwkJYmFzZXAgPSBnZXRfcHJvcGVydHkobm9kZSwgImxpbnV4LHRjZS1iYXNlIiwgTlVMTCk7CisJCXNpemVwID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJsaW51eCx0Y2Utc2l6ZSIsIE5VTEwpOwogCQlpZiAoYmFzZXAgPT0gTlVMTCB8fCBzaXplcCA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTM4NSw1OCArMzgxLDMgQEAKIAlyZXR1cm4gMDsKIH0KIF9faW5pdGNhbGwoa2V4ZWNfc2V0dXApOwotCi1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9wYXJzZV9jcmFzaGsoY2hhciAqcCkKLXsKLQl1bnNpZ25lZCBsb25nIHNpemU7Ci0KLQlpZiAoIXApCi0JCXJldHVybiAxOwotCi0Jc2l6ZSA9IG1lbXBhcnNlKHAsICZwKTsKLQotCWlmICgqcCA9PSAnQCcpCi0JCWNyYXNoa19yZXMuc3RhcnQgPSBtZW1wYXJzZShwICsgMSwgJnApOwotCWVsc2UKLQkJY3Jhc2hrX3Jlcy5zdGFydCA9IEtEVU1QX0tFUk5FTEJBU0U7Ci0KLQljcmFzaGtfcmVzLmVuZCA9IGNyYXNoa19yZXMuc3RhcnQgKyBzaXplIC0gMTsKLQotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImNyYXNoa2VybmVsIiwgZWFybHlfcGFyc2VfY3Jhc2hrKTsKLQotdm9pZCBfX2luaXQgcmVzZXJ2ZV9jcmFzaGtlcm5lbCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQotCWlmIChjcmFzaGtfcmVzLnN0YXJ0ID09IDApCi0JCXJldHVybjsKLQotCS8qIFdlIG1pZ2h0IGhhdmUgZ290IHRoZXNlIHZhbHVlcyB2aWEgdGhlIGNvbW1hbmQgbGluZSBvciB0aGUKLQkgKiBkZXZpY2UgdHJlZSwgZWl0aGVyIHdheSBzYW5pdGlzZSB0aGVtIG5vdy4gKi8KLQotCXNpemUgPSBjcmFzaGtfcmVzLmVuZCAtIGNyYXNoa19yZXMuc3RhcnQgKyAxOwotCi0JaWYgKGNyYXNoa19yZXMuc3RhcnQgIT0gS0RVTVBfS0VSTkVMQkFTRSkKLQkJcHJpbnRrKCJDcmFzaCBrZXJuZWwgbG9jYXRpb24gbXVzdCBiZSAweCV4XG4iLAotCQkJCUtEVU1QX0tFUk5FTEJBU0UpOwotCi0JY3Jhc2hrX3Jlcy5zdGFydCA9IEtEVU1QX0tFUk5FTEJBU0U7Ci0Jc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZSk7Ci0JY3Jhc2hrX3Jlcy5lbmQgPSBjcmFzaGtfcmVzLnN0YXJ0ICsgc2l6ZSAtIDE7Ci0KLQkvKiBDcmFzaCBrZXJuZWwgdHJ1bXBzIG1lbW9yeSBsaW1pdCAqLwotCWlmIChtZW1vcnlfbGltaXQgJiYgbWVtb3J5X2xpbWl0IDw9IGNyYXNoa19yZXMuZW5kKSB7Ci0JCW1lbW9yeV9saW1pdCA9IGNyYXNoa19yZXMuZW5kICsgMTsKLQkJcHJpbnRrKCJBZGp1c3RlZCBtZW1vcnkgbGltaXQgZm9yIGNyYXNoa2VybmVsLCBub3cgMHglbHhcbiIsCi0JCQkJbWVtb3J5X2xpbWl0KTsKLQl9Ci0KLQlsbWJfcmVzZXJ2ZShjcmFzaGtfcmVzLnN0YXJ0LCBzaXplKTsKLX0KLQotaW50IG92ZXJsYXBzX2NyYXNoa2VybmVsKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKLXsKLQlyZXR1cm4gKHN0YXJ0ICsgc2l6ZSkgPiBjcmFzaGtfcmVzLnN0YXJ0ICYmIHN0YXJ0IDw9IGNyYXNoa19yZXMuZW5kOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwppbmRleCBmYzIzMDQwLi4zMzBjOWRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL21pc2MuUwpAQCAtMTcsMTUgKzE3LDYgQEAKIAogCS50ZXh0CiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKLSNkZWZpbmUgSU5fU1lOQwkJdHdpCTAscjUsMDsgaXN5bmMKLSNkZWZpbmUgRUlFSU9fMzIKLSNkZWZpbmUgU1lOQ182NAkJc3luYwotI2Vsc2UgLyogQ09ORklHX1BQQzMyICovCi0jZGVmaW5lIElOX1NZTkMKLSNkZWZpbmUgRUlFSU9fMzIJZWllaW8KLSNkZWZpbmUgU1lOQ182NAotI2VuZGlmCiAvKgogICogUmV0dXJucyAoYWRkcmVzcyB3ZSBhcmUgcnVubmluZyBhdCkgLSAoYWRkcmVzcyB3ZSB3ZXJlIGxpbmtlZCBhdCkKICAqIGZvciB1c2UgYmVmb3JlIHRoZSB0ZXh0IGFuZCBkYXRhIGFyZSBtYXBwZWQgdG8gS0VSTkVMQkFTRS4KQEAgLTUyLDE1MiArNDMsMyBAQAogCWFkZAlyMyxyMyxyNQogCW10bHIJcjAKIAlibHIKLQotLyoKLSAqIEkvTyBzdHJpbmcgb3BlcmF0aW9ucwotICoKLSAqIGluc2IocG9ydCwgYnVmLCBsZW4pCi0gKiBvdXRzYihwb3J0LCBidWYsIGxlbikKLSAqIGluc3cocG9ydCwgYnVmLCBsZW4pCi0gKiBvdXRzdyhwb3J0LCBidWYsIGxlbikKLSAqIGluc2wocG9ydCwgYnVmLCBsZW4pCi0gKiBvdXRzbChwb3J0LCBidWYsIGxlbikKLSAqIGluc3dfbnMocG9ydCwgYnVmLCBsZW4pCi0gKiBvdXRzd19ucyhwb3J0LCBidWYsIGxlbikKLSAqIGluc2xfbnMocG9ydCwgYnVmLCBsZW4pCi0gKiBvdXRzbF9ucyhwb3J0LCBidWYsIGxlbikKLSAqCi0gKiBUaGUgKl9ucyB2ZXJzaW9ucyBkb24ndCBkbyBieXRlLXN3YXBwaW5nLgotICovCi1fR0xPQkFMKF9pbnNiKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCwxCi0JYmxlbHItCi0wMDoJbGJ6CXI1LDAocjMpCi0JZWllaW8KLQlzdGJ1CXI1LDEocjQpCi0JYmRuegkwMGIKLQlJTl9TWU5DCi0JYmxyCi0KLV9HTE9CQUwoX291dHNiKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCwxCi0JYmxlbHItCi0wMDoJbGJ6dQlyNSwxKHI0KQotCXN0YglyNSwwKHIzKQotCUVJRUlPXzMyCi0JYmRuegkwMGIKLQlTWU5DXzY0Ci0JYmxyCi0KLV9HTE9CQUwoX2luc3cpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDIKLQlibGVsci0KLTAwOglsaGJyeAlyNSwwLHIzCi0JZWllaW8KLQlzdGh1CXI1LDIocjQpCi0JYmRuegkwMGIKLQlJTl9TWU5DCi0JYmxyCi0KLV9HTE9CQUwoX291dHN3KQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCwyCi0JYmxlbHItCi0wMDoJbGh6dQlyNSwyKHI0KQotCUVJRUlPXzMyCi0Jc3RoYnJ4CXI1LDAscjMKLQliZG56CTAwYgotCVNZTkNfNjQKLQlibHIKLQotX0dMT0JBTChfaW5zbCkKLQljbXB3aQkwLHI1LDAKLQltdGN0cglyNQotCXN1YmkJcjQscjQsNAotCWJsZWxyLQotMDA6CWx3YnJ4CXI1LDAscjMKLQllaWVpbwotCXN0d3UJcjUsNChyNCkKLQliZG56CTAwYgotCUlOX1NZTkMKLQlibHIKLQotX0dMT0JBTChfb3V0c2wpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd3p1CXI1LDQocjQpCi0Jc3R3YnJ4CXI1LDAscjMKLQlFSUVJT18zMgotCWJkbnoJMDBiCi0JU1lOQ182NAotCWJscgotCi0jaWZkZWYgQ09ORklHX1BQQzMyCi1fR0xPQkFMKF9faWRlX21tX2luc3cpCi0jZW5kaWYKLV9HTE9CQUwoX2luc3dfbnMpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDIKLQlibGVsci0KLTAwOglsaHoJcjUsMChyMykKLQllaWVpbwotCXN0aHUJcjUsMihyNCkKLQliZG56CTAwYgotCUlOX1NZTkMKLQlibHIKLQotI2lmZGVmIENPTkZJR19QUEMzMgotX0dMT0JBTChfX2lkZV9tbV9vdXRzdykKLSNlbmRpZgotX0dMT0JBTChfb3V0c3dfbnMpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDIKLQlibGVsci0KLTAwOglsaHp1CXI1LDIocjQpCi0Jc3RoCXI1LDAocjMpCi0JRUlFSU9fMzIKLQliZG56CTAwYgotCVNZTkNfNjQKLQlibHIKLQotI2lmZGVmIENPTkZJR19QUEMzMgotX0dMT0JBTChfX2lkZV9tbV9pbnNsKQotI2VuZGlmCi1fR0xPQkFMKF9pbnNsX25zKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCw0Ci0JYmxlbHItCi0wMDoJbHd6CXI1LDAocjMpCi0JZWllaW8KLQlzdHd1CXI1LDQocjQpCi0JYmRuegkwMGIKLQlJTl9TWU5DCi0JYmxyCi0KLSNpZmRlZiBDT05GSUdfUFBDMzIKLV9HTE9CQUwoX19pZGVfbW1fb3V0c2wpCi0jZW5kaWYKLV9HTE9CQUwoX291dHNsX25zKQotCWNtcHdpCTAscjUsMAotCW10Y3RyCXI1Ci0Jc3ViaQlyNCxyNCw0Ci0JYmxlbHItCi0wMDoJbHd6dQlyNSw0KHI0KQotCXN0dwlyNSwwKHIzKQotCUVJRUlPXzMyCi0JYmRuegkwMGIKLQlTWU5DXzY0Ci0JYmxyCi0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9taXNjXzY0LlMKaW5kZXggYmZiNDA3ZmMuLmUzZWQyMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbWlzY182NC5TCkBAIC02ODcsNyArNjg3LDcgQEAKIAkvKiBjbGVhciBvdXQgaGFyZHdhcmUgaGFzaCBwYWdlIHRhYmxlIGFuZCB0bGIgKi8KIAlsZAlyNSwwKHIyNykJCS8qIGRlcmVmIGZ1bmN0aW9uIGRlc2NyaXB0b3IgKi8KIAltdGN0cglyNQotCWJjdHJsCQkJCS8qIHBwY19tZC5oYXNoX2NsZWFyX2FsbCh2b2lkKTsgKi8KKwliY3RybAkJCQkvKiBwcGNfbWQuaHB0ZV9jbGVhcl9hbGwodm9pZCk7ICovCiAKIC8qCiAgKiAgIGtleGVjIGltYWdlIGNhbGxpbmcgaXM6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9vZl9kZXZpY2UuYwppbmRleCAzMjYyYjczLi4zOTdjODNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL29mX2RldmljZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvb2ZfZGV2aWNlLmMKQEAgLTE4OSwyNyArMTg5LDkgQEAKIGludCBvZl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCiB7CiAJaW50IHJjOwotCXN0cnVjdCBvZl9kZXZpY2UgKipvZHByb3A7CiAKIAlCVUdfT04ob2ZkZXYtPm5vZGUgPT0gTlVMTCk7CiAKLQlvZHByb3AgPSAoc3RydWN0IG9mX2RldmljZSAqKilnZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJsaW51eCxkZXZpY2UiLCBOVUxMKTsKLQlpZiAoIW9kcHJvcCkgewotCQlzdHJ1Y3QgcHJvcGVydHkgKm5ld19wcm9wOwotCQotCQluZXdfcHJvcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcm9wZXJ0eSkgKyBzaXplb2Yoc3RydWN0IG9mX2RldmljZSAqKSwKLQkJCUdGUF9LRVJORUwpOwotCQlpZiAobmV3X3Byb3AgPT0gTlVMTCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQluZXdfcHJvcC0+bmFtZSA9ICJsaW51eCxkZXZpY2UiOwotCQluZXdfcHJvcC0+bGVuZ3RoID0gc2l6ZW9mKHNpemVvZihzdHJ1Y3Qgb2ZfZGV2aWNlICopKTsKLQkJbmV3X3Byb3AtPnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKikmbmV3X3Byb3BbMV07Ci0JCW9kcHJvcCA9IChzdHJ1Y3Qgb2ZfZGV2aWNlICoqKW5ld19wcm9wLT52YWx1ZTsKLQkJKm9kcHJvcCA9IE5VTEw7Ci0JCXByb21fYWRkX3Byb3BlcnR5KG9mZGV2LT5ub2RlLCBuZXdfcHJvcCk7Ci0JfQotCSpvZHByb3AgPSBvZmRldjsKLQogCXJjID0gZGV2aWNlX3JlZ2lzdGVyKCZvZmRldi0+ZGV2KTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKQEAgLTIyMSwxNCArMjAzLDggQEAKIAogdm9pZCBvZl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldikKIHsKLQlzdHJ1Y3Qgb2ZfZGV2aWNlICoqb2Rwcm9wOwotCiAJZGV2aWNlX3JlbW92ZV9maWxlKCZvZmRldi0+ZGV2LCAmZGV2X2F0dHJfZGV2c3BlYyk7CiAKLQlvZHByb3AgPSAoc3RydWN0IG9mX2RldmljZSAqKilnZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsICJsaW51eCxkZXZpY2UiLCBOVUxMKTsKLQlpZiAob2Rwcm9wKQotCQkqb2Rwcm9wID0gTlVMTDsKLQogCWRldmljZV91bnJlZ2lzdGVyKCZvZmRldi0+ZGV2KTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wYWNhLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwppbmRleCBjNjg3NDFmLi41NWYxYTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9yZWdfc2F2ZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAKIC8qIFRoaXMgc3ltYm9sIGlzIHByb3ZpZGVkIGJ5IHRoZSBsaW5rZXIgLSBsZXQgaXQgZmlsbCBpbiB0aGUgcGFjYQpAQCAtNDUsNiArNDYsMTcgQEAKIAl9LAogfTsKIAorLyoKKyAqIDMgcGVyc2lzdGVudCBTTEJzIGFyZSByZWdpc3RlcmVkIGhlcmUuICBUaGUgYnVmZmVyIHdpbGwgYmUgemVybworICogaW5pdGlhbGx5LCBoZW5jZSB3aWxsIGFsbCBiZSBpbnZhaWxkIHVudGlsIHdlIGFjdHVhbGx5IHdyaXRlIHRoZW0uCisgKi8KK3N0cnVjdCBzbGJfc2hhZG93IHNsYl9zaGFkb3dbXSBfX2NhY2hlbGluZV9hbGlnbmVkID0geworCVswIC4uLiAoTlJfQ1BVUy0xKV0gPSB7CisJCS5wZXJzaXN0ZW50ID0gU0xCX05VTV9CT0xURUQsCisJCS5idWZmZXJfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzbGJfc2hhZG93KSwKKwl9LAorfTsKKwogLyogVGhlIFBhY2EgaXMgYW4gYXJyYXkgd2l0aCBvbmUgZW50cnkgcGVyIHByb2Nlc3Nvci4gIEVhY2ggY29udGFpbnMgYW4KICAqIGxwcGFjYSwgd2hpY2ggY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHNoYXJlZCBiZXR3ZWVuIHRoZQogICogaHlwZXJ2aXNvciBhbmQgTGludXguCkBAIC01OSw3ICs3MSw4IEBACiAJLmxvY2tfdG9rZW4gPSAweDgwMDAsCQkJCQkJICAgIFwKIAkucGFjYV9pbmRleCA9IChudW1iZXIpLAkJLyogUGFjYSBJbmRleCAqLwkJICAgIFwKIAkua2VybmVsX3RvYyA9ICh1bnNpZ25lZCBsb25nKSgmX190b2Nfc3RhcnQpICsgMHg4MDAwVUwsCQkgICAgXAotCS5od19jcHVfaWQgPSAweGZmZmYsCisJLmh3X2NwdV9pZCA9IDB4ZmZmZiwJCQkJCQkgICAgXAorCS5zbGJfc2hhZG93X3B0ciA9ICZzbGJfc2hhZG93W251bWJlcl0sCiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKICNkZWZpbmUgUEFDQV9JTklUX0lTRVJJRVMobnVtYmVyKQkJCQkJICAgIFwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCmluZGV4IDA5YjFlMWIuLjliNDlmODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwpAQCAtNjMzLDEyICs2MzMsMTIgQEAKIHN0YXRpYyB2b2lkCiBtYWtlX29uZV9ub2RlX21hcChzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIHU4IHBjaV9idXMpCiB7Ci0JaW50ICpidXNfcmFuZ2U7CisJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAJaW50IGxlbjsKIAogCWlmIChwY2lfYnVzID49IHBjaV9idXNfY291bnQpCiAJCXJldHVybjsKLQlidXNfcmFuZ2UgPSAoaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJYnVzX3JhbmdlID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJidXMtcmFuZ2UiLCAmbGVuKTsKIAlpZiAoYnVzX3JhbmdlID09IE5VTEwgfHwgbGVuIDwgMiAqIHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yICVzLCAiCiAJCSAgICAgICAiYXNzdW1pbmcgaXQgc3RhcnRzIGF0IDBcbiIsIG5vZGUtPmZ1bGxfbmFtZSk7CkBAIC02NDgsMTMgKzY0OCwxMyBAQAogCiAJZm9yIChub2RlPW5vZGUtPmNoaWxkOyBub2RlICE9IDA7bm9kZSA9IG5vZGUtPnNpYmxpbmcpIHsKIAkJc3RydWN0IHBjaV9kZXYqIGRldjsKLQkJdW5zaWduZWQgaW50ICpjbGFzc19jb2RlLCAqcmVnOworCQljb25zdCB1bnNpZ25lZCBpbnQgKmNsYXNzX2NvZGUsICpyZWc7CiAJCi0JCWNsYXNzX2NvZGUgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAiY2xhc3MtY29kZSIsIE5VTEwpOworCQljbGFzc19jb2RlID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJjbGFzcy1jb2RlIiwgTlVMTCk7CiAJCWlmICghY2xhc3NfY29kZSB8fCAoKCpjbGFzc19jb2RlID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJICYmCiAJCQkoKmNsYXNzX2NvZGUgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTKSkKIAkJCWNvbnRpbnVlOwotCQlyZWcgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKKwkJcmVnID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKIAkJaWYgKCFyZWcpCiAJCQljb250aW51ZTsKIAkJZGV2ID0gcGNpX2ZpbmRfc2xvdChwY2lfYnVzLCAoKHJlZ1swXSA+PiA4KSAmIDB4ZmYpKTsKQEAgLTY2OSw3ICs2NjksNyBAQAogewogCWludCBpOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciogaG9zZTsKLQl1OCogb2ZfcHJvcF9tYXA7CisJc3RydWN0IHByb3BlcnR5ICptYXBfcHJvcDsKIAogCXBjaV90b19PRl9idXNfbWFwID0gKHU4KilrbWFsbG9jKHBjaV9idXNfY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcGNpX3RvX09GX2J1c19tYXApIHsKQEAgLTY5MSw5ICs2OTEsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQltYWtlX29uZV9ub2RlX21hcChub2RlLCBob3NlLT5maXJzdF9idXNubyk7CiAJfQotCW9mX3Byb3BfbWFwID0gZ2V0X3Byb3BlcnR5KGZpbmRfcGF0aF9kZXZpY2UoIi8iKSwgInBjaS1PRi1idXMtbWFwIiwgTlVMTCk7Ci0JaWYgKG9mX3Byb3BfbWFwKQotCQltZW1jcHkob2ZfcHJvcF9tYXAsIHBjaV90b19PRl9idXNfbWFwLCBwY2lfYnVzX2NvdW50KTsKKwltYXBfcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoZmluZF9wYXRoX2RldmljZSgiLyIpLAorCQkJInBjaS1PRi1idXMtbWFwIiwgTlVMTCk7CisJaWYgKG1hcF9wcm9wKSB7CisJCUJVR19PTihwY2lfYnVzX2NvdW50ID4gbWFwX3Byb3AtPmxlbmd0aCk7CisJCW1lbWNweShtYXBfcHJvcC0+dmFsdWUsIHBjaV90b19PRl9idXNfbWFwLCBwY2lfYnVzX2NvdW50KTsKKwl9CiAjaWZkZWYgREVCVUcKIAlwcmludGsoIlBDSS0+T0YgYnVzIG1hcDpcbiIpOwogCWZvciAoaT0wOyBpPHBjaV9idXNfY291bnQ7IGkrKykgewpAQCAtNzEyLDcgKzcxNSw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlKiBzdWJfbm9kZTsKIAogCWZvciAoOyBub2RlICE9IDA7bm9kZSA9IG5vZGUtPnNpYmxpbmcpIHsKLQkJdW5zaWduZWQgaW50ICpjbGFzc19jb2RlOworCQljb25zdCB1bnNpZ25lZCBpbnQgKmNsYXNzX2NvZGU7CiAJCiAJCWlmIChmaWx0ZXIobm9kZSwgZGF0YSkpCiAJCQlyZXR1cm4gbm9kZTsKQEAgLTcyMiw3ICs3MjUsNyBAQAogCQkgKiBhIGZha2Ugcm9vdCBmb3IgYWxsIGZ1bmN0aW9ucyBvZiBhIG11bHRpLWZ1bmN0aW9uIGRldmljZSwKIAkJICogd2UgZ28gZG93biB0aGVtIGFzIHdlbGwuCiAJCSAqLwotCQljbGFzc19jb2RlID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkobm9kZSwgImNsYXNzLWNvZGUiLCBOVUxMKTsKKwkJY2xhc3NfY29kZSA9IGdldF9wcm9wZXJ0eShub2RlLCAiY2xhc3MtY29kZSIsIE5VTEwpOwogCQlpZiAoKCFjbGFzc19jb2RlIHx8ICgoKmNsYXNzX2NvZGUgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9QQ0kgJiYKIAkJCSgqY2xhc3NfY29kZSA+PiA4KSAhPSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMpKSAmJgogCQkJc3RyY21wKG5vZGUtPm5hbWUsICJtdWx0aWZ1bmMtZGV2aWNlIikpCkBAIC03MzcsMTAgKzc0MCwxMCBAQAogc3RhdGljIGludAogc2Nhbl9PRl9wY2lfY2hpbGRzX2l0ZXJhdG9yKHN0cnVjdCBkZXZpY2Vfbm9kZSogbm9kZSwgdm9pZCogZGF0YSkKIHsKLQl1bnNpZ25lZCBpbnQgKnJlZzsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnJlZzsKIAl1OCogZmRhdGEgPSAodTgqKWRhdGE7CiAJCi0JcmVnID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkobm9kZSwgInJlZyIsIE5VTEwpOworCXJlZyA9IGdldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgTlVMTCk7CiAJaWYgKHJlZyAmJiAoKHJlZ1swXSA+PiA4KSAmIDB4ZmYpID09IGZkYXRhWzFdCiAJCSYmICgocmVnWzBdID4+IDE2KSAmIDB4ZmYpID09IGZkYXRhWzBdKQogCQlyZXR1cm4gMTsKQEAgLTg0MSw3ICs4NDQsNyBAQAogaW50CiBwY2lfZGV2aWNlX2Zyb21fT0Zfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUqIG5vZGUsIHU4KiBidXMsIHU4KiBkZXZmbikKIHsKLQl1bnNpZ25lZCBpbnQgKnJlZzsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnJlZzsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIGhvc2U7CiAJc3RydWN0IHBjaV9kZXYqIGRldiA9IE5VTEw7CiAJCkBAIC04NTQsNyArODU3LDcgQEAKIAlpZiAoIXNjYW5fT0ZfcGNpX2NoaWxkcygoKHN0cnVjdCBkZXZpY2Vfbm9kZSopaG9zZS0+YXJjaF9kYXRhKS0+Y2hpbGQsCiAJCQlmaW5kX09GX3BjaV9kZXZpY2VfZmlsdGVyLCAodm9pZCAqKW5vZGUpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZWcgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgTlVMTCk7CisJcmVnID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKIAlpZiAoIXJlZykKIAkJcmV0dXJuIC1FTk9ERVY7CiAJKmJ1cyA9IChyZWdbMF0gPj4gMTYpICYgMHhmZjsKQEAgLTg4NSw4ICs4ODgsOCBAQAogCQkJICAgc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBwcmltYXJ5KQogewogCXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhdGljX2xjX3Jhbmdlc1syNTZdIF9faW5pdGRhdGE7Ci0JdW5zaWduZWQgaW50ICpkdF9yYW5nZXMsICpsY19yYW5nZXMsICpyYW5nZXMsICpwcmV2OwotCXVuc2lnbmVkIGludCBzaXplOworCWNvbnN0IHVuc2lnbmVkIGludCAqZHRfcmFuZ2VzOworCXVuc2lnbmVkIGludCAqbGNfcmFuZ2VzLCAqcmFuZ2VzLCAqcHJldiwgc2l6ZTsKIAlpbnQgcmxlbiA9IDAsIG9yaWdfcmxlbjsKIAlpbnQgbWVtbm8gPSAwOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpAQCAtODk3LDcgKzkwMCw3IEBACiAJICogdGhhdCBjYW4gaGF2ZSBtb3JlIHRoYW4gMyByYW5nZXMsIGZvcnR1bmF0ZWx5IHVzaW5nIGNvbnRpZ3VvdXMKIAkgKiBhZGRyZXNzZXMgLS0gQmVuSAogCSAqLwotCWR0X3JhbmdlcyA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KGRldiwgInJhbmdlcyIsICZybGVuKTsKKwlkdF9yYW5nZXMgPSBnZXRfcHJvcGVydHkoZGV2LCAicmFuZ2VzIiwgJnJsZW4pOwogCWlmICghZHRfcmFuZ2VzKQogCQlyZXR1cm47CiAJLyogU2FuaXR5IGNoZWNrLCB0aG91Z2ggaG9wZWZ1bGx5IHRoYXQgbmV2ZXIgaGFwcGVucyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKaW5kZXggMmZjZTc3My4uYzFiMWUxNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCkBAIC0xODUsMzQgKzE4NSw2IEBACiAJc3Bpbl91bmxvY2soJmhvc2Vfc3BpbmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfbGludXhfcGNpX2RvbWFpbihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKLQkJCQkgc3RydWN0IHBjaV9jb250cm9sbGVyICpwaGIpCi17Ci0Jc3RydWN0IHByb3BlcnR5ICpvZl9wcm9wOwotCXVuc2lnbmVkIGludCBzaXplOwotCi0Jb2ZfcHJvcCA9IChzdHJ1Y3QgcHJvcGVydHkgKikKLQkJZ2V0X3Byb3BlcnR5KGRldiwgImxpbnV4LHBjaS1kb21haW4iLCAmc2l6ZSk7Ci0JaWYgKG9mX3Byb3AgIT0gTlVMTCkKLQkJcmV0dXJuOwotCVdBUk5fT04ob2ZfcHJvcCAmJiBzaXplIDwgc2l6ZW9mKGludCkpOwotCWlmIChvZl9wcm9wICYmIHNpemUgPCBzaXplb2YoaW50KSkKLQkJb2ZfcHJvcCA9IE5VTEw7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpICsgc2l6ZW9mKGludCk7Ci0JaWYgKG9mX3Byb3AgPT0gTlVMTCkgewotCQlpZiAobWVtX2luaXRfZG9uZSkKLQkJCW9mX3Byb3AgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCQllbHNlCi0JCQlvZl9wcm9wID0gYWxsb2NfYm9vdG1lbShzaXplKTsKLQl9Ci0JbWVtc2V0KG9mX3Byb3AsIDAsIHNpemVvZihzdHJ1Y3QgcHJvcGVydHkpKTsKLQlvZl9wcm9wLT5uYW1lID0gImxpbnV4LHBjaS1kb21haW4iOwotCW9mX3Byb3AtPmxlbmd0aCA9IHNpemVvZihpbnQpOwotCW9mX3Byb3AtPnZhbHVlID0gKHVuc2lnbmVkIGNoYXIgKikmb2ZfcHJvcFsxXTsKLQkqKChpbnQgKilvZl9wcm9wLT52YWx1ZSkgPSBwaGItPmdsb2JhbF9udW1iZXI7Ci0JcHJvbV9hZGRfcHJvcGVydHkoZGV2LCBvZl9wcm9wKTsKLX0KLQogc3RydWN0IHBjaV9jb250cm9sbGVyICogcGNpYmlvc19hbGxvY19jb250cm9sbGVyKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwpAQCAtMjI2LDIyICsxOTgsMTMgQEAKIAlwY2lfc2V0dXBfcGNpX2NvbnRyb2xsZXIocGhiKTsKIAlwaGItPmFyY2hfZGF0YSA9IGRldjsKIAlwaGItPmlzX2R5bmFtaWMgPSBtZW1faW5pdF9kb25lOwotCWlmIChkZXYpIHsKKwlpZiAoZGV2KQogCQlQSEJfU0VUX05PREUocGhiLCBvZl9ub2RlX3RvX25pZChkZXYpKTsKLQkJYWRkX2xpbnV4X3BjaV9kb21haW4oZGV2LCBwaGIpOwotCX0KIAlyZXR1cm4gcGhiOwogfQogCiB2b2lkIHBjaWJpb3NfZnJlZV9jb250cm9sbGVyKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKQogewotCWlmIChwaGItPmFyY2hfZGF0YSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gcGhiLT5hcmNoX2RhdGE7Ci0JCWludCAqZG9tYWluID0gKGludCAqKWdldF9wcm9wZXJ0eShucCwKLQkJCQkJCSAgImxpbnV4LHBjaS1kb21haW4iLCBOVUxMKTsKLQkJaWYgKGRvbWFpbikKLQkJCSpkb21haW4gPSAtMTsKLQl9CiAJaWYgKHBoYi0+aXNfZHluYW1pYykKIAkJa2ZyZWUocGhiKTsKIH0KQEAgLTI4MywxMCArMjQ2LDEwIEBACiAjaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiBzdGF0aWMgdTMyIGdldF9pbnRfcHJvcChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCB1MzIgZGVmKQogewotCXUzMiAqcHJvcDsKKwljb25zdCB1MzIgKnByb3A7CiAJaW50IGxlbjsKIAotCXByb3AgPSAodTMyICopIGdldF9wcm9wZXJ0eShucCwgbmFtZSwgJmxlbik7CisJcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgbmFtZSwgJmxlbik7CiAJaWYgKHByb3AgJiYgbGVuID49IDQpCiAJCXJldHVybiAqcHJvcDsKIAlyZXR1cm4gZGVmOwpAQCAtMzE1LDEwICsyNzgsMTEgQEAKIAl1NjQgYmFzZSwgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JdTMyICphZGRycywgaTsKKwljb25zdCB1MzIgKmFkZHJzOworCXUzMiBpOwogCWludCBwcm9wbGVuOwogCi0JYWRkcnMgPSAodTMyICopIGdldF9wcm9wZXJ0eShub2RlLCAiYXNzaWduZWQtYWRkcmVzc2VzIiwgJnByb3BsZW4pOworCWFkZHJzID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJhc3NpZ25lZC1hZGRyZXNzZXMiLCAmcHJvcGxlbik7CiAJaWYgKCFhZGRycykKIAkJcmV0dXJuOwogCURCRygiICAgIHBhcnNlIGFkZHJlc3NlcyAoJWQgYnl0ZXMpIEAgJXBcbiIsIHByb3BsZW4sIGFkZHJzKTsKQEAgLTQxOCw3ICszODIsNyBAQAogCQkJCSAgc3RydWN0IHBjaV9idXMgKmJ1cykKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkID0gTlVMTDsKLQl1MzIgKnJlZzsKKwljb25zdCB1MzIgKnJlZzsKIAlpbnQgcmVnbGVuLCBkZXZmbjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2OwogCkBAIC00MjYsNyArMzkwLDcgQEAKIAogCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChub2RlLCBjaGlsZCkpICE9IE5VTEwpIHsKIAkJREJHKCIgICogJXNcbiIsIGNoaWxkLT5mdWxsX25hbWUpOwotCQlyZWcgPSAodTMyICopIGdldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsICZyZWdsZW4pOworCQlyZWcgPSBnZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCAmcmVnbGVuKTsKIAkJaWYgKHJlZyA9PSBOVUxMIHx8IHJlZ2xlbiA8IDIwKQogCQkJY29udGludWU7CiAJCWRldmZuID0gKHJlZ1swXSA+PiA4KSAmIDB4ZmY7CkBAIC00NTAsNyArNDE0LDcgQEAKIAkJCSAJc3RydWN0IHBjaV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwotCXUzMiAqYnVzcmFuZ2UsICpyYW5nZXM7CisJY29uc3QgdTMyICpidXNyYW5nZSwgKnJhbmdlczsKIAlpbnQgbGVuLCBpLCBtb2RlOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXVuc2lnbmVkIGludCBmbGFnczsKQEAgLTQ1OSwxMyArNDIzLDEzIEBACiAJREJHKCJvZl9zY2FuX3BjaV9icmlkZ2UoJXMpXG4iLCBub2RlLT5mdWxsX25hbWUpOwogCiAJLyogcGFyc2UgYnVzLXJhbmdlIHByb3BlcnR5ICovCi0JYnVzcmFuZ2UgPSAodTMyICopIGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJYnVzcmFuZ2UgPSBnZXRfcHJvcGVydHkobm9kZSwgImJ1cy1yYW5nZSIsICZsZW4pOwogCWlmIChidXNyYW5nZSA9PSBOVUxMIHx8IGxlbiAhPSA4KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJDYW4ndCBnZXQgYnVzLXJhbmdlIGZvciBQQ0ktUENJIGJyaWRnZSAlc1xuIiwKIAkJICAgICAgIG5vZGUtPmZ1bGxfbmFtZSk7CiAJCXJldHVybjsKIAl9Ci0JcmFuZ2VzID0gKHUzMiAqKSBnZXRfcHJvcGVydHkobm9kZSwgInJhbmdlcyIsICZsZW4pOworCXJhbmdlcyA9IGdldF9wcm9wZXJ0eShub2RlLCAicmFuZ2VzIiwgJmxlbik7CiAJaWYgKHJhbmdlcyA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJDYW4ndCBnZXQgcmFuZ2VzIGZvciBQQ0ktUENJIGJyaWRnZSAlc1xuIiwKIAkJICAgICAgIG5vZGUtPmZ1bGxfbmFtZSk7CkBAIC05MjksMTMgKzg5MywxMyBAQAogCQl1bnNpZ25lZCBpbnQgc2l6ZTsKIAl9OwogCi0Jc3RydWN0IGlzYV9yYW5nZSAqcmFuZ2U7CisJY29uc3Qgc3RydWN0IGlzYV9yYW5nZSAqcmFuZ2U7CiAJdW5zaWduZWQgbG9uZyBwY2lfYWRkcjsKIAl1bnNpZ25lZCBpbnQgaXNhX2FkZHI7CiAJdW5zaWduZWQgaW50IHNpemU7CiAJaW50IHJsZW4gPSAwOwogCi0JcmFuZ2UgPSAoc3RydWN0IGlzYV9yYW5nZSAqKSBnZXRfcHJvcGVydHkoaXNhX25vZGUsICJyYW5nZXMiLCAmcmxlbik7CisJcmFuZ2UgPSBnZXRfcHJvcGVydHkoaXNhX25vZGUsICJyYW5nZXMiLCAmcmxlbik7CiAJaWYgKHJhbmdlID09IE5VTEwgfHwgKHJsZW4gPCBzaXplb2Yoc3RydWN0IGlzYV9yYW5nZSkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibm8gSVNBIHJhbmdlcyBvciB1bmV4cGVjdGVkIGlzYSByYW5nZSBzaXplLCIKIAkJICAgICAgICJtYXBwaW5nIDY0a1xuIik7CkBAIC05NzYsNyArOTQwLDggQEAKIHZvaWQgX19kZXZpbml0IHBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAogCQkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBwcmltKQogewotCXVuc2lnbmVkIGludCAqcmFuZ2VzLCBwY2lfc3BhY2U7CisJY29uc3QgdW5zaWduZWQgaW50ICpyYW5nZXM7CisJdW5zaWduZWQgaW50IHBjaV9zcGFjZTsKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJaW50IHJsZW4gPSAwOwogCWludCBtZW1ubyA9IDA7CkBAIC05OTQsNyArOTU5LDcgQEAKIAkgKgkJCShzaXplIGRlcGVuZGluZyBvbiBkZXYtPm5fYWRkcl9jZWxscykKIAkgKiAgIGNlbGxzIDQrNSBvciA1KzY6CXRoZSBzaXplIG9mIHRoZSByYW5nZQogCSAqLwotCXJhbmdlcyA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KGRldiwgInJhbmdlcyIsICZybGVuKTsKKwlyYW5nZXMgPSBnZXRfcHJvcGVydHkoZGV2LCAicmFuZ2VzIiwgJnJsZW4pOwogCWlmIChyYW5nZXMgPT0gTlVMTCkKIAkJcmV0dXJuOwogCWhvc2UtPmlvX2Jhc2VfcGh5cyA9IDA7CkBAIC0xMjg5LDYgKzEyNTQsOSBAQAogCiAJREJHKCJUcnkgdG8gbWFwIGlycSBmb3IgJXMuLi5cbiIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKIAorI2lmZGVmIERFQlVHCisJbWVtc2V0KCZvaXJxLCAweGZmLCBzaXplb2Yob2lycSkpOworI2VuZGlmCiAJLyogVHJ5IHRvIGdldCBhIG1hcHBpbmcgZnJvbSB0aGUgZGV2aWNlLXRyZWUgKi8KIAlpZiAob2ZfaXJxX21hcF9wY2kocGNpX2RldiwgJm9pcnEpKSB7CiAJCXU4IGxpbmUsIHBpbjsKQEAgLTEzMTQsOCArMTI4Miw5IEBACiAJCWlmICh2aXJxICE9IE5PX0lSUSkKIAkJCXNldF9pcnFfdHlwZSh2aXJxLCBJUlFfVFlQRV9MRVZFTF9MT1cpOwogCX0gZWxzZSB7Ci0JCURCRygiIC0+IGdvdCBvbmUsIHNwZWMgJWQgY2VsbHMgKDB4JTA4eC4uLikgb24gJXNcbiIsCi0JCSAgICBvaXJxLnNpemUsIG9pcnEuc3BlY2lmaWVyWzBdLCBvaXJxLmNvbnRyb2xsZXItPmZ1bGxfbmFtZSk7CisJCURCRygiIC0+IGdvdCBvbmUsIHNwZWMgJWQgY2VsbHMgKDB4JTA4eCAweCUwOHguLi4pIG9uICVzXG4iLAorCQkgICAgb2lycS5zaXplLCBvaXJxLnNwZWNpZmllclswXSwgb2lycS5zcGVjaWZpZXJbMV0sCisJCSAgICBvaXJxLmNvbnRyb2xsZXItPmZ1bGxfbmFtZSk7CiAKIAkJdmlycSA9IGlycV9jcmVhdGVfb2ZfbWFwcGluZyhvaXJxLmNvbnRyb2xsZXIsIG9pcnEuc3BlY2lmaWVyLAogCQkJCQkgICAgIG9pcnEuc2l6ZSk7CkBAIC0xMzI0LDYgKzEyOTMsOSBAQAogCQlEQkcoIiAtPiBmYWlsZWQgdG8gbWFwICFcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQorCisJREJHKCIgLT4gbWFwcGVkIHRvIGxpbnV4IGlycSAlZFxuIiwgdmlycSk7CisKIAlwY2lfZGV2LT5pcnEgPSB2aXJxOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIHZpcnEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfZG4uYwppbmRleCAxYzE4OTUzLi42OGRmMDE4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV9kbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpX2RuLmMKQEAgLTQwLDggKzQwLDggQEAKIHN0YXRpYyB2b2lkICogX19kZXZpbml0IHVwZGF0ZV9kbl9wY2lfaW5mbyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiID0gZGF0YTsKLQlpbnQgKnR5cGUgPSAoaW50ICopZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHBjaS1jb25maWctc3BhY2UtdHlwZSIsIE5VTEwpOwotCXUzMiAqcmVnczsKKwljb25zdCBpbnQgKnR5cGUgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0scGNpLWNvbmZpZy1zcGFjZS10eXBlIiwgTlVMTCk7CisJY29uc3QgdTMyICpyZWdzOwogCXN0cnVjdCBwY2lfZG4gKnBkbjsKIAogCWlmIChtZW1faW5pdF9kb25lKQpAQCAtNTQsMTQgKzU0LDE0IEBACiAJZG4tPmRhdGEgPSBwZG47CiAJcGRuLT5ub2RlID0gZG47CiAJcGRuLT5waGIgPSBwaGI7Ci0JcmVncyA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJyZWciLCBOVUxMKTsKKwlyZWdzID0gZ2V0X3Byb3BlcnR5KGRuLCAicmVnIiwgTlVMTCk7CiAJaWYgKHJlZ3MpIHsKIAkJLyogRmlyc3QgcmVnaXN0ZXIgZW50cnkgaXMgYWRkciAoMDBCQlNTMDApICAqLwogCQlwZG4tPmJ1c25vID0gKHJlZ3NbMF0gPj4gMTYpICYgMHhmZjsKIAkJcGRuLT5kZXZmbiA9IChyZWdzWzBdID4+IDgpICYgMHhmZjsKIAl9CiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpIHsKLQkJdTMyICpidXNwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkbiwgImxpbnV4LHN1YmJ1cyIsIE5VTEwpOworCQljb25zdCB1MzIgKmJ1c3AgPSBnZXRfcHJvcGVydHkoZG4sICJsaW51eCxzdWJidXMiLCBOVUxMKTsKIAkJaWYgKGJ1c3ApCiAJCQlwZG4tPmJ1c3N1Ym5vID0gKmJ1c3A7CiAJfQpAQCAtOTYsMTAgKzk2LDExIEBACiAKIAkvKiBXZSBzdGFydGVkIHdpdGggYSBwaGIsIGl0ZXJhdGUgYWxsIGNoaWxkcyAqLwogCWZvciAoZG4gPSBzdGFydC0+Y2hpbGQ7IGRuOyBkbiA9IG5leHRkbikgewotCQl1MzIgKmNsYXNzcCwgY2xhc3M7CisJCWNvbnN0IHUzMiAqY2xhc3NwOworCQl1MzIgY2xhc3M7CiAKIAkJbmV4dGRuID0gTlVMTDsKLQkJY2xhc3NwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkbiwgImNsYXNzLWNvZGUiLCBOVUxMKTsKKwkJY2xhc3NwID0gZ2V0X3Byb3BlcnR5KGRuLCAiY2xhc3MtY29kZSIsIE5VTEwpOwogCQljbGFzcyA9IGNsYXNzcCA/ICpjbGFzc3AgOiAwOwogCiAJCWlmIChwcmUgJiYgKChyZXQgPSBwcmUoZG4sIGRhdGEpKSAhPSBOVUxMKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BwY19rc3ltcy5jCmluZGV4IGY2YTA1ZjAuLjgwNzE5M2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtOTEsMjUgKzkxLDEwIEBACiBFWFBPUlRfU1lNQk9MKF9fY2xlYXJfdXNlcik7CiBFWFBPUlRfU1lNQk9MKF9fc3RybmNweV9mcm9tX3VzZXIpOwogRVhQT1JUX1NZTUJPTChfX3N0cm5sZW5fdXNlcik7Ci0KLSNpZm5kZWYgIF9fcG93ZXJwYzY0X18KLUVYUE9SVF9TWU1CT0woX19pZGVfbW1faW5zbCk7Ci1FWFBPUlRfU1lNQk9MKF9faWRlX21tX291dHN3KTsKLUVYUE9SVF9TWU1CT0woX19pZGVfbW1faW5zdyk7Ci1FWFBPUlRfU1lNQk9MKF9faWRlX21tX291dHNsKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKK0VYUE9SVF9TWU1CT0woY29weV80S19wYWdlKTsKICNlbmRpZgogCi1FWFBPUlRfU1lNQk9MKF9pbnNiKTsKLUVYUE9SVF9TWU1CT0woX291dHNiKTsKLUVYUE9SVF9TWU1CT0woX2luc3cpOwotRVhQT1JUX1NZTUJPTChfb3V0c3cpOwotRVhQT1JUX1NZTUJPTChfaW5zbCk7Ci1FWFBPUlRfU1lNQk9MKF9vdXRzbCk7Ci1FWFBPUlRfU1lNQk9MKF9pbnN3X25zKTsKLUVYUE9SVF9TWU1CT0woX291dHN3X25zKTsKLUVYUE9SVF9TWU1CT0woX2luc2xfbnMpOwotRVhQT1JUX1NZTUJPTChfb3V0c2xfbnMpOwotCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIChkZWZpbmVkKENPTkZJR19CTEtfREVWX0lERSkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0RFVl9JREVfTU9EVUxFKSkKIEVYUE9SVF9TWU1CT0wocHBjX2lkZV9tZCk7CiAjZW5kaWYKQEAgLTEyNiwxMCArMTExLDYgQEAKIEVYUE9SVF9TWU1CT0wocGNpX2J1c190b19ob3NlKTsKICNlbmRpZiAvKiBDT05GSUdfUENJICovCiAKLSNpZmRlZiBDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFCi1FWFBPUlRfU1lNQk9MKGZsdXNoX2RjYWNoZV9hbGwpOwotI2VuZGlmCi0KIEVYUE9SVF9TWU1CT0woc3RhcnRfdGhyZWFkKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggYTE3ODdmZi4uZWI5MTNmOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTc1NywyNCArNzU3LDkgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBkdF9tZW1fbmV4dF9jZWxsKGludCBzLCBjZWxsX3QgKipjZWxscCkKIHsKIAljZWxsX3QgKnAgPSAqY2VsbHA7Ci0JdW5zaWduZWQgbG9uZyByOwogCi0JLyogSWdub3JlIG1vcmUgdGhhbiAyIGNlbGxzICovCi0Jd2hpbGUgKHMgPiBzaXplb2YodW5zaWduZWQgbG9uZykgLyA0KSB7Ci0JCXArKzsKLQkJcy0tOwotCX0KLQlyID0gKnArKzsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQlpZiAocyA+IDEpIHsKLQkJciA8PD0gMzI7Ci0JCXIgfD0gKihwKyspOwotCQlzLS07Ci0JfQotI2VuZGlmCi0KLQkqY2VsbHAgPSBwOwotCXJldHVybiByOworCSpjZWxscCA9IHAgKyBzOworCXJldHVybiBvZl9yZWFkX3Vsb25nKHAsIHMpOwogfQogCiAKQEAgLTk0MiwxMSArOTI3LDExIEBACiBpbnQKIHByb21fbl9hZGRyX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApCiB7Ci0JaW50KiBpcDsKKwljb25zdCBpbnQgKmlwOwogCWRvIHsKIAkJaWYgKG5wLT5wYXJlbnQpCiAJCQlucCA9IG5wLT5wYXJlbnQ7Ci0JCWlwID0gKGludCAqKSBnZXRfcHJvcGVydHkobnAsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCQlpcCA9IGdldF9wcm9wZXJ0eShucCwgIiNhZGRyZXNzLWNlbGxzIiwgTlVMTCk7CiAJCWlmIChpcCAhPSBOVUxMKQogCQkJcmV0dXJuICppcDsKIAl9IHdoaWxlIChucC0+cGFyZW50KTsKQEAgLTk1OCwxMSArOTQzLDExIEBACiBpbnQKIHByb21fbl9zaXplX2NlbGxzKHN0cnVjdCBkZXZpY2Vfbm9kZSogbnApCiB7Ci0JaW50KiBpcDsKKwljb25zdCBpbnQqIGlwOwogCWRvIHsKIAkJaWYgKG5wLT5wYXJlbnQpCiAJCQlucCA9IG5wLT5wYXJlbnQ7Ci0JCWlwID0gKGludCAqKSBnZXRfcHJvcGVydHkobnAsICIjc2l6ZS1jZWxscyIsIE5VTEwpOworCQlpcCA9IGdldF9wcm9wZXJ0eShucCwgIiNzaXplLWNlbGxzIiwgTlVMTCk7CiAJCWlmIChpcCAhPSBOVUxMKQogCQkJcmV0dXJuICppcDsKIAl9IHdoaWxlIChucC0+cGFyZW50KTsKQEAgLTEwMzQsNyArMTAxOSw3IEBACiAJY29uc3QgY2hhciogY3A7CiAJaW50IGNwbGVuLCBsOwogCi0JY3AgPSAoY2hhciAqKSBnZXRfcHJvcGVydHkoZGV2aWNlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CisJY3AgPSBnZXRfcHJvcGVydHkoZGV2aWNlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CiAJaWYgKGNwID09IE5VTEwpCiAJCXJldHVybiAwOwogCXdoaWxlIChjcGxlbiA+IDApIHsKQEAgLTE0NDksNyArMTQzNCw3IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBvZl9nZXRfcGFyZW50KG5vZGUpOwogCWludCBlcnIgPSAwOwotCXBoYW5kbGUgKmlibV9waGFuZGxlOworCWNvbnN0IHBoYW5kbGUgKmlibV9waGFuZGxlOwogCiAJbm9kZS0+bmFtZSA9IGdldF9wcm9wZXJ0eShub2RlLCAibmFtZSIsIE5VTEwpOwogCW5vZGUtPnR5cGUgPSBnZXRfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CkBAIC0xNDY2LDggKzE0NTEsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIGZpeCB1cCBuZXcgbm9kZSdzIGxpbnV4X3BoYW5kbGUgZmllbGQgKi8KLQlpZiAoKGlibV9waGFuZGxlID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShub2RlLAotCQkJCQkJCSJpYm0scGhhbmRsZSIsIE5VTEwpKSkKKwlpZiAoKGlibV9waGFuZGxlID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJpYm0scGhhbmRsZSIsIE5VTEwpKSkKIAkJbm9kZS0+bGludXhfcGhhbmRsZSA9ICppYm1fcGhhbmRsZTsKIAogb3V0OgpAQCAtMTUyOCw3ICsxNTEyLDcgQEAKICAqIEZpbmQgYSBwcm9wZXJ0eSB3aXRoIGEgZ2l2ZW4gbmFtZSBmb3IgYSBnaXZlbiBub2RlCiAgKiBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KICAqLwotdm9pZCAqZ2V0X3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqbGVucCkKK2NvbnN0IHZvaWQgKmdldF9wcm9wZXJ0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgKmxlbnApCiB7CiAJc3RydWN0IHByb3BlcnR5ICpwcCA9IG9mX2ZpbmRfcHJvcGVydHkobnAsbmFtZSxsZW5wKTsKIAlyZXR1cm4gcHAgPyBwcC0+dmFsdWUgOiBOVUxMOwpAQCAtMTY1OCwxNiArMTY0MiwxNiBAQAogCWhhcmRpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKIAogCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgImNwdSIpIHsKLQkJdTMyICppbnRzZXJ2OworCQljb25zdCB1MzIgKmludHNlcnY7CiAJCXVuc2lnbmVkIGludCBwbGVuLCB0OwogCiAJCS8qIENoZWNrIGZvciBpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcy4gSWYgaXQgZG9lc24ndCBleGlzdAogCQkgKiBmYWxsYmFjayB0byAicmVnIiBwcm9wZXJ0eSBhbmQgYXNzdW1lIG5vIHRocmVhZHMKIAkJICovCi0JCWludHNlcnYgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLAotCQkJCQkgICAgICAmcGxlbik7CisJCWludHNlcnYgPSBnZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIsCisJCQkJJnBsZW4pOwogCQlpZiAoaW50c2VydiA9PSBOVUxMKSB7Ci0JCQl1MzIgKnJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJCWNvbnN0IHUzMiAqcmVnID0gZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CiAJCQlpZiAocmVnID09IE5VTEwpCiAJCQkJY29udGludWU7CiAJCQlpZiAoKnJlZyA9PSBoYXJkaWQpIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCmluZGV4IGViZDUwMWEuLmI5MTc2MTYzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKQEAgLTU1Nyw3ICs1NTcsOSBAQAogc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2NtZGxpbmVfcGFyc2Uodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvbV90ICpfcHJvbSA9ICZSRUxPQyhwcm9tKTsKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAljb25zdCBjaGFyICpvcHQ7CisjZW5kaWYKIAljaGFyICpwOwogCWludCBsID0gMDsKIApAQCAtNjQ0LDEzICs2NDYsMTMgQEAKIAk1IC0gMSwJCQkJLyogNSBvcHRpb24gdmVjdG9ycyAqLwogCiAJLyogb3B0aW9uIHZlY3RvciAxOiBwcm9jZXNzb3IgYXJjaGl0ZWN0dXJlcyBzdXBwb3J0ZWQgKi8KLQkzIC0gMSwJCQkJLyogbGVuZ3RoICovCisJMyAtIDIsCQkJCS8qIGxlbmd0aCAqLwogCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLwogCU9WMV9QUENfMl8wMCB8IE9WMV9QUENfMl8wMSB8IE9WMV9QUENfMl8wMiB8IE9WMV9QUENfMl8wMyB8CiAJT1YxX1BQQ18yXzA0IHwgT1YxX1BQQ18yXzA1LAogCiAJLyogb3B0aW9uIHZlY3RvciAyOiBPcGVuIEZpcm13YXJlIG9wdGlvbnMgc3VwcG9ydGVkICovCi0JMzQgLSAxLAkJCQkvKiBsZW5ndGggKi8KKwkzNCAtIDIsCQkJCS8qIGxlbmd0aCAqLwogCU9WMl9SRUFMX01PREUsCiAJMCwgMCwKIAlXKDB4ZmZmZmZmZmYpLAkJCS8qIHJlYWxfYmFzZSAqLwpAQCAtNjY0LDE2ICs2NjYsMTYgQEAKIAk0OCwJCQkJLyogbWF4IGxvZ18yKGhhc2ggdGFibGUgc2l6ZSkgKi8KIAogCS8qIG9wdGlvbiB2ZWN0b3IgMzogcHJvY2Vzc29yIG9wdGlvbnMgc3VwcG9ydGVkICovCi0JMyAtIDEsCQkJCS8qIGxlbmd0aCAqLworCTMgLSAyLAkJCQkvKiBsZW5ndGggKi8KIAkwLAkJCQkvKiBkb24ndCBpZ25vcmUsIGRvbid0IGhhbHQgKi8KIAlPVjNfRlAgfCBPVjNfVk1YLAogCiAJLyogb3B0aW9uIHZlY3RvciA0OiBJQk0gUEFQUiBpbXBsZW1lbnRhdGlvbiAqLwotCTIgLSAxLAkJCQkvKiBsZW5ndGggKi8KKwkyIC0gMiwJCQkJLyogbGVuZ3RoICovCiAJMCwJCQkJLyogZG9uJ3QgaGFsdCAqLwogCiAJLyogb3B0aW9uIHZlY3RvciA1OiBQQVBSL09GIG9wdGlvbnMgKi8KLQkzIC0gMSwJCQkJLyogbGVuZ3RoICovCisJMyAtIDIsCQkJCS8qIGxlbmd0aCAqLwogCTAsCQkJCS8qIGRvbid0IGlnbm9yZSwgZG9uJ3QgaGFsdCAqLwogCU9WNV9MUEFSIHwgT1Y1X1NQTFBBUiB8IE9WNV9MQVJHRV9QQUdFUywKIH07CkBAIC0yMDMwLDYgKzIwMzIsNDUgQEAKICNkZWZpbmUgZml4dXBfZGV2aWNlX3RyZWVfbWFwbGUoKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfUFBDX0NIUlAKKy8qIFBlZ2Fzb3MgYW5kIEJyaVEgbGFja3MgdGhlICJyYW5nZXMiIHByb3BlcnR5IGluIHRoZSBpc2Egbm9kZSAqLworc3RhdGljIHZvaWQgX19pbml0IGZpeHVwX2RldmljZV90cmVlX2NocnAodm9pZCkKK3sKKwlwaGFuZGxlIGlzYTsKKwl1MzIgaXNhX3Jhbmdlc1s2XTsKKwl1MzIgcmxvYyA9IDB4MDEwMDYwMDA7IC8qIElPIHNwYWNlOyBQQ0kgZGV2aWNlID0gMTIgKi8KKwljaGFyICpuYW1lOworCWludCByYzsKKworCW5hbWUgPSAiL3BjaUA4MDAwMDAwMC9pc2FAYyI7CisJaXNhID0gY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgQUREUihuYW1lKSk7CisJaWYgKCFQSEFORExFX1ZBTElEKGlzYSkpIHsKKwkJbmFtZSA9ICIvcGNpQGZmNTAwMDAwL2lzYUA2IjsKKwkJaXNhID0gY2FsbF9wcm9tKCJmaW5kZGV2aWNlIiwgMSwgMSwgQUREUihuYW1lKSk7CisJCXJsb2MgPSAweDAxMDAzMDAwOyAvKiBJTyBzcGFjZTsgUENJIGRldmljZSA9IDYgKi8KKwl9CisJaWYgKCFQSEFORExFX1ZBTElEKGlzYSkpCisJCXJldHVybjsKKworCXJjID0gcHJvbV9nZXRwcm9wbGVuKGlzYSwgInJhbmdlcyIpOworCWlmIChyYyAhPSAwICYmIHJjICE9IFBST01fRVJST1IpCisJCXJldHVybjsKKworCXByb21fcHJpbnRmKCJGaXhpbmcgdXAgbWlzc2luZyBJU0EgcmFuZ2Ugb24gUGVnYXNvcy4uLlxuIik7CisKKwlpc2FfcmFuZ2VzWzBdID0gMHgxOworCWlzYV9yYW5nZXNbMV0gPSAweDA7CisJaXNhX3Jhbmdlc1syXSA9IHJsb2M7CisJaXNhX3Jhbmdlc1szXSA9IDB4MDsKKwlpc2FfcmFuZ2VzWzRdID0gMHgwOworCWlzYV9yYW5nZXNbNV0gPSAweDAwMDEwMDAwOworCXByb21fc2V0cHJvcChpc2EsIG5hbWUsICJyYW5nZXMiLAorCQkJaXNhX3Jhbmdlcywgc2l6ZW9mKGlzYV9yYW5nZXMpKTsKK30KKyNlbHNlCisjZGVmaW5lIGZpeHVwX2RldmljZV90cmVlX2NocnAoKQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgJiYgZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpCiBzdGF0aWMgdm9pZCBfX2luaXQgZml4dXBfZGV2aWNlX3RyZWVfcG1hYyh2b2lkKQogewpAQCAtMjA3Nyw2ICsyMTE4LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9kZXZpY2VfdHJlZSh2b2lkKQogewogCWZpeHVwX2RldmljZV90cmVlX21hcGxlKCk7CisJZml4dXBfZGV2aWNlX3RyZWVfY2hycCgpOwogCWZpeHVwX2RldmljZV90cmVlX3BtYWMoKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21fcGFyc2UuYwppbmRleCA2YTdlOTk3Yy4uNjAzZGZmMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX3BhcnNlLmMKQEAgLTI3LDcgKzI3LDcgQEAKIAogLyogRGVidWcgdXRpbGl0eSAqLwogI2lmZGVmIERFQlVHCi1zdGF0aWMgdm9pZCBvZl9kdW1wX2FkZHIoY29uc3QgY2hhciAqcywgdTMyICphZGRyLCBpbnQgbmEpCitzdGF0aWMgdm9pZCBvZl9kdW1wX2FkZHIoY29uc3QgY2hhciAqcywgY29uc3QgdTMyICphZGRyLCBpbnQgbmEpCiB7CiAJcHJpbnRrKCIlcyIsIHMpOwogCXdoaWxlKG5hLS0pCkBAIC0zNSw3ICszNSw3IEBACiAJcHJpbnRrKCJcbiIpOwogfQogI2Vsc2UKLXN0YXRpYyB2b2lkIG9mX2R1bXBfYWRkcihjb25zdCBjaGFyICpzLCB1MzIgKmFkZHIsIGludCBuYSkgeyB9CitzdGF0aWMgdm9pZCBvZl9kdW1wX2FkZHIoY29uc3QgY2hhciAqcywgY29uc3QgdTMyICphZGRyLCBpbnQgbmEpIHsgfQogI2VuZGlmCiAKIApAQCAtNDYsOSArNDYsMTAgQEAKIAlpbnQJCSgqbWF0Y2gpKHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50KTsKIAl2b2lkCQkoKmNvdW50X2NlbGxzKShzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkLAogCQkJCSAgICAgICBpbnQgKmFkZHJjLCBpbnQgKnNpemVjKTsKLQl1NjQJCSgqbWFwKSh1MzIgKmFkZHIsIHUzMiAqcmFuZ2UsIGludCBuYSwgaW50IG5zLCBpbnQgcG5hKTsKKwl1NjQJCSgqbWFwKSh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsCisJCQkJaW50IG5hLCBpbnQgbnMsIGludCBwbmEpOwogCWludAkJKCp0cmFuc2xhdGUpKHUzMiAqYWRkciwgdTY0IG9mZnNldCwgaW50IG5hKTsKLQl1bnNpZ25lZCBpbnQJKCpnZXRfZmxhZ3MpKHUzMiAqYWRkcik7CisJdW5zaWduZWQgaW50CSgqZ2V0X2ZsYWdzKShjb25zdCB1MzIgKmFkZHIpOwogfTsKIAogCkBAIC02NSw3ICs2Niw4IEBACiAJCSpzaXplYyA9IHByb21fbl9zaXplX2NlbGxzKGRldik7CiB9CiAKLXN0YXRpYyB1NjQgb2ZfYnVzX2RlZmF1bHRfbWFwKHUzMiAqYWRkciwgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCitzdGF0aWMgdTY0IG9mX2J1c19kZWZhdWx0X21hcCh1MzIgKmFkZHIsIGNvbnN0IHUzMiAqcmFuZ2UsCisJCWludCBuYSwgaW50IG5zLCBpbnQgcG5hKQogewogCXU2NCBjcCwgcywgZGE7CiAKQEAgLTkzLDcgKzk1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfZGVmYXVsdF9nZXRfZmxhZ3ModTMyICphZGRyKQorc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfZGVmYXVsdF9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyKQogewogCXJldHVybiBJT1JFU09VUkNFX01FTTsKIH0KQEAgLTExOCw3ICsxMjAsNyBAQAogCQkqc2l6ZWMgPSAyOwogfQogCi1zdGF0aWMgdTY0IG9mX2J1c19wY2lfbWFwKHUzMiAqYWRkciwgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCitzdGF0aWMgdTY0IG9mX2J1c19wY2lfbWFwKHUzMiAqYWRkciwgY29uc3QgdTMyICpyYW5nZSwgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCiB7CiAJdTY0IGNwLCBzLCBkYTsKIApAQCAtMTQzLDcgKzE0NSw3IEBACiAJcmV0dXJuIG9mX2J1c19kZWZhdWx0X3RyYW5zbGF0ZShhZGRyICsgMSwgb2Zmc2V0LCBuYSAtIDEpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IG9mX2J1c19wY2lfZ2V0X2ZsYWdzKHUzMiAqYWRkcikKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX3BjaV9nZXRfZmxhZ3MoY29uc3QgdTMyICphZGRyKQogewogCXVuc2lnbmVkIGludCBmbGFncyA9IDA7CiAJdTMyIHcgPSBhZGRyWzBdOwpAQCAtMTc4LDcgKzE4MCw3IEBACiAJCSpzaXplYyA9IDE7CiB9CiAKLXN0YXRpYyB1NjQgb2ZfYnVzX2lzYV9tYXAodTMyICphZGRyLCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSkKK3N0YXRpYyB1NjQgb2ZfYnVzX2lzYV9tYXAodTMyICphZGRyLCBjb25zdCB1MzIgKnJhbmdlLCBpbnQgbmEsIGludCBucywgaW50IHBuYSkKIHsKIAl1NjQgY3AsIHMsIGRhOwogCkBAIC0yMDMsNyArMjA1LDcgQEAKIAlyZXR1cm4gb2ZfYnVzX2RlZmF1bHRfdHJhbnNsYXRlKGFkZHIgKyAxLCBvZmZzZXQsIG5hIC0gMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgb2ZfYnVzX2lzYV9nZXRfZmxhZ3ModTMyICphZGRyKQorc3RhdGljIHVuc2lnbmVkIGludCBvZl9idXNfaXNhX2dldF9mbGFncyhjb25zdCB1MzIgKmFkZHIpCiB7CiAJdW5zaWduZWQgaW50IGZsYWdzID0gMDsKIAl1MzIgdyA9IGFkZHJbMF07CkBAIC0yNjgsNyArMjcwLDcgQEAKIAkJCSAgICBzdHJ1Y3Qgb2ZfYnVzICpwYnVzLCB1MzIgKmFkZHIsCiAJCQkgICAgaW50IG5hLCBpbnQgbnMsIGludCBwbmEpCiB7Ci0JdTMyICpyYW5nZXM7CisJY29uc3QgdTMyICpyYW5nZXM7CiAJdW5zaWduZWQgaW50IHJsZW47CiAJaW50IHJvbmU7CiAJdTY0IG9mZnNldCA9IE9GX0JBRF9BRERSOwpAQCAtMjg1LDcgKzI4Nyw3IEBACiAJICogdG8gdHJhbnNsYXRlIGFkZHJlc3NlcyB0aGF0IGFyZW4ndCBzdXBwb3NlZCB0byBiZSB0cmFuc2xhdGVkIGluCiAJICogdGhlIGZpcnN0IHBsYWNlLiAtLUJlbkguCiAJICovCi0JcmFuZ2VzID0gKHUzMiAqKWdldF9wcm9wZXJ0eShwYXJlbnQsICJyYW5nZXMiLCAmcmxlbik7CisJcmFuZ2VzID0gZ2V0X3Byb3BlcnR5KHBhcmVudCwgInJhbmdlcyIsICZybGVuKTsKIAlpZiAocmFuZ2VzID09IE5VTEwgfHwgcmxlbiA9PSAwKSB7CiAJCW9mZnNldCA9IG9mX3JlYWRfbnVtYmVyKGFkZHIsIG5hKTsKIAkJbWVtc2V0KGFkZHIsIDAsIHBuYSAqIDQpOwpAQCAtMzI4LDcgKzMzMCw3IEBACiAgKiB0aGF0IGNhbiBiZSBtYXBwZWQgdG8gYSBjcHUgcGh5c2ljYWwgYWRkcmVzcykuIFRoaXMgaXMgbm90IHJlYWxseSBzcGVjaWZpZWQKICAqIHRoYXQgd2F5LCBidXQgdGhpcyBpcyB0cmFkaXRpb25hbGx5IHRoZSB3YXkgSUJNIGF0IGxlYXN0IGRvIHRoaW5ncwogICovCi11NjQgb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIHUzMiAqaW5fYWRkcikKK3U2NCBvZl90cmFuc2xhdGVfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgY29uc3QgdTMyICppbl9hZGRyKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50ID0gTlVMTDsKIAlzdHJ1Y3Qgb2ZfYnVzICpidXMsICpwYnVzOwpAQCAtNDA1LDEwICs0MDcsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wob2ZfdHJhbnNsYXRlX2FkZHJlc3MpOwogCi11MzIgKm9mX2dldF9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsIHU2NCAqc2l6ZSwKK2NvbnN0IHUzMiAqb2ZfZ2V0X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwgdTY0ICpzaXplLAogCQkgICAgdW5zaWduZWQgaW50ICpmbGFncykKIHsKLQl1MzIgKnByb3A7CisJY29uc3QgdTMyICpwcm9wOwogCXVuc2lnbmVkIGludCBwc2l6ZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudDsKIAlzdHJ1Y3Qgb2ZfYnVzICpidXM7CkBAIC00MjUsNyArNDI3LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBHZXQgInJlZyIgb3IgImFzc2lnbmVkLWFkZHJlc3NlcyIgcHJvcGVydHkgKi8KLQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkZXYsIGJ1cy0+YWRkcmVzc2VzLCAmcHNpemUpOworCXByb3AgPSBnZXRfcHJvcGVydHkoZGV2LCBidXMtPmFkZHJlc3NlcywgJnBzaXplKTsKIAlpZiAocHJvcCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlwc2l6ZSAvPSA0OwpAQCAtNDQzLDEwICs0NDUsMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0wob2ZfZ2V0X2FkZHJlc3MpOwogCi11MzIgKm9mX2dldF9wY2lfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGJhcl9ubywgdTY0ICpzaXplLAorY29uc3QgdTMyICpvZl9nZXRfcGNpX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBiYXJfbm8sIHU2NCAqc2l6ZSwKIAkJCXVuc2lnbmVkIGludCAqZmxhZ3MpCiB7Ci0JdTMyICpwcm9wOworCWNvbnN0IHUzMiAqcHJvcDsKIAl1bnNpZ25lZCBpbnQgcHNpemU7CiAJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQ7CiAJc3RydWN0IG9mX2J1cyAqYnVzOwpAQCAtNDY3LDcgKzQ2OSw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJLyogR2V0ICJyZWciIG9yICJhc3NpZ25lZC1hZGRyZXNzZXMiIHByb3BlcnR5ICovCi0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZGV2LCBidXMtPmFkZHJlc3NlcywgJnBzaXplKTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KGRldiwgYnVzLT5hZGRyZXNzZXMsICZwc2l6ZSk7CiAJaWYgKHByb3AgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJcHNpemUgLz0gNDsKQEAgLTQ4NSw3ICs0ODcsNyBAQAogfQogRVhQT1JUX1NZTUJPTChvZl9nZXRfcGNpX2FkZHJlc3MpOwogCi1zdGF0aWMgaW50IF9fb2ZfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgdTMyICphZGRycCwKK3N0YXRpYyBpbnQgX19vZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBjb25zdCB1MzIgKmFkZHJwLAogCQkJCSAgICB1NjQgc2l6ZSwgdW5zaWduZWQgaW50IGZsYWdzLAogCQkJCSAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCiB7CkBAIC01MTYsNyArNTE4LDcgQEAKIGludCBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCiAJCQkgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCiB7Ci0JdTMyCQkqYWRkcnA7CisJY29uc3QgdTMyCSphZGRycDsKIAl1NjQJCXNpemU7CiAJdW5zaWduZWQgaW50CWZsYWdzOwogCkBAIC01MzAsNyArNTMyLDcgQEAKIGludCBvZl9wY2lfYWRkcmVzc190b19yZXNvdXJjZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwgaW50IGJhciwKIAkJCSAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCiB7Ci0JdTMyCQkqYWRkcnA7CisJY29uc3QgdTMyCSphZGRycDsKIAl1NjQJCXNpemU7CiAJdW5zaWduZWQgaW50CWZsYWdzOwogCkBAIC01NDEsMTMgKzU0MywxNCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2ZfcGNpX2FkZHJlc3NfdG9fcmVzb3VyY2UpOwogCi12b2lkIG9mX3BhcnNlX2RtYV93aW5kb3coc3RydWN0IGRldmljZV9ub2RlICpkbiwgdW5zaWduZWQgY2hhciAqZG1hX3dpbmRvd19wcm9wLAordm9pZCBvZl9wYXJzZV9kbWFfd2luZG93KHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IHZvaWQgKmRtYV93aW5kb3dfcHJvcCwKIAkJdW5zaWduZWQgbG9uZyAqYnVzbm8sIHVuc2lnbmVkIGxvbmcgKnBoeXMsIHVuc2lnbmVkIGxvbmcgKnNpemUpCiB7Ci0JdTMyICpkbWFfd2luZG93LCBjZWxsczsKLQl1bnNpZ25lZCBjaGFyICpwcm9wOworCWNvbnN0IHUzMiAqZG1hX3dpbmRvdzsKKwl1MzIgY2VsbHM7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcDsKIAotCWRtYV93aW5kb3cgPSAodTMyICopZG1hX3dpbmRvd19wcm9wOworCWRtYV93aW5kb3cgPSBkbWFfd2luZG93X3Byb3A7CiAKIAkvKiBidXNubyBpcyBhbHdheXMgb25lIGNlbGwgKi8KIAkqYnVzbm8gPSAqKGRtYV93aW5kb3crKyk7CkBAIC01NzYsMTMgKzU3OSwxMyBAQAogc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqb2ZfaXJxX2ZpbmRfcGFyZW50KHN0cnVjdCBkZXZpY2Vfbm9kZSAqY2hpbGQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpwOwotCXBoYW5kbGUgKnBhcnA7CisJY29uc3QgcGhhbmRsZSAqcGFycDsKIAogCWlmICghb2Zfbm9kZV9nZXQoY2hpbGQpKQogCQlyZXR1cm4gTlVMTDsKIAogCWRvIHsKLQkJcGFycCA9IChwaGFuZGxlICopZ2V0X3Byb3BlcnR5KGNoaWxkLCAiaW50ZXJydXB0LXBhcmVudCIsIE5VTEwpOworCQlwYXJwID0gZ2V0X3Byb3BlcnR5KGNoaWxkLCAiaW50ZXJydXB0LXBhcmVudCIsIE5VTEwpOwogCQlpZiAocGFycCA9PSBOVUxMKQogCQkJcCA9IG9mX2dldF9wYXJlbnQoY2hpbGQpOwogCQllbHNlIHsKQEAgLTU5OCwxMSArNjAxLDYgQEAKIAlyZXR1cm4gcDsKIH0KIAotc3RhdGljIHU4IG9mX2lycV9wY2lfc3dpenpsZSh1OCBzbG90LCB1OCBwaW4pCi17Ci0JcmV0dXJuICgoKHBpbiAtIDEpICsgc2xvdCkgJSA0KSArIDE7Ci19Ci0KIC8qIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGNhbGxlZCBpZiB5b3UgZG9uJ3QgaGF2ZSBhbnkgc3BlY2lhbCB3b3JrYXJvdW5kCiAgKiBmbGFncyB0byBwYXNzCiAgKi8KQEAgLTY0NCwxNCArNjQyLDE3IEBACiAKIH0KIAotaW50IG9mX2lycV9tYXBfcmF3KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCB1MzIgKmludHNwZWMsIHUzMiAqYWRkciwKLQkJICAgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKK2ludCBvZl9pcnFfbWFwX3JhdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKnBhcmVudCwgY29uc3QgdTMyICppbnRzcGVjLCB1MzIgb2ludHNpemUsCisJCWNvbnN0IHUzMiAqYWRkciwgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmlwYXIsICp0bm9kZSwgKm9sZCA9IE5VTEwsICpuZXdwYXIgPSBOVUxMOwotCXUzMiAqdG1wLCAqaW1hcCwgKmltYXNrOworCWNvbnN0IHUzMiAqdG1wLCAqaW1hcCwgKmltYXNrOwogCXUzMiBpbnRzaXplID0gMSwgYWRkcnNpemUsIG5ld2ludHNpemUgPSAwLCBuZXdhZGRyc2l6ZSA9IDA7CiAJaW50IGltYXBsZW4sIG1hdGNoLCBpOwogCisJREJHKCJvZl9pcnFfbWFwX3JhdzogcGFyPSVzLGludHNwZWM9WzB4JTA4eCAweCUwOHguLi5dLG9pbnRzaXplPSVkXG4iLAorCSAgICBwYXJlbnQtPmZ1bGxfbmFtZSwgaW50c3BlY1swXSwgaW50c3BlY1sxXSwgb2ludHNpemUpOworCiAJaXBhciA9IG9mX25vZGVfZ2V0KHBhcmVudCk7CiAKIAkvKiBGaXJzdCBnZXQgdGhlICNpbnRlcnJ1cHQtY2VsbHMgcHJvcGVydHkgb2YgdGhlIGN1cnJlbnQgY3Vyc29yCkBAIC02NTksNyArNjYwLDcgQEAKIAkgKiBpcyBub25lLCB3ZSBhcmUgbmljZSBhbmQganVzdCB3YWxrIHVwIHRoZSB0cmVlCiAJICovCiAJZG8gewotCQl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGlwYXIsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7CisJCXRtcCA9IGdldF9wcm9wZXJ0eShpcGFyLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOwogCQlpZiAodG1wICE9IE5VTEwpIHsKIAkJCWludHNpemUgPSAqdG1wOwogCQkJYnJlYWs7CkBAIC02NzUsMTIgKzY3NiwxNSBAQAogCiAJREJHKCJvZl9pcnFfbWFwX3JhdzogaXBhcj0lcywgc2l6ZT0lZFxuIiwgaXBhci0+ZnVsbF9uYW1lLCBpbnRzaXplKTsKIAorCWlmIChvaW50c2l6ZSAhPSBpbnRzaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIExvb2sgZm9yIHRoaXMgI2FkZHJlc3MtY2VsbHMuIFdlIGhhdmUgdG8gaW1wbGVtZW50IHRoZSBvbGQgbGludXgKIAkgKiB0cmljayBvZiBsb29raW5nIGZvciB0aGUgcGFyZW50IGhlcmUgYXMgc29tZSBkZXZpY2UtdHJlZXMgcmVseSBvbiBpdAogCSAqLwogCW9sZCA9IG9mX25vZGVfZ2V0KGlwYXIpOwogCWRvIHsKLQkJdG1wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShvbGQsICIjYWRkcmVzcy1jZWxscyIsIE5VTEwpOworCQl0bXAgPSBnZXRfcHJvcGVydHkob2xkLCAiI2FkZHJlc3MtY2VsbHMiLCBOVUxMKTsKIAkJdG5vZGUgPSBvZl9nZXRfcGFyZW50KG9sZCk7CiAJCW9mX25vZGVfcHV0KG9sZCk7CiAJCW9sZCA9IHRub2RlOwpAQCAtNzA3LDcgKzcxMSw3IEBACiAJCX0KIAogCQkvKiBOb3cgbG9vayBmb3IgYW4gaW50ZXJydXB0LW1hcCAqLwotCQlpbWFwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShpcGFyLCAiaW50ZXJydXB0LW1hcCIsICZpbWFwbGVuKTsKKwkJaW1hcCA9IGdldF9wcm9wZXJ0eShpcGFyLCAiaW50ZXJydXB0LW1hcCIsICZpbWFwbGVuKTsKIAkJLyogTm8gaW50ZXJydXB0IG1hcCwgY2hlY2sgZm9yIGFuIGludGVycnVwdCBwYXJlbnQgKi8KIAkJaWYgKGltYXAgPT0gTlVMTCkgewogCQkJREJHKCIgLT4gbm8gbWFwLCBnZXR0aW5nIHBhcmVudFxuIik7CkBAIC03MTcsNyArNzIxLDcgQEAKIAkJaW1hcGxlbiAvPSBzaXplb2YodTMyKTsKIAogCQkvKiBMb29rIGZvciBhIG1hc2sgKi8KLQkJaW1hc2sgPSAodTMyICopZ2V0X3Byb3BlcnR5KGlwYXIsICJpbnRlcnJ1cHQtbWFwLW1hc2siLCBOVUxMKTsKKwkJaW1hc2sgPSBnZXRfcHJvcGVydHkoaXBhciwgImludGVycnVwdC1tYXAtbWFzayIsIE5VTEwpOwogCiAJCS8qIElmIHdlIHdlcmUgcGFzc2VkIG5vICJyZWciIHByb3BlcnR5IGFuZCB3ZSBhdHRlbXB0IHRvIHBhcnNlCiAJCSAqIGFuIGludGVycnVwdC1tYXAsIHRoZW4gI2FkZHJlc3MtY2VsbHMgbXVzdCBiZSAwLgpAQCAtNzY0LDE0ICs3NjgsMTQgQEAKIAkJCS8qIEdldCAjaW50ZXJydXB0LWNlbGxzIGFuZCAjYWRkcmVzcy1jZWxscyBvZiBuZXcKIAkJCSAqIHBhcmVudAogCQkJICovCi0JCQl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5ld3BhciwgIiNpbnRlcnJ1cHQtY2VsbHMiLAorCQkJdG1wID0gZ2V0X3Byb3BlcnR5KG5ld3BhciwgIiNpbnRlcnJ1cHQtY2VsbHMiLAogCQkJCQkJICBOVUxMKTsKIAkJCWlmICh0bXAgPT0gTlVMTCkgewogCQkJCURCRygiIC0+IHBhcmVudCBsYWNrcyAjaW50ZXJydXB0LWNlbGxzICFcbiIpOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KIAkJCW5ld2ludHNpemUgPSAqdG1wOwotCQkJdG1wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShuZXdwYXIsICIjYWRkcmVzcy1jZWxscyIsCisJCQl0bXAgPSBnZXRfcHJvcGVydHkobmV3cGFyLCAiI2FkZHJlc3MtY2VsbHMiLAogCQkJCQkJICBOVUxMKTsKIAkJCW5ld2FkZHJzaXplID0gKHRtcCA9PSBOVUxMKSA/IDAgOiAqdG1wOwogCkBAIC04MTcsMTQgKzgyMSwxNCBAQAogc3RhdGljIGludCBvZl9pcnFfbWFwX29sZHdvcmxkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsCiAJCQkgICAgICAgc3RydWN0IG9mX2lycSAqb3V0X2lycSkKIHsKLQl1MzIgKmludHM7CisJY29uc3QgdTMyICppbnRzOwogCWludCBpbnRsZW47CiAKIAkvKgogCSAqIE9sZCBtYWNoaW5lcyBqdXN0IGhhdmUgYSBsaXN0IG9mIGludGVycnVwdCBudW1iZXJzCiAJICogYW5kIG5vIGludGVycnVwdC1jb250cm9sbGVyIG5vZGVzLgogCSAqLwotCWludHMgPSAodTMyICopIGdldF9wcm9wZXJ0eShkZXZpY2UsICJBQVBMLGludGVycnVwdHMiLCAmaW50bGVuKTsKKwlpbnRzID0gZ2V0X3Byb3BlcnR5KGRldmljZSwgIkFBUEwsaW50ZXJydXB0cyIsICZpbnRsZW4pOwogCWlmIChpbnRzID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCWludGxlbiAvPSBzaXplb2YodTMyKTsKQEAgLTg0OSw3ICs4NTMsOCBAQAogaW50IG9mX2lycV9tYXBfb25lKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlLCBpbnQgaW5kZXgsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpwOwotCXUzMiAqaW50c3BlYywgKnRtcCwgaW50c2l6ZSwgaW50bGVuLCAqYWRkcjsKKwljb25zdCB1MzIgKmludHNwZWMsICp0bXAsICphZGRyOworCXUzMiBpbnRzaXplLCBpbnRsZW47CiAJaW50IHJlczsKIAogCURCRygib2ZfaXJxX21hcF9vbmU6IGRldj0lcywgaW5kZXg9JWRcbiIsIGRldmljZS0+ZnVsbF9uYW1lLCBpbmRleCk7CkBAIC04NTksMTMgKzg2NCwxMyBAQAogCQlyZXR1cm4gb2ZfaXJxX21hcF9vbGR3b3JsZChkZXZpY2UsIGluZGV4LCBvdXRfaXJxKTsKIAogCS8qIEdldCB0aGUgaW50ZXJydXB0cyBwcm9wZXJ0eSAqLwotCWludHNwZWMgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRldmljZSwgImludGVycnVwdHMiLCAmaW50bGVuKTsKKwlpbnRzcGVjID0gZ2V0X3Byb3BlcnR5KGRldmljZSwgImludGVycnVwdHMiLCAmaW50bGVuKTsKIAlpZiAoaW50c3BlYyA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpbnRsZW4gLz0gc2l6ZW9mKHUzMik7CiAKIAkvKiBHZXQgdGhlIHJlZyBwcm9wZXJ0eSAoaWYgYW55KSAqLwotCWFkZHIgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRldmljZSwgInJlZyIsIE5VTEwpOworCWFkZHIgPSBnZXRfcHJvcGVydHkoZGV2aWNlLCAicmVnIiwgTlVMTCk7CiAKIAkvKiBMb29rIGZvciB0aGUgaW50ZXJydXB0IHBhcmVudC4gKi8KIAlwID0gb2ZfaXJxX2ZpbmRfcGFyZW50KGRldmljZSk7CkBAIC04NzMsMjQgKzg3OCwzMyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEdldCBzaXplIG9mIGludGVycnVwdCBzcGVjaWZpZXIgKi8KLQl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHAsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7CisJdG1wID0gZ2V0X3Byb3BlcnR5KHAsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7CiAJaWYgKHRtcCA9PSBOVUxMKSB7CiAJCW9mX25vZGVfcHV0KHApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaW50c2l6ZSA9ICp0bXA7CiAKKwlEQkcoIiBpbnRzaXplPSVkIGludGxlbj0lZFxuIiwgaW50c2l6ZSwgaW50bGVuKTsKKwogCS8qIENoZWNrIGluZGV4ICovCiAJaWYgKChpbmRleCArIDEpICogaW50c2l6ZSA+IGludGxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBHZXQgbmV3IHNwZWNpZmllciBhbmQgbWFwIGl0ICovCi0JcmVzID0gb2ZfaXJxX21hcF9yYXcocCwgaW50c3BlYyArIGluZGV4ICogaW50c2l6ZSwgYWRkciwgb3V0X2lycSk7CisJcmVzID0gb2ZfaXJxX21hcF9yYXcocCwgaW50c3BlYyArIGluZGV4ICogaW50c2l6ZSwgaW50c2l6ZSwKKwkJCSAgICAgYWRkciwgb3V0X2lycSk7CiAJb2Zfbm9kZV9wdXQocCk7CiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9mX2lycV9tYXBfb25lKTsKIAorI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyB1OCBvZl9pcnFfcGNpX3N3aXp6bGUodTggc2xvdCwgdTggcGluKQoreworCXJldHVybiAoKChwaW4gLSAxKSArIHNsb3QpICUgNCkgKyAxOworfQorCiBpbnQgb2ZfaXJxX21hcF9wY2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbiwgKnBwbm9kZTsKQEAgLTk2NCw3ICs5NzgsNyBAQAogCWxhZGRyWzBdID0gKHBkZXYtPmJ1cy0+bnVtYmVyIDw8IDE2KQogCQl8IChwZGV2LT5kZXZmbiA8PCA4KTsKIAlsYWRkclsxXSAgPSBsYWRkclsyXSA9IDA7Ci0JcmV0dXJuIG9mX2lycV9tYXBfcmF3KHBwbm9kZSwgJmxzcGVjLCBsYWRkciwgb3V0X2lycSk7CisJcmV0dXJuIG9mX2lycV9tYXBfcmF3KHBwbm9kZSwgJmxzcGVjLCAxLCBsYWRkciwgb3V0X2lycSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvZl9pcnFfbWFwX3BjaSk7Ci0KKyNlbmRpZiAvKiBDT05GSUdfUENJICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLXByb2MuYwppbmRleCA5YzlhZDFmLi4yZmU4MmFiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMtcHJvYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy1wcm9jLmMKQEAgLTI0NiwxMiArMjQ2LDEyIEBACiAKIHN0YXRpYyBpbnQgcHBjX3J0YXNfZmluZF9hbGxfc2Vuc29ycyh2b2lkKTsKIHN0YXRpYyB2b2lkIHBwY19ydGFzX3Byb2Nlc3Nfc2Vuc29yKHN0cnVjdCBzZXFfZmlsZSAqbSwKLQlzdHJ1Y3QgaW5kaXZpZHVhbF9zZW5zb3IgKnMsIGludCBzdGF0ZSwgaW50IGVycm9yLCBjaGFyICpsb2MpOworCXN0cnVjdCBpbmRpdmlkdWFsX3NlbnNvciAqcywgaW50IHN0YXRlLCBpbnQgZXJyb3IsIGNvbnN0IGNoYXIgKmxvYyk7CiBzdGF0aWMgY2hhciAqcHBjX3J0YXNfcHJvY2Vzc19lcnJvcihpbnQgZXJyb3IpOwogc3RhdGljIHZvaWQgZ2V0X2xvY2F0aW9uX2NvZGUoc3RydWN0IHNlcV9maWxlICptLAotCXN0cnVjdCBpbmRpdmlkdWFsX3NlbnNvciAqcywgY2hhciAqbG9jKTsKLXN0YXRpYyB2b2lkIGNoZWNrX2xvY2F0aW9uX3N0cmluZyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNoYXIgKmMpOwotc3RhdGljIHZvaWQgY2hlY2tfbG9jYXRpb24oc3RydWN0IHNlcV9maWxlICptLCBjaGFyICpjKTsKKwlzdHJ1Y3QgaW5kaXZpZHVhbF9zZW5zb3IgKnMsIGNvbnN0IGNoYXIgKmxvYyk7CitzdGF0aWMgdm9pZCBjaGVja19sb2NhdGlvbl9zdHJpbmcoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBjaGFyICpjKTsKK3N0YXRpYyB2b2lkIGNoZWNrX2xvY2F0aW9uKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgY2hhciAqYyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHByb2NfcnRhc19pbml0KHZvaWQpCiB7CkBAIC00NDYsMTEgKzQ0NiwxMSBAQAogCWZvciAoaT0wOyBpPHNlbnNvcnMucXVhbnQ7IGkrKykgewogCQlzdHJ1Y3QgaW5kaXZpZHVhbF9zZW5zb3IgKnAgPSAmc2Vuc29ycy5zZW5zb3JbaV07CiAJCWNoYXIgcnN0cls2NF07Ci0JCWNoYXIgKmxvYzsKKwkJY29uc3QgY2hhciAqbG9jOwogCQlpbnQgbGxlbiwgb2ZmczsKIAogCQlzcHJpbnRmIChyc3RyLCBTRU5TT1JfUFJFRklYIiUwNGQiLCBwLT50b2tlbik7Ci0JCWxvYyA9IChjaGFyICopIGdldF9wcm9wZXJ0eShydGFzX25vZGUsIHJzdHIsICZsbGVuKTsKKwkJbG9jID0gZ2V0X3Byb3BlcnR5KHJ0YXNfbm9kZSwgcnN0ciwgJmxsZW4pOwogCiAJCS8qIEEgc2Vuc29yIG1heSBoYXZlIG11bHRpcGxlIGluc3RhbmNlcyAqLwogCQlmb3IgKGogPSAwLCBvZmZzID0gMDsgaiA8PSBwLT5xdWFudDsgaisrKSB7CkBAIC00NzQsMTAgKzQ3NCwxMCBAQAogCiBzdGF0aWMgaW50IHBwY19ydGFzX2ZpbmRfYWxsX3NlbnNvcnModm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgKnV0bXA7CisJY29uc3QgdW5zaWduZWQgaW50ICp1dG1wOwogCWludCBsZW4sIGk7CiAKLQl1dG1wID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkocnRhc19ub2RlLCAicnRhcy1zZW5zb3JzIiwgJmxlbik7CisJdXRtcCA9IGdldF9wcm9wZXJ0eShydGFzX25vZGUsICJydGFzLXNlbnNvcnMiLCAmbGVuKTsKIAlpZiAodXRtcCA9PSBOVUxMKSB7CiAJCXByaW50ayAoS0VSTl9FUlIgImVycm9yOiBjb3VsZCBub3QgZ2V0IHJ0YXMtc2Vuc29yc1xuIik7CiAJCXJldHVybiAxOwpAQCAtNTMwLDcgKzUzMCw3IEBACiAgKi8KIAogc3RhdGljIHZvaWQgcHBjX3J0YXNfcHJvY2Vzc19zZW5zb3Ioc3RydWN0IHNlcV9maWxlICptLAotCXN0cnVjdCBpbmRpdmlkdWFsX3NlbnNvciAqcywgaW50IHN0YXRlLCBpbnQgZXJyb3IsIGNoYXIgKmxvYykKKwlzdHJ1Y3QgaW5kaXZpZHVhbF9zZW5zb3IgKnMsIGludCBzdGF0ZSwgaW50IGVycm9yLCBjb25zdCBjaGFyICpsb2MpCiB7CiAJLyogRGVmaW5lZCByZXR1cm4gdmFsZXMgKi8KIAljb25zdCBjaGFyICoga2V5X3N3aXRjaFtdICAgICAgICA9IHsgIk9mZlx0IiwgIk5vcm1hbFx0IiwgIlNlY3VyZVx0IiwgCkBAIC02ODIsNyArNjgyLDcgQEAKIAogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLXN0YXRpYyB2b2lkIGNoZWNrX2xvY2F0aW9uKHN0cnVjdCBzZXFfZmlsZSAqbSwgY2hhciAqYykKK3N0YXRpYyB2b2lkIGNoZWNrX2xvY2F0aW9uKHN0cnVjdCBzZXFfZmlsZSAqbSwgY29uc3QgY2hhciAqYykKIHsKIAlzd2l0Y2ggKGNbMF0pIHsKIAkJY2FzZSBMT0NfUExBTkFSOgpAQCAtNzE5LDcgKzcxOSw3IEBACiAgKiAke0xFVFRFUn0ke05VTUJFUn1bWy0vXSR7TEVUVEVSfSR7TlVNQkVSfSBbIC4uLiBdIF0KICAqIHRoZSAnLicgbWF5IGJlIGFuIGFiYnJldmF0aW9uCiAgKi8KLXN0YXRpYyB2b2lkIGNoZWNrX2xvY2F0aW9uX3N0cmluZyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNoYXIgKmMpCitzdGF0aWMgdm9pZCBjaGVja19sb2NhdGlvbl9zdHJpbmcoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBjaGFyICpjKQogewogCXdoaWxlICgqYykgewogCQlpZiAoaXNhbHBoYSgqYykgfHwgKmMgPT0gJy4nKQpAQCAtNzMzLDcgKzczMyw4IEBACiAKIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCi1zdGF0aWMgdm9pZCBnZXRfbG9jYXRpb25fY29kZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBpbmRpdmlkdWFsX3NlbnNvciAqcywgY2hhciAqbG9jKQorc3RhdGljIHZvaWQgZ2V0X2xvY2F0aW9uX2NvZGUoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgaW5kaXZpZHVhbF9zZW5zb3IgKnMsCisJCWNvbnN0IGNoYXIgKmxvYykKIHsKIAlpZiAoIWxvYyB8fCAhKmxvYykgewogCQlzZXFfcHJpbnRmKG0sICItLS0iKTsvKiBkb2VzIG5vdCBoYXZlIGEgbG9jYXRpb24gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKaW5kZXggNGE0Y2I1NS4uNmVmODBkNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMKQEAgLTE3NywxMCArMTc3LDEyIEBACiB2b2lkIHJ0YXNfcHJvZ3Jlc3MoY2hhciAqcywgdW5zaWduZWQgc2hvcnQgaGV4KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKLQlpbnQgd2lkdGgsICpwOworCWludCB3aWR0aDsKKwljb25zdCBpbnQgKnA7CiAJY2hhciAqb3M7CiAJc3RhdGljIGludCBkaXNwbGF5X2NoYXJhY3Rlciwgc2V0X2luZGljYXRvcjsKLQlzdGF0aWMgaW50IGRpc3BsYXlfd2lkdGgsIGRpc3BsYXlfbGluZXMsICpyb3dfd2lkdGgsIGZvcm1fZmVlZDsKKwlzdGF0aWMgaW50IGRpc3BsYXlfd2lkdGgsIGRpc3BsYXlfbGluZXMsIGZvcm1fZmVlZDsKKwljb25zdCBzdGF0aWMgaW50ICpyb3dfd2lkdGg7CiAJc3RhdGljIERFRklORV9TUElOTE9DSyhwcm9ncmVzc19sb2NrKTsKIAlzdGF0aWMgaW50IGN1cnJlbnRfbGluZTsKIAlzdGF0aWMgaW50IHBlbmRpbmdfbmV3bGluZSA9IDA7ICAvKiBkaWQgbGFzdCB3cml0ZSBlbmQgd2l0aCB1bnByaW50ZWQgbmV3bGluZT8gKi8KQEAgLTE5MSwxNiArMTkzLDE2IEBACiAJaWYgKGRpc3BsYXlfd2lkdGggPT0gMCkgewogCQlkaXNwbGF5X3dpZHRoID0gMHgxMDsKIAkJaWYgKChyb290ID0gZmluZF9wYXRoX2RldmljZSgiL3J0YXMiKSkpIHsKLQkJCWlmICgocCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkocm9vdCwKKwkJCWlmICgocCA9IGdldF9wcm9wZXJ0eShyb290LAogCQkJCQkiaWJtLGRpc3BsYXktbGluZS1sZW5ndGgiLCBOVUxMKSkpCiAJCQkJZGlzcGxheV93aWR0aCA9ICpwOwotCQkJaWYgKChwID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShyb290LAorCQkJaWYgKChwID0gZ2V0X3Byb3BlcnR5KHJvb3QsCiAJCQkJCSJpYm0sZm9ybS1mZWVkIiwgTlVMTCkpKQogCQkJCWZvcm1fZmVlZCA9ICpwOwotCQkJaWYgKChwID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShyb290LAorCQkJaWYgKChwID0gZ2V0X3Byb3BlcnR5KHJvb3QsCiAJCQkJCSJpYm0sZGlzcGxheS1udW1iZXItb2YtbGluZXMiLCBOVUxMKSkpCiAJCQkJZGlzcGxheV9saW5lcyA9ICpwOwotCQkJcm93X3dpZHRoID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShyb290LAorCQkJcm93X3dpZHRoID0gZ2V0X3Byb3BlcnR5KHJvb3QsCiAJCQkJCSJpYm0sZGlzcGxheS10cnVuY2F0aW9uLWxlbmd0aCIsIE5VTEwpOwogCQl9CiAJCWRpc3BsYXlfY2hhcmFjdGVyID0gcnRhc190b2tlbigiZGlzcGxheS1jaGFyYWN0ZXIiKTsKQEAgLTI5MywxMCArMjk1LDEwIEBACiAKIGludCBydGFzX3Rva2VuKGNvbnN0IGNoYXIgKnNlcnZpY2UpCiB7Ci0JaW50ICp0b2twOworCWNvbnN0IGludCAqdG9rcDsKIAlpZiAocnRhcy5kZXYgPT0gTlVMTCkKIAkJcmV0dXJuIFJUQVNfVU5LTk9XTl9TRVJWSUNFOwotCXRva3AgPSAoaW50ICopIGdldF9wcm9wZXJ0eShydGFzLmRldiwgc2VydmljZSwgTlVMTCk7CisJdG9rcCA9IGdldF9wcm9wZXJ0eShydGFzLmRldiwgc2VydmljZSwgTlVMTCk7CiAJcmV0dXJuIHRva3AgPyAqdG9rcCA6IFJUQVNfVU5LTk9XTl9TRVJWSUNFOwogfQogRVhQT1JUX1NZTUJPTChydGFzX3Rva2VuKTsKQEAgLTU2OSw2ICs1NzEsMjcgQEAKIH0KIEVYUE9SVF9TWU1CT0wocnRhc19zZXRfaW5kaWNhdG9yKTsKIAorLyoKKyAqIElnbm9yaW5nIFJUQVMgZXh0ZW5kZWQgZGVsYXkKKyAqLworaW50IHJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KGludCBpbmRpY2F0b3IsIGludCBpbmRleCwgaW50IG5ld192YWx1ZSkKK3sKKwlpbnQgcmM7CisJaW50IHRva2VuID0gcnRhc190b2tlbigic2V0LWluZGljYXRvciIpOworCisJaWYgKHRva2VuID09IFJUQVNfVU5LTk9XTl9TRVJWSUNFKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCXJjID0gcnRhc19jYWxsKHRva2VuLCAzLCAxLCBOVUxMLCBpbmRpY2F0b3IsIGluZGV4LCBuZXdfdmFsdWUpOworCisJV0FSTl9PTihyYyA9PSAtMiB8fCAocmMgPj0gOTkwMCAmJiByYyA8PSA5OTA1KSk7CisKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcnRhc19lcnJvcl9yYyhyYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKIHZvaWQgcnRhc19yZXN0YXJ0KGNoYXIgKmNtZCkKIHsKIAlpZiAocnRhc19mbGFzaF90ZXJtX2hvb2spCkBAIC02MDUsNiArNjI4LDkgQEAKIHsKIAlpbnQgc3RhdHVzOwogCisJaWYgKHBhbmljX3RpbWVvdXQpCisJCXJldHVybjsKKwogCWlmIChSVEFTX1VOS05PV05fU0VSVklDRSA9PSBydGFzX3Rva2VuKCJpYm0sb3MtdGVybSIpKQogCQlyZXR1cm47CiAKQEAgLTY2NiwxNSArNjkyLDE0IEBACiAJaW50IGk7CiAJbG9uZyBzdGF0ZTsKIAlsb25nIHJjOwotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0KKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpFXTsKIAlzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgZGF0YTsKIAogCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaXMgdmFsaWQgKi8KLQlyYyA9IHBscGFyX2hjYWxsKEhfVkFTSV9TVEFURSwKLQkJCSAoKHU2NClhcmdzLT5hcmdzWzBdIDw8IDMyKSB8IGFyZ3MtPmFyZ3NbMV0sCi0JCQkgMCwgMCwgMCwKLQkJCSAmc3RhdGUsICZkdW1teSwgJmR1bW15KTsKKwlyYyA9IHBscGFyX2hjYWxsKEhfVkFTSV9TVEFURSwgcmV0YnVmLAorCQkJICgodTY0KWFyZ3MtPmFyZ3NbMF0gPDwgMzIpIHwgYXJncy0+YXJnc1sxXSk7CisKKwlzdGF0ZSA9IHJldGJ1ZlswXTsKIAogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgInJ0YXNfaWJtX3N1c3BlbmRfbWU6IHZhc2lfc3RhdGUgcmV0dXJuZWQgJWxkXG4iLHJjKTsKQEAgLTgyNCwxNSArODQ5LDE1IEBACiAJICovCiAJcnRhcy5kZXYgPSBvZl9maW5kX25vZGVfYnlfbmFtZShOVUxMLCAicnRhcyIpOwogCWlmIChydGFzLmRldikgewotCQl1MzIgKmJhc2VwLCAqZW50cnlwOwotCQl1MzIgKnNpemVwOworCQljb25zdCB1MzIgKmJhc2VwLCAqZW50cnlwLCAqc2l6ZXA7CiAKLQkJYmFzZXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHJ0YXMuZGV2LCAibGludXgscnRhcy1iYXNlIiwgTlVMTCk7Ci0JCXNpemVwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShydGFzLmRldiwgInJ0YXMtc2l6ZSIsIE5VTEwpOworCQliYXNlcCA9IGdldF9wcm9wZXJ0eShydGFzLmRldiwgImxpbnV4LHJ0YXMtYmFzZSIsIE5VTEwpOworCQlzaXplcCA9IGdldF9wcm9wZXJ0eShydGFzLmRldiwgInJ0YXMtc2l6ZSIsIE5VTEwpOwogCQlpZiAoYmFzZXAgIT0gTlVMTCAmJiBzaXplcCAhPSBOVUxMKSB7CiAJCQlydGFzLmJhc2UgPSAqYmFzZXA7CiAJCQlydGFzLnNpemUgPSAqc2l6ZXA7Ci0JCQllbnRyeXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHJ0YXMuZGV2LCAibGludXgscnRhcy1lbnRyeSIsIE5VTEwpOworCQkJZW50cnlwID0gZ2V0X3Byb3BlcnR5KHJ0YXMuZGV2LAorCQkJCQkibGludXgscnRhcy1lbnRyeSIsIE5VTEwpOwogCQkJaWYgKGVudHJ5cCA9PSBOVUxMKSAvKiBVZ2ggKi8KIAkJCQlydGFzLmVudHJ5ID0gcnRhcy5iYXNlOwogCQkJZWxzZQpAQCAtODg4LDYgKzkxMywxMSBAQAogCWJhc2VwID0gb2ZfZ2V0X2ZsYXRfZHRfcHJvcChub2RlLCAiZ2V0LXRlcm0tY2hhciIsIE5VTEwpOwogCWlmIChiYXNlcCkKIAkJcnRhc19nZXRjaGFyX3Rva2VuID0gKmJhc2VwOworCisJaWYgKHJ0YXNfcHV0Y2hhcl90b2tlbiAhPSBSVEFTX1VOS05PV05fU0VSVklDRSAmJgorCSAgICBydGFzX2dldGNoYXJfdG9rZW4gIT0gUlRBU19VTktOT1dOX1NFUlZJQ0UpCisJCXVkYmdfaW5pdF9ydGFzX2NvbnNvbGUoKTsKKwogI2VuZGlmCiAKIAkvKiBicmVhayBub3cgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcnRhc19wY2kuYwppbmRleCBjZGEwMjI2Li5iNGEwZGU3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX3BjaS5jCkBAIC01Nyw3ICs1Nyw3IEBACiAKIHN0YXRpYyBpbnQgb2ZfZGV2aWNlX2F2YWlsYWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKiBkbikKIHsKLSAgICAgICAgY2hhciAqIHN0YXR1czsKKyAgICAgICAgY29uc3QgY2hhciAqc3RhdHVzOwogCiAgICAgICAgIHN0YXR1cyA9IGdldF9wcm9wZXJ0eShkbiwgInN0YXR1cyIsIE5VTEwpOwogCkBAIC04MSw4ICs4MSw3IEBACiAJaWYgKCFjb25maWdfYWNjZXNzX3ZhbGlkKHBkbiwgd2hlcmUpKQogCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwogCi0JYWRkciA9ICgod2hlcmUgJiAweGYwMCkgPDwgMjApIHwgKHBkbi0+YnVzbm8gPDwgMTYpIHwKLQkJKHBkbi0+ZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiAweGZmKTsKKwlhZGRyID0gcnRhc19jb25maWdfYWRkcihwZG4tPmJ1c25vLCBwZG4tPmRldmZuLCB3aGVyZSk7CiAJYnVpZCA9IHBkbi0+cGhiLT5idWlkOwogCWlmIChidWlkKSB7CiAJCXJldCA9IHJ0YXNfY2FsbChpYm1fcmVhZF9wY2lfY29uZmlnLCA0LCAyLCAmcmV0dXJudmFsLApAQCAtMTM0LDggKzEzMyw3IEBACiAJaWYgKCFjb25maWdfYWNjZXNzX3ZhbGlkKHBkbiwgd2hlcmUpKQogCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOwogCi0JYWRkciA9ICgod2hlcmUgJiAweGYwMCkgPDwgMjApIHwgKHBkbi0+YnVzbm8gPDwgMTYpIHwKLQkJKHBkbi0+ZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiAweGZmKTsKKwlhZGRyID0gcnRhc19jb25maWdfYWRkcihwZG4tPmJ1c25vLCBwZG4tPmRldmZuLCB3aGVyZSk7CiAJYnVpZCA9IHBkbi0+cGhiLT5idWlkOwogCWlmIChidWlkKSB7CiAJCXJldCA9IHJ0YXNfY2FsbChpYm1fd3JpdGVfcGNpX2NvbmZpZywgNSwgMSwgTlVMTCwgYWRkciwKQEAgLTE3OCw3ICsxNzYsNyBAQAogCiBpbnQgaXNfcHl0aG9uKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2KQogewotCWNoYXIgKm1vZGVsID0gKGNoYXIgKilnZXRfcHJvcGVydHkoZGV2LCAibW9kZWwiLCBOVUxMKTsKKwljb25zdCBjaGFyICptb2RlbCA9IGdldF9wcm9wZXJ0eShkZXYsICJtb2RlbCIsIE5VTEwpOwogCiAJaWYgKG1vZGVsICYmIHN0cnN0cihtb2RlbCwgIlB5dGhvbiIpKQogCQlyZXR1cm4gMTsKQEAgLTIzNCw3ICsyMzIsNyBAQAogdW5zaWduZWQgbG9uZyBfX2RldmluaXQgZ2V0X3BoYl9idWlkIChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBoYikKIHsKIAlpbnQgYWRkcl9jZWxsczsKLQl1bnNpZ25lZCBpbnQgKmJ1aWRfdmFsczsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmJ1aWRfdmFsczsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCXVuc2lnbmVkIGxvbmcgYnVpZDsKIApAQCAtMjQ3LDcgKzI0NSw3IEBACiAJaWYgKHBoYi0+cGFyZW50LT5wYXJlbnQpCiAJCXJldHVybiAwOwogCi0JYnVpZF92YWxzID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkocGhiLCAicmVnIiwgJmxlbik7CisJYnVpZF92YWxzID0gZ2V0X3Byb3BlcnR5KHBoYiwgInJlZyIsICZsZW4pOwogCWlmIChidWlkX3ZhbHMgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTI2NCwxMCArMjYyLDEwIEBACiBzdGF0aWMgaW50IHBoYl9zZXRfYnVzX3JhbmdlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiKQogewotCWludCAqYnVzX3JhbmdlOworCWNvbnN0IGludCAqYnVzX3JhbmdlOwogCXVuc2lnbmVkIGludCBsZW47CiAKLQlidXNfcmFuZ2UgPSAoaW50ICopIGdldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKKwlidXNfcmFuZ2UgPSBnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CiAJaWYgKGJ1c19yYW5nZSA9PSBOVUxMIHx8IGxlbiA8IDIgKiBzaXplb2YoaW50KSkgewogCQlyZXR1cm4gMTsKICAJfQpAQCAtMzI1LDE1ICszMjMsMTUgQEAKIAkgKiBpbiBjaG9zZW4uCiAJICovCiAJaWYgKG9mX2Nob3NlbikgewotCQlpbnQgKnByb3A7CisJCWNvbnN0IGludCAqcHJvcDsKIAotCQlwcm9wID0gKGludCAqKWdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxwY2ktcHJvYmUtb25seSIsCi0JCQkJCSAgIE5VTEwpOworCQlwcm9wID0gZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwKKwkJCQkibGludXgscGNpLXByb2JlLW9ubHkiLCBOVUxMKTsKIAkJaWYgKHByb3ApCiAJCQlwY2lfcHJvYmVfb25seSA9ICpwcm9wOwogCi0JCXByb3AgPSAoaW50ICopZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwKLQkJCQkJICAgImxpbnV4LHBjaS1hc3NpZ24tYWxsLWJ1c2VzIiwgTlVMTCk7CisJCXByb3AgPSBnZXRfcHJvcGVydHkob2ZfY2hvc2VuLAorCQkJCSJsaW51eCxwY2ktYXNzaWduLWFsbC1idXNlcyIsIE5VTEwpOwogCQlpZiAocHJvcCkKIAkJCXBjaV9hc3NpZ25fYWxsX2J1c2VzID0gKnByb3A7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKaW5kZXggNDk5YzM4Ni4uMGFmM2ZjMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCkBAIC0zMDQsMTkgKzMwNCwyMSBAQAogdm9pZCBfX2luaXQgY2hlY2tfZm9yX2luaXRyZCh2b2lkKQogewogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCXVuc2lnbmVkIGxvbmcgKnByb3A7CisJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOworCWludCBsZW47CiAKIAlEQkcoIiAtPiBjaGVja19mb3JfaW5pdHJkKClcbiIpOwogCiAJaWYgKG9mX2Nob3NlbikgewotCQlwcm9wID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcHJvcGVydHkob2ZfY2hvc2VuLAotCQkJCSJsaW51eCxpbml0cmQtc3RhcnQiLCBOVUxMKTsKKwkJcHJvcCA9IGdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxpbml0cmQtc3RhcnQiLCAmbGVuKTsKIAkJaWYgKHByb3AgIT0gTlVMTCkgewotCQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpX192YSgqcHJvcCk7Ci0JCQlwcm9wID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcHJvcGVydHkob2ZfY2hvc2VuLAotCQkJCQkibGludXgsaW5pdHJkLWVuZCIsIE5VTEwpOworCQkJaW5pdHJkX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJX192YShvZl9yZWFkX3Vsb25nKHByb3AsIGxlbiAvIDQpKTsKKwkJCXByb3AgPSBnZXRfcHJvcGVydHkob2ZfY2hvc2VuLAorCQkJCQkibGludXgsaW5pdHJkLWVuZCIsICZsZW4pOwogCQkJaWYgKHByb3AgIT0gTlVMTCkgewotCQkJCWluaXRyZF9lbmQgPSAodW5zaWduZWQgbG9uZylfX3ZhKCpwcm9wKTsKKwkJCQlpbml0cmRfZW5kID0gKHVuc2lnbmVkIGxvbmcpCisJCQkJCV9fdmEob2ZfcmVhZF91bG9uZyhwcm9wLCBsZW4gLyA0KSk7CiAJCQkJaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKIAkJCX0gZWxzZQogCQkJCWluaXRyZF9zdGFydCA9IDA7CkBAIC0zNjYsMTUgKzM2OCwxNCBAQAogCWludCBjcHUgPSAwOwogCiAJd2hpbGUgKChkbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRuLCAiY3B1IikpICYmIGNwdSA8IE5SX0NQVVMpIHsKLQkJaW50ICppbnRzZXJ2OworCQljb25zdCBpbnQgKmludHNlcnY7CiAJCWludCBqLCBsZW4gPSBzaXplb2YodTMyKSwgbnRocmVhZHMgPSAxOwogCi0JCWludHNlcnYgPSAoaW50ICopZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHBwYy1pbnRlcnJ1cHQtc2VydmVyI3MiLAotCQkJCQkgICAgICAmbGVuKTsKKwkJaW50c2VydiA9IGdldF9wcm9wZXJ0eShkbiwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7CiAJCWlmIChpbnRzZXJ2KQogCQkJbnRocmVhZHMgPSBsZW4gLyBzaXplb2YoaW50KTsKIAkJZWxzZSB7Ci0JCQlpbnRzZXJ2ID0gKGludCAqKSBnZXRfcHJvcGVydHkoZG4sICJyZWciLCBOVUxMKTsKKwkJCWludHNlcnYgPSBnZXRfcHJvcGVydHkoZG4sICJyZWciLCBOVUxMKTsKIAkJCWlmICghaW50c2VydikKIAkJCQlpbnRzZXJ2ID0gJmNwdTsJLyogYXNzdW1lIGxvZ2ljYWwgPT0gcGh5cyAqLwogCQl9CkBAIC0zOTUsMTMgKzM5NiwxMiBAQAogCWlmIChtYWNoaW5lX2lzKHBzZXJpZXMpICYmIGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikgJiYKIAkgICAgKGRuID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIikpKSB7CiAJCWludCBudW1fYWRkcl9jZWxsLCBudW1fc2l6ZV9jZWxsLCBtYXhjcHVzOwotCQl1bnNpZ25lZCBpbnQgKmlyZWc7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqaXJlZzsKIAogCQludW1fYWRkcl9jZWxsID0gcHJvbV9uX2FkZHJfY2VsbHMoZG4pOwogCQludW1fc2l6ZV9jZWxsID0gcHJvbV9uX3NpemVfY2VsbHMoZG4pOwogCi0JCWlyZWcgPSAodW5zaWduZWQgaW50ICopCi0JCQlnZXRfcHJvcGVydHkoZG4sICJpYm0sbHJkci1jYXBhY2l0eSIsIE5VTEwpOworCQlpcmVnID0gZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGxyZHItY2FwYWNpdHkiLCBOVUxMKTsKIAogCQlpZiAoIWlyZWcpCiAJCQlnb3RvIG91dDsKQEAgLTQ0NCw2ICs0NDQsOCBAQAogCiBpbnQgX19pbml0ZGF0YSBkb19lYXJseV94bW9uOwogI2lmZGVmIENPTkZJR19YTU9OCitleHRlcm4gaW50IHhtb25fbm9fYXV0b19iYWNrdHJhY2U7CisKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X3htb24oY2hhciAqcCkKIHsKIAkvKiBlbnN1cmUgeG1vbiBpcyBlbmFibGVkICovCkBAIC00NTIsNiArNDU0LDggQEAKIAkJCXhtb25faW5pdCgxKTsKIAkJaWYgKHN0cm5jbXAocCwgIm9mZiIsIDMpID09IDApCiAJCQl4bW9uX2luaXQoMCk7CisJCWlmIChzdHJuY21wKHAsICJub2J0IiwgNCkgPT0gMCkKKwkJCXhtb25fbm9fYXV0b19iYWNrdHJhY2UgPSAxOwogCQlpZiAoc3RybmNtcChwLCAiZWFybHkiLCA1KSAhPSAwKQogCQkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IGZkMTc4NWUuLjAwZDZiOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTU2LDcgKzU2LDYgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KICNpbmNsdWRlIDxhc20vbG1iLmg+Ci0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfbmFjYS5oPgogI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGFzbS94bW9uLmg+CiAjaW5jbHVkZSA8YXNtL3VkYmcuaD4KQEAgLTc5LDEwICs3OCwxMCBAQAogICogYmVmb3JlIHdlJ3ZlIHJlYWQgdGhpcyBmcm9tIHRoZSBkZXZpY2UgdHJlZS4KICAqLwogc3RydWN0IHBwYzY0X2NhY2hlcyBwcGM2NF9jYWNoZXMgPSB7Ci0JLmRsaW5lX3NpemUgPSAweDgwLAotCS5sb2dfZGxpbmVfc2l6ZSA9IDcsCi0JLmlsaW5lX3NpemUgPSAweDgwLAotCS5sb2dfaWxpbmVfc2l6ZSA9IDcKKwkuZGxpbmVfc2l6ZSA9IDB4NDAsCisJLmxvZ19kbGluZV9zaXplID0gNiwKKwkuaWxpbmVfc2l6ZSA9IDB4NDAsCisJLmxvZ19pbGluZV9zaXplID0gNgogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKHBwYzY0X2NhY2hlcyk7CiAKQEAgLTEwNyw3ICsxMDYsNyBAQAogc3RhdGljIHZvaWQgY2hlY2tfc210X2VuYWJsZWQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCWNoYXIgKnNtdF9vcHRpb247CisJY29uc3QgY2hhciAqc210X29wdGlvbjsKIAogCS8qIEFsbG93IHRoZSBjb21tYW5kIGxpbmUgdG8gb3ZlcnJ1bGUgdGhlIE9GIG9wdGlvbiAqLwogCWlmIChzbXRfZW5hYmxlZF9jbWRsaW5lKQpAQCAtMTE2LDcgKzExNSw3IEBACiAJZG4gPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL29wdGlvbnMiKTsKIAogCWlmIChkbikgewotCQlzbXRfb3B0aW9uID0gKGNoYXIgKilnZXRfcHJvcGVydHkoZG4sICJpYm0sc210LWVuYWJsZWQiLCBOVUxMKTsKKwkJc210X29wdGlvbiA9IGdldF9wcm9wZXJ0eShkbiwgImlibSxzbXQtZW5hYmxlZCIsIE5VTEwpOwogCiAgICAgICAgICAgICAgICAgaWYgKHNtdF9vcHRpb24pIHsKIAkJCWlmICghc3RyY21wKHNtdF9vcHRpb24sICJvbiIpKQpAQCAtMjkzLDcgKzI5Miw3IEBACiAJCSAqLwogCiAJCWlmICggbnVtX2NwdXMgPT0gMSApIHsKLQkJCXUzMiAqc2l6ZXAsICpsc2l6ZXA7CisJCQljb25zdCB1MzIgKnNpemVwLCAqbHNpemVwOwogCQkJdTMyIHNpemUsIGxzaXplOwogCQkJY29uc3QgY2hhciAqZGMsICppYzsKIApAQCAtMzA4LDEwICszMDcsMTAgQEAKIAogCQkJc2l6ZSA9IDA7CiAJCQlsc2l6ZSA9IGN1cl9jcHVfc3BlYy0+ZGNhY2hlX2JzaXplOwotCQkJc2l6ZXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiZC1jYWNoZS1zaXplIiwgTlVMTCk7CisJCQlzaXplcCA9IGdldF9wcm9wZXJ0eShucCwgImQtY2FjaGUtc2l6ZSIsIE5VTEwpOwogCQkJaWYgKHNpemVwICE9IE5VTEwpCiAJCQkJc2l6ZSA9ICpzaXplcDsKLQkJCWxzaXplcCA9ICh1MzIgKikgZ2V0X3Byb3BlcnR5KG5wLCBkYywgTlVMTCk7CisJCQlsc2l6ZXAgPSBnZXRfcHJvcGVydHkobnAsIGRjLCBOVUxMKTsKIAkJCWlmIChsc2l6ZXAgIT0gTlVMTCkKIAkJCQlsc2l6ZSA9ICpsc2l6ZXA7CiAJCQlpZiAoc2l6ZXAgPT0gMCB8fCBsc2l6ZXAgPT0gMCkKQEAgLTMyNSwxMCArMzI0LDEwIEBACiAKIAkJCXNpemUgPSAwOwogCQkJbHNpemUgPSBjdXJfY3B1X3NwZWMtPmljYWNoZV9ic2l6ZTsKLQkJCXNpemVwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImktY2FjaGUtc2l6ZSIsIE5VTEwpOworCQkJc2l6ZXAgPSBnZXRfcHJvcGVydHkobnAsICJpLWNhY2hlLXNpemUiLCBOVUxMKTsKIAkJCWlmIChzaXplcCAhPSBOVUxMKQogCQkJCXNpemUgPSAqc2l6ZXA7Ci0JCQlsc2l6ZXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCBpYywgTlVMTCk7CisJCQlsc2l6ZXAgPSBnZXRfcHJvcGVydHkobnAsIGljLCBOVUxMKTsKIAkJCWlmIChsc2l6ZXAgIT0gTlVMTCkKIAkJCQlsc2l6ZSA9ICpsc2l6ZXA7CiAJCQlpZiAoc2l6ZXAgPT0gMCB8fCBsc2l6ZXAgPT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLXRic3luYy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAtdGJzeW5jLmMKaW5kZXggZjE5ZTJlMC4uZGU1OWM2YyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAtdGJzeW5jLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zbXAtdGJzeW5jLmMKQEAgLTQ1LDggKzQ1LDkgQEAKIHsKIAlpbnQgY21kOwogCXU2NCB0YjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJd2hpbGUgKCFydW5uaW5nKQogCQliYXJyaWVyKCk7CiAJcm1iKCk7CkBAIC03MCw3ICs3MSw3IEBACiAJCQlzZXRfdGIodGIgPj4gMzIsIHRiICYgMHhmZmZmZmZmZnVsKTsKIAkJZW50ZXJfY29udGVzdCh0YnN5bmMtPm1hcmssIC0xKTsKIAl9Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc3RhcnRfY29udGVzdChpbnQgY21kLCBsb25nIG9mZnNldCwgaW50IG51bSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCmluZGV4IDQ2YzU2Y2YuLjZhOWJjOWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc21wLmMKQEAgLTE0NCwxMyArMTQ0LDE1IEBACiAKIHZvaWQgc21wX3NlbmRfcmVzY2hlZHVsZShpbnQgY3B1KQogewotCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhjcHUsIFBQQ19NU0dfUkVTQ0hFRFVMRSk7CisJaWYgKGxpa2VseShzbXBfb3BzKSkKKwkJc21wX29wcy0+bWVzc2FnZV9wYXNzKGNwdSwgUFBDX01TR19SRVNDSEVEVUxFKTsKIH0KIAogI2lmZGVmIENPTkZJR19ERUJVR0dFUgogdm9pZCBzbXBfc2VuZF9kZWJ1Z2dlcl9icmVhayhpbnQgY3B1KQogewotCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhjcHUsIFBQQ19NU0dfREVCVUdHRVJfQlJFQUspOworCWlmIChsaWtlbHkoc21wX29wcykpCisJCXNtcF9vcHMtPm1lc3NhZ2VfcGFzcyhjcHUsIFBQQ19NU0dfREVCVUdHRVJfQlJFQUspOwogfQogI2VuZGlmCiAKQEAgLTE1OCw3ICsxNjAsNyBAQAogdm9pZCBjcmFzaF9zZW5kX2lwaSh2b2lkICgqY3Jhc2hfaXBpX2NhbGxiYWNrKShzdHJ1Y3QgcHRfcmVncyAqKSkKIHsKIAljcmFzaF9pcGlfZnVuY3Rpb25fcHRyID0gY3Jhc2hfaXBpX2NhbGxiYWNrOwotCWlmIChjcmFzaF9pcGlfY2FsbGJhY2spIHsKKwlpZiAoY3Jhc2hfaXBpX2NhbGxiYWNrICYmIHNtcF9vcHMpIHsKIAkJbWIoKTsKIAkJc21wX29wcy0+bWVzc2FnZV9wYXNzKE1TR19BTExfQlVUX1NFTEYsIFBQQ19NU0dfREVCVUdHRVJfQlJFQUspOwogCX0KQEAgLTIyMCw2ICsyMjIsOSBAQAogCS8qIENhbiBkZWFkbG9jayB3aGVuIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgKi8KIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CiAKKwlpZiAodW5saWtlbHkoc21wX29wcyA9PSBOVUxMKSkKKwkJcmV0dXJuIC0xOworCiAJZGF0YS5mdW5jID0gZnVuYzsKIAlkYXRhLmluZm8gPSBpbmZvOwogCWF0b21pY19zZXQoJmRhdGEuc3RhcnRlZCwgMCk7CkBAIC0zNTcsNyArMzYyLDEwIEBACiAJc21wX3N0b3JlX2NwdV9pbmZvKGJvb3RfY3B1aWQpOwogCWNwdV9jYWxsaW5fbWFwW2Jvb3RfY3B1aWRdID0gMTsKIAotCW1heF9jcHVzID0gc21wX29wcy0+cHJvYmUoKTsKKwlpZiAoc21wX29wcykKKwkJbWF4X2NwdXMgPSBzbXBfb3BzLT5wcm9iZSgpOworCWVsc2UKKwkJbWF4X2NwdXMgPSAxOwogIAogCXNtcF9zcGFjZV90aW1lcnMobWF4X2NwdXMpOwogCkBAIC00NTMsNyArNDYxLDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgY3B1X2VuYWJsZSh1bnNpZ25lZCBpbnQgY3B1KQogewotCWlmIChzbXBfb3BzLT5jcHVfZW5hYmxlKQorCWlmIChzbXBfb3BzICYmIHNtcF9vcHMtPmNwdV9lbmFibGUpCiAJCXJldHVybiBzbXBfb3BzLT5jcHVfZW5hYmxlKGNwdSk7CiAKIAlyZXR1cm4gLUVOT1NZUzsKQEAgLTQ2Nyw3ICs0NzUsOCBAQAogCWlmICghY3B1X2VuYWJsZShjcHUpKQogCQlyZXR1cm4gMDsKIAotCWlmIChzbXBfb3BzLT5jcHVfYm9vdGFibGUgJiYgIXNtcF9vcHMtPmNwdV9ib290YWJsZShjcHUpKQorCWlmIChzbXBfb3BzID09IE5VTEwgfHwKKwkgICAgKHNtcF9vcHMtPmNwdV9ib290YWJsZSAmJiAhc21wX29wcy0+Y3B1X2Jvb3RhYmxlKGNwdSkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIE1ha2Ugc3VyZSBjYWxsaW4tbWFwIGVudHJ5IGlzIDAgKGNhbiBiZSBsZWZ0b3ZlciBhIENQVQpAQCAtNTY4LDcgKzU3Nyw4IEBACiAJb2xkX21hc2sgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShib290X2NwdWlkKSk7CiAJCi0Jc21wX29wcy0+c2V0dXBfY3B1KGJvb3RfY3B1aWQpOworCWlmIChzbXBfb3BzKQorCQlzbXBfb3BzLT5zZXR1cF9jcHUoYm9vdF9jcHVpZCk7CiAKIAlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9tYXNrKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDAxMDQzNTAuLjQwNmYzMDggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTYwLDcgKzYwLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHNtdF9zZXR1cCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb3B0aW9uczsKLQl1bnNpZ25lZCBpbnQgKnZhbDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnZhbDsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCiAJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9TTVQpKQpAQCAtNzAsOCArNzAsNyBAQAogCWlmICghb3B0aW9ucykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQl2YWwgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KG9wdGlvbnMsICJpYm0sc210LXNub296ZS1kZWxheSIsCi0JCQkJCSAgIE5VTEwpOworCXZhbCA9IGdldF9wcm9wZXJ0eShvcHRpb25zLCAiaWJtLHNtdC1zbm9vemUtZGVsYXkiLCBOVUxMKTsKIAlpZiAoIXNtdF9zbm9vemVfY21kbGluZSAmJiB2YWwpIHsKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJCXBlcl9jcHUoc210X3Nub296ZV9kZWxheSwgY3B1KSA9ICp2YWw7CkBAIC0yMzEsNyArMjMwLDcgQEAKIAlpZiAoY3VyX2NwdV9zcGVjLT5udW1fcG1jcyA+PSA4KQogCQlzeXNkZXZfY3JlYXRlX2ZpbGUocywgJmF0dHJfcG1jOCk7CiAKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfUFVSUikpCiAJCXN5c2Rldl9jcmVhdGVfZmlsZShzLCAmYXR0cl9wdXJyKTsKIH0KIApAQCAtMjczLDEyICsyNzIsMTIgQEAKIAlpZiAoY3VyX2NwdV9zcGVjLT5udW1fcG1jcyA+PSA4KQogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUocywgJmF0dHJfcG1jOCk7CiAKLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU01UKSkKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfUFVSUikpCiAJCXN5c2Rldl9yZW1vdmVfZmlsZShzLCAmYXR0cl9wdXJyKTsKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgc3lzZnNfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCitzdGF0aWMgaW50IF9fY3B1aW5pdCBzeXNmc19jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGludCkobG9uZyloY3B1OwpAQCAtMjk2LDcgKzI5NSw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIHN5c2ZzX2NwdV9uYiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBzeXNmc19jcHVfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSBzeXNmc19jcHVfbm90aWZ5LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwppbmRleCA3NzRjMGEzLi43YTNjM2Y3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90aW1lLmMKQEAgLTEyNSwxNSArMTI1LDggQEAKIHVuc2lnbmVkIGxvbmcgcHBjX3Byb2NfZnJlcTsKIHVuc2lnbmVkIGxvbmcgcHBjX3RiX2ZyZXE7CiAKLXU2NCB0Yl9sYXN0X2ppZmZ5IF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotdW5zaWduZWQgbG9uZyB0Yl9sYXN0X3N0YW1wOwotCi0vKgotICogTm90ZSB0aGF0IG9uIHBwYzMyIHRoaXMgb25seSBzdG9yZXMgdGhlIGJvdHRvbSAzMiBiaXRzIG9mCi0gKiB0aGUgdGltZWJhc2UgdmFsdWUsIGJ1dCB0aGF0J3MgZW5vdWdoIHRvIHRlbGwgd2hlbiBhIGppZmZ5Ci0gKiBoYXMgcGFzc2VkLgotICovCi1ERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBsYXN0X2ppZmZ5KTsKK3N0YXRpYyB1NjQgdGJfbGFzdF9qaWZmeSBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1NjQsIGxhc3RfamlmZnkpOwogCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIC8qCkBAIC00MTcsNyArNDEwLDcgQEAKIC8qCiAgKiBUaGlzIHZlcnNpb24gb2YgZ2V0dGltZW9mZGF5IGhhcyBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19kb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCB1NjQgdGJfdmFsKQorc3RhdGljIGlubGluZSB2b2lkIF9fZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKIHsKIAl1bnNpZ25lZCBsb25nIHNlYywgdXNlYzsKIAl1NjQgdGJfdGlja3MsIHhzZWM7CkBAIC00MzEsNyArNDI0LDEyIEBACiAJICogd2l0aG91dCBhIGRpdmlkZSAoYW5kIGluIGZhY3QsIHdpdGhvdXQgYSBtdWx0aXBseSkKIAkgKi8KIAl0ZW1wX3ZhcnAgPSBkb19ndG9kLnZhcnA7Ci0JdGJfdGlja3MgPSB0Yl92YWwgLSB0ZW1wX3ZhcnAtPnRiX29yaWdfc3RhbXA7CisKKwkvKiBTYW1wbGluZyB0aGUgdGltZSBiYXNlIG11c3QgYmUgZG9uZSBhZnRlciBsb2FkaW5nCisJICogZG9fZ3RvZC52YXJwIGluIG9yZGVyIHRvIGF2b2lkIHJhY2luZyB3aXRoIHVwZGF0ZV9ndG9kLgorCSAqLworCWRhdGFfYmFycmllcih0ZW1wX3ZhcnApOworCXRiX3RpY2tzID0gZ2V0X3RiKCkgLSB0ZW1wX3ZhcnAtPnRiX29yaWdfc3RhbXA7CiAJdGVtcF90Yl90b194cyA9IHRlbXBfdmFycC0+dGJfdG9feHM7CiAJdGVtcF9zdGFtcF94c2VjID0gdGVtcF92YXJwLT5zdGFtcF94c2VjOwogCXhzZWMgPSB0ZW1wX3N0YW1wX3hzZWMgKyBtdWxoZHUodGJfdGlja3MsIHRlbXBfdGJfdG9feHMpOwpAQCAtNDUzLDcgKzQ1MSw3IEBACiAJCWRvIHsKIAkJCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCQkJc2VjID0geHRpbWUudHZfc2VjOwotCQkJbnNlYyA9IHh0aW1lLnR2X25zZWMgKyB0Yl90aWNrc19zaW5jZSh0Yl9sYXN0X3N0YW1wKTsKKwkJCW5zZWMgPSB4dGltZS50dl9uc2VjICsgdGJfdGlja3Nfc2luY2UodGJfbGFzdF9qaWZmeSk7CiAJCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwogCQl1c2VjID0gbnNlYyAvIDEwMDA7CiAJCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKQEAgLTQ2NCw3ICs0NjIsNyBAQAogCQl0di0+dHZfdXNlYyA9IHVzZWM7CiAJCXJldHVybjsKIAl9Ci0JX19kb19nZXR0aW1lb2ZkYXkodHYsIGdldF90YigpKTsKKwlfX2RvX2dldHRpbWVvZmRheSh0dik7CiB9CiAKIEVYUE9SVF9TWU1CT0woZG9fZ2V0dGltZW9mZGF5KTsKQEAgLTY1MCw2ICs2NDgsNyBAQAogCWludCBuZXh0X2RlYzsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXVuc2lnbmVkIGxvbmcgdGlja3M7CisJdTY0IHRiX25leHRfamlmZnk7CiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIAlpZiAoYXRvbWljX3JlYWQoJnBwY19uX2xvc3RfaW50ZXJydXB0cykgIT0gMCkKQEAgLTY5MSwxMSArNjkwLDEzIEBACiAJCQljb250aW51ZTsKIAogCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQkJdGJfbGFzdF9qaWZmeSArPSB0Yl90aWNrc19wZXJfamlmZnk7Ci0JCXRiX2xhc3Rfc3RhbXAgPSBwZXJfY3B1KGxhc3RfamlmZnksIGNwdSk7Ci0JCWRvX3RpbWVyKHJlZ3MpOwotCQl0aW1lcl9yZWNhbGNfb2Zmc2V0KHRiX2xhc3RfamlmZnkpOwotCQl0aW1lcl9jaGVja19ydGMoKTsKKwkJdGJfbmV4dF9qaWZmeSA9IHRiX2xhc3RfamlmZnkgKyB0Yl90aWNrc19wZXJfamlmZnk7CisJCWlmIChwZXJfY3B1KGxhc3RfamlmZnksIGNwdSkgPj0gdGJfbmV4dF9qaWZmeSkgeworCQkJdGJfbGFzdF9qaWZmeSA9IHRiX25leHRfamlmZnk7CisJCQlkb190aW1lcihyZWdzKTsKKwkJCXRpbWVyX3JlY2FsY19vZmZzZXQodGJfbGFzdF9qaWZmeSk7CisJCQl0aW1lcl9jaGVja19ydGMoKTsKKwkJfQogCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCX0KIAkKQEAgLTc0MCw3ICs3NDEsNyBAQAogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgaGFsZiA9IHRiX3RpY2tzX3Blcl9qaWZmeSAvIDI7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB0Yl90aWNrc19wZXJfamlmZnkgLyBtYXhfY3B1czsKLQl1bnNpZ25lZCBsb25nIHByZXZpb3VzX3RiID0gcGVyX2NwdShsYXN0X2ppZmZ5LCBib290X2NwdWlkKTsKKwl1NjQgcHJldmlvdXNfdGIgPSBwZXJfY3B1KGxhc3RfamlmZnksIGJvb3RfY3B1aWQpOwogCiAJLyogbWFrZSBzdXJlIHRiID4gcGVyX2NwdShsYXN0X2ppZmZ5LCBjcHUpIGZvciBhbGwgY3B1cyBhbHdheXMgKi8KIAlwcmV2aW91c190YiAtPSB0Yl90aWNrc19wZXJfamlmZnk7CkBAIC04MjEsNyArODIyLDcgQEAKIAkgKiBhbmQgdGhlcmVmb3JlIHRoZSAoamlmZmllcyAtIHdhbGxfamlmZmllcykgY29tcHV0YXRpb24KIAkgKiBoYXMgYmVlbiByZW1vdmVkLgogCSAqLwotCXRiX2RlbHRhID0gdGJfdGlja3Nfc2luY2UodGJfbGFzdF9zdGFtcCk7CisJdGJfZGVsdGEgPSB0Yl90aWNrc19zaW5jZSh0Yl9sYXN0X2ppZmZ5KTsKIAl0Yl9kZWx0YSA9IG11bGhkdSh0Yl9kZWx0YSwgZG9fZ3RvZC52YXJwLT50Yl90b194cyk7IC8qIGluIHhzZWMgKi8KIAluZXdfbnNlYyAtPSBTQ0FMRV9YU0VDKHRiX2RlbHRhLCAxMDAwMDAwMDAwKTsKIApAQCAtODU5LDE5ICs4NjAsMTcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGdldF9mcmVxKGNoYXIgKm5hbWUsIGludCBjZWxscywgdW5zaWduZWQgbG9uZyAqdmFsKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1OwotCXVuc2lnbmVkIGludCAqZnA7CisJY29uc3QgdW5zaWduZWQgaW50ICpmcDsKIAlpbnQgZm91bmQgPSAwOwogCiAJLyogVGhlIGNwdSBub2RlIHNob3VsZCBoYXZlIHRpbWViYXNlIGFuZCBjbG9jayBmcmVxdWVuY3kgcHJvcGVydGllcyAqLwogCWNwdSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKIAogCWlmIChjcHUpIHsKLQkJZnAgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KGNwdSwgbmFtZSwgTlVMTCk7CisJCWZwID0gZ2V0X3Byb3BlcnR5KGNwdSwgbmFtZSwgTlVMTCk7CiAJCWlmIChmcCkgewogCQkJZm91bmQgPSAxOwotCQkJKnZhbCA9IDA7Ci0JCQl3aGlsZSAoY2VsbHMtLSkKLQkJCQkqdmFsID0gKCp2YWwgPDwgMzIpIHwgKmZwKys7CisJCQkqdmFsID0gb2ZfcmVhZF91bG9uZyhmcCwgY2VsbHMpOwogCQl9CiAKIAkJb2Zfbm9kZV9wdXQoY3B1KTsKQEAgLTk0MSw4ICs5NDAsNyBAQAogCWlmIChfX1VTRV9SVEMoKSkgewogCQkvKiA2MDEgcHJvY2Vzc29yOiBkZWMgY291bnRzIGRvd24gYnkgMTI4IGV2ZXJ5IDEyOG5zICovCiAJCXBwY190Yl9mcmVxID0gMTAwMDAwMDAwMDsKLQkJdGJfbGFzdF9zdGFtcCA9IGdldF9ydGNsKCk7Ci0JCXRiX2xhc3RfamlmZnkgPSB0Yl9sYXN0X3N0YW1wOworCQl0Yl9sYXN0X2ppZmZ5ID0gZ2V0X3J0Y2woKTsKIAl9IGVsc2UgewogCQkvKiBOb3JtYWwgUG93ZXJQQyB3aXRoIHRpbWViYXNlIHJlZ2lzdGVyICovCiAJCXBwY19tZC5jYWxpYnJhdGVfZGVjcigpOwpAQCAtOTUwLDcgKzk0OCw3IEBACiAJCSAgICAgICBwcGNfdGJfZnJlcSAvIDEwMDAwMDAsIHBwY190Yl9mcmVxICUgMTAwMDAwMCk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJ0aW1lX2luaXQ6IHByb2Nlc3NvciBmcmVxdWVuY3kgICA9ICVsdS4lLjZsdSBNSHpcbiIsCiAJCSAgICAgICBwcGNfcHJvY19mcmVxIC8gMTAwMDAwMCwgcHBjX3Byb2NfZnJlcSAlIDEwMDAwMDApOwotCQl0Yl9sYXN0X3N0YW1wID0gdGJfbGFzdF9qaWZmeSA9IGdldF90YigpOworCQl0Yl9sYXN0X2ppZmZ5ID0gZ2V0X3RiKCk7CiAJfQogCiAJdGJfdGlja3NfcGVyX2ppZmZ5ID0gcHBjX3RiX2ZyZXEgLyBIWjsKQEAgLTEwMjcsNyArMTAyNSw3IEBACiAJZG9fZ3RvZC52YXJwID0gJmRvX2d0b2QudmFyc1swXTsKIAlkb19ndG9kLnZhcl9pZHggPSAwOwogCWRvX2d0b2QudmFycC0+dGJfb3JpZ19zdGFtcCA9IHRiX2xhc3RfamlmZnk7Ci0JX19nZXRfY3B1X3ZhcihsYXN0X2ppZmZ5KSA9IHRiX2xhc3Rfc3RhbXA7CisJX19nZXRfY3B1X3ZhcihsYXN0X2ppZmZ5KSA9IHRiX2xhc3RfamlmZnk7CiAJZG9fZ3RvZC52YXJwLT5zdGFtcF94c2VjID0gKHU2NCkgeHRpbWUudHZfc2VjICogWFNFQ19QRVJfU0VDOwogCWRvX2d0b2QudGJfdGlja3NfcGVyX3NlYyA9IHRiX3RpY2tzX3Blcl9zZWM7CiAJZG9fZ3RvZC52YXJwLT50Yl90b194cyA9IHRiX3RvX3hzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDNjNjY4MDcuLmQ5ZjEwZjJmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCkBAIC01NSw5ICs1NSw2IEBACiAKICNpZmRlZiBDT05GSUdfUFBDNjQJLyogWFhYICovCiAjZGVmaW5lIF9JT19CQVNFCXBjaV9pb19iYXNlCi0jaWZkZWYgQ09ORklHX0tFWEVDCi1jcHVtYXNrX3QgY3B1c19pbl9zciA9IENQVV9NQVNLX05PTkU7Ci0jZW5kaWYKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHR0VSCkBAIC0xNTAsMTMgKzE0Nyw5IEBACiAJaWYgKGluX2ludGVycnVwdCgpKQogCQlwYW5pYygiRmF0YWwgZXhjZXB0aW9uIGluIGludGVycnVwdCIpOwogCi0JaWYgKHBhbmljX29uX29vcHMpIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKLQkJcHJpbnRrKEtFUk5fRU1FUkcgIkZhdGFsIGV4Y2VwdGlvbjogcGFuaWMgaW4gNSBzZWNvbmRzXG4iKTsKLQkJc3NsZWVwKDUpOwotI2VuZGlmCisJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKLQl9CisKIAlkb19leGl0KGVycik7CiAKIAlyZXR1cm4gMDsKQEAgLTIxNSw2ICsyMDgsMTkgQEAKIAogCWRpZSgiU3lzdGVtIFJlc2V0IiwgcmVncywgU0lHQUJSVCk7CiAKKwkvKgorCSAqIFNvbWUgQ1BVcyB3aGVuIHJlbGVhc2VkIGZyb20gdGhlIGRlYnVnZ2VyIHdpbGwgZXhlY3V0ZSB0aGlzIHBhdGguCisJICogVGhlc2UgQ1BVcyBlbnRlcmVkIHRoZSBkZWJ1Z2dlciB2aWEgYSBzb2Z0LXJlc2V0LiBJZiB0aGUgQ1BVIHdhcworCSAqIGh1bmcgYmVmb3JlIGVudGVyaW5nIHRoZSBkZWJ1Z2dlciBpdCB3aWxsIHJldHVybiB0byB0aGUgaHVuZworCSAqIHN0YXRlIHdoZW4gZXhpdGluZyB0aGlzIGZ1bmN0aW9uLiAgVGhpcyBjYXVzZXMgYSBwcm9ibGVtIGluCisJICoga2R1bXAgc2luY2UgdGhlIGh1bmcgQ1BVKHMpIHdpbGwgbm90IHJlc3BvbmQgdG8gdGhlIElQSSBzZW50CisJICogZnJvbSBrZHVtcC4gVG8gcHJldmVudCB0aGUgcHJvYmxlbSB3ZSBjYWxsIGNyYXNoX2tleGVjX3NlY29uZGFyeSgpCisJICogaGVyZS4gSWYgYSBrZHVtcCBoYWQgbm90IGJlZW4gaW5pdGlhdGVkIG9yIHdlIGV4aXQgdGhlIGRlYnVnZ2VyCisJICogd2l0aCB0aGUgImV4aXQgYW5kIHJlY292ZXIiIGNvbW1hbmQgKHgpIGNyYXNoX2tleGVjX3NlY29uZGFyeSgpCisJICogd2lsbCByZXR1cm4gYWZ0ZXIgNW1zIGFuZCB0aGUgQ1BVIHJldHVybnMgdG8gaXRzIHByZXZpb3VzIHN0YXRlLgorCSAqLworCWNyYXNoX2tleGVjX3NlY29uZGFyeShyZWdzKTsKKwogCS8qIE11c3QgZGllIGlmIHRoZSBpbnRlcnJ1cHQgaXMgbm90IHJlY292ZXJhYmxlICovCiAJaWYgKCEocmVncy0+bXNyICYgTVNSX1JJKSkKIAkJcGFuaWMoIlVucmVjb3ZlcmFibGUgU3lzdGVtIFJlc2V0Iik7CkBAIC01NzksMTkgKzU4NSwyMiBAQAogI2RlZmluZSBJTlNUX01GU1BSX1BWUl9NQVNLCTB4ZmMxZmZmZmYKIAogI2RlZmluZSBJTlNUX0RDQkEJCTB4N2MwMDA1ZWMKLSNkZWZpbmUgSU5TVF9EQ0JBX01BU0sJCTB4N2MwMDA3ZmUKKyNkZWZpbmUgSU5TVF9EQ0JBX01BU0sJCTB4ZmMwMDA3ZmUKIAogI2RlZmluZSBJTlNUX01DUlhSCQkweDdjMDAwNDAwCi0jZGVmaW5lIElOU1RfTUNSWFJfTUFTSwkJMHg3YzAwMDdmZQorI2RlZmluZSBJTlNUX01DUlhSX01BU0sJCTB4ZmMwMDA3ZmUKIAogI2RlZmluZSBJTlNUX1NUUklORwkJMHg3YzAwMDQyYQotI2RlZmluZSBJTlNUX1NUUklOR19NQVNLCTB4N2MwMDA3ZmUKLSNkZWZpbmUgSU5TVF9TVFJJTkdfR0VOX01BU0sJMHg3YzAwMDY3ZQorI2RlZmluZSBJTlNUX1NUUklOR19NQVNLCTB4ZmMwMDA3ZmUKKyNkZWZpbmUgSU5TVF9TVFJJTkdfR0VOX01BU0sJMHhmYzAwMDY3ZQogI2RlZmluZSBJTlNUX0xTV0kJCTB4N2MwMDA0YWEKICNkZWZpbmUgSU5TVF9MU1dYCQkweDdjMDAwNDJhCiAjZGVmaW5lIElOU1RfU1RTV0kJCTB4N2MwMDA1YWEKICNkZWZpbmUgSU5TVF9TVFNXWAkJMHg3YzAwMDUyYQogCisjZGVmaW5lIElOU1RfUE9QQ05UQgkJMHg3YzAwMDBmNAorI2RlZmluZSBJTlNUX1BPUENOVEJfTUFTSwkweGZjMDAwN2ZlCisKIHN0YXRpYyBpbnQgZW11bGF0ZV9zdHJpbmdfaW5zdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdTMyIGluc3R3b3JkKQogewogCXU4IHJUID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWY7CkBAIC02NjAsNiArNjY5LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZW11bGF0ZV9wb3BjbnRiX2luc3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0d29yZCkKK3sKKwl1MzIgcmEscnM7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlyYSA9IChpbnN0d29yZCA+PiAxNikgJiAweDFmOworCXJzID0gKGluc3R3b3JkID4+IDIxKSAmIDB4MWY7CisKKwl0bXAgPSByZWdzLT5ncHJbcnNdOworCXRtcCA9IHRtcCAtICgodG1wID4+IDEpICYgMHg1NTU1NTU1NTU1NTU1NTU1VUxMKTsKKwl0bXAgPSAodG1wICYgMHgzMzMzMzMzMzMzMzMzMzMzVUxMKSArICgodG1wID4+IDIpICYgMHgzMzMzMzMzMzMzMzMzMzMzVUxMKTsKKwl0bXAgPSAodG1wICsgKHRtcCA+PiA0KSkgJiAweDBmMGYwZjBmMGYwZjBmMGZVTEw7CisJcmVncy0+Z3ByW3JhXSA9IHRtcDsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGVtdWxhdGVfaW5zdHJ1Y3Rpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdTMyIGluc3R3b3JkOwpAQCAtNjk3LDYgKzcyMywxMSBAQAogCWlmICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19HRU5fTUFTSykgPT0gSU5TVF9TVFJJTkcpCiAJCXJldHVybiBlbXVsYXRlX3N0cmluZ19pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAorCS8qIEVtdWxhdGUgdGhlIHBvcGNudGIgKFBvcHVsYXRpb24gQ291bnQgQnl0ZXMpIGluc3RydWN0aW9uLiAqLworCWlmICgoaW5zdHdvcmQgJiBJTlNUX1BPUENOVEJfTUFTSykgPT0gSU5TVF9QT1BDTlRCKSB7CisJCXJldHVybiBlbXVsYXRlX3BvcGNudGJfaW5zdChyZWdzLCBpbnN0d29yZCk7CisJfQorCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnXzE2NTUwLmMKaW5kZXggMDgzNWI0ODQuLjJkMTdmMmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC04MSwxMCArODEsMTQgQEAKIHZvaWQgdWRiZ19pbml0X3VhcnQodm9pZCBfX2lvbWVtICpjb21wb3J0LCB1bnNpZ25lZCBpbnQgc3BlZWQsCiAJCSAgICB1bnNpZ25lZCBpbnQgY2xvY2spCiB7Ci0JdW5zaWduZWQgaW50IGRsbCwgYmFzZV9iYXVkcyA9IGNsb2NrIC8gMTY7CisJdW5zaWduZWQgaW50IGRsbCwgYmFzZV9iYXVkczsKIAorCWlmIChjbG9jayA9PSAwKQorCQljbG9jayA9IDE4NDMyMDA7CiAJaWYgKHNwZWVkID09IDApCiAJCXNwZWVkID0gOTYwMDsKKworCWJhc2VfYmF1ZHMgPSBjbG9jayAvIDE2OwogCWRsbCA9IGJhc2VfYmF1ZHMgLyBzcGVlZDsKIAogCWlmIChjb21wb3J0KSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCmluZGV4IDhhM2JlZDUuLjM3MjYzNTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL01ha2VmaWxlCkBAIC0xNCw3ICsxNCw4IEBACiAKIAogRVhUUkFfQ0ZMQUdTIDo9IC1zaGFyZWQgLXMgLWZuby1jb21tb24gLWZuby1idWlsdGluCi1FWFRSQV9DRkxBR1MgKz0gLW5vc3RkbGliIC1XbCwtc29uYW1lPWxpbnV4LXZkc28zMi5zby4xCitFWFRSQV9DRkxBR1MgKz0gLW5vc3RkbGliIC1XbCwtc29uYW1lPWxpbnV4LXZkc28zMi5zby4xIFwKKwkJJChjYWxsIGxkLW9wdGlvbiwgLVdsJChjb21tYSktLWhhc2gtc3R5bGU9c3lzdikKIEVYVFJBX0FGTEFHUyA6PSAtRF9fVkRTTzMyX18gLXMKIAogb2JqLXkgKz0gdmRzbzMyX3dyYXBwZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvMzIvdmRzbzMyLmxkcy5TCmluZGV4IGY0YmFkNzIuLjYxODdhZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzMyL3Zkc28zMi5sZHMuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc28zMi92ZHNvMzIubGRzLlMKQEAgLTE0LDYgKzE0LDcgQEAKIHsKICAgLiA9IFZEU08zMl9MQkFTRSArIFNJWkVPRl9IRUFERVJTOwogICAuaGFzaCAgICAgICAgICAgOiB7ICooLmhhc2gpIH0JCQk6dGV4dAorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CiAgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CiAgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CiAgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKaW5kZXggYWIzOTk4OC4uNDNhZjliMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvTWFrZWZpbGUKQEAgLTgsNyArOCw4IEBACiBvYmotdmRzbzY0IDo9ICQoYWRkcHJlZml4ICQob2JqKS8sICQob2JqLXZkc282NCkpCiAKIEVYVFJBX0NGTEFHUyA6PSAtc2hhcmVkIC1zIC1mbm8tY29tbW9uIC1mbm8tYnVpbHRpbgotRVhUUkFfQ0ZMQUdTICs9ICAtbm9zdGRsaWIgLVdsLC1zb25hbWU9bGludXgtdmRzbzY0LnNvLjEKK0VYVFJBX0NGTEFHUyArPSAtbm9zdGRsaWIgLVdsLC1zb25hbWU9bGludXgtdmRzbzY0LnNvLjEgXAorCQkkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQogRVhUUkFfQUZMQUdTIDo9IC1EX19WRFNPNjRfXyAtcwogCiBvYmoteSArPSB2ZHNvNjRfd3JhcHBlci5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Zkc282NC92ZHNvNjQubGRzLlMKaW5kZXggNGJkZjIyNC4uNGEyYjZkYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC92ZHNvNjQvdmRzbzY0Lmxkcy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmRzbzY0L3Zkc282NC5sZHMuUwpAQCAtMTIsNiArMTIsNyBAQAogewogICAuID0gVkRTTzY0X0xCQVNFICsgU0laRU9GX0hFQURFUlM7CiAgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQkJOnRleHQKKyAgLmdudS5oYXNoICAgICAgIDogeyAqKC5nbnUuaGFzaCkgfQogICAuZHluc3ltICAgICAgICAgOiB7ICooLmR5bnN5bSkgfQogICAuZHluc3RyICAgICAgICAgOiB7ICooLmR5bnN0cikgfQogICAuZ251LnZlcnNpb24gICAgOiB7ICooLmdudS52ZXJzaW9uKSB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92aW8uYwppbmRleCBmYWQ4NTgwLi5jYjg3ZTcxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Zpby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdmlvLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJdW5zaWduZWQgY2hhciAqZG1hX3dpbmRvdzsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZG1hX3dpbmRvdzsKIAkJc3RydWN0IGlvbW11X3RhYmxlICp0Ymw7CiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplOwogCkBAIC0yMTcsNyArMjE3LDcgQEAKIHN0cnVjdCB2aW9fZGV2ICogX19kZXZpbml0IHZpb19yZWdpc3Rlcl9kZXZpY2Vfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX25vZGUpCiB7CiAJc3RydWN0IHZpb19kZXYgKnZpb2RldjsKLQl1bnNpZ25lZCBpbnQgKnVuaXRfYWRkcmVzczsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnVuaXRfYWRkcmVzczsKIAogCS8qIHdlIG5lZWQgdGhlICdkZXZpY2VfdHlwZScgcHJvcGVydHksIGluIG9yZGVyIHRvIG1hdGNoIHdpdGggZHJpdmVycyAqLwogCWlmIChvZl9ub2RlLT50eXBlID09IE5VTEwpIHsKQEAgLTIyNyw3ICsyMjcsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQl1bml0X2FkZHJlc3MgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KG9mX25vZGUsICJyZWciLCBOVUxMKTsKKwl1bml0X2FkZHJlc3MgPSBnZXRfcHJvcGVydHkob2Zfbm9kZSwgInJlZyIsIE5VTEwpOwogCWlmICh1bml0X2FkZHJlc3MgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm9kZSAlcyBtaXNzaW5nICdyZWcnXG4iLAogCQkJCV9fRlVOQ1RJT05fXywKQEAgLTI0OSw3ICsyNDksNyBAQAogCXZpb2Rldi0+dHlwZSA9IG9mX25vZGUtPnR5cGU7CiAJdmlvZGV2LT51bml0X2FkZHJlc3MgPSAqdW5pdF9hZGRyZXNzOwogCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKSB7Ci0JCXVuaXRfYWRkcmVzcyA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkob2Zfbm9kZSwKKwkJdW5pdF9hZGRyZXNzID0gZ2V0X3Byb3BlcnR5KG9mX25vZGUsCiAJCQkJImxpbnV4LHVuaXRfYWRkcmVzcyIsIE5VTEwpOwogCQlpZiAodW5pdF9hZGRyZXNzICE9IE5VTEwpCiAJCQl2aW9kZXYtPnVuaXRfYWRkcmVzcyA9ICp1bml0X2FkZHJlc3M7CkBAIC00MjMsNyArNDIzLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgdmlvX2RldiAqdmlvX2RldiA9IHRvX3Zpb19kZXYoZGV2KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWNoYXIgKmNwOworCWNvbnN0IGNoYXIgKmNwOwogCWludCBsZW5ndGg7CiAKIAlpZiAoIW51bV9lbnZwKQpAQCAtNDMxLDcgKzQzMSw3IEBACiAKIAlpZiAoIWRuKQogCQlyZXR1cm4gLUVOT0RFVjsKLQljcCA9IChjaGFyICopZ2V0X3Byb3BlcnR5KGRuLCAiY29tcGF0aWJsZSIsICZsZW5ndGgpOworCWNwID0gZ2V0X3Byb3BlcnR5KGRuLCAiY29tcGF0aWJsZSIsICZsZW5ndGgpOwogCWlmICghY3ApCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC00OTMsMTEgKzQ5MywxMSBAQAogICovCiBzdHJ1Y3QgdmlvX2RldiAqdmlvX2ZpbmRfbm9kZShzdHJ1Y3QgZGV2aWNlX25vZGUgKnZub2RlKQogewotCXVpbnQzMl90ICp1bml0X2FkZHJlc3M7CisJY29uc3QgdWludDMyX3QgKnVuaXRfYWRkcmVzczsKIAljaGFyIGtvYmpfbmFtZVtCVVNfSURfU0laRV07CiAKIAkvKiBjb25zdHJ1Y3QgdGhlIGtvYmplY3QgbmFtZSBmcm9tIHRoZSBkZXZpY2Ugbm9kZSAqLwotCXVuaXRfYWRkcmVzcyA9ICh1aW50MzJfdCAqKWdldF9wcm9wZXJ0eSh2bm9kZSwgInJlZyIsIE5VTEwpOworCXVuaXRfYWRkcmVzcyA9IGdldF9wcm9wZXJ0eSh2bm9kZSwgInJlZyIsIE5VTEwpOwogCWlmICghdW5pdF9hZGRyZXNzKQogCQlyZXR1cm4gTlVMTDsKIAlzbnByaW50Zihrb2JqX25hbWUsIEJVU19JRF9TSVpFLCAiJXgiLCAqdW5pdF9hZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbGliL01ha2VmaWxlCmluZGV4IGZmNzA5NjQuLjMzNmRkMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9NYWtlZmlsZQpAQCAtMTQsNyArMTQsNiBAQAogb2JqLSQoQ09ORklHX1BQQzY0KQkrPSBjaGVja3N1bV82NC5vIGNvcHlwYWdlXzY0Lm8gY29weXVzZXJfNjQubyBcCiAJCQkgICBtZW1jcHlfNjQubyB1c2VyY29weV82NC5vIG1lbV82NC5vIHN0cmluZy5vIFwKIAkJCSAgIHN0cmNhc2Uubwotb2JqLSQoQ09ORklHX1BQQ19JU0VSSUVTKSArPSBlMmEubwogb2JqLSQoQ09ORklHX1hNT04pCSs9IHNzdGVwLm8KIAogaWZlcSAoJChDT05GSUdfUFBDNjQpLHkpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2UyYS5jIGIvYXJjaC9wb3dlcnBjL2xpYi9lMmEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI3MmVkOC4uMDAwMDAwMAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2UyYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS8qCi0gKiAgRUJDRElDIHRvIEFTQ0lJIGNvbnZlcnNpb24KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIG1vdmVkIGhlcmUgZnJvbSBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jIAotICoKLSAqIChDKSBDb3B5cmlnaHQgMjAwMC0yMDA0IElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyAgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCi0gKiBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueXUgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAotICogSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi11bnNpZ25lZCBjaGFyIGUyYSh1bnNpZ25lZCBjaGFyIHgpCi17Ci0Jc3dpdGNoICh4KSB7Ci0JY2FzZSAweEYwOgotCQlyZXR1cm4gJzAnOwotCWNhc2UgMHhGMToKLQkJcmV0dXJuICcxJzsKLQljYXNlIDB4RjI6Ci0JCXJldHVybiAnMic7Ci0JY2FzZSAweEYzOgotCQlyZXR1cm4gJzMnOwotCWNhc2UgMHhGNDoKLQkJcmV0dXJuICc0JzsKLQljYXNlIDB4RjU6Ci0JCXJldHVybiAnNSc7Ci0JY2FzZSAweEY2OgotCQlyZXR1cm4gJzYnOwotCWNhc2UgMHhGNzoKLQkJcmV0dXJuICc3JzsKLQljYXNlIDB4Rjg6Ci0JCXJldHVybiAnOCc7Ci0JY2FzZSAweEY5OgotCQlyZXR1cm4gJzknOwotCWNhc2UgMHhDMToKLQkJcmV0dXJuICdBJzsKLQljYXNlIDB4QzI6Ci0JCXJldHVybiAnQic7Ci0JY2FzZSAweEMzOgotCQlyZXR1cm4gJ0MnOwotCWNhc2UgMHhDNDoKLQkJcmV0dXJuICdEJzsKLQljYXNlIDB4QzU6Ci0JCXJldHVybiAnRSc7Ci0JY2FzZSAweEM2OgotCQlyZXR1cm4gJ0YnOwotCWNhc2UgMHhDNzoKLQkJcmV0dXJuICdHJzsKLQljYXNlIDB4Qzg6Ci0JCXJldHVybiAnSCc7Ci0JY2FzZSAweEM5OgotCQlyZXR1cm4gJ0knOwotCWNhc2UgMHhEMToKLQkJcmV0dXJuICdKJzsKLQljYXNlIDB4RDI6Ci0JCXJldHVybiAnSyc7Ci0JY2FzZSAweEQzOgotCQlyZXR1cm4gJ0wnOwotCWNhc2UgMHhENDoKLQkJcmV0dXJuICdNJzsKLQljYXNlIDB4RDU6Ci0JCXJldHVybiAnTic7Ci0JY2FzZSAweEQ2OgotCQlyZXR1cm4gJ08nOwotCWNhc2UgMHhENzoKLQkJcmV0dXJuICdQJzsKLQljYXNlIDB4RDg6Ci0JCXJldHVybiAnUSc7Ci0JY2FzZSAweEQ5OgotCQlyZXR1cm4gJ1InOwotCWNhc2UgMHhFMjoKLQkJcmV0dXJuICdTJzsKLQljYXNlIDB4RTM6Ci0JCXJldHVybiAnVCc7Ci0JY2FzZSAweEU0OgotCQlyZXR1cm4gJ1UnOwotCWNhc2UgMHhFNToKLQkJcmV0dXJuICdWJzsKLQljYXNlIDB4RTY6Ci0JCXJldHVybiAnVyc7Ci0JY2FzZSAweEU3OgotCQlyZXR1cm4gJ1gnOwotCWNhc2UgMHhFODoKLQkJcmV0dXJuICdZJzsKLQljYXNlIDB4RTk6Ci0JCXJldHVybiAnWic7Ci0JfQotCXJldHVybiAnICc7Ci19Ci1FWFBPUlRfU1lNQk9MKGUyYSk7Ci0KLXVuc2lnbmVkIGNoYXIqIHN0cm5lMmEodW5zaWduZWQgY2hhciAqZGVzdCwgY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3QgbikKLXsKLQlpbnQgaTsKLQotCW4gPSBzdHJubGVuKHNyYywgbik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQotCQlkZXN0W2ldID0gZTJhKHNyY1tpXSk7Ci0KLQlyZXR1cm4gZGVzdDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvbG9ja3MuYyBiL2FyY2gvcG93ZXJwYy9saWIvbG9ja3MuYwppbmRleCAwNzdiZWQ3Li44MGI0ODJjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbGliL2xvY2tzLmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9sb2Nrcy5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2NhbGwuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL2Zpcm13YXJlLmg+CiAKIHZvaWQgX19zcGluX3lpZWxkKHJhd19zcGlubG9ja190ICpsb2NrKQogewpAQCAtMzksMTMgKzQwLDEyIEBACiAJcm1iKCk7CiAJaWYgKGxvY2stPnNsb2NrICE9IGxvY2tfdmFsdWUpCiAJCXJldHVybjsJCS8qIHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLwotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCUh2Q2FsbDIoSHZDYWxsQmFzZVlpZWxkUHJvY2Vzc29yLCBIdkNhbGxfWWllbGRUb1Byb2MsCi0JCSgodTY0KWhvbGRlcl9jcHUgPDwgMzIpIHwgeWllbGRfY291bnQpOwotI2Vsc2UKLQlwbHBhcl9oY2FsbF9ub3JldHMoSF9DT05GRVIsIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaG9sZGVyX2NwdSksCi0JCQkgICB5aWVsZF9jb3VudCk7Ci0jZW5kaWYKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJSHZDYWxsMihIdkNhbGxCYXNlWWllbGRQcm9jZXNzb3IsIEh2Q2FsbF9ZaWVsZFRvUHJvYywKKwkJCSgodTY0KWhvbGRlcl9jcHUgPDwgMzIpIHwgeWllbGRfY291bnQpOworCWVsc2UKKwkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ09ORkVSLAorCQkJZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChob2xkZXJfY3B1KSwgeWllbGRfY291bnQpOwogfQogCiAvKgpAQCAtNjksMTMgKzY5LDEyIEBACiAJcm1iKCk7CiAJaWYgKHJ3LT5sb2NrICE9IGxvY2tfdmFsdWUpCiAJCXJldHVybjsJCS8qIHNvbWV0aGluZyBoYXMgY2hhbmdlZCAqLwotI2lmZGVmIENPTkZJR19QUENfSVNFUklFUwotCUh2Q2FsbDIoSHZDYWxsQmFzZVlpZWxkUHJvY2Vzc29yLCBIdkNhbGxfWWllbGRUb1Byb2MsCi0JCSgodTY0KWhvbGRlcl9jcHUgPDwgMzIpIHwgeWllbGRfY291bnQpOwotI2Vsc2UKLQlwbHBhcl9oY2FsbF9ub3JldHMoSF9DT05GRVIsIGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoaG9sZGVyX2NwdSksCi0JCQkgICB5aWVsZF9jb3VudCk7Ci0jZW5kaWYKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJSHZDYWxsMihIdkNhbGxCYXNlWWllbGRQcm9jZXNzb3IsIEh2Q2FsbF9ZaWVsZFRvUHJvYywKKwkJCSgodTY0KWhvbGRlcl9jcHUgPDwgMzIpIHwgeWllbGRfY291bnQpOworCWVsc2UKKwkJcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ09ORkVSLAorCQkJZ2V0X2hhcmRfc21wX3Byb2Nlc3Nvcl9pZChob2xkZXJfY3B1KSwgeWllbGRfY291bnQpOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvbWVtY3B5XzY0LlMgYi9hcmNoL3Bvd2VycGMvbGliL21lbWNweV82NC5TCmluZGV4IGZkNjZhY2YuLjcxNzNiYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvbWVtY3B5XzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9tZW1jcHlfNjQuUwpAQCAtMTEsNiArMTEsNyBAQAogCiAJLmFsaWduCTcKIF9HTE9CQUwobWVtY3B5KQorCXN0ZAlyMyw0OChyMSkJLyogc2F2ZSBkZXN0aW5hdGlvbiBwb2ludGVyIGZvciByZXR1cm4gdmFsdWUgKi8KIAltdGNyZgkweDAxLHI1CiAJY21wbGRpCWNyMSxyNSwxNgogCW5lZwlyNixyMwkJIyBMUyAzIGJpdHMgPSAjIGJ5dGVzIHRvIDgtYnl0ZSBkZXN0IGJkcnkKQEAgLTM4LDcgKzM5LDcgQEAKIAlzdGR1CXI5LDE2KHIzKQogCWJkbnoJMWIKIDM6CXN0ZAlyOCw4KHIzKQotCWJlcWxyCisJYmVxCTNmCiAJYWRkaQlyMyxyMywxNgogCWxkCXI5LDgocjQpCiAuTGRvX3RhaWw6CkBAIC01Myw3ICs1NCw4IEBACiAyOgliZgljcjcqNCszLDNmCiAJcm90bGRpCXI5LHI5LDgKIAlzdGIJcjksMChyMykKLTM6CWJscgorMzoJbGQJcjMsNDgocjEpCS8qIHJldHVybiBkZXN0IHBvaW50ZXIgKi8KKwlibHIKIAogLkxzcmNfdW5hbGlnbmVkOgogCXNyZGkJcjYscjUsMwpAQCAtMTE1LDcgKzExNyw3IEBACiA1OglzcmQJcjEyLHI5LHIxMQogCW9yCXIxMixyOCxyMTIKIAlzdGQJcjEyLDI0KHIzKQotCWJlcWxyCisJYmVxCTRmCiAJY21wd2kJY3IxLHI1LDgKIAlhZGRpCXIzLHIzLDMyCiAJc2xkCXI5LHI5LHIxMApAQCAtMTY3LDQgKzE2OSw1IEBACiAzOgliZgljcjcqNCszLDRmCiAJbGJ6CXIwLDAocjQpCiAJc3RiCXIwLDAocjMpCi00OglibHIKKzQ6CWxkCXIzLDQ4KHIxKQkvKiByZXR1cm4gZGVzdCBwb2ludGVyICovCisJYmxyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vNDR4X21tdS5jIGIvYXJjaC9wb3dlcnBjL21tLzQ0eF9tbXUuYwppbmRleCAzNzY4MjllLi4wYTBhMDQ4N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS80NHhfbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tLzQ0eF9tbXUuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAKIAkvKiBEZXRlcm1pbmUgbnVtYmVyIG9mIGVudHJpZXMgbmVjZXNzYXJ5IHRvIGNvdmVyIGxvd21lbSAqLwogCXBpbm5lZF90bGJzID0gKHVuc2lnbmVkIGludCkKLQkJKF9BTElHTih0b3RhbF9sb3dtZW0sIFBQQzQ0eF9QSU5fU0laRSkgPj4gUFBDNDR4X1BJTl9TSElGVCk7CisJCShfQUxJR04odG90YWxfbG93bWVtLCBQUENfUElOX1NJWkUpID4+IFBQQzQ0eF9QSU5fU0hJRlQpOwogCiAJLyogV3JpdGUgdXBwZXIgd2F0ZXJtYXJrIHRvIHNhdmUgbG9jYXRpb24gKi8KIAl0bGJfNDR4X2h3YXRlciA9IFBQQzQ0eF9MT1dfU0xPVCAtIHBpbm5lZF90bGJzOwpAQCAtMTExLDcgKzExMSw3IEBACiAJLyogSWYgbmVjZXNzYXJ5LCBzZXQgYWRkaXRpb25hbCBwaW5uZWQgVExCcyAqLwogCWlmIChwaW5uZWRfdGxicyA+IDEpCiAJCWZvciAoaSA9IChQUEM0NHhfTE9XX1NMT1QtKHBpbm5lZF90bGJzLTEpKTsgaSA8IFBQQzQ0eF9MT1dfU0xPVDsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBpbnQgcGh5c19hZGRyID0gKFBQQzQ0eF9MT1dfU0xPVC1pKSAqIFBQQzQ0eF9QSU5fU0laRTsKKwkJCXVuc2lnbmVkIGludCBwaHlzX2FkZHIgPSAoUFBDNDR4X0xPV19TTE9ULWkpICogUFBDX1BJTl9TSVpFOwogCQkJcHBjNDR4X3Bpbl90bGIoaSwgcGh5c19hZGRyK1BBR0VfT0ZGU0VULCBwaHlzX2FkZHIpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9odWdldGxicGFnZS5jIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMjY2YjhiMi4uNTYxNWFjYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2h1Z2V0bGJwYWdlLmMKQEAgLTE1Myw3ICsxNTMsNyBAQAogCWhwZHAtPnBkID0gMDsKIAl0bGItPm5lZWRfZmx1c2ggPSAxOwogCXBndGFibGVfZnJlZV90bGIodGxiLCBwZ3RhYmxlX2ZyZWVfY2FjaGUoaHVnZXB0ZSwgSFVHRVBURV9DQUNIRV9OVU0sCi0JCQkJCQkgSFVHRVBURV9UQUJMRV9TSVpFLTEpKTsKKwkJCQkJCSBQR0ZfQ0FDSEVOVU1fTUFTSykpOwogfQogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9sbWIuYyBiL2FyY2gvcG93ZXJwYy9tbS9sbWIuYwppbmRleCA0YjE3YTczLi43MTZhMjkwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbG1iLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2xtYi5jCkBAIC0zMjAsNyArMzIwLDggQEAKIAkJYnJlYWs7CiAJfQogCi0JbG1iLnJtb19zaXplID0gbG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZTsKKwlpZiAobG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZSA8IGxtYi5ybW9fc2l6ZSkKKwkJbG1iLnJtb19zaXplID0gbG1iLm1lbW9yeS5yZWdpb25bMF0uc2l6ZTsKIAogCS8qIEFuZCB0cnVuY2F0ZSBhbnkgcmVzZXJ2ZXMgYWJvdmUgdGhlIGxpbWl0IGFsc28uICovCiAJZm9yIChpID0gMDsgaSA8IGxtYi5yZXNlcnZlZC5jbnQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggZmJlMjM5My4uNmMwZjFjNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xNTksMTIgKzE1OSwxMiBAQAogewogCXVuc2lnbmVkIGludCBod19jcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgKmludGVycnVwdF9zZXJ2ZXIsICpyZWc7CisJY29uc3QgdW5zaWduZWQgaW50ICppbnRlcnJ1cHRfc2VydmVyLCAqcmVnOwogCWludCBsZW47CiAKIAl3aGlsZSAoKGNwdV9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoY3B1X25vZGUsICJjcHUiKSkgIT0gTlVMTCkgewogCQkvKiBUcnkgaW50ZXJydXB0IHNlcnZlciBmaXJzdCAqLwotCQlpbnRlcnJ1cHRfc2VydmVyID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShjcHVfbm9kZSwKKwkJaW50ZXJydXB0X3NlcnZlciA9IGdldF9wcm9wZXJ0eShjcHVfbm9kZSwKIAkJCQkJImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7CiAKIAkJbGVuID0gbGVuIC8gc2l6ZW9mKHUzMik7CkBAIC0xNzUsOCArMTc1LDcgQEAKIAkJCQkJcmV0dXJuIGNwdV9ub2RlOwogCQkJfQogCQl9IGVsc2UgewotCQkJcmVnID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShjcHVfbm9kZSwKLQkJCQkJCQkgICAicmVnIiwgJmxlbik7CisJCQlyZWcgPSBnZXRfcHJvcGVydHkoY3B1X25vZGUsICJyZWciLCAmbGVuKTsKIAkJCWlmIChyZWcgJiYgKGxlbiA+IDApICYmIChyZWdbMF0gPT0gaHdfY3B1aWQpKQogCQkJCXJldHVybiBjcHVfbm9kZTsKIAkJfQpAQCAtMTg2LDkgKzE4NSw5IEBACiB9CiAKIC8qIG11c3QgaG9sZCByZWZlcmVuY2UgdG8gbm9kZSBkdXJpbmcgY2FsbCAqLwotc3RhdGljIGludCAqb2ZfZ2V0X2Fzc29jaWF0aXZpdHkoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCitzdGF0aWMgY29uc3QgaW50ICpvZl9nZXRfYXNzb2NpYXRpdml0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKLQlyZXR1cm4gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShkZXYsICJpYm0sYXNzb2NpYXRpdml0eSIsIE5VTEwpOworCXJldHVybiBnZXRfcHJvcGVydHkoZGV2LCAiaWJtLGFzc29jaWF0aXZpdHkiLCBOVUxMKTsKIH0KIAogLyogUmV0dXJucyBuaWQgaW4gdGhlIHJhbmdlIFswLi5NQVhfTlVNTk9ERVMtMV0sIG9yIC0xIGlmIG5vIHVzZWZ1bCBudW1hCkBAIC0xOTcsNyArMTk2LDcgQEAKIHN0YXRpYyBpbnQgb2Zfbm9kZV90b19uaWRfc2luZ2xlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlKQogewogCWludCBuaWQgPSAtMTsKLQl1bnNpZ25lZCBpbnQgKnRtcDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnRtcDsKIAogCWlmIChtaW5fY29tbW9uX2RlcHRoID09IC0xKQogCQlnb3RvIG91dDsKQEAgLTI1NSw3ICsyNTQsNyBAQAogc3RhdGljIGludCBfX2luaXQgZmluZF9taW5fY29tbW9uX2RlcHRoKHZvaWQpCiB7CiAJaW50IGRlcHRoOwotCXVuc2lnbmVkIGludCAqcmVmX3BvaW50czsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnJlZl9wb2ludHM7CiAJc3RydWN0IGRldmljZV9ub2RlICpydGFzX3Jvb3Q7CiAJdW5zaWduZWQgaW50IGxlbjsKIApAQCAtMjcwLDcgKzI2OSw3IEBACiAJICogY29uZmlndXJhdGlvbiAoc2hvdWxkIGJlIGFsbCAwJ3MpIGFuZCB0aGUgc2Vjb25kIGlzIGZvciBhIG5vcm1hbAogCSAqIE5VTUEgY29uZmlndXJhdGlvbi4KIAkgKi8KLQlyZWZfcG9pbnRzID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShydGFzX3Jvb3QsCisJcmVmX3BvaW50cyA9IGdldF9wcm9wZXJ0eShydGFzX3Jvb3QsCiAJCQkiaWJtLGFzc29jaWF0aXZpdHktcmVmZXJlbmNlLXBvaW50cyIsICZsZW4pOwogCiAJaWYgKChsZW4gPj0gMSkgJiYgcmVmX3BvaW50cykgewpAQCAtMjk3LDcgKzI5Niw3IEBACiAJb2Zfbm9kZV9wdXQobWVtb3J5KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19kZXZpbml0IHJlYWRfbl9jZWxscyhpbnQgbiwgdW5zaWduZWQgaW50ICoqYnVmKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19kZXZpbml0IHJlYWRfbl9jZWxscyhpbnQgbiwgY29uc3QgdW5zaWduZWQgaW50ICoqYnVmKQogewogCXVuc2lnbmVkIGxvbmcgcmVzdWx0ID0gMDsKIApAQCAtNDM1LDE1ICs0MzQsMTMgQEAKIAkJdW5zaWduZWQgbG9uZyBzaXplOwogCQlpbnQgbmlkOwogCQlpbnQgcmFuZ2VzOwotCQl1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOworCQljb25zdCB1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOwogCQl1bnNpZ25lZCBpbnQgbGVuOwogCi0JCW1lbWNlbGxfYnVmID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksCisJCW1lbWNlbGxfYnVmID0gZ2V0X3Byb3BlcnR5KG1lbW9yeSwKIAkJCSJsaW51eCx1c2FibGUtbWVtb3J5IiwgJmxlbik7CiAJCWlmICghbWVtY2VsbF9idWYgfHwgbGVuIDw9IDApCi0JCQltZW1jZWxsX2J1ZiA9Ci0JCQkJKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksICJyZWciLAotCQkJCQkmbGVuKTsKKwkJCW1lbWNlbGxfYnVmID0gZ2V0X3Byb3BlcnR5KG1lbW9yeSwgInJlZyIsICZsZW4pOwogCQlpZiAoIW1lbWNlbGxfYnVmIHx8IGxlbiA8PSAwKQogCQkJY29udGludWU7CiAKQEAgLTc4NywxMCArNzg0LDEwIEBACiAJd2hpbGUgKChtZW1vcnkgPSBvZl9maW5kX25vZGVfYnlfdHlwZShtZW1vcnksICJtZW1vcnkiKSkgIT0gTlVMTCkgewogCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBzaXplOwogCQlpbnQgcmFuZ2VzOwotCQl1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOworCQljb25zdCB1bnNpZ25lZCBpbnQgKm1lbWNlbGxfYnVmOwogCQl1bnNpZ25lZCBpbnQgbGVuOwogCi0JCW1lbWNlbGxfYnVmID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShtZW1vcnksICJyZWciLCAmbGVuKTsKKwkJbWVtY2VsbF9idWYgPSBnZXRfcHJvcGVydHkobWVtb3J5LCAicmVnIiwgJmxlbik7CiAJCWlmICghbWVtY2VsbF9idWYgfHwgbGVuIDw9IDApCiAJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3NsYi5jIGIvYXJjaC9wb3dlcnBjL21tL3NsYi5jCmluZGV4IGRlMGM4ODQuLmQzNzMzOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9zbGIuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vc2xiLmMKQEAgLTIyLDYgKzIyLDggQEAKICNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAKICNpZmRlZiBERUJVRwogI2RlZmluZSBEQkcoZm10Li4uKSB1ZGJnX3ByaW50ZihmbXQpCkBAIC01MCw5ICs1MiwzMiBAQAogCXJldHVybiAoZ2V0X2tlcm5lbF92c2lkKGVhKSA8PCBTTEJfVlNJRF9TSElGVCkgfCBmbGFnczsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9zbGJlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbnRyeSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzbGJfc2hhZG93X3VwZGF0ZSh1bnNpZ25lZCBsb25nIGVzaWQsIHVuc2lnbmVkIGxvbmcgdnNpZCwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW50cnkpCiB7CisJLyoKKwkgKiBDbGVhciB0aGUgRVNJRCBmaXJzdCBzbyB0aGUgZW50cnkgaXMgbm90IHZhbGlkIHdoaWxlIHdlIGFyZQorCSAqIHVwZGF0aW5nIGl0LgorCSAqLworCWdldF9zbGJfc2hhZG93KCktPnNhdmVfYXJlYVtlbnRyeV0uZXNpZCA9IDA7CisJYmFycmllcigpOworCWdldF9zbGJfc2hhZG93KCktPnNhdmVfYXJlYVtlbnRyeV0udnNpZCA9IHZzaWQ7CisJYmFycmllcigpOworCWdldF9zbGJfc2hhZG93KCktPnNhdmVfYXJlYVtlbnRyeV0uZXNpZCA9IGVzaWQ7CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZV9zaGFkb3dlZF9zbGJlKHVuc2lnbmVkIGxvbmcgZWEsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCQkJCXVuc2lnbmVkIGxvbmcgZW50cnkpCit7CisJLyoKKwkgKiBVcGRhdGluZyB0aGUgc2hhZG93IGJ1ZmZlciBiZWZvcmUgd3JpdGluZyB0aGUgU0xCIGVuc3VyZXMKKwkgKiB3ZSBkb24ndCBnZXQgYSBzdGFsZSBlbnRyeSBoZXJlIGlmIHdlIGdldCBwcmVlbXB0ZWQgYnkgUEhZUAorCSAqIGJldHdlZW4gdGhlc2UgdHdvIHN0YXRlbWVudHMuCisJICovCisJc2xiX3NoYWRvd191cGRhdGUobWtfZXNpZF9kYXRhKGVhLCBlbnRyeSksIG1rX3ZzaWRfZGF0YShlYSwgZmxhZ3MpLAorCQkJICBlbnRyeSk7CisKIAlhc20gdm9sYXRpbGUoInNsYm10ZSAgJTAsJTEiIDoKIAkJICAgICA6ICJyIiAobWtfdnNpZF9kYXRhKGVhLCBmbGFncykpLAogCQkgICAgICAgInIiIChta19lc2lkX2RhdGEoZWEsIGVudHJ5KSkKQEAgLTc3LDYgKzEwMiwxMCBAQAogCWlmICgoa3NwX2VzaWRfZGF0YSAmIEVTSURfTUFTSykgPT0gUEFHRV9PRkZTRVQpCiAJCWtzcF9lc2lkX2RhdGEgJj0gflNMQl9FU0lEX1Y7CiAKKwkvKiBPbmx5IHRoaXJkIGVudHJ5IChzdGFjaykgbWF5IGNoYW5nZSBoZXJlIHNvIG9ubHkgcmVzYXZlIHRoYXQgKi8KKwlzbGJfc2hhZG93X3VwZGF0ZShrc3BfZXNpZF9kYXRhLAorCQkJICBta192c2lkX2RhdGEoa3NwX2VzaWRfZGF0YSwgbGZsYWdzKSwgMik7CisKIAkvKiBXZSBuZWVkIHRvIGRvIHRoaXMgYWxsIGluIGFzbSwgc28gd2UncmUgc3VyZSB3ZSBkb24ndCB0b3VjaAogCSAqIHRoZSBzdGFjayBiZXR3ZWVuIHRoZSBzbGJpYSBhbmQgcmVib2x0aW5nIGl0LiAqLwogCWFzbSB2b2xhdGlsZSgiaXN5bmNcbiIKQEAgLTIwOSw5ICsyMzgsOSBAQAogCWFzbSB2b2xhdGlsZSgiaXN5bmMiOjo6Im1lbW9yeSIpOwogCWFzbSB2b2xhdGlsZSgic2xibXRlICAlMCwlMCI6OiJyIiAoMCkgOiAibWVtb3J5Iik7CiAJYXNtIHZvbGF0aWxlKCJpc3luYzsgc2xiaWE7IGlzeW5jIjo6OiJtZW1vcnkiKTsKLQljcmVhdGVfc2xiZShQQUdFX09GRlNFVCwgbGZsYWdzLCAwKTsKKwljcmVhdGVfc2hhZG93ZWRfc2xiZShQQUdFX09GRlNFVCwgbGZsYWdzLCAwKTsKIAotCWNyZWF0ZV9zbGJlKFZNQUxMT0NfU1RBUlQsIHZmbGFncywgMSk7CisJY3JlYXRlX3NoYWRvd2VkX3NsYmUoVk1BTExPQ19TVEFSVCwgdmZsYWdzLCAxKTsKIAogCS8qIFdlIGRvbid0IGJvbHQgdGhlIHN0YWNrIGZvciB0aGUgdGltZSBiZWluZyAtIHdlJ3JlIGluIGJvb3QsCiAJICogc28gdGhlIHN0YWNrIGlzIGluIHRoZSBib2x0ZWQgc2VnbWVudC4gIEJ5IHRoZSB0aW1lIGl0IGdvZXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYwppbmRleCBmNmVlZjc4ZS4uYjU4YmFhNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3RsYl82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfNjQuYwpAQCAtMTQ2LDYgKzE0Niw3IEBACiAJCXBzaXplID0gbW11X2h1Z2VfcHNpemU7CiAjZWxzZQogCQlCVUcoKTsKKwkJcHNpemUgPSBwdGVfcGFnZXNpemVfaW5kZXgocHRlKTsgLyogc2h1dHVwIGdjYyAqLwogI2VuZGlmCiAJfSBlbHNlCiAJCXBzaXplID0gcHRlX3BhZ2VzaXplX2luZGV4KHB0ZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X2l0eC5jCmluZGV4IGI0NjMwNTYuLjk2OWZiYjZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYwpAQCAtNDYsMjYgKzQ2LDYgQEAKIHVuc2lnbmVkIGxvbmcgaXNhX21lbV9iYXNlID0gMDsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIGludAotbXBjODN4eF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgaWRzZWwsIHVuc2lnbmVkIGNoYXIgcGluKQotewotCXN0YXRpYyBjaGFyIHBjaV9pcnFfdGFibGVbXVs0XSA9Ci0JICAgIC8qCi0JICAgICAqICAgICAgUENJIElEU0VML0lOVFBJTi0+SU5UTElORQotCSAgICAgKiAgICAgICBBICAgICAgQiAgICAgIEMgICAgICBECi0JICAgICAqLwotCXsKLQkJe1BJUlFCLCBQSVJRQywgUElSUUQsIFBJUlFBfSwJLyogaWRzZWwgMHgwZSAqLwotCQl7UElSUUEsIFBJUlFCLCBQSVJRQywgUElSUUR9LAkvKiBpZHNlbCAweDBmICovCi0JCXtQSVJRQywgUElSUUQsIFBJUlFBLCBQSVJRQn0sCS8qIGlkc2VsIDB4MTAgKi8KLQl9OwotCi0JY29uc3QgbG9uZyBtaW5faWRzZWwgPSAweDBlLCBtYXhfaWRzZWwgPSAweDEwLCBpcnFzX3Blcl9zbG90ID0gNDsKLQlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVA7Ci19Ci0jZW5kaWYJCQkJLyogQ09ORklHX1BDSSAqLwotCiAvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCkBAIC04MCw4ICs2MCw4IEBACiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKIAlpZiAobnAgIT0gMCkgewotCQl1bnNpZ25lZCBpbnQgKmZwID0KLQkJICAgIChpbnQgKilnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwkJY29uc3QgdW5zaWduZWQgaW50ICpmcCA9CisJCQlnZXRfcHJvcGVydHkobnAsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKIAkJaWYgKGZwICE9IDApCiAJCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKIAkJZWxzZQpAQCAtOTIsOCArNzIsNiBAQAogCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgInBjaSIpKSAhPSBOVUxMOykKIAkJYWRkX2JyaWRnZShucCk7CiAKLQlwcGNfbWQucGNpX3N3aXp6bGUgPSBjb21tb25fc3dpenpsZTsKLQlwcGNfbWQucGNpX21hcF9pcnEgPSBtcGM4M3h4X21hcF9pcnE7CiAJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG1wYzgzeHhfZXhjbHVkZV9kZXZpY2U7CiAjZW5kaWYKIApAQCAtMTA2LDI1ICs4NCwxMyBAQAogCiB2b2lkIF9faW5pdCBtcGM4MzR4X2l0eF9pbml0X0lSUSh2b2lkKQogewotCXU4IHNlbnNlc1s4XSA9IHsKLQkJMCwJCQkvKiBFWFQgMCAqLwotCQlJUlFfU0VOU0VfTEVWRUwsCS8qIEVYVCAxICovCi0JCUlSUV9TRU5TRV9MRVZFTCwJLyogRVhUIDIgKi8KLQkJMCwJCQkvKiBFWFQgMyAqLwotI2lmZGVmIENPTkZJR19QQ0kKLQkJSVJRX1NFTlNFX0xFVkVMLAkvKiBFWFQgNCAqLwotCQlJUlFfU0VOU0VfTEVWRUwsCS8qIEVYVCA1ICovCi0JCUlSUV9TRU5TRV9MRVZFTCwJLyogRVhUIDYgKi8KLQkJSVJRX1NFTlNFX0xFVkVMLAkvKiBFWFQgNyAqLwotI2Vsc2UKLQkJMCwJCQkvKiBFWFQgNCAqLwotCQkwLAkJCS8qIEVYVCA1ICovCi0JCTAsCQkJLyogRVhUIDYgKi8KLQkJMCwJCQkvKiBFWFQgNyAqLwotI2VuZGlmCi0JfTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCi0JaXBpY19pbml0KGdldF9pbW1yYmFzZSgpICsgMHgwMDcwMCwgMCwgMCwgc2Vuc2VzLCA4KTsKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJpcGljIik7CisJaWYgKCFucCkKKwkJcmV0dXJuOworCisJaXBpY19pbml0KG5wLCAwKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgaW50ZXJydXB0IG1hcHBpbmcgcHJpb3JpdGllcywKIAkgKiBpbiBjYXNlIHRoZSBib290IHJvbSBjaGFuZ2VkIHNvbWV0aGluZyBvbiB1cy4KQEAgLTE1Myw0ICsxMTksNyBAQAogCS50aW1lX2luaXQJCT0gbXBjODN4eF90aW1lX2luaXQsCiAJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCiAJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCisjaWZkZWYgQ09ORklHX1BDSQorCS5wY2liaW9zX2ZpeHVwCQk9IG1wYzgzeHhfcGNpYmlvc19maXh1cCwKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X3N5cy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKaW5kZXggM2UxYzE2ZS4uNjc3MTk2MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfc3lzLmMKQEAgLTQzLDMzICs0Myw2IEBACiB1bnNpZ25lZCBsb25nIGlzYV9tZW1fYmFzZSA9IDA7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QQ0kKLXN0YXRpYyBpbnQKLW1wYzgzeHhfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyIGlkc2VsLCB1bnNpZ25lZCBjaGFyIHBpbikKLXsKLQlzdGF0aWMgY2hhciBwY2lfaXJxX3RhYmxlW11bNF0gPQotCSAgICAvKgotCSAgICAgKiAgICAgIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKLQkgICAgICogICAgICAgQSAgICAgIEIgICAgICBDICAgICAgRAotCSAgICAgKi8KLQl7Ci0JCXtQSVJRQSwgUElSUUIsIFBJUlFDLCBQSVJRRH0sCS8qIGlkc2VsIDB4MTEgKi8KLQkJe1BJUlFDLCBQSVJRRCwgUElSUUEsIFBJUlFCfSwJLyogaWRzZWwgMHgxMiAqLwotCQl7UElSUUQsIFBJUlFBLCBQSVJRQiwgUElSUUN9LAkvKiBpZHNlbCAweDEzICovCi0JCXswLCAwLCAwLCAwfSwKLQkJe1BJUlFBLCBQSVJRQiwgUElSUUMsIFBJUlFEfSwJLyogaWRzZWwgMHgxNSAqLwotCQl7UElSUUQsIFBJUlFBLCBQSVJRQiwgUElSUUN9LAkvKiBpZHNlbCAweDE2ICovCi0JCXtQSVJRQywgUElSUUQsIFBJUlFBLCBQSVJRQn0sCS8qIGlkc2VsIDB4MTcgKi8KLQkJe1BJUlFCLCBQSVJRQywgUElSUUQsIFBJUlFBfSwJLyogaWRzZWwgMHgxOCAqLwotCQl7MCwgMCwgMCwgMH0sCQkJLyogaWRzZWwgMHgxOSAqLwotCQl7MCwgMCwgMCwgMH0sCQkJLyogaWRzZWwgMHgyMCAqLwotCX07Ci0KLQljb25zdCBsb25nIG1pbl9pZHNlbCA9IDB4MTEsIG1heF9pZHNlbCA9IDB4MjAsIGlycXNfcGVyX3Nsb3QgPSA0OwotCXJldHVybiBQQ0lfSVJRX1RBQkxFX0xPT0tVUDsKLX0KLSNlbmRpZgkJCQkvKiBDT05GSUdfUENJICovCi0KIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKQEAgLTg0LDggKzU3LDggQEAKIAogCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOwogCWlmIChucCAhPSAwKSB7Ci0JCXVuc2lnbmVkIGludCAqZnAgPQotCQkgICAgKGludCAqKWdldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCQljb25zdCB1bnNpZ25lZCBpbnQgKmZwID0KKwkJCWdldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCQlpZiAoZnAgIT0gMCkKIAkJCWxvb3BzX3Blcl9qaWZmeSA9ICpmcCAvIEhaOwogCQllbHNlCkBAIC05Niw4ICs2OSw2IEBACiAJZm9yIChucCA9IE5VTEw7IChucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG5wLCAicGNpIikpICE9IE5VTEw7KQogCQlhZGRfYnJpZGdlKG5wKTsKIAotCXBwY19tZC5wY2lfc3dpenpsZSA9IGNvbW1vbl9zd2l6emxlOwotCXBwY19tZC5wY2lfbWFwX2lycSA9IG1wYzgzeHhfbWFwX2lycTsKIAlwcGNfbWQucGNpX2V4Y2x1ZGVfZGV2aWNlID0gbXBjODN4eF9leGNsdWRlX2RldmljZTsKICNlbmRpZgogCkBAIC0xMTAsMjUgKzgxLDEzIEBACiAKIHZvaWQgX19pbml0IG1wYzgzNHhfc3lzX2luaXRfSVJRKHZvaWQpCiB7Ci0JdTggc2Vuc2VzWzhdID0gewotCQkwLAkJCS8qIEVYVCAwICovCi0JCUlSUV9TRU5TRV9MRVZFTCwJLyogRVhUIDEgKi8KLQkJSVJRX1NFTlNFX0xFVkVMLAkvKiBFWFQgMiAqLwotCQkwLAkJCS8qIEVYVCAzICovCi0jaWZkZWYgQ09ORklHX1BDSQotCQlJUlFfU0VOU0VfTEVWRUwsCS8qIEVYVCA0ICovCi0JCUlSUV9TRU5TRV9MRVZFTCwJLyogRVhUIDUgKi8KLQkJSVJRX1NFTlNFX0xFVkVMLAkvKiBFWFQgNiAqLwotCQlJUlFfU0VOU0VfTEVWRUwsCS8qIEVYVCA3ICovCi0jZWxzZQotCQkwLAkJCS8qIEVYVCA0ICovCi0JCTAsCQkJLyogRVhUIDUgKi8KLQkJMCwJCQkvKiBFWFQgNiAqLwotCQkwLAkJCS8qIEVYVCA3ICovCi0jZW5kaWYKLQl9OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CiAKLQlpcGljX2luaXQoZ2V0X2ltbXJiYXNlKCkgKyAweDAwNzAwLCAwLCAwLCBzZW5zZXMsIDgpOworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImlwaWMiKTsKKwlpZiAoIW5wKQorCQlyZXR1cm47CisKKwlpcGljX2luaXQobnAsIDApOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGVmYXVsdCBpbnRlcnJ1cHQgbWFwcGluZyBwcmlvcml0aWVzLAogCSAqIGluIGNhc2UgdGhlIGJvb3Qgcm9tIGNoYW5nZWQgc29tZXRoaW5nIG9uIHVzLgpAQCAtMTc4LDQgKzEzNyw3IEBACiAJLnRpbWVfaW5pdAkJPSBtcGM4M3h4X3RpbWVfaW5pdCwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXAJCT0gbXBjODN4eF9wY2liaW9zX2ZpeHVwLAorI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4M3h4LmgKaW5kZXggMDFjYWUxMC4uMmM4MmJjYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzeHguaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODN4eC5oCkBAIC0xMSw2ICsxMSw3IEBACiAKIGV4dGVybiBpbnQgYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldik7CiBleHRlcm4gaW50IG1wYzgzeHhfZXhjbHVkZV9kZXZpY2UodV9jaGFyIGJ1cywgdV9jaGFyIGRldmZuKTsKK2V4dGVybiB2b2lkIG1wYzgzeHhfcGNpYmlvc19maXh1cCh2b2lkKTsKIGV4dGVybiB2b2lkIG1wYzgzeHhfcmVzdGFydChjaGFyICpjbWQpOwogZXh0ZXJuIGxvbmcgbXBjODN4eF90aW1lX2luaXQodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9wY2kuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9wY2kuYwppbmRleCAzYjVlNTYzLi40NTU3YWM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3BjaS5jCkBAIC00NSwxMiArNDUsMjEgQEAKIAlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwogfQogCit2b2lkIF9faW5pdCBtcGM4M3h4X3BjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKworCS8qIG1hcCBhbGwgdGhlIFBDSSBpcnFzICovCisJZm9yX2VhY2hfcGNpX2RldihkZXYpCisJCXBjaV9yZWFkX2lycV9saW5lKGRldik7Cit9CisKIGludCBfX2luaXQgYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlpbnQgbGVuOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKLQlpbnQgKmJ1c19yYW5nZTsKKwljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAlpbnQgcHJpbWFyeSA9IDEsIGhhc19hZGRyZXNzID0gMDsKIAlwaHlzX2FkZHJfdCBpbW1yID0gZ2V0X2ltbXJiYXNlKCk7CiAKQEAgLTYwLDcgKzY5LDcgQEAKIAloYXNfYWRkcmVzcyA9IChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnJzcmMpID09IDApOwogCiAJLyogR2V0IGJ1cyByYW5nZSBpZiBhbnkgKi8KLQlidXNfcmFuZ2UgPSAoaW50ICopZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCWJ1c19yYW5nZSA9IGdldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKIAlpZiAoYnVzX3JhbmdlID09IE5VTEwgfHwgbGVuIDwgMiAqIHNpemVvZihpbnQpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yICVzLCBhc3N1bWUiCiAJCSAgICAgICAiIGJ1cyAwXG4iLCBkZXYtPmZ1bGxfbmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCmluZGV4IDQ1NGZjNTMuLmMzMjY4ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnCkBAIC0xNCw3ICsxNCw2IEBACiBjb25maWcgTVBDODV4eF9DRFMKIAlib29sICJGcmVlc2NhbGUgTVBDODV4eCBDRFMiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCi0Jc2VsZWN0IFBQQ19JODI1OSBpZiBQQ0kKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NXh4IENEUyBib2FyZAogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCmluZGV4IDA2YTQ5NzYuLmNhZTZiNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCkBAIC0zNyw3OSArMzcsNyBAQAogdW5zaWduZWQgbG9uZyBpc2FfbWVtX2Jhc2UgPSAwOwogI2VuZGlmCiAKLS8qCi0gKiBJbnRlcm5hbCBpbnRlcnJ1cHRzIGFyZSBhbGwgTGV2ZWwgU2Vuc2l0aXZlLCBhbmQgUG9zaXRpdmUgUG9sYXJpdHkKLSAqCi0gKiBOb3RlOiAgTGlrZWx5LCB0aGlzIHRhYmxlIGFuZCB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uIHNob3VsZCBiZQotICogICAgICAgIG9idGFpbmVkIGFuZCBkZXJpdmVkIGZyb20gdGhlIE9GIERldmljZSBUcmVlLgotICovCi1zdGF0aWMgdV9jaGFyIG1wYzg1eHhfYWRzX29wZW5waWNfaW5pdHNlbnNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JTVBDODVYWF9JTlRFUk5BTF9JUlFfU0VOU0VTLAotCTB4MCwJCQkvKiBFeHRlcm5hbCAgMDogKi8KLSNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dCAxOiBQQ0kgc2xvdCAwICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dCAyOiBQQ0kgc2xvdCAxICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dCAzOiBQQ0kgc2xvdCAyICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dCA0OiBQQ0kgc2xvdCAzICovCi0jZWxzZQotCTB4MCwJCQkvKiBFeHRlcm5hbCAgMTogKi8KLQkweDAsCQkJLyogRXh0ZXJuYWwgIDI6ICovCi0JMHgwLAkJCS8qIEV4dGVybmFsICAzOiAqLwotCTB4MCwJCQkvKiBFeHRlcm5hbCAgNDogKi8KLSNlbmRpZgotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHRlcm5hbCA1OiBQSFkgKi8KLQkweDAsCQkJLyogRXh0ZXJuYWwgIDY6ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dGVybmFsIDc6IFBIWSAqLwotCTB4MCwJCQkvKiBFeHRlcm5hbCAgODogKi8KLQkweDAsCQkJLyogRXh0ZXJuYWwgIDk6ICovCi0JMHgwLAkJCS8qIEV4dGVybmFsIDEwOiAqLwotCTB4MCwJCQkvKiBFeHRlcm5hbCAxMTogKi8KLX07Ci0KICNpZmRlZiBDT05GSUdfUENJCi0vKgotICogaW50ZXJydXB0IHJvdXRpbmcKLSAqLwotCi1pbnQKLW1wYzg1eHhfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBjaGFyIGlkc2VsLCB1bnNpZ25lZCBjaGFyIHBpbikKLXsKLQlzdGF0aWMgY2hhciBwY2lfaXJxX3RhYmxlW11bNF0gPQotCSAgICAvKgotCSAgICAgKiBUaGlzIGlzIGxpdHRsZSBldmlsLCBidXQgd29ya3MgYXJvdW5kIHRoZSBmYWN0Ci0JICAgICAqIHRoYXQgcmV2QSBib2FyZHMgaGF2ZSBJRFNFTCBzdGFydGluZyBhdCAxOAotCSAgICAgKiBhbmQgb3RoZXJzIGJvYXJkcyAob2xkZXIpIHN0YXJ0IGF0IDEyCi0JICAgICAqCi0JICAgICAqICAgICAgUENJIElEU0VML0lOVFBJTi0+SU5UTElORQotCSAgICAgKiAgICAgICBBICAgICAgQiAgICAgIEMgICAgICBECi0JICAgICAqLwotCXsKLQkJe1BJUlFBLCBQSVJRQiwgUElSUUMsIFBJUlFEfSwJLyogSURTRUwgMiAqLwotCQl7UElSUUQsIFBJUlFBLCBQSVJRQiwgUElSUUN9LAotCQl7UElSUUMsIFBJUlFELCBQSVJRQSwgUElSUUJ9LAotCQl7UElSUUIsIFBJUlFDLCBQSVJRRCwgUElSUUF9LAkvKiBJRFNFTCA1ICovCi0JCXswLCAwLCAwLCAwfSwJLyogLS0gKi8KLQkJezAsIDAsIDAsIDB9LAkvKiAtLSAqLwotCQl7MCwgMCwgMCwgMH0sCS8qIC0tICovCi0JCXswLCAwLCAwLCAwfSwJLyogLS0gKi8KLQkJezAsIDAsIDAsIDB9LAkvKiAtLSAqLwotCQl7MCwgMCwgMCwgMH0sCS8qIC0tICovCi0JCXtQSVJRQSwgUElSUUIsIFBJUlFDLCBQSVJRRH0sCS8qIElEU0VMIDEyICovCi0JCXtQSVJRRCwgUElSUUEsIFBJUlFCLCBQSVJRQ30sCi0JCXtQSVJRQywgUElSUUQsIFBJUlFBLCBQSVJRQn0sCi0JCXtQSVJRQiwgUElSUUMsIFBJUlFELCBQSVJRQX0sCS8qIElEU0VMIDE1ICovCi0JCXswLCAwLCAwLCAwfSwJLyogLS0gKi8KLQkJezAsIDAsIDAsIDB9LAkvKiAtLSAqLwotCQl7UElSUUEsIFBJUlFCLCBQSVJRQywgUElSUUR9LAkvKiBJRFNFTCAxOCAqLwotCQl7UElSUUQsIFBJUlFBLCBQSVJRQiwgUElSUUN9LAotCQl7UElSUUMsIFBJUlFELCBQSVJRQSwgUElSUUJ9LAotCQl7UElSUUIsIFBJUlFDLCBQSVJRRCwgUElSUUF9LAkvKiBJRFNFTCAyMSAqLwotCX07Ci0KLQljb25zdCBsb25nIG1pbl9pZHNlbCA9IDIsIG1heF9pZHNlbCA9IDIxLCBpcnFzX3Blcl9zbG90ID0gNDsKLQlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVA7Ci19Ci0KIGludAogbXBjODV4eF9leGNsdWRlX2RldmljZSh1X2NoYXIgYnVzLCB1X2NoYXIgZGV2Zm4pCiB7CkBAIC0xMTksNDQgKzQ3LDYzIEBACiAJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CiB9CiAKK3ZvaWQgX19pbml0CittcGM4NXh4X3BjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KQorCQlwY2lfcmVhZF9pcnFfbGluZShkZXYpOworfQogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogCiB2b2lkIF9faW5pdCBtcGM4NXh4X2Fkc19waWNfaW5pdCh2b2lkKQogewotCXN0cnVjdCBtcGljICptcGljMTsKLQlwaHlzX2FkZHJfdCBPcGVuUElDX1BBZGRyOworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOwogCi0JLyogRGV0ZXJtaW5lIHRoZSBQaHlzaWNhbCBBZGRyZXNzIG9mIHRoZSBPcGVuUElDIHJlZ3MgKi8KLQlPcGVuUElDX1BBZGRyID0gZ2V0X2ltbXJiYXNlKCkgKyBNUEM4NXh4X09QRU5QSUNfT0ZGU0VUOworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJvcGVuLXBpYyIpOwogCi0JbXBpYzEgPSBtcGljX2FsbG9jKE9wZW5QSUNfUEFkZHIsCi0JCQkgICBNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAotCQkJICAgNCwgTVBDODV4eF9PUEVOUElDX0lSUV9PRkZTRVQsIDAsIDI1MCwKLQkJCSAgIG1wYzg1eHhfYWRzX29wZW5waWNfaW5pdHNlbnNlcywKLQkJCSAgIHNpemVvZihtcGM4NXh4X2Fkc19vcGVucGljX2luaXRzZW5zZXMpLAotCQkJICAgIiBPcGVuUElDICAiKTsKLQlCVUdfT04obXBpYzEgPT0gTlVMTCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAwLCBPcGVuUElDX1BBZGRyICsgMHgxMDIwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAxLCBPcGVuUElDX1BBZGRyICsgMHgxMDI4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAyLCBPcGVuUElDX1BBZGRyICsgMHgxMDMwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAzLCBPcGVuUElDX1BBZGRyICsgMHgxMDM4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA0LCBPcGVuUElDX1BBZGRyICsgMHgxMDQwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA1LCBPcGVuUElDX1BBZGRyICsgMHgxMDQ4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA2LCBPcGVuUElDX1BBZGRyICsgMHgxMDUwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA3LCBPcGVuUElDX1BBZGRyICsgMHgxMDU4MCk7CisJaWYgKG5wID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBvcGVuLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KIAotCS8qIGR1bW15IG1hcHBpbmdzIHRvIGdldCB0byA0OCAqLwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgOCwgT3BlblBJQ19QQWRkciArIDB4MTA2MDApOwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgOSwgT3BlblBJQ19QQWRkciArIDB4MTA2ODApOwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgMTAsIE9wZW5QSUNfUEFkZHIgKyAweDEwNzAwKTsKLQltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDExLCBPcGVuUElDX1BBZGRyICsgMHgxMDc4MCk7CisJaWYob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQogCi0JLyogRXh0ZXJuYWwgaW50cyAqLwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgMTIsIE9wZW5QSUNfUEFkZHIgKyAweDEwMDAwKTsKLQltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDEzLCBPcGVuUElDX1BBZGRyICsgMHgxMDA4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAxNCwgT3BlblBJQ19QQWRkciArIDB4MTAxMDApOwotCW1waWNfaW5pdChtcGljMSk7CisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAorCQkJNCwgMCwgIiBPcGVuUElDICAiKTsKKwlCVUdfT04obXBpYyA9PSBOVUxMKTsKKwlvZl9ub2RlX3B1dChucCk7CisKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMCwgci5zdGFydCArIDB4MTAyMDApOworCW1waWNfYXNzaWduX2lzdShtcGljLCAxLCByLnN0YXJ0ICsgMHgxMDI4MCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDIsIHIuc3RhcnQgKyAweDEwMzAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMywgci5zdGFydCArIDB4MTAzODApOworCW1waWNfYXNzaWduX2lzdShtcGljLCA0LCByLnN0YXJ0ICsgMHgxMDQwMCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDUsIHIuc3RhcnQgKyAweDEwNDgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgNiwgci5zdGFydCArIDB4MTA1MDApOworCW1waWNfYXNzaWduX2lzdShtcGljLCA3LCByLnN0YXJ0ICsgMHgxMDU4MCk7CisKKwkvKiBVbnVzZWQgb24gdGhpcyBwbGF0Zm9ybSAobGVhdmUgcm9vbSBmb3IgODU0OCkgKi8KKwltcGljX2Fzc2lnbl9pc3UobXBpYywgOCwgci5zdGFydCArIDB4MTA2MDApOworCW1waWNfYXNzaWduX2lzdShtcGljLCA5LCByLnN0YXJ0ICsgMHgxMDY4MCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDEwLCByLnN0YXJ0ICsgMHgxMDcwMCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDExLCByLnN0YXJ0ICsgMHgxMDc4MCk7CisKKwkvKiBFeHRlcm5hbCBJbnRlcnJ1cHRzICovCisJbXBpY19hc3NpZ25faXN1KG1waWMsIDEyLCByLnN0YXJ0ICsgMHgxMDAwMCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDEzLCByLnN0YXJ0ICsgMHgxMDA4MCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDE0LCByLnN0YXJ0ICsgMHgxMDEwMCk7CisKKwltcGljX2luaXQobXBpYyk7CiB9CiAKIC8qCkBAIC0xNjUsMTYgKzExMiwxOCBAQAogc3RhdGljIHZvaWQgX19pbml0IG1wYzg1eHhfYWRzX3NldHVwX2FyY2godm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKKyNpZmRlZiBDT05GSUdfUENJCiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKKyNlbmRpZgogCiAJaWYgKHBwY19tZC5wcm9ncmVzcykKIAkJcHBjX21kLnByb2dyZXNzKCJtcGM4NXh4X2Fkc19zZXR1cF9hcmNoKCkiLCAwKTsKIAogCWNwdSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKIAlpZiAoY3B1ICE9IDApIHsKLQkJdW5zaWduZWQgaW50ICpmcDsKKwkJY29uc3QgdW5zaWduZWQgaW50ICpmcDsKIAotCQlmcCA9IChpbnQgKilnZXRfcHJvcGVydHkoY3B1LCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCWZwID0gZ2V0X3Byb3BlcnR5KGNwdSwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCQlpZiAoZnAgIT0gMCkKIAkJCWxvb3BzX3Blcl9qaWZmeSA9ICpmcCAvIEhaOwogCQllbHNlCkBAIC0xODYsOCArMTM1LDcgQEAKIAlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJwY2kiKSkgIT0gTlVMTDspCiAJCWFkZF9icmlkZ2UobnApOwogCi0JcHBjX21kLnBjaV9zd2l6emxlID0gY29tbW9uX3N3aXp6bGU7Ci0JcHBjX21kLnBjaV9tYXBfaXJxID0gbXBjODV4eF9tYXBfaXJxOworCXBwY19tZC5wY2liaW9zX2ZpeHVwID0gbXBjODV4eF9wY2liaW9zX2ZpeHVwOwogCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM4NXh4X2V4Y2x1ZGVfZGV2aWNlOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMKaW5kZXggMThlNmUxMS4uNGMxZmVkZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMKQEAgLTU3LDk0ICs1Nyw4IEBACiBzdGF0aWMgaW50IGNkc19wY2lfc2xvdCA9IDI7CiBzdGF0aWMgdm9sYXRpbGUgdTggKmNhZG11czsKIAotLyoKLSAqIEludGVybmFsIGludGVycnVwdHMgYXJlIGFsbCBMZXZlbCBTZW5zaXRpdmUsIGFuZCBQb3NpdGl2ZSBQb2xhcml0eQotICoKLSAqIE5vdGU6ICBMaWtlbHksIHRoaXMgdGFibGUgYW5kIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIGJlCi0gKiAgICAgICAgb2J0YWluZWQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgT0YgRGV2aWNlIFRyZWUuCi0gKi8KLXN0YXRpYyB1X2NoYXIgbXBjODV4eF9jZHNfb3BlbnBpY19pbml0c2Vuc2VzW10gX19pbml0ZGF0YSA9IHsKLQlNUEM4NVhYX0lOVEVSTkFMX0lSUV9TRU5TRVMsCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBFeHQgMDogUENJIHNsb3QgMCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHQgMTogUENJIHNsb3QgMSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHQgMjogUENJIHNsb3QgMiAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHQgMzogUENJIHNsb3QgMyAqLwotI2Vsc2UKLQkweDAsCQkJCS8qIEV4dGVybmFsICAwOiAqLwotCTB4MCwJCQkJLyogRXh0ZXJuYWwgIDE6ICovCi0JMHgwLAkJCQkvKiBFeHRlcm5hbCAgMjogKi8KLQkweDAsCQkJCS8qIEV4dGVybmFsICAzOiAqLwotI2VuZGlmCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dGVybmFsIDU6IFBIWSAqLwotCTB4MCwJCQkJLyogRXh0ZXJuYWwgIDY6ICovCi0JMHgwLAkJCQkvKiBFeHRlcm5hbCAgNzogKi8KLQkweDAsCQkJCS8qIEV4dGVybmFsICA4OiAqLwotCTB4MCwJCQkJLyogRXh0ZXJuYWwgIDk6ICovCi0JMHgwLAkJCQkvKiBFeHRlcm5hbCAxMDogKi8KLSNpZmRlZiBDT05GSUdfUENJCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksICAgIC8qIEV4dCAxMTogUENJMiBzbG90IDAgKi8KLSNlbHNlCi0JMHgwLAkJCQkvKiBFeHRlcm5hbCAxMTogKi8KLSNlbmRpZgotfTsKLQogCiAjaWZkZWYgQ09ORklHX1BDSQotLyoKLSAqIGludGVycnVwdCByb3V0aW5nCi0gKi8KLWludAotbXBjODV4eF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgaWRzZWwsIHVuc2lnbmVkIGNoYXIgcGluKQotewotCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBjaV9idXNfdG9faG9zZShkZXYtPmJ1cy0+bnVtYmVyKTsKLQotCWlmICghaG9zZS0+aW5kZXgpCi0JewotCQkvKiBIYW5kbGUgUENJMSBpbnRlcnJ1cHRzICovCi0JCWNoYXIgcGNpX2lycV90YWJsZVtdWzRdID0KLQkJCS8qCi0JCQkgKiAgICAgIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKLQkJCSAqICAgICAgICBBICAgICAgQiAgICAgIEMgICAgICBECi0JCQkgKi8KLQotCQkJLyogTm90ZSBJUlEgYXNzaWdubWVudCBmb3Igc2xvdHMgaXMgYmFzZWQgb24gd2hpY2ggc2xvdCB0aGUgZWx5c2l1bSBpcwotCQkJICogaW4gLS0gaW4gdGhpcyBzZXR1cCBlbHlzaXVtIGlzIGluIHNsb3QgIzIgKHRoaXMgUElSUUEgYXMgZmlyc3QKLQkJCSAqIGludGVycnVwdCBvbiBzbG90ICovCi0JCXsKLQkJCXsgMCwgMSwgMiwgMyB9LCAvKiAxNiAtIFBNQyAqLwotCQkJeyAwLCAxLCAyLCAzIH0sIC8qIDE3IFAyUCAoVHNpMzIwKSAqLwotCQkJeyAwLCAxLCAyLCAzIH0sIC8qIDE4IC0gU2xvdCAxICovCi0JCQl7IDEsIDIsIDMsIDAgfSwgLyogMTkgLSBTbG90IDIgKi8KLQkJCXsgMiwgMywgMCwgMSB9LCAvKiAyMCAtIFNsb3QgMyAqLwotCQkJeyAzLCAwLCAxLCAyIH0sIC8qIDIxIC0gU2xvdCA0ICovCi0JCX07Ci0KLQkJY29uc3QgbG9uZyBtaW5faWRzZWwgPSAxNiwgbWF4X2lkc2VsID0gMjEsIGlycXNfcGVyX3Nsb3QgPSA0OwotCQlpbnQgaSwgajsKLQotCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJZm9yIChqID0gMDsgaiA8IDQ7IGorKykKLQkJCQlwY2lfaXJxX3RhYmxlW2ldW2pdID0KLQkJCQkJKChwY2lfaXJxX3RhYmxlW2ldW2pdICsgNSAtCi0JCQkJCSAgY2RzX3BjaV9zbG90KSAmIDB4MykgKyBQSVJRMEE7Ci0KLQkJcmV0dXJuIFBDSV9JUlFfVEFCTEVfTE9PS1VQOwotCX0gZWxzZSB7Ci0JCS8qIEhhbmRsZSBQQ0kyIGludGVycnVwdHMgKGlmIHdlIGhhdmUgb25lKSAqLwotCQljaGFyIHBjaV9pcnFfdGFibGVbXVs0XSA9Ci0JCXsKLQkJCS8qCi0JCQkgKiBXZSBvbmx5IGhhdmUgb25lIHNsb3QgYW5kIG9uZSBpbnRlcnJ1cHQKLQkJCSAqIGdvaW5nIHRvIFBJUlFBIC0gUElSUUQgKi8KLQkJCXsgUElSUTFBLCBQSVJRMUEsIFBJUlExQSwgUElSUTFBIH0sIC8qIDIxIC0gc2xvdCAwICovCi0JCX07Ci0KLQkJY29uc3QgbG9uZyBtaW5faWRzZWwgPSAyMSwgbWF4X2lkc2VsID0gMjEsIGlycXNfcGVyX3Nsb3QgPSA0OwotCi0JCXJldHVybiBQQ0lfSVJRX1RBQkxFX0xPT0tVUDsKLQl9Ci19CiAKICNkZWZpbmUgQVJDQURJQV9IT1NUX0JSSURHRV9JRFNFTAkxNwogI2RlZmluZSBBUkNBRElBXzJORF9CUklER0VfSURTRUwJMwpAQCAtMjEwLDUwICsxMjQsMTA0IEBACiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgMTEpOwogCQlwY2lfZGV2X3B1dChkZXYpOwogCX0KKworCS8qIE5vdyBtYXAgYWxsIHRoZSBQQ0kgaXJxcyAqLworCWRldiA9IE5VTEw7CisJZm9yX2VhY2hfcGNpX2RldihkZXYpCisJCXBjaV9yZWFkX2lycV9saW5lKGRldik7CiB9CisKKyNpZmRlZiBDT05GSUdfUFBDX0k4MjU5Cisjd2FybmluZyBUaGUgaTgyNTkgUElDIHN1cHBvcnQgaXMgY3VycmVudGx5IGJyb2tlbgorc3RhdGljIHZvaWQgbXBjODV4eF84MjU5X2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0CisJCWlycV9kZXNjICpkZXNjLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnEgPSBpODI1OV9pcnEocmVncyk7CisKKwlpZiAoY2FzY2FkZV9pcnEgIT0gTk9fSVJRKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoY2FzY2FkZV9pcnEsIHJlZ3MpOworCisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7Cit9CisjZW5kaWYgLyogUFBDX0k4MjU5ICovCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiB2b2lkIF9faW5pdCBtcGM4NXh4X2Nkc19waWNfaW5pdCh2b2lkKQogewotCXN0cnVjdCBtcGljICptcGljMTsKLQlwaHlzX2FkZHJfdCBPcGVuUElDX1BBZGRyOworCXN0cnVjdCBtcGljICptcGljOworCXN0cnVjdCByZXNvdXJjZSByOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBOVUxMOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2FzY2FkZV9ub2RlID0gTlVMTDsKKwlpbnQgY2FzY2FkZV9pcnE7CiAKLQkvKiBEZXRlcm1pbmUgdGhlIFBoeXNpY2FsIEFkZHJlc3Mgb2YgdGhlIE9wZW5QSUMgcmVncyAqLwotCU9wZW5QSUNfUEFkZHIgPSBnZXRfaW1tcmJhc2UoKSArIE1QQzg1eHhfT1BFTlBJQ19PRkZTRVQ7CisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgIm9wZW4tcGljIik7CiAKLQltcGljMSA9IG1waWNfYWxsb2MoT3BlblBJQ19QQWRkciwKKwlpZiAobnAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG9wZW4tcGljIG5vZGVcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UobnAsIDAsICZyKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBtYXAgbXBpYyByZWdpc3RlciBzcGFjZVxuIik7CisJCW9mX25vZGVfcHV0KG5wKTsKKwkJcmV0dXJuOworCX0KKworCW1waWMgPSBtcGljX2FsbG9jKG5wLCByLnN0YXJ0LAogCQkJTVBJQ19QUklNQVJZIHwgTVBJQ19XQU5UU19SRVNFVCB8IE1QSUNfQklHX0VORElBTiwKLQkJCTQsIE1QQzg1eHhfT1BFTlBJQ19JUlFfT0ZGU0VULCAwLCAyNTAsCi0JCQltcGM4NXh4X2Nkc19vcGVucGljX2luaXRzZW5zZXMsCi0JCQlzaXplb2YobXBjODV4eF9jZHNfb3BlbnBpY19pbml0c2Vuc2VzKSwgIiBPcGVuUElDICAiKTsKLQlCVUdfT04obXBpYzEgPT0gTlVMTCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAwLCBPcGVuUElDX1BBZGRyICsgMHgxMDIwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAxLCBPcGVuUElDX1BBZGRyICsgMHgxMDI4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAyLCBPcGVuUElDX1BBZGRyICsgMHgxMDMwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAzLCBPcGVuUElDX1BBZGRyICsgMHgxMDM4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA0LCBPcGVuUElDX1BBZGRyICsgMHgxMDQwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA1LCBPcGVuUElDX1BBZGRyICsgMHgxMDQ4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA2LCBPcGVuUElDX1BBZGRyICsgMHgxMDUwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA3LCBPcGVuUElDX1BBZGRyICsgMHgxMDU4MCk7CisJCQk0LCAwLCAiIE9wZW5QSUMgICIpOworCUJVR19PTihtcGljID09IE5VTEwpOwogCi0JLyogZHVtbXkgbWFwcGluZ3MgdG8gZ2V0IHRvIDQ4ICovCi0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA4LCBPcGVuUElDX1BBZGRyICsgMHgxMDYwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCA5LCBPcGVuUElDX1BBZGRyICsgMHgxMDY4MCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAxMCwgT3BlblBJQ19QQWRkciArIDB4MTA3MDApOwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgMTEsIE9wZW5QSUNfUEFkZHIgKyAweDEwNzgwKTsKKwkvKiBSZXR1cm4gdGhlIG1waWMgbm9kZSAqLworCW9mX25vZGVfcHV0KG5wKTsKIAotCS8qIEV4dGVybmFsIGludHMgKi8KLQltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDEyLCBPcGVuUElDX1BBZGRyICsgMHgxMDAwMCk7Ci0JbXBpY19hc3NpZ25faXN1KG1waWMxLCAxMywgT3BlblBJQ19QQWRkciArIDB4MTAwODApOwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgMTQsIE9wZW5QSUNfUEFkZHIgKyAweDEwMTAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMCwgci5zdGFydCArIDB4MTAyMDApOworCW1waWNfYXNzaWduX2lzdShtcGljLCAxLCByLnN0YXJ0ICsgMHgxMDI4MCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDIsIHIuc3RhcnQgKyAweDEwMzAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMywgci5zdGFydCArIDB4MTAzODApOworCW1waWNfYXNzaWduX2lzdShtcGljLCA0LCByLnN0YXJ0ICsgMHgxMDQwMCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDUsIHIuc3RhcnQgKyAweDEwNDgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgNiwgci5zdGFydCArIDB4MTA1MDApOworCW1waWNfYXNzaWduX2lzdShtcGljLCA3LCByLnN0YXJ0ICsgMHgxMDU4MCk7CiAKLQltcGljX2luaXQobXBpYzEpOworCS8qIFVzZWQgb25seSBmb3IgODU0OCBzbyBmYXIsIGJ1dCBubyBoYXJtIGluCisJICogYWxsb2NhdGluZyB0aGVtIGZvciBldmVyeW9uZSAqLworCW1waWNfYXNzaWduX2lzdShtcGljLCA4LCByLnN0YXJ0ICsgMHgxMDYwMCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMsIDksIHIuc3RhcnQgKyAweDEwNjgwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMTAsIHIuc3RhcnQgKyAweDEwNzAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYywgMTEsIHIuc3RhcnQgKyAweDEwNzgwKTsKIAotI2lmZGVmIENPTkZJR19QQ0kKLQltcGljX3NldHVwX2Nhc2NhZGUoUElSUTBBLCBpODI1OV9pcnFfY2FzY2FkZSwgTlVMTCk7CisJLyogRXh0ZXJuYWwgSW50ZXJydXB0cyAqLworCW1waWNfYXNzaWduX2lzdShtcGljLCAxMiwgci5zdGFydCArIDB4MTAwMDApOworCW1waWNfYXNzaWduX2lzdShtcGljLCAxMywgci5zdGFydCArIDB4MTAwODApOworCW1waWNfYXNzaWduX2lzdShtcGljLCAxNCwgci5zdGFydCArIDB4MTAxMDApOwogCi0JaTgyNTlfaW5pdCgwLDApOwotI2VuZGlmCisJbXBpY19pbml0KG1waWMpOworCisjaWZkZWYgQ09ORklHX1BQQ19JODI1OQorCS8qIEluaXRpYWxpemUgdGhlIGk4MjU5IGNvbnRyb2xsZXIgKi8KKwlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCisJCWlmIChkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgImNocnAsaWljIikpIHsKKwkJCWNhc2NhZGVfbm9kZSA9IG5wOworCQkJYnJlYWs7CisJCX0KKworCWlmIChjYXNjYWRlX25vZGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IGZpbmQgaTgyNTkgUElDXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWNhc2NhZGVfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoY2FzY2FkZV9ub2RlLCAwKTsKKwlpZiAoY2FzY2FkZV9pcnEgPT0gTk9fSVJRKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIG1hcCBjYXNjYWRlIGludGVycnVwdFxuIik7CisJCXJldHVybjsKKwl9CisKKwlpODI1OV9pbml0KGNhc2NhZGVfbm9kZSwgMCk7CisJb2Zfbm9kZV9wdXQoY2FzY2FkZV9ub2RlKTsKKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfaXJxLCBtcGM4NXh4XzgyNTlfY2FzY2FkZSk7CisjZW5kaWYgLyogQ09ORklHX1BQQ19JODI1OSAqLwogfQogCiAKQEAgLTI3Myw5ICsyNDEsOSBAQAogCiAJY3B1ID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgImNwdSIpOwogCWlmIChjcHUgIT0gMCkgewotCQl1bnNpZ25lZCBpbnQgKmZwOworCQljb25zdCB1bnNpZ25lZCBpbnQgKmZwOwogCi0JCWZwID0gKGludCAqKWdldF9wcm9wZXJ0eShjcHUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwkJZnAgPSBnZXRfcHJvcGVydHkoY3B1LCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CiAJCWlmIChmcCAhPSAwKQogCQkJbG9vcHNfcGVyX2ppZmZ5ID0gKmZwIC8gSFo7CiAJCWVsc2UKQEAgLTI5OCw4ICsyNjYsNiBAQAogCQlhZGRfYnJpZGdlKG5wKTsKIAogCXBwY19tZC5wY2liaW9zX2ZpeHVwID0gbXBjODV4eF9jZHNfcGNpYmlvc19maXh1cDsKLQlwcGNfbWQucGNpX3N3aXp6bGUgPSBjb21tb25fc3dpenpsZTsKLQlwcGNfbWQucGNpX21hcF9pcnEgPSBtcGM4NXh4X21hcF9pcnE7CiAJcHBjX21kLnBjaV9leGNsdWRlX2RldmljZSA9IG1wYzg1eHhfZXhjbHVkZV9kZXZpY2U7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3BjaS5jCmluZGV4IDFkNTFmMzIuLjA1OTMwZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvcGNpLmMKQEAgLTQxLDcgKzQxLDcgQEAKIAlpbnQgbGVuOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcnNyYzsKLQlpbnQgKmJ1c19yYW5nZTsKKwljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAlpbnQgcHJpbWFyeSA9IDEsIGhhc19hZGRyZXNzID0gMDsKIAlwaHlzX2FkZHJfdCBpbW1yID0gZ2V0X2ltbXJiYXNlKCk7CiAKQEAgLTUxLDcgKzUxLDcgQEAKIAloYXNfYWRkcmVzcyA9IChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRldiwgMCwgJnJzcmMpID09IDApOwogCiAJLyogR2V0IGJ1cyByYW5nZSBpZiBhbnkgKi8KLQlidXNfcmFuZ2UgPSAoaW50ICopIGdldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKKwlidXNfcmFuZ2UgPSBnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CiAJaWYgKGJ1c19yYW5nZSA9PSBOVUxMIHx8IGxlbiA8IDIgKiBzaXplb2YoaW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBnZXQgYnVzLXJhbmdlIGZvciAlcywgYXNzdW1lIgogCQkgICAgICAgIiBidXMgMFxuIiwgZGV2LT5mdWxsX25hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2NDFfaHBjbi5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2NDFfaHBjbi5oCmluZGV4IDVkMmJjZjcuLjQxZTU1NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjQxX2hwY24uaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODY0MV9ocGNuLmgKQEAgLTE2LDM4ICsxNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKLS8qIFBDSSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwotI2RlZmluZSBQSVJRQQkJMwotI2RlZmluZSBQSVJRQgkJNAotI2RlZmluZSBQSVJRQwkJNQotI2RlZmluZSBQSVJRRAkJNgotI2RlZmluZSBQSVJRNwkJNwotI2RlZmluZSBQSVJRRQkJOQotI2RlZmluZSBQSVJRRgkJMTAKLSNkZWZpbmUgUElSUUcJCTExCi0jZGVmaW5lIFBJUlFICQkxMgotCi0vKiBQQ0ktRXhwcmVzcyBtZW1vcnkgbWFwICovCi0jZGVmaW5lIE1QQzg2WFhfUENJRV9MT1dFUl9JTyAgICAgICAgMHgwMDAwMDAwMAotI2RlZmluZSBNUEM4NlhYX1BDSUVfVVBQRVJfSU8gICAgICAgIDB4MDBmZmZmZmYKLQotI2RlZmluZSBNUEM4NlhYX1BDSUVfTE9XRVJfTUVNICAgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgTVBDODZYWF9QQ0lFX1VQUEVSX01FTSAgICAgICAweDlmZmZmZmZmCi0KLSNkZWZpbmUgTVBDODZYWF9QQ0lFX0lPX0JBU0UgICAgICAgICAweGUyMDAwMDAwCi0jZGVmaW5lIE1QQzg2WFhfUENJRV9NRU1fT0ZGU0VUICAgICAgMHgwMDAwMDAwMAotCi0jZGVmaW5lIE1QQzg2WFhfUENJRV9JT19TSVpFICAgICAgICAgMHgwMTAwMDAwMAotCi0jZGVmaW5lIFBDSUUxX0NGR19BRERSX09GRlNFVCAgICAoMHg4MDAwKQotI2RlZmluZSBQQ0lFMV9DRkdfREFUQV9PRkZTRVQgICAgKDB4ODAwNCkKLQotI2RlZmluZSBQQ0lFMl9DRkdfQUREUl9PRkZTRVQgICAgKDB4OTAwMCkKLSNkZWZpbmUgUENJRTJfQ0ZHX0RBVEFfT0ZGU0VUICAgICgweDkwMDQpCi0KLSNkZWZpbmUgTVBDODZ4eF9QQ0lFX09GRlNFVCBQQ0lFMV9DRkdfQUREUl9PRkZTRVQKLSNkZWZpbmUgTVBDODZ4eF9QQ0lFX1NJWkUJKDB4MTAwMCkKLQogI2RlZmluZSBNUEM4NlhYX1JTVENSX09GRlNFVAkoMHhlMDBiMCkJLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLwogCiAjZW5kaWYJLyogX19NUEM4NjQxX0hQQ05fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKaW5kZXggZWJhZTczZS4uYjYzN2U4MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYwpAQCAtMzcsNiArMzcsMTQgQEAKICNpbmNsdWRlICJtcGM4Nnh4LmgiCiAjaW5jbHVkZSAibXBjODY0MV9ocGNuLmgiCiAKKyN1bmRlZiBERUJVRworCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9FUlIgZm10KTsgfSB3aGlsZSgwKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdC4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKwogI2lmbmRlZiBDT05GSUdfUENJCiB1bnNpZ25lZCBsb25nIGlzYV9pb19iYXNlID0gMDsKIHVuc2lnbmVkIGxvbmcgaXNhX21lbV9iYXNlID0gMDsKQEAgLTQ0LDIwNSArNTIsMjE5IEBACiAjZW5kaWYKIAogCi0vKgotICogSW50ZXJuYWwgaW50ZXJydXB0cyBhcmUgYWxsIExldmVsIFNlbnNpdGl2ZSwgYW5kIFBvc2l0aXZlIFBvbGFyaXR5Ci0gKi8KLQotc3RhdGljIHVfY2hhciBtcGM4Nnh4X2hwY25fb3BlbnBpY19pbml0c2Vuc2VzW10gX19pbml0ZGF0YSA9IHsKLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDA6IFJlc2VydmVkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAxOiBNQ00gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDI6IEREUiBEUkFNICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICAzOiBMQklVICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA0OiBETUEgMCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgNTogRE1BIDEgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDY6IERNQSAyICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsICA3OiBETUEgMyAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAgODogUENJRTEgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgIDk6IFBDSUUyICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDEwOiBSZXNlcnZlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMTogUmVzZXJ2ZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMTI6IERVQVJUMiAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxMzogVFNFQyAxIFRyYW5zbWl0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE0OiBUU0VDIDEgUmVjZWl2ZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNTogVFNFQyAzIHRyYW5zbWl0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE2OiBUU0VDIDMgcmVjZWl2ZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxNzogVFNFQyAzIGVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDE4OiBUU0VDIDEgUmVjZWl2ZS9UcmFuc21pdCBFcnJvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAxOTogVFNFQyAyIFRyYW5zbWl0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIwOiBUU0VDIDIgUmVjZWl2ZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMTogVFNFQyA0IHRyYW5zbWl0ICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDIyOiBUU0VDIDQgcmVjZWl2ZSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyMzogVFNFQyA0IGVycm9yICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI0OiBUU0VDIDIgUmVjZWl2ZS9UcmFuc21pdCBFcnJvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyNTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDI2OiBEVUFSVDEgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMjc6IEkyQyAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyODogUGVyZm9ybWFuY2UgTW9uaXRvciAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAyOTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDMwOiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzE6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzMjogU1JJTyBlcnJvci93cml0ZS1wb3J0IHVuaXQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzM6IFNSSU8gb3V0Ym91bmQgZG9vcmJlbGwgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzQ6IFNSSU8gaW5ib3VuZCBkb29yYmVsbCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzNTogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDM2OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzc6IFNSSU8gb3V0Ym91bmQgbWVzc2FnZSB1bml0IDEgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgMzg6IFNSSU8gaW5ib3VuZCBtZXNzYWdlIHVuaXQgMSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCAzOTogU1JJTyBvdXRib3VuZCBtZXNzYWdlIHVuaXQgMiAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCA0MDogU1JJTyBpbmJvdW5kIG1lc3NhZ2UgdW5pdCAyICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDQxOiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgNDI6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCA0MzogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDQ0OiBVbnVzZWQgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSW50ZXJuYWwgNDU6IFVudXNlZCAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBJbnRlcm5hbCA0NjogVW51c2VkICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEludGVybmFsIDQ3OiBVbnVzZWQgKi8KLQkweDAsCQkJCQkJLyogRXh0ZXJuYWwgIDA6ICovCi0JMHgwLAkJCQkJCS8qIEV4dGVybmFsICAxOiAqLwotCTB4MCwJCQkJCQkvKiBFeHRlcm5hbCAgMjogKi8KLQkweDAsCQkJCQkJLyogRXh0ZXJuYWwgIDM6ICovCi0JMHgwLAkJCQkJCS8qIEV4dGVybmFsICA0OiAqLwotCTB4MCwJCQkJCQkvKiBFeHRlcm5hbCAgNTogKi8KLQkweDAsCQkJCQkJLyogRXh0ZXJuYWwgIDY6ICovCi0JMHgwLAkJCQkJCS8qIEV4dGVybmFsICA3OiAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBFeHRlcm5hbCAgODogUGl4aXMgRlBHQSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBFeHRlcm5hbCAgOTogVUxJIDgyNTkgSU5UUiBDYXNjYWRlICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIEV4dGVybmFsIDEwOiBRdWFkIEVUSCBQSFkgKi8KLQkweDAsCQkJCQkJLyogRXh0ZXJuYWwgMTE6ICovCi0JMHgwLAotCTB4MCwKLQkweDAsCi0JMHgwLAotfTsKLQorI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyB2b2lkIG1wYzg2eHhfODI1OV9jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKwkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJdW5zaWduZWQgaW50IGNhc2NhZGVfaXJxID0gaTgyNTlfaXJxKHJlZ3MpOworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSwgcmVncyk7CisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7Cit9CisjZW5kaWYJLyogQ09ORklHX1BDSSAqLwogCiB2b2lkIF9faW5pdAogbXBjODZ4eF9ocGNuX2luaXRfaXJxKHZvaWQpCiB7CiAJc3RydWN0IG1waWMgKm1waWMxOwotCXBoeXNfYWRkcl90IG9wZW5waWNfcGFkZHI7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNhc2NhZGVfbm9kZSA9IE5VTEw7CisJaW50IGNhc2NhZGVfaXJxOworI2VuZGlmCiAKLQkvKiBEZXRlcm1pbmUgdGhlIFBoeXNpY2FsIEFkZHJlc3Mgb2YgdGhlIE9wZW5QSUMgcmVncyAqLwotCW9wZW5waWNfcGFkZHIgPSBnZXRfaW1tcmJhc2UoKSArIE1QQzg2eHhfT1BFTlBJQ19PRkZTRVQ7CisJLyogRGV0ZXJtaW5lIFBJQyBhZGRyZXNzLiAqLworCW5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIm9wZW4tcGljIik7CisJaWYgKG5wID09IE5VTEwpCisJCXJldHVybjsKKwlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKIAogCS8qIEFsbG9jIG1waWMgc3RydWN0dXJlIGFuZCBwZXIgaXN1IGhhcyAxNiBJTlQgZW50cmllcy4gKi8KLQltcGljMSA9IG1waWNfYWxsb2Mob3BlbnBpY19wYWRkciwKKwltcGljMSA9IG1waWNfYWxsb2MobnAsIHJlcy5zdGFydCwKIAkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfV0FOVFNfUkVTRVQgfCBNUElDX0JJR19FTkRJQU4sCi0JCQkxNiwgTVBDODZ4eF9PUEVOUElDX0lSUV9PRkZTRVQsIDAsIDI1MCwKLQkJCW1wYzg2eHhfaHBjbl9vcGVucGljX2luaXRzZW5zZXMsCi0JCQlzaXplb2YobXBjODZ4eF9ocGNuX29wZW5waWNfaW5pdHNlbnNlcyksCisJCQkxNiwgTlJfSVJRUyAtIDQsCiAJCQkiIE1QSUMgICAgICIpOwogCUJVR19PTihtcGljMSA9PSBOVUxMKTsKIAotCS8qIDQ4IEludGVybmFsIEludGVycnVwdHMgKi8KLQltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDAsIG9wZW5waWNfcGFkZHIgKyAweDEwMjAwKTsKLQltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDEsIG9wZW5waWNfcGFkZHIgKyAweDEwNDAwKTsKLQltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDIsIG9wZW5waWNfcGFkZHIgKyAweDEwNjAwKTsKKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDAsIHJlcy5zdGFydCArIDB4MTAwMDApOwogCi0JLyogMTYgRXh0ZXJuYWwgaW50ZXJydXB0cyAqLwotCW1waWNfYXNzaWduX2lzdShtcGljMSwgMywgb3BlbnBpY19wYWRkciArIDB4MTAwMDApOworCS8qIDQ4IEludGVybmFsIEludGVycnVwdHMgKi8KKwltcGljX2Fzc2lnbl9pc3UobXBpYzEsIDEsIHJlcy5zdGFydCArIDB4MTAyMDApOworCW1waWNfYXNzaWduX2lzdShtcGljMSwgMiwgcmVzLnN0YXJ0ICsgMHgxMDQwMCk7CisJbXBpY19hc3NpZ25faXN1KG1waWMxLCAzLCByZXMuc3RhcnQgKyAweDEwNjAwKTsKKworCS8qIDE2IEV4dGVybmFsIGludGVycnVwdHMKKwkgKiBNb3ZpbmcgdGhlbSBmcm9tIFswIC0gMTVdIHRvIFs2NCAtIDc5XQorCSAqLworCW1waWNfYXNzaWduX2lzdShtcGljMSwgNCwgcmVzLnN0YXJ0ICsgMHgxMDAwMCk7CiAKIAltcGljX2luaXQobXBpYzEpOwogCiAjaWZkZWYgQ09ORklHX1BDSQotCW1waWNfc2V0dXBfY2FzY2FkZShNUEM4Nnh4X0lSUV9FWFQ5LCBpODI1OV9pcnFfY2FzY2FkZSwgTlVMTCk7Ci0JaTgyNTlfaW5pdCgwLCBJODI1OV9PRkZTRVQpOworCS8qIEluaXRpYWxpemUgaTgyNTkgY29udHJvbGxlciAqLworCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgImludGVycnVwdC1jb250cm9sbGVyIikKKwkJaWYgKGRldmljZV9pc19jb21wYXRpYmxlKG5wLCAiY2hycCxpaWMiKSkgeworCQkJY2FzY2FkZV9ub2RlID0gbnA7CisJCQlicmVhazsKKwkJfQorCWlmIChjYXNjYWRlX25vZGUgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAibXBjODZ4eGhwY246IG5vIElTQSBpbnRlcnJ1cHQgY29udHJvbGxlclxuIik7CisJCXJldHVybjsKKwl9CisKKwljYXNjYWRlX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGNhc2NhZGVfbm9kZSwgMCk7CisJaWYgKGNhc2NhZGVfaXJxID09IE5PX0lSUSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1wYzg2eHhocGNuOiBmYWlsZWQgdG8gbWFwIGNhc2NhZGUgaW50ZXJydXB0Iik7CisJCXJldHVybjsKKwl9CisJREJHKCJtcGM4Nnh4aHBjbjogY2FzY2FkZSBtYXBwZWQgdG8gaXJxICVkXG4iLCBjYXNjYWRlX2lycSk7CisKKwlpODI1OV9pbml0KGNhc2NhZGVfbm9kZSwgMCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZV9pcnEsIG1wYzg2eHhfODI1OV9jYXNjYWRlKTsKICNlbmRpZgogfQogCi0KLQogI2lmZGVmIENPTkZJR19QQ0kKLS8qCi0gKiBpbnRlcnJ1cHQgcm91dGluZwotICovCiAKLWludAotbXBjODZ4eF9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGNoYXIgaWRzZWwsIHVuc2lnbmVkIGNoYXIgcGluKQorZW51bSBwaXJxe1BJUlFBID0gOCwgUElSUUIsIFBJUlFDLCBQSVJRRCwgUElSUUUsIFBJUlFGLCBQSVJRRywgUElSUUh9OworY29uc3QgdW5zaWduZWQgY2hhciB1bGkxNTc1X2lycV9yb3V0ZV90YWJsZVsxNl0gPSB7CisJMCwgCS8qIDA6IFJlc2VydmVkICovCisJMHg4LCAJLyogMTogMGIxMDAwICovCisJMCwgCS8qIDI6IFJlc2VydmVkICovCisJMHgyLAkvKiAzOiAwYjAwMTAgKi8KKwkweDQsCS8qIDQ6IDBiMDEwMCAqLworCTB4NSwgCS8qIDU6IDBiMDEwMSAqLworCTB4NywJLyogNjogMGIwMTExICovCisJMHg2LAkvKiA3OiAwYjAxMTAgKi8KKwkwLCAJLyogODogUmVzZXJ2ZWQgKi8KKwkweDEsCS8qIDk6IDBiMDAwMSAqLworCTB4MywJLyogMTA6IDBiMDAxMSAqLworCTB4OSwJLyogMTE6IDBiMTAwMSAqLworCTB4YiwJLyogMTI6IDBiMTAxMSAqLworCTAsIAkvKiAxMzogUmVzZXJ2ZWQgKi8KKwkweGQsCS8qIDE0LCAwYjExMDEgKi8KKwkweGYsCS8qIDE1LCAwYjExMTEgKi8KK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitnZXRfcGNpX2lycV9mcm9tX29mKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSwgaW50IHNsb3QsIGludCBwaW4pCiB7Ci0Jc3RhdGljIGNoYXIgcGNpX2lycV90YWJsZVtdWzRdID0gewotCQkvKgotCQkgKiAgICAgIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKLQkJICogICAgICAgQSAgICAgIEIgICAgICBDICAgICAgRAotCQkgKi8KLQkJe1BJUlFBLCBQSVJRQiwgUElSUUMsIFBJUlFEfSwgICAvKiBJRFNFTCAxNyAtLSBQQ0kgU2xvdCAxICovCi0JCXtQSVJRQiwgUElSUUMsIFBJUlFELCBQSVJRQX0sCS8qIElEU0VMIDE4IC0tIFBDSSBTbG90IDIgKi8KLQkJezAsIDAsIDAsIDB9LAkJCS8qIElEU0VMIDE5ICovCi0JCXswLCAwLCAwLCAwfSwJCQkvKiBJRFNFTCAyMCAqLwotCQl7MCwgMCwgMCwgMH0sCQkJLyogSURTRUwgMjEgKi8KLQkJezAsIDAsIDAsIDB9LAkJCS8qIElEU0VMIDIyICovCi0JCXswLCAwLCAwLCAwfSwJCQkvKiBJRFNFTCAyMyAqLwotCQl7MCwgMCwgMCwgMH0sCQkJLyogSURTRUwgMjQgKi8KLQkJezAsIDAsIDAsIDB9LAkJCS8qIElEU0VMIDI1ICovCi0JCXtQSVJRRCwgUElSUUEsIFBJUlFCLCBQSVJRQ30sCS8qIElEU0VMIDI2IC0tIFBDSSBCcmlkZ2UqLwotCQl7UElSUUMsIDAsIDAsIDB9LAkJLyogSURTRUwgMjcgLS0gTEFOICovCi0JCXtQSVJRRSwgUElSUUYsIFBJUlFILCBQSVJRN30sCS8qIElEU0VMIDI4IC0tIFVTQiAxLjEgKi8KLQkJe1BJUlFFLCBQSVJRRiwgUElSUUcsIDB9LAkvKiBJRFNFTCAyOSAtLSBBdWRpbyAmIE1vZGVtICovCi0JCXtQSVJRSCwgMCwgMCwgMH0sCQkvKiBJRFNFTCAzMCAtLSBMUEMgJiBQTVUqLwotCQl7UElSUUQsIDAsIDAsIDB9LAkJLyogSURTRUwgMzEgLS0gQVRBICovCi0JfTsKKwlzdHJ1Y3Qgb2ZfaXJxIG9pcnE7CisJdTMyIGxhZGRyWzNdOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqaG9zZW5vZGUgPSBob3NlID8gaG9zZS0+YXJjaF9kYXRhIDogTlVMTDsKIAotCWNvbnN0IGxvbmcgbWluX2lkc2VsID0gMTcsIG1heF9pZHNlbCA9IDMxLCBpcnFzX3Blcl9zbG90ID0gNDsKLQlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVAgKyBJODI1OV9PRkZTRVQ7CisJaWYgKCFob3Nlbm9kZSkgcmV0dXJuIC1FSU5WQUw7CisKKwlsYWRkclswXSA9IChob3NlLT5maXJzdF9idXNubyA8PCAxNikgfCAoUENJX0RFVkZOKHNsb3QsIDApIDw8IDgpOworCWxhZGRyWzFdID0gbGFkZHJbMl0gPSAwOworCW9mX2lycV9tYXBfcmF3KGhvc2Vub2RlLCAmcGluLCAxLCBsYWRkciwgJm9pcnEpOworCURCRygibXBjODZ4eF9ocGNuOiBwY2kgaXJxIGFkZHIgJXgsIHNsb3QgJWQsIHBpbiAlZCwgaXJxICVkXG4iLAorCQkJbGFkZHJbMF0sIHNsb3QsIHBpbiwgb2lycS5zcGVjaWZpZXJbMF0pOworCXJldHVybiBvaXJxLnNwZWNpZmllclswXTsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2FsaTE1NzUoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya191bGkxNTc1KHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJdW5zaWduZWQgc2hvcnQgdGVtcDsKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UgPSBwY2lfYnVzX3RvX2hvc3QoZGV2LT5idXMpOworCXVuc2lnbmVkIGNoYXIgaXJxMnBpblsxNl07CisJdW5zaWduZWQgbG9uZyBwaXJxX21hcF93b3JkID0gMDsKKwl1MzIgaXJxOworCWludCBpOwogCiAJLyoKLQkgKiBBTEkxNTc1IGludGVycnVwdHMgcm91dGUgdGFibGUgc2V0dXA6Ci0JICoKLQkgKiBJUlEgcGluICAgSVJRIwotCSAqIFBJUlFBIC0tLS0gMwotCSAqIFBJUlFCIC0tLS0gNAotCSAqIFBJUlFDIC0tLS0gNQotCSAqIFBJUlFEIC0tLS0gNgotCSAqIFBJUlFFIC0tLS0gOQotCSAqIFBJUlFGIC0tLS0gMTAKLQkgKiBQSVJRRyAtLS0tIDExCi0JICogUElSUUggLS0tLSAxMgorCSAqIFVMSTE1NzUgaW50ZXJydXB0cyByb3V0ZSBzZXR1cAorCSAqLworCW1lbXNldChpcnEycGluLCAwLCAxNik7IC8qIEluaXRpYWxpemUgZGVmYXVsdCB2YWx1ZSAwICovCisKKwkvKgorCSAqIFBJUlFBIC0+IFBJUlFEIG1hcHBpbmcgcmVhZCBmcm9tIE9GLXRyZWUKIAkgKgogCSAqIGludGVycnVwdHMgZm9yIFBDSSBzbG90MCAtLSBQSVJRQSAvIFBJUlFCIC8gUElSUUMgLyBQSVJRRAogCSAqICAgICAgICAgICAgICAgIFBDSSBzbG90MSAtLSBQSVJRQiAvIFBJUlFDIC8gUElSUUQgLyBQSVJRQQogCSAqLwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ4LCAweGI5MzE3NTQyKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKXsKKwkJaXJxID0gZ2V0X3BjaV9pcnFfZnJvbV9vZihob3NlLCAxNywgaSArIDEpOworCQlpZiAoaXJxID4gMCAmJiBpcnEgPCAxNikKKwkJCWlycTJwaW5baXJxXSA9IFBJUlFBICsgaTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVUxJMTU3NSBkZXZpY2UiCisJCQkgICAgIihzbG90ICVkLCBwaW4gJWQpIGlycSAlZCBpcyBpbnZhbGlkLlxuIiwKKwkJCSAgICAxNywgaSwgaXJxKTsKKwl9CiAKLQkvKiBVU0IgMS4xIE9IQ0kgY29udHJvbGxlciAxLCBpbnRlcnJ1cHQ6IFBJUlFFICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4NiwgMHgwYyk7CisJLyoKKwkgKiBQSVJRRSAtPiBQSVJRRiBtYXBwaW5nIHNldCBtYW51YWxseQorCSAqCisJICogSVJRIHBpbiAgIElSUSMKKwkgKiBQSVJRRSAtLS0tIDkKKwkgKiBQSVJRRiAtLS0tIDEwCisJICogUElSUUcgLS0tLSAxMQorCSAqIFBJUlFIIC0tLS0gMTIKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSBpcnEycGluW2kgKyA5XSA9IFBJUlFFICsgaTsKIAotCS8qIFVTQiAxLjEgT0hDSSBjb250cm9sbGVyIDIsIGludGVycnVwdDogUElSUUYgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDg3LCAweDBkKTsKKwkvKiBTZXQgSVJRLVBJUlEgTWFwcGluZyB0byBVTEkxNTc1ICovCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCWlmIChpcnEycGluW2ldKQorCQkJcGlycV9tYXBfd29yZCB8PSAodWxpMTU3NV9pcnFfcm91dGVfdGFibGVbaV0gJiAweGYpCisJCQkJPDwgKChpcnEycGluW2ldIC0gUElSUUEpICogNCk7CiAKLQkvKiBVU0IgMS4xIE9IQ0kgY29udHJvbGxlciAzLCBpbnRlcnJ1cHQ6IFBJUlFIICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4OCwgMHgwZik7CisJLyogVUxJMTU3NSBJUlEgbWFwcGluZyBjb25mIHJlZ2lzdGVyIGRlZmF1bHQgdmFsdWUgaXMgMHhiOTMxNzU0MiAqLworCURCRygiU2V0dXAgVUxJMTU3NSBJUlEgbWFwcGluZyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHZhbHVlID0gMHgleFxuIiwKKwkJCXBpcnFfbWFwX3dvcmQpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ4LCBwaXJxX21hcF93b3JkKTsKIAotCS8qIFVTQiAyLjAgY29udHJvbGxlciwgaW50ZXJydXB0OiBQSVJRNyAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NzQsIDB4MDYpOworI2RlZmluZSBVTEkxNTc1X1NFVF9ERVZfSVJRKHNsb3QsIHBpbiwgcmVnKSAJCQkJXAorCWRvIHsgCQkJCQkJCQlcCisJCWludCBpcnE7IAkJCQkJCVwKKwkJaXJxID0gZ2V0X3BjaV9pcnFfZnJvbV9vZihob3NlLCBzbG90LCBwaW4pOyAJCVwKKwkJaWYgKGlycSA+IDAgJiYgaXJxIDwgMTYpIAkJCQlcCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCByZWcsIGlycTJwaW5baXJxXSk7IAlcCisJCWVsc2UJCQkJCQkJXAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVUxJMTU3NSBkZXZpY2UiCQlcCisJCQkgICAgIihzbG90ICVkLCBwaW4gJWQpIGlycSAlZCBpcyBpbnZhbGlkLlxuIiwJXAorCQkJICAgIHNsb3QsIHBpbiwgaXJxKTsJCQkJXAorCX0gd2hpbGUoMCkKIAotCS8qIEF1ZGlvIGNvbnRyb2xsZXIsIGludGVycnVwdDogUElSUUUgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhhLCAweDBjKTsKKwkvKiBVU0IgMS4xIE9IQ0kgY29udHJvbGxlciAxLCBzbG90IDI4LCBwaW4gMSAqLworCVVMSTE1NzVfU0VUX0RFVl9JUlEoMjgsIDEsIDB4ODYpOwogCi0JLyogTW9kZW0gY29udHJvbGxlciwgaW50ZXJydXB0OiBQSVJRRiAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OGIsIDB4MGQpOworCS8qIFVTQiAxLjEgT0hDSSBjb250cm9sbGVyIDIsIHNsb3QgMjgsIHBpbiAyICovCisJVUxJMTU3NV9TRVRfREVWX0lSUSgyOCwgMiwgMHg4Nyk7CiAKLQkvKiBIRCBhdWRpbyBjb250cm9sbGVyLCBpbnRlcnJ1cHQ6IFBJUlFHICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4YywgMHgwZSk7CisJLyogVVNCIDEuMSBPSENJIGNvbnRyb2xsZXIgMywgc2xvdCAyOCwgcGluIDMgKi8KKwlVTEkxNTc1X1NFVF9ERVZfSVJRKDI4LCAzLCAweDg4KTsKIAotCS8qIFNlcmlhbCBBVEEgaW50ZXJydXB0OiBQSVJRRCAqLwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4OGQsIDB4MGIpOworCS8qIFVTQiAyLjAgY29udHJvbGxlciwgc2xvdCAyOCwgcGluIDQgKi8KKwlpcnEgPSBnZXRfcGNpX2lycV9mcm9tX29mKGhvc2UsIDI4LCA0KTsKKwlpZiAoaXJxID49IDAgJiYgaXJxIDw9MTUpCisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDc0LCB1bGkxNTc1X2lycV9yb3V0ZV90YWJsZVtpcnFdKTsKIAotCS8qIFNNQiBpbnRlcnJ1cHQ6IFBJUlFIICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4ZSwgMHgwZik7CisJLyogQXVkaW8gY29udHJvbGxlciwgc2xvdCAyOSwgcGluIDEgKi8KKwlVTEkxNTc1X1NFVF9ERVZfSVJRKDI5LCAxLCAweDhhKTsKIAotCS8qIFBNVSBBQ1BJIFNDSSBpbnRlcnJ1cHQ6IFBJUlFIICovCi0JcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4ZiwgMHgwZik7CisJLyogTW9kZW0gY29udHJvbGxlciwgc2xvdCAyOSwgcGluIDIgKi8KKwlVTEkxNTc1X1NFVF9ERVZfSVJRKDI5LCAyLCAweDhiKTsKKworCS8qIEhEIGF1ZGlvIGNvbnRyb2xsZXIsIHNsb3QgMjksIHBpbiAzICovCisJVUxJMTU3NV9TRVRfREVWX0lSUSgyOSwgMywgMHg4Yyk7CisKKwkvKiBTTUIgaW50ZXJydXB0OiBzbG90IDMwLCBwaW4gMSAqLworCVVMSTE1NzVfU0VUX0RFVl9JUlEoMzAsIDEsIDB4OGUpOworCisJLyogUE1VIEFDUEkgU0NJIGludGVycnVwdDogc2xvdCAzMCwgcGluIDIgKi8KKwlVTEkxNTc1X1NFVF9ERVZfSVJRKDMwLCAyLCAweDhmKTsKKworCS8qIFNlcmlhbCBBVEEgaW50ZXJydXB0OiBzbG90IDMxLCBwaW4gMSAqLworCVVMSTE1NzVfU0VUX0RFVl9JUlEoMzEsIDEsIDB4OGQpOwogCiAJLyogUHJpbWFyeSBQQVRBIElERSBJUlE6IDE0CiAJICogU2Vjb25kYXJ5IFBBVEEgSURFIElSUTogMTUKIAkgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCAweDNkKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDc1LCAweDBmKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ0LCAweDMwIHwgdWxpMTU3NV9pcnFfcm91dGVfdGFibGVbMTRdKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDc1LCB1bGkxNTc1X2lycV9yb3V0ZV90YWJsZVsxNV0pOwogCiAJLyogU2V0IElSUTE0IGFuZCBJUlExNSB0byBsZWdhY3kgSVJRcyAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgMHg0NiwgJnRlbXApOwpAQCAtMjY0LDYgKzI4Niw4IEBACiAJICovCiAJb3V0YigweGZhLCAweDRkMCk7CiAJb3V0YigweDFlLCAweDRkMSk7CisKKyN1bmRlZiBVTEkxNTc1X1NFVF9ERVZfSVJRCiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya191bGk1Mjg4KHN0cnVjdCBwY2lfZGV2ICpkZXYpCkBAIC0zMDYsNyArMzMwLDcgQEAKIAlkZXYtPmNsYXNzIHw9IDB4MTsKIH0KIAotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQUwsIDB4MTU3NSwgcXVpcmtfYWxpMTU3NSk7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9BTCwgMHgxNTc1LCBxdWlya191bGkxNTc1KTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0FMLCAweDUyODgsIHF1aXJrX3VsaTUyODgpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfQUwsIDB4NTIyOSwgcXVpcmtfdWxpNTIyOSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX0FMLCAweDUyNDksIGVhcmx5X3VsaTUyNDkpOwpAQCAtMzIzLDkgKzM0Nyw5IEBACiAKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKIAlpZiAobnAgIT0gMCkgewotCQl1bnNpZ25lZCBpbnQgKmZwOworCQljb25zdCB1bnNpZ25lZCBpbnQgKmZwOwogCi0JCWZwID0gKGludCAqKWdldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCQlmcCA9IGdldF9wcm9wZXJ0eShucCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCQlpZiAoZnAgIT0gMCkKIAkJCWxvb3BzX3Blcl9qaWZmeSA9ICpmcCAvIEhaOwogCQllbHNlCkBAIC0zMzcsOCArMzYxLDYgQEAKIAlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUobnAsICJwY2kiKSkgIT0gTlVMTDspCiAJCWFkZF9icmlkZ2UobnApOwogCi0JcHBjX21kLnBjaV9zd2l6emxlID0gY29tbW9uX3N3aXp6bGU7Ci0JcHBjX21kLnBjaV9tYXBfaXJxID0gbXBjODZ4eF9tYXBfaXJxOwogCXBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UgPSBtcGM4Nnh4X2V4Y2x1ZGVfZGV2aWNlOwogI2VuZGlmCiAKQEAgLTM3Nyw2ICszOTksMTUgQEAKIH0KIAogCit2b2lkIF9faW5pdCBtcGM4Nnh4X2hwY25fcGNpYmlvc19maXh1cCh2b2lkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOworCisJZm9yX2VhY2hfcGNpX2RldihkZXYpCisJCXBjaV9yZWFkX2lycV9saW5lKGRldik7Cit9CisKKwogLyoKICAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAogICovCkBAIC00MzEsNiArNDYyLDcgQEAKIAkuc2V0dXBfYXJjaAkJPSBtcGM4Nnh4X2hwY25fc2V0dXBfYXJjaCwKIAkuaW5pdF9JUlEJCT0gbXBjODZ4eF9ocGNuX2luaXRfaXJxLAogCS5zaG93X2NwdWluZm8JCT0gbXBjODZ4eF9ocGNuX3Nob3dfY3B1aW5mbywKKwkucGNpYmlvc19maXh1cAkJPSBtcGM4Nnh4X2hwY25fcGNpYmlvc19maXh1cCwKIAkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCiAJLnJlc3RhcnQJCT0gbXBjODZ4eF9yZXN0YXJ0LAogCS50aW1lX2luaXQJCT0gbXBjODZ4eF90aW1lX2luaXQsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvcGNpLmMKaW5kZXggYmM1MTM5MC4uNDgxZTE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9wY2kuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJaW50IGxlbjsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CiAJc3RydWN0IHJlc291cmNlIHJzcmM7Ci0JaW50ICpidXNfcmFuZ2U7CisJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAJaW50IGhhc19hZGRyZXNzID0gMDsKIAlpbnQgcHJpbWFyeSA9IDA7CiAKQEAgLTE2Myw3ICsxNjMsNyBAQAogCWhhc19hZGRyZXNzID0gKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAwLCAmcnNyYykgPT0gMCk7CiAKIAkvKiBHZXQgYnVzIHJhbmdlIGlmIGFueSAqLwotCWJ1c19yYW5nZSA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCWJ1c19yYW5nZSA9IGdldF9wcm9wZXJ0eShkZXYsICJidXMtcmFuZ2UiLCAmbGVuKTsKIAlpZiAoYnVzX3JhbmdlID09IE5VTEwgfHwgbGVuIDwgMiAqIHNpemVvZihpbnQpKQogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYW4ndCBnZXQgYnVzLXJhbmdlIGZvciAlcywgYXNzdW1lIgogCQkgICAgICAgIiBidXMgMFxuIiwgZGV2LT5mdWxsX25hbWUpOwpAQCAtMTg4LDcgKzE4OCw4IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBNUEM4Nnh4IFBDSUUgaG9zdCBicmlkZ2UgYXQgMHglMDhseC4gIgogCSAgICAgICAiRmlybXdhcmUgYnVzIG51bWJlcjogJWQtPiVkXG4iLAotCQlyc3JjLnN0YXJ0LCBob3NlLT5maXJzdF9idXNubywgaG9zZS0+bGFzdF9idXNubyk7CisJICAgICAgICh1bnNpZ25lZCBsb25nKSByc3JjLnN0YXJ0LAorCSAgICAgICBob3NlLT5maXJzdF9idXNubywgaG9zZS0+bGFzdF9idXNubyk7CiAKIAlEQkcoIiAtPkhvc2UgYXQgMHglcCwgY2ZnX2FkZHI9MHglcCxjZmdfZGF0YT0weCVwXG4iLAogCQlob3NlLCBob3NlLT5jZmdfYWRkciwgaG9zZS0+Y2ZnX2RhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKaW5kZXggNWNmNDZkYy4uZTU4ZmE5NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCkBAIC0xMyw1ICsxMyw2IEBACiBvYmotJChDT05GSUdfUFBDX1BTRVJJRVMpCSs9IHBzZXJpZXMvCiBvYmotJChDT05GSUdfUFBDX0lTRVJJRVMpCSs9IGlzZXJpZXMvCiBvYmotJChDT05GSUdfUFBDX01BUExFKQkJKz0gbWFwbGUvCitvYmotJChDT05GSUdfUFBDX1BBU0VNSSkJCSs9IHBhc2VtaS8KIG9iai0kKENPTkZJR19QUENfQ0VMTCkJCSs9IGNlbGwvCiBvYmotJChDT05GSUdfRU1CRURERUQ2eHgpCSs9IGVtYmVkZGVkNnh4LwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2NiZV9yZWdzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3JlZ3MuYwppbmRleCBjZTY5NmMxLi4zZjM4NTlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3JlZ3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvY2JlX3JlZ3MuYwpAQCAtOTcsNyArOTcsNyBAQAogCQlzdHJ1Y3QgY2JlX3JlZ3NfbWFwICptYXAgPSAmY2JlX3JlZ3NfbWFwc1tjYmVfcmVnc19tYXBfY291bnQrK107CiAKIAkJLyogVGhhdCBoYWNrIG11c3QgZGllIGRpZSBkaWUgISAqLwotCQlzdHJ1Y3QgYWRkcmVzc19wcm9wIHsKKwkJY29uc3Qgc3RydWN0IGFkZHJlc3NfcHJvcCB7CiAJCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJCQl1bnNpZ25lZCBpbnQgbGVuOwogCQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICpwcm9wOwpAQCAtMTE0LDEzICsxMTQsMTEgQEAKIAkJCWlmIChjYmVfdGhyZWFkX21hcFtpXS5jcHVfbm9kZSA9PSBjcHUpCiAJCQkJY2JlX3RocmVhZF9tYXBbaV0ucmVncyA9IG1hcDsKIAotCQlwcm9wID0gKHN0cnVjdCBhZGRyZXNzX3Byb3AgKilnZXRfcHJvcGVydHkoY3B1LCAicGVydmFzaXZlIiwKLQkJCQkJCQkgICBOVUxMKTsKKwkJcHJvcCA9IGdldF9wcm9wZXJ0eShjcHUsICJwZXJ2YXNpdmUiLCBOVUxMKTsKIAkJaWYgKHByb3AgIT0gTlVMTCkKIAkJCW1hcC0+cG1kX3JlZ3MgPSBpb3JlbWFwKHByb3AtPmFkZHJlc3MsIHByb3AtPmxlbik7CiAKLQkJcHJvcCA9IChzdHJ1Y3QgYWRkcmVzc19wcm9wICopZ2V0X3Byb3BlcnR5KGNwdSwgImlpYyIsCi0JCQkJCQkJICAgTlVMTCk7CisJCXByb3AgPSBnZXRfcHJvcGVydHkoY3B1LCAiaWljIiwgTlVMTCk7CiAJCWlmIChwcm9wICE9IE5VTEwpCiAJCQltYXAtPmlpY19yZWdzID0gaW9yZW1hcChwcm9wLT5hZGRyZXNzLCBwcm9wLT5sZW4pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pbnRlcnJ1cHQuYwppbmRleCBkN2JiYjYxLi42YjU3YTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW50ZXJydXB0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2ludGVycnVwdC5jCkBAIC04OSwxNyArODksMTcgQEAKIC8qIEdldCBhbiBJUlEgbnVtYmVyIGZyb20gdGhlIHBlbmRpbmcgc3RhdGUgcmVnaXN0ZXIgb2YgdGhlIElJQyAqLwogc3RhdGljIHVuc2lnbmVkIGludCBpaWNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSAgCXN0cnVjdCBjYmVfaWljX3BlbmRpbmdfYml0cyBwZW5kaW5nOwotIAlzdHJ1Y3QgaWljICppaWM7CisJc3RydWN0IGNiZV9paWNfcGVuZGluZ19iaXRzIHBlbmRpbmc7CisJc3RydWN0IGlpYyAqaWljOwogCi0gCWlpYyA9ICZfX2dldF9jcHVfdmFyKGlpYyk7Ci0gCSoodW5zaWduZWQgbG9uZyAqKSAmcGVuZGluZyA9Ci0gCQlpbl9iZTY0KCh1bnNpZ25lZCBsb25nIF9faW9tZW0gKikgJmlpYy0+cmVncy0+cGVuZGluZ19kZXN0cik7Ci0gCWlpYy0+ZW9pX3N0YWNrWysraWljLT5lb2lfcHRyXSA9IHBlbmRpbmcucHJpbzsKLSAJQlVHX09OKGlpYy0+ZW9pX3B0ciA+IDE1KTsKKwlpaWMgPSAmX19nZXRfY3B1X3ZhcihpaWMpOworCSoodW5zaWduZWQgbG9uZyAqKSAmcGVuZGluZyA9CisJCWluX2JlNjQoKHVuc2lnbmVkIGxvbmcgX19pb21lbSAqKSAmaWljLT5yZWdzLT5wZW5kaW5nX2Rlc3RyKTsKKwlpaWMtPmVvaV9zdGFja1srK2lpYy0+ZW9pX3B0cl0gPSBwZW5kaW5nLnByaW87CisJQlVHX09OKGlpYy0+ZW9pX3B0ciA+IDE1KTsKIAlpZiAocGVuZGluZy5mbGFncyAmIENCRV9JSUNfSVJRX1ZBTElEKQogCQlyZXR1cm4gaXJxX2xpbmVhcl9yZXZtYXAoaWljLT5ob3N0LAotIAkJCQkJIGlpY19wZW5kaW5nX3RvX2h3bnVtKHBlbmRpbmcpKTsKKwkJCQkJIGlpY19wZW5kaW5nX3RvX2h3bnVtKHBlbmRpbmcpKTsKIAlyZXR1cm4gTk9fSVJROwogfQogCkBAIC0yNTAsMTYgKzI1MCwxNSBAQAogCXN0cnVjdCByZXNvdXJjZSByMCwgcjE7CiAJc3RydWN0IGlycV9ob3N0ICpob3N0OwogCWludCBmb3VuZCA9IDA7Ci0gCXUzMiAqbnA7CisJY29uc3QgdTMyICpucDsKIAogCWZvciAoZG4gPSBOVUxMOwogCSAgICAgKGRuID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoZG4sImludGVycnVwdC1jb250cm9sbGVyIikpICE9IE5VTEw7KSB7CiAJCWlmICghZGV2aWNlX2lzX2NvbXBhdGlibGUoZG4sCiAJCQkJICAgICAiSUJNLENCRUEtSW50ZXJuYWwtSW50ZXJydXB0LUNvbnRyb2xsZXIiKSkKIAkJCWNvbnRpbnVlOwotIAkJbnAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGludGVycnVwdC1zZXJ2ZXItcmFuZ2VzIiwKLQkJCQkJIE5VTEwpOwotIAkJaWYgKG5wID09IE5VTEwpIHsKKwkJbnAgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0saW50ZXJydXB0LXNlcnZlci1yYW5nZXMiLCBOVUxMKTsKKwkJaWYgKG5wID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIklJQzogQ1BVIGFzc29jaWF0aW9uIG5vdCBmb3VuZFxuIik7CiAJCQlvZl9ub2RlX3B1dChkbik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKaW5kZXggYTM1MDA0ZS4uZDJiMjBlYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvbW11LmMKQEAgLTMwOCwxNSArMzA4LDE2IEBACiAKIHN0YXRpYyB2b2lkIGlvbW11X2Rldm5vZGVfc2V0dXAoc3RydWN0IGRldmljZV9ub2RlICpkKQogewotCXVuc2lnbmVkIGludCAqaW9pZDsKLQl1bnNpZ25lZCBsb25nICpkbWFfd2luZG93LCBtYXBfc3RhcnQsIG1hcF9zaXplLCB0b2tlbjsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmlvaWQ7CisJdW5zaWduZWQgbG9uZyBtYXBfc3RhcnQsIG1hcF9zaXplLCB0b2tlbjsKKwljb25zdCB1bnNpZ25lZCBsb25nICpkbWFfd2luZG93OwogCXN0cnVjdCBjZWxsX2lvbW11ICppb21tdTsKIAotCWlvaWQgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KGQsICJpb2lkIiwgTlVMTCk7CisJaW9pZCA9IGdldF9wcm9wZXJ0eShkLCAiaW9pZCIsIE5VTEwpOwogCWlmICghaW9pZCkKIAkJcHJfZGVidWcoIk5vIGlvaWQgZW50cnkgZm91bmQgIVxuIik7CiAKLQlkbWFfd2luZG93ID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcHJvcGVydHkoZCwgImlibSxkbWEtd2luZG93IiwgTlVMTCk7CisJZG1hX3dpbmRvdyA9IGdldF9wcm9wZXJ0eShkLCAiaWJtLGRtYS13aW5kb3ciLCBOVUxMKTsKIAlpZiAoIWRtYV93aW5kb3cpCiAJCXByX2RlYnVnKCJObyBpYm0sZG1hLXdpbmRvdyBlbnRyeSBmb3VuZCAhXG4iKTsKIApAQCAtMzcxLDggKzM3Miw5IEBACiAKIHN0YXRpYyBpbnQgY2VsbF9tYXBfaW9tbXUodm9pZCkKIHsKLQl1bnNpZ25lZCBpbnQgbnVtX25vZGVzID0gMCwgKm5vZGVfaWQ7Ci0JdW5zaWduZWQgbG9uZyAqYmFzZSwgKm1taW9fYmFzZTsKKwl1bnNpZ25lZCBpbnQgbnVtX25vZGVzID0gMDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKm5vZGVfaWQ7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYmFzZSwgKm1taW9fYmFzZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwogCXN0cnVjdCBjZWxsX2lvbW11ICppb21tdSA9IE5VTEw7CiAKQEAgLTM4MSw3ICszODMsNyBAQAogCWZvcihkbiA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKIAkgICAgZG47CiAJICAgIGRuID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZG4sICJjcHUiKSkgewotCQlub2RlX2lkID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShkbiwgIm5vZGUtaWQiLCBOVUxMKTsKKwkJbm9kZV9pZCA9IGdldF9wcm9wZXJ0eShkbiwgIm5vZGUtaWQiLCBOVUxMKTsKIAogCQlpZiAobnVtX25vZGVzIDwgKm5vZGVfaWQpCiAJCQludW1fbm9kZXMgPSAqbm9kZV9pZDsKQEAgLTM5Niw5ICszOTgsOSBAQAogCSAgICBkbjsKIAkgICAgZG4gPSBvZl9maW5kX25vZGVfYnlfdHlwZShkbiwgImNwdSIpKSB7CiAKLQkJbm9kZV9pZCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkoZG4sICJub2RlLWlkIiwgTlVMTCk7Ci0JCWJhc2UgPSAodW5zaWduZWQgbG9uZyAqKWdldF9wcm9wZXJ0eShkbiwgImlvYy1jYWNoZSIsIE5VTEwpOwotCQltbWlvX2Jhc2UgPSAodW5zaWduZWQgbG9uZyAqKWdldF9wcm9wZXJ0eShkbiwgImlvYy10cmFuc2xhdGlvbiIsIE5VTEwpOworCQlub2RlX2lkID0gZ2V0X3Byb3BlcnR5KGRuLCAibm9kZS1pZCIsIE5VTEwpOworCQliYXNlID0gZ2V0X3Byb3BlcnR5KGRuLCAiaW9jLWNhY2hlIiwgTlVMTCk7CisJCW1taW9fYmFzZSA9IGdldF9wcm9wZXJ0eShkbiwgImlvYy10cmFuc2xhdGlvbiIsIE5VTEwpOwogCiAJCWlmICghYmFzZSB8fCAhbW1pb19iYXNlIHx8ICFub2RlX2lkKQogCQkJcmV0dXJuIGNlbGxfbWFwX2lvbW11X2hhcmRjb2RlZChudW1fbm9kZXMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYwppbmRleCAyODI5ODdkLi4yMmMyMjhhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc2V0dXAuYwpAQCAtMTUwLDEwICsxNTAsNiBAQAogCSAgICAhb2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJJQk0sQ1BCVy0xLjAiKSkKIAkJcmV0dXJuIDA7CiAKLSNpZmRlZiBDT05GSUdfVURCR19SVEFTX0NPTlNPTEUKLQl1ZGJnX2luaXRfcnRhc19jb25zb2xlKCk7Ci0jZW5kaWYKLQogCWhwdGVfaW5pdF9uYXRpdmUoKTsKIAogCXJldHVybiAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NtcC5jCmluZGV4IDQ2YWVmMDYuLjFjMGFjYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc21wLmMKQEAgLTU3LDcgKzU3LDcgQEAKICAqLwogc3RhdGljIGNwdW1hc2tfdCBvZl9zcGluX21hcDsKIAotZXh0ZXJuIHZvaWQgcFNlcmllc19zZWNvbmRhcnlfc21wX2luaXQodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCh1bnNpZ25lZCBsb25nKTsKIAogLyoqCiAgKiBzbXBfc3RhcnR1cF9jcHUoKSAtIHN0YXJ0IHRoZSBnaXZlbiBjcHUKQEAgLTc0LDcgKzc0LDcgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfaGVyZSA9IF9fcGEoKHUzMikqKCh1bnNpZ25lZCBsb25nICopCi0JCQkJCSAgICAgICBwU2VyaWVzX3NlY29uZGFyeV9zbXBfaW5pdCkpOworCQkJCQkgICAgICAgZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQpKTsKIAl1bnNpZ25lZCBpbnQgcGNwdTsKIAlpbnQgc3RhcnRfY3B1OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwaWRlci1waWMuYwppbmRleCAxNTIxN2JiLi43NDJhMDMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3BpZGVyLXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcGlkZXItcGljLmMKQEAgLTI0MCw3ICsyNDAsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBfX2luaXQgc3BpZGVyX2ZpbmRfY2FzY2FkZV9hbmRfbm9kZShzdHJ1Y3Qgc3BpZGVyX3BpYyAqcGljKQogewogCXVuc2lnbmVkIGludCB2aXJxOwotCXUzMiAqaW1hcCwgKnRtcDsKKwljb25zdCB1MzIgKmltYXAsICp0bXA7CiAJaW50IGltYXBsZW4sIGludHNpemUsIHVuaXQ7CiAJc3RydWN0IGRldmljZV9ub2RlICppaWM7CiAJc3RydWN0IGlycV9ob3N0ICppaWNfaG9zdDsKQEAgLTI1OCwyNSArMjU4LDI1IEBACiAjZW5kaWYKIAogCS8qIE5vdyBkbyB0aGUgaG9ycmlibGUgaGFja3MgKi8KLQl0bXAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHBpYy0+b2Zfbm9kZSwgIiNpbnRlcnJ1cHQtY2VsbHMiLCBOVUxMKTsKKwl0bXAgPSBnZXRfcHJvcGVydHkocGljLT5vZl9ub2RlLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOwogCWlmICh0bXAgPT0gTlVMTCkKIAkJcmV0dXJuIE5PX0lSUTsKIAlpbnRzaXplID0gKnRtcDsKLQlpbWFwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShwaWMtPm9mX25vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJmltYXBsZW4pOworCWltYXAgPSBnZXRfcHJvcGVydHkocGljLT5vZl9ub2RlLCAiaW50ZXJydXB0LW1hcCIsICZpbWFwbGVuKTsKIAlpZiAoaW1hcCA9PSBOVUxMIHx8IGltYXBsZW4gPCAoaW50c2l6ZSArIDEpKQogCQlyZXR1cm4gTk9fSVJROwogCWlpYyA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKGltYXBbaW50c2l6ZV0pOwogCWlmIChpaWMgPT0gTlVMTCkKIAkJcmV0dXJuIE5PX0lSUTsKIAlpbWFwICs9IGludHNpemUgKyAxOwotCXRtcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoaWljLCAiI2ludGVycnVwdC1jZWxscyIsIE5VTEwpOworCXRtcCA9IGdldF9wcm9wZXJ0eShpaWMsICIjaW50ZXJydXB0LWNlbGxzIiwgTlVMTCk7CiAJaWYgKHRtcCA9PSBOVUxMKQogCQlyZXR1cm4gTk9fSVJROwogCWludHNpemUgPSAqdG1wOwogCS8qIEFzc3VtZSB1bml0IGlzIGxhc3QgZW50cnkgb2YgaW50ZXJydXB0IHNwZWNpZmllciAqLwogCXVuaXQgPSBpbWFwW2ludHNpemUgLSAxXTsKIAkvKiBPaywgd2UgaGF2ZSBhIHVuaXQsIG5vdyBsZXQncyB0cnkgdG8gZ2V0IHRoZSBub2RlICovCi0JdG1wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShpaWMsICJpYm0saW50ZXJydXB0LXNlcnZlci1yYW5nZXMiLCBOVUxMKTsKKwl0bXAgPSBnZXRfcHJvcGVydHkoaWljLCAiaWJtLGludGVycnVwdC1zZXJ2ZXItcmFuZ2VzIiwgTlVMTCk7CiAJaWYgKHRtcCA9PSBOVUxMKSB7CiAJCW9mX25vZGVfcHV0KGlpYyk7CiAJCXJldHVybiBOT19JUlE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2Jhc2UuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCmluZGV4IGQwNjA0MmQuLjNiZDM2ZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jCkBAIC00ODgsMTAgKzQ4OCwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBmaW5kX3NwdV9ub2RlX2lkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqc3BlKQogewotCXVuc2lnbmVkIGludCAqaWQ7CisJY29uc3QgdW5zaWduZWQgaW50ICppZDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdTsKIAljcHUgPSBzcGUtPnBhcmVudC0+cGFyZW50OwotCWlkID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShjcHUsICJub2RlLWlkIiwgTlVMTCk7CisJaWQgPSBnZXRfcHJvcGVydHkoY3B1LCAibm9kZS1pZCIsIE5VTEwpOwogCXJldHVybiBpZCA/ICppZCA6IDA7CiB9CiAKQEAgLTUwMCw3ICs1MDAsNyBAQAogewogCXN0YXRpYyBERUZJTkVfTVVURVgoYWRkX3NwdW1lbV9tdXRleCk7CiAKLQlzdHJ1Y3QgYWRkcmVzc19wcm9wIHsKKwljb25zdCBzdHJ1Y3QgYWRkcmVzc19wcm9wIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyZXNzOwogCQl1bnNpZ25lZCBpbnQgbGVuOwogCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKnA7CkBAIC01MTEsNyArNTExLDcgQEAKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAlpbnQgcmV0OwogCi0JcCA9ICh2b2lkKilnZXRfcHJvcGVydHkoc3BlLCBwcm9wLCAmcHJvcGxlbik7CisJcCA9IGdldF9wcm9wZXJ0eShzcGUsIHByb3AsICZwcm9wbGVuKTsKIAlXQVJOX09OKHByb3BsZW4gIT0gc2l6ZW9mICgqcCkpOwogCiAJc3RhcnRfcGZuID0gcC0+YWRkcmVzcyA+PiBQQUdFX1NISUZUOwpAQCAtNTMxLDEyICs1MzEsMTIgQEAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKiBfX2luaXQgbWFwX3NwZV9wcm9wKHN0cnVjdCBzcHUgKnNwdSwKIAkJc3RydWN0IGRldmljZV9ub2RlICpuLCBjb25zdCBjaGFyICpuYW1lKQogewotCXN0cnVjdCBhZGRyZXNzX3Byb3AgeworCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3Byb3AgewogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CiAJCXVuc2lnbmVkIGludCBsZW47CiAJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqcHJvcDsKIAotCXZvaWQgKnA7CisJY29uc3Qgdm9pZCAqcDsKIAlpbnQgcHJvcGxlbjsKIAl2b2lkKiByZXQgPSBOVUxMOwogCWludCBlcnIgPSAwOwpAQCAtNTcwLDE0ICs1NzAsMTQgQEAKIHsKIAlzdHJ1Y3QgaXJxX2hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgaW50IGlzcmM7Ci0JdTMyICp0bXA7CisJY29uc3QgdTMyICp0bXA7CiAKIAlob3N0ID0gaWljX2dldF9pcnFfaG9zdChzcHUtPm5vZGUpOwogCWlmIChob3N0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogR2V0IHRoZSBpbnRlcnJ1cHQgc291cmNlIGZyb20gdGhlIGRldmljZS10cmVlICovCi0JdG1wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImlzcmMiLCBOVUxMKTsKKwl0bXAgPSBnZXRfcHJvcGVydHkobnAsICJpc3JjIiwgTlVMTCk7CiAJaWYgKCF0bXApCiAJCXJldHVybiAtRU5PREVWOwogCXNwdS0+aXNyYyA9IGlzcmMgPSB0bXBbMF07CkBAIC01OTMsNyArNTkzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3B1X21hcF9kZXZpY2Uoc3RydWN0IHNwdSAqc3B1LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCiB7Ci0JY2hhciAqcHJvcDsKKwljb25zdCBjaGFyICpwcm9wOwogCWludCByZXQ7CiAKIAlyZXQgPSAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL252cmFtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvbnZyYW0uYwppbmRleCAxNTBmNjdkLi4wZGQ0YTY0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL252cmFtLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL252cmFtLmMKQEAgLTY3LDEzICs2NywxNCBAQAogdm9pZCBfX2luaXQgY2hycF9udnJhbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpudnJhbTsKLQl1bnNpZ25lZCBpbnQgKm5ieXRlc19wLCBwcm9wbGVuOworCWNvbnN0IHVuc2lnbmVkIGludCAqbmJ5dGVzX3A7CisJdW5zaWduZWQgaW50IHByb3BsZW47CiAKIAludnJhbSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJudnJhbSIpOwogCWlmIChudnJhbSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQluYnl0ZXNfcCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkobnZyYW0sICIjYnl0ZXMiLCAmcHJvcGxlbik7CisJbmJ5dGVzX3AgPSBnZXRfcHJvcGVydHkobnZyYW0sICIjYnl0ZXMiLCAmcHJvcGxlbik7CiAJaWYgKG5ieXRlc19wID09IE5VTEwgfHwgcHJvcGxlbiAhPSBzaXplb2YodW5zaWduZWQgaW50KSkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKaW5kZXggNjgwMmNkYzMuLjBmNDM0MDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGNpLmMKQEAgLTIxNCwxMSArMjE0LDExIEBACiBjaHJwX2ZpbmRfYnJpZGdlcyh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2OwotCWludCAqYnVzX3JhbmdlOworCWNvbnN0IGludCAqYnVzX3JhbmdlOwogCWludCBsZW4sIGluZGV4ID0gLTE7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCXVuc2lnbmVkIGludCAqZG1hOwotCWNoYXIgKm1vZGVsLCAqbWFjaGluZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmRtYTsKKwljb25zdCBjaGFyICptb2RlbCwgKm1hY2hpbmU7CiAJaW50IGlzX2xvbmd0cmFpbCA9IDAsIGlzX21vdCA9IDAsIGlzX3BlZ2Fzb3MgPSAwOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdCA9IGZpbmRfcGF0aF9kZXZpY2UoIi8iKTsKIAlzdHJ1Y3QgcmVzb3VyY2UgcjsKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQkJICAgICAgIGRldi0+ZnVsbF9uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWJ1c19yYW5nZSA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOworCQlidXNfcmFuZ2UgPSBnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CiAJCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yICVzXG4iLAogCQkJCWRldi0+ZnVsbF9uYW1lKTsKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCQllbHNlCiAJCQlwcmludGsoS0VSTl9JTkZPICJQQ0kgYnVzZXMgJWQuLiVkIiwKIAkJCSAgICAgICBidXNfcmFuZ2VbMF0sIGJ1c19yYW5nZVsxXSk7Ci0JCXByaW50aygiIGNvbnRyb2xsZWQgYnkgJXMiLCBkZXYtPnR5cGUpOworCQlwcmludGsoIiBjb250cm9sbGVkIGJ5ICVzIiwgZGV2LT5mdWxsX25hbWUpOwogCQlpZiAoIWlzX2xvbmd0cmFpbCkKIAkJCXByaW50aygiIGF0ICVsbHgiLCAodW5zaWduZWQgbG9uZyBsb25nKXIuc3RhcnQpOwogCQlwcmludGsoIlxuIik7CkBAIC0yODksNiArMjg5LDE5IEBACiAJCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgMHhmZWMwMGNmOCwgMHhmZWUwMGNmYyk7CiAJCX0gZWxzZSBpZiAoaXNfcGVnYXNvcyA9PSAyKSB7CiAJCQlzZXR1cF9wZWcyKGhvc2UsIGRldik7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAobW9kZWwsICJJQk0sQ1BDNzEwIiwgMTApKSB7CisJCQlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwKKwkJCQkJICAgci5zdGFydCArIDB4MDAwZjgwMDAsCisJCQkJCSAgIHIuc3RhcnQgKyAweDAwMGY4MDEwKTsKKwkJCWlmIChpbmRleCA9PSAwKSB7CisJCQkJZG1hID0gZ2V0X3Byb3BlcnR5KGRldiwgInN5c3RlbS1kbWEtYmFzZSIsJmxlbik7CisJCQkJaWYgKGRtYSAmJiBsZW4gPj0gc2l6ZW9mKCpkbWEpKSB7CisJCQkJCWRtYSA9ICh1bnNpZ25lZCBpbnQgKikKKwkJCQkJCSgoKHVuc2lnbmVkIGxvbmcpZG1hKSArCisJCQkJCQlsZW4gLSBzaXplb2YoKmRtYSkpOworCQkJCQkJcGNpX2RyYW1fb2Zmc2V0ID0gKmRtYTsKKwkJCQl9CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoIk5vIG1ldGhvZHMgZm9yICVzIChtb2RlbCAlcyksIHVzaW5nIFJUQVNcbiIsCiAJCQkgICAgICAgZGV2LT5mdWxsX25hbWUsIG1vZGVsKTsKQEAgLTI5OSwxNSArMzEyLDM1IEBACiAKIAkJLyogY2hlY2sgdGhlIGZpcnN0IGJyaWRnZSBmb3IgYSBwcm9wZXJ0eSB0aGF0IHdlIGNhbgogCQkgICB1c2UgdG8gc2V0IHBjaV9kcmFtX29mZnNldCAqLwotCQlkbWEgPSAodW5zaWduZWQgaW50ICopCi0JCQlnZXRfcHJvcGVydHkoZGV2LCAiaWJtLGRtYS1yYW5nZXMiLCAmbGVuKTsKKwkJZG1hID0gZ2V0X3Byb3BlcnR5KGRldiwgImlibSxkbWEtcmFuZ2VzIiwgJmxlbik7CiAJCWlmIChpbmRleCA9PSAwICYmIGRtYSAhPSBOVUxMICYmIGxlbiA+PSA2ICogc2l6ZW9mKCpkbWEpKSB7CiAJCQlwY2lfZHJhbV9vZmZzZXQgPSBkbWFbMl0gLSBkbWFbM107CiAJCQlwcmludGsoInBjaV9kcmFtX29mZnNldCA9ICVseFxuIiwgcGNpX2RyYW1fb2Zmc2V0KTsKIAkJfQogCX0KLQotCS8qIERvIG5vdCBmaXh1cCBpbnRlcnJ1cHRzIGZyb20gT0YgdHJlZSBvbiBwZWdhc29zICovCi0JaWYgKGlzX3BlZ2Fzb3MpCi0JCXBwY19tZC5wY2liaW9zX2ZpeHVwID0gTlVMTDsKIH0KKworLyogU0w4MkMxMDUgSURFIENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFNMODJDMTA1X0lERUNTUiAgICAgICAgICAgICAgICAweDQwCisKKy8qIEZpeHVwIGZvciBXaW5ib25kIEFUQSBxdWlyaywgcmVxdWlyZWQgZm9yIGJyaXEgKi8KK3ZvaWQgY2hycF9wY2lfZml4dXBfd2luYm9uZF9hdGEoc3RydWN0IHBjaV9kZXYgKnNsODJjMTA1KQoreworCXU4IHByb2dpZjsKKworCS8qIElmIG5vbi1icmlxIG1hY2hpbmVzIG5lZWQgdGhhdCBmaXh1cCB0b28sIHBsZWFzZSBzcGVhayB1cCAqLworCWlmICghbWFjaGluZV9pcyhjaHJwKSB8fCBfY2hycF90eXBlICE9IF9DSFJQX2JyaXEpCisJCXJldHVybjsKKworCWlmICgoc2w4MmMxMDUtPmNsYXNzICYgNSkgIT0gNSkgeworCQlwcmludGsoIlc4M0M1NTM6IFN3aXRjaGluZyBTTDgyQzEwNSBJREUgdG8gUENJIG5hdGl2ZSBtb2RlXG4iKTsKKwkJLyogRW5hYmxlIFNMODJDMTA1IFBDSSBuYXRpdmUgSURFIG1vZGUgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUoc2w4MmMxMDUsIFBDSV9DTEFTU19QUk9HLCAmcHJvZ2lmKTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHNsODJjMTA1LCBQQ0lfQ0xBU1NfUFJPRywgcHJvZ2lmIHwgMHgwNSk7CisJCXNsODJjMTA1LT5jbGFzcyB8PSAweDA1OworCQkvKiBEaXNhYmxlIFNMODJDMTA1IHNlY29uZCBwb3J0ICovCisJCXBjaV93cml0ZV9jb25maWdfd29yZChzbDgyYzEwNSwgU0w4MkMxMDVfSURFQ1NSLCAweDAwMDMpOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfV0lOQk9ORCwgUENJX0RFVklDRV9JRF9XSU5CT05EXzgyQzEwNSwKKwkJY2hycF9wY2lfZml4dXBfd2luYm9uZF9hdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwppbmRleCA1MzhlMzM3Li40ODhkYmQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvc2V0dXAuYwpAQCAtNzQsNiArNzQsOSBAQAogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAKKy8qIFRvIGJlIHJlcGxhY2VkIGJ5IFJUQVMgd2hlbiBhdmFpbGFibGUgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgKmJyaXFfU1BPUjsKKwogI2lmZGVmIENPTkZJR19TTVAKIGV4dGVybiBzdHJ1Y3Qgc21wX29wc190IGNocnBfc21wX29wczsKICNlbmRpZgpAQCAtOTIsNiArOTUsMTUgQEAKIAkiRGlzYWJsZWQiLCAiV3JpdGUtVGhyb3VnaCIsICJDb3B5LUJhY2siLCAiVHJhbnNwYXJlbnQgTW9kZSIKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICpjaHJwX25hbWVzW10gPSB7CisJIlVua25vd24iLAorCSIiLCIiLCIiLAorCSJNb3Rvcm9sYSIsCisJIklCTSBvciBMb25ndHJhaWwiLAorCSJHZW5lc2kgUGVnYXNvcyIsCisJIlRvdGFsIEltcGFjdCBCcmlxIgorfTsKKwogdm9pZCBjaHJwX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiAJaW50IGksIHNkcmFtZW47CkBAIC0yMTQsOCArMjI2LDcgQEAKIAkvKiBFbmFibGUgTDIgY2FjaGUgaWYgbmVlZGVkICovCiAJbnAgPSBmaW5kX3R5cGVfZGV2aWNlcygiY3B1Iik7CiAJaWYgKG5wICE9IE5VTEwpIHsKLQkJdW5zaWduZWQgaW50ICpsMmNyID0gKHVuc2lnbmVkIGludCAqKQotCQkJZ2V0X3Byb3BlcnR5IChucCwgImwyY3IiLCBOVUxMKTsKKwkJY29uc3QgdW5zaWduZWQgaW50ICpsMmNyID0gZ2V0X3Byb3BlcnR5KG5wLCAibDJjciIsIE5VTEwpOwogCQlpZiAobDJjciA9PSBOVUxMKSB7CiAJCQlwcmludGsgKCJQZWdhc29zIGwyY3IgOiBubyBjcHUgbDJjciBwcm9wZXJ0eSBmb3VuZFxuIik7CiAJCQlyZXR1cm47CkBAIC0yMjksMTAgKzI0MCwxOCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgYnJpcV9yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCWlmIChicmlxX1NQT1IpCisJCW91dF9iZTMyKGJyaXFfU1BPUiwgMCk7CisJZm9yKDs7KTsKK30KKwogdm9pZCBfX2luaXQgY2hycF9zZXR1cF9hcmNoKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpyb290ID0gZmluZF9wYXRoX2RldmljZSAoIi8iKTsKLQljaGFyICptYWNoaW5lID0gTlVMTDsKKwljb25zdCBjaGFyICptYWNoaW5lID0gTlVMTDsKIAogCS8qIGluaXQgdG8gc29tZSB+c2FuZSB2YWx1ZSB1bnRpbCBjYWxpYnJhdGVfZGVsYXkoKSBydW5zICovCiAJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAvSFo7CkBAIC0yNDUsMTEgKzI2NCwxNiBAQAogCQlfY2hycF90eXBlID0gX0NIUlBfSUJNOwogCX0gZWxzZSBpZiAobWFjaGluZSAmJiBzdHJuY21wKG1hY2hpbmUsICJNT1QiLCAzKSA9PSAwKSB7CiAJCV9jaHJwX3R5cGUgPSBfQ0hSUF9Nb3Rvcm9sYTsKKwl9IGVsc2UgaWYgKG1hY2hpbmUgJiYgc3RybmNtcChtYWNoaW5lLCAiVG90YWxJbXBhY3QsQlJJUS0xIiwgMTgpID09IDApIHsKKwkJX2NocnBfdHlwZSA9IF9DSFJQX2JyaXE7CisJCS8qIE1hcCB0aGUgU1BPUiByZWdpc3RlciBvbiBicmlxIGFuZCBjaGFuZ2UgdGhlIHJlc3RhcnQgaG9vayAqLworCQlicmlxX1NQT1IgPSAodW5zaWduZWQgaW50ICopaW9yZW1hcCgweGZmMDAwMGU4LCA0KTsKKwkJcHBjX21kLnJlc3RhcnQgPSBicmlxX3Jlc3RhcnQ7CiAJfSBlbHNlIHsKIAkJLyogTGV0J3MgYXNzdW1lIGl0IGlzIGFuIElCTSBjaHJwIGlmIGFsbCBlbHNlIGZhaWxzICovCiAJCV9jaHJwX3R5cGUgPSBfQ0hSUF9JQk07CiAJfQotCXByaW50aygiY2hycCB0eXBlID0gJXhcbiIsIF9jaHJwX3R5cGUpOworCXByaW50aygiY2hycCB0eXBlID0gJXggWyVzXVxuIiwgX2NocnBfdHlwZSwgY2hycF9uYW1lc1tfY2hycF90eXBlXSk7CiAKIAlydGFzX2luaXRpYWxpemUoKTsKIAlpZiAocnRhc190b2tlbigiZGlzcGxheS1jaGFyYWN0ZXIiKSA+PSAwKQpAQCAtMjkxLDEwICszMTUsNiBAQAogCiAJcGNpX2NyZWF0ZV9PRl9idXNfbWFwKCk7CiAKLSNpZmRlZiBDT05GSUdfU01QCi0Jc21wX29wcyA9ICZjaHJwX3NtcF9vcHM7Ci0jZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCiAJLyoKIAkgKiBQcmludCB0aGUgYmFubmVyLCB0aGVuIHNjcm9sbCBkb3duIHNvIGJvb3QgcHJvZ3Jlc3MKIAkgKiBjYW4gYmUgcHJpbnRlZC4gIC0tIENvcnQKQEAgLTMzMiw3ICszNTIsNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpyb290OwogCWludCBsZW4sIGksIGo7CiAJaW50IGlzdV9zaXplLCBpZHVfc2l6ZTsKLQl1bnNpZ25lZCBpbnQgKmlyYW5nZXMsICpvcHByb3AgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGludCAqaXJhbmdlcywgKm9wcHJvcCA9IE5VTEw7CiAJaW50IG9wbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIG9wYWRkcjsKIAlpbnQgbmEgPSAxOwpAQCAtMzQyLDggKzM2Miw3IEBACiAJCXJldHVybjsKIAlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAocm9vdCkgewotCQlvcHByb3AgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eQotCQkJKHJvb3QsICJwbGF0Zm9ybS1vcGVuLXBpYyIsICZvcGxlbik7CisJCW9wcHJvcCA9IGdldF9wcm9wZXJ0eShyb290LCAicGxhdGZvcm0tb3Blbi1waWMiLCAmb3BsZW4pOwogCQluYSA9IHByb21fbl9hZGRyX2NlbGxzKHJvb3QpOwogCX0KIAlpZiAob3Bwcm9wICYmIG9wbGVuID49IG5hICogc2l6ZW9mKHVuc2lnbmVkIGludCkpIHsKQEAgLTM2MCw3ICszNzksNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiT3BlblBJQyBhdCAlbHhcbiIsIG9wYWRkcik7CiAKLQlpcmFuZ2VzID0gKHVuc2lnbmVkIGludCAqKSBnZXRfcHJvcGVydHkobnAsICJpbnRlcnJ1cHQtcmFuZ2VzIiwgJmxlbik7CisJaXJhbmdlcyA9IGdldF9wcm9wZXJ0eShucCwgImludGVycnVwdC1yYW5nZXMiLCAmbGVuKTsKIAlpZiAoaXJhbmdlcyA9PSBOVUxMKQogCQlsZW4gPSAwOwkvKiBub24tZGlzdHJpYnV0ZWQgbXBpYyAqLwogCWVsc2UKQEAgLTQ0Niw4ICs0NjUsOCBAQAogCSAqIGZyb20gYW55d2F5CiAJICovCiAJZm9yIChucCA9IGZpbmRfZGV2aWNlcygicGNpIik7IG5wICE9IE5VTEw7IG5wID0gbnAtPm5leHQpIHsKLQkJdW5zaWduZWQgaW50ICphZGRycCA9ICh1bnNpZ25lZCBpbnQgKikKLQkJCWdldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwgTlVMTCk7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqYWRkcnAgPSBnZXRfcHJvcGVydHkobnAsCisJCQkJIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwgTlVMTCk7CiAKIAkJaWYgKGFkZHJwID09IE5VTEwpCiAJCQljb250aW51ZTsKQEAgLTQ3OSw2ICs0OTgsMTQgQEAKIAljaHJwX2ZpbmRfb3BlbnBpYygpOwogCWNocnBfZmluZF84MjU5KCk7CiAKKyNpZmRlZiBDT05GSUdfU01QCisJLyogUGVnYXNvcyBoYXMgbm8gTVBJQywgdGhvc2Ugb3BzIHdvdWxkIG1ha2UgaXQgY3Jhc2guIEl0IG1pZ2h0IGJlIGFuCisJICogb3B0aW9uIHRvIG1vdmUgc2V0dGluZyB0aGVtIHRvIGFmdGVyIHdlIHByb2JlIHRoZSBQSUMgdGhvdWdoCisJICovCisJaWYgKGNocnBfbXBpYyAhPSBOVUxMKQorCQlzbXBfb3BzID0gJmNocnBfc21wX29wczsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKIAlpZiAoX2NocnBfdHlwZSA9PSBfQ0hSUF9QZWdhc29zKQogCQlwcGNfbWQuZ2V0X2lycSAgICAgICAgPSBpODI1OV9pcnE7CiAKQEAgLTQ5OCw3ICs1MjUsNyBAQAogY2hycF9pbml0Mih2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2aWNlOwotCXVuc2lnbmVkIGludCAqcCA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgaW50ICpwID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19OVlJBTQogCWNocnBfbnZyYW1faW5pdCgpOwpAQCAtNTE2LDggKzU0Myw3IEBACiAJICovCiAJZGV2aWNlID0gZmluZF9kZXZpY2VzKCJydGFzIik7CiAJaWYgKGRldmljZSkKLQkJcCA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5Ci0JCQkoZGV2aWNlLCAicnRhcy1ldmVudC1zY2FuLXJhdGUiLCBOVUxMKTsKKwkJcCA9IGdldF9wcm9wZXJ0eShkZXZpY2UsICJydGFzLWV2ZW50LXNjYW4tcmF0ZSIsIE5VTEwpOwogCWlmIChwICYmICpwKSB7CiAJCS8qCiAJCSAqIEFycmFuZ2UgdG8gY2FsbCBjaHJwX2V2ZW50X3NjYW4gYXQgbGVhc3QgKnAgdGltZXMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZwppbmRleCBiYTA3YTlhLi4yMzRhODYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCkBAIC04MCw2ICs4MCw3IEBACiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKKwlzZWxlY3QgTVBJQ19XRUlSRAogCWhlbHAKIAkgIFNlbGVjdCBNUEM3NDQ4SFBDMiBpZiBjb25maWd1cmluZyBmb3IgRnJlZXNjYWxlIE1QQzc0NDhIUEMyIChUYWlnYSkKIAkgIHBsYXRmb3JtCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9tcGM3NDQ4X2hwYzIuYwppbmRleCBkN2E0ZmM3Li5lNGYyYjlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L21wYzc0NDhfaHBjMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvbXBjNzQ0OF9ocGMyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbXBjNzQ0OF9ocGMyLmMKICAqCi0gKiBCb2FyZCBzZXR1cCByb3V0aW5lcyBmb3IgdGhlIEZyZWVzY2FsZSBUYWlnYSBwbGF0Zm9ybQorICogQm9hcmQgc2V0dXAgcm91dGluZXMgZm9yIHRoZSBGcmVlc2NhbGUgbXBjNzQ0OGhwYzIodGFpZ2EpIHBsYXRmb3JtCiAgKgogICogQXV0aG9yOiBKYWNvYiBQYW4KICAqCSBqYWNvYi5wYW5AZnJlZXNjYWxlLmNvbQpAQCAtMTIsMTAgKzEyLDEwIEBACiAgKgogICogQ29weXJpZ2h0IDIwMDQtMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KLSAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtNjIsNDMgKzYyLDggQEAKIGV4dGVybiBpbnQgdHNpMTA4X3NldHVwX3BjaShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldik7CiBleHRlcm4gdm9pZCBfbm1hc2tfYW5kX29yX21zcih1bnNpZ25lZCBsb25nIG5tYXNrLCB1bnNpZ25lZCBsb25nIG9yX3ZhbCk7CiBleHRlcm4gdm9pZCB0c2kxMDhfcGNpX2ludF9pbml0KHZvaWQpOwotZXh0ZXJuIGludCB0c2kxMDhfaXJxX2Nhc2NhZGUoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHZvaWQgKnVudXNlZCk7Ci0KLS8qCi0gKiBEZWZpbmUgYWxsIG9mIHRoZSBJUlEgc2Vuc2VzIGFuZCBwb2xhcml0aWVzLiAgVGFrZW4gZnJvbSB0aGUKLSAqIG1wYzc0NDhocGMgIG1hbnVhbC4KLSAqIE5vdGU6ICBMaWtlbHksIHRoaXMgdGFibGUgYW5kIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gc2hvdWxkIGJlCi0gKiAgICAgICAgb2J0YWluZWQgYW5kIGRlcml2ZWQgZnJvbSB0aGUgT0YgRGV2aWNlIFRyZWUuCi0gKi8KLQotc3RhdGljIHVfY2hhciBtcGM3NDQ4X2hwYzJfcGljX2luaXRzZW5zZXNbXSBfX2luaXRkYXRhID0gewotCS8qIEV4dGVybmFsIG9uLWJvYXJkIHNvdXJjZXMgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX05FR0FUSVZFKSwJLyogSU5UWzBdIFhJTlQwIGZyb20gRlBHQSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfTkVHQVRJVkUpLAkvKiBJTlRbMV0gWElOVDEgZnJvbSBGUEdBICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIElOVFsyXSBQSFlfSU5UIGZyb20gYm90aCBHSUdFICovCi0JKElSUV9TRU5TRV9MRVZFTCB8IElSUV9QT0xBUklUWV9ORUdBVElWRSksCS8qIElOVFszXSBSRVNFUlZFRCAqLwotCS8qIEludGVybmFsIFRzaTEwOC8xMDkgaW50ZXJydXB0IHNvdXJjZXMgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogUmVzZXJ2ZWQgSVJRICovCi0JKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIFJlc2VydmVkIElSUSAqLwotCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBSZXNlcnZlZCBJUlEgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogUmVzZXJ2ZWQgSVJRICovCi0JKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIERNQTAgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogRE1BMSAqLwotCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBETUEyICovCi0JKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIERNQTMgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogVUFSVDAgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogVUFSVDEgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogSTJDICovCi0JKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEdQSU8gKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogR0lHRTAgKi8KLQkoSVJRX1NFTlNFX0xFVkVMIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogR0lHRTEgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogUmVzZXJ2ZWQgSVJRICovCi0JKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIEhMUCAqLwotCShJUlFfU0VOU0VfRURHRSAgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBTREMgKi8KLQkoSVJRX1NFTlNFX0VER0UgIHwgSVJRX1BPTEFSSVRZX1BPU0lUSVZFKSwJLyogUHJvY2Vzc29yIElGICovCi0JKElSUV9TRU5TRV9FREdFICB8IElSUV9QT0xBUklUWV9QT1NJVElWRSksCS8qIFJlc2VydmVkIElSUSAqLwotCShJUlFfU0VOU0VfTEVWRUwgfCBJUlFfUE9MQVJJVFlfUE9TSVRJVkUpLAkvKiBQQ0kvWCBibG9jayAqLwotfTsKK2V4dGVybiB2b2lkIHRzaTEwOF9pcnFfY2FzY2FkZSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCiBpbnQgbXBjNzQ0OF9ocGMyX2V4Y2x1ZGVfZGV2aWNlKHVfY2hhciBidXMsIHVfY2hhciBkZXZmbikKIHsKQEAgLTEzMCw3ICs5NSw3IEBACiB7CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQl1bnNpZ25lZCBpbnQgKmludGVycnVwdDsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmludGVycnVwdDsKIAlpbnQgYnVzbnI7CiAJaW50IGxlbjsKIAl1OCBzbG90OwpAQCAtMTQ3LDcgKzExMiw3IEBACiAJaWYgKCFub2RlKQogCQlwcmludGsoS0VSTl9FUlIgIk5vIHBjaSBub2RlIGZvdW5kXG4iKTsKIAotCWludGVycnVwdCA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KG5vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJmxlbik7CisJaW50ZXJydXB0ID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJpbnRlcnJ1cHQtbWFwIiwgJmxlbik7CiAJc2xvdCA9IGZpbmRfc2xvdF9ieV9kZXZmbihpbnRlcnJ1cHQsIGRldi0+ZGV2Zm4pOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZwaW4pOwogCWlmIChwaW4gPT0gMCB8fCBwaW4gPiA0KQpAQCAtMTc2LDkgKzE0MSw5IEBACiAKIAljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CiAJaWYgKGNwdSAhPSAwKSB7Ci0JCXVuc2lnbmVkIGludCAqZnA7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqZnA7CiAKLQkJZnAgPSAoaW50ICopZ2V0X3Byb3BlcnR5KGNwdSwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCQlmcCA9IGdldF9wcm9wZXJ0eShjcHUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKIAkJaWYgKGZwICE9IDApCiAJCQlsb29wc19wZXJfamlmZnkgPSAqZnAgLyBIWjsKIAkJZWxzZQpAQCAtMjI5LDYgKzE5NCw4IEBACiB7CiAJc3RydWN0IG1waWMgKm1waWM7CiAJcGh5c19hZGRyX3QgbXBpY19wYWRkciA9IDA7CisJdW5zaWduZWQgaW50IGNhc2NhZGVfcGNpX2lycTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnRzaV9wY2k7CiAJc3RydWN0IGRldmljZV9ub2RlICp0c2lfcGljOwogCiAJdHNpX3BpYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOwpAQCAtMjQ2LDI0ICsyMTMsMzEgQEAKIAlEQkcoIiVzOiB0c2kxMDhwaWMgcGh5c19hZGRyID0gMHgleFxuIiwgX19GVU5DVElPTl9fLAogCSAgICAodTMyKSBtcGljX3BhZGRyKTsKIAotCW1waWMgPSBtcGljX2FsbG9jKG1waWNfcGFkZHIsCisJbXBpYyA9IG1waWNfYWxsb2ModHNpX3BpYywgbXBpY19wYWRkciwKIAkJCU1QSUNfUFJJTUFSWSB8IE1QSUNfQklHX0VORElBTiB8IE1QSUNfV0FOVFNfUkVTRVQgfAotCQkJTVBJQ19TUFZfRU9JIHwgTVBJQ19NT0RfSUQoTVBJQ19JRF9UU0kxMDgpLAorCQkJTVBJQ19TUFZfRU9JIHwgTVBJQ19OT19QVEhST1VfRElTIHwgTVBJQ19SRUdTRVRfVFNJMTA4LAogCQkJMCwgLyogbnVtX3NvdXJjZXMgdXNlZCAqLwotCQkJVFNJMTA4X0lSUV9CQVNFLAogCQkJMCwgLyogbnVtX3NvdXJjZXMgdXNlZCAqLwotCQkJTlJfSVJRUyAtIDQgLyogWFhYWCAqLywKLQkJCW1wYzc0NDhfaHBjMl9waWNfaW5pdHNlbnNlcywKLQkJCXNpemVvZihtcGM3NDQ4X2hwYzJfcGljX2luaXRzZW5zZXMpLCAiVHNpMTA4X1BJQyIpOworCQkJIlRzaTEwOF9QSUMiKTsKIAogCUJVR19PTihtcGljID09IE5VTEwpOyAvKiBYWFhYICovCi0KIAltcGljX2luaXQobXBpYyk7Ci0JbXBpY19zZXR1cF9jYXNjYWRlKElSUV9UU0kxMDhfUENJLCB0c2kxMDhfaXJxX2Nhc2NhZGUsIG1waWMpOworCisJdHNpX3BjaSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJwY2kiKTsKKwlpZiAodHNpX3BjaSA9PSAwKSB7CisJCXByaW50aygiJXM6IE5vIHRzaTEwOCBwY2kgbm9kZSBmb3VuZCAhXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJY2FzY2FkZV9wY2lfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAodHNpX3BjaSwgMCk7CisJc2V0X2lycV9kYXRhKGNhc2NhZGVfcGNpX2lycSwgbXBpYyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoY2FzY2FkZV9wY2lfaXJxLCB0c2kxMDhfaXJxX2Nhc2NhZGUpOworCiAJdHNpMTA4X3BjaV9pbnRfaW5pdCgpOwogCiAJLyogQ29uZmlndXJlIE1QSUMgb3V0cHV0cyB0byBDUFUwICovCiAJdHNpMTA4X3dyaXRlX3JlZyhUU0kxMDhfTVBJQ19PRkZTRVQgKyAweDMwYywgMCk7CisJb2Zfbm9kZV9wdXQodHNpX3BpYyk7CiB9CiAKIHZvaWQgbXBjNzQ0OF9ocGMyX3Nob3dfY3B1aW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCkBAIC0zMjAsNiArMjk0LDcgQEAKIAlyZXR1cm4gMDsKIAogfQorCiBkZWZpbmVfbWFjaGluZShtcGM3NDQ4X2hwYzIpewogCS5uYW1lIAkJCT0gIk1QQzc0NDggSFBDMiIsCiAJLnByb2JlIAkJCT0gbXBjNzQ0OF9ocGMyX3Byb2JlLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZwppbmRleCAzZDk1N2EzLi44ODdiNjg4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZwpAQCAtMywxMyArMywxNyBAQAogCWRlcGVuZHMgb24gUFBDX0lTRVJJRVMKIAogY29uZmlnIFZJT0NPTlMKLQl0cmlzdGF0ZSAiaVNlcmllcyBWaXJ0dWFsIENvbnNvbGUgU3VwcG9ydCIKKwl0cmlzdGF0ZSAiaVNlcmllcyBWaXJ0dWFsIENvbnNvbGUgU3VwcG9ydCAoT2Jzb2xldGUpIgorCWhlbHAKKwkgIFRoaXMgaXMgdGhlIG9sZCB2aXJ0dWFsIGNvbnNvbGUgZHJpdmVyIGZvciBsZWdhY3kgaVNlcmllcy4KKwkgIFlvdSBzaG91bGQgdXNlIHRoZSBpU2VyaWVzIEh5cGVydmlzb3IgVmlydHVhbCBDb25zb2xlCisJICBzdXBwb3J0IGluc3RlYWQuCiAKIGNvbmZpZyBWSU9EQVNECiAJdHJpc3RhdGUgImlTZXJpZXMgVmlydHVhbCBJL08gZGlzayBzdXBwb3J0IgogCWhlbHAKIAkgIElmIHlvdSBhcmUgcnVubmluZyBvbiBhbiBpU2VyaWVzIHN5c3RlbSBhbmQgeW91IHdhbnQgdG8gdXNlCi0gCSAgdmlydHVhbCBkaXNrcyBjcmVhdGVkIGFuZCBtYW5hZ2VkIGJ5IE9TLzQwMCwgc2F5IFkuCisJICB2aXJ0dWFsIGRpc2tzIGNyZWF0ZWQgYW5kIG1hbmFnZWQgYnkgT1MvNDAwLCBzYXkgWS4KIAogY29uZmlnIFZJT0NECiAJdHJpc3RhdGUgImlTZXJpZXMgVmlydHVhbCBJL08gQ0Qgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2R0LmMKaW5kZXggZDE5NDE0MC4uZTMwNWRlZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9kdC5jCkBAIC0xLDUgKzEsNiBAQAogLyoKLSAqICAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA2IE1pY2hhZWwgRWxsZXJtYW4sIElCTSBDb3Jwb3JhdGlvbgorICogICAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgTWljaGFlbCBFbGxlcm1hbiwgSUJNIENvcnBvcmF0aW9uCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCwgSUJNIENvcnBvcmF0aW9uCiAgKgogICogICAgRGVzY3JpcHRpb246CiAgKiAgICAgIFRoaXMgZmlsZSBjb250YWlucyBhbGwgdGhlIHJvdXRpbmVzIHRvIGJ1aWxkIGEgZmxhdHRlbmVkIGRldmljZQpAQCAtMzMsMTMgKzM0LDEzIEBACiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9jb25maWcuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsX3htLmg+Ci0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfZXhwX3ZwZF9wYW5lbC5oPgogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKICNpbmNsdWRlICJwcm9jZXNzb3JfdnBkLmgiCiAjaW5jbHVkZSAiY2FsbF9ocHQuaCIKICNpbmNsdWRlICJjYWxsX3BjaS5oIgogI2luY2x1ZGUgInBjaS5oIgorI2luY2x1ZGUgIml0X2V4cF92cGRfcGFuZWwuaCIKIAogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCRyhmbXQuLi4pIHVkYmdfcHJpbnRmKGZtdCkKQEAgLTc2LDYgKzc3LDQzIEBACiBzdGF0aWMgY2hhciBfX2luaXRkYXRhIGRldmljZV90eXBlX3ZkZXZpY2VbXSA9ICJ2ZGV2aWNlIjsKIHN0YXRpYyBjaGFyIF9faW5pdGRhdGEgZGV2aWNlX3R5cGVfdnNjc2lbXSA9ICJ2c2NzaSI7CiAKKworLyogRUJDRElDIHRvIEFTQ0lJIGNvbnZlcnNpb24gcm91dGluZXMgKi8KKworc3RhdGljIHVuc2lnbmVkIGNoYXIgX19pbml0IGUyYSh1bnNpZ25lZCBjaGFyIHgpCit7CisJc3dpdGNoICh4KSB7CisJY2FzZSAweDgxIC4uLiAweDg5OgorCQlyZXR1cm4geCAtIDB4ODEgKyAnYSc7CisJY2FzZSAweDkxIC4uLiAweDk5OgorCQlyZXR1cm4geCAtIDB4OTEgKyAnaic7CisJY2FzZSAweEEyIC4uLiAweEE5OgorCQlyZXR1cm4geCAtIDB4QTIgKyAncyc7CisJY2FzZSAweEMxIC4uLiAweEM5OgorCQlyZXR1cm4geCAtIDB4QzEgKyAnQSc7CisJY2FzZSAweEQxIC4uLiAweEQ5OgorCQlyZXR1cm4geCAtIDB4RDEgKyAnSic7CisJY2FzZSAweEUyIC4uLiAweEU5OgorCQlyZXR1cm4geCAtIDB4RTIgKyAnUyc7CisJY2FzZSAweEYwIC4uLiAweEY5OgorCQlyZXR1cm4geCAtIDB4RjAgKyAnMCc7CisJfQorCXJldHVybiAnICc7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyICogX19pbml0IHN0cm5lMmEodW5zaWduZWQgY2hhciAqZGVzdCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqc3JjLCBzaXplX3QgbikKK3sKKwlpbnQgaTsKKworCW4gPSBzdHJubGVuKHNyYywgbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlkZXN0W2ldID0gZTJhKHNyY1tpXSk7CisKKwlyZXR1cm4gZGVzdDsKK30KKwogc3RhdGljIHN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKiBfX2luaXQgZHRfaW5pdCh2b2lkKQogewogCXN0cnVjdCBpc2VyaWVzX2ZsYXRfZHQgKmR0OwpAQCAtMjk4LDcgKzMzNiw4IEBACiAJZHRfcHJvcF91MzIoZHQsICIjYWRkcmVzcy1jZWxscyIsIDEpOwogCWR0X3Byb3BfdTMyKGR0LCAiI3NpemUtY2VsbHMiLCAwKTsKIAotCWR0X2RvX3ZkZXZpY2UoZHQsICJ2dHkiLCByZWcsIC0xLCBkZXZpY2VfdHlwZV9zZXJpYWwsIE5VTEwsIDEpOworCWR0X2RvX3ZkZXZpY2UoZHQsICJ2dHkiLCByZWcsIC0xLCBkZXZpY2VfdHlwZV9zZXJpYWwsCisJCQkiSUJNLGlTZXJpZXMtdnR5IiwgMSk7CiAJcmVnKys7CiAKIAlkdF9kb192ZGV2aWNlKGR0LCAidi1zY3NpIiwgcmVnLCAtMSwgZGV2aWNlX3R5cGVfdnNjc2ksCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaHZscGNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2h2bHBjb25maWcuYwppbmRleCA2NjNhMWFmLi5mMDQ3NWYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaHZscGNvbmZpZy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9odmxwY29uZmlnLmMKQEAgLTE4LDkgKzE4LDIyIEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9jb25maWcuaD4KKyNpbmNsdWRlICJpdF9scF9uYWNhLmgiCiAKIEh2THBJbmRleCBIdkxwQ29uZmlnX2dldExwSW5kZXhfb3V0bGluZSh2b2lkKQogewogCXJldHVybiBIdkxwQ29uZmlnX2dldExwSW5kZXgoKTsKIH0KIEVYUE9SVF9TWU1CT0woSHZMcENvbmZpZ19nZXRMcEluZGV4X291dGxpbmUpOworCitIdkxwSW5kZXggSHZMcENvbmZpZ19nZXRMcEluZGV4KHZvaWQpCit7CisJcmV0dXJuIGl0THBOYWNhLnhMcEluZGV4OworfQorRVhQT1JUX1NZTUJPTChIdkxwQ29uZmlnX2dldExwSW5kZXgpOworCitIdkxwSW5kZXggSHZMcENvbmZpZ19nZXRQcmltYXJ5THBJbmRleCh2b2lkKQoreworCXJldHVybiBpdExwTmFjYS54UHJpbWFyeUxwSW5kZXg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChIdkxwQ29uZmlnX2dldFByaW1hcnlMcEluZGV4KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMKaW5kZXggZTNiZDIwMS4uZjRjYmJjZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lvbW11LmMKQEAgLTg4LDYgKzg4LDIzIEBACiB9CiAKIC8qCisgKiBTdHJ1Y3R1cmUgcGFzc2VkIHRvIEh2Q2FsbFhtX2dldFRjZVRhYmxlUGFybXMKKyAqLworc3RydWN0IGlvbW11X3RhYmxlX2NiIHsKKwl1bnNpZ25lZCBsb25nCWl0Y19idXNubzsJLyogQnVzIG51bWJlciBmb3IgdGhpcyB0Y2UgdGFibGUgKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19zdGFydDsJLyogV2lsbCBiZSBOVUxMIGZvciBzZWNvbmRhcnkgKi8KKwl1bnNpZ25lZCBsb25nCWl0Y190b3RhbHNpemU7CS8qIFNpemUgKGluIHBhZ2VzKSBvZiB3aG9sZSB0YWJsZSAqLworCXVuc2lnbmVkIGxvbmcJaXRjX29mZnNldDsJLyogSW5kZXggaW50byByZWFsIHRjZSB0YWJsZSBvZiB0aGUKKwkJCQkJICAgc3RhcnQgb2Ygb3VyIHNlY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19zaXplOwkvKiBTaXplIChpbiBwYWdlcykgb2Ygb3VyIHNlY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCWl0Y19pbmRleDsJLyogSW5kZXggb2YgdGhpcyB0Y2UgdGFibGUgKi8KKwl1bnNpZ25lZCBzaG9ydAlpdGNfbWF4dGFibGVzOwkvKiBNYXggbnVtIG9mIHRhYmxlcyBmb3IgcGFydGl0aW9uICovCisJdW5zaWduZWQgY2hhcglpdGNfdmlydGJ1czsJLyogRmxhZyB0byBpbmRpY2F0ZSB2aXJ0dWFsIGJ1cyAqLworCXVuc2lnbmVkIGNoYXIJaXRjX3Nsb3RubzsJLyogSU9BIFRjZSBTbG90IEluZGV4ICovCisJdW5zaWduZWQgY2hhcglpdGNfcnN2ZFs0XTsKK307CisKKy8qCiAgKiBDYWxsIEh2IHdpdGggdGhlIGFyY2hpdGVjdGVkIGRhdGEgc3RydWN0dXJlIHRvIGdldCBUQ0UgdGFibGUgaW5mby4KICAqIGluZm8uIFB1dCB0aGUgcmV0dXJuZWQgZGF0YSBpbnRvIHRoZSBMaW51eCByZXByZXNlbnRhdGlvbiBvZiB0aGUKICAqIFRDRSB0YWJsZSBkYXRhLgpAQCAtMTYyLDcgKzE3OSw3IEBACiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0Ymw7CiAJc3RydWN0IHBjaV9kbiAqcGRuID0gUENJX0ROKGRuKTsKLQl1MzIgKmxzbiA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJsaW51eCxsb2dpY2FsLXNsb3QtbnVtYmVyIiwgTlVMTCk7CisJY29uc3QgdTMyICpsc24gPSBnZXRfcHJvcGVydHkoZG4sICJsaW51eCxsb2dpY2FsLXNsb3QtbnVtYmVyIiwgTlVMTCk7CiAKIAlCVUdfT04obHNuID09IE5VTEwpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfZXhwX3ZwZF9wYW5lbC5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2l0X2V4cF92cGRfcGFuZWwuaApzaW1pbGFyaXR5IGluZGV4IDg5JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfZXhwX3ZwZF9wYW5lbC5oCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXRfZXhwX3ZwZF9wYW5lbC5oCmluZGV4IDMwNGE2MDkuLjZkZTkwOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pdF9leHBfdnBkX3BhbmVsLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2l0X2V4cF92cGRfcGFuZWwuaApAQCAtMTUsOCArMTUsOCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCi0jaWZuZGVmIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lUX0VYVF9WUERfUEFORUxfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfSVNFUklFU19JVF9FWFRfVlBEX1BBTkVMX0gKKyNpZm5kZWYgX1BMQVRGT1JNU19JU0VSSUVTX0lUX0VYVF9WUERfUEFORUxfSAorI2RlZmluZSBfUExBVEZPUk1TX0lTRVJJRVNfSVRfRVhUX1ZQRF9QQU5FTF9ICiAKIC8qCiAgKglUaGlzIHN0cnVjdCBtYXBzIHRoZSBwYW5lbCBpbmZvcm1hdGlvbgpAQCAtNDgsNCArNDgsNCBAQAogCiBleHRlcm4gc3RydWN0IEl0RXh0VnBkUGFuZWwJeEl0RXh0VnBkUGFuZWw7CiAKLSNlbmRpZiAvKiBfQVNNX1BPV0VSUENfSVNFUklFU19JVF9FWFRfVlBEX1BBTkVMX0ggKi8KKyNlbmRpZiAvKiBfUExBVEZPUk1TX0lTRVJJRVNfSVRfRVhUX1ZQRF9QQU5FTF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfbHBfbmFjYS5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2l0X2xwX25hY2EuaApzaW1pbGFyaXR5IGluZGV4IDk1JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfbHBfbmFjYS5oCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXRfbHBfbmFjYS5oCmluZGV4IDRmZGNmMDUuLjliYmY1ODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pdF9scF9uYWNhLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2l0X2xwX25hY2EuaApAQCAtMTUsOCArMTUsOCBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQogICovCi0jaWZuZGVmIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lUX0xQX05BQ0FfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfSVNFUklFU19JVF9MUF9OQUNBX0gKKyNpZm5kZWYgX1BMQVRGT1JNU19JU0VSSUVTX0lUX0xQX05BQ0FfSAorI2RlZmluZSBfUExBVEZPUk1TX0lTRVJJRVNfSVRfTFBfTkFDQV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCkBAIC03Nyw0ICs3Nyw0IEBACiAjZGVmaW5lIElUTFBOQUNBX0hXU1lOQ0VEVEJTCTB4MjAJLyogSGFyZHdhcmUgc3luY2VkIFRCcyAqLwogI2RlZmluZSBJVExQTkFDQV9ITVRJTlQJCTB4MTAJLyogVXRpbGl6ZSBNSFQgZm9yIGludGVycnVwdHMgKi8KIAotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lUX0xQX05BQ0FfSCAqLworI2VuZGlmIC8qIF9QTEFURk9STVNfSVNFUklFU19JVF9MUF9OQUNBX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9scGFyZGF0YS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMKaW5kZXggYTc3Njk0NC4uODE2MjA0OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwYXJkYXRhLmMKQEAgLTEzLDEyICsxMywxMCBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+Ci0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfbmFjYS5oPgogI2luY2x1ZGUgPGFzbS9scHBhY2EuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9yZWdfc2F2ZS5oPgogI2luY2x1ZGUgPGFzbS9wYWNhLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvbHBhcl9tYXAuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9leHBfdnBkX3BhbmVsLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfcXVldWUuaD4KIAogI2luY2x1ZGUgIm5hY2EuaCIKQEAgLTI3LDYgKzI1LDggQEAKICNpbmNsdWRlICJpcGxfcGFybXMuaCIKICNpbmNsdWRlICJwcm9jZXNzb3JfdnBkLmgiCiAjaW5jbHVkZSAicmVsZWFzZV9kYXRhLmgiCisjaW5jbHVkZSAiaXRfZXhwX3ZwZF9wYW5lbC5oIgorI2luY2x1ZGUgIml0X2xwX25hY2EuaCIKIAogLyogVGhlIEh2UmVsZWFzZURhdGEgaXMgdGhlIHJvb3Qgb2YgdGhlIGluZm9ybWF0aW9uIHNoYXJlZCBiZXR3ZWVuCiAgKiB0aGUgaHlwZXJ2aXNvciBhbmQgTGludXguCkBAIC0xMjcsMTQgKzEyNywxMiBAQAogCQkodTY0KWluc3RydWN0aW9uX2FjY2Vzc19zbGJfaVNlcmllcyAvKiAweDQ4MCBJLVNMQiAqLwogCX0KIH07Ci1FWFBPUlRfU1lNQk9MKGl0THBOYWNhKTsKIAogLyogTWF5IGJlIGZpbGxlZCBpbiBieSB0aGUgaHlwZXJ2aXNvciBzbyBjYW5ub3QgZW5kIHVwIGluIHRoZSBCU1MgKi8KIHN0cnVjdCBJdElwbFBhcm1zUmVhbCB4SXRJcGxQYXJtc1JlYWwgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5kYXRhIikpKTsKIAogLyogTWF5IGJlIGZpbGxlZCBpbiBieSB0aGUgaHlwZXJ2aXNvciBzbyBjYW5ub3QgZW5kIHVwIGluIHRoZSBCU1MgKi8KIHN0cnVjdCBJdEV4dFZwZFBhbmVsIHhJdEV4dFZwZFBhbmVsIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuZGF0YSIpKSk7Ci1FWFBPUlRfU1lNQk9MKHhJdEV4dFZwZFBhbmVsKTsKIAogI2RlZmluZSBtYXhQaHlzaWNhbFByb2Nlc3NvcnMgMzIKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2xwZXZlbnRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBldmVudHMuYwppbmRleCAyYTlmODFlLi45OGMxYzI0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBldmVudHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbHBldmVudHMuYwpAQCAtMjAsNyArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2xwX3F1ZXVlLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfbHBfZXZlbnQuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsX2V2ZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXRfbHBfbmFjYS5oPgorI2luY2x1ZGUgIml0X2xwX25hY2EuaCIKIAogLyoKICAqIFRoZSBMcFF1ZXVlIGlzIHVzZWQgdG8gcGFzcyBldmVudCBkYXRhIGZyb20gdGhlIGh5cGVydmlzb3IgdG8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tYWluX3N0b3JlLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvbWFpbl9zdG9yZS5oCmluZGV4IDc0ZjY4ODkuLjFhN2EzZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9tYWluX3N0b3JlLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL21haW5fc3RvcmUuaApAQCAtNjEsOSArNjEsOSBAQAogfTsKIAogLyogTWFpbiBTdG9yZSBWUEQgZm9yIFBvd2VyNCAqLwotc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xIHsKLQl1MzIJY2hpcE1mZ0lECV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQljaGFyCWNoaXBFQ0xldmVsWzRdCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKK3N0cnVjdCBfX2F0dHJpYnV0ZSgocGFja2VkKSkgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEgeworCXUzMgljaGlwTWZnSUQ7CisJY2hhcgljaGlwRUNMZXZlbFs0XTsKIH07CiAKIHN0cnVjdCBJb0hyaU1haW5TdG9yZVZwZElkRGF0YSB7CkBAIC03Myw3MiArNzMsNzIgQEAKIAljaGFyCXNlcmlhbE51bWJlclsxMl07CiB9OwogCi1zdHJ1Y3QgSW9IcmlNYWluU3RvcmVWcGRGcnVEYXRhIHsKLQljaGFyCWZydUxhYmVsWzhdCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl1OAludW1iZXJPZlNsb3RzCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl1OAlwbHVnZ2luZ1R5cGUJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXUxNglzbG90TWFwSW5kZXgJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworc3RydWN0CV9fYXR0cmlidXRlKChwYWNrZWQpKSBJb0hyaU1haW5TdG9yZVZwZEZydURhdGEgeworCWNoYXIJZnJ1TGFiZWxbOF07CisJdTgJbnVtYmVyT2ZTbG90czsKKwl1OAlwbHVnZ2luZ1R5cGU7CisJdTE2CXNsb3RNYXBJbmRleDsKIH07CiAKLXN0cnVjdCBJb0hyaU1haW5TdG9yZUFkclJhbmdlQmxvY2sgewotCXZvaWQJKmJsb2NrU3RhcnQgICAgICBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jdm9pZAkqYmxvY2tFbmQgICAgICAgIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl1MzIJYmxvY2tQcm9jQ2hpcElkIF9fYXR0cmlidXRlKChwYWNrZWQpKTsKK3N0cnVjdCAgX19hdHRyaWJ1dGUoKHBhY2tlZCkpIElvSHJpTWFpblN0b3JlQWRyUmFuZ2VCbG9jayB7CisJdm9pZAkqYmxvY2tTdGFydDsKKwl2b2lkCSpibG9ja0VuZDsKKwl1MzIJYmxvY2tQcm9jQ2hpcElkOwogfTsKIAogI2RlZmluZSBNYXhBcmVhQWRyUmFuZ2VCbG9ja3MgNAogCi1zdHJ1Y3QgSW9IcmlNYWluU3RvcmVBcmVhNCB7Ci0JdTMyCW1zVnBkRm9ybWF0CQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXU4CWNvbnRhaW5lZFZwZFR5cGUJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl1OAlyZXNlcnZlZDEJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTE2CXJlc2VydmVkMgkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKK3N0cnVjdCBfX2F0dHJpYnV0ZSgocGFja2VkKSkgSW9IcmlNYWluU3RvcmVBcmVhNCB7CisJdTMyCW1zVnBkRm9ybWF0OworCXU4CWNvbnRhaW5lZFZwZFR5cGU7CisJdTgJcmVzZXJ2ZWQxOworCXUxNglyZXNlcnZlZDI7CiAKLQl1NjQJbXNFeGlzdHMJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTY0CW1zRnVuY3Rpb25hbAkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1NjQJbXNFeGlzdHM7CisJdTY0CW1zRnVuY3Rpb25hbDsKIAotCXUzMgltZW1vcnlTaXplCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXUzMglwcm9jTm9kZUlkCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXUzMgltZW1vcnlTaXplOworCXUzMglwcm9jTm9kZUlkOwogCi0JdTMyCW51bUFkclJhbmdlQmxvY2tzCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQWRyUmFuZ2VCbG9jayB4QWRyUmFuZ2VCbG9ja1tNYXhBcmVhQWRyUmFuZ2VCbG9ja3NdCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1MzIJbnVtQWRyUmFuZ2VCbG9ja3M7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQWRyUmFuZ2VCbG9jayB4QWRyUmFuZ2VCbG9ja1tNYXhBcmVhQWRyUmFuZ2VCbG9ja3NdOwogCi0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvMAlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvMQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvMglfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvMwlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvNAlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvNQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvNglfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0Jc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvNwlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvMDsKKwlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEJY2hpcEluZm8xOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzI7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvMzsKKwlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEJY2hpcEluZm80OworCXN0cnVjdCBJb0hyaU1haW5TdG9yZUNoaXBJbmZvMQljaGlwSW5mbzU7CisJc3RydWN0IElvSHJpTWFpblN0b3JlQ2hpcEluZm8xCWNoaXBJbmZvNjsKKwlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVDaGlwSW5mbzEJY2hpcEluZm83OwogCi0Jdm9pZAkqbXNSYW1BcmVhQXJyYXkJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTMyCW1zUmFtQXJlYUFycmF5TnVtRW50cmllcwlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTMyCW1zUmFtQXJlYUFycmF5RW50cnlTaXplCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdm9pZAkqbXNSYW1BcmVhQXJyYXk7CisJdTMyCW1zUmFtQXJlYUFycmF5TnVtRW50cmllczsKKwl1MzIJbXNSYW1BcmVhQXJyYXlFbnRyeVNpemU7CiAKLQl1MzIJbnVtYURpbW1FeGlzdHMJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTMyCW51bWFEaW1tRnVuY3Rpb25hbAkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXZvaWQJKm51bWFEaW1tQXJyYXkJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTMyCW51bWFEaW1tQXJyYXlOdW1FbnRyaWVzCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTMyCW51bWFEaW1tQXJyYXlFbnRyeVNpemUJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1MzIJbnVtYURpbW1FeGlzdHM7CisJdTMyCW51bWFEaW1tRnVuY3Rpb25hbDsKKwl2b2lkCSpudW1hRGltbUFycmF5OworCXUzMgludW1hRGltbUFycmF5TnVtRW50cmllczsKKwl1MzIJbnVtYURpbW1BcnJheUVudHJ5U2l6ZTsKIAotCXN0cnVjdCBJb0hyaU1haW5TdG9yZVZwZElkRGF0YSBpZERhdGEJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXN0cnVjdCBJb0hyaU1haW5TdG9yZVZwZElkRGF0YSBpZERhdGE7CiAKLQl1NjQJcG93ZXJEYXRhCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXU2NAljYXJkQXNzZW1ibHlQYXJ0TnVtCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTY0CWNoaXBTZXJpYWxOdW0JCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7CisJdTY0CXBvd2VyRGF0YTsKKwl1NjQJY2FyZEFzc2VtYmx5UGFydE51bTsKKwl1NjQJY2hpcFNlcmlhbE51bTsKIAotCXU2NAlyZXNlcnZlZDMJCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JY2hhcglyZXNlcnZlZDRbMTZdCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOworCXU2NAlyZXNlcnZlZDM7CisJY2hhcglyZXNlcnZlZDRbMTZdOwogCi0Jc3RydWN0IElvSHJpTWFpblN0b3JlVnBkRnJ1RGF0YSBmcnVEYXRhCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwlzdHJ1Y3QgSW9IcmlNYWluU3RvcmVWcGRGcnVEYXRhIGZydURhdGE7CiAKLQl1OAl2cGRQb3J0TnVtCQkJX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCXU4CXJlc2VydmVkNQkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl1OAlmcmFtZUlkCQkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQl1OAlyYWNrVW5pdAkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKLQljaGFyCWFzY2lpS2V5d29yZFZwZFsyNTZdCQlfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JdTMyCXJlc2VydmVkNgkJCV9fYXR0cmlidXRlKChwYWNrZWQpKTsKKwl1OAl2cGRQb3J0TnVtOworCXU4CXJlc2VydmVkNTsKKwl1OAlmcmFtZUlkOworCXU4CXJhY2tVbml0OworCWNoYXIJYXNjaWlLZXl3b3JkVnBkWzI1Nl07CisJdTMyCXJlc2VydmVkNjsKIH07CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3BjaS5jCmluZGV4IDM1YmNjOTguLjNlYjEyMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvcGNpLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9hYnNfYWRkci5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgogCiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfY2FsbF94bS5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL21mLmg+CkBAIC0xNzYsMTIgKzE3NywxMiBAQAogCX0KIAl3aGlsZSAoKG5vZGUgPSBvZl9nZXRfbmV4dF9jaGlsZChyb290LCBub2RlKSkgIT0gTlVMTCkgewogCQlIdkJ1c051bWJlciBidXM7Ci0JCXUzMiAqYnVzcDsKKwkJY29uc3QgdTMyICpidXNwOwogCiAJCWlmICgobm9kZS0+dHlwZSA9PSBOVUxMKSB8fCAoc3RyY21wKG5vZGUtPnR5cGUsICJwY2kiKSAhPSAwKSkKIAkJCWNvbnRpbnVlOwogCi0JCWJ1c3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5vZGUsICJidXMtcmFuZ2UiLCBOVUxMKTsKKwkJYnVzcCA9IGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgTlVMTCk7CiAJCWlmIChidXNwID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJYnVzID0gKmJ1c3A7CkBAIC0yMjEsMTAgKzIyMiw5IEBACiAKIAkJaWYgKG5vZGUgIT0gTlVMTCkgewogCQkJc3RydWN0IHBjaV9kbiAqcGRuID0gUENJX0ROKG5vZGUpOwotCQkJdTMyICphZ2VudDsKKwkJCWNvbnN0IHUzMiAqYWdlbnQ7CiAKLQkJCWFnZW50ID0gKHUzMiAqKWdldF9wcm9wZXJ0eShub2RlLCAibGludXgsYWdlbnQtaWQiLAotCQkJCQlOVUxMKTsKKwkJCWFnZW50ID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJsaW51eCxhZ2VudC1pZCIsIE5VTEwpOwogCQkJaWYgKChwZG4gIT0gTlVMTCkgJiYgKGFnZW50ICE9IE5VTEwpKSB7CiAJCQkJdTggaXJxID0gaVNlcmllc19hbGxvY2F0ZV9JUlEocGRuLT5idXNubywgMCwKIAkJCQkJCXBkbi0+YnVzc3Vibm8pOwpAQCAtMjcxLDQ2ICsyNzEsNiBAQAogfQogCiAvKgotICogSS8wIE1lbW9yeSBjb3B5IE1VU1QgdXNlIG1taW8gY29tbWFuZHMgb24gaVNlcmllcwotICogVG8gZG87IEZvciBwZXJmb3JtYW5jZSwgaW5jbHVkZSB0aGUgaHYgY2FsbCBkaXJlY3RseQotICovCi12b2lkIGlTZXJpZXNfbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqZGVzdCwgY2hhciBjLCBzaXplX3QgQ291bnQpCi17Ci0JdTggQnl0ZVZhbHVlID0gYzsKLQlsb25nIE51bWJlck9mQnl0ZXMgPSBDb3VudDsKLQotCXdoaWxlIChOdW1iZXJPZkJ5dGVzID4gMCkgewotCQlpU2VyaWVzX1dyaXRlX0J5dGUoQnl0ZVZhbHVlLCBkZXN0KyspOwotCQktLSBOdW1iZXJPZkJ5dGVzOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woaVNlcmllc19tZW1zZXRfaW8pOwotCi12b2lkIGlTZXJpZXNfbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkZXN0LCB2b2lkICpzb3VyY2UsIHNpemVfdCBjb3VudCkKLXsKLQljaGFyICpzcmMgPSBzb3VyY2U7Ci0JbG9uZyBOdW1iZXJPZkJ5dGVzID0gY291bnQ7Ci0KLQl3aGlsZSAoTnVtYmVyT2ZCeXRlcyA+IDApIHsKLQkJaVNlcmllc19Xcml0ZV9CeXRlKCpzcmMrKywgZGVzdCsrKTsKLQkJLS0gTnVtYmVyT2ZCeXRlczsKLQl9Ci19Ci1FWFBPUlRfU1lNQk9MKGlTZXJpZXNfbWVtY3B5X3RvaW8pOwotCi12b2lkIGlTZXJpZXNfbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywgc2l6ZV90IGNvdW50KQotewotCWNoYXIgKmRzdCA9IGRlc3Q7Ci0JbG9uZyBOdW1iZXJPZkJ5dGVzID0gY291bnQ7Ci0KLQl3aGlsZSAoTnVtYmVyT2ZCeXRlcyA+IDApIHsKLQkJKmRzdCsrID0gaVNlcmllc19SZWFkX0J5dGUoc3JjKyspOwotCQktLSBOdW1iZXJPZkJ5dGVzOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woaVNlcmllc19tZW1jcHlfZnJvbWlvKTsKLQotLyoKICAqIExvb2sgZG93biB0aGUgY2hhaW4gdG8gZmluZCB0aGUgbWF0Y2hpbmcgRGV2aWNlIERldmljZQogICovCiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX0RldmljZV9Ob2RlKGludCBidXMsIGludCBkZXZmbikKQEAgLTQ5Miw3ICs0NTIsNyBAQAogICogaVNlcmllc19SZWFkX1dvcmQgPSBSZWFkIFdvcmQgICgxNiBiaXQpCiAgKiBpU2VyaWVzX1JlYWRfTG9uZyA9IFJlYWQgTG9uZyAgKDMyIGJpdCkKICAqLwotdTggaVNlcmllc19SZWFkX0J5dGUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpJb0FkZHJlc3MpCitzdGF0aWMgdTggaVNlcmllc19SZWFkX0J5dGUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpJb0FkZHJlc3MpCiB7CiAJdTY0IEJhck9mZnNldDsKIAl1NjQgZHNhOwpAQCAtNTE5LDkgKzQ3OSw4IEBACiAKIAlyZXR1cm4gKHU4KXJldC52YWx1ZTsKIH0KLUVYUE9SVF9TWU1CT0woaVNlcmllc19SZWFkX0J5dGUpOwogCi11MTYgaVNlcmllc19SZWFkX1dvcmQoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpJb0FkZHJlc3MpCitzdGF0aWMgdTE2IGlTZXJpZXNfUmVhZF9Xb3JkKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqSW9BZGRyZXNzKQogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKQEAgLTU0OSw5ICs1MDgsOCBAQAogCiAJcmV0dXJuIHN3YWIxNigodTE2KXJldC52YWx1ZSk7CiB9Ci1FWFBPUlRfU1lNQk9MKGlTZXJpZXNfUmVhZF9Xb3JkKTsKIAotdTMyIGlTZXJpZXNfUmVhZF9Mb25nKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqSW9BZGRyZXNzKQorc3RhdGljIHUzMiBpU2VyaWVzX1JlYWRfTG9uZyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKklvQWRkcmVzcykKIHsKIAl1NjQgQmFyT2Zmc2V0OwogCXU2NCBkc2E7CkBAIC01NzksNyArNTM3LDYgQEAKIAogCXJldHVybiBzd2FiMzIoKHUzMilyZXQudmFsdWUpOwogfQotRVhQT1JUX1NZTUJPTChpU2VyaWVzX1JlYWRfTG9uZyk7CiAKIC8qCiAgKiBXcml0ZSBNTSBJL08gSW5zdHJ1Y3Rpb25zIGZvciB0aGUgaVNlcmllcwpAQCAtNTg4LDcgKzU0NSw3IEBACiAgKiBpU2VyaWVzX1dyaXRlX1dvcmQgPSBXcml0ZSBXb3JkKDE2IGJpdCkKICAqIGlTZXJpZXNfV3JpdGVfTG9uZyA9IFdyaXRlIExvbmcoMzIgYml0KQogICovCi12b2lkIGlTZXJpZXNfV3JpdGVfQnl0ZSh1OCBkYXRhLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKklvQWRkcmVzcykKK3N0YXRpYyB2b2lkIGlTZXJpZXNfV3JpdGVfQnl0ZSh1OCBkYXRhLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKklvQWRkcmVzcykKIHsKIAl1NjQgQmFyT2Zmc2V0OwogCXU2NCBkc2E7CkBAIC02MTMsOSArNTcwLDggQEAKIAkJcmMgPSBIdkNhbGw0KEh2Q2FsbFBjaUJhclN0b3JlOCwgZHNhLCBCYXJPZmZzZXQsIGRhdGEsIDApOwogCX0gd2hpbGUgKENoZWNrUmV0dXJuQ29kZSgiV1dCIiwgRGV2Tm9kZSwgJnJldHJ5LCByYykgIT0gMCk7CiB9Ci1FWFBPUlRfU1lNQk9MKGlTZXJpZXNfV3JpdGVfQnl0ZSk7CiAKLXZvaWQgaVNlcmllc19Xcml0ZV9Xb3JkKHUxNiBkYXRhLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKklvQWRkcmVzcykKK3N0YXRpYyB2b2lkIGlTZXJpZXNfV3JpdGVfV29yZCh1MTYgZGF0YSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpJb0FkZHJlc3MpCiB7CiAJdTY0IEJhck9mZnNldDsKIAl1NjQgZHNhOwpAQCAtNjQwLDkgKzU5Niw4IEBACiAJCXJjID0gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTE2LCBkc2EsIEJhck9mZnNldCwgc3dhYjE2KGRhdGEpLCAwKTsKIAl9IHdoaWxlIChDaGVja1JldHVybkNvZGUoIldXVyIsIERldk5vZGUsICZyZXRyeSwgcmMpICE9IDApOwogfQotRVhQT1JUX1NZTUJPTChpU2VyaWVzX1dyaXRlX1dvcmQpOwogCi12b2lkIGlTZXJpZXNfV3JpdGVfTG9uZyh1MzIgZGF0YSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpJb0FkZHJlc3MpCitzdGF0aWMgdm9pZCBpU2VyaWVzX1dyaXRlX0xvbmcodTMyIGRhdGEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqSW9BZGRyZXNzKQogewogCXU2NCBCYXJPZmZzZXQ7CiAJdTY0IGRzYTsKQEAgLTY2Nyw0ICs2MjIsMjI0IEBACiAJCXJjID0gSHZDYWxsNChIdkNhbGxQY2lCYXJTdG9yZTMyLCBkc2EsIEJhck9mZnNldCwgc3dhYjMyKGRhdGEpLCAwKTsKIAl9IHdoaWxlIChDaGVja1JldHVybkNvZGUoIldXTCIsIERldk5vZGUsICZyZXRyeSwgcmMpICE9IDApOwogfQotRVhQT1JUX1NZTUJPTChpU2VyaWVzX1dyaXRlX0xvbmcpOworCitleHRlcm4gdW5zaWduZWQgY2hhciBfX3Jhd19yZWFkYihjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2ZvcmNlICopYWRkcjsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZGIpOworCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYXdfcmVhZHcoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKilhZGRyOworfQorRVhQT1JUX1NZTUJPTChfX3Jhd19yZWFkdyk7CisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19yYXdfcmVhZGwoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQoreworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCBfX2ZvcmNlICopYWRkcjsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZGwpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX3Jhd19yZWFkcShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2ZvcmNlICopYWRkcjsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHEpOworCitleHRlcm4gdm9pZCBfX3Jhd193cml0ZWIodW5zaWduZWQgY2hhciB2LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9fZm9yY2UgKilhZGRyID0gdjsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfd3JpdGViKTsKKworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGV3KHVuc2lnbmVkIHNob3J0IHYsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9fZm9yY2UgKilhZGRyID0gdjsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfd3JpdGV3KTsKKworZXh0ZXJuIHZvaWQgX19yYXdfd3JpdGVsKHVuc2lnbmVkIGludCB2LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKWFkZHIgPSB2OworfQorRVhQT1JUX1NZTUJPTChfX3Jhd193cml0ZWwpOworCitleHRlcm4gdm9pZCBfX3Jhd193cml0ZXEodW5zaWduZWQgbG9uZyB2LCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9fZm9yY2UgKilhZGRyID0gdjsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfd3JpdGVxKTsKKworaW50IGluXzgoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyKQoreworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlyZXR1cm4gaVNlcmllc19SZWFkX0J5dGUoYWRkcik7CisJcmV0dXJuIF9faW5fOChhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW5fOCk7CisKK3ZvaWQgb3V0Xzgodm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQoreworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlpU2VyaWVzX1dyaXRlX0J5dGUodmFsLCBhZGRyKTsKKwllbHNlCisJCV9fb3V0XzgoYWRkciwgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0wob3V0XzgpOworCitpbnQgaW5fbGUxNihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyKQoreworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlyZXR1cm4gaVNlcmllc19SZWFkX1dvcmQoYWRkcik7CisJcmV0dXJuIF9faW5fbGUxNihhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW5fbGUxNik7CisKK2ludCBpbl9iZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJcmV0dXJuIF9faW5fYmUxNihhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woaW5fYmUxNik7CisKK3ZvaWQgb3V0X2xlMTYodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKK3sKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJaVNlcmllc19Xcml0ZV9Xb3JkKHZhbCwgYWRkcik7CisJZWxzZQorCQlfX291dF9sZTE2KGFkZHIsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MKG91dF9sZTE2KTsKKwordm9pZCBvdXRfYmUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQoreworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCV9fb3V0X2JlMTYoYWRkciwgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0wob3V0X2JlMTYpOworCit1bnNpZ25lZCBpbl9sZTMyKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCit7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXJldHVybiBpU2VyaWVzX1JlYWRfTG9uZyhhZGRyKTsKKwlyZXR1cm4gX19pbl9sZTMyKGFkZHIpOworfQorRVhQT1JUX1NZTUJPTChpbl9sZTMyKTsKKwordW5zaWduZWQgaW5fYmUzMihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyKQoreworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCXJldHVybiBfX2luX2JlMzIoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKGluX2JlMzIpOworCit2b2lkIG91dF9sZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCit7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCWlTZXJpZXNfV3JpdGVfTG9uZyh2YWwsIGFkZHIpOworCWVsc2UKKwkJX19vdXRfbGUzMihhZGRyLCB2YWwpOworfQorRVhQT1JUX1NZTUJPTChvdXRfbGUzMik7CisKK3ZvaWQgb3V0X2JlMzIodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKK3sKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwlfX291dF9iZTMyKGFkZHIsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MKG91dF9iZTMyKTsKKwordW5zaWduZWQgbG9uZyBpbl9sZTY0KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkcikKK3sKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwlyZXR1cm4gX19pbl9sZTY0KGFkZHIpOworfQorRVhQT1JUX1NZTUJPTChpbl9sZTY0KTsKKwordW5zaWduZWQgbG9uZyBpbl9iZTY0KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkcikKK3sKKwlCVUdfT04oZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSk7CisKKwlyZXR1cm4gX19pbl9iZTY0KGFkZHIpOworfQorRVhQT1JUX1NZTUJPTChpbl9iZTY0KTsKKwordm9pZCBvdXRfbGU2NCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCUJVR19PTihmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKTsKKworCV9fb3V0X2xlNjQoYWRkciwgdmFsKTsKK30KK0VYUE9SVF9TWU1CT0wob3V0X2xlNjQpOworCit2b2lkIG91dF9iZTY0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJQlVHX09OKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpOworCisJX19vdXRfYmU2NChhZGRyLCB2YWwpOworfQorRVhQT1JUX1NZTUJPTChvdXRfYmU2NCk7CisKK3ZvaWQgbWVtc2V0X2lvKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkciwgaW50IGMsIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkgeworCQl2b2xhdGlsZSBjaGFyIF9faW9tZW0gKmQgPSBhZGRyOworCisJCXdoaWxlIChuLS0gPiAwKSB7CisJCQlpU2VyaWVzX1dyaXRlX0J5dGUoYywgZCsrKTsKKwkJfQorCX0gZWxzZQorCQllZWhfbWVtc2V0X2lvKGFkZHIsIGMsIG4pOworfQorRVhQT1JUX1NZTUJPTChtZW1zZXRfaW8pOworCit2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqZGVzdCwgY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG4pCit7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpIHsKKwkJY2hhciAqZCA9IGRlc3Q7CisJCWNvbnN0IHZvbGF0aWxlIGNoYXIgX19pb21lbSAqcyA9IHNyYzsKKworCQl3aGlsZSAobi0tID4gMCkgeworCQkJKmQrKyA9IGlTZXJpZXNfUmVhZF9CeXRlKHMrKyk7CisJCX0KKwl9IGVsc2UKKwkJZWVoX21lbWNweV9mcm9taW8oZGVzdCwgc3JjLCBuKTsKK30KK0VYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pbyk7CisKK3ZvaWQgbWVtY3B5X3RvaW8odm9sYXRpbGUgdm9pZCBfX2lvbWVtICpkZXN0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgbikKK3sKKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkgeworCQljb25zdCBjaGFyICpzID0gc3JjOworCQl2b2xhdGlsZSBjaGFyIF9faW9tZW0gKmQgPSBkZXN0OworCisJCXdoaWxlIChuLS0gPiAwKSB7CisJCQlpU2VyaWVzX1dyaXRlX0J5dGUoKnMrKywgZCsrKTsKKwkJfQorCX0gZWxzZQorCQllZWhfbWVtY3B5X3RvaW8oZGVzdCwgc3JjLCBuKTsKK30KK0VYUE9SVF9TWU1CT0wobWVtY3B5X3RvaW8pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYwppbmRleCBjOTYwNWQ3Ny4uN2YxOTUzMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3NldHVwLmMKQEAgLTU5LDYgKzU5LDcgQEAKICNpbmNsdWRlICJpcnEuaCIKICNpbmNsdWRlICJ2cGRfYXJlYXMuaCIKICNpbmNsdWRlICJwcm9jZXNzb3JfdnBkLmgiCisjaW5jbHVkZSAiaXRfbHBfbmFjYS5oIgogI2luY2x1ZGUgIm1haW5fc3RvcmUuaCIKICNpbmNsdWRlICJjYWxsX3NtLmgiCiAjaW5jbHVkZSAiY2FsbF9ocHQuaCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdmlvcGF0aC5jCmluZGV4IDYyMmEzMDEuLjliYWE0ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92aW9wYXRoLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3Zpb3BhdGguYwpAQCAtNDEsOCArNDEsOCBAQAogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2l0X2V4cF92cGRfcGFuZWwuaD4KICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9scF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2NvbmZpZy5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL21mLmg+CkBAIC0xMTYsNiArMTE2LDggQEAKIAlkbWFfYWRkcl90IGhhbmRsZTsKIAlIdkxwRXZlbnRfUmMgaHZyYzsKIAlERUNMQVJFX01VVEVYX0xPQ0tFRChTZW1hcGhvcmUpOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKKwljb25zdCBjaGFyICpzeXNpZDsKIAogCWJ1ZiA9IGttYWxsb2MoSFdfUEFHRV9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKQEAgLTE0MywyMCArMTQ1LDI2IEBACiAKIAlidWZbSFdfUEFHRV9TSVpFLTFdID0gJ1wwJzsKIAlzZXFfcHJpbnRmKG0sICIlcyIsIGJ1Zik7Ci0Jc2VxX3ByaW50ZihtLCAiQVZBSUxBQkxFX1ZFVEg9JXhcbiIsIHZsYW5NYXApOwotCXNlcV9wcmludGYobSwgIlNSTE5CUj0lYyVjJWMlYyVjJWMlY1xuIiwKLQkJICAgZTJhKHhJdEV4dFZwZFBhbmVsLm1mZ0lEWzJdKSwKLQkJICAgZTJhKHhJdEV4dFZwZFBhbmVsLm1mZ0lEWzNdKSwKLQkJICAgZTJhKHhJdEV4dFZwZFBhbmVsLnN5c3RlbVNlcmlhbFsxXSksCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5zeXN0ZW1TZXJpYWxbMl0pLAotCQkgICBlMmEoeEl0RXh0VnBkUGFuZWwuc3lzdGVtU2VyaWFsWzNdKSwKLQkJICAgZTJhKHhJdEV4dFZwZFBhbmVsLnN5c3RlbVNlcmlhbFs0XSksCi0JCSAgIGUyYSh4SXRFeHRWcGRQYW5lbC5zeXN0ZW1TZXJpYWxbNV0pKTsKIAogCWRtYV91bm1hcF9zaW5nbGUoaVNlcmllc192aW9fZGV2LCBoYW5kbGUsIEhXX1BBR0VfU0laRSwKIAkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCWtmcmVlKGJ1Zik7CiAKKwlzZXFfcHJpbnRmKG0sICJBVkFJTEFCTEVfVkVUSD0leFxuIiwgdmxhbk1hcCk7CisKKwlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKKwlzeXNpZCA9IE5VTEw7CisJaWYgKG5vZGUgIT0gTlVMTCkKKwkJc3lzaWQgPSBnZXRfcHJvcGVydHkobm9kZSwgInN5c3RlbS1pZCIsIE5VTEwpOworCisJaWYgKHN5c2lkID09IE5VTEwpCisJCXNlcV9wcmludGYobSwgIlNSTE5CUj08VU5LTk9XTj5cbiIpOworCWVsc2UKKwkJLyogU2tpcCAiSUJNLCIgb24gZnJvbnQgb2Ygc2VyaWFsIG51bWJlciwgc2VlIGR0LmMgKi8KKwkJc2VxX3ByaW50ZihtLCAiU1JMTkJSPSVzXG4iLCBzeXNpZCArIDQpOworCisJb2Zfbm9kZV9wdXQobm9kZSk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3ZwZGluZm8uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy92cGRpbmZvLmMKaW5kZXggMjNhNmQxZS4uOWY4Mzg3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL3ZwZGluZm8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvdnBkaW5mby5jCkBAIC0xODgsNyArMTg4LDcgQEAKIHsKIAl1OCAqVGFnUHRyID0gVnBkRGF0YTsKIAlpbnQgRGF0YUxlbiA9IFZwZERhdGFMZW4gLSAzOwotCXU4IFBoYklkOworCXU4IFBoYklkID0gMHhmZjsKIAogCXdoaWxlICgoKlRhZ1B0ciAhPSBWcGRFbmRPZkFyZWFUYWcpICYmIChEYXRhTGVuID4gMCkpIHsKIAkJaW50IEFyZWFMZW4gPSAqKFRhZ1B0ciArIDEpICsgKCooVGFnUHRyICsgMikgKiAyNTYpOwpAQCAtMjA1LDE1ICsyMDUsMTYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBpU2VyaWVzX0dldF9Mb2NhdGlvbl9Db2RlKHUxNiBidXMsIEh2QWdlbnRJZCBhZ2VudCwKK3N0YXRpYyBpbnQgX19pbml0IGlTZXJpZXNfR2V0X0xvY2F0aW9uX0NvZGUodTE2IGJ1cywgSHZBZ2VudElkIGFnZW50LAogCQl1OCAqZnJhbWUsIGNoYXIgY2FyZFs0XSkKIHsKKwlpbnQgc3RhdHVzID0gMDsKIAlpbnQgQnVzVnBkTGVuID0gMDsKIAl1OCAqQnVzVnBkUHRyID0ga21hbGxvYyhCVVNfVlBEU0laRSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoQnVzVnBkUHRyID09IE5VTEwpIHsKIAkJcHJpbnRrKCJQQ0k6IEJ1cyBWUEQgQnVmZmVyIGFsbG9jYXRpb24gZmFpbHVyZS5cbiIpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KIAlCdXNWcGRMZW4gPSBIdkNhbGxQY2lfZ2V0QnVzVnBkKGJ1cywgaXNlcmllc19odl9hZGRyKEJ1c1ZwZFB0ciksCiAJCQkJCUJVU19WUERTSVpFKTsKQEAgLTIyOCw4ICsyMjksMTAgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAJaVNlcmllc19QYXJzZV9WcGQoQnVzVnBkUHRyLCBCdXNWcGRMZW4sIGFnZW50LCBmcmFtZSwgY2FyZCk7CisJc3RhdHVzID0gMTsKIG91dF9mcmVlOgogCWtmcmVlKEJ1c1ZwZFB0cik7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogLyoKQEAgLTI0Niw3ICsyNDksNyBAQAogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqRGV2Tm9kZSA9IFBjaURldi0+c3lzZGF0YTsKIAlzdHJ1Y3QgcGNpX2RuICpwZG47CiAJdTE2IGJ1czsKLQl1OCBmcmFtZTsKKwl1OCBmcmFtZSA9IDA7CiAJY2hhciBjYXJkWzRdOwogCUh2U3ViQnVzTnVtYmVyIHN1YmJ1czsKIAlIdkFnZW50SWQgYWdlbnQ7CkBAIC0yNjIsMTAgKzI2NSwxMSBAQAogCXN1YmJ1cyA9IHBkbi0+YnVzc3Vibm87CiAJYWdlbnQgPSBJU0VSSUVTX1BDSV9BR0VOVElEKElTRVJJRVNfR0VUX0RFVklDRV9GUk9NX1NVQkJVUyhzdWJidXMpLAogCQkJSVNFUklFU19HRVRfRlVOQ1RJT05fRlJPTV9TVUJCVVMoc3ViYnVzKSk7Ci0JaVNlcmllc19HZXRfTG9jYXRpb25fQ29kZShidXMsIGFnZW50LCAmZnJhbWUsIGNhcmQpOwogCi0JcHJpbnRrKCIlZC4gUENJOiBCdXMlM2QsIERldmljZSUzZCwgVmVuZG9yICUwNFggRnJhbWUlM2QsIENhcmQgJTRzICAiLAotCQkJY291bnQsIGJ1cywgUENJX1NMT1QoUGNpRGV2LT5kZXZmbiksIFBjaURldi0+dmVuZG9yLAotCQkJZnJhbWUsIGNhcmQpOwotCXByaW50aygiMHglMDRYXG4iLCAoaW50KShQY2lEZXYtPmNsYXNzID4+IDgpKTsKKwlpZiAoaVNlcmllc19HZXRfTG9jYXRpb25fQ29kZShidXMsIGFnZW50LCAmZnJhbWUsIGNhcmQpKSB7CisJCXByaW50aygiJWQuIFBDSTogQnVzJTNkLCBEZXZpY2UlM2QsIFZlbmRvciAlMDRYIEZyYW1lJTNkLCAiCisJCQkiQ2FyZCAlNHMgIDB4JTA0WFxuIiwgY291bnQsIGJ1cywKKwkJCVBDSV9TTE9UKFBjaURldi0+ZGV2Zm4pLCBQY2lEZXYtPnZlbmRvciwgZnJhbWUsCisJCQljYXJkLCAoaW50KShQY2lEZXYtPmNsYXNzID4+IDgpKTsKKwl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9wY2kuYwppbmRleCA2M2ExNjcwLi5jM2FhNDZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKQEAgLTM4LDE2ICszOCwxNiBAQAogc3RhdGljIGludCBfX2luaXQgZml4dXBfb25lX2xldmVsX2J1c19yYW5nZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIGludCBoaWdoZXIpCiB7CiAJZm9yICg7IG5vZGUgIT0gMDtub2RlID0gbm9kZS0+c2libGluZykgewotCQlpbnQgKiBidXNfcmFuZ2U7Ci0JCXVuc2lnbmVkIGludCAqY2xhc3NfY29kZTsKKwkJY29uc3QgaW50ICpidXNfcmFuZ2U7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqY2xhc3NfY29kZTsKIAkJaW50IGxlbjsKIAogCQkvKiBGb3IgUENJPC0+UENJIGJyaWRnZXMgb3IgQ2FyZEJ1cyBicmlkZ2VzLCB3ZSBnbyBkb3duICovCi0JCWNsYXNzX2NvZGUgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAiY2xhc3MtY29kZSIsIE5VTEwpOworCQljbGFzc19jb2RlID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJjbGFzcy1jb2RlIiwgTlVMTCk7CiAJCWlmICghY2xhc3NfY29kZSB8fCAoKCpjbGFzc19jb2RlID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJICYmCiAJCQkoKmNsYXNzX2NvZGUgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTKSkKIAkJCWNvbnRpbnVlOwotCQlidXNfcmFuZ2UgPSAoaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJCWJ1c19yYW5nZSA9IGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CiAJCWlmIChidXNfcmFuZ2UgIT0gTlVMTCAmJiBsZW4gPiAyICogc2l6ZW9mKGludCkpIHsKIAkJCWlmIChidXNfcmFuZ2VbMV0gPiBoaWdoZXIpCiAJCQkJaGlnaGVyID0gYnVzX3JhbmdlWzFdOwpAQCAtNjUsMzAgKzY1LDM2IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9idXNfcmFuZ2Uoc3RydWN0IGRldmljZV9ub2RlICpicmlkZ2UpCiB7Ci0JaW50ICogYnVzX3JhbmdlOworCWludCAqYnVzX3JhbmdlOworCXN0cnVjdCBwcm9wZXJ0eSAqcHJvcDsKIAlpbnQgbGVuOwogCiAJLyogTG9va3VwIHRoZSAiYnVzLXJhbmdlIiBwcm9wZXJ0eSBmb3IgdGhlIGhvc2UgKi8KLQlidXNfcmFuZ2UgPSAoaW50ICopIGdldF9wcm9wZXJ0eShicmlkZ2UsICJidXMtcmFuZ2UiLCAmbGVuKTsKLQlpZiAoYnVzX3JhbmdlID09IE5VTEwgfHwgbGVuIDwgMiAqIHNpemVvZihpbnQpKSB7CisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoYnJpZGdlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKHByb3AgPT0gTlVMTCAgfHwgcHJvcC0+dmFsdWUgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXNcbiIsCiAJCQkgICAgICAgYnJpZGdlLT5mdWxsX25hbWUpOwogCQlyZXR1cm47CiAJfQorCWJ1c19yYW5nZSA9IChpbnQgKilwcm9wLT52YWx1ZTsKIAlidXNfcmFuZ2VbMV0gPSBmaXh1cF9vbmVfbGV2ZWxfYnVzX3JhbmdlKGJyaWRnZS0+Y2hpbGQsIGJ1c19yYW5nZVsxXSk7CiB9CiAKIAotI2RlZmluZSBVM19BR1BfQ0ZBMChkZXZmbiwgb2ZmKQlcCi0JKCgxIDw8ICh1bnNpZ25lZCBsb25nKVBDSV9TTE9UKGRldl9mbikpIFwKLQl8ICgoKHVuc2lnbmVkIGxvbmcpUENJX0ZVTkMoZGV2X2ZuKSkgPDwgOCkgXAotCXwgKCgodW5zaWduZWQgbG9uZykob2ZmKSkgJiAweEZDVUwpKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdTNfYWdwX2NmYTAodTggZGV2Zm4sIHU4IG9mZikKK3sKKwlyZXR1cm4gKDEgPDwgKHVuc2lnbmVkIGxvbmcpUENJX1NMT1QoZGV2Zm4pKSB8CisJCSgodW5zaWduZWQgbG9uZylQQ0lfRlVOQyhkZXZmbikgPDwgOCkgfAorCQkoKHVuc2lnbmVkIGxvbmcpb2ZmICYgMHhGQ1VMKTsKK30KIAotI2RlZmluZSBVM19BR1BfQ0ZBMShidXMsIGRldmZuLCBvZmYpCVwKLQkoKCgodW5zaWduZWQgbG9uZykoYnVzKSkgPDwgMTYpIFwKLQl8KCgodW5zaWduZWQgbG9uZykoZGV2Zm4pKSA8PCA4KSBcCi0JfCgoKHVuc2lnbmVkIGxvbmcpKG9mZikpICYgMHhGQ1VMKSBcCi0JfDFVTCkKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHUzX2FncF9jZmExKHU4IGJ1cywgdTggZGV2Zm4sIHU4IG9mZikKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWJ1cyA8PCAxNikgfAorCQkoKHVuc2lnbmVkIGxvbmcpZGV2Zm4gPDwgOCkgfAorCQkoKHVuc2lnbmVkIGxvbmcpb2ZmICYgMHhGQ1VMKSB8CisJCTFVTDsKK30KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdTNfYWdwX2NmZ19hY2Nlc3Moc3RydWN0IHBjaV9jb250cm9sbGVyKiBob3NlLAogCQkJCSAgICAgICB1OCBidXMsIHU4IGRldl9mbiwgdTggb2Zmc2V0KQpAQCAtOTgsOSArMTA0LDkgQEAKIAlpZiAoYnVzID09IGhvc2UtPmZpcnN0X2J1c25vKSB7CiAJCWlmIChkZXZfZm4gPCAoMTEgPDwgMykpCiAJCQlyZXR1cm4gMDsKLQkJY2FkZHIgPSBVM19BR1BfQ0ZBMChkZXZfZm4sIG9mZnNldCk7CisJCWNhZGRyID0gdTNfYWdwX2NmYTAoZGV2X2ZuLCBvZmZzZXQpOwogCX0gZWxzZQotCQljYWRkciA9IFUzX0FHUF9DRkExKGJ1cywgZGV2X2ZuLCBvZmZzZXQpOworCQljYWRkciA9IHUzX2FncF9jZmExKGJ1cywgZGV2X2ZuLCBvZmZzZXQpOwogCiAJLyogVW5pbm9ydGggd2lsbCByZXR1cm4gZ2FyYmFnZSBpZiB3ZSBkb24ndCByZWFkIGJhY2sgdGhlIHZhbHVlICEgKi8KIAlkbyB7CkBAIC0xODIsMTMgKzE4OCwxNSBAQAogCXUzX2FncF93cml0ZV9jb25maWcKIH07CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHUzX2h0X2NmYTAodTggZGV2Zm4sIHU4IG9mZikKK3sKKwlyZXR1cm4gKGRldmZuIDw8IDgpIHwgb2ZmOworfQogCi0jZGVmaW5lIFUzX0hUX0NGQTAoZGV2Zm4sIG9mZikJCVwKLQkJKCgoKHVuc2lnbmVkIGxvbmcpZGV2Zm4pIDw8IDgpIHwgb2Zmc2V0KQotI2RlZmluZSBVM19IVF9DRkExKGJ1cywgZGV2Zm4sIG9mZikJXAotCQkoVTNfSFRfQ0ZBMChkZXZmbiwgb2ZmKSBcCi0JCSsgKCgodW5zaWduZWQgbG9uZylidXMpIDw8IDE2KSBcCi0JCSsgMHgwMTAwMDAwMFVMKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgdTNfaHRfY2ZhMSh1OCBidXMsIHU4IGRldmZuLCB1OCBvZmYpCit7CisJcmV0dXJuIHUzX2h0X2NmYTAoZGV2Zm4sIG9mZikgKyAoYnVzIDw8IDE2KSArIDB4MDEwMDAwMDBVTDsKK30KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgdTNfaHRfY2ZnX2FjY2VzcyhzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIqIGhvc2UsCiAJCQkJICAgICAgdTggYnVzLCB1OCBkZXZmbiwgdTggb2Zmc2V0KQpAQCAtMTk2LDkgKzIwNCw5IEBACiAJaWYgKGJ1cyA9PSBob3NlLT5maXJzdF9idXNubykgewogCQlpZiAoUENJX1NMT1QoZGV2Zm4pID09IDApCiAJCQlyZXR1cm4gMDsKLQkJcmV0dXJuICgodW5zaWduZWQgbG9uZylob3NlLT5jZmdfZGF0YSkgKyBVM19IVF9DRkEwKGRldmZuLCBvZmZzZXQpOworCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWhvc2UtPmNmZ19kYXRhKSArIHUzX2h0X2NmYTAoZGV2Zm4sIG9mZnNldCk7CiAJfSBlbHNlCi0JCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpaG9zZS0+Y2ZnX2RhdGEpICsgVTNfSFRfQ0ZBMShidXMsIGRldmZuLCBvZmZzZXQpOworCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWhvc2UtPmNmZ19kYXRhKSArIHUzX2h0X2NmYTEoYnVzLCBkZXZmbiwgb2Zmc2V0KTsKIH0KIAogc3RhdGljIGludCB1M19odF9yZWFkX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCkBAIC0yMTEsNiArMjE5LDkgQEAKIAlpZiAoaG9zZSA9PSBOVUxMKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCisJaWYgKG9mZnNldCA+IDB4ZmYpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKIAlhZGRyID0gdTNfaHRfY2ZnX2FjY2Vzcyhob3NlLCBidXMtPm51bWJlciwgZGV2Zm4sIG9mZnNldCk7CiAJaWYgKCFhZGRyKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwpAQCAtMjQzLDYgKzI1NCw5IEBACiAJaWYgKGhvc2UgPT0gTlVMTCkKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKIAorCWlmIChvZmZzZXQgPiAweGZmKQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOworCiAJYWRkciA9IHUzX2h0X2NmZ19hY2Nlc3MoaG9zZSwgYnVzLT5udW1iZXIsIGRldmZuLCBvZmZzZXQpOwogCWlmICghYWRkcikKIAkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKQEAgLTMxNCwxMiArMzI4LDEyIEBACiAJaW50IGxlbjsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CiAJY2hhciogZGlzcF9uYW1lOwotCWludCAqYnVzX3JhbmdlOworCWNvbnN0IGludCAqYnVzX3JhbmdlOwogCWludCBwcmltYXJ5ID0gMTsKIAogCURCRygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOwogCi0JYnVzX3JhbmdlID0gKGludCAqKSBnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJYnVzX3JhbmdlID0gZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOwogCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSBidXMgMFxuIiwKIAkJZGV2LT5mdWxsX25hbWUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9zZXR1cC5jCmluZGV4IGNiNTI4YzkuLmZlNmI5YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL3NldHVwLmMKQEAgLTk5LDggKzk5LDcgQEAKIHN0YXRpYyB2b2lkIG1hcGxlX3Jlc3RhcnQoY2hhciAqY21kKQogewogCXVuc2lnbmVkIGludCBtYXBsZV9udnJhbV9iYXNlOwotCXVuc2lnbmVkIGludCBtYXBsZV9udnJhbV9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IG1hcGxlX252cmFtX2NvbW1hbmQ7CisJY29uc3QgdW5zaWduZWQgaW50ICptYXBsZV9udnJhbV9vZmZzZXQsICptYXBsZV9udnJhbV9jb21tYW5kOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3A7CiAKIAltYXBsZV9udnJhbV9iYXNlID0gbWFwbGVfZmluZF9udnJhbV9iYXNlKCk7CkBAIC0xMTMsMTQgKzExMiwxMiBAQAogCQlwcmludGsoS0VSTl9FTUVSRyAiTWFwbGU6IFVuYWJsZSB0byBmaW5kIFNlcnZpY2UgUHJvY2Vzc29yXG4iKTsKIAkJZ290byBmYWlsOwogCX0KLQltYXBsZV9udnJhbV9vZmZzZXQgPSAqKHVuc2lnbmVkIGludCopIGdldF9wcm9wZXJ0eShzcCwKLQkJCSJyZXN0YXJ0LWFkZHIiLCBOVUxMKTsKLQltYXBsZV9udnJhbV9jb21tYW5kID0gKih1bnNpZ25lZCBpbnQqKSBnZXRfcHJvcGVydHkoc3AsCi0JCQkicmVzdGFydC12YWx1ZSIsIE5VTEwpOworCW1hcGxlX252cmFtX29mZnNldCA9IGdldF9wcm9wZXJ0eShzcCwgInJlc3RhcnQtYWRkciIsIE5VTEwpOworCW1hcGxlX252cmFtX2NvbW1hbmQgPSBnZXRfcHJvcGVydHkoc3AsICJyZXN0YXJ0LXZhbHVlIiwgTlVMTCk7CiAJb2Zfbm9kZV9wdXQoc3ApOwogCiAJLyogc2VuZCBjb21tYW5kICovCi0Jb3V0Yl9wKG1hcGxlX252cmFtX2NvbW1hbmQsIG1hcGxlX252cmFtX2Jhc2UgKyBtYXBsZV9udnJhbV9vZmZzZXQpOworCW91dGJfcCgqbWFwbGVfbnZyYW1fY29tbWFuZCwgbWFwbGVfbnZyYW1fYmFzZSArICptYXBsZV9udnJhbV9vZmZzZXQpOwogCWZvciAoOzspIDsKICBmYWlsOgogCXByaW50ayhLRVJOX0VNRVJHICJNYXBsZTogTWFudWFsIFJlc3RhcnQgUmVxdWlyZWRcbiIpOwpAQCAtMTI5LDggKzEyNiw3IEBACiBzdGF0aWMgdm9pZCBtYXBsZV9wb3dlcl9vZmYodm9pZCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFwbGVfbnZyYW1fYmFzZTsKLQl1bnNpZ25lZCBpbnQgbWFwbGVfbnZyYW1fb2Zmc2V0OwotCXVuc2lnbmVkIGludCBtYXBsZV9udnJhbV9jb21tYW5kOworCWNvbnN0IHVuc2lnbmVkIGludCAqbWFwbGVfbnZyYW1fb2Zmc2V0LCAqbWFwbGVfbnZyYW1fY29tbWFuZDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNwOwogCiAJbWFwbGVfbnZyYW1fYmFzZSA9IG1hcGxlX2ZpbmRfbnZyYW1fYmFzZSgpOwpAQCAtMTQzLDE0ICsxMzksMTIgQEAKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIk1hcGxlOiBVbmFibGUgdG8gZmluZCBTZXJ2aWNlIFByb2Nlc3NvclxuIik7CiAJCWdvdG8gZmFpbDsKIAl9Ci0JbWFwbGVfbnZyYW1fb2Zmc2V0ID0gKih1bnNpZ25lZCBpbnQqKSBnZXRfcHJvcGVydHkoc3AsCi0JCQkicG93ZXItb2ZmLWFkZHIiLCBOVUxMKTsKLQltYXBsZV9udnJhbV9jb21tYW5kID0gKih1bnNpZ25lZCBpbnQqKSBnZXRfcHJvcGVydHkoc3AsCi0JCQkicG93ZXItb2ZmLXZhbHVlIiwgTlVMTCk7CisJbWFwbGVfbnZyYW1fb2Zmc2V0ID0gZ2V0X3Byb3BlcnR5KHNwLCAicG93ZXItb2ZmLWFkZHIiLCBOVUxMKTsKKwltYXBsZV9udnJhbV9jb21tYW5kID0gZ2V0X3Byb3BlcnR5KHNwLCAicG93ZXItb2ZmLXZhbHVlIiwgTlVMTCk7CiAJb2Zfbm9kZV9wdXQoc3ApOwogCiAJLyogc2VuZCBjb21tYW5kICovCi0Jb3V0Yl9wKG1hcGxlX252cmFtX2NvbW1hbmQsIG1hcGxlX252cmFtX2Jhc2UgKyBtYXBsZV9udnJhbV9vZmZzZXQpOworCW91dGJfcCgqbWFwbGVfbnZyYW1fY29tbWFuZCwgbWFwbGVfbnZyYW1fYmFzZSArICptYXBsZV9udnJhbV9vZmZzZXQpOwogCWZvciAoOzspIDsKICBmYWlsOgogCXByaW50ayhLRVJOX0VNRVJHICJNYXBsZTogTWFudWFsIFBvd2VyLURvd24gUmVxdWlyZWRcbiIpOwpAQCAtMjExLDcgKzIwNSw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgbWFwbGVfaW5pdF9JUlEodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QsICpucCwgKm1waWNfbm9kZSA9IE5VTEw7Ci0JdW5zaWduZWQgaW50ICpvcHByb3A7CisJY29uc3QgdW5zaWduZWQgaW50ICpvcHByb3A7CiAJdW5zaWduZWQgbG9uZyBvcGVucGljX2FkZHIgPSAwOwogCWludCBuYWRkciwgbiwgaSwgb3BwbGVuLCBoYXNfaXN1cyA9IDA7CiAJc3RydWN0IG1waWMgKm1waWM7CkBAIC0yMjEsMTAgKzIxNSwxNyBAQAogCSAqIGluIE1hcGxlIGRldmljZS10cmVlIHdoZXJlIHRoZSB0eXBlIG9mIHRoZSBjb250cm9sbGVyIGlzCiAJICogb3Blbi1waWMgYW5kIG5vdCBpbnRlcnJ1cHQtY29udHJvbGxlcgogCSAqLwotCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgIm9wZW4tcGljIikgewotCQltcGljX25vZGUgPSBucDsKLQkJYnJlYWs7Ci0JfQorCisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKQorCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJvcGVuLXBpYyIpKSB7CisJCQltcGljX25vZGUgPSBucDsKKwkJCWJyZWFrOworCQl9CisJaWYgKG1waWNfbm9kZSA9PSBOVUxMKQorCQlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJvcGVuLXBpYyIpIHsKKwkJCW1waWNfbm9kZSA9IG5wOworCQkJYnJlYWs7CisJCX0KIAlpZiAobXBpY19ub2RlID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiRmFpbGVkIHRvIGxvY2F0ZSB0aGUgTVBJQyBpbnRlcnJ1cHQgY29udHJvbGxlclxuIik7CkBAIC0yMzQsOCArMjM1LDcgQEAKIAkvKiBGaW5kIGFkZHJlc3MgbGlzdCBpbiAvcGxhdGZvcm0tb3Blbi1waWMgKi8KIAlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAluYWRkciA9IHByb21fbl9hZGRyX2NlbGxzKHJvb3QpOwotCW9wcHJvcCA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KHJvb3QsICJwbGF0Zm9ybS1vcGVuLXBpYyIsCi0JCQkJCSAgICAgICAmb3BwbGVuKTsKKwlvcHByb3AgPSBnZXRfcHJvcGVydHkocm9vdCwgInBsYXRmb3JtLW9wZW4tcGljIiwgJm9wcGxlbik7CiAJaWYgKG9wcHJvcCAhPSAwKSB7CiAJCW9wZW5waWNfYWRkciA9IG9mX3JlYWRfbnVtYmVyKG9wcHJvcCwgbmFkZHIpOwogCQloYXNfaXN1cyA9IChvcHBsZW4gPiBuYWRkcik7CkBAIC0yNTIsNiArMjUyLDggQEAKIAogCS8qIFhYWCBNYXBsZSBzcGVjaWZpYyBiaXRzICovCiAJZmxhZ3MgfD0gTVBJQ19CUk9LRU5fVTMgfCBNUElDX1dBTlRTX1JFU0VUOworCS8qIEFsbCBVMy9VNCBhcmUgYmlnLWVuZGlhbiwgb2xkZXIgU0xPRiBmaXJtd2FyZSBkb2Vzbid0IGVuY29kZSB0aGlzICovCisJZmxhZ3MgfD0gTVBJQ19CSUdfRU5ESUFOOwogCiAJLyogU2V0dXAgdGhlIG9wZW5waWMgZHJpdmVyLiBNb3JlIGRldmljZS10cmVlIGp1bmtzLCB3ZSBoYXJkIGNvZGUgbm8KIAkgKiBJU1VzIGZvciBub3cuIEknbGwgaGF2ZSB0byByZXZpc2l0IHNvbWUgc3R1ZmZzIHdpdGggdGhlIGZvbGtzIGRvaW5nCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTFhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9NYWtlZmlsZQpAQCAtMCwwICsxIEBACitvYmoteQkrPSBzZXR1cC5vIHBjaS5vIHRpbWUubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvcGFzZW1pLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9wYXNlbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDcxZDcyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvcGFzZW1pLmgKQEAgLTAsMCArMSw4IEBACisjaWZuZGVmIF9QQVNFTUlfUEFTRU1JX0gKKyNkZWZpbmUgX1BBU0VNSV9QQVNFTUlfSAorCitleHRlcm4gdW5zaWduZWQgbG9uZyBwYXNfZ2V0X2Jvb3RfdGltZSh2b2lkKTsKK2V4dGVybiB2b2lkIHBhc19wY2lfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHBhc19wY2liaW9zX2ZpeHVwKHZvaWQpOworCisjZW5kaWYgLyogX1BBU0VNSV9QQVNFTUlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc5YzUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvcGNpLmMKQEAgLTAsMCArMSwxOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUEEgU2VtaSwgSW5jCisgKgorICogQXV0aG9yczogS2lwIFdhbGtlciwgUEEgU2VtaQorICoJICAgIE9sb2YgSm9oYW5zc29uLCBQQSBTZW1pCisgKgorICogTWFpbnRhaW5lZCBieTogT2xvZiBKb2hhbnNzb24gPG9sb2ZAbGl4b20ubmV0PgorICoKKyAqIEJhc2VkIG9uIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvcGNpLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKworI2luY2x1ZGUgPGFzbS9wcGMtcGNpLmg+CisKKyNkZWZpbmUgUEFfUFhQX0NGQShidXMsIGRldmZuLCBvZmYpICgoKGJ1cykgPDwgMjApIHwgKChkZXZmbikgPDwgMTIpIHwgKG9mZikpCisKKyNkZWZpbmUgQ09ORklHX09GRlNFVF9WQUxJRChvZmYpICgob2ZmKSA8IDQwOTYpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBhX3B4cF9jZmdfYWRkcihzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsCisJCQkJICAgICAgIHU4IGJ1cywgdTggZGV2Zm4sIGludCBvZmZzZXQpCit7CisJcmV0dXJuICgodW5zaWduZWQgbG9uZylob3NlLT5jZmdfZGF0YSkgKyBQQV9QWFBfQ0ZBKGJ1cywgZGV2Zm4sIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgcGFfcHhwX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgIGludCBvZmZzZXQsIGludCBsZW4sIHUzMiAqdmFsKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CisJaWYgKCFob3NlKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJaWYgKCFDT05GSUdfT0ZGU0VUX1ZBTElEKG9mZnNldCkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlhZGRyID0gcGFfcHhwX2NmZ19hZGRyKGhvc2UsIGJ1cy0+bnVtYmVyLCBkZXZmbiwgb2Zmc2V0KTsKKworCS8qCisJICogTm90ZTogdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBjaGVja2VkIHRoYXQgb2Zmc2V0IGlzCisJICogc3VpdGFibHkgYWxpZ25lZCBhbmQgdGhhdCBsZW4gaXMgMSwgMiBvciA0LgorCSAqLworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQkqdmFsID0gaW5fOCgodTggKilhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQkqdmFsID0gaW5fbGUxNigodTE2ICopYWRkcik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCSp2YWwgPSBpbl9sZTMyKCh1MzIgKilhZGRyKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludCBwYV9weHBfd3JpdGVfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCSAgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuLCB1MzIgdmFsKQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlob3NlID0gcGNpX2J1c190b19ob3N0KGJ1cyk7CisJaWYgKCFob3NlKQorCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOworCisJaWYgKCFDT05GSUdfT0ZGU0VUX1ZBTElEKG9mZnNldCkpCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7CisKKwlhZGRyID0gcGFfcHhwX2NmZ19hZGRyKGhvc2UsIGJ1cy0+bnVtYmVyLCBkZXZmbiwgb2Zmc2V0KTsKKworCS8qCisJICogTm90ZTogdGhlIGNhbGxlciBoYXMgYWxyZWFkeSBjaGVja2VkIHRoYXQgb2Zmc2V0IGlzCisJICogc3VpdGFibHkgYWxpZ25lZCBhbmQgdGhhdCBsZW4gaXMgMSwgMiBvciA0LgorCSAqLworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlvdXRfOCgodTggKilhZGRyLCB2YWwpOworCQkodm9pZCkgaW5fOCgodTggKilhZGRyKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvdXRfbGUxNigodTE2ICopYWRkciwgdmFsKTsKKwkJKHZvaWQpIGluX2xlMTYoKHUxNiAqKWFkZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvdXRfbGUzMigodTMyICopYWRkciwgdmFsKTsKKwkJKHZvaWQpIGluX2xlMzIoKHUzMiAqKWFkZHIpOworCQlicmVhazsKKwl9CisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBhX3B4cF9vcHMgPSB7CisJcGFfcHhwX3JlYWRfY29uZmlnLAorCXBhX3B4cF93cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcGFfcHhwKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwlob3NlLT5vcHMgPSAmcGFfcHhwX29wczsKKwlob3NlLT5jZmdfZGF0YSA9IGlvcmVtYXAoMHhlMDAwMDAwMCwgMHgxMDAwMDAwMCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCisJcHJfZGVidWcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKKworCWhvc2UgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZGV2KTsKKwlpZiAoIWhvc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaG9zZS0+Zmlyc3RfYnVzbm8gPSAwOworCWhvc2UtPmxhc3RfYnVzbm8gPSAweGZmOworCisJc2V0dXBfcGFfcHhwKGhvc2UpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgUEEtUFhQIFBDSSBob3N0IGJyaWRnZS5cbiIpOworCisJLyogSW50ZXJwcmV0IHRoZSAicmFuZ2VzIiBwcm9wZXJ0eSAqLworCS8qIFRoaXMgYWxzbyBtYXBzIHRoZSBJL08gcmVnaW9uIGFuZCBzZXRzIGlzYV9pby9tZW1fYmFzZSAqLworCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoaG9zZSwgZGV2LCAxKTsKKwlwY2lfc2V0dXBfcGhiX2lvKGhvc2UsIDEpOworCisJcmV0dXJuIDA7Cit9CisKKwordm9pZCBfX2luaXQgcGFzX3BjaWJpb3NfZml4dXAodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKKworCWZvcl9lYWNoX3BjaV9kZXYoZGV2KQorCQlwY2lfcmVhZF9pcnFfbGluZShkZXYpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGFzX2ZpeHVwX3BoYl9yZXNvdXJjZXModm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zZSwgdG1wLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBwY2lfaW9fYmFzZTsKKwkJaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKz0gb2Zmc2V0OworCQlob3NlLT5pb19yZXNvdXJjZS5lbmQgKz0gb2Zmc2V0OworCQlwcmludGsoS0VSTl9JTkZPICJQQ0kgSG9zdCAlZCwgaW8gc3RhcnQ6ICVseDsgaW8gZW5kOiAlbHhcbiIsCisJCSAgICAgICBob3NlLT5nbG9iYWxfbnVtYmVyLAorCQkgICAgICAgaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQsIGhvc2UtPmlvX3Jlc291cmNlLmVuZCk7CisJfQorfQorCisKK3ZvaWQgX19pbml0IHBhc19wY2lfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpyb290OworCisJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJaWYgKCFyb290KSB7CisJCXByaW50ayhLRVJOX0NSSVQgInBhc19wY2lfaW5pdDogY2FuJ3QgZmluZCByb290ICIKKwkJCSJvZiBkZXZpY2UgdHJlZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKG5wID0gTlVMTDsgKG5wID0gb2ZfZ2V0X25leHRfY2hpbGQocm9vdCwgbnApKSAhPSBOVUxMOykKKwkJaWYgKG5wLT5uYW1lICYmICFzdHJjbXAobnAtPm5hbWUsICJweHAiKSAmJiAhYWRkX2JyaWRnZShucCkpCisJCQlvZl9ub2RlX2dldChucCk7CisKKwlvZl9ub2RlX3B1dChyb290KTsKKworCXBhc19maXh1cF9waGJfcmVzb3VyY2VzKCk7CisKKwkvKiBTZXR1cCB0aGUgbGlua2FnZSBiZXR3ZWVuIE9GIG5vZGVzIGFuZCBQSEJzICovCisJcGNpX2RldnNfcGhiX2luaXQoKTsKKworCS8qIFVzZSB0aGUgY29tbW9uIHJlc291cmNlIGFsbG9jYXRpb24gbWVjaGFuaXNtICovCisJcGNpX3Byb2JlX29ubHkgPSAxOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI4NDgyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3NldHVwLmMKQEAgLTAsMCArMSwxODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUEEgU2VtaSwgSW5jCisgKgorICogQXV0aG9yczogS2lwIFdhbGtlciwgUEEgU2VtaQorICoJICAgIE9sb2YgSm9oYW5zc29uLCBQQSBTZW1pCisgKgorICogTWFpbnRhaW5lZCBieTogT2xvZiBKb2hhbnNzb24gPG9sb2ZAbGl4b20ubmV0PgorICoKKyAqIEJhc2VkIG9uIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvc2V0dXAuYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorCisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCisjaW5jbHVkZSAicGFzZW1pLmgiCisKK3N0YXRpYyB2b2lkIHBhc19yZXN0YXJ0KGNoYXIgKmNtZCkKK3sKKwlwcmludGsoInJlc3RhcnQgdW5pbXBsZW1lbnRlZCwgbG9vcGluZy4uLlxuIik7CisJZm9yICg7OykgOworfQorCitzdGF0aWMgdm9pZCBwYXNfcG93ZXJfb2ZmKHZvaWQpCit7CisJcHJpbnRrKCJwb3dlciBvZmYgdW5pbXBsZW1lbnRlZCwgbG9vcGluZy4uLlxuIik7CisJZm9yICg7OykgOworfQorCitzdGF0aWMgdm9pZCBwYXNfaGFsdCh2b2lkKQoreworCXBhc19wb3dlcl9vZmYoKTsKK30KKworI2lmZGVmIENPTkZJR19TTVAKK3N0cnVjdCBzbXBfb3BzX3QgcGFzX3NtcF9vcHMgPSB7CisJLnByb2JlCQk9IHNtcF9tcGljX3Byb2JlLAorCS5tZXNzYWdlX3Bhc3MJPSBzbXBfbXBpY19tZXNzYWdlX3Bhc3MsCisJLmtpY2tfY3B1CT0gc21wX2dlbmVyaWNfa2lja19jcHUsCisJLnNldHVwX2NwdQk9IHNtcF9tcGljX3NldHVwX2NwdSwKKwkuZ2l2ZV90aW1lYmFzZQk9IHNtcF9nZW5lcmljX2dpdmVfdGltZWJhc2UsCisJLnRha2VfdGltZWJhc2UJPSBzbXBfZ2VuZXJpY190YWtlX3RpbWViYXNlLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfU01QICovCisKK3ZvaWQgX19pbml0IHBhc19zZXR1cF9hcmNoKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIFNldHVwIFNNUCBjYWxsYmFjayAqLworCXNtcF9vcHMgPSAmcGFzX3NtcF9vcHM7CisjZW5kaWYKKwkvKiBMb29rdXAgUENJIGhvc3RzICovCisJcGFzX3BjaV9pbml0KCk7CisKKyNpZmRlZiBDT05GSUdfRFVNTVlfQ09OU09MRQorCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOworI2VuZGlmCisKKwlwcmludGsoS0VSTl9ERUJVRyAiVXNpbmcgZGVmYXVsdCBpZGxlIGxvb3BcbiIpOworfQorCitzdGF0aWMgdm9pZCBpb21tdV9kZXZfc2V0dXBfbnVsbChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7IH0KK3N0YXRpYyB2b2lkIGlvbW11X2J1c19zZXR1cF9udWxsKHN0cnVjdCBwY2lfYnVzICpidXMpIHsgfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGFzX2luaXRfZWFybHkodm9pZCkKK3sKKwkvKiBObyBpb21tdSBjb2RlIHlldCAqLworCXBwY19tZC5pb21tdV9kZXZfc2V0dXAgPSBpb21tdV9kZXZfc2V0dXBfbnVsbDsKKwlwcGNfbWQuaW9tbXVfYnVzX3NldHVwID0gaW9tbXVfYnVzX3NldHVwX251bGw7CisJcGNpX2RpcmVjdF9pb21tdV9pbml0KCk7Cit9CisKKy8qIE5vIGxlZ2FjeSBJTyBvbiBvdXIgcGFydHMgKi8KK3N0YXRpYyBpbnQgcGFzX2NoZWNrX2xlZ2FjeV9pb3BvcnQodW5zaWduZWQgaW50IGJhc2Vwb3J0KQoreworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgX19pbml0IHZvaWQgcGFzX2luaXRfSVJRKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpucDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QsICptcGljX25vZGU7CisJdW5zaWduZWQgbG9uZyBvcGVucGljX2FkZHI7CisJY29uc3QgdW5zaWduZWQgaW50ICpvcHByb3A7CisJaW50IG5hZGRyLCBvcHBsZW47CisJc3RydWN0IG1waWMgKm1waWM7CisKKwltcGljX25vZGUgPSBOVUxMOworCisJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiKQorCQlpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJvcGVuLXBpYyIpKSB7CisJCQltcGljX25vZGUgPSBucDsKKwkJCWJyZWFrOworCQl9CisJaWYgKCFtcGljX25vZGUpCisJCWZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgIm9wZW4tcGljIikgeworCQkJbXBpY19ub2RlID0gbnA7CisJCQlicmVhazsKKwkJfQorCWlmICghbXBpY19ub2RlKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIkZhaWxlZCB0byBsb2NhdGUgdGhlIE1QSUMgaW50ZXJydXB0IGNvbnRyb2xsZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogRmluZCBhZGRyZXNzIGxpc3QgaW4gL3BsYXRmb3JtLW9wZW4tcGljICovCisJcm9vdCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CisJbmFkZHIgPSBwcm9tX25fYWRkcl9jZWxscyhyb290KTsKKwlvcHByb3AgPSBnZXRfcHJvcGVydHkocm9vdCwgInBsYXRmb3JtLW9wZW4tcGljIiwgJm9wcGxlbik7CisJaWYgKCFvcHByb3ApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJObyBwbGF0Zm9ybS1vcGVuLXBpYyBwcm9wZXJ0eS5cbiIpOworCQlvZl9ub2RlX3B1dChyb290KTsKKwkJcmV0dXJuOworCX0KKwlvcGVucGljX2FkZHIgPSBvZl9yZWFkX251bWJlcihvcHByb3AsIG5hZGRyKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiT3BlblBJQyBhZGRyOiAlbHhcbiIsIG9wZW5waWNfYWRkcik7CisJb2Zfbm9kZV9wdXQocm9vdCk7CisKKwltcGljID0gbXBpY19hbGxvYyhtcGljX25vZGUsIG9wZW5waWNfYWRkciwgTVBJQ19QUklNQVJZLCAwLCAwLAorCQkJICAiIFBBUy1PUElDICAiKTsKKwlCVUdfT04oIW1waWMpOworCisJbXBpY19hc3NpZ25faXN1KG1waWMsIDAsIG9wZW5waWNfYWRkciArIDB4MTAwMDApOworCW1waWNfaW5pdChtcGljKTsKKwlvZl9ub2RlX3B1dChtcGljX25vZGUpOworCW9mX25vZGVfcHV0KHJvb3QpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGFzX3Byb2dyZXNzKGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGhleCkKK3sKKwlwcmludGsoIlslMDR4XSA6ICVzXG4iLCBoZXgsIHMgPyBzIDogIiIpOworfQorCisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgTU1VIGlzIG9mZiwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqLworc3RhdGljIGludCBfX2luaXQgcGFzX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKCFvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgIlBBNlQtMTY4Mk0iKSkKKwkJcmV0dXJuIDA7CisKKwlocHRlX2luaXRfbmF0aXZlKCk7CisKKwlyZXR1cm4gMTsKK30KKworZGVmaW5lX21hY2hpbmUocGFzKSB7CisJLm5hbWUJCQk9ICJQQSBTZW1pIFBBNlQtMTY4Mk0iLAorCS5wcm9iZQkJCT0gcGFzX3Byb2JlLAorCS5zZXR1cF9hcmNoCQk9IHBhc19zZXR1cF9hcmNoLAorCS5pbml0X2Vhcmx5CQk9IHBhc19pbml0X2Vhcmx5LAorCS5pbml0X0lSUQkJPSBwYXNfaW5pdF9JUlEsCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5wY2liaW9zX2ZpeHVwCQk9IHBhc19wY2liaW9zX2ZpeHVwLAorCS5yZXN0YXJ0CQk9IHBhc19yZXN0YXJ0LAorCS5wb3dlcl9vZmYJCT0gcGFzX3Bvd2VyX29mZiwKKwkuaGFsdAkJCT0gcGFzX2hhbHQsCisJLmdldF9ib290X3RpbWUJCT0gcGFzX2dldF9ib290X3RpbWUsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLmNoZWNrX2xlZ2FjeV9pb3BvcnQgICAgPSBwYXNfY2hlY2tfbGVnYWN5X2lvcG9ydCwKKwkucHJvZ3Jlc3MJCT0gcGFzX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YmQ0MTBiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvdGltZS5jCkBAIC0wLDAgKzEsMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUEEgU2VtaSwgSW5jCisgKgorICogTWFpbnRhaW5lZCBieTogT2xvZiBKb2hhbnNzb24gPG9sb2ZAbGl4b20ubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKKyNpbmNsdWRlIDxhc20vdGltZS5oPgorCit1bnNpZ25lZCBsb25nIF9faW5pdCBwYXNfZ2V0X2Jvb3RfdGltZSh2b2lkKQoreworCS8qIExldCdzIGp1c3QgcmV0dXJuIGEgZmFrZSBkYXRlIHJpZ2h0IG5vdyAqLworCXJldHVybiBta3RpbWUoMjAwNiwgMSwgMSwgMTIsIDAsIDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9iYWNrbGlnaHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvYmFja2xpZ2h0LmMKaW5kZXggNzRlZWQ2Yi4uYWZhNTkzYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9iYWNrbGlnaHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2JhY2tsaWdodC5jCkBAIC0xMCwxOSArMTAsMzIgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L2FkYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BtdS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9iYWNrbGlnaHQuaD4KIAogI2RlZmluZSBPTERfQkFDS0xJR0hUX01BWCAxNQogCiBzdGF0aWMgdm9pZCBwbWFjX2JhY2tsaWdodF9rZXlfd29ya2VyKHZvaWQgKmRhdGEpOwotc3RhdGljIERFQ0xBUkVfV09SSyhwbWFjX2JhY2tsaWdodF9rZXlfd29yaywgcG1hY19iYWNrbGlnaHRfa2V5X3dvcmtlciwgTlVMTCk7CitzdGF0aWMgdm9pZCBwbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X3dvcmtlcih2b2lkICpkYXRhKTsKIAotLyogQWx0aG91Z2ggdGhpcyB2YXJpYWJsZSBpcyB1c2VkIGluIGludGVycnVwdCBjb250ZXh0LCBpdCBtYWtlcyBubyBzZW5zZSB0bwotICogcHJvdGVjdCBpdC4gTm8gdXNlciBpcyBhYmxlIHRvIHByb2R1Y2UgZW5vdWdoIGtleSBldmVudHMgcGVyIHNlY29uZCBhbmQKK3N0YXRpYyBERUNMQVJFX1dPUksocG1hY19iYWNrbGlnaHRfa2V5X3dvcmssIHBtYWNfYmFja2xpZ2h0X2tleV93b3JrZXIsIE5VTEwpOworc3RhdGljIERFQ0xBUkVfV09SSyhwbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X3dvcmssIHBtYWNfYmFja2xpZ2h0X3NldF9sZWdhY3lfd29ya2VyLCBOVUxMKTsKKworLyogQWx0aG91Z2ggdGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIGluIGludGVycnVwdCBjb250ZXh0LCBpdCBtYWtlcyBubyBzZW5zZSB0bworICogcHJvdGVjdCB0aGVtLiBObyB1c2VyIGlzIGFibGUgdG8gcHJvZHVjZSBlbm91Z2gga2V5IGV2ZW50cyBwZXIgc2Vjb25kIGFuZAogICogbm90aWNlIHRoZSBlcnJvcnMgdGhhdCBtaWdodCBoYXBwZW4uCiAgKi8KIHN0YXRpYyBpbnQgcG1hY19iYWNrbGlnaHRfa2V5X3F1ZXVlZDsKK3N0YXRpYyBpbnQgcG1hY19iYWNrbGlnaHRfc2V0X2xlZ2FjeV9xdWV1ZWQ7CisKKy8qIFRoZSB2aWEtcG11IGNvZGUgYWxsb3dzIHRoZSBiYWNrbGlnaHQgdG8gYmUgZ3JhYmJlZCwgaW4gd2hpY2ggY2FzZSB0aGUKKyAqIGluLWtlcm5lbCBjb250cm9sIG9mIHRoZSBicmlnaHRuZXNzIG5lZWRzIHRvIGJlIGRpc2FibGVkLiBUaGlzIHNob3VsZAorICogb25seSBiZSB1c2VkIGJ5IHJlYWxseSBvbGQgUG93ZXJCb29rcy4KKyAqLworc3RhdGljIGF0b21pY190IGtlcm5lbF9iYWNrbGlnaHRfZGlzYWJsZWQgPSBBVE9NSUNfSU5JVCgwKTsKIAogLyogUHJvdGVjdCB0aGUgcG1hY19iYWNrbGlnaHQgdmFyaWFibGUgKi8KIERFRklORV9NVVRFWChwbWFjX2JhY2tsaWdodF9tdXRleCk7CkBAIC00Nyw3ICs2MCw4IEBACiAJc3RydWN0IGRldmljZV9ub2RlKiBia19ub2RlID0gZmluZF9kZXZpY2VzKCJiYWNrbGlnaHQiKTsKIAogCWlmIChia19ub2RlKSB7Ci0JCWNoYXIgKnByb3AgPSBnZXRfcHJvcGVydHkoYmtfbm9kZSwgImJhY2tsaWdodC1jb250cm9sIiwgTlVMTCk7CisJCWNvbnN0IGNoYXIgKnByb3AgPSBnZXRfcHJvcGVydHkoYmtfbm9kZSwKKwkJCQkiYmFja2xpZ2h0LWNvbnRyb2wiLCBOVUxMKTsKIAkJaWYgKHByb3AgJiYgc3RybmNtcChwcm9wLCB0eXBlLCBzdHJsZW4odHlwZSkpID09IDApCiAJCQlyZXR1cm4gMTsKIAl9CkBAIC04Miw2ICs5Niw5IEBACiAKIHN0YXRpYyB2b2lkIHBtYWNfYmFja2xpZ2h0X2tleV93b3JrZXIodm9pZCAqZGF0YSkKIHsKKwlpZiAoYXRvbWljX3JlYWQoJmtlcm5lbF9iYWNrbGlnaHRfZGlzYWJsZWQpKQorCQlyZXR1cm47CisKIAltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CiAJaWYgKHBtYWNfYmFja2xpZ2h0KSB7CiAJCXN0cnVjdCBiYWNrbGlnaHRfcHJvcGVydGllcyAqcHJvcHM7CkBAIC0xMDcsOCArMTI0LDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CiB9CiAKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0ICovCiB2b2lkIHBtYWNfYmFja2xpZ2h0X2tleShpbnQgZGlyZWN0aW9uKQogeworCWlmIChhdG9taWNfcmVhZCgma2VybmVsX2JhY2tsaWdodF9kaXNhYmxlZCkpCisJCXJldHVybjsKKwogCS8qIHdlIGNhbiByZWNlaXZlIG11bHRpcGxlIGludGVycnVwdHMgaGVyZSwgYnV0IHRoZSBzY2hlZHVsZWQgd29yawogCSAqIHdpbGwgcnVuIG9ubHkgb25jZSwgd2l0aCB0aGUgbGFzdCB2YWx1ZQogCSAqLwpAQCAtMTE2LDcgKzEzNyw3IEBACiAJc2NoZWR1bGVfd29yaygmcG1hY19iYWNrbGlnaHRfa2V5X3dvcmspOwogfQogCi1pbnQgcG1hY19iYWNrbGlnaHRfc2V0X2xlZ2FjeV9icmlnaHRuZXNzKGludCBicmlnaHRuZXNzKQorc3RhdGljIGludCBfX3BtYWNfYmFja2xpZ2h0X3NldF9sZWdhY3lfYnJpZ2h0bmVzcyhpbnQgYnJpZ2h0bmVzcykKIHsKIAlpbnQgZXJyb3IgPSAtRU5YSU87CiAKQEAgLTE0NSw2ICsxNjYsMjggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyB2b2lkIHBtYWNfYmFja2xpZ2h0X3NldF9sZWdhY3lfd29ya2VyKHZvaWQgKmRhdGEpCit7CisJaWYgKGF0b21pY19yZWFkKCZrZXJuZWxfYmFja2xpZ2h0X2Rpc2FibGVkKSkKKwkJcmV0dXJuOworCisJX19wbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X2JyaWdodG5lc3MocG1hY19iYWNrbGlnaHRfc2V0X2xlZ2FjeV9xdWV1ZWQpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCAqLwordm9pZCBwbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X2JyaWdodG5lc3NfcG11KGludCBicmlnaHRuZXNzKSB7CisJaWYgKGF0b21pY19yZWFkKCZrZXJuZWxfYmFja2xpZ2h0X2Rpc2FibGVkKSkKKwkJcmV0dXJuOworCisJcG1hY19iYWNrbGlnaHRfc2V0X2xlZ2FjeV9xdWV1ZWQgPSBicmlnaHRuZXNzOworCXNjaGVkdWxlX3dvcmsoJnBtYWNfYmFja2xpZ2h0X3NldF9sZWdhY3lfd29yayk7Cit9CisKK2ludCBwbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X2JyaWdodG5lc3MoaW50IGJyaWdodG5lc3MpCit7CisJcmV0dXJuIF9fcG1hY19iYWNrbGlnaHRfc2V0X2xlZ2FjeV9icmlnaHRuZXNzKGJyaWdodG5lc3MpOworfQorCiBpbnQgcG1hY19iYWNrbGlnaHRfZ2V0X2xlZ2FjeV9icmlnaHRuZXNzKCkKIHsKIAlpbnQgcmVzdWx0ID0gLUVOWElPOwpAQCAtMTY3LDYgKzIxMCwxNiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgcG1hY19iYWNrbGlnaHRfZGlzYWJsZSgpCit7CisJYXRvbWljX2luYygma2VybmVsX2JhY2tsaWdodF9kaXNhYmxlZCk7Cit9CisKK3ZvaWQgcG1hY19iYWNrbGlnaHRfZW5hYmxlKCkKK3sKKwlhdG9taWNfZGVjKCZrZXJuZWxfYmFja2xpZ2h0X2Rpc2FibGVkKTsKK30KKwogRVhQT1JUX1NZTUJPTF9HUEwocG1hY19iYWNrbGlnaHQpOwogRVhQT1JUX1NZTUJPTF9HUEwocG1hY19iYWNrbGlnaHRfbXV0ZXgpOwogRVhQT1JUX1NZTUJPTF9HUEwocG1hY19oYXNfYmFja2xpZ2h0X3R5cGUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9ib290eF9pbml0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2Jvb3R4X2luaXQuYwppbmRleCA4NzFiMDAyLi45ZDczZDAyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2Jvb3R4X2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2Jvb3R4X2luaXQuYwpAQCAtMTgxLDEzICsxODEsMTggQEAKIH0KIAogc3RhdGljIHZvaWQgX19pbml0IGJvb3R4X2FkZF9kaXNwbGF5X3Byb3BzKHVuc2lnbmVkIGxvbmcgYmFzZSwKLQkJCQkJICAgdW5zaWduZWQgbG9uZyAqbWVtX2VuZCkKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqbWVtX2VuZCwKKwkJCQkJICAgaW50IGhhc19yZWFsX25vZGUpCiB7CiAJYm9vdF9pbmZvc190ICpiaSA9IGJvb3R4X2luZm87CiAJdTMyIHRtcDsKIAotCWJvb3R4X2R0X2FkZF9wcm9wKCJsaW51eCxib290LWRpc3BsYXkiLCBOVUxMLCAwLCBtZW1fZW5kKTsKLQlib290eF9kdF9hZGRfcHJvcCgibGludXgsb3BlbmVkIiwgTlVMTCwgMCwgbWVtX2VuZCk7CisJaWYgKGhhc19yZWFsX25vZGUpIHsKKwkJYm9vdHhfZHRfYWRkX3Byb3AoImxpbnV4LGJvb3QtZGlzcGxheSIsIE5VTEwsIDAsIG1lbV9lbmQpOworCQlib290eF9kdF9hZGRfcHJvcCgibGludXgsb3BlbmVkIiwgTlVMTCwgMCwgbWVtX2VuZCk7CisJfSBlbHNlCisJCWJvb3R4X2R0X2FkZF9wcm9wKCJsaW51eCxib290eC1ub3NjcmVlbiIsIE5VTEwsIDAsIG1lbV9lbmQpOworCiAJdG1wID0gYmktPmRpc3BEZXZpY2VEZXB0aDsKIAlib290eF9kdF9hZGRfcHJvcCgibGludXgsYm9vdHgtZGVwdGgiLCAmdG1wLCA0LCBtZW1fZW5kKTsKIAl0bXAgPSBiaS0+ZGlzcERldmljZVJlY3RbMl0gLSBiaS0+ZGlzcERldmljZVJlY3RbMF07CkBAIC0yNDEsMTEgKzI0Niw2IEBACiAJCURCRygiIGRldGVjdGVkIGRpc3BsYXkgISBhZGRpbmcgcHJvcGVydGllcyBuYW1lcyAhXG4iKTsKIAkJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsYm9vdC1kaXNwbGF5IiwgbWVtX2VuZCk7CiAJCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LG9wZW5lZCIsIG1lbV9lbmQpOwotCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxib290eC1kZXB0aCIsIG1lbV9lbmQpOwotCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxib290eC13aWR0aCIsIG1lbV9lbmQpOwotCQlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxib290eC1oZWlnaHQiLCBtZW1fZW5kKTsKLQkJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsYm9vdHgtbGluZWJ5dGVzIiwgbWVtX2VuZCk7Ci0JCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3R4LWFkZHIiLCBtZW1fZW5kKTsKIAkJc3RybmNweShib290eF9kaXNwX3BhdGgsIG5hbWVwLCAyNTUpOwogCX0KIApAQCAtMzI5LDEwICszMjksMTMgQEAKIAkJcHBwID0gJnBwLT5uZXh0OwogCX0KIAotCWlmIChub2RlID09IGJvb3R4X25vZGVfY2hvc2VuKQorCWlmIChub2RlID09IGJvb3R4X25vZGVfY2hvc2VuKSB7CiAJCWJvb3R4X2FkZF9jaG9zZW5fcHJvcHMoYmFzZSwgbWVtX2VuZCk7Ci0JaWYgKG5vZGUgPT0gYm9vdHhfaW5mby0+ZGlzcERldmljZVJlZ0VudHJ5T2Zmc2V0KQotCQlib290eF9hZGRfZGlzcGxheV9wcm9wcyhiYXNlLCBtZW1fZW5kKTsKKwkJaWYgKGJvb3R4X2luZm8tPmRpc3BEZXZpY2VSZWdFbnRyeU9mZnNldCA9PSAwKQorCQkJYm9vdHhfYWRkX2Rpc3BsYXlfcHJvcHMoYmFzZSwgbWVtX2VuZCwgMCk7CisJfQorCWVsc2UgaWYgKG5vZGUgPT0gYm9vdHhfaW5mby0+ZGlzcERldmljZVJlZ0VudHJ5T2Zmc2V0KQorCQlib290eF9hZGRfZGlzcGxheV9wcm9wcyhiYXNlLCBtZW1fZW5kLCAxKTsKIAogCS8qIGRvIGFsbCBvdXIgY2hpbGRyZW4gKi8KIAljcHAgPSAmbnAtPmNoaWxkOwpAQCAtMzc0LDYgKzM3NywxNCBAQAogCW1lbV9lbmQgKz0gNDsKIAlib290eF9kdF9zdHJlbmQgPSBtZW1fZW5kOwogCWJvb3R4X3NjYW5fZHRfYnVpbGRfc3RyaW5ncyhiYXNlLCA0LCAmbWVtX2VuZCk7CisJLyogQWRkIHNvbWUgc3RyaW5ncyAqLworCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3R4LW5vc2NyZWVuIiwgJm1lbV9lbmQpOworCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3R4LWRlcHRoIiwgJm1lbV9lbmQpOworCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3R4LXdpZHRoIiwgJm1lbV9lbmQpOworCWJvb3R4X2R0X2FkZF9zdHJpbmcoImxpbnV4LGJvb3R4LWhlaWdodCIsICZtZW1fZW5kKTsKKwlib290eF9kdF9hZGRfc3RyaW5nKCJsaW51eCxib290eC1saW5lYnl0ZXMiLCAmbWVtX2VuZCk7CisJYm9vdHhfZHRfYWRkX3N0cmluZygibGludXgsYm9vdHgtYWRkciIsICZtZW1fZW5kKTsKKwkvKiBXcmFwIHVwIHN0cmluZ3MgKi8KIAloZHItPm9mZl9kdF9zdHJpbmdzID0gYm9vdHhfZHRfc3RyYmFzZSAtIG1lbV9zdGFydDsKIAloZHItPmR0X3N0cmluZ3Nfc2l6ZSA9IGJvb3R4X2R0X3N0cmVuZCAtIGJvb3R4X2R0X3N0cmJhc2U7CiAKQEAgLTQwMCw4ICs0MTEsMTUgQEAKIAlEQkcoIkVuZCBvZiBib290IHBhcmFtczogJXhcbiIsIG1lbV9lbmQpOwogCXJzdm1hcFswXSA9IG1lbV9zdGFydDsKIAlyc3ZtYXBbMV0gPSBtZW1fZW5kOwotCXJzdm1hcFsyXSA9IDA7Ci0JcnN2bWFwWzNdID0gMDsKKwlpZiAoYm9vdHhfaW5mby0+cmFtRGlzaykgeworCQlyc3ZtYXBbMl0gPSAoKHVuc2lnbmVkIGxvbmcpYm9vdHhfaW5mbykgKyBib290eF9pbmZvLT5yYW1EaXNrOworCQlyc3ZtYXBbM10gPSByc3ZtYXBbMl0gKyBib290eF9pbmZvLT5yYW1EaXNrU2l6ZTsKKwkJcnN2bWFwWzRdID0gMDsKKwkJcnN2bWFwWzVdID0gMDsKKwl9IGVsc2UgeworCQlyc3ZtYXBbMl0gPSAwOworCQlyc3ZtYXBbM10gPSAwOworCX0KIAogCXJldHVybiAodW5zaWduZWQgbG9uZyloZHI7CiB9CkBAIC00NzEsNiArNDg5LDcgQEAKIAlpZiAoYmktPmRpc3BEZXZpY2VEZXB0aCA9PSAxNikKIAkJYmktPmRpc3BEZXZpY2VEZXB0aCA9IDE1OwogCisKICNpZmRlZiBDT05GSUdfQk9PVFhfVEVYVAogCXB0ciA9ICh1bnNpZ25lZCBsb25nKWJpLT5sb2dpY2FsRGlzcGxheUJhc2U7CiAJcHRyICs9IGJpLT5kaXNwRGV2aWNlUmVjdFsxXSAqIGJpLT5kaXNwRGV2aWNlUm93Qnl0ZXM7CkBAIC01MDgsNiArNTI3LDcgQEAKICNpZmRlZiBDT05GSUdfQk9PVFhfVEVYVAogCWJ0ZXh0X3dlbGNvbWUoYmkpOwogI2VuZGlmCisKIAkvKiBOZXcgQm9vdFggZW50ZXJzIGtlcm5lbCB3aXRoIE1NVSBvZmYsIGkvb3MgYXJlIG5vdCBhbGxvd2VkCiAJICogaGVyZS4gVGhpcyBoYWNrIHdpbGwgaGF2ZSBiZWVuIGRvbmUgYnkgdGhlIGJvb3N0cmFwIGFueXdheS4KIAkgKi8KQEAgLTUzMCwxMiArNTUwLDEyIEBACiAJICovCiAJaWYgKGJpLT52ZXJzaW9uIDwgNSkgewogCQlzcGFjZSA9IGJpLT5kZXZpY2VUcmVlT2Zmc2V0ICsgYmktPmRldmljZVRyZWVTaXplOwotCQlpZiAoYmktPnJhbURpc2spCisJCWlmIChiaS0+cmFtRGlzayA+PSBzcGFjZSkKIAkJCXNwYWNlID0gYmktPnJhbURpc2sgKyBiaS0+cmFtRGlza1NpemU7CiAJfSBlbHNlCiAJCXNwYWNlID0gYmktPnRvdGFsUGFyYW1zU2l6ZTsKIAotCWJvb3R4X3ByaW50ZigiVG90YWwgc3BhY2UgdXNlZCBieSBwYXJhbWV0ZXJzICYgcmFtZGlzazogJXggXG4iLCBzcGFjZSk7CisJYm9vdHhfcHJpbnRmKCJUb3RhbCBzcGFjZSB1c2VkIGJ5IHBhcmFtZXRlcnMgJiByYW1kaXNrOiAweCV4IFxuIiwgc3BhY2UpOwogCiAJLyogTmV3IEJvb3RYIHdpbGwgaGF2ZSBmbHVzaGVkIGFsbCBUTEJzIGFuZCBlbnRlcnMga2VybmVsIHdpdGgKIAkgKiBNTVUgc3dpdGNoZWQgT0ZGLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgdXNlZnVsIGFueW1vcmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfMzIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV8zMi5jCmluZGV4IDYyOTI2MjQ4Li5jMmI2YjQxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzMyLmMKQEAgLTQyMSw3ICs0MjEsNyBAQAogCiBzdGF0aWMgdTMyIHJlYWRfZ3BpbyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogewotCXUzMiAqcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCWNvbnN0IHUzMiAqcmVnID0gZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CiAJdTMyIG9mZnNldDsKIAogCWlmIChyZWcgPT0gTlVMTCkKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCQkJCQkJCQkiZnJlcXVlbmN5LWdwaW8iKTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnNsZXdfZG9uZV9ncGlvX25wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwKIAkJCQkJCQkJICAgICAic2xld2luZy1kb25lIik7Ci0JdTMyICp2YWx1ZTsKKwljb25zdCB1MzIgKnZhbHVlOwogCiAJLyoKIAkgKiBDaGVjayB0byBzZWUgaWYgaXQncyBHUElPIGRyaXZlbiBvciBQTVUgb25seQpAQCAtNTE5LDE1ICs1MTksMTUgQEAKIAkgKi8KIAlpZiAoZnJlcXVlbmN5X2dwaW8gJiYgc2xld19kb25lX2dwaW8pIHsKIAkJaW50IGxlbnAsIHJjOwotCQl1MzIgKmZyZXFzLCAqcmF0aW87CisJCWNvbnN0IHUzMiAqZnJlcXMsICpyYXRpbzsKIAotCQlmcmVxcyA9ICh1MzIgKilnZXRfcHJvcGVydHkoY3B1bm9kZSwgImJ1cy1mcmVxdWVuY2llcyIsICZsZW5wKTsKKwkJZnJlcXMgPSBnZXRfcHJvcGVydHkoY3B1bm9kZSwgImJ1cy1mcmVxdWVuY2llcyIsICZsZW5wKTsKIAkJbGVucCAvPSBzaXplb2YodTMyKTsKIAkJaWYgKGZyZXFzID09IE5VTEwgfHwgbGVucCAhPSAyKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IGJ1cy1mcmVxdWVuY2llcyBpbmNvcnJlY3Qgb3IgbWlzc2luZ1xuIik7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlyYXRpbyA9ICh1MzIgKilnZXRfcHJvcGVydHkoY3B1bm9kZSwgInByb2Nlc3Nvci10by1idXMtcmF0aW8qMiIsIE5VTEwpOworCQlyYXRpbyA9IGdldF9wcm9wZXJ0eShjcHVub2RlLCAicHJvY2Vzc29yLXRvLWJ1cy1yYXRpbyoyIiwgTlVMTCk7CiAJCWlmIChyYXRpbyA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IHByb2Nlc3Nvci10by1idXMtcmF0aW8qMiBtaXNzaW5nXG4iKTsKIAkJCXJldHVybiAxOwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJLyogSWYgd2UgdXNlIHRoZSBQTVUsIGxvb2sgZm9yIHRoZSBtaW4gJiBtYXggZnJlcXVlbmNpZXMgaW4gdGhlCiAJICogZGV2aWNlLXRyZWUKIAkgKi8KLQl2YWx1ZSA9ICh1MzIgKilnZXRfcHJvcGVydHkoY3B1bm9kZSwgIm1pbi1jbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwl2YWx1ZSA9IGdldF9wcm9wZXJ0eShjcHVub2RlLCAibWluLWNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCWlmICghdmFsdWUpCiAJCXJldHVybiAxOwogCWxvd19mcmVxID0gKCp2YWx1ZSkgLyAxMDAwOwpAQCAtNTcxLDcgKzU3MSw3IEBACiAJaWYgKGxvd19mcmVxIDwgMTAwMDAwKQogCQlsb3dfZnJlcSAqPSAxMDsKIAotCXZhbHVlID0gKHUzMiAqKWdldF9wcm9wZXJ0eShjcHVub2RlLCAibWF4LWNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCXZhbHVlID0gZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJtYXgtY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CiAJaWYgKCF2YWx1ZSkKIAkJcmV0dXJuIDE7CiAJaGlfZnJlcSA9ICgqdmFsdWUpIC8gMTAwMDsKQEAgLTYxMSwxMyArNjExLDE0IEBACiBzdGF0aWMgaW50IHBtYWNfY3B1ZnJlcV9pbml0Xzc1MEZYKHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1bm9kZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKnZvbHRfZ3Bpb19ucDsKLQl1MzIgcHZyLCAqdmFsdWU7CisJdTMyIHB2cjsKKwljb25zdCB1MzIgKnZhbHVlOwogCiAJaWYgKGdldF9wcm9wZXJ0eShjcHVub2RlLCAiZHluYW1pYy1wb3dlci1zdGVwIiwgTlVMTCkgPT0gTlVMTCkKIAkJcmV0dXJuIDE7CiAKIAloaV9mcmVxID0gY3VyX2ZyZXE7Ci0JdmFsdWUgPSAodTMyICopZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJyZWR1Y2VkLWNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOworCXZhbHVlID0gZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJyZWR1Y2VkLWNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCWlmICghdmFsdWUpCiAJCXJldHVybiAxOwogCWxvd19mcmVxID0gKCp2YWx1ZSkgLyAxMDAwOwpAQCAtNjUwLDcgKzY1MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBwbWFjX2NwdWZyZXFfc2V0dXAodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUJKmNwdW5vZGU7Ci0JdTMyCQkJKnZhbHVlOworCWNvbnN0IHUzMgkJKnZhbHVlOwogCiAJaWYgKHN0cnN0cihjbWRfbGluZSwgIm5vY3B1ZnJlcSIpKQogCQlyZXR1cm4gMDsKQEAgLTY2MSw3ICs2NjIsNyBAQAogCQlnb3RvIG91dDsKIAogCS8qIEdldCBjdXJyZW50IGNwdSBjbG9jayBmcmVxICovCi0JdmFsdWUgPSAodTMyICopZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwl2YWx1ZSA9IGdldF9wcm9wZXJ0eShjcHVub2RlLCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CiAJaWYgKCF2YWx1ZSkKIAkJZ290byBvdXQ7CiAJY3VyX2ZyZXEgPSAoKnZhbHVlKSAvIDEwMDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCmluZGV4IGYwOGExNDUuLmQzMDQ2NmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiB0aGF0IGlzIGlNYWMgRzUgYW5kIGxhdGVzdCBzaW5nbGUgQ1BVIGRlc2t0b3AuCiAgKi8KIAorI3VuZGVmIERFQlVHCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC0zMCwxMyArMzIsNyBAQAogI2luY2x1ZGUgPGFzbS9zbXUuaD4KICNpbmNsdWRlIDxhc20vcG1hY19wZnVuYy5oPgogCi0jdW5kZWYgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lIERCRyhmbXQuLi4pIHByaW50ayhmbXQpCi0jZWxzZQotI2RlZmluZSBEQkcoZm10Li4uKQotI2VuZGlmCisjZGVmaW5lIERCRyhmbXQuLi4pIHByX2RlYnVnKGZtdCkKIAogLyogc2VlIDk3MEZYIHVzZXIgbWFudWFsICovCiAKQEAgLTgyLDggKzc4LDYgQEAKIC8qIFBvd2VyIG1vZGUgZGF0YSBpcyBhbiBhcnJheSBvZiB0aGUgMzIgYml0cyBQQ1IgdmFsdWVzIHRvIHVzZSBmb3IKICAqIHRoZSB2YXJpb3VzIGZyZXF1ZW5jaWVzLCByZXRyaWV2ZWQgZnJvbSB0aGUgZGV2aWNlLXRyZWUKICAqLwotc3RhdGljIHUzMiAqZzVfcG1vZGVfZGF0YTsKLXN0YXRpYyBpbnQgZzVfcG1vZGVfbWF4Owogc3RhdGljIGludCBnNV9wbW9kZV9jdXI7CiAKIHN0YXRpYyB2b2lkICgqZzVfc3dpdGNoX3ZvbHQpKGludCBzcGVlZF9tb2RlKTsKQEAgLTkzLDYgKzg3LDExIEBACiBzdGF0aWMgREVGSU5FX01VVEVYKGc1X3N3aXRjaF9tdXRleCk7CiAKIAorI2lmZGVmIENPTkZJR19QTUFDX1NNVQorCitzdGF0aWMgY29uc3QgdTMyICpnNV9wbW9kZV9kYXRhOworc3RhdGljIGludCBnNV9wbW9kZV9tYXg7CisKIHN0YXRpYyBzdHJ1Y3Qgc211X3NkYnBfZnZ0ICpnNV9mdnRfdGFibGU7CS8qIHRhYmxlIG9mIG9wLiBwb2ludHMgKi8KIHN0YXRpYyBpbnQgZzVfZnZ0X2NvdW50OwkJCS8qIG51bWJlciBvZiBvcC4gcG9pbnRzICovCiBzdGF0aWMgaW50IGc1X2Z2dF9jdXI7CQkJCS8qIGN1cnJlbnQgb3AuIHBvaW50ICovCkBAIC0yMTAsNiArMjA5LDE2IEBACiB9CiAKIC8qCisgKiBGYWtlIHZvbHRhZ2Ugc3dpdGNoaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBtaXNzaW5nIHN1cHBvcnQKKyAqLworCitzdGF0aWMgdm9pZCBnNV9kdW1teV9zd2l0Y2hfdm9sdChpbnQgc3BlZWRfbW9kZSkKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19QTUFDX1NNVSAqLworCisvKgogICogUGxhdGZvcm0gZnVuY3Rpb24gYmFzZWQgdm9sdGFnZSBzd2l0Y2hpbmcgZm9yIFBvd2VyTWFjNywyICYgNywzCiAgKi8KIApAQCAtMjQ4LDYgKzI1Nyw5IEBACiAJc3RydWN0IHBtZl9hcmdzIGFyZ3M7CiAJdTMyIGRvbmUgPSAwOwogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlpbnQgcmM7CisKKwlEQkcoImc1X3BmdW5jX3N3aXRjaF9mcmVxKCVkKVxuIiwgc3BlZWRfbW9kZSk7CiAKIAkvKiBJZiBmcmVxdWVuY3kgaXMgZ29pbmcgdXAsIGZpcnN0IHJhbXAgdXAgdGhlIHZvbHRhZ2UgKi8KIAlpZiAoc3BlZWRfbW9kZSA8IGc1X3Btb2RlX2N1cikKQEAgLTI1NSw5ICsyNjcsMTIgQEAKIAogCS8qIERvIGl0ICovCiAJaWYgKHNwZWVkX21vZGUgPT0gQ1BVRlJFUV9ISUdIKQotCQlwbWZfY2FsbF9vbmUocGZ1bmNfY3B1X3NldGZyZXFfaGlnaCwgTlVMTCk7CisJCXJjID0gcG1mX2NhbGxfb25lKHBmdW5jX2NwdV9zZXRmcmVxX2hpZ2gsIE5VTEwpOwogCWVsc2UKLQkJcG1mX2NhbGxfb25lKHBmdW5jX2NwdV9zZXRmcmVxX2xvdywgTlVMTCk7CisJCXJjID0gcG1mX2NhbGxfb25lKHBmdW5jX2NwdV9zZXRmcmVxX2xvdywgTlVMTCk7CisKKwlpZiAocmMpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNwdWZyZXE6IHBmdW5jIHN3aXRjaCBlcnJvciAlZFxuIiwgcmMpOwogCiAJLyogSXQncyBhbiBpcnEgR1BJTyBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBqdXN0IGJsb2NrIGhlcmUsCiAJICogSSdsbCBkbyB0aGF0IGxhdGVyIGFmdGVyIEkndmUgcHJvcGVybHkgdGVzdGVkIHRoZSBJUlEgY29kZSBmb3IKQEAgLTI5NiwxMyArMzExLDYgQEAKIAlyZXR1cm4gdmFsID8gQ1BVRlJFUV9ISUdIIDogQ1BVRlJFUV9MT1c7CiB9CiAKLS8qCi0gKiBGYWtlIHZvbHRhZ2Ugc3dpdGNoaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBtaXNzaW5nIHN1cHBvcnQKLSAqLwotCi1zdGF0aWMgdm9pZCBnNV9kdW1teV9zd2l0Y2hfdm9sdChpbnQgc3BlZWRfbW9kZSkKLXsKLX0KIAogLyoKICAqIENvbW1vbiBpbnRlcmZhY2UgdG8gdGhlIGNwdWZyZXEgY29yZQpAQCAtMzc1LDEzICszODMsMTYgQEAKIH07CiAKIAorI2lmZGVmIENPTkZJR19QTUFDX1NNVQorCiBzdGF0aWMgaW50IF9faW5pdCBnNV9uZW8yX2NwdWZyZXFfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdXMpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpjcHVub2RlOwogCXVuc2lnbmVkIGludCBwc2l6ZSwgc3NpemU7CiAJdW5zaWduZWQgbG9uZyBtYXhfZnJlcTsKIAljaGFyICpmcmVxX21ldGhvZCwgKnZvbHRfbWV0aG9kOwotCXUzMiAqdmFscCwgcHZyX2hpOworCWNvbnN0IHUzMiAqdmFscDsKKwl1MzIgcHZyX2hpOwogCWludCB1c2Vfdm9sdHNfdmRuYXAgPSAwOwogCWludCB1c2Vfdm9sdHNfc211ID0gMDsKIAlpbnQgcmMgPSAtRU5PREVWOwpAQCAtMzk5LDggKzQxMCw3IEBACiAJLyogR2V0IGZpcnN0IENQVSBub2RlICovCiAJZm9yIChjcHVub2RlID0gTlVMTDsKIAkgICAgIChjcHVub2RlID0gb2ZfZ2V0X25leHRfY2hpbGQoY3B1cywgY3B1bm9kZSkpICE9IE5VTEw7KSB7Ci0JCXUzMiAqcmVnID0KLQkJCSh1MzIgKilnZXRfcHJvcGVydHkoY3B1bm9kZSwgInJlZyIsIE5VTEwpOworCQljb25zdCB1MzIgKnJlZyA9IGdldF9wcm9wZXJ0eShjcHVub2RlLCAicmVnIiwgTlVMTCk7CiAJCWlmIChyZWcgPT0gTlVMTCB8fCAoKnJlZykgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXN0cmNtcChjcHVub2RlLT50eXBlLCAiY3B1IikpCkBAIC00MTIsNyArNDIyLDcgQEAKIAl9CiAKIAkvKiBDaGVjayA5NzBGWCBmb3Igbm93ICovCi0JdmFscCA9ICh1MzIgKilnZXRfcHJvcGVydHkoY3B1bm9kZSwgImNwdS12ZXJzaW9uIiwgTlVMTCk7CisJdmFscCA9IGdldF9wcm9wZXJ0eShjcHVub2RlLCAiY3B1LXZlcnNpb24iLCBOVUxMKTsKIAlpZiAoIXZhbHApIHsKIAkJREJHKCJObyBjcHUtdmVyc2lvbiBwcm9wZXJ0eSAhXG4iKTsKIAkJZ290byBiYWlsX25vcHJvcHM7CkBAIC00MjQsNyArNDM0LDcgQEAKIAl9CiAKIAkvKiBMb29rIGZvciB0aGUgcG93ZXJ0dW5lIGRhdGEgaW4gdGhlIGRldmljZS10cmVlICovCi0JZzVfcG1vZGVfZGF0YSA9ICh1MzIgKilnZXRfcHJvcGVydHkoY3B1bm9kZSwgInBvd2VyLW1vZGUtZGF0YSIsJnBzaXplKTsKKwlnNV9wbW9kZV9kYXRhID0gZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJwb3dlci1tb2RlLWRhdGEiLCZwc2l6ZSk7CiAJaWYgKCFnNV9wbW9kZV9kYXRhKSB7CiAJCURCRygiTm8gcG93ZXItbW9kZS1kYXRhICFcbiIpOwogCQlnb3RvIGJhaWxfbm9wcm9wczsKQEAgLTQzMiw3ICs0NDIsNyBAQAogCWc1X3Btb2RlX21heCA9IHBzaXplIC8gc2l6ZW9mKHUzMikgLSAxOwogCiAJaWYgKHVzZV92b2x0c19zbXUpIHsKLQkJc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqc2hkcjsKKwkJY29uc3Qgc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqc2hkcjsKIAogCQkvKiBMb29rIGZvciB0aGUgRlZUIHRhYmxlICovCiAJCXNoZHIgPSBzbXVfZ2V0X3NkYl9wYXJ0aXRpb24oU01VX1NEQl9GVlRfSUQsIE5VTEwpOwpAQCAtNDgzLDcgKzQ5Myw3IEBACiAJICogaGFsZiBmcmVxIGluIHRoaXMgdmVyc2lvbi4gU28gZmFyLCBJIGhhdmVuJ3QgeWV0IHNlZW4gYSBtYWNoaW5lCiAJICogc3VwcG9ydGluZyBhbnl0aGluZyBlbHNlLgogCSAqLwotCXZhbHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwl2YWxwID0gZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKIAlpZiAoIXZhbHApCiAJCXJldHVybiAtRU5PREVWOwogCW1heF9mcmVxID0gKCp2YWxwKS8xMDAwOwpAQCAtNTI1LDE0ICs1MzUsMjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfUE1BQ19TTVUgKi8KKworCiBzdGF0aWMgaW50IF9faW5pdCBnNV9wbTcyX2NwdWZyZXFfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdXMpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpjcHVpZCA9IE5VTEwsICpod2Nsb2NrID0gTlVMTCwgKmNwdW5vZGUgPSBOVUxMOwotCXU4ICplZXByb20gPSBOVUxMOwotCXUzMiAqdmFscDsKKwljb25zdCB1OCAqZWVwcm9tID0gTlVMTDsKKwljb25zdCB1MzIgKnZhbHA7CiAJdTY0IG1heF9mcmVxLCBtaW5fZnJlcSwgaWgsIGlsOwogCWludCBoYXNfdm9sdCA9IDEsIHJjID0gMDsKIAorCURCRygiY3B1ZnJlcTogSW5pdGlhbGl6aW5nIGZvciBQb3dlck1hYzcsMiwgUG93ZXJNYWM3LDMgYW5kIgorCSAgICAiIFJhY2tNYWMzLDEuLi5cbiIpOworCiAJLyogR2V0IGZpcnN0IENQVSBub2RlICovCiAJZm9yIChjcHVub2RlID0gTlVMTDsKIAkgICAgIChjcHVub2RlID0gb2ZfZ2V0X25leHRfY2hpbGQoY3B1cywgY3B1bm9kZSkpICE9IE5VTEw7KSB7CkBAIC01NDcsNyArNTYzLDcgQEAKIAkvKiBMb29rdXAgdGhlIGNwdWlkIGVlcHJvbSBub2RlICovCiAgICAgICAgIGNwdWlkID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi91M0AwLGY4MDAwMDAwL2kyY0BmODAwMTAwMC9jcHVpZEBhMCIpOwogCWlmIChjcHVpZCAhPSBOVUxMKQotCQllZXByb20gPSAodTggKilnZXRfcHJvcGVydHkoY3B1aWQsICJjcHVpZCIsIE5VTEwpOworCQllZXByb20gPSBnZXRfcHJvcGVydHkoY3B1aWQsICJjcHVpZCIsIE5VTEwpOwogCWlmIChlZXByb20gPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IENhbid0IGZpbmQgY3B1aWQgRUVQUk9NICFcbiIpOwogCQlyYyA9IC1FTk9ERVY7CkBAIC01NTcsNyArNTczLDggQEAKIAkvKiBMb29rdXAgdGhlIGkyYyBod2Nsb2NrICovCiAJZm9yIChod2Nsb2NrID0gTlVMTDsKIAkgICAgIChod2Nsb2NrID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoaHdjbG9jaywgImkyYy1od2Nsb2NrIikpICE9IE5VTEw7KXsKLQkJY2hhciAqbG9jID0gZ2V0X3Byb3BlcnR5KGh3Y2xvY2ssICJod2N0cmwtbG9jYXRpb24iLCBOVUxMKTsKKwkJY29uc3QgY2hhciAqbG9jID0gZ2V0X3Byb3BlcnR5KGh3Y2xvY2ssCisJCQkJImh3Y3RybC1sb2NhdGlvbiIsIE5VTEwpOwogCQlpZiAobG9jID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKHN0cmNtcChsb2MsICJDUFUgQ0xPQ0siKSkKQEAgLTYyMSw3ICs2MzgsNyBAQAogCSAqLwogCiAJLyogR2V0IG1heCBmcmVxdWVuY3kgZnJvbSBkZXZpY2UtdHJlZSAqLwotCXZhbHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKKwl2YWxwID0gZ2V0X3Byb3BlcnR5KGNwdW5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKTsKIAlpZiAoIXZhbHApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjcHVmcmVxOiBDYW4ndCBmaW5kIENQVSBmcmVxdWVuY3kgIVxuIik7CiAJCXJjID0gLUVOT0RFVjsKQEAgLTYzNiw2ICs2NTMsMTUgQEAKIAkgKi8KIAlpaCA9ICooKHUzMiAqKShlZXByb20gKyAweDEwKSk7CiAJaWwgPSAqKCh1MzIgKikoZWVwcm9tICsgMHgyMCkpOworCisJLyogQ2hlY2sgZm9yIG1hY2hpbmVzIHdpdGggbm8gdXNlZnVsIHNldHRpbmdzICovCisJaWYgKGlsID09IGloKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNwdWZyZXE6IE5vIGxvdyBmcmVxdWVuY3kgbW9kZSBhdmFpbGFibGUiCisJCSAgICAgICAiIG9uIHRoaXMgbW9kZWwgIVxuIik7CisJCXJjID0gLUVOT0RFVjsKKwkJZ290byBiYWlsOworCX0KKwogCW1pbl9mcmVxID0gMDsKIAlpZiAoaWggIT0gMCAmJiBpbCAhPSAwKQogCQltaW5fZnJlcSA9IChtYXhfZnJlcSAqIGlsKSAvIGloOwpAQCAtNjQzLDcgKzY2OSw3IEBACiAJLyogU2FuaXR5IGNoZWNrICovCiAJaWYgKG1pbl9mcmVxID49IG1heF9mcmVxIHx8IG1pbl9mcmVxIDwgMTAwMCkgewogCQlwcmludGsoS0VSTl9FUlIgImNwdWZyZXE6IENhbid0IGNhbGN1bGF0ZSBsb3cgZnJlcXVlbmN5ICFcbiIpOwotCQlyYyA9IC1FTk9ERVY7CisJCXJjID0gLUVOWElPOwogCQlnb3RvIGJhaWw7CiAJfQogCWc1X2NwdV9mcmVxc1swXS5mcmVxdWVuY3kgPSBtYXhfZnJlcTsKQEAgLTY5MCwxNiArNzE2LDEwIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBnNV9ybTMxX2NwdWZyZXFfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdXMpCi17Ci0JLyogTllJICovCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgX19pbml0IGc1X2NwdWZyZXFfaW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1czsKLQlpbnQgcmM7CisJaW50IHJjID0gMDsKIAogCWNwdXMgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiL2NwdXMiKTsKIAlpZiAoY3B1cyA9PSBOVUxMKSB7CkBAIC03MDgsMTIgKzcyOCwxMyBAQAogCX0KIAogCWlmIChtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywyIikgfHwKLQkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJQb3dlck1hYzcsMyIpKQorCSAgICBtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyTWFjNywzIikgfHwKKwkgICAgbWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCiAJCXJjID0gZzVfcG03Ml9jcHVmcmVxX2luaXQoY3B1cyk7Ci0JZWxzZSBpZiAobWFjaGluZV9pc19jb21wYXRpYmxlKCJSYWNrTWFjMywxIikpCi0JCXJjID0gZzVfcm0zMV9jcHVmcmVxX2luaXQoY3B1cyk7CisjaWZkZWYgQ09ORklHX1BNQUNfU01VCiAJZWxzZQogCQlyYyA9IGc1X25lbzJfY3B1ZnJlcV9pbml0KGNwdXMpOworI2VuZGlmIC8qIENPTkZJR19QTUFDX1NNVSAqLwogCiAJb2Zfbm9kZV9wdXQoY3B1cyk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9mZWF0dXJlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwppbmRleCBmODMxM2JmLi4xM2ZjYWY1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2ZlYXR1cmUuYwpAQCAtMTA1OCw4ICsxMDU4LDggQEAKIAlpZiAobnAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJZm9yIChucCA9IG5wLT5jaGlsZDsgbnAgIT0gTlVMTDsgbnAgPSBucC0+c2libGluZykgewotCQl1MzIgKm51bSA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKLQkJdTMyICpyc3QgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAic29mdC1yZXNldCIsIE5VTEwpOworCQl1MzIgKm51bSA9IGdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCQl1MzIgKnJzdCA9IGdldF9wcm9wZXJ0eShucCwgInNvZnQtcmVzZXQiLCBOVUxMKTsKIAkJaWYgKG51bSA9PSBOVUxMIHx8IHJzdCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWlmIChwYXJhbSA9PSAqbnVtKSB7CkBAIC0xMDg3LDcgKzEwODcsNyBAQAogewogCXN0cnVjdCBtYWNpb19jaGlwICptYWNpbzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWNoYXIgKnByb3A7CisJY29uc3QgY2hhciAqcHJvcDsKIAlpbnQgbnVtYmVyOwogCXUzMiByZWc7CiAKQEAgLTEwOTYsNyArMTA5Niw3IEBACiAJICAgIG1hY2lvLT50eXBlICE9IG1hY2lvX2ludHJlcGlkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByb3AgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShub2RlLCAiQUFQTCxjbG9jay1pZCIsIE5VTEwpOworCXByb3AgPSBnZXRfcHJvcGVydHkobm9kZSwgIkFBUEwsY2xvY2staWQiLCBOVUxMKTsKIAlpZiAoIXByb3ApCiAJCXJldHVybiAtRU5PREVWOwogCWlmIChzdHJuY21wKHByb3AsICJ1c2IwdTA0OCIsIDgpID09IDApCkBAIC0xNTA3LDggKzE1MDcsOCBAQAogCWlmIChucCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlmb3IgKG5wID0gbnAtPmNoaWxkOyBucCAhPSBOVUxMOyBucCA9IG5wLT5zaWJsaW5nKSB7Ci0JCXUzMiAqbnVtID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwotCQl1MzIgKnJzdCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJzb2Z0LXJlc2V0IiwgTlVMTCk7CisJCWNvbnN0IHUzMiAqbnVtID0gZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJCWNvbnN0IHUzMiAqcnN0ID0gZ2V0X3Byb3BlcnR5KG5wLCAic29mdC1yZXNldCIsIE5VTEwpOwogCQlpZiAobnVtID09IE5VTEwgfHwgcnN0ID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKHBhcmFtID09ICpudW0pIHsKQEAgLTI0MDgsNyArMjQwOCw3IEBACiAJICovCiAJZHQgPSBmaW5kX2RldmljZXMoImRldmljZS10cmVlIik7CiAJaWYgKGR0ICE9IE5VTEwpCi0JCW1vZGVsID0gKGNvbnN0IGNoYXIgKikgZ2V0X3Byb3BlcnR5KGR0LCAibW9kZWwiLCBOVUxMKTsKKwkJbW9kZWwgPSBnZXRfcHJvcGVydHkoZHQsICJtb2RlbCIsIE5VTEwpOwogCWZvcihpPTA7IG1vZGVsICYmIGk8KHNpemVvZihwbWFjX21iX2RlZnMpL3NpemVvZihzdHJ1Y3QgcG1hY19tYl9kZWYpKTsgaSsrKSB7CiAJICAgIGlmIChzdHJjbXAobW9kZWwsIHBtYWNfbWJfZGVmc1tpXS5tb2RlbF9zdHJpbmcpID09IDApIHsKIAkJcG1hY19tYiA9IHBtYWNfbWJfZGVmc1tpXTsKQEAgLTI1MzYsNyArMjUzNiw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBwcm9iZV91bmlub3J0aCh2b2lkKQogewotCXUzMiAqYWRkcnA7CisJY29uc3QgdTMyICphZGRycDsKIAlwaHlzX2FkZHJfdCBhZGRyZXNzOwogCXVuc2lnbmVkIGxvbmcgYWN0cmw7CiAKQEAgLTI1NTUsNyArMjU1NSw3IEBACiAJaWYgKHVuaW5vcnRoX25vZGUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JYWRkcnAgPSAodTMyICopZ2V0X3Byb3BlcnR5KHVuaW5vcnRoX25vZGUsICJyZWciLCBOVUxMKTsKKwlhZGRycCA9IGdldF9wcm9wZXJ0eSh1bmlub3J0aF9ub2RlLCAicmVnIiwgTlVMTCk7CiAJaWYgKGFkZHJwID09IE5VTEwpCiAJCXJldHVybjsKIAlhZGRyZXNzID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3ModW5pbm9ydGhfbm9kZSwgYWRkcnApOwpAQCAtMjU5Niw3ICsyNTk2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUqCW5vZGU7CiAJaW50CQkJaTsKIAl2b2xhdGlsZSB1MzIgX19pb21lbQkqYmFzZTsKLQl1MzIJCQkqYWRkcnAsICpyZXZwOworCWNvbnN0IHUzMgkJKmFkZHJwLCAqcmV2cDsKIAlwaHlzX2FkZHJfdAkJYWRkcjsKIAl1NjQJCQlzaXplOwogCkBAIC0yNjM5LDcgKzI2MzksNyBAQAogCQlyZXR1cm47CiAJfQogCWlmICh0eXBlID09IG1hY2lvX2tleWxhcmdvIHx8IHR5cGUgPT0gbWFjaW9fa2V5bGFyZ28yKSB7Ci0JCXUzMiAqZGlkID0gKHUzMiAqKWdldF9wcm9wZXJ0eShub2RlLCAiZGV2aWNlLWlkIiwgTlVMTCk7CisJCWNvbnN0IHUzMiAqZGlkID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJkZXZpY2UtaWQiLCBOVUxMKTsKIAkJaWYgKCpkaWQgPT0gMHgwMDAwMDAyNSkKIAkJCXR5cGUgPSBtYWNpb19wYW5nZWE7CiAJCWlmICgqZGlkID09IDB4MDAwMDAwM2UpCkBAIC0yNjUyLDcgKzI2NTIsNyBAQAogCW1hY2lvX2NoaXBzW2ldLmJhc2UJPSBiYXNlOwogCW1hY2lvX2NoaXBzW2ldLmZsYWdzCT0gTUFDSU9fRkxBR19TQ0NCX09OIHwgTUFDSU9fRkxBR19TQ0NCX09OOwogCW1hY2lvX2NoaXBzW2ldLm5hbWUJPSBtYWNpb19uYW1lc1t0eXBlXTsKLQlyZXZwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShub2RlLCAicmV2aXNpb24taWQiLCBOVUxMKTsKKwlyZXZwID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJyZXZpc2lvbi1pZCIsIE5VTEwpOwogCWlmIChyZXZwKQogCQltYWNpb19jaGlwc1tpXS5yZXYgPSAqcmV2cDsKIAlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBhICVzIG1hYy1pbyBjb250cm9sbGVyLCByZXY6ICVkLCBtYXBwZWQgYXQgMHglcFxuIiwKQEAgLTI2OTUsMTUgKzI2OTUsMTUgQEAKIGluaXRpYWxfc2VyaWFsX3NodXRkb3duKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJaW50IGxlbjsKLQlzdHJ1Y3Qgc2xvdF9uYW1lc19wcm9wIHsKKwljb25zdCBzdHJ1Y3Qgc2xvdF9uYW1lc19wcm9wIHsKIAkJaW50CWNvdW50OwogCQljaGFyCW5hbWVbMV07CiAJfSAqc2xvdHM7Ci0JY2hhciAqY29ubjsKKwljb25zdCBjaGFyICpjb25uOwogCWludCBwb3J0X3R5cGUgPSBQTUFDX1NDQ19BU1lOQzsKIAlpbnQgbW9kZW0gPSAwOwogCi0Jc2xvdHMgPSAoc3RydWN0IHNsb3RfbmFtZXNfcHJvcCAqKWdldF9wcm9wZXJ0eShucCwgInNsb3QtbmFtZXMiLCAmbGVuKTsKKwlzbG90cyA9IGdldF9wcm9wZXJ0eShucCwgInNsb3QtbmFtZXMiLCAmbGVuKTsKIAljb25uID0gZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxjb25uZWN0b3IiLCAmbGVuKTsKIAlpZiAoY29ubiAmJiAoc3RyY21wKGNvbm4sICJpbmZyYXJlZCIpID09IDApKQogCQlwb3J0X3R5cGUgPSBQTUFDX1NDQ19JUkRBOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9sb3dfaTJjLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwppbmRleCA4Njc3ZjUwLi5jMmM3Y2Y3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2xvd19pMmMuYwpAQCAtNDc3LDcgKzQ3Nyw4IEBACiBzdGF0aWMgc3RydWN0IHBtYWNfaTJjX2hvc3Rfa3cgKl9faW5pdCBrd19pMmNfaG9zdF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7CiAJc3RydWN0IHBtYWNfaTJjX2hvc3Rfa3cgKmhvc3Q7Ci0JdTMyCQkJKnBzdGVwcywgKnByYXRlLCAqYWRkcnAsIHN0ZXBzOworCWNvbnN0IHUzMgkJKnBzdGVwcywgKnByYXRlLCAqYWRkcnA7CisJdTMyCQkJc3RlcHM7CiAKIAlob3N0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtYWNfaTJjX2hvc3Rfa3cpLCBHRlBfS0VSTkVMKTsKIAlpZiAoaG9zdCA9PSBOVUxMKSB7CkBAIC00OTAsNyArNDkxLDcgQEAKIAkgKiBvbiBhbGwgaTJjIGtleXdlc3Qgbm9kZXMgc28gZmFyIC4uLiB3ZSB3b3VsZCBoYXZlIHRvIGZhbGxiYWNrCiAJICogdG8gbWFjaW8gcGFyc2luZyBpZiB0aGF0IHdhc24ndCB0aGUgY2FzZQogCSAqLwotCWFkZHJwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgIkFBUEwsYWRkcmVzcyIsIE5VTEwpOworCWFkZHJwID0gZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxhZGRyZXNzIiwgTlVMTCk7CiAJaWYgKGFkZHJwID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJsb3dfaTJjOiBDYW4ndCBmaW5kIGFkZHJlc3MgZm9yICVzXG4iLAogCQkgICAgICAgbnAtPmZ1bGxfbmFtZSk7CkBAIC01MDQsMTMgKzUwNSwxMyBAQAogCWhvc3QtPnRpbWVvdXRfdGltZXIuZnVuY3Rpb24gPSBrd19pMmNfdGltZW91dDsKIAlob3N0LT50aW1lb3V0X3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylob3N0OwogCi0JcHN0ZXBzID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgIkFBUEwsYWRkcmVzcy1zdGVwIiwgTlVMTCk7CisJcHN0ZXBzID0gZ2V0X3Byb3BlcnR5KG5wLCAiQUFQTCxhZGRyZXNzLXN0ZXAiLCBOVUxMKTsKIAlzdGVwcyA9IHBzdGVwcyA/ICgqcHN0ZXBzKSA6IDB4MTA7CiAJZm9yIChob3N0LT5ic3RlcHMgPSAwOyAoc3RlcHMgJiAweDAxKSA9PSAwOyBob3N0LT5ic3RlcHMrKykKIAkJc3RlcHMgPj49IDE7CiAJLyogU2VsZWN0IGludGVyZmFjZSByYXRlICovCiAJaG9zdC0+c3BlZWQgPSBLV19JMkNfTU9ERV8yNUtIWjsKLQlwcmF0ZSA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJBQVBMLGkyYy1yYXRlIiwgTlVMTCk7CisJcHJhdGUgPSBnZXRfcHJvcGVydHkobnAsICJBQVBMLGkyYy1yYXRlIiwgTlVMTCk7CiAJaWYgKHByYXRlKSBzd2l0Y2goKnByYXRlKSB7CiAJY2FzZSAxMDA6CiAJCWhvc3QtPnNwZWVkID0gS1dfSTJDX01PREVfMTAwS0haOwpAQCAtNjE4LDggKzYxOSw4IEBACiAJCX0gZWxzZSB7CiAJCQlmb3IgKGNoaWxkID0gTlVMTDsKIAkJCSAgICAgKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTDspIHsKLQkJCQl1MzIgKnJlZyA9Ci0JCQkJCSh1MzIgKilnZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCBOVUxMKTsKKwkJCQljb25zdCB1MzIgKnJlZyA9IGdldF9wcm9wZXJ0eShjaGlsZCwKKwkJCQkJCSJyZWciLCBOVUxMKTsKIAkJCQlpZiAocmVnID09IE5VTEwpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWt3X2kyY19hZGQoaG9zdCwgbnAsIGNoaWxkLCAqcmVnKTsKQEAgLTg4MSw3ICs4ODIsNyBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY29udHJvbGxlciwgKmJ1c25vZGU7CiAJc3RydWN0IHBtYWNfaTJjX2J1cyAqYnVzOwotCXUzMiAqcmVnOworCWNvbnN0IHUzMiAqcmVnOwogCWludCBzejsKIAogCWlmICghc211X3ByZXNlbnQoKSkKQEAgLTkwNCw3ICs5MDUsNyBAQAogCQlpZiAoc3RyY21wKGJ1c25vZGUtPnR5cGUsICJpMmMiKSAmJgogCQkgICAgc3RyY21wKGJ1c25vZGUtPnR5cGUsICJpMmMtYnVzIikpCiAJCQljb250aW51ZTsKLQkJcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShidXNub2RlLCAicmVnIiwgTlVMTCk7CisJCXJlZyA9IGdldF9wcm9wZXJ0eShidXNub2RlLCAicmVnIiwgTlVMTCk7CiAJCWlmIChyZWcgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCkBAIC05NDgsOSArOTQ5LDggQEAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShidXMsICZwbWFjX2kyY19idXNzZXMsIGxpbmspIHsKIAkJCWlmIChwID09IGJ1cy0+YnVzbm9kZSkgewogCQkJCWlmIChwcmV2ICYmIGJ1cy0+ZmxhZ3MgJiBwbWFjX2kyY19tdWx0aWJ1cykgewotCQkJCQl1MzIgKnJlZzsKLQkJCQkJcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShwcmV2LCAicmVnIiwKLQkJCQkJCQkJICBOVUxMKTsKKwkJCQkJY29uc3QgdTMyICpyZWc7CisJCQkJCXJlZyA9IGdldF9wcm9wZXJ0eShwcmV2LCAicmVnIiwgTlVMTCk7CiAJCQkJCWlmICghcmVnKQogCQkJCQkJY29udGludWU7CiAJCQkJCWlmICgoKCpyZWcpID4+IDgpICE9IGJ1cy0+Y2hhbm5lbCkKQEAgLTk3MSw3ICs5NzEsNyBAQAogCiB1OCBwbWFjX2kyY19nZXRfZGV2X2FkZHIoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UpCiB7Ci0JdTMyICpyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRldmljZSwgInJlZyIsIE5VTEwpOworCWNvbnN0IHUzMiAqcmVnID0gZ2V0X3Byb3BlcnR5KGRldmljZSwgInJlZyIsIE5VTEwpOwogCiAJaWYgKHJlZyA9PSBOVUxMKQogCQlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BjaS5jCmluZGV4IDIwNWQwNDQuLjk5MjNhZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wY2kuYwpAQCAtNjYsMTYgKzY2LDE2IEBACiBzdGF0aWMgaW50IF9faW5pdCBmaXh1cF9vbmVfbGV2ZWxfYnVzX3JhbmdlKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgaW50IGhpZ2hlcikKIHsKIAlmb3IgKDsgbm9kZSAhPSAwO25vZGUgPSBub2RlLT5zaWJsaW5nKSB7Ci0JCWludCAqIGJ1c19yYW5nZTsKLQkJdW5zaWduZWQgaW50ICpjbGFzc19jb2RlOworCQljb25zdCBpbnQgKiBidXNfcmFuZ2U7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqY2xhc3NfY29kZTsKIAkJaW50IGxlbjsKIAogCQkvKiBGb3IgUENJPC0+UENJIGJyaWRnZXMgb3IgQ2FyZEJ1cyBicmlkZ2VzLCB3ZSBnbyBkb3duICovCi0JCWNsYXNzX2NvZGUgPSAodW5zaWduZWQgaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAiY2xhc3MtY29kZSIsIE5VTEwpOworCQljbGFzc19jb2RlID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJjbGFzcy1jb2RlIiwgTlVMTCk7CiAJCWlmICghY2xhc3NfY29kZSB8fCAoKCpjbGFzc19jb2RlID4+IDgpICE9IFBDSV9DTEFTU19CUklER0VfUENJICYmCiAJCQkoKmNsYXNzX2NvZGUgPj4gOCkgIT0gUENJX0NMQVNTX0JSSURHRV9DQVJEQlVTKSkKIAkJCWNvbnRpbnVlOwotCQlidXNfcmFuZ2UgPSAoaW50ICopIGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJCWJ1c19yYW5nZSA9IGdldF9wcm9wZXJ0eShub2RlLCAiYnVzLXJhbmdlIiwgJmxlbik7CiAJCWlmIChidXNfcmFuZ2UgIT0gTlVMTCAmJiBsZW4gPiAyICogc2l6ZW9mKGludCkpIHsKIAkJCWlmIChidXNfcmFuZ2VbMV0gPiBoaWdoZXIpCiAJCQkJaGlnaGVyID0gYnVzX3JhbmdlWzFdOwpAQCAtOTMsMTMgKzkzLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5pdCBmaXh1cF9idXNfcmFuZ2Uoc3RydWN0IGRldmljZV9ub2RlICpicmlkZ2UpCiB7Ci0JaW50ICogYnVzX3JhbmdlOwotCWludCBsZW47CisJaW50ICpidXNfcmFuZ2UsIGxlbjsKKwlzdHJ1Y3QgcHJvcGVydHkgKnByb3A7CiAKIAkvKiBMb29rdXAgdGhlICJidXMtcmFuZ2UiIHByb3BlcnR5IGZvciB0aGUgaG9zZSAqLwotCWJ1c19yYW5nZSA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGJyaWRnZSwgImJ1cy1yYW5nZSIsICZsZW4pOwotCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpCisJcHJvcCA9IG9mX2ZpbmRfcHJvcGVydHkoYnJpZGdlLCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKHByb3AgPT0gTlVMTCB8fCBwcm9wLT5sZW5ndGggPCAyICogc2l6ZW9mKGludCkpCiAJCXJldHVybjsKKworCWJ1c19yYW5nZSA9IChpbnQgKilwcm9wLT52YWx1ZTsKIAlidXNfcmFuZ2VbMV0gPSBmaXh1cF9vbmVfbGV2ZWxfYnVzX3JhbmdlKGJyaWRnZS0+Y2hpbGQsIGJ1c19yYW5nZVsxXSk7CiB9CiAKQEAgLTIzNyw3ICsyMzksNyBAQAogc3RhdGljIGludCBjaGFvc192YWxpZGF0ZV9kZXYoc3RydWN0IHBjaV9idXMgKmJ1cywgaW50IGRldmZuLCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyICp2ZW5kb3IsICpkZXZpY2U7CisJY29uc3QgdTMyICp2ZW5kb3IsICpkZXZpY2U7CiAKIAlpZiAob2Zmc2V0ID49IDB4MTAwKQogCQlyZXR1cm4gIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsKQEAgLTI0NSw4ICsyNDcsOCBAQAogCWlmIChucCA9PSBOVUxMKQogCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwogCi0JdmVuZG9yID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInZlbmRvci1pZCIsIE5VTEwpOwotCWRldmljZSA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwl2ZW5kb3IgPSBnZXRfcHJvcGVydHkobnAsICJ2ZW5kb3ItaWQiLCBOVUxMKTsKKwlkZXZpY2UgPSBnZXRfcHJvcGVydHkobnAsICJkZXZpY2UtaWQiLCBOVUxMKTsKIAlpZiAodmVuZG9yID09IE5VTEwgfHwgZGV2aWNlID09IE5VTEwpCiAJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CiAKQEAgLTY4NiwyMCArNjg4LDIxIEBACiAKIAlmb3IgKG5lYyA9IE5VTEw7IChuZWMgPSBvZl9maW5kX25vZGVfYnlfbmFtZShuZWMsICJ1c2IiKSkgIT0gTlVMTDspIHsKIAkJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwotCQl1MzIgZGF0YSwgKnByb3A7CisJCXUzMiBkYXRhOworCQljb25zdCB1MzIgKnByb3A7CiAJCXU4IGJ1cywgZGV2Zm47CiAKLQkJcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobmVjLCAidmVuZG9yLWlkIiwgTlVMTCk7CisJCXByb3AgPSBnZXRfcHJvcGVydHkobmVjLCAidmVuZG9yLWlkIiwgTlVMTCk7CiAJCWlmIChwcm9wID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJaWYgKDB4MTAzMyAhPSAqcHJvcCkKIAkJCWNvbnRpbnVlOwotCQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShuZWMsICJkZXZpY2UtaWQiLCBOVUxMKTsKKwkJcHJvcCA9IGdldF9wcm9wZXJ0eShuZWMsICJkZXZpY2UtaWQiLCBOVUxMKTsKIAkJaWYgKHByb3AgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoMHgwMDM1ICE9ICpwcm9wKQogCQkJY29udGludWU7Ci0JCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5lYywgInJlZyIsIE5VTEwpOworCQlwcm9wID0gZ2V0X3Byb3BlcnR5KG5lYywgInJlZyIsIE5VTEwpOwogCQlpZiAocHJvcCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWRldmZuID0gKHByb3BbMF0gPj4gOCkgJiAweGZmOwpAQCAtODk4LDcgKzkwMSw3IEBACiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogCXN0cnVjdCByZXNvdXJjZSByc3JjOwogCWNoYXIgKmRpc3BfbmFtZTsKLQlpbnQgKmJ1c19yYW5nZTsKKwljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAlpbnQgcHJpbWFyeSA9IDEsIGhhc19hZGRyZXNzID0gMDsKIAogCURCRygiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOwpAQCAtOTA3LDcgKzkxMCw3IEBACiAJaGFzX2FkZHJlc3MgPSAob2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYsIDAsICZyc3JjKSA9PSAwKTsKIAogCS8qIEdldCBidXMgcmFuZ2UgaWYgYW55ICovCi0JYnVzX3JhbmdlID0gKGludCAqKSBnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJYnVzX3JhbmdlID0gZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOwogCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKIAkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKaW5kZXggNmQ2NjM1OS4uZWUzYjIyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9wZnVuY19iYXNlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCSAqIHdlIGp1c3QgY3JlYXRlIHRoZW0gYWxsCiAJICovCiAJZm9yIChncCA9IE5VTEw7IChncCA9IG9mX2dldF9uZXh0X2NoaWxkKGdwYXJlbnQsIGdwKSkgIT0gTlVMTDspIHsKLQkJdTMyICpyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KGdwLCAicmVnIiwgTlVMTCk7CisJCWNvbnN0IHUzMiAqcmVnID0gZ2V0X3Byb3BlcnR5KGdwLCAicmVnIiwgTlVMTCk7CiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogCQlpZiAocmVnID09IE5VTEwpCiAJCQljb250aW51ZTsKQEAgLTI1Niw3ICsyNTYsNyBAQAogCS53cml0ZV9yZWczMgkJPSBtYWNpb19kb193cml0ZV9yZWczMiwKIAkucmVhZF9yZWczMgkJPSBtYWNpb19kb19yZWFkX3JlZzMyLAogCS53cml0ZV9yZWc4CQk9IG1hY2lvX2RvX3dyaXRlX3JlZzgsCi0JLnJlYWRfcmVnMzIJCT0gbWFjaW9fZG9fcmVhZF9yZWc4LAorCS5yZWFkX3JlZzgJCT0gbWFjaW9fZG9fcmVhZF9yZWc4LAogCS5yZWFkX3JlZzMyX21zcngJPSBtYWNpb19kb19yZWFkX3JlZzMyX21zcngsCiAJLnJlYWRfcmVnOF9tc3J4CQk9IG1hY2lvX2RvX3JlYWRfcmVnOF9tc3J4LAogCS53cml0ZV9yZWczMl9zbG0JPSBtYWNpb19kb193cml0ZV9yZWczMl9zbG0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGZ1bmNfY29yZS5jCmluZGV4IGIxMTdhZGIuLjc2NTFmMjc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BmdW5jX2NvcmUuYwpAQCAtODEzLDE0ICs4MTMsMTUgQEAKIAlzdHJ1Y3QgcG1mX2RldmljZSAqZGV2OwogCXN0cnVjdCBwbWZfZnVuY3Rpb24gKmZ1bmMsICpyZXN1bHQgPSBOVUxMOwogCWNoYXIgZm5hbWVbNjRdOwotCXUzMiAqcHJvcCwgcGg7CisJY29uc3QgdTMyICpwcm9wOworCXUzMiBwaDsKIAogCS8qCiAJICogTG9vayBmb3IgYSAicGxhdGZvcm0tKiIgZnVuY3Rpb24gcmVmZXJlbmNlLiBJZiB3ZSBjYW4ndCBmaW5kCiAJICogb25lLCB0aGVuIHdlIGZhbGxiYWNrIHRvIGEgZGlyZWN0IGNhbGwgYXR0ZW1wdAogCSAqLwogCXNucHJpbnRmKGZuYW1lLCA2MywgInBsYXRmb3JtLSVzIiwgbmFtZSk7Ci0JcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkodGFyZ2V0LCBmbmFtZSwgTlVMTCk7CisJcHJvcCA9IGdldF9wcm9wZXJ0eSh0YXJnZXQsIGZuYW1lLCBOVUxMKTsKIAlpZiAocHJvcCA9PSBOVUxMKQogCQlnb3RvIGZpbmRfaXQ7CiAJcGggPSAqcHJvcDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5jCmluZGV4IDA2MDc4OWUuLjM5ZjdkZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuYwpAQCAtODcsOCArODcsOCBAQAogc3RhdGljIHZvaWQgcG1hY19tYXNrX2FuZF9hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQogewogCXVuc2lnbmVkIGludCBzcmMgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwotICAgICAgICB1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCAodmlycSAmIDB4MWYpOwotICAgICAgICBpbnQgaSA9IHZpcnEgPj4gNTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgKHNyYyAmIDB4MWYpOworICAgICAgICBpbnQgaSA9IHNyYyA+PiA1OwogICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKQEAgLTE3NSw3ICsxNzUsNyBAQAogCiAgIAlzcGluX2xvY2tfaXJxc2F2ZSgmcG1hY19waWNfbG9jaywgZmxhZ3MpOwogICAgICAgICBfX2NsZWFyX2JpdChzcmMsIHBwY19jYWNoZWRfaXJxX21hc2spOwotICAgICAgICBfX3BtYWNfc2V0X2lycV9tYXNrKHNyYywgMCk7CisgICAgICAgIF9fcG1hY19zZXRfaXJxX21hc2soc3JjLCAxKTsKICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYWNfcGljX2xvY2ssIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCmluZGV4IDMxYTlkYTcuLjgyNGE2MTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogc3RhdGljIHZvaWQgcG1hY19zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JY2hhciAqcHA7CisJY29uc3QgY2hhciAqcHA7CiAJaW50IHBsZW47CiAJaW50IG1ibW9kZWw7CiAJdW5zaWduZWQgaW50IG1iZmxhZ3M7CkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogCXNlcV9wcmludGYobSwgIm1hY2hpbmVcdFx0OiAiKTsKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvIik7CiAJaWYgKG5wICE9IE5VTEwpIHsKLQkJcHAgPSAoY2hhciAqKSBnZXRfcHJvcGVydHkobnAsICJtb2RlbCIsIE5VTEwpOworCQlwcCA9IGdldF9wcm9wZXJ0eShucCwgIm1vZGVsIiwgTlVMTCk7CiAJCWlmIChwcCAhPSBOVUxMKQogCQkJc2VxX3ByaW50ZihtLCAiJXNcbiIsIHBwKTsKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihtLCAiUG93ZXJNYWNcbiIpOwotCQlwcCA9IChjaGFyICopIGdldF9wcm9wZXJ0eShucCwgImNvbXBhdGlibGUiLCAmcGxlbik7CisJCXBwID0gZ2V0X3Byb3BlcnR5KG5wLCAiY29tcGF0aWJsZSIsICZwbGVuKTsKIAkJaWYgKHBwICE9IE5VTEwpIHsKIAkJCXNlcV9wcmludGYobSwgIm1vdGhlcmJvYXJkXHQ6Iik7CiAJCQl3aGlsZSAocGxlbiA+IDApIHsKQEAgLTE2MywxMCArMTYzLDggQEAKIAlpZiAobnAgPT0gTlVMTCkKIAkJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY2FjaGUiKTsKIAlpZiAobnAgIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgKmljID0gKHVuc2lnbmVkIGludCAqKQotCQkJZ2V0X3Byb3BlcnR5KG5wLCAiaS1jYWNoZS1zaXplIiwgTlVMTCk7Ci0JCXVuc2lnbmVkIGludCAqZGMgPSAodW5zaWduZWQgaW50ICopCi0JCQlnZXRfcHJvcGVydHkobnAsICJkLWNhY2hlLXNpemUiLCBOVUxMKTsKKwkJY29uc3QgdW5zaWduZWQgaW50ICppYyA9IGdldF9wcm9wZXJ0eShucCwgImktY2FjaGUtc2l6ZSIsIE5VTEwpOworCQljb25zdCB1bnNpZ25lZCBpbnQgKmRjID0gZ2V0X3Byb3BlcnR5KG5wLCAiZC1jYWNoZS1zaXplIiwgTlVMTCk7CiAJCXNlcV9wcmludGYobSwgIkwyIGNhY2hlXHQ6Iik7CiAJCWhhc19sMmNhY2hlID0gMTsKIAkJaWYgKGdldF9wcm9wZXJ0eShucCwgImNhY2hlLXVuaWZpZWQiLCBOVUxMKSAhPSAwICYmIGRjKSB7CkBAIC0yNTQsNyArMjUyLDcgQEAKIAkJaWYgKG5wID09IDApCiAJCQlucCA9IGZpbmRfdHlwZV9kZXZpY2VzKCJjcHUiKTsKIAkJaWYgKG5wICE9IDApIHsKLQkJCXVuc2lnbmVkIGludCAqbDJjciA9ICh1bnNpZ25lZCBpbnQgKikKKwkJCWNvbnN0IHVuc2lnbmVkIGludCAqbDJjciA9CiAJCQkJZ2V0X3Byb3BlcnR5KG5wLCAibDJjci12YWx1ZSIsIE5VTEwpOwogCQkJaWYgKGwyY3IgIT0gMCkgewogCQkJCXBwY19vdmVycmlkZV9sMmNyID0gMTsKQEAgLTI3Nyw3ICsyNzUsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IHBtYWNfc2V0dXBfYXJjaCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1LCAqaWM7Ci0JaW50ICpmcDsKKwljb25zdCBpbnQgKmZwOwogCXVuc2lnbmVkIGxvbmcgcHZyOwogCiAJcHZyID0gUFZSX1ZFUihtZnNwcihTUFJOX1BWUikpOwpAQCAtMjg3LDcgKzI4NSw3IEBACiAJbG9vcHNfcGVyX2ppZmZ5ID0gNTAwMDAwMDAgLyBIWjsKIAljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CiAJaWYgKGNwdSAhPSBOVUxMKSB7Ci0JCWZwID0gKGludCAqKSBnZXRfcHJvcGVydHkoY3B1LCAiY2xvY2stZnJlcXVlbmN5IiwgTlVMTCk7CisJCWZwID0gZ2V0X3Byb3BlcnR5KGNwdSwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpOwogCQlpZiAoZnAgIT0gTlVMTCkgewogCQkJaWYgKHB2ciA+PSAweDMwICYmIHB2ciA8IDB4ODApCiAJCQkJLyogUFBDOTcwIGV0Yy4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NtcC5jCmluZGV4IDgyN2I3MTIuLjY1M2VlYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc21wLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zbXAuYwpAQCAtNTQ4LDcgKzU0OCw3IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpjYyA9IE5VTEw7CQogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKLQl1MzIgKnJlZzsKKwljb25zdCB1MzIgKnJlZzsKIAlpbnQgb2s7CiAKIAkvKiBMb29rIGZvciB0aGUgY2xvY2sgY2hpcCAqLwpAQCAtNTYyLDcgKzU2Miw3IEBACiAJCXBtYWNfdGJfY2xvY2tfY2hpcF9ob3N0ID0gcG1hY19pMmNfZmluZF9idXMoY2MpOwogCQlpZiAocG1hY190Yl9jbG9ja19jaGlwX2hvc3QgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwotCQlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KGNjLCAicmVnIiwgTlVMTCk7CisJCXJlZyA9IGdldF9wcm9wZXJ0eShjYywgInJlZyIsIE5VTEwpOwogCQlpZiAocmVnID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJc3dpdGNoICgqcmVnKSB7CkBAIC03MDcsOCArNzA3LDcgQEAKIAkJY29yZTk5X3RiX2dwaW8gPSBLTF9HUElPX1RCX0VOQUJMRTsJLyogZGVmYXVsdCB2YWx1ZSAqLwogCQljcHUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAiY3B1Iik7CiAJCWlmIChjcHUgIT0gTlVMTCkgewotCQkJdGJwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShjcHUsICJ0aW1lYmFzZS1lbmFibGUiLAotCQkJCQkJICAgICBOVUxMKTsKKwkJCXRicHJvcCA9IGdldF9wcm9wZXJ0eShjcHUsICJ0aW1lYmFzZS1lbmFibGUiLCBOVUxMKTsKIAkJCWlmICh0YnByb3ApCiAJCQkJY29yZTk5X3RiX2dwaW8gPSAqdGJwcm9wOwogCQkJb2Zfbm9kZV9wdXQoY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvdWRiZ19zY2MuYwppbmRleCAzN2U1YjFlLi5jZTFhMjM1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3VkYmdfc2NjLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy91ZGJnX3NjYy5jCkBAIC02OCwxMSArNjgsMTEgQEAKIAogdm9pZCB1ZGJnX3NjY19pbml0KGludCBmb3JjZV9zY2MpCiB7Ci0JdTMyICpyZWc7CisJY29uc3QgdTMyICpyZWc7CiAJdW5zaWduZWQgbG9uZyBhZGRyOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3Rkb3V0ID0gTlVMTCwgKmVzY2MgPSBOVUxMLCAqbWFjaW8gPSBOVUxMOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2gsICpjaF9kZWYgPSBOVUxMLCAqY2hfYSA9IE5VTEw7Ci0JY2hhciAqcGF0aDsKKwljb25zdCBjaGFyICpwYXRoOwogCWludCBpLCB4OwogCiAJZXNjYyA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJlc2NjIik7CkBAIC04MSw3ICs4MSw3IEBACiAJbWFjaW8gPSBvZl9nZXRfcGFyZW50KGVzY2MpOwogCWlmIChtYWNpbyA9PSBOVUxMKQogCQlnb3RvIGJhaWw7Ci0JcGF0aCA9IChjaGFyICopZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LHN0ZG91dC1wYXRoIiwgTlVMTCk7CisJcGF0aCA9IGdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxzdGRvdXQtcGF0aCIsIE5VTEwpOwogCWlmIChwYXRoICE9IE5VTEwpCiAJCXN0ZG91dCA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKHBhdGgpOwogCWZvciAoY2ggPSBOVUxMOyAoY2ggPSBvZl9nZXRfbmV4dF9jaGlsZChlc2NjLCBjaCkpICE9IE5VTEw7KSB7CkBAIC05NiwxMyArOTYsMTMgQEAKIAljaCA9IGNoX2RlZiA/IGNoX2RlZiA6IGNoX2E7CiAKIAkvKiBHZXQgYWRkcmVzcyB3aXRoaW4gbWFjLWlvIEFTSUMgKi8KLQlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KGVzY2MsICJyZWciLCBOVUxMKTsKKwlyZWcgPSBnZXRfcHJvcGVydHkoZXNjYywgInJlZyIsIE5VTEwpOwogCWlmIChyZWcgPT0gTlVMTCkKIAkJZ290byBiYWlsOwogCWFkZHIgPSByZWdbMF07CiAKIAkvKiBHZXQgYWRkcmVzcyBvZiBtYWMtaW8gUENJIGl0c2VsZiAqLwotCXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobWFjaW8sICJhc3NpZ25lZC1hZGRyZXNzZXMiLCBOVUxMKTsKKwlyZWcgPSBnZXRfcHJvcGVydHkobWFjaW8sICJhc3NpZ25lZC1hZGRyZXNzZXMiLCBOVUxMKTsKIAlpZiAocmVnID09IE5VTEwpCiAJCWdvdG8gYmFpbDsKIAlhZGRyICs9IHJlZ1syXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQppbmRleCBlNWUwZmY0Li45OTcyNDNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCkBAIC0xMiwzICsxMiw0IEBACiAKIG9iai0kKENPTkZJR19IVkNfQ09OU09MRSkJKz0gaHZjb25zb2xlLm8KIG9iai0kKENPTkZJR19IVkNTKQkJKz0gaHZjc2VydmVyLm8KK29iai0kKENPTkZJR19IQ0FMTF9TVEFUUykJKz0gaHZDYWxsX2luc3QubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaC5jCmluZGV4IDMyZWFkZGYuLjg0YmM4ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoLmMKQEAgLTQ0OSw3ICs0NDksMTEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIFRoZSBjb2RlIGJlbG93IGRlYWxzIHdpdGggZXJyb3IgcmVjb3ZlcnkgKi8KIAotLyoqIFJldHVybiBuZWdhdGl2ZSB2YWx1ZSBpZiBhIHBlcm1hbmVudCBlcnJvciwgZWxzZSByZXR1cm4KKy8qKgorICogZWVoX3Nsb3RfYXZhaWxhYmlsaXR5IC0gcmV0dXJucyBlcnJvciBzdGF0dXMgb2Ygc2xvdAorICogQHBkbiBwY2kgZGV2aWNlIG5vZGUKKyAqCisgKiBSZXR1cm4gbmVnYXRpdmUgdmFsdWUgaWYgYSBwZXJtYW5lbnQgZXJyb3IsIGVsc2UgcmV0dXJuCiAgKiBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gd2FpdCB1bnRpbCB0aGUgUENJIHNsb3QgaXMKICAqIHJlYWR5IHRvIGJlIHVzZWQuCiAgKi8KQEAgLTQ3NCwxMSArNDc4LDQyIEBACiAKIAlwcmludGsgKEtFUk5fRVJSICJFRUg6IFNsb3QgdW5hdmFpbGFibGU6IHJjPSVkLCByZXRzPSVkICVkICVkXG4iLAogCQlyYywgcmV0c1swXSwgcmV0c1sxXSwgcmV0c1syXSk7Ci0JcmV0dXJuIC0xOworCXJldHVybiAtMjsKIH0KIAotLyoqIHJ0YXNfcGNpX3Nsb3RfcmVzZXQgcmFpc2VzL2xvd2VycyB0aGUgcGNpICNSU1QgbGluZQotICogIHN0YXRlOiAxLzAgdG8gcmFpc2UvbG93ZXIgdGhlICNSU1QKKy8qKgorICogcnRhc19wY2lfZW5hYmxlIC0gZW5hYmxlIE1NSU8gb3IgRE1BIHRyYW5zZmVycyBmb3IgdGhpcyBzbG90CisgKiBAcGRuIHBjaSBkZXZpY2Ugbm9kZQorICovCisKK2ludAorcnRhc19wY2lfZW5hYmxlKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IGZ1bmN0aW9uKQoreworCWludCBjb25maWdfYWRkcjsKKwlpbnQgcmM7CisKKwkvKiBVc2UgUEUgY29uZmlndXJhdGlvbiBhZGRyZXNzLCBpZiBwcmVzZW50ICovCisJY29uZmlnX2FkZHIgPSBwZG4tPmVlaF9jb25maWdfYWRkcjsKKwlpZiAocGRuLT5lZWhfcGVfY29uZmlnX2FkZHIpCisJCWNvbmZpZ19hZGRyID0gcGRuLT5lZWhfcGVfY29uZmlnX2FkZHI7CisKKwlyYyA9IHJ0YXNfY2FsbChpYm1fc2V0X2VlaF9vcHRpb24sIDQsIDEsIE5VTEwsCisJICAgICAgICAgICAgICAgY29uZmlnX2FkZHIsCisJICAgICAgICAgICAgICAgQlVJRF9ISShwZG4tPnBoYi0+YnVpZCksCisJICAgICAgICAgICAgICAgQlVJRF9MTyhwZG4tPnBoYi0+YnVpZCksCisJCSAgICAgICAgICAgIGZ1bmN0aW9uKTsKKworCWlmIChyYykKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRUVIOiBDYW5ub3QgZW5hYmxlIGZ1bmN0aW9uICVkLCBlcnI9JWQgZG49JXNcbiIsCisJCSAgICAgICAgZnVuY3Rpb24sIHJjLCBwZG4tPm5vZGUtPmZ1bGxfbmFtZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogcnRhc19wY2lfc2xvdF9yZXNldCAtIHJhaXNlcy9sb3dlcnMgdGhlIHBjaSAjUlNUIGxpbmUKKyAqIEBwZG4gcGNpIGRldmljZSBub2RlCisgKiBAc3RhdGU6IDEvMCB0byByYWlzZS9sb3dlciB0aGUgI1JTVAogICoKICAqIENsZWFyIHRoZSBFRUgtZnJvemVuIGNvbmRpdGlvbiBvbiBhIHNsb3QuICBUaGlzIHJvdXRpbmUKICAqIGFzc2VydHMgdGhlIFBDSSAjUlNUIGxpbmUgaWYgdGhlICdzdGF0ZScgYXJndW1lbnQgaXMgJzEnLApAQCAtNTExLDI0ICs1NDYsMjEgQEAKIAkgICAgICAgICAgICAgICBCVUlEX0hJKHBkbi0+cGhiLT5idWlkKSwKIAkgICAgICAgICAgICAgICBCVUlEX0xPKHBkbi0+cGhiLT5idWlkKSwKIAkgICAgICAgICAgICAgICBzdGF0ZSk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HICJFRUg6IFVuYWJsZSB0byByZXNldCB0aGUgZmFpbGVkIHNsb3QsICglZCkgI1JTVD0lZCBkbj0lc1xuIiwgCisJaWYgKHJjKQorCQlwcmludGsgKEtFUk5fV0FSTklORyAiRUVIOiBVbmFibGUgdG8gcmVzZXQgdGhlIGZhaWxlZCBzbG90LCIKKwkJICAgICAgICAiICglZCkgI1JTVD0lZCBkbj0lc1xuIiwKIAkJICAgICAgICByYywgc3RhdGUsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKLQkJcmV0dXJuOwotCX0KIH0KIAotLyoqIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgLS0gYXNzZXJ0IHRoZSBwY2kgI1JTVCBsaW5lIGZvciAxLzQgc2Vjb25kCi0gKiAgZG4gLS0gZGV2aWNlIG5vZGUgdG8gYmUgcmVzZXQuCisvKioKKyAqIHJ0YXNfc2V0X3Nsb3RfcmVzZXQgLS0gYXNzZXJ0IHRoZSBwY2kgI1JTVCBsaW5lIGZvciAxLzQgc2Vjb25kCisgKiBAcGRuOiBwY2kgZGV2aWNlIG5vZGUgdG8gYmUgcmVzZXQuCiAgKgogICogIFJldHVybiAwIGlmIHN1Y2Nlc3MsIGVsc2UgYSBub24temVybyB2YWx1ZS4KICAqLwogCi1pbnQKLXJ0YXNfc2V0X3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kbiAqcGRuKQorc3RhdGljIHZvaWQgX19ydGFzX3NldF9zbG90X3Jlc2V0KHN0cnVjdCBwY2lfZG4gKnBkbikKIHsKLQlpbnQgaSwgcmM7Ci0KIAlydGFzX3BjaV9zbG90X3Jlc2V0IChwZG4sIDEpOwogCiAJLyogVGhlIFBDSSBidXMgcmVxdWlyZXMgdGhhdCB0aGUgcmVzZXQgYmUgaGVsZCBoaWdoIGZvciBhdCBsZWFzdApAQCAtNTQ5LDE3ICs1ODEsMzMgQEAKIAkgKiB1cCB0cmFmZmljLiAqLwogI2RlZmluZSBQQ0lfQlVTX1NFVFRMRV9USU1FX01TRUMgMTgwMAogCW1zbGVlcCAoUENJX0JVU19TRVRUTEVfVElNRV9NU0VDKTsKK30KKworaW50IHJ0YXNfc2V0X3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kbiAqcGRuKQoreworCWludCBpLCByYzsKKworCV9fcnRhc19zZXRfc2xvdF9yZXNldChwZG4pOwogCiAJLyogTm93IGRvdWJsZSBjaGVjayB3aXRoIHRoZSBmaXJtd2FyZSB0byBtYWtlIHN1cmUgdGhlIGRldmljZSBpcwogCSAqIHJlYWR5IHRvIGJlIHVzZWQ7IGlmIG5vdCwgd2FpdCBmb3IgcmVjb3ZlcnkuICovCiAJZm9yIChpPTA7IGk8MTA7IGkrKykgewogCQlyYyA9IGVlaF9zbG90X2F2YWlsYWJpbGl0eSAocGRuKTsKLQkJaWYgKHJjIDwgMCkKLQkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogZmFpbGVkICglZCkgdG8gcmVzZXQgc2xvdCAlc1xuIiwgcmMsIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKIAkJaWYgKHJjID09IDApCiAJCQlyZXR1cm4gMDsKLQkJaWYgKHJjIDwgMCkKKworCQlpZiAocmMgPT0gLTIpIHsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogZmFpbGVkICglZCkgdG8gcmVzZXQgc2xvdCAlc1xuIiwKKwkJCSAgICAgICAgaSwgcGRuLT5ub2RlLT5mdWxsX25hbWUpOworCQkJX19ydGFzX3NldF9zbG90X3Jlc2V0KHBkbik7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChyYyA8IDApIHsKKwkJCXByaW50ayAoS0VSTl9FUlIgIkVFSDogdW5yZWNvdmVyYWJsZSBzbG90IGZhaWx1cmUgJXNcbiIsCisJCQkgICAgICAgIHBkbi0+bm9kZS0+ZnVsbF9uYW1lKTsKIAkJCXJldHVybiAtMTsKKwkJfQogCiAJCW1zbGVlcCAocmMrMTAwKTsKIAl9CkBAIC01ODIsNiArNjMwLDggQEAKIAogLyoqCiAgKiBfX3Jlc3RvcmVfYmFycyAtIFJlc3RvcmUgdGhlIEJhc2UgQWRkcmVzcyBSZWdpc3RlcnMKKyAqIEBwZG46IHBjaSBkZXZpY2Ugbm9kZQorICoKICAqIExvYWRzIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXJzLAogICogdGhlIGV4cGFuc2lvbiBST00gYmFzZSBhZGRyZXNzLCB0aGUgbGF0ZW5jeSB0aW1lciwgYW5kIGV0Yy4KICAqIGZyb20gdGhlIHNhdmVkIHZhbHVlcyBpbiB0aGUgZGV2aWNlIG5vZGUuCkBAIC02OTEsMTEgKzc0MSwxMSBAQAogewogCXN0cnVjdCBlZWhfZWFybHlfZW5hYmxlX2luZm8gKmluZm8gPSBkYXRhOwogCWludCByZXQ7Ci0JY2hhciAqc3RhdHVzID0gZ2V0X3Byb3BlcnR5KGRuLCAic3RhdHVzIiwgTlVMTCk7Ci0JdTMyICpjbGFzc19jb2RlID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkbiwgImNsYXNzLWNvZGUiLCBOVUxMKTsKLQl1MzIgKnZlbmRvcl9pZCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJ2ZW5kb3ItaWQiLCBOVUxMKTsKLQl1MzIgKmRldmljZV9pZCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZG4sICJkZXZpY2UtaWQiLCBOVUxMKTsKLQl1MzIgKnJlZ3M7CisJY29uc3QgY2hhciAqc3RhdHVzID0gZ2V0X3Byb3BlcnR5KGRuLCAic3RhdHVzIiwgTlVMTCk7CisJY29uc3QgdTMyICpjbGFzc19jb2RlID0gZ2V0X3Byb3BlcnR5KGRuLCAiY2xhc3MtY29kZSIsIE5VTEwpOworCWNvbnN0IHUzMiAqdmVuZG9yX2lkID0gZ2V0X3Byb3BlcnR5KGRuLCAidmVuZG9yLWlkIiwgTlVMTCk7CisJY29uc3QgdTMyICpkZXZpY2VfaWQgPSBnZXRfcHJvcGVydHkoZG4sICJkZXZpY2UtaWQiLCBOVUxMKTsKKwljb25zdCB1MzIgKnJlZ3M7CiAJaW50IGVuYWJsZTsKIAlzdHJ1Y3QgcGNpX2RuICpwZG4gPSBQQ0lfRE4oZG4pOwogCkBAIC03MzcsNyArNzg3LDcgQEAKIAogCS8qIE9rLi4uIHNlZSBpZiB0aGlzIGRldmljZSBzdXBwb3J0cyBFRUguICBTb21lIGRvLCBzb21lIGRvbid0LAogCSAqIGFuZCB0aGUgb25seSB3YXkgdG8gZmluZCBvdXQgaXMgdG8gY2hlY2sgZWFjaCBhbmQgZXZlcnkgb25lLiAqLwotCXJlZ3MgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRuLCAicmVnIiwgTlVMTCk7CisJcmVncyA9IGdldF9wcm9wZXJ0eShkbiwgInJlZyIsIE5VTEwpOwogCWlmIChyZWdzKSB7CiAJCS8qIEZpcnN0IHJlZ2lzdGVyIGVudHJ5IGlzIGFkZHIgKDAwQkJTUzAwKSAgKi8KIAkJLyogVHJ5IHRvIGVuYWJsZSBlZWggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfY2FjaGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfY2FjaGUuYwppbmRleCBjMzdhODQ5Li5iNmI0NjJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2NhY2hlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9jYWNoZS5jCkBAIC0xNTcsNiArMTU3LDcgQEAKIAlpZiAoIXBpYXIpCiAJCXJldHVybiBOVUxMOwogCisJcGNpX2Rldl9nZXQoZGV2KTsKIAlwaWFyLT5hZGRyX2xvID0gYWxvOwogCXBpYXItPmFkZHJfaGkgPSBhaGk7CiAJcGlhci0+cGNpZGV2ID0gZGV2OwpAQCAtMTc4LDcgKzE3OSw2IEBACiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAlzdHJ1Y3QgcGNpX2RuICpwZG47CiAJaW50IGk7Ci0JaW50IGluc2VydGVkID0gMDsKIAogCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAJaWYgKCFkbikgewpAQCAtMTk3LDkgKzE5Nyw2IEBACiAJCXJldHVybjsKIAl9CiAKLQkvKiBUaGUgY2FjaGUgaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGRldmljZS4uLiAqLwotCXBjaV9kZXZfZ2V0KGRldik7Ci0KIAkvKiBXYWxrIHJlc291cmNlcyBvbiB0aGlzIGRldmljZSwgcG9rZSB0aGVtIGludG8gdGhlIHRyZWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgREVWSUNFX0NPVU5UX1JFU09VUkNFOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsaSk7CkBAIC0yMTIsMTIgKzIwOSw3IEBACiAJCWlmIChzdGFydCA9PSAwIHx8IH5zdGFydCA9PSAwIHx8IGVuZCA9PSAwIHx8IH5lbmQgPT0gMCkKIAkJCSBjb250aW51ZTsKIAkJcGNpX2FkZHJfY2FjaGVfaW5zZXJ0KGRldiwgc3RhcnQsIGVuZCwgZmxhZ3MpOwotCQlpbnNlcnRlZCA9IDE7CiAJfQotCi0JLyogSWYgdGhlcmUgd2FzIG5vdGhpbmcgdG8gYWRkLCB0aGUgY2FjaGUgaGFzIG5vIHJlZmVyZW5jZS4uLiAqLwotCWlmICghaW5zZXJ0ZWQpCi0JCXBjaV9kZXZfcHV0KGRldik7CiB9CiAKIC8qKgpAQCAtMjQwLDcgKzIzMiw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19wY2lfYWRkcl9jYWNoZV9yZW1vdmVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAJc3RydWN0IHJiX25vZGUgKm47Ci0JaW50IHJlbW92ZWQgPSAwOwogCiByZXN0YXJ0OgogCW4gPSByYl9maXJzdCgmcGNpX2lvX2FkZHJfY2FjaGVfcm9vdC5yYl9yb290KTsKQEAgLTI1MCwxNiArMjQxLDEyIEBACiAKIAkJaWYgKHBpYXItPnBjaWRldiA9PSBkZXYpIHsKIAkJCXJiX2VyYXNlKG4sICZwY2lfaW9fYWRkcl9jYWNoZV9yb290LnJiX3Jvb3QpOwotCQkJcmVtb3ZlZCA9IDE7CisJCQlwY2lfZGV2X3B1dChwaWFyLT5wY2lkZXYpOwogCQkJa2ZyZWUocGlhcik7CiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAkJbiA9IHJiX25leHQobik7CiAJfQotCi0JLyogVGhlIGNhY2hlIG5vIGxvbmdlciBob2xkcyBpdHMgcmVmZXJlbmNlIHRvIHRoaXMgZGV2aWNlLi4uICovCi0JaWYgKHJlbW92ZWQpCi0JCXBjaV9kZXZfcHV0KGRldik7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKaW5kZXggYWFhZDJjMC4uYzJiYzk5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCkBAIC03Nyw4ICs3NywxMiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiogZWVoX3JlcG9ydF9lcnJvciAtIHJlcG9ydCBhbiBFRUggZXJyb3IgdG8gZWFjaCBkZXZpY2UsCi0gKiAgY29sbGVjdCB1cCBhbmQgbWVyZ2UgdGhlIGRldmljZSByZXNwb25zZXMuCisvKioKKyAqIGVlaF9yZXBvcnRfZXJyb3IgLSByZXBvcnQgcGNpIGVycm9yIHRvIGVhY2ggZGV2aWNlIGRyaXZlcgorICogCisgKiBSZXBvcnQgYW4gRUVIIGVycm9yIHRvIGVhY2ggZGV2aWNlIGRyaXZlciwgY29sbGVjdCB1cCBhbmQgCisgKiBtZXJnZSB0aGUgZGV2aWNlIGRyaXZlciByZXNwb25zZXMuIEN1bXVsYXRpdmUgcmVzcG9uc2UgCisgKiBwYXNzZWQgYmFjayBpbiAidXNlcmRhdGEiLgogICovCiAKIHN0YXRpYyB2b2lkIGVlaF9yZXBvcnRfZXJyb3Ioc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqdXNlcmRhdGEpCkBAIC05NiwyNCArMTAwLDQ5IEBACiAJCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKIAkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKIAl9Ci0JaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyKQotCQlyZXR1cm47Ci0JaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCkKKwlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKKwkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKQogCQlyZXR1cm47CiAKIAlyYyA9IGRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkIChkZXYsIHBjaV9jaGFubmVsX2lvX2Zyb3plbik7CiAJaWYgKCpyZXMgPT0gUENJX0VSU19SRVNVTFRfTk9ORSkgKnJlcyA9IHJjOwotCWlmICgqcmVzID09IFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQpIHJldHVybjsKIAlpZiAoKnJlcyA9PSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUICYmCiAJICAgICByYyA9PSBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUKSAqcmVzID0gcmM7CiB9CiAKLS8qKiBlZWhfcmVwb3J0X3Jlc2V0IC0tIHRlbGwgdGhpcyBkZXZpY2UgdGhhdCB0aGUgcGNpIHNsb3QKLSAqICBoYXMgYmVlbiByZXNldC4KKy8qKgorICogZWVoX3JlcG9ydF9tbWlvX2VuYWJsZWQgLSB0ZWxsIGRyaXZlcnMgdGhhdCBNTUlPIGhhcyBiZWVuIGVuYWJsZWQKKyAqCisgKiBSZXBvcnQgYW4gRUVIIGVycm9yIHRvIGVhY2ggZGV2aWNlIGRyaXZlciwgY29sbGVjdCB1cCBhbmQKKyAqIG1lcmdlIHRoZSBkZXZpY2UgZHJpdmVyIHJlc3BvbnNlcy4gQ3VtdWxhdGl2ZSByZXNwb25zZQorICogcGFzc2VkIGJhY2sgaW4gInVzZXJkYXRhIi4KKyAqLworCitzdGF0aWMgdm9pZCBlZWhfcmVwb3J0X21taW9fZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICp1c2VyZGF0YSkKK3sKKwllbnVtIHBjaV9lcnNfcmVzdWx0IHJjLCAqcmVzID0gdXNlcmRhdGE7CisJc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciA9IGRldi0+ZHJpdmVyOworCisJLy8gZGV2LT5lcnJvcl9zdGF0ZSA9IHBjaV9jaGFubmVsX21taW9fZW5hYmxlZDsKKworCWlmICghZHJpdmVyIHx8CisJICAgICFkcml2ZXItPmVycl9oYW5kbGVyIHx8CisJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5tbWlvX2VuYWJsZWQpCisJCXJldHVybjsKKworCXJjID0gZHJpdmVyLT5lcnJfaGFuZGxlci0+bW1pb19lbmFibGVkIChkZXYpOworCWlmICgqcmVzID09IFBDSV9FUlNfUkVTVUxUX05PTkUpICpyZXMgPSByYzsKKwlpZiAoKnJlcyA9PSBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUICYmCisJICAgICByYyA9PSBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUKSAqcmVzID0gcmM7Cit9CisKKy8qKgorICogZWVoX3JlcG9ydF9yZXNldCAtIHRlbGwgZGV2aWNlIHRoYXQgc2xvdCBoYXMgYmVlbiByZXNldAogICovCiAKIHN0YXRpYyB2b2lkIGVlaF9yZXBvcnRfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqdXNlcmRhdGEpCiB7CisJZW51bSBwY2lfZXJzX3Jlc3VsdCByYywgKnJlcyA9IHVzZXJkYXRhOwogCXN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIgPSBkZXYtPmRyaXZlcjsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CiAKQEAgLTEyNCwxNCArMTUzLDIwIEBACiAJCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5FRUhfTU9ERV9JUlFfRElTQUJMRUQ7CiAJCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwogCX0KLQlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIpCi0JCXJldHVybjsKLQlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXItPnNsb3RfcmVzZXQpCisJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CisJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KQogCQlyZXR1cm47CiAKLQlkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KGRldik7CisJcmMgPSBkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KGRldik7CisJaWYgKCpyZXMgPT0gUENJX0VSU19SRVNVTFRfTk9ORSkgKnJlcyA9IHJjOworCWlmICgqcmVzID09IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QgJiYKKwkgICAgIHJjID09IFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQpICpyZXMgPSByYzsKIH0KIAorLyoqCisgKiBlZWhfcmVwb3J0X3Jlc3VtZSAtIHRlbGwgZGV2aWNlIHRvIHJlc3VtZSBub3JtYWwgb3BlcmF0aW9ucworICovCisKIHN0YXRpYyB2b2lkIGVlaF9yZXBvcnRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHZvaWQgKnVzZXJkYXRhKQogewogCXN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXIgPSBkZXYtPmRyaXZlcjsKQEAgLTE0OCw2ICsxODMsMTMgQEAKIAlkcml2ZXItPmVycl9oYW5kbGVyLT5yZXN1bWUoZGV2KTsKIH0KIAorLyoqCisgKiBlZWhfcmVwb3J0X2ZhaWx1cmUgLSB0ZWxsIGRldmljZSBkcml2ZXIgdGhhdCBkZXZpY2UgaXMgZGVhZC4KKyAqCisgKiBUaGlzIGluZm9ybXMgdGhlIGRldmljZSBkcml2ZXIgdGhhdCB0aGUgZGV2aWNlIGlzIHBlcm1hbmVudGx5CisgKiBkZWFkLCBhbmQgdGhhdCBubyBmdXJ0aGVyIHJlY292ZXJ5IGF0dGVtcHRzIHdpbGwgYmUgbWFkZSBvbiBpdC4KKyAqLworCiBzdGF0aWMgdm9pZCBlZWhfcmVwb3J0X2ZhaWx1cmUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciA9IGRldi0+ZHJpdmVyOwpAQCAtMTkwLDExICsyMzIsMTEgQEAKIAogLyoqCiAgKiBlZWhfcmVzZXRfZGV2aWNlKCkgLS0gcGVyZm9ybSBhY3R1YWwgcmVzZXQgb2YgYSBwY2kgc2xvdAotICogQXJnczogYnVzOiBwb2ludGVyIHRvIHRoZSBwY2kgYnVzIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nCisgKiBAYnVzOiBwb2ludGVyIHRvIHRoZSBwY2kgYnVzIHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nCiAgKiAgICAgICAgICAgIHRvIHRoZSBpc29sYXRlZCBzbG90LiBBIG5vbi1udWxsIHZhbHVlIHdpbGwKICAqICAgICAgICAgICAgY2F1c2UgYWxsIGRldmljZXMgdW5kZXIgdGhlIGJ1cyB0byBiZSByZW1vdmVkCiAgKiAgICAgICAgICAgIGFuZCB0aGVuIHJlLWFkZGVkLgotICogICAgIHBlX2RuOiBwb2ludGVyIHRvIGEgIlBhcnRpb25hYmxlIEVuZHBvaW50IiBkZXZpY2Ugbm9kZS4KKyAqIEBwZV9kbjogcG9pbnRlciB0byBhICJQYXJ0aW9uYWJsZSBFbmRwb2ludCIgZGV2aWNlIG5vZGUuCiAgKiAgICAgICAgICAgIFRoaXMgaXMgdGhlIHRvcC1sZXZlbCBzdHJ1Y3R1cmUgb24gd2hpY2ggcGNpCiAgKiAgICAgICAgICAgIGJ1cyByZXNldHMgY2FuIGJlIHBlcmZvcm1lZC4KICAqLwpAQCAtMjY4LDE0ICszMTAsMTQgQEAKIAogCWlmICghZnJvemVuX2RuKSB7CiAKLQkJbG9jYXRpb24gPSAoY2hhciAqKSBnZXRfcHJvcGVydHkoZXZlbnQtPmRuLCAiaWJtLGxvYy1jb2RlIiwgTlVMTCk7CisJCWxvY2F0aW9uID0gZ2V0X3Byb3BlcnR5KGV2ZW50LT5kbiwgImlibSxsb2MtY29kZSIsIE5VTEwpOwogCQlsb2NhdGlvbiA9IGxvY2F0aW9uID8gbG9jYXRpb24gOiAidW5rbm93biI7CiAJCXByaW50ayhLRVJOX0VSUiAiRUVIOiBFcnJvcjogQ2Fubm90IGZpbmQgcGFydGl0aW9uIGVuZHBvaW50ICIKIAkJICAgICAgICAgICAgICAgICJmb3IgbG9jYXRpb249JXMgcGNpIGFkZHI9JXNcbiIsCiAJCSAgICAgICAgbG9jYXRpb24sIHBjaV9uYW1lKGV2ZW50LT5kZXYpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWxvY2F0aW9uID0gKGNoYXIgKikgZ2V0X3Byb3BlcnR5KGZyb3plbl9kbiwgImlibSxsb2MtY29kZSIsIE5VTEwpOworCWxvY2F0aW9uID0gZ2V0X3Byb3BlcnR5KGZyb3plbl9kbiwgImlibSxsb2MtY29kZSIsIE5VTEwpOwogCWxvY2F0aW9uID0gbG9jYXRpb24gPyBsb2NhdGlvbiA6ICJ1bmtub3duIjsKIAogCS8qIFRoZXJlIGFyZSB0d28gZGlmZmVyZW50IHN0eWxlcyBmb3IgY29taW5nIHVwIHdpdGggdGhlIFBFLgpAQCAtMzQ3LDIyICszODksNDIgQEAKIAkJCWdvdG8gaGFyZF9mYWlsOwogCX0KIAorCS8qIElmIGFsbCBkZXZpY2VzIHJlcG9ydGVkIHRoZXkgY2FuIHByb2NlZWQsIHRoZW4gcmUtZW5hYmxlIE1NSU8gKi8KKwlpZiAocmVzdWx0ID09IFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSKSB7CisJCXJjID0gcnRhc19wY2lfZW5hYmxlKGZyb3plbl9wZG4sIEVFSF9USEFXX01NSU8pOworCisJCWlmIChyYykgeworCQkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKKwkJfSBlbHNlIHsKKwkJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX05PTkU7CisJCQlwY2lfd2Fsa19idXMoZnJvemVuX2J1cywgZWVoX3JlcG9ydF9tbWlvX2VuYWJsZWQsICZyZXN1bHQpOworCQl9CisJfQorCisJLyogSWYgYWxsIGRldmljZXMgcmVwb3J0ZWQgdGhleSBjYW4gcHJvY2VlZCwgdGhlbiByZS1lbmFibGUgRE1BICovCisJaWYgKHJlc3VsdCA9PSBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUikgeworCQlyYyA9IHJ0YXNfcGNpX2VuYWJsZShmcm96ZW5fcGRuLCBFRUhfVEhBV19ETUEpOworCisJCWlmIChyYykKKwkJCXJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX05FRURfUkVTRVQ7CisJfQorCisJLyogSWYgYW55IGRldmljZSBoYXMgYSBoYXJkIGZhaWx1cmUsIHRoZW4gc2h1dCBvZmYgZXZlcnl0aGluZy4gKi8KKwlpZiAocmVzdWx0ID09IFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1QpCisJCWdvdG8gaGFyZF9mYWlsOworCiAJLyogSWYgYW55IGRldmljZSBjYWxsZWQgb3V0IGZvciBhIHJlc2V0LCB0aGVuIHJlc2V0IHRoZSBzbG90ICovCiAJaWYgKHJlc3VsdCA9PSBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUKSB7CiAJCXJjID0gZWVoX3Jlc2V0X2RldmljZShmcm96ZW5fcGRuLCBOVUxMKTsKIAkJaWYgKHJjKQogCQkJZ290byBoYXJkX2ZhaWw7Ci0JCXBjaV93YWxrX2J1cyhmcm96ZW5fYnVzLCBlZWhfcmVwb3J0X3Jlc2V0LCBOVUxMKTsKKwkJcmVzdWx0ID0gUENJX0VSU19SRVNVTFRfTk9ORTsKKwkJcGNpX3dhbGtfYnVzKGZyb3plbl9idXMsIGVlaF9yZXBvcnRfcmVzZXQsICZyZXN1bHQpOwogCX0KIAotCS8qIElmIGFsbCBkZXZpY2VzIHJlcG9ydGVkIHRoZXkgY2FuIHByb2NlZWQsIHRoZSByZS1lbmFibGUgUElPICovCi0JaWYgKHJlc3VsdCA9PSBQQ0lfRVJTX1JFU1VMVF9DQU5fUkVDT1ZFUikgewotCQkvKiBYWFggTm90IHN1cHBvcnRlZDsgd2UgYnJ1dGUtZm9yY2UgcmVzZXQgdGhlIGRldmljZSAqLwotCQlyYyA9IGVlaF9yZXNldF9kZXZpY2UoZnJvemVuX3BkbiwgTlVMTCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gaGFyZF9mYWlsOwotCQlwY2lfd2Fsa19idXMoZnJvemVuX2J1cywgZWVoX3JlcG9ydF9yZXNldCwgTlVMTCk7Ci0JfQorCS8qIEFsbCBkZXZpY2VzIHNob3VsZCBjbGFpbSB0aGV5IGhhdmUgcmVjb3ZlcmVkIGJ5IG5vdy4gKi8KKwlpZiAocmVzdWx0ICE9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRCkKKwkJZ290byBoYXJkX2ZhaWw7CiAKIAkvKiBUZWxsIGFsbCBkZXZpY2UgZHJpdmVycyB0aGF0IHRoZXkgY2FuIHJlc3VtZSBvcGVyYXRpb25zICovCiAJcGNpX3dhbGtfYnVzKGZyb3plbl9idXMsIGVlaF9yZXBvcnRfcmVzdW1lLCBOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZXZlbnQuYwppbmRleCA0NWNjYzY4Li4xMzcwNzc0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2V2ZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9ldmVudC5jCkBAIC0xMjQsMTEgKzEyNCwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGVlaF9ldmVudCAqZXZlbnQ7Ci0JY2hhciAqbG9jYXRpb247CisJY29uc3QgY2hhciAqbG9jYXRpb247CiAKIAlpZiAoIW1lbV9pbml0X2RvbmUpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IGV2ZW50IGR1cmluZyBlYXJseSBib290IG5vdCBoYW5kbGVkXG4iKTsKLQkJbG9jYXRpb24gPSAoY2hhciAqKSBnZXRfcHJvcGVydHkoZG4sICJpYm0sbG9jLWNvZGUiLCBOVUxMKTsKKwkJbG9jYXRpb24gPSBnZXRfcHJvcGVydHkoZG4sICJpYm0sbG9jLWNvZGUiLCBOVUxMKTsKIAkJcHJpbnRrKEtFUk5fRVJSICJFRUg6IGRldmljZSBub2RlID0gJXNcbiIsIGRuLT5mdWxsX25hbWUpOwogCQlwcmludGsoS0VSTl9FUlIgIkVFSDogUENJIGxvY2F0aW9uID0gJXNcbiIsIGxvY2F0aW9uKTsKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZmlybXdhcmUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCmluZGV4IGMwMWQ4ZjAuLjFjN2IyYmEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9maXJtd2FyZS5jCkBAIC02OCw3ICs2OCw3IEBACiB2b2lkIF9faW5pdCBmd19mZWF0dXJlX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCWNoYXIgKmh5cGVydGFzLCAqczsKKwljb25zdCBjaGFyICpoeXBlcnRhcywgKnM7CiAJaW50IGxlbiwgaTsKIAogCURCRygiIC0+IGZ3X2ZlYXR1cmVfaW5pdCgpXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwppbmRleCBjOWZmNTQ3Zi4uYzAwY2ZlZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbC5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGwuUwpAQCAtMSw3ICsxLDYgQEAKIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGdlbmVyaWMgY29kZSB0byBwZXJmb3JtIGEgY2FsbCB0byB0aGUKICAqIHBTZXJpZXMgTFBBUiBoeXBlcnZpc29yLgotICogTk9URTogdGhpcyBmaWxlIHdpbGwgZ28gYXdheSB3aGVuIHdlIG1vdmUgdG8gaW5saW5lIHRoaXMgd29yay4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMTEsMjE3ICsxMCwxNTMgQEAKICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CiAJCiAjZGVmaW5lIFNUS19QQVJNKGkpICAgICAoNDggKyAoKGkpLTMpKjgpCiAKKyNpZmRlZiBDT05GSUdfSENBTExfU1RBVFMKKy8qCisgKiBwcmVjYWxsIG11c3QgcHJlc2VydmUgYWxsIHJlZ2lzdGVycy4gIHVzZSB1bnVzZWQgU1RLX1BBUk0oKQorICogYXJlYXMgdG8gc2F2ZSBzbmFwc2hvdHMgYW5kIG9wY29kZS4KKyAqLworI2RlZmluZSBIQ0FMTF9JTlNUX1BSRUNBTEwJCQkJCVwKKwlzdGQJcjMsU1RLX1BBUk0ocjMpKHIxKTsJLyogc2F2ZSBvcGNvZGUgKi8JXAorCW1mdGIJcjA7CQkJLyogZ2V0IHRpbWViYXNlIGFuZCAqLwlcCisJc3RkICAgICByMCxTVEtfUEFSTShyNSkocjEpOwkvKiBzYXZlIGZvciBsYXRlciAqLwlcCitCRUdJTl9GVFJfU0VDVElPTjsJCQkJCQlcCisJbWZzcHIJcjAsU1BSTl9QVVJSOwkJLyogZ2V0IFBVUlIgYW5kICovCVwKKwlzdGQJcjAsU1RLX1BBUk0ocjYpKHIxKTsJLyogc2F2ZSBmb3IgbGF0ZXIgKi8JXAorRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfUFVSUik7CisJCisvKgorICogcG9zdGNhbGwgaXMgcGVyZm9ybWVkIGltbWVkaWF0ZWx5IGJlZm9yZSBmdW5jdGlvbiByZXR1cm4gd2hpY2gKKyAqIGFsbG93cyBsaWJlcmFsIHVzZSBvZiB2b2xhdGlsZSByZWdpc3RlcnMuCisgKi8KKyNkZWZpbmUgSENBTExfSU5TVF9QT1NUQ0FMTAkJCQkJXAorCWxkCXI0LFNUS19QQVJNKHIzKShyMSk7CS8qIHZhbGlkYXRlIG9wY29kZSAqLwlcCisJY21wbGRpCWNyNyxyNCxNQVhfSENBTExfT1BDT0RFOwkJCVwKKwliZ3QtCWNyNywxZjsJCQkJCQlcCisJCQkJCQkJCVwKKwkvKiBnZXQgdGltZSBhbmQgUFVSUiBzbmFwc2hvdHMgYWZ0ZXIgaGNhbGwgKi8JCVwKKwltZnRiCXI3OwkJCS8qIHRpbWViYXNlIGFmdGVyICovCVwKK0JFR0lOX0ZUUl9TRUNUSU9OOwkJCQkJCVwKKwltZnNwcglyOCxTUFJOX1BVUlI7CQkvKiBQVVJSIGFmdGVyICovCVwKKwlsZAlyNixTVEtfUEFSTShyNikocjEpOwkvKiBQVVJSIGJlZm9yZSAqLwlcCisJc3ViZglyNixyNixyODsJCS8qIGRlbHRhICovCQlcCitFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9QVVJSKTsJCQkJXAorCWxkCXI1LFNUS19QQVJNKHI1KShyMSk7CS8qIHRpbWViYXNlIGJlZm9yZSAqLwlcCisJc3ViZglyNSxyNSxyNzsJCS8qIHRpbWUgZGVsdGEgKi8JXAorCQkJCQkJCQlcCisJLyogY2FsY3VsYXRlIGFkZHJlc3Mgb2Ygc3RhdCBzdHJ1Y3R1cmUgcjQgPSBvcGNvZGUgKi8JXAorCXNyZGkJcjQscjQsMjsJCS8qIGluZGV4IGludG8gYXJyYXkgKi8JXAorCW11bGxpCXI0LHI0LEhDQUxMX1NUQVRfU0laRTsJCQkJXAorCUxPQURfUkVHX0FERFIocjcsIHBlcl9jcHVfX2hjYWxsX3N0YXRzKTsJCVwKKwlhZGQJcjQscjQscjc7CQkJCQlcCisJbGQJcjcsUEFDQV9EQVRBX09GRlNFVChyMTMpOyAvKiBwZXIgY3B1IG9mZnNldCAqLwlcCisJYWRkCXI0LHI0LHI3OwkJCQkJXAorCQkJCQkJCQlcCisJLyogdXBkYXRlIHN0YXRzCSovCQkJCQlcCisJbGQJcjcsSENBTExfU1RBVF9DQUxMUyhyNCk7IC8qIGNvdW50ICovCQlcCisJYWRkaQlyNyxyNywxOwkJCQkJXAorCXN0ZAlyNyxIQ0FMTF9TVEFUX0NBTExTKHI0KTsJCQlcCisJbGQgICAgICByNyxIQ0FMTF9TVEFUX1RCKHI0KTsJLyogdGltZWJhc2UgKi8JCVwKKwlhZGQJcjcscjcscjU7CQkJCQlcCisJc3RkCXI3LEhDQUxMX1NUQVRfVEIocjQpOwkJCQlcCitCRUdJTl9GVFJfU0VDVElPTjsJCQkJCQlcCisJbGQJcjcsSENBTExfU1RBVF9QVVJSKHI0KTsJLyogUFVSUiAqLwkJXAorCWFkZAlyNyxyNyxyNjsJCQkJCVwKKwlzdGQJcjcsSENBTExfU1RBVF9QVVJSKHI0KTsJCQkJXAorRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfUFVSUik7CQkJCVwKKzE6CisjZWxzZQorI2RlZmluZSBIQ0FMTF9JTlNUX1BSRUNBTEwKKyNkZWZpbmUgSENBTExfSU5TVF9QT1NUQ0FMTAorI2VuZGlmCisKIAkudGV4dAogCi0vKiBsb25nIHBscGFyX2hjYWxsKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAkJUjMKLQkJCXVuc2lnbmVkIGxvbmcgYXJnMSwJCVI0Ci0JCQl1bnNpZ25lZCBsb25nIGFyZzIsCQlSNQotCQkJdW5zaWduZWQgbG9uZyBhcmczLAkJUjYKLQkJCXVuc2lnbmVkIGxvbmcgYXJnNCwJCVI3Ci0JCQl1bnNpZ25lZCBsb25nICpvdXQxLAkJUjgKLQkJCXVuc2lnbmVkIGxvbmcgKm91dDIsCQlSOQotCQkJdW5zaWduZWQgbG9uZyAqb3V0Myk7CQlSMTAKLSAqLwotX0dMT0JBTChwbHBhcl9oY2FsbCkKLQlITVRfTUVESVVNCi0KLQltZmNyCXIwCi0KLQlzdGQJcjgsU1RLX1BBUk0ocjgpKHIxKQkvKiBTYXZlIG91dCBwdHJzICovCi0Jc3RkCXI5LFNUS19QQVJNKHI5KShyMSkKLQlzdGQJcjEwLFNUS19QQVJNKHIxMCkocjEpCi0KLQlzdHcJcjAsOChyMSkKLQotCUhWU0MJCQkJLyogaW52b2tlIHRoZSBoeXBlcnZpc29yICovCi0KLQlsd3oJcjAsOChyMSkKLQotCWxkCXI4LFNUS19QQVJNKHI4KShyMSkJLyogRmV0Y2ggcjQtcjYgcmV0IGFyZ3MgKi8KLQlsZAlyOSxTVEtfUEFSTShyOSkocjEpCi0JbGQJcjEwLFNUS19QQVJNKHIxMCkocjEpCi0Jc3RkCXI0LDAocjgpCi0Jc3RkCXI1LDAocjkpCi0Jc3RkCXI2LDAocjEwKQotCi0JbXRjcmYJMHhmZixyMAotCWJscgkJCQkvKiByZXR1cm4gcjMgPSBzdGF0dXMgKi8KLQotCi0vKiBTaW1wbGUgaW50ZXJmYWNlIHdpdGggbm8gb3V0cHV0IHZhbHVlcyAob3RoZXIgdGhhbiBzdGF0dXMpICovCiBfR0xPQkFMKHBscGFyX2hjYWxsX25vcmV0cykKIAlITVRfTUVESVVNCiAKIAltZmNyCXIwCiAJc3R3CXIwLDgocjEpCiAKKwlIQ0FMTF9JTlNUX1BSRUNBTEwKKwogCUhWU0MJCQkJLyogaW52b2tlIHRoZSBoeXBlcnZpc29yICovCiAKKwlIQ0FMTF9JTlNUX1BPU1RDQUxMCisKIAlsd3oJcjAsOChyMSkKIAltdGNyZgkweGZmLHIwCiAJYmxyCQkJCS8qIHJldHVybiByMyA9IHN0YXR1cyAqLwogCi0KLS8qIGxvbmcgcGxwYXJfaGNhbGxfOGFyZ18ycmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAlSMwotCQkJdW5zaWduZWQgbG9uZyBhcmcxLAkJUjQKLQkJCXVuc2lnbmVkIGxvbmcgYXJnMiwJCVI1Ci0JCQl1bnNpZ25lZCBsb25nIGFyZzMsCQlSNgotCQkJdW5zaWduZWQgbG9uZyBhcmc0LAkJUjcKLQkJCXVuc2lnbmVkIGxvbmcgYXJnNSwJCVI4Ci0JCQl1bnNpZ25lZCBsb25nIGFyZzYsCQlSOQotCQkJdW5zaWduZWQgbG9uZyBhcmc3LAkJUjEwCi0JCQl1bnNpZ25lZCBsb25nIGFyZzgsCQkxMTIoUjEpCi0JCQl1bnNpZ25lZCBsb25nICpvdXQxKTsJCTEyMChSMSkKLSAqLwotX0dMT0JBTChwbHBhcl9oY2FsbF84YXJnXzJyZXQpCi0JSE1UX01FRElVTQotCi0JbWZjcglyMAotCWxkCXIxMSxTVEtfUEFSTShyMTEpKHIxKQkvKiBwdXQgYXJnOCBpbiBSMTEgKi8KLQlzdHcJcjAsOChyMSkKLQotCUhWU0MJCQkJLyogaW52b2tlIHRoZSBoeXBlcnZpc29yICovCi0KLQlsd3oJcjAsOChyMSkKLQlsZAlyMTAsU1RLX1BBUk0ocjEyKShyMSkJLyogRmV0Y2ggcjQgcmV0IGFyZyAqLwotCXN0ZAlyNCwwKHIxMCkKLQltdGNyZgkweGZmLHIwCi0JYmxyCQkJCS8qIHJldHVybiByMyA9IHN0YXR1cyAqLwotCi0KLS8qIGxvbmcgcGxwYXJfaGNhbGxfNG91dCh1bnNpZ25lZCBsb25nIG9wY29kZSwJCVIzCi0JCSAJdW5zaWduZWQgbG9uZyBhcmcxLAkJUjQKLQkJIAl1bnNpZ25lZCBsb25nIGFyZzIsCQlSNQotCQkgCXVuc2lnbmVkIGxvbmcgYXJnMywJCVI2Ci0JCSAJdW5zaWduZWQgbG9uZyBhcmc0LAkJUjcKLQkJIAl1bnNpZ25lZCBsb25nICpvdXQxLAkJUjgKLQkJIAl1bnNpZ25lZCBsb25nICpvdXQyLAkJUjkKLQkJIAl1bnNpZ25lZCBsb25nICpvdXQzLAkJUjEwCi0JCSAJdW5zaWduZWQgbG9uZyAqb3V0NCk7CQkxMTIoUjEpCi0gKi8KLV9HTE9CQUwocGxwYXJfaGNhbGxfNG91dCkKK19HTE9CQUwocGxwYXJfaGNhbGwpCiAJSE1UX01FRElVTQogCiAJbWZjcglyMAogCXN0dwlyMCw4KHIxKQogCi0Jc3RkCXI4LFNUS19QQVJNKHI4KShyMSkJLyogU2F2ZSBvdXQgcHRycyAqLwotCXN0ZAlyOSxTVEtfUEFSTShyOSkocjEpCi0Jc3RkCXIxMCxTVEtfUEFSTShyMTApKHIxKQorCUhDQUxMX0lOU1RfUFJFQ0FMTAorCisJc3RkICAgICByNCxTVEtfUEFSTShyNCkocjEpICAgICAvKiBTYXZlIHJldCBidWZmZXIgKi8KKworCW1yCXI0LHI1CisJbXIJcjUscjYKKwltcglyNixyNworCW1yCXI3LHI4CisJbXIJcjgscjkKKwltcglyOSxyMTAKIAogCUhWU0MJCQkJLyogaW52b2tlIHRoZSBoeXBlcnZpc29yICovCiAKLQlsd3oJcjAsOChyMSkKKwlsZAlyMTIsU1RLX1BBUk0ocjQpKHIxKQorCXN0ZAlyNCwgIDAocjEyKQorCXN0ZAlyNSwgIDgocjEyKQorCXN0ZAlyNiwgMTYocjEyKQorCXN0ZAlyNywgMjQocjEyKQogCi0JbGQJcjgsU1RLX1BBUk0ocjgpKHIxKQkvKiBGZXRjaCByNC1yNyByZXQgYXJncyAqLwotCWxkCXI5LFNUS19QQVJNKHI5KShyMSkKLQlsZAlyMTAsU1RLX1BBUk0ocjEwKShyMSkKLQlsZAlyMTEsU1RLX1BBUk0ocjExKShyMSkKLQlzdGQJcjQsMChyOCkKLQlzdGQJcjUsMChyOSkKLQlzdGQJcjYsMChyMTApCi0Jc3RkCXI3LDAocjExKQotCi0JbXRjcmYJMHhmZixyMAotCWJscgkJCQkvKiByZXR1cm4gcjMgPSBzdGF0dXMgKi8KLQotLyogcGxwYXJfaGNhbGxfN2FyZ183cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAkJUjMKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzEsCQlSNAotCQkJIHVuc2lnbmVkIGxvbmcgYXJnMiwJCVI1Ci0JCQkgdW5zaWduZWQgbG9uZyBhcmczLAkJUjYKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzQsCQlSNwotCQkJIHVuc2lnbmVkIGxvbmcgYXJnNSwJCVI4Ci0JCQkgdW5zaWduZWQgbG9uZyBhcmc2LAkJUjkKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzcsCQlSMTAKLQkJCSB1bnNpZ25lZCBsb25nICpvdXQxLAkJMTEyKFIxKQotCQkJIHVuc2lnbmVkIGxvbmcgKm91dDIsCQkxMTAoUjEpCi0JCQkgdW5zaWduZWQgbG9uZyAqb3V0MywJCTEwOChSMSkKLQkJCSB1bnNpZ25lZCBsb25nICpvdXQ0LAkJMTA2KFIxKQotCQkJIHVuc2lnbmVkIGxvbmcgKm91dDUsCQkxMDQoUjEpCi0JCQkgdW5zaWduZWQgbG9uZyAqb3V0NiwJCTEwMihSMSkKLQkJCSB1bnNpZ25lZCBsb25nICpvdXQ3KTsJCTEwMChSMSkKLSovCi1fR0xPQkFMKHBscGFyX2hjYWxsXzdhcmdfN3JldCkKLQlITVRfTUVESVVNCi0KLQltZmNyCXIwCi0Jc3R3CXIwLDgocjEpCi0KLQlIVlNDCQkJCS8qIGludm9rZSB0aGUgaHlwZXJ2aXNvciAqLworCUhDQUxMX0lOU1RfUE9TVENBTEwKIAogCWx3eglyMCw4KHIxKQotCi0JbGQJcjExLFNUS19QQVJNKHIxMSkocjEpCS8qIEZldGNoIHI0IHJldCBhcmcgKi8KLQlzdGQJcjQsMChyMTEpCi0JbGQJcjExLFNUS19QQVJNKHIxMikocjEpCS8qIEZldGNoIHI1IHJldCBhcmcgKi8KLQlzdGQJcjUsMChyMTEpCi0JbGQJcjExLFNUS19QQVJNKHIxMykocjEpCS8qIEZldGNoIHI2IHJldCBhcmcgKi8KLQlzdGQJcjYsMChyMTEpCi0JbGQJcjExLFNUS19QQVJNKHIxNCkocjEpCS8qIEZldGNoIHI3IHJldCBhcmcgKi8KLQlzdGQJcjcsMChyMTEpCi0JbGQJcjExLFNUS19QQVJNKHIxNSkocjEpCS8qIEZldGNoIHI4IHJldCBhcmcgKi8KLQlzdGQJcjgsMChyMTEpCi0JbGQJcjExLFNUS19QQVJNKHIxNikocjEpCS8qIEZldGNoIHI5IHJldCBhcmcgKi8KLQlzdGQJcjksMChyMTEpCi0JbGQJcjExLFNUS19QQVJNKHIxNykocjEpCS8qIEZldGNoIHIxMCByZXQgYXJnICovCi0Jc3RkCXIxMCwwKHIxMSkKLQogCW10Y3JmCTB4ZmYscjAKIAogCWJscgkJCQkvKiByZXR1cm4gcjMgPSBzdGF0dXMgKi8KIAotLyogcGxwYXJfaGNhbGxfOWFyZ185cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAkJUjMKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzEsCQlSNAotCQkJIHVuc2lnbmVkIGxvbmcgYXJnMiwJCVI1Ci0JCQkgdW5zaWduZWQgbG9uZyBhcmczLAkJUjYKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzQsCQlSNwotCQkJIHVuc2lnbmVkIGxvbmcgYXJnNSwJCVI4Ci0JCQkgdW5zaWduZWQgbG9uZyBhcmc2LAkJUjkKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzcsCQlSMTAKLQkJCSB1bnNpZ25lZCBsb25nIGFyZzgsCQkxMTIoUjEpCi0JCQkgdW5zaWduZWQgbG9uZyBhcmc5LAkJMTEwKFIxKQotCQkJIHVuc2lnbmVkIGxvbmcgKm91dDEsCQkxMDgoUjEpCi0JCQkgdW5zaWduZWQgbG9uZyAqb3V0MiwJCTEwNihSMSkKLQkJCSB1bnNpZ25lZCBsb25nICpvdXQzLAkJMTA0KFIxKQotCQkJIHVuc2lnbmVkIGxvbmcgKm91dDQsCQkxMDIoUjEpCi0JCQkgdW5zaWduZWQgbG9uZyAqb3V0NSwJCTEwMChSMSkKLQkJCSB1bnNpZ25lZCBsb25nICpvdXQ2LAkJIDk4KFIxKQotCQkJIHVuc2lnbmVkIGxvbmcgKm91dDcpOwkJIDk2KFIxKQotCQkJIHVuc2lnbmVkIGxvbmcgKm91dDgsCQkgOTQoUjEpCi0JCSAgICAgICAgIHVuc2lnbmVkIGxvbmcgKm91dDksICAgICAgICAgICAgOTIoUjEpCi0qLwotX0dMT0JBTChwbHBhcl9oY2FsbF85YXJnXzlyZXQpCitfR0xPQkFMKHBscGFyX2hjYWxsOSkKIAlITVRfTUVESVVNCiAKIAltZmNyCXIwCiAJc3R3CXIwLDgocjEpCiAKLQlsZAlyMTEsU1RLX1BBUk0ocjExKShyMSkJIC8qIHB1dCBhcmc4IGluIFIxMSAqLwotCWxkCXIxMixTVEtfUEFSTShyMTIpKHIxKSAgICAvKiBwdXQgYXJnOSBpbiBSMTIgKi8KKwlIQ0FMTF9JTlNUX1BSRUNBTEwKKworCXN0ZCAgICAgcjQsU1RLX1BBUk0ocjQpKHIxKSAgICAgLyogU2F2ZSByZXQgYnVmZmVyICovCisKKwltcglyNCxyNQorCW1yCXI1LHI2CisJbXIJcjYscjcKKwltcglyNyxyOAorCW1yCXI4LHI5CisJbXIJcjkscjEwCisJbGQJcjEwLFNUS19QQVJNKHIxMSkocjEpCSAvKiBwdXQgYXJnNyBpbiBSMTAgKi8KKwlsZAlyMTEsU1RLX1BBUk0ocjEyKShyMSkJIC8qIHB1dCBhcmc4IGluIFIxMSAqLworCWxkCXIxMixTVEtfUEFSTShyMTMpKHIxKSAgICAvKiBwdXQgYXJnOSBpbiBSMTIgKi8KIAogCUhWU0MJCQkJLyogaW52b2tlIHRoZSBoeXBlcnZpc29yICovCiAKLQlsZAlyMCxTVEtfUEFSTShyMTMpKHIxKQkvKiBGZXRjaCByNCByZXQgYXJnICovCi0Jc3RkeAlyNCxyMCxyMAotCWxkCXIwLFNUS19QQVJNKHIxNCkocjEpCS8qIEZldGNoIHI1IHJldCBhcmcgKi8KLQlzdGR4CXI1LHIwLHIwCi0JbGQJcjAsU1RLX1BBUk0ocjE1KShyMSkJLyogRmV0Y2ggcjYgcmV0IGFyZyAqLwotCXN0ZHgJcjYscjAscjAKLQlsZAlyMCxTVEtfUEFSTShyMTYpKHIxKQkvKiBGZXRjaCByNyByZXQgYXJnICovCi0Jc3RkeAlyNyxyMCxyMAotCWxkCXIwLFNUS19QQVJNKHIxNykocjEpCS8qIEZldGNoIHI4IHJldCBhcmcgKi8KLQlzdGR4CXI4LHIwLHIwCi0JbGQJcjAsU1RLX1BBUk0ocjE4KShyMSkJLyogRmV0Y2ggcjkgcmV0IGFyZyAqLwotCXN0ZHgJcjkscjAscjAKLQlsZAlyMCxTVEtfUEFSTShyMTkpKHIxKQkvKiBGZXRjaCByMTAgcmV0IGFyZyAqLwotCXN0ZHgJcjEwLHIwLHIwCi0JbGQJcjAsU1RLX1BBUk0ocjIwKShyMSkJLyogRmV0Y2ggcjExIHJldCBhcmcgKi8KLQlzdGR4CXIxMSxyMCxyMAotCWxkCXIwLFNUS19QQVJNKHIyMSkocjEpCS8qIEZldGNoIHIxMiByZXQgYXJnICovCi0Jc3RkeAlyMTIscjAscjAKKwlsZAlyMTIsU1RLX1BBUk0ocjQpKHIxKQorCXN0ZAlyNCwgIDAocjEyKQorCXN0ZAlyNSwgIDgocjEyKQorCXN0ZAlyNiwgMTYocjEyKQorCXN0ZAlyNywgMjQocjEyKQorCXN0ZAlyOCwgMzIocjEyKQorCXN0ZAlyOSwgNDAocjEyKQorCXN0ZAlyMTAsNDgocjEyKQorCXN0ZAlyMTEsNTYocjEyKQorCXN0ZAlyMTIsNjQocjEyKQorCisJSENBTExfSU5TVF9QT1NUQ0FMTAogCiAJbHd6CXIwLDgocjEpCiAJbXRjcmYJMHhmZixyMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZDYWxsX2luc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDFlNjUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWlrZSBLcmF2ZXR6IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIEh5cGVydmlzb3IgQ2FsbCBJbnN0cnVtZW50YXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGhjYWxsX3N0YXRzW0hDQUxMX1NUQVRfQVJSQVlfU0laRV0sIGhjYWxsX3N0YXRzKTsKKworLyoKKyAqIFJvdXRpbmVzIGZvciBkaXNwbGF5aW5nIHRoZSBzdGF0aXN0aWNzIGluIGRlYnVnZnMKKyAqLworc3RhdGljIHZvaWQgKmhjX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpCit7CisJaWYgKChpbnQpKnBvcyA8IEhDQUxMX1NUQVRfQVJSQVlfU0laRSkKKwkJcmV0dXJuICh2b2lkICopKHVuc2lnbmVkIGxvbmcpKCpwb3MgKyAxKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCAqaGNfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnAsIGxvZmZfdCAqIHBvcykKK3sKKwkrKypwb3M7CisKKwlyZXR1cm4gaGNfc3RhcnQobSwgcG9zKTsKK30KKworc3RhdGljIHZvaWQgaGNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7Cit9CisKK3N0YXRpYyBpbnQgaGNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnApCit7CisJdW5zaWduZWQgbG9uZyBoX251bSA9ICh1bnNpZ25lZCBsb25nKXA7CisJc3RydWN0IGhjYWxsX3N0YXRzICpocyA9IChzdHJ1Y3QgaGNhbGxfc3RhdHMgKiltLT5wcml2YXRlOworCisJaWYgKGhzW2hfbnVtXS5udW1fY2FsbHMpIHsKKwkJaWYgKCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9QVVJSKSkKKwkJCXNlcV9wcmludGYobSwgIiVsdSAlbHUgJWx1ICVsdVxuIiwgaF9udW08PDIsCisJCQkJICAgaHNbaF9udW1dLm51bV9jYWxscywKKwkJCQkgICBoc1toX251bV0udGJfdG90YWwsCisJCQkJICAgaHNbaF9udW1dLnB1cnJfdG90YWwpOworCQllbHNlCisJCQlzZXFfcHJpbnRmKG0sICIlbHUgJWx1ICVsdVxuIiwgaF9udW08PDIsCisJCQkJICAgaHNbaF9udW1dLm51bV9jYWxscywKKwkJCQkgICBoc1toX251bV0udGJfdG90YWwpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGhjYWxsX2luc3Rfc2VxX29wcyA9IHsKKyAgICAgICAgLnN0YXJ0ID0gaGNfc3RhcnQsCisgICAgICAgIC5uZXh0ICA9IGhjX25leHQsCisgICAgICAgIC5zdG9wICA9IGhjX3N0b3AsCisgICAgICAgIC5zaG93ICA9IGhjX3Nob3cKK307CisKK3N0YXRpYyBpbnQgaGNhbGxfaW5zdF9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHNlcV9maWxlICpzZXE7CisKKwlyYyA9IHNlcV9vcGVuKGZpbGUsICZoY2FsbF9pbnN0X3NlcV9vcHMpOworCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzZXEtPnByaXZhdGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoY2FsbF9pbnN0X3NlcV9mb3BzID0geworCS5vcGVuID0gaGNhbGxfaW5zdF9zZXFfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZSwKK307CisKKyNkZWZpbmUJSENBTExfUk9PVF9ESVIJCSJoY2FsbF9pbnN0IgorI2RlZmluZSBDUFVfTkFNRV9CVUZfU0laRQkzMgorCitzdGF0aWMgaW50IF9faW5pdCBoY2FsbF9pbnN0X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpoY2FsbF9yb290OworCXN0cnVjdCBkZW50cnkgKmhjYWxsX2ZpbGU7CisJY2hhciBjcHVfbmFtZV9idWZbQ1BVX05BTUVfQlVGX1NJWkVdOworCWludCBjcHU7CisKKwlpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfTFBBUikpCisJCXJldHVybiAwOworCisJaGNhbGxfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2RpcihIQ0FMTF9ST09UX0RJUiwgTlVMTCk7CisJaWYgKCFoY2FsbF9yb290KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJc25wcmludGYoY3B1X25hbWVfYnVmLCBDUFVfTkFNRV9CVUZfU0laRSwgImNwdSVkIiwgY3B1KTsKKwkJaGNhbGxfZmlsZSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoY3B1X25hbWVfYnVmLCBTX0lSVUdPLAorCQkJCQkJIGhjYWxsX3Jvb3QsCisJCQkJCQkgcGVyX2NwdShoY2FsbF9zdGF0cywgY3B1KSwKKwkJCQkJCSAmaGNhbGxfaW5zdF9zZXFfZm9wcyk7CisJCWlmICghaGNhbGxfZmlsZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworfQorX19pbml0Y2FsbChoY2FsbF9pbnN0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y29uc29sZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Y29uc29sZS5jCmluZGV4IGE3MmE5ODcuLjNmNmE4OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odmNvbnNvbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvaHZjb25zb2xlLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vaHZjYWxsLmg+CiAjaW5jbHVkZSA8YXNtL2h2Y29uc29sZS5oPgorI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCiAKIC8qKgogICogaHZjX2dldF9jaGFycyAtIHJldHJpZXZlIGNoYXJhY3RlcnMgZnJvbSBmaXJtd2FyZSBmb3IgZGVub3RlZCB2dGVybSBhZGF0cGVyCkBAIC00MCw5ICs0MSw5IEBACiB7CiAJdW5zaWduZWQgbG9uZyBnb3Q7CiAKLQlpZiAocGxwYXJfaGNhbGwoSF9HRVRfVEVSTV9DSEFSLCB2dGVybW5vLCAwLCAwLCAwLCAmZ290LAotCQkodW5zaWduZWQgbG9uZyAqKWJ1ZiwgKHVuc2lnbmVkIGxvbmcgKilidWYrMSkgPT0gSF9TVUNDRVNTKQorCWlmIChwbHBhcl9nZXRfdGVybV9jaGFyKHZ0ZXJtbm8sICZnb3QsIGJ1ZikgPT0gSF9TVUNDRVNTKQogCQlyZXR1cm4gZ290OworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKaW5kZXggZDY3YWYyYy4uYmJmMmUzNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2lvbW11LmMKQEAgLTI2NywxMyArMjY3LDEyIEBACiAJCQkJIHN0cnVjdCBpb21tdV90YWJsZSAqdGJsKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQl1bnNpZ25lZCBsb25nICpiYXNlcDsKLQl1bnNpZ25lZCBpbnQgKnNpemVwOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJhc2VwLCAqc2l6ZXA7CiAKIAlub2RlID0gKHN0cnVjdCBkZXZpY2Vfbm9kZSAqKXBoYi0+YXJjaF9kYXRhOwogCi0JYmFzZXAgPSAodW5zaWduZWQgbG9uZyAqKWdldF9wcm9wZXJ0eShub2RlLCAibGludXgsdGNlLWJhc2UiLCBOVUxMKTsKLQlzaXplcCA9ICh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkobm9kZSwgImxpbnV4LHRjZS1zaXplIiwgTlVMTCk7CisJYmFzZXAgPSBnZXRfcHJvcGVydHkobm9kZSwgImxpbnV4LHRjZS1iYXNlIiwgTlVMTCk7CisJc2l6ZXAgPSBnZXRfcHJvcGVydHkobm9kZSwgImxpbnV4LHRjZS1zaXplIiwgTlVMTCk7CiAJaWYgKGJhc2VwID09IE5VTEwgfHwgc2l6ZXAgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIlBDSV9ETUE6IGlvbW11X3RhYmxlX3NldHBhcm1zOiAlcyBoYXMgIgogCQkJCSJtaXNzaW5nIHRjZSBlbnRyaWVzICFcbiIsIGRuLT5mdWxsX25hbWUpOwpAQCAtMzE1LDcgKzMxNCw3IEBACiBzdGF0aWMgdm9pZCBpb21tdV90YWJsZV9zZXRwYXJtc19scGFyKHN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiLAogCQkJCSAgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sCiAJCQkJICAgICAgc3RydWN0IGlvbW11X3RhYmxlICp0YmwsCi0JCQkJICAgICAgdW5zaWduZWQgY2hhciAqZG1hX3dpbmRvdykKKwkJCQkgICAgICBjb25zdCB2b2lkICpkbWFfd2luZG93KQogewogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplOwogCkBAIC00MTUsNyArNDE0LDcgQEAKIAlzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCAqcGRuOwogCXN0cnVjdCBwY2lfZG4gKnBwY2k7Ci0JdW5zaWduZWQgY2hhciAqZG1hX3dpbmRvdyA9IE5VTEw7CisJY29uc3Qgdm9pZCAqZG1hX3dpbmRvdyA9IE5VTEw7CiAKIAlEQkcoImlvbW11X2J1c19zZXR1cF9wU2VyaWVzTFAsIGJ1cyAlcCwgYnVzLT5zZWxmICVwXG4iLCBidXMsIGJ1cy0+c2VsZik7CiAKQEAgLTUxOSw3ICs1MTgsNyBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGRuLCAqZG47CiAJc3RydWN0IGlvbW11X3RhYmxlICp0Ymw7Ci0JdW5zaWduZWQgY2hhciAqZG1hX3dpbmRvdyA9IE5VTEw7CisJY29uc3Qgdm9pZCAqZG1hX3dpbmRvdyA9IE5VTEw7CiAJc3RydWN0IHBjaV9kbiAqcGNpOwogCiAJREJHKCJpb21tdV9kZXZfc2V0dXBfcFNlcmllc0xQLCBkZXYgJXAgKCVzKVxuIiwgZGV2LCBwY2lfbmFtZShkZXYpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbHBhci5jCmluZGV4IDNhZWI0MDYuLjE4MjBhMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9scGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2xwYXIuYwpAQCAtNDgsMTMgKzQ4LDExIEBACiAjZGVmaW5lIERCR19MT1coZm10Li4uKSBkbyB7IH0gd2hpbGUoMCkKICNlbmRpZgogCi0vKiBpbiBwU2VyaWVzX2h2Q2FsbC5TICovCisvKiBpbiBodkNhbGwuUyAqLwogRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbCk7Ci1FWFBPUlRfU1lNQk9MKHBscGFyX2hjYWxsXzRvdXQpOworRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbDkpOwogRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF9ub3JldHMpOwotRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF84YXJnXzJyZXQpOwotRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF83YXJnXzdyZXQpOwotRVhQT1JUX1NZTUJPTChwbHBhcl9oY2FsbF85YXJnXzlyZXQpOworCiBleHRlcm4gdm9pZCBwU2VyaWVzX2ZpbmRfc2VyaWFsX3BvcnQodm9pZCk7CiAKIApAQCAtMjA0LDIwICsyMDIsMjAgQEAKIHZvaWQgX19pbml0IGZpbmRfdWRiZ192dGVybSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc3Rkb3V0X25vZGU7Ci0JdTMyICp0ZXJtbm87Ci0JY2hhciAqbmFtZTsKKwljb25zdCB1MzIgKnRlcm1ubzsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCBhZGRfY29uc29sZTsKIAogCS8qIGZpbmQgdGhlIGJvb3QgY29uc29sZSBmcm9tIC9jaG9zZW4vc3Rkb3V0ICovCiAJaWYgKCFvZl9jaG9zZW4pCiAJCXJldHVybjsKLQluYW1lID0gKGNoYXIgKilnZXRfcHJvcGVydHkob2ZfY2hvc2VuLCAibGludXgsc3Rkb3V0LXBhdGgiLCBOVUxMKTsKKwluYW1lID0gZ2V0X3Byb3BlcnR5KG9mX2Nob3NlbiwgImxpbnV4LHN0ZG91dC1wYXRoIiwgTlVMTCk7CiAJaWYgKG5hbWUgPT0gTlVMTCkKIAkJcmV0dXJuOwogCXN0ZG91dF9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgobmFtZSk7CiAJaWYgKCFzdGRvdXRfbm9kZSkKIAkJcmV0dXJuOwotCW5hbWUgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShzdGRvdXRfbm9kZSwgIm5hbWUiLCBOVUxMKTsKKwluYW1lID0gZ2V0X3Byb3BlcnR5KHN0ZG91dF9ub2RlLCAibmFtZSIsIE5VTEwpOwogCWlmICghbmFtZSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzdGRvdXQgbm9kZSBtaXNzaW5nICduYW1lJyBwcm9wZXJ0eSFcbiIpOwogCQlnb3RvIG91dDsKQEAgLTIyOCw3ICsyMjYsNyBAQAogCS8qIENoZWNrIGlmIGl0J3MgYSB2aXJ0dWFsIHRlcm1pbmFsICovCiAJaWYgKHN0cm5jbXAobmFtZSwgInZ0eSIsIDMpICE9IDApCiAJCWdvdG8gb3V0OwotCXRlcm1ubyA9ICh1MzIgKilnZXRfcHJvcGVydHkoc3Rkb3V0X25vZGUsICJyZWciLCBOVUxMKTsKKwl0ZXJtbm8gPSBnZXRfcHJvcGVydHkoc3Rkb3V0X25vZGUsICJyZWciLCBOVUxMKTsKIAlpZiAodGVybW5vID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCXZ0ZXJtbm8gPSB0ZXJtbm9bMF07CkBAIC0yNTQsMTggKzI1MiwzNCBAQAogdm9pZCB2cGFfaW5pdChpbnQgY3B1KQogewogCWludCBod2NwdSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKLQl1bnNpZ25lZCBsb25nIHZwYSA9IF9fcGEoJmxwcGFjYVtjcHVdKTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CiAJbG9uZyByZXQ7CiAKIAlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQUxUSVZFQykpCiAJCWxwcGFjYVtjcHVdLnZteHJlZ3NfaW5fdXNlID0gMTsKIAotCXJldCA9IHJlZ2lzdGVyX3ZwYShod2NwdSwgdnBhKTsKKwlhZGRyID0gX19wYSgmbHBwYWNhW2NwdV0pOworCXJldCA9IHJlZ2lzdGVyX3ZwYShod2NwdSwgYWRkcik7CiAKLQlpZiAocmV0KQorCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiB2cGFfaW5pdDogVlBBIHJlZ2lzdHJhdGlvbiBmb3IgIgogCQkJCSJjcHUgJWQgKGh3ICVkKSBvZiBhcmVhICVseCByZXR1cm5zICVsZFxuIiwKLQkJCQljcHUsIGh3Y3B1LCB2cGEsIHJldCk7CisJCQkJY3B1LCBod2NwdSwgYWRkciwgcmV0KTsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIFBBUFIgc2F5cyB0aGlzIGZlYXR1cmUgaXMgU0xCLUJ1ZmZlciBidXQgZmlybXdhcmUgbmV2ZXIKKwkgKiByZXBvcnRzIHRoYXQuICBBbGwgU1BMUEFSIHN1cHBvcnQgU0xCIHNoYWRvdyBidWZmZXIuCisJICovCisJYWRkciA9IF9fcGEoJnNsYl9zaGFkb3dbY3B1XSk7CisJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSkgeworCQlyZXQgPSByZWdpc3Rlcl9zbGJfc2hhZG93KGh3Y3B1LCBhZGRyKTsKKwkJaWYgKHJldCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJXQVJOSU5HOiB2cGFfaW5pdDogU0xCIHNoYWRvdyBidWZmZXIgIgorCQkJICAgICAgICJyZWdpc3RyYXRpb24gZm9yIGNwdSAlZCAoaHcgJWQpIG9mIGFyZWEgJWx4ICIKKwkJCSAgICAgICAicmV0dXJucyAlbGRcbiIsIGNwdSwgaHdjcHUsIGFkZHIsIHJldCk7CisJfQogfQogCiBsb25nIHBTZXJpZXNfbHBhcl9ocHRlX2luc2VydCh1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsCkBAIC0yNzcsNyArMjkxLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgc2xvdDsKIAl1bnNpZ25lZCBsb25nIGhwdGVfdiwgaHB0ZV9yOwotCXVuc2lnbmVkIGxvbmcgZHVtbXkwLCBkdW1teTE7CiAKIAlpZiAoISh2ZmxhZ3MgJiBIUFRFX1ZfQk9MVEVEKSkKIAkJREJHX0xPVygiaHB0ZV9pbnNlcnQoZ3JvdXA9JWx4LCB2YT0lMDE2bHgsIHBhPSUwMTZseCwgIgpAQCAtMzAyLDggKzMxNSw3IEBACiAJaWYgKHJmbGFncyAmIChfUEFHRV9HVUFSREVEfF9QQUdFX05PX0NBQ0hFKSkKIAkJaHB0ZV9yICY9IH5fUEFHRV9DT0hFUkVOVDsKIAotCWxwYXJfcmMgPSBwbHBhcl9oY2FsbChIX0VOVEVSLCBmbGFncywgaHB0ZV9ncm91cCwgaHB0ZV92LAotCQkJICAgICAgaHB0ZV9yLCAmc2xvdCwgJmR1bW15MCwgJmR1bW15MSk7CisJbHBhcl9yYyA9IHBscGFyX3B0ZV9lbnRlcihmbGFncywgaHB0ZV9ncm91cCwgaHB0ZV92LCBocHRlX3IsICZzbG90KTsKIAlpZiAodW5saWtlbHkobHBhcl9yYyA9PSBIX1BURUdfRlVMTCkpIHsKIAkJaWYgKCEodmZsYWdzICYgSFBURV9WX0JPTFRFRCkpCiAJCQlEQkdfTE9XKCIgZnVsbFxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbnZyYW0uYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jCmluZGV4IDE4YWJmYjEuLjY0MTYzY2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9udnJhbS5jCkBAIC0xMjMsMTMgKzEyMywxNCBAQAogaW50IF9faW5pdCBwU2VyaWVzX252cmFtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm52cmFtOwotCXVuc2lnbmVkIGludCAqbmJ5dGVzX3AsIHByb3BsZW47CisJY29uc3QgdW5zaWduZWQgaW50ICpuYnl0ZXNfcDsKKwl1bnNpZ25lZCBpbnQgcHJvcGxlbjsKIAogCW52cmFtID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoTlVMTCwgIm52cmFtIik7CiAJaWYgKG52cmFtID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCi0JbmJ5dGVzX3AgPSAodW5zaWduZWQgaW50ICopZ2V0X3Byb3BlcnR5KG52cmFtLCAiI2J5dGVzIiwgJnByb3BsZW4pOworCW5ieXRlc19wID0gZ2V0X3Byb3BlcnR5KG52cmFtLCAiI2J5dGVzIiwgJnByb3BsZW4pOwogCWlmIChuYnl0ZXNfcCA9PSBOVUxMIHx8IHByb3BsZW4gIT0gc2l6ZW9mKHVuc2lnbmVkIGludCkpCiAJCXJldHVybiAtRUlPOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpLmMKaW5kZXggZTk3ZTY3Zi4uNDEwYTZiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2kuYwpAQCAtNjAsNyArNjAsNyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0IGNoZWNrX3M3YSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdDsKLQljaGFyICptb2RlbDsKKwljb25zdCBjaGFyICptb2RlbDsKIAogCXM3YV93b3JrYXJvdW5kID0gMDsKIAlyb290ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggM2JkMWIzZS4uM2ViN2IyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKQEAgLTUsMjAgKzUsMTcgQEAKIAogc3RhdGljIGlubGluZSBsb25nIHBvbGxfcGVuZGluZyh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0JcmV0dXJuIHBscGFyX2hjYWxsKEhfUE9MTF9QRU5ESU5HLCAwLCAwLCAwLCAwLCAmZHVtbXksICZkdW1teSwgJmR1bW15KTsKKwlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfUE9MTF9QRU5ESU5HKTsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIHByb2RfcHJvY2Vzc29yKHZvaWQpCiB7Ci0JcGxwYXJfaGNhbGxfbm9yZXRzKEhfUFJPRCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX1BST0QpOwogfQogCiBzdGF0aWMgaW5saW5lIGxvbmcgY2VkZV9wcm9jZXNzb3Iodm9pZCkKIHsKLQlwbHBhcl9oY2FsbF9ub3JldHMoSF9DRURFKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ0VERSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyB2cGFfY2FsbCh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGNwdSwKQEAgLTQwLDIzICszNyw1OSBAQAogCXJldHVybiB2cGFfY2FsbCgweDEsIGNwdSwgdnBhKTsKIH0KIAorc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfc2xiX3NoYWRvdyh1bnNpZ25lZCBsb25nIGNwdSwgdW5zaWduZWQgbG9uZyB2cGEpCit7CisJcmV0dXJuIHZwYV9jYWxsKDB4NywgY3B1LCB2cGEpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcmVnaXN0ZXJfc2xiX3NoYWRvdyh1bnNpZ25lZCBsb25nIGNwdSwgdW5zaWduZWQgbG9uZyB2cGEpCit7CisJcmV0dXJuIHZwYV9jYWxsKDB4MywgY3B1LCB2cGEpOworfQorCiBleHRlcm4gdm9pZCB2cGFfaW5pdChpbnQgY3B1KTsKIAorc3RhdGljIGlubGluZSBsb25nIHBscGFyX3B0ZV9lbnRlcih1bnNpZ25lZCBsb25nIGZsYWdzLAorCQl1bnNpZ25lZCBsb25nIGhwdGVfZ3JvdXAsIHVuc2lnbmVkIGxvbmcgaHB0ZV92LAorCQl1bnNpZ25lZCBsb25nIGhwdGVfciwgdW5zaWduZWQgbG9uZyAqc2xvdCkKK3sKKwlsb25nIHJjOworCXVuc2lnbmVkIGxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMX0JVRlNJWkVdOworCisJcmMgPSBwbHBhcl9oY2FsbChIX0VOVEVSLCByZXRidWYsIGZsYWdzLCBocHRlX2dyb3VwLCBocHRlX3YsIGhwdGVfcik7CisKKwkqc2xvdCA9IHJldGJ1ZlswXTsKKworCXJldHVybiByYzsKK30KKwogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3B0ZV9yZW1vdmUodW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBwdGV4LAogCQl1bnNpZ25lZCBsb25nIGF2cG4sIHVuc2lnbmVkIGxvbmcgKm9sZF9wdGVoX3JldCwKIAkJdW5zaWduZWQgbG9uZyAqb2xkX3B0ZWxfcmV0KQogewotCXVuc2lnbmVkIGxvbmcgZHVtbXk7Ci0JcmV0dXJuIHBscGFyX2hjYWxsKEhfUkVNT1ZFLCBmbGFncywgcHRleCwgYXZwbiwgMCwgb2xkX3B0ZWhfcmV0LAotCQkJb2xkX3B0ZWxfcmV0LCAmZHVtbXkpOworCWxvbmcgcmM7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVGU0laRV07CisKKwlyYyA9IHBscGFyX2hjYWxsKEhfUkVNT1ZFLCByZXRidWYsIGZsYWdzLCBwdGV4LCBhdnBuKTsKKworCSpvbGRfcHRlaF9yZXQgPSByZXRidWZbMF07CisJKm9sZF9wdGVsX3JldCA9IHJldGJ1ZlsxXTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3B0ZV9yZWFkKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgcHRleCwKIAkJdW5zaWduZWQgbG9uZyAqb2xkX3B0ZWhfcmV0LCB1bnNpZ25lZCBsb25nICpvbGRfcHRlbF9yZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBkdW1teTsKLQlyZXR1cm4gcGxwYXJfaGNhbGwoSF9SRUFELCBmbGFncywgcHRleCwgMCwgMCwgb2xkX3B0ZWhfcmV0LAotCQkJb2xkX3B0ZWxfcmV0LCAmZHVtbXkpOworCWxvbmcgcmM7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVGU0laRV07CisKKwlyYyA9IHBscGFyX2hjYWxsKEhfUkVBRCwgcmV0YnVmLCBmbGFncywgcHRleCk7CisKKwkqb2xkX3B0ZWhfcmV0ID0gcmV0YnVmWzBdOworCSpvbGRfcHRlbF9yZXQgPSByZXRidWZbMV07CisKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9wdGVfcHJvdGVjdCh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHB0ZXgsCkBAIC02OCw5ICsxMDEsMTQgQEAKIHN0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl90Y2VfZ2V0KHVuc2lnbmVkIGxvbmcgbGlvYm4sIHVuc2lnbmVkIGxvbmcgaW9iYSwKIAkJdW5zaWduZWQgbG9uZyAqdGNlX3JldCkKIHsKLQl1bnNpZ25lZCBsb25nIGR1bW15OwotCXJldHVybiBwbHBhcl9oY2FsbChIX0dFVF9UQ0UsIGxpb2JuLCBpb2JhLCAwLCAwLCB0Y2VfcmV0LCAmZHVtbXksCi0JCQkmZHVtbXkpOworCWxvbmcgcmM7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVGU0laRV07CisKKwlyYyA9IHBscGFyX2hjYWxsKEhfR0VUX1RDRSwgcmV0YnVmLCBsaW9ibiwgaW9iYSk7CisKKwkqdGNlX3JldCA9IHJldGJ1ZlswXTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3RjZV9wdXQodW5zaWduZWQgbG9uZyBsaW9ibiwgdW5zaWduZWQgbG9uZyBpb2JhLApAQCAtOTQsOSArMTMyLDE3IEBACiBzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfZ2V0X3Rlcm1fY2hhcih1bnNpZ25lZCBsb25nIHRlcm1ubywKIAkJdW5zaWduZWQgbG9uZyAqbGVuX3JldCwgY2hhciAqYnVmX3JldCkKIHsKKwlsb25nIHJjOworCXVuc2lnbmVkIGxvbmcgcmV0YnVmW1BMUEFSX0hDQUxMX0JVRlNJWkVdOwogCXVuc2lnbmVkIGxvbmcgKmxidWYgPSAodW5zaWduZWQgbG9uZyAqKWJ1Zl9yZXQ7CS8qIFRPRE86IGFsaWdubWVudD8gKi8KLQlyZXR1cm4gcGxwYXJfaGNhbGwoSF9HRVRfVEVSTV9DSEFSLCB0ZXJtbm8sIDAsIDAsIDAsIGxlbl9yZXQsCi0JCQlsYnVmICsgMCwgbGJ1ZiArIDEpOworCisJcmMgPSBwbHBhcl9oY2FsbChIX0dFVF9URVJNX0NIQVIsIHJldGJ1ZiwgdGVybW5vKTsKKworCSpsZW5fcmV0ID0gcmV0YnVmWzBdOworCWxidWZbMF0gPSByZXRidWZbMV07CisJbGJ1ZlsxXSA9IHJldGJ1ZlsyXTsKKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3B1dF90ZXJtX2NoYXIodW5zaWduZWQgbG9uZyB0ZXJtbm8sIHVuc2lnbmVkIGxvbmcgbGVuLApAQCAtMTA3LDQgKzE1MywzMSBAQAogCQkJbGJ1ZlsxXSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9lb2kodW5zaWduZWQgbG9uZyB4aXJyKQoreworCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9FT0ksIHhpcnIpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfY3Bwcih1bnNpZ25lZCBsb25nIGNwcHIpCit7CisJcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0NQUFIsIGNwcHIpOworfQorCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfaXBpKHVuc2lnbmVkIGxvbmcgc2VydmVybnVtLCB1bnNpZ25lZCBsb25nIG1mcnIpCit7CisJcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0lQSSwgc2VydmVybnVtLCBtZnJyKTsKK30KKworc3RhdGljIGlubGluZSBsb25nIHBscGFyX3hpcnIodW5zaWduZWQgbG9uZyAqeGlycl9yZXQpCit7CisJbG9uZyByYzsKKwl1bnNpZ25lZCBsb25nIHJldGJ1ZltQTFBBUl9IQ0FMTF9CVUZTSVpFXTsKKworCXJjID0gcGxwYXJfaGNhbGwoSF9YSVJSLCByZXRidWYpOworCisJKnhpcnJfcmV0ID0gcmV0YnVmWzBdOworCisJcmV0dXJuIHJjOworfQorCiAjZW5kaWYgLyogX1BTRVJJRVNfUExQQVJfV1JBUFBFUlNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCmluZGV4IGM3ZmZkZTEuLjkwMzExNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKQEAgLTc5LDcgKzc5LDcgQEAKIHsKIAlpbnQgaSwgaW5kZXgsIGNvdW50ID0gMDsKIAlzdHJ1Y3Qgb2ZfaXJxIG9pcnE7Ci0JdTMyICpvcGljcHJvcDsKKwljb25zdCB1MzIgKm9waWNwcm9wOwogCXVuc2lnbmVkIGludCBvcGljcGxlbjsKIAl1bnNpZ25lZCBpbnQgdmlycXNbMTZdOwogCkBAIC04Nyw3ICs4Nyw3IEBACiAJICogbWFwIHRob3NlIGludGVycnVwdHMgdXNpbmcgdGhlIGRlZmF1bHQgaW50ZXJydXB0IGhvc3QgYW5kIGRlZmF1bHQKIAkgKiB0cmlnZ2VyCiAJICovCi0Jb3BpY3Byb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAib3Blbi1waWMtaW50ZXJydXB0IiwgJm9waWNwbGVuKTsKKwlvcGljcHJvcCA9IGdldF9wcm9wZXJ0eShucCwgIm9wZW4tcGljLWludGVycnVwdCIsICZvcGljcGxlbik7CiAJaWYgKG9waWNwcm9wKSB7CiAJCW9waWNwbGVuIC89IHNpemVvZih1MzIpOwogCQlmb3IgKGkgPSAwOyBpIDwgb3BpY3BsZW47IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3J0YXNkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwppbmRleCAyZTRlMDQwLi44Y2EyNjEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcnRhc2QuYwpAQCAtMzU5LDExICszNTksMTEgQEAKIHN0YXRpYyBpbnQgZ2V0X2V2ZW50c2Nhbl9wYXJtcyh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZTsKLQlpbnQgKmlwOworCWNvbnN0IGludCAqaXA7CiAKIAlub2RlID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9ydGFzIik7CiAKLQlpcCA9IChpbnQgKilnZXRfcHJvcGVydHkobm9kZSwgInJ0YXMtZXZlbnQtc2Nhbi1yYXRlIiwgTlVMTCk7CisJaXAgPSBnZXRfcHJvcGVydHkobm9kZSwgInJ0YXMtZXZlbnQtc2Nhbi1yYXRlIiwgTlVMTCk7CiAJaWYgKGlwID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJydGFzZDogbm8gcnRhcy1ldmVudC1zY2FuLXJhdGVcbiIpOwogCQlvZl9ub2RlX3B1dChub2RlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKaW5kZXggNTRhNTI0My4uYTYzOThmYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMKQEAgLTEzMyw5ICsxMzMsOSBAQAogc3RhdGljIHZvaWQgX19pbml0IHBzZXJpZXNfbXBpY19pbml0X0lSUSh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpvbGQsICpjYXNjYWRlID0gTlVMTDsKLSAgICAgICAgdW5zaWduZWQgaW50ICphZGRycDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgaW50ICphZGRycDsKIAl1bnNpZ25lZCBsb25nIGludGFjayA9IDA7Ci0JdW5zaWduZWQgaW50ICpvcHByb3A7CisJY29uc3QgdW5zaWduZWQgaW50ICpvcHByb3A7CiAJdW5zaWduZWQgbG9uZyBvcGVucGljX2FkZHIgPSAwOwogCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycTsKIAlpbnQgbmFkZHIsIG4sIGksIG9wcGxlbjsKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAJbnAgPSBvZl9maW5kX25vZGVfYnlfcGF0aCgiLyIpOwogCW5hZGRyID0gcHJvbV9uX2FkZHJfY2VsbHMobnApOwotCW9wcHJvcCA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KG5wLCAicGxhdGZvcm0tb3Blbi1waWMiLCAmb3BwbGVuKTsKKwlvcHByb3AgPSBnZXRfcHJvcGVydHkobnAsICJwbGF0Zm9ybS1vcGVuLXBpYyIsICZvcHBsZW4pOwogCWlmIChvcHByb3AgIT0gMCkgewogCQlvcGVucGljX2FkZHIgPSBvZl9yZWFkX251bWJlcihvcHByb3AsIG5hZGRyKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIk9wZW5QSUMgYWRkcjogJWx4XG4iLCBvcGVucGljX2FkZHIpOwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCQlicmVhazsKIAkJaWYgKHN0cmNtcChucC0+bmFtZSwgInBjaSIpICE9IDApCiAJCQljb250aW51ZTsKLQkJYWRkcnAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiODI1OS1pbnRlcnJ1cHQtYWNrbm93bGVkZ2UiLAorCQlhZGRycCA9IGdldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwKIAkJCQkJICAgIE5VTEwpOwogCQlpZiAoYWRkcnAgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwpAQCAtMjEzLDggKzIxMyw2IEBACiB7CiAJdW5zaWduZWQgbG9uZyBzZXQsIHJlc2V0OwogCi0JcG93ZXI0X2VuYWJsZV9wbWNzKCk7Ci0KIAlzZXQgPSAxVUwgPDwgNjM7CiAJcmVzZXQgPSAwOwogCXBscGFyX2hjYWxsX25vcmV0cyhIX1BFUkZNT04sIHNldCwgcmVzZXQpOwpAQCAtMjI1LDIzICsyMjMsMzcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19LRVhFQwotc3RhdGljIHZvaWQgcHNlcmllc19rZXhlY19jcHVfZG93bl9tcGljKGludCBjcmFzaF9zaHV0ZG93biwgaW50IHNlY29uZGFyeSkKLXsKLQltcGljX3RlYXJkb3duX3RoaXNfY3B1KHNlY29uZGFyeSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHBzZXJpZXNfa2V4ZWNfY3B1X2Rvd25feGljcyhpbnQgY3Jhc2hfc2h1dGRvd24sIGludCBzZWNvbmRhcnkpCitzdGF0aWMgdm9pZCBwc2VyaWVzX2tleGVjX2NwdV9kb3duKGludCBjcmFzaF9zaHV0ZG93biwgaW50IHNlY29uZGFyeSkKIHsKIAkvKiBEb24ndCByaXNrIGEgaHlwZXJ2aXNvciBjYWxsIGlmIHdlJ3JlIGNyYXNoaW5nICovCiAJaWYgKGZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfU1BMUEFSKSAmJiAhY3Jhc2hfc2h1dGRvd24pIHsKLQkJdW5zaWduZWQgbG9uZyB2cGEgPSBfX3BhKGdldF9scHBhY2EoKSk7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAotCQlpZiAodW5yZWdpc3Rlcl92cGEoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIHZwYSkpIHsKKwkJYWRkciA9IF9fcGEoZ2V0X3NsYl9zaGFkb3coKSk7CisJCWlmICh1bnJlZ2lzdGVyX3NsYl9zaGFkb3coaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIGFkZHIpKQorCQkJcHJpbnRrKCJTTEIgc2hhZG93IGJ1ZmZlciBkZXJlZ2lzdHJhdGlvbiBvZiAiCisJCQkgICAgICAgImNwdSAldSAoaHdfY3B1X2lkICVkKSBmYWlsZWRcbiIsCisJCQkgICAgICAgc21wX3Byb2Nlc3Nvcl9pZCgpLAorCQkJICAgICAgIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKworCQlhZGRyID0gX19wYShnZXRfbHBwYWNhKCkpOworCQlpZiAodW5yZWdpc3Rlcl92cGEoaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCksIGFkZHIpKSB7CiAJCQlwcmludGsoIlZQQSBkZXJlZ2lzdHJhdGlvbiBvZiBjcHUgJXUgKGh3X2NwdV9pZCAlZCkgIgogCQkJCQkiZmFpbGVkXG4iLCBzbXBfcHJvY2Vzc29yX2lkKCksCiAJCQkJCWhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJfQogCX0KK30KKworc3RhdGljIHZvaWQgcHNlcmllc19rZXhlY19jcHVfZG93bl9tcGljKGludCBjcmFzaF9zaHV0ZG93biwgaW50IHNlY29uZGFyeSkKK3sKKwlwc2VyaWVzX2tleGVjX2NwdV9kb3duKGNyYXNoX3NodXRkb3duLCBzZWNvbmRhcnkpOworCW1waWNfdGVhcmRvd25fdGhpc19jcHUoc2Vjb25kYXJ5KTsKK30KKworc3RhdGljIHZvaWQgcHNlcmllc19rZXhlY19jcHVfZG93bl94aWNzKGludCBjcmFzaF9zaHV0ZG93biwgaW50IHNlY29uZGFyeSkKK3sKKwlwc2VyaWVzX2tleGVjX2NwdV9kb3duKGNyYXNoX3NodXRkb3duLCBzZWNvbmRhcnkpOwogCXhpY3NfdGVhcmRvd25fY3B1KHNlY29uZGFyeSk7CiB9CiAjZW5kaWYgLyogQ09ORklHX0tFWEVDICovCkBAIC0yNDksMTEgKzI2MSwxMSBAQAogc3RhdGljIHZvaWQgX19pbml0IHBzZXJpZXNfZGlzY292ZXJfcGljKHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQljaGFyICp0eXBlcDsKKwljb25zdCBjaGFyICp0eXBlcDsKIAogCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX25vZGVfYnlfbmFtZShucCwKIAkJCQkJCSAgICJpbnRlcnJ1cHQtY29udHJvbGxlciIpKTspIHsKLQkJdHlwZXAgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShucCwgImNvbXBhdGlibGUiLCBOVUxMKTsKKwkJdHlwZXAgPSBnZXRfcHJvcGVydHkobnAsICJjb21wYXRpYmxlIiwgTlVMTCk7CiAJCWlmIChzdHJzdHIodHlwZXAsICJvcGVuLXBpYyIpKSB7CiAJCQlwU2VyaWVzX21waWNfbm9kZSA9IG9mX25vZGVfZ2V0KG5wKTsKIAkJCXBwY19tZC5pbml0X0lSUSAgICAgICA9IHBzZXJpZXNfbXBpY19pbml0X0lSUTsKQEAgLTUwMSw3ICs1MTMsOCBAQAogCX0KIAogCS8qCi0JICogQ2VkZSBpZiB0aGUgb3RoZXIgdGhyZWFkIGlzIG5vdCBpZGxlLCBzbyB0aGF0IGl0IGNhbgorCSAqIElmIG5vdCBTTVQsIGNlZGUgcHJvY2Vzc29yLiAgSWYgQ1BVIGlzIHJ1bm5pbmcgU01UCisJICogY2VkZSBpZiB0aGUgb3RoZXIgdGhyZWFkIGlzIG5vdCBpZGxlLCBzbyB0aGF0IGl0IGNhbgogCSAqIGdvIHNpbmdsZS10aHJlYWRlZC4gIElmIHRoZSBvdGhlciB0aHJlYWQgaXMgaWRsZSwKIAkgKiB3ZSBhc2sgdGhlIGh5cGVydmlzb3IgaWYgaXQgaGFzIHBlbmRpbmcgd29yayBpdAogCSAqIHdhbnRzIHRvIGRvIGFuZCBjZWRlIGlmIGl0IGRvZXMuICBPdGhlcndpc2Ugd2Uga2VlcApAQCAtNTE0LDcgKzUyNyw4IEBACiAJICogdmVyeSBsb3cgcHJpb3JpdHkuICBUaGUgY2VkZSBlbmFibGVzIGludGVycnVwdHMsIHdoaWNoCiAJICogZG9lc24ndCBtYXR0ZXIgaGVyZS4KIAkgKi8KLQlpZiAoIWxwcGFjYVtjcHUgXiAxXS5pZGxlIHx8IHBvbGxfcGVuZGluZygpID09IEhfUEVORElORykKKwlpZiAoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NNVCkgfHwgIWxwcGFjYVtjcHUgXiAxXS5pZGxlCisJICAgIHx8IHBvbGxfcGVuZGluZygpID09IEhfUEVORElORykKIAkJY2VkZV9wcm9jZXNzb3IoKTsKIAogb3V0OgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NtcC5jCmluZGV4IGFjNjEwOTguLmM2NjI0YjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc21wLmMKQEAgLTYyLDcgKzYyLDcgQEAKICAqLwogc3RhdGljIGNwdW1hc2tfdCBvZl9zcGluX21hcDsKIAotZXh0ZXJuIHZvaWQgcFNlcmllc19zZWNvbmRhcnlfc21wX2luaXQodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBnZW5lcmljX3NlY29uZGFyeV9zbXBfaW5pdCh1bnNpZ25lZCBsb25nKTsKIAogI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCkBAIC0xNDUsOSArMTQ1LDkgQEAKIAl1bnNpZ25lZCBpbnQgY3B1OwogCWNwdW1hc2tfdCBjYW5kaWRhdGVfbWFwLCB0bXAgPSBDUFVfTUFTS19OT05FOwogCWludCBlcnIgPSAtRU5PU1BDLCBsZW4sIG50aHJlYWRzLCBpOwotCXUzMiAqaW50c2VydjsKKwljb25zdCB1MzIgKmludHNlcnY7CiAKLQlpbnRzZXJ2ID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7CisJaW50c2VydiA9IGdldF9wcm9wZXJ0eShucCwgImlibSxwcGMtaW50ZXJydXB0LXNlcnZlciNzIiwgJmxlbik7CiAJaWYgKCFpbnRzZXJ2KQogCQlyZXR1cm4gMDsKIApAQCAtMjA1LDkgKzIwNSw5IEBACiB7CiAJdW5zaWduZWQgaW50IGNwdTsKIAlpbnQgbGVuLCBudGhyZWFkcywgaTsKLQl1MzIgKmludHNlcnY7CisJY29uc3QgdTMyICppbnRzZXJ2OwogCi0JaW50c2VydiA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIsICZsZW4pOworCWludHNlcnYgPSBnZXRfcHJvcGVydHkobnAsICJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIsICZsZW4pOwogCWlmICghaW50c2VydikKIAkJcmV0dXJuOwogCkBAIC0yNzAsNyArMjcwLDcgQEAKIHsKIAlpbnQgc3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfaGVyZSA9IF9fcGEoKHUzMikqKCh1bnNpZ25lZCBsb25nICopCi0JCQkJCSAgICAgICBwU2VyaWVzX3NlY29uZGFyeV9zbXBfaW5pdCkpOworCQkJCQkgICAgICAgZ2VuZXJpY19zZWNvbmRhcnlfc21wX2luaXQpKTsKIAl1bnNpZ25lZCBpbnQgcGNwdTsKIAlpbnQgc3RhcnRfY3B1OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYwppbmRleCAyZDBkYTZmLi4yNTM5NzJlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAogI2luY2x1ZGUgInhpY3MuaCIKKyNpbmNsdWRlICJwbHBhcl93cmFwcGVycy5oIgogCiAjZGVmaW5lIFhJQ1NfSVBJCQkyCiAjZGVmaW5lIFhJQ1NfSVJRX1NQVVJJT1VTCTAKQEAgLTExMCwyNyArMTExLDYgQEAKIC8qIExQQVIgbG93IGxldmVsIGFjY2Vzc29ycyAqLwogCiAKLXN0YXRpYyBpbmxpbmUgbG9uZyBwbHBhcl9lb2kodW5zaWduZWQgbG9uZyB4aXJyKQotewotCXJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9FT0ksIHhpcnIpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfY3Bwcih1bnNpZ25lZCBsb25nIGNwcHIpCi17Ci0JcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0NQUFIsIGNwcHIpOwotfQotCi1zdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfaXBpKHVuc2lnbmVkIGxvbmcgc2VydmVybnVtLCB1bnNpZ25lZCBsb25nIG1mcnIpCi17Ci0JcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0lQSSwgc2VydmVybnVtLCBtZnJyKTsKLX0KLQotc3RhdGljIGlubGluZSBsb25nIHBscGFyX3hpcnIodW5zaWduZWQgbG9uZyAqeGlycl9yZXQpCi17Ci0JdW5zaWduZWQgbG9uZyBkdW1teTsKLQlyZXR1cm4gcGxwYXJfaGNhbGwoSF9YSVJSLCAwLCAwLCAwLCAwLCB4aXJyX3JldCwgJmR1bW15LCAmZHVtbXkpOwotfQotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBscGFyX3hpcnJfaW5mb19nZXQoaW50IG5fY3B1KQogewogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKQEAgLTQ2Nyw3ICs0NDcsNyBAQAogCSAqCiAJICogWFhYOiB1bmRvIG9mIHRlYXJkb3duIG9uIGtleGVjIG5lZWRzIHRoaXMgdG9vLCBhcyBtYXkgaG90cGx1ZwogCSAqLwotCXJ0YXNfc2V0X2luZGljYXRvcihHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAorCXJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KEdMT0JBTF9JTlRFUlJVUFRfUVVFVUUsCiAJCSgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLSBkZWZhdWx0X2Rpc3RyaWJfc2VydmVyLCAxKTsKIH0KIApAQCAtNTkwLDE0ICs1NzAsMTQgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmluZHgpCiB7CiAJdW5zaWduZWQgaW50IGlsZW47Ci0JdTMyICppcmVnOworCWNvbnN0IHUzMiAqaXJlZzsKIAogCS8qIFRoaXMgY29kZSBkb2VzIHRoZSB0aGVvcmljYWxseSBicm9rZW4gYXNzdW1wdGlvbiB0aGF0IHRoZSBpbnRlcnJ1cHQKIAkgKiBzZXJ2ZXIgbnVtYmVycyBhcmUgdGhlIHNhbWUgYXMgdGhlIGhhcmQgQ1BVIG51bWJlcnMuCiAJICogVGhpcyBoYXBwZW5zIHRvIGJlIHRoZSBjYXNlIHNvIGZhciBidXQgd2UgYXJlIHBsYXlpbmcgd2l0aCBmaXJlLi4uCiAJICogc2hvdWxkIGJlIGZpeGVkIG9uZSBvZiB0aGVzZSBkYXlzLiAtQmVuSC4KIAkgKi8KLQlpcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgImlibSxpbnRlcnJ1cHQtc2VydmVyLXJhbmdlcyIsIE5VTEwpOworCWlyZWcgPSBnZXRfcHJvcGVydHkobnAsICJpYm0saW50ZXJydXB0LXNlcnZlci1yYW5nZXMiLCBOVUxMKTsKIAogCS8qIERvIHRoYXQgZXZlciBoYXBwZW4gPyB3ZSdsbCBrbm93IHNvb24gZW5vdWdoLi4uIGJ1dCBldmVuIGdvb2Qnb2xkCiAJICogZjgwIGRvZXMgaGF2ZSB0aGF0IHByb3BlcnR5IC4uCkBAIC02MDksNyArNTg5LDcgQEAKIAkJICovCiAJCSppbmR4ID0gKmlyZWc7CiAJfQotCWlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmlsZW4pOworCWlyZWcgPSBnZXRfcHJvcGVydHkobnAsICJyZWciLCAmaWxlbik7CiAJaWYgKCFpcmVnKQogCQlwYW5pYygieGljc19pbml0X0lSUTogY2FuJ3QgZmluZCBpbnRlcnJ1cHQgcmVnIHByb3BlcnR5Iik7CiAKQEAgLTYzNSw3ICs2MTUsNyBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsICpvbGQsICpmb3VuZCA9IE5VTEw7CiAJaW50IGNhc2NhZGUsIG5hZGRyOwotCXUzMiAqYWRkcnA7CisJY29uc3QgdTMyICphZGRycDsKIAl1bnNpZ25lZCBsb25nIGludGFjayA9IDA7CiAKIAlmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsICJpbnRlcnJ1cHQtY29udHJvbGxlciIpCkBAIC02NjEsNyArNjQxLDcgQEAKIAkJCWJyZWFrOwogCQlpZiAoc3RyY21wKG5wLT5uYW1lLCAicGNpIikgIT0gMCkKIAkJCWNvbnRpbnVlOwotCQlhZGRycCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICI4MjU5LWludGVycnVwdC1hY2tub3dsZWRnZSIsIE5VTEwpOworCQlhZGRycCA9IGdldF9wcm9wZXJ0eShucCwgIjgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlIiwgTlVMTCk7CiAJCWlmIChhZGRycCA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCW5hZGRyID0gcHJvbV9uX2FkZHJfY2VsbHMobnApOwpAQCAtNjgwLDcgKzY2MCw4IEBACiB7CiAJaW50IGk7CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKLQl1MzIgKmlyZWcsIGlsZW4sIGluZHggPSAwOworCXUzMiBpbGVuLCBpbmR4ID0gMDsKKwljb25zdCB1MzIgKmlyZWc7CiAJaW50IGZvdW5kID0gMDsKIAogCXBwYzY0X2Jvb3RfbXNnKDB4MjAsICJYSUNTIEluaXQiKTsKQEAgLTcwNSwxOCArNjg2LDE3IEBACiAJZm9yIChucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJjcHUiKTsKIAkgICAgIG5wOwogCSAgICAgbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShucCwgImNwdSIpKSB7Ci0JCWlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmlsZW4pOworCQlpcmVnID0gZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJmlsZW4pOwogCQlpZiAoaXJlZyAmJiBpcmVnWzBdID09IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoYm9vdF9jcHVpZCkpIHsKLQkJCWlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLAotCQkJCQkJICAiaWJtLHBwYy1pbnRlcnJ1cHQtZ3NlcnZlciNzIiwKLQkJCQkJCSAgICZpbGVuKTsKKwkJCWlyZWcgPSBnZXRfcHJvcGVydHkobnAsCisJCQkJCSJpYm0scHBjLWludGVycnVwdC1nc2VydmVyI3MiLCAmaWxlbik7CiAJCQlpID0gaWxlbiAvIHNpemVvZihpbnQpOwogCQkJaWYgKGlyZWcgJiYgaSA+IDApIHsKIAkJCQlkZWZhdWx0X3NlcnZlciA9IGlyZWdbMF07CiAJCQkJLyogdGFrZSBsYXN0IGVsZW1lbnQgKi8KIAkJCQlkZWZhdWx0X2Rpc3RyaWJfc2VydmVyID0gaXJlZ1tpLTFdOwogCQkJfQotCQkJaXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsCisJCQlpcmVnID0gZ2V0X3Byb3BlcnR5KG5wLAogCQkJCQkiaWJtLGludGVycnVwdC1zZXJ2ZXIjLXNpemUiLCBOVUxMKTsKIAkJCWlmIChpcmVnKQogCQkJCWludGVycnVwdF9zZXJ2ZXJfc2l6ZSA9ICppcmVnOwpAQCAtNzk2LDcgKzc3Niw3IEBACiAJICogc28gbGVhdmUgdGhlIG1hc3RlciBjcHUgaW4gdGhlIGdyb3VwLgogCSAqLwogCWlmIChzZWNvbmRhcnkpCi0JCXJ0YXNfc2V0X2luZGljYXRvcihHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAorCQlydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAogCQkJCSAgICgxVUwgPDwgaW50ZXJydXB0X3NlcnZlcl9zaXplKSAtIDEgLQogCQkJCSAgIGRlZmF1bHRfZGlzdHJpYl9zZXJ2ZXIsIDApOwogfQpAQCAtODEzLDcgKzc5Myw3IEBACiAJeGljc19zZXRfY3B1X3ByaW9yaXR5KGNwdSwgMCk7CiAKIAkvKiByZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIGdsb2JhbCBpbnRlcnJ1cHQgcXVldWUgKi8KLQlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3IoR0xPQkFMX0lOVEVSUlVQVF9RVUVVRSwKKwlzdGF0dXMgPSBydGFzX3NldF9pbmRpY2F0b3JfZmFzdChHTE9CQUxfSU5URVJSVVBUX1FVRVVFLAogCQkoMVVMIDw8IGludGVycnVwdF9zZXJ2ZXJfc2l6ZSkgLSAxIC0gZGVmYXVsdF9kaXN0cmliX3NlcnZlciwgMCk7CiAJV0FSTl9PTihzdGF0dXMgPCAwKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvTWFrZWZpbGUKaW5kZXggY2ViZmFlMi4uZTVlOTk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L01ha2VmaWxlCkBAIC05LDExICs5LDExIEBACiBvYmotJChDT05GSUdfNDB4KQkJKz0gZGNyLm8KIG9iai0kKENPTkZJR19VM19EQVJUKQkJKz0gZGFydF9pb21tdS5vCiBvYmotJChDT05GSUdfTU1JT19OVlJBTSkJKz0gbW1pb19udnJhbS5vCi1vYmotJChDT05GSUdfUFBDXzgzeHgpCQkrPSBpcGljLm8KIG9iai0kKENPTkZJR19GU0xfU09DKQkJKz0gZnNsX3NvYy5vCiBvYmotJChDT05GSUdfUFBDX1RPREMpCQkrPSB0b2RjLm8KIG9iai0kKENPTkZJR19UU0kxMDhfQlJJREdFKQkrPSB0c2kxMDhfcGNpLm8gdHNpMTA4X2Rldi5vCiAKIGlmZXEgKCQoQ09ORklHX1BQQ19NRVJHRSkseSkKIG9iai0kKENPTkZJR19QUENfSTgyNTkpCQkrPSBpODI1OS5vCi0gZW5kaWYKK29iai0kKENPTkZJR19QUENfODN4eCkJCSs9IGlwaWMubworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9kYXJ0X2lvbW11LmMKaW5kZXggZTMyZmFkZC4uMDNiNDQ3N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvZGFydF9pb21tdS5jCkBAIC0xMzksNiArMTM5LDcgQEAKIAogc3RhdGljIHZvaWQgZGFydF9mbHVzaChzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKIHsKKwltYigpOwogCWlmIChkYXJ0X2RpcnR5KSB7CiAJCWRhcnRfdGxiX2ludmFsaWRhdGVfYWxsKCk7CiAJCWRhcnRfZGlydHkgPSAwOwpAQCAtMTcyLDkgKzE3MywxMyBAQAogCQl1YWRkciArPSBEQVJUX1BBR0VfU0laRTsKIAl9CiAKKwkvKiBtYWtlIHN1cmUgYWxsIHVwZGF0ZXMgaGF2ZSByZWFjaGVkIG1lbW9yeSAqLworCW1iKCk7CisJaW5fYmUzMigodW5zaWduZWQgX19pb21lbSAqKWRwKTsKKwltYigpOworCiAJaWYgKGRhcnRfaXNfdTQpIHsKIAkJcnBuID0gaW5kZXg7Ci0JCW1iKCk7IC8qIG1ha2Ugc3VyZSBhbGwgdXBkYXRlcyBoYXZlIHJlYWNoZWQgbWVtb3J5ICovCiAJCXdoaWxlIChucGFnZXMtLSkKIAkJCWRhcnRfdGxiX2ludmFsaWRhdGVfb25lKHJwbisrKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwppbmRleCBlOTgzOTcyLi45MmJhMzc4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwpAQCAtNDEsNyArNDEsNyBAQAogCXNvYyA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJzb2MiKTsKIAlpZiAoc29jKSB7CiAJCXVuc2lnbmVkIGludCBzaXplOwotCQl2b2lkICpwcm9wID0gZ2V0X3Byb3BlcnR5KHNvYywgInJlZyIsICZzaXplKTsKKwkJY29uc3Qgdm9pZCAqcHJvcCA9IGdldF9wcm9wZXJ0eShzb2MsICJyZWciLCAmc2l6ZSk7CiAJCWltbXJiYXNlID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc29jLCBwcm9wKTsKIAkJb2Zfbm9kZV9wdXQoc29jKTsKIAl9OwpAQCAtODUsMTEgKzg1LDggQEAKIAkJCW1kaW9fZGF0YS5pcnFba10gPSAtMTsKIAogCQl3aGlsZSAoKGNoaWxkID0gb2ZfZ2V0X25leHRfY2hpbGQobnAsIGNoaWxkKSkgIT0gTlVMTCkgewotCQkJaWYgKGNoaWxkLT5uX2ludHJzKSB7Ci0JCQkJdTMyICppZCA9Ci0JCQkJICAgICh1MzIgKikgZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7Ci0JCQkJbWRpb19kYXRhLmlycVsqaWRdID0gY2hpbGQtPmludHJzWzBdLmxpbmU7Ci0JCQl9CisJCQljb25zdCB1MzIgKmlkID0gZ2V0X3Byb3BlcnR5KGNoaWxkLCAicmVnIiwgTlVMTCk7CisJCQltZGlvX2RhdGEuaXJxWyppZF0gPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChjaGlsZCwgMCk7CiAJCX0KIAogCQlyZXQgPQpAQCAtMTI3LDEwICsxMjQsMTEgQEAKIAkJc3RydWN0IHJlc291cmNlIHJbNF07CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5LCAqbWRpbzsKIAkJc3RydWN0IGdpYW5mYXJfcGxhdGZvcm1fZGF0YSBnZmFyX2RhdGE7Ci0JCXVuc2lnbmVkIGludCAqaWQ7Ci0JCWNoYXIgKm1vZGVsOwotCQl2b2lkICptYWNfYWRkcjsKLQkJcGhhbmRsZSAqcGg7CisJCWNvbnN0IHVuc2lnbmVkIGludCAqaWQ7CisJCWNvbnN0IGNoYXIgKm1vZGVsOworCQljb25zdCB2b2lkICptYWNfYWRkcjsKKwkJY29uc3QgcGhhbmRsZSAqcGg7CisJCWludCBuX3JlcyA9IDE7CiAKIAkJbWVtc2V0KHIsIDAsIHNpemVvZihyKSk7CiAJCW1lbXNldCgmZ2Zhcl9kYXRhLCAwLCBzaXplb2YoZ2Zhcl9kYXRhKSk7CkBAIC0xMzksOCArMTM3LDcgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCi0JCXJbMV0uc3RhcnQgPSBucC0+aW50cnNbMF0ubGluZTsKLQkJclsxXS5lbmQgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJclsxXS5zdGFydCA9IHJbMV0uZW5kID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCQlyWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CiAKIAkJbW9kZWwgPSBnZXRfcHJvcGVydHkobnAsICJtb2RlbCIsIE5VTEwpOwpAQCAtMTUwLDI3ICsxNDcsMzUgQEAKIAkJCXJbMV0ubmFtZSA9IGdmYXJfdHhfaW50cjsKIAogCQkJclsyXS5uYW1lID0gZ2Zhcl9yeF9pbnRyOwotCQkJclsyXS5zdGFydCA9IG5wLT5pbnRyc1sxXS5saW5lOwotCQkJclsyXS5lbmQgPSBucC0+aW50cnNbMV0ubGluZTsKKwkJCXJbMl0uc3RhcnQgPSByWzJdLmVuZCA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAxKTsKIAkJCXJbMl0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAogCQkJclszXS5uYW1lID0gZ2Zhcl9lcnJfaW50cjsKLQkJCXJbM10uc3RhcnQgPSBucC0+aW50cnNbMl0ubGluZTsKLQkJCXJbM10uZW5kID0gbnAtPmludHJzWzJdLmxpbmU7CisJCQlyWzNdLnN0YXJ0ID0gclszXS5lbmQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMik7CiAJCQlyWzNdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisKKwkJCW5fcmVzICs9IDI7CiAJCX0KIAogCQlnZmFyX2RldiA9CiAJCSAgICBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJmc2wtZ2lhbmZhciIsIGksICZyWzBdLAotCQkJCQkJICAgIG5wLT5uX2ludHJzICsgMSk7CisJCQkJCQkgICAgbl9yZXMgKyAxKTsKIAogCQlpZiAoSVNfRVJSKGdmYXJfZGV2KSkgewogCQkJcmV0ID0gUFRSX0VSUihnZmFyX2Rldik7CiAJCQlnb3RvIGVycjsKIAkJfQogCi0JCW1hY19hZGRyID0gZ2V0X3Byb3BlcnR5KG5wLCAiYWRkcmVzcyIsIE5VTEwpOwotCQltZW1jcHkoZ2Zhcl9kYXRhLm1hY19hZGRyLCBtYWNfYWRkciwgNik7CisJCW1hY19hZGRyID0gZ2V0X3Byb3BlcnR5KG5wLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKTsKKwkJaWYgKG1hY19hZGRyID09IE5VTEwpCisJCQltYWNfYWRkciA9IGdldF9wcm9wZXJ0eShucCwgIm1hYy1hZGRyZXNzIiwgTlVMTCk7CisJCWlmIChtYWNfYWRkciA9PSBOVUxMKSB7CisJCQkvKiBPYnNvbGV0ZSAqLworCQkJbWFjX2FkZHIgPSBnZXRfcHJvcGVydHkobnAsICJhZGRyZXNzIiwgTlVMTCk7CisJCX0KKworCQlpZiAobWFjX2FkZHIpCisJCQltZW1jcHkoZ2Zhcl9kYXRhLm1hY19hZGRyLCBtYWNfYWRkciwgNik7CiAKIAkJaWYgKG1vZGVsICYmICFzdHJjYXNlY21wKG1vZGVsLCAiVFNFQyIpKQogCQkJZ2Zhcl9kYXRhLmRldmljZV9mbGFncyA9CkBAIC0xODgsNyArMTkzLDcgQEAKIAkJCSAgICBGU0xfR0lBTkZBUl9ERVZfSEFTX1ZMQU4gfAogCQkJICAgIEZTTF9HSUFORkFSX0RFVl9IQVNfRVhURU5ERURfSEFTSDsKIAotCQlwaCA9IChwaGFuZGxlICopIGdldF9wcm9wZXJ0eShucCwgInBoeS1oYW5kbGUiLCBOVUxMKTsKKwkJcGggPSBnZXRfcHJvcGVydHkobnAsICJwaHktaGFuZGxlIiwgTlVMTCk7CiAJCXBoeSA9IG9mX2ZpbmRfbm9kZV9ieV9waGFuZGxlKCpwaCk7CiAKIAkJaWYgKHBoeSA9PSBOVUxMKSB7CkBAIC0xOTgsNyArMjAzLDcgQEAKIAogCQltZGlvID0gb2ZfZ2V0X3BhcmVudChwaHkpOwogCi0JCWlkID0gKHUzMiAqKSBnZXRfcHJvcGVydHkocGh5LCAicmVnIiwgTlVMTCk7CisJCWlkID0gZ2V0X3Byb3BlcnR5KHBoeSwgInJlZyIsIE5VTEwpOwogCQlyZXQgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG1kaW8sIDAsICZyZXMpOwogCQlpZiAocmV0KSB7CiAJCQlvZl9ub2RlX3B1dChwaHkpOwpAQCAtMjQyLDcgKzI0Nyw3IEBACiAJICAgICBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlIHJbMl07CiAJCXN0cnVjdCBmc2xfaTJjX3BsYXRmb3JtX2RhdGEgaTJjX2RhdGE7Ci0JCXVuc2lnbmVkIGNoYXIgKmZsYWdzID0gTlVMTDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqZmxhZ3MgPSBOVUxMOwogCiAJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKIAkJbWVtc2V0KCZpMmNfZGF0YSwgMCwgc2l6ZW9mKGkyY19kYXRhKSk7CkBAIC0yNTEsOCArMjU2LDcgQEAKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyOwogCi0JCXJbMV0uc3RhcnQgPSBucC0+aW50cnNbMF0ubGluZTsKLQkJclsxXS5lbmQgPSBucC0+aW50cnNbMF0ubGluZTsKKwkJclsxXS5zdGFydCA9IHJbMV0uZW5kID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCQlyWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CiAKIAkJaTJjX2RldiA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoImZzbC1pMmMiLCBpLCByLCAyKTsKQEAgLTI5NCw3ICsyOTgsNyBAQAogCXN0cnVjdCByZXNvdXJjZSByOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqc29jLCAqbnA7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OwotCXVuc2lnbmVkIGludCAqZnJlcTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKmZyZXE7CiAJaW50IHJldDsKIAogCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgIndhdGNoZG9nIiwgIm1wYzgzeHhfd2R0Iik7CkBAIC0zMTEsNyArMzE1LDcgQEAKIAkJZ290byBub3NvYzsKIAl9CiAKLQlmcmVxID0gKHVuc2lnbmVkIGludCAqKWdldF9wcm9wZXJ0eShzb2MsICJidXMtZnJlcXVlbmN5IiwgTlVMTCk7CisJZnJlcSA9IGdldF9wcm9wZXJ0eShzb2MsICJidXMtZnJlcXVlbmN5IiwgTlVMTCk7CiAJaWYgKCFmcmVxKSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyOwpAQCAtMzUxLDcgKzM1NSw3IEBACiBhcmNoX2luaXRjYWxsKG1wYzgzeHhfd2R0X2luaXQpOwogI2VuZGlmCiAKLXN0YXRpYyBlbnVtIGZzbF91c2IyX3BoeV9tb2RlcyBkZXRlcm1pbmVfdXNiX3BoeShjaGFyICogcGh5X3R5cGUpCitzdGF0aWMgZW51bSBmc2xfdXNiMl9waHlfbW9kZXMgZGV0ZXJtaW5lX3VzYl9waHkoY29uc3QgY2hhciAqcGh5X3R5cGUpCiB7CiAJaWYgKCFwaHlfdHlwZSkKIAkJcmV0dXJuIEZTTF9VU0IyX1BIWV9OT05FOwpAQCAtMzc5LDcgKzM4Myw3IEBACiAJICAgICBpKyspIHsKIAkJc3RydWN0IHJlc291cmNlIHJbMl07CiAJCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9kYXRhOwotCQl1bnNpZ25lZCBjaGFyICpwcm9wID0gTlVMTDsKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcCA9IE5VTEw7CiAKIAkJbWVtc2V0KCZyLCAwLCBzaXplb2YocikpOwogCQltZW1zZXQoJnVzYl9kYXRhLCAwLCBzaXplb2YodXNiX2RhdGEpKTsKQEAgLTM4OCw4ICszOTIsNyBAQAogCQlpZiAocmV0KQogCQkJZ290byBlcnI7CiAKLQkJclsxXS5zdGFydCA9IG5wLT5pbnRyc1swXS5saW5lOwotCQlyWzFdLmVuZCA9IG5wLT5pbnRyc1swXS5saW5lOworCQlyWzFdLnN0YXJ0ID0gclsxXS5lbmQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CiAJCXJbMV0uZmxhZ3MgPSBJT1JFU09VUkNFX0lSUTsKIAogCQl1c2JfZGV2X21waCA9CkBAIC00MjgsNyArNDMxLDcgQEAKIAkgICAgIGkrKykgewogCQlzdHJ1Y3QgcmVzb3VyY2UgclsyXTsKIAkJc3RydWN0IGZzbF91c2IyX3BsYXRmb3JtX2RhdGEgdXNiX2RhdGE7Ci0JCXVuc2lnbmVkIGNoYXIgKnByb3AgPSBOVUxMOworCQljb25zdCB1bnNpZ25lZCBjaGFyICpwcm9wID0gTlVMTDsKIAogCQltZW1zZXQoJnIsIDAsIHNpemVvZihyKSk7CiAJCW1lbXNldCgmdXNiX2RhdGEsIDAsIHNpemVvZih1c2JfZGF0YSkpOwpAQCAtNDM3LDggKzQ0MCw3IEBACiAJCWlmIChyZXQpCiAJCQlnb3RvIHVucmVnX21waDsKIAotCQlyWzFdLnN0YXJ0ID0gbnAtPmludHJzWzBdLmxpbmU7Ci0JCXJbMV0uZW5kID0gbnAtPmludHJzWzBdLmxpbmU7CisJCXJbMV0uc3RhcnQgPSByWzFdLmVuZCA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKIAkJclsxXS5mbGFncyA9IElPUkVTT1VSQ0VfSVJROwogCiAJCXVzYl9kZXZfZHIgPQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAppbmRleCBjNDMzZDNmLi41YTNkZDQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaAorKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuaApAQCAtMiw2ICsyLDggQEAKICNkZWZpbmUgX19QUENfRlNMX1NPQ19ICiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8YXNtL21tdS5oPgorCiBleHRlcm4gcGh5c19hZGRyX3QgZ2V0X2ltbXJiYXNlKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaTgyNTkuYwppbmRleCA5ODU1ODIwLi4yNmE2YTNiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2k4MjU5LmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pODI1OS5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAkueGxhdGUgPSBpODI1OV9ob3N0X3hsYXRlLAogfTsKIAotLyoqKioKKy8qKgogICogaTgyNTlfaW5pdCAtIEluaXRpYWxpemUgdGhlIGxlZ2FjeSBjb250cm9sbGVyCiAgKiBAbm9kZTogZGV2aWNlIG5vZGUgb2YgdGhlIGxlZ2FjeSBQSUMgKGNhbiBiZSBOVUxMLCBidXQgdGhlbiwgaXQgd2lsbCBtYXRjaAogICogICAgICAgIGFsbCBpbnRlcnJ1cHRzLCBzbyBiZXdhcmUpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCmluZGV4IDQ2ODAxZjUuLjAyNTFiN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jCkBAIC0xOSwxNSArMTksMTggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9pcGljLmg+Ci0jaW5jbHVkZSA8YXNtL21wYzgzeHguaD4KIAogI2luY2x1ZGUgImlwaWMuaCIKIAotc3RhdGljIHN0cnVjdCBpcGljIHBfaXBpYzsKIHN0YXRpYyBzdHJ1Y3QgaXBpYyAqIHByaW1hcnlfaXBpYzsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaXBpY19sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBpcGljX2luZm8gaXBpY19pbmZvW10gPSB7CiAJWzldID0gewpAQCAtMjA3LDcgKzIxMCw3IEBACiAJCS5wcmlvX21hc2sgPSA0LAogCX0sCiAJWzY0XSA9IHsKLQkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5wZW5kCT0gSVBJQ19TSVBOUl9MLAogCQkubWFzawk9IElQSUNfU0lNU1JfTCwKIAkJLnByaW8JPSBJUElDX1NNUFJSX0EsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKQEAgLTIxNSw3ICsyMTgsNyBAQAogCQkucHJpb19tYXNrID0gMCwKIAl9LAogCVs2NV0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gSVBJQ19TTVBSUl9BLAogCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCkBAIC0yMjMsNyArMjI2LDcgQEAKIAkJLnByaW9fbWFzayA9IDEsCiAJfSwKIAlbNjZdID0gewotCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0wsCiAJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAogCQkucHJpbwk9IElQSUNfU01QUlJfQSwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLApAQCAtMjMxLDcgKzIzNCw3IEBACiAJCS5wcmlvX21hc2sgPSAyLAogCX0sCiAJWzY3XSA9IHsKLQkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5wZW5kCT0gSVBJQ19TSVBOUl9MLAogCQkubWFzawk9IElQSUNfU0lNU1JfTCwKIAkJLnByaW8JPSBJUElDX1NNUFJSX0EsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKQEAgLTIzOSw3ICsyNDIsNyBAQAogCQkucHJpb19tYXNrID0gMywKIAl9LAogCVs2OF0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gSVBJQ19TTVBSUl9CLAogCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCkBAIC0yNDcsNyArMjUwLDcgQEAKIAkJLnByaW9fbWFzayA9IDAsCiAJfSwKIAlbNjldID0gewotCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0wsCiAJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAogCQkucHJpbwk9IElQSUNfU01QUlJfQiwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLApAQCAtMjU1LDcgKzI1OCw3IEBACiAJCS5wcmlvX21hc2sgPSAxLAogCX0sCiAJWzcwXSA9IHsKLQkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5wZW5kCT0gSVBJQ19TSVBOUl9MLAogCQkubWFzawk9IElQSUNfU0lNU1JfTCwKIAkJLnByaW8JPSBJUElDX1NNUFJSX0IsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKQEAgLTI2Myw3ICsyNjYsNyBAQAogCQkucHJpb19tYXNrID0gMiwKIAl9LAogCVs3MV0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gSVBJQ19TTVBSUl9CLAogCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCkBAIC0yNzEsOTEgKzI3NCw5MSBAQAogCQkucHJpb19tYXNrID0gMywKIAl9LAogCVs3Ml0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gMCwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAogCQkuYml0CT0gOCwKIAl9LAogCVs3M10gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gMCwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAogCQkuYml0CT0gOSwKIAl9LAogCVs3NF0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gMCwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAogCQkuYml0CT0gMTAsCiAJfSwKIAlbNzVdID0gewotCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0wsCiAJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAogCQkucHJpbwk9IDAsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKIAkJLmJpdAk9IDExLAogCX0sCiAJWzc2XSA9IHsKLQkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5wZW5kCT0gSVBJQ19TSVBOUl9MLAogCQkubWFzawk9IElQSUNfU0lNU1JfTCwKIAkJLnByaW8JPSAwLAogCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCiAJCS5iaXQJPSAxMiwKIAl9LAogCVs3N10gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gMCwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAogCQkuYml0CT0gMTMsCiAJfSwKIAlbNzhdID0gewotCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0wsCiAJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAogCQkucHJpbwk9IDAsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKIAkJLmJpdAk9IDE0LAogCX0sCiAJWzc5XSA9IHsKLQkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5wZW5kCT0gSVBJQ19TSVBOUl9MLAogCQkubWFzawk9IElQSUNfU0lNU1JfTCwKIAkJLnByaW8JPSAwLAogCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCiAJCS5iaXQJPSAxNSwKIAl9LAogCVs4MF0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gMCwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAogCQkuYml0CT0gMTYsCiAJfSwKIAlbODRdID0gewotCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0wsCiAJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAogCQkucHJpbwk9IDAsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKIAkJLmJpdAk9IDIwLAogCX0sCiAJWzg1XSA9IHsKLQkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5wZW5kCT0gSVBJQ19TSVBOUl9MLAogCQkubWFzawk9IElQSUNfU0lNU1JfTCwKIAkJLnByaW8JPSAwLAogCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCiAJCS5iaXQJPSAyMSwKIAl9LAogCVs5MF0gPSB7Ci0JCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkucGVuZAk9IElQSUNfU0lQTlJfTCwKIAkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCiAJCS5wcmlvCT0gMCwKIAkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAogCQkuYml0CT0gMjYsCiAJfSwKIAlbOTFdID0gewotCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0wsCiAJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAogCQkucHJpbwk9IDAsCiAJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKQEAgLTM3Myw3NCArMzc2LDIyMCBAQAogCW91dF9iZTMyKGJhc2UgKyAocmVnID4+IDIpLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwaWMgKiBpcGljX2Zyb21faXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGljICogaXBpY19mcm9tX2lycSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKIAlyZXR1cm4gcHJpbWFyeV9pcGljOwogfQogCi1zdGF0aWMgdm9pZCBpcGljX2VuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKKyNkZWZpbmUgaXBpY19pcnFfdG9faHcodmlycSkJKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKKworc3RhdGljIHZvaWQgaXBpY191bm1hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQogewotCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnEgLSBpcGljLT5pcnFfb2Zmc2V0OworCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycSh2aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZpcGljX2xvY2ssIGZsYWdzKTsKKwogCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzayk7CiAJdGVtcCB8PSAoMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpKTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2ssIHRlbXApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwaWNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGlwaWNfbWFza19pcnEodW5zaWduZWQgaW50IHZpcnEpCiB7Ci0Jc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlycSAtIGlwaWMtPmlycV9vZmZzZXQ7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKHZpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCiAJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKIAl0ZW1wICY9IH4oMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpKTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2ssIHRlbXApOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBpY19sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwaWNfZGlzYWJsZV9pcnFfYW5kX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgaXBpY19hY2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQogewotCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShpcnEpOwotCXVuc2lnbmVkIGludCBzcmMgPSBpcnEgLSBpcGljLT5pcnFfb2Zmc2V0OworCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycSh2aXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXBpY19pcnFfdG9faHcodmlycSk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCWlwaWNfZGlzYWJsZV9pcnEoaXJxKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXBpY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLnBlbmQpOwogCXRlbXAgfD0gKDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5wZW5kLCB0ZW1wKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBpcGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGlwaWNfbWFza19pcnFfYW5kX2Fjayh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLQlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKLQkJaXBpY19lbmFibGVfaXJxKGlycSk7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKHZpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB0ZW1wOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOworCisJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKKwl0ZW1wICY9IH4oMSA8PCAoMzEgLSBpcGljX2luZm9bc3JjXS5iaXQpKTsKKwlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLm1hc2ssIHRlbXApOworCisJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5wZW5kKTsKKwl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ucGVuZCwgdGVtcCk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGljX2xvY2ssIGZsYWdzKTsKIH0KIAotc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGlwaWMgPSB7Ci0JLnR5cGVuYW1lID0gIiBJUElDICAiLAotCS5lbmFibGUgPSBpcGljX2VuYWJsZV9pcnEsCi0JLmRpc2FibGUgPSBpcGljX2Rpc2FibGVfaXJxLAotCS5hY2sgPSBpcGljX2Rpc2FibGVfaXJxX2FuZF9hY2ssCi0JLmVuZCA9IGlwaWNfZW5kX2lycSwKK3N0YXRpYyBpbnQgaXBpY19zZXRfaXJxX3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKHZpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyh2aXJxKTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CisJdW5zaWduZWQgaW50IHZvbGQsIHZuZXcsIGVkaWJpdDsKKworCWlmIChmbG93X3R5cGUgPT0gSVJRX1RZUEVfTk9ORSkKKwkJZmxvd190eXBlID0gSVJRX1RZUEVfTEVWRUxfTE9XOworCisJLyogaXBpYyBzdXBwb3J0cyBvbmx5IGxvdyBhc3NlcnRpb24gYW5kIGhpZ2gtdG8tbG93IGNoYW5nZSBzZW5zZXMKKwkgKi8KKwlpZiAoIShmbG93X3R5cGUgJiAoSVJRX1RZUEVfTEVWRUxfTE9XIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpcGljOiBzZW5zZSB0eXBlIDB4JXggbm90IHN1cHBvcnRlZFxuIiwKKwkJCWZsb3dfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRlc2MtPnN0YXR1cyAmPSB+KElSUV9UWVBFX1NFTlNFX01BU0sgfCBJUlFfTEVWRUwpOworCWRlc2MtPnN0YXR1cyB8PSBmbG93X3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLOworCWlmIChmbG93X3R5cGUgJiBJUlFfVFlQRV9MRVZFTF9MT1cpICB7CisJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTEVWRUw7CisJCXNldF9pcnFfaGFuZGxlcih2aXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9IGVsc2UgeworCQlzZXRfaXJxX2hhbmRsZXIodmlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKKwl9CisKKwkvKiBvbmx5IEVYVCBJUlEgc2Vuc2VzIGFyZSBwcm9ncmFtbWFibGUgb24gaXBpYworCSAqIGludGVybmFsIElSUSBzZW5zZXMgYXJlIExFVkVMX0xPVworCSAqLworCWlmIChzcmMgPT0gSVBJQ19JUlFfRVhUMCkKKwkJZWRpYml0ID0gMTU7CisJZWxzZQorCQlpZiAoc3JjID49IElQSUNfSVJRX0VYVDEgJiYgc3JjIDw9IElQSUNfSVJRX0VYVDcpCisJCQllZGliaXQgPSAoMTQgLSAoc3JjIC0gSVBJQ19JUlFfRVhUMSkpOworCQllbHNlCisJCQlyZXR1cm4gKGZsb3dfdHlwZSAmIElSUV9UWVBFX0xFVkVMX0xPVykgPyAwIDogLUVJTlZBTDsKKworCXZvbGQgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TRUNOUik7CisJaWYgKChmbG93X3R5cGUgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSA9PSBJUlFfVFlQRV9FREdFX0ZBTExJTkcpIHsKKwkJdm5ldyA9IHZvbGQgfCAoMSA8PCBlZGliaXQpOworCX0gZWxzZSB7CisJCXZuZXcgPSB2b2xkICYgfigxIDw8IGVkaWJpdCk7CisJfQorCWlmICh2b2xkICE9IHZuZXcpCisJCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRUNOUiwgdm5ldyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXBpY19pcnFfY2hpcCA9IHsKKwkudHlwZW5hbWUJPSAiIElQSUMgICIsCisJLnVubWFzawkJPSBpcGljX3VubWFza19pcnEsCisJLm1hc2sJCT0gaXBpY19tYXNrX2lycSwKKwkubWFza19hY2sJPSBpcGljX21hc2tfaXJxX2FuZF9hY2ssCisJLmFjawkJPSBpcGljX2Fja19pcnEsCisJLnNldF90eXBlCT0gaXBpY19zZXRfaXJxX3R5cGUsCiB9OwogCi12b2lkIF9faW5pdCBpcGljX2luaXQocGh5c19hZGRyX3QgcGh5c19hZGRyLAotCQl1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCXVuc2lnbmVkIGludCBpcnFfb2Zmc2V0LAotCQl1bnNpZ25lZCBjaGFyICpzZW5zZXMsCi0JCXVuc2lnbmVkIGludCBzZW5zZXNfY291bnQpCitzdGF0aWMgaW50IGlwaWNfaG9zdF9tYXRjaChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKIHsKLQl1MzIgaSwgdGVtcCA9IDA7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBoLT5ob3N0X2RhdGE7CiAKLQlwcmltYXJ5X2lwaWMgPSAmcF9pcGljOwotCXByaW1hcnlfaXBpYy0+cmVncyA9IGlvcmVtYXAocGh5c19hZGRyLCBNUEM4M3h4X0lQSUNfU0laRSk7CisJLyogRXhhY3QgbWF0Y2gsIHVubGVzcyBpcGljIG5vZGUgaXMgTlVMTCAqLworCXJldHVybiBpcGljLT5vZl9ub2RlID09IE5VTEwgfHwgaXBpYy0+b2Zfbm9kZSA9PSBub2RlOworfQogCi0JcHJpbWFyeV9pcGljLT5pcnFfb2Zmc2V0ID0gaXJxX29mZnNldDsKK3N0YXRpYyBpbnQgaXBpY19ob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJIGlycV9od19udW1iZXJfdCBodykKK3sKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGgtPmhvc3RfZGF0YTsKKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXA7CiAKLQlpcGljX3dyaXRlKHByaW1hcnlfaXBpYy0+cmVncywgSVBJQ19TSUNOUiwgMHgwKTsKKwkvKiBEZWZhdWx0IGNoaXAgKi8KKwljaGlwID0gJmlwaWMtPmhjX2lycTsKKworCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsIGlwaWMpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCBjaGlwLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKworCS8qIFNldCBkZWZhdWx0IGlycSB0eXBlICovCisJc2V0X2lycV90eXBlKHZpcnEsIElSUV9UWVBFX05PTkUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXBpY19ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwgc3RydWN0IGRldmljZV9ub2RlICpjdCwKKwkJCSAgIHUzMiAqaW50c3BlYywgdW5zaWduZWQgaW50IGludHNpemUsCisJCQkgICBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCisKK3sKKwkvKiBpbnRlcnJ1cHQgc2Vuc2UgdmFsdWVzIGNvbWluZyBmcm9tIHRoZSBkZXZpY2UgdHJlZSBlcXVhbCBlaXRoZXIKKwkgKiBMRVZFTF9MT1cgKGxvdyBhc3NlcnRpb24pIG9yIEVER0VfRkFMTElORyAoaGlnaC10by1sb3cgY2hhbmdlKQorCSAqLworCSpvdXRfaHdpcnEgPSBpbnRzcGVjWzBdOworCWlmIChpbnRzaXplID4gMSkKKwkJKm91dF9mbGFncyA9IGludHNwZWNbMV07CisJZWxzZQorCQkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTk9ORTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgaXBpY19ob3N0X29wcyA9IHsKKwkubWF0Y2gJPSBpcGljX2hvc3RfbWF0Y2gsCisJLm1hcAk9IGlwaWNfaG9zdF9tYXAsCisJLnhsYXRlCT0gaXBpY19ob3N0X3hsYXRlLAorfTsKKwordm9pZCBfX2luaXQgaXBpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJdW5zaWduZWQgaW50IGZsYWdzKQoreworCXN0cnVjdCBpcGljCSppcGljOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJdTMyIHRlbXAgPSAwLCByZXQ7CisKKwlpcGljID0gYWxsb2NfYm9vdG1lbShzaXplb2Yoc3RydWN0IGlwaWMpKTsKKwlpZiAoaXBpYyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwltZW1zZXQoaXBpYywgMCwgc2l6ZW9mKHN0cnVjdCBpcGljKSk7CisJaXBpYy0+b2Zfbm9kZSA9IG5vZGUgPyBvZl9ub2RlX2dldChub2RlKSA6IE5VTEw7CisKKwlpcGljLT5pcnFob3N0ID0gaXJxX2FsbG9jX2hvc3QoSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCQkgICAgICAgTlJfSVBJQ19JTlRTLAorCQkJCSAgICAgICAmaXBpY19ob3N0X29wcywgMCk7CisJaWYgKGlwaWMtPmlycWhvc3QgPT0gTlVMTCkgeworCQlvZl9ub2RlX3B1dChub2RlKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uobm9kZSwgMCwgJnJlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuOworCisJaXBpYy0+cmVncyA9IGlvcmVtYXAocmVzLnN0YXJ0LCByZXMuZW5kIC0gcmVzLnN0YXJ0ICsgMSk7CisKKwlpcGljLT5pcnFob3N0LT5ob3N0X2RhdGEgPSBpcGljOworCWlwaWMtPmhjX2lycSA9IGlwaWNfaXJxX2NoaXA7CisKKwkvKiBpbml0IGh3ICovCisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NJQ05SLCAweDApOwogCiAJLyogZGVmYXVsdCBwcmlvcml0eSBzY2hlbWUgaXMgZ3JvdXBlZC4gSWYgc3ByZWFkIG1vZGUgaXMgcmVxdWlyZWQKIAkgKiBjb25maWd1cmUgU0lDRlIgYWNjb3JkaW5nbHkgKi8KQEAgLTQ1Myw0OSArNjAyLDM1IEBACiAJaWYgKGZsYWdzICYgSVBJQ19TUFJFQURNT0RFX01JWF9CKQogCQl0ZW1wIHw9IFNJQ0ZSX01QU0I7CiAKLQlpcGljX3dyaXRlKHByaW1hcnlfaXBpYy0+cmVncywgSVBJQ19TSUNOUiwgdGVtcCk7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBJUElDX1NJQ05SLCB0ZW1wKTsKIAogCS8qIGhhbmRsZSBNQ1Agcm91dGUgKi8KIAl0ZW1wID0gMDsKIAlpZiAoZmxhZ3MgJiBJUElDX0RJU0FCTEVfTUNQX09VVCkKIAkJdGVtcCA9IFNFUkNSX01DUFI7Ci0JaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VSQ1IsIHRlbXApOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRVJDUiwgdGVtcCk7CiAKIAkvKiBoYW5kbGUgcm91dGluZyBvZiBJUlEwIHRvIE1DUCAqLwotCXRlbXAgPSBpcGljX3JlYWQocHJpbWFyeV9pcGljLT5yZWdzLCBJUElDX1NFTVNSKTsKKwl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIElQSUNfU0VNU1IpOwogCiAJaWYgKGZsYWdzICYgSVBJQ19JUlEwX01DUCkKIAkJdGVtcCB8PSBTRU1TUl9TSVJRMDsKIAllbHNlCiAJCXRlbXAgJj0gflNFTVNSX1NJUlEwOwogCi0JaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VNU1IsIHRlbXApOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRU1TUiwgdGVtcCk7CiAKLQlmb3IgKGkgPSAwIDsgaSA8IE5SX0lQSUNfSU5UUyA7IGkrKykgewotCQlpcnFfZGVzY1tpK2lycV9vZmZzZXRdLmNoaXAgPSAmaXBpYzsKLQkJaXJxX2Rlc2NbaStpcnFfb2Zmc2V0XS5zdGF0dXMgPSBJUlFfTEVWRUw7Ci0JfQorCXByaW1hcnlfaXBpYyA9IGlwaWM7CisJaXJxX3NldF9kZWZhdWx0X2hvc3QocHJpbWFyeV9pcGljLT5pcnFob3N0KTsKIAotCXRlbXAgPSAwOwotCWZvciAoaSA9IDAgOyBpIDwgc2Vuc2VzX2NvdW50IDsgaSsrKSB7Ci0JCWlmICgoc2Vuc2VzW2ldICYgSVJRX1NFTlNFX01BU0spID09IElSUV9TRU5TRV9FREdFKSB7Ci0JCQl0ZW1wIHw9IDEgPDwgKDE1IC0gaSk7Ci0JCQlpZiAoaSAhPSAwKQotCQkJCWlycV9kZXNjW2kgKyBpcnFfb2Zmc2V0ICsgTVBDODN4eF9JUlFfRVhUMSAtIDFdLnN0YXR1cyA9IDA7Ci0JCQllbHNlCi0JCQkJaXJxX2Rlc2NbaXJxX29mZnNldCArIE1QQzgzeHhfSVJRX0VYVDBdLnN0YXR1cyA9IDA7Ci0JCX0KLQl9Ci0JaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VDTlIsIHRlbXApOwotCi0JcHJpbnRrICgiSVBJQyAoJWQgSVJRIHNvdXJjZXMsICVkIEV4dGVybmFsIElSUXMpIGF0ICVwXG4iLCBOUl9JUElDX0lOVFMsCi0JCQlzZW5zZXNfY291bnQsIHByaW1hcnlfaXBpYy0+cmVncyk7CisJcHJpbnRrICgiSVBJQyAoJWQgSVJRIHNvdXJjZXMpIGF0ICVwXG4iLCBOUl9JUElDX0lOVFMsCisJCQlwcmltYXJ5X2lwaWMtPnJlZ3MpOwogfQogCi1pbnQgaXBpY19zZXRfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHByaW9yaXR5KQoraW50IGlwaWNfc2V0X3ByaW9yaXR5KHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpCiB7Ci0Jc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGlycSk7Ci0JdW5zaWduZWQgaW50IHNyYyA9IGlycSAtIGlwaWMtPmlycV9vZmZzZXQ7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKHZpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcGljX2lycV90b19odyh2aXJxKTsKIAl1MzIgdGVtcDsKIAogCWlmIChwcmlvcml0eSA+IDcpCkBAIC01MjAsMTAgKzY1NSwxMCBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGlwaWNfc2V0X2hpZ2hlc3RfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSkKK3ZvaWQgaXBpY19zZXRfaGlnaGVzdF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgdmlycSkKIHsKLQlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgc3JjID0gaXJxIC0gaXBpYy0+aXJxX29mZnNldDsKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEodmlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlwaWNfaXJxX3RvX2h3KHZpcnEpOwogCXUzMiB0ZW1wOwogCiAJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBJUElDX1NJQ0ZSKTsKQEAgLTUzNywzNyArNjcyLDEwIEBACiAKIHZvaWQgaXBpY19zZXRfZGVmYXVsdF9wcmlvcml0eSh2b2lkKQogewotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1RTRUMxX1RYLCAwKTsKLQlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9UU0VDMV9SWCwgMSk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfVFNFQzFfRVJST1IsIDIpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1RTRUMyX1RYLCAzKTsKLQlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9UU0VDMl9SWCwgNCk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfVFNFQzJfRVJST1IsIDUpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1VTQjJfRFIsIDYpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1VTQjJfTVBILCA3KTsKLQotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1VBUlQxLCAwKTsKLQlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9VQVJUMiwgMSk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfU0VDMiwgMik7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfSUlDMSwgNSk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfSUlDMiwgNik7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfU1BJLCA3KTsKLQlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9SVENfU0VDLCAwKTsKLQlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9QSVQsIDEpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1BDSTEsIDIpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1BDSTIsIDMpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDAsIDQpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDEsIDUpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDIsIDYpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDMsIDcpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1JUQ19BTFIsIDApOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX01VLCAxKTsKLQlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9TQkEsIDIpOwotCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0RNQSwgMyk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNCwgNCk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNSwgNSk7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNiwgNik7Ci0JaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNywgNyk7CisJaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0lQUlJfQSwgSVBJQ19TSVBSUl9BX0RFRkFVTFQpOworCWlwaWNfd3JpdGUocHJpbWFyeV9pcGljLT5yZWdzLCBJUElDX1NJUFJSX0QsIElQSUNfU0lQUlJfRF9ERUZBVUxUKTsKKwlpcGljX3dyaXRlKHByaW1hcnlfaXBpYy0+cmVncywgSVBJQ19TTVBSUl9BLCBJUElDX1NNUFJSX0FfREVGQVVMVCk7CisJaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU01QUlJfQiwgSVBJQ19TTVBSUl9CX0RFRkFVTFQpOwogfQogCiB2b2lkIGlwaWNfZW5hYmxlX21jcChlbnVtIGlwaWNfbWNwX2lycSBtY3BfaXJxKQpAQCAtNjAwLDE3ICs3MDgsMjAgQEAKIAlpcGljX3dyaXRlKHByaW1hcnlfaXBpYy0+cmVncywgSVBJQ19TRVJNUiwgbWFzayk7CiB9CiAKLS8qIFJldHVybiBhbiBpbnRlcnJ1cHQgdmVjdG9yIG9yIC0xIGlmIG5vIGludGVycnVwdCBpcyBwZW5kaW5nLiAqLwotaW50IGlwaWNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncykKKy8qIFJldHVybiBhbiBpbnRlcnJ1cHQgdmVjdG9yIG9yIE5PX0lSUSBpZiBubyBpbnRlcnJ1cHQgaXMgcGVuZGluZy4gKi8KK3Vuc2lnbmVkIGludCBpcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGlycTsKIAotCWlycSA9IGlwaWNfcmVhZChwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0lWQ1IpICYgMHg3ZjsKKwlCVUdfT04ocHJpbWFyeV9pcGljID09IE5VTEwpOworCisjZGVmaW5lIElQSUNfU0lWQ1JfVkVDVE9SX01BU0sJMHg3ZgorCWlycSA9IGlwaWNfcmVhZChwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0lWQ1IpICYgSVBJQ19TSVZDUl9WRUNUT1JfTUFTSzsKIAogCWlmIChpcnEgPT0gMCkgICAgLyogMCAtLT4gbm8gaXJxIGlzIHBlbmRpbmcgKi8KLQkJaXJxID0gLTE7CisJCXJldHVybiBOT19JUlE7CiAKLQlyZXR1cm4gaXJxOworCXJldHVybiBpcnFfbGluZWFyX3Jldm1hcChwcmltYXJ5X2lwaWMtPmlycWhvc3QsIGlycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIGlwaWNfc3lzY2xhc3MgPSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2lwaWMuaCBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5oCmluZGV4IGE2MGM5ZDEuLmMyOGU1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5oCkBAIC0xNSw3ICsxNSwxOCBAQAogCiAjaW5jbHVkZSA8YXNtL2lwaWMuaD4KIAotI2RlZmluZSBNUEM4M3h4X0lQSUNfU0laRQkoMHgwMDEwMCkKKyNkZWZpbmUgTlJfSVBJQ19JTlRTIDEyOAorCisvKiBFeHRlcm5hbCBJUlFTICovCisjZGVmaW5lIElQSUNfSVJRX0VYVDAgNDgKKyNkZWZpbmUgSVBJQ19JUlFfRVhUMSAxNworI2RlZmluZSBJUElDX0lSUV9FWFQ3IDIzCisKKy8qIERlZmF1bHQgUHJpb3JpdHkgUmVnaXN0ZXJzICovCisjZGVmaW5lIElQSUNfU0lQUlJfQV9ERUZBVUxUIDB4MDUzMDk3NzAKKyNkZWZpbmUgSVBJQ19TSVBSUl9EX0RFRkFVTFQgMHgwNTMwOTc3MAorI2RlZmluZSBJUElDX1NNUFJSX0FfREVGQVVMVCAweDA1MzA5NzcwCisjZGVmaW5lIElQSUNfU01QUlJfQl9ERUZBVUxUIDB4MDUzMDk3NzAKIAogLyogU3lzdGVtIEdsb2JhbCBJbnRlcnJ1cHQgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLwogI2RlZmluZQlTSUNGUl9JUFNBCTB4MDAwMTAwMDAKQEAgLTMxLDcgKzQyLDE1IEBACiAKIHN0cnVjdCBpcGljIHsKIAl2b2xhdGlsZSB1MzIgX19pb21lbQkqcmVnczsKLQl1bnNpZ25lZCBpbnQJCWlycV9vZmZzZXQ7CisKKwkvKiBUaGUgcmVtYXBwZXIgZm9yIHRoaXMgSVBJQyAqLworCXN0cnVjdCBpcnFfaG9zdAkJKmlycWhvc3Q7CisKKwkvKiBUaGUgImxpbnV4IiBjb250cm9sbGVyIHN0cnVjdCAqLworCXN0cnVjdCBpcnFfY2hpcAkJaGNfaXJxOworCisJLyogVGhlIGRldmljZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAqLworCXN0cnVjdCBkZXZpY2Vfbm9kZQkqb2Zfbm9kZTsKIH07CiAKIHN0cnVjdCBpcGljX2luZm8gewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tbWlvX252cmFtLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwppbmRleCA2MTUzNTBkLi5mZjIzZjVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L21taW9fbnZyYW0uYwpAQCAtODAsNyArODAsNyBAQAogaW50IF9faW5pdCBtbWlvX252cmFtX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm52cmFtX25vZGU7Ci0JdW5zaWduZWQgbG9uZyAqYnVmZmVyOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmJ1ZmZlcjsKIAlpbnQgcHJvcGxlbjsKIAl1bnNpZ25lZCBsb25nIG52cmFtX2FkZHI7CiAJaW50IHJldDsKQEAgLTkxLDcgKzkxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSAtRUlPOwotCWJ1ZmZlciA9ICh1bnNpZ25lZCBsb25nICopZ2V0X3Byb3BlcnR5KG52cmFtX25vZGUsICJyZWciLCAmcHJvcGxlbik7CisJYnVmZmVyID0gZ2V0X3Byb3BlcnR5KG52cmFtX25vZGUsICJyZWciLCAmcHJvcGxlbik7CiAJaWYgKHByb3BsZW4gIT0gMipzaXplb2YodW5zaWduZWQgbG9uZykpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L21waWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCmluZGV4IDZlMDI4MWEuLmI2MDQ5MjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jCkBAIC01NCw2ICs1NCw5NCBAQAogI2VuZGlmCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NUElDX1dFSVJECitzdGF0aWMgdTMyIG1waWNfaW5mb3NbXVtNUElDX0lEWF9FTkRdID0geworCVswXSA9IHsJLyogT3JpZ2luYWwgT3BlblBJQyBjb21wYXRpYmxlIE1QSUMgKi8KKwkJTVBJQ19HUkVHX0JBU0UsCisJCU1QSUNfR1JFR19GRUFUVVJFXzAsCisJCU1QSUNfR1JFR19HTE9CQUxfQ09ORl8wLAorCQlNUElDX0dSRUdfVkVORE9SX0lELAorCQlNUElDX0dSRUdfSVBJX1ZFQ1RPUl9QUklfMCwKKwkJTVBJQ19HUkVHX0lQSV9TVFJJREUsCisJCU1QSUNfR1JFR19TUFVSSU9VUywKKwkJTVBJQ19HUkVHX1RJTUVSX0ZSRVEsCisKKwkJTVBJQ19USU1FUl9CQVNFLAorCQlNUElDX1RJTUVSX1NUUklERSwKKwkJTVBJQ19USU1FUl9DVVJSRU5UX0NOVCwKKwkJTVBJQ19USU1FUl9CQVNFX0NOVCwKKwkJTVBJQ19USU1FUl9WRUNUT1JfUFJJLAorCQlNUElDX1RJTUVSX0RFU1RJTkFUSU9OLAorCisJCU1QSUNfQ1BVX0JBU0UsCisJCU1QSUNfQ1BVX1NUUklERSwKKwkJTVBJQ19DUFVfSVBJX0RJU1BBVENIXzAsCisJCU1QSUNfQ1BVX0lQSV9ESVNQQVRDSF9TVFJJREUsCisJCU1QSUNfQ1BVX0NVUlJFTlRfVEFTS19QUkksCisJCU1QSUNfQ1BVX1dIT0FNSSwKKwkJTVBJQ19DUFVfSU5UQUNLLAorCQlNUElDX0NQVV9FT0ksCisKKwkJTVBJQ19JUlFfQkFTRSwKKwkJTVBJQ19JUlFfU1RSSURFLAorCQlNUElDX0lSUV9WRUNUT1JfUFJJLAorCQlNUElDX1ZFQ1BSSV9WRUNUT1JfTUFTSywKKwkJTVBJQ19WRUNQUklfUE9MQVJJVFlfUE9TSVRJVkUsCisJCU1QSUNfVkVDUFJJX1BPTEFSSVRZX05FR0FUSVZFLAorCQlNUElDX1ZFQ1BSSV9TRU5TRV9MRVZFTCwKKwkJTVBJQ19WRUNQUklfU0VOU0VfRURHRSwKKwkJTVBJQ19WRUNQUklfUE9MQVJJVFlfTUFTSywKKwkJTVBJQ19WRUNQUklfU0VOU0VfTUFTSywKKwkJTVBJQ19JUlFfREVTVElOQVRJT04KKwl9LAorCVsxXSA9IHsJLyogVHNpMTA4LzEwOSBQSUMgKi8KKwkJVFNJMTA4X0dSRUdfQkFTRSwKKwkJVFNJMTA4X0dSRUdfRkVBVFVSRV8wLAorCQlUU0kxMDhfR1JFR19HTE9CQUxfQ09ORl8wLAorCQlUU0kxMDhfR1JFR19WRU5ET1JfSUQsCisJCVRTSTEwOF9HUkVHX0lQSV9WRUNUT1JfUFJJXzAsCisJCVRTSTEwOF9HUkVHX0lQSV9TVFJJREUsCisJCVRTSTEwOF9HUkVHX1NQVVJJT1VTLAorCQlUU0kxMDhfR1JFR19USU1FUl9GUkVRLAorCisJCVRTSTEwOF9USU1FUl9CQVNFLAorCQlUU0kxMDhfVElNRVJfU1RSSURFLAorCQlUU0kxMDhfVElNRVJfQ1VSUkVOVF9DTlQsCisJCVRTSTEwOF9USU1FUl9CQVNFX0NOVCwKKwkJVFNJMTA4X1RJTUVSX1ZFQ1RPUl9QUkksCisJCVRTSTEwOF9USU1FUl9ERVNUSU5BVElPTiwKKworCQlUU0kxMDhfQ1BVX0JBU0UsCisJCVRTSTEwOF9DUFVfU1RSSURFLAorCQlUU0kxMDhfQ1BVX0lQSV9ESVNQQVRDSF8wLAorCQlUU0kxMDhfQ1BVX0lQSV9ESVNQQVRDSF9TVFJJREUsCisJCVRTSTEwOF9DUFVfQ1VSUkVOVF9UQVNLX1BSSSwKKwkJVFNJMTA4X0NQVV9XSE9BTUksCisJCVRTSTEwOF9DUFVfSU5UQUNLLAorCQlUU0kxMDhfQ1BVX0VPSSwKKworCQlUU0kxMDhfSVJRX0JBU0UsCisJCVRTSTEwOF9JUlFfU1RSSURFLAorCQlUU0kxMDhfSVJRX1ZFQ1RPUl9QUkksCisJCVRTSTEwOF9WRUNQUklfVkVDVE9SX01BU0ssCisJCVRTSTEwOF9WRUNQUklfUE9MQVJJVFlfUE9TSVRJVkUsCisJCVRTSTEwOF9WRUNQUklfUE9MQVJJVFlfTkVHQVRJVkUsCisJCVRTSTEwOF9WRUNQUklfU0VOU0VfTEVWRUwsCisJCVRTSTEwOF9WRUNQUklfU0VOU0VfRURHRSwKKwkJVFNJMTA4X1ZFQ1BSSV9QT0xBUklUWV9NQVNLLAorCQlUU0kxMDhfVkVDUFJJX1NFTlNFX01BU0ssCisJCVRTSTEwOF9JUlFfREVTVElOQVRJT04KKwl9LAorfTsKKworI2RlZmluZSBNUElDX0lORk8obmFtZSkgbXBpYy0+aHdfc2V0W01QSUNfSURYXyMjbmFtZV0KKworI2Vsc2UgLyogQ09ORklHX01QSUNfV0VJUkQgKi8KKworI2RlZmluZSBNUElDX0lORk8obmFtZSkgTVBJQ18jI25hbWUKKworI2VuZGlmIC8qIENPTkZJR19NUElDX1dFSVJEICovCisKIC8qCiAgKiBSZWdpc3RlciBhY2Nlc3NvciBmdW5jdGlvbnMKICAqLwpAQCAtODAsNyArMTY4LDggQEAKIHN0YXRpYyBpbmxpbmUgdTMyIF9tcGljX2lwaV9yZWFkKHN0cnVjdCBtcGljICptcGljLCB1bnNpZ25lZCBpbnQgaXBpKQogewogCXVuc2lnbmVkIGludCBiZSA9IChtcGljLT5mbGFncyAmIE1QSUNfQklHX0VORElBTikgIT0gMDsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gTVBJQ19HUkVHX0lQSV9WRUNUT1JfUFJJXzAgKyAoaXBpICogMHgxMCk7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IE1QSUNfSU5GTyhHUkVHX0lQSV9WRUNUT1JfUFJJXzApICsKKwkJCSAgICAgIChpcGkgKiBNUElDX0lORk8oR1JFR19JUElfU1RSSURFKSk7CiAKIAlpZiAobXBpYy0+ZmxhZ3MgJiBNUElDX0JST0tFTl9JUEkpCiAJCWJlID0gIWJlOwpAQCAtODksNyArMTc4LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9tcGljX2lwaV93cml0ZShzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IGlwaSwgdTMyIHZhbHVlKQogewotCXVuc2lnbmVkIGludCBvZmZzZXQgPSBNUElDX0dSRUdfSVBJX1ZFQ1RPUl9QUklfMCArIChpcGkgKiAweDEwKTsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gTVBJQ19JTkZPKEdSRUdfSVBJX1ZFQ1RPUl9QUklfMCkgKworCQkJICAgICAgKGlwaSAqIE1QSUNfSU5GTyhHUkVHX0lQSV9TVFJJREUpKTsKIAogCV9tcGljX3dyaXRlKG1waWMtPmZsYWdzICYgTVBJQ19CSUdfRU5ESUFOLCBtcGljLT5ncmVncywgb2Zmc2V0LCB2YWx1ZSk7CiB9CkBAIC0xMjAsNyArMjEwLDcgQEAKIAl1bnNpZ25lZCBpbnQJaWR4ID0gc3JjX25vICYgbXBpYy0+aXN1X21hc2s7CiAKIAlyZXR1cm4gX21waWNfcmVhZChtcGljLT5mbGFncyAmIE1QSUNfQklHX0VORElBTiwgbXBpYy0+aXN1c1tpc3VdLAotCQkJICByZWcgKyAoaWR4ICogTVBJQ19JUlFfU1RSSURFKSk7CisJCQkgIHJlZyArIChpZHggKiBNUElDX0lORk8oSVJRX1NUUklERSkpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9tcGljX2lycV93cml0ZShzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IHNyY19ubywKQEAgLTEzMCw3ICsyMjAsNyBAQAogCXVuc2lnbmVkIGludAlpZHggPSBzcmNfbm8gJiBtcGljLT5pc3VfbWFzazsKIAogCV9tcGljX3dyaXRlKG1waWMtPmZsYWdzICYgTVBJQ19CSUdfRU5ESUFOLCBtcGljLT5pc3VzW2lzdV0sCi0JCSAgICByZWcgKyAoaWR4ICogTVBJQ19JUlFfU1RSSURFKSwgdmFsdWUpOworCQkgICAgcmVnICsgKGlkeCAqIE1QSUNfSU5GTyhJUlFfU1RSSURFKSksIHZhbHVlKTsKIH0KIAogI2RlZmluZSBtcGljX3JlYWQoYixyKQkJX21waWNfcmVhZChtcGljLT5mbGFncyAmIE1QSUNfQklHX0VORElBTiwoYiksKHIpKQpAQCAtMTU2LDggKzI0Niw4IEBACiB7CiAJdTMyIHI7CiAKLQltcGljX3dyaXRlKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfSVBJX1ZFQ1RPUl9QUklfMCwgTVBJQ19WRUNQUklfTUFTSyk7Ci0JciA9IG1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19HUkVHX0lQSV9WRUNUT1JfUFJJXzApOworCW1waWNfd3JpdGUobXBpYy0+Z3JlZ3MsIE1QSUNfSU5GTyhHUkVHX0lQSV9WRUNUT1JfUFJJXzApLCBNUElDX1ZFQ1BSSV9NQVNLKTsKKwlyID0gbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0lORk8oR1JFR19JUElfVkVDVE9SX1BSSV8wKSk7CiAKIAlpZiAociA9PSBsZTMyX3RvX2NwdShNUElDX1ZFQ1BSSV9NQVNLKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJtcGljOiBEZXRlY3RlZCByZXZlcnNlZCBJUEkgcmVnaXN0ZXJzXG4iKTsKQEAgLTM5NCw4ICs0ODQsOCBAQAogLyogU2VuZCBhbiBFT0kgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBtcGljX2VvaShzdHJ1Y3QgbXBpYyAqbXBpYykKIHsKLQltcGljX2NwdV93cml0ZShNUElDX0NQVV9FT0ksIDApOwotCSh2b2lkKW1waWNfY3B1X3JlYWQoTVBJQ19DUFVfV0hPQU1JKTsKKwltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0VPSSksIDApOworCSh2b2lkKW1waWNfY3B1X3JlYWQoTVBJQ19JTkZPKENQVV9XSE9BTUkpKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTQxOSw4ICs1MDksOCBAQAogCiAJREJHKCIlcDogJXM6IGVuYWJsZV9pcnE6ICVkIChzcmMgJWQpXG4iLCBtcGljLCBtcGljLT5uYW1lLCBpcnEsIHNyYyk7CiAKLQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkksCi0JCSAgICAgICBtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JUlFfVkVDVE9SX1BSSSkgJgorCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSwKKwkJICAgICAgIG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpKSAmCiAJCSAgICAgICB+TVBJQ19WRUNQUklfTUFTSyk7CiAJLyogbWFrZSBzdXJlIG1hc2sgZ2V0cyB0byBjb250cm9sbGVyIGJlZm9yZSB3ZSByZXR1cm4gdG8gdXNlciAqLwogCWRvIHsKQEAgLTQyOCw3ICs1MTgsNyBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJtcGljX2VuYWJsZV9pcnEgdGltZW91dFxuIik7CiAJCQlicmVhazsKIAkJfQotCX0gd2hpbGUobXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkkpICYgTVBJQ19WRUNQUklfTUFTSyk7CisJfSB3aGlsZShtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSkgJiBNUElDX1ZFQ1BSSV9NQVNLKTsKIH0KIAogc3RhdGljIHZvaWQgbXBpY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtNDM5LDggKzUyOSw4IEBACiAKIAlEQkcoIiVzOiBkaXNhYmxlX2lycTogJWQgKHNyYyAlZClcbiIsIG1waWMtPm5hbWUsIGlycSwgc3JjKTsKIAotCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JUlFfVkVDVE9SX1BSSSwKLQkJICAgICAgIG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lSUV9WRUNUT1JfUFJJKSB8CisJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLAorCQkgICAgICAgbXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpIHwKIAkJICAgICAgIE1QSUNfVkVDUFJJX01BU0spOwogCiAJLyogbWFrZSBzdXJlIG1hc2sgZ2V0cyB0byBjb250cm9sbGVyIGJlZm9yZSB3ZSByZXR1cm4gdG8gdXNlciAqLwpAQCAtNDQ5LDcgKzUzOSw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIm1waWNfZW5hYmxlX2lycSB0aW1lb3V0XG4iKTsKIAkJCWJyZWFrOwogCQl9Ci0JfSB3aGlsZSghKG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lSUV9WRUNUT1JfUFJJKSAmIE1QSUNfVkVDUFJJX01BU0spKTsKKwl9IHdoaWxlKCEobXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpICYgTVBJQ19WRUNQUklfTUFTSykpOwogfQogCiBzdGF0aWMgdm9pZCBtcGljX2VuZF9pcnEodW5zaWduZWQgaW50IGlycSkKQEAgLTU2MCwyNCArNjUwLDI4IEBACiAKIAljcHVzX2FuZCh0bXAsIGNwdW1hc2ssIGNwdV9vbmxpbmVfbWFwKTsKIAotCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JUlFfREVTVElOQVRJT04sCisJbXBpY19pcnFfd3JpdGUoc3JjLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwKIAkJICAgICAgIG1waWNfcGh5c21hc2soY3B1c19hZGRyKHRtcClbMF0pKTsJCiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXBpY190eXBlX3RvX3ZlY3ByaSh1bnNpZ25lZCBpbnQgdHlwZSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXBpY190eXBlX3RvX3ZlY3ByaShzdHJ1Y3QgbXBpYyAqbXBpYywgdW5zaWduZWQgaW50IHR5cGUpCiB7CiAJLyogTm93IGNvbnZlcnQgc2Vuc2UgdmFsdWUgKi8KIAlzd2l0Y2godHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0spIHsKIAljYXNlIElSUV9UWVBFX0VER0VfUklTSU5HOgotCQlyZXR1cm4gTVBJQ19WRUNQUklfU0VOU0VfRURHRSB8IE1QSUNfVkVDUFJJX1BPTEFSSVRZX1BPU0lUSVZFOworCQlyZXR1cm4gTVBJQ19JTkZPKFZFQ1BSSV9TRU5TRV9FREdFKSB8CisJCSAgICAgICBNUElDX0lORk8oVkVDUFJJX1BPTEFSSVRZX1BPU0lUSVZFKTsKIAljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKIAljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKLQkJcmV0dXJuIE1QSUNfVkVDUFJJX1NFTlNFX0VER0UgfCBNUElDX1ZFQ1BSSV9QT0xBUklUWV9ORUdBVElWRTsKKwkJcmV0dXJuIE1QSUNfSU5GTyhWRUNQUklfU0VOU0VfRURHRSkgfAorCQkgICAgICAgTVBJQ19JTkZPKFZFQ1BSSV9QT0xBUklUWV9ORUdBVElWRSk7CiAJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgotCQlyZXR1cm4gTVBJQ19WRUNQUklfU0VOU0VfTEVWRUwgfCBNUElDX1ZFQ1BSSV9QT0xBUklUWV9QT1NJVElWRTsKKwkJcmV0dXJuIE1QSUNfSU5GTyhWRUNQUklfU0VOU0VfTEVWRUwpIHwKKwkJICAgICAgIE1QSUNfSU5GTyhWRUNQUklfUE9MQVJJVFlfUE9TSVRJVkUpOwogCWNhc2UgSVJRX1RZUEVfTEVWRUxfTE9XOgogCWRlZmF1bHQ6Ci0JCXJldHVybiBNUElDX1ZFQ1BSSV9TRU5TRV9MRVZFTCB8IE1QSUNfVkVDUFJJX1BPTEFSSVRZX05FR0FUSVZFOworCQlyZXR1cm4gTVBJQ19JTkZPKFZFQ1BSSV9TRU5TRV9MRVZFTCkgfAorCQkgICAgICAgTVBJQ19JTkZPKFZFQ1BSSV9QT0xBUklUWV9ORUdBVElWRSk7CiAJfQogfQogCkBAIC02MDksMTMgKzcwMywxNCBAQAogCQl2ZWNwcmkgPSBNUElDX1ZFQ1BSSV9QT0xBUklUWV9QT1NJVElWRSB8CiAJCQlNUElDX1ZFQ1BSSV9TRU5TRV9FREdFOwogCWVsc2UKLQkJdmVjcHJpID0gbXBpY190eXBlX3RvX3ZlY3ByaShmbG93X3R5cGUpOworCQl2ZWNwcmkgPSBtcGljX3R5cGVfdG9fdmVjcHJpKG1waWMsIGZsb3dfdHlwZSk7CiAKLQl2b2xkID0gbXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkkpOwotCXZuZXcgPSB2b2xkICYgfihNUElDX1ZFQ1BSSV9QT0xBUklUWV9NQVNLIHwgTVBJQ19WRUNQUklfU0VOU0VfTUFTSyk7CisJdm9sZCA9IG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpKTsKKwl2bmV3ID0gdm9sZCAmIH4oTVBJQ19JTkZPKFZFQ1BSSV9QT0xBUklUWV9NQVNLKSB8CisJCQlNUElDX0lORk8oVkVDUFJJX1NFTlNFX01BU0spKTsKIAl2bmV3IHw9IHZlY3ByaTsKIAlpZiAodm9sZCAhPSB2bmV3KQotCQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkksIHZuZXcpOworCQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSksIHZuZXcpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03OTgsMTcgKzg5MywyMiBAQAogCW1waWMtPmlycV9jb3VudCA9IGlycV9jb3VudDsKIAltcGljLT5udW1fc291cmNlcyA9IDA7IC8qIHNvIGZhciAqLwogCisjaWZkZWYgQ09ORklHX01QSUNfV0VJUkQKKwltcGljLT5od19zZXQgPSBtcGljX2luZm9zW01QSUNfR0VUX1JFR1NFVChmbGFncyldOworI2VuZGlmCisKIAkvKiBNYXAgdGhlIGdsb2JhbCByZWdpc3RlcnMgKi8KLQltcGljLT5ncmVncyA9IGlvcmVtYXAocGh5c19hZGRyICsgTVBJQ19HUkVHX0JBU0UsIDB4MTAwMCk7Ci0JbXBpYy0+dG1yZWdzID0gbXBpYy0+Z3JlZ3MgKyAoKE1QSUNfVElNRVJfQkFTRSAtIE1QSUNfR1JFR19CQVNFKSA+PiAyKTsKKwltcGljLT5ncmVncyA9IGlvcmVtYXAocGh5c19hZGRyICsgTVBJQ19JTkZPKEdSRUdfQkFTRSksIDB4MTAwMCk7CisJbXBpYy0+dG1yZWdzID0gbXBpYy0+Z3JlZ3MgKworCQkgICAgICAgKChNUElDX0lORk8oVElNRVJfQkFTRSkgLSBNUElDX0lORk8oR1JFR19CQVNFKSkgPj4gMik7CiAJQlVHX09OKG1waWMtPmdyZWdzID09IE5VTEwpOwogCiAJLyogUmVzZXQgKi8KIAlpZiAoZmxhZ3MgJiBNUElDX1dBTlRTX1JFU0VUKSB7Ci0JCW1waWNfd3JpdGUobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8wLAotCQkJICAgbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMCkKKwkJbXBpY193cml0ZShtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfR0xPQkFMX0NPTkZfMCksCisJCQkgICBtcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfSU5GTyhHUkVHX0dMT0JBTF9DT05GXzApKQogCQkJICAgfCBNUElDX0dSRUdfR0NPTkZfUkVTRVQpOwotCQl3aGlsZSggbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfR0xPQkFMX0NPTkZfMCkKKwkJd2hpbGUoIG1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfR0xPQkFMX0NPTkZfMCkpCiAJCSAgICAgICAmIE1QSUNfR1JFR19HQ09ORl9SRVNFVCkKIAkJCW1iKCk7CiAJfQpAQCAtODE3LDcgKzkxNyw3IEBACiAJICogTVBJQ3MsIG51bSBzb3VyY2VzIGFzIHdlbGwuIE9uIElTVSBNUElDcywgc291cmNlcyBhcmUgY291bnRlZAogCSAqIGFzIElTVXMgYXJlIGFkZGVkCiAJICovCi0JcmVnID0gbXBpY19yZWFkKG1waWMtPmdyZWdzLCBNUElDX0dSRUdfRkVBVFVSRV8wKTsKKwlyZWcgPSBtcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfSU5GTyhHUkVHX0ZFQVRVUkVfMCkpOwogCW1waWMtPm51bV9jcHVzID0gKChyZWcgJiBNUElDX0dSRUdfRkVBVFVSRV9MQVNUX0NQVV9NQVNLKQogCQkJICA+PiBNUElDX0dSRUdfRkVBVFVSRV9MQVNUX0NQVV9TSElGVCkgKyAxOwogCWlmIChpc3Vfc2l6ZSA9PSAwKQpAQCAtODI2LDE2ICs5MjYsMTYgQEAKIAogCS8qIE1hcCB0aGUgcGVyLUNQVSByZWdpc3RlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbXBpYy0+bnVtX2NwdXM7IGkrKykgewotCQltcGljLT5jcHVyZWdzW2ldID0gaW9yZW1hcChwaHlzX2FkZHIgKyBNUElDX0NQVV9CQVNFICsKLQkJCQkJICAgaSAqIE1QSUNfQ1BVX1NUUklERSwgMHgxMDAwKTsKKwkJbXBpYy0+Y3B1cmVnc1tpXSA9IGlvcmVtYXAocGh5c19hZGRyICsgTVBJQ19JTkZPKENQVV9CQVNFKSArCisJCQkJCSAgIGkgKiBNUElDX0lORk8oQ1BVX1NUUklERSksIDB4MTAwMCk7CiAJCUJVR19PTihtcGljLT5jcHVyZWdzW2ldID09IE5VTEwpOwogCX0KIAogCS8qIEluaXRpYWxpemUgbWFpbiBJU1UgaWYgbm9uZSBwcm92aWRlZCAqLwogCWlmIChtcGljLT5pc3Vfc2l6ZSA9PSAwKSB7CiAJCW1waWMtPmlzdV9zaXplID0gbXBpYy0+bnVtX3NvdXJjZXM7Ci0JCW1waWMtPmlzdXNbMF0gPSBpb3JlbWFwKHBoeXNfYWRkciArIE1QSUNfSVJRX0JBU0UsCi0JCQkJCU1QSUNfSVJRX1NUUklERSAqIG1waWMtPmlzdV9zaXplKTsKKwkJbXBpYy0+aXN1c1swXSA9IGlvcmVtYXAocGh5c19hZGRyICsgTVBJQ19JTkZPKElSUV9CQVNFKSwKKwkJCQkJTVBJQ19JTkZPKElSUV9TVFJJREUpICogbXBpYy0+aXN1X3NpemUpOwogCQlCVUdfT04obXBpYy0+aXN1c1swXSA9PSBOVUxMKTsKIAl9CiAJbXBpYy0+aXN1X3NoaWZ0ID0gMSArIF9faWxvZzIobXBpYy0+aXN1X3NpemUgLSAxKTsKQEAgLTg3OSw3ICs5NzksOCBAQAogCiAJQlVHX09OKGlzdV9udW0gPj0gTVBJQ19NQVhfSVNVKTsKIAotCW1waWMtPmlzdXNbaXN1X251bV0gPSBpb3JlbWFwKHBoeXNfYWRkciwgTVBJQ19JUlFfU1RSSURFICogbXBpYy0+aXN1X3NpemUpOworCW1waWMtPmlzdXNbaXN1X251bV0gPSBpb3JlbWFwKHBoeXNfYWRkciwKKwkJCQkgICAgICBNUElDX0lORk8oSVJRX1NUUklERSkgKiBtcGljLT5pc3Vfc2l6ZSk7CiAJaWYgKChpc3VfZmlyc3QgKyBtcGljLT5pc3Vfc2l6ZSkgPiBtcGljLT5udW1fc291cmNlcykKIAkJbXBpYy0+bnVtX3NvdXJjZXMgPSBpc3VfZmlyc3QgKyBtcGljLT5pc3Vfc2l6ZTsKIH0KQEAgLTkwNCwxNCArMTAwNSwxNiBAQAogCXByaW50ayhLRVJOX0lORk8gIm1waWM6IEluaXRpYWxpemluZyBmb3IgJWQgc291cmNlc1xuIiwgbXBpYy0+bnVtX3NvdXJjZXMpOwogCiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIG1heCAqLwotCW1waWNfY3B1X3dyaXRlKE1QSUNfQ1BVX0NVUlJFTlRfVEFTS19QUkksIDB4Zik7CisJbXBpY19jcHVfd3JpdGUoTVBJQ19JTkZPKENQVV9DVVJSRU5UX1RBU0tfUFJJKSwgMHhmKTsKIAogCS8qIEluaXRpYWxpemUgdGltZXJzOiBqdXN0IGRpc2FibGUgdGhlbSBhbGwgKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCW1waWNfd3JpdGUobXBpYy0+dG1yZWdzLAotCQkJICAgaSAqIE1QSUNfVElNRVJfU1RSSURFICsgTVBJQ19USU1FUl9ERVNUSU5BVElPTiwgMCk7CisJCQkgICBpICogTVBJQ19JTkZPKFRJTUVSX1NUUklERSkgKworCQkJICAgTVBJQ19JTkZPKFRJTUVSX0RFU1RJTkFUSU9OKSwgMCk7CiAJCW1waWNfd3JpdGUobXBpYy0+dG1yZWdzLAotCQkJICAgaSAqIE1QSUNfVElNRVJfU1RSSURFICsgTVBJQ19USU1FUl9WRUNUT1JfUFJJLAorCQkJICAgaSAqIE1QSUNfSU5GTyhUSU1FUl9TVFJJREUpICsKKwkJCSAgIE1QSUNfSU5GTyhUSU1FUl9WRUNUT1JfUFJJKSwKIAkJCSAgIE1QSUNfVkVDUFJJX01BU0sgfAogCQkJICAgKE1QSUNfVkVDX1RJTUVSXzAgKyBpKSk7CiAJfQpAQCAtOTQwLDIxICsxMDQzLDIyIEBACiAJCQkoOCA8PCBNUElDX1ZFQ1BSSV9QUklPUklUWV9TSElGVCk7CiAJCQogCQkvKiBpbml0IGh3ICovCi0JCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSVJRX1ZFQ1RPUl9QUkksIHZlY3ByaSk7Ci0JCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSVJRX0RFU1RJTkFUSU9OLAorCQltcGljX2lycV93cml0ZShpLCBNUElDX0lORk8oSVJRX1ZFQ1RPUl9QUkkpLCB2ZWNwcmkpOworCQltcGljX2lycV93cml0ZShpLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwKIAkJCSAgICAgICAxIDw8IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAl9CiAJCiAJLyogSW5pdCBzcHVycmlvdXMgdmVjdG9yICovCi0JbXBpY193cml0ZShtcGljLT5ncmVncywgTVBJQ19HUkVHX1NQVVJJT1VTLCBNUElDX1ZFQ19TUFVSUklPVVMpOworCW1waWNfd3JpdGUobXBpYy0+Z3JlZ3MsIE1QSUNfSU5GTyhHUkVHX1NQVVJJT1VTKSwgTVBJQ19WRUNfU1BVUlJJT1VTKTsKIAotCS8qIERpc2FibGUgODI1OSBwYXNzdGhyb3VnaCAqLwotCW1waWNfd3JpdGUobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8wLAotCQkgICBtcGljX3JlYWQobXBpYy0+Z3JlZ3MsIE1QSUNfR1JFR19HTE9CQUxfQ09ORl8wKQotCQkgICB8IE1QSUNfR1JFR19HQ09ORl84MjU5X1BUSFJPVV9ESVMpOworCS8qIERpc2FibGUgODI1OSBwYXNzdGhyb3VnaCwgaWYgc3VwcG9ydGVkICovCisJaWYgKCEobXBpYy0+ZmxhZ3MgJiBNUElDX05PX1BUSFJPVV9ESVMpKQorCQltcGljX3dyaXRlKG1waWMtPmdyZWdzLCBNUElDX0lORk8oR1JFR19HTE9CQUxfQ09ORl8wKSwKKwkJCSAgIG1waWNfcmVhZChtcGljLT5ncmVncywgTVBJQ19JTkZPKEdSRUdfR0xPQkFMX0NPTkZfMCkpCisJCQkgICB8IE1QSUNfR1JFR19HQ09ORl84MjU5X1BUSFJPVV9ESVMpOwogCiAJLyogU2V0IGN1cnJlbnQgcHJvY2Vzc29yIHByaW9yaXR5IHRvIDAgKi8KLQltcGljX2NwdV93cml0ZShNUElDX0NQVV9DVVJSRU5UX1RBU0tfUFJJLCAwKTsKKwltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAwKTsKIH0KIAogdm9pZCBfX2luaXQgbXBpY19zZXRfY2xrX3JhdGlvKHN0cnVjdCBtcGljICptcGljLCB1MzIgY2xvY2tfcmF0aW8pCkBAIC05OTcsOSArMTEwMSw5IEBACiAJCW1waWNfaXBpX3dyaXRlKHNyYyAtIE1QSUNfVkVDX0lQSV8wLAogCQkJICAgICAgIHJlZyB8IChwcmkgPDwgTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQpKTsKIAl9IGVsc2UgewotCQlyZWcgPSBtcGljX2lycV9yZWFkKHNyYywgTVBJQ19JUlFfVkVDVE9SX1BSSSkKKwkJcmVnID0gbXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpCiAJCQkmIH5NUElDX1ZFQ1BSSV9QUklPUklUWV9NQVNLOwotCQltcGljX2lycV93cml0ZShzcmMsIE1QSUNfSVJRX1ZFQ1RPUl9QUkksCisJCW1waWNfaXJxX3dyaXRlKHNyYywgTVBJQ19JTkZPKElSUV9WRUNUT1JfUFJJKSwKIAkJCSAgICAgICByZWcgfCAocHJpIDw8IE1QSUNfVkVDUFJJX1BSSU9SSVRZX1NISUZUKSk7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwpAQCAtMTAxNyw3ICsxMTIxLDcgQEAKIAlpZiAoaXNfaXBpKQogCQlyZWcgPSBtcGljX2lwaV9yZWFkKHNyYyA9IE1QSUNfVkVDX0lQSV8wKTsKIAllbHNlCi0JCXJlZyA9IG1waWNfaXJxX3JlYWQoc3JjLCBNUElDX0lSUV9WRUNUT1JfUFJJKTsKKwkJcmVnID0gbXBpY19pcnFfcmVhZChzcmMsIE1QSUNfSU5GTyhJUlFfVkVDVE9SX1BSSSkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1waWNfbG9jaywgZmxhZ3MpOwogCXJldHVybiAocmVnICYgTVBJQ19WRUNQUklfUFJJT1JJVFlfTUFTSykgPj4gTVBJQ19WRUNQUklfUFJJT1JJVFlfU0hJRlQ7CiB9CkBAIC0xMDQzLDEyICsxMTQ3LDEyIEBACiAgCSAqLwogCWlmIChkaXN0cmlidXRlX2lycXMpIHsKIAkgCWZvciAoaSA9IDA7IGkgPCBtcGljLT5udW1fc291cmNlcyA7IGkrKykKLQkJCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSVJRX0RFU1RJTkFUSU9OLAotCQkJCW1waWNfaXJxX3JlYWQoaSwgTVBJQ19JUlFfREVTVElOQVRJT04pIHwgbXNrKTsKKwkJCW1waWNfaXJxX3dyaXRlKGksIE1QSUNfSU5GTyhJUlFfREVTVElOQVRJT04pLAorCQkJCW1waWNfaXJxX3JlYWQoaSwgTVBJQ19JTkZPKElSUV9ERVNUSU5BVElPTikpIHwgbXNrKTsKIAl9CiAKIAkvKiBTZXQgY3VycmVudCBwcm9jZXNzb3IgcHJpb3JpdHkgdG8gMCAqLwotCW1waWNfY3B1X3dyaXRlKE1QSUNfQ1BVX0NVUlJFTlRfVEFTS19QUkksIDApOworCW1waWNfY3B1X3dyaXRlKE1QSUNfSU5GTyhDUFVfQ1VSUkVOVF9UQVNLX1BSSSksIDApOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpAQCAtMTA1OCw3ICsxMTYyLDcgQEAKIHsKIAlzdHJ1Y3QgbXBpYyAqbXBpYyA9IG1waWNfcHJpbWFyeTsKIAotCXJldHVybiBtcGljX2NwdV9yZWFkKE1QSUNfQ1BVX0NVUlJFTlRfVEFTS19QUkkpOworCXJldHVybiBtcGljX2NwdV9yZWFkKE1QSUNfSU5GTyhDUFVfQ1VSUkVOVF9UQVNLX1BSSSkpOwogfQogCiB2b2lkIG1waWNfY3B1X3NldF9wcmlvcml0eShpbnQgcHJpbykKQEAgLTEwNjYsNyArMTE3MCw3IEBACiAJc3RydWN0IG1waWMgKm1waWMgPSBtcGljX3ByaW1hcnk7CiAKIAlwcmlvICY9IE1QSUNfQ1BVX1RBU0tQUklfTUFTSzsKLQltcGljX2NwdV93cml0ZShNUElDX0NQVV9DVVJSRU5UX1RBU0tfUFJJLCBwcmlvKTsKKwltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCBwcmlvKTsKIH0KIAogLyoKQEAgLTEwODgsMTEgKzExOTIsMTEgQEAKIAogCS8qIGxldCB0aGUgbXBpYyBrbm93IHdlIGRvbid0IHdhbnQgaW50cnMuICAqLwogCWZvciAoaSA9IDA7IGkgPCBtcGljLT5udW1fc291cmNlcyA7IGkrKykKLQkJbXBpY19pcnFfd3JpdGUoaSwgTVBJQ19JUlFfREVTVElOQVRJT04sCi0JCQltcGljX2lycV9yZWFkKGksIE1QSUNfSVJRX0RFU1RJTkFUSU9OKSAmIH5tc2spOworCQltcGljX2lycV93cml0ZShpLCBNUElDX0lORk8oSVJRX0RFU1RJTkFUSU9OKSwKKwkJCW1waWNfaXJxX3JlYWQoaSwgTVBJQ19JTkZPKElSUV9ERVNUSU5BVElPTikpICYgfm1zayk7CiAKIAkvKiBTZXQgY3VycmVudCBwcm9jZXNzb3IgcHJpb3JpdHkgdG8gbWF4ICovCi0JbXBpY19jcHVfd3JpdGUoTVBJQ19DUFVfQ1VSUkVOVF9UQVNLX1BSSSwgMHhmKTsKKwltcGljX2NwdV93cml0ZShNUElDX0lORk8oQ1BVX0NVUlJFTlRfVEFTS19QUkkpLCAweGYpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXBpY19sb2NrLCBmbGFncyk7CiB9CkBAIC0xMTA4LDcgKzEyMTIsOCBAQAogCURCRygiJXM6IHNlbmRfaXBpKGlwaV9ubzogJWQpXG4iLCBtcGljLT5uYW1lLCBpcGlfbm8pOwogI2VuZGlmCiAKLQltcGljX2NwdV93cml0ZShNUElDX0NQVV9JUElfRElTUEFUQ0hfMCArIGlwaV9ubyAqIDB4MTAsCisJbXBpY19jcHVfd3JpdGUoTVBJQ19JTkZPKENQVV9JUElfRElTUEFUQ0hfMCkgKworCQkgICAgICAgaXBpX25vICogTVBJQ19JTkZPKENQVV9JUElfRElTUEFUQ0hfU1RSSURFKSwKIAkJICAgICAgIG1waWNfcGh5c21hc2soY3B1X21hc2sgJiBjcHVzX2FkZHIoY3B1X29ubGluZV9tYXApWzBdKSk7CiB9CiAKQEAgLTExMTYsNyArMTIyMSw3IEBACiB7CiAJdTMyIHNyYzsKIAotCXNyYyA9IG1waWNfY3B1X3JlYWQoTVBJQ19DUFVfSU5UQUNLKSAmIE1QSUNfVkVDUFJJX1ZFQ1RPUl9NQVNLOworCXNyYyA9IG1waWNfY3B1X3JlYWQoTVBJQ19JTkZPKENQVV9JTlRBQ0spKSAmIE1QSUNfSU5GTyhWRUNQUklfVkVDVE9SX01BU0spOwogI2lmZGVmIERFQlVHX0xPVwogCURCRygiJXM6IGdldF9vbmVfaXJxKCk6ICVkXG4iLCBtcGljLT5uYW1lLCBzcmMpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvdHNpMTA4X2Rldi5jCmluZGV4IDI2YTBjYzguLmYzMDM4NDYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9kZXYuYwpAQCAtOTMsMTMgKzkzLDE1IEBACiAJCQlnb3RvIGVycjsKIAogCQlyWzFdLm5hbWUgPSAidHgiOwotCQlyWzFdLnN0YXJ0ID0gbnAtPmludHJzWzBdLmxpbmU7Ci0JCXJbMV0uZW5kID0gbnAtPmludHJzWzBdLmxpbmU7CisJCXJbMV0uc3RhcnQgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChucCwgMCk7CisJCXJbMV0uZW5kID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCQlyWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9JUlE7CisJCURCRygiJXM6IG5hbWU6c3RhcnQtPmVuZCA9ICVzOjB4JWx4LT4gMHglbHhcbiIsCisJCQlfX0ZVTkNUSU9OX18sclsxXS5uYW1lLCByWzFdLnN0YXJ0LCByWzFdLmVuZCk7CiAKIAkJdHNpX2V0aF9kZXYgPQogCQkgICAgcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgidHNpLWV0aGVybmV0IiwgaSwgJnJbMF0sCi0JCQkJCQkgICAgbnAtPm5faW50cnMgKyAxKTsKKwkJCQkJCSAgICAxKTsKIAogCQlpZiAoSVNfRVJSKHRzaV9ldGhfZGV2KSkgewogCQkJcmV0ID0gUFRSX0VSUih0c2lfZXRoX2Rldik7CkBAIC0xMjcsNyArMTI5LDcgQEAKIAkJdHNpX2V0aF9kYXRhLnJlZ3MgPSByWzBdLnN0YXJ0OwogCQl0c2lfZXRoX2RhdGEucGh5cmVncyA9IHJlcy5zdGFydDsKIAkJdHNpX2V0aF9kYXRhLnBoeSA9ICpwaHlfaWQ7Ci0JCXRzaV9ldGhfZGF0YS5pcnFfbnVtID0gbnAtPmludHJzWzBdLmxpbmU7CisJCXRzaV9ldGhfZGF0YS5pcnFfbnVtID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOwogCQlvZl9ub2RlX3B1dChwaHkpOwogCQlyZXQgPQogCQkgICAgcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHRzaV9ldGhfZGV2LCAmdHNpX2V0aF9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi90c2kxMDhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9wY2kuYwppbmRleCAzMjY1ZDU0Li5jMjhmNjliIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3RzaTEwOF9wY2kuYwpAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCi0KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTk1LDcgKzE5NCw3IEBACiAJaW50IGxlbjsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CiAJc3RydWN0IHJlc291cmNlIHJzcmM7Ci0JaW50ICpidXNfcmFuZ2U7CisJY29uc3QgaW50ICpidXNfcmFuZ2U7CiAJaW50IHByaW1hcnkgPSAwLCBoYXNfYWRkcmVzcyA9IDA7CiAKIAkvKiBQQ0kgQ29uZmlnIG1hcHBpbmcgKi8KQEAgLTIwOCw3ICsyMDcsNyBAQAogCWhhc19hZGRyZXNzID0gKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UoZGV2LCAwLCAmcnNyYykgPT0gMCk7CiAKIAkvKiBHZXQgYnVzIHJhbmdlIGlmIGFueSAqLwotCWJ1c19yYW5nZSA9IChpbnQgKilnZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJYnVzX3JhbmdlID0gZ2V0X3Byb3BlcnR5KGRldiwgImJ1cy1yYW5nZSIsICZsZW4pOwogCWlmIChidXNfcmFuZ2UgPT0gTlVMTCB8fCBsZW4gPCAyICogc2l6ZW9mKGludCkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuJ3QgZ2V0IGJ1cy1yYW5nZSBmb3IgJXMsIGFzc3VtZSIKIAkJICAgICAgICIgYnVzIDBcbiIsIGRldi0+ZnVsbF9uYW1lKTsKQEAgLTIyOCw3ICsyMjcsNyBAQAogCiAJKGhvc2UpLT5vcHMgPSAmdHNpMTA4X2RpcmVjdF9wY2lfb3BzOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgdHNpMTA4IFBDSSBob3N0IGJyaWRnZSBhdCAweCUwOGx4LiAiCisJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgdHNpMTA4IFBDSSBob3N0IGJyaWRnZSBhdCAweCUwOHguICIKIAkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKIAkgICAgICAgcnNyYy5zdGFydCwgaG9zZS0+Zmlyc3RfYnVzbm8sIGhvc2UtPmxhc3RfYnVzbm8pOwogCkBAIC0yNzgsNyArMjc3LDcgQEAKIAltYigpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBnZXRfcGNpX3NvdXJjZSh2b2lkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2V0X3BjaV9zb3VyY2Uodm9pZCkKIHsKIAl1X2ludCB0ZW1wID0gMDsKIAlpbnQgaXJxID0gLTE7CkBAIC0zNzEsMTIgKzM3MCwxMiBAQAogICogSW50ZXJydXB0IGNvbnRyb2xsZXIgZGVzY3JpcHRvciBmb3IgY2FzY2FkZWQgUENJIGludGVycnVwdCBjb250cm9sbGVyLgogICovCiAKLXN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSB0c2kxMDhfcGNpX2lycSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgdHNpMTA4X3BjaV9pcnEgPSB7CiAJLnR5cGVuYW1lID0gInRzaTEwOF9QQ0lfaW50IiwKLQkuZW5hYmxlID0gdHNpMTA4X3BjaV9pcnFfZW5hYmxlLAotCS5kaXNhYmxlID0gdHNpMTA4X3BjaV9pcnFfZGlzYWJsZSwKKwkubWFzayA9IHRzaTEwOF9wY2lfaXJxX2Rpc2FibGUsCiAJLmFjayA9IHRzaTEwOF9wY2lfaXJxX2FjaywKIAkuZW5kID0gdHNpMTA4X3BjaV9pcnFfZW5kLAorCS51bm1hc2sgPSB0c2kxMDhfcGNpX2lycV9lbmFibGUsCiB9OwogCiAvKgpAQCAtMzk5LDE0ICszOTgsMTggQEAKIAlEQkcoIlRzaTEwOF9wY2lfaW50X2luaXQ6IGluaXRpYWxpemluZyBQQ0kgaW50ZXJydXB0c1xuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1BDSV9JUlFTOyBpKyspIHsKLQkJaXJxX2Rlc2NbaSArIElSUV9QQ0lfSU5UQURfQkFTRV0uaGFuZGxlciA9ICZ0c2kxMDhfcGNpX2lycTsKKwkJaXJxX2Rlc2NbaSArIElSUV9QQ0lfSU5UQURfQkFTRV0uY2hpcCA9ICZ0c2kxMDhfcGNpX2lycTsKIAkJaXJxX2Rlc2NbaSArIElSUV9QQ0lfSU5UQURfQkFTRV0uc3RhdHVzIHw9IElSUV9MRVZFTDsKIAl9CiAKIAlpbml0X3BjaV9zb3VyY2UoKTsKIH0KIAotaW50IHRzaTEwOF9pcnFfY2FzY2FkZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqdW51c2VkKQordm9pZCB0c2kxMDhfaXJxX2Nhc2NhZGUodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXJldHVybiBnZXRfcGNpX3NvdXJjZSgpOworCXVuc2lnbmVkIGludCBjYXNjYWRlX2lycSA9IGdldF9wY2lfc291cmNlKCk7CisJaWYgKGNhc2NhZGVfaXJxICE9IE5PX0lSUSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGNhc2NhZGVfaXJxLCByZWdzKTsKKwlkZXNjLT5jaGlwLT5lb2koaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYyBiL2FyY2gvcG93ZXJwYy94bW9uL3htb24uYwppbmRleCAxNzliMTBjLi44YWRhZDE0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMveG1vbi94bW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL3htb24veG1vbi5jCkBAIC0xMzcsMTAgKzEzNywxNCBAQAogc3RhdGljIHZvaWQgcHJvY2NhbGwodm9pZCk7CiB2b2lkIGR1bXBfc2VnbWVudHModm9pZCk7CiBzdGF0aWMgdm9pZCBzeW1ib2xfbG9va3VwKHZvaWQpOworc3RhdGljIHZvaWQgeG1vbl9zaG93X3N0YWNrKHVuc2lnbmVkIGxvbmcgc3AsIHVuc2lnbmVkIGxvbmcgbHIsCisJCQkgICAgdW5zaWduZWQgbG9uZyBwYyk7CiBzdGF0aWMgdm9pZCB4bW9uX3ByaW50X3N5bWJvbCh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGNvbnN0IGNoYXIgKm1pZCwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmFmdGVyKTsKIHN0YXRpYyBjb25zdCBjaGFyICpnZXR2ZWNuYW1lKHVuc2lnbmVkIGxvbmcgdmVjKTsKIAoraW50IHhtb25fbm9fYXV0b19iYWNrdHJhY2U7CisKIGV4dGVybiBpbnQgcHJpbnRfaW5zbl9wb3dlcnBjKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGludCk7CiAKIGV4dGVybiB2b2lkIHhtb25fZW50ZXIodm9pZCk7CkBAIC03MzYsNiArNzQwLDEyIEBACiAKIAlsYXN0X2NtZCA9IE5VTEw7CiAJeG1vbl9yZWdzID0gZXhjcDsKKworCWlmICgheG1vbl9ub19hdXRvX2JhY2t0cmFjZSkgeworCQl4bW9uX25vX2F1dG9fYmFja3RyYWNlID0gMTsKKwkJeG1vbl9zaG93X3N0YWNrKGV4Y3AtPmdwclsxXSwgZXhjcC0+bGluaywgZXhjcC0+bmlwKTsKKwl9CisKIAlmb3IoOzspIHsKICNpZmRlZiBDT05GSUdfU01QCiAJCXByaW50ZigiJXg6Iiwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcgYi9hcmNoL3BwYy9LY29uZmlnCmluZGV4IGEwNGNkZjAuLjhmYTEwY2YgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAlkZWZhdWx0IFBDSQogCiBjb25maWcgTVBDODN4eF9QQ0kyCi0JYm9vbCAiICBTdXBwcnQgZm9yIDJuZCBQQ0kgaG9zdCBjb250cm9sbGVyIgorCWJvb2wgIlN1cHBvcnQgZm9yIDJuZCBQQ0kgaG9zdCBjb250cm9sbGVyIgogCWRlcGVuZHMgb24gUENJICYmIE1QQzgzNHgKIAlkZWZhdWx0IHkgaWYgTVBDODM0eF9TWVMKIApAQCAtMTIyMywxMiArMTIyMywxMiBAQAogCWRlZmF1bHQgeQogCiBjb25maWcgODI2MF9QQ0k5Ci0JYm9vbCAiICBFbmFibGUgd29ya2Fyb3VuZCBmb3IgTVBDODI2eCBlcnJhdHVtIFBDSSA5IgorCWJvb2wgIkVuYWJsZSB3b3JrYXJvdW5kIGZvciBNUEM4MjZ4IGVycmF0dW0gUENJIDkiCiAJZGVwZW5kcyBvbiBQQ0lfODI2MCAmJiAhQURTODI3MgogCWRlZmF1bHQgeQogCiBjaG9pY2UKLQlwcm9tcHQgIiAgSURNQSBjaGFubmVsIGZvciBQQ0kgOSB3b3JrYXJvdW5kIgorCXByb21wdCAiSURNQSBjaGFubmVsIGZvciBQQ0kgOSB3b3JrYXJvdW5kIgogCWRlcGVuZHMgb24gODI2MF9QQ0k5CiAKIGNvbmZpZyA4MjYwX1BDSTlfSURNQTEKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2NvbmZpZ3MvcHJlcF9kZWZjb25maWcgYi9hcmNoL3BwYy9jb25maWdzL3ByZXBfZGVmY29uZmlnCmluZGV4IDRkMzNiZWUuLjBhYTMzMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2NvbmZpZ3MvcHJlcF9kZWZjb25maWcKKysrIGIvYXJjaC9wcGMvY29uZmlncy9wcmVwX2RlZmNvbmZpZwpAQCAtMSw1NiArMSw2MyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEzLXJjMwotIyBXZWQgSnVsIDEzIDEzOjM0OjI0IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzYKKyMgV2VkIFNlcCAgNiAxNTowOTozMiAyMDA2CiAjCiBDT05GSUdfTU1VPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfSEFWRV9ERUNfTE9DSz15CiBDT05GSUdfUFBDPXkKIENPTkZJR19QUEMzMj15CiBDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKIENPTkZJR19TQ0hFRF9OT19OT19PTUlUX0ZSQU1FX1BPSU5URVI9eQorQ09ORklHX0FSQ0hfTUFZX0hBVkVfUENfRkRDPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OPSItcHJlcCIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfUE9TSVhfTVFVRVVFPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotQ09ORklHX0hPVFBMVUc9eQotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19LQUxMU1lNUz15CiAjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTU4LDY5ICs2NSw2OCBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKIAogIworIyBCbG9jayBsYXllcgorIworQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorCisjCiAjIFByb2Nlc3NvcgogIwogQ09ORklHXzZ4eD15CiAjIENPTkZJR180MHggaXMgbm90IHNldAogIyBDT05GSUdfNDR4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BPV0VSMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QT1dFUjQgaXMgbm90IHNldAogIyBDT05GSUdfOHh4IGlzIG5vdCBzZXQKICMgQ09ORklHX0UyMDAgaXMgbm90IHNldAogIyBDT05GSUdfRTUwMCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDX0ZQVT15Ci1DT05GSUdfQUxUSVZFQz15Ci1DT05GSUdfVEFVPXkKLSMgQ09ORklHX1RBVV9JTlQgaXMgbm90IHNldAotIyBDT05GSUdfVEFVX0FWRVJBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQUxUSVZFQyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRPXkKLUNPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0ZSRVFfU1RBVD1tCi1DT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTPXkKLUNPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAotQ09ORklHX0NQVV9GUkVRX0dPVl9QRVJGT1JNQU5DRT15Ci1DT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRT1tCi1DT05GSUdfQ1BVX0ZSRVFfR09WX1VTRVJTUEFDRT1tCi1DT05GSUdfQ1BVX0ZSRVFfR09WX09OREVNQU5EPW0KLUNPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFPW0KLUNPTkZJR19DUFVfRlJFUV9QTUFDPXkKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKIENPTkZJR19QUEM2MDFfU1lOQ19GSVg9eQotQ09ORklHX1BNPXkKKyMgQ09ORklHX1dBTlRfRUFSTFlfU0VSSUFMIGlzIG5vdCBzZXQKIENPTkZJR19QUENfU1REX01NVT15CiAKICMKICMgUGxhdGZvcm0gb3B0aW9ucwogIwotQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19QUENfUFJFUD15CiAjIENPTkZJR19BUFVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tBVEFOQSBpcyBub3Qgc2V0CiAjIENPTkZJR19XSUxMT1cgaXMgbm90IHNldAogIyBDT05GSUdfQ1BDSTY5MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUlBNQzI1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSEVTVE5VVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUFJVQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSERQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19FVjY0MjYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0xPUEVDIGlzIG5vdCBzZXQKLSMgQ09ORklHX01DUE43NjUgaXMgbm90IHNldAogIyBDT05GSUdfTVZNRTUxMDAgaXMgbm90IHNldAogIyBDT05GSUdfUFBMVVMgaXMgbm90IHNldAogIyBDT05GSUdfUFJQTUM3NTAgaXMgbm90IHNldAogIyBDT05GSUdfUFJQTUM4MDAgaXMgbm90IHNldAogIyBDT05GSUdfU0FORFBPSU5UIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBRFNUT05FX1BQQzdEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FESVIgaXMgbm90IHNldAotIyBDT05GSUdfSzIgaXMgbm90IHNldAogIyBDT05GSUdfUEFMNCBpcyBub3Qgc2V0CiAjIENPTkZJR19HRU1JTkkgaXMgbm90IHNldAogIyBDT05GSUdfRVNUODI2MCBpcyBub3Qgc2V0CkBAIC0xMzIsMTAgKzEzOCw3IEBACiAjIENPTkZJR19QUTJGQURTIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJVEU1MjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01QQzgzNHhfU1lTIGlzIG5vdCBzZXQKLUNPTkZJR19QUENfQ0hSUD15Ci1DT05GSUdfUFBDX1BNQUM9eQotQ09ORklHX1BQQ19QUkVQPXkKLUNPTkZJR19QUENfT0Y9eQorIyBDT05GSUdfRVY2NDM2MCBpcyBub3Qgc2V0CiBDT05GSUdfUFBDQlVHX05WUkFNPXkKICMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKQEAgLTE1MiwxMiArMTU1LDE2IEBACiAjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKIENPTkZJR19GTEFUTUVNPXkKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX0JJTkZNVF9FTEY9eQogQ09ORklHX0JJTkZNVF9NSVNDPW0KLUNPTkZJR19QUk9DX0RFVklDRVRSRUU9eQogQ09ORklHX1BSRVBfUkVTSURVQUw9eQogQ09ORklHX1BST0NfUFJFUFJFU0lEVUFMPXkKICMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TT0ZUV0FSRV9TVVNQRU5EPXkKIENPTkZJR19QTV9TVERfUEFSVElUSU9OPSIiCkBAIC0xNjksMTAgKzE3NiwxMCBAQAogIwogQ09ORklHX0lTQT15CiBDT05GSUdfR0VORVJJQ19JU0FfRE1BPXkKK0NPTkZJR19QUENfSTgyNTk9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQogQ09ORklHX1BDST15CiBDT05GSUdfUENJX0RPTUFJTlM9eQotIyBDT05GSUdfUENJX0xFR0FDWV9QUk9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDSV9OQU1FUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xODcsNiArMTk0LDExIEBACiAjIFBDLWNhcmQgYnJpZGdlcwogIwogQ09ORklHX1lFTlRBPW0KK0NPTkZJR19ZRU5UQV9PMj15CitDT05GSUdfWUVOVEFfUklDT0g9eQorQ09ORklHX1lFTlRBX1RJPXkKK0NPTkZJR19ZRU5UQV9FTkVfVFVORT15CitDT05GSUdfWUVOVEFfVE9TSElCQT15CiBDT05GSUdfUENNQ0lBX1BST0JFPXkKIENPTkZJR19QQ0NBUkRfTk9OU1RBVElDPW0KIApAQCAtMjEyLDYgKzIyNCw3IEBACiAjCiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0yMjksOSArMjQyLDExIEBACiAjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19UQ1BfQ09OR19CSUM9eQogCkBAIC0yNDAsODAgKzI1NSw3NyBAQAogIwogIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAogIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKIENPTkZJR19ORVRGSUxURVI9eQogIyBDT05GSUdfTkVURklMVEVSX0RFQlVHIGlzIG5vdCBzZXQKIAogIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTk5UUkFDSz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9FU1A9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9IRUxQRVI9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEg9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEE9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUFMTT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFA9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURT1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUUklORz1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RDUE1TUz1tCisKKyMKICMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCiAjCiBDT05GSUdfSVBfTkZfQ09OTlRSQUNLPW0KICMgQ09ORklHX0lQX05GX0NUX0FDQ1QgaXMgbm90IHNldAogQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLPXkKKyMgQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX05FVExJTksgaXMgbm90IHNldAogIyBDT05GSUdfSVBfTkZfQ1RfUFJPVE9fU0NUUCBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfRlRQPW0KIENPTkZJR19JUF9ORl9JUkM9bQorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CiBDT05GSUdfSVBfTkZfVEZUUD1tCiBDT05GSUdfSVBfTkZfQU1BTkRBPW0KKyMgQ09ORklHX0lQX05GX1BQVFAgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfSDMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9TSVAgaXMgbm90IHNldAogQ09ORklHX0lQX05GX1FVRVVFPW0KLUNPTkZJR19JUF9ORl9JUFRBQkxFUz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTElNSVQ9bQotQ09ORklHX0lQX05GX01BVENIX0lQUkFOR0U9bQotQ09ORklHX0lQX05GX01BVENIX01BQz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfUEtUVFlQRT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTUFSSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfTVVMVElQT1JUPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UT1M9bQotQ09ORklHX0lQX05GX01BVENIX1JFQ0VOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9EU0NQPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9BSF9FU1A9bQotQ09ORklHX0lQX05GX01BVENIX0xFTkdUSD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfVFRMPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9UQ1BNU1M9bQotQ09ORklHX0lQX05GX01BVENIX0hFTFBFUj1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU1RBVEU9bQotQ09ORklHX0lQX05GX01BVENIX0NPTk5UUkFDSz1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfT1dORVI9bQotQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KLUNPTkZJR19JUF9ORl9NQVRDSF9SRUFMTT1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfU0NUUD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09NTUVOVD1tCi1DT05GSUdfSVBfTkZfTUFUQ0hfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX01BVENIX0hBU0hMSU1JVD1tCi1DT05GSUdfSVBfTkZfRklMVEVSPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCi1DT05GSUdfSVBfTkZfTkFUPW0KLUNPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCi1DT05GSUdfSVBfTkZfTkFUX1NOTVBfQkFTSUM9bQotQ09ORklHX0lQX05GX05BVF9JUkM9bQotQ09ORklHX0lQX05GX05BVF9GVFA9bQotQ09ORklHX0lQX05GX05BVF9URlRQPW0KLUNPTkZJR19JUF9ORl9OQVRfQU1BTkRBPW0KLUNPTkZJR19JUF9ORl9NQU5HTEU9bQotQ09ORklHX0lQX05GX1RBUkdFVF9UT1M9bQotQ09ORklHX0lQX05GX1RBUkdFVF9FQ049bQotQ09ORklHX0lQX05GX1RBUkdFVF9EU0NQPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfTUFSSz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX0NMQVNTSUZZPW0KLUNPTkZJR19JUF9ORl9UQVJHRVRfQ09OTk1BUks9bQotQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVA9bQotQ09ORklHX0lQX05GX1JBVz1tCi1DT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQotQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCi0jIENPTkZJR19JUF9ORl9BUlBGSUxURVIgaXMgbm90IHNldAotIyBDT05GSUdfSVBfTkZfQVJQX01BTkdMRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9JUFRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9BUlBUQUJMRVMgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CiAKICMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCiAjCiAjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKworIworIyBUSVBDIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKQEAgLTMyNiw2ICszMzgsMTAgQEAKICMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIwogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKIENPTkZJR19ORVRfQ0xTX1JPVVRFPXkKIApAQCAtMzMzLDEzICszNDksMTEgQEAKICMgTmV0d29yayB0ZXN0aW5nCiAjCiAjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRQT0xMPXkKLSMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKICMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSREEgaXMgbm90IHNldAogIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0zNTIsNiArMzY2LDEyIEBACiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPW0KICMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKIAogIwogIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCkBAIC0zNjcsNiArMzg3LDcgQEAKIENPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQogQ09ORklHX1BBUlBPUlRfUENfU1VQRVJJTz15CiAjIENPTkZJR19QQVJQT1JUX0dTQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUX0FYODg3OTYgaXMgbm90IHNldAogQ09ORklHX1BBUlBPUlRfMTI4ND15CiAKICMKQEAgLTM3OCw3ICszOTksNiBAQAogIyBCbG9jayBkZXZpY2VzCiAjCiBDT05GSUdfQkxLX0RFVl9GRD1tCi1DT05GSUdfTUFDX0ZMT1BQWT1tCiAjIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBUklERSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKQEAgLTM5NCwxOCArNDE0LDkgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi1DT05GSUdfTEJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKICMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CiAKICMKQEAgLTQyMiw3ICs0MzMsNyBAQAogIyBDT05GSUdfSURFRElTS19NVUxUSV9NT0RFIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lERUNEPXkKICMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVGTE9QUFk9eQorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSURFU0NTST15CiAjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CiAKQEAgLTQzNSw3ICs0NDYsNyBAQAogIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKICMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NMODJDMTA1PXkKIENPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQogIyBDT05GSUdfQkxLX0RFVl9JREVETUFfRk9SQ0VEIGlzIG5vdCBzZXQKIENPTkZJR19JREVETUFfUENJX0FVVE89eQpAQCAtNDQzLDcgKzQ1NCw3IEBACiAjIENPTkZJR19CTEtfREVWX0FFQzYyWFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9BTEkxNVgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQU1ENzRYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9DTUQ2NFg9eQorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldApAQCAtNDU1LDE3ICs0NjYsMTIgQEAKICMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVc9eQotIyBDT05GSUdfUERDMjAyWFhfRk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9JREVfUE1BQz15Ci1DT05GSUdfQkxLX0RFVl9JREVfUE1BQ19BVEExMDBGSVJTVD15Ci1DT05GSUdfQkxLX0RFVl9JREVETUFfUE1BQz15Ci1DT05GSUdfQkxLX0RFVl9JREVfUE1BQ19CTElOSz15CiAjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0lERV9DSElQU0VUUyBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9JREVETUE9eQpAQCAtNDc2LDYgKzQ4Miw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTUwMywxMCArNTEwLDEyIEBACiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfNzAwMEZBU1NUIGlzIG5vdCBzZXQKQEAgLTUxNCwxOSArNTIzLDE2IEBACiAjIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSEExNTQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci1DT05GSUdfU0NTSV9BSUM3WFhYPW0KLUNPTkZJR19BSUM3WFhYX0NNRFNfUEVSX0RFVklDRT0yNTMKLUNPTkZJR19BSUM3WFhYX1JFU0VUX0RFTEFZX01TPTE1MDAwCi1DT05GSUdfQUlDN1hYWF9ERUJVR19FTkFCTEU9eQotQ09ORklHX0FJQzdYWFhfREVCVUdfTUFTSz0wCi1DT05GSUdfQUlDN1hYWF9SRUdfUFJFVFRZX1BSSU5UPXkKLUNPTkZJR19TQ1NJX0FJQzdYWFhfT0xEPW0KKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBUSU9QIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RUQzMyODAgaXMgbm90IHNldApAQCAtNTQ1LDE5ICs1NTEsMTMgQEAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ETUFfQUREUkVTU0lOR19NT0RFPTAKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9ERUZBVUxUX1RBR1M9MTYKIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NQVhfVEFHUz02NAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfSU9NQVBQRUQgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01NSU89eQogIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QQVMxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1BTSTI0MEkgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9RTE9HSUNfRkFTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CkBAIC01NjYsMTAgKzU2Niw2IEBACiAjIENPTkZJR19TQ1NJX1UxNF8zNEYgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX01FU0g9eQotQ09ORklHX1NDU0lfTUVTSF9TWU5DX1JBVEU9NQotQ09ORklHX1NDU0lfTUVTSF9SRVNFVF9ERUxBWV9NUz00MDAwCi1DT05GSUdfU0NTSV9NQUM1M0M5ND15CiAKICMKICMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKQEAgLTU4Nyw2ICs1ODMsNyBAQAogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAogIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKQEAgLTYxMywxMiArNjEwLDkgQEAKICMKIENPTkZJR19JRUVFMTM5NF9WSURFTzEzOTQ9bQogQ09ORklHX0lFRUUxMzk0X1NCUDI9bQotIyBDT05GSUdfSUVFRTEzOTRfU0JQMl9QSFlTX0RNQSBpcyBub3Qgc2V0CiBDT05GSUdfSUVFRTEzOTRfRVRIMTM5ND1tCiBDT05GSUdfSUVFRTEzOTRfRFYxMzk0PW0KIENPTkZJR19JRUVFMTM5NF9SQVdJTz1tCi1DT05GSUdfSUVFRTEzOTRfQ01QPW0KLUNPTkZJR19JRUVFMTM5NF9BTURUUD1tCiAKICMKICMgSTJPIGRldmljZSBzdXBwb3J0CkBAIC02MjgsMTggKzYyMiw3IEBACiAjCiAjIE1hY2ludG9zaCBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX0FEQj15Ci1DT05GSUdfQURCX0NVREE9eQotQ09ORklHX0FEQl9QTVU9eQotQ09ORklHX1BNQUNfQVBNX0VNVT15Ci1DT05GSUdfUE1BQ19NRURJQUJBWT15Ci1DT05GSUdfUE1BQ19CQUNLTElHSFQ9eQotQ09ORklHX0FEQl9NQUNJTz15Ci1DT05GSUdfSU5QVVRfQURCSElEPXkKLUNPTkZJR19NQUNfRU1VTU9VU0VCVE49eQotQ09ORklHX1RIRVJNX1dJTkRUVU5ORUw9bQotQ09ORklHX1RIRVJNX0FEVDc0Nlg9bQotIyBDT05GSUdfQU5TTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTkRGQVJNIGlzIG5vdCBzZXQKIAogIwogIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CkBAIC02NTYsMTUgKzYzOSwxOCBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQotQ09ORklHX01BQ0U9eQotIyBDT05GSUdfTUFDRV9BQVVJX1BPUlQgaXMgbm90IHNldAotQ09ORklHX0JNQUM9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKLUNPTkZJR19TVU5HRU09eQorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKQEAgLTY4Miw2ICs2NjgsNyBAQAogQ09ORklHX0RFNFg1PW0KICMgQ09ORklHX1dJTkJPTkRfODQwIGlzIG5vdCBzZXQKICMgQ09ORklHX0RNOTEwMiBpcyBub3Qgc2V0CisjIENPTkZJR19VTEk1MjZYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDTUNJQV9YSVJDT00gaXMgbm90IHNldAogIyBDT05GSUdfUENNQ0lBX1hJUlRVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CkBAIC03MjIsMTggKzcwOSwyMSBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAogIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVjY0M1hYX0VUSCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC03NDQsNiArNzM0LDcgQEAKICMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCiAjCiBDT05GSUdfTkVUX1JBRElPPXkKKyMgQ09ORklHX05FVF9XSVJFTEVTU19SVE5FVExJTksgaXMgbm90IHNldAogCiAjCiAjIE9ic29sZXRlIFdpcmVsZXNzIGNhcmRzIHN1cHBvcnQgKHByZS04MDIuMTEpCkBAIC03NTUsMTEgKzc0NiwxMyBAQAogIwogIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAogIworIyBDT05GSUdfSVBXMjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFcyMjAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FJUk8gaXMgbm90IHNldAogQ09ORklHX0hFUk1FUz1tCi1DT05GSUdfQVBQTEVfQUlSUE9SVD1tCiAjIENPTkZJR19QTFhfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9SVEVMX0hFUk1FUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfSEVSTUVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKIApAQCAtNzY3LDYgKzc2MCw4IEBACiAjIFByaXNtIEdUL0R1ZXR0ZSA4MDIuMTEoYS9iL2cpIFBDSS9DYXJkYnVzIHN1cHBvcnQKICMKICMgQ09ORklHX1BSSVNNNTQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogQ09ORklHX05FVF9XSVJFTEVTUz15CiAKICMKQEAgLTc4MywxMSArNzc4LDE2IEBACiAjIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAogQ09ORklHX1BQUF9ERUZMQVRFPXkKIENPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CiBDT05GSUdfUFBQT0U9bQogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKIENPTkZJR19ORVRDT05TT0xFPW0KK0NPTkZJR19ORVRQT0xMPXkKKyMgQ09ORklHX05FVFBPTExfUlggaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTF9UUkFQIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSPXkKIAogIwogIyBJU0ROIHN1YnN5c3RlbQpAQCAtODM1LDcgKzgzNSw3IEBACiAjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfTUlTQz15Ci0jIENPTkZJR19JTlBVVF9QQ1NQS1IgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1BDU1BLUj1tCiBDT05GSUdfSU5QVVRfVUlOUFVUPW0KIAogIwpAQCAtODU2LDYgKzg1Niw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTg2Myw3ICs4NjQsOSBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtODcxLDggKzg3NCw2IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF9QTUFDWklMT0c9eQotQ09ORklHX1NFUklBTF9QTUFDWklMT0dfQ09OU09MRT15CiAjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKIENPTkZJR19VTklYOThfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWVM9eQpAQCAtODkwLDYgKzg5MSw3IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAogQ09ORklHX05WUkFNPXkKIENPTkZJR19HRU5fUlRDPXkKICMgQ09ORklHX0dFTl9SVENfWCBpcyBub3Qgc2V0CkBAIC05MDAsMjEgKzkwMiwxNSBAQAogIwogIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKICMKLUNPTkZJR19BR1A9bQotQ09ORklHX0FHUF9VTklOT1JUSD1tCi1DT05GSUdfRFJNPW0KLSMgQ09ORklHX0RSTV9UREZYIGlzIG5vdCBzZXQKLUNPTkZJR19EUk1fUjEyOD1tCi1DT05GSUdfRFJNX1JBREVPTj1tCi0jIENPTkZJR19EUk1fTUdBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RSTV9TSVMgaXMgbm90IHNldAotIyBDT05GSUdfRFJNX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogCiAjCiAjIFRQTSBkZXZpY2VzCiAjCiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKIAogIwogIyBJMkMgc3VwcG9ydApAQCAtOTM4LDE5ICs5MzQsMTYgQEAKICMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0VMRUtUT1IgaXMgbm90IHNldAotQ09ORklHX0kyQ19IWURSQT15CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0tFWVdFU1Q9bQogIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtOTU5LDcgKzk1Miw2IEBACiAjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydApAQCAtOTcwLDcgKzk2Miw2IEBACiAjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NNDFUMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKQEAgLTk3OSwxNCArOTcwLDIwIEBACiAjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKKyMgU1BJIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfTUFTVEVSIGlzIG5vdCBzZXQKKworIwogIyBEYWxsYXMncyAxLXdpcmUgYnVzCiAjCi0jIENPTkZJR19XMSBpcyBub3Qgc2V0CiAKICMKICMgSGFyZHdhcmUgTW9uaXRvcmluZyBzdXBwb3J0CiAjCiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwpAQCAtOTk2LDM4ICs5OTMsMzYgQEAKICMgTXVsdGltZWRpYSBkZXZpY2VzCiAjCiAjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQogCiAjCiAjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKICMKICMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CiAjCisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQotQ09ORklHX0ZCX1NPRlRfQ1VSU09SPXkKLUNPTkZJR19GQl9NQUNNT0RFUz15CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAogQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CiBDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKICMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKLUNPTkZJR19GQl9PRj15Ci1DT05GSUdfRkJfQ09OVFJPTD15Ci1DT05GSUdfRkJfUExBVElOVU09eQotQ09ORklHX0ZCX1ZBTEtZUklFPXkKLUNPTkZJR19GQl9DVDY1NTUwPXkKKyMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAogIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAotQ09ORklHX0ZCX0lNU1RUPXkKKyMgQ09ORklHX0ZCX0lNU1RUIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZHQTE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX05WSURJQSBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUklWQT15Ci1DT05GSUdfRkJfUklWQV9JMkM9eQotIyBDT05GSUdfRkJfUklWQV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9SSVZBIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NQVRST1g9eQogQ09ORklHX0ZCX01BVFJPWF9NSUxMRU5JVU09eQogQ09ORklHX0ZCX01BVFJPWF9NWVNUSVFVRT15CkBAIC0xMDM1LDM0ICsxMDMwLDI3IEBACiBDT05GSUdfRkJfTUFUUk9YX0kyQz15CiBDT05GSUdfRkJfTUFUUk9YX01BVkVOPW0KICMgQ09ORklHX0ZCX01BVFJPWF9NVUxUSUhFQUQgaXMgbm90IHNldAotIyBDT05GSUdfRkJfUkFERU9OX09MRCBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfUkFERU9OPXkKLUNPTkZJR19GQl9SQURFT05fSTJDPXkKLSMgQ09ORklHX0ZCX1JBREVPTl9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfQVRZMTI4PXkKLUNPTkZJR19GQl9BVFk9eQotQ09ORklHX0ZCX0FUWV9DVD15Ci1DT05GSUdfRkJfQVRZX0dFTkVSSUNfTENEPXkKLUNPTkZJR19GQl9BVFlfWExfSU5JVD15Ci1DT05GSUdfRkJfQVRZX0dYPXkKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAogIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0Ci1DT05GSUdfRkJfM0RGWD15Ci0jIENPTkZJR19GQl8zREZYX0FDQ0VMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCXzNERlggaXMgbm90IHNldAogIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9UUklERU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQogQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CiBDT05GSUdfRk9OVF84eDg9eQogQ09ORklHX0ZPTlRfOHgxNj15CkBAIC0xMDgwLDggKzEwNjgsNiBAQAogIyBTb3VuZAogIwogQ09ORklHX1NPVU5EPW0KLUNPTkZJR19ETUFTT1VORF9QTUFDPW0KLUNPTkZJR19ETUFTT1VORD1tCiAKICMKICMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCkBAIC0xMDk2LDEwICsxMDgyLDEzIEBACiBDT05GSUdfU05EX09TU0VNVUw9eQogQ09ORklHX1NORF9NSVhFUl9PU1M9bQogQ09ORklHX1NORF9QQ01fT1NTPW0KK0NPTkZJR19TTkRfUENNX09TU19QTFVHSU5TPXkKIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUz15CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CiAjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19TTkRfR0VORVJJQ19QTT15CiAKICMKICMgR2VuZXJpYyBkZXZpY2VzCkBAIC0xMTE2LDcgKzExMDUsOSBAQAogIyBJU0EgZGV2aWNlcwogIwogQ09ORklHX1NORF9DUzQyMzFfTElCPW0KKyMgQ09ORklHX1NORF9BRExJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUQxODQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUk4MzMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9DUzQyMzEgaXMgbm90IHNldAogQ09ORklHX1NORF9DUzQyMzI9bQogIyBDT05GSUdfU05EX0NTNDIzNiBpcyBub3Qgc2V0CkBAIC0xMTI1LDIzICsxMTE2LDI0IEBACiAjIENPTkZJR19TTkRfR1VTQ0xBU1NJQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfR1VTRVhUUkVNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfR1VTTUFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9JTlRFUldBVkUgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0lOVEVSV0FWRV9TVEIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNTQTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX09QVEk5MlhfQUQxODQ4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9PUFRJOTJYX0NTNDIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT1BUSTkzWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU0I4IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TQjE2IGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TQkFXRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfV0FWRUZST05UIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUk4MzMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9PUEwzU0EyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TR0FMQVhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9TU0NBUEUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1dBVkVGUk9OVCBpcyBub3Qgc2V0CiAKICMKICMgUENJIGRldmljZXMKICMKKyMgQ09ORklHX1NORF9BRDE4ODkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FMUzMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQUxTNDAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQUxJNTQ1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVRJSVhQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9BVElJWFBfTU9ERU0gaXMgbm90IHNldApAQCAtMTE1MCw0MyArMTE0Miw2MSBAQAogIyBDT05GSUdfU05EX0FVODgzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQVpUMzMyOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfQlQ4N1ggaXMgbm90IHNldAotIyBDT05GSUdfU05EX0NTNDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0NTNDI4MSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfQ1M0NlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EQVJMQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9HSU5BMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0xBWUxBMjAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RBUkxBMjQgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0dJTkEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTEFZTEEyNCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTU9OQSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FQ0hPM0cgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSU5ESUdPSU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0lORElHT0RKIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9FTVUxMEsxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfQ0EwMTA2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9LT1JHMTIxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfUk1FMzIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX1JNRTk2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9STUU5NjUyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9IRFNQTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9BTFM0MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9DTUlQQ0kgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzAgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VOUzEzNzEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0VTMTkzOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRVMxOTY4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfRk04MDEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSERTUE0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MTIgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lDRTE3MjQgaXMgbm90IHNldAogIyBDT05GSUdfU05EX0lOVEVMOFgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9JTlRFTDhYME0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX0tPUkcxMjEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTUlYQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9OTTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENYSFIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JJUFRJREUgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JNRTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9STUU5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUk1FOTY1MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVFJJREVOVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVklBODJYWF9NT0RFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfVlgyMjIgaXMgbm90IHNldAotIyBDT05GSUdfU05EX0hEQV9JTlRFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfWU1GUENJIGlzIG5vdCBzZXQKIAogIwogIyBBTFNBIFBvd2VyTWFjIGRldmljZXMKICMKLUNPTkZJR19TTkRfUE9XRVJNQUM9bQorCisjCisjIEFwcGxlIE9uYm9hcmQgQXVkaW8gZHJpdmVyCisjCisjIENPTkZJR19TTkRfQU9BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BT0FfU09VTkRCVVMgaXMgbm90IHNldAogCiAjCiAjIFVTQiBkZXZpY2VzCkBAIC0xMjA0LDYgKzEyMTQsNyBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKICMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CiAKQEAgLTEyMjIsNiArMTIzMyw3IEBACiBDT05GSUdfVVNCX0VIQ0lfSENEPW0KIENPTkZJR19VU0JfRUhDSV9TUExJVF9JU089eQogQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX09IQ0lfSENEPXkKICMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldApAQCAtMTIzMiwxNCArMTI0NCwxNSBAQAogIwogIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKICMKLSMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQkxVRVRPT1RIX1RUWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfTUlESSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0FDTT1tCiBDT05GSUdfVVNCX1BSSU5URVI9bQogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKKyMgbWF5IGFsc28gYmUgbmVlZGVkOyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgogIwogQ09ORklHX1VTQl9TVE9SQUdFPW0KICMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTEyNTEsMTIgKzEyNjQsMTUgQEAKIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDk9eQogQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NT15CiBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1Q9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CiAKICMKICMgVVNCIElucHV0IERldmljZXMKICMKIENPTkZJR19VU0JfSElEPXkKIENPTkZJR19VU0JfSElESU5QVVQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAogQ09ORklHX1VTQl9ISURERVY9eQogIyBDT05GSUdfVVNCX0FJUFRFSyBpcyBub3Qgc2V0CkBAIC0xMjY0LDEyICsxMjgwLDEzIEBACiAjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAogCiAjCiAjIFVTQiBJbWFnaW5nIGRldmljZXMKQEAgLTEyNzgsMTUgKzEyOTUsNiBAQAogIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKIAogIwotIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKLQotIwotIyBWaWRlbzRMaW51eCBzdXBwb3J0IGlzIG5lZWRlZCBmb3IgVVNCIE11bHRpbWVkaWEgZGV2aWNlIHN1cHBvcnQKLSMKLQotIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldApAQCAtMTI5NCw3ICsxMzAyLDYgQEAKIENPTkZJR19VU0JfUEVHQVNVUz1tCiAjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CiAKICMKQEAgLTEzMDgsNiArMTMxNSw3IEBACiBDT05GSUdfVVNCX1NFUklBTD1tCiAjIENPTkZJR19VU0JfU0VSSUFMX0dFTkVSSUMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9BSVJQUklNRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FSSzMxMTYgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9ESUdJX0FDQ0VMRVBPUlQgaXMgbm90IHNldApAQCAtMTMxNSw2ICsxMzIzLDcgQEAKICMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9GVU5TT0ZUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU0VSSUFMX1ZJU09SPW0KICMgQ09ORklHX1VTQl9TRVJJQUxfSVBBUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0VSSUFMX0lSIGlzIG5vdCBzZXQKQEAgLTEzMzksOSArMTM0OCwxMSBAQAogIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9OQVZNQU4gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9QTDIzMDMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9IUDRYIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfU0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NJRVJSQVdJUkVMRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldApAQCAtMTM1OSwxMCArMTM3MCwxMiBAQAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CkBAIC0xMzgyLDEyICsxMzk1LDQzIEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBJbmZpbmlCYW5kIHN1cHBvcnQKICMKICMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAogCiAjCi0jIFNOIERldmljZXMKKyMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCisjCisKKyMKKyMgUmVhbCBUaW1lIENsb2NrCisjCisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCisjIERNQSBFbmdpbmUgc3VwcG9ydAorIworIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0CisKKyMKKyMgRE1BIENsaWVudHMKKyMKKworIworIyBETUEgRGV2aWNlcwogIwogCiAjCkBAIC0xNDE3LDIzICsxNDYxLDIxIEBACiAjIENPTkZJR19KRlNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSkZTX1NUQVRJU1RJQ1MgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKIENPTkZJR19YRlNfRlM9bQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKICMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX1NFQ1VSSVRZPXkKIENPTkZJR19YRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKICMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKIENPTkZJR19ETk9USUZZPXkKICMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfQVVUT0ZTNF9GUz1tCisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC0xNDYwLDEzICsxNTAyLDEwIEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVlBUU19GU19YQVRUUj15Ci1DT05GSUdfREVWUFRTX0ZTX1NFQ1VSSVRZPXkKIENPTkZJR19UTVBGUz15Ci1DT05GSUdfVE1QRlNfWEFUVFI9eQotQ09ORklHX1RNUEZTX1NFQ1VSSVRZPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTE0ODUsNiArMTUyNCw3IEBACiAjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19VRlNfRlM9bQogIyBDT05GSUdfVUZTX0ZTX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayBGaWxlIFN5c3RlbXMKQEAgLTE1MTMsNiArMTU1Myw3IEBACiAjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAogCiAjCiAjIFBhcnRpdGlvbiBUeXBlcwpAQCAtMTUzMiw2ICsxNTczLDcgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtMTU4MiwzMyArMTYyNCw0NCBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiBDT05GSUdfQ1JDX0NDSVRUPXkKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIworQ09ORklHX1RFWFRTRUFSQ0g9eQorQ09ORklHX1RFWFRTRUFSQ0hfS01QPW0KK0NPTkZJR19URVhUU0VBUkNIX0JNPW0KK0NPTkZJR19URVhUU0VBUkNIX0ZTTT1tCitDT05GSUdfUExJU1Q9eQogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKIAogIwogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JXU0VNUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRURfSU5MSU5JTkc9eQorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0JESV9TV0lUQ0ggaXMgbm90IHNldAotQ09ORklHX0JPT1RYX1RFWFQ9eQogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMgYi9hcmNoL3BwYy9rZXJuZWwvbWlzYy5TCmluZGV4IDJmYTAwNzUuLjUwYjRiYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9taXNjLlMKKysrIGIvYXJjaC9wcGMva2VybmVsL21pc2MuUwpAQCAtNzY4LDkxICs3NjgsNiBAQAogCWJkbnoJMDBiCiAJYmxyCiAKLV9HTE9CQUwoX2luc3cpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDIKLQlibGVsci0KLTAwOglsaGJyeAlyNSwwLHIzCi0wMToJZWllaW8KLTAyOglzdGh1CXI1LDIocjQpCi0JSVNZTkNfOHh4Ci0JLnNlY3Rpb24gLmZpeHVwLCJheCIKLTAzOglibHIKLQkudGV4dAotCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCQkuYWxpZ24gMgotCQkubG9uZyAwMGIsIDAzYgotCQkubG9uZyAwMWIsIDAzYgotCQkubG9uZyAwMmIsIDAzYgotCS50ZXh0Ci0JYmRuegkwMGIKLQlibHIKLQotX0dMT0JBTChfb3V0c3cpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDIKLQlibGVsci0KLTAwOglsaHp1CXI1LDIocjQpCi0wMToJZWllaW8KLTAyOglzdGhicngJcjUsMCxyMwotCUlTWU5DXzh4eAotCS5zZWN0aW9uIC5maXh1cCwiYXgiCi0wMzoJYmxyCi0JLnRleHQKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmFsaWduIDIKLQkJLmxvbmcgMDBiLCAwM2IKLQkJLmxvbmcgMDFiLCAwM2IKLQkJLmxvbmcgMDJiLCAwM2IKLQkudGV4dAotCWJkbnoJMDBiCi0JYmxyCi0KLV9HTE9CQUwoX2luc2wpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd2JyeAlyNSwwLHIzCi0wMToJZWllaW8KLTAyOglzdHd1CXI1LDQocjQpCi0JSVNZTkNfOHh4Ci0JLnNlY3Rpb24gLmZpeHVwLCJheCIKLTAzOglibHIKLQkudGV4dAotCS5zZWN0aW9uIF9fZXhfdGFibGUsICJhIgotCQkuYWxpZ24gMgotCQkubG9uZyAwMGIsIDAzYgotCQkubG9uZyAwMWIsIDAzYgotCQkubG9uZyAwMmIsIDAzYgotCS50ZXh0Ci0JYmRuegkwMGIKLQlibHIKLQotX0dMT0JBTChfb3V0c2wpCi0JY21wd2kJMCxyNSwwCi0JbXRjdHIJcjUKLQlzdWJpCXI0LHI0LDQKLQlibGVsci0KLTAwOglsd3p1CXI1LDQocjQpCi0wMToJc3R3YnJ4CXI1LDAscjMKLTAyOgllaWVpbwotCUlTWU5DXzh4eAotCS5zZWN0aW9uIC5maXh1cCwiYXgiCi0wMzoJYmxyCi0JLnRleHQKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCAiYSIKLQkJLmFsaWduIDIKLQkJLmxvbmcgMDBiLCAwM2IKLQkJLmxvbmcgMDFiLCAwM2IKLQkJLmxvbmcgMDJiLCAwM2IKLQkudGV4dAotCWJkbnoJMDBiCi0JYmxyCi0KLV9HTE9CQUwoX19pZGVfbW1faW5zdykKIF9HTE9CQUwoX2luc3dfbnMpCiAJY21wd2kJMCxyNSwwCiAJbXRjdHIJcjUKQEAgLTg3NCw3ICs3ODksNiBAQAogCWJkbnoJMDBiCiAJYmxyCiAKLV9HTE9CQUwoX19pZGVfbW1fb3V0c3cpCiBfR0xPQkFMKF9vdXRzd19ucykKIAljbXB3aQkwLHI1LDAKIAltdGN0cglyNQpAQCAtODk2LDcgKzgxMCw2IEBACiAJYmRuegkwMGIKIAlibHIKIAotX0dMT0JBTChfX2lkZV9tbV9pbnNsKQogX0dMT0JBTChfaW5zbF9ucykKIAljbXB3aQkwLHI1LDAKIAltdGN0cglyNQpAQCAtOTE4LDcgKzgzMSw2IEBACiAJYmRuegkwMGIKIAlibHIKIAotX0dMT0JBTChfX2lkZV9tbV9vdXRzbCkKIF9HTE9CQUwoX291dHNsX25zKQogCWNtcHdpCTAscjUsMAogCW10Y3RyCXI1CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMgYi9hcmNoL3BwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggZDE3MzU0MC4uYzhiNjVjYSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMva2VybmVsL3BwY19rc3ltcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtMTE1LDE3ICsxMTUsOCBAQAogRVhQT1JUX1NZTUJPTChvdXRsKTsKIEVYUE9SVF9TWU1CT0wob3V0c2wpOyovCiAKLUVYUE9SVF9TWU1CT0woX19pZGVfbW1faW5zbCk7Ci1FWFBPUlRfU1lNQk9MKF9faWRlX21tX291dHN3KTsKLUVYUE9SVF9TWU1CT0woX19pZGVfbW1faW5zdyk7Ci1FWFBPUlRfU1lNQk9MKF9faWRlX21tX291dHNsKTsKLQogRVhQT1JUX1NZTUJPTChfaW5zYik7CiBFWFBPUlRfU1lNQk9MKF9vdXRzYik7Ci1FWFBPUlRfU1lNQk9MKF9pbnN3KTsKLUVYUE9SVF9TWU1CT0woX291dHN3KTsKLUVYUE9SVF9TWU1CT0woX2luc2wpOwotRVhQT1JUX1NZTUJPTChfb3V0c2wpOwogRVhQT1JUX1NZTUJPTChfaW5zd19ucyk7CiBFWFBPUlRfU1lNQk9MKF9vdXRzd19ucyk7CiBFWFBPUlRfU1lNQk9MKF9pbnNsX25zKTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9wcGMva2VybmVsL3NldHVwLmMKaW5kZXggYTc0ZjQ2ZC4uNTQ1OGFjNWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC9zZXR1cC5jCkBAIC0xMjcsMTEgKzEyNyw4IEBACiAJcHBjX21kLnJlc3RhcnQoY21kKTsKIH0KIAotdm9pZCBtYWNoaW5lX3Bvd2VyX29mZih2b2lkKQorc3RhdGljIHZvaWQgcHBjX2dlbmVyaWNfcG93ZXJfb2ZmKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX05WUkFNCi0JbnZyYW1fc3luYygpOwotI2VuZGlmCiAJcHBjX21kLnBvd2VyX29mZigpOwogfQogCkBAIC0xNDMsNyArMTQwLDE3IEBACiAJcHBjX21kLmhhbHQoKTsKIH0KIAotdm9pZCAoKnBtX3Bvd2VyX29mZikodm9pZCkgPSBtYWNoaW5lX3Bvd2VyX29mZjsKK3ZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpID0gcHBjX2dlbmVyaWNfcG93ZXJfb2ZmOworCit2b2lkIG1hY2hpbmVfcG93ZXJfb2ZmKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX05WUkFNCisJbnZyYW1fc3luYygpOworI2VuZGlmCisJaWYgKHBtX3Bvd2VyX29mZikKKwkJcG1fcG93ZXJfb2ZmKCk7CisJcHBjX2dlbmVyaWNfcG93ZXJfb2ZmKCk7Cit9CiAKICNpZmRlZiBDT05GSUdfVEFVCiBleHRlcm4gdTMyIGNwdV90ZW1wKHVuc2lnbmVkIGxvbmcgY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC9zbXAtdGJzeW5jLmMgYi9hcmNoL3BwYy9rZXJuZWwvc21wLXRic3luYy5jCmluZGV4IDE1NzY3NTguLmQwY2YzZjggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC9zbXAtdGJzeW5jLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3NtcC10YnN5bmMuYwpAQCAtNDcsOCArNDcsOSBAQAogc21wX2dlbmVyaWNfdGFrZV90aW1lYmFzZSggdm9pZCApCiB7CiAJaW50IGNtZCwgdGJsLCB0YnU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXdoaWxlKCAhcnVubmluZyApCiAJCTsKIAlybWIoKTsKQEAgLTY0LDcgKzY1LDcgQEAKIAkJdGJ1ID0gdGJzeW5jLT50YnU7CiAJCXRic3luYy0+YWNrID0gMDsKIAkJaWYoIGNtZCA9PSBrRXhpdCApCi0JCQlyZXR1cm47CisJCQlicmVhazsKIAogCQlpZiggY21kID09IGtTZXRBbmRUZXN0ICkgewogCQkJd2hpbGUoIHRic3luYy0+aGFuZHNoYWtlICkKQEAgLTc3LDcgKzc4LDcgQEAKIAkJfQogCQllbnRlcl9jb250ZXN0KCB0YnN5bmMtPm1hcmssIC0xICk7CiAJfQotCWxvY2FsX2lycV9lbmFibGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDA5YzY1MjUuLjA5NWZkMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvcHBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC04LDYgKzgsNyBAQAogICAuID0gKyBTSVpFT0ZfSEVBREVSUzsKICAgLmludGVycCA6IHsgKiguaW50ZXJwKSB9CiAgIC5oYXNoICAgICAgICAgIDogeyAqKC5oYXNoKQkJfQorICAuZ251Lmhhc2ggICAgICA6IHsgKiguZ251Lmhhc2gpCX0KICAgLmR5bnN5bSAgICAgICAgOiB7ICooLmR5bnN5bSkJCX0KICAgLmR5bnN0ciAgICAgICAgOiB7ICooLmR5bnN0cikJCX0KICAgLnJlbC50ZXh0ICAgICAgOiB7ICooLnJlbC50ZXh0KQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L21wYzg1NjBfYWRzLmMKaW5kZXggZDkwY2QyNC4uOTRiYWRhZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODU2MF9hZHMuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTYwX2Fkcy5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mc19lbmV0X3BkLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTU4LDYgKzU5LDcxIEBACiAgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCiAgKgogICovCitzdGF0aWMgdm9pZCBpbml0X2ZjY19pb3BvcnRzKHZvaWQpCit7CisJc3RydWN0IGltbWFwICppbW1hcDsKKwlzdHJ1Y3QgaW9fcG9ydCAqaW87CisJdTMyIHRlbXB2YWw7CisKKwlpbW1hcCA9IGNwbTJfaW1tcjsKKworCWlvID0gJmltbWFwLT5pbV9pb3BvcnQ7CisJLyogRkNDMi8zIGFyZSBvbiB0aGUgcG9ydHMgQi9DLiAqLworCXRlbXB2YWwgPSBpbl9iZTMyKCZpby0+aW9wX3BkaXJiKTsKKwl0ZW1wdmFsICY9IH5QQjJfRElSQjA7CisJdGVtcHZhbCB8PSBQQjJfRElSQjE7CisJb3V0X2JlMzIoJmlvLT5pb3BfcGRpcmIsIHRlbXB2YWwpOworCisJdGVtcHZhbCA9IGluX2JlMzIoJmlvLT5pb3BfcHNvcmIpOworCXRlbXB2YWwgJj0gflBCMl9QU09SQjA7CisJdGVtcHZhbCB8PSBQQjJfUFNPUkIxOworCW91dF9iZTMyKCZpby0+aW9wX3Bzb3JiLCB0ZW1wdmFsKTsKKworCXRlbXB2YWwgPSBpbl9iZTMyKCZpby0+aW9wX3BwYXJiKTsKKwl0ZW1wdmFsIHw9IChQQjJfRElSQjAgfCBQQjJfRElSQjEpOworCW91dF9iZTMyKCZpby0+aW9wX3BwYXJiLCB0ZW1wdmFsKTsKKworCXRlbXB2YWwgPSBpbl9iZTMyKCZpby0+aW9wX3BkaXJiKTsKKwl0ZW1wdmFsICY9IH5QQjNfRElSQjA7CisJdGVtcHZhbCB8PSBQQjNfRElSQjE7CisJb3V0X2JlMzIoJmlvLT5pb3BfcGRpcmIsIHRlbXB2YWwpOworCisJdGVtcHZhbCA9IGluX2JlMzIoJmlvLT5pb3BfcHNvcmIpOworCXRlbXB2YWwgJj0gflBCM19QU09SQjA7CisJdGVtcHZhbCB8PSBQQjNfUFNPUkIxOworCW91dF9iZTMyKCZpby0+aW9wX3Bzb3JiLCB0ZW1wdmFsKTsKKworCXRlbXB2YWwgPSBpbl9iZTMyKCZpby0+aW9wX3BwYXJiKTsKKwl0ZW1wdmFsIHw9IChQQjNfRElSQjAgfCBQQjNfRElSQjEpOworCW91dF9iZTMyKCZpby0+aW9wX3BwYXJiLCB0ZW1wdmFsKTsKKworICAgICAgICB0ZW1wdmFsID0gaW5fYmUzMigmaW8tPmlvcF9wZGlyYyk7CisgICAgICAgIHRlbXB2YWwgfD0gUEMzX0RJUkMxOworICAgICAgICBvdXRfYmUzMigmaW8tPmlvcF9wZGlyYywgdGVtcHZhbCk7CisKKyAgICAgICAgdGVtcHZhbCA9IGluX2JlMzIoJmlvLT5pb3BfcHBhcmMpOworICAgICAgICB0ZW1wdmFsIHw9IFBDM19ESVJDMTsKKyAgICAgICAgb3V0X2JlMzIoJmlvLT5pb3BfcHBhcmMsIHRlbXB2YWwpOworCisJLyogUG9ydCBDIGhhcyBjbG9ja3MuLi4uLi4gICovCisJdGVtcHZhbCA9IGluX2JlMzIoJmlvLT5pb3BfcHNvcmMpOworCXRlbXB2YWwgJj0gfihDTEtfVFJYKTsKKwlvdXRfYmUzMigmaW8tPmlvcF9wc29yYywgdGVtcHZhbCk7CisKKwl0ZW1wdmFsID0gaW5fYmUzMigmaW8tPmlvcF9wZGlyYyk7CisJdGVtcHZhbCAmPSB+KENMS19UUlgpOworCW91dF9iZTMyKCZpby0+aW9wX3BkaXJjLCB0ZW1wdmFsKTsKKwl0ZW1wdmFsID0gaW5fYmUzMigmaW8tPmlvcF9wcGFyYyk7CisJdGVtcHZhbCB8PSAoQ0xLX1RSWCk7CisJb3V0X2JlMzIoJmlvLT5pb3BfcHBhcmMsIHRlbXB2YWwpOworCisJLyogQ29uZmlndXJlIFNlcmlhbCBJbnRlcmZhY2UgY2xvY2sgcm91dGluZy4KKwkgKiBGaXJzdCwgIGNsZWFyIGFsbCBGQ0MgYml0cyB0byB6ZXJvLAorCSAqIHRoZW4gc2V0IHRoZSBvbmVzIHdlIHdhbnQuCisJICovCisJaW1tYXAtPmltX2NwbXV4LmNteF9mY3IgJj0gfihDUE1VWF9DTEtfTUFTSyk7CisJaW1tYXAtPmltX2NwbXV4LmNteF9mY3IgfD0gQ1BNVVhfQ0xLX1JPVVRFOworfQogCiBzdGF0aWMgdm9pZCBfX2luaXQKIG1wYzg1NjBhZHNfc2V0dXBfYXJjaCh2b2lkKQpAQCAtNjYsNiArMTMyLDcgQEAKIAl1bnNpZ25lZCBpbnQgZnJlcTsKIAlzdHJ1Y3QgZ2lhbmZhcl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgZ2lhbmZhcl9tZGlvX2RhdGEgKm1kYXRhOworCXN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGk7CiAKIAljcG0yX3Jlc2V0KCk7CiAKQEAgLTExMCw2ICsxNzcsMjggQEAKIAkJbWVtY3B5KHBkYXRhLT5tYWNfYWRkciwgYmluZm8tPmJpX2VuZXQxYWRkciwgNik7CiAJfQogCisJaW5pdF9mY2NfaW9wb3J0cygpOworCXBwY19zeXNfZGV2aWNlX3JlbW92ZShNUEM4NXh4X0NQTV9GQ0MxKTsKKworCWZwaSA9IChzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqKSBwcGNfc3lzX2dldF9wZGF0YShNUEM4NXh4X0NQTV9GQ0MyKTsKKwlpZiAoZnBpKSB7CisJCW1lbWNweShmcGktPm1hY2FkZHIsIGJpbmZvLT5iaV9lbmV0MmFkZHIsIDYpOworCQlmcGktPmJ1c19pZCA9ICIwOjAyIjsKKwkJZnBpLT5waHlfYWRkciA9IDI7CisJCWZwaS0+ZHByYW1fb2Zmc2V0ID0gKHUzMiljcG0yX2ltbXItPmltX2RwcmFtYmFzZTsKKwkJZnBpLT5mY2NfcmVnc19jID0gKHUzMikmY3BtMl9pbW1yLT5pbV9mY2NfY1sxXTsKKwl9CisKKwlmcGkgPSAoc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKikgcHBjX3N5c19nZXRfcGRhdGEoTVBDODV4eF9DUE1fRkNDMyk7CisJaWYgKGZwaSkgeworCQltZW1jcHkoZnBpLT5tYWNhZGRyLCBiaW5mby0+YmlfZW5ldDJhZGRyLCA2KTsKKwkJZnBpLT5tYWNhZGRyWzVdICs9IDE7CisJCWZwaS0+YnVzX2lkID0gIjA6MDMiOworCQlmcGktPnBoeV9hZGRyID0gMzsKKwkJZnBpLT5kcHJhbV9vZmZzZXQgPSAodTMyKWNwbTJfaW1tci0+aW1fZHByYW1iYXNlOworCQlmcGktPmZjY19yZWdzX2MgPSAodTMyKSZjcG0yX2ltbXItPmltX2ZjY19jWzJdOworCX0KKwogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAogCWlmIChpbml0cmRfc3RhcnQpCiAJCVJPT1RfREVWID0gUm9vdF9SQU0wOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkc19jb21tb24uaAppbmRleCBhYmYzMjI4MS4uYzhjMzIyZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHNfY29tbW9uLmgKQEAgLTQ1LDQgKzQ1LDIzIEBACiAKICNkZWZpbmUgTVBDODVYWF9QQ0kxX0lPX1NJWkUJMHgwMTAwMDAwMAogCisvKiBGQ0MxIENsb2NrIFNvdXJjZSBDb25maWd1cmF0aW9uLiAgVGhlc2UgY2FuIGJlCisgKiByZWRlZmluZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljIGZpbGUuCisgKiAgICBDYW4gb25seSBjaG9vc2UgZnJvbSBDTEs5LTEyICovCisjZGVmaW5lIEYxX1JYQ0xLICAgICAgIDEyCisjZGVmaW5lIEYxX1RYQ0xLICAgICAgIDExCisKKy8qIEZDQzIgQ2xvY2sgU291cmNlIENvbmZpZ3VyYXRpb24uICBUaGVzZSBjYW4gYmUKKyAqIHJlZGVmaW5lZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMgZmlsZS4KKyAqICAgIENhbiBvbmx5IGNob29zZSBmcm9tIENMSzEzLTE2ICovCisjZGVmaW5lIEYyX1JYQ0xLICAgICAgIDEzCisjZGVmaW5lIEYyX1RYQ0xLICAgICAgIDE0CisKKy8qIEZDQzMgQ2xvY2sgU291cmNlIENvbmZpZ3VyYXRpb24uICBUaGVzZSBjYW4gYmUKKyAqIHJlZGVmaW5lZCBpbiB0aGUgYm9hcmQgc3BlY2lmaWMgZmlsZS4KKyAqICAgIENhbiBvbmx5IGNob29zZSBmcm9tIENMSzEzLTE2ICovCisjZGVmaW5lIEYzX1JYQ0xLICAgICAgIDE1CisjZGVmaW5lIEYzX1RYQ0xLICAgICAgIDE2CisKKwogI2VuZGlmCQkJCS8qIF9fTUFDSF9NUEM4NVhYX0FEU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaAppbmRleCBjN2Q2MWNmMy4uZTVlMTU2ZiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuaApAQCAtMTQsNiArMTQsNyBAQAogI2RlZmluZSBfX01BQ0hfU0JDODU2MF9IX18KICAKICNpbmNsdWRlIDxwbGF0Zm9ybXMvODV4eC9zYmM4NXh4Lmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiAjZGVmaW5lIENQTV9NQVBfQUREUiAgICAoQ0NTUkJBUiArIE1QQzg1eHhfQ1BNX09GRlNFVCkKICAKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguaCBiL2FyY2gvcHBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1eHguaAppbmRleCAyMWVhN2E1Li41MWRmNGRjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NXh4LmgKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zLzg1eHgvc2JjODV4eC5oCkBAIC00OSw0ICs0OSwyMiBAQAogCiAjZGVmaW5lIE1QQzg1WFhfUENJMV9JT19TSVpFCTB4MDEwMDAwMDAKIAorLyogRkNDMSBDbG9jayBTb3VyY2UgQ29uZmlndXJhdGlvbi4gIFRoZXNlIGNhbiBiZQorICogcmVkZWZpbmVkIGluIHRoZSBib2FyZCBzcGVjaWZpYyBmaWxlLgorICogICAgQ2FuIG9ubHkgY2hvb3NlIGZyb20gQ0xLOS0xMiAqLworI2RlZmluZSBGMV9SWENMSyAgICAgICAxMgorI2RlZmluZSBGMV9UWENMSyAgICAgICAxMQorCisvKiBGQ0MyIENsb2NrIFNvdXJjZSBDb25maWd1cmF0aW9uLiAgVGhlc2UgY2FuIGJlCisgKiByZWRlZmluZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljIGZpbGUuCisgKiAgICBDYW4gb25seSBjaG9vc2UgZnJvbSBDTEsxMy0xNiAqLworI2RlZmluZSBGMl9SWENMSyAgICAgICAxMworI2RlZmluZSBGMl9UWENMSyAgICAgICAxNAorCisvKiBGQ0MzIENsb2NrIFNvdXJjZSBDb25maWd1cmF0aW9uLiAgVGhlc2UgY2FuIGJlCisgKiByZWRlZmluZWQgaW4gdGhlIGJvYXJkIHNwZWNpZmljIGZpbGUuCisgKiAgICBDYW4gb25seSBjaG9vc2UgZnJvbSBDTEsxMy0xNiAqLworI2RlZmluZSBGM19SWENMSyAgICAgICAxNQorI2RlZmluZSBGM19UWENMSyAgICAgICAxNgorCiAjZW5kaWYgLyogX19QTEFURk9STVNfODVYWF9TQkM4NVhYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4MjcyYWRzX3NldHVwLmMKaW5kZXggYWJiNzE1NC4uMmEzNWZlMiAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzgyNzJhZHNfc2V0dXAuYworKysgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODI3MmFkc19zZXR1cC5jCkBAIC01Niw2NCArNTYsNTEgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmc19taWlfYnVzX2luZm8gbWlpX2J1c19pbmZvID0gewotCS5tZXRob2QgICAgICAgICAgICAgICAgID0gZnNtaWlfYml0YmFuZywKLQkuaWQgICAgICAgICAgICAgICAgICAgICA9IDAsCi0JLmkuYml0YmFuZyA9IHsKLQkJLm1kaW9fcG9ydAk9IGZzaW9wX3BvcnRjLAotCQkubWRpb19iaXQJPSAxOCwKLQkJLm1kY19wb3J0CT0gZnNpb3BfcG9ydGMsCi0JCS5tZGNfYml0CT0gMTksCi0JCS5kZWxheQkJPSAxLAorc3RhdGljIHN0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbyBtODJ4eF9taWlfYmJfcGRhdGEgPSB7CisJLm1kaW9fZGF0LmJpdAk9IDE4LAorCS5tZGlvX2Rpci5iaXQJPSAxOCwKKwkubWRjX2RhdC5iaXQJPSAxOSwKKwkuZGVsYXkJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBtcGM4Mnh4X2VuZXRfcGRhdGFbXSA9IHsKKwlbZnNpZF9mY2MxXSA9IHsKKwkJLmZzX25vCQk9IGZzaWRfZmNjMSwKKwkJLmNwX3BhZ2UJPSBDUE1fQ1JfRkNDMV9QQUdFLAorCQkuY3BfYmxvY2sgCT0gQ1BNX0NSX0ZDQzFfU0JMT0NLLAorCisJCS5jbGtfdHJ4IAk9IChQQ19GMVJYQ0xLIHwgUENfRjFUWENMSyksCisJCS5jbGtfcm91dGUJPSBDTVgxX0NMS19ST1VURSwKKwkJLmNsa19tYXNrCT0gQ01YMV9DTEtfTUFTSywKKwkJLmluaXRfaW9wb3J0cyAJPSBpbml0X2ZjYzFfaW9wb3J0cywKKworCQkubWVtX29mZnNldAk9IEZDQzFfTUVNX09GRlNFVCwKKworCQkucnhfcmluZwk9IDMyLAorCQkudHhfcmluZwk9IDMyLAorCQkucnhfY29weWJyZWFrCT0gMjQwLAorCQkudXNlX25hcGkJPSAwLAorCQkubmFwaV93ZWlnaHQJPSAxNywKKwkJLmJ1c19pZAkJPSAiMDowMCIsCiAJfSwKLX07CisJW2ZzaWRfZmNjMl0gPSB7CisJCS5mc19ubwkJPSBmc2lkX2ZjYzIsCisJCS5jcF9wYWdlCT0gQ1BNX0NSX0ZDQzJfUEFHRSwKKwkJLmNwX2Jsb2NrIAk9IENQTV9DUl9GQ0MyX1NCTE9DSywKKwkJLmNsa190cnggCT0gKFBDX0YyUlhDTEsgfCBQQ19GMlRYQ0xLKSwKKwkJLmNsa19yb3V0ZQk9IENNWDJfQ0xLX1JPVVRFLAorCQkuY2xrX21hc2sJPSBDTVgyX0NMS19NQVNLLAorCQkuaW5pdF9pb3BvcnRzCT0gaW5pdF9mY2MyX2lvcG9ydHMsCiAKLXN0YXRpYyBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBtcGM4Mnh4X2ZjYzFfcGRhdGEgPSB7Ci0JLmZzX25vCQk9IGZzaWRfZmNjMSwKLQkuY3BfcGFnZQk9IENQTV9DUl9GQ0MxX1BBR0UsCi0JLmNwX2Jsb2NrIAk9IENQTV9DUl9GQ0MxX1NCTE9DSywKLQkuY2xrX3RyeCAJPSAoUENfRjFSWENMSyB8IFBDX0YxVFhDTEspLAotCS5jbGtfcm91dGUJPSBDTVgxX0NMS19ST1VURSwKLQkuY2xrX21hc2sJPSBDTVgxX0NMS19NQVNLLAotCS5pbml0X2lvcG9ydHMgCT0gaW5pdF9mY2MxX2lvcG9ydHMsCisJCS5tZW1fb2Zmc2V0CT0gRkNDMl9NRU1fT0ZGU0VULAogCi0JLnBoeV9hZGRyCT0gMCwKLSNpZmRlZiBQSFlfSU5URVJSVVBUCi0JLnBoeV9pcnEJPSBQSFlfSU5URVJSVVBULAotI2Vsc2UKLQkucGh5X2lycQk9IC0xOwotI2VuZGlmCi0JLm1lbV9vZmZzZXQJPSBGQ0MxX01FTV9PRkZTRVQsCi0JLmJ1c19pbmZvCT0gJm1paV9idXNfaW5mbywKLQkucnhfcmluZwk9IDMyLAotCS50eF9yaW5nCT0gMzIsCi0JLnJ4X2NvcHlicmVhawk9IDI0MCwKLQkudXNlX25hcGkJPSAwLAotCS5uYXBpX3dlaWdodAk9IDE3LAotfTsKLQotc3RhdGljIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvIG1wYzgyeHhfZmNjMl9wZGF0YSA9IHsKLQkuZnNfbm8JCT0gZnNpZF9mY2MyLAotCS5jcF9wYWdlCT0gQ1BNX0NSX0ZDQzJfUEFHRSwKLQkuY3BfYmxvY2sgCT0gQ1BNX0NSX0ZDQzJfU0JMT0NLLAotCS5jbGtfdHJ4IAk9IChQQ19GMlJYQ0xLIHwgUENfRjJUWENMSyksCi0JLmNsa19yb3V0ZQk9IENNWDJfQ0xLX1JPVVRFLAotCS5jbGtfbWFzawk9IENNWDJfQ0xLX01BU0ssCi0JLmluaXRfaW9wb3J0cwk9IGluaXRfZmNjMl9pb3BvcnRzLAotCi0JLnBoeV9hZGRyCT0gMywKLSNpZmRlZiBQSFlfSU5URVJSVVBUCi0JLnBoeV9pcnEJPSBQSFlfSU5URVJSVVBULAotI2Vsc2UKLQkucGh5X2lycQk9IC0xOwotI2VuZGlmCi0JLm1lbV9vZmZzZXQJPSBGQ0MyX01FTV9PRkZTRVQsCi0JLmJ1c19pbmZvCT0gJm1paV9idXNfaW5mbywKLQkucnhfcmluZwk9IDMyLAotCS50eF9yaW5nCT0gMzIsCi0JLnJ4X2NvcHlicmVhawk9IDI0MCwKLQkudXNlX25hcGkJPSAwLAotCS5uYXBpX3dlaWdodAk9IDE3LAorCQkucnhfcmluZwk9IDMyLAorCQkudHhfcmluZwk9IDMyLAorCQkucnhfY29weWJyZWFrCT0gMjQwLAorCQkudXNlX25hcGkJPSAwLAorCQkubmFwaV93ZWlnaHQJPSAxNywKKwkJLmJ1c19pZAkJPSAiMDowMyIsCisJfSwKIH07CiAKIHN0YXRpYyB2b2lkIGluaXRfZmNjMV9pb3BvcnRzKHZvaWQpCkBAIC0yMDksMjAgKzE5NiwyMSBAQAogCWJkX3QqIGJpID0gKHZvaWQqKV9fcmVzOwogCWludCBmc19ubyA9IGZzaWRfZmNjMStwZGV2LT5pZC0xOwogCi0JbXBjODJ4eF9mY2MxX3BkYXRhLmRwcmFtX29mZnNldCA9IG1wYzgyeHhfZmNjMl9wZGF0YS5kcHJhbV9vZmZzZXQgPSAodTMyKWNwbTJfaW1tci0+aW1fZHByYW1iYXNlOwotCW1wYzgyeHhfZmNjMV9wZGF0YS5mY2NfcmVnc19jID0gbXBjODJ4eF9mY2MyX3BkYXRhLmZjY19yZWdzX2MgPSAodTMyKWNwbTJfaW1tci0+aW1fZmNjX2M7Ci0KLQlzd2l0Y2goZnNfbm8pIHsKLQkJY2FzZSBmc2lkX2ZjYzE6Ci0JCQltZW1jcHkoJm1wYzgyeHhfZmNjMV9wZGF0YS5tYWNhZGRyLGJpLT5iaV9lbmV0YWRkciw2KTsKLQkJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gJm1wYzgyeHhfZmNjMV9wZGF0YTsKLQkJYnJlYWs7Ci0JCWNhc2UgZnNpZF9mY2MyOgotCQkJbWVtY3B5KCZtcGM4Mnh4X2ZjYzJfcGRhdGEubWFjYWRkcixiaS0+YmlfZW5ldGFkZHIsNik7Ci0JCQltcGM4Mnh4X2ZjYzJfcGRhdGEubWFjYWRkcls1XSBePSAxOwotCQkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmbXBjODJ4eF9mY2MyX3BkYXRhOwotCQlicmVhazsKKwlpZihmc19ubyA+IEFSUkFZX1NJWkUobXBjODJ4eF9lbmV0X3BkYXRhKSkgeworCQlyZXR1cm47CiAJfQorCisJbXBjODJ4eF9lbmV0X3BkYXRhW2ZzX25vXS5kcHJhbV9vZmZzZXQ9CisJCQkodTMyKWNwbTJfaW1tci0+aW1fZHByYW1iYXNlOworCW1wYzgyeHhfZW5ldF9wZGF0YVtmc19ub10uZmNjX3JlZ3NfYyA9CisJCQkodTMyKWNwbTJfaW1tci0+aW1fZmNjX2M7CisJbWVtY3B5KCZtcGM4Mnh4X2VuZXRfcGRhdGFbZnNfbm9dLm1hY2FkZHIsYmktPmJpX2VuZXRhZGRyLDYpOworCisJLyogcHJldmVudCBkdXAgbWFjICovCisJaWYoZnNfbm8gPT0gZnNpZF9mY2MyKQorCQltcGM4Mnh4X2VuZXRfcGRhdGFbZnNfbm9dLm1hY2FkZHJbNV0gXj0gMTsKKworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gJm1wYzgyeHhfZW5ldF9wZGF0YVtmc19ub107CiB9CiAKIHN0YXRpYyB2b2lkIG1wYzgyNzJhZHNfZml4dXBfdWFydF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LApAQCAtMjc0LDYgKzI2MiwyOSBAQAogCWlvdW5tYXAoaW1tYXApOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjODI3MmFkc19maXh1cF9tZGlvX3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCSAgICAgIGludCBpZHgpCit7CisJbTgyeHhfbWlpX2JiX3BkYXRhLmlycVswXSA9IFBIWV9JTlRFUlJVUFQ7CisJbTgyeHhfbWlpX2JiX3BkYXRhLmlycVsxXSA9IC0xOworCW04Mnh4X21paV9iYl9wZGF0YS5pcnFbMl0gPSAtMTsKKwltODJ4eF9taWlfYmJfcGRhdGEuaXJxWzNdID0gUEhZX0lOVEVSUlVQVDsKKwltODJ4eF9taWlfYmJfcGRhdGEuaXJxWzMxXSA9IC0xOworCisKKwltODJ4eF9taWlfYmJfcGRhdGEubWRpb19kYXQub2Zmc2V0ID0KKwkJCQkodTMyKSZjcG0yX2ltbXItPmltX2lvcG9ydC5pb3BfcGRhdGM7CisKKwltODJ4eF9taWlfYmJfcGRhdGEubWRpb19kaXIub2Zmc2V0ID0KKwkJCQkodTMyKSZjcG0yX2ltbXItPmltX2lvcG9ydC5pb3BfcGRpcmM7CisKKwltODJ4eF9taWlfYmJfcGRhdGEubWRjX2RhdC5vZmZzZXQgPQorCQkJCSh1MzIpJmNwbTJfaW1tci0+aW1faW9wb3J0LmlvcF9wZGF0YzsKKworCisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSAmbTgyeHhfbWlpX2JiX3BkYXRhOworfQorCiBzdGF0aWMgaW50IG1wYzgyNzJhZHNfcGxhdGZvcm1fbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldikKIHsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBsYXRmb3JtX25vdGlmeV9kZXZfbWFwIGRldl9tYXBbXSA9IHsKQEAgLTI4Niw2ICsyOTcsMTAgQEAKIAkJCS5ydG4gPSBtcGM4MjcyYWRzX2ZpeHVwX3VhcnRfcGRhdGEsCiAJCX0sCiAJCXsKKwkJCS5idXNfaWQgPSAiZnNsLWJiLW1kaW8iLAorCQkJLnJ0biA9IG1wYzgyNzJhZHNfZml4dXBfbWRpb19wZGF0YSwKKwkJfSwKKwkJewogCQkJLmJ1c19pZCA9IE5VTEwKIAkJfQogCX07CkBAIC0zMTksNiArMzM0LDcgQEAKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDODJ4eF9DUE1fU0NDNCk7CiAjZW5kaWYKIAorCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4Mnh4X01ESU9fQkIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMgYi9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODY2YWRzX3NldHVwLmMKaW5kZXggZjE5YjYxNi4uZTEyY2VjZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkc19zZXR1cC5jCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4NjZhZHNfc2V0dXAuYwpAQCAtMSwxMCArMSwxMCBAQAotLyphcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzLXNldHVwLmMKKy8qYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg2NmFkcy1zZXR1cC5jCiAgKgotICogUGxhdGZvcm0gc2V0dXAgZm9yIHRoZSBGcmVlc2NhbGUgbXBjODg1YWRzIGJvYXJkCisgKiBQbGF0Zm9ybSBzZXR1cCBmb3IgdGhlIEZyZWVzY2FsZSBtcGM4NjZhZHMgYm9hcmQKICAqCiAgKiBWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDUgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNS0yMDA2IE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQpAQCAtNDIsNDkgKzQyLDM2IEBACiBzdGF0aWMgdm9pZCBzZXR1cF9zbWMxX2lvcG9ydHModm9pZCk7CiBzdGF0aWMgdm9pZCBzZXR1cF9zbWMyX2lvcG9ydHModm9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvIGZlY19taWlfYnVzX2luZm8gPSB7Ci0JLm1ldGhvZCA9IGZzbWlpX2ZlYywKLQkuaWQgPSAwLAotfTsKK3N0YXRpYyBzdHJ1Y3QgZnNfbWlpX2ZlY19wbGF0Zm9ybV9pbmZvCW1wYzh4eF9tZGlvX2ZlY19wZGF0YTsKIAotc3RhdGljIHN0cnVjdCBmc19taWlfYnVzX2luZm8gc2NjX21paV9idXNfaW5mbyA9IHsKLQkubWV0aG9kID0gZnNtaWlfZml4ZWQsCi0JLmlkID0gMCwKLQkuaS5maXhlZC5zcGVlZCA9IDEwLAotCS5pLmZpeGVkLmR1cGxleCA9IDAsCi19Oworc3RhdGljIHN0cnVjdCBmc19taWlfZmVjX3BsYXRmb3JtX2luZm8gbXBjOHh4X21kaW9fZmVjX3BkYXRhOwogCi1zdGF0aWMgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gbXBjOHh4X2ZlY19wZGF0YVtdID0gewotCXsKLQkgLnJ4X3JpbmcgPSAxMjgsCi0JIC50eF9yaW5nID0gMTYsCi0JIC5yeF9jb3B5YnJlYWsgPSAyNDAsCitzdGF0aWMgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gbXBjOHh4X2VuZXRfcGRhdGFbXSA9IHsKKwlbZnNpZF9mZWMxXSA9IHsKKwkJLnJ4X3JpbmcgPSAxMjgsCisJCS50eF9yaW5nID0gMTYsCisJCS5yeF9jb3B5YnJlYWsgPSAyNDAsCiAKLQkgLnVzZV9uYXBpID0gMSwKLQkgLm5hcGlfd2VpZ2h0ID0gMTcsCisJCS51c2VfbmFwaSA9IDEsCisJCS5uYXBpX3dlaWdodCA9IDE3LAogCi0JIC5waHlfYWRkciA9IDE1LAotCSAucGh5X2lycSA9IC0xLAorCQkuaW5pdF9pb3BvcnRzID0gc2V0dXBfZmVjMV9pb3BvcnRzLAogCi0JIC51c2Vfcm1paSA9IDAsCisJCS5idXNfaWQgPSAiMDowZiIsCisJCS5oYXNfcGh5ID0gMSwKKwl9LAorCVtmc2lkX3NjYzFdID0geworCQkucnhfcmluZyA9IDY0LAorCQkudHhfcmluZyA9IDgsCisJCS5yeF9jb3B5YnJlYWsgPSAyNDAsCisJCS51c2VfbmFwaSA9IDEsCisJCS5uYXBpX3dlaWdodCA9IDE3LAogCi0JIC5idXNfaW5mbyA9ICZmZWNfbWlpX2J1c19pbmZvLAotCSB9Ci19OwogCi1zdGF0aWMgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gbXBjOHh4X3NjY19wZGF0YSA9IHsKLQkucnhfcmluZyA9IDY0LAotCS50eF9yaW5nID0gOCwKLQkucnhfY29weWJyZWFrID0gMjQwLAorCQkuaW5pdF9pb3BvcnRzID0gc2V0dXBfc2NjMV9pb3BvcnRzLAogCi0JLnVzZV9uYXBpID0gMSwKLQkubmFwaV93ZWlnaHQgPSAxNywKLQotCS5waHlfYWRkciA9IC0xLAotCS5waHlfaXJxID0gLTEsCi0KLQkuYnVzX2luZm8gPSAmc2NjX21paV9idXNfaW5mbywKLQorCQkuYnVzX2lkID0gImZpeGVkQDEwMDoxIiwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gbXBjODY2X3VhcnRfcGRhdGFbXSA9IHsKQEAgLTIwNyw2MyArMTk0LDYgQEAKIAogfQogCi1zdGF0aWMgdm9pZCBtcGM4NjZhZHNfZml4dXBfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZnNfbm8pCi17Ci0Jc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCi0Jdm9sYXRpbGUgY3BtOHh4X3QgKmNwOwotCWJkX3QgKmJkID0gKGJkX3QgKikgX19yZXM7Ci0JY2hhciAqZTsKLQlpbnQgaTsKLQotCS8qIEdldCBwb2ludGVyIHRvIENvbW11bmljYXRpb24gUHJvY2Vzc29yICovCi0JY3AgPSBjcG1wOwotCXN3aXRjaCAoZnNfbm8pIHsKLQljYXNlIGZzaWRfZmVjMToKLQkJZnBpID0gJm1wYzh4eF9mZWNfcGRhdGFbMF07Ci0JCWZwaS0+aW5pdF9pb3BvcnRzID0gJnNldHVwX2ZlYzFfaW9wb3J0czsKLQotCQlicmVhazsKLQljYXNlIGZzaWRfc2NjMToKLQkJZnBpID0gJm1wYzh4eF9zY2NfcGRhdGE7Ci0JCWZwaS0+aW5pdF9pb3BvcnRzID0gJnNldHVwX3NjYzFfaW9wb3J0czsKLQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9XQVJOSU5HIkRldmljZSAlcyBpcyBub3Qgc3VwcG9ydGVkIVxuIiwgcGRldi0+bmFtZSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGZwaTsKLQlmcGktPmZzX25vID0gZnNfbm87Ci0KLQllID0gKHVuc2lnbmVkIGNoYXIgKikmYmQtPmJpX2VuZXRhZGRyOwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCWZwaS0+bWFjYWRkcltpXSA9ICplKys7Ci0KLQlmcGktPm1hY2FkZHJbNSAtIHBkZXYtPmlkXSsrOwotCi19Ci0KLXN0YXRpYyB2b2lkIG1wYzg2NmFkc19maXh1cF9mZWNfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJCQkgICBpbnQgaWR4KQotewotCS8qIFRoaXMgaXMgZm9yIEZFQyBkZXZpY2VzIG9ubHkgKi8KLQlpZiAoIXBkZXYgfHwgIXBkZXYtPm5hbWUgfHwgKCFzdHJzdHIocGRldi0+bmFtZSwgImZzbC1jcG0tZmVjIikpKQotCQlyZXR1cm47Ci0JbXBjODY2YWRzX2ZpeHVwX2VuZXRfcGRhdGEocGRldiwgZnNpZF9mZWMxICsgcGRldi0+aWQgLSAxKTsKLX0KLQotc3RhdGljIHZvaWQgbXBjODY2YWRzX2ZpeHVwX3NjY19lbmV0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCSAgIGludCBpZHgpCi17Ci0JLyogVGhpcyBpcyBmb3IgU0NDIGRldmljZXMgb25seSAqLwotCWlmICghcGRldiB8fCAhcGRldi0+bmFtZSB8fCAoIXN0cnN0cihwZGV2LT5uYW1lLCAiZnNsLWNwbS1zY2MiKSkpCi0JCXJldHVybjsKLQotCW1wYzg2NmFkc19maXh1cF9lbmV0X3BkYXRhKHBkZXYsIGZzaWRfc2NjMSArIHBkZXYtPmlkIC0gMSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldHVwX3NtYzFfaW9wb3J0cyh2b2lkKQogewogCWltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOwpAQCAtMzE1LDYgKzI0NSw1NiBAQAogCiB9CiAKK3N0YXRpYyBpbnQgbWFfY291bnQgPSAwOworCitzdGF0aWMgdm9pZCBtcGM4NjZhZHNfZml4dXBfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgZnNfbm8pCit7CisJc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaTsKKworCXZvbGF0aWxlIGNwbTh4eF90ICpjcDsKKwliZF90ICpiZCA9IChiZF90ICopIF9fcmVzOworCWNoYXIgKmU7CisJaW50IGk7CisKKwkvKiBHZXQgcG9pbnRlciB0byBDb21tdW5pY2F0aW9uIFByb2Nlc3NvciAqLworCWNwID0gY3BtcDsKKworCWlmKGZzX25vID4gQVJSQVlfU0laRShtcGM4eHhfZW5ldF9wZGF0YSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIk5vIG5ldHdvcmstc3VpdGFibGUgIyVkIGRldmljZSBvbiBidXMiLCBmc19ubyk7CisJCXJldHVybjsKKwl9CisKKworCWZwaSA9ICZtcGM4eHhfZW5ldF9wZGF0YVtmc19ub107CisJZnBpLT5mc19ubyA9IGZzX25vOworCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gZnBpOworCisJZSA9ICh1bnNpZ25lZCBjaGFyICopJmJkLT5iaV9lbmV0YWRkcjsKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQlmcGktPm1hY2FkZHJbaV0gPSAqZSsrOworCisJZnBpLT5tYWNhZGRyWzVdICs9IG1hX2NvdW50Kys7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzg2NmFkc19maXh1cF9mZWNfZW5ldF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQkJCQkgICBpbnQgaWR4KQoreworCS8qIFRoaXMgaXMgZm9yIEZFQyBkZXZpY2VzIG9ubHkgKi8KKwlpZiAoIXBkZXYgfHwgIXBkZXYtPm5hbWUgfHwgKCFzdHJzdHIocGRldi0+bmFtZSwgImZzbC1jcG0tZmVjIikpKQorCQlyZXR1cm47CisJbXBjODY2YWRzX2ZpeHVwX2VuZXRfcGRhdGEocGRldiwgZnNpZF9mZWMxICsgcGRldi0+aWQgLSAxKTsKK30KKworc3RhdGljIHZvaWQgbXBjODY2YWRzX2ZpeHVwX3NjY19lbmV0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCSAgIGludCBpZHgpCit7CisJLyogVGhpcyBpcyBmb3IgU0NDIGRldmljZXMgb25seSAqLworCWlmICghcGRldiB8fCAhcGRldi0+bmFtZSB8fCAoIXN0cnN0cihwZGV2LT5uYW1lLCAiZnNsLWNwbS1zY2MiKSkpCisJCXJldHVybjsKKworCW1wYzg2NmFkc19maXh1cF9lbmV0X3BkYXRhKHBkZXYsIGZzaWRfc2NjMSArIHBkZXYtPmlkIC0gMSk7Cit9CisKIHN0YXRpYyB2b2lkIF9faW5pdCBtcGM4NjZhZHNfZml4dXBfdWFydF9wZGF0YShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZHgpCiB7CkBAIC0zNTksNiArMzM5LDkgQEAKIAogaW50IF9faW5pdCBtcGM4NjZhZHNfaW5pdCh2b2lkKQogeworCWJkX3QgKmJkID0gKGJkX3QgKikgX19yZXM7CisJc3RydWN0IGZzX21paV9mZWNfcGxhdGZvcm1faW5mbyogZm1waTsKKwogCXByaW50ayhLRVJOX05PVElDRSAibXBjODY2YWRzOiBJbml0XG4iKTsKIAogCXBsYXRmb3JtX25vdGlmeSA9IG1wYzg2NmFkc19wbGF0Zm9ybV9ub3RpZnk7CkBAIC0zNjYsMTEgKzM0OSwyMCBAQAogCXBwY19zeXNfZGV2aWNlX2luaXRmdW5jKCk7CiAJcHBjX3N5c19kZXZpY2VfZGlzYWJsZV9hbGwoKTsKIAotI2lmZGVmIE1QQzh4eF9TRUNPTkRfRVRIX1NDQzEKKyNpZmRlZiBDT05GSUdfTVBDOHh4X1NFQ09ORF9FVEhfU0NDMQogCXBwY19zeXNfZGV2aWNlX2VuYWJsZShNUEM4eHhfQ1BNX1NDQzEpOwogI2VuZGlmCiAJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fRkVDMSk7CiAKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X01ESU9fRkVDKTsKKworCWZtcGkgPSBwcGNfc3lzX3BsYXRmb3JtX2RldmljZXNbTVBDOHh4X01ESU9fRkVDXS5kZXYucGxhdGZvcm1fZGF0YSA9CisJCSZtcGM4eHhfbWRpb19mZWNfcGRhdGE7CisKKwlmbXBpLT5taWlfc3BlZWQgPSAoKCgoYmQtPmJpX2ludGZyZXEgKyA0OTk5OTk5KSAvIDI1MDAwMDApIC8gMikgJiAweDNGKSA8PCAxOworCS8qIE5vIFBIWSBpbnRlcnJ1cHQgbGluZSBoZXJlICovCisJZm1waS0+aXJxWzB4Zl0gPSAtMTsKKwogLyogU2luY2UgZWl0aGVyIG9mIHRoZSB1YXJ0cyBjb3VsZCBiZSB1c2VkIGFzIGNvbnNvbGUsIHRoZXkgbmVlZCB0byByZWFkeSAqLwogI2lmZGVmIENPTkZJR19TRVJJQUxfQ1BNX1NNQzEKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMxKTsKQEAgLTM4MSw2ICszNzMsMTQgQEAKIAlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X0NQTV9TTUMyKTsKIAlwcGNfc3lzX2RldmljZV9zZXRmdW5jKE1QQzh4eF9DUE1fU01DMiwgUFBDX1NZU19GVU5DX1VBUlQpOwogI2VuZGlmCisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9NRElPX0ZFQyk7CisKKwlmbXBpID0gcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW01QQzh4eF9NRElPX0ZFQ10uZGV2LnBsYXRmb3JtX2RhdGEgPQorCQkmbXBjOHh4X21kaW9fZmVjX3BkYXRhOworCisJZm1waS0+bWlpX3NwZWVkID0gKCgoKGJkLT5iaV9pbnRmcmVxICsgNDk5OTk5OSkgLyAyNTAwMDAwKSAvIDIpICYgMHgzRikgPDwgMTsKKwkvKiBObyBQSFkgaW50ZXJydXB0IGxpbmUgaGVyZSAqLworCWZtcGktPmlycVsweGZdID0gLTE7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHNfc2V0dXAuYyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9tcGM4ODVhZHNfc2V0dXAuYwppbmRleCBjMWZjNGExLi41ZGZhNGU2IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9wbGF0Zm9ybXMvbXBjODg1YWRzX3NldHVwLmMKKysrIGIvYXJjaC9wcGMvcGxhdGZvcm1zL21wYzg4NWFkc19zZXR1cC5jCkBAIC0zOCw3ICszOCwxMCBAQAogc3RhdGljIHZvaWQgc2V0dXBfc21jMV9pb3BvcnRzKHZvaWQpOwogc3RhdGljIHZvaWQgc2V0dXBfc21jMl9pb3BvcnRzKHZvaWQpOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgbXBjODg1YWRzX3NjY19waHlfaW5pdChjaGFyKTsKK3N0YXRpYyBzdHJ1Y3QgZnNfbWlpX2ZlY19wbGF0Zm9ybV9pbmZvCW1wYzh4eF9tZGlvX2ZlY19wZGF0YTsKK3N0YXRpYyB2b2lkIHNldHVwX2ZlYzFfaW9wb3J0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNldHVwX2ZlYzJfaW9wb3J0cyh2b2lkKTsKK3N0YXRpYyB2b2lkIHNldHVwX3NjYzNfaW9wb3J0cyh2b2lkKTsKIAogc3RhdGljIHN0cnVjdCBmc191YXJ0X3BsYXRmb3JtX2luZm8gbXBjODg1X3VhcnRfcGRhdGFbXSA9IHsKIAlbZnNpZF9zbWMxX3VhcnRdID0gewpAQCAtNjEsMjMgKzY0LDggQEAKICAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvIGZlY19taWlfYnVzX2luZm8gPSB7Ci0JLm1ldGhvZCA9IGZzbWlpX2ZlYywKLQkuaWQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBmc19taWlfYnVzX2luZm8gc2NjX21paV9idXNfaW5mbyA9IHsKLSNpZmRlZiBDT05GSUdfU0NDX0VORVRfOHh4X0ZJWEVECi0JLm1ldGhvZCA9IGZzbWlpX2ZpeGVkLAotI2Vsc2UKLQkubWV0aG9kID0gZnNtaWlfZmVjLAotI2VuZGlmCi0KLQkuaWQgPSAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvIG1wYzh4eF9mZWNfcGRhdGFbXSA9IHsKLQl7CitzdGF0aWMgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gbXBjOHh4X2VuZXRfcGRhdGFbXSA9IHsKKwlbZnNpZF9mZWMxXSA9IHsKIAkgLnJ4X3JpbmcgPSAxMjgsCiAJIC50eF9yaW5nID0gMTYsCiAJIC5yeF9jb3B5YnJlYWsgPSAyNDAsCkBAIC04NSwxMSArNzMsMTIgQEAKIAkgLnVzZV9uYXBpID0gMSwKIAkgLm5hcGlfd2VpZ2h0ID0gMTcsCiAKLQkgLnBoeV9hZGRyID0gMCwKLQkgLnBoeV9pcnEgPSBTSVVfSVJRNywKKwkgLmluaXRfaW9wb3J0cyA9IHNldHVwX2ZlYzFfaW9wb3J0cywKIAotCSAuYnVzX2luZm8gPSAmZmVjX21paV9idXNfaW5mbywKLQkgfSwgeworICAgICAgICAgIC5idXNfaWQgPSAiMDowMCIsCisgICAgICAgICAgLmhhc19waHkgPSAxLAorCSB9LAorCVtmc2lkX2ZlYzJdID0gewogCSAgICAgLnJ4X3JpbmcgPSAxMjgsCiAJICAgICAudHhfcmluZyA9IDE2LAogCSAgICAgLnJ4X2NvcHlicmVhayA9IDI0MCwKQEAgLTk3LDM1ICs4NiwzMiBAQAogCSAgICAgLnVzZV9uYXBpID0gMSwKIAkgICAgIC5uYXBpX3dlaWdodCA9IDE3LAogCi0JICAgICAucGh5X2FkZHIgPSAxLAotCSAgICAgLnBoeV9pcnEgPSBTSVVfSVJRNywKKwkgICAgIC5pbml0X2lvcG9ydHMgPSBzZXR1cF9mZWMyX2lvcG9ydHMsCiAKLQkgICAgIC5idXNfaW5mbyA9ICZmZWNfbWlpX2J1c19pbmZvLAotCSAgICAgfQotfTsKKyAJICAgICAuYnVzX2lkID0gIjA6MDEiLAorIAkgICAgIC5oYXNfcGh5ID0gMSwKKwkgICAgIH0sCisJW2ZzaWRfc2NjM10gPSB7CisJCS5yeF9yaW5nID0gNjQsCisJCS50eF9yaW5nID0gOCwKKwkJLnJ4X2NvcHlicmVhayA9IDI0MCwKIAotc3RhdGljIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvIG1wYzh4eF9zY2NfcGRhdGEgPSB7Ci0JLnJ4X3JpbmcgPSA2NCwKLQkudHhfcmluZyA9IDgsCi0JLnJ4X2NvcHlicmVhayA9IDI0MCwKKwkJLnVzZV9uYXBpID0gMSwKKwkJLm5hcGlfd2VpZ2h0ID0gMTcsCiAKLQkudXNlX25hcGkgPSAxLAotCS5uYXBpX3dlaWdodCA9IDE3LAotCi0JLnBoeV9hZGRyID0gMiwKLSNpZmRlZiBDT05GSUdfTVBDOHh4X1NDQ19FTkVUX0ZJWEVECi0JLnBoeV9pcnEgPSAtMSwKKwkJLmluaXRfaW9wb3J0cyA9IHNldHVwX3NjYzNfaW9wb3J0cywKKyNpZmRlZiBDT05GSUdfRklYRURfTUlJXzEwX0ZEWAorCQkuYnVzX2lkID0gImZpeGVkQDEwMDoxIiwKICNlbHNlCi0JLnBoeV9pcnEgPSBTSVVfSVJRNywKLSNlbmRpZgotCi0JLmJ1c19pbmZvID0gJnNjY19taWlfYnVzX2luZm8sCisJCS5idXNfaWQgPSAiMDowMiIsCisgI2VuZGlmCisJfSwKIH07CiAKIHZvaWQgX19pbml0IGJvYXJkX2luaXQodm9pZCkKIHsKLQl2b2xhdGlsZSBjcG04eHhfdCAqY3AgPSBjcG1wOwotCXVuc2lnbmVkIGludCAqYmNzcl9pbzsKKwljcG04eHhfdCAqY3AgPSBjcG1wOworIAl1bnNpZ25lZCBpbnQgKmJjc3JfaW87CiAKICNpZmRlZiBDT05GSUdfRlNfRU5FVAogCWltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOwpAQCAtMTY0LDYgKzE1MCwxNCBAQAogCS8qIHVzZSBNREMgZm9yIE1JSSAoY29tbW9uKSAqLwogCXNldGJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRwYXIsIDB4MDA4MCk7CiAJY2xyYml0czE2KCZpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciwgMHgwMDgwKTsKKwliY3NyX2lvID0gaW9yZW1hcChCQ1NSNSwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKwljbHJiaXRzMzIoYmNzcl9pbyxCQ1NSNV9NSUkxX0VOKTsKKwljbHJiaXRzMzIoYmNzcl9pbyxCQ1NSNV9NSUkxX1JTVCk7CisjaWZkZWYgQ09ORklHX01QQzh4eF9TRUNPTkRfRVRIX0ZFQzIKKwljbHJiaXRzMzIoYmNzcl9pbyxCQ1NSNV9NSUkyX0VOKTsKKwljbHJiaXRzMzIoYmNzcl9pbyxCQ1NSNV9NSUkyX1JTVCk7CisjZW5kaWYKKwlpb3VubWFwKGJjc3JfaW8pOwogI2VuZGlmCiB9CiAKQEAgLTE5NCw4ICsxODgsOCBAQAogCS8qIGNvbmZpZ3VyZSBGRUMyIHBpbnMgKi8KIAlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGVwYXIsIDB4MDAwM2ZmZmMpOwogCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZWRpciwgMHgwMDAzZmZmYyk7Ci0Jc2V0Yml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3Blc28sIDB4MDAwMzc4MDApOwogCWNscmJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZXNvLCAweDAwMDA4N2ZjKTsKKwlzZXRiaXRzMzIoJmltbWFwLT5pbV9jcG0uY3BfcGVzbywgMHgwMDAzNzgwMCk7CiAJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX2NwdHIsIDB4MDAwMDAwODApOwogfQogCkBAIC0yMTMsNiArMjA3LDggQEAKIAogCS8qIEVuYWJsZSB0aGUgUEhZLgogCSAqLworCWNscmJpdHMzMihiY3NyX2lvKzQsIEJDU1I0X0VUSDEwX1JTVCk7CisJdWRlbGF5KDEwMDApOwogCXNldGJpdHMzMihiY3NyX2lvKzQsIEJDU1I0X0VUSDEwX1JTVCk7CiAJLyogQ29uZmlndXJlIHBvcnQgQSBwaW5zIGZvciBUeGQgYW5kIFJ4ZC4KIAkgKi8KQEAgLTI1NCwzNyArMjUwLDM4IEBACiAJY2xyYml0czMyKCZpbW1hcC0+aW1fY3BtLmNwX3BlZGlyLCBQRV9FTkVUX1RFTkEpOwogCXNldGJpdHMzMigmaW1tYXAtPmltX2NwbS5jcF9wZXNvLCBQRV9FTkVUX1RFTkEpOwogCi0Jc2V0Yml0czMyKGJjc3JfaW8rMSwgQkNTUjFfRVRIRU4pOworCXNldGJpdHMzMihiY3NyX2lvKzQsIEJDU1IxX0VUSEVOKTsKIAlpb3VubWFwKGJjc3JfaW8pOwogfQogCitzdGF0aWMgaW50IG1hY19jb3VudCA9IDA7CisKIHN0YXRpYyB2b2lkIG1wYzg4NWFkc19maXh1cF9lbmV0X3BkYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBmc19ubykKIHsKLQlzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0KLQl2b2xhdGlsZSBjcG04eHhfdCAqY3A7CisgCXN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGk7CiAJYmRfdCAqYmQgPSAoYmRfdCAqKSBfX3JlczsKIAljaGFyICplOwogCWludCBpOwogCi0JLyogR2V0IHBvaW50ZXIgdG8gQ29tbXVuaWNhdGlvbiBQcm9jZXNzb3IgKi8KLQljcCA9IGNwbXA7CisJaWYoZnNfbm8gPiBBUlJBWV9TSVpFKG1wYzh4eF9lbmV0X3BkYXRhKSkgeworCQlwcmludGsoS0VSTl9FUlIiTm8gbmV0d29yay1zdWl0YWJsZSAjJWQgZGV2aWNlIG9uIGJ1cyIsIGZzX25vKTsKKwkJcmV0dXJuOworCX0KKworCWZwaSA9ICZtcGM4eHhfZW5ldF9wZGF0YVtmc19ub107CisKIAlzd2l0Y2ggKGZzX25vKSB7CiAJY2FzZSBmc2lkX2ZlYzE6Ci0JCWZwaSA9ICZtcGM4eHhfZmVjX3BkYXRhWzBdOwogCQlmcGktPmluaXRfaW9wb3J0cyA9ICZzZXR1cF9mZWMxX2lvcG9ydHM7CiAJCWJyZWFrOwogCWNhc2UgZnNpZF9mZWMyOgotCQlmcGkgPSAmbXBjOHh4X2ZlY19wZGF0YVsxXTsKIAkJZnBpLT5pbml0X2lvcG9ydHMgPSAmc2V0dXBfZmVjMl9pb3BvcnRzOwogCQlicmVhazsKIAljYXNlIGZzaWRfc2NjMzoKLQkJZnBpID0gJm1wYzh4eF9zY2NfcGRhdGE7CiAJCWZwaS0+aW5pdF9pb3BvcnRzID0gJnNldHVwX3NjYzNfaW9wb3J0czsKLQkJbXBjODg1YWRzX3NjY19waHlfaW5pdChmcGktPnBoeV9hZGRyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLSAgICAJICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HIkRldmljZSAlcyBpcyBub3Qgc3VwcG9ydGVkIVxuIiwgcGRldi0+bmFtZSk7CisgICAgCSAgICAgICAgcHJpbnRrKEtFUk5fV0FSTklORyAiRGV2aWNlICVzIGlzIG5vdCBzdXBwb3J0ZWQhXG4iLCBwZGV2LT5uYW1lKTsKIAkgICAgICAgIHJldHVybjsKIAl9CiAKQEAgLTI5NSw3ICsyOTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCWZwaS0+bWFjYWRkcltpXSA9ICplKys7CiAKLQlmcGktPm1hY2FkZHJbNSAtIHBkZXYtPmlkXSsrOworCWZwaS0+bWFjYWRkcls1XSArPSBtYWNfY291bnQrKzsKIAogfQogCkBAIC0zMTgsNTggKzMxNSw2IEBACiAJbXBjODg1YWRzX2ZpeHVwX2VuZXRfcGRhdGEocGRldiwgZnNpZF9zY2MxICsgcGRldi0+aWQgLSAxKTsKIH0KIAotLyogU0NDIGV0aGVybmV0IGNvbnRyb2xsZXIgZG9lcyBub3QgaGF2ZSBNSUkgbWFuYWdlbWVudCBjaGFubmVsLiBGRUMxIE1JSQotICogY2hhbm5lbCBpcyB1c2VkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIDEwTWJpdCBQSFkuCi0gKi8KLQotI2RlZmluZSBNSUlfRUNOVFJMX1BJTk1VWCAgICAgICAgMHg0Ci0jZGVmaW5lIEZFQ19FQ05UUkxfUElOTVVYICAgICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIEZFQ19SQ05UUkxfTUlJX01PREUgICAgICAgIDB4MDAwMDAwMDQKLQotLyogTWFrZSBNSUkgcmVhZC93cml0ZSBjb21tYW5kcy4KLSAqLwotI2RlZmluZSBta19taWlfd3JpdGUoUkVHLCBWQUwsIFBIWV9BRERSKSAgICAoMHg1MDAyMDAwMCB8ICgoKFJFRykgJiAweDFmKSA8PCAxOCkgfCBcCi0gICAgICAgICAgICAgICAgKChWQUwpICYgMHhmZmZmKSB8ICgoUEhZX0FERFIpIDw8IDIzKSkKLQotc3RhdGljIHZvaWQgbXBjODg1YWRzX3NjY19waHlfaW5pdChjaGFyIHBoeV9hZGRyKQotewotCXZvbGF0aWxlIGltbWFwX3QgKmltbWFwOwotCXZvbGF0aWxlIGZlY190ICpmZWNwOwotCWJkX3QgKmJkOwotCi0JYmQgPSAoYmRfdCAqKSBfX3JlczsKLQlpbW1hcCA9IChpbW1hcF90ICopIElNQVBfQUREUjsJLyogcG9pbnRlciB0byBpbnRlcm5hbCByZWdpc3RlcnMgKi8KLQlmZWNwID0gJihpbW1hcC0+aW1fY3BtLmNwX2ZlYyk7Ci0KLQkvKiBFbmFibGUgTUlJIHBpbnMgb2YgdGhlIEZFQzEKLQkgKi8KLQlzZXRiaXRzMTYoJmltbWFwLT5pbV9pb3BvcnQuaW9wX3BkcGFyLCAweDAwODApOwotCWNscmJpdHMxNigmaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIsIDB4MDA4MCk7Ci0JLyogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6Ci0JICovCi0Jb3V0X2JlMzIoJmZlY3AtPmZlY19taWlfc3BlZWQsCi0JCSAoKCgoYmQtPmJpX2ludGZyZXEgKyA0OTk5OTk5KSAvIDI1MDAwMDApIC8gMikgJiAweDNGKSA8PCAxKTsKLQotCS8qIEVuYWJsZSBGRUMgcGluIE1VWAotCSAqLwotCXNldGJpdHMzMigmZmVjcC0+ZmVjX2VjbnRybCwgTUlJX0VDTlRSTF9QSU5NVVgpOwotCXNldGJpdHMzMigmZmVjcC0+ZmVjX3JfY250cmwsIEZFQ19SQ05UUkxfTUlJX01PREUpOwotCi0Jb3V0X2JlMzIoJmZlY3AtPmZlY19taWlfZGF0YSwKLQkJIG1rX21paV93cml0ZShNSUlfQk1DUiwgQk1DUl9JU09MQVRFLCBwaHlfYWRkcikpOwotCXVkZWxheSgxMDApOwotCW91dF9iZTMyKCZmZWNwLT5mZWNfbWlpX2RhdGEsCi0JCSBta19taWlfd3JpdGUoTUlJX0FEVkVSVElTRSwKLQkJCSAgICAgIEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfQ1NNQSwgcGh5X2FkZHIpKTsKLQl1ZGVsYXkoMTAwKTsKLQotCS8qIERpc2FibGUgRkVDIE1JSSBzZXR0aW5ncwotCSAqLwotCWNscmJpdHMzMigmZmVjcC0+ZmVjX2VjbnRybCwgTUlJX0VDTlRSTF9QSU5NVVgpOwotCWNscmJpdHMzMigmZmVjcC0+ZmVjX3JfY250cmwsIEZFQ19SQ05UUkxfTUlJX01PREUpOwotCW91dF9iZTMyKCZmZWNwLT5mZWNfbWlpX3NwZWVkLCAwKTsKLX0KLQogc3RhdGljIHZvaWQgc2V0dXBfc21jMV9pb3BvcnRzKHZvaWQpCiB7CiAgICAgICAgIGltbWFwX3QgKmltbWFwID0gKGltbWFwX3QgKikgSU1BUF9BRERSOwpAQCAtNDYyLDYgKzQwNyw5IEBACiAKIGludCBfX2luaXQgbXBjODg1YWRzX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgZnNfbWlpX2ZlY19wbGF0Zm9ybV9pbmZvKiBmbXBpOworCWJkX3QgKmJkID0gKGJkX3QgKikgX19yZXM7CisKIAlwcmludGsoS0VSTl9OT1RJQ0UgIm1wYzg4NWFkczogSW5pdFxuIik7CiAKIAlwbGF0Zm9ybV9ub3RpZnkgPSBtcGM4ODVhZHNfcGxhdGZvcm1fbm90aWZ5OwpAQCAtNDcxLDggKzQxOSwxNyBAQAogCiAJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fRkVDMSk7CiAKKwlwcGNfc3lzX2RldmljZV9lbmFibGUoTVBDOHh4X01ESU9fRkVDKTsKKwlmbXBpID0gcHBjX3N5c19wbGF0Zm9ybV9kZXZpY2VzW01QQzh4eF9NRElPX0ZFQ10uZGV2LnBsYXRmb3JtX2RhdGEgPQorCQkmbXBjOHh4X21kaW9fZmVjX3BkYXRhOworCisJZm1waS0+bWlpX3NwZWVkID0gKCgoKGJkLT5iaV9pbnRmcmVxICsgNDk5OTk5OSkgLyAyNTAwMDAwKSAvIDIpICYgMHgzRikgPDwgMTsKKworCS8qIE5vIFBIWSBpbnRlcnJ1cHQgbGluZSBoZXJlICovCisJZm1waS0+aXJxWzB4Zl0gPSBTSVVfSVJRNzsKKwogI2lmZGVmIENPTkZJR19NUEM4eHhfU0VDT05EX0VUSF9TQ0MzCi0JcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fU0NDMSk7CisJcHBjX3N5c19kZXZpY2VfZW5hYmxlKE1QQzh4eF9DUE1fU0NDMyk7CiAKICNlbmRpZgogI2lmZGVmIENPTkZJR19NUEM4eHhfU0VDT05EX0VUSF9GRUMyCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzX3BkLmggYi9hcmNoL3BwYy9wbGF0Zm9ybXMvcHEyYWRzX3BkLmgKaW5kZXggOGYxNGE0My4uNjcyNDgzZCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvcGxhdGZvcm1zL3BxMmFkc19wZC5oCisrKyBiL2FyY2gvcHBjL3BsYXRmb3Jtcy9wcTJhZHNfcGQuaApAQCAtMjksODYgKzI5LDQgQEAKICNkZWZpbmUgRjNfUlhDTEsJMTMKICNkZWZpbmUgRjNfVFhDTEsJMTQKIAotLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZXMgcmVnaXN0ZXIgY29uZmlndXJhdGlvbnMgKi8KLSNkZWZpbmUgUENfQ0xLKHgpCSgodWludCkoMTw8KHgtMSkpKQkvKiBGQ0MgQ0xLIEkvTyBwb3J0cyAqLwotCi0jZGVmaW5lIENNWEZDUl9SRjFDUyh4KQkoKHVpbnQpKCh4LTUpPDwyNykpCS8qIEZDQzEgUmVjZWl2ZSBDbG9jayBTb3VyY2UgKi8KLSNkZWZpbmUgQ01YRkNSX1RGMUNTKHgpCSgodWludCkoKHgtNSk8PDI0KSkJLyogRkNDMSBUcmFuc21pdCBDbG9jayBTb3VyY2UgKi8KLSNkZWZpbmUgQ01YRkNSX1JGMkNTKHgpCSgodWludCkoKHgtOSk8PDE5KSkJLyogRkNDMiBSZWNlaXZlIENsb2NrIFNvdXJjZSAqLwotI2RlZmluZSBDTVhGQ1JfVEYyQ1MoeCkgKCh1aW50KSgoeC05KTw8MTYpKQkvKiBGQ0MyIFRyYW5zbWl0IENsb2NrIFNvdXJjZSAqLwotI2RlZmluZSBDTVhGQ1JfUkYzQ1MoeCkJKCh1aW50KSgoeC05KTw8MTEpKQkvKiBGQ0MzIFJlY2VpdmUgQ2xvY2sgU291cmNlICovCi0jZGVmaW5lIENNWEZDUl9URjNDUyh4KSAoKHVpbnQpKCh4LTkpPDw4KSkJLyogRkNDMyBUcmFuc21pdCBDbG9jayBTb3VyY2UgKi8KLQotI2RlZmluZSBQQ19GMVJYQ0xLCVBDX0NMSyhGMV9SWENMSykKLSNkZWZpbmUgUENfRjFUWENMSwlQQ19DTEsoRjFfVFhDTEspCi0jZGVmaW5lIENNWDFfQ0xLX1JPVVRFCShDTVhGQ1JfUkYxQ1MoRjFfUlhDTEspIHwgQ01YRkNSX1RGMUNTKEYxX1RYQ0xLKSkKLSNkZWZpbmUgQ01YMV9DTEtfTUFTSwkoKHVpbnQpMHhmZjAwMDAwMCkKLQotI2RlZmluZSBQQ19GMlJYQ0xLCVBDX0NMSyhGMl9SWENMSykKLSNkZWZpbmUgUENfRjJUWENMSwlQQ19DTEsoRjJfVFhDTEspCi0jZGVmaW5lIENNWDJfQ0xLX1JPVVRFCShDTVhGQ1JfUkYyQ1MoRjJfUlhDTEspIHwgQ01YRkNSX1RGMkNTKEYyX1RYQ0xLKSkKLSNkZWZpbmUgQ01YMl9DTEtfTUFTSwkoKHVpbnQpMHgwMGZmMDAwMCkKLQotI2RlZmluZSBQQ19GM1JYQ0xLCVBDX0NMSyhGM19SWENMSykKLSNkZWZpbmUgUENfRjNUWENMSwlQQ19DTEsoRjNfVFhDTEspCi0jZGVmaW5lIENNWDNfQ0xLX1JPVVRFCShDTVhGQ1JfUkYzQ1MoRjNfUlhDTEspIHwgQ01YRkNSX1RGM0NTKEYzX1RYQ0xLKSkKLSNkZWZpbmUgQ01YM19DTEtfTUFTSwkoKHVpbnQpMHgwMDAwZmYwMCkKLQotLyogSS9PIFBpbiBhc3NpZ25tZW50IGZvciBGQ0MxLiAgSSBkb24ndCB5ZXQga25vdyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywKLSAqIGJ1dCB0aGVyZSBpcyBsaXR0bGUgdmFyaWF0aW9uIGFtb25nIHRoZSBjaG9pY2VzLgotICovCi0jZGVmaW5lIFBBMV9DT0wJCTB4MDAwMDAwMDFVCi0jZGVmaW5lIFBBMV9DUlMJCTB4MDAwMDAwMDJVCi0jZGVmaW5lIFBBMV9UWEVSCTB4MDAwMDAwMDRVCi0jZGVmaW5lIFBBMV9UWEVOCTB4MDAwMDAwMDhVCi0jZGVmaW5lIFBBMV9SWERWCTB4MDAwMDAwMTBVCi0jZGVmaW5lIFBBMV9SWEVSCTB4MDAwMDAwMjBVCi0jZGVmaW5lIFBBMV9UWERBVAkweDAwMDAzYzAwVQotI2RlZmluZSBQQTFfUlhEQVQJMHgwMDAzYzAwMFUKLSNkZWZpbmUgUEExX1BTT1JBMAkoUEExX1JYREFUIHwgUEExX1RYREFUKQotI2RlZmluZSBQQTFfUFNPUkExCShQQTFfQ09MIHwgUEExX0NSUyB8IFBBMV9UWEVSIHwgUEExX1RYRU4gfCBcCi0JCVBBMV9SWERWIHwgUEExX1JYRVIpCi0jZGVmaW5lIFBBMV9ESVJBMAkoUEExX1JYREFUIHwgUEExX0NSUyB8IFBBMV9DT0wgfCBQQTFfUlhFUiB8IFBBMV9SWERWKQotI2RlZmluZSBQQTFfRElSQTEJKFBBMV9UWERBVCB8IFBBMV9UWEVOIHwgUEExX1RYRVIpCi0KLQotLyogSS9PIFBpbiBhc3NpZ25tZW50IGZvciBGQ0MyLiAgSSBkb24ndCB5ZXQga25vdyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywKLSAqIGJ1dCB0aGVyZSBpcyBsaXR0bGUgdmFyaWF0aW9uIGFtb25nIHRoZSBjaG9pY2VzLgotICovCi0jZGVmaW5lIFBCMl9UWEVSCTB4MDAwMDAwMDFVCi0jZGVmaW5lIFBCMl9SWERWCTB4MDAwMDAwMDJVCi0jZGVmaW5lIFBCMl9UWEVOCTB4MDAwMDAwMDRVCi0jZGVmaW5lIFBCMl9SWEVSCTB4MDAwMDAwMDhVCi0jZGVmaW5lIFBCMl9DT0wJCTB4MDAwMDAwMTBVCi0jZGVmaW5lIFBCMl9DUlMJCTB4MDAwMDAwMjBVCi0jZGVmaW5lIFBCMl9UWERBVAkweDAwMDAwM2MwVQotI2RlZmluZSBQQjJfUlhEQVQJMHgwMDAwM2MwMFUKLSNkZWZpbmUgUEIyX1BTT1JCMAkoUEIyX1JYREFUIHwgUEIyX1RYREFUIHwgUEIyX0NSUyB8IFBCMl9DT0wgfCBcCi0JCVBCMl9SWEVSIHwgUEIyX1JYRFYgfCBQQjJfVFhFUikKLSNkZWZpbmUgUEIyX1BTT1JCMQkoUEIyX1RYRU4pCi0jZGVmaW5lIFBCMl9ESVJCMAkoUEIyX1JYREFUIHwgUEIyX0NSUyB8IFBCMl9DT0wgfCBQQjJfUlhFUiB8IFBCMl9SWERWKQotI2RlZmluZSBQQjJfRElSQjEJKFBCMl9UWERBVCB8IFBCMl9UWEVOIHwgUEIyX1RYRVIpCi0KLQotLyogSS9PIFBpbiBhc3NpZ25tZW50IGZvciBGQ0MzLiAgSSBkb24ndCB5ZXQga25vdyB0aGUgYmVzdCB3YXkgdG8gZG8gdGhpcywKLSAqIGJ1dCB0aGVyZSBpcyBsaXR0bGUgdmFyaWF0aW9uIGFtb25nIHRoZSBjaG9pY2VzLgotICovCi0jZGVmaW5lIFBCM19SWERWCTB4MDAwMDQwMDBVCi0jZGVmaW5lIFBCM19SWEVSCTB4MDAwMDgwMDBVCi0jZGVmaW5lIFBCM19UWEVSCTB4MDAwMTAwMDBVCi0jZGVmaW5lIFBCM19UWEVOCTB4MDAwMjAwMDBVCi0jZGVmaW5lIFBCM19DT0wJCTB4MDAwNDAwMDBVCi0jZGVmaW5lIFBCM19DUlMJCTB4MDAwODAwMDBVCi0jZGVmaW5lIFBCM19UWERBVAkweDBmMDAwMDAwVQotI2RlZmluZSBQQjNfUlhEQVQJMHgwMGYwMDAwMFUKLSNkZWZpbmUgUEIzX1BTT1JCMAkoUEIzX1JYREFUIHwgUEIzX1RYREFUIHwgUEIzX0NSUyB8IFBCM19DT0wgfCBcCi0JCVBCM19SWEVSIHwgUEIzX1JYRFYgfCBQQjNfVFhFUiB8IFBCM19UWEVOKQotI2RlZmluZSBQQjNfUFNPUkIxCTAKLSNkZWZpbmUgUEIzX0RJUkIwCShQQjNfUlhEQVQgfCBQQjNfQ1JTIHwgUEIzX0NPTCB8IFBCM19SWEVSIHwgUEIzX1JYRFYpCi0jZGVmaW5lIFBCM19ESVJCMQkoUEIzX1RYREFUIHwgUEIzX1RYRU4gfCBQQjNfVFhFUikKLQotI2RlZmluZSBGQ0NfTUVNX09GRlNFVCh4KSAoQ1BNX0ZDQ19TUEVDSUFMX0JBU0UgKyAoeCoxMjgpKQotI2RlZmluZSBGQ0MxX01FTV9PRkZTRVQgRkNDX01FTV9PRkZTRVQoMCkKLSNkZWZpbmUgRkNDMl9NRU1fT0ZGU0VUIEZDQ19NRU1fT0ZGU0VUKDEpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlIGIvYXJjaC9wcGMvc3lzbGliL01ha2VmaWxlCmluZGV4IDI0OTdiYmMuLmRjYTIzZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9NYWtlZmlsZQorKysgYi9hcmNoL3BwYy9zeXNsaWIvTWFrZWZpbGUKQEAgLTkzLDcgKzkzLDcgQEAKIGVuZGlmCiBvYmotJChDT05GSUdfUkFQSURJTykJCSs9IHBwYzg1eHhfcmlvLm8KIG9iai0kKENPTkZJR184M3h4KQkJKz0gcHBjODN4eF9zZXR1cC5vIHBwY19zeXMubyBcCi0JCQkJCW1wYzgzeHhfc3lzLm8gbXBjODN4eF9kZXZpY2VzLm8KKwkJCQkJbXBjODN4eF9zeXMubyBtcGM4M3h4X2RldmljZXMubyBpcGljLm8KIGlmZXEgKCQoQ09ORklHXzgzeHgpLHkpCiBvYmotJChDT05GSUdfUENJKQkJKz0gcGNpX2F1dG8ubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9pcGljLmMgYi9hcmNoL3BwYy9zeXNsaWIvaXBpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ODAxZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3BwYy9zeXNsaWIvaXBpYy5jCkBAIC0wLDAgKzEsNjQ2IEBACisvKgorICogaW5jbHVkZS9hc20tcHBjL2lwaWMuYworICoKKyAqIElQSUMgcm91dGluZXMgaW1wbGVtZW50YXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDA1IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXBpYy5oPgorI2luY2x1ZGUgPGFzbS9tcGM4M3h4Lmg+CisKKyNpbmNsdWRlICJpcGljLmgiCisKK3N0YXRpYyBzdHJ1Y3QgaXBpYyBwX2lwaWM7CitzdGF0aWMgc3RydWN0IGlwaWMgKiBwcmltYXJ5X2lwaWM7CisKK3N0YXRpYyBzdHJ1Y3QgaXBpY19pbmZvIGlwaWNfaW5mb1tdID0geworCVs5XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfRCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMjQsCisJCS5wcmlvX21hc2sgPSAwLAorCX0sCisJWzEwXSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfRCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMjUsCisJCS5wcmlvX21hc2sgPSAxLAorCX0sCisJWzExXSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfRCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMjYsCisJCS5wcmlvX21hc2sgPSAyLAorCX0sCisJWzE0XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfRCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMjksCisJCS5wcmlvX21hc2sgPSA1LAorCX0sCisJWzE1XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfRCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMzAsCisJCS5wcmlvX21hc2sgPSA2LAorCX0sCisJWzE2XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfRCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMzEsCisJCS5wcmlvX21hc2sgPSA3LAorCX0sCisJWzE3XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NFUE5SLAorCQkubWFzawk9IElQSUNfU0VNU1IsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NFRkNSLAorCQkuYml0CT0gMSwKKwkJLnByaW9fbWFzayA9IDUsCisJfSwKKwlbMThdID0geworCQkucGVuZAk9IElQSUNfU0VQTlIsCisJCS5tYXNrCT0gSVBJQ19TRU1TUiwKKwkJLnByaW8JPSBJUElDX1NNUFJSX0EsCisJCS5mb3JjZQk9IElQSUNfU0VGQ1IsCisJCS5iaXQJPSAyLAorCQkucHJpb19tYXNrID0gNiwKKwl9LAorCVsxOV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TRVBOUiwKKwkJLm1hc2sJPSBJUElDX1NFTVNSLAorCQkucHJpbwk9IElQSUNfU01QUlJfQSwKKwkJLmZvcmNlCT0gSVBJQ19TRUZDUiwKKwkJLmJpdAk9IDMsCisJCS5wcmlvX21hc2sgPSA3LAorCX0sCisJWzIwXSA9IHsKKwkJLnBlbmQJPSBJUElDX1NFUE5SLAorCQkubWFzawk9IElQSUNfU0VNU1IsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9CLAorCQkuZm9yY2UJPSBJUElDX1NFRkNSLAorCQkuYml0CT0gNCwKKwkJLnByaW9fbWFzayA9IDQsCisJfSwKKwlbMjFdID0geworCQkucGVuZAk9IElQSUNfU0VQTlIsCisJCS5tYXNrCT0gSVBJQ19TRU1TUiwKKwkJLnByaW8JPSBJUElDX1NNUFJSX0IsCisJCS5mb3JjZQk9IElQSUNfU0VGQ1IsCisJCS5iaXQJPSA1LAorCQkucHJpb19tYXNrID0gNSwKKwl9LAorCVsyMl0gPSB7CisJCS5wZW5kCT0gSVBJQ19TRVBOUiwKKwkJLm1hc2sJPSBJUElDX1NFTVNSLAorCQkucHJpbwk9IElQSUNfU01QUlJfQiwKKwkJLmZvcmNlCT0gSVBJQ19TRUZDUiwKKwkJLmJpdAk9IDYsCisJCS5wcmlvX21hc2sgPSA2LAorCX0sCisJWzIzXSA9IHsKKwkJLnBlbmQJPSBJUElDX1NFUE5SLAorCQkubWFzawk9IElQSUNfU0VNU1IsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9CLAorCQkuZm9yY2UJPSBJUElDX1NFRkNSLAorCQkuYml0CT0gNywKKwkJLnByaW9fbWFzayA9IDcsCisJfSwKKwlbMzJdID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0gsCisJCS5wcmlvCT0gSVBJQ19TSVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0gsCisJCS5iaXQJPSAwLAorCQkucHJpb19tYXNrID0gMCwKKwl9LAorCVszM10gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfSCwKKwkJLnByaW8JPSBJUElDX1NJUFJSX0EsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfSCwKKwkJLmJpdAk9IDEsCisJCS5wcmlvX21hc2sgPSAxLAorCX0sCisJWzM0XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfQSwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gMiwKKwkJLnByaW9fbWFzayA9IDIsCisJfSwKKwlbMzVdID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0gsCisJCS5wcmlvCT0gSVBJQ19TSVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0gsCisJCS5iaXQJPSAzLAorCQkucHJpb19tYXNrID0gMywKKwl9LAorCVszNl0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfSCwKKwkJLnByaW8JPSBJUElDX1NJUFJSX0EsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfSCwKKwkJLmJpdAk9IDQsCisJCS5wcmlvX21hc2sgPSA0LAorCX0sCisJWzM3XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9ILAorCQkucHJpbwk9IElQSUNfU0lQUlJfQSwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9ILAorCQkuYml0CT0gNSwKKwkJLnByaW9fbWFzayA9IDUsCisJfSwKKwlbMzhdID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0gsCisJCS5wcmlvCT0gSVBJQ19TSVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0gsCisJCS5iaXQJPSA2LAorCQkucHJpb19tYXNrID0gNiwKKwl9LAorCVszOV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfSCwKKwkJLnByaW8JPSBJUElDX1NJUFJSX0EsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfSCwKKwkJLmJpdAk9IDcsCisJCS5wcmlvX21hc2sgPSA3LAorCX0sCisJWzQ4XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NFUE5SLAorCQkubWFzawk9IElQSUNfU0VNU1IsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NFRkNSLAorCQkuYml0CT0gMCwKKwkJLnByaW9fbWFzayA9IDQsCisJfSwKKwlbNjRdID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAwLAorCQkucHJpb19tYXNrID0gMCwKKwl9LAorCVs2NV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSBJUElDX1NNUFJSX0EsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKKwkJLmJpdAk9IDEsCisJCS5wcmlvX21hc2sgPSAxLAorCX0sCisJWzY2XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAorCQkucHJpbwk9IElQSUNfU01QUlJfQSwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAorCQkuYml0CT0gMiwKKwkJLnByaW9fbWFzayA9IDIsCisJfSwKKwlbNjddID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9BLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAzLAorCQkucHJpb19tYXNrID0gMywKKwl9LAorCVs2OF0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSBJUElDX1NNUFJSX0IsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKKwkJLmJpdAk9IDQsCisJCS5wcmlvX21hc2sgPSAwLAorCX0sCisJWzY5XSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAorCQkucHJpbwk9IElQSUNfU01QUlJfQiwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAorCQkuYml0CT0gNSwKKwkJLnByaW9fbWFzayA9IDEsCisJfSwKKwlbNzBdID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCisJCS5wcmlvCT0gSVBJQ19TTVBSUl9CLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSA2LAorCQkucHJpb19tYXNrID0gMiwKKwl9LAorCVs3MV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSBJUElDX1NNUFJSX0IsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKKwkJLmJpdAk9IDcsCisJCS5wcmlvX21hc2sgPSAzLAorCX0sCisJWzcyXSA9IHsKKwkJLnBlbmQJPSBJUElDX1NJUE5SX0gsCisJCS5tYXNrCT0gSVBJQ19TSU1TUl9MLAorCQkucHJpbwk9IDAsCisJCS5mb3JjZQk9IElQSUNfU0lGQ1JfTCwKKwkJLmJpdAk9IDgsCisJfSwKKwlbNzNdID0geworCQkucGVuZAk9IElQSUNfU0lQTlJfSCwKKwkJLm1hc2sJPSBJUElDX1NJTVNSX0wsCisJCS5wcmlvCT0gMCwKKwkJLmZvcmNlCT0gSVBJQ19TSUZDUl9MLAorCQkuYml0CT0gOSwKKwl9LAorCVs3NF0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxMCwKKwl9LAorCVs3NV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxMSwKKwl9LAorCVs3Nl0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxMiwKKwl9LAorCVs3N10gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxMywKKwl9LAorCVs3OF0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxNCwKKwl9LAorCVs3OV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxNSwKKwl9LAorCVs4MF0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAxNiwKKwl9LAorCVs4NF0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAyMCwKKwl9LAorCVs4NV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAyMSwKKwl9LAorCVs5MF0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAyNiwKKwl9LAorCVs5MV0gPSB7CisJCS5wZW5kCT0gSVBJQ19TSVBOUl9ILAorCQkubWFzawk9IElQSUNfU0lNU1JfTCwKKwkJLnByaW8JPSAwLAorCQkuZm9yY2UJPSBJUElDX1NJRkNSX0wsCisJCS5iaXQJPSAyNywKKwl9LAorfTsKKworc3RhdGljIGlubGluZSB1MzIgaXBpY19yZWFkKHZvbGF0aWxlIHUzMiBfX2lvbWVtICpiYXNlLCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXJldHVybiBpbl9iZTMyKGJhc2UgKyAocmVnID4+IDIpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlwaWNfd3JpdGUodm9sYXRpbGUgdTMyIF9faW9tZW0gKmJhc2UsIHVuc2lnbmVkIGludCByZWcsIHUzMiB2YWx1ZSkKK3sKKwlvdXRfYmUzMihiYXNlICsgKHJlZyA+PiAyKSwgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGljICogaXBpY19mcm9tX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXJldHVybiBwcmltYXJ5X2lwaWM7Cit9CisKK3N0YXRpYyB2b2lkIGlwaWNfZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpcGljICppcGljID0gaXBpY19mcm9tX2lycShpcnEpOworCXVuc2lnbmVkIGludCBzcmMgPSBpcnEgLSBpcGljLT5pcnFfb2Zmc2V0OworCXUzMiB0ZW1wOworCisJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrKTsKKwl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzaywgdGVtcCk7Cit9CisKK3N0YXRpYyB2b2lkIGlwaWNfZGlzYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxIC0gaXBpYy0+aXJxX29mZnNldDsKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ubWFzayk7CisJdGVtcCAmPSB+KDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrLCB0ZW1wKTsKK30KKworc3RhdGljIHZvaWQgaXBpY19kaXNhYmxlX2lycV9hbmRfYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycSAtIGlwaWMtPmlycV9vZmZzZXQ7CisJdTMyIHRlbXA7CisKKwlpcGljX2Rpc2FibGVfaXJxKGlycSk7CisKKwl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLnBlbmQpOworCXRlbXAgfD0gKDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CisJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5wZW5kLCB0ZW1wKTsKK30KKworc3RhdGljIHZvaWQgaXBpY19lbmRfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCisJCWlwaWNfZW5hYmxlX2lycShpcnEpOworfQorCitzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaXBpYyA9IHsKKwkudHlwZW5hbWUgPSAiIElQSUMgICIsCisJLmVuYWJsZSA9IGlwaWNfZW5hYmxlX2lycSwKKwkuZGlzYWJsZSA9IGlwaWNfZGlzYWJsZV9pcnEsCisJLmFjayA9IGlwaWNfZGlzYWJsZV9pcnFfYW5kX2FjaywKKwkuZW5kID0gaXBpY19lbmRfaXJxLAorfTsKKwordm9pZCBfX2luaXQgaXBpY19pbml0KHBoeXNfYWRkcl90IHBoeXNfYWRkciwKKwkJdW5zaWduZWQgaW50IGZsYWdzLAorCQl1bnNpZ25lZCBpbnQgaXJxX29mZnNldCwKKwkJdW5zaWduZWQgY2hhciAqc2Vuc2VzLAorCQl1bnNpZ25lZCBpbnQgc2Vuc2VzX2NvdW50KQoreworCXUzMiBpLCB0ZW1wID0gMDsKKworCXByaW1hcnlfaXBpYyA9ICZwX2lwaWM7CisJcHJpbWFyeV9pcGljLT5yZWdzID0gaW9yZW1hcChwaHlzX2FkZHIsIE1QQzgzeHhfSVBJQ19TSVpFKTsKKworCXByaW1hcnlfaXBpYy0+aXJxX29mZnNldCA9IGlycV9vZmZzZXQ7CisKKwlpcGljX3dyaXRlKHByaW1hcnlfaXBpYy0+cmVncywgSVBJQ19TSUNOUiwgMHgwKTsKKworCS8qIGRlZmF1bHQgcHJpb3JpdHkgc2NoZW1lIGlzIGdyb3VwZWQuIElmIHNwcmVhZCBtb2RlIGlzIHJlcXVpcmVkCisJICogY29uZmlndXJlIFNJQ0ZSIGFjY29yZGluZ2x5ICovCisJaWYgKGZsYWdzICYgSVBJQ19TUFJFQURNT0RFX0dSUF9BKQorCQl0ZW1wIHw9IFNJQ0ZSX0lQU0E7CisJaWYgKGZsYWdzICYgSVBJQ19TUFJFQURNT0RFX0dSUF9EKQorCQl0ZW1wIHw9IFNJQ0ZSX0lQU0Q7CisJaWYgKGZsYWdzICYgSVBJQ19TUFJFQURNT0RFX01JWF9BKQorCQl0ZW1wIHw9IFNJQ0ZSX01QU0E7CisJaWYgKGZsYWdzICYgSVBJQ19TUFJFQURNT0RFX01JWF9CKQorCQl0ZW1wIHw9IFNJQ0ZSX01QU0I7CisKKwlpcGljX3dyaXRlKHByaW1hcnlfaXBpYy0+cmVncywgSVBJQ19TSUNOUiwgdGVtcCk7CisKKwkvKiBoYW5kbGUgTUNQIHJvdXRlICovCisJdGVtcCA9IDA7CisJaWYgKGZsYWdzICYgSVBJQ19ESVNBQkxFX01DUF9PVVQpCisJCXRlbXAgPSBTRVJDUl9NQ1BSOworCWlwaWNfd3JpdGUocHJpbWFyeV9pcGljLT5yZWdzLCBJUElDX1NFUkNSLCB0ZW1wKTsKKworCS8qIGhhbmRsZSByb3V0aW5nIG9mIElSUTAgdG8gTUNQICovCisJdGVtcCA9IGlwaWNfcmVhZChwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VNU1IpOworCisJaWYgKGZsYWdzICYgSVBJQ19JUlEwX01DUCkKKwkJdGVtcCB8PSBTRU1TUl9TSVJRMDsKKwllbHNlCisJCXRlbXAgJj0gflNFTVNSX1NJUlEwOworCisJaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VNU1IsIHRlbXApOworCisJZm9yIChpID0gMCA7IGkgPCBOUl9JUElDX0lOVFMgOyBpKyspIHsKKwkJaXJxX2Rlc2NbaStpcnFfb2Zmc2V0XS5jaGlwID0gJmlwaWM7CisJCWlycV9kZXNjW2kraXJxX29mZnNldF0uc3RhdHVzID0gSVJRX0xFVkVMOworCX0KKworCXRlbXAgPSAwOworCWZvciAoaSA9IDAgOyBpIDwgc2Vuc2VzX2NvdW50IDsgaSsrKSB7CisJCWlmICgoc2Vuc2VzW2ldICYgSVJRX1NFTlNFX01BU0spID09IElSUV9TRU5TRV9FREdFKSB7CisJCQl0ZW1wIHw9IDEgPDwgKDE1IC0gaSk7CisJCQlpZiAoaSAhPSAwKQorCQkJCWlycV9kZXNjW2kgKyBpcnFfb2Zmc2V0ICsgTVBDODN4eF9JUlFfRVhUMSAtIDFdLnN0YXR1cyA9IDA7CisJCQllbHNlCisJCQkJaXJxX2Rlc2NbaXJxX29mZnNldCArIE1QQzgzeHhfSVJRX0VYVDBdLnN0YXR1cyA9IDA7CisJCX0KKwl9CisJaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VDTlIsIHRlbXApOworCisJcHJpbnRrICgiSVBJQyAoJWQgSVJRIHNvdXJjZXMsICVkIEV4dGVybmFsIElSUXMpIGF0ICVwXG4iLCBOUl9JUElDX0lOVFMsCisJCQlzZW5zZXNfY291bnQsIHByaW1hcnlfaXBpYy0+cmVncyk7Cit9CisKK2ludCBpcGljX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpCit7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBpcGljX2Zyb21faXJxKGlycSk7CisJdW5zaWduZWQgaW50IHNyYyA9IGlycSAtIGlwaWMtPmlycV9vZmZzZXQ7CisJdTMyIHRlbXA7CisKKwlpZiAocHJpb3JpdHkgPiA3KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc3JjID4gMTI3KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoaXBpY19pbmZvW3NyY10ucHJpbyA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10ucHJpbyk7CisKKwlpZiAocHJpb3JpdHkgPCA0KSB7CisJCXRlbXAgJj0gfigweDcgPDwgKDIwICsgKDMgLSBwcmlvcml0eSkgKiAzKSk7CisJCXRlbXAgfD0gaXBpY19pbmZvW3NyY10ucHJpb19tYXNrIDw8ICgyMCArICgzIC0gcHJpb3JpdHkpICogMyk7CisJfSBlbHNlIHsKKwkJdGVtcCAmPSB+KDB4NyA8PCAoNCArICg3IC0gcHJpb3JpdHkpICogMykpOworCQl0ZW1wIHw9IGlwaWNfaW5mb1tzcmNdLnByaW9fbWFzayA8PCAoNCArICg3IC0gcHJpb3JpdHkpICogMyk7CisJfQorCisJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5wcmlvLCB0ZW1wKTsKKworCXJldHVybiAwOworfQorCit2b2lkIGlwaWNfc2V0X2hpZ2hlc3RfcHJpb3JpdHkodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgaXBpYyAqaXBpYyA9IGlwaWNfZnJvbV9pcnEoaXJxKTsKKwl1bnNpZ25lZCBpbnQgc3JjID0gaXJxIC0gaXBpYy0+aXJxX29mZnNldDsKKwl1MzIgdGVtcDsKKworCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgSVBJQ19TSUNGUik7CisKKwkvKiBjbGVhciBhbmQgc2V0IEhQSSAqLworCXRlbXAgJj0gMHg3ZjAwMDAwMDsKKwl0ZW1wIHw9IChzcmMgJiAweDdmKSA8PCAyNDsKKworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TSUNGUiwgdGVtcCk7Cit9CisKK3ZvaWQgaXBpY19zZXRfZGVmYXVsdF9wcmlvcml0eSh2b2lkKQoreworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1RTRUMxX1RYLCAwKTsKKwlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9UU0VDMV9SWCwgMSk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfVFNFQzFfRVJST1IsIDIpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1RTRUMyX1RYLCAzKTsKKwlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9UU0VDMl9SWCwgNCk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfVFNFQzJfRVJST1IsIDUpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1VTQjJfRFIsIDYpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1VTQjJfTVBILCA3KTsKKworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1VBUlQxLCAwKTsKKwlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9VQVJUMiwgMSk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfU0VDMiwgMik7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfSUlDMSwgNSk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfSUlDMiwgNik7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfU1BJLCA3KTsKKwlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9SVENfU0VDLCAwKTsKKwlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9QSVQsIDEpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1BDSTEsIDIpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1BDSTIsIDMpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDAsIDQpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDEsIDUpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDIsIDYpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0VYVDMsIDcpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX1JUQ19BTFIsIDApOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX01VLCAxKTsKKwlpcGljX3NldF9wcmlvcml0eShNUEM4M3h4X0lSUV9TQkEsIDIpOworCWlwaWNfc2V0X3ByaW9yaXR5KE1QQzgzeHhfSVJRX0RNQSwgMyk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNCwgNCk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNSwgNSk7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNiwgNik7CisJaXBpY19zZXRfcHJpb3JpdHkoTVBDODN4eF9JUlFfRVhUNywgNyk7Cit9CisKK3ZvaWQgaXBpY19lbmFibGVfbWNwKGVudW0gaXBpY19tY3BfaXJxIG1jcF9pcnEpCit7CisJc3RydWN0IGlwaWMgKmlwaWMgPSBwcmltYXJ5X2lwaWM7CisJdTMyIHRlbXA7CisKKwl0ZW1wID0gaXBpY19yZWFkKGlwaWMtPnJlZ3MsIElQSUNfU0VSTVIpOworCXRlbXAgfD0gKDEgPDwgKDMxIC0gbWNwX2lycSkpOworCWlwaWNfd3JpdGUoaXBpYy0+cmVncywgSVBJQ19TRVJNUiwgdGVtcCk7Cit9CisKK3ZvaWQgaXBpY19kaXNhYmxlX21jcChlbnVtIGlwaWNfbWNwX2lycSBtY3BfaXJxKQoreworCXN0cnVjdCBpcGljICppcGljID0gcHJpbWFyeV9pcGljOworCXUzMiB0ZW1wOworCisJdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBJUElDX1NFUk1SKTsKKwl0ZW1wICY9ICgxIDw8ICgzMSAtIG1jcF9pcnEpKTsKKwlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIElQSUNfU0VSTVIsIHRlbXApOworfQorCit1MzIgaXBpY19nZXRfbWNwX3N0YXR1cyh2b2lkKQoreworCXJldHVybiBpcGljX3JlYWQocHJpbWFyeV9pcGljLT5yZWdzLCBJUElDX1NFUk1SKTsKK30KKwordm9pZCBpcGljX2NsZWFyX21jcF9zdGF0dXModTMyIG1hc2spCit7CisJaXBpY193cml0ZShwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0VSTVIsIG1hc2spOworfQorCisvKiBSZXR1cm4gYW4gaW50ZXJydXB0IHZlY3RvciBvciAtMSBpZiBubyBpbnRlcnJ1cHQgaXMgcGVuZGluZy4gKi8KK2ludCBpcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IGlycTsKKworCWlycSA9IGlwaWNfcmVhZChwcmltYXJ5X2lwaWMtPnJlZ3MsIElQSUNfU0lWQ1IpICYgMHg3ZjsKKworCWlmIChpcnEgPT0gMCkgICAgLyogMCAtLT4gbm8gaXJxIGlzIHBlbmRpbmcgKi8KKwkJaXJxID0gLTE7CisKKwlyZXR1cm4gaXJxOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBpcGljX3N5c2NsYXNzID0geworCXNldF9rc2V0X25hbWUoImlwaWMiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBkZXZpY2VfaXBpYyA9IHsKKwkuaWQJCT0gMCwKKwkuY2xzCQk9ICZpcGljX3N5c2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9pcGljX3N5c2ZzKHZvaWQpCit7CisJaW50IHJjOworCisJaWYgKCFwcmltYXJ5X2lwaWMtPnJlZ3MpCisJCXJldHVybiAtRU5PREVWOworCXByaW50ayhLRVJOX0RFQlVHICJSZWdpc3RlcmluZyBpcGljIHdpdGggc3lzZnMuLi5cbiIpOworCisJcmMgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmlwaWNfc3lzY2xhc3MpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBpcGljIHN5cyBjbGFzc1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyYyA9IHN5c2Rldl9yZWdpc3RlcigmZGV2aWNlX2lwaWMpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZWdpc3RlcmluZyBpcGljIHN5cyBkZXZpY2VcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpbml0X2lwaWNfc3lzZnMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvc3lzbGliL2lwaWMuaCBiL2FyY2gvcHBjL3N5c2xpYi9pcGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwYzlkMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9pcGljLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIElQSUMgcHJpdmF0ZSBkZWZpbml0aW9ucyBhbmQgc3RydWN0dXJlLgorICoKKyAqIE1haW50YWluZXI6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogQ29weXJpZ2h0IDIwMDUgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19JUElDX0hfXworI2RlZmluZSBfX0lQSUNfSF9fCisKKyNpbmNsdWRlIDxhc20vaXBpYy5oPgorCisjZGVmaW5lIE1QQzgzeHhfSVBJQ19TSVpFCSgweDAwMTAwKQorCisvKiBTeXN0ZW0gR2xvYmFsIEludGVycnVwdCBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lCVNJQ0ZSX0lQU0EJMHgwMDAxMDAwMAorI2RlZmluZQlTSUNGUl9JUFNECTB4MDAwODAwMDAKKyNkZWZpbmUJU0lDRlJfTVBTQQkweDAwMjAwMDAwCisjZGVmaW5lCVNJQ0ZSX01QU0IJMHgwMDQwMDAwMAorCisvKiBTeXN0ZW0gRXh0ZXJuYWwgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJU0VNU1JfU0lSUTAJMHgwMDAwODAwMAorCisvKiBTeXN0ZW0gRXJyb3IgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTRVJDUl9NQ1BSCTB4MDAwMDAwMDEKKworc3RydWN0IGlwaWMgeworCXZvbGF0aWxlIHUzMiBfX2lvbWVtCSpyZWdzOworCXVuc2lnbmVkIGludAkJaXJxX29mZnNldDsKK307CisKK3N0cnVjdCBpcGljX2luZm8geworCXU4CXBlbmQ7CQkvKiBwZW5kaW5nIHJlZ2lzdGVyIG9mZnNldCBmcm9tIGJhc2UgKi8KKwl1OAltYXNrOwkJLyogbWFzayByZWdpc3RlciBvZmZzZXQgZnJvbSBiYXNlICovCisJdTgJcHJpbzsJCS8qIHByaW9yaXR5IHJlZ2lzdGVyIG9mZnNldCBmcm9tIGJhc2UgKi8KKwl1OAlmb3JjZTsJCS8qIGZvcmNlIHJlZ2lzdGVyIG9mZnNldCBmcm9tIGJhc2UgKi8KKwl1OAliaXQ7CQkvKiByZWdpc3RlciBiaXQgcG9zaXRpb24gKGFzIHBlciBkb2MpCisJCQkJICAgYml0IG1hc2sgPSAxIDw8ICgzMSAtIGJpdCkgKi8KKwl1OAlwcmlvX21hc2s7CS8qIHByaW9yaXR5IG1hc2sgdmFsdWUgKi8KK307CisKKyNlbmRpZiAvKiBfX0lQSUNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfcGNpX2VycmF0dW05LmMgYi9hcmNoL3BwYy9zeXNsaWIvbTgyNjBfcGNpX2VycmF0dW05LmMKaW5kZXggOTc0NTgxZS4uNTQ3NTcwOSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL204MjYwX3BjaV9lcnJhdHVtOS5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tODI2MF9wY2lfZXJyYXR1bTkuYwpAQCAtMzM5LDIwICszMzksNiBAQAogCWlkbWFfcGNpOV9yZWFkKCh1OCAqKWJ1ZiwgKHU4ICopYWRkciwgbmwqc2l6ZW9mKHUzMiksIHNpemVvZih1MzIpLCAwKTsKIH0KIAotdm9pZCBpbnN3X25zKHVuc2lnbmVkIHBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKQotewotCXU4ICphZGRyID0gKHU4ICopKHBvcnQgKyBfSU9fQkFTRSk7Ci0KLQlpZG1hX3BjaTlfcmVhZCgodTggKilidWYsICh1OCAqKWFkZHIsIG5zKnNpemVvZih1MTYpLCBzaXplb2YodTE2KSwgMCk7Ci19Ci0KLXZvaWQgaW5zbF9ucyh1bnNpZ25lZCBwb3J0LCB2b2lkICpidWYsIGludCBubCkKLXsKLQl1OCAqYWRkciA9ICh1OCAqKShwb3J0ICsgX0lPX0JBU0UpOwotCi0JaWRtYV9wY2k5X3JlYWQoKHU4ICopYnVmLCAodTggKilhZGRyLCBubCpzaXplb2YodTMyKSwgc2l6ZW9mKHUzMiksIDApOwotfQotCiB2b2lkICptZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsIHVuc2lnbmVkIGxvbmcgc3JjLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwYSA9IGlvcGEoKHVuc2lnbmVkIGxvbmcpIHNyYyk7CkBAIC0zNzMsOCArMzU5LDYgQEAKIEVYUE9SVF9TWU1CT0woaW5zYik7CiBFWFBPUlRfU1lNQk9MKGluc3cpOwogRVhQT1JUX1NZTUJPTChpbnNsKTsKLUVYUE9SVF9TWU1CT0woaW5zd19ucyk7Ci1FWFBPUlRfU1lNQk9MKGluc2xfbnMpOwogRVhQT1JUX1NZTUJPTChtZW1jcHlfZnJvbWlvKTsKIAogI2VuZGlmCS8qIGlmZGVmIENPTkZJR184MjYwX1BDSTkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X2RldmljZXMuYwppbmRleCA3NzM1MzM2Zi4uMzI1MTM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvc3lzbGliL21wYzg1eHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4NXh4X2RldmljZXMuYwpAQCAtMTYsOSArMTYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvZnNfZW5ldF9wZC5oPgogI2luY2x1ZGUgPGFzbS9tcGM4NXh4Lmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wcGNfc3lzLmg+CisjaW5jbHVkZSA8YXNtL2NwbTIuaD4KIAogLyogV2UgdXNlIG9mZnNldHMgZm9yIElPUkVTT1VSQ0VfTUVNIHNpbmNlIHdlIGRvIG5vdCBrbm93IGF0IGNvbXBpbGUgdGltZQogICogd2hhdCBDQ1NSQkFSIGlzLCB3aWxsIGdldCBmaXhlZCB1cCBieSBtYWNoX21wYzg1eHhfZml4dXAKQEAgLTgyLDYgKzg0LDYwIEBACiAJLmRldmljZV9mbGFncyA9IEZTTF9JMkNfREVWX1NFUEFSQVRFX0RGU1JSLAogfTsKIAorc3RhdGljIHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvIG1wYzg1eHhfZmNjMV9wZGF0YSA9IHsKKwkuZnNfbm8gICAgICAgICAgPSBmc2lkX2ZjYzEsCisJLmNwX3BhZ2UgICAgICAgID0gQ1BNX0NSX0ZDQzFfUEFHRSwKKwkuY3BfYmxvY2sgICAgICAgPSBDUE1fQ1JfRkNDMV9TQkxPQ0ssCisKKwkucnhfcmluZyAgICAgICAgPSAzMiwKKwkudHhfcmluZyAgICAgICAgPSAzMiwKKwkucnhfY29weWJyZWFrICAgPSAyNDAsCisJLnVzZV9uYXBpICAgICAgID0gMCwKKwkubmFwaV93ZWlnaHQgICAgPSAxNywKKworCS5jbGtfbWFzawk9IENNWDFfQ0xLX01BU0ssCisJLmNsa19yb3V0ZQk9IENNWDFfQ0xLX1JPVVRFLAorCS5jbGtfdHJ4CT0gKFBDX0YxUlhDTEsgfCBQQ19GMVRYQ0xLKSwKKworCS5tZW1fb2Zmc2V0ICAgICA9IEZDQzFfTUVNX09GRlNFVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyBtcGM4NXh4X2ZjYzJfcGRhdGEgPSB7CisJLmZzX25vICAgICAgICAgID0gZnNpZF9mY2MyLAorCS5jcF9wYWdlICAgICAgICA9IENQTV9DUl9GQ0MyX1BBR0UsCisJLmNwX2Jsb2NrICAgICAgID0gQ1BNX0NSX0ZDQzJfU0JMT0NLLAorCisJLnJ4X3JpbmcgICAgICAgID0gMzIsCisJLnR4X3JpbmcgICAgICAgID0gMzIsCisJLnJ4X2NvcHlicmVhayAgID0gMjQwLAorCS51c2VfbmFwaSAgICAgICA9IDAsCisJLm5hcGlfd2VpZ2h0ICAgID0gMTcsCisKKwkuY2xrX21hc2sJPSBDTVgyX0NMS19NQVNLLAorCS5jbGtfcm91dGUJPSBDTVgyX0NMS19ST1VURSwKKwkuY2xrX3RyeAk9IChQQ19GMlJYQ0xLIHwgUENfRjJUWENMSyksCisKKwkubWVtX29mZnNldCAgICAgPSBGQ0MyX01FTV9PRkZTRVQsCit9OworCitzdGF0aWMgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gbXBjODV4eF9mY2MzX3BkYXRhID0geworCS5mc19ubyAgICAgICAgICA9IGZzaWRfZmNjMywKKwkuY3BfcGFnZSAgICAgICAgPSBDUE1fQ1JfRkNDM19QQUdFLAorCS5jcF9ibG9jayAgICAgICA9IENQTV9DUl9GQ0MzX1NCTE9DSywKKworCS5yeF9yaW5nICAgICAgICA9IDMyLAorCS50eF9yaW5nICAgICAgICA9IDMyLAorCS5yeF9jb3B5YnJlYWsgICA9IDI0MCwKKwkudXNlX25hcGkgICAgICAgPSAwLAorCS5uYXBpX3dlaWdodCAgICA9IDE3LAorCisJLmNsa19tYXNrCT0gQ01YM19DTEtfTUFTSywKKwkuY2xrX3JvdXRlCT0gQ01YM19DTEtfUk9VVEUsCisJLmNsa190cngJPSAoUENfRjNSWENMSyB8IFBDX0YzVFhDTEspLAorCisJLm1lbV9vZmZzZXQgICAgID0gRkNDM19NRU1fT0ZGU0VULAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewogCVswXSA9IHsKIAkJLm1hcGJhc2UJPSAweDQ1MDAsCkBAIC0zMTgsMTkgKzM3NCwyOCBAQAogCVtNUEM4NXh4X0NQTV9GQ0MxXSA9IHsKIAkJLm5hbWUgPSAiZnNsLWNwbS1mY2MiLAogCQkuaWQJPSAxLAotCQkubnVtX3Jlc291cmNlcwkgPSAzLAorCQkubnVtX3Jlc291cmNlcwkgPSA0LAorCQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbXBjODV4eF9mY2MxX3BkYXRhLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKKwkJCQkubmFtZQk9ICJmY2NfcmVncyIsCiAJCQkJLnN0YXJ0CT0gMHg5MTMwMCwKIAkJCQkuZW5kCT0gMHg5MTMxRiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7CisJCQkJLm5hbWUgICA9ICJmY2NfcmVnc19jIiwKIAkJCQkuc3RhcnQJPSAweDkxMzgwLAogCQkJCS5lbmQJPSAweDkxMzlGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKKwkJCQkubmFtZQk9ICJmY2NfcHJhbSIsCisJCQkJLnN0YXJ0CT0gMHg4ODQwMCwKKwkJCQkuZW5kCT0gMHg4ODRmZiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CiAJCQkJLnN0YXJ0CT0gU0lVX0lOVF9GQ0MxLAogCQkJCS5lbmQJPSBTSVVfSU5UX0ZDQzEsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCkBAIC0zNDAsMTkgKzQwNSwyOCBAQAogCVtNUEM4NXh4X0NQTV9GQ0MyXSA9IHsKIAkJLm5hbWUgPSAiZnNsLWNwbS1mY2MiLAogCQkuaWQJPSAyLAotCQkubnVtX3Jlc291cmNlcwkgPSAzLAorCQkubnVtX3Jlc291cmNlcwkgPSA0LAorCQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbXBjODV4eF9mY2MyX3BkYXRhLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKKwkJCQkubmFtZQk9ICJmY2NfcmVncyIsCiAJCQkJLnN0YXJ0CT0gMHg5MTMyMCwKIAkJCQkuZW5kCT0gMHg5MTMzRiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7CisJCQkJLm5hbWUgICA9ICJmY2NfcmVnc19jIiwKIAkJCQkuc3RhcnQJPSAweDkxM0EwLAogCQkJCS5lbmQJPSAweDkxM0NGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKKwkJCQkubmFtZQk9ICJmY2NfcHJhbSIsCisJCQkJLnN0YXJ0CT0gMHg4ODUwMCwKKwkJCQkuZW5kCT0gMHg4ODVmZiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CiAJCQkJLnN0YXJ0CT0gU0lVX0lOVF9GQ0MyLAogCQkJCS5lbmQJPSBTSVVfSU5UX0ZDQzIsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCkBAIC0zNjIsMTkgKzQzNiwyOCBAQAogCVtNUEM4NXh4X0NQTV9GQ0MzXSA9IHsKIAkJLm5hbWUgPSAiZnNsLWNwbS1mY2MiLAogCQkuaWQJPSAzLAotCQkubnVtX3Jlc291cmNlcwkgPSAzLAorCQkubnVtX3Jlc291cmNlcwkgPSA0LAorCQkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbXBjODV4eF9mY2MzX3BkYXRhLAogCQkucmVzb3VyY2UgPSAoc3RydWN0IHJlc291cmNlW10pIHsKIAkJCXsKKwkJCQkubmFtZQk9ICJmY2NfcmVncyIsCiAJCQkJLnN0YXJ0CT0gMHg5MTM0MCwKIAkJCQkuZW5kCT0gMHg5MTM1RiwKIAkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAkJCX0sCiAJCQl7CisJCQkJLm5hbWUgICA9ICJmY2NfcmVnc19jIiwKIAkJCQkuc3RhcnQJPSAweDkxM0QwLAogCQkJCS5lbmQJPSAweDkxM0ZGLAogCQkJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCQkJfSwKIAkJCXsKKwkJCQkubmFtZQk9ICJmY2NfcHJhbSIsCisJCQkJLnN0YXJ0CT0gMHg4ODYwMCwKKwkJCQkuZW5kCT0gMHg4ODZmZiwKKwkJCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJCX0sCisJCQl7CiAJCQkJLnN0YXJ0CT0gU0lVX0lOVF9GQ0MzLAogCQkJCS5lbmQJPSBTSVVfSU5UX0ZDQzMsCiAJCQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCmluZGV4IDZmNTM2MzguLmNmNWFiNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfZGV2aWNlcy5jCkBAIC0yMTgsNiArMjE4LDE0IEBACiAJCQl9LAogCQl9LAogCX0sCisKKyAgICAgICAgW01QQzh4eF9NRElPX0ZFQ10gPSB7CisgICAgICAgICAgICAgICAgLm5hbWUgPSAiZnNsLWNwbS1mZWMtbWRpbyIsCisgICAgICAgICAgICAgICAgLmlkID0gMCwKKyAgICAgICAgICAgICAgICAubnVtX3Jlc291cmNlcyA9IDAsCisKKyAgICAgICAgfSwKKwogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjaF9tcGM4eHhfZml4dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfc3lzLmMgYi9hcmNoL3BwYy9zeXNsaWIvbXBjOHh4X3N5cy5jCmluZGV4IGVlZTIxMzIuLjE4YmExZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3N5c2xpYi9tcGM4eHhfc3lzLmMKKysrIGIvYXJjaC9wcGMvc3lzbGliL21wYzh4eF9zeXMuYwpAQCAtMjIsNyArMjIsNyBAQAogCQkucHBjX3N5c19uYW1lCT0gIk1QQzg2WCIsCiAJCS5tYXNrIAkJPSAweEZGRkZGRkZGLAogCQkudmFsdWUgCQk9IDB4MDAwMDAwMDAsCi0JCS5udW1fZGV2aWNlcwk9IDcsCisJCS5udW1fZGV2aWNlcwk9IDgsCiAJCS5kZXZpY2VfbGlzdAk9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQogCQl7CiAJCQlNUEM4eHhfQ1BNX0ZFQzEsCkBAIC0zMiwxMyArMzIsMTQgQEAKIAkJCU1QQzh4eF9DUE1fU0NDNCwKIAkJCU1QQzh4eF9DUE1fU01DMSwKIAkJCU1QQzh4eF9DUE1fU01DMiwKKwkJCU1QQzh4eF9NRElPX0ZFQywKIAkJfSwKIAl9LAogCXsKIAkJLnBwY19zeXNfbmFtZQk9ICJNUEM4ODUiLAogCQkubWFzayAJCT0gMHhGRkZGRkZGRiwKIAkJLnZhbHVlIAkJPSAweDAwMDAwMDAwLAotCQkubnVtX2RldmljZXMJPSA4LAorCQkubnVtX2RldmljZXMJPSA5LAogCQkuZGV2aWNlX2xpc3QJPSAoZW51bSBwcGNfc3lzX2RldmljZXNbXSkKIAkJewogCQkJTVBDOHh4X0NQTV9GRUMxLApAQCAtNDksNiArNTAsNyBAQAogCQkJTVBDOHh4X0NQTV9TQ0M0LAogCQkJTVBDOHh4X0NQTV9TTUMxLAogCQkJTVBDOHh4X0NQTV9TTUMyLAorCQkJTVBDOHh4X01ESU9fRkVDLAogCQl9LAogCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfZGV2aWNlcy5jCmluZGV4IDg2OTJkMDBjLi5mZWZiYzIxIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYworKysgYi9hcmNoL3BwYy9zeXNsaWIvcHEyX2RldmljZXMuYwpAQCAtMzY5LDYgKzM2OSwxMSBAQAogCQkJfSwKIAkJfSwKIAl9LAorCVtNUEM4Mnh4X01ESU9fQkJdID0geworCQkubmFtZSA9ICJmc2wtYmItbWRpbyIsCisJCS5pZCA9IDAsCisJCS5udW1fcmVzb3VyY2VzID0gMCwKKwl9LAogfTsKIAogc3RhdGljIGludCBfX2luaXQgbWFjaF9tcGM4Mnh4X2ZpeHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jIGIvYXJjaC9wcGMvc3lzbGliL3BxMl9zeXMuYwppbmRleCBmZWU4OTQ4Li5mNTI2MDBjIDEwMDY0NAotLS0gYS9hcmNoL3BwYy9zeXNsaWIvcHEyX3N5cy5jCisrKyBiL2FyY2gvcHBjL3N5c2xpYi9wcTJfc3lzLmMKQEAgLTEzOSwxMyArMTM5LDE0IEBACiAJCS5wcGNfc3lzX25hbWUJPSAiODI3MiIsCiAJCS5tYXNrCQk9IDB4MDAwMGZmMDAsCiAJCS52YWx1ZQkJPSAweDAwMDAwYzAwLAotCQkubnVtX2RldmljZXMJPSAxMiwKKwkJLm51bV9kZXZpY2VzCT0gMTMsCiAJCS5kZXZpY2VfbGlzdCA9IChlbnVtIHBwY19zeXNfZGV2aWNlc1tdKQogCQl7CiAJCQlNUEM4Mnh4X0NQTV9GQ0MxLCBNUEM4Mnh4X0NQTV9GQ0MyLCBNUEM4Mnh4X0NQTV9TQ0MxLAogCQkJTVBDODJ4eF9DUE1fU0NDMiwgTVBDODJ4eF9DUE1fU0NDMywgTVBDODJ4eF9DUE1fU0NDNCwKIAkJCU1QQzgyeHhfQ1BNX1NNQzEsIE1QQzgyeHhfQ1BNX1NNQzIsIE1QQzgyeHhfQ1BNX1NQSSwKIAkJCU1QQzgyeHhfQ1BNX0kyQywgTVBDODJ4eF9DUE1fVVNCLCBNUEM4Mnh4X1NFQzEsCisJCQlNUEM4Mnh4X01ESU9fQkIsCiAJCX0sCiAJfSwKIAkvKiBiZWxvdyBpcyBhIGxpc3Qgb2YgdGhlIDgyODAgZmFtaWx5IG9mIHByb2Nlc3NvcnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcHBjL3htb24vc3RhcnQuYyBiL2FyY2gvcHBjL3htb24vc3RhcnQuYwppbmRleCBmN2U5Mjk4Li5kNzRhODgzIDEwMDY0NAotLS0gYS9hcmNoL3BwYy94bW9uL3N0YXJ0LmMKKysrIGIvYXJjaC9wcGMveG1vbi9zdGFydC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9idGV4dC5oPgorI2luY2x1ZGUgPGFzbS9pYm00eHguaD4KIAogc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKnNjY2MsICpzY2NkOwogdW5zaWduZWQgaW50IFRYUkRZLCBSWFJEWSwgRExBQjsKQEAgLTU3LDIzICs1OCwzMCBAQAogdm9pZAogeG1vbl9tYXBfc2NjKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BQQ19QUkVQCi0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqYmFzZTsKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfR0VNSU5JKQorI2lmIGRlZmluZWQoQ09ORklHX0dFTUlOSSkKIAkvKiBzaG91bGQgYWxyZWFkeSBiZSBtYXBwZWQgYnkgdGhlIGtlcm5lbCBib290ICovCi0Jc2NjYyA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIDB4ZmZlZmZiMGQ7CiAJc2NjZCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIDB4ZmZlZmZiMDg7Ci0JVFhSRFkgPSAweDIwOwotCVJYUkRZID0gMTsKLQlETEFCID0gMHg4MDsKICNlbGlmIGRlZmluZWQoQ09ORklHXzQwNUdQKQotCXNjY2MgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKTB4ZWY2MDAzMDU7CiAJc2NjZCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopMHhlZjYwMDMwMDsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MEVQKQorCXNjY2QgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBpb3JlbWFwKFBQQzQ0MEVQX1VBUlQwX0FERFIsIDgpOworI2VsaWYgZGVmaW5lZChDT05GSUdfNDQwU1ApCisJc2NjZCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGlvcmVtYXA2NChQUEM0NDBTUF9VQVJUMF9BRERSLCA4KTsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0MFNQRSkKKwlzY2NkID0gKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgaW9yZW1hcDY0KFBQQzQ0MFNQRV9VQVJUMF9BRERSLCA4KTsKKyNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKKwkvKiBUaGlzIGlzIHRoZSBkZWZhdWx0IGZvciA0NHggcGxhdGZvcm1zLiAgQW55IGJvYXJkcyB0aGF0IGhhdmUgYQorCSAgIGRpZmZlcmVudCBVQVJUIGFkZHJlc3MgbmVlZCB0byBiZSBwdXQgaW4gY2FzZXMgYmVmb3JlIHRoaXMgb3IgdGhlCisJICAgcG9ydCB3aWxsIGJlIG1hcHBlZCBpbmNvcnJlY3RseSAqLworCXNjY2QgPSAodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBpb3JlbWFwNjQoUFBDNDQwR1BfVUFSVDBfQUREUiwgOCk7CisjZW5kaWYgLyogcGxhdGZvcm0gKi8KKworI2lmbmRlZiBDT05GSUdfUFBDX1BSRVAKKwlzY2NjID0gc2NjZCArIDU7CiAJVFhSRFkgPSAweDIwOwogCVJYUkRZID0gMTsKIAlETEFCID0gMHg4MDsKLSNlbmRpZiAvKiBwbGF0Zm9ybSAqLworI2VuZGlmCiAKIAlyZWdpc3Rlcl9zeXNycV9rZXkoJ3gnLCAmc3lzcnFfeG1vbl9vcCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3BwYy94bW9uL3htb24uYyBiL2FyY2gvcHBjL3htb24veG1vbi5jCmluZGV4IDM3ZDIzNGYuLmIxYTkxNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL3htb24veG1vbi5jCisrKyBiL2FyY2gvcHBjL3htb24veG1vbi5jCkBAIC0xNTMsNiArMTUzLDEyIEBACiAjZGVmaW5lIFNTVEVQCTEJCS8qIHN0ZXBwaW5nIGJlY2F1c2Ugb2YgJ3MnIGNvbW1hbmQgKi8KICNkZWZpbmUgQlJTVEVQCTIJCS8qIHN0ZXBwaW5nIG92ZXIgYnJlYWtwb2ludCAqLwogCisjaWZkZWYgQ09ORklHXzR4eAorI2RlZmluZSBNU1JfU1NURVBfRU5BQkxFIDB4MjAwCisjZWxzZQorI2RlZmluZSBNU1JfU1NURVBfRU5BQkxFIDB4NDAwCisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBwdF9yZWdzICp4bW9uX3JlZ3NbTlJfQ1BVU107CiAKIGV4dGVybiBpbmxpbmUgdm9pZCBzeW5jKHZvaWQpCkBAIC0yMTEsNiArMjE3LDE0IEBACiAJcFsxXSA9IGxvOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgeG1vbl9lbmFibGVfc3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcmVncy0+bXNyIHw9IE1TUl9TU1RFUF9FTkFCTEU7CisjaWZkZWYgQ09ORklHXzR4eAorCW10c3ByKFNQUk5fREJDUjAsIG1mc3ByKFNQUk5fREJDUjApIHwgREJDUjBfSUMgfCBEQkNSMF9JRE0pOworI2VuZGlmCit9CisKIGludCB4bW9uKHN0cnVjdCBwdF9yZWdzICpleGNwKQogewogCXN0cnVjdCBwdF9yZWdzIHJlZ3M7CkBAIC0yNTQsMTAgKzI2OCwxMCBAQAogCWNtZCA9IGNtZHMoZXhjcCk7CiAJaWYgKGNtZCA9PSAncycpIHsKIAkJeG1vbl90cmFjZVtzbXBfcHJvY2Vzc29yX2lkKCldID0gU1NURVA7Ci0JCWV4Y3AtPm1zciB8PSAweDQwMDsKKwkJeG1vbl9lbmFibGVfc3N0ZXAoZXhjcCk7CiAJfSBlbHNlIGlmIChhdF9icmVha3BvaW50KGV4Y3AtPm5pcCkpIHsKIAkJeG1vbl90cmFjZVtzbXBfcHJvY2Vzc29yX2lkKCldID0gQlJTVEVQOwotCQlleGNwLT5tc3IgfD0gMHg0MDA7CisJCXhtb25fZW5hYmxlX3NzdGVwKGV4Y3ApOwogCX0gZWxzZSB7CiAJCXhtb25fdHJhY2Vbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IDA7CiAJCWluc2VydF9icHRzKCk7CkBAIC0yOTgsNyArMzEyLDcgQEAKIAkJcmVtb3ZlX2JwdHMoKTsKIAkJZXhjcHJpbnQocmVncyk7CiAJCXhtb25fdHJhY2Vbc21wX3Byb2Nlc3Nvcl9pZCgpXSA9IEJSU1RFUDsKLQkJcmVncy0+bXNyIHw9IDB4NDAwOworCQl4bW9uX2VuYWJsZV9zc3RlcChyZWdzKTsKIAl9IGVsc2UgewogCQl4bW9uKHJlZ3MpOwogCX0KQEAgLTM4NSw3ICszOTksNyBAQAogCQl9CiAJCXN0b3JlX2luc3QoKHZvaWQgKikgYnAtPmFkZHJlc3MpOwogCX0KLSNpZiAhZGVmaW5lZChDT05GSUdfOHh4KQorI2lmICEgKGRlZmluZWQoQ09ORklHXzh4eCkgfHwgZGVmaW5lZChDT05GSUdfNHh4KSkKIAlpZiAoZGFici5lbmFibGVkKQogCQlzZXRfZGFicihkYWJyLmFkZHJlc3MpOwogCWlmIChpYWJyLmVuYWJsZWQpCkBAIC00MDAsNyArNDE0LDcgQEAKIAlzdHJ1Y3QgYnB0ICpicDsKIAl1bnNpZ25lZCBpbnN0cjsKIAotI2lmICFkZWZpbmVkKENPTkZJR184eHgpCisjaWYgISAoZGVmaW5lZChDT05GSUdfOHh4KSB8fCBkZWZpbmVkKENPTkZJR180eHgpKQogCXNldF9kYWJyKDApOwogCXNldF9pYWJyKDApOwogI2VuZGlmCkBAIC02NzcsNyArNjkxLDcgQEAKIAogCWNtZCA9IGluY2hhcigpOwogCXN3aXRjaCAoY21kKSB7Ci0jaWYgIWRlZmluZWQoQ09ORklHXzh4eCkKKyNpZiAhIChkZWZpbmVkKENPTkZJR184eHgpIHx8IGRlZmluZWQoQ09ORklHXzR4eCkpCiAJY2FzZSAnZCc6CiAJCW1vZGUgPSA3OwogCQljbWQgPSBpbmNoYXIoKTsKQEAgLTc5Miw3ICs4MDYsNyBAQAogCWZvciAoOyBzcCAhPSAwOyBzcCA9IHN0YWNrWzBdKSB7CiAJCWlmIChtcmVhZChzcCwgc3RhY2ssIHNpemVvZihzdGFjaykpICE9IHNpemVvZihzdGFjaykpCiAJCQlicmVhazsKLQkJcHJpbnRmKCJbJS44bHhdICIsIHN0YWNrKTsKKwkJcHJpbnRmKCJbJS44bHhdICIsIHN0YWNrWzBdKTsKIAkJeG1vbl9wcmludF9zeW1ib2woc3RhY2tbMV0sICIgIiwgIlxuIik7CiAJCWlmIChzdGFja1sxXSA9PSAodW5zaWduZWQpICZyZXRfZnJvbV9leGNlcHQKIAkJICAgIHx8IHN0YWNrWzFdID09ICh1bnNpZ25lZCkgJnJldF9mcm9tX2V4Y2VwdF9mdWxsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvS2NvbmZpZyBiL2FyY2gvczM5MC9LY29uZmlnCmluZGV4IGFlMDcxYTEuLmIyMTZjYTY1OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL0tjb25maWcKKysrIGIvYXJjaC9zMzkwL0tjb25maWcKQEAgLTExOCw2ICsxMTgsMTAgQEAKIAlkZXBlbmRzIG9uIENPTVBBVCAmJiBTWVNWSVBDCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBVURJVF9BUkNICisJYm9vbAorCWRlZmF1bHQgeQorCiBjb21tZW50ICJDb2RlIGdlbmVyYXRpb24gb3B0aW9ucyIKIAogY2hvaWNlCkBAIC00NTYsOCArNDYwLDcgQEAKIAkgIGluZm9ybWF0aW9uIGluIGFuIHMzOTAgaHlwZXJ2aXNvciBlbnZpcm9ubWVudC4KIAogY29uZmlnIEtFWEVDCi0JYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCIKIAloZWxwCiAJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCiAJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdApAQCAtNDgzLDggKzQ4NiwyMiBAQAogCiBzb3VyY2UgImZzL0tjb25maWciCiAKK21lbnUgIkluc3RydW1lbnRhdGlvbiBTdXBwb3J0IgorCiBzb3VyY2UgImFyY2gvczM5MC9vcHJvZmlsZS9LY29uZmlnIgogCitjb25maWcgS1BST0JFUworCWJvb2wgIktwcm9iZXMgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgTU9EVUxFUworCWhlbHAKKwkgIEtwcm9iZXMgYWxsb3dzIHlvdSB0byB0cmFwIGF0IGFsbW9zdCBhbnkga2VybmVsIGFkZHJlc3MgYW5kCisJICBleGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24uCXJlZ2lzdGVyX2twcm9iZSgpIGVzdGFibGlzaGVzCisJICBhIHByb2JlcG9pbnQgYW5kIHNwZWNpZmllcyB0aGUgY2FsbGJhY2suICBLcHJvYmVzIGlzIHVzZWZ1bAorCSAgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcsIG5vbi1pbnRydXNpdmUgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLgorCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCisKK2VuZG1lbnUKKwogc291cmNlICJhcmNoL3MzOTAvS2NvbmZpZy5kZWJ1ZyIKIAogc291cmNlICJzZWN1cml0eS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhLmggYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaAppbmRleCA3MWQ2NWViLi4wNDI5NDgxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaAorKysgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGEuaApAQCAtMjksMjIgKzI5LDYgQEAKICNkZWZpbmUgQ1RMX0FQUExEQVRBX05FVF9TVU0JMjEyNQogI2RlZmluZSBDVExfQVBQTERBVEFfUFJPQwkyMTI2CiAKLSNpZm5kZWYgQ09ORklHXzY0QklUCi0KLSNkZWZpbmUgQVBQTERBVEFfU1RBUlRfSU5URVJWQUxfUkVDIDB4MDAJLyogRnVuY3Rpb24gY29kZXMgZm9yICovCi0jZGVmaW5lIEFQUExEQVRBX1NUT1BfUkVDCSAgICAweDAxCS8qIERJQUcgMHhEQwkgICovCi0jZGVmaW5lIEFQUExEQVRBX0dFTl9FVkVOVF9SRUNPUkQgICAweDAyCi0jZGVmaW5lIEFQUExEQVRBX1NUQVJUX0NPTkZJR19SRUMgICAweDAzCi0KLSNlbHNlCi0KLSNkZWZpbmUgQVBQTERBVEFfU1RBUlRfSU5URVJWQUxfUkVDIDB4ODAKLSNkZWZpbmUgQVBQTERBVEFfU1RPUF9SRUMJICAgIDB4ODEKLSNkZWZpbmUgQVBQTERBVEFfR0VOX0VWRU5UX1JFQ09SRCAgIDB4ODIKLSNkZWZpbmUgQVBQTERBVEFfU1RBUlRfQ09ORklHX1JFQyAgIDB4ODMKLQotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwotCiAjZGVmaW5lIFBfSU5GTyh4Li4uKQlwcmludGsoS0VSTl9JTkZPIE1ZX1BSSU5UX05BTUUgIiBpbmZvOiAiIHgpCiAjZGVmaW5lIFBfRVJST1IoeC4uLikJcHJpbnRrKEtFUk5fRVJSIE1ZX1BSSU5UX05BTUUgIiBlcnJvcjogIiB4KQogI2RlZmluZSBQX1dBUk5JTkcoeC4uLikJcHJpbnRrKEtFUk5fV0FSTklORyBNWV9QUklOVF9OQU1FICIgc3RhdHVzOiAiIHgpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwppbmRleCBkMGY4MmM5Li5iNjllZDc0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCisrKyBiL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKQEAgLTE0LDIwICsxNCwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZS1mbGFncy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWVyLmg+Ci0vLyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8YXNtL2FwcGxkYXRhLmg+CisjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlICJhcHBsZGF0YS5oIgogCkBAIC0zOSwzNCArMzksNiBAQAogCiAjZGVmaW5lIFRPRF9NSUNSTwkweDAxMDAwCQkJLyogbnIuIG9mIFRPRCBjbG9jayB1bml0cwogCQkJCQkJICAgZm9yIDEgbWljcm9zZWNvbmQgKi8KLQotLyoKLSAqIFBhcmFtZXRlciBsaXN0IGZvciBESUFHTk9TRSBYJ0RDJwotICovCi0jaWZuZGVmIENPTkZJR182NEJJVAotc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0IHsKLQl1MTYgZGlhZzsJCS8qIFRoZSBESUFHTk9TRSBjb2RlIFgnMDBEQycgICAgICAgICAgKi8KLQl1OCAgZnVuY3Rpb247CQkvKiBUaGUgZnVuY3Rpb24gY29kZSBmb3IgdGhlIERJQUdOT1NFICovCi0JdTggIHBhcmxpc3RfbGVuZ3RoOwkvKiBMZW5ndGggb2YgdGhlIHBhcmFtZXRlciBsaXN0ICAgICAgICovCi0JdTMyIHByb2R1Y3RfaWRfYWRkcjsJLyogQWRkcmVzcyBvZiB0aGUgMTYtYnl0ZSBwcm9kdWN0IElEICAqLwotCXUxNiByZXNlcnZlZDsKLQl1MTYgYnVmZmVyX2xlbmd0aDsJLyogTGVuZ3RoIG9mIHRoZSBhcHBsaWNhdGlvbiBkYXRhIGJ1ZmZlciAgKi8KLQl1MzIgYnVmZmVyX2FkZHI7CS8qIEFkZHJlc3Mgb2YgdGhlIGFwcGxpY2F0aW9uIGRhdGEgYnVmZmVyICovCi19OwotI2Vsc2UKLXN0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCB7Ci0JdTE2IGRpYWc7Ci0JdTggIGZ1bmN0aW9uOwotCXU4ICBwYXJsaXN0X2xlbmd0aDsKLQl1MzIgdW51c2VkMDE7Ci0JdTE2IHJlc2VydmVkOwotCXUxNiBidWZmZXJfbGVuZ3RoOwotCXUzMiB1bnVzZWQwMjsKLQl1NjQgcHJvZHVjdF9pZF9hZGRyOwotCXU2NCBidWZmZXJfYWRkcjsKLX07Ci0jZW5kaWYgLyogQ09ORklHXzY0QklUICovCi0KIC8qCiAgKiAvcHJvYyBlbnRyaWVzIChzeXNjdGwpCiAgKi8KQEAgLTE4MSw0NiArMTUzLDE3IEBACiBpbnQgYXBwbGRhdGFfZGlhZyhjaGFyIHJlY29yZF9uciwgdTE2IGZ1bmN0aW9uLCB1bnNpZ25lZCBsb25nIGJ1ZmZlciwKIAkJCXUxNiBsZW5ndGgsIGNoYXIgKm1vZF9sdmwpCiB7Ci0JdW5zaWduZWQgbG9uZyByeTsKLQlzdHJ1Y3QgYXBwbGRhdGFfcHJvZHVjdF9pZCB7Ci0JCWNoYXIgcHJvZF9ucls3XTsJCQkvKiBwcm9kdWN0IG5yLiAqLwotCQljaGFyIHByb2RfZm5bMl07CQkJLyogcHJvZHVjdCBmdW5jdGlvbiAqLwotCQljaGFyIHJlY29yZF9ucjsJCQkJLyogcmVjb3JkIG5yLiAqLwotCQljaGFyIHZlcnNpb25fbnJbMl07CQkJLyogdmVyc2lvbiAqLwotCQljaGFyIHJlbGVhc2VfbnJbMl07CQkJLyogcmVsZWFzZSAqLwotCQljaGFyIG1vZF9sdmxbMl07CQkJLyogbW9kaWZpY2F0aW9uIGx2bC4gKi8KLQl9IGFwcGxkYXRhX3Byb2R1Y3RfaWQgPSB7Ci0JLyogYWxsIHN0cmluZ3MgYXJlIEVCQ0RJQywgcmVjb3JkX25yIGlzIGJ5dGUgKi8KKwlzdHJ1Y3QgYXBwbGRhdGFfcHJvZHVjdF9pZCBpZCA9IHsKIAkJLnByb2RfbnIgICAgPSB7MHhEMywgMHhDOSwgMHhENSwgMHhFNCwKLQkJCQkweEU3LCAweEQyLCAweEQ5fSwJLyogIkxJTlVYS1IiICovCi0JCS5wcm9kX2ZuICAgID0gezB4RDUsIDB4RDN9LAkJLyogIk5MIiAqLworCQkJICAgICAgIDB4RTcsIDB4RDIsIDB4RDl9LAkvKiAiTElOVVhLUiIgKi8KKwkJLnByb2RfZm4gICAgPSAweEQ1RDMsCQkJLyogIk5MIiAqLwogCQkucmVjb3JkX25yICA9IHJlY29yZF9uciwKLQkJLnZlcnNpb25fbnIgPSB7MHhGMiwgMHhGNn0sCQkvKiAiMjYiICovCi0JCS5yZWxlYXNlX25yID0gezB4RjAsIDB4RjF9LAkJLyogIjAxIiAqLwotCQkubW9kX2x2bCAgICA9IHttb2RfbHZsWzBdLCBtb2RfbHZsWzFdfSwKLQl9OwotCXN0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCA9IHsKLQkJCQkuZGlhZyA9IDB4REMsCi0JCQkJLmZ1bmN0aW9uID0gZnVuY3Rpb24sCi0JCQkJLnBhcmxpc3RfbGVuZ3RoID0KLQkJCQkJc2l6ZW9mKGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0KSwKLQkJCQkuYnVmZmVyX2xlbmd0aCA9IGxlbmd0aCwKLQkJCQkucHJvZHVjdF9pZF9hZGRyID0KLQkJCQkJKHVuc2lnbmVkIGxvbmcpICZhcHBsZGF0YV9wcm9kdWN0X2lkLAotCQkJCS5idWZmZXJfYWRkciA9IHZpcnRfdG9fcGh5cygodm9pZCAqKSBidWZmZXIpCisJCS52ZXJzaW9uX25yID0gMHhGMkY2LAkJCS8qICIyNiIgKi8KKwkJLnJlbGVhc2VfbnIgPSAweEYwRjEsCQkJLyogIjAxIiAqLworCQkubW9kX2x2bCAgICA9IChtb2RfbHZsWzBdKSA8PCA4IHwgbW9kX2x2bFsxXSwKIAl9OwogCi0JaWYgKCFNQUNISU5FX0lTX1ZNKQotCQlyZXR1cm4gLUVOT1NZUzsKLQlyeSA9IC0xOwotCWFzbSB2b2xhdGlsZSgKLQkJCSJkaWFnICUxLCUwLDB4RENcblx0IgotCQkJOiAiPWQiIChyeSkKLQkJCTogImQiICgmYXBwbGRhdGFfcGFyYW1ldGVyX2xpc3QpLAotCQkJICAibSIgKGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0KSwKLQkJCSAgIm0iIChhcHBsZGF0YV9wcm9kdWN0X2lkKQotCQkJOiAiY2MiKTsKLQlyZXR1cm4gKGludCkgcnk7CisJcmV0dXJuIGFwcGxkYXRhX2FzbSgmaWQsIGZ1bmN0aW9uLCAodm9pZCAqKSBidWZmZXIsIGxlbmd0aCk7CiB9CiAvKioqKioqKioqKioqKioqKioqKioqKioqIHRpbWVyLCB3b3JrLCBESUFHIDxFTkQ+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTYxNyw2ICs1NjAsNyBAQAogCXNwaW5fdW5sb2NrKCZhcHBsZGF0YV90aW1lcl9sb2NrKTsKIH0KIAorI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBfX2NwdWluaXQKIGFwcGxkYXRhX2NwdV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAogCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCkBAIC02MjUsMjAgKzU2OSwxOSBAQAogCWNhc2UgQ1BVX09OTElORToKIAkJYXBwbGRhdGFfb25saW5lX2NwdSgobG9uZykgaGNwdSk7CiAJCWJyZWFrOwotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogCWNhc2UgQ1BVX0RFQUQ6CiAJCWFwcGxkYXRhX29mZmxpbmVfY3B1KChsb25nKSBoY3B1KTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlicmVhazsKIAl9CiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIGFwcGxkYXRhX25iID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBhcHBsZGF0YV9uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGFwcGxkYXRhX2NwdV9ub3RpZnksCiB9OworI2VuZGlmCiAKIC8qCiAgKiBhcHBsZGF0YV9pbml0KCkKQEAgLTY2Miw3ICs2MDUsNyBAQAogCQlhcHBsZGF0YV9vbmxpbmVfY3B1KGkpOwogCiAJLyogUmVnaXN0ZXIgY3B1IGhvdHBsdWcgbm90aWZpZXIgKi8KLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmFwcGxkYXRhX25iKTsKKwlyZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJmFwcGxkYXRhX25iKTsKIAogCWFwcGxkYXRhX3N5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoYXBwbGRhdGFfZGlyX3RhYmxlLCAxKTsKICNpZmRlZiBNT0RVTEUKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9vcy5jIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX29zLmMKaW5kZXggMTYxYWNjNS4uNzZhMTU1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX29zLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX29zLmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL2FwcGxkYXRhLmg+CiAjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAjaW5jbHVkZSAiYXBwbGRhdGEuaCIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYyBiL2FyY2gvczM5MC9jcnlwdG8vYWVzX3MzOTAuYwppbmRleCA1NzEzYzdlLi4xNWM5ZWVjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL2Flc19zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9hZXNfczM5MC5jCkBAIC0xNiw5ICsxNiw5IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogI2luY2x1ZGUgImNyeXB0X3MzOTAuaCIKIAogI2RlZmluZSBBRVNfTUlOX0tFWV9TSVpFCTE2CkBAIC0zNCwxMyArMzQsMTYgQEAKIHN0cnVjdCBzMzkwX2Flc19jdHggewogCXU4IGl2W0FFU19CTE9DS19TSVpFXTsKIAl1OCBrZXlbQUVTX01BWF9LRVlfU0laRV07CisJbG9uZyBlbmM7CisJbG9uZyBkZWM7CiAJaW50IGtleV9sZW47CiB9OwogCiBzdGF0aWMgaW50IGFlc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCi0JCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKKwkJICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQogewogCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAKIAlzd2l0Y2ggKGtleV9sZW4pIHsKIAljYXNlIDE2OgpAQCAtMTEwLDExNyArMTEzLDExIEBACiAJfQogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGFlc19lbmNyeXB0X2VjYihjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpvdXQsCi0JCQkJICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKLQotCXN3aXRjaCAoc2N0eC0+a2V5X2xlbikgewotCWNhc2UgMTY6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa20oS01fQUVTXzEyOF9FTkNSWVBULCAmc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa20oS01fQUVTXzE5Ml9FTkNSWVBULCAmc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa20oS01fQUVTXzI1Nl9FTkNSWVBULCAmc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gbmJ5dGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFlc19kZWNyeXB0X2VjYihjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpvdXQsCi0JCQkJICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKLQotCXN3aXRjaCAoc2N0eC0+a2V5X2xlbikgewotCWNhc2UgMTY6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa20oS01fQUVTXzEyOF9ERUNSWVBULCAmc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa20oS01fQUVTXzE5Ml9ERUNSWVBULCAmc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa20oS01fQUVTXzI1Nl9ERUNSWVBULCAmc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gbmJ5dGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFlc19lbmNyeXB0X2NiYyhjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpvdXQsCi0JCQkJICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKLQotCW1lbWNweSgmc2N0eC0+aXYsIGRlc2MtPmluZm8sIEFFU19CTE9DS19TSVpFKTsKLQlzd2l0Y2ggKHNjdHgtPmtleV9sZW4pIHsKLQljYXNlIDE2OgotCQlyZXQgPSBjcnlwdF9zMzkwX2ttYyhLTUNfQUVTXzEyOF9FTkNSWVBULCAmc2N0eC0+aXYsIG91dCwgaW4sIG5ieXRlcyk7Ci0JCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQkJYnJlYWs7Ci0JY2FzZSAyNDoKLQkJcmV0ID0gY3J5cHRfczM5MF9rbWMoS01DX0FFU18xOTJfRU5DUllQVCwgJnNjdHgtPml2LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa21jKEtNQ19BRVNfMjU2X0VOQ1JZUFQsICZzY3R4LT5pdiwgb3V0LCBpbiwgbmJ5dGVzKTsKLQkJQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG5ieXRlcykpOwotCQlicmVhazsKLQl9Ci0JbWVtY3B5KGRlc2MtPmluZm8sICZzY3R4LT5pdiwgQUVTX0JMT0NLX1NJWkUpOwotCi0JcmV0dXJuIG5ieXRlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBhZXNfZGVjcnlwdF9jYmMoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqb3V0LAotCQkJCSAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KGRlc2MtPnRmbSk7Ci0JaW50IHJldDsKLQotCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLwotCW5ieXRlcyAmPSB+KEFFU19CTE9DS19TSVpFIC0gMSk7Ci0KLQltZW1jcHkoJnNjdHgtPml2LCBkZXNjLT5pbmZvLCBBRVNfQkxPQ0tfU0laRSk7Ci0Jc3dpdGNoIChzY3R4LT5rZXlfbGVuKSB7Ci0JY2FzZSAxNjoKLQkJcmV0ID0gY3J5cHRfczM5MF9rbWMoS01DX0FFU18xMjhfREVDUllQVCwgJnNjdHgtPml2LCBvdXQsIGluLCBuYnl0ZXMpOwotCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0JCWJyZWFrOwotCWNhc2UgMjQ6Ci0JCXJldCA9IGNyeXB0X3MzOTBfa21jKEtNQ19BRVNfMTkyX0RFQ1JZUFQsICZzY3R4LT5pdiwgb3V0LCBpbiwgbmJ5dGVzKTsKLQkJQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG5ieXRlcykpOwotCQlicmVhazsKLQljYXNlIDMyOgotCQlyZXQgPSBjcnlwdF9zMzkwX2ttYyhLTUNfQUVTXzI1Nl9ERUNSWVBULCAmc2N0eC0+aXYsIG91dCwgaW4sIG5ieXRlcyk7Ci0JCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiBuYnl0ZXM7Ci19Ci0KIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFlc19hbGcgPSB7CiAJLmNyYV9uYW1lCQk9CSJhZXMiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiYWVzLXMzOTAiLAorCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9hZXNfY3R4KSwKQEAgLTIzMywxMCArMTMwLDE4OSBAQAogCQkJLmNpYV9zZXRrZXkJCT0JYWVzX3NldF9rZXksCiAJCQkuY2lhX2VuY3J5cHQJCT0JYWVzX2VuY3J5cHQsCiAJCQkuY2lhX2RlY3J5cHQJCT0JYWVzX2RlY3J5cHQsCi0JCQkuY2lhX2VuY3J5cHRfZWNiCT0JYWVzX2VuY3J5cHRfZWNiLAotCQkJLmNpYV9kZWNyeXB0X2VjYgk9CWFlc19kZWNyeXB0X2VjYiwKLQkJCS5jaWFfZW5jcnlwdF9jYmMJPQlhZXNfZW5jcnlwdF9jYmMsCi0JCQkuY2lhX2RlY3J5cHRfY2JjCT0JYWVzX2RlY3J5cHRfY2JjLAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBlY2JfYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKKwkJCSAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQoreworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOworCisJc3dpdGNoIChrZXlfbGVuKSB7CisJY2FzZSAxNjoKKwkJc2N0eC0+ZW5jID0gS01fQUVTXzEyOF9FTkNSWVBUOworCQlzY3R4LT5kZWMgPSBLTV9BRVNfMTI4X0RFQ1JZUFQ7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXNjdHgtPmVuYyA9IEtNX0FFU18xOTJfRU5DUllQVDsKKwkJc2N0eC0+ZGVjID0gS01fQUVTXzE5Ml9ERUNSWVBUOworCQlicmVhazsKKwljYXNlIDMyOgorCQlzY3R4LT5lbmMgPSBLTV9BRVNfMjU2X0VOQ1JZUFQ7CisJCXNjdHgtPmRlYyA9IEtNX0FFU18yNTZfREVDUllQVDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGFlc19zZXRfa2V5KHRmbSwgaW5fa2V5LCBrZXlfbGVuKTsKK30KKworc3RhdGljIGludCBlY2JfYWVzX2NyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgbG9uZyBmdW5jLCB2b2lkICpwYXJhbSwKKwkJCSBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCit7CisJaW50IHJldCA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgd2Fsayk7CisJdW5zaWduZWQgaW50IG5ieXRlczsKKworCXdoaWxlICgobmJ5dGVzID0gd2Fsay0+bmJ5dGVzKSkgeworCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KKwkJdW5zaWduZWQgaW50IG4gPSBuYnl0ZXMgJiB+KEFFU19CTE9DS19TSVpFIC0gMSk7CisJCXU4ICpvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCQl1OCAqaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCisJCXJldCA9IGNyeXB0X3MzOTBfa20oZnVuYywgcGFyYW0sIG91dCwgaW4sIG4pOworCQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbikpOworCisJCW5ieXRlcyAmPSBBRVNfQkxPQ0tfU0laRSAtIDE7CisJCXJldCA9IGJsa2NpcGhlcl93YWxrX2RvbmUoZGVzYywgd2FsaywgbmJ5dGVzKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGVjYl9hZXNfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBzMzkwX2Flc19jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGVjYl9hZXNfY3J5cHQoZGVzYywgc2N0eC0+ZW5jLCBzY3R4LT5rZXksICZ3YWxrKTsKK30KKworc3RhdGljIGludCBlY2JfYWVzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBlY2JfYWVzX2NyeXB0KGRlc2MsIHNjdHgtPmRlYywgc2N0eC0+a2V5LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfYWVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImVjYihhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImVjYi1hZXMtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9hZXNfY3R4KSwKKwkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZWNiX2Flc19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CUFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJCT0JQUVTX01BWF9LRVlfU0laRSwKKwkJCS5zZXRrZXkJCQk9CWVjYl9hZXNfc2V0X2tleSwKKwkJCS5lbmNyeXB0CQk9CWVjYl9hZXNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CQk9CWVjYl9hZXNfZGVjcnlwdCwKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgY2JjX2Flc19zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCisJCQkgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKK3sKKwlzdHJ1Y3QgczM5MF9hZXNfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCXN3aXRjaCAoa2V5X2xlbikgeworCWNhc2UgMTY6CisJCXNjdHgtPmVuYyA9IEtNQ19BRVNfMTI4X0VOQ1JZUFQ7CisJCXNjdHgtPmRlYyA9IEtNQ19BRVNfMTI4X0RFQ1JZUFQ7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXNjdHgtPmVuYyA9IEtNQ19BRVNfMTkyX0VOQ1JZUFQ7CisJCXNjdHgtPmRlYyA9IEtNQ19BRVNfMTkyX0RFQ1JZUFQ7CisJCWJyZWFrOworCWNhc2UgMzI6CisJCXNjdHgtPmVuYyA9IEtNQ19BRVNfMjU2X0VOQ1JZUFQ7CisJCXNjdHgtPmRlYyA9IEtNQ19BRVNfMjU2X0RFQ1JZUFQ7CisJCWJyZWFrOworCX0KKworCXJldHVybiBhZXNfc2V0X2tleSh0Zm0sIGluX2tleSwga2V5X2xlbik7Cit9CisKK3N0YXRpYyBpbnQgY2JjX2Flc19jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGxvbmcgZnVuYywgdm9pZCAqcGFyYW0sCisJCQkgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQoreworCWludCByZXQgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsIHdhbGspOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CisKKwlpZiAoIW5ieXRlcykKKwkJZ290byBvdXQ7CisKKwltZW1jcHkocGFyYW0sIHdhbGstPml2LCBBRVNfQkxPQ0tfU0laRSk7CisJZG8geworCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KKwkJdW5zaWduZWQgaW50IG4gPSBuYnl0ZXMgJiB+KEFFU19CTE9DS19TSVpFIC0gMSk7CisJCXU4ICpvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCQl1OCAqaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCisJCXJldCA9IGNyeXB0X3MzOTBfa21jKGZ1bmMsIHBhcmFtLCBvdXQsIGluLCBuKTsKKwkJQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG4pKTsKKworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfSB3aGlsZSAoKG5ieXRlcyA9IHdhbGstPm5ieXRlcykpOworCW1lbWNweSh3YWxrLT5pdiwgcGFyYW0sIEFFU19CTE9DS19TSVpFKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2JjX2Flc19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gY2JjX2Flc19jcnlwdChkZXNjLCBzY3R4LT5lbmMsIHNjdHgtPml2LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBpbnQgY2JjX2Flc19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IHMzOTBfYWVzX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gY2JjX2Flc19jcnlwdChkZXNjLCBzY3R4LT5kZWMsIHNjdHgtPml2LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjYmNfYWVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImNiYyhhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImNiYy1hZXMtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgczM5MF9hZXNfY3R4KSwKKwkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoY2JjX2Flc19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CUFFU19NSU5fS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJCT0JQUVTX01BWF9LRVlfU0laRSwKKwkJCS5pdnNpemUJCQk9CUFFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJCT0JY2JjX2Flc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJCT0JY2JjX2Flc19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JY2JjX2Flc19kZWNyeXB0LAogCQl9CiAJfQogfTsKQEAgLTI1NiwxMyArMzMyLDQwIEBACiAJCXJldHVybiAtRU5PU1lTOwogCiAJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWVzX2FsZyk7Ci0JaWYgKHJldCAhPSAwKQotCQlwcmludGsoS0VSTl9JTkZPICJjcnlwdF9zMzkwOiBhZXNfczM5MCBjb3VsZG4ndCBiZSBsb2FkZWQuXG4iKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY3J5cHRfczM5MDogYWVzLXMzOTAgY291bGRuJ3QgYmUgbG9hZGVkLlxuIik7CisJCWdvdG8gYWVzX2VycjsKKwl9CisKKwlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZlY2JfYWVzX2FsZyk7CisJaWYgKHJldCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8KKwkJICAgICAgICJjcnlwdF9zMzkwOiBlY2ItYWVzLXMzOTAgY291bGRuJ3QgYmUgbG9hZGVkLlxuIik7CisJCWdvdG8gZWNiX2Flc19lcnI7CisJfQorCisJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmY2JjX2Flc19hbGcpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPCisJCSAgICAgICAiY3J5cHRfczM5MDogY2JjLWFlcy1zMzkwIGNvdWxkbid0IGJlIGxvYWRlZC5cbiIpOworCQlnb3RvIGNiY19hZXNfZXJyOworCX0KKworb3V0OgogCXJldHVybiByZXQ7CisKK2NiY19hZXNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Flc19hbGcpOworZWNiX2Flc19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNfYWxnKTsKK2Flc19lcnI6CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhZXNfZmluaSh2b2lkKQogeworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Flc19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Flc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmYWVzX2FsZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vY3J5cHRfczM5MC5oIGIvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmgKaW5kZXggZDFjMjU5YS4uZWZkODM2YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmgKQEAgLTIwLDYgKzIwLDkgQEAKICNkZWZpbmUgQ1JZUFRfUzM5MF9PUF9NQVNLIDB4RkYwMAogI2RlZmluZSBDUllQVF9TMzkwX0ZVTkNfTUFTSyAweDAwRkYKIAorI2RlZmluZSBDUllQVF9TMzkwX1BSSU9SSVRZIDMwMAorI2RlZmluZSBDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSA0MDAKKwogLyogczkzMCBjcnlwdG9ncmFwaGljIG9wZXJhdGlvbnMgKi8KIGVudW0gY3J5cHRfczM5MF9vcGVyYXRpb25zIHsKIAlDUllQVF9TMzkwX0tNICAgPSAweDAxMDAsCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL2Rlc19zMzkwLmMKaW5kZXggYjNmNzQ5Ni4uMmFiYTA0OCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9kZXNfczM5MC5jCisrKyBiL2FyY2gvczM5MC9jcnlwdG8vZGVzX3MzOTAuYwpAQCAtMTMsOSArMTMsMTAgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCisKKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgogCiAjaW5jbHVkZSAiY3J5cHRfczM5MC5oIgogI2luY2x1ZGUgImNyeXB0b19kZXMuaCIKQEAgLTQ1LDkgKzQ2LDEwIEBACiB9OwogCiBzdGF0aWMgaW50IGRlc19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJICAgICAgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncykKKwkJICAgICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOwogCWludCByZXQ7CiAKIAkvKiB0ZXN0IGlmIGtleSBpcyB2YWxpZCAobm90IGEgd2VhayBrZXkpICovCkBAIC03MSw2OSArNzMsMTAgQEAKIAljcnlwdF9zMzkwX2ttKEtNX0RFQV9ERUNSWVBULCBkY3R4LT5rZXksIG91dCwgaW4sIERFU19CTE9DS19TSVpFKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBkZXNfZW5jcnlwdF9lY2IoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqb3V0LAotCQkJCSAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KGRlc2MtPnRmbSk7Ci0JaW50IHJldDsKLQotCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLwotCW5ieXRlcyAmPSB+KERFU19CTE9DS19TSVpFIC0gMSk7Ci0JcmV0ID0gY3J5cHRfczM5MF9rbShLTV9ERUFfRU5DUllQVCwgc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQotCXJldHVybiBuYnl0ZXM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVzX2RlY3J5cHRfZWNiKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywgdTggKm91dCwKLQkJCQkgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eChkZXNjLT50Zm0pOwotCWludCByZXQ7Ci0KLQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KLQluYnl0ZXMgJj0gfihERVNfQkxPQ0tfU0laRSAtIDEpOwotCXJldCA9IGNyeXB0X3MzOTBfa20oS01fREVBX0RFQ1JZUFQsIHNjdHgtPmtleSwgb3V0LCBpbiwgbmJ5dGVzKTsKLQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0KLQlyZXR1cm4gbmJ5dGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlc19lbmNyeXB0X2NiYyhjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpvdXQsCi0JCQkJICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oREVTX0JMT0NLX1NJWkUgLSAxKTsKLQotCW1lbWNweShzY3R4LT5pdiwgZGVzYy0+aW5mbywgREVTX0JMT0NLX1NJWkUpOwotCXJldCA9IGNyeXB0X3MzOTBfa21jKEtNQ19ERUFfRU5DUllQVCwgJnNjdHgtPml2LCBvdXQsIGluLCBuYnl0ZXMpOwotCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQotCW1lbWNweShkZXNjLT5pbmZvLCBzY3R4LT5pdiwgREVTX0JMT0NLX1NJWkUpOwotCXJldHVybiBuYnl0ZXM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVzX2RlY3J5cHRfY2JjKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywgdTggKm91dCwKLQkJCQkgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eChkZXNjLT50Zm0pOwotCWludCByZXQ7Ci0KLQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KLQluYnl0ZXMgJj0gfihERVNfQkxPQ0tfU0laRSAtIDEpOwotCi0JbWVtY3B5KCZzY3R4LT5pdiwgZGVzYy0+aW5mbywgREVTX0JMT0NLX1NJWkUpOwotCXJldCA9IGNyeXB0X3MzOTBfa21jKEtNQ19ERUFfREVDUllQVCwgJnNjdHgtPml2LCBvdXQsIGluLCBuYnl0ZXMpOwotCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQotCXJldHVybiBuYnl0ZXM7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBkZXNfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiZGVzIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImRlcy1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfUFJJT1JJVFksCiAJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQ0lQSEVSLAogCS5jcmFfYmxvY2tzaXplCQk9CURFU19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCksCkBAIC0xNDYsMTAgKzg5LDE0MyBAQAogCQkJLmNpYV9zZXRrZXkJCT0JZGVzX3NldGtleSwKIAkJCS5jaWFfZW5jcnlwdAkJPQlkZXNfZW5jcnlwdCwKIAkJCS5jaWFfZGVjcnlwdAkJPQlkZXNfZGVjcnlwdCwKLQkJCS5jaWFfZW5jcnlwdF9lY2IJPQlkZXNfZW5jcnlwdF9lY2IsCi0JCQkuY2lhX2RlY3J5cHRfZWNiCT0JZGVzX2RlY3J5cHRfZWNiLAotCQkJLmNpYV9lbmNyeXB0X2NiYwk9CWRlc19lbmNyeXB0X2NiYywKLQkJCS5jaWFfZGVjcnlwdF9jYmMJPQlkZXNfZGVjcnlwdF9jYmMsCisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IGVjYl9kZXNhbGxfY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLCBsb25nIGZ1bmMsCisJCQkgICAgdm9pZCAqcGFyYW0sIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlpbnQgcmV0ID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCB3YWxrKTsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzOworCisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLT5uYnl0ZXMpKSB7CisJCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLworCQl1bnNpZ25lZCBpbnQgbiA9IG5ieXRlcyAmIH4oREVTX0JMT0NLX1NJWkUgLSAxKTsKKwkJdTggKm91dCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CisJCXU4ICppbiA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CisKKwkJcmV0ID0gY3J5cHRfczM5MF9rbShmdW5jLCBwYXJhbSwgb3V0LCBpbiwgbik7CisJCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuKSk7CisKKwkJbmJ5dGVzICY9IERFU19CTE9DS19TSVpFIC0gMTsKKwkJcmV0ID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCB3YWxrLCBuYnl0ZXMpOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgY2JjX2Rlc2FsbF9jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIGxvbmcgZnVuYywKKwkJCSAgICB2b2lkICpwYXJhbSwgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQoreworCWludCByZXQgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsIHdhbGspOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CisKKwlpZiAoIW5ieXRlcykKKwkJZ290byBvdXQ7CisKKwltZW1jcHkocGFyYW0sIHdhbGstPml2LCBERVNfQkxPQ0tfU0laRSk7CisJZG8geworCQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KKwkJdW5zaWduZWQgaW50IG4gPSBuYnl0ZXMgJiB+KERFU19CTE9DS19TSVpFIC0gMSk7CisJCXU4ICpvdXQgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCQl1OCAqaW4gPSB3YWxrLT5zcmMudmlydC5hZGRyOworCisJCXJldCA9IGNyeXB0X3MzOTBfa21jKGZ1bmMsIHBhcmFtLCBvdXQsIGluLCBuKTsKKwkJQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG4pKTsKKworCQluYnl0ZXMgJj0gREVTX0JMT0NLX1NJWkUgLSAxOworCQlyZXQgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfSB3aGlsZSAoKG5ieXRlcyA9IHdhbGstPm5ieXRlcykpOworCW1lbWNweSh3YWxrLT5pdiwgcGFyYW0sIERFU19CTE9DS19TSVpFKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWNiX2Rlc19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gZWNiX2Rlc2FsbF9jcnlwdChkZXNjLCBLTV9ERUFfRU5DUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBpbnQgZWNiX2Rlc19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0X3MzOTBfZGVzX2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gZWNiX2Rlc2FsbF9jcnlwdChkZXNjLCBLTV9ERUFfREVDUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImVjYihkZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImVjYi1kZXMtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JREVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4KSwKKwkuY3JhX3R5cGUJCT0JJmNyeXB0b19ibGtjaXBoZXJfdHlwZSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoZWNiX2Rlc19hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CURFU19LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlERVNfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQkJPQlkZXNfc2V0a2V5LAorCQkJLmVuY3J5cHQJCT0JZWNiX2Rlc19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JZWNiX2Rlc19kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBjYmNfZGVzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19ERUFfRU5DUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKK30KKworc3RhdGljIGludCBjYmNfZGVzX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRfczM5MF9kZXNfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19ERUFfREVDUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGNiY19kZXNfYWxnID0geworCS5jcmFfbmFtZQkJPQkiY2JjKGRlcykiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiY2JjLWRlcy1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CQk9CUNSWVBUX1MzOTBfQ09NUE9TSVRFX1BSSU9SSVRZLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2Rlc19jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChjYmNfZGVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JREVTX0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCQk9CURFU19LRVlfU0laRSwKKwkJCS5pdnNpemUJCQk9CURFU19CTE9DS19TSVpFLAorCQkJLnNldGtleQkJCT0JZGVzX3NldGtleSwKKwkJCS5lbmNyeXB0CQk9CWNiY19kZXNfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CQk9CWNiY19kZXNfZGVjcnlwdCwKIAkJfQogCX0KIH07CkBAIC0xNjcsMTEgKzI0MywxMiBAQAogICoKICAqLwogc3RhdGljIGludCBkZXMzXzEyOF9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJCSAgIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCisJCQkgICB1bnNpZ25lZCBpbnQga2V5bGVuKQogewogCWludCBpLCByZXQ7CiAJc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQljb25zdCB1OCogdGVtcF9rZXkgPSBrZXk7CisJY29uc3QgdTggKnRlbXBfa2V5ID0ga2V5OworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAKIAlpZiAoIShtZW1jbXAoa2V5LCAma2V5W0RFU19LRVlfU0laRV0sIERFU19LRVlfU0laRSkpKSB7CiAJCSpmbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX1NDSEVEOwpAQCAtMjAyLDczICsyNzksMTAgQEAKIAkJICAgICAgREVTM18xMjhfQkxPQ0tfU0laRSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVzM18xMjhfZW5jcnlwdF9lY2IoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAotCQkJCQkgdTggKm91dCwgY29uc3QgdTggKmluLAotCQkJCQkgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzEyOF9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eChkZXNjLT50Zm0pOwotCWludCByZXQ7Ci0KLQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KLQluYnl0ZXMgJj0gfihERVMzXzEyOF9CTE9DS19TSVpFIC0gMSk7Ci0JcmV0ID0gY3J5cHRfczM5MF9rbShLTV9UREVBXzEyOF9FTkNSWVBULCBzY3R4LT5rZXksIG91dCwgaW4sIG5ieXRlcyk7Ci0JQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG5ieXRlcykpOwotCi0JcmV0dXJuIG5ieXRlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkZXMzXzEyOF9kZWNyeXB0X2VjYihjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJCSB1OCAqb3V0LCBjb25zdCB1OCAqaW4sCi0JCQkJCSB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KGRlc2MtPnRmbSk7Ci0JaW50IHJldDsKLQotCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLwotCW5ieXRlcyAmPSB+KERFUzNfMTI4X0JMT0NLX1NJWkUgLSAxKTsKLQlyZXQgPSBjcnlwdF9zMzkwX2ttKEtNX1RERUFfMTI4X0RFQ1JZUFQsIHNjdHgtPmtleSwgb3V0LCBpbiwgbmJ5dGVzKTsKLQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0KLQlyZXR1cm4gbmJ5dGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlczNfMTI4X2VuY3J5cHRfY2JjKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQkJIHU4ICpvdXQsIGNvbnN0IHU4ICppbiwKLQkJCQkJIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oREVTM18xMjhfQkxPQ0tfU0laRSAtIDEpOwotCi0JbWVtY3B5KHNjdHgtPml2LCBkZXNjLT5pbmZvLCBERVMzXzEyOF9CTE9DS19TSVpFKTsKLQlyZXQgPSBjcnlwdF9zMzkwX2ttYyhLTUNfVERFQV8xMjhfRU5DUllQVCwgJnNjdHgtPml2LCBvdXQsIGluLCBuYnl0ZXMpOwotCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQotCW1lbWNweShkZXNjLT5pbmZvLCBzY3R4LT5pdiwgREVTM18xMjhfQkxPQ0tfU0laRSk7Ci0JcmV0dXJuIG5ieXRlczsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkZXMzXzEyOF9kZWNyeXB0X2NiYyhjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJCSB1OCAqb3V0LCBjb25zdCB1OCAqaW4sCi0JCQkJCSB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KGRlc2MtPnRmbSk7Ci0JaW50IHJldDsKLQotCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLwotCW5ieXRlcyAmPSB+KERFUzNfMTI4X0JMT0NLX1NJWkUgLSAxKTsKLQotCW1lbWNweSgmc2N0eC0+aXYsIGRlc2MtPmluZm8sIERFUzNfMTI4X0JMT0NLX1NJWkUpOwotCXJldCA9IGNyeXB0X3MzOTBfa21jKEtNQ19UREVBXzEyOF9ERUNSWVBULCAmc2N0eC0+aXYsIG91dCwgaW4sIG5ieXRlcyk7Ci0JQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG5ieXRlcykpOwotCi0JcmV0dXJuIG5ieXRlczsKLX0KLQogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGRlczNfMTI4X2FsZyA9IHsKIAkuY3JhX25hbWUJCT0JImRlczNfZWRlMTI4IiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImRlczNfZWRlMTI4LXMzOTAiLAorCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUJCT0JREVTM18xMjhfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCksCkBAIC0yODEsMTAgKzI5NSw5NSBAQAogCQkJLmNpYV9zZXRrZXkJCT0JZGVzM18xMjhfc2V0a2V5LAogCQkJLmNpYV9lbmNyeXB0CQk9CWRlczNfMTI4X2VuY3J5cHQsCiAJCQkuY2lhX2RlY3J5cHQJCT0JZGVzM18xMjhfZGVjcnlwdCwKLQkJCS5jaWFfZW5jcnlwdF9lY2IJPQlkZXMzXzEyOF9lbmNyeXB0X2VjYiwKLQkJCS5jaWFfZGVjcnlwdF9lY2IJPQlkZXMzXzEyOF9kZWNyeXB0X2VjYiwKLQkJCS5jaWFfZW5jcnlwdF9jYmMJPQlkZXMzXzEyOF9lbmNyeXB0X2NiYywKLQkJCS5jaWFfZGVjcnlwdF9jYmMJPQlkZXMzXzEyOF9kZWNyeXB0X2NiYywKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgZWNiX2RlczNfMTI4X2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gZWNiX2Rlc2FsbF9jcnlwdChkZXNjLCBLTV9UREVBXzEyOF9FTkNSWVBULCBzY3R4LT5rZXksICZ3YWxrKTsKK30KKworc3RhdGljIGludCBlY2JfZGVzM18xMjhfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTI4X0RFQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZWNiX2RlczNfMTI4X2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImVjYihkZXMzX2VkZTEyOCkiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiZWNiLWRlczNfZWRlMTI4LXMzOTAiLAorCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCisJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9CURFUzNfMTI4X0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzEyOF9jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCgKKwkJCQkJCWVjYl9kZXMzXzEyOF9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CURFUzNfMTI4X0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCQk9CURFUzNfMTI4X0tFWV9TSVpFLAorCQkJLnNldGtleQkJCT0JZGVzM18xMjhfc2V0a2V5LAorCQkJLmVuY3J5cHQJCT0JZWNiX2RlczNfMTI4X2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQllY2JfZGVzM18xMjhfZGVjcnlwdCwKKwkJfQorCX0KK307CisKK3N0YXRpYyBpbnQgY2JjX2RlczNfMTI4X2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTI4X2N0eCAqc2N0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KGRlc2MtPnRmbSk7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gY2JjX2Rlc2FsbF9jcnlwdChkZXNjLCBLTUNfVERFQV8xMjhfRU5DUllQVCwgc2N0eC0+aXYsICZ3YWxrKTsKK30KKworc3RhdGljIGludCBjYmNfZGVzM18xMjhfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xMjhfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19UREVBXzEyOF9ERUNSWVBULCBzY3R4LT5pdiwgJndhbGspOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgY2JjX2RlczNfMTI4X2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImNiYyhkZXMzX2VkZTEyOCkiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiY2JjLWRlczNfZWRlMTI4LXMzOTAiLAorCS5jcmFfcHJpb3JpdHkJCT0JQ1JZUFRfUzM5MF9DT01QT1NJVEVfUFJJT1JJVFksCisJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSLAorCS5jcmFfYmxvY2tzaXplCQk9CURFUzNfMTI4X0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzEyOF9jdHgpLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVCgKKwkJCQkJCWNiY19kZXMzXzEyOF9hbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuYmxrY2lwaGVyID0geworCQkJLm1pbl9rZXlzaXplCQk9CURFUzNfMTI4X0tFWV9TSVpFLAorCQkJLm1heF9rZXlzaXplCQk9CURFUzNfMTI4X0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJCT0JREVTM18xMjhfQkxPQ0tfU0laRSwKKwkJCS5zZXRrZXkJCQk9CWRlczNfMTI4X3NldGtleSwKKwkJCS5lbmNyeXB0CQk9CWNiY19kZXMzXzEyOF9lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JY2JjX2RlczNfMTI4X2RlY3J5cHQsCiAJCX0KIAl9CiB9OwpAQCAtMzAzLDExICs0MDIsMTIgQEAKICAqCiAgKi8KIHN0YXRpYyBpbnQgZGVzM18xOTJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQkgICB1bnNpZ25lZCBpbnQga2V5bGVuLCB1MzIgKmZsYWdzKQorCQkJICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAlpbnQgaSwgcmV0OwogCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCAqZGN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7Ci0JY29uc3QgdTgqIHRlbXBfa2V5ID0ga2V5OworCWNvbnN0IHU4ICp0ZW1wX2tleSA9IGtleTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOwogCiAJaWYgKCEobWVtY21wKGtleSwgJmtleVtERVNfS0VZX1NJWkVdLCBERVNfS0VZX1NJWkUpICYmCiAJICAgIG1lbWNtcCgma2V5W0RFU19LRVlfU0laRV0sICZrZXlbREVTX0tFWV9TSVpFICogMl0sCkBAIC0zNDEsNzMgKzQ0MSwxMCBAQAogCQkgICAgICBERVMzXzE5Ml9CTE9DS19TSVpFKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBkZXMzXzE5Ml9lbmNyeXB0X2VjYihjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCi0JCQkJCSB1OCAqb3V0LCBjb25zdCB1OCAqaW4sCi0JCQkJCSB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCAqc2N0eCA9IGNyeXB0b190Zm1fY3R4KGRlc2MtPnRmbSk7Ci0JaW50IHJldDsKLQotCS8qIG9ubHkgdXNlIGNvbXBsZXRlIGJsb2NrcyAqLwotCW5ieXRlcyAmPSB+KERFUzNfMTkyX0JMT0NLX1NJWkUgLSAxKTsKLQlyZXQgPSBjcnlwdF9zMzkwX2ttKEtNX1RERUFfMTkyX0VOQ1JZUFQsIHNjdHgtPmtleSwgb3V0LCBpbiwgbmJ5dGVzKTsKLQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0KLQlyZXR1cm4gbmJ5dGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlczNfMTkyX2RlY3J5cHRfZWNiKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQkJIHU4ICpvdXQsIGNvbnN0IHU4ICppbiwKLQkJCQkJIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oREVTM18xOTJfQkxPQ0tfU0laRSAtIDEpOwotCXJldCA9IGNyeXB0X3MzOTBfa20oS01fVERFQV8xOTJfREVDUllQVCwgc2N0eC0+a2V5LCBvdXQsIGluLCBuYnl0ZXMpOwotCUJVR19PTigocmV0IDwgMCkgfHwgKHJldCAhPSBuYnl0ZXMpKTsKLQotCXJldHVybiBuYnl0ZXM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVzM18xOTJfZW5jcnlwdF9jYmMoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAotCQkJCQkgdTggKm91dCwgY29uc3QgdTggKmluLAotCQkJCQkgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKnNjdHggPSBjcnlwdG9fdGZtX2N0eChkZXNjLT50Zm0pOwotCWludCByZXQ7Ci0KLQkvKiBvbmx5IHVzZSBjb21wbGV0ZSBibG9ja3MgKi8KLQluYnl0ZXMgJj0gfihERVMzXzE5Ml9CTE9DS19TSVpFIC0gMSk7Ci0KLQltZW1jcHkoc2N0eC0+aXYsIGRlc2MtPmluZm8sIERFUzNfMTkyX0JMT0NLX1NJWkUpOwotCXJldCA9IGNyeXB0X3MzOTBfa21jKEtNQ19UREVBXzE5Ml9FTkNSWVBULCAmc2N0eC0+aXYsIG91dCwgaW4sIG5ieXRlcyk7Ci0JQlVHX09OKChyZXQgPCAwKSB8fCAocmV0ICE9IG5ieXRlcykpOwotCi0JbWVtY3B5KGRlc2MtPmluZm8sIHNjdHgtPml2LCBERVMzXzE5Ml9CTE9DS19TSVpFKTsKLQlyZXR1cm4gbmJ5dGVzOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGRlczNfMTkyX2RlY3J5cHRfY2JjKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKLQkJCQkJIHU4ICpvdXQsIGNvbnN0IHU4ICppbiwKLQkJCQkJIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX3RmbV9jdHgoZGVzYy0+dGZtKTsKLQlpbnQgcmV0OwotCi0JLyogb25seSB1c2UgY29tcGxldGUgYmxvY2tzICovCi0JbmJ5dGVzICY9IH4oREVTM18xOTJfQkxPQ0tfU0laRSAtIDEpOwotCi0JbWVtY3B5KCZzY3R4LT5pdiwgZGVzYy0+aW5mbywgREVTM18xOTJfQkxPQ0tfU0laRSk7Ci0JcmV0ID0gY3J5cHRfczM5MF9rbWMoS01DX1RERUFfMTkyX0RFQ1JZUFQsICZzY3R4LT5pdiwgb3V0LCBpbiwgbmJ5dGVzKTsKLQlCVUdfT04oKHJldCA8IDApIHx8IChyZXQgIT0gbmJ5dGVzKSk7Ci0KLQlyZXR1cm4gbmJ5dGVzOwotfQotCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgZGVzM18xOTJfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiZGVzM19lZGUiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkiZGVzM19lZGUtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX1BSSU9SSVRZLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlERVMzXzE5Ml9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4KSwKQEAgLTQyMCwxMCArNDU3LDk1IEBACiAJCQkuY2lhX3NldGtleQkJPQlkZXMzXzE5Ml9zZXRrZXksCiAJCQkuY2lhX2VuY3J5cHQJCT0JZGVzM18xOTJfZW5jcnlwdCwKIAkJCS5jaWFfZGVjcnlwdAkJPQlkZXMzXzE5Ml9kZWNyeXB0LAotCQkJLmNpYV9lbmNyeXB0X2VjYgk9CWRlczNfMTkyX2VuY3J5cHRfZWNiLAotCQkJLmNpYV9kZWNyeXB0X2VjYgk9CWRlczNfMTkyX2RlY3J5cHRfZWNiLAotCQkJLmNpYV9lbmNyeXB0X2NiYwk9CWRlczNfMTkyX2VuY3J5cHRfY2JjLAotCQkJLmNpYV9kZWNyeXB0X2NiYwk9CWRlczNfMTkyX2RlY3J5cHRfY2JjLAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBlY2JfZGVzM18xOTJfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBlY2JfZGVzYWxsX2NyeXB0KGRlc2MsIEtNX1RERUFfMTkyX0VOQ1JZUFQsIHNjdHgtPmtleSwgJndhbGspOworfQorCitzdGF0aWMgaW50IGVjYl9kZXMzXzE5Ml9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGVjYl9kZXNhbGxfY3J5cHQoZGVzYywgS01fVERFQV8xOTJfREVDUllQVCwgc2N0eC0+a2V5LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfZGVzM18xOTJfYWxnID0geworCS5jcmFfbmFtZQkJPQkiZWNiKGRlczNfZWRlKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJlY2ItZGVzM19lZGUtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JREVTM18xOTJfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCksCisJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKAorCQkJCQkJZWNiX2RlczNfMTkyX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JREVTM18xOTJfS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJCT0JREVTM18xOTJfS0VZX1NJWkUsCisJCQkuc2V0a2V5CQkJPQlkZXMzXzE5Ml9zZXRrZXksCisJCQkuZW5jcnlwdAkJPQllY2JfZGVzM18xOTJfZW5jcnlwdCwKKwkJCS5kZWNyeXB0CQk9CWVjYl9kZXMzXzE5Ml9kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBjYmNfZGVzM18xOTJfZW5jcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGNyeXB0X3MzOTBfZGVzM18xOTJfY3R4ICpzY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCXJldHVybiBjYmNfZGVzYWxsX2NyeXB0KGRlc2MsIEtNQ19UREVBXzE5Ml9FTkNSWVBULCBzY3R4LT5pdiwgJndhbGspOworfQorCitzdGF0aWMgaW50IGNiY19kZXMzXzE5Ml9kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgY3J5cHRfczM5MF9kZXMzXzE5Ml9jdHggKnNjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGNiY19kZXNhbGxfY3J5cHQoZGVzYywgS01DX1RERUFfMTkyX0RFQ1JZUFQsIHNjdHgtPml2LCAmd2Fsayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjYmNfZGVzM18xOTJfYWxnID0geworCS5jcmFfbmFtZQkJPQkiY2JjKGRlczNfZWRlKSIsCisJLmNyYV9kcml2ZXJfbmFtZQk9CSJjYmMtZGVzM19lZGUtczM5MCIsCisJLmNyYV9wcmlvcml0eQkJPQlDUllQVF9TMzkwX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JREVTM18xOTJfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBjcnlwdF9zMzkwX2RlczNfMTkyX2N0eCksCisJLmNyYV90eXBlCQk9CSZjcnlwdG9fYmxrY2lwaGVyX3R5cGUsCisJLmNyYV9tb2R1bGUJCT0JVEhJU19NT0RVTEUsCisJLmNyYV9saXN0CQk9CUxJU1RfSEVBRF9JTklUKAorCQkJCQkJY2JjX2RlczNfMTkyX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JREVTM18xOTJfS0VZX1NJWkUsCisJCQkubWF4X2tleXNpemUJCT0JREVTM18xOTJfS0VZX1NJWkUsCisJCQkuaXZzaXplCQkJPQlERVMzXzE5Ml9CTE9DS19TSVpFLAorCQkJLnNldGtleQkJCT0JZGVzM18xOTJfc2V0a2V5LAorCQkJLmVuY3J5cHQJCT0JY2JjX2RlczNfMTkyX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljYmNfZGVzM18xOTJfZGVjcnlwdCwKIAkJfQogCX0KIH07CkBAIC00MzcsMjIgKzU1OSw2OSBAQAogCSAgICAhY3J5cHRfczM5MF9mdW5jX2F2YWlsYWJsZShLTV9UREVBXzE5Ml9FTkNSWVBUKSkKIAkJcmV0dXJuIC1FTk9TWVM7CiAKLQlyZXQgfD0gKGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlc19hbGcpID09IDApID8gMDoxOwotCXJldCB8PSAoY3J5cHRvX3JlZ2lzdGVyX2FsZygmZGVzM18xMjhfYWxnKSA9PSAwKSA/IDA6MjsKLQlyZXQgfD0gKGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZykgPT0gMCkgPyAwOjQ7Ci0JaWYgKHJldCkgewotCQljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7Ci0JCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM18xMjhfYWxnKTsKLQkJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXNfYWxnKTsKLQkJcmV0dXJuIC1FRVhJU1Q7Ci0JfQotCXJldHVybiAwOworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlc19hbGcpOworCWlmIChyZXQpCisJCWdvdG8gZGVzX2VycjsKKwlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZlY2JfZGVzX2FsZyk7CisJaWYgKHJldCkKKwkJZ290byBlY2JfZGVzX2VycjsKKwlyZXQgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZjYmNfZGVzX2FsZyk7CisJaWYgKHJldCkKKwkJZ290byBjYmNfZGVzX2VycjsKKworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlczNfMTI4X2FsZyk7CisJaWYgKHJldCkKKwkJZ290byBkZXMzXzEyOF9lcnI7CisJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTI4X2FsZyk7CisJaWYgKHJldCkKKwkJZ290byBlY2JfZGVzM18xMjhfZXJyOworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzEyOF9hbGcpOworCWlmIChyZXQpCisJCWdvdG8gY2JjX2RlczNfMTI4X2VycjsKKworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmRlczNfMTkyX2FsZyk7CisJaWYgKHJldCkKKwkJZ290byBkZXMzXzE5Ml9lcnI7CisJcmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTkyX2FsZyk7CisJaWYgKHJldCkKKwkJZ290byBlY2JfZGVzM18xOTJfZXJyOworCXJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzE5Ml9hbGcpOworCWlmIChyZXQpCisJCWdvdG8gY2JjX2RlczNfMTkyX2VycjsKKworb3V0OgorCXJldHVybiByZXQ7CisKK2NiY19kZXMzXzE5Ml9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfZGVzM18xOTJfYWxnKTsKK2VjYl9kZXMzXzE5Ml9lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzXzE5Ml9hbGcpOworZGVzM18xOTJfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2RlczNfMTI4X2FsZyk7CitjYmNfZGVzM18xMjhfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTI4X2FsZyk7CitlY2JfZGVzM18xMjhfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM18xMjhfYWxnKTsKK2RlczNfMTI4X2VycjoKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXNfYWxnKTsKK2NiY19kZXNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Rlc19hbGcpOworZWNiX2Rlc19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXNfYWxnKTsKK2Rlc19lcnI6CisJZ290byBvdXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCiB7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjYmNfZGVzM18xOTJfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmVjYl9kZXMzXzE5Ml9hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzM18xOTJfYWxnKTsKKwljcnlwdG9fdW5yZWdpc3Rlcl9hbGcoJmNiY19kZXMzXzEyOF9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2RlczNfMTI4X2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZkZXMzXzEyOF9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmY2JjX2Rlc19hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Rlc19hbGcpOwogCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZGVzX2FsZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYTFfczM5MC5jCmluZGV4IDlkMzRhMzUuLjQ5Y2E4NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9jcnlwdG8vc2hhMV9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGExX3MzOTAuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7CiAJLmNyYV9uYW1lCT0JInNoYTEiLAorCS5jcmFfZHJpdmVyX25hbWUgPQkic2hhMS1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKIAkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTFfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJPQlzaXplb2Yoc3RydWN0IGNyeXB0X3MzOTBfc2hhMV9jdHgpLApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCmluZGV4IGY1NzNkZjMwLi44ZTRlNjc1IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYTI1Nl9zMzkwLmMKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9zaGEyNTZfczM5MC5jCkBAIC0xMjcsNiArMTI3LDggQEAKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKIAkuY3JhX25hbWUJPQkic2hhMjU2IiwKKwkuY3JhX2RyaXZlcl9uYW1lID0JInNoYTI1Ni1zMzkwIiwKKwkuY3JhX3ByaW9yaXR5CT0JQ1JZUFRfUzM5MF9QUklPUklUWSwKIAkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCwKIAkuY3JhX2Jsb2Nrc2l6ZQk9CVNIQTI1Nl9CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgczM5MF9zaGEyNTZfY3R4KSwKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9kZWZjb25maWcgYi9hcmNoL3MzOTAvZGVmY29uZmlnCmluZGV4IGY0ZGZjMTAuLjM1ZGE1MzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9kZWZjb25maWcKKysrIGIvYXJjaC9zMzkwL2RlZmNvbmZpZwpAQCAtMSwxMyArMSwxNiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LXJjMQotIyBNb24gQXByICAzIDE0OjM0OjE1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzIKKyMgVGh1IEp1bCAyNyAxMzo1MTowNyAyMDA2CiAjCiBDT05GSUdfTU1VPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfUldTRU1fWENIR0FERF9BTEdPUklUSE09eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX1MzOTA9eQorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI1LDYgKzI4LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQVVESVQ9eQogIyBDT05GSUdfQVVESVRTWVNDQUxMIGlzIG5vdCBzZXQKQEAgLTQzLDEwICs0NywxMiBAQAogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfU0xBQj15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQogIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfQkFTRV9TTUFMTD0wCiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTk0LDcgKzEwMCw2IEBACiBDT05GSUdfREVGQVVMVF9NSUdSQVRJT05fQ09TVD0xMDAwMDAwCiBDT05GSUdfQ09NUEFUPXkKIENPTkZJR19TWVNWSVBDX0NPTVBBVD15Ci1DT05GSUdfQklORk1UX0VMRjMyPXkKIAogIwogIyBDb2RlIGdlbmVyYXRpb24gb3B0aW9ucwpAQCAtMTE1LDYgKzEyMCw3IEBACiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CiBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX1JFU09VUkNFU182NEJJVD15CiAKICMKICMgSS9PIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uCkBAIC0xNDIsNiArMTQ4LDcgQEAKICMgQ09ORklHX0FQUExEQVRBX0JBU0UgaXMgbm90IHNldAogQ09ORklHX05PX0lETEVfSFo9eQogQ09ORklHX05PX0lETEVfSFpfSU5JVD15CitDT05GSUdfUzM5MF9IWVBGU19GUz15CiBDT05GSUdfS0VYRUM9eQogCiAjCkBAIC0xNzQsNiArMTgxLDggQEAKICMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAogIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKIENPTkZJR19JTkVUX0RJQUc9eQogQ09ORklHX0lORVRfVENQX0RJQUc9eQogIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldApAQCAtMTg2LDcgKzE5NSwxMCBAQAogIyBDT05GSUdfSU5FVDZfSVBDT01QIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CiAjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKIAogIwpAQCAtMjYzLDYgKzI3NSw3IEBACiAjIE5ldHdvcmsgdGVzdGluZwogIwogIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVENQUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAogIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CVCBpcyBub3Qgc2V0CkBAIC0yNzYsNiArMjg5LDcgQEAKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorQ09ORklHX1NZU19IWVBFUlZJU09SPXkKIAogIwogIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCkBAIC0zMzQsNiArMzQ4LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogCkBAIC0zNTksOSArMzc0LDcgQEAKIENPTkZJR19NRF9SQUlEMD1tCiBDT05GSUdfTURfUkFJRDE9bQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT1tCi0jIENPTkZJR19NRF9SQUlENV9SRVNIQVBFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAogQ09ORklHX01EX01VTFRJUEFUSD1tCiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtNDE1LDExICs0MjgsMTMgQEAKICMgQ09ORklHX1ZNTE9HUkRSIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNQ1AgaXMgbm90IHNldAogIyBDT05GSUdfTU9OUkVBREVSIGlzIG5vdCBzZXQKK0NPTkZJR19NT05XUklURVI9bQogCiAjCiAjIENyeXB0b2dyYXBoaWMgZGV2aWNlcwogIwotQ09ORklHX1o5MENSWVBUPW0KK0NPTkZJR19aQ1JZUFQ9bQorIyBDT05GSUdfWkNSWVBUX01PTk9MSVRISUMgaXMgbm90IHNldAogCiAjCiAjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKQEAgLTUwOSw2ICs1MjQsNyBAQAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldApAQCAtNjE0LDI2ICs2MzAsMzYgQEAKICMgSW5zdHJ1bWVudGF0aW9uIFN1cHBvcnQKICMKICMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVEFUSVNUSUNTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFUSVNUSUNTPXkKK0NPTkZJR19LUFJPQkVTPXkKIAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKICMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUFJFRU1QVD15Ci1DT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVfUE9JTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CiBDT05GSUdfRk9SQ0VEX0lOTElOSU5HPXkKICMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldApAQCAtNjg4LDMgKzcxNCw0IEBACiAjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CiBDT05GSUdfQ1JDMzI9bQogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnMuaCBiL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oCmluZGV4IGVhNTU2N2IuLmYzZGJkOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBmcy9oeXBmcy9oeXBmcy5oCisgKiAgYXJjaC9zMzkwL2h5cGZzL2h5cGZzLmgKICAqICAgIEh5cGVydmlzb3IgZmlsZXN5c3RlbSBmb3IgTGludXggb24gczM5MC4KICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwppbmRleCAxNzg1YmNlLi43NTE0NGVmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGZzL2h5cGZzL2h5cGZzX2RpYWcuYworICogIGFyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKICAqICAgIEh5cGVydmlzb3IgZmlsZXN5c3RlbSBmb3IgTGludXggb24gczM5MC4gRGlhZyAyMDQgYW5kIDIyNAogICogICAgaW1wbGVtZW50YXRpb24uCiAgKgpAQCAtNDMyLDEyICs0MzIsMTQgQEAKIAogCWJ1ZiA9IGRpYWcyMDRfZ2V0X2J1ZmZlcihJTkZPX0VYVCwgJnBhZ2VzKTsKIAlpZiAoIUlTX0VSUihidWYpKSB7Ci0JCWlmIChkaWFnMjA0KFNVQkNfU1RJQjcgfCBJTkZPX0VYVCwgcGFnZXMsIGJ1ZikgPj0gMCkgeworCQlpZiAoZGlhZzIwNCgodW5zaWduZWQgbG9uZylTVUJDX1NUSUI3IHwKKwkJCSAgICAodW5zaWduZWQgbG9uZylJTkZPX0VYVCwgcGFnZXMsIGJ1ZikgPj0gMCkgewogCQkJZGlhZzIwNF9zdG9yZV9zYyA9IFNVQkNfU1RJQjc7CiAJCQlkaWFnMjA0X2luZm9fdHlwZSA9IElORk9fRVhUOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJaWYgKGRpYWcyMDQoU1VCQ19TVElCNiB8IElORk9fRVhULCBwYWdlcywgYnVmKSA+PSAwKSB7CisJCWlmIChkaWFnMjA0KCh1bnNpZ25lZCBsb25nKVNVQkNfU1RJQjYgfAorCQkJICAgICh1bnNpZ25lZCBsb25nKUlORk9fRVhULCBwYWdlcywgYnVmKSA+PSAwKSB7CiAJCQlkaWFnMjA0X3N0b3JlX3NjID0gU1VCQ19TVElCNzsKIAkJCWRpYWcyMDRfaW5mb190eXBlID0gSU5GT19FWFQ7CiAJCQlnb3RvIG91dDsKQEAgLTQ1Miw3ICs0NTQsOCBAQAogCQlyYyA9IFBUUl9FUlIoYnVmKTsKIAkJZ290byBmYWlsX2FsbG9jOwogCX0KLQlpZiAoZGlhZzIwNChTVUJDX1NUSUI0IHwgSU5GT19TSU1QTEUsIHBhZ2VzLCBidWYpID49IDApIHsKKwlpZiAoZGlhZzIwNCgodW5zaWduZWQgbG9uZylTVUJDX1NUSUI0IHwKKwkJICAgICh1bnNpZ25lZCBsb25nKUlORk9fU0lNUExFLCBwYWdlcywgYnVmKSA+PSAwKSB7CiAJCWRpYWcyMDRfc3RvcmVfc2MgPSBTVUJDX1NUSUI0OwogCQlkaWFnMjA0X2luZm9fdHlwZSA9IElORk9fU0lNUExFOwogCQlnb3RvIG91dDsKQEAgLTQ3Niw3ICs0NzksOCBAQAogCWJ1ZiA9IGRpYWcyMDRfZ2V0X2J1ZmZlcihkaWFnMjA0X2luZm9fdHlwZSwgJnBhZ2VzKTsKIAlpZiAoSVNfRVJSKGJ1ZikpCiAJCWdvdG8gb3V0OwotCWlmIChkaWFnMjA0KGRpYWcyMDRfc3RvcmVfc2MgfCBkaWFnMjA0X2luZm9fdHlwZSwgcGFnZXMsIGJ1ZikgPCAwKQorCWlmIChkaWFnMjA0KCh1bnNpZ25lZCBsb25nKWRpYWcyMDRfc3RvcmVfc2MgfAorCQkgICAgKHVuc2lnbmVkIGxvbmcpZGlhZzIwNF9pbmZvX3R5cGUsIHBhZ2VzLCBidWYpIDwgMCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7CiBvdXQ6CiAJcmV0dXJuIGJ1ZjsKQEAgLTUzMSw3ICs1MzUsNyBAQAogCXJldHVybiByYzsKIH0KIAotX19leGl0IHZvaWQgaHlwZnNfZGlhZ19leGl0KHZvaWQpCit2b2lkIGh5cGZzX2RpYWdfZXhpdCh2b2lkKQogewogCWRpYWcyMjRfZGVsZXRlX25hbWVfdGFibGUoKTsKIAlkaWFnMjA0X2ZyZWVfYnVmZmVyKCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5oIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuaAppbmRleCA3OTNkZWE2Li4yNTZiMzg0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5oCisrKyBiL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogIGZzL2h5cGZzL2h5cGZzX2RpYWcuaAorICogIGFyY2gvczM5MC9oeXBmc19kaWFnLmgKICAqICAgIEh5cGVydmlzb3IgZmlsZXN5c3RlbSBmb3IgTGludXggb24gczM5MC4KICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCmluZGV4IDE4YzA5MTkuLmJkYWRlNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBmcy9oeXBmcy9pbm9kZS5jCisgKiAgYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMKICAqICAgIEh5cGVydmlzb3IgZmlsZXN5c3RlbSBmb3IgTGludXggb24gczM5MC4KICAqCiAgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CkBAIC0zMTIsMTAgKzMxMiwxMiBAQAogewogCXN0cnVjdCBoeXBmc19zYl9pbmZvICpzYl9pbmZvID0gc2ItPnNfZnNfaW5mbzsKIAotCWh5cGZzX2RlbGV0ZV90cmVlKHNiLT5zX3Jvb3QpOwotCWh5cGZzX3JlbW92ZShzYl9pbmZvLT51cGRhdGVfZmlsZSk7Ci0Ja2ZyZWUoc2ItPnNfZnNfaW5mbyk7Ci0Jc2ItPnNfZnNfaW5mbyA9IE5VTEw7CisJaWYgKHNiLT5zX3Jvb3QpIHsKKwkJaHlwZnNfZGVsZXRlX3RyZWUoc2ItPnNfcm9vdCk7CisJCWh5cGZzX3JlbW92ZShzYl9pbmZvLT51cGRhdGVfZmlsZSk7CisJCWtmcmVlKHNiLT5zX2ZzX2luZm8pOworCQlzYi0+c19mc19pbmZvID0gTlVMTDsKKwl9CiAJa2lsbF9saXR0ZXJfc3VwZXIoc2IpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zMzkwL2tlcm5lbC9NYWtlZmlsZQppbmRleCA4NjYwMWE5Li5hYTk3ODk3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAKIG9iai15CTo9ICBiaXRtYXAubyB0cmFwcy5vIHRpbWUubyBwcm9jZXNzLm8gXAogICAgICAgICAgICAgc2V0dXAubyBzeXNfczM5MC5vIHB0cmFjZS5vIHNpZ25hbC5vIGNwY21kLm8gZWJjZGljLm8gXAotICAgICAgICAgICAgc2VtYXBob3JlLm8gczM5MF9leHQubyBkZWJ1Zy5vIHByb2ZpbGUubyBpcnEubyByZWlwbF9kaWFnLm8KKwkgICAgc2VtYXBob3JlLm8gczM5MF9leHQubyBkZWJ1Zy5vIHByb2ZpbGUubyBpcnEubyBpcGwubwogCiBvYmoteQkrPSAkKGlmICQoQ09ORklHXzY0QklUKSxlbnRyeTY0Lm8sZW50cnkubykKIG9iai15CSs9ICQoaWYgJChDT05GSUdfNjRCSVQpLHJlaXBsNjQubyxyZWlwbC5vKQpAQCAtMTYsMTIgKzE2LDE1IEBACiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHMzOTBfa3N5bXMubyBtb2R1bGUubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCiAKK29iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0Lm8KK2NvbXBhdC1vYmotJChDT05GSUdfQVVESVQpCSs9IGNvbXBhdF9hdWRpdC5vCiBvYmotJChDT05GSUdfQ09NUEFUKQkJKz0gY29tcGF0X2xpbnV4Lm8gY29tcGF0X3NpZ25hbC5vIFwKIAkJCQkJY29tcGF0X3dyYXBwZXIubyBjb21wYXRfZXhlY19kb21haW4ubyBcCi0JCQkJCWJpbmZtdF9lbGYzMi5vCisJCQkJCWJpbmZtdF9lbGYzMi5vICQoY29tcGF0LW9iai15KQogCiBvYmotJChDT05GSUdfVklSVF9USU1FUikJKz0gdnRpbWUubwogb2JqLSQoQ09ORklHX1NUQUNLVFJBQ0UpCSs9IHN0YWNrdHJhY2Uubworb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIAogIyBLZXhlYyBwYXJ0CiBTMzkwX0tFWEVDX09CSlMgOj0gbWFjaGluZV9rZXhlYy5vIGNyYXNoLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvczM5MC9rZXJuZWwvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzQxZDkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9hdWRpdC5jCkBAIC0wLDAgKzEsNjYgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworc3RhdGljIHVuc2lnbmVkIGRpcl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oPgorfjBVCit9OworCitzdGF0aWMgdW5zaWduZWQgcmVhZF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIHdyaXRlX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXR0cl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Cit+MFUKK307CisKK2ludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCit7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCWV4dGVybiBpbnQgczM5MF9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkKTsKKwlpZiAoYWJpID09IEFVRElUX0FSQ0hfUzM5MCkKKwkJcmV0dXJuIHMzOTBfY2xhc3NpZnlfc3lzY2FsbChzeXNjYWxsKTsKKyNlbmRpZgorCXN3aXRjaChzeXNjYWxsKSB7CisJY2FzZSBfX05SX29wZW46CisJCXJldHVybiAyOworCWNhc2UgX19OUl9vcGVuYXQ6CisJCXJldHVybiAzOworCWNhc2UgX19OUl9zb2NrZXRjYWxsOgorCQlyZXR1cm4gNDsKKwljYXNlIF9fTlJfZXhlY3ZlOgorCQlyZXR1cm4gNTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGF1ZGl0X2NsYXNzZXNfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19DT01QQVQKKwlleHRlcm4gX191MzIgczM5MF9kaXJfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgczM5MF93cml0ZV9jbGFzc1tdOworCWV4dGVybiBfX3UzMiBzMzkwX3JlYWRfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgczM5MF9jaGF0dHJfY2xhc3NbXTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURV8zMiwgczM5MF93cml0ZV9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRF8zMiwgczM5MF9yZWFkX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEVfMzIsIHMzOTBfZGlyX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFJfMzIsIHMzOTBfY2hhdHRyX2NsYXNzKTsKKyNlbmRpZgorCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFLCB3cml0ZV9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRCwgcmVhZF9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFLCBkaXJfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUiwgY2hhdHRyX2NsYXNzKTsKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChhdWRpdF9jbGFzc2VzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfYXVkaXQuYyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2F1ZGl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkOTQzNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2F1ZGl0LmMKQEAgLTAsMCArMSwzOCBAQAorI3VuZGVmIF9fczM5MHhfXworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKwordW5zaWduZWQgczM5MF9kaXJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaD4KK34wVQorfTsKKwordW5zaWduZWQgczM5MF9jaGF0dHJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgorfjBVCit9OworCit1bnNpZ25lZCBzMzkwX3dyaXRlX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaD4KK34wVQorfTsKKwordW5zaWduZWQgczM5MF9yZWFkX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfcmVhZC5oPgorfjBVCit9OworCitpbnQgczM5MF9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkIHN5c2NhbGwpCit7CisJc3dpdGNoKHN5c2NhbGwpIHsKKwljYXNlIF9fTlJfb3BlbjoKKwkJcmV0dXJuIDI7CisJY2FzZSBfX05SX29wZW5hdDoKKwkJcmV0dXJuIDM7CisJY2FzZSBfX05SX3NvY2tldGNhbGw6CisJCXJldHVybiA0OworCWNhc2UgX19OUl9leGVjdmU6CisJCXJldHVybiA1OworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUwppbmRleCA1YjU3OTlhLi4wYzcxMmI3IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCkBAIC01MDUsNiArNTA1LDggQEAKIAltdmMJX19USFJFQURfcGVyK19fUEVSX2FkZHJlc3MoNCwlcjEpLF9fTENfUEVSX0FERFJFU1MKIAltdmMJX19USFJFQURfcGVyK19fUEVSX2FjY2Vzc19pZCgxLCVyMSksX19MQ19QRVJfQUNDRVNTX0lECiAJb2kJX19USV9mbGFncyszKCVyOSksX1RJRl9TSU5HTEVfU1RFUCAjIHNldCBUSUZfU0lOR0xFX1NURVAKKwl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMga2VybmVsIHBlciBldmVudCA/CisJYnoJQkFTRUQoa2VybmVsX3BlcikKIAlsCSVyMyxfX0xDX1BHTV9JTEMJICMgbG9hZCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2RlCiAJbGEJJXI4LDB4N2YKIAlucgklcjgsJXIzICAgICAgICAgICAgICAgICAgIyBjbGVhciBwZXItZXZlbnQtYml0IGFuZCBpbGMKQEAgLTUzNiw2ICs1MzgsMTYgQEAKIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJYglCQVNFRChzeXNjX2RvX3N2YykKIAorIworIyBwZXIgd2FzIGNhbGxlZCBmcm9tIGtlcm5lbCwgbXVzdCBiZSBrcHJvYmVzCisjCitrZXJuZWxfcGVyOgorCW12aQlTUF9UUkFQKzEoJXIxNSksMHgyOAkjIHNldCB0cmFwIGluZGljYXRpb24gdG8gcGdtIGNoZWNrCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCisJbAklcjEsQkFTRUQoLkxoYW5kbGVfcGVyKQkjIGxvYWQgYWRyLiBvZiBwZXIgaGFuZGxlcgorCWxhCSVyMTQsQkFTRUQoc3lzY19sZWF2ZSkJIyBsb2FkIGFkci4gb2Ygc3lzdGVtIHJldHVybgorCWJyCSVyMQkJCSMgYnJhbmNoIHRvIGRvX3NpbmdsZV9zdGVwCisKIC8qCiAgKiBJTyBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKaW5kZXggNTZmNWY2MS4uMjliYmZiYSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeTY0LlMKQEAgLTUxOCw2ICs1MTgsOCBAQAogI2VuZGlmCiAJbGcJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJbGcJJXIxLF9fVElfdGFzayglcjkpCisJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGtlcm5lbCBwZXIgZXZlbnQgPworCWp6CWtlcm5lbF9wZXIKIAltdmMJX19USFJFQURfcGVyK19fUEVSX2F0bWlkKDIsJXIxKSxfX0xDX1BFUl9BVE1JRAogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyMSksX19MQ19QRVJfQUREUkVTUwogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKQEAgLTU1Myw2ICs1NTUsMTYgQEAKIAlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCiAJaglzeXNjX2RvX3N2YwogCisjCisjIHBlciB3YXMgY2FsbGVkIGZyb20ga2VybmVsLCBtdXN0IGJlIGtwcm9iZXMKKyMKK2tlcm5lbF9wZXI6CisJbGhpCSVyMCxfX0xDX1BHTV9PTERfUFNXCisJc3RoCSVyMCxTUF9UUkFQKCVyMTUpCSMgc2V0IHRyYXAgaW5kaWNhdGlvbiB0byBwZ20gY2hlY2sKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKKwlsYXJsCSVyMTQsc3lzY19sZWF2ZQkJIyBsb2FkIGFkci4gb2Ygc3lzdGVtIHJldCwgbm8gd29yaworCWpnCWRvX3NpbmdsZV9zdGVwCQkjIGJyYW5jaCB0byBkb19zaW5nbGVfc3RlcAorCiAvKgogICogSU8gaW50ZXJydXB0IGhhbmRsZXIgcm91dGluZQogICovCkBAIC04MTUsNyArODI3LDcgQEAKICAqLwogc3RhY2tfb3ZlcmZsb3c6CiAJbGcJJXIxNSxfX0xDX1BBTklDX1NUQUNLCSMgY2hhbmdlIHRvIHBhbmljIHN0YWNrCi0JYWdoaQklcjEsLVNQX1NJWkUKKwlhZ2hpCSVyMTUsLVNQX1NJWkUKIAltdmMJU1BfUFNXKDE2LCVyMTUpLDAoJXIxMikJIyBtb3ZlIHVzZXIgUFNXIHRvIHN0YWNrCiAJc3RtZwklcjAsJXIxMSxTUF9SMCglcjE1KQkjIHN0b3JlIGdwcnMgJXIwLSVyMTEgdG8ga2VybmVsIHN0YWNrCiAJbGEJJXIxLF9fTENfU0FWRV9BUkVBCkBAIC04MjMsNyArODM1LDcgQEAKIAlqZQkwZgogCWNoaQklcjEyLF9fTENfUEdNX09MRF9QU1cKIAlqZQkwZgotCWxhCSVyMSxfX0xDX1NBVkVfQVJFQSsxNgorCWxhCSVyMSxfX0xDX1NBVkVfQVJFQSszMgogMDoJbXZjCVNQX1IxMigzMiwlcjE1KSwwKCVyMSkgICMgbW92ZSAlcjEyLSVyMTUgdG8gc3RhY2sKICAgICAgICAgeGMgICAgICBfX1NGX0JBQ0tDSEFJTig4LCVyMTUpLF9fU0ZfQkFDS0NIQUlOKCVyMTUpICMgY2xlYXIgYmFjayBjaGFpbgogICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggYWRhZDg4Ni4uMGYxZGIyNiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTI3Miw3ICsyNzIsNyBAQAogIyBsb2FkIHBhcmFtZXRlciBmaWxlIGZyb20gaXBsIGRldmljZQogIwogLkxhZ2FpbjE6Ci0gCWwgICAgICVyMixJTklUUkRfU1RBUlQrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMikgIyByYW1kaXNrIGxvYy4gaXMgdGVtcAorCWwgICAgICVyMiwuTGluaXRyZAkJICAgICAgICMgcmFtZGlzayBsb2MuIGlzIHRlbXAKICAgICAgICAgYmFzICAgJXIxNCwuTGxvYWRlciAgICAgICAgICAgICAgICAgICAgIyBsb2FkIHBhcmFtZXRlciBmaWxlCiAgICAgICAgIGx0ciAgICVyMiwlcjIgICAgICAgICAgICAgICAgICAgICAgICAgICMgZ290IGFueXRoaW5nID8KICAgICAgICAgYnogICAgLkxub3BmCkBAIC0yODAsNyArMjgwLDcgQEAKIAlibmggICAuTG5vdHJ1bmMKIAlsYSAgICAlcjIsODk1CiAuTG5vdHJ1bmM6Ci0JbCAgICAgJXI0LElOSVRSRF9TVEFSVCtBUkNIX09GRlNFVC1QQVJNQVJFQSglcjEyKQorCWwgICAgICVyNCwuTGluaXRyZAogCWNsYyAgIDAoMywlcjQpLC5MX2hkcgkJICAgICAgICMgaWYgaXQgaXMgSERSeAogCWJ6ICAgIC5MYWdhaW4xCQkJICAgICAgICMgc2tpcCBkYXRhc2V0IGhlYWRlcgogCWNsYyAgIDAoMywlcjQpLC5MX2VvZgkJICAgICAgICMgaWYgaXQgaXMgRU9GeApAQCAtMzIzLDE0ICszMjMsMTUgQEAKICMgbG9hZCByYW1kaXNrIGZyb20gaXBsIGRldmljZQogIwkKIC5MYWdhaW4yOgotIAlsICAgICAlcjIsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTIpICMgYWRkciBvZiByYW1kaXNrCisJbCAgICAgJXIyLC5MaW5pdHJkCQkgICAgICAgIyBhZGRyIG9mIHJhbWRpc2sKKwlzdCAgICAlcjIsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTIpCiAgICAgICAgIGJhcyAgICVyMTQsLkxsb2FkZXIgICAgICAgICAgICAgICAgICAgICMgbG9hZCByYW1kaXNrCiAgCXN0ICAgICVyMixJTklUUkRfU0laRStBUkNIX09GRlNFVC1QQVJNQVJFQSglcjEyKSAjIHN0b3JlIHNpemUgb2YgcmFtZGlzawogICAgICAgICBsdHIgICAlcjIsJXIyCiAgICAgICAgIGJueiAgIC5McmRjb250CiAgICAgICAgIHN0ICAgICVyMixJTklUUkRfU1RBUlQrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMikgIyBubyByYW1kaXNrIGZvdW5kCiAuTHJkY29udDoKLQlsICAgICAlcjIsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTIpCisJbCAgICAgJXIyLC5MaW5pdHJkCiAKIAljbGMgICAwKDMsJXIyKSwuTF9oZHIJCSAgICAgICAjIHNraXAgSERSeCBhbmQgRU9GeCAKIAlieiAgICAuTGFnYWluMgpAQCAtMzc5LDYgKzM4MCw3IEBACiAgICAgICAgIGwgICAgICVyMSwuTHN0YXJ0dXAKICAgICAgICAgYnIgICAgJXIxCiAKKy5MaW5pdHJkOi5sb25nIF9lbmQgKyAweDQwMDAwMAkJICAgICAgICMgZGVmYXVsdCBhZGRyZXNzIG9mIGluaXRyZAogLkxwYXJtOgkubG9uZyAgUEFSTUFSRUEKIC5Mc3RhcnR1cDogLmxvbmcgc3RhcnR1cAogLkxjdnRhYjoubG9uZyAgX2ViY2FzYyAgICAgICAgICAgICAgICAgICAgICAgICAjIGViY2RpYyB0byBhc2NpaSB0YWJsZQpAQCAtNDc5LDY1ICs0ODEsNiBAQAogCS5ieXRlIDB4ZjAsMHhmMSwweGYyLDB4ZjMsMHhmNCwweGY1LDB4ZjYsMHhmNyAKIAkuYnl0ZSAweGY4LDB4ZjksMHhmYSwweGZiLDB4ZmMsMHhmZCwweGZlLDB4ZmYKIAotLm1hY3JvIEdFVF9JUExfREVWSUNFCi0uTGdldF9pcGxfZGV2aWNlOgotCWwgICAgICVyMSwweGI4CQkJIyBnZXQgc2lkCi0Jc2xsICAgJXIxLDE1CQkJIyB0ZXN0IGlmIHN1YmNoYW5uZWwgaXMgZW5hYmxlZAotCXNybCAgICVyMSwzMQotCWx0ciAgICVyMSwlcjEKLQlieiAgICAyZi0uTFBHMSglcjEzKQkJIyBzdWJjaGFubmVsIGRpc2FibGVkCi0JbCAgICAgJXIxLDB4YjgKLQlsYSAgICAlcjUsLkxpcGxfc2NoaWItLkxQRzEoJXIxMykKLQlzdHNjaCAwKCVyNSkJCSAgICAgICAgIyBnZXQgc2NoaWIgb2Ygc3ViY2hhbm5lbAotCWJueiAgIDJmLS5MUEcxKCVyMTMpCQkjIHNjaGliIG5vdCBhdmFpbGFibGUKLQl0bSAgICA1KCVyNSksMHgwMQkJIyBkZXZubyB2YWxpZD8KLQlibm8gICAyZi0uTFBHMSglcjEzKQotCWxhICAgICVyNixpcGxfcGFyYW1ldGVyX2ZsYWdzLS5MUEcxKCVyMTMpCi0Jb2kgICAgMyglcjYpLDB4MDEJCSMgc2V0IGZsYWcKLQlsYSAgICAlcjIsaXBsX2Rldm5vLS5MUEcxKCVyMTMpCi0JbXZjICAgMCgyLCVyMiksNiglcjUpCQkjIHN0b3JlIGRldm5vCi0JdG0gICAgNCglcjUpLDB4ODAJCSMgcWRpbyBjYXBhYmxlIGRldmljZT8KLQlibm8gICAyZi0uTFBHMSglcjEzKQotCW9pICAgIDMoJXI2KSwweDAyCQkjIHNldCBmbGFnCi0KLQkjIGNvcHkgaXBsIHBhcmFtZXRlcnMKLQotCWxoaSAgICVyMCw0MDk2Ci0JbCAgICAgJXIyLDIwKCVyMCkJCSMgZ2V0IGFkZHJlc3Mgb2YgcGFyYW1ldGVyIGxpc3QKLQlsaGkgICAlcjMsSVBMX1BBUk1CTE9DS19PUklHSU4KLQlzdCAgICAlcjMsMjAoJXIwKQotCWxoaSAgICVyNCwxCi0JY3IgICAgJXIyLCVyMwkJCSMgc3RhcnQgcGFyYW1ldGVycyA8IGRlc3RpbmF0aW9uID8KLQlqbCAgICAwZgotCWxoaSAgICVyMSwxCQkJIyBjb3B5IGRpcmVjdGlvbiBpcyB1cHdhcmRzCi0JaiAgICAgMWYKLTA6CWxoaSAgICVyMSwtMQkJCSMgY29weSBkaXJlY3Rpb24gaXMgZG93bndhcmRzCi0JYXIgICAgJXIyLCVyMAotCWFyICAgICVyMywlcjAKLQlhciAgICAlcjIsJXIxCi0JYXIgICAgJXIzLCVyMQotMToJbXZjICAgMCgxLCVyMyksMCglcjIpCQkjIGZpbmFsbHkgY29weSBpcGwgcGFyYW1ldGVycwotCWFyICAgICVyMywlcjEKLQlhciAgICAlcjIsJXIxCi0Jc3IgICAgJXIwLCVyNAotCWpuZSAgIDFiCi0JYiAgICAgMmYtLkxQRzEoJXIxMykKLQotCS5hbGlnbiA0Ci0uTGlwbF9zY2hpYjoKLQkucmVwdCAxMwotCS5sb25nIDAKLQkuZW5kcgotCi0JLmdsb2JsIGlwbF9wYXJhbWV0ZXJfZmxhZ3MKLWlwbF9wYXJhbWV0ZXJfZmxhZ3M6Ci0JLmxvbmcgMAotCS5nbG9ibCBpcGxfZGV2bm8KLWlwbF9kZXZubzoKLQkud29yZCAwCi0yOgotLmVuZG0KLQogI2lmZGVmIENPTkZJR182NEJJVAogI2luY2x1ZGUgImhlYWQ2NC5TIgogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCmluZGV4IGE0ZGM2MWYzLi4xZmE5ZmExYyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQzMS5TCkBAIC0yNiw4ICsyNiw4IEBACiAjCiAJLm9yZwlQQVJNQVJFQQogCS5sb25nCTAsMAkJCSMgSVBMX0RFVklDRQotCS5sb25nCTAsUkFNRElTS19PUklHSU4JIyBJTklUUkRfU1RBUlQKLQkubG9uZwkwLFJBTURJU0tfU0laRQkJIyBJTklUUkRfU0laRQorCS5sb25nCTAsMAkJCSMgSU5JVFJEX1NUQVJUCisJLmxvbmcJMCwwCQkJIyBJTklUUkRfU0laRQogCiAJLm9yZwlDT01NQU5EX0xJTkUKIAkuYnl0ZQkicm9vdD0vZGV2L3JhbTAgcm8iCkBAIC0zNywxMiArMzcsMjMgQEAKIAogc3RhcnR1cF9jb250aW51ZToKIAliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKLS5MUEcxOglHRVRfSVBMX0RFVklDRQorLkxQRzE6CW12aQlfX0xDX0FSX01PREVfSUQsMAkjIHNldCBFU0EgZmxhZyAobW9kZSAwKQogCWxjdGwJJWMwLCVjMTUsLkxjdGwtLkxQRzEoJXIxMykgIyBsb2FkIGNvbnRyb2wgcmVnaXN0ZXJzCiAJbAklcjEyLC5McGFybWFkZHItLkxQRzEoJXIxMykgIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCiAJCQkJCSMgbW92ZSBJUEwgZGV2aWNlIHRvIGxvd2NvcmUKIAltdmMJX19MQ19JUExERVYoNCksSVBMX0RFVklDRS1QQVJNQVJFQSglcjEyKQorIworIyBTZXR1cCBzdGFjaworIworCWwJJXIxNSwuTGluaXR0dS0uTFBHMSglcjEzKQorCW12YwlfX0xDX0NVUlJFTlQoNCksX19USV90YXNrKCVyMTUpCisJYWhpCSVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbitUSFJFQURfU0laRQorCXN0CSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBzZXQgZW5kIG9mIGtlcm5lbCBzdGFjaworCWFoaQklcjE1LC05NgorCXhjCV9fU0ZfQkFDS0NIQUlOKDQsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkgIyBjbGVhciBiYWNrY2hhaW4KIAorCWwJJXIxNCwuTGlwbF9zYXZlX3BhcmFtZXRlcnMtLkxQRzEoJXIxMykKKwliYXNyCSVyMTQsJXIxNAogIwogIyBjbGVhciBic3MgbWVtb3J5CiAjCkBAIC0xMTQsNiArMTI1LDEwIEBACiAJYgkuTGZjaHVuay0uTFBHMSglcjEzKQogCiAJLmFsaWduIDQKKy5MaXBsX3NhdmVfcGFyYW1ldGVyczoKKwkubG9uZwlpcGxfc2F2ZV9wYXJhbWV0ZXJzCisuTGluaXR0dToKKwkubG9uZwlpbml0X3RocmVhZF91bmlvbgogLkxwbWFzazoKIAkuYnl0ZQkwCiAuYWxpZ24gOApAQCAtMjczLDcgKzI4OCwyMyBAQAogLkxic3NfZW5kOiAgLmxvbmcgX2VuZAogLkxwYXJtYWRkcjogLmxvbmcgUEFSTUFSRUEKIC5Mc2NjYmFkZHI6IC5sb25nIC5Mc2NjYgorCisJLmdsb2JsIGlwbF9zY2hpYgoraXBsX3NjaGliOgorCS5yZXB0IDEzCisJLmxvbmcgMAorCS5lbmRyCisKKwkuZ2xvYmwgaXBsX2ZsYWdzCitpcGxfZmxhZ3M6CisJLmxvbmcgMAorCS5nbG9ibCBpcGxfZGV2bm8KK2lwbF9kZXZubzoKKwkud29yZCAwCisKIAkub3JnCTB4MTIwMDAKKy5nbG9ibCBzMzkwX3JlYWRpbmZvX3NjY2IKK3MzOTBfcmVhZGluZm9fc2NjYjoKIC5Mc2NjYjoKIAkuaHdvcmQJMHgxMDAwCQkJIyBsZW5ndGgsIG9uZSBwYWdlCiAJLmJ5dGUJMHgwMCwweDAwLDB4MDAKQEAgLTMwMiwxNiArMzMzLDYgQEAKIAkuZ2xvYmwJX3N0ZXh0CiBfc3RleHQ6CWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQogLkxQRzM6Ci0jCi0jIFNldHVwIHN0YWNrCi0jCi0JbAklcjE1LC5MaW5pdHR1LS5MUEczKCVyMTMpCi0JbXZjCV9fTENfQ1VSUkVOVCg0KSxfX1RJX3Rhc2soJXIxNSkKLQlhaGkJJXIxNSwxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpICMgaW5pdF90YXNrX3VuaW9uK1RIUkVBRF9TSVpFCi0Jc3QJJXIxNSxfX0xDX0tFUk5FTF9TVEFDSwkjIHNldCBlbmQgb2Yga2VybmVsIHN0YWNrCi0JYWhpCSVyMTUsLTk2Ci0JeGMJX19TRl9CQUNLQ0hBSU4oNCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KSAjIGNsZWFyIGJhY2tjaGFpbgotCiAjIGNoZWNrIGNvbnRyb2wgcmVnaXN0ZXJzCiAJc3RjdGwJJWMwLCVjMTUsMCglcjE1KQogCW9pCTIoJXIxNSksMHg0MAkJIyBlbmFibGUgc2lncCBlbWVyZ2VuY3kgc2lnbmFsCkBAIC0zMzAsNiArMzUxLDUgQEAKICMKIAkuYWxpZ24JOAogLkxkdzoJLmxvbmcJMHgwMDBhMDAwMCwweDAwMDAwMDAwCi0uTGluaXR0dToubG9uZwlpbml0X3RocmVhZF91bmlvbgogLkxzdGFydDoubG9uZwlzdGFydF9rZXJuZWwKIC5MYXJlZ3M6LmxvbmcJMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKaW5kZXggOWQ4MGM1Yi4uYThiZGQ5NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCkBAIC0yNiw4ICsyNiw4IEBACiAjCiAJLm9yZyAgIFBBUk1BUkVBCiAJLnF1YWQgIDAJCQkjIElQTF9ERVZJQ0UKLQkucXVhZCAgUkFNRElTS19PUklHSU4JCSMgSU5JVFJEX1NUQVJUCi0JLnF1YWQgIFJBTURJU0tfU0laRQkJIyBJTklUUkRfU0laRQorCS5xdWFkICAwCQkJIyBJTklUUkRfU1RBUlQKKwkucXVhZCAgMAkJCSMgSU5JVFJEX1NJWkUKIAogCS5vcmcgICBDT01NQU5EX0xJTkUKIAkuYnl0ZSAgInJvb3Q9L2Rldi9yYW0wIHJvIgpAQCAtMzksOCArMzksOCBAQAogCWJhc3IgICVyMTMsMAkJCSAjIGdldCBiYXNlCiAuTFBHMTogIHNsbCAgICVyMTMsMSAgICAgICAgICAgICAgICAgICAgICMgcmVtb3ZlIGhpZ2ggb3JkZXIgYml0CiAgICAgICAgIHNybCAgICVyMTMsMQotCUdFVF9JUExfREVWSUNFCiAgICAgICAgIGxoaSAgICVyMSwxICAgICAgICAgICAgICAgICAgICAgICMgbW9kZSAxID0gZXNhbWUKKwltdmkgICBfX0xDX0FSX01PREVfSUQsMQkJICMgc2V0IGVzYW1lIGZsYWcKICAgICAgICAgc2xyICAgJXIwLCVyMCAgICAgICAgICAgICAgICAgICAgIyBzZXQgY3B1aWQgdG8gemVybwogICAgICAgICBzaWdwICAlcjEsJXIwLDB4MTIgICAgICAgICAgICAgICAjIHN3aXRjaCB0byBlc2FtZSBtb2RlCiAJc2FtNjQJCQkJICMgc3dpdGNoIHRvIDY0IGJpdCBtb2RlCkBAIC00OCw3ICs0OCwxOCBAQAogCWxnICAgICVyMTIsLkxwYXJtYWRkci0uTFBHMSglcjEzKSMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQogCQkJCQkgIyBtb3ZlIElQTCBkZXZpY2UgdG8gbG93Y29yZQogICAgICAgICBtdmMgICBfX0xDX0lQTERFVig0KSxJUExfREVWSUNFKzQtUEFSTUFSRUEoJXIxMikKKyMKKyMgU2V0dXAgc3RhY2sKKyMKKwlsYXJsICAlcjE1LGluaXRfdGhyZWFkX3VuaW9uCisJbGcgICAgJXIxNCxfX1RJX3Rhc2soJXIxNSkJIyBjYWNoZSBjdXJyZW50IGluIGxvd2NvcmUKKwlzdGcgICAlcjE0LF9fTENfQ1VSUkVOVAorCWFnaGkgICVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbiArIFRIUkVBRF9TSVpFCisJc3RnICAgJXIxNSxfX0xDX0tFUk5FTF9TVEFDSwkjIHNldCBlbmQgb2Yga2VybmVsIHN0YWNrCisJYWdoaSAgJXIxNSwtMTYwCisJeGMgICAgX19TRl9CQUNLQ0hBSU4oNCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KSAjIGNsZWFyIGJhY2tjaGFpbgogCisJYnJhc2wgJXIxNCxpcGxfc2F2ZV9wYXJhbWV0ZXJzCiAjCiAjIGNsZWFyIGJzcyBtZW1vcnkKICMKQEAgLTIzOSw2ICsyNTAsMTkgQEAKIAlvaQk3KCVyMTIpLDB4ODAJCSMgc2V0IElEVEUgZmxhZwogMDoKIAorIworIyBmaW5kIG91dCBpZiB3ZSBoYXZlIHRoZSBNVkNPUyBpbnN0cnVjdGlvbgorIworCWxhCSVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKKwlzdGcJJXIxLF9fTENfUEdNX05FV19QU1crOAorCS5zaG9ydAkweGM4MDAJCQkjIG12Y29zIDAoJXIwKSwwKCVyMCksJXIwCisJLnNob3J0CTB4MDAwMAorCS5zaG9ydAkweDAwMDAKKzA6CXRtCTB4OGYsMHgxMwkJIyBzcGVjaWFsLW9wZXJhdGlvbiBleGNlcHRpb24/CisJYm5vCTFmLS5MUEcxKCVyMTMpCQkjIGlmIHllcywgTVZDT1MgaXMgcHJlc2VudAorCW9pCTYoJXIxMiksMgkJIyBzZXQgTVZDT1MgZmxhZworMToKKwogICAgICAgICBscHN3ZSAuTGVudHJ5LS5MUEcxKDEzKSAgICAgICAgICMganVtcCB0byBfc3RleHQgaW4gcHJpbWFyeS1zcGFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHZpcnR1YWwgYW5kIG5ldmVyIHJldHVybiAuLi4KICAgICAgICAgLmFsaWduIDE2CkBAIC0yNjgsNyArMjkyLDIyIEBACiAuTHBhcm1hZGRyOgogCS5xdWFkCVBBUk1BUkVBCiAKKwkuZ2xvYmwgaXBsX3NjaGliCitpcGxfc2NoaWI6CisJLnJlcHQgMTMKKwkubG9uZyAwCisJLmVuZHIKKworCS5nbG9ibCBpcGxfZmxhZ3MKK2lwbF9mbGFnczoKKwkubG9uZyAwCisJLmdsb2JsIGlwbF9kZXZubworaXBsX2Rldm5vOgorCS53b3JkIDAKKwogCS5vcmcJMHgxMjAwMAorLmdsb2JsIHMzOTBfcmVhZGluZm9fc2NjYgorczM5MF9yZWFkaW5mb19zY2NiOgogLkxzY2NiOgogCS5od29yZCAweDEwMDAJCQkjIGxlbmd0aCwgb25lIHBhZ2UKIAkuYnl0ZSAweDAwLDB4MDAsMHgwMApAQCAtMjk3LDI0ICszMzYsMTIgQEAKICAgICAgICAgLmdsb2JsIF9zdGV4dAogX3N0ZXh0OgliYXNyICAlcjEzLDAgICAgICAgICAgICAgICAgICAgICMgZ2V0IGJhc2UKIC5MUEczOgotIwotIyBTZXR1cCBzdGFjawotIwotCWxhcmwgICVyMTUsaW5pdF90aHJlYWRfdW5pb24KLQlsZyAgICAlcjE0LF9fVElfdGFzayglcjE1KSAgICAgICMgY2FjaGUgY3VycmVudCBpbiBsb3djb3JlCi0Jc3RnICAgJXIxNCxfX0xDX0NVUlJFTlQKLSAgICAgICAgYWdoaSAgJXIxNSwxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpICMgaW5pdF90YXNrX3VuaW9uICsgVEhSRUFEX1NJWkUKLSAgICAgICAgc3RnICAgJXIxNSxfX0xDX0tFUk5FTF9TVEFDSyAgICAjIHNldCBlbmQgb2Yga2VybmVsIHN0YWNrCi0gICAgICAgIGFnaGkgICVyMTUsLTE2MAotICAgICAgICB4YyAgICBfX1NGX0JBQ0tDSEFJTig0LCVyMTUpLF9fU0ZfQkFDS0NIQUlOKCVyMTUpICMgY2xlYXIgYmFja2NoYWluCi0KICMgY2hlY2sgY29udHJvbCByZWdpc3RlcnMKICAgICAgICAgc3RjdGcgICVjMCwlYzE1LDAoJXIxNSkKIAlvaSAgICAgNiglcjE1KSwweDQwICAgICAgICAgICAgICMgZW5hYmxlIHNpZ3AgZW1lcmdlbmN5IHNpZ25hbAogCW9pICAgICA0KCVyMTUpLDB4MTAgICAgICAgICAgICAgIyBzd2l0Y2ggb24gbG93IGFkZHJlc3MgcHJvY3RlY3Rpb24KICAgICAgICAgbGN0bGcgICVjMCwlYzE1LDAoJXIxNSkKIAotIwogICAgICAgICBsYW0gICAgMCwxNSwuTGFyZWdzLS5MUEczKCVyMTMpICMgbG9hZCBhY2Nlc3MgcmVncyBuZWVkZWQgYnkgdWFjY2VzcwogICAgICAgICBicmFzbCAgJXIxNCxzdGFydF9rZXJuZWwgICAgICAgICMgZ28gdG8gQyBjb2RlCiAjCkBAIC0zMjIsNyArMzQ5LDcgQEAKICMKICAgICAgICAgYmFzciAgJXIxMywwCiAJbHBzd2UgLkxkdy0uKCVyMTMpICAgICAgICAgICAjIGxvYWQgZGlzYWJsZWQgd2FpdCBwc3cKLSMKKwogICAgICAgICAgICAgLmFsaWduIDgKIC5MZHc6ICAgICAgIC5xdWFkICAweDAwMDIwMDAxODAwMDAwMDAsMHgwMDAwMDAwMDAwMDAwMDAwCiAuTGFyZWdzOiAgICAubG9uZyAgMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjU1NWNjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTAsMCArMSw5NDIgQEAKKy8qCisgKiAgYXJjaC9zMzkwL2tlcm5lbC9pcGwuYworICogICAgaXBsL3JlaXBsL2R1bXAgc3VwcG9ydCBmb3IgTGludXggb24gczM5MC4KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA1LDIwMDYKKyAqICAgIEF1dGhvcihzKTogTWljaGFlbCBIb2x6aGV1IDxob2x6aGV1QGRlLmlibS5jb20+CisgKgkJIEhlaWtvIENhcnN0ZW5zIDxoZWlrby5jYXJzdGVuc0BkZS5pYm0uY29tPgorICoJCSBWb2xrZXIgU2FtZXNrZSA8c2FtZXNrZUBkZS5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9jcGNtZC5oPgorI2luY2x1ZGUgPGFzbS9jaW8uaD4KKworI2RlZmluZSBJUExfUEFSTV9CTE9DS19WRVJTSU9OIDAKKworZW51bSBpcGxfdHlwZSB7CisJSVBMX1RZUEVfTk9ORQkgPSAxLAorCUlQTF9UWVBFX1VOS05PV04gPSAyLAorCUlQTF9UWVBFX0NDVwkgPSA0LAorCUlQTF9UWVBFX0ZDUAkgPSA4LAorfTsKKworI2RlZmluZSBJUExfTk9ORV9TVFIJICJub25lIgorI2RlZmluZSBJUExfVU5LTk9XTl9TVFIgICJ1bmtub3duIgorI2RlZmluZSBJUExfQ0NXX1NUUgkgImNjdyIKKyNkZWZpbmUgSVBMX0ZDUF9TVFIJICJmY3AiCisKK3N0YXRpYyBjaGFyICppcGxfdHlwZV9zdHIoZW51bSBpcGxfdHlwZSB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVBMX1RZUEVfTk9ORToKKwkJcmV0dXJuIElQTF9OT05FX1NUUjsKKwljYXNlIElQTF9UWVBFX0NDVzoKKwkJcmV0dXJuIElQTF9DQ1dfU1RSOworCWNhc2UgSVBMX1RZUEVfRkNQOgorCQlyZXR1cm4gSVBMX0ZDUF9TVFI7CisJY2FzZSBJUExfVFlQRV9VTktOT1dOOgorCWRlZmF1bHQ6CisJCXJldHVybiBJUExfVU5LTk9XTl9TVFI7CisJfQorfQorCitlbnVtIGlwbF9tZXRob2QgeworCUlQTF9NRVRIT0RfTk9ORSwKKwlJUExfTUVUSE9EX0NDV19DSU8sCisJSVBMX01FVEhPRF9DQ1dfRElBRywKKwlJUExfTUVUSE9EX0NDV19WTSwKKwlJUExfTUVUSE9EX0ZDUF9ST19ESUFHLAorCUlQTF9NRVRIT0RfRkNQX1JXX0RJQUcsCisJSVBMX01FVEhPRF9GQ1BfUk9fVk0sCit9OworCitlbnVtIHNodXRkb3duX2FjdGlvbiB7CisJU0hVVERPV05fUkVJUEwsCisJU0hVVERPV05fRFVNUCwKKwlTSFVURE9XTl9TVE9QLAorfTsKKworI2RlZmluZSBTSFVURE9XTl9SRUlQTF9TVFIgInJlaXBsIgorI2RlZmluZSBTSFVURE9XTl9EVU1QX1NUUiAgImR1bXAiCisjZGVmaW5lIFNIVVRET1dOX1NUT1BfU1RSICAic3RvcCIKKworc3RhdGljIGNoYXIgKnNodXRkb3duX2FjdGlvbl9zdHIoZW51bSBzaHV0ZG93bl9hY3Rpb24gYWN0aW9uKQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBTSFVURE9XTl9SRUlQTDoKKwkJcmV0dXJuIFNIVVRET1dOX1JFSVBMX1NUUjsKKwljYXNlIFNIVVRET1dOX0RVTVA6CisJCXJldHVybiBTSFVURE9XTl9EVU1QX1NUUjsKKwljYXNlIFNIVVRET1dOX1NUT1A6CisJCXJldHVybiBTSFVURE9XTl9TVE9QX1NUUjsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK2VudW0gZGlhZzMwOF9zdWJjb2RlICB7CisJRElBRzMwOF9JUEwgICA9IDMsCisJRElBRzMwOF9EVU1QICA9IDQsCisJRElBRzMwOF9TRVQgICA9IDUsCisJRElBRzMwOF9TVE9SRSA9IDYsCit9OworCitlbnVtIGRpYWczMDhfaXBsX3R5cGUgeworCURJQUczMDhfSVBMX1RZUEVfRkNQID0gMCwKKwlESUFHMzA4X0lQTF9UWVBFX0NDVyA9IDIsCit9OworCitlbnVtIGRpYWczMDhfb3B0IHsKKwlESUFHMzA4X0lQTF9PUFRfSVBMICA9IDB4MTAsCisJRElBRzMwOF9JUExfT1BUX0RVTVAgPSAweDIwLAorfTsKKworZW51bSBkaWFnMzA4X3JjIHsKKwlESUFHMzA4X1JDX09LID0gMSwKK307CisKK3N0YXRpYyBpbnQgZGlhZzMwOF9zZXRfd29ya3MgPSAwOworCitzdGF0aWMgaW50IHJlaXBsX2NhcGFiaWxpdGllcyA9IElQTF9UWVBFX1VOS05PV047CitzdGF0aWMgZW51bSBpcGxfdHlwZSByZWlwbF90eXBlID0gSVBMX1RZUEVfVU5LTk9XTjsKK3N0YXRpYyBlbnVtIGlwbF9tZXRob2QgcmVpcGxfbWV0aG9kID0gSVBMX01FVEhPRF9OT05FOworc3RhdGljIHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICpyZWlwbF9ibG9ja19mY3A7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKnJlaXBsX2Jsb2NrX2NjdzsKKworc3RhdGljIGludCBkdW1wX2NhcGFiaWxpdGllcyA9IElQTF9UWVBFX05PTkU7CitzdGF0aWMgZW51bSBpcGxfdHlwZSBkdW1wX3R5cGUgPSBJUExfVFlQRV9OT05FOworc3RhdGljIGVudW0gaXBsX21ldGhvZCBkdW1wX21ldGhvZCA9IElQTF9NRVRIT0RfTk9ORTsKK3N0YXRpYyBzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqZHVtcF9ibG9ja19mY3A7CitzdGF0aWMgc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmR1bXBfYmxvY2tfY2N3OworCitzdGF0aWMgZW51bSBzaHV0ZG93bl9hY3Rpb24gb25fcGFuaWNfYWN0aW9uID0gU0hVVERPV05fU1RPUDsKKworc3RhdGljIGludCBkaWFnMzA4KHVuc2lnbmVkIGxvbmcgc3ViY29kZSwgdm9pZCAqYWRkcikKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9hZGRyIGFzbSgiMCIpID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9yYyBhc20oIjEiKSA9IDA7CisKKwlhc20gdm9sYXRpbGUgKAorCQkiICAgZGlhZyAlMCwlMiwweDMwOFxuIgorCQkiMDogXG4iCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisjaWZkZWYgQ09ORklHXzY0QklUCisJCSIgICAuYWxpZ24gOFxuIgorCQkiICAgLnF1YWQgMGIsIDBiXG4iCisjZWxzZQorCQkiICAgLmFsaWduIDRcbiIKKwkJIiAgIC5sb25nIDBiLCAwYlxuIgorI2VuZGlmCisJCSIucHJldmlvdXNcbiIKKwkJOiAiK2QiIChfYWRkciksICIrZCIgKF9yYykKKwkJOiAiZCIgKHN1YmNvZGUpIDogImNjIiwgIm1lbW9yeSIgKTsKKworCXJldHVybiBfcmM7Cit9CisKKy8qIFNZU0ZTICovCisKKyNkZWZpbmUgREVGSU5FX0lQTF9BVFRSX1JPKF9wcmVmaXgsIF9uYW1lLCBfZm9ybWF0LCBfdmFsdWUpCQlcCitzdGF0aWMgc3NpemVfdCBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX3Nob3coc3RydWN0IHN1YnN5c3RlbSAqc3Vic3lzLAlcCisJCWNoYXIgKnBhZ2UpCQkJCQkJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCBfZm9ybWF0LCBfdmFsdWUpOwkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIHN5c18jI19wcmVmaXgjI18jI19uYW1lIyNfYXR0ciA9CQlcCisJX19BVFRSKF9uYW1lLCBTX0lSVUdPLCBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX3Nob3csIE5VTEwpOworCisjZGVmaW5lIERFRklORV9JUExfQVRUUl9SVyhfcHJlZml4LCBfbmFtZSwgX2ZtdF9vdXQsIF9mbXRfaW4sIF92YWx1ZSkJXAorc3RhdGljIHNzaXplX3Qgc3lzXyMjX3ByZWZpeCMjXyMjX25hbWUjI19zaG93KHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywJXAorCQljaGFyICpwYWdlKQkJCQkJCVwKK3sJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYocGFnZSwgX2ZtdF9vdXQsCQkJCQlcCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBfdmFsdWUpOwkJCVwKK30JCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX3N0b3JlKHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cyxcCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikJCQkJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWU7CQkJCQlcCisJaWYgKHNzY2FuZihidWYsIF9mbXRfaW4sICZ2YWx1ZSkgIT0gMSkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJX3ZhbHVlID0gdmFsdWU7CQkJCQkJCVwKKwlyZXR1cm4gbGVuOwkJCQkJCQlcCit9CQkJCQkJCQkJXAorc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIHN5c18jI19wcmVmaXgjI18jI19uYW1lIyNfYXR0ciA9CQlcCisJX19BVFRSKF9uYW1lLChTX0lSVUdPIHwgU19JV1VTUiksCQkJCVwKKwkJCXN5c18jI19wcmVmaXgjI18jI19uYW1lIyNfc2hvdywJCQlcCisJCQlzeXNfIyNfcHJlZml4IyNfIyNfbmFtZSMjX3N0b3JlKTsKKworc3RhdGljIHZvaWQgbWFrZV9hdHRyc19ybyhzdHJ1Y3QgYXR0cmlidXRlICoqYXR0cnMpCit7CisJd2hpbGUgKCphdHRycykgeworCQkoKmF0dHJzKS0+bW9kZSA9IFNfSVJVR087CisJCWF0dHJzKys7CisJfQorfQorCisvKgorICogaXBsIHNlY3Rpb24KKyAqLworCitzdGF0aWMgZW51bSBpcGxfdHlwZSBpcGxfZ2V0X3R5cGUodm9pZCkKK3sKKwlzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBsID0gSVBMX1BBUk1CTE9DS19TVEFSVDsKKworCWlmICghKGlwbF9mbGFncyAmIElQTF9ERVZOT19WQUxJRCkpCisJCXJldHVybiBJUExfVFlQRV9VTktOT1dOOworCWlmICghKGlwbF9mbGFncyAmIElQTF9QQVJNQkxPQ0tfVkFMSUQpKQorCQlyZXR1cm4gSVBMX1RZUEVfQ0NXOworCWlmIChpcGwtPmhkci52ZXJzaW9uID4gSVBMX01BWF9TVVBQT1JURURfVkVSU0lPTikKKwkJcmV0dXJuIElQTF9UWVBFX1VOS05PV047CisJaWYgKGlwbC0+aGRyLnBidCAhPSBESUFHMzA4X0lQTF9UWVBFX0ZDUCkKKwkJcmV0dXJuIElQTF9UWVBFX1VOS05PV047CisJcmV0dXJuIElQTF9UWVBFX0ZDUDsKK30KKworc3RhdGljIHNzaXplX3QgaXBsX3R5cGVfc2hvdyhzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMsIGNoYXIgKnBhZ2UpCit7CisJcmV0dXJuIHNwcmludGYocGFnZSwgIiVzXG4iLCBpcGxfdHlwZV9zdHIoaXBsX2dldF90eXBlKCkpKTsKK30KKworc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIHN5c19pcGxfdHlwZV9hdHRyID0gX19BVFRSX1JPKGlwbF90eXBlKTsKKworc3RhdGljIHNzaXplX3Qgc3lzX2lwbF9kZXZpY2Vfc2hvdyhzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMsIGNoYXIgKnBhZ2UpCit7CisJc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmlwbCA9IElQTF9QQVJNQkxPQ0tfU1RBUlQ7CisKKwlzd2l0Y2ggKGlwbF9nZXRfdHlwZSgpKSB7CisJY2FzZSBJUExfVFlQRV9DQ1c6CisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICIwLjAuJTA0eFxuIiwgaXBsX2Rldm5vKTsKKwljYXNlIElQTF9UWVBFX0ZDUDoKKwkJcmV0dXJuIHNwcmludGYocGFnZSwgIjAuMC4lMDR4XG4iLCBpcGwtPmlwbF9pbmZvLmZjcC5kZXZubyk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgc3lzX2lwbF9kZXZpY2VfYXR0ciA9CisJX19BVFRSKGRldmljZSwgU19JUlVHTywgc3lzX2lwbF9kZXZpY2Vfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IGlwbF9wYXJhbWV0ZXJfcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLAorCQkJCSAgc2l6ZV90IGNvdW50KQoreworCXVuc2lnbmVkIGludCBzaXplID0gSVBMX1BBUk1CTE9DS19TSVpFOworCisJaWYgKG9mZiA+IHNpemUpCisJCXJldHVybiAwOworCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCisJCWNvdW50ID0gc2l6ZSAtIG9mZjsKKwltZW1jcHkoYnVmLCAodm9pZCAqKUlQTF9QQVJNQkxPQ0tfU1RBUlQgKyBvZmYsIGNvdW50KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBpcGxfcGFyYW1ldGVyX2F0dHIgPSB7CisJLmF0dHIgPSB7CisJCS5uYW1lID0gImJpbmFyeV9wYXJhbWV0ZXIiLAorCQkubW9kZSA9IFNfSVJVR08sCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSBQQUdFX1NJWkUsCisJLnJlYWQgPSAmaXBsX3BhcmFtZXRlcl9yZWFkLAorfTsKKworc3RhdGljIHNzaXplX3QgaXBsX3NjcF9kYXRhX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwKKwlzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgaW50IHNpemUgPSBJUExfUEFSTUJMT0NLX1NUQVJULT5pcGxfaW5mby5mY3Auc2NwX2RhdGFfbGVuOworCXZvaWQgKnNjcF9kYXRhID0gJklQTF9QQVJNQkxPQ0tfU1RBUlQtPmlwbF9pbmZvLmZjcC5zY3BfZGF0YTsKKworCWlmIChvZmYgPiBzaXplKQorCQlyZXR1cm4gMDsKKwlpZiAob2ZmICsgY291bnQgPiBzaXplKQorCQljb3VudCA9IHNpemUgLSBvZmY7CisJbWVtY3B5KGJ1Ziwgc2NwX2RhdGEgKyBvZmYsIGNvdW50KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBpcGxfc2NwX2RhdGFfYXR0ciA9IHsKKwkuYXR0ciA9IHsKKwkJLm5hbWUgPSAic2NwX2RhdGEiLAorCQkubW9kZSA9IFNfSVJVR08sCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCisJLnNpemUgPSBQQUdFX1NJWkUsCisJLnJlYWQgPSAmaXBsX3NjcF9kYXRhX3JlYWQsCit9OworCisvKiBGQ1AgaXBsIGRldmljZSBhdHRyaWJ1dGVzICovCisKK0RFRklORV9JUExfQVRUUl9STyhpcGxfZmNwLCB3d3BuLCAiMHglMDE2bGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBJUExfUEFSTUJMT0NLX1NUQVJULT5pcGxfaW5mby5mY3Aud3dwbik7CitERUZJTkVfSVBMX0FUVFJfUk8oaXBsX2ZjcCwgbHVuLCAiMHglMDE2bGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkgICBJUExfUEFSTUJMT0NLX1NUQVJULT5pcGxfaW5mby5mY3AubHVuKTsKK0RFRklORV9JUExfQVRUUl9STyhpcGxfZmNwLCBib290cHJvZywgIiVsbGRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCSAgIElQTF9QQVJNQkxPQ0tfU1RBUlQtPmlwbF9pbmZvLmZjcC5ib290cHJvZyk7CitERUZJTkVfSVBMX0FUVFJfUk8oaXBsX2ZjcCwgYnJfbGJhLCAiJWxsZFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKKwkJICAgSVBMX1BBUk1CTE9DS19TVEFSVC0+aXBsX2luZm8uZmNwLmJyX2xiYSk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppcGxfZmNwX2F0dHJzW10gPSB7CisJJnN5c19pcGxfdHlwZV9hdHRyLmF0dHIsCisJJnN5c19pcGxfZGV2aWNlX2F0dHIuYXR0ciwKKwkmc3lzX2lwbF9mY3Bfd3dwbl9hdHRyLmF0dHIsCisJJnN5c19pcGxfZmNwX2x1bl9hdHRyLmF0dHIsCisJJnN5c19pcGxfZmNwX2Jvb3Rwcm9nX2F0dHIuYXR0ciwKKwkmc3lzX2lwbF9mY3BfYnJfbGJhX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXBsX2ZjcF9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGlwbF9mY3BfYXR0cnMsCit9OworCisvKiBDQ1cgaXBsIGRldmljZSBhdHRyaWJ1dGVzICovCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppcGxfY2N3X2F0dHJzW10gPSB7CisJJnN5c19pcGxfdHlwZV9hdHRyLmF0dHIsCisJJnN5c19pcGxfZGV2aWNlX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXBsX2Njd19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IGlwbF9jY3dfYXR0cnMsCit9OworCisvKiBVTktOT1dOIGlwbCBkZXZpY2UgYXR0cmlidXRlcyAqLworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXBsX3Vua25vd25fYXR0cnNbXSA9IHsKKwkmc3lzX2lwbF90eXBlX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXBsX3Vua25vd25fYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBpcGxfdW5rbm93bl9hdHRycywKK307CisKK3N0YXRpYyBkZWNsX3N1YnN5cyhpcGwsIE5VTEwsIE5VTEwpOworCisvKgorICogcmVpcGwgc2VjdGlvbgorICovCisKKy8qIEZDUCByZWlwbCBkZXZpY2UgYXR0cmlidXRlcyAqLworCitERUZJTkVfSVBMX0FUVFJfUlcocmVpcGxfZmNwLCB3d3BuLCAiMHglMDE2bGx4XG4iLCAiJTAxNmxseFxuIiwKKwkJICAgcmVpcGxfYmxvY2tfZmNwLT5pcGxfaW5mby5mY3Aud3dwbik7CitERUZJTkVfSVBMX0FUVFJfUlcocmVpcGxfZmNwLCBsdW4sICIweCUwMTZsbHhcbiIsICIlMDE2bGx4XG4iLAorCQkgICByZWlwbF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5sdW4pOworREVGSU5FX0lQTF9BVFRSX1JXKHJlaXBsX2ZjcCwgYm9vdHByb2csICIlbGxkXG4iLCAiJWxsZFxuIiwKKwkJICAgcmVpcGxfYmxvY2tfZmNwLT5pcGxfaW5mby5mY3AuYm9vdHByb2cpOworREVGSU5FX0lQTF9BVFRSX1JXKHJlaXBsX2ZjcCwgYnJfbGJhLCAiJWxsZFxuIiwgIiVsbGRcbiIsCisJCSAgIHJlaXBsX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLmJyX2xiYSk7CitERUZJTkVfSVBMX0FUVFJfUlcocmVpcGxfZmNwLCBkZXZpY2UsICIwLjAuJTA0bGx4XG4iLCAiMC4wLiVsbHhcbiIsCisJCSAgIHJlaXBsX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLmRldm5vKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJlaXBsX2ZjcF9hdHRyc1tdID0geworCSZzeXNfcmVpcGxfZmNwX2RldmljZV9hdHRyLmF0dHIsCisJJnN5c19yZWlwbF9mY3Bfd3dwbl9hdHRyLmF0dHIsCisJJnN5c19yZWlwbF9mY3BfbHVuX2F0dHIuYXR0ciwKKwkmc3lzX3JlaXBsX2ZjcF9ib290cHJvZ19hdHRyLmF0dHIsCisJJnN5c19yZWlwbF9mY3BfYnJfbGJhX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcmVpcGxfZmNwX2F0dHJfZ3JvdXAgPSB7CisJLm5hbWUgID0gSVBMX0ZDUF9TVFIsCisJLmF0dHJzID0gcmVpcGxfZmNwX2F0dHJzLAorfTsKKworLyogQ0NXIHJlaXBsIGRldmljZSBhdHRyaWJ1dGVzICovCisKK0RFRklORV9JUExfQVRUUl9SVyhyZWlwbF9jY3csIGRldmljZSwgIjAuMC4lMDRsbHhcbiIsICIwLjAuJWxseFxuIiwKKwlyZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpyZWlwbF9jY3dfYXR0cnNbXSA9IHsKKwkmc3lzX3JlaXBsX2Njd19kZXZpY2VfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCByZWlwbF9jY3dfYXR0cl9ncm91cCA9IHsKKwkubmFtZSAgPSBJUExfQ0NXX1NUUiwKKwkuYXR0cnMgPSByZWlwbF9jY3dfYXR0cnMsCit9OworCisvKiByZWlwbCB0eXBlICovCisKK3N0YXRpYyBpbnQgcmVpcGxfc2V0X3R5cGUoZW51bSBpcGxfdHlwZSB0eXBlKQoreworCWlmICghKHJlaXBsX2NhcGFiaWxpdGllcyAmIHR5cGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCh0eXBlKSB7CisJY2FzZSBJUExfVFlQRV9DQ1c6CisJCWlmIChNQUNISU5FX0lTX1ZNKQorCQkJcmVpcGxfbWV0aG9kID0gSVBMX01FVEhPRF9DQ1dfVk07CisJCWVsc2UKKwkJCXJlaXBsX21ldGhvZCA9IElQTF9NRVRIT0RfQ0NXX0NJTzsKKwkJYnJlYWs7CisJY2FzZSBJUExfVFlQRV9GQ1A6CisJCWlmIChkaWFnMzA4X3NldF93b3JrcykKKwkJCXJlaXBsX21ldGhvZCA9IElQTF9NRVRIT0RfRkNQX1JXX0RJQUc7CisJCWVsc2UgaWYgKE1BQ0hJTkVfSVNfVk0pCisJCQlyZWlwbF9tZXRob2QgPSBJUExfTUVUSE9EX0ZDUF9ST19WTTsKKwkJZWxzZQorCQkJcmVpcGxfbWV0aG9kID0gSVBMX01FVEhPRF9GQ1BfUk9fRElBRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVpcGxfbWV0aG9kID0gSVBMX01FVEhPRF9OT05FOworCX0KKwlyZWlwbF90eXBlID0gdHlwZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgcmVpcGxfdHlwZV9zaG93KHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIGlwbF90eXBlX3N0cihyZWlwbF90eXBlKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHJlaXBsX3R5cGVfc3RvcmUoc3RydWN0IHN1YnN5c3RlbSAqc3Vic3lzLCBjb25zdCBjaGFyICpidWYsCisJCQkJc2l6ZV90IGxlbikKK3sKKwlpbnQgcmMgPSAtRUlOVkFMOworCisJaWYgKHN0cm5jbXAoYnVmLCBJUExfQ0NXX1NUUiwgc3RybGVuKElQTF9DQ1dfU1RSKSkgPT0gMCkKKwkJcmMgPSByZWlwbF9zZXRfdHlwZShJUExfVFlQRV9DQ1cpOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCBJUExfRkNQX1NUUiwgc3RybGVuKElQTF9GQ1BfU1RSKSkgPT0gMCkKKwkJcmMgPSByZWlwbF9zZXRfdHlwZShJUExfVFlQRV9GQ1ApOworCXJldHVybiAocmMgIT0gMCkgPyByYyA6IGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIHJlaXBsX3R5cGVfYXR0ciA9CisJCV9fQVRUUihyZWlwbF90eXBlLCAwNjQ0LCByZWlwbF90eXBlX3Nob3csIHJlaXBsX3R5cGVfc3RvcmUpOworCitzdGF0aWMgZGVjbF9zdWJzeXMocmVpcGwsIE5VTEwsIE5VTEwpOworCisvKgorICogZHVtcCBzZWN0aW9uCisgKi8KKworLyogRkNQIGR1bXAgZGV2aWNlIGF0dHJpYnV0ZXMgKi8KKworREVGSU5FX0lQTF9BVFRSX1JXKGR1bXBfZmNwLCB3d3BuLCAiMHglMDE2bGx4XG4iLCAiJTAxNmxseFxuIiwKKwkJICAgZHVtcF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC53d3BuKTsKK0RFRklORV9JUExfQVRUUl9SVyhkdW1wX2ZjcCwgbHVuLCAiMHglMDE2bGx4XG4iLCAiJTAxNmxseFxuIiwKKwkJICAgZHVtcF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcC5sdW4pOworREVGSU5FX0lQTF9BVFRSX1JXKGR1bXBfZmNwLCBib290cHJvZywgIiVsbGRcbiIsICIlbGxkXG4iLAorCQkgICBkdW1wX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLmJvb3Rwcm9nKTsKK0RFRklORV9JUExfQVRUUl9SVyhkdW1wX2ZjcCwgYnJfbGJhLCAiJWxsZFxuIiwgIiVsbGRcbiIsCisJCSAgIGR1bXBfYmxvY2tfZmNwLT5pcGxfaW5mby5mY3AuYnJfbGJhKTsKK0RFRklORV9JUExfQVRUUl9SVyhkdW1wX2ZjcCwgZGV2aWNlLCAiMC4wLiUwNGxseFxuIiwgIjAuMC4lbGx4XG4iLAorCQkgICBkdW1wX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLmRldm5vKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR1bXBfZmNwX2F0dHJzW10gPSB7CisJJnN5c19kdW1wX2ZjcF9kZXZpY2VfYXR0ci5hdHRyLAorCSZzeXNfZHVtcF9mY3Bfd3dwbl9hdHRyLmF0dHIsCisJJnN5c19kdW1wX2ZjcF9sdW5fYXR0ci5hdHRyLAorCSZzeXNfZHVtcF9mY3BfYm9vdHByb2dfYXR0ci5hdHRyLAorCSZzeXNfZHVtcF9mY3BfYnJfbGJhX2F0dHIuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZHVtcF9mY3BfYXR0cl9ncm91cCA9IHsKKwkubmFtZSAgPSBJUExfRkNQX1NUUiwKKwkuYXR0cnMgPSBkdW1wX2ZjcF9hdHRycywKK307CisKKy8qIENDVyBkdW1wIGRldmljZSBhdHRyaWJ1dGVzICovCisKK0RFRklORV9JUExfQVRUUl9SVyhkdW1wX2NjdywgZGV2aWNlLCAiMC4wLiUwNGxseFxuIiwgIjAuMC4lbGx4XG4iLAorCQkgICBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmR1bXBfY2N3X2F0dHJzW10gPSB7CisJJnN5c19kdW1wX2Njd19kZXZpY2VfYXR0ci5hdHRyLAorCU5VTEwsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkdW1wX2Njd19hdHRyX2dyb3VwID0geworCS5uYW1lICA9IElQTF9DQ1dfU1RSLAorCS5hdHRycyA9IGR1bXBfY2N3X2F0dHJzLAorfTsKKworLyogZHVtcCB0eXBlICovCisKK3N0YXRpYyBpbnQgZHVtcF9zZXRfdHlwZShlbnVtIGlwbF90eXBlIHR5cGUpCit7CisJaWYgKCEoZHVtcF9jYXBhYmlsaXRpZXMgJiB0eXBlKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3dpdGNoKHR5cGUpIHsKKwljYXNlIElQTF9UWVBFX0NDVzoKKwkJaWYgKE1BQ0hJTkVfSVNfVk0pCisJCQlkdW1wX21ldGhvZCA9IElQTF9NRVRIT0RfQ0NXX1ZNOworCQllbHNlCisJCQlkdW1wX21ldGhvZCA9IElQTF9NRVRIT0RfQ0NXX0NJTzsKKwkJYnJlYWs7CisJY2FzZSBJUExfVFlQRV9GQ1A6CisJCWR1bXBfbWV0aG9kID0gSVBMX01FVEhPRF9GQ1BfUldfRElBRzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHVtcF9tZXRob2QgPSBJUExfTUVUSE9EX05PTkU7CisJfQorCWR1bXBfdHlwZSA9IHR5cGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGR1bXBfdHlwZV9zaG93KHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIGlwbF90eXBlX3N0cihkdW1wX3R5cGUpKTsKK30KKworc3RhdGljIHNzaXplX3QgZHVtcF90eXBlX3N0b3JlKHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY29uc3QgY2hhciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBsZW4pCit7CisJaW50IHJjID0gLUVJTlZBTDsKKworCWlmIChzdHJuY21wKGJ1ZiwgSVBMX05PTkVfU1RSLCBzdHJsZW4oSVBMX05PTkVfU1RSKSkgPT0gMCkKKwkJcmMgPSBkdW1wX3NldF90eXBlKElQTF9UWVBFX05PTkUpOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCBJUExfQ0NXX1NUUiwgc3RybGVuKElQTF9DQ1dfU1RSKSkgPT0gMCkKKwkJcmMgPSBkdW1wX3NldF90eXBlKElQTF9UWVBFX0NDVyk7CisJZWxzZSBpZiAoc3RybmNtcChidWYsIElQTF9GQ1BfU1RSLCBzdHJsZW4oSVBMX0ZDUF9TVFIpKSA9PSAwKQorCQlyYyA9IGR1bXBfc2V0X3R5cGUoSVBMX1RZUEVfRkNQKTsKKwlyZXR1cm4gKHJjICE9IDApID8gcmMgOiBsZW47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSBkdW1wX3R5cGVfYXR0ciA9CisJCV9fQVRUUihkdW1wX3R5cGUsIDA2NDQsIGR1bXBfdHlwZV9zaG93LCBkdW1wX3R5cGVfc3RvcmUpOworCitzdGF0aWMgZGVjbF9zdWJzeXMoZHVtcCwgTlVMTCwgTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBkdW1wX3NtcF9zdG9wX2FsbCh2b2lkKQoreworCWludCBjcHU7CisJcHJlZW1wdF9kaXNhYmxlKCk7CisJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJaWYgKGNwdSA9PSBzbXBfcHJvY2Vzc29yX2lkKCkpCisJCQljb250aW51ZTsKKwkJd2hpbGUgKHNpZ25hbF9wcm9jZXNzb3IoY3B1LCBzaWdwX3N0b3ApID09IHNpZ3BfYnVzeSkKKwkJCXVkZWxheSgxMCk7CisJfQorCXByZWVtcHRfZW5hYmxlKCk7Cit9CisjZWxzZQorI2RlZmluZSBkdW1wX3NtcF9zdG9wX2FsbCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogU2h1dGRvd24gYWN0aW9ucyBzZWN0aW9uCisgKi8KKworc3RhdGljIGRlY2xfc3Vic3lzKHNodXRkb3duX2FjdGlvbnMsIE5VTEwsIE5VTEwpOworCisvKiBvbiBwYW5pYyAqLworCitzdGF0aWMgc3NpemVfdCBvbl9wYW5pY19zaG93KHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY2hhciAqcGFnZSkKK3sKKwlyZXR1cm4gc3ByaW50ZihwYWdlLCAiJXNcbiIsIHNodXRkb3duX2FjdGlvbl9zdHIob25fcGFuaWNfYWN0aW9uKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9uX3BhbmljX3N0b3JlKHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY29uc3QgY2hhciAqYnVmLAorCQkJICAgICAgc2l6ZV90IGxlbikKK3sKKwlpZiAoc3RybmNtcChidWYsIFNIVVRET1dOX1JFSVBMX1NUUiwgc3RybGVuKFNIVVRET1dOX1JFSVBMX1NUUikpID09IDApCisJCW9uX3BhbmljX2FjdGlvbiA9IFNIVVRET1dOX1JFSVBMOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCBTSFVURE9XTl9EVU1QX1NUUiwKKwkJCSBzdHJsZW4oU0hVVERPV05fRFVNUF9TVFIpKSA9PSAwKQorCQlvbl9wYW5pY19hY3Rpb24gPSBTSFVURE9XTl9EVU1QOworCWVsc2UgaWYgKHN0cm5jbXAoYnVmLCBTSFVURE9XTl9TVE9QX1NUUiwKKwkJCSBzdHJsZW4oU0hVVERPV05fU1RPUF9TVFIpKSA9PSAwKQorCQlvbl9wYW5pY19hY3Rpb24gPSBTSFVURE9XTl9TVE9QOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgb25fcGFuaWNfYXR0ciA9CisJCV9fQVRUUihvbl9wYW5pYywgMDY0NCwgb25fcGFuaWNfc2hvdywgb25fcGFuaWNfc3RvcmUpOworCitzdGF0aWMgdm9pZCBwcmludF9mY3BfYmxvY2soc3RydWN0IGlwbF9wYXJhbWV0ZXJfYmxvY2sgKmZjcF9ibG9jaykKK3sKKwlwcmludGsoS0VSTl9FTUVSRyAid3dwbjogICAgICAlMDE2bGx4XG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWZjcF9ibG9jay0+aXBsX2luZm8uZmNwLnd3cG4pOworCXByaW50ayhLRVJOX0VNRVJHICJsdW46ICAgICAgICUwMTZsbHhcbiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpZmNwX2Jsb2NrLT5pcGxfaW5mby5mY3AubHVuKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiYm9vdHByb2c6ICAlbGxkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWZjcF9ibG9jay0+aXBsX2luZm8uZmNwLmJvb3Rwcm9nKTsKKwlwcmludGsoS0VSTl9FTUVSRyAiYnJfbGJhOiAgICAlbGxkXG4iLAorCQkodW5zaWduZWQgbG9uZyBsb25nKWZjcF9ibG9jay0+aXBsX2luZm8uZmNwLmJyX2xiYSk7CisJcHJpbnRrKEtFUk5fRU1FUkcgImRldmljZTogICAgJWxseFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylmY3BfYmxvY2stPmlwbF9pbmZvLmZjcC5kZXZubyk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIm9wdDogICAgICAgJXhcbiIsIGZjcF9ibG9jay0+aXBsX2luZm8uZmNwLm9wdCk7Cit9CisKK3ZvaWQgZG9fcmVpcGwodm9pZCkKK3sKKwlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKKwlzdGF0aWMgY2hhciBidWZbMTAwXTsKKworCXN3aXRjaCAocmVpcGxfdHlwZSkgeworCWNhc2UgSVBMX1RZUEVfQ0NXOgorCQlwcmludGsoS0VSTl9FTUVSRyAicmVib290IG9uIGNjdyBkZXZpY2U6IDAuMC4lMDR4XG4iLAorCQkJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8pOworCQlicmVhazsKKwljYXNlIElQTF9UWVBFX0ZDUDoKKwkJcHJpbnRrKEtFUk5fRU1FUkcgInJlYm9vdCBvbiBmY3AgZGV2aWNlOlxuIik7CisJCXByaW50X2ZjcF9ibG9jayhyZWlwbF9ibG9ja19mY3ApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHJlaXBsX21ldGhvZCkgeworCWNhc2UgSVBMX01FVEhPRF9DQ1dfQ0lPOgorCQlkZXZpZC5kZXZubyA9IHJlaXBsX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vOworCQlkZXZpZC5zc2lkICA9IDA7CisJCXJlaXBsX2Njd19kZXYoJmRldmlkKTsKKwkJYnJlYWs7CisJY2FzZSBJUExfTUVUSE9EX0NDV19WTToKKwkJc3ByaW50ZihidWYsICJJUEwgJVgiLCByZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7CisJCWNwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9DQ1dfRElBRzoKKwkJZGlhZzMwOChESUFHMzA4X1NFVCwgcmVpcGxfYmxvY2tfY2N3KTsKKwkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9GQ1BfUldfRElBRzoKKwkJZGlhZzMwOChESUFHMzA4X1NFVCwgcmVpcGxfYmxvY2tfZmNwKTsKKwkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9GQ1BfUk9fRElBRzoKKwkJZGlhZzMwOChESUFHMzA4X0lQTCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9GQ1BfUk9fVk06CisJCWNwY21kKCJJUEwiLCBOVUxMLCAwLCBOVUxMKTsKKwkJYnJlYWs7CisJY2FzZSBJUExfTUVUSE9EX05PTkU6CisJZGVmYXVsdDoKKwkJaWYgKE1BQ0hJTkVfSVNfVk0pCisJCQljcGNtZCgiSVBMIiwgTlVMTCwgMCwgTlVMTCk7CisJCWRpYWczMDgoRElBRzMwOF9JUEwsIE5VTEwpOworCQlicmVhazsKKwl9CisJcGFuaWMoInJlaXBsIGZhaWxlZCFcbiIpOworfQorCitzdGF0aWMgdm9pZCBkb19kdW1wKHZvaWQpCit7CisJc3RydWN0IGNjd19kZXZfaWQgZGV2aWQ7CisJc3RhdGljIGNoYXIgYnVmWzEwMF07CisKKwlzd2l0Y2ggKGR1bXBfdHlwZSkgeworCWNhc2UgSVBMX1RZUEVfQ0NXOgorCQlwcmludGsoS0VSTl9FTUVSRyAiQXV0b21hdGljIGR1bXAgb24gY2N3IGRldmljZTogMC4wLiUwNHhcbiIsCisJCSAgICAgICBkdW1wX2Jsb2NrX2Njdy0+aXBsX2luZm8uY2N3LmRldm5vKTsKKwkJYnJlYWs7CisJY2FzZSBJUExfVFlQRV9GQ1A6CisJCXByaW50ayhLRVJOX0VNRVJHICJBdXRvbWF0aWMgZHVtcCBvbiBmY3AgZGV2aWNlOlxuIik7CisJCXByaW50X2ZjcF9ibG9jayhkdW1wX2Jsb2NrX2ZjcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKGR1bXBfbWV0aG9kKSB7CisJY2FzZSBJUExfTUVUSE9EX0NDV19DSU86CisJCWR1bXBfc21wX3N0b3BfYWxsKCk7CisJCWRldmlkLmRldm5vID0gZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubzsKKwkJZGV2aWQuc3NpZCAgPSAwOworCQlyZWlwbF9jY3dfZGV2KCZkZXZpZCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9DQ1dfVk06CisJCWR1bXBfc21wX3N0b3BfYWxsKCk7CisJCXNwcmludGYoYnVmLCAiU1RPUkUgU1RBVFVTIik7CisJCWNwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CisJCXNwcmludGYoYnVmLCAiSVBMICVYIiwgZHVtcF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdy5kZXZubyk7CisJCWNwY21kKGJ1ZiwgTlVMTCwgMCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9DQ1dfRElBRzoKKwkJZGlhZzMwOChESUFHMzA4X1NFVCwgZHVtcF9ibG9ja19jY3cpOworCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9GQ1BfUldfRElBRzoKKwkJZGlhZzMwOChESUFHMzA4X1NFVCwgZHVtcF9ibG9ja19mY3ApOworCQlkaWFnMzA4KERJQUczMDhfRFVNUCwgTlVMTCk7CisJCWJyZWFrOworCWNhc2UgSVBMX01FVEhPRF9OT05FOgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJcHJpbnRrKEtFUk5fRU1FUkcgIkR1bXAgZmFpbGVkIVxuIik7Cit9CisKKy8qIGluaXQgZnVuY3Rpb25zICovCisKK3N0YXRpYyBpbnQgX19pbml0IGlwbF9yZWdpc3Rlcl9mY3BfZmlsZXModm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCisJCQkJJmlwbF9mY3BfYXR0cl9ncm91cCk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCisJCQkJICAgJmlwbF9wYXJhbWV0ZXJfYXR0cik7CisJaWYgKHJjKQorCQlnb3RvIG91dF9pcGxfcGFybTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCisJCQkJICAgJmlwbF9zY3BfZGF0YV9hdHRyKTsKKwlpZiAoIXJjKQorCQlnb3RvIG91dDsKKworCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmaXBsX3N1YnN5cy5rc2V0LmtvYmosICZpcGxfcGFyYW1ldGVyX2F0dHIpOworCitvdXRfaXBsX3Bhcm06CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZpcGxfc3Vic3lzLmtzZXQua29iaiwgJmlwbF9mY3BfYXR0cl9ncm91cCk7CitvdXQ6CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IF9faW5pdCBpcGxfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gZmlybXdhcmVfcmVnaXN0ZXIoJmlwbF9zdWJzeXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXN3aXRjaCAoaXBsX2dldF90eXBlKCkpIHsKKwljYXNlIElQTF9UWVBFX0NDVzoKKwkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmlwbF9zdWJzeXMua3NldC5rb2JqLAorCQkJCQkmaXBsX2Njd19hdHRyX2dyb3VwKTsKKwkJYnJlYWs7CisJY2FzZSBJUExfVFlQRV9GQ1A6CisJCXJjID0gaXBsX3JlZ2lzdGVyX2ZjcF9maWxlcygpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCisJCQkJCSZpcGxfdW5rbm93bl9hdHRyX2dyb3VwKTsKKwkJYnJlYWs7CisJfQorCWlmIChyYykKKwkJZmlybXdhcmVfdW5yZWdpc3RlcigmaXBsX3N1YnN5cyk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmVpcGxfcHJvYmUodm9pZCkKK3sKKwl2b2lkICpidWZmZXI7CisKKwlidWZmZXIgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFidWZmZXIpCisJCXJldHVybjsKKwlpZiAoZGlhZzMwOChESUFHMzA4X1NUT1JFLCBidWZmZXIpID09IERJQUczMDhfUkNfT0spCisJCWRpYWczMDhfc2V0X3dvcmtzID0gMTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKTsKK30KKworc3RhdGljIGludCBfX2luaXQgcmVpcGxfY2N3X2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyZWlwbF9ibG9ja19jY3cgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWlwbF9ibG9ja19jY3cpCisJCXJldHVybiAtRU5PTUVNOworCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZyZWlwbF9zdWJzeXMua3NldC5rb2JqLCAmcmVpcGxfY2N3X2F0dHJfZ3JvdXApOworCWlmIChyYykgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcmVpcGxfYmxvY2tfY2N3KTsKKwkJcmV0dXJuIHJjOworCX0KKwlyZWlwbF9ibG9ja19jY3ctPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfQ0NXX0xFTjsKKwlyZWlwbF9ibG9ja19jY3ctPmhkci52ZXJzaW9uID0gSVBMX1BBUk1fQkxPQ0tfVkVSU0lPTjsKKwlyZWlwbF9ibG9ja19jY3ctPmhkci5ibGswX2xlbiA9IHNpemVvZihyZWlwbF9ibG9ja19jY3ctPmlwbF9pbmZvLmNjdyk7CisJcmVpcGxfYmxvY2tfY2N3LT5oZHIucGJ0ID0gRElBRzMwOF9JUExfVFlQRV9DQ1c7CisJaWYgKGlwbF9nZXRfdHlwZSgpID09IElQTF9UWVBFX0NDVykKKwkJcmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cuZGV2bm8gPSBpcGxfZGV2bm87CisJcmVpcGxfY2FwYWJpbGl0aWVzIHw9IElQTF9UWVBFX0NDVzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2luaXQgcmVpcGxfZmNwX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoKCFkaWFnMzA4X3NldF93b3JrcykgJiYgKGlwbF9nZXRfdHlwZSgpICE9IElQTF9UWVBFX0ZDUCkpCisJCXJldHVybiAwOworCWlmICgoIWRpYWczMDhfc2V0X3dvcmtzKSAmJiAoaXBsX2dldF90eXBlKCkgPT0gSVBMX1RZUEVfRkNQKSkKKwkJbWFrZV9hdHRyc19ybyhyZWlwbF9mY3BfYXR0cnMpOworCisJcmVpcGxfYmxvY2tfZmNwID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghcmVpcGxfYmxvY2tfZmNwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcmVpcGxfc3Vic3lzLmtzZXQua29iaiwgJnJlaXBsX2ZjcF9hdHRyX2dyb3VwKTsKKwlpZiAocmMpIHsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXJlaXBsX2Jsb2NrX2ZjcCk7CisJCXJldHVybiByYzsKKwl9CisJaWYgKGlwbF9nZXRfdHlwZSgpID09IElQTF9UWVBFX0ZDUCkgeworCQltZW1jcHkocmVpcGxfYmxvY2tfZmNwLCBJUExfUEFSTUJMT0NLX1NUQVJULCBQQUdFX1NJWkUpOworCX0gZWxzZSB7CisJCXJlaXBsX2Jsb2NrX2ZjcC0+aGRyLmxlbiA9IElQTF9QQVJNX0JMS19GQ1BfTEVOOworCQlyZWlwbF9ibG9ja19mY3AtPmhkci52ZXJzaW9uID0gSVBMX1BBUk1fQkxPQ0tfVkVSU0lPTjsKKwkJcmVpcGxfYmxvY2tfZmNwLT5oZHIuYmxrMF9sZW4gPQorCQkJc2l6ZW9mKHJlaXBsX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwKTsKKwkJcmVpcGxfYmxvY2tfZmNwLT5oZHIucGJ0ID0gRElBRzMwOF9JUExfVFlQRV9GQ1A7CisJCXJlaXBsX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLm9wdCA9IERJQUczMDhfSVBMX09QVF9JUEw7CisJfQorCXJlaXBsX2NhcGFiaWxpdGllcyB8PSBJUExfVFlQRV9GQ1A7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHJlaXBsX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGZpcm13YXJlX3JlZ2lzdGVyKCZyZWlwbF9zdWJzeXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gc3Vic3lzX2NyZWF0ZV9maWxlKCZyZWlwbF9zdWJzeXMsICZyZWlwbF90eXBlX2F0dHIpOworCWlmIChyYykgeworCQlmaXJtd2FyZV91bnJlZ2lzdGVyKCZyZWlwbF9zdWJzeXMpOworCQlyZXR1cm4gcmM7CisJfQorCXJjID0gcmVpcGxfY2N3X2luaXQoKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHJlaXBsX2ZjcF9pbml0KCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmMgPSByZWlwbF9zZXRfdHlwZShpcGxfZ2V0X3R5cGUoKSk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGR1bXBfY2N3X2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlkdW1wX2Jsb2NrX2NjdyA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWR1bXBfYmxvY2tfY2N3KQorCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZHVtcF9zdWJzeXMua3NldC5rb2JqLCAmZHVtcF9jY3dfYXR0cl9ncm91cCk7CisJaWYgKHJjKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkdW1wX2Jsb2NrX2Njdyk7CisJCXJldHVybiByYzsKKwl9CisJZHVtcF9ibG9ja19jY3ctPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfQ0NXX0xFTjsKKwlkdW1wX2Jsb2NrX2Njdy0+aGRyLnZlcnNpb24gPSBJUExfUEFSTV9CTE9DS19WRVJTSU9OOworCWR1bXBfYmxvY2tfY2N3LT5oZHIuYmxrMF9sZW4gPSBzaXplb2YocmVpcGxfYmxvY2tfY2N3LT5pcGxfaW5mby5jY3cpOworCWR1bXBfYmxvY2tfY2N3LT5oZHIucGJ0ID0gRElBRzMwOF9JUExfVFlQRV9DQ1c7CisJZHVtcF9jYXBhYmlsaXRpZXMgfD0gSVBMX1RZUEVfQ0NXOworCXJldHVybiAwOworfQorCitleHRlcm4gY2hhciBzMzkwX3JlYWRpbmZvX3NjY2JbXTsKKworc3RhdGljIGludCBfX2luaXQgZHVtcF9mY3BfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCWlmKCEoczM5MF9yZWFkaW5mb19zY2NiWzkxXSAmIDB4MikpCisJCXJldHVybiAwOyAvKiBMRElQTCBEVU1QIGlzIG5vdCBpbnN0YWxsZWQgKi8KKwlpZiAoIWRpYWczMDhfc2V0X3dvcmtzKQorCQlyZXR1cm4gMDsKKwlkdW1wX2Jsb2NrX2ZjcCA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWR1bXBfYmxvY2tfZmNwKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZHVtcF9zdWJzeXMua3NldC5rb2JqLCAmZHVtcF9mY3BfYXR0cl9ncm91cCk7CisJaWYgKHJjKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylkdW1wX2Jsb2NrX2ZjcCk7CisJCXJldHVybiByYzsKKwl9CisJZHVtcF9ibG9ja19mY3AtPmhkci5sZW4gPSBJUExfUEFSTV9CTEtfRkNQX0xFTjsKKwlkdW1wX2Jsb2NrX2ZjcC0+aGRyLnZlcnNpb24gPSBJUExfUEFSTV9CTE9DS19WRVJTSU9OOworCWR1bXBfYmxvY2tfZmNwLT5oZHIuYmxrMF9sZW4gPSBzaXplb2YoZHVtcF9ibG9ja19mY3AtPmlwbF9pbmZvLmZjcCk7CisJZHVtcF9ibG9ja19mY3AtPmhkci5wYnQgPSBESUFHMzA4X0lQTF9UWVBFX0ZDUDsKKwlkdW1wX2Jsb2NrX2ZjcC0+aXBsX2luZm8uZmNwLm9wdCA9IERJQUczMDhfSVBMX09QVF9EVU1QOworCWR1bXBfY2FwYWJpbGl0aWVzIHw9IElQTF9UWVBFX0ZDUDsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBTSFVURE9XTl9PTl9QQU5JQ19QUklPIDAKKworc3RhdGljIGludCBzaHV0ZG93bl9vbl9wYW5pY19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpkYXRhKQoreworCWlmIChvbl9wYW5pY19hY3Rpb24gPT0gU0hVVERPV05fRFVNUCkKKwkJZG9fZHVtcCgpOworCWVsc2UgaWYgKG9uX3BhbmljX2FjdGlvbiA9PSBTSFVURE9XTl9SRUlQTCkKKwkJZG9fcmVpcGwoKTsKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNodXRkb3duX29uX3BhbmljX25iID0geworCS5ub3RpZmllcl9jYWxsID0gc2h1dGRvd25fb25fcGFuaWNfbm90aWZ5LAorCS5wcmlvcml0eSA9IFNIVVRET1dOX09OX1BBTklDX1BSSU8KK307CisKK3N0YXRpYyBpbnQgX19pbml0IGR1bXBfaW5pdCh2b2lkKQoreworCWludCByYzsKKworCXJjID0gZmlybXdhcmVfcmVnaXN0ZXIoJmR1bXBfc3Vic3lzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHN1YnN5c19jcmVhdGVfZmlsZSgmZHVtcF9zdWJzeXMsICZkdW1wX3R5cGVfYXR0cik7CisJaWYgKHJjKSB7CisJCWZpcm13YXJlX3VucmVnaXN0ZXIoJmR1bXBfc3Vic3lzKTsKKwkJcmV0dXJuIHJjOworCX0KKwlyYyA9IGR1bXBfY2N3X2luaXQoKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IGR1bXBfZmNwX2luaXQoKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlkdW1wX3NldF90eXBlKElQTF9UWVBFX05PTkUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzaHV0ZG93bl9hY3Rpb25zX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGZpcm13YXJlX3JlZ2lzdGVyKCZzaHV0ZG93bl9hY3Rpb25zX3N1YnN5cyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmMgPSBzdWJzeXNfY3JlYXRlX2ZpbGUoJnNodXRkb3duX2FjdGlvbnNfc3Vic3lzLCAmb25fcGFuaWNfYXR0cik7CisJaWYgKHJjKSB7CisJCWZpcm13YXJlX3VucmVnaXN0ZXIoJnNodXRkb3duX2FjdGlvbnNfc3Vic3lzKTsKKwkJcmV0dXJuIHJjOworCX0KKwlhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnBhbmljX25vdGlmaWVyX2xpc3QsCisJCQkJICAgICAgICZzaHV0ZG93bl9vbl9wYW5pY19uYik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHMzOTBfaXBsX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlyZWlwbF9wcm9iZSgpOworCXJjID0gaXBsX2luaXQoKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IHJlaXBsX2luaXQoKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKwlyYyA9IGR1bXBfaW5pdCgpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXJjID0gc2h1dGRvd25fYWN0aW9uc19pbml0KCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIDA7Cit9CisKK19faW5pdGNhbGwoczM5MF9pcGxfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvczM5MC9rZXJuZWwva3Byb2Jlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhMjhmYjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAva2VybmVsL2twcm9iZXMuYwpAQCAtMCwwICsxLDY1NyBAQAorLyoKKyAqICBLZXJuZWwgUHJvYmVzIChLUHJvYmVzKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycG9yYXRpb24sIDIwMDIsIDIwMDYKKyAqCisgKiBzMzkwIHBvcnQsIHVzZWQgcHBjNjQgYXMgdGVtcGxhdGUuIE1pa2UgR3J1bmR5IDxncnVuZHltQHVzLmlibS5jb20+CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20va2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZSAqLCBjdXJyZW50X2twcm9iZSkgPSBOVUxMOworREVGSU5FX1BFUl9DUFUoc3RydWN0IGtwcm9iZV9jdGxibGssIGtwcm9iZV9jdGxibGspOworCitpbnQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwkvKiBNYWtlIHN1cmUgdGhlIHByb2JlIGlzbid0IGdvaW5nIG9uIGEgZGlmZmljdWx0IGluc3RydWN0aW9uICovCisJaWYgKGlzX3Byb2hpYml0ZWRfb3Bjb2RlKChrcHJvYmVfb3Bjb2RlX3QgKikgcC0+YWRkcikpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIgJiAweDAxKSB7CisJCXByaW50aygiQXR0ZW1wdCB0byByZWdpc3RlciBrcHJvYmUgYXQgYW4gdW5hbGlnbmVkIGFkZHJlc3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJLyogVXNlIHRoZSBnZXRfaW5zbl9zbG90KCkgZmFjaWxpdHkgZm9yIGNvcnJlY3RuZXNzICovCisJaWYgKCEocC0+YWluc24uaW5zbiA9IGdldF9pbnNuX3Nsb3QoKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KHAtPmFpbnNuLmluc24sIHAtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisKKwlnZXRfaW5zdHJ1Y3Rpb25fdHlwZSgmcC0+YWluc24pOworCXAtPm9wY29kZSA9ICpwLT5hZGRyOworCXJldHVybiAwOworfQorCitpbnQgX19rcHJvYmVzIGlzX3Byb2hpYml0ZWRfb3Bjb2RlKGtwcm9iZV9vcGNvZGVfdCAqaW5zdHJ1Y3Rpb24pCit7CisJc3dpdGNoICgqKF9fdTggKikgaW5zdHJ1Y3Rpb24pIHsKKwljYXNlIDB4MGM6CS8qIGJhc3NtICovCisJY2FzZSAweDBiOgkvKiBic20JICovCisJY2FzZSAweDgzOgkvKiBkaWFnICAqLworCWNhc2UgMHg0NDoJLyogZXgJICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzd2l0Y2ggKCooX191MTYgKikgaW5zdHJ1Y3Rpb24pIHsKKwljYXNlIDB4MDEwMToJLyogcHIJICovCisJY2FzZSAweGIyNWE6CS8qIGJzYQkgKi8KKwljYXNlIDB4YjI0MDoJLyogYmFrciAgKi8KKwljYXNlIDB4YjI1ODoJLyogYnNnCSAqLworCWNhc2UgMHhiMjE4OgkvKiBwYwkgKi8KKwljYXNlIDB4YjIyODoJLyogcHQJICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2twcm9iZXMgZ2V0X2luc3RydWN0aW9uX3R5cGUoc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYWluc24pCit7CisJLyogZGVmYXVsdCBmaXh1cCBtZXRob2QgKi8KKwlhaW5zbi0+Zml4dXAgPSBGSVhVUF9QU1dfTk9STUFMOworCisJLyogc2F2ZSByMSBvcGVyYW5kICovCisJYWluc24tPnJlZyA9ICgqYWluc24tPmluc24gJiAweGYwKSA+PiA0OworCisJLyogc2F2ZSB0aGUgaW5zdHJ1Y3Rpb24gbGVuZ3RoIChwb3AgNS01KSBpbiBieXRlcyAqLworCXN3aXRjaCAoKihfX3U4ICopIChhaW5zbi0+aW5zbikgPj4gNCkgeworCWNhc2UgMDoKKwkJYWluc24tPmlsZW4gPSAyOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCQlhaW5zbi0+aWxlbiA9IDQ7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJYWluc24tPmlsZW4gPSA2OworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKCooX191OCAqKSBhaW5zbi0+aW5zbikgeworCWNhc2UgMHgwNToJLyogYmFscgkqLworCWNhc2UgMHgwZDoJLyogYmFzciAqLworCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9SRVRVUk5fUkVHSVNURVI7CisJCS8qIGlmIHIyID0gMCwgbm8gYnJhbmNoIHdpbGwgYmUgdGFrZW4gKi8KKwkJaWYgKCgqYWluc24tPmluc24gJiAweDBmKSA9PSAwKQorCQkJYWluc24tPmZpeHVwIHw9IEZJWFVQX0JSQU5DSF9OT1RfVEFLRU47CisJCWJyZWFrOworCWNhc2UgMHgwNjoJLyogYmN0cgkqLworCWNhc2UgMHgwNzoJLyogYmNyCSovCisJCWFpbnNuLT5maXh1cCA9IEZJWFVQX0JSQU5DSF9OT1RfVEFLRU47CisJCWJyZWFrOworCWNhc2UgMHg0NToJLyogYmFsCSovCisJY2FzZSAweDRkOgkvKiBiYXMJKi8KKwkJYWluc24tPmZpeHVwID0gRklYVVBfUkVUVVJOX1JFR0lTVEVSOworCQlicmVhazsKKwljYXNlIDB4NDc6CS8qIGJjCSovCisJY2FzZSAweDQ2OgkvKiBiY3QJKi8KKwljYXNlIDB4ODY6CS8qIGJ4aAkqLworCWNhc2UgMHg4NzoJLyogYnhsZQkqLworCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOOworCQlicmVhazsKKwljYXNlIDB4ODI6CS8qIGxwc3cJKi8KKwkJYWluc24tPmZpeHVwID0gRklYVVBfTk9UX1JFUVVJUkVEOworCQlicmVhazsKKwljYXNlIDB4YjI6CS8qIGxwc3dlICovCisJCWlmICgqKCgoX191OCAqKSBhaW5zbi0+aW5zbikgKyAxKSA9PSAweGIyKSB7CisJCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9OT1RfUkVRVUlSRUQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSAweGE3OgkvKiBicmFzCSovCisJCWlmICgoKmFpbnNuLT5pbnNuICYgMHgwZikgPT0gMHgwNSkgeworCQkJYWluc24tPmZpeHVwIHw9IEZJWFVQX1JFVFVSTl9SRUdJU1RFUjsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4YzA6CisJCWlmICgoKmFpbnNuLT5pbnNuICYgMHgwZikgPT0gMHgwMCAgLyogbGFybCAgKi8KKwkJCXx8ICgqYWluc24tPmluc24gJiAweDBmKSA9PSAweDA1KSAvKiBicmFzbCAqLworCQlhaW5zbi0+Zml4dXAgfD0gRklYVVBfUkVUVVJOX1JFR0lTVEVSOworCQlicmVhazsKKwljYXNlIDB4ZWI6CisJCWlmICgqKCgoX191OCAqKSBhaW5zbi0+aW5zbikgKyA1ICkgPT0gMHg0NCB8fAkvKiBieGhnICAqLworCQkJKigoKF9fdTggKikgYWluc24tPmluc24pICsgNSkgPT0gMHg0NSkgey8qIGJ4bGVnICovCisJCQlhaW5zbi0+Zml4dXAgPSBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOOworCQl9CisJCWJyZWFrOworCWNhc2UgMHhlMzoJLyogYmN0ZwkqLworCQlpZiAoKigoKF9fdTggKikgYWluc24tPmluc24pICsgNSkgPT0gMHg0NikgeworCQkJYWluc24tPmZpeHVwID0gRklYVVBfQlJBTkNIX05PVF9UQUtFTjsKKwkJfQorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHN3YXBfaW5zdHJ1Y3Rpb24odm9pZCAqYXJlZikKK3sKKwlzdHJ1Y3QgaW5zX3JlcGxhY2VfYXJncyAqYXJncyA9IGFyZWY7CisJaW50IGVyciA9IC1FRkFVTFQ7CisKKwlhc20gdm9sYXRpbGUoCisJCSIwOiBtdmMgIDAoMiwlMiksMCglMylcbiIKKwkJIjE6IGxhICAgJTAsMFxuIgorCQkiMjpcbiIKKwkJRVhfVEFCTEUoMGIsMmIpCisJCTogIitkIiAoZXJyKSwgIj1tIiAoKmFyZ3MtPnB0cikKKwkJOiAiYSIgKGFyZ3MtPnB0ciksICJhIiAoJmFyZ3MtPm5ldyksICJtIiAoYXJncy0+bmV3KSk7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9hcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7CisJc3RydWN0IGluc19yZXBsYWNlX2FyZ3MgYXJnczsKKworCWFyZ3MucHRyID0gcC0+YWRkcjsKKwlhcmdzLm9sZCA9IHAtPm9wY29kZTsKKwlhcmdzLm5ldyA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047CisKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfU1dBUF9JTlNUOworCXN0b3BfbWFjaGluZV9ydW4oc3dhcF9pbnN0cnVjdGlvbiwgJmFyZ3MsIE5SX0NQVVMpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IHN0YXR1czsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBrY2ItPmtwcm9iZV9zdGF0dXM7CisJc3RydWN0IGluc19yZXBsYWNlX2FyZ3MgYXJnczsKKworCWFyZ3MucHRyID0gcC0+YWRkcjsKKwlhcmdzLm9sZCA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047CisJYXJncy5uZXcgPSBwLT5vcGNvZGU7CisKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfU1dBUF9JTlNUOworCXN0b3BfbWFjaGluZV9ydW4oc3dhcF9pbnN0cnVjdGlvbiwgJmFyZ3MsIE5SX0NQVVMpOworCWtjYi0+a3Byb2JlX3N0YXR1cyA9IHN0YXR1czsKK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKKwlmcmVlX2luc25fc2xvdChwLT5haW5zbi5pbnNuKTsKKwltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBwcmVwYXJlX3NpbmdsZXN0ZXAoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJcGVyX2NyX2JpdHMga3Byb2JlX3Blcl9yZWdzWzFdOworCisJbWVtc2V0KGtwcm9iZV9wZXJfcmVncywgMCwgc2l6ZW9mKHBlcl9jcl9iaXRzKSk7CisJcmVncy0+cHN3LmFkZHIgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuIHwgUFNXX0FERFJfQU1PREU7CisKKwkvKiBTZXQgdXAgdGhlIHBlciBjb250cm9sIHJlZyBpbmZvLCB3aWxsIHBhc3MgdG8gbGN0bCAqLworCWtwcm9iZV9wZXJfcmVnc1swXS5lbV9pbnN0cnVjdGlvbl9mZXRjaCA9IDE7CisJa3Byb2JlX3Blcl9yZWdzWzBdLnN0YXJ0aW5nX2FkZHIgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOworCWtwcm9iZV9wZXJfcmVnc1swXS5lbmRpbmdfYWRkciA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24gKyAxOworCisJLyogU2V0IHRoZSBQRVIgY29udHJvbCByZWdzLCB0dXJucyBvbiBzaW5nbGUgc3RlcCBmb3IgdGhpcyBhZGRyZXNzICovCisJX19jdGxfbG9hZChrcHJvYmVfcGVyX3JlZ3MsIDksIDExKTsKKwlyZWdzLT5wc3cubWFzayB8PSBQU1dfTUFTS19QRVI7CisJcmVncy0+cHN3Lm1hc2sgJj0gfihQU1dfTUFTS19JTyB8IFBTV19NQVNLX0VYVCB8IFBTV19NQVNLX01DSEVDSyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzYXZlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCWtjYi0+cHJldl9rcHJvYmUua3AgPSBrcHJvYmVfcnVubmluZygpOworCWtjYi0+cHJldl9rcHJvYmUuc3RhdHVzID0ga2NiLT5rcHJvYmVfc3RhdHVzOworCWtjYi0+cHJldl9rcHJvYmUua3Byb2JlX3NhdmVkX2ltYXNrID0ga2NiLT5rcHJvYmVfc2F2ZWRfaW1hc2s7CisJbWVtY3B5KGtjYi0+cHJldl9rcHJvYmUua3Byb2JlX3NhdmVkX2N0bCwga2NiLT5rcHJvYmVfc2F2ZWRfY3RsLAorCQkJCQlzaXplb2Yoa2NiLT5rcHJvYmVfc2F2ZWRfY3RsKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN0b3JlX3ByZXZpb3VzX2twcm9iZShzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiKQoreworCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0ga2NiLT5wcmV2X2twcm9iZS5rcDsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBrY2ItPnByZXZfa3Byb2JlLnN0YXR1czsKKwlrY2ItPmtwcm9iZV9zYXZlZF9pbWFzayA9IGtjYi0+cHJldl9rcHJvYmUua3Byb2JlX3NhdmVkX2ltYXNrOworCW1lbWNweShrY2ItPmtwcm9iZV9zYXZlZF9jdGwsIGtjYi0+cHJldl9rcHJvYmUua3Byb2JlX3NhdmVkX2N0bCwKKwkJCQkJc2l6ZW9mKGtjYi0+a3Byb2JlX3NhdmVkX2N0bCkpOworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0X2N1cnJlbnRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKK3sKKwlfX2dldF9jcHVfdmFyKGN1cnJlbnRfa3Byb2JlKSA9IHA7CisJLyogU2F2ZSB0aGUgaW50ZXJydXB0IGFuZCBwZXIgZmxhZ3MgKi8KKwlrY2ItPmtwcm9iZV9zYXZlZF9pbWFzayA9IHJlZ3MtPnBzdy5tYXNrICYKKwkgICAgKFBTV19NQVNLX1BFUiB8IFBTV19NQVNLX0lPIHwgUFNXX01BU0tfRVhUIHwgUFNXX01BU0tfTUNIRUNLKTsKKwkvKiBTYXZlIHRoZSBjb250cm9sIHJlZ3MgdGhhdCBnb3Zlcm4gUEVSICovCisJX19jdGxfc3RvcmUoa2NiLT5rcHJvYmVfc2F2ZWRfY3RsLCA5LCAxMSk7Cit9CisKKy8qIENhbGxlZCB3aXRoIGtyZXRwcm9iZV9sb2NrIGhlbGQgKi8KK3ZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZSAqcnAsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcmV0cHJvYmVfaW5zdGFuY2UgKnJpOworCisJaWYgKChyaSA9IGdldF9mcmVlX3JwX2luc3QocnApKSAhPSBOVUxMKSB7CisJCXJpLT5ycCA9IHJwOworCQlyaS0+dGFzayA9IGN1cnJlbnQ7CisJCXJpLT5yZXRfYWRkciA9IChrcHJvYmVfb3Bjb2RlX3QgKikgcmVncy0+Z3Byc1sxNF07CisKKwkJLyogUmVwbGFjZSB0aGUgcmV0dXJuIGFkZHIgd2l0aCB0cmFtcG9saW5lIGFkZHIgKi8KKwkJcmVncy0+Z3Byc1sxNF0gPSAodW5zaWduZWQgbG9uZykma3JldHByb2JlX3RyYW1wb2xpbmU7CisKKwkJYWRkX3JwX2luc3QocmkpOworCX0gZWxzZSB7CisJCXJwLT5ubWlzc2VkKys7CisJfQorfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qga3Byb2JlICpwOworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgKmFkZHIgPSAodW5zaWduZWQgbG9uZyAqKQorCQkoKHJlZ3MtPnBzdy5hZGRyICYgUFNXX0FERFJfSU5TTikgLSAyKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiOworCisJLyoKKwkgKiBXZSBkb24ndCB3YW50IHRvIGJlIHByZWVtcHRlZCBmb3IgdGhlIGVudGlyZQorCSAqIGR1cmF0aW9uIG9mIGtwcm9iZSBwcm9jZXNzaW5nCisJICovCisJcHJlZW1wdF9kaXNhYmxlKCk7CisJa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCS8qIENoZWNrIHdlJ3JlIG5vdCBhY3R1YWxseSByZWN1cnNpbmcgKi8KKwlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwkJaWYgKHApIHsKKwkJCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX0hJVF9TUyAmJgorCQkJICAgICpwLT5haW5zbi5pbnNuID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCQlyZWdzLT5wc3cubWFzayAmPSB+UFNXX01BU0tfUEVSOworCQkJCXJlZ3MtPnBzdy5tYXNrIHw9IGtjYi0+a3Byb2JlX3NhdmVkX2ltYXNrOworCQkJCWdvdG8gbm9fa3Byb2JlOworCQkJfQorCQkJLyogV2UgaGF2ZSByZWVudGVyZWQgdGhlIGtwcm9iZV9oYW5kbGVyKCksIHNpbmNlCisJCQkgKiBhbm90aGVyIHByb2JlIHdhcyBoaXQgd2hpbGUgd2l0aGluIHRoZSBoYW5kbGVyLgorCQkJICogV2UgaGVyZSBzYXZlIHRoZSBvcmlnaW5hbCBrcHJvYmVzIHZhcmlhYmxlcyBhbmQKKwkJCSAqIGp1c3Qgc2luZ2xlIHN0ZXAgb24gdGhlIGluc3RydWN0aW9uIG9mIHRoZSBuZXcgcHJvYmUKKwkJCSAqIHdpdGhvdXQgY2FsbGluZyBhbnkgdXNlciBoYW5kbGVycy4KKwkJCSAqLworCQkJc2F2ZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOworCQkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChwKTsKKwkJCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwkJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9SRUVOVEVSOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CisJCQlpZiAocC0+YnJlYWtfaGFuZGxlciAmJiBwLT5icmVha19oYW5kbGVyKHAsIHJlZ3MpKSB7CisJCQkJZ290byBzc19wcm9iZTsKKwkJCX0KKwkJfQorCQlnb3RvIG5vX2twcm9iZTsKKwl9CisKKwlwID0gZ2V0X2twcm9iZShhZGRyKTsKKwlpZiAoIXApIHsKKwkJaWYgKCphZGRyICE9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCS8qCisJCQkgKiBUaGUgYnJlYWtwb2ludCBpbnN0cnVjdGlvbiB3YXMgcmVtb3ZlZCByaWdodAorCQkJICogYWZ0ZXIgd2UgaGl0IGl0LiAgQW5vdGhlciBjcHUgaGFzIHJlbW92ZWQKKwkJCSAqIGVpdGhlciBhIHByb2JlcG9pbnQgb3IgYSBkZWJ1Z2dlciBicmVha3BvaW50CisJCQkgKiBhdCB0aGlzIGFkZHJlc3MuICBJbiBlaXRoZXIgY2FzZSwgbm8gZnVydGhlcgorCQkJICogaGFuZGxpbmcgb2YgdGhpcyBpbnRlcnJ1cHQgaXMgYXBwcm9wcmlhdGUuCisJCQkgKgorCQkJICovCisJCQlyZXQgPSAxOworCQl9CisJCS8qIE5vdCBvbmUgb2Ygb3VyczogbGV0IGtlcm5lbCBoYW5kbGUgaXQgKi8KKwkJZ290byBub19rcHJvYmU7CisJfQorCisJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CisJc2V0X2N1cnJlbnRfa3Byb2JlKHAsIHJlZ3MsIGtjYik7CisJaWYgKHAtPnByZV9oYW5kbGVyICYmIHAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKQorCQkvKiBoYW5kbGVyIGhhcyBhbHJlYWR5IHNldCB0aGluZ3MgdXAsIHNvIHNraXAgc3Mgc2V0dXAgKi8KKwkJcmV0dXJuIDE7CisKK3NzX3Byb2JlOgorCXByZXBhcmVfc2luZ2xlc3RlcChwLCByZWdzKTsKKwlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTOworCXJldHVybiAxOworCitub19rcHJvYmU6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBGdW5jdGlvbiByZXR1cm4gcHJvYmUgdHJhbXBvbGluZToKKyAqCS0gaW5pdF9rcHJvYmVzKCkgZXN0YWJsaXNoZXMgYSBwcm9iZXBvaW50IGhlcmUKKyAqCS0gV2hlbiB0aGUgcHJvYmVkIGZ1bmN0aW9uIHJldHVybnMsIHRoaXMgcHJvYmUKKyAqCQljYXVzZXMgdGhlIGhhbmRsZXJzIHRvIGZpcmUKKyAqLwordm9pZCBfX2twcm9iZXMga3JldHByb2JlX3RyYW1wb2xpbmVfaG9sZGVyKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCIuZ2xvYmFsIGtyZXRwcm9iZV90cmFtcG9saW5lXG4iCisJCSAgICAgImtyZXRwcm9iZV90cmFtcG9saW5lOiBiY3IgMCwwXG4iKTsKK30KKworLyoKKyAqIENhbGxlZCB3aGVuIHRoZSBwcm9iZSBhdCBrcmV0cHJvYmUgdHJhbXBvbGluZSBpcyBoaXQKKyAqLworaW50IF9fa3Byb2JlcyB0cmFtcG9saW5lX3Byb2JlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmkgPSBOVUxMOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG9yaWdfcmV0X2FkZHJlc3MgPSAwOworCXVuc2lnbmVkIGxvbmcgdHJhbXBvbGluZV9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpJmtyZXRwcm9iZV90cmFtcG9saW5lOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmtyZXRwcm9iZV9sb2NrLCBmbGFncyk7CisJaGVhZCA9IGtyZXRwcm9iZV9pbnN0X3RhYmxlX2hlYWQoY3VycmVudCk7CisKKwkvKgorCSAqIEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuCisJICogdGFzayBlaXRoZXIgYmVjYXVzZSBhbiBtdWx0aXBsZSBmdW5jdGlvbnMgaW4gdGhlIGNhbGwgcGF0aAorCSAqIGhhdmUgYSByZXR1cm4gcHJvYmUgaW5zdGFsbGVkIG9uIHRoZW0sIGFuZC9vciBtb3JlIHRoZW4gb25lIHJldHVybgorCSAqIHJldHVybiBwcm9iZSB3YXMgcmVnaXN0ZXJlZCBmb3IgYSB0YXJnZXQgZnVuY3Rpb24uCisJICoKKwkgKiBXZSBjYW4gaGFuZGxlIHRoaXMgYmVjYXVzZToKKwkgKiAgICAgLSBpbnN0YW5jZXMgYXJlIGFsd2F5cyBpbnNlcnRlZCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdAorCSAqICAgICAtIHdoZW4gbXVsdGlwbGUgcmV0dXJuIHByb2JlcyBhcmUgcmVnaXN0ZXJlZCBmb3IgdGhlIHNhbWUKKwkgKgkgZnVuY3Rpb24sIHRoZSBmaXJzdCBpbnN0YW5jZSdzIHJldF9hZGRyIHdpbGwgcG9pbnQgdG8gdGhlCisJICoJIHJlYWwgcmV0dXJuIGFkZHJlc3MsIGFuZCBhbGwgdGhlIHJlc3Qgd2lsbCBwb2ludCB0bworCSAqCSBrcmV0cHJvYmVfdHJhbXBvbGluZQorCSAqLworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmksIG5vZGUsIHRtcCwgaGVhZCwgaGxpc3QpIHsKKwkJaWYgKHJpLT50YXNrICE9IGN1cnJlbnQpCisJCQkvKiBhbm90aGVyIHRhc2sgaXMgc2hhcmluZyBvdXIgaGFzaCBidWNrZXQgKi8KKwkJCWNvbnRpbnVlOworCisJCWlmIChyaS0+cnAgJiYgcmktPnJwLT5oYW5kbGVyKQorCQkJcmktPnJwLT5oYW5kbGVyKHJpLCByZWdzKTsKKworCQlvcmlnX3JldF9hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcmktPnJldF9hZGRyOworCQlyZWN5Y2xlX3JwX2luc3QocmkpOworCisJCWlmIChvcmlnX3JldF9hZGRyZXNzICE9IHRyYW1wb2xpbmVfYWRkcmVzcykgeworCQkJLyoKKwkJCSAqIFRoaXMgaXMgdGhlIHJlYWwgcmV0dXJuIGFkZHJlc3MuIEFueSBvdGhlcgorCQkJICogaW5zdGFuY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHRhc2sgYXJlIGZvcgorCQkJICogb3RoZXIgY2FsbHMgZGVlcGVyIG9uIHRoZSBjYWxsIHN0YWNrCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJfQorCUJVR19PTighb3JpZ19yZXRfYWRkcmVzcyB8fCAob3JpZ19yZXRfYWRkcmVzcyA9PSB0cmFtcG9saW5lX2FkZHJlc3MpKTsKKwlyZWdzLT5wc3cuYWRkciA9IG9yaWdfcmV0X2FkZHJlc3MgfCBQU1dfQUREUl9BTU9ERTsKKworCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgma3JldHByb2JlX2xvY2ssIGZsYWdzKTsKKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisKKwkvKgorCSAqIEJ5IHJldHVybmluZyBhIG5vbi16ZXJvIHZhbHVlLCB3ZSBhcmUgdGVsbGluZworCSAqIGtwcm9iZV9oYW5kbGVyKCkgdGhhdCB3ZSBkb24ndCB3YW50IHRoZSBwb3N0X2hhbmRsZXIKKwkgKiB0byBydW4gKGFuZCBoYXZlIHJlLWVuYWJsZWQgcHJlZW1wdGlvbikKKwkgKi8KKwlyZXR1cm4gMTsKK30KKworLyoKKyAqIENhbGxlZCBhZnRlciBzaW5nbGUtc3RlcHBpbmcuICBwLT5hZGRyIGlzIHRoZSBhZGRyZXNzIG9mIHRoZQorICogaW5zdHJ1Y3Rpb24gd2hvc2UgZmlyc3QgYnl0ZSBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgImJyZWFrcG9pbnQiCisgKiBpbnN0cnVjdGlvbi4gIFRvIGF2b2lkIHRoZSBTTVAgcHJvYmxlbXMgdGhhdCBjYW4gb2NjdXIgd2hlbiB3ZQorICogdGVtcG9yYXJpbHkgcHV0IGJhY2sgdGhlIG9yaWdpbmFsIG9wY29kZSB0byBzaW5nbGUtc3RlcCwgd2UKKyAqIHNpbmdsZS1zdGVwcGVkIGEgY29weSBvZiB0aGUgaW5zdHJ1Y3Rpb24uICBUaGUgYWRkcmVzcyBvZiB0aGlzCisgKiBjb3B5IGlzIHAtPmFpbnNuLmluc24uCisgKi8KK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN1bWVfZXhlY3V0aW9uKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJcmVncy0+cHN3LmFkZHIgJj0gUFNXX0FERFJfSU5TTjsKKworCWlmIChwLT5haW5zbi5maXh1cCAmIEZJWFVQX1BTV19OT1JNQUwpCisJCXJlZ3MtPnBzdy5hZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciArCisJCQkJKCh1bnNpZ25lZCBsb25nKXJlZ3MtPnBzdy5hZGRyIC0KKwkJCQkgKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbik7CisKKwlpZiAocC0+YWluc24uZml4dXAgJiBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOKQorCQlpZiAoKHVuc2lnbmVkIGxvbmcpcmVncy0+cHN3LmFkZHIgLQorCQkgICAgKHVuc2lnbmVkIGxvbmcpcC0+YWluc24uaW5zbiA9PSBwLT5haW5zbi5pbGVuKQorCQkJcmVncy0+cHN3LmFkZHIgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyICsgcC0+YWluc24uaWxlbjsKKworCWlmIChwLT5haW5zbi5maXh1cCAmIEZJWFVQX1JFVFVSTl9SRUdJU1RFUikKKwkJcmVncy0+Z3Byc1twLT5haW5zbi5yZWddID0gKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIgKworCQkJCQkJKHJlZ3MtPmdwcnNbcC0+YWluc24ucmVnXSAtCisJCQkJCQkodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuKSkKKwkJCQkJCXwgUFNXX0FERFJfQU1PREU7CisKKwlyZWdzLT5wc3cuYWRkciB8PSBQU1dfQUREUl9BTU9ERTsKKwkvKiB0dXJuIG9mZiBQRVIgbW9kZSAqLworCXJlZ3MtPnBzdy5tYXNrICY9IH5QU1dfTUFTS19QRVI7CisJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgcGVyIGNvbnRyb2wgcmVncyAqLworCV9fY3RsX2xvYWQoa2NiLT5rcHJvYmVfc2F2ZWRfY3RsLCA5LCAxMSk7CisJcmVncy0+cHN3Lm1hc2sgfD0ga2NiLT5rcHJvYmVfc2F2ZWRfaW1hc2s7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIHBvc3Rfa3Byb2JlX2hhbmRsZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqY3VyID0ga3Byb2JlX3J1bm5pbmcoKTsKKwlzdHJ1Y3Qga3Byb2JlX2N0bGJsayAqa2NiID0gZ2V0X2twcm9iZV9jdGxibGsoKTsKKworCWlmICghY3VyKQorCQlyZXR1cm4gMDsKKworCWlmICgoa2NiLT5rcHJvYmVfc3RhdHVzICE9IEtQUk9CRV9SRUVOVEVSKSAmJiBjdXItPnBvc3RfaGFuZGxlcikgeworCQlrY2ItPmtwcm9iZV9zdGF0dXMgPSBLUFJPQkVfSElUX1NTRE9ORTsKKwkJY3VyLT5wb3N0X2hhbmRsZXIoY3VyLCByZWdzLCAwKTsKKwl9CisKKwlyZXN1bWVfZXhlY3V0aW9uKGN1ciwgcmVncyk7CisKKwkvKlJlc3RvcmUgYmFjayB0aGUgb3JpZ2luYWwgc2F2ZWQga3Byb2JlcyB2YXJpYWJsZXMgYW5kIGNvbnRpbnVlLiAqLworCWlmIChrY2ItPmtwcm9iZV9zdGF0dXMgPT0gS1BST0JFX1JFRU5URVIpIHsKKwkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJZ290byBvdXQ7CisJfQorCXJlc2V0X2N1cnJlbnRfa3Byb2JlKCk7CitvdXQ6CisJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCisJLyoKKwkgKiBpZiBzb21lYm9keSBlbHNlIGlzIHNpbmdsZXN0ZXBwaW5nIGFjcm9zcyBhIHByb2JlIHBvaW50LCBwc3cgbWFzaworCSAqIHdpbGwgaGF2ZSBQRVIgc2V0LCBpbiB3aGljaCBjYXNlLCBjb250aW51ZSB0aGUgcmVtYWluaW5nIHByb2Nlc3NpbmcKKwkgKiBvZiBkb19zaW5nbGVfc3RlcCwgYXMgaWYgdGhpcyBpcyBub3QgYSBwcm9iZSBoaXQuCisJICovCisJaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUEVSKSB7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IF9fa3Byb2JlcyBrcHJvYmVfZmF1bHRfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRyYXBucikKK3sKKwlzdHJ1Y3Qga3Byb2JlICpjdXIgPSBrcHJvYmVfcnVubmluZygpOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCWNvbnN0IHN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkgKmVudHJ5OworCisJc3dpdGNoKGtjYi0+a3Byb2JlX3N0YXR1cykgeworCWNhc2UgS1BST0JFX1NXQVBfSU5TVDoKKwkJLyogV2UgYXJlIGhlcmUgYmVjYXVzZSB0aGUgaW5zdHJ1Y3Rpb24gcmVwbGFjZW1lbnQgZmFpbGVkICovCisJCXJldHVybiAwOworCWNhc2UgS1BST0JFX0hJVF9TUzoKKwljYXNlIEtQUk9CRV9SRUVOVEVSOgorCQkvKgorCQkgKiBXZSBhcmUgaGVyZSBiZWNhdXNlIHRoZSBpbnN0cnVjdGlvbiBiZWluZyBzaW5nbGUKKwkJICogc3RlcHBlZCBjYXVzZWQgYSBwYWdlIGZhdWx0LiBXZSByZXNldCB0aGUgY3VycmVudAorCQkgKiBrcHJvYmUgYW5kIHRoZSBuaXAgcG9pbnRzIGJhY2sgdG8gdGhlIHByb2JlIGFkZHJlc3MKKwkJICogYW5kIGFsbG93IHRoZSBwYWdlIGZhdWx0IGhhbmRsZXIgdG8gY29udGludWUgYXMgYQorCQkgKiBub3JtYWwgcGFnZSBmYXVsdC4KKwkJICovCisJCXJlZ3MtPnBzdy5hZGRyID0gKHVuc2lnbmVkIGxvbmcpY3VyLT5hZGRyIHwgUFNXX0FERFJfQU1PREU7CisJCXJlZ3MtPnBzdy5tYXNrICY9IH5QU1dfTUFTS19QRVI7CisJCXJlZ3MtPnBzdy5tYXNrIHw9IGtjYi0+a3Byb2JlX3NhdmVkX2ltYXNrOworCQlpZiAoa2NiLT5rcHJvYmVfc3RhdHVzID09IEtQUk9CRV9SRUVOVEVSKQorCQkJcmVzdG9yZV9wcmV2aW91c19rcHJvYmUoa2NiKTsKKwkJZWxzZQorCQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOworCQlicmVhazsKKwljYXNlIEtQUk9CRV9ISVRfQUNUSVZFOgorCWNhc2UgS1BST0JFX0hJVF9TU0RPTkU6CisJCS8qCisJCSAqIFdlIGluY3JlbWVudCB0aGUgbm1pc3NlZCBjb3VudCBmb3IgYWNjb3VudGluZywKKwkJICogd2UgY2FuIGFsc28gdXNlIG5wcmUvbnBvc3RmYXVsdCBjb3VudCBmb3IgYWNjb3V0aW5nCisJCSAqIHRoZXNlIHNwZWNpZmljIGZhdWx0IGNhc2VzLgorCQkgKi8KKwkJa3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChjdXIpOworCisJCS8qCisJCSAqIFdlIGNvbWUgaGVyZSBiZWNhdXNlIGluc3RydWN0aW9ucyBpbiB0aGUgcHJlL3Bvc3QKKwkJICogaGFuZGxlciBjYXVzZWQgdGhlIHBhZ2VfZmF1bHQsIHRoaXMgY291bGQgaGFwcGVuCisJCSAqIGlmIGhhbmRsZXIgdHJpZXMgdG8gYWNjZXNzIHVzZXIgc3BhY2UgYnkKKwkJICogY29weV9mcm9tX3VzZXIoKSwgZ2V0X3VzZXIoKSBldGMuIExldCB0aGUKKwkJICogdXNlci1zcGVjaWZpZWQgaGFuZGxlciB0cnkgdG8gZml4IGl0IGZpcnN0LgorCQkgKi8KKwkJaWYgKGN1ci0+ZmF1bHRfaGFuZGxlciAmJiBjdXItPmZhdWx0X2hhbmRsZXIoY3VyLCByZWdzLCB0cmFwbnIpKQorCQkJcmV0dXJuIDE7CisKKwkJLyoKKwkJICogSW4gY2FzZSB0aGUgdXNlci1zcGVjaWZpZWQgZmF1bHQgaGFuZGxlciByZXR1cm5lZAorCQkgKiB6ZXJvLCB0cnkgdG8gZml4IHVwLgorCQkgKi8KKwkJZW50cnkgPSBzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhyZWdzLT5wc3cuYWRkciAmIFBTV19BRERSX0lOU04pOworCQlpZiAoZW50cnkpIHsKKwkJCXJlZ3MtPnBzdy5hZGRyID0gZW50cnktPmZpeHVwIHwgUFNXX0FERFJfQU1PREU7CisJCQlyZXR1cm4gMTsKKwkJfQorCisJCS8qCisJCSAqIGZpeHVwX2V4Y2VwdGlvbigpIGNvdWxkIG5vdCBoYW5kbGUgaXQsCisJCSAqIExldCBkb19wYWdlX2ZhdWx0KCkgZml4IGl0LgorCQkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIHRvIGZvciBoYW5kbGluZyBleGNlcHRpb25zLgorICovCitpbnQgX19rcHJvYmVzIGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkaWVfYXJncyAqYXJncyA9IChzdHJ1Y3QgZGllX2FyZ3MgKilkYXRhOworCWludCByZXQgPSBOT1RJRllfRE9ORTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBESUVfQlBUOgorCQlpZiAoa3Byb2JlX2hhbmRsZXIoYXJncy0+cmVncykpCisJCQlyZXQgPSBOT1RJRllfU1RPUDsKKwkJYnJlYWs7CisJY2FzZSBESUVfU1NURVA6CisJCWlmIChwb3N0X2twcm9iZV9oYW5kbGVyKGFyZ3MtPnJlZ3MpKQorCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCWJyZWFrOworCWNhc2UgRElFX1RSQVA6CisJY2FzZSBESUVfUEFHRV9GQVVMVDoKKwkJLyoga3Byb2JlX3J1bm5pbmcoKSBuZWVkcyBzbXBfcHJvY2Vzc29yX2lkKCkgKi8KKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCWlmIChrcHJvYmVfcnVubmluZygpICYmCisJCSAgICBrcHJvYmVfZmF1bHRfaGFuZGxlcihhcmdzLT5yZWdzLCBhcmdzLT50cmFwbnIpKQorCQkJcmV0ID0gTk9USUZZX1NUT1A7CisJCXByZWVtcHRfZW5hYmxlKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitpbnQgX19rcHJvYmVzIHNldGptcF9wcmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QganByb2JlICpqcCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QganByb2JlLCBrcCk7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCisJbWVtY3B5KCZrY2ItPmpwcm9iZV9zYXZlZF9yZWdzLCByZWdzLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKKworCS8qIHNldHVwIHJldHVybiBhZGRyIHRvIHRoZSBqcHJvYmUgaGFuZGxlciByb3V0aW5lICovCisJcmVncy0+cHN3LmFkZHIgPSAodW5zaWduZWQgbG9uZykoanAtPmVudHJ5KSB8IFBTV19BRERSX0FNT0RFOworCisJLyogcjE0IGlzIHRoZSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyAqLworCWtjYi0+anByb2JlX3NhdmVkX3IxNCA9ICh1bnNpZ25lZCBsb25nKXJlZ3MtPmdwcnNbMTRdOworCS8qIHIxNSBpcyB0aGUgc3RhY2sgcG9pbnRlciAqLworCWtjYi0+anByb2JlX3NhdmVkX3IxNSA9ICh1bnNpZ25lZCBsb25nKXJlZ3MtPmdwcnNbMTVdOworCWFkZHIgPSAodW5zaWduZWQgbG9uZylrY2ItPmpwcm9iZV9zYXZlZF9yMTU7CisKKwltZW1jcHkoa2NiLT5qcHJvYmVzX3N0YWNrLCAoa3Byb2JlX29wY29kZV90ICopIGFkZHIsCisJICAgICAgIE1JTl9TVEFDS19TSVpFKGFkZHIpKTsKKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2twcm9iZXMganByb2JlX3JldHVybih2b2lkKQoreworCWFzbSB2b2xhdGlsZSgiLndvcmQgMHgwMDAyIik7Cit9CisKK3ZvaWQgX19rcHJvYmVzIGpwcm9iZV9yZXR1cm5fZW5kKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJiY3IgMCwwIik7Cit9CisKK2ludCBfX2twcm9iZXMgbG9uZ2ptcF9icmVha19oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBrcHJvYmVfY3RsYmxrICprY2IgPSBnZXRfa3Byb2JlX2N0bGJsaygpOworCXVuc2lnbmVkIGxvbmcgc3RhY2tfYWRkciA9ICh1bnNpZ25lZCBsb25nKShrY2ItPmpwcm9iZV9zYXZlZF9yMTUpOworCisJLyogUHV0IHRoZSByZWdzIGJhY2sgKi8KKwltZW1jcHkocmVncywgJmtjYi0+anByb2JlX3NhdmVkX3JlZ3MsIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOworCS8qIHB1dCB0aGUgc3RhY2sgYmFjayAqLworCW1lbWNweSgoa3Byb2JlX29wY29kZV90ICopIHN0YWNrX2FkZHIsIGtjYi0+anByb2Jlc19zdGFjaywKKwkgICAgICAgTUlOX1NUQUNLX1NJWkUoc3RhY2tfYWRkcikpOworCXByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHN0cnVjdCBrcHJvYmUgdHJhbXBvbGluZV9wID0geworCS5hZGRyID0gKGtwcm9iZV9vcGNvZGVfdCAqKSAmIGtyZXRwcm9iZV90cmFtcG9saW5lLAorCS5wcmVfaGFuZGxlciA9IHRyYW1wb2xpbmVfcHJvYmVfaGFuZGxlcgorfTsKKworaW50IF9faW5pdCBhcmNoX2luaXRfa3Byb2Jlcyh2b2lkKQoreworCXJldHVybiByZWdpc3Rlcl9rcHJvYmUoJnRyYW1wb2xpbmVfcCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKaW5kZXggNjU4ZTVhYy4uNDU2MmNkYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUwpAQCAtOCwxMyArOCwzMCBAQAogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KIAotCQkuZ2xvYmwJZG9fcmVpcGwKLWRvX3JlaXBsOgliYXNyCSVyMTMsMAorCQkuZ2xvYmwJZG9fcmVpcGxfYXNtCitkb19yZWlwbF9hc206CWJhc3IJJXIxMywwCiAuTHBnMDoJCWxwc3cJLkxuZXdwc3ctLkxwZzAoJXIxMykKLS5McGcxOgkJbGN0bAklYzYsJWM2LC5MYWxsLS5McGcwKCVyMTMpCi0gICAgICAgICAgICAgICAgc3RjdGwgICAlYzAsJWMwLC5MY3Rsc2F2ZS0uTHBnMCglcjEzKQotICAgICAgICAgICAgICAgIG5pICAgICAgLkxjdGxzYXZlLS5McGcwKCVyMTMpLDB4ZWYKLSAgICAgICAgICAgICAgICBsY3RsICAgICVjMCwlYzAsLkxjdGxzYXZlLS5McGcwKCVyMTMpCisKKwkJIyBzd2l0Y2ggb2ZmIGxvd2NvcmUgcHJvdGVjdGlvbgorCisuTHBnMToJCXN0Y3RsCSVjMCwlYzAsLkxjdGxzYXZlMS0uTHBnMCglcjEzKQorCQlzdGN0bAklYzAsJWMwLC5MY3Rsc2F2ZTItLkxwZzAoJXIxMykKKwkJbmkJLkxjdGxzYXZlMS0uTHBnMCglcjEzKSwweGVmCisJCWxjdGwJJWMwLCVjMCwuTGN0bHNhdmUxLS5McGcwKCVyMTMpCisKKwkJIyBkbyBzdG9yZSBzdGF0dXMgb2YgYWxsIHJlZ2lzdGVycworCisJCXN0bQklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEKKwkJc3RjdGwJJWMwLCVjMTUsX19MQ19DUkVHU19TQVZFX0FSRUEKKwkJbXZjCV9fTENfQ1JFR1NfU0FWRV9BUkVBKDQpLC5MY3Rsc2F2ZTItLkxwZzAoJXIxMykKKwkJc3RhbQklYTAsJWExNSxfX0xDX0FSRUdTX1NBVkVfQVJFQQorCQlzdHB4CV9fTENfUFJFRklYX1NBVkVfQVJFQQorCQlzdGNrYwkuTGNsa2NtcC0uTHBnMCglcjEzKQorCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQSg4KSwuTGNsa2NtcC0uTHBnMCglcjEzKQorCQlzdHB0CV9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQQorCQlzdAklcjEzLCBfX0xDX1BTV19TQVZFX0FSRUErNAorCisJCWxjdGwJJWM2LCVjNiwuTGFsbC0uTHBnMCglcjEzKQogICAgICAgICAgICAgICAgIGxyICAgICAgJXIxLCVyMgogICAgICAgICAJbXZjICAgICBfX0xDX1BHTV9ORVdfUFNXKDgpLC5McGNuZXctLkxwZzAoJXIxMykKICAgICAgICAgICAgICAgICBzdHNjaCAgIC5Mc2NoaWItLkxwZzAoJXIxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTQ2LDkgKzYzLDExIEBACiAuTGRpc2FiOglzdCAgICAgICVyMTQsLkxkaXNwc3crNC0uTHBnMCglcjEzKQogCQlscHN3CS5MZGlzcHN3LS5McGcwKCVyMTMpCiAgICAgICAgICAgICAgICAgLmFsaWduIAk4CisuTGNsa2NtcDoJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwCiAuTGFsbDoJCS5sb25nCTB4ZmYwMDAwMDAKIC5MbnVsbDoJCS5sb25nICAgMHgwMDAwMDAwMAotLkxjdGxzYXZlOiAgICAgIC5sb25nICAgMHgwMDAwMDAwMAorLkxjdGxzYXZlMToJLmxvbmcJMHgwMDAwMDAwMAorLkxjdGxzYXZlMjoJLmxvbmcJMHgwMDAwMDAwMAogICAgICAgICAgICAgICAgIC5hbGlnbiAJOAogLkxuZXdwc3c6CS5sb25nICAgMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5McGcxCiAuTHBjbmV3OiAgCS5sb25nICAgMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5MZWNzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCmluZGV4IDRkMDkwZDYuLjk1YmQxZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCkBAIC04LDEzICs4LDMwIEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+Ci0JCS5nbG9ibAlkb19yZWlwbAotZG9fcmVpcGw6CWJhc3IJJXIxMywwCi0uTHBnMDoJCWxwc3dlICAgLkxuZXdwc3ctLkxwZzAoJXIxMykKKwkJLmdsb2JsCWRvX3JlaXBsX2FzbQorZG9fcmVpcGxfYXNtOgliYXNyCSVyMTMsMAorCisJCSMgZG8gc3RvcmUgc3RhdHVzIG9mIGFsbCByZWdpc3RlcnMKKworLkxwZzA6CQlzdGcJJXIxLC5McmVnc2F2ZS0uTHBnMCglcjEzKQorCQlsZ2hpCSVyMSwweDEwMDAKKwkJc3RtZwklcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKKwkJbGcJJXIwLC5McmVnc2F2ZS0uTHBnMCglcjEzKQorCQlzdGcJJXIwLF9fTENfR1BSRUdTX1NBVkVfQVJFQS0weDEwMDArOCglcjEpCisJCXN0Y3RnCSVjMCwlYzE1LF9fTENfQ1JFR1NfU0FWRV9BUkVBLTB4MTAwMCglcjEpCisJCXN0YW0JJWEwLCVhMTUsX19MQ19BUkVHU19TQVZFX0FSRUEtMHgxMDAwKCVyMSkKKwkJc3RweAlfX0xDX1BSRUZJWF9TQVZFX0FSRUEtMHgxMDAwKCVyMSkKKwkJc3RmcGMJX19MQ19GUF9DUkVHX1NBVkVfQVJFQS0weDEwMDAoJXIxKQorCQlzdGNrYwkuTGNsa2NtcC0uTHBnMCglcjEzKQorCQltdmMJX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQS0weDEwMDAoOCwlcjEpLC5MY2xrY21wLS5McGcwKCVyMTMpCisJCXN0cHQJX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBLTB4MTAwMCglcjEpCisJCXN0ZwklcjEzLCBfX0xDX1BTV19TQVZFX0FSRUEtMHgxMDAwKzgoJXIxKQorCisJCWxwc3dlCS5MbmV3cHN3LS5McGcwKCVyMTMpCiAuTHBnMToJCWxjdGxnCSVjNiwlYzYsLkxhbGwtLkxwZzAoJXIxMykKLSAgICAgICAgICAgICAgICBzdGN0ZyAgICVjMCwlYzAsLkxjdGxzYXZlLS5McGcwKCVyMTMpCi0gICAgICAgICAgICAgICAgbmkgICAgICAuTGN0bHNhdmUrNC0uTHBnMCglcjEzKSwweGVmCi0gICAgICAgICAgICAgICAgbGN0bGcgICAlYzAsJWMwLC5MY3Rsc2F2ZS0uTHBnMCglcjEzKQorCQlzdGN0ZwklYzAsJWMwLC5McmVnc2F2ZS0uTHBnMCglcjEzKQorCQluaQkuTHJlZ3NhdmUrNC0uTHBnMCglcjEzKSwweGVmCisJCWxjdGxnCSVjMCwlYzAsLkxyZWdzYXZlLS5McGcwKCVyMTMpCiAgICAgICAgICAgICAgICAgbGdyICAgICAlcjEsJXIyCiAgICAgICAgIAltdmMgICAgIF9fTENfUEdNX05FV19QU1coMTYpLC5McGNuZXctLkxwZzAoJXIxMykKICAgICAgICAgICAgICAgICBzdHNjaCAgIC5Mc2NoaWItLkxwZzAoJXIxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTUwLDggKzY3LDkgQEAKIAkJc3QgICAgICVyMTQsLkxkaXNwc3crMTItLkxwZzAoJXIxMykKIAkJbHBzd2UJLkxkaXNwc3ctLkxwZzAoJXIxMykKICAgICAgICAgICAgICAgICAuYWxpZ24gCTgKKy5MY2xrY21wOgkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAKIC5MYWxsOgkJLnF1YWQJMHgwMDAwMDAwMGZmMDAwMDAwCi0uTGN0bHNhdmU6ICAgICAgLnF1YWQgICAweDAwMDAwMDAwMDAwMDAwMDAKKy5McmVnc2F2ZToJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwCiAuTG51bGw6CQkubG9uZyAgIDB4MDAwMDAwMDAwMDAwMDAwMAogICAgICAgICAgICAgICAgIC5hbGlnbiAJMTYKIC8qCkBAIC05Miw1ICsxMTAsMyBAQAogCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKIAkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAJCi0KLQkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGxfZGlhZy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbF9kaWFnLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFmMzM5NTEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbF9kaWFnLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzOSArMCwwIEBACi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKLSAqIExpbnV4IHJlLUlQTCBzdXBwb3J0Ci0gKgotICogKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNQotICoKLSAqIEF1dGhvcihzKTogVm9sa2VyIFNhbWVza2UgKHNhbWVza2VAZGUuaWJtLmNvbSkKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlaXBsX2RpYWdfcmMxOwotc3RhdGljIHVuc2lnbmVkIGludCByZWlwbF9kaWFnX3JjMjsKLQotLyoKLSAqIHJlLUlQTCB0aGUgc3lzdGVtIHVzaW5nIHRoZSBsYXN0IHVzZWQgSVBMIHBhcmFtZXRlcnMKLSAqLwotdm9pZCByZWlwbF9kaWFnKHZvaWQpCi17Ci0gICAgICAgIGFzbSB2b2xhdGlsZSAoCi0JCSIgICBsYSAgICUlcjQsMFxuIgotCQkiICAgbGEgICAlJXI1LDBcbiIKLSAgICAgICAgICAgICAgICAiICAgZGlhZyAlJXI0LCUyLDB4MzA4XG4iCi0gICAgICAgICAgICAgICAgIjA6XG4iCi0JCSIgICBzdCAgICUlcjQsJTBcbiIKLQkJIiAgIHN0ICAgJSVyNSwlMVxuIgotICAgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0jaWZkZWYgQ09ORklHXzY0QklUCi0gICAgICAgICAgICAgICAgIiAgIC5hbGlnbiA4XG4iCi0gICAgICAgICAgICAgICAgIiAgIC5xdWFkIDBiLCAwYlxuIgotI2Vsc2UKLSAgICAgICAgICAgICAgICAiICAgLmFsaWduIDRcbiIKLSAgICAgICAgICAgICAgICAiICAgLmxvbmcgMGIsIDBiXG4iCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAiLnByZXZpb3VzXG4iCi0gICAgICAgICAgICAgICAgOiAiPW0iIChyZWlwbF9kaWFnX3JjMSksICI9bSIgKHJlaXBsX2RpYWdfcmMyKQotCQk6ICJkIiAoMykgOiAiY2MiLCAiNCIsICI1IiApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zMzkwX2tzeW1zLmMgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwppbmRleCBjNzNhNDU0Li45ZjE5ZTgzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3MzOTBfa3N5bXMuYwpAQCAtMjUsMTIgKzI1LDYgQEAKIEVYUE9SVF9TWU1CT0woX25pX2JpdG1hcCk7CiBFWFBPUlRfU1lNQk9MKF96Yl9maW5kbWFwKTsKIEVYUE9SVF9TWU1CT0woX3NiX2ZpbmRtYXApOwotRVhQT1JUX1NZTUJPTChfX2NvcHlfZnJvbV91c2VyX2FzbSk7Ci1FWFBPUlRfU1lNQk9MKF9fY29weV90b191c2VyX2FzbSk7Ci1FWFBPUlRfU1lNQk9MKF9fY29weV9pbl91c2VyX2FzbSk7Ci1FWFBPUlRfU1lNQk9MKF9fY2xlYXJfdXNlcl9hc20pOwotRVhQT1JUX1NZTUJPTChfX3N0cm5jcHlfZnJvbV91c2VyX2FzbSk7Ci1FWFBPUlRfU1lNQk9MKF9fc3Rybmxlbl91c2VyX2FzbSk7CiBFWFBPUlRfU1lNQk9MKGRpYWcxMCk7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggYzkwMmYwNS4uZTNkOTMyNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wZm4uaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgpAQCAtNTAsNiArNTEsMTIgQEAKICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KIAogLyoKKyAqIFVzZXIgY29weSBvcGVyYXRpb25zLgorICovCitzdHJ1Y3QgdWFjY2Vzc19vcHMgdWFjY2VzczsKK0VYUE9SVF9TWU1CT0xfR1BMKHVhY2Nlc3MpOworCisvKgogICogTWFjaGluZSBzZXR1cC4uCiAgKi8KIHVuc2lnbmVkIGludCBjb25zb2xlX21vZGUgPSAwOwpAQCAtMjg0LDE2ICsyOTEsOSBAQAogLyoKICAqIFJlYm9vdCwgaGFsdCBhbmQgcG93ZXJfb2ZmIHJvdXRpbmVzIGZvciBub24gU01QLgogICovCi1leHRlcm4gdm9pZCByZWlwbCh1bnNpZ25lZCBsb25nIGRldm5vKTsKLWV4dGVybiB2b2lkIHJlaXBsX2RpYWcodm9pZCk7CiBzdGF0aWMgdm9pZCBkb19tYWNoaW5lX3Jlc3RhcnRfbm9uc21wKGNoYXIgKiBfX3VudXNlZCkKIHsKLQlyZWlwbF9kaWFnKCk7Ci0KLQlpZiAoTUFDSElORV9JU19WTSkKLQkJY3BjbWQgKCJJUEwiLCBOVUxMLCAwLCBOVUxMKTsKLQllbHNlCi0JCXJlaXBsICgweDEwMDAwIHwgUzM5MF9sb3djb3JlLmlwbF9kZXZpY2UpOworCWRvX3JlaXBsKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRvX21hY2hpbmVfaGFsdF9ub25zbXAodm9pZCkKQEAgLTUwMSwxMyArNTAxLDQ3IEBACiAJICogcGFydGlhbGx5IHVzZWQgcGFnZXMgYXJlIG5vdCB1c2FibGUgLSB0aHVzCiAJICogd2UgYXJlIHJvdW5kaW5nIHVwd2FyZHM6CiAJICovCi0Jc3RhcnRfcGZuID0gKF9fcGEoJl9lbmQpICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gbWF4X3BmbiA9IG1lbW9yeV9lbmQgPj4gUEFHRV9TSElGVDsKKwlzdGFydF9wZm4gPSBQRk5fVVAoX19wYSgmX2VuZCkpOworCWVuZF9wZm4gPSBtYXhfcGZuID0gUEZOX0RPV04obWVtb3J5X2VuZCk7CiAKIAkvKiBJbml0aWFsaXplIHN0b3JhZ2Uga2V5IGZvciBrZXJuZWwgcGFnZXMgKi8KIAlmb3IgKGluaXRfcGZuID0gMCA7IGluaXRfcGZuIDwgc3RhcnRfcGZuOyBpbml0X3BmbisrKQogCQlwYWdlX3NldF9zdG9yYWdlX2tleShpbml0X3BmbiA8PCBQQUdFX1NISUZULCBQQUdFX0RFRkFVTFRfS0VZKTsKIAorI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCS8qCisJICogTW92ZSB0aGUgaW5pdHJkIGluIGNhc2UgdGhlIGJpdG1hcCBvZiB0aGUgYm9vdG1lbSBhbGxvY2F0ZXIKKwkgKiB3b3VsZCBvdmVyd3JpdGUgaXQuCisJICovCisKKwlpZiAoSU5JVFJEX1NUQVJUICYmIElOSVRSRF9TSVpFKSB7CisJCXVuc2lnbmVkIGxvbmcgYm1hcF9zaXplOworCQl1bnNpZ25lZCBsb25nIHN0YXJ0OworCisJCWJtYXBfc2l6ZSA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhlbmRfcGZuIC0gc3RhcnRfcGZuICsgMSk7CisJCWJtYXBfc2l6ZSA9IFBGTl9QSFlTKGJtYXBfc2l6ZSk7CisKKwkJaWYgKFBGTl9QSFlTKHN0YXJ0X3BmbikgKyBibWFwX3NpemUgPiBJTklUUkRfU1RBUlQpIHsKKwkJCXN0YXJ0ID0gUEZOX1BIWVMoc3RhcnRfcGZuKSArIGJtYXBfc2l6ZSArIFBBR0VfU0laRTsKKworCQkJaWYgKHN0YXJ0ICsgSU5JVFJEX1NJWkUgPiBtZW1vcnlfZW5kKSB7CisJCQkJcHJpbnRrKCJpbml0cmQgZXh0ZW5kcyBiZXlvbmQgZW5kIG9mIG1lbW9yeSAiCisJCQkJICAgICAgICIoMHglMDhseCA+IDB4JTA4bHgpXG4iCisJCQkJICAgICAgICJkaXNhYmxpbmcgaW5pdHJkXG4iLAorCQkJCSAgICAgICBzdGFydCArIElOSVRSRF9TSVpFLCBtZW1vcnlfZW5kKTsKKwkJCQlJTklUUkRfU1RBUlQgPSBJTklUUkRfU0laRSA9IDA7CisJCQl9IGVsc2UgeworCQkJCXByaW50aygiTW92aW5nIGluaXRyZCAoMHglMDhseCAtPiAweCUwOGx4LCAiCisJCQkJICAgICAgICJzaXplOiAlbGQpXG4iLAorCQkJCSAgICAgICBJTklUUkRfU1RBUlQsIHN0YXJ0LCBJTklUUkRfU0laRSk7CisJCQkJbWVtbW92ZSgodm9pZCAqKSBzdGFydCwgKHZvaWQgKikgSU5JVFJEX1NUQVJULAorCQkJCQlJTklUUkRfU0laRSk7CisJCQkJSU5JVFJEX1NUQVJUID0gc3RhcnQ7CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKwogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgYm9vdC10aW1lIGFsbG9jYXRvciAod2l0aCBsb3cgbWVtb3J5IG9ubHkpOgogCSAqLwpAQCAtNTU5LDcgKzU5Myw3IEBACiAJcmVzZXJ2ZV9ib290bWVtKHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBib290bWFwX3NpemUpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JaWYgKElOSVRSRF9TVEFSVCkgeworCWlmIChJTklUUkRfU1RBUlQgJiYgSU5JVFJEX1NJWkUpIHsKIAkJaWYgKElOSVRSRF9TVEFSVCArIElOSVRSRF9TSVpFIDw9IG1lbW9yeV9lbmQpIHsKIAkJCXJlc2VydmVfYm9vdG1lbShJTklUUkRfU1RBUlQsIElOSVRSRF9TSVpFKTsKIAkJCWluaXRyZF9zdGFydCA9IElOSVRSRF9TVEFSVDsKQEAgLTYxMyw2ICs2NDcsMTEgQEAKIAogCW1lbW9yeV9lbmQgPSBtZW1vcnlfc2l6ZTsKIAorCWlmIChNQUNISU5FX0hBU19NVkNPUykKKwkJbWVtY3B5KCZ1YWNjZXNzLCAmdWFjY2Vzc19tdmNvcywgc2l6ZW9mKHVhY2Nlc3MpKTsKKwllbHNlCisJCW1lbWNweSgmdWFjY2VzcywgJnVhY2Nlc3Nfc3RkLCBzaXplb2YodWFjY2VzcykpOworCiAJcGFyc2VfZWFybHlfcGFyYW0oKTsKIAogI2lmbmRlZiBDT05GSUdfNjRCSVQKQEAgLTcyMCwyMTQgKzc1OSwzIEBACiAJLnNob3cJPSBzaG93X2NwdWluZm8sCiB9OwogCi0jZGVmaW5lIERFRklORV9JUExfQVRUUihfbmFtZSwgX2Zvcm1hdCwgX3ZhbHVlKQkJCVwKLXN0YXRpYyBzc2l6ZV90IGlwbF8jI19uYW1lIyNfc2hvdyhzdHJ1Y3Qgc3Vic3lzdGVtICpzdWJzeXMsCVwKLQkJY2hhciAqcGFnZSkJCQkJCVwKLXsJCQkJCQkJCVwKLQlyZXR1cm4gc3ByaW50ZihwYWdlLCBfZm9ybWF0LCBfdmFsdWUpOwkJCVwKLX0JCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3Qgc3Vic3lzX2F0dHJpYnV0ZSBpcGxfIyNfbmFtZSMjX2F0dHIgPQkJXAotCV9fQVRUUihfbmFtZSwgU19JUlVHTywgaXBsXyMjX25hbWUjI19zaG93LCBOVUxMKTsKLQotREVGSU5FX0lQTF9BVFRSKHd3cG4sICIweCUwMTZsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCUlQTF9QQVJNQkxPQ0tfU1RBUlQtPmZjcC53d3BuKTsKLURFRklORV9JUExfQVRUUihsdW4sICIweCUwMTZsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCUlQTF9QQVJNQkxPQ0tfU1RBUlQtPmZjcC5sdW4pOwotREVGSU5FX0lQTF9BVFRSKGJvb3Rwcm9nLCAiJWxsZFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJSVBMX1BBUk1CTE9DS19TVEFSVC0+ZmNwLmJvb3Rwcm9nKTsKLURFRklORV9JUExfQVRUUihicl9sYmEsICIlbGxkXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKQotCQlJUExfUEFSTUJMT0NLX1NUQVJULT5mY3AuYnJfbGJhKTsKLQotZW51bSBpcGxfdHlwZV90eXBlIHsKLQlpcGxfdHlwZV91bmtub3duLAotCWlwbF90eXBlX2NjdywKLQlpcGxfdHlwZV9mY3AsCi19OwotCi1zdGF0aWMgZW51bSBpcGxfdHlwZV90eXBlCi1nZXRfaXBsX3R5cGUodm9pZCkKLXsKLQlzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayAqaXBsID0gSVBMX1BBUk1CTE9DS19TVEFSVDsKLQotCWlmICghSVBMX0RFVk5PX1ZBTElEKQotCQlyZXR1cm4gaXBsX3R5cGVfdW5rbm93bjsKLQlpZiAoIUlQTF9QQVJNQkxPQ0tfVkFMSUQpCi0JCXJldHVybiBpcGxfdHlwZV9jY3c7Ci0JaWYgKGlwbC0+aGRyLmhlYWRlci52ZXJzaW9uID4gSVBMX01BWF9TVVBQT1JURURfVkVSU0lPTikKLQkJcmV0dXJuIGlwbF90eXBlX3Vua25vd247Ci0JaWYgKGlwbC0+ZmNwLnBidCAhPSBJUExfVFlQRV9GQ1ApCi0JCXJldHVybiBpcGxfdHlwZV91bmtub3duOwotCXJldHVybiBpcGxfdHlwZV9mY3A7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90Ci1pcGxfdHlwZV9zaG93KHN0cnVjdCBzdWJzeXN0ZW0gKnN1YnN5cywgY2hhciAqcGFnZSkKLXsKLQlzd2l0Y2ggKGdldF9pcGxfdHlwZSgpKSB7Ci0JY2FzZSBpcGxfdHlwZV9jY3c6Ci0JCXJldHVybiBzcHJpbnRmKHBhZ2UsICJjY3dcbiIpOwotCWNhc2UgaXBsX3R5cGVfZmNwOgotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiZmNwXG4iKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAidW5rbm93blxuIik7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHN1YnN5c19hdHRyaWJ1dGUgaXBsX3R5cGVfYXR0ciA9IF9fQVRUUl9STyhpcGxfdHlwZSk7Ci0KLXN0YXRpYyBzc2l6ZV90Ci1pcGxfZGV2aWNlX3Nob3coc3RydWN0IHN1YnN5c3RlbSAqc3Vic3lzLCBjaGFyICpwYWdlKQotewotCXN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICppcGwgPSBJUExfUEFSTUJMT0NLX1NUQVJUOwotCi0Jc3dpdGNoIChnZXRfaXBsX3R5cGUoKSkgewotCWNhc2UgaXBsX3R5cGVfY2N3OgotCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAiMC4wLiUwNHhcbiIsIGlwbF9kZXZubyk7Ci0JY2FzZSBpcGxfdHlwZV9mY3A6Ci0JCXJldHVybiBzcHJpbnRmKHBhZ2UsICIwLjAuJTA0eFxuIiwgaXBsLT5mY3AuZGV2bm8pOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBzdWJzeXNfYXR0cmlidXRlIGlwbF9kZXZpY2VfYXR0ciA9Ci0JX19BVFRSKGRldmljZSwgU19JUlVHTywgaXBsX2RldmljZV9zaG93LCBOVUxMKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlwbF9mY3BfYXR0cnNbXSA9IHsKLQkmaXBsX3R5cGVfYXR0ci5hdHRyLAotCSZpcGxfZGV2aWNlX2F0dHIuYXR0ciwKLQkmaXBsX3d3cG5fYXR0ci5hdHRyLAotCSZpcGxfbHVuX2F0dHIuYXR0ciwKLQkmaXBsX2Jvb3Rwcm9nX2F0dHIuYXR0ciwKLQkmaXBsX2JyX2xiYV9hdHRyLmF0dHIsCi0JTlVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGlwbF9mY3BfYXR0cl9ncm91cCA9IHsKLQkuYXR0cnMgPSBpcGxfZmNwX2F0dHJzLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmlwbF9jY3dfYXR0cnNbXSA9IHsKLQkmaXBsX3R5cGVfYXR0ci5hdHRyLAotCSZpcGxfZGV2aWNlX2F0dHIuYXR0ciwKLQlOVUxMLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXBsX2Njd19hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGlwbF9jY3dfYXR0cnMsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXBsX3Vua25vd25fYXR0cnNbXSA9IHsKLQkmaXBsX3R5cGVfYXR0ci5hdHRyLAotCU5VTEwsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpcGxfdW5rbm93bl9hdHRyX2dyb3VwID0gewotCS5hdHRycyA9IGlwbF91bmtub3duX2F0dHJzLAotfTsKLQotc3RhdGljIHNzaXplX3QKLWlwbF9wYXJhbWV0ZXJfcmVhZChzdHJ1Y3Qga29iamVjdCAqa29iaiwgY2hhciAqYnVmLCBsb2ZmX3Qgb2ZmLCBzaXplX3QgY291bnQpCi17Ci0JdW5zaWduZWQgaW50IHNpemUgPSBJUExfUEFSTUJMT0NLX1NJWkU7Ci0KLQlpZiAob2ZmID4gc2l6ZSkKLQkJcmV0dXJuIDA7Ci0JaWYgKG9mZiArIGNvdW50ID4gc2l6ZSkKLQkJY291bnQgPSBzaXplIC0gb2ZmOwotCi0JbWVtY3B5KGJ1ZiwgKHZvaWQgKikgSVBMX1BBUk1CTE9DS19TVEFSVCArIG9mZiwgY291bnQpOwotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHN0cnVjdCBiaW5fYXR0cmlidXRlIGlwbF9wYXJhbWV0ZXJfYXR0ciA9IHsKLQkuYXR0ciA9IHsKLQkJLm5hbWUgPSAiYmluYXJ5X3BhcmFtZXRlciIsCi0JCS5tb2RlID0gU19JUlVHTywKLQkJLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLQkuc2l6ZSA9IFBBR0VfU0laRSwKLQkucmVhZCA9ICZpcGxfcGFyYW1ldGVyX3JlYWQsCi19OwotCi1zdGF0aWMgc3NpemVfdAotaXBsX3NjcF9kYXRhX3JlYWQoc3RydWN0IGtvYmplY3QgKmtvYmosIGNoYXIgKmJ1ZiwgbG9mZl90IG9mZiwgc2l6ZV90IGNvdW50KQotewotCXVuc2lnbmVkIGludCBzaXplID0gIElQTF9QQVJNQkxPQ0tfU1RBUlQtPmZjcC5zY3BfZGF0YV9sZW47Ci0Jdm9pZCAqc2NwX2RhdGEgPSAmSVBMX1BBUk1CTE9DS19TVEFSVC0+ZmNwLnNjcF9kYXRhOwotCi0JaWYgKG9mZiA+IHNpemUpCi0JCXJldHVybiAwOwotCWlmIChvZmYgKyBjb3VudCA+IHNpemUpCi0JCWNvdW50ID0gc2l6ZSAtIG9mZjsKLQotCW1lbWNweShidWYsIHNjcF9kYXRhICsgb2ZmLCBjb3VudCk7Ci0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgaXBsX3NjcF9kYXRhX2F0dHIgPSB7Ci0JLmF0dHIgPSB7Ci0JCS5uYW1lID0gInNjcF9kYXRhIiwKLQkJLm1vZGUgPSBTX0lSVUdPLAotCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCS5zaXplID0gUEFHRV9TSVpFLAotCS5yZWFkID0gJmlwbF9zY3BfZGF0YV9yZWFkLAotfTsKLQotc3RhdGljIGRlY2xfc3Vic3lzKGlwbCwgTlVMTCwgTlVMTCk7Ci0KLXN0YXRpYyBpbnQgaXBsX3JlZ2lzdGVyX2ZjcF9maWxlcyh2b2lkKQotewotCWludCByYzsKLQotCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpcGxfc3Vic3lzLmtzZXQua29iaiwKLQkJCQkmaXBsX2ZjcF9hdHRyX2dyb3VwKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCXJjID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpcGxfc3Vic3lzLmtzZXQua29iaiwKLQkJCQkgICAmaXBsX3BhcmFtZXRlcl9hdHRyKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0X2lwbF9wYXJtOwotCXJjID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZpcGxfc3Vic3lzLmtzZXQua29iaiwKLQkJCQkgICAmaXBsX3NjcF9kYXRhX2F0dHIpOwotCWlmICghcmMpCi0JCWdvdG8gb3V0OwotCi0Jc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZpcGxfc3Vic3lzLmtzZXQua29iaiwgJmlwbF9wYXJhbWV0ZXJfYXR0cik7Ci0KLW91dF9pcGxfcGFybToKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmlwbF9zdWJzeXMua3NldC5rb2JqLCAmaXBsX2ZjcF9hdHRyX2dyb3VwKTsKLW91dDoKLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1pcGxfZGV2aWNlX3N5c2ZzX3JlZ2lzdGVyKHZvaWQpIHsKLQlpbnQgcmM7Ci0KLQlyYyA9IGZpcm13YXJlX3JlZ2lzdGVyKCZpcGxfc3Vic3lzKTsKLQlpZiAocmMpCi0JCWdvdG8gb3V0OwotCi0Jc3dpdGNoIChnZXRfaXBsX3R5cGUoKSkgewotCWNhc2UgaXBsX3R5cGVfY2N3OgotCQlyYyA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaXBsX3N1YnN5cy5rc2V0LmtvYmosCi0JCQkJCSZpcGxfY2N3X2F0dHJfZ3JvdXApOwotCQlicmVhazsKLQljYXNlIGlwbF90eXBlX2ZjcDoKLQkJcmMgPSBpcGxfcmVnaXN0ZXJfZmNwX2ZpbGVzKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJjID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpcGxfc3Vic3lzLmtzZXQua29iaiwKLQkJCQkJJmlwbF91bmtub3duX2F0dHJfZ3JvdXApOwotCQlicmVhazsKLQl9Ci0KLQlpZiAocmMpCi0JCWZpcm13YXJlX3VucmVnaXN0ZXIoJmlwbF9zdWJzeXMpOwotb3V0OgotCXJldHVybiByYzsKLX0KLQotX19pbml0Y2FsbChpcGxfZGV2aWNlX3N5c2ZzX3JlZ2lzdGVyKTsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCmluZGV4IGE4ODdiNjg2Li42NDIwOTVlIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2lnbmFsLmMKQEAgLTExNCwyOSArMTE0LDI2IEBACiBzdGF0aWMgaW50IHNhdmVfc2lncmVncyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgX3NpZ3JlZ3MgX191c2VyICpzcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIG9sZF9tYXNrID0gcmVncy0+cHN3Lm1hc2s7Ci0JaW50IGVycjsKLSAgCisJX3NpZ3JlZ3MgdXNlcl9zcmVnczsKKwogCXNhdmVfYWNjZXNzX3JlZ3MoY3VycmVudC0+dGhyZWFkLmFjcnMpOwogCiAJLyogQ29weSBhICdjbGVhbicgUFNXIG1hc2sgdG8gdGhlIHVzZXIgdG8gYXZvaWQgbGVha2luZwogCSAgIGluZm9ybWF0aW9uIGFib3V0IHdoZXRoZXIgUEVSIGlzIGN1cnJlbnRseSBvbi4gICovCiAJcmVncy0+cHN3Lm1hc2sgPSBQU1dfTUFTS19NRVJHRShQU1dfVVNFUl9CSVRTLCByZWdzLT5wc3cubWFzayk7Ci0JZXJyID0gX19jb3B5X3RvX3VzZXIoJnNyZWdzLT5yZWdzLnBzdywgJnJlZ3MtPnBzdywKLQkJCSAgICAgc2l6ZW9mKHNyZWdzLT5yZWdzLnBzdykrc2l6ZW9mKHNyZWdzLT5yZWdzLmdwcnMpKTsKKwltZW1jcHkoJnVzZXJfc3JlZ3MucmVncy5wc3csICZyZWdzLT5wc3csIHNpemVvZihzcmVncy0+cmVncy5wc3cpICsKKwkgICAgICAgc2l6ZW9mKHNyZWdzLT5yZWdzLmdwcnMpKTsKIAlyZWdzLT5wc3cubWFzayA9IG9sZF9tYXNrOwotCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuIGVycjsKLQllcnIgPSBfX2NvcHlfdG9fdXNlcigmc3JlZ3MtPnJlZ3MuYWNycywgY3VycmVudC0+dGhyZWFkLmFjcnMsCi0JCQkgICAgIHNpemVvZihzcmVncy0+cmVncy5hY3JzKSk7Ci0JaWYgKGVyciAhPSAwKQotCQlyZXR1cm4gZXJyOworCW1lbWNweSgmdXNlcl9zcmVncy5yZWdzLmFjcnMsIGN1cnJlbnQtPnRocmVhZC5hY3JzLAorCSAgICAgICBzaXplb2Yoc3JlZ3MtPnJlZ3MuYWNycykpOwogCS8qIAogCSAqIFdlIGhhdmUgdG8gc3RvcmUgdGhlIGZwIHJlZ2lzdGVycyB0byBjdXJyZW50LT50aHJlYWQuZnBfcmVncwogCSAqIHRvIG1lcmdlIHRoZW0gd2l0aCB0aGUgZW11bGF0ZWQgcmVnaXN0ZXJzLgogCSAqLwogCXNhdmVfZnBfcmVncygmY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MpOwotCXJldHVybiBfX2NvcHlfdG9fdXNlcigmc3JlZ3MtPmZwcmVncywgJmN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLAotCQkJICAgICAgc2l6ZW9mKHMzOTBfZnBfcmVncykpOworCW1lbWNweSgmdXNlcl9zcmVncy5mcHJlZ3MsICZjdXJyZW50LT50aHJlYWQuZnBfcmVncywKKwkgICAgICAgc2l6ZW9mKHMzOTBfZnBfcmVncykpOworCXJldHVybiBfX2NvcHlfdG9fdXNlcihzcmVncywgJnVzZXJfc3JlZ3MsIHNpemVvZihfc2lncmVncykpOwogfQogCiAvKiBSZXR1cm5zIHBvc2l0aXZlIG51bWJlciBvbiBlcnJvciAqLwpAQCAtMTQ0LDI3ICsxNDEsMjUgQEAKIHsKIAl1bnNpZ25lZCBsb25nIG9sZF9tYXNrID0gcmVncy0+cHN3Lm1hc2s7CiAJaW50IGVycjsKKwlfc2lncmVncyB1c2VyX3NyZWdzOwogCiAJLyogQWx3eXMgbWFrZSBhbnkgcGVuZGluZyByZXN0YXJ0ZWQgc3lzdGVtIGNhbGwgcmV0dXJuIC1FSU5UUiAqLwogCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jay5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKIAotCWVyciA9IF9fY29weV9mcm9tX3VzZXIoJnJlZ3MtPnBzdywgJnNyZWdzLT5yZWdzLnBzdywKLQkJCSAgICAgICBzaXplb2Yoc3JlZ3MtPnJlZ3MucHN3KStzaXplb2Yoc3JlZ3MtPnJlZ3MuZ3BycykpOworCWVyciA9IF9fY29weV9mcm9tX3VzZXIoJnVzZXJfc3JlZ3MsIHNyZWdzLCBzaXplb2YoX3NpZ3JlZ3MpKTsKIAlyZWdzLT5wc3cubWFzayA9IFBTV19NQVNLX01FUkdFKG9sZF9tYXNrLCByZWdzLT5wc3cubWFzayk7CiAJcmVncy0+cHN3LmFkZHIgfD0gUFNXX0FERFJfQU1PREU7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKLQllcnIgPSBfX2NvcHlfZnJvbV91c2VyKCZjdXJyZW50LT50aHJlYWQuYWNycywgJnNyZWdzLT5yZWdzLmFjcnMsCi0JCQkgICAgICAgc2l6ZW9mKHNyZWdzLT5yZWdzLmFjcnMpKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCW1lbWNweSgmcmVncy0+cHN3LCAmdXNlcl9zcmVncy5yZWdzLnBzdywgc2l6ZW9mKHNyZWdzLT5yZWdzLnBzdykgKworCSAgICAgICBzaXplb2Yoc3JlZ3MtPnJlZ3MuZ3BycykpOworCW1lbWNweSgmY3VycmVudC0+dGhyZWFkLmFjcnMsICZ1c2VyX3NyZWdzLnJlZ3MuYWNycywKKwkgICAgICAgc2l6ZW9mKHNyZWdzLT5yZWdzLmFjcnMpKTsKIAlyZXN0b3JlX2FjY2Vzc19yZWdzKGN1cnJlbnQtPnRocmVhZC5hY3JzKTsKIAotCWVyciA9IF9fY29weV9mcm9tX3VzZXIoJmN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLCAmc3JlZ3MtPmZwcmVncywKLQkJCSAgICAgICBzaXplb2YoczM5MF9mcF9yZWdzKSk7CisJbWVtY3B5KCZjdXJyZW50LT50aHJlYWQuZnBfcmVncywgJnVzZXJfc3JlZ3MuZnByZWdzLAorCSAgICAgICBzaXplb2YoczM5MF9mcF9yZWdzKSk7CiAJY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MuZnBjICY9IEZQQ19WQUxJRF9NQVNLOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiAKIAlyZXN0b3JlX2ZwX3JlZ3MoJmN1cnJlbnQtPnRocmVhZC5mcF9yZWdzKTsKIAlyZWdzLT50cmFwID0gLTE7CS8qIGRpc2FibGUgc3lzY2FsbCBjaGVja3MgKi8KQEAgLTQ1Nyw2ICs0NTIsNyBAQAogCQljYXNlIC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0s6CiAJCQlyZWdzLT5ncHJzWzJdID0gLUVJTlRSOwogCQl9CisJCXJlZ3MtPnRyYXAgPSAtMTsJLyogRG9uJ3QgZGVhbCB3aXRoIHRoaXMgYWdhaW4uICovCiAJfQogCiAJLyogR2V0IHNpZ25hbCB0byBkZWxpdmVyLiAgV2hlbiBydW5uaW5nIHVuZGVyIHB0cmFjZSwgYXQgdGhpcyBwb2ludApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggOGUwMzIxOS4uYjJlNmY0YyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC01OSw5ICs1OSw2IEBACiBleHRlcm4gY2hhciB2bWhhbHRfY21kW107CiBleHRlcm4gY2hhciB2bXBvZmZfY21kW107CiAKLWV4dGVybiB2b2lkIHJlaXBsKHVuc2lnbmVkIGxvbmcgZGV2bm8pOwotZXh0ZXJuIHZvaWQgcmVpcGxfZGlhZyh2b2lkKTsKLQogc3RhdGljIHZvaWQgc21wX2V4dF9iaXRjYWxsKGludCwgZWNfYml0X3NpZyk7CiBzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGxfb3RoZXJzKGVjX2JpdF9zaWcpOwogCkBAIC0yNzksMTIgKzI3Niw3IEBACiAJICogaW50ZXJydXB0ZWQgYnkgYW4gZXh0ZXJuYWwgaW50ZXJydXB0IGFuZCBzMzkwaXJxCiAJICogbG9ja3MgYXJlIGFsd2F5cyBoZWxkIGRpc2FibGVkKS4KIAkgKi8KLQlyZWlwbF9kaWFnKCk7Ci0KLQlpZiAoTUFDSElORV9JU19WTSkKLQkJY3BjbWQgKCJJUEwiLCBOVUxMLCAwLCBOVUxMKTsKLQllbHNlCi0JCXJlaXBsICgweDEwMDAwIHwgUzM5MF9sb3djb3JlLmlwbF9kZXZpY2UpOworCWRvX3JlaXBsKCk7CiB9CiAKIHZvaWQgbWFjaGluZV9yZXN0YXJ0X3NtcChjaGFyICogX191bnVzZWQpIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCmluZGV4IGJkZTFkMWQuLmM0OTgyYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rYWxsc3ltcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMzksNiArNDAsNyBAQAogI2luY2x1ZGUgPGFzbS9zMzkwX2V4dC5oPgogI2luY2x1ZGUgPGFzbS9sb3djb3JlLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVnLmg+CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogCiAvKiBDYWxsZWQgZnJvbSBlbnRyeS5TIG9ubHkgKi8KIGV4dGVybiB2b2lkIGhhbmRsZV9wZXJfZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTc0LDYgKzc2LDIwIEBACiBzdGF0aWMgaW50IGtzdGFja19kZXB0aF90b19wcmludCA9IDIwOwogI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwogCitBVE9NSUNfTk9USUZJRVJfSEVBRChzMzkwZGllX2NoYWluKTsKKworaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJnMzOTBkaWVfY2hhaW4sIG5iKTsKK30KK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKKworaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZzMzkwZGllX2NoYWluLCBuYik7Cit9CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKTsKKwogLyoKICAqIEZvciBzaG93X3RyYWNlIHdlIGhhdmUgdHJlZSBkaWZmZXJlbnQgc3RhY2sgdG8gY29uc2lkZXI6CiAgKiAgIC0gdGhlIHBhbmljIHN0YWNrIHdoaWNoIGlzIHVzZWQgaWYgdGhlIGtlcm5lbCBzdGFjayBoYXMgb3ZlcmZsb3duCkBAIC0zMDUsOCArMzIxLDkgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBpbmxpbmUgZG9fdHJhcChsb25nIGludGVycnVwdGlvbl9jb2RlLCBpbnQgc2lnbnIsIGNoYXIgKnN0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzaWdpbmZvX3QgKmluZm8pCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgaW5saW5lIGRvX3RyYXAobG9uZyBpbnRlcnJ1cHRpb25fY29kZSwgaW50IHNpZ25yLAorCQkJCQljaGFyICpzdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQlzaWdpbmZvX3QgKmluZm8pCiB7CiAJLyoKIAkgKiBXZSBnb3QgYWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBsb3djb3JlIGFuZCBjYW4KQEAgLTMxNSw2ICszMzIsMTAgQEAKICAgICAgICAgaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKQogCQlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKKwlpZiAobm90aWZ5X2RpZShESUVfVFJBUCwgc3RyLCByZWdzLCBpbnRlcnJ1cHRpb25fY29kZSwKKwkJCQlpbnRlcnJ1cHRpb25fY29kZSwgc2lnbnIpID09IE5PVElGWV9TVE9QKQorCQlyZXR1cm47CisKICAgICAgICAgaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKSB7CiAgICAgICAgICAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwogCkBAIC0zMzYsOCArMzU3LDEyIEBACiAJcmV0dXJuICh2b2lkIF9fdXNlciAqKSgocmVncy0+cHN3LmFkZHItUzM5MF9sb3djb3JlLnBnbV9pbGMpICYgUFNXX0FERFJfSU5TTik7CiB9CiAKLXZvaWQgZG9fc2luZ2xlX3N0ZXAoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIF9fa3Byb2JlcyBkb19zaW5nbGVfc3RlcChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKKwlpZiAobm90aWZ5X2RpZShESUVfU1NURVAsICJzc3RlcCIsIHJlZ3MsIDAsIDAsCisJCQkJCVNJR1RSQVApID09IE5PVElGWV9TVE9QKXsKKwkJcmV0dXJuOworCX0KIAlpZiAoKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1BUUkFDRUQpICE9IDApCiAJCWZvcmNlX3NpZyhTSUdUUkFQLCBjdXJyZW50KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCBmZjVmN2JiLi5hZjllNjlhMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdm1saW51eC5sZHMuUwpAQCAtMjQsNiArMjQsNyBAQAogCSooLnRleHQpCiAJU0NIRURfVEVYVAogCUxPQ0tfVEVYVAorCUtQUk9CRVNfVEVYVAogCSooLmZpeHVwKQogCSooLmdudS53YXJuaW5nKQogCX0gPSAweDA3MDAKQEAgLTExNyw3ICsxMTgsNyBAQAogCiAgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwogICAvRElTQ0FSRC8gOiB7Ci0JKiguZXhpdGNhbGwuZXhpdCkKKwkqKC5leGl0LnRleHQpICooLmV4aXQuZGF0YSkgKiguZXhpdGNhbGwuZXhpdCkKIAl9CiAKICAgLyogU3RhYnMgZGVidWdnaW5nIHNlY3Rpb25zLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUgYi9hcmNoL3MzOTAvbGliL01ha2VmaWxlCmluZGV4IGUwNWQwODcuLmM0MmZmZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKKysrIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQpAQCAtNCw2ICs0LDYgQEAKIAogRVhUUkFfQUZMQUdTIDo9IC10cmFkaXRpb25hbAogCi1saWIteSArPSBkZWxheS5vIHN0cmluZy5vCi1saWIteSArPSAkKGlmICQoQ09ORklHXzY0QklUKSx1YWNjZXNzNjQubyx1YWNjZXNzLm8pCitsaWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8KK2xpYi0kKENPTkZJR182NEJJVCkgKz0gdWFjY2Vzc19tdmNvcy5vCiBsaWItJChDT05GSUdfU01QKSArPSBzcGlubG9jay5vCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3MuUyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzcy5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZDU5ZTI2Mi4uMDAwMDAwMAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3MuUworKysgL2Rldi9udWxsCkBAIC0xLDIxMCArMCwwIEBACi0vKgotICogIGFyY2gvczM5MC9saWIvdWFjY2Vzcy5TCi0gKiAgICBfX2NvcHlfe2Zyb218dG99X3VzZXIgZnVuY3Rpb25zLgotICoKLSAqICBzMzkwCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3JzKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCi0gKgotICogIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0YW5kYXJkIGNhbGwgaW50ZXJmYWNlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLQotICAgICAgICAudGV4dAotICAgICAgICAuYWxpZ24gNAotICAgICAgICAuZ2xvYmwgX19jb3B5X2Zyb21fdXNlcl9hc20KLQkjICVyMiA9IHRvLCAlcjMgPSBuLCAlcjQgPSBmcm9tCi1fX2NvcHlfZnJvbV91c2VyX2FzbToKLQlzbHIJJXIwLCVyMAotMDoJbXZjcAkwKCVyMywlcjIpLDAoJXI0KSwlcjAKLQlqbnoJMWYKLQlzbHIJJXIyLCVyMgotCWJyCSVyMTQKLTE6CWxhCSVyMiwyNTYoJXIyKQotCWxhCSVyNCwyNTYoJXI0KQotCWFoaQklcjMsLTI1NgotMjoJbXZjcAkwKCVyMywlcjIpLDAoJXI0KSwlcjAKLQlqbnoJMWIKLTM6CXNscgklcjIsJXIyCi0JYnIJJXIxNAotNDoJbGhpCSVyMCwtNDA5NgotCWxyCSVyNSwlcjQKLQlzbHIJJXI1LCVyMAotCW5yCSVyNSwlcjAJCSMgJXI1ID0gKCVyNCArIDQwOTYpICYgLTQwOTYKLQlzbHIJJXI1LCVyNAkJIyAlcjUgPSAjYnl0ZXMgdG8gbmV4dCB1c2VyIHBhZ2UgYm91bmRhcnkKLQljbHIJJXIzLCVyNQkJIyBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5ID8KLQlqbmgJNmYJCSMgbm8sIHRoZSBjdXJyZW50IHBhZ2UgZmF1bHRlZAotCSMgbW92ZSB3aXRoIHRoZSByZWR1Y2VkIGxlbmd0aCB3aGljaCBpcyA8IDI1NgotNToJbXZjcAkwKCVyNSwlcjIpLDAoJXI0KSwlcjAKLQlzbHIJJXIzLCVyNQotNjoJbHIJJXIyLCVyMwotCWJyCSVyMTQKLSAgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkubG9uZwkwYiw0YgotCS5sb25nCTJiLDRiCi0JLmxvbmcJNWIsNmIKLSAgICAgICAgLnByZXZpb3VzCi0KLSAgICAgICAgLmFsaWduIDQKLSAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIF9fY29weV90b191c2VyX2FzbQotCSMgJXIyID0gZnJvbSwgJXIzID0gbiwgJXI0ID0gdG8KLV9fY29weV90b191c2VyX2FzbToKLQlzbHIJJXIwLCVyMAotMDoJbXZjcwkwKCVyMywlcjQpLDAoJXIyKSwlcjAKLQlqbnoJMWYKLQlzbHIJJXIyLCVyMgotCWJyCSVyMTQKLTE6CWxhCSVyMiwyNTYoJXIyKQotCWxhCSVyNCwyNTYoJXI0KQotCWFoaQklcjMsLTI1NgotMjoJbXZjcwkwKCVyMywlcjQpLDAoJXIyKSwlcjAKLQlqbnoJMWIKLTM6CXNscgklcjIsJXIyCi0JYnIJJXIxNAotNDoJbGhpCSVyMCwtNDA5NgotCWxyCSVyNSwlcjQKLQlzbHIJJXI1LCVyMAotCW5yCSVyNSwlcjAJCSMgJXI1ID0gKCVyNCArIDQwOTYpICYgLTQwOTYKLQlzbHIJJXI1LCVyNAkJIyAlcjUgPSAjYnl0ZXMgdG8gbmV4dCB1c2VyIHBhZ2UgYm91bmRhcnkKLQljbHIJJXIzLCVyNQkJIyBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5ID8KLQlqbmgJNmYJCSMgbm8sIHRoZSBjdXJyZW50IHBhZ2UgZmF1bHRlZAotCSMgbW92ZSB3aXRoIHRoZSByZWR1Y2VkIGxlbmd0aCB3aGljaCBpcyA8IDI1NgotNToJbXZjcwkwKCVyNSwlcjQpLDAoJXIyKSwlcjAKLQlzbHIJJXIzLCVyNQotNjoJbHIJJXIyLCVyMwotCWJyCSVyMTQKLSAgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkubG9uZwkwYiw0YgotCS5sb25nCTJiLDRiCi0JLmxvbmcJNWIsNmIKLSAgICAgICAgLnByZXZpb3VzCi0KLSAgICAgICAgLmFsaWduIDQKLSAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIF9fY29weV9pbl91c2VyX2FzbQotCSMgJXIyID0gZnJvbSwgJXIzID0gbiwgJXI0ID0gdG8KLV9fY29weV9pbl91c2VyX2FzbToKLQlzYWNmCTI1NgotCWJyYXMJMSwxZgotCW12YwkwKDEsJXI0KSwwKCVyMikKLTA6CW12YwkwKDI1NiwlcjQpLDAoJXIyKQotCWxhCSVyMiwyNTYoJXIyKQotCWxhCSVyNCwyNTYoJXI0KQotMToJYWhpCSVyMywtMjU2Ci0Jam5tCTBiCi0yOglleAklcjMsMCglcjEpCi0Jc2FjZgkwCi0Jc2xyCSVyMiwlcjIKLQlicgkxNAotMzoJbXZjCTAoMSwlcjQpLDAoJXIyKQotCWxhCSVyMiwxKCVyMikKLQlsYQklcjQsMSglcjQpCi0JYWhpCSVyMywtMQotCWpubQkzYgotNDoJbHIJJXIyLCVyMwotCXNhY2YJMAotCWJyCSVyMTQKLSAgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkubG9uZwkwYiwzYgotCS5sb25nCTJiLDNiCi0JLmxvbmcJM2IsNGIKLSAgICAgICAgLnByZXZpb3VzCi0KLSAgICAgICAgLmFsaWduIDQKLSAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIF9fY2xlYXJfdXNlcl9hc20KLQkjICVyMiA9IHRvLCAlcjMgPSBuCi1fX2NsZWFyX3VzZXJfYXNtOgotCWJyYXMJJXI1LDBmCi0JLmxvbmcJZW1wdHlfemVyb19wYWdlCi0wOglsCSVyNSwwKCVyNSkKLQlzbHIJJXIwLCVyMAotMToJbXZjcwkwKCVyMywlcjIpLDAoJXI1KSwlcjAKLQlqbnoJMmYKLQlzbHIJJXIyLCVyMgotCWJyCSVyMTQKLTI6CWxhCSVyMiwyNTYoJXIyKQotCWFoaQklcjMsLTI1NgotMzoJbXZjcwkwKCVyMywlcjIpLDAoJXI1KSwlcjAKLQlqbnoJMmIKLTQ6CXNscgklcjIsJXIyCi0JYnIJJXIxNAotNToJbGhpCSVyMCwtNDA5NgotCWxyCSVyNCwlcjIKLQlzbHIJJXI0LCVyMAotCW5yCSVyNCwlcjAJCSMgJXI0ID0gKCVyMiArIDQwOTYpICYgLTQwOTYKLQlzbHIJJXI0LCVyMgkJIyAlcjQgPSAjYnl0ZXMgdG8gbmV4dCB1c2VyIHBhZ2UgYm91bmRhcnkKLQljbHIJJXIzLCVyNAkJIyBjbGVhciBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeSA/Ci0Jam5oCTdmCQkjIG5vLCB0aGUgY3VycmVudCBwYWdlIGZhdWx0ZWQKLQkjIGNsZWFyIHdpdGggdGhlIHJlZHVjZWQgbGVuZ3RoIHdoaWNoIGlzIDwgMjU2Ci02OgltdmNzCTAoJXI0LCVyMiksMCglcjUpLCVyMAotCXNscgklcjMsJXI0Ci03OglscgklcjIsJXIzCi0JYnIJJXIxNAotICAgICAgICAuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5sb25nCTFiLDViCi0JLmxvbmcJM2IsNWIKLQkubG9uZwk2Yiw3YgotICAgICAgICAucHJldmlvdXMKLQotICAgICAgICAuYWxpZ24gNAotICAgICAgICAudGV4dAotICAgICAgICAuZ2xvYmwgX19zdHJuY3B5X2Zyb21fdXNlcl9hc20KLQkjICVyMiA9IGNvdW50LCAlcjMgPSBkc3QsICVyNCA9IHNyYwotX19zdHJuY3B5X2Zyb21fdXNlcl9hc206Ci0JbGhpCSVyMCwwCi0JbHIJJXIxLCVyNAotCWxhCSVyNCwwKCVyNCkJIyBjbGVhciBoaWdoIG9yZGVyIGJpdCBmcm9tICVyNAotCWxhCSVyMiwwKCVyMiwlcjQpCSMgJXIyIHBvaW50cyB0byBmaXJzdCBieXRlIGFmdGVyIHN0cmluZwotCXNhY2YJMjU2Ci0wOglzcnN0CSVyMiwlcjEKLQlqbwkwYgotCXNhY2YJMAotCWxyCSVyMSwlcjIKLQlqaAkxZgkJIyBcMCBmb3VuZCBpbiBzdHJpbmcgPwotCWFoaQklcjEsMQkJIyBpbmNsdWRlIFwwIGluIGNvcHkKLTE6CXNscgklcjEsJXI0CQkjICVyMSA9IGNvcHkgbGVuZ3RoICh3aXRob3V0IFwwKQotCXNscgklcjIsJXI0CQkjICVyMiA9IHJldHVybiBsZW5ndGggKGluY2x1ZGluZyBcMCkKLTI6CW12Y3AJMCglcjEsJXIzKSwwKCVyNCksJXIwCi0Jam56CTNmCi0JYnIJJXIxNAotMzoJbGEJJXIzLDI1NiglcjMpCi0JbGEJJXI0LDI1NiglcjQpCi0JYWhpCSVyMSwtMjU2Ci0JbXZjcAkwKCVyMSwlcjMpLDAoJXI0KSwlcjAKLQlqbnoJM2IKLQlicgklcjE0Ci00OglzYWNmCTAKLQlsaGkJJXIyLC1FRkFVTFQKLQlicgklcjE0Ci0JLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkubG9uZwkwYiw0YgotCS5wcmV2aW91cwotCi0gICAgICAgIC5hbGlnbiA0Ci0gICAgICAgIC50ZXh0Ci0gICAgICAgIC5nbG9ibCBfX3N0cm5sZW5fdXNlcl9hc20KLQkjICVyMiA9IGNvdW50LCAlcjMgPSBzcmMKLV9fc3Rybmxlbl91c2VyX2FzbToKLQlsaGkJJXIwLDAKLQlscgklcjEsJXIzCi0JbGEJJXIzLDAoJXIzKQkjIGNsZWFyIGhpZ2ggb3JkZXIgYml0IGZyb20gJXI0Ci0JbGEJJXIyLDAoJXIyLCVyMykJIyAlcjIgcG9pbnRzIHRvIGZpcnN0IGJ5dGUgYWZ0ZXIgc3RyaW5nCi0Jc2FjZgkyNTYKLTA6CXNyc3QJJXIyLCVyMQotCWpvCTBiCi0Jc2FjZgkwCi0JYWhpCSVyMiwxCQkjIHN0cm5sZW5fdXNlciByZXN1bHQgaW5jbHVkZXMgdGhlIFwwCi0JCQkJIyBvciByZXR1cm4gY291bnQrMSBpZiBcMCBub3QgZm91bmQKLQlzbHIJJXIyLCVyMwotCWJyCSVyMTQKLTI6CXNhY2YJMAotCXNscgklcjIsJXIyCQkjIHJldHVybiAwIG9uIGV4Y2VwdGlvbgotCWJyCSVyMTQKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5sb25nCTBiLDJiCi0JLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3M2NC5TIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzNjQuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTliNDFhMy4uMDAwMDAwMAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3M2NC5TCisrKyAvZGV2L251bGwKQEAgLTEsMjA2ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9zMzkweC9saWIvdWFjY2Vzcy5TCi0gKiAgICBfX2NvcHlfe2Zyb218dG99X3VzZXIgZnVuY3Rpb25zLgotICoKLSAqICBzMzkwCi0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMiBJQk0gRGV1dHNjaGxhbmQgRW50d2lja2x1bmcgR21iSCwgSUJNIENvcnBvcmF0aW9uCi0gKiAgICBBdXRob3JzKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCi0gKgotICogIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIHN0YW5kYXJkIGNhbGwgaW50ZXJmYWNlCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KLSNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KLQotICAgICAgICAudGV4dAotICAgICAgICAuYWxpZ24gNAotICAgICAgICAuZ2xvYmwgX19jb3B5X2Zyb21fdXNlcl9hc20KLQkjICVyMiA9IHRvLCAlcjMgPSBuLCAlcjQgPSBmcm9tCi1fX2NvcHlfZnJvbV91c2VyX2FzbToKLQlzbGdyCSVyMCwlcjAKLTA6CW12Y3AJMCglcjMsJXIyKSwwKCVyNCksJXIwCi0Jam56CTFmCi0Jc2xncgklcjIsJXIyCi0JYnIJJXIxNAotMToJbGEJJXIyLDI1NiglcjIpCi0JbGEJJXI0LDI1NiglcjQpCi0JYWdoaQklcjMsLTI1NgotMjoJbXZjcAkwKCVyMywlcjIpLDAoJXI0KSwlcjAKLQlqbnoJMWIKLTM6CXNsZ3IJJXIyLCVyMgotCWJyCSVyMTQKLTQ6CWxnaGkJJXIwLC00MDk2Ci0JbGdyCSVyNSwlcjQKLQlzbGdyCSVyNSwlcjAKLQluZ3IJJXI1LCVyMAkJIyAlcjUgPSAoJXI0ICsgNDA5NikgJiAtNDA5NgotCXNsZ3IJJXI1LCVyNAkJIyAlcjUgPSAjYnl0ZXMgdG8gbmV4dCB1c2VyIHBhZ2UgYm91bmRhcnkKLQljbGdyCSVyMywlcjUJCSMgY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeSA/Ci0Jam5oCTZmCQkjIG5vLCB0aGUgY3VycmVudCBwYWdlIGZhdWx0ZWQKLQkjIG1vdmUgd2l0aCB0aGUgcmVkdWNlZCBsZW5ndGggd2hpY2ggaXMgPCAyNTYKLTU6CW12Y3AJMCglcjUsJXIyKSwwKCVyNCksJXIwCi0Jc2xncgklcjMsJXI1Ci02OglsZ3IJJXIyLCVyMwotCWJyCSVyMTQKLSAgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkucXVhZAkwYiw0YgotCS5xdWFkCTJiLDRiCi0JLnF1YWQJNWIsNmIKLSAgICAgICAgLnByZXZpb3VzCi0KLSAgICAgICAgLmFsaWduIDQKLSAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIF9fY29weV90b191c2VyX2FzbQotCSMgJXIyID0gZnJvbSwgJXIzID0gbiwgJXI0ID0gdG8KLV9fY29weV90b191c2VyX2FzbToKLQlzbGdyCSVyMCwlcjAKLTA6CW12Y3MJMCglcjMsJXI0KSwwKCVyMiksJXIwCi0Jam56CTFmCi0Jc2xncgklcjIsJXIyCi0JYnIJJXIxNAotMToJbGEJJXIyLDI1NiglcjIpCi0JbGEJJXI0LDI1NiglcjQpCi0JYWdoaQklcjMsLTI1NgotMjoJbXZjcwkwKCVyMywlcjQpLDAoJXIyKSwlcjAKLQlqbnoJMWIKLTM6CXNsZ3IJJXIyLCVyMgotCWJyCSVyMTQKLTQ6CWxnaGkJJXIwLC00MDk2Ci0JbGdyCSVyNSwlcjQKLQlzbGdyCSVyNSwlcjAKLQluZ3IJJXI1LCVyMAkJIyAlcjUgPSAoJXI0ICsgNDA5NikgJiAtNDA5NgotCXNsZ3IJJXI1LCVyNAkJIyAlcjUgPSAjYnl0ZXMgdG8gbmV4dCB1c2VyIHBhZ2UgYm91bmRhcnkKLQljbGdyCSVyMywlcjUJCSMgY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeSA/Ci0Jam5oCTZmCQkjIG5vLCB0aGUgY3VycmVudCBwYWdlIGZhdWx0ZWQKLQkjIG1vdmUgd2l0aCB0aGUgcmVkdWNlZCBsZW5ndGggd2hpY2ggaXMgPCAyNTYKLTU6CW12Y3MJMCglcjUsJXI0KSwwKCVyMiksJXIwCi0Jc2xncgklcjMsJXI1Ci02OglsZ3IJJXIyLCVyMwotCWJyCSVyMTQKLSAgICAgICAgLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkucXVhZAkwYiw0YgotCS5xdWFkCTJiLDRiCi0JLnF1YWQJNWIsNmIKLSAgICAgICAgLnByZXZpb3VzCi0KLSAgICAgICAgLmFsaWduIDQKLSAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIF9fY29weV9pbl91c2VyX2FzbQotCSMgJXIyID0gZnJvbSwgJXIzID0gbiwgJXI0ID0gdG8KLV9fY29weV9pbl91c2VyX2FzbToKLQlzYWNmCTI1NgotCWJyYXMJMSwxZgotCW12YwkwKDEsJXI0KSwwKCVyMikKLTA6CW12YwkwKDI1NiwlcjQpLDAoJXIyKQotCWxhCSVyMiwyNTYoJXIyKQotCWxhCSVyNCwyNTYoJXI0KQotMToJYWdoaQklcjMsLTI1NgotCWpubQkwYgotMjoJZXgJJXIzLDAoJXIxKQotCXNhY2YJMAotCXNsZ3IJJXIyLCVyMgotCWJyCTE0Ci0zOgltdmMJMCgxLCVyNCksMCglcjIpCi0JbGEJJXIyLDEoJXIyKQotCWxhCSVyNCwxKCVyNCkKLQlhZ2hpCSVyMywtMQotCWpubQkzYgotNDoJbGdyCSVyMiwlcjMKLQlzYWNmCTAKLQlicgklcjE0Ci0gICAgICAgIC5zZWN0aW9uIF9fZXhfdGFibGUsImEiCi0JLnF1YWQJMGIsM2IKLQkucXVhZAkyYiwzYgotCS5xdWFkCTNiLDRiCi0gICAgICAgIC5wcmV2aW91cwotCi0gICAgICAgIC5hbGlnbiA0Ci0gICAgICAgIC50ZXh0Ci0gICAgICAgIC5nbG9ibCBfX2NsZWFyX3VzZXJfYXNtCi0JIyAlcjIgPSB0bywgJXIzID0gbgotX19jbGVhcl91c2VyX2FzbToKLQlzbGdyCSVyMCwlcjAKLQlsYXJsCSVyNSxlbXB0eV96ZXJvX3BhZ2UKLTE6CW12Y3MJMCglcjMsJXIyKSwwKCVyNSksJXIwCi0Jam56CTJmCi0Jc2xncgklcjIsJXIyCi0JYnIJJXIxNAotMjoJbGEJJXIyLDI1NiglcjIpCi0JYWdoaQklcjMsLTI1NgotMzoJbXZjcwkwKCVyMywlcjIpLDAoJXI1KSwlcjAKLQlqbnoJMmIKLTQ6CXNsZ3IJJXIyLCVyMgotCWJyCSVyMTQKLTU6CWxnaGkJJXIwLC00MDk2Ci0JbGdyCSVyNCwlcjIKLQlzbGdyCSVyNCwlcjAKLQluZ3IJJXI0LCVyMAkJIyAlcjQgPSAoJXIyICsgNDA5NikgJiAtNDA5NgotCXNsZ3IJJXI0LCVyMgkJIyAlcjQgPSAjYnl0ZXMgdG8gbmV4dCB1c2VyIHBhZ2UgYm91bmRhcnkKLQljbGdyCSVyMywlcjQJCSMgY2xlYXIgY3Jvc3NlcyBuZXh0IHBhZ2UgYm91bmRhcnkgPwotCWpuaAk3ZgkJIyBubywgdGhlIGN1cnJlbnQgcGFnZSBmYXVsdGVkCi0JIyBjbGVhciB3aXRoIHRoZSByZWR1Y2VkIGxlbmd0aCB3aGljaCBpcyA8IDI1NgotNjoJbXZjcwkwKCVyNCwlcjIpLDAoJXI1KSwlcjAKLQlzbGdyCSVyMywlcjQKLTc6CWxncgklcjIsJXIzCi0JYnIJJXIxNAotICAgICAgICAuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5xdWFkCTFiLDViCi0JLnF1YWQJM2IsNWIKLQkucXVhZAk2Yiw3YgotICAgICAgICAucHJldmlvdXMKLQotICAgICAgICAuYWxpZ24gNAotICAgICAgICAudGV4dAotICAgICAgICAuZ2xvYmwgX19zdHJuY3B5X2Zyb21fdXNlcl9hc20KLQkjICVyMiA9IGNvdW50LCAlcjMgPSBkc3QsICVyNCA9IHNyYwotX19zdHJuY3B5X2Zyb21fdXNlcl9hc206Ci0JbGdoaQklcjAsMAotCWxncgklcjEsJXI0Ci0JbGEJJXIyLDAoJXIyLCVyNCkJIyAlcjIgcG9pbnRzIHRvIGZpcnN0IGJ5dGUgYWZ0ZXIgc3RyaW5nCi0Jc2FjZgkyNTYKLTA6CXNyc3QJJXIyLCVyMQotCWpvCTBiCi0Jc2FjZgkwCi0JbGdyCSVyMSwlcjIKLQlqaAkxZgkJIyBcMCBmb3VuZCBpbiBzdHJpbmcgPwotCWFnaGkJJXIxLDEJCSMgaW5jbHVkZSBcMCBpbiBjb3B5Ci0xOglzbGdyCSVyMSwlcjQJCSMgJXIxID0gY29weSBsZW5ndGggKHdpdGhvdXQgXDApCi0Jc2xncgklcjIsJXI0CQkjICVyMiA9IHJldHVybiBsZW5ndGggKGluY2x1ZGluZyBcMCkKLTI6CW12Y3AJMCglcjEsJXIzKSwwKCVyNCksJXIwCi0Jam56CTNmCi0JYnIJJXIxNAotMzoJbGEJJXIzLDI1NiglcjMpCi0JbGEJJXI0LDI1NiglcjQpCi0JYWdoaQklcjEsLTI1NgotCW12Y3AJMCglcjEsJXIzKSwwKCVyNCksJXIwCi0Jam56CTNiCi0JYnIJJXIxNAotNDoJc2FjZgkwCi0JbGdoaQklcjIsLUVGQVVMVAotCWJyCSVyMTQKLQkuc2VjdGlvbiBfX2V4X3RhYmxlLCJhIgotCS5xdWFkCTBiLDRiCi0JLnByZXZpb3VzCi0KLSAgICAgICAgLmFsaWduIDQKLSAgICAgICAgLnRleHQKLSAgICAgICAgLmdsb2JsIF9fc3Rybmxlbl91c2VyX2FzbQotCSMgJXIyID0gY291bnQsICVyMyA9IHNyYwotX19zdHJubGVuX3VzZXJfYXNtOgotCWxnaGkJJXIwLDAKLQlsZ3IJJXIxLCVyMwotCWxhCSVyMiwwKCVyMiwlcjMpCSMgJXIyIHBvaW50cyB0byBmaXJzdCBieXRlIGFmdGVyIHN0cmluZwotCXNhY2YJMjU2Ci0wOglzcnN0CSVyMiwlcjEKLQlqbwkwYgotCXNhY2YJMAotCWFnaGkJJXIyLDEJCSMgc3Rybmxlbl91c2VyIHJlc3VsdCBpbmNsdWRlcyB0aGUgXDAKLQkJCQkjIG9yIHJldHVybiBjb3VudCsxIGlmIFwwIG5vdCBmb3VuZAotCXNsZ3IJJXIyLCVyMwotCWJyCSVyMTQKLTI6CXNhY2YJMAotCXNsZ3IJJXIyLCVyMgkJIyByZXR1cm4gMCBvbiBleGNlcHRpb24KLQlicgklcjE0Ci0JLnNlY3Rpb24gX19leF90YWJsZSwiYSIKLQkucXVhZAkwYiwyYgotCS5wcmV2aW91cwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM5NmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiAgYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMKKyAqCisgKiAgT3B0aW1pemVkIHVzZXIgc3BhY2Ugc3BhY2UgYWNjZXNzIGZ1bmN0aW9ucyBiYXNlZCBvbiBtdmNvcy4KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCisgKgkJIEdlcmFsZCBTY2hhZWZlciAoZ2VyYWxkLnNjaGFlZmVyQGRlLmlibS5jb20pCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9mdXRleC5oPgorCisjaWZuZGVmIF9fczM5MHhfXworI2RlZmluZSBBSEkJImFoaSIKKyNkZWZpbmUgQUxSCSJhbHIiCisjZGVmaW5lIENMUgkiY2xyIgorI2RlZmluZSBMSEkJImxoaSIKKyNkZWZpbmUgU0xSCSJzbHIiCisjZWxzZQorI2RlZmluZSBBSEkJImFnaGkiCisjZGVmaW5lIEFMUgkiYWxnciIKKyNkZWZpbmUgQ0xSCSJjbGdyIgorI2RlZmluZSBMSEkJImxnaGkiCisjZGVmaW5lIFNMUgkic2xnciIKKyNlbmRpZgorCitzaXplX3QgY29weV9mcm9tX3VzZXJfbXZjb3Moc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICpwdHIsIHZvaWQgKngpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSgiMCIpID0gMHg4MVVMOworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKworCXRtcDEgPSAtNDA5NlVMOworCWFzbSB2b2xhdGlsZSgKKwkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTIpLDAoJTEpLDBcbiIKKwkJIiAgIGp6ICAgIDRmXG4iCisJCSIxOiJBTFIiICAlMCwlM1xuIgorCQkiICAiU0xSIiAgJTEsJTNcbiIKKwkJIiAgIlNMUiIgICUyLCUzXG4iCisJCSIgICBqICAgICAwYlxuIgorCQkiMjogbGEgICAgJTQsNDA5NSglMSlcbiIvKiAlNCA9IHB0ciArIDQwOTUgKi8KKwkJIiAgIG5yICAgICU0LCUzXG4iCS8qICU0ID0gKHB0ciArIDQwOTUpICYgLTQwOTYgKi8KKwkJIiAgIlNMUiIgICU0LCUxXG4iCisJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLworCQkiICAgam5oICAgNWZcbiIKKwkJIjM6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTQsJTIpLDAoJTEpLDBcbiIKKwkJIiAgIlNMUiIgICUwLCU0XG4iCisJCSIgICBqICAgICA1ZlxuIgorCQkiNDoiU0xSIiAgJTAsJTBcbiIKKwkJIjU6IFxuIgorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNWIpCisJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKKwkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOworCXJldHVybiBzaXplOworfQorCitzaXplX3QgY29weV90b191c2VyX212Y29zKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqcHRyLCBjb25zdCB2b2lkICp4KQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMCBhc20oIjAiKSA9IDB4ODEwMDAwVUw7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJdG1wMSA9IC00MDk2VUw7CisJYXNtIHZvbGF0aWxlKAorCQkiMDogLmluc24gc3MsMHhjODAwMDAwMDAwMDAsMCglMCwlMSksMCglMiksMFxuIgorCQkiICAganogICAgNGZcbiIKKwkJIjE6IkFMUiIgICUwLCUzXG4iCisJCSIgICJTTFIiICAlMSwlM1xuIgorCQkiICAiU0xSIiAgJTIsJTNcbiIKKwkJIiAgIGogICAgIDBiXG4iCisJCSIyOiBsYSAgICAlNCw0MDk1KCUxKVxuIi8qICU0ID0gcHRyICsgNDA5NSAqLworCQkiICAgbnIgICAgJTQsJTNcbiIJLyogJTQgPSAocHRyICsgNDA5NSkgJiAtNDA5NiAqLworCQkiICAiU0xSIiAgJTQsJTFcbiIKKwkJIiAgIkNMUiIgICUwLCU0XG4iCS8qIGNvcHkgY3Jvc3NlcyBuZXh0IHBhZ2UgYm91bmRhcnk/ICovCisJCSIgICBqbmggICA1ZlxuIgorCQkiMzogLmluc24gc3MsMHhjODAwMDAwMDAwMDAsMCglNCwlMSksMCglMiksMFxuIgorCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIiAgIGogICAgIDVmXG4iCisJCSI0OiJTTFIiICAlMCwlMFxuIgorCQkiNTogXG4iCisJCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw1YikKKwkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQorCQk6ICJkIiAocmVnMCkgOiAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIHNpemU7Cit9CisKK3NpemVfdCBjb3B5X2luX3VzZXJfbXZjb3Moc2l6ZV90IHNpemUsIHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20pCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSgiMCIpID0gMHg4MTAwODFVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwl0bXAxID0gLTQwOTZVTDsKKwkvKiBGSVhNRTogY29weSB3aXRoIHJlZHVjZWQgbGVuZ3RoLiAqLworCWFzbSB2b2xhdGlsZSgKKwkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTEpLDAoJTIpLDBcbiIKKwkJIiAgIGp6ICAgIDJmXG4iCisJCSIxOiJBTFIiICAlMCwlM1xuIgorCQkiICAiU0xSIiAgJTEsJTNcbiIKKwkJIiAgIlNMUiIgICUyLCUzXG4iCisJCSIgICBqICAgICAwYlxuIgorCQkiMjoiU0xSIiAgJTAsJTBcbiIKKwkJIjM6IFxuIgorCQlFWF9UQUJMRSgwYiwzYikKKwkJOiAiK2EiIChzaXplKSwgIithIiAodG8pLCAiK2EiIChmcm9tKSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogImQiIChyZWcwKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc2l6ZV90IGNsZWFyX3VzZXJfbXZjb3Moc2l6ZV90IHNpemUsIHZvaWQgX191c2VyICp0bykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtKCIwIikgPSAweDgxMDAwMFVMOworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKworCXRtcDEgPSAtNDA5NlVMOworCWFzbSB2b2xhdGlsZSgKKwkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTEpLDAoJTQpLDBcbiIKKwkJIiAgIGp6ICAgIDRmXG4iCisJCSIxOiJBTFIiICAlMCwlMlxuIgorCQkiICAiU0xSIiAgJTEsJTJcbiIKKwkJIiAgIGogICAgIDBiXG4iCisJCSIyOiBsYSAgICAlMyw0MDk1KCUxKVxuIi8qICU0ID0gdG8gKyA0MDk1ICovCisJCSIgICBuciAgICAlMywlMlxuIgkvKiAlNCA9ICh0byArIDQwOTUpICYgLTQwOTYgKi8KKwkJIiAgIlNMUiIgICUzLCUxXG4iCisJCSIgICJDTFIiICAlMCwlM1xuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLworCQkiICAgam5oICAgNWZcbiIKKwkJIjM6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTMsJTEpLDAoJTQpLDBcbiIKKwkJIiAgIlNMUiIgICUwLCUzXG4iCisJCSIgICBqICAgICA1ZlxuIgorCQkiNDoiU0xSIiAgJTAsJTBcbiIKKwkJIjU6IFxuIgorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNWIpCisJCTogIithIiAoc2l6ZSksICIrYSIgKHRvKSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogImEiIChlbXB0eV96ZXJvX3BhZ2UpLCAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOworCXJldHVybiBzaXplOworfQorCitleHRlcm4gc2l6ZV90IGNvcHlfZnJvbV91c2VyX3N0ZF9zbWFsbChzaXplX3QsIGNvbnN0IHZvaWQgX191c2VyICosIHZvaWQgKik7CitleHRlcm4gc2l6ZV90IGNvcHlfdG9fdXNlcl9zdGRfc21hbGwoc2l6ZV90LCB2b2lkIF9fdXNlciAqLCBjb25zdCB2b2lkICopOworZXh0ZXJuIHNpemVfdCBzdHJubGVuX3VzZXJfc3RkKHNpemVfdCwgY29uc3QgY2hhciBfX3VzZXIgKik7CitleHRlcm4gc2l6ZV90IHN0cm5jcHlfZnJvbV91c2VyX3N0ZChzaXplX3QsIGNvbnN0IGNoYXIgX191c2VyICosIGNoYXIgKik7CitleHRlcm4gaW50IGZ1dGV4X2F0b21pY19vcChpbnQsIGludCBfX3VzZXIgKiwgaW50LCBpbnQgKik7CitleHRlcm4gaW50IGZ1dGV4X2F0b21pY19jbXB4Y2hnKGludCBfX3VzZXIgKiwgaW50LCBpbnQpOworCitzdHJ1Y3QgdWFjY2Vzc19vcHMgdWFjY2Vzc19tdmNvcyA9IHsKKwkuY29weV9mcm9tX3VzZXIgPSBjb3B5X2Zyb21fdXNlcl9tdmNvcywKKwkuY29weV9mcm9tX3VzZXJfc21hbGwgPSBjb3B5X2Zyb21fdXNlcl9zdGRfc21hbGwsCisJLmNvcHlfdG9fdXNlciA9IGNvcHlfdG9fdXNlcl9tdmNvcywKKwkuY29weV90b191c2VyX3NtYWxsID0gY29weV90b191c2VyX3N0ZF9zbWFsbCwKKwkuY29weV9pbl91c2VyID0gY29weV9pbl91c2VyX212Y29zLAorCS5jbGVhcl91c2VyID0gY2xlYXJfdXNlcl9tdmNvcywKKwkuc3Rybmxlbl91c2VyID0gc3Rybmxlbl91c2VyX3N0ZCwKKwkuc3RybmNweV9mcm9tX3VzZXIgPSBzdHJuY3B5X2Zyb21fdXNlcl9zdGQsCisJLmZ1dGV4X2F0b21pY19vcCA9IGZ1dGV4X2F0b21pY19vcCwKKwkuZnV0ZXhfYXRvbWljX2NtcHhjaGcgPSBmdXRleF9hdG9taWNfY21weGNoZywKK307CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0ZDRhMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYwpAQCAtMCwwICsxLDM0MCBAQAorLyoKKyAqICBhcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKKyAqCisgKiAgU3RhbmRhcmQgdXNlciBzcGFjZSBhY2Nlc3MgZnVuY3Rpb25zIGJhc2VkIG9uIG12Y3AvbXZjcyBhbmQgZG9pbmcKKyAqICBpbnRlcmVzdGluZyB0aGluZ3MgaW4gdGhlIHNlY29uZGFyeSBzcGFjZSBtb2RlLgorICoKKyAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDYKKyAqICAgIEF1dGhvcihzKTogTWFydGluIFNjaHdpZGVmc2t5IChzY2h3aWRlZnNreUBkZS5pYm0uY29tKSwKKyAqCQkgR2VyYWxkIFNjaGFlZmVyIChnZXJhbGQuc2NoYWVmZXJAZGUuaWJtLmNvbSkKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2Z1dGV4Lmg+CisKKyNpZm5kZWYgX19zMzkweF9fCisjZGVmaW5lIEFISQkiYWhpIgorI2RlZmluZSBBTFIJImFsciIKKyNkZWZpbmUgQ0xSCSJjbHIiCisjZGVmaW5lIExISQkibGhpIgorI2RlZmluZSBTTFIJInNsciIKKyNlbHNlCisjZGVmaW5lIEFISQkiYWdoaSIKKyNkZWZpbmUgQUxSCSJhbGdyIgorI2RlZmluZSBDTFIJImNsZ3IiCisjZGVmaW5lIExISQkibGdoaSIKKyNkZWZpbmUgU0xSCSJzbGdyIgorI2VuZGlmCisKK3NpemVfdCBjb3B5X2Zyb21fdXNlcl9zdGQoc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICpwdHIsIHZvaWQgKngpCit7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJdG1wMSA9IC0yNTZVTDsKKwlhc20gdm9sYXRpbGUoCisJCSIwOiBtdmNwICAwKCUwLCUyKSwwKCUxKSwlM1xuIgorCQkiICAganogICAgNWZcbiIKKwkJIjE6IkFMUiIgICUwLCUzXG4iCisJCSIgICBsYSAgICAlMSwyNTYoJTEpXG4iCisJCSIgICBsYSAgICAlMiwyNTYoJTIpXG4iCisJCSIyOiBtdmNwICAwKCUwLCUyKSwwKCUxKSwlM1xuIgorCQkiICAgam56ICAgMWJcbiIKKwkJIiAgIGogICAgIDVmXG4iCisJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iCS8qICU0ID0gcHRyICsgMjU1ICovCisJCSIgICJMSEkiICAlMywtNDA5NlxuIgorCQkiICAgbnIgICAgJTQsJTNcbiIJLyogJTQgPSAocHRyICsgMjU1KSAmIC00MDk2ICovCisJCSIgICJTTFIiICAlNCwlMVxuIgorCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KKwkJIiAgIGpuaCAgIDZmXG4iCisJCSI0OiBtdmNwICAwKCU0LCUyKSwwKCUxKSwlM1xuIgorCQkiICAiU0xSIiAgJTAsJTRcbiIKKwkJIiAgIGogICAgIDZmXG4iCisJCSI1OiJTTFIiICAlMCwlMFxuIgorCQkiNjogXG4iCisJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNmIpCisJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKKwkJOiA6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc2l6ZV90IGNvcHlfZnJvbV91c2VyX3N0ZF9zbWFsbChzaXplX3Qgc2l6ZSwgY29uc3Qgdm9pZCBfX3VzZXIgKnB0ciwgdm9pZCAqeCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwl0bXAxID0gMFVMOworCWFzbSB2b2xhdGlsZSgKKwkJIjA6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCisJCSIgICJTTFIiICAlMCwlMFxuIgorCQkiICAgaiAgICAgM2ZcbiIKKwkJIjE6IGxhICAgICU0LDI1NSglMSlcbiIgLyogJTQgPSBwdHIgKyAyNTUgKi8KKwkJIiAgIkxISSIgICUzLC00MDk2XG4iCisJCSIgICBuciAgICAlNCwlM1xuIgkvKiAlNCA9IChwdHIgKyAyNTUpICYgLTQwOTYgKi8KKwkJIiAgIlNMUiIgICU0LCUxXG4iCisJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLworCQkiICAgam5oICAgM2ZcbiIKKwkJIjI6IG12Y3AgIDAoJTQsJTIpLDAoJTEpLCUzXG4iCisJCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMzpcbiIKKwkJRVhfVEFCTEUoMGIsMWIpIEVYX1RBQkxFKDJiLDNiKQorCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogOiAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIHNpemU7Cit9CisKK3NpemVfdCBjb3B5X3RvX3VzZXJfc3RkKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqcHRyLCBjb25zdCB2b2lkICp4KQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKworCXRtcDEgPSAtMjU2VUw7CisJYXNtIHZvbGF0aWxlKAorCQkiMDogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKKwkJIiAgIGp6ICAgIDVmXG4iCisJCSIxOiJBTFIiICAlMCwlM1xuIgorCQkiICAgbGEgICAgJTEsMjU2KCUxKVxuIgorCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgorCQkiMjogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKKwkJIiAgIGpueiAgIDFiXG4iCisJCSIgICBqICAgICA1ZlxuIgorCQkiMzogbGEgICAgJTQsMjU1KCUxKVxuIiAvKiAlNCA9IHB0ciArIDI1NSAqLworCQkiICAiTEhJIiAgJTMsLTQwOTZcbiIKKwkJIiAgIG5yICAgICU0LCUzXG4iCS8qICU0ID0gKHB0ciArIDI1NSkgJiAtNDA5NiAqLworCQkiICAiU0xSIiAgJTQsJTFcbiIKKwkJIiAgIkNMUiIgICUwLCU0XG4iCS8qIGNvcHkgY3Jvc3NlcyBuZXh0IHBhZ2UgYm91bmRhcnk/ICovCisJCSIgICBqbmggICA2ZlxuIgorCQkiNDogbXZjcyAgMCglNCwlMSksMCglMiksJTNcbiIKKwkJIiAgIlNMUiIgICUwLCU0XG4iCisJCSIgICBqICAgICA2ZlxuIgorCQkiNToiU0xSIiAgJTAsJTBcbiIKKwkJIjY6IFxuIgorCQlFWF9UQUJMRSgwYiwzYikgRVhfVEFCTEUoMmIsM2IpIEVYX1RBQkxFKDRiLDZiKQorCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogOiAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIHNpemU7Cit9CisKK3NpemVfdCBjb3B5X3RvX3VzZXJfc3RkX3NtYWxsKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqcHRyLCBjb25zdCB2b2lkICp4KQoreworCXVuc2lnbmVkIGxvbmcgdG1wMSwgdG1wMjsKKworCXRtcDEgPSAwVUw7CisJYXNtIHZvbGF0aWxlKAorCQkiMDogbXZjcyAgMCglMCwlMSksMCglMiksJTNcbiIKKwkJIiAgIlNMUiIgICUwLCUwXG4iCisJCSIgICBqICAgICAzZlxuIgorCQkiMTogbGEgICAgJTQsMjU1KCUxKVxuIiAvKiBwdHIgKyAyNTUgKi8KKwkJIiAgIkxISSIgICUzLC00MDk2XG4iCisJCSIgICBuciAgICAlNCwlM1xuIgkvKiAocHRyICsgMjU1KSAmIC00MDk2VUwgKi8KKwkJIiAgIlNMUiIgICU0LCUxXG4iCisJCSIgICJDTFIiICAlMCwlNFxuIgkvKiBjb3B5IGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLworCQkiICAgam5oICAgM2ZcbiIKKwkJIjI6IG12Y3MgIDAoJTQsJTEpLDAoJTIpLCUzXG4iCisJCSIgICJTTFIiICAlMCwlNFxuIgorCQkiMzpcbiIKKwkJRVhfVEFCTEUoMGIsMWIpIEVYX1RBQkxFKDJiLDNiKQorCQk6ICIrYSIgKHNpemUpLCAiK2EiIChwdHIpLCAiK2EiICh4KSwgIithIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogOiAiY2MiLCAibWVtb3J5Iik7CisJcmV0dXJuIHNpemU7Cit9CisKK3NpemVfdCBjb3B5X2luX3VzZXJfc3RkKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqdG8sIGNvbnN0IHZvaWQgX191c2VyICpmcm9tKQoreworCXVuc2lnbmVkIGxvbmcgdG1wMTsKKworCWFzbSB2b2xhdGlsZSgKKwkJIiAgIkFISSIgICUwLC0xXG4iCisJCSIgICBqbyAgICA1ZlxuIgorCQkiICAgc2FjZiAgMjU2XG4iCisJCSIgICBicmFzICAlMywzZlxuIgorCQkiMDoiQUhJIiAgJTAsMjU3XG4iCisJCSIxOiBtdmMgICAwKDEsJTEpLDAoJTIpXG4iCisJCSIgICBsYSAgICAlMSwxKCUxKVxuIgorCQkiICAgbGEgICAgJTIsMSglMilcbiIKKwkJIiAgIkFISSIgICUwLC0xXG4iCisJCSIgICBqbnogICAxYlxuIgorCQkiICAgaiAgICAgNWZcbiIKKwkJIjI6IG12YyAgIDAoMjU2LCUxKSwwKCUyKVxuIgorCQkiICAgbGEgICAgJTEsMjU2KCUxKVxuIgorCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgorCQkiMzoiQUhJIiAgJTAsLTI1NlxuIgorCQkiICAgam5tICAgMmJcbiIKKwkJIjQ6IGV4ICAgICUwLDFiLTBiKCUzKVxuIgorCQkiICAgc2FjZiAgMFxuIgorCQkiNTogIlNMUiIgICUwLCUwXG4iCisJCSI2OlxuIgorCQlFWF9UQUJMRSgxYiw2YikgRVhfVEFCTEUoMmIsMGIpIEVYX1RBQkxFKDRiLDBiKQorCQk6ICIrYSIgKHNpemUpLCAiK2EiICh0byksICIrYSIgKGZyb20pLCAiPWEiICh0bXAxKQorCQk6IDogImNjIiwgIm1lbW9yeSIpOworCXJldHVybiBzaXplOworfQorCitzaXplX3QgY2xlYXJfdXNlcl9zdGQoc2l6ZV90IHNpemUsIHZvaWQgX191c2VyICp0bykKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlhc20gdm9sYXRpbGUoCisJCSIgICJBSEkiICAlMCwtMVxuIgorCQkiICAgam8gICAgNWZcbiIKKwkJIiAgIHNhY2YgIDI1NlxuIgorCQkiICAgYnJhcyAgJTMsM2ZcbiIKKwkJIiAgIHhjICAgIDAoMSwlMSksMCglMSlcbiIKKwkJIjA6IkFISSIgICUwLDI1N1xuIgorCQkiICAgbGEgICAgJTIsMjU1KCUxKVxuIiAvKiAlMiA9IHB0ciArIDI1NSAqLworCQkiICAgc3JsICAgJTIsMTJcbiIKKwkJIiAgIHNsbCAgICUyLDEyXG4iCS8qICUyID0gKHB0ciArIDI1NSkgJiAtNDA5NiAqLworCQkiICAiU0xSIiAgJTIsJTFcbiIKKwkJIiAgIkNMUiIgICUwLCUyXG4iCS8qIGNsZWFyIGNyb3NzZXMgbmV4dCBwYWdlIGJvdW5kYXJ5PyAqLworCQkiICAgam5oICAgNWZcbiIKKwkJIiAgIkFISSIgICUyLC0xXG4iCisJCSIxOiBleCAgICAlMiwwKCUzKVxuIgorCQkiICAiQUhJIiAgJTIsMVxuIgorCQkiICAiU0xSIiAgJTAsJTJcbiIKKwkJIiAgIGogICAgIDVmXG4iCisJCSIyOiB4YyAgICAwKDI1NiwlMSksMCglMSlcbiIKKwkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKKwkJIjM6IkFISSIgICUwLC0yNTZcbiIKKwkJIiAgIGpubSAgIDJiXG4iCisJCSI0OiBleCAgICAlMCwwKCUzKVxuIgorCQkiICAgc2FjZiAgMFxuIgorCQkiNTogIlNMUiIgICUwLCUwXG4iCisJCSI2OlxuIgorCQlFWF9UQUJMRSgxYiw2YikgRVhfVEFCTEUoMmIsMGIpIEVYX1RBQkxFKDRiLDBiKQorCQk6ICIrYSIgKHNpemUpLCAiK2EiICh0byksICI9YSIgKHRtcDEpLCAiPWEiICh0bXAyKQorCQk6IDogImNjIiwgIm1lbW9yeSIpOworCXJldHVybiBzaXplOworfQorCitzaXplX3Qgc3Rybmxlbl91c2VyX3N0ZChzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYykKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtKCIwIikgPSAwVUw7CisJdW5zaWduZWQgbG9uZyB0bXAxLCB0bXAyOworCisJYXNtIHZvbGF0aWxlKAorCQkiICAgbGEgICAgJTIsMCglMSlcbiIKKwkJIiAgIGxhICAgICUzLDAoJTAsJTEpXG4iCisJCSIgICJTTFIiICAlMCwlMFxuIgorCQkiICAgc2FjZiAgMjU2XG4iCisJCSIwOiBzcnN0ICAlMywlMlxuIgorCQkiICAgam8gICAgMGJcbiIKKwkJIiAgIGxhICAgICUwLDEoJTMpXG4iCS8qIHN0cm5sZW5fdXNlciByZXN1bHRzIGluY2x1ZGVzIFwwICovCisJCSIgICJTTFIiICAlMCwlMVxuIgorCQkiMTogc2FjZiAgMFxuIgorCQlFWF9UQUJMRSgwYiwxYikKKwkJOiAiK2EiIChzaXplKSwgIithIiAoc3JjKSwgIj1hIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogImQiIChyZWcwKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc2l6ZV90IHN0cm5jcHlfZnJvbV91c2VyX3N0ZChzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciBfX3VzZXIgKnNyYywgY2hhciAqZHN0KQoreworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMCBhc20oIjAiKSA9IDBVTDsKKwl1bnNpZ25lZCBsb25nIHRtcDEsIHRtcDI7CisKKwlhc20gdm9sYXRpbGUoCisJCSIgICBsYSAgICAlMywwKCUxKVxuIgorCQkiICAgbGEgICAgJTQsMCglMCwlMSlcbiIKKwkJIiAgIHNhY2YgIDI1NlxuIgorCQkiMDogc3JzdCAgJTQsJTNcbiIKKwkJIiAgIGpvICAgIDBiXG4iCisJCSIgICBzYWNmICAwXG4iCisJCSIgICBsYSAgICAlMCwwKCU0KVxuIgorCQkiICAgamggICAgMWZcbiIJCS8qIGZvdW5kIFwwIGluIHN0cmluZyA/ICovCisJCSIgICJBSEkiICAlNCwxXG4iCS8qIGluY2x1ZGUgXDAgaW4gY29weSAqLworCQkiMToiU0xSIiAgJTAsJTFcbiIJLyogJTAgPSByZXR1cm4gbGVuZ3RoICh3aXRob3V0IFwwKSAqLworCQkiICAiU0xSIiAgJTQsJTFcbiIJLyogJTQgPSBjb3B5IGxlbmd0aCAoaW5jbHVkaW5nIFwwKSAqLworCQkiMjogbXZjcCAgMCglNCwlMiksMCglMSksJTVcbiIKKwkJIiAgIGp6ICAgIDlmXG4iCisJCSIzOiJBSEkiICAlNCwtMjU2XG4iCisJCSIgICBsYSAgICAlMSwyNTYoJTEpXG4iCisJCSIgICBsYSAgICAlMiwyNTYoJTIpXG4iCisJCSI0OiBtdmNwICAwKCU0LCUyKSwwKCUxKSwlNVxuIgorCQkiICAgam56ICAgM2JcbiIKKwkJIiAgIGogICAgIDlmXG4iCisJCSI3OiBzYWNmICAwXG4iCisJCSI4OiJMSEkiICAlMCwlNlxuIgorCQkiOTpcbiIKKwkJRVhfVEFCTEUoMGIsN2IpIEVYX1RBQkxFKDJiLDhiKSBFWF9UQUJMRSg0Yiw4YikKKwkJOiAiK2EiIChzaXplKSwgIithIiAoc3JjKSwgIitkIiAoZHN0KSwgIj1hIiAodG1wMSksICI9YSIgKHRtcDIpCisJCTogImQiIChyZWcwKSwgIksiICgtRUZBVUxUKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcChpbnNuLCByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJCVwKKwkJIiAgIHNhY2YgIDI1NlxuIgkJCQkJXAorCQkiMDogbCAgICAgJTEsMCglNilcbiIJCQkJCVwKKwkJIjE6Imluc24JCQkJCQlcCisJCSIyOiBjcyAgICAlMSwlMiwwKCU2KVxuIgkJCQlcCisJCSIzOiBqbCAgICAxYlxuIgkJCQkJCVwKKwkJIiAgIGxoaSAgICUwLDBcbiIJCQkJCVwKKwkJIjQ6IHNhY2YgIDBcbiIJCQkJCQlcCisJCUVYX1RBQkxFKDBiLDRiKSBFWF9UQUJMRSgyYiw0YikgRVhfVEFCTEUoM2IsNGIpCQlcCisJCTogIj1kIiAocmV0KSwgIj0mZCIgKG9sZHZhbCksICI9JmQiIChuZXd2YWwpLAkJXAorCQkgICI9bSIgKCp1YWRkcikJCQkJCQlcCisJCTogIjAiICgtRUZBVUxUKSwgImQiIChvcGFyZyksICJhIiAodWFkZHIpLAkJXAorCQkgICJtIiAoKnVhZGRyKSA6ICJjYyIpOworCitpbnQgZnV0ZXhfYXRvbWljX29wKGludCBvcCwgaW50IF9fdXNlciAqdWFkZHIsIGludCBvcGFyZywgaW50ICpvbGQpCit7CisJaW50IG9sZHZhbCA9IDAsIG5ld3ZhbCwgcmV0OworCisJaW5jX3ByZWVtcHRfY291bnQoKTsKKworCXN3aXRjaCAob3ApIHsKKwljYXNlIEZVVEVYX09QX1NFVDoKKwkJX19mdXRleF9hdG9taWNfb3AoImxyICUyLCU1XG4iLAorCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9BREQ6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlMVxuYXIgJTIsJTVcbiIsCisJCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX09SOgorCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTFcbm9yICUyLCU1XG4iLAorCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9BTkROOgorCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTFcbm5yICUyLCU1XG4iLAorCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9YT1I6CisJCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlMVxueHIgJTIsJTVcbiIsCisJCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PU1lTOworCX0KKwlkZWNfcHJlZW1wdF9jb3VudCgpOworCSpvbGQgPSBvbGR2YWw7CisJcmV0dXJuIHJldDsKK30KKworaW50IGZ1dGV4X2F0b21pY19jbXB4Y2hnKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQoreworCWludCByZXQ7CisKKwlhc20gdm9sYXRpbGUoCisJCSIgICBzYWNmIDI1NlxuIgorCQkiICAgY3MgICAlMSwlNCwwKCU1KVxuIgorCQkiMDogbHIgICAlMCwlMVxuIgorCQkiMTogc2FjZiAwXG4iCisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICI9ZCIgKHJldCksICIrZCIgKG9sZHZhbCksICI9bSIgKCp1YWRkcikKKwkJOiAiMCIgKC1FRkFVTFQpLCAiZCIgKG5ld3ZhbCksICJhIiAodWFkZHIpLCAibSIgKCp1YWRkcikKKwkJOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCB1YWNjZXNzX29wcyB1YWNjZXNzX3N0ZCA9IHsKKwkuY29weV9mcm9tX3VzZXIgPSBjb3B5X2Zyb21fdXNlcl9zdGQsCisJLmNvcHlfZnJvbV91c2VyX3NtYWxsID0gY29weV9mcm9tX3VzZXJfc3RkX3NtYWxsLAorCS5jb3B5X3RvX3VzZXIgPSBjb3B5X3RvX3VzZXJfc3RkLAorCS5jb3B5X3RvX3VzZXJfc21hbGwgPSBjb3B5X3RvX3VzZXJfc3RkX3NtYWxsLAorCS5jb3B5X2luX3VzZXIgPSBjb3B5X2luX3VzZXJfc3RkLAorCS5jbGVhcl91c2VyID0gY2xlYXJfdXNlcl9zdGQsCisJLnN0cm5sZW5fdXNlciA9IHN0cm5sZW5fdXNlcl9zdGQsCisJLnN0cm5jcHlfZnJvbV91c2VyID0gc3RybmNweV9mcm9tX3VzZXJfc3RkLAorCS5mdXRleF9hdG9taWNfb3AgPSBmdXRleF9hdG9taWNfb3AsCisJLmZ1dGV4X2F0b21pY19jbXB4Y2hnID0gZnV0ZXhfYXRvbWljX2NtcHhjaGcsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2NtbS5jIGIvYXJjaC9zMzkwL21tL2NtbS5jCmluZGV4IGNlZWE1MWMuLjc4NmE0NGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9jbW0uYworKysgYi9hcmNoL3MzOTAvbW0vY21tLmMKQEAgLTUzLDIyICs1Myw2IEBACiBzdGF0aWMgdm9pZCBjbW1fc2V0X3RpbWVyKHZvaWQpOwogCiBzdGF0aWMgbG9uZwotY21tX3N0cnRvdWwoY29uc3QgY2hhciAqY3AsIGNoYXIgKiplbmRwKQotewotCXVuc2lnbmVkIGludCBiYXNlID0gMTA7Ci0KLQlpZiAoKmNwID09ICcwJykgewotCQliYXNlID0gODsKLQkJY3ArKzsKLQkJaWYgKCgqY3AgPT0gJ3gnIHx8ICpjcCA9PSAnWCcpICYmIGlzeGRpZ2l0KGNwWzFdKSkgewotCQkJYmFzZSA9IDE2OwotCQkJY3ArKzsKLQkJfQotCX0KLQlyZXR1cm4gc2ltcGxlX3N0cnRvdWwoY3AsIGVuZHAsIGJhc2UpOwotfQotCi1zdGF0aWMgbG9uZwogY21tX2FsbG9jX3BhZ2VzKGxvbmcgcGFnZXMsIGxvbmcgKmNvdW50ZXIsIHN0cnVjdCBjbW1fcGFnZV9hcnJheSAqKmxpc3QpCiB7CiAJc3RydWN0IGNtbV9wYWdlX2FycmF5ICpwYTsKQEAgLTI3Niw3ICsyNjAsNyBAQAogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCWJ1ZltzaXplb2YoYnVmKSAtIDFdID0gJ1wwJzsKIAkJY21tX3NraXBfYmxhbmtzKGJ1ZiwgJnApOwotCQlwYWdlcyA9IGNtbV9zdHJ0b3VsKHAsICZwKTsKKwkJcGFnZXMgPSBzaW1wbGVfc3RydG91bChwLCAmcCwgMCk7CiAJCWlmIChjdGwgPT0gJmNtbV90YWJsZVswXSkKIAkJCWNtbV9zZXRfcGFnZXMocGFnZXMpOwogCQllbHNlCkBAIC0zMTcsOSArMzAxLDkgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCQlidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7CiAJCWNtbV9za2lwX2JsYW5rcyhidWYsICZwKTsKLQkJcGFnZXMgPSBjbW1fc3RydG91bChwLCAmcCk7CisJCXBhZ2VzID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOwogCQljbW1fc2tpcF9ibGFua3MocCwgJnApOwotCQlzZWNvbmRzID0gY21tX3N0cnRvdWwocCwgJnApOworCQlzZWNvbmRzID0gc2ltcGxlX3N0cnRvdWwocCwgJnAsIDApOwogCQljbW1fc2V0X3RpbWVvdXQocGFnZXMsIHNlY29uZHMpOwogCX0gZWxzZSB7CiAJCWxlbiA9IHNwcmludGYoYnVmLCAiJWxkICVsZFxuIiwKQEAgLTM4MiwyNCArMzY2LDI0IEBACiAJaWYgKHN0cm5jbXAobXNnLCAiU0hSSU5LIiwgNikgPT0gMCkgewogCQlpZiAoIWNtbV9za2lwX2JsYW5rcyhtc2cgKyA2LCAmbXNnKSkKIAkJCXJldHVybjsKLQkJcGFnZXMgPSBjbW1fc3RydG91bChtc2csICZtc2cpOworCQlwYWdlcyA9IHNpbXBsZV9zdHJ0b3VsKG1zZywgJm1zZywgMCk7CiAJCWNtbV9za2lwX2JsYW5rcyhtc2csICZtc2cpOwogCQlpZiAoKm1zZyA9PSAnXDAnKQogCQkJY21tX3NldF9wYWdlcyhwYWdlcyk7CiAJfSBlbHNlIGlmIChzdHJuY21wKG1zZywgIlJFTEVBU0UiLCA3KSA9PSAwKSB7CiAJCWlmICghY21tX3NraXBfYmxhbmtzKG1zZyArIDcsICZtc2cpKQogCQkJcmV0dXJuOwotCQlwYWdlcyA9IGNtbV9zdHJ0b3VsKG1zZywgJm1zZyk7CisJCXBhZ2VzID0gc2ltcGxlX3N0cnRvdWwobXNnLCAmbXNnLCAwKTsKIAkJY21tX3NraXBfYmxhbmtzKG1zZywgJm1zZyk7CiAJCWlmICgqbXNnID09ICdcMCcpCiAJCQljbW1fYWRkX3RpbWVkX3BhZ2VzKHBhZ2VzKTsKIAl9IGVsc2UgaWYgKHN0cm5jbXAobXNnLCAiUkVVU0UiLCA1KSA9PSAwKSB7CiAJCWlmICghY21tX3NraXBfYmxhbmtzKG1zZyArIDUsICZtc2cpKQogCQkJcmV0dXJuOwotCQlwYWdlcyA9IGNtbV9zdHJ0b3VsKG1zZywgJm1zZyk7CisJCXBhZ2VzID0gc2ltcGxlX3N0cnRvdWwobXNnLCAmbXNnLCAwKTsKIAkJaWYgKCFjbW1fc2tpcF9ibGFua3MobXNnLCAmbXNnKSkKIAkJCXJldHVybjsKLQkJc2Vjb25kcyA9IGNtbV9zdHJ0b3VsKG1zZywgJm1zZyk7CisJCXNlY29uZHMgPSBzaW1wbGVfc3RydG91bChtc2csICZtc2csIDApOwogCQljbW1fc2tpcF9ibGFua3MobXNnLCAmbXNnKTsKIAkJaWYgKCptc2cgPT0gJ1wwJykKIAkJCWNtbV9zZXRfdGltZW91dChwYWdlcywgc2Vjb25kcyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCmluZGV4IDdjZDgyNTcuLjQ0ZjBjZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jCkBAIC0yNSwxMCArMjUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2tkZWJ1Zy5oPgogCiAjaWZuZGVmIENPTkZJR182NEJJVAogI2RlZmluZSBfX0ZBSUxfQUREUl9NQVNLIDB4N2ZmZmYwMDAKQEAgLTQ4LDYgKzUwLDM4IEBACiAKIGV4dGVybiB2b2lkIGRpZShjb25zdCBjaGFyICosc3RydWN0IHB0X3JlZ3MgKixsb25nKTsKIAorI2lmZGVmIENPTkZJR19LUFJPQkVTCitBVE9NSUNfTk9USUZJRVJfSEVBRChub3RpZnlfcGFnZV9mYXVsdF9jaGFpbik7CitpbnQgcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBhdG9taWNfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCBuYik7Cit9CisKK2ludCB1bnJlZ2lzdGVyX3BhZ2VfZmF1bHRfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYXRvbWljX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJm5vdGlmeV9wYWdlX2ZhdWx0X2NoYWluLCBuYik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCit7CisJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7CisJCS5yZWdzID0gcmVncywKKwkJLnN0ciA9IHN0ciwKKwkJLmVyciA9IGVyciwKKwkJLnRyYXBuciA9IHRyYXAsCisJCS5zaWduciA9IHNpZworCX07CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZub3RpZnlfcGFnZV9mYXVsdF9jaGFpbiwgdmFsLCAmYXJncyk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbm90aWZ5X3BhZ2VfZmF1bHQoZW51bSBkaWVfdmFsIHZhbCwgY29uc3QgY2hhciAqc3RyLAorCQkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGxvbmcgZXJyLCBpbnQgdHJhcCwgaW50IHNpZykKK3sKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisjZW5kaWYKKwogZXh0ZXJuIHNwaW5sb2NrX3QgdGltZXJsaXN0X2xvY2s7CiAKIC8qCkBAIC0xNTksNyArMTkzLDcgQEAKICAqICAgMTEgICAgICAgUGFnZSB0cmFuc2xhdGlvbiAgICAgLT4gIE5vdCBwcmVzZW50ICAgICAgIChudWxsaWZpY2F0aW9uKQogICogICAzYiAgICAgICBSZWdpb24gdGhpcmQgdHJhbnMuICAtPiAgTm90IHByZXNlbnQgICAgICAgKG51bGxpZmljYXRpb24pCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGlubGluZSB2b2lkIF9fa3Byb2JlcwogZG9fZXhjZXB0aW9uKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGUsIGludCBpc19wcm90ZWN0aW9uKQogewogICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzazsKQEAgLTE3Myw2ICsyMDcsMTAgQEAKICAgICAgICAgdHNrID0gY3VycmVudDsKICAgICAgICAgbW0gPSB0c2stPm1tOwogCQorCWlmIChub3RpZnlfcGFnZV9mYXVsdChESUVfUEFHRV9GQVVMVCwgInBhZ2UgZmF1bHQiLCByZWdzLCBlcnJvcl9jb2RlLCAxNCwKKwkJCQkJU0lHU0VHVikgPT0gTk9USUZZX1NUT1ApCisJCXJldHVybjsKKwogCS8qIAogICAgICAgICAgKiBDaGVjayBmb3IgbG93LWFkZHJlc3MgcHJvdGVjdGlvbi4gIFRoaXMgbmVlZHMgdG8gYmUgdHJlYXRlZAogCSAqIGFzIGEgc3BlY2lhbCBjYXNlIGJlY2F1c2UgdGhlIHRyYW5zbGF0aW9uIGV4Y2VwdGlvbiBjb2RlIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggZWI2ZWJmZS4uY2ZkOWI4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC0xMDgsMTYgKzEwOCwyMyBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIHBnZGlyX2sgPSAoX19wYShzd2FwcGVyX3BnX2RpcikgJiBQQUdFX01BU0spIHwgX0tFUk5TRUdfVEFCTEU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc3NtX21hc2sgPSAweDA0MDAwMDAwTDsKIAl1bnNpZ25lZCBsb25nIHJvX3N0YXJ0X3Bmbiwgcm9fZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKIAogCXJvX3N0YXJ0X3BmbiA9IFBGTl9ET1dOKCh1bnNpZ25lZCBsb25nKSZfX3N0YXJ0X3JvZGF0YSk7CiAJcm9fZW5kX3BmbiA9IFBGTl9VUCgodW5zaWduZWQgbG9uZykmX19lbmRfcm9kYXRhKTsKIAorCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOworCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbWF4X2xvd19wZm47CisJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCAmY29udGlnX3BhZ2VfZGF0YSwgem9uZXNfc2l6ZSwKKwkJCSAgICBfX3BhKFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZULAorCQkJICAgIHpob2xlc19zaXplKTsKKwogCS8qIHVubWFwIHdob2xlIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSAqLwogCQogICAgICAgICBwZ19kaXIgPSBzd2FwcGVyX3BnX2RpcjsKIAotCWZvciAoaT0wO2k8S0VSTkVMX1BHRF9QVFJTO2krKykgCi0JICAgICAgICBwbWRfY2xlYXIoKHBtZF90KilwZ19kaXIrKyk7CisJZm9yIChpID0gMDsgaSA8IFBUUlNfUEVSX1BHRDsgaSsrKQorCQlwbWRfY2xlYXIoKHBtZF90ICopIHBnX2RpcisrKTsKIAkJCiAJLyoKIAkgKiBtYXAgd2hvbGUgcGh5c2ljYWwgbWVtb3J5IHRvIHZpcnR1YWwgbWVtb3J5IChpZGVudGl0eSBtYXBwaW5nKSAKQEAgLTEyOSwxMiArMTM2LDkgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIHBnX3RhYmxlIGlzIHBoeXNpY2FsIGF0IHRoaXMgcG9pbnQKICAgICAgICAgICAgICAgICAgKi8KLQkJcGdfdGFibGUgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKwkJcGdfdGFibGUgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwogCi0gICAgICAgICAgICAgICAgcGdfZGlyLT5wZ2QwID0gIChfUEFHRV9UQUJMRSB8IF9fcGEocGdfdGFibGUpKTsKLSAgICAgICAgICAgICAgICBwZ19kaXItPnBnZDEgPSAgKF9QQUdFX1RBQkxFIHwgKF9fcGEocGdfdGFibGUpKzEwMjQpKTsKLSAgICAgICAgICAgICAgICBwZ19kaXItPnBnZDIgPSAgKF9QQUdFX1RBQkxFIHwgKF9fcGEocGdfdGFibGUpKzIwNDgpKTsKLSAgICAgICAgICAgICAgICBwZ19kaXItPnBnZDMgPSAgKF9QQUdFX1RBQkxFIHwgKF9fcGEocGdfdGFibGUpKzMwNzIpKTsKKwkJcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgKHBtZF90ICopIHBnX2RpciwgcGdfdGFibGUpOwogICAgICAgICAgICAgICAgIHBnX2RpcisrOwogCiAgICAgICAgICAgICAgICAgZm9yICh0bXAgPSAwIDsgdG1wIDwgUFRSU19QRVJfUFRFIDsgdG1wKysscGdfdGFibGUrKykgewpAQCAtMTQzLDggKzE0Nyw4IEBACiAJCQllbHNlCiAJCQkJcHRlID0gcGZuX3B0ZShwZm4sIFBBR0VfS0VSTkVMKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZm4gPj0gbWF4X2xvd19wZm4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ZV9jbGVhcigmaW5pdF9tbSwgMCwgJnB0ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHRlKHBnX3RhYmxlLCBwdGUpOworCQkJCXB0ZV92YWwocHRlKSA9IF9QQUdFX1RZUEVfRU1QVFk7CisJCQlzZXRfcHRlKHBnX3RhYmxlLCBwdGUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcGZuKys7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xNTksMTYgKzE2Myw2IEBACiAJCQkgICAgIDogOiAibSIgKHBnZGlyX2spLCAibSIgKHNzbV9tYXNrKSk7CiAKICAgICAgICAgbG9jYWxfZmx1c2hfdGxiKCk7Ci0KLQl7Ci0JCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwotCi0JCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwotCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuOwotCQlmcmVlX2FyZWFfaW5pdF9ub2RlKDAsICZjb250aWdfcGFnZV9kYXRhLCB6b25lc19zaXplLAotCQkJCSAgICBfX3BhKFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZULAotCQkJCSAgICB6aG9sZXNfc2l6ZSk7Ci0JfQogICAgICAgICByZXR1cm47CiB9CiAKQEAgLTIxOSw3ICsyMTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfSAgICAgICAgICAKICAgICAgICAgCi0JICAgICAgICBwbV9kaXIgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKjQpOworCQlwbV9kaXIgPSAocG1kX3QgKikgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUgKiA0KTsKICAgICAgICAgICAgICAgICBwZ2RfcG9wdWxhdGUoJmluaXRfbW0sIHBnX2RpciwgcG1fZGlyKTsKIAogICAgICAgICAgICAgICAgIGZvciAoaiA9IDAgOyBqIDwgUFRSU19QRVJfUE1EIDsgaisrLHBtX2RpcisrKSB7CkBAIC0yMjgsNyArMjIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7IAogICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgICAgcHRfZGlyID0gKHB0ZV90ICopIGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJCQlwdF9kaXIgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9wYWdlcyhQQUdFX1NJWkUpOwogICAgICAgICAgICAgICAgICAgICAgICAgcG1kX3BvcHVsYXRlX2tlcm5lbCgmaW5pdF9tbSwgcG1fZGlyLCBwdF9kaXIpOwogCQogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMCA7IGsgPCBQVFJTX1BFUl9QVEUgOyBrKysscHRfZGlyKyspIHsKQEAgLTIzNiwxMCArMjMwLDggQEAKIAkJCQkJcHRlID0gcGZuX3B0ZShwZm4sIF9fcGdwcm90KF9QQUdFX1JPKSk7CiAJCQkJZWxzZQogCQkJCQlwdGUgPSBwZm5fcHRlKHBmbiwgUEFHRV9LRVJORUwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGZuID49IG1heF9sb3dfcGZuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRlX2NsZWFyKCZpbml0X21tLCAwLCAmcHRlKTsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCQlpZiAocGZuID49IG1heF9sb3dfcGZuKQorCQkJCQlwdGVfdmFsKHB0ZSkgPSBfUEFHRV9UWVBFX0VNUFRZOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfcHRlKHB0X2RpciwgcHRlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZuKys7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKaW5kZXggNzgxZGJiMS4uYjA5ODA1ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwpAQCAtNDIxLDE4ICs0MjEsMjIgQEAKIAogc3RhdGljIGludCBfX2luaXQgc3FfYXBpX2luaXQodm9pZCkKIHsKKwlpbnQgcmV0OwogCXByaW50ayhLRVJOX05PVElDRSAic3E6IFJlZ2lzdGVyaW5nIHN0b3JlIHF1ZXVlIEFQSS5cbiIpOwogCi0jaWZkZWYgQ09ORklHX1BST0NfRlMKIAljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzcV9tYXBwaW5nIiwgMCwgMCwgc3FfbWFwcGluZ19yZWFkX3Byb2MsIDApOwotI2VuZGlmCiAKLQlyZXR1cm4gbWlzY19yZWdpc3Rlcigmc3FfZGV2KTsKKwlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZzcV9kZXYpOworCWlmIChyZXQpCisJCXJlbW92ZV9wcm9jX2VudHJ5KCJzcV9tYXBwaW5nIiwgTlVMTCk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3FfYXBpX2V4aXQodm9pZCkKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJnNxX2Rldik7CisJcmVtb3ZlX3Byb2NfZW50cnkoInNxX21hcHBpbmciLCBOVUxMKTsKIH0KIAogbW9kdWxlX2luaXQoc3FfYXBpX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L01ha2VmaWxlIGIvYXJjaC9zaDY0L01ha2VmaWxlCmluZGV4IDhjYTU3ZmYuLmViZjIwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9NYWtlZmlsZQorKysgYi9hcmNoL3NoNjQvTWFrZWZpbGUKQEAgLTI2LDcgKzI2LDYgQEAKIGVuZGlmCiAKICMgTm8gcmVxdWlyZW1lbnRzIGZvciBlbmRpYW5lc3Mgc3VwcG9ydCBmcm9tIEFGTEFHUywgJ2FzJyBhbHdheXMgcnVuIHRocm91Z2ggZ2NjCi1BRkxBR1MJCSs9IC1tNSAtaXNhPXNoNjQgLXRyYWRpdGlvbmFsCiBDRkxBR1MJCSs9ICQoY3B1LXkpCiAKIExERkxBR1Nfdm1saW51eAkrPSAtLWRlZnN5bSBwaHlzX3N0ZXh0PV9zdGV4dC0kKENPTkZJR19DQUNIRURfTUVNT1JZX09GRlNFVCkgXApkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkYmE4ZTE0Li5kYjQ3NWI3IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3Byb2Nlc3MuYwpAQCAtMzU1LDYgKzM1NSw5IEBACiAJZW50ZXJfZGVlcF9zdGFuZGJ5KCk7CiB9CiAKK3ZvaWQgKCpwbV9wb3dlcl9vZmYpKHZvaWQpID0gbWFjaGluZV9wb3dlcl9vZmY7CitFWFBPUlRfU1lNQk9MKHBtX3Bvd2VyX29mZik7CisKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgYWgsIGFsLCBiaCwgYmwsIGNoLCBjbDsKZGlmZiAtLWdpdCBhL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9zZXR1cC5jIGIvYXJjaC9zaDY0L21hY2gtY2F5bWFuL3NldHVwLmMKaW5kZXggZDg0ODk1ZC4uM2VkODdjZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9zZXR1cC5jCisrKyBiL2FyY2gvc2g2NC9tYWNoLWNheW1hbi9zZXR1cC5jCkBAIC0xMTIsOCArMTEyLDEwIEBACiB9OwogCiBzdHJ1Y3QgcmVzb3VyY2Uga3JhbV9yZXNvdXJjZXNbXSA9IHsKLQl7ICJLZXJuZWwgY29kZSIsIDAsIDAgfSwJLyogVGhlc2UgbXVzdCBiZSBsYXN0IGluIHRoZSBhcnJheSAqLwotCXsgIktlcm5lbCBkYXRhIiwgMCwgMCB9CQkvKiBUaGVzZSBtdXN0IGJlIGxhc3QgaW4gdGhlIGFycmF5ICovCisJLyogVGhlc2UgbXVzdCBiZSBsYXN0IGluIHRoZSBhcnJheSAqLworCXsgLm5hbWUgPSAiS2VybmVsIGNvZGUiLCAuc3RhcnQgPSAwLCAuZW5kID0gMCB9LAorCS8qIFRoZXNlIG11c3QgYmUgbGFzdCBpbiB0aGUgYXJyYXkgKi8KKwl7IC5uYW1lID0gIktlcm5lbCBkYXRhIiwgLnN0YXJ0ID0gMCwgLmVuZCA9IDAgfQogfTsKIAogc3RydWN0IHJlc291cmNlIHhyYW1fcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL3NoNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC9zaDY0L21tL2lvcmVtYXAuYwppbmRleCBmYjE4NjZmLi44MGM1Njc1IDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvc2g2NC9tbS9pb3JlbWFwLmMKQEAgLTQ0OSw3ICs0NDksOSBAQAogCQlpZiAocCArIDMyID49IGUpICAgICAgICAvKiBCZXR0ZXIgdGhhbiBub3RoaW5nICovCiAJCQlicmVhazsKIAkJaWYgKChubSA9IHItPm5hbWUpID09IDApIG5tID0gIj8/PyI7Ci0JCXAgKz0gc3ByaW50ZihwLCAiJTA4bHgtJTA4bHg6ICVzXG4iLCByLT5zdGFydCwgci0+ZW5kLCBubSk7CisJCXAgKz0gc3ByaW50ZihwLCAiJTA4bHgtJTA4bHg6ICVzXG4iLAorCQkJICAgICAodW5zaWduZWQgbG9uZylyLT5zdGFydCwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpci0+ZW5kLCBubSk7CiAJfQogCiAJcmV0dXJuIHAtYnVmOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwLmMKaW5kZXggMzU0ODhkNi4uMDI1MWNhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cC5jCkBAIC0zNDgsOSArMzQ4LDkgQEAKIAlpbml0X21tLmNvbnRleHQgPSAodW5zaWduZWQgbG9uZykgTk9fQ09OVEVYVDsKIAlpbml0X3Rhc2sudGhyZWFkLmtyZWdzID0gJmZha2Vfc3dhcHBlcl9yZWdzOwogCi0Jc21wX3NldHVwX2NwdV9wb3NzaWJsZV9tYXAoKTsKLQogCXBhZ2luZ19pbml0KCk7CisKKwlzbXBfc2V0dXBfY3B1X3Bvc3NpYmxlX21hcCgpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBzZXRfcHJlZmVycmVkX2NvbnNvbGUodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKaW5kZXggZTMxMWFkZS4uMjc2ZjIyOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc21wLmMKQEAgLTM0LDcgKzM0LDYgQEAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY3B1ZGF0YS5oPgogCi12b2xhdGlsZSBpbnQgc21wX3Byb2Nlc3NvcnNfcmVhZHkgPSAwOwogaW50IHNtcF9udW1fY3B1cyA9IDE7CiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNwdV9jYWxsaW5fbWFwW05SX0NQVVNdIF9faW5pdGRhdGEgPSB7MCx9OwogdW5zaWduZWQgY2hhciBib290X2NwdV9pZCA9IDA7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40ZF9zbXAuYyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jCmluZGV4IGJhODQzZjYuLjNmZjRlZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jCkBAIC00Miw3ICs0Miw3IEBACiAKIGV4dGVybiB2b2lkIGNhbGlicmF0ZV9kZWxheSh2b2lkKTsKIAotZXh0ZXJuIHZvbGF0aWxlIGludCBzbXBfcHJvY2Vzc29yc19yZWFkeTsKK3N0YXRpYyB2b2xhdGlsZSBpbnQgc21wX3Byb2Nlc3NvcnNfcmVhZHkgPSAwOwogc3RhdGljIGludCBzbXBfaGlnaGVzdF9jcHU7CiBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjcHVfY2FsbGluX21hcFtOUl9DUFVTXTsKIGV4dGVybiBjcHVpbmZvX3NwYXJjIGNwdV9kYXRhW05SX0NQVVNdOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNG1fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwppbmRleCAzYjMyMDk2Li43ZDRhNjQ5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zdW40bV9zbXAuYwpAQCAtMzksNyArMzksNiBAQAogCiBleHRlcm4gdm9pZCBjYWxpYnJhdGVfZGVsYXkodm9pZCk7CiAKLWV4dGVybiB2b2xhdGlsZSBpbnQgc21wX3Byb2Nlc3NvcnNfcmVhZHk7CiBleHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBjcHVfY2FsbGluX21hcFtOUl9DUFVTXTsKIGV4dGVybiB1bnNpZ25lZCBjaGFyIGJvb3RfY3B1X2lkOwogCkBAIC0yMTcsNyArMjE2LDYgQEAKIAl9CiAKIAkvKiBPaywgdGhleSBhcmUgc3Bpbm5pbmcgYW5kIHJlYWR5IHRvIGdvLiAqLwotCXNtcF9wcm9jZXNzb3JzX3JlYWR5ID0gMTsKIH0KIAogLyogQXQgZWFjaCBoYXJkd2FyZSBJUlEsIHdlIGdldCB0aGlzIGNhbGxlZCB0byBmb3J3YXJkIElSUSByZWNlcHRpb24KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjLmMKaW5kZXggYTQxYzhhNS4uODk2ODYzZiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjLmMKQEAgLTIxOSw2ICsyMTksMjEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgc3BhcmNfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlmIChBUkNIX1NVTjRDX1NVTjQgJiYKKwkgICAgKGxlbiA+IDB4MjAwMDAwMDAgfHwKKwkgICAgICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmCisJICAgICAgYWRkciA8IDB4ZTAwMDAwMDAgJiYgYWRkciArIGxlbiA+IDB4MjAwMDAwMDApKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZWUgYXNtLXNwYXJjL3VhY2Nlc3MuaCAqLworCWlmIChsZW4gPiBUQVNLX1NJWkUgLSBQQUdFX1NJWkUgfHwgYWRkciArIGxlbiA+IFRBU0tfU0laRSAtIFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKwogLyogTGludXggdmVyc2lvbiBvZiBtbWFwICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkb19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBmZCwKQEAgLTIzMywyNSArMjQ4LDEzIEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlyZXR2YWwgPSAtRUlOVkFMOwogCWxlbiA9IFBBR0VfQUxJR04obGVuKTsKLQlpZiAoQVJDSF9TVU40Q19TVU40ICYmCi0JICAgIChsZW4gPiAweDIwMDAwMDAwIHx8Ci0JICAgICAoKGZsYWdzICYgTUFQX0ZJWEVEKSAmJgotCSAgICAgIGFkZHIgPCAweGUwMDAwMDAwICYmIGFkZHIgKyBsZW4gPiAweDIwMDAwMDAwKSkpCi0JCWdvdG8gb3V0X3B1dGY7Ci0KLQkvKiBTZWUgYXNtLXNwYXJjL3VhY2Nlc3MuaCAqLwotCWlmIChsZW4gPiBUQVNLX1NJWkUgLSBQQUdFX1NJWkUgfHwgYWRkciArIGxlbiA+IFRBU0tfU0laRSAtIFBBR0VfU0laRSkKLQkJZ290byBvdXRfcHV0ZjsKLQogCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKIAogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJcmV0dmFsID0gZG9fbW1hcF9wZ29mZihmaWxlLCBhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBwZ29mZik7CiAJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLW91dF9wdXRmOgogCWlmIChmaWxlKQogCQlmcHV0KGZpbGUpOwogb3V0OgpAQCAtNDY3LDE5ICs0NzAsMjEgQEAKIHsKICAJaW50IG5sZW4sIGVycjsKICAJCi0JaWYgKGxlbiA8IDAgfHwgbGVuID4gX19ORVdfVVRTX0xFTikKKwlpZiAobGVuIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKICAJZG93bl9yZWFkKCZ1dHNfc2VtKTsKICAJCiAJbmxlbiA9IHN0cmxlbihzeXN0ZW1fdXRzbmFtZS5kb21haW5uYW1lKSArIDE7Ci0JaWYgKG5sZW4gPCBsZW4pCi0JCWxlbiA9IG5sZW47CisJZXJyID0gLUVJTlZBTDsKKwlpZiAobmxlbiA+IGxlbikKKwkJZ290byBvdXQ7CiAKIAllcnIgPSAtRUZBVUxUOwotCWlmICghY29weV90b191c2VyKG5hbWUsIHN5c3RlbV91dHNuYW1lLmRvbWFpbm5hbWUsIGxlbikpCisJaWYgKCFjb3B5X3RvX3VzZXIobmFtZSwgc3lzdGVtX3V0c25hbWUuZG9tYWlubmFtZSwgbmxlbikpCiAJCWVyciA9IDA7CiAKK291dDoKIAl1cF9yZWFkKCZ1dHNfc2VtKTsKIAlyZXR1cm4gZXJyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCmluZGV4IDA0ZWIxZWEuLjg0NTA4MWIwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdGltZS5jCkBAIC0yMjUsNiArMjI1LDMyIEBACiAJcmV0dXJuIChkYXRhMSA9PSBkYXRhMik7CS8qIFdhcyB0aGUgd3JpdGUgYmxvY2tlZD8gKi8KIH0KIAorc3RhdGljIHZvaWQgX19pbml0IG1vc3Rla19zZXRfc3lzdGVtX3RpbWUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjOworCXN0cnVjdCBtb3N0ZWs0OHQwMiAqbXJlZ3M7CisKKwltcmVncyA9IChzdHJ1Y3QgbW9zdGVrNDh0MDIgKiltc3RrNDh0MDJfcmVnczsKKwlpZighbXJlZ3MpIHsKKwkJcHJvbV9wcmludGYoIlNvbWV0aGluZyB3cm9uZywgY2xvY2sgcmVncyBub3QgbWFwcGVkIHlldC5cbiIpOworCQlwcm9tX2hhbHQoKTsKKwl9CQkKKwlzcGluX2xvY2tfaXJxKCZtb3N0ZWtfbG9jayk7CisJbXJlZ3MtPmNyZWcgfD0gTVNUS19DUkVHX1JFQUQ7CisJc2VjID0gTVNUS19SRUdfU0VDKG1yZWdzKTsKKwltaW4gPSBNU1RLX1JFR19NSU4obXJlZ3MpOworCWhvdXIgPSBNU1RLX1JFR19IT1VSKG1yZWdzKTsKKwlkYXkgPSBNU1RLX1JFR19ET00obXJlZ3MpOworCW1vbiA9IE1TVEtfUkVHX01PTlRIKG1yZWdzKTsKKwl5ZWFyID0gTVNUS19DVlRfWUVBUiggTVNUS19SRUdfWUVBUihtcmVncykgKTsKKwl4dGltZS50dl9zZWMgPSBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKKwl4dGltZS50dl9uc2VjID0gKElOSVRJQUxfSklGRklFUyAlIEhaKSAqIChOU0VDX1BFUl9TRUMgLyBIWik7CisgICAgICAgIHNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOworCW1yZWdzLT5jcmVnICY9IH5NU1RLX0NSRUdfUkVBRDsKKwlzcGluX3VubG9ja19pcnEoJm1vc3Rla19sb2NrKTsKK30KKwogLyogUHJvYmUgZm9yIHRoZSByZWFsIHRpbWUgY2xvY2sgY2hpcCBvbiBTdW40ICovCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHN1bjRfY2xvY2tfcHJvYmUodm9pZCkKIHsKQEAgLTI3Myw2ICsyOTksNyBAQAogI2VuZGlmCiB9CiAKKyNpZm5kZWYgQ09ORklHX1NVTjQKIHN0YXRpYyBpbnQgX19kZXZpbml0IGNsb2NrX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLCBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gb3AtPm5vZGU7CkBAIC0zMDcsNiArMzM0LDggQEAKIAlpZiAobW9zdGVrX3JlYWQobXN0azQ4dDAyX3JlZ3MgKyBNT1NURUtfU0VDKSAmIE1TVEtfU1RPUCkKIAkJa2lja19zdGFydF9jbG9jaygpOwogCisJbW9zdGVrX3NldF9zeXN0ZW1fdGltZSgpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMyNSw1NiArMzU0LDM3IEBACiAKIAogLyogUHJvYmUgZm9yIHRoZSBtb3N0ZWsgcmVhbCB0aW1lIGNsb2NrIGNoaXAuICovCi1zdGF0aWMgdm9pZCBjbG9ja19pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjbG9ja19pbml0KHZvaWQpCiB7Ci0Jb2ZfcmVnaXN0ZXJfZHJpdmVyKCZjbG9ja19kcml2ZXIsICZvZl9idXNfdHlwZSk7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX2RyaXZlcigmY2xvY2tfZHJpdmVyLCAmb2ZfYnVzX3R5cGUpOwogfQogCisvKiBNdXN0IGJlIGFmdGVyIHN1YnN5c19pbml0Y2FsbCgpIHNvIHRoYXQgYnVzc2VzIGFyZSBwcm9iZWQuICBNdXN0CisgKiBiZSBiZWZvcmUgZGV2aWNlX2luaXRjYWxsKCkgYmVjYXVzZSB0aGluZ3MgbGlrZSB0aGUgUlRDIGRyaXZlcgorICogbmVlZCB0byBzZWUgdGhlIGNsb2NrIHJlZ2lzdGVycy4KKyAqLworZnNfaW5pdGNhbGwoY2xvY2tfaW5pdCk7CisjZW5kaWYgLyogIUNPTkZJR19TVU40ICovCisKIHZvaWQgX19pbml0IHNidXNfdGltZV9pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYzsKLQlzdHJ1Y3QgbW9zdGVrNDh0MDIgKm1yZWdzOwotCi0jaWZkZWYgQ09ORklHX1NVTjQKLQlpbnQgdGVtcDsKLQlzdHJ1Y3QgaW50ZXJzaWwgKmlyZWdzOwotI2VuZGlmCiAKIAlCVEZJWFVQU0VUX0NBTEwoYnVzX2RvX3NldHRpbWVvZmRheSwgc2J1c19kb19zZXR0aW1lb2ZkYXksIEJURklYVVBDQUxMX05PUk0pOwogCWJ0Zml4dXAoKTsKIAogCWlmIChBUkNIX1NVTjQpCiAJCXN1bjRfY2xvY2tfcHJvYmUoKTsKLQllbHNlCi0JCWNsb2NrX2luaXQoKTsKIAogCXNwYXJjX2luaXRfdGltZXJzKHRpbWVyX2ludGVycnVwdCk7CiAJCiAjaWZkZWYgQ09ORklHX1NVTjQKIAlpZihpZHByb20tPmlkX21hY2h0eXBlID09IChTTV9TVU40IHwgU01fNF8zMzApKSB7Ci0jZW5kaWYKLQltcmVncyA9IChzdHJ1Y3QgbW9zdGVrNDh0MDIgKiltc3RrNDh0MDJfcmVnczsKLQlpZighbXJlZ3MpIHsKLQkJcHJvbV9wcmludGYoIlNvbWV0aGluZyB3cm9uZywgY2xvY2sgcmVncyBub3QgbWFwcGVkIHlldC5cbiIpOwotCQlwcm9tX2hhbHQoKTsKLQl9CQkKLQlzcGluX2xvY2tfaXJxKCZtb3N0ZWtfbG9jayk7Ci0JbXJlZ3MtPmNyZWcgfD0gTVNUS19DUkVHX1JFQUQ7Ci0Jc2VjID0gTVNUS19SRUdfU0VDKG1yZWdzKTsKLQltaW4gPSBNU1RLX1JFR19NSU4obXJlZ3MpOwotCWhvdXIgPSBNU1RLX1JFR19IT1VSKG1yZWdzKTsKLQlkYXkgPSBNU1RLX1JFR19ET00obXJlZ3MpOwotCW1vbiA9IE1TVEtfUkVHX01PTlRIKG1yZWdzKTsKLQl5ZWFyID0gTVNUS19DVlRfWUVBUiggTVNUS19SRUdfWUVBUihtcmVncykgKTsKLQl4dGltZS50dl9zZWMgPSBta3RpbWUoeWVhciwgbW9uLCBkYXksIGhvdXIsIG1pbiwgc2VjKTsKLQl4dGltZS50dl9uc2VjID0gKElOSVRJQUxfSklGRklFUyAlIEhaKSAqIChOU0VDX1BFUl9TRUMgLyBIWik7Ci0gICAgICAgIHNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwotCW1yZWdzLT5jcmVnICY9IH5NU1RLX0NSRUdfUkVBRDsKLQlzcGluX3VubG9ja19pcnEoJm1vc3Rla19sb2NrKTsKLSNpZmRlZiBDT05GSUdfU1VONAorCQltb3N0ZWtfc2V0X3N5c3RlbV90aW1lKCk7CiAJfSBlbHNlIGlmKGlkcHJvbS0+aWRfbWFjaHR5cGUgPT0gKFNNX1NVTjQgfCBTTV80XzI2MCkgKSB7CiAJCS8qIGluaXRpYWxpc2UgdGhlIGludGVyc2lsIG9uIHN1bjQgKi8KKwkJdW5zaWduZWQgaW50IHllYXIsIG1vbiwgZGF5LCBob3VyLCBtaW4sIHNlYzsKKwkJaW50IHRlbXA7CisJCXN0cnVjdCBpbnRlcnNpbCAqaXJlZ3M7CiAKIAkJaXJlZ3M9aW50ZXJzaWxfY2xvY2s7CiAJCWlmKCFpcmVncykgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L0tjb25maWcgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwppbmRleCA4YTM2YmE4Li44ZDhjYTcxIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjNjQvS2NvbmZpZwpAQCAtMzQsNiArMzQsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBVURJVF9BUkNICisJYm9vbAorCWRlZmF1bHQgeQorCiBjaG9pY2UKIAlwcm9tcHQgIktlcm5lbCBwYWdlIHNpemUiCiAJZGVmYXVsdCBTUEFSQzY0X1BBR0VfU0laRV84S0IKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3NwYXJjNjQva2VybmVsL01ha2VmaWxlCmluZGV4IDg2YzlmZTMuLmUxZWFiZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9NYWtlZmlsZQpAQCAtMjUsNiArMjUsOSBAQAogb2JqLSQoQ09ORklHX1VTM19GUkVRKSArPSB1czNfY3B1ZnJlcS5vCiBvYmotJChDT05GSUdfVVMyRV9GUkVRKSArPSB1czJlX2NwdWZyZXEubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpICs9IGtwcm9iZXMubworb2JqLSQoQ09ORklHX0FVRElUKSArPSBhdWRpdC5vCitvYmotJChDT05GSUdfQVVESVQpJChDT05GSUdfU1BBUkMzMl9DT01QQVQpICs9IGNvbXBhdF9hdWRpdC5vCitvYmoteSArPSAkKG9iai15eSkKIAogaWZkZWYgQ09ORklHX1NVTk9TX0VNVUwKICAgb2JqLXkgKz0gc3lzX3N1bm9zMzIubyBzdW5vc19pb2N0bDMyLm8KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXVkaXQuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWYxOWNjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9hdWRpdC5jCkBAIC0wLDAgKzEsNjYgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworc3RhdGljIHVuc2lnbmVkIGRpcl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oPgorfjBVCit9OworCitzdGF0aWMgdW5zaWduZWQgcmVhZF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIHdyaXRlX2NsYXNzW10gPSB7CisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIGNoYXR0cl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Cit+MFUKK307CisKK2ludCBhdWRpdF9jbGFzc2lmeV9zeXNjYWxsKGludCBhYmksIHVuc2lnbmVkIHN5c2NhbGwpCit7CisjaWZkZWYgQ09ORklHX1NQQVJDMzJfQ09NUEFUCisJZXh0ZXJuIGludCBzcGFyYzMyX2NsYXNzaWZ5X3N5c2NhbGwodW5zaWduZWQpOworCWlmIChhYmkgPT0gQVVESVRfQVJDSF9TUEFSQykKKwkJcmV0dXJuIHNwYXJjMzJfY2xhc3NpZnlfc3lzY2FsbChzeXNjYWxsKTsKKyNlbmRpZgorCXN3aXRjaChzeXNjYWxsKSB7CisJY2FzZSBfX05SX29wZW46CisJCXJldHVybiAyOworCWNhc2UgX19OUl9vcGVuYXQ6CisJCXJldHVybiAzOworCWNhc2UgX19OUl9zb2NrZXRjYWxsOgorCQlyZXR1cm4gNDsKKwljYXNlIF9fTlJfZXhlY3ZlOgorCQlyZXR1cm4gNTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGF1ZGl0X2NsYXNzZXNfaW5pdCh2b2lkKQoreworI2lmZGVmIENPTkZJR19TUEFSQzMyX0NPTVBBVAorCWV4dGVybiBfX3UzMiBzcGFyYzMyX2Rpcl9jbGFzc1tdOworCWV4dGVybiBfX3UzMiBzcGFyYzMyX3dyaXRlX2NsYXNzW107CisJZXh0ZXJuIF9fdTMyIHNwYXJjMzJfcmVhZF9jbGFzc1tdOworCWV4dGVybiBfX3UzMiBzcGFyYzMyX2NoYXR0cl9jbGFzc1tdOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFXzMyLCBzcGFyYzMyX3dyaXRlX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFEXzMyLCBzcGFyYzMyX3JlYWRfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURV8zMiwgc3BhcmMzMl9kaXJfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUl8zMiwgc3BhcmMzMl9jaGF0dHJfY2xhc3MpOworI2VuZGlmCisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEUsIHdyaXRlX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFELCByZWFkX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBjaGF0dHJfY2xhc3MpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGF1ZGl0X2NsYXNzZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQva2VybmVsL2NvbXBhdF9hdWRpdC5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jb21wYXRfYXVkaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jY2E5NmM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9jb21wYXRfYXVkaXQuYwpAQCAtMCwwICsxLDM3IEBACisjaW5jbHVkZSA8YXNtLXNwYXJjL3VuaXN0ZC5oPgorCit1bnNpZ25lZCBzcGFyYzMyX2Rpcl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oPgorfjBVCit9OworCit1bnNpZ25lZCBzcGFyYzMyX2NoYXR0cl9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X2NoYW5nZV9hdHRyLmg+Cit+MFUKK307CisKK3Vuc2lnbmVkIHNwYXJjMzJfd3JpdGVfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF93cml0ZS5oPgorfjBVCit9OworCit1bnNpZ25lZCBzcGFyYzMyX3JlYWRfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9yZWFkLmg+Cit+MFUKK307CisKK2ludCBzcGFyYzMyX2NsYXNzaWZ5X3N5c2NhbGwodW5zaWduZWQgc3lzY2FsbCkKK3sKKwlzd2l0Y2goc3lzY2FsbCkgeworCWNhc2UgX19OUl9vcGVuOgorCQlyZXR1cm4gMjsKKwljYXNlIF9fTlJfb3BlbmF0OgorCQlyZXR1cm4gMzsKKwljYXNlIF9fTlJfc29ja2V0Y2FsbDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBfX05SX2V4ZWN2ZToKKwkJcmV0dXJuIDU7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjLmMKaW5kZXggMDU0ZDBhYi4uYzYwOGM5NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMuYworKysgYi9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYy5jCkBAIC01NDgsNiArNTQ4LDI2IEBACiAJcmV0dXJuIHJldDsKIH0KIAoraW50IHNwYXJjNjRfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKKwkJaWYgKGxlbiA+PSBTVEFDS19UT1AzMikKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmIGFkZHIgPiBTVEFDS19UT1AzMiAtIGxlbikKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChsZW4gPj0gVkFfRVhDTFVERV9TVEFSVCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCWlmICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmIGludmFsaWRfNjRiaXRfcmFuZ2UoYWRkciwgbGVuKSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCiAvKiBMaW51eCB2ZXJzaW9uIG9mIG1tYXAgKi8KIGFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBzeXNfbW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBmZCwKQEAgLTU2MywyNyArNTgzLDExIEBACiAJfQogCWZsYWdzICY9IH4oTUFQX0VYRUNVVEFCTEUgfCBNQVBfREVOWVdSSVRFKTsKIAlsZW4gPSBQQUdFX0FMSUdOKGxlbik7Ci0JcmV0dmFsID0gLUVJTlZBTDsKLQotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCkpIHsKLQkJaWYgKGxlbiA+PSBTVEFDS19UT1AzMikKLQkJCWdvdG8gb3V0X3B1dGY7Ci0KLQkJaWYgKChmbGFncyAmIE1BUF9GSVhFRCkgJiYgYWRkciA+IFNUQUNLX1RPUDMyIC0gbGVuKQotCQkJZ290byBvdXRfcHV0ZjsKLQl9IGVsc2UgewotCQlpZiAobGVuID49IFZBX0VYQ0xVREVfU1RBUlQpCi0JCQlnb3RvIG91dF9wdXRmOwotCi0JCWlmICgoZmxhZ3MgJiBNQVBfRklYRUQpICYmIGludmFsaWRfNjRiaXRfcmFuZ2UoYWRkciwgbGVuKSkKLQkJCWdvdG8gb3V0X3B1dGY7Ci0JfQogCiAJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAlyZXR2YWwgPSBkb19tbWFwKGZpbGUsIGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIG9mZik7CiAJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLW91dF9wdXRmOgogCWlmIChmaWxlKQogCQlmcHV0KGZpbGUpOwogb3V0OgpAQCAtNzAzLDE5ICs3MDcsMjEgQEAKIHsKICAgICAgICAgaW50IG5sZW4sIGVycjsKIAotCWlmIChsZW4gPCAwIHx8IGxlbiA+IF9fTkVXX1VUU19MRU4pCisJaWYgKGxlbiA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAgCWRvd25fcmVhZCgmdXRzX3NlbSk7CiAgCQogCW5sZW4gPSBzdHJsZW4oc3lzdGVtX3V0c25hbWUuZG9tYWlubmFtZSkgKyAxOwotICAgICAgICBpZiAobmxlbiA8IGxlbikKLSAgICAgICAgICAgICAgICBsZW4gPSBubGVuOworCWVyciA9IC1FSU5WQUw7CisJaWYgKG5sZW4gPiBsZW4pCisJCWdvdG8gb3V0OwogCiAJZXJyID0gLUVGQVVMVDsKLQlpZiAoIWNvcHlfdG9fdXNlcihuYW1lLCBzeXN0ZW1fdXRzbmFtZS5kb21haW5uYW1lLCBsZW4pKQorCWlmICghY29weV90b191c2VyKG5hbWUsIHN5c3RlbV91dHNuYW1lLmRvbWFpbm5hbWUsIG5sZW4pKQogCQllcnIgPSAwOwogCitvdXQ6CiAJdXBfcmVhZCgmdXRzX3NlbSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9nZW5lcmljLmMgYi9hcmNoL3NwYXJjNjQvbW0vZ2VuZXJpYy5jCmluZGV4IDhjYjA2MjAuLmFmOWQ4MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9nZW5lcmljLmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2dlbmVyaWMuYwpAQCAtNjksNiArNjksOCBAQAogCQl9IGVsc2UKIAkJCW9mZnNldCArPSBQQUdFX1NJWkU7CiAKKwkJaWYgKHB0ZV93cml0ZShlbnRyeSkpCisJCQllbnRyeSA9IHB0ZV9ta2RpcnR5KGVudHJ5KTsKIAkJZG8gewogCQkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CiAJCQlzZXRfcHRlX2F0KG1tLCBhZGRyZXNzLCBwdGUsIGVudHJ5KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUyBiL2FyY2gvdW0va2VybmVsL2R5bi5sZHMuUwppbmRleCAyNTE3ZWNiLi42OGVkMjRkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9keW4ubGRzLlMKKysrIGIvYXJjaC91bS9rZXJuZWwvZHluLmxkcy5TCkBAIC0yNiw2ICsyNiw3IEBACiAKICAgLyogUmVhZC1vbmx5IHNlY3Rpb25zLCBtZXJnZWQgaW50byB0ZXh0IHNlZ21lbnQ6ICovCiAgIC5oYXNoICAgICAgICAgICA6IHsgKiguaGFzaCkgfQorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CiAgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CiAgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CiAgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvdjg1MC9rZXJuZWwvc2V0dXAuYwppbmRleCA2MmJkYjhkLi4xYmY2NzJhIDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC9zZXR1cC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIGFyY2gvdjg1MC9rZXJuZWwvc2V0dXAuYyAtLSBBcmNoLWRlcGVuZGVudCBpbml0aWFsaXphdGlvbiBmdW5jdGlvbnMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzLDA1ICBORUMgRWxlY3Ryb25pY3MgQ29ycG9yYXRpb24KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEsMDIsMDMsMDUgIE1pbGVzIEJhZGVyIDxtaWxlc0BnbnUub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwMSwwMiwwMywwNSwwNiAgTkVDIEVsZWN0cm9uaWNzIENvcnBvcmF0aW9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxLDAyLDAzLDA1LDA2ICBNaWxlcyBCYWRlciA8bWlsZXNAZ251Lm9yZz4KICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCkBAIC0xOTAsNyArMTkwLDcgQEAKIAkJZm9yIChhZGRyID0gc3RhcnQ7IGFkZHIgPCBlbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHZpcnRfdG9fcGFnZSAoYWRkcik7CiAJCQlDbGVhclBhZ2VSZXNlcnZlZCAocGFnZSk7Ci0JCQlzZXRfcGFnZV9jb3VudCAocGFnZSwgMSk7CisJCQlpbml0X3BhZ2VfY291bnQgKHBhZ2UpOwogCQkJX19mcmVlX3BhZ2UgKHBhZ2UpOwogCQkJdG90YWxfcmFtX3BhZ2VzKys7CiAJCX0KZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvdjg1MF9rc3ltcy5jIGIvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKaW5kZXggYzAzYWQ2ZS4uNjdiYzQ4ZSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC92ODUwX2tzeW1zLmMKQEAgLTIxLDkgKzIxLDYgQEAKIAogLyogcGxhdGZvcm0gZGVwZW5kZW50IHN1cHBvcnQgKi8KIEVYUE9SVF9TWU1CT0wgKGtlcm5lbF90aHJlYWQpOwotRVhQT1JUX1NZTUJPTCAoZW5hYmxlX2lycSk7Ci1FWFBPUlRfU1lNQk9MIChkaXNhYmxlX2lycSk7Ci1FWFBPUlRfU1lNQk9MIChkaXNhYmxlX2lycV9ub3N5bmMpOwogRVhQT1JUX1NZTUJPTCAoX19idWcpOwogCiAvKiBOZXR3b3JraW5nIGhlbHBlciByb3V0aW5lcy4gKi8KQEAgLTMzLDIyICszMCw5IEBACiBFWFBPUlRfU1lNQk9MIChpcF9mYXN0X2NzdW0pOwogCiAvKiBzdHJpbmcgLyBtZW0gZnVuY3Rpb25zICovCi1FWFBPUlRfU1lNQk9MIChzdHJjcHkpOwotRVhQT1JUX1NZTUJPTCAoc3RybmNweSk7Ci1FWFBPUlRfU1lNQk9MIChzdHJjYXQpOwotRVhQT1JUX1NZTUJPTCAoc3RybmNhdCk7Ci1FWFBPUlRfU1lNQk9MIChzdHJjbXApOwotRVhQT1JUX1NZTUJPTCAoc3RybmNtcCk7Ci1FWFBPUlRfU1lNQk9MIChzdHJjaHIpOwotRVhQT1JUX1NZTUJPTCAoc3RybGVuKTsKLUVYUE9SVF9TWU1CT0wgKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTCAoc3RycmNocik7Ci1FWFBPUlRfU1lNQk9MIChzdHJzdHIpOwogRVhQT1JUX1NZTUJPTCAobWVtc2V0KTsKIEVYUE9SVF9TWU1CT0wgKG1lbWNweSk7CiBFWFBPUlRfU1lNQk9MIChtZW1tb3ZlKTsKLUVYUE9SVF9TWU1CT0wgKG1lbWNtcCk7Ci1FWFBPUlRfU1lNQk9MIChtZW1zY2FuKTsKIAogLyogc2VtYXBob3JlcyAqLwogRVhQT1JUX1NZTUJPTCAoX19kb3duKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IDI4ZGY3ZDguLjZjZDQ4NzggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtODUsNiArODUsMTAgQEAKIAlib29sCiAJZGVmYXVsdCB5CiAKK2NvbmZpZyBBVURJVF9BUkNICisJYm9vbAorCWRlZmF1bHQgeQorCiBzb3VyY2UgImluaXQvS2NvbmZpZyIKIAogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9jcnlwdG8vTWFrZWZpbGUgYi9hcmNoL3g4Nl82NC9jcnlwdG8vTWFrZWZpbGUKaW5kZXggNDI2ZDIwZi4uMTViNTM4YSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvY3J5cHRvL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by9NYWtlZmlsZQpAQCAtNSw1ICs1LDggQEAKICMgCiAKIG9iai0kKENPTkZJR19DUllQVE9fQUVTX1g4Nl82NCkgKz0gYWVzLXg4Nl82NC5vCitvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0KSArPSB0d29maXNoLXg4Nl82NC5vCiAKIGFlcy14ODZfNjQteSA6PSBhZXMteDg2XzY0LWFzbS5vIGFlcy5vCit0d29maXNoLXg4Nl82NC15IDo9IHR3b2Zpc2gteDg2XzY0LWFzbS5vIHR3b2Zpc2gubworCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMgYi9hcmNoL3g4Nl82NC9jcnlwdG8vYWVzLmMKaW5kZXggNjg4NjZmYS4uNWNkYjEzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvY3J5cHRvL2Flcy5jCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by9hZXMuYwpAQCAtMjI4LDEzICsyMjgsMTQgQEAKIH0KIAogc3RhdGljIGludCBhZXNfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAotCQkgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKIAlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7CisJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKIAl1MzIgaSwgaiwgdCwgdSwgdiwgdzsKIAotCWlmIChrZXlfbGVuICE9IDE2ICYmIGtleV9sZW4gIT0gMjQgJiYga2V5X2xlbiAhPSAzMikgeworCWlmIChrZXlfbGVuICUgOCkgewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CiAJCXJldHVybiAtRUlOVkFMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2NyeXB0by90d29maXNoLXg4Nl82NC1hc20uUyBiL2FyY2gveDg2XzY0L2NyeXB0by90d29maXNoLXg4Nl82NC1hc20uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTk3NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODZfNjQvY3J5cHRvL3R3b2Zpc2gteDg2XzY0LWFzbS5TCkBAIC0wLDAgKzEsMzI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgQ29weXJpZ2h0IChDKSAyMDA2IGJ5IEpvYWNoaW0gRnJpdHNjaGksIDxqZnJpdHNjaGlAZnJlZW5ldC5kZT4gICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5ICAqCisqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgICoKKyogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAgICAgKgorKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgICAgICAgKgorKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mICAgICAgICAqCisqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSAgICAgICAgICoKKyogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgICAgICoKKyogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLmZpbGUgInR3b2Zpc2gteDg2XzY0LWFzbS5TIgorLnRleHQKKworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCisjZGVmaW5lIGFfb2Zmc2V0CTAKKyNkZWZpbmUgYl9vZmZzZXQJNAorI2RlZmluZSBjX29mZnNldAk4CisjZGVmaW5lIGRfb2Zmc2V0CTEyCisKKy8qIFN0cnVjdHVyZSBvZiB0aGUgY3J5cHRvIGNvbnRleHQgc3RydWN0Ki8KKworI2RlZmluZSBzMAkwCS8qIFMwIEFycmF5IDI1NiBXb3JkcyBlYWNoICovCisjZGVmaW5lIHMxCTEwMjQJLyogUzEgQXJyYXkgKi8KKyNkZWZpbmUgczIJMjA0OAkvKiBTMiBBcnJheSAqLworI2RlZmluZSBzMwkzMDcyCS8qIFMzIEFycmF5ICovCisjZGVmaW5lIHcJNDA5NgkvKiA4IHdoaXRlbmluZyBrZXlzICh3b3JkKSAqLworI2RlZmluZSBrCTQxMjgJLyoga2V5IDEtMzIgKCB3b3JkICkgKi8KKworLyogZGVmaW5lIGEgZmV3IHJlZ2lzdGVyIGFsaWFzZXMgdG8gYWxsb3cgbWFjcm8gc3Vic3RpdHV0aW9uICovCisKKyNkZWZpbmUgUjAgICAgICVyYXgKKyNkZWZpbmUgUjBEICAgICVlYXgKKyNkZWZpbmUgUjBCICAgICVhbAorI2RlZmluZSBSMEggICAgJWFoCisKKyNkZWZpbmUgUjEgICAgICVyYngKKyNkZWZpbmUgUjFEICAgICVlYngKKyNkZWZpbmUgUjFCICAgICVibAorI2RlZmluZSBSMUggICAgJWJoCisKKyNkZWZpbmUgUjIgICAgICVyY3gKKyNkZWZpbmUgUjJEICAgICVlY3gKKyNkZWZpbmUgUjJCICAgICVjbAorI2RlZmluZSBSMkggICAgJWNoCisKKyNkZWZpbmUgUjMgICAgICVyZHgKKyNkZWZpbmUgUjNEICAgICVlZHgKKyNkZWZpbmUgUjNCICAgICVkbAorI2RlZmluZSBSM0ggICAgJWRoCisKKworLyogcGVyZm9ybXMgaW5wdXQgd2hpdGVuaW5nICovCisjZGVmaW5lIGlucHV0X3doaXRlbmluZyhzcmMsY29udGV4dCxvZmZzZXQpXAorCXhvcgl3K29mZnNldChjb250ZXh0KSwJc3JjOworCisvKiBwZXJmb3JtcyBpbnB1dCB3aGl0ZW5pbmcgKi8KKyNkZWZpbmUgb3V0cHV0X3doaXRlbmluZyhzcmMsY29udGV4dCxvZmZzZXQpXAorCXhvcgl3KzE2K29mZnNldChjb250ZXh0KSwJc3JjOworCisKKy8qCisgKiBhIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYSAocm90YXRlZCAxNikKKyAqIGIgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBiCisgKiBjIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYworICogZCBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGQgKGFscmVhZHkgcm9sICQxKQorICogb3BlcmF0aW9ucyBvbiBhIGFuZCBiIGFyZSBpbnRlcmxlYXZlZCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZQorICovCisjZGVmaW5lIGVuY3J5cHRfcm91bmQoYSxiLGMsZCxyb3VuZClcCisJbW92engJYiAjIyBCLAkJJWVkaTtcCisJbW92CXMxKCVyMTEsJXJkaSw0KSwlcjhkO1wKKwltb3Z6eAlhICMjIEIsCQklZWRpO1wKKwltb3YJczIoJXIxMSwlcmRpLDQpLCVyOWQ7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQliICMjIEQ7XAorCXhvcglzMiglcjExLCVyZGksNCksJXI4ZDtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJcm9yCSQxNiwJCWEgIyMgRDtcCisJeG9yCXMzKCVyMTEsJXJkaSw0KSwlcjlkO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwl4b3IJczMoJXIxMSwlcmRpLDQpLCVyOGQ7XAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCXhvcgkoJXIxMSwlcmRpLDQpLAklcjlkO1wKKwltb3Z6eAliICMjIEgsCQklZWRpO1wKKwlyb3IJJDE1LAkJYiAjIyBEO1wKKwl4b3IJKCVyMTEsJXJkaSw0KSwJJXI4ZDtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJeG9yCXMxKCVyMTEsJXJkaSw0KSwlcjlkO1wKKwlhZGQJJXI4ZCwJCSVyOWQ7XAorCWFkZAklcjlkLAkJJXI4ZDtcCisJYWRkCWsrcm91bmQoJXIxMSksCSVyOWQ7XAorCXhvcgklcjlkLAkJYyAjIyBEO1wKKwlyb2wJJDE1LAkJYyAjIyBEO1wKKwlhZGQJays0K3JvdW5kKCVyMTEpLCVyOGQ7XAorCXhvcgklcjhkLAkJZCAjIyBEOworCisvKgorICogYSBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGEocm90YXRlZCAxNikKKyAqIGIgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBiCisgKiBjIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYworICogZCBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGQgKGFscmVhZHkgcm9sICQxKQorICogb3BlcmF0aW9ucyBvbiBhIGFuZCBiIGFyZSBpbnRlcmxlYXZlZCB0byBpbmNyZWFzZSBwZXJmb3JtYW5jZQorICogZHVyaW5nIHRoZSByb3VuZCBhIGFuZCBiIGFyZSBwcmVwYXJlZCBmb3IgdGhlIG91dHB1dCB3aGl0ZW5pbmcKKyAqLworI2RlZmluZSBlbmNyeXB0X2xhc3Rfcm91bmQoYSxiLGMsZCxyb3VuZClcCisJbW92CWIgIyMgRCwJCSVyMTBkO1wKKwlzaGwJJDMyLAkJJXIxMDtcCisJbW92engJYiAjIyBCLAkJJWVkaTtcCisJbW92CXMxKCVyMTEsJXJkaSw0KSwlcjhkO1wKKwltb3Z6eAlhICMjIEIsCQklZWRpO1wKKwltb3YJczIoJXIxMSwlcmRpLDQpLCVyOWQ7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQliICMjIEQ7XAorCXhvcglzMiglcjExLCVyZGksNCksJXI4ZDtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJcm9yCSQxNiwJCWEgIyMgRDtcCisJeG9yCXMzKCVyMTEsJXJkaSw0KSwlcjlkO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwl4b3IJczMoJXIxMSwlcmRpLDQpLCVyOGQ7XAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCXhvcgkoJXIxMSwlcmRpLDQpLAklcjlkO1wKKwl4b3IJYSwJCSVyMTA7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXhvcgkoJXIxMSwlcmRpLDQpLAklcjhkO1wKKwltb3Z6eAlhICMjIEgsCQklZWRpO1wKKwl4b3IJczEoJXIxMSwlcmRpLDQpLCVyOWQ7XAorCWFkZAklcjhkLAkJJXI5ZDtcCisJYWRkCSVyOWQsCQklcjhkO1wKKwlhZGQJaytyb3VuZCglcjExKSwJJXI5ZDtcCisJeG9yCSVyOWQsCQljICMjIEQ7XAorCXJvcgkkMSwJCWMgIyMgRDtcCisJYWRkCWsrNCtyb3VuZCglcjExKSwlcjhkO1wKKwl4b3IJJXI4ZCwJCWQgIyMgRAorCisvKgorICogYSBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGEKKyAqIGIgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBiIChyb3RhdGVkIDE2KQorICogYyBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGMgKGFscmVhZHkgcm9sICQxKQorICogZCBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGQKKyAqIG9wZXJhdGlvbnMgb24gYSBhbmQgYiBhcmUgaW50ZXJsZWF2ZWQgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UKKyAqLworI2RlZmluZSBkZWNyeXB0X3JvdW5kKGEsYixjLGQscm91bmQpXAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCW1vdgkoJXIxMSwlcmRpLDQpLAklcjlkO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwltb3YJczMoJXIxMSwlcmRpLDQpLCVyOGQ7XAorCW1vdnp4CWEgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQlhICMjIEQ7XAorCXhvcglzMSglcjExLCVyZGksNCksJXI5ZDtcCisJbW92engJYiAjIyBILAkJJWVkaTtcCisJcm9yCSQxNiwJCWIgIyMgRDtcCisJeG9yCSglcjExLCVyZGksNCksCSVyOGQ7XAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCXhvcglzMiglcjExLCVyZGksNCksJXI5ZDtcCisJbW92engJYiAjIyBCLAkJJWVkaTtcCisJeG9yCXMxKCVyMTEsJXJkaSw0KSwlcjhkO1wKKwltb3Z6eAlhICMjIEgsCQklZWRpO1wKKwlyb3IJJDE1LAkJYSAjIyBEO1wKKwl4b3IJczMoJXIxMSwlcmRpLDQpLCVyOWQ7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXhvcglzMiglcjExLCVyZGksNCksJXI4ZDtcCisJYWRkCSVyOGQsCQklcjlkO1wKKwlhZGQJJXI5ZCwJCSVyOGQ7XAorCWFkZAlrK3JvdW5kKCVyMTEpLAklcjlkO1wKKwl4b3IJJXI5ZCwJCWMgIyMgRDtcCisJYWRkCWsrNCtyb3VuZCglcjExKSwlcjhkO1wKKwl4b3IJJXI4ZCwJCWQgIyMgRDtcCisJcm9sCSQxNSwJCWQgIyMgRDsKKworLyoKKyAqIGEgaW5wdXQgcmVnaXN0ZXIgY29udGFpbmluZyBhCisgKiBiIGlucHV0IHJlZ2lzdGVyIGNvbnRhaW5pbmcgYgorICogYyBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGMgKGFscmVhZHkgcm9sICQxKQorICogZCBpbnB1dCByZWdpc3RlciBjb250YWluaW5nIGQKKyAqIG9wZXJhdGlvbnMgb24gYSBhbmQgYiBhcmUgaW50ZXJsZWF2ZWQgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UKKyAqIGR1cmluZyB0aGUgcm91bmQgYSBhbmQgYiBhcmUgcHJlcGFyZWQgZm9yIHRoZSBvdXRwdXQgd2hpdGVuaW5nCisgKi8KKyNkZWZpbmUgZGVjcnlwdF9sYXN0X3JvdW5kKGEsYixjLGQscm91bmQpXAorCW1vdnp4CWEgIyMgQiwJCSVlZGk7XAorCW1vdgkoJXIxMSwlcmRpLDQpLAklcjlkO1wKKwltb3Z6eAliICMjIEIsCQklZWRpO1wKKwltb3YJczMoJXIxMSwlcmRpLDQpLCVyOGQ7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXJvcgkkMTYsCQliICMjIEQ7XAorCXhvcgkoJXIxMSwlcmRpLDQpLAklcjhkO1wKKwltb3Z6eAlhICMjIEgsCQklZWRpO1wKKwltb3YJYiAjIyBELAkJJXIxMGQ7XAorCXNobAkkMzIsCQklcjEwO1wKKwl4b3IJYSwJCSVyMTA7XAorCXJvcgkkMTYsCQlhICMjIEQ7XAorCXhvcglzMSglcjExLCVyZGksNCksJXI5ZDtcCisJbW92engJYiAjIyBCLAkJJWVkaTtcCisJeG9yCXMxKCVyMTEsJXJkaSw0KSwlcjhkO1wKKwltb3Z6eAlhICMjIEIsCQklZWRpO1wKKwl4b3IJczIoJXIxMSwlcmRpLDQpLCVyOWQ7XAorCW1vdnp4CWIgIyMgSCwJCSVlZGk7XAorCXhvcglzMiglcjExLCVyZGksNCksJXI4ZDtcCisJbW92engJYSAjIyBILAkJJWVkaTtcCisJeG9yCXMzKCVyMTEsJXJkaSw0KSwlcjlkO1wKKwlhZGQJJXI4ZCwJCSVyOWQ7XAorCWFkZAklcjlkLAkJJXI4ZDtcCisJYWRkCWsrcm91bmQoJXIxMSksCSVyOWQ7XAorCXhvcgklcjlkLAkJYyAjIyBEO1wKKwlhZGQJays0K3JvdW5kKCVyMTEpLCVyOGQ7XAorCXhvcgklcjhkLAkJZCAjIyBEO1wKKwlyb3IJJDEsCQlkICMjIEQ7CisKKy5hbGlnbiA4CisuZ2xvYmFsIHR3b2Zpc2hfZW5jX2JsaworLmdsb2JhbCB0d29maXNoX2RlY19ibGsKKwordHdvZmlzaF9lbmNfYmxrOgorCXB1c2hxICAgIFIxCisKKwkvKiAlcmRpIGNvbnRhaW5zIHRoZSBjcnlwdG8gdGZtIGFkcmVzcyAqLworCS8qICVyc2kgY29udGFpbnMgdGhlIG91dHB1dCBhZHJlc3MgKi8KKwkvKiAlcmR4IGNvbnRhaW5zIHRoZSBpbnB1dCBhZHJlc3MgKi8KKwlhZGQJJGNyeXB0b190Zm1fY3R4X29mZnNldCwgJXJkaQkvKiBzZXQgY3R4IGFkcmVzcyAqLworCS8qIGN0eCBhZHJlc3MgaXMgbW92ZWQgdG8gZnJlZSBvbmUgbm9uLXJleCByZWdpc3RlcgorCWFzIHRhcmdldCBmb3IgdGhlIDhiaXQgaGlnaCBvcGVyYXRpb25zICovCisJbW92CSVyZGksCQklcjExCisKKwltb3ZxCShSMyksCVIxCisJbW92cQk4KFIzKSwJUjMKKwlpbnB1dF93aGl0ZW5pbmcoUjEsJXIxMSxhX29mZnNldCkKKwlpbnB1dF93aGl0ZW5pbmcoUjMsJXIxMSxjX29mZnNldCkKKwltb3YJUjFELAlSMEQKKwlyb2wJJDE2LAlSMEQKKwlzaHIJJDMyLAlSMQorCW1vdglSM0QsCVIyRAorCXNocgkkMzIsCVIzCisJcm9sCSQxLAlSM0QKKworCWVuY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMCk7CisJZW5jcnlwdF9yb3VuZChSMixSMyxSMCxSMSw4KTsKKwllbmNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDIqOCk7CisJZW5jcnlwdF9yb3VuZChSMixSMyxSMCxSMSwzKjgpOworCWVuY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsNCo4KTsKKwllbmNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDUqOCk7CisJZW5jcnlwdF9yb3VuZChSMCxSMSxSMixSMyw2KjgpOworCWVuY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsNyo4KTsKKwllbmNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDgqOCk7CisJZW5jcnlwdF9yb3VuZChSMixSMyxSMCxSMSw5KjgpOworCWVuY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMTAqOCk7CisJZW5jcnlwdF9yb3VuZChSMixSMyxSMCxSMSwxMSo4KTsKKwllbmNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDEyKjgpOworCWVuY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsMTMqOCk7CisJZW5jcnlwdF9yb3VuZChSMCxSMSxSMixSMywxNCo4KTsKKwllbmNyeXB0X2xhc3Rfcm91bmQoUjIsUjMsUjAsUjEsMTUqOCk7CisKKworCW91dHB1dF93aGl0ZW5pbmcoJXIxMCwlcjExLGFfb2Zmc2V0KQorCW1vdnEJJXIxMCwJKCVyc2kpCisKKwlzaGwJJDMyLAlSMQorCXhvcglSMCwJUjEKKworCW91dHB1dF93aGl0ZW5pbmcoUjEsJXIxMSxjX29mZnNldCkKKwltb3ZxCVIxLAk4KCVyc2kpCisKKwlwb3BxCVIxCisJbW92cQkkMSwlcmF4CisJcmV0CisKK3R3b2Zpc2hfZGVjX2JsazoKKwlwdXNocSAgICBSMQorCisJLyogJXJkaSBjb250YWlucyB0aGUgY3J5cHRvIHRmbSBhZHJlc3MgKi8KKwkvKiAlcnNpIGNvbnRhaW5zIHRoZSBvdXRwdXQgYWRyZXNzICovCisJLyogJXJkeCBjb250YWlucyB0aGUgaW5wdXQgYWRyZXNzICovCisJYWRkCSRjcnlwdG9fdGZtX2N0eF9vZmZzZXQsICVyZGkJLyogc2V0IGN0eCBhZHJlc3MgKi8KKwkvKiBjdHggYWRyZXNzIGlzIG1vdmVkIHRvIGZyZWUgb25lIG5vbi1yZXggcmVnaXN0ZXIKKwlhcyB0YXJnZXQgZm9yIHRoZSA4Yml0IGhpZ2ggb3BlcmF0aW9ucyAqLworCW1vdgklcmRpLAkJJXIxMQorCisJbW92cQkoUjMpLAlSMQorCW1vdnEJOChSMyksCVIzCisJb3V0cHV0X3doaXRlbmluZyhSMSwlcjExLGFfb2Zmc2V0KQorCW91dHB1dF93aGl0ZW5pbmcoUjMsJXIxMSxjX29mZnNldCkKKwltb3YJUjFELAlSMEQKKwlzaHIJJDMyLAlSMQorCXJvbAkkMTYsCVIxRAorCW1vdglSM0QsCVIyRAorCXNocgkkMzIsCVIzCisJcm9sCSQxLAlSMkQKKworCWRlY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMTUqOCk7CisJZGVjcnlwdF9yb3VuZChSMixSMyxSMCxSMSwxNCo4KTsKKwlkZWNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDEzKjgpOworCWRlY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsMTIqOCk7CisJZGVjcnlwdF9yb3VuZChSMCxSMSxSMixSMywxMSo4KTsKKwlkZWNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDEwKjgpOworCWRlY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsOSo4KTsKKwlkZWNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDgqOCk7CisJZGVjcnlwdF9yb3VuZChSMCxSMSxSMixSMyw3KjgpOworCWRlY3J5cHRfcm91bmQoUjIsUjMsUjAsUjEsNio4KTsKKwlkZWNyeXB0X3JvdW5kKFIwLFIxLFIyLFIzLDUqOCk7CisJZGVjcnlwdF9yb3VuZChSMixSMyxSMCxSMSw0KjgpOworCWRlY3J5cHRfcm91bmQoUjAsUjEsUjIsUjMsMyo4KTsKKwlkZWNyeXB0X3JvdW5kKFIyLFIzLFIwLFIxLDIqOCk7CisJZGVjcnlwdF9yb3VuZChSMCxSMSxSMixSMywxKjgpOworCWRlY3J5cHRfbGFzdF9yb3VuZChSMixSMyxSMCxSMSwwKTsKKworCWlucHV0X3doaXRlbmluZyglcjEwLCVyMTEsYV9vZmZzZXQpCisJbW92cQklcjEwLAkoJXJzaSkKKworCXNobAkkMzIsCVIxCisJeG9yCVIwLAlSMQorCisJaW5wdXRfd2hpdGVuaW5nKFIxLCVyMTEsY19vZmZzZXQpCisJbW92cQlSMSwJOCglcnNpKQorCisJcG9wcQlSMQorCW1vdnEJJDEsJXJheAorCXJldApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvY3J5cHRvL3R3b2Zpc2guYyBiL2FyY2gveDg2XzY0L2NyeXB0by90d29maXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTgyZDkxZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2XzY0L2NyeXB0by90d29maXNoLmMKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIEdsdWUgQ29kZSBmb3Igb3B0aW1pemVkIHg4Nl82NCBhc3NlbWJsZXIgdmVyc2lvbiBvZiBUV09GSVNICisgKgorICogT3JpZ2luYWxseSBUd29maXNoIGZvciBHUEcKKyAqIEJ5IE1hdHRoZXcgU2thbGEgPG1za2FsYUBhbnN1ei5zb29rZS5iYy5jYT4sIEp1bHkgMjYsIDE5OTgKKyAqIDI1Ni1iaXQga2V5IGxlbmd0aCBhZGRlZCBNYXJjaCAyMCwgMTk5OQorICogU29tZSBtb2RpZmljYXRpb25zIHRvIHJlZHVjZSB0aGUgdGV4dCBzaXplIGJ5IFdlcm5lciBLb2NoLCBBcHJpbCwgMTk5OAorICogUG9ydGVkIHRvIHRoZSBrZXJuZWxpIHBhdGNoIGJ5IE1hcmMgTXV0eiA8TWFyY0BNdXR6LmNvbT4KKyAqIFBvcnRlZCB0byBDcnlwdG9BUEkgYnkgQ29saW4gU2xhdGVyIDxob2hvQHRhY29tZWF0Lm5ldD4KKyAqCisgKiBUaGUgb3JpZ2luYWwgYXV0aG9yIGhhcyBkaXNjbGFpbWVkIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhpcworICogY29kZSBhbmQgdGh1cyBwdXQgaXQgaW4gdGhlIHB1YmxpYyBkb21haW4uIFRoZSBzdWJzZXF1ZW50IGF1dGhvcnMKKyAqIGhhdmUgcHV0IHRoaXMgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3CisgKiBVU0EKKyAqCisgKiBUaGlzIGNvZGUgaXMgYSAiY2xlYW4gcm9vbSIgaW1wbGVtZW50YXRpb24sIHdyaXR0ZW4gZnJvbSB0aGUgcGFwZXIKKyAqIF9Ud29maXNoOiBBIDEyOC1CaXQgQmxvY2sgQ2lwaGVyXyBieSBCcnVjZSBTY2huZWllciwgSm9obiBLZWxzZXksCisgKiBEb3VnIFdoaXRpbmcsIERhdmlkIFdhZ25lciwgQ2hyaXMgSGFsbCwgYW5kIE5pZWxzIEZlcmd1c29uLCBhdmFpbGFibGUKKyAqIHRocm91Z2ggaHR0cDovL3d3dy5jb3VudGVycGFuZS5jb20vdHdvZmlzaC5odG1sCisgKgorICogRm9yIGJhY2tncm91bmQgaW5mb3JtYXRpb24gb24gbXVsdGlwbGljYXRpb24gaW4gZmluaXRlIGZpZWxkcywgdXNlZCBmb3IKKyAqIHRoZSBtYXRyaXggb3BlcmF0aW9ucyBpbiB0aGUga2V5IHNjaGVkdWxlLCBzZWUgdGhlIGJvb2sgX0NvbnRlbXBvcmFyeQorICogQWJzdHJhY3QgQWxnZWJyYV8gYnkgSm9zZXBoIEEuIEdhbGxpYW4sIGVzcGVjaWFsbHkgY2hhcHRlciAyMiBpbiB0aGUKKyAqIFRoaXJkIEVkaXRpb24uCisgKi8KKworI2luY2x1ZGUgPGNyeXB0by90d29maXNoLmg+CisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK2FzbWxpbmthZ2Ugdm9pZCB0d29maXNoX2VuY19ibGsoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYyk7Cithc21saW5rYWdlIHZvaWQgdHdvZmlzaF9kZWNfYmxrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworCitzdGF0aWMgdm9pZCB0d29maXNoX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwl0d29maXNoX2VuY19ibGsodGZtLCBkc3QsIHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIHR3b2Zpc2hfZGVjcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCXR3b2Zpc2hfZGVjX2Jsayh0Zm0sIGRzdCwgc3JjKTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKKwkuY3JhX25hbWUJCT0JInR3b2Zpc2giLAorCS5jcmFfZHJpdmVyX25hbWUJPQkidHdvZmlzaC14ODZfNjQiLAorCS5jcmFfcHJpb3JpdHkJCT0JMjAwLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlURl9CTE9DS19TSVpFLAorCS5jcmFfY3R4c2l6ZQkJPQlzaXplb2Yoc3RydWN0IHR3b2Zpc2hfY3R4KSwKKwkuY3JhX2FsaWdubWFzawkJPQkzLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAorCS5jcmFfdQkJCT0JeworCQkuY2lwaGVyID0geworCQkJLmNpYV9taW5fa2V5c2l6ZQk9CVRGX01JTl9LRVlfU0laRSwKKwkJCS5jaWFfbWF4X2tleXNpemUJPQlURl9NQVhfS0VZX1NJWkUsCisJCQkuY2lhX3NldGtleQkJPQl0d29maXNoX3NldGtleSwKKwkJCS5jaWFfZW5jcnlwdAkJPQl0d29maXNoX2VuY3J5cHQsCisJCQkuY2lhX2RlY3J5cHQJCT0JdHdvZmlzaF9kZWNyeXB0CisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0KHZvaWQpCit7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFsZyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBmaW5pKHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhbGcpOworfQorCittb2R1bGVfaW5pdChpbml0KTsKK21vZHVsZV9leGl0KGZpbmkpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04gKCJUd29maXNoIENpcGhlciBBbGdvcml0aG0sIHg4Nl82NCBhc20gb3B0aW1pemVkIik7CitNT0RVTEVfQUxJQVMoInR3b2Zpc2giKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2RlZmNvbmZpZyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwppbmRleCA4M2QzODliLi41ZmI5NzA3IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9kZWZjb25maWcKKysrIGIvYXJjaC94ODZfNjQvZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE3LWdpdDIyCi0jIFR1ZSBKdWwgIDQgMTQ6MjQ6NDAgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjNAorIyBUaHUgQXVnIDI0IDIxOjA1OjU1IDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKQEAgLTM3LDYgKzM3LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19QT1NJWF9NUVVFVUU9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiBDT05GSUdfSUtDT05GSUc9eQpAQCAtMjAwLDcgKzIwMSw3IEBACiBDT05GSUdfQUNQSV9OVU1BPXkKICMgQ09ORklHX0FDUElfQVNVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQ1BJX0lCTSBpcyBub3Qgc2V0Ci1DT05GSUdfQUNQSV9UT1NISUJBPXkKKyMgQ09ORklHX0FDUElfVE9TSElCQSBpcyBub3Qgc2V0CiBDT05GSUdfQUNQSV9CTEFDS0xJU1RfWUVBUj0wCiAjIENPTkZJR19BQ1BJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19BQ1BJX0VDPXkKQEAgLTIxNSw3ICsyMTYsNyBAQAogIwogQ09ORklHX0NQVV9GUkVRPXkKIENPTkZJR19DUFVfRlJFUV9UQUJMRT15Ci0jIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfREVCVUc9eQogQ09ORklHX0NQVV9GUkVRX1NUQVQ9eQogIyBDT05GSUdfQ1BVX0ZSRVFfU1RBVF9ERVRBSUxTIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9QRVJGT1JNQU5DRT15CkBAIC00MTMsNiArNDE0LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKQEAgLTQ5Myw4ICs0OTUsOSBAQAogQ09ORklHX0JMS19ERVZfU0Q9eQogIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX1NHIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPXkKKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKICMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKIAogIwpAQCAtNTEwLDcgKzUxMyw3IEBACiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9TQVNfQVRUUlM9eQogCiAjCiAjIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKQEAgLTUzNiw3ICs1MzksNyBAQAogQ09ORklHX01FR0FSQUlEX1NBUz15CiBDT05GSUdfU0NTSV9TQVRBPXkKIENPTkZJR19TQ1NJX1NBVEFfQUhDST15Ci0jIENPTkZJR19TQ1NJX1NBVEFfU1ZXIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1NBVEFfU1ZXPXkKIENPTkZJR19TQ1NJX0FUQV9QSUlYPXkKICMgQ09ORklHX1NDU0lfU0FUQV9NViBpcyBub3Qgc2V0CiBDT05GSUdfU0NTSV9TQVRBX05WPXkKQEAgLTU4Nyw3ICs1OTAsNyBAQAogQ09ORklHX0ZVU0lPTj15CiBDT05GSUdfRlVTSU9OX1NQST15CiAjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAotIyBDT05GSUdfRlVTSU9OX1NBUyBpcyBub3Qgc2V0CitDT05GSUdfRlVTSU9OX1NBUz15CiBDT05GSUdfRlVTSU9OX01BWF9TR0U9MTI4CiAjIENPTkZJR19GVVNJT05fQ1RMIGlzIG5vdCBzZXQKIApAQCAtNjczLDcgKzY3Niw3IEBACiAjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAotIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKK0NPTkZJR19CNDQ9eQogQ09ORklHX0ZPUkNFREVUSD15CiAjIENPTkZJR19ER1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPMTAwIGlzIG5vdCBzZXQKQEAgLTcxMCw3ICs3MTMsNyBAQAogIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15Ci0jIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19CTlgyPXkKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKQEAgLTg0MCw0NCArODQzLDcgQEAKICMKICMgV2F0Y2hkb2cgQ2FyZHMKICMKLUNPTkZJR19XQVRDSERPRz15Ci0jIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKLSMKLUNPTkZJR19TT0ZUX1dBVENIRE9HPXkKLSMgQ09ORklHX0FDUVVJUkVfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FEVkFOVEVDSF9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfQUxJTTE1MzVfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzUyMF9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfRVVST1RFQ0hfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lCNzAwX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JQk1BU1IgaXMgbm90IHNldAotIyBDT05GSUdfV0FGRVJfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0k2MzAwRVNCX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JOFhYX1RDTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQzEyMDBfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHXzYwWFhfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NCQzgzNjBfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVTVfV0RUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1c4MzYyN0hGX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XODM4NzdGX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XODM5NzdGX1dEVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIWl9XRFQgaXMgbm90IHNldAotIyBDT05GSUdfU0JDX0VQWF9DM19XQVRDSERPRyBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19IV19SQU5ET009eQogQ09ORklHX0hXX1JBTkRPTV9JTlRFTD15CiBDT05GSUdfSFdfUkFORE9NX0FNRD15CkBAIC0xMDU0LDYgKzEwMjAsNyBAQAogQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRT0yNTYKIENPTkZJR19WSURFT19TRUxFQ1Q9eQogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBTb3VuZApAQCAtMTE5NSw3ICsxMTYyLDcgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldApAQCAtMTI5OSw3ICsxMjY2LDcgQEAKIENPTkZJR19JTk9USUZZX1VTRVI9eQogIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0FVVE9GU19GUz15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0FVVE9GUzRfRlM9eQogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKQEAgLTEzNzMsNyArMTM0MCw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC0xNDkzLDQgKzE0NTksNSBAQAogIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19QTElTVD15CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlIGIvYXJjaC94ODZfNjQvaWEzMi9NYWtlZmlsZQppbmRleCA2MmJjNWY1Li5jZGFlMzY0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL01ha2VmaWxlCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvTWFrZWZpbGUKQEAgLTIzLDYgKzIzLDcgQEAKICMgVGhlIERTTyBpbWFnZXMgYXJlIGJ1aWx0IHVzaW5nIGEgc3BlY2lhbCBsaW5rZXIgc2NyaXB0CiBxdWlldF9jbWRfc3lzY2FsbCA9IFNZU0NBTEwgJEAKICAgICAgIGNtZF9zeXNjYWxsID0gJChDQykgLW0zMiAtbm9zdGRsaWIgLXNoYXJlZCAtcyBcCisJCQkgICQoY2FsbCBsZC1vcHRpb24sIC1XbCQoY29tbWEpLS1oYXNoLXN0eWxlPXN5c3YpIFwKIAkJCSAgIC1XbCwtc29uYW1lPWxpbnV4LWdhdGUuc28uMSAtbyAkQCBcCiAJCQkgICAtV2wsLVQsJChmaWx0ZXItb3V0IEZPUkNFLCReKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2F1ZGl0LmMgYi9hcmNoL3g4Nl82NC9pYTMyL2F1ZGl0LmMKaW5kZXggYWI5NGYyZS4uOTJkN2QwYyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9hdWRpdC5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvYXVkaXQuYwpAQCAtOSwzICs5LDI5IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYXVkaXRfY2hhbmdlX2F0dHIuaD4KIH4wVQogfTsKKwordW5zaWduZWQgaWEzMl93cml0ZV9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3dyaXRlLmg+Cit+MFUKK307CisKK3Vuc2lnbmVkIGlhMzJfcmVhZF9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaD4KK34wVQorfTsKKworaW50IGlhMzJfY2xhc3NpZnlfc3lzY2FsbCh1bnNpZ25lZCBzeXNjYWxsKQoreworCXN3aXRjaChzeXNjYWxsKSB7CisJY2FzZSBfX05SX29wZW46CisJCXJldHVybiAyOworCWNhc2UgX19OUl9vcGVuYXQ6CisJCXJldHVybiAzOworCWNhc2UgX19OUl9zb2NrZXRjYWxsOgorCQlyZXR1cm4gNDsKKwljYXNlIF9fTlJfZXhlY3ZlOgorCQlyZXR1cm4gNTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gMTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMgYi9hcmNoL3g4Nl82NC9pYTMyL2lhMzJfYmluZm10LmMKaW5kZXggYTlkYzBmMy4uMmZkNWE2NyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvaWEzMi9pYTMyX2JpbmZtdC5jCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMl9iaW5mbXQuYwpAQCAtNzMsMzkgKzczLDQ0IEBACiAgKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KICAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSB2c3lzY2FsbCBEU08gd2FzIGJlaW5nIHVzZWQuCiAgKi8KLSNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJCShWU1lTQ0FMTDMyX0VIRFItPmVfcGhudW0pCisjZGVmaW5lIEVMRl9DT1JFX0VYVFJBX1BIRFJTCShmaW5kX3ZtYShjdXJyZW50LT5tbSwgVlNZU0NBTEwzMl9CQVNFKSA/ICAgICBcCisgICAgKFZTWVNDQUxMMzJfRUhEUi0+ZV9waG51bSkgOiAwKQogI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwkJCQkJICAgICAgXAogZG8gewkJCQkJCQkJCSAgICAgIFwKLQljb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqY29uc3QgdnN5c2NhbGxfcGhkcnMgPQkJCSAgICAgIFwKLQkJKGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICopIChWU1lTQ0FMTDMyX0JBU0UJCSAgICAgIFwKLQkJCQkJICAgKyBWU1lTQ0FMTDMyX0VIRFItPmVfcGhvZmYpOwkgICAgICBcCi0JaW50IGk7CQkJCQkJCQkgICAgICBcCi0JRWxmMzJfT2ZmIG9mcyA9IDA7CQkJCQkJICAgICAgXAotCWZvciAoaSA9IDA7IGkgPCBWU1lTQ0FMTDMyX0VIRFItPmVfcGhudW07ICsraSkgewkJICAgICAgXAotCQlzdHJ1Y3QgZWxmMzJfcGhkciBwaGRyID0gdnN5c2NhbGxfcGhkcnNbaV07CQkgICAgICBcCi0JCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CQkJCSAgICAgIFwKLQkJCUJVR19PTihvZnMgIT0gMCk7CQkJCSAgICAgIFwKLQkJCW9mcyA9IHBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CQkJICAgICAgXAotCQkJcGhkci5wX21lbXN6ID0gUEFHRV9BTElHTihwaGRyLnBfbWVtc3opOwkgICAgICBcCi0JCQlwaGRyLnBfZmlsZXN6ID0gcGhkci5wX21lbXN6OwkJCSAgICAgIFwKLQkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwkJCSAgICAgIFwKKwlpZiAoZmluZF92bWEoY3VycmVudC0+bW0sIFZTWVNDQUxMMzJfQkFTRSkpIHsgCQkJICAgICAgXAorCQljb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqY29uc3QgdnN5c2NhbGxfcGhkcnMgPQkJICAgICAgXAorCQkJKGNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICopIChWU1lTQ0FMTDMyX0JBU0UJICAgICAgXAorCQkJCQkJICAgKyBWU1lTQ0FMTDMyX0VIRFItPmVfcGhvZmYpO1wKKwkJaW50IGk7CQkJCQkJCSAgICAgIFwKKwkJRWxmMzJfT2ZmIG9mcyA9IDA7CQkJCQkgICAgICBcCisJCWZvciAoaSA9IDA7IGkgPCBWU1lTQ0FMTDMyX0VIRFItPmVfcGhudW07ICsraSkgewkgICAgICBcCisJCQlzdHJ1Y3QgZWxmMzJfcGhkciBwaGRyID0gdnN5c2NhbGxfcGhkcnNbaV07CSAgICAgIFwKKwkJCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CQkJICAgICAgXAorCQkJCUJVR19PTihvZnMgIT0gMCk7CQkJICAgICAgXAorCQkJCW9mcyA9IHBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CQkgICAgICBcCisJCQkJcGhkci5wX21lbXN6ID0gUEFHRV9BTElHTihwaGRyLnBfbWVtc3opOyAgICAgIFwKKwkJCQlwaGRyLnBfZmlsZXN6ID0gcGhkci5wX21lbXN6OwkJICAgICAgXAorCQkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwkJICAgICAgXAorCQkJfQkJCQkJCSAgICAgIFwKKwkJCWVsc2UJCQkJCQkgICAgICBcCisJCQkJcGhkci5wX29mZnNldCArPSBvZnM7CQkJICAgICAgXAorCQkJcGhkci5wX3BhZGRyID0gMDsgLyogbWF0Y2ggb3RoZXIgY29yZSBwaGRycyAqLwkgICAgICBcCisJCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOwkJICAgICAgXAogCQl9CQkJCQkJCSAgICAgIFwKLQkJZWxzZQkJCQkJCQkgICAgICBcCi0JCQlwaGRyLnBfb2Zmc2V0ICs9IG9mczsJCQkJICAgICAgXAotCQlwaGRyLnBfcGFkZHIgPSAwOyAvKiBtYXRjaCBvdGhlciBjb3JlIHBoZHJzICovCQkgICAgICBcCi0JCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CQkJICAgICAgXAogCX0JCQkJCQkJCSAgICAgIFwKIH0gd2hpbGUgKDApCiAjZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEJCQkJCSAgICAgIFwKIGRvIHsJCQkJCQkJCQkgICAgICBcCi0JY29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKmNvbnN0IHZzeXNjYWxsX3BoZHJzID0JCQkgICAgICBcCi0JCShjb25zdCBzdHJ1Y3QgZWxmMzJfcGhkciAqKSAoVlNZU0NBTEwzMl9CQVNFCQkgICAgICBcCi0JCQkJCSAgICsgVlNZU0NBTEwzMl9FSERSLT5lX3Bob2ZmKTsJICAgICAgXAotCWludCBpOwkJCQkJCQkJICAgICAgXAotCWZvciAoaSA9IDA7IGkgPCBWU1lTQ0FMTDMyX0VIRFItPmVfcGhudW07ICsraSkgewkJICAgICAgXAotCQlpZiAodnN5c2NhbGxfcGhkcnNbaV0ucF90eXBlID09IFBUX0xPQUQpCQkgICAgICBcCi0JCQlEVU1QX1dSSVRFKCh2b2lkICopICh1NjQpIHZzeXNjYWxsX3BoZHJzW2ldLnBfdmFkZHIsCSAgICAgIFwKLQkJCQkgICBQQUdFX0FMSUdOKHZzeXNjYWxsX3BoZHJzW2ldLnBfbWVtc3opKTsgICAgXAorCWlmIChmaW5kX3ZtYShjdXJyZW50LT5tbSwgVlNZU0NBTEwzMl9CQVNFKSkgeyAJCQkgICAgICBcCisJCWNvbnN0IHN0cnVjdCBlbGYzMl9waGRyICpjb25zdCB2c3lzY2FsbF9waGRycyA9CQkgICAgICBcCisJCQkoY29uc3Qgc3RydWN0IGVsZjMyX3BoZHIgKikgKFZTWVNDQUxMMzJfQkFTRQkgICAgICBcCisJCQkJCQkgICArIFZTWVNDQUxMMzJfRUhEUi0+ZV9waG9mZik7ICAgICAgXAorCQlpbnQgaTsJCQkJCQkJICAgICAgXAorCQlmb3IgKGkgPSAwOyBpIDwgVlNZU0NBTEwzMl9FSERSLT5lX3BobnVtOyArK2kpIHsJICAgICAgXAorCQkJaWYgKHZzeXNjYWxsX3BoZHJzW2ldLnBfdHlwZSA9PSBQVF9MT0FEKQkgICAgICBcCisJCQkJRFVNUF9XUklURSgodm9pZCAqKSAodTY0KSB2c3lzY2FsbF9waGRyc1tpXS5wX3ZhZGRyLFwKKwkJCQkgICAgUEFHRV9BTElHTih2c3lzY2FsbF9waGRyc1tpXS5wX21lbXN6KSk7ICAgXAorCQl9CQkJCQkJCSAgICAgIFwKIAl9CQkJCQkJCQkgICAgICBcCiB9IHdoaWxlICgwKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TIGIvYXJjaC94ODZfNjQvaWEzMi9pYTMyZW50cnkuUwppbmRleCA5YjViYjQxLi41ZDRhN2QxIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL2lhMzJlbnRyeS5TCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvaWEzMmVudHJ5LlMKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXB1c2hxCSVyYXgKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAogCWNsZAotCVNBVkVfQVJHUyAwLDAsMQorCVNBVkVfQVJHUyAwLDAsMAogIAkvKiBubyBuZWVkIHRvIGRvIGFuIGFjY2Vzc19vayBjaGVjayBoZXJlIGJlY2F1c2UgcmJwIGhhcyBiZWVuCiAgCSAgIDMyYml0IHplcm8gZXh0ZW5kZWQgKi8gCiAxOgltb3ZsCSglcmJwKSwlcjlkCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9pYTMyL3ZzeXNjYWxsLmxkcyBiL2FyY2gveDg2XzY0L2lhMzIvdnN5c2NhbGwubGRzCmluZGV4IGYyZTc1ZWQuLjFkYzg2ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2lhMzIvdnN5c2NhbGwubGRzCisrKyBiL2FyY2gveDg2XzY0L2lhMzIvdnN5c2NhbGwubGRzCkBAIC0xMSw2ICsxMSw3IEBACiAgIC4gPSBWU1lTQ0FMTF9CQVNFICsgU0laRU9GX0hFQURFUlM7CiAKICAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CQk6dGV4dAorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CiAgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CiAgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CiAgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9hdWRpdC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2F1ZGl0LmMKaW5kZXggYTA2N2FhNC4uMjFmMzMzOCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2F1ZGl0LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2F1ZGl0LmMKQEAgLTgsMTkgKzgsNTQgQEAKIH4wVQogfTsKIAorc3RhdGljIHVuc2lnbmVkIHJlYWRfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9yZWFkLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCB3cml0ZV9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3dyaXRlLmg+Cit+MFUKK307CisKIHN0YXRpYyB1bnNpZ25lZCBjaGF0dHJfY2xhc3NbXSA9IHsKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgogfjBVCiB9OwogCitpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKQoreworI2lmZGVmIENPTkZJR19JQTMyX0VNVUxBVElPTgorCWV4dGVybiBpbnQgaWEzMl9jbGFzc2lmeV9zeXNjYWxsKHVuc2lnbmVkKTsKKwlpZiAoYWJpID09IEFVRElUX0FSQ0hfSTM4NikKKwkJcmV0dXJuIGlhMzJfY2xhc3NpZnlfc3lzY2FsbChzeXNjYWxsKTsKKyNlbmRpZgorCXN3aXRjaChzeXNjYWxsKSB7CisJY2FzZSBfX05SX29wZW46CisJCXJldHVybiAyOworCWNhc2UgX19OUl9vcGVuYXQ6CisJCXJldHVybiAzOworCWNhc2UgX19OUl9leGVjdmU6CisJCXJldHVybiA1OworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogc3RhdGljIGludCBfX2luaXQgYXVkaXRfY2xhc3Nlc19pbml0KHZvaWQpCiB7CiAjaWZkZWYgQ09ORklHX0lBMzJfRU1VTEFUSU9OCiAJZXh0ZXJuIF9fdTMyIGlhMzJfZGlyX2NsYXNzW107CisJZXh0ZXJuIF9fdTMyIGlhMzJfd3JpdGVfY2xhc3NbXTsKKwlleHRlcm4gX191MzIgaWEzMl9yZWFkX2NsYXNzW107CiAJZXh0ZXJuIF9fdTMyIGlhMzJfY2hhdHRyX2NsYXNzW107CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEVfMzIsIGlhMzJfd3JpdGVfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQURfMzIsIGlhMzJfcmVhZF9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyLCBpYTMyX2Rpcl9jbGFzcyk7CiAJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSXzMyLCBpYTMyX2NoYXR0cl9jbGFzcyk7CiAjZW5kaWYKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19XUklURSwgd3JpdGVfY2xhc3MpOworCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX1JFQUQsIHJlYWRfY2xhc3MpOwogCWF1ZGl0X3JlZ2lzdGVyX2NsYXNzKEFVRElUX0NMQVNTX0RJUl9XUklURSwgZGlyX2NsYXNzKTsKIAlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19DSEFUVFIsIGNoYXR0cl9jbGFzcyk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwppbmRleCBlNTZjMmFkLi5kNmQ3ZjczIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKQEAgLTcxLDcgKzcxLDExIEBACiAjZW5kaWYKIAkvKiBrZXJuZWwgY29kZSArIDY0MGsgbWVtb3J5IGhvbGUgKGxhdGVyIHNob3VsZCBub3QgYmUgbmVlZGVkLCBidXQgCiAJICAgYmUgcGFyYW5vaWQgZm9yIG5vdykgKi8KLQlpZiAobGFzdCA+PSA2NDAqMTAyNCAmJiBhZGRyIDwgX19wYV9zeW1ib2woJl9lbmQpKSB7IAorCWlmIChsYXN0ID49IDY0MCoxMDI0ICYmIGFkZHIgPCAxMDI0KjEwMjQpIHsKKwkJKmFkZHJwID0gMTAyNCoxMDI0OworCQlyZXR1cm4gMTsKKwl9CisJaWYgKGxhc3QgPj0gX19wYV9zeW1ib2woJl90ZXh0KSAmJiBsYXN0IDwgX19wYV9zeW1ib2woJl9lbmQpKSB7CiAJCSphZGRycCA9IF9fcGFfc3ltYm9sKCZfZW5kKTsKIAkJcmV0dXJuIDE7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvZW50cnkuUwppbmRleCBkNDY0ZGRlLi5hYThkODkzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL2VudHJ5LlMKQEAgLTUxMyw2ICs1MTMsNyBAQAogCXN3YXBncwkKIDE6CWluY2wJJWdzOnBkYV9pcnFjb3VudAkjIFJFRC1QRU4gc2hvdWxkIGNoZWNrIHByZWVtcHQgY291bnQKIAljbW92ZXEgJWdzOnBkYV9pcnFzdGFja3B0ciwlcnNwCisJcHVzaCAgICAlcmJwCQkJIyBiYWNrbGluayBmb3Igb2xkIHVud2luZGVyCiAJLyoKIAkgKiBXZSBlbnRlcmVkIGFuIGludGVycnVwdCBjb250ZXh0IC0gaXJxcyBhcmUgb2ZmOgogCSAqLwpAQCAtOTcyLDYgKzk3Myw4IEBACiBFTkRQUk9DKGtlcm5lbF90aHJlYWQpCiAJCiBjaGlsZF9yaXA6CisJcHVzaHEgJDAJCSMgZmFrZSByZXR1cm4gYWRkcmVzcworCUNGSV9TVEFSVFBST0MKIAkvKgogCSAqIEhlcmUgd2UgYXJlIGluIHRoZSBjaGlsZCBhbmQgdGhlIHJlZ2lzdGVycyBhcmUgc2V0IGFzIHRoZXkgd2VyZQogCSAqIGF0IGtlcm5lbF90aHJlYWQoKSBpbnZvY2F0aW9uIGluIHRoZSBwYXJlbnQuCkBAIC05ODIsNiArOTg1LDcgQEAKIAkjIGV4aXQKIAl4b3JsICVlZGksICVlZGkKIAljYWxsIGRvX2V4aXQKKwlDRklfRU5EUFJPQwogRU5EUFJPQyhjaGlsZF9yaXApCiAKIC8qCkBAIC0xMTM5LDE4ICsxMTQzLDIxIEBACiBFTkQobWFjaGluZV9jaGVjaykKICNlbmRpZgogCisvKiBDYWxsIHNvZnRpcnEgb24gaW50ZXJydXB0IHN0YWNrLiBJbnRlcnJ1cHRzIGFyZSBvZmYuICovCiBFTlRSWShjYWxsX3NvZnRpcnEpCiAJQ0ZJX1NUQVJUUFJPQwotCW1vdnEgJWdzOnBkYV9pcnFzdGFja3B0ciwlcmF4Ci0JbW92cSAlcnNwLCVyZHgKLQlDRklfREVGX0NGQV9SRUdJU1RFUglyZHgKKwlwdXNoICVyYnAKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQJOAorCUNGSV9SRUxfT0ZGU0VUIHJicCwwCisJbW92ICAlcnNwLCVyYnAKKwlDRklfREVGX0NGQV9SRUdJU1RFUiByYnAKIAlpbmNsICVnczpwZGFfaXJxY291bnQKLQljbW92ZSAlcmF4LCVyc3AKLQlwdXNocSAlcmR4Ci0JLyp0b2RvIENGSV9ERUZfQ0ZBX0VYUFJFU1NJT04gLi4uKi8KKwljbW92ZSAlZ3M6cGRhX2lycXN0YWNrcHRyLCVyc3AKKwlwdXNoICAlcmJwCQkJIyBiYWNrbGluayBmb3Igb2xkIHVud2luZGVyCiAJY2FsbCBfX2RvX3NvZnRpcnEKLQlwb3BxICVyc3AKKwlsZWF2ZXEKIAlDRklfREVGX0NGQV9SRUdJU1RFUglyc3AKKwlDRklfQURKVVNUX0NGQV9PRkZTRVQgICAtOAogCWRlY2wgJWdzOnBkYV9pcnFjb3VudAogCXJldAogCUNGSV9FTkRQUk9DCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5TIGIvYXJjaC94ODZfNjQva2VybmVsL2hlYWQuUwppbmRleCA2ZGYwNWU2Li5jOTczOWNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9oZWFkLlMKQEAgLTE5MSw2ICsxOTEsNyBAQAogCSAqIGp1bXAKIAkgKi8KIAltb3ZxCWluaXRpYWxfY29kZSglcmlwKSwlcmF4CisJcHVzaHEJJDAJCSMgZmFrZSByZXR1cm4gYWRkcmVzcwogCWptcAkqJXJheAogCiAJLyogU01QIGJvb3R1cCBjaGFuZ2VzIHRoZXNlIHR3byAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL2luaXRfdGFzay5jIGIvYXJjaC94ODZfNjQva2VybmVsL2luaXRfdGFzay5jCmluZGV4IGNlMzFkOTAuLjNkYzU4NTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9pbml0X3Rhc2suYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvaW5pdF90YXNrLmMKQEAgLTQ2LDQgKzQ2LDkgQEAKICAqLyAKIERFRklORV9QRVJfQ1BVKHN0cnVjdCB0c3Nfc3RydWN0LCBpbml0X3RzcykgX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcCA9IElOSVRfVFNTOwogCisvKiBDb3BpZXMgb2YgdGhlIG9yaWdpbmFsIGlzdCB2YWx1ZXMgZnJvbSB0aGUgdHNzIGFyZSBvbmx5IGFjY2Vzc2VkIGR1cmluZworICogZGVidWdnaW5nLCBubyBzcGVjaWFsIGFsaWdubWVudCByZXF1aXJlZC4KKyAqLworREVGSU5FX1BFUl9DUFUoc3RydWN0IG9yaWdfaXN0LCBvcmlnX2lzdCk7CisKICNkZWZpbmUgQUxJR05fVE9fNEsgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmRhdGEuaW5pdF90YXNrIikpKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggODNmYjI0YS4uMTA2MDc2YiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL21hY2hpbmVfa2V4ZWMuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCkBAIC0yMDcsMTQgKzIwNywxMSBAQAogCV9fZmx1c2hfdGxiKCk7CiAKIAotCS8qIFRoZSBzZWdtZW50IHJlZ2lzdGVycyBhcmUgZnVubnkgdGhpbmdzLCB0aGV5IGFyZQotCSAqIGF1dG9tYXRpY2FsbHkgbG9hZGVkIGZyb20gYSB0YWJsZSwgaW4gbWVtb3J5IHdoZXJldmVyIHlvdQotCSAqIHNldCB0aGVtIHRvIGEgc3BlY2lmaWMgc2VsZWN0b3IsIGJ1dCB0aGlzIHRhYmxlIGlzIG5ldmVyCi0JICogYWNjZXNzZWQgYWdhaW4gdW5sZXNzIHlvdSBzZXQgdGhlIHNlZ21lbnQgdG8gYSBkaWZmZXJlbnQgc2VsZWN0b3IuCi0JICoKLQkgKiBUaGUgbW9yZSBjb21tb24gbW9kZWwgYXJlIGNhY2hlcyB3aGVyZSB0aGUgYmVoaWRlCi0JICogdGhlIHNjZW5lcyB3b3JrIGlzIGRvbmUsIGJ1dCBpcyBhbHNvIGRyb3BwZWQgYXQgYXJiaXRyYXJ5Ci0JICogdGltZXMuCisJLyogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKKwkgKiB2aXNpYmxlIGFuZCBhbiBpbnZpc2libGUgcGFydC4gIFdoZW5ldmVyIHRoZSB2aXNpYmxlIHBhcnQgaXMKKwkgKiBzZXQgdG8gYSBzcGVjaWZpYyBzZWxlY3RvciwgdGhlIGludmlzaWJsZSBwYXJ0IGlzIGxvYWRlZAorCSAqIHdpdGggZnJvbSBhIHRhYmxlIGluIG1lbW9yeS4gIEF0IG5vIG90aGVyIHRpbWUgaXMgdGhlCisJICogZGVzY3JpcHRvciB0YWJsZSBpbiBtZW1vcnkgYWNjZXNzZWQuCiAJICoKIAkgKiBJIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgaGVyZSBieSBmb3JjZSBsb2FkaW5nIHRoZQogCSAqIHNlZ21lbnRzLCBiZWZvcmUgSSB6YXAgdGhlIGdkdCB3aXRoIGFuIGludmFsaWQgdmFsdWUuCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlLmMKaW5kZXggODg4NDU2Ny4uNGUwMTdmYiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL21jZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9tY2UuYwpAQCAtNjE1LDcgKzYxNSw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKLXN0YXRpYyBfX2NwdWluaXQgdm9pZCBtY2VfcmVtb3ZlX2RldmljZSh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHZvaWQgbWNlX3JlbW92ZV9kZXZpY2UodW5zaWduZWQgaW50IGNwdSkKIHsKIAlpbnQgaTsKIApAQCAtNjI2LDEwICs2MjYsOSBAQAogCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSksICZhdHRyX2NoZWNrX2ludGVydmFsKTsKIAlzeXNkZXZfdW5yZWdpc3RlcigmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSkpOwogfQotI2VuZGlmCiAKIC8qIEdldCBub3RpZmllZCB3aGVuIGEgY3B1IGNvbWVzIG9uL29mZi4gQmUgaG90cGx1ZyBmcmllbmRseS4gKi8KLXN0YXRpYyBfX2NwdWluaXQgaW50CitzdGF0aWMgaW50CiBtY2VfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKQEAgLTYzOCwxOCArNjM3LDE3IEBACiAJY2FzZSBDUFVfT05MSU5FOgogCQltY2VfY3JlYXRlX2RldmljZShjcHUpOwogCQlicmVhazsKLSNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIAljYXNlIENQVV9ERUFEOgogCQltY2VfcmVtb3ZlX2RldmljZShjcHUpOwogCQlicmVhazsKLSNlbmRpZgogCX0KIAlyZXR1cm4gTk9USUZZX09LOwogfQogCi1zdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgbWNlX2NwdV9ub3RpZmllciA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWNlX2NwdV9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IG1jZV9jcHVfY2FsbGJhY2ssCiB9OworI2VuZGlmCiAKIHN0YXRpYyBfX2luaXQgaW50IG1jZV9pbml0X2RldmljZSh2b2lkKQogewpAQCAtNjY0LDcgKzY2Miw3IEBACiAJCW1jZV9jcmVhdGVfZGV2aWNlKGkpOwogCX0KIAotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmbWNlX2NwdV9ub3RpZmllcik7CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtY2VfY3B1X25vdGlmaWVyKTsKIAltaXNjX3JlZ2lzdGVyKCZtY2VfbG9nX2RldmljZSk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2VfYW1kLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbWNlX2FtZC5jCmluZGV4IGRiMmFjYmYuLjg4M2ZlNzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tY2VfYW1kLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21jZV9hbWQuYwpAQCAtNTU4LDcgKzU1OCw3IEBACiAgKiAgIG9mIHNoYXJlZCBzeXNmcyBkaXIvZmlsZXMsIGFuZCByZXN0IG9mIHRoZSBjb3JlcyB3aWxsIGJlIHN5bWxpbmtlZCB0byBpdC4KICAqLwogCi1zdGF0aWMgX19jcHVpbml0IHZvaWQgZGVhbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2sodW5zaWduZWQgaW50IGNwdSwKK3N0YXRpYyB2b2lkIGRlYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrKHVuc2lnbmVkIGludCBjcHUsCiAJCQkJCQkgdW5zaWduZWQgaW50IGJhbmspCiB7CiAJc3RydWN0IHRocmVzaG9sZF9ibG9jayAqcG9zID0gTlVMTDsKQEAgLTU3OCw3ICs1NzgsNyBAQAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdLT5ibG9ja3MgPSBOVUxMOwogfQogCi1zdGF0aWMgX19jcHVpbml0IHZvaWQgdGhyZXNob2xkX3JlbW92ZV9iYW5rKHVuc2lnbmVkIGludCBjcHUsIGludCBiYW5rKQorc3RhdGljIHZvaWQgdGhyZXNob2xkX3JlbW92ZV9iYW5rKHVuc2lnbmVkIGludCBjcHUsIGludCBiYW5rKQogewogCWludCBpID0gMDsKIAlzdHJ1Y3QgdGhyZXNob2xkX2JhbmsgKmI7CkBAIC02MTgsNyArNjE4LDcgQEAKIAlwZXJfY3B1KHRocmVzaG9sZF9iYW5rcywgY3B1KVtiYW5rXSA9IE5VTEw7CiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgdm9pZCB0aHJlc2hvbGRfcmVtb3ZlX2RldmljZSh1bnNpZ25lZCBpbnQgY3B1KQorc3RhdGljIHZvaWQgdGhyZXNob2xkX3JlbW92ZV9kZXZpY2UodW5zaWduZWQgaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgYmFuazsKIApAQCAtNjI5LDE0ICs2MjksOCBAQAogCX0KIH0KIAotI2Vsc2UgLyogIUNPTkZJR19IT1RQTFVHX0NQVSAqLwotc3RhdGljIHZvaWQgdGhyZXNob2xkX3JlbW92ZV9kZXZpY2UodW5zaWduZWQgaW50IGNwdSkKLXsKLX0KLSNlbmRpZgotCiAvKiBnZXQgbm90aWZpZWQgd2hlbiBhIGNwdSBjb21lcyBvbi9vZmYgKi8KLXN0YXRpYyBpbnQgX19jcHVpbml0IHRocmVzaG9sZF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IHRocmVzaG9sZF9jcHVfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCiAJCQkJCSAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAkvKiBjcHUgd2FzIHVuc2lnbmVkIGludCB0byBiZWdpbiB3aXRoICovCkBAIC02NTksOSArNjUzLDEwIEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0aHJlc2hvbGRfY3B1X25vdGlmaWVyIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHRocmVzaG9sZF9jcHVfbm90aWZpZXIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSB0aHJlc2hvbGRfY3B1X2NhbGxiYWNrLAogfTsKKyNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAogc3RhdGljIF9faW5pdCBpbnQgdGhyZXNob2xkX2luaXRfZGV2aWNlKHZvaWQpCiB7CkBAIC02NzMsNyArNjY4LDcgQEAKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmdGhyZXNob2xkX2NwdV9ub3RpZmllcik7CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZ0aHJlc2hvbGRfY3B1X25vdGlmaWVyKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3BjaS1jYWxnYXJ5LmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYwppbmRleCBlNzFlZDUzLi4xNDY5MjRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWNhbGdhcnkuYwpAQCAtODUsNyArODUsOCBAQAogI2RlZmluZSBDU1JfQUdFTlRfTUFTSwkJMHhmZmUwZmZmZgogCiAjZGVmaW5lIE1BWF9OVU1fT0ZfUEhCUwkJOCAvKiBob3cgbWFueSBQSEJzIGluIHRvdGFsPyAqLwotI2RlZmluZSBNQVhfUEhCX0JVU19OVU0JCShNQVhfTlVNX09GX1BIQlMgKiAyKSAvKiBtYXggZGV2LT5idXMtPm51bWJlciAqLworI2RlZmluZSBNQVhfTlVNX0NIQVNTSVMJCTggLyogbWF4IG51bWJlciBvZiBjaGFzc2lzICovCisjZGVmaW5lIE1BWF9QSEJfQlVTX05VTQkJKE1BWF9OVU1fT0ZfUEhCUyAqIE1BWF9OVU1fQ0hBU1NJUyAqIDIpIC8qIG1heCBkZXYtPmJ1cy0+bnVtYmVyICovCiAjZGVmaW5lIFBIQlNfUEVSX0NBTEdBUlkJNAogCiAvKiByZWdpc3RlciBvZmZzZXRzIGluIENhbGdhcnkncyBpbnRlcm5hbCByZWdpc3RlciBzcGFjZSAqLwpAQCAtMTEwLDcgKzExMSw4IEBACiAJMHhCMDAwIC8qIFBIQjMgKi8KIH07CiAKLXZvaWQqIHRjZV90YWJsZV9rdmFbTUFYX05VTV9PRl9QSEJTICogTUFYX05VTU5PREVTXTsKK3N0YXRpYyBjaGFyIGJ1c190b19waGJbTUFYX1BIQl9CVVNfTlVNXTsKK3ZvaWQqIHRjZV90YWJsZV9rdmFbTUFYX1BIQl9CVVNfTlVNXTsKIHVuc2lnbmVkIGludCBzcGVjaWZpZWRfdGFibGVfc2l6ZSA9IFRDRV9UQUJMRV9TSVpFX1VOU1BFQ0lGSUVEOwogc3RhdGljIGludCB0cmFuc2xhdGVfZW1wdHlfc2xvdHMgX19yZWFkX21vc3RseSA9IDA7CiBzdGF0aWMgaW50IGNhbGdhcnlfZGV0ZWN0ZWQgX19yZWFkX21vc3RseSA9IDA7CkBAIC0xMTksNyArMTIxLDcgQEAKICAqIHRoZSBiaXRtYXAgb2YgUEhCcyB0aGUgdXNlciByZXF1ZXN0ZWQgdGhhdCB3ZSBkaXNhYmxlCiAgKiB0cmFuc2xhdGlvbiBvbi4KICAqLwotc3RhdGljIERFQ0xBUkVfQklUTUFQKHRyYW5zbGF0aW9uX2Rpc2FibGVkLCBNQVhfTlVNTk9ERVMgKiBNQVhfUEhCX0JVU19OVU0pOworc3RhdGljIERFQ0xBUkVfQklUTUFQKHRyYW5zbGF0aW9uX2Rpc2FibGVkLCBNQVhfUEhCX0JVU19OVU0pOwogCiBzdGF0aWMgdm9pZCB0Y2VfY2FjaGVfYmxhc3Qoc3RydWN0IGlvbW11X3RhYmxlICp0YmwpOwogCkBAIC00NTIsNyArNDU0LDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgYnVzbm9fdG9fcGhiaWQodW5zaWduZWQgY2hhciBudW0pCiB7Ci0JcmV0dXJuIGJ1c190b19waGIobnVtKSAlIFBIQlNfUEVSX0NBTEdBUlk7CisJcmV0dXJuIGJ1c190b19waGJbbnVtXTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHNwbGl0X3F1ZXVlX29mZnNldCh1bnNpZ25lZCBjaGFyIG51bSkKQEAgLTgxMiw3ICs4MTQsNyBAQAogCWludCBpLCByZXQgPSAtRU5PREVWOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCi0JZm9yIChpID0gMDsgaSA8PSBudW1fb25saW5lX25vZGVzKCkgKiBNQVhfTlVNX09GX1BIQlM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBNQVhfUEhCX0JVU19OVU07IGkrKykgewogCQlkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0lCTSwKIAkJCQkgICAgIFBDSV9ERVZJQ0VfSURfSUJNX0NBTEdBUlksCiAJCQkJICAgICBkZXYpOwpAQCAtODIyLDcgKzgyNCw3IEBACiAJCQljYWxnYXJ5X2luaXRfb25lX25vbnRyYXNsYXRlZChkZXYpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCF0Y2VfdGFibGVfa3ZhW2ldICYmICF0cmFuc2xhdGVfZW1wdHlfc2xvdHMpIHsKKwkJaWYgKCF0Y2VfdGFibGVfa3ZhW2Rldi0+YnVzLT5udW1iZXJdICYmICF0cmFuc2xhdGVfZW1wdHlfc2xvdHMpIHsKIAkJCXBjaV9kZXZfcHV0KGRldik7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtODQyLDcgKzg0NCw3IEBACiAJCQlwY2lfZGV2X3B1dChkZXYpOwogCQkJY29udGludWU7CiAJCX0KLQkJaWYgKCF0Y2VfdGFibGVfa3ZhW2ldICYmICF0cmFuc2xhdGVfZW1wdHlfc2xvdHMpCisJCWlmICghdGNlX3RhYmxlX2t2YVtkZXYtPmJ1cy0+bnVtYmVyXSAmJiAhdHJhbnNsYXRlX2VtcHR5X3Nsb3RzKQogCQkJY29udGludWU7CiAJCWNhbGdhcnlfZGlzYWJsZV90cmFuc2xhdGlvbihkZXYpOwogCQljYWxnYXJ5X2ZyZWVfdGFyKGRldik7CkBAIC04NzYsOSArODc4LDEwIEBACiB2b2lkIF9faW5pdCBkZXRlY3RfY2FsZ2FyeSh2b2lkKQogewogCXUzMiB2YWw7Ci0JaW50IGJ1cywgdGFibGVfaWR4OworCWludCBidXM7CiAJdm9pZCAqdGJsOwotCWludCBkZXRlY3RlZCA9IDA7CisJaW50IGNhbGdhcnlfZm91bmQgPSAwOworCWludCBwaGIgPSAtMTsKIAogCS8qCiAJICogaWYgdGhlIHVzZXIgc3BlY2lmaWVkIGlvbW11PW9mZiBvciBpb21tdT1zb2Z0IG9yIHdlIGZvdW5kCkBAIC04ODksMzggKzg5Miw0NiBAQAogCiAJc3BlY2lmaWVkX3RhYmxlX3NpemUgPSBkZXRlcm1pbmVfdGNlX3RhYmxlX3NpemUoZW5kX3BmbiAqIFBBR0VfU0laRSk7CiAKLQlmb3IgKGJ1cyA9IDAsIHRhYmxlX2lkeCA9IDA7Ci0JICAgICBidXMgPD0gbnVtX29ubGluZV9ub2RlcygpICogTUFYX1BIQl9CVVNfTlVNOwotCSAgICAgYnVzKyspIHsKLQkJQlVHX09OKGJ1cyA+IE1BWF9OVU1OT0RFUyAqIE1BWF9QSEJfQlVTX05VTSk7CisJZm9yIChidXMgPSAwOyBidXMgPCBNQVhfUEhCX0JVU19OVU07IGJ1cysrKSB7CisJCWludCBkZXY7CisKKwkJdGNlX3RhYmxlX2t2YVtidXNdID0gTlVMTDsKKwkJYnVzX3RvX3BoYltidXNdID0gLTE7CisKIAkJaWYgKHJlYWRfcGNpX2NvbmZpZyhidXMsIDAsIDAsIDApICE9IFBDSV9WRU5ET1JfREVWSUNFX0lEX0NBTEdBUlkpCiAJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGVyZSBhcmUgNCBQSEJzIHBlciBDYWxnYXJ5IGNoaXAuICBTZXQgcGhiIHRvIHdoaWNoIHBoYiAoMC0zKQorCQkgKiBpdCBpcyBjb25uZWN0ZWQgdG8gcmVsZWF0aXZlIHRvIHRoZSBjbGFnYXJ5IGNoaXAuCisJCSAqLworCQlwaGIgPSAocGhiICsgMSkgJSBQSEJTX1BFUl9DQUxHQVJZOworCiAJCWlmICh0ZXN0X2JpdChidXMsIHRyYW5zbGF0aW9uX2Rpc2FibGVkKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FsZ2FyeTogdHJhbnNsYXRpb24gaXMgZGlzYWJsZWQgZm9yICIKIAkJCSAgICAgICAiUEhCIDB4JXhcbiIsIGJ1cyk7CiAJCQkvKiBza2lwIHRoaXMgcGhiLCBkb24ndCBhbGxvY2F0ZSBhIHRibCBmb3IgaXQgKi8KLQkJCXRjZV90YWJsZV9rdmFbdGFibGVfaWR4XSA9IE5VTEw7Ci0JCQl0YWJsZV9pZHgrKzsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qCi0JCSAqIHNjYW4gdGhlIGZpcnN0IHNsb3Qgb2YgdGhlIFBDSSBidXMgdG8gc2VlIGlmIHRoZXJlCi0JCSAqIGFyZSBhbnkgZGV2aWNlcyBwcmVzZW50CisJCSAqIFNjYW4gdGhlIHNsb3RzIG9mIHRoZSBQQ0kgYnVzIHRvIHNlZSBpZiB0aGVyZSBpcyBhIGRldmljZSBwcmVzZW50LgorCQkgKiBUaGUgcGFyZW50IGJ1cyB3aWxsIGJlIHRoZSB6ZXJvLWl0aCBkZXZpY2UsIHNvIHN0YXJ0IGF0IDEuCiAJCSAqLwotCQl2YWwgPSByZWFkX3BjaV9jb25maWcoYnVzLCAxLCAwLCAwKTsKLQkJaWYgKHZhbCAhPSAweGZmZmZmZmZmIHx8IHRyYW5zbGF0ZV9lbXB0eV9zbG90cykgewotCQkJdGJsID0gYWxsb2NfdGNlX3RhYmxlKCk7Ci0JCQlpZiAoIXRibCkKLQkJCQlnb3RvIGNsZWFudXA7Ci0JCQlkZXRlY3RlZCA9IDE7Ci0JCX0gZWxzZQotCQkJdGJsID0gTlVMTDsKLQotCQl0Y2VfdGFibGVfa3ZhW3RhYmxlX2lkeF0gPSB0Ymw7Ci0JCXRhYmxlX2lkeCsrOworCQlmb3IgKGRldiA9IDE7IGRldiA8IDg7IGRldisrKSB7CisJCQl2YWwgPSByZWFkX3BjaV9jb25maWcoYnVzLCBkZXYsIDAsIDApOworCQkJaWYgKHZhbCAhPSAweGZmZmZmZmZmIHx8IHRyYW5zbGF0ZV9lbXB0eV9zbG90cykgeworCQkJCXRibCA9IGFsbG9jX3RjZV90YWJsZSgpOworCQkJCWlmICghdGJsKQorCQkJCQlnb3RvIGNsZWFudXA7CisJCQkJdGNlX3RhYmxlX2t2YVtidXNdID0gdGJsOworCQkJCWJ1c190b19waGJbYnVzXSA9IHBoYjsKKwkJCQljYWxnYXJ5X2ZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCX0KIAotCWlmIChkZXRlY3RlZCkgeworCWlmIChjYWxnYXJ5X2ZvdW5kKSB7CiAJCWlvbW11X2RldGVjdGVkID0gMTsKIAkJY2FsZ2FyeV9kZXRlY3RlZCA9IDE7CiAJCXByaW50ayhLRVJOX0lORk8gIlBDSS1ETUE6IENhbGdhcnkgSU9NTVUgZGV0ZWN0ZWQuICIKQEAgLTkyOSw5ICs5NDAsOSBAQAogCXJldHVybjsKIAogY2xlYW51cDoKLQlmb3IgKC0tdGFibGVfaWR4OyB0YWJsZV9pZHggPj0gMDsgLS10YWJsZV9pZHgpCi0JCWlmICh0Y2VfdGFibGVfa3ZhW3RhYmxlX2lkeF0pCi0JCQlmcmVlX3RjZV90YWJsZSh0Y2VfdGFibGVfa3ZhW3RhYmxlX2lkeF0pOworCWZvciAoLS1idXM7IGJ1cyA+PSAwOyAtLWJ1cykKKwkJaWYgKHRjZV90YWJsZV9rdmFbYnVzXSkKKwkJCWZyZWVfdGNlX3RhYmxlKHRjZV90YWJsZV9rdmFbYnVzXSk7CiB9CiAKIGludCBfX2luaXQgY2FsZ2FyeV9pb21tdV9pbml0KHZvaWQpCkBAIC0xMDAyLDcgKzEwMTMsNyBAQAogCQkJaWYgKHAgPT0gZW5kcCkKIAkJCQlicmVhazsKIAotCQkJaWYgKGJyaWRnZSA8PSAobnVtX29ubGluZV9ub2RlcygpICogTUFYX1BIQl9CVVNfTlVNKSkgeworCQkJaWYgKGJyaWRnZSA8IE1BWF9QSEJfQlVTX05VTSkgewogCQkJCXByaW50ayhLRVJOX0lORk8gIkNhbGdhcnk6IGRpc2FibGluZyAiCiAJCQkJICAgICAgICJ0cmFuc2xhdGlvbiBmb3IgUEhCIDB4JXhcbiIsIGJyaWRnZSk7CiAJCQkJc2V0X2JpdChicmlkZ2UsIHRyYW5zbGF0aW9uX2Rpc2FibGVkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktbm9tbXUuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktbm9tbXUuYwppbmRleCBjNGMzY2MzLi5hYWQ3NjA5IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLW5vbW11LmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1ub21tdS5jCkBAIC05Miw1ICs5Miw3IEBACiB7CiAJaWYgKGRtYV9vcHMpCiAJCXJldHVybjsKKworCWZvcmNlX2lvbW11ID0gMDsgLyogbm8gSFcgSU9NTVUgKi8KIAlkbWFfb3BzID0gJm5vbW11X2RtYV9vcHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLXN3aW90bGIuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IGViZGI3N2YuLjZhNTVmODcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC0zMSw5ICszMSwxMCBAQAogdm9pZCBwY2lfc3dpb3RsYl9pbml0KHZvaWQpCiB7CiAJLyogZG9uJ3QgaW5pdGlhbGl6ZSBzd2lvdGxiIGlmIGlvbW11PW9mZiAobm9faW9tbXU9MSkgKi8KLQlpZiAoIWlvbW11X2RldGVjdGVkICYmICFub19pb21tdSAmJgotCSAgICAoZW5kX3BmbiA+IE1BWF9ETUEzMl9QRk4gfHwgZm9yY2VfaW9tbXUpKQorCWlmICghaW9tbXVfZGV0ZWN0ZWQgJiYgIW5vX2lvbW11ICYmIGVuZF9wZm4gPiBNQVhfRE1BMzJfUEZOKQogCSAgICAgICBzd2lvdGxiID0gMTsKKwlpZiAoc3dpb3RsYl9mb3JjZSkKKwkJc3dpb3RsYiA9IDE7CiAJaWYgKHN3aW90bGIpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiUENJLURNQTogVXNpbmcgc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyBmb3IgSU8gKFNXSU9UTEIpXG4iKTsKIAkJc3dpb3RsYl9pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCmluZGV4IDhhMDk5ZmYuLjM0YWZhZDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cC5jCkBAIC01MjEsOCArNTIxLDYgQEAKIAogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewotCXVuc2lnbmVkIGxvbmcga2VybmVsX2VuZDsKLQogIAlST09UX0RFViA9IG9sZF9kZWNvZGVfZGV2KE9SSUdfUk9PVF9ERVYpOwogIAlzY3JlZW5faW5mbyA9IFNDUkVFTl9JTkZPOwogCWVkaWRfaW5mbyA9IEVESURfSU5GTzsKQEAgLTU5Niw4ICs1OTQsOCBAQAogCQkJCSh0YWJsZV9lbmQgLSB0YWJsZV9zdGFydCkgPDwgUEFHRV9TSElGVCk7CiAKIAkvKiByZXNlcnZlIGtlcm5lbCAqLwotCWtlcm5lbF9lbmQgPSByb3VuZF91cChfX3BhX3N5bWJvbCgmX2VuZCksUEFHRV9TSVpFKTsKLQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhISUdIX01FTU9SWSwga2VybmVsX2VuZCAtIEhJR0hfTUVNT1JZKTsKKwlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhfX3BhX3N5bWJvbCgmX3RleHQpLAorCQkJCV9fcGFfc3ltYm9sKCZfZW5kKSAtIF9fcGFfc3ltYm9sKCZfdGV4dCkpOwogCiAJLyoKIAkgKiByZXNlcnZlIHBoeXNpY2FsIHBhZ2UgMCAtIGl0J3MgYSBzcGVjaWFsIEJJT1MgcGFnZSBvbiBtYW55IGJveGVzLApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zZXR1cDY0LmMKaW5kZXggNmZlNThhNi4uNDE3ZGU1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwNjQuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXA2NC5jCkBAIC0xODksNiArMTg5LDcgQEAKIHsKIAlpbnQgY3B1ID0gc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB0c3Nfc3RydWN0ICp0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7CisJc3RydWN0IG9yaWdfaXN0ICpvcmlnX2lzdCA9ICZwZXJfY3B1KG9yaWdfaXN0LCBjcHUpOwogCXVuc2lnbmVkIGxvbmcgdjsgCiAJY2hhciAqZXN0YWNrcyA9IE5VTEw7IAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWU7CkBAIC0yNTYsNyArMjU3LDcgQEAKIAkJCWVzdGFja3MgKz0gRVhDRVBUSU9OX1NUS1NaOwogCQkJYnJlYWs7CiAJCX0KLQkJdC0+aXN0W3ZdID0gKHVuc2lnbmVkIGxvbmcpZXN0YWNrczsKKwkJb3JpZ19pc3QtPmlzdFt2XSA9IHQtPmlzdFt2XSA9ICh1bnNpZ25lZCBsb25nKWVzdGFja3M7CiAJfQogCiAJdC0+aW9fYml0bWFwX2Jhc2UgPSBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaW9fYml0bWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9zbXAuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9zbXAuYwppbmRleCA1YTFjMGEzLi4wNmFmNmNhIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3NtcC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIHsKIAlpbnQgaTsKIAlmb3JfZWFjaF9jcHVfbWFzayhpLCBjcHVfcG9zc2libGVfbWFwKSB7Ci0JCXNwaW5fbG9ja19pbml0KCZwZXJfY3B1KGZsdXNoX3N0YXRlLnRsYnN0YXRlX2xvY2ssIGkpKTsKKwkJc3Bpbl9sb2NrX2luaXQoJnBlcl9jcHUoZmx1c2hfc3RhdGUsIGkpLnRsYnN0YXRlX2xvY2spOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90Y2UuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90Y2UuYwppbmRleCBkM2E5ZTc5Li41NTMwZGRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RjZS5jCkBAIC05Niw3ICs5Niw2IEBACiBzdGF0aWMgaW50IHRjZV90YWJsZV9zZXRwYXJtcyhzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCkKIHsKIAl1bnNpZ25lZCBpbnQgYml0bWFwc3o7Ci0JdW5zaWduZWQgaW50IHRjZV90YWJsZV9pbmRleDsKIAl1bnNpZ25lZCBsb25nIGJtcHBhZ2VzOwogCWludCByZXQ7CiAKQEAgLTEwNSw4ICsxMDQsNyBAQAogCS8qIHNldCB0aGUgdGNlIHRhYmxlIHNpemUgLSBtZWFzdXJlZCBpbiBlbnRyaWVzICovCiAJdGJsLT5pdF9zaXplID0gdGFibGVfc2l6ZV90b19udW1iZXJfb2ZfZW50cmllcyhzcGVjaWZpZWRfdGFibGVfc2l6ZSk7CiAKLQl0Y2VfdGFibGVfaW5kZXggPSBidXNfdG9fcGhiKHRibC0+aXRfYnVzbm8pOwotCXRibC0+aXRfYmFzZSA9ICh1bnNpZ25lZCBsb25nKXRjZV90YWJsZV9rdmFbdGNlX3RhYmxlX2luZGV4XTsKKwl0YmwtPml0X2Jhc2UgPSAodW5zaWduZWQgbG9uZyl0Y2VfdGFibGVfa3ZhW2Rldi0+YnVzLT5udW1iZXJdOwogCWlmICghdGJsLT5pdF9iYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQ2FsZ2FyeTogaW9tbXVfdGFibGVfc2V0cGFybXM6ICIKIAkJICAgICAgICJubyB0YWJsZSBhbGxvY2F0ZWQ/IVxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwppbmRleCBiOWZmNzU5Li43YTliMTgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaWZkZWYgQ09ORklHX0FDUEkKICNpbmNsdWRlIDxhY3BpL2FjaHdhcmUuaD4JLyogZm9yIFBNIHRpbWVyIGZyZXF1ZW5jeSAqLworI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KICNlbmRpZgogI2luY2x1ZGUgPGFzbS84MjUzcGl0Lmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTE5Myw3ICsxOTQsNyBAQAogCSAgIGlzIGp1c3QgYWNjb3VudGVkIHRvIHRoZSBzcGlubG9jayBmdW5jdGlvbi4KIAkgICBCZXR0ZXIgd291bGQgYmUgdG8gd3JpdGUgdGhlc2UgZnVuY3Rpb25zIGluIGFzc2VtYmxlciBhZ2FpbgogCSAgIGFuZCBjaGVjayBleGFjdGx5LiAqLwotCWlmIChpbl9sb2NrX2Z1bmN0aW9ucyhwYykpIHsKKwlpZiAoIXVzZXJfbW9kZShyZWdzKSAmJiBpbl9sb2NrX2Z1bmN0aW9ucyhwYykpIHsKIAkJY2hhciAqdiA9ICooY2hhciAqKilyZWdzLT5yc3A7CiAJCWlmICgodiA+PSBfc3RleHQgJiYgdiA8PSBfZXRleHQpIHx8CiAJCQkodiA+PSBfc2luaXR0ZXh0ICYmIHYgPD0gX2Vpbml0dGV4dCkgfHwKQEAgLTk1MywxMSArOTU0LDE4IEBACiAjaWZkZWYgQ09ORklHX1NNUAogCWlmIChhcGljX2lzX2NsdXN0ZXJlZF9ib3goKSkKIAkJcmV0dXJuIDE7Ci0gCS8qIEludGVsIHN5c3RlbXMgYXJlIG5vcm1hbGx5IGFsbCBzeW5jaHJvbml6ZWQuIEV4Y2VwdGlvbnMKLSAJICAgYXJlIGhhbmRsZWQgaW4gdGhlIGNoZWNrIGFib3ZlLiAqLwotIAlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfSU5URUwpCi0gCQlyZXR1cm4gMDsKICNlbmRpZgorCS8qIE1vc3QgaW50ZWwgc3lzdGVtcyBoYXZlIHN5bmNocm9uaXplZCBUU0NzIGV4Y2VwdCBmb3IKKwkgICBtdWx0aSBub2RlIHN5c3RlbXMgKi8KKyAJaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMKSB7CisjaWZkZWYgQ09ORklHX0FDUEkKKwkJLyogQnV0IFRTQyBkb2Vzbid0IHRpY2sgaW4gQzMgc28gZG9uJ3QgdXNlIGl0IHRoZXJlICovCisJCWlmIChhY3BpX2ZhZHQubGVuZ3RoID4gMCAmJiBhY3BpX2ZhZHQucGx2bDNfbGF0IDwgMTAwKQorCQkJcmV0dXJuIDE7CisjZW5kaWYKKyAJCXJldHVybiAwOworCX0KKwogIAkvKiBBc3N1bWUgbXVsdGkgc29ja2V0IHN5c3RlbXMgYXJlIG5vdCBzeW5jaHJvbml6ZWQgKi8KICAJcmV0dXJuIG51bV9wcmVzZW50X2NwdXMoKSA+IDE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jCmluZGV4IGViMzlhMjcuLmIxMjQ5NzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC90cmFwcy5jCkBAIC0xMDcsNyArMTA3LDExIEBACiB9CiAKIHN0YXRpYyBpbnQga3N0YWNrX2RlcHRoX3RvX3ByaW50ID0gMTI7CisjaWZkZWYgQ09ORklHX1NUQUNLX1VOV0lORAogc3RhdGljIGludCBjYWxsX3RyYWNlID0gMTsKKyNlbHNlCisjZGVmaW5lIGNhbGxfdHJhY2UgKC0xKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfS0FMTFNZTVMKICMgaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KQEAgLTE3NCw3ICsxNzgsNyBAQAogCQkJYnJlYWs7CiAjZW5kaWYKIAkJZGVmYXVsdDoKLQkJCWVuZCA9IHBlcl9jcHUoaW5pdF90c3MsIGNwdSkuaXN0W2tdOworCQkJZW5kID0gcGVyX2NwdShvcmlnX2lzdCwgY3B1KS5pc3Rba107CiAJCQlicmVhazsKIAkJfQogCQkvKgpAQCAtMjU0LDcgKzI1OCw2IEBACiB7CiAJY29uc3QgdW5zaWduZWQgY3B1ID0gc2FmZV9zbXBfcHJvY2Vzc29yX2lkKCk7CiAJdW5zaWduZWQgbG9uZyAqaXJxc3RhY2tfZW5kID0gKHVuc2lnbmVkIGxvbmcgKiljcHVfcGRhKGNwdSktPmlycXN0YWNrcHRyOwotCWludCBpID0gMTE7CiAJdW5zaWduZWQgdXNlZCA9IDA7CiAKIAlwcmludGsoIlxuQ2FsbCBUcmFjZTpcbiIpOwpAQCAtMjc2LDExICsyNzksMjAgQEAKIAkJCQl1bndfcmV0ID0gc2hvd190cmFjZV91bndpbmQoJmluZm8sIE5VTEwpOwogCQl9CiAJCWlmICh1bndfcmV0ID4gMCkgewotCQkJaWYgKGNhbGxfdHJhY2UgPiAwKQorCQkJaWYgKGNhbGxfdHJhY2UgPT0gMSAmJiAhYXJjaF91bndfdXNlcl9tb2RlKCZpbmZvKSkgeworCQkJCXByaW50X3N5bWJvbCgiRFdBUkYyIHVud2luZGVyIHN0dWNrIGF0ICVzXG4iLAorCQkJCQkgICAgIFVOV19QQygmaW5mbykpOworCQkJCWlmICgobG9uZylVTldfU1AoJmluZm8pIDwgMCkgeworCQkJCQlwcmludGsoIkxlZnRvdmVyIGluZXhhY3QgYmFja3RyYWNlOlxuIik7CisJCQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKilVTldfU1AoJmluZm8pOworCQkJCX0gZWxzZQorCQkJCQlwcmludGsoIkZ1bGwgaW5leGFjdCBiYWNrdHJhY2UgYWdhaW46XG4iKTsKKwkJCX0gZWxzZSBpZiAoY2FsbF90cmFjZSA+PSAxKQogCQkJCXJldHVybjsKLQkJCXByaW50aygiTGVnYWN5IGNhbGwgdHJhY2U6Iik7Ci0JCQlpID0gMTg7Ci0JCX0KKwkJCWVsc2UKKwkJCQlwcmludGsoIkZ1bGwgaW5leGFjdCBiYWNrdHJhY2UgYWdhaW46XG4iKTsKKwkJfSBlbHNlCisJCQlwcmludGsoIkluZXhhY3QgYmFja3RyYWNlOlxuIik7CiAJfQogCiAJLyoKQEAgLTUyMSw3ICs1MzMsNyBAQAogCQkvKiBOZXN0IGNvdW50IHJlYWNoZXMgemVybywgcmVsZWFzZSB0aGUgbG9jay4gKi8KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGllX2xvY2ssIGZsYWdzKTsKIAlpZiAocGFuaWNfb25fb29wcykKLQkJcGFuaWMoIk9vcHMiKTsKKwkJcGFuaWMoIkZhdGFsIGV4Y2VwdGlvbiIpOwogfQogCiB2b2lkIF9fa3Byb2JlcyBfX2RpZShjb25zdCBjaGFyICogc3RyLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIGxvbmcgZXJyKQpAQCAtMTExMiwxNCArMTEyNCwxOCBAQAogfQogX19zZXR1cCgia3N0YWNrPSIsIGtzdGFja19zZXR1cCk7CiAKKyNpZmRlZiBDT05GSUdfU1RBQ0tfVU5XSU5ECiBzdGF0aWMgaW50IF9faW5pdCBjYWxsX3RyYWNlX3NldHVwKGNoYXIgKnMpCiB7CiAJaWYgKHN0cmNtcChzLCAib2xkIikgPT0gMCkKIAkJY2FsbF90cmFjZSA9IC0xOwogCWVsc2UgaWYgKHN0cmNtcChzLCAiYm90aCIpID09IDApCiAJCWNhbGxfdHJhY2UgPSAwOwotCWVsc2UgaWYgKHN0cmNtcChzLCAibmV3IikgPT0gMCkKKwllbHNlIGlmIChzdHJjbXAocywgIm5ld2ZhbGxiYWNrIikgPT0gMCkKIAkJY2FsbF90cmFjZSA9IDE7CisJZWxzZSBpZiAoc3RyY21wKHMsICJuZXciKSA9PSAwKQorCQljYWxsX3RyYWNlID0gMjsKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImNhbGxfdHJhY2U9IiwgY2FsbF90cmFjZV9zZXR1cCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L3BjaS9rOC1idXMuYyBiL2FyY2gveDg2XzY0L3BjaS9rOC1idXMuYwppbmRleCBiNTBhN2M3Li4zYWNmNjBkIDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9wY2kvazgtYnVzLmMKKysrIGIvYXJjaC94ODZfNjQvcGNpL2s4LWJ1cy5jCkBAIC0yLDcgKzIsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+Ci0jaW5jbHVkZSA8YXNtL2s4Lmg+CiAKIC8qCiAgKiBUaGlzIGRpc2NvdmVycyB0aGUgcGNpYnVzIDwtPiBub2RlIG1hcHBpbmcgb24gQU1EIEs4LgpAQCAtMTksNiArMTgsNyBAQAogI2RlZmluZSBOUl9MRFRfQlVTX05VTUJFUl9SRUdJU1RFUlMgMwogI2RlZmluZSBTRUNPTkRBUllfTERUX0JVU19OVU1CRVIoZHdvcmQpICgoZHdvcmQgPj4gOCkgJiAweEZGKQogI2RlZmluZSBTVUJPUkRJTkFURV9MRFRfQlVTX05VTUJFUihkd29yZCkgKChkd29yZCA+PiAxNikgJiAweEZGKQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0s4SFRDT05GSUcgMHgxMTAwCiAKIC8qKgogICogZmlsbF9tcF9idXNfdG9fY3B1bWFzaygpCkBAIC0yOCw3ICsyOCw4IEBACiBfX2luaXQgc3RhdGljIGludAogZmlsbF9tcF9idXNfdG9fY3B1bWFzayh2b2lkKQogewotCWludCBpLCBqLCBrOworCXN0cnVjdCBwY2lfZGV2ICpuYl9kZXYgPSBOVUxMOworCWludCBpLCBqOwogCXUzMiBsZHRidXMsIG5pZDsKIAlzdGF0aWMgaW50IGxibnJbM10gPSB7CiAJCUxEVF9CVVNfTlVNQkVSX1JFR0lTVEVSXzAsCkBAIC0zNiw5ICszNyw4IEBACiAJCUxEVF9CVVNfTlVNQkVSX1JFR0lTVEVSXzIKIAl9OwogCi0JY2FjaGVfazhfbm9ydGhicmlkZ2VzKCk7Ci0JZm9yIChrID0gMDsgayA8IG51bV9rOF9ub3J0aGJyaWRnZXM7IGsrKykgewotCQlzdHJ1Y3QgcGNpX2RldiAqbmJfZGV2ID0gazhfbm9ydGhicmlkZ2VzW2tdOworCXdoaWxlICgobmJfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQlQQ0lfREVWSUNFX0lEX0s4SFRDT05GSUcsIG5iX2RldikpKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChuYl9kZXYsIE5PREVfSURfUkVHSVNURVIsICZuaWQpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOUl9MRFRfQlVTX05VTUJFUl9SRUdJU1RFUlM7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCmluZGV4IDUwNjRkOTMuLjlhZWEyM2NjIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAkgKi8KIAljYXNlIFBUUkFDRV9LSUxMOgogCQlyZXQgPSAwOwotCQlpZiAoY2hpbGQtPnN0YXRlID09IEVYSVRfWk9NQklFKQkvKiBhbHJlYWR5IGRlYWQgKi8KKwkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKQkvKiBhbHJlYWR5IGRlYWQgKi8KIAkJCWJyZWFrOwogCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKIAkJY2hpbGQtPnB0cmFjZSAmPSB+UFRfU0lOR0xFU1RFUDsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2tlcm5lbC90cmFwcy5jIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKaW5kZXggMjdlNDA5MC4uY2UwNzdkNiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC94dGVuc2Eva2VybmVsL3RyYXBzLmMKQEAgLTQ4NywxMSArNDg3LDkgQEAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Iik7CiAKLQlpZiAocGFuaWNfb25fb29wcykgewotCQlwcmludGsoS0VSTl9FTUVSRyAiRmF0YWwgZXhjZXB0aW9uOiBwYW5pYyBpbiA1IHNlY29uZHNcbiIpOwotCQlzc2xlZXAoNSk7CisJaWYgKHBhbmljX29uX29vcHMpCiAJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKLQl9CisKIAlkb19leGl0KGVycik7CiB9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMgYi9ibG9jay9jZnEtaW9zY2hlZC5jCmluZGV4IGFhZTMxMjMuLjNhM2FlZTAgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2NmcS1pb3NjaGVkLmMKKysrIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwpAQCAtMTU2MSw3ICsxNTYxLDcgQEAKIAkJLyogLT5rZXkgbXVzdCBiZSBjb3BpZWQgdG8gYXZvaWQgcmFjZSB3aXRoIGNmcV9leGl0X3F1ZXVlKCkgKi8KIAkJayA9IF9fY2ljLT5rZXk7CiAJCWlmICh1bmxpa2VseSghaykpIHsKLQkJCWNmcV9kcm9wX2RlYWRfY2ljKGlvYywgY2ljKTsKKwkJCWNmcV9kcm9wX2RlYWRfY2ljKGlvYywgX19jaWMpOwogCQkJZ290byByZXN0YXJ0OwogCQl9CiAKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IGJjN2JhZWUuLjliNzJkYzcgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtNzY1LDcgKzc2NSw4IEBACiAJCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJCXRhc2tfbG9jayhwKTsKLQkJCWUtPm9wcy50cmltKHAtPmlvX2NvbnRleHQpOworCQkJaWYgKHAtPmlvX2NvbnRleHQpCisJCQkJZS0+b3BzLnRyaW0ocC0+aW9fY29udGV4dCk7CiAJCQl0YXNrX3VubG9jayhwKTsKIAkJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEvYmxvY2svbGxfcndfYmxrLmMgYi9ibG9jay9sbF9yd19ibGsuYwppbmRleCA2MWQ2YjNjLi5kZGQ5MjUzIDEwMDY0NAotLS0gYS9ibG9jay9sbF9yd19ibGsuYworKysgYi9ibG9jay9sbF9yd19ibGsuYwpAQCAtMzYyOCw2ICszNjI4LDggQEAKIAkJcmV0LT5ucl9iYXRjaF9yZXF1ZXN0cyA9IDA7IC8qIGJlY2F1c2UgdGhpcyBpcyAwICovCiAJCXJldC0+YWljID0gTlVMTDsKIAkJcmV0LT5jaWNfcm9vdC5yYl9ub2RlID0gTlVMTDsKKwkJLyogbWFrZSBzdXJlIHNldF90YXNrX2lvcHJpbygpIHNlZXMgdGhlIHNldHRpbmdzIGFib3ZlICovCisJCXNtcF93bWIoKTsKIAkJdHNrLT5pb19jb250ZXh0ID0gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCBiYTEzM2Q1Li4xZTJmMzljIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtOSw0NyArOSw3MSBAQAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRoZSBjb3JlIENyeXB0b2dyYXBoaWMgQVBJLgogCitpZiBDUllQVE8KKworY29uZmlnIENSWVBUT19BTEdBUEkKKwl0cmlzdGF0ZQorCWhlbHAKKwkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHRoZSBBUEkgZm9yIGNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtcy4KKworY29uZmlnIENSWVBUT19CTEtDSVBIRVIKKwl0cmlzdGF0ZQorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisKK2NvbmZpZyBDUllQVE9fSEFTSAorCXRyaXN0YXRlCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKworY29uZmlnIENSWVBUT19NQU5BR0VSCisJdHJpc3RhdGUgIkNyeXB0b2dyYXBoaWMgYWxnb3JpdGhtIG1hbmFnZXIiCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlkZWZhdWx0IG0KKwloZWxwCisJICBDcmVhdGUgZGVmYXVsdCBjcnlwdG9ncmFwaGljIHRlbXBsYXRlIGluc3RhbnRpYXRpb25zIHN1Y2ggYXMKKwkgIGNiYyhhZXMpLgorCiBjb25maWcgQ1JZUFRPX0hNQUMKLQlib29sICJITUFDIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBDUllQVE8KKwl0cmlzdGF0ZSAiSE1BQyBzdXBwb3J0IgorCXNlbGVjdCBDUllQVE9fSEFTSAogCWhlbHAKIAkgIEhNQUM6IEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gKFJGQzIxMDQpLgogCSAgVGhpcyBpcyByZXF1aXJlZCBmb3IgSVBTZWMuCiAKIGNvbmZpZyBDUllQVE9fTlVMTAogCXRyaXN0YXRlICJOdWxsIGFsZ29yaXRobXMiCi0JZGVwZW5kcyBvbiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIFRoZXNlIGFyZSAnTnVsbCcgYWxnb3JpdGhtcywgdXNlZCBieSBJUHNlYywgd2hpY2ggZG8gbm90aGluZy4KIAogY29uZmlnIENSWVBUT19NRDQKIAl0cmlzdGF0ZSAiTUQ0IGRpZ2VzdCBhbGdvcml0aG0iCi0JZGVwZW5kcyBvbiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIE1ENCBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG0gKFJGQzEzMjApLgogCiBjb25maWcgQ1JZUFRPX01ENQogCXRyaXN0YXRlICJNRDUgZGlnZXN0IGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgTUQ1IG1lc3NhZ2UgZGlnZXN0IGFsZ29yaXRobSAoUkZDMTMyMSkuCiAKIGNvbmZpZyBDUllQVE9fU0hBMQogCXRyaXN0YXRlICJTSEExIGRpZ2VzdCBhbGdvcml0aG0iCi0JZGVwZW5kcyBvbiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIFNIQS0xIHNlY3VyZSBoYXNoIHN0YW5kYXJkIChGSVBTIDE4MC0xL0RGSVBTIDE4MC0yKS4KIAogY29uZmlnIENSWVBUT19TSEExX1MzOTAKIAl0cmlzdGF0ZSAiU0hBMSBkaWdlc3QgYWxnb3JpdGhtIChzMzkwKSIKLQlkZXBlbmRzIG9uIENSWVBUTyAmJiBTMzkwCisJZGVwZW5kcyBvbiBTMzkwCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBUaGlzIGlzIHRoZSBzMzkwIGhhcmR3YXJlIGFjY2VsZXJhdGVkIGltcGxlbWVudGF0aW9uIG9mIHRoZQogCSAgU0hBLTEgc2VjdXJlIGhhc2ggc3RhbmRhcmQgKEZJUFMgMTgwLTEvREZJUFMgMTgwLTIpLgogCiBjb25maWcgQ1JZUFRPX1NIQTI1NgogCXRyaXN0YXRlICJTSEEyNTYgZGlnZXN0IGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgU0hBMjU2IHNlY3VyZSBoYXNoIHN0YW5kYXJkIChERklQUyAxODAtMikuCiAJICAKQEAgLTU4LDcgKzgyLDggQEAKIAogY29uZmlnIENSWVBUT19TSEEyNTZfUzM5MAogCXRyaXN0YXRlICJTSEEyNTYgZGlnZXN0IGFsZ29yaXRobSAoczM5MCkiCi0JZGVwZW5kcyBvbiBDUllQVE8gJiYgUzM5MAorCWRlcGVuZHMgb24gUzM5MAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgczM5MCBoYXJkd2FyZSBhY2NlbGVyYXRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUKIAkgIFNIQTI1NiBzZWN1cmUgaGFzaCBzdGFuZGFyZCAoREZJUFMgMTgwLTIpLgpAQCAtNjgsNyArOTMsNyBAQAogCiBjb25maWcgQ1JZUFRPX1NIQTUxMgogCXRyaXN0YXRlICJTSEEzODQgYW5kIFNIQTUxMiBkaWdlc3QgYWxnb3JpdGhtcyIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgU0hBNTEyIHNlY3VyZSBoYXNoIHN0YW5kYXJkIChERklQUyAxODAtMikuCiAJICAKQEAgLTgwLDcgKzEwNSw3IEBACiAKIGNvbmZpZyBDUllQVE9fV1A1MTIKIAl0cmlzdGF0ZSAiV2hpcmxwb29sIGRpZ2VzdCBhbGdvcml0aG1zIgotCWRlcGVuZHMgb24gQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBXaGlybHBvb2wgaGFzaCBhbGdvcml0aG0gNTEyLCAzODQgYW5kIDI1Ni1iaXQgaGFzaGVzCiAKQEAgLTkyLDcgKzExNyw3IEBACiAKIGNvbmZpZyBDUllQVE9fVEdSMTkyCiAJdHJpc3RhdGUgIlRpZ2VyIGRpZ2VzdCBhbGdvcml0aG1zIgotCWRlcGVuZHMgb24gQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBUaWdlciBoYXNoIGFsZ29yaXRobSAxOTIsIDE2MCBhbmQgMTI4LWJpdCBoYXNoZXMKIApAQCAtMTAzLDIxICsxMjgsNDAgQEAKIAkgIFNlZSBhbHNvOgogCSAgPGh0dHA6Ly93d3cuY3MudGVjaG5pb24uYWMuaWwvfmJpaGFtL1JlcG9ydHMvVGlnZXIvPi4KIAorY29uZmlnIENSWVBUT19FQ0IKKwl0cmlzdGF0ZSAiRUNCIHN1cHBvcnQiCisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwlkZWZhdWx0IG0KKwloZWxwCisJICBFQ0I6IEVsZWN0cm9uaWMgQ29kZUJvb2sgbW9kZQorCSAgVGhpcyBpcyB0aGUgc2ltcGxlc3QgYmxvY2sgY2lwaGVyIGFsZ29yaXRobS4gIEl0IHNpbXBseSBlbmNyeXB0cworCSAgdGhlIGlucHV0IGJsb2NrIGJ5IGJsb2NrLgorCitjb25maWcgQ1JZUFRPX0NCQworCXRyaXN0YXRlICJDQkMgc3VwcG9ydCIKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgorCWRlZmF1bHQgbQorCWhlbHAKKwkgIENCQzogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUKKwkgIFRoaXMgYmxvY2sgY2lwaGVyIGFsZ29yaXRobSBpcyByZXF1aXJlZCBmb3IgSVBTZWMuCisKIGNvbmZpZyBDUllQVE9fREVTCiAJdHJpc3RhdGUgIkRFUyBhbmQgVHJpcGxlIERFUyBFREUgY2lwaGVyIGFsZ29yaXRobXMiCi0JZGVwZW5kcyBvbiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIERFUyBjaXBoZXIgYWxnb3JpdGhtIChGSVBTIDQ2LTIpLCBhbmQgVHJpcGxlIERFUyBFREUgKEZJUFMgNDYtMykuCiAKIGNvbmZpZyBDUllQVE9fREVTX1MzOTAKIAl0cmlzdGF0ZSAiREVTIGFuZCBUcmlwbGUgREVTIGNpcGhlciBhbGdvcml0aG1zIChzMzkwKSIKLQlkZXBlbmRzIG9uIENSWVBUTyAmJiBTMzkwCisJZGVwZW5kcyBvbiBTMzkwCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgogCWhlbHAKIAkgIERFUyBjaXBoZXIgYWxnb3JpdGhtIChGSVBTIDQ2LTIpLCBhbmQgVHJpcGxlIERFUyBFREUgKEZJUFMgNDYtMykuCiAKIGNvbmZpZyBDUllQVE9fQkxPV0ZJU0gKIAl0cmlzdGF0ZSAiQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgQmxvd2Zpc2ggY2lwaGVyIGFsZ29yaXRobSwgYnkgQnJ1Y2UgU2NobmVpZXIuCiAJICAKQEAgLTEzMCw3ICsxNzQsOCBAQAogCiBjb25maWcgQ1JZUFRPX1RXT0ZJU0gKIAl0cmlzdGF0ZSAiVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtIgotCWRlcGVuZHMgb24gQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OCiAJaGVscAogCSAgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtLgogCSAgCkBAIC0xNDIsOSArMTg3LDQ3IEBACiAJICBTZWUgYWxzbzoKIAkgIDxodHRwOi8vd3d3LnNjaG5laWVyLmNvbS90d29maXNoLmh0bWw+CiAKK2NvbmZpZyBDUllQVE9fVFdPRklTSF9DT01NT04KKwl0cmlzdGF0ZQorCWhlbHAKKwkgIENvbW1vbiBwYXJ0cyBvZiB0aGUgVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtIHNoYXJlZCBieSB0aGUKKwkgIGdlbmVyaWMgYyBhbmQgdGhlIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbnMuCisKK2NvbmZpZyBDUllQVE9fVFdPRklTSF81ODYKKwl0cmlzdGF0ZSAiVHdvZmlzaCBjaXBoZXIgYWxnb3JpdGhtcyAoaTU4NikiCisJZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmICE2NEJJVAorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJc2VsZWN0IENSWVBUT19UV09GSVNIX0NPTU1PTgorCWhlbHAKKwkgIFR3b2Zpc2ggY2lwaGVyIGFsZ29yaXRobS4KKworCSAgVHdvZmlzaCB3YXMgc3VibWl0dGVkIGFzIGFuIEFFUyAoQWR2YW5jZWQgRW5jcnlwdGlvbiBTdGFuZGFyZCkKKwkgIGNhbmRpZGF0ZSBjaXBoZXIgYnkgcmVzZWFyY2hlcnMgYXQgQ291bnRlclBhbmUgU3lzdGVtcy4gIEl0IGlzIGEKKwkgIDE2IHJvdW5kIGJsb2NrIGNpcGhlciBzdXBwb3J0aW5nIGtleSBzaXplcyBvZiAxMjgsIDE5MiwgYW5kIDI1NgorCSAgYml0cy4KKworCSAgU2VlIGFsc286CisJICA8aHR0cDovL3d3dy5zY2huZWllci5jb20vdHdvZmlzaC5odG1sPgorCitjb25maWcgQ1JZUFRPX1RXT0ZJU0hfWDg2XzY0CisJdHJpc3RhdGUgIlR3b2Zpc2ggY2lwaGVyIGFsZ29yaXRobSAoeDg2XzY0KSIKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQKKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQorCXNlbGVjdCBDUllQVE9fVFdPRklTSF9DT01NT04KKwloZWxwCisJICBUd29maXNoIGNpcGhlciBhbGdvcml0aG0gKHg4Nl82NCkuCisKKwkgIFR3b2Zpc2ggd2FzIHN1Ym1pdHRlZCBhcyBhbiBBRVMgKEFkdmFuY2VkIEVuY3J5cHRpb24gU3RhbmRhcmQpCisJICBjYW5kaWRhdGUgY2lwaGVyIGJ5IHJlc2VhcmNoZXJzIGF0IENvdW50ZXJQYW5lIFN5c3RlbXMuICBJdCBpcyBhCisJICAxNiByb3VuZCBibG9jayBjaXBoZXIgc3VwcG9ydGluZyBrZXkgc2l6ZXMgb2YgMTI4LCAxOTIsIGFuZCAyNTYKKwkgIGJpdHMuCisKKwkgIFNlZSBhbHNvOgorCSAgPGh0dHA6Ly93d3cuc2NobmVpZXIuY29tL3R3b2Zpc2guaHRtbD4KKwogY29uZmlnIENSWVBUT19TRVJQRU5UCiAJdHJpc3RhdGUgIlNlcnBlbnQgY2lwaGVyIGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgU2VycGVudCBjaXBoZXIgYWxnb3JpdGhtLCBieSBBbmRlcnNvbiwgQmloYW0gJiBLbnVkc2VuLgogCkBAIC0xNTcsNyArMjQwLDcgQEAKIAogY29uZmlnIENSWVBUT19BRVMKIAl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIgotCWRlcGVuZHMgb24gQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsIAogCSAgYWxnb3JpdGhtLgpAQCAtMTc3LDcgKzI2MCw4IEBACiAKIGNvbmZpZyBDUllQVE9fQUVTXzU4NgogCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMgKGk1ODYpIgotCWRlcGVuZHMgb24gQ1JZUFRPICYmICgoWDg2IHx8IFVNTF9YODYpICYmICE2NEJJVCkKKwlkZXBlbmRzIG9uIChYODYgfHwgVU1MX1g4NikgJiYgITY0QklUCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsIAogCSAgYWxnb3JpdGhtLgpAQCAtMTk3LDcgKzI4MSw4IEBACiAKIGNvbmZpZyBDUllQVE9fQUVTX1g4Nl82NAogCXRyaXN0YXRlICJBRVMgY2lwaGVyIGFsZ29yaXRobXMgKHg4Nl82NCkiCi0JZGVwZW5kcyBvbiBDUllQVE8gJiYgKChYODYgfHwgVU1MX1g4NikgJiYgNjRCSVQpCisJZGVwZW5kcyBvbiAoWDg2IHx8IFVNTF9YODYpICYmIDY0QklUCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsIAogCSAgYWxnb3JpdGhtLgpAQCAtMjE3LDcgKzMwMiw5IEBACiAKIGNvbmZpZyBDUllQVE9fQUVTX1MzOTAKIAl0cmlzdGF0ZSAiQUVTIGNpcGhlciBhbGdvcml0aG1zIChzMzkwKSIKLQlkZXBlbmRzIG9uIENSWVBUTyAmJiBTMzkwCisJZGVwZW5kcyBvbiBTMzkwCisJc2VsZWN0IENSWVBUT19BTEdBUEkKKwlzZWxlY3QgQ1JZUFRPX0JMS0NJUEhFUgogCWhlbHAKIAkgIFRoaXMgaXMgdGhlIHMzOTAgaGFyZHdhcmUgYWNjZWxlcmF0ZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlCiAJICBBRVMgY2lwaGVyIGFsZ29yaXRobXMgKEZJUFMtMTk3KS4gQUVTIHVzZXMgdGhlIFJpam5kYWVsCkBAIC0yMzcsMjEgKzMyNCwyMSBAQAogCiBjb25maWcgQ1JZUFRPX0NBU1Q1CiAJdHJpc3RhdGUgIkNBU1Q1IChDQVNULTEyOCkgY2lwaGVyIGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgVGhlIENBU1Q1IGVuY3J5cHRpb24gYWxnb3JpdGhtIChzeW5vbnltb3VzIHdpdGggQ0FTVC0xMjgpIGlzCiAJICBkZXNjcmliZWQgaW4gUkZDMjE0NC4KIAogY29uZmlnIENSWVBUT19DQVNUNgogCXRyaXN0YXRlICJDQVNUNiAoQ0FTVC0yNTYpIGNpcGhlciBhbGdvcml0aG0iCi0JZGVwZW5kcyBvbiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIFRoZSBDQVNUNiBlbmNyeXB0aW9uIGFsZ29yaXRobSAoc3lub255bW91cyB3aXRoIENBU1QtMjU2KSBpcwogCSAgZGVzY3JpYmVkIGluIFJGQzI2MTIuCiAKIGNvbmZpZyBDUllQVE9fVEVBCiAJdHJpc3RhdGUgIlRFQSwgWFRFQSBhbmQgWEVUQSBjaXBoZXIgYWxnb3JpdGhtcyIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgVEVBIGNpcGhlciBhbGdvcml0aG0uCiAKQEAgLTI2OCw3ICszNTUsNyBAQAogCiBjb25maWcgQ1JZUFRPX0FSQzQKIAl0cmlzdGF0ZSAiQVJDNCBjaXBoZXIgYWxnb3JpdGhtIgotCWRlcGVuZHMgb24gQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAloZWxwCiAJICBBUkM0IGNpcGhlciBhbGdvcml0aG0uCiAKQEAgLTI3OSw3ICszNjYsNyBAQAogCiBjb25maWcgQ1JZUFRPX0tIQVpBRAogCXRyaXN0YXRlICJLaGF6YWQgY2lwaGVyIGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgS2hhemFkIGNpcGhlciBhbGdvcml0aG0uCiAKQEAgLTI5Miw3ICszNzksNyBAQAogCiBjb25maWcgQ1JZUFRPX0FOVUJJUwogCXRyaXN0YXRlICJBbnViaXMgY2lwaGVyIGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgQW51YmlzIGNpcGhlciBhbGdvcml0aG0uCiAKQEAgLTMwNyw3ICszOTQsNyBAQAogCiBjb25maWcgQ1JZUFRPX0RFRkxBVEUKIAl0cmlzdGF0ZSAiRGVmbGF0ZSBjb21wcmVzc2lvbiBhbGdvcml0aG0iCi0JZGVwZW5kcyBvbiBDUllQVE8KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCXNlbGVjdCBaTElCX0lORkxBVEUKIAlzZWxlY3QgWkxJQl9ERUZMQVRFCiAJaGVscApAQCAtMzE4LDcgKzQwNSw3IEBACiAKIGNvbmZpZyBDUllQVE9fTUlDSEFFTF9NSUMKIAl0cmlzdGF0ZSAiTWljaGFlbCBNSUMga2V5ZWQgZGlnZXN0IGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIENSWVBUTworCXNlbGVjdCBDUllQVE9fQUxHQVBJCiAJaGVscAogCSAgTWljaGFlbCBNSUMgaXMgdXNlZCBmb3IgbWVzc2FnZSBpbnRlZ3JpdHkgcHJvdGVjdGlvbiBpbiBUS0lQCiAJICAoSUVFRSA4MDIuMTFpKS4gVGhpcyBhbGdvcml0aG0gaXMgcmVxdWlyZWQgZm9yIFRLSVAsIGJ1dCBpdApAQCAtMzI3LDcgKzQxNCw3IEBACiAKIGNvbmZpZyBDUllQVE9fQ1JDMzJDCiAJdHJpc3RhdGUgIkNSQzMyYyBDUkMgYWxnb3JpdGhtIgotCWRlcGVuZHMgb24gQ1JZUFRPCisJc2VsZWN0IENSWVBUT19BTEdBUEkKIAlzZWxlY3QgTElCQ1JDMzJDCiAJaGVscAogCSAgQ2FzdGFnbm9saSwgZXQgYWwgQ3ljbGljIFJlZHVuZGFuY3ktQ2hlY2sgQWxnb3JpdGhtLiAgVXNlZApAQCAtMzM3LDEwICs0MjQsMTMgQEAKIAogY29uZmlnIENSWVBUT19URVNUCiAJdHJpc3RhdGUgIlRlc3RpbmcgbW9kdWxlIgotCWRlcGVuZHMgb24gQ1JZUFRPICYmIG0KKwlkZXBlbmRzIG9uIG0KKwlzZWxlY3QgQ1JZUFRPX0FMR0FQSQogCWhlbHAKIAkgIFF1aWNrICYgZGlydHkgY3J5cHRvIHRlc3QgbW9kdWxlLgogCiBzb3VyY2UgImRyaXZlcnMvY3J5cHRvL0tjb25maWciCi1lbmRtZW51CiAKK2VuZGlmCSMgaWYgQ1JZUFRPCisKK2VuZG1lbnUKZGlmZiAtLWdpdCBhL2NyeXB0by9NYWtlZmlsZSBiL2NyeXB0by9NYWtlZmlsZQppbmRleCBkMjg3YjllLi43MjM2NjIwIDEwMDY0NAotLS0gYS9jcnlwdG8vTWFrZWZpbGUKKysrIGIvY3J5cHRvL01ha2VmaWxlCkBAIC0yLDExICsyLDE4IEBACiAjIENyeXB0b2dyYXBoaWMgQVBJCiAjCiAKLXByb2MtY3J5cHRvLSQoQ09ORklHX1BST0NfRlMpID0gcHJvYy5vCitvYmotJChDT05GSUdfQ1JZUFRPKSArPSBhcGkubyBzY2F0dGVyd2Fsay5vIGNpcGhlci5vIGRpZ2VzdC5vIGNvbXByZXNzLm8KIAotb2JqLSQoQ09ORklHX0NSWVBUTykgKz0gYXBpLm8gc2NhdHRlcndhbGsubyBjaXBoZXIubyBkaWdlc3QubyBjb21wcmVzcy5vIFwKLQkJCSQocHJvYy1jcnlwdG8teSkKK2NyeXB0b19hbGdhcGktJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCitjcnlwdG9fYWxnYXBpLW9ianMgOj0gYWxnYXBpLm8gJChjcnlwdG9fYWxnYXBpLXkpCitvYmotJChDT05GSUdfQ1JZUFRPX0FMR0FQSSkgKz0gY3J5cHRvX2FsZ2FwaS5vCiAKK29iai0kKENPTkZJR19DUllQVE9fQkxLQ0lQSEVSKSArPSBibGtjaXBoZXIubworCitjcnlwdG9faGFzaC1vYmpzIDo9IGhhc2gubworb2JqLSQoQ09ORklHX0NSWVBUT19IQVNIKSArPSBjcnlwdG9faGFzaC5vCisKK29iai0kKENPTkZJR19DUllQVE9fTUFOQUdFUikgKz0gY3J5cHRvbWdyLm8KIG9iai0kKENPTkZJR19DUllQVE9fSE1BQykgKz0gaG1hYy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX05VTEwpICs9IGNyeXB0b19udWxsLm8KIG9iai0kKENPTkZJR19DUllQVE9fTUQ0KSArPSBtZDQubwpAQCAtMTYsOSArMjMsMTIgQEAKIG9iai0kKENPTkZJR19DUllQVE9fU0hBNTEyKSArPSBzaGE1MTIubwogb2JqLSQoQ09ORklHX0NSWVBUT19XUDUxMikgKz0gd3A1MTIubwogb2JqLSQoQ09ORklHX0NSWVBUT19UR1IxOTIpICs9IHRncjE5Mi5vCitvYmotJChDT05GSUdfQ1JZUFRPX0VDQikgKz0gZWNiLm8KK29iai0kKENPTkZJR19DUllQVE9fQ0JDKSArPSBjYmMubwogb2JqLSQoQ09ORklHX0NSWVBUT19ERVMpICs9IGRlcy5vCiBvYmotJChDT05GSUdfQ1JZUFRPX0JMT1dGSVNIKSArPSBibG93ZmlzaC5vCiBvYmotJChDT05GSUdfQ1JZUFRPX1RXT0ZJU0gpICs9IHR3b2Zpc2gubworb2JqLSQoQ09ORklHX0NSWVBUT19UV09GSVNIX0NPTU1PTikgKz0gdHdvZmlzaF9jb21tb24ubwogb2JqLSQoQ09ORklHX0NSWVBUT19TRVJQRU5UKSArPSBzZXJwZW50Lm8KIG9iai0kKENPTkZJR19DUllQVE9fQUVTKSArPSBhZXMubwogb2JqLSQoQ09ORklHX0NSWVBUT19DQVNUNSkgKz0gY2FzdDUubwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Flcy5jIGIvY3J5cHRvL2Flcy5jCmluZGV4IGEwMzg3MTEuLmUyNDQwNzcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hZXMuYworKysgYi9jcnlwdG8vYWVzLmMKQEAgLTI0OSwxMyArMjQ5LDE0IEBACiB9CiAKIHN0YXRpYyBpbnQgYWVzX3NldF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1MzIgKmZsYWdzKQorCQkgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4pCiB7CiAJc3RydWN0IGFlc19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19sZTMyICprZXkgPSAoY29uc3QgX19sZTMyICopaW5fa2V5OworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAJdTMyIGksIHQsIHUsIHYsIHc7CiAKLQlpZiAoa2V5X2xlbiAhPSAxNiAmJiBrZXlfbGVuICE9IDI0ICYmIGtleV9sZW4gIT0gMzIpIHsKKwlpZiAoa2V5X2xlbiAlIDgpIHsKIAkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CmRpZmYgLS1naXQgYS9jcnlwdG8vYWxnYXBpLmMgYi9jcnlwdG8vYWxnYXBpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkxNTMwMAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9hbGdhcGkuYwpAQCAtMCwwICsxLDQ4NiBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJIGZvciBhbGdvcml0aG1zIChpLmUuLCBsb3ctbGV2ZWwgQVBJKS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgTElTVF9IRUFEKGNyeXB0b190ZW1wbGF0ZV9saXN0KTsKKwordm9pZCBjcnlwdG9fbGFydmFsX2Vycm9yKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCisJZG93bl9yZWFkKCZjcnlwdG9fYWxnX3NlbSk7CisJYWxnID0gX19jcnlwdG9fYWxnX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKKwl1cF9yZWFkKCZjcnlwdG9fYWxnX3NlbSk7CisKKwlpZiAoYWxnKSB7CisJCWlmIChjcnlwdG9faXNfbGFydmFsKGFsZykpIHsKKwkJCXN0cnVjdCBjcnlwdG9fbGFydmFsICpsYXJ2YWwgPSAodm9pZCAqKWFsZzsKKwkJCWNvbXBsZXRlKCZsYXJ2YWwtPmNvbXBsZXRpb24pOworCQl9CisJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2xhcnZhbF9lcnJvcik7CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19zZXRfZHJpdmVyX25hbWUoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlzdGF0aWMgY29uc3QgY2hhciBzdWZmaXhbXSA9ICItZ2VuZXJpYyI7CisJY2hhciAqZHJpdmVyX25hbWUgPSBhbGctPmNyYV9kcml2ZXJfbmFtZTsKKwlpbnQgbGVuOworCisJaWYgKCpkcml2ZXJfbmFtZSkKKwkJcmV0dXJuIDA7CisKKwlsZW4gPSBzdHJsY3B5KGRyaXZlcl9uYW1lLCBhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FKTsKKwlpZiAobGVuICsgc2l6ZW9mKHN1ZmZpeCkgPiBDUllQVE9fTUFYX0FMR19OQU1FKQorCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKKworCW1lbWNweShkcml2ZXJfbmFtZSArIGxlbiwgc3VmZml4LCBzaXplb2Yoc3VmZml4KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2NoZWNrX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCWlmIChhbGctPmNyYV9hbGlnbm1hc2sgJiAoYWxnLT5jcmFfYWxpZ25tYXNrICsgMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGFsZy0+Y3JhX2FsaWdubWFzayAmIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWxnLT5jcmFfYmxvY2tzaXplID4gUEFHRV9TSVpFIC8gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoYWxnLT5jcmFfcHJpb3JpdHkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBjcnlwdG9fc2V0X2RyaXZlcl9uYW1lKGFsZyk7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19kZXN0cm95X2luc3RhbmNlKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9ICh2b2lkICopYWxnOworCXN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwgPSBpbnN0LT50bXBsOworCisJdG1wbC0+ZnJlZShpbnN0KTsKKwljcnlwdG9fdG1wbF9wdXQodG1wbCk7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19yZW1vdmVfc3Bhd25zKHN0cnVjdCBsaXN0X2hlYWQgKnNwYXducywKKwkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Bhd24sIG4sIHNwYXducywgbGlzdCkgeworCQlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0ID0gc3Bhd24tPmluc3Q7CisJCXN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwgPSBpbnN0LT50bXBsOworCisJCWxpc3RfZGVsX2luaXQoJnNwYXduLT5saXN0KTsKKwkJc3Bhd24tPmFsZyA9IE5VTEw7CisKKwkJaWYgKGNyeXB0b19pc19kZWFkKCZpbnN0LT5hbGcpKQorCQkJY29udGludWU7CisKKwkJaW5zdC0+YWxnLmNyYV9mbGFncyB8PSBDUllQVE9fQUxHX0RFQUQ7CisJCWlmICghdG1wbCB8fCAhY3J5cHRvX3RtcGxfZ2V0KHRtcGwpKQorCQkJY29udGludWU7CisKKwkJY3J5cHRvX25vdGlmeShDUllQVE9fTVNHX0FMR19VTlJFR0lTVEVSLCAmaW5zdC0+YWxnKTsKKwkJbGlzdF9tb3ZlKCZpbnN0LT5hbGcuY3JhX2xpc3QsIGxpc3QpOworCQlobGlzdF9kZWwoJmluc3QtPmxpc3QpOworCQlpbnN0LT5hbGcuY3JhX2Rlc3Ryb3kgPSBjcnlwdG9fZGVzdHJveV9pbnN0YW5jZTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmluc3QtPmFsZy5jcmFfdXNlcnMpKSB7CisJCQlpZiAoJm4tPmxpc3QgPT0gc3Bhd25zKQorCQkJCW4gPSBsaXN0X2VudHJ5KGluc3QtPmFsZy5jcmFfdXNlcnMubmV4dCwKKwkJCQkJICAgICAgIHR5cGVvZigqbiksIGxpc3QpOworCQkJX19saXN0X3NwbGljZSgmaW5zdC0+YWxnLmNyYV91c2Vycywgc3Bhd25zLT5wcmV2KTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBfX2NyeXB0b19yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJCQkgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqcTsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKKworCWlmIChjcnlwdG9faXNfZGVhZChhbGcpKQorCQlnb3RvIG91dDsKKworCUlOSVRfTElTVF9IRUFEKCZhbGctPmNyYV91c2Vycyk7CisKKwlyZXQgPSAtRUVYSVNUOworCisJYXRvbWljX3NldCgmYWxnLT5jcmFfcmVmY250LCAxKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZjcnlwdG9fYWxnX2xpc3QsIGNyYV9saXN0KSB7CisJCWlmIChxID09IGFsZykKKwkJCWdvdG8gb3V0OworCisJCWlmIChjcnlwdG9faXNfbW9yaWJ1bmQocSkpCisJCQljb250aW51ZTsKKworCQlpZiAoY3J5cHRvX2lzX2xhcnZhbChxKSkgeworCQkJc3RydWN0IGNyeXB0b19sYXJ2YWwgKmxhcnZhbCA9ICh2b2lkICopcTsKKworCQkJaWYgKHN0cmNtcChhbGctPmNyYV9uYW1lLCBxLT5jcmFfbmFtZSkgJiYKKwkJCSAgICBzdHJjbXAoYWxnLT5jcmFfZHJpdmVyX25hbWUsIHEtPmNyYV9uYW1lKSkKKwkJCQljb250aW51ZTsKKworCQkJaWYgKGxhcnZhbC0+YWR1bHQpCisJCQkJY29udGludWU7CisJCQlpZiAoKHEtPmNyYV9mbGFncyBeIGFsZy0+Y3JhX2ZsYWdzKSAmIGxhcnZhbC0+bWFzaykKKwkJCQljb250aW51ZTsKKwkJCWlmICghY3J5cHRvX21vZF9nZXQoYWxnKSkKKwkJCQljb250aW51ZTsKKworCQkJbGFydmFsLT5hZHVsdCA9IGFsZzsKKwkJCWNvbXBsZXRlKCZsYXJ2YWwtPmNvbXBsZXRpb24pOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RyY21wKGFsZy0+Y3JhX25hbWUsIHEtPmNyYV9uYW1lKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJjbXAoYWxnLT5jcmFfZHJpdmVyX25hbWUsIHEtPmNyYV9kcml2ZXJfbmFtZSkgJiYKKwkJICAgIHEtPmNyYV9wcmlvcml0eSA+IGFsZy0+Y3JhX3ByaW9yaXR5KQorCQkJY29udGludWU7CisKKwkJY3J5cHRvX3JlbW92ZV9zcGF3bnMoJnEtPmNyYV91c2VycywgbGlzdCk7CisJfQorCQorCWxpc3RfYWRkKCZhbGctPmNyYV9saXN0LCAmY3J5cHRvX2FsZ19saXN0KTsKKworCWNyeXB0b19ub3RpZnkoQ1JZUFRPX01TR19BTEdfUkVHSVNURVIsIGFsZyk7CisJcmV0ID0gMDsKKworb3V0OgkKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fcmVtb3ZlX2ZpbmFsKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhbGcsIG4sIGxpc3QsIGNyYV9saXN0KSB7CisJCWxpc3RfZGVsX2luaXQoJmFsZy0+Y3JhX2xpc3QpOworCQljcnlwdG9fYWxnX3B1dChhbGcpOworCX0KK30KKworaW50IGNyeXB0b19yZWdpc3Rlcl9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlMSVNUX0hFQUQobGlzdCk7CisJaW50IGVycjsKKworCWVyciA9IGNyeXB0b19jaGVja19hbGcoYWxnKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCWVyciA9IF9fY3J5cHRvX3JlZ2lzdGVyX2FsZyhhbGcsICZsaXN0KTsKKwl1cF93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCisJY3J5cHRvX3JlbW92ZV9maW5hbCgmbGlzdCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19yZWdpc3Rlcl9hbGcpOworCitzdGF0aWMgaW50IGNyeXB0b19yZW1vdmVfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmFsZy0+Y3JhX2xpc3QpKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlhbGctPmNyYV9mbGFncyB8PSBDUllQVE9fQUxHX0RFQUQ7CisKKwljcnlwdG9fbm90aWZ5KENSWVBUT19NU0dfQUxHX1VOUkVHSVNURVIsIGFsZyk7CisJbGlzdF9kZWxfaW5pdCgmYWxnLT5jcmFfbGlzdCk7CisJY3J5cHRvX3JlbW92ZV9zcGF3bnMoJmFsZy0+Y3JhX3VzZXJzLCBsaXN0KTsKKworCXJldHVybiAwOworfQorCitpbnQgY3J5cHRvX3VucmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJaW50IHJldDsKKwlMSVNUX0hFQUQobGlzdCk7CisJCisJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCXJldCA9IGNyeXB0b19yZW1vdmVfYWxnKGFsZywgJmxpc3QpOworCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJQlVHX09OKGF0b21pY19yZWFkKCZhbGctPmNyYV9yZWZjbnQpICE9IDEpOworCWlmIChhbGctPmNyYV9kZXN0cm95KQorCQlhbGctPmNyYV9kZXN0cm95KGFsZyk7CisKKwljcnlwdG9fcmVtb3ZlX2ZpbmFsKCZsaXN0KTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b191bnJlZ2lzdGVyX2FsZyk7CisKK2ludCBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGUoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICpxOworCWludCBlcnIgPSAtRUVYSVNUOworCisJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmY3J5cHRvX3RlbXBsYXRlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHEgPT0gdG1wbCkKKwkJCWdvdG8gb3V0OworCX0KKworCWxpc3RfYWRkKCZ0bXBsLT5saXN0LCAmY3J5cHRvX3RlbXBsYXRlX2xpc3QpOworCWNyeXB0b19ub3RpZnkoQ1JZUFRPX01TR19UTVBMX1JFR0lTVEVSLCB0bXBsKTsKKwllcnIgPSAwOworb3V0OgorCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSk7CisKK3ZvaWQgY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqbjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdDsKKwlMSVNUX0hFQUQodXNlcnMpOworCisJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCisJQlVHX09OKGxpc3RfZW1wdHkoJnRtcGwtPmxpc3QpKTsKKwlsaXN0X2RlbF9pbml0KCZ0bXBsLT5saXN0KTsKKworCWxpc3QgPSAmdG1wbC0+aW5zdGFuY2VzOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGluc3QsIHAsIGxpc3QsIGxpc3QpIHsKKwkJaW50IGVyciA9IGNyeXB0b19yZW1vdmVfYWxnKCZpbnN0LT5hbGcsICZ1c2Vycyk7CisJCUJVR19PTihlcnIpOworCX0KKworCWNyeXB0b19ub3RpZnkoQ1JZUFRPX01TR19UTVBMX1VOUkVHSVNURVIsIHRtcGwpOworCisJdXBfd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaW5zdCwgcCwgbiwgbGlzdCwgbGlzdCkgeworCQlCVUdfT04oYXRvbWljX3JlYWQoJmluc3QtPmFsZy5jcmFfcmVmY250KSAhPSAxKTsKKwkJdG1wbC0+ZnJlZShpbnN0KTsKKwl9CisJY3J5cHRvX3JlbW92ZV9maW5hbCgmdXNlcnMpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUpOworCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqX19jcnlwdG9fbG9va3VwX3RlbXBsYXRlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqcSwgKnRtcGwgPSBOVUxMOworCisJZG93bl9yZWFkKCZjcnlwdG9fYWxnX3NlbSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmY3J5cHRvX3RlbXBsYXRlX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChxLT5uYW1lLCBuYW1lKSkKKwkJCWNvbnRpbnVlOworCQlpZiAodW5saWtlbHkoIWNyeXB0b190bXBsX2dldChxKSkpCisJCQljb250aW51ZTsKKworCQl0bXBsID0gcTsKKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKKworCXJldHVybiB0bXBsOworfQorCitzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICpjcnlwdG9fbG9va3VwX3RlbXBsYXRlKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKF9fY3J5cHRvX2xvb2t1cF90ZW1wbGF0ZShuYW1lKSwgbmFtZSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fbG9va3VwX3RlbXBsYXRlKTsKKworaW50IGNyeXB0b19yZWdpc3Rlcl9pbnN0YW5jZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsLAorCQkJICAgICBzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCUxJU1RfSEVBRChsaXN0KTsKKwlpbnQgZXJyID0gLUVJTlZBTDsKKworCWlmIChpbnN0LT5hbGcuY3JhX2Rlc3Ryb3kpCisJCWdvdG8gZXJyOworCisJZXJyID0gY3J5cHRvX2NoZWNrX2FsZygmaW5zdC0+YWxnKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjsKKworCWluc3QtPmFsZy5jcmFfbW9kdWxlID0gdG1wbC0+bW9kdWxlOworCisJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCisJZXJyID0gX19jcnlwdG9fcmVnaXN0ZXJfYWxnKCZpbnN0LT5hbGcsICZsaXN0KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9jazsKKworCWhsaXN0X2FkZF9oZWFkKCZpbnN0LT5saXN0LCAmdG1wbC0+aW5zdGFuY2VzKTsKKwlpbnN0LT50bXBsID0gdG1wbDsKKwordW5sb2NrOgorCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisKKwljcnlwdG9fcmVtb3ZlX2ZpbmFsKCZsaXN0KTsKKworZXJyOgorCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2UpOworCitpbnQgY3J5cHRvX2luaXRfc3Bhd24oc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCisJCSAgICAgIHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCit7CisJaW50IGVyciA9IC1FQUdBSU47CisKKwlzcGF3bi0+aW5zdCA9IGluc3Q7CisKKwlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisJaWYgKCFjcnlwdG9faXNfbW9yaWJ1bmQoYWxnKSkgeworCQlsaXN0X2FkZCgmc3Bhd24tPmxpc3QsICZhbGctPmNyYV91c2Vycyk7CisJCXNwYXduLT5hbGcgPSBhbGc7CisJCWVyciA9IDA7CisJfQorCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisKKwlyZXR1cm4gZXJyOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2luaXRfc3Bhd24pOworCit2b2lkIGNyeXB0b19kcm9wX3NwYXduKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduKQoreworCWRvd25fd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKKwlsaXN0X2RlbCgmc3Bhd24tPmxpc3QpOworCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fZHJvcF9zcGF3bik7CisKK3N0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fc3Bhd25fdGZtKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzI7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKworCWRvd25fcmVhZCgmY3J5cHRvX2FsZ19zZW0pOworCWFsZyA9IHNwYXduLT5hbGc7CisJYWxnMiA9IGFsZzsKKwlpZiAoYWxnMikKKwkJYWxnMiA9IGNyeXB0b19tb2RfZ2V0KGFsZzIpOworCXVwX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKKworCWlmICghYWxnMikgeworCQlpZiAoYWxnKQorCQkJY3J5cHRvX3Nob290X2FsZyhhbGcpOworCQlyZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKKwl9CisKKwl0Zm0gPSBfX2NyeXB0b19hbGxvY190Zm0oYWxnLCAwKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisKKwlyZXR1cm4gdGZtOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3NwYXduX3RmbSk7CisKK2ludCBjcnlwdG9fcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmNyeXB0b19jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3JlZ2lzdGVyX25vdGlmaWVyKTsKKworaW50IGNyeXB0b191bnJlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmNyeXB0b19jaGFpbiwgbmIpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX3VucmVnaXN0ZXJfbm90aWZpZXIpOworCitzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2dldF9hdHRyX2FsZyh2b2lkICpwYXJhbSwgdW5zaWduZWQgaW50IGxlbiwKKwkJCQkgICAgICAgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXN0cnVjdCBydGF0dHIgKnJ0YSA9IHBhcmFtOworCXN0cnVjdCBjcnlwdG9fYXR0cl9hbGcgKmFsZ2E7CisKKwlpZiAoIVJUQV9PSyhydGEsIGxlbikpCisJCXJldHVybiBFUlJfUFRSKC1FQkFEUik7CisJaWYgKHJ0YS0+cnRhX3R5cGUgIT0gQ1JZUFRPQV9BTEcgfHwgUlRBX1BBWUxPQUQocnRhKSA8IHNpemVvZigqYWxnYSkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJYWxnYSA9IFJUQV9EQVRBKHJ0YSk7CisJYWxnYS0+bmFtZVtDUllQVE9fTUFYX0FMR19OQU1FIC0gMV0gPSAwOworCisJcmV0dXJuIGNyeXB0b19hbGdfbW9kX2xvb2t1cChhbGdhLT5uYW1lLCB0eXBlLCBtYXNrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19nZXRfYXR0cl9hbGcpOworCitzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fYWxsb2NfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgICAgc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduOworCWludCBlcnI7CisKKwlpbnN0ID0ga3phbGxvYyhzaXplb2YoKmluc3QpICsgc2l6ZW9mKCpzcGF3biksIEdGUF9LRVJORUwpOworCWlmICghaW5zdCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllcnIgPSAtRU5BTUVUT09MT05HOworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUsICIlcyglcykiLCBuYW1lLAorCQkgICAgIGFsZy0+Y3JhX25hbWUpID49IENSWVBUT19NQVhfQUxHX05BTUUpCisJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKKworCWlmIChzbnByaW50ZihpbnN0LT5hbGcuY3JhX2RyaXZlcl9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FLCAiJXMoJXMpIiwKKwkJICAgICBuYW1lLCBhbGctPmNyYV9kcml2ZXJfbmFtZSkgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSkKKwkJZ290byBlcnJfZnJlZV9pbnN0OworCisJc3Bhd24gPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCWVyciA9IGNyeXB0b19pbml0X3NwYXduKHNwYXduLCBhbGcsIGluc3QpOworCisJaWYgKGVycikKKwkJZ290byBlcnJfZnJlZV9pbnN0OworCisJcmV0dXJuIGluc3Q7CisKK2Vycl9mcmVlX2luc3Q6CisJa2ZyZWUoaW5zdCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGxvY19pbnN0YW5jZSk7CisKK3N0YXRpYyBpbnQgX19pbml0IGNyeXB0b19hbGdhcGlfaW5pdCh2b2lkKQoreworCWNyeXB0b19pbml0X3Byb2MoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b19hbGdhcGlfZXhpdCh2b2lkKQoreworCWNyeXB0b19leGl0X3Byb2MoKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvX2FsZ2FwaV9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0b19hbGdhcGlfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIEFQSSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2FudWJpcy5jIGIvY3J5cHRvL2FudWJpcy5jCmluZGV4IDdlMmUxYTIuLjFjNzcxZjcgMTAwNjQ0Ci0tLSBhL2NyeXB0by9hbnViaXMuYworKysgYi9jcnlwdG8vYW51YmlzLmMKQEAgLTQ2MSwxMCArNDYxLDExIEBACiB9OwogCiBzdGF0aWMgaW50IGFudWJpc19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKLQkJCSB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKKwkJCSB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKIAlzdHJ1Y3QgYW51YmlzX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBfX2JlMzIgKmtleSA9IChjb25zdCBfX2JlMzIgKilpbl9rZXk7CisJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKIAlpbnQgTiwgUiwgaSwgcjsKIAl1MzIga2FwcGFbQU5VQklTX01BWF9OXTsKIAl1MzIgaW50ZXJbQU5VQklTX01BWF9OXTsKZGlmZiAtLWdpdCBhL2NyeXB0by9hcGkuYyBiL2NyeXB0by9hcGkuYwppbmRleCBjMTFlYzFmLi4yZTg0ZDRiIDEwMDY0NAotLS0gYS9jcnlwdG8vYXBpLmMKKysrIGIvY3J5cHRvL2FwaS5jCkBAIC0xNSw3MSArMTUsMjAzIEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogTElTVF9IRUFEKGNyeXB0b19hbGdfbGlzdCk7CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxnX2xpc3QpOwogREVDTEFSRV9SV1NFTShjcnlwdG9fYWxnX3NlbSk7CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxnX3NlbSk7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19hbGdfZ2V0KHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCitCTE9DS0lOR19OT1RJRklFUl9IRUFEKGNyeXB0b19jaGFpbik7CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fY2hhaW4pOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX2dldChzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQogewotCXJldHVybiB0cnlfbW9kdWxlX2dldChhbGctPmNyYV9tb2R1bGUpOworCWF0b21pY19pbmMoJmFsZy0+Y3JhX3JlZmNudCk7CisJcmV0dXJuIGFsZzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19hbGdfcHV0KHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCitzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX21vZF9nZXQoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKIHsKKwlyZXR1cm4gdHJ5X21vZHVsZV9nZXQoYWxnLT5jcmFfbW9kdWxlKSA/IGNyeXB0b19hbGdfZ2V0KGFsZykgOiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX21vZF9nZXQpOworCit2b2lkIGNyeXB0b19tb2RfcHV0KHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJY3J5cHRvX2FsZ19wdXQoYWxnKTsKIAltb2R1bGVfcHV0KGFsZy0+Y3JhX21vZHVsZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fbW9kX3B1dCk7CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZ19sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3N0cnVjdCBjcnlwdG9fYWxnICpfX2NyeXB0b19hbGdfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FsZyAqcSwgKmFsZyA9IE5VTEw7Ci0JaW50IGJlc3QgPSAtMTsKKwlpbnQgYmVzdCA9IC0yOwogCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gTlVMTDsKLQkKLQlkb3duX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKLQkKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZjcnlwdG9fYWxnX2xpc3QsIGNyYV9saXN0KSB7CiAJCWludCBleGFjdCwgZnV6enk7CiAKKwkJaWYgKGNyeXB0b19pc19tb3JpYnVuZChxKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICgocS0+Y3JhX2ZsYWdzIF4gdHlwZSkgJiBtYXNrKQorCQkJY29udGludWU7CisKKwkJaWYgKGNyeXB0b19pc19sYXJ2YWwocSkgJiYKKwkJICAgICgoc3RydWN0IGNyeXB0b19sYXJ2YWwgKilxKS0+bWFzayAhPSBtYXNrKQorCQkJY29udGludWU7CisKIAkJZXhhY3QgPSAhc3RyY21wKHEtPmNyYV9kcml2ZXJfbmFtZSwgbmFtZSk7CiAJCWZ1enp5ID0gIXN0cmNtcChxLT5jcmFfbmFtZSwgbmFtZSk7CiAJCWlmICghZXhhY3QgJiYgIShmdXp6eSAmJiBxLT5jcmFfcHJpb3JpdHkgPiBiZXN0KSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICh1bmxpa2VseSghY3J5cHRvX2FsZ19nZXQocSkpKQorCQlpZiAodW5saWtlbHkoIWNyeXB0b19tb2RfZ2V0KHEpKSkKIAkJCWNvbnRpbnVlOwogCiAJCWJlc3QgPSBxLT5jcmFfcHJpb3JpdHk7CiAJCWlmIChhbGcpCi0JCQljcnlwdG9fYWxnX3B1dChhbGcpOworCQkJY3J5cHRvX21vZF9wdXQoYWxnKTsKIAkJYWxnID0gcTsKIAogCQlpZiAoZXhhY3QpCiAJCQlicmVhazsKIAl9Ci0JCi0JdXBfcmVhZCgmY3J5cHRvX2FsZ19zZW0pOworCisJcmV0dXJuIGFsZzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKF9fY3J5cHRvX2FsZ19sb29rdXApOworCitzdGF0aWMgdm9pZCBjcnlwdG9fbGFydmFsX2Rlc3Ryb3koc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2xhcnZhbCAqbGFydmFsID0gKHZvaWQgKilhbGc7CisKKwlCVUdfT04oIWNyeXB0b19pc19sYXJ2YWwoYWxnKSk7CisJaWYgKGxhcnZhbC0+YWR1bHQpCisJCWNyeXB0b19tb2RfcHV0KGxhcnZhbC0+YWR1bHQpOworCWtmcmVlKGxhcnZhbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2xhcnZhbF9hbGxvYyhjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwKKwkJCQkJICAgICAgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2xhcnZhbCAqbGFydmFsOworCisJbGFydmFsID0ga3phbGxvYyhzaXplb2YoKmxhcnZhbCksIEdGUF9LRVJORUwpOworCWlmICghbGFydmFsKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWxhcnZhbC0+bWFzayA9IG1hc2s7CisJbGFydmFsLT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19MQVJWQUwgfCB0eXBlOworCWxhcnZhbC0+YWxnLmNyYV9wcmlvcml0eSA9IC0xOworCWxhcnZhbC0+YWxnLmNyYV9kZXN0cm95ID0gY3J5cHRvX2xhcnZhbF9kZXN0cm95OworCisJYXRvbWljX3NldCgmbGFydmFsLT5hbGcuY3JhX3JlZmNudCwgMik7CisJc3RybGNweShsYXJ2YWwtPmFsZy5jcmFfbmFtZSwgbmFtZSwgQ1JZUFRPX01BWF9BTEdfTkFNRSk7CisJaW5pdF9jb21wbGV0aW9uKCZsYXJ2YWwtPmNvbXBsZXRpb24pOworCisJZG93bl93cml0ZSgmY3J5cHRvX2FsZ19zZW0pOworCWFsZyA9IF9fY3J5cHRvX2FsZ19sb29rdXAobmFtZSwgdHlwZSwgbWFzayk7CisJaWYgKCFhbGcpIHsKKwkJYWxnID0gJmxhcnZhbC0+YWxnOworCQlsaXN0X2FkZCgmYWxnLT5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7CisJfQorCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisKKwlpZiAoYWxnICE9ICZsYXJ2YWwtPmFsZykKKwkJa2ZyZWUobGFydmFsKTsKKwogCXJldHVybiBhbGc7CiB9CiAKLS8qIEEgZmFyIG1vcmUgaW50ZWxsaWdlbnQgdmVyc2lvbiBvZiB0aGlzIGlzIHBsYW5uZWQuICBGb3Igbm93LCBqdXN0Ci0gKiB0cnkgYW4gZXhhY3QgbWF0Y2ggb24gdGhlIG5hbWUgb2YgdGhlIGFsZ29yaXRobS4gKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19hbGdfbW9kX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIHZvaWQgY3J5cHRvX2xhcnZhbF9raWxsKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCiB7Ci0JcmV0dXJuIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKGNyeXB0b19hbGdfbG9va3VwKG5hbWUpLCBuYW1lKTsKKwlzdHJ1Y3QgY3J5cHRvX2xhcnZhbCAqbGFydmFsID0gKHZvaWQgKilhbGc7CisKKwlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisJbGlzdF9kZWwoJmFsZy0+Y3JhX2xpc3QpOworCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7CisJY29tcGxldGUoJmxhcnZhbC0+Y29tcGxldGlvbik7CisJY3J5cHRvX2FsZ19wdXQoYWxnKTsKIH0KIAorc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fbGFydmFsX3dhaXQoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2xhcnZhbCAqbGFydmFsID0gKHZvaWQgKilhbGc7CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgmbGFydmFsLT5jb21wbGV0aW9uLCA2MCAqIEhaKTsKKwlhbGcgPSBsYXJ2YWwtPmFkdWx0OworCWlmIChhbGcpIHsKKwkJaWYgKCFjcnlwdG9fbW9kX2dldChhbGcpKQorCQkJYWxnID0gRVJSX1BUUigtRUFHQUlOKTsKKwl9IGVsc2UKKwkJYWxnID0gRVJSX1BUUigtRU5PRU5UKTsKKwljcnlwdG9fbW9kX3B1dCgmbGFydmFsLT5hbGcpOworCisJcmV0dXJuIGFsZzsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX2xvb2t1cChjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwKKwkJCQkJICAgIHUzMiBtYXNrKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisKKwlkb3duX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKKwlhbGcgPSBfX2NyeXB0b19hbGdfbG9va3VwKG5hbWUsIHR5cGUsIG1hc2spOworCXVwX3JlYWQoJmNyeXB0b19hbGdfc2VtKTsKKworCXJldHVybiBhbGc7Cit9CisKK3N0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fYWxnX21vZF9sb29rdXAoY29uc3QgY2hhciAqbmFtZSwgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisJc3RydWN0IGNyeXB0b19hbGcgKmxhcnZhbDsKKwlpbnQgb2s7CisKKwlpZiAoIW5hbWUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOworCisJbWFzayAmPSB+KENSWVBUT19BTEdfTEFSVkFMIHwgQ1JZUFRPX0FMR19ERUFEKTsKKwl0eXBlICY9IG1hc2s7CisKKwlhbGcgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShjcnlwdG9fYWxnX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKSwKKwkJCQkgICAgICBuYW1lKTsKKwlpZiAoYWxnKQorCQlyZXR1cm4gY3J5cHRvX2lzX2xhcnZhbChhbGcpID8gY3J5cHRvX2xhcnZhbF93YWl0KGFsZykgOiBhbGc7CisKKwlsYXJ2YWwgPSBjcnlwdG9fbGFydmFsX2FsbG9jKG5hbWUsIHR5cGUsIG1hc2spOworCWlmIChJU19FUlIobGFydmFsKSB8fCAhY3J5cHRvX2lzX2xhcnZhbChsYXJ2YWwpKQorCQlyZXR1cm4gbGFydmFsOworCisJb2sgPSBjcnlwdG9fbm90aWZ5KENSWVBUT19NU0dfQUxHX1JFUVVFU1QsIGxhcnZhbCk7CisJaWYgKG9rID09IE5PVElGWV9ET05FKSB7CisJCXJlcXVlc3RfbW9kdWxlKCJjcnlwdG9tZ3IiKTsKKwkJb2sgPSBjcnlwdG9fbm90aWZ5KENSWVBUT19NU0dfQUxHX1JFUVVFU1QsIGxhcnZhbCk7CisJfQorCisJaWYgKG9rID09IE5PVElGWV9TVE9QKQorCQlhbGcgPSBjcnlwdG9fbGFydmFsX3dhaXQobGFydmFsKTsKKwllbHNlIHsKKwkJY3J5cHRvX21vZF9wdXQobGFydmFsKTsKKwkJYWxnID0gRVJSX1BUUigtRU5PRU5UKTsKKwl9CisJY3J5cHRvX2xhcnZhbF9raWxsKGxhcnZhbCk7CisJcmV0dXJuIGFsZzsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19hbGdfbW9kX2xvb2t1cCk7CisKIHN0YXRpYyBpbnQgY3J5cHRvX2luaXRfZmxhZ3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIGZsYWdzKQogewogCXRmbS0+Y3J0X2ZsYWdzID0gZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVNLOwpAQCAtOTQsMTcgKzIyNiwxOCBAQAogCQkKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKIAkJcmV0dXJuIGNyeXB0b19pbml0X2NvbXByZXNzX2ZsYWdzKHRmbSwgZmxhZ3MpOwotCQotCWRlZmF1bHQ6Ci0JCWJyZWFrOwogCX0KIAkKLQlCVUcoKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjcnlwdG9faW5pdF9vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKKwljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKnR5cGUgPSB0Zm0tPl9fY3J0X2FsZy0+Y3JhX3R5cGU7CisKKwlpZiAodHlwZSkKKwkJcmV0dXJuIHR5cGUtPmluaXQodGZtKTsKKwogCXN3aXRjaCAoY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pKSB7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgogCQlyZXR1cm4gY3J5cHRvX2luaXRfY2lwaGVyX29wcyh0Zm0pOwpAQCAtMTI1LDYgKzI1OCwxNCBAQAogCiBzdGF0aWMgdm9pZCBjcnlwdG9fZXhpdF9vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKKwljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKnR5cGUgPSB0Zm0tPl9fY3J0X2FsZy0+Y3JhX3R5cGU7CisKKwlpZiAodHlwZSkgeworCQlpZiAodHlwZS0+ZXhpdCkKKwkJCXR5cGUtPmV4aXQodGZtKTsKKwkJcmV0dXJuOworCX0KKwogCXN3aXRjaCAoY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pKSB7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgogCQljcnlwdG9fZXhpdF9jaXBoZXJfb3BzKHRmbSk7CkBAIC0xNDYsNTMgKzI4Nyw2NyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19jdHhzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIGludCBmbGFncykKIHsKKwljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKnR5cGUgPSBhbGctPmNyYV90eXBlOwogCXVuc2lnbmVkIGludCBsZW47CiAKKwlsZW4gPSBhbGctPmNyYV9hbGlnbm1hc2sgJiB+KGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpIC0gMSk7CisJaWYgKHR5cGUpCisJCXJldHVybiBsZW4gKyB0eXBlLT5jdHhzaXplKGFsZyk7CisKIAlzd2l0Y2ggKGFsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0spIHsKIAlkZWZhdWx0OgogCQlCVUcoKTsKIAogCWNhc2UgQ1JZUFRPX0FMR19UWVBFX0NJUEhFUjoKLQkJbGVuID0gY3J5cHRvX2NpcGhlcl9jdHhzaXplKGFsZywgZmxhZ3MpOworCQlsZW4gKz0gY3J5cHRvX2NpcGhlcl9jdHhzaXplKGFsZywgZmxhZ3MpOwogCQlicmVhazsKIAkJCiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfRElHRVNUOgotCQlsZW4gPSBjcnlwdG9fZGlnZXN0X2N0eHNpemUoYWxnLCBmbGFncyk7CisJCWxlbiArPSBjcnlwdG9fZGlnZXN0X2N0eHNpemUoYWxnLCBmbGFncyk7CiAJCWJyZWFrOwogCQkKIAljYXNlIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzoKLQkJbGVuID0gY3J5cHRvX2NvbXByZXNzX2N0eHNpemUoYWxnLCBmbGFncyk7CisJCWxlbiArPSBjcnlwdG9fY29tcHJlc3NfY3R4c2l6ZShhbGcsIGZsYWdzKTsKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIGxlbiArIChhbGctPmNyYV9hbGlnbm1hc2sgJiB+KGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpIC0gMSkpOworCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBmbGFncykKK3ZvaWQgY3J5cHRvX3Nob290X2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCWRvd25fd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKKwlhbGctPmNyYV9mbGFncyB8PSBDUllQVE9fQUxHX0RZSU5HOworCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fc2hvb3RfYWxnKTsKKworc3RydWN0IGNyeXB0b190Zm0gKl9fY3J5cHRvX2FsbG9jX3RmbShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLCB1MzIgZmxhZ3MpCiB7CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IE5VTEw7Ci0Jc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKIAl1bnNpZ25lZCBpbnQgdGZtX3NpemU7Ci0KLQlhbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSk7Ci0JaWYgKGFsZyA9PSBOVUxMKQotCQlnb3RvIG91dDsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCXRmbV9zaXplID0gc2l6ZW9mKCp0Zm0pICsgY3J5cHRvX2N0eHNpemUoYWxnLCBmbGFncyk7CiAJdGZtID0ga3phbGxvYyh0Zm1fc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHRmbSA9PSBOVUxMKQotCQlnb3RvIG91dF9wdXQ7CisJCWdvdG8gb3V0OwogCiAJdGZtLT5fX2NydF9hbGcgPSBhbGc7Ci0JCi0JaWYgKGNyeXB0b19pbml0X2ZsYWdzKHRmbSwgZmxhZ3MpKQorCisJZXJyID0gY3J5cHRvX2luaXRfZmxhZ3ModGZtLCBmbGFncyk7CisJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZV90Zm07CiAJCQotCWlmIChjcnlwdG9faW5pdF9vcHModGZtKSkKKwllcnIgPSBjcnlwdG9faW5pdF9vcHModGZtKTsKKwlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlX3RmbTsKIAotCWlmIChhbGctPmNyYV9pbml0ICYmIGFsZy0+Y3JhX2luaXQodGZtKSkKKwlpZiAoYWxnLT5jcmFfaW5pdCAmJiAoZXJyID0gYWxnLT5jcmFfaW5pdCh0Zm0pKSkgeworCQlpZiAoZXJyID09IC1FQUdBSU4pCisJCQljcnlwdG9fc2hvb3RfYWxnKGFsZyk7CiAJCWdvdG8gY3JhX2luaXRfZmFpbGVkOworCX0KIAogCWdvdG8gb3V0OwogCkBAIC0yMDAsMTMgKzM1NSw5NyBAQAogCWNyeXB0b19leGl0X29wcyh0Zm0pOwogb3V0X2ZyZWVfdGZtOgogCWtmcmVlKHRmbSk7Ci0JdGZtID0gTlVMTDsKLW91dF9wdXQ6Ci0JY3J5cHRvX2FsZ19wdXQoYWxnKTsKKwl0Zm0gPSBFUlJfUFRSKGVycik7CiBvdXQ6CiAJcmV0dXJuIHRmbTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKF9fY3J5cHRvX2FsbG9jX3RmbSk7CiAKK3N0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fYWxsb2NfdGZtKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBmbGFncykKK3sKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gTlVMTDsKKwlpbnQgZXJyOworCisJZG8geworCQlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCisJCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwkJZXJyID0gUFRSX0VSUihhbGcpOworCQlpZiAoSVNfRVJSKGFsZykpCisJCQljb250aW51ZTsKKworCQl0Zm0gPSBfX2NyeXB0b19hbGxvY190Zm0oYWxnLCBmbGFncyk7CisJCWVyciA9IDA7CisJCWlmIChJU19FUlIodGZtKSkgeworCQkJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwkJCWVyciA9IFBUUl9FUlIodGZtKTsKKwkJCXRmbSA9IE5VTEw7CisJCX0KKwl9IHdoaWxlIChlcnIgPT0gLUVBR0FJTiAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCisJcmV0dXJuIHRmbTsKK30KKworLyoKKyAqCWNyeXB0b19hbGxvY19iYXNlIC0gTG9jYXRlIGFsZ29yaXRobSBhbmQgYWxsb2NhdGUgdHJhbnNmb3JtCisgKglAYWxnX25hbWU6IE5hbWUgb2YgYWxnb3JpdGhtCisgKglAdHlwZTogVHlwZSBvZiBhbGdvcml0aG0KKyAqCUBtYXNrOiBNYXNrIGZvciB0eXBlIGNvbXBhcmlzb24KKyAqCisgKgljcnlwdG9fYWxsb2NfYmFzZSgpIHdpbGwgZmlyc3QgYXR0ZW1wdCB0byBsb2NhdGUgYW4gYWxyZWFkeSBsb2FkZWQKKyAqCWFsZ29yaXRobS4gIElmIHRoYXQgZmFpbHMgYW5kIHRoZSBrZXJuZWwgc3VwcG9ydHMgZHluYW1pY2FsbHkgbG9hZGFibGUKKyAqCW1vZHVsZXMsIGl0IHdpbGwgdGhlbiBhdHRlbXB0IHRvIGxvYWQgYSBtb2R1bGUgb2YgdGhlIHNhbWUgbmFtZSBvcgorICoJYWxpYXMuICBJZiB0aGF0IGZhaWxzIGl0IHdpbGwgc2VuZCBhIHF1ZXJ5IHRvIGFueSBsb2FkZWQgY3J5cHRvIG1hbmFnZXIKKyAqCXRvIGNvbnN0cnVjdCBhbiBhbGdvcml0aG0gb24gdGhlIGZseS4gIEEgcmVmY291bnQgaXMgZ3JhYmJlZCBvbiB0aGUKKyAqCWFsZ29yaXRobSB3aGljaCBpcyB0aGVuIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV3IHRyYW5zZm9ybS4KKyAqCisgKglUaGUgcmV0dXJuZWQgdHJhbnNmb3JtIGlzIG9mIGEgbm9uLWRldGVybWluYXRlIHR5cGUuICBNb3N0IHBlb3BsZQorICoJc2hvdWxkIHVzZSBvbmUgb2YgdGhlIG1vcmUgc3BlY2lmaWMgYWxsb2NhdGlvbiBmdW5jdGlvbnMgc3VjaCBhcworICoJY3J5cHRvX2FsbG9jX2Jsa2NpcGhlci4KKyAqCisgKglJbiBjYXNlIG9mIGVycm9yIHRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgcG9pbnRlci4KKyAqLworc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19hbGxvY19iYXNlKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwlpbnQgZXJyOworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnOworCisJCWFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChhbGdfbmFtZSwgdHlwZSwgbWFzayk7CisJCWVyciA9IFBUUl9FUlIoYWxnKTsKKwkJdGZtID0gRVJSX1BUUihlcnIpOworCQlpZiAoSVNfRVJSKGFsZykpCisJCQlnb3RvIGVycjsKKworCQl0Zm0gPSBfX2NyeXB0b19hbGxvY190Zm0oYWxnLCAwKTsKKwkJaWYgKCFJU19FUlIodGZtKSkKKwkJCWJyZWFrOworCisJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCWVyciA9IFBUUl9FUlIodGZtKTsKKworZXJyOgorCQlpZiAoZXJyICE9IC1FQUdBSU4pCisJCQlicmVhazsKKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQllcnIgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJfQorCX07CisKKwlyZXR1cm4gdGZtOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2FsbG9jX2Jhc2UpOworIAorLyoKKyAqCWNyeXB0b19mcmVlX3RmbSAtIEZyZWUgY3J5cHRvIHRyYW5zZm9ybQorICoJQHRmbTogVHJhbnNmb3JtIHRvIGZyZWUKKyAqCisgKgljcnlwdG9fZnJlZV90Zm0oKSBmcmVlcyB1cCB0aGUgdHJhbnNmb3JtIGFuZCBhbnkgYXNzb2NpYXRlZCByZXNvdXJjZXMsCisgKgl0aGVuIGRyb3BzIHRoZSByZWZjb3VudCBvbiB0aGUgYXNzb2NpYXRlZCBhbGdvcml0aG0uCisgKi8KIHZvaWQgY3J5cHRvX2ZyZWVfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKQEAgLTIyMSwxMDggKzQ2MCwzOSBAQAogCWlmIChhbGctPmNyYV9leGl0KQogCQlhbGctPmNyYV9leGl0KHRmbSk7CiAJY3J5cHRvX2V4aXRfb3BzKHRmbSk7Ci0JY3J5cHRvX2FsZ19wdXQoYWxnKTsKKwljcnlwdG9fbW9kX3B1dChhbGcpOwogCW1lbXNldCh0Zm0sIDAsIHNpemUpOwogCWtmcmVlKHRmbSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19zZXRfZHJpdmVyX25hbWUoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKLXsKLQlzdGF0aWMgY29uc3QgY2hhciBzdWZmaXhbXSA9ICItZ2VuZXJpYyI7Ci0JY2hhciAqZHJpdmVyX25hbWUgPSBhbGctPmNyYV9kcml2ZXJfbmFtZTsKLQlpbnQgbGVuOwotCi0JaWYgKCpkcml2ZXJfbmFtZSkKLQkJcmV0dXJuIDA7Ci0KLQlsZW4gPSBzdHJsY3B5KGRyaXZlcl9uYW1lLCBhbGctPmNyYV9uYW1lLCBDUllQVE9fTUFYX0FMR19OQU1FKTsKLQlpZiAobGVuICsgc2l6ZW9mKHN1ZmZpeCkgPiBDUllQVE9fTUFYX0FMR19OQU1FKQotCQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKLQotCW1lbWNweShkcml2ZXJfbmFtZSArIGxlbiwgc3VmZml4LCBzaXplb2Yoc3VmZml4KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjcnlwdG9fcmVnaXN0ZXJfYWxnKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgY3J5cHRvX2FsZyAqcTsKLQotCWlmIChhbGctPmNyYV9hbGlnbm1hc2sgJiAoYWxnLT5jcmFfYWxpZ25tYXNrICsgMSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKGFsZy0+Y3JhX2FsaWdubWFzayAmIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWxnLT5jcmFfYmxvY2tzaXplID4gUEFHRV9TSVpFIC8gOCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoYWxnLT5jcmFfcHJpb3JpdHkgPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkKLQlyZXQgPSBjcnlwdG9fc2V0X2RyaXZlcl9uYW1lKGFsZyk7Ci0JaWYgKHVubGlrZWx5KHJldCkpCi0JCXJldHVybiByZXQ7Ci0KLQlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7Ci0JCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmY3J5cHRvX2FsZ19saXN0LCBjcmFfbGlzdCkgewotCQlpZiAocSA9PSBhbGcpIHsKLQkJCXJldCA9IC1FRVhJU1Q7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQkKLQlsaXN0X2FkZCgmYWxnLT5jcmFfbGlzdCwgJmNyeXB0b19hbGdfbGlzdCk7Ci1vdXQ6CQotCXVwX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGNyeXB0b191bnJlZ2lzdGVyX2FsZyhzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQotewotCWludCByZXQgPSAtRU5PRU5UOwotCXN0cnVjdCBjcnlwdG9fYWxnICpxOwotCQotCUJVR19PTighYWxnLT5jcmFfbW9kdWxlKTsKLQkKLQlkb3duX3dyaXRlKCZjcnlwdG9fYWxnX3NlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShxLCAmY3J5cHRvX2FsZ19saXN0LCBjcmFfbGlzdCkgewotCQlpZiAoYWxnID09IHEpIHsKLQkJCWxpc3RfZGVsKCZhbGctPmNyYV9saXN0KTsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLW91dDoJCi0JdXBfd3JpdGUoJmNyeXB0b19hbGdfc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCiBpbnQgY3J5cHRvX2FsZ19hdmFpbGFibGUoY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKQogewogCWludCByZXQgPSAwOwotCXN0cnVjdCBjcnlwdG9fYWxnICphbGcgPSBjcnlwdG9fYWxnX21vZF9sb29rdXAobmFtZSk7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCAwLAorCQkJCQkJICAgICAgIENSWVBUT19BTEdfQVNZTkMpOwogCQotCWlmIChhbGcpIHsKLQkJY3J5cHRvX2FsZ19wdXQoYWxnKTsKKwlpZiAoIUlTX0VSUihhbGcpKSB7CisJCWNyeXB0b19tb2RfcHV0KGFsZyk7CiAJCXJldCA9IDE7CiAJfQogCQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGluaXRfY3J5cHRvKHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIENyeXB0b2dyYXBoaWMgQVBJXG4iKTsKLQljcnlwdG9faW5pdF9wcm9jKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLV9faW5pdGNhbGwoaW5pdF9jcnlwdG8pOwotCi1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fcmVnaXN0ZXJfYWxnKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b191bnJlZ2lzdGVyX2FsZyk7CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxsb2NfdGZtKTsKIEVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19mcmVlX3RmbSk7CiBFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fYWxnX2F2YWlsYWJsZSk7CisKK2ludCBjcnlwdG9faGFzX2FsZyhjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZyA9IGNyeXB0b19hbGdfbW9kX2xvb2t1cChuYW1lLCB0eXBlLCBtYXNrKTsKKwkKKwlpZiAoIUlTX0VSUihhbGcpKSB7CisJCWNyeXB0b19tb2RfcHV0KGFsZyk7CisJCXJldCA9IDE7CisJfQorCQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faGFzX2FsZyk7CmRpZmYgLS1naXQgYS9jcnlwdG8vYXJjNC5jIGIvY3J5cHRvL2FyYzQuYwppbmRleCA1ZWRjNmE2Li44YmU0N2UxIDEwMDY0NAotLS0gYS9jcnlwdG8vYXJjNC5jCisrKyBiL2NyeXB0by9hcmM0LmMKQEAgLTI1LDcgKzI1LDcgQEAKIH07CiAKIHN0YXRpYyBpbnQgYXJjNF9zZXRfa2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCi0JCQl1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKKwkJCXVuc2lnbmVkIGludCBrZXlfbGVuKQogewogCXN0cnVjdCBhcmM0X2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgaSwgaiA9IDAsIGsgPSAwOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2Jsa2NpcGhlci5jIGIvY3J5cHRvL2Jsa2NpcGhlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNGM5MzliCi0tLSAvZGV2L251bGwKKysrIGIvY3J5cHRvL2Jsa2NpcGhlci5jCkBAIC0wLDAgKzEsNDA1IEBACisvKgorICogQmxvY2sgY2hhaW5pbmcgY2lwaGVyIG9wZXJhdGlvbnMuCisgKiAKKyAqIEdlbmVyaWMgZW5jcnlwdC9kZWNyeXB0IHdyYXBwZXIgZm9yIGNpcGhlcnMsIGhhbmRsZXMgb3BlcmF0aW9ucyBhY3Jvc3MKKyAqIG11bHRpcGxlIHBhZ2UgYm91bmRhcmllcyBieSB1c2luZyB0ZW1wb3JhcnkgYmxvY2tzLiAgSW4gdXNlciBjb250ZXh0LAorICogdGhlIGtlcm5lbCBpcyBnaXZlbiBhIGNoYW5jZSB0byBzY2hlZHVsZSB1cyBvbmNlIHBlciBwYWdlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIAorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAic2NhdHRlcndhbGsuaCIKKworZW51bSB7CisJQkxLQ0lQSEVSX1dBTEtfUEhZUyA9IDEgPDwgMCwKKwlCTEtDSVBIRVJfV0FMS19TTE9XID0gMSA8PCAxLAorCUJMS0NJUEhFUl9XQUxLX0NPUFkgPSAxIDw8IDIsCisJQkxLQ0lQSEVSX1dBTEtfRElGRiA9IDEgPDwgMywKK307CisKK3N0YXRpYyBpbnQgYmxrY2lwaGVyX3dhbGtfbmV4dChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgICAgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKTsKK3N0YXRpYyBpbnQgYmxrY2lwaGVyX3dhbGtfZmlyc3Qoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJCXN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2Fsayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtjaXBoZXJfbWFwX3NyYyhzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCit7CisJd2Fsay0+c3JjLnZpcnQuYWRkciA9IHNjYXR0ZXJ3YWxrX21hcCgmd2Fsay0+aW4sIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYmxrY2lwaGVyX21hcF9kc3Qoc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQoreworCXdhbGstPmRzdC52aXJ0LmFkZHIgPSBzY2F0dGVyd2Fsa19tYXAoJndhbGstPm91dCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtjaXBoZXJfdW5tYXBfc3JjKHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlzY2F0dGVyd2Fsa191bm1hcCh3YWxrLT5zcmMudmlydC5hZGRyLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJsa2NpcGhlcl91bm1hcF9kc3Qoc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKQoreworCXNjYXR0ZXJ3YWxrX3VubWFwKHdhbGstPmRzdC52aXJ0LmFkZHIsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHU4ICpibGtjaXBoZXJfZ2V0X3Nwb3QodTggKnN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWlmIChvZmZzZXRfaW5fcGFnZShzdGFydCArIGxlbikgPCBsZW4pCisJCXJldHVybiAodTggKikoKHVuc2lnbmVkIGxvbmcpKHN0YXJ0ICsgbGVuKSAmIFBBR0VfTUFTSyk7CisJcmV0dXJuIHN0YXJ0OworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtjaXBoZXJfZG9uZV9zbG93KHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCisJCQkJCSAgICAgICBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGssCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgYnNpemUpCit7CisJdTggKmFkZHI7CisJdW5zaWduZWQgaW50IGFsaWdubWFzayA9IGNyeXB0b19ibGtjaXBoZXJfYWxpZ25tYXNrKHRmbSk7CisKKwlhZGRyID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpd2Fsay0+YnVmZmVyLCBhbGlnbm1hc2sgKyAxKTsKKwlhZGRyID0gYmxrY2lwaGVyX2dldF9zcG90KGFkZHIsIGJzaXplKTsKKwlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKGFkZHIsICZ3YWxrLT5vdXQsIGJzaXplLCAxKTsKKwlyZXR1cm4gYnNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJsa2NpcGhlcl9kb25lX2Zhc3Qoc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG4pCit7CisJbiA9IHdhbGstPm5ieXRlcyAtIG47CisKKwlpZiAod2Fsay0+ZmxhZ3MgJiBCTEtDSVBIRVJfV0FMS19DT1BZKSB7CisJCWJsa2NpcGhlcl9tYXBfZHN0KHdhbGspOworCQltZW1jcHkod2Fsay0+ZHN0LnZpcnQuYWRkciwgd2Fsay0+cGFnZSwgbik7CisJCWJsa2NpcGhlcl91bm1hcF9kc3Qod2Fsayk7CisJfSBlbHNlIGlmICghKHdhbGstPmZsYWdzICYgQkxLQ0lQSEVSX1dBTEtfUEhZUykpIHsKKwkJYmxrY2lwaGVyX3VubWFwX3NyYyh3YWxrKTsKKwkJaWYgKHdhbGstPmZsYWdzICYgQkxLQ0lQSEVSX1dBTEtfRElGRikKKwkJCWJsa2NpcGhlcl91bm1hcF9kc3Qod2Fsayk7CisJfQorCisJc2NhdHRlcndhbGtfYWR2YW5jZSgmd2Fsay0+aW4sIG4pOworCXNjYXR0ZXJ3YWxrX2FkdmFuY2UoJndhbGstPm91dCwgbik7CisKKwlyZXR1cm4gbjsKK30KKworaW50IGJsa2NpcGhlcl93YWxrX2RvbmUoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrLCBpbnQgZXJyKQoreworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0gPSBkZXNjLT50Zm07CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IDA7CisKKwlpZiAobGlrZWx5KGVyciA+PSAwKSkgeworCQl1bnNpZ25lZCBpbnQgYnNpemUgPSBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSh0Zm0pOworCQl1bnNpZ25lZCBpbnQgbjsKKworCQlpZiAobGlrZWx5KCEod2Fsay0+ZmxhZ3MgJiBCTEtDSVBIRVJfV0FMS19TTE9XKSkpCisJCQluID0gYmxrY2lwaGVyX2RvbmVfZmFzdCh3YWxrLCBlcnIpOworCQllbHNlCisJCQluID0gYmxrY2lwaGVyX2RvbmVfc2xvdyh0Zm0sIHdhbGssIGJzaXplKTsKKworCQluYnl0ZXMgPSB3YWxrLT50b3RhbCAtIG47CisJCWVyciA9IDA7CisJfQorCisJc2NhdHRlcndhbGtfZG9uZSgmd2Fsay0+aW4sIDAsIG5ieXRlcyk7CisJc2NhdHRlcndhbGtfZG9uZSgmd2Fsay0+b3V0LCAxLCBuYnl0ZXMpOworCisJd2Fsay0+dG90YWwgPSBuYnl0ZXM7CisJd2Fsay0+bmJ5dGVzID0gbmJ5dGVzOworCisJaWYgKG5ieXRlcykgeworCQljcnlwdG9feWllbGQoZGVzYy0+ZmxhZ3MpOworCQlyZXR1cm4gYmxrY2lwaGVyX3dhbGtfbmV4dChkZXNjLCB3YWxrKTsKKwl9CisKKwlpZiAod2Fsay0+aXYgIT0gZGVzYy0+aW5mbykKKwkJbWVtY3B5KGRlc2MtPmluZm8sIHdhbGstPml2LCBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pKTsKKwlpZiAod2Fsay0+YnVmZmVyICE9IHdhbGstPnBhZ2UpCisJCWtmcmVlKHdhbGstPmJ1ZmZlcik7CisJaWYgKHdhbGstPnBhZ2UpCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl3YWxrLT5wYWdlKTsKKworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChibGtjaXBoZXJfd2Fsa19kb25lKTsKKworc3RhdGljIGlubGluZSBpbnQgYmxrY2lwaGVyX25leHRfc2xvdyhzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJICAgICAgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrLAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBic2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWxpZ25tYXNrKQoreworCXVuc2lnbmVkIGludCBuOworCisJaWYgKHdhbGstPmJ1ZmZlcikKKwkJZ290byBvazsKKworCXdhbGstPmJ1ZmZlciA9IHdhbGstPnBhZ2U7CisJaWYgKHdhbGstPmJ1ZmZlcikKKwkJZ290byBvazsKKworCW4gPSBic2l6ZSAqIDIgKyAoYWxpZ25tYXNrICYgfihjcnlwdG9fdGZtX2N0eF9hbGlnbm1lbnQoKSAtIDEpKTsKKwl3YWxrLT5idWZmZXIgPSBrbWFsbG9jKG4sIEdGUF9BVE9NSUMpOworCWlmICghd2Fsay0+YnVmZmVyKQorCQlyZXR1cm4gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCB3YWxrLCAtRU5PTUVNKTsKKworb2s6CisJd2Fsay0+ZHN0LnZpcnQuYWRkciA9ICh1OCAqKUFMSUdOKCh1bnNpZ25lZCBsb25nKXdhbGstPmJ1ZmZlciwKKwkJCQkJICBhbGlnbm1hc2sgKyAxKTsKKwl3YWxrLT5kc3QudmlydC5hZGRyID0gYmxrY2lwaGVyX2dldF9zcG90KHdhbGstPmRzdC52aXJ0LmFkZHIsIGJzaXplKTsKKwl3YWxrLT5zcmMudmlydC5hZGRyID0gYmxrY2lwaGVyX2dldF9zcG90KHdhbGstPmRzdC52aXJ0LmFkZHIgKyBic2l6ZSwKKwkJCQkJCSBic2l6ZSk7CisKKwlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKHdhbGstPnNyYy52aXJ0LmFkZHIsICZ3YWxrLT5pbiwgYnNpemUsIDApOworCisJd2Fsay0+bmJ5dGVzID0gYnNpemU7CisJd2Fsay0+ZmxhZ3MgfD0gQkxLQ0lQSEVSX1dBTEtfU0xPVzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBibGtjaXBoZXJfbmV4dF9jb3B5KHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwl1OCAqdG1wID0gd2Fsay0+cGFnZTsKKworCWJsa2NpcGhlcl9tYXBfc3JjKHdhbGspOworCW1lbWNweSh0bXAsIHdhbGstPnNyYy52aXJ0LmFkZHIsIHdhbGstPm5ieXRlcyk7CisJYmxrY2lwaGVyX3VubWFwX3NyYyh3YWxrKTsKKworCXdhbGstPnNyYy52aXJ0LmFkZHIgPSB0bXA7CisJd2Fsay0+ZHN0LnZpcnQuYWRkciA9IHRtcDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBibGtjaXBoZXJfbmV4dF9mYXN0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkgICAgICBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCit7CisJdW5zaWduZWQgbG9uZyBkaWZmOworCisJd2Fsay0+c3JjLnBoeXMucGFnZSA9IHNjYXR0ZXJ3YWxrX3BhZ2UoJndhbGstPmluKTsKKwl3YWxrLT5zcmMucGh5cy5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZSh3YWxrLT5pbi5vZmZzZXQpOworCXdhbGstPmRzdC5waHlzLnBhZ2UgPSBzY2F0dGVyd2Fsa19wYWdlKCZ3YWxrLT5vdXQpOworCXdhbGstPmRzdC5waHlzLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHdhbGstPm91dC5vZmZzZXQpOworCisJaWYgKHdhbGstPmZsYWdzICYgQkxLQ0lQSEVSX1dBTEtfUEhZUykKKwkJcmV0dXJuIDA7CisKKwlkaWZmID0gd2Fsay0+c3JjLnBoeXMub2Zmc2V0IC0gd2Fsay0+ZHN0LnBoeXMub2Zmc2V0OworCWRpZmYgfD0gd2Fsay0+c3JjLnZpcnQucGFnZSAtIHdhbGstPmRzdC52aXJ0LnBhZ2U7CisKKwlibGtjaXBoZXJfbWFwX3NyYyh3YWxrKTsKKwl3YWxrLT5kc3QudmlydC5hZGRyID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKworCWlmIChkaWZmKSB7CisJCXdhbGstPmZsYWdzIHw9IEJMS0NJUEhFUl9XQUxLX0RJRkY7CisJCWJsa2NpcGhlcl9tYXBfZHN0KHdhbGspOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJsa2NpcGhlcl93YWxrX25leHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgICAgIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gZGVzYy0+dGZtOworCXVuc2lnbmVkIGludCBhbGlnbm1hc2sgPSBjcnlwdG9fYmxrY2lwaGVyX2FsaWdubWFzayh0Zm0pOworCXVuc2lnbmVkIGludCBic2l6ZSA9IGNyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplKHRmbSk7CisJdW5zaWduZWQgaW50IG47CisJaW50IGVycjsKKworCW4gPSB3YWxrLT50b3RhbDsKKwlpZiAodW5saWtlbHkobiA8IGJzaXplKSkgeworCQlkZXNjLT5mbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfQkxPQ0tfTEVOOworCQlyZXR1cm4gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCB3YWxrLCAtRUlOVkFMKTsKKwl9CisKKwl3YWxrLT5mbGFncyAmPSB+KEJMS0NJUEhFUl9XQUxLX1NMT1cgfCBCTEtDSVBIRVJfV0FMS19DT1BZIHwKKwkJCSBCTEtDSVBIRVJfV0FMS19ESUZGKTsKKwlpZiAoIXNjYXR0ZXJ3YWxrX2FsaWduZWQoJndhbGstPmluLCBhbGlnbm1hc2spIHx8CisJICAgICFzY2F0dGVyd2Fsa19hbGlnbmVkKCZ3YWxrLT5vdXQsIGFsaWdubWFzaykpIHsKKwkJd2Fsay0+ZmxhZ3MgfD0gQkxLQ0lQSEVSX1dBTEtfQ09QWTsKKwkJaWYgKCF3YWxrLT5wYWdlKSB7CisJCQl3YWxrLT5wYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0FUT01JQyk7CisJCQlpZiAoIXdhbGstPnBhZ2UpCisJCQkJbiA9IDA7CisJCX0KKwl9CisKKwluID0gc2NhdHRlcndhbGtfY2xhbXAoJndhbGstPmluLCBuKTsKKwluID0gc2NhdHRlcndhbGtfY2xhbXAoJndhbGstPm91dCwgbik7CisKKwlpZiAodW5saWtlbHkobiA8IGJzaXplKSkgeworCQllcnIgPSBibGtjaXBoZXJfbmV4dF9zbG93KGRlc2MsIHdhbGssIGJzaXplLCBhbGlnbm1hc2spOworCQlnb3RvIHNldF9waHlzX2xvd21lbTsKKwl9CisKKwl3YWxrLT5uYnl0ZXMgPSBuOworCWlmICh3YWxrLT5mbGFncyAmIEJMS0NJUEhFUl9XQUxLX0NPUFkpIHsKKwkJZXJyID0gYmxrY2lwaGVyX25leHRfY29weSh3YWxrKTsKKwkJZ290byBzZXRfcGh5c19sb3dtZW07CisJfQorCisJcmV0dXJuIGJsa2NpcGhlcl9uZXh0X2Zhc3QoZGVzYywgd2Fsayk7CisKK3NldF9waHlzX2xvd21lbToKKwlpZiAod2Fsay0+ZmxhZ3MgJiBCTEtDSVBIRVJfV0FMS19QSFlTKSB7CisJCXdhbGstPnNyYy5waHlzLnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uod2Fsay0+c3JjLnZpcnQuYWRkcik7CisJCXdhbGstPmRzdC5waHlzLnBhZ2UgPSB2aXJ0X3RvX3BhZ2Uod2Fsay0+ZHN0LnZpcnQuYWRkcik7CisJCXdhbGstPnNyYy5waHlzLm9mZnNldCAmPSBQQUdFX1NJWkUgLSAxOworCQl3YWxrLT5kc3QucGh5cy5vZmZzZXQgJj0gUEFHRV9TSVpFIC0gMTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGlubGluZSBpbnQgYmxrY2lwaGVyX2NvcHlfaXYoc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrLAorCQkJCSAgICBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgYWxpZ25tYXNrKQoreworCXVuc2lnbmVkIGJzID0gY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUodGZtKTsKKwl1bnNpZ25lZCBpbnQgaXZzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKTsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGJzICogMiArIGl2c2l6ZSArIG1heChicywgaXZzaXplKSAtIChhbGlnbm1hc2sgKyAxKTsKKwl1OCAqaXY7CisKKwlzaXplICs9IGFsaWdubWFzayAmIH4oY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkgLSAxKTsKKwl3YWxrLT5idWZmZXIgPSBrbWFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCWlmICghd2Fsay0+YnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWl2ID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpd2Fsay0+YnVmZmVyLCBhbGlnbm1hc2sgKyAxKTsKKwlpdiA9IGJsa2NpcGhlcl9nZXRfc3BvdChpdiwgYnMpICsgYnM7CisJaXYgPSBibGtjaXBoZXJfZ2V0X3Nwb3QoaXYsIGJzKSArIGJzOworCWl2ID0gYmxrY2lwaGVyX2dldF9zcG90KGl2LCBpdnNpemUpOworCisJd2Fsay0+aXYgPSBtZW1jcHkoaXYsIHdhbGstPml2LCBpdnNpemUpOworCXJldHVybiAwOworfQorCitpbnQgYmxrY2lwaGVyX3dhbGtfdmlydChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCit7CisJd2Fsay0+ZmxhZ3MgJj0gfkJMS0NJUEhFUl9XQUxLX1BIWVM7CisJcmV0dXJuIGJsa2NpcGhlcl93YWxrX2ZpcnN0KGRlc2MsIHdhbGspOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYmxrY2lwaGVyX3dhbGtfdmlydCk7CisKK2ludCBibGtjaXBoZXJfd2Fsa19waHlzKHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaykKK3sKKwl3YWxrLT5mbGFncyB8PSBCTEtDSVBIRVJfV0FMS19QSFlTOworCXJldHVybiBibGtjaXBoZXJfd2Fsa19maXJzdChkZXNjLCB3YWxrKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJsa2NpcGhlcl93YWxrX3BoeXMpOworCitzdGF0aWMgaW50IGJsa2NpcGhlcl93YWxrX2ZpcnN0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspCit7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGRlc2MtPnRmbTsKKwl1bnNpZ25lZCBpbnQgYWxpZ25tYXNrID0gY3J5cHRvX2Jsa2NpcGhlcl9hbGlnbm1hc2sodGZtKTsKKworCXdhbGstPm5ieXRlcyA9IHdhbGstPnRvdGFsOworCWlmICh1bmxpa2VseSghd2Fsay0+dG90YWwpKQorCQlyZXR1cm4gMDsKKworCXdhbGstPmJ1ZmZlciA9IE5VTEw7CisJd2Fsay0+aXYgPSBkZXNjLT5pbmZvOworCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpd2Fsay0+aXYgJiBhbGlnbm1hc2spKSkgeworCQlpbnQgZXJyID0gYmxrY2lwaGVyX2NvcHlfaXYod2FsaywgdGZtLCBhbGlnbm1hc2spOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlzY2F0dGVyd2Fsa19zdGFydCgmd2Fsay0+aW4sIHdhbGstPmluLnNnKTsKKwlzY2F0dGVyd2Fsa19zdGFydCgmd2Fsay0+b3V0LCB3YWxrLT5vdXQuc2cpOworCXdhbGstPnBhZ2UgPSBOVUxMOworCisJcmV0dXJuIGJsa2NpcGhlcl93YWxrX25leHQoZGVzYywgd2Fsayk7Cit9CisKK3N0YXRpYyBpbnQgc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCSAgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlzdHJ1Y3QgYmxrY2lwaGVyX2FsZyAqY2lwaGVyID0gJnRmbS0+X19jcnRfYWxnLT5jcmFfYmxrY2lwaGVyOworCisJaWYgKGtleWxlbiA8IGNpcGhlci0+bWluX2tleXNpemUgfHwga2V5bGVuID4gY2lwaGVyLT5tYXhfa2V5c2l6ZSkgeworCQl0Zm0tPmNydF9mbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGNpcGhlci0+c2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19ibGtjaXBoZXJfY3R4c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXN0cnVjdCBibGtjaXBoZXJfYWxnICpjaXBoZXIgPSAmYWxnLT5jcmFfYmxrY2lwaGVyOworCXVuc2lnbmVkIGludCBsZW4gPSBhbGctPmNyYV9jdHhzaXplOworCisJaWYgKGNpcGhlci0+aXZzaXplKSB7CisJCWxlbiA9IEFMSUdOKGxlbiwgKHVuc2lnbmVkIGxvbmcpYWxnLT5jcmFfYWxpZ25tYXNrICsgMSk7CisJCWxlbiArPSBjaXBoZXItPml2c2l6ZTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgaW50IGNyeXB0b19pbml0X2Jsa2NpcGhlcl9vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgYmxrY2lwaGVyX3RmbSAqY3J0ID0gJnRmbS0+Y3J0X2Jsa2NpcGhlcjsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2FsZyAqYWxnID0gJnRmbS0+X19jcnRfYWxnLT5jcmFfYmxrY2lwaGVyOworCXVuc2lnbmVkIGxvbmcgYWxpZ24gPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKSArIDE7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJaWYgKGFsZy0+aXZzaXplID4gUEFHRV9TSVpFIC8gOCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljcnQtPnNldGtleSA9IHNldGtleTsKKwljcnQtPmVuY3J5cHQgPSBhbGctPmVuY3J5cHQ7CisJY3J0LT5kZWNyeXB0ID0gYWxnLT5kZWNyeXB0OworCisJYWRkciA9ICh1bnNpZ25lZCBsb25nKWNyeXB0b190Zm1fY3R4KHRmbSk7CisJYWRkciA9IEFMSUdOKGFkZHIsIGFsaWduKTsKKwlhZGRyICs9IEFMSUdOKHRmbS0+X19jcnRfYWxnLT5jcmFfY3R4c2l6ZSwgYWxpZ24pOworCWNydC0+aXYgPSAodm9pZCAqKWFkZHI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX2Jsa2NpcGhlcl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGNyeXB0b19hbGcgKmFsZykKKwlfX2F0dHJpYnV0ZV91c2VkX187CitzdGF0aWMgdm9pZCBjcnlwdG9fYmxrY2lwaGVyX3Nob3coc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXNlcV9wcmludGYobSwgInR5cGUgICAgICAgICA6IGJsa2NpcGhlclxuIik7CisJc2VxX3ByaW50ZihtLCAiYmxvY2tzaXplICAgIDogJXVcbiIsIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAibWluIGtleXNpemUgIDogJXVcbiIsIGFsZy0+Y3JhX2Jsa2NpcGhlci5taW5fa2V5c2l6ZSk7CisJc2VxX3ByaW50ZihtLCAibWF4IGtleXNpemUgIDogJXVcbiIsIGFsZy0+Y3JhX2Jsa2NpcGhlci5tYXhfa2V5c2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiaXZzaXplICAgICAgIDogJXVcbiIsIGFsZy0+Y3JhX2Jsa2NpcGhlci5pdnNpemUpOworfQorCitjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX2Jsa2NpcGhlcl90eXBlID0geworCS5jdHhzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHhzaXplLAorCS5pbml0ID0gY3J5cHRvX2luaXRfYmxrY2lwaGVyX29wcywKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworCS5zaG93ID0gY3J5cHRvX2Jsa2NpcGhlcl9zaG93LAorI2VuZGlmCit9OworRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2Jsa2NpcGhlcl90eXBlKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHZW5lcmljIGJsb2NrIGNoYWluaW5nIGNpcGhlciB0eXBlIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vYmxvd2Zpc2guYyBiL2NyeXB0by9ibG93ZmlzaC5jCmluZGV4IDQ5MDI2NWYuLjU1MjM4YzQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9ibG93ZmlzaC5jCisrKyBiL2NyeXB0by9ibG93ZmlzaC5jCkBAIC0zOTksOCArMzk5LDcgQEAKIC8qIAogICogQ2FsY3VsYXRlcyB0aGUgYmxvd2Zpc2ggUyBhbmQgUCBib3hlcyBmb3IgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbi4KICAqLwotc3RhdGljIGludCBiZl9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJICAgICB1bnNpZ25lZCBpbnQga2V5bGVuLCB1MzIgKmZsYWdzKQorc3RhdGljIGludCBiZl9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAlzdHJ1Y3QgYmZfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXUzMiAqUCA9IGN0eC0+cDsKZGlmZiAtLWdpdCBhL2NyeXB0by9jYXN0NS5jIGIvY3J5cHRvL2Nhc3Q1LmMKaW5kZXggMDhlZWY1OC4uMTNlYTYwYSAxMDA2NDQKLS0tIGEvY3J5cHRvL2Nhc3Q1LmMKKysrIGIvY3J5cHRvL2Nhc3Q1LmMKQEAgLTc2OSw4ICs3NjksNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2FzdDVfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQl1bnNpZ25lZCBrZXlfbGVuLCB1MzIgKmZsYWdzKQorc3RhdGljIGludCBjYXN0NV9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQga2V5X2xlbikKIHsKIAlzdHJ1Y3QgY2FzdDVfY3R4ICpjID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAlpbnQgaTsKQEAgLTc3OCwxMSArNzc3LDYgQEAKIAl1MzIgels0XTsKIAl1MzIga1sxNl07CiAJX19iZTMyIHBfa2V5WzRdOwotCQotCWlmIChrZXlfbGVuIDwgNSB8fCBrZXlfbGVuID4gMTYpIHsKLQkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAljLT5yciA9IGtleV9sZW4gPD0gMTAgPyAxIDogMDsKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2Nhc3Q2LmMgYi9jcnlwdG8vY2FzdDYuYwppbmRleCAwOGUzM2JmLi4xMzZhYjZkIDEwMDY0NAotLS0gYS9jcnlwdG8vY2FzdDYuYworKysgYi9jcnlwdG8vY2FzdDYuYwpAQCAtMzgyLDE0ICszODIsMTUgQEAKIH0KIAogc3RhdGljIGludCBjYXN0Nl9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmluX2tleSwKLQkJCXVuc2lnbmVkIGtleV9sZW4sIHUzMiAqZmxhZ3MpCisJCQl1bnNpZ25lZCBrZXlfbGVuKQogewogCWludCBpOwogCXUzMiBrZXlbOF07CiAJX19iZTMyIHBfa2V5WzhdOyAvKiBwYWRkZWQga2V5ICovCiAJc3RydWN0IGNhc3Q2X2N0eCAqYyA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKIAotCWlmIChrZXlfbGVuIDwgMTYgfHwga2V5X2xlbiA+IDMyIHx8IGtleV9sZW4gJSA0ICE9IDApIHsKKwlpZiAoa2V5X2xlbiAlIDQgIT0gMCkgewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CiAJCXJldHVybiAtRUlOVkFMOwogCX0JCmRpZmYgLS1naXQgYS9jcnlwdG8vY2JjLmMgYi9jcnlwdG8vY2JjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU1NDJiNAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jYmMuYwpAQCAtMCwwICsxLDM0NCBAQAorLyoKKyAqIENCQzogQ2lwaGVyIEJsb2NrIENoYWluaW5nIG1vZGUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3QgY3J5cHRvX2NiY19jdHggeworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICpjaGlsZDsKKwl2b2lkICgqeG9yKSh1OCAqZHN0LCBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgYnMpOworfTsKKworc3RhdGljIGludCBjcnlwdG9fY2JjX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqcGFyZW50LCBjb25zdCB1OCAqa2V5LAorCQkJICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXN0cnVjdCBjcnlwdG9fY2JjX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgocGFyZW50KTsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqY2hpbGQgPSBjdHgtPmNoaWxkOworCWludCBlcnI7CisKKwljcnlwdG9fY2lwaGVyX2NsZWFyX2ZsYWdzKGNoaWxkLCBDUllQVE9fVEZNX1JFUV9NQVNLKTsKKwljcnlwdG9fY2lwaGVyX3NldF9mbGFncyhjaGlsZCwgY3J5cHRvX3RmbV9nZXRfZmxhZ3MocGFyZW50KSAmCisJCQkJICAgICAgIENSWVBUT19URk1fUkVRX01BU0spOworCWVyciA9IGNyeXB0b19jaXBoZXJfc2V0a2V5KGNoaWxkLCBrZXksIGtleWxlbik7CisJY3J5cHRvX3RmbV9zZXRfZmxhZ3MocGFyZW50LCBjcnlwdG9fY2lwaGVyX2dldF9mbGFncyhjaGlsZCkgJgorCQkJCSAgICAgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcnlwdG9fY2JjX2VuY3J5cHRfc2VnbWVudChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJICAgICAgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrLAorCQkJCSAgICAgIHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCisJCQkJICAgICAgdm9pZCAoKnhvcikodTggKiwgY29uc3QgdTggKiwKKwkJCQkJCSAgdW5zaWduZWQgaW50KSkKK3sKKwl2b2lkICgqZm4pKHN0cnVjdCBjcnlwdG9fdGZtICosIHU4ICosIGNvbnN0IHU4ICopID0KKwkJY3J5cHRvX2NpcGhlcl9hbGcodGZtKS0+Y2lhX2VuY3J5cHQ7CisJaW50IGJzaXplID0gY3J5cHRvX2NpcGhlcl9ibG9ja3NpemUodGZtKTsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzID0gd2Fsay0+bmJ5dGVzOworCXU4ICpzcmMgPSB3YWxrLT5zcmMudmlydC5hZGRyOworCXU4ICpkc3QgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCXU4ICppdiA9IHdhbGstPml2OworCisJZG8geworCQl4b3IoaXYsIHNyYywgYnNpemUpOworCQlmbihjcnlwdG9fY2lwaGVyX3RmbSh0Zm0pLCBkc3QsIGl2KTsKKwkJbWVtY3B5KGl2LCBkc3QsIGJzaXplKTsKKworCQlzcmMgKz0gYnNpemU7CisJCWRzdCArPSBic2l6ZTsKKwl9IHdoaWxlICgobmJ5dGVzIC09IGJzaXplKSA+PSBic2l6ZSk7CisKKwlyZXR1cm4gbmJ5dGVzOworfQorCitzdGF0aWMgaW50IGNyeXB0b19jYmNfZW5jcnlwdF9pbnBsYWNlKHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkgICAgICBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGssCisJCQkJICAgICAgc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwKKwkJCQkgICAgICB2b2lkICgqeG9yKSh1OCAqLCBjb25zdCB1OCAqLAorCQkJCQkJICB1bnNpZ25lZCBpbnQpKQoreworCXZvaWQgKCpmbikoc3RydWN0IGNyeXB0b190Zm0gKiwgdTggKiwgY29uc3QgdTggKikgPQorCQljcnlwdG9fY2lwaGVyX2FsZyh0Zm0pLT5jaWFfZW5jcnlwdDsKKwlpbnQgYnNpemUgPSBjcnlwdG9fY2lwaGVyX2Jsb2Nrc2l6ZSh0Zm0pOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CisJdTggKnNyYyA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CisJdTggKml2ID0gd2Fsay0+aXY7CisKKwlkbyB7CisJCXhvcihzcmMsIGl2LCBic2l6ZSk7CisJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIHNyYywgc3JjKTsKKwkJaXYgPSBzcmM7CisKKwkJc3JjICs9IGJzaXplOworCX0gd2hpbGUgKChuYnl0ZXMgLT0gYnNpemUpID49IGJzaXplKTsKKworCW1lbWNweSh3YWxrLT5pdiwgaXYsIGJzaXplKTsKKworCXJldHVybiBuYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2NiY19lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGRlc2MtPnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2NiY19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KHRmbSk7CisJc3RydWN0IGNyeXB0b19jaXBoZXIgKmNoaWxkID0gY3R4LT5jaGlsZDsKKwl2b2lkICgqeG9yKSh1OCAqLCBjb25zdCB1OCAqLCB1bnNpZ25lZCBpbnQgYnMpID0gY3R4LT54b3I7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJaWYgKHdhbGsuc3JjLnZpcnQuYWRkciA9PSB3YWxrLmRzdC52aXJ0LmFkZHIpCisJCQluYnl0ZXMgPSBjcnlwdG9fY2JjX2VuY3J5cHRfaW5wbGFjZShkZXNjLCAmd2FsaywgY2hpbGQsCisJCQkJCQkJICAgIHhvcik7CisJCWVsc2UKKwkJCW5ieXRlcyA9IGNyeXB0b19jYmNfZW5jcnlwdF9zZWdtZW50KGRlc2MsICZ3YWxrLCBjaGlsZCwKKwkJCQkJCQkgICAgeG9yKTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNyeXB0b19jYmNfZGVjcnlwdF9zZWdtZW50KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkgICAgICBzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGssCisJCQkJICAgICAgc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwKKwkJCQkgICAgICB2b2lkICgqeG9yKSh1OCAqLCBjb25zdCB1OCAqLAorCQkJCQkJICB1bnNpZ25lZCBpbnQpKQoreworCXZvaWQgKCpmbikoc3RydWN0IGNyeXB0b190Zm0gKiwgdTggKiwgY29uc3QgdTggKikgPQorCQljcnlwdG9fY2lwaGVyX2FsZyh0Zm0pLT5jaWFfZGVjcnlwdDsKKwlpbnQgYnNpemUgPSBjcnlwdG9fY2lwaGVyX2Jsb2Nrc2l6ZSh0Zm0pOworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSB3YWxrLT5uYnl0ZXM7CisJdTggKnNyYyA9IHdhbGstPnNyYy52aXJ0LmFkZHI7CisJdTggKmRzdCA9IHdhbGstPmRzdC52aXJ0LmFkZHI7CisJdTggKml2ID0gd2Fsay0+aXY7CisKKwlkbyB7CisJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIGRzdCwgc3JjKTsKKwkJeG9yKGRzdCwgaXYsIGJzaXplKTsKKwkJaXYgPSBzcmM7CisKKwkJc3JjICs9IGJzaXplOworCQlkc3QgKz0gYnNpemU7CisJfSB3aGlsZSAoKG5ieXRlcyAtPSBic2l6ZSkgPj0gYnNpemUpOworCisJbWVtY3B5KHdhbGstPml2LCBpdiwgYnNpemUpOworCisJcmV0dXJuIG5ieXRlczsKK30KKworc3RhdGljIGludCBjcnlwdG9fY2JjX2RlY3J5cHRfaW5wbGFjZShzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJICAgICAgc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrLAorCQkJCSAgICAgIHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCisJCQkJICAgICAgdm9pZCAoKnhvcikodTggKiwgY29uc3QgdTggKiwKKwkJCQkJCSAgdW5zaWduZWQgaW50KSkKK3sKKwl2b2lkICgqZm4pKHN0cnVjdCBjcnlwdG9fdGZtICosIHU4ICosIGNvbnN0IHU4ICopID0KKwkJY3J5cHRvX2NpcGhlcl9hbGcodGZtKS0+Y2lhX2RlY3J5cHQ7CisJaW50IGJzaXplID0gY3J5cHRvX2NpcGhlcl9ibG9ja3NpemUodGZtKTsKKwl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b19jaXBoZXJfYWxpZ25tYXNrKHRmbSk7CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IHdhbGstPm5ieXRlczsKKwl1OCAqc3JjID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKwl1OCBzdGFja1tic2l6ZSArIGFsaWdubWFza107CisJdTggKmZpcnN0X2l2ID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpc3RhY2ssIGFsaWdubWFzayArIDEpOworCisJbWVtY3B5KGZpcnN0X2l2LCB3YWxrLT5pdiwgYnNpemUpOworCisJLyogU3RhcnQgb2YgdGhlIGxhc3QgYmxvY2suICovCisJc3JjICs9IG5ieXRlcyAtIG5ieXRlcyAlIGJzaXplIC0gYnNpemU7CisJbWVtY3B5KHdhbGstPml2LCBzcmMsIGJzaXplKTsKKworCWZvciAoOzspIHsKKwkJZm4oY3J5cHRvX2NpcGhlcl90Zm0odGZtKSwgc3JjLCBzcmMpOworCQlpZiAoKG5ieXRlcyAtPSBic2l6ZSkgPCBic2l6ZSkKKwkJCWJyZWFrOworCQl4b3Ioc3JjLCBzcmMgLSBic2l6ZSwgYnNpemUpOworCQlzcmMgLT0gYnNpemU7CisJfQorCisJeG9yKHNyYywgZmlyc3RfaXYsIGJzaXplKTsKKworCXJldHVybiBuYnl0ZXM7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2NiY19kZWNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKKwkJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJc3RydWN0IGJsa2NpcGhlcl93YWxrIHdhbGs7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGRlc2MtPnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2NiY19jdHggKmN0eCA9IGNyeXB0b19ibGtjaXBoZXJfY3R4KHRmbSk7CisJc3RydWN0IGNyeXB0b19jaXBoZXIgKmNoaWxkID0gY3R4LT5jaGlsZDsKKwl2b2lkICgqeG9yKSh1OCAqLCBjb25zdCB1OCAqLCB1bnNpZ25lZCBpbnQgYnMpID0gY3R4LT54b3I7CisJaW50IGVycjsKKworCWJsa2NpcGhlcl93YWxrX2luaXQoJndhbGssIGRzdCwgc3JjLCBuYnl0ZXMpOworCWVyciA9IGJsa2NpcGhlcl93YWxrX3ZpcnQoZGVzYywgJndhbGspOworCisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLm5ieXRlcykpIHsKKwkJaWYgKHdhbGsuc3JjLnZpcnQuYWRkciA9PSB3YWxrLmRzdC52aXJ0LmFkZHIpCisJCQluYnl0ZXMgPSBjcnlwdG9fY2JjX2RlY3J5cHRfaW5wbGFjZShkZXNjLCAmd2FsaywgY2hpbGQsCisJCQkJCQkJICAgIHhvcik7CisJCWVsc2UKKwkJCW5ieXRlcyA9IGNyeXB0b19jYmNfZGVjcnlwdF9zZWdtZW50KGRlc2MsICZ3YWxrLCBjaGlsZCwKKwkJCQkJCQkgICAgeG9yKTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCB4b3JfYnl0ZSh1OCAqYSwgY29uc3QgdTggKmIsIHVuc2lnbmVkIGludCBicykKK3sKKwlkbyB7CisJCSphKysgXj0gKmIrKzsKKwl9IHdoaWxlICgtLWJzKTsKK30KKworc3RhdGljIHZvaWQgeG9yX3F1YWQodTggKmRzdCwgY29uc3QgdTggKnNyYywgdW5zaWduZWQgaW50IGJzKQoreworCXUzMiAqYSA9ICh1MzIgKilkc3Q7CisJdTMyICpiID0gKHUzMiAqKXNyYzsKKworCWRvIHsKKwkJKmErKyBePSAqYisrOworCX0gd2hpbGUgKChicyAtPSA0KSk7Cit9CisKK3N0YXRpYyB2b2lkIHhvcl82NCh1OCAqYSwgY29uc3QgdTggKmIsIHVuc2lnbmVkIGludCBicykKK3sKKwkoKHUzMiAqKWEpWzBdIF49ICgodTMyICopYilbMF07CisJKCh1MzIgKilhKVsxXSBePSAoKHUzMiAqKWIpWzFdOworfQorCitzdGF0aWMgdm9pZCB4b3JfMTI4KHU4ICphLCBjb25zdCB1OCAqYiwgdW5zaWduZWQgaW50IGJzKQoreworCSgodTMyICopYSlbMF0gXj0gKCh1MzIgKiliKVswXTsKKwkoKHUzMiAqKWEpWzFdIF49ICgodTMyICopYilbMV07CisJKCh1MzIgKilhKVsyXSBePSAoKHUzMiAqKWIpWzJdOworCSgodTMyICopYSlbM10gXj0gKCh1MzIgKiliKVszXTsKK30KKworc3RhdGljIGludCBjcnlwdG9fY2JjX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9ICh2b2lkICopdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24gPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCXN0cnVjdCBjcnlwdG9fY2JjX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCXN3aXRjaCAoY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkpIHsKKwljYXNlIDg6CisJCWN0eC0+eG9yID0geG9yXzY0OworCQlicmVhazsKKworCWNhc2UgMTY6CisJCWN0eC0+eG9yID0geG9yXzEyODsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlpZiAoY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkgJSA0KQorCQkJY3R4LT54b3IgPSB4b3JfYnl0ZTsKKwkJZWxzZQorCQkJY3R4LT54b3IgPSB4b3JfcXVhZDsKKwl9CisKKwl0Zm0gPSBjcnlwdG9fc3Bhd25fdGZtKHNwYXduKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBQVFJfRVJSKHRmbSk7CisKKwljdHgtPmNoaWxkID0gY3J5cHRvX2NpcGhlcl9jYXN0KHRmbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19jYmNfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2NiY19jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJY3J5cHRvX2ZyZWVfY2lwaGVyKGN0eC0+Y2hpbGQpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRvX2NiY19hbGxvYyh2b2lkICpwYXJhbSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHBhcmFtLCBsZW4sIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCisJCQkJICBDUllQVE9fQUxHX1RZUEVfTUFTSyB8IENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKKworCWluc3QgPSBjcnlwdG9fYWxsb2NfaW5zdGFuY2UoImNiYyIsIGFsZyk7CisJaWYgKElTX0VSUihpbnN0KSkKKwkJZ290byBvdXRfcHV0X2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSOworCWluc3QtPmFsZy5jcmFfcHJpb3JpdHkgPSBhbGctPmNyYV9wcmlvcml0eTsKKwlpbnN0LT5hbGcuY3JhX2Jsb2Nrc2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX2Jsa2NpcGhlcl90eXBlOworCisJaWYgKCEoYWxnLT5jcmFfYmxvY2tzaXplICUgNCkpCisJCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrIHw9IDM7CisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuaXZzaXplID0gYWxnLT5jcmFfYmxvY2tzaXplOworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLm1pbl9rZXlzaXplID0gYWxnLT5jcmFfY2lwaGVyLmNpYV9taW5fa2V5c2l6ZTsKKwlpbnN0LT5hbGcuY3JhX2Jsa2NpcGhlci5tYXhfa2V5c2l6ZSA9IGFsZy0+Y3JhX2NpcGhlci5jaWFfbWF4X2tleXNpemU7CisKKwlpbnN0LT5hbGcuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGNyeXB0b19jYmNfY3R4KTsKKworCWluc3QtPmFsZy5jcmFfaW5pdCA9IGNyeXB0b19jYmNfaW5pdF90Zm07CisJaW5zdC0+YWxnLmNyYV9leGl0ID0gY3J5cHRvX2NiY19leGl0X3RmbTsKKworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLnNldGtleSA9IGNyeXB0b19jYmNfc2V0a2V5OworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLmVuY3J5cHQgPSBjcnlwdG9fY2JjX2VuY3J5cHQ7CisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuZGVjcnlwdCA9IGNyeXB0b19jYmNfZGVjcnlwdDsKKworb3V0X3B1dF9hbGc6CisJY3J5cHRvX21vZF9wdXQoYWxnKTsKKwlyZXR1cm4gaW5zdDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX2NiY19mcmVlKHN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QpCit7CisJY3J5cHRvX2Ryb3Bfc3Bhd24oY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KSk7CisJa2ZyZWUoaW5zdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlIGNyeXB0b19jYmNfdG1wbCA9IHsKKwkubmFtZSA9ICJjYmMiLAorCS5hbGxvYyA9IGNyeXB0b19jYmNfYWxsb2MsCisJLmZyZWUgPSBjcnlwdG9fY2JjX2ZyZWUsCisJLm1vZHVsZSA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3J5cHRvX2NiY19tb2R1bGVfaW5pdCh2b2lkKQoreworCXJldHVybiBjcnlwdG9fcmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19jYmNfdG1wbCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcnlwdG9fY2JjX21vZHVsZV9leGl0KHZvaWQpCit7CisJY3J5cHRvX3VucmVnaXN0ZXJfdGVtcGxhdGUoJmNyeXB0b19jYmNfdG1wbCk7Cit9CisKK21vZHVsZV9pbml0KGNyeXB0b19jYmNfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoY3J5cHRvX2NiY19tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0JDIGJsb2NrIGNpcGhlciBhbGdvcml0aG0iKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9jaXBoZXIuYyBiL2NyeXB0by9jaXBoZXIuYwppbmRleCBiODk5ZWI5Li45ZTAzNzAxIDEwMDY0NAotLS0gYS9jcnlwdG8vY2lwaGVyLmMKKysrIGIvY3J5cHRvL2NpcGhlci5jCkBAIC0yMyw2ICsyMywyOCBAQAogI2luY2x1ZGUgImludGVybmFsLmgiCiAjaW5jbHVkZSAic2NhdHRlcndhbGsuaCIKIAorc3RydWN0IGNpcGhlcl9hbGdfY29tcGF0IHsKKwl1bnNpZ25lZCBpbnQgY2lhX21pbl9rZXlzaXplOworCXVuc2lnbmVkIGludCBjaWFfbWF4X2tleXNpemU7CisJaW50ICgqY2lhX3NldGtleSkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKKwkgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKTsKKwl2b2lkICgqY2lhX2VuY3J5cHQpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworCXZvaWQgKCpjaWFfZGVjcnlwdCkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYyk7CisKKwl1bnNpZ25lZCBpbnQgKCpjaWFfZW5jcnlwdF9lY2IpKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkJdTggKmRzdCwgY29uc3QgdTggKnNyYywKKwkJCQkJdW5zaWduZWQgaW50IG5ieXRlcyk7CisJdW5zaWduZWQgaW50ICgqY2lhX2RlY3J5cHRfZWNiKShjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCisJCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpOworCXVuc2lnbmVkIGludCAoKmNpYV9lbmNyeXB0X2NiYykoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLAorCQkJCQl1OCAqZHN0LCBjb25zdCB1OCAqc3JjLAorCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKKwl1bnNpZ25lZCBpbnQgKCpjaWFfZGVjcnlwdF9jYmMpKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkJdTggKmRzdCwgY29uc3QgdTggKnNyYywKKwkJCQkJdW5zaWduZWQgaW50IG5ieXRlcyk7Cit9OworCiBzdGF0aWMgaW5saW5lIHZvaWQgeG9yXzY0KHU4ICphLCBjb25zdCB1OCAqYikKIHsKIAkoKHUzMiAqKWEpWzBdIF49ICgodTMyICopYilbMF07CkBAIC00NSwxNSArNjcsMTAgQEAKIAl1OCBidWZmZXJbYnNpemUgKiAyICsgYWxpZ25tYXNrXTsKIAl1OCAqc3JjID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpYnVmZmVyLCBhbGlnbm1hc2sgKyAxKTsKIAl1OCAqZHN0ID0gc3JjICsgYnNpemU7Ci0JdW5zaWduZWQgaW50IG47CiAKLQluID0gc2NhdHRlcndhbGtfY29weWNodW5rcyhzcmMsIGluLCBic2l6ZSwgMCk7Ci0Jc2NhdHRlcndhbGtfYWR2YW5jZShpbiwgbik7Ci0KKwlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKHNyYywgaW4sIGJzaXplLCAwKTsKIAlkZXNjLT5wcmZuKGRlc2MsIGRzdCwgc3JjLCBic2l6ZSk7Ci0KLQluID0gc2NhdHRlcndhbGtfY29weWNodW5rcyhkc3QsIG91dCwgYnNpemUsIDEpOwotCXNjYXR0ZXJ3YWxrX2FkdmFuY2Uob3V0LCBuKTsKKwlzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKGRzdCwgb3V0LCBic2l6ZSwgMSk7CiAKIAlyZXR1cm4gYnNpemU7CiB9CkBAIC02NCwxMiArODEsMTYgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1OCAqdG1wKQogewogCXU4ICpzcmMsICpkc3Q7CisJdTggKnJlYWxfc3JjLCAqcmVhbF9kc3Q7CiAKLQlzcmMgPSBpbi0+ZGF0YTsKLQlkc3QgPSBzY2F0dGVyd2Fsa19zYW1lYnVmKGluLCBvdXQpID8gc3JjIDogb3V0LT5kYXRhOworCXJlYWxfc3JjID0gc2NhdHRlcndhbGtfbWFwKGluLCAwKTsKKwlyZWFsX2RzdCA9IHNjYXR0ZXJ3YWxrX21hcChvdXQsIDEpOworCisJc3JjID0gcmVhbF9zcmM7CisJZHN0ID0gc2NhdHRlcndhbGtfc2FtZWJ1Zihpbiwgb3V0KSA/IHNyYyA6IHJlYWxfZHN0OwogCiAJaWYgKHRtcCkgewotCQltZW1jcHkodG1wLCBpbi0+ZGF0YSwgbmJ5dGVzKTsKKwkJbWVtY3B5KHRtcCwgc3JjLCBuYnl0ZXMpOwogCQlzcmMgPSB0bXA7CiAJCWRzdCA9IHRtcDsKIAl9CkBAIC03Nyw3ICs5OCwxMCBAQAogCW5ieXRlcyA9IGRlc2MtPnByZm4oZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7CiAKIAlpZiAodG1wKQotCQltZW1jcHkob3V0LT5kYXRhLCB0bXAsIG5ieXRlcyk7CisJCW1lbWNweShyZWFsX2RzdCwgdG1wLCBuYnl0ZXMpOworCisJc2NhdHRlcndhbGtfdW5tYXAocmVhbF9zcmMsIDApOworCXNjYXR0ZXJ3YWxrX3VubWFwKHJlYWxfZHN0LCAxKTsKIAogCXNjYXR0ZXJ3YWxrX2FkdmFuY2UoaW4sIG5ieXRlcyk7CiAJc2NhdHRlcndhbGtfYWR2YW5jZShvdXQsIG5ieXRlcyk7CkBAIC0xMjYsOSArMTUwLDYgQEAKIAkJCXRtcCA9ICh1OCAqKWJ1ZmZlcjsKIAkJfQogCi0JCXNjYXR0ZXJ3YWxrX21hcCgmd2Fsa19pbiwgMCk7Ci0JCXNjYXR0ZXJ3YWxrX21hcCgmd2Fsa19vdXQsIDEpOwotCiAJCW4gPSBzY2F0dGVyd2Fsa19jbGFtcCgmd2Fsa19pbiwgbik7CiAJCW4gPSBzY2F0dGVyd2Fsa19jbGFtcCgmd2Fsa19vdXQsIG4pOwogCkBAIC0xNDUsNyArMTY2LDcgQEAKIAkJaWYgKCFuYnl0ZXMpCiAJCQlicmVhazsKIAotCQljcnlwdG9feWllbGQodGZtKTsKKwkJY3J5cHRvX3lpZWxkKHRmbS0+Y3J0X2ZsYWdzKTsKIAl9CiAKIAlpZiAoYnVmZmVyKQpAQCAtMjY0LDEyICsyODUsMTIgQEAKIHsKIAlzdHJ1Y3QgY2lwaGVyX2FsZyAqY2lhID0gJnRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyOwogCQorCXRmbS0+Y3J0X2ZsYWdzICY9IH5DUllQVE9fVEZNX1JFU19NQVNLOwogCWlmIChrZXlsZW4gPCBjaWEtPmNpYV9taW5fa2V5c2l6ZSB8fCBrZXlsZW4gPiBjaWEtPmNpYV9tYXhfa2V5c2l6ZSkgewogCQl0Zm0tPmNydF9mbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlCi0JCXJldHVybiBjaWEtPmNpYV9zZXRrZXkodGZtLCBrZXksIGtleWxlbiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAmdGZtLT5jcnRfZmxhZ3MpOworCQlyZXR1cm4gY2lhLT5jaWFfc2V0a2V5KHRmbSwga2V5LCBrZXlsZW4pOwogfQogCiBzdGF0aWMgaW50IGVjYl9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCkBAIC0yNzcsNyArMjk4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CiAJc3RydWN0IGNpcGhlcl9kZXNjIGRlc2M7Ci0Jc3RydWN0IGNpcGhlcl9hbGcgKmNpcGhlciA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKKwlzdHJ1Y3QgY2lwaGVyX2FsZ19jb21wYXQgKmNpcGhlciA9ICh2b2lkICopJnRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyOwogCiAJZGVzYy50Zm0gPSB0Zm07CiAJZGVzYy5jcmZuID0gY2lwaGVyLT5jaWFfZW5jcnlwdDsKQEAgLTI5Miw3ICszMTMsNyBAQAogCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKIAlzdHJ1Y3QgY2lwaGVyX2Rlc2MgZGVzYzsKLQlzdHJ1Y3QgY2lwaGVyX2FsZyAqY2lwaGVyID0gJnRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyOworCXN0cnVjdCBjaXBoZXJfYWxnX2NvbXBhdCAqY2lwaGVyID0gKHZvaWQgKikmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CiAKIAlkZXNjLnRmbSA9IHRmbTsKIAlkZXNjLmNyZm4gPSBjaXBoZXItPmNpYV9kZWNyeXB0OwpAQCAtMzA3LDcgKzMyOCw3IEBACiAJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewogCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOwotCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisJc3RydWN0IGNpcGhlcl9hbGdfY29tcGF0ICpjaXBoZXIgPSAodm9pZCAqKSZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKIAogCWRlc2MudGZtID0gdGZtOwogCWRlc2MuY3JmbiA9IGNpcGhlci0+Y2lhX2VuY3J5cHQ7CkBAIC0zMjMsNyArMzQ0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKml2KQogewogCXN0cnVjdCBjaXBoZXJfZGVzYyBkZXNjOwotCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisJc3RydWN0IGNpcGhlcl9hbGdfY29tcGF0ICpjaXBoZXIgPSAodm9pZCAqKSZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKIAogCWRlc2MudGZtID0gdGZtOwogCWRlc2MuY3JmbiA9IGNpcGhlci0+Y2lhX2VuY3J5cHQ7CkBAIC0zMzksNyArMzYwLDcgQEAKIAkJICAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CiAJc3RydWN0IGNpcGhlcl9kZXNjIGRlc2M7Ci0Jc3RydWN0IGNpcGhlcl9hbGcgKmNpcGhlciA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKKwlzdHJ1Y3QgY2lwaGVyX2FsZ19jb21wYXQgKmNpcGhlciA9ICh2b2lkICopJnRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyOwogCiAJZGVzYy50Zm0gPSB0Zm07CiAJZGVzYy5jcmZuID0gY2lwaGVyLT5jaWFfZGVjcnlwdDsKQEAgLTM1NSw3ICszNzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1OCAqaXYpCiB7CiAJc3RydWN0IGNpcGhlcl9kZXNjIGRlc2M7Ci0Jc3RydWN0IGNpcGhlcl9hbGcgKmNpcGhlciA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKKwlzdHJ1Y3QgY2lwaGVyX2FsZ19jb21wYXQgKmNpcGhlciA9ICh2b2lkICopJnRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyOwogCiAJZGVzYy50Zm0gPSB0Zm07CiAJZGVzYy5jcmZuID0gY2lwaGVyLT5jaWFfZGVjcnlwdDsKQEAgLTM4OCwxNyArNDA5LDY3IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGNpcGhlcl9jcnlwdF91bmFsaWduZWQodm9pZCAoKmZuKShzdHJ1Y3QgY3J5cHRvX3RmbSAqLCB1OCAqLAorCQkJCQkgICAgICBjb25zdCB1OCAqKSwKKwkJCQkgICBzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSAgIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJdW5zaWduZWQgbG9uZyBhbGlnbm1hc2sgPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKTsKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pOworCXU4IGJ1ZmZlcltzaXplICsgYWxpZ25tYXNrXTsKKwl1OCAqdG1wID0gKHU4ICopQUxJR04oKHVuc2lnbmVkIGxvbmcpYnVmZmVyLCBhbGlnbm1hc2sgKyAxKTsKKworCW1lbWNweSh0bXAsIHNyYywgc2l6ZSk7CisJZm4odGZtLCB0bXAsIHRtcCk7CisJbWVtY3B5KGRzdCwgdG1wLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgY2lwaGVyX2VuY3J5cHRfdW5hbGlnbmVkKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkJICAgICB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCXVuc2lnbmVkIGxvbmcgYWxpZ25tYXNrID0gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKHRmbSk7CisJc3RydWN0IGNpcGhlcl9hbGcgKmNpcGhlciA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2NpcGhlcjsKKworCWlmICh1bmxpa2VseSgoKHVuc2lnbmVkIGxvbmcpZHN0IHwgKHVuc2lnbmVkIGxvbmcpc3JjKSAmIGFsaWdubWFzaykpIHsKKwkJY2lwaGVyX2NyeXB0X3VuYWxpZ25lZChjaXBoZXItPmNpYV9lbmNyeXB0LCB0Zm0sIGRzdCwgc3JjKTsKKwkJcmV0dXJuOworCX0KKworCWNpcGhlci0+Y2lhX2VuY3J5cHQodGZtLCBkc3QsIHNyYyk7Cit9CisKK3N0YXRpYyB2b2lkIGNpcGhlcl9kZWNyeXB0X3VuYWxpZ25lZChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSAgICAgdTggKmRzdCwgY29uc3QgdTggKnNyYykKK3sKKwl1bnNpZ25lZCBsb25nIGFsaWdubWFzayA9IGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayh0Zm0pOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CisKKwlpZiAodW5saWtlbHkoKCh1bnNpZ25lZCBsb25nKWRzdCB8ICh1bnNpZ25lZCBsb25nKXNyYykgJiBhbGlnbm1hc2spKSB7CisJCWNpcGhlcl9jcnlwdF91bmFsaWduZWQoY2lwaGVyLT5jaWFfZGVjcnlwdCwgdGZtLCBkc3QsIHNyYyk7CisJCXJldHVybjsKKwl9CisKKwljaXBoZXItPmNpYV9kZWNyeXB0KHRmbSwgZHN0LCBzcmMpOworfQorCiBpbnQgY3J5cHRvX2luaXRfY2lwaGVyX29wcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBjaXBoZXJfdGZtICpvcHMgPSAmdGZtLT5jcnRfY2lwaGVyOworCXN0cnVjdCBjaXBoZXJfYWxnICpjaXBoZXIgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7CiAKIAlvcHMtPmNpdF9zZXRrZXkgPSBzZXRrZXk7CisJb3BzLT5jaXRfZW5jcnlwdF9vbmUgPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKSA/CisJCWNpcGhlcl9lbmNyeXB0X3VuYWxpZ25lZCA6IGNpcGhlci0+Y2lhX2VuY3J5cHQ7CisJb3BzLT5jaXRfZGVjcnlwdF9vbmUgPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKSA/CisJCWNpcGhlcl9kZWNyeXB0X3VuYWxpZ25lZCA6IGNpcGhlci0+Y2lhX2RlY3J5cHQ7CiAKIAlzd2l0Y2ggKHRmbS0+Y3J0X2NpcGhlci5jaXRfbW9kZSkgewogCWNhc2UgQ1JZUFRPX1RGTV9NT0RFX0VDQjoKIAkJb3BzLT5jaXRfZW5jcnlwdCA9IGVjYl9lbmNyeXB0OwogCQlvcHMtPmNpdF9kZWNyeXB0ID0gZWNiX2RlY3J5cHQ7CisJCW9wcy0+Y2l0X2VuY3J5cHRfaXYgPSBub2NyeXB0X2l2OworCQlvcHMtPmNpdF9kZWNyeXB0X2l2ID0gbm9jcnlwdF9pdjsKIAkJYnJlYWs7CiAJCQogCWNhc2UgQ1JZUFRPX1RGTV9NT0RFX0NCQzoKZGlmZiAtLWdpdCBhL2NyeXB0by9jcmMzMmMuYyBiL2NyeXB0by9jcmMzMmMuYwppbmRleCBmMjY2MDEyLi4wZmE3NDQzIDEwMDY0NAotLS0gYS9jcnlwdG8vY3JjMzJjLmMKKysrIGIvY3J5cHRvL2NyYzMyYy5jCkBAIC0xNiwxNCArMTYsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMmMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2RlZmluZSBDSEtTVU1fQkxPQ0tfU0laRQkzMgogI2RlZmluZSBDSEtTVU1fRElHRVNUX1NJWkUJNAogCiBzdHJ1Y3QgY2hrc3VtX2N0eCB7CiAJdTMyIGNyYzsKKwl1MzIga2V5OwogfTsKIAogLyoKQEAgLTM1LDcgKzM1LDcgQEAKIHsKIAlzdHJ1Y3QgY2hrc3VtX2N0eCAqbWN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKLQltY3R4LT5jcmMgPSB+KHUzMikwOwkJCS8qIGNvbW1vbiB1c2FnZSAqLworCW1jdHgtPmNyYyA9IG1jdHgtPmtleTsKIH0KIAogLyoKQEAgLTQ0LDE2ICs0NCwxNSBAQAogICogdGhlIHNlZWQuCiAgKi8KIHN0YXRpYyBpbnQgY2hrc3VtX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAotCQkJIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCisJCQkgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAlzdHJ1Y3QgY2hrc3VtX2N0eCAqbWN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAKIAlpZiAoa2V5bGVuICE9IHNpemVvZihtY3R4LT5jcmMpKSB7Ci0JCWlmIChmbGFncykKLQkJCSpmbGFncyA9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOworCQl0Zm0tPmNydF9mbGFncyB8PSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW1jdHgtPmNyYyA9IF9fY3B1X3RvX2xlMzIoKih1MzIgKilrZXkpOworCW1jdHgtPmtleSA9IGxlMzJfdG9fY3B1KCooX19sZTMyICopa2V5KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjEsMTkgKzYwLDIzIEBACiAJCQkgIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJc3RydWN0IGNoa3N1bV9jdHggKm1jdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXUzMiBtY3JjOwogCi0JbWNyYyA9IGNyYzMyYyhtY3R4LT5jcmMsIGRhdGEsIChzaXplX3QpbGVuZ3RoKTsKLQotCW1jdHgtPmNyYyA9IG1jcmM7CisJbWN0eC0+Y3JjID0gY3JjMzJjKG1jdHgtPmNyYywgZGF0YSwgbGVuZ3RoKTsKIH0KIAogc3RhdGljIHZvaWQgY2hrc3VtX2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCiB7CiAJc3RydWN0IGNoa3N1bV9jdHggKm1jdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwotCXUzMiBtY3JjID0gKG1jdHgtPmNyYyBeIH4odTMyKTApOwogCQotCSoodTMyICopb3V0ID0gX19sZTMyX3RvX2NwdShtY3JjKTsKKwkqKF9fbGUzMiAqKW91dCA9IH5jcHVfdG9fbGUzMihtY3R4LT5jcmMpOworfQorCitzdGF0aWMgaW50IGNyYzMyY19jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjaGtzdW1fY3R4ICptY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKworCW1jdHgtPmtleSA9IH4wOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewpAQCAtODMsNiArODYsNyBAQAogCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3QgY2hrc3VtX2N0eCksCiAJLmNyYV9tb2R1bGUJPQlUSElTX01PRFVMRSwKIAkuY3JhX2xpc3QJPQlMSVNUX0hFQURfSU5JVChhbGcuY3JhX2xpc3QpLAorCS5jcmFfaW5pdAk9CWNyYzMyY19jcmFfaW5pdCwKIAkuY3JhX3UJCT0JewogCQkuZGlnZXN0ID0gewogCQkJIC5kaWFfZGlnZXN0c2l6ZT0JQ0hLU1VNX0RJR0VTVF9TSVpFLApkaWZmIC0tZ2l0IGEvY3J5cHRvL2NyeXB0b19udWxsLmMgYi9jcnlwdG8vY3J5cHRvX251bGwuYwppbmRleCBhMGQ5NTZiLi4yNGRiYjVkIDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRvX251bGwuYworKysgYi9jcnlwdG8vY3J5cHRvX251bGwuYwpAQCAtNDgsNyArNDgsNyBAQAogeyB9CiAKIHN0YXRpYyBpbnQgbnVsbF9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQogeyByZXR1cm4gMDsgfQogCiBzdGF0aWMgdm9pZCBudWxsX2NyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCmRpZmYgLS1naXQgYS9jcnlwdG8vY3J5cHRvbWdyLmMgYi9jcnlwdG8vY3J5cHRvbWdyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI1YjE1NgotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9jcnlwdG9tZ3IuYwpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENyZWF0ZSBkZWZhdWx0IGNyeXB0byBhbGdvcml0aG0gaW5zdGFuY2VzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKworI2luY2x1ZGUgImludGVybmFsLmgiCisKK3N0cnVjdCBjcnlwdG9tZ3JfcGFyYW0geworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJc3RydWN0IHsKKwkJc3RydWN0IHJ0YXR0ciBhdHRyOworCQlzdHJ1Y3QgY3J5cHRvX2F0dHJfYWxnIGRhdGE7CisJfSBhbGc7CisKKwlzdHJ1Y3QgeworCQl1MzIgdHlwZTsKKwkJdTMyIG1hc2s7CisJCWNoYXIgbmFtZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKwl9IGxhcnZhbDsKKworCWNoYXIgdGVtcGxhdGVbQ1JZUFRPX01BWF9BTEdfTkFNRV07Cit9OworCitzdGF0aWMgdm9pZCBjcnlwdG9tZ3JfcHJvYmUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3J5cHRvbWdyX3BhcmFtICpwYXJhbSA9IGRhdGE7CisJc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbDsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCWludCBlcnI7CisKKwl0bXBsID0gY3J5cHRvX2xvb2t1cF90ZW1wbGF0ZShwYXJhbS0+dGVtcGxhdGUpOworCWlmICghdG1wbCkKKwkJZ290byBlcnI7CisKKwlkbyB7CisJCWluc3QgPSB0bXBsLT5hbGxvYygmcGFyYW0tPmFsZywgc2l6ZW9mKHBhcmFtLT5hbGcpKTsKKwkJaWYgKElTX0VSUihpbnN0KSkKKwkJCWVyciA9IFBUUl9FUlIoaW5zdCk7CisJCWVsc2UgaWYgKChlcnIgPSBjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2UodG1wbCwgaW5zdCkpKQorCQkJdG1wbC0+ZnJlZShpbnN0KTsKKwl9IHdoaWxlIChlcnIgPT0gLUVBR0FJTiAmJiAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpOworCisJY3J5cHRvX3RtcGxfcHV0KHRtcGwpOworCisJaWYgKGVycikKKwkJZ290byBlcnI7CisKK291dDoKKwlrZnJlZShwYXJhbSk7CisJcmV0dXJuOworCitlcnI6CisJY3J5cHRvX2xhcnZhbF9lcnJvcihwYXJhbS0+bGFydmFsLm5hbWUsIHBhcmFtLT5sYXJ2YWwudHlwZSwKKwkJCSAgICBwYXJhbS0+bGFydmFsLm1hc2spOworCWdvdG8gb3V0OworfQorCitzdGF0aWMgaW50IGNyeXB0b21ncl9zY2hlZHVsZV9wcm9iZShzdHJ1Y3QgY3J5cHRvX2xhcnZhbCAqbGFydmFsKQoreworCXN0cnVjdCBjcnlwdG9tZ3JfcGFyYW0gKnBhcmFtOworCWNvbnN0IGNoYXIgKm5hbWUgPSBsYXJ2YWwtPmFsZy5jcmFfbmFtZTsKKwljb25zdCBjaGFyICpwOworCXVuc2lnbmVkIGludCBsZW47CisKKwlwYXJhbSA9IGttYWxsb2Moc2l6ZW9mKCpwYXJhbSksIEdGUF9LRVJORUwpOworCWlmICghcGFyYW0pCisJCWdvdG8gZXJyOworCisJZm9yIChwID0gbmFtZTsgaXNhbG51bSgqcCkgfHwgKnAgPT0gJy0nIHx8ICpwID09ICdfJzsgcCsrKQorCQk7CisKKwlsZW4gPSBwIC0gbmFtZTsKKwlpZiAoIWxlbiB8fCAqcCAhPSAnKCcpCisJCWdvdG8gZXJyX2ZyZWVfcGFyYW07CisKKwltZW1jcHkocGFyYW0tPnRlbXBsYXRlLCBuYW1lLCBsZW4pOworCXBhcmFtLT50ZW1wbGF0ZVtsZW5dID0gMDsKKworCW5hbWUgPSBwICsgMTsKKwlmb3IgKHAgPSBuYW1lOyBpc2FsbnVtKCpwKSB8fCAqcCA9PSAnLScgfHwgKnAgPT0gJ18nOyBwKyspCisJCTsKKworCWxlbiA9IHAgLSBuYW1lOworCWlmICghbGVuIHx8ICpwICE9ICcpJyB8fCBwWzFdKQorCQlnb3RvIGVycl9mcmVlX3BhcmFtOworCisJcGFyYW0tPmFsZy5hdHRyLnJ0YV9sZW4gPSBzaXplb2YocGFyYW0tPmFsZyk7CisJcGFyYW0tPmFsZy5hdHRyLnJ0YV90eXBlID0gQ1JZUFRPQV9BTEc7CisJbWVtY3B5KHBhcmFtLT5hbGcuZGF0YS5uYW1lLCBuYW1lLCBsZW4pOworCXBhcmFtLT5hbGcuZGF0YS5uYW1lW2xlbl0gPSAwOworCisJbWVtY3B5KHBhcmFtLT5sYXJ2YWwubmFtZSwgbGFydmFsLT5hbGcuY3JhX25hbWUsIENSWVBUT19NQVhfQUxHX05BTUUpOworCXBhcmFtLT5sYXJ2YWwudHlwZSA9IGxhcnZhbC0+YWxnLmNyYV9mbGFnczsKKwlwYXJhbS0+bGFydmFsLm1hc2sgPSBsYXJ2YWwtPm1hc2s7CisKKwlJTklUX1dPUksoJnBhcmFtLT53b3JrLCBjcnlwdG9tZ3JfcHJvYmUsIHBhcmFtKTsKKwlzY2hlZHVsZV93b3JrKCZwYXJhbS0+d29yayk7CisKKwlyZXR1cm4gTk9USUZZX1NUT1A7CisKK2Vycl9mcmVlX3BhcmFtOgorCWtmcmVlKHBhcmFtKTsKK2VycjoKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgaW50IGNyeXB0b21ncl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIG1zZywKKwkJCSAgICB2b2lkICpkYXRhKQoreworCXN3aXRjaCAobXNnKSB7CisJY2FzZSBDUllQVE9fTVNHX0FMR19SRVFVRVNUOgorCQlyZXR1cm4gY3J5cHRvbWdyX3NjaGVkdWxlX3Byb2JlKGRhdGEpOworCX0KKworCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjcnlwdG9tZ3Jfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBjcnlwdG9tZ3Jfbm90aWZ5LAorfTsKKworc3RhdGljIGludCBfX2luaXQgY3J5cHRvbWdyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gY3J5cHRvX3JlZ2lzdGVyX25vdGlmaWVyKCZjcnlwdG9tZ3Jfbm90aWZpZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY3J5cHRvbWdyX2V4aXQodm9pZCkKK3sKKwlpbnQgZXJyID0gY3J5cHRvX3VucmVnaXN0ZXJfbm90aWZpZXIoJmNyeXB0b21ncl9ub3RpZmllcik7CisJQlVHX09OKGVycik7Cit9CisKK21vZHVsZV9pbml0KGNyeXB0b21ncl9pbml0KTsKK21vZHVsZV9leGl0KGNyeXB0b21ncl9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDcnlwdG8gQWxnb3JpdGhtIE1hbmFnZXIiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by9kZXMuYyBiL2NyeXB0by9kZXMuYwppbmRleCBhOWQzYzIzLi4xZGYzYTcxIDEwMDY0NAotLS0gYS9jcnlwdG8vZGVzLmMKKysrIGIvY3J5cHRvL2Rlcy5jCkBAIC03ODQsOSArNzg0LDEwIEBACiB9CiAKIHN0YXRpYyBpbnQgZGVzX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAotCQkgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuLCB1MzIgKmZsYWdzKQorCQkgICAgICB1bnNpZ25lZCBpbnQga2V5bGVuKQogewogCXN0cnVjdCBkZXNfY3R4ICpkY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOwogCXUzMiB0bXBbREVTX0VYUEtFWV9XT1JEU107CiAJaW50IHJldDsKIApAQCAtODY0LDExICs4NjUsMTIgQEAKICAqCiAgKi8KIHN0YXRpYyBpbnQgZGVzM19lZGVfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQkgICB1bnNpZ25lZCBpbnQga2V5bGVuLCB1MzIgKmZsYWdzKQorCQkJICAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAljb25zdCB1MzIgKksgPSAoY29uc3QgdTMyICopa2V5OwogCXN0cnVjdCBkZXMzX2VkZV9jdHggKmRjdHggPSBjcnlwdG9fdGZtX2N0eCh0Zm0pOwogCXUzMiAqZXhwa2V5ID0gZGN0eC0+ZXhwa2V5OworCXUzMiAqZmxhZ3MgPSAmdGZtLT5jcnRfZmxhZ3M7CiAKIAlpZiAodW5saWtlbHkoISgoS1swXSBeIEtbMl0pIHwgKEtbMV0gXiBLWzNdKSkgfHwKIAkJICAgICAhKChLWzJdIF4gS1s0XSkgfCAoS1szXSBeIEtbNV0pKSkpCmRpZmYgLS1naXQgYS9jcnlwdG8vZGlnZXN0LmMgYi9jcnlwdG8vZGlnZXN0LmMKaW5kZXggNjAzMDA2YS4uMDE1NWE5NGUgMTAwNjQ0Ci0tLSBhL2NyeXB0by9kaWdlc3QuYworKysgYi9jcnlwdG8vZGlnZXN0LmMKQEAgLTExLDI5ICsxMSw4OSBAQAogICogYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICovCi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KIAotc3RhdGljIHZvaWQgaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAic2NhdHRlcndhbGsuaCIKKwordm9pZCBjcnlwdG9fZGlnZXN0X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2ggPSBjcnlwdG9faGFzaF9jYXN0KHRmbSk7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjID0geyAudGZtID0gaGFzaCwgLmZsYWdzID0gdGZtLT5jcnRfZmxhZ3MgfTsKKworCWNyeXB0b19oYXNoX2luaXQoJmRlc2MpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2RpZ2VzdF9pbml0KTsKKwordm9pZCBjcnlwdG9fZGlnZXN0X3VwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbnNnKQoreworCXN0cnVjdCBjcnlwdG9faGFzaCAqaGFzaCA9IGNyeXB0b19oYXNoX2Nhc3QodGZtKTsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2MgPSB7IC50Zm0gPSBoYXNoLCAuZmxhZ3MgPSB0Zm0tPmNydF9mbGFncyB9OworCXVuc2lnbmVkIGludCBuYnl0ZXMgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5zZzsgaSsrKQorCQluYnl0ZXMgKz0gc2dbaV0ubGVuZ3RoOworCisJY3J5cHRvX2hhc2hfdXBkYXRlKCZkZXNjLCBzZywgbmJ5dGVzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19kaWdlc3RfdXBkYXRlKTsKKwordm9pZCBjcnlwdG9fZGlnZXN0X2ZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCit7CisJc3RydWN0IGNyeXB0b19oYXNoICpoYXNoID0gY3J5cHRvX2hhc2hfY2FzdCh0Zm0pOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYyA9IHsgLnRmbSA9IGhhc2gsIC5mbGFncyA9IHRmbS0+Y3J0X2ZsYWdzIH07CisKKwljcnlwdG9faGFzaF9maW5hbCgmZGVzYywgb3V0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19kaWdlc3RfZmluYWwpOworCit2b2lkIGNyeXB0b19kaWdlc3RfZGlnZXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2csIHU4ICpvdXQpCit7CisJc3RydWN0IGNyeXB0b19oYXNoICpoYXNoID0gY3J5cHRvX2hhc2hfY2FzdCh0Zm0pOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYyA9IHsgLnRmbSA9IGhhc2gsIC5mbGFncyA9IHRmbS0+Y3J0X2ZsYWdzIH07CisJdW5zaWduZWQgaW50IG5ieXRlcyA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnNnOyBpKyspCisJCW5ieXRlcyArPSBzZ1tpXS5sZW5ndGg7CisKKwljcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnLCBuYnl0ZXMsIG91dCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9fZGlnZXN0X2RpZ2VzdCk7CisKK3N0YXRpYyBpbnQgaW5pdChzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjKQoreworCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9faGFzaF90Zm0oZGVzYy0+dGZtKTsKKwogCXRmbS0+X19jcnRfYWxnLT5jcmFfZGlnZXN0LmRpYV9pbml0KHRmbSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2cpCitzdGF0aWMgaW50IHVwZGF0ZShzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjLAorCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19oYXNoX3RmbShkZXNjLT50Zm0pOwogCXVuc2lnbmVkIGludCBhbGlnbm1hc2sgPSBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2sodGZtKTsKIAotCWZvciAoaSA9IDA7IGkgPCBuc2c7IGkrKykgeworCWlmICghbmJ5dGVzKQorCQlyZXR1cm4gMDsKIAotCQlzdHJ1Y3QgcGFnZSAqcGcgPSBzZ1tpXS5wYWdlOwotCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2dbaV0ub2Zmc2V0OwotCQl1bnNpZ25lZCBpbnQgbCA9IHNnW2ldLmxlbmd0aDsKKwlmb3IgKDs7KSB7CisJCXN0cnVjdCBwYWdlICpwZyA9IHNnLT5wYWdlOworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0ID0gc2ctPm9mZnNldDsKKwkJdW5zaWduZWQgaW50IGwgPSBzZy0+bGVuZ3RoOworCisJCWlmICh1bmxpa2VseShsID4gbmJ5dGVzKSkKKwkJCWwgPSBuYnl0ZXM7CisJCW5ieXRlcyAtPSBsOwogCiAJCWRvIHsKIAkJCXVuc2lnbmVkIGludCBieXRlc19mcm9tX3BhZ2UgPSBtaW4obCwgKCh1bnNpZ25lZCBpbnQpCkBAIC01NSw0MSArMTE1LDYwIEBACiAJCQl0Zm0tPl9fY3J0X2FsZy0+Y3JhX2RpZ2VzdC5kaWFfdXBkYXRlKHRmbSwgcCwKIAkJCQkJCQkgICAgICBieXRlc19mcm9tX3BhZ2UpOwogCQkJY3J5cHRvX2t1bm1hcChzcmMsIDApOwotCQkJY3J5cHRvX3lpZWxkKHRmbSk7CisJCQljcnlwdG9feWllbGQoZGVzYy0+ZmxhZ3MpOwogCQkJb2Zmc2V0ID0gMDsKIAkJCXBnKys7CiAJCQlsIC09IGJ5dGVzX2Zyb21fcGFnZTsKIAkJfSB3aGlsZSAobCA+IDApOworCisJCWlmICghbmJ5dGVzKQorCQkJYnJlYWs7CisJCXNnID0gc2dfbmV4dChzZyk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmFsKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpCitzdGF0aWMgaW50IGZpbmFsKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpCiB7CisJc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGNyeXB0b19oYXNoX3RmbShkZXNjLT50Zm0pOwogCXVuc2lnbmVkIGxvbmcgYWxpZ25tYXNrID0gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKHRmbSk7CisJc3RydWN0IGRpZ2VzdF9hbGcgKmRpZ2VzdCA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2RpZ2VzdDsKKwogCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylvdXQgJiBhbGlnbm1hc2spKSB7Ci0JCXVuc2lnbmVkIGludCBzaXplID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pOwotCQl1OCBidWZmZXJbc2l6ZSArIGFsaWdubWFza107Ci0JCXU4ICpkc3QgPSAodTggKilBTElHTigodW5zaWduZWQgbG9uZylidWZmZXIsIGFsaWdubWFzayArIDEpOwotCQl0Zm0tPl9fY3J0X2FsZy0+Y3JhX2RpZ2VzdC5kaWFfZmluYWwodGZtLCBkc3QpOwotCQltZW1jcHkob3V0LCBkc3QsIHNpemUpOworCQl1bnNpZ25lZCBsb25nIGFsaWduID0gYWxpZ25tYXNrICsgMTsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpY3J5cHRvX3RmbV9jdHgodGZtKTsKKwkJdTggKmRzdCA9ICh1OCAqKUFMSUdOKGFkZHIsIGFsaWduKSArCisJCQkgIEFMSUdOKHRmbS0+X19jcnRfYWxnLT5jcmFfY3R4c2l6ZSwgYWxpZ24pOworCisJCWRpZ2VzdC0+ZGlhX2ZpbmFsKHRmbSwgZHN0KTsKKwkJbWVtY3B5KG91dCwgZHN0LCBkaWdlc3QtPmRpYV9kaWdlc3RzaXplKTsKIAl9IGVsc2UKLQkJdGZtLT5fX2NydF9hbGctPmNyYV9kaWdlc3QuZGlhX2ZpbmFsKHRmbSwgb3V0KTsKKwkJZGlnZXN0LT5kaWFfZmluYWwodGZtLCBvdXQpOworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCitzdGF0aWMgaW50IG5vc2V0a2V5KHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtLCBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQogewotCXUzMiBmbGFnczsKLQlpZiAodGZtLT5fX2NydF9hbGctPmNyYV9kaWdlc3QuZGlhX3NldGtleSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT1NZUzsKLQlyZXR1cm4gdGZtLT5fX2NydF9hbGctPmNyYV9kaWdlc3QuZGlhX3NldGtleSh0Zm0sIGtleSwga2V5bGVuLCAmZmxhZ3MpOworCWNyeXB0b19oYXNoX2NsZWFyX2ZsYWdzKHRmbSwgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLXN0YXRpYyB2b2lkIGRpZ2VzdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2csIHU4ICpvdXQpCitzdGF0aWMgaW50IHNldGtleShzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2gsIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCiB7Ci0JaW5pdCh0Zm0pOwotCXVwZGF0ZSh0Zm0sIHNnLCBuc2cpOwotCWZpbmFsKHRmbSwgb3V0KTsKKwlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gY3J5cHRvX2hhc2hfdGZtKGhhc2gpOworCisJY3J5cHRvX2hhc2hfY2xlYXJfZmxhZ3MoaGFzaCwgQ1JZUFRPX1RGTV9SRVNfTUFTSyk7CisJcmV0dXJuIHRmbS0+X19jcnRfYWxnLT5jcmFfZGlnZXN0LmRpYV9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7Cit9CisKK3N0YXRpYyBpbnQgZGlnZXN0KHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsCisJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKm91dCkKK3sKKwlpbml0KGRlc2MpOworCXVwZGF0ZShkZXNjLCBzZywgbmJ5dGVzKTsKKwlyZXR1cm4gZmluYWwoZGVzYywgb3V0KTsKIH0KIAogaW50IGNyeXB0b19pbml0X2RpZ2VzdF9mbGFncyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1MzIgZmxhZ3MpCkBAIC05OSwxOCArMTc4LDIyIEBACiAKIGludCBjcnlwdG9faW5pdF9kaWdlc3Rfb3BzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0Jc3RydWN0IGRpZ2VzdF90Zm0gKm9wcyA9ICZ0Zm0tPmNydF9kaWdlc3Q7CisJc3RydWN0IGhhc2hfdGZtICpvcHMgPSAmdGZtLT5jcnRfaGFzaDsKKwlzdHJ1Y3QgZGlnZXN0X2FsZyAqZGFsZyA9ICZ0Zm0tPl9fY3J0X2FsZy0+Y3JhX2RpZ2VzdDsKKworCWlmIChkYWxnLT5kaWFfZGlnZXN0c2l6ZSA+IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pKQorCQlyZXR1cm4gLUVJTlZBTDsKIAkKLQlvcHMtPmRpdF9pbml0CT0gaW5pdDsKLQlvcHMtPmRpdF91cGRhdGUJPSB1cGRhdGU7Ci0Jb3BzLT5kaXRfZmluYWwJPSBmaW5hbDsKLQlvcHMtPmRpdF9kaWdlc3QJPSBkaWdlc3Q7Ci0Jb3BzLT5kaXRfc2V0a2V5CT0gc2V0a2V5OworCW9wcy0+aW5pdAk9IGluaXQ7CisJb3BzLT51cGRhdGUJPSB1cGRhdGU7CisJb3BzLT5maW5hbAk9IGZpbmFsOworCW9wcy0+ZGlnZXN0CT0gZGlnZXN0OworCW9wcy0+c2V0a2V5CT0gZGFsZy0+ZGlhX3NldGtleSA/IHNldGtleSA6IG5vc2V0a2V5OworCW9wcy0+ZGlnZXN0c2l6ZQk9IGRhbGctPmRpYV9kaWdlc3RzaXplOwogCQotCXJldHVybiBjcnlwdG9fYWxsb2NfaG1hY19ibG9jayh0Zm0pOworCXJldHVybiAwOwogfQogCiB2b2lkIGNyeXB0b19leGl0X2RpZ2VzdF9vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQljcnlwdG9fZnJlZV9obWFjX2Jsb2NrKHRmbSk7CiB9CmRpZmYgLS1naXQgYS9jcnlwdG8vZWNiLmMgYi9jcnlwdG8vZWNiLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIzOWFhOQotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9lY2IuYwpAQCAtMCwwICsxLDE4MSBAQAorLyoKKyAqIEVDQjogRWxlY3Ryb25pYyBDb2RlQm9vayBtb2RlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworc3RydWN0IGNyeXB0b19lY2JfY3R4IHsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqY2hpbGQ7Cit9OworCitzdGF0aWMgaW50IGNyeXB0b19lY2Jfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICpwYXJlbnQsIGNvbnN0IHU4ICprZXksCisJCQkgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJc3RydWN0IGNyeXB0b19lY2JfY3R4ICpjdHggPSBjcnlwdG9fdGZtX2N0eChwYXJlbnQpOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICpjaGlsZCA9IGN0eC0+Y2hpbGQ7CisJaW50IGVycjsKKworCWNyeXB0b19jaXBoZXJfY2xlYXJfZmxhZ3MoY2hpbGQsIENSWVBUT19URk1fUkVRX01BU0spOworCWNyeXB0b19jaXBoZXJfc2V0X2ZsYWdzKGNoaWxkLCBjcnlwdG9fdGZtX2dldF9mbGFncyhwYXJlbnQpICYKKwkJCQkgICAgICAgQ1JZUFRPX1RGTV9SRVFfTUFTSyk7CisJZXJyID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkoY2hpbGQsIGtleSwga2V5bGVuKTsKKwljcnlwdG9fdGZtX3NldF9mbGFncyhwYXJlbnQsIGNyeXB0b19jaXBoZXJfZ2V0X2ZsYWdzKGNoaWxkKSAmCisJCQkJICAgICBDUllQVE9fVEZNX1JFU19NQVNLKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNyeXB0b19lY2JfY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgIHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaywKKwkJCSAgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLAorCQkJICAgIHZvaWQgKCpmbikoc3RydWN0IGNyeXB0b190Zm0gKiwgdTggKiwgY29uc3QgdTggKikpCit7CisJaW50IGJzaXplID0gY3J5cHRvX2NpcGhlcl9ibG9ja3NpemUodGZtKTsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzOworCWludCBlcnI7CisKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsIHdhbGspOworCisJd2hpbGUgKChuYnl0ZXMgPSB3YWxrLT5uYnl0ZXMpKSB7CisJCXU4ICp3c3JjID0gd2Fsay0+c3JjLnZpcnQuYWRkcjsKKwkJdTggKndkc3QgPSB3YWxrLT5kc3QudmlydC5hZGRyOworCisJCWRvIHsKKwkJCWZuKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIHdkc3QsIHdzcmMpOworCQorCQkJd3NyYyArPSBic2l6ZTsKKwkJCXdkc3QgKz0gYnNpemU7CisJCX0gd2hpbGUgKChuYnl0ZXMgLT0gYnNpemUpID49IGJzaXplKTsKKworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsIHdhbGssIG5ieXRlcyk7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcnlwdG9fZWNiX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gZGVzYy0+dGZtOworCXN0cnVjdCBjcnlwdG9fZWNiX2N0eCAqY3R4ID0gY3J5cHRvX2Jsa2NpcGhlcl9jdHgodGZtKTsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqY2hpbGQgPSBjdHgtPmNoaWxkOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJcmV0dXJuIGNyeXB0b19lY2JfY3J5cHQoZGVzYywgJndhbGssIGNoaWxkLAorCQkJCWNyeXB0b19jaXBoZXJfYWxnKGNoaWxkKS0+Y2lhX2VuY3J5cHQpOworfQorCitzdGF0aWMgaW50IGNyeXB0b19lY2JfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0gPSBkZXNjLT50Zm07CisJc3RydWN0IGNyeXB0b19lY2JfY3R4ICpjdHggPSBjcnlwdG9fYmxrY2lwaGVyX2N0eCh0Zm0pOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICpjaGlsZCA9IGN0eC0+Y2hpbGQ7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwlyZXR1cm4gY3J5cHRvX2VjYl9jcnlwdChkZXNjLCAmd2FsaywgY2hpbGQsCisJCQkJY3J5cHRvX2NpcGhlcl9hbGcoY2hpbGQpLT5jaWFfZGVjcnlwdCk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2VjYl9pbml0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKmluc3QgPSAodm9pZCAqKXRmbS0+X19jcnRfYWxnOworCXN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduID0gY3J5cHRvX2luc3RhbmNlX2N0eChpbnN0KTsKKwlzdHJ1Y3QgY3J5cHRvX2VjYl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisKKwl0Zm0gPSBjcnlwdG9fc3Bhd25fdGZtKHNwYXduKTsKKwlpZiAoSVNfRVJSKHRmbSkpCisJCXJldHVybiBQVFJfRVJSKHRmbSk7CisKKwljdHgtPmNoaWxkID0gY3J5cHRvX2NpcGhlcl9jYXN0KHRmbSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXB0b19lY2JfZXhpdF90Zm0oc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2VjYl9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJY3J5cHRvX2ZyZWVfY2lwaGVyKGN0eC0+Y2hpbGQpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqY3J5cHRvX2VjYl9hbGxvYyh2b2lkICpwYXJhbSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHBhcmFtLCBsZW4sIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCisJCQkJICBDUllQVE9fQUxHX1RZUEVfTUFTSyB8IENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKKworCWluc3QgPSBjcnlwdG9fYWxsb2NfaW5zdGFuY2UoImVjYiIsIGFsZyk7CisJaWYgKElTX0VSUihpbnN0KSkKKwkJZ290byBvdXRfcHV0X2FsZzsKKworCWluc3QtPmFsZy5jcmFfZmxhZ3MgPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSOworCWluc3QtPmFsZy5jcmFfcHJpb3JpdHkgPSBhbGctPmNyYV9wcmlvcml0eTsKKwlpbnN0LT5hbGcuY3JhX2Jsb2Nrc2l6ZSA9IGFsZy0+Y3JhX2Jsb2Nrc2l6ZTsKKwlpbnN0LT5hbGcuY3JhX2FsaWdubWFzayA9IGFsZy0+Y3JhX2FsaWdubWFzazsKKwlpbnN0LT5hbGcuY3JhX3R5cGUgPSAmY3J5cHRvX2Jsa2NpcGhlcl90eXBlOworCisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIubWluX2tleXNpemUgPSBhbGctPmNyYV9jaXBoZXIuY2lhX21pbl9rZXlzaXplOworCWluc3QtPmFsZy5jcmFfYmxrY2lwaGVyLm1heF9rZXlzaXplID0gYWxnLT5jcmFfY2lwaGVyLmNpYV9tYXhfa2V5c2l6ZTsKKworCWluc3QtPmFsZy5jcmFfY3R4c2l6ZSA9IHNpemVvZihzdHJ1Y3QgY3J5cHRvX2VjYl9jdHgpOworCisJaW5zdC0+YWxnLmNyYV9pbml0ID0gY3J5cHRvX2VjYl9pbml0X3RmbTsKKwlpbnN0LT5hbGcuY3JhX2V4aXQgPSBjcnlwdG9fZWNiX2V4aXRfdGZtOworCisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuc2V0a2V5ID0gY3J5cHRvX2VjYl9zZXRrZXk7CisJaW5zdC0+YWxnLmNyYV9ibGtjaXBoZXIuZW5jcnlwdCA9IGNyeXB0b19lY2JfZW5jcnlwdDsKKwlpbnN0LT5hbGcuY3JhX2Jsa2NpcGhlci5kZWNyeXB0ID0gY3J5cHRvX2VjYl9kZWNyeXB0OworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiBpbnN0OworfQorCitzdGF0aWMgdm9pZCBjcnlwdG9fZWNiX2ZyZWUoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCkKK3sKKwljcnlwdG9fZHJvcF9zcGF3bihjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpKTsKKwlrZnJlZShpbnN0KTsKK30KKworc3RhdGljIHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgY3J5cHRvX2VjYl90bXBsID0geworCS5uYW1lID0gImVjYiIsCisJLmFsbG9jID0gY3J5cHRvX2VjYl9hbGxvYywKKwkuZnJlZSA9IGNyeXB0b19lY2JfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjcnlwdG9fZWNiX21vZHVsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2VjYl90bXBsKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNyeXB0b19lY2JfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmY3J5cHRvX2VjYl90bXBsKTsKK30KKworbW9kdWxlX2luaXQoY3J5cHRvX2VjYl9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChjcnlwdG9fZWNiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFQ0IgYmxvY2sgY2lwaGVyIGFsZ29yaXRobSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2hhc2guYyBiL2NyeXB0by9oYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RlYzIzZAotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by9oYXNoLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgSGFzaCBvcGVyYXRpb25zLgorICogCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b19oYXNoX2N0eHNpemUoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlyZXR1cm4gYWxnLT5jcmFfY3R4c2l6ZTsKK30KKworc3RhdGljIGludCBjcnlwdG9faW5pdF9oYXNoX29wcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBoYXNoX3RmbSAqY3J0ID0gJnRmbS0+Y3J0X2hhc2g7CisJc3RydWN0IGhhc2hfYWxnICphbGcgPSAmdGZtLT5fX2NydF9hbGctPmNyYV9oYXNoOworCisJaWYgKGFsZy0+ZGlnZXN0c2l6ZSA+IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNydC0+aW5pdCA9IGFsZy0+aW5pdDsKKwljcnQtPnVwZGF0ZSA9IGFsZy0+dXBkYXRlOworCWNydC0+ZmluYWwgPSBhbGctPmZpbmFsOworCWNydC0+ZGlnZXN0ID0gYWxnLT5kaWdlc3Q7CisJY3J0LT5zZXRrZXkgPSBhbGctPnNldGtleTsKKwljcnQtPmRpZ2VzdHNpemUgPSBhbGctPmRpZ2VzdHNpemU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY3J5cHRvX2hhc2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCisJX19hdHRyaWJ1dGVfdXNlZF9fOworc3RhdGljIHZvaWQgY3J5cHRvX2hhc2hfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBjcnlwdG9fYWxnICphbGcpCit7CisJc2VxX3ByaW50ZihtLCAidHlwZSAgICAgICAgIDogaGFzaFxuIik7CisJc2VxX3ByaW50ZihtLCAiYmxvY2tzaXplICAgIDogJXVcbiIsIGFsZy0+Y3JhX2Jsb2Nrc2l6ZSk7CisJc2VxX3ByaW50ZihtLCAiZGlnZXN0c2l6ZSAgIDogJXVcbiIsIGFsZy0+Y3JhX2hhc2guZGlnZXN0c2l6ZSk7Cit9CisKK2NvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9faGFzaF90eXBlID0geworCS5jdHhzaXplID0gY3J5cHRvX2hhc2hfY3R4c2l6ZSwKKwkuaW5pdCA9IGNyeXB0b19pbml0X2hhc2hfb3BzLAorI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJLnNob3cgPSBjcnlwdG9faGFzaF9zaG93LAorI2VuZGlmCit9OworRVhQT1JUX1NZTUJPTF9HUEwoY3J5cHRvX2hhc2hfdHlwZSk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBjcnlwdG9ncmFwaGljIGhhc2ggdHlwZSIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL2htYWMuYyBiL2NyeXB0by9obWFjLmMKaW5kZXggNDYxMjBkZS4uZjQwM2I2OSAxMDA2NDQKLS0tIGEvY3J5cHRvL2htYWMuYworKysgYi9jcnlwdG8vaG1hYy5jCkBAIC00LDEyMSArNCwyNDkgQEAKICAqIEhNQUM6IEtleWVkLUhhc2hpbmcgZm9yIE1lc3NhZ2UgQXV0aGVudGljYXRpb24gKFJGQzIxMDQpLgogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBKYW1lcyBNb3JyaXMgPGptb3JyaXNAaW50ZXJjb2RlLmNvbS5hdT4KKyAqIENvcHlyaWdodCAoYykgMjAwNiBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CiAgKgogICogVGhlIEhNQUMgaW1wbGVtZW50YXRpb24gaXMgZGVyaXZlZCBmcm9tIFVTQUdJLgogICogQ29weXJpZ2h0IChjKSAyMDAyIEthenVub3JpIE1peWF6YXdhIDxtaXlhemF3YUBsaW51eC1pcHY2Lm9yZz4gLyBVU0FHSQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQotICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKICAqIGFueSBsYXRlciB2ZXJzaW9uLgogICoKICAqLwotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KLSNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAotc3RhdGljIHZvaWQgaGFzaF9rZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3N0cnVjdCBobWFjX2N0eCB7CisJc3RydWN0IGNyeXB0b19oYXNoICpjaGlsZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWxpZ25fcHRyKHZvaWQgKnAsIHVuc2lnbmVkIGludCBhbGlnbikKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgdG1wOwotCQotCXNnX3NldF9idWYoJnRtcCwga2V5LCBrZXlsZW4pOwotCWNyeXB0b19kaWdlc3RfZGlnZXN0KHRmbSwgJnRtcCwgMSwga2V5KTsKKwlyZXR1cm4gKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZylwLCBhbGlnbik7CiB9CiAKLWludCBjcnlwdG9fYWxsb2NfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaG1hY19jdHggKmhtYWNfY3R4KHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtKQogewotCWludCByZXQgPSAwOwotCi0JQlVHX09OKCFjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSk7Ci0JCi0JdGZtLT5jcnRfZGlnZXN0LmRpdF9obWFjX2Jsb2NrID0ga21hbGxvYyhjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwotCWlmICh0Zm0tPmNydF9kaWdlc3QuZGl0X2htYWNfYmxvY2sgPT0gTlVMTCkKLQkJcmV0ID0gLUVOT01FTTsKLQotCXJldHVybiByZXQ7Ci0JCQorCXJldHVybiBhbGlnbl9wdHIoY3J5cHRvX2hhc2hfY3R4X2FsaWduZWQodGZtKSArCisJCQkgY3J5cHRvX2hhc2hfYmxvY2tzaXplKHRmbSkgKiAyICsKKwkJCSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSksIHNpemVvZih2b2lkICopKTsKIH0KIAotdm9pZCBjcnlwdG9fZnJlZV9obWFjX2Jsb2NrKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW50IGhtYWNfc2V0a2V5KHN0cnVjdCBjcnlwdG9faGFzaCAqcGFyZW50LAorCQkgICAgICAgY29uc3QgdTggKmlua2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQogewotCWtmcmVlKHRmbS0+Y3J0X2RpZ2VzdC5kaXRfaG1hY19ibG9jayk7Ci19Ci0KLXZvaWQgY3J5cHRvX2htYWNfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQgKmtleWxlbikKLXsKKwlpbnQgYnMgPSBjcnlwdG9faGFzaF9ibG9ja3NpemUocGFyZW50KTsKKwlpbnQgZHMgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHBhcmVudCk7CisJY2hhciAqaXBhZCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKHBhcmVudCk7CisJY2hhciAqb3BhZCA9IGlwYWQgKyBiczsKKwljaGFyICpkaWdlc3QgPSBvcGFkICsgYnM7CisJc3RydWN0IGhtYWNfY3R4ICpjdHggPSBhbGlnbl9wdHIoZGlnZXN0ICsgZHMsIHNpemVvZih2b2lkICopKTsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSA9IGN0eC0+Y2hpbGQ7CiAJdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHRtcDsKLQljaGFyICppcGFkID0gdGZtLT5jcnRfZGlnZXN0LmRpdF9obWFjX2Jsb2NrOwotCQotCWlmICgqa2V5bGVuID4gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkpIHsKLQkJaGFzaF9rZXkodGZtLCBrZXksICprZXlsZW4pOwotCQkqa2V5bGVuID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pOworCisJaWYgKGtleWxlbiA+IGJzKSB7CisJCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0IHRtcDsKKwkJaW50IGVycjsKKworCQlkZXNjLnRmbSA9IHRmbTsKKwkJZGVzYy5mbGFncyA9IGNyeXB0b19oYXNoX2dldF9mbGFncyhwYXJlbnQpOworCQlkZXNjLmZsYWdzICY9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwkJc2dfc2V0X2J1ZigmdG1wLCBpbmtleSwga2V5bGVuKTsKKworCQllcnIgPSBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZ0bXAsIGtleWxlbiwgZGlnZXN0KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJaW5rZXkgPSBkaWdlc3Q7CisJCWtleWxlbiA9IGRzOwogCX0KIAotCW1lbXNldChpcGFkLCAwLCBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSk7Ci0JbWVtY3B5KGlwYWQsIGtleSwgKmtleWxlbik7CisJbWVtY3B5KGlwYWQsIGlua2V5LCBrZXlsZW4pOworCW1lbXNldChpcGFkICsga2V5bGVuLCAwLCBicyAtIGtleWxlbik7CisJbWVtY3B5KG9wYWQsIGlwYWQsIGJzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKTsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBiczsgaSsrKSB7CiAJCWlwYWRbaV0gXj0gMHgzNjsKLQotCXNnX3NldF9idWYoJnRtcCwgaXBhZCwgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkpOwotCQotCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwotCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgJnRtcCwgMSk7Ci19Ci0KLXZvaWQgY3J5cHRvX2htYWNfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbnNnKQotewotCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgc2csIG5zZyk7Ci19Ci0KLXZvaWQgY3J5cHRvX2htYWNfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICprZXlsZW4sIHU4ICpvdXQpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHRtcDsKLQljaGFyICpvcGFkID0gdGZtLT5jcnRfZGlnZXN0LmRpdF9obWFjX2Jsb2NrOwotCQotCWlmICgqa2V5bGVuID4gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkpIHsKLQkJaGFzaF9rZXkodGZtLCBrZXksICprZXlsZW4pOwotCQkqa2V5bGVuID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pOworCQlvcGFkW2ldIF49IDB4NWM7CiAJfQogCi0JY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIG91dCk7Ci0KLQltZW1zZXQob3BhZCwgMCwgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkpOwotCW1lbWNweShvcGFkLCBrZXksICprZXlsZW4pOwotCQkKLQlmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSk7IGkrKykKLQkJb3BhZFtpXSBePSAweDVjOwotCi0Jc2dfc2V0X2J1ZigmdG1wLCBvcGFkLCBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSk7Ci0KLQljcnlwdG9fZGlnZXN0X2luaXQodGZtKTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm0sICZ0bXAsIDEpOwotCQotCXNnX3NldF9idWYoJnRtcCwgb3V0LCBjcnlwdG9fdGZtX2FsZ19kaWdlc3RzaXplKHRmbSkpOwotCQotCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgJnRtcCwgMSk7Ci0JY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIG91dCk7CisJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY3J5cHRvX2htYWMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmtleSwgdW5zaWduZWQgaW50ICprZXlsZW4sCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2csIHU4ICpvdXQpCitzdGF0aWMgaW50IGhtYWNfaW5pdChzdHJ1Y3QgaGFzaF9kZXNjICpwZGVzYykKIHsKLQljcnlwdG9faG1hY19pbml0KHRmbSwga2V5LCBrZXlsZW4pOwotCWNyeXB0b19obWFjX3VwZGF0ZSh0Zm0sIHNnLCBuc2cpOwotCWNyeXB0b19obWFjX2ZpbmFsKHRmbSwga2V5LCBrZXlsZW4sIG91dCk7CisJc3RydWN0IGNyeXB0b19oYXNoICpwYXJlbnQgPSBwZGVzYy0+dGZtOworCWludCBicyA9IGNyeXB0b19oYXNoX2Jsb2Nrc2l6ZShwYXJlbnQpOworCWludCBkcyA9IGNyeXB0b19oYXNoX2RpZ2VzdHNpemUocGFyZW50KTsKKwljaGFyICppcGFkID0gY3J5cHRvX2hhc2hfY3R4X2FsaWduZWQocGFyZW50KTsKKwlzdHJ1Y3QgaG1hY19jdHggKmN0eCA9IGFsaWduX3B0cihpcGFkICsgYnMgKiAyICsgZHMsIHNpemVvZih2b2lkICopKTsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHRtcDsKKworCWRlc2MudGZtID0gY3R4LT5jaGlsZDsKKwlkZXNjLmZsYWdzID0gcGRlc2MtPmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOworCXNnX3NldF9idWYoJnRtcCwgaXBhZCwgYnMpOworCisJcmV0dXJuIHVubGlrZWx5KGNyeXB0b19oYXNoX2luaXQoJmRlc2MpKSA/OgorCSAgICAgICBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsICZ0bXAsIDEpOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faG1hY19pbml0KTsKLUVYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19obWFjX3VwZGF0ZSk7Ci1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faG1hY19maW5hbCk7Ci1FWFBPUlRfU1lNQk9MX0dQTChjcnlwdG9faG1hYyk7CitzdGF0aWMgaW50IGhtYWNfdXBkYXRlKHN0cnVjdCBoYXNoX2Rlc2MgKnBkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgaG1hY19jdHggKmN0eCA9IGhtYWNfY3R4KHBkZXNjLT50Zm0pOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAorCWRlc2MudGZtID0gY3R4LT5jaGlsZDsKKwlkZXNjLmZsYWdzID0gcGRlc2MtPmZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOworCisJcmV0dXJuIGNyeXB0b19oYXNoX3VwZGF0ZSgmZGVzYywgc2csIG5ieXRlcyk7Cit9CisKK3N0YXRpYyBpbnQgaG1hY19maW5hbChzdHJ1Y3QgaGFzaF9kZXNjICpwZGVzYywgdTggKm91dCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnBhcmVudCA9IHBkZXNjLT50Zm07CisJaW50IGJzID0gY3J5cHRvX2hhc2hfYmxvY2tzaXplKHBhcmVudCk7CisJaW50IGRzID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShwYXJlbnQpOworCWNoYXIgKm9wYWQgPSBjcnlwdG9faGFzaF9jdHhfYWxpZ25lZChwYXJlbnQpICsgYnM7CisJY2hhciAqZGlnZXN0ID0gb3BhZCArIGJzOworCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gYWxpZ25fcHRyKGRpZ2VzdCArIGRzLCBzaXplb2Yodm9pZCAqKSk7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOworCXN0cnVjdCBzY2F0dGVybGlzdCB0bXA7CisKKwlkZXNjLnRmbSA9IGN0eC0+Y2hpbGQ7CisJZGVzYy5mbGFncyA9IHBkZXNjLT5mbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwlzZ19zZXRfYnVmKCZ0bXAsIG9wYWQsIGJzICsgZHMpOworCisJcmV0dXJuIHVubGlrZWx5KGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBkaWdlc3QpKSA/OgorCSAgICAgICBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZ0bXAsIGJzICsgZHMsIG91dCk7Cit9CisKK3N0YXRpYyBpbnQgaG1hY19kaWdlc3Qoc3RydWN0IGhhc2hfZGVzYyAqcGRlc2MsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzLCB1OCAqb3V0KQoreworCXN0cnVjdCBjcnlwdG9faGFzaCAqcGFyZW50ID0gcGRlc2MtPnRmbTsKKwlpbnQgYnMgPSBjcnlwdG9faGFzaF9ibG9ja3NpemUocGFyZW50KTsKKwlpbnQgZHMgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHBhcmVudCk7CisJY2hhciAqaXBhZCA9IGNyeXB0b19oYXNoX2N0eF9hbGlnbmVkKHBhcmVudCk7CisJY2hhciAqb3BhZCA9IGlwYWQgKyBiczsKKwljaGFyICpkaWdlc3QgPSBvcGFkICsgYnM7CisJc3RydWN0IGhtYWNfY3R4ICpjdHggPSBhbGlnbl9wdHIoZGlnZXN0ICsgZHMsIHNpemVvZih2b2lkICopKTsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnMVsyXTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2cyWzFdOworCisJZGVzYy50Zm0gPSBjdHgtPmNoaWxkOworCWRlc2MuZmxhZ3MgPSBwZGVzYy0+ZmxhZ3MgJiBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisKKwlzZ19zZXRfYnVmKHNnMSwgaXBhZCwgYnMpOworCXNnMVsxXS5wYWdlID0gKHZvaWQgKilzZzsKKwlzZzFbMV0ubGVuZ3RoID0gMDsKKwlzZ19zZXRfYnVmKHNnMiwgb3BhZCwgYnMgKyBkcyk7CisKKwlyZXR1cm4gdW5saWtlbHkoY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZzEsIG5ieXRlcyArIGJzLCBkaWdlc3QpKSA/OgorCSAgICAgICBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnMiwgYnMgKyBkcywgb3V0KTsKK30KKworc3RhdGljIGludCBobWFjX2luaXRfdGZtKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCA9ICh2b2lkICopdGZtLT5fX2NydF9hbGc7CisJc3RydWN0IGNyeXB0b19zcGF3biAqc3Bhd24gPSBjcnlwdG9faW5zdGFuY2VfY3R4KGluc3QpOworCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gaG1hY19jdHgoX19jcnlwdG9faGFzaF9jYXN0KHRmbSkpOworCisJdGZtID0gY3J5cHRvX3NwYXduX3RmbShzcGF3bik7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gUFRSX0VSUih0Zm0pOworCisJY3R4LT5jaGlsZCA9IGNyeXB0b19oYXNoX2Nhc3QodGZtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaG1hY19leGl0X3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCXN0cnVjdCBobWFjX2N0eCAqY3R4ID0gaG1hY19jdHgoX19jcnlwdG9faGFzaF9jYXN0KHRmbSkpOworCWNyeXB0b19mcmVlX2hhc2goY3R4LT5jaGlsZCk7Cit9CisKK3N0YXRpYyB2b2lkIGhtYWNfZnJlZShzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCWNyeXB0b19kcm9wX3NwYXduKGNyeXB0b19pbnN0YW5jZV9jdHgoaW5zdCkpOworCWtmcmVlKGluc3QpOworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaG1hY19hbGxvYyh2b2lkICpwYXJhbSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworCXN0cnVjdCBjcnlwdG9fYWxnICphbGc7CisKKwlhbGcgPSBjcnlwdG9fZ2V0X2F0dHJfYWxnKHBhcmFtLCBsZW4sIENSWVBUT19BTEdfVFlQRV9IQVNILAorCQkJCSAgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSyB8IENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoYWxnKSkKKwkJcmV0dXJuIEVSUl9QVFIoUFRSX0VSUihhbGcpKTsKKworCWluc3QgPSBjcnlwdG9fYWxsb2NfaW5zdGFuY2UoImhtYWMiLCBhbGcpOworCWlmIChJU19FUlIoaW5zdCkpCisJCWdvdG8gb3V0X3B1dF9hbGc7CisKKwlpbnN0LT5hbGcuY3JhX2ZsYWdzID0gQ1JZUFRPX0FMR19UWVBFX0hBU0g7CisJaW5zdC0+YWxnLmNyYV9wcmlvcml0eSA9IGFsZy0+Y3JhX3ByaW9yaXR5OworCWluc3QtPmFsZy5jcmFfYmxvY2tzaXplID0gYWxnLT5jcmFfYmxvY2tzaXplOworCWluc3QtPmFsZy5jcmFfYWxpZ25tYXNrID0gYWxnLT5jcmFfYWxpZ25tYXNrOworCWluc3QtPmFsZy5jcmFfdHlwZSA9ICZjcnlwdG9faGFzaF90eXBlOworCisJaW5zdC0+YWxnLmNyYV9oYXNoLmRpZ2VzdHNpemUgPQorCQkoYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX1RZUEVfTUFTSykgPT0KKwkJQ1JZUFRPX0FMR19UWVBFX0hBU0ggPyBhbGctPmNyYV9oYXNoLmRpZ2VzdHNpemUgOgorCQkJCSAgICAgICBhbGctPmNyYV9kaWdlc3QuZGlhX2RpZ2VzdHNpemU7CisKKwlpbnN0LT5hbGcuY3JhX2N0eHNpemUgPSBzaXplb2Yoc3RydWN0IGhtYWNfY3R4KSArCisJCQkJQUxJR04oaW5zdC0+YWxnLmNyYV9ibG9ja3NpemUgKiAyICsKKwkJCQkgICAgICBpbnN0LT5hbGcuY3JhX2hhc2guZGlnZXN0c2l6ZSwKKwkJCQkgICAgICBzaXplb2Yodm9pZCAqKSk7CisKKwlpbnN0LT5hbGcuY3JhX2luaXQgPSBobWFjX2luaXRfdGZtOworCWluc3QtPmFsZy5jcmFfZXhpdCA9IGhtYWNfZXhpdF90Zm07CisKKwlpbnN0LT5hbGcuY3JhX2hhc2guaW5pdCA9IGhtYWNfaW5pdDsKKwlpbnN0LT5hbGcuY3JhX2hhc2gudXBkYXRlID0gaG1hY191cGRhdGU7CisJaW5zdC0+YWxnLmNyYV9oYXNoLmZpbmFsID0gaG1hY19maW5hbDsKKwlpbnN0LT5hbGcuY3JhX2hhc2guZGlnZXN0ID0gaG1hY19kaWdlc3Q7CisJaW5zdC0+YWxnLmNyYV9oYXNoLnNldGtleSA9IGhtYWNfc2V0a2V5OworCitvdXRfcHV0X2FsZzoKKwljcnlwdG9fbW9kX3B1dChhbGcpOworCXJldHVybiBpbnN0OworfQorCitzdGF0aWMgc3RydWN0IGNyeXB0b190ZW1wbGF0ZSBobWFjX3RtcGwgPSB7CisJLm5hbWUgPSAiaG1hYyIsCisJLmFsbG9jID0gaG1hY19hbGxvYywKKwkuZnJlZSA9IGhtYWNfZnJlZSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBobWFjX21vZHVsZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl90ZW1wbGF0ZSgmaG1hY190bXBsKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGhtYWNfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZSgmaG1hY190bXBsKTsKK30KKworbW9kdWxlX2luaXQoaG1hY19tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChobWFjX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJITUFDIGhhc2ggYWxnb3JpdGhtIik7CmRpZmYgLS1naXQgYS9jcnlwdG8vaW50ZXJuYWwuaCBiL2NyeXB0by9pbnRlcm5hbC5oCmluZGV4IDk1OWU2MDIuLjJkYTZhZDQgMTAwNjQ0Ci0tLSBhL2NyeXB0by9pbnRlcm5hbC5oCisrKyBiL2NyeXB0by9pbnRlcm5hbC5oCkBAIC0xMiwxOSArMTIsNDMgQEAKICAqLwogI2lmbmRlZiBfQ1JZUFRPX0lOVEVSTkFMX0gKICNkZWZpbmUgX0NSWVBUT19JTlRFUk5BTF9ICi0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisKKyNpbmNsdWRlIDxjcnlwdG8vYWxnYXBpLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20va21hcF90eXBlcy5oPgogCisvKiBDcnlwdG8gbm90aWZpY2F0aW9uIGV2ZW50cy4gKi8KK2VudW0geworCUNSWVBUT19NU0dfQUxHX1JFUVVFU1QsCisJQ1JZUFRPX01TR19BTEdfUkVHSVNURVIsCisJQ1JZUFRPX01TR19BTEdfVU5SRUdJU1RFUiwKKwlDUllQVE9fTVNHX1RNUExfUkVHSVNURVIsCisJQ1JZUFRPX01TR19UTVBMX1VOUkVHSVNURVIsCit9OworCitzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlOworc3RydWN0IGNyeXB0b190ZW1wbGF0ZTsKKworc3RydWN0IGNyeXB0b19sYXJ2YWwgeworCXN0cnVjdCBjcnlwdG9fYWxnIGFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2FsZyAqYWR1bHQ7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGlvbjsKKwl1MzIgbWFzazsKK307CisKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNyeXB0b19hbGdfbGlzdDsKIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIGNyeXB0b19hbGdfc2VtOworZXh0ZXJuIHN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkIGNyeXB0b19jaGFpbjsKIAogZXh0ZXJuIGVudW0ga21fdHlwZSBjcnlwdG9fa21fdHlwZXNbXTsKIApAQCAtNDMsMzYgKzY3LDMzIEBACiAJa3VubWFwX2F0b21pYyh2YWRkciwgY3J5cHRvX2ttYXBfdHlwZShvdXQpKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b195aWVsZChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b195aWVsZCh1MzIgZmxhZ3MpCiB7Ci0JaWYgKHRmbS0+Y3J0X2ZsYWdzICYgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKQorCWlmIChmbGFncyAmIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCkKIAkJY29uZF9yZXNjaGVkKCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQ1JZUFRPX0hNQUMKLWludCBjcnlwdG9fYWxsb2NfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKLXZvaWQgY3J5cHRvX2ZyZWVfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKLSNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYWxsb2NfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2ZyZWVfaG1hY19ibG9jayhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoteyB9Ci0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiB2b2lkIF9faW5pdCBjcnlwdG9faW5pdF9wcm9jKHZvaWQpOwordm9pZCBfX2V4aXQgY3J5cHRvX2V4aXRfcHJvYyh2b2lkKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2luaXRfcHJvYyh2b2lkKQogeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2V4aXRfcHJvYyh2b2lkKQoreyB9CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX2RpZ2VzdF9jdHhzaXplKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsCiAJCQkJCQkgaW50IGZsYWdzKQogewotCXJldHVybiBhbGctPmNyYV9jdHhzaXplOworCXVuc2lnbmVkIGludCBsZW4gPSBhbGctPmNyYV9jdHhzaXplOworCisJaWYgKGFsZy0+Y3JhX2FsaWdubWFzaykgeworCQlsZW4gPSBBTElHTihsZW4sICh1bnNpZ25lZCBsb25nKWFsZy0+Y3JhX2FsaWdubWFzayArIDEpOworCQlsZW4gKz0gYWxnLT5jcmFfZGlnZXN0LmRpYV9kaWdlc3RzaXplOworCX0KKworCXJldHVybiBsZW47CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19jaXBoZXJfY3R4c2l6ZShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnLApAQCAtOTYsNiArMTE3LDEwIEBACiAJcmV0dXJuIGFsZy0+Y3JhX2N0eHNpemU7CiB9CiAKK3N0cnVjdCBjcnlwdG9fYWxnICpjcnlwdG9fbW9kX2dldChzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKTsKK3N0cnVjdCBjcnlwdG9fYWxnICpfX2NyeXB0b19hbGdfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7CitzdHJ1Y3QgY3J5cHRvX2FsZyAqY3J5cHRvX2FsZ19tb2RfbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7CisKIGludCBjcnlwdG9faW5pdF9kaWdlc3RfZmxhZ3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIGZsYWdzKTsKIGludCBjcnlwdG9faW5pdF9jaXBoZXJfZmxhZ3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTMyIGZsYWdzKTsKIGludCBjcnlwdG9faW5pdF9jb21wcmVzc19mbGFncyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1MzIgZmxhZ3MpOwpAQCAtMTA4LDUgKzEzMyw1MiBAQAogdm9pZCBjcnlwdG9fZXhpdF9jaXBoZXJfb3BzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogdm9pZCBjcnlwdG9fZXhpdF9jb21wcmVzc19vcHMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CiAKK3ZvaWQgY3J5cHRvX2xhcnZhbF9lcnJvcihjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOworCit2b2lkIGNyeXB0b19zaG9vdF9hbGcoc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CitzdHJ1Y3QgY3J5cHRvX3RmbSAqX19jcnlwdG9fYWxsb2NfdGZtKHN0cnVjdCBjcnlwdG9fYWxnICphbGcsIHUzMiBmbGFncyk7CisKK2ludCBjcnlwdG9fcmVnaXN0ZXJfaW5zdGFuY2Uoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCwKKwkJCSAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CisKK2ludCBjcnlwdG9fcmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CitpbnQgY3J5cHRvX3VucmVnaXN0ZXJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fYWxnX3B1dChzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZhbGctPmNyYV9yZWZjbnQpICYmIGFsZy0+Y3JhX2Rlc3Ryb3kpCisJCWFsZy0+Y3JhX2Rlc3Ryb3koYWxnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX3RtcGxfZ2V0KHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwpCit7CisJcmV0dXJuIHRyeV9tb2R1bGVfZ2V0KHRtcGwtPm1vZHVsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fdG1wbF9wdXQoc3RydWN0IGNyeXB0b190ZW1wbGF0ZSAqdG1wbCkKK3sKKwltb2R1bGVfcHV0KHRtcGwtPm1vZHVsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19pc19sYXJ2YWwoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlyZXR1cm4gYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX0xBUlZBTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2lzX2RlYWQoc3RydWN0IGNyeXB0b19hbGcgKmFsZykKK3sKKwlyZXR1cm4gYWxnLT5jcmFfZmxhZ3MgJiBDUllQVE9fQUxHX0RFQUQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19pc19tb3JpYnVuZChzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKQoreworCXJldHVybiBhbGctPmNyYV9mbGFncyAmIChDUllQVE9fQUxHX0RFQUQgfCBDUllQVE9fQUxHX0RZSU5HKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX25vdGlmeSh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3J5cHRvX2NoYWluLCB2YWwsIHYpOworfQorCiAjZW5kaWYJLyogX0NSWVBUT19JTlRFUk5BTF9IICovCiAKZGlmZiAtLWdpdCBhL2NyeXB0by9raGF6YWQuYyBiL2NyeXB0by9raGF6YWQuYwppbmRleCBkNGM5ZDM2Li45ZmEyNGEyIDEwMDY0NAotLS0gYS9jcnlwdG8va2hhemFkLmMKKysrIGIvY3J5cHRvL2toYXphZC5jCkBAIC03NTUsMTkgKzc1NSwxMyBAQAogfTsKIAogc3RhdGljIGludCBraGF6YWRfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCi0JCQkgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCisJCQkgdW5zaWduZWQgaW50IGtleV9sZW4pCiB7CiAJc3RydWN0IGtoYXphZF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19iZTMyICprZXkgPSAoY29uc3QgX19iZTMyICopaW5fa2V5OwogCWludCByOwogCWNvbnN0IHU2NCAqUyA9IFQ3OwogCXU2NCBLMiwgSzE7Ci0JCi0JaWYgKGtleV9sZW4gIT0gMTYpCi0JewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCS8qIGtleSBpcyBzdXBwb3NlZCB0byBiZSAzMi1iaXQgYWxpZ25lZCAqLwogCUsyID0gKCh1NjQpYmUzMl90b19jcHUoa2V5WzBdKSA8PCAzMikgfCBiZTMyX3RvX2NwdShrZXlbMV0pOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL21pY2hhZWxfbWljLmMgYi9jcnlwdG8vbWljaGFlbF9taWMuYwppbmRleCBkMDYxZGEyLi4wOTQzOTdiIDEwMDY0NAotLS0gYS9jcnlwdG8vbWljaGFlbF9taWMuYworKysgYi9jcnlwdG8vbWljaGFlbF9taWMuYwpAQCAtMTIzLDE0ICsxMjMsMTMgQEAKIAogCiBzdGF0aWMgaW50IG1pY2hhZWxfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQkgIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpCisJCQkgIHVuc2lnbmVkIGludCBrZXlsZW4pCiB7CiAJc3RydWN0IG1pY2hhZWxfbWljX2N0eCAqbWN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJY29uc3QgX19sZTMyICpkYXRhID0gKGNvbnN0IF9fbGUzMiAqKWtleTsKIAogCWlmIChrZXlsZW4gIT0gOCkgewotCQlpZiAoZmxhZ3MpCi0JCQkqZmxhZ3MgPSBDUllQVE9fVEZNX1JFU19CQURfS0VZX0xFTjsKKwkJdGZtLT5jcnRfZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvY3J5cHRvL3Byb2MuYyBiL2NyeXB0by9wcm9jLmMKaW5kZXggYzBhNWRkNy4uZGFiY2UwNiAxMDA2NDQKLS0tIGEvY3J5cHRvL3Byb2MuYworKysgYi9jcnlwdG8vcHJvYy5jCkBAIC0xMiw2ICsxMiw4IEBACiAgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKi8KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KQEAgLTU0LDYgKzU2LDcgQEAKIAlzZXFfcHJpbnRmKG0sICJkcml2ZXIgICAgICAgOiAlc1xuIiwgYWxnLT5jcmFfZHJpdmVyX25hbWUpOwogCXNlcV9wcmludGYobSwgIm1vZHVsZSAgICAgICA6ICVzXG4iLCBtb2R1bGVfbmFtZShhbGctPmNyYV9tb2R1bGUpKTsKIAlzZXFfcHJpbnRmKG0sICJwcmlvcml0eSAgICAgOiAlZFxuIiwgYWxnLT5jcmFfcHJpb3JpdHkpOworCXNlcV9wcmludGYobSwgInJlZmNudCAgICAgICA6ICVkXG4iLCBhdG9taWNfcmVhZCgmYWxnLT5jcmFfcmVmY250KSk7CiAJCiAJc3dpdGNoIChhbGctPmNyYV9mbGFncyAmIENSWVBUT19BTEdfVFlQRV9NQVNLKSB7CiAJY2FzZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOgpAQCAtNzUsNyArNzgsMTAgQEAKIAkJc2VxX3ByaW50ZihtLCAidHlwZSAgICAgICAgIDogY29tcHJlc3Npb25cbiIpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzZXFfcHJpbnRmKG0sICJ0eXBlICAgICAgICAgOiB1bmtub3duXG4iKTsKKwkJaWYgKGFsZy0+Y3JhX3R5cGUgJiYgYWxnLT5jcmFfdHlwZS0+c2hvdykKKwkJCWFsZy0+Y3JhX3R5cGUtPnNob3cobSwgYWxnKTsKKwkJZWxzZQorCQkJc2VxX3ByaW50ZihtLCAidHlwZSAgICAgICAgIDogdW5rbm93blxuIik7CiAJCWJyZWFrOwogCX0KIApAQCAtMTEwLDMgKzExNiw4IEBACiAJaWYgKHByb2MpCiAJCXByb2MtPnByb2NfZm9wcyA9ICZwcm9jX2NyeXB0b19vcHM7CiB9CisKK3ZvaWQgX19leGl0IGNyeXB0b19leGl0X3Byb2Modm9pZCkKK3sKKwlyZW1vdmVfcHJvY19lbnRyeSgiY3J5cHRvIiwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9jcnlwdG8vc2NhdHRlcndhbGsuYyBiL2NyeXB0by9zY2F0dGVyd2Fsay5jCmluZGV4IDI5NTNlMmMuLjM1MTcyZDMgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zY2F0dGVyd2Fsay5jCisrKyBiL2NyeXB0by9zY2F0dGVyd2Fsay5jCkBAIC0xNSw5ICsxNSwxMSBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogI2luY2x1ZGUgInNjYXR0ZXJ3YWxrLmgiCiAKQEAgLTI3LDg4ICsyOSw3NyBAQAogCUtNX1NPRlRJUlEwLAogCUtNX1NPRlRJUlExLAogfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGNyeXB0b19rbV90eXBlcyk7CiAKLXN0YXRpYyB2b2lkIG1lbWNweV9kaXIodm9pZCAqYnVmLCB2b2lkICpzZ2RhdGEsIHNpemVfdCBuYnl0ZXMsIGludCBvdXQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWVtY3B5X2Rpcih2b2lkICpidWYsIHZvaWQgKnNnZGF0YSwgc2l6ZV90IG5ieXRlcywgaW50IG91dCkKIHsKLQlpZiAob3V0KQotCQltZW1jcHkoc2dkYXRhLCBidWYsIG5ieXRlcyk7Ci0JZWxzZQotCQltZW1jcHkoYnVmLCBzZ2RhdGEsIG5ieXRlcyk7CisJdm9pZCAqc3JjID0gb3V0ID8gYnVmIDogc2dkYXRhOworCXZvaWQgKmRzdCA9IG91dCA/IHNnZGF0YSA6IGJ1ZjsKKworCW1lbWNweShkc3QsIHNyYywgbmJ5dGVzKTsKIH0KIAogdm9pZCBzY2F0dGVyd2Fsa19zdGFydChzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogewotCXVuc2lnbmVkIGludCByZXN0X29mX3BhZ2U7Ci0KIAl3YWxrLT5zZyA9IHNnOwogCi0Jd2Fsay0+cGFnZSA9IHNnLT5wYWdlOwotCXdhbGstPmxlbl90aGlzX3NlZ21lbnQgPSBzZy0+bGVuZ3RoOwotCiAJQlVHX09OKCFzZy0+bGVuZ3RoKTsKIAotCXJlc3Rfb2ZfcGFnZSA9IFBBR0VfQ0FDSEVfU0laRSAtIChzZy0+b2Zmc2V0ICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpKTsKLQl3YWxrLT5sZW5fdGhpc19wYWdlID0gbWluKHNnLT5sZW5ndGgsIHJlc3Rfb2ZfcGFnZSk7CiAJd2Fsay0+b2Zmc2V0ID0gc2ctPm9mZnNldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNjYXR0ZXJ3YWxrX3N0YXJ0KTsKIAotdm9pZCBzY2F0dGVyd2Fsa19tYXAoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywgaW50IG91dCkKK3ZvaWQgKnNjYXR0ZXJ3YWxrX21hcChzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLCBpbnQgb3V0KQogewotCXdhbGstPmRhdGEgPSBjcnlwdG9fa21hcCh3YWxrLT5wYWdlLCBvdXQpICsgd2Fsay0+b2Zmc2V0OworCXJldHVybiBjcnlwdG9fa21hcChzY2F0dGVyd2Fsa19wYWdlKHdhbGspLCBvdXQpICsKKwkgICAgICAgb2Zmc2V0X2luX3BhZ2Uod2Fsay0+b2Zmc2V0KTsKIH0KLQotc3RhdGljIGlubGluZSB2b2lkIHNjYXR0ZXJ3YWxrX3VubWFwKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIGludCBvdXQpCi17Ci0JLyogd2Fsay0+ZGF0YSBtYXkgYmUgcG9pbnRpbmcgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIG5leHQgcGFnZTsKLQkgICBob3dldmVyLCB3ZSBrbm93IHdlIHRyYW5zZmVyZWQgYXQgbGVhc3Qgb25lIGJ5dGUuICBTbywKLQkgICB3YWxrLT5kYXRhIC0gMSB3aWxsIGJlIGEgdmlydHVhbCBhZGRyZXNzIGluIHRoZSBtYXBwZWQgcGFnZS4gKi8KLQljcnlwdG9fa3VubWFwKHdhbGstPmRhdGEgLSAxLCBvdXQpOwotfQorRVhQT1JUX1NZTUJPTF9HUEwoc2NhdHRlcndhbGtfbWFwKTsKIAogc3RhdGljIHZvaWQgc2NhdHRlcndhbGtfcGFnZWRvbmUoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywgaW50IG91dCwKIAkJCQkgdW5zaWduZWQgaW50IG1vcmUpCiB7CiAJaWYgKG91dCkKLQkJZmx1c2hfZGNhY2hlX3BhZ2Uod2Fsay0+cGFnZSk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKHNjYXR0ZXJ3YWxrX3BhZ2Uod2FsaykpOwogCiAJaWYgKG1vcmUpIHsKLQkJd2Fsay0+bGVuX3RoaXNfc2VnbWVudCAtPSB3YWxrLT5sZW5fdGhpc19wYWdlOwotCi0JCWlmICh3YWxrLT5sZW5fdGhpc19zZWdtZW50KSB7Ci0JCQl3YWxrLT5wYWdlKys7Ci0JCQl3YWxrLT5sZW5fdGhpc19wYWdlID0gbWluKHdhbGstPmxlbl90aGlzX3NlZ21lbnQsCi0JCQkJCQkgICh1bnNpZ25lZClQQUdFX0NBQ0hFX1NJWkUpOwotCQkJd2Fsay0+b2Zmc2V0ID0gMDsKLQkJfQotCQllbHNlCisJCXdhbGstPm9mZnNldCArPSBQQUdFX1NJWkUgLSAxOworCQl3YWxrLT5vZmZzZXQgJj0gUEFHRV9NQVNLOworCQlpZiAod2Fsay0+b2Zmc2V0ID49IHdhbGstPnNnLT5vZmZzZXQgKyB3YWxrLT5zZy0+bGVuZ3RoKQogCQkJc2NhdHRlcndhbGtfc3RhcnQod2Fsaywgc2dfbmV4dCh3YWxrLT5zZykpOwogCX0KIH0KIAogdm9pZCBzY2F0dGVyd2Fsa19kb25lKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIGludCBvdXQsIGludCBtb3JlKQogewotCXNjYXR0ZXJ3YWxrX3VubWFwKHdhbGssIG91dCk7Ci0JaWYgKHdhbGstPmxlbl90aGlzX3BhZ2UgPT0gMCB8fCAhbW9yZSkKKwlpZiAoIW9mZnNldF9pbl9wYWdlKHdhbGstPm9mZnNldCkgfHwgIW1vcmUpCiAJCXNjYXR0ZXJ3YWxrX3BhZ2Vkb25lKHdhbGssIG91dCwgbW9yZSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzY2F0dGVyd2Fsa19kb25lKTsKIAotLyoKLSAqIERvIG5vdCBjYWxsIHRoaXMgdW5sZXNzIHRoZSB0b3RhbCBsZW5ndGggb2YgYWxsIG9mIHRoZSBmcmFnbWVudHMKLSAqIGhhcyBiZWVuIHZlcmlmaWVkIGFzIG11bHRpcGxlIG9mIHRoZSBibG9jayBzaXplLgotICovCi1pbnQgc2NhdHRlcndhbGtfY29weWNodW5rcyh2b2lkICpidWYsIHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssCi0JCQkgICBzaXplX3QgbmJ5dGVzLCBpbnQgb3V0KQordm9pZCBzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKHZvaWQgKmJ1Ziwgc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywKKwkJCSAgICBzaXplX3QgbmJ5dGVzLCBpbnQgb3V0KQogewotCXdoaWxlIChuYnl0ZXMgPiB3YWxrLT5sZW5fdGhpc19wYWdlKSB7Ci0JCW1lbWNweV9kaXIoYnVmLCB3YWxrLT5kYXRhLCB3YWxrLT5sZW5fdGhpc19wYWdlLCBvdXQpOwotCQlidWYgKz0gd2Fsay0+bGVuX3RoaXNfcGFnZTsKLQkJbmJ5dGVzIC09IHdhbGstPmxlbl90aGlzX3BhZ2U7CisJZm9yICg7OykgeworCQl1bnNpZ25lZCBpbnQgbGVuX3RoaXNfcGFnZSA9IHNjYXR0ZXJ3YWxrX3BhZ2VsZW4od2Fsayk7CisJCXU4ICp2YWRkcjsKIAotCQlzY2F0dGVyd2Fsa191bm1hcCh3YWxrLCBvdXQpOworCQlpZiAobGVuX3RoaXNfcGFnZSA+IG5ieXRlcykKKwkJCWxlbl90aGlzX3BhZ2UgPSBuYnl0ZXM7CisKKwkJdmFkZHIgPSBzY2F0dGVyd2Fsa19tYXAod2Fsaywgb3V0KTsKKwkJbWVtY3B5X2RpcihidWYsIHZhZGRyLCBsZW5fdGhpc19wYWdlLCBvdXQpOworCQlzY2F0dGVyd2Fsa191bm1hcCh2YWRkciwgb3V0KTsKKworCQlpZiAobmJ5dGVzID09IGxlbl90aGlzX3BhZ2UpCisJCQlicmVhazsKKworCQlidWYgKz0gbGVuX3RoaXNfcGFnZTsKKwkJbmJ5dGVzIC09IGxlbl90aGlzX3BhZ2U7CisKIAkJc2NhdHRlcndhbGtfcGFnZWRvbmUod2Fsaywgb3V0LCAxKTsKLQkJc2NhdHRlcndhbGtfbWFwKHdhbGssIG91dCk7CiAJfQogCi0JbWVtY3B5X2RpcihidWYsIHdhbGstPmRhdGEsIG5ieXRlcywgb3V0KTsKLQlyZXR1cm4gbmJ5dGVzOworCXNjYXR0ZXJ3YWxrX2FkdmFuY2Uod2FsaywgbmJ5dGVzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNjYXR0ZXJ3YWxrX2NvcHljaHVua3MpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NjYXR0ZXJ3YWxrLmggYi9jcnlwdG8vc2NhdHRlcndhbGsuaAppbmRleCBlNzk5MjVjLi5mMTU5MmNjIDEwMDY0NAotLS0gYS9jcnlwdG8vc2NhdHRlcndhbGsuaAorKysgYi9jcnlwdG8vc2NhdHRlcndhbGsuaApAQCAtMTQsNDUgKzE0LDQyIEBACiAKICNpZm5kZWYgX0NSWVBUT19TQ0FUVEVSV0FMS19ICiAjZGVmaW5lIF9DUllQVE9fU0NBVFRFUldBTEtfSAorCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCi1zdHJ1Y3Qgc2NhdHRlcl93YWxrIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QJKnNnOwotCXN0cnVjdCBwYWdlCQkqcGFnZTsKLQl2b2lkCQkJKmRhdGE7Ci0JdW5zaWduZWQgaW50CQlsZW5fdGhpc19wYWdlOwotCXVuc2lnbmVkIGludAkJbGVuX3RoaXNfc2VnbWVudDsKLQl1bnNpZ25lZCBpbnQJCW9mZnNldDsKLX07CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotLyogRGVmaW5lIHNnX25leHQgaXMgYW4gaW5saW5lIHJvdXRpbmUgbm93IGluIGNhc2Ugd2Ugd2FudCB0byBjaGFuZ2UKLSAgIHNjYXR0ZXJsaXN0IHRvIGEgbGlua2VkIGxpc3QgbGF0ZXIuICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dfbmV4dChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnKQogewotCXJldHVybiBzZyArIDE7CisJcmV0dXJuICgrK3NnKS0+bGVuZ3RoID8gc2cgOiAodm9pZCAqKXNnLT5wYWdlOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzY2F0dGVyd2Fsa19zYW1lYnVmKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGtfaW4sCi0JCQkJICAgICAgc3RydWN0IHNjYXR0ZXJfd2FsayAqd2Fsa19vdXQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgc2NhdHRlcndhbGtfc2FtZWJ1ZihzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrX2luLAorCQkJCQkJc3RydWN0IHNjYXR0ZXJfd2FsayAqd2Fsa19vdXQpCiB7Ci0JcmV0dXJuIHdhbGtfaW4tPnBhZ2UgPT0gd2Fsa19vdXQtPnBhZ2UgJiYKLQkgICAgICAgd2Fsa19pbi0+b2Zmc2V0ID09IHdhbGtfb3V0LT5vZmZzZXQ7CisJcmV0dXJuICEoKCh3YWxrX2luLT5zZy0+cGFnZSAtIHdhbGtfb3V0LT5zZy0+cGFnZSkgPDwgUEFHRV9TSElGVCkgKworCQkgKGludCkod2Fsa19pbi0+b2Zmc2V0IC0gd2Fsa19vdXQtPm9mZnNldCkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzY2F0dGVyd2Fsa19wYWdlbGVuKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGspCit7CisJdW5zaWduZWQgaW50IGxlbiA9IHdhbGstPnNnLT5vZmZzZXQgKyB3YWxrLT5zZy0+bGVuZ3RoIC0gd2Fsay0+b2Zmc2V0OworCXVuc2lnbmVkIGludCBsZW5fdGhpc19wYWdlID0gb2Zmc2V0X2luX3BhZ2UofndhbGstPm9mZnNldCkgKyAxOworCXJldHVybiBsZW5fdGhpc19wYWdlID4gbGVuID8gbGVuIDogbGVuX3RoaXNfcGFnZTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgc2NhdHRlcndhbGtfY2xhbXAoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywKIAkJCQkJICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXJldHVybiBuYnl0ZXMgPiB3YWxrLT5sZW5fdGhpc19wYWdlID8gd2Fsay0+bGVuX3RoaXNfcGFnZSA6IG5ieXRlczsKKwl1bnNpZ25lZCBpbnQgbGVuX3RoaXNfcGFnZSA9IHNjYXR0ZXJ3YWxrX3BhZ2VsZW4od2Fsayk7CisJcmV0dXJuIG5ieXRlcyA+IGxlbl90aGlzX3BhZ2UgPyBsZW5fdGhpc19wYWdlIDogbmJ5dGVzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NhdHRlcndhbGtfYWR2YW5jZShzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQogewotCXdhbGstPmRhdGEgKz0gbmJ5dGVzOwogCXdhbGstPm9mZnNldCArPSBuYnl0ZXM7Ci0Jd2Fsay0+bGVuX3RoaXNfcGFnZSAtPSBuYnl0ZXM7Ci0Jd2Fsay0+bGVuX3RoaXNfc2VnbWVudCAtPSBuYnl0ZXM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNjYXR0ZXJ3YWxrX2FsaWduZWQoc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywKQEAgLTYxLDkgKzU4LDIwIEBACiAJcmV0dXJuICEod2Fsay0+b2Zmc2V0ICYgYWxpZ25tYXNrKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgcGFnZSAqc2NhdHRlcndhbGtfcGFnZShzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrKQoreworCXJldHVybiB3YWxrLT5zZy0+cGFnZSArICh3YWxrLT5vZmZzZXQgPj4gUEFHRV9TSElGVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzY2F0dGVyd2Fsa191bm1hcCh2b2lkICp2YWRkciwgaW50IG91dCkKK3sKKwljcnlwdG9fa3VubWFwKHZhZGRyLCBvdXQpOworfQorCiB2b2lkIHNjYXR0ZXJ3YWxrX3N0YXJ0KHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIHN0cnVjdCBzY2F0dGVybGlzdCAqc2cpOwotaW50IHNjYXR0ZXJ3YWxrX2NvcHljaHVua3Modm9pZCAqYnVmLCBzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLCBzaXplX3QgbmJ5dGVzLCBpbnQgb3V0KTsKLXZvaWQgc2NhdHRlcndhbGtfbWFwKHN0cnVjdCBzY2F0dGVyX3dhbGsgKndhbGssIGludCBvdXQpOwordm9pZCBzY2F0dGVyd2Fsa19jb3B5Y2h1bmtzKHZvaWQgKmJ1Ziwgc3RydWN0IHNjYXR0ZXJfd2FsayAqd2FsaywKKwkJCSAgICBzaXplX3QgbmJ5dGVzLCBpbnQgb3V0KTsKK3ZvaWQgKnNjYXR0ZXJ3YWxrX21hcChzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLCBpbnQgb3V0KTsKIHZvaWQgc2NhdHRlcndhbGtfZG9uZShzdHJ1Y3Qgc2NhdHRlcl93YWxrICp3YWxrLCBpbnQgb3V0LCBpbnQgbW9yZSk7CiAKICNlbmRpZiAgLyogX0NSWVBUT19TQ0FUVEVSV0FMS19IICovCmRpZmYgLS1naXQgYS9jcnlwdG8vc2VycGVudC5jIGIvY3J5cHRvL3NlcnBlbnQuYwppbmRleCBkZTYwY2RkLi40NjVkMDkxIDEwMDY0NAotLS0gYS9jcnlwdG8vc2VycGVudC5jCisrKyBiL2NyeXB0by9zZXJwZW50LmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCiAKIHN0YXRpYyBpbnQgc2VycGVudF9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJCSAgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncykKKwkJCSAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAlzdHJ1Y3Qgc2VycGVudF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CiAJdTMyICprID0gY3R4LT5leHBrZXk7CkBAIC0yMjQsMTMgKzIyNCw2IEBACiAJdTMyIHIwLHIxLHIyLHIzLHI0OwogCWludCBpOwogCi0JaWYgKChrZXlsZW4gPCBTRVJQRU5UX01JTl9LRVlfU0laRSkKLQkJCXx8IChrZXlsZW4gPiBTRVJQRU5UX01BWF9LRVlfU0laRSkpCi0JewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCS8qIENvcHkga2V5LCBhZGQgcGFkZGluZyAqLwogCiAJZm9yIChpID0gMDsgaSA8IGtleWxlbjsgKytpKQpAQCAtNDk3LDIxICs0OTAsMTUgQEAKIH07CiAKIHN0YXRpYyBpbnQgdG5lcHJlc19zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKLQkJCSAgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncykKKwkJCSAgdW5zaWduZWQgaW50IGtleWxlbikKIHsKIAl1OCByZXZfa2V5W1NFUlBFTlRfTUFYX0tFWV9TSVpFXTsKIAlpbnQgaTsKIAotCWlmICgoa2V5bGVuIDwgU0VSUEVOVF9NSU5fS0VZX1NJWkUpCi0JICAgIHx8IChrZXlsZW4gPiBTRVJQRU5UX01BWF9LRVlfU0laRSkpIHsKLQkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9IAotCiAJZm9yIChpID0gMDsgaSA8IGtleWxlbjsgKytpKQogCQlyZXZfa2V5W2tleWxlbiAtIGkgLSAxXSA9IGtleVtpXTsKICAKLQlyZXR1cm4gc2VycGVudF9zZXRrZXkodGZtLCByZXZfa2V5LCBrZXlsZW4sIGZsYWdzKTsKKwlyZXR1cm4gc2VycGVudF9zZXRrZXkodGZtLCByZXZfa2V5LCBrZXlsZW4pOwogfQogCiBzdGF0aWMgdm9pZCB0bmVwcmVzX2VuY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmRzdCwgY29uc3QgdTggKnNyYykKZGlmZiAtLWdpdCBhL2NyeXB0by9zaGExLmMgYi9jcnlwdG8vc2hhMS5jCmluZGV4IDZjNzdiNjguLjFiYmE1NTEgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGExLmMKKysrIGIvY3J5cHRvL3NoYTEuYwpAQCAtMTA5LDYgKzEwOSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhbGcgPSB7CiAJLmNyYV9uYW1lCT0JInNoYTEiLAorCS5jcmFfZHJpdmVyX25hbWU9CSJzaGExLWdlbmVyaWMiLAogCS5jcmFfZmxhZ3MJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNULAogCS5jcmFfYmxvY2tzaXplCT0JU0hBMV9ITUFDX0JMT0NLX1NJWkUsCiAJLmNyYV9jdHhzaXplCT0Jc2l6ZW9mKHN0cnVjdCBzaGExX2N0eCksCkBAIC0xMzcsMyArMTM4LDUgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEExIFNlY3VyZSBIYXNoIEFsZ29yaXRobSIpOworCitNT0RVTEVfQUxJQVMoInNoYTEtZ2VuZXJpYyIpOwpkaWZmIC0tZ2l0IGEvY3J5cHRvL3NoYTI1Ni5jIGIvY3J5cHRvL3NoYTI1Ni5jCmluZGV4IGJjNzFkODUuLjcxNjE5NWIgMTAwNjQ0Ci0tLSBhL2NyeXB0by9zaGEyNTYuYworKysgYi9jcnlwdG8vc2hhMjU2LmMKQEAgLTMwOSw2ICszMDksNyBAQAogCiBzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgYWxnID0gewogCS5jcmFfbmFtZQk9CSJzaGEyNTYiLAorCS5jcmFfZHJpdmVyX25hbWU9CSJzaGEyNTYtZ2VuZXJpYyIsCiAJLmNyYV9mbGFncwk9CUNSWVBUT19BTEdfVFlQRV9ESUdFU1QsCiAJLmNyYV9ibG9ja3NpemUJPQlTSEEyNTZfSE1BQ19CTE9DS19TSVpFLAogCS5jcmFfY3R4c2l6ZQk9CXNpemVvZihzdHJ1Y3Qgc2hhMjU2X2N0eCksCkBAIC0zMzcsMyArMzM4LDUgQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEEyNTYgU2VjdXJlIEhhc2ggQWxnb3JpdGhtIik7CisKK01PRFVMRV9BTElBUygic2hhMjU2LWdlbmVyaWMiKTsKZGlmZiAtLWdpdCBhL2NyeXB0by90Y3J5cHQuYyBiL2NyeXB0by90Y3J5cHQuYwppbmRleCBlNTJmNTZjLi44MzMwNzQyIDEwMDY0NAotLS0gYS9jcnlwdG8vdGNyeXB0LmMKKysrIGIvY3J5cHRvL3RjcnlwdC5jCkBAIC0xNyw2ICsxNyw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTU0LDggKzU1LDYgQEAKICovCiAjZGVmaW5lIEVOQ1JZUFQgMQogI2RlZmluZSBERUNSWVBUIDAKLSNkZWZpbmUgTU9ERV9FQ0IgMQotI2RlZmluZSBNT0RFX0NCQyAwCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgSURYWzhdID0geyBJRFgxLCBJRFgyLCBJRFgzLCBJRFg0LCBJRFg1LCBJRFg2LCBJRFg3LCBJRFg4IH07CiAKQEAgLTg5LDkgKzg4LDExIEBACiAJdW5zaWduZWQgaW50IGksIGosIGssIHRlbXA7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzhdOwogCWNoYXIgcmVzdWx0WzY0XTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAlzdHJ1Y3QgaGFzaF90ZXN0dmVjICpoYXNoX3R2OwogCXVuc2lnbmVkIGludCB0c2l6ZTsKKwlpbnQgcmV0OwogCiAJcHJpbnRrKCJcbnRlc3RpbmcgJXNcbiIsIGFsZ28pOwogCkBAIC0xMDUsMzAgKzEwNiw0MiBAQAogCiAJbWVtY3B5KHR2bWVtLCB0ZW1wbGF0ZSwgdHNpemUpOwogCWhhc2hfdHYgPSAodm9pZCAqKXR2bWVtOwotCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnbywgMCk7Ci0JaWYgKHRmbSA9PSBOVUxMKSB7Ci0JCXByaW50aygiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlc1xuIiwgYWxnbyk7CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaChhbGdvLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJpbnRrKCJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsIGFsZ28sCisJCSAgICAgICBQVFJfRVJSKHRmbSkpOwogCQlyZXR1cm47CiAJfQogCisJZGVzYy50Zm0gPSB0Zm07CisJZGVzYy5mbGFncyA9IDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgdGNvdW50OyBpKyspIHsKIAkJcHJpbnRrKCJ0ZXN0ICV1OlxuIiwgaSArIDEpOwogCQltZW1zZXQocmVzdWx0LCAwLCA2NCk7CiAKIAkJc2dfc2V0X2J1Zigmc2dbMF0sIGhhc2hfdHZbaV0ucGxhaW50ZXh0LCBoYXNoX3R2W2ldLnBzaXplKTsKIAotCQljcnlwdG9fZGlnZXN0X2luaXQodGZtKTsKLQkJaWYgKHRmbS0+Y3J0X3UuZGlnZXN0LmRpdF9zZXRrZXkpIHsKLQkJCWNyeXB0b19kaWdlc3Rfc2V0a2V5KHRmbSwgaGFzaF90dltpXS5rZXksCi0JCQkJCSAgICAgaGFzaF90dltpXS5rc2l6ZSk7CisJCWlmIChoYXNoX3R2W2ldLmtzaXplKSB7CisJCQlyZXQgPSBjcnlwdG9faGFzaF9zZXRrZXkodGZtLCBoYXNoX3R2W2ldLmtleSwKKwkJCQkJCSBoYXNoX3R2W2ldLmtzaXplKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlwcmludGsoInNldGtleSgpIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CiAJCX0KLQkJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCBzZywgMSk7Ci0JCWNyeXB0b19kaWdlc3RfZmluYWwodGZtLCByZXN1bHQpOwogCi0JCWhleGR1bXAocmVzdWx0LCBjcnlwdG9fdGZtX2FsZ19kaWdlc3RzaXplKHRmbSkpOworCQlyZXQgPSBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnLCBoYXNoX3R2W2ldLnBzaXplLCByZXN1bHQpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoImRpZ2VzdCAoKSBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQloZXhkdW1wKHJlc3VsdCwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pKTsKIAkJcHJpbnRrKCIlc1xuIiwKIAkJICAgICAgIG1lbWNtcChyZXN1bHQsIGhhc2hfdHZbaV0uZGlnZXN0LAotCQkJICAgICAgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pKSA/CisJCQkgICAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSkpID8KIAkJICAgICAgICJmYWlsIiA6ICJwYXNzIik7CiAJfQogCkBAIC0xNTQsMTI3ICsxNjcsNTYgQEAKIAkJCQkJICAgIGhhc2hfdHZbaV0udGFwW2tdKTsKIAkJCX0KIAotCQkJY3J5cHRvX2RpZ2VzdF9kaWdlc3QodGZtLCBzZywgaGFzaF90dltpXS5ucCwgcmVzdWx0KTsKKwkJCWlmIChoYXNoX3R2W2ldLmtzaXplKSB7CisJCQkJcmV0ID0gY3J5cHRvX2hhc2hfc2V0a2V5KHRmbSwgaGFzaF90dltpXS5rZXksCisJCQkJCQkJIGhhc2hfdHZbaV0ua3NpemUpOwogCi0JCQloZXhkdW1wKHJlc3VsdCwgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pKTsKLQkJCXByaW50aygiJXNcbiIsCi0JCQkgICAgICAgbWVtY21wKHJlc3VsdCwgaGFzaF90dltpXS5kaWdlc3QsCi0JCQkJICAgICAgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pKSA/Ci0JCQkgICAgICAgImZhaWwiIDogInBhc3MiKTsKLQkJfQotCX0KLQotCWNyeXB0b19mcmVlX3RmbSh0Zm0pOwotfQotCi0KLSNpZmRlZiBDT05GSUdfQ1JZUFRPX0hNQUMKLQotc3RhdGljIHZvaWQgdGVzdF9obWFjKGNoYXIgKmFsZ28sIHN0cnVjdCBobWFjX3Rlc3R2ZWMgKnRlbXBsYXRlLAotCQkgICAgICB1bnNpZ25lZCBpbnQgdGNvdW50KQotewotCXVuc2lnbmVkIGludCBpLCBqLCBrLCB0ZW1wOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1s4XTsKLQljaGFyIHJlc3VsdFs2NF07Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKLQlzdHJ1Y3QgaG1hY190ZXN0dmVjICpobWFjX3R2OwotCXVuc2lnbmVkIGludCB0c2l6ZSwga2xlbjsKLQotCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnbywgMCk7Ci0JaWYgKHRmbSA9PSBOVUxMKSB7Ci0JCXByaW50aygiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlc1xuIiwgYWxnbyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGsoIlxudGVzdGluZyBobWFjXyVzXG4iLCBhbGdvKTsKLQotCXRzaXplID0gc2l6ZW9mKHN0cnVjdCBobWFjX3Rlc3R2ZWMpOwotCXRzaXplICo9IHRjb3VudDsKLQlpZiAodHNpemUgPiBUVk1FTVNJWkUpIHsKLQkJcHJpbnRrKCJ0ZW1wbGF0ZSAoJXUpIHRvbyBiaWcgZm9yIHR2bWVtICgldSlcbiIsIHRzaXplLAotCQkgICAgICAgVFZNRU1TSVpFKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbWVtY3B5KHR2bWVtLCB0ZW1wbGF0ZSwgdHNpemUpOwotCWhtYWNfdHYgPSAodm9pZCAqKXR2bWVtOwotCi0JZm9yIChpID0gMDsgaSA8IHRjb3VudDsgaSsrKSB7Ci0JCXByaW50aygidGVzdCAldTpcbiIsIGkgKyAxKTsKLQkJbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mIChyZXN1bHQpKTsKLQotCQlrbGVuID0gaG1hY190dltpXS5rc2l6ZTsKLQkJc2dfc2V0X2J1Zigmc2dbMF0sIGhtYWNfdHZbaV0ucGxhaW50ZXh0LCBobWFjX3R2W2ldLnBzaXplKTsKLQotCQljcnlwdG9faG1hYyh0Zm0sIGhtYWNfdHZbaV0ua2V5LCAma2xlbiwgc2csIDEsIHJlc3VsdCk7Ci0KLQkJaGV4ZHVtcChyZXN1bHQsIGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUodGZtKSk7Ci0JCXByaW50aygiJXNcbiIsCi0JCSAgICAgICBtZW1jbXAocmVzdWx0LCBobWFjX3R2W2ldLmRpZ2VzdCwKLQkJCSAgICAgIGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUodGZtKSkgPyAiZmFpbCIgOgotCQkgICAgICAgInBhc3MiKTsKLQl9Ci0KLQlwcmludGsoIlxudGVzdGluZyBobWFjXyVzIGFjcm9zcyBwYWdlc1xuIiwgYWxnbyk7Ci0KLQltZW1zZXQoeGJ1ZiwgMCwgWEJVRlNJWkUpOwotCi0JaiA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHRjb3VudDsgaSsrKSB7Ci0JCWlmIChobWFjX3R2W2ldLm5wKSB7Ci0JCQlqKys7Ci0JCQlwcmludGsoInRlc3QgJXU6XG4iLGopOwotCQkJbWVtc2V0KHJlc3VsdCwgMCwgNjQpOwotCi0JCQl0ZW1wID0gMDsKLQkJCWtsZW4gPSBobWFjX3R2W2ldLmtzaXplOwotCQkJZm9yIChrID0gMDsgayA8IGhtYWNfdHZbaV0ubnA7IGsrKykgewotCQkJCW1lbWNweSgmeGJ1ZltJRFhba11dLAotCQkJCSAgICAgICBobWFjX3R2W2ldLnBsYWludGV4dCArIHRlbXAsCi0JCQkJICAgICAgIGhtYWNfdHZbaV0udGFwW2tdKTsKLQkJCQl0ZW1wICs9IGhtYWNfdHZbaV0udGFwW2tdOwotCQkJCXNnX3NldF9idWYoJnNnW2tdLCAmeGJ1ZltJRFhba11dLAotCQkJCQkgICAgaG1hY190dltpXS50YXBba10pOworCQkJCWlmIChyZXQpIHsKKwkJCQkJcHJpbnRrKCJzZXRrZXkoKSBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CiAJCQl9CiAKLQkJCWNyeXB0b19obWFjKHRmbSwgaG1hY190dltpXS5rZXksICZrbGVuLCBzZywKLQkJCQkgICAgaG1hY190dltpXS5ucCwgcmVzdWx0KTsKLQkJCWhleGR1bXAocmVzdWx0LCBjcnlwdG9fdGZtX2FsZ19kaWdlc3RzaXplKHRmbSkpOworCQkJcmV0ID0gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgaGFzaF90dltpXS5wc2l6ZSwKKwkJCQkJCSByZXN1bHQpOworCQkJaWYgKHJldCkgeworCQkJCXByaW50aygiZGlnZXN0ICgpIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7CisJCQkJZ290byBvdXQ7CisJCQl9CiAKKwkJCWhleGR1bXAocmVzdWx0LCBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSkpOwogCQkJcHJpbnRrKCIlc1xuIiwKLQkJCSAgICAgICBtZW1jbXAocmVzdWx0LCBobWFjX3R2W2ldLmRpZ2VzdCwKLQkJCQkgICAgICBjcnlwdG9fdGZtX2FsZ19kaWdlc3RzaXplKHRmbSkpID8KKwkJCSAgICAgICBtZW1jbXAocmVzdWx0LCBoYXNoX3R2W2ldLmRpZ2VzdCwKKwkJCQkgICAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSkpID8KIAkJCSAgICAgICAiZmFpbCIgOiAicGFzcyIpOwogCQl9CiAJfQorCiBvdXQ6Ci0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOwogfQogCi0jZW5kaWYJLyogQ09ORklHX0NSWVBUT19ITUFDICovCi0KLXN0YXRpYyB2b2lkIHRlc3RfY2lwaGVyKGNoYXIgKmFsZ28sIGludCBtb2RlLCBpbnQgZW5jLAorc3RhdGljIHZvaWQgdGVzdF9jaXBoZXIoY2hhciAqYWxnbywgaW50IGVuYywKIAkJCXN0cnVjdCBjaXBoZXJfdGVzdHZlYyAqdGVtcGxhdGUsIHVuc2lnbmVkIGludCB0Y291bnQpCiB7CiAJdW5zaWduZWQgaW50IHJldCwgaSwgaiwgaywgdGVtcDsKIAl1bnNpZ25lZCBpbnQgdHNpemU7CisJdW5zaWduZWQgaW50IGl2X2xlbjsKKwl1bnNpZ25lZCBpbnQgbGVuOwogCWNoYXIgKnE7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtOwogCWNoYXIgKmtleTsKIAlzdHJ1Y3QgY2lwaGVyX3Rlc3R2ZWMgKmNpcGhlcl90djsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbOF07Ci0JY29uc3QgY2hhciAqZSwgKm07CisJY29uc3QgY2hhciAqZTsKIAogCWlmIChlbmMgPT0gRU5DUllQVCkKIAkgICAgICAgIGUgPSAiZW5jcnlwdGlvbiI7CiAJZWxzZQogCQllID0gImRlY3J5cHRpb24iOwotCWlmIChtb2RlID09IE1PREVfRUNCKQotCQltID0gIkVDQiI7Ci0JZWxzZQotCQltID0gIkNCQyI7CiAKLQlwcmludGsoIlxudGVzdGluZyAlcyAlcyAlc1xuIiwgYWxnbywgbSwgZSk7CisJcHJpbnRrKCJcbnRlc3RpbmcgJXMgJXNcbiIsIGFsZ28sIGUpOwogCiAJdHNpemUgPSBzaXplb2YgKHN0cnVjdCBjaXBoZXJfdGVzdHZlYyk7CiAJdHNpemUgKj0gdGNvdW50OwpAQCAtMjg4LDE1ICsyMzAsMTUgQEAKIAltZW1jcHkodHZtZW0sIHRlbXBsYXRlLCB0c2l6ZSk7CiAJY2lwaGVyX3R2ID0gKHZvaWQgKil0dm1lbTsKIAotCWlmIChtb2RlKQotCQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ28sIDApOwotCWVsc2UKLQkJdGZtID0gY3J5cHRvX2FsbG9jX3RmbShhbGdvLCBDUllQVE9fVEZNX01PREVfQ0JDKTsKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKGFsZ28sIDAsIENSWVBUT19BTEdfQVNZTkMpOwogCi0JaWYgKHRmbSA9PSBOVUxMKSB7Ci0JCXByaW50aygiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlcyAlc1xuIiwgYWxnbywgbSk7CisJaWYgKElTX0VSUih0Zm0pKSB7CisJCXByaW50aygiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciAlczogJWxkXG4iLCBhbGdvLAorCQkgICAgICAgUFRSX0VSUih0Zm0pKTsKIAkJcmV0dXJuOwogCX0KKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmZsYWdzID0gMDsKIAogCWogPSAwOwogCWZvciAoaSA9IDA7IGkgPCB0Y291bnQ7IGkrKykgewpAQCAtMzA1LDE0ICsyNDcsMTcgQEAKIAkJCXByaW50aygidGVzdCAldSAoJWQgYml0IGtleSk6XG4iLAogCQkJaiwgY2lwaGVyX3R2W2ldLmtsZW4gKiA4KTsKIAotCQkJdGZtLT5jcnRfZmxhZ3MgPSAwOworCQkJY3J5cHRvX2Jsa2NpcGhlcl9jbGVhcl9mbGFncyh0Zm0sIH4wKTsKIAkJCWlmIChjaXBoZXJfdHZbaV0ud2spCi0JCQkJdGZtLT5jcnRfZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVk7CisJCQkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRfZmxhZ3MoCisJCQkJCXRmbSwgQ1JZUFRPX1RGTV9SRVFfV0VBS19LRVkpOwogCQkJa2V5ID0gY2lwaGVyX3R2W2ldLmtleTsKIAotCQkJcmV0ID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIGNpcGhlcl90dltpXS5rbGVuKTsKKwkJCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbSwga2V5LAorCQkJCQkJICAgICAgY2lwaGVyX3R2W2ldLmtsZW4pOwogCQkJaWYgKHJldCkgewotCQkJCXByaW50aygic2V0a2V5KCkgZmFpbGVkIGZsYWdzPSV4XG4iLCB0Zm0tPmNydF9mbGFncyk7CisJCQkJcHJpbnRrKCJzZXRrZXkoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsCisJCQkJICAgICAgIGNyeXB0b19ibGtjaXBoZXJfZ2V0X2ZsYWdzKHRmbSkpOwogCiAJCQkJaWYgKCFjaXBoZXJfdHZbaV0uZmFpbCkKIAkJCQkJZ290byBvdXQ7CkBAIC0zMjEsMTkgKzI2NiwxOSBAQAogCQkJc2dfc2V0X2J1Zigmc2dbMF0sIGNpcGhlcl90dltpXS5pbnB1dCwKIAkJCQkgICBjaXBoZXJfdHZbaV0uaWxlbik7CiAKLQkJCWlmICghbW9kZSkgewotCQkJCWNyeXB0b19jaXBoZXJfc2V0X2l2KHRmbSwgY2lwaGVyX3R2W2ldLml2LAotCQkJCQljcnlwdG9fdGZtX2FsZ19pdnNpemUodGZtKSk7Ci0JCQl9CisJCQlpdl9sZW4gPSBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pOworCQkJaWYgKGl2X2xlbikKKwkJCQljcnlwdG9fYmxrY2lwaGVyX3NldF9pdih0Zm0sIGNpcGhlcl90dltpXS5pdiwKKwkJCQkJCQlpdl9sZW4pOwogCi0JCQlpZiAoZW5jKQotCQkJCXJldCA9IGNyeXB0b19jaXBoZXJfZW5jcnlwdCh0Zm0sIHNnLCBzZywgY2lwaGVyX3R2W2ldLmlsZW4pOwotCQkJZWxzZQotCQkJCXJldCA9IGNyeXB0b19jaXBoZXJfZGVjcnlwdCh0Zm0sIHNnLCBzZywgY2lwaGVyX3R2W2ldLmlsZW4pOwotCisJCQlsZW4gPSBjaXBoZXJfdHZbaV0uaWxlbjsKKwkJCXJldCA9IGVuYyA/CisJCQkJY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KCZkZXNjLCBzZywgc2csIGxlbikgOgorCQkJCWNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgc2csIHNnLCBsZW4pOwogCiAJCQlpZiAocmV0KSB7Ci0JCQkJcHJpbnRrKCIlcyAoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsIGUsIHRmbS0+Y3J0X2ZsYWdzKTsKKwkJCQlwcmludGsoIiVzICgpIGZhaWxlZCBmbGFncz0leFxuIiwgZSwKKwkJCQkgICAgICAgZGVzYy5mbGFncyk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKQEAgLTM0Niw3ICsyOTEsNyBAQAogCQl9CiAJfQogCi0JcHJpbnRrKCJcbnRlc3RpbmcgJXMgJXMgJXMgYWNyb3NzIHBhZ2VzIChjaHVua2luZylcbiIsIGFsZ28sIG0sIGUpOworCXByaW50aygiXG50ZXN0aW5nICVzICVzIGFjcm9zcyBwYWdlcyAoY2h1bmtpbmcpXG4iLCBhbGdvLCBlKTsKIAltZW1zZXQoeGJ1ZiwgMCwgWEJVRlNJWkUpOwogCiAJaiA9IDA7CkBAIC0zNTYsMTQgKzMwMSwxNyBAQAogCQkJcHJpbnRrKCJ0ZXN0ICV1ICglZCBiaXQga2V5KTpcbiIsCiAJCQlqLCBjaXBoZXJfdHZbaV0ua2xlbiAqIDgpOwogCi0JCQl0Zm0tPmNydF9mbGFncyA9IDA7CisJCQljcnlwdG9fYmxrY2lwaGVyX2NsZWFyX2ZsYWdzKHRmbSwgfjApOwogCQkJaWYgKGNpcGhlcl90dltpXS53aykKLQkJCQl0Zm0tPmNydF9mbGFncyB8PSBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWTsKKwkJCQljcnlwdG9fYmxrY2lwaGVyX3NldF9mbGFncygKKwkJCQkJdGZtLCBDUllQVE9fVEZNX1JFUV9XRUFLX0tFWSk7CiAJCQlrZXkgPSBjaXBoZXJfdHZbaV0ua2V5OwogCi0JCQlyZXQgPSBjcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIGtleSwgY2lwaGVyX3R2W2ldLmtsZW4pOworCQkJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGZtLCBrZXksCisJCQkJCQkgICAgICBjaXBoZXJfdHZbaV0ua2xlbik7CiAJCQlpZiAocmV0KSB7Ci0JCQkJcHJpbnRrKCJzZXRrZXkoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsIHRmbS0+Y3J0X2ZsYWdzKTsKKwkJCQlwcmludGsoInNldGtleSgpIGZhaWxlZCBmbGFncz0leFxuIiwKKwkJCQkgICAgICAgY3J5cHRvX2Jsa2NpcGhlcl9nZXRfZmxhZ3ModGZtKSk7CiAKIAkJCQlpZiAoIWNpcGhlcl90dltpXS5mYWlsKQogCQkJCQlnb3RvIG91dDsKQEAgLTM3OSwxOCArMzI3LDE5IEBACiAJCQkJCSAgIGNpcGhlcl90dltpXS50YXBba10pOwogCQkJfQogCi0JCQlpZiAoIW1vZGUpIHsKLQkJCQljcnlwdG9fY2lwaGVyX3NldF9pdih0Zm0sIGNpcGhlcl90dltpXS5pdiwKLQkJCQkJCWNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pKTsKLQkJCX0KKwkJCWl2X2xlbiA9IGNyeXB0b19ibGtjaXBoZXJfaXZzaXplKHRmbSk7CisJCQlpZiAoaXZfbGVuKQorCQkJCWNyeXB0b19ibGtjaXBoZXJfc2V0X2l2KHRmbSwgY2lwaGVyX3R2W2ldLml2LAorCQkJCQkJCWl2X2xlbik7CiAKLQkJCWlmIChlbmMpCi0JCQkJcmV0ID0gY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgc2csIHNnLCBjaXBoZXJfdHZbaV0uaWxlbik7Ci0JCQllbHNlCi0JCQkJcmV0ID0gY3J5cHRvX2NpcGhlcl9kZWNyeXB0KHRmbSwgc2csIHNnLCBjaXBoZXJfdHZbaV0uaWxlbik7CisJCQlsZW4gPSBjaXBoZXJfdHZbaV0uaWxlbjsKKwkJCXJldCA9IGVuYyA/CisJCQkJY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KCZkZXNjLCBzZywgc2csIGxlbikgOgorCQkJCWNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgc2csIHNnLCBsZW4pOwogCiAJCQlpZiAocmV0KSB7Ci0JCQkJcHJpbnRrKCIlcyAoKSBmYWlsZWQgZmxhZ3M9JXhcbiIsIGUsIHRmbS0+Y3J0X2ZsYWdzKTsKKwkJCQlwcmludGsoIiVzICgpIGZhaWxlZCBmbGFncz0leFxuIiwgZSwKKwkJCQkgICAgICAgZGVzYy5mbGFncyk7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKQEAgLTQwOSwxMCArMzU4LDEwIEBACiAJfQogCiBvdXQ6Ci0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7CiB9CiAKLXN0YXRpYyBpbnQgdGVzdF9jaXBoZXJfamlmZmllcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBpbnQgZW5jLCBjaGFyICpwLAorc3RhdGljIGludCB0ZXN0X2NpcGhlcl9qaWZmaWVzKHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywgaW50IGVuYywgY2hhciAqcCwKIAkJCSAgICAgICBpbnQgYmxlbiwgaW50IHNlYykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CkBAIC00MjUsOSArMzc0LDkgQEAKIAlmb3IgKHN0YXJ0ID0gamlmZmllcywgZW5kID0gc3RhcnQgKyBzZWMgKiBIWiwgYmNvdW50ID0gMDsKIAkgICAgIHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZCk7IGJjb3VudCsrKSB7CiAJCWlmIChlbmMpCi0JCQlyZXQgPSBjcnlwdG9fY2lwaGVyX2VuY3J5cHQodGZtLCBzZywgc2csIGJsZW4pOworCQkJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KGRlc2MsIHNnLCBzZywgYmxlbik7CiAJCWVsc2UKLQkJCXJldCA9IGNyeXB0b19jaXBoZXJfZGVjcnlwdCh0Zm0sIHNnLCBzZywgYmxlbik7CisJCQlyZXQgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoZGVzYywgc2csIHNnLCBibGVuKTsKIAogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKQEAgLTQzOCw3ICszODcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlc3RfY2lwaGVyX2N5Y2xlcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBpbnQgZW5jLCBjaGFyICpwLAorc3RhdGljIGludCB0ZXN0X2NpcGhlcl9jeWNsZXMoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLCBpbnQgZW5jLCBjaGFyICpwLAogCQkJICAgICAgaW50IGJsZW4pCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOwpAQCAtNDU0LDkgKzQwMyw5IEBACiAJLyogV2FybS11cCBydW4uICovCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlpZiAoZW5jKQotCQkJcmV0ID0gY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgc2csIHNnLCBibGVuKTsKKwkJCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdChkZXNjLCBzZywgc2csIGJsZW4pOwogCQllbHNlCi0JCQlyZXQgPSBjcnlwdG9fY2lwaGVyX2RlY3J5cHQodGZtLCBzZywgc2csIGJsZW4pOworCQkJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KGRlc2MsIHNnLCBzZywgYmxlbik7CiAKIAkJaWYgKHJldCkKIAkJCWdvdG8gb3V0OwpAQCAtNDY4LDkgKzQxNyw5IEBACiAKIAkJc3RhcnQgPSBnZXRfY3ljbGVzKCk7CiAJCWlmIChlbmMpCi0JCQlyZXQgPSBjcnlwdG9fY2lwaGVyX2VuY3J5cHQodGZtLCBzZywgc2csIGJsZW4pOworCQkJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KGRlc2MsIHNnLCBzZywgYmxlbik7CiAJCWVsc2UKLQkJCXJldCA9IGNyeXB0b19jaXBoZXJfZGVjcnlwdCh0Zm0sIHNnLCBzZywgYmxlbik7CisJCQlyZXQgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoZGVzYywgc2csIHNnLCBibGVuKTsKIAkJZW5kID0gZ2V0X2N5Y2xlcygpOwogCiAJCWlmIChyZXQpCkBAIC00OTAsMzUgKzQzOSwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfY2lwaGVyX3NwZWVkKGNoYXIgKmFsZ28sIGludCBtb2RlLCBpbnQgZW5jLCB1bnNpZ25lZCBpbnQgc2VjLAorc3RhdGljIHZvaWQgdGVzdF9jaXBoZXJfc3BlZWQoY2hhciAqYWxnbywgaW50IGVuYywgdW5zaWduZWQgaW50IHNlYywKIAkJCSAgICAgIHN0cnVjdCBjaXBoZXJfdGVzdHZlYyAqdGVtcGxhdGUsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgdGNvdW50LCBzdHJ1Y3QgY2lwaGVyX3NwZWVkICpzcGVlZCkKIHsKIAl1bnNpZ25lZCBpbnQgcmV0LCBpLCBqLCBpdl9sZW47CiAJdW5zaWduZWQgY2hhciAqa2V5LCAqcCwgaXZbMTI4XTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOwotCWNvbnN0IGNoYXIgKmUsICptOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm07CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CisJY29uc3QgY2hhciAqZTsKIAogCWlmIChlbmMgPT0gRU5DUllQVCkKIAkgICAgICAgIGUgPSAiZW5jcnlwdGlvbiI7CiAJZWxzZQogCQllID0gImRlY3J5cHRpb24iOwotCWlmIChtb2RlID09IE1PREVfRUNCKQotCQltID0gIkVDQiI7Ci0JZWxzZQotCQltID0gIkNCQyI7CiAKLQlwcmludGsoIlxudGVzdGluZyBzcGVlZCBvZiAlcyAlcyAlc1xuIiwgYWxnbywgbSwgZSk7CisJcHJpbnRrKCJcbnRlc3Rpbmcgc3BlZWQgb2YgJXMgJXNcbiIsIGFsZ28sIGUpOwogCi0JaWYgKG1vZGUpCi0JCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnbywgMCk7Ci0JZWxzZQotCQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ28sIENSWVBUT19URk1fTU9ERV9DQkMpOworCXRmbSA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoYWxnbywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAKLQlpZiAodGZtID09IE5VTEwpIHsKLQkJcHJpbnRrKCJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzICVzXG4iLCBhbGdvLCBtKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJpbnRrKCJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsIGFsZ28sCisJCSAgICAgICBQVFJfRVJSKHRmbSkpOwogCQlyZXR1cm47CiAJfQorCWRlc2MudGZtID0gdGZtOworCWRlc2MuZmxhZ3MgPSAwOwogCiAJZm9yIChpID0gMDsgc3BlZWRbaV0ua2xlbiAhPSAwOyBpKyspIHsKIAkJaWYgKChzcGVlZFtpXS5ibGVuICsgc3BlZWRbaV0ua2xlbikgPiBUVk1FTVNJWkUpIHsKQEAgLTU0MiwxMjUgKzQ4OCwyMzEgQEAKIAkJfQogCQlwID0gKHVuc2lnbmVkIGNoYXIgKil0dm1lbSArIHNwZWVkW2ldLmtsZW47CiAKLQkJcmV0ID0gY3J5cHRvX2NpcGhlcl9zZXRrZXkodGZtLCBrZXksIHNwZWVkW2ldLmtsZW4pOworCQlyZXQgPSBjcnlwdG9fYmxrY2lwaGVyX3NldGtleSh0Zm0sIGtleSwgc3BlZWRbaV0ua2xlbik7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50aygic2V0a2V5KCkgZmFpbGVkIGZsYWdzPSV4XG4iLCB0Zm0tPmNydF9mbGFncyk7CisJCQlwcmludGsoInNldGtleSgpIGZhaWxlZCBmbGFncz0leFxuIiwKKwkJCSAgICAgICBjcnlwdG9fYmxrY2lwaGVyX2dldF9mbGFncyh0Zm0pKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJaWYgKCFtb2RlKSB7Ci0JCQlpdl9sZW4gPSBjcnlwdG9fdGZtX2FsZ19pdnNpemUodGZtKTsKKwkJaXZfbGVuID0gY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKTsKKwkJaWYgKGl2X2xlbikgewogCQkJbWVtc2V0KCZpdiwgMHhmZiwgaXZfbGVuKTsKLQkJCWNyeXB0b19jaXBoZXJfc2V0X2l2KHRmbSwgaXYsIGl2X2xlbik7CisJCQljcnlwdG9fYmxrY2lwaGVyX3NldF9pdih0Zm0sIGl2LCBpdl9sZW4pOwogCQl9CiAKIAkJaWYgKHNlYykKLQkJCXJldCA9IHRlc3RfY2lwaGVyX2ppZmZpZXModGZtLCBlbmMsIHAsIHNwZWVkW2ldLmJsZW4sCisJCQlyZXQgPSB0ZXN0X2NpcGhlcl9qaWZmaWVzKCZkZXNjLCBlbmMsIHAsIHNwZWVkW2ldLmJsZW4sCiAJCQkJCQkgIHNlYyk7CiAJCWVsc2UKLQkJCXJldCA9IHRlc3RfY2lwaGVyX2N5Y2xlcyh0Zm0sIGVuYywgcCwgc3BlZWRbaV0uYmxlbik7CisJCQlyZXQgPSB0ZXN0X2NpcGhlcl9jeWNsZXMoJmRlc2MsIGVuYywgcCwgc3BlZWRbaV0uYmxlbik7CiAKIAkJaWYgKHJldCkgewotCQkJcHJpbnRrKCIlcygpIGZhaWxlZCBmbGFncz0leFxuIiwgZSwgdGZtLT5jcnRfZmxhZ3MpOworCQkJcHJpbnRrKCIlcygpIGZhaWxlZCBmbGFncz0leFxuIiwgZSwgZGVzYy5mbGFncyk7CiAJCQlicmVhazsKIAkJfQogCX0KIAogb3V0OgotCWNyeXB0b19mcmVlX3RmbSh0Zm0pOworCWNyeXB0b19mcmVlX2Jsa2NpcGhlcih0Zm0pOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2RpZ2VzdF9qaWZmaWVzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNoYXIgKnAsIGludCBibGVuLAotCQkJCWludCBwbGVuLCBjaGFyICpvdXQsIGludCBzZWMpCitzdGF0aWMgaW50IHRlc3RfaGFzaF9qaWZmaWVzX2RpZ2VzdChzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjLCBjaGFyICpwLCBpbnQgYmxlbiwKKwkJCQkgICAgY2hhciAqb3V0LCBpbnQgc2VjKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Ci0JaW50IGJjb3VudCwgcGNvdW50OworCWludCBiY291bnQ7CisJaW50IHJldDsKIAogCWZvciAoc3RhcnQgPSBqaWZmaWVzLCBlbmQgPSBzdGFydCArIHNlYyAqIEhaLCBiY291bnQgPSAwOwogCSAgICAgdGltZV9iZWZvcmUoamlmZmllcywgZW5kKTsgYmNvdW50KyspIHsKLQkJY3J5cHRvX2RpZ2VzdF9pbml0KHRmbSk7Ci0JCWZvciAocGNvdW50ID0gMDsgcGNvdW50IDwgYmxlbjsgcGNvdW50ICs9IHBsZW4pIHsKLQkJCXNnX3NldF9idWYoc2csIHAgKyBwY291bnQsIHBsZW4pOwotCQkJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCBzZywgMSk7Ci0JCX0KLQkJLyogd2UgYXNzdW1lIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBpbiAnb3V0JyBmb3IgdGhlIHJlc3VsdCAqLwotCQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgb3V0KTsKKwkJc2dfc2V0X2J1ZihzZywgcCwgYmxlbik7CisJCXJldCA9IGNyeXB0b19oYXNoX2RpZ2VzdChkZXNjLCBzZywgYmxlbiwgb3V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CiAJfQogCiAJcHJpbnRrKCIlNnUgb3BlcnMvc2VjLCAlOWx1IGJ5dGVzL3NlY1xuIiwKIAkgICAgICAgYmNvdW50IC8gc2VjLCAoKGxvbmcpYmNvdW50ICogYmxlbikgLyBzZWMpOwogCi0JcmV0dXJuOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0ZXN0X2RpZ2VzdF9jeWNsZXMoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY2hhciAqcCwgaW50IGJsZW4sCi0JCQkgICAgICAgaW50IHBsZW4sIGNoYXIgKm91dCkKK3N0YXRpYyBpbnQgdGVzdF9oYXNoX2ppZmZpZXMoc3RydWN0IGhhc2hfZGVzYyAqZGVzYywgY2hhciAqcCwgaW50IGJsZW4sCisJCQkgICAgIGludCBwbGVuLCBjaGFyICpvdXQsIGludCBzZWMpCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKKwlpbnQgYmNvdW50LCBwY291bnQ7CisJaW50IHJldDsKKworCWlmIChwbGVuID09IGJsZW4pCisJCXJldHVybiB0ZXN0X2hhc2hfamlmZmllc19kaWdlc3QoZGVzYywgcCwgYmxlbiwgb3V0LCBzZWMpOworCisJZm9yIChzdGFydCA9IGppZmZpZXMsIGVuZCA9IHN0YXJ0ICsgc2VjICogSFosIGJjb3VudCA9IDA7CisJICAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBlbmQpOyBiY291bnQrKykgeworCQlyZXQgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwkJZm9yIChwY291bnQgPSAwOyBwY291bnQgPCBibGVuOyBwY291bnQgKz0gcGxlbikgeworCQkJc2dfc2V0X2J1ZihzZywgcCArIHBjb3VudCwgcGxlbik7CisJCQlyZXQgPSBjcnlwdG9faGFzaF91cGRhdGUoZGVzYywgc2csIHBsZW4pOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQl9CisJCS8qIHdlIGFzc3VtZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgaW4gJ291dCcgZm9yIHRoZSByZXN1bHQgKi8KKwkJcmV0ID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgb3V0KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcHJpbnRrKCIlNnUgb3BlcnMvc2VjLCAlOWx1IGJ5dGVzL3NlY1xuIiwKKwkgICAgICAgYmNvdW50IC8gc2VjLCAoKGxvbmcpYmNvdW50ICogYmxlbikgLyBzZWMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9oYXNoX2N5Y2xlc19kaWdlc3Qoc3RydWN0IGhhc2hfZGVzYyAqZGVzYywgY2hhciAqcCwgaW50IGJsZW4sCisJCQkJICAgY2hhciAqb3V0KQogewogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAl1bnNpZ25lZCBsb25nIGN5Y2xlcyA9IDA7Ci0JaW50IGksIHBjb3VudDsKKwlpbnQgaTsKKwlpbnQgcmV0OwogCiAJbG9jYWxfYmhfZGlzYWJsZSgpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKIAkvKiBXYXJtLXVwIHJ1bi4gKi8KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7Ci0JCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwotCQlmb3IgKHBjb3VudCA9IDA7IHBjb3VudCA8IGJsZW47IHBjb3VudCArPSBwbGVuKSB7Ci0JCQlzZ19zZXRfYnVmKHNnLCBwICsgcGNvdW50LCBwbGVuKTsKLQkJCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgc2csIDEpOwotCQl9Ci0JCWNyeXB0b19kaWdlc3RfZmluYWwodGZtLCBvdXQpOworCQlzZ19zZXRfYnVmKHNnLCBwLCBibGVuKTsKKwkJcmV0ID0gY3J5cHRvX2hhc2hfZGlnZXN0KGRlc2MsIHNnLCBibGVuLCBvdXQpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CiAJfQogCiAJLyogVGhlIHJlYWwgdGhpbmcuICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewogCQljeWNsZXNfdCBzdGFydCwgZW5kOwogCi0JCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwotCiAJCXN0YXJ0ID0gZ2V0X2N5Y2xlcygpOwogCi0JCWZvciAocGNvdW50ID0gMDsgcGNvdW50IDwgYmxlbjsgcGNvdW50ICs9IHBsZW4pIHsKLQkJCXNnX3NldF9idWYoc2csIHAgKyBwY291bnQsIHBsZW4pOwotCQkJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCBzZywgMSk7Ci0JCX0KLQkJY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIG91dCk7CisJCXNnX3NldF9idWYoc2csIHAsIGJsZW4pOworCQlyZXQgPSBjcnlwdG9faGFzaF9kaWdlc3QoZGVzYywgc2csIGJsZW4sIG91dCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKIAogCQllbmQgPSBnZXRfY3ljbGVzKCk7CiAKIAkJY3ljbGVzICs9IGVuZCAtIHN0YXJ0OwogCX0KIAorb3V0OgogCWxvY2FsX2lycV9lbmFibGUoKTsKIAlsb2NhbF9iaF9lbmFibGUoKTsKIAorCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAlwcmludGsoIiU2bHUgY3ljbGVzL29wZXJhdGlvbiwgJTRsdSBjeWNsZXMvYnl0ZVxuIiwKIAkgICAgICAgY3ljbGVzIC8gOCwgY3ljbGVzIC8gKDggKiBibGVuKSk7CiAKLQlyZXR1cm47CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfZGlnZXN0X3NwZWVkKGNoYXIgKmFsZ28sIHVuc2lnbmVkIGludCBzZWMsCi0JCQkgICAgICBzdHJ1Y3QgZGlnZXN0X3NwZWVkICpzcGVlZCkKK3N0YXRpYyBpbnQgdGVzdF9oYXNoX2N5Y2xlcyhzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjLCBjaGFyICpwLCBpbnQgYmxlbiwKKwkJCSAgICBpbnQgcGxlbiwgY2hhciAqb3V0KQogewotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzFdOworCXVuc2lnbmVkIGxvbmcgY3ljbGVzID0gMDsKKwlpbnQgaSwgcGNvdW50OworCWludCByZXQ7CisKKwlpZiAocGxlbiA9PSBibGVuKQorCQlyZXR1cm4gdGVzdF9oYXNoX2N5Y2xlc19kaWdlc3QoZGVzYywgcCwgYmxlbiwgb3V0KTsKKworCWxvY2FsX2JoX2Rpc2FibGUoKTsKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCisJLyogV2FybS11cCBydW4uICovCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyZXQgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWZvciAocGNvdW50ID0gMDsgcGNvdW50IDwgYmxlbjsgcGNvdW50ICs9IHBsZW4pIHsKKwkJCXNnX3NldF9idWYoc2csIHAgKyBwY291bnQsIHBsZW4pOworCQkJcmV0ID0gY3J5cHRvX2hhc2hfdXBkYXRlKGRlc2MsIHNnLCBwbGVuKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgb3V0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qIFRoZSByZWFsIHRoaW5nLiAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJY3ljbGVzX3Qgc3RhcnQsIGVuZDsKKworCQlzdGFydCA9IGdldF9jeWNsZXMoKTsKKworCQlyZXQgPSBjcnlwdG9faGFzaF9pbml0KGRlc2MpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJCWZvciAocGNvdW50ID0gMDsgcGNvdW50IDwgYmxlbjsgcGNvdW50ICs9IHBsZW4pIHsKKwkJCXNnX3NldF9idWYoc2csIHAgKyBwY291bnQsIHBsZW4pOworCQkJcmV0ID0gY3J5cHRvX2hhc2hfdXBkYXRlKGRlc2MsIHNnLCBwbGVuKTsKKwkJCWlmIChyZXQpCisJCQkJZ290byBvdXQ7CisJCX0KKwkJcmV0ID0gY3J5cHRvX2hhc2hfZmluYWwoZGVzYywgb3V0KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCisJCWVuZCA9IGdldF9jeWNsZXMoKTsKKworCQljeWNsZXMgKz0gZW5kIC0gc3RhcnQ7CisJfQorCitvdXQ6CisJbG9jYWxfaXJxX2VuYWJsZSgpOworCWxvY2FsX2JoX2VuYWJsZSgpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXByaW50aygiJTZsdSBjeWNsZXMvb3BlcmF0aW9uLCAlNGx1IGN5Y2xlcy9ieXRlXG4iLAorCSAgICAgICBjeWNsZXMgLyA4LCBjeWNsZXMgLyAoOCAqIGJsZW4pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X2hhc2hfc3BlZWQoY2hhciAqYWxnbywgdW5zaWduZWQgaW50IHNlYywKKwkJCSAgICAgIHN0cnVjdCBoYXNoX3NwZWVkICpzcGVlZCkKK3sKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbTsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CiAJY2hhciBvdXRwdXRbMTAyNF07CiAJaW50IGk7CisJaW50IHJldDsKIAogCXByaW50aygiXG50ZXN0aW5nIHNwZWVkIG9mICVzXG4iLCBhbGdvKTsKIAotCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oYWxnbywgMCk7CisJdGZtID0gY3J5cHRvX2FsbG9jX2hhc2goYWxnbywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CiAKLQlpZiAodGZtID09IE5VTEwpIHsKLQkJcHJpbnRrKCJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzXG4iLCBhbGdvKTsKKwlpZiAoSVNfRVJSKHRmbSkpIHsKKwkJcHJpbnRrKCJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yICVzOiAlbGRcbiIsIGFsZ28sCisJCSAgICAgICBQVFJfRVJSKHRmbSkpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUodGZtKSA+IHNpemVvZihvdXRwdXQpKSB7CisJZGVzYy50Zm0gPSB0Zm07CisJZGVzYy5mbGFncyA9IDA7CisKKwlpZiAoY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pID4gc2l6ZW9mKG91dHB1dCkpIHsKIAkJcHJpbnRrKCJkaWdlc3RzaXplKCV1KSA+IG91dHB1dGJ1ZmZlciglenUpXG4iLAotCQkgICAgICAgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pLCBzaXplb2Yob3V0cHV0KSk7CisJCSAgICAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSksIHNpemVvZihvdXRwdXQpKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC02NzcsMjAgKzcyOSwyNyBAQAogCQltZW1zZXQodHZtZW0sIDB4ZmYsIHNwZWVkW2ldLmJsZW4pOwogCiAJCWlmIChzZWMpCi0JCQl0ZXN0X2RpZ2VzdF9qaWZmaWVzKHRmbSwgdHZtZW0sIHNwZWVkW2ldLmJsZW4sIHNwZWVkW2ldLnBsZW4sIG91dHB1dCwgc2VjKTsKKwkJCXJldCA9IHRlc3RfaGFzaF9qaWZmaWVzKCZkZXNjLCB0dm1lbSwgc3BlZWRbaV0uYmxlbiwKKwkJCQkJCXNwZWVkW2ldLnBsZW4sIG91dHB1dCwgc2VjKTsKIAkJZWxzZQotCQkJdGVzdF9kaWdlc3RfY3ljbGVzKHRmbSwgdHZtZW0sIHNwZWVkW2ldLmJsZW4sIHNwZWVkW2ldLnBsZW4sIG91dHB1dCk7CisJCQlyZXQgPSB0ZXN0X2hhc2hfY3ljbGVzKCZkZXNjLCB0dm1lbSwgc3BlZWRbaV0uYmxlbiwKKwkJCQkJICAgICAgIHNwZWVkW2ldLnBsZW4sIG91dHB1dCk7CisKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKCJoYXNoaW5nIGZhaWxlZCByZXQ9JWRcbiIsIHJldCk7CisJCQlicmVhazsKKwkJfQogCX0KIAogb3V0OgotCWNyeXB0b19mcmVlX3RmbSh0Zm0pOworCWNyeXB0b19mcmVlX2hhc2godGZtKTsKIH0KIAogc3RhdGljIHZvaWQgdGVzdF9kZWZsYXRlKHZvaWQpCiB7CiAJdW5zaWduZWQgaW50IGk7CiAJY2hhciByZXN1bHRbQ09NUF9CVUZfU0laRV07Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbTsKIAlzdHJ1Y3QgY29tcF90ZXN0dmVjICp0djsKIAl1bnNpZ25lZCBpbnQgdHNpemU7CiAKQEAgLTc2MiwxMDUgKzgyMSw3IEBACiAJCSAgICAgICBpbGVuLCBkbGVuKTsKIAl9CiBvdXQ6Ci0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHRlc3RfY3JjMzJjKHZvaWQpCi17Ci0jZGVmaW5lIE5VTVZFQyA2Ci0jZGVmaW5lIFZFQ1NJWkUgNDAKLQotCWludCBpLCBqLCBwYXNzOwotCXUzMiBjcmM7Ci0JdTggYiwgdGVzdF92ZWNbTlVNVkVDXVtWRUNTSVpFXTsKLQlzdGF0aWMgdTMyIHZlY19yZXN1bHRzW05VTVZFQ10gPSB7Ci0JCTB4MGUyYzE1N2YsIDB4ZTk4MGViZjYsIDB4ZGU3NGJkZWQsCi0JCTB4ZDU3OWM4NjIsIDB4YmE5NzlhZDAsIDB4MmIyOWQ5MTMKLQl9OwotCXN0YXRpYyB1MzIgdG90X3ZlY19yZXN1bHRzID0gMHgyNGM1ZDM3NTsKLQotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1tOVU1WRUNdOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07Ci0JY2hhciAqZm10ZGF0YSA9ICJ0ZXN0aW5nIGNyYzMyYyBpbml0aWFsaXplZCB0byAlMDh4OiAlc1xuIjsKLSNkZWZpbmUgU0VFRFRFU1RWQUwgMHhlZGNiYTk4NwotCXUzMiBzZWVkOwotCi0JcHJpbnRrKCJcbnRlc3RpbmcgY3JjMzJjXG4iKTsKLQotCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oImNyYzMyYyIsIDApOwotCWlmICh0Zm0gPT0gTlVMTCkgewotCQlwcmludGsoImZhaWxlZCB0byBsb2FkIHRyYW5zZm9ybSBmb3IgY3JjMzJjXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwotCWNyeXB0b19kaWdlc3RfZmluYWwodGZtLCAodTgqKSZjcmMpOwotCXByaW50ayhmbXRkYXRhLCBjcmMsIChjcmMgPT0gMCkgPyAicGFzcyIgOiAiRVJST1IiKTsKLQotCS8qCi0JICogc3R1ZmYgdGVzdF92ZWMgd2l0aCBrbm93biB2YWx1ZXMsIHNpbXBsZSBpbmNyZW1lbnRpbmcKLQkgKiBieXRlIHZhbHVlcy4KLQkgKi8KLQliID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNVkVDOyBpKyspIHsKLQkJZm9yIChqID0gMDsgaiA8IFZFQ1NJWkU7IGorKykKLQkJCXRlc3RfdmVjW2ldW2pdID0gKytiOwotCQlzZ19zZXRfYnVmKCZzZ1tpXSwgdGVzdF92ZWNbaV0sIFZFQ1NJWkUpOwotCX0KLQotCXNlZWQgPSBTRUVEVEVTVFZBTDsKLQkodm9pZCljcnlwdG9fZGlnZXN0X3NldGtleSh0Zm0sIChjb25zdCB1OCopJnNlZWQsIHNpemVvZih1MzIpKTsKLQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgKHU4KikmY3JjKTsKLQlwcmludGsoInRlc3RpbmcgY3JjMzJjIHNldGtleSByZXR1cm5zICUwOHggOiAlc1xuIiwgY3JjLCAoY3JjID09IChTRUVEVEVTVFZBTCBeIH4odTMyKTApKSA/Ci0JICAgICAgICJwYXNzIiA6ICJFUlJPUiIpOwotCi0JcHJpbnRrKCJ0ZXN0aW5nIGNyYzMyYyB1c2luZyB1cGRhdGUvZmluYWw6XG4iKTsKLQotCXBhc3MgPSAxOwkJICAgIC8qIGFzc3VtZSBhbGwgaXMgd2VsbCAqLwotCi0JZm9yIChpID0gMDsgaSA8IE5VTVZFQzsgaSsrKSB7Ci0JCXNlZWQgPSB+KHUzMikwOwotCQkodm9pZCljcnlwdG9fZGlnZXN0X3NldGtleSh0Zm0sIChjb25zdCB1OCopJnNlZWQsIHNpemVvZih1MzIpKTsKLQkJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCAmc2dbaV0sIDEpOwotCQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgKHU4KikmY3JjKTsKLQkJaWYgKGNyYyA9PSB2ZWNfcmVzdWx0c1tpXSkgewotCQkJcHJpbnRrKCIgJTA4eDpPSyIsIGNyYyk7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoIiAlMDh4OkJBRCwgd2FudGVkICUwOHhcbiIsIGNyYywgdmVjX3Jlc3VsdHNbaV0pOwotCQkJcGFzcyA9IDA7Ci0JCX0KLQl9Ci0KLQlwcmludGsoIlxudGVzdGluZyBjcmMzMmMgdXNpbmcgaW5jcmVtZW50YWwgYWNjdW11bGF0b3I6XG4iKTsKLQljcmMgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBOVU1WRUM7IGkrKykgewotCQlzZWVkID0gKGNyYyBeIH4odTMyKTApOwotCQkodm9pZCljcnlwdG9fZGlnZXN0X3NldGtleSh0Zm0sIChjb25zdCB1OCopJnNlZWQsIHNpemVvZih1MzIpKTsKLQkJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCAmc2dbaV0sIDEpOwotCQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgKHU4KikmY3JjKTsKLQl9Ci0JaWYgKGNyYyA9PSB0b3RfdmVjX3Jlc3VsdHMpIHsKLQkJcHJpbnRrKCIgJTA4eDpPSyIsIGNyYyk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCIgJTA4eDpCQUQsIHdhbnRlZCAlMDh4XG4iLCBjcmMsIHRvdF92ZWNfcmVzdWx0cyk7Ci0JCXBhc3MgPSAwOwotCX0KLQotCXByaW50aygiXG50ZXN0aW5nIGNyYzMyYyB1c2luZyBkaWdlc3Q6XG4iKTsKLQlzZWVkID0gfih1MzIpMDsKLQkodm9pZCljcnlwdG9fZGlnZXN0X3NldGtleSh0Zm0sIChjb25zdCB1OCopJnNlZWQsIHNpemVvZih1MzIpKTsKLQljcnlwdG9fZGlnZXN0X2RpZ2VzdCh0Zm0sIHNnLCBOVU1WRUMsICh1OCopJmNyYyk7Ci0JaWYgKGNyYyA9PSB0b3RfdmVjX3Jlc3VsdHMpIHsKLQkJcHJpbnRrKCIgJTA4eDpPSyIsIGNyYyk7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKCIgJTA4eDpCQUQsIHdhbnRlZCAlMDh4XG4iLCBjcmMsIHRvdF92ZWNfcmVzdWx0cyk7Ci0JCXBhc3MgPSAwOwotCX0KLQotCXByaW50aygiXG4lc1xuIiwgcGFzcyA/ICJwYXNzIiA6ICJFUlJPUiIpOwotCi0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7Ci0JcHJpbnRrKCJjcmMzMmMgdGVzdCBjb21wbGV0ZVxuIik7CisJY3J5cHRvX2ZyZWVfY29tcCh0Zm0pOwogfQogCiBzdGF0aWMgdm9pZCB0ZXN0X2F2YWlsYWJsZSh2b2lkKQpAQCAtODY5LDggKzgzMCw4IEBACiAKIAl3aGlsZSAoKm5hbWUpIHsKIAkJcHJpbnRrKCJhbGcgJXMgIiwgKm5hbWUpOwotCQlwcmludGsoKGNyeXB0b19hbGdfYXZhaWxhYmxlKCpuYW1lLCAwKSkgPwotCQkJImZvdW5kXG4iIDogIm5vdCBmb3VuZFxuIik7CisJCXByaW50ayhjcnlwdG9faGFzX2FsZygqbmFtZSwgMCwgQ1JZUFRPX0FMR19BU1lOQykgPworCQkgICAgICAgImZvdW5kXG4iIDogIm5vdCBmb3VuZFxuIik7CiAJCW5hbWUrKzsKIAl9CiB9CkBAIC04ODUsNzkgKzg0NiwxMTkgQEAKIAkJdGVzdF9oYXNoKCJzaGExIiwgc2hhMV90dl90ZW1wbGF0ZSwgU0hBMV9URVNUX1ZFQ1RPUlMpOwogCiAJCS8vREVTCi0JCXRlc3RfY2lwaGVyICgiZGVzIiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIGRlc19lbmNfdHZfdGVtcGxhdGUsIERFU19FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJkZXMiLCBNT0RFX0VDQiwgREVDUllQVCwgZGVzX2RlY190dl90ZW1wbGF0ZSwgREVTX0RFQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImRlcyIsIE1PREVfQ0JDLCBFTkNSWVBULCBkZXNfY2JjX2VuY190dl90ZW1wbGF0ZSwgREVTX0NCQ19FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJkZXMiLCBNT0RFX0NCQywgREVDUllQVCwgZGVzX2NiY19kZWNfdHZfdGVtcGxhdGUsIERFU19DQkNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoZGVzKSIsIEVOQ1JZUFQsIGRlc19lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgREVTX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGRlcykiLCBERUNSWVBULCBkZXNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIERFU19ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImNiYyhkZXMpIiwgRU5DUllQVCwgZGVzX2NiY19lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgREVTX0NCQ19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImNiYyhkZXMpIiwgREVDUllQVCwgZGVzX2NiY19kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgREVTX0NCQ19ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL0RFUzNfRURFCi0JCXRlc3RfY2lwaGVyICgiZGVzM19lZGUiLCBNT0RFX0VDQiwgRU5DUllQVCwgZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlLCBERVMzX0VERV9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJkZXMzX2VkZSIsIE1PREVfRUNCLCBERUNSWVBULCBkZXMzX2VkZV9kZWNfdHZfdGVtcGxhdGUsIERFUzNfRURFX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGRlczNfZWRlKSIsIEVOQ1JZUFQsIGRlczNfZWRlX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBERVMzX0VERV9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihkZXMzX2VkZSkiLCBERUNSWVBULCBkZXMzX2VkZV9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgREVTM19FREVfREVDX1RFU1RfVkVDVE9SUyk7CiAKIAkJdGVzdF9oYXNoKCJtZDQiLCBtZDRfdHZfdGVtcGxhdGUsIE1ENF9URVNUX1ZFQ1RPUlMpOwogCiAJCXRlc3RfaGFzaCgic2hhMjU2Iiwgc2hhMjU2X3R2X3RlbXBsYXRlLCBTSEEyNTZfVEVTVF9WRUNUT1JTKTsKIAogCQkvL0JMT1dGSVNICi0JCXRlc3RfY2lwaGVyICgiYmxvd2Zpc2giLCBNT0RFX0VDQiwgRU5DUllQVCwgYmZfZW5jX3R2X3RlbXBsYXRlLCBCRl9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJibG93ZmlzaCIsIE1PREVfRUNCLCBERUNSWVBULCBiZl9kZWNfdHZfdGVtcGxhdGUsIEJGX0RFQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImJsb3dmaXNoIiwgTU9ERV9DQkMsIEVOQ1JZUFQsIGJmX2NiY19lbmNfdHZfdGVtcGxhdGUsIEJGX0NCQ19FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJibG93ZmlzaCIsIE1PREVfQ0JDLCBERUNSWVBULCBiZl9jYmNfZGVjX3R2X3RlbXBsYXRlLCBCRl9DQkNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoYmxvd2Zpc2gpIiwgRU5DUllQVCwgYmZfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEJGX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGJsb3dmaXNoKSIsIERFQ1JZUFQsIGJmX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBCRl9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImNiYyhibG93ZmlzaCkiLCBFTkNSWVBULCBiZl9jYmNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEJGX0NCQ19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImNiYyhibG93ZmlzaCkiLCBERUNSWVBULCBiZl9jYmNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIEJGX0NCQ19ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL1RXT0ZJU0gKLQkJdGVzdF9jaXBoZXIgKCJ0d29maXNoIiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIHRmX2VuY190dl90ZW1wbGF0ZSwgVEZfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgidHdvZmlzaCIsIE1PREVfRUNCLCBERUNSWVBULCB0Zl9kZWNfdHZfdGVtcGxhdGUsIFRGX0RFQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoInR3b2Zpc2giLCBNT0RFX0NCQywgRU5DUllQVCwgdGZfY2JjX2VuY190dl90ZW1wbGF0ZSwgVEZfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoInR3b2Zpc2giLCBNT0RFX0NCQywgREVDUllQVCwgdGZfY2JjX2RlY190dl90ZW1wbGF0ZSwgVEZfQ0JDX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHR3b2Zpc2gpIiwgRU5DUllQVCwgdGZfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIFRGX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHR3b2Zpc2gpIiwgREVDUllQVCwgdGZfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIFRGX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiY2JjKHR3b2Zpc2gpIiwgRU5DUllQVCwgdGZfY2JjX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBURl9DQkNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmModHdvZmlzaCkiLCBERUNSWVBULCB0Zl9jYmNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIFRGX0NCQ19ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL1NFUlBFTlQKLQkJdGVzdF9jaXBoZXIgKCJzZXJwZW50IiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIHNlcnBlbnRfZW5jX3R2X3RlbXBsYXRlLCBTRVJQRU5UX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoInNlcnBlbnQiLCBNT0RFX0VDQiwgREVDUllQVCwgc2VycGVudF9kZWNfdHZfdGVtcGxhdGUsIFNFUlBFTlRfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2Ioc2VycGVudCkiLCBFTkNSWVBULCBzZXJwZW50X2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBTRVJQRU5UX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHNlcnBlbnQpIiwgREVDUllQVCwgc2VycGVudF9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgU0VSUEVOVF9ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL1RORVBSRVMKLQkJdGVzdF9jaXBoZXIgKCJ0bmVwcmVzIiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIHRuZXByZXNfZW5jX3R2X3RlbXBsYXRlLCBUTkVQUkVTX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoInRuZXByZXMiLCBNT0RFX0VDQiwgREVDUllQVCwgdG5lcHJlc19kZWNfdHZfdGVtcGxhdGUsIFRORVBSRVNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IodG5lcHJlcykiLCBFTkNSWVBULCB0bmVwcmVzX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBUTkVQUkVTX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHRuZXByZXMpIiwgREVDUllQVCwgdG5lcHJlc19kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgVE5FUFJFU19ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL0FFUwotCQl0ZXN0X2NpcGhlciAoImFlcyIsIE1PREVfRUNCLCBFTkNSWVBULCBhZXNfZW5jX3R2X3RlbXBsYXRlLCBBRVNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYWVzIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIGFlc19kZWNfdHZfdGVtcGxhdGUsIEFFU19ERUNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJhZXMiLCBNT0RFX0NCQywgRU5DUllQVCwgYWVzX2NiY19lbmNfdHZfdGVtcGxhdGUsIEFFU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYWVzIiwgTU9ERV9DQkMsIERFQ1JZUFQsIGFlc19jYmNfZGVjX3R2X3RlbXBsYXRlLCBBRVNfQ0JDX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGFlcykiLCBFTkNSWVBULCBhZXNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEFFU19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihhZXMpIiwgREVDUllQVCwgYWVzX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBRVNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYWVzKSIsIEVOQ1JZUFQsIGFlc19jYmNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEFFU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYWVzKSIsIERFQ1JZUFQsIGFlc19jYmNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIEFFU19DQkNfREVDX1RFU1RfVkVDVE9SUyk7CiAKIAkJLy9DQVNUNQotCQl0ZXN0X2NpcGhlciAoImNhc3Q1IiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIGNhc3Q1X2VuY190dl90ZW1wbGF0ZSwgQ0FTVDVfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiY2FzdDUiLCBNT0RFX0VDQiwgREVDUllQVCwgY2FzdDVfZGVjX3R2X3RlbXBsYXRlLCBDQVNUNV9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihjYXN0NSkiLCBFTkNSWVBULCBjYXN0NV9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgQ0FTVDVfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoY2FzdDUpIiwgREVDUllQVCwgY2FzdDVfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIENBU1Q1X0RFQ19URVNUX1ZFQ1RPUlMpOwogCiAJCS8vQ0FTVDYKLQkJdGVzdF9jaXBoZXIgKCJjYXN0NiIsIE1PREVfRUNCLCBFTkNSWVBULCBjYXN0Nl9lbmNfdHZfdGVtcGxhdGUsIENBU1Q2X0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImNhc3Q2IiwgTU9ERV9FQ0IsIERFQ1JZUFQsIGNhc3Q2X2RlY190dl90ZW1wbGF0ZSwgQ0FTVDZfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoY2FzdDYpIiwgRU5DUllQVCwgY2FzdDZfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIENBU1Q2X0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGNhc3Q2KSIsIERFQ1JZUFQsIGNhc3Q2X2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBDQVNUNl9ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL0FSQzQKLQkJdGVzdF9jaXBoZXIgKCJhcmM0IiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIGFyYzRfZW5jX3R2X3RlbXBsYXRlLCBBUkM0X0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImFyYzQiLCBNT0RFX0VDQiwgREVDUllQVCwgYXJjNF9kZWNfdHZfdGVtcGxhdGUsIEFSQzRfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoYXJjNCkiLCBFTkNSWVBULCBhcmM0X2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBUkM0X0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGFyYzQpIiwgREVDUllQVCwgYXJjNF9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgQVJDNF9ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL1RFQQotCQl0ZXN0X2NpcGhlciAoInRlYSIsIE1PREVfRUNCLCBFTkNSWVBULCB0ZWFfZW5jX3R2X3RlbXBsYXRlLCBURUFfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgidGVhIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHRlYV9kZWNfdHZfdGVtcGxhdGUsIFRFQV9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih0ZWEpIiwgRU5DUllQVCwgdGVhX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBURUFfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IodGVhKSIsIERFQ1JZUFQsIHRlYV9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgVEVBX0RFQ19URVNUX1ZFQ1RPUlMpOwogCiAKIAkJLy9YVEVBCi0JCXRlc3RfY2lwaGVyICgieHRlYSIsIE1PREVfRUNCLCBFTkNSWVBULCB4dGVhX2VuY190dl90ZW1wbGF0ZSwgWFRFQV9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJ4dGVhIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHh0ZWFfZGVjX3R2X3RlbXBsYXRlLCBYVEVBX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHh0ZWEpIiwgRU5DUllQVCwgeHRlYV9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgWFRFQV9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih4dGVhKSIsIERFQ1JZUFQsIHh0ZWFfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIFhURUFfREVDX1RFU1RfVkVDVE9SUyk7CiAKIAkJLy9LSEFaQUQKLQkJdGVzdF9jaXBoZXIgKCJraGF6YWQiLCBNT0RFX0VDQiwgRU5DUllQVCwga2hhemFkX2VuY190dl90ZW1wbGF0ZSwgS0hBWkFEX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImtoYXphZCIsIE1PREVfRUNCLCBERUNSWVBULCBraGF6YWRfZGVjX3R2X3RlbXBsYXRlLCBLSEFaQURfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2Ioa2hhemFkKSIsIEVOQ1JZUFQsIGtoYXphZF9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgS0hBWkFEX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGtoYXphZCkiLCBERUNSWVBULCBraGF6YWRfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIEtIQVpBRF9ERUNfVEVTVF9WRUNUT1JTKTsKIAogCQkvL0FOVUJJUwotCQl0ZXN0X2NpcGhlciAoImFudWJpcyIsIE1PREVfRUNCLCBFTkNSWVBULCBhbnViaXNfZW5jX3R2X3RlbXBsYXRlLCBBTlVCSVNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYW51YmlzIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIGFudWJpc19kZWNfdHZfdGVtcGxhdGUsIEFOVUJJU19ERUNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJhbnViaXMiLCBNT0RFX0NCQywgRU5DUllQVCwgYW51YmlzX2NiY19lbmNfdHZfdGVtcGxhdGUsIEFOVUJJU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYW51YmlzIiwgTU9ERV9DQkMsIERFQ1JZUFQsIGFudWJpc19jYmNfZGVjX3R2X3RlbXBsYXRlLCBBTlVCSVNfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGFudWJpcykiLCBFTkNSWVBULCBhbnViaXNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEFOVUJJU19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihhbnViaXMpIiwgREVDUllQVCwgYW51YmlzX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBTlVCSVNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYW51YmlzKSIsIEVOQ1JZUFQsIGFudWJpc19jYmNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEFOVUJJU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYW51YmlzKSIsIERFQ1JZUFQsIGFudWJpc19jYmNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIEFOVUJJU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7CiAKIAkJLy9YRVRBCi0JCXRlc3RfY2lwaGVyICgieGV0YSIsIE1PREVfRUNCLCBFTkNSWVBULCB4ZXRhX2VuY190dl90ZW1wbGF0ZSwgWEVUQV9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJ4ZXRhIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHhldGFfZGVjX3R2X3RlbXBsYXRlLCBYRVRBX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHhldGEpIiwgRU5DUllQVCwgeGV0YV9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgWEVUQV9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih4ZXRhKSIsIERFQ1JZUFQsIHhldGFfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIFhFVEFfREVDX1RFU1RfVkVDVE9SUyk7CiAKIAkJdGVzdF9oYXNoKCJzaGEzODQiLCBzaGEzODRfdHZfdGVtcGxhdGUsIFNIQTM4NF9URVNUX1ZFQ1RPUlMpOwogCQl0ZXN0X2hhc2goInNoYTUxMiIsIHNoYTUxMl90dl90ZW1wbGF0ZSwgU0hBNTEyX1RFU1RfVkVDVE9SUyk7CkBAIC05NjgsMTIgKzk2OSwxMyBAQAogCQl0ZXN0X2hhc2goInRncjE2MCIsIHRncjE2MF90dl90ZW1wbGF0ZSwgVEdSMTYwX1RFU1RfVkVDVE9SUyk7CiAJCXRlc3RfaGFzaCgidGdyMTI4IiwgdGdyMTI4X3R2X3RlbXBsYXRlLCBUR1IxMjhfVEVTVF9WRUNUT1JTKTsKIAkJdGVzdF9kZWZsYXRlKCk7Ci0JCXRlc3RfY3JjMzJjKCk7Ci0jaWZkZWYgQ09ORklHX0NSWVBUT19ITUFDCi0JCXRlc3RfaG1hYygibWQ1IiwgaG1hY19tZDVfdHZfdGVtcGxhdGUsIEhNQUNfTUQ1X1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfaG1hYygic2hhMSIsIGhtYWNfc2hhMV90dl90ZW1wbGF0ZSwgSE1BQ19TSEExX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfaG1hYygic2hhMjU2IiwgaG1hY19zaGEyNTZfdHZfdGVtcGxhdGUsIEhNQUNfU0hBMjU2X1RFU1RfVkVDVE9SUyk7Ci0jZW5kaWYKKwkJdGVzdF9oYXNoKCJjcmMzMmMiLCBjcmMzMmNfdHZfdGVtcGxhdGUsIENSQzMyQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2hhc2goImhtYWMobWQ1KSIsIGhtYWNfbWQ1X3R2X3RlbXBsYXRlLAorCQkJICBITUFDX01ENV9URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2hhc2goImhtYWMoc2hhMSkiLCBobWFjX3NoYTFfdHZfdGVtcGxhdGUsCisJCQkgIEhNQUNfU0hBMV9URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2hhc2goImhtYWMoc2hhMjU2KSIsIGhtYWNfc2hhMjU2X3R2X3RlbXBsYXRlLAorCQkJICBITUFDX1NIQTI1Nl9URVNUX1ZFQ1RPUlMpOwogCiAJCXRlc3RfaGFzaCgibWljaGFlbF9taWMiLCBtaWNoYWVsX21pY190dl90ZW1wbGF0ZSwgTUlDSEFFTF9NSUNfVEVTVF9WRUNUT1JTKTsKIAkJYnJlYWs7CkBAIC05ODcsMTUgKzk4OSwyMSBAQAogCQlicmVhazsKIAogCWNhc2UgMzoKLQkJdGVzdF9jaXBoZXIgKCJkZXMiLCBNT0RFX0VDQiwgRU5DUllQVCwgZGVzX2VuY190dl90ZW1wbGF0ZSwgREVTX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImRlcyIsIE1PREVfRUNCLCBERUNSWVBULCBkZXNfZGVjX3R2X3RlbXBsYXRlLCBERVNfREVDX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiZGVzIiwgTU9ERV9DQkMsIEVOQ1JZUFQsIGRlc19jYmNfZW5jX3R2X3RlbXBsYXRlLCBERVNfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImRlcyIsIE1PREVfQ0JDLCBERUNSWVBULCBkZXNfY2JjX2RlY190dl90ZW1wbGF0ZSwgREVTX0NCQ19ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihkZXMpIiwgRU5DUllQVCwgZGVzX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBERVNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoZGVzKSIsIERFQ1JZUFQsIGRlc19kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgREVTX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiY2JjKGRlcykiLCBFTkNSWVBULCBkZXNfY2JjX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBERVNfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiY2JjKGRlcykiLCBERUNSWVBULCBkZXNfY2JjX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBERVNfQ0JDX0RFQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgNDoKLQkJdGVzdF9jaXBoZXIgKCJkZXMzX2VkZSIsIE1PREVfRUNCLCBFTkNSWVBULCBkZXMzX2VkZV9lbmNfdHZfdGVtcGxhdGUsIERFUzNfRURFX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImRlczNfZWRlIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIGRlczNfZWRlX2RlY190dl90ZW1wbGF0ZSwgREVTM19FREVfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoZGVzM19lZGUpIiwgRU5DUllQVCwgZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIERFUzNfRURFX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGRlczNfZWRlKSIsIERFQ1JZUFQsIGRlczNfZWRlX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBERVMzX0VERV9ERUNfVEVTVF9WRUNUT1JTKTsKIAkJYnJlYWs7CiAKIAljYXNlIDU6CkBAIC0xMDA3LDI5ICsxMDE1LDQzIEBACiAJCWJyZWFrOwogCiAJY2FzZSA3OgotCQl0ZXN0X2NpcGhlciAoImJsb3dmaXNoIiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIGJmX2VuY190dl90ZW1wbGF0ZSwgQkZfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYmxvd2Zpc2giLCBNT0RFX0VDQiwgREVDUllQVCwgYmZfZGVjX3R2X3RlbXBsYXRlLCBCRl9ERUNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJibG93ZmlzaCIsIE1PREVfQ0JDLCBFTkNSWVBULCBiZl9jYmNfZW5jX3R2X3RlbXBsYXRlLCBCRl9DQkNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYmxvd2Zpc2giLCBNT0RFX0NCQywgREVDUllQVCwgYmZfY2JjX2RlY190dl90ZW1wbGF0ZSwgQkZfQ0JDX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGJsb3dmaXNoKSIsIEVOQ1JZUFQsIGJmX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBCRl9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihibG93ZmlzaCkiLCBERUNSWVBULCBiZl9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgQkZfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYmxvd2Zpc2gpIiwgRU5DUllQVCwgYmZfY2JjX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBCRl9DQkNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYmxvd2Zpc2gpIiwgREVDUllQVCwgYmZfY2JjX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBCRl9DQkNfREVDX1RFU1RfVkVDVE9SUyk7CiAJCWJyZWFrOwogCiAJY2FzZSA4OgotCQl0ZXN0X2NpcGhlciAoInR3b2Zpc2giLCBNT0RFX0VDQiwgRU5DUllQVCwgdGZfZW5jX3R2X3RlbXBsYXRlLCBURl9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJ0d29maXNoIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHRmX2RlY190dl90ZW1wbGF0ZSwgVEZfREVDX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgidHdvZmlzaCIsIE1PREVfQ0JDLCBFTkNSWVBULCB0Zl9jYmNfZW5jX3R2X3RlbXBsYXRlLCBURl9DQkNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgidHdvZmlzaCIsIE1PREVfQ0JDLCBERUNSWVBULCB0Zl9jYmNfZGVjX3R2X3RlbXBsYXRlLCBURl9DQkNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IodHdvZmlzaCkiLCBFTkNSWVBULCB0Zl9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgVEZfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IodHdvZmlzaCkiLCBERUNSWVBULCB0Zl9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgVEZfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmModHdvZmlzaCkiLCBFTkNSWVBULCB0Zl9jYmNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIFRGX0NCQ19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImNiYyh0d29maXNoKSIsIERFQ1JZUFQsIHRmX2NiY19kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgVEZfQ0JDX0RFQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgOToKLQkJdGVzdF9jaXBoZXIgKCJzZXJwZW50IiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIHNlcnBlbnRfZW5jX3R2X3RlbXBsYXRlLCBTRVJQRU5UX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoInNlcnBlbnQiLCBNT0RFX0VDQiwgREVDUllQVCwgc2VycGVudF9kZWNfdHZfdGVtcGxhdGUsIFNFUlBFTlRfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2Ioc2VycGVudCkiLCBFTkNSWVBULCBzZXJwZW50X2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBTRVJQRU5UX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHNlcnBlbnQpIiwgREVDUllQVCwgc2VycGVudF9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgU0VSUEVOVF9ERUNfVEVTVF9WRUNUT1JTKTsKIAkJYnJlYWs7CiAKIAljYXNlIDEwOgotCQl0ZXN0X2NpcGhlciAoImFlcyIsIE1PREVfRUNCLCBFTkNSWVBULCBhZXNfZW5jX3R2X3RlbXBsYXRlLCBBRVNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYWVzIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIGFlc19kZWNfdHZfdGVtcGxhdGUsIEFFU19ERUNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJhZXMiLCBNT0RFX0NCQywgRU5DUllQVCwgYWVzX2NiY19lbmNfdHZfdGVtcGxhdGUsIEFFU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYWVzIiwgTU9ERV9DQkMsIERFQ1JZUFQsIGFlc19jYmNfZGVjX3R2X3RlbXBsYXRlLCBBRVNfQ0JDX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGFlcykiLCBFTkNSWVBULCBhZXNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEFFU19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihhZXMpIiwgREVDUllQVCwgYWVzX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBRVNfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYWVzKSIsIEVOQ1JZUFQsIGFlc19jYmNfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIEFFU19DQkNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJjYmMoYWVzKSIsIERFQ1JZUFQsIGFlc19jYmNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIEFFU19DQkNfREVDX1RFU1RfVkVDVE9SUyk7CiAJCWJyZWFrOwogCiAJY2FzZSAxMToKQEAgLTEwNDUsMTggKzEwNjcsMjQgQEAKIAkJYnJlYWs7CiAKIAljYXNlIDE0OgotCQl0ZXN0X2NpcGhlciAoImNhc3Q1IiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIGNhc3Q1X2VuY190dl90ZW1wbGF0ZSwgQ0FTVDVfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiY2FzdDUiLCBNT0RFX0VDQiwgREVDUllQVCwgY2FzdDVfZGVjX3R2X3RlbXBsYXRlLCBDQVNUNV9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihjYXN0NSkiLCBFTkNSWVBULCBjYXN0NV9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgQ0FTVDVfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoY2FzdDUpIiwgREVDUllQVCwgY2FzdDVfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIENBU1Q1X0RFQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgMTU6Ci0JCXRlc3RfY2lwaGVyICgiY2FzdDYiLCBNT0RFX0VDQiwgRU5DUllQVCwgY2FzdDZfZW5jX3R2X3RlbXBsYXRlLCBDQVNUNl9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJjYXN0NiIsIE1PREVfRUNCLCBERUNSWVBULCBjYXN0Nl9kZWNfdHZfdGVtcGxhdGUsIENBU1Q2X0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGNhc3Q2KSIsIEVOQ1JZUFQsIGNhc3Q2X2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBDQVNUNl9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihjYXN0NikiLCBERUNSWVBULCBjYXN0Nl9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgQ0FTVDZfREVDX1RFU1RfVkVDVE9SUyk7CiAJCWJyZWFrOwogCiAJY2FzZSAxNjoKLQkJdGVzdF9jaXBoZXIgKCJhcmM0IiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIGFyYzRfZW5jX3R2X3RlbXBsYXRlLCBBUkM0X0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImFyYzQiLCBNT0RFX0VDQiwgREVDUllQVCwgYXJjNF9kZWNfdHZfdGVtcGxhdGUsIEFSQzRfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoYXJjNCkiLCBFTkNSWVBULCBhcmM0X2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBUkM0X0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGFyYzQpIiwgREVDUllQVCwgYXJjNF9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgQVJDNF9ERUNfVEVTVF9WRUNUT1JTKTsKIAkJYnJlYWs7CiAKIAljYXNlIDE3OgpAQCAtMTA2NCwyMiArMTA5MiwyOCBAQAogCQlicmVhazsKIAogCWNhc2UgMTg6Ci0JCXRlc3RfY3JjMzJjKCk7CisJCXRlc3RfaGFzaCgiY3JjMzJjIiwgY3JjMzJjX3R2X3RlbXBsYXRlLCBDUkMzMkNfVEVTVF9WRUNUT1JTKTsKIAkJYnJlYWs7CiAKIAljYXNlIDE5OgotCQl0ZXN0X2NpcGhlciAoInRlYSIsIE1PREVfRUNCLCBFTkNSWVBULCB0ZWFfZW5jX3R2X3RlbXBsYXRlLCBURUFfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgidGVhIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHRlYV9kZWNfdHZfdGVtcGxhdGUsIFRFQV9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih0ZWEpIiwgRU5DUllQVCwgdGVhX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBURUFfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IodGVhKSIsIERFQ1JZUFQsIHRlYV9kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgVEVBX0RFQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgMjA6Ci0JCXRlc3RfY2lwaGVyICgieHRlYSIsIE1PREVfRUNCLCBFTkNSWVBULCB4dGVhX2VuY190dl90ZW1wbGF0ZSwgWFRFQV9FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJ4dGVhIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHh0ZWFfZGVjX3R2X3RlbXBsYXRlLCBYVEVBX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHh0ZWEpIiwgRU5DUllQVCwgeHRlYV9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgWFRFQV9FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih4dGVhKSIsIERFQ1JZUFQsIHh0ZWFfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIFhURUFfREVDX1RFU1RfVkVDVE9SUyk7CiAJCWJyZWFrOwogCiAJY2FzZSAyMToKLQkJdGVzdF9jaXBoZXIgKCJraGF6YWQiLCBNT0RFX0VDQiwgRU5DUllQVCwga2hhemFkX2VuY190dl90ZW1wbGF0ZSwgS0hBWkFEX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImtoYXphZCIsIE1PREVfRUNCLCBERUNSWVBULCBraGF6YWRfZGVjX3R2X3RlbXBsYXRlLCBLSEFaQURfREVDX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2Ioa2hhemFkKSIsIEVOQ1JZUFQsIGtoYXphZF9lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgS0hBWkFEX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKGtoYXphZCkiLCBERUNSWVBULCBraGF6YWRfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIEtIQVpBRF9ERUNfVEVTVF9WRUNUT1JTKTsKIAkJYnJlYWs7CiAKIAljYXNlIDIyOgpAQCAtMTA5NSwxNSArMTEyOSwyMSBAQAogCQlicmVhazsKIAogCWNhc2UgMjU6Ci0JCXRlc3RfY2lwaGVyICgidG5lcHJlcyIsIE1PREVfRUNCLCBFTkNSWVBULCB0bmVwcmVzX2VuY190dl90ZW1wbGF0ZSwgVE5FUFJFU19FTkNfVEVTVF9WRUNUT1JTKTsKLQkJdGVzdF9jaXBoZXIgKCJ0bmVwcmVzIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHRuZXByZXNfZGVjX3R2X3RlbXBsYXRlLCBUTkVQUkVTX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiZWNiKHRuZXByZXMpIiwgRU5DUllQVCwgdG5lcHJlc19lbmNfdHZfdGVtcGxhdGUsCisJCQkgICAgVE5FUFJFU19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih0bmVwcmVzKSIsIERFQ1JZUFQsIHRuZXByZXNfZGVjX3R2X3RlbXBsYXRlLAorCQkJICAgIFRORVBSRVNfREVDX1RFU1RfVkVDVE9SUyk7CiAJCWJyZWFrOwogCiAJY2FzZSAyNjoKLQkJdGVzdF9jaXBoZXIgKCJhbnViaXMiLCBNT0RFX0VDQiwgRU5DUllQVCwgYW51YmlzX2VuY190dl90ZW1wbGF0ZSwgQU5VQklTX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImFudWJpcyIsIE1PREVfRUNCLCBERUNSWVBULCBhbnViaXNfZGVjX3R2X3RlbXBsYXRlLCBBTlVCSVNfREVDX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgiYW51YmlzIiwgTU9ERV9DQkMsIEVOQ1JZUFQsIGFudWJpc19jYmNfZW5jX3R2X3RlbXBsYXRlLCBBTlVCSVNfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOwotCQl0ZXN0X2NpcGhlciAoImFudWJpcyIsIE1PREVfQ0JDLCBERUNSWVBULCBhbnViaXNfY2JjX2RlY190dl90ZW1wbGF0ZSwgQU5VQklTX0NCQ19FTkNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYihhbnViaXMpIiwgRU5DUllQVCwgYW51YmlzX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBTlVCSVNfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoYW51YmlzKSIsIERFQ1JZUFQsIGFudWJpc19kZWNfdHZfdGVtcGxhdGUsCisJCQkgICAgQU5VQklTX0RFQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiY2JjKGFudWJpcykiLCBFTkNSWVBULCBhbnViaXNfY2JjX2VuY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBTlVCSVNfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2NpcGhlcigiY2JjKGFudWJpcykiLCBERUNSWVBULCBhbnViaXNfY2JjX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBBTlVCSVNfQ0JDX0VOQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgMjc6CkBAIC0xMTIwLDg1ICsxMTYwLDg4IEBACiAJCWJyZWFrOwogCQkKIAljYXNlIDMwOgotCQl0ZXN0X2NpcGhlciAoInhldGEiLCBNT0RFX0VDQiwgRU5DUllQVCwgeGV0YV9lbmNfdHZfdGVtcGxhdGUsIFhFVEFfRU5DX1RFU1RfVkVDVE9SUyk7Ci0JCXRlc3RfY2lwaGVyICgieGV0YSIsIE1PREVfRUNCLCBERUNSWVBULCB4ZXRhX2RlY190dl90ZW1wbGF0ZSwgWEVUQV9ERUNfVEVTVF9WRUNUT1JTKTsKKwkJdGVzdF9jaXBoZXIoImVjYih4ZXRhKSIsIEVOQ1JZUFQsIHhldGFfZW5jX3R2X3RlbXBsYXRlLAorCQkJICAgIFhFVEFfRU5DX1RFU1RfVkVDVE9SUyk7CisJCXRlc3RfY2lwaGVyKCJlY2IoeGV0YSkiLCBERUNSWVBULCB4ZXRhX2RlY190dl90ZW1wbGF0ZSwKKwkJCSAgICBYRVRBX0RFQ19URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAotI2lmZGVmIENPTkZJR19DUllQVE9fSE1BQwogCWNhc2UgMTAwOgotCQl0ZXN0X2htYWMoIm1kNSIsIGhtYWNfbWQ1X3R2X3RlbXBsYXRlLCBITUFDX01ENV9URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2hhc2goImhtYWMobWQ1KSIsIGhtYWNfbWQ1X3R2X3RlbXBsYXRlLAorCQkJICBITUFDX01ENV9URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgMTAxOgotCQl0ZXN0X2htYWMoInNoYTEiLCBobWFjX3NoYTFfdHZfdGVtcGxhdGUsIEhNQUNfU0hBMV9URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2hhc2goImhtYWMoc2hhMSkiLCBobWFjX3NoYTFfdHZfdGVtcGxhdGUsCisJCQkgIEhNQUNfU0hBMV9URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAogCWNhc2UgMTAyOgotCQl0ZXN0X2htYWMoInNoYTI1NiIsIGhtYWNfc2hhMjU2X3R2X3RlbXBsYXRlLCBITUFDX1NIQTI1Nl9URVNUX1ZFQ1RPUlMpOworCQl0ZXN0X2hhc2goImhtYWMoc2hhMjU2KSIsIGhtYWNfc2hhMjU2X3R2X3RlbXBsYXRlLAorCQkJICBITUFDX1NIQTI1Nl9URVNUX1ZFQ1RPUlMpOwogCQlicmVhazsKIAotI2VuZGlmCiAKIAljYXNlIDIwMDoKLQkJdGVzdF9jaXBoZXJfc3BlZWQoImFlcyIsIE1PREVfRUNCLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJlY2IoYWVzKSIsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKIAkJCQkgIGFlc19zcGVlZF90ZW1wbGF0ZSk7Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJhZXMiLCBNT0RFX0VDQiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGFlcykiLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCiAJCQkJICBhZXNfc3BlZWRfdGVtcGxhdGUpOwotCQl0ZXN0X2NpcGhlcl9zcGVlZCgiYWVzIiwgTU9ERV9DQkMsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyhhZXMpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgYWVzX3NwZWVkX3RlbXBsYXRlKTsKLQkJdGVzdF9jaXBoZXJfc3BlZWQoImFlcyIsIE1PREVfQ0JDLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmMoYWVzKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKIAkJCQkgIGFlc19zcGVlZF90ZW1wbGF0ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSAyMDE6Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJkZXMzX2VkZSIsIE1PREVfRUNCLCBFTkNSWVBULCBzZWMsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJlY2IoZGVzM19lZGUpIiwgRU5DUllQVCwgc2VjLAogCQkJCSAgZGVzM19lZGVfZW5jX3R2X3RlbXBsYXRlLAogCQkJCSAgREVTM19FREVfRU5DX1RFU1RfVkVDVE9SUywKIAkJCQkgIGRlczNfZWRlX3NwZWVkX3RlbXBsYXRlKTsKLQkJdGVzdF9jaXBoZXJfc3BlZWQoImRlczNfZWRlIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHNlYywKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihkZXMzX2VkZSkiLCBERUNSWVBULCBzZWMsCiAJCQkJICBkZXMzX2VkZV9kZWNfdHZfdGVtcGxhdGUsCiAJCQkJICBERVMzX0VERV9ERUNfVEVTVF9WRUNUT1JTLAogCQkJCSAgZGVzM19lZGVfc3BlZWRfdGVtcGxhdGUpOwotCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZGVzM19lZGUiLCBNT0RFX0NCQywgRU5DUllQVCwgc2VjLAorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKGRlczNfZWRlKSIsIEVOQ1JZUFQsIHNlYywKIAkJCQkgIGRlczNfZWRlX2VuY190dl90ZW1wbGF0ZSwKIAkJCQkgIERFUzNfRURFX0VOQ19URVNUX1ZFQ1RPUlMsCiAJCQkJICBkZXMzX2VkZV9zcGVlZF90ZW1wbGF0ZSk7Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJkZXMzX2VkZSIsIE1PREVfQ0JDLCBERUNSWVBULCBzZWMsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmMoZGVzM19lZGUpIiwgREVDUllQVCwgc2VjLAogCQkJCSAgZGVzM19lZGVfZGVjX3R2X3RlbXBsYXRlLAogCQkJCSAgREVTM19FREVfREVDX1RFU1RfVkVDVE9SUywKIAkJCQkgIGRlczNfZWRlX3NwZWVkX3RlbXBsYXRlKTsKIAkJYnJlYWs7CiAKIAljYXNlIDIwMjoKLQkJdGVzdF9jaXBoZXJfc3BlZWQoInR3b2Zpc2giLCBNT0RFX0VDQiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKHR3b2Zpc2gpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgdHdvZmlzaF9zcGVlZF90ZW1wbGF0ZSk7Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJ0d29maXNoIiwgTU9ERV9FQ0IsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYih0d29maXNoKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKIAkJCQkgIHR3b2Zpc2hfc3BlZWRfdGVtcGxhdGUpOwotCQl0ZXN0X2NpcGhlcl9zcGVlZCgidHdvZmlzaCIsIE1PREVfQ0JDLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmModHdvZmlzaCkiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCiAJCQkJICB0d29maXNoX3NwZWVkX3RlbXBsYXRlKTsKLQkJdGVzdF9jaXBoZXJfc3BlZWQoInR3b2Zpc2giLCBNT0RFX0NCQywgREVDUllQVCwgc2VjLCBOVUxMLCAwLAorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKHR3b2Zpc2gpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgdHdvZmlzaF9zcGVlZF90ZW1wbGF0ZSk7CiAJCWJyZWFrOwogCiAJY2FzZSAyMDM6Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJibG93ZmlzaCIsIE1PREVfRUNCLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJlY2IoYmxvd2Zpc2gpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgYmxvd2Zpc2hfc3BlZWRfdGVtcGxhdGUpOwotCQl0ZXN0X2NpcGhlcl9zcGVlZCgiYmxvd2Zpc2giLCBNT0RFX0VDQiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZWNiKGJsb3dmaXNoKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKIAkJCQkgIGJsb3dmaXNoX3NwZWVkX3RlbXBsYXRlKTsKLQkJdGVzdF9jaXBoZXJfc3BlZWQoImJsb3dmaXNoIiwgTU9ERV9DQkMsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyhibG93ZmlzaCkiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCiAJCQkJICBibG93ZmlzaF9zcGVlZF90ZW1wbGF0ZSk7Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJibG93ZmlzaCIsIE1PREVfQ0JDLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJjYmMoYmxvd2Zpc2gpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgYmxvd2Zpc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlicmVhazsKIAogCWNhc2UgMjA0OgotCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZGVzIiwgTU9ERV9FQ0IsIEVOQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImVjYihkZXMpIiwgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgZGVzX3NwZWVkX3RlbXBsYXRlKTsKLQkJdGVzdF9jaXBoZXJfc3BlZWQoImRlcyIsIE1PREVfRUNCLCBERUNSWVBULCBzZWMsIE5VTEwsIDAsCisJCXRlc3RfY2lwaGVyX3NwZWVkKCJlY2IoZGVzKSIsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKIAkJCQkgIGRlc19zcGVlZF90ZW1wbGF0ZSk7Ci0JCXRlc3RfY2lwaGVyX3NwZWVkKCJkZXMiLCBNT0RFX0NCQywgRU5DUllQVCwgc2VjLCBOVUxMLCAwLAorCQl0ZXN0X2NpcGhlcl9zcGVlZCgiY2JjKGRlcykiLCBFTkNSWVBULCBzZWMsIE5VTEwsIDAsCiAJCQkJICBkZXNfc3BlZWRfdGVtcGxhdGUpOwotCQl0ZXN0X2NpcGhlcl9zcGVlZCgiZGVzIiwgTU9ERV9DQkMsIERFQ1JZUFQsIHNlYywgTlVMTCwgMCwKKwkJdGVzdF9jaXBoZXJfc3BlZWQoImNiYyhkZXMpIiwgREVDUllQVCwgc2VjLCBOVUxMLCAwLAogCQkJCSAgZGVzX3NwZWVkX3RlbXBsYXRlKTsKIAkJYnJlYWs7CiAKQEAgLTEyMDYsNTEgKzEyNDksNTEgQEAKIAkJLyogZmFsbCB0aHJvdWdoICovCiAKIAljYXNlIDMwMToKLQkJdGVzdF9kaWdlc3Rfc3BlZWQoIm1kNCIsIHNlYywgZ2VuZXJpY19kaWdlc3Rfc3BlZWRfdGVtcGxhdGUpOworCQl0ZXN0X2hhc2hfc3BlZWQoIm1kNCIsIHNlYywgZ2VuZXJpY19oYXNoX3NwZWVkX3RlbXBsYXRlKTsKIAkJaWYgKG1vZGUgPiAzMDAgJiYgbW9kZSA8IDQwMCkgYnJlYWs7CiAKIAljYXNlIDMwMjoKLQkJdGVzdF9kaWdlc3Rfc3BlZWQoIm1kNSIsIHNlYywgZ2VuZXJpY19kaWdlc3Rfc3BlZWRfdGVtcGxhdGUpOworCQl0ZXN0X2hhc2hfc3BlZWQoIm1kNSIsIHNlYywgZ2VuZXJpY19oYXNoX3NwZWVkX3RlbXBsYXRlKTsKIAkJaWYgKG1vZGUgPiAzMDAgJiYgbW9kZSA8IDQwMCkgYnJlYWs7CiAKIAljYXNlIDMwMzoKLQkJdGVzdF9kaWdlc3Rfc3BlZWQoInNoYTEiLCBzZWMsIGdlbmVyaWNfZGlnZXN0X3NwZWVkX3RlbXBsYXRlKTsKKwkJdGVzdF9oYXNoX3NwZWVkKCJzaGExIiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzA0OgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgic2hhMjU2Iiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgic2hhMjU2Iiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzA1OgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgic2hhMzg0Iiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgic2hhMzg0Iiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzA2OgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgic2hhNTEyIiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgic2hhNTEyIiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzA3OgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgid3AyNTYiLCBzZWMsIGdlbmVyaWNfZGlnZXN0X3NwZWVkX3RlbXBsYXRlKTsKKwkJdGVzdF9oYXNoX3NwZWVkKCJ3cDI1NiIsIHNlYywgZ2VuZXJpY19oYXNoX3NwZWVkX3RlbXBsYXRlKTsKIAkJaWYgKG1vZGUgPiAzMDAgJiYgbW9kZSA8IDQwMCkgYnJlYWs7CiAKIAljYXNlIDMwODoKLQkJdGVzdF9kaWdlc3Rfc3BlZWQoIndwMzg0Iiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgid3AzODQiLCBzZWMsIGdlbmVyaWNfaGFzaF9zcGVlZF90ZW1wbGF0ZSk7CiAJCWlmIChtb2RlID4gMzAwICYmIG1vZGUgPCA0MDApIGJyZWFrOwogCiAJY2FzZSAzMDk6Ci0JCXRlc3RfZGlnZXN0X3NwZWVkKCJ3cDUxMiIsIHNlYywgZ2VuZXJpY19kaWdlc3Rfc3BlZWRfdGVtcGxhdGUpOworCQl0ZXN0X2hhc2hfc3BlZWQoIndwNTEyIiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzEwOgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgidGdyMTI4Iiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgidGdyMTI4Iiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzExOgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgidGdyMTYwIiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgidGdyMTYwIiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzEyOgotCQl0ZXN0X2RpZ2VzdF9zcGVlZCgidGdyMTkyIiwgc2VjLCBnZW5lcmljX2RpZ2VzdF9zcGVlZF90ZW1wbGF0ZSk7CisJCXRlc3RfaGFzaF9zcGVlZCgidGdyMTkyIiwgc2VjLCBnZW5lcmljX2hhc2hfc3BlZWRfdGVtcGxhdGUpOwogCQlpZiAobW9kZSA+IDMwMCAmJiBtb2RlIDwgNDAwKSBicmVhazsKIAogCWNhc2UgMzk5OgpkaWZmIC0tZ2l0IGEvY3J5cHRvL3RjcnlwdC5oIGIvY3J5cHRvL3RjcnlwdC5oCmluZGV4IDFmYWM1NjAuLmE0MGM0NDEgMTAwNjQ0Ci0tLSBhL2NyeXB0by90Y3J5cHQuaAorKysgYi9jcnlwdG8vdGNyeXB0LmgKQEAgLTI4LDcgKzI4LDcgQEAKIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgewogCS8qIG9ubHkgdXNlZCB3aXRoIGtleWVkIGhhc2ggYWxnb3JpdGhtcyAqLwogCWNoYXIga2V5WzEyOF0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKDQpKSk7Ci0JY2hhciBwbGFpbnRleHRbMTI4XTsKKwljaGFyIHBsYWludGV4dFsyNDBdOwogCWNoYXIgZGlnZXN0W01BWF9ESUdFU1RfU0laRV07CiAJdW5zaWduZWQgY2hhciB0YXBbTUFYX1RBUF07CiAJdW5zaWduZWQgY2hhciBwc2l6ZTsKQEAgLTM2LDE2ICszNiw2IEBACiAJdW5zaWduZWQgY2hhciBrc2l6ZTsKIH07CiAKLXN0cnVjdCBobWFjX3Rlc3R2ZWMgewotCWNoYXIga2V5WzEyOF07Ci0JY2hhciBwbGFpbnRleHRbMTI4XTsKLQljaGFyIGRpZ2VzdFtNQVhfRElHRVNUX1NJWkVdOwotCXVuc2lnbmVkIGNoYXIgdGFwW01BWF9UQVBdOwotCXVuc2lnbmVkIGNoYXIga3NpemU7Ci0JdW5zaWduZWQgY2hhciBwc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIG5wOwotfTsKLQogc3RydWN0IGNpcGhlcl90ZXN0dmVjIHsKIAljaGFyIGtleVtNQVhfS0VZTEVOXSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oNCkpKTsKIAljaGFyIGl2W01BWF9JVkxFTl07CkBAIC02NSw3ICs1NSw3IEBACiAJdW5zaWduZWQgaW50IGJsZW47CiB9OwogCi1zdHJ1Y3QgZGlnZXN0X3NwZWVkIHsKK3N0cnVjdCBoYXNoX3NwZWVkIHsKIAl1bnNpZ25lZCBpbnQgYmxlbjsJLyogYnVmZmVyIGxlbmd0aCAqLwogCXVuc2lnbmVkIGludCBwbGVuOwkvKiBwZXItdXBkYXRlIGxlbmd0aCAqLwogfTsKQEAgLTY5NywxNCArNjg3LDEzIEBACiAJfSwKIH07CiAKLSNpZmRlZiBDT05GSUdfQ1JZUFRPX0hNQUMKIC8qCiAgKiBITUFDLU1ENSB0ZXN0IHZlY3RvcnMgZnJvbSBSRkMyMjAyCiAgKiAoVGhlc2UgbmVlZCB0byBiZSBmaXhlZCB0byBub3QgdXNlIHN0cmxlbikuCiAgKi8KICNkZWZpbmUgSE1BQ19NRDVfVEVTVF9WRUNUT1JTCTcKIAotc3RhdGljIHN0cnVjdCBobWFjX3Rlc3R2ZWMgaG1hY19tZDVfdHZfdGVtcGxhdGVbXSA9CitzdGF0aWMgc3RydWN0IGhhc2hfdGVzdHZlYyBobWFjX21kNV90dl90ZW1wbGF0ZVtdID0KIHsKIAl7CiAJCS5rZXkJPSB7IFswIC4uLiAxNV0gPSAgMHgwYiB9LApAQCAtNzY4LDcgKzc1Nyw3IEBACiAgKi8KICNkZWZpbmUgSE1BQ19TSEExX1RFU1RfVkVDVE9SUwk3CiAKLXN0YXRpYyBzdHJ1Y3QgaG1hY190ZXN0dmVjIGhtYWNfc2hhMV90dl90ZW1wbGF0ZVtdID0geworc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgaG1hY19zaGExX3R2X3RlbXBsYXRlW10gPSB7CiAJewogCQkua2V5CT0geyBbMCAuLi4gMTldID0gMHgwYiB9LAogCQkua3NpemUJPSAyMCwKQEAgLTgzMyw3ICs4MjIsNyBAQAogICovCiAjZGVmaW5lIEhNQUNfU0hBMjU2X1RFU1RfVkVDVE9SUwkxMAogCi1zdGF0aWMgc3RydWN0IGhtYWNfdGVzdHZlYyBobWFjX3NoYTI1Nl90dl90ZW1wbGF0ZVtdID0geworc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgaG1hY19zaGEyNTZfdHZfdGVtcGxhdGVbXSA9IHsKIAl7CiAJCS5rZXkJPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCiAJCQkgICAgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwKQEAgLTk0NCw4ICs5MzMsNiBAQAogCX0sCiB9OwogCi0jZW5kaWYJLyogQ09ORklHX0NSWVBUT19ITUFDICovCi0KIC8qCiAgKiBERVMgdGVzdCB2ZWN0b3JzLgogICovCkBAIC0yODk3LDYgKzI4ODQsMTgzIEBACiB9OwogCiAvKgorICogQ1JDMzJDIHRlc3QgdmVjdG9ycworICovCisjZGVmaW5lIENSQzMyQ19URVNUX1ZFQ1RPUlMgMTQKKworc3RhdGljIHN0cnVjdCBoYXNoX3Rlc3R2ZWMgY3JjMzJjX3R2X3RlbXBsYXRlW10gPSB7CisJeworCQkucHNpemUgPSAwLAorCQkuZGlnZXN0ID0geyAweDAwLCAweDAwLCAweDAwLCAweDAwIH0KKwl9LAorCXsKKwkJLmtleSA9IHsgMHg4NywgMHhhOSwgMHhjYiwgMHhlZCB9LAorCQkua3NpemUgPSA0LAorCQkucHNpemUgPSAwLAorCQkuZGlnZXN0ID0geyAweDc4LCAweDU2LCAweDM0LCAweDEyIH0sCisJfSwKKwl7CisJCS5rZXkgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKwkJLmtzaXplID0gNCwKKwkJLnBsYWludGV4dCA9IHsgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywgMHgwOCwKKwkJCSAgICAgICAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLCAweDEwLAorCQkJICAgICAgIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsIDB4MTgsCisJCQkgICAgICAgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwgMHgyMCwKKwkJCSAgICAgICAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LCAweDI4IH0sCisJCS5wc2l6ZSA9IDQwLAorCQkuZGlnZXN0ID0geyAweDdmLCAweDE1LCAweDJjLCAweDBlIH0KKwl9LAorCXsKKwkJLmtleSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorCQkua3NpemUgPSA0LAorCQkucGxhaW50ZXh0ID0geyAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLCAweDMwLAorCQkJICAgICAgIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCisJCQkgICAgICAgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwgMHg0MCwKKwkJCSAgICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorCQkJICAgICAgIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsIDB4NTAgfSwKKwkJLnBzaXplID0gNDAsCisJCS5kaWdlc3QgPSB7IDB4ZjYsIDB4ZWIsIDB4ODAsIDB4ZTkgfQorCX0sCisJeworCQkua2V5ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rc2l6ZSA9IDQsCisJCS5wbGFpbnRleHQgPSB7IDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisJCQkgICAgICAgMHg1OSwgMHg1YSwgMHg1YiwgMHg1YywgMHg1ZCwgMHg1ZSwgMHg1ZiwgMHg2MCwKKwkJCSAgICAgICAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAweDY4LAorCQkJICAgICAgIDB4NjksIDB4NmEsIDB4NmIsIDB4NmMsIDB4NmQsIDB4NmUsIDB4NmYsIDB4NzAsCisJCQkgICAgICAgMHg3MSwgMHg3MiwgMHg3MywgMHg3NCwgMHg3NSwgMHg3NiwgMHg3NywgMHg3OCB9LAorCQkucHNpemUgPSA0MCwKKwkJLmRpZ2VzdCA9IHsgMHhlZCwgMHhiZCwgMHg3NCwgMHhkZSB9CisJfSwKKwl7CisJCS5rZXkgPSB7IDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYgfSwKKwkJLmtzaXplID0gNCwKKwkJLnBsYWludGV4dCA9IHsgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwgMHg4MCwKKwkJCSAgICAgICAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LCAweDg4LAorCQkJICAgICAgIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsIDB4OTAsCisJCQkgICAgICAgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywgMHg5OCwKKwkJCSAgICAgICAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLCAweGEwIH0sCisJCS5wc2l6ZSA9IDQwLAorCQkuZGlnZXN0ID0geyAweDYyLCAweGM4LCAweDc5LCAweGQ1IH0KKwl9LAorCXsKKwkJLmtleSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9LAorCQkua3NpemUgPSA0LAorCQkucGxhaW50ZXh0ID0geyAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LCAweGE4LAorCQkJICAgICAgIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsIDB4YjAsCisJCQkgICAgICAgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwKKwkJCSAgICAgICAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLCAweGMwLAorCQkJICAgICAgIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzggfSwKKwkJLnBzaXplID0gNDAsCisJCS5kaWdlc3QgPSB7IDB4ZDAsIDB4OWEsIDB4OTcsIDB4YmEgfQorCX0sCisJeworCQkua2V5ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rc2l6ZSA9IDQsCisJCS5wbGFpbnRleHQgPSB7IDB4YzksIDB4Y2EsIDB4Y2IsIDB4Y2MsIDB4Y2QsIDB4Y2UsIDB4Y2YsIDB4ZDAsCisJCQkgICAgICAgMHhkMSwgMHhkMiwgMHhkMywgMHhkNCwgMHhkNSwgMHhkNiwgMHhkNywgMHhkOCwKKwkJCSAgICAgICAweGQ5LCAweGRhLCAweGRiLCAweGRjLCAweGRkLCAweGRlLCAweGRmLCAweGUwLAorCQkJICAgICAgIDB4ZTEsIDB4ZTIsIDB4ZTMsIDB4ZTQsIDB4ZTUsIDB4ZTYsIDB4ZTcsIDB4ZTgsCisJCQkgICAgICAgMHhlOSwgMHhlYSwgMHhlYiwgMHhlYywgMHhlZCwgMHhlZSwgMHhlZiwgMHhmMCB9LAorCQkucHNpemUgPSA0MCwKKwkJLmRpZ2VzdCA9IHsgMHgxMywgMHhkOSwgMHgyOSwgMHgyYiB9CisJfSwKKwl7CisJCS5rZXkgPSB7IDB4ODAsIDB4ZWEsIDB4ZDMsIDB4ZjEgfSwKKwkJLmtzaXplID0gNCwKKwkJLnBsYWludGV4dCA9IHsgMHgyOSwgMHgyYSwgMHgyYiwgMHgyYywgMHgyZCwgMHgyZSwgMHgyZiwgMHgzMCwKKwkJCSAgICAgICAweDMxLCAweDMyLCAweDMzLCAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LAorCQkJICAgICAgIDB4MzksIDB4M2EsIDB4M2IsIDB4M2MsIDB4M2QsIDB4M2UsIDB4M2YsIDB4NDAsCisJCQkgICAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKKwkJCSAgICAgICAweDQ5LCAweDRhLCAweDRiLCAweDRjLCAweDRkLCAweDRlLCAweDRmLCAweDUwIH0sCisJCS5wc2l6ZSA9IDQwLAorCQkuZGlnZXN0ID0geyAweDBjLCAweGI1LCAweGUyLCAweGEyIH0KKwl9LAorCXsKKwkJLmtleSA9IHsgMHhmMywgMHg0YSwgMHgxZCwgMHg1ZCB9LAorCQkua3NpemUgPSA0LAorCQkucGxhaW50ZXh0ID0geyAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorCQkJICAgICAgIDB4NTksIDB4NWEsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsIDB4NjAsCisJCQkgICAgICAgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywgMHg2OCwKKwkJCSAgICAgICAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLCAweDcwLAorCQkJICAgICAgIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsIDB4NzggfSwKKwkJLnBzaXplID0gNDAsCisJCS5kaWdlc3QgPSB7IDB4ZDEsIDB4N2YsIDB4ZmIsIDB4YTYgfQorCX0sCisJeworCQkua2V5ID0geyAweDJlLCAweDgwLCAweDA0LCAweDU5IH0sCisJCS5rc2l6ZSA9IDQsCisJCS5wbGFpbnRleHQgPSB7IDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODAsCisJCQkgICAgICAgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwKKwkJCSAgICAgICAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLCAweDkwLAorCQkJICAgICAgIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCisJCQkgICAgICAgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwgMHhhMCB9LAorCQkucHNpemUgPSA0MCwKKwkJLmRpZ2VzdCA9IHsgMHg1OSwgMHgzMywgMHhlNiwgMHg3YSB9CisJfSwKKwl7CisJCS5rZXkgPSB7IDB4YTYsIDB4Y2MsIDB4MTksIDB4ODUgfSwKKwkJLmtzaXplID0gNCwKKwkJLnBsYWludGV4dCA9IHsgMHhhMSwgMHhhMiwgMHhhMywgMHhhNCwgMHhhNSwgMHhhNiwgMHhhNywgMHhhOCwKKwkJCSAgICAgICAweGE5LCAweGFhLCAweGFiLCAweGFjLCAweGFkLCAweGFlLCAweGFmLCAweGIwLAorCQkJICAgICAgIDB4YjEsIDB4YjIsIDB4YjMsIDB4YjQsIDB4YjUsIDB4YjYsIDB4YjcsIDB4YjgsCisJCQkgICAgICAgMHhiOSwgMHhiYSwgMHhiYiwgMHhiYywgMHhiZCwgMHhiZSwgMHhiZiwgMHhjMCwKKwkJCSAgICAgICAweGMxLCAweGMyLCAweGMzLCAweGM0LCAweGM1LCAweGM2LCAweGM3LCAweGM4IH0sCisJCS5wc2l6ZSA9IDQwLAorCQkuZGlnZXN0ID0geyAweGJlLCAweDAzLCAweDAxLCAweGQyIH0KKwl9LAorCXsKKwkJLmtleSA9IHsgMHg0MSwgMHhmYywgMHhmZSwgMHgyZCB9LAorCQkua3NpemUgPSA0LAorCQkucGxhaW50ZXh0ID0geyAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLCAweGQwLAorCQkJICAgICAgIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsIDB4ZDgsCisJCQkgICAgICAgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwgMHhlMCwKKwkJCSAgICAgICAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LCAweGU4LAorCQkJICAgICAgIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsIDB4ZjAgfSwKKwkJLnBzaXplID0gNDAsCisJCS5kaWdlc3QgPSB7IDB4NzUsIDB4ZDMsIDB4YzUsIDB4MjQgfQorCX0sCisJeworCQkua2V5ID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmIH0sCisJCS5rc2l6ZSA9IDQsCisJCS5wbGFpbnRleHQgPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCisJCQkgICAgICAgMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCwKKwkJCSAgICAgICAweDExLCAweDEyLCAweDEzLCAweDE0LCAweDE1LCAweDE2LCAweDE3LCAweDE4LAorCQkJICAgICAgIDB4MTksIDB4MWEsIDB4MWIsIDB4MWMsIDB4MWQsIDB4MWUsIDB4MWYsIDB4MjAsCisJCQkgICAgICAgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNSwgMHgyNiwgMHgyNywgMHgyOCwKKwkJCSAgICAgICAweDI5LCAweDJhLCAweDJiLCAweDJjLCAweDJkLCAweDJlLCAweDJmLCAweDMwLAorCQkJICAgICAgIDB4MzEsIDB4MzIsIDB4MzMsIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsCisJCQkgICAgICAgMHgzOSwgMHgzYSwgMHgzYiwgMHgzYywgMHgzZCwgMHgzZSwgMHgzZiwgMHg0MCwKKwkJCSAgICAgICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorCQkJICAgICAgIDB4NDksIDB4NGEsIDB4NGIsIDB4NGMsIDB4NGQsIDB4NGUsIDB4NGYsIDB4NTAsCisJCQkgICAgICAgMHg1MSwgMHg1MiwgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1OCwKKwkJCSAgICAgICAweDU5LCAweDVhLCAweDViLCAweDVjLCAweDVkLCAweDVlLCAweDVmLCAweDYwLAorCQkJICAgICAgIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsIDB4NjgsCisJCQkgICAgICAgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwgMHg3MCwKKwkJCSAgICAgICAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LCAweDc4LAorCQkJICAgICAgIDB4NzksIDB4N2EsIDB4N2IsIDB4N2MsIDB4N2QsIDB4N2UsIDB4N2YsIDB4ODAsCisJCQkgICAgICAgMHg4MSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwgMHg4NiwgMHg4NywgMHg4OCwKKwkJCSAgICAgICAweDg5LCAweDhhLCAweDhiLCAweDhjLCAweDhkLCAweDhlLCAweDhmLCAweDkwLAorCQkJICAgICAgIDB4OTEsIDB4OTIsIDB4OTMsIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsCisJCQkgICAgICAgMHg5OSwgMHg5YSwgMHg5YiwgMHg5YywgMHg5ZCwgMHg5ZSwgMHg5ZiwgMHhhMCwKKwkJCSAgICAgICAweGExLCAweGEyLCAweGEzLCAweGE0LCAweGE1LCAweGE2LCAweGE3LCAweGE4LAorCQkJICAgICAgIDB4YTksIDB4YWEsIDB4YWIsIDB4YWMsIDB4YWQsIDB4YWUsIDB4YWYsIDB4YjAsCisJCQkgICAgICAgMHhiMSwgMHhiMiwgMHhiMywgMHhiNCwgMHhiNSwgMHhiNiwgMHhiNywgMHhiOCwKKwkJCSAgICAgICAweGI5LCAweGJhLCAweGJiLCAweGJjLCAweGJkLCAweGJlLCAweGJmLCAweGMwLAorCQkJICAgICAgIDB4YzEsIDB4YzIsIDB4YzMsIDB4YzQsIDB4YzUsIDB4YzYsIDB4YzcsIDB4YzgsCisJCQkgICAgICAgMHhjOSwgMHhjYSwgMHhjYiwgMHhjYywgMHhjZCwgMHhjZSwgMHhjZiwgMHhkMCwKKwkJCSAgICAgICAweGQxLCAweGQyLCAweGQzLCAweGQ0LCAweGQ1LCAweGQ2LCAweGQ3LCAweGQ4LAorCQkJICAgICAgIDB4ZDksIDB4ZGEsIDB4ZGIsIDB4ZGMsIDB4ZGQsIDB4ZGUsIDB4ZGYsIDB4ZTAsCisJCQkgICAgICAgMHhlMSwgMHhlMiwgMHhlMywgMHhlNCwgMHhlNSwgMHhlNiwgMHhlNywgMHhlOCwKKwkJCSAgICAgICAweGU5LCAweGVhLCAweGViLCAweGVjLCAweGVkLCAweGVlLCAweGVmLCAweGYwIH0sCisJCS5wc2l6ZSA9IDI0MCwKKwkJLmRpZ2VzdCA9IHsgMHg3NSwgMHhkMywgMHhjNSwgMHgyNCB9LAorCQkubnAgPSAyLAorCQkudGFwID0geyAzMSwgMjA5IH0KKwl9LAorfTsKKworLyoKICAqIENpcGhlciBzcGVlZCB0ZXN0cwogICovCiBzdGF0aWMgc3RydWN0IGNpcGhlcl9zcGVlZCBhZXNfc3BlZWRfdGVtcGxhdGVbXSA9IHsKQEAgLTI5ODMsNyArMzE0Nyw3IEBACiAvKgogICogRGlnZXN0IHNwZWVkIHRlc3RzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZGlnZXN0X3NwZWVkIGdlbmVyaWNfZGlnZXN0X3NwZWVkX3RlbXBsYXRlW10gPSB7CitzdGF0aWMgc3RydWN0IGhhc2hfc3BlZWQgZ2VuZXJpY19oYXNoX3NwZWVkX3RlbXBsYXRlW10gPSB7CiAJeyAuYmxlbiA9IDE2LCAJLnBsZW4gPSAxNiwgfSwKIAl7IC5ibGVuID0gNjQsCS5wbGVuID0gMTYsIH0sCiAJeyAuYmxlbiA9IDY0LAkucGxlbiA9IDY0LCB9LApkaWZmIC0tZ2l0IGEvY3J5cHRvL3RlYS5jIGIvY3J5cHRvL3RlYS5jCmluZGV4IDUzNjdhZGMuLjFjNTRlMjYgMTAwNjQ0Ci0tLSBhL2NyeXB0by90ZWEuYworKysgYi9jcnlwdG8vdGVhLmMKQEAgLTQ2LDE2ICs0NiwxMCBAQAogfTsKIAogc3RhdGljIGludCB0ZWFfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCi0JCSAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1MzIgKmZsYWdzKQorCQkgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKIAlzdHJ1Y3QgdGVhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7Ci0JCi0JaWYgKGtleV9sZW4gIT0gMTYpCi0JewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWN0eC0+S0VZWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKIAljdHgtPktFWVsxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CkBAIC0xMjUsMTYgKzExOSwxMCBAQAogfQogCiBzdGF0aWMgaW50IHh0ZWFfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICppbl9rZXksCi0JCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbiwgdTMyICpmbGFncykKKwkJICAgICAgIHVuc2lnbmVkIGludCBrZXlfbGVuKQogewogCXN0cnVjdCB4dGVhX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKIAljb25zdCBfX2xlMzIgKmtleSA9IChjb25zdCBfX2xlMzIgKilpbl9rZXk7Ci0JCi0JaWYgKGtleV9sZW4gIT0gMTYpCi0JewotCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCWN0eC0+S0VZWzBdID0gbGUzMl90b19jcHUoa2V5WzBdKTsKIAljdHgtPktFWVsxXSA9IGxlMzJfdG9fY3B1KGtleVsxXSk7CmRpZmYgLS1naXQgYS9jcnlwdG8vdHdvZmlzaC5jIGIvY3J5cHRvL3R3b2Zpc2guYwppbmRleCBlYzI0ODgyLi40OTc5YTJiIDEwMDY0NAotLS0gYS9jcnlwdG8vdHdvZmlzaC5jCisrKyBiL2NyeXB0by90d29maXNoLmMKQEAgLTM5LDYgKzM5LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGNyeXB0by90d29maXNoLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC00Niw1MzQgKzQ3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAotCi0vKiBUaGUgbGFyZ2UgcHJlY29tcHV0ZWQgdGFibGVzIGZvciB0aGUgVHdvZmlzaCBjaXBoZXIgKHR3b2Zpc2guYykKLSAqIFRha2VuIGZyb20gdGhlIHNhbWUgc291cmNlIGFzIHR3b2Zpc2guYwotICogTWFyYyBNdXR6IDxNYXJjQE11dHouY29tPgotICovCi0KLS8qIFRoZXNlIHR3byB0YWJsZXMgYXJlIHRoZSBxMCBhbmQgcTEgcGVybXV0YXRpb25zLCBleGFjdGx5IGFzIGRlc2NyaWJlZCBpbgotICogdGhlIFR3b2Zpc2ggcGFwZXIuICovCi0KLXN0YXRpYyBjb25zdCB1OCBxMFsyNTZdID0gewotICAgMHhBOSwgMHg2NywgMHhCMywgMHhFOCwgMHgwNCwgMHhGRCwgMHhBMywgMHg3NiwgMHg5QSwgMHg5MiwgMHg4MCwgMHg3OCwKLSAgIDB4RTQsIDB4REQsIDB4RDEsIDB4MzgsIDB4MEQsIDB4QzYsIDB4MzUsIDB4OTgsIDB4MTgsIDB4RjcsIDB4RUMsIDB4NkMsCi0gICAweDQzLCAweDc1LCAweDM3LCAweDI2LCAweEZBLCAweDEzLCAweDk0LCAweDQ4LCAweEYyLCAweEQwLCAweDhCLCAweDMwLAotICAgMHg4NCwgMHg1NCwgMHhERiwgMHgyMywgMHgxOSwgMHg1QiwgMHgzRCwgMHg1OSwgMHhGMywgMHhBRSwgMHhBMiwgMHg4MiwKLSAgIDB4NjMsIDB4MDEsIDB4ODMsIDB4MkUsIDB4RDksIDB4NTEsIDB4OUIsIDB4N0MsIDB4QTYsIDB4RUIsIDB4QTUsIDB4QkUsCi0gICAweDE2LCAweDBDLCAweEUzLCAweDYxLCAweEMwLCAweDhDLCAweDNBLCAweEY1LCAweDczLCAweDJDLCAweDI1LCAweDBCLAotICAgMHhCQiwgMHg0RSwgMHg4OSwgMHg2QiwgMHg1MywgMHg2QSwgMHhCNCwgMHhGMSwgMHhFMSwgMHhFNiwgMHhCRCwgMHg0NSwKLSAgIDB4RTIsIDB4RjQsIDB4QjYsIDB4NjYsIDB4Q0MsIDB4OTUsIDB4MDMsIDB4NTYsIDB4RDQsIDB4MUMsIDB4MUUsIDB4RDcsCi0gICAweEZCLCAweEMzLCAweDhFLCAweEI1LCAweEU5LCAweENGLCAweEJGLCAweEJBLCAweEVBLCAweDc3LCAweDM5LCAweEFGLAotICAgMHgzMywgMHhDOSwgMHg2MiwgMHg3MSwgMHg4MSwgMHg3OSwgMHgwOSwgMHhBRCwgMHgyNCwgMHhDRCwgMHhGOSwgMHhEOCwKLSAgIDB4RTUsIDB4QzUsIDB4QjksIDB4NEQsIDB4NDQsIDB4MDgsIDB4ODYsIDB4RTcsIDB4QTEsIDB4MUQsIDB4QUEsIDB4RUQsCi0gICAweDA2LCAweDcwLCAweEIyLCAweEQyLCAweDQxLCAweDdCLCAweEEwLCAweDExLCAweDMxLCAweEMyLCAweDI3LCAweDkwLAotICAgMHgyMCwgMHhGNiwgMHg2MCwgMHhGRiwgMHg5NiwgMHg1QywgMHhCMSwgMHhBQiwgMHg5RSwgMHg5QywgMHg1MiwgMHgxQiwKLSAgIDB4NUYsIDB4OTMsIDB4MEEsIDB4RUYsIDB4OTEsIDB4ODUsIDB4NDksIDB4RUUsIDB4MkQsIDB4NEYsIDB4OEYsIDB4M0IsCi0gICAweDQ3LCAweDg3LCAweDZELCAweDQ2LCAweEQ2LCAweDNFLCAweDY5LCAweDY0LCAweDJBLCAweENFLCAweENCLCAweDJGLAotICAgMHhGQywgMHg5NywgMHgwNSwgMHg3QSwgMHhBQywgMHg3RiwgMHhENSwgMHgxQSwgMHg0QiwgMHgwRSwgMHhBNywgMHg1QSwKLSAgIDB4MjgsIDB4MTQsIDB4M0YsIDB4MjksIDB4ODgsIDB4M0MsIDB4NEMsIDB4MDIsIDB4QjgsIDB4REEsIDB4QjAsIDB4MTcsCi0gICAweDU1LCAweDFGLCAweDhBLCAweDdELCAweDU3LCAweEM3LCAweDhELCAweDc0LCAweEI3LCAweEM0LCAweDlGLCAweDcyLAotICAgMHg3RSwgMHgxNSwgMHgyMiwgMHgxMiwgMHg1OCwgMHgwNywgMHg5OSwgMHgzNCwgMHg2RSwgMHg1MCwgMHhERSwgMHg2OCwKLSAgIDB4NjUsIDB4QkMsIDB4REIsIDB4RjgsIDB4QzgsIDB4QTgsIDB4MkIsIDB4NDAsIDB4REMsIDB4RkUsIDB4MzIsIDB4QTQsCi0gICAweENBLCAweDEwLCAweDIxLCAweEYwLCAweEQzLCAweDVELCAweDBGLCAweDAwLCAweDZGLCAweDlELCAweDM2LCAweDQyLAotICAgMHg0QSwgMHg1RSwgMHhDMSwgMHhFMAotfTsKLQotc3RhdGljIGNvbnN0IHU4IHExWzI1Nl0gPSB7Ci0gICAweDc1LCAweEYzLCAweEM2LCAweEY0LCAweERCLCAweDdCLCAweEZCLCAweEM4LCAweDRBLCAweEQzLCAweEU2LCAweDZCLAotICAgMHg0NSwgMHg3RCwgMHhFOCwgMHg0QiwgMHhENiwgMHgzMiwgMHhEOCwgMHhGRCwgMHgzNywgMHg3MSwgMHhGMSwgMHhFMSwKLSAgIDB4MzAsIDB4MEYsIDB4RjgsIDB4MUIsIDB4ODcsIDB4RkEsIDB4MDYsIDB4M0YsIDB4NUUsIDB4QkEsIDB4QUUsIDB4NUIsCi0gICAweDhBLCAweDAwLCAweEJDLCAweDlELCAweDZELCAweEMxLCAweEIxLCAweDBFLCAweDgwLCAweDVELCAweEQyLCAweEQ1LAotICAgMHhBMCwgMHg4NCwgMHgwNywgMHgxNCwgMHhCNSwgMHg5MCwgMHgyQywgMHhBMywgMHhCMiwgMHg3MywgMHg0QywgMHg1NCwKLSAgIDB4OTIsIDB4NzQsIDB4MzYsIDB4NTEsIDB4MzgsIDB4QjAsIDB4QkQsIDB4NUEsIDB4RkMsIDB4NjAsIDB4NjIsIDB4OTYsCi0gICAweDZDLCAweDQyLCAweEY3LCAweDEwLCAweDdDLCAweDI4LCAweDI3LCAweDhDLCAweDEzLCAweDk1LCAweDlDLCAweEM3LAotICAgMHgyNCwgMHg0NiwgMHgzQiwgMHg3MCwgMHhDQSwgMHhFMywgMHg4NSwgMHhDQiwgMHgxMSwgMHhEMCwgMHg5MywgMHhCOCwKLSAgIDB4QTYsIDB4ODMsIDB4MjAsIDB4RkYsIDB4OUYsIDB4NzcsIDB4QzMsIDB4Q0MsIDB4MDMsIDB4NkYsIDB4MDgsIDB4QkYsCi0gICAweDQwLCAweEU3LCAweDJCLCAweEUyLCAweDc5LCAweDBDLCAweEFBLCAweDgyLCAweDQxLCAweDNBLCAweEVBLCAweEI5LAotICAgMHhFNCwgMHg5QSwgMHhBNCwgMHg5NywgMHg3RSwgMHhEQSwgMHg3QSwgMHgxNywgMHg2NiwgMHg5NCwgMHhBMSwgMHgxRCwKLSAgIDB4M0QsIDB4RjAsIDB4REUsIDB4QjMsIDB4MEIsIDB4NzIsIDB4QTcsIDB4MUMsIDB4RUYsIDB4RDEsIDB4NTMsIDB4M0UsCi0gICAweDhGLCAweDMzLCAweDI2LCAweDVGLCAweEVDLCAweDc2LCAweDJBLCAweDQ5LCAweDgxLCAweDg4LCAweEVFLCAweDIxLAotICAgMHhDNCwgMHgxQSwgMHhFQiwgMHhEOSwgMHhDNSwgMHgzOSwgMHg5OSwgMHhDRCwgMHhBRCwgMHgzMSwgMHg4QiwgMHgwMSwKLSAgIDB4MTgsIDB4MjMsIDB4REQsIDB4MUYsIDB4NEUsIDB4MkQsIDB4RjksIDB4NDgsIDB4NEYsIDB4RjIsIDB4NjUsIDB4OEUsCi0gICAweDc4LCAweDVDLCAweDU4LCAweDE5LCAweDhELCAweEU1LCAweDk4LCAweDU3LCAweDY3LCAweDdGLCAweDA1LCAweDY0LAotICAgMHhBRiwgMHg2MywgMHhCNiwgMHhGRSwgMHhGNSwgMHhCNywgMHgzQywgMHhBNSwgMHhDRSwgMHhFOSwgMHg2OCwgMHg0NCwKLSAgIDB4RTAsIDB4NEQsIDB4NDMsIDB4NjksIDB4MjksIDB4MkUsIDB4QUMsIDB4MTUsIDB4NTksIDB4QTgsIDB4MEEsIDB4OUUsCi0gICAweDZFLCAweDQ3LCAweERGLCAweDM0LCAweDM1LCAweDZBLCAweENGLCAweERDLCAweDIyLCAweEM5LCAweEMwLCAweDlCLAotICAgMHg4OSwgMHhENCwgMHhFRCwgMHhBQiwgMHgxMiwgMHhBMiwgMHgwRCwgMHg1MiwgMHhCQiwgMHgwMiwgMHgyRiwgMHhBOSwKLSAgIDB4RDcsIDB4NjEsIDB4MUUsIDB4QjQsIDB4NTAsIDB4MDQsIDB4RjYsIDB4QzIsIDB4MTYsIDB4MjUsIDB4ODYsIDB4NTYsCi0gICAweDU1LCAweDA5LCAweEJFLCAweDkxCi19OwotCi0vKiBUaGVzZSBNRFMgdGFibGVzIGFyZSBhY3R1YWxseSB0YWJsZXMgb2YgTURTIGNvbXBvc2VkIHdpdGggcTAgYW5kIHExLAotICogYmVjYXVzZSBpdCBpcyBvbmx5IGV2ZXIgdXNlZCB0aGF0IHdheSBhbmQgd2UgY2FuIHNhdmUgc29tZSB0aW1lIGJ5Ci0gKiBwcmVjb21wdXRpbmcuICBPZiBjb3Vyc2UgdGhlIG1haW4gc2F2aW5nIGNvbWVzIGZyb20gcHJlY29tcHV0aW5nIHRoZQotICogR0YoMl44KSBtdWx0aXBsaWNhdGlvbiBpbnZvbHZlZCBpbiB0aGUgTURTIG1hdHJpeCBtdWx0aXBseTsgYnkgbG9va2luZwotICogdGhpbmdzIHVwIGluIHRoZXNlIHRhYmxlcyB3ZSByZWR1Y2UgdGhlIG1hdHJpeCBtdWx0aXBseSB0byBmb3VyIGxvb2t1cHMKLSAqIGFuZCB0aHJlZSBYT1JzLiAgU2VtaS1mb3JtYWxseSwgdGhlIGRlZmluaXRpb24gb2YgdGhlc2UgdGFibGVzIGlzOgotICogbWRzWzBdW2ldID0gTURTIChxMVtpXSAwIDAgMCleVCAgbWRzWzFdW2ldID0gTURTICgwIHEwW2ldIDAgMCleVAotICogbWRzWzJdW2ldID0gTURTICgwIDAgcTFbaV0gMCleVCAgbWRzWzNdW2ldID0gTURTICgwIDAgMCBxMFtpXSleVAotICogd2hlcmUgXlQgbWVhbnMgInRyYW5zcG9zZSIsIHRoZSBtYXRyaXggbXVsdGlwbHkgaXMgcGVyZm9ybWVkIGluIEdGKDJeOCkKLSAqIHJlcHJlc2VudGVkIGFzIEdGKDIpW3hdL3YoeCkgd2hlcmUgdih4KT14XjgreF42K3heNSt4XjMrMSBhcyBkZXNjcmliZWQKLSAqIGJ5IFNjaG5laWVyIGV0IGFsLCBhbmQgSSdtIGNhc3VhbGx5IGdsb3NzaW5nIG92ZXIgdGhlIGJ5dGUvd29yZAotICogY29udmVyc2lvbiBpc3N1ZXMuICovCi0KLXN0YXRpYyBjb25zdCB1MzIgbWRzWzRdWzI1Nl0gPSB7Ci0gICB7MHhCQ0JDMzI3NSwgMHhFQ0VDMjFGMywgMHgyMDIwNDNDNiwgMHhCM0IzQzlGNCwgMHhEQURBMDNEQiwgMHgwMjAyOEI3QiwKLSAgICAweEUyRTIyQkZCLCAweDlFOUVGQUM4LCAweEM5QzlFQzRBLCAweEQ0RDQwOUQzLCAweDE4MTg2QkU2LCAweDFFMUU5RjZCLAotICAgIDB4OTg5ODBFNDUsIDB4QjJCMjM4N0QsIDB4QTZBNkQyRTgsIDB4MjYyNkI3NEIsIDB4M0MzQzU3RDYsIDB4OTM5MzhBMzIsCi0gICAgMHg4MjgyRUVEOCwgMHg1MjUyOThGRCwgMHg3QjdCRDQzNywgMHhCQkJCMzc3MSwgMHg1QjVCOTdGMSwgMHg0NzQ3ODNFMSwKLSAgICAweDI0MjQzQzMwLCAweDUxNTFFMjBGLCAweEJBQkFDNkY4LCAweDRBNEFGMzFCLCAweEJGQkY0ODg3LCAweDBEMEQ3MEZBLAotICAgIDB4QjBCMEIzMDYsIDB4NzU3NURFM0YsIDB4RDJEMkZENUUsIDB4N0Q3RDIwQkEsIDB4NjY2NjMxQUUsIDB4M0EzQUEzNUIsCi0gICAgMHg1OTU5MUM4QSwgMHgwMDAwMDAwMCwgMHhDRENEOTNCQywgMHgxQTFBRTA5RCwgMHhBRUFFMkM2RCwgMHg3RjdGQUJDMSwKLSAgICAweDJCMkJDN0IxLCAweEJFQkVCOTBFLCAweEUwRTBBMDgwLCAweDhBOEExMDVELCAweDNCM0I1MkQyLCAweDY0NjRCQUQ1LAotICAgIDB4RDhEODg4QTAsIDB4RTdFN0E1ODQsIDB4NUY1RkU4MDcsIDB4MUIxQjExMTQsIDB4MkMyQ0MyQjUsIDB4RkNGQ0I0OTAsCi0gICAgMHgzMTMxMjcyQywgMHg4MDgwNjVBMywgMHg3MzczMkFCMiwgMHgwQzBDODE3MywgMHg3OTc5NUY0QywgMHg2QjZCNDE1NCwKLSAgICAweDRCNEIwMjkyLCAweDUzNTM2OTc0LCAweDk0OTQ4RjM2LCAweDgzODMxRjUxLCAweDJBMkEzNjM4LCAweEM0QzQ5Q0IwLAotICAgIDB4MjIyMkM4QkQsIDB4RDVENUY4NUEsIDB4QkRCREMzRkMsIDB4NDg0ODc4NjAsIDB4RkZGRkNFNjIsIDB4NEM0QzA3OTYsCi0gICAgMHg0MTQxNzc2QywgMHhDN0M3RTY0MiwgMHhFQkVCMjRGNywgMHgxQzFDMTQxMCwgMHg1RDVENjM3QywgMHgzNjM2MjIyOCwKLSAgICAweDY3NjdDMDI3LCAweEU5RTlBRjhDLCAweDQ0NDRGOTEzLCAweDE0MTRFQTk1LCAweEY1RjVCQjlDLCAweENGQ0YxOEM3LAotICAgIDB4M0YzRjJEMjQsIDB4QzBDMEUzNDYsIDB4NzI3MkRCM0IsIDB4NTQ1NDZDNzAsIDB4MjkyOTRDQ0EsIDB4RjBGMDM1RTMsCi0gICAgMHgwODA4RkU4NSwgMHhDNkM2MTdDQiwgMHhGM0YzNEYxMSwgMHg4QzhDRTREMCwgMHhBNEE0NTk5MywgMHhDQUNBOTZCOCwKLSAgICAweDY4NjgzQkE2LCAweEI4Qjg0RDgzLCAweDM4MzgyODIwLCAweEU1RTUyRUZGLCAweEFEQUQ1NjlGLCAweDBCMEI4NDc3LAotICAgIDB4QzhDODFEQzMsIDB4OTk5OUZGQ0MsIDB4NTg1OEVEMDMsIDB4MTkxOTlBNkYsIDB4MEUwRTBBMDgsIDB4OTU5NTdFQkYsCi0gICAgMHg3MDcwNTA0MCwgMHhGN0Y3MzBFNywgMHg2RTZFQ0YyQiwgMHgxRjFGNkVFMiwgMHhCNUI1M0Q3OSwgMHgwOTA5MEYwQywKLSAgICAweDYxNjEzNEFBLCAweDU3NTcxNjgyLCAweDlGOUYwQjQxLCAweDlEOUQ4MDNBLCAweDExMTE2NEVBLCAweDI1MjVDREI5LAotICAgIDB4QUZBRkRERTQsIDB4NDU0NTA4OUEsIDB4REZERjhEQTQsIDB4QTNBMzVDOTcsIDB4RUFFQUQ1N0UsIDB4MzUzNTU4REEsCi0gICAgMHhFREVERDA3QSwgMHg0MzQzRkMxNywgMHhGOEY4Q0I2NiwgMHhGQkZCQjE5NCwgMHgzNzM3RDNBMSwgMHhGQUZBNDAxRCwKLSAgICAweEMyQzI2ODNELCAweEI0QjRDQ0YwLCAweDMyMzI1RERFLCAweDlDOUM3MUIzLCAweDU2NTZFNzBCLCAweEUzRTNEQTcyLAotICAgIDB4ODc4NzYwQTcsIDB4MTUxNTFCMUMsIDB4RjlGOTNBRUYsIDB4NjM2M0JGRDEsIDB4MzQzNEE5NTMsIDB4OUE5QTg1M0UsCi0gICAgMHhCMUIxNDI4RiwgMHg3QzdDRDEzMywgMHg4ODg4OUIyNiwgMHgzRDNEQTY1RiwgMHhBMUExRDdFQywgMHhFNEU0REY3NiwKLSAgICAweDgxODE5NDJBLCAweDkxOTEwMTQ5LCAweDBGMEZGQjgxLCAweEVFRUVBQTg4LCAweDE2MTY2MUVFLCAweEQ3RDc3MzIxLAotICAgIDB4OTc5N0Y1QzQsIDB4QTVBNUE4MUEsIDB4RkVGRTNGRUIsIDB4NkQ2REI1RDksIDB4Nzg3OEFFQzUsIDB4QzVDNTZEMzksCi0gICAgMHgxRDFERTU5OSwgMHg3Njc2QTRDRCwgMHgzRTNFRENBRCwgMHhDQkNCNjczMSwgMHhCNkI2NDc4QiwgMHhFRkVGNUIwMSwKLSAgICAweDEyMTIxRTE4LCAweDYwNjBDNTIzLCAweDZBNkFCMERELCAweDRENERGNjFGLCAweENFQ0VFOTRFLCAweERFREU3QzJELAotICAgIDB4NTU1NTlERjksIDB4N0U3RTVBNDgsIDB4MjEyMUIyNEYsIDB4MDMwMzdBRjIsIDB4QTBBMDI2NjUsIDB4NUU1RTE5OEUsCi0gICAgMHg1QTVBNjY3OCwgMHg2NTY1NEI1QywgMHg2MjYyNEU1OCwgMHhGREZENDUxOSwgMHgwNjA2RjQ4RCwgMHg0MDQwODZFNSwKLSAgICAweEYyRjJCRTk4LCAweDMzMzNBQzU3LCAweDE3MTc5MDY3LCAweDA1MDU4RTdGLCAweEU4RTg1RTA1LCAweDRGNEY3RDY0LAotICAgIDB4ODk4OTZBQUYsIDB4MTAxMDk1NjMsIDB4NzQ3NDJGQjYsIDB4MEEwQTc1RkUsIDB4NUM1QzkyRjUsIDB4OUI5Qjc0QjcsCi0gICAgMHgyRDJEMzMzQywgMHgzMDMwRDZBNSwgMHgyRTJFNDlDRSwgMHg0OTQ5ODlFOSwgMHg0NjQ2NzI2OCwgMHg3Nzc3NTU0NCwKLSAgICAweEE4QThEOEUwLCAweDk2OTYwNDRELCAweDI4MjhCRDQzLCAweEE5QTkyOTY5LCAweEQ5RDk3OTI5LCAweDg2ODY5MTJFLAotICAgIDB4RDFEMTg3QUMsIDB4RjRGNDRBMTUsIDB4OEQ4RDE1NTksIDB4RDZENjgyQTgsIDB4QjlCOUJDMEEsIDB4NDI0MjBEOUUsCi0gICAgMHhGNkY2QzE2RSwgMHgyRjJGQjg0NywgMHhEREREMDZERiwgMHgyMzIzMzkzNCwgMHhDQ0NDNjIzNSwgMHhGMUYxQzQ2QSwKLSAgICAweEMxQzExMkNGLCAweDg1ODVFQkRDLCAweDhGOEY5RTIyLCAweDcxNzFBMUM5LCAweDkwOTBGMEMwLCAweEFBQUE1MzlCLAotICAgIDB4MDEwMUYxODksIDB4OEI4QkUxRDQsIDB4NEU0RThDRUQsIDB4OEU4RTZGQUIsIDB4QUJBQkEyMTIsIDB4NkY2RjNFQTIsCi0gICAgMHhFNkU2NTQwRCwgMHhEQkRCRjI1MiwgMHg5MjkyN0JCQiwgMHhCN0I3QjYwMiwgMHg2OTY5Q0EyRiwgMHgzOTM5RDlBOSwKLSAgICAweEQzRDMwQ0Q3LCAweEE3QTcyMzYxLCAweEEyQTJBRDFFLCAweEMzQzM5OUI0LCAweDZDNkM0NDUwLCAweDA3MDcwNTA0LAotICAgIDB4MDQwNDdGRjYsIDB4MjcyNzQ2QzIsIDB4QUNBQ0E3MTYsIDB4RDBEMDc2MjUsIDB4NTA1MDEzODYsIDB4RENEQ0Y3NTYsCi0gICAgMHg4NDg0MUE1NSwgMHhFMUUxNTEwOSwgMHg3QTdBMjVCRSwgMHgxMzEzRUY5MX0sCi0KLSAgIHsweEE5RDkzOTM5LCAweDY3OTAxNzE3LCAweEIzNzE5QzlDLCAweEU4RDJBNkE2LCAweDA0MDUwNzA3LCAweEZEOTg1MjUyLAotICAgIDB4QTM2NTgwODAsIDB4NzZERkU0RTQsIDB4OUEwODQ1NDUsIDB4OTIwMjRCNEIsIDB4ODBBMEUwRTAsIDB4Nzg2NjVBNUEsCi0gICAgMHhFNEREQUZBRiwgMHhEREIwNkE2QSwgMHhEMUJGNjM2MywgMHgzODM2MkEyQSwgMHgwRDU0RTZFNiwgMHhDNjQzMjAyMCwKLSAgICAweDM1NjJDQ0NDLCAweDk4QkVGMkYyLCAweDE4MUUxMjEyLCAweEY3MjRFQkVCLCAweEVDRDdBMUExLCAweDZDNzc0MTQxLAotICAgIDB4NDNCRDI4MjgsIDB4NzUzMkJDQkMsIDB4MzdENDdCN0IsIDB4MjY5Qjg4ODgsIDB4RkE3MDBEMEQsIDB4MTNGOTQ0NDQsCi0gICAgMHg5NEIxRkJGQiwgMHg0ODVBN0U3RSwgMHhGMjdBMDMwMywgMHhEMEU0OEM4QywgMHg4QjQ3QjZCNiwgMHgzMDNDMjQyNCwKLSAgICAweDg0QTVFN0U3LCAweDU0NDE2QjZCLCAweERGMDZERERELCAweDIzQzU2MDYwLCAweDE5NDVGREZELCAweDVCQTMzQTNBLAotICAgIDB4M0Q2OEMyQzIsIDB4NTkxNThEOEQsIDB4RjMyMUVDRUMsIDB4QUUzMTY2NjYsIDB4QTIzRTZGNkYsIDB4ODIxNjU3NTcsCi0gICAgMHg2Mzk1MTAxMCwgMHgwMTVCRUZFRiwgMHg4MzREQjhCOCwgMHgyRTkxODY4NiwgMHhEOUI1NkQ2RCwgMHg1MTFGODM4MywKLSAgICAweDlCNTNBQUFBLCAweDdDNjM1RDVELCAweEE2M0I2ODY4LCAweEVCM0ZGRUZFLCAweEE1RDYzMDMwLCAweEJFMjU3QTdBLAotICAgIDB4MTZBN0FDQUMsIDB4MEMwRjA5MDksIDB4RTMzNUYwRjAsIDB4NjEyM0E3QTcsIDB4QzBGMDkwOTAsIDB4OENBRkU5RTksCi0gICAgMHgzQTgwOUQ5RCwgMHhGNTkyNUM1QywgMHg3MzgxMEMwQywgMHgyQzI3MzEzMSwgMHgyNTc2RDBEMCwgMHgwQkU3NTY1NiwKLSAgICAweEJCN0I5MjkyLCAweDRFRTlDRUNFLCAweDg5RjEwMTAxLCAweDZCOUYxRTFFLCAweDUzQTkzNDM0LCAweDZBQzRGMUYxLAotICAgIDB4QjQ5OUMzQzMsIDB4RjE5NzVCNUIsIDB4RTE4MzQ3NDcsIDB4RTY2QjE4MTgsIDB4QkRDODIyMjIsIDB4NDUwRTk4OTgsCi0gICAgMHhFMjZFMUYxRiwgMHhGNEM5QjNCMywgMHhCNjJGNzQ3NCwgMHg2NkNCRjhGOCwgMHhDQ0ZGOTk5OSwgMHg5NUVBMTQxNCwKLSAgICAweDAzRUQ1ODU4LCAweDU2RjdEQ0RDLCAweEQ0RTE4QjhCLCAweDFDMUIxNTE1LCAweDFFQURBMkEyLCAweEQ3MENEM0QzLAotICAgIDB4RkIyQkUyRTIsIDB4QzMxREM4QzgsIDB4OEUxOTVFNUUsIDB4QjVDMjJDMkMsIDB4RTk4OTQ5NDksIDB4Q0YxMkMxQzEsCi0gICAgMHhCRjdFOTU5NSwgMHhCQTIwN0Q3RCwgMHhFQTY0MTExMSwgMHg3Nzg0MEIwQiwgMHgzOTZEQzVDNSwgMHhBRjZBODk4OSwKLSAgICAweDMzRDE3QzdDLCAweEM5QTE3MTcxLCAweDYyQ0VGRkZGLCAweDcxMzdCQkJCLCAweDgxRkIwRjBGLCAweDc5M0RCNUI1LAotICAgIDB4MDk1MUUxRTEsIDB4QUREQzNFM0UsIDB4MjQyRDNGM0YsIDB4Q0RBNDc2NzYsIDB4Rjk5RDU1NTUsIDB4RDhFRTgyODIsCi0gICAgMHhFNTg2NDA0MCwgMHhDNUFFNzg3OCwgMHhCOUNEMjUyNSwgMHg0RDA0OTY5NiwgMHg0NDU1Nzc3NywgMHgwODBBMEUwRSwKLSAgICAweDg2MTM1MDUwLCAweEU3MzBGN0Y3LCAweEExRDMzNzM3LCAweDFENDBGQUZBLCAweEFBMzQ2MTYxLCAweEVEOEM0RTRFLAotICAgIDB4MDZCM0IwQjAsIDB4NzA2QzU0NTQsIDB4QjIyQTczNzMsIDB4RDI1MjNCM0IsIDB4NDEwQjlGOUYsIDB4N0I4QjAyMDIsCi0gICAgMHhBMDg4RDhEOCwgMHgxMTRGRjNGMywgMHgzMTY3Q0JDQiwgMHhDMjQ2MjcyNywgMHgyN0MwNjc2NywgMHg5MEI0RkNGQywKLSAgICAweDIwMjgzODM4LCAweEY2N0YwNDA0LCAweDYwNzg0ODQ4LCAweEZGMkVFNUU1LCAweDk2MDc0QzRDLCAweDVDNEI2NTY1LAotICAgIDB4QjFDNzJCMkIsIDB4QUI2RjhFOEUsIDB4OUUwRDQyNDIsIDB4OUNCQkY1RjUsIDB4NTJGMkRCREIsIDB4MUJGMzRBNEEsCi0gICAgMHg1RkE2M0QzRCwgMHg5MzU5QTRBNCwgMHgwQUJDQjlCOSwgMHhFRjNBRjlGOSwgMHg5MUVGMTMxMywgMHg4NUZFMDgwOCwKLSAgICAweDQ5MDE5MTkxLCAweEVFNjExNjE2LCAweDJEN0NERURFLCAweDRGQjIyMTIxLCAweDhGNDJCMUIxLCAweDNCREI3MjcyLAotICAgIDB4NDdCODJGMkYsIDB4ODc0OEJGQkYsIDB4NkQyQ0FFQUUsIDB4NDZFM0MwQzAsIDB4RDY1NzNDM0MsIDB4M0U4NTlBOUEsCi0gICAgMHg2OTI5QTlBOSwgMHg2NDdENEY0RiwgMHgyQTk0ODE4MSwgMHhDRTQ5MkUyRSwgMHhDQjE3QzZDNiwgMHgyRkNBNjk2OSwKLSAgICAweEZDQzNCREJELCAweDk3NUNBM0EzLCAweDA1NUVFOEU4LCAweDdBRDBFREVELCAweEFDODdEMUQxLCAweDdGOEUwNTA1LAotICAgIDB4RDVCQTY0NjQsIDB4MUFBOEE1QTUsIDB4NEJCNzI2MjYsIDB4MEVCOUJFQkUsIDB4QTc2MDg3ODcsIDB4NUFGOEQ1RDUsCi0gICAgMHgyODIyMzYzNiwgMHgxNDExMUIxQiwgMHgzRkRFNzU3NSwgMHgyOTc5RDlEOSwgMHg4OEFBRUVFRSwgMHgzQzMzMkQyRCwKLSAgICAweDRDNUY3OTc5LCAweDAyQjZCN0I3LCAweEI4OTZDQUNBLCAweERBNTgzNTM1LCAweEIwOUNDNEM0LCAweDE3RkM0MzQzLAotICAgIDB4NTUxQTg0ODQsIDB4MUZGNjRENEQsIDB4OEExQzU5NTksIDB4N0QzOEIyQjIsIDB4NTdBQzMzMzMsIDB4QzcxOENGQ0YsCi0gICAgMHg4REY0MDYwNiwgMHg3NDY5NTM1MywgMHhCNzc0OUI5QiwgMHhDNEY1OTc5NywgMHg5RjU2QURBRCwgMHg3MkRBRTNFMywKLSAgICAweDdFRDVFQUVBLCAweDE1NEFGNEY0LCAweDIyOUU4RjhGLCAweDEyQTJBQkFCLCAweDU4NEU2MjYyLCAweDA3RTg1RjVGLAotICAgIDB4OTlFNTFEMUQsIDB4MzQzOTIzMjMsIDB4NkVDMUY2RjYsIDB4NTA0NDZDNkMsIDB4REU1RDMyMzIsIDB4Njg3MjQ2NDYsCi0gICAgMHg2NTI2QTBBMCwgMHhCQzkzQ0RDRCwgMHhEQjAzREFEQSwgMHhGOEM2QkFCQSwgMHhDOEZBOUU5RSwgMHhBODgyRDZENiwKLSAgICAweDJCQ0Y2RTZFLCAweDQwNTA3MDcwLCAweERDRUI4NTg1LCAweEZFNzUwQTBBLCAweDMyOEE5MzkzLCAweEE0OERERkRGLAotICAgIDB4Q0E0QzI5MjksIDB4MTAxNDFDMUMsIDB4MjE3M0Q3RDcsIDB4RjBDQ0I0QjQsIDB4RDMwOUQ0RDQsIDB4NUQxMDhBOEEsCi0gICAgMHgwRkUyNTE1MSwgMHgwMDAwMDAwMCwgMHg2RjlBMTkxOSwgMHg5REUwMUExQSwgMHgzNjhGOTQ5NCwgMHg0MkU2QzdDNywKLSAgICAweDRBRUNDOUM5LCAweDVFRkREMkQyLCAweEMxQUI3RjdGLCAweEUwRDhBOEE4fSwKLQotICAgezB4QkM3NUJDMzIsIDB4RUNGM0VDMjEsIDB4MjBDNjIwNDMsIDB4QjNGNEIzQzksIDB4REFEQkRBMDMsIDB4MDI3QjAyOEIsCi0gICAgMHhFMkZCRTIyQiwgMHg5RUM4OUVGQSwgMHhDOTRBQzlFQywgMHhENEQzRDQwOSwgMHgxOEU2MTg2QiwgMHgxRTZCMUU5RiwKLSAgICAweDk4NDU5ODBFLCAweEIyN0RCMjM4LCAweEE2RThBNkQyLCAweDI2NEIyNkI3LCAweDNDRDYzQzU3LCAweDkzMzI5MzhBLAotICAgIDB4ODJEODgyRUUsIDB4NTJGRDUyOTgsIDB4N0IzNzdCRDQsIDB4QkI3MUJCMzcsIDB4NUJGMTVCOTcsIDB4NDdFMTQ3ODMsCi0gICAgMHgyNDMwMjQzQywgMHg1MTBGNTFFMiwgMHhCQUY4QkFDNiwgMHg0QTFCNEFGMywgMHhCRjg3QkY0OCwgMHgwREZBMEQ3MCwKLSAgICAweEIwMDZCMEIzLCAweDc1M0Y3NURFLCAweEQyNUVEMkZELCAweDdEQkE3RDIwLCAweDY2QUU2NjMxLCAweDNBNUIzQUEzLAotICAgIDB4NTk4QTU5MUMsIDB4MDAwMDAwMDAsIDB4Q0RCQ0NEOTMsIDB4MUE5RDFBRTAsIDB4QUU2REFFMkMsIDB4N0ZDMTdGQUIsCi0gICAgMHgyQkIxMkJDNywgMHhCRTBFQkVCOSwgMHhFMDgwRTBBMCwgMHg4QTVEOEExMCwgMHgzQkQyM0I1MiwgMHg2NEQ1NjRCQSwKLSAgICAweEQ4QTBEODg4LCAweEU3ODRFN0E1LCAweDVGMDc1RkU4LCAweDFCMTQxQjExLCAweDJDQjUyQ0MyLCAweEZDOTBGQ0I0LAotICAgIDB4MzEyQzMxMjcsIDB4ODBBMzgwNjUsIDB4NzNCMjczMkEsIDB4MEM3MzBDODEsIDB4Nzk0Qzc5NUYsIDB4NkI1NDZCNDEsCi0gICAgMHg0QjkyNEIwMiwgMHg1Mzc0NTM2OSwgMHg5NDM2OTQ4RiwgMHg4MzUxODMxRiwgMHgyQTM4MkEzNiwgMHhDNEIwQzQ5QywKLSAgICAweDIyQkQyMkM4LCAweEQ1NUFENUY4LCAweEJERkNCREMzLCAweDQ4NjA0ODc4LCAweEZGNjJGRkNFLCAweDRDOTY0QzA3LAotICAgIDB4NDE2QzQxNzcsIDB4Qzc0MkM3RTYsIDB4RUJGN0VCMjQsIDB4MUMxMDFDMTQsIDB4NUQ3QzVENjMsIDB4MzYyODM2MjIsCi0gICAgMHg2NzI3NjdDMCwgMHhFOThDRTlBRiwgMHg0NDEzNDRGOSwgMHgxNDk1MTRFQSwgMHhGNTlDRjVCQiwgMHhDRkM3Q0YxOCwKLSAgICAweDNGMjQzRjJELCAweEMwNDZDMEUzLCAweDcyM0I3MkRCLCAweDU0NzA1NDZDLCAweDI5Q0EyOTRDLCAweEYwRTNGMDM1LAotICAgIDB4MDg4NTA4RkUsIDB4QzZDQkM2MTcsIDB4RjMxMUYzNEYsIDB4OENEMDhDRTQsIDB4QTQ5M0E0NTksIDB4Q0FCOENBOTYsCi0gICAgMHg2OEE2NjgzQiwgMHhCODgzQjg0RCwgMHgzODIwMzgyOCwgMHhFNUZGRTUyRSwgMHhBRDlGQUQ1NiwgMHgwQjc3MEI4NCwKLSAgICAweEM4QzNDODFELCAweDk5Q0M5OUZGLCAweDU4MDM1OEVELCAweDE5NkYxOTlBLCAweDBFMDgwRTBBLCAweDk1QkY5NTdFLAotICAgIDB4NzA0MDcwNTAsIDB4RjdFN0Y3MzAsIDB4NkUyQjZFQ0YsIDB4MUZFMjFGNkUsIDB4QjU3OUI1M0QsIDB4MDkwQzA5MEYsCi0gICAgMHg2MUFBNjEzNCwgMHg1NzgyNTcxNiwgMHg5RjQxOUYwQiwgMHg5RDNBOUQ4MCwgMHgxMUVBMTE2NCwgMHgyNUI5MjVDRCwKLSAgICAweEFGRTRBRkRELCAweDQ1OUE0NTA4LCAweERGQTRERjhELCAweEEzOTdBMzVDLCAweEVBN0VFQUQ1LCAweDM1REEzNTU4LAotICAgIDB4RUQ3QUVERDAsIDB4NDMxNzQzRkMsIDB4Rjg2NkY4Q0IsIDB4RkI5NEZCQjEsIDB4MzdBMTM3RDMsIDB4RkExREZBNDAsCi0gICAgMHhDMjNEQzI2OCwgMHhCNEYwQjRDQywgMHgzMkRFMzI1RCwgMHg5Q0IzOUM3MSwgMHg1NjBCNTZFNywgMHhFMzcyRTNEQSwKLSAgICAweDg3QTc4NzYwLCAweDE1MUMxNTFCLCAweEY5RUZGOTNBLCAweDYzRDE2M0JGLCAweDM0NTMzNEE5LCAweDlBM0U5QTg1LAotICAgIDB4QjE4RkIxNDIsIDB4N0MzMzdDRDEsIDB4ODgyNjg4OUIsIDB4M0Q1RjNEQTYsIDB4QTFFQ0ExRDcsIDB4RTQ3NkU0REYsCi0gICAgMHg4MTJBODE5NCwgMHg5MTQ5OTEwMSwgMHgwRjgxMEZGQiwgMHhFRTg4RUVBQSwgMHgxNkVFMTY2MSwgMHhENzIxRDc3MywKLSAgICAweDk3QzQ5N0Y1LCAweEE1MUFBNUE4LCAweEZFRUJGRTNGLCAweDZERDk2REI1LCAweDc4QzU3OEFFLCAweEM1MzlDNTZELAotICAgIDB4MUQ5OTFERTUsIDB4NzZDRDc2QTQsIDB4M0VBRDNFREMsIDB4Q0IzMUNCNjcsIDB4QjY4QkI2NDcsIDB4RUYwMUVGNUIsCi0gICAgMHgxMjE4MTIxRSwgMHg2MDIzNjBDNSwgMHg2QURENkFCMCwgMHg0RDFGNERGNiwgMHhDRTRFQ0VFOSwgMHhERTJEREU3QywKLSAgICAweDU1Rjk1NTlELCAweDdFNDg3RTVBLCAweDIxNEYyMUIyLCAweDAzRjIwMzdBLCAweEEwNjVBMDI2LCAweDVFOEU1RTE5LAotICAgIDB4NUE3ODVBNjYsIDB4NjU1QzY1NEIsIDB4NjI1ODYyNEUsIDB4RkQxOUZENDUsIDB4MDY4RDA2RjQsIDB4NDBFNTQwODYsCi0gICAgMHhGMjk4RjJCRSwgMHgzMzU3MzNBQywgMHgxNzY3MTc5MCwgMHgwNTdGMDU4RSwgMHhFODA1RTg1RSwgMHg0RjY0NEY3RCwKLSAgICAweDg5QUY4OTZBLCAweDEwNjMxMDk1LCAweDc0QjY3NDJGLCAweDBBRkUwQTc1LCAweDVDRjU1QzkyLCAweDlCQjc5Qjc0LAotICAgIDB4MkQzQzJEMzMsIDB4MzBBNTMwRDYsIDB4MkVDRTJFNDksIDB4NDlFOTQ5ODksIDB4NDY2ODQ2NzIsIDB4Nzc0NDc3NTUsCi0gICAgMHhBOEUwQThEOCwgMHg5NjREOTYwNCwgMHgyODQzMjhCRCwgMHhBOTY5QTkyOSwgMHhEOTI5RDk3OSwgMHg4NjJFODY5MSwKLSAgICAweEQxQUNEMTg3LCAweEY0MTVGNDRBLCAweDhENTk4RDE1LCAweEQ2QThENjgyLCAweEI5MEFCOUJDLCAweDQyOUU0MjBELAotICAgIDB4RjY2RUY2QzEsIDB4MkY0NzJGQjgsIDB4RERERkREMDYsIDB4MjMzNDIzMzksIDB4Q0MzNUNDNjIsIDB4RjE2QUYxQzQsCi0gICAgMHhDMUNGQzExMiwgMHg4NURDODVFQiwgMHg4RjIyOEY5RSwgMHg3MUM5NzFBMSwgMHg5MEMwOTBGMCwgMHhBQTlCQUE1MywKLSAgICAweDAxODkwMUYxLCAweDhCRDQ4QkUxLCAweDRFRUQ0RThDLCAweDhFQUI4RTZGLCAweEFCMTJBQkEyLCAweDZGQTI2RjNFLAotICAgIDB4RTYwREU2NTQsIDB4REI1MkRCRjIsIDB4OTJCQjkyN0IsIDB4QjcwMkI3QjYsIDB4NjkyRjY5Q0EsIDB4MzlBOTM5RDksCi0gICAgMHhEM0Q3RDMwQywgMHhBNzYxQTcyMywgMHhBMjFFQTJBRCwgMHhDM0I0QzM5OSwgMHg2QzUwNkM0NCwgMHgwNzA0MDcwNSwKLSAgICAweDA0RjYwNDdGLCAweDI3QzIyNzQ2LCAweEFDMTZBQ0E3LCAweEQwMjVEMDc2LCAweDUwODY1MDEzLCAweERDNTZEQ0Y3LAotICAgIDB4ODQ1NTg0MUEsIDB4RTEwOUUxNTEsIDB4N0FCRTdBMjUsIDB4MTM5MTEzRUZ9LAotCi0gICB7MHhEOTM5QTlEOSwgMHg5MDE3Njc5MCwgMHg3MTlDQjM3MSwgMHhEMkE2RThEMiwgMHgwNTA3MDQwNSwgMHg5ODUyRkQ5OCwKLSAgICAweDY1ODBBMzY1LCAweERGRTQ3NkRGLCAweDA4NDU5QTA4LCAweDAyNEI5MjAyLCAweEEwRTA4MEEwLCAweDY2NUE3ODY2LAotICAgIDB4RERBRkU0REQsIDB4QjA2QUREQjAsIDB4QkY2M0QxQkYsIDB4MzYyQTM4MzYsIDB4NTRFNjBENTQsIDB4NDMyMEM2NDMsCi0gICAgMHg2MkNDMzU2MiwgMHhCRUYyOThCRSwgMHgxRTEyMTgxRSwgMHgyNEVCRjcyNCwgMHhEN0ExRUNENywgMHg3NzQxNkM3NywKLSAgICAweEJEMjg0M0JELCAweDMyQkM3NTMyLCAweEQ0N0IzN0Q0LCAweDlCODgyNjlCLCAweDcwMERGQTcwLCAweEY5NDQxM0Y5LAotICAgIDB4QjFGQjk0QjEsIDB4NUE3RTQ4NUEsIDB4N0EwM0YyN0EsIDB4RTQ4Q0QwRTQsIDB4NDdCNjhCNDcsIDB4M0MyNDMwM0MsCi0gICAgMHhBNUU3ODRBNSwgMHg0MTZCNTQ0MSwgMHgwNkREREYwNiwgMHhDNTYwMjNDNSwgMHg0NUZEMTk0NSwgMHhBMzNBNUJBMywKLSAgICAweDY4QzIzRDY4LCAweDE1OEQ1OTE1LCAweDIxRUNGMzIxLCAweDMxNjZBRTMxLCAweDNFNkZBMjNFLCAweDE2NTc4MjE2LAotICAgIDB4OTUxMDYzOTUsIDB4NUJFRjAxNUIsIDB4NERCODgzNEQsIDB4OTE4NjJFOTEsIDB4QjU2REQ5QjUsIDB4MUY4MzUxMUYsCi0gICAgMHg1M0FBOUI1MywgMHg2MzVEN0M2MywgMHgzQjY4QTYzQiwgMHgzRkZFRUIzRiwgMHhENjMwQTVENiwgMHgyNTdBQkUyNSwKLSAgICAweEE3QUMxNkE3LCAweDBGMDkwQzBGLCAweDM1RjBFMzM1LCAweDIzQTc2MTIzLCAweEYwOTBDMEYwLCAweEFGRTk4Q0FGLAotICAgIDB4ODA5RDNBODAsIDB4OTI1Q0Y1OTIsIDB4ODEwQzczODEsIDB4MjczMTJDMjcsIDB4NzZEMDI1NzYsIDB4RTc1NjBCRTcsCi0gICAgMHg3QjkyQkI3QiwgMHhFOUNFNEVFOSwgMHhGMTAxODlGMSwgMHg5RjFFNkI5RiwgMHhBOTM0NTNBOSwgMHhDNEYxNkFDNCwKLSAgICAweDk5QzNCNDk5LCAweDk3NUJGMTk3LCAweDgzNDdFMTgzLCAweDZCMThFNjZCLCAweEM4MjJCREM4LCAweDBFOTg0NTBFLAotICAgIDB4NkUxRkUyNkUsIDB4QzlCM0Y0QzksIDB4MkY3NEI2MkYsIDB4Q0JGODY2Q0IsIDB4RkY5OUNDRkYsIDB4RUExNDk1RUEsCi0gICAgMHhFRDU4MDNFRCwgMHhGN0RDNTZGNywgMHhFMThCRDRFMSwgMHgxQjE1MUMxQiwgMHhBREEyMUVBRCwgMHgwQ0QzRDcwQywKLSAgICAweDJCRTJGQjJCLCAweDFEQzhDMzFELCAweDE5NUU4RTE5LCAweEMyMkNCNUMyLCAweDg5NDlFOTg5LCAweDEyQzFDRjEyLAotICAgIDB4N0U5NUJGN0UsIDB4MjA3REJBMjAsIDB4NjQxMUVBNjQsIDB4ODQwQjc3ODQsIDB4NkRDNTM5NkQsIDB4NkE4OUFGNkEsCi0gICAgMHhEMTdDMzNEMSwgMHhBMTcxQzlBMSwgMHhDRUZGNjJDRSwgMHgzN0JCNzEzNywgMHhGQjBGODFGQiwgMHgzREI1NzkzRCwKLSAgICAweDUxRTEwOTUxLCAweERDM0VBRERDLCAweDJEM0YyNDJELCAweEE0NzZDREE0LCAweDlENTVGOTlELCAweEVFODJEOEVFLAotICAgIDB4ODY0MEU1ODYsIDB4QUU3OEM1QUUsIDB4Q0QyNUI5Q0QsIDB4MDQ5NjREMDQsIDB4NTU3NzQ0NTUsIDB4MEEwRTA4MEEsCi0gICAgMHgxMzUwODYxMywgMHgzMEY3RTczMCwgMHhEMzM3QTFEMywgMHg0MEZBMUQ0MCwgMHgzNDYxQUEzNCwgMHg4QzRFRUQ4QywKLSAgICAweEIzQjAwNkIzLCAweDZDNTQ3MDZDLCAweDJBNzNCMjJBLCAweDUyM0JEMjUyLCAweDBCOUY0MTBCLCAweDhCMDI3QjhCLAotICAgIDB4ODhEOEEwODgsIDB4NEZGMzExNEYsIDB4NjdDQjMxNjcsIDB4NDYyN0MyNDYsIDB4QzA2NzI3QzAsIDB4QjRGQzkwQjQsCi0gICAgMHgyODM4MjAyOCwgMHg3RjA0RjY3RiwgMHg3ODQ4NjA3OCwgMHgyRUU1RkYyRSwgMHgwNzRDOTYwNywgMHg0QjY1NUM0QiwKLSAgICAweEM3MkJCMUM3LCAweDZGOEVBQjZGLCAweDBENDI5RTBELCAweEJCRjU5Q0JCLCAweEYyREI1MkYyLCAweEYzNEExQkYzLAotICAgIDB4QTYzRDVGQTYsIDB4NTlBNDkzNTksIDB4QkNCOTBBQkMsIDB4M0FGOUVGM0EsIDB4RUYxMzkxRUYsIDB4RkUwODg1RkUsCi0gICAgMHgwMTkxNDkwMSwgMHg2MTE2RUU2MSwgMHg3Q0RFMkQ3QywgMHhCMjIxNEZCMiwgMHg0MkIxOEY0MiwgMHhEQjcyM0JEQiwKLSAgICAweEI4MkY0N0I4LCAweDQ4QkY4NzQ4LCAweDJDQUU2RDJDLCAweEUzQzA0NkUzLCAweDU3M0NENjU3LCAweDg1OUEzRTg1LAotICAgIDB4MjlBOTY5MjksIDB4N0Q0RjY0N0QsIDB4OTQ4MTJBOTQsIDB4NDkyRUNFNDksIDB4MTdDNkNCMTcsIDB4Q0E2OTJGQ0EsCi0gICAgMHhDM0JERkNDMywgMHg1Q0EzOTc1QywgMHg1RUU4MDU1RSwgMHhEMEVEN0FEMCwgMHg4N0QxQUM4NywgMHg4RTA1N0Y4RSwKLSAgICAweEJBNjRENUJBLCAweEE4QTUxQUE4LCAweEI3MjY0QkI3LCAweEI5QkUwRUI5LCAweDYwODdBNzYwLCAweEY4RDU1QUY4LAotICAgIDB4MjIzNjI4MjIsIDB4MTExQjE0MTEsIDB4REU3NTNGREUsIDB4NzlEOTI5NzksIDB4QUFFRTg4QUEsIDB4MzMyRDNDMzMsCi0gICAgMHg1Rjc5NEM1RiwgMHhCNkI3MDJCNiwgMHg5NkNBQjg5NiwgMHg1ODM1REE1OCwgMHg5Q0M0QjA5QywgMHhGQzQzMTdGQywKLSAgICAweDFBODQ1NTFBLCAweEY2NEQxRkY2LCAweDFDNTk4QTFDLCAweDM4QjI3RDM4LCAweEFDMzM1N0FDLCAweDE4Q0ZDNzE4LAotICAgIDB4RjQwNjhERjQsIDB4Njk1Mzc0NjksIDB4NzQ5QkI3NzQsIDB4RjU5N0M0RjUsIDB4NTZBRDlGNTYsIDB4REFFMzcyREEsCi0gICAgMHhENUVBN0VENSwgMHg0QUY0MTU0QSwgMHg5RThGMjI5RSwgMHhBMkFCMTJBMiwgMHg0RTYyNTg0RSwgMHhFODVGMDdFOCwKLSAgICAweEU1MUQ5OUU1LCAweDM5MjMzNDM5LCAweEMxRjY2RUMxLCAweDQ0NkM1MDQ0LCAweDVEMzJERTVELCAweDcyNDY2ODcyLAotICAgIDB4MjZBMDY1MjYsIDB4OTNDREJDOTMsIDB4MDNEQURCMDMsIDB4QzZCQUY4QzYsIDB4RkE5RUM4RkEsIDB4ODJENkE4ODIsCi0gICAgMHhDRjZFMkJDRiwgMHg1MDcwNDA1MCwgMHhFQjg1RENFQiwgMHg3NTBBRkU3NSwgMHg4QTkzMzI4QSwgMHg4RERGQTQ4RCwKLSAgICAweDRDMjlDQTRDLCAweDE0MUMxMDE0LCAweDczRDcyMTczLCAweENDQjRGMENDLCAweDA5RDREMzA5LCAweDEwOEE1RDEwLAotICAgIDB4RTI1MTBGRTIsIDB4MDAwMDAwMDAsIDB4OUExOTZGOUEsIDB4RTAxQTlERTAsIDB4OEY5NDM2OEYsIDB4RTZDNzQyRTYsCi0gICAgMHhFQ0M5NEFFQywgMHhGREQyNUVGRCwgMHhBQjdGQzFBQiwgMHhEOEE4RTBEOH0KLX07Ci0KLS8qIFRoZSBleHBfdG9fcG9seSBhbmQgcG9seV90b19leHAgdGFibGVzIGFyZSB1c2VkIHRvIHBlcmZvcm0gZWZmaWNpZW50Ci0gKiBvcGVyYXRpb25zIGluIEdGKDJeOCkgcmVwcmVzZW50ZWQgYXMgR0YoMilbeF0vdyh4KSB3aGVyZQotICogdyh4KT14XjgreF42K3heMyt4XjIrMS4gIFdlIGNhcmUgYWJvdXQgZG9pbmcgdGhhdCBiZWNhdXNlIGl0J3MgcGFydCBvZiB0aGUKLSAqIGRlZmluaXRpb24gb2YgdGhlIFJTIG1hdHJpeCBpbiB0aGUga2V5IHNjaGVkdWxlLiAgRWxlbWVudHMgb2YgdGhhdCBmaWVsZAotICogYXJlIHBvbHlub21pYWxzIG9mIGRlZ3JlZSBub3QgZ3JlYXRlciB0aGFuIDcgYW5kIGFsbCBjb2VmZmljaWVudHMgMCBvciAxLAotICogd2hpY2ggY2FuIGJlIHJlcHJlc2VudGVkIG5hdHVyYWxseSBieSBieXRlcyAoanVzdCBzdWJzdGl0dXRlIHg9MikuICBJbiB0aGF0Ci0gKiBmb3JtLCBHRigyXjgpIGFkZGl0aW9uIGlzIHRoZSBzYW1lIGFzIGJpdHdpc2UgWE9SLCBidXQgR0YoMl44KQotICogbXVsdGlwbGljYXRpb24gaXMgaW5lZmZpY2llbnQgd2l0aG91dCBoYXJkd2FyZSBzdXBwb3J0LiAgVG8gbXVsdGlwbHkKLSAqIGZhc3RlciwgSSBtYWtlIHVzZSBvZiB0aGUgZmFjdCB4IGlzIGEgZ2VuZXJhdG9yIGZvciB0aGUgbm9uemVybyBlbGVtZW50cywKLSAqIHNvIHRoYXQgZXZlcnkgZWxlbWVudCBwIG9mIEdGKDIpW3hdL3coeCkgaXMgZWl0aGVyIDAgb3IgZXF1YWwgdG8gKHgpXm4gZm9yCi0gKiBzb21lIG4gaW4gMC4uMjU0LiAgTm90ZSB0aGF0IHRoYXQgY2FyZXQgaXMgZXhwb25lbnRpYXRpb24gaW4gR0YoMl44KSwKLSAqICpub3QqIHBvbHlub21pYWwgbm90YXRpb24uICBTbyBpZiBJIHdhbnQgdG8gY29tcHV0ZSBwcSB3aGVyZSBwIGFuZCBxIGFyZQotICogaW4gR0YoMl44KSwgSSBjYW4ganVzdCBzYXk6Ci0gKiAgICAxLiBpZiBwPTAgb3IgcT0wIHRoZW4gcHE9MAotICogICAgMi4gb3RoZXJ3aXNlLCBmaW5kIG0gYW5kIG4gc3VjaCB0aGF0IHA9eF5tIGFuZCBxPXhebgotICogICAgMy4gcHE9KHhebSkoeF5uKT14XihtK24pLCBzbyBhZGQgbSBhbmQgbiBhbmQgZmluZCBwcQotICogVGhlIHRyYW5zbGF0aW9ucyBpbiBzdGVwcyAyIGFuZCAzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHRhYmxlcwotICogcG9seV90b19leHAgKGZvciBzdGVwIDIpIGFuZCBleHBfdG9fcG9seSAoZm9yIHN0ZXAgMykuICBUbyBzZWUgdGhpcwotICogaW4gYWN0aW9uLCBsb29rIGF0IHRoZSBDQUxDX1MgbWFjcm8uICBBcyBhZGRpdGlvbmFsIHdyaW5rbGVzLCBub3RlIHRoYXQKLSAqIG9uZSBvZiBteSBvcGVyYW5kcyBpcyBhbHdheXMgYSBjb25zdGFudCwgc28gdGhlIHBvbHlfdG9fZXhwIGxvb2t1cCBvbiBpdAotICogaXMgZG9uZSBpbiBhZHZhbmNlOyBJIGluY2x1ZGVkIHRoZSBvcmlnaW5hbCB2YWx1ZXMgaW4gdGhlIGNvbW1lbnRzIHNvCi0gKiByZWFkZXJzIGNhbiBoYXZlIHNvbWUgY2hhbmNlIG9mIHJlY29nbml6aW5nIHRoYXQgdGhpcyAqaXMqIHRoZSBSUyBtYXRyaXgKLSAqIGZyb20gdGhlIFR3b2Zpc2ggcGFwZXIuICBJJ3ZlIG9ubHkgaW5jbHVkZWQgdGhlIHRhYmxlIGVudHJpZXMgSSBhY3R1YWxseQotICogbmVlZDsgSSBuZXZlciBkbyBhIGxvb2t1cCBvbiBhIHZhcmlhYmxlIGlucHV0IG9mIHplcm8gYW5kIHRoZSBiaWdnZXN0Ci0gKiBleHBvbmVudHMgSSdsbCBldmVyIHNlZSBhcmUgMjU0ICh2YXJpYWJsZSkgYW5kIDIzNyAoY29uc3RhbnQpLCBzbyB0aGV5J2xsCi0gKiBuZXZlciBzdW0gdG8gbW9yZSB0aGFuIDQ5MS4JSSdtIHJlcGVhdGluZyBwYXJ0IG9mIHRoZSBleHBfdG9fcG9seSB0YWJsZQotICogc28gdGhhdCBJIGRvbid0IGhhdmUgdG8gZG8gbW9kLTI1NSByZWR1Y3Rpb24gaW4gdGhlIGV4cG9uZW50IGFyaXRobWV0aWMuCi0gKiBTaW5jZSBJIGtub3cgbXkgY29uc3RhbnQgb3BlcmFuZHMgYXJlIG5ldmVyIHplcm8sIEkgb25seSBoYXZlIHRvIHdvcnJ5Ci0gKiBhYm91dCB6ZXJvIHZhbHVlcyBpbiB0aGUgdmFyaWFibGUgb3BlcmFuZCwgYW5kIEkgZG8gaXQgd2l0aCBhIHNpbXBsZQotICogY29uZGl0aW9uYWwgYnJhbmNoLglJIGtub3cgY29uZGl0aW9uYWxzIGFyZSBleHBlbnNpdmUsIGJ1dCBJIGNvdWxkbid0Ci0gKiBzZWUgYSBub24taG9ycmlibGUgd2F5IG9mIGF2b2lkaW5nIHRoZW0sIGFuZCBJIGRpZCBtYW5hZ2UgdG8gZ3JvdXAgdGhlCi0gKiBzdGF0ZW1lbnRzIHNvIHRoYXQgZWFjaCBpZiBjb3ZlcnMgZm91ciBncm91cCBtdWx0aXBsaWNhdGlvbnMuICovCi0KLXN0YXRpYyBjb25zdCB1OCBwb2x5X3RvX2V4cFsyNTVdID0gewotICAgMHgwMCwgMHgwMSwgMHgxNywgMHgwMiwgMHgyRSwgMHgxOCwgMHg1MywgMHgwMywgMHg2QSwgMHgyRiwgMHg5MywgMHgxOSwKLSAgIDB4MzQsIDB4NTQsIDB4NDUsIDB4MDQsIDB4NUMsIDB4NkIsIDB4QjYsIDB4MzAsIDB4QTYsIDB4OTQsIDB4NEIsIDB4MUEsCi0gICAweDhDLCAweDM1LCAweDgxLCAweDU1LCAweEFBLCAweDQ2LCAweDBELCAweDA1LCAweDI0LCAweDVELCAweDg3LCAweDZDLAotICAgMHg5QiwgMHhCNywgMHhDMSwgMHgzMSwgMHgyQiwgMHhBNywgMHhBMywgMHg5NSwgMHg5OCwgMHg0QywgMHhDQSwgMHgxQiwKLSAgIDB4RTYsIDB4OEQsIDB4NzMsIDB4MzYsIDB4Q0QsIDB4ODIsIDB4MTIsIDB4NTYsIDB4NjIsIDB4QUIsIDB4RjAsIDB4NDcsCi0gICAweDRGLCAweDBFLCAweEJELCAweDA2LCAweEQ0LCAweDI1LCAweEQyLCAweDVFLCAweDI3LCAweDg4LCAweDY2LCAweDZELAotICAgMHhENiwgMHg5QywgMHg3OSwgMHhCOCwgMHgwOCwgMHhDMiwgMHhERiwgMHgzMiwgMHg2OCwgMHgyQywgMHhGRCwgMHhBOCwKLSAgIDB4OEEsIDB4QTQsIDB4NUEsIDB4OTYsIDB4MjksIDB4OTksIDB4MjIsIDB4NEQsIDB4NjAsIDB4Q0IsIDB4RTQsIDB4MUMsCi0gICAweDdCLCAweEU3LCAweDNCLCAweDhFLCAweDlFLCAweDc0LCAweEY0LCAweDM3LCAweEQ4LCAweENFLCAweEY5LCAweDgzLAotICAgMHg2RiwgMHgxMywgMHhCMiwgMHg1NywgMHhFMSwgMHg2MywgMHhEQywgMHhBQywgMHhDNCwgMHhGMSwgMHhBRiwgMHg0OCwKLSAgIDB4MEEsIDB4NTAsIDB4NDIsIDB4MEYsIDB4QkEsIDB4QkUsIDB4QzcsIDB4MDcsIDB4REUsIDB4RDUsIDB4NzgsIDB4MjYsCi0gICAweDY1LCAweEQzLCAweEQxLCAweDVGLCAweEUzLCAweDI4LCAweDIxLCAweDg5LCAweDU5LCAweDY3LCAweEZDLCAweDZFLAotICAgMHhCMSwgMHhENywgMHhGOCwgMHg5RCwgMHhGMywgMHg3QSwgMHgzQSwgMHhCOSwgMHhDNiwgMHgwOSwgMHg0MSwgMHhDMywKLSAgIDB4QUUsIDB4RTAsIDB4REIsIDB4MzMsIDB4NDQsIDB4NjksIDB4OTIsIDB4MkQsIDB4NTIsIDB4RkUsIDB4MTYsIDB4QTksCi0gICAweDBDLCAweDhCLCAweDgwLCAweEE1LCAweDRBLCAweDVCLCAweEI1LCAweDk3LCAweEM5LCAweDJBLCAweEEyLCAweDlBLAotICAgMHhDMCwgMHgyMywgMHg4NiwgMHg0RSwgMHhCQywgMHg2MSwgMHhFRiwgMHhDQywgMHgxMSwgMHhFNSwgMHg3MiwgMHgxRCwKLSAgIDB4M0QsIDB4N0MsIDB4RUIsIDB4RTgsIDB4RTksIDB4M0MsIDB4RUEsIDB4OEYsIDB4N0QsIDB4OUYsIDB4RUMsIDB4NzUsCi0gICAweDFFLCAweEY1LCAweDNFLCAweDM4LCAweEY2LCAweEQ5LCAweDNGLCAweENGLCAweDc2LCAweEZBLCAweDFGLCAweDg0LAotICAgMHhBMCwgMHg3MCwgMHhFRCwgMHgxNCwgMHg5MCwgMHhCMywgMHg3RSwgMHg1OCwgMHhGQiwgMHhFMiwgMHgyMCwgMHg2NCwKLSAgIDB4RDAsIDB4REQsIDB4NzcsIDB4QUQsIDB4REEsIDB4QzUsIDB4NDAsIDB4RjIsIDB4MzksIDB4QjAsIDB4RjcsIDB4NDksCi0gICAweEI0LCAweDBCLCAweDdGLCAweDUxLCAweDE1LCAweDQzLCAweDkxLCAweDEwLCAweDcxLCAweEJCLCAweEVFLCAweEJGLAotICAgMHg4NSwgMHhDOCwgMHhBMQotfTsKLQotc3RhdGljIGNvbnN0IHU4IGV4cF90b19wb2x5WzQ5Ml0gPSB7Ci0gICAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDRELCAweDlBLCAweDc5LCAweEYyLAotICAgMHhBOSwgMHgxRiwgMHgzRSwgMHg3QywgMHhGOCwgMHhCRCwgMHgzNywgMHg2RSwgMHhEQywgMHhGNSwgMHhBNywgMHgwMywKLSAgIDB4MDYsIDB4MEMsIDB4MTgsIDB4MzAsIDB4NjAsIDB4QzAsIDB4Q0QsIDB4RDcsIDB4RTMsIDB4OEIsIDB4NUIsIDB4QjYsCi0gICAweDIxLCAweDQyLCAweDg0LCAweDQ1LCAweDhBLCAweDU5LCAweEIyLCAweDI5LCAweDUyLCAweEE0LCAweDA1LCAweDBBLAotICAgMHgxNCwgMHgyOCwgMHg1MCwgMHhBMCwgMHgwRCwgMHgxQSwgMHgzNCwgMHg2OCwgMHhEMCwgMHhFRCwgMHg5NywgMHg2MywKLSAgIDB4QzYsIDB4QzEsIDB4Q0YsIDB4RDMsIDB4RUIsIDB4OUIsIDB4N0IsIDB4RjYsIDB4QTEsIDB4MEYsIDB4MUUsIDB4M0MsCi0gICAweDc4LCAweEYwLCAweEFELCAweDE3LCAweDJFLCAweDVDLCAweEI4LCAweDNELCAweDdBLCAweEY0LCAweEE1LCAweDA3LAotICAgMHgwRSwgMHgxQywgMHgzOCwgMHg3MCwgMHhFMCwgMHg4RCwgMHg1NywgMHhBRSwgMHgxMSwgMHgyMiwgMHg0NCwgMHg4OCwKLSAgIDB4NUQsIDB4QkEsIDB4MzksIDB4NzIsIDB4RTQsIDB4ODUsIDB4NDcsIDB4OEUsIDB4NTEsIDB4QTIsIDB4MDksIDB4MTIsCi0gICAweDI0LCAweDQ4LCAweDkwLCAweDZELCAweERBLCAweEY5LCAweEJGLCAweDMzLCAweDY2LCAweENDLCAweEQ1LCAweEU3LAotICAgMHg4MywgMHg0QiwgMHg5NiwgMHg2MSwgMHhDMiwgMHhDOSwgMHhERiwgMHhGMywgMHhBQiwgMHgxQiwgMHgzNiwgMHg2QywKLSAgIDB4RDgsIDB4RkQsIDB4QjcsIDB4MjMsIDB4NDYsIDB4OEMsIDB4NTUsIDB4QUEsIDB4MTksIDB4MzIsIDB4NjQsIDB4QzgsCi0gICAweERELCAweEY3LCAweEEzLCAweDBCLCAweDE2LCAweDJDLCAweDU4LCAweEIwLCAweDJELCAweDVBLCAweEI0LCAweDI1LAotICAgMHg0QSwgMHg5NCwgMHg2NSwgMHhDQSwgMHhEOSwgMHhGRiwgMHhCMywgMHgyQiwgMHg1NiwgMHhBQywgMHgxNSwgMHgyQSwKLSAgIDB4NTQsIDB4QTgsIDB4MUQsIDB4M0EsIDB4NzQsIDB4RTgsIDB4OUQsIDB4NzcsIDB4RUUsIDB4OTEsIDB4NkYsIDB4REUsCi0gICAweEYxLCAweEFGLCAweDEzLCAweDI2LCAweDRDLCAweDk4LCAweDdELCAweEZBLCAweEI5LCAweDNGLCAweDdFLCAweEZDLAotICAgMHhCNSwgMHgyNywgMHg0RSwgMHg5QywgMHg3NSwgMHhFQSwgMHg5OSwgMHg3RiwgMHhGRSwgMHhCMSwgMHgyRiwgMHg1RSwKLSAgIDB4QkMsIDB4MzUsIDB4NkEsIDB4RDQsIDB4RTUsIDB4ODcsIDB4NDMsIDB4ODYsIDB4NDEsIDB4ODIsIDB4NDksIDB4OTIsCi0gICAweDY5LCAweEQyLCAweEU5LCAweDlGLCAweDczLCAweEU2LCAweDgxLCAweDRGLCAweDlFLCAweDcxLCAweEUyLCAweDg5LAotICAgMHg1RiwgMHhCRSwgMHgzMSwgMHg2MiwgMHhDNCwgMHhDNSwgMHhDNywgMHhDMywgMHhDQiwgMHhEQiwgMHhGQiwgMHhCQiwKLSAgIDB4M0IsIDB4NzYsIDB4RUMsIDB4OTUsIDB4NjcsIDB4Q0UsIDB4RDEsIDB4RUYsIDB4OTMsIDB4NkIsIDB4RDYsIDB4RTEsCi0gICAweDhGLCAweDUzLCAweEE2LCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDRELAotICAgMHg5QSwgMHg3OSwgMHhGMiwgMHhBOSwgMHgxRiwgMHgzRSwgMHg3QywgMHhGOCwgMHhCRCwgMHgzNywgMHg2RSwgMHhEQywKLSAgIDB4RjUsIDB4QTcsIDB4MDMsIDB4MDYsIDB4MEMsIDB4MTgsIDB4MzAsIDB4NjAsIDB4QzAsIDB4Q0QsIDB4RDcsIDB4RTMsCi0gICAweDhCLCAweDVCLCAweEI2LCAweDIxLCAweDQyLCAweDg0LCAweDQ1LCAweDhBLCAweDU5LCAweEIyLCAweDI5LCAweDUyLAotICAgMHhBNCwgMHgwNSwgMHgwQSwgMHgxNCwgMHgyOCwgMHg1MCwgMHhBMCwgMHgwRCwgMHgxQSwgMHgzNCwgMHg2OCwgMHhEMCwKLSAgIDB4RUQsIDB4OTcsIDB4NjMsIDB4QzYsIDB4QzEsIDB4Q0YsIDB4RDMsIDB4RUIsIDB4OUIsIDB4N0IsIDB4RjYsIDB4QTEsCi0gICAweDBGLCAweDFFLCAweDNDLCAweDc4LCAweEYwLCAweEFELCAweDE3LCAweDJFLCAweDVDLCAweEI4LCAweDNELCAweDdBLAotICAgMHhGNCwgMHhBNSwgMHgwNywgMHgwRSwgMHgxQywgMHgzOCwgMHg3MCwgMHhFMCwgMHg4RCwgMHg1NywgMHhBRSwgMHgxMSwKLSAgIDB4MjIsIDB4NDQsIDB4ODgsIDB4NUQsIDB4QkEsIDB4MzksIDB4NzIsIDB4RTQsIDB4ODUsIDB4NDcsIDB4OEUsIDB4NTEsCi0gICAweEEyLCAweDA5LCAweDEyLCAweDI0LCAweDQ4LCAweDkwLCAweDZELCAweERBLCAweEY5LCAweEJGLCAweDMzLCAweDY2LAotICAgMHhDQywgMHhENSwgMHhFNywgMHg4MywgMHg0QiwgMHg5NiwgMHg2MSwgMHhDMiwgMHhDOSwgMHhERiwgMHhGMywgMHhBQiwKLSAgIDB4MUIsIDB4MzYsIDB4NkMsIDB4RDgsIDB4RkQsIDB4QjcsIDB4MjMsIDB4NDYsIDB4OEMsIDB4NTUsIDB4QUEsIDB4MTksCi0gICAweDMyLCAweDY0LCAweEM4LCAweERELCAweEY3LCAweEEzLCAweDBCLCAweDE2LCAweDJDLCAweDU4LCAweEIwLCAweDJELAotICAgMHg1QSwgMHhCNCwgMHgyNSwgMHg0QSwgMHg5NCwgMHg2NSwgMHhDQSwgMHhEOSwgMHhGRiwgMHhCMywgMHgyQiwgMHg1NiwKLSAgIDB4QUMsIDB4MTUsIDB4MkEsIDB4NTQsIDB4QTgsIDB4MUQsIDB4M0EsIDB4NzQsIDB4RTgsIDB4OUQsIDB4NzcsIDB4RUUsCi0gICAweDkxLCAweDZGLCAweERFLCAweEYxLCAweEFGLCAweDEzLCAweDI2LCAweDRDLCAweDk4LCAweDdELCAweEZBLCAweEI5LAotICAgMHgzRiwgMHg3RSwgMHhGQywgMHhCNSwgMHgyNywgMHg0RSwgMHg5QywgMHg3NSwgMHhFQSwgMHg5OSwgMHg3RiwgMHhGRSwKLSAgIDB4QjEsIDB4MkYsIDB4NUUsIDB4QkMsIDB4MzUsIDB4NkEsIDB4RDQsIDB4RTUsIDB4ODcsIDB4NDMsIDB4ODYsIDB4NDEsCi0gICAweDgyLCAweDQ5LCAweDkyLCAweDY5LCAweEQyLCAweEU5LCAweDlGLCAweDczLCAweEU2LCAweDgxLCAweDRGLCAweDlFLAotICAgMHg3MSwgMHhFMiwgMHg4OSwgMHg1RiwgMHhCRSwgMHgzMSwgMHg2MiwgMHhDNCwgMHhDNSwgMHhDNywgMHhDMywgMHhDQgotfTsKLQotCi0vKiBUaGUgdGFibGUgY29uc3RhbnRzIGFyZSBpbmRpY2VzIG9mCi0gKiBTLWJveCBlbnRyaWVzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCi1zdGF0aWMgY29uc3QgdTggY2FsY19zYl90YmxbNTEyXSA9IHsKLSAgICAweEE5LCAweDc1LCAweDY3LCAweEYzLCAweEIzLCAweEM2LCAweEU4LCAweEY0LAotICAgIDB4MDQsIDB4REIsIDB4RkQsIDB4N0IsIDB4QTMsIDB4RkIsIDB4NzYsIDB4QzgsCi0gICAgMHg5QSwgMHg0QSwgMHg5MiwgMHhEMywgMHg4MCwgMHhFNiwgMHg3OCwgMHg2QiwKLSAgICAweEU0LCAweDQ1LCAweERELCAweDdELCAweEQxLCAweEU4LCAweDM4LCAweDRCLAotICAgIDB4MEQsIDB4RDYsIDB4QzYsIDB4MzIsIDB4MzUsIDB4RDgsIDB4OTgsIDB4RkQsCi0gICAgMHgxOCwgMHgzNywgMHhGNywgMHg3MSwgMHhFQywgMHhGMSwgMHg2QywgMHhFMSwKLSAgICAweDQzLCAweDMwLCAweDc1LCAweDBGLCAweDM3LCAweEY4LCAweDI2LCAweDFCLAotICAgIDB4RkEsIDB4ODcsIDB4MTMsIDB4RkEsIDB4OTQsIDB4MDYsIDB4NDgsIDB4M0YsCi0gICAgMHhGMiwgMHg1RSwgMHhEMCwgMHhCQSwgMHg4QiwgMHhBRSwgMHgzMCwgMHg1QiwKLSAgICAweDg0LCAweDhBLCAweDU0LCAweDAwLCAweERGLCAweEJDLCAweDIzLCAweDlELAotICAgIDB4MTksIDB4NkQsIDB4NUIsIDB4QzEsIDB4M0QsIDB4QjEsIDB4NTksIDB4MEUsCi0gICAgMHhGMywgMHg4MCwgMHhBRSwgMHg1RCwgMHhBMiwgMHhEMiwgMHg4MiwgMHhENSwKLSAgICAweDYzLCAweEEwLCAweDAxLCAweDg0LCAweDgzLCAweDA3LCAweDJFLCAweDE0LAotICAgIDB4RDksIDB4QjUsIDB4NTEsIDB4OTAsIDB4OUIsIDB4MkMsIDB4N0MsIDB4QTMsCi0gICAgMHhBNiwgMHhCMiwgMHhFQiwgMHg3MywgMHhBNSwgMHg0QywgMHhCRSwgMHg1NCwKLSAgICAweDE2LCAweDkyLCAweDBDLCAweDc0LCAweEUzLCAweDM2LCAweDYxLCAweDUxLAotICAgIDB4QzAsIDB4MzgsIDB4OEMsIDB4QjAsIDB4M0EsIDB4QkQsIDB4RjUsIDB4NUEsCi0gICAgMHg3MywgMHhGQywgMHgyQywgMHg2MCwgMHgyNSwgMHg2MiwgMHgwQiwgMHg5NiwKLSAgICAweEJCLCAweDZDLCAweDRFLCAweDQyLCAweDg5LCAweEY3LCAweDZCLCAweDEwLAotICAgIDB4NTMsIDB4N0MsIDB4NkEsIDB4MjgsIDB4QjQsIDB4MjcsIDB4RjEsIDB4OEMsCi0gICAgMHhFMSwgMHgxMywgMHhFNiwgMHg5NSwgMHhCRCwgMHg5QywgMHg0NSwgMHhDNywKLSAgICAweEUyLCAweDI0LCAweEY0LCAweDQ2LCAweEI2LCAweDNCLCAweDY2LCAweDcwLAotICAgIDB4Q0MsIDB4Q0EsIDB4OTUsIDB4RTMsIDB4MDMsIDB4ODUsIDB4NTYsIDB4Q0IsCi0gICAgMHhENCwgMHgxMSwgMHgxQywgMHhEMCwgMHgxRSwgMHg5MywgMHhENywgMHhCOCwKLSAgICAweEZCLCAweEE2LCAweEMzLCAweDgzLCAweDhFLCAweDIwLCAweEI1LCAweEZGLAotICAgIDB4RTksIDB4OUYsIDB4Q0YsIDB4NzcsIDB4QkYsIDB4QzMsIDB4QkEsIDB4Q0MsCi0gICAgMHhFQSwgMHgwMywgMHg3NywgMHg2RiwgMHgzOSwgMHgwOCwgMHhBRiwgMHhCRiwKLSAgICAweDMzLCAweDQwLCAweEM5LCAweEU3LCAweDYyLCAweDJCLCAweDcxLCAweEUyLAotICAgIDB4ODEsIDB4NzksIDB4NzksIDB4MEMsIDB4MDksIDB4QUEsIDB4QUQsIDB4ODIsCi0gICAgMHgyNCwgMHg0MSwgMHhDRCwgMHgzQSwgMHhGOSwgMHhFQSwgMHhEOCwgMHhCOSwKLSAgICAweEU1LCAweEU0LCAweEM1LCAweDlBLCAweEI5LCAweEE0LCAweDRELCAweDk3LAotICAgIDB4NDQsIDB4N0UsIDB4MDgsIDB4REEsIDB4ODYsIDB4N0EsIDB4RTcsIDB4MTcsCi0gICAgMHhBMSwgMHg2NiwgMHgxRCwgMHg5NCwgMHhBQSwgMHhBMSwgMHhFRCwgMHgxRCwKLSAgICAweDA2LCAweDNELCAweDcwLCAweEYwLCAweEIyLCAweERFLCAweEQyLCAweEIzLAotICAgIDB4NDEsIDB4MEIsIDB4N0IsIDB4NzIsIDB4QTAsIDB4QTcsIDB4MTEsIDB4MUMsCi0gICAgMHgzMSwgMHhFRiwgMHhDMiwgMHhEMSwgMHgyNywgMHg1MywgMHg5MCwgMHgzRSwKLSAgICAweDIwLCAweDhGLCAweEY2LCAweDMzLCAweDYwLCAweDI2LCAweEZGLCAweDVGLAotICAgIDB4OTYsIDB4RUMsIDB4NUMsIDB4NzYsIDB4QjEsIDB4MkEsIDB4QUIsIDB4NDksCi0gICAgMHg5RSwgMHg4MSwgMHg5QywgMHg4OCwgMHg1MiwgMHhFRSwgMHgxQiwgMHgyMSwKLSAgICAweDVGLCAweEM0LCAweDkzLCAweDFBLCAweDBBLCAweEVCLCAweEVGLCAweEQ5LAotICAgIDB4OTEsIDB4QzUsIDB4ODUsIDB4MzksIDB4NDksIDB4OTksIDB4RUUsIDB4Q0QsCi0gICAgMHgyRCwgMHhBRCwgMHg0RiwgMHgzMSwgMHg4RiwgMHg4QiwgMHgzQiwgMHgwMSwKLSAgICAweDQ3LCAweDE4LCAweDg3LCAweDIzLCAweDZELCAweERELCAweDQ2LCAweDFGLAotICAgIDB4RDYsIDB4NEUsIDB4M0UsIDB4MkQsIDB4NjksIDB4RjksIDB4NjQsIDB4NDgsCi0gICAgMHgyQSwgMHg0RiwgMHhDRSwgMHhGMiwgMHhDQiwgMHg2NSwgMHgyRiwgMHg4RSwKLSAgICAweEZDLCAweDc4LCAweDk3LCAweDVDLCAweDA1LCAweDU4LCAweDdBLCAweDE5LAotICAgIDB4QUMsIDB4OEQsIDB4N0YsIDB4RTUsIDB4RDUsIDB4OTgsIDB4MUEsIDB4NTcsCi0gICAgMHg0QiwgMHg2NywgMHgwRSwgMHg3RiwgMHhBNywgMHgwNSwgMHg1QSwgMHg2NCwKLSAgICAweDI4LCAweEFGLCAweDE0LCAweDYzLCAweDNGLCAweEI2LCAweDI5LCAweEZFLAotICAgIDB4ODgsIDB4RjUsIDB4M0MsIDB4QjcsIDB4NEMsIDB4M0MsIDB4MDIsIDB4QTUsCi0gICAgMHhCOCwgMHhDRSwgMHhEQSwgMHhFOSwgMHhCMCwgMHg2OCwgMHgxNywgMHg0NCwKLSAgICAweDU1LCAweEUwLCAweDFGLCAweDRELCAweDhBLCAweDQzLCAweDdELCAweDY5LAotICAgIDB4NTcsIDB4MjksIDB4QzcsIDB4MkUsIDB4OEQsIDB4QUMsIDB4NzQsIDB4MTUsCi0gICAgMHhCNywgMHg1OSwgMHhDNCwgMHhBOCwgMHg5RiwgMHgwQSwgMHg3MiwgMHg5RSwKLSAgICAweDdFLCAweDZFLCAweDE1LCAweDQ3LCAweDIyLCAweERGLCAweDEyLCAweDM0LAotICAgIDB4NTgsIDB4MzUsIDB4MDcsIDB4NkEsIDB4OTksIDB4Q0YsIDB4MzQsIDB4REMsCi0gICAgMHg2RSwgMHgyMiwgMHg1MCwgMHhDOSwgMHhERSwgMHhDMCwgMHg2OCwgMHg5QiwKLSAgICAweDY1LCAweDg5LCAweEJDLCAweEQ0LCAweERCLCAweEVELCAweEY4LCAweEFCLAotICAgIDB4QzgsIDB4MTIsIDB4QTgsIDB4QTIsIDB4MkIsIDB4MEQsIDB4NDAsIDB4NTIsCi0gICAgMHhEQywgMHhCQiwgMHhGRSwgMHgwMiwgMHgzMiwgMHgyRiwgMHhBNCwgMHhBOSwKLSAgICAweENBLCAweEQ3LCAweDEwLCAweDYxLCAweDIxLCAweDFFLCAweEYwLCAweEI0LAotICAgIDB4RDMsIDB4NTAsIDB4NUQsIDB4MDQsIDB4MEYsIDB4RjYsIDB4MDAsIDB4QzIsCi0gICAgMHg2RiwgMHgxNiwgMHg5RCwgMHgyNSwgMHgzNiwgMHg4NiwgMHg0MiwgMHg1NiwKLSAgICAweDRBLCAweDU1LCAweDVFLCAweDA5LCAweEMxLCAweEJFLCAweEUwLCAweDkxCi19OwotCi0vKiBNYWNybyB0byBwZXJmb3JtIG9uZSBjb2x1bW4gb2YgdGhlIFJTIG1hdHJpeCBtdWx0aXBsaWNhdGlvbi4gIFRoZQotICogcGFyYW1ldGVycyBhLCBiLCBjLCBhbmQgZCBhcmUgdGhlIGZvdXIgYnl0ZXMgb2Ygb3V0cHV0OyBpIGlzIHRoZSBpbmRleAotICogb2YgdGhlIGtleSBieXRlcywgYW5kIHcsIHgsIHksIGFuZCB6LCBhcmUgdGhlIGNvbHVtbiBvZiBjb25zdGFudHMgZnJvbQotICogdGhlIFJTIG1hdHJpeCwgcHJlcHJvY2Vzc2VkIHRocm91Z2ggdGhlIHBvbHlfdG9fZXhwIHRhYmxlLiAqLwotCi0jZGVmaW5lIENBTENfUyhhLCBiLCBjLCBkLCBpLCB3LCB4LCB5LCB6KSBcCi0gICBpZiAoa2V5W2ldKSB7IFwKLSAgICAgIHRtcCA9IHBvbHlfdG9fZXhwW2tleVtpXSAtIDFdOyBcCi0gICAgICAoYSkgXj0gZXhwX3RvX3BvbHlbdG1wICsgKHcpXTsgXAotICAgICAgKGIpIF49IGV4cF90b19wb2x5W3RtcCArICh4KV07IFwKLSAgICAgIChjKSBePSBleHBfdG9fcG9seVt0bXAgKyAoeSldOyBcCi0gICAgICAoZCkgXj0gZXhwX3RvX3BvbHlbdG1wICsgKHopXTsgXAotICAgfQotCi0vKiBNYWNyb3MgdG8gY2FsY3VsYXRlIHRoZSBrZXktZGVwZW5kZW50IFMtYm94ZXMgZm9yIGEgMTI4LWJpdCBrZXkgdXNpbmcKLSAqIHRoZSBTIHZlY3RvciBmcm9tIENBTENfUy4gIENBTENfU0JfMiBjb21wdXRlcyBhIHNpbmdsZSBlbnRyeSBpbiBhbGwKLSAqIGZvdXIgUy1ib3hlcywgd2hlcmUgaSBpcyB0aGUgaW5kZXggb2YgdGhlIGVudHJ5IHRvIGNvbXB1dGUsIGFuZCBhIGFuZCBiCi0gKiBhcmUgdGhlIGluZGV4IG51bWJlcnMgcHJlcHJvY2Vzc2VkIHRocm91Z2ggdGhlIHEwIGFuZCBxMSB0YWJsZXMKLSAqIHJlc3BlY3RpdmVseS4gKi8KLQotI2RlZmluZSBDQUxDX1NCXzIoaSwgYSwgYikgXAotICAgY3R4LT5zWzBdW2ldID0gbWRzWzBdW3EwWyhhKSBeIHNhXSBeIHNlXTsgXAotICAgY3R4LT5zWzFdW2ldID0gbWRzWzFdW3EwWyhiKSBeIHNiXSBeIHNmXTsgXAotICAgY3R4LT5zWzJdW2ldID0gbWRzWzJdW3ExWyhhKSBeIHNjXSBeIHNnXTsgXAotICAgY3R4LT5zWzNdW2ldID0gbWRzWzNdW3ExWyhiKSBeIHNkXSBeIHNoXQotCi0vKiBNYWNybyBleGFjdGx5IGxpa2UgQ0FMQ19TQl8yLCBidXQgZm9yIDE5Mi1iaXQga2V5cy4gKi8KLQotI2RlZmluZSBDQUxDX1NCMTkyXzIoaSwgYSwgYikgXAotICAgY3R4LT5zWzBdW2ldID0gbWRzWzBdW3EwW3EwWyhiKSBeIHNhXSBeIHNlXSBeIHNpXTsgXAotICAgY3R4LT5zWzFdW2ldID0gbWRzWzFdW3EwW3ExWyhiKSBeIHNiXSBeIHNmXSBeIHNqXTsgXAotICAgY3R4LT5zWzJdW2ldID0gbWRzWzJdW3ExW3EwWyhhKSBeIHNjXSBeIHNnXSBeIHNrXTsgXAotICAgY3R4LT5zWzNdW2ldID0gbWRzWzNdW3ExW3ExWyhhKSBeIHNkXSBeIHNoXSBeIHNsXTsKLQotLyogTWFjcm8gZXhhY3RseSBsaWtlIENBTENfU0JfMiwgYnV0IGZvciAyNTYtYml0IGtleXMuICovCi0KLSNkZWZpbmUgQ0FMQ19TQjI1Nl8yKGksIGEsIGIpIFwKLSAgIGN0eC0+c1swXVtpXSA9IG1kc1swXVtxMFtxMFtxMVsoYikgXiBzYV0gXiBzZV0gXiBzaV0gXiBzbV07IFwKLSAgIGN0eC0+c1sxXVtpXSA9IG1kc1sxXVtxMFtxMVtxMVsoYSkgXiBzYl0gXiBzZl0gXiBzal0gXiBzbl07IFwKLSAgIGN0eC0+c1syXVtpXSA9IG1kc1syXVtxMVtxMFtxMFsoYSkgXiBzY10gXiBzZ10gXiBza10gXiBzb107IFwKLSAgIGN0eC0+c1szXVtpXSA9IG1kc1szXVtxMVtxMVtxMFsoYikgXiBzZF0gXiBzaF0gXiBzbF0gXiBzcF07Ci0KLS8qIE1hY3JvcyB0byBjYWxjdWxhdGUgdGhlIHdoaXRlbmluZyBhbmQgcm91bmQgc3Via2V5cy4gIENBTENfS18yIGNvbXB1dGVzIHRoZQotICogbGFzdCB0d28gc3RhZ2VzIG9mIHRoZSBoKCkgZnVuY3Rpb24gZm9yIGEgZ2l2ZW4gaW5kZXggKGVpdGhlciAyaSBvciAyaSsxKS4KLSAqIGEsIGIsIGMsIGFuZCBkIGFyZSB0aGUgZm91ciBieXRlcyBnb2luZyBpbnRvIHRoZSBsYXN0IHR3byBzdGFnZXMuICBGb3IKLSAqIDEyOC1iaXQga2V5cywgdGhpcyBpcyB0aGUgZW50aXJlIGgoKSBmdW5jdGlvbiBhbmQgYSBhbmQgYyBhcmUgdGhlIGluZGV4Ci0gKiBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEgcmVzcGVjdGl2ZWx5OyBmb3IgbG9uZ2VyIGtleXMgdGhleSBhcmUgdGhlCi0gKiBvdXRwdXQgb2YgcHJldmlvdXMgc3RhZ2VzLiAgaiBpcyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGtleSBieXRlIHRvIHVzZS4KLSAqIENBTENfSyBjb21wdXRlcyBhIHBhaXIgb2Ygc3Via2V5cyBmb3IgMTI4LWJpdCBUd29maXNoLCBieSBjYWxsaW5nIENBTENfS18yCi0gKiB0d2ljZSwgZG9pbmcgdGhlIFBzZXVkby1IYWRhbWFyZCBUcmFuc2Zvcm0sIGFuZCBkb2luZyB0aGUgbmVjZXNzYXJ5Ci0gKiByb3RhdGlvbnMuICBJdHMgcGFyYW1ldGVycyBhcmU6IGEsIHRoZSBhcnJheSB0byB3cml0ZSB0aGUgcmVzdWx0cyBpbnRvLAotICogaiwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvdXRwdXQgZW50cnksIGsgYW5kIGwsIHRoZSBwcmVwcm9jZXNzZWQgaW5kaWNlcwotICogZm9yIGluZGV4IDJpLCBhbmQgbSBhbmQgbiwgdGhlIHByZXByb2Nlc3NlZCBpbmRpY2VzIGZvciBpbmRleCAyaSsxLgotICogQ0FMQ19LMTkyXzIgZXhwYW5kcyBDQUxDX0tfMiB0byBoYW5kbGUgMTkyLWJpdCBrZXlzLCBieSBkb2luZyBhbgotICogYWRkaXRpb25hbCBsb29rdXAtYW5kLVhPUiBzdGFnZS4gIFRoZSBwYXJhbWV0ZXJzIGEsIGIsIGMgYW5kIGQgYXJlIHRoZQotICogZm91ciBieXRlcyBnb2luZyBpbnRvIHRoZSBsYXN0IHRocmVlIHN0YWdlcy4gIEZvciAxOTItYml0IGtleXMsIGMgPSBkCi0gKiBhcmUgdGhlIGluZGV4IHByZXByb2Nlc3NlZCB0aHJvdWdoIHEwLCBhbmQgYSA9IGIgYXJlIHRoZSBpbmRleAotICogcHJlcHJvY2Vzc2VkIHRocm91Z2ggcTE7IGogaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBrZXkgYnl0ZSB0byB1c2UuCi0gKiBDQUxDX0sxOTIgaXMgaWRlbnRpY2FsIHRvIENBTENfSyBidXQgZm9yIHVzaW5nIHRoZSBDQUxDX0sxOTJfMiBtYWNybwotICogaW5zdGVhZCBvZiBDQUxDX0tfMi4KLSAqIENBTENfSzI1Nl8yIGV4cGFuZHMgQ0FMQ19LMTkyXzIgdG8gaGFuZGxlIDI1Ni1iaXQga2V5cywgYnkgZG9pbmcgYW4KLSAqIGFkZGl0aW9uYWwgbG9va3VwLWFuZC1YT1Igc3RhZ2UuICBUaGUgcGFyYW1ldGVycyBhIGFuZCBiIGFyZSB0aGUgaW5kZXgKLSAqIHByZXByb2Nlc3NlZCB0aHJvdWdoIHEwIGFuZCBxMSByZXNwZWN0aXZlbHk7IGogaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdAotICoga2V5IGJ5dGUgdG8gdXNlLiAgQ0FMQ19LMjU2IGlzIGlkZW50aWNhbCB0byBDQUxDX0sgYnV0IGZvciB1c2luZyB0aGUKLSAqIENBTENfSzI1Nl8yIG1hY3JvIGluc3RlYWQgb2YgQ0FMQ19LXzIuICovCi0KLSNkZWZpbmUgQ0FMQ19LXzIoYSwgYiwgYywgZCwgaikgXAotICAgICBtZHNbMF1bcTBbYSBeIGtleVsoaikgKyA4XV0gXiBrZXlbal1dIFwKLSAgIF4gbWRzWzFdW3EwW2IgXiBrZXlbKGopICsgOV1dIF4ga2V5WyhqKSArIDFdXSBcCi0gICBeIG1kc1syXVtxMVtjIF4ga2V5WyhqKSArIDEwXV0gXiBrZXlbKGopICsgMl1dIFwKLSAgIF4gbWRzWzNdW3ExW2QgXiBrZXlbKGopICsgMTFdXSBeIGtleVsoaikgKyAzXV0KLQotI2RlZmluZSBDQUxDX0soYSwgaiwgaywgbCwgbSwgbikgXAotICAgeCA9IENBTENfS18yIChrLCBsLCBrLCBsLCAwKTsgXAotICAgeSA9IENBTENfS18yIChtLCBuLCBtLCBuLCA0KTsgXAotICAgeSA9IHJvbDMyKHksIDgpOyBcCi0gICB4ICs9IHk7IHkgKz0geDsgY3R4LT5hW2pdID0geDsgXAotICAgY3R4LT5hWyhqKSArIDFdID0gcm9sMzIoeSwgOSkKLQotI2RlZmluZSBDQUxDX0sxOTJfMihhLCBiLCBjLCBkLCBqKSBcCi0gICBDQUxDX0tfMiAocTBbYSBeIGtleVsoaikgKyAxNl1dLCBcCi0JICAgICBxMVtiIF4ga2V5WyhqKSArIDE3XV0sIFwKLQkgICAgIHEwW2MgXiBrZXlbKGopICsgMThdXSwgXAotCSAgICAgcTFbZCBeIGtleVsoaikgKyAxOV1dLCBqKQotCi0jZGVmaW5lIENBTENfSzE5MihhLCBqLCBrLCBsLCBtLCBuKSBcCi0gICB4ID0gQ0FMQ19LMTkyXzIgKGwsIGwsIGssIGssIDApOyBcCi0gICB5ID0gQ0FMQ19LMTkyXzIgKG4sIG4sIG0sIG0sIDQpOyBcCi0gICB5ID0gcm9sMzIoeSwgOCk7IFwKLSAgIHggKz0geTsgeSArPSB4OyBjdHgtPmFbal0gPSB4OyBcCi0gICBjdHgtPmFbKGopICsgMV0gPSByb2wzMih5LCA5KQotCi0jZGVmaW5lIENBTENfSzI1Nl8yKGEsIGIsIGopIFwKLSAgIENBTENfSzE5Ml8yIChxMVtiIF4ga2V5WyhqKSArIDI0XV0sIFwKLQkgICAgICAgIHExW2EgXiBrZXlbKGopICsgMjVdXSwgXAotCSAgICAgICAgcTBbYSBeIGtleVsoaikgKyAyNl1dLCBcCi0JICAgICAgICBxMFtiIF4ga2V5WyhqKSArIDI3XV0sIGopCi0KLSNkZWZpbmUgQ0FMQ19LMjU2KGEsIGosIGssIGwsIG0sIG4pIFwKLSAgIHggPSBDQUxDX0syNTZfMiAoaywgbCwgMCk7IFwKLSAgIHkgPSBDQUxDX0syNTZfMiAobSwgbiwgNCk7IFwKLSAgIHkgPSByb2wzMih5LCA4KTsgXAotICAgeCArPSB5OyB5ICs9IHg7IGN0eC0+YVtqXSA9IHg7IFwKLSAgIGN0eC0+YVsoaikgKyAxXSA9IHJvbDMyKHksIDkpCi0KLQogLyogTWFjcm9zIHRvIGNvbXB1dGUgdGhlIGcoKSBmdW5jdGlvbiBpbiB0aGUgZW5jcnlwdGlvbiBhbmQgZGVjcnlwdGlvbgogICogcm91bmRzLiAgRzEgaXMgdGhlIHN0cmFpZ2h0IGcoKSBmdW5jdGlvbjsgRzIgaW5jbHVkZXMgdGhlIDgtYml0CiAgKiByb3RhdGlvbiBmb3IgdGhlIGhpZ2ggMzItYml0IHdvcmQuICovCkBAIC02MzAsMTc2ICsxMDMsNyBAQAogICAgeCBePSBjdHgtPndbbV07IFwKICAgIGRzdFtuXSA9IGNwdV90b19sZTMyKHgpCiAKLSNkZWZpbmUgVEZfTUlOX0tFWV9TSVpFIDE2Ci0jZGVmaW5lIFRGX01BWF9LRVlfU0laRSAzMgotI2RlZmluZSBURl9CTE9DS19TSVpFIDE2CiAKLS8qIFN0cnVjdHVyZSBmb3IgYW4gZXhwYW5kZWQgVHdvZmlzaCBrZXkuICBzIGNvbnRhaW5zIHRoZSBrZXktZGVwZW5kZW50Ci0gKiBTLWJveGVzIGNvbXBvc2VkIHdpdGggdGhlIE1EUyBtYXRyaXg7IHcgY29udGFpbnMgdGhlIGVpZ2h0ICJ3aGl0ZW5pbmciCi0gKiBzdWJrZXlzLCBLWzBdIHRocm91Z2ggS1s3XS4JayBob2xkcyB0aGUgcmVtYWluaW5nLCAicm91bmQiIHN1YmtleXMuICBOb3RlCi0gKiB0aGF0IGtbaV0gY29ycmVzcG9uZHMgdG8gd2hhdCB0aGUgVHdvZmlzaCBwYXBlciBjYWxscyBLW2krOF0uICovCi1zdHJ1Y3QgdHdvZmlzaF9jdHggewotICAgdTMyIHNbNF1bMjU2XSwgd1s4XSwga1szMl07Ci19OwotCi0vKiBQZXJmb3JtIHRoZSBrZXkgc2V0dXAuICovCi1zdGF0aWMgaW50IHR3b2Zpc2hfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JCQkgIHVuc2lnbmVkIGludCBrZXlfbGVuLCB1MzIgKmZsYWdzKQotewotCQotCXN0cnVjdCB0d29maXNoX2N0eCAqY3R4ID0gY3J5cHRvX3RmbV9jdHgodGZtKTsKLQotCWludCBpLCBqLCBrOwotCi0JLyogVGVtcG9yYXJpZXMgZm9yIENBTENfSy4gKi8KLQl1MzIgeCwgeTsKLQotCS8qIFRoZSBTIHZlY3RvciB1c2VkIHRvIGtleSB0aGUgUy1ib3hlcywgc3BsaXQgdXAgaW50byBpbmRpdmlkdWFsIGJ5dGVzLgotCSAqIDEyOC1iaXQga2V5cyB1c2Ugb25seSBzYSB0aHJvdWdoIHNoOyAyNTYtYml0IHVzZSBhbGwgb2YgdGhlbS4gKi8KLQl1OCBzYSA9IDAsIHNiID0gMCwgc2MgPSAwLCBzZCA9IDAsIHNlID0gMCwgc2YgPSAwLCBzZyA9IDAsIHNoID0gMDsKLQl1OCBzaSA9IDAsIHNqID0gMCwgc2sgPSAwLCBzbCA9IDAsIHNtID0gMCwgc24gPSAwLCBzbyA9IDAsIHNwID0gMDsKLQotCS8qIFRlbXBvcmFyeSBmb3IgQ0FMQ19TLiAqLwotCXU4IHRtcDsKLQotCS8qIENoZWNrIGtleSBsZW5ndGguICovCi0JaWYgKGtleV9sZW4gIT0gMTYgJiYga2V5X2xlbiAhPSAyNCAmJiBrZXlfbGVuICE9IDMyKQotCXsKLQkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOwotCQlyZXR1cm4gLUVJTlZBTDsgLyogdW5zdXBwb3J0ZWQga2V5IGxlbmd0aCAqLwotCX0KLQotCS8qIENvbXB1dGUgdGhlIGZpcnN0IHR3byB3b3JkcyBvZiB0aGUgUyB2ZWN0b3IuICBUaGUgbWFnaWMgbnVtYmVycyBhcmUKLQkgKiB0aGUgZW50cmllcyBvZiB0aGUgUlMgbWF0cml4LCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBwb2x5X3RvX2V4cC4gVGhlCi0JICogbnVtYmVycyBpbiB0aGUgY29tbWVudHMgYXJlIHRoZSBvcmlnaW5hbCAocG9seW5vbWlhbCBmb3JtKSBtYXRyaXgKLQkgKiBlbnRyaWVzLiAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDAsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDEsIDB4MkQsIDB4QTQsIDB4NDQsIDB4OEEpOyAvKiBBNCA1NiBBMSA1NSAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDIsIDB4OEEsIDB4RDUsIDB4QkYsIDB4RDEpOyAvKiA1NSA4MiBGQyA4NyAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDMsIDB4RDEsIDB4N0YsIDB4M0QsIDB4OTkpOyAvKiA4NyBGMyBDMSA1QSAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDQsIDB4OTksIDB4NDYsIDB4NjYsIDB4OTYpOyAvKiA1QSAxRSA0NyA1OCAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDUsIDB4OTYsIDB4M0MsIDB4NUIsIDB4RUQpOyAvKiA1OCBDNiBBRSBEQiAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDYsIDB4RUQsIDB4MzcsIDB4NEYsIDB4RTApOyAvKiBEQiA2OCAzRCA5RSAqLwotCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDcsIDB4RTAsIDB4RDAsIDB4OEMsIDB4MTcpOyAvKiA5RSBFNSAxOSAwMyAqLwotCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDgsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLwotCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDksIDB4MkQsIDB4QTQsIDB4NDQsIDB4OEEpOyAvKiBBNCA1NiBBMSA1NSAqLwotCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDEwLCAweDhBLCAweEQ1LCAweEJGLCAweEQxKTsgLyogNTUgODIgRkMgODcgKi8KLQlDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCAxMSwgMHhEMSwgMHg3RiwgMHgzRCwgMHg5OSk7IC8qIDg3IEYzIEMxIDVBICovCi0JQ0FMQ19TIChzZSwgc2YsIHNnLCBzaCwgMTIsIDB4OTksIDB4NDYsIDB4NjYsIDB4OTYpOyAvKiA1QSAxRSA0NyA1OCAqLwotCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDEzLCAweDk2LCAweDNDLCAweDVCLCAweEVEKTsgLyogNTggQzYgQUUgREIgKi8KLQlDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCAxNCwgMHhFRCwgMHgzNywgMHg0RiwgMHhFMCk7IC8qIERCIDY4IDNEIDlFICovCi0JQ0FMQ19TIChzZSwgc2YsIHNnLCBzaCwgMTUsIDB4RTAsIDB4RDAsIDB4OEMsIDB4MTcpOyAvKiA5RSBFNSAxOSAwMyAqLwotCi0JaWYgKGtleV9sZW4gPT0gMjQgfHwga2V5X2xlbiA9PSAzMikgeyAvKiAxOTItIG9yIDI1Ni1iaXQga2V5ICovCi0JCS8qIENhbGN1bGF0ZSB0aGUgdGhpcmQgd29yZCBvZiB0aGUgUyB2ZWN0b3IgKi8KLQkJQ0FMQ19TIChzaSwgc2osIHNrLCBzbCwgMTYsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLwotCQlDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAxNywgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCi0JCUNBTENfUyAoc2ksIHNqLCBzaywgc2wsIDE4LCAweDhBLCAweEQ1LCAweEJGLCAweEQxKTsgLyogNTUgODIgRkMgODcgKi8KLQkJQ0FMQ19TIChzaSwgc2osIHNrLCBzbCwgMTksIDB4RDEsIDB4N0YsIDB4M0QsIDB4OTkpOyAvKiA4NyBGMyBDMSA1QSAqLwotCQlDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCi0JCUNBTENfUyAoc2ksIHNqLCBzaywgc2wsIDIxLCAweDk2LCAweDNDLCAweDVCLCAweEVEKTsgLyogNTggQzYgQUUgREIgKi8KLQkJQ0FMQ19TIChzaSwgc2osIHNrLCBzbCwgMjIsIDB4RUQsIDB4MzcsIDB4NEYsIDB4RTApOyAvKiBEQiA2OCAzRCA5RSAqLwotCQlDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMywgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCi0JfQotCi0JaWYgKGtleV9sZW4gPT0gMzIpIHsgLyogMjU2LWJpdCBrZXkgKi8KLQkJLyogQ2FsY3VsYXRlIHRoZSBmb3VydGggd29yZCBvZiB0aGUgUyB2ZWN0b3IgKi8KLQkJQ0FMQ19TIChzbSwgc24sIHNvLCBzcCwgMjQsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLwotCQlDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyNSwgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCi0JCUNBTENfUyAoc20sIHNuLCBzbywgc3AsIDI2LCAweDhBLCAweEQ1LCAweEJGLCAweEQxKTsgLyogNTUgODIgRkMgODcgKi8KLQkJQ0FMQ19TIChzbSwgc24sIHNvLCBzcCwgMjcsIDB4RDEsIDB4N0YsIDB4M0QsIDB4OTkpOyAvKiA4NyBGMyBDMSA1QSAqLwotCQlDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyOCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCi0JCUNBTENfUyAoc20sIHNuLCBzbywgc3AsIDI5LCAweDk2LCAweDNDLCAweDVCLCAweEVEKTsgLyogNTggQzYgQUUgREIgKi8KLQkJQ0FMQ19TIChzbSwgc24sIHNvLCBzcCwgMzAsIDB4RUQsIDB4MzcsIDB4NEYsIDB4RTApOyAvKiBEQiA2OCAzRCA5RSAqLwotCQlDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAzMSwgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCi0KLQkJLyogQ29tcHV0ZSB0aGUgUy1ib3hlcy4gKi8KLQkJZm9yICggaSA9IGogPSAwLCBrID0gMTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApIHsKLQkJCUNBTENfU0IyNTZfMiggaSwgY2FsY19zYl90Ymxbal0sIGNhbGNfc2JfdGJsW2tdICk7Ci0JCX0KLQotCQkvKiBDYWxjdWxhdGUgd2hpdGVuaW5nIGFuZCByb3VuZCBzdWJrZXlzLiAgVGhlIGNvbnN0YW50cyBhcmUKLQkJICogaW5kaWNlcyBvZiBzdWJrZXlzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCi0JCUNBTENfSzI1NiAodywgMCwgMHhBOSwgMHg3NSwgMHg2NywgMHhGMyk7Ci0JCUNBTENfSzI1NiAodywgMiwgMHhCMywgMHhDNiwgMHhFOCwgMHhGNCk7Ci0JCUNBTENfSzI1NiAodywgNCwgMHgwNCwgMHhEQiwgMHhGRCwgMHg3Qik7Ci0JCUNBTENfSzI1NiAodywgNiwgMHhBMywgMHhGQiwgMHg3NiwgMHhDOCk7Ci0JCUNBTENfSzI1NiAoaywgMCwgMHg5QSwgMHg0QSwgMHg5MiwgMHhEMyk7Ci0JCUNBTENfSzI1NiAoaywgMiwgMHg4MCwgMHhFNiwgMHg3OCwgMHg2Qik7Ci0JCUNBTENfSzI1NiAoaywgNCwgMHhFNCwgMHg0NSwgMHhERCwgMHg3RCk7Ci0JCUNBTENfSzI1NiAoaywgNiwgMHhEMSwgMHhFOCwgMHgzOCwgMHg0Qik7Ci0JCUNBTENfSzI1NiAoaywgOCwgMHgwRCwgMHhENiwgMHhDNiwgMHgzMik7Ci0JCUNBTENfSzI1NiAoaywgMTAsIDB4MzUsIDB4RDgsIDB4OTgsIDB4RkQpOwotCQlDQUxDX0syNTYgKGssIDEyLCAweDE4LCAweDM3LCAweEY3LCAweDcxKTsKLQkJQ0FMQ19LMjU2IChrLCAxNCwgMHhFQywgMHhGMSwgMHg2QywgMHhFMSk7Ci0JCUNBTENfSzI1NiAoaywgMTYsIDB4NDMsIDB4MzAsIDB4NzUsIDB4MEYpOwotCQlDQUxDX0syNTYgKGssIDE4LCAweDM3LCAweEY4LCAweDI2LCAweDFCKTsKLQkJQ0FMQ19LMjU2IChrLCAyMCwgMHhGQSwgMHg4NywgMHgxMywgMHhGQSk7Ci0JCUNBTENfSzI1NiAoaywgMjIsIDB4OTQsIDB4MDYsIDB4NDgsIDB4M0YpOwotCQlDQUxDX0syNTYgKGssIDI0LCAweEYyLCAweDVFLCAweEQwLCAweEJBKTsKLQkJQ0FMQ19LMjU2IChrLCAyNiwgMHg4QiwgMHhBRSwgMHgzMCwgMHg1Qik7Ci0JCUNBTENfSzI1NiAoaywgMjgsIDB4ODQsIDB4OEEsIDB4NTQsIDB4MDApOwotCQlDQUxDX0syNTYgKGssIDMwLCAweERGLCAweEJDLCAweDIzLCAweDlEKTsKLQl9IGVsc2UgaWYgKGtleV9sZW4gPT0gMjQpIHsgLyogMTkyLWJpdCBrZXkgKi8KLQkJLyogQ29tcHV0ZSB0aGUgUy1ib3hlcy4gKi8KLQkJZm9yICggaSA9IGogPSAwLCBrID0gMTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApIHsKLQkJICAgICAgICBDQUxDX1NCMTkyXzIoIGksIGNhbGNfc2JfdGJsW2pdLCBjYWxjX3NiX3RibFtrXSApOwotCQl9Ci0KLQkJLyogQ2FsY3VsYXRlIHdoaXRlbmluZyBhbmQgcm91bmQgc3Via2V5cy4gIFRoZSBjb25zdGFudHMgYXJlCi0JCSAqIGluZGljZXMgb2Ygc3Via2V5cywgcHJlcHJvY2Vzc2VkIHRocm91Z2ggcTAgYW5kIHExLiAqLwotCQlDQUxDX0sxOTIgKHcsIDAsIDB4QTksIDB4NzUsIDB4NjcsIDB4RjMpOwotCQlDQUxDX0sxOTIgKHcsIDIsIDB4QjMsIDB4QzYsIDB4RTgsIDB4RjQpOwotCQlDQUxDX0sxOTIgKHcsIDQsIDB4MDQsIDB4REIsIDB4RkQsIDB4N0IpOwotCQlDQUxDX0sxOTIgKHcsIDYsIDB4QTMsIDB4RkIsIDB4NzYsIDB4QzgpOwotCQlDQUxDX0sxOTIgKGssIDAsIDB4OUEsIDB4NEEsIDB4OTIsIDB4RDMpOwotCQlDQUxDX0sxOTIgKGssIDIsIDB4ODAsIDB4RTYsIDB4NzgsIDB4NkIpOwotCQlDQUxDX0sxOTIgKGssIDQsIDB4RTQsIDB4NDUsIDB4REQsIDB4N0QpOwotCQlDQUxDX0sxOTIgKGssIDYsIDB4RDEsIDB4RTgsIDB4MzgsIDB4NEIpOwotCQlDQUxDX0sxOTIgKGssIDgsIDB4MEQsIDB4RDYsIDB4QzYsIDB4MzIpOwotCQlDQUxDX0sxOTIgKGssIDEwLCAweDM1LCAweEQ4LCAweDk4LCAweEZEKTsKLQkJQ0FMQ19LMTkyIChrLCAxMiwgMHgxOCwgMHgzNywgMHhGNywgMHg3MSk7Ci0JCUNBTENfSzE5MiAoaywgMTQsIDB4RUMsIDB4RjEsIDB4NkMsIDB4RTEpOwotCQlDQUxDX0sxOTIgKGssIDE2LCAweDQzLCAweDMwLCAweDc1LCAweDBGKTsKLQkJQ0FMQ19LMTkyIChrLCAxOCwgMHgzNywgMHhGOCwgMHgyNiwgMHgxQik7Ci0JCUNBTENfSzE5MiAoaywgMjAsIDB4RkEsIDB4ODcsIDB4MTMsIDB4RkEpOwotCQlDQUxDX0sxOTIgKGssIDIyLCAweDk0LCAweDA2LCAweDQ4LCAweDNGKTsKLQkJQ0FMQ19LMTkyIChrLCAyNCwgMHhGMiwgMHg1RSwgMHhEMCwgMHhCQSk7Ci0JCUNBTENfSzE5MiAoaywgMjYsIDB4OEIsIDB4QUUsIDB4MzAsIDB4NUIpOwotCQlDQUxDX0sxOTIgKGssIDI4LCAweDg0LCAweDhBLCAweDU0LCAweDAwKTsKLQkJQ0FMQ19LMTkyIChrLCAzMCwgMHhERiwgMHhCQywgMHgyMywgMHg5RCk7Ci0JfSBlbHNlIHsgLyogMTI4LWJpdCBrZXkgKi8KLQkJLyogQ29tcHV0ZSB0aGUgUy1ib3hlcy4gKi8KLQkJZm9yICggaSA9IGogPSAwLCBrID0gMTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApIHsKLQkJCUNBTENfU0JfMiggaSwgY2FsY19zYl90Ymxbal0sIGNhbGNfc2JfdGJsW2tdICk7Ci0JCX0KLQotCQkvKiBDYWxjdWxhdGUgd2hpdGVuaW5nIGFuZCByb3VuZCBzdWJrZXlzLiAgVGhlIGNvbnN0YW50cyBhcmUKLQkJICogaW5kaWNlcyBvZiBzdWJrZXlzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCi0JCUNBTENfSyAodywgMCwgMHhBOSwgMHg3NSwgMHg2NywgMHhGMyk7Ci0JCUNBTENfSyAodywgMiwgMHhCMywgMHhDNiwgMHhFOCwgMHhGNCk7Ci0JCUNBTENfSyAodywgNCwgMHgwNCwgMHhEQiwgMHhGRCwgMHg3Qik7Ci0JCUNBTENfSyAodywgNiwgMHhBMywgMHhGQiwgMHg3NiwgMHhDOCk7Ci0JCUNBTENfSyAoaywgMCwgMHg5QSwgMHg0QSwgMHg5MiwgMHhEMyk7Ci0JCUNBTENfSyAoaywgMiwgMHg4MCwgMHhFNiwgMHg3OCwgMHg2Qik7Ci0JCUNBTENfSyAoaywgNCwgMHhFNCwgMHg0NSwgMHhERCwgMHg3RCk7Ci0JCUNBTENfSyAoaywgNiwgMHhEMSwgMHhFOCwgMHgzOCwgMHg0Qik7Ci0JCUNBTENfSyAoaywgOCwgMHgwRCwgMHhENiwgMHhDNiwgMHgzMik7Ci0JCUNBTENfSyAoaywgMTAsIDB4MzUsIDB4RDgsIDB4OTgsIDB4RkQpOwotCQlDQUxDX0sgKGssIDEyLCAweDE4LCAweDM3LCAweEY3LCAweDcxKTsKLQkJQ0FMQ19LIChrLCAxNCwgMHhFQywgMHhGMSwgMHg2QywgMHhFMSk7Ci0JCUNBTENfSyAoaywgMTYsIDB4NDMsIDB4MzAsIDB4NzUsIDB4MEYpOwotCQlDQUxDX0sgKGssIDE4LCAweDM3LCAweEY4LCAweDI2LCAweDFCKTsKLQkJQ0FMQ19LIChrLCAyMCwgMHhGQSwgMHg4NywgMHgxMywgMHhGQSk7Ci0JCUNBTENfSyAoaywgMjIsIDB4OTQsIDB4MDYsIDB4NDgsIDB4M0YpOwotCQlDQUxDX0sgKGssIDI0LCAweEYyLCAweDVFLCAweEQwLCAweEJBKTsKLQkJQ0FMQ19LIChrLCAyNiwgMHg4QiwgMHhBRSwgMHgzMCwgMHg1Qik7Ci0JCUNBTENfSyAoaywgMjgsIDB4ODQsIDB4OEEsIDB4NTQsIDB4MDApOwotCQlDQUxDX0sgKGssIDMwLCAweERGLCAweEJDLCAweDIzLCAweDlEKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KIAogLyogRW5jcnlwdCBvbmUgYmxvY2suICBpbiBhbmQgb3V0IG1heSBiZSB0aGUgc2FtZS4gKi8KIHN0YXRpYyB2b2lkIHR3b2Zpc2hfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0LCBjb25zdCB1OCAqaW4pCkBAIC04NzcsNiArMTgxLDggQEAKIAogc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIGFsZyA9IHsKIAkuY3JhX25hbWUgICAgICAgICAgID0gICAidHdvZmlzaCIsCisJLmNyYV9kcml2ZXJfbmFtZSAgICA9ICAgInR3b2Zpc2gtZ2VuZXJpYyIsCisJLmNyYV9wcmlvcml0eSAgICAgICA9ICAgMTAwLAogCS5jcmFfZmxhZ3MgICAgICAgICAgPSAgIENSWVBUT19BTEdfVFlQRV9DSVBIRVIsCiAJLmNyYV9ibG9ja3NpemUgICAgICA9ICAgVEZfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUgICAgICAgID0gICBzaXplb2Yoc3RydWN0IHR3b2Zpc2hfY3R4KSwKZGlmZiAtLWdpdCBhL2NyeXB0by90d29maXNoX2NvbW1vbi5jIGIvY3J5cHRvL3R3b2Zpc2hfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRiOWMwYwotLS0gL2Rldi9udWxsCisrKyBiL2NyeXB0by90d29maXNoX2NvbW1vbi5jCkBAIC0wLDAgKzEsNzQ0IEBACisvKgorICogQ29tbW9uIFR3b2Zpc2ggYWxnb3JpdGhtIHBhcnRzIHNoYXJlZCBiZXR3ZWVuIHRoZSBjIGFuZCBhc3NlbWJsZXIKKyAqIGltcGxlbWVudGF0aW9ucworICoKKyAqIE9yaWdpbmFsbHkgVHdvZmlzaCBmb3IgR1BHCisgKiBCeSBNYXR0aGV3IFNrYWxhIDxtc2thbGFAYW5zdXouc29va2UuYmMuY2E+LCBKdWx5IDI2LCAxOTk4CisgKiAyNTYtYml0IGtleSBsZW5ndGggYWRkZWQgTWFyY2ggMjAsIDE5OTkKKyAqIFNvbWUgbW9kaWZpY2F0aW9ucyB0byByZWR1Y2UgdGhlIHRleHQgc2l6ZSBieSBXZXJuZXIgS29jaCwgQXByaWwsIDE5OTgKKyAqIFBvcnRlZCB0byB0aGUga2VybmVsaSBwYXRjaCBieSBNYXJjIE11dHogPE1hcmNATXV0ei5jb20+CisgKiBQb3J0ZWQgdG8gQ3J5cHRvQVBJIGJ5IENvbGluIFNsYXRlciA8aG9ob0B0YWNvbWVhdC5uZXQ+CisgKgorICogVGhlIG9yaWdpbmFsIGF1dGhvciBoYXMgZGlzY2xhaW1lZCBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoaXMKKyAqIGNvZGUgYW5kIHRodXMgcHV0IGl0IGluIHRoZSBwdWJsaWMgZG9tYWluLiBUaGUgc3Vic2VxdWVudCBhdXRob3JzCisgKiBoYXZlIHB1dCB0aGlzIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNworICogVVNBCisgKgorICogVGhpcyBjb2RlIGlzIGEgImNsZWFuIHJvb20iIGltcGxlbWVudGF0aW9uLCB3cml0dGVuIGZyb20gdGhlIHBhcGVyCisgKiBfVHdvZmlzaDogQSAxMjgtQml0IEJsb2NrIENpcGhlcl8gYnkgQnJ1Y2UgU2NobmVpZXIsIEpvaG4gS2Vsc2V5LAorICogRG91ZyBXaGl0aW5nLCBEYXZpZCBXYWduZXIsIENocmlzIEhhbGwsIGFuZCBOaWVscyBGZXJndXNvbiwgYXZhaWxhYmxlCisgKiB0aHJvdWdoIGh0dHA6Ly93d3cuY291bnRlcnBhbmUuY29tL3R3b2Zpc2guaHRtbAorICoKKyAqIEZvciBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIG9uIG11bHRpcGxpY2F0aW9uIGluIGZpbml0ZSBmaWVsZHMsIHVzZWQgZm9yCisgKiB0aGUgbWF0cml4IG9wZXJhdGlvbnMgaW4gdGhlIGtleSBzY2hlZHVsZSwgc2VlIHRoZSBib29rIF9Db250ZW1wb3JhcnkKKyAqIEFic3RyYWN0IEFsZ2VicmFfIGJ5IEpvc2VwaCBBLiBHYWxsaWFuLCBlc3BlY2lhbGx5IGNoYXB0ZXIgMjIgaW4gdGhlCisgKiBUaGlyZCBFZGl0aW9uLgorICovCisKKyNpbmNsdWRlIDxjcnlwdG8vdHdvZmlzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKworLyogVGhlIGxhcmdlIHByZWNvbXB1dGVkIHRhYmxlcyBmb3IgdGhlIFR3b2Zpc2ggY2lwaGVyICh0d29maXNoLmMpCisgKiBUYWtlbiBmcm9tIHRoZSBzYW1lIHNvdXJjZSBhcyB0d29maXNoLmMKKyAqIE1hcmMgTXV0eiA8TWFyY0BNdXR6LmNvbT4KKyAqLworCisvKiBUaGVzZSB0d28gdGFibGVzIGFyZSB0aGUgcTAgYW5kIHExIHBlcm11dGF0aW9ucywgZXhhY3RseSBhcyBkZXNjcmliZWQgaW4KKyAqIHRoZSBUd29maXNoIHBhcGVyLiAqLworCitzdGF0aWMgY29uc3QgdTggcTBbMjU2XSA9IHsKKwkweEE5LCAweDY3LCAweEIzLCAweEU4LCAweDA0LCAweEZELCAweEEzLCAweDc2LCAweDlBLCAweDkyLCAweDgwLCAweDc4LAorCTB4RTQsIDB4REQsIDB4RDEsIDB4MzgsIDB4MEQsIDB4QzYsIDB4MzUsIDB4OTgsIDB4MTgsIDB4RjcsIDB4RUMsIDB4NkMsCisJMHg0MywgMHg3NSwgMHgzNywgMHgyNiwgMHhGQSwgMHgxMywgMHg5NCwgMHg0OCwgMHhGMiwgMHhEMCwgMHg4QiwgMHgzMCwKKwkweDg0LCAweDU0LCAweERGLCAweDIzLCAweDE5LCAweDVCLCAweDNELCAweDU5LCAweEYzLCAweEFFLCAweEEyLCAweDgyLAorCTB4NjMsIDB4MDEsIDB4ODMsIDB4MkUsIDB4RDksIDB4NTEsIDB4OUIsIDB4N0MsIDB4QTYsIDB4RUIsIDB4QTUsIDB4QkUsCisJMHgxNiwgMHgwQywgMHhFMywgMHg2MSwgMHhDMCwgMHg4QywgMHgzQSwgMHhGNSwgMHg3MywgMHgyQywgMHgyNSwgMHgwQiwKKwkweEJCLCAweDRFLCAweDg5LCAweDZCLCAweDUzLCAweDZBLCAweEI0LCAweEYxLCAweEUxLCAweEU2LCAweEJELCAweDQ1LAorCTB4RTIsIDB4RjQsIDB4QjYsIDB4NjYsIDB4Q0MsIDB4OTUsIDB4MDMsIDB4NTYsIDB4RDQsIDB4MUMsIDB4MUUsIDB4RDcsCisJMHhGQiwgMHhDMywgMHg4RSwgMHhCNSwgMHhFOSwgMHhDRiwgMHhCRiwgMHhCQSwgMHhFQSwgMHg3NywgMHgzOSwgMHhBRiwKKwkweDMzLCAweEM5LCAweDYyLCAweDcxLCAweDgxLCAweDc5LCAweDA5LCAweEFELCAweDI0LCAweENELCAweEY5LCAweEQ4LAorCTB4RTUsIDB4QzUsIDB4QjksIDB4NEQsIDB4NDQsIDB4MDgsIDB4ODYsIDB4RTcsIDB4QTEsIDB4MUQsIDB4QUEsIDB4RUQsCisJMHgwNiwgMHg3MCwgMHhCMiwgMHhEMiwgMHg0MSwgMHg3QiwgMHhBMCwgMHgxMSwgMHgzMSwgMHhDMiwgMHgyNywgMHg5MCwKKwkweDIwLCAweEY2LCAweDYwLCAweEZGLCAweDk2LCAweDVDLCAweEIxLCAweEFCLCAweDlFLCAweDlDLCAweDUyLCAweDFCLAorCTB4NUYsIDB4OTMsIDB4MEEsIDB4RUYsIDB4OTEsIDB4ODUsIDB4NDksIDB4RUUsIDB4MkQsIDB4NEYsIDB4OEYsIDB4M0IsCisJMHg0NywgMHg4NywgMHg2RCwgMHg0NiwgMHhENiwgMHgzRSwgMHg2OSwgMHg2NCwgMHgyQSwgMHhDRSwgMHhDQiwgMHgyRiwKKwkweEZDLCAweDk3LCAweDA1LCAweDdBLCAweEFDLCAweDdGLCAweEQ1LCAweDFBLCAweDRCLCAweDBFLCAweEE3LCAweDVBLAorCTB4MjgsIDB4MTQsIDB4M0YsIDB4MjksIDB4ODgsIDB4M0MsIDB4NEMsIDB4MDIsIDB4QjgsIDB4REEsIDB4QjAsIDB4MTcsCisJMHg1NSwgMHgxRiwgMHg4QSwgMHg3RCwgMHg1NywgMHhDNywgMHg4RCwgMHg3NCwgMHhCNywgMHhDNCwgMHg5RiwgMHg3MiwKKwkweDdFLCAweDE1LCAweDIyLCAweDEyLCAweDU4LCAweDA3LCAweDk5LCAweDM0LCAweDZFLCAweDUwLCAweERFLCAweDY4LAorCTB4NjUsIDB4QkMsIDB4REIsIDB4RjgsIDB4QzgsIDB4QTgsIDB4MkIsIDB4NDAsIDB4REMsIDB4RkUsIDB4MzIsIDB4QTQsCisJMHhDQSwgMHgxMCwgMHgyMSwgMHhGMCwgMHhEMywgMHg1RCwgMHgwRiwgMHgwMCwgMHg2RiwgMHg5RCwgMHgzNiwgMHg0MiwKKwkweDRBLCAweDVFLCAweEMxLCAweEUwCit9OworCitzdGF0aWMgY29uc3QgdTggcTFbMjU2XSA9IHsKKwkweDc1LCAweEYzLCAweEM2LCAweEY0LCAweERCLCAweDdCLCAweEZCLCAweEM4LCAweDRBLCAweEQzLCAweEU2LCAweDZCLAorCTB4NDUsIDB4N0QsIDB4RTgsIDB4NEIsIDB4RDYsIDB4MzIsIDB4RDgsIDB4RkQsIDB4MzcsIDB4NzEsIDB4RjEsIDB4RTEsCisJMHgzMCwgMHgwRiwgMHhGOCwgMHgxQiwgMHg4NywgMHhGQSwgMHgwNiwgMHgzRiwgMHg1RSwgMHhCQSwgMHhBRSwgMHg1QiwKKwkweDhBLCAweDAwLCAweEJDLCAweDlELCAweDZELCAweEMxLCAweEIxLCAweDBFLCAweDgwLCAweDVELCAweEQyLCAweEQ1LAorCTB4QTAsIDB4ODQsIDB4MDcsIDB4MTQsIDB4QjUsIDB4OTAsIDB4MkMsIDB4QTMsIDB4QjIsIDB4NzMsIDB4NEMsIDB4NTQsCisJMHg5MiwgMHg3NCwgMHgzNiwgMHg1MSwgMHgzOCwgMHhCMCwgMHhCRCwgMHg1QSwgMHhGQywgMHg2MCwgMHg2MiwgMHg5NiwKKwkweDZDLCAweDQyLCAweEY3LCAweDEwLCAweDdDLCAweDI4LCAweDI3LCAweDhDLCAweDEzLCAweDk1LCAweDlDLCAweEM3LAorCTB4MjQsIDB4NDYsIDB4M0IsIDB4NzAsIDB4Q0EsIDB4RTMsIDB4ODUsIDB4Q0IsIDB4MTEsIDB4RDAsIDB4OTMsIDB4QjgsCisJMHhBNiwgMHg4MywgMHgyMCwgMHhGRiwgMHg5RiwgMHg3NywgMHhDMywgMHhDQywgMHgwMywgMHg2RiwgMHgwOCwgMHhCRiwKKwkweDQwLCAweEU3LCAweDJCLCAweEUyLCAweDc5LCAweDBDLCAweEFBLCAweDgyLCAweDQxLCAweDNBLCAweEVBLCAweEI5LAorCTB4RTQsIDB4OUEsIDB4QTQsIDB4OTcsIDB4N0UsIDB4REEsIDB4N0EsIDB4MTcsIDB4NjYsIDB4OTQsIDB4QTEsIDB4MUQsCisJMHgzRCwgMHhGMCwgMHhERSwgMHhCMywgMHgwQiwgMHg3MiwgMHhBNywgMHgxQywgMHhFRiwgMHhEMSwgMHg1MywgMHgzRSwKKwkweDhGLCAweDMzLCAweDI2LCAweDVGLCAweEVDLCAweDc2LCAweDJBLCAweDQ5LCAweDgxLCAweDg4LCAweEVFLCAweDIxLAorCTB4QzQsIDB4MUEsIDB4RUIsIDB4RDksIDB4QzUsIDB4MzksIDB4OTksIDB4Q0QsIDB4QUQsIDB4MzEsIDB4OEIsIDB4MDEsCisJMHgxOCwgMHgyMywgMHhERCwgMHgxRiwgMHg0RSwgMHgyRCwgMHhGOSwgMHg0OCwgMHg0RiwgMHhGMiwgMHg2NSwgMHg4RSwKKwkweDc4LCAweDVDLCAweDU4LCAweDE5LCAweDhELCAweEU1LCAweDk4LCAweDU3LCAweDY3LCAweDdGLCAweDA1LCAweDY0LAorCTB4QUYsIDB4NjMsIDB4QjYsIDB4RkUsIDB4RjUsIDB4QjcsIDB4M0MsIDB4QTUsIDB4Q0UsIDB4RTksIDB4NjgsIDB4NDQsCisJMHhFMCwgMHg0RCwgMHg0MywgMHg2OSwgMHgyOSwgMHgyRSwgMHhBQywgMHgxNSwgMHg1OSwgMHhBOCwgMHgwQSwgMHg5RSwKKwkweDZFLCAweDQ3LCAweERGLCAweDM0LCAweDM1LCAweDZBLCAweENGLCAweERDLCAweDIyLCAweEM5LCAweEMwLCAweDlCLAorCTB4ODksIDB4RDQsIDB4RUQsIDB4QUIsIDB4MTIsIDB4QTIsIDB4MEQsIDB4NTIsIDB4QkIsIDB4MDIsIDB4MkYsIDB4QTksCisJMHhENywgMHg2MSwgMHgxRSwgMHhCNCwgMHg1MCwgMHgwNCwgMHhGNiwgMHhDMiwgMHgxNiwgMHgyNSwgMHg4NiwgMHg1NiwKKwkweDU1LCAweDA5LCAweEJFLCAweDkxCit9OworCisvKiBUaGVzZSBNRFMgdGFibGVzIGFyZSBhY3R1YWxseSB0YWJsZXMgb2YgTURTIGNvbXBvc2VkIHdpdGggcTAgYW5kIHExLAorICogYmVjYXVzZSBpdCBpcyBvbmx5IGV2ZXIgdXNlZCB0aGF0IHdheSBhbmQgd2UgY2FuIHNhdmUgc29tZSB0aW1lIGJ5CisgKiBwcmVjb21wdXRpbmcuICBPZiBjb3Vyc2UgdGhlIG1haW4gc2F2aW5nIGNvbWVzIGZyb20gcHJlY29tcHV0aW5nIHRoZQorICogR0YoMl44KSBtdWx0aXBsaWNhdGlvbiBpbnZvbHZlZCBpbiB0aGUgTURTIG1hdHJpeCBtdWx0aXBseTsgYnkgbG9va2luZworICogdGhpbmdzIHVwIGluIHRoZXNlIHRhYmxlcyB3ZSByZWR1Y2UgdGhlIG1hdHJpeCBtdWx0aXBseSB0byBmb3VyIGxvb2t1cHMKKyAqIGFuZCB0aHJlZSBYT1JzLiAgU2VtaS1mb3JtYWxseSwgdGhlIGRlZmluaXRpb24gb2YgdGhlc2UgdGFibGVzIGlzOgorICogbWRzWzBdW2ldID0gTURTIChxMVtpXSAwIDAgMCleVCAgbWRzWzFdW2ldID0gTURTICgwIHEwW2ldIDAgMCleVAorICogbWRzWzJdW2ldID0gTURTICgwIDAgcTFbaV0gMCleVCAgbWRzWzNdW2ldID0gTURTICgwIDAgMCBxMFtpXSleVAorICogd2hlcmUgXlQgbWVhbnMgInRyYW5zcG9zZSIsIHRoZSBtYXRyaXggbXVsdGlwbHkgaXMgcGVyZm9ybWVkIGluIEdGKDJeOCkKKyAqIHJlcHJlc2VudGVkIGFzIEdGKDIpW3hdL3YoeCkgd2hlcmUgdih4KT14XjgreF42K3heNSt4XjMrMSBhcyBkZXNjcmliZWQKKyAqIGJ5IFNjaG5laWVyIGV0IGFsLCBhbmQgSSdtIGNhc3VhbGx5IGdsb3NzaW5nIG92ZXIgdGhlIGJ5dGUvd29yZAorICogY29udmVyc2lvbiBpc3N1ZXMuICovCisKK3N0YXRpYyBjb25zdCB1MzIgbWRzWzRdWzI1Nl0gPSB7CisJeworCTB4QkNCQzMyNzUsIDB4RUNFQzIxRjMsIDB4MjAyMDQzQzYsIDB4QjNCM0M5RjQsIDB4REFEQTAzREIsIDB4MDIwMjhCN0IsCisJMHhFMkUyMkJGQiwgMHg5RTlFRkFDOCwgMHhDOUM5RUM0QSwgMHhENEQ0MDlEMywgMHgxODE4NkJFNiwgMHgxRTFFOUY2QiwKKwkweDk4OTgwRTQ1LCAweEIyQjIzODdELCAweEE2QTZEMkU4LCAweDI2MjZCNzRCLCAweDNDM0M1N0Q2LCAweDkzOTM4QTMyLAorCTB4ODI4MkVFRDgsIDB4NTI1Mjk4RkQsIDB4N0I3QkQ0MzcsIDB4QkJCQjM3NzEsIDB4NUI1Qjk3RjEsIDB4NDc0NzgzRTEsCisJMHgyNDI0M0MzMCwgMHg1MTUxRTIwRiwgMHhCQUJBQzZGOCwgMHg0QTRBRjMxQiwgMHhCRkJGNDg4NywgMHgwRDBENzBGQSwKKwkweEIwQjBCMzA2LCAweDc1NzVERTNGLCAweEQyRDJGRDVFLCAweDdEN0QyMEJBLCAweDY2NjYzMUFFLCAweDNBM0FBMzVCLAorCTB4NTk1OTFDOEEsIDB4MDAwMDAwMDAsIDB4Q0RDRDkzQkMsIDB4MUExQUUwOUQsIDB4QUVBRTJDNkQsIDB4N0Y3RkFCQzEsCisJMHgyQjJCQzdCMSwgMHhCRUJFQjkwRSwgMHhFMEUwQTA4MCwgMHg4QThBMTA1RCwgMHgzQjNCNTJEMiwgMHg2NDY0QkFENSwKKwkweEQ4RDg4OEEwLCAweEU3RTdBNTg0LCAweDVGNUZFODA3LCAweDFCMUIxMTE0LCAweDJDMkNDMkI1LCAweEZDRkNCNDkwLAorCTB4MzEzMTI3MkMsIDB4ODA4MDY1QTMsIDB4NzM3MzJBQjIsIDB4MEMwQzgxNzMsIDB4Nzk3OTVGNEMsIDB4NkI2QjQxNTQsCisJMHg0QjRCMDI5MiwgMHg1MzUzNjk3NCwgMHg5NDk0OEYzNiwgMHg4MzgzMUY1MSwgMHgyQTJBMzYzOCwgMHhDNEM0OUNCMCwKKwkweDIyMjJDOEJELCAweEQ1RDVGODVBLCAweEJEQkRDM0ZDLCAweDQ4NDg3ODYwLCAweEZGRkZDRTYyLCAweDRDNEMwNzk2LAorCTB4NDE0MTc3NkMsIDB4QzdDN0U2NDIsIDB4RUJFQjI0RjcsIDB4MUMxQzE0MTAsIDB4NUQ1RDYzN0MsIDB4MzYzNjIyMjgsCisJMHg2NzY3QzAyNywgMHhFOUU5QUY4QywgMHg0NDQ0RjkxMywgMHgxNDE0RUE5NSwgMHhGNUY1QkI5QywgMHhDRkNGMThDNywKKwkweDNGM0YyRDI0LCAweEMwQzBFMzQ2LCAweDcyNzJEQjNCLCAweDU0NTQ2QzcwLCAweDI5Mjk0Q0NBLCAweEYwRjAzNUUzLAorCTB4MDgwOEZFODUsIDB4QzZDNjE3Q0IsIDB4RjNGMzRGMTEsIDB4OEM4Q0U0RDAsIDB4QTRBNDU5OTMsIDB4Q0FDQTk2QjgsCisJMHg2ODY4M0JBNiwgMHhCOEI4NEQ4MywgMHgzODM4MjgyMCwgMHhFNUU1MkVGRiwgMHhBREFENTY5RiwgMHgwQjBCODQ3NywKKwkweEM4QzgxREMzLCAweDk5OTlGRkNDLCAweDU4NThFRDAzLCAweDE5MTk5QTZGLCAweDBFMEUwQTA4LCAweDk1OTU3RUJGLAorCTB4NzA3MDUwNDAsIDB4RjdGNzMwRTcsIDB4NkU2RUNGMkIsIDB4MUYxRjZFRTIsIDB4QjVCNTNENzksIDB4MDkwOTBGMEMsCisJMHg2MTYxMzRBQSwgMHg1NzU3MTY4MiwgMHg5RjlGMEI0MSwgMHg5RDlEODAzQSwgMHgxMTExNjRFQSwgMHgyNTI1Q0RCOSwKKwkweEFGQUZEREU0LCAweDQ1NDUwODlBLCAweERGREY4REE0LCAweEEzQTM1Qzk3LCAweEVBRUFENTdFLCAweDM1MzU1OERBLAorCTB4RURFREQwN0EsIDB4NDM0M0ZDMTcsIDB4RjhGOENCNjYsIDB4RkJGQkIxOTQsIDB4MzczN0QzQTEsIDB4RkFGQTQwMUQsCisJMHhDMkMyNjgzRCwgMHhCNEI0Q0NGMCwgMHgzMjMyNURERSwgMHg5QzlDNzFCMywgMHg1NjU2RTcwQiwgMHhFM0UzREE3MiwKKwkweDg3ODc2MEE3LCAweDE1MTUxQjFDLCAweEY5RjkzQUVGLCAweDYzNjNCRkQxLCAweDM0MzRBOTUzLCAweDlBOUE4NTNFLAorCTB4QjFCMTQyOEYsIDB4N0M3Q0QxMzMsIDB4ODg4ODlCMjYsIDB4M0QzREE2NUYsIDB4QTFBMUQ3RUMsIDB4RTRFNERGNzYsCisJMHg4MTgxOTQyQSwgMHg5MTkxMDE0OSwgMHgwRjBGRkI4MSwgMHhFRUVFQUE4OCwgMHgxNjE2NjFFRSwgMHhEN0Q3NzMyMSwKKwkweDk3OTdGNUM0LCAweEE1QTVBODFBLCAweEZFRkUzRkVCLCAweDZENkRCNUQ5LCAweDc4NzhBRUM1LCAweEM1QzU2RDM5LAorCTB4MUQxREU1OTksIDB4NzY3NkE0Q0QsIDB4M0UzRURDQUQsIDB4Q0JDQjY3MzEsIDB4QjZCNjQ3OEIsIDB4RUZFRjVCMDEsCisJMHgxMjEyMUUxOCwgMHg2MDYwQzUyMywgMHg2QTZBQjBERCwgMHg0RDRERjYxRiwgMHhDRUNFRTk0RSwgMHhERURFN0MyRCwKKwkweDU1NTU5REY5LCAweDdFN0U1QTQ4LCAweDIxMjFCMjRGLCAweDAzMDM3QUYyLCAweEEwQTAyNjY1LCAweDVFNUUxOThFLAorCTB4NUE1QTY2NzgsIDB4NjU2NTRCNUMsIDB4NjI2MjRFNTgsIDB4RkRGRDQ1MTksIDB4MDYwNkY0OEQsIDB4NDA0MDg2RTUsCisJMHhGMkYyQkU5OCwgMHgzMzMzQUM1NywgMHgxNzE3OTA2NywgMHgwNTA1OEU3RiwgMHhFOEU4NUUwNSwgMHg0RjRGN0Q2NCwKKwkweDg5ODk2QUFGLCAweDEwMTA5NTYzLCAweDc0NzQyRkI2LCAweDBBMEE3NUZFLCAweDVDNUM5MkY1LCAweDlCOUI3NEI3LAorCTB4MkQyRDMzM0MsIDB4MzAzMEQ2QTUsIDB4MkUyRTQ5Q0UsIDB4NDk0OTg5RTksIDB4NDY0NjcyNjgsIDB4Nzc3NzU1NDQsCisJMHhBOEE4RDhFMCwgMHg5Njk2MDQ0RCwgMHgyODI4QkQ0MywgMHhBOUE5Mjk2OSwgMHhEOUQ5NzkyOSwgMHg4Njg2OTEyRSwKKwkweEQxRDE4N0FDLCAweEY0RjQ0QTE1LCAweDhEOEQxNTU5LCAweEQ2RDY4MkE4LCAweEI5QjlCQzBBLCAweDQyNDIwRDlFLAorCTB4RjZGNkMxNkUsIDB4MkYyRkI4NDcsIDB4RERERDA2REYsIDB4MjMyMzM5MzQsIDB4Q0NDQzYyMzUsIDB4RjFGMUM0NkEsCisJMHhDMUMxMTJDRiwgMHg4NTg1RUJEQywgMHg4RjhGOUUyMiwgMHg3MTcxQTFDOSwgMHg5MDkwRjBDMCwgMHhBQUFBNTM5QiwKKwkweDAxMDFGMTg5LCAweDhCOEJFMUQ0LCAweDRFNEU4Q0VELCAweDhFOEU2RkFCLCAweEFCQUJBMjEyLCAweDZGNkYzRUEyLAorCTB4RTZFNjU0MEQsIDB4REJEQkYyNTIsIDB4OTI5MjdCQkIsIDB4QjdCN0I2MDIsIDB4Njk2OUNBMkYsIDB4MzkzOUQ5QTksCisJMHhEM0QzMENENywgMHhBN0E3MjM2MSwgMHhBMkEyQUQxRSwgMHhDM0MzOTlCNCwgMHg2QzZDNDQ1MCwgMHgwNzA3MDUwNCwKKwkweDA0MDQ3RkY2LCAweDI3Mjc0NkMyLCAweEFDQUNBNzE2LCAweEQwRDA3NjI1LCAweDUwNTAxMzg2LCAweERDRENGNzU2LAorCTB4ODQ4NDFBNTUsIDB4RTFFMTUxMDksIDB4N0E3QTI1QkUsIDB4MTMxM0VGOTF9LAorCisJeworCTB4QTlEOTM5MzksIDB4Njc5MDE3MTcsIDB4QjM3MTlDOUMsIDB4RThEMkE2QTYsIDB4MDQwNTA3MDcsIDB4RkQ5ODUyNTIsCisJMHhBMzY1ODA4MCwgMHg3NkRGRTRFNCwgMHg5QTA4NDU0NSwgMHg5MjAyNEI0QiwgMHg4MEEwRTBFMCwgMHg3ODY2NUE1QSwKKwkweEU0RERBRkFGLCAweEREQjA2QTZBLCAweEQxQkY2MzYzLCAweDM4MzYyQTJBLCAweDBENTRFNkU2LCAweEM2NDMyMDIwLAorCTB4MzU2MkNDQ0MsIDB4OThCRUYyRjIsIDB4MTgxRTEyMTIsIDB4RjcyNEVCRUIsIDB4RUNEN0ExQTEsIDB4NkM3NzQxNDEsCisJMHg0M0JEMjgyOCwgMHg3NTMyQkNCQywgMHgzN0Q0N0I3QiwgMHgyNjlCODg4OCwgMHhGQTcwMEQwRCwgMHgxM0Y5NDQ0NCwKKwkweDk0QjFGQkZCLCAweDQ4NUE3RTdFLCAweEYyN0EwMzAzLCAweEQwRTQ4QzhDLCAweDhCNDdCNkI2LCAweDMwM0MyNDI0LAorCTB4ODRBNUU3RTcsIDB4NTQ0MTZCNkIsIDB4REYwNkREREQsIDB4MjNDNTYwNjAsIDB4MTk0NUZERkQsIDB4NUJBMzNBM0EsCisJMHgzRDY4QzJDMiwgMHg1OTE1OEQ4RCwgMHhGMzIxRUNFQywgMHhBRTMxNjY2NiwgMHhBMjNFNkY2RiwgMHg4MjE2NTc1NywKKwkweDYzOTUxMDEwLCAweDAxNUJFRkVGLCAweDgzNERCOEI4LCAweDJFOTE4Njg2LCAweEQ5QjU2RDZELCAweDUxMUY4MzgzLAorCTB4OUI1M0FBQUEsIDB4N0M2MzVENUQsIDB4QTYzQjY4NjgsIDB4RUIzRkZFRkUsIDB4QTVENjMwMzAsIDB4QkUyNTdBN0EsCisJMHgxNkE3QUNBQywgMHgwQzBGMDkwOSwgMHhFMzM1RjBGMCwgMHg2MTIzQTdBNywgMHhDMEYwOTA5MCwgMHg4Q0FGRTlFOSwKKwkweDNBODA5RDlELCAweEY1OTI1QzVDLCAweDczODEwQzBDLCAweDJDMjczMTMxLCAweDI1NzZEMEQwLCAweDBCRTc1NjU2LAorCTB4QkI3QjkyOTIsIDB4NEVFOUNFQ0UsIDB4ODlGMTAxMDEsIDB4NkI5RjFFMUUsIDB4NTNBOTM0MzQsIDB4NkFDNEYxRjEsCisJMHhCNDk5QzNDMywgMHhGMTk3NUI1QiwgMHhFMTgzNDc0NywgMHhFNjZCMTgxOCwgMHhCREM4MjIyMiwgMHg0NTBFOTg5OCwKKwkweEUyNkUxRjFGLCAweEY0QzlCM0IzLCAweEI2MkY3NDc0LCAweDY2Q0JGOEY4LCAweENDRkY5OTk5LCAweDk1RUExNDE0LAorCTB4MDNFRDU4NTgsIDB4NTZGN0RDREMsIDB4RDRFMThCOEIsIDB4MUMxQjE1MTUsIDB4MUVBREEyQTIsIDB4RDcwQ0QzRDMsCisJMHhGQjJCRTJFMiwgMHhDMzFEQzhDOCwgMHg4RTE5NUU1RSwgMHhCNUMyMkMyQywgMHhFOTg5NDk0OSwgMHhDRjEyQzFDMSwKKwkweEJGN0U5NTk1LCAweEJBMjA3RDdELCAweEVBNjQxMTExLCAweDc3ODQwQjBCLCAweDM5NkRDNUM1LCAweEFGNkE4OTg5LAorCTB4MzNEMTdDN0MsIDB4QzlBMTcxNzEsIDB4NjJDRUZGRkYsIDB4NzEzN0JCQkIsIDB4ODFGQjBGMEYsIDB4NzkzREI1QjUsCisJMHgwOTUxRTFFMSwgMHhBRERDM0UzRSwgMHgyNDJEM0YzRiwgMHhDREE0NzY3NiwgMHhGOTlENTU1NSwgMHhEOEVFODI4MiwKKwkweEU1ODY0MDQwLCAweEM1QUU3ODc4LCAweEI5Q0QyNTI1LCAweDREMDQ5Njk2LCAweDQ0NTU3Nzc3LCAweDA4MEEwRTBFLAorCTB4ODYxMzUwNTAsIDB4RTczMEY3RjcsIDB4QTFEMzM3MzcsIDB4MUQ0MEZBRkEsIDB4QUEzNDYxNjEsIDB4RUQ4QzRFNEUsCisJMHgwNkIzQjBCMCwgMHg3MDZDNTQ1NCwgMHhCMjJBNzM3MywgMHhEMjUyM0IzQiwgMHg0MTBCOUY5RiwgMHg3QjhCMDIwMiwKKwkweEEwODhEOEQ4LCAweDExNEZGM0YzLCAweDMxNjdDQkNCLCAweEMyNDYyNzI3LCAweDI3QzA2NzY3LCAweDkwQjRGQ0ZDLAorCTB4MjAyODM4MzgsIDB4RjY3RjA0MDQsIDB4NjA3ODQ4NDgsIDB4RkYyRUU1RTUsIDB4OTYwNzRDNEMsIDB4NUM0QjY1NjUsCisJMHhCMUM3MkIyQiwgMHhBQjZGOEU4RSwgMHg5RTBENDI0MiwgMHg5Q0JCRjVGNSwgMHg1MkYyREJEQiwgMHgxQkYzNEE0QSwKKwkweDVGQTYzRDNELCAweDkzNTlBNEE0LCAweDBBQkNCOUI5LCAweEVGM0FGOUY5LCAweDkxRUYxMzEzLCAweDg1RkUwODA4LAorCTB4NDkwMTkxOTEsIDB4RUU2MTE2MTYsIDB4MkQ3Q0RFREUsIDB4NEZCMjIxMjEsIDB4OEY0MkIxQjEsIDB4M0JEQjcyNzIsCisJMHg0N0I4MkYyRiwgMHg4NzQ4QkZCRiwgMHg2RDJDQUVBRSwgMHg0NkUzQzBDMCwgMHhENjU3M0MzQywgMHgzRTg1OUE5QSwKKwkweDY5MjlBOUE5LCAweDY0N0Q0RjRGLCAweDJBOTQ4MTgxLCAweENFNDkyRTJFLCAweENCMTdDNkM2LCAweDJGQ0E2OTY5LAorCTB4RkNDM0JEQkQsIDB4OTc1Q0EzQTMsIDB4MDU1RUU4RTgsIDB4N0FEMEVERUQsIDB4QUM4N0QxRDEsIDB4N0Y4RTA1MDUsCisJMHhENUJBNjQ2NCwgMHgxQUE4QTVBNSwgMHg0QkI3MjYyNiwgMHgwRUI5QkVCRSwgMHhBNzYwODc4NywgMHg1QUY4RDVENSwKKwkweDI4MjIzNjM2LCAweDE0MTExQjFCLCAweDNGREU3NTc1LCAweDI5NzlEOUQ5LCAweDg4QUFFRUVFLCAweDNDMzMyRDJELAorCTB4NEM1Rjc5NzksIDB4MDJCNkI3QjcsIDB4Qjg5NkNBQ0EsIDB4REE1ODM1MzUsIDB4QjA5Q0M0QzQsIDB4MTdGQzQzNDMsCisJMHg1NTFBODQ4NCwgMHgxRkY2NEQ0RCwgMHg4QTFDNTk1OSwgMHg3RDM4QjJCMiwgMHg1N0FDMzMzMywgMHhDNzE4Q0ZDRiwKKwkweDhERjQwNjA2LCAweDc0Njk1MzUzLCAweEI3NzQ5QjlCLCAweEM0RjU5Nzk3LCAweDlGNTZBREFELCAweDcyREFFM0UzLAorCTB4N0VENUVBRUEsIDB4MTU0QUY0RjQsIDB4MjI5RThGOEYsIDB4MTJBMkFCQUIsIDB4NTg0RTYyNjIsIDB4MDdFODVGNUYsCisJMHg5OUU1MUQxRCwgMHgzNDM5MjMyMywgMHg2RUMxRjZGNiwgMHg1MDQ0NkM2QywgMHhERTVEMzIzMiwgMHg2ODcyNDY0NiwKKwkweDY1MjZBMEEwLCAweEJDOTNDRENELCAweERCMDNEQURBLCAweEY4QzZCQUJBLCAweEM4RkE5RTlFLCAweEE4ODJENkQ2LAorCTB4MkJDRjZFNkUsIDB4NDA1MDcwNzAsIDB4RENFQjg1ODUsIDB4RkU3NTBBMEEsIDB4MzI4QTkzOTMsIDB4QTQ4RERGREYsCisJMHhDQTRDMjkyOSwgMHgxMDE0MUMxQywgMHgyMTczRDdENywgMHhGMENDQjRCNCwgMHhEMzA5RDRENCwgMHg1RDEwOEE4QSwKKwkweDBGRTI1MTUxLCAweDAwMDAwMDAwLCAweDZGOUExOTE5LCAweDlERTAxQTFBLCAweDM2OEY5NDk0LCAweDQyRTZDN0M3LAorCTB4NEFFQ0M5QzksIDB4NUVGREQyRDIsIDB4QzFBQjdGN0YsIDB4RTBEOEE4QTh9LAorCisJeworCTB4QkM3NUJDMzIsIDB4RUNGM0VDMjEsIDB4MjBDNjIwNDMsIDB4QjNGNEIzQzksIDB4REFEQkRBMDMsIDB4MDI3QjAyOEIsCisJMHhFMkZCRTIyQiwgMHg5RUM4OUVGQSwgMHhDOTRBQzlFQywgMHhENEQzRDQwOSwgMHgxOEU2MTg2QiwgMHgxRTZCMUU5RiwKKwkweDk4NDU5ODBFLCAweEIyN0RCMjM4LCAweEE2RThBNkQyLCAweDI2NEIyNkI3LCAweDNDRDYzQzU3LCAweDkzMzI5MzhBLAorCTB4ODJEODgyRUUsIDB4NTJGRDUyOTgsIDB4N0IzNzdCRDQsIDB4QkI3MUJCMzcsIDB4NUJGMTVCOTcsIDB4NDdFMTQ3ODMsCisJMHgyNDMwMjQzQywgMHg1MTBGNTFFMiwgMHhCQUY4QkFDNiwgMHg0QTFCNEFGMywgMHhCRjg3QkY0OCwgMHgwREZBMEQ3MCwKKwkweEIwMDZCMEIzLCAweDc1M0Y3NURFLCAweEQyNUVEMkZELCAweDdEQkE3RDIwLCAweDY2QUU2NjMxLCAweDNBNUIzQUEzLAorCTB4NTk4QTU5MUMsIDB4MDAwMDAwMDAsIDB4Q0RCQ0NEOTMsIDB4MUE5RDFBRTAsIDB4QUU2REFFMkMsIDB4N0ZDMTdGQUIsCisJMHgyQkIxMkJDNywgMHhCRTBFQkVCOSwgMHhFMDgwRTBBMCwgMHg4QTVEOEExMCwgMHgzQkQyM0I1MiwgMHg2NEQ1NjRCQSwKKwkweEQ4QTBEODg4LCAweEU3ODRFN0E1LCAweDVGMDc1RkU4LCAweDFCMTQxQjExLCAweDJDQjUyQ0MyLCAweEZDOTBGQ0I0LAorCTB4MzEyQzMxMjcsIDB4ODBBMzgwNjUsIDB4NzNCMjczMkEsIDB4MEM3MzBDODEsIDB4Nzk0Qzc5NUYsIDB4NkI1NDZCNDEsCisJMHg0QjkyNEIwMiwgMHg1Mzc0NTM2OSwgMHg5NDM2OTQ4RiwgMHg4MzUxODMxRiwgMHgyQTM4MkEzNiwgMHhDNEIwQzQ5QywKKwkweDIyQkQyMkM4LCAweEQ1NUFENUY4LCAweEJERkNCREMzLCAweDQ4NjA0ODc4LCAweEZGNjJGRkNFLCAweDRDOTY0QzA3LAorCTB4NDE2QzQxNzcsIDB4Qzc0MkM3RTYsIDB4RUJGN0VCMjQsIDB4MUMxMDFDMTQsIDB4NUQ3QzVENjMsIDB4MzYyODM2MjIsCisJMHg2NzI3NjdDMCwgMHhFOThDRTlBRiwgMHg0NDEzNDRGOSwgMHgxNDk1MTRFQSwgMHhGNTlDRjVCQiwgMHhDRkM3Q0YxOCwKKwkweDNGMjQzRjJELCAweEMwNDZDMEUzLCAweDcyM0I3MkRCLCAweDU0NzA1NDZDLCAweDI5Q0EyOTRDLCAweEYwRTNGMDM1LAorCTB4MDg4NTA4RkUsIDB4QzZDQkM2MTcsIDB4RjMxMUYzNEYsIDB4OENEMDhDRTQsIDB4QTQ5M0E0NTksIDB4Q0FCOENBOTYsCisJMHg2OEE2NjgzQiwgMHhCODgzQjg0RCwgMHgzODIwMzgyOCwgMHhFNUZGRTUyRSwgMHhBRDlGQUQ1NiwgMHgwQjc3MEI4NCwKKwkweEM4QzNDODFELCAweDk5Q0M5OUZGLCAweDU4MDM1OEVELCAweDE5NkYxOTlBLCAweDBFMDgwRTBBLCAweDk1QkY5NTdFLAorCTB4NzA0MDcwNTAsIDB4RjdFN0Y3MzAsIDB4NkUyQjZFQ0YsIDB4MUZFMjFGNkUsIDB4QjU3OUI1M0QsIDB4MDkwQzA5MEYsCisJMHg2MUFBNjEzNCwgMHg1NzgyNTcxNiwgMHg5RjQxOUYwQiwgMHg5RDNBOUQ4MCwgMHgxMUVBMTE2NCwgMHgyNUI5MjVDRCwKKwkweEFGRTRBRkRELCAweDQ1OUE0NTA4LCAweERGQTRERjhELCAweEEzOTdBMzVDLCAweEVBN0VFQUQ1LCAweDM1REEzNTU4LAorCTB4RUQ3QUVERDAsIDB4NDMxNzQzRkMsIDB4Rjg2NkY4Q0IsIDB4RkI5NEZCQjEsIDB4MzdBMTM3RDMsIDB4RkExREZBNDAsCisJMHhDMjNEQzI2OCwgMHhCNEYwQjRDQywgMHgzMkRFMzI1RCwgMHg5Q0IzOUM3MSwgMHg1NjBCNTZFNywgMHhFMzcyRTNEQSwKKwkweDg3QTc4NzYwLCAweDE1MUMxNTFCLCAweEY5RUZGOTNBLCAweDYzRDE2M0JGLCAweDM0NTMzNEE5LCAweDlBM0U5QTg1LAorCTB4QjE4RkIxNDIsIDB4N0MzMzdDRDEsIDB4ODgyNjg4OUIsIDB4M0Q1RjNEQTYsIDB4QTFFQ0ExRDcsIDB4RTQ3NkU0REYsCisJMHg4MTJBODE5NCwgMHg5MTQ5OTEwMSwgMHgwRjgxMEZGQiwgMHhFRTg4RUVBQSwgMHgxNkVFMTY2MSwgMHhENzIxRDc3MywKKwkweDk3QzQ5N0Y1LCAweEE1MUFBNUE4LCAweEZFRUJGRTNGLCAweDZERDk2REI1LCAweDc4QzU3OEFFLCAweEM1MzlDNTZELAorCTB4MUQ5OTFERTUsIDB4NzZDRDc2QTQsIDB4M0VBRDNFREMsIDB4Q0IzMUNCNjcsIDB4QjY4QkI2NDcsIDB4RUYwMUVGNUIsCisJMHgxMjE4MTIxRSwgMHg2MDIzNjBDNSwgMHg2QURENkFCMCwgMHg0RDFGNERGNiwgMHhDRTRFQ0VFOSwgMHhERTJEREU3QywKKwkweDU1Rjk1NTlELCAweDdFNDg3RTVBLCAweDIxNEYyMUIyLCAweDAzRjIwMzdBLCAweEEwNjVBMDI2LCAweDVFOEU1RTE5LAorCTB4NUE3ODVBNjYsIDB4NjU1QzY1NEIsIDB4NjI1ODYyNEUsIDB4RkQxOUZENDUsIDB4MDY4RDA2RjQsIDB4NDBFNTQwODYsCisJMHhGMjk4RjJCRSwgMHgzMzU3MzNBQywgMHgxNzY3MTc5MCwgMHgwNTdGMDU4RSwgMHhFODA1RTg1RSwgMHg0RjY0NEY3RCwKKwkweDg5QUY4OTZBLCAweDEwNjMxMDk1LCAweDc0QjY3NDJGLCAweDBBRkUwQTc1LCAweDVDRjU1QzkyLCAweDlCQjc5Qjc0LAorCTB4MkQzQzJEMzMsIDB4MzBBNTMwRDYsIDB4MkVDRTJFNDksIDB4NDlFOTQ5ODksIDB4NDY2ODQ2NzIsIDB4Nzc0NDc3NTUsCisJMHhBOEUwQThEOCwgMHg5NjREOTYwNCwgMHgyODQzMjhCRCwgMHhBOTY5QTkyOSwgMHhEOTI5RDk3OSwgMHg4NjJFODY5MSwKKwkweEQxQUNEMTg3LCAweEY0MTVGNDRBLCAweDhENTk4RDE1LCAweEQ2QThENjgyLCAweEI5MEFCOUJDLCAweDQyOUU0MjBELAorCTB4RjY2RUY2QzEsIDB4MkY0NzJGQjgsIDB4RERERkREMDYsIDB4MjMzNDIzMzksIDB4Q0MzNUNDNjIsIDB4RjE2QUYxQzQsCisJMHhDMUNGQzExMiwgMHg4NURDODVFQiwgMHg4RjIyOEY5RSwgMHg3MUM5NzFBMSwgMHg5MEMwOTBGMCwgMHhBQTlCQUE1MywKKwkweDAxODkwMUYxLCAweDhCRDQ4QkUxLCAweDRFRUQ0RThDLCAweDhFQUI4RTZGLCAweEFCMTJBQkEyLCAweDZGQTI2RjNFLAorCTB4RTYwREU2NTQsIDB4REI1MkRCRjIsIDB4OTJCQjkyN0IsIDB4QjcwMkI3QjYsIDB4NjkyRjY5Q0EsIDB4MzlBOTM5RDksCisJMHhEM0Q3RDMwQywgMHhBNzYxQTcyMywgMHhBMjFFQTJBRCwgMHhDM0I0QzM5OSwgMHg2QzUwNkM0NCwgMHgwNzA0MDcwNSwKKwkweDA0RjYwNDdGLCAweDI3QzIyNzQ2LCAweEFDMTZBQ0E3LCAweEQwMjVEMDc2LCAweDUwODY1MDEzLCAweERDNTZEQ0Y3LAorCTB4ODQ1NTg0MUEsIDB4RTEwOUUxNTEsIDB4N0FCRTdBMjUsIDB4MTM5MTEzRUZ9LAorCisJeworCTB4RDkzOUE5RDksIDB4OTAxNzY3OTAsIDB4NzE5Q0IzNzEsIDB4RDJBNkU4RDIsIDB4MDUwNzA0MDUsIDB4OTg1MkZEOTgsCisJMHg2NTgwQTM2NSwgMHhERkU0NzZERiwgMHgwODQ1OUEwOCwgMHgwMjRCOTIwMiwgMHhBMEUwODBBMCwgMHg2NjVBNzg2NiwKKwkweEREQUZFNERELCAweEIwNkFEREIwLCAweEJGNjNEMUJGLCAweDM2MkEzODM2LCAweDU0RTYwRDU0LCAweDQzMjBDNjQzLAorCTB4NjJDQzM1NjIsIDB4QkVGMjk4QkUsIDB4MUUxMjE4MUUsIDB4MjRFQkY3MjQsIDB4RDdBMUVDRDcsIDB4Nzc0MTZDNzcsCisJMHhCRDI4NDNCRCwgMHgzMkJDNzUzMiwgMHhENDdCMzdENCwgMHg5Qjg4MjY5QiwgMHg3MDBERkE3MCwgMHhGOTQ0MTNGOSwKKwkweEIxRkI5NEIxLCAweDVBN0U0ODVBLCAweDdBMDNGMjdBLCAweEU0OENEMEU0LCAweDQ3QjY4QjQ3LCAweDNDMjQzMDNDLAorCTB4QTVFNzg0QTUsIDB4NDE2QjU0NDEsIDB4MDZERERGMDYsIDB4QzU2MDIzQzUsIDB4NDVGRDE5NDUsIDB4QTMzQTVCQTMsCisJMHg2OEMyM0Q2OCwgMHgxNThENTkxNSwgMHgyMUVDRjMyMSwgMHgzMTY2QUUzMSwgMHgzRTZGQTIzRSwgMHgxNjU3ODIxNiwKKwkweDk1MTA2Mzk1LCAweDVCRUYwMTVCLCAweDREQjg4MzRELCAweDkxODYyRTkxLCAweEI1NkREOUI1LCAweDFGODM1MTFGLAorCTB4NTNBQTlCNTMsIDB4NjM1RDdDNjMsIDB4M0I2OEE2M0IsIDB4M0ZGRUVCM0YsIDB4RDYzMEE1RDYsIDB4MjU3QUJFMjUsCisJMHhBN0FDMTZBNywgMHgwRjA5MEMwRiwgMHgzNUYwRTMzNSwgMHgyM0E3NjEyMywgMHhGMDkwQzBGMCwgMHhBRkU5OENBRiwKKwkweDgwOUQzQTgwLCAweDkyNUNGNTkyLCAweDgxMEM3MzgxLCAweDI3MzEyQzI3LCAweDc2RDAyNTc2LCAweEU3NTYwQkU3LAorCTB4N0I5MkJCN0IsIDB4RTlDRTRFRTksIDB4RjEwMTg5RjEsIDB4OUYxRTZCOUYsIDB4QTkzNDUzQTksIDB4QzRGMTZBQzQsCisJMHg5OUMzQjQ5OSwgMHg5NzVCRjE5NywgMHg4MzQ3RTE4MywgMHg2QjE4RTY2QiwgMHhDODIyQkRDOCwgMHgwRTk4NDUwRSwKKwkweDZFMUZFMjZFLCAweEM5QjNGNEM5LCAweDJGNzRCNjJGLCAweENCRjg2NkNCLCAweEZGOTlDQ0ZGLCAweEVBMTQ5NUVBLAorCTB4RUQ1ODAzRUQsIDB4RjdEQzU2RjcsIDB4RTE4QkQ0RTEsIDB4MUIxNTFDMUIsIDB4QURBMjFFQUQsIDB4MENEM0Q3MEMsCisJMHgyQkUyRkIyQiwgMHgxREM4QzMxRCwgMHgxOTVFOEUxOSwgMHhDMjJDQjVDMiwgMHg4OTQ5RTk4OSwgMHgxMkMxQ0YxMiwKKwkweDdFOTVCRjdFLCAweDIwN0RCQTIwLCAweDY0MTFFQTY0LCAweDg0MEI3Nzg0LCAweDZEQzUzOTZELCAweDZBODlBRjZBLAorCTB4RDE3QzMzRDEsIDB4QTE3MUM5QTEsIDB4Q0VGRjYyQ0UsIDB4MzdCQjcxMzcsIDB4RkIwRjgxRkIsIDB4M0RCNTc5M0QsCisJMHg1MUUxMDk1MSwgMHhEQzNFQUREQywgMHgyRDNGMjQyRCwgMHhBNDc2Q0RBNCwgMHg5RDU1Rjk5RCwgMHhFRTgyRDhFRSwKKwkweDg2NDBFNTg2LCAweEFFNzhDNUFFLCAweENEMjVCOUNELCAweDA0OTY0RDA0LCAweDU1Nzc0NDU1LCAweDBBMEUwODBBLAorCTB4MTM1MDg2MTMsIDB4MzBGN0U3MzAsIDB4RDMzN0ExRDMsIDB4NDBGQTFENDAsIDB4MzQ2MUFBMzQsIDB4OEM0RUVEOEMsCisJMHhCM0IwMDZCMywgMHg2QzU0NzA2QywgMHgyQTczQjIyQSwgMHg1MjNCRDI1MiwgMHgwQjlGNDEwQiwgMHg4QjAyN0I4QiwKKwkweDg4RDhBMDg4LCAweDRGRjMxMTRGLCAweDY3Q0IzMTY3LCAweDQ2MjdDMjQ2LCAweEMwNjcyN0MwLCAweEI0RkM5MEI0LAorCTB4MjgzODIwMjgsIDB4N0YwNEY2N0YsIDB4Nzg0ODYwNzgsIDB4MkVFNUZGMkUsIDB4MDc0Qzk2MDcsIDB4NEI2NTVDNEIsCisJMHhDNzJCQjFDNywgMHg2RjhFQUI2RiwgMHgwRDQyOUUwRCwgMHhCQkY1OUNCQiwgMHhGMkRCNTJGMiwgMHhGMzRBMUJGMywKKwkweEE2M0Q1RkE2LCAweDU5QTQ5MzU5LCAweEJDQjkwQUJDLCAweDNBRjlFRjNBLCAweEVGMTM5MUVGLCAweEZFMDg4NUZFLAorCTB4MDE5MTQ5MDEsIDB4NjExNkVFNjEsIDB4N0NERTJEN0MsIDB4QjIyMTRGQjIsIDB4NDJCMThGNDIsIDB4REI3MjNCREIsCisJMHhCODJGNDdCOCwgMHg0OEJGODc0OCwgMHgyQ0FFNkQyQywgMHhFM0MwNDZFMywgMHg1NzNDRDY1NywgMHg4NTlBM0U4NSwKKwkweDI5QTk2OTI5LCAweDdENEY2NDdELCAweDk0ODEyQTk0LCAweDQ5MkVDRTQ5LCAweDE3QzZDQjE3LCAweENBNjkyRkNBLAorCTB4QzNCREZDQzMsIDB4NUNBMzk3NUMsIDB4NUVFODA1NUUsIDB4RDBFRDdBRDAsIDB4ODdEMUFDODcsIDB4OEUwNTdGOEUsCisJMHhCQTY0RDVCQSwgMHhBOEE1MUFBOCwgMHhCNzI2NEJCNywgMHhCOUJFMEVCOSwgMHg2MDg3QTc2MCwgMHhGOEQ1NUFGOCwKKwkweDIyMzYyODIyLCAweDExMUIxNDExLCAweERFNzUzRkRFLCAweDc5RDkyOTc5LCAweEFBRUU4OEFBLCAweDMzMkQzQzMzLAorCTB4NUY3OTRDNUYsIDB4QjZCNzAyQjYsIDB4OTZDQUI4OTYsIDB4NTgzNURBNTgsIDB4OUNDNEIwOUMsIDB4RkM0MzE3RkMsCisJMHgxQTg0NTUxQSwgMHhGNjREMUZGNiwgMHgxQzU5OEExQywgMHgzOEIyN0QzOCwgMHhBQzMzNTdBQywgMHgxOENGQzcxOCwKKwkweEY0MDY4REY0LCAweDY5NTM3NDY5LCAweDc0OUJCNzc0LCAweEY1OTdDNEY1LCAweDU2QUQ5RjU2LCAweERBRTM3MkRBLAorCTB4RDVFQTdFRDUsIDB4NEFGNDE1NEEsIDB4OUU4RjIyOUUsIDB4QTJBQjEyQTIsIDB4NEU2MjU4NEUsIDB4RTg1RjA3RTgsCisJMHhFNTFEOTlFNSwgMHgzOTIzMzQzOSwgMHhDMUY2NkVDMSwgMHg0NDZDNTA0NCwgMHg1RDMyREU1RCwgMHg3MjQ2Njg3MiwKKwkweDI2QTA2NTI2LCAweDkzQ0RCQzkzLCAweDAzREFEQjAzLCAweEM2QkFGOEM2LCAweEZBOUVDOEZBLCAweDgyRDZBODgyLAorCTB4Q0Y2RTJCQ0YsIDB4NTA3MDQwNTAsIDB4RUI4NURDRUIsIDB4NzUwQUZFNzUsIDB4OEE5MzMyOEEsIDB4OERERkE0OEQsCisJMHg0QzI5Q0E0QywgMHgxNDFDMTAxNCwgMHg3M0Q3MjE3MywgMHhDQ0I0RjBDQywgMHgwOUQ0RDMwOSwgMHgxMDhBNUQxMCwKKwkweEUyNTEwRkUyLCAweDAwMDAwMDAwLCAweDlBMTk2RjlBLCAweEUwMUE5REUwLCAweDhGOTQzNjhGLCAweEU2Qzc0MkU2LAorCTB4RUNDOTRBRUMsIDB4RkREMjVFRkQsIDB4QUI3RkMxQUIsIDB4RDhBOEUwRDh9Cit9OworCisvKiBUaGUgZXhwX3RvX3BvbHkgYW5kIHBvbHlfdG9fZXhwIHRhYmxlcyBhcmUgdXNlZCB0byBwZXJmb3JtIGVmZmljaWVudAorICogb3BlcmF0aW9ucyBpbiBHRigyXjgpIHJlcHJlc2VudGVkIGFzIEdGKDIpW3hdL3coeCkgd2hlcmUKKyAqIHcoeCk9eF44K3heNit4XjMreF4yKzEuICBXZSBjYXJlIGFib3V0IGRvaW5nIHRoYXQgYmVjYXVzZSBpdCdzIHBhcnQgb2YgdGhlCisgKiBkZWZpbml0aW9uIG9mIHRoZSBSUyBtYXRyaXggaW4gdGhlIGtleSBzY2hlZHVsZS4gIEVsZW1lbnRzIG9mIHRoYXQgZmllbGQKKyAqIGFyZSBwb2x5bm9taWFscyBvZiBkZWdyZWUgbm90IGdyZWF0ZXIgdGhhbiA3IGFuZCBhbGwgY29lZmZpY2llbnRzIDAgb3IgMSwKKyAqIHdoaWNoIGNhbiBiZSByZXByZXNlbnRlZCBuYXR1cmFsbHkgYnkgYnl0ZXMgKGp1c3Qgc3Vic3RpdHV0ZSB4PTIpLiAgSW4gdGhhdAorICogZm9ybSwgR0YoMl44KSBhZGRpdGlvbiBpcyB0aGUgc2FtZSBhcyBiaXR3aXNlIFhPUiwgYnV0IEdGKDJeOCkKKyAqIG11bHRpcGxpY2F0aW9uIGlzIGluZWZmaWNpZW50IHdpdGhvdXQgaGFyZHdhcmUgc3VwcG9ydC4gIFRvIG11bHRpcGx5CisgKiBmYXN0ZXIsIEkgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgeCBpcyBhIGdlbmVyYXRvciBmb3IgdGhlIG5vbnplcm8gZWxlbWVudHMsCisgKiBzbyB0aGF0IGV2ZXJ5IGVsZW1lbnQgcCBvZiBHRigyKVt4XS93KHgpIGlzIGVpdGhlciAwIG9yIGVxdWFsIHRvICh4KV5uIGZvcgorICogc29tZSBuIGluIDAuLjI1NC4gIE5vdGUgdGhhdCB0aGF0IGNhcmV0IGlzIGV4cG9uZW50aWF0aW9uIGluIEdGKDJeOCksCisgKiAqbm90KiBwb2x5bm9taWFsIG5vdGF0aW9uLiAgU28gaWYgSSB3YW50IHRvIGNvbXB1dGUgcHEgd2hlcmUgcCBhbmQgcSBhcmUKKyAqIGluIEdGKDJeOCksIEkgY2FuIGp1c3Qgc2F5OgorICogICAgMS4gaWYgcD0wIG9yIHE9MCB0aGVuIHBxPTAKKyAqICAgIDIuIG90aGVyd2lzZSwgZmluZCBtIGFuZCBuIHN1Y2ggdGhhdCBwPXhebSBhbmQgcT14Xm4KKyAqICAgIDMuIHBxPSh4Xm0pKHhebik9eF4obStuKSwgc28gYWRkIG0gYW5kIG4gYW5kIGZpbmQgcHEKKyAqIFRoZSB0cmFuc2xhdGlvbnMgaW4gc3RlcHMgMiBhbmQgMyBhcmUgbG9va2VkIHVwIGluIHRoZSB0YWJsZXMKKyAqIHBvbHlfdG9fZXhwIChmb3Igc3RlcCAyKSBhbmQgZXhwX3RvX3BvbHkgKGZvciBzdGVwIDMpLiAgVG8gc2VlIHRoaXMKKyAqIGluIGFjdGlvbiwgbG9vayBhdCB0aGUgQ0FMQ19TIG1hY3JvLiAgQXMgYWRkaXRpb25hbCB3cmlua2xlcywgbm90ZSB0aGF0CisgKiBvbmUgb2YgbXkgb3BlcmFuZHMgaXMgYWx3YXlzIGEgY29uc3RhbnQsIHNvIHRoZSBwb2x5X3RvX2V4cCBsb29rdXAgb24gaXQKKyAqIGlzIGRvbmUgaW4gYWR2YW5jZTsgSSBpbmNsdWRlZCB0aGUgb3JpZ2luYWwgdmFsdWVzIGluIHRoZSBjb21tZW50cyBzbworICogcmVhZGVycyBjYW4gaGF2ZSBzb21lIGNoYW5jZSBvZiByZWNvZ25pemluZyB0aGF0IHRoaXMgKmlzKiB0aGUgUlMgbWF0cml4CisgKiBmcm9tIHRoZSBUd29maXNoIHBhcGVyLiAgSSd2ZSBvbmx5IGluY2x1ZGVkIHRoZSB0YWJsZSBlbnRyaWVzIEkgYWN0dWFsbHkKKyAqIG5lZWQ7IEkgbmV2ZXIgZG8gYSBsb29rdXAgb24gYSB2YXJpYWJsZSBpbnB1dCBvZiB6ZXJvIGFuZCB0aGUgYmlnZ2VzdAorICogZXhwb25lbnRzIEknbGwgZXZlciBzZWUgYXJlIDI1NCAodmFyaWFibGUpIGFuZCAyMzcgKGNvbnN0YW50KSwgc28gdGhleSdsbAorICogbmV2ZXIgc3VtIHRvIG1vcmUgdGhhbiA0OTEuCUknbSByZXBlYXRpbmcgcGFydCBvZiB0aGUgZXhwX3RvX3BvbHkgdGFibGUKKyAqIHNvIHRoYXQgSSBkb24ndCBoYXZlIHRvIGRvIG1vZC0yNTUgcmVkdWN0aW9uIGluIHRoZSBleHBvbmVudCBhcml0aG1ldGljLgorICogU2luY2UgSSBrbm93IG15IGNvbnN0YW50IG9wZXJhbmRzIGFyZSBuZXZlciB6ZXJvLCBJIG9ubHkgaGF2ZSB0byB3b3JyeQorICogYWJvdXQgemVybyB2YWx1ZXMgaW4gdGhlIHZhcmlhYmxlIG9wZXJhbmQsIGFuZCBJIGRvIGl0IHdpdGggYSBzaW1wbGUKKyAqIGNvbmRpdGlvbmFsIGJyYW5jaC4JSSBrbm93IGNvbmRpdGlvbmFscyBhcmUgZXhwZW5zaXZlLCBidXQgSSBjb3VsZG4ndAorICogc2VlIGEgbm9uLWhvcnJpYmxlIHdheSBvZiBhdm9pZGluZyB0aGVtLCBhbmQgSSBkaWQgbWFuYWdlIHRvIGdyb3VwIHRoZQorICogc3RhdGVtZW50cyBzbyB0aGF0IGVhY2ggaWYgY292ZXJzIGZvdXIgZ3JvdXAgbXVsdGlwbGljYXRpb25zLiAqLworCitzdGF0aWMgY29uc3QgdTggcG9seV90b19leHBbMjU1XSA9IHsKKwkweDAwLCAweDAxLCAweDE3LCAweDAyLCAweDJFLCAweDE4LCAweDUzLCAweDAzLCAweDZBLCAweDJGLCAweDkzLCAweDE5LAorCTB4MzQsIDB4NTQsIDB4NDUsIDB4MDQsIDB4NUMsIDB4NkIsIDB4QjYsIDB4MzAsIDB4QTYsIDB4OTQsIDB4NEIsIDB4MUEsCisJMHg4QywgMHgzNSwgMHg4MSwgMHg1NSwgMHhBQSwgMHg0NiwgMHgwRCwgMHgwNSwgMHgyNCwgMHg1RCwgMHg4NywgMHg2QywKKwkweDlCLCAweEI3LCAweEMxLCAweDMxLCAweDJCLCAweEE3LCAweEEzLCAweDk1LCAweDk4LCAweDRDLCAweENBLCAweDFCLAorCTB4RTYsIDB4OEQsIDB4NzMsIDB4MzYsIDB4Q0QsIDB4ODIsIDB4MTIsIDB4NTYsIDB4NjIsIDB4QUIsIDB4RjAsIDB4NDcsCisJMHg0RiwgMHgwRSwgMHhCRCwgMHgwNiwgMHhENCwgMHgyNSwgMHhEMiwgMHg1RSwgMHgyNywgMHg4OCwgMHg2NiwgMHg2RCwKKwkweEQ2LCAweDlDLCAweDc5LCAweEI4LCAweDA4LCAweEMyLCAweERGLCAweDMyLCAweDY4LCAweDJDLCAweEZELCAweEE4LAorCTB4OEEsIDB4QTQsIDB4NUEsIDB4OTYsIDB4MjksIDB4OTksIDB4MjIsIDB4NEQsIDB4NjAsIDB4Q0IsIDB4RTQsIDB4MUMsCisJMHg3QiwgMHhFNywgMHgzQiwgMHg4RSwgMHg5RSwgMHg3NCwgMHhGNCwgMHgzNywgMHhEOCwgMHhDRSwgMHhGOSwgMHg4MywKKwkweDZGLCAweDEzLCAweEIyLCAweDU3LCAweEUxLCAweDYzLCAweERDLCAweEFDLCAweEM0LCAweEYxLCAweEFGLCAweDQ4LAorCTB4MEEsIDB4NTAsIDB4NDIsIDB4MEYsIDB4QkEsIDB4QkUsIDB4QzcsIDB4MDcsIDB4REUsIDB4RDUsIDB4NzgsIDB4MjYsCisJMHg2NSwgMHhEMywgMHhEMSwgMHg1RiwgMHhFMywgMHgyOCwgMHgyMSwgMHg4OSwgMHg1OSwgMHg2NywgMHhGQywgMHg2RSwKKwkweEIxLCAweEQ3LCAweEY4LCAweDlELCAweEYzLCAweDdBLCAweDNBLCAweEI5LCAweEM2LCAweDA5LCAweDQxLCAweEMzLAorCTB4QUUsIDB4RTAsIDB4REIsIDB4MzMsIDB4NDQsIDB4NjksIDB4OTIsIDB4MkQsIDB4NTIsIDB4RkUsIDB4MTYsIDB4QTksCisJMHgwQywgMHg4QiwgMHg4MCwgMHhBNSwgMHg0QSwgMHg1QiwgMHhCNSwgMHg5NywgMHhDOSwgMHgyQSwgMHhBMiwgMHg5QSwKKwkweEMwLCAweDIzLCAweDg2LCAweDRFLCAweEJDLCAweDYxLCAweEVGLCAweENDLCAweDExLCAweEU1LCAweDcyLCAweDFELAorCTB4M0QsIDB4N0MsIDB4RUIsIDB4RTgsIDB4RTksIDB4M0MsIDB4RUEsIDB4OEYsIDB4N0QsIDB4OUYsIDB4RUMsIDB4NzUsCisJMHgxRSwgMHhGNSwgMHgzRSwgMHgzOCwgMHhGNiwgMHhEOSwgMHgzRiwgMHhDRiwgMHg3NiwgMHhGQSwgMHgxRiwgMHg4NCwKKwkweEEwLCAweDcwLCAweEVELCAweDE0LCAweDkwLCAweEIzLCAweDdFLCAweDU4LCAweEZCLCAweEUyLCAweDIwLCAweDY0LAorCTB4RDAsIDB4REQsIDB4NzcsIDB4QUQsIDB4REEsIDB4QzUsIDB4NDAsIDB4RjIsIDB4MzksIDB4QjAsIDB4RjcsIDB4NDksCisJMHhCNCwgMHgwQiwgMHg3RiwgMHg1MSwgMHgxNSwgMHg0MywgMHg5MSwgMHgxMCwgMHg3MSwgMHhCQiwgMHhFRSwgMHhCRiwKKwkweDg1LCAweEM4LCAweEExCit9OworCitzdGF0aWMgY29uc3QgdTggZXhwX3RvX3BvbHlbNDkyXSA9IHsKKwkweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDRELCAweDlBLCAweDc5LCAweEYyLAorCTB4QTksIDB4MUYsIDB4M0UsIDB4N0MsIDB4RjgsIDB4QkQsIDB4MzcsIDB4NkUsIDB4REMsIDB4RjUsIDB4QTcsIDB4MDMsCisJMHgwNiwgMHgwQywgMHgxOCwgMHgzMCwgMHg2MCwgMHhDMCwgMHhDRCwgMHhENywgMHhFMywgMHg4QiwgMHg1QiwgMHhCNiwKKwkweDIxLCAweDQyLCAweDg0LCAweDQ1LCAweDhBLCAweDU5LCAweEIyLCAweDI5LCAweDUyLCAweEE0LCAweDA1LCAweDBBLAorCTB4MTQsIDB4MjgsIDB4NTAsIDB4QTAsIDB4MEQsIDB4MUEsIDB4MzQsIDB4NjgsIDB4RDAsIDB4RUQsIDB4OTcsIDB4NjMsCisJMHhDNiwgMHhDMSwgMHhDRiwgMHhEMywgMHhFQiwgMHg5QiwgMHg3QiwgMHhGNiwgMHhBMSwgMHgwRiwgMHgxRSwgMHgzQywKKwkweDc4LCAweEYwLCAweEFELCAweDE3LCAweDJFLCAweDVDLCAweEI4LCAweDNELCAweDdBLCAweEY0LCAweEE1LCAweDA3LAorCTB4MEUsIDB4MUMsIDB4MzgsIDB4NzAsIDB4RTAsIDB4OEQsIDB4NTcsIDB4QUUsIDB4MTEsIDB4MjIsIDB4NDQsIDB4ODgsCisJMHg1RCwgMHhCQSwgMHgzOSwgMHg3MiwgMHhFNCwgMHg4NSwgMHg0NywgMHg4RSwgMHg1MSwgMHhBMiwgMHgwOSwgMHgxMiwKKwkweDI0LCAweDQ4LCAweDkwLCAweDZELCAweERBLCAweEY5LCAweEJGLCAweDMzLCAweDY2LCAweENDLCAweEQ1LCAweEU3LAorCTB4ODMsIDB4NEIsIDB4OTYsIDB4NjEsIDB4QzIsIDB4QzksIDB4REYsIDB4RjMsIDB4QUIsIDB4MUIsIDB4MzYsIDB4NkMsCisJMHhEOCwgMHhGRCwgMHhCNywgMHgyMywgMHg0NiwgMHg4QywgMHg1NSwgMHhBQSwgMHgxOSwgMHgzMiwgMHg2NCwgMHhDOCwKKwkweERELCAweEY3LCAweEEzLCAweDBCLCAweDE2LCAweDJDLCAweDU4LCAweEIwLCAweDJELCAweDVBLCAweEI0LCAweDI1LAorCTB4NEEsIDB4OTQsIDB4NjUsIDB4Q0EsIDB4RDksIDB4RkYsIDB4QjMsIDB4MkIsIDB4NTYsIDB4QUMsIDB4MTUsIDB4MkEsCisJMHg1NCwgMHhBOCwgMHgxRCwgMHgzQSwgMHg3NCwgMHhFOCwgMHg5RCwgMHg3NywgMHhFRSwgMHg5MSwgMHg2RiwgMHhERSwKKwkweEYxLCAweEFGLCAweDEzLCAweDI2LCAweDRDLCAweDk4LCAweDdELCAweEZBLCAweEI5LCAweDNGLCAweDdFLCAweEZDLAorCTB4QjUsIDB4MjcsIDB4NEUsIDB4OUMsIDB4NzUsIDB4RUEsIDB4OTksIDB4N0YsIDB4RkUsIDB4QjEsIDB4MkYsIDB4NUUsCisJMHhCQywgMHgzNSwgMHg2QSwgMHhENCwgMHhFNSwgMHg4NywgMHg0MywgMHg4NiwgMHg0MSwgMHg4MiwgMHg0OSwgMHg5MiwKKwkweDY5LCAweEQyLCAweEU5LCAweDlGLCAweDczLCAweEU2LCAweDgxLCAweDRGLCAweDlFLCAweDcxLCAweEUyLCAweDg5LAorCTB4NUYsIDB4QkUsIDB4MzEsIDB4NjIsIDB4QzQsIDB4QzUsIDB4QzcsIDB4QzMsIDB4Q0IsIDB4REIsIDB4RkIsIDB4QkIsCisJMHgzQiwgMHg3NiwgMHhFQywgMHg5NSwgMHg2NywgMHhDRSwgMHhEMSwgMHhFRiwgMHg5MywgMHg2QiwgMHhENiwgMHhFMSwKKwkweDhGLCAweDUzLCAweEE2LCAweDAxLCAweDAyLCAweDA0LCAweDA4LCAweDEwLCAweDIwLCAweDQwLCAweDgwLCAweDRELAorCTB4OUEsIDB4NzksIDB4RjIsIDB4QTksIDB4MUYsIDB4M0UsIDB4N0MsIDB4RjgsIDB4QkQsIDB4MzcsIDB4NkUsIDB4REMsCisJMHhGNSwgMHhBNywgMHgwMywgMHgwNiwgMHgwQywgMHgxOCwgMHgzMCwgMHg2MCwgMHhDMCwgMHhDRCwgMHhENywgMHhFMywKKwkweDhCLCAweDVCLCAweEI2LCAweDIxLCAweDQyLCAweDg0LCAweDQ1LCAweDhBLCAweDU5LCAweEIyLCAweDI5LCAweDUyLAorCTB4QTQsIDB4MDUsIDB4MEEsIDB4MTQsIDB4MjgsIDB4NTAsIDB4QTAsIDB4MEQsIDB4MUEsIDB4MzQsIDB4NjgsIDB4RDAsCisJMHhFRCwgMHg5NywgMHg2MywgMHhDNiwgMHhDMSwgMHhDRiwgMHhEMywgMHhFQiwgMHg5QiwgMHg3QiwgMHhGNiwgMHhBMSwKKwkweDBGLCAweDFFLCAweDNDLCAweDc4LCAweEYwLCAweEFELCAweDE3LCAweDJFLCAweDVDLCAweEI4LCAweDNELCAweDdBLAorCTB4RjQsIDB4QTUsIDB4MDcsIDB4MEUsIDB4MUMsIDB4MzgsIDB4NzAsIDB4RTAsIDB4OEQsIDB4NTcsIDB4QUUsIDB4MTEsCisJMHgyMiwgMHg0NCwgMHg4OCwgMHg1RCwgMHhCQSwgMHgzOSwgMHg3MiwgMHhFNCwgMHg4NSwgMHg0NywgMHg4RSwgMHg1MSwKKwkweEEyLCAweDA5LCAweDEyLCAweDI0LCAweDQ4LCAweDkwLCAweDZELCAweERBLCAweEY5LCAweEJGLCAweDMzLCAweDY2LAorCTB4Q0MsIDB4RDUsIDB4RTcsIDB4ODMsIDB4NEIsIDB4OTYsIDB4NjEsIDB4QzIsIDB4QzksIDB4REYsIDB4RjMsIDB4QUIsCisJMHgxQiwgMHgzNiwgMHg2QywgMHhEOCwgMHhGRCwgMHhCNywgMHgyMywgMHg0NiwgMHg4QywgMHg1NSwgMHhBQSwgMHgxOSwKKwkweDMyLCAweDY0LCAweEM4LCAweERELCAweEY3LCAweEEzLCAweDBCLCAweDE2LCAweDJDLCAweDU4LCAweEIwLCAweDJELAorCTB4NUEsIDB4QjQsIDB4MjUsIDB4NEEsIDB4OTQsIDB4NjUsIDB4Q0EsIDB4RDksIDB4RkYsIDB4QjMsIDB4MkIsIDB4NTYsCisJMHhBQywgMHgxNSwgMHgyQSwgMHg1NCwgMHhBOCwgMHgxRCwgMHgzQSwgMHg3NCwgMHhFOCwgMHg5RCwgMHg3NywgMHhFRSwKKwkweDkxLCAweDZGLCAweERFLCAweEYxLCAweEFGLCAweDEzLCAweDI2LCAweDRDLCAweDk4LCAweDdELCAweEZBLCAweEI5LAorCTB4M0YsIDB4N0UsIDB4RkMsIDB4QjUsIDB4MjcsIDB4NEUsIDB4OUMsIDB4NzUsIDB4RUEsIDB4OTksIDB4N0YsIDB4RkUsCisJMHhCMSwgMHgyRiwgMHg1RSwgMHhCQywgMHgzNSwgMHg2QSwgMHhENCwgMHhFNSwgMHg4NywgMHg0MywgMHg4NiwgMHg0MSwKKwkweDgyLCAweDQ5LCAweDkyLCAweDY5LCAweEQyLCAweEU5LCAweDlGLCAweDczLCAweEU2LCAweDgxLCAweDRGLCAweDlFLAorCTB4NzEsIDB4RTIsIDB4ODksIDB4NUYsIDB4QkUsIDB4MzEsIDB4NjIsIDB4QzQsIDB4QzUsIDB4QzcsIDB4QzMsIDB4Q0IKK307CisKKworLyogVGhlIHRhYmxlIGNvbnN0YW50cyBhcmUgaW5kaWNlcyBvZgorICogUy1ib3ggZW50cmllcywgcHJlcHJvY2Vzc2VkIHRocm91Z2ggcTAgYW5kIHExLiAqLworc3RhdGljIGNvbnN0IHU4IGNhbGNfc2JfdGJsWzUxMl0gPSB7CisJMHhBOSwgMHg3NSwgMHg2NywgMHhGMywgMHhCMywgMHhDNiwgMHhFOCwgMHhGNCwKKwkweDA0LCAweERCLCAweEZELCAweDdCLCAweEEzLCAweEZCLCAweDc2LCAweEM4LAorCTB4OUEsIDB4NEEsIDB4OTIsIDB4RDMsIDB4ODAsIDB4RTYsIDB4NzgsIDB4NkIsCisJMHhFNCwgMHg0NSwgMHhERCwgMHg3RCwgMHhEMSwgMHhFOCwgMHgzOCwgMHg0QiwKKwkweDBELCAweEQ2LCAweEM2LCAweDMyLCAweDM1LCAweEQ4LCAweDk4LCAweEZELAorCTB4MTgsIDB4MzcsIDB4RjcsIDB4NzEsIDB4RUMsIDB4RjEsIDB4NkMsIDB4RTEsCisJMHg0MywgMHgzMCwgMHg3NSwgMHgwRiwgMHgzNywgMHhGOCwgMHgyNiwgMHgxQiwKKwkweEZBLCAweDg3LCAweDEzLCAweEZBLCAweDk0LCAweDA2LCAweDQ4LCAweDNGLAorCTB4RjIsIDB4NUUsIDB4RDAsIDB4QkEsIDB4OEIsIDB4QUUsIDB4MzAsIDB4NUIsCisJMHg4NCwgMHg4QSwgMHg1NCwgMHgwMCwgMHhERiwgMHhCQywgMHgyMywgMHg5RCwKKwkweDE5LCAweDZELCAweDVCLCAweEMxLCAweDNELCAweEIxLCAweDU5LCAweDBFLAorCTB4RjMsIDB4ODAsIDB4QUUsIDB4NUQsIDB4QTIsIDB4RDIsIDB4ODIsIDB4RDUsCisJMHg2MywgMHhBMCwgMHgwMSwgMHg4NCwgMHg4MywgMHgwNywgMHgyRSwgMHgxNCwKKwkweEQ5LCAweEI1LCAweDUxLCAweDkwLCAweDlCLCAweDJDLCAweDdDLCAweEEzLAorCTB4QTYsIDB4QjIsIDB4RUIsIDB4NzMsIDB4QTUsIDB4NEMsIDB4QkUsIDB4NTQsCisJMHgxNiwgMHg5MiwgMHgwQywgMHg3NCwgMHhFMywgMHgzNiwgMHg2MSwgMHg1MSwKKwkweEMwLCAweDM4LCAweDhDLCAweEIwLCAweDNBLCAweEJELCAweEY1LCAweDVBLAorCTB4NzMsIDB4RkMsIDB4MkMsIDB4NjAsIDB4MjUsIDB4NjIsIDB4MEIsIDB4OTYsCisJMHhCQiwgMHg2QywgMHg0RSwgMHg0MiwgMHg4OSwgMHhGNywgMHg2QiwgMHgxMCwKKwkweDUzLCAweDdDLCAweDZBLCAweDI4LCAweEI0LCAweDI3LCAweEYxLCAweDhDLAorCTB4RTEsIDB4MTMsIDB4RTYsIDB4OTUsIDB4QkQsIDB4OUMsIDB4NDUsIDB4QzcsCisJMHhFMiwgMHgyNCwgMHhGNCwgMHg0NiwgMHhCNiwgMHgzQiwgMHg2NiwgMHg3MCwKKwkweENDLCAweENBLCAweDk1LCAweEUzLCAweDAzLCAweDg1LCAweDU2LCAweENCLAorCTB4RDQsIDB4MTEsIDB4MUMsIDB4RDAsIDB4MUUsIDB4OTMsIDB4RDcsIDB4QjgsCisJMHhGQiwgMHhBNiwgMHhDMywgMHg4MywgMHg4RSwgMHgyMCwgMHhCNSwgMHhGRiwKKwkweEU5LCAweDlGLCAweENGLCAweDc3LCAweEJGLCAweEMzLCAweEJBLCAweENDLAorCTB4RUEsIDB4MDMsIDB4NzcsIDB4NkYsIDB4MzksIDB4MDgsIDB4QUYsIDB4QkYsCisJMHgzMywgMHg0MCwgMHhDOSwgMHhFNywgMHg2MiwgMHgyQiwgMHg3MSwgMHhFMiwKKwkweDgxLCAweDc5LCAweDc5LCAweDBDLCAweDA5LCAweEFBLCAweEFELCAweDgyLAorCTB4MjQsIDB4NDEsIDB4Q0QsIDB4M0EsIDB4RjksIDB4RUEsIDB4RDgsIDB4QjksCisJMHhFNSwgMHhFNCwgMHhDNSwgMHg5QSwgMHhCOSwgMHhBNCwgMHg0RCwgMHg5NywKKwkweDQ0LCAweDdFLCAweDA4LCAweERBLCAweDg2LCAweDdBLCAweEU3LCAweDE3LAorCTB4QTEsIDB4NjYsIDB4MUQsIDB4OTQsIDB4QUEsIDB4QTEsIDB4RUQsIDB4MUQsCisJMHgwNiwgMHgzRCwgMHg3MCwgMHhGMCwgMHhCMiwgMHhERSwgMHhEMiwgMHhCMywKKwkweDQxLCAweDBCLCAweDdCLCAweDcyLCAweEEwLCAweEE3LCAweDExLCAweDFDLAorCTB4MzEsIDB4RUYsIDB4QzIsIDB4RDEsIDB4MjcsIDB4NTMsIDB4OTAsIDB4M0UsCisJMHgyMCwgMHg4RiwgMHhGNiwgMHgzMywgMHg2MCwgMHgyNiwgMHhGRiwgMHg1RiwKKwkweDk2LCAweEVDLCAweDVDLCAweDc2LCAweEIxLCAweDJBLCAweEFCLCAweDQ5LAorCTB4OUUsIDB4ODEsIDB4OUMsIDB4ODgsIDB4NTIsIDB4RUUsIDB4MUIsIDB4MjEsCisJMHg1RiwgMHhDNCwgMHg5MywgMHgxQSwgMHgwQSwgMHhFQiwgMHhFRiwgMHhEOSwKKwkweDkxLCAweEM1LCAweDg1LCAweDM5LCAweDQ5LCAweDk5LCAweEVFLCAweENELAorCTB4MkQsIDB4QUQsIDB4NEYsIDB4MzEsIDB4OEYsIDB4OEIsIDB4M0IsIDB4MDEsCisJMHg0NywgMHgxOCwgMHg4NywgMHgyMywgMHg2RCwgMHhERCwgMHg0NiwgMHgxRiwKKwkweEQ2LCAweDRFLCAweDNFLCAweDJELCAweDY5LCAweEY5LCAweDY0LCAweDQ4LAorCTB4MkEsIDB4NEYsIDB4Q0UsIDB4RjIsIDB4Q0IsIDB4NjUsIDB4MkYsIDB4OEUsCisJMHhGQywgMHg3OCwgMHg5NywgMHg1QywgMHgwNSwgMHg1OCwgMHg3QSwgMHgxOSwKKwkweEFDLCAweDhELCAweDdGLCAweEU1LCAweEQ1LCAweDk4LCAweDFBLCAweDU3LAorCTB4NEIsIDB4NjcsIDB4MEUsIDB4N0YsIDB4QTcsIDB4MDUsIDB4NUEsIDB4NjQsCisJMHgyOCwgMHhBRiwgMHgxNCwgMHg2MywgMHgzRiwgMHhCNiwgMHgyOSwgMHhGRSwKKwkweDg4LCAweEY1LCAweDNDLCAweEI3LCAweDRDLCAweDNDLCAweDAyLCAweEE1LAorCTB4QjgsIDB4Q0UsIDB4REEsIDB4RTksIDB4QjAsIDB4NjgsIDB4MTcsIDB4NDQsCisJMHg1NSwgMHhFMCwgMHgxRiwgMHg0RCwgMHg4QSwgMHg0MywgMHg3RCwgMHg2OSwKKwkweDU3LCAweDI5LCAweEM3LCAweDJFLCAweDhELCAweEFDLCAweDc0LCAweDE1LAorCTB4QjcsIDB4NTksIDB4QzQsIDB4QTgsIDB4OUYsIDB4MEEsIDB4NzIsIDB4OUUsCisJMHg3RSwgMHg2RSwgMHgxNSwgMHg0NywgMHgyMiwgMHhERiwgMHgxMiwgMHgzNCwKKwkweDU4LCAweDM1LCAweDA3LCAweDZBLCAweDk5LCAweENGLCAweDM0LCAweERDLAorCTB4NkUsIDB4MjIsIDB4NTAsIDB4QzksIDB4REUsIDB4QzAsIDB4NjgsIDB4OUIsCisJMHg2NSwgMHg4OSwgMHhCQywgMHhENCwgMHhEQiwgMHhFRCwgMHhGOCwgMHhBQiwKKwkweEM4LCAweDEyLCAweEE4LCAweEEyLCAweDJCLCAweDBELCAweDQwLCAweDUyLAorCTB4REMsIDB4QkIsIDB4RkUsIDB4MDIsIDB4MzIsIDB4MkYsIDB4QTQsIDB4QTksCisJMHhDQSwgMHhENywgMHgxMCwgMHg2MSwgMHgyMSwgMHgxRSwgMHhGMCwgMHhCNCwKKwkweEQzLCAweDUwLCAweDVELCAweDA0LCAweDBGLCAweEY2LCAweDAwLCAweEMyLAorCTB4NkYsIDB4MTYsIDB4OUQsIDB4MjUsIDB4MzYsIDB4ODYsIDB4NDIsIDB4NTYsCisJMHg0QSwgMHg1NSwgMHg1RSwgMHgwOSwgMHhDMSwgMHhCRSwgMHhFMCwgMHg5MQorfTsKKworLyogTWFjcm8gdG8gcGVyZm9ybSBvbmUgY29sdW1uIG9mIHRoZSBSUyBtYXRyaXggbXVsdGlwbGljYXRpb24uICBUaGUKKyAqIHBhcmFtZXRlcnMgYSwgYiwgYywgYW5kIGQgYXJlIHRoZSBmb3VyIGJ5dGVzIG9mIG91dHB1dDsgaSBpcyB0aGUgaW5kZXgKKyAqIG9mIHRoZSBrZXkgYnl0ZXMsIGFuZCB3LCB4LCB5LCBhbmQgeiwgYXJlIHRoZSBjb2x1bW4gb2YgY29uc3RhbnRzIGZyb20KKyAqIHRoZSBSUyBtYXRyaXgsIHByZXByb2Nlc3NlZCB0aHJvdWdoIHRoZSBwb2x5X3RvX2V4cCB0YWJsZS4gKi8KKworI2RlZmluZSBDQUxDX1MoYSwgYiwgYywgZCwgaSwgdywgeCwgeSwgeikgXAorICAgaWYgKGtleVtpXSkgeyBcCisgICAgICB0bXAgPSBwb2x5X3RvX2V4cFtrZXlbaV0gLSAxXTsgXAorICAgICAgKGEpIF49IGV4cF90b19wb2x5W3RtcCArICh3KV07IFwKKyAgICAgIChiKSBePSBleHBfdG9fcG9seVt0bXAgKyAoeCldOyBcCisgICAgICAoYykgXj0gZXhwX3RvX3BvbHlbdG1wICsgKHkpXTsgXAorICAgICAgKGQpIF49IGV4cF90b19wb2x5W3RtcCArICh6KV07IFwKKyAgIH0KKworLyogTWFjcm9zIHRvIGNhbGN1bGF0ZSB0aGUga2V5LWRlcGVuZGVudCBTLWJveGVzIGZvciBhIDEyOC1iaXQga2V5IHVzaW5nCisgKiB0aGUgUyB2ZWN0b3IgZnJvbSBDQUxDX1MuICBDQUxDX1NCXzIgY29tcHV0ZXMgYSBzaW5nbGUgZW50cnkgaW4gYWxsCisgKiBmb3VyIFMtYm94ZXMsIHdoZXJlIGkgaXMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSB0byBjb21wdXRlLCBhbmQgYSBhbmQgYgorICogYXJlIHRoZSBpbmRleCBudW1iZXJzIHByZXByb2Nlc3NlZCB0aHJvdWdoIHRoZSBxMCBhbmQgcTEgdGFibGVzCisgKiByZXNwZWN0aXZlbHkuICovCisKKyNkZWZpbmUgQ0FMQ19TQl8yKGksIGEsIGIpIFwKKyAgIGN0eC0+c1swXVtpXSA9IG1kc1swXVtxMFsoYSkgXiBzYV0gXiBzZV07IFwKKyAgIGN0eC0+c1sxXVtpXSA9IG1kc1sxXVtxMFsoYikgXiBzYl0gXiBzZl07IFwKKyAgIGN0eC0+c1syXVtpXSA9IG1kc1syXVtxMVsoYSkgXiBzY10gXiBzZ107IFwKKyAgIGN0eC0+c1szXVtpXSA9IG1kc1szXVtxMVsoYikgXiBzZF0gXiBzaF0KKworLyogTWFjcm8gZXhhY3RseSBsaWtlIENBTENfU0JfMiwgYnV0IGZvciAxOTItYml0IGtleXMuICovCisKKyNkZWZpbmUgQ0FMQ19TQjE5Ml8yKGksIGEsIGIpIFwKKyAgIGN0eC0+c1swXVtpXSA9IG1kc1swXVtxMFtxMFsoYikgXiBzYV0gXiBzZV0gXiBzaV07IFwKKyAgIGN0eC0+c1sxXVtpXSA9IG1kc1sxXVtxMFtxMVsoYikgXiBzYl0gXiBzZl0gXiBzal07IFwKKyAgIGN0eC0+c1syXVtpXSA9IG1kc1syXVtxMVtxMFsoYSkgXiBzY10gXiBzZ10gXiBza107IFwKKyAgIGN0eC0+c1szXVtpXSA9IG1kc1szXVtxMVtxMVsoYSkgXiBzZF0gXiBzaF0gXiBzbF07CisKKy8qIE1hY3JvIGV4YWN0bHkgbGlrZSBDQUxDX1NCXzIsIGJ1dCBmb3IgMjU2LWJpdCBrZXlzLiAqLworCisjZGVmaW5lIENBTENfU0IyNTZfMihpLCBhLCBiKSBcCisgICBjdHgtPnNbMF1baV0gPSBtZHNbMF1bcTBbcTBbcTFbKGIpIF4gc2FdIF4gc2VdIF4gc2ldIF4gc21dOyBcCisgICBjdHgtPnNbMV1baV0gPSBtZHNbMV1bcTBbcTFbcTFbKGEpIF4gc2JdIF4gc2ZdIF4gc2pdIF4gc25dOyBcCisgICBjdHgtPnNbMl1baV0gPSBtZHNbMl1bcTFbcTBbcTBbKGEpIF4gc2NdIF4gc2ddIF4gc2tdIF4gc29dOyBcCisgICBjdHgtPnNbM11baV0gPSBtZHNbM11bcTFbcTFbcTBbKGIpIF4gc2RdIF4gc2hdIF4gc2xdIF4gc3BdOworCisvKiBNYWNyb3MgdG8gY2FsY3VsYXRlIHRoZSB3aGl0ZW5pbmcgYW5kIHJvdW5kIHN1YmtleXMuICBDQUxDX0tfMiBjb21wdXRlcyB0aGUKKyAqIGxhc3QgdHdvIHN0YWdlcyBvZiB0aGUgaCgpIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGluZGV4IChlaXRoZXIgMmkgb3IgMmkrMSkuCisgKiBhLCBiLCBjLCBhbmQgZCBhcmUgdGhlIGZvdXIgYnl0ZXMgZ29pbmcgaW50byB0aGUgbGFzdCB0d28gc3RhZ2VzLiAgRm9yCisgKiAxMjgtYml0IGtleXMsIHRoaXMgaXMgdGhlIGVudGlyZSBoKCkgZnVuY3Rpb24gYW5kIGEgYW5kIGMgYXJlIHRoZSBpbmRleAorICogcHJlcHJvY2Vzc2VkIHRocm91Z2ggcTAgYW5kIHExIHJlc3BlY3RpdmVseTsgZm9yIGxvbmdlciBrZXlzIHRoZXkgYXJlIHRoZQorICogb3V0cHV0IG9mIHByZXZpb3VzIHN0YWdlcy4gIGogaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBrZXkgYnl0ZSB0byB1c2UuCisgKiBDQUxDX0sgY29tcHV0ZXMgYSBwYWlyIG9mIHN1YmtleXMgZm9yIDEyOC1iaXQgVHdvZmlzaCwgYnkgY2FsbGluZyBDQUxDX0tfMgorICogdHdpY2UsIGRvaW5nIHRoZSBQc2V1ZG8tSGFkYW1hcmQgVHJhbnNmb3JtLCBhbmQgZG9pbmcgdGhlIG5lY2Vzc2FyeQorICogcm90YXRpb25zLiAgSXRzIHBhcmFtZXRlcnMgYXJlOiBhLCB0aGUgYXJyYXkgdG8gd3JpdGUgdGhlIHJlc3VsdHMgaW50bywKKyAqIGosIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb3V0cHV0IGVudHJ5LCBrIGFuZCBsLCB0aGUgcHJlcHJvY2Vzc2VkIGluZGljZXMKKyAqIGZvciBpbmRleCAyaSwgYW5kIG0gYW5kIG4sIHRoZSBwcmVwcm9jZXNzZWQgaW5kaWNlcyBmb3IgaW5kZXggMmkrMS4KKyAqIENBTENfSzE5Ml8yIGV4cGFuZHMgQ0FMQ19LXzIgdG8gaGFuZGxlIDE5Mi1iaXQga2V5cywgYnkgZG9pbmcgYW4KKyAqIGFkZGl0aW9uYWwgbG9va3VwLWFuZC1YT1Igc3RhZ2UuICBUaGUgcGFyYW1ldGVycyBhLCBiLCBjIGFuZCBkIGFyZSB0aGUKKyAqIGZvdXIgYnl0ZXMgZ29pbmcgaW50byB0aGUgbGFzdCB0aHJlZSBzdGFnZXMuICBGb3IgMTkyLWJpdCBrZXlzLCBjID0gZAorICogYXJlIHRoZSBpbmRleCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCwgYW5kIGEgPSBiIGFyZSB0aGUgaW5kZXgKKyAqIHByZXByb2Nlc3NlZCB0aHJvdWdoIHExOyBqIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qga2V5IGJ5dGUgdG8gdXNlLgorICogQ0FMQ19LMTkyIGlzIGlkZW50aWNhbCB0byBDQUxDX0sgYnV0IGZvciB1c2luZyB0aGUgQ0FMQ19LMTkyXzIgbWFjcm8KKyAqIGluc3RlYWQgb2YgQ0FMQ19LXzIuCisgKiBDQUxDX0syNTZfMiBleHBhbmRzIENBTENfSzE5Ml8yIHRvIGhhbmRsZSAyNTYtYml0IGtleXMsIGJ5IGRvaW5nIGFuCisgKiBhZGRpdGlvbmFsIGxvb2t1cC1hbmQtWE9SIHN0YWdlLiAgVGhlIHBhcmFtZXRlcnMgYSBhbmQgYiBhcmUgdGhlIGluZGV4CisgKiBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEgcmVzcGVjdGl2ZWx5OyBqIGlzIHRoZSBpbmRleCBvZiB0aGUgZmlyc3QKKyAqIGtleSBieXRlIHRvIHVzZS4gIENBTENfSzI1NiBpcyBpZGVudGljYWwgdG8gQ0FMQ19LIGJ1dCBmb3IgdXNpbmcgdGhlCisgKiBDQUxDX0syNTZfMiBtYWNybyBpbnN0ZWFkIG9mIENBTENfS18yLiAqLworCisjZGVmaW5lIENBTENfS18yKGEsIGIsIGMsIGQsIGopIFwKKyAgICAgbWRzWzBdW3EwW2EgXiBrZXlbKGopICsgOF1dIF4ga2V5W2pdXSBcCisgICBeIG1kc1sxXVtxMFtiIF4ga2V5WyhqKSArIDldXSBeIGtleVsoaikgKyAxXV0gXAorICAgXiBtZHNbMl1bcTFbYyBeIGtleVsoaikgKyAxMF1dIF4ga2V5WyhqKSArIDJdXSBcCisgICBeIG1kc1szXVtxMVtkIF4ga2V5WyhqKSArIDExXV0gXiBrZXlbKGopICsgM11dCisKKyNkZWZpbmUgQ0FMQ19LKGEsIGosIGssIGwsIG0sIG4pIFwKKyAgIHggPSBDQUxDX0tfMiAoaywgbCwgaywgbCwgMCk7IFwKKyAgIHkgPSBDQUxDX0tfMiAobSwgbiwgbSwgbiwgNCk7IFwKKyAgIHkgPSByb2wzMih5LCA4KTsgXAorICAgeCArPSB5OyB5ICs9IHg7IGN0eC0+YVtqXSA9IHg7IFwKKyAgIGN0eC0+YVsoaikgKyAxXSA9IHJvbDMyKHksIDkpCisKKyNkZWZpbmUgQ0FMQ19LMTkyXzIoYSwgYiwgYywgZCwgaikgXAorICAgQ0FMQ19LXzIgKHEwW2EgXiBrZXlbKGopICsgMTZdXSwgXAorCSAgICAgcTFbYiBeIGtleVsoaikgKyAxN11dLCBcCisJICAgICBxMFtjIF4ga2V5WyhqKSArIDE4XV0sIFwKKwkgICAgIHExW2QgXiBrZXlbKGopICsgMTldXSwgaikKKworI2RlZmluZSBDQUxDX0sxOTIoYSwgaiwgaywgbCwgbSwgbikgXAorICAgeCA9IENBTENfSzE5Ml8yIChsLCBsLCBrLCBrLCAwKTsgXAorICAgeSA9IENBTENfSzE5Ml8yIChuLCBuLCBtLCBtLCA0KTsgXAorICAgeSA9IHJvbDMyKHksIDgpOyBcCisgICB4ICs9IHk7IHkgKz0geDsgY3R4LT5hW2pdID0geDsgXAorICAgY3R4LT5hWyhqKSArIDFdID0gcm9sMzIoeSwgOSkKKworI2RlZmluZSBDQUxDX0syNTZfMihhLCBiLCBqKSBcCisgICBDQUxDX0sxOTJfMiAocTFbYiBeIGtleVsoaikgKyAyNF1dLCBcCisJICAgICAgICBxMVthIF4ga2V5WyhqKSArIDI1XV0sIFwKKwkgICAgICAgIHEwW2EgXiBrZXlbKGopICsgMjZdXSwgXAorCSAgICAgICAgcTBbYiBeIGtleVsoaikgKyAyN11dLCBqKQorCisjZGVmaW5lIENBTENfSzI1NihhLCBqLCBrLCBsLCBtLCBuKSBcCisgICB4ID0gQ0FMQ19LMjU2XzIgKGssIGwsIDApOyBcCisgICB5ID0gQ0FMQ19LMjU2XzIgKG0sIG4sIDQpOyBcCisgICB5ID0gcm9sMzIoeSwgOCk7IFwKKyAgIHggKz0geTsgeSArPSB4OyBjdHgtPmFbal0gPSB4OyBcCisgICBjdHgtPmFbKGopICsgMV0gPSByb2wzMih5LCA5KQorCisvKiBQZXJmb3JtIHRoZSBrZXkgc2V0dXAuICovCitpbnQgdHdvZmlzaF9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleV9sZW4pCit7CisKKwlzdHJ1Y3QgdHdvZmlzaF9jdHggKmN0eCA9IGNyeXB0b190Zm1fY3R4KHRmbSk7CisJdTMyICpmbGFncyA9ICZ0Zm0tPmNydF9mbGFnczsKKworCWludCBpLCBqLCBrOworCisJLyogVGVtcG9yYXJpZXMgZm9yIENBTENfSy4gKi8KKwl1MzIgeCwgeTsKKworCS8qIFRoZSBTIHZlY3RvciB1c2VkIHRvIGtleSB0aGUgUy1ib3hlcywgc3BsaXQgdXAgaW50byBpbmRpdmlkdWFsIGJ5dGVzLgorCSAqIDEyOC1iaXQga2V5cyB1c2Ugb25seSBzYSB0aHJvdWdoIHNoOyAyNTYtYml0IHVzZSBhbGwgb2YgdGhlbS4gKi8KKwl1OCBzYSA9IDAsIHNiID0gMCwgc2MgPSAwLCBzZCA9IDAsIHNlID0gMCwgc2YgPSAwLCBzZyA9IDAsIHNoID0gMDsKKwl1OCBzaSA9IDAsIHNqID0gMCwgc2sgPSAwLCBzbCA9IDAsIHNtID0gMCwgc24gPSAwLCBzbyA9IDAsIHNwID0gMDsKKworCS8qIFRlbXBvcmFyeSBmb3IgQ0FMQ19TLiAqLworCXU4IHRtcDsKKworCS8qIENoZWNrIGtleSBsZW5ndGguICovCisJaWYgKGtleV9sZW4gJSA4KQorCXsKKwkJKmZsYWdzIHw9IENSWVBUT19URk1fUkVTX0JBRF9LRVlfTEVOOworCQlyZXR1cm4gLUVJTlZBTDsgLyogdW5zdXBwb3J0ZWQga2V5IGxlbmd0aCAqLworCX0KKworCS8qIENvbXB1dGUgdGhlIGZpcnN0IHR3byB3b3JkcyBvZiB0aGUgUyB2ZWN0b3IuICBUaGUgbWFnaWMgbnVtYmVycyBhcmUKKwkgKiB0aGUgZW50cmllcyBvZiB0aGUgUlMgbWF0cml4LCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBwb2x5X3RvX2V4cC4gVGhlCisJICogbnVtYmVycyBpbiB0aGUgY29tbWVudHMgYXJlIHRoZSBvcmlnaW5hbCAocG9seW5vbWlhbCBmb3JtKSBtYXRyaXgKKwkgKiBlbnRyaWVzLiAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDAsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDEsIDB4MkQsIDB4QTQsIDB4NDQsIDB4OEEpOyAvKiBBNCA1NiBBMSA1NSAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDIsIDB4OEEsIDB4RDUsIDB4QkYsIDB4RDEpOyAvKiA1NSA4MiBGQyA4NyAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDMsIDB4RDEsIDB4N0YsIDB4M0QsIDB4OTkpOyAvKiA4NyBGMyBDMSA1QSAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDQsIDB4OTksIDB4NDYsIDB4NjYsIDB4OTYpOyAvKiA1QSAxRSA0NyA1OCAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDUsIDB4OTYsIDB4M0MsIDB4NUIsIDB4RUQpOyAvKiA1OCBDNiBBRSBEQiAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDYsIDB4RUQsIDB4MzcsIDB4NEYsIDB4RTApOyAvKiBEQiA2OCAzRCA5RSAqLworCUNBTENfUyAoc2EsIHNiLCBzYywgc2QsIDcsIDB4RTAsIDB4RDAsIDB4OEMsIDB4MTcpOyAvKiA5RSBFNSAxOSAwMyAqLworCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDgsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLworCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDksIDB4MkQsIDB4QTQsIDB4NDQsIDB4OEEpOyAvKiBBNCA1NiBBMSA1NSAqLworCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDEwLCAweDhBLCAweEQ1LCAweEJGLCAweEQxKTsgLyogNTUgODIgRkMgODcgKi8KKwlDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCAxMSwgMHhEMSwgMHg3RiwgMHgzRCwgMHg5OSk7IC8qIDg3IEYzIEMxIDVBICovCisJQ0FMQ19TIChzZSwgc2YsIHNnLCBzaCwgMTIsIDB4OTksIDB4NDYsIDB4NjYsIDB4OTYpOyAvKiA1QSAxRSA0NyA1OCAqLworCUNBTENfUyAoc2UsIHNmLCBzZywgc2gsIDEzLCAweDk2LCAweDNDLCAweDVCLCAweEVEKTsgLyogNTggQzYgQUUgREIgKi8KKwlDQUxDX1MgKHNlLCBzZiwgc2csIHNoLCAxNCwgMHhFRCwgMHgzNywgMHg0RiwgMHhFMCk7IC8qIERCIDY4IDNEIDlFICovCisJQ0FMQ19TIChzZSwgc2YsIHNnLCBzaCwgMTUsIDB4RTAsIDB4RDAsIDB4OEMsIDB4MTcpOyAvKiA5RSBFNSAxOSAwMyAqLworCisJaWYgKGtleV9sZW4gPT0gMjQgfHwga2V5X2xlbiA9PSAzMikgeyAvKiAxOTItIG9yIDI1Ni1iaXQga2V5ICovCisJCS8qIENhbGN1bGF0ZSB0aGUgdGhpcmQgd29yZCBvZiB0aGUgUyB2ZWN0b3IgKi8KKwkJQ0FMQ19TIChzaSwgc2osIHNrLCBzbCwgMTYsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLworCQlDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAxNywgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCisJCUNBTENfUyAoc2ksIHNqLCBzaywgc2wsIDE4LCAweDhBLCAweEQ1LCAweEJGLCAweEQxKTsgLyogNTUgODIgRkMgODcgKi8KKwkJQ0FMQ19TIChzaSwgc2osIHNrLCBzbCwgMTksIDB4RDEsIDB4N0YsIDB4M0QsIDB4OTkpOyAvKiA4NyBGMyBDMSA1QSAqLworCQlDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCisJCUNBTENfUyAoc2ksIHNqLCBzaywgc2wsIDIxLCAweDk2LCAweDNDLCAweDVCLCAweEVEKTsgLyogNTggQzYgQUUgREIgKi8KKwkJQ0FMQ19TIChzaSwgc2osIHNrLCBzbCwgMjIsIDB4RUQsIDB4MzcsIDB4NEYsIDB4RTApOyAvKiBEQiA2OCAzRCA5RSAqLworCQlDQUxDX1MgKHNpLCBzaiwgc2ssIHNsLCAyMywgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCisJfQorCisJaWYgKGtleV9sZW4gPT0gMzIpIHsgLyogMjU2LWJpdCBrZXkgKi8KKwkJLyogQ2FsY3VsYXRlIHRoZSBmb3VydGggd29yZCBvZiB0aGUgUyB2ZWN0b3IgKi8KKwkJQ0FMQ19TIChzbSwgc24sIHNvLCBzcCwgMjQsIDB4MDAsIDB4MkQsIDB4MDEsIDB4MkQpOyAvKiAwMSBBNCAwMiBBNCAqLworCQlDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyNSwgMHgyRCwgMHhBNCwgMHg0NCwgMHg4QSk7IC8qIEE0IDU2IEExIDU1ICovCisJCUNBTENfUyAoc20sIHNuLCBzbywgc3AsIDI2LCAweDhBLCAweEQ1LCAweEJGLCAweEQxKTsgLyogNTUgODIgRkMgODcgKi8KKwkJQ0FMQ19TIChzbSwgc24sIHNvLCBzcCwgMjcsIDB4RDEsIDB4N0YsIDB4M0QsIDB4OTkpOyAvKiA4NyBGMyBDMSA1QSAqLworCQlDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAyOCwgMHg5OSwgMHg0NiwgMHg2NiwgMHg5Nik7IC8qIDVBIDFFIDQ3IDU4ICovCisJCUNBTENfUyAoc20sIHNuLCBzbywgc3AsIDI5LCAweDk2LCAweDNDLCAweDVCLCAweEVEKTsgLyogNTggQzYgQUUgREIgKi8KKwkJQ0FMQ19TIChzbSwgc24sIHNvLCBzcCwgMzAsIDB4RUQsIDB4MzcsIDB4NEYsIDB4RTApOyAvKiBEQiA2OCAzRCA5RSAqLworCQlDQUxDX1MgKHNtLCBzbiwgc28sIHNwLCAzMSwgMHhFMCwgMHhEMCwgMHg4QywgMHgxNyk7IC8qIDlFIEU1IDE5IDAzICovCisKKwkJLyogQ29tcHV0ZSB0aGUgUy1ib3hlcy4gKi8KKwkJZm9yICggaSA9IGogPSAwLCBrID0gMTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApIHsKKwkJCUNBTENfU0IyNTZfMiggaSwgY2FsY19zYl90Ymxbal0sIGNhbGNfc2JfdGJsW2tdICk7CisJCX0KKworCQkvKiBDYWxjdWxhdGUgd2hpdGVuaW5nIGFuZCByb3VuZCBzdWJrZXlzLiAgVGhlIGNvbnN0YW50cyBhcmUKKwkJICogaW5kaWNlcyBvZiBzdWJrZXlzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCisJCUNBTENfSzI1NiAodywgMCwgMHhBOSwgMHg3NSwgMHg2NywgMHhGMyk7CisJCUNBTENfSzI1NiAodywgMiwgMHhCMywgMHhDNiwgMHhFOCwgMHhGNCk7CisJCUNBTENfSzI1NiAodywgNCwgMHgwNCwgMHhEQiwgMHhGRCwgMHg3Qik7CisJCUNBTENfSzI1NiAodywgNiwgMHhBMywgMHhGQiwgMHg3NiwgMHhDOCk7CisJCUNBTENfSzI1NiAoaywgMCwgMHg5QSwgMHg0QSwgMHg5MiwgMHhEMyk7CisJCUNBTENfSzI1NiAoaywgMiwgMHg4MCwgMHhFNiwgMHg3OCwgMHg2Qik7CisJCUNBTENfSzI1NiAoaywgNCwgMHhFNCwgMHg0NSwgMHhERCwgMHg3RCk7CisJCUNBTENfSzI1NiAoaywgNiwgMHhEMSwgMHhFOCwgMHgzOCwgMHg0Qik7CisJCUNBTENfSzI1NiAoaywgOCwgMHgwRCwgMHhENiwgMHhDNiwgMHgzMik7CisJCUNBTENfSzI1NiAoaywgMTAsIDB4MzUsIDB4RDgsIDB4OTgsIDB4RkQpOworCQlDQUxDX0syNTYgKGssIDEyLCAweDE4LCAweDM3LCAweEY3LCAweDcxKTsKKwkJQ0FMQ19LMjU2IChrLCAxNCwgMHhFQywgMHhGMSwgMHg2QywgMHhFMSk7CisJCUNBTENfSzI1NiAoaywgMTYsIDB4NDMsIDB4MzAsIDB4NzUsIDB4MEYpOworCQlDQUxDX0syNTYgKGssIDE4LCAweDM3LCAweEY4LCAweDI2LCAweDFCKTsKKwkJQ0FMQ19LMjU2IChrLCAyMCwgMHhGQSwgMHg4NywgMHgxMywgMHhGQSk7CisJCUNBTENfSzI1NiAoaywgMjIsIDB4OTQsIDB4MDYsIDB4NDgsIDB4M0YpOworCQlDQUxDX0syNTYgKGssIDI0LCAweEYyLCAweDVFLCAweEQwLCAweEJBKTsKKwkJQ0FMQ19LMjU2IChrLCAyNiwgMHg4QiwgMHhBRSwgMHgzMCwgMHg1Qik7CisJCUNBTENfSzI1NiAoaywgMjgsIDB4ODQsIDB4OEEsIDB4NTQsIDB4MDApOworCQlDQUxDX0syNTYgKGssIDMwLCAweERGLCAweEJDLCAweDIzLCAweDlEKTsKKwl9IGVsc2UgaWYgKGtleV9sZW4gPT0gMjQpIHsgLyogMTkyLWJpdCBrZXkgKi8KKwkJLyogQ29tcHV0ZSB0aGUgUy1ib3hlcy4gKi8KKwkJZm9yICggaSA9IGogPSAwLCBrID0gMTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApIHsKKwkJICAgICAgICBDQUxDX1NCMTkyXzIoIGksIGNhbGNfc2JfdGJsW2pdLCBjYWxjX3NiX3RibFtrXSApOworCQl9CisKKwkJLyogQ2FsY3VsYXRlIHdoaXRlbmluZyBhbmQgcm91bmQgc3Via2V5cy4gIFRoZSBjb25zdGFudHMgYXJlCisJCSAqIGluZGljZXMgb2Ygc3Via2V5cywgcHJlcHJvY2Vzc2VkIHRocm91Z2ggcTAgYW5kIHExLiAqLworCQlDQUxDX0sxOTIgKHcsIDAsIDB4QTksIDB4NzUsIDB4NjcsIDB4RjMpOworCQlDQUxDX0sxOTIgKHcsIDIsIDB4QjMsIDB4QzYsIDB4RTgsIDB4RjQpOworCQlDQUxDX0sxOTIgKHcsIDQsIDB4MDQsIDB4REIsIDB4RkQsIDB4N0IpOworCQlDQUxDX0sxOTIgKHcsIDYsIDB4QTMsIDB4RkIsIDB4NzYsIDB4QzgpOworCQlDQUxDX0sxOTIgKGssIDAsIDB4OUEsIDB4NEEsIDB4OTIsIDB4RDMpOworCQlDQUxDX0sxOTIgKGssIDIsIDB4ODAsIDB4RTYsIDB4NzgsIDB4NkIpOworCQlDQUxDX0sxOTIgKGssIDQsIDB4RTQsIDB4NDUsIDB4REQsIDB4N0QpOworCQlDQUxDX0sxOTIgKGssIDYsIDB4RDEsIDB4RTgsIDB4MzgsIDB4NEIpOworCQlDQUxDX0sxOTIgKGssIDgsIDB4MEQsIDB4RDYsIDB4QzYsIDB4MzIpOworCQlDQUxDX0sxOTIgKGssIDEwLCAweDM1LCAweEQ4LCAweDk4LCAweEZEKTsKKwkJQ0FMQ19LMTkyIChrLCAxMiwgMHgxOCwgMHgzNywgMHhGNywgMHg3MSk7CisJCUNBTENfSzE5MiAoaywgMTQsIDB4RUMsIDB4RjEsIDB4NkMsIDB4RTEpOworCQlDQUxDX0sxOTIgKGssIDE2LCAweDQzLCAweDMwLCAweDc1LCAweDBGKTsKKwkJQ0FMQ19LMTkyIChrLCAxOCwgMHgzNywgMHhGOCwgMHgyNiwgMHgxQik7CisJCUNBTENfSzE5MiAoaywgMjAsIDB4RkEsIDB4ODcsIDB4MTMsIDB4RkEpOworCQlDQUxDX0sxOTIgKGssIDIyLCAweDk0LCAweDA2LCAweDQ4LCAweDNGKTsKKwkJQ0FMQ19LMTkyIChrLCAyNCwgMHhGMiwgMHg1RSwgMHhEMCwgMHhCQSk7CisJCUNBTENfSzE5MiAoaywgMjYsIDB4OEIsIDB4QUUsIDB4MzAsIDB4NUIpOworCQlDQUxDX0sxOTIgKGssIDI4LCAweDg0LCAweDhBLCAweDU0LCAweDAwKTsKKwkJQ0FMQ19LMTkyIChrLCAzMCwgMHhERiwgMHhCQywgMHgyMywgMHg5RCk7CisJfSBlbHNlIHsgLyogMTI4LWJpdCBrZXkgKi8KKwkJLyogQ29tcHV0ZSB0aGUgUy1ib3hlcy4gKi8KKwkJZm9yICggaSA9IGogPSAwLCBrID0gMTsgaSA8IDI1NjsgaSsrLCBqICs9IDIsIGsgKz0gMiApIHsKKwkJCUNBTENfU0JfMiggaSwgY2FsY19zYl90Ymxbal0sIGNhbGNfc2JfdGJsW2tdICk7CisJCX0KKworCQkvKiBDYWxjdWxhdGUgd2hpdGVuaW5nIGFuZCByb3VuZCBzdWJrZXlzLiAgVGhlIGNvbnN0YW50cyBhcmUKKwkJICogaW5kaWNlcyBvZiBzdWJrZXlzLCBwcmVwcm9jZXNzZWQgdGhyb3VnaCBxMCBhbmQgcTEuICovCisJCUNBTENfSyAodywgMCwgMHhBOSwgMHg3NSwgMHg2NywgMHhGMyk7CisJCUNBTENfSyAodywgMiwgMHhCMywgMHhDNiwgMHhFOCwgMHhGNCk7CisJCUNBTENfSyAodywgNCwgMHgwNCwgMHhEQiwgMHhGRCwgMHg3Qik7CisJCUNBTENfSyAodywgNiwgMHhBMywgMHhGQiwgMHg3NiwgMHhDOCk7CisJCUNBTENfSyAoaywgMCwgMHg5QSwgMHg0QSwgMHg5MiwgMHhEMyk7CisJCUNBTENfSyAoaywgMiwgMHg4MCwgMHhFNiwgMHg3OCwgMHg2Qik7CisJCUNBTENfSyAoaywgNCwgMHhFNCwgMHg0NSwgMHhERCwgMHg3RCk7CisJCUNBTENfSyAoaywgNiwgMHhEMSwgMHhFOCwgMHgzOCwgMHg0Qik7CisJCUNBTENfSyAoaywgOCwgMHgwRCwgMHhENiwgMHhDNiwgMHgzMik7CisJCUNBTENfSyAoaywgMTAsIDB4MzUsIDB4RDgsIDB4OTgsIDB4RkQpOworCQlDQUxDX0sgKGssIDEyLCAweDE4LCAweDM3LCAweEY3LCAweDcxKTsKKwkJQ0FMQ19LIChrLCAxNCwgMHhFQywgMHhGMSwgMHg2QywgMHhFMSk7CisJCUNBTENfSyAoaywgMTYsIDB4NDMsIDB4MzAsIDB4NzUsIDB4MEYpOworCQlDQUxDX0sgKGssIDE4LCAweDM3LCAweEY4LCAweDI2LCAweDFCKTsKKwkJQ0FMQ19LIChrLCAyMCwgMHhGQSwgMHg4NywgMHgxMywgMHhGQSk7CisJCUNBTENfSyAoaywgMjIsIDB4OTQsIDB4MDYsIDB4NDgsIDB4M0YpOworCQlDQUxDX0sgKGssIDI0LCAweEYyLCAweDVFLCAweEQwLCAweEJBKTsKKwkJQ0FMQ19LIChrLCAyNiwgMHg4QiwgMHhBRSwgMHgzMCwgMHg1Qik7CisJCUNBTENfSyAoaywgMjgsIDB4ODQsIDB4OEEsIDB4NTQsIDB4MDApOworCQlDQUxDX0sgKGssIDMwLCAweERGLCAweEJDLCAweDIzLCAweDlEKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwodHdvZmlzaF9zZXRrZXkpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlR3b2Zpc2ggY2lwaGVyIGNvbW1vbiBmdW5jdGlvbnMiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggOTYzMDliOS4uMTFhYmM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTI4NSw2ICsyODUsOCBAQAogewogCWludCByZXN1bHQ7CiAKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlhY3BpX2FjX2RpciA9IGFjcGlfbG9ja19hY19kaXIoKTsKIAlpZiAoIWFjcGlfYWNfZGlyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jIGIvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCmluZGV4IDgxZTk3MGEuLjFkZGEzNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYworKysgYi9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKQEAgLTEyOSwxMSArMTI5LDE1IEBACiAJc3RydWN0IGFjcGlfbWVtb3J5X2luZm8gKmluZm8sICpuOwogCiAKKwlpZiAoIWxpc3RfZW1wdHkoJm1lbV9kZXZpY2UtPnJlc19saXN0KSkKKwkJcmV0dXJuIDA7CisKIAlzdGF0dXMgPSBhY3BpX3dhbGtfcmVzb3VyY2VzKG1lbV9kZXZpY2UtPmRldmljZS0+aGFuZGxlLCBNRVRIT0RfTkFNRV9fQ1JTLAogCQkJCSAgICAgYWNwaV9tZW1vcnlfZ2V0X3Jlc291cmNlLCBtZW1fZGV2aWNlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGluZm8sIG4sICZtZW1fZGV2aWNlLT5yZXNfbGlzdCwgbGlzdCkKIAkJCWtmcmVlKGluZm8pOworCQlJTklUX0xJU1RfSEVBRCgmbWVtX2RldmljZS0+cmVzX2xpc3QpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTIzMCwxNyArMjM0LDEwIEBACiAJICogKGkuZS4gbWVtb3J5LWhvdC1yZW1vdmUgZnVuY3Rpb24pCiAJICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpbmZvLCAmbWVtX2RldmljZS0+cmVzX2xpc3QsIGxpc3QpIHsKLQkJdTY0IHN0YXJ0X3BmbiwgZW5kX3BmbjsKLQotCQlzdGFydF9wZm4gPSBpbmZvLT5zdGFydF9hZGRyID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZF9wZm4gPSAoaW5mby0+c3RhcnRfYWRkciArIGluZm8tPmxlbmd0aCAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0KLQkJaWYgKHBmbl92YWxpZChzdGFydF9wZm4pIHx8IHBmbl92YWxpZChlbmRfcGZuKSkgewotCQkJLyogYWxyZWFkeSBlbmFibGVkLiB0cnkgbmV4dCBhcmVhICovCisJCWlmIChpbmZvLT5lbmFibGVkKSB7IC8qIGp1c3Qgc2FuaXR5IGNoZWNrLi4uKi8KIAkJCW51bV9lbmFibGVkKys7CiAJCQljb250aW51ZTsKIAkJfQotCiAJCXJlc3VsdCA9IGFkZF9tZW1vcnkobm9kZSwgaW5mby0+c3RhcnRfYWRkciwgaW5mby0+bGVuZ3RoKTsKIAkJaWYgKHJlc3VsdCkKIAkJCWNvbnRpbnVlOwpAQCAtNDg3LDEwICs0ODQsOCBAQAogCiAKIAlzdGF0dXMgPSBpc19tZW1vcnlfZGV2aWNlKGhhbmRsZSk7Ci0JaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKXsKLQkJQUNQSV9FWENFUFRJT04oKEFFX0lORk8sIHN0YXR1cywgImhhbmRsZSBpcyBubyBtZW1vcnkgZGV2aWNlIikpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKIAkJcmV0dXJuIEFFX09LOwkvKiBjb250aW51ZSAqLwotCX0KIAogCXN0YXR1cyA9IGFjcGlfaW5zdGFsbF9ub3RpZnlfaGFuZGxlcihoYW5kbGUsIEFDUElfU1lTVEVNX05PVElGWSwKIAkJCQkJICAgICBhY3BpX21lbW9yeV9kZXZpY2Vfbm90aWZ5LCBOVUxMKTsKQEAgLTUwNiwxMCArNTAxLDggQEAKIAogCiAJc3RhdHVzID0gaXNfbWVtb3J5X2RldmljZShoYW5kbGUpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSl7Ci0JCUFDUElfRVhDRVBUSU9OKChBRV9JTkZPLCBzdGF0dXMsICJoYW5kbGUgaXMgbm8gbWVtb3J5IGRldmljZSIpKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXJldHVybiBBRV9PSzsJLyogY29udGludWUgKi8KLQl9CiAKIAlzdGF0dXMgPSBhY3BpX3JlbW92ZV9ub3RpZnlfaGFuZGxlcihoYW5kbGUsCiAJCQkJCSAgICBBQ1BJX1NZU1RFTV9OT1RJRlksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwppbmRleCA2ZTUyMjE3Li45ODEwZTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCisrKyBiL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKQEAgLTc1Nyw2ICs3NTcsOSBAQAogewogCWludCByZXN1bHQ7CiAKKwlpZiAoYWNwaV9kaXNhYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlhY3BpX2JhdHRlcnlfZGlyID0gYWNwaV9sb2NrX2JhdHRlcnlfZGlyKCk7CiAJaWYgKCFhY3BpX2JhdHRlcnlfZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9idXMuYyBiL2RyaXZlcnMvYWNwaS9idXMuYwppbmRleCBiMjk3NzY5Li4yNzljNGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvYnVzLmMKKysrIGIvZHJpdmVycy9hY3BpL2J1cy5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CkBAIC02OCw3ICs2OSw4IEBACiAKIAlzdGF0dXMgPSBhY3BpX2dldF9kYXRhKGhhbmRsZSwgYWNwaV9idXNfZGF0YV9oYW5kbGVyLCAodm9pZCAqKilkZXZpY2UpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSB8fCAhKmRldmljZSkgewotCQlBQ1BJX0VYQ0VQVElPTigoQUVfSU5GTywgc3RhdHVzLCAiTm8gY29udGV4dCBmb3Igb2JqZWN0IFslcF0iLCBoYW5kbGUpKTsKKwkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiTm8gY29udGV4dCBmb3Igb2JqZWN0IFslcF1cbiIsCisJCQkJICBoYW5kbGUpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xOTIsNyArMTk0LDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhpcyBpcyBhIHZhbGlkIHRhcmdldCBzdGF0ZSAqLwogCiAJaWYgKCFkZXZpY2UtPmZsYWdzLnBvd2VyX21hbmFnZWFibGUpIHsKLQkJQUNQSV9ERUJVR19QUklOVCgoQUNQSV9EQl9JTkZPLCAiRGV2aWNlIGBbJXNdJyBpcyBub3QgcG93ZXIgbWFuYWdlYWJsZSIsCisJCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfSU5GTywgIkRldmljZSBgWyVzXScgaXMgbm90IHBvd2VyIG1hbmFnZWFibGVcbiIsCiAJCQkJZGV2aWNlLT5rb2JqLm5hbWUpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNzM4LDcgKzc0MCwxMCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlmaXJtd2FyZV9yZWdpc3RlcigmYWNwaV9zdWJzeXMpOworCXJlc3VsdCA9IGZpcm13YXJlX3JlZ2lzdGVyKCZhY3BpX3N1YnN5cyk7CisJaWYgKHJlc3VsdCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmaXJtd2FyZV9yZWdpc3RlciBlcnJvcjogJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CiAKIAlyZXN1bHQgPSBhY3BpX2J1c19pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9kb2NrLmMgYi9kcml2ZXJzL2FjcGkvZG9jay5jCmluZGV4IDFjMGEzOWQuLjU3OGI5OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9kb2NrLmMKKysrIGIvZHJpdmVycy9hY3BpL2RvY2suYwpAQCAtNTgsOCArNTgsOCBAQAogfTsKIAogI2RlZmluZSBET0NLX0RPQ0tJTkcJMHgwMDAwMDAwMQotI2RlZmluZSBET0NLX0VWRU5UCUtPQkpfRE9DSwotI2RlZmluZSBVTkRPQ0tfRVZFTlQJS09CSl9VTkRPQ0sKKyNkZWZpbmUgRE9DS19FVkVOVAkzCisjZGVmaW5lIFVORE9DS19FVkVOVAkyCiAKIHN0YXRpYyBzdHJ1Y3QgZG9ja19zdGF0aW9uICpkb2NrX3N0YXRpb247CiAKQEAgLTMyMiwxMSArMzIyLDEwIEBACiAKIHN0YXRpYyB2b2lkIGRvY2tfZXZlbnQoc3RydWN0IGRvY2tfc3RhdGlvbiAqZHMsIHUzMiBldmVudCwgaW50IG51bSkKIHsKLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKLQotCWRldmljZSA9IGRvY2tfY3JlYXRlX2FjcGlfZGV2aWNlKGRzLT5oYW5kbGUpOwotCWlmIChkZXZpY2UpCi0JCWtvYmplY3RfdWV2ZW50KCZkZXZpY2UtPmtvYmosIG51bSk7CisJLyoKKwkgKiB3ZSBkb24ndCBkbyBldmVudHMgdW50aWwgc29tZW9uZSB0ZWxscyBtZSB0aGF0CisJICogdGhleSB3b3VsZCBsaWtlIHRvIGhhdmUgdGhlbS4KKwkgKi8KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvaG90a2V5LmMgYi9kcml2ZXJzL2FjcGkvaG90a2V5LmMKaW5kZXggMzJjOWQ4OC4uMWJhMmRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2hvdGtleS5jCisrKyBiL2RyaXZlcnMvYWNwaS9ob3RrZXkuYwpAQCAtOTEsNiArOTEsMTQgQEAKIAlIS19FVkVOVF9FTlRFUlJJTkdfUzUsCiB9OwogCitlbnVtIGNvbmZfZW50cnlfZW51bSB7CisJYnVzX2hhbmRsZSA9IDAsCisJYnVzX21ldGhvZCA9IDEsCisJYWN0aW9uX2hhbmRsZSA9IDIsCisJbWV0aG9kID0gMywKKwlMQVNUX0NPTkZfRU5UUlkKK307CisKIC8qICBwcm9jZGlyIHdlIHVzZSAqLwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaG90a2V5X3Byb2NfZGlyOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaG90a2V5X2NvbmZpZzsKQEAgLTI0NCwxOSArMjUyLDE1IEBACiAKIHN0YXRpYyBjaGFyICpmb3JtYXRfcmVzdWx0KHVuaW9uIGFjcGlfb2JqZWN0ICpvYmplY3QpCiB7Ci0JY2hhciAqYnVmID0gTlVMTDsKKwljaGFyICpidWY7CiAKLQlidWYgPSAoY2hhciAqKWttYWxsb2MoUkVTVUxUX1NUUl9MRU4sIEdGUF9LRVJORUwpOwotCWlmIChidWYpCi0JCW1lbXNldChidWYsIDAsIFJFU1VMVF9TVFJfTEVOKTsKLQllbHNlCi0JCWdvdG8gZG9fZmFpbDsKLQorCWJ1ZiA9IGt6YWxsb2MoUkVTVUxUX1NUUl9MRU4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gTlVMTDsKIAkvKiBOb3csIGp1c3Qgc3VwcG9ydCBpbnRlZ2VyIHR5cGUgKi8KIAlpZiAob2JqZWN0LT50eXBlID09IEFDUElfVFlQRV9JTlRFR0VSKQogCQlzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAodTMyKSBvYmplY3QtPmludGVnZXIudmFsdWUpOwotICAgICAgZG9fZmFpbDoKLQlyZXR1cm4gKGJ1Zik7CisJcmV0dXJuIGJ1ZjsKIH0KIAogc3RhdGljIGludCBob3RrZXlfcG9sbGluZ19zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQpAQCAtNDg2LDk4ICs0OTAsMTAyIEBACiAKIHN0YXRpYyB2b2lkIGZyZWVfaG90a2V5X2J1ZmZlcih1bmlvbiBhY3BpX2hvdGtleSAqa2V5KQogeworCS8qIGtleSB3b3VsZCBuZXZlciBiZSBudWxsLCBhY3Rpb24gbWV0aG9kIGNvdWxkIGJlICovCiAJa2ZyZWUoa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfcG9sbF9ob3RrZXlfYnVmZmVyKHVuaW9uIGFjcGlfaG90a2V5ICprZXkpCiB7CisJLyoga2V5IHdvdWxkIG5ldmVyIGJlIG51bGwsIG90aGVycyBjb3VsZCBiZSovCiAJa2ZyZWUoa2V5LT5wb2xsX2hvdGtleS5hY3Rpb25fbWV0aG9kKTsKIAlrZnJlZShrZXktPnBvbGxfaG90a2V5LnBvbGxfbWV0aG9kKTsKIAlrZnJlZShrZXktPnBvbGxfaG90a2V5LnBvbGxfcmVzdWx0KTsKIH0KIHN0YXRpYyBpbnQKLWluaXRfaG90a2V5X2RldmljZSh1bmlvbiBhY3BpX2hvdGtleSAqa2V5LCBjaGFyICpidXNfc3RyLCBjaGFyICphY3Rpb25fc3RyLAotCQkgICBjaGFyICptZXRob2QsIGludCBzdGRfbnVtLCBpbnQgZXh0ZXJuYWxfbnVtKQoraW5pdF9ob3RrZXlfZGV2aWNlKHVuaW9uIGFjcGlfaG90a2V5ICprZXksIGNoYXIgKipjb25maWdfZW50cnksCisJCSAgIGludCBzdGRfbnVtLCBpbnQgZXh0ZXJuYWxfbnVtKQogewogCWFjcGlfaGFuZGxlIHRtcF9oYW5kbGU7CiAJYWNwaV9zdGF0dXMgc3RhdHVzID0gQUVfT0s7CiAKLQogCWlmIChzdGRfbnVtIDwgMCB8fCBJU19QT0xMKHN0ZF9udW0pIHx8ICFrZXkpCiAJCWdvdG8gZG9fZmFpbDsKIAotCWlmICghYnVzX3N0ciB8fCAhYWN0aW9uX3N0ciB8fCAhbWV0aG9kKQorCWlmICghY29uZmlnX2VudHJ5W2J1c19oYW5kbGVdIHx8ICFjb25maWdfZW50cnlbYWN0aW9uX2hhbmRsZV0KKwkJCXx8ICFjb25maWdfZW50cnlbbWV0aG9kXSkKIAkJZ290byBkb19mYWlsOwogCiAJa2V5LT5saW5rLmhvdGtleV90eXBlID0gQUNQSV9IT1RLRVlfRVZFTlQ7CiAJa2V5LT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0gPSBzdGRfbnVtOwogCWtleS0+ZXZlbnRfaG90a2V5LmZsYWcgPSAwOwotCWtleS0+ZXZlbnRfaG90a2V5LmFjdGlvbl9tZXRob2QgPSBtZXRob2Q7CisJa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IGNvbmZpZ19lbnRyeVttZXRob2RdOwogCi0Jc3RhdHVzID0KLQkgICAgYWNwaV9nZXRfaGFuZGxlKE5VTEwsIGJ1c19zdHIsICYoa2V5LT5ldmVudF9ob3RrZXkuYnVzX2hhbmRsZSkpOworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBjb25maWdfZW50cnlbYnVzX2hhbmRsZV0sCisJCQkgICAmKGtleS0+ZXZlbnRfaG90a2V5LmJ1c19oYW5kbGUpKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWdvdG8gZG9fZmFpbDsKKwkJZ290byBkb19mYWlsX3plcm87CiAJa2V5LT5ldmVudF9ob3RrZXkuZXh0ZXJuYWxfaG90a2V5X251bSA9IGV4dGVybmFsX251bTsKLQlzdGF0dXMgPQotCSAgICBhY3BpX2dldF9oYW5kbGUoTlVMTCwgYWN0aW9uX3N0ciwKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoTlVMTCwgY29uZmlnX2VudHJ5W2FjdGlvbl9oYW5kbGVdLAogCQkJICAgICYoa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX2hhbmRsZSkpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBkb19mYWlsOworCQlnb3RvIGRvX2ZhaWxfemVybzsKIAlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX2hhbmRsZSwKLQkJCQkgbWV0aG9kLCAmdG1wX2hhbmRsZSk7CisJCQkJIGNvbmZpZ19lbnRyeVttZXRob2RdLCAmdG1wX2hhbmRsZSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlnb3RvIGRvX2ZhaWw7CisJCWdvdG8gZG9fZmFpbF96ZXJvOwogCXJldHVybiBBRV9PSzsKLSAgICAgIGRvX2ZhaWw6Citkb19mYWlsX3plcm86CisJa2V5LT5ldmVudF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IE5VTEw7Citkb19mYWlsOgogCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgaW50Ci1pbml0X3BvbGxfaG90a2V5X2RldmljZSh1bmlvbiBhY3BpX2hvdGtleSAqa2V5LAotCQkJY2hhciAqcG9sbF9zdHIsCi0JCQljaGFyICpwb2xsX21ldGhvZCwKLQkJCWNoYXIgKmFjdGlvbl9zdHIsIGNoYXIgKmFjdGlvbl9tZXRob2QsIGludCBzdGRfbnVtKQoraW5pdF9wb2xsX2hvdGtleV9kZXZpY2UodW5pb24gYWNwaV9ob3RrZXkgKmtleSwgY2hhciAqKmNvbmZpZ19lbnRyeSwKKwkJCWludCBzdGRfbnVtKQogewogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IEFFX09LOwogCWFjcGlfaGFuZGxlIHRtcF9oYW5kbGU7CiAKLQogCWlmIChzdGRfbnVtIDwgMCB8fCBJU19FVkVOVChzdGRfbnVtKSB8fCAha2V5KQogCQlnb3RvIGRvX2ZhaWw7Ci0KLQlpZiAoIXBvbGxfc3RyIHx8ICFwb2xsX21ldGhvZCB8fCAhYWN0aW9uX3N0ciB8fCAhYWN0aW9uX21ldGhvZCkKKwlpZiAoIWNvbmZpZ19lbnRyeVtidXNfaGFuZGxlXSB8fCFjb25maWdfZW50cnlbYnVzX21ldGhvZF0gfHwKKwkJIWNvbmZpZ19lbnRyeVthY3Rpb25faGFuZGxlXSB8fCAhY29uZmlnX2VudHJ5W21ldGhvZF0pCiAJCWdvdG8gZG9fZmFpbDsKIAogCWtleS0+bGluay5ob3RrZXlfdHlwZSA9IEFDUElfSE9US0VZX1BPTExJTkc7CiAJa2V5LT5saW5rLmhvdGtleV9zdGFuZGFyZF9udW0gPSBzdGRfbnVtOwogCWtleS0+cG9sbF9ob3RrZXkuZmxhZyA9IDA7Ci0Ja2V5LT5wb2xsX2hvdGtleS5wb2xsX21ldGhvZCA9IHBvbGxfbWV0aG9kOwotCWtleS0+cG9sbF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IGFjdGlvbl9tZXRob2Q7CisJa2V5LT5wb2xsX2hvdGtleS5wb2xsX21ldGhvZCA9IGNvbmZpZ19lbnRyeVtidXNfbWV0aG9kXTsKKwlrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9tZXRob2QgPSBjb25maWdfZW50cnlbbWV0aG9kXTsKIAotCXN0YXR1cyA9Ci0JICAgIGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBwb2xsX3N0ciwgJihrZXktPnBvbGxfaG90a2V5LnBvbGxfaGFuZGxlKSk7CisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKE5VTEwsIGNvbmZpZ19lbnRyeVtidXNfaGFuZGxlXSwKKwkJICAgICAgJihrZXktPnBvbGxfaG90a2V5LnBvbGxfaGFuZGxlKSk7CiAJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQotCQlnb3RvIGRvX2ZhaWw7CisJCWdvdG8gZG9fZmFpbF96ZXJvOwogCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShrZXktPnBvbGxfaG90a2V5LnBvbGxfaGFuZGxlLAotCQkJCSBwb2xsX21ldGhvZCwgJnRtcF9oYW5kbGUpOworCQkJCSBjb25maWdfZW50cnlbYnVzX21ldGhvZF0sICZ0bXBfaGFuZGxlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWdvdG8gZG9fZmFpbDsKKwkJZ290byBkb19mYWlsX3plcm87CiAJc3RhdHVzID0KLQkgICAgYWNwaV9nZXRfaGFuZGxlKE5VTEwsIGFjdGlvbl9zdHIsCisJICAgIGFjcGlfZ2V0X2hhbmRsZShOVUxMLCBjb25maWdfZW50cnlbYWN0aW9uX2hhbmRsZV0sCiAJCQkgICAgJihrZXktPnBvbGxfaG90a2V5LmFjdGlvbl9oYW5kbGUpKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCi0JCWdvdG8gZG9fZmFpbDsKKwkJZ290byBkb19mYWlsX3plcm87CiAJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGtleS0+cG9sbF9ob3RrZXkuYWN0aW9uX2hhbmRsZSwKLQkJCQkgYWN0aW9uX21ldGhvZCwgJnRtcF9oYW5kbGUpOworCQkJCSBjb25maWdfZW50cnlbbWV0aG9kXSwgJnRtcF9oYW5kbGUpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJZ290byBkb19mYWlsOworCQlnb3RvIGRvX2ZhaWxfemVybzsKIAlrZXktPnBvbGxfaG90a2V5LnBvbGxfcmVzdWx0ID0KIAkgICAgKHVuaW9uIGFjcGlfb2JqZWN0ICopa21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWtleS0+cG9sbF9ob3RrZXkucG9sbF9yZXN1bHQpCi0JCWdvdG8gZG9fZmFpbDsKKwkJZ290byBkb19mYWlsX3plcm87CiAJcmV0dXJuIEFFX09LOwotICAgICAgZG9fZmFpbDoKKworZG9fZmFpbF96ZXJvOgorCWtleS0+cG9sbF9ob3RrZXkucG9sbF9tZXRob2QgPSBOVUxMOworCWtleS0+cG9sbF9ob3RrZXkuYWN0aW9uX21ldGhvZCA9IE5VTEw7Citkb19mYWlsOgogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC02NTIsMTcgKzY2MCwxOCBAQAogfQogCiBzdGF0aWMgaW50Ci1nZXRfcGFybXMoY2hhciAqY29uZmlnX3JlY29yZCwKLQkgIGludCAqY21kLAotCSAgY2hhciAqKmJ1c19oYW5kbGUsCi0JICBjaGFyICoqYnVzX21ldGhvZCwKLQkgIGNoYXIgKiphY3Rpb25faGFuZGxlLAotCSAgY2hhciAqKm1ldGhvZCwgaW50ICppbnRlcm5hbF9ldmVudF9udW0sIGludCAqZXh0ZXJuYWxfZXZlbnRfbnVtKQorZ2V0X3Bhcm1zKGNoYXIgKmNvbmZpZ19yZWNvcmQsIGludCAqY21kLCBjaGFyICoqY29uZmlnX2VudHJ5LAorCSAgICAgICBpbnQgKmludGVybmFsX2V2ZW50X251bSwgaW50ICpleHRlcm5hbF9ldmVudF9udW0pCiB7CisvKiB0aGUgZm9ybWF0IG9mICpjb25maWdfcmVjb3JkID0KKyAqICIxOlxkKzoqIiA6ICJjbWQ6aW50ZXJuYWxfZXZlbnRfbnVtIgorICogIlxkKzpcdys6XHcrOlx3Kzpcdys6XGQrOlxkKyIgOgorICogImNtZDpidXNfaGFuZGxlOmJ1c19tZXRob2Q6YWN0aW9uX2hhbmRsZTptZXRob2Q6aW50ZXJuYWxfZXZlbnRfbnVtOmV4dGVybmFsX2V2ZW50X251bSIKKyAqLwogCWNoYXIgKnRtcCwgKnRtcDEsIGNvdW50OworCWludCBpOwogCiAJc3NjYW5mKGNvbmZpZ19yZWNvcmQsICIlZCIsIGNtZCk7Ci0KIAlpZiAoKmNtZCA9PSAxKSB7CiAJCWlmIChzc2NhbmYoY29uZmlnX3JlY29yZCwgIiVkOiVkIiwgY21kLCBpbnRlcm5hbF9ldmVudF9udW0pICE9CiAJCSAgICAyKQpAQCAtNjc0LDU5ICs2ODMsMjcgQEAKIAlpZiAoIXRtcCkKIAkJZ290byBkb19mYWlsOwogCXRtcCsrOwotCXRtcDEgPSBzdHJjaHIodG1wLCAnOicpOwotCWlmICghdG1wMSkKLQkJZ290byBkb19mYWlsOwotCi0JY291bnQgPSB0bXAxIC0gdG1wOwotCSpidXNfaGFuZGxlID0gKGNoYXIgKilrbWFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCEqYnVzX2hhbmRsZSkKLQkJZ290byBkb19mYWlsOwotCXN0cm5jcHkoKmJ1c19oYW5kbGUsIHRtcCwgY291bnQpOwotCSooKmJ1c19oYW5kbGUgKyBjb3VudCkgPSAwOwotCi0JdG1wID0gdG1wMTsKLQl0bXArKzsKLQl0bXAxID0gc3RyY2hyKHRtcCwgJzonKTsKLQlpZiAoIXRtcDEpCi0JCWdvdG8gZG9fZmFpbDsKLQljb3VudCA9IHRtcDEgLSB0bXA7Ci0JKmJ1c19tZXRob2QgPSAoY2hhciAqKWttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoISpidXNfbWV0aG9kKQotCQlnb3RvIGRvX2ZhaWw7Ci0Jc3RybmNweSgqYnVzX21ldGhvZCwgdG1wLCBjb3VudCk7Ci0JKigqYnVzX21ldGhvZCArIGNvdW50KSA9IDA7Ci0KLQl0bXAgPSB0bXAxOwotCXRtcCsrOwotCXRtcDEgPSBzdHJjaHIodG1wLCAnOicpOwotCWlmICghdG1wMSkKLQkJZ290byBkb19mYWlsOwotCWNvdW50ID0gdG1wMSAtIHRtcDsKLQkqYWN0aW9uX2hhbmRsZSA9IChjaGFyICopa21hbGxvYyhjb3VudCArIDEsIEdGUF9LRVJORUwpOwotCWlmICghKmFjdGlvbl9oYW5kbGUpCi0JCWdvdG8gZG9fZmFpbDsKLQlzdHJuY3B5KCphY3Rpb25faGFuZGxlLCB0bXAsIGNvdW50KTsKLQkqKCphY3Rpb25faGFuZGxlICsgY291bnQpID0gMDsKLQotCXRtcCA9IHRtcDE7Ci0JdG1wKys7Ci0JdG1wMSA9IHN0cmNocih0bXAsICc6Jyk7Ci0JaWYgKCF0bXAxKQotCQlnb3RvIGRvX2ZhaWw7Ci0JY291bnQgPSB0bXAxIC0gdG1wOwotCSptZXRob2QgPSAoY2hhciAqKWttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoISptZXRob2QpCi0JCWdvdG8gZG9fZmFpbDsKLQlzdHJuY3B5KCptZXRob2QsIHRtcCwgY291bnQpOwotCSooKm1ldGhvZCArIGNvdW50KSA9IDA7Ci0KLQlpZiAoc3NjYW5mKHRtcDEgKyAxLCAiJWQ6JWQiLCBpbnRlcm5hbF9ldmVudF9udW0sIGV4dGVybmFsX2V2ZW50X251bSkgPD0KLQkgICAgMCkKLQkJZ290byBkb19mYWlsOwotCi0JcmV0dXJuIDY7Ci0gICAgICBkb19mYWlsOgorCWZvciAoaSA9IDA7IGkgPCBMQVNUX0NPTkZfRU5UUlk7IGkrKykgeworCQl0bXAxID0gc3RyY2hyKHRtcCwgJzonKTsKKwkJaWYgKCF0bXAxKSB7CisJCQlnb3RvIGRvX2ZhaWw7CisJCX0KKwkJY291bnQgPSB0bXAxIC0gdG1wOworCQljb25maWdfZW50cnlbaV0gPSBremFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghY29uZmlnX2VudHJ5W2ldKQorCQkJZ290byBoYW5kbGVfZmFpbHVyZTsKKwkJc3RybmNweShjb25maWdfZW50cnlbaV0sIHRtcCwgY291bnQpOworCQl0bXAgPSB0bXAxICsgMTsKKwl9CisJaWYgKHNzY2FuZih0bXAsICIlZDolZCIsIGludGVybmFsX2V2ZW50X251bSwgZXh0ZXJuYWxfZXZlbnRfbnVtKSA8PSAwKQorCQlnb3RvIGhhbmRsZV9mYWlsdXJlOworCWlmICghSVNfT1RIRVJTKCppbnRlcm5hbF9ldmVudF9udW0pKSB7CisJCXJldHVybiA2OworCX0KK2hhbmRsZV9mYWlsdXJlOgorCXdoaWxlIChpLS0gPiAwKQorCQlrZnJlZShjb25maWdfZW50cnlbaV0pOworZG9fZmFpbDoKIAlyZXR1cm4gLTE7CiB9CiAKQEAgLTczNiw1MCArNzEzLDM0IEBACiAJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBkYXRhKQogewogCWNoYXIgKmNvbmZpZ19yZWNvcmQgPSBOVUxMOwotCWNoYXIgKmJ1c19oYW5kbGUgPSBOVUxMOwotCWNoYXIgKmJ1c19tZXRob2QgPSBOVUxMOwotCWNoYXIgKmFjdGlvbl9oYW5kbGUgPSBOVUxMOwotCWNoYXIgKm1ldGhvZCA9IE5VTEw7CisJY2hhciAqY29uZmlnX2VudHJ5W0xBU1RfQ09ORl9FTlRSWV07CiAJaW50IGNtZCwgaW50ZXJuYWxfZXZlbnRfbnVtLCBleHRlcm5hbF9ldmVudF9udW07CiAJaW50IHJldCA9IDA7Ci0JdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9IE5VTEw7CisJdW5pb24gYWNwaV9ob3RrZXkgKmtleSA9IGt6YWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfaG90a2V5KSwgR0ZQX0tFUk5FTCk7CiAKLQotCWNvbmZpZ19yZWNvcmQgPSAoY2hhciAqKWttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNvbmZpZ19yZWNvcmQpCisJaWYgKCFrZXkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJY29uZmlnX3JlY29yZCA9IGt6YWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNvbmZpZ19yZWNvcmQpIHsKKwkJa2ZyZWUoa2V5KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCiAJaWYgKGNvcHlfZnJvbV91c2VyKGNvbmZpZ19yZWNvcmQsIGJ1ZmZlciwgY291bnQpKSB7CiAJCWtmcmVlKGNvbmZpZ19yZWNvcmQpOworCQlrZnJlZShrZXkpOwogCQlwcmludGsoS0VSTl9FUlIgUFJFRklYICJJbnZhbGlkIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY29uZmlnX3JlY29yZFtjb3VudF0gPSAwOwotCi0JcmV0ID0gZ2V0X3Bhcm1zKGNvbmZpZ19yZWNvcmQsCi0JCQkmY21kLAotCQkJJmJ1c19oYW5kbGUsCi0JCQkmYnVzX21ldGhvZCwKLQkJCSZhY3Rpb25faGFuZGxlLAotCQkJJm1ldGhvZCwgJmludGVybmFsX2V2ZW50X251bSwgJmV4dGVybmFsX2V2ZW50X251bSk7Ci0KKwlyZXQgPSBnZXRfcGFybXMoY29uZmlnX3JlY29yZCwgJmNtZCwgY29uZmlnX2VudHJ5LAorCQkgICAgICAgJmludGVybmFsX2V2ZW50X251bSwgJmV4dGVybmFsX2V2ZW50X251bSk7CiAJa2ZyZWUoY29uZmlnX3JlY29yZCk7Ci0JaWYgKElTX09USEVSUyhpbnRlcm5hbF9ldmVudF9udW0pKQotCQlnb3RvIGRvX2ZhaWw7CiAJaWYgKHJldCAhPSA2KSB7Ci0JICAgICAgZG9fZmFpbDoKLQkJa2ZyZWUoYnVzX2hhbmRsZSk7Ci0JCWtmcmVlKGJ1c19tZXRob2QpOwotCQlrZnJlZShhY3Rpb25faGFuZGxlKTsKLQkJa2ZyZWUobWV0aG9kKTsKIAkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBkYXRhIGZvcm1hdCByZXQ9JWRcbiIsIHJldCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWtleSA9IGttYWxsb2Moc2l6ZW9mKHVuaW9uIGFjcGlfaG90a2V5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFrZXkpCi0JCWdvdG8gZG9fZmFpbDsKLQltZW1zZXQoa2V5LCAwLCBzaXplb2YodW5pb24gYWNwaV9ob3RrZXkpKTsKIAlpZiAoY21kID09IDEpIHsKIAkJdW5pb24gYWNwaV9ob3RrZXkgKnRtcCA9IE5VTEw7CiAJCXRtcCA9IGdldF9ob3RrZXlfYnlfZXZlbnQoJmdsb2JhbF9ob3RrZXlfbGlzdCwKQEAgLTc5MSwzNCArNzUyLDE5IEBACiAJCWdvdG8gY29udF9jbWQ7CiAJfQogCWlmIChJU19FVkVOVChpbnRlcm5hbF9ldmVudF9udW0pKSB7Ci0JCWtmcmVlKGJ1c19tZXRob2QpOwotCQlyZXQgPSBpbml0X2hvdGtleV9kZXZpY2Uoa2V5LCBidXNfaGFuZGxlLCBhY3Rpb25faGFuZGxlLCBtZXRob2QsCi0JCQkJCSBpbnRlcm5hbF9ldmVudF9udW0sCi0JCQkJCSBleHRlcm5hbF9ldmVudF9udW0pOwotCX0gZWxzZQotCQlyZXQgPSBpbml0X3BvbGxfaG90a2V5X2RldmljZShrZXksIGJ1c19oYW5kbGUsIGJ1c19tZXRob2QsCi0JCQkJCSAgICAgIGFjdGlvbl9oYW5kbGUsIG1ldGhvZCwKLQkJCQkJICAgICAgaW50ZXJuYWxfZXZlbnRfbnVtKTsKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKGJ1c19oYW5kbGUpOwotCQlrZnJlZShhY3Rpb25faGFuZGxlKTsKLQkJaWYgKElTX0VWRU5UKGludGVybmFsX2V2ZW50X251bSkpCi0JCQlmcmVlX2hvdGtleV9idWZmZXIoa2V5KTsKLQkJZWxzZQotCQkJZnJlZV9wb2xsX2hvdGtleV9idWZmZXIoa2V5KTsKLQkJa2ZyZWUoa2V5KTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAiSW52YWxpZCBob3RrZXlcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGluaXRfaG90a2V5X2RldmljZShrZXksIGNvbmZpZ19lbnRyeSwKKwkJCWludGVybmFsX2V2ZW50X251bSwgZXh0ZXJuYWxfZXZlbnRfbnVtKSkKKwkJCWdvdG8gaW5pdF9ob3RrZXlfZmFpbDsKKwl9IGVsc2UgeworCQlpZiAoaW5pdF9wb2xsX2hvdGtleV9kZXZpY2Uoa2V5LCBjb25maWdfZW50cnksCisJCQkgICAgICAgaW50ZXJuYWxfZXZlbnRfbnVtKSkKKwkJCWdvdG8gaW5pdF9wb2xsX2hvdGtleV9mYWlsOwogCX0KLQotICAgICAgY29udF9jbWQ6Ci0Ja2ZyZWUoYnVzX2hhbmRsZSk7Ci0Ja2ZyZWUoYWN0aW9uX2hhbmRsZSk7Ci0KK2NvbnRfY21kOgogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSAwOgotCQlpZiAoZ2V0X2hvdGtleV9ieV9ldmVudAotCQkgICAgKCZnbG9iYWxfaG90a2V5X2xpc3QsIGtleS0+bGluay5ob3RrZXlfc3RhbmRhcmRfbnVtKSkKKwkJaWYgKGdldF9ob3RrZXlfYnlfZXZlbnQoJmdsb2JhbF9ob3RrZXlfbGlzdCwKKwkJCQlrZXktPmxpbmsuaG90a2V5X3N0YW5kYXJkX251bSkpCiAJCQlnb3RvIGZhaWxfb3V0OwogCQllbHNlCiAJCQlob3RrZXlfYWRkKGtleSk7CkBAIC04MjcsNiArNzczLDcgQEAKIAkJaG90a2V5X3JlbW92ZShrZXkpOwogCQlicmVhazsKIAljYXNlIDI6CisJCS8qIGtleSBpcyBrZnJlZSgpZWQgaWYgbWF0Y2hlZCovCiAJCWlmIChob3RrZXlfdXBkYXRlKGtleSkpCiAJCQlnb3RvIGZhaWxfb3V0OwogCQlicmVhazsKQEAgLTgzNSwxMSArNzgyLDIyIEBACiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gY291bnQ7Ci0gICAgICBmYWlsX291dDoKLQlpZiAoSVNfRVZFTlQoaW50ZXJuYWxfZXZlbnRfbnVtKSkKLQkJZnJlZV9ob3RrZXlfYnVmZmVyKGtleSk7Ci0JZWxzZQotCQlmcmVlX3BvbGxfaG90a2V5X2J1ZmZlcihrZXkpOworCitpbml0X3BvbGxfaG90a2V5X2ZhaWw6CQkvKiBmYWlsZWQgaW5pdF9wb2xsX2hvdGtleV9kZXZpY2UgKi8KKwlrZnJlZShjb25maWdfZW50cnlbYnVzX21ldGhvZF0pOworCWNvbmZpZ19lbnRyeVtidXNfbWV0aG9kXSA9IE5VTEw7Citpbml0X2hvdGtleV9mYWlsOgkJLyogZmFpbGVkIGluaXRfaG90a2V5X2RldmljZSAqLworCWtmcmVlKGNvbmZpZ19lbnRyeVttZXRob2RdKTsKK2ZhaWxfb3V0OgorCWtmcmVlKGNvbmZpZ19lbnRyeVtidXNfaGFuZGxlXSk7CisJa2ZyZWUoY29uZmlnX2VudHJ5W2FjdGlvbl9oYW5kbGVdKTsKKwkvKiBObyBkb3VibGUgZnJlZSBzaW5jZSBlbGVtZW50cyA9TlVMTCBmb3IgZXJyb3IgY2FzZXMgKi8KKwlpZiAoSVNfRVZFTlQoaW50ZXJuYWxfZXZlbnRfbnVtKSkgeworCQlpZiAoY29uZmlnX2VudHJ5W2J1c19tZXRob2RdKQorCQkJa2ZyZWUoY29uZmlnX2VudHJ5W2J1c19tZXRob2RdKTsKKwkJZnJlZV9ob3RrZXlfYnVmZmVyKGtleSk7CS8qIGZyZWVzIFttZXRob2RdICovCisJfSBlbHNlCisJCWZyZWVfcG9sbF9ob3RrZXlfYnVmZmVyKGtleSk7ICAvKiBmcmVlcyBbYnVzX21ldGhvZF0rW21ldGhvZF0gKi8KIAlrZnJlZShrZXkpOwogCXByaW50ayhLRVJOX0VSUiBQUkVGSVggImludmFsaWQga2V5XG4iKTsKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTkyMywxMCArODgxLDkgQEAKIAl1bmlvbiBhY3BpX2hvdGtleSAqa2V5OwogCiAKLQlhcmcgPSAoY2hhciAqKWttYWxsb2MoY291bnQgKyAxLCBHRlBfS0VSTkVMKTsKKwlhcmcgPSBremFsbG9jKGNvdW50ICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhcmcpCiAJCXJldHVybiAtRU5PTUVNOwotCWFyZ1tjb3VudF0gPSAwOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZywgYnVmZmVyLCBjb3VudCkpIHsKIAkJa2ZyZWUoYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9pMmNfZWMuYyBiL2RyaXZlcnMvYWNwaS9pMmNfZWMuYwppbmRleCA4NDIzOWQ1Li42ODA5YzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvaTJjX2VjLmMKKysrIGIvZHJpdmVycy9hY3BpL2kyY19lYy5jCkBAIC0zMzAsNyArMzMwLDcgQEAKIAlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZWNfaGMtPmhhbmRsZSwgIl9FQyIsIE5VTEwsICZ2YWwpOwogCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkgewogCQlBQ1BJX0RFQlVHX1BSSU5UKChBQ1BJX0RCX1dBUk4sICJFcnJvciBvYnRhaW5pbmcgX0VDXG4iKSk7Ci0JCWtmcmVlKGVjX2hjLT5zbWJ1cyk7CisJCWtmcmVlKGVjX2hjKTsKIAkJa2ZyZWUoc21idXMpOwogCQlyZXR1cm4gLUVJTzsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggYjdkMTUxNC4uNTA3ZjA1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtNzQ2LDYgKzc0NiwxNiBAQAogCUFDUElfREVCVUdfUFJJTlQoKEFDUElfREJfTVVURVgsICJXYWl0aW5nIGZvciBzZW1hcGhvcmVbJXB8JWR8JWRdXG4iLAogCQkJICBoYW5kbGUsIHVuaXRzLCB0aW1lb3V0KSk7CiAKKwkvKgorCSAqIFRoaXMgY2FuIGJlIGNhbGxlZCBkdXJpbmcgcmVzdW1lIHdpdGggaW50ZXJydXB0cyBvZmYuCisJICogTGlrZSBib290LXRpbWUsIHdlIHNob3VsZCBiZSBzaW5nbGUgdGhyZWFkZWQgYW5kIHdpbGwKKwkgKiBhbHdheXMgZ2V0IHRoZSBsb2NrIGlmIHdlIHRyeSAtLSB0aW1lb3V0IG9yIG5vdC4KKwkgKiBJZiB0aGlzIGRvZXNuJ3Qgc3VjY2VlZCwgdGhlbiB3ZSB3aWxsIG9vcHMgY291cnRlc3kgb2YKKwkgKiBtaWdodF9zbGVlcCgpIGluIGRvd24oKS4KKwkgKi8KKwlpZiAoIWRvd25fdHJ5bG9jayhzZW0pKQorCQlyZXR1cm4gQUVfT0s7CisKIAlzd2l0Y2ggKHRpbWVvdXQpIHsKIAkJLyoKIAkJICogTm8gV2FpdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9zYnMuYyBiL2RyaXZlcnMvYWNwaS9zYnMuYwppbmRleCBkYjdiMzUwLi42MmJlZjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvc2JzLmMKKysrIGIvZHJpdmVycy9hY3BpL3Nicy5jCkBAIC0xNzE0LDYgKzE3MTQsOSBAQAogewogCWludCByZXN1bHQgPSAwOwogCisJaWYgKGFjcGlfZGlzYWJsZWQpCisJCXJldHVybiAtRU5PREVWOworCiAJaW5pdF9NVVRFWCgmc2JzX3NlbSk7CiAKIAlpZiAoY2FwYWNpdHlfbW9kZSAhPSBERUZfQ0FQQUNJVFlfVU5JVApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3NjYW4uYyBiL2RyaXZlcnMvYWNwaS9zY2FuLmMKaW5kZXggNWZjYjUwYy4uNjk4YTE1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3NjYW4uYworKysgYi9kcml2ZXJzL2FjcGkvc2Nhbi5jCkBAIC00LDYgKzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KIAogI2luY2x1ZGUgPGFjcGkvYWNwaV9kcml2ZXJzLmg+CkBAIC0xMTMsNiArMTE0LDggQEAKIHN0YXRpYyB2b2lkIGFjcGlfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLAogCQkJCSBzdHJ1Y3QgYWNwaV9kZXZpY2UgKnBhcmVudCkKIHsKKwlpbnQgZXJyOworCiAJLyoKIAkgKiBMaW5rYWdlCiAJICogLS0tLS0tLQpAQCAtMTM4LDcgKzE0MSwxMCBAQAogCQlkZXZpY2UtPmtvYmoucGFyZW50ID0gJnBhcmVudC0+a29iajsKIAlkZXZpY2UtPmtvYmoua3R5cGUgPSAma3R5cGVfYWNwaV9uczsKIAlkZXZpY2UtPmtvYmoua3NldCA9ICZhY3BpX25hbWVzcGFjZV9rc2V0OwotCWtvYmplY3RfcmVnaXN0ZXIoJmRldmljZS0+a29iaik7CisJZXJyID0ga29iamVjdF9yZWdpc3RlcigmZGV2aWNlLT5rb2JqKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGtvYmplY3RfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBlcnIpOwogCWNyZWF0ZV9zeXNmc19kZXZpY2VfZmlsZXMoZGV2aWNlKTsKIH0KIApAQCAtMTQ1MCw3ICsxNDU2LDkgQEAKIAlpZiAoYWNwaV9kaXNhYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlrc2V0X3JlZ2lzdGVyKCZhY3BpX25hbWVzcGFjZV9rc2V0KTsKKwlyZXN1bHQgPSBrc2V0X3JlZ2lzdGVyKCZhY3BpX25hbWVzcGFjZV9rc2V0KTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSIFBSRUZJWCAia3NldF9yZWdpc3RlciBlcnJvcjogJWRcbiIsIHJlc3VsdCk7CiAKIAlyZXN1bHQgPSBidXNfcmVnaXN0ZXIoJmFjcGlfYnVzX3R5cGUpOwogCWlmIChyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS91dGlscy5jIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKaW5kZXggZjQ4MjI3Zi4uZDBkODRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3V0aWxzLmMKKysrIGIvZHJpdmVycy9hY3BpL3V0aWxzLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogCWlmICghZGF0YSkKIAkJcmV0dXJuIEFFX0JBRF9QQVJBTUVURVI7CiAKLQllbGVtZW50ID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBHRlBfS0VSTkVMKTsKKwllbGVtZW50ID0ga21hbGxvYyhzaXplb2YodW5pb24gYWNwaV9vYmplY3QpLCBpcnFzX2Rpc2FibGVkKCkgPyBHRlBfQVRPTUlDOiBHRlBfS0VSTkVMKTsKIAlpZiAoIWVsZW1lbnQpCiAJCXJldHVybiBBRV9OT19NRU1PUlk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2hlLmMgYi9kcml2ZXJzL2F0bS9oZS5jCmluZGV4IGQzNjkxMzAuLmZmY2I5ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2hlLmMKKysrIGIvZHJpdmVycy9hdG0vaGUuYwpAQCAtMTkyOCw3ICsxOTI4LDkgQEAKICNpZmRlZiBub3RkZWYKIAkJQVRNX1NLQihza2IpLT52Y2MgPSB2Y2M7CiAjZW5kaWYKKwkJc3Bpbl91bmxvY2soJmhlX2Rldi0+Z2xvYmFsX2xvY2spOwogCQl2Y2MtPnB1c2godmNjLCBza2IpOworCQlzcGluX2xvY2soJmhlX2Rldi0+Z2xvYmFsX2xvY2spOwogCiAJCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4KTsKIApAQCAtMjI4Miw2ICsyMjg0LDggQEAKIAkJCQlUUERSUV9NQVNLKGhlX3JlYWRsKGhlX2RldiwgVFBEUlFfQl9IKSkpOwogCiAJCWlmIChuZXdfdGFpbCA9PSBoZV9kZXYtPnRwZHJxX2hlYWQpIHsKKwkJCWludCBzbG90OworCiAJCQlocHJpbnRrKCJ0cGRycSBmdWxsIChjaWQgMHgleClcbiIsIGNpZCk7CiAJCQkvKgogCQkJICogRklYTUUKQEAgLTIyODksNiArMjI5MywxMyBAQAogCQkJICogYWZ0ZXIgc2VydmljZV90YnJxLCBzZXJ2aWNlIHRoZSBiYWNrbG9nCiAJCQkgKiBmb3Igbm93LCB3ZSBqdXN0IGRyb3AgdGhlIHBkdQogCQkJICovCisJCQlmb3IgKHNsb3QgPSAwOyBzbG90IDwgVFBEX01BWElPVjsgKytzbG90KSB7CisJCQkJaWYgKHRwZC0+aW92ZWNbc2xvdF0uYWRkcikKKwkJCQkJcGNpX3VubWFwX3NpbmdsZShoZV9kZXYtPnBjaV9kZXYsCisJCQkJCQl0cGQtPmlvdmVjW3Nsb3RdLmFkZHIsCisJCQkJCQl0cGQtPmlvdmVjW3Nsb3RdLmxlbiAmIFRQRF9MRU5fTUFTSywKKwkJCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQl9CiAJCQlpZiAodHBkLT5za2IpIHsKIAkJCQlpZiAodHBkLT52Y2MtPnBvcCkKIAkJCQkJdHBkLT52Y2MtPnBvcCh0cGQtPnZjYywgdHBkLT5za2IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2h5cGVydmlzb3IuYyBiL2RyaXZlcnMvYmFzZS9oeXBlcnZpc29yLmMKaW5kZXggMGM4NWU5ZC4uNzA4MGI0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2h5cGVydmlzb3IuYworKysgYi9kcml2ZXJzL2Jhc2UvaHlwZXJ2aXNvci5jCkBAIC0xLDggKzEsOSBAQAogLyoKICAqIGh5cGVydmlzb3IuYyAtIC9zeXMvaHlwZXJ2aXNvciBzdWJzeXN0ZW0uCiAgKgotICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNgogICoKKyAqIFRoaXMgZmlsZSBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIKICAqLwogCiAjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggZDdkZTE3NTMuLmU5YjA5NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9ub2RlLmMKKysrIGIvZHJpdmVycy9iYXNlL25vZGUuYwpAQCAtNjQsNyArNjQsNyBAQAogCQkgICAgICAgIk5vZGUgJWQgTWFwcGVkOiAgICAgICAlOGx1IGtCXG4iCiAJCSAgICAgICAiTm9kZSAlZCBBbm9uUGFnZXM6ICAgICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIFBhZ2VUYWJsZXM6ICAgJThsdSBrQlxuIgotCQkgICAgICAgIk5vZGUgJWQgTkZTIFVuc3RhYmxlOiAlOGx1IGtCXG4iCisJCSAgICAgICAiTm9kZSAlZCBORlNfVW5zdGFibGU6ICU4bHUga0JcbiIKIAkJICAgICAgICJOb2RlICVkIEJvdW5jZTogICAgICAgJThsdSBrQlxuIgogCQkgICAgICAgIk5vZGUgJWQgU2xhYjogICAgICAgICAlOGx1IGtCXG4iLAogCQkgICAgICAgbmlkLCBLKGkudG90YWxyYW0pLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3RvcG9sb2d5LmMgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwppbmRleCBjMmQ2MjE2Li4zZWY5ZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYworKysgYi9kcml2ZXJzL2Jhc2UvdG9wb2xvZ3kuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJCQkJKHZvaWQgKikobG9uZylpKTsKIAl9CiAKLQlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnRvcG9sb2d5X2NwdV9ub3RpZmllcik7CisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZ0b3BvbG9neV9jcHVfbm90aWZpZXIpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKaW5kZXggN2IwZWNhNy4uMmNkMzM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jY2lzcy5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3MuYwpAQCAtNDgsMTQgKzQ4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCiAjZGVmaW5lIENDSVNTX0RSSVZFUl9WRVJTSU9OKG1haixtaW4sc3VibWluKSAoKG1hajw8MTYpfChtaW48PDgpfChzdWJtaW4pKQotI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgQ0lTUyBEcml2ZXIgKHYgMi42LjEwKSIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gQ0NJU1NfRFJJVkVSX1ZFUlNJT04oMiw2LDEwKQorI2RlZmluZSBEUklWRVJfTkFNRSAiSFAgQ0lTUyBEcml2ZXIgKHYgMy42LjEwKSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gQ0NJU1NfRFJJVkVSX1ZFUlNJT04oMyw2LDEwKQogCiAvKiBFbWJlZGRlZCBtb2R1bGUgZG9jdW1lbnRhdGlvbiBtYWNyb3MgLSBzZWUgbW9kdWxlcy5oICovCiBNT0RVTEVfQVVUSE9SKCJIZXdsZXR0LVBhY2thcmQgQ29tcGFueSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEhQIENvbnRyb2xsZXIgU0E1eHh4IFNBNnh4eCB2ZXJzaW9uIDIuNi4xMCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIEhQIENvbnRyb2xsZXIgU0E1eHh4IFNBNnh4eCB2ZXJzaW9uIDMuNi4xMCIpOwogTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoIkhQIFNBNWkgU0E1aSsgU0E1MzIgU0E1MzAwIFNBNTMxMiBTQTY0MSBTQTY0MiBTQTY0MDAiCi0JCQkiIFNBNmkgUDYwMCBQODAwIFA0MDAgUDQwMGkgRTIwMCBFMjAwaSIpOworCQkJIiBTQTZpIFA2MDAgUDgwMCBQNDAwIFA0MDBpIEUyMDAgRTIwMGkgRTUwMCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaW5jbHVkZSAiY2Npc3NfY21kLmgiCkBAIC04Miw2ICs4Miw3IEBACiAJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NELCAgICAgMHgxMDNDLCAweDMyMTN9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCAgICAgUENJX0RFVklDRV9JRF9IUF9DSVNTRCwgICAgIDB4MTAzQywgMHgzMjE0fSwKIAl7UENJX1ZFTkRPUl9JRF9IUCwgICAgIFBDSV9ERVZJQ0VfSURfSFBfQ0lTU0QsICAgICAweDEwM0MsIDB4MzIxNX0sCisJe1BDSV9WRU5ET1JfSURfSFAsICAgICBQQ0lfREVWSUNFX0lEX0hQX0NJU1NDLCAgICAgMHgxMDNDLCAweDMyMzN9LAogCXswLH0KIH07CiAKQEAgLTExMCw2ICsxMTEsNyBAQAogCXsweDMyMTMxMDNDLCAiU21hcnQgQXJyYXkgRTIwMGkiLCAmU0E1X2FjY2Vzc30sCiAJezB4MzIxNDEwM0MsICJTbWFydCBBcnJheSBFMjAwaSIsICZTQTVfYWNjZXNzfSwKIAl7MHgzMjE1MTAzQywgIlNtYXJ0IEFycmF5IEUyMDBpIiwgJlNBNV9hY2Nlc3N9LAorCXsweDMyMzMxMDNDLCAiU21hcnQgQXJyYXkgRTUwMCIsICZTQTVfYWNjZXNzfSwKIH07CiAKIC8qIEhvdyBsb25nIHRvIHdhaXQgKGluIG1pbGxpc2Vjb25kcykgZm9yIGJvYXJkIHRvIGdvIGludG8gc2ltcGxlIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY3J5cHRvbG9vcC5jIGIvZHJpdmVycy9ibG9jay9jcnlwdG9sb29wLmMKaW5kZXggM2Q0MjYxYy4uNDA1MzUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9jcnlwdG9sb29wLmMKKysrIGIvZHJpdmVycy9ibG9jay9jcnlwdG9sb29wLmMKQEAgLTQwLDExICs0MCwxMyBAQAogY3J5cHRvbG9vcF9pbml0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGNvbnN0IHN0cnVjdCBsb29wX2luZm82NCAqaW5mbykKIHsKIAlpbnQgZXJyID0gLUVJTlZBTDsKKwlpbnQgY2lwaGVyX2xlbjsKKwlpbnQgbW9kZV9sZW47CiAJY2hhciBjbXNbTE9fTkFNRV9TSVpFXTsJCQkvKiBjaXBoZXItbW9kZSBzdHJpbmcgKi8KIAljaGFyICpjaXBoZXI7CiAJY2hhciAqbW9kZTsKIAljaGFyICpjbXNwID0gY21zOwkJCS8qIGMtbSBzdHJpbmcgcG9pbnRlciAqLwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBOVUxMOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm07CiAKIAkvKiBlbmNyeXB0aW9uIGJyZWFrcyBmb3Igbm9uIHNlY3RvciBhbGlnbmVkIG9mZnNldHMgKi8KIApAQCAtNTMsMjAgKzU1LDM5IEBACiAKIAlzdHJuY3B5KGNtcywgaW5mby0+bG9fY3J5cHRfbmFtZSwgTE9fTkFNRV9TSVpFKTsKIAljbXNbTE9fTkFNRV9TSVpFIC0gMV0gPSAwOwotCWNpcGhlciA9IHN0cnNlcCgmY21zcCwgIi0iKTsKLQltb2RlID0gc3Ryc2VwKCZjbXNwLCAiLSIpOwogCi0JaWYgKG1vZGUgPT0gTlVMTCB8fCBzdHJjbXAobW9kZSwgImNiYyIpID09IDApCi0JCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oY2lwaGVyLCBDUllQVE9fVEZNX01PREVfQ0JDIHwKLQkJCQkJICAgICAgIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCk7Ci0JZWxzZSBpZiAoc3RyY21wKG1vZGUsICJlY2IiKSA9PSAwKQotCQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGNpcGhlciwgQ1JZUFRPX1RGTV9NT0RFX0VDQiB8Ci0JCQkJCSAgICAgICBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVApOwotCWlmICh0Zm0gPT0gTlVMTCkKKwljaXBoZXIgPSBjbXNwOworCWNpcGhlcl9sZW4gPSBzdHJjc3BuKGNtc3AsICItIik7CisKKwltb2RlID0gY21zcCArIGNpcGhlcl9sZW47CisJbW9kZV9sZW4gPSAwOworCWlmICgqbW9kZSkgeworCQltb2RlKys7CisJCW1vZGVfbGVuID0gc3RyY3Nwbihtb2RlLCAiLSIpOworCX0KKworCWlmICghbW9kZV9sZW4pIHsKKwkJbW9kZSA9ICJjYmMiOworCQltb2RlX2xlbiA9IDM7CisJfQorCisJaWYgKGNpcGhlcl9sZW4gKyBtb2RlX2xlbiArIDMgPiBMT19OQU1FX1NJWkUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZXJyID0gdGZtLT5jcnRfdS5jaXBoZXIuY2l0X3NldGtleSh0Zm0sIGluZm8tPmxvX2VuY3J5cHRfa2V5LAotCQkJCQkgICBpbmZvLT5sb19lbmNyeXB0X2tleV9zaXplKTsKKwltZW1tb3ZlKGNtcywgbW9kZSwgbW9kZV9sZW4pOworCWNtc3AgPSBjbXMgKyBtb2RlX2xlbjsKKwkqY21zcCsrID0gJygnOworCW1lbWNweShjbXNwLCBpbmZvLT5sb19jcnlwdF9uYW1lLCBjaXBoZXJfbGVuKTsKKwljbXNwICs9IGNpcGhlcl9sZW47CisJKmNtc3ArKyA9ICcpJzsKKwkqY21zcCA9IDA7CisKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKGNtcywgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm0pKQorCQlyZXR1cm4gUFRSX0VSUih0Zm0pOworCisJZXJyID0gY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkodGZtLCBpbmZvLT5sb19lbmNyeXB0X2tleSwKKwkJCQkgICAgICBpbmZvLT5sb19lbmNyeXB0X2tleV9zaXplKTsKIAkKIAlpZiAoZXJyICE9IDApCiAJCWdvdG8gb3V0X2ZyZWVfdGZtOwpAQCAtNzUsOTkgKzk2LDQ5IEBACiAJcmV0dXJuIDA7CiAKICBvdXRfZnJlZV90Zm06Ci0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7CiAKICBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KIAogCi10eXBlZGVmIGludCAoKmVuY2RlY19lY2JfdCkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKK3R5cGVkZWYgaW50ICgqZW5jZGVjX2NiY190KShzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX291dCwKIAkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfaW4sCiAJCQl1bnNpZ25lZCBpbnQgbnNnKTsKIAotCiBzdGF0aWMgaW50Ci1jcnlwdG9sb29wX3RyYW5zZmVyX2VjYihzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgY21kLAotCQkJc3RydWN0IHBhZ2UgKnJhd19wYWdlLCB1bnNpZ25lZCByYXdfb2ZmLAotCQkJc3RydWN0IHBhZ2UgKmxvb3BfcGFnZSwgdW5zaWduZWQgbG9vcF9vZmYsCi0JCQlpbnQgc2l6ZSwgc2VjdG9yX3QgSVYpCitjcnlwdG9sb29wX3RyYW5zZmVyKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBjbWQsCisJCSAgICBzdHJ1Y3QgcGFnZSAqcmF3X3BhZ2UsIHVuc2lnbmVkIHJhd19vZmYsCisJCSAgICBzdHJ1Y3QgcGFnZSAqbG9vcF9wYWdlLCB1bnNpZ25lZCBsb29wX29mZiwKKwkJICAgIGludCBzaXplLCBzZWN0b3JfdCBJVikKIHsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gKHN0cnVjdCBjcnlwdG9fdGZtICopIGxvLT5rZXlfZGF0YTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfb3V0ID0geyBOVUxMLCB9OwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pbiA9IHsgTlVMTCwgfTsKLQotCWVuY2RlY19lY2JfdCBlbmNkZWNmdW5jOwotCXN0cnVjdCBwYWdlICppbl9wYWdlLCAqb3V0X3BhZ2U7Ci0JdW5zaWduZWQgaW5fb2Zmcywgb3V0X29mZnM7Ci0KLQlpZiAoY21kID09IFJFQUQpIHsKLQkJaW5fcGFnZSA9IHJhd19wYWdlOwotCQlpbl9vZmZzID0gcmF3X29mZjsKLQkJb3V0X3BhZ2UgPSBsb29wX3BhZ2U7Ci0JCW91dF9vZmZzID0gbG9vcF9vZmY7Ci0JCWVuY2RlY2Z1bmMgPSB0Zm0tPmNydF91LmNpcGhlci5jaXRfZGVjcnlwdDsKLQl9IGVsc2UgewotCQlpbl9wYWdlID0gbG9vcF9wYWdlOwotCQlpbl9vZmZzID0gbG9vcF9vZmY7Ci0JCW91dF9wYWdlID0gcmF3X3BhZ2U7Ci0JCW91dF9vZmZzID0gcmF3X29mZjsKLQkJZW5jZGVjZnVuYyA9IHRmbS0+Y3J0X3UuY2lwaGVyLmNpdF9lbmNyeXB0OwotCX0KLQotCXdoaWxlIChzaXplID4gMCkgewotCQljb25zdCBpbnQgc3ogPSBtaW4oc2l6ZSwgTE9PUF9JVl9TRUNUT1JfU0laRSk7Ci0KLQkJc2dfaW4ucGFnZSA9IGluX3BhZ2U7Ci0JCXNnX2luLm9mZnNldCA9IGluX29mZnM7Ci0JCXNnX2luLmxlbmd0aCA9IHN6OwotCi0JCXNnX291dC5wYWdlID0gb3V0X3BhZ2U7Ci0JCXNnX291dC5vZmZzZXQgPSBvdXRfb2ZmczsKLQkJc2dfb3V0Lmxlbmd0aCA9IHN6OwotCi0JCWVuY2RlY2Z1bmModGZtLCAmc2dfb3V0LCAmc2dfaW4sIHN6KTsKLQotCQlzaXplIC09IHN6OwotCQlpbl9vZmZzICs9IHN6OwotCQlvdXRfb2ZmcyArPSBzejsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotdHlwZWRlZiBpbnQgKCplbmNkZWNfY2JjX3QpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0JCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnX291dCwKLQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dfaW4sCi0JCQl1bnNpZ25lZCBpbnQgbnNnLCB1OCAqaXYpOwotCi1zdGF0aWMgaW50Ci1jcnlwdG9sb29wX3RyYW5zZmVyX2NiYyhzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgY21kLAotCQkJc3RydWN0IHBhZ2UgKnJhd19wYWdlLCB1bnNpZ25lZCByYXdfb2ZmLAotCQkJc3RydWN0IHBhZ2UgKmxvb3BfcGFnZSwgdW5zaWduZWQgbG9vcF9vZmYsCi0JCQlpbnQgc2l6ZSwgc2VjdG9yX3QgSVYpCi17Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IChzdHJ1Y3QgY3J5cHRvX3RmbSAqKSBsby0+a2V5X2RhdGE7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSA9IGxvLT5rZXlfZGF0YTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsKKwkJLnRmbSA9IHRmbSwKKwkJLmZsYWdzID0gQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQLAorCX07CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX291dCA9IHsgTlVMTCwgfTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dfaW4gPSB7IE5VTEwsIH07CiAKIAllbmNkZWNfY2JjX3QgZW5jZGVjZnVuYzsKIAlzdHJ1Y3QgcGFnZSAqaW5fcGFnZSwgKm91dF9wYWdlOwogCXVuc2lnbmVkIGluX29mZnMsIG91dF9vZmZzOworCWludCBlcnI7CiAKIAlpZiAoY21kID09IFJFQUQpIHsKIAkJaW5fcGFnZSA9IHJhd19wYWdlOwogCQlpbl9vZmZzID0gcmF3X29mZjsKIAkJb3V0X3BhZ2UgPSBsb29wX3BhZ2U7CiAJCW91dF9vZmZzID0gbG9vcF9vZmY7Ci0JCWVuY2RlY2Z1bmMgPSB0Zm0tPmNydF91LmNpcGhlci5jaXRfZGVjcnlwdF9pdjsKKwkJZW5jZGVjZnVuYyA9IGNyeXB0b19ibGtjaXBoZXJfY3J0KHRmbSktPmRlY3J5cHQ7CiAJfSBlbHNlIHsKIAkJaW5fcGFnZSA9IGxvb3BfcGFnZTsKIAkJaW5fb2ZmcyA9IGxvb3Bfb2ZmOwogCQlvdXRfcGFnZSA9IHJhd19wYWdlOwogCQlvdXRfb2ZmcyA9IHJhd19vZmY7Ci0JCWVuY2RlY2Z1bmMgPSB0Zm0tPmNydF91LmNpcGhlci5jaXRfZW5jcnlwdF9pdjsKKwkJZW5jZGVjZnVuYyA9IGNyeXB0b19ibGtjaXBoZXJfY3J0KHRmbSktPmVuY3J5cHQ7CiAJfQogCiAJd2hpbGUgKHNpemUgPiAwKSB7CkBAIC0xODMsNyArMTU0LDEwIEBACiAJCXNnX291dC5vZmZzZXQgPSBvdXRfb2ZmczsKIAkJc2dfb3V0Lmxlbmd0aCA9IHN6OwogCi0JCWVuY2RlY2Z1bmModGZtLCAmc2dfb3V0LCAmc2dfaW4sIHN6LCAodTggKilpdik7CisJCWRlc2MuaW5mbyA9IGl2OworCQllcnIgPSBlbmNkZWNmdW5jKCZkZXNjLCAmc2dfb3V0LCAmc2dfaW4sIHN6KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CiAKIAkJSVYrKzsKIAkJc2l6ZSAtPSBzejsKQEAgLTE5NSwzMiArMTY5LDYgQEAKIH0KIAogc3RhdGljIGludAotY3J5cHRvbG9vcF90cmFuc2ZlcihzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvLCBpbnQgY21kLAotCQkgICAgc3RydWN0IHBhZ2UgKnJhd19wYWdlLCB1bnNpZ25lZCByYXdfb2ZmLAotCQkgICAgc3RydWN0IHBhZ2UgKmxvb3BfcGFnZSwgdW5zaWduZWQgbG9vcF9vZmYsCi0JCSAgICBpbnQgc2l6ZSwgc2VjdG9yX3QgSVYpCi17Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IChzdHJ1Y3QgY3J5cHRvX3RmbSAqKSBsby0+a2V5X2RhdGE7Ci0JaWYodGZtLT5jcnRfY2lwaGVyLmNpdF9tb2RlID09IENSWVBUT19URk1fTU9ERV9FQ0IpCi0JewotCQlsby0+dHJhbnNmZXIgPSBjcnlwdG9sb29wX3RyYW5zZmVyX2VjYjsKLQkJcmV0dXJuIGNyeXB0b2xvb3BfdHJhbnNmZXJfZWNiKGxvLCBjbWQsIHJhd19wYWdlLCByYXdfb2ZmLAotCQkJCQkgICAgICAgbG9vcF9wYWdlLCBsb29wX29mZiwgc2l6ZSwgSVYpOwotCX0JCi0JaWYodGZtLT5jcnRfY2lwaGVyLmNpdF9tb2RlID09IENSWVBUT19URk1fTU9ERV9DQkMpCi0JewkKLQkJbG8tPnRyYW5zZmVyID0gY3J5cHRvbG9vcF90cmFuc2Zlcl9jYmM7Ci0JCXJldHVybiBjcnlwdG9sb29wX3RyYW5zZmVyX2NiYyhsbywgY21kLCByYXdfcGFnZSwgcmF3X29mZiwKLQkJCQkJICAgICAgIGxvb3BfcGFnZSwgbG9vcF9vZmYsIHNpemUsIElWKTsKLQl9Ci0JCi0JLyogIFRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlbiAqLwotCi0JcHJpbnRrKCBLRVJOX0VSUiAiY3J5cHRvbG9vcDogdW5zdXBwb3J0ZWQgY2lwaGVyIG1vZGUgaW4gY3J5cHRvbG9vcF90cmFuc2ZlciFcbiIpOwotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50CiBjcnlwdG9sb29wX2lvY3RsKHN0cnVjdCBsb29wX2RldmljZSAqbG8sIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiAtRUlOVkFMOwpAQCAtMjI5LDkgKzE3Nyw5IEBACiBzdGF0aWMgaW50CiBjcnlwdG9sb29wX3JlbGVhc2Uoc3RydWN0IGxvb3BfZGV2aWNlICpsbykKIHsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gKHN0cnVjdCBjcnlwdG9fdGZtICopIGxvLT5rZXlfZGF0YTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtID0gbG8tPmtleV9kYXRhOwogCWlmICh0Zm0gIT0gTlVMTCkgewotCQljcnlwdG9fZnJlZV90Zm0odGZtKTsKKwkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7CiAJCWxvLT5rZXlfZGF0YSA9IE5VTEw7CiAJCXJldHVybiAwOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCmluZGV4IDUxMDlmYTMuLmFkMWQ3MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKKysrIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwpAQCAtNDE3Nyw2ICs0MTc3LDExIEBACiAJaW50IGksIHVuaXQsIGRyaXZlOwogCWludCBlcnIsIGRyOwogCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KEZEQzEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKyNlbmRpZgorCiAJcmF3X2NtZCA9IE5VTEw7CiAKIAlmb3IgKGRyID0gMDsgZHIgPCBOX0RSSVZFOyBkcisrKSB7CkBAIC00MjM0LDEzICs0MjM5LDYgQEAKIAl9CiAKIAl1c2VfdmlydHVhbF9kbWEgPSBjYW5fdXNlX3ZpcnR1YWxfZG1hICYgMTsKLSNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCi0JaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoRkRDMSkpIHsKLQkJZGVsX3RpbWVyKCZmZF90aW1lb3V0KTsKLQkJZXJyID0gLUVOT0RFVjsKLQkJZ290byBvdXRfdW5yZWdfcmVnaW9uOwotCX0KLSNlbmRpZgogCWZkY19zdGF0ZVswXS5hZGRyZXNzID0gRkRDMTsKIAlpZiAoZmRjX3N0YXRlWzBdLmFkZHJlc3MgPT0gLTEpIHsKIAkJZGVsX3RpbWVyKCZmZF90aW1lb3V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svbmJkLmMgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCmluZGV4IDBhMWIxZWEuLmJkYmFkZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbmJkLmMKKysrIGIvZHJpdmVycy9ibG9jay9uYmQuYwpAQCAtMzAwLDYgKzMwMCwxNSBAQAogCQkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIHJlc3VsdCk7CiAJCWdvdG8gaGFyZGVycm9yOwogCX0KKworCWlmIChudG9obChyZXBseS5tYWdpYykgIT0gTkJEX1JFUExZX01BR0lDKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IFdyb25nIG1hZ2ljICgweCVseClcbiIsCisJCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwKKwkJCQkodW5zaWduZWQgbG9uZyludG9obChyZXBseS5tYWdpYykpOworCQlyZXN1bHQgPSAtRVBST1RPOworCQlnb3RvIGhhcmRlcnJvcjsKKwl9CisKIAlyZXEgPSBuYmRfZmluZF9yZXF1ZXN0KGxvLCByZXBseS5oYW5kbGUpOwogCWlmICh1bmxpa2VseShJU19FUlIocmVxKSkpIHsKIAkJcmVzdWx0ID0gUFRSX0VSUihyZXEpOwpAQCAtMzEyLDEzICszMjEsNiBAQAogCQlnb3RvIGhhcmRlcnJvcjsKIAl9CiAKLQlpZiAobnRvaGwocmVwbHkubWFnaWMpICE9IE5CRF9SRVBMWV9NQUdJQykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBXcm9uZyBtYWdpYyAoMHglbHgpXG4iLAotCQkJCWxvLT5kaXNrLT5kaXNrX25hbWUsCi0JCQkJKHVuc2lnbmVkIGxvbmcpbnRvaGwocmVwbHkubWFnaWMpKTsKLQkJcmVzdWx0ID0gLUVQUk9UTzsKLQkJZ290byBoYXJkZXJyb3I7Ci0JfQogCWlmIChudG9obChyZXBseS5lcnJvcikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogT3RoZXIgc2lkZSByZXR1cm5lZCBlcnJvciAoJWQpXG4iLAogCQkJCWxvLT5kaXNrLT5kaXNrX25hbWUsIG50b2hsKHJlcGx5LmVycm9yKSk7CkBAIC0zMzksNyArMzQxLDggQEAKIAkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmVjZWl2ZSBkYXRhIGZhaWxlZCAocmVzdWx0ICVkKVxuIiwKIAkJCQkJCQlsby0+ZGlzay0+ZGlza19uYW1lLAogCQkJCQkJCXJlc3VsdCk7Ci0JCQkJCWdvdG8gaGFyZGVycm9yOworCQkJCQlyZXEtPmVycm9ycysrOworCQkJCQlyZXR1cm4gcmVxOwogCQkJCX0KIAkJCQlkcHJpbnRrKERCR19SWCwgIiVzOiByZXF1ZXN0ICVwOiBnb3QgJWQgYnl0ZXMgZGF0YVxuIiwKIAkJCQkJbG8tPmRpc2stPmRpc2tfbmFtZSwgcmVxLCBidmVjLT5idl9sZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwppbmRleCBiZGUyYzY0Li40NTFiOTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYwpAQCAtMjU3NywxOSArMjU3NywxOSBAQAogCWNhc2UgUEtUX0NUUkxfQ01EX1NFVFVQOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwotCQltdXRleF9sb2NrKCZjdGxfbXV0ZXgpOworCQltdXRleF9sb2NrX25lc3RlZCgmY3RsX211dGV4LCBTSU5HTEVfREVQVEhfTkVTVElORyk7CiAJCXJldCA9IHBrdF9zZXR1cF9kZXYoJmN0cmxfY21kKTsKIAkJbXV0ZXhfdW5sb2NrKCZjdGxfbXV0ZXgpOwogCQlicmVhazsKIAljYXNlIFBLVF9DVFJMX0NNRF9URUFSRE9XTjoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0bF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCQlyZXQgPSBwa3RfcmVtb3ZlX2RldigmY3RybF9jbWQpOwogCQltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CiAJCWJyZWFrOwogCWNhc2UgUEtUX0NUUkxfQ01EX1NUQVRVUzoKLQkJbXV0ZXhfbG9jaygmY3RsX211dGV4KTsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJmN0bF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCQlwa3RfZ2V0X3N0YXR1cygmY3RybF9jbWQpOwogCQltdXRleF91bmxvY2soJmN0bF9tdXRleCk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9nc2NkLmMgYi9kcml2ZXJzL2Nkcm9tL2dzY2QuYwppbmRleCBiNmVlNTBhLi5mYTcwODI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL2dzY2QuYworKysgYi9kcml2ZXJzL2Nkcm9tL2dzY2QuYwpAQCAtMjY2LDcgKzI2Niw3IEBACiAJCWdvdG8gb3V0OwogCiAJaWYgKHJlcS0+Y21kICE9IFJFQUQpIHsKLQkJcHJpbnRrKCJHU0NEOiBiYWQgY21kICVsdVxuIiwgcnFfZGF0YV9kaXIocmVxKSk7CisJCXByaW50aygiR1NDRDogYmFkIGNtZCAldVxuIiwgcnFfZGF0YV9kaXIocmVxKSk7CiAJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CiAJCWdvdG8gcmVwZWF0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9LY29uZmlnIGIvZHJpdmVycy9jaGFyL0tjb25maWcKaW5kZXggYzQwZTQ4Ny4uNTJlYTk0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL0tjb25maWcKKysrIGIvZHJpdmVycy9jaGFyL0tjb25maWcKQEAgLTQ5NSw2ICs0OTUsMjEgQEAKIAkgIFdoZW4gbm90IGluIHVzZSwgZWFjaCBsZWdhY3kgUFRZIG9jY3VwaWVzIDEyIGJ5dGVzIG9uIDMyLWJpdAogCSAgYXJjaGl0ZWN0dXJlcyBhbmQgMjQgYnl0ZXMgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMuCiAKK2NvbmZpZyBCUklRX1BBTkVMCisJdHJpc3RhdGUgJ1RvdGFsIEltcGFjdCBicmlRIGZyb250IHBhbmVsIGRyaXZlcicKKwlkZXBlbmRzIG9uIFBQQ19DSFJQCisJLS0taGVscC0tLQorCSAgVGhlIGJyaVEgaXMgYSBzbWFsbCBmb290cHJpbnQgQ0hSUCBjb21wdXRlciB3aXRoIGEgZnJvbnRwYW5lbCBWRkQsIGEKKwkgIHRyaXN0YXRlIGxlZCBhbmQgdHdvIHN3aXRjaGVzLiBJdCBpcyB0aGUgc2l6ZSBvZiBhIENEUk9NIGRyaXZlLgorCisJICBJZiB5b3UgaGF2ZSBzdWNoIG9uZSBhbmQgd2FudCBhbnl0aGluZyBzaG93aW5nIG9uIHRoZSBWRkQgdGhlbiB5b3UKKwkgIG11c3QgYW5zd2VyIFkgaGVyZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYnJpcV9wYW5lbC4KKworCSAgSXQncyBzYWZlIHRvIHNheSBOIGhlcmUuCisKIGNvbmZpZyBQUklOVEVSCiAJdHJpc3RhdGUgIlBhcmFsbGVsIHByaW50ZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBBUlBPUlQKQEAgLTU5Niw2ICs2MTEsMTMgQEAKIAkgIGNvbnNvbGUuIFRoaXMgZHJpdmVyIGFsbG93cyBlYWNoIHBTZXJpZXMgcGFydGl0aW9uIHRvIGhhdmUgYSBjb25zb2xlCiAJICB3aGljaCBpcyBhY2Nlc3NlZCB2aWEgdGhlIEhNQy4KIAorY29uZmlnIEhWQ19JU0VSSUVTCisJYm9vbCAiaVNlcmllcyBIeXBlcnZpc29yIFZpcnR1YWwgQ29uc29sZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBDX0lTRVJJRVMgJiYgIVZJT0NPTlMKKwlzZWxlY3QgSFZDX0RSSVZFUgorCWhlbHAKKwkgIGlTZXJpZXMgbWFjaGluZXMgc3VwcG9ydCBhIGh5cGVydmlzb3IgdmlydHVhbCBjb25zb2xlLgorCiBjb25maWcgSFZDX1JUQVMKIAlib29sICJJQk0gUlRBUyBDb25zb2xlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUENfUlRBUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDZlMGY0NDYuLjhjNmRmYzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBACiBvYmotJChDT05GSUdfU1gpCQkrPSBzeC5vIGdlbmVyaWNfc2VyaWFsLm8KIG9iai0kKENPTkZJR19SSU8pCQkrPSByaW8vIGdlbmVyaWNfc2VyaWFsLm8KIG9iai0kKENPTkZJR19IVkNfQ09OU09MRSkJKz0gaHZjX3Zpby5vIGh2c2kubworb2JqLSQoQ09ORklHX0hWQ19JU0VSSUVTKQkrPSBodmNfaXNlcmllcy5vCiBvYmotJChDT05GSUdfSFZDX1JUQVMpCQkrPSBodmNfcnRhcy5vCiBvYmotJChDT05GSUdfSFZDX0RSSVZFUikJKz0gaHZjX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX1JBV19EUklWRVIpCSs9IHJhdy5vCkBAIC01MSw2ICs1Miw3IEBACiBvYmotJChDT05GSUdfVklPVEFQRSkJCSs9IHZpb3RhcGUubwogb2JqLSQoQ09ORklHX0hWQ1MpCQkrPSBodmNzLm8KIG9iai0kKENPTkZJR19TR0lfTUJDUykJCSs9IG1iY3Mubworb2JqLSQoQ09ORklHX0JSSVFfUEFORUwpCSs9IGJyaXFfcGFuZWwubwogCiBvYmotJChDT05GSUdfUFJJTlRFUikJCSs9IGxwLm8KIG9iai0kKENPTkZJR19USVBBUikJCSs9IHRpcGFyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCmluZGV4IDFkZTFiMTIuLjkxYjcxZTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvYWdwL3VuaW5vcnRoLWFncC5jCisrKyBiL2RyaXZlcnMvY2hhci9hZ3AvdW5pbm9ydGgtYWdwLmMKQEAgLTYwMSw4ICs2MDEsOCBAQAogCQl1bmlub3J0aF9ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInUzIik7CiAJfQogCWlmICh1bmlub3J0aF9ub2RlKSB7Ci0JCWludCAqcmV2cHJvcCA9IChpbnQgKikKLQkJCWdldF9wcm9wZXJ0eSh1bmlub3J0aF9ub2RlLCAiZGV2aWNlLXJldiIsIE5VTEwpOworCQljb25zdCBpbnQgKnJldnByb3AgPSBnZXRfcHJvcGVydHkodW5pbm9ydGhfbm9kZSwKKwkJCQkiZGV2aWNlLXJldiIsIE5VTEwpOwogCQlpZiAocmV2cHJvcCAhPSBOVUxMKQogCQkJdW5pbm9ydGhfcmV2ID0gKnJldnByb3AgJiAweDNmOwogCQlvZl9ub2RlX3B1dCh1bmlub3J0aF9ub2RlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9icmlxX3BhbmVsLmMgYi9kcml2ZXJzL2NoYXIvYnJpcV9wYW5lbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwZTVlYWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvYnJpcV9wYW5lbC5jCkBAIC0wLDAgKzEsMjY4IEBACisvKgorICogRHJpdmVycyBmb3IgdGhlIFRvdGFsIEltcGFjdCBQUEMgYmFzZWQgY29tcHV0ZXIgIkJSSVEiCisgKiBieSBEci4gS2Fyc3RlbiBKZXBwZXNlbgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKworI2RlZmluZQkJQlJJUV9QQU5FTF9NSU5PUgkxNTYKKyNkZWZpbmUJCUJSSVFfUEFORUxfVkZEX0lPUE9SVAkweDAzOTAKKyNkZWZpbmUJCUJSSVFfUEFORUxfTEVEX0lPUE9SVAkweDAzOTgKKyNkZWZpbmUJCUJSSVFfUEFORUxfVkVSCQkiMS4xICgwNC8yMC8yMDAyKSIKKyNkZWZpbmUJCUJSSVFfUEFORUxfTVNHMAkJIkxvYWRpbmcgTGludXgiCisKK3N0YXRpYyBpbnQJCXZmZF9pc19vcGVuOworc3RhdGljIHVuc2lnbmVkIGNoYXIJdmZkWzQwXTsKK3N0YXRpYyBpbnQJCXZmZF9jdXJzb3I7CitzdGF0aWMgdW5zaWduZWQgY2hhcglsZWRwYiwgbGVkOworCitzdGF0aWMgdm9pZCB1cGRhdGVfdmZkKHZvaWQpCit7CisJaW50CWk7CisKKwkvKiBjdXJzb3IgaG9tZSAqLworCW91dGIoMHgwMiwgQlJJUV9QQU5FTF9WRkRfSU9QT1JUKTsKKwlmb3IgKGk9MDsgaTwyMDsgaSsrKQorCQlvdXRiKHZmZFtpXSwgQlJJUV9QQU5FTF9WRkRfSU9QT1JUICsgMSk7CisKKwkvKiBjdXJzb3IgdG8gbmV4dCBsaW5lICovCisJb3V0YigweGMwLCBCUklRX1BBTkVMX1ZGRF9JT1BPUlQpOworCWZvciAoaT0yMDsgaTw0MDsgaSsrKQorCQlvdXRiKHZmZFtpXSwgQlJJUV9QQU5FTF9WRkRfSU9QT1JUICsgMSk7CisKK30KKworc3RhdGljIHZvaWQgc2V0X2xlZChjaGFyIHN0YXRlKQoreworCWlmIChzdGF0ZSA9PSAnUicpCisJCWxlZCA9IDB4MDE7CisJZWxzZSBpZiAoc3RhdGUgPT0gJ0cnKQorCQlsZWQgPSAweDAyOworCWVsc2UgaWYgKHN0YXRlID09ICdZJykKKwkJbGVkID0gMHgwMzsKKwllbHNlIGlmIChzdGF0ZSA9PSAnWCcpCisJCWxlZCA9IDB4MDA7CisJb3V0YihsZWQsIEJSSVFfUEFORUxfTEVEX0lPUE9SVCk7Cit9CisKK3N0YXRpYyBpbnQgYnJpcV9wYW5lbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCit7CisJLyogZW5mb3JjZSBzaW5nbGUgYWNjZXNzICovCisJaWYgKHZmZF9pc19vcGVuKQorCQlyZXR1cm4gLUVCVVNZOworCXZmZF9pc19vcGVuID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJyaXFfcGFuZWxfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlubywgc3RydWN0IGZpbGUgKmZpbGVwKQoreworCWlmICghdmZkX2lzX29wZW4pCisJCXJldHVybiAtRU5PREVWOworCisJdmZkX2lzX29wZW4gPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJyaXFfcGFuZWxfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCisJCQkgbG9mZl90ICpwcG9zKQoreworCXVuc2lnbmVkIHNob3J0IGM7CisJdW5zaWduZWQgY2hhciBjcDsKKworI2lmIDAJLyogIENhbid0IHNlZWsgKHByZWFkKSBvbiB0aGlzIGRldmljZSAgKi8KKwlpZiAocHBvcyAhPSAmZmlsZS0+Zl9wb3MpCisJCXJldHVybiAtRVNQSVBFOworI2VuZGlmCisKKwlpZiAoIXZmZF9pc19vcGVuKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWMgPSAoaW5iKEJSSVFfUEFORUxfTEVEX0lPUE9SVCkgJiAweDAwMGMpIHwgKGxlZHBiICYgMHgwMDAzKTsKKwlzZXRfbGVkKCcgJyk7CisJLyogdXBwZXIgYnV0dG9uIHJlbGVhc2VkICovCisJaWYgKCghKGxlZHBiICYgMHgwMDA0KSkgJiYgKGMgJiAweDAwMDQpKSB7CisJCWNwID0gJyAnOworCQlsZWRwYiA9IGM7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmY3AsIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAxOworCX0KKwkvKiBsb3dlciBidXR0b24gcmVsZWFzZWQgKi8KKwllbHNlIGlmICgoIShsZWRwYiAmIDB4MDAwOCkpICYmIChjICYgMHgwMDA4KSkgeworCQljcCA9ICdccic7CisJCWxlZHBiID0gYzsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZjcCwgMSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDE7CisJfSBlbHNlIHsKKwkJbGVkcGIgPSBjOworCQlyZXR1cm4gMDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNjcm9sbF92ZmQoIHZvaWQgKQoreworCWludAlpOworCisJZm9yIChpPTA7IGk8MjA7IGkrKykgeworCQl2ZmRbaV0gPSB2ZmRbaSsyMF07CisJCXZmZFtpKzIwXSA9ICcgJzsKKwl9CisJdmZkX2N1cnNvciA9IDIwOworfQorCitzdGF0aWMgc3NpemVfdCBicmlxX3BhbmVsX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4sCisJCQkgIGxvZmZfdCAqcHBvcykKK3sKKwlzaXplX3QgaW5keCA9IGxlbjsKKwlpbnQgaSwgZXNjID0gMDsKKworI2lmIDAJLyogIENhbid0IHNlZWsgKHB3cml0ZSkgb24gdGhpcyBkZXZpY2UgICovCisJaWYgKHBwb3MgIT0gJmZpbGUtPmZfcG9zKQorCQlyZXR1cm4gLUVTUElQRTsKKyNlbmRpZgorCisJaWYgKCF2ZmRfaXNfb3BlbikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWZvciAoOzspIHsKKwkJaWYgKCFpbmR4KQorCQkJYnJlYWs7CisJCWlmIChlc2MpIHsKKwkJCXNldF9sZWQoKmJ1Zik7CisJCQllc2MgPSAwOworCQl9IGVsc2UgaWYgKCpidWYgPT0gMjcpIHsKKwkJCWVzYyA9IDE7CisJCX0gZWxzZSBpZiAoKmJ1ZiA9PSAxMikgeworCQkJLyogZG8gYSBmb3JtIGZlZWQgKi8KKwkJCWZvciAoaT0wOyBpPDQwOyBpKyspCisJCQkJdmZkW2ldID0gJyAnOworCQkJdmZkX2N1cnNvciA9IDA7CisJCX0gZWxzZSBpZiAoKmJ1ZiA9PSAxMCkgeworCQkJaWYgKHZmZF9jdXJzb3IgPCAyMCkKKwkJCQl2ZmRfY3Vyc29yID0gMjA7CisJCQllbHNlIGlmICh2ZmRfY3Vyc29yIDwgNDApCisJCQkJdmZkX2N1cnNvciA9IDQwOworCQkJZWxzZSBpZiAodmZkX2N1cnNvciA8IDYwKQorCQkJCXZmZF9jdXJzb3IgPSA2MDsKKwkJCWlmICh2ZmRfY3Vyc29yID4gNTkpCisJCQkJc2Nyb2xsX3ZmZCgpOworCQl9IGVsc2UgeworCQkJLyoganVzdCBhIGNoYXJhY3RlciAqLworCQkJaWYgKHZmZF9jdXJzb3IgPiAzOSkKKwkJCQlzY3JvbGxfdmZkKCk7CisJCQl2ZmRbdmZkX2N1cnNvcisrXSA9ICpidWY7CisJCX0KKwkJaW5keC0tOworCQlidWYrKzsKKwl9CisJdXBkYXRlX3ZmZCgpOworCisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYnJpcV9wYW5lbF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBicmlxX3BhbmVsX3JlYWQsCisJLndyaXRlCQk9IGJyaXFfcGFuZWxfd3JpdGUsCisJLm9wZW4JCT0gYnJpcV9wYW5lbF9vcGVuLAorCS5yZWxlYXNlCT0gYnJpcV9wYW5lbF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIGJyaXFfcGFuZWxfbWlzY2RldiA9IHsKKwlCUklRX1BBTkVMX01JTk9SLAorCSJicmlxX3BhbmVsIiwKKwkmYnJpcV9wYW5lbF9mb3BzCit9OworCitzdGF0aWMgaW50IF9faW5pdCBicmlxX3BhbmVsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJvb3QgPSBmaW5kX3BhdGhfZGV2aWNlKCIvIik7CisJY2hhciAqbWFjaGluZTsKKwlpbnQgaTsKKworCW1hY2hpbmUgPSBnZXRfcHJvcGVydHkocm9vdCwgIm1vZGVsIiwgTlVMTCk7CisJaWYgKCFtYWNoaW5lIHx8IHN0cm5jbXAobWFjaGluZSwgIlRvdGFsSW1wYWN0LEJSSVEtMSIsIDE4KSAhPSAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXByaW50ayhLRVJOX0lORk8KKwkJImJyaXFfcGFuZWw6IHYlcyBEci4gS2Fyc3RlbiBKZXBwZXNlbiAoa2pAdG90YWxpbXBhY3QuY29tKVxuIiwKKwkJQlJJUV9QQU5FTF9WRVIpOworCisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihCUklRX1BBTkVMX1ZGRF9JT1BPUlQsIDQsICJCUklRIEZyb250IFBhbmVsIikpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKEJSSVFfUEFORUxfTEVEX0lPUE9SVCwgMiwgIkJSSVEgRnJvbnQgUGFuZWwiKSkgeworCQlyZWxlYXNlX3JlZ2lvbihCUklRX1BBTkVMX1ZGRF9JT1BPUlQsIDQpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlsZWRwYiA9IGluYihCUklRX1BBTkVMX0xFRF9JT1BPUlQpICYgMHgwMDBjOworCisJaWYgKG1pc2NfcmVnaXN0ZXIoJmJyaXFfcGFuZWxfbWlzY2RldikgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKEJSSVFfUEFORUxfVkZEX0lPUE9SVCwgNCk7CisJCXJlbGVhc2VfcmVnaW9uKEJSSVFfUEFORUxfTEVEX0lPUE9SVCwgMik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJb3V0YigweDM4LCBCUklRX1BBTkVMX1ZGRF9JT1BPUlQpOwkvKiBGdW5jdGlvbiBzZXQgKi8KKwlvdXRiKDB4MDEsIEJSSVFfUEFORUxfVkZEX0lPUE9SVCk7CS8qIENsZWFyIGRpc3BsYXkgKi8KKwlvdXRiKDB4MGMsIEJSSVFfUEFORUxfVkZEX0lPUE9SVCk7CS8qIERpc3BsYXkgb24gKi8KKwlvdXRiKDB4MDYsIEJSSVFfUEFORUxfVkZEX0lPUE9SVCk7CS8qIEVudHJ5IG5vcm1hbCAqLworCWZvciAoaT0wOyBpPDQwOyBpKyspCisJCXZmZFtpXT0nICc7CisjaWZuZGVmIE1PRFVMRQorCXZmZFswXSA9ICdMJzsKKwl2ZmRbMV0gPSAnbyc7CisJdmZkWzJdID0gJ2EnOworCXZmZFszXSA9ICdkJzsKKwl2ZmRbNF0gPSAnaSc7CisJdmZkWzVdID0gJ24nOworCXZmZFs2XSA9ICdnJzsKKwl2ZmRbN10gPSAnICc7CisJdmZkWzhdID0gJy4nOworCXZmZFs5XSA9ICcuJzsKKwl2ZmRbMTBdID0gJy4nOworI2VuZGlmIC8qICFNT0RVTEUgKi8KKworCXVwZGF0ZV92ZmQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYnJpcV9wYW5lbF9leGl0KHZvaWQpCit7CisJbWlzY19kZXJlZ2lzdGVyKCZicmlxX3BhbmVsX21pc2NkZXYpOworCXJlbGVhc2VfcmVnaW9uKEJSSVFfUEFORUxfVkZEX0lPUE9SVCwgNCk7CisJcmVsZWFzZV9yZWdpb24oQlJJUV9QQU5FTF9MRURfSU9QT1JULCAyKTsKK30KKworbW9kdWxlX2luaXQoYnJpcV9wYW5lbF9pbml0KTsKK21vZHVsZV9leGl0KGJyaXFfcGFuZWxfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkthcnN0ZW4gSmVwcGVzZW4gPGthcnN0ZW5AamVwcGVzZW5zLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgVG90YWwgSW1wYWN0IGJyaVEgZnJvbnQgcGFuZWwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCmluZGV4IDViYjIyMzQuLjM5YTdmNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwpAQCAtMTc1LDYgKzE3NSwxNCBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBSMjAwX0VNSVRfVkFQX0NUTDp7CisJCQlSSU5HX0xPQ0FMUzsKKwkJCUJFR0lOX1JJTkcoMik7CisJCQlPVVRfUklOR19SRUcoUkFERU9OX1NFX1RDTF9TVEFURV9GTFVTSCwgMCk7CisJCQlBRFZBTkNFX1JJTkcoKTsKKwkJfQorCQlicmVhazsKKwogCWNhc2UgUkFERU9OX0VNSVRfUkIzRF9DT0xPUlBJVENIOgogCWNhc2UgUkFERU9OX0VNSVRfUkVfTElORV9QQVRURVJOOgogCWNhc2UgUkFERU9OX0VNSVRfU0VfTElORV9XSURUSDoKQEAgLTIwMiw3ICsyMTAsNiBAQAogCWNhc2UgUjIwMF9FTUlUX1RDTF9MSUdIVF9NT0RFTF9DVExfMDoKIAljYXNlIFIyMDBfRU1JVF9URkFDVE9SXzA6CiAJY2FzZSBSMjAwX0VNSVRfVlRYX0ZNVF8wOgotCWNhc2UgUjIwMF9FTUlUX1ZBUF9DVEw6CiAJY2FzZSBSMjAwX0VNSVRfTUFUUklYX1NFTEVDVF8wOgogCWNhc2UgUjIwMF9FTUlUX1RFWF9QUk9DX0NUTF8yOgogCWNhc2UgUjIwMF9FTUlUX1RDTF9VQ1BfVkVSVF9CTEVORF9DVEw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuYyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCmluZGV4IGNhMmY1MzguLmE3NmQyYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jCkBAIC04MCw3ICs4MCw4IEBACiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAl1bnNpZ25lZCBpbnQgY291bnQ7CiAJaW50IGRvX3dha2V1cDsKLQljaGFyIG91dGJ1ZltOX09VVEJVRl0gX19BTElHTkVEX187CisJY2hhciAqb3V0YnVmOworCWludCBvdXRidWZfc2l6ZTsKIAlpbnQgbl9vdXRidWY7CiAJdWludDMyX3QgdnRlcm1ubzsKIAlzdHJ1Y3QgaHZfb3BzICpvcHM7CkBAIC0zMTksMTAgKzMyMCw4IEBACiAJc3RydWN0IGtvYmplY3QgKmtvYmpwOwogCiAJLyogQXV0byBpbmNyZW1lbnRzIGtvYmplY3QgcmVmZXJlbmNlIGlmIGZvdW5kLiAqLwotCWlmICghKGhwID0gaHZjX2dldF9ieV9pbmRleCh0dHktPmluZGV4KSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHZjX2NvbnNvbGU6IHR0eSBvcGVuIGZhaWxlZCwgbm8gdnR5IGFzc29jaWF0ZWQgd2l0aCB0dHkuXG4iKTsKKwlpZiAoIShocCA9IGh2Y19nZXRfYnlfaW5kZXgodHR5LT5pbmRleCkpKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHAtPmxvY2ssIGZsYWdzKTsKIAkvKiBDaGVjayBhbmQgdGhlbiBpbmNyZW1lbnQgZm9yIGZhc3QgcGF0aCBvcGVuLiAqLwpAQCAtNTA1LDcgKzUwNCw3IEBACiAJaWYgKGhwLT5uX291dGJ1ZiA+IDApCiAJCWh2Y19wdXNoKGhwKTsKIAotCXdoaWxlIChjb3VudCA+IDAgJiYgKHJzaXplID0gTl9PVVRCVUYgLSBocC0+bl9vdXRidWYpID4gMCkgeworCXdoaWxlIChjb3VudCA+IDAgJiYgKHJzaXplID0gaHAtPm91dGJ1Zl9zaXplIC0gaHAtPm5fb3V0YnVmKSA+IDApIHsKIAkJaWYgKHJzaXplID4gY291bnQpCiAJCQlyc2l6ZSA9IGNvdW50OwogCQltZW1jcHkoaHAtPm91dGJ1ZiArIGhwLT5uX291dGJ1ZiwgYnVmLCByc2l6ZSk7CkBAIC01MzgsNyArNTM3LDcgQEAKIAlpZiAoIWhwKQogCQlyZXR1cm4gLTE7CiAKLQlyZXR1cm4gTl9PVVRCVUYgLSBocC0+bl9vdXRidWY7CisJcmV0dXJuIGhwLT5vdXRidWZfc2l6ZSAtIGhwLT5uX291dGJ1ZjsKIH0KIAogc3RhdGljIGludCBodmNfY2hhcnNfaW5fYnVmZmVyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC02NjgsNiArNjY3LDcgQEAKIAlkbyB7CiAJCXBvbGxfbWFzayA9IDA7CiAJCWh2Y19raWNrZWQgPSAwOworCQl0cnlfdG9fZnJlZXplKCk7CiAJCXdtYigpOwogCQlpZiAoY3B1c19lbXB0eShjcHVzX2luX3htb24pKSB7CiAJCQlzcGluX2xvY2soJmh2Y19zdHJ1Y3RzX2xvY2spOwpAQCAtNzI4LDEyICs3MjgsMTMgQEAKIH07CiAKIHN0cnVjdCBodmNfc3RydWN0IF9fZGV2aW5pdCAqaHZjX2FsbG9jKHVpbnQzMl90IHZ0ZXJtbm8sIGludCBpcnEsCi0JCQkJCXN0cnVjdCBodl9vcHMgKm9wcykKKwkJCQkJc3RydWN0IGh2X29wcyAqb3BzLCBpbnQgb3V0YnVmX3NpemUpCiB7CiAJc3RydWN0IGh2Y19zdHJ1Y3QgKmhwOwogCWludCBpOwogCi0JaHAgPSBrbWFsbG9jKHNpemVvZigqaHApLCBHRlBfS0VSTkVMKTsKKwlocCA9IGttYWxsb2MoQUxJR04oc2l6ZW9mKCpocCksIHNpemVvZihsb25nKSkgKyBvdXRidWZfc2l6ZSwKKwkJCUdGUF9LRVJORUwpOwogCWlmICghaHApCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCkBAIC03NDIsNiArNzQzLDggQEAKIAlocC0+dnRlcm1ubyA9IHZ0ZXJtbm87CiAJaHAtPmlycSA9IGlycTsKIAlocC0+b3BzID0gb3BzOworCWhwLT5vdXRidWZfc2l6ZSA9IG91dGJ1Zl9zaXplOworCWhwLT5vdXRidWYgPSAmKChjaGFyICopaHApW0FMSUdOKHNpemVvZigqaHApLCBzaXplb2YobG9uZykpXTsKIAogCWtvYmplY3RfaW5pdCgmaHAtPmtvYmopOwogCWhwLT5rb2JqLmt0eXBlID0gJmh2Y19rb2JqX3R5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2NvbnNvbGUuaCBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCmluZGV4IDk2Yjc0MDEuLjhjNTk4MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCisrKyBiL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5oCkBAIC01Niw3ICs1Niw3IEBACiAKIC8qIHJlZ2lzdGVyIGEgdnRlcm0gZm9yIGh2YyB0dHkgb3BlcmF0aW9uIChtb2R1bGVfaW5pdCBvciBob3RwbHVnIGFkZCkgKi8KIGV4dGVybiBzdHJ1Y3QgaHZjX3N0cnVjdCAqIF9fZGV2aW5pdCBodmNfYWxsb2ModWludDMyX3QgdnRlcm1ubywgaW50IGlycSwKLQkJCQkJCSBzdHJ1Y3QgaHZfb3BzICpvcHMpOworCQkJCXN0cnVjdCBodl9vcHMgKm9wcywgaW50IG91dGJ1Zl9zaXplKTsKIC8qIHJlbW92ZSBhIHZ0ZXJtIGZyb20gaHZjIHR0eSBvcGVyYXRpb24gKG1vZGVsZV9leGl0IG9yIGhvdHBsdWcgcmVtb3ZlKSAqLwogZXh0ZXJuIGludCBfX2RldmV4aXQgaHZjX3JlbW92ZShzdHJ1Y3QgaHZjX3N0cnVjdCAqaHApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYyBiL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NDc3MjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvaHZjX2lzZXJpZXMuYwpAQCAtMCwwICsxLDU5NCBAQAorLyoKKyAqIGlTZXJpZXMgdmlvIGRyaXZlciBpbnRlcmZhY2UgdG8gaHZjX2NvbnNvbGUuYworICoKKyAqIFRoaXMgY29kZSBpcyBiYXNlZCBoZWF2aWx5IG9uIGh2Y192aW8uYyBhbmQgdmlvY29ucy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFN0ZXBoZW4gUm90aHdlbGwsIElCTSBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CisKKyNpbmNsdWRlIDxhc20vaHZjb25zb2xlLmg+CisjaW5jbHVkZSA8YXNtL3Zpby5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL2lzZXJpZXMvdmlvLmg+CisjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfY2FsbC5oPgorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2NvbmZpZy5oPgorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2V2ZW50Lmg+CisKKyNpbmNsdWRlICJodmNfY29uc29sZS5oIgorCisjZGVmaW5lIFZUVFlfUE9SVFMgMTAKKworc3RhdGljIERFRklORV9TUElOTE9DSyhjb25zb2xlbG9jayk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbnNvbGVsb2dsb2NrKTsKKworc3RhdGljIGNvbnN0IGNoYXIgaHZjX2RyaXZlcl9uYW1lW10gPSAiaHZjX2NvbnNvbGUiOworCisjZGVmaW5lIElOX0JVRl9TSVpFCTIwMAorCisvKgorICogT3VyIHBvcnQgaW5mb3JtYXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcG9ydF9pbmZvIHsKKwlIdkxwSW5kZXggbHA7CisJdTY0IHNlcTsJLyogc2VxdWVuY2UgbnVtYmVyIG9mIGxhc3QgSFYgc2VuZCAqLworCXU2NCBhY2s7CS8qIGxhc3QgYWNrIGZyb20gSFYgKi8KKwlzdHJ1Y3QgaHZjX3N0cnVjdCAqaHA7CisJaW50IGluX3N0YXJ0OworCWludCBpbl9lbmQ7CisJdW5zaWduZWQgY2hhciBpbl9idWZbSU5fQlVGX1NJWkVdOworfSBwb3J0X2luZm9bVlRUWV9QT1JUU10gPSB7CisJWyAwIC4uLiBWVFRZX1BPUlRTIC0gMSBdID0geworCQkubHAgPSBIdkxwSW5kZXhJbnZhbGlkCisJfQorfTsKKworI2RlZmluZSB2aW9jaGFyX2lzX2NvbnNvbGUocGkpCSgocGkpID09ICZwb3J0X2luZm9bMF0pCisKK3N0YXRpYyBzdHJ1Y3QgdmlvX2RldmljZV9pZCBodmNfZHJpdmVyX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7InNlcmlhbCIsICJJQk0saVNlcmllcy12dHkifSwKKwl7ICIiLCAiIiB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh2aW8sIGh2Y19kcml2ZXJfdGFibGUpOworCitzdGF0aWMgdm9pZCBodmxvZyhjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXZhX2xpc3QgYXJnczsKKwlzdGF0aWMgY2hhciBidWZbMjU2XTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zb2xlbG9nbG9jaywgZmxhZ3MpOworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJaSA9IHZzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSAtIDEsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWJ1ZltpKytdID0gJ1xyJzsKKwlIdkNhbGxfd3JpdGVMb2dCdWZmZXIoYnVmLCBpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zb2xlbG9nbG9jaywgZmxhZ3MpOworfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgY29tbW9uIGZpZWxkcyBpbiBhIGNoYXJMcEV2ZW50CisgKi8KK3N0YXRpYyB2b2lkIGluaXRfZGF0YV9ldmVudChzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQgKnZpb2NoYXIsIEh2THBJbmRleCBscCkKK3sKKwlzdHJ1Y3QgSHZMcEV2ZW50ICpoZXYgPSAmdmlvY2hhci0+ZXZlbnQ7CisKKwltZW1zZXQodmlvY2hhciwgMCwgc2l6ZW9mKHN0cnVjdCB2aW9jaGFybHBldmVudCkpOworCisJaGV2LT5mbGFncyA9IEhWX0xQX0VWRU5UX1ZBTElEIHwgSFZfTFBfRVZFTlRfREVGRVJSRURfQUNLIHwKKwkJSFZfTFBfRVZFTlRfSU5UOworCWhldi0+eFR5cGUgPSBIdkxwRXZlbnRfVHlwZV9WaXJ0dWFsSW87CisJaGV2LT54U3VidHlwZSA9IHZpb21ham9yc3VidHlwZV9jaGFyaW8gfCB2aW9jaGFyZGF0YTsKKwloZXYtPnhTb3VyY2VMcCA9IEh2THBDb25maWdfZ2V0THBJbmRleCgpOworCWhldi0+eFRhcmdldExwID0gbHA7CisJaGV2LT54U2l6ZU1pbnVzMSA9IHNpemVvZihzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQpOworCWhldi0+eFNvdXJjZUluc3RhbmNlSWQgPSB2aW9wYXRoX3NvdXJjZWluc3QobHApOworCWhldi0+eFRhcmdldEluc3RhbmNlSWQgPSB2aW9wYXRoX3RhcmdldGluc3QobHApOworfQorCitzdGF0aWMgaW50IGdldF9jaGFycyh1aW50MzJfdCB2dGVybW5vLCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKwlpbnQgbiA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICh2dGVybW5vID49IFZUVFlfUE9SVFMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCXBpID0gJnBvcnRfaW5mb1t2dGVybW5vXTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZWxvY2ssIGZsYWdzKTsKKworCWlmIChwaS0+aW5fZW5kID09IDApCisJCWdvdG8gZG9uZTsKKworCW4gPSBwaS0+aW5fZW5kIC0gcGktPmluX3N0YXJ0OworCWlmIChuID4gY291bnQpCisJCW4gPSBjb3VudDsKKwltZW1jcHkoYnVmLCAmcGktPmluX2J1ZltwaS0+aW5fc3RhcnRdLCBuKTsKKwlwaS0+aW5fc3RhcnQgKz0gbjsKKwlpZiAocGktPmluX3N0YXJ0ID09IHBpLT5pbl9lbmQpIHsKKwkJcGktPmluX3N0YXJ0ID0gMDsKKwkJcGktPmluX2VuZCA9IDA7CisJfQorZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zb2xlbG9jaywgZmxhZ3MpOworCXJldHVybiBuOworfQorCitzdGF0aWMgaW50IHB1dF9jaGFycyh1aW50MzJfdCB2dGVybW5vLCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQgKnZpb2NoYXI7CisJc3RydWN0IHBvcnRfaW5mbyAqcGk7CisJSHZMcEV2ZW50X1JjIGh2cmM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2VudCA9IDA7CisKKwlpZiAodnRlcm1ubyA+PSBWVFRZX1BPUlRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBpID0gJnBvcnRfaW5mb1t2dGVybW5vXTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zb2xlbG9jaywgZmxhZ3MpOworCisJaWYgKHZpb2NoYXJfaXNfY29uc29sZShwaSkgJiYgIXZpb3BhdGhfaXNhY3RpdmUocGktPmxwKSkgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZWxvZ2xvY2ssIGZsYWdzKTsKKwkJSHZDYWxsX3dyaXRlTG9nQnVmZmVyKGJ1ZiwgY291bnQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zb2xlbG9nbG9jaywgZmxhZ3MpOworCQlzZW50ID0gY291bnQ7CisJCWdvdG8gZG9uZTsKKwl9CisKKwl2aW9jaGFyID0gdmlvX2dldF9ldmVudF9idWZmZXIodmlvbWFqb3JzdWJ0eXBlX2NoYXJpbyk7CisJaWYgKHZpb2NoYXIgPT0gTlVMTCkgeworCQlodmxvZygiXG5ccnZpb2NvbnM6IENhbid0IGdldCB2aW9jaGFyIGJ1ZmZlci4iKTsKKwkJZ290byBkb25lOworCX0KKworCXdoaWxlICgoY291bnQgPiAwKSAmJiAoKHBpLT5zZXEgLSBwaS0+YWNrKSA8IFZJT0NIQVJfV0lORE9XKSkgeworCQlpbnQgbGVuOworCisJCWxlbiA9IChjb3VudCA+IFZJT0NIQVJfTUFYX0RBVEEpID8gVklPQ0hBUl9NQVhfREFUQSA6IGNvdW50OworCisJCWlmICh2aW9jaGFyX2lzX2NvbnNvbGUocGkpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZWxvZ2xvY2ssIGZsYWdzKTsKKwkJCUh2Q2FsbF93cml0ZUxvZ0J1ZmZlcihidWYsIGxlbik7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zb2xlbG9nbG9jaywgZmxhZ3MpOworCQl9CisKKwkJaW5pdF9kYXRhX2V2ZW50KHZpb2NoYXIsIHBpLT5scCk7CisKKwkJdmlvY2hhci0+bGVuID0gbGVuOworCQl2aW9jaGFyLT5ldmVudC54Q29ycmVsYXRpb25Ub2tlbiA9IHBpLT5zZXErKzsKKwkJdmlvY2hhci0+ZXZlbnQueFNpemVNaW51czEgPQorCQkJb2Zmc2V0b2Yoc3RydWN0IHZpb2NoYXJscGV2ZW50LCBkYXRhKSArIGxlbjsKKworCQltZW1jcHkodmlvY2hhci0+ZGF0YSwgYnVmLCBsZW4pOworCisJCWh2cmMgPSBIdkNhbGxFdmVudF9zaWduYWxMcEV2ZW50KCZ2aW9jaGFyLT5ldmVudCk7CisJCWlmIChodnJjKQorCQkJaHZsb2coIlxuXHJlcnJvciBzZW5kaW5nIGV2ZW50ISByZXR1cm4gY29kZSAlZFxuXHIiLAorCQkJCShpbnQpaHZyYyk7CisJCXNlbnQgKz0gbGVuOworCQljb3VudCAtPSBsZW47CisJCWJ1ZiArPSBsZW47CisJfQorCisJdmlvX2ZyZWVfZXZlbnRfYnVmZmVyKHZpb21ham9yc3VidHlwZV9jaGFyaW8sIHZpb2NoYXIpOworZG9uZToKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zb2xlbG9jaywgZmxhZ3MpOworCXJldHVybiBzZW50OworfQorCitzdGF0aWMgc3RydWN0IGh2X29wcyBodmNfZ2V0X3B1dF9vcHMgPSB7CisJLmdldF9jaGFycyA9IGdldF9jaGFycywKKwkucHV0X2NoYXJzID0gcHV0X2NoYXJzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgaHZjX3Zpb19wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmRldiwKKwkJCWNvbnN0IHN0cnVjdCB2aW9fZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgaHZjX3N0cnVjdCAqaHA7CisJc3RydWN0IHBvcnRfaW5mbyAqcGk7CisKKwkvKiBwcm9iZWQgd2l0aCBpbnZhbGlkIHBhcmFtZXRlcnMuICovCisJaWYgKCF2ZGV2IHx8ICFpZCkKKwkJcmV0dXJuIC1FUEVSTTsKKworCWlmICh2ZGV2LT51bml0X2FkZHJlc3MgPj0gVlRUWV9QT1JUUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwaSA9ICZwb3J0X2luZm9bdmRldi0+dW5pdF9hZGRyZXNzXTsKKworCWhwID0gaHZjX2FsbG9jKHZkZXYtPnVuaXRfYWRkcmVzcywgdmRldi0+aXJxLCAmaHZjX2dldF9wdXRfb3BzLAorCQkJVklPQ0hBUl9NQVhfREFUQSk7CisJaWYgKElTX0VSUihocCkpCisJCXJldHVybiBQVFJfRVJSKGhwKTsKKwlwaS0+aHAgPSBocDsKKwlkZXZfc2V0X2RydmRhdGEoJnZkZXYtPmRldiwgcGkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGh2Y192aW9fcmVtb3ZlKHN0cnVjdCB2aW9fZGV2ICp2ZGV2KQoreworCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gZGV2X2dldF9kcnZkYXRhKCZ2ZGV2LT5kZXYpOworCXN0cnVjdCBodmNfc3RydWN0ICpocCA9IHBpLT5ocDsKKworCXJldHVybiBodmNfcmVtb3ZlKGhwKTsKK30KKworc3RhdGljIHN0cnVjdCB2aW9fZHJpdmVyIGh2Y192aW9fZHJpdmVyID0geworCS5pZF90YWJsZQk9IGh2Y19kcml2ZXJfdGFibGUsCisJLnByb2JlCQk9IGh2Y192aW9fcHJvYmUsCisJLnJlbW92ZQkJPSBodmNfdmlvX3JlbW92ZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSBodmNfZHJpdmVyX25hbWUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0KK307CisKK3N0YXRpYyB2b2lkIGh2Y19vcGVuX2V2ZW50KHN0cnVjdCBIdkxwRXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZpb2NoYXJscGV2ZW50ICpjZXZlbnQgPSAoc3RydWN0IHZpb2NoYXJscGV2ZW50ICopZXZlbnQ7CisJdTggcG9ydCA9IGNldmVudC0+dmlydHVhbF9kZXZpY2U7CisJc3RydWN0IHBvcnRfaW5mbyAqcGk7CisJaW50IHJlamVjdCA9IDA7CisKKwlpZiAoaHZscGV2ZW50X2lzX2FjayhldmVudCkpIHsKKwkJaWYgKHBvcnQgPj0gVlRUWV9QT1JUUykKKwkJCXJldHVybjsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZWxvY2ssIGZsYWdzKTsKKworCQlwaSA9ICZwb3J0X2luZm9bcG9ydF07CisJCWlmIChldmVudC0+eFJjID09IEh2THBFdmVudF9SY19Hb29kKSB7CisJCQlwaS0+c2VxID0gcGktPmFjayA9IDA7CisJCQkvKgorCQkJICogVGhpcyBsaW5lIGFsbG93cyBjb25uZWN0aW9ucyBmcm9tIHRoZSBwcmltYXJ5CisJCQkgKiBwYXJ0aXRpb24gYnV0IG9uY2Ugb25lIGlzIGNvbm5lY3RlZCBmcm9tIHRoZQorCQkJICogcHJpbWFyeSBwYXJ0aXRpb24gbm90aGluZyBzaG9ydCBvZiBhIHJlYm9vdAorCQkJICogb2YgbGludXggd2lsbCBhbGxvdyBhY2Nlc3MgZnJvbSB0aGUgaG9zdGluZworCQkJICogcGFydGl0aW9uIGFnYWluIHdpdGhvdXQgYSByZXF1aXJlZCBpU2VyaWVzIGZpeC4KKwkJCSAqLworCQkJcGktPmxwID0gZXZlbnQtPnhUYXJnZXRMcDsKKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNvbGVsb2NrLCBmbGFncyk7CisJCWlmIChldmVudC0+eFJjICE9IEh2THBFdmVudF9SY19Hb29kKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJodmM6IGhhbmRsZV9vcGVuX2V2ZW50OiBldmVudC0+eFJjID09ICglZCkuXG4iLAorCQkJICAgICAgIGV2ZW50LT54UmMpOworCisJCWlmIChldmVudC0+eENvcnJlbGF0aW9uVG9rZW4gIT0gMCkgeworCQkJYXRvbWljX3QgKmFwdHI9IChhdG9taWNfdCAqKWV2ZW50LT54Q29ycmVsYXRpb25Ub2tlbjsKKwkJCWF0b21pY19zZXQoYXB0ciwgMSk7CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJodmM6IHdlaXJkLi4uZ290IG9wZW4gYWNrIHdpdGhvdXQgYXRvbWljXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoaXMgaGFkIGJldHRlciByZXF1aXJlIGFuIGFjaywgb3RoZXJ3aXNlIGNvbXBsYWluICovCisJaWYgKCFodmxwZXZlbnRfbmVlZF9hY2soZXZlbnQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh2YzogdmlvY2hhcm9wZW4gd2l0aG91dCBhY2sgYml0IVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZWxvY2ssIGZsYWdzKTsKKworCS8qIE1ha2Ugc3VyZSB0aGlzIGlzIGEgZ29vZCB2aXJ0dWFsIHR0eSAqLworCWlmIChwb3J0ID49IFZUVFlfUE9SVFMpIHsKKwkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19TdWJ0eXBlRXJyb3I7CisJCWNldmVudC0+c3VidHlwZV9yZXN1bHRfY29kZSA9IHZpb3JjX29wZW5SZWplY3RlZDsKKwkJLyoKKwkJICogRmxhZyBzdGF0ZSBoZXJlIHNpbmNlIHdlIGNhbid0IHByaW50ayB3aGlsZSBob2xkaW5nCisJCSAqIHRoZSBjb25zb2xlbG9jayBzcGlubG9jay4KKwkJICovCisJCXJlamVjdCA9IDE7CisJfSBlbHNlIHsKKwkJcGkgPSAmcG9ydF9pbmZvW3BvcnRdOworCQlpZiAoKHBpLT5scCAhPSBIdkxwSW5kZXhJbnZhbGlkKSAmJgorCQkJCShwaS0+bHAgIT0gZXZlbnQtPnhTb3VyY2VMcCkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGlzIGlzIHR0eSBpcyBhbHJlYWR5IGNvbm5lY3RlZCB0byBhIGRpZmZlcmVudAorCQkJICogcGFydGl0aW9uLCBmYWlsLgorCQkJICovCisJCQlldmVudC0+eFJjID0gSHZMcEV2ZW50X1JjX1N1YnR5cGVFcnJvcjsKKwkJCWNldmVudC0+c3VidHlwZV9yZXN1bHRfY29kZSA9IHZpb3JjX29wZW5SZWplY3RlZDsKKwkJCXJlamVjdCA9IDI7CisJCX0gZWxzZSB7CisJCQlwaS0+bHAgPSBldmVudC0+eFNvdXJjZUxwOworCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19Hb29kOworCQkJY2V2ZW50LT5zdWJ0eXBlX3Jlc3VsdF9jb2RlID0gdmlvcmNfZ29vZDsKKwkJCXBpLT5zZXEgPSBwaS0+YWNrID0gMDsKKwkJfQorCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNvbGVsb2NrLCBmbGFncyk7CisKKwlpZiAocmVqZWN0ID09IDEpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh2Yzogb3BlbiByZWplY3RlZDogYmFkIHZpcnR1YWwgdHR5LlxuIik7CisJZWxzZSBpZiAocmVqZWN0ID09IDIpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh2Yzogb3BlbiByZWplY3RlZDogY29uc29sZSBpbiBleGNsdXNpdmUgIgorCQkJCSJ1c2UgYnkgYW5vdGhlciBwYXJ0aXRpb24uXG4iKTsKKworCS8qIFJldHVybiB0aGUgYWNrbm93bGVkZ2VtZW50ICovCisJSHZDYWxsRXZlbnRfYWNrTHBFdmVudChldmVudCk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSBjbG9zZSBjaGFyTHBFdmVudC4gIFRoaXMgc2hvdWxkIE9OTFkgYmUgYW4gSW50ZXJydXB0IGJlY2F1c2UgdGhlCisgKiB2aXJ0dWFsIGNvbnNvbGUgc2hvdWxkIG5ldmVyIGFjdHVhbGx5IGlzc3VlIGEgY2xvc2UgZXZlbnQgdG8gdGhlIGh5cGVydmlzb3IKKyAqIGJlY2F1c2UgdGhlIHZpcnR1YWwgY29uc29sZSBuZXZlciBnb2VzIGF3YXkuICBBIGNsb3NlIGV2ZW50IGNvbWluZyBmcm9tIHRoZQorICogaHlwZXJ2aXNvciBzaW1wbHkgbWVhbnMgdGhhdCB0aGVyZSBhcmUgbm8gY2xpZW50IGNvbnNvbGVzIGNvbm5lY3RlZCB0byB0aGUKKyAqIHZpcnR1YWwgY29uc29sZS4KKyAqLworc3RhdGljIHZvaWQgaHZjX2Nsb3NlX2V2ZW50KHN0cnVjdCBIdkxwRXZlbnQgKmV2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHZpb2NoYXJscGV2ZW50ICpjZXZlbnQgPSAoc3RydWN0IHZpb2NoYXJscGV2ZW50ICopZXZlbnQ7CisJdTggcG9ydCA9IGNldmVudC0+dmlydHVhbF9kZXZpY2U7CisKKwlpZiAoIWh2bHBldmVudF9pc19pbnQoZXZlbnQpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJodmM6IGdvdCB1bmV4cGVjdGVkIGNsb3NlIGFja25vd2xlZ2VtZW50XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChwb3J0ID49IFZUVFlfUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImh2YzogY2xvc2UgbWVzc2FnZSBmcm9tIGludmFsaWQgdmlydHVhbCBkZXZpY2UuXG4iKTsKKwkJcmV0dXJuOworCX0KKworCS8qIEZvciBjbG9zZXMsIGp1c3QgbWFyayB0aGUgY29uc29sZSBwYXJ0aXRpb24gaW52YWxpZCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zb2xlbG9jaywgZmxhZ3MpOworCisJaWYgKHBvcnRfaW5mb1twb3J0XS5scCA9PSBldmVudC0+eFNvdXJjZUxwKQorCQlwb3J0X2luZm9bcG9ydF0ubHAgPSBIdkxwSW5kZXhJbnZhbGlkOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc29sZWxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaHZjX2RhdGFfZXZlbnQoc3RydWN0IEh2THBFdmVudCAqZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQgKmNldmVudCA9IChzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQgKilldmVudDsKKwlzdHJ1Y3QgcG9ydF9pbmZvICpwaTsKKwlpbnQgbjsKKwl1OCBwb3J0ID0gY2V2ZW50LT52aXJ0dWFsX2RldmljZTsKKworCWlmIChwb3J0ID49IFZUVFlfUE9SVFMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaHZjOiBkYXRhIG9uIGludmFsaWQgdmlydHVhbCBkZXZpY2UgJWRcbiIsCisJCQkJcG9ydCk7CisJCXJldHVybjsKKwl9CisJaWYgKGNldmVudC0+bGVuID09IDApCisJCXJldHVybjsKKworCS8qCisJICogQ2hhbmdlIDA1LzAxLzIwMDMgLSBSeWFuIEFybm9sZDogSWYgYSBwYXJ0aXRpb24gb3RoZXIgdGhhbgorCSAqIHRoZSBjdXJyZW50IGV4Y2x1c2l2ZSBwYXJ0aXRpb24gdHJpZXMgdG8gc2VuZCB1cyBkYXRhCisJICogZXZlbnRzIHRoZW4ganVzdCBkcm9wIHRoZW0gb24gdGhlIGZsb29yIGJlY2F1c2Ugd2UgZG9uJ3QKKwkgKiB3YW50IGhpcyBzdGlua2luZyBkYXRhLiAgSGUgaXNuJ3QgYXV0aG9yaXplZCB0byByZWNlaXZlCisJICogZGF0YSBiZWNhdXNlIGhlIHdhc24ndCB0aGUgZmlyc3Qgb25lIHRvIGdldCB0aGUgY29uc29sZSwKKwkgKiB0aGVyZWZvcmUgaGUgc2hvdWxkbid0IGJlIGFsbG93ZWQgdG8gc2VuZCBkYXRhIGVpdGhlci4KKwkgKiBUaGlzIHdpbGwgd29yayB3aXRob3V0IGFuIGlTZXJpZXMgZml4LgorCSAqLworCXBpID0gJnBvcnRfaW5mb1twb3J0XTsKKwlpZiAocGktPmxwICE9IGV2ZW50LT54U291cmNlTHApCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zb2xlbG9jaywgZmxhZ3MpOworCisJbiA9IElOX0JVRl9TSVpFIC0gcGktPmluX2VuZDsKKwlpZiAobiA+IGNldmVudC0+bGVuKQorCQluID0gY2V2ZW50LT5sZW47CisJaWYgKG4gPiAwKSB7CisJCW1lbWNweSgmcGktPmluX2J1ZltwaS0+aW5fZW5kXSwgY2V2ZW50LT5kYXRhLCBuKTsKKwkJcGktPmluX2VuZCArPSBuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zb2xlbG9jaywgZmxhZ3MpOworCWlmIChuID09IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh2YzogaW5wdXQgYnVmZmVyIG92ZXJmbG93XG4iKTsKK30KKworc3RhdGljIHZvaWQgaHZjX2Fja19ldmVudChzdHJ1Y3QgSHZMcEV2ZW50ICpldmVudCkKK3sKKwlzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQgKmNldmVudCA9IChzdHJ1Y3QgdmlvY2hhcmxwZXZlbnQgKilldmVudDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IHBvcnQgPSBjZXZlbnQtPnZpcnR1YWxfZGV2aWNlOworCisJaWYgKHBvcnQgPj0gVlRUWV9QT1JUUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJodmM6IGRhdGEgb24gaW52YWxpZCB2aXJ0dWFsIGRldmljZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29uc29sZWxvY2ssIGZsYWdzKTsKKwlwb3J0X2luZm9bcG9ydF0uYWNrID0gZXZlbnQtPnhDb3JyZWxhdGlvblRva2VuOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNvbGVsb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIGh2Y19jb25maWdfZXZlbnQoc3RydWN0IEh2THBFdmVudCAqZXZlbnQpCit7CisJc3RydWN0IHZpb2NoYXJscGV2ZW50ICpjZXZlbnQgPSAoc3RydWN0IHZpb2NoYXJscGV2ZW50ICopZXZlbnQ7CisKKwlpZiAoY2V2ZW50LT5kYXRhWzBdID09IDB4MDEpCisJCXByaW50ayhLRVJOX0lORk8gImh2Yzogd2luZG93IHJlc2l6ZWQgdG8gJWQ6ICVkOiAlZDogJWRcbiIsCisJCSAgICAgICBjZXZlbnQtPmRhdGFbMV0sIGNldmVudC0+ZGF0YVsyXSwKKwkJICAgICAgIGNldmVudC0+ZGF0YVszXSwgY2V2ZW50LT5kYXRhWzRdKTsKKwllbHNlCisJCXByaW50ayhLRVJOX1dBUk5JTkcgImh2YzogdW5rbm93biBjb25maWcgZXZlbnRcbiIpOworfQorCitzdGF0aWMgdm9pZCBodmNfaGFuZGxlX2V2ZW50KHN0cnVjdCBIdkxwRXZlbnQgKmV2ZW50KQoreworCWludCBjaGFybWlub3I7CisKKwlpZiAoZXZlbnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJY2hhcm1pbm9yID0gZXZlbnQtPnhTdWJ0eXBlICYgVklPTUlOT1JfU1VCVFlQRV9NQVNLOworCXN3aXRjaCAoY2hhcm1pbm9yKSB7CisJY2FzZSB2aW9jaGFyb3BlbjoKKwkJaHZjX29wZW5fZXZlbnQoZXZlbnQpOworCQlicmVhazsKKwljYXNlIHZpb2NoYXJjbG9zZToKKwkJaHZjX2Nsb3NlX2V2ZW50KGV2ZW50KTsKKwkJYnJlYWs7CisJY2FzZSB2aW9jaGFyZGF0YToKKwkJaHZjX2RhdGFfZXZlbnQoZXZlbnQpOworCQlicmVhazsKKwljYXNlIHZpb2NoYXJhY2s6CisJCWh2Y19hY2tfZXZlbnQoZXZlbnQpOworCQlicmVhazsKKwljYXNlIHZpb2NoYXJjb25maWc6CisJCWh2Y19jb25maWdfZXZlbnQoZXZlbnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoaHZscGV2ZW50X2lzX2ludChldmVudCkgJiYgaHZscGV2ZW50X25lZWRfYWNrKGV2ZW50KSkgeworCQkJZXZlbnQtPnhSYyA9IEh2THBFdmVudF9SY19JbnZhbGlkU3VidHlwZTsKKwkJCUh2Q2FsbEV2ZW50X2Fja0xwRXZlbnQoZXZlbnQpOworCQl9CisJfQorfQorCitzdGF0aWMgaW50IHNlbmRfb3BlbihIdkxwSW5kZXggcmVtb3RlTHAsIHZvaWQgKnNlbSkKK3sKKwlyZXR1cm4gSHZDYWxsRXZlbnRfc2lnbmFsTHBFdmVudEZhc3QocmVtb3RlTHAsCisJCQlIdkxwRXZlbnRfVHlwZV9WaXJ0dWFsSW8sCisJCQl2aW9tYWpvcnN1YnR5cGVfY2hhcmlvIHwgdmlvY2hhcm9wZW4sCisJCQlIdkxwRXZlbnRfQWNrSW5kX0RvQWNrLCBIdkxwRXZlbnRfQWNrVHlwZV9JbW1lZGlhdGVBY2ssCisJCQl2aW9wYXRoX3NvdXJjZWluc3QocmVtb3RlTHApLAorCQkJdmlvcGF0aF90YXJnZXRpbnN0KHJlbW90ZUxwKSwKKwkJCSh1NjQpKHVuc2lnbmVkIGxvbmcpc2VtLCBWSU9WRVJTSU9OIDw8IDE2LAorCQkJMCwgMCwgMCwgMCk7Cit9CisKK3N0YXRpYyBpbnQgaHZjX3Zpb19pbml0KHZvaWQpCit7CisJYXRvbWljX3Qgd2FpdF9mbGFnOworCWludCByYzsKKworCS8qICsyIGZvciBmdWRnZSAqLworCXJjID0gdmlvcGF0aF9vcGVuKEh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgoKSwKKwkJCXZpb21ham9yc3VidHlwZV9jaGFyaW8sIFZJT0NIQVJfV0lORE9XICsgMik7CisJaWYgKHJjKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJodmM6IGVycm9yIG9wZW5pbmcgdG8gcHJpbWFyeSAlZFxuIiwgcmMpOworCisJaWYgKHZpb3BhdGhfaG9zdExwID09IEh2THBJbmRleEludmFsaWQpCisJCXZpb19zZXRfaG9zdGxwKCk7CisKKwkvKgorCSAqIEFuZCBpZiB0aGUgcHJpbWFyeSBpcyBub3QgdGhlIHNhbWUgYXMgdGhlIGhvc3RpbmcgTFAsIG9wZW4gdG8gdGhlCisJICogaG9zdGluZyBscAorCSAqLworCWlmICgodmlvcGF0aF9ob3N0THAgIT0gSHZMcEluZGV4SW52YWxpZCkgJiYKKwkgICAgKHZpb3BhdGhfaG9zdExwICE9IEh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgoKSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaHZjOiBvcGVuIHBhdGggdG8gaG9zdGluZyAoJWQpXG4iLAorCQkJCXZpb3BhdGhfaG9zdExwKTsKKwkJcmMgPSB2aW9wYXRoX29wZW4odmlvcGF0aF9ob3N0THAsIHZpb21ham9yc3VidHlwZV9jaGFyaW8sCisJCQkJVklPQ0hBUl9XSU5ET1cgKyAyKTsJLyogKzIgZm9yIGZ1ZGdlICovCisJCWlmIChyYykKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkiZXJyb3Igb3BlbmluZyB0byBwYXJ0aXRpb24gJWQ6ICVkXG4iLAorCQkJCXZpb3BhdGhfaG9zdExwLCByYyk7CisJfQorCisJaWYgKHZpb19zZXRIYW5kbGVyKHZpb21ham9yc3VidHlwZV9jaGFyaW8sIGh2Y19oYW5kbGVfZXZlbnQpIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImh2YzogZXJyb3Igc2V0aW5nIGhhbmRsZXIgZm9yIGNvbnNvbGUgZXZlbnRzIVxuIik7CisKKwkvKgorCSAqIEZpcnN0LCB0cnkgdG8gb3BlbiB0aGUgY29uc29sZSB0byB0aGUgaG9zdGluZyBscC4KKwkgKiBXYWl0IG9uIGEgc2VtYXBob3JlIGZvciB0aGUgcmVzcG9uc2UuCisJICovCisJYXRvbWljX3NldCgmd2FpdF9mbGFnLCAwKTsKKwlpZiAoKHZpb3BhdGhfaXNhY3RpdmUodmlvcGF0aF9ob3N0THApKSAmJgorCSAgICAoc2VuZF9vcGVuKHZpb3BhdGhfaG9zdExwLCAmd2FpdF9mbGFnKSA9PSAwKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJodmM6IGhvc3RpbmcgcGFydGl0aW9uICVkXG4iLCB2aW9wYXRoX2hvc3RMcCk7CisJCXdoaWxlIChhdG9taWNfcmVhZCgmd2FpdF9mbGFnKSA9PSAwKQorCQkJbWIoKTsKKwkJYXRvbWljX3NldCgmd2FpdF9mbGFnLCAwKTsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgYW4gYWN0aXZlIGNvbnNvbGUsIHRyeSB0aGUgcHJpbWFyeQorCSAqLworCWlmICgoIXZpb3BhdGhfaXNhY3RpdmUocG9ydF9pbmZvWzBdLmxwKSkgJiYKKwkgICAgKHZpb3BhdGhfaXNhY3RpdmUoSHZMcENvbmZpZ19nZXRQcmltYXJ5THBJbmRleCgpKSkgJiYKKwkgICAgKHNlbmRfb3BlbihIdkxwQ29uZmlnX2dldFByaW1hcnlMcEluZGV4KCksICZ3YWl0X2ZsYWcpID09IDApKSB7CisJCXByaW50ayhLRVJOX0lORk8gImh2Yzogb3BlbmluZyBjb25zb2xlIHRvIHByaW1hcnkgcGFydGl0aW9uXG4iKTsKKwkJd2hpbGUgKGF0b21pY19yZWFkKCZ3YWl0X2ZsYWcpID09IDApCisJCQltYigpOworCX0KKworCS8qIFJlZ2lzdGVyIGFzIGEgdmlvIGRldmljZSB0byByZWNlaXZlIGNhbGxiYWNrcyAqLworCXJjID0gdmlvX3JlZ2lzdGVyX2RyaXZlcigmaHZjX3Zpb19kcml2ZXIpOworCisJcmV0dXJuIHJjOworfQorbW9kdWxlX2luaXQoaHZjX3Zpb19pbml0KTsgLyogYWZ0ZXIgZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMgKi8KKworc3RhdGljIHZvaWQgaHZjX3Zpb19leGl0KHZvaWQpCit7CisJdmlvX3VucmVnaXN0ZXJfZHJpdmVyKCZodmNfdmlvX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChodmNfdmlvX2V4aXQpOworCisvKiB0aGUgZGV2aWNlIHRyZWUgb3JkZXIgZGVmaW5lcyBvdXIgbnVtYmVyaW5nICovCitzdGF0aWMgaW50IGh2Y19maW5kX3Z0eXModm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnZ0eTsKKwlpbnQgbnVtX2ZvdW5kID0gMDsKKworCWZvciAodnR5ID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInZ0eSIpOyB2dHkgIT0gTlVMTDsKKwkJCXZ0eSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKHZ0eSwgInZ0eSIpKSB7CisJCXVpbnQzMl90ICp2dGVybW5vOworCisJCS8qIFdlIGhhdmUgc3RhdGljYWxseSBkZWZpbmVkIHNwYWNlIGZvciBvbmx5IGEgY2VydGFpbiBudW1iZXIKKwkJICogb2YgY29uc29sZSBhZGFwdGVycy4KKwkJICovCisJCWlmICgobnVtX2ZvdW5kID49IE1BWF9OUl9IVkNfQ09OU09MRVMpIHx8CisJCQkJKG51bV9mb3VuZCA+PSBWVFRZX1BPUlRTKSkKKwkJCWJyZWFrOworCisJCXZ0ZXJtbm8gPSAodWludDMyX3QgKilnZXRfcHJvcGVydHkodnR5LCAicmVnIiwgTlVMTCk7CisJCWlmICghdnRlcm1ubykKKwkJCWNvbnRpbnVlOworCisJCWlmICghZGV2aWNlX2lzX2NvbXBhdGlibGUodnR5LCAiSUJNLGlTZXJpZXMtdnR5IikpCisJCQljb250aW51ZTsKKworCQlpZiAobnVtX2ZvdW5kID09IDApCisJCQlhZGRfcHJlZmVycmVkX2NvbnNvbGUoImh2YyIsIDAsIE5VTEwpOworCQlodmNfaW5zdGFudGlhdGUoKnZ0ZXJtbm8sIG51bV9mb3VuZCwgJmh2Y19nZXRfcHV0X29wcyk7CisJCSsrbnVtX2ZvdW5kOworCX0KKworCXJldHVybiBudW1fZm91bmQ7Cit9Citjb25zb2xlX2luaXRjYWxsKGh2Y19maW5kX3Z0eXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMgYi9kcml2ZXJzL2NoYXIvaHZjX3J0YXMuYwppbmRleCA1NzEwNmUwMi4uNGI5N2VhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19ydGFzLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogCS8qIEFsbG9jYXRlIGFuIGh2Y19zdHJ1Y3QgZm9yIHRoZSBjb25zb2xlIGRldmljZSB3ZSBpbnN0YW50aWF0ZWQKIAkgKiBlYXJsaWVyLiAgU2F2ZSBvZmYgaHAgc28gdGhhdCB3ZSBjYW4gcmV0dXJuIGl0IG9uIGV4aXQgKi8KLQlocCA9IGh2Y19hbGxvYyhodmNfcnRhc19jb29raWUsIE5PX0lSUSwgJmh2Y19ydGFzX2dldF9wdXRfb3BzKTsKKwlocCA9IGh2Y19hbGxvYyhodmNfcnRhc19jb29raWUsIE5PX0lSUSwgJmh2Y19ydGFzX2dldF9wdXRfb3BzLCAxNik7CiAJaWYgKElTX0VSUihocCkpCiAJCXJldHVybiBQVFJfRVJSKGhwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h2Y192aW8uYyBiL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKaW5kZXggOWFkZDgxY2UuLmNjOTU5NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfdmlvLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y192aW8uYwpAQCAtOTAsNyArOTAsOCBAQAogCWlmICghdmRldiB8fCAhaWQpCiAJCXJldHVybiAtRVBFUk07CiAKLQlocCA9IGh2Y19hbGxvYyh2ZGV2LT51bml0X2FkZHJlc3MsIHZkZXYtPmlycSwgJmh2Y19nZXRfcHV0X29wcyk7CisJaHAgPSBodmNfYWxsb2ModmRldi0+dW5pdF9hZGRyZXNzLCB2ZGV2LT5pcnEsICZodmNfZ2V0X3B1dF9vcHMsCisJCQlNQVhfVklPX1BVVF9DSEFSUyk7CiAJaWYgKElTX0VSUihocCkpCiAJCXJldHVybiBQVFJfRVJSKGhwKTsKIAlkZXZfc2V0X2RydmRhdGEoJnZkZXYtPmRldiwgaHApOwpAQCAtMTQwLDcgKzE0MSw3IEBACiAKIAlmb3IgKHZ0eSA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJ2dHkiKTsgdnR5ICE9IE5VTEw7CiAJCQl2dHkgPSBvZl9maW5kX25vZGVfYnlfbmFtZSh2dHksICJ2dHkiKSkgewotCQl1aW50MzJfdCAqdnRlcm1ubzsKKwkJY29uc3QgdWludDMyX3QgKnZ0ZXJtbm87CiAKIAkJLyogV2UgaGF2ZSBzdGF0aWNhbGx5IGRlZmluZWQgc3BhY2UgZm9yIG9ubHkgYSBjZXJ0YWluIG51bWJlcgogCQkgKiBvZiBjb25zb2xlIGFkYXB0ZXJzLgpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCWlmIChudW1fZm91bmQgPj0gTUFYX05SX0hWQ19DT05TT0xFUykKIAkJCWJyZWFrOwogCi0JCXZ0ZXJtbm8gPSAodWludDMyX3QgKilnZXRfcHJvcGVydHkodnR5LCAicmVnIiwgTlVMTCk7CisJCXZ0ZXJtbm8gPSBnZXRfcHJvcGVydHkodnR5LCAicmVnIiwgTlVMTCk7CiAJCWlmICghdnRlcm1ubykKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZzaS5jIGIvZHJpdmVycy9jaGFyL2h2c2kuYwppbmRleCA0MWRiODA2Li5hODlhOTVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2c2kuYworKysgYi9kcml2ZXJzL2NoYXIvaHZzaS5jCkBAIC0zMTEsNyArMzExLDggQEAKIAkJCQkvKiBDRCB3ZW50IGF3YXk7IG5vIG1vcmUgY29ubmVjdGlvbiAqLwogCQkJCXByX2RlYnVnKCJodnNpJWk6IENEIGRyb3BwZWRcbiIsIGhwLT5pbmRleCk7CiAJCQkJaHAtPm1jdHJsICY9IFRJT0NNX0NEOwotCQkJCWlmICghKGhwLT50dHktPmZsYWdzICYgQ0xPQ0FMKSkKKwkJCQkvKiBJZiB1c2VybGFuZCBoYXNuJ3QgZG9uZSBhbiBvcGVuKDIpIHlldCwgaHAtPnR0eSBpcyBOVUxMLiAqLworCQkJCWlmIChocC0+dHR5ICYmICEoaHAtPnR0eS0+ZmxhZ3MgJiBDTE9DQUwpKQogCQkJCQkqdG9faGFuZ3VwID0gaHAtPnR0eTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtOTg2LDEwICs5ODcsNyBAQAogCQlzdGFydF9qID0gMDsKICNlbmRpZiAvKiBERUJVRyAqLwogCQl3YWtlX3VwX2FsbCgmaHAtPmVtcHR5cSk7Ci0JCWlmICh0ZXN0X2JpdChUVFlfRE9fV1JJVEVfV0FLRVVQLCAmaHAtPnR0eS0+ZmxhZ3MpCi0JCQkJJiYgaHAtPnR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKQotCQkJaHAtPnR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKGhwLT50dHkpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmhwLT50dHktPndyaXRlX3dhaXQpOworCQl0dHlfd2FrZXVwKGhwLT50dHkpOwogCX0KIAogb3V0OgpAQCAtMTI3NiwxMSArMTI3NCwxMCBAQAogCQkJdnR5ICE9IE5VTEw7CiAJCQl2dHkgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZSh2dHksICJzZXJpYWwiLCAiaHZ0ZXJtLXByb3RvY29sIikpIHsKIAkJc3RydWN0IGh2c2lfc3RydWN0ICpocDsKLQkJdWludDMyX3QgKnZ0ZXJtbm87Ci0JCXVpbnQzMl90ICppcnE7CisJCWNvbnN0IHVpbnQzMl90ICp2dGVybW5vLCAqaXJxOwogCi0JCXZ0ZXJtbm8gPSAodWludDMyX3QgKilnZXRfcHJvcGVydHkodnR5LCAicmVnIiwgTlVMTCk7Ci0JCWlycSA9ICh1aW50MzJfdCAqKWdldF9wcm9wZXJ0eSh2dHksICJpbnRlcnJ1cHRzIiwgTlVMTCk7CisJCXZ0ZXJtbm8gPSBnZXRfcHJvcGVydHkodnR5LCAicmVnIiwgTlVMTCk7CisJCWlycSA9IGdldF9wcm9wZXJ0eSh2dHksICJpbnRlcnJ1cHRzIiwgTlVMTCk7CiAJCWlmICghdnRlcm1ubyB8fCAhaXJxKQogCQkJY29udGludWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vZ2VvZGUtcm5nLmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2dlb2RlLXJuZy5jCmluZGV4IGJlNjFmMjIuLmQzN2NlZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vZ2VvZGUtcm5nLmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9nZW9kZS1ybmcuYwpAQCAtMTA3LDEwICsxMDcsMTQgQEAKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlJORyByZWdpc3RlcmluZyBmYWlsZWQgKCVkKVxuIiwKIAkJICAgICAgIGVycik7Ci0JCWdvdG8gb3V0OworCQlnb3RvIGVycl91bm1hcDsKIAl9CiBvdXQ6CiAJcmV0dXJuIGVycjsKKworZXJyX3VubWFwOgorCWlvdW5tYXAobWVtKTsKKwlnb3RvIG91dDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2ludGVsLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9pbnRlbC1ybmcuYwppbmRleCA2NTk0YmQ1Li5jY2Q3ZTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2ludGVsLXJuZy5jCisrKyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vaW50ZWwtcm5nLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUk5HIHJlZ2lzdGVyaW5nIGZhaWxlZCAoJWQpXG4iLAogCQkgICAgICAgZXJyKTsKLQkJZ290byBvdXQ7CisJCWdvdG8gZXJyX3VubWFwOwogCX0KIG91dDoKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9vbWFwLXJuZy5jCmluZGV4IDgxOTUxNmIuLmEwMWQ3OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vb21hcC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL29tYXAtcm5nLmMKQEAgLTI1LDEyICsyNSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9od19yYW5kb20uaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jbG9jay5oPgogCiAjZGVmaW5lIFJOR19PVVRfUkVHCQkweDAwCQkvKiBPdXRwdXQgcmVnaXN0ZXIgKi8KICNkZWZpbmUgUk5HX1NUQVRfUkVHCQkweDA0CQkvKiBTdGF0dXMgcmVnaXN0ZXIKQEAgLTUyLDcgKzUyLDcgQEAKIAogc3RhdGljIHZvaWQgX19pb21lbSAqcm5nX2Jhc2U7CiBzdGF0aWMgc3RydWN0IGNsayAqcm5nX2ljazsKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlICpybmdfZGV2Oworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJuZ19kZXY7CiAKIHN0YXRpYyB1MzIgb21hcF9ybmdfcmVhZF9yZWcoaW50IHJlZykKIHsKQEAgLTgzLDkgKzgzLDggQEAKIAkuZGF0YV9yZWFkCT0gb21hcF9ybmdfZGF0YV9yZWFkLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgb21hcF9ybmdfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGludCBfX2luaXQgb21hcF9ybmdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXMsICptZW07CiAJaW50IHJldDsKIApAQCAtOTUsMTYgKzk0LDE0IEBACiAJICovCiAJQlVHX09OKHJuZ19kZXYpOwogCi0gICAgCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQlybmdfaWNrID0gY2xrX2dldChOVUxMLCAicm5nX2ljayIpOwogCQlpZiAoSVNfRVJSKHJuZ19pY2spKSB7Ci0JCQlkZXZfZXJyKGRldiwgIkNvdWxkIG5vdCBnZXQgcm5nX2lja1xuIik7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgZ2V0IHJuZ19pY2tcbiIpOwogCQkJcmV0ID0gUFRSX0VSUihybmdfaWNrKTsKIAkJCXJldHVybiByZXQ7Ci0JCX0KLQkJZWxzZSB7Ci0JCQljbGtfdXNlKHJuZ19pY2spOwotCQl9CisJCX0gZWxzZQorCQkJY2xrX2VuYWJsZShybmdfaWNrKTsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpAQCAtMTE3LDcgKzExNCw3IEBACiAJaWYgKG1lbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JZGV2X3NldF9kcnZkYXRhKGRldiwgbWVtKTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgbWVtKTsKIAlybmdfYmFzZSA9ICh1MzIgX19pb21lbSAqKWlvX3AydihyZXMtPnN0YXJ0KTsKIAogCXJldCA9IGh3cm5nX3JlZ2lzdGVyKCZvbWFwX3JuZ19vcHMpOwpAQCAtMTI3LDI1ICsxMjQsMjUgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlkZXZfaW5mbyhkZXYsICJPTUFQIFJhbmRvbSBOdW1iZXIgR2VuZXJhdG9yIHZlci4gJTAyeFxuIiwKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiT01BUCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciB2ZXIuICUwMnhcbiIsCiAJCW9tYXBfcm5nX3JlYWRfcmVnKFJOR19SRVZfUkVHKSk7CiAJb21hcF9ybmdfd3JpdGVfcmVnKFJOR19NQVNLX1JFRywgMHgxKTsKIAotCXJuZ19kZXYgPSBkZXY7CisJcm5nX2RldiA9IHBkZXY7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2V4aXQgb21hcF9ybmdfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19leGl0IG9tYXBfcm5nX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHJlc291cmNlICptZW0gPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CiAKIAlod3JuZ191bnJlZ2lzdGVyKCZvbWFwX3JuZ19vcHMpOwogCiAJb21hcF9ybmdfd3JpdGVfcmVnKFJOR19NQVNLX1JFRywgMHgwKTsKIAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQljbGtfdW51c2Uocm5nX2ljayk7CisJCWNsa19kaXNhYmxlKHJuZ19pY2spOwogCQljbGtfcHV0KHJuZ19pY2spOwogCX0KIApAQCAtMTU3LDE4ICsxNTQsMTYgQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgaW50IG9tYXBfcm5nX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBvbWFwX3JuZ19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQogewogCW9tYXBfcm5nX3dyaXRlX3JlZyhSTkdfTUFTS19SRUcsIDB4MCk7Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvbWFwX3JuZ19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzc2FnZSwgdTMyIGxldmVsKQorc3RhdGljIGludCBvbWFwX3JuZ19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlvbWFwX3JuZ193cml0ZV9yZWcoUk5HX01BU0tfUkVHLCAweDEpOwotCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKICNlbHNlCkBAIC0xNzksOSArMTc0LDExIEBACiAjZW5kaWYKIAogCi1zdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgb21hcF9ybmdfZHJpdmVyID0gewotCS5uYW1lCQk9ICJvbWFwX3JuZyIsCi0JLmJ1cwkJPSAmcGxhdGZvcm1fYnVzX3R5cGUsCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX3JuZ19kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJCT0gIm9tYXBfcm5nIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCX0sCiAJLnByb2JlCQk9IG9tYXBfcm5nX3Byb2JlLAogCS5yZW1vdmUJCT0gX19leGl0X3Aob21hcF9ybmdfcmVtb3ZlKSwKIAkuc3VzcGVuZAk9IG9tYXBfcm5nX3N1c3BlbmQsCkBAIC0xOTMsMTIgKzE5MCwxMiBAQAogCWlmICghY3B1X2lzX29tYXAxNnh4KCkgJiYgIWNwdV9pc19vbWFwMjR4eCgpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9tYXBfcm5nX2RyaXZlcik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF9ybmdfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfcm5nX2V4aXQodm9pZCkKIHsKLQlkcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9ybmdfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9ybmdfZHJpdmVyKTsKIH0KIAogbW9kdWxlX2luaXQob21hcF9ybmdfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDBhYTVkNjAuLjg0M2QzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC0zNDI4LDYgKzM0MjgsNyBAQAogCiAJcnYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXBtaV9yZWN2X21zZyksIEdGUF9BVE9NSUMpOwogCWlmIChydikgeworCQlydi0+dXNlciA9IE5VTEw7CiAJCXJ2LT5kb25lID0gZnJlZV9yZWN2X21zZzsKIAkJYXRvbWljX2luYygmcmVjdl9tc2dfaW51c2VfY291bnQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggZjU3ZWJhMC4uYWJjYTk4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTQwMiwxMCArNDAyLDEwIEBACiAJCQlzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGEsCiAJCQlzbWlfaW5mby0+Y3Vycl9tc2ctPmRhdGFfc2l6ZSk7CiAJCXNtaV9pbmZvLT5zaV9zdGF0ZSA9IFNJX0dFVFRJTkdfRVZFTlRTOwotCX0gZWxzZSBpZiAoc21pX2luZm8tPm1zZ19mbGFncyAmIE9FTV9EQVRBX0FWQUlMKSB7Ci0JCWlmIChzbWlfaW5mby0+b2VtX2RhdGFfYXZhaWxfaGFuZGxlcikKLQkJCWlmIChzbWlfaW5mby0+b2VtX2RhdGFfYXZhaWxfaGFuZGxlcihzbWlfaW5mbykpCi0JCQkJZ290byByZXRyeTsKKwl9IGVsc2UgaWYgKHNtaV9pbmZvLT5tc2dfZmxhZ3MgJiBPRU1fREFUQV9BVkFJTCAmJgorCSAgICAgICAgICAgc21pX2luZm8tPm9lbV9kYXRhX2F2YWlsX2hhbmRsZXIpIHsKKwkJaWYgKHNtaV9pbmZvLT5vZW1fZGF0YV9hdmFpbF9oYW5kbGVyKHNtaV9pbmZvKSkKKwkJCWdvdG8gcmV0cnk7CiAJfSBlbHNlIHsKIAkJc21pX2luZm8tPnNpX3N0YXRlID0gU0lfTk9STUFMOwogCX0KQEAgLTI0ODEsNiArMjQ4MSw3IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwbWlfcGNpX2RyaXZlcik7CiAjZW5kaWYKKwkJZHJpdmVyX3VucmVnaXN0ZXIoJmlwbWlfZHJpdmVyKTsKIAkJcHJpbnRrKCJpcG1pX3NpOiBVbmFibGUgdG8gZmluZCBhbnkgU3lzdGVtIEludGVyZmFjZShzKVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIva2V5Ym9hcmQuYyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCmluZGV4IDA1NmViZTguLjNlOTBhYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCisrKyBiL2RyaXZlcnMvY2hhci9rZXlib2FyZC5jCkBAIC0xMDcsNyArMTA3LDYgQEAKIAogc3RydWN0IGtiZF9zdHJ1Y3Qga2JkX3RhYmxlW01BWF9OUl9DT05TT0xFU107CiBzdGF0aWMgc3RydWN0IGtiZF9zdHJ1Y3QgKmtiZCA9IGtiZF90YWJsZTsKLXN0YXRpYyBzdHJ1Y3Qga2JkX3N0cnVjdCBrYmQwOwogCiBpbnQgc3Bhd25waWQsIHNwYXduc2lnOwogCkBAIC0yMjMsMTMgKzIyMiwxMyBAQAogewogCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGU7CiAKLQlsaXN0X2Zvcl9lYWNoKG5vZGUsJmtiZF9oYW5kbGVyLmhfbGlzdCkgeworCWxpc3RfZm9yX2VhY2gobm9kZSwgJmtiZF9oYW5kbGVyLmhfbGlzdCkgewogCQlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUgPSB0b19oYW5kbGVfaChub2RlKTsKIAkJaWYgKHRlc3RfYml0KEVWX1NORCwgaGFuZGxlLT5kZXYtPmV2Yml0KSkgewogCQkJaWYgKHRlc3RfYml0KFNORF9UT05FLCBoYW5kbGUtPmRldi0+c25kYml0KSkKLQkJCQlpbnB1dF9ldmVudChoYW5kbGUtPmRldiwgRVZfU05ELCBTTkRfVE9ORSwgMCk7CisJCQkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfU05ELCBTTkRfVE9ORSwgMCk7CiAJCQlpZiAodGVzdF9iaXQoU05EX0JFTEwsIGhhbmRsZS0+ZGV2LT5zbmRiaXQpKQotCQkJCWlucHV0X2V2ZW50KGhhbmRsZS0+ZGV2LCBFVl9TTkQsIFNORF9CRUxMLCAwKTsKKwkJCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9TTkQsIFNORF9CRUxMLCAwKTsKIAkJfQogCX0KIH0KQEAgLTI0NywxMSArMjQ2LDExIEBACiAJCQlzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUgPSB0b19oYW5kbGVfaChub2RlKTsKIAkJCWlmICh0ZXN0X2JpdChFVl9TTkQsIGhhbmRsZS0+ZGV2LT5ldmJpdCkpIHsKIAkJCQlpZiAodGVzdF9iaXQoU05EX1RPTkUsIGhhbmRsZS0+ZGV2LT5zbmRiaXQpKSB7Ci0JCQkJCWlucHV0X2V2ZW50KGhhbmRsZS0+ZGV2LCBFVl9TTkQsIFNORF9UT05FLCBoeik7CisJCQkJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX1NORCwgU05EX1RPTkUsIGh6KTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCWlmICh0ZXN0X2JpdChTTkRfQkVMTCwgaGFuZGxlLT5kZXYtPnNuZGJpdCkpIHsKLQkJCQkJaW5wdXRfZXZlbnQoaGFuZGxlLT5kZXYsIEVWX1NORCwgU05EX0JFTEwsIDEpOworCQkJCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9TTkQsIFNORF9CRUxMLCAxKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpAQCAtMjcyLDE1ICsyNzEsMTUgQEAKIAl1bnNpZ25lZCBpbnQgZCA9IDA7CiAJdW5zaWduZWQgaW50IHAgPSAwOwogCi0JbGlzdF9mb3JfZWFjaChub2RlLCZrYmRfaGFuZGxlci5oX2xpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoKG5vZGUsICZrYmRfaGFuZGxlci5oX2xpc3QpIHsKIAkJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlID0gdG9faGFuZGxlX2gobm9kZSk7CiAJCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhhbmRsZS0+ZGV2OwogCiAJCWlmICh0ZXN0X2JpdChFVl9SRVAsIGRldi0+ZXZiaXQpKSB7CiAJCQlpZiAocmVwLT5kZWxheSA+IDApCi0JCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9SRVAsIFJFUF9ERUxBWSwgcmVwLT5kZWxheSk7CisJCQkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfUkVQLCBSRVBfREVMQVksIHJlcC0+ZGVsYXkpOwogCQkJaWYgKHJlcC0+cGVyaW9kID4gMCkKLQkJCQlpbnB1dF9ldmVudChkZXYsIEVWX1JFUCwgUkVQX1BFUklPRCwgcmVwLT5wZXJpb2QpOworCQkJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX1JFUCwgUkVQX1BFUklPRCwgcmVwLT5wZXJpb2QpOwogCQkJZCA9IGRldi0+cmVwW1JFUF9ERUxBWV07CiAJCQlwID0gZGV2LT5yZXBbUkVQX1BFUklPRF07CiAJCX0KQEAgLTk4OCw3ICs5ODcsNyBAQAogICogaW50ZXJydXB0IHJvdXRpbmVzIGZvciB0aGlzIHRoaW5nIGFsbG93cyB1cyB0byBlYXNpbHkgbWFzawogICogdGhpcyB3aGVuIHdlIGRvbid0IHdhbnQgYW55IG9mIHRoZSBhYm92ZSB0byBoYXBwZW4uCiAgKiBUaGlzIGFsbG93cyBmb3IgZWFzeSBhbmQgZWZmaWNpZW50IHJhY2UtY29uZGl0aW9uIHByZXZlbnRpb24KLSAqIGZvciBrYmRfcmVmcmVzaF9sZWRzID0+IGlucHV0X2V2ZW50KGRldiwgRVZfTEVELCAuLi4pID0+IC4uLgorICogZm9yIGtiZF9zdGFydCA9PiBpbnB1dF9pbmplY3RfZXZlbnQoZGV2LCBFVl9MRUQsIC4uLikgPT4gLi4uCiAgKi8KIAogc3RhdGljIHZvaWQga2JkX2JoKHVuc2lnbmVkIGxvbmcgZHVtbXkpCkBAIC05OTgsMTEgKzk5NywxMSBAQAogCiAJaWYgKGxlZHMgIT0gbGVkc3RhdGUpIHsKIAkJbGlzdF9mb3JfZWFjaChub2RlLCAma2JkX2hhbmRsZXIuaF9saXN0KSB7Ci0JCQlzdHJ1Y3QgaW5wdXRfaGFuZGxlICogaGFuZGxlID0gdG9faGFuZGxlX2gobm9kZSk7Ci0JCQlpbnB1dF9ldmVudChoYW5kbGUtPmRldiwgRVZfTEVELCBMRURfU0NST0xMTCwgISEobGVkcyAmIDB4MDEpKTsKLQkJCWlucHV0X2V2ZW50KGhhbmRsZS0+ZGV2LCBFVl9MRUQsIExFRF9OVU1MLCAgICAhIShsZWRzICYgMHgwMikpOwotCQkJaW5wdXRfZXZlbnQoaGFuZGxlLT5kZXYsIEVWX0xFRCwgTEVEX0NBUFNMLCAgICEhKGxlZHMgJiAweDA0KSk7Ci0JCQlpbnB1dF9zeW5jKGhhbmRsZS0+ZGV2KTsKKwkJCXN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSA9IHRvX2hhbmRsZV9oKG5vZGUpOworCQkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfTEVELCBMRURfU0NST0xMTCwgISEobGVkcyAmIDB4MDEpKTsKKwkJCWlucHV0X2luamVjdF9ldmVudChoYW5kbGUsIEVWX0xFRCwgTEVEX05VTUwsICAgICEhKGxlZHMgJiAweDAyKSk7CisJCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9MRUQsIExFRF9DQVBTTCwgICAhIShsZWRzICYgMHgwNCkpOworCQkJaW5wdXRfaW5qZWN0X2V2ZW50KGhhbmRsZSwgRVZfU1lOLCBTWU5fUkVQT1JULCAwKTsKIAkJfQogCX0KIApAQCAtMTAxMSwyMyArMTAxMCw2IEBACiAKIERFQ0xBUkVfVEFTS0xFVF9ESVNBQkxFRChrZXlib2FyZF90YXNrbGV0LCBrYmRfYmgsIDApOwogCi0vKgotICogVGhpcyBhbGxvd3MgYSBuZXdseSBwbHVnZ2VkIGtleWJvYXJkIHRvIHBpY2sgdGhlIExFRCBzdGF0ZS4KLSAqLwotc3RhdGljIHZvaWQga2JkX3JlZnJlc2hfbGVkcyhzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpCi17Ci0JdW5zaWduZWQgY2hhciBsZWRzID0gbGVkc3RhdGU7Ci0KLQl0YXNrbGV0X2Rpc2FibGUoJmtleWJvYXJkX3Rhc2tsZXQpOwotCWlmIChsZWRzICE9IDB4ZmYpIHsKLQkJaW5wdXRfZXZlbnQoaGFuZGxlLT5kZXYsIEVWX0xFRCwgTEVEX1NDUk9MTEwsICEhKGxlZHMgJiAweDAxKSk7Ci0JCWlucHV0X2V2ZW50KGhhbmRsZS0+ZGV2LCBFVl9MRUQsIExFRF9OVU1MLCAgICAhIShsZWRzICYgMHgwMikpOwotCQlpbnB1dF9ldmVudChoYW5kbGUtPmRldiwgRVZfTEVELCBMRURfQ0FQU0wsICAgISEobGVkcyAmIDB4MDQpKTsKLQkJaW5wdXRfc3luYyhoYW5kbGUtPmRldik7Ci0JfQotCXRhc2tsZXRfZW5hYmxlKCZrZXlib2FyZF90YXNrbGV0KTsKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1g4NikgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkgfHwgZGVmaW5lZChDT05GSUdfQUxQSEEpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX01JUFMpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpIHx8XAogICAgIGRlZmluZWQoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfU1VQRVJIKSB8fFwKQEAgLTEwNDMsNyArMTAyNSw3IEBACiAJIDQ4LCA0OSwgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLAogCSA2NCwgNjUsIDY2LCA2NywgNjgsIDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1LCA3NiwgNzcsIDc4LCA3OSwKIAkgODAsIDgxLCA4MiwgODMsIDg0LDExOCwgODYsIDg3LCA4OCwxMTUsMTIwLDExOSwxMjEsMTEyLDEyMywgOTIsCi0JMjg0LDI4NSwzMDksMjk4LDMxMiwgOTEsMzI3LDMyOCwzMjksMzMxLDMzMywzMzUsMzM2LDMzNywzMzgsMzM5LAorCTI4NCwyODUsMzA5LCAgMCwzMTIsIDkxLDMyNywzMjgsMzI5LDMzMSwzMzMsMzM1LDMzNiwzMzcsMzM4LDMzOSwKIAkzNjcsMjg4LDMwMiwzMDQsMzUwLCA4OSwzMzQsMzI2LDI2NywxMjYsMjY4LDI2OSwxMjUsMzQ3LDM0OCwzNDksCiAJMzYwLDI2MSwyNjIsMjYzLDI2OCwzNzYsMTAwLDEwMSwzMjEsMzE2LDM3MywyODYsMjg5LDEwMiwzNTEsMzU1LAogCTEwMywxMDQsMTA1LDI3NSwyODcsMjc5LDMwNiwxMDYsMjc0LDEwNywyOTQsMzY0LDM1OCwzNjMsMzYyLDM2MSwKQEAgLTEwNjUsMzggKzEwNDcsNTUgQEAKIHN0YXRpYyBpbnQgZW11bGF0ZV9yYXcoc3RydWN0IHZjX2RhdGEgKnZjLCB1bnNpZ25lZCBpbnQga2V5Y29kZSwKIAkJICAgICAgIHVuc2lnbmVkIGNoYXIgdXBfZmxhZykKIHsKLQlpZiAoa2V5Y29kZSA+IDI1NSB8fCAheDg2X2tleWNvZGVzW2tleWNvZGVdKQotCQlyZXR1cm4gLTE7CisJaW50IGNvZGU7CiAKIAlzd2l0Y2ggKGtleWNvZGUpIHsKIAkJY2FzZSBLRVlfUEFVU0U6CiAJCQlwdXRfcXVldWUodmMsIDB4ZTEpOwogCQkJcHV0X3F1ZXVlKHZjLCAweDFkIHwgdXBfZmxhZyk7CiAJCQlwdXRfcXVldWUodmMsIDB4NDUgfCB1cF9mbGFnKTsKLQkJCXJldHVybiAwOworCQkJYnJlYWs7CisKIAkJY2FzZSBLRVlfSEFOR0VVTDoKIAkJCWlmICghdXBfZmxhZykKIAkJCQlwdXRfcXVldWUodmMsIDB4ZjIpOwotCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwogCQljYXNlIEtFWV9IQU5KQToKIAkJCWlmICghdXBfZmxhZykKIAkJCQlwdXRfcXVldWUodmMsIDB4ZjEpOwotCQkJcmV0dXJuIDA7Ci0JfQorCQkJYnJlYWs7CiAKLQlpZiAoa2V5Y29kZSA9PSBLRVlfU1lTUlEgJiYgc3lzcnFfYWx0KSB7Ci0JCXB1dF9xdWV1ZSh2YywgMHg1NCB8IHVwX2ZsYWcpOwotCQlyZXR1cm4gMDsKLQl9CisJCWNhc2UgS0VZX1NZU1JROgorCQkJLyoKKwkJCSAqIFJlYWwgQVQga2V5Ym9hcmRzICh0aGF0J3Mgd2hhdCB3ZSdyZSB0cnlpbmcKKwkJCSAqIHRvIGVtdWxhdGUgaGVyZSBlbWl0IDB4ZTAgMHgyYSAweGUwIDB4Mzcgd2hlbgorCQkJICogcHJlc3NpbmcgUHJ0U2MvU3lzUnEgYWxvbmUsIGJ1dCBzaW1wbHkgMHg1NAorCQkJICogd2hlbiBwcmVzc2luZyBBbHQrUHJ0U2MvU3lzUnEuCisJCQkgKi8KKwkJCWlmIChzeXNycV9hbHQpIHsKKwkJCQlwdXRfcXVldWUodmMsIDB4NTQgfCB1cF9mbGFnKTsKKwkJCX0gZWxzZSB7CisJCQkJcHV0X3F1ZXVlKHZjLCAweGUwKTsKKwkJCQlwdXRfcXVldWUodmMsIDB4MmEgfCB1cF9mbGFnKTsKKwkJCQlwdXRfcXVldWUodmMsIDB4ZTApOworCQkJCXB1dF9xdWV1ZSh2YywgMHgzNyB8IHVwX2ZsYWcpOworCQkJfQorCQkJYnJlYWs7CiAKLQlpZiAoeDg2X2tleWNvZGVzW2tleWNvZGVdICYgMHgxMDApCi0JCXB1dF9xdWV1ZSh2YywgMHhlMCk7CisJCWRlZmF1bHQ6CisJCQlpZiAoa2V5Y29kZSA+IDI1NSkKKwkJCQlyZXR1cm4gLTE7CiAKLQlwdXRfcXVldWUodmMsICh4ODZfa2V5Y29kZXNba2V5Y29kZV0gJiAweDdmKSB8IHVwX2ZsYWcpOworCQkJY29kZSA9IHg4Nl9rZXljb2Rlc1trZXljb2RlXTsKKwkJCWlmICghY29kZSkKKwkJCQlyZXR1cm4gLTE7CiAKLQlpZiAoa2V5Y29kZSA9PSBLRVlfU1lTUlEpIHsKLQkJcHV0X3F1ZXVlKHZjLCAweGUwKTsKLQkJcHV0X3F1ZXVlKHZjLCAweDM3IHwgdXBfZmxhZyk7CisJCQlpZiAoY29kZSAmIDB4MTAwKQorCQkJCXB1dF9xdWV1ZSh2YywgMHhlMCk7CisJCQlwdXRfcXVldWUodmMsIChjb2RlICYgMHg3ZikgfCB1cF9mbGFnKTsKKworCQkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xMjk4LDE2ICsxMjk3LDE1IEBACiAJaWYgKGkgPT0gQlROX01JU0MgJiYgIXRlc3RfYml0KEVWX1NORCwgZGV2LT5ldmJpdCkpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKCEoaGFuZGxlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlucHV0X2hhbmRsZSksIEdGUF9LRVJORUwpKSkKKwloYW5kbGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaW5wdXRfaGFuZGxlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoYW5kbGUpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldChoYW5kbGUsIDAsIHNpemVvZihzdHJ1Y3QgaW5wdXRfaGFuZGxlKSk7CiAKIAloYW5kbGUtPmRldiA9IGRldjsKIAloYW5kbGUtPmhhbmRsZXIgPSBoYW5kbGVyOwogCWhhbmRsZS0+bmFtZSA9ICJrYmQiOwogCiAJaW5wdXRfb3Blbl9kZXZpY2UoaGFuZGxlKTsKLQlrYmRfcmVmcmVzaF9sZWRzKGhhbmRsZSk7CiAKIAlyZXR1cm4gaGFuZGxlOwogfQpAQCAtMTMxOCw2ICsxMzE2LDI0IEBACiAJa2ZyZWUoaGFuZGxlKTsKIH0KIAorLyoKKyAqIFN0YXJ0IGtleWJvYXJkIGhhbmRsZXIgb24gdGhlIG5ldyBrZXlib2FyZCBieSByZWZyZXNoaW5nIExFRCBzdGF0ZSB0bworICogbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIHZvaWQga2JkX3N0YXJ0KHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSkKK3sKKwl1bnNpZ25lZCBjaGFyIGxlZHMgPSBsZWRzdGF0ZTsKKworCXRhc2tsZXRfZGlzYWJsZSgma2V5Ym9hcmRfdGFza2xldCk7CisJaWYgKGxlZHMgIT0gMHhmZikgeworCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9MRUQsIExFRF9TQ1JPTExMLCAhIShsZWRzICYgMHgwMSkpOworCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9MRUQsIExFRF9OVU1MLCAgICAhIShsZWRzICYgMHgwMikpOworCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9MRUQsIExFRF9DQVBTTCwgICAhIShsZWRzICYgMHgwNCkpOworCQlpbnB1dF9pbmplY3RfZXZlbnQoaGFuZGxlLCBFVl9TWU4sIFNZTl9SRVBPUlQsIDApOworCX0KKwl0YXNrbGV0X2VuYWJsZSgma2V5Ym9hcmRfdGFza2xldCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkIGtiZF9pZHNbXSA9IHsKIAl7CiAgICAgICAgICAgICAgICAgLmZsYWdzID0gSU5QVVRfREVWSUNFX0lEX01BVENIX0VWQklULApAQCAtMTMzOCw2ICsxMzU0LDcgQEAKIAkuZXZlbnQJCT0ga2JkX2V2ZW50LAogCS5jb25uZWN0CT0ga2JkX2Nvbm5lY3QsCiAJLmRpc2Nvbm5lY3QJPSBrYmRfZGlzY29ubmVjdCwKKwkuc3RhcnQJCT0ga2JkX3N0YXJ0LAogCS5uYW1lCQk9ICJrYmQiLAogCS5pZF90YWJsZQk9IGtiZF9pZHMsCiB9OwpAQCAtMTM0NiwxNSArMTM2MywxNSBAQAogewogCWludCBpOwogCi0gICAgICAgIGtiZDAubGVkZmxhZ3N0YXRlID0ga2JkMC5kZWZhdWx0X2xlZGZsYWdzdGF0ZSA9IEtCRF9ERUZMRURTOwotICAgICAgICBrYmQwLmxlZG1vZGUgPSBMRURfU0hPV19GTEFHUzsKLSAgICAgICAga2JkMC5sb2Nrc3RhdGUgPSBLQkRfREVGTE9DSzsKLSAgICAgICAga2JkMC5zbG9ja3N0YXRlID0gMDsKLSAgICAgICAga2JkMC5tb2RlZmxhZ3MgPSBLQkRfREVGTU9ERTsKLSAgICAgICAga2JkMC5rYmRtb2RlID0gVkNfWExBVEU7Ci0KLSAgICAgICAgZm9yIChpID0gMCA7IGkgPCBNQVhfTlJfQ09OU09MRVMgOyBpKyspCi0gICAgICAgICAgICAgICAga2JkX3RhYmxlW2ldID0ga2JkMDsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7CisJCWtiZF90YWJsZVtpXS5sZWRmbGFnc3RhdGUgPSBLQkRfREVGTEVEUzsKKwkJa2JkX3RhYmxlW2ldLmRlZmF1bHRfbGVkZmxhZ3N0YXRlID0gS0JEX0RFRkxFRFM7CisJCWtiZF90YWJsZVtpXS5sZWRtb2RlID0gTEVEX1NIT1dfRkxBR1M7CisJCWtiZF90YWJsZVtpXS5sb2Nrc3RhdGUgPSBLQkRfREVGTE9DSzsKKwkJa2JkX3RhYmxlW2ldLnNsb2Nrc3RhdGUgPSAwOworCQlrYmRfdGFibGVbaV0ubW9kZWZsYWdzID0gS0JEX0RFRk1PREU7CisJCWtiZF90YWJsZVtpXS5rYmRtb2RlID0gVkNfWExBVEU7CisJfQogCiAJaW5wdXRfcmVnaXN0ZXJfaGFuZGxlcigma2JkX2hhbmRsZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCA0ZWE3YmQ1Li5hMzY5ZGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW94YS5jCisrKyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKQEAgLTE0Miw2ICsxNDIsNyBAQAogCiBzdGF0aWMgbW94YV9ib2FyZF9jb25mIG1veGFfYm9hcmRzW01BWF9CT0FSRFNdOwogc3RhdGljIHZvaWQgX19pb21lbSAqbW94YUJhc2VBZGRyW01BWF9CT0FSRFNdOworc3RhdGljIGludCBsb2Fkc3RhdFtNQVhfQk9BUkRTXTsKIAogc3RydWN0IG1veGFfc3RyIHsKIAlpbnQgdHlwZTsKQEAgLTE2ODgsNiArMTY4OSw4IEBACiAJaWYgKG1veGFDYXJkID09IDApCiAJCXJldHVybiAoLTEpOwogCWZvciAoY2FyZCA9IDA7IGNhcmQgPCBNQVhfQk9BUkRTOyBjYXJkKyspIHsKKwkgICAgICAgIGlmIChsb2Fkc3RhdFtjYXJkXSA9PSAwKQorCQkJY29udGludWU7CiAJCWlmICgocG9ydHMgPSBtb3hhX2JvYXJkc1tjYXJkXS5udW1Qb3J0cykgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlpZiAocmVhZGIobW94YUludFBlbmRbY2FyZF0pID09IDB4ZmYpIHsKQEAgLTI5MDMsNiArMjkwNiw3IEBACiAJCX0KIAkJYnJlYWs7CiAJfQorCWxvYWRzdGF0W2NhcmRub10gPSAxOwogCXJldHVybiAoMCk7CiB9CiAKQEAgLTI5MjAsNyArMjkyNCw3IEBACiAJbGVuMSA9IGxlbiA+PiAxOwogCXB0ciA9ICh1c2hvcnQgKikgbW94YUJ1ZmY7CiAJZm9yIChpID0gMDsgaSA8IGxlbjE7IGkrKykKLQkJdXN1bSArPSAqKHB0ciArIGkpOworCQl1c3VtICs9IGxlMTZfdG9fY3B1KCoocHRyICsgaSkpOwogCXJldHJ5ID0gMDsKIAlkbyB7CiAJCWxlbjEgPSBsZW4gPj4gMTsKQEAgLTI5OTIsNyArMjk5Niw3IEBACiAJd2xlbiA9IGxlbiA+PiAxOwogCXVwdHIgPSAodXNob3J0ICopIG1veGFCdWZmOwogCWZvciAoaSA9IDA7IGkgPCB3bGVuOyBpKyspCi0JCXVzdW0gKz0gdXB0cltpXTsKKwkJdXN1bSArPSBsZTE2X3RvX2NwdSh1cHRyW2ldKTsKIAlyZXRyeSA9IDA7CiAJaiA9IDA7CiAJZG8gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCmluZGV4IDY0NWViODEuLjg0ZTVhNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKQEAgLTIyMSw3ICsyMjEsNiBAQAogCS5ncGlvX2NoYW5nZQk9IHBjODczNnhfZ3Bpb19jaGFuZ2UsCiAJLmdwaW9fY3VycmVudAk9IHBjODczNnhfZ3Bpb19jdXJyZW50CiB9OwotRVhQT1JUX1NZTUJPTChwYzg3MzZ4X2dwaW9fb3BzKTsKIAogc3RhdGljIGludCBwYzg3MzZ4X2dwaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zbnNjLmMgYi9kcml2ZXJzL2NoYXIvc25zYy5jCmluZGV4IGFmYzZlZGEuLjA3ZTBiNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zbnNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3Nuc2MuYwpAQCAtMzc0LDcgKzM3NCwxMiBAQAogCXN0cnVjdCBzeXNjdGxfZGF0YV9zICpzY2Q7CiAJdm9pZCAqc2FsYnVmOwogCWRldl90IGZpcnN0X2RldiwgZGV2OwotCW5hc2lkX3QgZXZlbnRfbmFzaWQgPSBpYTY0X3NuX2dldF9jb25zb2xlX25hc2lkKCk7CisJbmFzaWRfdCBldmVudF9uYXNpZDsKKworCWlmICghaWE2NF9wbGF0Zm9ybV9pcygic24yIikpCisJCXJldHVybiAtRU5PREVWOworCisJZXZlbnRfbmFzaWQgPSBpYTY0X3NuX2dldF9jb25zb2xlX25hc2lkKCk7CiAKIAlpZiAoYWxsb2NfY2hyZGV2X3JlZ2lvbigmZmlyc3RfZGV2LCAwLCBudW1fY25vZGVzLAogCQkJCVNZU0NUTF9CQVNFTkFNRSkgPCAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IGIyZGJiZGIuLjJmMDdiMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC0zOTEsOCArMzkxLDggQEAKICNkZWZpbmUgREVTQ19MSVNUX1NJWkUgNDA5NgogCiAjZGVmaW5lIE1BU0tfUEFSSVRZICBCSVQxCi0jZGVmaW5lIE1BU0tfRlJBTUlORyBCSVQyCi0jZGVmaW5lIE1BU0tfQlJFQUsgICBCSVQzCisjZGVmaW5lIE1BU0tfRlJBTUlORyBCSVQwCisjZGVmaW5lIE1BU0tfQlJFQUsgICBCSVQxNAogI2RlZmluZSBNQVNLX09WRVJSVU4gQklUNAogCiAjZGVmaW5lIEdTUiAgIDB4MDAgLyogZ2xvYmFsIHN0YXR1cyAqLwpAQCAtMTgwMCwxNyArMTgwMCwxNyBAQAogCiAJCQlzdGF0ID0gMDsKIAotCQkJaWYgKChzdGF0dXMgPSAqKHArMSkgJiAoQklUOSArIEJJVDgpKSkgewotCQkJCWlmIChzdGF0dXMgJiBCSVQ5KQorCQkJaWYgKChzdGF0dXMgPSAqKHArMSkgJiAoQklUMSArIEJJVDApKSkgeworCQkJCWlmIChzdGF0dXMgJiBCSVQxKQogCQkJCQlpY291bnQtPnBhcml0eSsrOwotCQkJCWVsc2UgaWYgKHN0YXR1cyAmIEJJVDgpCisJCQkJZWxzZSBpZiAoc3RhdHVzICYgQklUMCkKIAkJCQkJaWNvdW50LT5mcmFtZSsrOwogCQkJCS8qIGRpc2NhcmQgY2hhciBpZiB0dHkgY29udHJvbCBmbGFncyBzYXkgc28gKi8KIAkJCQlpZiAoc3RhdHVzICYgaW5mby0+aWdub3JlX3N0YXR1c19tYXNrKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoc3RhdHVzICYgQklUOSkKKwkJCQlpZiAoc3RhdHVzICYgQklUMSkKIAkJCQkJc3RhdCA9IFRUWV9QQVJJVFk7Ci0JCQkJZWxzZSBpZiAoc3RhdHVzICYgQklUOCkKKwkJCQllbHNlIGlmIChzdGF0dXMgJiBCSVQwKQogCQkJCQlzdGF0ID0gVFRZX0ZSQU1FOwogCQkJfQogCQkJaWYgKHR0eSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuaCBiL2RyaXZlcnMvY2hhci90cG0vdHBtX2F0bWVsLmgKaW5kZXggMmU2OGVlYi4uYWVmZDY4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3RwbS90cG1fYXRtZWwuaAorKysgYi9kcml2ZXJzL2NoYXIvdHBtL3RwbV9hdG1lbC5oCkBAIC0zNyw3ICszNyw3IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpkbjsKIAl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHNpemU7Ci0JdW5zaWduZWQgaW50ICpyZWc7CisJY29uc3QgdW5zaWduZWQgaW50ICpyZWc7CiAJaW50IHJlZ2xlbjsKIAlpbnQgbmFkZHJjOwogCWludCBuc2l6ZWM7CkBAIC01Miw3ICs1Miw3IEBACiAJCXJldHVybiBOVUxMOwogCX0KIAotCXJlZyA9ICh1bnNpZ25lZCBpbnQgKikgZ2V0X3Byb3BlcnR5KGRuLCAicmVnIiwgJnJlZ2xlbik7CisJcmVnID0gZ2V0X3Byb3BlcnR5KGRuLCAicmVnIiwgJnJlZ2xlbik7CiAJbmFkZHJjID0gcHJvbV9uX2FkZHJfY2VsbHMoZG4pOwogCW5zaXplYyA9IHByb21fbl9zaXplX2NlbGxzKGRuKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pby5jIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCmluZGV4IGJmZGI5MDIuLmJiMGQ5MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW8uYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKQEAgLTE1Myw2ICsxNTMsMTUgQEAKIHN0YXRpYyBpbnQgdHR5X2Zhc3luYyhpbnQgZmQsIHN0cnVjdCBmaWxlICogZmlscCwgaW50IG9uKTsKIHN0YXRpYyB2b2lkIHJlbGVhc2VfbWVtKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBpZHgpOwogCisvKioKKyAqCWFsbG9jX3R0eV9zdHJ1Y3QJLQlhbGxvY2F0ZSBhIHR0eSBvYmplY3QKKyAqCisgKglSZXR1cm4gYSBuZXcgZW1wdHkgdHR5IHN0cnVjdHVyZS4gVGhlIGRhdGEgZmllbGRzIGhhdmUgbm90CisgKgliZWVuIGluaXRpYWxpemVkIGluIGFueSB3YXkgYnV0IGhhcyBiZWVuIHplcm9lZAorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqCUZJWE1FOiB1c2Uga3phbGxvYworICovCiAKIHN0YXRpYyBzdHJ1Y3QgdHR5X3N0cnVjdCAqYWxsb2NfdHR5X3N0cnVjdCh2b2lkKQogewpAQCAtMTY2LDYgKzE3NSwxNSBAQAogCiBzdGF0aWMgdm9pZCB0dHlfYnVmZmVyX2ZyZWVfYWxsKHN0cnVjdCB0dHlfc3RydWN0ICopOwogCisvKioKKyAqCWZyZWVfdHR5X3N0cnVjdAkJLQlmcmVlIGEgZGlzdXNlZCB0dHkKKyAqCUB0dHk6IHR0eSBzdHJ1Y3QgdG8gZnJlZQorICoKKyAqCUZyZWUgdGhlIHdyaXRlIGJ1ZmZlcnMsIHR0eSBxdWV1ZSBhbmQgdHR5IG1lbW9yeSBpdHNlbGYuCisgKgorICoJTG9ja2luZzogbm9uZS4gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgdHR5IGlzIGRlZmluaXRlbHkgdW51c2VkCisgKi8KKwogc3RhdGljIGlubGluZSB2b2lkIGZyZWVfdHR5X3N0cnVjdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWtmcmVlKHR0eS0+d3JpdGVfYnVmKTsKQEAgLTE3NSw2ICsxOTMsMTcgQEAKIAogI2RlZmluZSBUVFlfTlVNQkVSKHR0eSkgKCh0dHkpLT5pbmRleCArICh0dHkpLT5kcml2ZXItPm5hbWVfYmFzZSkKIAorLyoqCisgKgl0dHlfbmFtZQktCXJldHVybiB0dHkgbmFtaW5nCisgKglAdHR5OiB0dHkgc3RydWN0dXJlCisgKglAYnVmOiBidWZmZXIgZm9yIG91dHB1dAorICoKKyAqCUNvbnZlcnQgYSB0dHkgc3RydWN0dXJlIGludG8gYSBuYW1lLiBUaGUgbmFtZSByZWZsZWN0cyB0aGUga2VybmVsCisgKgluYW1pbmcgcG9saWN5IGFuZCBpZiB1ZGV2IGlzIGluIHVzZSBtYXkgbm90IHJlZmxlY3QgdXNlciBzcGFjZQorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqLworCiBjaGFyICp0dHlfbmFtZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyICpidWYpCiB7CiAJaWYgKCF0dHkpIC8qIEhtbS4gIE5VTEwgcG9pbnRlci4gIFRoYXQncyBmdW4uICovCkBAIC0yMzUsNiArMjY0LDI4IEBACiAgKiBUdHkgYnVmZmVyIGFsbG9jYXRpb24gbWFuYWdlbWVudAogICovCiAKKworLyoqCisgKgl0dHlfYnVmZmVyX2ZyZWVfYWxsCQktCWZyZWUgYnVmZmVycyB1c2VkIGJ5IGEgdHR5CisgKglAdHR5OiB0dHkgdG8gZnJlZSBmcm9tCisgKgorICoJUmVtb3ZlIGFsbCB0aGUgYnVmZmVycyBwZW5kaW5nIG9uIGEgdHR5IHdoZXRoZXIgcXVldWVkIHdpdGggZGF0YQorICoJb3IgaW4gdGhlIGZyZWUgcmluZy4gTXVzdCBiZSBjYWxsZWQgd2hlbiB0aGUgdHR5IGlzIG5vIGxvbmdlciBpbiB1c2UKKyAqCisgKglMb2NraW5nOiBub25lCisgKi8KKworCisvKioKKyAqCXR0eV9idWZmZXJfZnJlZV9hbGwJCS0JZnJlZSBidWZmZXJzIHVzZWQgYnkgYSB0dHkKKyAqCUB0dHk6IHR0eSB0byBmcmVlIGZyb20KKyAqCisgKglSZW1vdmUgYWxsIHRoZSBidWZmZXJzIHBlbmRpbmcgb24gYSB0dHkgd2hldGhlciBxdWV1ZWQgd2l0aCBkYXRhCisgKglvciBpbiB0aGUgZnJlZSByaW5nLiBNdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSB0dHkgaXMgbm8gbG9uZ2VyIGluIHVzZQorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqLworCiBzdGF0aWMgdm9pZCB0dHlfYnVmZmVyX2ZyZWVfYWxsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHR0eV9idWZmZXIgKnRoZWFkOwpAQCAtMjQ3LDE5ICsyOTgsNDcgQEAKIAkJa2ZyZWUodGhlYWQpOwogCX0KIAl0dHktPmJ1Zi50YWlsID0gTlVMTDsKKwl0dHktPmJ1Zi5tZW1vcnlfdXNlZCA9IDA7CiB9CiAKKy8qKgorICoJdHR5X2J1ZmZlcl9pbml0CQktCXByZXBhcmUgYSB0dHkgYnVmZmVyIHN0cnVjdHVyZQorICoJQHR0eTogdHR5IHRvIGluaXRpYWxpc2UKKyAqCisgKglTZXQgdXAgdGhlIGluaXRpYWwgc3RhdGUgb2YgdGhlIGJ1ZmZlciBtYW5hZ2VtZW50IGZvciBhIHR0eSBkZXZpY2UuCisgKglNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG90aGVyIHR0eSBidWZmZXIgZnVuY3Rpb25zIGFyZSB1c2VkLgorICoKKyAqCUxvY2tpbmc6IG5vbmUKKyAqLworCiBzdGF0aWMgdm9pZCB0dHlfYnVmZmVyX2luaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzcGluX2xvY2tfaW5pdCgmdHR5LT5idWYubG9jayk7CiAJdHR5LT5idWYuaGVhZCA9IE5VTEw7CiAJdHR5LT5idWYudGFpbCA9IE5VTEw7CiAJdHR5LT5idWYuZnJlZSA9IE5VTEw7CisJdHR5LT5idWYubWVtb3J5X3VzZWQgPSAwOwogfQogCi1zdGF0aWMgc3RydWN0IHR0eV9idWZmZXIgKnR0eV9idWZmZXJfYWxsb2Moc2l6ZV90IHNpemUpCisvKioKKyAqCXR0eV9idWZmZXJfYWxsb2MJLQlhbGxvY2F0ZSBhIHR0eSBidWZmZXIKKyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAqCUBzaXplOiBkZXNpcmVkIHNpemUgKGNoYXJhY3RlcnMpCisgKgorICoJQWxsb2NhdGUgYSBuZXcgdHR5IGJ1ZmZlciB0byBob2xkIHRoZSBkZXNpcmVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLgorICoJUmV0dXJuIE5VTEwgaWYgb3V0IG9mIG1lbW9yeSBvciB0aGUgYWxsb2NhdGlvbiB3b3VsZCBleGNlZWQgdGhlCisgKglwZXIgZGV2aWNlIHF1ZXVlCisgKgorICoJTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCB0dHktPmJ1Zi5sb2NrCisgKi8KKworc3RhdGljIHN0cnVjdCB0dHlfYnVmZmVyICp0dHlfYnVmZmVyX2FsbG9jKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNpemVfdCBzaXplKQogewotCXN0cnVjdCB0dHlfYnVmZmVyICpwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0eV9idWZmZXIpICsgMiAqIHNpemUsIEdGUF9BVE9NSUMpOworCXN0cnVjdCB0dHlfYnVmZmVyICpwOworCisJaWYgKHR0eS0+YnVmLm1lbW9yeV91c2VkICsgc2l6ZSA+IDY1NTM2KQorCQlyZXR1cm4gTlVMTDsKKwlwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHR0eV9idWZmZXIpICsgMiAqIHNpemUsIEdGUF9BVE9NSUMpOwogCWlmKHAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CiAJcC0+dXNlZCA9IDA7CkBAIC0yNjksMTcgKzM0OCwyNyBAQAogCXAtPnJlYWQgPSAwOwogCXAtPmNoYXJfYnVmX3B0ciA9IChjaGFyICopKHAtPmRhdGEpOwogCXAtPmZsYWdfYnVmX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopcC0+Y2hhcl9idWZfcHRyICsgc2l6ZTsKLS8qIAlwcmludGsoIkZsaXAgY3JlYXRlICVwXG4iLCBwKTsgKi8KKwl0dHktPmJ1Zi5tZW1vcnlfdXNlZCArPSBzaXplOwogCXJldHVybiBwOwogfQogCi0vKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0dHlfcmVhZCBsb2NrIGhlbGQuIFRoaXMgbmVlZHMgdG8gYWNxdWlyZSBzdHJhdGVneQotICAgY29kZSB0byBkZWNpZGUgaWYgd2Ugc2hvdWxkIGtmcmVlIG9yIHJlbGluayBhIGdpdmVuIGV4cGlyZWQgYnVmZmVyICovCisvKioKKyAqCXR0eV9idWZmZXJfZnJlZQkJLQlmcmVlIGEgdHR5IGJ1ZmZlcgorICoJQHR0eTogdHR5IG93bmluZyB0aGUgYnVmZmVyCisgKglAYjogdGhlIGJ1ZmZlciB0byBmcmVlCisgKgorICoJRnJlZSBhIHR0eSBidWZmZXIsIG9yIGFkZCBpdCB0byB0aGUgZnJlZSBsaXN0IGFjY29yZGluZyB0byBvdXIKKyAqCWludGVybmFsIHN0cmF0ZWd5CisgKgorICoJTG9ja2luZzogQ2FsbGVyIG11c3QgaG9sZCB0dHktPmJ1Zi5sb2NrCisgKi8KIAogc3RhdGljIHZvaWQgdHR5X2J1ZmZlcl9mcmVlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfYnVmZmVyICpiKQogewogCS8qIER1bWIgc3RyYXRlZ3kgZm9yIG5vdyAtIHNob3VsZCBrZWVwIHNvbWUgc3RhdHMgKi8KLS8qIAlwcmludGsoIkZsaXAgZGlzcG9zZSAlcFxuIiwgYik7ICovCisJdHR5LT5idWYubWVtb3J5X3VzZWQgLT0gYi0+c2l6ZTsKKwlXQVJOX09OKHR0eS0+YnVmLm1lbW9yeV91c2VkIDwgMCk7CisKIAlpZihiLT5zaXplID49IDUxMikKIAkJa2ZyZWUoYik7CiAJZWxzZSB7CkBAIC0yODgsNiArMzc3LDE4IEBACiAJfQogfQogCisvKioKKyAqCXR0eV9idWZmZXJfZmluZAkJLQlmaW5kIGEgZnJlZSB0dHkgYnVmZmVyCisgKglAdHR5OiB0dHkgb3duaW5nIHRoZSBidWZmZXIKKyAqCUBzaXplOiBjaGFyYWN0ZXJzIHdhbnRlZAorICoKKyAqCUxvY2F0ZSBhbiBleGlzdGluZyBzdWl0YWJsZSB0dHkgYnVmZmVyIG9yIGlmIHdlIGFyZSBsYWNraW5nIG9uZSB0aGVuCisgKglhbGxvY2F0ZSBhIG5ldyBvbmUuIFdlIHJvdW5kIG91ciBidWZmZXJzIG9mZiBpbiAyNTYgY2hhcmFjdGVyIGNodW5rcworICoJdG8gZ2V0IGJldHRlciBhbGxvY2F0aW9uIGJlaGF2aW91ci4KKyAqCisgKglMb2NraW5nOiBDYWxsZXIgbXVzdCBob2xkIHR0eS0+YnVmLmxvY2sKKyAqLworCiBzdGF0aWMgc3RydWN0IHR0eV9idWZmZXIgKnR0eV9idWZmZXJfZmluZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgdHR5X2J1ZmZlciAqKnRiaCA9ICZ0dHktPmJ1Zi5mcmVlOwpAQCAtMjk5LDIwICs0MDAsMjggQEAKIAkJCXQtPnVzZWQgPSAwOwogCQkJdC0+Y29tbWl0ID0gMDsKIAkJCXQtPnJlYWQgPSAwOwotCQkJLyogREVCVUcgT05MWSAqLwotLyoJCQltZW1zZXQodC0+ZGF0YSwgJyonLCBzaXplKTsgKi8KLS8qIAkJCXByaW50aygiRmxpcCByZWN5Y2xlICVwXG4iLCB0KTsgKi8KKwkJCXR0eS0+YnVmLm1lbW9yeV91c2VkICs9IHQtPnNpemU7CiAJCQlyZXR1cm4gdDsKIAkJfQogCQl0YmggPSAmKCgqdGJoKS0+bmV4dCk7CiAJfQogCS8qIFJvdW5kIHRoZSBidWZmZXIgc2l6ZSBvdXQgKi8KIAlzaXplID0gKHNpemUgKyAweEZGKSAmIH4gMHhGRjsKLQlyZXR1cm4gdHR5X2J1ZmZlcl9hbGxvYyhzaXplKTsKKwlyZXR1cm4gdHR5X2J1ZmZlcl9hbGxvYyh0dHksIHNpemUpOwogCS8qIFNob3VsZCBwb3NzaWJseSBjaGVjayBpZiB0aGlzIGZhaWxzIGZvciB0aGUgbGFyZ2VzdCBidWZmZXIgd2UKIAkgICBoYXZlIHF1ZXVlZCBhbmQgcmVjeWNsZSB0aGF0ID8gKi8KIH0KIAorLyoqCisgKgl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbQkJLQlncm93IHR0eSBidWZmZXIgaWYgbmVlZGVkCisgKglAdHR5OiB0dHkgc3RydWN0dXJlCisgKglAc2l6ZTogc2l6ZSBkZXNpcmVkCisgKgorICoJTWFrZSBhdCBsZWFzdCBzaXplIGJ5dGVzIG9mIGxpbmVhciBzcGFjZSBhdmFpbGFibGUgZm9yIHRoZSB0dHkKKyAqCWJ1ZmZlci4gSWYgd2UgZmFpbCByZXR1cm4gdGhlIHNpemUgd2UgbWFuYWdlZCB0byBmaW5kLgorICoKKyAqCUxvY2tpbmc6IFRha2VzIHR0eS0+YnVmLmxvY2sKKyAqLwogaW50IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHNpemVfdCBzaXplKQogewogCXN0cnVjdCB0dHlfYnVmZmVyICpiLCAqbjsKQEAgLTM0Nyw2ICs0NTYsMTggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKTsKIAorLyoqCisgKgl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nCS0JQWRkIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBidWZmZXIKKyAqCUB0dHk6IHR0eSBzdHJ1Y3R1cmUKKyAqCUBjaGFyczogY2hhcmFjdGVycworICoJQHNpemU6IHNpemUKKyAqCisgKglRdWV1ZSBhIHNlcmllcyBvZiBieXRlcyB0byB0aGUgdHR5IGJ1ZmZlcmluZy4gQWxsIHRoZSBjaGFyYWN0ZXJzCisgKglwYXNzZWQgYXJlIG1hcmtlZCBhcyB3aXRob3V0IGVycm9yLiBSZXR1cm5zIHRoZSBudW1iZXIgYWRkZWQuCisgKgorICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCisgKi8KKwogaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsCiAJCQkJc2l6ZV90IHNpemUpCiB7CkBAIC0zNzAsNiArNDkxLDIwIEBACiB9CiBFWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcpOwogCisvKioKKyAqCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MJLQlBZGQgY2hhcmFjdGVycyB0byB0aGUgdHR5IGJ1ZmZlcgorICoJQHR0eTogdHR5IHN0cnVjdHVyZQorICoJQGNoYXJzOiBjaGFyYWN0ZXJzCisgKglAZmxhZ3M6IGZsYWcgYnl0ZXMKKyAqCUBzaXplOiBzaXplCisgKgorICoJUXVldWUgYSBzZXJpZXMgb2YgYnl0ZXMgdG8gdGhlIHR0eSBidWZmZXJpbmcuIEZvciBlYWNoIGNoYXJhY3RlcgorICoJdGhlIGZsYWdzIGFycmF5IGluZGljYXRlcyB0aGUgc3RhdHVzIG9mIHRoZSBjaGFyYWN0ZXIuIFJldHVybnMgdGhlCisgKgludW1iZXIgYWRkZWQuCisgKgorICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCisgKi8KKwogaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIGNvbnN0IGNoYXIgKmZsYWdzLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTM5NCw2ICs1MjksMTcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyk7CiAKKy8qKgorICoJdHR5X3NjaGVkdWxlX2ZsaXAJLQlwdXNoIGNoYXJhY3RlcnMgdG8gbGRpc2MKKyAqCUB0dHk6IHR0eSB0byBwdXNoIGZyb20KKyAqCisgKglUYWtlcyBhbnkgcGVuZGluZyBidWZmZXJzIGFuZCB0cmFuc2ZlcnMgdGhlaXIgb3duZXJzaGlwIHRvIHRoZQorICoJbGRpc2Mgc2lkZSBvZiB0aGUgcXVldWUuIEl0IHRoZW4gc2NoZWR1bGVzIHRob3NlIGNoYXJhY3RlcnMgZm9yCisgKglwcm9jZXNzaW5nIGJ5IHRoZSBsaW5lIGRpc2NpcGxpbmUuCisgKgorICoJTG9ja2luZzogVGFrZXMgdHR5LT5idWYubG9jaworICovCisKIHZvaWQgdHR5X3NjaGVkdWxlX2ZsaXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDA1LDEyICs1NTEsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3NjaGVkdWxlX2ZsaXApOwogCi0vKgorLyoqCisgKgl0dHlfcHJlcGFyZV9mbGlwX3N0cmluZwkJLQltYWtlIHJvb20gZm9yIGNoYXJhY3RlcnMKKyAqCUB0dHk6IHR0eQorICoJQGNoYXJzOiByZXR1cm4gcG9pbnRlciBmb3IgY2hhcmFjdGVyIHdyaXRlIGFyZWEKKyAqCUBzaXplOiBkZXNpcmVkIHNpemUKKyAqCiAgKglQcmVwYXJlIGEgYmxvY2sgb2Ygc3BhY2UgaW4gdGhlIGJ1ZmZlciBmb3IgZGF0YS4gUmV0dXJucyB0aGUgbGVuZ3RoCiAgKglhdmFpbGFibGUgYW5kIGJ1ZmZlciBwb2ludGVyIHRvIHRoZSBzcGFjZSB3aGljaCBpcyBub3cgYWxsb2NhdGVkIGFuZAogICoJYWNjb3VudGVkIGZvciBhcyByZWFkeSBmb3Igbm9ybWFsIGNoYXJhY3RlcnMuIFRoaXMgaXMgdXNlZCBmb3IgZHJpdmVycwogICoJdGhhdCBuZWVkIHRoZWlyIG93biBibG9jayBjb3B5IHJvdXRpbmVzIGludG8gdGhlIGJ1ZmZlci4gVGhlcmUgaXMgbm8KICAqCWd1YXJhbnRlZSB0aGUgYnVmZmVyIGlzIGEgRE1BIHRhcmdldCEKKyAqCisgKglMb2NraW5nOiBNYXkgY2FsbCBmdW5jdGlvbnMgdGFraW5nIHR0eS0+YnVmLmxvY2sKICAqLwogCiBpbnQgdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqKmNoYXJzLCBzaXplX3Qgc2l6ZSkKQEAgLTQyNywxMiArNTgwLDIwIEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKTsKIAotLyoKKy8qKgorICoJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmdfZmxhZ3MJLQltYWtlIHJvb20gZm9yIGNoYXJhY3RlcnMKKyAqCUB0dHk6IHR0eQorICoJQGNoYXJzOiByZXR1cm4gcG9pbnRlciBmb3IgY2hhcmFjdGVyIHdyaXRlIGFyZWEKKyAqCUBmbGFnczogcmV0dXJuIHBvaW50ZXIgZm9yIHN0YXR1cyBmbGFnIHdyaXRlIGFyZWEKKyAqCUBzaXplOiBkZXNpcmVkIHNpemUKKyAqCiAgKglQcmVwYXJlIGEgYmxvY2sgb2Ygc3BhY2UgaW4gdGhlIGJ1ZmZlciBmb3IgZGF0YS4gUmV0dXJucyB0aGUgbGVuZ3RoCiAgKglhdmFpbGFibGUgYW5kIGJ1ZmZlciBwb2ludGVyIHRvIHRoZSBzcGFjZSB3aGljaCBpcyBub3cgYWxsb2NhdGVkIGFuZAogICoJYWNjb3VudGVkIGZvciBhcyByZWFkeSBmb3IgY2hhcmFjdGVycy4gVGhpcyBpcyB1c2VkIGZvciBkcml2ZXJzCiAgKgl0aGF0IG5lZWQgdGhlaXIgb3duIGJsb2NrIGNvcHkgcm91dGluZXMgaW50byB0aGUgYnVmZmVyLiBUaGVyZSBpcyBubwogICoJZ3VhcmFudGVlIHRoZSBidWZmZXIgaXMgYSBETUEgdGFyZ2V0IQorICoKKyAqCUxvY2tpbmc6IE1heSBjYWxsIGZ1bmN0aW9ucyB0YWtpbmcgdHR5LT5idWYubG9jawogICovCiAKIGludCB0dHlfcHJlcGFyZV9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyICoqY2hhcnMsIGNoYXIgKipmbGFncywgc2l6ZV90IHNpemUpCkBAIC00NTEsMTAgKzYxMiwxNiBAQAogCiAKIAotLyoKKy8qKgorICoJdHR5X3NldF90ZXJtaW9zX2xkaXNjCQktCXNldCBsZGlzYyBmaWVsZAorICoJQHR0eTogdHR5IHN0cnVjdHVyZQorICoJQG51bTogbGluZSBkaXNjaXBsaW5lIG51bWJlcgorICoKICAqCVRoaXMgaXMgcHJvYmFibHkgb3ZlcmtpbGwgZm9yIHJlYWwgd29ybGQgcHJvY2Vzc29ycyBidXQKICAqCXRoZXkgYXJlIG5vdCBvbiBob3QgcGF0aHMgc28gYSBsaXR0bGUgZGlzY2lwbGluZSB3b24ndCBkbyAKICAqCWFueSBoYXJtLgorICoKKyAqCUxvY2tpbmc6IHRha2VzIHRlcm1pb3Nfc2VtCiAgKi8KICAKIHN0YXRpYyB2b2lkIHR0eV9zZXRfdGVybWlvc19sZGlzYyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbnVtKQpAQCAtNDc0LDYgKzY0MSwxOSBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHR0eV9sZGlzY193YWl0KTsKIHN0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjIHR0eV9sZGlzY3NbTlJfTERJU0NTXTsJLyogbGluZSBkaXNjIGRpc3BhdGNoIHRhYmxlICovCiAKKy8qKgorICoJdHR5X3JlZ2lzdGVyX2xkaXNjCS0JaW5zdGFsbCBhIGxpbmUgZGlzY2lwbGluZQorICoJQGRpc2M6IGxkaXNjIG51bWJlcgorICoJQG5ld19sZGlzYzogcG9pbnRlciB0byB0aGUgbGRpc2Mgb2JqZWN0CisgKgorICoJSW5zdGFsbHMgYSBuZXcgbGluZSBkaXNjaXBsaW5lIGludG8gdGhlIGtlcm5lbC4gVGhlIGRpc2NpcGxpbmUKKyAqCWlzIHNldCB1cCBhcyB1bnJlZmVyZW5jZWQgYW5kIHRoZW4gbWFkZSBhdmFpbGFibGUgdG8gdGhlIGtlcm5lbAorICoJZnJvbSB0aGlzIHBvaW50IG9ud2FyZHMuCisgKgorICoJTG9ja2luZzoKKyAqCQl0YWtlcyB0dHlfbGRpc2NfbG9jayB0byBndWFyZCBhZ2FpbnN0IGxkaXNjIHJhY2VzCisgKi8KKwogaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzYyAqbmV3X2xkaXNjKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00OTMsNiArNjczLDE4IEBACiB9CiBFWFBPUlRfU1lNQk9MKHR0eV9yZWdpc3Rlcl9sZGlzYyk7CiAKKy8qKgorICoJdHR5X3VucmVnaXN0ZXJfbGRpc2MJLQl1bmxvYWQgYSBsaW5lIGRpc2NpcGxpbmUKKyAqCUBkaXNjOiBsZGlzYyBudW1iZXIKKyAqCUBuZXdfbGRpc2M6IHBvaW50ZXIgdG8gdGhlIGxkaXNjIG9iamVjdAorICoKKyAqCVJlbW92ZSBhIGxpbmUgZGlzY2lwbGluZSBmcm9tIHRoZSBrZXJuZWwgcHJvdmlkaW5nIGl0IGlzIG5vdAorICoJY3VycmVudGx5IGluIHVzZS4KKyAqCisgKglMb2NraW5nOgorICoJCXRha2VzIHR0eV9sZGlzY19sb2NrIHRvIGd1YXJkIGFnYWluc3QgbGRpc2MgcmFjZXMKKyAqLworCiBpbnQgdHR5X3VucmVnaXN0ZXJfbGRpc2MoaW50IGRpc2MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTUxMiw2ICs3MDQsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0wodHR5X3VucmVnaXN0ZXJfbGRpc2MpOwogCisvKioKKyAqCXR0eV9sZGlzY19nZXQJCS0JdGFrZSBhIHJlZmVyZW5jZSB0byBhbiBsZGlzYworICoJQGRpc2M6IGxkaXNjIG51bWJlcgorICoKKyAqCVRha2VzIGEgcmVmZXJlbmNlIHRvIGEgbGluZSBkaXNjaXBsaW5lLiBEZWFscyB3aXRoIHJlZmNvdW50cyBhbmQKKyAqCW1vZHVsZSBsb2NraW5nIGNvdW50cy4gUmV0dXJucyBOVUxMIGlmIHRoZSBkaXNjaXBsaW5lIGlzIG5vdCBhdmFpbGFibGUuCisgKglSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGlzY2lwbGluZSBhbmQgYnVtcHMgdGhlIHJlZiBjb3VudCBpZiBpdCBpcworICoJYXZhaWxhYmxlCisgKgorICoJTG9ja2luZzoKKyAqCQl0YWtlcyB0dHlfbGRpc2NfbG9jayB0byBndWFyZCBhZ2FpbnN0IGxkaXNjIHJhY2VzCisgKi8KKwogc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX2dldChpbnQgZGlzYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNTQwLDYgKzc0NSwxNyBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfbGRpc2NfZ2V0KTsKIAorLyoqCisgKgl0dHlfbGRpc2NfcHV0CQktCWRyb3AgbGRpc2MgcmVmZXJlbmNlCisgKglAZGlzYzogbGRpc2MgbnVtYmVyCisgKgorICoJRHJvcCBhIHJlZmVyZW5jZSB0byBhIGxpbmUgZGlzY2lwbGluZS4gTWFuYWdlIHJlZmNvdW50cyBhbmQKKyAqCW1vZHVsZSB1c2FnZSBjb3VudHMKKyAqCisgKglMb2NraW5nOgorICoJCXRha2VzIHR0eV9sZGlzY19sb2NrIHRvIGd1YXJkIGFnYWluc3QgbGRpc2MgcmFjZXMKKyAqLworCiB2b2lkIHR0eV9sZGlzY19wdXQoaW50IGRpc2MpCiB7CiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CkBAIC01NTcsNiArNzczLDE5IEBACiAJCiBFWFBPUlRfU1lNQk9MX0dQTCh0dHlfbGRpc2NfcHV0KTsKIAorLyoqCisgKgl0dHlfbGRpc2NfYXNzaWduCS0Jc2V0IGxkaXNjIG9uIGEgdHR5CisgKglAdHR5OiB0dHkgdG8gYXNzaWduCisgKglAbGQ6IGxpbmUgZGlzY2lwbGluZQorICoKKyAqCUluc3RhbGwgYW4gaW5zdGFuY2Ugb2YgYSBsaW5lIGRpc2NpcGxpbmUgaW50byBhIHR0eSBzdHJ1Y3R1cmUuIFRoZQorICoJbGRpc2MgbXVzdCBoYXZlIGEgcmVmZXJlbmNlIGNvdW50IGFib3ZlIHplcm8gdG8gZW5zdXJlIGl0IHJlbWFpbnMvCisgKglUaGUgdHR5IGluc3RhbmNlIHJlZmNvdW50IHN0YXJ0cyBhdCB6ZXJvLgorICoKKyAqCUxvY2tpbmc6CisgKgkJQ2FsbGVyIG11c3QgaG9sZCByZWZlcmVuY2VzCisgKi8KKwogc3RhdGljIHZvaWQgdHR5X2xkaXNjX2Fzc2lnbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X2xkaXNjICpsZCkKIHsKIAl0dHktPmxkaXNjID0gKmxkOwpAQCAtNTcxLDYgKzgwMCw4IEBACiAgKgl0aGUgdHR5IGxkaXNjLiBSZXR1cm4gMCBvbiBmYWlsdXJlIG9yIDEgb24gc3VjY2Vzcy4gVGhpcyBpcwogICoJdXNlZCB0byBpbXBsZW1lbnQgYm90aCB0aGUgd2FpdGluZyBhbmQgbm9uIHdhaXRpbmcgdmVyc2lvbnMKICAqCW9mIHR0eV9sZGlzY19yZWYKKyAqCisgKglMb2NraW5nOiB0YWtlcyB0dHlfbGRpc2NfbG9jawogICovCiAKIHN0YXRpYyBpbnQgdHR5X2xkaXNjX3RyeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNjAyLDYgKzgzMyw4IEBACiAgKgltdXN0IGFsc28gYmUgY2FyZWZ1bCBub3QgdG8gaG9sZCBvdGhlciBsb2NrcyB0aGF0IHdpbGwgZGVhZGxvY2sKICAqCWFnYWluc3QgYSBkaXNjaXBsaW5lIGNoYW5nZSwgc3VjaCBhcyBhbiBleGlzdGluZyBsZGlzYyByZWZlcmVuY2UKICAqCSh3aGljaCB3ZSBjaGVjayBmb3IpCisgKgorICoJTG9ja2luZzogY2FsbCBmdW5jdGlvbnMgdGFrZSB0dHlfbGRpc2NfbG9jawogICovCiAgCiBzdHJ1Y3QgdHR5X2xkaXNjICp0dHlfbGRpc2NfcmVmX3dhaXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKQEAgLTYyMiw2ICs4NTUsOCBAQAogICoJRGVyZWZlcmVuY2UgdGhlIGxpbmUgZGlzY2lwbGluZSBmb3IgdGhlIHRlcm1pbmFsIGFuZCB0YWtlIGEgCiAgKglyZWZlcmVuY2UgdG8gaXQuIElmIHRoZSBsaW5lIGRpc2NpcGxpbmUgaXMgaW4gZmx1eCB0aGVuIAogICoJcmV0dXJuIE5VTEwuIENhbiBiZSBjYWxsZWQgZnJvbSBJUlEgYW5kIHRpbWVyIGZ1bmN0aW9ucy4KKyAqCisgKglMb2NraW5nOiBjYWxsZWQgZnVuY3Rpb25zIHRha2UgdHR5X2xkaXNjX2xvY2sKICAqLwogIAogc3RydWN0IHR0eV9sZGlzYyAqdHR5X2xkaXNjX3JlZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQpAQCAtNjM5LDYgKzg3NCw4IEBACiAgKgogICoJVW5kb2VzIHRoZSBlZmZlY3Qgb2YgdHR5X2xkaXNjX3JlZiBvciB0dHlfbGRpc2NfcmVmX3dhaXQuIE1heQogICoJYmUgY2FsbGVkIGluIElSUSBjb250ZXh0LgorICoKKyAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrCiAgKi8KICAKIHZvaWQgdHR5X2xkaXNjX2RlcmVmKHN0cnVjdCB0dHlfbGRpc2MgKmxkKQpAQCAtNjgzLDYgKzkyMCw5IEBACiAgKgogICoJU2V0IHRoZSBkaXNjaXBsaW5lIG9mIGEgdHR5IGxpbmUuIE11c3QgYmUgY2FsbGVkIGZyb20gYSBwcm9jZXNzCiAgKgljb250ZXh0LgorICoKKyAqCUxvY2tpbmc6IHRha2VzIHR0eV9sZGlzY19sb2NrLgorICoJCWNhbGxlZCBmdW5jdGlvbnMgdGFrZSB0ZXJtaW9zX3NlbQogICovCiAgCiBzdGF0aWMgaW50IHR0eV9zZXRfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGxkaXNjKQpAQCAtODQ2LDkgKzEwODYsMTcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKgotICogVGhpcyByb3V0aW5lIHJldHVybnMgYSB0dHkgZHJpdmVyIHN0cnVjdHVyZSwgZ2l2ZW4gYSBkZXZpY2UgbnVtYmVyCisvKioKKyAqCWdldF90dHlfZHJpdmVyCQktCWZpbmQgZGV2aWNlIG9mIGEgdHR5CisgKglAZGV2X3Q6IGRldmljZSBpZGVudGlmaWVyCisgKglAaW5kZXg6IHJldHVybnMgdGhlIGluZGV4IG9mIHRoZSB0dHkKKyAqCisgKglUaGlzIHJvdXRpbmUgcmV0dXJucyBhIHR0eSBkcml2ZXIgc3RydWN0dXJlLCBnaXZlbiBhIGRldmljZSBudW1iZXIKKyAqCWFuZCBhbHNvIHBhc3NlcyBiYWNrIHRoZSBpbmRleCBudW1iZXIuCisgKgorICoJTG9ja2luZzogY2FsbGVyIG11c3QgaG9sZCB0dHlfbXV0ZXgKICAqLworCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKmdldF90dHlfZHJpdmVyKGRldl90IGRldmljZSwgaW50ICppbmRleCkKIHsKIAlzdHJ1Y3QgdHR5X2RyaXZlciAqcDsKQEAgLTg2MywxMSArMTExMSwxNyBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKgotICogSWYgd2UgdHJ5IHRvIHdyaXRlIHRvLCBvciBzZXQgdGhlIHN0YXRlIG9mLCBhIHRlcm1pbmFsIGFuZCB3ZSdyZQotICogbm90IGluIHRoZSBmb3JlZ3JvdW5kLCBzZW5kIGEgU0lHVFRPVS4gIElmIHRoZSBzaWduYWwgaXMgYmxvY2tlZCBvcgotICogaWdub3JlZCwgZ28gYWhlYWQgYW5kIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gIChQT1NJWCA3LjIpCisvKioKKyAqCXR0eV9jaGVja19jaGFuZ2UJLQljaGVjayBmb3IgUE9TSVggdGVybWluYWwgY2hhbmdlcworICoJQHR0eTogdHR5IHRvIGNoZWNrCisgKgorICoJSWYgd2UgdHJ5IHRvIHdyaXRlIHRvLCBvciBzZXQgdGhlIHN0YXRlIG9mLCBhIHRlcm1pbmFsIGFuZCB3ZSdyZQorICoJbm90IGluIHRoZSBmb3JlZ3JvdW5kLCBzZW5kIGEgU0lHVFRPVS4gIElmIHRoZSBzaWduYWwgaXMgYmxvY2tlZCBvcgorICoJaWdub3JlZCwgZ28gYWhlYWQgYW5kIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4gIChQT1NJWCA3LjIpCisgKgorICoJTG9ja2luZzogbm9uZQogICovCisKIGludCB0dHlfY2hlY2tfY2hhbmdlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQogewogCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eSAhPSB0dHkpCkBAIC0xMDA1LDEwICsxMjU5LDI3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9sZGlzY19mbHVzaCk7CiAJCi0vKgotICogVGhpcyBjYW4gYmUgY2FsbGVkIGJ5IHRoZSAiZXZlbnRkIiBrZXJuZWwgdGhyZWFkLiAgVGhhdCBpcyBwcm9jZXNzIHN5bmNocm9ub3VzLAotICogYnV0IGRvZXNuJ3QgaG9sZCBhbnkgbG9ja3MsIHNvIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGFwcHJvcHJpYXRlCi0gKiBsb2NrcyBmb3Igd2hhdCB3ZSdyZSBkb2luZy4uCisvKioKKyAqCWRvX3R0eV9oYW5ndXAJCS0JYWN0dWFsIGhhbmRsZXIgZm9yIGhhbmd1cCBldmVudHMKKyAqCUBkYXRhOiB0dHkgZGV2aWNlCisgKgorICoJVGhpcyBjYW4gYmUgY2FsbGVkIGJ5IHRoZSAiZXZlbnRkIiBrZXJuZWwgdGhyZWFkLiAgVGhhdCBpcyBwcm9jZXNzCisgKglzeW5jaHJvbm91cyBidXQgZG9lc24ndCBob2xkIGFueSBsb2Nrcywgc28gd2UgbmVlZCB0byBtYWtlIHN1cmUgd2UKKyAqCWhhdmUgdGhlIGFwcHJvcHJpYXRlIGxvY2tzIGZvciB3aGF0IHdlJ3JlIGRvaW5nLgorICoKKyAqCVRoZSBoYW5ndXAgZXZlbnQgY2xlYXJzIGFueSBwZW5kaW5nIHJlZGlyZWN0aW9ucyBvbnRvIHRoZSBodW5nIHVwCisgKglkZXZpY2UuIEl0IGVuc3VyZXMgZnV0dXJlIHdyaXRlcyB3aWxsIGVycm9yIGFuZCBpdCBkb2VzIHRoZSBuZWVkZWQKKyAqCWxpbmUgZGlzY2lwbGluZSBoYW5ndXAgYW5kIHNpZ25hbCBkZWxpdmVyeS4gVGhlIHR0eSBvYmplY3QgaXRzZWxmCisgKglyZW1haW5zIGludGFjdC4KKyAqCisgKglMb2NraW5nOgorICoJCUJLTAorICoJCXJlZGlyZWN0IGxvY2sgZm9yIHVuZG9pbmcgcmVkaXJlY3Rpb24KKyAqCQlmaWxlIGxpc3QgbG9jayBmb3IgbWFuaXB1bGF0aW5nIGxpc3Qgb2YgdHR5cworICoJCXR0eV9sZGlzY19sb2NrIGZyb20gY2FsbGVkIGZ1bmN0aW9ucworICoJCXRlcm1pb3Nfc2VtIHJlc2V0dGluZyB0ZXJtaW9zIGRhdGEKKyAqCQl0YXNrbGlzdF9sb2NrIHRvIHdhbGsgdGFzayBsaXN0IGZvciBoYW5ndXAgZXZlbnQKKyAqCiAgKi8KIHN0YXRpYyB2b2lkIGRvX3R0eV9oYW5ndXAodm9pZCAqZGF0YSkKIHsKQEAgLTExMzMsNiArMTQwNCwxNCBAQAogCQlmcHV0KGYpOwogfQogCisvKioKKyAqCXR0eV9oYW5ndXAJCS0JdHJpZ2dlciBhIGhhbmd1cCBldmVudAorICoJQHR0eTogdHR5IHRvIGhhbmd1cAorICoKKyAqCUEgY2FycmllciBsb3NzICh2aXJ0dWFsIG9yIG90aGVyd2lzZSkgaGFzIG9jY3VycmVkIG9uIHRoaXMgbGlrZQorICoJc2NoZWR1bGUgYSBoYW5ndXAgc2VxdWVuY2UgdG8gcnVuIGFmdGVyIHRoaXMgZXZlbnQuCisgKi8KKwogdm9pZCB0dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQogewogI2lmZGVmIFRUWV9ERUJVR19IQU5HVVAKQEAgLTExNDUsNiArMTQyNCwxNSBAQAogCiBFWFBPUlRfU1lNQk9MKHR0eV9oYW5ndXApOwogCisvKioKKyAqCXR0eV92aGFuZ3VwCQktCXByb2Nlc3Mgdmhhbmd1cAorICoJQHR0eTogdHR5IHRvIGhhbmd1cAorICoKKyAqCVRoZSB1c2VyIGhhcyBhc2tlZCB2aWEgc3lzdGVtIGNhbGwgZm9yIHRoZSB0ZXJtaW5hbCB0byBiZSBodW5nIHVwLgorICoJV2UgZG8gdGhpcyBzeW5jaHJvbm91c2x5IHNvIHRoYXQgd2hlbiB0aGUgc3lzY2FsbCByZXR1cm5zIHRoZSBwcm9jZXNzCisgKglpcyBjb21wbGV0ZS4gVGhhdCBndWFyYW50ZWUgaXMgbmVjY2Vzc2FyeSBmb3Igc2VjdXJpdHkgcmVhc29ucy4KKyAqLworCiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQogewogI2lmZGVmIFRUWV9ERUJVR19IQU5HVVAKQEAgLTExNTYsNiArMTQ0NCwxNCBAQAogfQogRVhQT1JUX1NZTUJPTCh0dHlfdmhhbmd1cCk7CiAKKy8qKgorICoJdHR5X2h1bmdfdXBfcAkJLQl3YXMgdHR5IGh1bmcgdXAKKyAqCUBmaWxwOiBmaWxlIHBvaW50ZXIgb2YgdHR5CisgKgorICoJUmV0dXJuIHRydWUgaWYgdGhlIHR0eSBoYXMgYmVlbiBzdWJqZWN0IHRvIGEgdmhhbmd1cCBvciBhIGNhcnJpZXIKKyAqCWxvc3MKKyAqLworCiBpbnQgdHR5X2h1bmdfdXBfcChzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7CiAJcmV0dXJuIChmaWxwLT5mX29wID09ICZodW5nX3VwX3R0eV9mb3BzKTsKQEAgLTExNjMsMTkgKzE0NTksMjggQEAKIAogRVhQT1JUX1NZTUJPTCh0dHlfaHVuZ191cF9wKTsKIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBvbmx5IGJ5IHRoZSBzZXNzaW9uIGxlYWRlciwgd2hlbgotICogaXQgd2FudHMgdG8gZGlzYXNzb2NpYXRlIGl0c2VsZiBmcm9tIGl0cyBjb250cm9sbGluZyB0dHkuCisvKioKKyAqCWRpc2Fzc29jaWF0ZV9jdHR5CS0JZGlzY29ubmVjdCBjb250cm9sbGluZyB0dHkKKyAqCUBvbl9leGl0OiB0cnVlIGlmIGV4aXRpbmcgc28gbmVlZCB0byAiaGFuZyB1cCIgdGhlIHNlc3Npb24KICAqCi0gKiBJdCBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczoKKyAqCVRoaXMgZnVuY3Rpb24gaXMgdHlwaWNhbGx5IGNhbGxlZCBvbmx5IGJ5IHRoZSBzZXNzaW9uIGxlYWRlciwgd2hlbgorICoJaXQgd2FudHMgdG8gZGlzYXNzb2NpYXRlIGl0c2VsZiBmcm9tIGl0cyBjb250cm9sbGluZyB0dHkuCisgKgorICoJSXQgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiAgKiAJKDEpICBTZW5kcyBhIFNJR0hVUCBhbmQgU0lHQ09OVCB0byB0aGUgZm9yZWdyb3VuZCBwcm9jZXNzIGdyb3VwCiAgKiAJKDIpICBDbGVhcnMgdGhlIHR0eSBmcm9tIGJlaW5nIGNvbnRyb2xsaW5nIHRoZSBzZXNzaW9uCiAgKiAJKDMpICBDbGVhcnMgdGhlIGNvbnRyb2xsaW5nIHR0eSBmb3IgYWxsIHByb2Nlc3NlcyBpbiB0aGUKICAqIAkJc2Vzc2lvbiBncm91cC4KICAqCi0gKiBUaGUgYXJndW1lbnQgb25fZXhpdCBpcyBzZXQgdG8gMSBpZiBjYWxsZWQgd2hlbiBhIHByb2Nlc3MgaXMKLSAqIGV4aXRpbmc7IGl0IGlzIDAgaWYgY2FsbGVkIGJ5IHRoZSBpb2N0bCBUSU9DTk9UVFkuCisgKglUaGUgYXJndW1lbnQgb25fZXhpdCBpcyBzZXQgdG8gMSBpZiBjYWxsZWQgd2hlbiBhIHByb2Nlc3MgaXMKKyAqCWV4aXRpbmc7IGl0IGlzIDAgaWYgY2FsbGVkIGJ5IHRoZSBpb2N0bCBUSU9DTk9UVFkuCisgKgorICoJTG9ja2luZzogdHR5X211dGV4IGlzIHRha2VuIHRvIHByb3RlY3QgY3VycmVudC0+c2lnbmFsLT50dHkKKyAqCQlCS0wgaXMgdGFrZW4gZm9yIGh5c3RlcmljYWwgcmFpc2lucworICoJCVRhc2tsaXN0IGxvY2sgaXMgdGFrZW4gKHVuZGVyIHR0eV9tdXRleCkgdG8gd2FsayBwcm9jZXNzCisgKgkJbGlzdHMgZm9yIHRoZSBzZXNzaW9uLgogICovCisKIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHkoaW50IG9uX2V4aXQpCiB7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKQEAgLTEyMjIsNiArMTUyNywyNSBAQAogCXVubG9ja19rZXJuZWwoKTsKIH0KIAorCisvKioKKyAqCXN0b3BfdHR5CS0JcHJvcG9nYXRlIGZsb3cgY29udHJvbAorICoJQHR0eTogdHR5IHRvIHN0b3AKKyAqCisgKglQZXJmb3JtIGZsb3cgY29udHJvbCB0byB0aGUgZHJpdmVyLiBGb3IgUFRZL1RUWSBwYWlycyB3ZQorICoJbXVzdCBhbHNvIHByb3BvZ2F0ZSB0aGUgVElPQ0tQS1Qgc3RhdHVzLiBNYXkgYmUgY2FsbGVkCisgKglvbiBhbiBhbHJlYWR5IHN0b3BwZWQgZGV2aWNlIGFuZCB3aWxsIG5vdCByZS1jYWxsIHRoZSBkcml2ZXIKKyAqCW1ldGhvZC4KKyAqCisgKglUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZCBieSBib3RoIHRoZSBsaW5lIGRpc2NpcGxpbmVzIGZvcgorICoJaGFsdGluZyBpbmNvbWluZyBmbG93IGFuZCBieSB0aGUgZHJpdmVyLiBJdCBtYXkgdGhlcmVmb3JlIGJlCisgKgljYWxsZWQgZnJvbSBhbnkgY29udGV4dCwgbWF5IGJlIHVuZGVyIHRoZSB0dHkgYXRvbWljX3dyaXRlX2xvY2sKKyAqCWJ1dCBub3QgYWx3YXlzLgorICoKKyAqCUxvY2tpbmc6CisgKgkJQnJva2VuLiBSZWxpZXMgb24gQktMIHdoaWNoIGlzIHVuc2FmZSBoZXJlLgorICovCisKIHZvaWQgc3RvcF90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlpZiAodHR5LT5zdG9wcGVkKQpAQCAtMTIzOCw2ICsxNTYyLDE5IEBACiAKIEVYUE9SVF9TWU1CT0woc3RvcF90dHkpOwogCisvKioKKyAqCXN0YXJ0X3R0eQktCXByb3BvZ2F0ZSBmbG93IGNvbnRyb2wKKyAqCUB0dHk6IHR0eSB0byBzdGFydAorICoKKyAqCVN0YXJ0IGEgdHR5IHRoYXQgaGFzIGJlZW4gc3RvcHBlZCBpZiBhdCBhbGwgcG9zc2libGUuIFBlcmZvcm0KKyAqCWFueSBuZWNjZXNzYXJ5IHdha2V1cHMgYW5kIHByb3BvZ2F0ZSB0aGUgVElPQ1BLVCBzdGF0dXMuIElmIHRoaXMKKyAqCWlzIHRoZSB0dHkgd2FzIHByZXZpb3VzIHN0b3BwZWQgYW5kIGlzIGJlaW5nIHN0YXJ0ZWQgdGhlbiB0aGUKKyAqCWRyaXZlciBzdGFydCBtZXRob2QgaXMgaW52b2tlZCBhbmQgdGhlIGxpbmUgZGlzY2lwbGluZSB3b2tlbi4KKyAqCisgKglMb2NraW5nOgorICoJCUJyb2tlbi4gUmVsaWVzIG9uIEJLTCB3aGljaCBpcyB1bnNhZmUgaGVyZS4KKyAqLworCiB2b2lkIHN0YXJ0X3R0eShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCWlmICghdHR5LT5zdG9wcGVkIHx8IHR0eS0+Zmxvd19zdG9wcGVkKQpAQCAtMTI1OCw2ICsxNTk1LDIzIEBACiAKIEVYUE9SVF9TWU1CT0woc3RhcnRfdHR5KTsKIAorLyoqCisgKgl0dHlfcmVhZAktCXJlYWQgbWV0aG9kIGZvciB0dHkgZGV2aWNlIGZpbGVzCisgKglAZmlsZTogcG9pbnRlciB0byB0dHkgZmlsZQorICoJQGJ1ZjogdXNlciBidWZmZXIKKyAqCUBjb3VudDogc2l6ZSBvZiB1c2VyIGJ1ZmZlcgorICoJQHBwb3M6IHVudXNlZAorICoKKyAqCVBlcmZvcm0gdGhlIHJlYWQgc3lzdGVtIGNhbGwgZnVuY3Rpb24gb24gdGhpcyB0ZXJtaW5hbCBkZXZpY2UuIENoZWNrcworICoJZm9yIGh1bmcgdXAgZGV2aWNlcyBiZWZvcmUgY2FsbGluZyB0aGUgbGluZSBkaXNjaXBsaW5lIG1ldGhvZC4KKyAqCisgKglMb2NraW5nOgorICoJCUxvY2tzIHRoZSBsaW5lIGRpc2NpcGxpbmUgaW50ZXJuYWxseSB3aGlsZSBuZWVkZWQKKyAqCQlGb3IgaGlzdG9yaWNhbCByZWFzb25zIHRoZSBsaW5lIGRpc2NpcGxpbmUgcmVhZCBtZXRob2QgaXMKKyAqCWludm9rZWQgdW5kZXIgdGhlIEJLTC4gVGhpcyB3aWxsIGdvIGF3YXkgaW4gdGltZSBzbyBkbyBub3QgcmVseSBvbiBpdAorICoJaW4gbmV3IGNvZGUuIE11bHRpcGxlIHJlYWQgY2FsbHMgbWF5IGJlIG91dHN0YW5kaW5nIGluIHBhcmFsbGVsLgorICovCisKIHN0YXRpYyBzc2l6ZV90IHR0eV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgCiAJCQlsb2ZmX3QgKnBwb3MpCiB7CkBAIC0xMzAyLDYgKzE2NTYsNyBAQAogCXNzaXplX3QgcmV0ID0gMCwgd3JpdHRlbiA9IDA7CiAJdW5zaWduZWQgaW50IGNodW5rOwogCQorCS8qIEZJWE1FOiBPX05ERUxBWSAuLi4gKi8KIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ0dHktPmF0b21pY193cml0ZV9sb2NrKSkgewogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCX0KQEAgLTEzMTgsNiArMTY3Myw5IEBACiAJICogbGF5ZXIgaGFzIHByb2JsZW1zIHdpdGggYmlnZ2VyIGNodW5rcy4gSXQgd2lsbAogCSAqIGNsYWltIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgY2hhcmFjdGVycyB0aGFuCiAJICogaXQgYWN0dWFsbHkgZG9lcy4KKwkgKgorCSAqIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBnbyBhd2F5IG5vdyBleGNlcHQgdGhhdCA2NEsgY2h1bmtzCisJICogYXJlIHRvbyBsaWtlbHkgdG8gZmFpbCB1bmxlc3Mgc3dpdGNoZWQgdG8gdm1hbGxvYy4uLgogCSAqLwogCWNodW5rID0gMjA0ODsKIAlpZiAodGVzdF9iaXQoVFRZX05PX1dSSVRFX1NQTElULCAmdHR5LT5mbGFncykpCkBAIC0xMzc1LDYgKzE3MzMsMjQgQEAKIH0KIAogCisvKioKKyAqCXR0eV93cml0ZQkJLQl3cml0ZSBtZXRob2QgZm9yIHR0eSBkZXZpY2UgZmlsZQorICoJQGZpbGU6IHR0eSBmaWxlIHBvaW50ZXIKKyAqCUBidWY6IHVzZXIgZGF0YSB0byB3cml0ZQorICoJQGNvdW50OiBieXRlcyB0byB3cml0ZQorICoJQHBwb3M6IHVudXNlZAorICoKKyAqCVdyaXRlIGRhdGEgdG8gYSB0dHkgZGV2aWNlIHZpYSB0aGUgbGluZSBkaXNjaXBsaW5lLgorICoKKyAqCUxvY2tpbmc6CisgKgkJTG9ja3MgdGhlIGxpbmUgZGlzY2lwbGluZSBhcyByZXF1aXJlZAorICoJCVdyaXRlcyB0byB0aGUgdHR5IGRyaXZlciBhcmUgc2VyaWFsaXplZCBieSB0aGUgYXRvbWljX3dyaXRlX2xvY2sKKyAqCWFuZCBhcmUgdGhlbiBwcm9jZXNzZWQgaW4gY2h1bmtzIHRvIHRoZSBkZXZpY2UuIFRoZSBsaW5lIGRpc2NpcGxpbmUKKyAqCXdyaXRlIG1ldGhvZCB3aWxsIG5vdCBiZSBpbnZvbGtlZCBpbiBwYXJhbGxlbCBmb3IgZWFjaCBkZXZpY2UKKyAqCQlUaGUgbGluZSBkaXNjaXBsaW5lIHdyaXRlIG1ldGhvZCBpcyBjYWxsZWQgdW5kZXIgdGhlIGJpZworICoJa2VybmVsIGxvY2sgZm9yIGhpc3RvcmljYWwgcmVhc29ucy4gTmV3IGNvZGUgc2hvdWxkIG5vdCByZWx5IG9uIHRoaXMuCisgKi8KKwogc3RhdGljIHNzaXplX3QgdHR5X3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwKIAkJCSBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0xNDIyLDcgKzE3OTgsMTggQEAKIAogc3RhdGljIGNoYXIgcHR5Y2hhcltdID0gInBxcnN0dXZ3eHl6YWJjZGUiOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHR5X2xpbmVfbmFtZShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgaW5kZXgsIGNoYXIgKnApCisvKioKKyAqCXB0eV9saW5lX25hbWUJLQlnZW5lcmF0ZSBuYW1lIGZvciBhIHB0eQorICoJQGRyaXZlcjogdGhlIHR0eSBkcml2ZXIgaW4gdXNlCisgKglAaW5kZXg6IHRoZSBtaW5vciBudW1iZXIKKyAqCUBwOiBvdXRwdXQgYnVmZmVyIG9mIGF0IGxlYXN0IDYgYnl0ZXMKKyAqCisgKglHZW5lcmF0ZSBhIG5hbWUgZnJvbSBhIGRyaXZlciByZWZlcmVuY2UgYW5kIHdyaXRlIGl0IHRvIHRoZSBvdXRwdXQKKyAqCWJ1ZmZlci4KKyAqCisgKglMb2NraW5nOiBOb25lCisgKi8KK3N0YXRpYyB2b2lkIHB0eV9saW5lX25hbWUoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgaW50IGluZGV4LCBjaGFyICpwKQogewogCWludCBpID0gaW5kZXggKyBkcml2ZXItPm5hbWVfYmFzZTsKIAkvKiAtPm5hbWUgaXMgaW5pdGlhbGl6ZWQgdG8gInR0eXAiLCBidXQgInR0eSIgaXMgZXhwZWN0ZWQgKi8KQEAgLTE0MzEsMjQgKzE4MTgsNTMgQEAKIAkJCXB0eWNoYXJbaSA+PiA0ICYgMHhmXSwgaSAmIDB4Zik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0dHlfbGluZV9uYW1lKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBpbmRleCwgY2hhciAqcCkKKy8qKgorICoJcHR5X2xpbmVfbmFtZQktCWdlbmVyYXRlIG5hbWUgZm9yIGEgdHR5CisgKglAZHJpdmVyOiB0aGUgdHR5IGRyaXZlciBpbiB1c2UKKyAqCUBpbmRleDogdGhlIG1pbm9yIG51bWJlcgorICoJQHA6IG91dHB1dCBidWZmZXIgb2YgYXQgbGVhc3QgNyBieXRlcworICoKKyAqCUdlbmVyYXRlIGEgbmFtZSBmcm9tIGEgZHJpdmVyIHJlZmVyZW5jZSBhbmQgd3JpdGUgaXQgdG8gdGhlIG91dHB1dAorICoJYnVmZmVyLgorICoKKyAqCUxvY2tpbmc6IE5vbmUKKyAqLworc3RhdGljIHZvaWQgdHR5X2xpbmVfbmFtZShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCBpbnQgaW5kZXgsIGNoYXIgKnApCiB7CiAJc3ByaW50ZihwLCAiJXMlZCIsIGRyaXZlci0+bmFtZSwgaW5kZXggKyBkcml2ZXItPm5hbWVfYmFzZSk7CiB9CiAKLS8qCisvKioKKyAqCWluaXRfZGV2CQktCWluaXRpYWxpc2UgYSB0dHkgZGV2aWNlCisgKglAZHJpdmVyOiB0dHkgZHJpdmVyIHdlIGFyZSBvcGVuaW5nIGEgZGV2aWNlIG9uCisgKglAaWR4OiBkZXZpY2UgaW5kZXgKKyAqCUB0dHk6IHJldHVybmVkIHR0eSBzdHJ1Y3R1cmUKKyAqCisgKglQcmVwYXJlIGEgdHR5IGRldmljZS4gVGhpcyBtYXkgbm90IGJlIGEgIm5ldyIgY2xlYW4gZGV2aWNlIGJ1dAorICoJY291bGQgYWxzbyBiZSBhbiBhY3RpdmUgZGV2aWNlLiBUaGUgcHR5IGRyaXZlcnMgcmVxdWlyZSBzcGVjaWFsCisgKgloYW5kbGluZyBiZWNhdXNlIG9mIHRoaXMuCisgKgorICoJTG9ja2luZzoKKyAqCQlUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIHVuZGVyIHRoZSB0dHlfbXV0ZXgsIHdoaWNoCisgKglwcm90ZWN0cyB1cyBmcm9tIHRoZSB0dHkgc3RydWN0IG9yIGRyaXZlciBpdHNlbGYgZ29pbmcgYXdheS4KKyAqCisgKglPbiBleGl0IHRoZSB0dHkgZGV2aWNlIGhhcyB0aGUgbGluZSBkaXNjaXBsaW5lIGF0dGFjaGVkIGFuZAorICoJYSByZWZlcmVuY2UgY291bnQgb2YgMS4gSWYgYSBwYWlyIHdhcyBjcmVhdGVkIGZvciBwdHkvdHR5IHVzZQorICoJYW5kIHRoZSBvdGhlciB3YXMgYSBwdHkgbWFzdGVyIHRoZW4gaXQgdG9vIGhhcyBhIHJlZmVyZW5jZSBjb3VudCBvZiAxLgorICoKICAqIFdTSCAwNi8wOS85NzogUmV3cml0dGVuIHRvIHJlbW92ZSByYWNlcyBhbmQgcHJvcGVybHkgY2xlYW4gdXAgYWZ0ZXIgYQogICogZmFpbGVkIG9wZW4uICBUaGUgbmV3IGNvZGUgcHJvdGVjdHMgdGhlIG9wZW4gd2l0aCBhIG11dGV4LCBzbyBpdCdzCiAgKiByZWFsbHkgcXVpdGUgc3RyYWlnaHRmb3J3YXJkLiAgVGhlIG11dGV4IGxvY2tpbmcgY2FuIHByb2JhYmx5IGJlCiAgKiByZWxheGVkIGZvciB0aGUgKG1vc3QgY29tbW9uKSBjYXNlIG9mIHJlb3BlbmluZyBhIHR0eS4KICAqLworCiBzdGF0aWMgaW50IGluaXRfZGV2KHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsIGludCBpZHgsCiAJc3RydWN0IHR0eV9zdHJ1Y3QgKipyZXRfdHR5KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHksICpvX3R0eTsKIAlzdHJ1Y3QgdGVybWlvcyAqdHAsICoqdHBfbG9jLCAqb190cCwgKipvX3RwX2xvYzsKIAlzdHJ1Y3QgdGVybWlvcyAqbHRwLCAqKmx0cF9sb2MsICpvX2x0cCwgKipvX2x0cF9sb2M7Ci0JaW50IHJldHZhbD0wOworCWludCByZXR2YWwgPSAwOwogCiAJLyogY2hlY2sgd2hldGhlciB3ZSdyZSByZW9wZW5pbmcgYW4gZXhpc3RpbmcgdHR5ICovCiAJaWYgKGRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX0RFVlBUU19NRU0pIHsKQEAgLTE2NjIsMTAgKzIwNzgsMjAgQEAKIAlnb3RvIGVuZF9pbml0OwogfQogCi0vKgotICogUmVsZWFzZXMgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHR0eSBzdHJ1Y3R1cmUsIGFuZCBjbGVhcnMgb3V0IHRoZQotICogZHJpdmVyIHRhYmxlIHNsb3RzLgorLyoqCisgKglyZWxlYXNlX21lbQkJLQlyZWxlYXNlIHR0eSBzdHJ1Y3R1cmUgbWVtb3J5CisgKgorICoJUmVsZWFzZXMgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhIHR0eSBzdHJ1Y3R1cmUsIGFuZCBjbGVhcnMgb3V0IHRoZQorICoJZHJpdmVyIHRhYmxlIHNsb3RzLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGEgZGV2aWNlIGlzIG5vIGxvbmdlcgorICoJaW4gdXNlLiBJdCBhbHNvIGdldHMgY2FsbGVkIHdoZW4gc2V0dXAgb2YgYSBkZXZpY2UgZmFpbHMuCisgKgorICoJTG9ja2luZzoKKyAqCQl0dHlfbXV0ZXggLSBzb21ldGltZXMgb25seQorICoJCXRha2VzIHRoZSBmaWxlIGxpc3QgbG9jayBpbnRlcm5hbGx5IHdoZW4gd29ya2luZyBvbiB0aGUgbGlzdAorICoJb2YgdHR5cyB0aGF0IHRoZSBkcml2ZXIga2VlcHMuCisgKgkJRklYTUU6IHNob3VsZCB3ZSByZXF1aXJlIHR0eV9tdXRleCBpcyBoZWxkIGhlcmUgPz8KICAqLworCiBzdGF0aWMgdm9pZCByZWxlYXNlX21lbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgaWR4KQogewogCXN0cnVjdCB0dHlfc3RydWN0ICpvX3R0eTsKQEAgLTIwMDYsMTggKzI0MzIsMjcgQEAKIAogfQogCi0vKgotICogdHR5X29wZW4gYW5kIHR0eV9yZWxlYXNlIGtlZXAgdXAgdGhlIHR0eSBjb3VudCB0aGF0IGNvbnRhaW5zIHRoZQotICogbnVtYmVyIG9mIG9wZW5zIGRvbmUgb24gYSB0dHkuIFdlIGNhbm5vdCB1c2UgdGhlIGlub2RlLWNvdW50LCBhcwotICogZGlmZmVyZW50IGlub2RlcyBtaWdodCBwb2ludCB0byB0aGUgc2FtZSB0dHkuCisvKioKKyAqCXR0eV9vcGVuCQktCW9wZW4gYSB0dHkgZGV2aWNlCisgKglAaW5vZGU6IGlub2RlIG9mIGRldmljZSBmaWxlCisgKglAZmlscDogZmlsZSBwb2ludGVyIHRvIHR0eQogICoKLSAqIE9wZW4tY291bnRpbmcgaXMgbmVlZGVkIGZvciBwdHkgbWFzdGVycywgYXMgd2VsbCBhcyBmb3Iga2VlcGluZwotICogdHJhY2sgb2Ygc2VyaWFsIGxpbmVzOiBEVFIgaXMgZHJvcHBlZCB3aGVuIHRoZSBsYXN0IGNsb3NlIGhhcHBlbnMuCi0gKiAoVGhpcyBpcyBub3QgZG9uZSBzb2xlbHkgdGhyb3VnaCB0dHktPmNvdW50LCBub3cuICAtIFRlZCAxLzI3LzkyKQorICoJdHR5X29wZW4gYW5kIHR0eV9yZWxlYXNlIGtlZXAgdXAgdGhlIHR0eSBjb3VudCB0aGF0IGNvbnRhaW5zIHRoZQorICoJbnVtYmVyIG9mIG9wZW5zIGRvbmUgb24gYSB0dHkuIFdlIGNhbm5vdCB1c2UgdGhlIGlub2RlLWNvdW50LCBhcworICoJZGlmZmVyZW50IGlub2RlcyBtaWdodCBwb2ludCB0byB0aGUgc2FtZSB0dHkuCiAgKgotICogVGhlIHRlcm1pb3Mgc3RhdGUgb2YgYSBwdHkgaXMgcmVzZXQgb24gZmlyc3Qgb3BlbiBzbyB0aGF0Ci0gKiBzZXR0aW5ncyBkb24ndCBwZXJzaXN0IGFjcm9zcyByZXVzZS4KKyAqCU9wZW4tY291bnRpbmcgaXMgbmVlZGVkIGZvciBwdHkgbWFzdGVycywgYXMgd2VsbCBhcyBmb3Iga2VlcGluZworICoJdHJhY2sgb2Ygc2VyaWFsIGxpbmVzOiBEVFIgaXMgZHJvcHBlZCB3aGVuIHRoZSBsYXN0IGNsb3NlIGhhcHBlbnMuCisgKgkoVGhpcyBpcyBub3QgZG9uZSBzb2xlbHkgdGhyb3VnaCB0dHktPmNvdW50LCBub3cuICAtIFRlZCAxLzI3LzkyKQorICoKKyAqCVRoZSB0ZXJtaW9zIHN0YXRlIG9mIGEgcHR5IGlzIHJlc2V0IG9uIGZpcnN0IG9wZW4gc28gdGhhdAorICoJc2V0dGluZ3MgZG9uJ3QgcGVyc2lzdCBhY3Jvc3MgcmV1c2UuCisgKgorICoJTG9ja2luZzogdHR5X211dGV4IHByb3RlY3RzIGN1cnJlbnQtPnNpZ25hbC0+dHR5LCBnZXRfdHR5X2RyaXZlciBhbmQKKyAqCQlpbml0X2RldiB3b3JrLiB0dHktPmNvdW50IHNob3VsZCBwcm90ZWN0IHRoZSByZXN0LgorICoJCXRhc2tfbG9jayBpcyBoZWxkIHRvIHVwZGF0ZSB0YXNrIGRldGFpbHMgZm9yIHNlc3Npb25zCiAgKi8KKwogc3RhdGljIGludCB0dHlfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CkBAIC0yMTMyLDYgKzI1NjcsMTggQEAKIH0KIAogI2lmZGVmIENPTkZJR19VTklYOThfUFRZUworLyoqCisgKglwdG14X29wZW4JCS0Jb3BlbiBhIHVuaXggOTggcHR5IG1hc3RlcgorICoJQGlub2RlOiBpbm9kZSBvZiBkZXZpY2UgZmlsZQorICoJQGZpbHA6IGZpbGUgcG9pbnRlciB0byB0dHkKKyAqCisgKglBbGxvY2F0ZSBhIHVuaXg5OCBwdHkgbWFzdGVyIGRldmljZSBmcm9tIHRoZSBwdG14IGRyaXZlci4KKyAqCisgKglMb2NraW5nOiB0dHlfbXV0ZXggcHJvdGVjdHMgdGhlaW5pdF9kZXYgd29yay4gdHR5LT5jb3VudCBzaG91bGQKKyAJCXByb3RlY3QgdGhlIHJlc3QuCisgKgkJYWxsb2NhdGVkX3B0eXNfbG9jayBoYW5kbGVzIHRoZSBsaXN0IG9mIGZyZWUgcHR5IG51bWJlcnMKKyAqLworCiBzdGF0aWMgaW50IHB0bXhfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CkBAIC0yMTkxLDYgKzI2MzgsMTggQEAKIH0KICNlbmRpZgogCisvKioKKyAqCXR0eV9yZWxlYXNlCQktCXZmcyBjYWxsYmFjayBmb3IgY2xvc2UKKyAqCUBpbm9kZTogaW5vZGUgb2YgdHR5CisgKglAZmlscDogZmlsZSBwb2ludGVyIGZvciBoYW5kbGUgdG8gdHR5CisgKgorICoJQ2FsbGVkIHRoZSBsYXN0IHRpbWUgZWFjaCBmaWxlIGhhbmRsZSBpcyBjbG9zZWQgdGhhdCByZWZlcmVuY2VzCisgKgl0aGlzIHR0eS4gVGhlcmUgbWF5IGhvd2V2ZXIgYmUgc2V2ZXJhbCBzdWNoIHJlZmVyZW5jZXMuCisgKgorICoJTG9ja2luZzoKKyAqCQlUYWtlcyBia2wuIFNlZSByZWxlYXNlX2RldgorICovCisKIHN0YXRpYyBpbnQgdHR5X3JlbGVhc2Uoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKIHsKIAlsb2NrX2tlcm5lbCgpOwpAQCAtMjE5OSw3ICsyNjU4LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIE5vIGtlcm5lbCBsb2NrIGhlbGQgLSBmaW5lICovCisvKioKKyAqCXR0eV9wb2xsCS0JY2hlY2sgdHR5IHN0YXR1cworICoJQGZpbHA6IGZpbGUgYmVpbmcgcG9sbGVkCisgKglAd2FpdDogcG9sbCB3YWl0IHN0cnVjdHVyZXMgdG8gdXBkYXRlCisgKgorICoJQ2FsbCB0aGUgbGluZSBkaXNjaXBsaW5lIHBvbGxpbmcgbWV0aG9kIHRvIG9idGFpbiB0aGUgcG9sbAorICoJc3RhdHVzIG9mIHRoZSBkZXZpY2UuCisgKgorICoJTG9ja2luZzogbG9ja3MgY2FsbGVkIGxpbmUgZGlzY2lwbGluZSBidXQgbGRpc2MgcG9sbCBtZXRob2QKKyAqCW1heSBiZSByZS1lbnRlcmVkIGZyZWVseSBieSBvdGhlciBjYWxsZXJzLgorICovCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdHR5X3BvbGwoc3RydWN0IGZpbGUgKiBmaWxwLCBwb2xsX3RhYmxlICogd2FpdCkKIHsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eTsKQEAgLTIyNDMsNiArMjcxMywyMSBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqCXRpb2NzdGkJCQktCWZha2UgaW5wdXQgY2hhcmFjdGVyCisgKglAdHR5OiB0dHkgdG8gZmFrZSBpbnB1dCBpbnRvCisgKglAcDogcG9pbnRlciB0byBjaGFyYWN0ZXIKKyAqCisgKglGYWtlIGlucHV0IHRvIGEgdHR5IGRldmljZS4gRG9lcyB0aGUgbmVjY2Vzc2FyeSBsb2NraW5nIGFuZAorICoJaW5wdXQgbWFuYWdlbWVudC4KKyAqCisgKglGSVhNRTogZG9lcyBub3QgaG9ub3VyIGZsb3cgY29udHJvbCA/PworICoKKyAqCUxvY2tpbmc6CisgKgkJQ2FsbGVkIGZ1bmN0aW9ucyB0YWtlIHR0eV9sZGlzY19sb2NrCisgKgkJY3VycmVudC0+c2lnbmFsLT50dHkgY2hlY2sgaXMgc2FmZSB3aXRob3V0IGxvY2tzCisgKi8KKwogc3RhdGljIGludCB0aW9jc3RpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgX191c2VyICpwKQogewogCWNoYXIgY2gsIG1ieiA9IDA7CkBAIC0yMjU4LDYgKzI3NDMsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKgl0aW9jZ3dpbnN6CQktCWltcGxlbWVudCB3aW5kb3cgcXVlcnkgaW9jdGwKKyAqCUB0dHk7IHR0eQorICoJQGFyZzogdXNlciBidWZmZXIgZm9yIHJlc3VsdAorICoKKyAqCUNvcGllcyB0aGUga2VybmVsIGlkZWEgb2YgdGhlIHdpbmRvdyBzaXplIGludG8gdGhlIHVzZXIgYnVmZmVyLiBObworICoJbG9ja2luZyBpcyBkb25lLgorICoKKyAqCUZJWE1FOiBSZXR1cm5pbmcgcmFuZG9tIHZhbHVlcyByYWNpbmcgYSB3aW5kb3cgc2l6ZSBzZXQgaXMgd3JvbmcKKyAqCXNob3VsZCBsb2NrIGhlcmUgYWdhaW5zdCB0aGF0CisgKi8KKwogc3RhdGljIGludCB0aW9jZ3dpbnN6KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB3aW5zaXplIF9fdXNlciAqIGFyZykKIHsKIAlpZiAoY29weV90b191c2VyKGFyZywgJnR0eS0+d2luc2l6ZSwgc2l6ZW9mKCphcmcpKSkKQEAgLTIyNjUsNiArMjc2MiwyNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqCXRpb2Nzd2luc3oJCS0JaW1wbGVtZW50IHdpbmRvdyBzaXplIHNldCBpb2N0bAorICoJQHR0eTsgdHR5CisgKglAYXJnOiB1c2VyIGJ1ZmZlciBmb3IgcmVzdWx0CisgKgorICoJQ29waWVzIHRoZSB1c2VyIGlkZWEgb2YgdGhlIHdpbmRvdyBzaXplIHRvIHRoZSBrZXJuZWwuIFRyYWRpdGlvbmFsbHkKKyAqCXRoaXMgaXMganVzdCBhZHZpc29yeSBpbmZvcm1hdGlvbiBidXQgZm9yIHRoZSBMaW51eCBjb25zb2xlIGl0CisgKglhY3R1YWxseSBoYXMgZHJpdmVyIGxldmVsIG1lYW5pbmcgYW5kIHRyaWdnZXJzIGEgVkMgcmVzaXplLgorICoKKyAqCUxvY2tpbmc6CisgKgkJVGhlIGNvbnNvbGVfc2VtIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvIG5vdCB0cnkgYW5kIHJlc2l6ZQorICoJdGhlIGNvbnNvbGUgdHdpY2UgYXQgb25jZS4KKyAqCUZJWE1FOiBUd28gcmFjaW5nIHNpemUgc2V0cyBtYXkgbGVhdmUgdGhlIGNvbnNvbGUgYW5kIGtlcm5lbAorICoJCXBhcmFtZXRlcnMgZGlzYWdyZWVpbmcuIElzIHRoaXMgZXhwbG9pdGFibGUgPworICoJRklYTUU6IFJhbmRvbSB2YWx1ZXMgcmFjaW5nIGEgd2luZG93IHNpemUgZ2V0IGlzIHdyb25nCisgKglzaG91bGQgbG9jayBoZXJlIGFnYWluc3QgdGhhdAorICovCisKIHN0YXRpYyBpbnQgdGlvY3N3aW5zeihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVhbF90dHksCiAJc3RydWN0IHdpbnNpemUgX191c2VyICogYXJnKQogewpAQCAtMjI5NCw2ICsyODA5LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICoJdGlvY2NvbnMJLQlhbGxvdyBhZG1pbiB0byBtb3ZlIGxvZ2ljYWwgY29uc29sZQorICoJQGZpbGU6IHRoZSBmaWxlIHRvIGJlY29tZSBjb25zb2xlCisgKgorICoJQWxsb3cgdGhlIGFkbWluc3RyYXRvciB0byBtb3ZlIHRoZSByZWRpcmVjdGVkIGNvbnNvbGUgZGV2aWNlCisgKgorICoJTG9ja2luZzogdXNlcyByZWRpcmVjdF9sb2NrIHRvIGd1YXJkIHRoZSByZWRpcmVjdCBpbmZvcm1hdGlvbgorICovCisKIHN0YXRpYyBpbnQgdGlvY2NvbnMoc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQpAQCAtMjMxOSw2ICsyODQzLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICoJZmlvbmJpbwkJLQlub24gYmxvY2tpbmcgaW9jdGwKKyAqCUBmaWxlOiBmaWxlIHRvIHNldCBibG9ja2luZyB2YWx1ZQorICoJQHA6IHVzZXIgcGFyYW1ldGVyCisgKgorICoJSGlzdG9yaWNhbCB0dHkgaW50ZXJmYWNlcyBoYWQgYSBibG9ja2luZyBjb250cm9sIGlvY3RsIGJlZm9yZQorICoJdGhlIGdlbmVyaWMgZnVuY3Rpb25hbGl0eSBleGlzdGVkLiBUaGlzIHBpZWNlIG9mIGhpc3RvcnkgaXMgcHJlc2VydmVkCisgKglpbiB0aGUgZXhwZWN0ZWQgdHR5IEFQSSBvZiBwb3NpeCBPUydzLgorICoKKyAqCUxvY2tpbmc6IG5vbmUsIHRoZSBvcGVuIGZsZSBoYW5kbGUgZW5zdXJlcyBpdCB3b24ndCBnbyBhd2F5LgorICovCiAKIHN0YXRpYyBpbnQgZmlvbmJpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IF9fdXNlciAqcCkKIHsKQEAgLTIzMzQsNiArMjg2OSwyMyBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqCXRpb2NzY3R0eQktCXNldCBjb250cm9sbGluZyB0dHkKKyAqCUB0dHk6IHR0eSBzdHJ1Y3R1cmUKKyAqCUBhcmc6IHVzZXIgYXJndW1lbnQKKyAqCisgKglUaGlzIGlvY3RsIGlzIHVzZWQgdG8gbWFuYWdlIGpvYiBjb250cm9sLiBJdCBwZXJtaXRzIGEgc2Vzc2lvbgorICoJbGVhZGVyIHRvIHNldCB0aGlzIHR0eSBhcyB0aGUgY29udHJvbGxpbmcgdHR5IGZvciB0aGUgc2Vzc2lvbi4KKyAqCisgKglMb2NraW5nOgorICoJCVRha2VzIHRhc2tsaXN0IGxvY2sgaW50ZXJuYWxseSB0byB3YWxrIHNlc3Npb25zCisgKgkJVGFrZXMgdGFza19sb2NrKCkgd2hlbiB1cGRhdGluZyBzaWduYWwtPnR0eQorICoKKyAqCUZJWE1FOiB0dHlfbXV0ZXggaXMgbmVlZGVkIHRvIHByb3RlY3Qgc2lnbmFsLT50dHkgcmVmZXJlbmNlcy4KKyAqCUZJWE1FOiB3aHkgdGFza19sb2NrIG9uIHRoZSBzaWduYWwtPnR0eSByZWZlcmVuY2UgPz8KKyAqCisgKi8KKwogc3RhdGljIGludCB0aW9jc2N0dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IGFyZykKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CkBAIC0yMzc0LDYgKzI5MjYsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKgl0aW9jZ3BncnAJCS0JZ2V0IHByb2Nlc3MgZ3JvdXAKKyAqCUB0dHk6IHR0eSBwYXNzZWQgYnkgdXNlcgorICoJQHJlYWxfdHR5OiB0dHkgc2lkZSBvZiB0aGUgdHR5IHBhc2VkIGJ5IHRoZSB1c2VyIGlmIGEgcHR5IGVsc2UgdGhlIHR0eQorICoJQHA6IHJldHVybmVkIHBpZAorICoKKyAqCU9idGFpbiB0aGUgcHJvY2VzcyBncm91cCBvZiB0aGUgdHR5LiBJZiB0aGVyZSBpcyBubyBwcm9jZXNzIGdyb3VwCisgKglyZXR1cm4gYW4gZXJyb3IuCisgKgorICoJTG9ja2luZzogbm9uZS4gUmVmZXJlbmNlIHRvIC0+c2lnbmFsLT50dHkgaXMgc2FmZS4KKyAqLworCiBzdGF0aWMgaW50IHRpb2NncGdycChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVhbF90dHksIHBpZF90IF9fdXNlciAqcCkKIHsKIAkvKgpAQCAtMjM4NSw2ICsyOTQ5LDIwIEBACiAJcmV0dXJuIHB1dF91c2VyKHJlYWxfdHR5LT5wZ3JwLCBwKTsKIH0KIAorLyoqCisgKgl0aW9jc3BncnAJCS0JYXR0ZW1wdCB0byBzZXQgcHJvY2VzcyBncm91cAorICoJQHR0eTogdHR5IHBhc3NlZCBieSB1c2VyCisgKglAcmVhbF90dHk6IHR0eSBzaWRlIGRldmljZSBtYXRjaGluZyB0dHkgcGFzc2VkIGJ5IHVzZXIKKyAqCUBwOiBwaWQgcG9pbnRlcgorICoKKyAqCVNldCB0aGUgcHJvY2VzcyBncm91cCBvZiB0aGUgdHR5IHRvIHRoZSBzZXNzaW9uIHBhc3NlZC4gT25seQorICoJcGVybWl0dGVkIHdoZXJlIHRoZSB0dHkgc2Vzc2lvbiBpcyBvdXIgc2Vzc2lvbi4KKyAqCisgKglMb2NraW5nOiBOb25lCisgKgorICoJRklYTUU6IGN1cnJlbnQtPnNpZ25hbC0+dHR5IHJlZmVyZW5jaW5nIGlzIHVuc2FmZS4KKyAqLworCiBzdGF0aWMgaW50IHRpb2NzcGdycChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqcmVhbF90dHksIHBpZF90IF9fdXNlciAqcCkKIHsKIAlwaWRfdCBwZ3JwOwpAQCAtMjQwOCw2ICsyOTg2LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICoJdGlvY2dzaWQJCS0JZ2V0IHNlc3Npb24gaWQKKyAqCUB0dHk6IHR0eSBwYXNzZWQgYnkgdXNlcgorICoJQHJlYWxfdHR5OiB0dHkgc2lkZSBvZiB0aGUgdHR5IHBhc2VkIGJ5IHRoZSB1c2VyIGlmIGEgcHR5IGVsc2UgdGhlIHR0eQorICoJQHA6IHBvaW50ZXIgdG8gcmV0dXJuZWQgc2Vzc2lvbiBpZAorICoKKyAqCU9idGFpbiB0aGUgc2Vzc2lvbiBpZCBvZiB0aGUgdHR5LiBJZiB0aGVyZSBpcyBubyBzZXNzaW9uCisgKglyZXR1cm4gYW4gZXJyb3IuCisgKgorICoJTG9ja2luZzogbm9uZS4gUmVmZXJlbmNlIHRvIC0+c2lnbmFsLT50dHkgaXMgc2FmZS4KKyAqLworCiBzdGF0aWMgaW50IHRpb2Nnc2lkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpyZWFsX3R0eSwgcGlkX3QgX191c2VyICpwKQogewogCS8qCkBAIC0yNDIxLDYgKzMwMTEsMTYgQEAKIAlyZXR1cm4gcHV0X3VzZXIocmVhbF90dHktPnNlc3Npb24sIHApOwogfQogCisvKioKKyAqCXRpb2NzZXRkCS0Jc2V0IGxpbmUgZGlzY2lwbGluZQorICoJQHR0eTogdHR5IGRldmljZQorICoJQHA6IHBvaW50ZXIgdG8gdXNlciBkYXRhCisgKgorICoJU2V0IHRoZSBsaW5lIGRpc2NpcGxpbmUgYWNjb3JkaW5nIHRvIHVzZXIgcmVxdWVzdC4KKyAqCisgKglMb2NraW5nOiBzZWUgdHR5X3NldF9sZGlzYywgdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGEgaGVscGVyCisgKi8KKwogc3RhdGljIGludCB0aW9jc2V0ZChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgX191c2VyICpwKQogewogCWludCBsZGlzYzsKQEAgLTI0MzAsNiArMzAzMCwyMSBAQAogCXJldHVybiB0dHlfc2V0X2xkaXNjKHR0eSwgbGRpc2MpOwogfQogCisvKioKKyAqCXNlbmRfYnJlYWsJLQlwZXJmb3JtZWQgdGltZSBicmVhaworICoJQHR0eTogZGV2aWNlIHRvIGJyZWFrIG9uCisgKglAZHVyYXRpb246IHRpbWVvdXQgaW4gbVMKKyAqCisgKglQZXJmb3JtIGEgdGltZWQgYnJlYWsgb24gaGFyZHdhcmUgdGhhdCBsYWNrcyBpdHMgb3duIGRyaXZlciBsZXZlbAorICoJdGltZWQgYnJlYWsgZnVuY3Rpb25hbGl0eS4KKyAqCisgKglMb2NraW5nOgorICoJCU5vbmUKKyAqCisgKglGSVhNRToKKyAqCQlXaGF0IGlmIHR3byBvdmVybGFwCisgKi8KKwogc3RhdGljIGludCBzZW5kX2JyZWFrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGludCBkdXJhdGlvbikKIHsKIAl0dHktPmRyaXZlci0+YnJlYWtfY3RsKHR0eSwgLTEpOwpAQCAtMjQ0Miw4ICszMDU3LDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXR0eV90aW9jbWdldChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IF9fdXNlciAqcCkKKy8qKgorICoJdGlvY21nZXQJCS0JZ2V0IG1vZGVtIHN0YXR1cworICoJQHR0eTogdHR5IGRldmljZQorICoJQGZpbGU6IHVzZXIgZmlsZSBwb2ludGVyCisgKglAcDogcG9pbnRlciB0byByZXN1bHQKKyAqCisgKglPYnRhaW4gdGhlIG1vZGVtIHN0YXR1cyBiaXRzIGZyb20gdGhlIHR0eSBkcml2ZXIgaWYgdGhlIGZlYXR1cmUKKyAqCWlzIHN1cHBvcnRlZC4gUmV0dXJuIC1FSU5WQUwgaWYgaXQgaXMgbm90IGF2YWlsYWJsZS4KKyAqCisgKglMb2NraW5nOiBub25lICh1cCB0byB0aGUgZHJpdmVyKQorICovCisKK3N0YXRpYyBpbnQgdHR5X3Rpb2NtZ2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgX191c2VyICpwKQogewogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCkBAIC0yNDU2LDggKzMwODIsMjAgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50Ci10dHlfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisvKioKKyAqCXRpb2Ntc2V0CQktCXNldCBtb2RlbSBzdGF0dXMKKyAqCUB0dHk6IHR0eSBkZXZpY2UKKyAqCUBmaWxlOiB1c2VyIGZpbGUgcG9pbnRlcgorICoJQGNtZDogY29tbWFuZCAtIGNsZWFyIGJpdHMsIHNldCBiaXRzIG9yIHNldCBhbGwKKyAqCUBwOiBwb2ludGVyIHRvIGRlc2lyZWQgYml0cworICoKKyAqCVNldCB0aGUgbW9kZW0gc3RhdHVzIGJpdHMgZnJvbSB0aGUgdHR5IGRyaXZlciBpZiB0aGUgZmVhdHVyZQorICoJaXMgc3VwcG9ydGVkLiBSZXR1cm4gLUVJTlZBTCBpZiBpdCBpcyBub3QgYXZhaWxhYmxlLgorICoKKyAqCUxvY2tpbmc6IG5vbmUgKHVwIHRvIHRoZSBkcml2ZXIpCisgKi8KKworc3RhdGljIGludCB0dHlfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCiAJICAgICB1bnNpZ25lZCBfX3VzZXIgKnApCiB7CiAJaW50IHJldHZhbCA9IC1FSU5WQUw7CkBAIC0yNTczLDYgKzMyMTEsNyBAQAogCQkJY2xlYXJfYml0KFRUWV9FWENMVVNJVkUsICZ0dHktPmZsYWdzKTsKIAkJCXJldHVybiAwOwogCQljYXNlIFRJT0NOT1RUWToKKwkJCS8qIEZJWE1FOiB0YWtzIGxvY2sgb3IgdHR5X211dGV4ID8gKi8KIAkJCWlmIChjdXJyZW50LT5zaWduYWwtPnR0eSAhPSB0dHkpCiAJCQkJcmV0dXJuIC1FTk9UVFk7CiAJCQlpZiAoY3VycmVudC0+c2lnbmFsLT5sZWFkZXIpCkBAIC0yNzUzLDkgKzMzOTIsMTYgQEAKIAogRVhQT1JUX1NZTUJPTChkb19TQUspOwogCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBvdXQgb2YgdGhlIHNvZnR3YXJlIGludGVycnVwdCB0byBmbHVzaCBkYXRhCi0gKiBmcm9tIHRoZSBidWZmZXIgY2hhaW4gdG8gdGhlIGxpbmUgZGlzY2lwbGluZS4KKy8qKgorICoJZmx1c2hfdG9fbGRpc2MKKyAqCUBwcml2YXRlXzogdHR5IHN0cnVjdHVyZSBwYXNzZWQgZnJvbSB3b3JrIHF1ZXVlLgorICoKKyAqCVRoaXMgcm91dGluZSBpcyBjYWxsZWQgb3V0IG9mIHRoZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgdG8gZmx1c2ggZGF0YQorICoJZnJvbSB0aGUgYnVmZmVyIGNoYWluIHRvIHRoZSBsaW5lIGRpc2NpcGxpbmUuCisgKgorICoJTG9ja2luZzogaG9sZHMgdHR5LT5idWYubG9jayB0byBndWFyZCBidWZmZXIgbGlzdC4gRHJvcHMgdGhlIGxvY2sKKyAqCXdoaWxlIGludm9raW5nIHRoZSBsaW5lIGRpc2NpcGxpbmUgcmVjZWl2ZV9idWYgbWV0aG9kLiBUaGUKKyAqCXJlY2VpdmVfYnVmIG1ldGhvZCBpcyBzaW5nbGUgdGhyZWFkZWQgZm9yIGVhY2ggdHR5IGluc3RhbmNlLgogICovCiAgCiBzdGF0aWMgdm9pZCBmbHVzaF90b19sZGlzYyh2b2lkICpwcml2YXRlXykKQEAgLTI4MzEsNiArMzQ3Nyw4IEBACiAgKglDb252ZXJ0IHRlcm1pb3MgYmF1ZCByYXRlIGRhdGEgaW50byBhIHNwZWVkLiBUaGlzIHNob3VsZCBiZSBjYWxsZWQKICAqCXdpdGggdGhlIHRlcm1pb3MgbG9jayBoZWxkIGlmIHRoaXMgdGVybWlvcyBpcyBhIHRlcm1pbmFsIHRlcm1pb3MKICAqCXN0cnVjdHVyZS4gTWF5IGNoYW5nZSB0aGUgdGVybWlvcyBkYXRhLgorICoKKyAqCUxvY2tpbmc6IG5vbmUKICAqLwogIAogaW50IHR0eV90ZXJtaW9zX2JhdWRfcmF0ZShzdHJ1Y3QgdGVybWlvcyAqdGVybWlvcykKQEAgLTI4NTksNiArMzUwNyw4IEBACiAgKglSZXR1cm5zIHRoZSBiYXVkIHJhdGUgYXMgYW4gaW50ZWdlciBmb3IgdGhpcyB0ZXJtaW5hbC4gVGhlCiAgKgl0ZXJtaW9zIGxvY2sgbXVzdCBiZSBoZWxkIGJ5IHRoZSBjYWxsZXIgYW5kIHRoZSB0ZXJtaW5hbCBiaXQKICAqCWZsYWdzIG1heSBiZSB1cGRhdGVkLgorICoKKyAqCUxvY2tpbmc6IG5vbmUKICAqLwogIAogaW50IHR0eV9nZXRfYmF1ZF9yYXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0yODg4LDYgKzM1MzgsOCBAQAogICoKICAqCUluIHRoZSBldmVudCBvZiB0aGUgcXVldWUgYmVpbmcgYnVzeSBmb3IgZmxpcHBpbmcgdGhlIHdvcmsgd2lsbCBiZQogICoJaGVsZCBvZmYgYW5kIHJldHJpZWQgbGF0ZXIuCisgKgorICoJTG9ja2luZzogdHR5IGJ1ZmZlciBsb2NrLiBEcml2ZXIgbG9ja3MgaW4gbG93IGxhdGVuY3kgbW9kZS4KICAqLwogCiB2b2lkIHR0eV9mbGlwX2J1ZmZlcl9wdXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCkBAIC0yOTA3LDkgKzM1NTksMTYgQEAKIEVYUE9SVF9TWU1CT0wodHR5X2ZsaXBfYnVmZmVyX3B1c2gpOwogCiAKLS8qCi0gKiBUaGlzIHN1YnJvdXRpbmUgaW5pdGlhbGl6ZXMgYSB0dHkgc3RydWN0dXJlLgorLyoqCisgKglpbml0aWFsaXplX3R0eV9zdHJ1Y3QKKyAqCUB0dHk6IHR0eSB0byBpbml0aWFsaXplCisgKgorICoJVGhpcyBzdWJyb3V0aW5lIGluaXRpYWxpemVzIGEgdHR5IHN0cnVjdHVyZSB0aGF0IGhhcyBiZWVuIG5ld2x5CisgKglhbGxvY2F0ZWQuCisgKgorICoJTG9ja2luZzogbm9uZSAtIHR0eSBpbiBxdWVzdGlvbiBtdXN0IG5vdCBiZSBleHBvc2VkIGF0IHRoaXMgcG9pbnQKICAqLworCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplX3R0eV9zdHJ1Y3Qoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAltZW1zZXQodHR5LCAwLCBzaXplb2Yoc3RydWN0IHR0eV9zdHJ1Y3QpKTsKQEAgLTI5MzUsNiArMzU5NCw3IEBACiAvKgogICogVGhlIGRlZmF1bHQgcHV0X2NoYXIgcm91dGluZSBpZiB0aGUgZHJpdmVyIGRpZCBub3QgZGVmaW5lIG9uZS4KICAqLworCiBzdGF0aWMgdm9pZCB0dHlfZGVmYXVsdF9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQogewogCXR0eS0+ZHJpdmVyLT53cml0ZSh0dHksICZjaCwgMSk7CkBAIC0yOTQzLDE5ICszNjAzLDIzIEBACiBzdGF0aWMgc3RydWN0IGNsYXNzICp0dHlfY2xhc3M7CiAKIC8qKgotICogdHR5X3JlZ2lzdGVyX2RldmljZSAtIHJlZ2lzdGVyIGEgdHR5IGRldmljZQotICogQGRyaXZlcjogdGhlIHR0eSBkcml2ZXIgdGhhdCBkZXNjcmliZXMgdGhlIHR0eSBkZXZpY2UKLSAqIEBpbmRleDogdGhlIGluZGV4IGluIHRoZSB0dHkgZHJpdmVyIGZvciB0aGlzIHR0eSBkZXZpY2UKLSAqIEBkZXZpY2U6IGEgc3RydWN0IGRldmljZSB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHR0eSBkZXZpY2UuCi0gKglUaGlzIGZpZWxkIGlzIG9wdGlvbmFsLCBpZiB0aGVyZSBpcyBubyBrbm93biBzdHJ1Y3QgZGV2aWNlIGZvciB0aGlzCi0gKgl0dHkgZGV2aWNlIGl0IGNhbiBiZSBzZXQgdG8gTlVMTCBzYWZlbHkuCisgKgl0dHlfcmVnaXN0ZXJfZGV2aWNlIC0gcmVnaXN0ZXIgYSB0dHkgZGV2aWNlCisgKglAZHJpdmVyOiB0aGUgdHR5IGRyaXZlciB0aGF0IGRlc2NyaWJlcyB0aGUgdHR5IGRldmljZQorICoJQGluZGV4OiB0aGUgaW5kZXggaW4gdGhlIHR0eSBkcml2ZXIgZm9yIHRoaXMgdHR5IGRldmljZQorICoJQGRldmljZTogYSBzdHJ1Y3QgZGV2aWNlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgdHR5IGRldmljZS4KKyAqCQlUaGlzIGZpZWxkIGlzIG9wdGlvbmFsLCBpZiB0aGVyZSBpcyBubyBrbm93biBzdHJ1Y3QgZGV2aWNlCisgKgkJZm9yIHRoaXMgdHR5IGRldmljZSBpdCBjYW4gYmUgc2V0IHRvIE5VTEwgc2FmZWx5LgogICoKLSAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjbGFzcyBkZXZpY2UgKG9yIEVSUl9QVFIoLUVGT08pIG9uIGVycm9yKS4KKyAqCVJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjbGFzcyBkZXZpY2UgKG9yIEVSUl9QVFIoLUVGT08pIG9uIGVycm9yKS4KICAqCi0gKiBUaGlzIGNhbGwgaXMgcmVxdWlyZWQgdG8gYmUgbWFkZSB0byByZWdpc3RlciBhbiBpbmRpdmlkdWFsIHR0eSBkZXZpY2UgaWYKLSAqIHRoZSB0dHkgZHJpdmVyJ3MgZmxhZ3MgaGF2ZSB0aGUgVFRZX0RSSVZFUl9EWU5BTUlDX0RFViBiaXQgc2V0LiAgSWYgdGhhdAotICogYml0IGlzIG5vdCBzZXQsIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgYnkgYSB0dHkgZHJpdmVyLgorICoJVGhpcyBjYWxsIGlzIHJlcXVpcmVkIHRvIGJlIG1hZGUgdG8gcmVnaXN0ZXIgYW4gaW5kaXZpZHVhbCB0dHkgZGV2aWNlCisgKglpZiB0aGUgdHR5IGRyaXZlcidzIGZsYWdzIGhhdmUgdGhlIFRUWV9EUklWRVJfRFlOQU1JQ19ERVYgYml0IHNldC4gIElmCisgKgl0aGF0IGJpdCBpcyBub3Qgc2V0LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUgY2FsbGVkIGJ5IGEgdHR5CisgKglkcml2ZXIuCisgKgorICoJTG9ja2luZzogPz8KICAqLworCiBzdHJ1Y3QgY2xhc3NfZGV2aWNlICp0dHlfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCB0dHlfZHJpdmVyICpkcml2ZXIsCiAJCQkJCSB1bnNpZ25lZCBpbmRleCwgc3RydWN0IGRldmljZSAqZGV2aWNlKQogewpAQCAtMjk3NywxMyArMzY0MSwxNiBAQAogfQogCiAvKioKLSAqIHR0eV91bnJlZ2lzdGVyX2RldmljZSAtIHVucmVnaXN0ZXIgYSB0dHkgZGV2aWNlCi0gKiBAZHJpdmVyOiB0aGUgdHR5IGRyaXZlciB0aGF0IGRlc2NyaWJlcyB0aGUgdHR5IGRldmljZQotICogQGluZGV4OiB0aGUgaW5kZXggaW4gdGhlIHR0eSBkcml2ZXIgZm9yIHRoaXMgdHR5IGRldmljZQorICogCXR0eV91bnJlZ2lzdGVyX2RldmljZSAtIHVucmVnaXN0ZXIgYSB0dHkgZGV2aWNlCisgKiAJQGRyaXZlcjogdGhlIHR0eSBkcml2ZXIgdGhhdCBkZXNjcmliZXMgdGhlIHR0eSBkZXZpY2UKKyAqIAlAaW5kZXg6IHRoZSBpbmRleCBpbiB0aGUgdHR5IGRyaXZlciBmb3IgdGhpcyB0dHkgZGV2aWNlCiAgKgotICogSWYgYSB0dHkgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgd2l0aCBhIGNhbGwgdG8gdHR5X3JlZ2lzdGVyX2RldmljZSgpIHRoZW4KLSAqIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBtYWRlIHdoZW4gdGhlIHR0eSBkZXZpY2UgaXMgZ29uZS4KKyAqIAlJZiBhIHR0eSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCB3aXRoIGEgY2FsbCB0byB0dHlfcmVnaXN0ZXJfZGV2aWNlKCkgdGhlbgorICoJdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSB0dHkgZGV2aWNlIGlzIGdvbmUuCisgKgorICoJTG9ja2luZzogPz8KICAqLworCiB2b2lkIHR0eV91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdHR5X2RyaXZlciAqZHJpdmVyLCB1bnNpZ25lZCBpbmRleCkKIHsKIAljbGFzc19kZXZpY2VfZGVzdHJveSh0dHlfY2xhc3MsIE1LREVWKGRyaXZlci0+bWFqb3IsIGRyaXZlci0+bWlub3Jfc3RhcnQpICsgaW5kZXgpOwpAQCAtMzA5NCw3ICszNzYxLDYgQEAKIAlkcml2ZXItPmNkZXYub3duZXIgPSBkcml2ZXItPm93bmVyOwogCWVycm9yID0gY2Rldl9hZGQoJmRyaXZlci0+Y2RldiwgZGV2LCBkcml2ZXItPm51bSk7CiAJaWYgKGVycm9yKSB7Ci0JCWNkZXZfZGVsKCZkcml2ZXItPmNkZXYpOwogCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBkcml2ZXItPm51bSk7CiAJCWRyaXZlci0+dHR5cyA9IE5VTEw7CiAJCWRyaXZlci0+dGVybWlvcyA9IGRyaXZlci0+dGVybWlvc19sb2NrZWQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCmluZGV4IGYxOWNmOWQ3Li40YWQ0N2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCkBAIC0zNiw2ICszNiwxOCBAQAogI2RlZmluZSBURVJNSU9TX1dBSVQJMgogI2RlZmluZSBURVJNSU9TX1RFUk1JTwk0CiAKKworLyoqCisgKgl0dHlfd2FpdF91bnRpbF9zZW50CS0Jd2FpdCBmb3IgSS9PIHRvIGZpbmlzaAorICoJQHR0eTogdHR5IHdlIGFyZSB3YWl0aW5nIGZvcgorICoJQHRpbWVvdXQ6IGhvdyBsb25nIHdlIHdpbGwgd2FpdAorICoKKyAqCVdhaXQgZm9yIGNoYXJhY3RlcnMgcGVuZGluZyBpbiBhIHR0eSBkcml2ZXIgdG8gaGl0IHRoZSB3aXJlLCBvcgorICoJZm9yIGEgdGltZW91dCB0byBvY2N1ciAoZWcgZHVlIHRvIGZsb3cgY29udHJvbCkKKyAqCisgKglMb2NraW5nOiBub25lCisgKi8KKwogdm9pZCB0dHlfd2FpdF91bnRpbF9zZW50KHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBsb25nIHRpbWVvdXQpCiB7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CkBAIC05NCw2ICsxMDYsMTggQEAKIAkJCW9sZC0+Y19jY1tpXSA6IHRlcm1pb3MtPmNfY2NbaV07CiB9CiAKKy8qKgorICoJY2hhbmdlX3Rlcm1pb3MJCS0JdXBkYXRlIHRlcm1pb3MgdmFsdWVzCisgKglAdHR5OiB0dHkgdG8gdXBkYXRlCisgKglAbmV3X3Rlcm1pb3M6IGRlc2lyZWQgbmV3IHZhbHVlCisgKgorICoJUGVyZm9ybSB1cGRhdGVzIHRvIHRoZSB0ZXJtaW9zIHZhbHVlcyBzZXQgb24gdGhpcyB0ZXJtaW5hbC4gVGhlcmUKKyAqCWlzIGEgYml0IG9mIGxheWVyaW5nIHZpb2xhdGlvbiBoZXJlIHdpdGggbl90dHkgaW4gdGVybXMgb2YgdGhlCisgKglpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhpcyBmdW5jdGlvbi4KKyAqCisgKglMb2NraW5nOiB0ZXJtaW9zX3NlbQorICovCisKIHN0YXRpYyB2b2lkIGNoYW5nZV90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgdGVybWlvcyAqIG5ld190ZXJtaW9zKQogewogCWludCBjYW5vbl9jaGFuZ2U7CkBAIC0xNTUsNiArMTc5LDE5IEBACiAJdXAoJnR0eS0+dGVybWlvc19zZW0pOwogfQogCisvKioKKyAqCXNldF90ZXJtaW9zCQktCXNldCB0ZXJtaW9zIHZhbHVlcyBmb3IgYSB0dHkKKyAqCUB0dHk6IHRlcm1pbmFsIGRldmljZQorICoJQGFyZzogdXNlciBkYXRhCisgKglAb3B0OiBvcHRpb24gaW5mb3JtYXRpb24KKyAqCisgKglIZWxwZXIgZnVuY3Rpb24gdG8gcHJlcGFyZSB0ZXJtaW9zIGRhdGEgYW5kIHJ1biBuZWNjZXNzYXJ5IG90aGVyCisgKglmdW5jdGlvbnMgYmVmb3JlIHVzaW5nIGNoYW5nZV90ZXJtaW9zIHRvIGRvIHRoZSBhY3R1YWwgY2hhbmdlcy4KKyAqCisgKglMb2NraW5nOgorICoJCUNhbGxlZCBmdW5jdGlvbnMgdGFrZSBsZGlzYyBhbmQgdGVybWlvc19zZW0gbG9ja3MKKyAqLworCiBzdGF0aWMgaW50IHNldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCB2b2lkIF9fdXNlciAqYXJnLCBpbnQgb3B0KQogewogCXN0cnVjdCB0ZXJtaW9zIHRtcF90ZXJtaW9zOwpAQCAtMjg0LDYgKzMyMSwxNyBAQAogCX0KIH0KIAorLyoqCisgKglzZXRfc2d0dHliCQktCXNldCBsZWdhY3kgdGVybWluYWwgdmFsdWVzCisgKglAdHR5OiB0dHkgc3RydWN0dXJlCisgKglAc2d0dHliOiBwb2ludGVyIHRvIG9sZCBzdHlsZSB0ZXJtaW5hbCBzdHJ1Y3R1cmUKKyAqCisgKglVcGRhdGVzIGEgdGVybWluYWwgZnJvbSB0aGUgbGVnYWN5IEJTRCBzdHlsZSB0ZXJtaW5hbCBpbmZvcm1hdGlvbgorICoJc3RydWN0dXJlLgorICoKKyAqCUxvY2tpbmc6IHRlcm1pb3Nfc2VtCisgKi8KKwogc3RhdGljIGludCBzZXRfc2d0dHliKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3Qgc2d0dHliIF9fdXNlciAqIHNndHR5YikKIHsKIAlpbnQgcmV0dmFsOwpAQCAtMzY5LDkgKzQxNywxNiBAQAogfQogI2VuZGlmCiAKLS8qCi0gKiBTZW5kIGEgaGlnaCBwcmlvcml0eSBjaGFyYWN0ZXIgdG8gdGhlIHR0eS4KKy8qKgorICoJc2VuZF9wcmlvX2NoYXIJCS0Jc2VuZCBwcmlvcml0eSBjaGFyYWN0ZXIKKyAqCisgKglTZW5kIGEgaGlnaCBwcmlvcml0eSBjaGFyYWN0ZXIgdG8gdGhlIHR0eSBldmVuIGlmIHN0b3BwZWQKKyAqCisgKglMb2NraW5nOiBub25lCisgKgorICoJRklYTUU6IG92ZXJsYXBwaW5nIGNhbGxzIHdpdGggc3RhcnQvc3RvcCB0dHkgbG9zZSBzdGF0ZSBvZiB0dHkKICAqLworCiBzdGF0aWMgdm9pZCBzZW5kX3ByaW9fY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKQogewogCWludAl3YXNfc3RvcHBlZCA9IHR0eS0+c3RvcHBlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aW9jb25zLmMgYi9kcml2ZXJzL2NoYXIvdmlvY29ucy5jCmluZGV4IDc2NmY3ODYuLmYzZWZlYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aW9jb25zLmMKKysrIGIvZHJpdmVycy9jaGFyL3Zpb2NvbnMuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CiAKICNpbmNsdWRlIDxhc20vaXNlcmllcy92aW8uaD4KLQogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfY2FsbF9ldmVudC5oPgogI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2h2X2xwX2NvbmZpZy5oPgpAQCAtNjcsMzUgKzY2LDYgQEAKIGV4dGVybiBpbnQgc3lzcnFfZW5hYmxlZDsKICNlbmRpZgogCi0vKgotICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgZXZlbnRzIHRoYXQgZmxvdyBiZXR3ZWVuIHVzIGFuZCBPUy80MDAuICBZb3UgY2FuJ3QKLSAqIG1lc3Mgd2l0aCB0aGlzIHVubGVzcyB0aGUgT1MvNDAwIHNpZGUgY2hhbmdlcyB0b28KLSAqLwotc3RydWN0IHZpb2NoYXJscGV2ZW50IHsKLQlzdHJ1Y3QgSHZMcEV2ZW50IGV2ZW50OwotCXUzMiByZXNlcnZlZDsKLQl1MTYgdmVyc2lvbjsKLQl1MTYgc3VidHlwZV9yZXN1bHRfY29kZTsKLQl1OCB2aXJ0dWFsX2RldmljZTsKLQl1OCBsZW47Ci0JdTggZGF0YVtWSU9DSEFSX01BWF9EQVRBXTsKLX07Ci0KLSNkZWZpbmUgVklPQ0hBUl9XSU5ET1cJCTEwCi0jZGVmaW5lIFZJT0NIQVJfSElHSFdBVEVSTUFSSwkzCi0KLWVudW0gdmlvY2hhcnN1YnR5cGUgewotCXZpb2NoYXJvcGVuID0gMHgwMDAxLAotCXZpb2NoYXJjbG9zZSA9IDB4MDAwMiwKLQl2aW9jaGFyZGF0YSA9IDB4MDAwMywKLQl2aW9jaGFyYWNrID0gMHgwMDA0LAotCXZpb2NoYXJjb25maWcgPSAweDAwMDUKLX07Ci0KLWVudW0gdmlvY2hhcl9yYyB7Ci0JdmlvY2hhcl9yY19lYnVzeSA9IDEKLX07Ci0KICNkZWZpbmUgVklPQ0hBUl9OVU1fQlVGCQkxNgogCiAvKgpAQCAtMTE4Myw2ICsxMTUzLDcgQEAKIAkJcG9ydF9pbmZvW2ldLm1hZ2ljID0gVklPVFRZX01BR0lDOwogCX0KIAlIdkNhbGxfc2V0TG9nQnVmZmVyRm9ybWF0QW5kQ29kZXBhZ2UoSHZDYWxsX0xvZ0J1ZmZlcl9BU0NJSSwgNDM3KTsKKwlhZGRfcHJlZmVycmVkX2NvbnNvbGUoInZpb2NvbnMiLCAwLCBOVUxMKTsKIAlyZWdpc3Rlcl9jb25zb2xlKCZ2aW9jb25zX2Vhcmx5KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aW90YXBlLmMgYi9kcml2ZXJzL2NoYXIvdmlvdGFwZS5jCmluZGV4IGI3MmIyMDQuLjczYzc4YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92aW90YXBlLmMKKysrIGIvZHJpdmVycy9jaGFyL3Zpb3RhcGUuYwpAQCAtOTQwLDcgKzk0MCw2IEBACiAKIHN0YXRpYyBpbnQgdmlvdGFwZV9wcm9iZShzdHJ1Y3QgdmlvX2RldiAqdmRldiwgY29uc3Qgc3RydWN0IHZpb19kZXZpY2VfaWQgKmlkKQogewotCWNoYXIgdGFwZW5hbWVbMzJdOwogCWludCBpID0gdmRldi0+dW5pdF9hZGRyZXNzOwogCWludCBqOwogCkBAIC05NTYsMTAgKzk1NSw5IEBACiAJCQkiaXNlcmllcyF2dCVkIiwgaSk7CiAJY2xhc3NfZGV2aWNlX2NyZWF0ZSh0YXBlX2NsYXNzLCBOVUxMLCBNS0RFVihWSU9UQVBFX01BSk9SLCBpIHwgMHg4MCksCiAJCQlOVUxMLCAiaXNlcmllcyFudnQlZCIsIGkpOwotCXNwcmludGYodGFwZW5hbWUsICJpc2VyaWVzL3Z0JWQiLCBpKTsKLQlwcmludGsoVklPVEFQRV9LRVJOX0lORk8gInRhcGUgJXMgaXMgaVNlcmllcyAiCisJcHJpbnRrKFZJT1RBUEVfS0VSTl9JTkZPICJ0YXBlIGlzZXJpZXMvdnQlZCBpcyBpU2VyaWVzICIKIAkJCSJyZXNvdXJjZSAlMTAuMTBzIHR5cGUgJTQuNHMsIG1vZGVsICUzLjNzXG4iLAotCQkJdGFwZW5hbWUsIHZpb3RhcGVfdW5pdGluZm9baV0ucnNyY25hbWUsCisJCQlpLCB2aW90YXBlX3VuaXRpbmZvW2ldLnJzcmNuYW1lLAogCQkJdmlvdGFwZV91bml0aW5mb1tpXS50eXBlLCB2aW90YXBlX3VuaXRpbmZvW2ldLm1vZGVsKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKaW5kZXggZWNjZmZhZi4uYTU2MjhhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMKQEAgLTEwMTEsNiArMTAxMSw4IEBACiAJCSAgIHJldHVybiAtRVBFUk07CiAJCXZ0X2RvbnRfc3dpdGNoID0gMDsKIAkJcmV0dXJuIDA7CisJY2FzZSBWVF9HRVRISUZPTlRNQVNLOgorCQlyZXR1cm4gcHV0X3VzZXIodmMtPnZjX2hpX2ZvbnRfbWFzaywgKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKWFyZyk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCmluZGV4IGQ1M2Y2NjQuLmZmZjg5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCkBAIC00NSw3ICs0NSw3IEBACiBjb21tZW50ICJXYXRjaGRvZyBEZXZpY2UgRHJpdmVycyIKIAlkZXBlbmRzIG9uIFdBVENIRE9HCiAKLSMgQXJjaGl0ZWN0dXJlIEluZGVwZW5kYW50CisjIEFyY2hpdGVjdHVyZSBJbmRlcGVuZGVudAogCiBjb25maWcgU09GVF9XQVRDSERPRwogCXRyaXN0YXRlICJTb2Z0d2FyZSB3YXRjaGRvZyIKQEAgLTEyNyw3ICsxMjcsNyBAQAogCSAgZW5hYmxlZC4KIAogCSAgVGhlIGRyaXZlciBpcyBsaW1pdGVkIGJ5IHRoZSBzcGVlZCBvZiB0aGUgc3lzdGVtJ3MgUENMSwotCSAgc2lnbmFsLCBzbyB3aXRoIHJlYXNvbmJhbHkgZmFzdCBzeXN0ZW1zIChQQ0xLIGFyb3VuZCA1MC02Nk1IeikKKwkgIHNpZ25hbCwgc28gd2l0aCByZWFzb25hYmx5IGZhc3Qgc3lzdGVtcyAoUENMSyBhcm91bmQgNTAtNjZNSHopCiAJICB0aGVuIHdhdGNoZG9nIGludGVydmFscyBvZiBvdmVyIGFwcHJveGltYXRlbHkgMjBzZWNvbmRzIGFyZQogCSAgdW5hdmFpbGFibGUuCiAKQEAgLTQyMyw3ICs0MjMsNyBAQAogCSAgaXMgbm8gd2F5IHRvIGtub3cgaWYgd3JpdGluZyB0byBpdHMgSU8gYWRkcmVzcyB3aWxsIGNvcnJ1cHQKIAkgIHlvdXIgc3lzdGVtIG9yIGhhdmUgYW55IHJlYWwgZWZmZWN0LiAgVGhlIG9ubHkgd2F5IHRvIGJlIHN1cmUKIAkgIHRoYXQgdGhpcyBkcml2ZXIgZG9lcyB3aGF0IHlvdSB3YW50IGlzIHRvIG1ha2Ugc3VyZSB5b3UKLQkgIGFyZSBydW5ubmluZyBpdCBvbiBhbiBFUFgtQzMgZnJvbSBXaW5zeXN0ZW1zIHdpdGggdGhlIHdhdGNoZG9nCisJICBhcmUgcnVubmluZyBpdCBvbiBhbiBFUFgtQzMgZnJvbSBXaW5zeXN0ZW1zIHdpdGggdGhlIHdhdGNoZG9nCiAJICB0aW1lciBhdCBJTyBhZGRyZXNzIDB4MWVlIGFuZCAweDFlZi4gIEl0IHdpbGwgd3JpdGUgdG8gYm90aCB0aG9zZQogCSAgSU8gcG9ydHMuICBCYXNpY2FsbHksIHRoZSBhc3N1bXB0aW9uIGlzIG1hZGUgdGhhdCBpZiB5b3UgY29tcGlsZQogCSAgdGhpcyBkcml2ZXIgaW50byB5b3VyIGtlcm5lbCBhbmQvb3IgbG9hZCBpdCBhcyBhIG1vZHVsZSwgdGhhdCB5b3UKQEAgLTQ3Miw3ICs0NzIsNyBAQAogCXRyaXN0YXRlICJJbmR5L0kyIEhhcmR3YXJlIFdhdGNoZG9nIgogCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgU0dJX0lQMjIKIAloZWxwCi0JICBIYXJkd2FyZWRyaXZlciBmb3IgdGhlIEluZHkncy9JMidzIHdhdGNoZG9nLiBUaGlzIGlzIGEKKwkgIEhhcmR3YXJlIGRyaXZlciBmb3IgdGhlIEluZHkncy9JMidzIHdhdGNoZG9nLiBUaGlzIGlzIGEKIAkgIHdhdGNoZG9nIHRpbWVyIHRoYXQgd2lsbCByZWJvb3QgdGhlIG1hY2hpbmUgYWZ0ZXIgYSA2MCBzZWNvbmQKIAkgIHRpbWVyIGV4cGlyZWQgYW5kIG5vIHByb2Nlc3MgaGFzIHdyaXR0ZW4gdG8gL2Rldi93YXRjaGRvZyBkdXJpbmcKIAkgIHRoYXQgdGltZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM4MzYwLmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2JjODM2MC5jCmluZGV4IDEwMzViZTUuLjQxZmM2ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9zYmM4MzYwLmMKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3NiYzgzNjAuYwpAQCAtMjAwLDcgKzIwMCw3IEBACiBzdGF0aWMgaW50IHdkX211bHRpcGxpZXIgPSAyOwogc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOwogCi1tb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAyNyk7Cittb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0ModGltZW91dCwgIkluZGV4IGludG8gdGltZW91dCB0YWJsZSAoMC02MykgKGRlZmF1bHQ9MjcgKDYwcykpIik7CiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LApAQCAtNDA3LDcgKzQwNyw3IEBACiBNT0RVTEVfQVVUSE9SKCJJYW4gRS4gTW9yZ2FuIDxpbW9yZ2FuQHdlYmNvbi5jYT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU0JDODM2MCB3YXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKCIxLjAiKTsKK01PRFVMRV9WRVJTSU9OKCIxLjAxIik7CiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CiAKIC8qIGVuZCBvZiBzYmM4MzYwLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYyBiL2RyaXZlcnMvY29ubmVjdG9yL2NuX3Byb2MuYwppbmRleCA0OThhYTM3Li4zZWNlNjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nvbm5lY3Rvci9jbl9wcm9jLmMKKysrIGIvZHJpdmVycy9jb25uZWN0b3IvY25fcHJvYy5jCkBAIC01MSw2ICs1MSw3IEBACiAJc3RydWN0IGNuX21zZyAqbXNnOwogCXN0cnVjdCBwcm9jX2V2ZW50ICpldjsKIAlfX3U4IGJ1ZmZlcltDTl9QUk9DX01TR19TSVpFXTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnByb2NfZXZlbnRfbnVtX2xpc3RlbmVycykgPCAxKQogCQlyZXR1cm47CkBAIC01OCw3ICs1OSw4IEBACiAJbXNnID0gKHN0cnVjdCBjbl9tc2cqKWJ1ZmZlcjsKIAlldiA9IChzdHJ1Y3QgcHJvY19ldmVudCopbXNnLT5kYXRhOwogCWdldF9zZXEoJm1zZy0+c2VxLCAmZXYtPmNwdSk7Ci0Ja3RpbWVfZ2V0X3RzKCZldi0+dGltZXN0YW1wKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KKwlrdGltZV9nZXRfdHMoJnRzKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KKwlldi0+dGltZXN0YW1wX25zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKIAlldi0+d2hhdCA9IFBST0NfRVZFTlRfRk9SSzsKIAlldi0+ZXZlbnRfZGF0YS5mb3JrLnBhcmVudF9waWQgPSB0YXNrLT5yZWFsX3BhcmVudC0+cGlkOwogCWV2LT5ldmVudF9kYXRhLmZvcmsucGFyZW50X3RnaWQgPSB0YXNrLT5yZWFsX3BhcmVudC0+dGdpZDsKQEAgLTc2LDYgKzc4LDcgQEAKIHsKIAlzdHJ1Y3QgY25fbXNnICptc2c7CiAJc3RydWN0IHByb2NfZXZlbnQgKmV2OworCXN0cnVjdCB0aW1lc3BlYyB0czsKIAlfX3U4IGJ1ZmZlcltDTl9QUk9DX01TR19TSVpFXTsKIAogCWlmIChhdG9taWNfcmVhZCgmcHJvY19ldmVudF9udW1fbGlzdGVuZXJzKSA8IDEpCkBAIC04NCw3ICs4Nyw4IEBACiAJbXNnID0gKHN0cnVjdCBjbl9tc2cqKWJ1ZmZlcjsKIAlldiA9IChzdHJ1Y3QgcHJvY19ldmVudCopbXNnLT5kYXRhOwogCWdldF9zZXEoJm1zZy0+c2VxLCAmZXYtPmNwdSk7Ci0Ja3RpbWVfZ2V0X3RzKCZldi0+dGltZXN0YW1wKTsKKwlrdGltZV9nZXRfdHMoJnRzKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KKwlldi0+dGltZXN0YW1wX25zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKIAlldi0+d2hhdCA9IFBST0NfRVZFTlRfRVhFQzsKIAlldi0+ZXZlbnRfZGF0YS5leGVjLnByb2Nlc3NfcGlkID0gdGFzay0+cGlkOwogCWV2LT5ldmVudF9kYXRhLmV4ZWMucHJvY2Vzc190Z2lkID0gdGFzay0+dGdpZDsKQEAgLTEwMCw2ICsxMDQsNyBAQAogCXN0cnVjdCBjbl9tc2cgKm1zZzsKIAlzdHJ1Y3QgcHJvY19ldmVudCAqZXY7CiAJX191OCBidWZmZXJbQ05fUFJPQ19NU0dfU0laRV07CisJc3RydWN0IHRpbWVzcGVjIHRzOwogCiAJaWYgKGF0b21pY19yZWFkKCZwcm9jX2V2ZW50X251bV9saXN0ZW5lcnMpIDwgMSkKIAkJcmV0dXJuOwpAQCAtMTE4LDcgKzEyMyw4IEBACiAJfSBlbHNlCiAJICAgICAJcmV0dXJuOwogCWdldF9zZXEoJm1zZy0+c2VxLCAmZXYtPmNwdSk7Ci0Ja3RpbWVfZ2V0X3RzKCZldi0+dGltZXN0YW1wKTsKKwlrdGltZV9nZXRfdHMoJnRzKTsgLyogZ2V0IGhpZ2ggcmVzIG1vbm90b25pYyB0aW1lc3RhbXAgKi8KKwlldi0+dGltZXN0YW1wX25zID0gdGltZXNwZWNfdG9fbnMoJnRzKTsKIAogCW1lbWNweSgmbXNnLT5pZCwgJmNuX3Byb2NfZXZlbnRfaWQsIHNpemVvZihtc2ctPmlkKSk7CiAJbXNnLT5hY2sgPSAwOyAvKiBub3QgdXNlZCAqLwpAQCAtMTMxLDYgKzEzNyw3IEBACiAJc3RydWN0IGNuX21zZyAqbXNnOwogCXN0cnVjdCBwcm9jX2V2ZW50ICpldjsKIAlfX3U4IGJ1ZmZlcltDTl9QUk9DX01TR19TSVpFXTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnByb2NfZXZlbnRfbnVtX2xpc3RlbmVycykgPCAxKQogCQlyZXR1cm47CkBAIC0xMzgsNyArMTQ1LDggQEAKIAltc2cgPSAoc3RydWN0IGNuX21zZyopYnVmZmVyOwogCWV2ID0gKHN0cnVjdCBwcm9jX2V2ZW50Kiltc2ctPmRhdGE7CiAJZ2V0X3NlcSgmbXNnLT5zZXEsICZldi0+Y3B1KTsKLQlrdGltZV9nZXRfdHMoJmV2LT50aW1lc3RhbXApOworCWt0aW1lX2dldF90cygmdHMpOyAvKiBnZXQgaGlnaCByZXMgbW9ub3RvbmljIHRpbWVzdGFtcCAqLworCWV2LT50aW1lc3RhbXBfbnMgPSB0aW1lc3BlY190b19ucygmdHMpOwogCWV2LT53aGF0ID0gUFJPQ19FVkVOVF9FWElUOwogCWV2LT5ldmVudF9kYXRhLmV4aXQucHJvY2Vzc19waWQgPSB0YXNrLT5waWQ7CiAJZXYtPmV2ZW50X2RhdGEuZXhpdC5wcm9jZXNzX3RnaWQgPSB0YXNrLT50Z2lkOwpAQCAtMTY0LDYgKzE3Miw3IEBACiAJc3RydWN0IGNuX21zZyAqbXNnOwogCXN0cnVjdCBwcm9jX2V2ZW50ICpldjsKIAlfX3U4IGJ1ZmZlcltDTl9QUk9DX01TR19TSVpFXTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CiAKIAlpZiAoYXRvbWljX3JlYWQoJnByb2NfZXZlbnRfbnVtX2xpc3RlbmVycykgPCAxKQogCQlyZXR1cm47CkBAIC0xNzEsNyArMTgwLDggQEAKIAltc2cgPSAoc3RydWN0IGNuX21zZyopYnVmZmVyOwogCWV2ID0gKHN0cnVjdCBwcm9jX2V2ZW50Kiltc2ctPmRhdGE7CiAJbXNnLT5zZXEgPSByY3ZkX3NlcTsKLQlrdGltZV9nZXRfdHMoJmV2LT50aW1lc3RhbXApOworCWt0aW1lX2dldF90cygmdHMpOyAvKiBnZXQgaGlnaCByZXMgbW9ub3RvbmljIHRpbWVzdGFtcCAqLworCWV2LT50aW1lc3RhbXBfbnMgPSB0aW1lc3BlY190b19ucygmdHMpOwogCWV2LT5jcHUgPSAtMTsKIAlldi0+d2hhdCA9IFBST0NfRVZFTlRfTk9ORTsKIAlldi0+ZXZlbnRfZGF0YS5hY2suZXJyID0gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggYmMxMDg4ZC4uYjNkZjYxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC0yODQsMzkgKzI4NCw2OSBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgIFNZU0ZTIElOVEVSRkFDRSAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorc3RhdGljIHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpfX2ZpbmRfZ292ZXJub3IoY29uc3QgY2hhciAqc3RyX2dvdmVybm9yKQoreworCXN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICp0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KQorCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vcix0LT5uYW1lLENQVUZSRVFfTkFNRV9MRU4pKQorCQkJcmV0dXJuIHQ7CisKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoqCiAgKiBjcHVmcmVxX3BhcnNlX2dvdmVybm9yIC0gcGFyc2UgYSBnb3Zlcm5vciBzdHJpbmcKICAqLwogc3RhdGljIGludCBjcHVmcmVxX3BhcnNlX2dvdmVybm9yIChjaGFyICpzdHJfZ292ZXJub3IsIHVuc2lnbmVkIGludCAqcG9saWN5LAogCQkJCXN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICoqZ292ZXJub3IpCiB7CisJaW50IGVyciA9IC1FSU5WQUw7CisKIAlpZiAoIWNwdWZyZXFfZHJpdmVyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisKIAlpZiAoY3B1ZnJlcV9kcml2ZXItPnNldHBvbGljeSkgewogCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vciwgInBlcmZvcm1hbmNlIiwgQ1BVRlJFUV9OQU1FX0xFTikpIHsKIAkJCSpwb2xpY3kgPSBDUFVGUkVRX1BPTElDWV9QRVJGT1JNQU5DRTsKLQkJCXJldHVybiAwOworCQkJZXJyID0gMDsKIAkJfSBlbHNlIGlmICghc3RybmljbXAoc3RyX2dvdmVybm9yLCAicG93ZXJzYXZlIiwgQ1BVRlJFUV9OQU1FX0xFTikpIHsKIAkJCSpwb2xpY3kgPSBDUFVGUkVRX1BPTElDWV9QT1dFUlNBVkU7Ci0JCQlyZXR1cm4gMDsKKwkJCWVyciA9IDA7CiAJCX0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGNwdWZyZXFfZHJpdmVyLT50YXJnZXQpIHsKIAkJc3RydWN0IGNwdWZyZXFfZ292ZXJub3IgKnQ7CisKIAkJbXV0ZXhfbG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7Ci0JCWlmICghY3B1ZnJlcV9kcml2ZXIgfHwgIWNwdWZyZXFfZHJpdmVyLT50YXJnZXQpCi0JCQlnb3RvIG91dDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0LCBnb3Zlcm5vcl9saXN0KSB7Ci0JCQlpZiAoIXN0cm5pY21wKHN0cl9nb3Zlcm5vcix0LT5uYW1lLENQVUZSRVFfTkFNRV9MRU4pKSB7Ci0JCQkJKmdvdmVybm9yID0gdDsKKworCQl0ID0gX19maW5kX2dvdmVybm9yKHN0cl9nb3Zlcm5vcik7CisKKwkJaWYgKHQgPT0gTlVMTCkgeworCQkJY2hhciAqbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiY3B1ZnJlcV8lcyIsIHN0cl9nb3Zlcm5vcik7CisKKwkJCWlmIChuYW1lKSB7CisJCQkJaW50IHJldDsKKwogCQkJCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7Ci0JCQkJcmV0dXJuIDA7CisJCQkJcmV0ID0gcmVxdWVzdF9tb2R1bGUobmFtZSk7CisJCQkJbXV0ZXhfbG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CisKKwkJCQlpZiAocmV0ID09IDApCisJCQkJCXQgPSBfX2ZpbmRfZ292ZXJub3Ioc3RyX2dvdmVybm9yKTsKIAkJCX0KKworCQkJa2ZyZWUobmFtZSk7CiAJCX0KLW91dDoKKworCQlpZiAodCAhPSBOVUxMKSB7CisJCQkqZ292ZXJub3IgPSB0OworCQkJZXJyID0gMDsKKwkJfQorCiAJCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7CiAJfQotCXJldHVybiAtRUlOVkFMOworICBvdXQ6CisJcmV0dXJuIGVycjsKIH0KIAogCkBAIC0xMjY1LDIzICsxMjk1LDIxIEBACiAKIGludCBjcHVmcmVxX3JlZ2lzdGVyX2dvdmVybm9yKHN0cnVjdCBjcHVmcmVxX2dvdmVybm9yICpnb3Zlcm5vcikKIHsKLQlzdHJ1Y3QgY3B1ZnJlcV9nb3Zlcm5vciAqdDsKKwlpbnQgZXJyOwogCiAJaWYgKCFnb3Zlcm5vcikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZjcHVmcmVxX2dvdmVybm9yX211dGV4KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJmNwdWZyZXFfZ292ZXJub3JfbGlzdCwgZ292ZXJub3JfbGlzdCkgewotCQlpZiAoIXN0cm5pY21wKGdvdmVybm9yLT5uYW1lLHQtPm5hbWUsQ1BVRlJFUV9OQU1FX0xFTikpIHsKLQkJCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9CisJZXJyID0gLUVCVVNZOworCWlmIChfX2ZpbmRfZ292ZXJub3IoZ292ZXJub3ItPm5hbWUpID09IE5VTEwpIHsKKwkJZXJyID0gMDsKKwkJbGlzdF9hZGQoJmdvdmVybm9yLT5nb3Zlcm5vcl9saXN0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0KTsKIAl9Ci0JbGlzdF9hZGQoJmdvdmVybm9yLT5nb3Zlcm5vcl9saXN0LCAmY3B1ZnJlcV9nb3Zlcm5vcl9saXN0KTsKIAogCW11dGV4X3VubG9jaygmY3B1ZnJlcV9nb3Zlcm5vcl9tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGNwdWZyZXFfcmVnaXN0ZXJfZ292ZXJub3IpOwogCkBAIC0xMzQzLDYgKzEzNzEsMTEgQEAKIAogCW1lbWNweSgmcG9saWN5LT5jcHVpbmZvLCAmZGF0YS0+Y3B1aW5mbywgc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2NwdWluZm8pKTsKIAorCWlmIChwb2xpY3ktPm1pbiA+IGRhdGEtPm1pbiAmJiBwb2xpY3ktPm1pbiA+IHBvbGljeS0+bWF4KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKwogCS8qIHZlcmlmeSB0aGUgY3B1IHNwZWVkIGNhbiBiZSBzZXQgd2l0aGluIHRoaXMgbGltaXQgKi8KIAlyZXQgPSBjcHVmcmVxX2RyaXZlci0+dmVyaWZ5KHBvbGljeSk7CiAJaWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcgYi9kcml2ZXJzL2NyeXB0by9LY29uZmlnCmluZGV4IDQyNjM5MzUuLmFkYjU1NDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL0tjb25maWcKKysrIGIvZHJpdmVycy9jcnlwdG8vS2NvbmZpZwpAQCAtMiwyMiArMiw1MyBAQAogCiBjb25maWcgQ1JZUFRPX0RFVl9QQURMT0NLCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFZJQSBQYWRMb2NrIEFDRSIKLQlkZXBlbmRzIG9uIENSWVBUTyAmJiBYODZfMzIKKwlkZXBlbmRzIG9uIFg4Nl8zMgorCXNlbGVjdCBDUllQVE9fQUxHQVBJCisJZGVmYXVsdCBtCiAJaGVscAogCSAgU29tZSBWSUEgcHJvY2Vzc29ycyBjb21lIHdpdGggYW4gaW50ZWdyYXRlZCBjcnlwdG8gZW5naW5lCiAJICAoc28gY2FsbGVkIFZJQSBQYWRMb2NrIEFDRSwgQWR2YW5jZWQgQ3J5cHRvZ3JhcGh5IEVuZ2luZSkKLQkgIHRoYXQgcHJvdmlkZXMgaW5zdHJ1Y3Rpb25zIGZvciB2ZXJ5IGZhc3Qge2VuLGRlfWNyeXB0aW9uIAotCSAgd2l0aCBzb21lIGFsZ29yaXRobXMuCisJICB0aGF0IHByb3ZpZGVzIGluc3RydWN0aW9ucyBmb3IgdmVyeSBmYXN0IGNyeXB0b2dyYXBoaWMKKwkgIG9wZXJhdGlvbnMgd2l0aCBzdXBwb3J0ZWQgYWxnb3JpdGhtcy4KIAkgIAogCSAgVGhlIGluc3RydWN0aW9ucyBhcmUgdXNlZCBvbmx5IHdoZW4gdGhlIENQVSBzdXBwb3J0cyB0aGVtLgotCSAgT3RoZXJ3aXNlIHNvZnR3YXJlIGVuY3J5cHRpb24gaXMgdXNlZC4gSWYgeW91IGFyZSB1bnN1cmUsCi0JICBzYXkgWS4KKwkgIE90aGVyd2lzZSBzb2Z0d2FyZSBlbmNyeXB0aW9uIGlzIHVzZWQuCisKKwkgIFNlbGVjdGluZyBNIGZvciB0aGlzIG9wdGlvbiB3aWxsIGNvbXBpbGUgYSBoZWxwZXIgbW9kdWxlCisJICBwYWRsb2NrLmtvIHRoYXQgc2hvdWxkIGF1dG9sb2FkIGFsbCBiZWxvdyBjb25maWd1cmVkCisJICBhbGdvcml0aG1zLiBEb24ndCB3b3JyeSBpZiB5b3VyIGhhcmR3YXJlIGRvZXMgbm90IHN1cHBvcnQKKwkgIHNvbWUgb3IgYWxsIG9mIHRoZW0uIEluIHN1Y2ggY2FzZSBwYWRsb2NrLmtvIHdpbGwKKwkgIHNpbXBseSB3cml0ZSBhIHNpbmdsZSBsaW5lIGludG8gdGhlIGtlcm5lbCBsb2cgaW5mb3JtaW5nCisJICBhYm91dCBpdHMgZmFpbHVyZSBidXQgZXZlcnl0aGluZyB3aWxsIGtlZXAgd29ya2luZyBmaW5lLgorCisJICBJZiB5b3UgYXJlIHVuc3VyZSwgc2F5IE0uIFRoZSBjb21waWxlZCBtb2R1bGUgd2lsbCBiZQorCSAgY2FsbGVkIHBhZGxvY2sua28KIAogY29uZmlnIENSWVBUT19ERVZfUEFETE9DS19BRVMKLQlib29sICJTdXBwb3J0IGZvciBBRVMgaW4gVklBIFBhZExvY2siCisJdHJpc3RhdGUgIlBhZExvY2sgZHJpdmVyIGZvciBBRVMgYWxnb3JpdGhtIgogCWRlcGVuZHMgb24gQ1JZUFRPX0RFVl9QQURMT0NLCi0JZGVmYXVsdCB5CisJc2VsZWN0IENSWVBUT19CTEtDSVBIRVIKKwlkZWZhdWx0IG0KIAloZWxwCiAJICBVc2UgVklBIFBhZExvY2sgZm9yIEFFUyBhbGdvcml0aG0uCiAKKwkgIEF2YWlsYWJsZSBpbiBWSUEgQzMgYW5kIG5ld2VyIENQVXMuCisKKwkgIElmIHVuc3VyZSBzYXkgTS4gVGhlIGNvbXBpbGVkIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgcGFkbG9jay1hZXMua28KKworY29uZmlnIENSWVBUT19ERVZfUEFETE9DS19TSEEKKwl0cmlzdGF0ZSAiUGFkTG9jayBkcml2ZXIgZm9yIFNIQTEgYW5kIFNIQTI1NiBhbGdvcml0aG1zIgorCWRlcGVuZHMgb24gQ1JZUFRPX0RFVl9QQURMT0NLCisJc2VsZWN0IENSWVBUT19TSEExCisJc2VsZWN0IENSWVBUT19TSEEyNTYKKwlkZWZhdWx0IG0KKwloZWxwCisJICBVc2UgVklBIFBhZExvY2sgZm9yIFNIQTEvU0hBMjU2IGFsZ29yaXRobXMuCisKKwkgIEF2YWlsYWJsZSBpbiBWSUEgQzcgYW5kIG5ld2VyIHByb2Nlc3NvcnMuCisKKwkgIElmIHVuc3VyZSBzYXkgTS4gVGhlIGNvbXBpbGVkIG1vZHVsZSB3aWxsIGJlCisJICBjYWxsZWQgcGFkbG9jay1zaGEua28KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vTWFrZWZpbGUgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQppbmRleCA0NTQyNmNhLi40YzNkMGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NyeXB0by9NYWtlZmlsZQpAQCAtMSw3ICsxLDMgQEAKLQogb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUEFETE9DSykgKz0gcGFkbG9jay5vCi0KLXBhZGxvY2stb2Jqcy0kKENPTkZJR19DUllQVE9fREVWX1BBRExPQ0tfQUVTKSArPSBwYWRsb2NrLWFlcy5vCi0KLXBhZGxvY2stb2JqcyA6PSBwYWRsb2NrLWdlbmVyaWMubyAkKHBhZGxvY2stb2Jqcy15KQotCitvYmotJChDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FFUykgKz0gcGFkbG9jay1hZXMubworb2JqLSQoQ09ORklHX0NSWVBUT19ERVZfUEFETE9DS19TSEEpICs9IHBhZGxvY2stc2hhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMgYi9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLWFlcy5jCmluZGV4IGI2NDNkNzEuLmQ0NTAxZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stYWVzLmMKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1hZXMuYwpAQCAtNDMsMTEgKzQzLDExIEBACiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCisjaW5jbHVkZSA8Y3J5cHRvL2FsZ2FwaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtNTksNiArNTksMTcgQEAKICNkZWZpbmUgQUVTX0VYVEVOREVEX0tFWV9TSVpFCTY0CS8qIGluIHVpbnQzMl90IHVuaXRzICovCiAjZGVmaW5lIEFFU19FWFRFTkRFRF9LRVlfU0laRV9CCShBRVNfRVhURU5ERURfS0VZX1NJWkUgKiBzaXplb2YodWludDMyX3QpKQogCisvKiBDb250cm9sIHdvcmQuICovCitzdHJ1Y3QgY3dvcmQgeworCXVuc2lnbmVkIGludCBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpCisJCXJvdW5kczo0LAorCQlhbGdvOjMsCisJCWtleWdlbjoxLAorCQlpbnRlcm06MSwKKwkJZW5jZGVjOjEsCisJCWtzaXplOjI7Cit9IF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXyhQQURMT0NLX0FMSUdOTUVOVCkpKTsKKwogLyogV2hlbmV2ZXIgbWFraW5nIGFueSBjaGFuZ2VzIHRvIHRoZSBmb2xsb3dpbmcKICAqIHN0cnVjdHVyZSAqbWFrZSBzdXJlKiB5b3Uga2VlcCBFLCBkX2RhdGEKICAqIGFuZCBjd29yZCBhbGlnbmVkIG9uIDE2IEJ5dGVzIGJvdW5kYXJpZXMhISEgKi8KQEAgLTI4Niw5ICsyOTcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhZXNfY3R4ICphZXNfY3R4KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZXNfY3R4ICphZXNfY3R4X2NvbW1vbih2b2lkICpjdHgpCiB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyljdHg7CiAJdW5zaWduZWQgbG9uZyBhbGlnbiA9IFBBRExPQ0tfQUxJR05NRU5UOwogCiAJaWYgKGFsaWduIDw9IGNyeXB0b190Zm1fY3R4X2FsaWdubWVudCgpKQpAQCAtMjk2LDE2ICszMDcsMjcgQEAKIAlyZXR1cm4gKHN0cnVjdCBhZXNfY3R4ICopQUxJR04oYWRkciwgYWxpZ24pOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZXNfY3R4ICphZXNfY3R4KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIGFlc19jdHhfY29tbW9uKGNyeXB0b190Zm1fY3R4KHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZXNfY3R4ICpibGtfYWVzX2N0eChzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtKQoreworCXJldHVybiBhZXNfY3R4X2NvbW1vbihjcnlwdG9fYmxrY2lwaGVyX2N0eCh0Zm0pKTsKK30KKwogc3RhdGljIGludCBhZXNfc2V0X2tleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqaW5fa2V5LAotCQkgICAgICAgdW5zaWduZWQgaW50IGtleV9sZW4sIHUzMiAqZmxhZ3MpCisJCSAgICAgICB1bnNpZ25lZCBpbnQga2V5X2xlbikKIHsKIAlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gYWVzX2N0eCh0Zm0pOwogCWNvbnN0IF9fbGUzMiAqa2V5ID0gKGNvbnN0IF9fbGUzMiAqKWluX2tleTsKKwl1MzIgKmZsYWdzID0gJnRmbS0+Y3J0X2ZsYWdzOwogCXVpbnQzMl90IGksIHQsIHUsIHYsIHc7CiAJdWludDMyX3QgUFtBRVNfRVhURU5ERURfS0VZX1NJWkVdOwogCXVpbnQzMl90IHJvdW5kczsKIAotCWlmIChrZXlfbGVuICE9IDE2ICYmIGtleV9sZW4gIT0gMjQgJiYga2V5X2xlbiAhPSAzMikgeworCWlmIChrZXlfbGVuICUgOCkgewogCQkqZmxhZ3MgfD0gQ1JZUFRPX1RGTV9SRVNfQkFEX0tFWV9MRU47CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQzMCw1MCArNDUyLDEwIEBACiAJcGFkbG9ja194Y3J5cHRfZWNiKGluLCBvdXQsIGN0eC0+RCwgJmN0eC0+Y3dvcmQuZGVjcnlwdCwgMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYWVzX2VuY3J5cHRfZWNiKGNvbnN0IHN0cnVjdCBjaXBoZXJfZGVzYyAqZGVzYywgdTggKm91dCwKLQkJCQkgICAgY29uc3QgdTggKmluLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKQotewotCXN0cnVjdCBhZXNfY3R4ICpjdHggPSBhZXNfY3R4KGRlc2MtPnRmbSk7Ci0JcGFkbG9ja194Y3J5cHRfZWNiKGluLCBvdXQsIGN0eC0+RSwgJmN0eC0+Y3dvcmQuZW5jcnlwdCwKLQkJCSAgIG5ieXRlcyAvIEFFU19CTE9DS19TSVpFKTsKLQlyZXR1cm4gbmJ5dGVzICYgfihBRVNfQkxPQ0tfU0laRSAtIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFlc19kZWNyeXB0X2VjYihjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsIHU4ICpvdXQsCi0JCQkJICAgIGNvbnN0IHU4ICppbiwgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gYWVzX2N0eChkZXNjLT50Zm0pOwotCXBhZGxvY2tfeGNyeXB0X2VjYihpbiwgb3V0LCBjdHgtPkQsICZjdHgtPmN3b3JkLmRlY3J5cHQsCi0JCQkgICBuYnl0ZXMgLyBBRVNfQkxPQ0tfU0laRSk7Ci0JcmV0dXJuIG5ieXRlcyAmIH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBhZXNfZW5jcnlwdF9jYmMoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqb3V0LAotCQkJCSAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoZGVzYy0+dGZtKTsKLQl1OCAqaXY7Ci0KLQlpdiA9IHBhZGxvY2tfeGNyeXB0X2NiYyhpbiwgb3V0LCBjdHgtPkUsIGRlc2MtPmluZm8sCi0JCQkJJmN0eC0+Y3dvcmQuZW5jcnlwdCwgbmJ5dGVzIC8gQUVTX0JMT0NLX1NJWkUpOwotCW1lbWNweShkZXNjLT5pbmZvLCBpdiwgQUVTX0JMT0NLX1NJWkUpOwotCi0JcmV0dXJuIG5ieXRlcyAmIH4oQUVTX0JMT0NLX1NJWkUgLSAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludCBhZXNfZGVjcnlwdF9jYmMoY29uc3Qgc3RydWN0IGNpcGhlcl9kZXNjICpkZXNjLCB1OCAqb3V0LAotCQkJCSAgICBjb25zdCB1OCAqaW4sIHVuc2lnbmVkIGludCBuYnl0ZXMpCi17Ci0Jc3RydWN0IGFlc19jdHggKmN0eCA9IGFlc19jdHgoZGVzYy0+dGZtKTsKLQlwYWRsb2NrX3hjcnlwdF9jYmMoaW4sIG91dCwgY3R4LT5ELCBkZXNjLT5pbmZvLCAmY3R4LT5jd29yZC5kZWNyeXB0LAotCQkJICAgbmJ5dGVzIC8gQUVTX0JMT0NLX1NJWkUpOwotCXJldHVybiBuYnl0ZXMgJiB+KEFFU19CTE9DS19TSVpFIC0gMSk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBhZXNfYWxnID0gewogCS5jcmFfbmFtZQkJPQkiYWVzIiwKIAkuY3JhX2RyaXZlcl9uYW1lCT0JImFlcy1wYWRsb2NrIiwKLQkuY3JhX3ByaW9yaXR5CQk9CTMwMCwKKwkuY3JhX3ByaW9yaXR5CQk9CVBBRExPQ0tfQ1JBX1BSSU9SSVRZLAogCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0NJUEhFUiwKIAkuY3JhX2Jsb2Nrc2l6ZQkJPQlBRVNfQkxPQ0tfU0laRSwKIAkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBhZXNfY3R4KSwKQEAgLTQ4NywyMyArNDY5LDE5NSBAQAogCQkJLmNpYV9zZXRrZXkJICAgCT0gCWFlc19zZXRfa2V5LAogCQkJLmNpYV9lbmNyeXB0CSAJPQlhZXNfZW5jcnlwdCwKIAkJCS5jaWFfZGVjcnlwdAkgIAk9CWFlc19kZWNyeXB0LAotCQkJLmNpYV9lbmNyeXB0X2VjYiAJPQlhZXNfZW5jcnlwdF9lY2IsCi0JCQkuY2lhX2RlY3J5cHRfZWNiICAJPQlhZXNfZGVjcnlwdF9lY2IsCi0JCQkuY2lhX2VuY3J5cHRfY2JjIAk9CWFlc19lbmNyeXB0X2NiYywKLQkJCS5jaWFfZGVjcnlwdF9jYmMgIAk9CWFlc19kZWNyeXB0X2NiYywKIAkJfQogCX0KIH07CiAKLWludCBfX2luaXQgcGFkbG9ja19pbml0X2Flcyh2b2lkKQorc3RhdGljIGludCBlY2JfYWVzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICJVc2luZyBWSUEgUGFkTG9jayBBQ0UgZm9yIEFFUyBhbGdvcml0aG0uXG4iKTsKKwlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gYmxrX2Flc19jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQlwYWRsb2NrX3hjcnlwdF9lY2Iod2Fsay5zcmMudmlydC5hZGRyLCB3YWxrLmRzdC52aXJ0LmFkZHIsCisJCQkJICAgY3R4LT5FLCAmY3R4LT5jd29yZC5lbmNyeXB0LAorCQkJCSAgIG5ieXRlcyAvIEFFU19CTE9DS19TSVpFKTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGVjYl9hZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBhZXNfY3R4ICpjdHggPSBibGtfYWVzX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCXBhZGxvY2tfeGNyeXB0X2VjYih3YWxrLnNyYy52aXJ0LmFkZHIsIHdhbGsuZHN0LnZpcnQuYWRkciwKKwkJCQkgICBjdHgtPkQsICZjdHgtPmN3b3JkLmRlY3J5cHQsCisJCQkJICAgbmJ5dGVzIC8gQUVTX0JMT0NLX1NJWkUpOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBlY2JfYWVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImVjYihhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImVjYi1hZXMtcGFkbG9jayIsCisJLmNyYV9wcmlvcml0eQkJPQlQQURMT0NLX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgYWVzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JUEFETE9DS19BTElHTk1FTlQgLSAxLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChlY2JfYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlBRVNfTUFYX0tFWV9TSVpFLAorCQkJLnNldGtleQkgICAJCT0gCWFlc19zZXRfa2V5LAorCQkJLmVuY3J5cHQJCT0JZWNiX2Flc19lbmNyeXB0LAorCQkJLmRlY3J5cHQJCT0JZWNiX2Flc19kZWNyeXB0LAorCQl9CisJfQorfTsKKworc3RhdGljIGludCBjYmNfYWVzX2VuY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJICAgdW5zaWduZWQgaW50IG5ieXRlcykKK3sKKwlzdHJ1Y3QgYWVzX2N0eCAqY3R4ID0gYmxrX2Flc19jdHgoZGVzYy0+dGZtKTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgd2FsazsKKwlpbnQgZXJyOworCisJYmxrY2lwaGVyX3dhbGtfaW5pdCgmd2FsaywgZHN0LCBzcmMsIG5ieXRlcyk7CisJZXJyID0gYmxrY2lwaGVyX3dhbGtfdmlydChkZXNjLCAmd2Fsayk7CisKKwl3aGlsZSAoKG5ieXRlcyA9IHdhbGsubmJ5dGVzKSkgeworCQl1OCAqaXYgPSBwYWRsb2NrX3hjcnlwdF9jYmMod2Fsay5zcmMudmlydC5hZGRyLAorCQkJCQkgICAgd2Fsay5kc3QudmlydC5hZGRyLCBjdHgtPkUsCisJCQkJCSAgICB3YWxrLml2LCAmY3R4LT5jd29yZC5lbmNyeXB0LAorCQkJCQkgICAgbmJ5dGVzIC8gQUVTX0JMT0NLX1NJWkUpOworCQltZW1jcHkod2Fsay5pdiwgaXYsIEFFU19CTE9DS19TSVpFKTsKKwkJbmJ5dGVzICY9IEFFU19CTE9DS19TSVpFIC0gMTsKKwkJZXJyID0gYmxrY2lwaGVyX3dhbGtfZG9uZShkZXNjLCAmd2FsaywgbmJ5dGVzKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNiY19hZXNfZGVjcnlwdChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXN0cnVjdCBhZXNfY3R4ICpjdHggPSBibGtfYWVzX2N0eChkZXNjLT50Zm0pOworCXN0cnVjdCBibGtjaXBoZXJfd2FsayB3YWxrOworCWludCBlcnI7CisKKwlibGtjaXBoZXJfd2Fsa19pbml0KCZ3YWxrLCBkc3QsIHNyYywgbmJ5dGVzKTsKKwllcnIgPSBibGtjaXBoZXJfd2Fsa192aXJ0KGRlc2MsICZ3YWxrKTsKKworCXdoaWxlICgobmJ5dGVzID0gd2Fsay5uYnl0ZXMpKSB7CisJCXBhZGxvY2tfeGNyeXB0X2NiYyh3YWxrLnNyYy52aXJ0LmFkZHIsIHdhbGsuZHN0LnZpcnQuYWRkciwKKwkJCQkgICBjdHgtPkQsIHdhbGsuaXYsICZjdHgtPmN3b3JkLmRlY3J5cHQsCisJCQkJICAgbmJ5dGVzIC8gQUVTX0JMT0NLX1NJWkUpOworCQluYnl0ZXMgJj0gQUVTX0JMT0NLX1NJWkUgLSAxOworCQllcnIgPSBibGtjaXBoZXJfd2Fsa19kb25lKGRlc2MsICZ3YWxrLCBuYnl0ZXMpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBjYmNfYWVzX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JImNiYyhhZXMpIiwKKwkuY3JhX2RyaXZlcl9uYW1lCT0JImNiYy1hZXMtcGFkbG9jayIsCisJLmNyYV9wcmlvcml0eQkJPQlQQURMT0NLX0NPTVBPU0lURV9QUklPUklUWSwKKwkuY3JhX2ZsYWdzCQk9CUNSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsCisJLmNyYV9ibG9ja3NpemUJCT0JQUVTX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgYWVzX2N0eCksCisJLmNyYV9hbGlnbm1hc2sJCT0JUEFETE9DS19BTElHTk1FTlQgLSAxLAorCS5jcmFfdHlwZQkJPQkmY3J5cHRvX2Jsa2NpcGhlcl90eXBlLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChjYmNfYWVzX2FsZy5jcmFfbGlzdCksCisJLmNyYV91CQkJPQl7CisJCS5ibGtjaXBoZXIgPSB7CisJCQkubWluX2tleXNpemUJCT0JQUVTX01JTl9LRVlfU0laRSwKKwkJCS5tYXhfa2V5c2l6ZQkJPQlBRVNfTUFYX0tFWV9TSVpFLAorCQkJLml2c2l6ZQkJCT0JQUVTX0JMT0NLX1NJWkUsCisJCQkuc2V0a2V5CSAgIAkJPSAJYWVzX3NldF9rZXksCisJCQkuZW5jcnlwdAkJPQljYmNfYWVzX2VuY3J5cHQsCisJCQkuZGVjcnlwdAkJPQljYmNfYWVzX2RlY3J5cHQsCisJCX0KKwl9Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBwYWRsb2NrX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJaWYgKCFjcHVfaGFzX3hjcnlwdCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJWSUEgUGFkTG9jayBub3QgZGV0ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFjcHVfaGFzX3hjcnlwdF9lbmFibGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlZJQSBQYWRMb2NrIGRldGVjdGVkLCBidXQgbm90IGVuYWJsZWQuIEhtbSwgc3RyYW5nZS4uLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWdlbl90YWJzKCk7Ci0JcmV0dXJuIGNyeXB0b19yZWdpc3Rlcl9hbGcoJmFlc19hbGcpOworCWlmICgocmV0ID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmYWVzX2FsZykpKQorCQlnb3RvIGFlc19lcnI7CisKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmVjYl9hZXNfYWxnKSkpCisJCWdvdG8gZWNiX2Flc19lcnI7CisKKwlpZiAoKHJldCA9IGNyeXB0b19yZWdpc3Rlcl9hbGcoJmNiY19hZXNfYWxnKSkpCisJCWdvdG8gY2JjX2Flc19lcnI7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICJVc2luZyBWSUEgUGFkTG9jayBBQ0UgZm9yIEFFUyBhbGdvcml0aG0uXG4iKTsKKworb3V0OgorCXJldHVybiByZXQ7CisKK2NiY19hZXNfZXJyOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmZWNiX2Flc19hbGcpOworZWNiX2Flc19lcnI6CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNfYWxnKTsKK2Flc19lcnI6CisJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVklBIFBhZExvY2sgQUVTIGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCWdvdG8gb3V0OwogfQogCi12b2lkIF9fZXhpdCBwYWRsb2NrX2ZpbmlfYWVzKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcGFkbG9ja19maW5pKHZvaWQpCiB7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZjYmNfYWVzX2FsZyk7CisJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZlY2JfYWVzX2FsZyk7CiAJY3J5cHRvX3VucmVnaXN0ZXJfYWxnKCZhZXNfYWxnKTsKIH0KKworbW9kdWxlX2luaXQocGFkbG9ja19pbml0KTsKK21vZHVsZV9leGl0KHBhZGxvY2tfZmluaSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVklBIFBhZExvY2sgQUVTIGFsZ29yaXRobSBzdXBwb3J0Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWwgTHVkdmlnIik7CisKK01PRFVMRV9BTElBUygiYWVzLXBhZGxvY2siKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stZ2VuZXJpYy5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1nZW5lcmljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4Y2YwZTgyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2stZ2VuZXJpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogCi0gKiBDcnlwdG9ncmFwaGljIEFQSS4KLSAqCi0gKiBTdXBwb3J0IGZvciBWSUEgUGFkTG9jayBoYXJkd2FyZSBjcnlwdG8gZW5naW5lLgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCAgTWljaGFsIEx1ZHZpZyA8bWljaGFsQGxvZ2l4LmN6PgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgInBhZGxvY2suaCIKLQotc3RhdGljIGludCBfX2luaXQKLXBhZGxvY2tfaW5pdCh2b2lkKQotewotCWludCByZXQgPSAtRU5PU1lTOwotCQotCWlmICghY3B1X2hhc194Y3J5cHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVklBIFBhZExvY2sgbm90IGRldGVjdGVkLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWlmICghY3B1X2hhc194Y3J5cHRfZW5hYmxlZCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJWSUEgUGFkTG9jayBkZXRlY3RlZCwgYnV0IG5vdCBlbmFibGVkLiBIbW0sIHN0cmFuZ2UuLi5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FFUwotCWlmICgocmV0ID0gcGFkbG9ja19pbml0X2FlcygpKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJWSUEgUGFkTG9jayBBRVMgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQotI2VuZGlmCi0KLQlpZiAocmV0ID09IC1FTk9TWVMpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIkhtbSwgVklBIFBhZExvY2sgd2FzIGNvbXBpbGVkIHdpdGhvdXQgYW55IGFsZ29yaXRobS5cbiIpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0Ci1wYWRsb2NrX2Zpbmkodm9pZCkKLXsKLSNpZmRlZiBDT05GSUdfQ1JZUFRPX0RFVl9QQURMT0NLX0FFUwotCXBhZGxvY2tfZmluaV9hZXMoKTsKLSNlbmRpZgotfQotCi1tb2R1bGVfaW5pdChwYWRsb2NrX2luaXQpOwotbW9kdWxlX2V4aXQocGFkbG9ja19maW5pKTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJWSUEgUGFkTG9jayBjcnlwdG8gZW5naW5lIHN1cHBvcnQuIik7Ci1NT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJNaWNoYWwgTHVkdmlnIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLXNoYS5jIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzgxZmQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay1zaGEuYwpAQCAtMCwwICsxLDMxOCBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJLgorICoKKyAqIFN1cHBvcnQgZm9yIFZJQSBQYWRMb2NrIGhhcmR3YXJlIGNyeXB0byBlbmdpbmUuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2ICBNaWNoYWwgTHVkdmlnIDxtaWNoYWxAbG9naXguY3o+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGNyeXB0by9hbGdhcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlICJwYWRsb2NrLmgiCisKKyNkZWZpbmUgU0hBMV9ERUZBVUxUX0ZBTExCQUNLCSJzaGExLWdlbmVyaWMiCisjZGVmaW5lIFNIQTFfRElHRVNUX1NJWkUgICAgICAgIDIwCisjZGVmaW5lIFNIQTFfSE1BQ19CTE9DS19TSVpFICAgIDY0CisKKyNkZWZpbmUgU0hBMjU2X0RFRkFVTFRfRkFMTEJBQ0sgInNoYTI1Ni1nZW5lcmljIgorI2RlZmluZSBTSEEyNTZfRElHRVNUX1NJWkUgICAgICAzMgorI2RlZmluZSBTSEEyNTZfSE1BQ19CTE9DS19TSVpFICA2NAorCitzdHJ1Y3QgcGFkbG9ja19zaGFfY3R4IHsKKwljaGFyCQkqZGF0YTsKKwlzaXplX3QJCXVzZWQ7CisJaW50CQlieXBhc3M7CisJdm9pZCAoKmZfc2hhX3BhZGxvY2spKGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBjb3VudCk7CisJc3RydWN0IGhhc2hfZGVzYyBmYWxsYmFjazsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHBhZGxvY2tfc2hhX2N0eCAqY3R4KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fY3R4KHRmbSk7Cit9CisKKy8qIFdlJ2xsIG5lZWQgYWxpZ25lZCBhZGRyZXNzIG9uIHRoZSBzdGFjayAqLworI2RlZmluZSBORUFSRVNUX0FMSUdORUQocHRyKSBcCisJKCh2b2lkICopQUxJR04oKHNpemVfdCkocHRyKSwgUEFETE9DS19BTElHTk1FTlQpKQorCitzdGF0aWMgc3RydWN0IGNyeXB0b19hbGcgc2hhMV9hbGcsIHNoYTI1Nl9hbGc7CisKK3N0YXRpYyB2b2lkIHBhZGxvY2tfc2hhX2J5cGFzcyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWlmIChjdHgodGZtKS0+YnlwYXNzKQorCQlyZXR1cm47CisKKwljcnlwdG9faGFzaF9pbml0KCZjdHgodGZtKS0+ZmFsbGJhY2spOworCWlmIChjdHgodGZtKS0+ZGF0YSAmJiBjdHgodGZtKS0+dXNlZCkgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CisKKwkJc2dfc2V0X2J1Zigmc2csIGN0eCh0Zm0pLT5kYXRhLCBjdHgodGZtKS0+dXNlZCk7CisJCWNyeXB0b19oYXNoX3VwZGF0ZSgmY3R4KHRmbSktPmZhbGxiYWNrLCAmc2csIHNnLmxlbmd0aCk7CisJfQorCisJY3R4KHRmbSktPnVzZWQgPSAwOworCWN0eCh0Zm0pLT5ieXBhc3MgPSAxOworfQorCitzdGF0aWMgdm9pZCBwYWRsb2NrX3NoYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJY3R4KHRmbSktPnVzZWQgPSAwOworCWN0eCh0Zm0pLT5ieXBhc3MgPSAwOworfQorCitzdGF0aWMgdm9pZCBwYWRsb2NrX3NoYV91cGRhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCWNvbnN0IHVpbnQ4X3QgKmRhdGEsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJLyogT3VyIGJ1ZmZlciBpcyBhbHdheXMgb25lIHBhZ2UuICovCisJaWYgKHVubGlrZWx5KCFjdHgodGZtKS0+YnlwYXNzICYmCisJCSAgICAgKGN0eCh0Zm0pLT51c2VkICsgbGVuZ3RoID4gUEFHRV9TSVpFKSkpCisJCXBhZGxvY2tfc2hhX2J5cGFzcyh0Zm0pOworCisJaWYgKHVubGlrZWx5KGN0eCh0Zm0pLT5ieXBhc3MpKSB7CisJCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwkJc2dfc2V0X2J1Zigmc2csICh1aW50OF90ICopZGF0YSwgbGVuZ3RoKTsKKwkJY3J5cHRvX2hhc2hfdXBkYXRlKCZjdHgodGZtKS0+ZmFsbGJhY2ssICZzZywgbGVuZ3RoKTsKKwkJcmV0dXJuOworCX0KKworCW1lbWNweShjdHgodGZtKS0+ZGF0YSArIGN0eCh0Zm0pLT51c2VkLCBkYXRhLCBsZW5ndGgpOworCWN0eCh0Zm0pLT51c2VkICs9IGxlbmd0aDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBhZGxvY2tfb3V0cHV0X2Jsb2NrKHVpbnQzMl90ICpzcmMsCisJCSAJdWludDMyX3QgKmRzdCwgc2l6ZV90IGNvdW50KQoreworCXdoaWxlIChjb3VudC0tKQorCQkqZHN0KysgPSBzd2FiMzIoKnNyYysrKTsKK30KKworc3RhdGljIHZvaWQgcGFkbG9ja19kb19zaGExKGNvbnN0IGNoYXIgKmluLCBjaGFyICpvdXQsIGludCBjb3VudCkKK3sKKwkvKiBXZSBjYW4ndCBzdG9yZSBkaXJlY3RseSB0byAqb3V0IGFzIGl0IG1heSBiZSB1bmFsaWduZWQuICovCisJLyogQlRXIERvbid0IHJlZHVjZSB0aGUgYnVmZmVyIHNpemUgYmVsb3cgMTI4IEJ5dGVzIQorCSAqICAgICBQYWRMb2NrIG1pY3JvY29kZSBuZWVkcyBpdCB0aGF0IGJpZy4gKi8KKwljaGFyIGJ1ZlsxMjgrMTZdOworCWNoYXIgKnJlc3VsdCA9IE5FQVJFU1RfQUxJR05FRChidWYpOworCisJKCh1aW50MzJfdCAqKXJlc3VsdClbMF0gPSAweDY3NDUyMzAxOworCSgodWludDMyX3QgKilyZXN1bHQpWzFdID0gMHhFRkNEQUI4OTsKKwkoKHVpbnQzMl90ICopcmVzdWx0KVsyXSA9IDB4OThCQURDRkU7CisJKCh1aW50MzJfdCAqKXJlc3VsdClbM10gPSAweDEwMzI1NDc2OworCSgodWludDMyX3QgKilyZXN1bHQpWzRdID0gMHhDM0QyRTFGMDsKKyAKKwlhc20gdm9sYXRpbGUgKCIuYnl0ZSAweGYzLDB4MGYsMHhhNiwweGM4IiAvKiByZXAgeHNoYTEgKi8KKwkJICAgICAgOiAiK1MiKGluKSwgIitEIihyZXN1bHQpCisJCSAgICAgIDogImMiKGNvdW50KSwgImEiKDApKTsKKworCXBhZGxvY2tfb3V0cHV0X2Jsb2NrKCh1aW50MzJfdCAqKXJlc3VsdCwgKHVpbnQzMl90ICopb3V0LCA1KTsKK30KKworc3RhdGljIHZvaWQgcGFkbG9ja19kb19zaGEyNTYoY29uc3QgY2hhciAqaW4sIGNoYXIgKm91dCwgaW50IGNvdW50KQoreworCS8qIFdlIGNhbid0IHN0b3JlIGRpcmVjdGx5IHRvICpvdXQgYXMgaXQgbWF5IGJlIHVuYWxpZ25lZC4gKi8KKwkvKiBCVFcgRG9uJ3QgcmVkdWNlIHRoZSBidWZmZXIgc2l6ZSBiZWxvdyAxMjggQnl0ZXMhCisJICogICAgIFBhZExvY2sgbWljcm9jb2RlIG5lZWRzIGl0IHRoYXQgYmlnLiAqLworCWNoYXIgYnVmWzEyOCsxNl07CisJY2hhciAqcmVzdWx0ID0gTkVBUkVTVF9BTElHTkVEKGJ1Zik7CisKKwkoKHVpbnQzMl90ICopcmVzdWx0KVswXSA9IDB4NkEwOUU2Njc7CisJKCh1aW50MzJfdCAqKXJlc3VsdClbMV0gPSAweEJCNjdBRTg1OworCSgodWludDMyX3QgKilyZXN1bHQpWzJdID0gMHgzQzZFRjM3MjsKKwkoKHVpbnQzMl90ICopcmVzdWx0KVszXSA9IDB4QTU0RkY1M0E7CisJKCh1aW50MzJfdCAqKXJlc3VsdClbNF0gPSAweDUxMEU1MjdGOworCSgodWludDMyX3QgKilyZXN1bHQpWzVdID0gMHg5QjA1Njg4QzsKKwkoKHVpbnQzMl90ICopcmVzdWx0KVs2XSA9IDB4MUY4M0Q5QUI7CisJKCh1aW50MzJfdCAqKXJlc3VsdClbN10gPSAweDVCRTBDRDE5OworCisJYXNtIHZvbGF0aWxlICgiLmJ5dGUgMHhmMywweDBmLDB4YTYsMHhkMCIgLyogcmVwIHhzaGEyNTYgKi8KKwkJICAgICAgOiAiK1MiKGluKSwgIitEIihyZXN1bHQpCisJCSAgICAgIDogImMiKGNvdW50KSwgImEiKDApKTsKKworCXBhZGxvY2tfb3V0cHV0X2Jsb2NrKCh1aW50MzJfdCAqKXJlc3VsdCwgKHVpbnQzMl90ICopb3V0LCA4KTsKK30KKworc3RhdGljIHZvaWQgcGFkbG9ja19zaGFfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdWludDhfdCAqb3V0KQoreworCWlmICh1bmxpa2VseShjdHgodGZtKS0+YnlwYXNzKSkgeworCQljcnlwdG9faGFzaF9maW5hbCgmY3R4KHRmbSktPmZhbGxiYWNrLCBvdXQpOworCQljdHgodGZtKS0+YnlwYXNzID0gMDsKKwkJcmV0dXJuOworCX0KKworCS8qIFBhc3MgdGhlIGlucHV0IGJ1ZmZlciB0byBQYWRMb2NrIG1pY3JvY29kZS4uLiAqLworCWN0eCh0Zm0pLT5mX3NoYV9wYWRsb2NrKGN0eCh0Zm0pLT5kYXRhLCBvdXQsIGN0eCh0Zm0pLT51c2VkKTsKKworCWN0eCh0Zm0pLT51c2VkID0gMDsKK30KKworc3RhdGljIGludCBwYWRsb2NrX2NyYV9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJY29uc3QgY2hhciAqZmFsbGJhY2tfZHJpdmVyX25hbWUgPSB0Zm0tPl9fY3J0X2FsZy0+Y3JhX25hbWU7CisJc3RydWN0IGNyeXB0b19oYXNoICpmYWxsYmFja190Zm07CisKKwkvKiBGb3Igbm93IHdlJ2xsIGFsbG9jYXRlIG9uZSBwYWdlLiBUaGlzCisJICogY291bGQgZXZlbnR1YWxseSBiZSBjb25maWd1cmFibGUgb25lIGRheS4gKi8KKwljdHgodGZtKS0+ZGF0YSA9IChjaGFyICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUwpOworCWlmICghY3R4KHRmbSktPmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogQWxsb2NhdGUgYSBmYWxsYmFjayBhbmQgYWJvcnQgaWYgaXQgZmFpbGVkLiAqLworCWZhbGxiYWNrX3RmbSA9IGNyeXB0b19hbGxvY19oYXNoKGZhbGxiYWNrX2RyaXZlcl9uYW1lLCAwLAorCQkJCQkgQ1JZUFRPX0FMR19BU1lOQyB8CisJCQkJCSBDUllQVE9fQUxHX05FRURfRkFMTEJBQ0spOworCWlmIChJU19FUlIoZmFsbGJhY2tfdGZtKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiRmFsbGJhY2sgZHJpdmVyICclcycgY291bGQgbm90IGJlIGxvYWRlZCFcbiIsCisJCSAgICAgICBmYWxsYmFja19kcml2ZXJfbmFtZSk7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoY3R4KHRmbSktPmRhdGEpKTsKKwkJcmV0dXJuIFBUUl9FUlIoZmFsbGJhY2tfdGZtKTsKKwl9CisKKwljdHgodGZtKS0+ZmFsbGJhY2sudGZtID0gZmFsbGJhY2tfdGZtOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhZGxvY2tfc2hhMV9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWN0eCh0Zm0pLT5mX3NoYV9wYWRsb2NrID0gcGFkbG9ja19kb19zaGExOworCisJcmV0dXJuIHBhZGxvY2tfY3JhX2luaXQodGZtKTsKK30KKworc3RhdGljIGludCBwYWRsb2NrX3NoYTI1Nl9jcmFfaW5pdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQoreworCWN0eCh0Zm0pLT5mX3NoYV9wYWRsb2NrID0gcGFkbG9ja19kb19zaGEyNTY7CisKKwlyZXR1cm4gcGFkbG9ja19jcmFfaW5pdCh0Zm0pOworfQorCitzdGF0aWMgdm9pZCBwYWRsb2NrX2NyYV9leGl0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJaWYgKGN0eCh0Zm0pLT5kYXRhKSB7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoY3R4KHRmbSktPmRhdGEpKTsKKwkJY3R4KHRmbSktPmRhdGEgPSBOVUxMOworCX0KKworCWNyeXB0b19mcmVlX2hhc2goY3R4KHRmbSktPmZhbGxiYWNrLnRmbSk7CisJY3R4KHRmbSktPmZhbGxiYWNrLnRmbSA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2FsZyBzaGExX2FsZyA9IHsKKwkuY3JhX25hbWUJCT0JInNoYTEiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkic2hhMS1wYWRsb2NrIiwKKwkuY3JhX3ByaW9yaXR5CQk9CVBBRExPQ0tfQ1JBX1BSSU9SSVRZLAorCS5jcmFfZmxhZ3MJCT0JQ1JZUFRPX0FMR19UWVBFX0RJR0VTVCB8CisJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSywKKwkuY3JhX2Jsb2Nrc2l6ZQkJPQlTSEExX0hNQUNfQkxPQ0tfU0laRSwKKwkuY3JhX2N0eHNpemUJCT0Jc2l6ZW9mKHN0cnVjdCBwYWRsb2NrX3NoYV9jdHgpLAorCS5jcmFfbW9kdWxlCQk9CVRISVNfTU9EVUxFLAorCS5jcmFfbGlzdAkJPQlMSVNUX0hFQURfSU5JVChzaGExX2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9CXBhZGxvY2tfc2hhMV9jcmFfaW5pdCwKKwkuY3JhX2V4aXQJCT0JcGFkbG9ja19jcmFfZXhpdCwKKwkuY3JhX3UJCQk9CXsKKwkJLmRpZ2VzdCA9IHsKKwkJCS5kaWFfZGlnZXN0c2l6ZQk9CVNIQTFfRElHRVNUX1NJWkUsCisJCQkuZGlhX2luaXQgICAJPSAJcGFkbG9ja19zaGFfaW5pdCwKKwkJCS5kaWFfdXBkYXRlIAk9CXBhZGxvY2tfc2hhX3VwZGF0ZSwKKwkJCS5kaWFfZmluYWwgIAk9CXBhZGxvY2tfc2hhX2ZpbmFsLAorCQl9CisJfQorfTsKKworc3RhdGljIHN0cnVjdCBjcnlwdG9fYWxnIHNoYTI1Nl9hbGcgPSB7CisJLmNyYV9uYW1lCQk9CSJzaGEyNTYiLAorCS5jcmFfZHJpdmVyX25hbWUJPQkic2hhMjU2LXBhZGxvY2siLAorCS5jcmFfcHJpb3JpdHkJCT0JUEFETE9DS19DUkFfUFJJT1JJVFksCisJLmNyYV9mbGFncwkJPQlDUllQVE9fQUxHX1RZUEVfRElHRVNUIHwKKwkJCQkJQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLLAorCS5jcmFfYmxvY2tzaXplCQk9CVNIQTI1Nl9ITUFDX0JMT0NLX1NJWkUsCisJLmNyYV9jdHhzaXplCQk9CXNpemVvZihzdHJ1Y3QgcGFkbG9ja19zaGFfY3R4KSwKKwkuY3JhX21vZHVsZQkJPQlUSElTX01PRFVMRSwKKwkuY3JhX2xpc3QJCT0JTElTVF9IRUFEX0lOSVQoc2hhMjU2X2FsZy5jcmFfbGlzdCksCisJLmNyYV9pbml0CQk9CXBhZGxvY2tfc2hhMjU2X2NyYV9pbml0LAorCS5jcmFfZXhpdAkJPQlwYWRsb2NrX2NyYV9leGl0LAorCS5jcmFfdQkJCT0JeworCQkuZGlnZXN0ID0geworCQkJLmRpYV9kaWdlc3RzaXplCT0JU0hBMjU2X0RJR0VTVF9TSVpFLAorCQkJLmRpYV9pbml0ICAgCT0gCXBhZGxvY2tfc2hhX2luaXQsCisJCQkuZGlhX3VwZGF0ZSAJPQlwYWRsb2NrX3NoYV91cGRhdGUsCisJCQkuZGlhX2ZpbmFsICAJPQlwYWRsb2NrX3NoYV9maW5hbCwKKwkJfQorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwYWRsb2NrX3NoYV9jaGVja19mYWxsYmFja3Modm9pZCkKK3sKKwlpZiAoIWNyeXB0b19oYXNfaGFzaCgic2hhMSIsIDAsIENSWVBUT19BTEdfQVNZTkMgfAorCQkJCQlDUllQVE9fQUxHX05FRURfRkFMTEJBQ0spKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkgICAgICAgIkNvdWxkbid0IGxvYWQgZmFsbGJhY2sgbW9kdWxlIGZvciBzaGExLlxuIik7CisKKwlpZiAoIWNyeXB0b19oYXNfaGFzaCgic2hhMjU2IiwgMCwgQ1JZUFRPX0FMR19BU1lOQyB8CisJCQkJCUNSWVBUT19BTEdfTkVFRF9GQUxMQkFDSykpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCSAgICAgICAiQ291bGRuJ3QgbG9hZCBmYWxsYmFjayBtb2R1bGUgZm9yIHNoYTI1Ni5cbiIpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBwYWRsb2NrX2luaXQodm9pZCkKK3sKKwlpbnQgcmMgPSAtRU5PREVWOworCisJaWYgKCFjcHVfaGFzX3BoZSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJWSUEgUGFkTG9jayBIYXNoIEVuZ2luZSBub3QgZGV0ZWN0ZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCFjcHVfaGFzX3BoZV9lbmFibGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlZJQSBQYWRMb2NrIGRldGVjdGVkLCBidXQgbm90IGVuYWJsZWQuIEhtbSwgc3RyYW5nZS4uLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXBhZGxvY2tfc2hhX2NoZWNrX2ZhbGxiYWNrcygpOworCisJcmMgPSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCZzaGExX2FsZyk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCXJjID0gY3J5cHRvX3JlZ2lzdGVyX2FsZygmc2hhMjU2X2FsZyk7CisJaWYgKHJjKQorCQlnb3RvIG91dF91bnJlZzE7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICJVc2luZyBWSUEgUGFkTG9jayBBQ0UgZm9yIFNIQTEvU0hBMjU2IGFsZ29yaXRobXMuXG4iKTsKKworCXJldHVybiAwOworCitvdXRfdW5yZWcxOgorCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMV9hbGcpOworb3V0OgorCXByaW50ayhLRVJOX0VSUiBQRlggIlZJQSBQYWRMb2NrIFNIQTEvU0hBMjU2IGluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHBhZGxvY2tfZmluaSh2b2lkKQoreworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMV9hbGcpOworCWNyeXB0b191bnJlZ2lzdGVyX2FsZygmc2hhMjU2X2FsZyk7Cit9CisKK21vZHVsZV9pbml0KHBhZGxvY2tfaW5pdCk7Cittb2R1bGVfZXhpdChwYWRsb2NrX2ZpbmkpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIlZJQSBQYWRMb2NrIFNIQTEvU0hBMjU2IGFsZ29yaXRobXMgc3VwcG9ydC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIk1pY2hhbCBMdWR2aWciKTsKKworTU9EVUxFX0FMSUFTKCJzaGExLXBhZGxvY2siKTsKK01PRFVMRV9BTElBUygic2hhMjU2LXBhZGxvY2siKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suYyBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQ3ZGQ1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDcnlwdG9ncmFwaGljIEFQSS4KKyAqCisgKiBTdXBwb3J0IGZvciBWSUEgUGFkTG9jayBoYXJkd2FyZSBjcnlwdG8gZW5naW5lLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiAgTWljaGFsIEx1ZHZpZyA8bWljaGFsQGxvZ2l4LmN6PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KKyNpbmNsdWRlIDxsaW51eC9jcnlwdG9oYXNoLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlICJwYWRsb2NrLmgiCisKK3N0YXRpYyBpbnQgX19pbml0IHBhZGxvY2tfaW5pdCh2b2lkKQoreworCWludCBzdWNjZXNzID0gMDsKKworCWlmIChjcnlwdG9faGFzX2NpcGhlcigiYWVzLXBhZGxvY2siLCAwLCAwKSkKKwkJc3VjY2VzcysrOworCisJaWYgKGNyeXB0b19oYXNfaGFzaCgic2hhMS1wYWRsb2NrIiwgMCwgMCkpCisJCXN1Y2Nlc3MrKzsKKworCWlmIChjcnlwdG9faGFzX2hhc2goInNoYTI1Ni1wYWRsb2NrIiwgMCwgMCkpCisJCXN1Y2Nlc3MrKzsKKworCWlmICghc3VjY2VzcykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiTm8gVklBIFBhZExvY2sgZHJpdmVycyBoYXZlIGJlZW4gbG9hZGVkLlxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVkIGRyaXZlcnMgYXJlIGF2YWlsYWJsZS5cbiIsIHN1Y2Nlc3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwYWRsb2NrX2Zpbmkodm9pZCkKK3sKK30KKworbW9kdWxlX2luaXQocGFkbG9ja19pbml0KTsKK21vZHVsZV9leGl0KHBhZGxvY2tfZmluaSk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTG9hZCBhbGwgY29uZmlndXJlZCBQYWRMb2NrIGFsZ29yaXRobXMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWwgTHVkdmlnIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaCBiL2RyaXZlcnMvY3J5cHRvL3BhZGxvY2suaAppbmRleCBiNzg0ODliLi5iNzI4ZTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9wYWRsb2NrLmgKKysrIGIvZHJpdmVycy9jcnlwdG8vcGFkbG9jay5oCkBAIC0xNSwyMiArMTUsOSBAQAogCiAjZGVmaW5lIFBBRExPQ0tfQUxJR05NRU5UIDE2CiAKLS8qIENvbnRyb2wgd29yZC4gKi8KLXN0cnVjdCBjd29yZCB7Ci0JdW5zaWduZWQgaW50IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkKLQkJcm91bmRzOjQsCi0JCWFsZ286MywKLQkJa2V5Z2VuOjEsCi0JCWludGVybToxLAotCQllbmNkZWM6MSwKLQkJa3NpemU6MjsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKFBBRExPQ0tfQUxJR05NRU5UKSkpOwotCiAjZGVmaW5lIFBGWAkicGFkbG9jazogIgogCi0jaWZkZWYgQ09ORklHX0NSWVBUT19ERVZfUEFETE9DS19BRVMKLWludCBwYWRsb2NrX2luaXRfYWVzKHZvaWQpOwotdm9pZCBwYWRsb2NrX2ZpbmlfYWVzKHZvaWQpOwotI2VuZGlmCisjZGVmaW5lIFBBRExPQ0tfQ1JBX1BSSU9SSVRZCTMwMAorI2RlZmluZSBQQURMT0NLX0NPTVBPU0lURV9QUklPUklUWSA0MDAKIAogI2VuZGlmCS8qIF9DUllQVE9fUEFETE9DS19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5oIGIvZHJpdmVycy9lZGFjL2VkYWNfbWMuaAppbmRleCBiZjZhYjhhLi5hMWNmZDRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2VkYWMvZWRhY19tYy5oCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX21jLmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rb2JqZWN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKICNkZWZpbmUgRURBQ19NQ19MQUJFTF9MRU4JMzEKICNkZWZpbmUgTUNfUFJPQ19OQU1FX01BWF9MRU4gNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKaW5kZXggY2MxNWM0Zi4uMzVhZDFiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYworKysgYi9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CkBAIC02NCwxNyArNjUsMTcgQEAKICNkZWZpbmUgQUJJVF9VR1VSVV9JTl9TRU5TT1IJCQkwCiAjZGVmaW5lIEFCSVRfVUdVUlVfVEVNUF9TRU5TT1IJCQkxCiAjZGVmaW5lIEFCSVRfVUdVUlVfTkMJCQkJMgotLyogVGltZW91dHMgLyBSZXRyaWVzLCBpZiB0aGVzZSB0dXJuIG91dCB0byBuZWVkIGEgbG90IG9mIGZpZGRsaW5nIHdlIGNvdWxkCi0gICBjb252ZXJ0IHRoZW0gdG8gcGFyYW1zLiAqLwotLyogMjUwIHdhcyBkZXRlcm1pbmVkIGJ5IHRyaWFsIGFuZCBlcnJvciwgMjAwIHdvcmtzIG1vc3Qgb2YgdGhlIHRpbWUsIGJ1dCBub3QKLSAgIGFsd2F5cy4gSSBhc3N1bWUgdGhpcyBpcyBjcHUtc3BlZWQgaW5kZXBlbmRlbnQsIHNpbmNlIHRoZSBJU0EtYnVzIGFuZCBub3QKLSAgIHRoZSBDUFUgc2hvdWxkIGJlIHRoZSBib3R0bGVuZWNrLiBOb3RlIHRoYXQgMjUwIHNvbWV0aW1lcyBpcyBzdGlsbCBub3QKLSAgIGVub3VnaCAob25seSByZXBvcnRlZCBvbiBBTjcgbWIpIHRoaXMgaXMgaGFuZGxlZCBieSBhIGhpZ2hlciBsYXllci4gKi8KLSNkZWZpbmUgQUJJVF9VR1VSVV9XQUlUX1RJTUVPVVQJCQkyNTAKKy8qIEluIG1hbnkgY2FzZXMgd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgdUd1cnUgdG8gcmVhY2ggYSBjZXJ0YWluIHN0YXR1cywgbW9zdAorICAgb2YgdGhlIHRpbWUgaXQgd2lsbCByZWFjaCB0aGlzIHN0YXR1cyB3aXRoaW4gMzAgLSA5MCBJU0EgcmVhZHMsIGFuZCB0aHVzIHdlCisgICBjYW4gYmVzdCBidXN5IHdhaXQuIFRoaXMgZGVmaW5lIGdpdmVzIHRoZSB0b3RhbCBhbW91bnQgb2YgcmVhZHMgdG8gdHJ5LiAqLworI2RlZmluZSBBQklUX1VHVVJVX1dBSVRfVElNRU9VVAkJCTEyNQorLyogSG93ZXZlciBzb21ldGltZXMgb2xkZXIgdmVyc2lvbnMgb2YgdGhlIHVHdXJ1IHNlZW0gdG8gYmUgZGlzdHJhY3RlZCBhbmQgdGhleQorICAgZG8gbm90IHJlc3BvbmQgZm9yIGEgbG9uZyB0aW1lLiBUbyBoYW5kbGUgdGhpcyB3ZSBzbGVlcCBiZWZvcmUgZWFjaCBvZiB0aGUKKyAgIGxhc3QgQUJJVF9VR1VSVV9XQUlUX1RJTUVPVVRfU0xFRVAgdHJpZXMuICovCisjZGVmaW5lIEFCSVRfVUdVUlVfV0FJVF9USU1FT1VUX1NMRUVQCQk1CiAvKiBOb3JtYWxseSBhbGwgZXhwZWN0ZWQgc3RhdHVzIGluIGFiaXR1Z3VydV9yZWFkeSwgYXJlIHJlcG9ydGVkIGFmdGVyIHRoZQotICAgZmlyc3QgcmVhZCwgYnV0IHNvbWV0aW1lcyBub3QgYW5kIHdlIG5lZWQgdG8gcG9sbCwgNSBwb2xscyB3YXMgbm90IGVub3VnaAotICAgNTAgc29mYXIgaXMuICovCi0jZGVmaW5lIEFCSVRfVUdVUlVfUkVBRFlfVElNRU9VVAkJNTAKKyAgIGZpcnN0IHJlYWQsIGJ1dCBzb21ldGltZXMgbm90IGFuZCB3ZSBuZWVkIHRvIHBvbGwuICovCisjZGVmaW5lIEFCSVRfVUdVUlVfUkVBRFlfVElNRU9VVAkJNQogLyogTWF4aW11bSAzIHJldHJpZXMgb24gdGltZWRvdXQgcmVhZHMvd3JpdGVzLCBkZWxheSAyMDAgbXMgYmVmb3JlIHJldHJ5aW5nICovCiAjZGVmaW5lIEFCSVRfVUdVUlVfTUFYX1JFVFJJRVMJCQkzCiAjZGVmaW5lIEFCSVRfVUdVUlVfUkVUUllfREVMQVkJCQkoSFovNSkKQEAgLTIyNiw2ICsyMjcsMTAgQEAKIAkJdGltZW91dC0tOwogCQlpZiAodGltZW91dCA9PSAwKQogCQkJcmV0dXJuIC1FQlVTWTsKKwkJLyogc2xlZXAgYSBiaXQgYmVmb3JlIG91ciBsYXN0IGZldyB0cmllcywgc2VlIHRoZSBjb21tZW50IG9uCisJCSAgIHRoaXMgd2hlcmUgQUJJVF9VR1VSVV9XQUlUX1RJTUVPVVRfU0xFRVAgaXMgZGVmaW5lZC4gKi8KKwkJaWYgKHRpbWVvdXQgPD0gQUJJVF9VR1VSVV9XQUlUX1RJTUVPVVRfU0xFRVApCisJCQltc2xlZXAoMCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjU2LDYgKzI2MSw3IEBACiAJCQkgICAiQ01EIHJlZyBkb2VzIG5vdCBob2xkIDB4QUMgYWZ0ZXIgcmVhZHkgY29tbWFuZFxuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQorCQltc2xlZXAoMCk7CiAJfQogCiAJLyogQWZ0ZXIgdGhpcyB0aGUgQUJJVF9VR1VSVV9EQVRBIHBvcnQgc2hvdWxkIGNvbnRhaW4KQEAgLTI2OCw2ICsyNzQsNyBAQAogCQkJCSJzdGF0ZSAhPSBtb3JlIGlucHV0IGFmdGVyIHJlYWR5IGNvbW1hbmRcbiIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KKwkJbXNsZWVwKDApOwogCX0KIAogCWRhdGEtPnVndXJ1X3JlYWR5ID0gMTsKQEAgLTMzMSw3ICszMzgsOCBAQAogCS8qIEFuZCByZWFkIHRoZSBkYXRhICovCiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKIAkJaWYgKGFiaXR1Z3VydV93YWl0KGRhdGEsIEFCSVRfVUdVUlVfU1RBVFVTX1JFQUQpKSB7Ci0JCQlBQklUX1VHVVJVX0RFQlVHKDEsICJ0aW1lb3V0IGV4Y2VlZGVkIHdhaXRpbmcgZm9yICIKKwkJCUFCSVRfVUdVUlVfREVCVUcocmV0cmllcyA/IDEgOiAzLAorCQkJCSJ0aW1lb3V0IGV4Y2VlZGVkIHdhaXRpbmcgZm9yICIKIAkJCQkicmVhZCBzdGF0ZSAoYmFuazogJWQsIHNlbnNvcjogJWQpXG4iLAogCQkJCShpbnQpYmFua19hZGRyLCAoaW50KXNlbnNvcl9hZGRyKTsKIAkJCWJyZWFrOwpAQCAtMzUwLDcgKzM1OCw5IEBACiBzdGF0aWMgaW50IGFiaXR1Z3VydV93cml0ZShzdHJ1Y3QgYWJpdHVndXJ1X2RhdGEgKmRhdGEsCiAJdTggYmFua19hZGRyLCB1OCBzZW5zb3JfYWRkciwgdTggKmJ1ZiwgaW50IGNvdW50KQogewotCWludCBpOworCS8qIFdlIHVzZSB0aGUgcmVhZHkgdGltZW91dCBhcyB3ZSBoYXZlIHRvIHdhaXQgZm9yIDB4QUMganVzdCBsaWtlIHRoZQorCSAgIHJlYWR5IGZ1bmN0aW9uICovCisJaW50IGksIHRpbWVvdXQgPSBBQklUX1VHVVJVX1JFQURZX1RJTUVPVVQ7CiAKIAkvKiBTZW5kIHRoZSBhZGRyZXNzICovCiAJaSA9IGFiaXR1Z3VydV9zZW5kX2FkZHJlc3MoZGF0YSwgYmFua19hZGRyLCBzZW5zb3JfYWRkciwKQEAgLTM3MCw3ICszODAsOCBAQAogCX0KIAogCS8qIE5vdyB3ZSBuZWVkIHRvIHdhaXQgdGlsbCB0aGUgY2hpcCBpcyByZWFkeSB0byBiZSByZWFkIGFnYWluLAotCSAgIGRvbid0IGFzayB3aHkgKi8KKwkgICBzbyB0aGF0IHdlIGNhbiByZWFkIDB4QUMgYXMgY29uZmlybWF0aW9uIHRoYXQgb3VyIHdyaXRlIGhhcworCSAgIHN1Y2NlZWRlZC4gKi8KIAlpZiAoYWJpdHVndXJ1X3dhaXQoZGF0YSwgQUJJVF9VR1VSVV9TVEFUVVNfUkVBRCkpIHsKIAkJQUJJVF9VR1VSVV9ERUJVRygxLCAidGltZW91dCBleGNlZWRlZCB3YWl0aW5nIGZvciByZWFkIHN0YXRlICIKIAkJCSJhZnRlciB3cml0ZSAoYmFuazogJWQsIHNlbnNvcjogJWQpXG4iLCAoaW50KWJhbmtfYWRkciwKQEAgLTM3OSwxMSArMzkwLDE1IEBACiAJfQogCiAJLyogQ21kIHBvcnQgTVVTVCBiZSByZWFkIG5vdyBhbmQgc2hvdWxkIGNvbnRhaW4gMHhBQyAqLwotCWlmIChpbmJfcChkYXRhLT5hZGRyICsgQUJJVF9VR1VSVV9DTUQpICE9IDB4QUMpIHsKLQkJQUJJVF9VR1VSVV9ERUJVRygxLCAiQ01EIHJlZyBkb2VzIG5vdCBob2xkIDB4QUMgYWZ0ZXIgd3JpdGUgIgotCQkJIihiYW5rOiAlZCwgc2Vuc29yOiAlZClcbiIsIChpbnQpYmFua19hZGRyLAotCQkJKGludClzZW5zb3JfYWRkcik7Ci0JCXJldHVybiAtRUlPOworCXdoaWxlIChpbmJfcChkYXRhLT5hZGRyICsgQUJJVF9VR1VSVV9DTUQpICE9IDB4QUMpIHsKKwkJdGltZW91dC0tOworCQlpZiAodGltZW91dCA9PSAwKSB7CisJCQlBQklUX1VHVVJVX0RFQlVHKDEsICJDTUQgcmVnIGRvZXMgbm90IGhvbGQgMHhBQyBhZnRlciAiCisJCQkJIndyaXRlIChiYW5rOiAlZCwgc2Vuc29yOiAlZClcbiIsCisJCQkJKGludCliYW5rX2FkZHIsIChpbnQpc2Vuc29yX2FkZHIpOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJbXNsZWVwKDApOwogCX0KIAogCS8qIExhc3QgcHV0IHRoZSBjaGlwIGJhY2sgaW4gcmVhZHkgc3RhdGUgKi8KQEAgLTQwMyw3ICs0MTgsNyBAQAogCQkJCSAgIHU4IHNlbnNvcl9hZGRyKQogewogCXU4IHZhbCwgYnVmWzNdOwotCWludCByZXQgPSBBQklUX1VHVVJVX05DOworCWludCBpLCByZXQgPSAtRU5PREVWOyAvKiBlcnJvciBpcyB0aGUgbW9zdCBjb21tb24gdXNlZCByZXR2YWwgOnwgKi8KIAogCS8qIElmIG92ZXJyaWRlbiBieSB0aGUgdXNlciByZXR1cm4gdGhlIHVzZXIgc2VsZWN0ZWQgdHlwZSAqLwogCWlmIChiYW5rMV90eXBlc1tzZW5zb3JfYWRkcl0gPj0gQUJJVF9VR1VSVV9JTl9TRU5TT1IgJiYKQEAgLTQzOSw3ICs0NTQsNyBAQAogCWJ1ZlsyXSA9IDI1MDsKIAlpZiAoYWJpdHVndXJ1X3dyaXRlKGRhdGEsIEFCSVRfVUdVUlVfU0VOU09SX0JBTksxICsgMiwgc2Vuc29yX2FkZHIsCiAJCQlidWYsIDMpICE9IDMpCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIGFiaXR1Z3VydV9kZXRlY3RfYmFuazFfc2Vuc29yX3R5cGVfZXhpdDsKIAkvKiBOb3cgd2UgbmVlZCAyMCBtcyB0byBnaXZlIHRoZSB1Z3VydSB0aW1lIHRvIHJlYWQgdGhlIHNlbnNvcnMKIAkgICBhbmQgcmFpc2UgYSB2b2x0YWdlIGFsYXJtICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpAQCAtNDQ3LDIxICs0NjIsMTYgQEAKIAkvKiBDaGVjayBmb3IgYWxhcm0gYW5kIGNoZWNrIHRoZSBhbGFybSBpcyBhIHZvbHQgbG93IGFsYXJtLiAqLwogCWlmIChhYml0dWd1cnVfcmVhZChkYXRhLCBBQklUX1VHVVJVX0FMQVJNX0JBTkssIDAsIGJ1ZiwgMywKIAkJCUFCSVRfVUdVUlVfTUFYX1JFVFJJRVMpICE9IDMpCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIGFiaXR1Z3VydV9kZXRlY3RfYmFuazFfc2Vuc29yX3R5cGVfZXhpdDsKIAlpZiAoYnVmW3NlbnNvcl9hZGRyLzhdICYgKDB4MDEgPDwgKHNlbnNvcl9hZGRyICUgOCkpKSB7CiAJCWlmIChhYml0dWd1cnVfcmVhZChkYXRhLCBBQklUX1VHVVJVX1NFTlNPUl9CQU5LMSArIDEsCiAJCQkJc2Vuc29yX2FkZHIsIGJ1ZiwgMywKIAkJCQlBQklUX1VHVVJVX01BWF9SRVRSSUVTKSAhPSAzKQotCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlnb3RvIGFiaXR1Z3VydV9kZXRlY3RfYmFuazFfc2Vuc29yX3R5cGVfZXhpdDsKIAkJaWYgKGJ1ZlswXSAmIEFCSVRfVUdVUlVfVk9MVF9MT1dfQUxBUk1fRkxBRykgewotCQkJLyogUmVzdG9yZSBvcmlnaW5hbCBzZXR0aW5ncyAqLwotCQkJaWYgKGFiaXR1Z3VydV93cml0ZShkYXRhLCBBQklUX1VHVVJVX1NFTlNPUl9CQU5LMSArIDIsCi0JCQkJCXNlbnNvcl9hZGRyLAotCQkJCQlkYXRhLT5iYW5rMV9zZXR0aW5nc1tzZW5zb3JfYWRkcl0sCi0JCQkJCTMpICE9IDMpCi0JCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQlBQklUX1VHVVJVX0RFQlVHKDIsICIgIGZvdW5kIHZvbHQgc2Vuc29yXG4iKTsKLQkJCXJldHVybiBBQklUX1VHVVJVX0lOX1NFTlNPUjsKKwkJCXJldCA9IEFCSVRfVUdVUlVfSU5fU0VOU09SOworCQkJZ290byBhYml0dWd1cnVfZGV0ZWN0X2JhbmsxX3NlbnNvcl90eXBlX2V4aXQ7CiAJCX0gZWxzZQogCQkJQUJJVF9VR1VSVV9ERUJVRygyLCAiICBhbGFybSByYWlzZWQgZHVyaW5nIHZvbHQgIgogCQkJCSJzZW5zb3IgdGVzdCwgYnV0IHZvbHQgbG93IGZsYWcgbm90IHNldFxuIik7CkBAIC00NzcsNyArNDg3LDcgQEAKIAlidWZbMl0gPSAxMDsKIAlpZiAoYWJpdHVndXJ1X3dyaXRlKGRhdGEsIEFCSVRfVUdVUlVfU0VOU09SX0JBTksxICsgMiwgc2Vuc29yX2FkZHIsCiAJCQlidWYsIDMpICE9IDMpCi0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIGFiaXR1Z3VydV9kZXRlY3RfYmFuazFfc2Vuc29yX3R5cGVfZXhpdDsKIAkvKiBOb3cgd2UgbmVlZCA1MCBtcyB0byBnaXZlIHRoZSB1Z3VydSB0aW1lIHRvIHJlYWQgdGhlIHNlbnNvcnMKIAkgICBhbmQgcmFpc2UgYSB0ZW1wIGFsYXJtICovCiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwpAQCAtNDg1LDE1ICs0OTUsMTYgQEAKIAkvKiBDaGVjayBmb3IgYWxhcm0gYW5kIGNoZWNrIHRoZSBhbGFybSBpcyBhIHRlbXAgaGlnaCBhbGFybS4gKi8KIAlpZiAoYWJpdHVndXJ1X3JlYWQoZGF0YSwgQUJJVF9VR1VSVV9BTEFSTV9CQU5LLCAwLCBidWYsIDMsCiAJCQlBQklUX1VHVVJVX01BWF9SRVRSSUVTKSAhPSAzKQotCQlyZXR1cm4gLUVOT0RFVjsKKwkJZ290byBhYml0dWd1cnVfZGV0ZWN0X2JhbmsxX3NlbnNvcl90eXBlX2V4aXQ7CiAJaWYgKGJ1ZltzZW5zb3JfYWRkci84XSAmICgweDAxIDw8IChzZW5zb3JfYWRkciAlIDgpKSkgewogCQlpZiAoYWJpdHVndXJ1X3JlYWQoZGF0YSwgQUJJVF9VR1VSVV9TRU5TT1JfQkFOSzEgKyAxLAogCQkJCXNlbnNvcl9hZGRyLCBidWYsIDMsCiAJCQkJQUJJVF9VR1VSVV9NQVhfUkVUUklFUykgIT0gMykKLQkJCXJldHVybiAtRU5PREVWOworCQkJZ290byBhYml0dWd1cnVfZGV0ZWN0X2JhbmsxX3NlbnNvcl90eXBlX2V4aXQ7CiAJCWlmIChidWZbMF0gJiBBQklUX1VHVVJVX1RFTVBfSElHSF9BTEFSTV9GTEFHKSB7Ci0JCQlyZXQgPSBBQklUX1VHVVJVX1RFTVBfU0VOU09SOwogCQkJQUJJVF9VR1VSVV9ERUJVRygyLCAiICBmb3VuZCB0ZW1wIHNlbnNvclxuIik7CisJCQlyZXQgPSBBQklUX1VHVVJVX1RFTVBfU0VOU09SOworCQkJZ290byBhYml0dWd1cnVfZGV0ZWN0X2JhbmsxX3NlbnNvcl90eXBlX2V4aXQ7CiAJCX0gZWxzZQogCQkJQUJJVF9VR1VSVV9ERUJVRygyLCAiICBhbGFybSByYWlzZWQgZHVyaW5nIHRlbXAgIgogCQkJCSJzZW5zb3IgdGVzdCwgYnV0IHRlbXAgaGlnaCBmbGFnIG5vdCBzZXRcbiIpOwpAQCAtNTAxLDExICs1MTIsMjMgQEAKIAkJQUJJVF9VR1VSVV9ERUJVRygyLCAiICBhbGFybSBub3QgcmFpc2VkIGR1cmluZyB0ZW1wIHNlbnNvciAiCiAJCQkidGVzdFxuIik7CiAKLQkvKiBSZXN0b3JlIG9yaWdpbmFsIHNldHRpbmdzICovCi0JaWYgKGFiaXR1Z3VydV93cml0ZShkYXRhLCBBQklUX1VHVVJVX1NFTlNPUl9CQU5LMSArIDIsIHNlbnNvcl9hZGRyLAotCQkJZGF0YS0+YmFuazFfc2V0dGluZ3Nbc2Vuc29yX2FkZHJdLCAzKSAhPSAzKQorCXJldCA9IEFCSVRfVUdVUlVfTkM7CithYml0dWd1cnVfZGV0ZWN0X2JhbmsxX3NlbnNvcl90eXBlX2V4aXQ6CisJLyogUmVzdG9yZSBvcmlnaW5hbCBzZXR0aW5ncywgZmFpbGluZyBoZXJlIGlzIHJlYWxseSBCQUQsIGl0IGhhcyBiZWVuCisJICAgcmVwb3J0ZWQgdGhhdCBzb21lIEJJT1MtZXMgaGFuZyB3aGVuIGVudGVyaW5nIHRoZSB1R3VydSBtZW51IHdpdGgKKwkgICBpbnZhbGlkIHNldHRpbmdzIHByZXNlbnQgaW4gdGhlIHVHdXJ1LCBzbyB3ZSB0cnkgdGhpcyAzIHRpbWVzLiAqLworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWlmIChhYml0dWd1cnVfd3JpdGUoZGF0YSwgQUJJVF9VR1VSVV9TRU5TT1JfQkFOSzEgKyAyLAorCQkJCXNlbnNvcl9hZGRyLCBkYXRhLT5iYW5rMV9zZXR0aW5nc1tzZW5zb3JfYWRkcl0sCisJCQkJMykgPT0gMykKKwkJCWJyZWFrOworCWlmIChpID09IDMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEFCSVRfVUdVUlVfTkFNRQorCQkJIjogRmF0YWwgZXJyb3IgY291bGQgbm90IHJlc3RvcmUgb3JpZ2luYWwgc2V0dGluZ3MuICIKKwkJCSJUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gcGxlYXNlIHJlcG9ydCB0aGlzIHRvIHRoZSAiCisJCQkiYWJpdHVndXJ1IG1haW50YWluZXIgKHNlZSBNQUlOVEFJTkVSUylcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKLQorCX0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzA1LDcgKzEzMjgsNyBAQAogCQlkYXRhLT51cGRhdGVfdGltZW91dHMgPSAwOwogTEVBVkVfVVBEQVRFOgogCQkvKiBoYW5kbGUgdGltZW91dCBjb25kaXRpb24gKi8KLQkJaWYgKGVyciA9PSAtRUJVU1kpIHsKKwkJaWYgKCFzdWNjZXNzICYmIChlcnIgPT0gLUVCVVNZIHx8IGVyciA+PSAwKSkgewogCQkJLyogTm8gb3ZlcmZsb3cgcGxlYXNlICovCiAJCQlpZiAoZGF0YS0+dXBkYXRlX3RpbWVvdXRzIDwgMjU1dSkKIAkJCQlkYXRhLT51cGRhdGVfdGltZW91dHMrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwppbmRleCA1M2JiNDM1Li5kNjU4ZDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCkBAIC0yMDcsNyArMjA3LDggQEAKIAlzdHJ1Y3QgcG1hY19pMmNfYnVzICpidXMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQgPSBOVUxMOwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKLQljaGFyIG5hbWVbMzJdLCAqYmFzZW5hbWU7CisJY2hhciBuYW1lWzMyXTsKKwljb25zdCBjaGFyICpiYXNlbmFtZTsKIAlpbnQgcmM7CiAKIAlpZiAoYnVzID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYwppbmRleCBjZWQzMDlmLi5lYWU5ZTgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgUE9MTF9USU1FT1VUOwotCXdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgeworCXdoaWxlICgxKSB7CiAJCXN0YXR1cyA9IGluYihBQ0JTVCk7CiAKIAkJLyogUmVzZXQgdGhlIHN0YXR1cyByZWdpc3RlciB0byBhdm9pZCB0aGUgaGFuZyAqLwpAQCAtMjQyLDcgKzI0MiwxMCBAQAogCQkJc2N4MjAwX2FjYl9tYWNoaW5lKGlmYWNlLCBzdGF0dXMpOwogCQkJcmV0dXJuOwogCQl9Ci0JCXlpZWxkKCk7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKQorCQkJYnJlYWs7CisJCWNwdV9yZWxheCgpOworCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKIAlkZXZfZXJyKCZpZmFjZS0+YWRhcHRlci5kZXYsICJ0aW1lb3V0IGluIHN0YXRlICVzXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKaW5kZXggZTdlMjcwNC4uMGJlNmZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCkBAIC00MywxMyArNDMsMTIgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUJRFJJVkVSX1ZFUlNJT04JIjIgTWF5IDIwMDUiCi0jZGVmaW5lCURSSVZFUl9OQU1FCSh0cHM2NTAxMF9kcml2ZXIubmFtZSkKKyNkZWZpbmUJRFJJVkVSX05BTUUJKHRwczY1MDEwX2RyaXZlci5kcml2ZXIubmFtZSkKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJUUFM2NTAxeCBQb3dlciBNYW5hZ2VtZW50IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQ4LCAvKiAweDQ5LCAqLyBJMkNfQ0xJRU5UX0VORCB9Owotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNfcmFuZ2VbXSA9IHsgSTJDX0NMSUVOVF9FTkQgfTsKIAogSTJDX0NMSUVOVF9JTlNNT0Q7CiAKQEAgLTEwMCw3ICs5OSw3IEBACiAJLyogbm90IGN1cnJlbnRseSB0cmFja2luZyBHUElPIHN0YXRlICovCiB9OwogCi0jZGVmaW5lCVBPV0VSX1BPTExfREVMQVkJbXNlY3NfdG9famlmZmllcyg4MDApCisjZGVmaW5lCVBPV0VSX1BPTExfREVMQVkJbXNlY3NfdG9famlmZmllcyg1MDAwKQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC01MjAsOCArNTE5LDExIEBACiAJCWdvdG8gZmFpbDE7CiAJfQogCisJLyogdGhlIElSUSBpcyBhY3RpdmUgbG93LCBidXQgbWFueSBncGlvIGxpbmVzIGNhbid0IHN1cHBvcnQgdGhhdAorCSAqIHNvIHRoaXMgZHJpdmVyIGNhbiB1c2UgZmFsbGluZy1lZGdlIHRyaWdnZXJzIGluc3RlYWQuCisJICovCisJaXJxZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CiAjaWZkZWYJQ09ORklHX0FSTQotCWlycWZsYWdzID0gSVJRRl9TQU1QTEVfUkFORE9NIHwgSVJRRl9UUklHR0VSX0xPVzsKIAlpZiAobWFjaGluZV9pc19vbWFwX2gyKCkpIHsKIAkJdHBzLT5tb2RlbCA9IFRQUzY1MDEwOwogCQlvbWFwX2NmZ19yZWcoVzRfR1BJTzU4KTsKQEAgLTU0Myw4ICs1NDUsNiBAQAogCiAJCS8vIEZJWE1FIHNldCB1cCB0aGlzIGJvYXJkJ3MgSVJRIC4uLgogCX0KLSNlbHNlCi0JaXJxZmxhZ3MgPSBJUlFGX1NBTVBMRV9SQU5ET007CiAjZW5kaWYKIAogCWlmICh0cHMtPmlycSA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGQxMjY2ZmUyLi5iNmZiMTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWRlL0tjb25maWcKQEAgLTY4Miw2ICs2ODIsNyBAQAogY29uZmlnIEJMS19ERVZfU0dJSU9DNAogCXRyaXN0YXRlICJTaWxpY29uIEdyYXBoaWNzIElPQzQgY2hpcHNldCBBVEEvQVRBUEkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIChJQTY0X1NHSV9TTjIgfHwgSUE2NF9HRU5FUklDKSAmJiBTR0lfSU9DNAorCXNlbGVjdCBJREVQQ0lfU0hBUkVfSVJRCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgYWRkcyBQSU8gJiBNdWx0aU1vZGUgRE1BLTIgc3VwcG9ydCBmb3IgdGhlIFNHSSBJT0M0CiAJICBjaGlwc2V0LCB3aGljaCBoYXMgb25lIGNoYW5uZWwgYW5kIGNhbiBzdXBwb3J0IHR3byBkZXZpY2VzLgpAQCAtNzczLDIwICs3NzQsNiBAQAogCSAgdG8gdHJhbnNmZXIgZGF0YSB0byBhbmQgZnJvbSBtZW1vcnkuICBTYXlpbmcgWSBpcyBzYWZlIGFuZCBpbXByb3ZlcwogCSAgcGVyZm9ybWFuY2UuCiAKLWNvbmZpZyBCTEtfREVWX0lERV9QTUFDX0JMSU5LCi0JYm9vbCAiQmxpbmsgbGFwdG9wIExFRCBvbiBkcml2ZSBhY3Rpdml0eSAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBCTEtfREVWX0lERV9QTUFDICYmIEFEQl9QTVUKLQlzZWxlY3QgQURCX1BNVV9MRUQKLQlzZWxlY3QgTEVEU19UUklHR0VSUwotCXNlbGVjdCBMRURTX1RSSUdHRVJfSURFX0RJU0sKLQloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSB1c2Ugb2YgdGhlIHNsZWVwIExFRCBhcyBhIGhhcmQgZHJpdmUKLQkgIGFjdGl2aXR5IExFRC4KLQkgIFRoaXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIGl0IG9ubHkgc2VsZWN0cyBBREJfUE1VX0xFRCBhbmQKLQkgIExFRFNfVFJJR0dFUl9JREVfRElTSyBhbmQgY2hhbmdlcyB0aGUgY29kZSBpbiB0aGUgbmV3IGxlZCBjbGFzcwotCSAgZGV2aWNlIHRvIGRlZmF1bHQgdG8gdGhlIGlkZS1kaXNrIHRyaWdnZXIgKHdoaWNoIHNob3VsZCBiZSBzZXQKLQkgIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNmcykuCi0KIGNvbmZpZyBCTEtfREVWX0lERV9TV0FSTQogCXRyaXN0YXRlICJJREUgZm9yIFNpYnl0ZSBldmFsdWF0aW9uIGJvYXJkcyIKIAlkZXBlbmRzIG9uIFNJQllURV9TQjF4eHhfU09DCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwppbmRleCBmNzEyZTRjLi43Y2YzZWIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQkgKiBub3QgYXZhaWxhYmxlIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVjaGVjayB0aGF0LgogCQkgKi8KIAkJY2FwYWNpdHkgPSBpZGVkaXNrX2NhcGFjaXR5KGRyaXZlKTsKLQkJYmFycmllciA9IGlkZV9pZF9oYXNfZmx1c2hfY2FjaGUoaWQpICYmCisJCWJhcnJpZXIgPSBpZGVfaWRfaGFzX2ZsdXNoX2NhY2hlKGlkKSAmJiAhZHJpdmUtPm5vZmx1c2ggJiYKIAkJCShkcml2ZS0+YWRkcmVzc2luZyA9PSAwIHx8IGNhcGFjaXR5IDw9ICgxVUxMIDw8IDI4KSB8fAogCQkJIGlkZV9pZF9oYXNfZmx1c2hfY2FjaGVfZXh0KGlkKSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCA5ODkxOGZiLi43YzNhMTNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAkJCWdvdG8gYnVnX2RtYV9vZmY7CiAJCXByaW50aygiLCBETUEiKTsKIAl9IGVsc2UgaWYgKGlkLT5maWVsZF92YWxpZCAmIDEpIHsKLQkJcHJpbnRrKCIsIEJVRyIpOworCQlnb3RvIGJ1Z19kbWFfb2ZmOwogCX0KIAlyZXR1cm47CiBidWdfZG1hX29mZjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IDY1NzE2NTIuLjc3NzAzYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvbm1pLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtMTI0Myw2ICsxMjQ0LDcgQEAKIAkJaWYgKHN0YXQgPT0gMHhmZikKIAkJCXJldHVybiAtRU5PREVWOwogCQl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisJCXRvdWNoX25taV93YXRjaGRvZygpOwogCX0KIAlyZXR1cm4gLUVCVVNZOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKaW5kZXggYzEyZjFiNy4uNDFiNzRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCkBAIC0zNzYsNiArMzc2LDggQEAKIAkJCQlicmVhazsKIAkJY2FzZSBpZGVfZmxvcHB5Om1lZGlhID0gImZsb3BweVxuIjsKIAkJCQlicmVhazsKKwkJY2FzZSBpZGVfb3B0aWNhbDptZWRpYSA9ICJvcHRpY2FsXG4iOworCQkJCWJyZWFrOwogCQlkZWZhdWx0OgltZWRpYSA9ICJVTktOT1dOXG4iOwogCQkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS5jIGIvZHJpdmVycy9pZGUvaWRlLmMKaW5kZXggMDVmYmQ5Mi4uZGVmZDRiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLmMKQEAgLTE1MzksNyArMTUzOSw3IEBACiAJCWNvbnN0IGNoYXIgKmhkX3dvcmRzW10gPSB7CiAJCQkibm9uZSIsICJub3Byb2JlIiwgIm5vd2VyciIsICJjZHJvbSIsICJzZXJpYWxpemUiLAogCQkJImF1dG90dW5lIiwgIm5vYXV0b3R1bmUiLCAibWludXM4IiwgInN3YXBkYXRhIiwgImJzd2FwIiwKLQkJCSJtaW51czExIiwgInJlbWFwIiwgInJlbWFwNjMiLCAic2NzaSIsIE5VTEwgfTsKKwkJCSJub2ZsdXNoIiwgInJlbWFwIiwgInJlbWFwNjMiLCAic2NzaSIsIE5VTEwgfTsKIAkJdW5pdCA9IHNbMl0gLSAnYSc7CiAJCWh3ICAgPSB1bml0IC8gTUFYX0RSSVZFUzsKIAkJdW5pdCA9IHVuaXQgJSBNQVhfRFJJVkVTOwpAQCAtMTU3OCw2ICsxNTc4LDkgQEAKIAkJCWNhc2UgLTEwOiAvKiAiYnN3YXAiICovCiAJCQkJZHJpdmUtPmJzd2FwID0gMTsKIAkJCQlnb3RvIGRvbmU7CisJCQljYXNlIC0xMTogLyogbm9mbHVzaCAqLworCQkJCWRyaXZlLT5ub2ZsdXNoID0gMTsKKwkJCQlnb3RvIGRvbmU7CiAJCQljYXNlIC0xMjogLyogInJlbWFwIiAqLwogCQkJCWRyaXZlLT5yZW1hcF8wX3RvXzEgPSAxOwogCQkJCWdvdG8gZG9uZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvYWVjNjJ4eC5jCmluZGV4IGE3YzcyNWYuLmYyODYwNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9hZWM2Mnh4LmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2FlYzYyeHguYwpAQCAtNDI1LDEyICs0MjUsMTIgQEAKIAlyZXR1cm4gZC0+aW5pdF9zZXR1cChkZXYsIGQpOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVjNjJ4eF9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODUwVUYpLCAwIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODYwKSwgMSB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFIpLCAyIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVJUT1AsIFBDSV9ERVZJQ0VfSURfQVJUT1BfQVRQODY1KSwgMyB9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NVIpLCA0IH0sCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWVjNjJ4eF9wY2lfdGJsW10gPSB7CisJeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg1MFVGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MCwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MFIsICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NSwgICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAzIH0sCisJeyBQQ0lfVkVORE9SX0lEX0FSVE9QLCBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NVIsICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0IH0sCiAJeyAwLCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBhZWM2Mnh4X3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL2FsaW0xNXgzLmMgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwppbmRleCAzNTFkYWIyLi5kNDE5ZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvYWxpbTE1eDMuYwpAQCAtNzMwLDcgKzczMCw3IEBACiAJCiAJaWYobTUyMjlfcmV2aXNpb24gPD0gMHgyMCkKIAkJdG1wYnl0ZSA9ICh0bXBieXRlICYgKH4weDAyKSkgfCAweDAxOwotCWVsc2UgaWYgKG01MjI5X3JldmlzaW9uID09IDB4YzcpCisJZWxzZSBpZiAobTUyMjlfcmV2aXNpb24gPT0gMHhjNyB8fCBtNTIyOV9yZXZpc2lvbiA9PSAweGM4KQogCQl0bXBieXRlIHw9IDB4MDM7CiAJZWxzZQogCQl0bXBieXRlIHw9IDB4MDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jIGIvZHJpdmVycy9pZGUvcGNpL2dlbmVyaWMuYwppbmRleCAyZjk2MmNmLi43ODgxMGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9nZW5lcmljLmMKQEAgLTE4MCw2ICsxODAsMzYgQEAKIAkJLmNoYW5uZWxzCT0gMiwKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJfSx7CS8qIDE1ICovCisJCS5uYW1lCQk9ICJKTUIzNjEiLAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCisJCS5jaGFubmVscwk9IDIsCisJCS5hdXRvZG1hCT0gQVVUT0RNQSwKKwkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAorCX0sewkvKiAxNiAqLworCQkubmFtZQkJPSAiSk1CMzYzIiwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAorCQkuY2hhbm5lbHMJPSAyLAorCQkuYXV0b2RtYQk9IEFVVE9ETUEsCisJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKKwl9LHsJLyogMTcgKi8KKwkJLm5hbWUJCT0gIkpNQjM2NSIsCisJCS5pbml0X2h3aWYJPSBpbml0X2h3aWZfZ2VuZXJpYywKKwkJLmNoYW5uZWxzCT0gMiwKKwkJLmF1dG9kbWEJPSBBVVRPRE1BLAorCQkuYm9vdGFibGUJPSBPRkZfQk9BUkQsCisJfSx7CS8qIDE4ICovCisJCS5uYW1lCQk9ICJKTUIzNjYiLAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX2dlbmVyaWMsCisJCS5jaGFubmVscwk9IDIsCisJCS5hdXRvZG1hCT0gQVVUT0RNQSwKKwkJLmJvb3RhYmxlCT0gT0ZGX0JPQVJELAorCX0sewkvKiAxOSAqLworCQkubmFtZQkJPSAiSk1CMzY4IiwKKwkJLmluaXRfaHdpZgk9IGluaXRfaHdpZl9nZW5lcmljLAorCQkuY2hhbm5lbHMJPSAyLAorCQkuYXV0b2RtYQk9IEFVVE9ETUEsCisJCS5ib290YWJsZQk9IE9GRl9CT0FSRCwKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9wY2kvaXQ4MjF4LmMKaW5kZXggM2NiMDQ0Mi4uZTliYWQxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL2l0ODIxeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9pdDgyMXguYwpAQCAtNDk4LDkgKzQ5OCwxNCBAQAogewogCXU4IHNwZWVkCT0gaWRlX2RtYV9zcGVlZChkcml2ZSwgaXQ4MjF4X3JhdGVtYXNrKGRyaXZlKSk7CiAKLQljb25maWdfaXQ4MjF4X2NoaXBzZXRfZm9yX3Bpbyhkcml2ZSwgIXNwZWVkKTsKLQlpdDgyMXhfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7Ci0JcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKKwlpZiAoc3BlZWQpIHsKKwkJY29uZmlnX2l0ODIxeF9jaGlwc2V0X2Zvcl9waW8oZHJpdmUsIDApOworCQlpdDgyMXhfdHVuZV9jaGlwc2V0KGRyaXZlLCBzcGVlZCk7CisKKwkJcmV0dXJuIGlkZV9kbWFfZW5hYmxlKGRyaXZlKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IDAzNjc3YmYuLmYwNjNkOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zZXJ2ZXJ3b3Jrcy5jCkBAIC02NDksMTEgKzY0OSwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3Z3a3NfcGNpX3RibFtdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUpLCAwfSwKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFKSwgMX0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERSksIDJ9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyKSwgM30sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwSURFKSwgNH0sCisJeyBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAorCXsgUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I1SURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxfSwKKwl7IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMn0sCisJeyBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjZJREUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAzfSwKKwl7IFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwSURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCA0fSwKIAl7IDAsIH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHN2d2tzX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3BjaS9zZ2lpb2M0LmMKaW5kZXggZTEyNTAzMi4uZDhhMGQ4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3NnaWlvYzQuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2dpaW9jNC5jCkBAIC0zNjcsMTIgKzM2NywxMyBAQAogc3RhdGljIHZvaWQgX19kZXZpbml0CiBpZGVfZG1hX3NnaWlvYzQoaWRlX2h3aWZfdCAqIGh3aWYsIHVuc2lnbmVkIGxvbmcgZG1hX2Jhc2UpCiB7CisJdm9pZCBfX2lvbWVtICp2aXJ0X2RtYV9iYXNlOwogCWludCBudW1fcG9ydHMgPSBzaXplb2YgKGlvYzRfZG1hX3JlZ3NfdCk7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogQk0tRE1BIGF0IDB4JTA0bHgtMHglMDRseFxuIiwgaHdpZi0+bmFtZSwKIAkgICAgICAgZG1hX2Jhc2UsIGRtYV9iYXNlICsgbnVtX3BvcnRzIC0gMSk7CiAKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGRtYV9iYXNlLCBudW1fcG9ydHMsIGh3aWYtPm5hbWUpKSB7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oZG1hX2Jhc2UsIG51bV9wb3J0cywgaHdpZi0+bmFtZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiJXMoJXMpIC0tIEVSUk9SLCBBZGRyZXNzZXMgMHglcCB0byAweCVwICIKIAkJICAgICAgICJBTFJFQURZIGluIHVzZVxuIiwKQEAgLTM4MSwxMyArMzgyLDIxIEBACiAJCWdvdG8gZG1hX2FsbG9jX2ZhaWx1cmU7CiAJfQogCi0JaHdpZi0+ZG1hX2Jhc2UgPSBkbWFfYmFzZTsKKwl2aXJ0X2RtYV9iYXNlID0gaW9yZW1hcChkbWFfYmFzZSwgbnVtX3BvcnRzKTsKKwlpZiAodmlydF9kbWFfYmFzZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzKCVzKSAtLSBFUlJPUiwgVW5hYmxlIHRvIG1hcCBhZGRyZXNzZXMgMHglbHggdG8gMHglbHhcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGh3aWYtPm5hbWUsIGRtYV9iYXNlLCBkbWFfYmFzZSArIG51bV9wb3J0cyAtIDEpOworCQlnb3RvIGRtYV9yZW1hcF9mYWlsdXJlOworCX0KKwlod2lmLT5kbWFfYmFzZSA9ICh1bnNpZ25lZCBsb25nKSB2aXJ0X2RtYV9iYXNlOworCiAJaHdpZi0+ZG1hdGFibGVfY3B1ID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoaHdpZi0+cGNpX2RldiwKIAkJCQkJICBJT0M0X1BSRF9FTlRSSUVTICogSU9DNF9QUkRfQllURVMsCiAJCQkJCSAgJmh3aWYtPmRtYXRhYmxlX2RtYSk7CiAKIAlpZiAoIWh3aWYtPmRtYXRhYmxlX2NwdSkKLQkJZ290byBkbWFfYWxsb2NfZmFpbHVyZTsKKwkJZ290byBkbWFfcGNpX2FsbG9jX2ZhaWx1cmU7CiAKIAlod2lmLT5zZ19tYXhfbmVudHMgPSBJT0M0X1BSRF9FTlRSSUVTOwogCkBAIC00MTEsNiArNDIwLDEyIEBACiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiQ2hhbmdpbmcgZnJvbSBETUEgdG8gUElPIG1vZGUgZm9yIERyaXZlICVzXG4iLCBod2lmLT5uYW1lKTsKIAorZG1hX3BjaV9hbGxvY19mYWlsdXJlOgorCWlvdW5tYXAodmlydF9kbWFfYmFzZSk7CisKK2RtYV9yZW1hcF9mYWlsdXJlOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihkbWFfYmFzZSwgbnVtX3BvcnRzKTsKKwogZG1hX2FsbG9jX2ZhaWx1cmU6CiAJLyogRGlzYWJsZSBETUEgYmVjYXVzZSB3ZSBjb3VsZG5vdCBhbGxvY2F0ZSBhbnkgRE1BIG1hcHMgKi8KIAlod2lmLT5hdXRvZG1hID0gMDsKQEAgLTYwNywxOCArNjIyLDE1IEBACiAJaHdpZi0+aWRlX2RtYV9sb3N0aXJxID0gJnNnaWlvYzRfaWRlX2RtYV9sb3N0aXJxOwogCWh3aWYtPmlkZV9kbWFfdGltZW91dCA9ICZfX2lkZV9kbWFfdGltZW91dDsKIAotCS8qCi0JICogVGhlIElPQzQgdXNlcyBNTUlPIHJhdGhlciB0aGFuIFBvcnQgSU8uCi0JICogSXQgYWxzbyBuZWVkcyBzcGVjaWFsIHdvcmthcm91bmRzIGZvciBJTkIuCi0JICovCi0JZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKIAlod2lmLT5JTkIgPSAmc2dpaW9jNF9JTkI7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0CiBzZ2lpb2M0X2lkZV9zZXR1cF9wY2lfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGlkZV9wY2lfZGV2aWNlX3QgKiBkKQogewotCXVuc2lnbmVkIGxvbmcgYmFzZSwgY3RsLCBkbWFfYmFzZSwgaXJxcG9ydDsKKwl1bnNpZ25lZCBsb25nIGNtZF9iYXNlLCBkbWFfYmFzZSwgaXJxcG9ydDsKKwl1bnNpZ25lZCBsb25nIGJhcjAsIGNtZF9waHlzX2Jhc2UsIGN0bDsKKwl2b2lkIF9faW9tZW0gKnZpcnRfYmFzZTsKIAlpZGVfaHdpZl90ICpod2lmOwogCWludCBoOwogCkBAIC02MzYsMjMgKzY0OCwzMiBAQAogCX0KIAogCS8qICBHZXQgdGhlIENtZEJsayBhbmQgQ3RybEJsayBCYXNlIFJlZ2lzdGVycyAqLwotCWJhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSArIElPQzRfQ01EX09GRlNFVDsKLQljdGwgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSArIElPQzRfQ1RSTF9PRkZTRVQ7Ci0JaXJxcG9ydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIDApICsgSU9DNF9JTlRSX09GRlNFVDsKKwliYXIwID0gcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCk7CisJdmlydF9iYXNlID0gaW9yZW1hcChiYXIwLCBwY2lfcmVzb3VyY2VfbGVuKGRldiwgMCkpOworCWlmICh2aXJ0X2Jhc2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBVbmFibGUgdG8gcmVtYXAgQkFSIDAgYWRkcmVzczogMHglbHhcbiIsCisJCQlkLT5uYW1lLCBiYXIwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWNtZF9iYXNlID0gKHVuc2lnbmVkIGxvbmcpIHZpcnRfYmFzZSArIElPQzRfQ01EX09GRlNFVDsKKwljdGwgPSAodW5zaWduZWQgbG9uZykgdmlydF9iYXNlICsgSU9DNF9DVFJMX09GRlNFVDsKKwlpcnFwb3J0ID0gKHVuc2lnbmVkIGxvbmcpIHZpcnRfYmFzZSArIElPQzRfSU5UUl9PRkZTRVQ7CiAJZG1hX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCAwKSArIElPQzRfRE1BX09GRlNFVDsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oYmFzZSwgSU9DNF9DTURfQ1RMX0JMS19TSVpFLCBod2lmLT5uYW1lKSkgeworCWNtZF9waHlzX2Jhc2UgPSBiYXIwICsgSU9DNF9DTURfT0ZGU0VUOworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGNtZF9waHlzX2Jhc2UsIElPQzRfQ01EX0NUTF9CTEtfU0laRSwKKwkgICAgaHdpZi0+bmFtZSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXMgOiAlcyAtLSBFUlJPUiwgUG9ydCBBZGRyZXNzZXMgIgorCQkJIiVzIDogJXMgLS0gRVJST1IsIEFkZHJlc3NlcyAiCiAJCQkiMHglcCB0byAweCVwIEFMUkVBRFkgaW4gdXNlXG4iLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBod2lmLT5uYW1lLCAodm9pZCAqKSBiYXNlLAotCQkgICAgICAgKHZvaWQgKikgYmFzZSArIElPQzRfQ01EX0NUTF9CTEtfU0laRSk7CisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGh3aWYtPm5hbWUsICh2b2lkICopIGNtZF9waHlzX2Jhc2UsCisJCSAgICAgICAodm9pZCAqKSBjbWRfcGh5c19iYXNlICsgSU9DNF9DTURfQ1RMX0JMS19TSVpFKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaWYgKGh3aWYtPmlvX3BvcnRzW0lERV9EQVRBX09GRlNFVF0gIT0gYmFzZSkgeworCWlmIChod2lmLT5pb19wb3J0c1tJREVfREFUQV9PRkZTRVRdICE9IGNtZF9iYXNlKSB7CiAJCS8qIEluaXRpYWxpemUgdGhlIElPIHJlZ2lzdGVycyAqLwotCQlzZ2lpb2M0X2luaXRfaHdpZl9wb3J0cygmaHdpZi0+aHcsIGJhc2UsIGN0bCwgaXJxcG9ydCk7CisJCXNnaWlvYzRfaW5pdF9od2lmX3BvcnRzKCZod2lmLT5odywgY21kX2Jhc2UsIGN0bCwgaXJxcG9ydCk7CiAJCW1lbWNweShod2lmLT5pb19wb3J0cywgaHdpZi0+aHcuaW9fcG9ydHMsCiAJCSAgICAgICBzaXplb2YgKGh3aWYtPmlvX3BvcnRzKSk7CiAJCWh3aWYtPm5vcHJvYmUgPSAhaHdpZi0+aW9fcG9ydHNbSURFX0RBVEFfT0ZGU0VUXTsKQEAgLTY2NSw2ICs2ODYsOSBAQAogCWh3aWYtPmNkcyA9IChzdHJ1Y3QgaWRlX3BjaV9kZXZpY2VfcyAqKSBkOwogCWh3aWYtPmdlbmRldi5wYXJlbnQgPSAmZGV2LT5kZXY7Lyogc2V0dXAgcHJvcGVyIGFuY2VzdHJhbCBpbmZvcm1hdGlvbiAqLwogCisJLyogVGhlIElPQzQgdXNlcyBNTUlPIHJhdGhlciB0aGFuIFBvcnQgSU8uICovCisJZGVmYXVsdF9od2lmX21taW9wcyhod2lmKTsKKwogCS8qIEluaXRpYWxpemluZyBjaGlwc2V0IElSUSBSZWdpc3RlcnMgKi8KIAlod2lmLT5PVVRMKDB4MDMsIGlycXBvcnQgKyBJT0M0X0lOVFJfU0VUICogNCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lpbWFnZS5jCmluZGV4IDI1Y2ViNGEuLjIwYjM5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpaW1hZ2UuYwpAQCAtMTA4MiwxMCArMTA4MiwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lpbWFnZV9wY2lfdGJsW10gPSB7Ci0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV82ODApLCAwfSwKKwl7IFBDSV9WRU5ET1JfSURfQ01ELCBQQ0lfREVWSUNFX0lEX1NJSV82ODAsICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVfU0FUQQotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NNRCwgUENJX0RFVklDRV9JRF9TSUlfMzExMiksIDF9LAotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0NNRCwgUENJX0RFVklDRV9JRF9TSUlfMTIxMFNBKSwgMn0sCisJeyBQQ0lfVkVORE9SX0lEX0NNRCwgUENJX0RFVklDRV9JRF9TSUlfMzExMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMX0sCisJeyBQQ0lfVkVORE9SX0lEX0NNRCwgUENJX0RFVklDRV9JRF9TSUlfMTIxMFNBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyfSwKICNlbmRpZgogCXsgMCwgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jIGIvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwppbmRleCA4YTZjMjNhLi5mMDMxOTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKQEAgLTg2LDYgKzg2LDggQEAKIAl1OCBjaGlwc2V0X2ZhbWlseTsKIAl1OCBmbGFnczsKIH0gU2lTSG9zdENoaXBJbmZvW10gPSB7CisJeyAiU2lTOTY4IiwJUENJX0RFVklDRV9JRF9TSV85NjgsCUFUQV8xMzMgIH0sCisJeyAiU2lTOTY2IiwJUENJX0RFVklDRV9JRF9TSV85NjYsCUFUQV8xMzMgIH0sCiAJeyAiU2lTOTY1IiwJUENJX0RFVklDRV9JRF9TSV85NjUsCUFUQV8xMzMgIH0sCiAJeyAiU2lTNzQ1IiwJUENJX0RFVklDRV9JRF9TSV83NDUsCUFUQV8xMDAgIH0sCiAJeyAiU2lTNzM1IiwJUENJX0RFVklDRV9JRF9TSV83MzUsCUFUQV8xMDAgIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMgYi9kcml2ZXJzL2lkZS9wY2kvdmlhODJjeHh4LmMKaW5kZXggYWZkYWVlMy4uOWI3NTg5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3ZpYTgyY3h4eC5jCisrKyBiL2RyaXZlcnMvaWRlL3BjaS92aWE4MmN4eHguYwpAQCAtNiw3ICs2LDcgQEAKICAqCiAgKiAgIHZ0ODJjNTc2LCB2dDgyYzU4NiwgdnQ4MmM1ODZhLCB2dDgyYzU4NmIsIHZ0ODJjNTk2YSwgdnQ4MmM1OTZiLAogICogICB2dDgyYzY4NiwgdnQ4MmM2ODZhLCB2dDgyYzY4NmIsIHZ0ODIzMSwgdnQ4MjMzLCB2dDgyMzNjLCB2dDgyMzNhLAotICogICB2dDgyMzUsIHZ0ODIzNworICogICB2dDgyMzUsIHZ0ODIzNywgdnQ4MjM3YQogICoKICAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIFZvanRlY2ggUGF2bGlrCiAgKgpAQCAtODEsNiArODEsNyBAQAogCXsgInZ0NjQxMCIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODI1MSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyNTEsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBWSUFfVURNQV8xMzMgfCBWSUFfQkFEX0FTVCB9LAorCXsgInZ0ODIzN2EiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QSwgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyMzUiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM1LCAgICAgMHgwMCwgMHgyZiwgVklBX1VETUFfMTMzIHwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyMzNhIiwJUENJX0RFVklDRV9JRF9WSUFfODIzM0EsICAgIDB4MDAsIDB4MmYsIFZJQV9VRE1BXzEzMyB8IFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjMzYyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzNDXzAsICAweDAwLCAweDJmLCBWSUFfVURNQV8xMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMgYi9kcml2ZXJzL2lkZS9wcGMvcG1hYy5jCmluZGV4IGViZjk2MWYuLjk5NmM2OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BwYy9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcHBjL3BtYWMuYwpAQCAtMTE1NCw3ICsxMTU0LDcgQEAKIHBtYWNfaWRlX3NldHVwX2RldmljZShwbWFjX2lkZV9od2lmX3QgKnBtaWYsIGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCA9IHBtaWYtPm5vZGU7Ci0JaW50ICpiaWRwOworCWNvbnN0IGludCAqYmlkcDsKIAogCXBtaWYtPmNhYmxlXzgwID0gMDsKIAlwbWlmLT5icm9rZW5fZG1hID0gcG1pZi0+YnJva2VuX2RtYV93YXJuID0gMDsKQEAgLTExNzYsMTQgKzExNzYsMTQgQEAKIAkJcG1pZi0+YnJva2VuX2RtYSA9IDE7CiAJfQogCi0JYmlkcCA9IChpbnQgKilnZXRfcHJvcGVydHkobnAsICJBQVBMLGJ1cy1pZCIsIE5VTEwpOworCWJpZHAgPSBnZXRfcHJvcGVydHkobnAsICJBQVBMLGJ1cy1pZCIsIE5VTEwpOwogCXBtaWYtPmFhcGxfYnVzX2lkID0gIGJpZHAgPyAqYmlkcCA6IDA7CiAKIAkvKiBHZXQgY2FibGUgdHlwZSBmcm9tIGRldmljZS10cmVlICovCiAJaWYgKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0IHx8IHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl91bl9hdGE2CiAJICAgIHx8IHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rMl9hdGE2CiAJICAgIHx8IHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9zaF9hdGE2KSB7Ci0JCWNoYXIqIGNhYmxlID0gZ2V0X3Byb3BlcnR5KG5wLCAiY2FibGUtdHlwZSIsIE5VTEwpOworCQljb25zdCBjaGFyKiBjYWJsZSA9IGdldF9wcm9wZXJ0eShucCwgImNhYmxlLXR5cGUiLCBOVUxMKTsKIAkJaWYgKGNhYmxlICYmICFzdHJuY21wKGNhYmxlLCAiODAtIiwgMykpCiAJCQlwbWlmLT5jYWJsZV84MCA9IDE7CiAJfQpAQCAtMTMyNiw3ICsxMzI2LDcgQEAKIAlpZiAobWFjaW9faXJxX2NvdW50KG1kZXYpID09IDApIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlJWQ6IG5vIGludHJzIGZvciBkZXZpY2UgJXMsIHVzaW5nIDEzXG4iLAogCQkJaSwgbWRldi0+b2ZkZXYubm9kZS0+ZnVsbF9uYW1lKTsKLQkJaXJxID0gMTM7CisJCWlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhOVUxMLCAxMyk7CiAJfSBlbHNlCiAJCWlycSA9IG1hY2lvX2lycShtZGV2LCAwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCmluZGV4IGQ0YmFkNjcuLjQ0OGRmMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKQEAgLTM1NTIsNiArMzU1Miw4IEBACiAKIHN0YXRpYyBpbnQgb2hjaTEzOTRfcGNpX3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKICNpZmRlZiBDT05GSUdfUFBDX1BNQUMKIAlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykpIHsKIAkJc3RydWN0IGRldmljZV9ub2RlICpvZl9ub2RlOwpAQCAtMzU2Myw4ICszNTY1LDYgQEAKIAl9CiAjZW5kaWYKIAotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5jIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKaW5kZXggYWFhNzRmMi4uYjA4NzU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMKQEAgLTI1MTUsNiArMjUxNSw5IEBACiAJCXNkZXYtPnNraXBfbXNfcGFnZV84ID0gMTsKIAlpZiAoc2NzaV9pZC0+d29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfRklYX0NBUEFDSVRZKQogCQlzZGV2LT5maXhfY2FwYWNpdHkgPSAxOworCWlmIChzY3NpX2lkLT5uZS0+Z3VpZF92ZW5kb3JfaWQgPT0gMHgwMDEwYjkgJiYgLyogTWF4dG9yJ3MgT1VJICovCisJICAgIChzZGV2LT50eXBlID09IFRZUEVfRElTSyB8fCBzZGV2LT50eXBlID09IFRZUEVfUkJDKSkKKwkJc2Rldi0+YWxsb3dfcmVzdGFydCA9IDE7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcKaW5kZXggNjlhNTNkNC4uOWVkZmFjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL0tjb25maWcKQEAgLTE0LDcgKzE0LDcgQEAKIAktLS1oZWxwLS0tCiAJICBVc2Vyc3BhY2UgSW5maW5pQmFuZCBNYW5hZ2VtZW50IERhdGFncmFtIChNQUQpIHN1cHBvcnQuICBUaGlzCiAJICBpcyB0aGUga2VybmVsIHNpZGUgb2YgdGhlIHVzZXJzcGFjZSBNQUQgc3VwcG9ydCwgd2hpY2ggYWxsb3dzCi0JICB1c2Vyc3BhY2UgcHJvY2Vzc2VzIHRvIHNlbmQgYW5kIHJlY2VpdmUgTUFEcy4gWW91IHdpbGwgYWxzbyAKKwkgIHVzZXJzcGFjZSBwcm9jZXNzZXMgdG8gc2VuZCBhbmQgcmVjZWl2ZSBNQURzLiBZb3Ugd2lsbCBhbHNvCiAJICBuZWVkIGxpYmlidW1hZCBmcm9tIDxodHRwOi8vd3d3Lm9wZW5pYi5vcmc+LgogCiBjb25maWcgSU5GSU5JQkFORF9VU0VSX0FDQ0VTUwpAQCAtMzYsNiArMzYsOCBAQAogCiBzb3VyY2UgImRyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9LY29uZmlnIgogc291cmNlICJkcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvS2NvbmZpZyIKK3NvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvTWFrZWZpbGUKaW5kZXggYzdmZjU4Yy4uMmI1ZDEwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9NYWtlZmlsZQpAQCAtMSw2ICsxLDggQEAKIG9iai0kKENPTkZJR19JTkZJTklCQU5EKQkJKz0gY29yZS8KIG9iai0kKENPTkZJR19JTkZJTklCQU5EX01USENBKQkJKz0gaHcvbXRoY2EvCi1vYmotJChDT05GSUdfSVBBVEhfQ09SRSkJCSs9IGh3L2lwYXRoLworb2JqLSQoQ09ORklHX0lORklOSUJBTkRfSVBBVEgpCQkrPSBody9pcGF0aC8KK29iai0kKENPTkZJR19JTkZJTklCQU5EX0VIQ0EpCQkrPSBody9laGNhLworb2JqLSQoQ09ORklHX0lORklOSUJBTkRfQU1TTzExMDApCSs9IGh3L2Ftc28xMTAwLwogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfSVBPSUIpCQkrPSB1bHAvaXBvaWIvCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9TUlApCQkrPSB1bHAvc3JwLwogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfSVNFUikJCSs9IHVscC9pc2VyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZQppbmRleCA2OGU3M2VjLi4xNjNkOTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9NYWtlZmlsZQpAQCAtMSw3ICsxLDcgQEAKIGluZmluaWJhbmQtJChDT05GSUdfSU5GSU5JQkFORF9BRERSX1RSQU5TKQk6PSBpYl9hZGRyLm8gcmRtYV9jbS5vCiAKIG9iai0kKENPTkZJR19JTkZJTklCQU5EKSArPQkJaWJfY29yZS5vIGliX21hZC5vIGliX3NhLm8gXAotCQkJCQlpYl9jbS5vICQoaW5maW5pYmFuZC15KQorCQkJCQlpYl9jbS5vIGl3X2NtLm8gJChpbmZpbmliYW5kLXkpCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9VU0VSX01BRCkgKz0JaWJfdW1hZC5vCiBvYmotJChDT05GSUdfSU5GSU5JQkFORF9VU0VSX0FDQ0VTUykgKz0JaWJfdXZlcmJzLm8gaWJfdWNtLm8KIApAQCAtMTQsNiArMTQsOCBAQAogCiBpYl9jbS15IDo9CQkJY20ubwogCitpd19jbS15IDo9CQkJaXdjbS5vCisKIHJkbWFfY20teSA6PQkJCWNtYS5vCiAKIGliX2FkZHIteSA6PQkJCWFkZHIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCmluZGV4IGQyOTRiYmMuLjljYmYwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAjaW5jbHVkZSA8bmV0L25laWdoYm91ci5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRldmVudC5oPgogI2luY2x1ZGUgPHJkbWEvaWJfYWRkci5oPgogCiBNT0RVTEVfQVVUSE9SKCJTZWFuIEhlZnR5Iik7CkBAIC02MCwxMiArNjEsMTUgQEAKIHN0YXRpYyBERUNMQVJFX1dPUksod29yaywgcHJvY2Vzc19yZXEsIE5VTEwpOwogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICphZGRyX3dxOwogCi1zdGF0aWMgaW50IGNvcHlfYWRkcihzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCSAgICAgdW5zaWduZWQgY2hhciAqZHN0X2Rldl9hZGRyKQoraW50IHJkbWFfY29weV9hZGRyKHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkc3RfZGV2X2FkZHIpCiB7CiAJc3dpdGNoIChkZXYtPnR5cGUpIHsKIAljYXNlIEFSUEhSRF9JTkZJTklCQU5EOgotCQlkZXZfYWRkci0+ZGV2X3R5cGUgPSBJQl9OT0RFX0NBOworCQlkZXZfYWRkci0+ZGV2X3R5cGUgPSBSRE1BX05PREVfSUJfQ0E7CisJCWJyZWFrOworCWNhc2UgQVJQSFJEX0VUSEVSOgorCQlkZXZfYWRkci0+ZGV2X3R5cGUgPSBSRE1BX05PREVfUk5JQzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwpAQCAtNzcsNiArODEsNyBAQAogCQltZW1jcHkoZGV2X2FkZHItPmRzdF9kZXZfYWRkciwgZHN0X2Rldl9hZGRyLCBNQVhfQUREUl9MRU4pOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChyZG1hX2NvcHlfYWRkcik7CiAKIGludCByZG1hX3RyYW5zbGF0ZV9pcChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCByZG1hX2Rldl9hZGRyICpkZXZfYWRkcikKIHsKQEAgLTg4LDcgKzkzLDcgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCi0JcmV0ID0gY29weV9hZGRyKGRldl9hZGRyLCBkZXYsIE5VTEwpOworCXJldCA9IHJkbWFfY29weV9hZGRyKGRldl9hZGRyLCBkZXYsIE5VTEwpOwogCWRldl9wdXQoZGV2KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTYwLDcgKzE2NSw3IEBACiAKIAkvKiBJZiB0aGUgZGV2aWNlIGRvZXMgQVJQIGludGVybmFsbHksIHJldHVybiAnZG9uZScgKi8KIAlpZiAocnQtPmlkZXYtPmRldi0+ZmxhZ3MgJiBJRkZfTk9BUlApIHsKLQkJY29weV9hZGRyKGFkZHIsIHJ0LT5pZGV2LT5kZXYsIE5VTEwpOworCQlyZG1hX2NvcHlfYWRkcihhZGRyLCBydC0+aWRldi0+ZGV2LCBOVUxMKTsKIAkJZ290byBwdXQ7CiAJfQogCkBAIC0xODAsNyArMTg1LDcgQEAKIAkJc3JjX2luLT5zaW5fYWRkci5zX2FkZHIgPSBydC0+cnRfc3JjOwogCX0KIAotCXJldCA9IGNvcHlfYWRkcihhZGRyLCBuZWlnaC0+ZGV2LCBuZWlnaC0+aGEpOworCXJldCA9IHJkbWFfY29weV9hZGRyKGFkZHIsIG5laWdoLT5kZXYsIG5laWdoLT5oYSk7CiByZWxlYXNlOgogCW5laWdoX3JlbGVhc2UobmVpZ2gpOwogcHV0OgpAQCAtMjQ0LDcgKzI0OSw3IEBACiAJaWYgKFpFUk9ORVQoc3JjX2lwKSkgewogCQlzcmNfaW4tPnNpbl9mYW1pbHkgPSBkc3RfaW4tPnNpbl9mYW1pbHk7CiAJCXNyY19pbi0+c2luX2FkZHIuc19hZGRyID0gZHN0X2lwOwotCQlyZXQgPSBjb3B5X2FkZHIoYWRkciwgZGV2LCBkZXYtPmRldl9hZGRyKTsKKwkJcmV0ID0gcmRtYV9jb3B5X2FkZHIoYWRkciwgZGV2LCBkZXYtPmRldl9hZGRyKTsKIAl9IGVsc2UgaWYgKExPT1BCQUNLKHNyY19pcCkpIHsKIAkJcmV0ID0gcmRtYV90cmFuc2xhdGVfaXAoKHN0cnVjdCBzb2NrYWRkciAqKWRzdF9pbiwgYWRkcik7CiAJCWlmICghcmV0KQpAQCAtMzI2LDI1ICszMzEsMjIgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmRtYV9hZGRyX2NhbmNlbCk7CiAKLXN0YXRpYyBpbnQgYWRkcl9hcnBfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJIHN0cnVjdCBwYWNrZXRfdHlwZSAqcGt0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCitzdGF0aWMgaW50IG5ldGV2ZW50X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwgdW5zaWduZWQgbG9uZyBldmVudCwKKwl2b2lkICpjdHgpCiB7Ci0Jc3RydWN0IGFycGhkciAqYXJwX2hkcjsKKwlpZiAoZXZlbnQgPT0gTkVURVZFTlRfTkVJR0hfVVBEQVRFKSB7CisJCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoID0gY3R4OwogCi0JYXJwX2hkciA9IChzdHJ1Y3QgYXJwaGRyICopIHNrYi0+bmgucmF3OwotCi0JaWYgKGFycF9oZHItPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpIHx8Ci0JICAgIGFycF9oZHItPmFyX29wID09IGh0b25zKEFSUE9QX1JFUExZKSkKLQkJc2V0X3RpbWVvdXQoamlmZmllcyk7Ci0KLQlrZnJlZV9za2Ioc2tiKTsKKwkJaWYgKG5laWdoLT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lORklOSUJBTkQgJiYKKwkJICAgIChuZWlnaC0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSkgeworCQkJc2V0X3RpbWVvdXQoamlmZmllcyk7CisJCX0KKwl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGFja2V0X3R5cGUgYWRkcl9hcnAgPSB7Ci0JLnR5cGUgICAgICAgICAgID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApLAotCS5mdW5jICAgICAgICAgICA9IGFkZHJfYXJwX3JlY3YsCi0JLmFmX3BhY2tldF9wcml2ID0gKHZvaWQqKSAxLAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBuYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IG5ldGV2ZW50X2NhbGxiYWNrCiB9OwogCiBzdGF0aWMgaW50IGFkZHJfaW5pdCh2b2lkKQpAQCAtMzUzLDEzICszNTUsMTMgQEAKIAlpZiAoIWFkZHJfd3EpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2X2FkZF9wYWNrKCZhZGRyX2FycCk7CisJcmVnaXN0ZXJfbmV0ZXZlbnRfbm90aWZpZXIoJm5iKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgYWRkcl9jbGVhbnVwKHZvaWQpCiB7Ci0JZGV2X3JlbW92ZV9wYWNrKCZhZGRyX2FycCk7CisJdW5yZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcigmbmIpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGFkZHJfd3EpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY2FjaGUuYwppbmRleCBlMDVjYTJjLi4yMGU5ZjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jYWNoZS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NhY2hlLmMKQEAgLTYyLDEyICs2MiwxMyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzdGFydF9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKLQlyZXR1cm4gZGV2aWNlLT5ub2RlX3R5cGUgPT0gSUJfTk9ERV9TV0lUQ0ggPyAwIDogMTsKKwlyZXR1cm4gKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpID8gMCA6IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGVuZF9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKIHsKLQlyZXR1cm4gZGV2aWNlLT5ub2RlX3R5cGUgPT0gSUJfTk9ERV9TV0lUQ0ggPyAwIDogZGV2aWNlLT5waHlzX3BvcnRfY250OworCXJldHVybiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gUkRNQV9OT0RFX0lCX1NXSVRDSCkgPworCQkwIDogZGV2aWNlLT5waHlzX3BvcnRfY250OwogfQogCiBpbnQgaWJfZ2V0X2NhY2hlZF9naWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLApAQCAtMzAxLDcgKzMwMiw4IEBACiAJICAgIGV2ZW50LT5ldmVudCA9PSBJQl9FVkVOVF9QT1JUX0FDVElWRSB8fAogCSAgICBldmVudC0+ZXZlbnQgPT0gSUJfRVZFTlRfTElEX0NIQU5HRSAgfHwKIAkgICAgZXZlbnQtPmV2ZW50ID09IElCX0VWRU5UX1BLRVlfQ0hBTkdFIHx8Ci0JICAgIGV2ZW50LT5ldmVudCA9PSBJQl9FVkVOVF9TTV9DSEFOR0UpIHsKKwkgICAgZXZlbnQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSAgIHx8CisJICAgIGV2ZW50LT5ldmVudCA9PSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUikgewogCQl3b3JrID0ga21hbGxvYyhzaXplb2YgKndvcmssIEdGUF9BVE9NSUMpOwogCQlpZiAod29yaykgewogCQkJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBpYl9jYWNoZV90YXNrLCB3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCmluZGV4IGY4NWM5N2YuLmYzNWZjYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA1IFZvbHRhaXJlIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoYykgMjAwNSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTczLDYgKzc0LDcgQEAKIAlzdHJ1Y3QgcmJfcm9vdCByZW1vdGVfaWRfdGFibGU7CiAJc3RydWN0IHJiX3Jvb3QgcmVtb3RlX3NpZHJfdGFibGU7CiAJc3RydWN0IGlkciBsb2NhbF9pZF90YWJsZTsKKwlfX2JlMzIgcmFuZG9tX2lkX29wZXJhbmQ7CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndxOwogfSBjbTsKIApAQCAtMTc3LDcgKzE3OSw3IEBACiAJaWYgKElTX0VSUihhaCkpCiAJCXJldHVybiBQVFJfRVJSKGFoKTsKIAotCW0gPSBpYl9jcmVhdGVfc2VuZF9tYWQobWFkX2FnZW50LCBjbV9pZF9wcml2LT5pZC5yZW1vdGVfY21fcXBuLCAKKwltID0gaWJfY3JlYXRlX3NlbmRfbWFkKG1hZF9hZ2VudCwgY21faWRfcHJpdi0+aWQucmVtb3RlX2NtX3FwbiwKIAkJCSAgICAgICBjbV9pZF9wcml2LT5hdi5wa2V5X2luZGV4LAogCQkJICAgICAgIDAsIElCX01HTVRfTUFEX0hEUiwgSUJfTUdNVF9NQURfREFUQSwKIAkJCSAgICAgICBHRlBfQVRPTUlDKTsKQEAgLTI5OSwxNSArMzAxLDE3IEBACiBzdGF0aWMgaW50IGNtX2FsbG9jX2lkKHN0cnVjdCBjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBpZDsKIAlzdGF0aWMgaW50IG5leHRfaWQ7CiAKIAlkbyB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZjbS5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IGlkcl9nZXRfbmV3X2Fib3ZlKCZjbS5sb2NhbF9pZF90YWJsZSwgY21faWRfcHJpdiwgbmV4dF9pZCsrLAotCQkJCQkoX19mb3JjZSBpbnQgKikgJmNtX2lkX3ByaXYtPmlkLmxvY2FsX2lkKTsKKwkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmNtLmxvY2FsX2lkX3RhYmxlLCBjbV9pZF9wcml2LAorCQkJCQluZXh0X2lkKyssICZpZCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtLmxvY2ssIGZsYWdzKTsKIAl9IHdoaWxlKCAocmV0ID09IC1FQUdBSU4pICYmIGlkcl9wcmVfZ2V0KCZjbS5sb2NhbF9pZF90YWJsZSwgR0ZQX0tFUk5FTCkgKTsKKworCWNtX2lkX3ByaXYtPmlkLmxvY2FsX2lkID0gKF9fZm9yY2UgX19iZTMyKSAoaWQgXiBjbS5yYW5kb21faWRfb3BlcmFuZCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzE2LDcgKzMyMCw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjbS5sb2NrLCBmbGFncyk7Ci0JaWRyX3JlbW92ZSgmY20ubG9jYWxfaWRfdGFibGUsIChfX2ZvcmNlIGludCkgbG9jYWxfaWQpOworCWlkcl9yZW1vdmUoJmNtLmxvY2FsX2lkX3RhYmxlLAorCQkgICAoX19mb3JjZSBpbnQpIChsb2NhbF9pZCBeIGNtLnJhbmRvbV9pZF9vcGVyYW5kKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY20ubG9jaywgZmxhZ3MpOwogfQogCkBAIC0zMjQsNyArMzI5LDggQEAKIHsKIAlzdHJ1Y3QgY21faWRfcHJpdmF0ZSAqY21faWRfcHJpdjsKIAotCWNtX2lkX3ByaXYgPSBpZHJfZmluZCgmY20ubG9jYWxfaWRfdGFibGUsIChfX2ZvcmNlIGludCkgbG9jYWxfaWQpOworCWNtX2lkX3ByaXYgPSBpZHJfZmluZCgmY20ubG9jYWxfaWRfdGFibGUsCisJCQkgICAgICAoX19mb3JjZSBpbnQpIChsb2NhbF9pZCBeIGNtLnJhbmRvbV9pZF9vcGVyYW5kKSk7CiAJaWYgKGNtX2lkX3ByaXYpIHsKIAkJaWYgKGNtX2lkX3ByaXYtPmlkLnJlbW90ZV9pZCA9PSByZW1vdGVfaWQpCiAJCQlhdG9taWNfaW5jKCZjbV9pZF9wcml2LT5yZWZjb3VudCk7CkBAIC02NzksNiArNjg1LDggQEAKIHsKIAlpbnQgd2FpdF90aW1lOwogCisJY21fY2xlYW51cF90aW1ld2FpdChjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKTsKKwogCS8qCiAJICogVGhlIGNtX2lkIGNvdWxkIGJlIGRlc3Ryb3llZCBieSB0aGUgdXNlciBiZWZvcmUgd2UgZXhpdCB0aW1ld2FpdC4KIAkgKiBUbyBwcm90ZWN0IGFnYWluc3QgdGhpcywgd2Ugc2VhcmNoIGZvciB0aGUgY21faWQgYWZ0ZXIgZXhpdGluZwpAQCAtOTc1LDggKzk4MywxMCBAQAogCiAJY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyA9IGNtX2NyZWF0ZV90aW1ld2FpdF9pbmZvKGNtX2lkX3ByaXYtPgogCQkJCQkJCSAgICBpZC5sb2NhbF9pZCk7Ci0JaWYgKElTX0VSUihjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKSkKKwlpZiAoSVNfRVJSKGNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8pKSB7CisJCXJldCA9IFBUUl9FUlIoY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyk7CiAJCWdvdG8gb3V0OworCX0KIAogCXJldCA9IGNtX2luaXRfYXZfYnlfcGF0aChwYXJhbS0+cHJpbWFyeV9wYXRoLCAmY21faWRfcHJpdi0+YXYpOwogCWlmIChyZXQpCkBAIC0xMzUyLDcgKzEzNjIsNyBAQAogCQkJCQkJCSAgICBpZC5sb2NhbF9pZCk7CiAJaWYgKElTX0VSUihjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKSkgewogCQlyZXQgPSBQVFJfRVJSKGNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8pOwotCQlnb3RvIGVycm9yMTsKKwkJZ290byBkZXN0cm95OwogCX0KIAljbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvLT53b3JrLnJlbW90ZV9pZCA9IHJlcV9tc2ctPmxvY2FsX2NvbW1faWQ7CiAJY21faWRfcHJpdi0+dGltZXdhaXRfaW5mby0+cmVtb3RlX2NhX2d1aWQgPSByZXFfbXNnLT5sb2NhbF9jYV9ndWlkOwpAQCAtMTM2MSw3ICsxMzcxLDggQEAKIAlsaXN0ZW5fY21faWRfcHJpdiA9IGNtX21hdGNoX3JlcSh3b3JrLCBjbV9pZF9wcml2KTsKIAlpZiAoIWxpc3Rlbl9jbV9pZF9wcml2KSB7CiAJCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyb3IyOworCQlrZnJlZShjbV9pZF9wcml2LT50aW1ld2FpdF9pbmZvKTsKKwkJZ290byBkZXN0cm95OwogCX0KIAogCWNtX2lkX3ByaXYtPmlkLmNtX2hhbmRsZXIgPSBsaXN0ZW5fY21faWRfcHJpdi0+aWQuY21faGFuZGxlcjsKQEAgLTEzNzEsMTIgKzEzODIsMjIgQEAKIAogCWNtX2Zvcm1hdF9wYXRoc19mcm9tX3JlcShyZXFfbXNnLCAmd29yay0+cGF0aFswXSwgJndvcmstPnBhdGhbMV0pOwogCXJldCA9IGNtX2luaXRfYXZfYnlfcGF0aCgmd29yay0+cGF0aFswXSwgJmNtX2lkX3ByaXYtPmF2KTsKLQlpZiAocmV0KQotCQlnb3RvIGVycm9yMzsKKwlpZiAocmV0KSB7CisJCWliX2dldF9jYWNoZWRfZ2lkKHdvcmstPnBvcnQtPmNtX2Rldi0+ZGV2aWNlLAorCQkJCSAgd29yay0+cG9ydC0+cG9ydF9udW0sIDAsICZ3b3JrLT5wYXRoWzBdLnNnaWQpOworCQlpYl9zZW5kX2NtX3JlaihjbV9pZCwgSUJfQ01fUkVKX0lOVkFMSURfR0lELAorCQkJICAgICAgICZ3b3JrLT5wYXRoWzBdLnNnaWQsIHNpemVvZiB3b3JrLT5wYXRoWzBdLnNnaWQsCisJCQkgICAgICAgTlVMTCwgMCk7CisJCWdvdG8gcmVqZWN0ZWQ7CisJfQogCWlmIChyZXFfbXNnLT5hbHRfbG9jYWxfbGlkKSB7CiAJCXJldCA9IGNtX2luaXRfYXZfYnlfcGF0aCgmd29yay0+cGF0aFsxXSwgJmNtX2lkX3ByaXYtPmFsdF9hdik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIGVycm9yMzsKKwkJaWYgKHJldCkgeworCQkJaWJfc2VuZF9jbV9yZWooY21faWQsIElCX0NNX1JFSl9JTlZBTElEX0FMVF9HSUQsCisJCQkJICAgICAgICZ3b3JrLT5wYXRoWzBdLnNnaWQsCisJCQkJICAgICAgIHNpemVvZiB3b3JrLT5wYXRoWzBdLnNnaWQsIE5VTEwsIDApOworCQkJZ290byByZWplY3RlZDsKKwkJfQogCX0KIAljbV9pZF9wcml2LT50aWQgPSByZXFfbXNnLT5oZHIudGlkOwogCWNtX2lkX3ByaXYtPnRpbWVvdXRfbXMgPSBjbV9jb252ZXJ0X3RvX21zKApAQCAtMTM5OCwxMiArMTQxOSwxMSBAQAogCWNtX2RlcmVmX2lkKGxpc3Rlbl9jbV9pZF9wcml2KTsKIAlyZXR1cm4gMDsKIAotZXJyb3IzOglhdG9taWNfZGVjKCZjbV9pZF9wcml2LT5yZWZjb3VudCk7CityZWplY3RlZDoKKwlhdG9taWNfZGVjKCZjbV9pZF9wcml2LT5yZWZjb3VudCk7CiAJY21fZGVyZWZfaWQobGlzdGVuX2NtX2lkX3ByaXYpOwotCWNtX2NsZWFudXBfdGltZXdhaXQoY21faWRfcHJpdi0+dGltZXdhaXRfaW5mbyk7Ci1lcnJvcjI6CWtmcmVlKGNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8pOwotCWNtX2lkX3ByaXYtPnRpbWV3YWl0X2luZm8gPSBOVUxMOwotZXJyb3IxOglpYl9kZXN0cm95X2NtX2lkKCZjbV9pZF9wcml2LT5pZCk7CitkZXN0cm95OgorCWliX2Rlc3Ryb3lfY21faWQoY21faWQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIwNzAsOCArMjA5MCw5IEBACiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbS5sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQljbV9pZF9wcml2ID0gaWRyX2ZpbmQoJmNtLmxvY2FsX2lkX3RhYmxlLAotCQkJCSAgICAgIChfX2ZvcmNlIGludCkgdGltZXdhaXRfaW5mby0+d29yay5sb2NhbF9pZCk7CisJCWNtX2lkX3ByaXYgPSBpZHJfZmluZCgmY20ubG9jYWxfaWRfdGFibGUsIChfX2ZvcmNlIGludCkKKwkJCQkgICAgICAodGltZXdhaXRfaW5mby0+d29yay5sb2NhbF9pZCBeCisJCQkJICAgICAgIGNtLnJhbmRvbV9pZF9vcGVyYW5kKSk7CiAJCWlmIChjbV9pZF9wcml2KSB7CiAJCQlpZiAoY21faWRfcHJpdi0+aWQucmVtb3RlX2lkID09IHJlbW90ZV9pZCkKIAkJCQlhdG9taWNfaW5jKCZjbV9pZF9wcml2LT5yZWZjb3VudCk7CkBAIC0zMTIzLDcgKzMxNDQsOCBAQAogCQlxcF9hdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUgfAogCQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOwogCQlpZiAoY21faWRfcHJpdi0+cmVzcG9uZGVyX3Jlc291cmNlcykKLQkJCXFwX2F0dHItPnFwX2FjY2Vzc19mbGFncyB8PSBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQ7CisJCQlxcF9hdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgfD0gSUJfQUNDRVNTX1JFTU9URV9SRUFEIHwKKwkJCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX0FUT01JQzsKIAkJcXBfYXR0ci0+cGtleV9pbmRleCA9IGNtX2lkX3ByaXYtPmF2LnBrZXlfaW5kZXg7CiAJCXFwX2F0dHItPnBvcnRfbnVtID0gY21faWRfcHJpdi0+YXYucG9ydC0+cG9ydF9udW07CiAJCXJldCA9IDA7CkBAIC0zMjYwLDYgKzMyODIsOSBAQAogCWludCByZXQ7CiAJdTggaTsKIAorCWlmIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChkZXZpY2UtPm5vZGVfdHlwZSkgIT0gUkRNQV9UUkFOU1BPUlRfSUIpCisJCXJldHVybjsKKwogCWNtX2RldiA9IGttYWxsb2Moc2l6ZW9mKCpjbV9kZXYpICsgc2l6ZW9mKCpwb3J0KSAqCiAJCQkgZGV2aWNlLT5waHlzX3BvcnRfY250LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNtX2RldikKQEAgLTMzNDcsNiArMzM3Miw3IEBACiAJY20ucmVtb3RlX3FwX3RhYmxlID0gUkJfUk9PVDsKIAljbS5yZW1vdGVfc2lkcl90YWJsZSA9IFJCX1JPT1Q7CiAJaWRyX2luaXQoJmNtLmxvY2FsX2lkX3RhYmxlKTsKKwlnZXRfcmFuZG9tX2J5dGVzKCZjbS5yYW5kb21faWRfb3BlcmFuZCwgc2l6ZW9mIGNtLnJhbmRvbV9pZF9vcGVyYW5kKTsKIAlpZHJfcHJlX2dldCgmY20ubG9jYWxfaWRfdGFibGUsIEdGUF9LRVJORUwpOwogCiAJY20ud3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJpYl9jbSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY21hLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwppbmRleCBkNmY5OWQ1Li4xMTc4YmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbWEuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogCiAjaW5jbHVkZSA8bmV0L3RjcC5oPgogCkBAIC00MywxMyArNDQsMTQgQEAKICNpbmNsdWRlIDxyZG1hL2liX2NhY2hlLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9jbS5oPgogI2luY2x1ZGUgPHJkbWEvaWJfc2EuaD4KKyNpbmNsdWRlIDxyZG1hL2l3X2NtLmg+CiAKIE1PRFVMRV9BVVRIT1IoIlNlYW4gSGVmdHkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiR2VuZXJpYyBSRE1BIENNIEFnZW50Iik7CiBNT0RVTEVfTElDRU5TRSgiRHVhbCBCU0QvR1BMIik7CiAKICNkZWZpbmUgQ01BX0NNX1JFU1BPTlNFX1RJTUVPVVQgMjAKLSNkZWZpbmUgQ01BX01BWF9DTV9SRVRSSUVTIDMKKyNkZWZpbmUgQ01BX01BWF9DTV9SRVRSSUVTIDE1CiAKIHN0YXRpYyB2b2lkIGNtYV9hZGRfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgdm9pZCBjbWFfcmVtb3ZlX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwpAQCAtNjAsNiArNjIsNyBAQAogCS5yZW1vdmUgPSBjbWFfcmVtb3ZlX29uZQogfTsKIAorc3RhdGljIHN0cnVjdCBpYl9zYV9jbGllbnQgc2FfY2xpZW50Owogc3RhdGljIExJU1RfSEVBRChkZXZfbGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKGxpc3Rlbl9hbnlfbGlzdCk7CiBzdGF0aWMgREVGSU5FX01VVEVYKGxvY2spOwpAQCAtMTI0LDYgKzEyNyw3IEBACiAJaW50CQkJcXVlcnlfaWQ7CiAJdW5pb24gewogCQlzdHJ1Y3QgaWJfY21faWQJKmliOworCQlzdHJ1Y3QgaXdfY21faWQJKml3OwogCX0gY21faWQ7CiAKIAl1MzIJCQlzZXFfbnVtOwpAQCAtMjU5LDE1ICsyNjMsMjQgQEAKIAlpZF9wcml2LT5jbWFfZGV2ID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBjbWFfYWNxdWlyZV9pYl9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKK3N0YXRpYyBpbnQgY21hX2FjcXVpcmVfZGV2KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCiB7CisJZW51bSByZG1hX25vZGVfdHlwZSBkZXZfdHlwZSA9IGlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIuZGV2X3R5cGU7CiAJc3RydWN0IGNtYV9kZXZpY2UgKmNtYV9kZXY7CiAJdW5pb24gaWJfZ2lkIGdpZDsKIAlpbnQgcmV0ID0gLUVOT0RFVjsKIAotCWliX2FkZHJfZ2V0X3NnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsICZnaWQpLAorCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoZGV2X3R5cGUpKSB7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJaWJfYWRkcl9nZXRfc2dpZCgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5kZXZfYWRkciwgJmdpZCk7CisJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCWl3X2FkZHJfZ2V0X3NnaWQoJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsICZnaWQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKLQltdXRleF9sb2NrKCZsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNtYV9kZXYsICZkZXZfbGlzdCwgbGlzdCkgewogCQlyZXQgPSBpYl9maW5kX2NhY2hlZF9naWQoY21hX2Rldi0+ZGV2aWNlLCAmZ2lkLAogCQkJCQkgJmlkX3ByaXYtPmlkLnBvcnRfbnVtLCBOVUxMKTsKQEAgLTI3NiwyMCArMjg5LDkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCW11dGV4X3VubG9jaygmbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjbWFfYWNxdWlyZV9kZXYoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKLXsKLQlzd2l0Y2ggKGlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIuZGV2X3R5cGUpIHsKLQljYXNlIElCX05PREVfQ0E6Ci0JCXJldHVybiBjbWFfYWNxdWlyZV9pYl9kZXYoaWRfcHJpdik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBjbWFfZGVyZWZfaWQoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdikKIHsKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaWRfcHJpdi0+cmVmY291bnQpKQpAQCAtMzQ3LDYgKzM0OSwxNiBAQAogCQkJCQkgIElCX1FQX1BLRVlfSU5ERVggfCBJQl9RUF9QT1JUKTsKIH0KIAorc3RhdGljIGludCBjbWFfaW5pdF9pd19xcChzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBzdHJ1Y3QgaWJfcXAgKnFwKQoreworCXN0cnVjdCBpYl9xcF9hdHRyIHFwX2F0dHI7CisKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX0lOSVQ7CisJcXBfYXR0ci5xcF9hY2Nlc3NfZmxhZ3MgPSBJQl9BQ0NFU1NfTE9DQUxfV1JJVEU7CisKKwlyZXR1cm4gaWJfbW9kaWZ5X3FwKHFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUgfCBJQl9RUF9BQ0NFU1NfRkxBR1MpOworfQorCiBpbnQgcmRtYV9jcmVhdGVfcXAoc3RydWN0IHJkbWFfY21faWQgKmlkLCBzdHJ1Y3QgaWJfcGQgKnBkLAogCQkgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICpxcF9pbml0X2F0dHIpCiB7CkBAIC0zNjIsMTAgKzM3NCwxMyBAQAogCWlmIChJU19FUlIocXApKQogCQlyZXR1cm4gUFRSX0VSUihxcCk7CiAKLQlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgewotCWNhc2UgSUJfTk9ERV9DQToKKwlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkpIHsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgogCQlyZXQgPSBjbWFfaW5pdF9pYl9xcChpZF9wcml2LCBxcCk7CiAJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCXJldCA9IGNtYV9pbml0X2l3X3FwKGlkX3ByaXYsIHFwKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT1NZUzsKIAkJYnJlYWs7CkBAIC00NTEsMTMgKzQ2NiwxNyBAQAogCWludCByZXQ7CiAKIAlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7Ci0Jc3dpdGNoIChpZF9wcml2LT5pZC5kZXZpY2UtPm5vZGVfdHlwZSkgewotCWNhc2UgSUJfTk9ERV9DQToKKwlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkX3ByaXYtPmlkLmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CiAJCXJldCA9IGliX2NtX2luaXRfcXBfYXR0cihpZF9wcml2LT5jbV9pZC5pYiwgcXBfYXR0ciwKIAkJCQkJIHFwX2F0dHJfbWFzayk7CiAJCWlmIChxcF9hdHRyLT5xcF9zdGF0ZSA9PSBJQl9RUFNfUlRSKQogCQkJcXBfYXR0ci0+cnFfcHNuID0gaWRfcHJpdi0+c2VxX251bTsKIAkJYnJlYWs7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKKwkJcmV0ID0gaXdfY21faW5pdF9xcF9hdHRyKGlkX3ByaXYtPmNtX2lkLml3LCBxcF9hdHRyLAorCQkJCQlxcF9hdHRyX21hc2spOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PU1lTOwogCQlicmVhazsKQEAgLTU5MCw4ICs2MDksOCBAQAogCiBzdGF0aWMgdm9pZCBjbWFfY2FuY2VsX3JvdXRlKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYpCiB7Ci0Jc3dpdGNoIChpZF9wcml2LT5pZC5kZXZpY2UtPm5vZGVfdHlwZSkgewotCWNhc2UgSUJfTk9ERV9DQToKKwlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkX3ByaXYtPmlkLmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CiAJCWlmIChpZF9wcml2LT5xdWVyeSkKIAkJCWliX3NhX2NhbmNlbF9xdWVyeShpZF9wcml2LT5xdWVyeV9pZCwgaWRfcHJpdi0+cXVlcnkpOwogCQlicmVhazsKQEAgLTYxMSwxMSArNjMwLDE1IEBACiAJY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOwogCiAJaWYgKGlkX3ByaXYtPmNtYV9kZXYpIHsKLQkJc3dpdGNoIChpZF9wcml2LT5pZC5kZXZpY2UtPm5vZGVfdHlwZSkgewotCQljYXNlIElCX05PREVfQ0E6Ci0JIAkJaWYgKGlkX3ByaXYtPmNtX2lkLmliICYmICFJU19FUlIoaWRfcHJpdi0+Y21faWQuaWIpKQorCQlzd2l0Y2ggKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGlkX3ByaXYtPmlkLmRldmljZS0+bm9kZV90eXBlKSkgeworCQljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgorCQkJaWYgKGlkX3ByaXYtPmNtX2lkLmliICYmICFJU19FUlIoaWRfcHJpdi0+Y21faWQuaWIpKQogCQkJCWliX2Rlc3Ryb3lfY21faWQoaWRfcHJpdi0+Y21faWQuaWIpOwogCQkJYnJlYWs7CisJCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCQlpZiAoaWRfcHJpdi0+Y21faWQuaXcgJiYgIUlTX0VSUihpZF9wcml2LT5jbV9pZC5pdykpCisJCQkJaXdfZGVzdHJveV9jbV9pZChpZF9wcml2LT5jbV9pZC5pdyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9CkBAIC02ODksMTkgKzcxMiwyNSBAQAogCXN0YXRlID0gY21hX2V4Y2goaWRfcHJpdiwgQ01BX0RFU1RST1lJTkcpOwogCWNtYV9jYW5jZWxfb3BlcmF0aW9uKGlkX3ByaXYsIHN0YXRlKTsKIAorCW11dGV4X2xvY2soJmxvY2spOwogCWlmIChpZF9wcml2LT5jbWFfZGV2KSB7Ci0JCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7Ci0JCWNhc2UgSUJfTk9ERV9DQToKLQkgCQlpZiAoaWRfcHJpdi0+Y21faWQuaWIgJiYgIUlTX0VSUihpZF9wcml2LT5jbV9pZC5pYikpCisJCW11dGV4X3VubG9jaygmbG9jayk7CisJCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCQljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgorCQkJaWYgKGlkX3ByaXYtPmNtX2lkLmliICYmICFJU19FUlIoaWRfcHJpdi0+Y21faWQuaWIpKQogCQkJCWliX2Rlc3Ryb3lfY21faWQoaWRfcHJpdi0+Y21faWQuaWIpOwogCQkJYnJlYWs7CisJCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCQlpZiAoaWRfcHJpdi0+Y21faWQuaXcgJiYgIUlTX0VSUihpZF9wcml2LT5jbV9pZC5pdykpCisJCQkJaXdfZGVzdHJveV9jbV9pZChpZF9wcml2LT5jbV9pZC5pdyk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWJyZWFrOwogCQl9Ci0JICAJbXV0ZXhfbG9jaygmbG9jayk7CisJCW11dGV4X2xvY2soJmxvY2spOwogCQljbWFfZGV0YWNoX2Zyb21fZGV2KGlkX3ByaXYpOwotCQltdXRleF91bmxvY2soJmxvY2spOwogCX0KKwltdXRleF91bmxvY2soJmxvY2spOwogCiAJY21hX3JlbGVhc2VfcG9ydChpZF9wcml2KTsKIAljbWFfZGVyZWZfaWQoaWRfcHJpdik7CkBAIC04NjksNyArODk4LDcgQEAKIAlpYl9hZGRyX3NldF9zZ2lkKCZydC0+YWRkci5kZXZfYWRkciwgJnJ0LT5wYXRoX3JlY1swXS5zZ2lkKTsKIAlpYl9hZGRyX3NldF9kZ2lkKCZydC0+YWRkci5kZXZfYWRkciwgJnJ0LT5wYXRoX3JlY1swXS5kZ2lkKTsKIAlpYl9hZGRyX3NldF9wa2V5KCZydC0+YWRkci5kZXZfYWRkciwgYmUxNl90b19jcHUocnQtPnBhdGhfcmVjWzBdLnBrZXkpKTsKLQlydC0+YWRkci5kZXZfYWRkci5kZXZfdHlwZSA9IElCX05PREVfQ0E7CisJcnQtPmFkZHIuZGV2X2FkZHIuZGV2X3R5cGUgPSBSRE1BX05PREVfSUJfQ0E7CiAKIAlpZF9wcml2ID0gY29udGFpbmVyX29mKGlkLCBzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlLCBpZCk7CiAJaWRfcHJpdi0+c3RhdGUgPSBDTUFfQ09OTkVDVDsKQEAgLTg5OCw3ICs5MjcsOSBAQAogCX0KIAogCWF0b21pY19pbmMoJmNvbm5faWQtPmRldl9yZW1vdmUpOwotCXJldCA9IGNtYV9hY3F1aXJlX2liX2Rldihjb25uX2lkKTsKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlyZXQgPSBjbWFfYWNxdWlyZV9kZXYoY29ubl9pZCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIAlpZiAocmV0KSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWNtYV9yZWxlYXNlX3JlbW92ZShjb25uX2lkKTsKQEAgLTk4Miw2ICsxMDEzLDEzMCBAQAogCX0KIH0KIAorc3RhdGljIGludCBjbWFfaXdfaGFuZGxlcihzdHJ1Y3QgaXdfY21faWQgKml3X2lkLCBzdHJ1Y3QgaXdfY21fZXZlbnQgKml3X2V2ZW50KQoreworCXN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYgPSBpd19pZC0+Y29udGV4dDsKKwllbnVtIHJkbWFfY21fZXZlbnRfdHlwZSBldmVudCA9IDA7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJaW50IHJldCA9IDA7CisKKwlhdG9taWNfaW5jKCZpZF9wcml2LT5kZXZfcmVtb3ZlKTsKKworCXN3aXRjaCAoaXdfZXZlbnQtPmV2ZW50KSB7CisJY2FzZSBJV19DTV9FVkVOVF9DTE9TRToKKwkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0RJU0NPTk5FQ1RFRDsKKwkJYnJlYWs7CisJY2FzZSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOgorCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLnNyY19hZGRyOworCQkqc2luID0gaXdfZXZlbnQtPmxvY2FsX2FkZHI7CisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuZHN0X2FkZHI7CisJCSpzaW4gPSBpd19ldmVudC0+cmVtb3RlX2FkZHI7CisJCWlmIChpd19ldmVudC0+c3RhdHVzKQorCQkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX1JFSkVDVEVEOworCQllbHNlCisJCQlldmVudCA9IFJETUFfQ01fRVZFTlRfRVNUQUJMSVNIRUQ7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6CisJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCX0KKworCXJldCA9IGNtYV9ub3RpZnlfdXNlcihpZF9wcml2LCBldmVudCwgaXdfZXZlbnQtPnN0YXR1cywKKwkJCSAgICAgIGl3X2V2ZW50LT5wcml2YXRlX2RhdGEsCisJCQkgICAgICBpd19ldmVudC0+cHJpdmF0ZV9kYXRhX2xlbik7CisJaWYgKHJldCkgeworCQkvKiBEZXN0cm95IHRoZSBDTSBJRCBieSByZXR1cm5pbmcgYSBub24temVybyB2YWx1ZS4gKi8KKwkJaWRfcHJpdi0+Y21faWQuaXcgPSBOVUxMOworCQljbWFfZXhjaChpZF9wcml2LCBDTUFfREVTVFJPWUlORyk7CisJCWNtYV9yZWxlYXNlX3JlbW92ZShpZF9wcml2KTsKKwkJcmRtYV9kZXN0cm95X2lkKCZpZF9wcml2LT5pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJY21hX3JlbGVhc2VfcmVtb3ZlKGlkX3ByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdfY29ubl9yZXFfaGFuZGxlcihzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLAorCQkJICAgICAgIHN0cnVjdCBpd19jbV9ldmVudCAqaXdfZXZlbnQpCit7CisJc3RydWN0IHJkbWFfY21faWQgKm5ld19jbV9pZDsKKwlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICpsaXN0ZW5faWQsICpjb25uX2lkOworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCWludCByZXQ7CisKKwlsaXN0ZW5faWQgPSBjbV9pZC0+Y29udGV4dDsKKwlhdG9taWNfaW5jKCZsaXN0ZW5faWQtPmRldl9yZW1vdmUpOworCWlmICghY21hX2NvbXAobGlzdGVuX2lkLCBDTUFfTElTVEVOKSkgeworCQlyZXQgPSAtRUNPTk5BQk9SVEVEOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBDcmVhdGUgYSBuZXcgUkRNQSBpZCBmb3IgdGhlIG5ldyBJVyBDTSBJRCAqLworCW5ld19jbV9pZCA9IHJkbWFfY3JlYXRlX2lkKGxpc3Rlbl9pZC0+aWQuZXZlbnRfaGFuZGxlciwKKwkJCQkgICBsaXN0ZW5faWQtPmlkLmNvbnRleHQsCisJCQkJICAgUkRNQV9QU19UQ1ApOworCWlmICghbmV3X2NtX2lkKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKwljb25uX2lkID0gY29udGFpbmVyX29mKG5ld19jbV9pZCwgc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSwgaWQpOworCWF0b21pY19pbmMoJmNvbm5faWQtPmRldl9yZW1vdmUpOworCWNvbm5faWQtPnN0YXRlID0gQ01BX0NPTk5FQ1Q7CisKKwlkZXYgPSBpcF9kZXZfZmluZChpd19ldmVudC0+bG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIpOworCWlmICghZGV2KSB7CisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZChuZXdfY21faWQpOworCQlnb3RvIG91dDsKKwl9CisJcmV0ID0gcmRtYV9jb3B5X2FkZHIoJmNvbm5faWQtPmlkLnJvdXRlLmFkZHIuZGV2X2FkZHIsIGRldiwgTlVMTCk7CisJaWYgKHJldCkgeworCQljbWFfcmVsZWFzZV9yZW1vdmUoY29ubl9pZCk7CisJCXJkbWFfZGVzdHJveV9pZChuZXdfY21faWQpOworCQlnb3RvIG91dDsKKwl9CisKKwltdXRleF9sb2NrKCZsb2NrKTsKKwlyZXQgPSBjbWFfYWNxdWlyZV9kZXYoY29ubl9pZCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlpZiAocmV0KSB7CisJCWNtYV9yZWxlYXNlX3JlbW92ZShjb25uX2lkKTsKKwkJcmRtYV9kZXN0cm95X2lkKG5ld19jbV9pZCk7CisJCWdvdG8gb3V0OworCX0KKworCWNvbm5faWQtPmNtX2lkLml3ID0gY21faWQ7CisJY21faWQtPmNvbnRleHQgPSBjb25uX2lkOworCWNtX2lkLT5jbV9oYW5kbGVyID0gY21hX2l3X2hhbmRsZXI7CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZuZXdfY21faWQtPnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJKnNpbiA9IGl3X2V2ZW50LT5sb2NhbF9hZGRyOworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJm5ld19jbV9pZC0+cm91dGUuYWRkci5kc3RfYWRkcjsKKwkqc2luID0gaXdfZXZlbnQtPnJlbW90ZV9hZGRyOworCisJcmV0ID0gY21hX25vdGlmeV91c2VyKGNvbm5faWQsIFJETUFfQ01fRVZFTlRfQ09OTkVDVF9SRVFVRVNULCAwLAorCQkJICAgICAgaXdfZXZlbnQtPnByaXZhdGVfZGF0YSwKKwkJCSAgICAgIGl3X2V2ZW50LT5wcml2YXRlX2RhdGFfbGVuKTsKKwlpZiAocmV0KSB7CisJCS8qIFVzZXIgd2FudHMgdG8gZGVzdHJveSB0aGUgQ00gSUQgKi8KKwkJY29ubl9pZC0+Y21faWQuaXcgPSBOVUxMOworCQljbWFfZXhjaChjb25uX2lkLCBDTUFfREVTVFJPWUlORyk7CisJCWNtYV9yZWxlYXNlX3JlbW92ZShjb25uX2lkKTsKKwkJcmRtYV9kZXN0cm95X2lkKCZjb25uX2lkLT5pZCk7CisJfQorCitvdXQ6CisJaWYgKGRldikKKwkJZGV2X3B1dChkZXYpOworCWNtYV9yZWxlYXNlX3JlbW92ZShsaXN0ZW5faWQpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgY21hX2liX2xpc3RlbihzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2KQogewogCXN0cnVjdCBpYl9jbV9jb21wYXJlX2RhdGEgY29tcGFyZV9kYXRhOwpAQCAtMTAxMSw2ICsxMTY2LDMwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBjbWFfaXdfbGlzdGVuKHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsIGludCBiYWNrbG9nKQoreworCWludCByZXQ7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwlpZF9wcml2LT5jbV9pZC5pdyA9IGl3X2NyZWF0ZV9jbV9pZChpZF9wcml2LT5pZC5kZXZpY2UsCisJCQkJCSAgICBpd19jb25uX3JlcV9oYW5kbGVyLAorCQkJCQkgICAgaWRfcHJpdik7CisJaWYgKElTX0VSUihpZF9wcml2LT5jbV9pZC5pdykpCisJCXJldHVybiBQVFJfRVJSKGlkX3ByaXYtPmNtX2lkLml3KTsKKworCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJaWRfcHJpdi0+Y21faWQuaXctPmxvY2FsX2FkZHIgPSAqc2luOworCisJcmV0ID0gaXdfY21fbGlzdGVuKGlkX3ByaXYtPmNtX2lkLml3LCBiYWNrbG9nKTsKKworCWlmIChyZXQpIHsKKwkJaXdfZGVzdHJveV9jbV9pZChpZF9wcml2LT5jbV9pZC5pdyk7CisJCWlkX3ByaXYtPmNtX2lkLml3ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IGNtYV9saXN0ZW5faGFuZGxlcihzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsCiAJCQkgICAgICBzdHJ1Y3QgcmRtYV9jbV9ldmVudCAqZXZlbnQpCiB7CkBAIC0xMDg3LDEyICsxMjY2LDE3IEBACiAKIAlpZF9wcml2LT5iYWNrbG9nID0gYmFja2xvZzsKIAlpZiAoaWQtPmRldmljZSkgewotCQlzd2l0Y2ggKGlkLT5kZXZpY2UtPm5vZGVfdHlwZSkgewotCQljYXNlIElCX05PREVfQ0E6CisJCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCQljYXNlIFJETUFfVFJBTlNQT1JUX0lCOgogCQkJcmV0ID0gY21hX2liX2xpc3RlbihpZF9wcml2KTsKIAkJCWlmIChyZXQpCiAJCQkJZ290byBlcnI7CiAJCQlicmVhazsKKwkJY2FzZSBSRE1BX1RSQU5TUE9SVF9JV0FSUDoKKwkJCXJldCA9IGNtYV9pd19saXN0ZW4oaWRfcHJpdiwgYmFja2xvZyk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXQgPSAtRU5PU1lTOwogCQkJZ290byBlcnI7CkBAIC0xMTQwLDcgKzEzMjQsNyBAQAogCXBhdGhfcmVjLnBrZXkgPSBjcHVfdG9fYmUxNihpYl9hZGRyX2dldF9wa2V5KGFkZHIpKTsKIAlwYXRoX3JlYy5udW1iX3BhdGggPSAxOwogCi0JaWRfcHJpdi0+cXVlcnlfaWQgPSBpYl9zYV9wYXRoX3JlY19nZXQoaWRfcHJpdi0+aWQuZGV2aWNlLAorCWlkX3ByaXYtPnF1ZXJ5X2lkID0gaWJfc2FfcGF0aF9yZWNfZ2V0KCZzYV9jbGllbnQsIGlkX3ByaXYtPmlkLmRldmljZSwKIAkJCQlpZF9wcml2LT5pZC5wb3J0X251bSwgJnBhdGhfcmVjLAogCQkJCUlCX1NBX1BBVEhfUkVDX0RHSUQgfCBJQl9TQV9QQVRIX1JFQ19TR0lEIHwKIAkJCQlJQl9TQV9QQVRIX1JFQ19QS0VZIHwgSUJfU0FfUEFUSF9SRUNfTlVNQl9QQVRILApAQCAtMTIzMSw2ICsxNDE1LDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHJkbWFfc2V0X2liX3BhdGhzKTsKIAorc3RhdGljIGludCBjbWFfcmVzb2x2ZV9pd19yb3V0ZShzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2LCBpbnQgdGltZW91dF9tcykKK3sKKwlzdHJ1Y3QgY21hX3dvcmsgKndvcms7CisKKwl3b3JrID0ga3phbGxvYyhzaXplb2YgKndvcmssIEdGUF9LRVJORUwpOworCWlmICghd29yaykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3b3JrLT5pZCA9IGlkX3ByaXY7CisJSU5JVF9XT1JLKCZ3b3JrLT53b3JrLCBjbWFfd29ya19oYW5kbGVyLCB3b3JrKTsKKwl3b3JrLT5vbGRfc3RhdGUgPSBDTUFfUk9VVEVfUVVFUlk7CisJd29yay0+bmV3X3N0YXRlID0gQ01BX1JPVVRFX1JFU09MVkVEOworCXdvcmstPmV2ZW50LmV2ZW50ID0gUkRNQV9DTV9FVkVOVF9ST1VURV9SRVNPTFZFRDsKKwlxdWV1ZV93b3JrKGNtYV93cSwgJndvcmstPndvcmspOworCXJldHVybiAwOworfQorCiBpbnQgcmRtYV9yZXNvbHZlX3JvdXRlKHN0cnVjdCByZG1hX2NtX2lkICppZCwgaW50IHRpbWVvdXRfbXMpCiB7CiAJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKQEAgLTEyNDEsMTAgKzE0NDIsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlhdG9taWNfaW5jKCZpZF9wcml2LT5yZWZjb3VudCk7Ci0Jc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKLQljYXNlIElCX05PREVfQ0E6CisJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKIAkJcmV0ID0gY21hX3Jlc29sdmVfaWJfcm91dGUoaWRfcHJpdiwgdGltZW91dF9tcyk7CiAJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCXJldCA9IGNtYV9yZXNvbHZlX2l3X3JvdXRlKGlkX3ByaXYsIHRpbWVvdXRfbXMpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PU1lTOwogCQlicmVhazsKQEAgLTEzMDksMTYgKzE1MTMsMjYgQEAKIAllbnVtIHJkbWFfY21fZXZlbnRfdHlwZSBldmVudDsKIAogCWF0b21pY19pbmMoJmlkX3ByaXYtPmRldl9yZW1vdmUpOwotCWlmICghaWRfcHJpdi0+Y21hX2RldiAmJiAhc3RhdHVzKQorCisJLyoKKwkgKiBHcmFiIG11dGV4IHRvIGJsb2NrIHJkbWFfZGVzdHJveV9pZCgpIGZyb20gcmVtb3ZpbmcgdGhlIGRldmljZSB3aGlsZQorCSAqIHdlJ3JlIHRyeWluZyB0byBhY3F1aXJlIGl0LgorCSAqLworCW11dGV4X2xvY2soJmxvY2spOworCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9RVUVSWSwgQ01BX0FERFJfUkVTT0xWRUQpKSB7CisJCW11dGV4X3VubG9jaygmbG9jayk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghc3RhdHVzICYmICFpZF9wcml2LT5jbWFfZGV2KQogCQlzdGF0dXMgPSBjbWFfYWNxdWlyZV9kZXYoaWRfcHJpdik7CisJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKIAogCWlmIChzdGF0dXMpIHsKLQkJaWYgKCFjbWFfY29tcF9leGNoKGlkX3ByaXYsIENNQV9BRERSX1FVRVJZLCBDTUFfQUREUl9CT1VORCkpCisJCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9SRVNPTFZFRCwgQ01BX0FERFJfQk9VTkQpKQogCQkJZ290byBvdXQ7CiAJCWV2ZW50ID0gUkRNQV9DTV9FVkVOVF9BRERSX0VSUk9SOwogCX0gZWxzZSB7Ci0JCWlmICghY21hX2NvbXBfZXhjaChpZF9wcml2LCBDTUFfQUREUl9RVUVSWSwgQ01BX0FERFJfUkVTT0xWRUQpKQotCQkJZ290byBvdXQ7CiAJCW1lbWNweSgmaWRfcHJpdi0+aWQucm91dGUuYWRkci5zcmNfYWRkciwgc3JjX2FkZHIsCiAJCSAgICAgICBpcF9hZGRyX3NpemUoc3JjX2FkZHIpKTsKIAkJZXZlbnQgPSBSRE1BX0NNX0VWRU5UX0FERFJfUkVTT0xWRUQ7CkBAIC0xNDkyLDcgKzE3MDYsNyBAQAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGN1cl9pZCwgbm9kZSwgJmJpbmRfbGlzdC0+b3duZXJzLCBub2RlKSB7CiAJCWlmIChjbWFfYW55X2FkZHIoJmN1cl9pZC0+aWQucm91dGUuYWRkci5zcmNfYWRkcikpCiAJCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7Ci0JCQorCiAJCWN1cl9zaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopICZjdXJfaWQtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHI7CiAJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBjdXJfc2luLT5zaW5fYWRkci5zX2FkZHIpCiAJCQlyZXR1cm4gLUVBRERSSU5VU0U7CkBAIC0xNTQyLDggKzE3NTYsMTEgQEAKIAogCWlmICghY21hX2FueV9hZGRyKGFkZHIpKSB7CiAJCXJldCA9IHJkbWFfdHJhbnNsYXRlX2lwKGFkZHIsICZpZC0+cm91dGUuYWRkci5kZXZfYWRkcik7Ci0JCWlmICghcmV0KQorCQlpZiAoIXJldCkgeworCQkJbXV0ZXhfbG9jaygmbG9jayk7CiAJCQlyZXQgPSBjbWFfYWNxdWlyZV9kZXYoaWRfcHJpdik7CisJCQltdXRleF91bmxvY2soJmxvY2spOworCQl9CiAJCWlmIChyZXQpCiAJCQlnb3RvIGVycjsKIAl9CkBAIC0xNjQ5LDYgKzE4NjYsNDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGNtYV9jb25uZWN0X2l3KHN0cnVjdCByZG1hX2lkX3ByaXZhdGUgKmlkX3ByaXYsCisJCQkgIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCit7CisJc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4qIHNpbjsKKwlpbnQgcmV0OworCXN0cnVjdCBpd19jbV9jb25uX3BhcmFtIGl3X3BhcmFtOworCisJY21faWQgPSBpd19jcmVhdGVfY21faWQoaWRfcHJpdi0+aWQuZGV2aWNlLCBjbWFfaXdfaGFuZGxlciwgaWRfcHJpdik7CisJaWYgKElTX0VSUihjbV9pZCkpIHsKKwkJcmV0ID0gUFRSX0VSUihjbV9pZCk7CisJCWdvdG8gb3V0OworCX0KKworCWlkX3ByaXYtPmNtX2lkLml3ID0gY21faWQ7CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luKikgJmlkX3ByaXYtPmlkLnJvdXRlLmFkZHIuc3JjX2FkZHI7CisJY21faWQtPmxvY2FsX2FkZHIgPSAqc2luOworCisJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiopICZpZF9wcml2LT5pZC5yb3V0ZS5hZGRyLmRzdF9hZGRyOworCWNtX2lkLT5yZW1vdGVfYWRkciA9ICpzaW47CisKKwlyZXQgPSBjbWFfbW9kaWZ5X3FwX3J0cigmaWRfcHJpdi0+aWQpOworCWlmIChyZXQpIHsKKwkJaXdfZGVzdHJveV9jbV9pZChjbV9pZCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaXdfcGFyYW0ub3JkID0gY29ubl9wYXJhbS0+aW5pdGlhdG9yX2RlcHRoOworCWl3X3BhcmFtLmlyZCA9IGNvbm5fcGFyYW0tPnJlc3BvbmRlcl9yZXNvdXJjZXM7CisJaXdfcGFyYW0ucHJpdmF0ZV9kYXRhID0gY29ubl9wYXJhbS0+cHJpdmF0ZV9kYXRhOworCWl3X3BhcmFtLnByaXZhdGVfZGF0YV9sZW4gPSBjb25uX3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuOworCWlmIChpZF9wcml2LT5pZC5xcCkKKwkJaXdfcGFyYW0ucXBuID0gaWRfcHJpdi0+cXBfbnVtOworCWVsc2UKKwkJaXdfcGFyYW0ucXBuID0gY29ubl9wYXJhbS0+cXBfbnVtOworCXJldCA9IGl3X2NtX2Nvbm5lY3QoY21faWQsICZpd19wYXJhbSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwogaW50IHJkbWFfY29ubmVjdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pCiB7CiAJc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdjsKQEAgLTE2NjQsMTAgKzE5MjIsMTMgQEAKIAkJaWRfcHJpdi0+c3JxID0gY29ubl9wYXJhbS0+c3JxOwogCX0KIAotCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7Ci0JY2FzZSBJQl9OT0RFX0NBOgorCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CiAJCXJldCA9IGNtYV9jb25uZWN0X2liKGlkX3ByaXYsIGNvbm5fcGFyYW0pOwogCQlicmVhazsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lXQVJQOgorCQlyZXQgPSBjbWFfY29ubmVjdF9pdyhpZF9wcml2LCBjb25uX3BhcmFtKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT1NZUzsKIAkJYnJlYWs7CkBAIC0xNzA4LDYgKzE5NjksMjggQEAKIAlyZXR1cm4gaWJfc2VuZF9jbV9yZXAoaWRfcHJpdi0+Y21faWQuaWIsICZyZXApOwogfQogCitzdGF0aWMgaW50IGNtYV9hY2NlcHRfaXcoc3RydWN0IHJkbWFfaWRfcHJpdmF0ZSAqaWRfcHJpdiwKKwkJICBzdHJ1Y3QgcmRtYV9jb25uX3BhcmFtICpjb25uX3BhcmFtKQoreworCXN0cnVjdCBpd19jbV9jb25uX3BhcmFtIGl3X3BhcmFtOworCWludCByZXQ7CisKKwlyZXQgPSBjbWFfbW9kaWZ5X3FwX3J0cigmaWRfcHJpdi0+aWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpd19wYXJhbS5vcmQgPSBjb25uX3BhcmFtLT5pbml0aWF0b3JfZGVwdGg7CisJaXdfcGFyYW0uaXJkID0gY29ubl9wYXJhbS0+cmVzcG9uZGVyX3Jlc291cmNlczsKKwlpd19wYXJhbS5wcml2YXRlX2RhdGEgPSBjb25uX3BhcmFtLT5wcml2YXRlX2RhdGE7CisJaXdfcGFyYW0ucHJpdmF0ZV9kYXRhX2xlbiA9IGNvbm5fcGFyYW0tPnByaXZhdGVfZGF0YV9sZW47CisJaWYgKGlkX3ByaXYtPmlkLnFwKSB7CisJCWl3X3BhcmFtLnFwbiA9IGlkX3ByaXYtPnFwX251bTsKKwl9IGVsc2UKKwkJaXdfcGFyYW0ucXBuID0gY29ubl9wYXJhbS0+cXBfbnVtOworCisJcmV0dXJuIGl3X2NtX2FjY2VwdChpZF9wcml2LT5jbV9pZC5pdywgJml3X3BhcmFtKTsKK30KKwogaW50IHJkbWFfYWNjZXB0KHN0cnVjdCByZG1hX2NtX2lkICppZCwgc3RydWN0IHJkbWFfY29ubl9wYXJhbSAqY29ubl9wYXJhbSkKIHsKIAlzdHJ1Y3QgcmRtYV9pZF9wcml2YXRlICppZF9wcml2OwpAQCAtMTcyMywxMyArMjAwNiwxNiBAQAogCQlpZF9wcml2LT5zcnEgPSBjb25uX3BhcmFtLT5zcnE7CiAJfQogCi0Jc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKLQljYXNlIElCX05PREVfQ0E6CisJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKIAkJaWYgKGNvbm5fcGFyYW0pCiAJCQlyZXQgPSBjbWFfYWNjZXB0X2liKGlkX3ByaXYsIGNvbm5fcGFyYW0pOwogCQllbHNlCiAJCQlyZXQgPSBjbWFfcmVwX3JlY3YoaWRfcHJpdik7CiAJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCXJldCA9IGNtYV9hY2NlcHRfaXcoaWRfcHJpdiwgY29ubl9wYXJhbSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FTk9TWVM7CiAJCWJyZWFrOwpAQCAtMTc1NiwxMiArMjA0MiwxNiBAQAogCWlmICghY21hX2NvbXAoaWRfcHJpdiwgQ01BX0NPTk5FQ1QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN3aXRjaCAoaWQtPmRldmljZS0+bm9kZV90eXBlKSB7Ci0JY2FzZSBJQl9OT0RFX0NBOgorCXN3aXRjaCAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoaWQtPmRldmljZS0+bm9kZV90eXBlKSkgeworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSUI6CiAJCXJldCA9IGliX3NlbmRfY21fcmVqKGlkX3ByaXYtPmNtX2lkLmliLAogCQkJCSAgICAgSUJfQ01fUkVKX0NPTlNVTUVSX0RFRklORUQsIE5VTEwsIDAsCiAJCQkJICAgICBwcml2YXRlX2RhdGEsIHByaXZhdGVfZGF0YV9sZW4pOwogCQlicmVhazsKKwljYXNlIFJETUFfVFJBTlNQT1JUX0lXQVJQOgorCQlyZXQgPSBpd19jbV9yZWplY3QoaWRfcHJpdi0+Y21faWQuaXcsCisJCQkJICAgcHJpdmF0ZV9kYXRhLCBwcml2YXRlX2RhdGFfbGVuKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVOT1NZUzsKIAkJYnJlYWs7CkBAIC0xNzgwLDE3ICsyMDcwLDIwIEBACiAJICAgICFjbWFfY29tcChpZF9wcml2LCBDTUFfRElTQ09OTkVDVCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0ID0gY21hX21vZGlmeV9xcF9lcnIoaWQpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0Jc3dpdGNoIChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpIHsKLQljYXNlIElCX05PREVfQ0E6CisJc3dpdGNoIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChpZC0+ZGV2aWNlLT5ub2RlX3R5cGUpKSB7CisJY2FzZSBSRE1BX1RSQU5TUE9SVF9JQjoKKwkJcmV0ID0gY21hX21vZGlmeV9xcF9lcnIoaWQpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CiAJCS8qIEluaXRpYXRlIG9yIHJlc3BvbmQgdG8gYSBkaXNjb25uZWN0LiAqLwogCQlpZiAoaWJfc2VuZF9jbV9kcmVxKGlkX3ByaXYtPmNtX2lkLmliLCBOVUxMLCAwKSkKIAkJCWliX3NlbmRfY21fZHJlcChpZF9wcml2LT5jbV9pZC5pYiwgTlVMTCwgMCk7CiAJCWJyZWFrOworCWNhc2UgUkRNQV9UUkFOU1BPUlRfSVdBUlA6CisJCXJldCA9IGl3X2NtX2Rpc2Nvbm5lY3QoaWRfcHJpdi0+Y21faWQuaXcsIDApOworCQlicmVhazsKIAlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiBvdXQ6CkBAIC0xOTA3LDEyICsyMjAwLDE1IEBACiAJaWYgKCFjbWFfd3EpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWJfc2FfcmVnaXN0ZXJfY2xpZW50KCZzYV9jbGllbnQpOworCiAJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZjbWFfY2xpZW50KTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAlyZXR1cm4gMDsKIAogZXJyOgorCWliX3NhX3VucmVnaXN0ZXJfY2xpZW50KCZzYV9jbGllbnQpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGNtYV93cSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5MjAsNiArMjIxNiw3IEBACiBzdGF0aWMgdm9pZCBjbWFfY2xlYW51cCh2b2lkKQogewogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZjbWFfY2xpZW50KTsKKwlpYl9zYV91bnJlZ2lzdGVyX2NsaWVudCgmc2FfY2xpZW50KTsKIAlkZXN0cm95X3dvcmtxdWV1ZShjbWFfd3EpOwogCWlkcl9kZXN0cm95KCZzZHBfcHMpOwogCWlkcl9kZXN0cm95KCZ0Y3BfcHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvZGV2aWNlLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYwppbmRleCBiMmYzY2I5Li42M2QyYTM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9kZXZpY2UuYwpAQCAtMzg1LDcgKzM4NSw3IEBACiBFWFBPUlRfU1lNQk9MKGliX2dldF9jbGllbnRfZGF0YSk7CiAKIC8qKgotICogaWJfc2V0X2NsaWVudF9kYXRhIC0gR2V0IElCIGNsaWVudCBjb250ZXh0CisgKiBpYl9zZXRfY2xpZW50X2RhdGEgLSBTZXQgSUIgY2xpZW50IGNvbnRleHQKICAqIEBkZXZpY2U6RGV2aWNlIHRvIHNldCBjb250ZXh0IGZvcgogICogQGNsaWVudDpDbGllbnQgdG8gc2V0IGNvbnRleHQgZm9yCiAgKiBAZGF0YTpDb250ZXh0IHRvIHNldApAQCAtNTA1LDcgKzUwNSw3IEBACiAJCSAgdTggcG9ydF9udW0sCiAJCSAgc3RydWN0IGliX3BvcnRfYXR0ciAqcG9ydF9hdHRyKQogewotCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBJQl9OT0RFX1NXSVRDSCkgeworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIKSB7CiAJCWlmIChwb3J0X251bSkKIAkJCXJldHVybiAtRUlOVkFMOwogCX0gZWxzZSBpZiAocG9ydF9udW0gPCAxIHx8IHBvcnRfbnVtID4gZGV2aWNlLT5waHlzX3BvcnRfY250KQpAQCAtNTgwLDcgKzU4MCw3IEBACiAJCSAgIHU4IHBvcnRfbnVtLCBpbnQgcG9ydF9tb2RpZnlfbWFzaywKIAkJICAgc3RydWN0IGliX3BvcnRfbW9kaWZ5ICpwb3J0X21vZGlmeSkKIHsKLQlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gSUJfTk9ERV9TV0lUQ0gpIHsKKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gUkRNQV9OT0RFX0lCX1NXSVRDSCkgewogCQlpZiAocG9ydF9udW0pCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKHBvcnRfbnVtIDwgMSB8fCBwb3J0X251bSA+IGRldmljZS0+cGh5c19wb3J0X2NudCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2l3Y20uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2ZiMzA0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5jCkBAIC0wLDAgKzEsMTAxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCwgMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVG9wc3BpbiBDb3Jwb3JhdGlvbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVm9sdGFpcmUgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTmV0d29yayBBcHBsaWFuY2UsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisKKyNpbmNsdWRlIDxyZG1hL2l3X2NtLmg+CisjaW5jbHVkZSA8cmRtYS9pYl9hZGRyLmg+CisKKyNpbmNsdWRlICJpd2NtLmgiCisKK01PRFVMRV9BVVRIT1IoIlRvbSBUdWNrZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiaVdBUlAgQ00iKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICppd2NtX3dxOworc3RydWN0IGl3Y21fd29yayB7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBpd19jbV9ldmVudCBldmVudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfbGlzdDsKK307CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIHNlcnZpY2VzIHByb3ZpZGUgYSBtZWNoYW5pc20gZm9yIHByZS1hbGxvY2F0aW5nIGl3Y21fd29yaworICogZWxlbWVudHMuICBUaGUgZGVzaWduIHByZS1hbGxvY2F0ZXMgdGhlbSAgYmFzZWQgb24gdGhlIGNtX2lkIHR5cGU6CisgKglMSVNURU5JTkcgSURTOiAJR2V0IGVub3VnaCBlbGVtZW50cyBwcmVhbGxvY2F0ZWQgdG8gaGFuZGxlIHRoZQorICoJCQlsaXN0ZW4gYmFja2xvZy4KKyAqCUFDVElWRSBJRFM6CTQ6IENPTk5FQ1RfUkVQTFksIEVTVEFCTElTSEVELCBESVNDT05ORUNULCBDTE9TRQorICoJUEFTU0lWRSBJRFM6CTM6IEVTVEFCTElTSEVELCBESVNDT05ORUNULCBDTE9TRQorICoKKyAqIEFsbG9jYXRpbmcgdGhlbSBpbiBjb25uZWN0IGFuZCBsaXN0ZW4gYXZvaWRzIGhhdmluZyB0byBkZWFsCisgKiB3aXRoIGFsbG9jYXRpb24gZmFpbHVyZXMgb24gdGhlIGV2ZW50IHVwY2FsbCBmcm9tIHRoZSBwcm92aWRlciAod2hpY2gKKyAqIGlzIGNhbGxlZCBpbiB0aGUgaW50ZXJydXB0IGNvbnRleHQpLgorICoKKyAqIE9uZSBleGNlcHRpb24gaXMgd2hlbiBjcmVhdGluZyB0aGUgY21faWQgZm9yIGluY29taW5nIGNvbm5lY3Rpb24gcmVxdWVzdHMuCisgKiBUaGVyZSBhcmUgdHdvIGNhc2VzOgorICogMSkgaW4gdGhlIGV2ZW50IHVwY2FsbCwgY21fZXZlbnRfaGFuZGxlcigpLCBmb3IgYSBsaXN0ZW5pbmcgY21faWQuICBJZgorICogICAgdGhlIGJhY2tsb2cgaXMgZXhjZWVkZWQsIHRoZW4gbm8gbW9yZSBjb25uZWN0aW9uIHJlcXVlc3QgZXZlbnRzIHdpbGwKKyAqICAgIGJlIHByb2Nlc3NlZC4gIGNtX2V2ZW50X2hhbmRsZXIoKSByZXR1cm5zIC1FTk9NRU0gaW4gdGhpcyBjYXNlLiAgSXRzIHVwCisgKiAgICB0byB0aGUgcHJvdmlkZXIgdG8gcmVqZWN0IHRoZSBjb25uZWN0aW5vIHJlcXVlc3QuCisgKiAyKSBpbiB0aGUgY29ubmVjdGlvbiByZXF1ZXN0IHdvcmtxdWV1ZSBoYW5kbGVyLCBjbV9jb25uX3JlcV9oYW5kbGVyKCkuCisgKiAgICBJZiB3b3JrIGVsZW1lbnRzIGNhbm5vdCBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBuZXcgY29ubmVjdCByZXF1ZXN0IGNtX2lkLAorICogICAgdGhlbiBJV0NNIHdpbGwgY2FsbCB0aGUgcHJvdmlkZXIgcmVqZWN0IG1ldGhvZC4gIFRoaXMgaXMgb2sgc2luY2UKKyAqICAgIGNtX2Nvbm5fcmVxX2hhbmRsZXIoKSBydW5zIGluIHRoZSB3b3JrcXVldWUgdGhyZWFkIGNvbnRleHQuCisgKi8KKworc3RhdGljIHN0cnVjdCBpd2NtX3dvcmsgKmdldF93b3JrKHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXYpCit7CisJc3RydWN0IGl3Y21fd29yayAqd29yazsKKworCWlmIChsaXN0X2VtcHR5KCZjbV9pZF9wcml2LT53b3JrX2ZyZWVfbGlzdCkpCisJCXJldHVybiBOVUxMOworCXdvcmsgPSBsaXN0X2VudHJ5KGNtX2lkX3ByaXYtPndvcmtfZnJlZV9saXN0Lm5leHQsIHN0cnVjdCBpd2NtX3dvcmssCisJCQkgIGZyZWVfbGlzdCk7CisJbGlzdF9kZWxfaW5pdCgmd29yay0+ZnJlZV9saXN0KTsKKwlyZXR1cm4gd29yazsKK30KKworc3RhdGljIHZvaWQgcHV0X3dvcmsoc3RydWN0IGl3Y21fd29yayAqd29yaykKK3sKKwlsaXN0X2FkZCgmd29yay0+ZnJlZV9saXN0LCAmd29yay0+Y21faWQtPndvcmtfZnJlZV9saXN0KTsKK30KKworc3RhdGljIHZvaWQgZGVhbGxvY193b3JrX2VudHJpZXMoc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICplLCAqdG1wOworCisJbGlzdF9mb3JfZWFjaF9zYWZlKGUsIHRtcCwgJmNtX2lkX3ByaXYtPndvcmtfZnJlZV9saXN0KQorCQlrZnJlZShsaXN0X2VudHJ5KGUsIHN0cnVjdCBpd2NtX3dvcmssIGZyZWVfbGlzdCkpOworfQorCitzdGF0aWMgaW50IGFsbG9jX3dvcmtfZW50cmllcyhzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2LCBpbnQgY291bnQpCit7CisJc3RydWN0IGl3Y21fd29yayAqd29yazsKKworCUJVR19PTighbGlzdF9lbXB0eSgmY21faWRfcHJpdi0+d29ya19mcmVlX2xpc3QpKTsKKwl3aGlsZSAoY291bnQtLSkgeworCQl3b3JrID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGl3Y21fd29yayksIEdGUF9LRVJORUwpOworCQlpZiAoIXdvcmspIHsKKwkJCWRlYWxsb2Nfd29ya19lbnRyaWVzKGNtX2lkX3ByaXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJd29yay0+Y21faWQgPSBjbV9pZF9wcml2OworCQlJTklUX0xJU1RfSEVBRCgmd29yay0+bGlzdCk7CisJCXB1dF93b3JrKHdvcmspOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNhdmUgcHJpdmF0ZSBkYXRhIGZyb20gaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0cyBpbiB0aGUKKyAqIGNtX2lkX3ByaXYgc28gdGhlIGxvdyBsZXZlbCBkcml2ZXIgZG9lc24ndCBoYXZlIHRvLiAgQWRqdXN0CisgKiB0aGUgZXZlbnQgcHRyIHRvIHBvaW50IHRvIHRoZSBsb2NhbCBjb3B5LgorICovCitzdGF0aWMgaW50IGNvcHlfcHJpdmF0ZV9kYXRhKHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXYsCisJCSAgICAgICBzdHJ1Y3QgaXdfY21fZXZlbnQgKmV2ZW50KQoreworCXZvaWQgKnA7CisKKwlwID0ga21hbGxvYyhldmVudC0+cHJpdmF0ZV9kYXRhX2xlbiwgR0ZQX0FUT01JQyk7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkocCwgZXZlbnQtPnByaXZhdGVfZGF0YSwgZXZlbnQtPnByaXZhdGVfZGF0YV9sZW4pOworCWV2ZW50LT5wcml2YXRlX2RhdGEgPSBwOworCXJldHVybiAwOworfQorCisvKgorICogUmVsZWFzZSBhIHJlZmVyZW5jZSBvbiBjbV9pZC4gSWYgdGhlIGxhc3QgcmVmZXJlbmNlIGlzIGJlaW5nIHJlbW92ZWQKKyAqIGFuZCBpd19kZXN0cm95X2NtX2lkIGlzIHdhaXRpbmcsIHdha2UgdXAgdGhlIHdhaXRpbmcgdGhyZWFkLgorICovCitzdGF0aWMgaW50IGl3Y21fZGVyZWZfaWQoc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdikKK3sKKwlpbnQgcmV0ID0gMDsKKworCUJVR19PTihhdG9taWNfcmVhZCgmY21faWRfcHJpdi0+cmVmY291bnQpPT0wKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY21faWRfcHJpdi0+cmVmY291bnQpKSB7CisJCUJVR19PTighbGlzdF9lbXB0eSgmY21faWRfcHJpdi0+d29ya19saXN0KSk7CisJCWlmICh3YWl0cXVldWVfYWN0aXZlKCZjbV9pZF9wcml2LT5kZXN0cm95X2NvbXAud2FpdCkpIHsKKwkJCUJVR19PTihjbV9pZF9wcml2LT5zdGF0ZSAhPSBJV19DTV9TVEFURV9ERVNUUk9ZSU5HKTsKKwkJCUJVR19PTih0ZXN0X2JpdChJV0NNX0ZfQ0FMTEJBQ0tfREVTVFJPWSwKKwkJCQkJJmNtX2lkX3ByaXYtPmZsYWdzKSk7CisJCQlyZXQgPSAxOworCQl9CisJCWNvbXBsZXRlKCZjbV9pZF9wcml2LT5kZXN0cm95X2NvbXApOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9yZWYoc3RydWN0IGl3X2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2OworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKwlhdG9taWNfaW5jKCZjbV9pZF9wcml2LT5yZWZjb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlbV9yZWYoc3RydWN0IGl3X2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2OworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKwlpd2NtX2RlcmVmX2lkKGNtX2lkX3ByaXYpOworfQorCitzdGF0aWMgaW50IGNtX2V2ZW50X2hhbmRsZXIoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgc3RydWN0IGl3X2NtX2V2ZW50ICpldmVudCk7CisKK3N0cnVjdCBpd19jbV9pZCAqaXdfY3JlYXRlX2NtX2lkKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwKKwkJCQkgaXdfY21faGFuZGxlciBjbV9oYW5kbGVyLAorCQkJCSB2b2lkICpjb250ZXh0KQoreworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisKKwljbV9pZF9wcml2ID0ga3phbGxvYyhzaXplb2YoKmNtX2lkX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtX2lkX3ByaXYpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9JRExFOworCWNtX2lkX3ByaXYtPmlkLmRldmljZSA9IGRldmljZTsKKwljbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyID0gY21faGFuZGxlcjsKKwljbV9pZF9wcml2LT5pZC5jb250ZXh0ID0gY29udGV4dDsKKwljbV9pZF9wcml2LT5pZC5ldmVudF9oYW5kbGVyID0gY21fZXZlbnRfaGFuZGxlcjsKKwljbV9pZF9wcml2LT5pZC5hZGRfcmVmID0gYWRkX3JlZjsKKwljbV9pZF9wcml2LT5pZC5yZW1fcmVmID0gcmVtX3JlZjsKKwlzcGluX2xvY2tfaW5pdCgmY21faWRfcHJpdi0+bG9jayk7CisJYXRvbWljX3NldCgmY21faWRfcHJpdi0+cmVmY291bnQsIDEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmNtX2lkX3ByaXYtPmNvbm5lY3Rfd2FpdCk7CisJaW5pdF9jb21wbGV0aW9uKCZjbV9pZF9wcml2LT5kZXN0cm95X2NvbXApOworCUlOSVRfTElTVF9IRUFEKCZjbV9pZF9wcml2LT53b3JrX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZjbV9pZF9wcml2LT53b3JrX2ZyZWVfbGlzdCk7CisKKwlyZXR1cm4gJmNtX2lkX3ByaXYtPmlkOworfQorRVhQT1JUX1NZTUJPTChpd19jcmVhdGVfY21faWQpOworCisKK3N0YXRpYyBpbnQgaXdjbV9tb2RpZnlfcXBfZXJyKHN0cnVjdCBpYl9xcCAqcXApCit7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKworCWlmICghcXApCisJCXJldHVybiAtRUlOVkFMOworCisJcXBfYXR0ci5xcF9zdGF0ZSA9IElCX1FQU19FUlI7CisJcmV0dXJuIGliX21vZGlmeV9xcChxcCwgJnFwX2F0dHIsIElCX1FQX1NUQVRFKTsKK30KKworLyoKKyAqIFRoaXMgaXMgcmVhbGx5IHRoZSBSRE1BQyBDTE9TSU5HIHN0YXRlLiBJdCBpcyBtb3N0IHNpbWlsYXIgdG8gdGhlCisgKiBJQiBTUUQgUVAgc3RhdGUuCisgKi8KK3N0YXRpYyBpbnQgaXdjbV9tb2RpZnlfcXBfc3FkKHN0cnVjdCBpYl9xcCAqcXApCit7CisJc3RydWN0IGliX3FwX2F0dHIgcXBfYXR0cjsKKworCUJVR19PTihxcCA9PSBOVUxMKTsKKwlxcF9hdHRyLnFwX3N0YXRlID0gSUJfUVBTX1NRRDsKKwlyZXR1cm4gaWJfbW9kaWZ5X3FwKHFwLCAmcXBfYXR0ciwgSUJfUVBfU1RBVEUpOworfQorCisvKgorICogQ01fSUQgPC0tIENMT1NJTkcKKyAqCisgKiBCbG9jayBpZiBhIHBhc3NpdmUgb3IgYWN0aXZlIGNvbm5lY3Rpb24gaXMgY3VycmVubHR5IGJlaW5nIHByb2Nlc3NlZC4gVGhlbgorICogcHJvY2VzcyB0aGUgZXZlbnQgYXMgZm9sbG93czoKKyAqIC0gSWYgd2UgYXJlIEVTVEFCTElTSEVELCBtb3ZlIHRvIENMT1NJTkcgYW5kIG1vZGlmeSB0aGUgUVAgc3RhdGUKKyAqICAgYmFzZWQgb24gdGhlIGFicnVwdCBmbGFnCisgKiAtIElmIHRoZSBjb25uZWN0aW9uIGlzIGFscmVhZHkgaW4gdGhlIENMT1NJTkcgb3IgSURMRSBzdGF0ZSwgdGhlIHBlZXIgaXMKKyAqICAgZGlzY29ubmVjdGluZyBjb25jdXJyZW50bHkgd2l0aCB1cyBhbmQgd2UndmUgYWxyZWFkeSBzZWVuIHRoZQorICogICBESVNDT05ORUNUIGV2ZW50IC0tIGlnbm9yZSB0aGUgcmVxdWVzdCBhbmQgcmV0dXJuIDAKKyAqIC0gRGlzY29ubmVjdCBvbiBhIGxpc3RlbmluZyBlbmRwb2ludCByZXR1cm5zIC1FSU5WQUwKKyAqLworaW50IGl3X2NtX2Rpc2Nvbm5lY3Qoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgaW50IGFicnVwdCkKK3sKKwlzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGliX3FwICpxcCA9IE5VTEw7CisKKwljbV9pZF9wcml2ID0gY29udGFpbmVyX29mKGNtX2lkLCBzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlLCBpZCk7CisJLyogV2FpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW4gYSBjb25uZWN0IG9yIGFjY2VwdCBkb3duY2FsbCAqLworCXdhaXRfZXZlbnQoY21faWRfcHJpdi0+Y29ubmVjdF93YWl0LAorCQkgICAhdGVzdF9iaXQoSVdDTV9GX0NPTk5FQ1RfV0FJVCwgJmNtX2lkX3ByaXYtPmZsYWdzKSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCXN3aXRjaCAoY21faWRfcHJpdi0+c3RhdGUpIHsKKwljYXNlIElXX0NNX1NUQVRFX0VTVEFCTElTSEVEOgorCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0NMT1NJTkc7CisKKwkJLyogUVAgY291bGQgYmUgPG51bD4gZm9yIHVzZXItbW9kZSBjbGllbnQgKi8KKwkJaWYgKGNtX2lkX3ByaXYtPnFwKQorCQkJcXAgPSBjbV9pZF9wcml2LT5xcDsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSBJV19DTV9TVEFURV9MSVNURU46CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fU1RBVEVfQ0xPU0lORzoKKwkJLyogcmVtb3RlIHBlZXIgY2xvc2VkIGZpcnN0ICovCisJY2FzZSBJV19DTV9TVEFURV9JRExFOgorCQkvKiBhY2NlcHQgb3IgY29ubmVjdCByZXR1cm5lZCAhMCAqLworCQlicmVhazsKKwljYXNlIElXX0NNX1NUQVRFX0NPTk5fUkVDVjoKKwkJLyoKKwkJICogQXBwIGNhbGxlZCBkaXNjb25uZWN0IGJlZm9yZS93aXRob3V0IGNhbGxpbmcgYWNjZXB0IGFmdGVyCisJCSAqIGNvbm5lY3RfcmVxdWVzdCBldmVudCBkZWxpdmVyZWQuCisJCSAqLworCQlicmVhazsKKwljYXNlIElXX0NNX1NUQVRFX0NPTk5fU0VOVDoKKwkJLyogQ2FuIG9ubHkgZ2V0IGhlcmUgaWYgd2FpdCBhYm92ZSBmYWlscyAqLworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAocXApIHsKKwkJaWYgKGFicnVwdCkKKwkJCXJldCA9IGl3Y21fbW9kaWZ5X3FwX2VycihxcCk7CisJCWVsc2UKKwkJCXJldCA9IGl3Y21fbW9kaWZ5X3FwX3NxZChxcCk7CisKKwkJLyoKKwkJICogSWYgYm90aCBzaWRlcyBhcmUgZGlzY29ubmVjdGluZyB0aGUgUVAgY291bGQKKwkJICogYWxyZWFkeSBiZSBpbiBFUlIgb3IgU1FEIHN0YXRlcworCQkgKi8KKwkJcmV0ID0gMDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd19jbV9kaXNjb25uZWN0KTsKKworLyoKKyAqIENNX0lEIDwtLSBERVNUUk9ZSU5HCisgKgorICogQ2xlYW4gdXAgYWxsIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gYW5kIHJlbGVhc2UKKyAqIHRoZSBpbml0aWFsIHJlZmVyZW5jZSB0YWtlbiBieSBpd19jcmVhdGVfY21faWQuCisgKi8KK3N0YXRpYyB2b2lkIGRlc3Ryb3lfY21faWQoc3RydWN0IGl3X2NtX2lkICpjbV9pZCkKK3sKKwlzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKwkvKgorCSAqIFdhaXQgaWYgd2UncmUgY3VycmVudGx5IGluIGEgY29ubmVjdCBvciBhY2NlcHQgZG93bmNhbGwuIEEKKwkgKiBsaXN0ZW5pbmcgZW5kcG9pbnQgc2hvdWxkIG5ldmVyIGJsb2NrIGhlcmUuCisJICovCisJd2FpdF9ldmVudChjbV9pZF9wcml2LT5jb25uZWN0X3dhaXQsCisJCSAgICF0ZXN0X2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJc3dpdGNoIChjbV9pZF9wcml2LT5zdGF0ZSkgeworCWNhc2UgSVdfQ01fU1RBVEVfTElTVEVOOgorCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0RFU1RST1lJTkc7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJLyogZGVzdHJveSB0aGUgbGlzdGVuaW5nIGVuZHBvaW50ICovCisJCXJldCA9IGNtX2lkLT5kZXZpY2UtPml3Y20tPmRlc3Ryb3lfbGlzdGVuKGNtX2lkKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBJV19DTV9TVEFURV9FU1RBQkxJU0hFRDoKKwkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9ERVNUUk9ZSU5HOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJCS8qIEFicnVwdCBjbG9zZSBvZiB0aGUgY29ubmVjdGlvbiAqLworCQkodm9pZClpd2NtX21vZGlmeV9xcF9lcnIoY21faWRfcHJpdi0+cXApOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIElXX0NNX1NUQVRFX0lETEU6CisJY2FzZSBJV19DTV9TVEFURV9DTE9TSU5HOgorCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0RFU1RST1lJTkc7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9SRUNWOgorCQkvKgorCQkgKiBBcHAgY2FsbGVkIGRlc3Ryb3kgYmVmb3JlL3dpdGhvdXQgY2FsbGluZyBhY2NlcHQgYWZ0ZXIKKwkJICogcmVjZWl2aW5nIGNvbm5lY3Rpb24gcmVxdWVzdCBldmVudCBub3RpZmljYXRpb24uCisJCSAqLworCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0RFU1RST1lJTkc7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9TRU5UOgorCWNhc2UgSVdfQ01fU1RBVEVfREVTVFJPWUlORzoKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJYnJlYWs7CisJfQorCWlmIChjbV9pZF9wcml2LT5xcCkgeworCQljbV9pZF9wcml2LT5pZC5kZXZpY2UtPml3Y20tPnJlbV9yZWYoY21faWRfcHJpdi0+cXApOworCQljbV9pZF9wcml2LT5xcCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKworCSh2b2lkKWl3Y21fZGVyZWZfaWQoY21faWRfcHJpdik7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBhcHBsaWNhdGlvbiB0aHJlYWQgYW5kIGNhbm5vdAorICogYmUgY2FsbGVkIGJ5IHRoZSBldmVudCB0aHJlYWQuIFRoZSBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIGFsbAorICogcmVmZXJlbmNlcyB0byBiZSByZWxlYXNlZCBvbiB0aGUgY21faWQgYW5kIHRoZW4ga2ZyZWUgdGhlIGNtX2lkCisgKiBvYmplY3QuCisgKi8KK3ZvaWQgaXdfZGVzdHJveV9jbV9pZChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkKQoreworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisKKwljbV9pZF9wcml2ID0gY29udGFpbmVyX29mKGNtX2lkLCBzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlLCBpZCk7CisJQlVHX09OKHRlc3RfYml0KElXQ01fRl9DQUxMQkFDS19ERVNUUk9ZLCAmY21faWRfcHJpdi0+ZmxhZ3MpKTsKKworCWRlc3Ryb3lfY21faWQoY21faWQpOworCisJd2FpdF9mb3JfY29tcGxldGlvbigmY21faWRfcHJpdi0+ZGVzdHJveV9jb21wKTsKKworCWRlYWxsb2Nfd29ya19lbnRyaWVzKGNtX2lkX3ByaXYpOworCisJa2ZyZWUoY21faWRfcHJpdik7Cit9CitFWFBPUlRfU1lNQk9MKGl3X2Rlc3Ryb3lfY21faWQpOworCisvKgorICogQ01fSUQgPC0tIExJU1RFTgorICoKKyAqIFN0YXJ0IGxpc3RlbmluZyBmb3IgY29ubmVjdCByZXF1ZXN0cy4gR2VuZXJhdGVzIG9uZSBDT05ORUNUX1JFUVVFU1QKKyAqIGV2ZW50IGZvciBlYWNoIGluYm91bmQgY29ubmVjdCByZXF1ZXN0LgorICovCitpbnQgaXdfY21fbGlzdGVuKHN0cnVjdCBpd19jbV9pZCAqY21faWQsIGludCBiYWNrbG9nKQoreworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKworCXJldCA9IGFsbG9jX3dvcmtfZW50cmllcyhjbV9pZF9wcml2LCBiYWNrbG9nKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKGNtX2lkX3ByaXYtPnN0YXRlKSB7CisJY2FzZSBJV19DTV9TVEFURV9JRExFOgorCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0xJU1RFTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbV9pZC0+ZGV2aWNlLT5pd2NtLT5jcmVhdGVfbGlzdGVuKGNtX2lkLCBiYWNrbG9nKTsKKwkJaWYgKHJldCkKKwkJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfSURMRTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdfY21fbGlzdGVuKTsKKworLyoKKyAqIENNX0lEIDwtLSBJRExFCisgKgorICogUmVqZWN0cyBhbiBpbmJvdW5kIGNvbm5lY3Rpb24gcmVxdWVzdC4gTm8gZXZlbnRzIGFyZSBnZW5lcmF0ZWQuCisgKi8KK2ludCBpd19jbV9yZWplY3Qoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwKKwkJIGNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJIHU4IHByaXZhdGVfZGF0YV9sZW4pCit7CisJc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwljbV9pZF9wcml2ID0gY29udGFpbmVyX29mKGNtX2lkLCBzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlLCBpZCk7CisJc2V0X2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY21faWRfcHJpdi0+c3RhdGUgIT0gSVdfQ01fU1RBVEVfQ09OTl9SRUNWKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJY2xlYXJfYml0KElXQ01fRl9DT05ORUNUX1dBSVQsICZjbV9pZF9wcml2LT5mbGFncyk7CisJCXdha2VfdXBfYWxsKCZjbV9pZF9wcml2LT5jb25uZWN0X3dhaXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9JRExFOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldCA9IGNtX2lkLT5kZXZpY2UtPml3Y20tPnJlamVjdChjbV9pZCwgcHJpdmF0ZV9kYXRhLAorCQkJCQkgIHByaXZhdGVfZGF0YV9sZW4pOworCisJY2xlYXJfYml0KElXQ01fRl9DT05ORUNUX1dBSVQsICZjbV9pZF9wcml2LT5mbGFncyk7CisJd2FrZV91cF9hbGwoJmNtX2lkX3ByaXYtPmNvbm5lY3Rfd2FpdCk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd19jbV9yZWplY3QpOworCisvKgorICogQ01fSUQgPC0tIEVTVEFCTElTSEVECisgKgorICogQWNjZXB0cyBhbiBpbmJvdW5kIGNvbm5lY3Rpb24gcmVxdWVzdCBhbmQgZ2VuZXJhdGVzIGFuIEVTVEFCTElTSEVECisgKiBldmVudC4gQ2FsbGVycyBvZiBpd19jbV9kaXNjb25uZWN0IGFuZCBpd19kZXN0cm95X2NtX2lkIHdpbGwgYmxvY2sKKyAqIHVudGlsIHRoZSBFU1RBQkxJU0hFRCBldmVudCBpcyByZWNlaXZlZCBmcm9tIHRoZSBwcm92aWRlci4KKyAqLworaW50IGl3X2NtX2FjY2VwdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLAorCQkgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKml3X3BhcmFtKQoreworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisJc3RydWN0IGliX3FwICpxcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQ7CisKKwljbV9pZF9wcml2ID0gY29udGFpbmVyX29mKGNtX2lkLCBzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlLCBpZCk7CisJc2V0X2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAoY21faWRfcHJpdi0+c3RhdGUgIT0gSVdfQ01fU1RBVEVfQ09OTl9SRUNWKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJY2xlYXJfYml0KElXQ01fRl9DT05ORUNUX1dBSVQsICZjbV9pZF9wcml2LT5mbGFncyk7CisJCXdha2VfdXBfYWxsKCZjbV9pZF9wcml2LT5jb25uZWN0X3dhaXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogR2V0IHRoZSBpYl9xcCBnaXZlbiB0aGUgUVBOICovCisJcXAgPSBjbV9pZC0+ZGV2aWNlLT5pd2NtLT5nZXRfcXAoY21faWQtPmRldmljZSwgaXdfcGFyYW0tPnFwbik7CisJaWYgKCFxcCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljbV9pZC0+ZGV2aWNlLT5pd2NtLT5hZGRfcmVmKHFwKTsKKwljbV9pZF9wcml2LT5xcCA9IHFwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldCA9IGNtX2lkLT5kZXZpY2UtPml3Y20tPmFjY2VwdChjbV9pZCwgaXdfcGFyYW0pOworCWlmIChyZXQpIHsKKwkJLyogQW4gZXJyb3Igb24gYWNjZXB0IHByZWNsdWRlcyBwcm92aWRlciBldmVudHMgKi8KKwkJQlVHX09OKGNtX2lkX3ByaXYtPnN0YXRlICE9IElXX0NNX1NUQVRFX0NPTk5fUkVDVik7CisJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfSURMRTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJaWYgKGNtX2lkX3ByaXYtPnFwKSB7CisJCQljbV9pZC0+ZGV2aWNlLT5pd2NtLT5yZW1fcmVmKHFwKTsKKwkJCWNtX2lkX3ByaXYtPnFwID0gTlVMTDsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJCWNsZWFyX2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpOworCQl3YWtlX3VwX2FsbCgmY21faWRfcHJpdi0+Y29ubmVjdF93YWl0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChpd19jbV9hY2NlcHQpOworCisvKgorICogQWN0aXZlIFNpZGU6IENNX0lEIDwtLSBDT05OX1NFTlQKKyAqCisgKiBJZiBzdWNjZXNzZnVsLCByZXN1bHRzIGluIHRoZSBnZW5lcmF0aW9uIG9mIGEgQ09OTkVDVF9SRVBMWQorICogZXZlbnQuIGl3X2NtX2Rpc2Nvbm5lY3QgYW5kIGl3X2NtX2Rlc3Ryb3kgd2lsbCBibG9jayB1bnRpbCB0aGUKKyAqIENPTk5FQ1RfUkVQTFkgZXZlbnQgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgcHJvdmlkZXIuCisgKi8KK2ludCBpd19jbV9jb25uZWN0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIHN0cnVjdCBpd19jbV9jb25uX3BhcmFtICppd19wYXJhbSkKK3sKKwlzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2OworCWludCByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGliX3FwICpxcDsKKworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKworCXJldCA9IGFsbG9jX3dvcmtfZW50cmllcyhjbV9pZF9wcml2LCA0KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2V0X2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY21faWRfcHJpdi0+c3RhdGUgIT0gSVdfQ01fU1RBVEVfSURMRSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJCWNsZWFyX2JpdChJV0NNX0ZfQ09OTkVDVF9XQUlULCAmY21faWRfcHJpdi0+ZmxhZ3MpOworCQl3YWtlX3VwX2FsbCgmY21faWRfcHJpdi0+Y29ubmVjdF93YWl0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogR2V0IHRoZSBpYl9xcCBnaXZlbiB0aGUgUVBOICovCisJcXAgPSBjbV9pZC0+ZGV2aWNlLT5pd2NtLT5nZXRfcXAoY21faWQtPmRldmljZSwgaXdfcGFyYW0tPnFwbik7CisJaWYgKCFxcCkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljbV9pZC0+ZGV2aWNlLT5pd2NtLT5hZGRfcmVmKHFwKTsKKwljbV9pZF9wcml2LT5xcCA9IHFwOworCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfQ09OTl9TRU5UOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKworCXJldCA9IGNtX2lkLT5kZXZpY2UtPml3Y20tPmNvbm5lY3QoY21faWQsIGl3X3BhcmFtKTsKKwlpZiAocmV0KSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJCWlmIChjbV9pZF9wcml2LT5xcCkgeworCQkJY21faWQtPmRldmljZS0+aXdjbS0+cmVtX3JlZihxcCk7CisJCQljbV9pZF9wcml2LT5xcCA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlCVUdfT04oY21faWRfcHJpdi0+c3RhdGUgIT0gSVdfQ01fU1RBVEVfQ09OTl9TRU5UKTsKKwkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9JRExFOworCQljbGVhcl9iaXQoSVdDTV9GX0NPTk5FQ1RfV0FJVCwgJmNtX2lkX3ByaXYtPmZsYWdzKTsKKwkJd2FrZV91cF9hbGwoJmNtX2lkX3ByaXYtPmNvbm5lY3Rfd2FpdCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woaXdfY21fY29ubmVjdCk7CisKKy8qCisgKiBQYXNzaXZlIFNpZGU6IG5ldyBDTV9JRCA8LS0gQ09OTl9SRUNWCisgKgorICogSGFuZGxlcyBhbiBpbmJvdW5kIGNvbm5lY3QgcmVxdWVzdC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcKKyAqIGl3X2NtX2lkIHRvIHJlcHJlc2VudCB0aGUgbmV3IGNvbm5lY3Rpb24gYW5kIGluaGVyaXRzIHRoZSBjbGllbnQKKyAqIGNhbGxiYWNrIGZ1bmN0aW9uIGFuZCBvdGhlciBhdHRyaWJ1dGVzIGZyb20gdGhlIGxpc3RlbmluZyBwYXJlbnQuCisgKgorICogVGhlIHdvcmsgaXRlbSBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIGxpc3Rlbl9jbV9pZCBhbmQgdGhlIGV2ZW50LiBUaGUKKyAqIGxpc3Rlbl9jbV9pZCBjb250YWlucyB0aGUgY2xpZW50IGNtX2hhbmRsZXIsIGNvbnRleHQgYW5kCisgKiBkZXZpY2UuIFRoZXNlIGFyZSBjb3BpZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGNsb25lZC4gVGhlIGV2ZW50CisgKiBjb250YWlucyB0aGUgbmV3IGZvdXIgdHVwbGUuCisgKgorICogQW4gZXJyb3Igb24gdGhlIGNoaWxkIHNob3VsZCBub3QgYWZmZWN0IHRoZSBwYXJlbnQsIHNvIHRoaXMKKyAqIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBjbV9jb25uX3JlcV9oYW5kbGVyKHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmxpc3Rlbl9pZF9wcml2LAorCQkJCXN0cnVjdCBpd19jbV9ldmVudCAqaXdfZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisJaW50IHJldDsKKworCS8qCisJICogVGhlIHByb3ZpZGVyIHNob3VsZCBuZXZlciBnZW5lcmF0ZSBhIGNvbm5lY3Rpb24gcmVxdWVzdAorCSAqIGV2ZW50IHdpdGggYSBiYWQgc3RhdHVzLgorCSAqLworCUJVR19PTihpd19ldmVudC0+c3RhdHVzKTsKKworCS8qCisJICogV2UgY291bGQgYmUgZGVzdHJveWluZyB0aGUgbGlzdGVuaW5nIGlkLiBJZiBzbywgaWdub3JlIHRoaXMKKwkgKiB1cGNhbGwuCisJICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxpc3Rlbl9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKGxpc3Rlbl9pZF9wcml2LT5zdGF0ZSAhPSBJV19DTV9TVEFURV9MSVNURU4pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGlzdGVuX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsaXN0ZW5faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCisJY21faWQgPSBpd19jcmVhdGVfY21faWQobGlzdGVuX2lkX3ByaXYtPmlkLmRldmljZSwKKwkJCQlsaXN0ZW5faWRfcHJpdi0+aWQuY21faGFuZGxlciwKKwkJCQlsaXN0ZW5faWRfcHJpdi0+aWQuY29udGV4dCk7CisJLyogSWYgdGhlIGNtX2lkIGNvdWxkIG5vdCBiZSBjcmVhdGVkLCBpZ25vcmUgdGhlIHJlcXVlc3QgKi8KKwlpZiAoSVNfRVJSKGNtX2lkKSkKKwkJcmV0dXJuOworCisJY21faWQtPnByb3ZpZGVyX2RhdGEgPSBpd19ldmVudC0+cHJvdmlkZXJfZGF0YTsKKwljbV9pZC0+bG9jYWxfYWRkciA9IGl3X2V2ZW50LT5sb2NhbF9hZGRyOworCWNtX2lkLT5yZW1vdGVfYWRkciA9IGl3X2V2ZW50LT5yZW1vdGVfYWRkcjsKKworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKwljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0NPTk5fUkVDVjsKKworCXJldCA9IGFsbG9jX3dvcmtfZW50cmllcyhjbV9pZF9wcml2LCAzKTsKKwlpZiAocmV0KSB7CisJCWl3X2NtX3JlamVjdChjbV9pZCwgTlVMTCwgMCk7CisJCWl3X2Rlc3Ryb3lfY21faWQoY21faWQpOworCQlyZXR1cm47CisJfQorCisJLyogQ2FsbCB0aGUgY2xpZW50IENNIGhhbmRsZXIgKi8KKwlyZXQgPSBjbV9pZC0+Y21faGFuZGxlcihjbV9pZCwgaXdfZXZlbnQpOworCWlmIChyZXQpIHsKKwkJc2V0X2JpdChJV0NNX0ZfQ0FMTEJBQ0tfREVTVFJPWSwgJmNtX2lkX3ByaXYtPmZsYWdzKTsKKwkJZGVzdHJveV9jbV9pZChjbV9pZCk7CisJCWlmIChhdG9taWNfcmVhZCgmY21faWRfcHJpdi0+cmVmY291bnQpPT0wKQorCQkJa2ZyZWUoY21faWQpOworCX0KKworCWlmIChpd19ldmVudC0+cHJpdmF0ZV9kYXRhX2xlbikKKwkJa2ZyZWUoaXdfZXZlbnQtPnByaXZhdGVfZGF0YSk7Cit9CisKKy8qCisgKiBQYXNzaXZlIFNpZGU6IENNX0lEIDwtLSBFU1RBQkxJU0hFRAorICoKKyAqIFRoZSBwcm92aWRlciBnZW5lcmF0ZWQgYW4gRVNUQUJMSVNIRUQgZXZlbnQgd2hpY2ggbWVhbnMgdGhhdAorICogdGhlIE1QQSBuZWdvdGlvbiBoYXMgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBhbmQgd2UgYXJlIG5vdyBpbiBNUEEKKyAqIEZQRFUgbW9kZS4KKyAqCisgKiBUaGlzIGV2ZW50IGNhbiBvbmx5IGJlIHJlY2VpdmVkIGluIHRoZSBDT05OX1JFQ1Ygc3RhdGUuIElmIHRoZQorICogcmVtb3RlIHBlZXIgY2xvc2VkLCB0aGUgRVNUQUJMSVNIRUQgZXZlbnQgd291bGQgYmUgcmVjZWl2ZWQgZm9sbG93ZWQKKyAqIGJ5IHRoZSBDTE9TRSBldmVudC4gSWYgdGhlIGFwcCBjbG9zZXMsIGl0IHdpbGwgYmxvY2sgdW50aWwgd2Ugd2FrZQorICogaXQgdXAgYWZ0ZXIgcHJvY2Vzc2luZyB0aGlzIGV2ZW50LgorICovCitzdGF0aWMgaW50IGNtX2Nvbm5fZXN0X2hhbmRsZXIoc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfY21fZXZlbnQgKml3X2V2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBXZSBjbGVhciB0aGUgQ09OTkVDVF9XQUlUIGJpdCBoZXJlIHRvIGFsbG93IHRoZSBjYWxsYmFjaworCSAqIGZ1bmN0aW9uIHRvIGNhbGwgaXdfY21fZGlzY29ubmVjdC4gQ2FsbGluZyBpd19kZXN0cm95X2NtX2lkCisJICogZnJvbSBhIGNhbGxiYWNrIGhhbmRsZXIgaXMgbm90IGFsbG93ZWQuCisJICovCisJY2xlYXJfYml0KElXQ01fRl9DT05ORUNUX1dBSVQsICZjbV9pZF9wcml2LT5mbGFncyk7CisJQlVHX09OKGNtX2lkX3ByaXYtPnN0YXRlICE9IElXX0NNX1NUQVRFX0NPTk5fUkVDVik7CisJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9FU1RBQkxJU0hFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJcmV0ID0gY21faWRfcHJpdi0+aWQuY21faGFuZGxlcigmY21faWRfcHJpdi0+aWQsIGl3X2V2ZW50KTsKKwl3YWtlX3VwX2FsbCgmY21faWRfcHJpdi0+Y29ubmVjdF93YWl0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBBY3RpdmUgU2lkZTogQ01fSUQgPC0tIEVTVEFCTElTSEVECisgKgorICogVGhlIGFwcCBoYXMgY2FsbGVkIGNvbm5lY3QgYW5kIGlzIHdhaXRpbmcgZm9yIHRoZSBlc3RhYmxpc2hlZCBldmVudCB0bworICogcG9zdCBpdCdzIHJlcXVlc3RzIHRvIHRoZSBzZXJ2ZXIuIFRoaXMgZXZlbnQgd2lsbCB3YWtlIHVwIGFueW9uZQorICogYmxvY2tlZCBpbiBpd19jbV9kaXNjb25uZWN0IG9yIGl3X2Rlc3Ryb3lfaWQuCisgKi8KK3N0YXRpYyBpbnQgY21fY29ubl9yZXBfaGFuZGxlcihzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2LAorCQkJICAgICAgIHN0cnVjdCBpd19jbV9ldmVudCAqaXdfZXZlbnQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJLyoKKwkgKiBDbGVhciB0aGUgY29ubmVjdCB3YWl0IGJpdCBzbyBhIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbGxpbmcKKwkgKiBpd19jbV9kaXNjb25uZWN0IHdpbGwgbm90IHdhaXQgYW5kIGRlYWRsb2NrIHRoaXMgdGhyZWFkCisJICovCisJY2xlYXJfYml0KElXQ01fRl9DT05ORUNUX1dBSVQsICZjbV9pZF9wcml2LT5mbGFncyk7CisJQlVHX09OKGNtX2lkX3ByaXYtPnN0YXRlICE9IElXX0NNX1NUQVRFX0NPTk5fU0VOVCk7CisJaWYgKGl3X2V2ZW50LT5zdGF0dXMgPT0gSVdfQ01fRVZFTlRfU1RBVFVTX0FDQ0VQVEVEKSB7CisJCWNtX2lkX3ByaXYtPmlkLmxvY2FsX2FkZHIgPSBpd19ldmVudC0+bG9jYWxfYWRkcjsKKwkJY21faWRfcHJpdi0+aWQucmVtb3RlX2FkZHIgPSBpd19ldmVudC0+cmVtb3RlX2FkZHI7CisJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfRVNUQUJMSVNIRUQ7CisJfSBlbHNlIHsKKwkJLyogUkVKRUNURUQgb3IgUkVTRVQgKi8KKwkJY21faWRfcHJpdi0+aWQuZGV2aWNlLT5pd2NtLT5yZW1fcmVmKGNtX2lkX3ByaXYtPnFwKTsKKwkJY21faWRfcHJpdi0+cXAgPSBOVUxMOworCQljbV9pZF9wcml2LT5zdGF0ZSA9IElXX0NNX1NUQVRFX0lETEU7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXQgPSBjbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyKCZjbV9pZF9wcml2LT5pZCwgaXdfZXZlbnQpOworCisJaWYgKGl3X2V2ZW50LT5wcml2YXRlX2RhdGFfbGVuKQorCQlrZnJlZShpd19ldmVudC0+cHJpdmF0ZV9kYXRhKTsKKworCS8qIFdha2UgdXAgd2FpdGVycyBvbiBjb25uZWN0IGNvbXBsZXRlICovCisJd2FrZV91cF9hbGwoJmNtX2lkX3ByaXYtPmNvbm5lY3Rfd2FpdCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQ01fSUQgPC0tIENMT1NJTkcKKyAqCisgKiBJZiBpbiB0aGUgRVNUQUJMSVNIRUQgc3RhdGUsIG1vdmUgdG8gQ0xPU0lORy4KKyAqLworc3RhdGljIHZvaWQgY21fZGlzY29ubmVjdF9oYW5kbGVyKHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXYsCisJCQkJICBzdHJ1Y3QgaXdfY21fZXZlbnQgKml3X2V2ZW50KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCWlmIChjbV9pZF9wcml2LT5zdGF0ZSA9PSBJV19DTV9TVEFURV9FU1RBQkxJU0hFRCkKKwkJY21faWRfcHJpdi0+c3RhdGUgPSBJV19DTV9TVEFURV9DTE9TSU5HOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIENNX0lEIDwtLSBJRExFCisgKgorICogSWYgaW4gdGhlIEVTVEJMSVNIRUQgb3IgQ0xPU0lORyBzdGF0ZXMsIHRoZSBRUCB3aWxsIGhhdmUgaGF2ZSBiZWVuCisgKiBtb3ZlZCBieSB0aGUgcHJvdmlkZXIgdG8gdGhlIEVSUiBzdGF0ZS4gRGlzYXNzb2NpYXRlIHRoZSBDTV9JRCBmcm9tCisgKiB0aGUgUVAsICBtb3ZlIHRvIElETEUsIGFuZCByZW1vdmUgdGhlICdjb25uZWN0ZWQnIHJlZmVyZW5jZS4KKyAqCisgKiBJZiBpbiBzb21lIG90aGVyIHN0YXRlLCB0aGUgY21faWQgd2FzIGRlc3Ryb3llZCBhc3luY2hyb25vdXNseS4KKyAqIFRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlIHRoYXQgd2lsbCByZXN1bHQgaW4gd2FraW5nIHVwCisgKiB0aGUgYXBwIHRocmVhZCBibG9ja2VkIGluIGl3X2Rlc3Ryb3lfY21faWQuCisgKi8KK3N0YXRpYyBpbnQgY21fY2xvc2VfaGFuZGxlcihzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlICpjbV9pZF9wcml2LAorCQkJCSAgc3RydWN0IGl3X2NtX2V2ZW50ICppd19ldmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByZXQgPSAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoY21faWRfcHJpdi0+cXApIHsKKwkJY21faWRfcHJpdi0+aWQuZGV2aWNlLT5pd2NtLT5yZW1fcmVmKGNtX2lkX3ByaXYtPnFwKTsKKwkJY21faWRfcHJpdi0+cXAgPSBOVUxMOworCX0KKwlzd2l0Y2ggKGNtX2lkX3ByaXYtPnN0YXRlKSB7CisJY2FzZSBJV19DTV9TVEFURV9FU1RBQkxJU0hFRDoKKwljYXNlIElXX0NNX1NUQVRFX0NMT1NJTkc6CisJCWNtX2lkX3ByaXYtPnN0YXRlID0gSVdfQ01fU1RBVEVfSURMRTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlyZXQgPSBjbV9pZF9wcml2LT5pZC5jbV9oYW5kbGVyKCZjbV9pZF9wcml2LT5pZCwgaXdfZXZlbnQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCQlicmVhazsKKwljYXNlIElXX0NNX1NUQVRFX0RFU1RST1lJTkc6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHByb2Nlc3NfZXZlbnQoc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdiwKKwkJCSBzdHJ1Y3QgaXdfY21fZXZlbnQgKml3X2V2ZW50KQoreworCWludCByZXQgPSAwOworCisJc3dpdGNoIChpd19ldmVudC0+ZXZlbnQpIHsKKwljYXNlIElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDoKKwkJY21fY29ubl9yZXFfaGFuZGxlcihjbV9pZF9wcml2LCBpd19ldmVudCk7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fRVZFTlRfQ09OTkVDVF9SRVBMWToKKwkJcmV0ID0gY21fY29ubl9yZXBfaGFuZGxlcihjbV9pZF9wcml2LCBpd19ldmVudCk7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6CisJCXJldCA9IGNtX2Nvbm5fZXN0X2hhbmRsZXIoY21faWRfcHJpdiwgaXdfZXZlbnQpOworCQlicmVhazsKKwljYXNlIElXX0NNX0VWRU5UX0RJU0NPTk5FQ1Q6CisJCWNtX2Rpc2Nvbm5lY3RfaGFuZGxlcihjbV9pZF9wcml2LCBpd19ldmVudCk7CisJCWJyZWFrOworCWNhc2UgSVdfQ01fRVZFTlRfQ0xPU0U6CisJCXJldCA9IGNtX2Nsb3NlX2hhbmRsZXIoY21faWRfcHJpdiwgaXdfZXZlbnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogUHJvY2VzcyBldmVudHMgb24gdGhlIHdvcmtfbGlzdCBmb3IgdGhlIGNtX2lkLiBJZiB0aGUgY2FsbGJhY2sKKyAqIGZ1bmN0aW9uIHJlcXVlc3RzIHRoYXQgdGhlIGNtX2lkIGJlIGRlbGV0ZWQsIGEgZmxhZyBpcyBzZXQgaW4gdGhlCisgKiBjbV9pZCBmbGFncyB0byBpbmRpY2F0ZSB0aGF0IHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGlzCisgKiByZW1vdmVkLCB0aGUgY21faWQgaXMgdG8gYmUgZGVzdHJveWVkLiBUaGlzIGlzIG5lY2Vzc2FyeSB0bworICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBvYmplY3QgdGhhdCB3aWxsIGJlIGRlc3Ryb3llZCBieSB0aGUgYXBwCisgKiB0aHJlYWQgYXNsZWVwIG9uIHRoZSBkZXN0cm95X2NvbXAgbGlzdCB2cy4gYW4gb2JqZWN0IGRlc3Ryb3llZAorICogaGVyZSBzeW5jaHJvbm91c2x5IHdoZW4gdGhlIGxhc3QgcmVmZXJlbmNlIGlzIHJlbW92ZWQuCisgKi8KK3N0YXRpYyB2b2lkIGNtX3dvcmtfaGFuZGxlcih2b2lkICphcmcpCit7CisJc3RydWN0IGl3Y21fd29yayAqd29yayA9IGFyZywgbHdvcms7CisJc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdiA9IHdvcmstPmNtX2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVtcHR5OworCWludCByZXQgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwllbXB0eSA9IGxpc3RfZW1wdHkoJmNtX2lkX3ByaXYtPndvcmtfbGlzdCk7CisJd2hpbGUgKCFlbXB0eSkgeworCQl3b3JrID0gbGlzdF9lbnRyeShjbV9pZF9wcml2LT53b3JrX2xpc3QubmV4dCwKKwkJCQkgIHN0cnVjdCBpd2NtX3dvcmssIGxpc3QpOworCQlsaXN0X2RlbF9pbml0KCZ3b3JrLT5saXN0KTsKKwkJZW1wdHkgPSBsaXN0X2VtcHR5KCZjbV9pZF9wcml2LT53b3JrX2xpc3QpOworCQlsd29yayA9ICp3b3JrOworCQlwdXRfd29yayh3b3JrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCisJCXJldCA9IHByb2Nlc3NfZXZlbnQoY21faWRfcHJpdiwgJndvcmstPmV2ZW50KTsKKwkJaWYgKHJldCkgeworCQkJc2V0X2JpdChJV0NNX0ZfQ0FMTEJBQ0tfREVTVFJPWSwgJmNtX2lkX3ByaXYtPmZsYWdzKTsKKwkJCWRlc3Ryb3lfY21faWQoJmNtX2lkX3ByaXYtPmlkKTsKKwkJfQorCQlCVUdfT04oYXRvbWljX3JlYWQoJmNtX2lkX3ByaXYtPnJlZmNvdW50KT09MCk7CisJCWlmIChpd2NtX2RlcmVmX2lkKGNtX2lkX3ByaXYpKQorCQkJcmV0dXJuOworCisJCWlmIChhdG9taWNfcmVhZCgmY21faWRfcHJpdi0+cmVmY291bnQpPT0wICYmCisJCSAgICB0ZXN0X2JpdChJV0NNX0ZfQ0FMTEJBQ0tfREVTVFJPWSwgJmNtX2lkX3ByaXYtPmZsYWdzKSkgeworCQkJZGVhbGxvY193b3JrX2VudHJpZXMoY21faWRfcHJpdik7CisJCQlrZnJlZShjbV9pZF9wcml2KTsKKwkJCXJldHVybjsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpbnRlcnJ1cHQgY29udGV4dC4gU2NoZWR1bGUgZXZlbnRzIG9uCisgKiB0aGUgaXdjbV93cSB0aHJlYWQgdG8gYWxsb3cgY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGRvd25jYWxsIGludG8KKyAqIHRoZSBDTSBhbmQvb3IgYmxvY2suICBFdmVudHMgYXJlIHF1ZXVlZCB0byBhIHBlci1DTV9JRAorICogd29ya19saXN0LiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBldmVudCBvbiB0aGUgd29ya19saXN0LCB0aGUgd29yaworICogZWxlbWVudCBpcyBhbHNvIHF1ZXVlZCBvbiB0aGUgaXdjbV93cSB0aHJlYWQuCisgKgorICogRWFjaCBldmVudCBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgY21faWQuIFVudGlsIHRoZSBsYXN0IHBvc3RlZAorICogZXZlbnQgaGFzIGJlZW4gZGVsaXZlcmVkIGFuZCBwcm9jZXNzZWQsIHRoZSBjbV9pZCBjYW5ub3QgYmUKKyAqIGRlbGV0ZWQuCisgKgorICogUmV0dXJuczoKKyAqIAkgICAgICAwCS0gdGhlIGV2ZW50IHdhcyBoYW5kbGVkLgorICoJLUVOT01FTQktIHRoZSBldmVudCB3YXMgbm90IGhhbmRsZWQgZHVlIHRvIGxhY2sgb2YgcmVzb3VyY2VzLgorICovCitzdGF0aWMgaW50IGNtX2V2ZW50X2hhbmRsZXIoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwKKwkJCSAgICAgc3RydWN0IGl3X2NtX2V2ZW50ICppd19ldmVudCkKK3sKKwlzdHJ1Y3QgaXdjbV93b3JrICp3b3JrOworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0ID0gMDsKKworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJd29yayA9IGdldF93b3JrKGNtX2lkX3ByaXYpOworCWlmICghd29yaykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlJTklUX1dPUksoJndvcmstPndvcmssIGNtX3dvcmtfaGFuZGxlciwgd29yayk7CisJd29yay0+Y21faWQgPSBjbV9pZF9wcml2OworCXdvcmstPmV2ZW50ID0gKml3X2V2ZW50OworCisJaWYgKCh3b3JrLT5ldmVudC5ldmVudCA9PSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QgfHwKKwkgICAgIHdvcmstPmV2ZW50LmV2ZW50ID09IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVQTFkpICYmCisJICAgIHdvcmstPmV2ZW50LnByaXZhdGVfZGF0YV9sZW4pIHsKKwkJcmV0ID0gY29weV9wcml2YXRlX2RhdGEoY21faWRfcHJpdiwgJndvcmstPmV2ZW50KTsKKwkJaWYgKHJldCkgeworCQkJcHV0X3dvcmsod29yayk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCWF0b21pY19pbmMoJmNtX2lkX3ByaXYtPnJlZmNvdW50KTsKKwlpZiAobGlzdF9lbXB0eSgmY21faWRfcHJpdi0+d29ya19saXN0KSkgeworCQlsaXN0X2FkZF90YWlsKCZ3b3JrLT5saXN0LCAmY21faWRfcHJpdi0+d29ya19saXN0KTsKKwkJcXVldWVfd29yayhpd2NtX3dxLCAmd29yay0+d29yayk7CisJfSBlbHNlCisJCWxpc3RfYWRkX3RhaWwoJndvcmstPmxpc3QsICZjbV9pZF9wcml2LT53b3JrX2xpc3QpOworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGl3Y21faW5pdF9xcF9pbml0X2F0dHIoc3RydWN0IGl3Y21faWRfcHJpdmF0ZSAqY21faWRfcHJpdiwKKwkJCQkgIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAorCQkJCSAgaW50ICpxcF9hdHRyX21hc2spCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlzd2l0Y2ggKGNtX2lkX3ByaXYtPnN0YXRlKSB7CisJY2FzZSBJV19DTV9TVEFURV9JRExFOgorCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9TRU5UOgorCWNhc2UgSVdfQ01fU1RBVEVfQ09OTl9SRUNWOgorCWNhc2UgSVdfQ01fU1RBVEVfRVNUQUJMSVNIRUQ6CisJCSpxcF9hdHRyX21hc2sgPSBJQl9RUF9TVEFURSB8IElCX1FQX0FDQ0VTU19GTEFHUzsKKwkJcXBfYXR0ci0+cXBfYWNjZXNzX2ZsYWdzID0gSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9XUklURXwKKwkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9SRUFEOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY21faWRfcHJpdi0+bG9jaywgZmxhZ3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaXdjbV9pbml0X3FwX3J0c19hdHRyKHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXYsCisJCQkJICBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwKKwkJCQkgIGludCAqcXBfYXR0cl9tYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjbV9pZF9wcml2LT5sb2NrLCBmbGFncyk7CisJc3dpdGNoIChjbV9pZF9wcml2LT5zdGF0ZSkgeworCWNhc2UgSVdfQ01fU1RBVEVfSURMRToKKwljYXNlIElXX0NNX1NUQVRFX0NPTk5fU0VOVDoKKwljYXNlIElXX0NNX1NUQVRFX0NPTk5fUkVDVjoKKwljYXNlIElXX0NNX1NUQVRFX0VTVEFCTElTSEVEOgorCQkqcXBfYXR0cl9tYXNrID0gMDsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNtX2lkX3ByaXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaXdfY21faW5pdF9xcF9hdHRyKHN0cnVjdCBpd19jbV9pZCAqY21faWQsCisJCSAgICAgICBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwKKwkJICAgICAgIGludCAqcXBfYXR0cl9tYXNrKQoreworCXN0cnVjdCBpd2NtX2lkX3ByaXZhdGUgKmNtX2lkX3ByaXY7CisJaW50IHJldDsKKworCWNtX2lkX3ByaXYgPSBjb250YWluZXJfb2YoY21faWQsIHN0cnVjdCBpd2NtX2lkX3ByaXZhdGUsIGlkKTsKKwlzd2l0Y2ggKHFwX2F0dHItPnFwX3N0YXRlKSB7CisJY2FzZSBJQl9RUFNfSU5JVDoKKwljYXNlIElCX1FQU19SVFI6CisJCXJldCA9IGl3Y21faW5pdF9xcF9pbml0X2F0dHIoY21faWRfcHJpdiwKKwkJCQkJICAgICBxcF9hdHRyLCBxcF9hdHRyX21hc2spOworCQlicmVhazsKKwljYXNlIElCX1FQU19SVFM6CisJCXJldCA9IGl3Y21faW5pdF9xcF9ydHNfYXR0cihjbV9pZF9wcml2LAorCQkJCQkgICAgcXBfYXR0ciwgcXBfYXR0cl9tYXNrKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3X2NtX2luaXRfcXBfYXR0cik7CisKK3N0YXRpYyBpbnQgX19pbml0IGl3X2NtX2luaXQodm9pZCkKK3sKKwlpd2NtX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIml3X2NtX3dxIik7CisJaWYgKCFpd2NtX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaXdfY21fY2xlYW51cCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKGl3Y21fd3EpOworfQorCittb2R1bGVfaW5pdChpd19jbV9pbml0KTsKK21vZHVsZV9leGl0KGl3X2NtX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvaXdjbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNmNjODIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9pd2NtLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBOZXR3b3JrIEFwcGxpYW5jZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisjaWZuZGVmIElXQ01fSAorI2RlZmluZSBJV0NNX0gKKworZW51bSBpd19jbV9zdGF0ZSB7CisJSVdfQ01fU1RBVEVfSURMRSwgICAgICAgICAgICAgLyogdW5ib3VuZCwgaW5hY3RpdmUgKi8KKwlJV19DTV9TVEFURV9MSVNURU4sICAgICAgICAgICAvKiBsaXN0ZW4gd2FpdGluZyBmb3IgY29ubmVjdCAqLworCUlXX0NNX1NUQVRFX0NPTk5fUkVDViwgICAgICAgIC8qIGluYm91bmQgd2FpdGluZyBmb3IgdXNlciBhY2NlcHQgKi8KKwlJV19DTV9TVEFURV9DT05OX1NFTlQsICAgICAgICAvKiBvdXRib3VuZCB3YWl0aW5nIGZvciBwZWVyIGFjY2VwdCAqLworCUlXX0NNX1NUQVRFX0VTVEFCTElTSEVELCAgICAgIC8qIGVzdGFibGlzaGVkICovCisJSVdfQ01fU1RBVEVfQ0xPU0lORywJICAgICAgLyogZGlzY29ubmVjdCAqLworCUlXX0NNX1NUQVRFX0RFU1RST1lJTkcgICAgICAgIC8qIG9iamVjdCBiZWluZyBkZWxldGVkICovCit9OworCitzdHJ1Y3QgaXdjbV9pZF9wcml2YXRlIHsKKwlzdHJ1Y3QgaXdfY21faWQJaWQ7CisJZW51bSBpd19jbV9zdGF0ZSBzdGF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpYl9xcCAqcXA7CisJc3RydWN0IGNvbXBsZXRpb24gZGVzdHJveV9jb21wOworCXdhaXRfcXVldWVfaGVhZF90IGNvbm5lY3Rfd2FpdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHdvcmtfbGlzdDsKKwlzcGlubG9ja190IGxvY2s7CisJYXRvbWljX3QgcmVmY291bnQ7CisJc3RydWN0IGxpc3RfaGVhZCB3b3JrX2ZyZWVfbGlzdDsKK307CisKKyNkZWZpbmUgSVdDTV9GX0NBTExCQUNLX0RFU1RST1kgICAxCisjZGVmaW5lIElXQ01fRl9DT05ORUNUX1dBSVQgICAgICAgMgorCisjZW5kaWYgLyogSVdDTV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDFjM2NmYmIuLjA4MmYwM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0xMjQ2LDggKzEyNDYsOCBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9NR01UX09VSTsgaSsrKQotICAgICAgICAgICAgICAgIC8qIElzIHRoZXJlIG1hdGNoaW5nIE9VSSBmb3IgdGhpcyB2ZW5kb3IgY2xhc3MgPyAqLwotICAgICAgICAgICAgICAgIGlmICghbWVtY21wKHZlbmRvcl9jbGFzcy0+b3VpW2ldLCBvdWksIDMpKQorCQkvKiBJcyB0aGVyZSBtYXRjaGluZyBPVUkgZm9yIHRoaXMgdmVuZG9yIGNsYXNzID8gKi8KKwkJaWYgKCFtZW1jbXAodmVuZG9yX2NsYXNzLT5vdWlbaV0sIG91aSwgMykpCiAJCQlyZXR1cm4gaTsKIAogCXJldHVybiAtMTsKQEAgLTIyMzcsNyArMjIzNyw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hZF9zZW5kX3dyLCB0ZW1wX21hZF9zZW5kX3dyLAogCQkJCSAmbWFkX2FnZW50X3ByaXYtPnNlbmRfbGlzdCwgYWdlbnRfbGlzdCkgewogCQlpZiAobWFkX3NlbmRfd3ItPnN0YXR1cyA9PSBJQl9XQ19TVUNDRVNTKSB7Ci0gCQkJbWFkX3NlbmRfd3ItPnN0YXR1cyA9IElCX1dDX1dSX0ZMVVNIX0VSUjsKKwkJCW1hZF9zZW5kX3dyLT5zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CiAJCQltYWRfc2VuZF93ci0+cmVmY291bnQgLT0gKG1hZF9zZW5kX3dyLT50aW1lb3V0ID4gMCk7CiAJCX0KIAl9CkBAIC0yNTI4LDEwICsyNTI4LDEwIEBACiAJCQl9CiAJCX0KIAkJc2dfbGlzdC5hZGRyID0gZG1hX21hcF9zaW5nbGUocXBfaW5mby0+cG9ydF9wcml2LT4KLQkJCQkJICAgICAgCWRldmljZS0+ZG1hX2RldmljZSwKKwkJCQkJICAgICAgICBkZXZpY2UtPmRtYV9kZXZpY2UsCiAJCQkJCSAgICAgICZtYWRfcHJpdi0+Z3JoLAogCQkJCQkgICAgICBzaXplb2YgKm1hZF9wcml2IC0KLQkJCQkJICAgICAgCXNpemVvZiBtYWRfcHJpdi0+aGVhZGVyLAorCQkJCQkgICAgICAgIHNpemVvZiBtYWRfcHJpdi0+aGVhZGVyLAogCQkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogCQlwY2lfdW5tYXBfYWRkcl9zZXQoJm1hZF9wcml2LT5oZWFkZXIsIG1hcHBpbmcsIHNnX2xpc3QuYWRkcik7CiAJCXJlY3Zfd3Iud3JfaWQgPSAodW5zaWduZWQgbG9uZykmbWFkX3ByaXYtPmhlYWRlci5tYWRfbGlzdDsKQEAgLTI2MDYsNyArMjYwNiw3IEBACiAJc3RydWN0IGliX3FwICpxcDsKIAogCWF0dHIgPSBrbWFsbG9jKHNpemVvZiAqYXR0ciwgR0ZQX0tFUk5FTCk7Ci0gCWlmICghYXR0cikgeworCWlmICghYXR0cikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZG4ndCBrbWFsbG9jIGliX3FwX2F0dHJcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yODc2LDcgKzI4NzYsMTAgQEAKIHsKIAlpbnQgc3RhcnQsIGVuZCwgaTsKIAotCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBJQl9OT0RFX1NXSVRDSCkgeworCWlmIChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChkZXZpY2UtPm5vZGVfdHlwZSkgIT0gUkRNQV9UUkFOU1BPUlRfSUIpCisJCXJldHVybjsKKworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIKSB7CiAJCXN0YXJ0ID0gMDsKIAkJZW5kICAgPSAwOwogCX0gZWxzZSB7CkBAIC0yOTIzLDcgKzI5MjYsNyBAQAogewogCWludCBpLCBudW1fcG9ydHMsIGN1cl9wb3J0OwogCi0JaWYgKGRldmljZS0+bm9kZV90eXBlID09IElCX05PREVfU1dJVENIKSB7CisJaWYgKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpIHsKIAkJbnVtX3BvcnRzID0gMTsKIAkJY3VyX3BvcnQgPSAwOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3ByaXYuaAppbmRleCBkMTQ3ZjNiLi4xZGE5YWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcHJpdi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9wcml2LmgKQEAgLTM5LDcgKzM5LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9tYWQuaD4KICNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZF9ybXBwLmMKaW5kZXggZWJjZDViMS4uMWVmNzlkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkX3JtcHAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWRfcm1wcC5jCkBAIC0zMyw4ICszMyw2IEBACiAgKiAkSWQ6IG1hZF9ybXBwLmMgMTkyMSAyMDA1LTAzLTAyIDIyOjU4OjQ0WiBzZWFuLmhlZnR5ICQKICAqLwogCi0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLQogI2luY2x1ZGUgIm1hZF9wcml2LmgiCiAjaW5jbHVkZSAibWFkX3JtcHAuaCIKIApAQCAtNjAsNiArNTgsNyBAQAogCWludCBsYXN0X2FjazsKIAlpbnQgc2VnX251bTsKIAlpbnQgbmV3d2luOworCWludCByZXB3aW47CiAKIAlfX2JlNjQgdGlkOwogCXUzMiBzcmNfcXA7CkBAIC0xNzAsNiArMTY5LDMyIEBACiAJcmV0dXJuIG1zZzsKIH0KIAorc3RhdGljIHZvaWQgYWNrX2RzX2FjayhzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKmFnZW50LAorCQkgICAgICAgc3RydWN0IGliX21hZF9yZWN2X3djICpyZWN2X3djKQoreworCXN0cnVjdCBpYl9tYWRfc2VuZF9idWYgKm1zZzsKKwlzdHJ1Y3QgaWJfcm1wcF9tYWQgKnJtcHBfbWFkOworCWludCByZXQ7CisKKwltc2cgPSBhbGxvY19yZXNwb25zZV9tc2coJmFnZW50LT5hZ2VudCwgcmVjdl93Yyk7CisJaWYgKElTX0VSUihtc2cpKQorCQlyZXR1cm47CisKKwlybXBwX21hZCA9IG1zZy0+bWFkOworCW1lbWNweShybXBwX21hZCwgcmVjdl93Yy0+cmVjdl9idWYubWFkLCBtc2ctPmhkcl9sZW4pOworCisJcm1wcF9tYWQtPm1hZF9oZHIubWV0aG9kIF49IElCX01HTVRfTUVUSE9EX1JFU1A7CisJaWJfc2V0X3JtcHBfZmxhZ3MoJnJtcHBfbWFkLT5ybXBwX2hkciwgSUJfTUdNVF9STVBQX0ZMQUdfQUNUSVZFKTsKKwlybXBwX21hZC0+cm1wcF9oZHIuc2VnX251bSA9IDA7CisJcm1wcF9tYWQtPnJtcHBfaGRyLnBheWxlbl9uZXd3aW4gPSBjcHVfdG9fYmUzMigxKTsKKworCXJldCA9IGliX3Bvc3Rfc2VuZF9tYWQobXNnLCBOVUxMKTsKKwlpZiAocmV0KSB7CisJCWliX2Rlc3Ryb3lfYWgobXNnLT5haCk7CisJCWliX2ZyZWVfc2VuZF9tYWQobXNnKTsKKwl9Cit9CisKIHZvaWQgaWJfcm1wcF9zZW5kX2hhbmRsZXIoc3RydWN0IGliX21hZF9zZW5kX3djICptYWRfc2VuZF93YykKIHsKIAlzdHJ1Y3QgaWJfcm1wcF9tYWQgKnJtcHBfbWFkID0gbWFkX3NlbmRfd2MtPnNlbmRfYnVmLT5tYWQ7CkBAIC0yNzEsNiArMjk2LDcgQEAKIAlybXBwX3JlY3YtPm5ld3dpbiA9IDE7CiAJcm1wcF9yZWN2LT5zZWdfbnVtID0gMTsKIAlybXBwX3JlY3YtPmxhc3RfYWNrID0gMDsKKwlybXBwX3JlY3YtPnJlcHdpbiA9IDE7CiAKIAltYWRfaGRyID0gJm1hZF9yZWN2X3djLT5yZWN2X2J1Zi5tYWQtPm1hZF9oZHI7CiAJcm1wcF9yZWN2LT50aWQgPSBtYWRfaGRyLT50aWQ7CkBAIC0zNjUsNyArMzkxLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgaWJfbWFkX3JlY3ZfYnVmICogZmluZF9zZWdfbG9jYXRpb24oc3RydWN0IGxpc3RfaGVhZCAqcm1wcF9saXN0LAogCQkJCQkJICBpbnQgc2VnX251bSkKIHsKLSAgICAgICAgc3RydWN0IGliX21hZF9yZWN2X2J1ZiAqc2VnX2J1ZjsKKwlzdHJ1Y3QgaWJfbWFkX3JlY3ZfYnVmICpzZWdfYnVmOwogCWludCBjdXJfc2VnX251bTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShzZWdfYnVmLCBybXBwX2xpc3QsIGxpc3QpIHsKQEAgLTU5MSw2ICs2MTcsMTYgQEAKIAkJCWJyZWFrOwogfQogCitzdGF0aWMgdm9pZCBwcm9jZXNzX2RzX2FjayhzdHJ1Y3QgaWJfbWFkX2FnZW50X3ByaXZhdGUgKmFnZW50LAorCQkJICAgc3RydWN0IGliX21hZF9yZWN2X3djICptYWRfcmVjdl93YywgaW50IG5ld3dpbikKK3sKKwlzdHJ1Y3QgbWFkX3JtcHBfcmVjdiAqcm1wcF9yZWN2OworCisJcm1wcF9yZWN2ID0gZmluZF9ybXBwX3JlY3YoYWdlbnQsIG1hZF9yZWN2X3djKTsKKwlpZiAocm1wcF9yZWN2ICYmIHJtcHBfcmVjdi0+c3RhdGUgPT0gUk1QUF9TVEFURV9DT01QTEVURSkKKwkJcm1wcF9yZWN2LT5yZXB3aW4gPSBuZXd3aW47Cit9CisKIHN0YXRpYyB2b2lkIHByb2Nlc3Nfcm1wcF9hY2soc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICphZ2VudCwKIAkJCSAgICAgc3RydWN0IGliX21hZF9yZWN2X3djICptYWRfcmVjdl93YykKIHsKQEAgLTYxNiw4ICs2NTIsMTggQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZhZ2VudC0+bG9jaywgZmxhZ3MpOwogCW1hZF9zZW5kX3dyID0gaWJfZmluZF9zZW5kX21hZChhZ2VudCwgbWFkX3JlY3Zfd2MpOwotCWlmICghbWFkX3NlbmRfd3IpCi0JCWdvdG8gb3V0OwkvKiBVbm1hdGNoZWQgQUNLICovCisJaWYgKCFtYWRfc2VuZF93cikgeworCQlpZiAoIXNlZ19udW0pCisJCQlwcm9jZXNzX2RzX2FjayhhZ2VudCwgbWFkX3JlY3Zfd2MsIG5ld3dpbik7CisJCWdvdG8gb3V0OwkvKiBVbm1hdGNoZWQgb3IgRFMgUk1QUCBBQ0sgKi8KKwl9CisKKwlpZiAoKG1hZF9zZW5kX3dyLT5sYXN0X2FjayA9PSBtYWRfc2VuZF93ci0+c2VuZF9idWYuc2VnX2NvdW50KSAmJgorCSAgICAobWFkX3NlbmRfd3ItPnRpbWVvdXQpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CisJCWFja19kc19hY2soYWdlbnQsIG1hZF9yZWN2X3djKTsKKwkJcmV0dXJuOwkJLyogUmVwZWF0ZWQgQUNLIGZvciBEUyBSTVBQIHRyYW5zYWN0aW9uICovCisJfQogCiAJaWYgKChtYWRfc2VuZF93ci0+bGFzdF9hY2sgPT0gbWFkX3NlbmRfd3ItPnNlbmRfYnVmLnNlZ19jb3VudCkgfHwKIAkgICAgKCFtYWRfc2VuZF93ci0+dGltZW91dCkgfHwgKG1hZF9zZW5kX3dyLT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykpCkBAIC02NTYsNiArNzAyLDkgQEAKIAkJaWYgKG1hZF9zZW5kX3dyLT5yZWZjb3VudCA9PSAxKQogCQkJaWJfcmVzZXRfbWFkX3RpbWVvdXQobWFkX3NlbmRfd3IsCiAJCQkJCSAgICAgbWFkX3NlbmRfd3ItPnNlbmRfYnVmLnRpbWVvdXRfbXMpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZ2VudC0+bG9jaywgZmxhZ3MpOworCQlhY2tfZHNfYWNrKGFnZW50LCBtYWRfcmVjdl93Yyk7CisJCXJldHVybjsKIAl9IGVsc2UgaWYgKG1hZF9zZW5kX3dyLT5yZWZjb3VudCA9PSAxICYmCiAJCSAgIG1hZF9zZW5kX3dyLT5zZWdfbnVtIDwgbWFkX3NlbmRfd3ItPm5ld3dpbiAmJgogCQkgICBtYWRfc2VuZF93ci0+c2VnX251bSA8IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5zZWdfY291bnQpIHsKQEAgLTc3Miw2ICs4MjEsMzkgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludCBpbml0X25ld3dpbihzdHJ1Y3QgaWJfbWFkX3NlbmRfd3JfcHJpdmF0ZSAqbWFkX3NlbmRfd3IpCit7CisJc3RydWN0IGliX21hZF9hZ2VudF9wcml2YXRlICphZ2VudCA9IG1hZF9zZW5kX3dyLT5tYWRfYWdlbnRfcHJpdjsKKwlzdHJ1Y3QgaWJfbWFkX2hkciAqbWFkX2hkciA9IG1hZF9zZW5kX3dyLT5zZW5kX2J1Zi5tYWQ7CisJc3RydWN0IG1hZF9ybXBwX3JlY3YgKnJtcHBfcmVjdjsKKwlzdHJ1Y3QgaWJfYWhfYXR0ciBhaF9hdHRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IG5ld3dpbiA9IDE7CisKKwlpZiAoIShtYWRfaGRyLT5tZXRob2QgJiBJQl9NR01UX01FVEhPRF9SRVNQKSkKKwkJZ290byBvdXQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWdlbnQtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJtcHBfcmVjdiwgJmFnZW50LT5ybXBwX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHJtcHBfcmVjdi0+dGlkICE9IG1hZF9oZHItPnRpZCB8fAorCQkgICAgcm1wcF9yZWN2LT5tZ210X2NsYXNzICE9IG1hZF9oZHItPm1nbXRfY2xhc3MgfHwKKwkJICAgIHJtcHBfcmVjdi0+Y2xhc3NfdmVyc2lvbiAhPSBtYWRfaGRyLT5jbGFzc192ZXJzaW9uIHx8CisJCSAgICAocm1wcF9yZWN2LT5tZXRob2QgJiBJQl9NR01UX01FVEhPRF9SRVNQKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChpYl9xdWVyeV9haChtYWRfc2VuZF93ci0+c2VuZF9idWYuYWgsICZhaF9hdHRyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChybXBwX3JlY3YtPnNsaWQgPT0gYWhfYXR0ci5kbGlkKSB7CisJCQluZXd3aW4gPSBybXBwX3JlY3YtPnJlcHdpbjsKKwkJCWJyZWFrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFnZW50LT5sb2NrLCBmbGFncyk7CitvdXQ6CisJcmV0dXJuIG5ld3dpbjsKK30KKwogaW50IGliX3NlbmRfcm1wcF9tYWQoc3RydWN0IGliX21hZF9zZW5kX3dyX3ByaXZhdGUgKm1hZF9zZW5kX3dyKQogewogCXN0cnVjdCBpYl9ybXBwX21hZCAqcm1wcF9tYWQ7CkBAIC03ODcsNyArODY5LDcgQEAKIAkJcmV0dXJuIElCX1JNUFBfUkVTVUxUX0lOVEVSTkFMOwogCX0KIAotCW1hZF9zZW5kX3dyLT5uZXd3aW4gPSAxOworCW1hZF9zZW5kX3dyLT5uZXd3aW4gPSBpbml0X25ld3dpbihtYWRfc2VuZF93cik7CiAKIAkvKiBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBmaW5hbCBBQ0sgZXZlbiBpZiB0aGVyZSBpc24ndCBhIHJlc3BvbnNlICovCiAJbWFkX3NlbmRfd3ItPnJlZmNvdW50ICs9IChtYWRfc2VuZF93ci0+dGltZW91dCA9PSAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zYV9xdWVyeS5jCmluZGV4IGFlZGE0ODQuLjE3MDZkM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NhX3F1ZXJ5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc2FfcXVlcnkuYwpAQCAtMSw2ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDUgVm9sdGFpcmUsIEluYy7CoCBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtNzUsNiArNzYsNyBAQAogc3RydWN0IGliX3NhX3F1ZXJ5IHsKIAl2b2lkICgqY2FsbGJhY2spKHN0cnVjdCBpYl9zYV9xdWVyeSAqLCBpbnQsIHN0cnVjdCBpYl9zYV9tYWQgKik7CiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBpYl9zYV9xdWVyeSAqKTsKKwlzdHJ1Y3QgaWJfc2FfY2xpZW50ICAgICpjbGllbnQ7CiAJc3RydWN0IGliX3NhX3BvcnQgICAgICAqcG9ydDsKIAlzdHJ1Y3QgaWJfbWFkX3NlbmRfYnVmICptYWRfYnVmOwogCXN0cnVjdCBpYl9zYV9zbV9haCAgICAgKnNtX2FoOwpAQCAtNDA1LDcgKzQwNyw4IEBACiAJICAgIGV2ZW50LT5ldmVudCA9PSBJQl9FVkVOVF9QT1JUX0FDVElWRSB8fAogCSAgICBldmVudC0+ZXZlbnQgPT0gSUJfRVZFTlRfTElEX0NIQU5HRSAgfHwKIAkgICAgZXZlbnQtPmV2ZW50ID09IElCX0VWRU5UX1BLRVlfQ0hBTkdFIHx8Ci0JICAgIGV2ZW50LT5ldmVudCA9PSBJQl9FVkVOVF9TTV9DSEFOR0UpIHsKKwkgICAgZXZlbnQtPmV2ZW50ID09IElCX0VWRU5UX1NNX0NIQU5HRSAgIHx8CisJICAgIGV2ZW50LT5ldmVudCA9PSBJQl9FVkVOVF9DTElFTlRfUkVSRUdJU1RFUikgewogCQlzdHJ1Y3QgaWJfc2FfZGV2aWNlICpzYV9kZXY7CiAJCXNhX2RldiA9IGNvbnRhaW5lcl9vZihoYW5kbGVyLCB0eXBlb2YoKnNhX2RldiksIGV2ZW50X2hhbmRsZXIpOwogCkBAIC00MTQsNiArNDE3LDMxIEBACiAJfQogfQogCit2b2lkIGliX3NhX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQpCit7CisJYXRvbWljX3NldCgmY2xpZW50LT51c2VycywgMSk7CisJaW5pdF9jb21wbGV0aW9uKCZjbGllbnQtPmNvbXApOworfQorRVhQT1JUX1NZTUJPTChpYl9zYV9yZWdpc3Rlcl9jbGllbnQpOworCitzdGF0aWMgaW5saW5lIHZvaWQgaWJfc2FfY2xpZW50X2dldChzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQpCit7CisJYXRvbWljX2luYygmY2xpZW50LT51c2Vycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpYl9zYV9jbGllbnRfcHV0KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmY2xpZW50LT51c2VycykpCisJCWNvbXBsZXRlKCZjbGllbnQtPmNvbXApOworfQorCit2b2lkIGliX3NhX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCkKK3sKKwlpYl9zYV9jbGllbnRfcHV0KGNsaWVudCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigmY2xpZW50LT5jb21wKTsKK30KK0VYUE9SVF9TWU1CT0woaWJfc2FfdW5yZWdpc3Rlcl9jbGllbnQpOworCiAvKioKICAqIGliX3NhX2NhbmNlbF9xdWVyeSAtIHRyeSB0byBjYW5jZWwgYW4gU0EgcXVlcnkKICAqIEBpZDpJRCBvZiBxdWVyeSB0byBjYW5jZWwKQEAgLTU1Niw2ICs1ODQsNyBAQAogCiAvKioKICAqIGliX3NhX3BhdGhfcmVjX2dldCAtIFN0YXJ0IGEgUGF0aCBnZXQgcXVlcnkKKyAqIEBjbGllbnQ6U0EgY2xpZW50CiAgKiBAZGV2aWNlOmRldmljZSB0byBzZW5kIHF1ZXJ5IG9uCiAgKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyIHRvIHNlbmQgcXVlcnkgb24KICAqIEByZWM6UGF0aCBSZWNvcmQgdG8gc2VuZCBpbiBxdWVyeQpAQCAtNTc4LDcgKzYwNyw4IEBACiAgKiBlcnJvciBjb2RlLiAgT3RoZXJ3aXNlIGl0IGlzIGEgcXVlcnkgSUQgdGhhdCBjYW4gYmUgdXNlZCB0byBjYW5jZWwKICAqIHRoZSBxdWVyeS4KICAqLwotaW50IGliX3NhX3BhdGhfcmVjX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAoraW50IGliX3NhX3BhdGhfcmVjX2dldChzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQsCisJCSAgICAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAogCQkgICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpyZWMsCiAJCSAgICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAogCQkgICAgICAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLApAQCAtNjEzLDggKzY0MywxMCBAQAogCQlnb3RvIGVycjE7CiAJfQogCi0JcXVlcnktPmNhbGxiYWNrID0gY2FsbGJhY2s7Ci0JcXVlcnktPmNvbnRleHQgID0gY29udGV4dDsKKwlpYl9zYV9jbGllbnRfZ2V0KGNsaWVudCk7CisJcXVlcnktPnNhX3F1ZXJ5LmNsaWVudCA9IGNsaWVudDsKKwlxdWVyeS0+Y2FsbGJhY2sgICAgICAgID0gY2FsbGJhY2s7CisJcXVlcnktPmNvbnRleHQgICAgICAgICA9IGNvbnRleHQ7CiAKIAltYWQgPSBxdWVyeS0+c2FfcXVlcnkubWFkX2J1Zi0+bWFkOwogCWluaXRfbWFkKG1hZCwgYWdlbnQpOwpAQCAtNjM4LDYgKzY3MCw3IEBACiAKIGVycjI6CiAJKnNhX3F1ZXJ5ID0gTlVMTDsKKwlpYl9zYV9jbGllbnRfcHV0KHF1ZXJ5LT5zYV9xdWVyeS5jbGllbnQpOwogCWliX2ZyZWVfc2VuZF9tYWQocXVlcnktPnNhX3F1ZXJ5Lm1hZF9idWYpOwogCiBlcnIxOgpAQCAtNjcwLDYgKzcwMyw3IEBACiAKIC8qKgogICogaWJfc2Ffc2VydmljZV9yZWNfcXVlcnkgLSBTdGFydCBTZXJ2aWNlIFJlY29yZCBvcGVyYXRpb24KKyAqIEBjbGllbnQ6U0EgY2xpZW50CiAgKiBAZGV2aWNlOmRldmljZSB0byBzZW5kIHJlcXVlc3Qgb24KICAqIEBwb3J0X251bTogcG9ydCBudW1iZXIgdG8gc2VuZCByZXF1ZXN0IG9uCiAgKiBAbWV0aG9kOlNBIG1ldGhvZCAtIHNob3VsZCBiZSBnZXQsIHNldCwgb3IgZGVsZXRlCkBAIC02OTQsNyArNzI4LDggQEAKICAqIGVycm9yIGNvZGUuICBPdGhlcndpc2UgaXQgaXMgYSByZXF1ZXN0IElEIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsCiAgKiB0aGUgcXVlcnkuCiAgKi8KLWludCBpYl9zYV9zZXJ2aWNlX3JlY19xdWVyeShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLCB1OCBtZXRob2QsCitpbnQgaWJfc2Ffc2VydmljZV9yZWNfcXVlcnkoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50LAorCQkJICAgIHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sIHU4IG1ldGhvZCwKIAkJCSAgICBzdHJ1Y3QgaWJfc2Ffc2VydmljZV9yZWMgKnJlYywKIAkJCSAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAogCQkJICAgIGludCB0aW1lb3V0X21zLCBnZnBfdCBnZnBfbWFzaywKQEAgLTczNCw4ICs3NjksMTAgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCXF1ZXJ5LT5jYWxsYmFjayA9IGNhbGxiYWNrOwotCXF1ZXJ5LT5jb250ZXh0ICA9IGNvbnRleHQ7CisJaWJfc2FfY2xpZW50X2dldChjbGllbnQpOworCXF1ZXJ5LT5zYV9xdWVyeS5jbGllbnQgPSBjbGllbnQ7CisJcXVlcnktPmNhbGxiYWNrICAgICAgICA9IGNhbGxiYWNrOworCXF1ZXJ5LT5jb250ZXh0ICAgICAgICAgPSBjb250ZXh0OwogCiAJbWFkID0gcXVlcnktPnNhX3F1ZXJ5Lm1hZF9idWYtPm1hZDsKIAlpbml0X21hZChtYWQsIGFnZW50KTsKQEAgLTc2MCw2ICs3OTcsNyBAQAogCiBlcnIyOgogCSpzYV9xdWVyeSA9IE5VTEw7CisJaWJfc2FfY2xpZW50X3B1dChxdWVyeS0+c2FfcXVlcnkuY2xpZW50KTsKIAlpYl9mcmVlX3NlbmRfbWFkKHF1ZXJ5LT5zYV9xdWVyeS5tYWRfYnVmKTsKIAogZXJyMToKQEAgLTc5MCw3ICs4MjgsOCBAQAogCWtmcmVlKGNvbnRhaW5lcl9vZihzYV9xdWVyeSwgc3RydWN0IGliX3NhX21jbWVtYmVyX3F1ZXJ5LCBzYV9xdWVyeSkpOwogfQogCi1pbnQgaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCitpbnQgaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKIAkJCSAgICAgdTggbWV0aG9kLAogCQkJICAgICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZWMsCiAJCQkgICAgIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCkBAIC04MjYsOCArODY1LDEwIEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlxdWVyeS0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKLQlxdWVyeS0+Y29udGV4dCAgPSBjb250ZXh0OworCWliX3NhX2NsaWVudF9nZXQoY2xpZW50KTsKKwlxdWVyeS0+c2FfcXVlcnkuY2xpZW50ID0gY2xpZW50OworCXF1ZXJ5LT5jYWxsYmFjayAgICAgICAgPSBjYWxsYmFjazsKKwlxdWVyeS0+Y29udGV4dCAgICAgICAgID0gY29udGV4dDsKIAogCW1hZCA9IHF1ZXJ5LT5zYV9xdWVyeS5tYWRfYnVmLT5tYWQ7CiAJaW5pdF9tYWQobWFkLCBhZ2VudCk7CkBAIC04NTIsNiArODkzLDcgQEAKIAogZXJyMjoKIAkqc2FfcXVlcnkgPSBOVUxMOworCWliX3NhX2NsaWVudF9wdXQocXVlcnktPnNhX3F1ZXJ5LmNsaWVudCk7CiAJaWJfZnJlZV9zZW5kX21hZChxdWVyeS0+c2FfcXVlcnkubWFkX2J1Zik7CiAKIGVycjE6CkBAIC04ODYsOCArOTI4LDkgQEAKIAlpZHJfcmVtb3ZlKCZxdWVyeV9pZHIsIHF1ZXJ5LT5pZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWRyX2xvY2ssIGZsYWdzKTsKIAotICAgICAgICBpYl9mcmVlX3NlbmRfbWFkKG1hZF9zZW5kX3djLT5zZW5kX2J1Zik7CisJaWJfZnJlZV9zZW5kX21hZChtYWRfc2VuZF93Yy0+c2VuZF9idWYpOwogCWtyZWZfcHV0KCZxdWVyeS0+c21fYWgtPnJlZiwgZnJlZV9zbV9haCk7CisJaWJfc2FfY2xpZW50X3B1dChxdWVyeS0+Y2xpZW50KTsKIAlxdWVyeS0+cmVsZWFzZShxdWVyeSk7CiB9CiAKQEAgLTkxOCw3ICs5NjEsMTAgQEAKIAlzdHJ1Y3QgaWJfc2FfZGV2aWNlICpzYV9kZXY7CiAJaW50IHMsIGUsIGk7CiAKLQlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gSUJfTk9ERV9TV0lUQ0gpCisJaWYgKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGRldmljZS0+bm9kZV90eXBlKSAhPSBSRE1BX1RSQU5TUE9SVF9JQikKKwkJcmV0dXJuOworCisJaWYgKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpCiAJCXMgPSBlID0gMDsKIAllbHNlIHsKIAkJcyA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zbWkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5jCmluZGV4IDM1ODUyZTcuLjU0YjgxZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3NtaS5jCkBAIC02NCw3ICs2NCw3IEBACiAKIAkJLyogQzE0LTk6MiAqLwogCQlpZiAoaG9wX3B0ciAmJiBob3BfcHRyIDwgaG9wX2NudCkgewotCQkJaWYgKG5vZGVfdHlwZSAhPSBJQl9OT0RFX1NXSVRDSCkKKwkJCWlmIChub2RlX3R5cGUgIT0gUkRNQV9OT0RFX0lCX1NXSVRDSCkKIAkJCQlyZXR1cm4gMDsKIAogCQkJLyogc21wLT5yZXR1cm5fcGF0aCBzZXQgd2hlbiByZWNlaXZlZCAqLwpAQCAtNzcsNyArNzcsNyBAQAogCQlpZiAoaG9wX3B0ciA9PSBob3BfY250KSB7CiAJCQkvKiBzbXAtPnJldHVybl9wYXRoIHNldCB3aGVuIHJlY2VpdmVkICovCiAJCQlzbXAtPmhvcF9wdHIrKzsKLQkJCXJldHVybiAobm9kZV90eXBlID09IElCX05PREVfU1dJVENIIHx8CisJCQlyZXR1cm4gKG5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIIHx8CiAJCQkJc21wLT5kcl9kbGlkID09IElCX0xJRF9QRVJNSVNTSVZFKTsKIAkJfQogCkBAIC05NSw3ICs5NSw3IEBACiAKIAkJLyogQzE0LTEzOjIgKi8KIAkJaWYgKDIgPD0gaG9wX3B0ciAmJiBob3BfcHRyIDw9IGhvcF9jbnQpIHsKLQkJCWlmIChub2RlX3R5cGUgIT0gSUJfTk9ERV9TV0lUQ0gpCisJCQlpZiAobm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9TV0lUQ0gpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCXNtcC0+aG9wX3B0ci0tOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJCWlmIChob3BfcHRyID09IDEpIHsKIAkJCXNtcC0+aG9wX3B0ci0tOwogCQkJLyogQzE0LTEzOjMgLS0gU01QcyBkZXN0aW5lZCBmb3IgU00gc2hvdWxkbid0IGJlIGhlcmUgKi8KLQkJCXJldHVybiAobm9kZV90eXBlID09IElCX05PREVfU1dJVENIIHx8CisJCQlyZXR1cm4gKG5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIIHx8CiAJCQkJc21wLT5kcl9zbGlkID09IElCX0xJRF9QRVJNSVNTSVZFKTsKIAkJfQogCkBAIC0xNDIsNyArMTQyLDcgQEAKIAogCQkvKiBDMTQtOToyIC0tIGludGVybWVkaWF0ZSBob3AgKi8KIAkJaWYgKGhvcF9wdHIgJiYgaG9wX3B0ciA8IGhvcF9jbnQpIHsKLQkJCWlmIChub2RlX3R5cGUgIT0gSUJfTk9ERV9TV0lUQ0gpCisJCQlpZiAobm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9TV0lUQ0gpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCXNtcC0+cmV0dXJuX3BhdGhbaG9wX3B0cl0gPSBwb3J0X251bTsKQEAgLTE1Niw3ICsxNTYsNyBAQAogCQkJCXNtcC0+cmV0dXJuX3BhdGhbaG9wX3B0cl0gPSBwb3J0X251bTsKIAkJCS8qIHNtcC0+aG9wX3B0ciB1cGRhdGVkIHdoZW4gc2VuZGluZyAqLwogCi0JCQlyZXR1cm4gKG5vZGVfdHlwZSA9PSBJQl9OT0RFX1NXSVRDSCB8fAorCQkJcmV0dXJuIChub2RlX3R5cGUgPT0gUkRNQV9OT0RFX0lCX1NXSVRDSCB8fAogCQkJCXNtcC0+ZHJfZGxpZCA9PSBJQl9MSURfUEVSTUlTU0lWRSk7CiAJCX0KIApAQCAtMTc1LDcgKzE3NSw3IEBACiAKIAkJLyogQzE0LTEzOjIgKi8KIAkJaWYgKDIgPD0gaG9wX3B0ciAmJiBob3BfcHRyIDw9IGhvcF9jbnQpIHsKLQkJCWlmIChub2RlX3R5cGUgIT0gSUJfTk9ERV9TV0lUQ0gpCisJCQlpZiAobm9kZV90eXBlICE9IFJETUFfTk9ERV9JQl9TV0lUQ0gpCiAJCQkJcmV0dXJuIDA7CiAKIAkJCS8qIHNtcC0+aG9wX3B0ciB1cGRhdGVkIHdoZW4gc2VuZGluZyAqLwpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCQkvKiBzbXAtPmhvcF9wdHIgdXBkYXRlZCB3aGVuIHNlbmRpbmcgKi8KLQkJCXJldHVybiAobm9kZV90eXBlID09IElCX05PREVfU1dJVENIKTsKKwkJCXJldHVybiAobm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpOwogCQl9CiAKIAkJLyogQzE0LTEzOjQgLS0gaG9wX3B0ciA9IDAgLT4gZ2l2ZSB0byBTTSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKaW5kZXggMjFmOTI4Mi4uNzA5MzIzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCkBAIC02OCw3ICs2OCw3IEBACiAJaW50CQkJaW5kZXg7CiB9OwogCi1zdGF0aWMgaW5saW5lIGludCBpYmRldl9pc19hbGl2ZShjb25zdCBzdHJ1Y3QgaWJfZGV2aWNlICpkZXYpIAorc3RhdGljIGlubGluZSBpbnQgaWJkZXZfaXNfYWxpdmUoY29uc3Qgc3RydWN0IGliX2RldmljZSAqZGV2KQogewogCXJldHVybiBkZXYtPnJlZ19zdGF0ZSA9PSBJQl9ERVZfUkVHSVNURVJFRDsKIH0KQEAgLTU4OSwxMCArNTg5LDExIEBACiAJCXJldHVybiAtRU5PREVWOwogCiAJc3dpdGNoIChkZXYtPm5vZGVfdHlwZSkgewotCWNhc2UgSUJfTk9ERV9DQTogICAgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBDQVxuIiwgZGV2LT5ub2RlX3R5cGUpOwotCWNhc2UgSUJfTk9ERV9TV0lUQ0g6IHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBzd2l0Y2hcbiIsIGRldi0+bm9kZV90eXBlKTsKLQljYXNlIElCX05PREVfUk9VVEVSOiByZXR1cm4gc3ByaW50ZihidWYsICIlZDogcm91dGVyXG4iLCBkZXYtPm5vZGVfdHlwZSk7Ci0JZGVmYXVsdDogICAgICAgICAgICAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IDx1bmtub3duPlxuIiwgZGV2LT5ub2RlX3R5cGUpOworCWNhc2UgUkRNQV9OT0RFX0lCX0NBOgkgIHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBDQVxuIiwgZGV2LT5ub2RlX3R5cGUpOworCWNhc2UgUkRNQV9OT0RFX1JOSUM6CSAgcmV0dXJuIHNwcmludGYoYnVmLCAiJWQ6IFJOSUNcbiIsIGRldi0+bm9kZV90eXBlKTsKKwljYXNlIFJETUFfTk9ERV9JQl9TV0lUQ0g6IHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiBzd2l0Y2hcbiIsIGRldi0+bm9kZV90eXBlKTsKKwljYXNlIFJETUFfTk9ERV9JQl9ST1VURVI6IHJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkOiByb3V0ZXJcbiIsIGRldi0+bm9kZV90eXBlKTsKKwlkZWZhdWx0OgkJICByZXR1cm4gc3ByaW50ZihidWYsICIlZDogPHVua25vd24+XG4iLCBkZXYtPm5vZGVfdHlwZSk7CiAJfQogfQogCkBAIC03MDgsNyArNzA5LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9wdXQ7CiAKLQlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gSUJfTk9ERV9TV0lUQ0gpIHsKKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gUkRNQV9OT0RFX0lCX1NXSVRDSCkgewogCQlyZXQgPSBhZGRfcG9ydChkZXZpY2UsIDApOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfcHV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWNtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYwppbmRleCBjMWM2ZmRhLi5hZDRmNGQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYwpAQCAtMzA5LDkgKzMwOSw5IEBACiAJCWluZm8JICAgICAgPSBldnQtPnBhcmFtLmFwcl9yY3ZkLmFwcl9pbmZvOwogCQlicmVhazsKIAljYXNlIElCX0NNX1NJRFJfUkVRX1JFQ0VJVkVEOgotCQl1dnQtPnJlc3AudS5zaWRyX3JlcV9yZXNwLnBrZXkgPSAKKwkJdXZ0LT5yZXNwLnUuc2lkcl9yZXFfcmVzcC5wa2V5ID0KIAkJCQkJZXZ0LT5wYXJhbS5zaWRyX3JlcV9yY3ZkLnBrZXk7Ci0JCXV2dC0+cmVzcC51LnNpZHJfcmVxX3Jlc3AucG9ydCA9IAorCQl1dnQtPnJlc3AudS5zaWRyX3JlcV9yZXNwLnBvcnQgPQogCQkJCQlldnQtPnBhcmFtLnNpZHJfcmVxX3JjdmQucG9ydDsKIAkJdXZ0LT5kYXRhX2xlbiA9IElCX0NNX1NJRFJfUkVRX1BSSVZBVEVfREFUQV9TSVpFOwogCQlicmVhazsKQEAgLTEyMzcsNyArMTIzNyw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2liZGV2KHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQogewogCXN0cnVjdCBpYl91Y21fZGV2aWNlICpkZXY7Ci0JCisKIAlkZXYgPSBjb250YWluZXJfb2YoY2xhc3NfZGV2LCBzdHJ1Y3QgaWJfdWNtX2RldmljZSwgY2xhc3NfZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGV2LT5pYl9kZXYtPm5hbWUpOwogfQpAQCAtMTI0Nyw3ICsxMjQ3LDggQEAKIHsKIAlzdHJ1Y3QgaWJfdWNtX2RldmljZSAqdWNtX2RldjsKIAotCWlmICghZGV2aWNlLT5hbGxvY191Y29udGV4dCkKKwlpZiAoIWRldmljZS0+YWxsb2NfdWNvbnRleHQgfHwKKwkgICAgcmRtYV9ub2RlX2dldF90cmFuc3BvcnQoZGV2aWNlLT5ub2RlX3R5cGUpICE9IFJETUFfVFJBTlNQT1JUX0lCKQogCQlyZXR1cm47CiAKIAl1Y21fZGV2ID0ga3phbGxvYyhzaXplb2YgKnVjbV9kZXYsIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKaW5kZXggMTI3M2Y4OC4uODA3ZmJkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwNSBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqIENvcHlyaWdodCAoYykgMjAwNSBWb2x0YWlyZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwpAQCAtMTAzMiw3ICsxMDMyLDEwIEBACiAJc3RydWN0IGliX3VtYWRfZGV2aWNlICp1bWFkX2RldjsKIAlpbnQgcywgZSwgaTsKIAotCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBJQl9OT0RFX1NXSVRDSCkKKwlpZiAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoZGV2aWNlLT5ub2RlX3R5cGUpICE9IFJETUFfVFJBTlNQT1JUX0lCKQorCQlyZXR1cm47CisKKwlpZiAoZGV2aWNlLT5ub2RlX3R5cGUgPT0gUkRNQV9OT0RFX0lCX1NXSVRDSCkKIAkJcyA9IGUgPSAwOwogCWVsc2UgewogCQlzID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJicy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmgKaW5kZXggYmI5YmVlNS4uMTAyYTU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmgKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAKICNpbmNsdWRlIDxyZG1hL2liX3ZlcmJzLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3ZlcmJzLmg+CkBAIC02OSw2ICs3MCw3IEBACiAKIHN0cnVjdCBpYl91dmVyYnNfZGV2aWNlIHsKIAlzdHJ1Y3Qga3JlZgkJCQlyZWY7CisJc3RydWN0IGNvbXBsZXRpb24JCQljb21wOwogCWludAkJCQkJZGV2bnVtOwogCXN0cnVjdCBjZGV2CQkJICAgICAgICpkZXY7CiAJc3RydWN0IGNsYXNzX2RldmljZQkJICAgICAgICpjbGFzc19kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggMzA5MjNlYi4uYjcyYzdmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtMTU1LDcgKzE1NSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaWJfdW9iamVjdCAqaWRyX3JlYWRfdW9iaihzdHJ1Y3QgaWRyICppZHIsIGludCBpZCwKLQkJCQkJc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQorCQkJCQlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIGludCBuZXN0ZWQpCiB7CiAJc3RydWN0IGliX3VvYmplY3QgKnVvYmo7CiAKQEAgLTE2Myw3ICsxNjMsMTAgQEAKIAlpZiAoIXVvYmopCiAJCXJldHVybiBOVUxMOwogCi0JZG93bl9yZWFkKCZ1b2JqLT5tdXRleCk7CisJaWYgKG5lc3RlZCkKKwkJZG93bl9yZWFkX25lc3RlZCgmdW9iai0+bXV0ZXgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwllbHNlCisJCWRvd25fcmVhZCgmdW9iai0+bXV0ZXgpOwogCWlmICghdW9iai0+bGl2ZSkgewogCQlwdXRfdW9ial9yZWFkKHVvYmopOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE5MCwxNyArMTkzLDE4IEBACiAJcmV0dXJuIHVvYmo7CiB9CiAKLXN0YXRpYyB2b2lkICppZHJfcmVhZF9vYmooc3RydWN0IGlkciAqaWRyLCBpbnQgaWQsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3N0YXRpYyB2b2lkICppZHJfcmVhZF9vYmooc3RydWN0IGlkciAqaWRyLCBpbnQgaWQsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKKwkJCSAgaW50IG5lc3RlZCkKIHsKIAlzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iajsKIAotCXVvYmogPSBpZHJfcmVhZF91b2JqKGlkciwgaWQsIGNvbnRleHQpOworCXVvYmogPSBpZHJfcmVhZF91b2JqKGlkciwgaWQsIGNvbnRleHQsIG5lc3RlZCk7CiAJcmV0dXJuIHVvYmogPyB1b2JqLT5vYmplY3QgOiBOVUxMOwogfQogCiBzdGF0aWMgc3RydWN0IGliX3BkICppZHJfcmVhZF9wZChpbnQgcGRfaGFuZGxlLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCiB7Ci0JcmV0dXJuIGlkcl9yZWFkX29iaigmaWJfdXZlcmJzX3BkX2lkciwgcGRfaGFuZGxlLCBjb250ZXh0KTsKKwlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfcGRfaWRyLCBwZF9oYW5kbGUsIGNvbnRleHQsIDApOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfcGRfcmVhZChzdHJ1Y3QgaWJfcGQgKnBkKQpAQCAtMjA4LDkgKzIxMiw5IEBACiAJcHV0X3VvYmpfcmVhZChwZC0+dW9iamVjdCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaWJfY3EgKmlkcl9yZWFkX2NxKGludCBjcV9oYW5kbGUsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3N0YXRpYyBzdHJ1Y3QgaWJfY3EgKmlkcl9yZWFkX2NxKGludCBjcV9oYW5kbGUsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwgaW50IG5lc3RlZCkKIHsKLQlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfY3FfaWRyLCBjcV9oYW5kbGUsIGNvbnRleHQpOworCXJldHVybiBpZHJfcmVhZF9vYmooJmliX3V2ZXJic19jcV9pZHIsIGNxX2hhbmRsZSwgY29udGV4dCwgbmVzdGVkKTsKIH0KIAogc3RhdGljIHZvaWQgcHV0X2NxX3JlYWQoc3RydWN0IGliX2NxICpjcSkKQEAgLTIyMCw3ICsyMjQsNyBAQAogCiBzdGF0aWMgc3RydWN0IGliX2FoICppZHJfcmVhZF9haChpbnQgYWhfaGFuZGxlLCBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCiB7Ci0JcmV0dXJuIGlkcl9yZWFkX29iaigmaWJfdXZlcmJzX2FoX2lkciwgYWhfaGFuZGxlLCBjb250ZXh0KTsKKwlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfYWhfaWRyLCBhaF9oYW5kbGUsIGNvbnRleHQsIDApOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfYWhfcmVhZChzdHJ1Y3QgaWJfYWggKmFoKQpAQCAtMjMwLDcgKzIzNCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaWJfcXAgKmlkcl9yZWFkX3FwKGludCBxcF9oYW5kbGUsIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKIHsKLQlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfcXBfaWRyLCBxcF9oYW5kbGUsIGNvbnRleHQpOworCXJldHVybiBpZHJfcmVhZF9vYmooJmliX3V2ZXJic19xcF9pZHIsIHFwX2hhbmRsZSwgY29udGV4dCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9xcF9yZWFkKHN0cnVjdCBpYl9xcCAqcXApCkBAIC0yNDAsNyArMjQ0LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpYl9zcnEgKmlkcl9yZWFkX3NycShpbnQgc3JxX2hhbmRsZSwgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0KQogewotCXJldHVybiBpZHJfcmVhZF9vYmooJmliX3V2ZXJic19zcnFfaWRyLCBzcnFfaGFuZGxlLCBjb250ZXh0KTsKKwlyZXR1cm4gaWRyX3JlYWRfb2JqKCZpYl91dmVyYnNfc3JxX2lkciwgc3JxX2hhbmRsZSwgY29udGV4dCwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkIHB1dF9zcnFfcmVhZChzdHJ1Y3QgaWJfc3JxICpzcnEpCkBAIC04MzcsNyArODQxLDYgQEAKIGVycl9jb3B5OgogCWlkcl9yZW1vdmVfdW9iaigmaWJfdXZlcmJzX2NxX2lkciwgJm9iai0+dW9iamVjdCk7CiAKLQogZXJyX2ZyZWU6CiAJaWJfZGVzdHJveV9jcShjcSk7CiAKQEAgLTg2Nyw3ICs4NzAsNyBAQAogCQkgICAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlICsgc2l6ZW9mIHJlc3AsCiAJCSAgIGluX2xlbiAtIHNpemVvZiBjbWQsIG91dF9sZW4gLSBzaXplb2YgcmVzcCk7CiAKLQljcSA9IGlkcl9yZWFkX2NxKGNtZC5jcV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwljcSA9IGlkcl9yZWFkX2NxKGNtZC5jcV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0LCAwKTsKIAlpZiAoIWNxKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtODc1LDExICs4NzgsMTAgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIAotCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mIHJlc3ApOwogCXJlc3AuY3FlID0gY3EtPmNxZTsKIAogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCi0JCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKKwkJCSAmcmVzcCwgc2l6ZW9mIHJlc3AuY3FlKSkKIAkJcmV0ID0gLUVGQVVMVDsKIAogb3V0OgpAQCAtODk0LDcgKzg5Niw2IEBACiB7CiAJc3RydWN0IGliX3V2ZXJic19wb2xsX2NxICAgICAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3BvbGxfY3FfcmVzcCAqcmVzcDsKLQlzdHJ1Y3QgaWJfdW9iamVjdAkgICAgICAqdW9iajsKIAlzdHJ1Y3QgaWJfY3EgICAgICAgICAgICAgICAgICAqY3E7CiAJc3RydWN0IGliX3djICAgICAgICAgICAgICAgICAgKndjOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAwOwpAQCAtOTE1LDE2ICs5MTYsMTUgQEAKIAkJZ290byBvdXRfd2M7CiAJfQogCi0JdW9iaiA9IGlkcl9yZWFkX3VvYmooJmliX3V2ZXJic19jcV9pZHIsIGNtZC5jcV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKLQlpZiAoIXVvYmopIHsKKwljcSA9IGlkcl9yZWFkX2NxKGNtZC5jcV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0LCAwKTsKKwlpZiAoIWNxKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwogCX0KLQljcSA9IHVvYmotPm9iamVjdDsKIAogCXJlc3AtPmNvdW50ID0gaWJfcG9sbF9jcShjcSwgY21kLm5lLCB3Yyk7CiAKLQlwdXRfdW9ial9yZWFkKHVvYmopOworCXB1dF9jcV9yZWFkKGNxKTsKIAogCWZvciAoaSA9IDA7IGkgPCByZXNwLT5jb3VudDsgaSsrKSB7CiAJCXJlc3AtPndjW2ldLndyX2lkIAkgICA9IHdjW2ldLndyX2lkOwpAQCAtOTU5LDIxICs5NTksMTkgQEAKIAkJCQlpbnQgb3V0X2xlbikKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX3JlcV9ub3RpZnlfY3EgY21kOwotCXN0cnVjdCBpYl91b2JqZWN0CSAgICAgICp1b2JqOwogCXN0cnVjdCBpYl9jcSAgICAgICAgICAgICAgICAgICpjcTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCXVvYmogPSBpZHJfcmVhZF91b2JqKCZpYl91dmVyYnNfY3FfaWRyLCBjbWQuY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7Ci0JaWYgKCF1b2JqKQorCWNxID0gaWRyX3JlYWRfY3EoY21kLmNxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQsIDApOworCWlmICghY3EpCiAJCXJldHVybiAtRUlOVkFMOwotCWNxID0gdW9iai0+b2JqZWN0OwogCiAJaWJfcmVxX25vdGlmeV9jcShjcSwgY21kLnNvbGljaXRlZF9vbmx5ID8KIAkJCSBJQl9DUV9TT0xJQ0lURUQgOiBJQl9DUV9ORVhUX0NPTVApOwogCi0JcHV0X3VvYmpfcmVhZCh1b2JqKTsKKwlwdXRfY3FfcmVhZChjcSk7CiAKIAlyZXR1cm4gaW5fbGVuOwogfQpAQCAtMTA2NCw5ICsxMDYyLDkgQEAKIAogCXNycSA9IGNtZC5pc19zcnEgPyBpZHJfcmVhZF9zcnEoY21kLnNycV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KSA6IE5VTEw7CiAJcGQgID0gaWRyX3JlYWRfcGQoY21kLnBkX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOwotCXNjcSA9IGlkcl9yZWFkX2NxKGNtZC5zZW5kX2NxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQpOworCXNjcSA9IGlkcl9yZWFkX2NxKGNtZC5zZW5kX2NxX2hhbmRsZSwgZmlsZS0+dWNvbnRleHQsIDApOwogCXJjcSA9IGNtZC5yZWN2X2NxX2hhbmRsZSA9PSBjbWQuc2VuZF9jcV9oYW5kbGUgPwotCQlzY3EgOiBpZHJfcmVhZF9jcShjbWQucmVjdl9jcV9oYW5kbGUsIGZpbGUtPnVjb250ZXh0KTsKKwkJc2NxIDogaWRyX3JlYWRfY3EoY21kLnJlY3ZfY3FfaGFuZGxlLCBmaWxlLT51Y29udGV4dCwgMSk7CiAKIAlpZiAoIXBkIHx8ICFzY3EgfHwgIXJjcSB8fCAoY21kLmlzX3NycSAmJiAhc3JxKSkgewogCQlyZXQgPSAtRUlOVkFMOwpAQCAtMTI3NCw2ICsxMjcyLDcgQEAKIAkJCSAgICBpbnQgb3V0X2xlbikKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX21vZGlmeV9xcCBjbWQ7CisJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgdWRhdGE7CiAJc3RydWN0IGliX3FwICAgICAgICAgICAgICAqcXA7CiAJc3RydWN0IGliX3FwX2F0dHIgICAgICAgICAqYXR0cjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICByZXQ7CkBAIC0xMjgxLDYgKzEyODAsOSBAQAogCWlmIChjb3B5X2Zyb21fdXNlcigmY21kLCBidWYsIHNpemVvZiBjbWQpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCUlOSVRfVURBVEEoJnVkYXRhLCBidWYgKyBzaXplb2YgY21kLCBOVUxMLCBpbl9sZW4gLSBzaXplb2YgY21kLAorCQkgICBvdXRfbGVuKTsKKwogCWF0dHIgPSBrbWFsbG9jKHNpemVvZiAqYXR0ciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhdHRyKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEzMzcsNyArMTMzOSw3IEBACiAJYXR0ci0+YWx0X2FoX2F0dHIuYWhfZmxhZ3MgCSAgICA9IGNtZC5hbHRfZGVzdC5pc19nbG9iYWwgPyBJQl9BSF9HUkggOiAwOwogCWF0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtIAkgICAgPSBjbWQuYWx0X2Rlc3QucG9ydF9udW07CiAKLQlyZXQgPSBpYl9tb2RpZnlfcXAocXAsIGF0dHIsIGNtZC5hdHRyX21hc2spOworCXJldCA9IHFwLT5kZXZpY2UtPm1vZGlmeV9xcChxcCwgYXR0ciwgY21kLmF0dHJfbWFzaywgJnVkYXRhKTsKIAogCXB1dF9xcF9yZWFkKHFwKTsKIApAQCAtMTY3NCw3ICsxNjc2LDYgQEAKIAkJCQlicmVhazsKIAkJfQogCi0KIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpCiAJCXJldCA9IC1FRkFVTFQ7CkBAIC0xNzI0LDcgKzE3MjUsNiBAQAogCQkJCWJyZWFrOwogCQl9CiAKLQogCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKSBjbWQucmVzcG9uc2UsCiAJCQkgJnJlc3AsIHNpemVvZiByZXNwKSkKIAkJcmV0ID0gLUVGQVVMVDsKQEAgLTIwNTUsNiArMjA1NSw3IEBACiAJCQkgICAgIGludCBvdXRfbGVuKQogewogCXN0cnVjdCBpYl91dmVyYnNfbW9kaWZ5X3NycSBjbWQ7CisJc3RydWN0IGliX3VkYXRhICAgICAgICAgICAgIHVkYXRhOwogCXN0cnVjdCBpYl9zcnEgICAgICAgICAgICAgICpzcnE7CiAJc3RydWN0IGliX3NycV9hdHRyICAgICAgICAgIGF0dHI7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKQEAgLTIwNjIsNiArMjA2Myw5IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIGJ1Ziwgc2l6ZW9mIGNtZCkpCiAJCXJldHVybiAtRUZBVUxUOwogCisJSU5JVF9VREFUQSgmdWRhdGEsIGJ1ZiArIHNpemVvZiBjbWQsIE5VTEwsIGluX2xlbiAtIHNpemVvZiBjbWQsCisJCSAgIG91dF9sZW4pOworCiAJc3JxID0gaWRyX3JlYWRfc3JxKGNtZC5zcnFfaGFuZGxlLCBmaWxlLT51Y29udGV4dCk7CiAJaWYgKCFzcnEpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjA2OSw3ICsyMDczLDcgQEAKIAlhdHRyLm1heF93ciAgICA9IGNtZC5tYXhfd3I7CiAJYXR0ci5zcnFfbGltaXQgPSBjbWQuc3JxX2xpbWl0OwogCi0JcmV0ID0gaWJfbW9kaWZ5X3NycShzcnEsICZhdHRyLCBjbWQuYXR0cl9tYXNrKTsKKwlyZXQgPSBzcnEtPmRldmljZS0+bW9kaWZ5X3NycShzcnEsICZhdHRyLCBjbWQuYXR0cl9tYXNrLCAmdWRhdGEpOwogCiAJcHV0X3NycV9yZWFkKHNycSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IGU3MjVjY2MuLjRlMTYzMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJc3RydWN0IGliX3V2ZXJic19kZXZpY2UgKmRldiA9CiAJCWNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCBpYl91dmVyYnNfZGV2aWNlLCByZWYpOwogCi0Ja2ZyZWUoZGV2KTsKKwljb21wbGV0ZSgmZGV2LT5jb21wKTsKIH0KIAogdm9pZCBpYl91dmVyYnNfcmVsZWFzZV91Y3Eoc3RydWN0IGliX3V2ZXJic19maWxlICpmaWxlLApAQCAtNzQwLDYgKzc0MCw3IEBACiAJCXJldHVybjsKIAogCWtyZWZfaW5pdCgmdXZlcmJzX2Rldi0+cmVmKTsKKwlpbml0X2NvbXBsZXRpb24oJnV2ZXJic19kZXYtPmNvbXApOwogCiAJc3Bpbl9sb2NrKCZtYXBfbG9jayk7CiAJdXZlcmJzX2Rldi0+ZGV2bnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOwpAQCAtNzkzLDYgKzc5NCw4IEBACiAKIGVycjoKIAlrcmVmX3B1dCgmdXZlcmJzX2Rldi0+cmVmLCBpYl91dmVyYnNfcmVsZWFzZV9kZXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJnV2ZXJic19kZXYtPmNvbXApOworCWtmcmVlKHV2ZXJic19kZXYpOwogCXJldHVybjsKIH0KIApAQCAtODEyLDcgKzgxNSwxMCBAQAogCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7CiAKIAljbGVhcl9iaXQodXZlcmJzX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwogCWtyZWZfcHV0KCZ1dmVyYnNfZGV2LT5yZWYsIGliX3V2ZXJic19yZWxlYXNlX2Rldik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmdXZlcmJzX2Rldi0+Y29tcCk7CisJa2ZyZWUodXZlcmJzX2Rldik7CiB9CiAKIHN0YXRpYyBpbnQgdXZlcmJzX2V2ZW50X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3ZlcmJzLmMKaW5kZXggNDY4OTk5Yy4uOGI1ZGQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS92ZXJicy5jCkBAIC03OSw2ICs3OSwyMyBAQAogfQogRVhQT1JUX1NZTUJPTChtdWx0X3RvX2liX3JhdGUpOwogCitlbnVtIHJkbWFfdHJhbnNwb3J0X3R5cGUKK3JkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGVudW0gcmRtYV9ub2RlX3R5cGUgbm9kZV90eXBlKQoreworCXN3aXRjaCAobm9kZV90eXBlKSB7CisJY2FzZSBSRE1BX05PREVfSUJfQ0E6CisJY2FzZSBSRE1BX05PREVfSUJfU1dJVENIOgorCWNhc2UgUkRNQV9OT0RFX0lCX1JPVVRFUjoKKwkJcmV0dXJuIFJETUFfVFJBTlNQT1JUX0lCOworCWNhc2UgUkRNQV9OT0RFX1JOSUM6CisJCXJldHVybiBSRE1BX1RSQU5TUE9SVF9JV0FSUDsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwkJcmV0dXJuIDA7CisJfQorfQorRVhQT1JUX1NZTUJPTChyZG1hX25vZGVfZ2V0X3RyYW5zcG9ydCk7CisKIC8qIFByb3RlY3Rpb24gZG9tYWlucyAqLwogCiBzdHJ1Y3QgaWJfcGQgKmliX2FsbG9jX3BkKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSkKQEAgLTIzMSw3ICsyNDgsNyBAQAogCQkgIHN0cnVjdCBpYl9zcnFfYXR0ciAqc3JxX2F0dHIsCiAJCSAgZW51bSBpYl9zcnFfYXR0cl9tYXNrIHNycV9hdHRyX21hc2spCiB7Ci0JcmV0dXJuIHNycS0+ZGV2aWNlLT5tb2RpZnlfc3JxKHNycSwgc3JxX2F0dHIsIHNycV9hdHRyX21hc2spOworCXJldHVybiBzcnEtPmRldmljZS0+bW9kaWZ5X3NycShzcnEsIHNycV9hdHRyLCBzcnFfYXR0cl9tYXNrLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0woaWJfbW9kaWZ5X3NycSk7CiAKQEAgLTU0Nyw3ICs1NjQsNyBAQAogCQkgc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIsCiAJCSBpbnQgcXBfYXR0cl9tYXNrKQogewotCXJldHVybiBxcC0+ZGV2aWNlLT5tb2RpZnlfcXAocXAsIHFwX2F0dHIsIHFwX2F0dHJfbWFzayk7CisJcmV0dXJuIHFwLT5kZXZpY2UtPm1vZGlmeV9xcChxcCwgcXBfYXR0ciwgcXBfYXR0cl9tYXNrLCBOVUxMKTsKIH0KIEVYUE9SVF9TWU1CT0woaWJfbW9kaWZ5X3FwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL0tidWlsZCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9LYnVpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5NjRjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9LYnVpbGQKQEAgLTAsMCArMSw4IEBACitpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9BTVNPMTEwMF9ERUJVRworRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKK2VuZGlmCisKK29iai0kKENPTkZJR19JTkZJTklCQU5EX0FNU08xMTAwKSArPSBpd19jMi5vCisKK2l3X2MyLXkgOj0gYzIubyBjMl9wcm92aWRlci5vIGMyX3JuaWMubyBjMl9hbGxvYy5vIGMyX21xLm8gYzJfYWUubyBjMl92cS5vIFwKKwljMl9pbnRyLm8gYzJfY3EubyBjMl9xcC5vIGMyX2NtLm8gYzJfbW0ubyBjMl9wZC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwOWNiMTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvS2NvbmZpZwpAQCAtMCwwICsxLDE1IEBACitjb25maWcgSU5GSU5JQkFORF9BTVNPMTEwMAorCXRyaXN0YXRlICJBbW1hc3NvIDExMDAgSENBIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVCAmJiBJTkZJTklCQU5ECisJLS0taGVscC0tLQorCSAgVGhpcyBpcyBhIGxvdy1sZXZlbCBkcml2ZXIgZm9yIHRoZSBBbW1hc3NvIDExMDAgaG9zdAorCSAgY2hhbm5lbCBhZGFwdGVyIChIQ0EpLgorCitjb25maWcgSU5GSU5JQkFORF9BTVNPMTEwMF9ERUJVRworCWJvb2wgIlZlcmJvc2UgZGVidWdnaW5nIG91dHB1dCIKKwlkZXBlbmRzIG9uIElORklOSUJBTkRfQU1TTzExMDAKKwlkZWZhdWx0IG4KKwktLS1oZWxwLS0tCisJICBUaGlzIG9wdGlvbiBjYXVzZXMgdGhlIGFtc28xMTAwIGRyaXZlciB0byBwcm9kdWNlIGEgYnVuY2ggb2YKKwkgIGRlYnVnIG1lc3NhZ2VzLiAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBkZXZlbG9waW5nIHRoZSBkcml2ZXIKKwkgIG9yIHRyeWluZyB0byBkaWFnbm9zZSBhIHByb2JsZW0uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllOTEyMGYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuYwpAQCAtMCwwICsxLDEyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQW1tYXNzbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgImMyX3Byb3ZpZGVyLmgiCisKK01PRFVMRV9BVVRIT1IoIlRvbSBUdWNrZXIgPHRvbUBvcGVuZ3JpZGNvbXB1dGluZy5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFtbWFzc28gQU1TTzExMDAgTG93LWxldmVsIGlXQVJQIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOworCitzdGF0aWMgY29uc3QgdTMyIGRlZmF1bHRfbXNnID0gTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LCisgICAgfCBORVRJRl9NU0dfSUZVUCB8IE5FVElGX01TR19JRkRPV047CisKK3N0YXRpYyBpbnQgZGVidWcgPSAtMTsJCS8qIGRlZmF1bHRzIGFib3ZlICovCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDA9bm9uZSwuLi4sMTY9YWxsKSIpOworCitzdGF0aWMgaW50IGMyX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIGludCBjMl9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIGludCBjMl94bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIHZvaWQgYzJfdHhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIHZvaWQgYzJfcnhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIGlycXJldHVybl90IGMyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK3N0YXRpYyB2b2lkIGMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgaW50IGMyX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpOworc3RhdGljIHZvaWQgYzJfcmVzZXQoc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQpOworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjMl9wY2lfdGFibGVbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoMHgxOGI4LCAweGIwMDEpIH0sCisJeyAwIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjMl9wY2lfdGFibGUpOworCitzdGF0aWMgdm9pZCBjMl9wcmludF9tYWNhZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcHJfZGVidWcoIiVzOiBNQUMgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlgsICIKKwkJIklSUSAldVxuIiwgbmV0ZGV2LT5uYW1lLAorCQluZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLCBuZXRkZXYtPmRldl9hZGRyWzJdLAorCQluZXRkZXYtPmRldl9hZGRyWzNdLCBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdLAorCQluZXRkZXYtPmlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGMyX3NldF9yeGJ1ZnNpemUoc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGMyX3BvcnQtPm5ldGRldjsKKworCWlmIChuZXRkZXYtPm10dSA+IFJYX0JVRl9TSVpFKQorCQljMl9wb3J0LT5yeF9idWZfc2l6ZSA9CisJCSAgICBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgc2l6ZW9mKHN0cnVjdCBjMl9yeHBfaGRyKSArCisJCSAgICBORVRfSVBfQUxJR047CisJZWxzZQorCQljMl9wb3J0LT5yeF9idWZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYzJfcnhwX2hkcikgKyBSWF9CVUZfU0laRTsKK30KKworLyoKKyAqIEFsbG9jYXRlIFRYIHJpbmcgZWxlbWVudHMgYW5kIGNoYWluIHRoZW0gdG9nZXRoZXIuCisgKiBPbmUtdG8tb25lIGFzc29jaWF0aW9uIG9mIGFkYXB0ZXIgZGVzY3JpcHRvcnMgd2l0aCByaW5nIGVsZW1lbnRzLgorICovCitzdGF0aWMgaW50IGMyX3R4X3JpbmdfYWxsb2Moc3RydWN0IGMyX3JpbmcgKnR4X3JpbmcsIHZvaWQgKnZhZGRyLAorCQkJICAgIGRtYV9hZGRyX3QgYmFzZSwgdm9pZCBfX2lvbWVtICogbW1pb190eHBfcmluZykKK3sKKwlzdHJ1Y3QgYzJfdHhfZGVzYyAqdHhfZGVzYzsKKwlzdHJ1Y3QgYzJfdHhwX2Rlc2MgX19pb21lbSAqdHhwX2Rlc2M7CisJc3RydWN0IGMyX2VsZW1lbnQgKmVsZW07CisJaW50IGk7CisKKwl0eF9yaW5nLT5zdGFydCA9IGttYWxsb2Moc2l6ZW9mKCplbGVtKSAqIHR4X3JpbmctPmNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXR4X3JpbmctPnN0YXJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVsZW0gPSB0eF9yaW5nLT5zdGFydDsKKwl0eF9kZXNjID0gdmFkZHI7CisJdHhwX2Rlc2MgPSBtbWlvX3R4cF9yaW5nOworCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrLCBlbGVtKyssIHR4X2Rlc2MrKywgdHhwX2Rlc2MrKykgeworCQl0eF9kZXNjLT5sZW4gPSAwOworCQl0eF9kZXNjLT5zdGF0dXMgPSAwOworCisJCS8qIFNldCBUWFBfSFRYRF9VTklOSVQgKi8KKwkJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KDB4MTEyMjMzNDQ1NTY2Nzc4OFVMTCksCisJCQkgICAgICh2b2lkIF9faW9tZW0gKikgdHhwX2Rlc2MgKyBDMl9UWFBfQUREUik7CisJCV9fcmF3X3dyaXRldygwLCAodm9pZCBfX2lvbWVtICopIHR4cF9kZXNjICsgQzJfVFhQX0xFTik7CisJCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihUWFBfSFRYRF9VTklOSVQpLAorCQkJICAgICAodm9pZCBfX2lvbWVtICopIHR4cF9kZXNjICsgQzJfVFhQX0ZMQUdTKTsKKworCQllbGVtLT5za2IgPSBOVUxMOworCQllbGVtLT5odF9kZXNjID0gdHhfZGVzYzsKKwkJZWxlbS0+aHdfZGVzYyA9IHR4cF9kZXNjOworCisJCWlmIChpID09IHR4X3JpbmctPmNvdW50IC0gMSkgeworCQkJZWxlbS0+bmV4dCA9IHR4X3JpbmctPnN0YXJ0OworCQkJdHhfZGVzYy0+bmV4dF9vZmZzZXQgPSBiYXNlOworCQl9IGVsc2UgeworCQkJZWxlbS0+bmV4dCA9IGVsZW0gKyAxOworCQkJdHhfZGVzYy0+bmV4dF9vZmZzZXQgPQorCQkJICAgIGJhc2UgKyAoaSArIDEpICogc2l6ZW9mKCp0eF9kZXNjKTsKKwkJfQorCX0KKworCXR4X3JpbmctPnRvX3VzZSA9IHR4X3JpbmctPnRvX2NsZWFuID0gdHhfcmluZy0+c3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIFJYIHJpbmcgZWxlbWVudHMgYW5kIGNoYWluIHRoZW0gdG9nZXRoZXIuCisgKiBPbmUtdG8tb25lIGFzc29jaWF0aW9uIG9mIGFkYXB0ZXIgZGVzY3JpcHRvcnMgd2l0aCByaW5nIGVsZW1lbnRzLgorICovCitzdGF0aWMgaW50IGMyX3J4X3JpbmdfYWxsb2Moc3RydWN0IGMyX3JpbmcgKnJ4X3JpbmcsIHZvaWQgKnZhZGRyLAorCQkJICAgIGRtYV9hZGRyX3QgYmFzZSwgdm9pZCBfX2lvbWVtICogbW1pb19yeHBfcmluZykKK3sKKwlzdHJ1Y3QgYzJfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgYzJfcnhwX2Rlc2MgX19pb21lbSAqcnhwX2Rlc2M7CisJc3RydWN0IGMyX2VsZW1lbnQgKmVsZW07CisJaW50IGk7CisKKwlyeF9yaW5nLT5zdGFydCA9IGttYWxsb2Moc2l6ZW9mKCplbGVtKSAqIHJ4X3JpbmctPmNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJ4X3JpbmctPnN0YXJ0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWVsZW0gPSByeF9yaW5nLT5zdGFydDsKKwlyeF9kZXNjID0gdmFkZHI7CisJcnhwX2Rlc2MgPSBtbWlvX3J4cF9yaW5nOworCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5jb3VudDsgaSsrLCBlbGVtKyssIHJ4X2Rlc2MrKywgcnhwX2Rlc2MrKykgeworCQlyeF9kZXNjLT5sZW4gPSAwOworCQlyeF9kZXNjLT5zdGF0dXMgPSAwOworCisJCS8qIFNldCBSWFBfSFJYRF9VTklOSVQgKi8KKwkJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFJYUF9IUlhEX09LKSwKKwkJICAgICAgICh2b2lkIF9faW9tZW0gKikgcnhwX2Rlc2MgKyBDMl9SWFBfU1RBVFVTKTsKKwkJX19yYXdfd3JpdGV3KDAsICh2b2lkIF9faW9tZW0gKikgcnhwX2Rlc2MgKyBDMl9SWFBfQ09VTlQpOworCQlfX3Jhd193cml0ZXcoMCwgKHZvaWQgX19pb21lbSAqKSByeHBfZGVzYyArIEMyX1JYUF9MRU4pOworCQlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQoMHg5OWFhYmJjY2RkZWVmZlVMTCksCisJCQkgICAgICh2b2lkIF9faW9tZW0gKikgcnhwX2Rlc2MgKyBDMl9SWFBfQUREUik7CisJCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihSWFBfSFJYRF9VTklOSVQpLAorCQkJICAgICAodm9pZCBfX2lvbWVtICopIHJ4cF9kZXNjICsgQzJfUlhQX0ZMQUdTKTsKKworCQllbGVtLT5za2IgPSBOVUxMOworCQllbGVtLT5odF9kZXNjID0gcnhfZGVzYzsKKwkJZWxlbS0+aHdfZGVzYyA9IHJ4cF9kZXNjOworCisJCWlmIChpID09IHJ4X3JpbmctPmNvdW50IC0gMSkgeworCQkJZWxlbS0+bmV4dCA9IHJ4X3JpbmctPnN0YXJ0OworCQkJcnhfZGVzYy0+bmV4dF9vZmZzZXQgPSBiYXNlOworCQl9IGVsc2UgeworCQkJZWxlbS0+bmV4dCA9IGVsZW0gKyAxOworCQkJcnhfZGVzYy0+bmV4dF9vZmZzZXQgPQorCQkJICAgIGJhc2UgKyAoaSArIDEpICogc2l6ZW9mKCpyeF9kZXNjKTsKKwkJfQorCX0KKworCXJ4X3JpbmctPnRvX3VzZSA9IHJ4X3JpbmctPnRvX2NsZWFuID0gcnhfcmluZy0+c3RhcnQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogU2V0dXAgYnVmZmVyIGZvciByZWNlaXZpbmcgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGMyX3J4X2FsbG9jKHN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0LCBzdHJ1Y3QgYzJfZWxlbWVudCAqZWxlbSkKK3sKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldiA9IGMyX3BvcnQtPmMyZGV2OworCXN0cnVjdCBjMl9yeF9kZXNjICpyeF9kZXNjID0gZWxlbS0+aHRfZGVzYzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgbWFwYWRkcjsKKwl1MzIgbWFwbGVuOworCXN0cnVjdCBjMl9yeHBfaGRyICpyeHBfaGRyOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihjMl9wb3J0LT5yeF9idWZfc2l6ZSk7CisJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCXByX2RlYnVnKCIlczogb3V0IG9mIG1lbW9yeSBmb3IgcmVjZWl2ZVxuIiwKKwkJCWMyX3BvcnQtPm5ldGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIFplcm8gb3V0IHRoZSByeHAgaGRyIGluIHRoZSBza19idWZmICovCisJbWVtc2V0KHNrYi0+ZGF0YSwgMCwgc2l6ZW9mKCpyeHBfaGRyKSk7CisKKwlza2ItPmRldiA9IGMyX3BvcnQtPm5ldGRldjsKKworCW1hcGxlbiA9IGMyX3BvcnQtPnJ4X2J1Zl9zaXplOworCW1hcGFkZHIgPQorCSAgICBwY2lfbWFwX3NpbmdsZShjMmRldi0+cGNpZGV2LCBza2ItPmRhdGEsIG1hcGxlbiwKKwkJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkvKiBTZXQgdGhlIHNrX2J1ZmYgUlhQX2hlYWRlciB0byBSWFBfSFJYRF9SRUFEWSAqLworCXJ4cF9oZHIgPSAoc3RydWN0IGMyX3J4cF9oZHIgKikgc2tiLT5kYXRhOworCXJ4cF9oZHItPmZsYWdzID0gUlhQX0hSWERfUkVBRFk7CisKKwlfX3Jhd193cml0ZXcoMCwgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9TVEFUVVMpOworCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodTE2KSBtYXBsZW4gLSBzaXplb2YoKnJ4cF9oZHIpKSwKKwkJICAgICBlbGVtLT5od19kZXNjICsgQzJfUlhQX0xFTik7CisJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KG1hcGFkZHIpLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX0FERFIpOworCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihSWFBfSFJYRF9SRUFEWSksIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOworCisJZWxlbS0+c2tiID0gc2tiOworCWVsZW0tPm1hcGFkZHIgPSBtYXBhZGRyOworCWVsZW0tPm1hcGxlbiA9IG1hcGxlbjsKKwlyeF9kZXNjLT5sZW4gPSBtYXBsZW47CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFsbG9jYXRlIGJ1ZmZlcnMgZm9yIHRoZSBSeCByaW5nCisgKiBGb3IgcmVjZWl2ZTogIHJ4X3JpbmcudG9fY2xlYW4gaXMgbmV4dCByZWNlaXZlZCBmcmFtZQorICovCitzdGF0aWMgaW50IGMyX3J4X2ZpbGwoc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQpCit7CisJc3RydWN0IGMyX3JpbmcgKnJ4X3JpbmcgPSAmYzJfcG9ydC0+cnhfcmluZzsKKwlzdHJ1Y3QgYzJfZWxlbWVudCAqZWxlbTsKKwlpbnQgcmV0ID0gMDsKKworCWVsZW0gPSByeF9yaW5nLT5zdGFydDsKKwlkbyB7CisJCWlmIChjMl9yeF9hbGxvYyhjMl9wb3J0LCBlbGVtKSkgeworCQkJcmV0ID0gMTsKKwkJCWJyZWFrOworCQl9CisJfSB3aGlsZSAoKGVsZW0gPSBlbGVtLT5uZXh0KSAhPSByeF9yaW5nLT5zdGFydCk7CisKKwlyeF9yaW5nLT50b19jbGVhbiA9IHJ4X3JpbmctPnN0YXJ0OworCXJldHVybiByZXQ7Cit9CisKKy8qIEZyZWUgYWxsIGJ1ZmZlcnMgaW4gUlggcmluZywgYXNzdW1lcyByZWNlaXZlciBzdG9wcGVkICovCitzdGF0aWMgdm9pZCBjMl9yeF9jbGVhbihzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCkKK3sKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldiA9IGMyX3BvcnQtPmMyZGV2OworCXN0cnVjdCBjMl9yaW5nICpyeF9yaW5nID0gJmMyX3BvcnQtPnJ4X3Jpbmc7CisJc3RydWN0IGMyX2VsZW1lbnQgKmVsZW07CisJc3RydWN0IGMyX3J4X2Rlc2MgKnJ4X2Rlc2M7CisKKwllbGVtID0gcnhfcmluZy0+c3RhcnQ7CisJZG8geworCQlyeF9kZXNjID0gZWxlbS0+aHRfZGVzYzsKKwkJcnhfZGVzYy0+bGVuID0gMDsKKworCQlfX3Jhd193cml0ZXcoMCwgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9TVEFUVVMpOworCQlfX3Jhd193cml0ZXcoMCwgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9DT1VOVCk7CisJCV9fcmF3X3dyaXRldygwLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX0xFTik7CisJCV9fcmF3X3dyaXRlcShjcHVfdG9fYmU2NCgweDk5YWFiYmNjZGRlZWZmVUxMKSwKKwkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9BRERSKTsKKwkJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFJYUF9IUlhEX1VOSU5JVCksCisJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOworCisJCWlmIChlbGVtLT5za2IpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUoYzJkZXYtPnBjaWRldiwgZWxlbS0+bWFwYWRkciwKKwkJCQkJIGVsZW0tPm1hcGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWRldl9rZnJlZV9za2IoZWxlbS0+c2tiKTsKKwkJCWVsZW0tPnNrYiA9IE5VTEw7CisJCX0KKwl9IHdoaWxlICgoZWxlbSA9IGVsZW0tPm5leHQpICE9IHJ4X3JpbmctPnN0YXJ0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYzJfdHhfZnJlZShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX2VsZW1lbnQgKmVsZW0pCit7CisJc3RydWN0IGMyX3R4X2Rlc2MgKnR4X2Rlc2MgPSBlbGVtLT5odF9kZXNjOworCisJdHhfZGVzYy0+bGVuID0gMDsKKworCXBjaV91bm1hcF9zaW5nbGUoYzJkZXYtPnBjaWRldiwgZWxlbS0+bWFwYWRkciwgZWxlbS0+bWFwbGVuLAorCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCisJaWYgKGVsZW0tPnNrYikgeworCQlkZXZfa2ZyZWVfc2tiX2FueShlbGVtLT5za2IpOworCQllbGVtLT5za2IgPSBOVUxMOworCX0KKworCXJldHVybiAwOworfQorCisvKiBGcmVlIGFsbCBidWZmZXJzIGluIFRYIHJpbmcsIGFzc3VtZXMgdHJhbnNtaXR0ZXIgc3RvcHBlZCAqLworc3RhdGljIHZvaWQgYzJfdHhfY2xlYW4oc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQpCit7CisJc3RydWN0IGMyX3JpbmcgKnR4X3JpbmcgPSAmYzJfcG9ydC0+dHhfcmluZzsKKwlzdHJ1Y3QgYzJfZWxlbWVudCAqZWxlbTsKKwlzdHJ1Y3QgYzJfdHhwX2Rlc2MgdHhwX2h0eGQ7CisJaW50IHJldHJ5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYzJfcG9ydC0+dHhfbG9jaywgZmxhZ3MpOworCisJZWxlbSA9IHR4X3JpbmctPnN0YXJ0OworCisJZG8geworCQlyZXRyeSA9IDA7CisJCWRvIHsKKwkJCXR4cF9odHhkLmZsYWdzID0KKwkJCSAgICByZWFkdyhlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKKworCQkJaWYgKHR4cF9odHhkLmZsYWdzID09IFRYUF9IVFhEX1JFQURZKSB7CisJCQkJcmV0cnkgPSAxOworCQkJCV9fcmF3X3dyaXRldygwLAorCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfTEVOKTsKKwkJCQlfX3Jhd193cml0ZXEoMCwKKwkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0FERFIpOworCQkJCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihUWFBfSFRYRF9ET05FKSwKKwkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKKwkJCQljMl9wb3J0LT5uZXRzdGF0cy50eF9kcm9wcGVkKys7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UgeworCQkJCV9fcmF3X3dyaXRldygwLAorCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfTEVOKTsKKwkJCQlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQoMHgxMTIyMzM0NDU1NjY3Nzg4VUxMKSwKKwkJCQkJICAgICBlbGVtLT5od19kZXNjICsgQzJfVFhQX0FERFIpOworCQkJCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihUWFBfSFRYRF9VTklOSVQpLAorCQkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOworCQkJfQorCisJCQljMl90eF9mcmVlKGMyX3BvcnQtPmMyZGV2LCBlbGVtKTsKKworCQl9IHdoaWxlICgoZWxlbSA9IGVsZW0tPm5leHQpICE9IHR4X3JpbmctPnN0YXJ0KTsKKwl9IHdoaWxlIChyZXRyeSk7CisKKwljMl9wb3J0LT50eF9hdmFpbCA9IGMyX3BvcnQtPnR4X3JpbmcuY291bnQgLSAxOworCWMyX3BvcnQtPmMyZGV2LT5jdXJfdHggPSB0eF9yaW5nLT50b191c2UgLSB0eF9yaW5nLT5zdGFydDsKKworCWlmIChjMl9wb3J0LT50eF9hdmFpbCA+IE1BWF9TS0JfRlJBR1MgKyAxKQorCQluZXRpZl93YWtlX3F1ZXVlKGMyX3BvcnQtPm5ldGRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjMl9wb3J0LT50eF9sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBQcm9jZXNzIHRyYW5zbWl0IGRlc2NyaXB0b3JzIG1hcmtlZCAnRE9ORScgYnkgdGhlIGZpcm13YXJlLAorICogZnJlZWluZyB1cCB0aGVpciB1bm5lZWRlZCBza19idWZmcy4KKyAqLworc3RhdGljIHZvaWQgYzJfdHhfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gYzJfcG9ydC0+YzJkZXY7CisJc3RydWN0IGMyX3JpbmcgKnR4X3JpbmcgPSAmYzJfcG9ydC0+dHhfcmluZzsKKwlzdHJ1Y3QgYzJfZWxlbWVudCAqZWxlbTsKKwlzdHJ1Y3QgYzJfdHhwX2Rlc2MgdHhwX2h0eGQ7CisKKwlzcGluX2xvY2soJmMyX3BvcnQtPnR4X2xvY2spOworCisJZm9yIChlbGVtID0gdHhfcmluZy0+dG9fY2xlYW47IGVsZW0gIT0gdHhfcmluZy0+dG9fdXNlOworCSAgICAgZWxlbSA9IGVsZW0tPm5leHQpIHsKKwkJdHhwX2h0eGQuZmxhZ3MgPQorCQkgICAgYmUxNl90b19jcHUocmVhZHcoZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9GTEFHUykpOworCisJCWlmICh0eHBfaHR4ZC5mbGFncyAhPSBUWFBfSFRYRF9ET05FKQorCQkJYnJlYWs7CisKKwkJaWYgKG5ldGlmX21zZ190eF9kb25lKGMyX3BvcnQpKSB7CisJCQkvKiBQQ0kgcmVhZHMgYXJlIGV4cGVuc2l2ZSBpbiBmYXN0IHBhdGggKi8KKwkJCXR4cF9odHhkLmxlbiA9CisJCQkgICAgYmUxNl90b19jcHUocmVhZHcoZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9MRU4pKTsKKwkJCXByX2RlYnVnKCIlczogdHggZG9uZSBzbG90ICUzWnUgc3RhdHVzIDB4JXggbGVuICIKKwkJCQkiJTV1IGJ5dGVzXG4iLAorCQkJCW5ldGRldi0+bmFtZSwgZWxlbSAtIHR4X3JpbmctPnN0YXJ0LAorCQkJCXR4cF9odHhkLmZsYWdzLCB0eHBfaHR4ZC5sZW4pOworCQl9CisKKwkJYzJfdHhfZnJlZShjMmRldiwgZWxlbSk7CisJCSsrKGMyX3BvcnQtPnR4X2F2YWlsKTsKKwl9CisKKwl0eF9yaW5nLT50b19jbGVhbiA9IGVsZW07CisKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpCisJICAgICYmIGMyX3BvcnQtPnR4X2F2YWlsID4gTUFYX1NLQl9GUkFHUyArIDEpCisJCW5ldGlmX3dha2VfcXVldWUobmV0ZGV2KTsKKworCXNwaW5fdW5sb2NrKCZjMl9wb3J0LT50eF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgYzJfcnhfZXJyb3Ioc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQsIHN0cnVjdCBjMl9lbGVtZW50ICplbGVtKQoreworCXN0cnVjdCBjMl9yeF9kZXNjICpyeF9kZXNjID0gZWxlbS0+aHRfZGVzYzsKKwlzdHJ1Y3QgYzJfcnhwX2hkciAqcnhwX2hkciA9IChzdHJ1Y3QgYzJfcnhwX2hkciAqKSBlbGVtLT5za2ItPmRhdGE7CisKKwlpZiAocnhwX2hkci0+c3RhdHVzICE9IFJYUF9IUlhEX09LIHx8CisJICAgIHJ4cF9oZHItPmxlbiA+IChyeF9kZXNjLT5sZW4gLSBzaXplb2YoKnJ4cF9oZHIpKSkgeworCQlwcl9kZWJ1ZygiQkFEIFJYUF9IUlhEXG4iKTsKKwkJcHJfZGVidWcoIiAgcnhfZGVzYyA6ICVwXG4iLCByeF9kZXNjKTsKKwkJcHJfZGVidWcoIiAgICBpbmRleCA6ICVadVxuIiwKKwkJCWVsZW0gLSBjMl9wb3J0LT5yeF9yaW5nLnN0YXJ0KTsKKwkJcHJfZGVidWcoIiAgICBsZW4gICA6ICV1XG4iLCByeF9kZXNjLT5sZW4pOworCQlwcl9kZWJ1ZygiICByeHBfaGRyIDogJXAgW1BBICVwXVxuIiwgcnhwX2hkciwKKwkJCSh2b2lkICopIF9fcGEoKHVuc2lnbmVkIGxvbmcpIHJ4cF9oZHIpKTsKKwkJcHJfZGVidWcoIiAgICBmbGFncyA6IDB4JXhcbiIsIHJ4cF9oZHItPmZsYWdzKTsKKwkJcHJfZGVidWcoIiAgICBzdGF0dXM6IDB4JXhcbiIsIHJ4cF9oZHItPnN0YXR1cyk7CisJCXByX2RlYnVnKCIgICAgbGVuICAgOiAldVxuIiwgcnhwX2hkci0+bGVuKTsKKwkJcHJfZGVidWcoIiAgICByc3ZkICA6IDB4JXhcbiIsIHJ4cF9oZHItPnJzdmQpOworCX0KKworCS8qIFNldHVwIHRoZSBza2IgZm9yIHJldXNlIHNpbmNlIHdlJ3JlIGRyb3BwaW5nIHRoaXMgcGt0ICovCisJZWxlbS0+c2tiLT50YWlsID0gZWxlbS0+c2tiLT5kYXRhID0gZWxlbS0+c2tiLT5oZWFkOworCisJLyogWmVybyBvdXQgdGhlIHJ4cCBoZHIgaW4gdGhlIHNrX2J1ZmYgKi8KKwltZW1zZXQoZWxlbS0+c2tiLT5kYXRhLCAwLCBzaXplb2YoKnJ4cF9oZHIpKTsKKworCS8qIFdyaXRlIHRoZSBkZXNjcmlwdG9yIHRvIHRoZSBhZGFwdGVyJ3MgcnggcmluZyAqLworCV9fcmF3X3dyaXRldygwLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX1NUQVRVUyk7CisJX19yYXdfd3JpdGV3KDAsIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfQ09VTlQpOworCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNigodTE2KSBlbGVtLT5tYXBsZW4gLSBzaXplb2YoKnJ4cF9oZHIpKSwKKwkJICAgICBlbGVtLT5od19kZXNjICsgQzJfUlhQX0xFTik7CisJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KGVsZW0tPm1hcGFkZHIpLCBlbGVtLT5od19kZXNjICsgQzJfUlhQX0FERFIpOworCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihSWFBfSFJYRF9SRUFEWSksIGVsZW0tPmh3X2Rlc2MgKyBDMl9SWFBfRkxBR1MpOworCisJcHJfZGVidWcoInBhY2tldCBkcm9wcGVkXG4iKTsKKwljMl9wb3J0LT5uZXRzdGF0cy5yeF9kcm9wcGVkKys7Cit9CisKK3N0YXRpYyB2b2lkIGMyX3J4X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldiA9IGMyX3BvcnQtPmMyZGV2OworCXN0cnVjdCBjMl9yaW5nICpyeF9yaW5nID0gJmMyX3BvcnQtPnJ4X3Jpbmc7CisJc3RydWN0IGMyX2VsZW1lbnQgKmVsZW07CisJc3RydWN0IGMyX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJc3RydWN0IGMyX3J4cF9oZHIgKnJ4cF9oZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IG1hcGFkZHI7CisJdTMyIG1hcGxlbiwgYnVmbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYzJkZXYtPmxvY2ssIGZsYWdzKTsKKworCS8qIEJlZ2luIHdoZXJlIHdlIGxlZnQgb2ZmICovCisJcnhfcmluZy0+dG9fY2xlYW4gPSByeF9yaW5nLT5zdGFydCArIGMyZGV2LT5jdXJfcng7CisKKwlmb3IgKGVsZW0gPSByeF9yaW5nLT50b19jbGVhbjsgZWxlbS0+bmV4dCAhPSByeF9yaW5nLT50b19jbGVhbjsKKwkgICAgIGVsZW0gPSBlbGVtLT5uZXh0KSB7CisJCXJ4X2Rlc2MgPSBlbGVtLT5odF9kZXNjOworCQltYXBhZGRyID0gZWxlbS0+bWFwYWRkcjsKKwkJbWFwbGVuID0gZWxlbS0+bWFwbGVuOworCQlza2IgPSBlbGVtLT5za2I7CisJCXJ4cF9oZHIgPSAoc3RydWN0IGMyX3J4cF9oZHIgKikgc2tiLT5kYXRhOworCisJCWlmIChyeHBfaGRyLT5mbGFncyAhPSBSWFBfSFJYRF9ET05FKQorCQkJYnJlYWs7CisJCWJ1ZmxlbiA9IHJ4cF9oZHItPmxlbjsKKworCQkvKiBTYW5pdHkgY2hlY2sgdGhlIFJYUCBoZWFkZXIgKi8KKwkJaWYgKHJ4cF9oZHItPnN0YXR1cyAhPSBSWFBfSFJYRF9PSyB8fAorCQkgICAgYnVmbGVuID4gKHJ4X2Rlc2MtPmxlbiAtIHNpemVvZigqcnhwX2hkcikpKSB7CisJCQljMl9yeF9lcnJvcihjMl9wb3J0LCBlbGVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogQWxsb2NhdGUgYW5kIG1hcCBhIG5ldyBza2IgZm9yIHJlcGxlbmlzaGluZyB0aGUgaG9zdAorCQkgKiBSWCBkZXNjCisJCSAqLworCQlpZiAoYzJfcnhfYWxsb2MoYzJfcG9ydCwgZWxlbSkpIHsKKwkJCWMyX3J4X2Vycm9yKGMyX3BvcnQsIGVsZW0pOworCQkJY29udGludWU7CisJCX0KKworCQkvKiBVbm1hcCB0aGUgb2xkIHNrYiAqLworCQlwY2lfdW5tYXBfc2luZ2xlKGMyZGV2LT5wY2lkZXYsIG1hcGFkZHIsIG1hcGxlbiwKKwkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQlwcmVmZXRjaChza2ItPmRhdGEpOworCisJCS8qCisJCSAqIFNraXAgcGFzdCB0aGUgbGVhZGluZyA4IGJ5dGVzIGNvbXByaXNpbmcgb2YgdGhlCisJCSAqICJzdHJ1Y3QgYzJfcnhwX2hkciIsIHByZXBlbmRlZCBieSB0aGUgYWRhcHRlcgorCQkgKiB0byB0aGUgdXN1YWwgRXRoZXJuZXQgaGVhZGVyICgic3RydWN0IGV0aGhkciIpLAorCQkgKiB0byB0aGUgc3RhcnQgb2YgdGhlIHJhdyBFdGhlcm5ldCBwYWNrZXQuCisJCSAqCisJCSAqIEZpeCB1cCB0aGUgdmFyaW91cyBmaWVsZHMgaW4gdGhlIHNrX2J1ZmYgYmVmb3JlCisJCSAqIHBhc3NpbmcgaXQgdXAgdG8gbmV0aWZfcngoKS4gVGhlIHRyYW5zZmVyIHNpemUKKwkJICogKGluIGJ5dGVzKSBzcGVjaWZpZWQgYnkgdGhlIGFkYXB0ZXIgbGVuIGZpZWxkIG9mCisJCSAqIHRoZSAic3RydWN0IHJ4cF9oZHJfdCIgZG9lcyBOT1QgaW5jbHVkZSB0aGUKKwkJICogInNpemVvZihzdHJ1Y3QgYzJfcnhwX2hkcikiLgorCQkgKi8KKwkJc2tiLT5kYXRhICs9IHNpemVvZigqcnhwX2hkcik7CisJCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YSArIGJ1ZmxlbjsKKwkJc2tiLT5sZW4gPSBidWZsZW47CisJCXNrYi0+ZGV2ID0gbmV0ZGV2OworCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCisJCW5ldGlmX3J4KHNrYik7CisKKwkJbmV0ZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwkJYzJfcG9ydC0+bmV0c3RhdHMucnhfcGFja2V0cysrOworCQljMl9wb3J0LT5uZXRzdGF0cy5yeF9ieXRlcyArPSBidWZsZW47CisJfQorCisJLyogU2F2ZSB3aGVyZSB3ZSBsZWZ0IG9mZiAqLworCXJ4X3JpbmctPnRvX2NsZWFuID0gZWxlbTsKKwljMmRldi0+Y3VyX3J4ID0gZWxlbSAtIHJ4X3JpbmctPnN0YXJ0OworCUMyX1NFVF9DVVJfUlgoYzJkZXYsIGMyZGV2LT5jdXJfcngpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYzJkZXYtPmxvY2ssIGZsYWdzKTsKK30KKworLyoKKyAqIEhhbmRsZSBuZXRpc3IwIFRYICYgUlggaW50ZXJydXB0cy4KKyAqLworc3RhdGljIGlycXJldHVybl90IGMyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGludCBuZXRpc3IwLCBkbWFpc3I7CisJaW50IGhhbmRsZWQgPSAwOworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gKHN0cnVjdCBjMl9kZXYgKikgZGV2X2lkOworCisJLyogUHJvY2VzcyBDQ0lMTkVUIGludGVycnVwdHMgKi8KKwluZXRpc3IwID0gcmVhZGwoYzJkZXYtPnJlZ3MgKyBDMl9OSVNSMCk7CisJaWYgKG5ldGlzcjApIHsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBhbiBpc3N1ZSB3aXRoIHRoZSBmaXJtd2FyZSB0aGF0IGFsd2F5cworCQkgKiBwcm92aWRlcyB0aGUgc3RhdHVzIG9mIFJYIGZvciBib3RoIFRYICYgUlgKKwkJICogaW50ZXJydXB0cy4gIFNvIHByb2Nlc3MgYm90aCBxdWV1ZXMgaGVyZS4KKwkJICovCisJCWMyX3J4X2ludGVycnVwdChjMmRldi0+bmV0ZGV2KTsKKwkJYzJfdHhfaW50ZXJydXB0KGMyZGV2LT5uZXRkZXYpOworCisJCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KKwkJd3JpdGVsKG5ldGlzcjAsIGMyZGV2LT5yZWdzICsgQzJfTklTUjApOworCQloYW5kbGVkKys7CisJfQorCisJLyogUHJvY2VzcyBSTklDIGludGVycnVwdHMgKi8KKwlkbWFpc3IgPSByZWFkbChjMmRldi0+cmVncyArIEMyX0RJU1IpOworCWlmIChkbWFpc3IpIHsKKwkJd3JpdGVsKGRtYWlzciwgYzJkZXYtPnJlZ3MgKyBDMl9ESVNSKTsKKwkJYzJfcm5pY19pbnRlcnJ1cHQoYzJkZXYpOworCQloYW5kbGVkKys7CisJfQorCisJaWYgKGhhbmRsZWQpIHsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0gZWxzZSB7CisJCXJldHVybiBJUlFfTk9ORTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYzJfdXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSBjMl9wb3J0LT5jMmRldjsKKwlzdHJ1Y3QgYzJfZWxlbWVudCAqZWxlbTsKKwlzdHJ1Y3QgYzJfcnhwX2hkciAqcnhwX2hkcjsKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CisJc2l6ZV90IHJ4X3NpemUsIHR4X3NpemU7CisJaW50IHJldCwgaTsKKwl1bnNpZ25lZCBpbnQgbmV0aW1yMDsKKworCWlmIChuZXRpZl9tc2dfaWZ1cChjMl9wb3J0KSkKKwkJcHJfZGVidWcoIiVzOiBlbmFibGluZyBpbnRlcmZhY2VcbiIsIG5ldGRldi0+bmFtZSk7CisKKwkvKiBTZXQgdGhlIFJ4IGJ1ZmZlciBzaXplIGJhc2VkIG9uIE1UVSAqLworCWMyX3NldF9yeGJ1ZnNpemUoYzJfcG9ydCk7CisKKwkvKiBBbGxvY2F0ZSBETUEnYWJsZSBtZW1vcnkgZm9yIFR4L1J4IGhvc3QgZGVzY3JpcHRvciByaW5ncyAqLworCXJ4X3NpemUgPSBjMl9wb3J0LT5yeF9yaW5nLmNvdW50ICogc2l6ZW9mKHN0cnVjdCBjMl9yeF9kZXNjKTsKKwl0eF9zaXplID0gYzJfcG9ydC0+dHhfcmluZy5jb3VudCAqIHNpemVvZihzdHJ1Y3QgYzJfdHhfZGVzYyk7CisKKwljMl9wb3J0LT5tZW1fc2l6ZSA9IHR4X3NpemUgKyByeF9zaXplOworCWMyX3BvcnQtPm1lbSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGMyZGV2LT5wY2lkZXYsIGMyX3BvcnQtPm1lbV9zaXplLAorCQkJCQkgICAgJmMyX3BvcnQtPmRtYSk7CisJaWYgKGMyX3BvcnQtPm1lbSA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCQkiaG9zdCBkZXNjcmlwdG9yIHJpbmdzXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGMyX3BvcnQtPm1lbSwgMCwgYzJfcG9ydC0+bWVtX3NpemUpOworCisJLyogQ3JlYXRlIHRoZSBSeCBob3N0IGRlc2NyaXB0b3IgcmluZyAqLworCWlmICgocmV0ID0KKwkgICAgIGMyX3J4X3JpbmdfYWxsb2MoJmMyX3BvcnQtPnJ4X3JpbmcsIGMyX3BvcnQtPm1lbSwgYzJfcG9ydC0+ZG1hLAorCQkJICAgICAgYzJkZXYtPm1taW9fcnhwX3JpbmcpKSkgeworCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIGNyZWF0ZSBSWCByaW5nXG4iKTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBSeCBidWZmZXJzIGZvciB0aGUgaG9zdCBkZXNjcmlwdG9yIHJpbmcgKi8KKwlpZiAoYzJfcnhfZmlsbChjMl9wb3J0KSkgeworCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIGZpbGwgUlggcmluZ1xuIik7CisJCWdvdG8gYmFpbDE7CisJfQorCisJLyogQ3JlYXRlIHRoZSBUeCBob3N0IGRlc2NyaXB0b3IgcmluZyAqLworCWlmICgocmV0ID0gYzJfdHhfcmluZ19hbGxvYygmYzJfcG9ydC0+dHhfcmluZywgYzJfcG9ydC0+bWVtICsgcnhfc2l6ZSwKKwkJCQkgICAgYzJfcG9ydC0+ZG1hICsgcnhfc2l6ZSwKKwkJCQkgICAgYzJkZXYtPm1taW9fdHhwX3JpbmcpKSkgeworCQlwcl9kZWJ1ZygiVW5hYmxlIHRvIGNyZWF0ZSBUWCByaW5nXG4iKTsKKwkJZ290byBiYWlsMTsKKwl9CisKKwkvKiBTZXQgdGhlIFRYIHBvaW50ZXIgdG8gd2hlcmUgd2UgbGVmdCBvZmYgKi8KKwljMl9wb3J0LT50eF9hdmFpbCA9IGMyX3BvcnQtPnR4X3JpbmcuY291bnQgLSAxOworCWMyX3BvcnQtPnR4X3JpbmcudG9fdXNlID0gYzJfcG9ydC0+dHhfcmluZy50b19jbGVhbiA9CisJICAgIGMyX3BvcnQtPnR4X3Jpbmcuc3RhcnQgKyBjMmRldi0+Y3VyX3R4OworCisJLyogbWlzc2luZzogSW5pdGlhbGl6ZSBNQUMgKi8KKworCUJVR19PTihjMl9wb3J0LT50eF9yaW5nLnRvX3VzZSAhPSBjMl9wb3J0LT50eF9yaW5nLnRvX2NsZWFuKTsKKworCS8qIFJlc2V0IHRoZSBhZGFwdGVyLCBlbnN1cmVzIHRoZSBkcml2ZXIgaXMgaW4gc3luYyB3aXRoIHRoZSBSWFAgKi8KKwljMl9yZXNldChjMl9wb3J0KTsKKworCS8qIFJlc2V0IHRoZSBSRUFEWSBiaXQgaW4gdGhlIHNrX2J1ZmYgUlhQIGhlYWRlcnMgJiBhZGFwdGVyIEhSWERRICovCisJZm9yIChpID0gMCwgZWxlbSA9IGMyX3BvcnQtPnJ4X3Jpbmcuc3RhcnQ7IGkgPCBjMl9wb3J0LT5yeF9yaW5nLmNvdW50OworCSAgICAgaSsrLCBlbGVtKyspIHsKKwkJcnhwX2hkciA9IChzdHJ1Y3QgYzJfcnhwX2hkciAqKSBlbGVtLT5za2ItPmRhdGE7CisJCXJ4cF9oZHItPmZsYWdzID0gMDsKKwkJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFJYUF9IUlhEX1JFQURZKSwKKwkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1JYUF9GTEFHUyk7CisJfQorCisJLyogRW5hYmxlIG5ldHdvcmsgcGFja2V0cyAqLworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKKwkvKiBFbmFibGUgSVJRICovCisJd3JpdGVsKDAsIGMyZGV2LT5yZWdzICsgQzJfSURJUyk7CisJbmV0aW1yMCA9IHJlYWRsKGMyZGV2LT5yZWdzICsgQzJfTklNUjApOworCW5ldGltcjAgJj0gfihDMl9QQ0lfSFRYX0lOVCB8IEMyX1BDSV9IUlhfSU5UKTsKKwl3cml0ZWwobmV0aW1yMCwgYzJkZXYtPnJlZ3MgKyBDMl9OSU1SMCk7CisKKwkvKiBUZWxsIHRoZSBzdGFjayB0byBpZ25vcmUgYXJwIHJlcXVlc3RzIGZvciBpcGFkZHJzIGJvdW5kIHRvCisJICogb3RoZXIgaW50ZXJmYWNlcy4gIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgdGhlIGhvc3Qgc3RhY2sKKwkgKiBmcm9tIHJlc3BvbmRpbmcgdG8gYXJwIHJlcXVlc3RzIHRvIHRoZSBpcGFkZHIgYm91bmQgb24gdGhlCisJICogcmRtYSBpbnRlcmZhY2UuCisJICovCisJaW5fZGV2ID0gaW5fZGV2X2dldChuZXRkZXYpOworCWluX2Rldi0+Y25mLmFycF9pZ25vcmUgPSAxOworCWluX2Rldl9wdXQoaW5fZGV2KTsKKworCXJldHVybiAwOworCisgICAgICBiYWlsMToKKwljMl9yeF9jbGVhbihjMl9wb3J0KTsKKwlrZnJlZShjMl9wb3J0LT5yeF9yaW5nLnN0YXJ0KTsKKworICAgICAgYmFpbDA6CisJcGNpX2ZyZWVfY29uc2lzdGVudChjMmRldi0+cGNpZGV2LCBjMl9wb3J0LT5tZW1fc2l6ZSwgYzJfcG9ydC0+bWVtLAorCQkJICAgIGMyX3BvcnQtPmRtYSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGMyX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSBjMl9wb3J0LT5jMmRldjsKKworCWlmIChuZXRpZl9tc2dfaWZkb3duKGMyX3BvcnQpKQorCQlwcl9kZWJ1ZygiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsCisJCQluZXRkZXYtPm5hbWUpOworCisJLyogV2FpdCBmb3IgYWxsIHRoZSBxdWV1ZWQgcGFja2V0cyB0byBnZXQgc2VudCAqLworCWMyX3R4X2ludGVycnVwdChuZXRkZXYpOworCisJLyogRGlzYWJsZSBuZXR3b3JrIHBhY2tldHMgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBEaXNhYmxlIElSUXMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrICovCisJd3JpdGVsKDEsIGMyZGV2LT5yZWdzICsgQzJfSURJUyk7CisJd3JpdGVsKDAsIGMyZGV2LT5yZWdzICsgQzJfTklNUjApOworCisJLyogbWlzc2luZzogU3RvcCB0cmFuc21pdHRlciAqLworCisJLyogbWlzc2luZzogU3RvcCByZWNlaXZlciAqLworCisJLyogUmVzZXQgdGhlIGFkYXB0ZXIsIGVuc3VyZXMgdGhlIGRyaXZlciBpcyBpbiBzeW5jIHdpdGggdGhlIFJYUCAqLworCWMyX3Jlc2V0KGMyX3BvcnQpOworCisJLyogbWlzc2luZzogVHVybiBvZmYgTEVEcyBoZXJlICovCisKKwkvKiBGcmVlIGFsbCBidWZmZXJzIGluIHRoZSBob3N0IGRlc2NyaXB0b3IgcmluZ3MgKi8KKwljMl90eF9jbGVhbihjMl9wb3J0KTsKKwljMl9yeF9jbGVhbihjMl9wb3J0KTsKKworCS8qIEZyZWUgdGhlIGhvc3QgZGVzY3JpcHRvciByaW5ncyAqLworCWtmcmVlKGMyX3BvcnQtPnJ4X3Jpbmcuc3RhcnQpOworCWtmcmVlKGMyX3BvcnQtPnR4X3Jpbmcuc3RhcnQpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYzJkZXYtPnBjaWRldiwgYzJfcG9ydC0+bWVtX3NpemUsIGMyX3BvcnQtPm1lbSwKKwkJCSAgICBjMl9wb3J0LT5kbWEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGMyX3Jlc2V0KHN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0KQoreworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gYzJfcG9ydC0+YzJkZXY7CisJdW5zaWduZWQgaW50IGN1cl9yeCA9IGMyZGV2LT5jdXJfcng7CisKKwkvKiBUZWxsIHRoZSBoYXJkd2FyZSB0byBxdWllc2NlICovCisJQzJfU0VUX0NVUl9SWChjMmRldiwgY3VyX3J4IHwgQzJfUENJX0hSWF9RVUkpOworCisJLyoKKwkgKiBUaGUgaGFyZHdhcmUgd2lsbCByZXNldCB0aGUgQzJfUENJX0hSWF9RVUkgYml0IG9uY2UKKwkgKiB0aGUgUlhQIGlzIHF1aWVzY2VkLiAgV2FpdCAyIHNlY29uZHMgZm9yIHRoaXMuCisJICovCisJc3NsZWVwKDIpOworCisJY3VyX3J4ID0gQzJfR0VUX0NVUl9SWChjMmRldik7CisKKwlpZiAoY3VyX3J4ICYgQzJfUENJX0hSWF9RVUkpCisJCXByX2RlYnVnKCJjMl9yZXNldDogZmFpbGVkIHRvIHF1aWVzY2UgdGhlIGhhcmR3YXJlIVxuIik7CisKKwljdXJfcnggJj0gfkMyX1BDSV9IUlhfUVVJOworCisJYzJkZXYtPmN1cl9yeCA9IGN1cl9yeDsKKworCXByX2RlYnVnKCJDdXJyZW50IFJYOiAldVxuIiwgYzJkZXYtPmN1cl9yeCk7Cit9CisKK3N0YXRpYyBpbnQgYzJfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBjMl9wb3J0ICpjMl9wb3J0ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldiA9IGMyX3BvcnQtPmMyZGV2OworCXN0cnVjdCBjMl9yaW5nICp0eF9yaW5nID0gJmMyX3BvcnQtPnR4X3Jpbmc7CisJc3RydWN0IGMyX2VsZW1lbnQgKmVsZW07CisJZG1hX2FkZHJfdCBtYXBhZGRyOworCXUzMiBtYXBsZW47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjMl9wb3J0LT50eF9sb2NrLCBmbGFncyk7CisKKwlpZiAodW5saWtlbHkoYzJfcG9ydC0+dHhfYXZhaWwgPCAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMyX3BvcnQtPnR4X2xvY2ssIGZsYWdzKTsKKworCQlwcl9kZWJ1ZygiJXM6IFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKKwkJCW5ldGRldi0+bmFtZSk7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwltYXBsZW4gPSBza2JfaGVhZGxlbihza2IpOworCW1hcGFkZHIgPQorCSAgICBwY2lfbWFwX3NpbmdsZShjMmRldi0+cGNpZGV2LCBza2ItPmRhdGEsIG1hcGxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisKKwllbGVtID0gdHhfcmluZy0+dG9fdXNlOworCWVsZW0tPnNrYiA9IHNrYjsKKwllbGVtLT5tYXBhZGRyID0gbWFwYWRkcjsKKwllbGVtLT5tYXBsZW4gPSBtYXBsZW47CisKKwkvKiBUZWxsIEhXIHRvIHhtaXQgKi8KKwlfX3Jhd193cml0ZXEoY3B1X3RvX2JlNjQobWFwYWRkciksIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfQUREUik7CisJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KG1hcGxlbiksIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfTEVOKTsKKwlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYoVFhQX0hUWERfUkVBRFkpLCBlbGVtLT5od19kZXNjICsgQzJfVFhQX0ZMQUdTKTsKKworCWMyX3BvcnQtPm5ldHN0YXRzLnR4X3BhY2tldHMrKzsKKwljMl9wb3J0LT5uZXRzdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CisKKwkvKiBMb29wIHRocnUgYWRkaXRpb25hbCBkYXRhIGZyYWdtZW50cyBhbmQgcXVldWUgdGhlbSAqLworCWlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKKwkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCW1hcGxlbiA9IGZyYWctPnNpemU7CisJCQltYXBhZGRyID0KKwkJCSAgICBwY2lfbWFwX3BhZ2UoYzJkZXYtPnBjaWRldiwgZnJhZy0+cGFnZSwKKwkJCQkJIGZyYWctPnBhZ2Vfb2Zmc2V0LCBtYXBsZW4sCisJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKKworCQkJZWxlbSA9IGVsZW0tPm5leHQ7CisJCQllbGVtLT5za2IgPSBOVUxMOworCQkJZWxlbS0+bWFwYWRkciA9IG1hcGFkZHI7CisJCQllbGVtLT5tYXBsZW4gPSBtYXBsZW47CisKKwkJCS8qIFRlbGwgSFcgdG8geG1pdCAqLworCQkJX19yYXdfd3JpdGVxKGNwdV90b19iZTY0KG1hcGFkZHIpLAorCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9BRERSKTsKKwkJCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihtYXBsZW4pLAorCQkJCSAgICAgZWxlbS0+aHdfZGVzYyArIEMyX1RYUF9MRU4pOworCQkJX19yYXdfd3JpdGV3KGNwdV90b19iZTE2KFRYUF9IVFhEX1JFQURZKSwKKwkJCQkgICAgIGVsZW0tPmh3X2Rlc2MgKyBDMl9UWFBfRkxBR1MpOworCisJCQljMl9wb3J0LT5uZXRzdGF0cy50eF9wYWNrZXRzKys7CisJCQljMl9wb3J0LT5uZXRzdGF0cy50eF9ieXRlcyArPSBtYXBsZW47CisJCX0KKwl9CisKKwl0eF9yaW5nLT50b191c2UgPSBlbGVtLT5uZXh0OworCWMyX3BvcnQtPnR4X2F2YWlsIC09IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSk7CisKKwlpZiAoYzJfcG9ydC0+dHhfYXZhaWwgPD0gTUFYX1NLQl9GUkFHUyArIDEpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChjMl9wb3J0KSkKKwkJCXByX2RlYnVnKCIlczogdHJhbnNtaXQgcXVldWUgZnVsbFxuIiwKKwkJCQluZXRkZXYtPm5hbWUpOworCX0KKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMyX3BvcnQtPnR4X2xvY2ssIGZsYWdzKTsKKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpjMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgYzJfcG9ydCAqYzJfcG9ydCA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlyZXR1cm4gJmMyX3BvcnQtPm5ldHN0YXRzOworfQorCitzdGF0aWMgdm9pZCBjMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKG5ldGlmX21zZ190aW1lcihjMl9wb3J0KSkKKwkJcHJfZGVidWcoIiVzOiB0eCB0aW1lb3V0XG4iLCBuZXRkZXYtPm5hbWUpOworCisJYzJfdHhfY2xlYW4oYzJfcG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgYzJfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4gfHwgbmV3X210dSA+IEVUSF9KVU1CT19NVFUpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQljMl9kb3duKG5ldGRldik7CisKKwkJYzJfdXAobmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBJbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmMyX2RldmluaXQoc3RydWN0IGMyX2RldiAqYzJkZXYsCisJCQkJICAgICB2b2lkIF9faW9tZW0gKiBtbWlvX2FkZHIpCit7CisJc3RydWN0IGMyX3BvcnQgKmMyX3BvcnQgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmMyX3BvcnQpKTsKKworCWlmICghbmV0ZGV2KSB7CisJCXByX2RlYnVnKCJjMl9wb3J0IGV0aGVyZGV2IGFsbG9jIGZhaWxlZCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlTRVRfTU9EVUxFX09XTkVSKG5ldGRldik7CisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmYzJkZXYtPnBjaWRldi0+ZGV2KTsKKworCW5ldGRldi0+b3BlbiA9IGMyX3VwOworCW5ldGRldi0+c3RvcCA9IGMyX2Rvd247CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjMl94bWl0X2ZyYW1lOworCW5ldGRldi0+Z2V0X3N0YXRzID0gYzJfZ2V0X3N0YXRzOworCW5ldGRldi0+dHhfdGltZW91dCA9IGMyX3R4X3RpbWVvdXQ7CisJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gYzJfY2hhbmdlX210dTsKKwluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gQzJfVFhfVElNRU9VVDsKKwluZXRkZXYtPmlycSA9IGMyZGV2LT5wY2lkZXYtPmlycTsKKworCWMyX3BvcnQgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWMyX3BvcnQtPm5ldGRldiA9IG5ldGRldjsKKwljMl9wb3J0LT5jMmRldiA9IGMyZGV2OworCWMyX3BvcnQtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2cpOworCWMyX3BvcnQtPnR4X3JpbmcuY291bnQgPSBDMl9OVU1fVFhfREVTQzsKKwljMl9wb3J0LT5yeF9yaW5nLmNvdW50ID0gQzJfTlVNX1JYX0RFU0M7CisKKwlzcGluX2xvY2tfaW5pdCgmYzJfcG9ydC0+dHhfbG9jayk7CisKKwkvKiBDb3B5IG91ciA0OC1iaXQgZXRoZXJuZXQgaGFyZHdhcmUgYWRkcmVzcyAqLworCW1lbWNweV9mcm9taW8obmV0ZGV2LT5kZXZfYWRkciwgbW1pb19hZGRyICsgQzJfUkVHU19FTkFERFIsIDYpOworCisJLyogVmFsaWRhdGUgdGhlIE1BQyBhZGRyZXNzICovCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKSB7CisJCXByX2RlYnVnKCJJbnZhbGlkIE1BQyBBZGRyZXNzXG4iKTsKKwkJYzJfcHJpbnRfbWFjYWRkcihuZXRkZXYpOworCQlmcmVlX25ldGRldihuZXRkZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwljMmRldi0+bmV0ZGV2ID0gbmV0ZGV2OworCisJcmV0dXJuIG5ldGRldjsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgYzJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJaW50IHJldCA9IDAsIGk7CisJdW5zaWduZWQgbG9uZyByZWcwX3N0YXJ0LCByZWcwX2ZsYWdzLCByZWcwX2xlbjsKKwl1bnNpZ25lZCBsb25nIHJlZzJfc3RhcnQsIHJlZzJfZmxhZ3MsIHJlZzJfbGVuOworCXVuc2lnbmVkIGxvbmcgcmVnNF9zdGFydCwgcmVnNF9mbGFncywgcmVnNF9sZW47CisJdW5zaWduZWQga3ZhX21hcF9zaXplOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBOVUxMOworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gTlVMTDsKKwl2b2lkIF9faW9tZW0gKm1taW9fcmVncyA9IE5VTEw7CisKKwlwcmludGsoS0VSTl9JTkZPIFBGWCAiQU1TTzExMDAgR2lnYWJpdCBFdGhlcm5ldCBkcml2ZXIgdiVzIGxvYWRlZFxuIiwKKwkJRFJWX1ZFUlNJT04pOworCisJLyogRW5hYmxlIFBDSSBkZXZpY2UgKi8KKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwY2lkZXYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFVuYWJsZSB0byBlbmFibGUgUENJIGRldmljZVxuIiwKKwkJCXBjaV9uYW1lKHBjaWRldikpOworCQlnb3RvIGJhaWwwOworCX0KKworCXJlZzBfc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGNpZGV2LCBCQVJfMCk7CisJcmVnMF9sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgQkFSXzApOworCXJlZzBfZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGNpZGV2LCBCQVJfMCk7CisKKwlyZWcyX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgQkFSXzIpOworCXJlZzJfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwY2lkZXYsIEJBUl8yKTsKKwlyZWcyX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBjaWRldiwgQkFSXzIpOworCisJcmVnNF9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lkZXYsIEJBUl80KTsKKwlyZWc0X2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGNpZGV2LCBCQVJfNCk7CisJcmVnNF9mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhwY2lkZXYsIEJBUl80KTsKKworCXByX2RlYnVnKCJCQVIwIHNpemUgPSAweCVsWCBieXRlc1xuIiwgcmVnMF9sZW4pOworCXByX2RlYnVnKCJCQVIyIHNpemUgPSAweCVsWCBieXRlc1xuIiwgcmVnMl9sZW4pOworCXByX2RlYnVnKCJCQVI0IHNpemUgPSAweCVsWCBieXRlc1xuIiwgcmVnNF9sZW4pOworCisJLyogTWFrZSBzdXJlIFBDSSBiYXNlIGFkZHIgYXJlIE1NSU8gKi8KKwlpZiAoIShyZWcwX2ZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHx8CisJICAgICEocmVnMl9mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB8fCAhKHJlZzRfZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUENJIHJlZ2lvbnMgbm90IGFuIE1NSU8gcmVzb3VyY2VcbiIpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWwxOworCX0KKworCS8qIENoZWNrIGZvciB3ZWlyZC9icm9rZW4gUENJIHJlZ2lvbiByZXBvcnRpbmcgKi8KKwlpZiAoKHJlZzBfbGVuIDwgQzJfUkVHMF9TSVpFKSB8fAorCSAgICAocmVnMl9sZW4gPCBDMl9SRUcyX1NJWkUpIHx8IChyZWc0X2xlbiA8IEMyX1JFRzRfU0laRSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW52YWxpZCBQQ0kgcmVnaW9uIHNpemVzXG4iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBiYWlsMTsKKwl9CisKKwkvKiBSZXNlcnZlIFBDSSBJL08gYW5kIG1lbW9yeSByZXNvdXJjZXMgKi8KKwlyZXQgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaWRldiwgRFJWX05BTUUpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFVuYWJsZSB0byByZXF1ZXN0IHJlZ2lvbnNcbiIsCisJCQlwY2lfbmFtZShwY2lkZXYpKTsKKwkJZ290byBiYWlsMTsKKwl9CisKKwlpZiAoKHNpemVvZihkbWFfYWRkcl90KSA+IDQpKSB7CisJCXJldCA9IHBjaV9zZXRfZG1hX21hc2socGNpZGV2LCBETUFfNjRCSVRfTUFTSyk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICI2NGIgRE1BIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKKwkJCWdvdG8gYmFpbDI7CisJCX0KKwl9IGVsc2UgeworCQlyZXQgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BXzMyQklUX01BU0spOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiMzJiIERNQSBjb25maWd1cmF0aW9uIGZhaWxlZFxuIik7CisJCQlnb3RvIGJhaWwyOworCQl9CisJfQorCisJLyogRW5hYmxlcyBidXMtbWFzdGVyaW5nIG9uIHRoZSBkZXZpY2UgKi8KKwlwY2lfc2V0X21hc3RlcihwY2lkZXYpOworCisJLyogUmVtYXAgdGhlIGFkYXB0ZXIgUENJIHJlZ2lzdGVycyBpbiBCQVI0ICovCisJbW1pb19yZWdzID0gaW9yZW1hcF9ub2NhY2hlKHJlZzRfc3RhcnQgKyBDMl9QQ0lfUkVHU19PRkZTRVQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYzJfYWRhcHRlcl9wY2lfcmVncykpOworCWlmIChtbWlvX3JlZ3MgPT0gMFVMKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSJVbmFibGUgdG8gcmVtYXAgYWRhcHRlciBQQ0kgcmVnaXN0ZXJzIGluIEJBUjRcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGJhaWwyOworCX0KKworCS8qIFZhbGlkYXRlIFBDSSByZWdzIG1hZ2ljICovCisJZm9yIChpID0gMDsgaSA8IHNpemVvZihjMl9tYWdpYyk7IGkrKykgeworCQlpZiAoYzJfbWFnaWNbaV0gIT0gcmVhZGIobW1pb19yZWdzICsgQzJfUkVHU19NQUdJQyArIGkpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJEb3dubGV2ZWwgRmlybXdhcmUgYm9vdCBsb2FkZXIgIgorCQkJCSJbJWQvJVpkOiBnb3QgMHgleCwgZXhwIDB4JXhdLiBVc2UgdGhlIGNjX2ZsYXNoICIKKwkJCSAgICAgICAidXRpbGl0eSB0byB1cGRhdGUgeW91ciBib290IGxvYWRlclxuIiwKKwkJCQlpICsgMSwgc2l6ZW9mKGMyX21hZ2ljKSwKKwkJCQlyZWFkYihtbWlvX3JlZ3MgKyBDMl9SRUdTX01BR0lDICsgaSksCisJCQkJYzJfbWFnaWNbaV0pOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQWRhcHRlciBub3QgY2xhaW1lZFxuIik7CisJCQlpb3VubWFwKG1taW9fcmVncyk7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBiYWlsMjsKKwkJfQorCX0KKworCS8qIFZhbGlkYXRlIHRoZSBhZGFwdGVyIHZlcnNpb24gKi8KKwlpZiAoYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19WRVJTKSkgIT0gQzJfVkVSU0lPTikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJWZXJzaW9uIG1pc21hdGNoICIKKwkJCSJbZnc9JXUsIGMyPSV1XSwgQWRhcHRlciBub3QgY2xhaW1lZFxuIiwKKwkJCWJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfVkVSUykpLAorCQkJQzJfVkVSU0lPTik7CisJCXJldCA9IC1FSU5WQUw7CisJCWlvdW5tYXAobW1pb19yZWdzKTsKKwkJZ290byBiYWlsMjsKKwl9CisKKwkvKiBWYWxpZGF0ZSB0aGUgYWRhcHRlciBJVk4gKi8KKwlpZiAoYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19JVk4pKSAhPSBDMl9JVk4pIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRG93bmxldmVsIEZJcm13YXJlIGxldmVsLiBZb3Ugc2hvdWxkIGJlIHVzaW5nICIKKwkJICAgICAgICJ0aGUgT3BlbklCIGRldmljZSBzdXBwb3J0IGtpdC4gIgorCQkgICAgICAgIltmdz0weCV4LCBjMj0weCV4XSwgQWRhcHRlciBub3QgY2xhaW1lZFxuIiwKKwkJCWJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfSVZOKSksCisJCQlDMl9JVk4pOworCQlyZXQgPSAtRUlOVkFMOworCQlpb3VubWFwKG1taW9fcmVncyk7CisJCWdvdG8gYmFpbDI7CisJfQorCisJLyogQWxsb2NhdGUgaGFyZHdhcmUgc3RydWN0dXJlICovCisJYzJkZXYgPSAoc3RydWN0IGMyX2RldiAqKSBpYl9hbGxvY19kZXZpY2Uoc2l6ZW9mKCpjMmRldikpOworCWlmICghYzJkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFVuYWJsZSB0byBhbGxvYyBoYXJkd2FyZSBzdHJ1Y3RcbiIsCisJCQlwY2lfbmFtZShwY2lkZXYpKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJaW91bm1hcChtbWlvX3JlZ3MpOworCQlnb3RvIGJhaWwyOworCX0KKworCW1lbXNldChjMmRldiwgMCwgc2l6ZW9mKCpjMmRldikpOworCXNwaW5fbG9ja19pbml0KCZjMmRldi0+bG9jayk7CisJYzJkZXYtPnBjaWRldiA9IHBjaWRldjsKKwljMmRldi0+Y3VyX3R4ID0gMDsKKworCS8qIEdldCB0aGUgbGFzdCBSWCBpbmRleCAqLworCWMyZGV2LT5jdXJfcnggPQorCSAgICAoYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19IUlhfQ1VSKSkgLQorCSAgICAgMHhmZmZmYzAwMCkgLyBzaXplb2Yoc3RydWN0IGMyX3J4cF9kZXNjKTsKKworCS8qIFJlcXVlc3QgYW4gaW50ZXJydXB0IGxpbmUgZm9yIHRoZSBkcml2ZXIgKi8KKwlyZXQgPSByZXF1ZXN0X2lycShwY2lkZXYtPmlycSwgYzJfaW50ZXJydXB0LCBTQV9TSElSUSwgRFJWX05BTUUsIGMyZGV2KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByZXF1ZXN0ZWQgSVJRICV1IGlzIGJ1c3lcbiIsCisJCQlwY2lfbmFtZShwY2lkZXYpLCBwY2lkZXYtPmlycSk7CisJCWlvdW5tYXAobW1pb19yZWdzKTsKKwkJZ290byBiYWlsMzsKKwl9CisKKwkvKiBTZXQgZHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBjMmRldik7CisKKwkvKiBJbml0aWFsaXplIG5ldHdvcmsgZGV2aWNlICovCisJaWYgKChuZXRkZXYgPSBjMl9kZXZpbml0KGMyZGV2LCBtbWlvX3JlZ3MpKSA9PSBOVUxMKSB7CisJCWlvdW5tYXAobW1pb19yZWdzKTsKKwkJZ290byBiYWlsNDsKKwl9CisKKwkvKiBTYXZlIG9mZiB0aGUgYWN0dWFsIHNpemUgcHJpb3IgdG8gdW5tYXBwaW5nIG1taW9fcmVncyAqLworCWt2YV9tYXBfc2l6ZSA9IGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUENJX1dJTlNJWkUpKTsKKworCS8qIFVubWFwIHRoZSBhZGFwdGVyIFBDSSByZWdpc3RlcnMgaW4gQkFSNCAqLworCWlvdW5tYXAobW1pb19yZWdzKTsKKworCS8qIFJlZ2lzdGVyIG5ldHdvcmsgZGV2aWNlICovCisJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gcmVnaXN0ZXIgbmV0ZGV2LCByZXQgPSAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gYmFpbDU7CisJfQorCisJLyogRGlzYWJsZSBuZXR3b3JrIHBhY2tldHMgKi8KKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBSZW1hcCB0aGUgYWRhcHRlciBIUlhEUSBQQSBzcGFjZSB0byBrZXJuZWwgVkEgc3BhY2UgKi8KKwljMmRldi0+bW1pb19yeHBfcmluZyA9IGlvcmVtYXBfbm9jYWNoZShyZWc0X3N0YXJ0ICsgQzJfUlhQX0hSWERRX09GRlNFVCwKKwkJCQkJICAgICAgIEMyX1JYUF9IUlhEUV9TSVpFKTsKKwlpZiAoYzJkZXYtPm1taW9fcnhwX3JpbmcgPT0gMFVMKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZW1hcCBNTUlPIEhSWERRIHJlZ2lvblxuIik7CisJCXJldCA9IC1FSU87CisJCWdvdG8gYmFpbDY7CisJfQorCisJLyogUmVtYXAgdGhlIGFkYXB0ZXIgSFRYRFEgUEEgc3BhY2UgdG8ga2VybmVsIFZBIHNwYWNlICovCisJYzJkZXYtPm1taW9fdHhwX3JpbmcgPSBpb3JlbWFwX25vY2FjaGUocmVnNF9zdGFydCArIEMyX1RYUF9IVFhEUV9PRkZTRVQsCisJCQkJCSAgICAgICBDMl9UWFBfSFRYRFFfU0laRSk7CisJaWYgKGMyZGV2LT5tbWlvX3R4cF9yaW5nID09IDBVTCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJVbmFibGUgdG8gcmVtYXAgTU1JTyBIVFhEUSByZWdpb25cbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGJhaWw3OworCX0KKworCS8qIFNhdmUgb2ZmIHRoZSBjdXJyZW50IFJYIGluZGV4IGluIHRoZSBsYXN0IDQgYnl0ZXMgb2YgdGhlIFRYUCBSaW5nICovCisJQzJfU0VUX0NVUl9SWChjMmRldiwgYzJkZXYtPmN1cl9yeCk7CisKKwkvKiBSZW1hcCB0aGUgUENJIHJlZ2lzdGVycyBpbiBhZGFwdGVyIEJBUjAgdG8ga2VybmVsIFZBIHNwYWNlICovCisJYzJkZXYtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocmVnMF9zdGFydCwgcmVnMF9sZW4pOworCWlmIChjMmRldi0+cmVncyA9PSAwVUwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIHJlbWFwIEJBUjBcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIGJhaWw4OworCX0KKworCS8qIFJlbWFwIHRoZSBQQ0kgcmVnaXN0ZXJzIGluIGFkYXB0ZXIgQkFSNCB0byBrZXJuZWwgVkEgc3BhY2UgKi8KKwljMmRldi0+cGEgPSByZWc0X3N0YXJ0ICsgQzJfUENJX1JFR1NfT0ZGU0VUOworCWMyZGV2LT5rdmEgPSBpb3JlbWFwX25vY2FjaGUocmVnNF9zdGFydCArIEMyX1BDSV9SRUdTX09GRlNFVCwKKwkJCQkgICAgIGt2YV9tYXBfc2l6ZSk7CisJaWYgKGMyZGV2LT5rdmEgPT0gMFVMKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIlVuYWJsZSB0byByZW1hcCBCQVI0XG4iKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBiYWlsOTsKKwl9CisKKwkvKiBQcmludCBvdXQgdGhlIE1BQyBhZGRyZXNzICovCisJYzJfcHJpbnRfbWFjYWRkcihuZXRkZXYpOworCisJcmV0ID0gYzJfcm5pY19pbml0KGMyZGV2KTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImMyX3JuaWNfaW5pdCBmYWlsZWQ6ICVkXG4iLCByZXQpOworCQlnb3RvIGJhaWwxMDsKKwl9CisKKwljMl9yZWdpc3Rlcl9kZXZpY2UoYzJkZXYpOworCisJcmV0dXJuIDA7CisKKyBiYWlsMTA6CisJaW91bm1hcChjMmRldi0+a3ZhKTsKKworIGJhaWw5OgorCWlvdW5tYXAoYzJkZXYtPnJlZ3MpOworCisgYmFpbDg6CisJaW91bm1hcChjMmRldi0+bW1pb190eHBfcmluZyk7CisKKyBiYWlsNzoKKwlpb3VubWFwKGMyZGV2LT5tbWlvX3J4cF9yaW5nKTsKKworIGJhaWw2OgorCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisKKyBiYWlsNToKKwlmcmVlX25ldGRldihuZXRkZXYpOworCisgYmFpbDQ6CisJZnJlZV9pcnEocGNpZGV2LT5pcnEsIGMyZGV2KTsKKworIGJhaWwzOgorCWliX2RlYWxsb2NfZGV2aWNlKCZjMmRldi0+aWJkZXYpOworCisgYmFpbDI6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwY2lkZXYpOworCisgYmFpbDE6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBjaWRldik7CisKKyBiYWlsMDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgYzJfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwY2lkZXYpCit7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYzJkZXYtPm5ldGRldjsKKworCS8qIFVucmVnaXN0ZXIgd2l0aCBPcGVuSUIgKi8KKwljMl91bnJlZ2lzdGVyX2RldmljZShjMmRldik7CisKKwkvKiBDbGVhbiB1cCB0aGUgUk5JQyByZXNvdXJjZXMgKi8KKwljMl9ybmljX3Rlcm0oYzJkZXYpOworCisJLyogUmVtb3ZlIG5ldHdvcmsgZGV2aWNlIGZyb20gdGhlIGtlcm5lbCAqLworCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisKKwkvKiBGcmVlIG5ldHdvcmsgZGV2aWNlICovCisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKworCS8qIEZyZWUgdGhlIGludGVycnVwdCBsaW5lICovCisJZnJlZV9pcnEocGNpZGV2LT5pcnEsIGMyZGV2KTsKKworCS8qIG1pc3Npbmc6IFR1cm4gTEVEcyBvZmYgaGVyZSAqLworCisJLyogVW5tYXAgYWRhcHRlciBQQSBzcGFjZSAqLworCWlvdW5tYXAoYzJkZXYtPmt2YSk7CisJaW91bm1hcChjMmRldi0+cmVncyk7CisJaW91bm1hcChjMmRldi0+bW1pb190eHBfcmluZyk7CisJaW91bm1hcChjMmRldi0+bW1pb19yeHBfcmluZyk7CisKKwkvKiBGcmVlIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmUgKi8KKwlpYl9kZWFsbG9jX2RldmljZSgmYzJkZXYtPmliZGV2KTsKKworCS8qIFJlbGVhc2UgcmVzZXJ2ZWQgUENJIEkvTyBhbmQgbWVtb3J5IHJlc291cmNlcyAqLworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGNpZGV2KTsKKworCS8qIERpc2FibGUgUENJIGRldmljZSAqLworCXBjaV9kaXNhYmxlX2RldmljZShwY2lkZXYpOworCisJLyogQ2xlYXIgZHJpdmVyIHNwZWNpZmljIGRhdGEgKi8KKwlwY2lfc2V0X2RydmRhdGEocGNpZGV2LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGMyX3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBjMl9wY2lfdGFibGUsCisJLnByb2JlID0gYzJfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGMyX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBjMl9pbml0X21vZHVsZSh2b2lkKQoreworCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmMyX3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYzJfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmMyX3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjMl9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChjMl9leGl0X21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMTdkY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzIuaApAQCAtMCwwICsxLDU1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfX0MyX0gKKyNkZWZpbmUgX19DMl9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCisjaW5jbHVkZSAiYzJfcHJvdmlkZXIuaCIKKyNpbmNsdWRlICJjMl9tcS5oIgorI2luY2x1ZGUgImMyX3N0YXR1cy5oIgorCisjZGVmaW5lIERSVl9OQU1FICAgICAiYzIiCisjZGVmaW5lIERSVl9WRVJTSU9OICAiMS4xIgorI2RlZmluZSBQRlggICAgICAgICAgRFJWX05BTUUgIjogIgorCisjZGVmaW5lIEJBUl8wICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgQkFSXzIgICAgICAgICAgICAgICAgMgorI2RlZmluZSBCQVJfNCAgICAgICAgICAgICAgICA0CisKKyNkZWZpbmUgUlhfQlVGX1NJWkUgICAgICAgICAoMTUzNiArIDgpCisjZGVmaW5lIEVUSF9KVU1CT19NVFUgICAgICAgIDkwMDAKKyNkZWZpbmUgQzJfTUFHSUMgICAgICAgICAgICAiQ0VQSEVVUyIKKyNkZWZpbmUgQzJfVkVSU0lPTiAgICAgICAgICAgNAorI2RlZmluZSBDMl9JVk4gICAgICAgICAgICAgICgxOCAmIDB4N2ZmZmZmZmYpCisKKyNkZWZpbmUgQzJfUkVHMF9TSVpFICAgICAgICAoMTYgKiAxMDI0KQorI2RlZmluZSBDMl9SRUcyX1NJWkUgICAgICAgICgyICogMTAyNCAqIDEwMjQpCisjZGVmaW5lIEMyX1JFRzRfU0laRSAgICAgICAgKDI1NiAqIDEwMjQgKiAxMDI0KQorI2RlZmluZSBDMl9OVU1fVFhfREVTQyAgICAgICAzNDEKKyNkZWZpbmUgQzJfTlVNX1JYX0RFU0MgICAgICAgMjU2CisjZGVmaW5lIEMyX1BDSV9SRUdTX09GRlNFVCAgKDB4MTAwMDApCisjZGVmaW5lIEMyX1JYUF9IUlhEUV9PRkZTRVQgKCgoQzJfUkVHNF9TSVpFKS8yKSkKKyNkZWZpbmUgQzJfUlhQX0hSWERRX1NJWkUgICAoNDA5NikKKyNkZWZpbmUgQzJfVFhQX0hUWERRX09GRlNFVCAoKChDMl9SRUc0X1NJWkUpLzIpICsgQzJfUlhQX0hSWERRX1NJWkUpCisjZGVmaW5lIEMyX1RYUF9IVFhEUV9TSVpFICAgKDQwOTYpCisjZGVmaW5lIEMyX1RYX1RJTUVPVVQJICAgICg2KkhaKQorCisvKiBDRVBIRVVTICovCitzdGF0aWMgY29uc3QgdTggYzJfbWFnaWNbXSA9IHsKKwkweDQzLCAweDQ1LCAweDUwLCAweDQ4LCAweDQ1LCAweDU1LCAweDUzCit9OworCitlbnVtIGFkYXB0ZXJfcGNpX3JlZ3MgeworCUMyX1JFR1NfTUFHSUMgPSAweDAwMDAsCisJQzJfUkVHU19WRVJTID0gMHgwMDA4LAorCUMyX1JFR1NfSVZOID0gMHgwMDBDLAorCUMyX1JFR1NfUENJX1dJTlNJWkUgPSAweDAwMTAsCisJQzJfUkVHU19RMF9RU0laRSA9IDB4MDAxNCwKKwlDMl9SRUdTX1EwX01TR1NJWkUgPSAweDAwMTgsCisJQzJfUkVHU19RMF9QT09MU1RBUlQgPSAweDAwMUMsCisJQzJfUkVHU19RMF9TSEFSRUQgPSAweDAwMjAsCisJQzJfUkVHU19RMV9RU0laRSA9IDB4MDAyNCwKKwlDMl9SRUdTX1ExX01TR1NJWkUgPSAweDAwMjgsCisJQzJfUkVHU19RMV9TSEFSRUQgPSAweDAwMzAsCisJQzJfUkVHU19RMl9RU0laRSA9IDB4MDAzNCwKKwlDMl9SRUdTX1EyX01TR1NJWkUgPSAweDAwMzgsCisJQzJfUkVHU19RMl9TSEFSRUQgPSAweDAwNDAsCisJQzJfUkVHU19FTkFERFIgPSAweDAwNEMsCisJQzJfUkVHU19SRE1BX0VOQUREUiA9IDB4MDA1NCwKKwlDMl9SRUdTX0hSWF9DVVIgPSAweDAwNkMsCit9OworCitzdHJ1Y3QgYzJfYWRhcHRlcl9wY2lfcmVncyB7CisJY2hhciByZWdfbWFnaWNbOF07CisJdTMyIHZlcnNpb247CisJdTMyIGl2bjsKKwl1MzIgcGNpX3dpbmRvd19zaXplOworCXUzMiBxMF9xX3NpemU7CisJdTMyIHEwX21zZ19zaXplOworCXUzMiBxMF9wb29sX3N0YXJ0OworCXUzMiBxMF9zaGFyZWQ7CisJdTMyIHExX3Ffc2l6ZTsKKwl1MzIgcTFfbXNnX3NpemU7CisJdTMyIHExX3Bvb2xfc3RhcnQ7CisJdTMyIHExX3NoYXJlZDsKKwl1MzIgcTJfcV9zaXplOworCXUzMiBxMl9tc2dfc2l6ZTsKKwl1MzIgcTJfcG9vbF9zdGFydDsKKwl1MzIgcTJfc2hhcmVkOworCXUzMiBsb2dfc3RhcnQ7CisJdTMyIGxvZ19zaXplOworCXU4IGhvc3RfZW5hZGRyWzhdOworCXU4IHJkbWFfZW5hZGRyWzhdOworCXUzMiBjcmFzaF9lbnRyeTsKKwl1MzIgY3Jhc2hfcmVhZHlbMl07CisJdTMyIGZ3X3R4ZF9jdXI7CisJdTMyIGZ3X2hyeGRfY3VyOworCXUzMiBmd19yeGRfY3VyOworfTsKKworZW51bSBwY2lfcmVncyB7CisJQzJfSElTUiA9IDB4MDAwMCwKKwlDMl9ESVNSID0gMHgwMDA0LAorCUMyX0hJTVIgPSAweDAwMDgsCisJQzJfRElNUiA9IDB4MDAwQywKKwlDMl9OSVNSMCA9IDB4MDAxMCwKKwlDMl9OSVNSMSA9IDB4MDAxNCwKKwlDMl9OSU1SMCA9IDB4MDAxOCwKKwlDMl9OSU1SMSA9IDB4MDAxQywKKwlDMl9JRElTID0gMHgwMDIwLAorfTsKKworZW51bSB7CisJQzJfUENJX0hSWF9JTlQgPSAxIDw8IDgsCisJQzJfUENJX0hUWF9JTlQgPSAxIDw8IDE3LAorCUMyX1BDSV9IUlhfUVVJID0gMSA8PCAzMSwKK307CisKKy8qCisgKiBDZXBoZXVzIHJlZ2lzdGVycyBpbiBCQVIwLgorICovCitzdHJ1Y3QgYzJfcGNpX3JlZ3MgeworCXUzMiBob3N0aXNyOworCXUzMiBkbWFpc3I7CisJdTMyIGhvc3RpbXI7CisJdTMyIGRtYWltcjsKKwl1MzIgbmV0aXNyMDsKKwl1MzIgbmV0aXNyMTsKKwl1MzIgbmV0aW1yMDsKKwl1MzIgbmV0aW1yMTsKKwl1MzIgaW50X2Rpc2FibGU7Cit9OworCisvKiBUWFAgZmxhZ3MgKi8KK2VudW0gYzJfdHhwX2ZsYWdzIHsKKwlUWFBfSFRYRF9ET05FID0gMCwKKwlUWFBfSFRYRF9SRUFEWSA9IDEgPDwgMCwKKwlUWFBfSFRYRF9VTklOSVQgPSAxIDw8IDEsCit9OworCisvKiBSWFAgZmxhZ3MgKi8KK2VudW0gYzJfcnhwX2ZsYWdzIHsKKwlSWFBfSFJYRF9VTklOSVQgPSAwLAorCVJYUF9IUlhEX1JFQURZID0gMSA8PCAwLAorCVJYUF9IUlhEX0RPTkUgPSAxIDw8IDEsCit9OworCisvKiBSWFAgc3RhdHVzICovCitlbnVtIGMyX3J4cF9zdGF0dXMgeworCVJYUF9IUlhEX1pFUk8gPSAwLAorCVJYUF9IUlhEX09LID0gMSA8PCAwLAorCVJYUF9IUlhEX0JVRl9PViA9IDEgPDwgMSwKK307CisKKy8qIFRYUCBkZXNjcmlwdG9yIGZpZWxkcyAqLworZW51bSB0eHBfZGVzYyB7CisJQzJfVFhQX0ZMQUdTID0gMHgwMDAwLAorCUMyX1RYUF9MRU4gPSAweDAwMDIsCisJQzJfVFhQX0FERFIgPSAweDAwMDQsCit9OworCisvKiBSWFAgZGVzY3JpcHRvciBmaWVsZHMgKi8KK2VudW0gcnhwX2Rlc2MgeworCUMyX1JYUF9GTEFHUyA9IDB4MDAwMCwKKwlDMl9SWFBfU1RBVFVTID0gMHgwMDAyLAorCUMyX1JYUF9DT1VOVCA9IDB4MDAwNCwKKwlDMl9SWFBfTEVOID0gMHgwMDA2LAorCUMyX1JYUF9BRERSID0gMHgwMDA4LAorfTsKKworc3RydWN0IGMyX3R4cF9kZXNjIHsKKwl1MTYgZmxhZ3M7CisJdTE2IGxlbjsKKwl1NjQgYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJfcnhwX2Rlc2MgeworCXUxNiBmbGFnczsKKwl1MTYgc3RhdHVzOworCXUxNiBjb3VudDsKKwl1MTYgbGVuOworCXU2NCBhZGRyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBjMl9yeHBfaGRyIHsKKwl1MTYgZmxhZ3M7CisJdTE2IHN0YXR1czsKKwl1MTYgbGVuOworCXUxNiByc3ZkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBjMl90eF9kZXNjIHsKKwl1MzIgbGVuOworCXUzMiBzdGF0dXM7CisJZG1hX2FkZHJfdCBuZXh0X29mZnNldDsKK307CisKK3N0cnVjdCBjMl9yeF9kZXNjIHsKKwl1MzIgbGVuOworCXUzMiBzdGF0dXM7CisJZG1hX2FkZHJfdCBuZXh0X29mZnNldDsKK307CisKK3N0cnVjdCBjMl9hbGxvYyB7CisJdTMyIGxhc3Q7CisJdTMyIG1heDsKKwlzcGlubG9ja190IGxvY2s7CisJdW5zaWduZWQgbG9uZyAqdGFibGU7Cit9OworCitzdHJ1Y3QgYzJfYXJyYXkgeworCXN0cnVjdCB7CisJCXZvaWQgKipwYWdlOworCQlpbnQgdXNlZDsKKwl9ICpwYWdlX2xpc3Q7Cit9OworCisvKgorICogVGhlIE1RIHNoYXJlZCBwb2ludGVyIHBvb2wgaXMgb3JnYW5pemVkIGFzIGEgbGlua2VkIGxpc3Qgb2YKKyAqIGNodW5rcy4gRWFjaCBjaHVuayBjb250YWlucyBhIGxpbmtlZCBsaXN0IG9mIGZyZWUgc2hhcmVkIHBvaW50ZXJzCisgKiB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgdG8gYSBnaXZlbiB1c2VyIG1vZGUgY2xpZW50LgorICoKKyAqLworc3RydWN0IHNwX2NodW5rIHsKKwlzdHJ1Y3Qgc3BfY2h1bmsgKm5leHQ7CisJZG1hX2FkZHJfdCBkbWFfYWRkcjsKKwlERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpOworCXUxNiBoZWFkOworCXUxNiBzaGFyZWRfcHRyWzBdOworfTsKKworc3RydWN0IGMyX3BkX3RhYmxlIHsKKwl1MzIgbGFzdDsKKwl1MzIgbWF4OworCXNwaW5sb2NrX3QgbG9jazsKKwl1bnNpZ25lZCBsb25nICp0YWJsZTsKK307CisKK3N0cnVjdCBjMl9xcF90YWJsZSB7CisJc3RydWN0IGlkciBpZHI7CisJc3BpbmxvY2tfdCBsb2NrOworCWludCBsYXN0OworfTsKKworc3RydWN0IGMyX2VsZW1lbnQgeworCXN0cnVjdCBjMl9lbGVtZW50ICpuZXh0OworCXZvaWQgKmh0X2Rlc2M7CQkvKiBob3N0ICAgICBkZXNjcmlwdG9yICovCisJdm9pZCBfX2lvbWVtICpod19kZXNjOwkvKiBoYXJkd2FyZSBkZXNjcmlwdG9yICovCisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IG1hcGFkZHI7CisJdTMyIG1hcGxlbjsKK307CisKK3N0cnVjdCBjMl9yaW5nIHsKKwlzdHJ1Y3QgYzJfZWxlbWVudCAqdG9fY2xlYW47CisJc3RydWN0IGMyX2VsZW1lbnQgKnRvX3VzZTsKKwlzdHJ1Y3QgYzJfZWxlbWVudCAqc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBjb3VudDsKK307CisKK3N0cnVjdCBjMl9kZXYgeworCXN0cnVjdCBpYl9kZXZpY2UgaWJkZXY7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXZvaWQgX19pb21lbSAqbW1pb190eHBfcmluZzsgLyogcmVtYXBwZWQgYWRhcHRlciBtZW1vcnkgZm9yIGh3IHJpbmdzICovCisJdm9pZCBfX2lvbWVtICptbWlvX3J4cF9yaW5nOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKnBzZXVkb19uZXRkZXY7CisJdW5zaWduZWQgaW50IGN1cl90eDsKKwl1bnNpZ25lZCBpbnQgY3VyX3J4OworCXUzMiBhZGFwdGVyX2hhbmRsZTsKKwlpbnQgZGV2aWNlX2NhcF9mbGFnczsKKwl2b2lkIF9faW9tZW0gKmt2YTsJLyogS1ZBIGRldmljZSBtZW1vcnkgKi8KKwl1bnNpZ25lZCBsb25nIHBhOwkvKiBQQSBkZXZpY2UgbWVtb3J5ICovCisJdm9pZCAqKnFwdHJfYXJyYXk7CisKKwlrbWVtX2NhY2hlX3QgKmhvc3RfbXNnX2NhY2hlOworCisJc3RydWN0IGxpc3RfaGVhZCBjY2FfbGluazsJCS8qIGFkYXB0ZXIgbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQgZWhfd2FrZXVwX2xpc3Q7CS8qIGV2ZW50IHdha2V1cCBsaXN0ICovCisJd2FpdF9xdWV1ZV9oZWFkX3QgcmVxX3ZxX3dvOworCisJLyogQ2FjaGVkIFJOSUMgcHJvcGVydGllcyAqLworCXN0cnVjdCBpYl9kZXZpY2VfYXR0ciBwcm9wczsKKworCXN0cnVjdCBjMl9wZF90YWJsZSBwZF90YWJsZTsKKwlzdHJ1Y3QgYzJfcXBfdGFibGUgcXBfdGFibGU7CisJaW50IHBvcnRzOwkJLyogbnVtIG9mIEdpZ0UgcG9ydHMgKi8KKwlpbnQgZGV2bnVtOworCXNwaW5sb2NrX3QgdnFsb2NrOwkvKiBzeW5jIHZicyByZXEgTVEgKi8KKworCS8qIFZlcmJzIFF1ZXVlcyAqLworCXN0cnVjdCBjMl9tcSByZXFfdnE7CS8qIFZlcmJzIFJlcXVlc3QgTVEgKi8KKwlzdHJ1Y3QgYzJfbXEgcmVwX3ZxOwkvKiBWZXJicyBSZXBseSBNUSAqLworCXN0cnVjdCBjMl9tcSBhZXE7CS8qIEFzeW5jIEV2ZW50cyBNUSAqLworCisJLyogS2VybmVsIGNsaWVudCBNUXMgKi8KKwlzdHJ1Y3Qgc3BfY2h1bmsgKmtlcm5fbXFzcF9wb29sOworCisJLyogRGV2aWNlIHVwZGF0ZXMgdGhlc2UgdmFsdWVzIHdoZW4gcG9zdGluZyBtZXNzYWdlcyB0byBhIGhvc3QKKwkgKiB0YXJnZXQgcXVldWUgKi8KKwl1MTYgcmVxX3ZxX3NoYXJlZDsKKwl1MTYgcmVwX3ZxX3NoYXJlZDsKKwl1MTYgYWVxX3NoYXJlZDsKKwl1MTYgaXJxX2NsYWltZWQ7CisKKwkvKgorCSAqIFNoYXJlZCBob3N0IHRhcmdldCBwYWdlcyBmb3IgdXNlci1hY2Nlc3NpYmxlIE1Rcy4KKwkgKi8KKwlpbnQgaHRoZWFkOwkJLyogaW5kZXggb2YgZmlyc3QgZnJlZSBlbnRyeSAqLworCXZvaWQgKmh0cGFnZXM7CQkvKiBrZXJuZWwgdmFkZHIgKi8KKwlpbnQgaHRsZW47CQkvKiBsZW5ndGggb2YgaHRwYWdlcyBtZW1vcnkgKi8KKwl2b2lkICpodHV2YTsJCS8qIHVzZXIgbWFwcGVkIHZhZGRyICovCisJc3BpbmxvY2tfdCBodGxvY2s7CS8qIHNlcmlhbGl6ZSBhbGxvY2F0aW9uICovCisKKwl1NjQgYWRhcHRlcl9oaW50X3V2YTsJLyogYWNjZXNzIHRvIHRoZSBhY3Rpdml0eSBGSUZPICovCisKKwkvLwlzcGlubG9ja190IGFlcV9sb2NrOworCS8vCXNwaW5sb2NrX3Qgcm5pY19sb2NrOworCisJdTE2ICpoaW50X2NvdW50OworCWRtYV9hZGRyX3QgaGludF9jb3VudF9kbWE7CisJdTE2IGhpbnRzX3JlYWQ7CisKKwlpbnQgaW5pdDsJCS8qIFRSVUUgaWYgaXQncyByZWFkeSAqLworCWNoYXIgYWVfY2FjaGVfbmFtZVsxNl07CisJY2hhciB2cV9jYWNoZV9uYW1lWzE2XTsKK307CisKK3N0cnVjdCBjMl9wb3J0IHsKKwl1MzIgbXNnX2VuYWJsZTsKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJc3BpbmxvY2tfdCB0eF9sb2NrOworCXUzMiB0eF9hdmFpbDsKKwlzdHJ1Y3QgYzJfcmluZyB0eF9yaW5nOworCXN0cnVjdCBjMl9yaW5nIHJ4X3Jpbmc7CisKKwl2b2lkICptZW07CQkvKiBQQ0kgbWVtb3J5IGZvciBob3N0IHJpbmdzICovCisJZG1hX2FkZHJfdCBkbWE7CisJdW5zaWduZWQgbG9uZyBtZW1fc2l6ZTsKKworCXUzMiByeF9idWZfc2l6ZTsKKworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldHN0YXRzOworfTsKKworLyoKKyAqIEFjdGl2aXR5IEZJRk8gcmVnaXN0ZXJzIGluIEJBUjAuCisgKi8KKyNkZWZpbmUgUENJX0JBUjBfSE9TVF9ISU5UCTB4MTAwCisjZGVmaW5lIFBDSV9CQVIwX0FEQVBURVJfSElOVAkweDIwMDAKKworLyoKKyAqIEFtbWFzc28gUENJIHZlbmRvciBpZCBhbmQgQ2VwaGV1cyBQQ0kgZGV2aWNlIGlkLgorICovCisjZGVmaW5lIENRX0FSTUVEIAkweDAxCisjZGVmaW5lIENRX1dBSVRfRk9SX0RNQQkweDgwCisKKy8qCisgKiBUaGUgZm9ybWF0IG9mIGEgaGludCBpcyBhcyBmb2xsb3dzOgorICogTG93ZXIgMTYgYml0cyBhcmUgdGhlIGNvdW50IG9mIGhpbnRzIGZvciB0aGUgcXVldWUuCisgKiBOZXh0IDE1IGJpdHMgYXJlIHRoZSBxcF9pbmRleAorICogVXBwZXIgbW9zdCBiaXQgZGVwZW5kcyBvbiB3aG8gcmVhZHMgaXQ6CisgKiAgICBJZiByZWFkIGJ5IHByb2R1Y2VyLCB0aGVuIGl0IG1lYW5zIEZ1bGwgKDEpIG9yIE5vdC1GdWxsICgwKQorICogICAgSWYgcmVhZCBieSBjb25zdW1lciwgdGhlbiBpdCBtZWFucyBFbXB0eSAoMSkgb3IgTm90LUVtcHR5ICgwKQorICovCisjZGVmaW5lIEMyX0hJTlRfTUFLRShxX2luZGV4LCBoaW50X2NvdW50KSAoKChxX2luZGV4KSA8PCAxNikgfCBoaW50X2NvdW50KQorI2RlZmluZSBDMl9ISU5UX0dFVF9JTkRFWChoaW50KSAoKChoaW50KSAmIDB4N0ZGRjAwMDApID4+IDE2KQorI2RlZmluZSBDMl9ISU5UX0dFVF9DT1VOVChoaW50KSAoKGhpbnQpICYgMHgwMDAwRkZGRikKKworCisvKgorICogVGhlIGZvbGxvd2luZyBkZWZpbmVzIHRoZSBvZmZzZXQgaW4gU0RSQU0gZm9yIHRoZSBjMl9hZGFwdGVyX3BjaV9yZWdzX3QKKyAqIHN0cnVjdC4KKyAqLworI2RlZmluZSBDMl9BREFQVEVSX1BDSV9SRUdTX09GRlNFVCAweDEwMDAwCisKKyNpZm5kZWYgcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKGNvbnN0IHZvaWQgX19pb21lbSAqIGFkZHIpCit7CisJdTY0IHJldCA9IHJlYWRsKGFkZHIgKyA0KTsKKwlyZXQgPDw9IDMyOworCXJldCB8PSByZWFkbChhZGRyKTsKKworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKworI2lmbmRlZiB3cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd193cml0ZXEodTY0IHZhbCwgdm9pZCBfX2lvbWVtICogYWRkcikKK3sKKwlfX3Jhd193cml0ZWwoKHUzMikgKHZhbCksIGFkZHIpOworCV9fcmF3X3dyaXRlbCgodTMyKSAodmFsID4+IDMyKSwgKGFkZHIgKyA0KSk7Cit9CisjZW5kaWYKKworI2RlZmluZSBDMl9TRVRfQ1VSX1JYKGMyZGV2LCBjdXJfcngpIFwKKwlfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIoY3VyX3J4KSwgYzJkZXYtPm1taW9fdHhwX3JpbmcgKyA0MDkyKQorCisjZGVmaW5lIEMyX0dFVF9DVVJfUlgoYzJkZXYpIFwKKwliZTMyX3RvX2NwdShyZWFkbChjMmRldi0+bW1pb190eHBfcmluZyArIDQwOTIpKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjMl9kZXYgKnRvX2MyZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJkZXYsIHN0cnVjdCBjMl9kZXYsIGliZGV2KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgYzJfZXJybm8odm9pZCAqcmVwbHkpCit7CisJc3dpdGNoIChjMl93cl9nZXRfcmVzdWx0KHJlcGx5KSkgeworCWNhc2UgQzJfT0s6CisJCXJldHVybiAwOworCWNhc2UgQ0NFUlJfTk9fQlVGUzoKKwljYXNlIENDRVJSX0lOU1VGRklDSUVOVF9SRVNPVVJDRVM6CisJY2FzZSBDQ0VSUl9aRVJPX1JETUFfUkVBRF9SRVNPVVJDRVM6CisJCXJldHVybiAtRU5PTUVNOworCWNhc2UgQ0NFUlJfTVJfSU5fVVNFOgorCWNhc2UgQ0NFUlJfUVBfSU5fVVNFOgorCQlyZXR1cm4gLUVCVVNZOworCWNhc2UgQ0NFUlJfQUREUl9JTl9VU0U6CisJCXJldHVybiAtRUFERFJJTlVTRTsKKwljYXNlIENDRVJSX0FERFJfTk9UX0FWQUlMOgorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisJY2FzZSBDQ0VSUl9DT05OX1JFU0VUOgorCQlyZXR1cm4gLUVDT05OUkVTRVQ7CisJY2FzZSBDQ0VSUl9OT1RfSU1QTEVNRU5URUQ6CisJY2FzZSBDQ0VSUl9JTlZBTElEX1dRRToKKwkJcmV0dXJuIC1FTk9TWVM7CisJY2FzZSBDQ0VSUl9RUF9OT1RfUFJJVklMRUdFRDoKKwkJcmV0dXJuIC1FUEVSTTsKKwljYXNlIENDRVJSX1NUQUNLX0VSUk9SOgorCQlyZXR1cm4gLUVQUk9UTzsKKwljYXNlIENDRVJSX0FDQ0VTU19WSU9MQVRJT046CisJY2FzZSBDQ0VSUl9CQVNFX0FORF9CT1VORFNfVklPTEFUSU9OOgorCQlyZXR1cm4gLUVGQVVMVDsKKwljYXNlIENDRVJSX1NUQUdfU1RBVEVfTk9UX0lOVkFMSUQ6CisJY2FzZSBDQ0VSUl9JTlZBTElEX0FERFJFU1M6CisJY2FzZSBDQ0VSUl9JTlZBTElEX0NROgorCWNhc2UgQ0NFUlJfSU5WQUxJRF9FUDoKKwljYXNlIENDRVJSX0lOVkFMSURfTU9ESUZJRVI6CisJY2FzZSBDQ0VSUl9JTlZBTElEX01UVToKKwljYXNlIENDRVJSX0lOVkFMSURfUERfSUQ6CisJY2FzZSBDQ0VSUl9JTlZBTElEX1FQOgorCWNhc2UgQ0NFUlJfSU5WQUxJRF9STklDOgorCWNhc2UgQ0NFUlJfSU5WQUxJRF9TVEFHOgorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVBR0FJTjsKKwl9Cit9CisKKy8qIERldmljZSAqLworZXh0ZXJuIGludCBjMl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGMyX2RldiAqYzJkZXYpOworZXh0ZXJuIHZvaWQgYzJfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGMyX2RldiAqYzJkZXYpOworZXh0ZXJuIGludCBjMl9ybmljX2luaXQoc3RydWN0IGMyX2RldiAqYzJkZXYpOworZXh0ZXJuIHZvaWQgYzJfcm5pY190ZXJtKHN0cnVjdCBjMl9kZXYgKmMyZGV2KTsKK2V4dGVybiB2b2lkIGMyX3JuaWNfaW50ZXJydXB0KHN0cnVjdCBjMl9kZXYgKmMyZGV2KTsKK2V4dGVybiBpbnQgYzJfZGVsX2FkZHIoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBpbmFkZHIsIHUzMiBpbm1hc2spOworZXh0ZXJuIGludCBjMl9hZGRfYWRkcihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIGluYWRkciwgdTMyIGlubWFzayk7CisKKy8qIFFQcyAqLworZXh0ZXJuIGludCBjMl9hbGxvY19xcChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3BkICpwZCwKKwkJICAgICAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2F0dHJzLCBzdHJ1Y3QgYzJfcXAgKnFwKTsKK2V4dGVybiB2b2lkIGMyX2ZyZWVfcXAoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9xcCAqcXApOworZXh0ZXJuIHN0cnVjdCBpYl9xcCAqYzJfZ2V0X3FwKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgaW50IHFwbik7CitleHRlcm4gaW50IGMyX3FwX21vZGlmeShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3FwICpxcCwKKwkJCXN0cnVjdCBpYl9xcF9hdHRyICphdHRyLCBpbnQgYXR0cl9tYXNrKTsKK2V4dGVybiBpbnQgYzJfcXBfc2V0X3JlYWRfbGltaXRzKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfcXAgKnFwLAorCQkJCSBpbnQgb3JkLCBpbnQgaXJkKTsKK2V4dGVybiBpbnQgYzJfcG9zdF9zZW5kKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3NlbmRfd3IgKmliX3dyLAorCQkJc3RydWN0IGliX3NlbmRfd3IgKipiYWRfd3IpOworZXh0ZXJuIGludCBjMl9wb3N0X3JlY2VpdmUoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcmVjdl93ciAqaWJfd3IsCisJCQkgICBzdHJ1Y3QgaWJfcmVjdl93ciAqKmJhZF93cik7CitleHRlcm4gdm9pZCBfX2RldmluaXQgYzJfaW5pdF9xcF90YWJsZShzdHJ1Y3QgYzJfZGV2ICpjMmRldik7CitleHRlcm4gdm9pZCBfX2RldmV4aXQgYzJfY2xlYW51cF9xcF90YWJsZShzdHJ1Y3QgYzJfZGV2ICpjMmRldik7CitleHRlcm4gdm9pZCBjMl9zZXRfcXBfc3RhdGUoc3RydWN0IGMyX3FwICosIGludCk7CitleHRlcm4gc3RydWN0IGMyX3FwICpjMl9maW5kX3FwbihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgaW50IHFwbik7CisKKy8qIFBEcyAqLworZXh0ZXJuIGludCBjMl9wZF9hbGxvYyhzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgaW50IHByaXZpbGVnZWQsIHN0cnVjdCBjMl9wZCAqcGQpOworZXh0ZXJuIHZvaWQgYzJfcGRfZnJlZShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3BkICpwZCk7CitleHRlcm4gaW50IF9fZGV2aW5pdCBjMl9pbml0X3BkX3RhYmxlKHN0cnVjdCBjMl9kZXYgKmMyZGV2KTsKK2V4dGVybiB2b2lkIF9fZGV2ZXhpdCBjMl9jbGVhbnVwX3BkX3RhYmxlKHN0cnVjdCBjMl9kZXYgKmMyZGV2KTsKKworLyogQ1FzICovCitleHRlcm4gaW50IGMyX2luaXRfY3Eoc3RydWN0IGMyX2RldiAqYzJkZXYsIGludCBlbnRyaWVzLAorCQkgICAgICBzdHJ1Y3QgYzJfdWNvbnRleHQgKmN0eCwgc3RydWN0IGMyX2NxICpjcSk7CitleHRlcm4gdm9pZCBjMl9mcmVlX2NxKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfY3EgKmNxKTsKK2V4dGVybiB2b2lkIGMyX2NxX2V2ZW50KHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgbXFfaW5kZXgpOworZXh0ZXJuIHZvaWQgYzJfY3FfY2xlYW4oc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9xcCAqcXAsIHUzMiBtcV9pbmRleCk7CitleHRlcm4gaW50IGMyX3BvbGxfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqZW50cnkpOworZXh0ZXJuIGludCBjMl9hcm1fY3Eoc3RydWN0IGliX2NxICppYmNxLCBlbnVtIGliX2NxX25vdGlmeSBub3RpZnkpOworCisvKiBDTSAqLworZXh0ZXJuIGludCBjMl9sbHBfY29ubmVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLAorCQkJICBzdHJ1Y3QgaXdfY21fY29ubl9wYXJhbSAqaXdfcGFyYW0pOworZXh0ZXJuIGludCBjMl9sbHBfYWNjZXB0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsCisJCQkgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKml3X3BhcmFtKTsKK2V4dGVybiBpbnQgYzJfbGxwX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBjb25zdCB2b2lkICpwZGF0YSwKKwkJCSB1OCBwZGF0YV9sZW4pOworZXh0ZXJuIGludCBjMl9sbHBfc2VydmljZV9jcmVhdGUoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgaW50IGJhY2tsb2cpOworZXh0ZXJuIGludCBjMl9sbHBfc2VydmljZV9kZXN0cm95KHN0cnVjdCBpd19jbV9pZCAqY21faWQpOworCisvKiBNTSAqLworZXh0ZXJuIGludCBjMl9uc21yX3JlZ2lzdGVyX3BoeXNfa2VybihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTY0ICphZGRyX2xpc3QsCisgCQkJCSAgICAgIGludCBwYWdlX3NpemUsIGludCBwYmxfZGVwdGgsIHUzMiBsZW5ndGgsCisgCQkJCSAgICAgIHUzMiBvZmYsIHU2NCAqdmEsIGVudW0gYzJfYWNmIGFjZiwKKwkJCQkgICAgICBzdHJ1Y3QgYzJfbXIgKm1yKTsKK2V4dGVybiBpbnQgYzJfc3RhZ19kZWFsbG9jKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgc3RhZ19pbmRleCk7CisKKy8qIEFFICovCitleHRlcm4gdm9pZCBjMl9hZV9ldmVudChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIG1xX2luZGV4KTsKKworLyogTVFTUCBBbGxvY2F0b3IgKi8KK2V4dGVybiBpbnQgYzJfaW5pdF9tcXNwX3Bvb2woc3RydWN0IGMyX2RldiAqYzJkZXYsIGdmcF90IGdmcF9tYXNrLAorCQkJICAgICBzdHJ1Y3Qgc3BfY2h1bmsgKipyb290KTsKK2V4dGVybiB2b2lkIGMyX2ZyZWVfbXFzcF9wb29sKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3Qgc3BfY2h1bmsgKnJvb3QpOworZXh0ZXJuIHUxNiAqYzJfYWxsb2NfbXFzcChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IHNwX2NodW5rICpoZWFkLAorCQkJICBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgYzJfZnJlZV9tcXNwKHUxNiAqIG1xc3ApOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZjQ2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuYwpAQCAtMCwwICsxLDMyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgPHJkbWEvaXdfY20uaD4KKyNpbmNsdWRlICJjMl9zdGF0dXMuaCIKKyNpbmNsdWRlICJjMl9hZS5oIgorCitzdGF0aWMgaW50IGMyX2NvbnZlcnRfY21fc3RhdHVzKHUzMiBjMl9zdGF0dXMpCit7CisJc3dpdGNoIChjMl9zdGF0dXMpIHsKKwljYXNlIEMyX0NPTk5fU1RBVFVTX1NVQ0NFU1M6CisJCXJldHVybiAwOworCWNhc2UgQzJfQ09OTl9TVEFUVVNfUkVKRUNURUQ6CisJCXJldHVybiAtRU5FVFJFU0VUOworCWNhc2UgQzJfQ09OTl9TVEFUVVNfUkVGVVNFRDoKKwkJcmV0dXJuIC1FQ09OTlJFRlVTRUQ7CisJY2FzZSBDMl9DT05OX1NUQVRVU19USU1FRE9VVDoKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJY2FzZSBDMl9DT05OX1NUQVRVU19ORVRVTlJFQUNIOgorCQlyZXR1cm4gLUVORVRVTlJFQUNIOworCWNhc2UgQzJfQ09OTl9TVEFUVVNfSE9TVFVOUkVBQ0g6CisJCXJldHVybiAtRUhPU1RVTlJFQUNIOworCWNhc2UgQzJfQ09OTl9TVEFUVVNfSU5WQUxJRF9STklDOgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEMyX0NPTk5fU1RBVFVTX0lOVkFMSURfUVA6CisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgQzJfQ09OTl9TVEFUVVNfSU5WQUxJRF9RUF9TVEFURToKKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBDMl9DT05OX1NUQVRVU19BRERSX05PVF9BVkFJTDoKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlcyAtIFVuYWJsZSB0byBjb252ZXJ0IENNIHN0YXR1czogJWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGMyX3N0YXR1cyk7CisJCXJldHVybiAtRUlPOworCX0KK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgY29uc3QgY2hhciogdG9fZXZlbnRfc3RyKGludCBldmVudCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciogZXZlbnRfc3RyW10gPSB7CisJCSJDQ0FFX1JFTU9URV9TSFVURE9XTiIsCisJCSJDQ0FFX0FDVElWRV9DT05ORUNUX1JFU1VMVFMiLAorCQkiQ0NBRV9DT05ORUNUSU9OX1JFUVVFU1QiLAorCQkiQ0NBRV9MTFBfQ0xPU0VfQ09NUExFVEUiLAorCQkiQ0NBRV9URVJNSU5BVEVfTUVTU0FHRV9SRUNFSVZFRCIsCisJCSJDQ0FFX0xMUF9DT05ORUNUSU9OX1JFU0VUIiwKKwkJIkNDQUVfTExQX0NPTk5FQ1RJT05fTE9TVCIsCisJCSJDQ0FFX0xMUF9TRUdNRU5UX1NJWkVfSU5WQUxJRCIsCisJCSJDQ0FFX0xMUF9JTlZBTElEX0NSQyIsCisJCSJDQ0FFX0xMUF9CQURfRlBEVSIsCisJCSJDQ0FFX0lOVkFMSURfRERQX1ZFUlNJT04iLAorCQkiQ0NBRV9JTlZBTElEX1JETUFfVkVSU0lPTiIsCisJCSJDQ0FFX1VORVhQRUNURURfT1BDT0RFIiwKKwkJIkNDQUVfSU5WQUxJRF9ERFBfUVVFVUVfTlVNQkVSIiwKKwkJIkNDQUVfUkRNQV9SRUFEX05PVF9FTkFCTEVEIiwKKwkJIkNDQUVfUkRNQV9XUklURV9OT1RfRU5BQkxFRCIsCisJCSJDQ0FFX1JETUFfUkVBRF9UT09fU01BTEwiLAorCQkiQ0NBRV9OT19MX0JJVCIsCisJCSJDQ0FFX1RBR0dFRF9JTlZBTElEX1NUQUciLAorCQkiQ0NBRV9UQUdHRURfQkFTRV9CT1VORFNfVklPTEFUSU9OIiwKKwkJIkNDQUVfVEFHR0VEX0FDQ0VTU19SSUdIVFNfVklPTEFUSU9OIiwKKwkJIkNDQUVfVEFHR0VEX0lOVkFMSURfUEQiLAorCQkiQ0NBRV9XUkFQX0VSUk9SIiwKKwkJIkNDQUVfQkFEX0NMT1NFIiwKKwkJIkNDQUVfQkFEX0xMUF9DTE9TRSIsCisJCSJDQ0FFX0lOVkFMSURfTVNOX1JBTkdFIiwKKwkJIkNDQUVfSU5WQUxJRF9NU05fR0FQIiwKKwkJIkNDQUVfSVJSUV9PVkVSRkxPVyIsCisJCSJDQ0FFX0lSUlFfTVNOX0dBUCIsCisJCSJDQ0FFX0lSUlFfTVNOX1JBTkdFIiwKKwkJIkNDQUVfSVJSUV9JTlZBTElEX1NUQUciLAorCQkiQ0NBRV9JUlJRX0JBU0VfQk9VTkRTX1ZJT0xBVElPTiIsCisJCSJDQ0FFX0lSUlFfQUNDRVNTX1JJR0hUU19WSU9MQVRJT04iLAorCQkiQ0NBRV9JUlJRX0lOVkFMSURfUEQiLAorCQkiQ0NBRV9JUlJRX1dSQVBfRVJST1IiLAorCQkiQ0NBRV9DUV9TUV9DT01QTEVUSU9OX09WRVJGTE9XIiwKKwkJIkNDQUVfQ1FfUlFfQ09NUExFVElPTl9FUlJPUiIsCisJCSJDQ0FFX1FQX1NSUV9XUUVfRVJST1IiLAorCQkiQ0NBRV9RUF9MT0NBTF9DQVRBU1RST1BISUNfRVJST1IiLAorCQkiQ0NBRV9DUV9PVkVSRkxPVyIsCisJCSJDQ0FFX0NRX09QRVJBVElPTl9FUlJPUiIsCisJCSJDQ0FFX1NSUV9MSU1JVF9SRUFDSEVEIiwKKwkJIkNDQUVfUVBfUlFfTElNSVRfUkVBQ0hFRCIsCisJCSJDQ0FFX1NSUV9DQVRBU1RST1BISUNfRVJST1IiLAorCQkiQ0NBRV9STklDX0NBVEFTVFJPUEhJQ19FUlJPUiIKKwl9OworCisJaWYgKGV2ZW50IDwgQ0NBRV9SRU1PVEVfU0hVVERPV04gfHwKKwkgICAgZXZlbnQgPiBDQ0FFX1JOSUNfQ0FUQVNUUk9QSElDX0VSUk9SKQorCQlyZXR1cm4gIjxpbnZhbGlkIGV2ZW50PiI7CisKKwlldmVudCAtPSBDQ0FFX1JFTU9URV9TSFVURE9XTjsKKwlyZXR1cm4gZXZlbnRfc3RyW2V2ZW50XTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRvX3FwX3N0YXRlX3N0cihpbnQgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgQzJfUVBfU1RBVEVfSURMRToKKwkJcmV0dXJuICJDMl9RUF9TVEFURV9JRExFIjsKKwljYXNlIEMyX1FQX1NUQVRFX0NPTk5FQ1RJTkc6CisJCXJldHVybiAiQzJfUVBfU1RBVEVfQ09OTkVDVElORyI7CisJY2FzZSBDMl9RUF9TVEFURV9SVFM6CisJCXJldHVybiAiQzJfUVBfU1RBVEVfUlRTIjsKKwljYXNlIEMyX1FQX1NUQVRFX0NMT1NJTkc6CisJCXJldHVybiAiQzJfUVBfU1RBVEVfQ0xPU0lORyI7CisJY2FzZSBDMl9RUF9TVEFURV9URVJNSU5BVEU6CisJCXJldHVybiAiQzJfUVBfU1RBVEVfVEVSTUlOQVRFIjsKKwljYXNlIEMyX1FQX1NUQVRFX0VSUk9SOgorCQlyZXR1cm4gIkMyX1FQX1NUQVRFX0VSUk9SIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gIjxpbnZhbGlkIFFQIHN0YXRlPiI7CisJfTsKK30KKyNlbmRpZgorCit2b2lkIGMyX2FlX2V2ZW50KHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgbXFfaW5kZXgpCit7CisJc3RydWN0IGMyX21xICptcSA9IGMyZGV2LT5xcHRyX2FycmF5W21xX2luZGV4XTsKKwl1bmlvbiBjMndyICp3cjsKKwl2b2lkICpyZXNvdXJjZV91c2VyX2NvbnRleHQ7CisJc3RydWN0IGl3X2NtX2V2ZW50IGNtX2V2ZW50OworCXN0cnVjdCBpYl9ldmVudCBpYl9ldmVudDsKKwllbnVtIGMyX3Jlc291cmNlX2luZGljYXRvciByZXNvdXJjZV9pbmRpY2F0b3I7CisJZW51bSBjMl9ldmVudF9pZCBldmVudF9pZDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzdGF0dXM7CisKKwkvKgorCSAqIHJldHJlaXZlIHRoZSBtZXNzYWdlCisJICovCisJd3IgPSBjMl9tcV9jb25zdW1lKG1xKTsKKwlpZiAoIXdyKQorCQlyZXR1cm47CisKKwltZW1zZXQoJmliX2V2ZW50LCAwLCBzaXplb2YoaWJfZXZlbnQpKTsKKwltZW1zZXQoJmNtX2V2ZW50LCAwLCBzaXplb2YoY21fZXZlbnQpKTsKKworCWV2ZW50X2lkID0gYzJfd3JfZ2V0X2lkKHdyKTsKKwlyZXNvdXJjZV9pbmRpY2F0b3IgPSBiZTMyX3RvX2NwdSh3ci0+YWUuYWVfZ2VuZXJpYy5yZXNvdXJjZV90eXBlKTsKKwlyZXNvdXJjZV91c2VyX2NvbnRleHQgPQorCSAgICAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgd3ItPmFlLmFlX2dlbmVyaWMudXNlcl9jb250ZXh0OworCisJc3RhdHVzID0gY21fZXZlbnQuc3RhdHVzID0gYzJfY29udmVydF9jbV9zdGF0dXMoYzJfd3JfZ2V0X3Jlc3VsdCh3cikpOworCisJcHJfZGVidWcoImV2ZW50IHJlY2VpdmVkIGMyX2Rldj0lcCwgZXZlbnRfaWQ9JWQsICIKKwkJInJlc291cmNlX2luZGljYXRvcj0lZCwgdXNlcl9jb250ZXh0PSVwLCBzdGF0dXMgPSAlZFxuIiwKKwkJYzJkZXYsIGV2ZW50X2lkLCByZXNvdXJjZV9pbmRpY2F0b3IsIHJlc291cmNlX3VzZXJfY29udGV4dCwKKwkJc3RhdHVzKTsKKworCXN3aXRjaCAocmVzb3VyY2VfaW5kaWNhdG9yKSB7CisJY2FzZSBDMl9SRVNfSU5EX1FQOnsKKworCQlzdHJ1Y3QgYzJfcXAgKnFwID0gKHN0cnVjdCBjMl9xcCAqKXJlc291cmNlX3VzZXJfY29udGV4dDsKKwkJc3RydWN0IGl3X2NtX2lkICpjbV9pZCA9IHFwLT5jbV9pZDsKKwkJc3RydWN0IGMyd3JfYWVfYWN0aXZlX2Nvbm5lY3RfcmVzdWx0cyAqcmVzOworCisJCWlmICghY21faWQpIHsKKwkJCXByX2RlYnVnKCJldmVudCByZWNlaXZlZCwgYnV0IGNtX2lkIGlzIDxudWw+LCBxcD0lcCFcbiIsCisJCQkJcXApOworCQkJZ290byBpZ25vcmVfaXQ7CisJCX0KKwkJcHJfZGVidWcoIiVzOiBldmVudCA9ICVzLCB1c2VyX2NvbnRleHQ9JWxseCwgIgorCQkJInJlc291cmNlX3R5cGU9JXgsICIKKwkJCSJyZXNvdXJjZT0leCwgcXBfc3RhdGU9JXNcbiIsCisJCQlfX0ZVTkNUSU9OX18sCisJCQl0b19ldmVudF9zdHIoZXZlbnRfaWQpLAorCQkJYmU2NF90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMudXNlcl9jb250ZXh0KSwKKwkJCWJlMzJfdG9fY3B1KHdyLT5hZS5hZV9nZW5lcmljLnJlc291cmNlX3R5cGUpLAorCQkJYmUzMl90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMucmVzb3VyY2UpLAorCQkJdG9fcXBfc3RhdGVfc3RyKGJlMzJfdG9fY3B1KHdyLT5hZS5hZV9nZW5lcmljLnFwX3N0YXRlKSkpOworCisJCWMyX3NldF9xcF9zdGF0ZShxcCwgYmUzMl90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMucXBfc3RhdGUpKTsKKworCQlzd2l0Y2ggKGV2ZW50X2lkKSB7CisJCWNhc2UgQ0NBRV9BQ1RJVkVfQ09OTkVDVF9SRVNVTFRTOgorCQkJcmVzID0gJndyLT5hZS5hZV9hY3RpdmVfY29ubmVjdF9yZXN1bHRzOworCQkJY21fZXZlbnQuZXZlbnQgPSBJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZOworCQkJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIgPSByZXMtPmxhZGRyOworCQkJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyID0gcmVzLT5yYWRkcjsKKwkJCWNtX2V2ZW50LmxvY2FsX2FkZHIuc2luX3BvcnQgPSByZXMtPmxwb3J0OworCQkJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPQlyZXMtPnJwb3J0OworCQkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9CisJCQkJCWJlMzJfdG9fY3B1KHJlcy0+cHJpdmF0ZV9kYXRhX2xlbmd0aCk7CisJCQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gcmVzLT5wcml2YXRlX2RhdGE7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+bG9jaywgZmxhZ3MpOworCQkJCWlmIChxcC0+Y21faWQpIHsKKwkJCQkJcXAtPmNtX2lkLT5yZW1fcmVmKHFwLT5jbV9pZCk7CisJCQkJCXFwLT5jbV9pZCA9IE5VTEw7CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5sb2NrLCBmbGFncyk7CisJCQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhX2xlbiA9IDA7CisJCQkJY21fZXZlbnQucHJpdmF0ZV9kYXRhID0gTlVMTDsKKwkJCX0KKwkJCWlmIChjbV9pZC0+ZXZlbnRfaGFuZGxlcikKKwkJCQljbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKKwkJCWJyZWFrOworCQljYXNlIENDQUVfVEVSTUlOQVRFX01FU1NBR0VfUkVDRUlWRUQ6CisJCWNhc2UgQ0NBRV9DUV9TUV9DT01QTEVUSU9OX09WRVJGTE9XOgorCQkJaWJfZXZlbnQuZGV2aWNlID0gJmMyZGV2LT5pYmRldjsKKwkJCWliX2V2ZW50LmVsZW1lbnQucXAgPSAmcXAtPmlicXA7CisJCQlpYl9ldmVudC5ldmVudCA9IElCX0VWRU5UX1FQX1JFUV9FUlI7CisKKwkJCWlmIChxcC0+aWJxcC5ldmVudF9oYW5kbGVyKQorCQkJCXFwLT5pYnFwLmV2ZW50X2hhbmRsZXIoJmliX2V2ZW50LAorCQkJCQkJICAgICAgIHFwLT5pYnFwLgorCQkJCQkJICAgICAgIHFwX2NvbnRleHQpOworCQkJYnJlYWs7CisJCWNhc2UgQ0NBRV9CQURfQ0xPU0U6CisJCWNhc2UgQ0NBRV9MTFBfQ0xPU0VfQ09NUExFVEU6CisJCWNhc2UgQ0NBRV9MTFBfQ09OTkVDVElPTl9SRVNFVDoKKwkJY2FzZSBDQ0FFX0xMUF9DT05ORUNUSU9OX0xPU1Q6CisJCQlCVUdfT04oY21faWQtPmV2ZW50X2hhbmRsZXI9PSh2b2lkKikweDZiNmI2YjZiKTsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5sb2NrLCBmbGFncyk7CisJCQlpZiAocXAtPmNtX2lkKSB7CisJCQkJcXAtPmNtX2lkLT5yZW1fcmVmKHFwLT5jbV9pZCk7CisJCQkJcXAtPmNtX2lkID0gTlVMTDsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5sb2NrLCBmbGFncyk7CisJCQljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NMT1NFOworCQkJY21fZXZlbnQuc3RhdHVzID0gMDsKKwkJCWlmIChjbV9pZC0+ZXZlbnRfaGFuZGxlcikKKwkJCQljbV9pZC0+ZXZlbnRfaGFuZGxlcihjbV9pZCwgJmNtX2V2ZW50KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHX09OKDEpOworCQkJcHJfZGVidWcoIiVzOiVkIFVuZXhwZWN0ZWQgZXZlbnRfaWQ9JWQgb24gUVA9JXAsICIKKwkJCQkiQ01fSUQ9JXBcbiIsCisJCQkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywKKwkJCQlldmVudF9pZCwgcXAsIGNtX2lkKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCX0KKworCWNhc2UgQzJfUkVTX0lORF9FUDp7CisKKwkJc3RydWN0IGMyd3JfYWVfY29ubmVjdGlvbl9yZXF1ZXN0ICpyZXEgPQorCQkJJndyLT5hZS5hZV9jb25uZWN0aW9uX3JlcXVlc3Q7CisJCXN0cnVjdCBpd19jbV9pZCAqY21faWQgPQorCQkJKHN0cnVjdCBpd19jbV9pZCAqKXJlc291cmNlX3VzZXJfY29udGV4dDsKKworCQlwcl9kZWJ1ZygiQzJfUkVTX0lORF9FUCBldmVudF9pZD0lZFxuIiwgZXZlbnRfaWQpOworCQlpZiAoZXZlbnRfaWQgIT0gQ0NBRV9DT05ORUNUSU9OX1JFUVVFU1QpIHsKKwkJCXByX2RlYnVnKCIlczogSW52YWxpZCBldmVudF9pZDogJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCBldmVudF9pZCk7CisJCQlicmVhazsKKwkJfQorCQljbV9ldmVudC5ldmVudCA9IElXX0NNX0VWRU5UX0NPTk5FQ1RfUkVRVUVTVDsKKwkJY21fZXZlbnQucHJvdmlkZXJfZGF0YSA9ICh2b2lkKikodW5zaWduZWQgbG9uZylyZXEtPmNyX2hhbmRsZTsKKwkJY21fZXZlbnQubG9jYWxfYWRkci5zaW5fYWRkci5zX2FkZHIgPSByZXEtPmxhZGRyOworCQljbV9ldmVudC5yZW1vdGVfYWRkci5zaW5fYWRkci5zX2FkZHIgPSByZXEtPnJhZGRyOworCQljbV9ldmVudC5sb2NhbF9hZGRyLnNpbl9wb3J0ID0gcmVxLT5scG9ydDsKKwkJY21fZXZlbnQucmVtb3RlX2FkZHIuc2luX3BvcnQgPSByZXEtPnJwb3J0OworCQljbV9ldmVudC5wcml2YXRlX2RhdGFfbGVuID0KKwkJCWJlMzJfdG9fY3B1KHJlcS0+cHJpdmF0ZV9kYXRhX2xlbmd0aCk7CisJCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IHJlcS0+cHJpdmF0ZV9kYXRhOworCisJCWlmIChjbV9pZC0+ZXZlbnRfaGFuZGxlcikKKwkJCWNtX2lkLT5ldmVudF9oYW5kbGVyKGNtX2lkLCAmY21fZXZlbnQpOworCQlicmVhazsKKwl9CisKKwljYXNlIEMyX1JFU19JTkRfQ1E6eworCQlzdHJ1Y3QgYzJfY3EgKmNxID0KKwkJICAgIChzdHJ1Y3QgYzJfY3EgKikgcmVzb3VyY2VfdXNlcl9jb250ZXh0OworCisJCXByX2RlYnVnKCJJQl9FVkVOVF9DUV9FUlJcbiIpOworCQlpYl9ldmVudC5kZXZpY2UgPSAmYzJkZXYtPmliZGV2OworCQlpYl9ldmVudC5lbGVtZW50LmNxID0gJmNxLT5pYmNxOworCQlpYl9ldmVudC5ldmVudCA9IElCX0VWRU5UX0NRX0VSUjsKKworCQlpZiAoY3EtPmliY3EuZXZlbnRfaGFuZGxlcikKKwkJCWNxLT5pYmNxLmV2ZW50X2hhbmRsZXIoJmliX2V2ZW50LAorCQkJCQkgICAgICAgY3EtPmliY3EuY3FfY29udGV4dCk7CisJfQorCisJZGVmYXVsdDoKKwkJcHJpbnRrKCJCYWQgcmVzb3VyY2UgaW5kaWNhdG9yID0gJWRcbiIsCisJCSAgICAgICByZXNvdXJjZV9pbmRpY2F0b3IpOworCQlicmVhazsKKwl9CisKKyBpZ25vcmVfaXQ6CisJYzJfbXFfZnJlZShtcSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMDY1YzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWUuaApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX0MyX0FFX0hfCisjZGVmaW5lIF9DMl9BRV9IXworCisvKgorICogV0FSTklORzogSWYgeW91IGNoYW5nZSB0aGlzIGZpbGUsIGFsc28gYnVtcCBDMl9JVk5fQkFTRQorICogaW4gY29tbW9uL2luY2x1ZGUvY2x1c3RlcmNvcmUvYzJfaXZuLmguCisgKi8KKworLyoKKyAqIEFzeW5jaHJvbm91cyBFdmVudCBJZGVudGlmaWVycworICoKKyAqIFRoZXNlIHN0YXJ0IGF0IDB4ODAgb25seSBzbyBpdCdzIG9idmlvdXMgZnJvbSBpbnNwZWN0aW9uIHRoYXQKKyAqIHRoZXkgYXJlIG5vdCB3b3JrLXJlcXVlc3Qgc3RhdHVzZXMuICBUaGlzIGlzbid0IGNyaXRpY2FsLgorICoKKyAqIE5PVEU6IHRoZXNlIGV2ZW50IGlkJ3MgbXVzdCBmaXQgaW4gZWlnaHQgYml0cy4KKyAqLworZW51bSBjMl9ldmVudF9pZCB7CisJQ0NBRV9SRU1PVEVfU0hVVERPV04gPSAweDgwLAorCUNDQUVfQUNUSVZFX0NPTk5FQ1RfUkVTVUxUUywKKwlDQ0FFX0NPTk5FQ1RJT05fUkVRVUVTVCwKKwlDQ0FFX0xMUF9DTE9TRV9DT01QTEVURSwKKwlDQ0FFX1RFUk1JTkFURV9NRVNTQUdFX1JFQ0VJVkVELAorCUNDQUVfTExQX0NPTk5FQ1RJT05fUkVTRVQsCisJQ0NBRV9MTFBfQ09OTkVDVElPTl9MT1NULAorCUNDQUVfTExQX1NFR01FTlRfU0laRV9JTlZBTElELAorCUNDQUVfTExQX0lOVkFMSURfQ1JDLAorCUNDQUVfTExQX0JBRF9GUERVLAorCUNDQUVfSU5WQUxJRF9ERFBfVkVSU0lPTiwKKwlDQ0FFX0lOVkFMSURfUkRNQV9WRVJTSU9OLAorCUNDQUVfVU5FWFBFQ1RFRF9PUENPREUsCisJQ0NBRV9JTlZBTElEX0REUF9RVUVVRV9OVU1CRVIsCisJQ0NBRV9SRE1BX1JFQURfTk9UX0VOQUJMRUQsCisJQ0NBRV9SRE1BX1dSSVRFX05PVF9FTkFCTEVELAorCUNDQUVfUkRNQV9SRUFEX1RPT19TTUFMTCwKKwlDQ0FFX05PX0xfQklULAorCUNDQUVfVEFHR0VEX0lOVkFMSURfU1RBRywKKwlDQ0FFX1RBR0dFRF9CQVNFX0JPVU5EU19WSU9MQVRJT04sCisJQ0NBRV9UQUdHRURfQUNDRVNTX1JJR0hUU19WSU9MQVRJT04sCisJQ0NBRV9UQUdHRURfSU5WQUxJRF9QRCwKKwlDQ0FFX1dSQVBfRVJST1IsCisJQ0NBRV9CQURfQ0xPU0UsCisJQ0NBRV9CQURfTExQX0NMT1NFLAorCUNDQUVfSU5WQUxJRF9NU05fUkFOR0UsCisJQ0NBRV9JTlZBTElEX01TTl9HQVAsCisJQ0NBRV9JUlJRX09WRVJGTE9XLAorCUNDQUVfSVJSUV9NU05fR0FQLAorCUNDQUVfSVJSUV9NU05fUkFOR0UsCisJQ0NBRV9JUlJRX0lOVkFMSURfU1RBRywKKwlDQ0FFX0lSUlFfQkFTRV9CT1VORFNfVklPTEFUSU9OLAorCUNDQUVfSVJSUV9BQ0NFU1NfUklHSFRTX1ZJT0xBVElPTiwKKwlDQ0FFX0lSUlFfSU5WQUxJRF9QRCwKKwlDQ0FFX0lSUlFfV1JBUF9FUlJPUiwKKwlDQ0FFX0NRX1NRX0NPTVBMRVRJT05fT1ZFUkZMT1csCisJQ0NBRV9DUV9SUV9DT01QTEVUSU9OX0VSUk9SLAorCUNDQUVfUVBfU1JRX1dRRV9FUlJPUiwKKwlDQ0FFX1FQX0xPQ0FMX0NBVEFTVFJPUEhJQ19FUlJPUiwKKwlDQ0FFX0NRX09WRVJGTE9XLAorCUNDQUVfQ1FfT1BFUkFUSU9OX0VSUk9SLAorCUNDQUVfU1JRX0xJTUlUX1JFQUNIRUQsCisJQ0NBRV9RUF9SUV9MSU1JVF9SRUFDSEVELAorCUNDQUVfU1JRX0NBVEFTVFJPUEhJQ19FUlJPUiwKKwlDQ0FFX1JOSUNfQ0FUQVNUUk9QSElDX0VSUk9SCisvKiBXQVJOSU5HIElmIHlvdSBhZGQgbW9yZSBpZCdzLCBtYWtlIHN1cmUgdGhlaXIgdmFsdWVzIGZpdCBpbiBlaWdodCBiaXRzLiAqLworfTsKKworLyoKKyAqIFJlc291cmNlIEluZGljYXRvcnMgYW5kIElkZW50aWZpZXJzCisgKi8KK2VudW0gYzJfcmVzb3VyY2VfaW5kaWNhdG9yIHsKKwlDMl9SRVNfSU5EX1FQID0gMSwKKwlDMl9SRVNfSU5EX0VQLAorCUMyX1JFU19JTkRfQ1EsCisJQzJfUkVTX0lORF9TUlEsCit9OworCisjZW5kaWYgLyogX0MyX0FFX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMjUyOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYwpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBUb3BzcGluIENvbW11bmljYXRpb25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisKKyNpbmNsdWRlICJjMi5oIgorCitzdGF0aWMgaW50IGMyX2FsbG9jX21xc3BfY2h1bmsoc3RydWN0IGMyX2RldiAqYzJkZXYsIGdmcF90IGdmcF9tYXNrLAorCQkJICAgICAgIHN0cnVjdCBzcF9jaHVuayAqKmhlYWQpCit7CisJaW50IGk7CisJc3RydWN0IHNwX2NodW5rICpuZXdfaGVhZDsKKworCW5ld19oZWFkID0gKHN0cnVjdCBzcF9jaHVuayAqKSBfX2dldF9mcmVlX3BhZ2UoZ2ZwX21hc2spOworCWlmIChuZXdfaGVhZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld19oZWFkLT5kbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLCBuZXdfaGVhZCwKKwkJCQkJICAgIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQobmV3X2hlYWQsIG1hcHBpbmcsIG5ld19oZWFkLT5kbWFfYWRkcik7CisKKwluZXdfaGVhZC0+bmV4dCA9IE5VTEw7CisJbmV3X2hlYWQtPmhlYWQgPSAwOworCisJLyogYnVpbGQgbGlzdCB3aGVyZSBlYWNoIGluZGV4IGlzIHRoZSBuZXh0IGZyZWUgc2xvdCAqLworCWZvciAoaSA9IDA7CisJICAgICBpIDwgKFBBR0VfU0laRSAtIHNpemVvZihzdHJ1Y3Qgc3BfY2h1bmspIC0KKwkJICBzaXplb2YodTE2KSkgLyBzaXplb2YodTE2KSAtIDE7CisJICAgICBpKyspIHsKKwkJbmV3X2hlYWQtPnNoYXJlZF9wdHJbaV0gPSBpICsgMTsKKwl9CisJLyogdGVybWluYXRlIGxpc3QgKi8KKwluZXdfaGVhZC0+c2hhcmVkX3B0cltpXSA9IDB4RkZGRjsKKworCSpoZWFkID0gbmV3X2hlYWQ7CisJcmV0dXJuIDA7Cit9CisKK2ludCBjMl9pbml0X21xc3BfcG9vbChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgZ2ZwX3QgZ2ZwX21hc2ssCisJCSAgICAgIHN0cnVjdCBzcF9jaHVuayAqKnJvb3QpCit7CisJcmV0dXJuIGMyX2FsbG9jX21xc3BfY2h1bmsoYzJkZXYsIGdmcF9tYXNrLCByb290KTsKK30KKwordm9pZCBjMl9mcmVlX21xc3BfcG9vbChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IHNwX2NodW5rICpyb290KQoreworCXN0cnVjdCBzcF9jaHVuayAqbmV4dDsKKworCXdoaWxlIChyb290KSB7CisJCW5leHQgPSByb290LT5uZXh0OworCQlkbWFfdW5tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLAorCQkJCSBwY2lfdW5tYXBfYWRkcihyb290LCBtYXBwaW5nKSwgUEFHRV9TSVpFLAorCQkJICAgICAgICAgRE1BX0ZST01fREVWSUNFKTsKKwkJX19mcmVlX3BhZ2UoKHN0cnVjdCBwYWdlICopIHJvb3QpOworCQlyb290ID0gbmV4dDsKKwl9Cit9CisKK3UxNiAqYzJfYWxsb2NfbXFzcChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IHNwX2NodW5rICpoZWFkLAorCQkgICBkbWFfYWRkcl90ICpkbWFfYWRkciwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJdTE2IG1xc3A7CisKKwl3aGlsZSAoaGVhZCkgeworCQltcXNwID0gaGVhZC0+aGVhZDsKKwkJaWYgKG1xc3AgIT0gMHhGRkZGKSB7CisJCQloZWFkLT5oZWFkID0gaGVhZC0+c2hhcmVkX3B0clttcXNwXTsKKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGhlYWQtPm5leHQgPT0gTlVMTCkgeworCQkJaWYgKGMyX2FsbG9jX21xc3BfY2h1bmsoYzJkZXYsIGdmcF9tYXNrLCAmaGVhZC0+bmV4dCkgPT0KKwkJCSAgICAwKSB7CisJCQkJaGVhZCA9IGhlYWQtPm5leHQ7CisJCQkJbXFzcCA9IGhlYWQtPmhlYWQ7CisJCQkJaGVhZC0+aGVhZCA9IGhlYWQtPnNoYXJlZF9wdHJbbXFzcF07CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gTlVMTDsKKwkJfSBlbHNlCisJCQloZWFkID0gaGVhZC0+bmV4dDsKKwl9CisJaWYgKGhlYWQpIHsKKwkJKmRtYV9hZGRyID0gaGVhZC0+ZG1hX2FkZHIgKworCQkJICAgICgodW5zaWduZWQgbG9uZykgJihoZWFkLT5zaGFyZWRfcHRyW21xc3BdKSAtCisJCQkgICAgICh1bnNpZ25lZCBsb25nKSBoZWFkKTsKKwkJcHJfZGVidWcoIiVzIGFkZHIgJXAgZG1hX2FkZHIgJWxseFxuIiwgX19GVU5DVElPTl9fLAorCQkJICYoaGVhZC0+c2hhcmVkX3B0clttcXNwXSksICh1NjQpKmRtYV9hZGRyKTsKKwkJcmV0dXJuICYoaGVhZC0+c2hhcmVkX3B0clttcXNwXSk7CisJfQorCXJldHVybiBOVUxMOworfQorCit2b2lkIGMyX2ZyZWVfbXFzcCh1MTYgKiBtcXNwKQoreworCXN0cnVjdCBzcF9jaHVuayAqaGVhZDsKKwl1MTYgaWR4OworCisJLyogVGhlIGNodW5rIGNvbnRhaW5pbmcgdGhpcyBwdHIgYmVnaW5zIGF0IHRoZSBwYWdlIGJvdW5kYXJ5ICovCisJaGVhZCA9IChzdHJ1Y3Qgc3BfY2h1bmsgKikgKCh1bnNpZ25lZCBsb25nKSBtcXNwICYgUEFHRV9NQVNLKTsKKworCS8qIExpbmsgaGVhZCB0byBuZXcgbXFzcCAqLworCSptcXNwID0gaGVhZC0+aGVhZDsKKworCS8qIENvbXB1dGUgdGhlIHNoYXJlZF9wdHIgaW5kZXggKi8KKwlpZHggPSAoKHVuc2lnbmVkIGxvbmcpIG1xc3AgJiB+UEFHRV9NQVNLKSA+PiAxOworCWlkeCAtPSAodW5zaWduZWQgbG9uZykgJigoKHN0cnVjdCBzcF9jaHVuayAqKSAwKS0+c2hhcmVkX3B0clswXSkgPj4gMTsKKworCS8qIFBvaW50IHRoaXMgaW5kZXggYXQgdGhlIGhlYWQgKi8KKwloZWFkLT5zaGFyZWRfcHRyW2lkeF0gPSBoZWFkLT5oZWFkOworCisJLyogUG9pbnQgaGVhZCBhdCB0aGlzIGluZGV4ICovCisJaGVhZC0+aGVhZCA9IGlkeDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1MjU0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9jbS5jCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEFtbWFzc28sIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisjaW5jbHVkZSAiYzIuaCIKKyNpbmNsdWRlICJjMl93ci5oIgorI2luY2x1ZGUgImMyX3ZxLmgiCisjaW5jbHVkZSA8cmRtYS9pd19jbS5oPgorCitpbnQgYzJfbGxwX2Nvbm5lY3Qoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKml3X3BhcmFtKQoreworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gdG9fYzJkZXYoY21faWQtPmRldmljZSk7CisJc3RydWN0IGliX3FwICppYnFwOworCXN0cnVjdCBjMl9xcCAqcXA7CisJc3RydWN0IGMyd3JfcXBfY29ubmVjdF9yZXEgKndyOwkvKiB2YXJpYWJsZSBzaXplIG5lZWRzIGEgbWFsbG9jLiAqLworCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKKwlpbnQgZXJyOworCisJaWJxcCA9IGMyX2dldF9xcChjbV9pZC0+ZGV2aWNlLCBpd19wYXJhbS0+cXBuKTsKKwlpZiAoIWlicXApCisJCXJldHVybiAtRUlOVkFMOworCXFwID0gdG9fYzJxcChpYnFwKTsKKworCS8qIEFzc29jaWF0ZSBRUCA8LS0+IENNX0lEICovCisJY21faWQtPnByb3ZpZGVyX2RhdGEgPSBxcDsKKwljbV9pZC0+YWRkX3JlZihjbV9pZCk7CisJcXAtPmNtX2lkID0gY21faWQ7CisKKwkvKgorCSAqIG9ubHkgc3VwcG9ydCB0aGUgbWF4IHByaXZhdGVfZGF0YSBsZW5ndGgKKwkgKi8KKwlpZiAoaXdfcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gPiBDMl9NQVhfUFJJVkFURV9EQVRBX1NJWkUpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBiYWlsMDsKKwl9CisJLyoKKwkgKiBTZXQgdGhlIHJkbWEgcmVhZCBsaW1pdHMKKwkgKi8KKwllcnIgPSBjMl9xcF9zZXRfcmVhZF9saW1pdHMoYzJkZXYsIHFwLCBpd19wYXJhbS0+b3JkLCBpd19wYXJhbS0+aXJkKTsKKwlpZiAoZXJyKQorCQlnb3RvIGJhaWwwOworCisJLyoKKwkgKiBDcmVhdGUgYW5kIHNlbmQgYSBXUl9RUF9DT05ORUNULi4uCisJICovCisJd3IgPSBrbWFsbG9jKGMyZGV2LT5yZXFfdnEubXNnX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghd3IpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwl2cV9yZXEgPSB2cV9yZXFfYWxsb2MoYzJkZXYpOworCWlmICghdnFfcmVxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDE7CisJfQorCisJYzJfd3Jfc2V0X2lkKHdyLCBDQ1dSX1FQX0NPTk5FQ1QpOworCXdyLT5oZHIuY29udGV4dCA9IDA7CisJd3ItPnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCXdyLT5xcF9oYW5kbGUgPSBxcC0+YWRhcHRlcl9oYW5kbGU7CisKKwl3ci0+cmVtb3RlX2FkZHIgPSBjbV9pZC0+cmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyOworCXdyLT5yZW1vdGVfcG9ydCA9IGNtX2lkLT5yZW1vdGVfYWRkci5zaW5fcG9ydDsKKworCS8qCisJICogTW92ZSBhbnkgcHJpdmF0ZSBkYXRhIGZyb20gdGhlIGNhbGxlcnMncyBidWYgaW50bworCSAqIHRoZSBXUi4KKwkgKi8KKwlpZiAoaXdfcGFyYW0tPnByaXZhdGVfZGF0YSkgeworCQl3ci0+cHJpdmF0ZV9kYXRhX2xlbmd0aCA9CisJCQljcHVfdG9fYmUzMihpd19wYXJhbS0+cHJpdmF0ZV9kYXRhX2xlbik7CisJCW1lbWNweSgmd3ItPnByaXZhdGVfZGF0YVswXSwgaXdfcGFyYW0tPnByaXZhdGVfZGF0YSwKKwkJICAgICAgIGl3X3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuKTsKKwl9IGVsc2UKKwkJd3ItPnByaXZhdGVfZGF0YV9sZW5ndGggPSAwOworCisJLyoKKwkgKiBTZW5kIFdSIHRvIGFkYXB0ZXIuICBOT1RFOiBUaGVyZSBpcyBubyBzeW5jaCByZXBseSBmcm9tCisJICogdGhlIGFkYXB0ZXIuCisJICovCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgd3IpOworCXZxX3JlcV9mcmVlKGMyZGV2LCB2cV9yZXEpOworCisgYmFpbDE6CisJa2ZyZWUod3IpOworIGJhaWwwOgorCWlmIChlcnIpIHsKKwkJLyoKKwkJICogSWYgd2UgZmFpbCwgcmVsZWFzZSByZWZlcmVuY2Ugb24gUVAgYW5kCisJCSAqIGRpc2Fzc29jaWF0ZSBRUCBmcm9tIENNX0lECisJCSAqLworCQljbV9pZC0+cHJvdmlkZXJfZGF0YSA9IE5VTEw7CisJCXFwLT5jbV9pZCA9IE5VTEw7CisJCWNtX2lkLT5yZW1fcmVmKGNtX2lkKTsKKwl9CisJcmV0dXJuIGVycjsKK30KKworaW50IGMyX2xscF9zZXJ2aWNlX2NyZWF0ZShzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBpbnQgYmFja2xvZykKK3sKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldjsKKwlzdHJ1Y3QgYzJ3cl9lcF9saXN0ZW5fY3JlYXRlX3JlcSB3cjsKKwlzdHJ1Y3QgYzJ3cl9lcF9saXN0ZW5fY3JlYXRlX3JlcCAqcmVwbHk7CisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOworCWludCBlcnI7CisKKwljMmRldiA9IHRvX2MyZGV2KGNtX2lkLT5kZXZpY2UpOworCWlmIChjMmRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qCisJICogQWxsb2NhdGUgdmVyYnMgcmVxdWVzdC4KKwkgKi8KKwl2cV9yZXEgPSB2cV9yZXFfYWxsb2MoYzJkZXYpOworCWlmICghdnFfcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qCisJICogQnVpbGQgdGhlIFdSCisJICovCisJYzJfd3Jfc2V0X2lkKCZ3ciwgQ0NXUl9FUF9MSVNURU5fQ1JFQVRFKTsKKwl3ci5oZHIuY29udGV4dCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3Iucm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3IubG9jYWxfYWRkciA9IGNtX2lkLT5sb2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkcjsKKwl3ci5sb2NhbF9wb3J0ID0gY21faWQtPmxvY2FsX2FkZHIuc2luX3BvcnQ7CisJd3IuYmFja2xvZyA9IGNwdV90b19iZTMyKGJhY2tsb2cpOworCXdyLnVzZXJfY29udGV4dCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSBjbV9pZDsKKworCS8qCisJICogUmVmZXJlbmNlIHRoZSByZXF1ZXN0IHN0cnVjdC4gIERlcmVmZXJlbmNlZCBpbiB0aGUgaW50IGhhbmRsZXIuCisJICovCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCS8qCisJICogU2VuZCBXUiB0byBhZGFwdGVyCisJICovCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgJiB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwwOworCX0KKworCS8qCisJICogV2FpdCBmb3IgcmVwbHkgZnJvbSBhZGFwdGVyCisJICovCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMDsKKworCS8qCisJICogUHJvY2VzcyByZXBseQorCSAqLworCXJlcGx5ID0KKwkgICAgKHN0cnVjdCBjMndyX2VwX2xpc3Rlbl9jcmVhdGVfcmVwICopICh1bnNpZ25lZCBsb25nKSB2cV9yZXEtPnJlcGx5X21zZzsKKwlpZiAoIXJlcGx5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDE7CisJfQorCisJaWYgKChlcnIgPSBjMl9lcnJubyhyZXBseSkpICE9IDApCisJCWdvdG8gYmFpbDE7CisKKwkvKgorCSAqIEtlZXAgdGhlIGFkYXB0ZXIgaGFuZGxlLiBVc2VkIGluIHN1YnNlcXVlbnQgZGVzdHJveQorCSAqLworCWNtX2lkLT5wcm92aWRlcl9kYXRhID0gKHZvaWQqKSh1bnNpZ25lZCBsb25nKSByZXBseS0+ZXBfaGFuZGxlOworCisJLyoKKwkgKiBmcmVlIHZxIHN0dWZmCisJICovCisJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsIHJlcGx5KTsKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKworCXJldHVybiAwOworCisgYmFpbDE6CisJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsIHJlcGx5KTsKKyBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQorCisKK2ludCBjMl9sbHBfc2VydmljZV9kZXN0cm95KHN0cnVjdCBpd19jbV9pZCAqY21faWQpCit7CisKKwlzdHJ1Y3QgYzJfZGV2ICpjMmRldjsKKwlzdHJ1Y3QgYzJ3cl9lcF9saXN0ZW5fZGVzdHJveV9yZXEgd3I7CisJc3RydWN0IGMyd3JfZXBfbGlzdGVuX2Rlc3Ryb3lfcmVwICpyZXBseTsKKwlzdHJ1Y3QgYzJfdnFfcmVxICp2cV9yZXE7CisJaW50IGVycjsKKworCWMyZGV2ID0gdG9fYzJkZXYoY21faWQtPmRldmljZSk7CisJaWYgKGMyZGV2ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBBbGxvY2F0ZSB2ZXJicyByZXF1ZXN0LgorCSAqLworCXZxX3JlcSA9IHZxX3JlcV9hbGxvYyhjMmRldik7CisJaWYgKCF2cV9yZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBCdWlsZCB0aGUgV1IKKwkgKi8KKwljMl93cl9zZXRfaWQoJndyLCBDQ1dSX0VQX0xJU1RFTl9ERVNUUk9ZKTsKKwl3ci5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3Iucm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3IuZXBfaGFuZGxlID0gKHUzMikodW5zaWduZWQgbG9uZyljbV9pZC0+cHJvdmlkZXJfZGF0YTsKKworCS8qCisJICogcmVmZXJlbmNlIHRoZSByZXF1ZXN0IHN0cnVjdC4gIGRlcmVmZXJlbmNlZCBpbiB0aGUgaW50IGhhbmRsZXIuCisJICovCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCS8qCisJICogU2VuZCBXUiB0byBhZGFwdGVyCisJICovCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgJiB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwwOworCX0KKworCS8qCisJICogV2FpdCBmb3IgcmVwbHkgZnJvbSBhZGFwdGVyCisJICovCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMDsKKworCS8qCisJICogUHJvY2VzcyByZXBseQorCSAqLworCXJlcGx5PShzdHJ1Y3QgYzJ3cl9lcF9saXN0ZW5fZGVzdHJveV9yZXAgKikodW5zaWduZWQgbG9uZyl2cV9yZXEtPnJlcGx5X21zZzsKKwlpZiAoIXJlcGx5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDA7CisJfQorCWlmICgoZXJyID0gYzJfZXJybm8ocmVwbHkpKSAhPSAwKQorCQlnb3RvIGJhaWwxOworCisgYmFpbDE6CisJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsIHJlcGx5KTsKKyBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYzJfbGxwX2FjY2VwdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaXdfY21fY29ubl9wYXJhbSAqaXdfcGFyYW0pCit7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSB0b19jMmRldihjbV9pZC0+ZGV2aWNlKTsKKwlzdHJ1Y3QgYzJfcXAgKnFwOworCXN0cnVjdCBpYl9xcCAqaWJxcDsKKwlzdHJ1Y3QgYzJ3cl9jcl9hY2NlcHRfcmVxICp3cjsJLyogdmFyaWFibGUgbGVuZ3RoIFdSICovCisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOworCXN0cnVjdCBjMndyX2NyX2FjY2VwdF9yZXAgKnJlcGx5OwkvKiBWUSBSZXBseSBtc2cgcHRyLiAqLworCWludCBlcnI7CisKKwlpYnFwID0gYzJfZ2V0X3FwKGNtX2lkLT5kZXZpY2UsIGl3X3BhcmFtLT5xcG4pOworCWlmICghaWJxcCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcXAgPSB0b19jMnFwKGlicXApOworCisJLyogU2V0IHRoZSBSRE1BIHJlYWQgbGltaXRzICovCisJZXJyID0gYzJfcXBfc2V0X3JlYWRfbGltaXRzKGMyZGV2LCBxcCwgaXdfcGFyYW0tPm9yZCwgaXdfcGFyYW0tPmlyZCk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMDsKKworCS8qIEFsbG9jYXRlIHZlcmJzIHJlcXVlc3QuICovCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAoIXZxX3JlcSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwxOworCX0KKwl2cV9yZXEtPnFwID0gcXA7CisJdnFfcmVxLT5jbV9pZCA9IGNtX2lkOworCXZxX3JlcS0+ZXZlbnQgPSBJV19DTV9FVkVOVF9FU1RBQkxJU0hFRDsKKworCXdyID0ga21hbGxvYyhjMmRldi0+cmVxX3ZxLm1zZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDI7CisJfQorCisJLyogQnVpbGQgdGhlIFdSICovCisJYzJfd3Jfc2V0X2lkKHdyLCBDQ1dSX0NSX0FDQ0VQVCk7CisJd3ItPmhkci5jb250ZXh0ID0gKHVuc2lnbmVkIGxvbmcpIHZxX3JlcTsKKwl3ci0+cm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3ItPmVwX2hhbmRsZSA9ICh1MzIpICh1bnNpZ25lZCBsb25nKSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKwl3ci0+cXBfaGFuZGxlID0gcXAtPmFkYXB0ZXJfaGFuZGxlOworCisJLyogUmVwbGFjZSB0aGUgY3JfaGFuZGxlIHdpdGggdGhlIFFQIGFmdGVyIGFjY2VwdCAqLworCWNtX2lkLT5wcm92aWRlcl9kYXRhID0gcXA7CisJY21faWQtPmFkZF9yZWYoY21faWQpOworCXFwLT5jbV9pZCA9IGNtX2lkOworCisJY21faWQtPnByb3ZpZGVyX2RhdGEgPSBxcDsKKworCS8qIFZhbGlkYXRlIHByaXZhdGVfZGF0YSBsZW5ndGggKi8KKwlpZiAoaXdfcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4gPiBDMl9NQVhfUFJJVkFURV9EQVRBX1NJWkUpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBiYWlsMjsKKwl9CisKKwlpZiAoaXdfcGFyYW0tPnByaXZhdGVfZGF0YSkgeworCQl3ci0+cHJpdmF0ZV9kYXRhX2xlbmd0aCA9IGNwdV90b19iZTMyKGl3X3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuKTsKKwkJbWVtY3B5KCZ3ci0+cHJpdmF0ZV9kYXRhWzBdLAorCQkgICAgICAgaXdfcGFyYW0tPnByaXZhdGVfZGF0YSwgaXdfcGFyYW0tPnByaXZhdGVfZGF0YV9sZW4pOworCX0gZWxzZQorCQl3ci0+cHJpdmF0ZV9kYXRhX2xlbmd0aCA9IDA7CisKKwkvKiBSZWZlcmVuY2UgdGhlIHJlcXVlc3Qgc3RydWN0LiAgRGVyZWZlcmVuY2VkIGluIHRoZSBpbnQgaGFuZGxlci4gKi8KKwl2cV9yZXFfZ2V0KGMyZGV2LCB2cV9yZXEpOworCisJLyogU2VuZCBXUiB0byBhZGFwdGVyICovCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgd3IpOworCWlmIChlcnIpIHsKKwkJdnFfcmVxX3B1dChjMmRldiwgdnFfcmVxKTsKKwkJZ290byBiYWlsMjsKKwl9CisKKwkvKiBXYWl0IGZvciByZXBseSBmcm9tIGFkYXB0ZXIgKi8KKwllcnIgPSB2cV93YWl0X2Zvcl9yZXBseShjMmRldiwgdnFfcmVxKTsKKwlpZiAoZXJyKQorCQlnb3RvIGJhaWwyOworCisJLyogQ2hlY2sgdGhhdCByZXBseSBpcyBwcmVzZW50ICovCisJcmVwbHkgPSAoc3RydWN0IGMyd3JfY3JfYWNjZXB0X3JlcCAqKSAodW5zaWduZWQgbG9uZykgdnFfcmVxLT5yZXBseV9tc2c7CisJaWYgKCFyZXBseSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwyOworCX0KKworCWVyciA9IGMyX2Vycm5vKHJlcGx5KTsKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworCisJaWYgKCFlcnIpCisJCWMyX3NldF9xcF9zdGF0ZShxcCwgQzJfUVBfU1RBVEVfUlRTKTsKKyBiYWlsMjoKKwlrZnJlZSh3cik7CisgYmFpbDE6CisJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CisgYmFpbDA6CisJaWYgKGVycikgeworCQkvKgorCQkgKiBJZiB3ZSBmYWlsLCByZWxlYXNlIHJlZmVyZW5jZSBvbiBRUCBhbmQKKwkJICogZGlzYXNzb2NpYXRlIFFQIGZyb20gQ01fSUQKKwkJICovCisJCWNtX2lkLT5wcm92aWRlcl9kYXRhID0gTlVMTDsKKwkJcXAtPmNtX2lkID0gTlVMTDsKKwkJY21faWQtPnJlbV9yZWYoY21faWQpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitpbnQgYzJfbGxwX3JlamVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBjb25zdCB2b2lkICpwZGF0YSwgdTggcGRhdGFfbGVuKQoreworCXN0cnVjdCBjMl9kZXYgKmMyZGV2OworCXN0cnVjdCBjMndyX2NyX3JlamVjdF9yZXEgd3I7CisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOworCXN0cnVjdCBjMndyX2NyX3JlamVjdF9yZXAgKnJlcGx5OworCWludCBlcnI7CisKKwljMmRldiA9IHRvX2MyZGV2KGNtX2lkLT5kZXZpY2UpOworCisJLyoKKwkgKiBBbGxvY2F0ZSB2ZXJicyByZXF1ZXN0LgorCSAqLworCXZxX3JlcSA9IHZxX3JlcV9hbGxvYyhjMmRldik7CisJaWYgKCF2cV9yZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJLyoKKwkgKiBCdWlsZCB0aGUgV1IKKwkgKi8KKwljMl93cl9zZXRfaWQoJndyLCBDQ1dSX0NSX1JFSkVDVCk7CisJd3IuaGRyLmNvbnRleHQgPSAodW5zaWduZWQgbG9uZykgdnFfcmVxOworCXdyLnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCXdyLmVwX2hhbmRsZSA9ICh1MzIpICh1bnNpZ25lZCBsb25nKSBjbV9pZC0+cHJvdmlkZXJfZGF0YTsKKworCS8qCisJICogcmVmZXJlbmNlIHRoZSByZXF1ZXN0IHN0cnVjdC4gIGRlcmVmZXJlbmNlZCBpbiB0aGUgaW50IGhhbmRsZXIuCisJICovCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCS8qCisJICogU2VuZCBXUiB0byBhZGFwdGVyCisJICovCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgJiB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwwOworCX0KKworCS8qCisJICogV2FpdCBmb3IgcmVwbHkgZnJvbSBhZGFwdGVyCisJICovCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMDsKKworCS8qCisJICogUHJvY2VzcyByZXBseQorCSAqLworCXJlcGx5ID0gKHN0cnVjdCBjMndyX2NyX3JlamVjdF9yZXAgKikgKHVuc2lnbmVkIGxvbmcpCisJCXZxX3JlcS0+cmVwbHlfbXNnOworCWlmICghcmVwbHkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisJZXJyID0gYzJfZXJybm8ocmVwbHkpOworCS8qCisJICogZnJlZSB2cSBzdHVmZgorCSAqLworCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisKKyBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfY3EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDdiY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NxLmMKQEAgLTAsMCArMSw0MzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQsIDIwMDUgVG9wc3BpbiBDb21tdW5pY2F0aW9ucy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBNZWxsYW5veCBUZWNobm9sb2dpZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVm9sdGFpcmUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgImMyX3ZxLmgiCisjaW5jbHVkZSAiYzJfc3RhdHVzLmgiCisKKyNkZWZpbmUgQzJfQ1FfTVNHX1NJWkUgKChzaXplb2Yoc3RydWN0IGMyd3JfY2UpICsgMzItMSkgJiB+KDMyLTEpKQorCitzdGF0aWMgc3RydWN0IGMyX2NxICpjMl9jcV9nZXQoc3RydWN0IGMyX2RldiAqYzJkZXYsIGludCBjcW4pCit7CisJc3RydWN0IGMyX2NxICpjcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmMyZGV2LT5sb2NrLCBmbGFncyk7CisJY3EgPSBjMmRldi0+cXB0cl9hcnJheVtjcW5dOworCWlmICghY3EpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYzJkZXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWF0b21pY19pbmMoJmNxLT5yZWZjb3VudCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYzJkZXYtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gY3E7Cit9CisKK3N0YXRpYyB2b2lkIGMyX2NxX3B1dChzdHJ1Y3QgYzJfY3EgKmNxKQoreworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjcS0+cmVmY291bnQpKQorCQl3YWtlX3VwKCZjcS0+d2FpdCk7Cit9CisKK3ZvaWQgYzJfY3FfZXZlbnQoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBtcV9pbmRleCkKK3sKKwlzdHJ1Y3QgYzJfY3EgKmNxOworCisJY3EgPSBjMl9jcV9nZXQoYzJkZXYsIG1xX2luZGV4KTsKKwlpZiAoIWNxKSB7CisJCXByaW50aygiZGlzY2FyZGluZyBldmVudHMgb24gZGVzdHJveWVkIENRTj0lZFxuIiwgbXFfaW5kZXgpOworCQlyZXR1cm47CisJfQorCisJKCpjcS0+aWJjcS5jb21wX2hhbmRsZXIpICgmY3EtPmliY3EsIGNxLT5pYmNxLmNxX2NvbnRleHQpOworCWMyX2NxX3B1dChjcSk7Cit9CisKK3ZvaWQgYzJfY3FfY2xlYW4oc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9xcCAqcXAsIHUzMiBtcV9pbmRleCkKK3sKKwlzdHJ1Y3QgYzJfY3EgKmNxOworCXN0cnVjdCBjMl9tcSAqcTsKKworCWNxID0gYzJfY3FfZ2V0KGMyZGV2LCBtcV9pbmRleCk7CisJaWYgKCFjcSkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycSgmY3EtPmxvY2spOworCXEgPSAmY3EtPm1xOworCWlmIChxICYmICFjMl9tcV9lbXB0eShxKSkgeworCQl1MTYgcHJpdiA9IHEtPnByaXY7CisJCXN0cnVjdCBjMndyX2NlICptc2c7CisKKwkJd2hpbGUgKHByaXYgIT0gYmUxNl90b19jcHUoKnEtPnNoYXJlZCkpIHsKKwkJCW1zZyA9IChzdHJ1Y3QgYzJ3cl9jZSAqKQorCQkJCShxLT5tc2dfcG9vbC5ob3N0ICsgcHJpdiAqIHEtPm1zZ19zaXplKTsKKwkJCWlmIChtc2ctPnFwX3VzZXJfY29udGV4dCA9PSAodTY0KSAodW5zaWduZWQgbG9uZykgcXApIHsKKwkJCQltc2ctPnFwX3VzZXJfY29udGV4dCA9ICh1NjQpIDA7CisJCQl9CisJCQlwcml2ID0gKHByaXYgKyAxKSAlIHEtPnFfc2l6ZTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnEoJmNxLT5sb2NrKTsKKwljMl9jcV9wdXQoY3EpOworfQorCitzdGF0aWMgaW5saW5lIGVudW0gaWJfd2Nfc3RhdHVzIGMyX2NxZV9zdGF0dXNfdG9fb3BlbmliKHU4IHN0YXR1cykKK3sKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgQzJfT0s6CisJCXJldHVybiBJQl9XQ19TVUNDRVNTOworCWNhc2UgQ0NFUlJfRkxVU0hFRDoKKwkJcmV0dXJuIElCX1dDX1dSX0ZMVVNIX0VSUjsKKwljYXNlIENDRVJSX0JBU0VfQU5EX0JPVU5EU19WSU9MQVRJT046CisJCXJldHVybiBJQl9XQ19MT0NfUFJPVF9FUlI7CisJY2FzZSBDQ0VSUl9BQ0NFU1NfVklPTEFUSU9OOgorCQlyZXR1cm4gSUJfV0NfTE9DX0FDQ0VTU19FUlI7CisJY2FzZSBDQ0VSUl9UT1RBTF9MRU5HVEhfVE9PX0JJRzoKKwkJcmV0dXJuIElCX1dDX0xPQ19MRU5fRVJSOworCWNhc2UgQ0NFUlJfSU5WQUxJRF9XSU5ET1c6CisJCXJldHVybiBJQl9XQ19NV19CSU5EX0VSUjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gSUJfV0NfR0VORVJBTF9FUlI7CisJfQorfQorCisKK3N0YXRpYyBpbmxpbmUgaW50IGMyX3BvbGxfb25lKHN0cnVjdCBjMl9kZXYgKmMyZGV2LAorCQkJICAgICAgc3RydWN0IGMyX2NxICpjcSwgc3RydWN0IGliX3djICplbnRyeSkKK3sKKwlzdHJ1Y3QgYzJ3cl9jZSAqY2U7CisJc3RydWN0IGMyX3FwICpxcDsKKwlpbnQgaXNfcmVjdiA9IDA7CisKKwljZSA9IChzdHJ1Y3QgYzJ3cl9jZSAqKSBjMl9tcV9jb25zdW1lKCZjcS0+bXEpOworCWlmICghY2UpIHsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJLyoKKwkgKiBpZiB0aGUgcXAgcmV0dXJuZWQgaXMgbnVsbCB0aGVuIHRoaXMgcXAgaGFzIGFscmVhZHkKKwkgKiBiZWVuIGZyZWVkIGFuZCB3ZSBhcmUgdW5hYmxlIHByb2Nlc3MgdGhlIGNvbXBsZXRpb24uCisJICogdHJ5IHB1bGxpbmcgdGhlIG5leHQgbWVzc2FnZQorCSAqLworCXdoaWxlICgocXAgPQorCQkoc3RydWN0IGMyX3FwICopICh1bnNpZ25lZCBsb25nKSBjZS0+cXBfdXNlcl9jb250ZXh0KSA9PSBOVUxMKSB7CisJCWMyX21xX2ZyZWUoJmNxLT5tcSk7CisJCWNlID0gKHN0cnVjdCBjMndyX2NlICopIGMyX21xX2NvbnN1bWUoJmNxLT5tcSk7CisJCWlmICghY2UpCisJCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisKKwllbnRyeS0+c3RhdHVzID0gYzJfY3FlX3N0YXR1c190b19vcGVuaWIoYzJfd3JfZ2V0X3Jlc3VsdChjZSkpOworCWVudHJ5LT53cl9pZCA9IGNlLT5oZHIuY29udGV4dDsKKwllbnRyeS0+cXBfbnVtID0gY2UtPmhhbmRsZTsKKwllbnRyeS0+d2NfZmxhZ3MgPSAwOworCWVudHJ5LT5zbGlkID0gMDsKKwllbnRyeS0+c2wgPSAwOworCWVudHJ5LT5zcmNfcXAgPSAwOworCWVudHJ5LT5kbGlkX3BhdGhfYml0cyA9IDA7CisJZW50cnktPnBrZXlfaW5kZXggPSAwOworCisJc3dpdGNoIChjMl93cl9nZXRfaWQoY2UpKSB7CisJY2FzZSBDMl9XUl9UWVBFX1NFTkQ6CisJCWVudHJ5LT5vcGNvZGUgPSBJQl9XQ19TRU5EOworCQlicmVhazsKKwljYXNlIEMyX1dSX1RZUEVfUkRNQV9XUklURToKKwkJZW50cnktPm9wY29kZSA9IElCX1dDX1JETUFfV1JJVEU7CisJCWJyZWFrOworCWNhc2UgQzJfV1JfVFlQRV9SRE1BX1JFQUQ6CisJCWVudHJ5LT5vcGNvZGUgPSBJQl9XQ19SRE1BX1JFQUQ7CisJCWJyZWFrOworCWNhc2UgQzJfV1JfVFlQRV9CSU5EX01XOgorCQllbnRyeS0+b3Bjb2RlID0gSUJfV0NfQklORF9NVzsKKwkJYnJlYWs7CisJY2FzZSBDMl9XUl9UWVBFX1JFQ1Y6CisJCWVudHJ5LT5ieXRlX2xlbiA9IGJlMzJfdG9fY3B1KGNlLT5ieXRlc19yY3ZkKTsKKwkJZW50cnktPm9wY29kZSA9IElCX1dDX1JFQ1Y7CisJCWlzX3JlY3YgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwkvKiBjb25zdW1lIHRoZSBXUUVzICovCisJaWYgKGlzX3JlY3YpCisJCWMyX21xX2xjb25zdW1lKCZxcC0+cnFfbXEsIDEpOworCWVsc2UKKwkJYzJfbXFfbGNvbnN1bWUoJnFwLT5zcV9tcSwKKwkJCSAgICAgICBiZTMyX3RvX2NwdShjMl93cl9nZXRfd3FlX2NvdW50KGNlKSkgKyAxKTsKKworCS8qIGZyZWUgdGhlIG1lc3NhZ2UgKi8KKwljMl9tcV9mcmVlKCZjcS0+bXEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjMl9wb2xsX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgaW50IG51bV9lbnRyaWVzLCBzdHJ1Y3QgaWJfd2MgKmVudHJ5KQoreworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gdG9fYzJkZXYoaWJjcS0+ZGV2aWNlKTsKKwlzdHJ1Y3QgYzJfY3EgKmNxID0gdG9fYzJjcShpYmNxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBucG9sbGVkLCBlcnI7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPmxvY2ssIGZsYWdzKTsKKworCWZvciAobnBvbGxlZCA9IDA7IG5wb2xsZWQgPCBudW1fZW50cmllczsgKytucG9sbGVkKSB7CisKKwkJZXJyID0gYzJfcG9sbF9vbmUoYzJkZXYsIGNxLCBlbnRyeSArIG5wb2xsZWQpOworCQlpZiAoZXJyKQorCQkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3EtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiBucG9sbGVkOworfQorCitpbnQgYzJfYXJtX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnkgbm90aWZ5KQoreworCXN0cnVjdCBjMl9tcV9zaGFyZWQgX19pb21lbSAqc2hhcmVkOworCXN0cnVjdCBjMl9jcSAqY3E7CisKKwljcSA9IHRvX2MyY3EoaWJjcSk7CisJc2hhcmVkID0gY3EtPm1xLnBlZXI7CisKKwlpZiAobm90aWZ5ID09IElCX0NRX05FWFRfQ09NUCkKKwkJd3JpdGViKEMyX0NRX05PVElGSUNBVElPTl9UWVBFX05FWFQsICZzaGFyZWQtPm5vdGlmaWNhdGlvbl90eXBlKTsKKwllbHNlIGlmIChub3RpZnkgPT0gSUJfQ1FfU09MSUNJVEVEKQorCQl3cml0ZWIoQzJfQ1FfTk9USUZJQ0FUSU9OX1RZUEVfTkVYVF9TRSwgJnNoYXJlZC0+bm90aWZpY2F0aW9uX3R5cGUpOworCWVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3cml0ZWIoQ1FfV0FJVF9GT1JfRE1BIHwgQ1FfQVJNRUQsICZzaGFyZWQtPmFybWVkKTsKKworCS8qCisJICogTm93IHJlYWQgYmFjayBzaGFyZWQtPmFybWVkIHRvIG1ha2UgdGhlIFBDSQorCSAqIHdyaXRlIHN5bmNocm9ub3VzLiAgVGhpcyBpcyBuZWNlc3NhcnkgZm9yCisJICogY29ycmVjdCBjcSBub3RpZmljYXRpb24gc2VtYW50aWNzLgorCSAqLworCXJlYWRiKCZzaGFyZWQtPmFybWVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjMl9mcmVlX2NxX2J1ZihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX21xICptcSkKK3sKKworCWRtYV91bm1hcF9zaW5nbGUoYzJkZXYtPmliZGV2LmRtYV9kZXZpY2UsIHBjaV91bm1hcF9hZGRyKG1xLCBtYXBwaW5nKSwKKwkJCSBtcS0+cV9zaXplICogbXEtPm1zZ19zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIG1xLT5tc2dfcG9vbC5ob3N0LAorCQkgICBnZXRfb3JkZXIobXEtPnFfc2l6ZSAqIG1xLT5tc2dfc2l6ZSkpOworfQorCitzdGF0aWMgaW50IGMyX2FsbG9jX2NxX2J1ZihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX21xICptcSwgaW50IHFfc2l6ZSwKKwkJCSAgIGludCBtc2dfc2l6ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBvb2xfc3RhcnQ7CisKKwlwb29sX3N0YXJ0ID0gX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLAorCQkJCSAgICAgIGdldF9vcmRlcihxX3NpemUgKiBtc2dfc2l6ZSkpOworCWlmICghcG9vbF9zdGFydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljMl9tcV9yZXBfaW5pdChtcSwKKwkJICAgICAgIDAsCQkvKiBpbmRleCAoY3VycmVudGx5IHVua25vd24pICovCisJCSAgICAgICBxX3NpemUsCisJCSAgICAgICBtc2dfc2l6ZSwKKwkJICAgICAgICh1OCAqKSBwb29sX3N0YXJ0LAorCQkgICAgICAgTlVMTCwJLyogcGVlciAoY3VycmVudGx5IHVua25vd24pICovCisJCSAgICAgICBDMl9NUV9IT1NUX1RBUkdFVCk7CisKKwltcS0+aG9zdF9kbWEgPSBkbWFfbWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKKwkJCQkgICAgICAodm9pZCAqKXBvb2xfc3RhcnQsCisJCQkJICAgICAgcV9zaXplICogbXNnX3NpemUsIERNQV9GUk9NX0RFVklDRSk7CisJcGNpX3VubWFwX2FkZHJfc2V0KG1xLCBtYXBwaW5nLCBtcS0+aG9zdF9kbWEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBjMl9pbml0X2NxKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBpbnQgZW50cmllcywKKwkgICAgICAgc3RydWN0IGMyX3Vjb250ZXh0ICpjdHgsIHN0cnVjdCBjMl9jcSAqY3EpCit7CisJc3RydWN0IGMyd3JfY3FfY3JlYXRlX3JlcSB3cjsKKwlzdHJ1Y3QgYzJ3cl9jcV9jcmVhdGVfcmVwICpyZXBseTsKKwl1bnNpZ25lZCBsb25nIHBlZXJfcGE7CisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOworCWludCBlcnI7CisKKwltaWdodF9zbGVlcCgpOworCisJY3EtPmliY3EuY3FlID0gZW50cmllcyAtIDE7CisJY3EtPmlzX2tlcm5lbCA9ICFjdHg7CisKKwkvKiBBbGxvY2F0ZSBhIHNoYXJlZCBwb2ludGVyICovCisJY3EtPm1xLnNoYXJlZCA9IGMyX2FsbG9jX21xc3AoYzJkZXYsIGMyZGV2LT5rZXJuX21xc3BfcG9vbCwKKwkJCQkgICAgICAmY3EtPm1xLnNoYXJlZF9kbWEsIEdGUF9LRVJORUwpOworCWlmICghY3EtPm1xLnNoYXJlZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKiBBbGxvY2F0ZSBwYWdlcyBmb3IgdGhlIG1lc3NhZ2UgcG9vbCAqLworCWVyciA9IGMyX2FsbG9jX2NxX2J1ZihjMmRldiwgJmNxLT5tcSwgZW50cmllcyArIDEsIEMyX0NRX01TR19TSVpFKTsKKwlpZiAoZXJyKQorCQlnb3RvIGJhaWwwOworCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAoIXZxX3JlcSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwxOworCX0KKworCW1lbXNldCgmd3IsIDAsIHNpemVvZih3cikpOworCWMyX3dyX3NldF9pZCgmd3IsIENDV1JfQ1FfQ1JFQVRFKTsKKwl3ci5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3Iucm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3IubXNnX3NpemUgPSBjcHVfdG9fYmUzMihjcS0+bXEubXNnX3NpemUpOworCXdyLmRlcHRoID0gY3B1X3RvX2JlMzIoY3EtPm1xLnFfc2l6ZSk7CisJd3Iuc2hhcmVkX2h0ID0gY3B1X3RvX2JlNjQoY3EtPm1xLnNoYXJlZF9kbWEpOworCXdyLm1zZ19wb29sID0gY3B1X3RvX2JlNjQoY3EtPm1xLmhvc3RfZG1hKTsKKwl3ci51c2VyX2NvbnRleHQgPSAodTY0KSAodW5zaWduZWQgbG9uZykgKGNxKTsKKworCXZxX3JlcV9nZXQoYzJkZXYsIHZxX3JlcSk7CisKKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAodW5pb24gYzJ3ciAqKSAmIHdyKTsKKwlpZiAoZXJyKSB7CisJCXZxX3JlcV9wdXQoYzJkZXYsIHZxX3JlcSk7CisJCWdvdG8gYmFpbDI7CisJfQorCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMjsKKworCXJlcGx5ID0gKHN0cnVjdCBjMndyX2NxX2NyZWF0ZV9yZXAgKikgKHVuc2lnbmVkIGxvbmcpICh2cV9yZXEtPnJlcGx5X21zZyk7CisJaWYgKCFyZXBseSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwyOworCX0KKworCWlmICgoZXJyID0gYzJfZXJybm8ocmVwbHkpKSAhPSAwKQorCQlnb3RvIGJhaWwzOworCisJY3EtPmFkYXB0ZXJfaGFuZGxlID0gcmVwbHktPmNxX2hhbmRsZTsKKwljcS0+bXEuaW5kZXggPSBiZTMyX3RvX2NwdShyZXBseS0+bXFfaW5kZXgpOworCisJcGVlcl9wYSA9IGMyZGV2LT5wYSArIGJlMzJfdG9fY3B1KHJlcGx5LT5hZGFwdGVyX3NoYXJlZCk7CisJY3EtPm1xLnBlZXIgPSBpb3JlbWFwX25vY2FjaGUocGVlcl9wYSwgUEFHRV9TSVpFKTsKKwlpZiAoIWNxLT5tcS5wZWVyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDM7CisJfQorCisJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsIHJlcGx5KTsKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKworCXNwaW5fbG9ja19pbml0KCZjcS0+bG9jayk7CisJYXRvbWljX3NldCgmY3EtPnJlZmNvdW50LCAxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjcS0+d2FpdCk7CisKKwkvKgorCSAqIFVzZSB0aGUgTVEgaW5kZXggYWxsb2NhdGVkIGJ5IHRoZSBhZGFwdGVyIHRvCisJICogc3RvcmUgdGhlIENRIGluIHRoZSBxcHRyX2FycmF5CisJICovCisJY3EtPmNxbiA9IGNxLT5tcS5pbmRleDsKKwljMmRldi0+cXB0cl9hcnJheVtjcS0+Y3FuXSA9IGNxOworCisJcmV0dXJuIDA7CisKKyAgICAgIGJhaWwzOgorCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisgICAgICBiYWlsMjoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKyAgICAgIGJhaWwxOgorCWMyX2ZyZWVfY3FfYnVmKGMyZGV2LCAmY3EtPm1xKTsKKyAgICAgIGJhaWwwOgorCWMyX2ZyZWVfbXFzcChjcS0+bXEuc2hhcmVkKTsKKworCXJldHVybiBlcnI7Cit9CisKK3ZvaWQgYzJfZnJlZV9jcShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX2NxICpjcSkKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKKwlzdHJ1Y3QgYzJ3cl9jcV9kZXN0cm95X3JlcSB3cjsKKwlzdHJ1Y3QgYzJ3cl9jcV9kZXN0cm95X3JlcCAqcmVwbHk7CisKKwltaWdodF9zbGVlcCgpOworCisJLyogQ2xlYXIgQ1EgZnJvbSB0aGUgcXB0ciBhcnJheSAqLworCXNwaW5fbG9ja19pcnEoJmMyZGV2LT5sb2NrKTsKKwljMmRldi0+cXB0cl9hcnJheVtjcS0+bXEuaW5kZXhdID0gTlVMTDsKKwlhdG9taWNfZGVjKCZjcS0+cmVmY291bnQpOworCXNwaW5fdW5sb2NrX2lycSgmYzJkZXYtPmxvY2spOworCisJd2FpdF9ldmVudChjcS0+d2FpdCwgIWF0b21pY19yZWFkKCZjcS0+cmVmY291bnQpKTsKKworCXZxX3JlcSA9IHZxX3JlcV9hbGxvYyhjMmRldik7CisJaWYgKCF2cV9yZXEpIHsKKwkJZ290byBiYWlsMDsKKwl9CisKKwltZW1zZXQoJndyLCAwLCBzaXplb2Yod3IpKTsKKwljMl93cl9zZXRfaWQoJndyLCBDQ1dSX0NRX0RFU1RST1kpOworCXdyLmhkci5jb250ZXh0ID0gKHVuc2lnbmVkIGxvbmcpIHZxX3JlcTsKKwl3ci5ybmljX2hhbmRsZSA9IGMyZGV2LT5hZGFwdGVyX2hhbmRsZTsKKwl3ci5jcV9oYW5kbGUgPSBjcS0+YWRhcHRlcl9oYW5kbGU7CisKKwl2cV9yZXFfZ2V0KGMyZGV2LCB2cV9yZXEpOworCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgJiB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwxOworCX0KKworCWVyciA9IHZxX3dhaXRfZm9yX3JlcGx5KGMyZGV2LCB2cV9yZXEpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDE7CisKKwlyZXBseSA9IChzdHJ1Y3QgYzJ3cl9jcV9kZXN0cm95X3JlcCAqKSAodW5zaWduZWQgbG9uZykgKHZxX3JlcS0+cmVwbHlfbXNnKTsKKworCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisgICAgICBiYWlsMToKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKyAgICAgIGJhaWwwOgorCWlmIChjcS0+aXNfa2VybmVsKSB7CisJCWMyX2ZyZWVfY3FfYnVmKGMyZGV2LCAmY3EtPm1xKTsKKwl9CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfaW50ci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2ludHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDBiYzMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2ludHIuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgPHJkbWEvaXdfY20uaD4KKyNpbmNsdWRlICJjMl92cS5oIgorCitzdGF0aWMgdm9pZCBoYW5kbGVfbXEoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBpbmRleCk7CitzdGF0aWMgdm9pZCBoYW5kbGVfdnEoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBtcV9pbmRleCk7CisKKy8qCisgKiBIYW5kbGUgUk5JQyBpbnRlcnJ1cHRzCisgKi8KK3ZvaWQgYzJfcm5pY19pbnRlcnJ1cHQoc3RydWN0IGMyX2RldiAqYzJkZXYpCit7CisJdW5zaWduZWQgaW50IG1xX2luZGV4OworCisJd2hpbGUgKGMyZGV2LT5oaW50c19yZWFkICE9IGJlMTZfdG9fY3B1KCpjMmRldi0+aGludF9jb3VudCkpIHsKKwkJbXFfaW5kZXggPSByZWFkbChjMmRldi0+cmVncyArIFBDSV9CQVIwX0hPU1RfSElOVCk7CisJCWlmIChtcV9pbmRleCAmIDB4ODAwMDAwMDApIHsKKwkJCWJyZWFrOworCQl9CisKKwkJYzJkZXYtPmhpbnRzX3JlYWQrKzsKKwkJaGFuZGxlX21xKGMyZGV2LCBtcV9pbmRleCk7CisJfQorCit9CisKKy8qCisgKiBUb3AgbGV2ZWwgTVEgaGFuZGxlcgorICovCitzdGF0aWMgdm9pZCBoYW5kbGVfbXEoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBtcV9pbmRleCkKK3sKKwlpZiAoYzJkZXYtPnFwdHJfYXJyYXlbbXFfaW5kZXhdID09IE5VTEwpIHsKKwkJcHJfZGVidWcoS0VSTl9JTkZPICJoYW5kbGVfbXE6IHN0cmF5IGFjdGl2aXR5IGZvciBtcV9pbmRleD0lZFxuIiwKKwkJCW1xX2luZGV4KTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAobXFfaW5kZXgpIHsKKwljYXNlICgwKToKKwkJLyoKKwkJICogQW4gaW5kZXggb2YgMCBpbiB0aGUgYWN0aXZpdHkgcXVldWUKKwkJICogaW5kaWNhdGVzIHRoZSByZXEgdnEgbm93IGhhcyBtZXNzYWdlcworCQkgKiBhdmFpbGFibGUuLi4KKwkJICoKKwkJICogV2FrZSB1cCBhbnkgd2FpdGVycyB3YWl0aW5nIG9uIHJlcSBWUQorCQkgKiBtZXNzYWdlIGF2YWlsYWJpbGl0eS4KKwkJICovCisJCXdha2VfdXAoJmMyZGV2LT5yZXFfdnFfd28pOworCQlicmVhazsKKwljYXNlICgxKToKKwkJaGFuZGxlX3ZxKGMyZGV2LCBtcV9pbmRleCk7CisJCWJyZWFrOworCWNhc2UgKDIpOgorCQkvKiBXZSBoYXZlIHRvIHB1cmdlIHRoZSBWUSBpbiBjYXNlIHRoZXJlIGFyZSBwZW5kaW5nCisJCSAqIGFjY2VwdCByZXBseSByZXF1ZXN0cyB0aGF0IHdvdWxkIHJlc3VsdCBpbiB0aGUKKwkJICogZ2VuZXJhdGlvbiBvZiBhbiBFU1RBQkxJU0hFRCBldmVudC4gSWYgd2UgZG9uJ3QKKwkJICogZ2VuZXJhdGUgdGhlc2UgZmlyc3QsIGEgQ0xPU0UgZXZlbnQgY291bGQgZW5kIHVwCisJCSAqIGJlaW5nIGRlbGl2ZXJlZCBiZWZvcmUgdGhlIEVTVEFCTElTSEVEIGV2ZW50LgorCQkgKi8KKwkJaGFuZGxlX3ZxKGMyZGV2LCAxKTsKKworCQljMl9hZV9ldmVudChjMmRldiwgbXFfaW5kZXgpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBUaGVyZSBpcyBubyBldmVudCBzeW5jaHJvbml6YXRpb24gYmV0d2VlbiBDUSBldmVudHMKKwkJICogYW5kIEFFIG9yIENNIGV2ZW50cy4gSW4gZmFjdCwgQ1FFIGNvdWxkIGJlCisJCSAqIGRlbGl2ZXJlZCBmb3IgYWxsIG9mIHRoZSBJL08gdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUKKwkJICogRkxVU0ggZm9yIGEgcGVlciBkaXNjb25lbmN0IHByaW9yIHRvIHRoZSBFU1RBQkxJU0hFRAorCQkgKiBldmVudCBiZWluZyBkZWxpdmVyZWQgdG8gdGhlIGFwcC4gVGhlIHJlYXNvbiBmb3IgdGhpcworCQkgKiBpcyB0aGF0IENNIGV2ZW50cyBhcmUgZGVsaXZlcmVkIG9uIGEgdGhyZWFkLCB3aGlsZSBBRQorCQkgKiBhbmQgQ00gZXZlbnRzIGFyZSBkZWxpdmVyZWQgb24gaW50ZXJydXB0IGNvbnRleHQuCisJCSAqLworCQljMl9jcV9ldmVudChjMmRldiwgbXFfaW5kZXgpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBIYW5kbGVzIHZlcmJzIFdSIHJlcGxpZXMuCisgKi8KK3N0YXRpYyB2b2lkIGhhbmRsZV92cShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIG1xX2luZGV4KQoreworCXZvaWQgKmFkYXB0ZXJfbXNnLCAqcmVwbHlfbXNnOworCXN0cnVjdCBjMndyX2hkciAqaG9zdF9tc2c7CisJc3RydWN0IGMyd3JfaGRyIHRtcDsKKwlzdHJ1Y3QgYzJfbXEgKnJlcGx5X3ZxOworCXN0cnVjdCBjMl92cV9yZXEgKnJlcTsKKwlzdHJ1Y3QgaXdfY21fZXZlbnQgY21fZXZlbnQ7CisJaW50IGVycjsKKworCXJlcGx5X3ZxID0gKHN0cnVjdCBjMl9tcSAqKSBjMmRldi0+cXB0cl9hcnJheVttcV9pbmRleF07CisKKwkvKgorCSAqIGdldCBuZXh0IG1zZyBmcm9tIG1xX2luZGV4IGludG8gYWRhcHRlcl9tc2cuCisJICogZG9uJ3QgZnJlZSBpdCB5ZXQuCisJICovCisJYWRhcHRlcl9tc2cgPSBjMl9tcV9jb25zdW1lKHJlcGx5X3ZxKTsKKwlpZiAoYWRhcHRlcl9tc2cgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCisJaG9zdF9tc2cgPSB2cV9yZXBidWZfYWxsb2MoYzJkZXYpOworCisJLyoKKwkgKiBJZiB3ZSBjYW4ndCBnZXQgYSBob3N0IGJ1ZmZlciwgdGhlbiB3ZSdsbCBzdGlsbAorCSAqIHdha2V1cCB0aGUgd2FpdGVyLCB3ZSBqdXN0IHdvbid0IGdpdmUgaGltIHRoZSBtc2cuCisJICogSXQgaXMgYXNzdW1lZCB0aGUgd2FpdGVyIHdpbGwgZGVhbCB3aXRoIHRoaXMuLi4KKwkgKi8KKwlpZiAoIWhvc3RfbXNnKSB7CisJCXByX2RlYnVnKCJoYW5kbGVfdnE6IG5vIHJlcGJ1ZnMhXG4iKTsKKworCQkvKgorCQkgKiBqdXN0IGNvcHkgdGhlIFdSIGhlYWRlciBpbnRvIGEgbG9jYWwgdmFyaWFibGUuCisJCSAqIHRoaXMgYWxsb3dzIHVzIHRvIHN0aWxsIGRlbXV4IG9uIHRoZSBjb250ZXh0CisJCSAqLworCQlob3N0X21zZyA9ICZ0bXA7CisJCW1lbWNweShob3N0X21zZywgYWRhcHRlcl9tc2csIHNpemVvZih0bXApKTsKKwkJcmVwbHlfbXNnID0gTlVMTDsKKwl9IGVsc2UgeworCQltZW1jcHkoaG9zdF9tc2csIGFkYXB0ZXJfbXNnLCByZXBseV92cS0+bXNnX3NpemUpOworCQlyZXBseV9tc2cgPSBob3N0X21zZzsKKwl9CisKKwkvKgorCSAqIGNvbnN1bWUgdGhlIG1zZyBmcm9tIHRoZSBNUQorCSAqLworCWMyX21xX2ZyZWUocmVwbHlfdnEpOworCisJLyoKKwkgKiB3YWtldXAgdGhlIHdhaXRlci4KKwkgKi8KKwlyZXEgPSAoc3RydWN0IGMyX3ZxX3JlcSAqKSAodW5zaWduZWQgbG9uZykgaG9zdF9tc2ctPmNvbnRleHQ7CisJaWYgKHJlcSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYXMgdGhlIGFkYXB0ZXIgc2hvdWxkCisJCSAqIG5ldmVyIHNlbmQgdXMgYSByZXBseSB0aGF0IHdlJ3JlIG5vdCBleHBlY3RpbmcuCisJCSAqLworCQl2cV9yZXBidWZfZnJlZShjMmRldiwgaG9zdF9tc2cpOworCQlwcl9kZWJ1ZygiaGFuZGxlX3ZxOiBVTkVYUEVDVEVETFkgZ290IE5VTEwgcmVxXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWVyciA9IGMyX2Vycm5vKHJlcGx5X21zZyk7CisJaWYgKCFlcnIpIHN3aXRjaCAocmVxLT5ldmVudCkgeworCWNhc2UgSVdfQ01fRVZFTlRfRVNUQUJMSVNIRUQ6CisJCWMyX3NldF9xcF9zdGF0ZShyZXEtPnFwLAorCQkJCUMyX1FQX1NUQVRFX1JUUyk7CisJY2FzZSBJV19DTV9FVkVOVF9DTE9TRToKKworCQkvKgorCQkgKiBNb3ZlIHRoZSBRUCB0byBSVFMgaWYgdGhpcyBpcworCQkgKiB0aGUgZXN0YWJsaXNoZWQgZXZlbnQKKwkJICovCisJCWNtX2V2ZW50LmV2ZW50ID0gcmVxLT5ldmVudDsKKwkJY21fZXZlbnQuc3RhdHVzID0gMDsKKwkJY21fZXZlbnQubG9jYWxfYWRkciA9IHJlcS0+Y21faWQtPmxvY2FsX2FkZHI7CisJCWNtX2V2ZW50LnJlbW90ZV9hZGRyID0gcmVxLT5jbV9pZC0+cmVtb3RlX2FkZHI7CisJCWNtX2V2ZW50LnByaXZhdGVfZGF0YSA9IE5VTEw7CisJCWNtX2V2ZW50LnByaXZhdGVfZGF0YV9sZW4gPSAwOworCQlyZXEtPmNtX2lkLT5ldmVudF9oYW5kbGVyKHJlcS0+Y21faWQsICZjbV9ldmVudCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXJlcS0+cmVwbHlfbXNnID0gKHU2NCkgKHVuc2lnbmVkIGxvbmcpIChyZXBseV9tc2cpOworCWF0b21pY19zZXQoJnJlcS0+cmVwbHlfcmVhZHksIDEpOworCXdha2VfdXAoJnJlcS0+d2FpdF9vYmplY3QpOworCisJLyoKKwkgKiBJZiB0aGUgcmVxdWVzdCB3YXMgY2FuY2VsbGVkLCB0aGVuIHRoaXMgcHV0IHdpbGwKKwkgKiBmcmVlIHRoZSB2cV9yZXEgbWVtb3J5Li4uYW5kIHJlcGx5X21zZyEhIQorCSAqLworCXZxX3JlcV9wdXQoYzJkZXYsIHJlcSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfbW0uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNGY0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfbW0uYwpAQCAtMCwwICsxLDM3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgImMyX3ZxLmgiCisKKyNkZWZpbmUgUEJMX1ZJUlQgMQorI2RlZmluZSBQQkxfUEhZUyAyCisKKy8qCisgKiBTZW5kIGFsbCB0aGUgUEJMIG1lc3NhZ2VzIHRvIGNvbnZleSB0aGUgcmVtYWluZGVyIG9mIHRoZSBQQkwKKyAqIFdhaXQgZm9yIHRoZSBhZGFwdGVyJ3MgcmVwbHkgb24gdGhlIGxhc3Qgb25lLgorICogVGhpcyBpcyBpbmRpY2F0ZWQgYnkgc2V0dGluZyB0aGUgTUVNX1BCTF9DT01QTEVURSBpbiB0aGUgZmxhZ3MuCisgKgorICogTk9URTogIHZxX3JlcSBpcyBfbm90XyBmcmVlZCBieSB0aGlzIGZ1bmN0aW9uLiAgVGhlIFZRIEhvc3QKKyAqCSAgUmVwbHkgYnVmZmVyIF9pc18gZnJlZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqLworc3RhdGljIGludAorc2VuZF9wYmxfbWVzc2FnZXMoc3RydWN0IGMyX2RldiAqYzJkZXYsIHUzMiBzdGFnX2luZGV4LAorCQkgIHVuc2lnbmVkIGxvbmcgdmEsIHUzMiBwYmxfZGVwdGgsCisJCSAgc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxLCBpbnQgcGJsX3R5cGUpCit7CisJdTMyIHBiZV9jb3VudDsJCS8qIGFtdCB0aGF0IGZpdHMgaW4gYSBQQkwgbXNnICovCisJdTMyIGNvdW50OwkJLyogYW10IGluIHRoaXMgUEJMIE1TRy4gKi8KKwlzdHJ1Y3QgYzJ3cl9uc21yX3BibF9yZXEgKndyOwkvKiBQQkwgV1IgcHRyICovCisJc3RydWN0IGMyd3JfbnNtcl9wYmxfcmVwICpyZXBseTsJLyogcmVwbHkgcHRyICovCisgCWludCBlcnIsIHBibF92aXJ0LCBwYmxfaW5kZXgsIGk7CisKKwlzd2l0Y2ggKHBibF90eXBlKSB7CisJY2FzZSBQQkxfVklSVDoKKwkJcGJsX3ZpcnQgPSAxOworCQlicmVhazsKKwljYXNlIFBCTF9QSFlTOgorCQlwYmxfdmlydCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlwYmVfY291bnQgPSAoYzJkZXYtPnJlcV92cS5tc2dfc2l6ZSAtCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBjMndyX25zbXJfcGJsX3JlcSkpIC8gc2l6ZW9mKHU2NCk7CisJd3IgPSBrbWFsbG9jKGMyZGV2LT5yZXFfdnEubXNnX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghd3IpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWMyX3dyX3NldF9pZCh3ciwgQ0NXUl9OU01SX1BCTCk7CisKKwkvKgorCSAqIE9ubHkgdGhlIGxhc3QgUEJMIG1lc3NhZ2Ugd2lsbCBnZW5lcmF0ZSBhIHJlcGx5IGZyb20gdGhlIHZlcmJzLAorCSAqIHNvIHdlIHNldCB0aGUgY29udGV4dCB0byAwIGluZGljYXRpbmcgdGhlcmUgaXMgbm8ga2VybmVsIHZlcmJzCisJICogaGFuZGxlciBibG9ja2VkIGF3YWl0aW5nIHRoaXMgcmVwbHkuCisJICovCisJd3ItPmhkci5jb250ZXh0ID0gMDsKKwl3ci0+cm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3ItPnN0YWdfaW5kZXggPSBzdGFnX2luZGV4OwkvKiBhbHJlYWR5IHN3YXBwZWQgKi8KKwl3ci0+ZmxhZ3MgPSAwOworCXBibF9pbmRleCA9IDA7CisJd2hpbGUgKHBibF9kZXB0aCkgeworCQljb3VudCA9IG1pbihwYmVfY291bnQsIHBibF9kZXB0aCk7CisJCXdyLT5hZGRyc19sZW5ndGggPSBjcHVfdG9fYmUzMihjb3VudCk7CisKKwkJLyoKKwkJICogIElmIHRoaXMgaXMgdGhlIGxhc3QgbWVzc2FnZSwgdGhlbiByZWZlcmVuY2UgdGhlCisJCSAqICB2cSByZXF1ZXN0IHN0cnVjdCBjdXogd2UncmUgZ29ubmEgd2FpdCBmb3IgYSByZXBseS4KKwkJICogIGFsc28gbWFrZSB0aGlzIFBCTCBtc2cgYXMgdGhlIGxhc3Qgb25lLgorCQkgKi8KKwkJaWYgKGNvdW50ID09IHBibF9kZXB0aCkgeworCQkJLyoKKwkJCSAqIHJlZmVyZW5jZSB0aGUgcmVxdWVzdCBzdHJ1Y3QuICBkZXJlZmVyZW5jZWQgaW4gdGhlCisJCQkgKiBpbnQgaGFuZGxlci4KKwkJCSAqLworCQkJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKwkJCXdyLT5mbGFncyA9IGNwdV90b19iZTMyKE1FTV9QQkxfQ09NUExFVEUpOworCisJCQkvKgorCQkJICogVGhpcyBpcyB0aGUgbGFzdCBQQkwgbWVzc2FnZS4KKwkJCSAqIFNldCB0aGUgY29udGV4dCB0byBvdXIgVlEgUmVxdWVzdCBPYmplY3Qgc28gd2UgY2FuCisJCQkgKiB3YWl0IGZvciB0aGUgcmVwbHkuCisJCQkgKi8KKwkJCXdyLT5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJCX0KKworCQkvKgorCQkgKiBJZiBwYmxfdmlydCBpcyBzZXQgdGhlbiB2YSBpcyBhIHZpcnR1YWwgYWRkcmVzcworCQkgKiB0aGF0IGRlc2NyaWJlcyBhIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeQorCQkgKiBhbGxvY2F0aW9uLiBUaGUgd3IgbmVlZHMgdGhlIHN0YXJ0IG9mIGVhY2ggdmlydHVhbCBwYWdlCisJCSAqIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgY29ycmVzcG9uZGluZyBwaHlzaWNhbCBhZGRyZXNzCisJCSAqIG9mIHRoZSBwYWdlLiBJZiBwYmxfdmlydCBpcyBub3Qgc2V0IHRoZW4gdmEgaXMgYW4gYXJyYXkKKwkJICogb2YgcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB0aGVyZSBpcyBubyBjb252ZXJzaW9uIHRvIGRvLgorCQkgKiBKdXN0IGZpbGwgaW4gdGhlIHdyIHdpdGggd2hhdCBpcyBpbiB0aGUgYXJyYXkuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQkJaWYgKHBibF92aXJ0KSB7CisJCQkJdmEgKz0gUEFHRV9TSVpFOworCQkJfSBlbHNlIHsKKyAJCQkJd3ItPnBhZGRyc1tpXSA9CisJCQkJICAgIGNwdV90b19iZTY0KCgodTY0ICopdmEpW3BibF9pbmRleCArIGldKTsKKwkJCX0KKwkJfQorCisJCS8qCisJCSAqIFNlbmQgV1IgdG8gYWRhcHRlcgorCQkgKi8KKwkJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgd3IpOworCQlpZiAoZXJyKSB7CisJCQlpZiAoY291bnQgPD0gcGJlX2NvdW50KSB7CisJCQkJdnFfcmVxX3B1dChjMmRldiwgdnFfcmVxKTsKKwkJCX0KKwkJCWdvdG8gYmFpbDA7CisJCX0KKwkJcGJsX2RlcHRoIC09IGNvdW50OworCQlwYmxfaW5kZXggKz0gY291bnQ7CisJfQorCisJLyoKKwkgKiAgTm93IHdhaXQgZm9yIHRoZSByZXBseS4uLgorCSAqLworCWVyciA9IHZxX3dhaXRfZm9yX3JlcGx5KGMyZGV2LCB2cV9yZXEpOworCWlmIChlcnIpIHsKKwkJZ290byBiYWlsMDsKKwl9CisKKwkvKgorCSAqIFByb2Nlc3MgcmVwbHkKKwkgKi8KKwlyZXBseSA9IChzdHJ1Y3QgYzJ3cl9uc21yX3BibF9yZXAgKikgKHVuc2lnbmVkIGxvbmcpIHZxX3JlcS0+cmVwbHlfbXNnOworCWlmICghcmVwbHkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwllcnIgPSBjMl9lcnJubyhyZXBseSk7CisKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworICAgICAgYmFpbDA6CisJa2ZyZWUod3IpOworCXJldHVybiBlcnI7Cit9CisKKyNkZWZpbmUgQzJfUEJMX01BWF9ERVBUSCAxMzEwNzIKK2ludAorYzJfbnNtcl9yZWdpc3Rlcl9waHlzX2tlcm4oc3RydWN0IGMyX2RldiAqYzJkZXYsIHU2NCAqYWRkcl9saXN0LAorIAkJCSAgIGludCBwYWdlX3NpemUsIGludCBwYmxfZGVwdGgsIHUzMiBsZW5ndGgsCisgCQkJICAgdTMyIG9mZnNldCwgdTY0ICp2YSwgZW51bSBjMl9hY2YgYWNmLAorCQkJICAgc3RydWN0IGMyX21yICptcikKK3sKKwlzdHJ1Y3QgYzJfdnFfcmVxICp2cV9yZXE7CisJc3RydWN0IGMyd3JfbnNtcl9yZWdpc3Rlcl9yZXEgKndyOworCXN0cnVjdCBjMndyX25zbXJfcmVnaXN0ZXJfcmVwICpyZXBseTsKKwl1MTYgZmxhZ3M7CisJaW50IGksIHBiZV9jb3VudCwgY291bnQ7CisJaW50IGVycjsKKworCWlmICghdmEgfHwgIWxlbmd0aCB8fCAhYWRkcl9saXN0IHx8ICFwYmxfZGVwdGgpCisJCXJldHVybiAtRUlOVFI7CisKKwkvKgorCSAqIFZlcmlmeSBQQkwgZGVwdGggaXMgd2l0aGluIHJuaWMgbWF4CisJICovCisJaWYgKHBibF9kZXB0aCA+IEMyX1BCTF9NQVhfREVQVEgpIHsKKwkJcmV0dXJuIC1FSU5UUjsKKwl9CisKKwkvKgorCSAqIGFsbG9jYXRlIHZlcmJzIHJlcXVlc3Qgb2JqZWN0CisJICovCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAoIXZxX3JlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3ciA9IGttYWxsb2MoYzJkZXYtPnJlcV92cS5tc2dfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3cikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwwOworCX0KKworCS8qCisJICogYnVpbGQgdGhlIFdSCisJICovCisJYzJfd3Jfc2V0X2lkKHdyLCBDQ1dSX05TTVJfUkVHSVNURVIpOworCXdyLT5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3ItPnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCisJZmxhZ3MgPSAoYWNmIHwgTUVNX1ZBX0JBU0VEIHwgTUVNX1JFTU9URSk7CisKKwkvKgorCSAqIGNvbXB1dGUgaG93IG1hbnkgcGJlcyBjYW4gZml0IGluIHRoZSBtZXNzYWdlCisJICovCisJcGJlX2NvdW50ID0gKGMyZGV2LT5yZXFfdnEubXNnX3NpemUgLQorCQkgICAgIHNpemVvZihzdHJ1Y3QgYzJ3cl9uc21yX3JlZ2lzdGVyX3JlcSkpIC8gc2l6ZW9mKHU2NCk7CisKKwlpZiAocGJsX2RlcHRoIDw9IHBiZV9jb3VudCkgeworCQlmbGFncyB8PSBNRU1fUEJMX0NPTVBMRVRFOworCX0KKwl3ci0+ZmxhZ3MgPSBjcHVfdG9fYmUxNihmbGFncyk7CisJd3ItPnN0YWdfa2V5ID0gMDsJLy9zdGFnX2tleTsKKwl3ci0+dmEgPSBjcHVfdG9fYmU2NCgqdmEpOworCXdyLT5wZF9pZCA9IG1yLT5wZC0+cGRfaWQ7CisJd3ItPnBiZV9zaXplID0gY3B1X3RvX2JlMzIocGFnZV9zaXplKTsKKwl3ci0+bGVuZ3RoID0gY3B1X3RvX2JlMzIobGVuZ3RoKTsKKwl3ci0+cGJsX2RlcHRoID0gY3B1X3RvX2JlMzIocGJsX2RlcHRoKTsKKwl3ci0+ZmJvID0gY3B1X3RvX2JlMzIob2Zmc2V0KTsKKwljb3VudCA9IG1pbihwYmxfZGVwdGgsIHBiZV9jb3VudCk7CisJd3ItPmFkZHJzX2xlbmd0aCA9IGNwdV90b19iZTMyKGNvdW50KTsKKworCS8qCisJICogZmlsbCBvdXQgdGhlIFBCTCBmb3IgdGhpcyBtZXNzYWdlCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJd3ItPnBhZGRyc1tpXSA9IGNwdV90b19iZTY0KGFkZHJfbGlzdFtpXSk7CisJfQorCisJLyoKKwkgKiByZWdlcmVuY2UgdGhlIHJlcXVlc3Qgc3RydWN0CisJICovCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCS8qCisJICogc2VuZCB0aGUgV1IgdG8gdGhlIGFkYXB0ZXIKKwkgKi8KKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAodW5pb24gYzJ3ciAqKSB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwxOworCX0KKworCS8qCisJICogd2FpdCBmb3IgcmVwbHkgZnJvbSBhZGFwdGVyCisJICovCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikgeworCQlnb3RvIGJhaWwxOworCX0KKworCS8qCisJICogcHJvY2VzcyByZXBseQorCSAqLworCXJlcGx5ID0KKwkgICAgKHN0cnVjdCBjMndyX25zbXJfcmVnaXN0ZXJfcmVwICopICh1bnNpZ25lZCBsb25nKSAodnFfcmVxLT5yZXBseV9tc2cpOworCWlmICghcmVwbHkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMTsKKwl9CisJaWYgKChlcnIgPSBjMl9lcnJubyhyZXBseSkpKSB7CisJCWdvdG8gYmFpbDI7CisJfQorCS8vKnBfcGJfZW50cmllcyA9IGJlMzJfdG9fY3B1KHJlcGx5LT5wYmxfZGVwdGgpOworCW1yLT5pYm1yLmxrZXkgPSBtci0+aWJtci5ya2V5ID0gYmUzMl90b19jcHUocmVwbHktPnN0YWdfaW5kZXgpOworCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisKKwkvKgorCSAqIGlmIHRoZXJlIGFyZSBzdGlsbCBtb3JlIFBCRXMgd2UgbmVlZCB0byBzZW5kIHRoZW0gdG8KKwkgKiB0aGUgYWRhcHRlciBhbmQgd2FpdCBmb3IgYSByZXBseSBvbiB0aGUgZmluYWwgb25lLgorCSAqIHJldXNlIHZxX3JlcSBmb3IgdGhpcyBwdXJwb3NlLgorCSAqLworCXBibF9kZXB0aCAtPSBjb3VudDsKKwlpZiAocGJsX2RlcHRoKSB7CisKKwkJdnFfcmVxLT5yZXBseV9tc2cgPSAodW5zaWduZWQgbG9uZykgTlVMTDsKKwkJYXRvbWljX3NldCgmdnFfcmVxLT5yZXBseV9yZWFkeSwgMCk7CisJCWVyciA9IHNlbmRfcGJsX21lc3NhZ2VzKGMyZGV2LAorCQkJCQljcHVfdG9fYmUzMihtci0+aWJtci5sa2V5KSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcpICZhZGRyX2xpc3RbaV0sCisJCQkJCXBibF9kZXB0aCwgdnFfcmVxLCBQQkxfUEhZUyk7CisJCWlmIChlcnIpIHsKKwkJCWdvdG8gYmFpbDE7CisJCX0KKwl9CisKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlrZnJlZSh3cik7CisKKwlyZXR1cm4gZXJyOworCisgICAgICBiYWlsMjoKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworICAgICAgYmFpbDE6CisJa2ZyZWUod3IpOworICAgICAgYmFpbDA6CisJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGMyX3N0YWdfZGVhbGxvYyhzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIHN0YWdfaW5kZXgpCit7CisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOwkvKiB2ZXJicyByZXF1ZXN0IG9iamVjdCAqLworCXN0cnVjdCBjMndyX3N0YWdfZGVhbGxvY19yZXEgd3I7CS8qIHdvcmsgcmVxdWVzdCAqLworCXN0cnVjdCBjMndyX3N0YWdfZGVhbGxvY19yZXAgKnJlcGx5OwkvKiBXUiByZXBseSAgKi8KKwlpbnQgZXJyOworCisKKwkvKgorCSAqIGFsbG9jYXRlIHZlcmJzIHJlcXVlc3Qgb2JqZWN0CisJICovCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAoIXZxX3JlcSkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSAqIEJ1aWxkIHRoZSBXUgorCSAqLworCWMyX3dyX3NldF9pZCgmd3IsIENDV1JfU1RBR19ERUFMTE9DKTsKKwl3ci5oZHIuY29udGV4dCA9ICh1NjQpICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3Iucm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3Iuc3RhZ19pbmRleCA9IGNwdV90b19iZTMyKHN0YWdfaW5kZXgpOworCisJLyoKKwkgKiByZWZlcmVuY2UgdGhlIHJlcXVlc3Qgc3RydWN0LiAgZGVyZWZlcmVuY2VkIGluIHRoZSBpbnQgaGFuZGxlci4KKwkgKi8KKwl2cV9yZXFfZ2V0KGMyZGV2LCB2cV9yZXEpOworCisJLyoKKwkgKiBTZW5kIFdSIHRvIGFkYXB0ZXIKKwkgKi8KKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAodW5pb24gYzJ3ciAqKSAmIHdyKTsKKwlpZiAoZXJyKSB7CisJCXZxX3JlcV9wdXQoYzJkZXYsIHZxX3JlcSk7CisJCWdvdG8gYmFpbDA7CisJfQorCisJLyoKKwkgKiBXYWl0IGZvciByZXBseSBmcm9tIGFkYXB0ZXIKKwkgKi8KKwllcnIgPSB2cV93YWl0X2Zvcl9yZXBseShjMmRldiwgdnFfcmVxKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gYmFpbDA7CisJfQorCisJLyoKKwkgKiBQcm9jZXNzIHJlcGx5CisJICovCisJcmVwbHkgPSAoc3RydWN0IGMyd3Jfc3RhZ19kZWFsbG9jX3JlcCAqKSAodW5zaWduZWQgbG9uZykgdnFfcmVxLT5yZXBseV9tc2c7CisJaWYgKCFyZXBseSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwwOworCX0KKworCWVyciA9IGMyX2Vycm5vKHJlcGx5KTsKKworCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisgICAgICBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21xLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfbXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODhhNzU1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX21xLmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQW1tYXNzbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSAiYzIuaCIKKyNpbmNsdWRlICJjMl9tcS5oIgorCit2b2lkICpjMl9tcV9hbGxvYyhzdHJ1Y3QgYzJfbXEgKnEpCit7CisJQlVHX09OKHEtPm1hZ2ljICE9IEMyX01RX01BR0lDKTsKKwlCVUdfT04ocS0+dHlwZSAhPSBDMl9NUV9BREFQVEVSX1RBUkdFVCk7CisKKwlpZiAoYzJfbXFfZnVsbChxKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworI2lmZGVmIERFQlVHCisJCXN0cnVjdCBjMndyX2hkciAqbSA9CisJCSAgICAoc3RydWN0IGMyd3JfaGRyICopIChxLT5tc2dfcG9vbC5ob3N0ICsgcS0+cHJpdiAqIHEtPm1zZ19zaXplKTsKKyNpZmRlZiBDQ01TR01BR0lDCisJCUJVR19PTihtLT5tYWdpYyAhPSBiZTMyX3RvX2NwdSh+Q0NXUl9NQUdJQykpOworCQltLT5tYWdpYyA9IGNwdV90b19iZTMyKENDV1JfTUFHSUMpOworI2VuZGlmCisJCXJldHVybiBtOworI2Vsc2UKKwkJcmV0dXJuIHEtPm1zZ19wb29sLmhvc3QgKyBxLT5wcml2ICogcS0+bXNnX3NpemU7CisjZW5kaWYKKwl9Cit9CisKK3ZvaWQgYzJfbXFfcHJvZHVjZShzdHJ1Y3QgYzJfbXEgKnEpCit7CisJQlVHX09OKHEtPm1hZ2ljICE9IEMyX01RX01BR0lDKTsKKwlCVUdfT04ocS0+dHlwZSAhPSBDMl9NUV9BREFQVEVSX1RBUkdFVCk7CisKKwlpZiAoIWMyX21xX2Z1bGwocSkpIHsKKwkJcS0+cHJpdiA9IChxLT5wcml2ICsgMSkgJSBxLT5xX3NpemU7CisJCXEtPmhpbnRfY291bnQrKzsKKwkJLyogVXBkYXRlIHBlZXIncyBvZmZzZXQuICovCisJCV9fcmF3X3dyaXRldyhjcHVfdG9fYmUxNihxLT5wcml2KSwgJnEtPnBlZXItPnNoYXJlZCk7CisJfQorfQorCit2b2lkICpjMl9tcV9jb25zdW1lKHN0cnVjdCBjMl9tcSAqcSkKK3sKKwlCVUdfT04ocS0+bWFnaWMgIT0gQzJfTVFfTUFHSUMpOworCUJVR19PTihxLT50eXBlICE9IEMyX01RX0hPU1RfVEFSR0VUKTsKKworCWlmIChjMl9tcV9lbXB0eShxKSkgeworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworI2lmZGVmIERFQlVHCisJCXN0cnVjdCBjMndyX2hkciAqbSA9IChzdHJ1Y3QgYzJ3cl9oZHIgKikKKwkJICAgIChxLT5tc2dfcG9vbC5ob3N0ICsgcS0+cHJpdiAqIHEtPm1zZ19zaXplKTsKKyNpZmRlZiBDQ01TR01BR0lDCisJCUJVR19PTihtLT5tYWdpYyAhPSBiZTMyX3RvX2NwdShDQ1dSX01BR0lDKSk7CisjZW5kaWYKKwkJcmV0dXJuIG07CisjZWxzZQorCQlyZXR1cm4gcS0+bXNnX3Bvb2wuaG9zdCArIHEtPnByaXYgKiBxLT5tc2dfc2l6ZTsKKyNlbmRpZgorCX0KK30KKwordm9pZCBjMl9tcV9mcmVlKHN0cnVjdCBjMl9tcSAqcSkKK3sKKwlCVUdfT04ocS0+bWFnaWMgIT0gQzJfTVFfTUFHSUMpOworCUJVR19PTihxLT50eXBlICE9IEMyX01RX0hPU1RfVEFSR0VUKTsKKworCWlmICghYzJfbXFfZW1wdHkocSkpIHsKKworI2lmZGVmIENDTVNHTUFHSUMKKwkJeworCQkJc3RydWN0IGMyd3JfaGRyIF9faW9tZW0gKm0gPSAoc3RydWN0IGMyd3JfaGRyIF9faW9tZW0gKikKKwkJCSAgICAocS0+bXNnX3Bvb2wuYWRhcHRlciArIHEtPnByaXYgKiBxLT5tc2dfc2l6ZSk7CisJCQlfX3Jhd193cml0ZWwoY3B1X3RvX2JlMzIofkNDV1JfTUFHSUMpLCAmbS0+bWFnaWMpOworCQl9CisjZW5kaWYKKwkJcS0+cHJpdiA9IChxLT5wcml2ICsgMSkgJSBxLT5xX3NpemU7CisJCS8qIFVwZGF0ZSBwZWVyJ3Mgb2Zmc2V0LiAqLworCQlfX3Jhd193cml0ZXcoY3B1X3RvX2JlMTYocS0+cHJpdiksICZxLT5wZWVyLT5zaGFyZWQpOworCX0KK30KKworCit2b2lkIGMyX21xX2xjb25zdW1lKHN0cnVjdCBjMl9tcSAqcSwgdTMyIHdxZV9jb3VudCkKK3sKKwlCVUdfT04ocS0+bWFnaWMgIT0gQzJfTVFfTUFHSUMpOworCUJVR19PTihxLT50eXBlICE9IEMyX01RX0FEQVBURVJfVEFSR0VUKTsKKworCXdoaWxlICh3cWVfY291bnQtLSkgeworCQlCVUdfT04oYzJfbXFfZW1wdHkocSkpOworCQkqcS0+c2hhcmVkID0gY3B1X3RvX2JlMTYoKGJlMTZfdG9fY3B1KCpxLT5zaGFyZWQpKzEpICUgcS0+cV9zaXplKTsKKwl9Cit9CisKKyNpZiAwCit1MzIgYzJfbXFfY291bnQoc3RydWN0IGMyX21xICpxKQoreworCXMzMiBjb3VudDsKKworCWlmIChxLT50eXBlID09IEMyX01RX0hPU1RfVEFSR0VUKQorCQljb3VudCA9IGJlMTZfdG9fY3B1KCpxLT5zaGFyZWQpIC0gcS0+cHJpdjsKKwllbHNlCisJCWNvdW50ID0gcS0+cHJpdiAtIGJlMTZfdG9fY3B1KCpxLT5zaGFyZWQpOworCisJaWYgKGNvdW50IDwgMCkKKwkJY291bnQgKz0gcS0+cV9zaXplOworCisJcmV0dXJuICh1MzIpIGNvdW50OworfQorI2VuZGlmICAvKiAgMCAgKi8KKwordm9pZCBjMl9tcV9yZXFfaW5pdChzdHJ1Y3QgYzJfbXEgKnEsIHUzMiBpbmRleCwgdTMyIHFfc2l6ZSwgdTMyIG1zZ19zaXplLAorCQkgICAgdTggX19pb21lbSAqcG9vbF9zdGFydCwgdTE2IF9faW9tZW0gKnBlZXIsIHUzMiB0eXBlKQoreworCUJVR19PTighcS0+c2hhcmVkKTsKKworCS8qIFRoaXMgY29kZSBhc3N1bWVzIHRoZSBieXRlIHN3YXBwaW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSEgKi8KKwlxLT5pbmRleCA9IGluZGV4OworCXEtPnFfc2l6ZSA9IHFfc2l6ZTsKKwlxLT5tc2dfc2l6ZSA9IG1zZ19zaXplOworCXEtPm1zZ19wb29sLmFkYXB0ZXIgPSBwb29sX3N0YXJ0OworCXEtPnBlZXIgPSAoc3RydWN0IGMyX21xX3NoYXJlZCBfX2lvbWVtICopIHBlZXI7CisJcS0+bWFnaWMgPSBDMl9NUV9NQUdJQzsKKwlxLT50eXBlID0gdHlwZTsKKwlxLT5wcml2ID0gMDsKKwlxLT5oaW50X2NvdW50ID0gMDsKKwlyZXR1cm47Cit9Cit2b2lkIGMyX21xX3JlcF9pbml0KHN0cnVjdCBjMl9tcSAqcSwgdTMyIGluZGV4LCB1MzIgcV9zaXplLCB1MzIgbXNnX3NpemUsCisJCSAgICB1OCAqcG9vbF9zdGFydCwgdTE2IF9faW9tZW0gKnBlZXIsIHUzMiB0eXBlKQoreworCUJVR19PTighcS0+c2hhcmVkKTsKKworCS8qIFRoaXMgY29kZSBhc3N1bWVzIHRoZSBieXRlIHN3YXBwaW5nIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSEgKi8KKwlxLT5pbmRleCA9IGluZGV4OworCXEtPnFfc2l6ZSA9IHFfc2l6ZTsKKwlxLT5tc2dfc2l6ZSA9IG1zZ19zaXplOworCXEtPm1zZ19wb29sLmhvc3QgPSBwb29sX3N0YXJ0OworCXEtPnBlZXIgPSAoc3RydWN0IGMyX21xX3NoYXJlZCBfX2lvbWVtICopIHBlZXI7CisJcS0+bWFnaWMgPSBDMl9NUV9NQUdJQzsKKwlxLT50eXBlID0gdHlwZTsKKwlxLT5wcml2ID0gMDsKKwlxLT5oaW50X2NvdW50ID0gMDsKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfbXEuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9tcS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxODViYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfbXEuaApAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2lmbmRlZiBfQzJfTVFfSF8KKyNkZWZpbmUgX0MyX01RX0hfCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlICJjMl93ci5oIgorCitlbnVtIGMyX3NoYXJlZF9yZWdzIHsKKworCUMyX1NIQVJFRF9BUk1FRCA9IDB4MTAsCisJQzJfU0hBUkVEX05PVElGWSA9IDB4MTgsCisJQzJfU0hBUkVEX1NIQVJFRCA9IDB4NDAsCit9OworCitzdHJ1Y3QgYzJfbXFfc2hhcmVkIHsKKwl1MTYgdW51c2VkMTsKKwl1OCBhcm1lZDsKKwl1OCBub3RpZmljYXRpb25fdHlwZTsKKwl1MzIgdW51c2VkMjsKKwl1MTYgc2hhcmVkOworCS8qIFBhZCB0byA2NCBieXRlcy4gKi8KKwl1OCBwYWRbNjQgLSBzaXplb2YodTE2KSAtIDIgKiBzaXplb2YodTgpIC0gc2l6ZW9mKHUzMikgLSBzaXplb2YodTE2KV07Cit9OworCitlbnVtIGMyX21xX3R5cGUgeworCUMyX01RX0hPU1RfVEFSR0VUID0gMSwKKwlDMl9NUV9BREFQVEVSX1RBUkdFVCA9IDIsCit9OworCisvKgorICogYzJfbXFfdCBpcyBmb3Iga2VybmVsLW1vZGUgTVFzIGxpa2UgdGhlIFZRcyBDYW5kIHRoZSBBRVEuCisgKiBjMl91c2VyX21xX3QgKHdoaWNoIGlzIHRoZSBzYW1lIGZvcm1hdCkgaXMgZm9yIHVzZXItbW9kZSBNUXMuLi4KKyAqLworI2RlZmluZSBDMl9NUV9NQUdJQyAweDRkNTEyMDIwCS8qICdNUSAgJyAqLworc3RydWN0IGMyX21xIHsKKwl1MzIgbWFnaWM7CisJdW5pb24geworCQl1OCAqaG9zdDsKKwkJdTggX19pb21lbSAqYWRhcHRlcjsKKwl9IG1zZ19wb29sOworCWRtYV9hZGRyX3QgaG9zdF9kbWE7CisJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKTsKKwl1MTYgaGludF9jb3VudDsKKwl1MTYgcHJpdjsKKwlzdHJ1Y3QgYzJfbXFfc2hhcmVkIF9faW9tZW0gKnBlZXI7CisJdTE2ICpzaGFyZWQ7CisJZG1hX2FkZHJfdCBzaGFyZWRfZG1hOworCXUzMiBxX3NpemU7CisJdTMyIG1zZ19zaXplOworCXUzMiBpbmRleDsKKwllbnVtIGMyX21xX3R5cGUgdHlwZTsKK307CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBjMl9tcV9lbXB0eShzdHJ1Y3QgYzJfbXEgKnEpCit7CisJcmV0dXJuIHEtPnByaXYgPT0gYmUxNl90b19jcHUoKnEtPnNoYXJlZCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBjMl9tcV9mdWxsKHN0cnVjdCBjMl9tcSAqcSkKK3sKKwlyZXR1cm4gcS0+cHJpdiA9PSAoYmUxNl90b19jcHUoKnEtPnNoYXJlZCkgKyBxLT5xX3NpemUgLSAxKSAlIHEtPnFfc2l6ZTsKK30KKworZXh0ZXJuIHZvaWQgYzJfbXFfbGNvbnN1bWUoc3RydWN0IGMyX21xICpxLCB1MzIgd3FlX2NvdW50KTsKK2V4dGVybiB2b2lkICpjMl9tcV9hbGxvYyhzdHJ1Y3QgYzJfbXEgKnEpOworZXh0ZXJuIHZvaWQgYzJfbXFfcHJvZHVjZShzdHJ1Y3QgYzJfbXEgKnEpOworZXh0ZXJuIHZvaWQgKmMyX21xX2NvbnN1bWUoc3RydWN0IGMyX21xICpxKTsKK2V4dGVybiB2b2lkIGMyX21xX2ZyZWUoc3RydWN0IGMyX21xICpxKTsKK2V4dGVybiB2b2lkIGMyX21xX3JlcV9pbml0KHN0cnVjdCBjMl9tcSAqcSwgdTMyIGluZGV4LCB1MzIgcV9zaXplLCB1MzIgbXNnX3NpemUsCisJCSAgICAgICB1OCBfX2lvbWVtICpwb29sX3N0YXJ0LCB1MTYgX19pb21lbSAqcGVlciwgdTMyIHR5cGUpOworZXh0ZXJuIHZvaWQgYzJfbXFfcmVwX2luaXQoc3RydWN0IGMyX21xICpxLCB1MzIgaW5kZXgsIHUzMiBxX3NpemUsIHUzMiBtc2dfc2l6ZSwKKwkJCSAgIHU4ICpwb29sX3N0YXJ0LCB1MTYgX19pb21lbSAqcGVlciwgdTMyIHR5cGUpOworCisjZW5kaWYJCQkJLyogX0MyX01RX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcGQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwYzcwOTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcGQuYwpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE1lbGxhbm94IFRlY2hub2xvZ2llcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgImMyX3Byb3ZpZGVyLmgiCisKK2ludCBjMl9wZF9hbGxvYyhzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgaW50IHByaXZpbGVnZWQsIHN0cnVjdCBjMl9wZCAqcGQpCit7CisJdTMyIG9iajsKKwlpbnQgcmV0ID0gMDsKKworCXNwaW5fbG9jaygmYzJkZXYtPnBkX3RhYmxlLmxvY2spOworCW9iaiA9IGZpbmRfbmV4dF96ZXJvX2JpdChjMmRldi0+cGRfdGFibGUudGFibGUsIGMyZGV2LT5wZF90YWJsZS5tYXgsCisJCQkJIGMyZGV2LT5wZF90YWJsZS5sYXN0KTsKKwlpZiAob2JqID49IGMyZGV2LT5wZF90YWJsZS5tYXgpCisJCW9iaiA9IGZpbmRfZmlyc3RfemVyb19iaXQoYzJkZXYtPnBkX3RhYmxlLnRhYmxlLAorCQkJCQkgIGMyZGV2LT5wZF90YWJsZS5tYXgpOworCWlmIChvYmogPCBjMmRldi0+cGRfdGFibGUubWF4KSB7CisJCXBkLT5wZF9pZCA9IG9iajsKKwkJX19zZXRfYml0KG9iaiwgYzJkZXYtPnBkX3RhYmxlLnRhYmxlKTsKKwkJYzJkZXYtPnBkX3RhYmxlLmxhc3QgPSBvYmorMTsKKwkJaWYgKGMyZGV2LT5wZF90YWJsZS5sYXN0ID49IGMyZGV2LT5wZF90YWJsZS5tYXgpCisJCQljMmRldi0+cGRfdGFibGUubGFzdCA9IDA7CisJfSBlbHNlCisJCXJldCA9IC1FTk9NRU07CisJc3Bpbl91bmxvY2soJmMyZGV2LT5wZF90YWJsZS5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGMyX3BkX2ZyZWUoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9wZCAqcGQpCit7CisJc3Bpbl9sb2NrKCZjMmRldi0+cGRfdGFibGUubG9jayk7CisJX19jbGVhcl9iaXQocGQtPnBkX2lkLCBjMmRldi0+cGRfdGFibGUudGFibGUpOworCXNwaW5fdW5sb2NrKCZjMmRldi0+cGRfdGFibGUubG9jayk7Cit9CisKK2ludCBfX2RldmluaXQgYzJfaW5pdF9wZF90YWJsZShzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKworCWMyZGV2LT5wZF90YWJsZS5sYXN0ID0gMDsKKwljMmRldi0+cGRfdGFibGUubWF4ID0gYzJkZXYtPnByb3BzLm1heF9wZDsKKwlzcGluX2xvY2tfaW5pdCgmYzJkZXYtPnBkX3RhYmxlLmxvY2spOworCWMyZGV2LT5wZF90YWJsZS50YWJsZSA9IGttYWxsb2MoQklUU19UT19MT05HUyhjMmRldi0+cHJvcHMubWF4X3BkKSAqCisJCQkJCXNpemVvZihsb25nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjMmRldi0+cGRfdGFibGUudGFibGUpCisJCXJldHVybiAtRU5PTUVNOworCWJpdG1hcF96ZXJvKGMyZGV2LT5wZF90YWJsZS50YWJsZSwgYzJkZXYtPnByb3BzLm1heF9wZCk7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgX19kZXZleGl0IGMyX2NsZWFudXBfcGRfdGFibGUoc3RydWN0IGMyX2RldiAqYzJkZXYpCit7CisJa2ZyZWUoYzJkZXYtPnBkX3RhYmxlLnRhYmxlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZkZGM4YwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jCkBAIC0wLDAgKzEsODY5IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IEFtbWFzc28sIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwNSBPcGVuIEdyaWQgQ29tcHV0aW5nLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBhdmFpbGFibGUgdG8geW91IHVuZGVyIGEgY2hvaWNlIG9mIG9uZSBvZiB0d28KKyAqIGxpY2Vuc2VzLiAgWW91IG1heSBjaG9vc2UgdG8gYmUgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgVmVyc2lvbiAyLCBhdmFpbGFibGUgZnJvbSB0aGUgZmlsZQorICogQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZSwgb3IgdGhlCisgKiBPcGVuSUIub3JnIEJTRCBsaWNlbnNlIGJlbG93OgorICoKKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nCisgKiAgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyLgorICoKKyAqICAgICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgICAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCisgKiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgKiBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOCisgKiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFCisgKiBTT0ZUV0FSRS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgPHJkbWEvaWJfc21pLmg+CisjaW5jbHVkZSA8cmRtYS9pYl91c2VyX3ZlcmJzLmg+CisjaW5jbHVkZSAiYzIuaCIKKyNpbmNsdWRlICJjMl9wcm92aWRlci5oIgorI2luY2x1ZGUgImMyX3VzZXIuaCIKKworc3RhdGljIGludCBjMl9xdWVyeV9kZXZpY2Uoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKnByb3BzKQoreworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gdG9fYzJkZXYoaWJkZXYpOworCisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKworCSpwcm9wcyA9IGMyZGV2LT5wcm9wczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjMl9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJIHU4IHBvcnQsIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKQoreworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisKKwlwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OworCXByb3BzLT5saWQgPSAwOworCXByb3BzLT5sbWMgPSAwOworCXByb3BzLT5zbV9saWQgPSAwOworCXByb3BzLT5zbV9zbCA9IDA7CisJcHJvcHMtPnN0YXRlID0gSUJfUE9SVF9BQ1RJVkU7CisJcHJvcHMtPnBoeXNfc3RhdGUgPSAwOworCXByb3BzLT5wb3J0X2NhcF9mbGFncyA9CisJICAgIElCX1BPUlRfQ01fU1VQIHwKKwkgICAgSUJfUE9SVF9SRUlOSVRfU1VQIHwKKwkgICAgSUJfUE9SVF9WRU5ET1JfQ0xBU1NfU1VQIHwgSUJfUE9SVF9CT09UX01HTVRfU1VQOworCXByb3BzLT5naWRfdGJsX2xlbiA9IDE7CisJcHJvcHMtPnBrZXlfdGJsX2xlbiA9IDE7CisJcHJvcHMtPnFrZXlfdmlvbF9jbnRyID0gMDsKKwlwcm9wcy0+YWN0aXZlX3dpZHRoID0gMTsKKwlwcm9wcy0+YWN0aXZlX3NwZWVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGMyX21vZGlmeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJICB1OCBwb3J0LCBpbnQgcG9ydF9tb2RpZnlfbWFzaywKKwkJCSAgc3RydWN0IGliX3BvcnRfbW9kaWZ5ICpwcm9wcykKK3sKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGMyX3F1ZXJ5X3BrZXkoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkgdTggcG9ydCwgdTE2IGluZGV4LCB1MTYgKiBwa2V5KQoreworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJKnBrZXkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGMyX3F1ZXJ5X2dpZChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCwKKwkJCWludCBpbmRleCwgdW5pb24gaWJfZ2lkICpnaWQpCit7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSB0b19jMmRldihpYmRldik7CisKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCW1lbXNldCgmKGdpZC0+cmF3WzBdKSwgMCwgc2l6ZW9mKGdpZC0+cmF3KSk7CisJbWVtY3B5KCYoZ2lkLT5yYXdbMF0pLCBjMmRldi0+cHNldWRvX25ldGRldi0+ZGV2X2FkZHIsIDYpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEFsbG9jYXRlIHRoZSB1c2VyIGNvbnRleHQgZGF0YSBzdHJ1Y3R1cmUuIFRoaXMga2VlcHMgdHJhY2sKKyAqIG9mIGFsbCBvYmplY3RzIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgdXNlci1tb2RlIGNsaWVudC4KKyAqLworc3RhdGljIHN0cnVjdCBpYl91Y29udGV4dCAqYzJfYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCQkJCSAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgYzJfdWNvbnRleHQgKmNvbnRleHQ7CisKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCWNvbnRleHQgPSBrbWFsbG9jKHNpemVvZigqY29udGV4dCksIEdGUF9LRVJORUwpOworCWlmICghY29udGV4dCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlyZXR1cm4gJmNvbnRleHQtPmlidWNvbnRleHQ7Cit9CisKK3N0YXRpYyBpbnQgYzJfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpCit7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlrZnJlZShjb250ZXh0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjMl9tbWFwX3VhcihzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfcGQgKmMyX2FsbG9jX3BkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAorCQkJCSBzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsCisJCQkJIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IGMyX3BkICpwZDsKKwlpbnQgZXJyOworCisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKworCXBkID0ga21hbGxvYyhzaXplb2YoKnBkKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwZCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwllcnIgPSBjMl9wZF9hbGxvYyh0b19jMmRldihpYmRldiksICFjb250ZXh0LCBwZCk7CisJaWYgKGVycikgeworCQlrZnJlZShwZCk7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJaWYgKGNvbnRleHQpIHsKKwkJaWYgKGliX2NvcHlfdG9fdWRhdGEodWRhdGEsICZwZC0+cGRfaWQsIHNpemVvZihfX3UzMikpKSB7CisJCQljMl9wZF9mcmVlKHRvX2MyZGV2KGliZGV2KSwgcGQpOworCQkJa2ZyZWUocGQpOworCQkJcmV0dXJuIEVSUl9QVFIoLUVGQVVMVCk7CisJCX0KKwl9CisKKwlyZXR1cm4gJnBkLT5pYnBkOworfQorCitzdGF0aWMgaW50IGMyX2RlYWxsb2NfcGQoc3RydWN0IGliX3BkICpwZCkKK3sKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCWMyX3BkX2ZyZWUodG9fYzJkZXYocGQtPmRldmljZSksIHRvX2MycGQocGQpKTsKKwlrZnJlZShwZCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpYl9haCAqYzJfYWhfY3JlYXRlKHN0cnVjdCBpYl9wZCAqcGQsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKQoreworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7Cit9CisKK3N0YXRpYyBpbnQgYzJfYWhfZGVzdHJveShzdHJ1Y3QgaWJfYWggKmFoKQoreworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyB2b2lkIGMyX2FkZF9yZWYoc3RydWN0IGliX3FwICppYnFwKQoreworCXN0cnVjdCBjMl9xcCAqcXA7CisJQlVHX09OKCFpYnFwKTsKKwlxcCA9IHRvX2MycXAoaWJxcCk7CisJYXRvbWljX2luYygmcXAtPnJlZmNvdW50KTsKK30KKworc3RhdGljIHZvaWQgYzJfcmVtX3JlZihzdHJ1Y3QgaWJfcXAgKmlicXApCit7CisJc3RydWN0IGMyX3FwICpxcDsKKwlCVUdfT04oIWlicXApOworCXFwID0gdG9fYzJxcChpYnFwKTsKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSkKKwkJd2FrZV91cCgmcXAtPndhaXQpOworfQorCitzdHJ1Y3QgaWJfcXAgKmMyX2dldF9xcChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGludCBxcG4pCit7CisJc3RydWN0IGMyX2RldiogYzJkZXYgPSB0b19jMmRldihkZXZpY2UpOworCXN0cnVjdCBjMl9xcCAqcXA7CisKKwlxcCA9IGMyX2ZpbmRfcXBuKGMyZGV2LCBxcG4pOworCXByX2RlYnVnKCIlcyBSZXR1cm5pbmcgUVA9JXAgZm9yIFFQTj0lZCwgZGV2aWNlPSVwLCByZWZjb3VudD0lZFxuIiwKKwkJX19GVU5DVElPTl9fLCBxcCwgcXBuLCBkZXZpY2UsCisJCShxcD9hdG9taWNfcmVhZCgmcXAtPnJlZmNvdW50KTowKSk7CisKKwlyZXR1cm4gKHFwPyZxcC0+aWJxcDpOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBpYl9xcCAqYzJfY3JlYXRlX3FwKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkJICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkJICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBjMl9xcCAqcXA7CisJaW50IGVycjsKKworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisKKwlzd2l0Y2ggKGluaXRfYXR0ci0+cXBfdHlwZSkgeworCWNhc2UgSUJfUVBUX1JDOgorCQlxcCA9IGt6YWxsb2Moc2l6ZW9mKCpxcCksIEdGUF9LRVJORUwpOworCQlpZiAoIXFwKSB7CisJCQlwcl9kZWJ1ZygiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBRUFxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCQl9CisJCXNwaW5fbG9ja19pbml0KCZxcC0+bG9jayk7CisJCWlmIChwZC0+dW9iamVjdCkgeworCQkJLyogdXNlcnNwYWNlIHNwZWNpZmljICovCisJCX0KKworCQllcnIgPSBjMl9hbGxvY19xcCh0b19jMmRldihwZC0+ZGV2aWNlKSwKKwkJCQkgIHRvX2MycGQocGQpLCBpbml0X2F0dHIsIHFwKTsKKworCQlpZiAoZXJyICYmIHBkLT51b2JqZWN0KSB7CisJCQkvKiB1c2Vyc3BhY2Ugc3BlY2lmaWMgKi8KKwkJfQorCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2RlYnVnKCIlczogSW52YWxpZCBRUCB0eXBlOiAlZFxuIiwgX19GVU5DVElPTl9fLAorCQkJaW5pdF9hdHRyLT5xcF90eXBlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJCWJyZWFrOworCX0KKworCWlmIChlcnIpIHsKKwkJa2ZyZWUocXApOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXJldHVybiAmcXAtPmlicXA7Cit9CisKK3N0YXRpYyBpbnQgYzJfZGVzdHJveV9xcChzdHJ1Y3QgaWJfcXAgKmliX3FwKQoreworCXN0cnVjdCBjMl9xcCAqcXAgPSB0b19jMnFwKGliX3FwKTsKKworCXByX2RlYnVnKCIlczoldSBxcD0lcCxxcC0+c3RhdGU9JWRcbiIsCisJCV9fRlVOQ1RJT05fXywgX19MSU5FX18saWJfcXAscXAtPnN0YXRlKTsKKwljMl9mcmVlX3FwKHRvX2MyZGV2KGliX3FwLT5kZXZpY2UpLCBxcCk7CisJa2ZyZWUocXApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGliX2NxICpjMl9jcmVhdGVfY3Eoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIGludCBlbnRyaWVzLAorCQkJCSAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJCSAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgYzJfY3EgKmNxOworCWludCBlcnI7CisKKwljcSA9IGttYWxsb2Moc2l6ZW9mKCpjcSksIEdGUF9LRVJORUwpOworCWlmICghY3EpIHsKKwkJcHJfZGVidWcoIiVzOiBVbmFibGUgdG8gYWxsb2NhdGUgQ1FcbiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKworCWVyciA9IGMyX2luaXRfY3EodG9fYzJkZXYoaWJkZXYpLCBlbnRyaWVzLCBOVUxMLCBjcSk7CisJaWYgKGVycikgeworCQlwcl9kZWJ1ZygiJXM6IGVycm9yIGluaXRpYWxpemluZyBDUVxuIiwgX19GVU5DVElPTl9fKTsKKwkJa2ZyZWUoY3EpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXJldHVybiAmY3EtPmliY3E7Cit9CisKK3N0YXRpYyBpbnQgYzJfZGVzdHJveV9jcShzdHJ1Y3QgaWJfY3EgKmliX2NxKQoreworCXN0cnVjdCBjMl9jcSAqY3EgPSB0b19jMmNxKGliX2NxKTsKKworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisKKwljMl9mcmVlX2NxKHRvX2MyZGV2KGliX2NxLT5kZXZpY2UpLCBjcSk7CisJa2ZyZWUoY3EpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGMyX2NvbnZlcnRfYWNjZXNzKGludCBhY2MpCit7CisJcmV0dXJuIChhY2MgJiBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFID8gQzJfQUNGX1JFTU9URV9XUklURSA6IDApIHwKKwkgICAgKGFjYyAmIElCX0FDQ0VTU19SRU1PVEVfUkVBRCA/IEMyX0FDRl9SRU1PVEVfUkVBRCA6IDApIHwKKwkgICAgKGFjYyAmIElCX0FDQ0VTU19MT0NBTF9XUklURSA/IEMyX0FDRl9MT0NBTF9XUklURSA6IDApIHwKKwkgICAgQzJfQUNGX0xPQ0FMX1JFQUQgfCBDMl9BQ0ZfV0lORE9XX0JJTkQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaWJfbXIgKmMyX3JlZ19waHlzX21yKHN0cnVjdCBpYl9wZCAqaWJfcGQsCisJCQkJICAgIHN0cnVjdCBpYl9waHlzX2J1ZiAqYnVmZmVyX2xpc3QsCisJCQkJICAgIGludCBudW1fcGh5c19idWYsIGludCBhY2MsIHU2NCAqIGlvdmFfc3RhcnQpCit7CisJc3RydWN0IGMyX21yICptcjsKKwl1NjQgKnBhZ2VfbGlzdDsKKwl1MzIgdG90YWxfbGVuOworCWludCBlcnIsIGksIGosIGssIHBhZ2Vfc2hpZnQsIHBibF9kZXB0aDsKKworCXBibF9kZXB0aCA9IDA7CisJdG90YWxfbGVuID0gMDsKKworCXBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUOworCS8qCisJICogSWYgdGhlcmUgaXMgb25seSAxIGJ1ZmZlciB3ZSBhc3N1bWUgdGhpcyBjb3VsZAorCSAqIGJlIGEgbWFwIG9mIGFsbCBwaHkgbWVtLi4udXNlIGEgMzJrIHBhZ2Vfc2hpZnQuCisJICovCisJaWYgKG51bV9waHlzX2J1ZiA9PSAxKQorCQlwYWdlX3NoaWZ0ICs9IDM7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BoeXNfYnVmOyBpKyspIHsKKworCQlpZiAoYnVmZmVyX2xpc3RbaV0uYWRkciAmIH5QQUdFX01BU0spIHsKKwkJCXByX2RlYnVnKCJVbmFsaWduZWQgTWVtb3J5IEJ1ZmZlcjogMHgleFxuIiwKKwkJCQkodW5zaWduZWQgaW50KSBidWZmZXJfbGlzdFtpXS5hZGRyKTsKKwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCQl9CisKKwkJaWYgKCFidWZmZXJfbGlzdFtpXS5zaXplKSB7CisJCQlwcl9kZWJ1ZygiSW52YWxpZCBCdWZmZXIgU2l6ZVxuIik7CisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJfQorCisJCXRvdGFsX2xlbiArPSBidWZmZXJfbGlzdFtpXS5zaXplOworCQlwYmxfZGVwdGggKz0gQUxJR04oYnVmZmVyX2xpc3RbaV0uc2l6ZSwKKwkJCQkgICAoMSA8PCBwYWdlX3NoaWZ0KSkgPj4gcGFnZV9zaGlmdDsKKwl9CisKKwlwYWdlX2xpc3QgPSB2bWFsbG9jKHNpemVvZih1NjQpICogcGJsX2RlcHRoKTsKKwlpZiAoIXBhZ2VfbGlzdCkgeworCQlwcl9kZWJ1ZygiY291bGRuJ3Qgdm1hbGxvYyBwYWdlX2xpc3Qgb2Ygc2l6ZSAlemRcbiIsCisJCQkoc2l6ZW9mKHU2NCkgKiBwYmxfZGVwdGgpKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCBudW1fcGh5c19idWY7IGkrKykgeworCisJCWludCBuYWRkcnM7CisKKyAJCW5hZGRycyA9IEFMSUdOKGJ1ZmZlcl9saXN0W2ldLnNpemUsCisJCQkgICAgICAgKDEgPDwgcGFnZV9zaGlmdCkpID4+IHBhZ2Vfc2hpZnQ7CisJCWZvciAoayA9IDA7IGsgPCBuYWRkcnM7IGsrKykKKwkJCXBhZ2VfbGlzdFtqKytdID0gKGJ1ZmZlcl9saXN0W2ldLmFkZHIgKworCQkJCQkJICAgICAoayA8PCBwYWdlX3NoaWZ0KSk7CisJfQorCisJbXIgPSBrbWFsbG9jKHNpemVvZigqbXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1yKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCW1yLT5wZCA9IHRvX2MycGQoaWJfcGQpOworCXByX2RlYnVnKCIlcyAtIHBhZ2Ugc2hpZnQgJWQsIHBibF9kZXB0aCAlZCwgdG90YWxfbGVuICV1LCAiCisJCSIqaW92YV9zdGFydCAlbGx4LCBmaXJzdCBwYSAlbGx4LCBsYXN0IHBhICVsbHhcbiIsCisJCV9fRlVOQ1RJT05fXywgcGFnZV9zaGlmdCwgcGJsX2RlcHRoLCB0b3RhbF9sZW4sCisJCSppb3ZhX3N0YXJ0LCBwYWdlX2xpc3RbMF0sIHBhZ2VfbGlzdFtwYmxfZGVwdGgtMV0pOworICAJZXJyID0gYzJfbnNtcl9yZWdpc3Rlcl9waHlzX2tlcm4odG9fYzJkZXYoaWJfcGQtPmRldmljZSksIHBhZ2VfbGlzdCwKKyAJCQkJCSAoMSA8PCBwYWdlX3NoaWZ0KSwgcGJsX2RlcHRoLAorCQkJCQkgdG90YWxfbGVuLCAwLCBpb3ZhX3N0YXJ0LAorCQkJCQkgYzJfY29udmVydF9hY2Nlc3MoYWNjKSwgbXIpOworCXZmcmVlKHBhZ2VfbGlzdCk7CisJaWYgKGVycikgeworCQlrZnJlZShtcik7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJcmV0dXJuICZtci0+aWJtcjsKK30KKworc3RhdGljIHN0cnVjdCBpYl9tciAqYzJfZ2V0X2RtYV9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBpbnQgYWNjKQoreworCXN0cnVjdCBpYl9waHlzX2J1ZiBibDsKKwl1NjQga3ZhID0gMDsKKworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisKKwkvKiBBTVNPMTEwMCBsaW1pdCAqLworCWJsLnNpemUgPSAweGZmZmZmZmZmOworCWJsLmFkZHIgPSAwOworCXJldHVybiBjMl9yZWdfcGh5c19tcihwZCwgJmJsLCAxLCBhY2MsICZrdmEpOworfQorCitzdGF0aWMgc3RydWN0IGliX21yICpjMl9yZWdfdXNlcl9tcihzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJCSAgICBpbnQgYWNjLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXU2NCAqcGFnZXM7CisJdTY0IGt2YSA9IDA7CisJaW50IHNoaWZ0LCBuLCBsZW47CisJaW50IGksIGosIGs7CisJaW50IGVyciA9IDA7CisJc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rOworCXN0cnVjdCBjMl9wZCAqYzJwZCA9IHRvX2MycGQocGQpOworCXN0cnVjdCBjMl9tciAqYzJtcjsKKworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJc2hpZnQgPSBmZnMocmVnaW9uLT5wYWdlX3NpemUpIC0gMTsKKworCWMybXIgPSBrbWFsbG9jKHNpemVvZigqYzJtciksIEdGUF9LRVJORUwpOworCWlmICghYzJtcikKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJYzJtci0+cGQgPSBjMnBkOworCisJbiA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjaHVuaywgJnJlZ2lvbi0+Y2h1bmtfbGlzdCwgbGlzdCkKKwkJbiArPSBjaHVuay0+bmVudHM7CisKKwlwYWdlcyA9IGttYWxsb2MobiAqIHNpemVvZih1NjQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBhZ2VzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCWkgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2h1bmssICZyZWdpb24tPmNodW5rX2xpc3QsIGxpc3QpIHsKKwkJZm9yIChqID0gMDsgaiA8IGNodW5rLT5ubWFwOyArK2opIHsKKwkJCWxlbiA9IHNnX2RtYV9sZW4oJmNodW5rLT5wYWdlX2xpc3Rbal0pID4+IHNoaWZ0OworCQkJZm9yIChrID0gMDsgayA8IGxlbjsgKytrKSB7CisJCQkJcGFnZXNbaSsrXSA9CisJCQkJCXNnX2RtYV9hZGRyZXNzKCZjaHVuay0+cGFnZV9saXN0W2pdKSArCisJCQkJCShyZWdpb24tPnBhZ2Vfc2l6ZSAqIGspOworCQkJfQorCQl9CisJfQorCisJa3ZhID0gKHU2NClyZWdpb24tPnZpcnRfYmFzZTsKKyAgCWVyciA9IGMyX25zbXJfcmVnaXN0ZXJfcGh5c19rZXJuKHRvX2MyZGV2KHBkLT5kZXZpY2UpLAorCQkJCQkgcGFnZXMsCisgCQkJCQkgcmVnaW9uLT5wYWdlX3NpemUsCisJCQkJCSBpLAorCQkJCQkgcmVnaW9uLT5sZW5ndGgsCisJCQkJCSByZWdpb24tPm9mZnNldCwKKwkJCQkJICZrdmEsCisJCQkJCSBjMl9jb252ZXJ0X2FjY2VzcyhhY2MpLAorCQkJCQkgYzJtcik7CisJa2ZyZWUocGFnZXMpOworCWlmIChlcnIpIHsKKwkJa2ZyZWUoYzJtcik7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCXJldHVybiAmYzJtci0+aWJtcjsKKworZXJyOgorCWtmcmVlKGMybXIpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3N0YXRpYyBpbnQgYzJfZGVyZWdfbXIoc3RydWN0IGliX21yICppYl9tcikKK3sKKwlzdHJ1Y3QgYzJfbXIgKm1yID0gdG9fYzJtcihpYl9tcik7CisJaW50IGVycjsKKworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisKKwllcnIgPSBjMl9zdGFnX2RlYWxsb2ModG9fYzJkZXYoaWJfbXItPmRldmljZSksIGliX21yLT5sa2V5KTsKKwlpZiAoZXJyKQorCQlwcl9kZWJ1ZygiYzJfc3RhZ19kZWFsbG9jIGZhaWxlZDogJWRcbiIsIGVycik7CisJZWxzZQorCQlrZnJlZShtcik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGMyX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBjMl9kZXYsIGliZGV2LmNsYXNzX2Rldik7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleFxuIiwgZGV2LT5wcm9wcy5od192ZXIpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2Z3X3ZlcihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IGMyX2RldiAqZGV2ID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBjMl9kZXYsIGliZGV2LmNsYXNzX2Rldik7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIleC4leC4leFxuIiwKKwkJICAgICAgIChpbnQpIChkZXYtPnByb3BzLmZ3X3ZlciA+PiAzMiksCisJCSAgICAgICAoaW50KSAoZGV2LT5wcm9wcy5md192ZXIgPj4gMTYpICYgMHhmZmZmLAorCQkgICAgICAgKGludCkgKGRldi0+cHJvcHMuZndfdmVyICYgMHhmZmZmKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGNhKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXYsIGNoYXIgKmJ1ZikKK3sKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIkFNU08xMTAwXG4iKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19ib2FyZChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlLipzXG4iLCAzMiwgIkFNU08xMTAwIEJvYXJkIElEIik7Cit9CisKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihod19yZXYsIFNfSVJVR08sIHNob3dfcmV2LCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihmd192ZXIsIFNfSVJVR08sIHNob3dfZndfdmVyLCBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihoY2FfdHlwZSwgU19JUlVHTywgc2hvd19oY2EsIE5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGJvYXJkX2lkLCBTX0lSVUdPLCBzaG93X2JvYXJkLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICpjMl9jbGFzc19hdHRyaWJ1dGVzW10gPSB7CisJJmNsYXNzX2RldmljZV9hdHRyX2h3X3JldiwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfZndfdmVyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9oY2FfdHlwZSwKKwkmY2xhc3NfZGV2aWNlX2F0dHJfYm9hcmRfaWQKK307CisKK3N0YXRpYyBpbnQgYzJfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCisJCQlpbnQgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCWludCBlcnI7CisKKwllcnIgPQorCSAgICBjMl9xcF9tb2RpZnkodG9fYzJkZXYoaWJxcC0+ZGV2aWNlKSwgdG9fYzJxcChpYnFwKSwgYXR0ciwKKwkJCSBhdHRyX21hc2spOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjMl9tdWx0aWNhc3RfYXR0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCit7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBjMl9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCit7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGludCBjMl9wcm9jZXNzX21hZChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJCSAgaW50IG1hZF9mbGFncywKKwkJCSAgdTggcG9ydF9udW0sCisJCQkgIHN0cnVjdCBpYl93YyAqaW5fd2MsCisJCQkgIHN0cnVjdCBpYl9ncmggKmluX2dyaCwKKwkJCSAgc3RydWN0IGliX21hZCAqaW5fbWFkLCBzdHJ1Y3QgaWJfbWFkICpvdXRfbWFkKQoreworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJcmV0dXJuIC1FTk9TWVM7Cit9CisKK3N0YXRpYyBpbnQgYzJfY29ubmVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaXdfY21fY29ubl9wYXJhbSAqaXdfcGFyYW0pCit7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKworCS8qIFJlcXVlc3QgYSBjb25uZWN0aW9uICovCisJcmV0dXJuIGMyX2xscF9jb25uZWN0KGNtX2lkLCBpd19wYXJhbSk7Cit9CisKK3N0YXRpYyBpbnQgYzJfYWNjZXB0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIHN0cnVjdCBpd19jbV9jb25uX3BhcmFtICppd19wYXJhbSkKK3sKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCisJLyogQWNjZXB0IHRoZSBuZXcgY29ubmVjdGlvbiAqLworCXJldHVybiBjMl9sbHBfYWNjZXB0KGNtX2lkLCBpd19wYXJhbSk7Cit9CisKK3N0YXRpYyBpbnQgYzJfcmVqZWN0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIGNvbnN0IHZvaWQgKnBkYXRhLCB1OCBwZGF0YV9sZW4pCit7CisJaW50IGVycjsKKworCXByX2RlYnVnKCIlczoldVxuIiwgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisKKwllcnIgPSBjMl9sbHBfcmVqZWN0KGNtX2lkLCBwZGF0YSwgcGRhdGFfbGVuKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGMyX3NlcnZpY2VfY3JlYXRlKHN0cnVjdCBpd19jbV9pZCAqY21faWQsIGludCBiYWNrbG9nKQoreworCWludCBlcnI7CisKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCWVyciA9IGMyX2xscF9zZXJ2aWNlX2NyZWF0ZShjbV9pZCwgYmFja2xvZyk7CisJcHJfZGVidWcoIiVzOiV1IGVycj0lZFxuIiwKKwkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywKKwkJZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGMyX3NlcnZpY2VfZGVzdHJveShzdHJ1Y3QgaXdfY21faWQgKmNtX2lkKQoreworCWludCBlcnI7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKworCWVyciA9IGMyX2xscF9zZXJ2aWNlX2Rlc3Ryb3koY21faWQpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjMl9wc2V1ZG9fdXAoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbmQ7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSBuZXRkZXYtPnByaXY7CisKKwlpbmQgPSBpbl9kZXZfZ2V0KG5ldGRldik7CisJaWYgKCFpbmQpCisJCXJldHVybiAwOworCisJcHJfZGVidWcoImFkZGluZy4uLlxuIik7CisJZm9yX2lmYShpbmQpIHsKKyNpZmRlZiBERUJVRworCQl1OCAqaXAgPSAodTggKikgJiBpZmEtPmlmYV9hZGRyZXNzOworCisJCXByX2RlYnVnKCIlczogJWQuJWQuJWQuJWRcbiIsCisJCSAgICAgICBpZmEtPmlmYV9sYWJlbCwgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10pOworI2VuZGlmCisJCWMyX2FkZF9hZGRyKGMyZGV2LCBpZmEtPmlmYV9hZGRyZXNzLCBpZmEtPmlmYV9tYXNrKTsKKwl9CisJZW5kZm9yX2lmYShpbmQpOworCWluX2Rldl9wdXQoaW5kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGMyX3BzZXVkb19kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGluX2RldmljZSAqaW5kOworCXN0cnVjdCBjMl9kZXYgKmMyZGV2ID0gbmV0ZGV2LT5wcml2OworCisJaW5kID0gaW5fZGV2X2dldChuZXRkZXYpOworCWlmICghaW5kKQorCQlyZXR1cm4gMDsKKworCXByX2RlYnVnKCJkZWxldGluZy4uLlxuIik7CisJZm9yX2lmYShpbmQpIHsKKyNpZmRlZiBERUJVRworCQl1OCAqaXAgPSAodTggKikgJiBpZmEtPmlmYV9hZGRyZXNzOworCisJCXByX2RlYnVnKCIlczogJWQuJWQuJWQuJWRcbiIsCisJCSAgICAgICBpZmEtPmlmYV9sYWJlbCwgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10pOworI2VuZGlmCisJCWMyX2RlbF9hZGRyKGMyZGV2LCBpZmEtPmlmYV9hZGRyZXNzLCBpZmEtPmlmYV9tYXNrKTsKKwl9CisJZW5kZm9yX2lmYShpbmQpOworCWluX2Rldl9wdXQoaW5kKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGMyX3BzZXVkb194bWl0X2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KKworc3RhdGljIGludCBjMl9wc2V1ZG9fY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChuZXdfbXR1IDwgRVRIX1pMRU4gfHwgbmV3X210dSA+IEVUSF9KVU1CT19NVFUpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV0ZGV2LT5tdHUgPSBuZXdfbXR1OworCisJLyogVE9ETzogVGVsbCBybmljIGFib3V0IG5ldyBybWRhIGludGVyZmFjZSBtdHUgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9NT0RVTEVfT1dORVIobmV0ZGV2KTsKKwluZXRkZXYtPm9wZW4gPSBjMl9wc2V1ZG9fdXA7CisJbmV0ZGV2LT5zdG9wID0gYzJfcHNldWRvX2Rvd247CisJbmV0ZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBjMl9wc2V1ZG9feG1pdF9mcmFtZTsKKwluZXRkZXYtPmdldF9zdGF0cyA9IE5VTEw7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gTlVMTDsKKwluZXRkZXYtPnNldF9tYWNfYWRkcmVzcyA9IE5VTEw7CisJbmV0ZGV2LT5jaGFuZ2VfbXR1ID0gYzJfcHNldWRvX2NoYW5nZV9tdHU7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyA9IDA7CisJbmV0ZGV2LT50eXBlID0gQVJQSFJEX0VUSEVSOworCW5ldGRldi0+bXR1ID0gMTUwMDsKKwluZXRkZXYtPmhhcmRfaGVhZGVyX2xlbiA9IEVUSF9ITEVOOworCW5ldGRldi0+YWRkcl9sZW4gPSBFVEhfQUxFTjsKKwluZXRkZXYtPnR4X3F1ZXVlX2xlbiA9IDA7CisJbmV0ZGV2LT5mbGFncyB8PSBJRkZfTk9BUlA7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmMyX3BzZXVkb19uZXRkZXZfaW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwljaGFyIG5hbWVbSUZOQU1TSVpdOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CisKKwkvKiBjaGFuZ2UgZXRoeHh4IHRvIGl3eHh4ICovCisJc3RyY3B5KG5hbWUsICJpdyIpOworCXN0cmNhdChuYW1lLCAmYzJkZXYtPm5ldGRldi0+bmFtZVszXSk7CisJbmV0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZigqbmV0ZGV2KSwgbmFtZSwgc2V0dXApOworCWlmICghbmV0ZGV2KSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIC0gIGV0aGVyZGV2IGFsbG9jIGZhaWxlZCIsCisJCQlfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwluZXRkZXYtPnByaXYgPSBjMmRldjsKKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmMyZGV2LT5wY2lkZXYtPmRldik7CisKKwltZW1jcHlfZnJvbWlvKG5ldGRldi0+ZGV2X2FkZHIsIGMyZGV2LT5rdmEgKyBDMl9SRUdTX1JETUFfRU5BRERSLCA2KTsKKworCS8qIFByaW50IG91dCB0aGUgTUFDIGFkZHJlc3MgKi8KKwlwcl9kZWJ1ZygiJXM6IE1BQyAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJbmV0ZGV2LT5uYW1lLAorCQluZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLCBuZXRkZXYtPmRldl9hZGRyWzJdLAorCQluZXRkZXYtPmRldl9hZGRyWzNdLCBuZXRkZXYtPmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworI2lmIDAKKwkvKiBEaXNhYmxlIG5ldHdvcmsgcGFja2V0cyAqLworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKyNlbmRpZgorCXJldHVybiBuZXRkZXY7Cit9CisKK2ludCBjMl9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGMyX2RldiAqZGV2KQoreworCWludCByZXQ7CisJaW50IGk7CisKKwkvKiBSZWdpc3RlciBwc2V1ZG8gbmV0d29yayBkZXZpY2UgKi8KKwlkZXYtPnBzZXVkb19uZXRkZXYgPSBjMl9wc2V1ZG9fbmV0ZGV2X2luaXQoZGV2KTsKKwlpZiAoZGV2LT5wc2V1ZG9fbmV0ZGV2KSB7CisJCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYtPnBzZXVkb19uZXRkZXYpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJIlVuYWJsZSB0byByZWdpc3RlciBuZXRkZXYsIHJldCA9ICVkXG4iLCByZXQpOworCQkJZnJlZV9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlwcl9kZWJ1ZygiJXM6JXVcbiIsIF9fRlVOQ1RJT05fXywgX19MSU5FX18pOworCXN0cmxjcHkoZGV2LT5pYmRldi5uYW1lLCAiYW1zbyVkIiwgSUJfREVWSUNFX05BTUVfTUFYKTsKKwlkZXYtPmliZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJZGV2LT5pYmRldi51dmVyYnNfY21kX21hc2sgPQorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVCkgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0UpIHwKKwkgICAgKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVCkgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9BTExPQ19QRCkgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERUFMTE9DX1BEKSB8CisJICAgICgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFR19NUikgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVJFR19NUikgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfQ09NUF9DSEFOTkVMKSB8CisJICAgICgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUSkgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRKSB8CisJICAgICgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFUV9OT1RJRllfQ1EpIHwKKwkgICAgKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1FQKSB8CisJICAgICgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUCkgfAorCSAgICAoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9QT0xMX0NRKSB8CisJICAgICgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfUVApIHwKKwkgICAgKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TRU5EKSB8CisJICAgICgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1BPU1RfUkVDVik7CisKKwlkZXYtPmliZGV2Lm5vZGVfdHlwZSA9IFJETUFfTk9ERV9STklDOworCW1lbXNldCgmZGV2LT5pYmRldi5ub2RlX2d1aWQsIDAsIHNpemVvZihkZXYtPmliZGV2Lm5vZGVfZ3VpZCkpOworCW1lbWNweSgmZGV2LT5pYmRldi5ub2RlX2d1aWQsIGRldi0+cHNldWRvX25ldGRldi0+ZGV2X2FkZHIsIDYpOworCWRldi0+aWJkZXYucGh5c19wb3J0X2NudCA9IDE7CisJZGV2LT5pYmRldi5kbWFfZGV2aWNlID0gJmRldi0+cGNpZGV2LT5kZXY7CisJZGV2LT5pYmRldi5jbGFzc19kZXYuZGV2ID0gJmRldi0+cGNpZGV2LT5kZXY7CisJZGV2LT5pYmRldi5xdWVyeV9kZXZpY2UgPSBjMl9xdWVyeV9kZXZpY2U7CisJZGV2LT5pYmRldi5xdWVyeV9wb3J0ID0gYzJfcXVlcnlfcG9ydDsKKwlkZXYtPmliZGV2Lm1vZGlmeV9wb3J0ID0gYzJfbW9kaWZ5X3BvcnQ7CisJZGV2LT5pYmRldi5xdWVyeV9wa2V5ID0gYzJfcXVlcnlfcGtleTsKKwlkZXYtPmliZGV2LnF1ZXJ5X2dpZCA9IGMyX3F1ZXJ5X2dpZDsKKwlkZXYtPmliZGV2LmFsbG9jX3Vjb250ZXh0ID0gYzJfYWxsb2NfdWNvbnRleHQ7CisJZGV2LT5pYmRldi5kZWFsbG9jX3Vjb250ZXh0ID0gYzJfZGVhbGxvY191Y29udGV4dDsKKwlkZXYtPmliZGV2Lm1tYXAgPSBjMl9tbWFwX3VhcjsKKwlkZXYtPmliZGV2LmFsbG9jX3BkID0gYzJfYWxsb2NfcGQ7CisJZGV2LT5pYmRldi5kZWFsbG9jX3BkID0gYzJfZGVhbGxvY19wZDsKKwlkZXYtPmliZGV2LmNyZWF0ZV9haCA9IGMyX2FoX2NyZWF0ZTsKKwlkZXYtPmliZGV2LmRlc3Ryb3lfYWggPSBjMl9haF9kZXN0cm95OworCWRldi0+aWJkZXYuY3JlYXRlX3FwID0gYzJfY3JlYXRlX3FwOworCWRldi0+aWJkZXYubW9kaWZ5X3FwID0gYzJfbW9kaWZ5X3FwOworCWRldi0+aWJkZXYuZGVzdHJveV9xcCA9IGMyX2Rlc3Ryb3lfcXA7CisJZGV2LT5pYmRldi5jcmVhdGVfY3EgPSBjMl9jcmVhdGVfY3E7CisJZGV2LT5pYmRldi5kZXN0cm95X2NxID0gYzJfZGVzdHJveV9jcTsKKwlkZXYtPmliZGV2LnBvbGxfY3EgPSBjMl9wb2xsX2NxOworCWRldi0+aWJkZXYuZ2V0X2RtYV9tciA9IGMyX2dldF9kbWFfbXI7CisJZGV2LT5pYmRldi5yZWdfcGh5c19tciA9IGMyX3JlZ19waHlzX21yOworCWRldi0+aWJkZXYucmVnX3VzZXJfbXIgPSBjMl9yZWdfdXNlcl9tcjsKKwlkZXYtPmliZGV2LmRlcmVnX21yID0gYzJfZGVyZWdfbXI7CisKKwlkZXYtPmliZGV2LmFsbG9jX2ZtciA9IE5VTEw7CisJZGV2LT5pYmRldi51bm1hcF9mbXIgPSBOVUxMOworCWRldi0+aWJkZXYuZGVhbGxvY19mbXIgPSBOVUxMOworCWRldi0+aWJkZXYubWFwX3BoeXNfZm1yID0gTlVMTDsKKworCWRldi0+aWJkZXYuYXR0YWNoX21jYXN0ID0gYzJfbXVsdGljYXN0X2F0dGFjaDsKKwlkZXYtPmliZGV2LmRldGFjaF9tY2FzdCA9IGMyX211bHRpY2FzdF9kZXRhY2g7CisJZGV2LT5pYmRldi5wcm9jZXNzX21hZCA9IGMyX3Byb2Nlc3NfbWFkOworCisJZGV2LT5pYmRldi5yZXFfbm90aWZ5X2NxID0gYzJfYXJtX2NxOworCWRldi0+aWJkZXYucG9zdF9zZW5kID0gYzJfcG9zdF9zZW5kOworCWRldi0+aWJkZXYucG9zdF9yZWN2ID0gYzJfcG9zdF9yZWNlaXZlOworCisJZGV2LT5pYmRldi5pd2NtID0ga21hbGxvYyhzaXplb2YoKmRldi0+aWJkZXYuaXdjbSksIEdGUF9LRVJORUwpOworCWRldi0+aWJkZXYuaXdjbS0+YWRkX3JlZiA9IGMyX2FkZF9yZWY7CisJZGV2LT5pYmRldi5pd2NtLT5yZW1fcmVmID0gYzJfcmVtX3JlZjsKKwlkZXYtPmliZGV2Lml3Y20tPmdldF9xcCA9IGMyX2dldF9xcDsKKwlkZXYtPmliZGV2Lml3Y20tPmNvbm5lY3QgPSBjMl9jb25uZWN0OworCWRldi0+aWJkZXYuaXdjbS0+YWNjZXB0ID0gYzJfYWNjZXB0OworCWRldi0+aWJkZXYuaXdjbS0+cmVqZWN0ID0gYzJfcmVqZWN0OworCWRldi0+aWJkZXYuaXdjbS0+Y3JlYXRlX2xpc3RlbiA9IGMyX3NlcnZpY2VfY3JlYXRlOworCWRldi0+aWJkZXYuaXdjbS0+ZGVzdHJveV9saXN0ZW4gPSBjMl9zZXJ2aWNlX2Rlc3Ryb3k7CisKKwlyZXQgPSBpYl9yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjMl9jbGFzc19hdHRyaWJ1dGVzKTsgKytpKSB7CisJCXJldCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5pYmRldi5jbGFzc19kZXYsCisJCQkJCSAgICAgICBjMl9jbGFzc19hdHRyaWJ1dGVzW2ldKTsKKwkJaWYgKHJldCkgeworCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LT5wc2V1ZG9fbmV0ZGV2KTsKKwkJCWZyZWVfbmV0ZGV2KGRldi0+cHNldWRvX25ldGRldik7CisJCQlpYl91bnJlZ2lzdGVyX2RldmljZSgmZGV2LT5pYmRldik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBjMl91bnJlZ2lzdGVyX2RldmljZShzdHJ1Y3QgYzJfZGV2ICpkZXYpCit7CisJcHJfZGVidWcoIiVzOiV1XG4iLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fKTsKKwl1bnJlZ2lzdGVyX25ldGRldihkZXYtPnBzZXVkb19uZXRkZXYpOworCWZyZWVfbmV0ZGV2KGRldi0+cHNldWRvX25ldGRldik7CisJaWJfdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+aWJkZXYpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcHJvdmlkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzkwNjIyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmgKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQW1tYXNzbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIEMyX1BST1ZJREVSX0gKKyNkZWZpbmUgQzJfUFJPVklERVJfSAorI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3BhY2suaD4KKworI2luY2x1ZGUgImMyX21xLmgiCisjaW5jbHVkZSA8cmRtYS9pd19jbS5oPgorCisjZGVmaW5lIEMyX01QVF9GTEFHX0FUT01JQyAgICAgICAgKDEgPDwgMTQpCisjZGVmaW5lIEMyX01QVF9GTEFHX1JFTU9URV9XUklURSAgKDEgPDwgMTMpCisjZGVmaW5lIEMyX01QVF9GTEFHX1JFTU9URV9SRUFEICAgKDEgPDwgMTIpCisjZGVmaW5lIEMyX01QVF9GTEFHX0xPQ0FMX1dSSVRFICAgKDEgPDwgMTEpCisjZGVmaW5lIEMyX01QVF9GTEFHX0xPQ0FMX1JFQUQgICAgKDEgPDwgMTApCisKK3N0cnVjdCBjMl9idWZfbGlzdCB7CisJdm9pZCAqYnVmOworCSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcHBpbmcpCit9OworCisKKy8qIFRoZSB1c2VyIGNvbnRleHQga2VlcHMgdHJhY2sgb2Ygb2JqZWN0cyBhbGxvY2F0ZWQgZm9yIGEKKyAqIHBhcnRpY3VsYXIgdXNlci1tb2RlIGNsaWVudC4gKi8KK3N0cnVjdCBjMl91Y29udGV4dCB7CisJc3RydWN0IGliX3Vjb250ZXh0IGlidWNvbnRleHQ7Cit9OworCitzdHJ1Y3QgYzJfbXR0OworCisvKiBBbGwgb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggYSBQRCBhcmUga2VwdCBpbiB0aGUKKyAqIGFzc29jaWF0ZWQgdXNlciBjb250ZXh0IGlmIHByZXNlbnQuCisgKi8KK3N0cnVjdCBjMl9wZCB7CisJc3RydWN0IGliX3BkIGlicGQ7CisJdTMyIHBkX2lkOworfTsKKworc3RydWN0IGMyX21yIHsKKwlzdHJ1Y3QgaWJfbXIgaWJtcjsKKwlzdHJ1Y3QgYzJfcGQgKnBkOworfTsKKworc3RydWN0IGMyX2F2OworCitlbnVtIGMyX2FoX3R5cGUgeworCUMyX0FIX09OX0hDQSwKKwlDMl9BSF9QQ0lfUE9PTCwKKwlDMl9BSF9LTUFMTE9DCit9OworCitzdHJ1Y3QgYzJfYWggeworCXN0cnVjdCBpYl9haCBpYmFoOworfTsKKworc3RydWN0IGMyX2NxIHsKKwlzdHJ1Y3QgaWJfY3EgaWJjcTsKKwlzcGlubG9ja190IGxvY2s7CisJYXRvbWljX3QgcmVmY291bnQ7CisJaW50IGNxbjsKKwlpbnQgaXNfa2VybmVsOworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CisKKwl1MzIgYWRhcHRlcl9oYW5kbGU7CisJc3RydWN0IGMyX21xIG1xOworfTsKKworc3RydWN0IGMyX3dxIHsKKwlzcGlubG9ja190IGxvY2s7Cit9Oworc3RydWN0IGl3X2NtX2lkOworc3RydWN0IGMyX3FwIHsKKwlzdHJ1Y3QgaWJfcXAgaWJxcDsKKwlzdHJ1Y3QgaXdfY21faWQgKmNtX2lkOworCXNwaW5sb2NrX3QgbG9jazsKKwlhdG9taWNfdCByZWZjb3VudDsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworCWludCBxcG47CisKKwl1MzIgYWRhcHRlcl9oYW5kbGU7CisJdTMyIHNlbmRfc2dsX2RlcHRoOworCXUzMiByZWN2X3NnbF9kZXB0aDsKKwl1MzIgcmRtYV93cml0ZV9zZ2xfZGVwdGg7CisJdTggc3RhdGU7CisKKwlzdHJ1Y3QgYzJfbXEgc3FfbXE7CisJc3RydWN0IGMyX21xIHJxX21xOworfTsKKworc3RydWN0IGMyX2NyX3F1ZXJ5X2F0dHJzIHsKKwl1MzIgbG9jYWxfYWRkcjsKKwl1MzIgcmVtb3RlX2FkZHI7CisJdTE2IGxvY2FsX3BvcnQ7CisJdTE2IHJlbW90ZV9wb3J0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYzJfcGQgKnRvX2MycGQoc3RydWN0IGliX3BkICppYnBkKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJwZCwgc3RydWN0IGMyX3BkLCBpYnBkKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYzJfdWNvbnRleHQgKnRvX2MydWNvbnRleHQoc3RydWN0IGliX3Vjb250ZXh0ICppYnVjb250ZXh0KQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJ1Y29udGV4dCwgc3RydWN0IGMyX3Vjb250ZXh0LCBpYnVjb250ZXh0KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYzJfbXIgKnRvX2MybXIoc3RydWN0IGliX21yICppYm1yKQoreworCXJldHVybiBjb250YWluZXJfb2YoaWJtciwgc3RydWN0IGMyX21yLCBpYm1yKTsKK30KKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjMl9haCAqdG9fYzJhaChzdHJ1Y3QgaWJfYWggKmliYWgpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYmFoLCBzdHJ1Y3QgYzJfYWgsIGliYWgpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjMl9jcSAqdG9fYzJjcShzdHJ1Y3QgaWJfY3EgKmliY3EpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYmNxLCBzdHJ1Y3QgYzJfY3EsIGliY3EpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjMl9xcCAqdG9fYzJxcChzdHJ1Y3QgaWJfcXAgKmlicXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgYzJfcXAsIGlicXApOworfQorCitzdGF0aWMgaW5saW5lIGludCBpc19ybmljX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGFkZHIpCit7CisJc3RydWN0IGluX2RldmljZSAqaW5kOworCWludCByZXQgPSAwOworCisJaW5kID0gaW5fZGV2X2dldChuZXRkZXYpOworCWlmICghaW5kKQorCQlyZXR1cm4gMDsKKworCWZvcl9pZmEoaW5kKSB7CisJCWlmIChpZmEtPmlmYV9hZGRyZXNzID09IGFkZHIpIHsKKwkJCXJldCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwllbmRmb3JfaWZhKGluZCk7CisJaW5fZGV2X3B1dChpbmQpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYJCQkJLyogQzJfUFJPVklERVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjI2MTEzMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9xcC5jCkBAIC0wLDAgKzEsOTc1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgTWVsbGFub3ggVGVjaG5vbG9naWVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA0IFZvbHRhaXJlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKyNpbmNsdWRlICJjMi5oIgorI2luY2x1ZGUgImMyX3ZxLmgiCisjaW5jbHVkZSAiYzJfc3RhdHVzLmgiCisKKyNkZWZpbmUgQzJfTUFYX09SRF9QRVJfUVAgMTI4CisjZGVmaW5lIEMyX01BWF9JUkRfUEVSX1FQIDEyOAorCisjZGVmaW5lIEMyX0hJTlRfTUFLRShxX2luZGV4LCBoaW50X2NvdW50KSAoKChxX2luZGV4KSA8PCAxNikgfCBoaW50X2NvdW50KQorI2RlZmluZSBDMl9ISU5UX0dFVF9JTkRFWChoaW50KSAoKChoaW50KSAmIDB4N0ZGRjAwMDApID4+IDE2KQorI2RlZmluZSBDMl9ISU5UX0dFVF9DT1VOVChoaW50KSAoKGhpbnQpICYgMHgwMDAwRkZGRikKKworI2RlZmluZSBOT19TVVBQT1JUIC0xCitzdGF0aWMgY29uc3QgdTggYzJfb3Bjb2RlW10gPSB7CisJW0lCX1dSX1NFTkRdID0gQzJfV1JfVFlQRV9TRU5ELAorCVtJQl9XUl9TRU5EX1dJVEhfSU1NXSA9IE5PX1NVUFBPUlQsCisJW0lCX1dSX1JETUFfV1JJVEVdID0gQzJfV1JfVFlQRV9SRE1BX1dSSVRFLAorCVtJQl9XUl9SRE1BX1dSSVRFX1dJVEhfSU1NXSA9IE5PX1NVUFBPUlQsCisJW0lCX1dSX1JETUFfUkVBRF0gPSBDMl9XUl9UWVBFX1JETUFfUkVBRCwKKwlbSUJfV1JfQVRPTUlDX0NNUF9BTkRfU1dQXSA9IE5PX1NVUFBPUlQsCisJW0lCX1dSX0FUT01JQ19GRVRDSF9BTkRfQUREXSA9IE5PX1NVUFBPUlQsCit9OworCitzdGF0aWMgaW50IHRvX2MyX3N0YXRlKGVudW0gaWJfcXBfc3RhdGUgaWJfc3RhdGUpCit7CisJc3dpdGNoIChpYl9zdGF0ZSkgeworCWNhc2UgSUJfUVBTX1JFU0VUOgorCQlyZXR1cm4gQzJfUVBfU1RBVEVfSURMRTsKKwljYXNlIElCX1FQU19SVFM6CisJCXJldHVybiBDMl9RUF9TVEFURV9SVFM7CisJY2FzZSBJQl9RUFNfU1FEOgorCQlyZXR1cm4gQzJfUVBfU1RBVEVfQ0xPU0lORzsKKwljYXNlIElCX1FQU19TUUU6CisJCXJldHVybiBDMl9RUF9TVEFURV9DTE9TSU5HOworCWNhc2UgSUJfUVBTX0VSUjoKKwkJcmV0dXJuIEMyX1FQX1NUQVRFX0VSUk9SOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgdG9faWJfc3RhdGUoZW51bSBjMl9xcF9zdGF0ZSBjMl9zdGF0ZSkKK3sKKwlzd2l0Y2ggKGMyX3N0YXRlKSB7CisJY2FzZSBDMl9RUF9TVEFURV9JRExFOgorCQlyZXR1cm4gSUJfUVBTX1JFU0VUOworCWNhc2UgQzJfUVBfU1RBVEVfQ09OTkVDVElORzoKKwkJcmV0dXJuIElCX1FQU19SVFI7CisJY2FzZSBDMl9RUF9TVEFURV9SVFM6CisJCXJldHVybiBJQl9RUFNfUlRTOworCWNhc2UgQzJfUVBfU1RBVEVfQ0xPU0lORzoKKwkJcmV0dXJuIElCX1FQU19TUUQ7CisJY2FzZSBDMl9RUF9TVEFURV9FUlJPUjoKKwkJcmV0dXJuIElCX1FQU19FUlI7CisJY2FzZSBDMl9RUF9TVEFURV9URVJNSU5BVEU6CisJCXJldHVybiBJQl9RUFNfU1FFOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0b19pYl9zdGF0ZV9zdHIoaW50IGliX3N0YXRlKQoreworCXN0YXRpYyBjb25zdCBjaGFyICpzdGF0ZV9zdHJbXSA9IHsKKwkJIklCX1FQU19SRVNFVCIsCisJCSJJQl9RUFNfSU5JVCIsCisJCSJJQl9RUFNfUlRSIiwKKwkJIklCX1FQU19SVFMiLAorCQkiSUJfUVBTX1NRRCIsCisJCSJJQl9RUFNfU1FFIiwKKwkJIklCX1FQU19FUlIiCisJfTsKKwlpZiAoaWJfc3RhdGUgPCBJQl9RUFNfUkVTRVQgfHwKKwkgICAgaWJfc3RhdGUgPiBJQl9RUFNfRVJSKQorCQlyZXR1cm4gIjxpbnZhbGlkIElCIFFQIHN0YXRlPiI7CisKKwlpYl9zdGF0ZSAtPSBJQl9RUFNfUkVTRVQ7CisJcmV0dXJuIHN0YXRlX3N0cltpYl9zdGF0ZV07Cit9CisKK3ZvaWQgYzJfc2V0X3FwX3N0YXRlKHN0cnVjdCBjMl9xcCAqcXAsIGludCBjMl9zdGF0ZSkKK3sKKwlpbnQgbmV3X3N0YXRlID0gdG9faWJfc3RhdGUoYzJfc3RhdGUpOworCisJcHJfZGVidWcoIiVzOiBxcFslcF0gc3RhdGUgbW9kaWZ5ICVzIC0tPiAlc1xuIiwKKwkgICAgICAgX19GVU5DVElPTl9fLAorCQlxcCwKKwkJdG9faWJfc3RhdGVfc3RyKHFwLT5zdGF0ZSksCisJCXRvX2liX3N0YXRlX3N0cihuZXdfc3RhdGUpKTsKKwlxcC0+c3RhdGUgPSBuZXdfc3RhdGU7Cit9CisKKyNkZWZpbmUgQzJfUVBfTk9fQVRUUl9DSEFOR0UgMHhGRkZGRkZGRgorCitpbnQgYzJfcXBfbW9kaWZ5KHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfcXAgKnFwLAorCQkgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsIGludCBhdHRyX21hc2spCit7CisJc3RydWN0IGMyd3JfcXBfbW9kaWZ5X3JlcSB3cjsKKwlzdHJ1Y3QgYzJ3cl9xcF9tb2RpZnlfcmVwICpyZXBseTsKKwlzdHJ1Y3QgYzJfdnFfcmVxICp2cV9yZXE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1OCBuZXh0X3N0YXRlOworCWludCBlcnI7CisKKwlwcl9kZWJ1ZygiJXM6JWQgcXA9JXAsICVzIC0tPiAlc1xuIiwKKwkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywKKwkJcXAsCisJCXRvX2liX3N0YXRlX3N0cihxcC0+c3RhdGUpLAorCQl0b19pYl9zdGF0ZV9zdHIoYXR0ci0+cXBfc3RhdGUpKTsKKworCXZxX3JlcSA9IHZxX3JlcV9hbGxvYyhjMmRldik7CisJaWYgKCF2cV9yZXEpCisJCXJldHVybiAtRU5PTUVNOworCisJYzJfd3Jfc2V0X2lkKCZ3ciwgQ0NXUl9RUF9NT0RJRlkpOworCXdyLmhkci5jb250ZXh0ID0gKHVuc2lnbmVkIGxvbmcpIHZxX3JlcTsKKwl3ci5ybmljX2hhbmRsZSA9IGMyZGV2LT5hZGFwdGVyX2hhbmRsZTsKKwl3ci5xcF9oYW5kbGUgPSBxcC0+YWRhcHRlcl9oYW5kbGU7CisJd3Iub3JkID0gY3B1X3RvX2JlMzIoQzJfUVBfTk9fQVRUUl9DSEFOR0UpOworCXdyLmlyZCA9IGNwdV90b19iZTMyKEMyX1FQX05PX0FUVFJfQ0hBTkdFKTsKKwl3ci5zcV9kZXB0aCA9IGNwdV90b19iZTMyKEMyX1FQX05PX0FUVFJfQ0hBTkdFKTsKKwl3ci5ycV9kZXB0aCA9IGNwdV90b19iZTMyKEMyX1FQX05PX0FUVFJfQ0hBTkdFKTsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9TVEFURSkgeworCQkvKiBFbnN1cmUgdGhlIHN0YXRlIGlzIHZhbGlkICovCisJCWlmIChhdHRyLT5xcF9zdGF0ZSA8IDAgfHwgYXR0ci0+cXBfc3RhdGUgPiBJQl9RUFNfRVJSKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJd3IubmV4dF9xcF9zdGF0ZSA9IGNwdV90b19iZTMyKHRvX2MyX3N0YXRlKGF0dHItPnFwX3N0YXRlKSk7CisKKwkJaWYgKGF0dHItPnFwX3N0YXRlID09IElCX1FQU19FUlIpIHsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+bG9jaywgZmxhZ3MpOworCQkJaWYgKHFwLT5jbV9pZCAmJiBxcC0+c3RhdGUgPT0gSUJfUVBTX1JUUykgeworCQkJCXByX2RlYnVnKCJHZW5lcmF0aW5nIENMT1NFIGV2ZW50IGZvciBRUC0tPkVSUiwgIgorCQkJCQkicXA9JXAsIGNtX2lkPSVwXG4iLHFwLHFwLT5jbV9pZCk7CisJCQkJLyogR2VuZXJhdGUgYW4gQ0xPU0UgZXZlbnQgKi8KKwkJCQl2cV9yZXEtPmNtX2lkID0gcXAtPmNtX2lkOworCQkJCXZxX3JlcS0+ZXZlbnQgPSBJV19DTV9FVkVOVF9DTE9TRTsKKwkJCX0KKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5sb2NrLCBmbGFncyk7CisJCX0KKwkJbmV4dF9zdGF0ZSA9ICBhdHRyLT5xcF9zdGF0ZTsKKworCX0gZWxzZSBpZiAoYXR0cl9tYXNrICYgSUJfUVBfQ1VSX1NUQVRFKSB7CisKKwkJaWYgKGF0dHItPmN1cl9xcF9zdGF0ZSAhPSBJQl9RUFNfUlRSICYmCisJCSAgICBhdHRyLT5jdXJfcXBfc3RhdGUgIT0gSUJfUVBTX1JUUyAmJgorCQkgICAgYXR0ci0+Y3VyX3FwX3N0YXRlICE9IElCX1FQU19TUUQgJiYKKwkJICAgIGF0dHItPmN1cl9xcF9zdGF0ZSAhPSBJQl9RUFNfU1FFKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UKKwkJCXdyLm5leHRfcXBfc3RhdGUgPQorCQkJICAgIGNwdV90b19iZTMyKHRvX2MyX3N0YXRlKGF0dHItPmN1cl9xcF9zdGF0ZSkpOworCisJCW5leHRfc3RhdGUgPSBhdHRyLT5jdXJfcXBfc3RhdGU7CisKKwl9IGVsc2UgeworCQllcnIgPSAwOworCQlnb3RvIGJhaWwwOworCX0KKworCS8qIHJlZmVyZW5jZSB0aGUgcmVxdWVzdCBzdHJ1Y3QgKi8KKwl2cV9yZXFfZ2V0KGMyZGV2LCB2cV9yZXEpOworCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgJiB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwwOworCX0KKworCWVyciA9IHZxX3dhaXRfZm9yX3JlcGx5KGMyZGV2LCB2cV9yZXEpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDA7CisKKwlyZXBseSA9IChzdHJ1Y3QgYzJ3cl9xcF9tb2RpZnlfcmVwICopICh1bnNpZ25lZCBsb25nKSB2cV9yZXEtPnJlcGx5X21zZzsKKwlpZiAoIXJlcGx5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDA7CisJfQorCisJZXJyID0gYzJfZXJybm8ocmVwbHkpOworCWlmICghZXJyKQorCQlxcC0+c3RhdGUgPSBuZXh0X3N0YXRlOworI2lmZGVmIERFQlVHCisJZWxzZQorCQlwcl9kZWJ1ZygiJXM6IGMyX2Vycm5vPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGVycik7CisjZW5kaWYKKwkvKgorCSAqIElmIHdlJ3JlIGdvaW5nIHRvIGVycm9yIGFuZCBnZW5lcmF0aW5nIHRoZSBldmVudCBoZXJlLCB0aGVuCisJICogd2UgbmVlZCB0byByZW1vdmUgdGhlIHJlZmVyZW5jZSBiZWNhdXNlIHRoZXJlIHdpbGwgYmUgbm8KKwkgKiBjbG9zZSBldmVudCBnZW5lcmF0ZWQgYnkgdGhlIGFkYXB0ZXIKKwkqLworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+bG9jaywgZmxhZ3MpOworCWlmICh2cV9yZXEtPmV2ZW50PT1JV19DTV9FVkVOVF9DTE9TRSAmJiBxcC0+Y21faWQpIHsKKwkJcXAtPmNtX2lkLT5yZW1fcmVmKHFwLT5jbV9pZCk7CisJCXFwLT5jbV9pZCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5sb2NrLCBmbGFncyk7CisKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworICAgICAgYmFpbDA6CisJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CisKKwlwcl9kZWJ1ZygiJXM6JWQgcXA9JXAsIGN1cl9zdGF0ZT0lc1xuIiwKKwkJX19GVU5DVElPTl9fLCBfX0xJTkVfXywKKwkJcXAsCisJCXRvX2liX3N0YXRlX3N0cihxcC0+c3RhdGUpKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYzJfcXBfc2V0X3JlYWRfbGltaXRzKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfcXAgKnFwLAorCQkJICBpbnQgb3JkLCBpbnQgaXJkKQoreworCXN0cnVjdCBjMndyX3FwX21vZGlmeV9yZXEgd3I7CisJc3RydWN0IGMyd3JfcXBfbW9kaWZ5X3JlcCAqcmVwbHk7CisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOworCWludCBlcnI7CisKKwl2cV9yZXEgPSB2cV9yZXFfYWxsb2MoYzJkZXYpOworCWlmICghdnFfcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWMyX3dyX3NldF9pZCgmd3IsIENDV1JfUVBfTU9ESUZZKTsKKwl3ci5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3Iucm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisJd3IucXBfaGFuZGxlID0gcXAtPmFkYXB0ZXJfaGFuZGxlOworCXdyLm9yZCA9IGNwdV90b19iZTMyKG9yZCk7CisJd3IuaXJkID0gY3B1X3RvX2JlMzIoaXJkKTsKKwl3ci5zcV9kZXB0aCA9IGNwdV90b19iZTMyKEMyX1FQX05PX0FUVFJfQ0hBTkdFKTsKKwl3ci5ycV9kZXB0aCA9IGNwdV90b19iZTMyKEMyX1FQX05PX0FUVFJfQ0hBTkdFKTsKKwl3ci5uZXh0X3FwX3N0YXRlID0gY3B1X3RvX2JlMzIoQzJfUVBfTk9fQVRUUl9DSEFOR0UpOworCisJLyogcmVmZXJlbmNlIHRoZSByZXF1ZXN0IHN0cnVjdCAqLworCXZxX3JlcV9nZXQoYzJkZXYsIHZxX3JlcSk7CisKKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAodW5pb24gYzJ3ciAqKSAmIHdyKTsKKwlpZiAoZXJyKSB7CisJCXZxX3JlcV9wdXQoYzJkZXYsIHZxX3JlcSk7CisJCWdvdG8gYmFpbDA7CisJfQorCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMDsKKworCXJlcGx5ID0gKHN0cnVjdCBjMndyX3FwX21vZGlmeV9yZXAgKikgKHVuc2lnbmVkIGxvbmcpCisJCXZxX3JlcS0+cmVwbHlfbXNnOworCWlmICghcmVwbHkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwllcnIgPSBjMl9lcnJubyhyZXBseSk7CisJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsIHJlcGx5KTsKKyAgICAgIGJhaWwwOgorCXZxX3JlcV9mcmVlKGMyZGV2LCB2cV9yZXEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZGVzdHJveV9xcChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3FwICpxcCkKK3sKKwlzdHJ1Y3QgYzJfdnFfcmVxICp2cV9yZXE7CisJc3RydWN0IGMyd3JfcXBfZGVzdHJveV9yZXEgd3I7CisJc3RydWN0IGMyd3JfcXBfZGVzdHJveV9yZXAgKnJlcGx5OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVycjsKKworCS8qCisJICogQWxsb2NhdGUgYSB2ZXJiIHJlcXVlc3QgbWVzc2FnZQorCSAqLworCXZxX3JlcSA9IHZxX3JlcV9hbGxvYyhjMmRldik7CisJaWYgKCF2cV9yZXEpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBXUgorCSAqLworCWMyX3dyX3NldF9pZCgmd3IsIENDV1JfUVBfREVTVFJPWSk7CisJd3IuaGRyLmNvbnRleHQgPSAodW5zaWduZWQgbG9uZykgdnFfcmVxOworCXdyLnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCXdyLnFwX2hhbmRsZSA9IHFwLT5hZGFwdGVyX2hhbmRsZTsKKworCS8qCisJICogcmVmZXJlbmNlIHRoZSByZXF1ZXN0IHN0cnVjdC4gIGRlcmVmZXJlbmNlZCBpbiB0aGUgaW50IGhhbmRsZXIuCisJICovCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+bG9jaywgZmxhZ3MpOworCWlmIChxcC0+Y21faWQgJiYgcXAtPnN0YXRlID09IElCX1FQU19SVFMpIHsKKwkJcHJfZGVidWcoImRlc3Ryb3lfcXA6IGdlbmVyYXRpbmcgQ0xPU0UgZXZlbnQgZm9yIFFQLS0+RVJSLCAiCisJCQkicXA9JXAsIGNtX2lkPSVwXG4iLHFwLHFwLT5jbV9pZCk7CisJCS8qIEdlbmVyYXRlIGFuIENMT1NFIGV2ZW50ICovCisJCXZxX3JlcS0+cXAgPSBxcDsKKwkJdnFfcmVxLT5jbV9pZCA9IHFwLT5jbV9pZDsKKwkJdnFfcmVxLT5ldmVudCA9IElXX0NNX0VWRU5UX0NMT1NFOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBTZW5kIFdSIHRvIGFkYXB0ZXIKKwkgKi8KKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAodW5pb24gYzJ3ciAqKSAmIHdyKTsKKwlpZiAoZXJyKSB7CisJCXZxX3JlcV9wdXQoYzJkZXYsIHZxX3JlcSk7CisJCWdvdG8gYmFpbDA7CisJfQorCisJLyoKKwkgKiBXYWl0IGZvciByZXBseSBmcm9tIGFkYXB0ZXIKKwkgKi8KKwllcnIgPSB2cV93YWl0X2Zvcl9yZXBseShjMmRldiwgdnFfcmVxKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gYmFpbDA7CisJfQorCisJLyoKKwkgKiBQcm9jZXNzIHJlcGx5CisJICovCisJcmVwbHkgPSAoc3RydWN0IGMyd3JfcXBfZGVzdHJveV9yZXAgKikgKHVuc2lnbmVkIGxvbmcpICh2cV9yZXEtPnJlcGx5X21zZyk7CisJaWYgKCFyZXBseSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwwOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+bG9jaywgZmxhZ3MpOworCWlmIChxcC0+Y21faWQpIHsKKwkJcXAtPmNtX2lkLT5yZW1fcmVmKHFwLT5jbV9pZCk7CisJCXFwLT5jbV9pZCA9IE5VTEw7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5sb2NrLCBmbGFncyk7CisKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworICAgICAgYmFpbDA6CisJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjMl9hbGxvY19xcG4oc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl9xcCAqcXApCit7CisJaW50IHJldDsKKworICAgICAgICBkbyB7CisJCXNwaW5fbG9ja19pcnEoJmMyZGV2LT5xcF90YWJsZS5sb2NrKTsKKwkJcmV0ID0gaWRyX2dldF9uZXdfYWJvdmUoJmMyZGV2LT5xcF90YWJsZS5pZHIsIHFwLAorCQkJCQljMmRldi0+cXBfdGFibGUubGFzdCsrLCAmcXAtPnFwbik7CisJCXNwaW5fdW5sb2NrX2lycSgmYzJkZXYtPnFwX3RhYmxlLmxvY2spOworICAgICAgICB9IHdoaWxlICgocmV0ID09IC1FQUdBSU4pICYmCisJIAkgaWRyX3ByZV9nZXQoJmMyZGV2LT5xcF90YWJsZS5pZHIsIEdGUF9LRVJORUwpKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBjMl9mcmVlX3FwbihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgaW50IHFwbikKK3sKKwlzcGluX2xvY2tfaXJxKCZjMmRldi0+cXBfdGFibGUubG9jayk7CisJaWRyX3JlbW92ZSgmYzJkZXYtPnFwX3RhYmxlLmlkciwgcXBuKTsKKwlzcGluX3VubG9ja19pcnEoJmMyZGV2LT5xcF90YWJsZS5sb2NrKTsKK30KKworc3RydWN0IGMyX3FwICpjMl9maW5kX3FwbihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgaW50IHFwbikKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjMl9xcCAqcXA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYzJkZXYtPnFwX3RhYmxlLmxvY2ssIGZsYWdzKTsKKwlxcCA9IGlkcl9maW5kKCZjMmRldi0+cXBfdGFibGUuaWRyLCBxcG4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmMyZGV2LT5xcF90YWJsZS5sb2NrLCBmbGFncyk7CisJcmV0dXJuIHFwOworfQorCitpbnQgYzJfYWxsb2NfcXAoc3RydWN0IGMyX2RldiAqYzJkZXYsCisJCXN0cnVjdCBjMl9wZCAqcGQsCisJCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2F0dHJzLCBzdHJ1Y3QgYzJfcXAgKnFwKQoreworCXN0cnVjdCBjMndyX3FwX2NyZWF0ZV9yZXEgd3I7CisJc3RydWN0IGMyd3JfcXBfY3JlYXRlX3JlcCAqcmVwbHk7CisJc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxOworCXN0cnVjdCBjMl9jcSAqc2VuZF9jcSA9IHRvX2MyY3EocXBfYXR0cnMtPnNlbmRfY3EpOworCXN0cnVjdCBjMl9jcSAqcmVjdl9jcSA9IHRvX2MyY3EocXBfYXR0cnMtPnJlY3ZfY3EpOworCXVuc2lnbmVkIGxvbmcgcGVlcl9wYTsKKwl1MzIgcV9zaXplLCBtc2dfc2l6ZSwgbW1hcF9zaXplOworCXZvaWQgX19pb21lbSAqbW1hcDsKKwlpbnQgZXJyOworCisJZXJyID0gYzJfYWxsb2NfcXBuKGMyZGV2LCBxcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlxcC0+aWJxcC5xcF9udW0gPSBxcC0+cXBuOworCXFwLT5pYnFwLnFwX3R5cGUgPSBJQl9RUFRfUkM7CisKKwkvKiBBbGxvY2F0ZSB0aGUgU1EgYW5kIFJRIHNoYXJlZCBwb2ludGVycyAqLworCXFwLT5zcV9tcS5zaGFyZWQgPSBjMl9hbGxvY19tcXNwKGMyZGV2LCBjMmRldi0+a2Vybl9tcXNwX3Bvb2wsCisJCQkJCSAmcXAtPnNxX21xLnNoYXJlZF9kbWEsIEdGUF9LRVJORUwpOworCWlmICghcXAtPnNxX21xLnNoYXJlZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwwOworCX0KKworCXFwLT5ycV9tcS5zaGFyZWQgPSBjMl9hbGxvY19tcXNwKGMyZGV2LCBjMmRldi0+a2Vybl9tcXNwX3Bvb2wsCisJCQkJCSAmcXAtPnJxX21xLnNoYXJlZF9kbWEsIEdGUF9LRVJORUwpOworCWlmICghcXAtPnJxX21xLnNoYXJlZCkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwxOworCX0KKworCS8qIEFsbG9jYXRlIHRoZSB2ZXJicyByZXF1ZXN0ICovCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAodnFfcmVxID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMjsKKwl9CisKKwkvKiBJbml0aWFsaXplIHRoZSB3b3JrIHJlcXVlc3QgKi8KKwltZW1zZXQoJndyLCAwLCBzaXplb2Yod3IpKTsKKwljMl93cl9zZXRfaWQoJndyLCBDQ1dSX1FQX0NSRUFURSk7CisJd3IuaGRyLmNvbnRleHQgPSAodW5zaWduZWQgbG9uZykgdnFfcmVxOworCXdyLnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCXdyLnNxX2NxX2hhbmRsZSA9IHNlbmRfY3EtPmFkYXB0ZXJfaGFuZGxlOworCXdyLnJxX2NxX2hhbmRsZSA9IHJlY3ZfY3EtPmFkYXB0ZXJfaGFuZGxlOworCXdyLnNxX2RlcHRoID0gY3B1X3RvX2JlMzIocXBfYXR0cnMtPmNhcC5tYXhfc2VuZF93ciArIDEpOworCXdyLnJxX2RlcHRoID0gY3B1X3RvX2JlMzIocXBfYXR0cnMtPmNhcC5tYXhfcmVjdl93ciArIDEpOworCXdyLnNycV9oYW5kbGUgPSAwOworCXdyLmZsYWdzID0gY3B1X3RvX2JlMzIoUVBfUkRNQV9SRUFEIHwgUVBfUkRNQV9XUklURSB8IFFQX01XX0JJTkQgfAorCQkJICAgICAgIFFQX1pFUk9fU1RBRyB8IFFQX1JETUFfUkVBRF9SRVNQT05TRSk7CisJd3Iuc2VuZF9zZ2xfZGVwdGggPSBjcHVfdG9fYmUzMihxcF9hdHRycy0+Y2FwLm1heF9zZW5kX3NnZSk7CisJd3IucmVjdl9zZ2xfZGVwdGggPSBjcHVfdG9fYmUzMihxcF9hdHRycy0+Y2FwLm1heF9yZWN2X3NnZSk7CisJd3IucmRtYV93cml0ZV9zZ2xfZGVwdGggPSBjcHVfdG9fYmUzMihxcF9hdHRycy0+Y2FwLm1heF9zZW5kX3NnZSk7CisJd3Iuc2hhcmVkX3NxX2h0ID0gY3B1X3RvX2JlNjQocXAtPnNxX21xLnNoYXJlZF9kbWEpOworCXdyLnNoYXJlZF9ycV9odCA9IGNwdV90b19iZTY0KHFwLT5ycV9tcS5zaGFyZWRfZG1hKTsKKwl3ci5vcmQgPSBjcHVfdG9fYmUzMihDMl9NQVhfT1JEX1BFUl9RUCk7CisJd3IuaXJkID0gY3B1X3RvX2JlMzIoQzJfTUFYX0lSRF9QRVJfUVApOworCXdyLnBkX2lkID0gcGQtPnBkX2lkOworCXdyLnVzZXJfY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSBxcDsKKworCXZxX3JlcV9nZXQoYzJkZXYsIHZxX3JlcSk7CisKKwkvKiBTZW5kIHRoZSBXUiB0byB0aGUgYWRhcHRlciAqLworCWVyciA9IHZxX3NlbmRfd3IoYzJkZXYsICh1bmlvbiBjMndyICopICYgd3IpOworCWlmIChlcnIpIHsKKwkJdnFfcmVxX3B1dChjMmRldiwgdnFfcmVxKTsKKwkJZ290byBiYWlsMzsKKwl9CisKKwkvKiBXYWl0IGZvciB0aGUgdmVyYiByZXBseSAgKi8KKwllcnIgPSB2cV93YWl0X2Zvcl9yZXBseShjMmRldiwgdnFfcmVxKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gYmFpbDM7CisJfQorCisJLyogUHJvY2VzcyB0aGUgcmVwbHkgKi8KKwlyZXBseSA9IChzdHJ1Y3QgYzJ3cl9xcF9jcmVhdGVfcmVwICopICh1bnNpZ25lZCBsb25nKSAodnFfcmVxLT5yZXBseV9tc2cpOworCWlmICghcmVwbHkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMzsKKwl9CisKKwlpZiAoKGVyciA9IGMyX3dyX2dldF9yZXN1bHQocmVwbHkpKSAhPSAwKSB7CisJCWdvdG8gYmFpbDQ7CisJfQorCisJLyogRmlsbCBpbiB0aGUga2VybmVsIFFQIHN0cnVjdCAqLworCWF0b21pY19zZXQoJnFwLT5yZWZjb3VudCwgMSk7CisJcXAtPmFkYXB0ZXJfaGFuZGxlID0gcmVwbHktPnFwX2hhbmRsZTsKKwlxcC0+c3RhdGUgPSBJQl9RUFNfUkVTRVQ7CisJcXAtPnNlbmRfc2dsX2RlcHRoID0gcXBfYXR0cnMtPmNhcC5tYXhfc2VuZF9zZ2U7CisJcXAtPnJkbWFfd3JpdGVfc2dsX2RlcHRoID0gcXBfYXR0cnMtPmNhcC5tYXhfc2VuZF9zZ2U7CisJcXAtPnJlY3Zfc2dsX2RlcHRoID0gcXBfYXR0cnMtPmNhcC5tYXhfcmVjdl9zZ2U7CisKKwkvKiBJbml0aWFsaXplIHRoZSBTUSBNUSAqLworCXFfc2l6ZSA9IGJlMzJfdG9fY3B1KHJlcGx5LT5zcV9kZXB0aCk7CisJbXNnX3NpemUgPSBiZTMyX3RvX2NwdShyZXBseS0+c3FfbXNnX3NpemUpOworCXBlZXJfcGEgPSBjMmRldi0+cGEgKyBiZTMyX3RvX2NwdShyZXBseS0+c3FfbXFfc3RhcnQpOworCW1tYXBfc2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBjMl9tcV9zaGFyZWQpICsgbXNnX3NpemUgKiBxX3NpemUpOworCW1tYXAgPSBpb3JlbWFwX25vY2FjaGUocGVlcl9wYSwgbW1hcF9zaXplKTsKKwlpZiAoIW1tYXApIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsNTsKKwl9CisKKwljMl9tcV9yZXFfaW5pdCgmcXAtPnNxX21xLAorCQkgICAgICAgYmUzMl90b19jcHUocmVwbHktPnNxX21xX2luZGV4KSwKKwkJICAgICAgIHFfc2l6ZSwKKwkJICAgICAgIG1zZ19zaXplLAorCQkgICAgICAgbW1hcCArIHNpemVvZihzdHJ1Y3QgYzJfbXFfc2hhcmVkKSwJLyogcG9vbCBzdGFydCAqLworCQkgICAgICAgbW1hcCwJCQkJLyogcGVlciAqLworCQkgICAgICAgQzJfTVFfQURBUFRFUl9UQVJHRVQpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgUlEgbXEgKi8KKwlxX3NpemUgPSBiZTMyX3RvX2NwdShyZXBseS0+cnFfZGVwdGgpOworCW1zZ19zaXplID0gYmUzMl90b19jcHUocmVwbHktPnJxX21zZ19zaXplKTsKKwlwZWVyX3BhID0gYzJkZXYtPnBhICsgYmUzMl90b19jcHUocmVwbHktPnJxX21xX3N0YXJ0KTsKKwltbWFwX3NpemUgPSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3QgYzJfbXFfc2hhcmVkKSArIG1zZ19zaXplICogcV9zaXplKTsKKwltbWFwID0gaW9yZW1hcF9ub2NhY2hlKHBlZXJfcGEsIG1tYXBfc2l6ZSk7CisJaWYgKCFtbWFwKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDY7CisJfQorCisJYzJfbXFfcmVxX2luaXQoJnFwLT5ycV9tcSwKKwkJICAgICAgIGJlMzJfdG9fY3B1KHJlcGx5LT5ycV9tcV9pbmRleCksCisJCSAgICAgICBxX3NpemUsCisJCSAgICAgICBtc2dfc2l6ZSwKKwkJICAgICAgIG1tYXAgKyBzaXplb2Yoc3RydWN0IGMyX21xX3NoYXJlZCksCS8qIHBvb2wgc3RhcnQgKi8KKwkJICAgICAgIG1tYXAsCQkJCS8qIHBlZXIgKi8KKwkJICAgICAgIEMyX01RX0FEQVBURVJfVEFSR0VUKTsKKworCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CisKKwlyZXR1cm4gMDsKKworICAgICAgYmFpbDY6CisJaW91bm1hcChxcC0+c3FfbXEucGVlcik7CisgICAgICBiYWlsNToKKwlkZXN0cm95X3FwKGMyZGV2LCBxcCk7CisgICAgICBiYWlsNDoKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworICAgICAgYmFpbDM6CisJdnFfcmVxX2ZyZWUoYzJkZXYsIHZxX3JlcSk7CisgICAgICBiYWlsMjoKKwljMl9mcmVlX21xc3AocXAtPnJxX21xLnNoYXJlZCk7CisgICAgICBiYWlsMToKKwljMl9mcmVlX21xc3AocXAtPnNxX21xLnNoYXJlZCk7CisgICAgICBiYWlsMDoKKwljMl9mcmVlX3FwbihjMmRldiwgcXAtPnFwbik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBjMl9mcmVlX3FwKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfcXAgKnFwKQoreworCXN0cnVjdCBjMl9jcSAqc2VuZF9jcTsKKwlzdHJ1Y3QgYzJfY3EgKnJlY3ZfY3E7CisKKwlzZW5kX2NxID0gdG9fYzJjcShxcC0+aWJxcC5zZW5kX2NxKTsKKwlyZWN2X2NxID0gdG9fYzJjcShxcC0+aWJxcC5yZWN2X2NxKTsKKworCS8qCisJICogTG9jayBDUXMgaGVyZSwgc28gdGhhdCBDUSBwb2xsaW5nIGNvZGUgY2FuIGRvIFFQIGxvb2t1cAorCSAqIHdpdGhvdXQgdGFraW5nIGEgbG9jay4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKKwlpZiAoc2VuZF9jcSAhPSByZWN2X2NxKQorCQlzcGluX2xvY2soJnJlY3ZfY3EtPmxvY2spOworCisJYzJfZnJlZV9xcG4oYzJkZXYsIHFwLT5xcG4pOworCisJaWYgKHNlbmRfY3EgIT0gcmVjdl9jcSkKKwkJc3Bpbl91bmxvY2soJnJlY3ZfY3EtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisKKwkvKgorCSAqIERlc3RvcnkgcXAgaW4gdGhlIHJuaWMuLi4KKwkgKi8KKwlkZXN0cm95X3FwKGMyZGV2LCBxcCk7CisKKwkvKgorCSAqIE1hcmsgYW55IHVucmVhcGVkIENRRXMgYXMgbnVsbCBhbmQgdm9pZC4KKwkgKi8KKwljMl9jcV9jbGVhbihjMmRldiwgcXAsIHNlbmRfY3EtPmNxbik7CisJaWYgKHNlbmRfY3EgIT0gcmVjdl9jcSkKKwkJYzJfY3FfY2xlYW4oYzJkZXYsIHFwLCByZWN2X2NxLT5jcW4pOworCS8qCisJICogVW5tYXAgdGhlIE1RcyBhbmQgcmV0dXJuIHRoZSBzaGFyZWQgcG9pbnRlcnMKKwkgKiB0byB0aGUgbWVzc2FnZSBwb29sLgorCSAqLworCWlvdW5tYXAocXAtPnNxX21xLnBlZXIpOworCWlvdW5tYXAocXAtPnJxX21xLnBlZXIpOworCWMyX2ZyZWVfbXFzcChxcC0+c3FfbXEuc2hhcmVkKTsKKwljMl9mcmVlX21xc3AocXAtPnJxX21xLnNoYXJlZCk7CisKKwlhdG9taWNfZGVjKCZxcC0+cmVmY291bnQpOworCXdhaXRfZXZlbnQocXAtPndhaXQsICFhdG9taWNfcmVhZCgmcXAtPnJlZmNvdW50KSk7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogbW92ZV9zZ2wKKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIE1vdmUgYW4gU0dMIGZyb20gdGhlIHVzZXIncyB3b3JrIHJlcXVlc3Qgc3RydWN0IGludG8gYSBDQ0lMIFdvcmsgUmVxdWVzdAorICogbWVzc2FnZSwgc3dhcHBpbmcgdG8gV1IgYnl0ZSBvcmRlciBhbmQgZW5zdXJlIHRoZSB0b3RhbCBsZW5ndGggZG9lc24ndAorICogb3ZlcmZsb3cuCisgKgorICogSU46CisgKiBkc3QJCS0gcHRyIHRvIENDSUwgV29yayBSZXF1ZXN0IG1lc3NhZ2UgU0dMIG1lbW9yeS4KKyAqIHNyYwkJLSBwdHIgdG8gdGhlIGNvbnN1bWVycyBTR0wgbWVtb3J5LgorICoKKyAqIE9VVDogbm9uZQorICoKKyAqIFJldHVybjoKKyAqIENDSUwgc3RhdHVzIGNvZGVzLgorICovCitzdGF0aWMgaW50Cittb3ZlX3NnbChzdHJ1Y3QgYzJfZGF0YV9hZGRyICogZHN0LCBzdHJ1Y3QgaWJfc2dlICpzcmMsIGludCBjb3VudCwgdTMyICogcF9sZW4sCisJIHU4ICogYWN0dWFsX2NvdW50KQoreworCXUzMiB0b3QgPSAwOwkJLyogcnVubmluZyB0b3RhbCAqLworCXU4IGFjb3VudCA9IDA7CQkvKiBydW5uaW5nIHRvdGFsIG5vbi0wIGxlbiBzZ2UncyAqLworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQkvKgorCQkgKiBJZiB0aGUgYWRkaXRpb24gb2YgdGhpcyBTR0UgY2F1c2VzIHRoZQorCQkgKiB0b3RhbCBTR0wgbGVuZ3RoIHRvIGV4Y2VlZCAyXjMyLTEsIHRoZW4KKwkJICogZmFpbC1uLWJhaWwuCisJCSAqCisJCSAqIElmIHRoZSBjdXJyZW50IHRvdGFsIHBsdXMgdGhlIG5leHQgZWxlbWVudCBsZW5ndGgKKwkJICogd3JhcHMsIHRoZW4gaXQgd2lsbCBnbyBuZWdhdGl2ZSBhbmQgYmUgbGVzcyB0aGFuIHRoZQorCQkgKiBjdXJyZW50IHRvdGFsLi4uCisJCSAqLworCQlpZiAoKHRvdCArIHNyYy0+bGVuZ3RoKSA8IHRvdCkgeworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJLyoKKwkJICogQnVnOiAxNDU2IChhcyB3ZWxsIGFzIDE0OTggJiAxNjQzKQorCQkgKiBTa2lwIG92ZXIgYW55IHNnZSdzIHN1cHBsaWVkIHdpdGggbGVuPTAKKwkJICovCisJCWlmIChzcmMtPmxlbmd0aCkgeworCQkJdG90ICs9IHNyYy0+bGVuZ3RoOworCQkJZHN0LT5zdGFnID0gY3B1X3RvX2JlMzIoc3JjLT5sa2V5KTsKKwkJCWRzdC0+dG8gPSBjcHVfdG9fYmU2NChzcmMtPmFkZHIpOworCQkJZHN0LT5sZW5ndGggPSBjcHVfdG9fYmUzMihzcmMtPmxlbmd0aCk7CisJCQlkc3QrKzsKKwkJCWFjb3VudCsrOworCQl9CisJCXNyYysrOworCQljb3VudC0tOworCX0KKworCWlmIChhY291bnQgPT0gMCkgeworCQkvKgorCQkgKiBCdWc6IDE0NzYgKGFzIHdlbGwgYXMgMTQ5OCwgMTQ1NiBhbmQgMTY0MykKKwkJICogU2V0dXAgdGhlIFNHTCBpbiB0aGUgV1IgdG8gbWFrZSBpdCBlYXNpZXIgZm9yIHRoZSBSTklDLgorCQkgKiBUaGlzIHdheSwgdGhlIEZXIGRvZXNuJ3QgaGF2ZSB0byBkZWFsIHdpdGggc3BlY2lhbCBjYXNlcy4KKwkJICogU2V0dGluZyBsZW5ndGg9MCBzaG91bGQgYmUgc3VmZmljaWVudC4KKwkJICovCisJCWRzdC0+c3RhZyA9IDA7CisJCWRzdC0+dG8gPSAwOworCQlkc3QtPmxlbmd0aCA9IDA7CisJfQorCisJKnBfbGVuID0gdG90OworCSphY3R1YWxfY291bnQgPSBhY291bnQ7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGdW5jdGlvbjogYzJfYWN0aXZpdHkgKHByaXZhdGUgZnVuY3Rpb24pCisgKgorICogRGVzY3JpcHRpb246CisgKiBQb3N0IGFuIG1xIGluZGV4IHRvIHRoZSBob3N0LT5hZGFwdGVyIGFjdGl2aXR5IGZpZm8uCisgKgorICogSU46CisgKiBjMmRldgktIHB0ciB0byBjMmRldiBzdHJ1Y3R1cmUKKyAqIG1xX2luZGV4CS0gbXEgaW5kZXggdG8gcG9zdAorICogc2hhcmVkCS0gdmFsdWUgbW9zdCByZWNlbnRseSB3cml0dGVuIHRvIHNoYXJlZAorICoKKyAqIE9VVDoKKyAqCisgKiBSZXR1cm46CisgKiBub25lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBjMl9hY3Rpdml0eShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIG1xX2luZGV4LCB1MTYgc2hhcmVkKQoreworCS8qCisJICogRmlyc3QgcmVhZCB0aGUgcmVnaXN0ZXIgdG8gc2VlIGlmIHRoZSBGSUZPIGlzIGZ1bGwsIGFuZCBpZiBzbywKKwkgKiBzcGluIHVudGlsIGl0J3Mgbm90LiAgVGhpcyBpc24ndCBwZXJmZWN0IC0tIHRoZXJlIGlzIG5vCisJICogc3luY2hyb25pemF0aW9uIGFtb25nIHRoZSBjbGllbnRzIG9mIHRoZSByZWdpc3RlciwgYnV0IGluCisJICogcHJhY3RpY2UgaXQgcHJldmVudHMgbXVsdGlwbGUgQ1BVIGZyb20gaGFtbWVyaW5nIHRoZSBidXMKKwkgKiB3aXRoIFBDSSBSRVRSWS4gTm90ZSB0aGF0IHdoZW4gdGhpcyBkb2VzIGhhcHBlbiwgdGhlIGNhcmQKKwkgKiBjYW5ub3QgZ2V0IG9uIHRoZSBidXMgYW5kIHRoZSBjYXJkIGFuZCBzeXN0ZW0gaGFuZyBpbiBhCisJICogZGVhZGxvY2sgLS0gdGh1cyB0aGUgbmVlZCBmb3IgdGhpcyBjb2RlLiBbVE9UXQorCSAqLworCXdoaWxlIChyZWFkbChjMmRldi0+cmVncyArIFBDSV9CQVIwX0FEQVBURVJfSElOVCkgJiAweDgwMDAwMDAwKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJc2NoZWR1bGVfdGltZW91dCgwKTsKKwl9CisKKwlfX3Jhd193cml0ZWwoQzJfSElOVF9NQUtFKG1xX2luZGV4LCBzaGFyZWQpLAorCQkgICAgIGMyZGV2LT5yZWdzICsgUENJX0JBUjBfQURBUFRFUl9ISU5UKTsKK30KKworLyoKKyAqIEZ1bmN0aW9uOiBxcF93cl9wb3N0CisgKgorICogRGVzY3JpcHRpb246CisgKiBUaGlzIGluLWxpbmUgZnVuY3Rpb24gYWxsb2NhdGVzIGEgTVEgbXNnLCB0aGVuIG1vdmVzIHRoZSBob3N0LWNvcHkgb2YKKyAqIHRoZSBjb21wbGV0ZWQgV1IgaW50byBtc2cuICBUaGVuIGl0IHBvc3RzIHRoZSBtZXNzYWdlLgorICoKKyAqIElOOgorICogcQkJLSBwdHIgdG8gdXNlciBNUS4KKyAqIHdyCQktIHB0ciB0byBob3N0LWNvcHkgb2YgdGhlIFdSLgorICogcXAJCS0gcHRyIHRvIHVzZXIgcXAKKyAqIHNpemUJCS0gTnVtYmVyIG9mIGJ5dGVzIHRvIHBvc3QuICBBc3N1bWVkIHRvIGJlIGRpdmlzaWJsZSBieSA0LgorICoKKyAqIE9VVDogbm9uZQorICoKKyAqIFJldHVybjoKKyAqIENDSUwgc3RhdHVzIGNvZGVzLgorICovCitzdGF0aWMgaW50IHFwX3dyX3Bvc3Qoc3RydWN0IGMyX21xICpxLCB1bmlvbiBjMndyICogd3IsIHN0cnVjdCBjMl9xcCAqcXAsIHUzMiBzaXplKQoreworCXVuaW9uIGMyd3IgKm1zZzsKKworCW1zZyA9IGMyX21xX2FsbG9jKHEpOworCWlmIChtc2cgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjaWZkZWYgQ0NNU0dNQUdJQworCSgoYzJ3cl9oZHJfdCAqKSB3ciktPm1hZ2ljID0gY3B1X3RvX2JlMzIoQ0NXUl9NQUdJQyk7CisjZW5kaWYKKworCS8qCisJICogU2luY2UgYWxsIGhlYWRlciBmaWVsZHMgaW4gdGhlIFdSIGFyZSB0aGUgc2FtZSBhcyB0aGUKKwkgKiBDUUUsIHNldCB0aGUgZm9sbG93aW5nIHNvIHRoZSBhZGFwdGVyIG5lZWQgbm90LgorCSAqLworCWMyX3dyX3NldF9yZXN1bHQod3IsIENDRVJSX1BFTkRJTkcpOworCisJLyoKKwkgKiBDb3B5IHRoZSB3ciBkb3duIHRvIHRoZSBhZGFwdGVyCisJICovCisJbWVtY3B5KCh2b2lkICopIG1zZywgKHZvaWQgKikgd3IsIHNpemUpOworCisJYzJfbXFfcHJvZHVjZShxKTsKKwlyZXR1cm4gMDsKK30KKworCitpbnQgYzJfcG9zdF9zZW5kKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3NlbmRfd3IgKmliX3dyLAorCQkgc3RydWN0IGliX3NlbmRfd3IgKipiYWRfd3IpCit7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSB0b19jMmRldihpYnFwLT5kZXZpY2UpOworCXN0cnVjdCBjMl9xcCAqcXAgPSB0b19jMnFwKGlicXApOworCXVuaW9uIGMyd3Igd3I7CisJaW50IGVyciA9IDA7CisKKwl1MzIgZmxhZ3M7CisJdTMyIHRvdF9sZW47CisJdTggYWN0dWFsX3NnZV9jb3VudDsKKwl1MzIgbXNnX3NpemU7CisKKwlpZiAocXAtPnN0YXRlID4gSUJfUVBTX1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl3aGlsZSAoaWJfd3IpIHsKKworCQlmbGFncyA9IDA7CisJCXdyLnNxd3Iuc3FfaGRyLnVzZXJfaGRyLmhkci5jb250ZXh0ID0gaWJfd3ItPndyX2lkOworCQlpZiAoaWJfd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NJR05BTEVEKSB7CisJCQlmbGFncyB8PSBTUV9TSUdOQUxFRDsKKwkJfQorCisJCXN3aXRjaCAoaWJfd3ItPm9wY29kZSkgeworCQljYXNlIElCX1dSX1NFTkQ6CisJCQlpZiAoaWJfd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX1NPTElDSVRFRCkgeworCQkJCWMyX3dyX3NldF9pZCgmd3IsIEMyX1dSX1RZUEVfU0VORF9TRSk7CisJCQkJbXNnX3NpemUgPSBzaXplb2Yoc3RydWN0IGMyd3Jfc2VuZF9yZXEpOworCQkJfSBlbHNlIHsKKwkJCQljMl93cl9zZXRfaWQoJndyLCBDMl9XUl9UWVBFX1NFTkQpOworCQkJCW1zZ19zaXplID0gc2l6ZW9mKHN0cnVjdCBjMndyX3NlbmRfcmVxKTsKKwkJCX0KKworCQkJd3Iuc3F3ci5zZW5kLnJlbW90ZV9zdGFnID0gMDsKKwkJCW1zZ19zaXplICs9IHNpemVvZihzdHJ1Y3QgYzJfZGF0YV9hZGRyKSAqIGliX3dyLT5udW1fc2dlOworCQkJaWYgKGliX3dyLT5udW1fc2dlID4gcXAtPnNlbmRfc2dsX2RlcHRoKSB7CisJCQkJZXJyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpYl93ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfRkVOQ0UpIHsKKwkJCQlmbGFncyB8PSBTUV9SRUFEX0ZFTkNFOworCQkJfQorCQkJZXJyID0gbW92ZV9zZ2woKHN0cnVjdCBjMl9kYXRhX2FkZHIgKikgJiAod3Iuc3F3ci5zZW5kLmRhdGEpLAorCQkJCSAgICAgICBpYl93ci0+c2dfbGlzdCwKKwkJCQkgICAgICAgaWJfd3ItPm51bV9zZ2UsCisJCQkJICAgICAgICZ0b3RfbGVuLCAmYWN0dWFsX3NnZV9jb3VudCk7CisJCQl3ci5zcXdyLnNlbmQuc2dlX2xlbiA9IGNwdV90b19iZTMyKHRvdF9sZW4pOworCQkJYzJfd3Jfc2V0X3NnZV9jb3VudCgmd3IsIGFjdHVhbF9zZ2VfY291bnQpOworCQkJYnJlYWs7CisJCWNhc2UgSUJfV1JfUkRNQV9XUklURToKKwkJCWMyX3dyX3NldF9pZCgmd3IsIEMyX1dSX1RZUEVfUkRNQV9XUklURSk7CisJCQltc2dfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYzJ3cl9yZG1hX3dyaXRlX3JlcSkgKworCQkJICAgIChzaXplb2Yoc3RydWN0IGMyX2RhdGFfYWRkcikgKiBpYl93ci0+bnVtX3NnZSk7CisJCQlpZiAoaWJfd3ItPm51bV9zZ2UgPiBxcC0+cmRtYV93cml0ZV9zZ2xfZGVwdGgpIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGliX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9GRU5DRSkgeworCQkJCWZsYWdzIHw9IFNRX1JFQURfRkVOQ0U7CisJCQl9CisJCQl3ci5zcXdyLnJkbWFfd3JpdGUucmVtb3RlX3N0YWcgPQorCQkJICAgIGNwdV90b19iZTMyKGliX3dyLT53ci5yZG1hLnJrZXkpOworCQkJd3Iuc3F3ci5yZG1hX3dyaXRlLnJlbW90ZV90byA9CisJCQkgICAgY3B1X3RvX2JlNjQoaWJfd3ItPndyLnJkbWEucmVtb3RlX2FkZHIpOworCQkJZXJyID0gbW92ZV9zZ2woKHN0cnVjdCBjMl9kYXRhX2FkZHIgKikKKwkJCQkgICAgICAgJiAod3Iuc3F3ci5yZG1hX3dyaXRlLmRhdGEpLAorCQkJCSAgICAgICBpYl93ci0+c2dfbGlzdCwKKwkJCQkgICAgICAgaWJfd3ItPm51bV9zZ2UsCisJCQkJICAgICAgICZ0b3RfbGVuLCAmYWN0dWFsX3NnZV9jb3VudCk7CisJCQl3ci5zcXdyLnJkbWFfd3JpdGUuc2dlX2xlbiA9IGNwdV90b19iZTMyKHRvdF9sZW4pOworCQkJYzJfd3Jfc2V0X3NnZV9jb3VudCgmd3IsIGFjdHVhbF9zZ2VfY291bnQpOworCQkJYnJlYWs7CisJCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgorCQkJYzJfd3Jfc2V0X2lkKCZ3ciwgQzJfV1JfVFlQRV9SRE1BX1JFQUQpOworCQkJbXNnX3NpemUgPSBzaXplb2Yoc3RydWN0IGMyd3JfcmRtYV9yZWFkX3JlcSk7CisKKwkJCS8qIElXYXJwIG9ubHkgc3VwcG90cyAxIHNnZSBmb3IgUkRNQSByZWFkcyAqLworCQkJaWYgKGliX3dyLT5udW1fc2dlID4gMSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qCisJCQkgKiBNb3ZlIHRoZSBsb2NhbCBhbmQgcmVtb3RlIHN0YWcvdG8vbGVuIGludG8gdGhlIFdSLgorCQkJICovCisJCQl3ci5zcXdyLnJkbWFfcmVhZC5sb2NhbF9zdGFnID0KKwkJCSAgICBjcHVfdG9fYmUzMihpYl93ci0+c2dfbGlzdC0+bGtleSk7CisJCQl3ci5zcXdyLnJkbWFfcmVhZC5sb2NhbF90byA9CisJCQkgICAgY3B1X3RvX2JlNjQoaWJfd3ItPnNnX2xpc3QtPmFkZHIpOworCQkJd3Iuc3F3ci5yZG1hX3JlYWQucmVtb3RlX3N0YWcgPQorCQkJICAgIGNwdV90b19iZTMyKGliX3dyLT53ci5yZG1hLnJrZXkpOworCQkJd3Iuc3F3ci5yZG1hX3JlYWQucmVtb3RlX3RvID0KKwkJCSAgICBjcHVfdG9fYmU2NChpYl93ci0+d3IucmRtYS5yZW1vdGVfYWRkcik7CisJCQl3ci5zcXdyLnJkbWFfcmVhZC5sZW5ndGggPQorCQkJICAgIGNwdV90b19iZTMyKGliX3dyLT5zZ19saXN0LT5sZW5ndGgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBlcnJvciAqLworCQkJbXNnX3NpemUgPSAwOworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogSWYgd2UgaGFkIGFuIGVycm9yIG9uIHRoZSBsYXN0IHdyIGJ1aWxkLCB0aGVuCisJCSAqIGJyZWFrIG91dC4gIFBvc3NpYmxlIGVycm9ycyBpbmNsdWRlIGJvZ3VzIFdSCisJCSAqIHR5cGUsIGFuZCBhIGJvZ3VzIFNHTCBsZW5ndGguLi4KKwkJICovCisJCWlmIChlcnIpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogU3RvcmUgZmxhZ3MKKwkJICovCisJCWMyX3dyX3NldF9mbGFncygmd3IsIGZsYWdzKTsKKworCQkvKgorCQkgKiBQb3N0IHRoZSBwdXBweSEKKwkJICovCisJCWVyciA9IHFwX3dyX3Bvc3QoJnFwLT5zcV9tcSwgJndyLCBxcCwgbXNnX3NpemUpOworCQlpZiAoZXJyKSB7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIEVucXVldWUgbXEgaW5kZXggdG8gYWN0aXZpdHkgRklGTy4KKwkJICovCisJCWMyX2FjdGl2aXR5KGMyZGV2LCBxcC0+c3FfbXEuaW5kZXgsIHFwLT5zcV9tcS5oaW50X2NvdW50KTsKKworCQlpYl93ciA9IGliX3dyLT5uZXh0OworCX0KKworCWlmIChlcnIpCisJCSpiYWRfd3IgPSBpYl93cjsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYzJfcG9zdF9yZWNlaXZlKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3JlY3Zfd3IgKmliX3dyLAorCQkgICAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfd3IpCit7CisJc3RydWN0IGMyX2RldiAqYzJkZXYgPSB0b19jMmRldihpYnFwLT5kZXZpY2UpOworCXN0cnVjdCBjMl9xcCAqcXAgPSB0b19jMnFwKGlicXApOworCXVuaW9uIGMyd3Igd3I7CisJaW50IGVyciA9IDA7CisKKwlpZiAocXAtPnN0YXRlID4gSUJfUVBTX1JUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFRyeSBhbmQgcG9zdCBlYWNoIHdvcmsgcmVxdWVzdAorCSAqLworCXdoaWxlIChpYl93cikgeworCQl1MzIgdG90X2xlbjsKKwkJdTggYWN0dWFsX3NnZV9jb3VudDsKKworCQlpZiAoaWJfd3ItPm51bV9zZ2UgPiBxcC0+cmVjdl9zZ2xfZGVwdGgpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qCisJCSAqIENyZWF0ZSBsb2NhbCBob3N0LWNvcHkgb2YgdGhlIFdSCisJCSAqLworCQl3ci5ycXdyLnJxX2hkci51c2VyX2hkci5oZHIuY29udGV4dCA9IGliX3dyLT53cl9pZDsKKwkJYzJfd3Jfc2V0X2lkKCZ3ciwgQ0NXUl9SRUNWKTsKKwkJYzJfd3Jfc2V0X2ZsYWdzKCZ3ciwgMCk7CisKKwkJLyogc2dlX2NvdW50IGlzIGxpbWl0ZWQgdG8gZWlnaHQgYml0cy4gKi8KKwkJQlVHX09OKGliX3dyLT5udW1fc2dlID49IDI1Nik7CisJCWVyciA9IG1vdmVfc2dsKChzdHJ1Y3QgYzJfZGF0YV9hZGRyICopICYgKHdyLnJxd3IuZGF0YSksCisJCQkgICAgICAgaWJfd3ItPnNnX2xpc3QsCisJCQkgICAgICAgaWJfd3ItPm51bV9zZ2UsICZ0b3RfbGVuLCAmYWN0dWFsX3NnZV9jb3VudCk7CisJCWMyX3dyX3NldF9zZ2VfY291bnQoJndyLCBhY3R1YWxfc2dlX2NvdW50KTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYWQgYW4gZXJyb3Igb24gdGhlIGxhc3Qgd3IgYnVpbGQsIHRoZW4KKwkJICogYnJlYWsgb3V0LiAgUG9zc2libGUgZXJyb3JzIGluY2x1ZGUgYm9ndXMgV1IKKwkJICogdHlwZSwgYW5kIGEgYm9ndXMgU0dMIGxlbmd0aC4uLgorCQkgKi8KKwkJaWYgKGVycikgeworCQkJYnJlYWs7CisJCX0KKworCQllcnIgPSBxcF93cl9wb3N0KCZxcC0+cnFfbXEsICZ3ciwgcXAsIHFwLT5ycV9tcS5tc2dfc2l6ZSk7CisJCWlmIChlcnIpIHsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogRW5xdWV1ZSBtcSBpbmRleCB0byBhY3Rpdml0eSBGSUZPCisJCSAqLworCQljMl9hY3Rpdml0eShjMmRldiwgcXAtPnJxX21xLmluZGV4LCBxcC0+cnFfbXEuaGludF9jb3VudCk7CisKKwkJaWJfd3IgPSBpYl93ci0+bmV4dDsKKwl9CisKKwlpZiAoZXJyKQorCQkqYmFkX3dyID0gaWJfd3I7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBfX2RldmluaXQgYzJfaW5pdF9xcF90YWJsZShzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwlzcGluX2xvY2tfaW5pdCgmYzJkZXYtPnFwX3RhYmxlLmxvY2spOworCWlkcl9pbml0KCZjMmRldi0+cXBfdGFibGUuaWRyKTsKK30KKwordm9pZCBfX2RldmV4aXQgYzJfY2xlYW51cF9xcF90YWJsZShzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwlpZHJfZGVzdHJveSgmYzJkZXYtPnFwX3RhYmxlLmlkcik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcm5pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzNjOWQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYwpAQCAtMCwwICsxLDY2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9yb3V0ZS5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3NtaS5oPgorI2luY2x1ZGUgImMyLmgiCisjaW5jbHVkZSAiYzJfdnEuaCIKKworLyogRGV2aWNlIGNhcGFiaWxpdGllcyAqLworI2RlZmluZSBDMl9NSU5fUEFHRVNJWkUgIDEwMjQKKworI2RlZmluZSBDMl9NQVhfTVJTICAgICAgIDMyNzY4CisjZGVmaW5lIEMyX01BWF9RUFMgICAgICAgMTYwMDAKKyNkZWZpbmUgQzJfTUFYX1dRRV9TWiAgICAyNTYKKyNkZWZpbmUgQzJfTUFYX1FQX1dSICAgICAoKDEyOCoxMDI0KS9DMl9NQVhfV1FFX1NaKQorI2RlZmluZSBDMl9NQVhfU0dFUyAgICAgIDQKKyNkZWZpbmUgQzJfTUFYX1NHRV9SRCAgICAxCisjZGVmaW5lIEMyX01BWF9DUVMgICAgICAgMzI3NjgKKyNkZWZpbmUgQzJfTUFYX0NRRVMgICAgICA0MDk2CisjZGVmaW5lIEMyX01BWF9QRFMgICAgICAgMTYzODQKKworLyoKKyAqIFNlbmQgdGhlIGFkYXB0ZXIgSU5JVCBtZXNzYWdlIHRvIHRoZSBhbXNvMTEwMAorICovCitzdGF0aWMgaW50IGMyX2FkYXB0ZXJfaW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwlzdHJ1Y3QgYzJ3cl9pbml0X3JlcSB3cjsKKwlpbnQgZXJyOworCisJbWVtc2V0KCZ3ciwgMCwgc2l6ZW9mKHdyKSk7CisJYzJfd3Jfc2V0X2lkKCZ3ciwgQ0NXUl9JTklUKTsKKwl3ci5oZHIuY29udGV4dCA9IDA7CisJd3IuaGludF9jb3VudCA9IGNwdV90b19iZTY0KGMyZGV2LT5oaW50X2NvdW50X2RtYSk7CisJd3IucTBfaG9zdF9zaGFyZWQgPSBjcHVfdG9fYmU2NChjMmRldi0+cmVxX3ZxLnNoYXJlZF9kbWEpOworCXdyLnExX2hvc3Rfc2hhcmVkID0gY3B1X3RvX2JlNjQoYzJkZXYtPnJlcF92cS5zaGFyZWRfZG1hKTsKKwl3ci5xMV9ob3N0X21zZ19wb29sID0gY3B1X3RvX2JlNjQoYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CisJd3IucTJfaG9zdF9zaGFyZWQgPSBjcHVfdG9fYmU2NChjMmRldi0+YWVxLnNoYXJlZF9kbWEpOworCXdyLnEyX2hvc3RfbXNnX3Bvb2wgPSBjcHVfdG9fYmU2NChjMmRldi0+YWVxLmhvc3RfZG1hKTsKKworCS8qIFBvc3QgdGhlIGluaXQgbWVzc2FnZSAqLworCWVyciA9IHZxX3NlbmRfd3IoYzJkZXYsICh1bmlvbiBjMndyICopICYgd3IpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFNlbmQgdGhlIGFkYXB0ZXIgVEVSTSBtZXNzYWdlIHRvIHRoZSBhbXNvMTEwMAorICovCitzdGF0aWMgdm9pZCBjMl9hZGFwdGVyX3Rlcm0oc3RydWN0IGMyX2RldiAqYzJkZXYpCit7CisJc3RydWN0IGMyd3JfaW5pdF9yZXEgd3I7CisKKwltZW1zZXQoJndyLCAwLCBzaXplb2Yod3IpKTsKKwljMl93cl9zZXRfaWQoJndyLCBDQ1dSX1RFUk0pOworCXdyLmhkci5jb250ZXh0ID0gMDsKKworCS8qIFBvc3QgdGhlIGluaXQgbWVzc2FnZSAqLworCXZxX3NlbmRfd3IoYzJkZXYsICh1bmlvbiBjMndyICopICYgd3IpOworCWMyZGV2LT5pbml0ID0gMDsKKworCXJldHVybjsKK30KKworLyoKKyAqIFF1ZXJ5IHRoZSBhZGFwdGVyCisgKi8KK3N0YXRpYyBpbnQgYzJfcm5pY19xdWVyeShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGliX2RldmljZV9hdHRyICpwcm9wcykKK3sKKwlzdHJ1Y3QgYzJfdnFfcmVxICp2cV9yZXE7CisJc3RydWN0IGMyd3Jfcm5pY19xdWVyeV9yZXEgd3I7CisJc3RydWN0IGMyd3Jfcm5pY19xdWVyeV9yZXAgKnJlcGx5OworCWludCBlcnI7CisKKwl2cV9yZXEgPSB2cV9yZXFfYWxsb2MoYzJkZXYpOworCWlmICghdnFfcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWMyX3dyX3NldF9pZCgmd3IsIENDV1JfUk5JQ19RVUVSWSk7CisJd3IuaGRyLmNvbnRleHQgPSAodW5zaWduZWQgbG9uZykgdnFfcmVxOworCXdyLnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCWVyciA9IHZxX3NlbmRfd3IoYzJkZXYsICh1bmlvbiBjMndyICopICZ3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwxOworCX0KKworCWVyciA9IHZxX3dhaXRfZm9yX3JlcGx5KGMyZGV2LCB2cV9yZXEpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDE7CisKKwlyZXBseSA9CisJICAgIChzdHJ1Y3QgYzJ3cl9ybmljX3F1ZXJ5X3JlcCAqKSAodW5zaWduZWQgbG9uZykgKHZxX3JlcS0+cmVwbHlfbXNnKTsKKwlpZiAoIXJlcGx5KQorCQllcnIgPSAtRU5PTUVNOworCisJZXJyID0gYzJfZXJybm8ocmVwbHkpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDI7CisKKwlwcm9wcy0+ZndfdmVyID0KKwkJKCh1NjQpYmUzMl90b19jcHUocmVwbHktPmZ3X3Zlcl9tYWpvcikgPDwgMzIpIHwKKwkJKChiZTMyX3RvX2NwdShyZXBseS0+ZndfdmVyX21pbm9yKSAmJiAweEZGRkYpIDw8IDE2KSB8CisJCShiZTMyX3RvX2NwdShyZXBseS0+ZndfdmVyX3BhdGNoKSAmJiAweEZGRkYpOworCW1lbWNweSgmcHJvcHMtPnN5c19pbWFnZV9ndWlkLCBjMmRldi0+bmV0ZGV2LT5kZXZfYWRkciwgNik7CisJcHJvcHMtPm1heF9tcl9zaXplICAgICAgICAgPSAweEZGRkZGRkZGOworCXByb3BzLT5wYWdlX3NpemVfY2FwICAgICAgID0gfihDMl9NSU5fUEFHRVNJWkUtMSk7CisJcHJvcHMtPnZlbmRvcl9pZCAgICAgICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+dmVuZG9yX2lkKTsKKwlwcm9wcy0+dmVuZG9yX3BhcnRfaWQgICAgICA9IGJlMzJfdG9fY3B1KHJlcGx5LT5wYXJ0X251bWJlcik7CisJcHJvcHMtPmh3X3ZlciAgICAgICAgICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+aHdfdmVyc2lvbik7CisJcHJvcHMtPm1heF9xcCAgICAgICAgICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+bWF4X3Fwcyk7CisJcHJvcHMtPm1heF9xcF93ciAgICAgICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+bWF4X3FwX2RlcHRoKTsKKwlwcm9wcy0+ZGV2aWNlX2NhcF9mbGFncyAgICA9IGMyZGV2LT5kZXZpY2VfY2FwX2ZsYWdzOworCXByb3BzLT5tYXhfc2dlICAgICAgICAgICAgID0gQzJfTUFYX1NHRVM7CisJcHJvcHMtPm1heF9zZ2VfcmQgICAgICAgICAgPSBDMl9NQVhfU0dFX1JEOworCXByb3BzLT5tYXhfY3EgICAgICAgICAgICAgID0gYmUzMl90b19jcHUocmVwbHktPm1heF9jcXMpOworCXByb3BzLT5tYXhfY3FlICAgICAgICAgICAgID0gYmUzMl90b19jcHUocmVwbHktPm1heF9jcV9kZXB0aCk7CisJcHJvcHMtPm1heF9tciAgICAgICAgICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+bWF4X21ycyk7CisJcHJvcHMtPm1heF9wZCAgICAgICAgICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+bWF4X3Bkcyk7CisJcHJvcHMtPm1heF9xcF9yZF9hdG9tICAgICAgPSBiZTMyX3RvX2NwdShyZXBseS0+bWF4X3FwX2lyZCk7CisJcHJvcHMtPm1heF9lZV9yZF9hdG9tICAgICAgPSAwOworCXByb3BzLT5tYXhfcmVzX3JkX2F0b20gICAgID0gYmUzMl90b19jcHUocmVwbHktPm1heF9nbG9iYWxfaXJkKTsKKwlwcm9wcy0+bWF4X3FwX2luaXRfcmRfYXRvbSA9IGJlMzJfdG9fY3B1KHJlcGx5LT5tYXhfcXBfb3JkKTsKKwlwcm9wcy0+bWF4X2VlX2luaXRfcmRfYXRvbSA9IDA7CisJcHJvcHMtPmF0b21pY19jYXAgICAgICAgICAgPSBJQl9BVE9NSUNfTk9ORTsKKwlwcm9wcy0+bWF4X2VlICAgICAgICAgICAgICA9IDA7CisJcHJvcHMtPm1heF9yZGQgICAgICAgICAgICAgPSAwOworCXByb3BzLT5tYXhfbXcgICAgICAgICAgICAgID0gYmUzMl90b19jcHUocmVwbHktPm1heF9td3MpOworCXByb3BzLT5tYXhfcmF3X2lwdjZfcXAgICAgID0gMDsKKwlwcm9wcy0+bWF4X3Jhd19ldGh5X3FwICAgICA9IDA7CisJcHJvcHMtPm1heF9tY2FzdF9ncnAgICAgICAgPSAwOworCXByb3BzLT5tYXhfbWNhc3RfcXBfYXR0YWNoID0gMDsKKwlwcm9wcy0+bWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaCA9IDA7CisJcHJvcHMtPm1heF9haCAgICAgICAgICAgICAgPSAwOworCXByb3BzLT5tYXhfZm1yICAgICAgICAgICAgID0gMDsKKwlwcm9wcy0+bWF4X21hcF9wZXJfZm1yICAgICA9IDA7CisJcHJvcHMtPm1heF9zcnEgICAgICAgICAgICAgPSAwOworCXByb3BzLT5tYXhfc3JxX3dyICAgICAgICAgID0gMDsKKwlwcm9wcy0+bWF4X3NycV9zZ2UgICAgICAgICA9IDA7CisJcHJvcHMtPm1heF9wa2V5cyAgICAgICAgICAgPSAwOworCXByb3BzLT5sb2NhbF9jYV9hY2tfZGVsYXkgID0gMDsKKworIGJhaWwyOgorCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisKKyBiYWlsMToKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQWRkIGFuIElQIGFkZHJlc3MgdG8gdGhlIFJOSUMgaW50ZXJmYWNlCisgKi8KK2ludCBjMl9hZGRfYWRkcihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdTMyIGluYWRkciwgdTMyIGlubWFzaykKK3sKKwlzdHJ1Y3QgYzJfdnFfcmVxICp2cV9yZXE7CisJc3RydWN0IGMyd3Jfcm5pY19zZXRjb25maWdfcmVxICp3cjsKKwlzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXAgKnJlcGx5OworCXN0cnVjdCBjMl9uZXRhZGRyIG5ldGFkZHI7CisJaW50IGVyciwgbGVuOworCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAoIXZxX3JlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsZW4gPSBzaXplb2Yoc3RydWN0IGMyX25ldGFkZHIpOworCXdyID0ga21hbGxvYyhjMmRldi0+cmVxX3ZxLm1zZ19zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdyKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDA7CisJfQorCisJYzJfd3Jfc2V0X2lkKHdyLCBDQ1dSX1JOSUNfU0VUQ09ORklHKTsKKwl3ci0+aGRyLmNvbnRleHQgPSAodW5zaWduZWQgbG9uZykgdnFfcmVxOworCXdyLT5ybmljX2hhbmRsZSA9IGMyZGV2LT5hZGFwdGVyX2hhbmRsZTsKKwl3ci0+b3B0aW9uID0gY3B1X3RvX2JlMzIoQzJfQ0ZHX0FERF9BRERSKTsKKworCW5ldGFkZHIuaXBfYWRkciA9IGluYWRkcjsKKwluZXRhZGRyLm5ldG1hc2sgPSBpbm1hc2s7CisJbmV0YWRkci5tdHUgPSAwOworCisJbWVtY3B5KHdyLT5kYXRhLCAmbmV0YWRkciwgbGVuKTsKKworCXZxX3JlcV9nZXQoYzJkZXYsIHZxX3JlcSk7CisKKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAodW5pb24gYzJ3ciAqKSB3cik7CisJaWYgKGVycikgeworCQl2cV9yZXFfcHV0KGMyZGV2LCB2cV9yZXEpOworCQlnb3RvIGJhaWwxOworCX0KKworCWVyciA9IHZxX3dhaXRfZm9yX3JlcGx5KGMyZGV2LCB2cV9yZXEpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDE7CisKKwlyZXBseSA9CisJICAgIChzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXAgKikgKHVuc2lnbmVkIGxvbmcpICh2cV9yZXEtPnJlcGx5X21zZyk7CisJaWYgKCFyZXBseSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwxOworCX0KKworCWVyciA9IGMyX2Vycm5vKHJlcGx5KTsKKwl2cV9yZXBidWZfZnJlZShjMmRldiwgcmVwbHkpOworCisgICAgICBiYWlsMToKKwlrZnJlZSh3cik7CisgICAgICBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogRGVsZXRlIGFuIElQIGFkZHJlc3MgZnJvbSB0aGUgUk5JQyBpbnRlcmZhY2UKKyAqLworaW50IGMyX2RlbF9hZGRyKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCB1MzIgaW5hZGRyLCB1MzIgaW5tYXNrKQoreworCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKKwlzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXEgKndyOworCXN0cnVjdCBjMndyX3JuaWNfc2V0Y29uZmlnX3JlcCAqcmVwbHk7CisJc3RydWN0IGMyX25ldGFkZHIgbmV0YWRkcjsKKwlpbnQgZXJyLCBsZW47CisKKwl2cV9yZXEgPSB2cV9yZXFfYWxsb2MoYzJkZXYpOworCWlmICghdnFfcmVxKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWxlbiA9IHNpemVvZihzdHJ1Y3QgYzJfbmV0YWRkcik7CisJd3IgPSBrbWFsbG9jKGMyZGV2LT5yZXFfdnEubXNnX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghd3IpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwljMl93cl9zZXRfaWQod3IsIENDV1JfUk5JQ19TRVRDT05GSUcpOworCXdyLT5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3ItPnJuaWNfaGFuZGxlID0gYzJkZXYtPmFkYXB0ZXJfaGFuZGxlOworCXdyLT5vcHRpb24gPSBjcHVfdG9fYmUzMihDMl9DRkdfREVMX0FERFIpOworCisJbmV0YWRkci5pcF9hZGRyID0gaW5hZGRyOworCW5ldGFkZHIubmV0bWFzayA9IGlubWFzazsKKwluZXRhZGRyLm10dSA9IDA7CisKKwltZW1jcHkod3ItPmRhdGEsICZuZXRhZGRyLCBsZW4pOworCisJdnFfcmVxX2dldChjMmRldiwgdnFfcmVxKTsKKworCWVyciA9IHZxX3NlbmRfd3IoYzJkZXYsICh1bmlvbiBjMndyICopIHdyKTsKKwlpZiAoZXJyKSB7CisJCXZxX3JlcV9wdXQoYzJkZXYsIHZxX3JlcSk7CisJCWdvdG8gYmFpbDE7CisJfQorCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikKKwkJZ290byBiYWlsMTsKKworCXJlcGx5ID0KKwkgICAgKHN0cnVjdCBjMndyX3JuaWNfc2V0Y29uZmlnX3JlcCAqKSAodW5zaWduZWQgbG9uZykgKHZxX3JlcS0+cmVwbHlfbXNnKTsKKwlpZiAoIXJlcGx5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDE7CisJfQorCisJZXJyID0gYzJfZXJybm8ocmVwbHkpOworCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisKKyAgICAgIGJhaWwxOgorCWtmcmVlKHdyKTsKKyAgICAgIGJhaWwwOgorCXZxX3JlcV9mcmVlKGMyZGV2LCB2cV9yZXEpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBPcGVuIGEgc2luZ2xlIFJOSUMgaW5zdGFuY2UgdG8gdXNlIHdpdGggYWxsCisgKiBsb3cgbGV2ZWwgb3BlbmliIGNhbGxzCisgKi8KK3N0YXRpYyBpbnQgYzJfcm5pY19vcGVuKHN0cnVjdCBjMl9kZXYgKmMyZGV2KQoreworCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKKwl1bmlvbiBjMndyIHdyOworCXN0cnVjdCBjMndyX3JuaWNfb3Blbl9yZXAgKnJlcGx5OworCWludCBlcnI7CisKKwl2cV9yZXEgPSB2cV9yZXFfYWxsb2MoYzJkZXYpOworCWlmICh2cV9yZXEgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoJndyLCAwLCBzaXplb2Yod3IpKTsKKwljMl93cl9zZXRfaWQoJndyLCBDQ1dSX1JOSUNfT1BFTik7CisJd3Iucm5pY19vcGVuLnJlcS5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSAodnFfcmVxKTsKKwl3ci5ybmljX29wZW4ucmVxLmZsYWdzID0gY3B1X3RvX2JlMTYoUk5JQ19QUklWX01PREUpOworCXdyLnJuaWNfb3Blbi5yZXEucG9ydF9udW0gPSBjcHVfdG9fYmUxNigwKTsKKwl3ci5ybmljX29wZW4ucmVxLnVzZXJfY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSBjMmRldjsKKworCXZxX3JlcV9nZXQoYzJkZXYsIHZxX3JlcSk7CisKKwllcnIgPSB2cV9zZW5kX3dyKGMyZGV2LCAmd3IpOworCWlmIChlcnIpIHsKKwkJdnFfcmVxX3B1dChjMmRldiwgdnFfcmVxKTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwllcnIgPSB2cV93YWl0X2Zvcl9yZXBseShjMmRldiwgdnFfcmVxKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gYmFpbDA7CisJfQorCisJcmVwbHkgPSAoc3RydWN0IGMyd3Jfcm5pY19vcGVuX3JlcCAqKSAodW5zaWduZWQgbG9uZykgKHZxX3JlcS0+cmVwbHlfbXNnKTsKKwlpZiAoIXJlcGx5KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDA7CisJfQorCisJaWYgKChlcnIgPSBjMl9lcnJubyhyZXBseSkpICE9IDApIHsKKwkJZ290byBiYWlsMTsKKwl9CisKKwljMmRldi0+YWRhcHRlcl9oYW5kbGUgPSByZXBseS0+cm5pY19oYW5kbGU7CisKKyAgICAgIGJhaWwxOgorCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisgICAgICBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2xvc2UgdGhlIFJOSUMgaW5zdGFuY2UKKyAqLworc3RhdGljIGludCBjMl9ybmljX2Nsb3NlKHN0cnVjdCBjMl9kZXYgKmMyZGV2KQoreworCXN0cnVjdCBjMl92cV9yZXEgKnZxX3JlcTsKKwl1bmlvbiBjMndyIHdyOworCXN0cnVjdCBjMndyX3JuaWNfY2xvc2VfcmVwICpyZXBseTsKKwlpbnQgZXJyOworCisJdnFfcmVxID0gdnFfcmVxX2FsbG9jKGMyZGV2KTsKKwlpZiAodnFfcmVxID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KCZ3ciwgMCwgc2l6ZW9mKHdyKSk7CisJYzJfd3Jfc2V0X2lkKCZ3ciwgQ0NXUl9STklDX0NMT1NFKTsKKwl3ci5ybmljX2Nsb3NlLnJlcS5oZHIuY29udGV4dCA9ICh1bnNpZ25lZCBsb25nKSB2cV9yZXE7CisJd3Iucm5pY19jbG9zZS5yZXEucm5pY19oYW5kbGUgPSBjMmRldi0+YWRhcHRlcl9oYW5kbGU7CisKKwl2cV9yZXFfZ2V0KGMyZGV2LCB2cV9yZXEpOworCisJZXJyID0gdnFfc2VuZF93cihjMmRldiwgJndyKTsKKwlpZiAoZXJyKSB7CisJCXZxX3JlcV9wdXQoYzJkZXYsIHZxX3JlcSk7CisJCWdvdG8gYmFpbDA7CisJfQorCisJZXJyID0gdnFfd2FpdF9mb3JfcmVwbHkoYzJkZXYsIHZxX3JlcSk7CisJaWYgKGVycikgeworCQlnb3RvIGJhaWwwOworCX0KKworCXJlcGx5ID0gKHN0cnVjdCBjMndyX3JuaWNfY2xvc2VfcmVwICopICh1bnNpZ25lZCBsb25nKSAodnFfcmVxLT5yZXBseV9tc2cpOworCWlmICghcmVwbHkpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBiYWlsMDsKKwl9CisKKwlpZiAoKGVyciA9IGMyX2Vycm5vKHJlcGx5KSkgIT0gMCkgeworCQlnb3RvIGJhaWwxOworCX0KKworCWMyZGV2LT5hZGFwdGVyX2hhbmRsZSA9IDA7CisKKyAgICAgIGJhaWwxOgorCXZxX3JlcGJ1Zl9mcmVlKGMyZGV2LCByZXBseSk7CisgICAgICBiYWlsMDoKKwl2cV9yZXFfZnJlZShjMmRldiwgdnFfcmVxKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogQ2FsbGVkIGJ5IGMyX3Byb2JlIHRvIGluaXRpYWxpemUgdGhlIFJOSUMuIFRoaXMgcHJpbmNpcGFsbHkKKyAqIGludm9sdmVzIGluaXRhbGl6aW5nIHRoZSB2YXJpb3VzIGxpbWl0cyBhbmQgcmVzb3VjZSBwb29scyB0aGF0CisgKiBjb21wcmlzZSB0aGUgUk5JQyBpbnN0YW5jZS4KKyAqLworaW50IGMyX3JuaWNfaW5pdChzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwlpbnQgZXJyOworCXUzMiBxc2l6ZSwgbXNnc2l6ZTsKKwl2b2lkICpxMV9wYWdlczsKKwl2b2lkICpxMl9wYWdlczsKKwl2b2lkIF9faW9tZW0gKm1taW9fcmVnczsKKworCS8qIERldmljZSBjYXBhYmlsaXRpZXMgKi8KKwljMmRldi0+ZGV2aWNlX2NhcF9mbGFncyA9CisJICAgIChJQl9ERVZJQ0VfUkVTSVpFX01BWF9XUiB8CisJICAgICBJQl9ERVZJQ0VfQ1VSUl9RUF9TVEFURV9NT0QgfAorCSAgICAgSUJfREVWSUNFX1NZU19JTUFHRV9HVUlEIHwKKwkgICAgIElCX0RFVklDRV9aRVJPX1NUQUcgfAorCSAgICAgSUJfREVWSUNFX1NFTkRfV19JTlYgfCBJQl9ERVZJQ0VfTUVNX1dJTkRPVyk7CisKKwkvKiBBbGxvY2F0ZSB0aGUgcXB0cl9hcnJheSAqLworCWMyZGV2LT5xcHRyX2FycmF5ID0gdm1hbGxvYyhDMl9NQVhfQ1FTICogc2l6ZW9mKHZvaWQgKikpOworCWlmICghYzJkZXYtPnFwdHJfYXJyYXkpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogSW5pYWxpemUgdGhlIHFwdHJfYXJyYXkgKi8KKwltZW1zZXQoYzJkZXYtPnFwdHJfYXJyYXksIDAsIEMyX01BWF9DUVMgKiBzaXplb2Yodm9pZCAqKSk7CisJYzJkZXYtPnFwdHJfYXJyYXlbMF0gPSAodm9pZCAqKSAmYzJkZXYtPnJlcV92cTsKKwljMmRldi0+cXB0cl9hcnJheVsxXSA9ICh2b2lkICopICZjMmRldi0+cmVwX3ZxOworCWMyZGV2LT5xcHRyX2FycmF5WzJdID0gKHZvaWQgKikgJmMyZGV2LT5hZXE7CisKKwkvKiBJbml0aWFsaXplIGRhdGEgc3RydWN0dXJlcyAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmMyZGV2LT5yZXFfdnFfd28pOworCXNwaW5fbG9ja19pbml0KCZjMmRldi0+dnFsb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmYzJkZXYtPmxvY2spOworCisJLyogQWxsb2NhdGUgTVEgc2hhcmVkIHBvaW50ZXIgcG9vbCBmb3Iga2VybmVsIGNsaWVudHMuIFVzZXIKKwkgKiBtb2RlIGNsaWVudCBwb29scyBhcmUgaHVuZyBvZmYgdGhlIHVzZXIgY29udGV4dAorCSAqLworCWVyciA9IGMyX2luaXRfbXFzcF9wb29sKGMyZGV2LCBHRlBfS0VSTkVMLCAmYzJkZXYtPmtlcm5fbXFzcF9wb29sKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gYmFpbDA7CisJfQorCisJLyogQWxsb2NhdGUgc2hhcmVkIHBvaW50ZXJzIGZvciBRMCwgUTEsIGFuZCBRMiBmcm9tCisJICogdGhlIHNoYXJlZCBwb2ludGVyIHBvb2wuCisJICovCisKKwljMmRldi0+aGludF9jb3VudCA9IGMyX2FsbG9jX21xc3AoYzJkZXYsIGMyZGV2LT5rZXJuX21xc3BfcG9vbCwKKwkJCQkJICAgICAmYzJkZXYtPmhpbnRfY291bnRfZG1hLAorCQkJCQkgICAgIEdGUF9LRVJORUwpOworCWMyZGV2LT5yZXFfdnEuc2hhcmVkID0gYzJfYWxsb2NfbXFzcChjMmRldiwgYzJkZXYtPmtlcm5fbXFzcF9wb29sLAorCQkJCQkgICAgICZjMmRldi0+cmVxX3ZxLnNoYXJlZF9kbWEsCisJCQkJCSAgICAgR0ZQX0tFUk5FTCk7CisJYzJkZXYtPnJlcF92cS5zaGFyZWQgPSBjMl9hbGxvY19tcXNwKGMyZGV2LCBjMmRldi0+a2Vybl9tcXNwX3Bvb2wsCisJCQkJCSAgICAgJmMyZGV2LT5yZXBfdnEuc2hhcmVkX2RtYSwKKwkJCQkJICAgICBHRlBfS0VSTkVMKTsKKwljMmRldi0+YWVxLnNoYXJlZCA9IGMyX2FsbG9jX21xc3AoYzJkZXYsIGMyZGV2LT5rZXJuX21xc3BfcG9vbCwKKwkJCQkJICAmYzJkZXYtPmFlcS5zaGFyZWRfZG1hLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWMyZGV2LT5oaW50X2NvdW50IHx8ICFjMmRldi0+cmVxX3ZxLnNoYXJlZCB8fAorCSAgICAhYzJkZXYtPnJlcF92cS5zaGFyZWQgfHwgIWMyZGV2LT5hZXEuc2hhcmVkKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDE7CisJfQorCisJbW1pb19yZWdzID0gYzJkZXYtPmt2YTsKKwkvKiBJbml0aWFsaXplIHRoZSBWZXJicyBSZXF1ZXN0IFF1ZXVlICovCisJYzJfbXFfcmVxX2luaXQoJmMyZGV2LT5yZXFfdnEsIDAsCisJCSAgICAgICBiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1EwX1FTSVpFKSksCisJCSAgICAgICBiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1EwX01TR1NJWkUpKSwKKwkJICAgICAgIG1taW9fcmVncyArCisJCSAgICAgICBiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1EwX1BPT0xTVEFSVCkpLAorCQkgICAgICAgbW1pb19yZWdzICsKKwkJICAgICAgIGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTBfU0hBUkVEKSksCisJCSAgICAgICBDMl9NUV9BREFQVEVSX1RBUkdFVCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBWZXJicyBSZXBseSBRdWV1ZSAqLworCXFzaXplID0gYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMV9RU0laRSkpOworCW1zZ3NpemUgPSBiZTMyX3RvX2NwdShyZWFkbChtbWlvX3JlZ3MgKyBDMl9SRUdTX1ExX01TR1NJWkUpKTsKKwlxMV9wYWdlcyA9IGttYWxsb2MocXNpemUgKiBtc2dzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXExX3BhZ2VzKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDE7CisJfQorCWMyZGV2LT5yZXBfdnEuaG9zdF9kbWEgPSBkbWFfbWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKKwkJCQkJICAgICAgICAodm9pZCAqKXExX3BhZ2VzLCBxc2l6ZSAqIG1zZ3NpemUsCisJCQkJICAgICAgCQlETUFfRlJPTV9ERVZJQ0UpOworCXBjaV91bm1hcF9hZGRyX3NldCgmYzJkZXYtPnJlcF92cSwgbWFwcGluZywgYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CisJcHJfZGVidWcoIiVzIHJlcF92cSB2YSAlcCBkbWEgJWxseFxuIiwgX19GVU5DVElPTl9fLCBxMV9wYWdlcywKKwkJICh1NjQpYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CisJYzJfbXFfcmVwX2luaXQoJmMyZGV2LT5yZXBfdnEsCisJCSAgIDEsCisJCSAgIHFzaXplLAorCQkgICBtc2dzaXplLAorCQkgICBxMV9wYWdlcywKKwkJICAgbW1pb19yZWdzICsKKwkJICAgYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMV9TSEFSRUQpKSwKKwkJICAgQzJfTVFfSE9TVF9UQVJHRVQpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgQXN5bmNocm9udXMgRXZlbnQgUXVldWUgKi8KKwlxc2l6ZSA9IGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTJfUVNJWkUpKTsKKwltc2dzaXplID0gYmUzMl90b19jcHUocmVhZGwobW1pb19yZWdzICsgQzJfUkVHU19RMl9NU0dTSVpFKSk7CisJcTJfcGFnZXMgPSBrbWFsbG9jKHFzaXplICogbXNnc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFxMl9wYWdlcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGJhaWwyOworCX0KKwljMmRldi0+YWVxLmhvc3RfZG1hID0gZG1hX21hcF9zaW5nbGUoYzJkZXYtPmliZGV2LmRtYV9kZXZpY2UsCisJCQkJCSAgICAgICAgKHZvaWQgKilxMl9wYWdlcywgcXNpemUgKiBtc2dzaXplLAorCQkJCSAgICAgIAkJRE1BX0ZST01fREVWSUNFKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQoJmMyZGV2LT5hZXEsIG1hcHBpbmcsIGMyZGV2LT5hZXEuaG9zdF9kbWEpOworCXByX2RlYnVnKCIlcyBhZXEgdmEgJXAgZG1hICVsbHhcbiIsIF9fRlVOQ1RJT05fXywgcTFfcGFnZXMsCisJCSAodTY0KWMyZGV2LT5yZXBfdnEuaG9zdF9kbWEpOworCWMyX21xX3JlcF9pbml0KCZjMmRldi0+YWVxLAorCQkgICAgICAgMiwKKwkJICAgICAgIHFzaXplLAorCQkgICAgICAgbXNnc2l6ZSwKKwkJICAgICAgIHEyX3BhZ2VzLAorCQkgICAgICAgbW1pb19yZWdzICsKKwkJICAgICAgIGJlMzJfdG9fY3B1KHJlYWRsKG1taW9fcmVncyArIEMyX1JFR1NfUTJfU0hBUkVEKSksCisJCSAgICAgICBDMl9NUV9IT1NUX1RBUkdFVCk7CisKKwkvKiBJbml0aWFsaXplIHRoZSB2ZXJicyByZXF1ZXN0IGFsbG9jYXRvciAqLworCWVyciA9IHZxX2luaXQoYzJkZXYpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDM7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB0aGUgYWRhcHRlciAqLworCXdyaXRlbCgwLCBjMmRldi0+cmVncyArIEMyX0lESVMpOworCisJLyogY3JlYXRlIHRoZSBXUiBpbml0IG1lc3NhZ2UgKi8KKwllcnIgPSBjMl9hZGFwdGVyX2luaXQoYzJkZXYpOworCWlmIChlcnIpCisJCWdvdG8gYmFpbDQ7CisJYzJkZXYtPmluaXQrKzsKKworCS8qIG9wZW4gYW4gYWRhcHRlciBpbnN0YW5jZSAqLworCWVyciA9IGMyX3JuaWNfb3BlbihjMmRldik7CisJaWYgKGVycikKKwkJZ290byBiYWlsNDsKKworCS8qIEluaXRpYWxpemUgY2FjaGVkIHRoZSBhZGFwdGVyIGxpbWl0cyAqLworCWlmIChjMl9ybmljX3F1ZXJ5KGMyZGV2LCAmYzJkZXYtPnByb3BzKSkKKwkJZ290byBiYWlsNTsKKworCS8qIEluaXRpYWxpemUgdGhlIFBEIHBvb2wgKi8KKwllcnIgPSBjMl9pbml0X3BkX3RhYmxlKGMyZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGJhaWw1OworCisJLyogSW5pdGlhbGl6ZSB0aGUgUVAgcG9vbCAqLworCWMyX2luaXRfcXBfdGFibGUoYzJkZXYpOworCXJldHVybiAwOworCisgICAgICBiYWlsNToKKwljMl9ybmljX2Nsb3NlKGMyZGV2KTsKKyAgICAgIGJhaWw0OgorCXZxX3Rlcm0oYzJkZXYpOworICAgICAgYmFpbDM6CisJZG1hX3VubWFwX3NpbmdsZShjMmRldi0+aWJkZXYuZG1hX2RldmljZSwKKwkJCSBwY2lfdW5tYXBfYWRkcigmYzJkZXYtPmFlcSwgbWFwcGluZyksCisJCQkgYzJkZXYtPmFlcS5xX3NpemUgKiBjMmRldi0+YWVxLm1zZ19zaXplLAorCQkgIAkgRE1BX0ZST01fREVWSUNFKTsKKwlrZnJlZShxMl9wYWdlcyk7CisgICAgICBiYWlsMjoKKwlkbWFfdW5tYXBfc2luZ2xlKGMyZGV2LT5pYmRldi5kbWFfZGV2aWNlLAorCQkJIHBjaV91bm1hcF9hZGRyKCZjMmRldi0+cmVwX3ZxLCBtYXBwaW5nKSwKKwkJCSBjMmRldi0+cmVwX3ZxLnFfc2l6ZSAqIGMyZGV2LT5yZXBfdnEubXNnX3NpemUsCisJCSAgCSBETUFfRlJPTV9ERVZJQ0UpOworCWtmcmVlKHExX3BhZ2VzKTsKKyAgICAgIGJhaWwxOgorCWMyX2ZyZWVfbXFzcF9wb29sKGMyZGV2LCBjMmRldi0+a2Vybl9tcXNwX3Bvb2wpOworICAgICAgYmFpbDA6CisJdmZyZWUoYzJkZXYtPnFwdHJfYXJyYXkpOworCisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIENhbGxlZCBieSBjMl9yZW1vdmUgdG8gY2xlYW51cCB0aGUgUk5JQyByZXNvdXJjZXMuCisgKi8KK3ZvaWQgYzJfcm5pY190ZXJtKHN0cnVjdCBjMl9kZXYgKmMyZGV2KQoreworCisJLyogQ2xvc2UgdGhlIG9wZW4gYWRhcHRlciBpbnN0YW5jZSAqLworCWMyX3JuaWNfY2xvc2UoYzJkZXYpOworCisJLyogU2VuZCB0aGUgVEVSTSBtZXNzYWdlIHRvIHRoZSBhZGFwdGVyICovCisJYzJfYWRhcHRlcl90ZXJtKGMyZGV2KTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBvbiB0aGUgYWRhcHRlciAqLworCXdyaXRlbCgxLCBjMmRldi0+cmVncyArIEMyX0lESVMpOworCisJLyogRnJlZSB0aGUgUVAgcG9vbCAqLworCWMyX2NsZWFudXBfcXBfdGFibGUoYzJkZXYpOworCisJLyogRnJlZSB0aGUgUEQgcG9vbCAqLworCWMyX2NsZWFudXBfcGRfdGFibGUoYzJkZXYpOworCisJLyogRnJlZSB0aGUgdmVyYnMgcmVxdWVzdCBhbGxvY2F0b3IgKi8KKwl2cV90ZXJtKGMyZGV2KTsKKworCS8qIFVubWFwIGFuZCBmcmVlIHRoZSBhc3luY2hyb251cyBldmVudCBxdWV1ZSAqLworCWRtYV91bm1hcF9zaW5nbGUoYzJkZXYtPmliZGV2LmRtYV9kZXZpY2UsCisJCQkgcGNpX3VubWFwX2FkZHIoJmMyZGV2LT5hZXEsIG1hcHBpbmcpLAorCQkJIGMyZGV2LT5hZXEucV9zaXplICogYzJkZXYtPmFlcS5tc2dfc2l6ZSwKKwkJICAJIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoYzJkZXYtPmFlcS5tc2dfcG9vbC5ob3N0KTsKKworCS8qIFVubWFwIGFuZCBmcmVlIHRoZSB2ZXJicyByZXBseSBxdWV1ZSAqLworCWRtYV91bm1hcF9zaW5nbGUoYzJkZXYtPmliZGV2LmRtYV9kZXZpY2UsCisJCQkgcGNpX3VubWFwX2FkZHIoJmMyZGV2LT5yZXBfdnEsIG1hcHBpbmcpLAorCQkJIGMyZGV2LT5yZXBfdnEucV9zaXplICogYzJkZXYtPnJlcF92cS5tc2dfc2l6ZSwKKwkJICAJIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoYzJkZXYtPnJlcF92cS5tc2dfcG9vbC5ob3N0KTsKKworCS8qIEZyZWUgdGhlIE1RIHNoYXJlZCBwb2ludGVyIHBvb2wgKi8KKwljMl9mcmVlX21xc3BfcG9vbChjMmRldiwgYzJkZXYtPmtlcm5fbXFzcF9wb29sKTsKKworCS8qIEZyZWUgdGhlIHFwdHJfYXJyYXkgKi8KKwl2ZnJlZShjMmRldi0+cXB0cl9hcnJheSk7CisKKwlyZXR1cm47Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfc3RhdHVzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfc3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlNGFhOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9zdGF0dXMuaApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpZm5kZWYJX0MyX1NUQVRVU19IXworI2RlZmluZSBfQzJfU1RBVFVTX0hfCisKKy8qCisgKiBWZXJicyBTdGF0dXMgQ29kZXMKKyAqLworZW51bSBjMl9zdGF0dXMgeworCUMyX09LID0gMCwJCS8qIFRoaXMgbXVzdCBiZSB6ZXJvICovCisJQ0NFUlJfSU5TVUZGSUNJRU5UX1JFU09VUkNFUyA9IDEsCisJQ0NFUlJfSU5WQUxJRF9NT0RJRklFUiA9IDIsCisJQ0NFUlJfSU5WQUxJRF9NT0RFID0gMywKKwlDQ0VSUl9JTl9VU0UgPSA0LAorCUNDRVJSX0lOVkFMSURfUk5JQyA9IDUsCisJQ0NFUlJfSU5URVJSVVBURURfT1BFUkFUSU9OID0gNiwKKwlDQ0VSUl9JTlZBTElEX0VIID0gNywKKwlDQ0VSUl9JTlZBTElEX0NRID0gOCwKKwlDQ0VSUl9DUV9FTVBUWSA9IDksCisJQ0NFUlJfTk9UX0lNUExFTUVOVEVEID0gMTAsCisJQ0NFUlJfQ1FfREVQVEhfVE9PX1NNQUxMID0gMTEsCisJQ0NFUlJfUERfSU5fVVNFID0gMTIsCisJQ0NFUlJfSU5WQUxJRF9QRCA9IDEzLAorCUNDRVJSX0lOVkFMSURfU1JRID0gMTQsCisJQ0NFUlJfSU5WQUxJRF9BRERSRVNTID0gMTUsCisJQ0NFUlJfSU5WQUxJRF9ORVRNQVNLID0gMTYsCisJQ0NFUlJfSU5WQUxJRF9RUCA9IDE3LAorCUNDRVJSX0lOVkFMSURfUVBfU1RBVEUgPSAxOCwKKwlDQ0VSUl9UT09fTUFOWV9XUlNfUE9TVEVEID0gMTksCisJQ0NFUlJfSU5WQUxJRF9XUl9UWVBFID0gMjAsCisJQ0NFUlJfSU5WQUxJRF9TR0xfTEVOR1RIID0gMjEsCisJQ0NFUlJfSU5WQUxJRF9TUV9ERVBUSCA9IDIyLAorCUNDRVJSX0lOVkFMSURfUlFfREVQVEggPSAyMywKKwlDQ0VSUl9JTlZBTElEX09SRCA9IDI0LAorCUNDRVJSX0lOVkFMSURfSVJEID0gMjUsCisJQ0NFUlJfUVBfQVRUUl9DQU5OT1RfQ0hBTkdFID0gMjYsCisJQ0NFUlJfSU5WQUxJRF9TVEFHID0gMjcsCisJQ0NFUlJfUVBfSU5fVVNFID0gMjgsCisJQ0NFUlJfT1VUU1RBTkRJTkdfV1JTID0gMjksCisJQ0NFUlJfU1RBR19JTl9VU0UgPSAzMCwKKwlDQ0VSUl9JTlZBTElEX1NUQUdfSU5ERVggPSAzMSwKKwlDQ0VSUl9JTlZBTElEX1NHTF9GT1JNQVQgPSAzMiwKKwlDQ0VSUl9BREFQVEVSX1RJTUVPVVQgPSAzMywKKwlDQ0VSUl9JTlZBTElEX0NRX0RFUFRIID0gMzQsCisJQ0NFUlJfSU5WQUxJRF9QUklWQVRFX0RBVEFfTEVOR1RIID0gMzUsCisJQ0NFUlJfSU5WQUxJRF9FUCA9IDM2LAorCUNDRVJSX01SX0lOX1VTRSA9IENDRVJSX1NUQUdfSU5fVVNFLAorCUNDRVJSX0ZMVVNIRUQgPSAzOCwKKwlDQ0VSUl9JTlZBTElEX1dRRSA9IDM5LAorCUNDRVJSX0xPQ0FMX1FQX0NBVEFTVFJPUEhJQ19FUlJPUiA9IDQwLAorCUNDRVJSX1JFTU9URV9URVJNSU5BVElPTl9FUlJPUiA9IDQxLAorCUNDRVJSX0JBU0VfQU5EX0JPVU5EU19WSU9MQVRJT04gPSA0MiwKKwlDQ0VSUl9BQ0NFU1NfVklPTEFUSU9OID0gNDMsCisJQ0NFUlJfSU5WQUxJRF9QRF9JRCA9IDQ0LAorCUNDRVJSX1dSQVBfRVJST1IgPSA0NSwKKwlDQ0VSUl9JTlZfU1RBR19BQ0NFU1NfRVJST1IgPSA0NiwKKwlDQ0VSUl9aRVJPX1JETUFfUkVBRF9SRVNPVVJDRVMgPSA0NywKKwlDQ0VSUl9RUF9OT1RfUFJJVklMRUdFRCA9IDQ4LAorCUNDRVJSX1NUQUdfU1RBVEVfTk9UX0lOVkFMSUQgPSA0OSwKKwlDQ0VSUl9JTlZBTElEX1BBR0VfU0laRSA9IDUwLAorCUNDRVJSX0lOVkFMSURfQlVGRkVSX1NJWkUgPSA1MSwKKwlDQ0VSUl9JTlZBTElEX1BCRSA9IDUyLAorCUNDRVJSX0lOVkFMSURfRkJPID0gNTMsCisJQ0NFUlJfSU5WQUxJRF9MRU5HVEggPSA1NCwKKwlDQ0VSUl9JTlZBTElEX0FDQ0VTU19SSUdIVFMgPSA1NSwKKwlDQ0VSUl9QQkxfVE9PX0JJRyA9IDU2LAorCUNDRVJSX0lOVkFMSURfVkEgPSA1NywKKwlDQ0VSUl9JTlZBTElEX1JFR0lPTiA9IDU4LAorCUNDRVJSX0lOVkFMSURfV0lORE9XID0gNTksCisJQ0NFUlJfVE9UQUxfTEVOR1RIX1RPT19CSUcgPSA2MCwKKwlDQ0VSUl9JTlZBTElEX1FQX0lEID0gNjEsCisJQ0NFUlJfQUREUl9JTl9VU0UgPSA2MiwKKwlDQ0VSUl9BRERSX05PVF9BVkFJTCA9IDYzLAorCUNDRVJSX05FVF9ET1dOID0gNjQsCisJQ0NFUlJfTkVUX1VOUkVBQ0hBQkxFID0gNjUsCisJQ0NFUlJfQ09OTl9BQk9SVEVEID0gNjYsCisJQ0NFUlJfQ09OTl9SRVNFVCA9IDY3LAorCUNDRVJSX05PX0JVRlMgPSA2OCwKKwlDQ0VSUl9DT05OX1RJTUVET1VUID0gNjksCisJQ0NFUlJfQ09OTl9SRUZVU0VEID0gNzAsCisJQ0NFUlJfSE9TVF9VTlJFQUNIQUJMRSA9IDcxLAorCUNDRVJSX0lOVkFMSURfU0VORF9TR0xfREVQVEggPSA3MiwKKwlDQ0VSUl9JTlZBTElEX1JFQ1ZfU0dMX0RFUFRIID0gNzMsCisJQ0NFUlJfSU5WQUxJRF9SRE1BX1dSSVRFX1NHTF9ERVBUSCA9IDc0LAorCUNDRVJSX0lOU1VGRklDSUVOVF9QUklWSUxFR0VTID0gNzUsCisJQ0NFUlJfU1RBQ0tfRVJST1IgPSA3NiwKKwlDQ0VSUl9JTlZBTElEX1ZFUlNJT04gPSA3NywKKwlDQ0VSUl9JTlZBTElEX01UVSA9IDc4LAorCUNDRVJSX0lOVkFMSURfSU1BR0UgPSA3OSwKKwlDQ0VSUl9QRU5ESU5HID0gOTgsCS8qIG5vdCBhbiBlcnJvcjsgdXNlciBpbnRlcm5hbGx5IGJ5IGFkYXB0ZXIgKi8KKwlDQ0VSUl9ERUZFUiA9IDk5LAkvKiBub3QgYW4gZXJyb3I7IHVzZWQgaW50ZXJuYWxseSBieSBhZGFwdGVyICovCisJQ0NFUlJfRkFJTEVEX1dSSVRFID0gMTAwLAorCUNDRVJSX0ZBSUxFRF9FUkFTRSA9IDEwMSwKKwlDQ0VSUl9GQUlMRURfVkVSSUZJQ0FUSU9OID0gMTAyLAorCUNDRVJSX05PVF9GT1VORCA9IDEwMywKKworfTsKKworLyoKKyAqIENDQUVfQUNUSVZFX0NPTk5FQ1RfUkVTVUxUUyBzdGF0dXMgcmVzdWx0IGNvZGVzLgorICovCitlbnVtIGMyX2Nvbm5lY3Rfc3RhdHVzIHsKKwlDMl9DT05OX1NUQVRVU19TVUNDRVNTID0gQzJfT0ssCisJQzJfQ09OTl9TVEFUVVNfTk9fTUVNID0gQ0NFUlJfSU5TVUZGSUNJRU5UX1JFU09VUkNFUywKKwlDMl9DT05OX1NUQVRVU19USU1FRE9VVCA9IENDRVJSX0NPTk5fVElNRURPVVQsCisJQzJfQ09OTl9TVEFUVVNfUkVGVVNFRCA9IENDRVJSX0NPTk5fUkVGVVNFRCwKKwlDMl9DT05OX1NUQVRVU19ORVRVTlJFQUNIID0gQ0NFUlJfTkVUX1VOUkVBQ0hBQkxFLAorCUMyX0NPTk5fU1RBVFVTX0hPU1RVTlJFQUNIID0gQ0NFUlJfSE9TVF9VTlJFQUNIQUJMRSwKKwlDMl9DT05OX1NUQVRVU19JTlZBTElEX1JOSUMgPSBDQ0VSUl9JTlZBTElEX1JOSUMsCisJQzJfQ09OTl9TVEFUVVNfSU5WQUxJRF9RUCA9IENDRVJSX0lOVkFMSURfUVAsCisJQzJfQ09OTl9TVEFUVVNfSU5WQUxJRF9RUF9TVEFURSA9IENDRVJSX0lOVkFMSURfUVBfU1RBVEUsCisJQzJfQ09OTl9TVEFUVVNfUkVKRUNURUQgPSBDQ0VSUl9DT05OX1JFU0VULAorCUMyX0NPTk5fU1RBVFVTX0FERFJfTk9UX0FWQUlMID0gQ0NFUlJfQUREUl9OT1RfQVZBSUwsCit9OworCisvKgorICogRmxhc2ggcHJvZ3JhbW1pbmcgc3RhdHVzIGNvZGVzLgorICovCitlbnVtIGMyX2ZsYXNoX3N0YXR1cyB7CisJQzJfRkxBU0hfU1RBVFVTX1NVQ0NFU1MgPSAweDAwMDAsCisJQzJfRkxBU0hfU1RBVFVTX1ZFUklGWV9FUlIgPSAweDAwMDIsCisJQzJfRkxBU0hfU1RBVFVTX0lNQUdFX0VSUiA9IDB4MDAwNCwKKwlDMl9GTEFTSF9TVEFUVVNfRUNMQlMgPSAweDA0MDAsCisJQzJfRkxBU0hfU1RBVFVTX1BTTEJTID0gMHgwODAwLAorCUMyX0ZMQVNIX1NUQVRVU19WUEVOUyA9IDB4MTAwMCwKK307CisKKyNlbmRpZgkJCQkvKiBfQzJfU1RBVFVTX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3VzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTllN2FkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3VzZXIuaApAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA1IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IENpc2NvIFN5c3RlbXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICoKKyAqLworCisjaWZuZGVmIEMyX1VTRVJfSAorI2RlZmluZSBDMl9VU0VSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qCisgKiBNYWtlIHN1cmUgdGhhdCBhbGwgc3RydWN0cyBkZWZpbmVkIGluIHRoaXMgZmlsZSByZW1haW4gbGFpZCBvdXQgc28KKyAqIHRoYXQgdGhleSBwYWNrIHRoZSBzYW1lIHdheSBvbiAzMi1iaXQgYW5kIDY0LWJpdCBhcmNoaXRlY3R1cmVzICh0bworICogYXZvaWQgaW5jb21wYXRpYmlsaXR5IGJldHdlZW4gMzItYml0IHVzZXJzcGFjZSBhbmQgNjQtYml0IGtlcm5lbHMpLgorICogSW4gcGFydGljdWxhciBkbyBub3QgdXNlIHBvaW50ZXIgdHlwZXMgLS0gcGFzcyBwb2ludGVycyBpbiBfX3U2NAorICogaW5zdGVhZC4KKyAqLworCitzdHJ1Y3QgYzJfYWxsb2NfdWNvbnRleHRfcmVzcCB7CisJX191MzIgcXBfdGFiX3NpemU7CisJX191MzIgdWFyY19zaXplOworfTsKKworc3RydWN0IGMyX2FsbG9jX3BkX3Jlc3AgeworCV9fdTMyIHBkbjsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCBjMl9jcmVhdGVfY3EgeworCV9fdTMyIGxrZXk7CisJX191MzIgcGRuOworCV9fdTY0IGFybV9kYl9wYWdlOworCV9fdTY0IHNldF9kYl9wYWdlOworCV9fdTMyIGFybV9kYl9pbmRleDsKKwlfX3UzMiBzZXRfZGJfaW5kZXg7Cit9OworCitzdHJ1Y3QgYzJfY3JlYXRlX2NxX3Jlc3AgeworCV9fdTMyIGNxbjsKKwlfX3UzMiByZXNlcnZlZDsKK307CisKK3N0cnVjdCBjMl9jcmVhdGVfcXAgeworCV9fdTMyIGxrZXk7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgc3FfZGJfcGFnZTsKKwlfX3U2NCBycV9kYl9wYWdlOworCV9fdTMyIHNxX2RiX2luZGV4OworCV9fdTMyIHJxX2RiX2luZGV4OworfTsKKworI2VuZGlmCQkJCS8qIEMyX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGNhZWI1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmMKQEAgLTAsMCArMSwyNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQW1tYXNzbywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKKyNpbmNsdWRlICJjMl92cS5oIgorI2luY2x1ZGUgImMyX3Byb3ZpZGVyLmgiCisKKy8qCisgKiBWZXJicyBSZXF1ZXN0IE9iamVjdHM6CisgKgorICogVlEgUmVxdWVzdCBPYmplY3RzIGFyZSBhbGxvY2F0ZWQgYnkgdGhlIGtlcm5lbCB2ZXJicyBoYW5kbGVycy4KKyAqIFRoZXkgY29udGFpbiBhIHdhaXQgb2JqZWN0LCBhIHJlZmNudCwgYW4gYXRvbWljIGJvb2wgaW5kaWNhdGluZyB0aGF0IHRoZQorICogYWRhcHRlciBoYXMgcmVwbGllZCwgYW5kIGEgY29weSBvZiB0aGUgdmVyYiByZXBseSB3b3JrIHJlcXVlc3QuCisgKiBBIHBvaW50ZXIgdG8gdGhlIFZRIFJlcXVlc3QgT2JqZWN0IGlzIHBhc3NlZCBkb3duIGluIHRoZSBjb250ZXh0CisgKiBmaWVsZCBvZiB0aGUgd29yayByZXF1ZXN0IG1lc3NhZ2UsIGFuZCByZWZsZWN0ZWQgYmFjayBieSB0aGUgYWRhcHRlcgorICogaW4gdGhlIHZlcmJzIHJlcGx5IG1lc3NhZ2UuICBUaGUgZnVuY3Rpb24gaGFuZGxlX3ZxKCkgaW4gdGhlIGludGVycnVwdAorICogcGF0aCB3aWxsIHVzZSB0aGlzIHBvaW50ZXIgdG86CisgKiAJMSkgYXBwZW5kIGEgY29weSBvZiB0aGUgdmVyYnMgcmVwbHkgbWVzc2FnZQorICogCTIpIG1hcmsgdGhhdCB0aGUgcmVwbHkgaXMgcmVhZHkKKyAqIAkzKSB3YWtlIHVwIHRoZSBrZXJuZWwgdmVyYnMgaGFuZGxlciBibG9ja2VkIGF3YWl0aW5nIHRoZSByZXBseS4KKyAqCisgKgorICogVGhlIGtlcm5lbCB2ZXJicyBoYW5kbGVycyBkbyBhICJnZXQiIHRvIHB1dCBhIDJuZCByZWZlcmVuY2Ugb24gdGhlCisgKiBWUSBSZXF1ZXN0IG9iamVjdC4gIElmIHRoZSBrZXJuZWwgdmVyYnMgaGFuZGxlciBleGl0cyBiZWZvcmUgdGhlIGFkYXB0ZXIKKyAqIGNhbiByZXNwb25kLCB0aGlzIGV4dHJhIHJlZmVyZW5jZSB3aWxsIGtlZXAgdGhlIFZRIFJlcXVlc3Qgb2JqZWN0IGFyb3VuZAorICogdW50aWwgdGhlIGFkYXB0ZXIncyByZXBseSBjYW4gYmUgcHJvY2Vzc2VkLiAgVGhlIHJlYXNvbiB3ZSBuZWVkIHRoaXMgaXMKKyAqIGJlY2F1c2UgYSBwb2ludGVyIHRvIHRoaXMgb2JqZWN0IGlzIHN0dWZmZWQgaW50byB0aGUgY29udGV4dCBmaWVsZCBvZgorICogdGhlIHZlcmJzIHdvcmsgcmVxdWVzdCBtZXNzYWdlLCBhbmQgcmVmbGVjdGVkIGJhY2sgaW4gdGhlIHJlcGx5IG1lc3NhZ2UuCisgKiBJdCBpcyB1c2VkIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAoaGFuZGxlX3ZxKCkpIHRvIHdha2UgdXAgdGhlIGFwcHJvcHJpYXRlCisgKiBrZXJuZWwgdmVyYiBoYW5kbGVyIHRoYXQgaXMgYmxvY2tlZCBhd2FpdGluZyB0aGUgdmVyYiByZXBseS4KKyAqIFNvIGhhbmRsZV92cSgpIHdpbGwgZG8gYSAicHV0IiBvbiB0aGUgb2JqZWN0IHdoZW4gaXQncyBkb25lIGFjY2Vzc2luZyBpdC4KKyAqIE5PVEU6ICBJZiB3ZSBndWFyYW50ZWUgdGhhdCB0aGUga2VybmVsIHZlcmIgaGFuZGxlciB3aWxsIG5ldmVyIGJhaWwgYmVmb3JlCisgKiAgICAgICAgZ2V0dGluZyB0aGUgcmVwbHksIHRoZW4gd2UgZG9uJ3QgbmVlZCB0aGVzZSByZWZjbnRzLgorICoKKyAqCisgKiBWUSBSZXF1ZXN0IG9iamVjdHMgYXJlIGZyZWVkIGJ5IHRoZSBrZXJuZWwgdmVyYnMgaGFuZGxlcnMgb25seQorICogYWZ0ZXIgdGhlIHZlcmIgaGFzIGJlZW4gcHJvY2Vzc2VkLCBvciB3aGVuIHRoZSBhZGFwdGVyIGZhaWxzIGFuZAorICogZG9lcyBub3QgcmVwbHkuCisgKgorICoKKyAqIFZlcmJzIFJlcGx5IEJ1ZmZlcnM6CisgKgorICogVlEgUmVwbHkgYnVmcyBhcmUgbG9jYWwgaG9zdCBtZW1vcnkgY29waWVzIG9mIGEKKyAqIG91dHN0YW5kaW5nIFZlcmIgUmVxdWVzdCByZXBseQorICogbWVzc2FnZS4gIFRoZSBhcmUgYWx3YXlzIGFsbG9jYXRlZCBieSB0aGUga2VybmVsIHZlcmJzIGhhbmRsZXJzLCBhbmQgX21heV8gYmUKKyAqIGZyZWVkIGJ5IGVpdGhlciB0aGUga2VybmVsIHZlcmJzIGhhbmRsZXIgLW9yLSB0aGUgaW50ZXJydXB0IGhhbmRsZXIuICBUaGUKKyAqIGtlcm5lbCB2ZXJicyBoYW5kbGVyIF9tdXN0XyBmcmVlIHRoZSByZXBidWYsIHRoZW4gZnJlZSB0aGUgdnEgcmVxdWVzdCBvYmplY3QKKyAqIGluIHRoYXQgb3JkZXIuCisgKi8KKworaW50IHZxX2luaXQoc3RydWN0IGMyX2RldiAqYzJkZXYpCit7CisJc3ByaW50ZihjMmRldi0+dnFfY2FjaGVfbmFtZSwgImMyLXZxOmRldiVjIiwKKwkJKGNoYXIpICgnMCcgKyBjMmRldi0+ZGV2bnVtKSk7CisJYzJkZXYtPmhvc3RfbXNnX2NhY2hlID0KKwkgICAga21lbV9jYWNoZV9jcmVhdGUoYzJkZXYtPnZxX2NhY2hlX25hbWUsIGMyZGV2LT5yZXBfdnEubXNnX3NpemUsIDAsCisJCQkgICAgICBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwsIE5VTEwpOworCWlmIChjMmRldi0+aG9zdF9tc2dfY2FjaGUgPT0gTlVMTCkgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdnFfdGVybShzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koYzJkZXYtPmhvc3RfbXNnX2NhY2hlKTsKK30KKworLyogdnFfcmVxX2FsbG9jIC0gYWxsb2NhdGUgYSBWUSBSZXF1ZXN0IE9iamVjdCBhbmQgaW5pdGlhbGl6ZSBpdC4KKyAqIFRoZSByZWZjbnQgaXMgc2V0IHRvIDEuCisgKi8KK3N0cnVjdCBjMl92cV9yZXEgKnZxX3JlcV9hbGxvYyhzdHJ1Y3QgYzJfZGV2ICpjMmRldikKK3sKKwlzdHJ1Y3QgYzJfdnFfcmVxICpyOworCisJciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjMl92cV9yZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAocikgeworCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyLT53YWl0X29iamVjdCk7CisJCXItPnJlcGx5X21zZyA9ICh1NjQpIE5VTEw7CisJCXItPmV2ZW50ID0gMDsKKwkJci0+Y21faWQgPSBOVUxMOworCQlyLT5xcCA9IE5VTEw7CisJCWF0b21pY19zZXQoJnItPnJlZmNudCwgMSk7CisJCWF0b21pY19zZXQoJnItPnJlcGx5X3JlYWR5LCAwKTsKKwl9CisJcmV0dXJuIHI7Cit9CisKKworLyogdnFfcmVxX2ZyZWUgLSBmcmVlIHRoZSBWUSBSZXF1ZXN0IE9iamVjdC4gIEl0IGlzIGFzc3VtZWQgdGhlIHZlcmJzIGhhbmRsZXIKKyAqIGhhcyBhbHJlYWR5IGZyZWUgdGhlIFZRIFJlcGx5IEJ1ZmZlciBpZiBpdCBleGlzdGVkLgorICovCit2b2lkIHZxX3JlcV9mcmVlKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfdnFfcmVxICpyKQoreworCXItPnJlcGx5X21zZyA9ICh1NjQpIE5VTEw7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJlZmNudCkpIHsKKwkJa2ZyZWUocik7CisJfQorfQorCisvKiB2cV9yZXFfZ2V0IC0gcmVmZXJlbmNlIGEgVlEgUmVxdWVzdCBPYmplY3QuICBEb25lCisgKiBvbmx5IGluIHRoZSBrZXJuZWwgdmVyYnMgaGFuZGxlcnMuCisgKi8KK3ZvaWQgdnFfcmVxX2dldChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcikKK3sKKwlhdG9taWNfaW5jKCZyLT5yZWZjbnQpOworfQorCisKKy8qIHZxX3JlcV9wdXQgLSBkZXJlZmVyZW5jZSBhbmQgcG90ZW50aWFsbHkgZnJlZSBhIFZRIFJlcXVlc3QgT2JqZWN0LgorICoKKyAqIFRoaXMgaXMgb25seSBjYWxsZWQgYnkgaGFuZGxlX3ZxKCkgb24gdGhlCisgKiBpbnRlcnJ1cHQgd2hlbiBpdCBpcyBkb25lIHByb2Nlc3NpbmcKKyAqIGEgdmVyYiByZXBseSBtZXNzYWdlLiAgSWYgdGhlIGFzc29jaWF0ZWQKKyAqIGtlcm5lbCB2ZXJicyBoYW5kbGVyIGhhcyBhbHJlYWR5IGJhaWxlZCwKKyAqIHRoZW4gdGhpcyBwdXQgd2lsbCBhY3R1YWxseSBmcmVlIHRoZSBWUQorICogUmVxdWVzdCBvYmplY3QgX2FuZF8gdGhlIFZRIFJlcGx5IEJ1ZmZlcgorICogaWYgaXQgZXhpc3RzLgorICovCit2b2lkIHZxX3JlcV9wdXQoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl92cV9yZXEgKnIpCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnItPnJlZmNudCkpIHsKKwkJaWYgKHItPnJlcGx5X21zZyAhPSAodTY0KSBOVUxMKQorCQkJdnFfcmVwYnVmX2ZyZWUoYzJkZXYsCisJCQkJICAgICAgICh2b2lkICopICh1bnNpZ25lZCBsb25nKSByLT5yZXBseV9tc2cpOworCQlrZnJlZShyKTsKKwl9Cit9CisKKworLyoKKyAqIHZxX3JlcGJ1Zl9hbGxvYyAtIGFsbG9jYXRlIGEgVlEgUmVwbHkgQnVmZmVyLgorICovCit2b2lkICp2cV9yZXBidWZfYWxsb2Moc3RydWN0IGMyX2RldiAqYzJkZXYpCit7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoYzJkZXYtPmhvc3RfbXNnX2NhY2hlLCBTTEFCX0FUT01JQyk7Cit9CisKKy8qCisgKiB2cV9zZW5kX3dyIC0gcG9zdCBhIHZlcmJzIHJlcXVlc3QgbWVzc2FnZSB0byB0aGUgVmVyYnMgUmVxdWVzdCBRdWV1ZS4KKyAqIElmIGEgbWVzc2FnZSBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBNUSwgdGhlbiBibG9jayB1bnRpbCBvbmUgaXMgYXZhaWxhYmxlLgorICogTk9URTogaGFuZGxlX21xKCkgb24gdGhlIGludGVycnVwdCBjb250ZXh0IHdpbGwgd2FrZSB1cCB0aHJlYWRzIGJsb2NrZWQgaGVyZS4KKyAqIFdoZW4gdGhlIGFkYXB0ZXIgZHJhaW5zIHRoZSBWZXJicyBSZXF1ZXN0IFF1ZXVlLAorICogaXQgaW5zZXJ0cyBNUSBpbmRleCAwIGluIHRvIHRoZQorICogYWRhcHRlci0+aG9zdCBhY3Rpdml0eSBmaWZvIGFuZCBpbnRlcnJ1cHRzIHRoZSBob3N0LgorICovCitpbnQgdnFfc2VuZF93cihzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdW5pb24gYzJ3ciAqd3IpCit7CisJdm9pZCAqbXNnOworCXdhaXRfcXVldWVfdCBfX3dhaXQ7CisKKwkvKgorCSAqIGdyYWIgYWRhcHRlciB2cSBsb2NrCisJICovCisJc3Bpbl9sb2NrKCZjMmRldi0+dnFsb2NrKTsKKworCS8qCisJICogYWxsb2NhdGUgbXNnCisJICovCisJbXNnID0gYzJfbXFfYWxsb2MoJmMyZGV2LT5yZXFfdnEpOworCisJLyoKKwkgKiBJZiB3ZSBjYW5ub3QgZ2V0IGEgbXNnLCB0aGVuIHdlJ2xsIHdhaXQKKwkgKiBXaGVuIGEgbWVzc2FnZXMgYXJlIGF2YWlsYWJsZSwgdGhlIGludCBoYW5kbGVyIHdpbGwgd2FrZV91cCgpCisJICogYW55IHdhaXRlcnMuCisJICovCisJd2hpbGUgKG1zZyA9PSBOVUxMKSB7CisJCXByX2RlYnVnKCIlczolZCBubyBhdmFpbGFibGUgbXNnIGluIFZRLCB3YWl0aW5nLi4uXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXyk7CisJCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZfX3dhaXQsIGN1cnJlbnQpOworCQlhZGRfd2FpdF9xdWV1ZSgmYzJkZXYtPnJlcV92cV93bywgJl9fd2FpdCk7CisJCXNwaW5fdW5sb2NrKCZjMmRldi0+dnFsb2NrKTsKKwkJZm9yICg7OykgeworCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKKwkJCWlmICghYzJfbXFfZnVsbCgmYzJkZXYtPnJlcV92cSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQlzY2hlZHVsZV90aW1lb3V0KDEgKiBIWik7CS8qIDEgc2Vjb25kLi4uICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmMyZGV2LT5yZXFfdnFfd28sICZfX3dhaXQpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCQlyZW1vdmVfd2FpdF9xdWV1ZSgmYzJkZXYtPnJlcV92cV93bywgJl9fd2FpdCk7CisJCXNwaW5fbG9jaygmYzJkZXYtPnZxbG9jayk7CisJCW1zZyA9IGMyX21xX2FsbG9jKCZjMmRldi0+cmVxX3ZxKTsKKwl9CisKKwkvKgorCSAqIGNvcHkgd3IgaW50byBhZGFwdGVyIG1zZworCSAqLworCW1lbWNweShtc2csIHdyLCBjMmRldi0+cmVxX3ZxLm1zZ19zaXplKTsKKworCS8qCisJICogcG9zdCBtc2cKKwkgKi8KKwljMl9tcV9wcm9kdWNlKCZjMmRldi0+cmVxX3ZxKTsKKworCS8qCisJICogcmVsZWFzZSBhZGFwdGVyIHZxIGxvY2sKKwkgKi8KKwlzcGluX3VubG9jaygmYzJkZXYtPnZxbG9jayk7CisJcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIHZxX3dhaXRfZm9yX3JlcGx5IC0gYmxvY2sgdW50aWwgdGhlIGFkYXB0ZXIgcG9zdHMgYSBWZXJiIFJlcGx5IE1lc3NhZ2UuCisgKi8KK2ludCB2cV93YWl0X2Zvcl9yZXBseShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcmVxKQoreworCWlmICghd2FpdF9ldmVudF90aW1lb3V0KHJlcS0+d2FpdF9vYmplY3QsCisJCQkJYXRvbWljX3JlYWQoJnJlcS0+cmVwbHlfcmVhZHkpLAorCQkJCTYwKkhaKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIHZxX3JlcGJ1Zl9mcmVlIC0gRnJlZSBhIFZlcmJzIFJlcGx5IEJ1ZmZlci4KKyAqLwordm9pZCB2cV9yZXBidWZfZnJlZShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgdm9pZCAqcmVwbHkpCit7CisJa21lbV9jYWNoZV9mcmVlKGMyZGV2LT5ob3N0X21zZ19jYWNoZSwgcmVwbHkpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfdnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzgwNTYyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3ZxLmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX0MyX1ZRX0hfCisjZGVmaW5lIF9DMl9WUV9IXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSAiYzIuaCIKKyNpbmNsdWRlICJjMl93ci5oIgorI2luY2x1ZGUgImMyX3Byb3ZpZGVyLmgiCisKK3N0cnVjdCBjMl92cV9yZXEgeworCXU2NCByZXBseV9tc2c7CQkvKiBwdHIgdG8gcmVwbHkgbXNnICovCisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9vYmplY3Q7CS8qIHdhaXQgb2JqZWN0IGZvciB2cSByZXFzICovCisJYXRvbWljX3QgcmVwbHlfcmVhZHk7CS8qIHNldCB3aGVuIHJlcGx5IGlzIHJlYWR5ICovCisJYXRvbWljX3QgcmVmY250OwkvKiB1c2VkIHRvIGNhbmNlbCBXUnMuLi4gKi8KKwlpbnQgZXZlbnQ7CisJc3RydWN0IGl3X2NtX2lkICpjbV9pZDsKKwlzdHJ1Y3QgYzJfcXAgKnFwOworfTsKKworZXh0ZXJuIGludCB2cV9pbml0KHN0cnVjdCBjMl9kZXYgKmMyZGV2KTsKK2V4dGVybiB2b2lkIHZxX3Rlcm0oc3RydWN0IGMyX2RldiAqYzJkZXYpOworCitleHRlcm4gc3RydWN0IGMyX3ZxX3JlcSAqdnFfcmVxX2FsbG9jKHN0cnVjdCBjMl9kZXYgKmMyZGV2KTsKK2V4dGVybiB2b2lkIHZxX3JlcV9mcmVlKHN0cnVjdCBjMl9kZXYgKmMyZGV2LCBzdHJ1Y3QgYzJfdnFfcmVxICpyZXEpOworZXh0ZXJuIHZvaWQgdnFfcmVxX2dldChzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcmVxKTsKK2V4dGVybiB2b2lkIHZxX3JlcV9wdXQoc3RydWN0IGMyX2RldiAqYzJkZXYsIHN0cnVjdCBjMl92cV9yZXEgKnJlcSk7CitleHRlcm4gaW50IHZxX3NlbmRfd3Ioc3RydWN0IGMyX2RldiAqYzJkZXYsIHVuaW9uIGMyd3IgKiB3cik7CisKK2V4dGVybiB2b2lkICp2cV9yZXBidWZfYWxsb2Moc3RydWN0IGMyX2RldiAqYzJkZXYpOworZXh0ZXJuIHZvaWQgdnFfcmVwYnVmX2ZyZWUoc3RydWN0IGMyX2RldiAqYzJkZXYsIHZvaWQgKnJlcGx5KTsKKworZXh0ZXJuIGludCB2cV93YWl0X2Zvcl9yZXBseShzdHJ1Y3QgYzJfZGV2ICpjMmRldiwgc3RydWN0IGMyX3ZxX3JlcSAqcmVxKTsKKyNlbmRpZgkJCQkvKiBfQzJfVlFfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3dyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VjNmM0MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl93ci5oCkBAIC0wLDAgKzEsMTUyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBBbW1hc3NvLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgT3BlbiBHcmlkIENvbXB1dGluZywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKyNpZm5kZWYgX0MyX1dSX0hfCisjZGVmaW5lIF9DMl9XUl9IXworCisjaWZkZWYgQ0NERUJVRworI2RlZmluZSBDQ1dSX01BR0lDCQkweGIwNzcwMGIwCisjZW5kaWYKKworI2RlZmluZSBDMl9RUF9OT19BVFRSX0NIQU5HRSAweEZGRkZGRkZGCisKKy8qIE1heGltdW0gYWxsb3dlZCBzaXplIGluIGJ5dGVzIG9mIHByaXZhdGVfZGF0YSBleGNoYW5nZQorICogb24gY29ubmVjdC4KKyAqLworI2RlZmluZSBDMl9NQVhfUFJJVkFURV9EQVRBX1NJWkUgMjAwCisKKy8qCisgKiBUaGVzZSB0eXBlcyBhcmUgc2hhcmVkIGFtb25nIHRoZSBhZGFwdGVyLCBob3N0LCBhbmQgQ0NJTCBjb25zdW1lci4KKyAqLworZW51bSBjMl9jcV9ub3RpZmljYXRpb25fdHlwZSB7CisJQzJfQ1FfTk9USUZJQ0FUSU9OX1RZUEVfTk9ORSA9IDEsCisJQzJfQ1FfTk9USUZJQ0FUSU9OX1RZUEVfTkVYVCwKKwlDMl9DUV9OT1RJRklDQVRJT05fVFlQRV9ORVhUX1NFCit9OworCitlbnVtIGMyX3NldGNvbmZpZ19jbWQgeworCUMyX0NGR19BRERfQUREUiA9IDEsCisJQzJfQ0ZHX0RFTF9BRERSID0gMiwKKwlDMl9DRkdfQUREX1JPVVRFID0gMywKKwlDMl9DRkdfREVMX1JPVVRFID0gNAorfTsKKworZW51bSBjMl9nZXRjb25maWdfY21kIHsKKwlDMl9HRVRDT05GSUdfUk9VVEVTID0gMSwKKwlDMl9HRVRDT05GSUdfQUREUlMKK307CisKKy8qCisgKiAgQ0NJTCBXb3JrIFJlcXVlc3QgSWRlbnRpZmllcnMKKyAqLworZW51bSBjMndyX2lkcyB7CisJQ0NXUl9STklDX09QRU4gPSAxLAorCUNDV1JfUk5JQ19RVUVSWSwKKwlDQ1dSX1JOSUNfU0VUQ09ORklHLAorCUNDV1JfUk5JQ19HRVRDT05GSUcsCisJQ0NXUl9STklDX0NMT1NFLAorCUNDV1JfQ1FfQ1JFQVRFLAorCUNDV1JfQ1FfUVVFUlksCisJQ0NXUl9DUV9NT0RJRlksCisJQ0NXUl9DUV9ERVNUUk9ZLAorCUNDV1JfUVBfQ09OTkVDVCwKKwlDQ1dSX1BEX0FMTE9DLAorCUNDV1JfUERfREVBTExPQywKKwlDQ1dSX1NSUV9DUkVBVEUsCisJQ0NXUl9TUlFfUVVFUlksCisJQ0NXUl9TUlFfTU9ESUZZLAorCUNDV1JfU1JRX0RFU1RST1ksCisJQ0NXUl9RUF9DUkVBVEUsCisJQ0NXUl9RUF9RVUVSWSwKKwlDQ1dSX1FQX01PRElGWSwKKwlDQ1dSX1FQX0RFU1RST1ksCisJQ0NXUl9OU01SX1NUQUdfQUxMT0MsCisJQ0NXUl9OU01SX1JFR0lTVEVSLAorCUNDV1JfTlNNUl9QQkwsCisJQ0NXUl9TVEFHX0RFQUxMT0MsCisJQ0NXUl9OU01SX1JFUkVHSVNURVIsCisJQ0NXUl9TTVJfUkVHSVNURVIsCisJQ0NXUl9NUl9RVUVSWSwKKwlDQ1dSX01XX0FMTE9DLAorCUNDV1JfTVdfUVVFUlksCisJQ0NXUl9FUF9DUkVBVEUsCisJQ0NXUl9FUF9HRVRPUFQsCisJQ0NXUl9FUF9TRVRPUFQsCisJQ0NXUl9FUF9ERVNUUk9ZLAorCUNDV1JfRVBfQklORCwKKwlDQ1dSX0VQX0NPTk5FQ1QsCisJQ0NXUl9FUF9MSVNURU4sCisJQ0NXUl9FUF9TSFVURE9XTiwKKwlDQ1dSX0VQX0xJU1RFTl9DUkVBVEUsCisJQ0NXUl9FUF9MSVNURU5fREVTVFJPWSwKKwlDQ1dSX0VQX1FVRVJZLAorCUNDV1JfQ1JfQUNDRVBULAorCUNDV1JfQ1JfUkVKRUNULAorCUNDV1JfQ09OU09MRSwKKwlDQ1dSX1RFUk0sCisJQ0NXUl9GTEFTSF9JTklULAorCUNDV1JfRkxBU0gsCisJQ0NXUl9CVUZfQUxMT0MsCisJQ0NXUl9CVUZfRlJFRSwKKwlDQ1dSX0ZMQVNIX1dSSVRFLAorCUNDV1JfSU5JVCwJCS8qIFdBUk5JTkc6IERvbid0IG1vdmUgdGhpcyBldmVyIGFnYWluISAqLworCisKKworCS8qIEFkZCBuZXcgSURzIGhlcmUgKi8KKworCisKKwkvKgorCSAqIFdBUk5JTkc6IENDV1JfTEFTVCBtdXN0IGFsd2F5cyBiZSB0aGUgbGFzdCB2ZXJicyBpZCBkZWZpbmVkIQorCSAqICAgICAgICAgIEFsbCB0aGUgcHJlY2VkaW5nIElEcyBhcmUgZml4ZWQsIGFuZCBtdXN0IG5vdCBjaGFuZ2UuCisJICogICAgICAgICAgWW91IGNhbiBhZGQgbmV3IElEcywgYnV0IG11c3Qgbm90IHJlbW92ZSBvciByZW9yZGVyCisJICogICAgICAgICAgYW55IElEcy4gSWYgeW91IGRvLCBZT1Ugd2lsbCBydWluIGFueSBob3BlIG9mCisJICogICAgICAgICAgY29tcGF0YWJpbGl0eSBiZXR3ZWVuIHZlcnNpb25zLgorCSAqLworCUNDV1JfTEFTVCwKKworCS8qCisJICogU3RhcnQgb3ZlciBhdCAxIHNvIHRoYXQgYXJyYXlzIGluZGV4ZWQgYnkgdXNlciB3ciBpZCdzCisJICogYmVnaW4gYXQgMS4gIFRoaXMgaXMgT0sgc2luY2UgdGhlIHZlcmJzIGFuZCB1c2VyIHdyIGlkJ3MKKwkgKiBhcmUgYWx3YXlzIHVzZWQgb24gZGlzam9pbnQgc2V0cyBvZiBxdWV1ZXMuCisJICovCisJLyoKKwkgKiBUaGUgb3JkZXIgb2YgdGhlIENDV1JfU0VORF9YWCB2ZXJicyBtdXN0CisJICogbWF0Y2ggdGhlIG9yZGVyIG9mIHRoZSBSRE1BX09QcworCSAqLworCUNDV1JfU0VORCA9IDEsCisJQ0NXUl9TRU5EX0lOViwKKwlDQ1dSX1NFTkRfU0UsCisJQ0NXUl9TRU5EX1NFX0lOViwKKwlDQ1dSX1JETUFfV1JJVEUsCisJQ0NXUl9SRE1BX1JFQUQsCisJQ0NXUl9SRE1BX1JFQURfSU5WLAorCUNDV1JfTVdfQklORCwKKwlDQ1dSX05TTVJfRkFTVFJFRywKKwlDQ1dSX1NUQUdfSU5WQUxJREFURSwKKwlDQ1dSX1JFQ1YsCisJQ0NXUl9OT1AsCisJQ0NXUl9VTklNUEwsCisvKiBXQVJOSU5HOiBUaGlzIG11c3QgYWx3YXlzIGJlIHRoZSBsYXN0IHVzZXIgd3IgaWQgZGVmaW5lZCEgKi8KK307CisjZGVmaW5lIFJETUFfU0VORF9PUENPREVfRlJPTV9XUl9JRCh4KSAgICh4KzIpCisKKy8qCisgKiBTUS9SUSBXb3JrIFJlcXVlc3QgVHlwZXMKKyAqLworZW51bSBjMl93cl90eXBlIHsKKwlDMl9XUl9UWVBFX1NFTkQgPSBDQ1dSX1NFTkQsCisJQzJfV1JfVFlQRV9TRU5EX1NFID0gQ0NXUl9TRU5EX1NFLAorCUMyX1dSX1RZUEVfU0VORF9JTlYgPSBDQ1dSX1NFTkRfSU5WLAorCUMyX1dSX1RZUEVfU0VORF9TRV9JTlYgPSBDQ1dSX1NFTkRfU0VfSU5WLAorCUMyX1dSX1RZUEVfUkRNQV9XUklURSA9IENDV1JfUkRNQV9XUklURSwKKwlDMl9XUl9UWVBFX1JETUFfUkVBRCA9IENDV1JfUkRNQV9SRUFELAorCUMyX1dSX1RZUEVfUkRNQV9SRUFEX0lOVl9TVEFHID0gQ0NXUl9SRE1BX1JFQURfSU5WLAorCUMyX1dSX1RZUEVfQklORF9NVyA9IENDV1JfTVdfQklORCwKKwlDMl9XUl9UWVBFX0ZBU1RSRUdfTlNNUiA9IENDV1JfTlNNUl9GQVNUUkVHLAorCUMyX1dSX1RZUEVfSU5WX1NUQUcgPSBDQ1dSX1NUQUdfSU5WQUxJREFURSwKKwlDMl9XUl9UWVBFX1JFQ1YgPSBDQ1dSX1JFQ1YsCisJQzJfV1JfVFlQRV9OT1AgPSBDQ1dSX05PUCwKK307CisKK3N0cnVjdCBjMl9uZXRhZGRyIHsKKwl1MzIgaXBfYWRkcjsKKwl1MzIgbmV0bWFzazsKKwl1MzIgbXR1OworfTsKKworc3RydWN0IGMyX3JvdXRlIHsKKwl1MzIgaXBfYWRkcjsJCS8qIDAgaW5kaWNhdGVzIHRoZSBkZWZhdWx0IHJvdXRlICovCisJdTMyIG5ldG1hc2s7CQkvKiBuZXRtYXNrIGFzc29jaWF0ZWQgd2l0aCBkc3QgKi8KKwl1MzIgZmxhZ3M7CisJdW5pb24geworCQl1MzIgaXBhZGRyOwkvKiBhZGRyZXNzIG9mIHRoZSBuZXh0aG9wIGludGVyZmFjZSAqLworCQl1OCBlbmFkZHJbNl07CisJfSBuZXh0aG9wOworfTsKKworLyoKKyAqIEEgU2NhdHRlciBHYXRoZXIgRW50cnkuCisgKi8KK3N0cnVjdCBjMl9kYXRhX2FkZHIgeworCXUzMiBzdGFnOworCXUzMiBsZW5ndGg7CisJdTY0IHRvOworfTsKKworLyoKKyAqIE1SIGFuZCBNVyBmbGFncyB1c2VkIGJ5IHRoZSBjb25zdW1lciwgUkksIGFuZCBSTklDLgorICovCitlbnVtIGMyX21tX2ZsYWdzIHsKKwlNRU1fUkVNT1RFID0gMHgwMDAxLAkvKiBhbGxvdyBtdyBiaW5kcyB3aXRoIHJlbW90ZSBhY2Nlc3MuICovCisJTUVNX1ZBX0JBU0VEID0gMHgwMDAyLAkvKiBOb3QgWmVyby1iYXNlZCAqLworCU1FTV9QQkxfQ09NUExFVEUgPSAweDAwMDQsCS8qIFBCTCBhcnJheSBpcyBjb21wbGV0ZSBpbiB0aGlzIG1zZyAqLworCU1FTV9MT0NBTF9SRUFEID0gMHgwMDA4LAkvKiBhbGxvdyBsb2NhbCByZWFkcyAqLworCU1FTV9MT0NBTF9XUklURSA9IDB4MDAxMCwJLyogYWxsb3cgbG9jYWwgd3JpdGVzICovCisJTUVNX1JFTU9URV9SRUFEID0gMHgwMDIwLAkvKiBhbGxvdyByZW1vdGUgcmVhZHMgKi8KKwlNRU1fUkVNT1RFX1dSSVRFID0gMHgwMDQwLAkvKiBhbGxvdyByZW1vdGUgd3JpdGVzICovCisJTUVNX1dJTkRPV19CSU5EID0gMHgwMDgwLAkvKiBiaW5kcyBhbGxvd2VkICovCisJTUVNX1NIQVJFRCA9IDB4MDEwMCwJLyogc2V0IGlmIE1SIGlzIHNoYXJlZCAqLworCU1FTV9TVEFHX1ZBTElEID0gMHgwMjAwCS8qIHNldCBpZiBTVEFHIGlzIGluIHZhbGlkIHN0YXRlICovCit9OworCisvKgorICogQ0NJTCBBUEkgQUNGIGZsYWdzIGRlZmluZWQgaW4gdGVybXMgb2YgdGhlIGxvdyBsZXZlbCBtZW0gZmxhZ3MuCisgKiBUaGlzIG1pbmltaXplcyB0cmFuc2xhdGlvbiBuZWVkZWQgaW4gdGhlIHVzZXIgQVBJCisgKi8KK2VudW0gYzJfYWNmIHsKKwlDMl9BQ0ZfTE9DQUxfUkVBRCA9IE1FTV9MT0NBTF9SRUFELAorCUMyX0FDRl9MT0NBTF9XUklURSA9IE1FTV9MT0NBTF9XUklURSwKKwlDMl9BQ0ZfUkVNT1RFX1JFQUQgPSBNRU1fUkVNT1RFX1JFQUQsCisJQzJfQUNGX1JFTU9URV9XUklURSA9IE1FTV9SRU1PVEVfV1JJVEUsCisJQzJfQUNGX1dJTkRPV19CSU5EID0gTUVNX1dJTkRPV19CSU5ECit9OworCisvKgorICogSW1hZ2UgdHlwZXMgb2Ygb2JqZWN0cyB3cml0dGVuIHRvIGZsYXNoCisgKi8KKyNkZWZpbmUgQzJfRkxBU0hfSU1HX0JJVEZJTEUgMQorI2RlZmluZSBDMl9GTEFTSF9JTUdfT1BUSU9OX1JPTSAyCisjZGVmaW5lIEMyX0ZMQVNIX0lNR19WUEQgMworCisvKgorICogIHRvIGZpeCBidWcgMTgxNSB3ZSBkZWZpbmUgdGhlIG1heCBzaXplIGFsbG93YWJsZSBvZiB0aGUKKyAqICB0ZXJtaW5hdGUgbWVzc2FnZSAocGVyIHRoZSBJRVRGIHNwZWMpLlJlZmVyIHRvIHRoZSBJRVRGCisgKiAgcHJvdG9jYWwgc3BlY2lmaWNhdGlvbiwgc2VjdGlvbiAxMi4xLjYsIHBhZ2UgNjQpCisgKiAgVGhlIG1lc3NhZ2UgaXMgcHJlZml4ZWQgYnkgMjAgdHlwZXMgb2YgRERQIGluZm8uCisgKgorICogIFRoZW4gdGhlIG1lc3NhZ2UgaGFzIDYgYnl0ZXMgZm9yIHRoZSB0ZXJtaW5hdGUgY29udHJvbAorICogIGFuZCBERFAgc2VnbWVudCBsZW5ndGggaW5mbyBwbHVzIGEgRERQIGhlYWRlciAoZWl0aGVyCisgKiAgMTQgb3IgMTggYnl0cykgcGx1cyAyOCBieXRlcyBmb3IgdGhlIFJETUEgaGVhZGVyLgorICogIFRodXMgdGhlIG1heCBzaXplIGluOgorICogIDIwICsgKDYgKyAxOCArIDI4KSA9IDcyCisgKi8KKyNkZWZpbmUgQzJfTUFYX1RFUk1JTkFURV9NRVNTQUdFX1NJWkUgKDcyKQorCisvKgorICogQnVpbGQgU3RyaW5nIExlbmd0aC4gIEl0IG11c3QgYmUgdGhlIHNhbWUgYXMgQzJfQlVJTERfU1RSX0xFTiBpbiBjY2lsX2FwaS5oCisgKi8KKyNkZWZpbmUgV1JfQlVJTERfU1RSX0xFTiA2NAorCisvKgorICogV0FSTklORzogIEFsbCBvZiB0aGVzZSBzdHJ1Y3RzIG5lZWQgdG8gYWxpZ24gYW55IDY0Yml0IHR5cGVzIG9uCisgKiA2NCBiaXQgYm91bmRhcmllcyEgIDY0Yml0IHR5cGVzIGluY2x1ZGUgdTY0IGFuZCB1NjQuCisgKi8KKworLyoKKyAqIENsdXN0ZXJjb3JlIFdvcmsgUmVxdWVzdCBIZWFkZXIuICBCZSBzZW5zaXRpdmUgdG8gZmllbGQgbGF5b3V0CisgKiBhbmQgYWxpZ25tZW50LgorICovCitzdHJ1Y3QgYzJ3cl9oZHIgeworCS8qIHdxZV9jb3VudCBpcyBwYXJ0IG9mIHRoZSBjcWUuICBJdCBpcyBwdXQgaGVyZSBzbyB0aGUKKwkgKiBhZGFwdGVyIGNhbiB3cml0ZSB0byBpdCB3aGlsZSB0aGUgd3IgaXMgcGVuZGluZyB3aXRob3V0CisJICogY2xvYmJlcmluZyBwYXJ0IG9mIHRoZSB3ci4gIFRoaXMgd29yZCBuZWVkIG5vdCBiZSBkbWEnZAorCSAqIGZyb20gdGhlIGhvc3QgdG8gYWRhcHRlciBieSBsaWJjY2lsLCBidXQgd2UgY29weSBpdCBhbnl3YXkKKwkgKiB0byBtYWtlIHRoZSBtZW1jcHkgdG8gdGhlIGFkYXB0ZXIgYmV0dGVyIGFsaWduZWQuCisJICovCisJdTMyIHdxZV9jb3VudDsKKworCS8qIFB1dCB0aGVzZSBmaWVsZHMgbmV4dCBzbyB0aGF0IGxhdGVyIDMyLSBhbmQgNjQtYml0CisJICogcXVhbnRpdGllcyBhcmUgbmF0dXJhbGx5IGFsaWduZWQuCisJICovCisJdTggaWQ7CisJdTggcmVzdWx0OwkJLyogYWRhcHRlciAtPiBob3N0ICovCisJdTggc2dlX2NvdW50OwkJLyogaG9zdCAtPiBhZGFwdGVyICovCisJdTggZmxhZ3M7CQkvKiBob3N0IC0+IGFkYXB0ZXIgKi8KKworCXU2NCBjb250ZXh0OworI2lmZGVmIENDTVNHTUFHSUMKKwl1MzIgbWFnaWM7CisJdTMyIHBhZDsKKyNlbmRpZgorfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJOSUMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIFdSX1JOSUNfT1BFTgorICovCisKKy8qCisgKiBGbGFncyBmb3IgdGhlIFJOSUMgV1JzCisgKi8KK2VudW0gYzJfcm5pY19mbGFncyB7CisJUk5JQ19JUkRfU1RBVElDID0gMHgwMDAxLAorCVJOSUNfT1JEX1NUQVRJQyA9IDB4MDAwMiwKKwlSTklDX1FQX1NUQVRJQyA9IDB4MDAwNCwKKwlSTklDX1NSUV9TVVBQT1JURUQgPSAweDAwMDgsCisJUk5JQ19QQkxfQkxPQ0tfTU9ERSA9IDB4MDAxMCwKKwlSTklDX1NSUV9NT0RFTF9BUlJJVkFMID0gMHgwMDIwLAorCVJOSUNfQ1FfT1ZGX0RFVEVDVEVEID0gMHgwMDQwLAorCVJOSUNfUFJJVl9NT0RFID0gMHgwMDgwCit9OworCitzdHJ1Y3QgYzJ3cl9ybmljX29wZW5fcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCB1c2VyX2NvbnRleHQ7CisJdTE2IGZsYWdzOwkJLyogU2VlIGVudW0gYzJfcm5pY19mbGFncyAqLworCXUxNiBwb3J0X251bTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX3JuaWNfb3Blbl9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9ybmljX29wZW4geworCXN0cnVjdCBjMndyX3JuaWNfb3Blbl9yZXEgcmVxOworCXN0cnVjdCBjMndyX3JuaWNfb3Blbl9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3Jfcm5pY19xdWVyeV9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIFdSX1JOSUNfUVVFUlkKKyAqLworc3RydWN0IGMyd3Jfcm5pY19xdWVyeV9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTY0IHVzZXJfY29udGV4dDsKKwl1MzIgdmVuZG9yX2lkOworCXUzMiBwYXJ0X251bWJlcjsKKwl1MzIgaHdfdmVyc2lvbjsKKwl1MzIgZndfdmVyX21ham9yOworCXUzMiBmd192ZXJfbWlub3I7CisJdTMyIGZ3X3Zlcl9wYXRjaDsKKwljaGFyIGZ3X3Zlcl9idWlsZF9zdHJbV1JfQlVJTERfU1RSX0xFTl07CisJdTMyIG1heF9xcHM7CisJdTMyIG1heF9xcF9kZXB0aDsKKwl1MzIgbWF4X3NycV9kZXB0aDsKKwl1MzIgbWF4X3NlbmRfc2dsX2RlcHRoOworCXUzMiBtYXhfcmRtYV9zZ2xfZGVwdGg7CisJdTMyIG1heF9jcXM7CisJdTMyIG1heF9jcV9kZXB0aDsKKwl1MzIgbWF4X2NxX2V2ZW50X2hhbmRsZXJzOworCXUzMiBtYXhfbXJzOworCXUzMiBtYXhfcGJsX2RlcHRoOworCXUzMiBtYXhfcGRzOworCXUzMiBtYXhfZ2xvYmFsX2lyZDsKKwl1MzIgbWF4X2dsb2JhbF9vcmQ7CisJdTMyIG1heF9xcF9pcmQ7CisJdTMyIG1heF9xcF9vcmQ7CisJdTMyIGZsYWdzOworCXUzMiBtYXhfbXdzOworCXUzMiBwYmVfcmFuZ2VfbG93OworCXUzMiBwYmVfcmFuZ2VfaGlnaDsKKwl1MzIgbWF4X3NycXM7CisJdTMyIHBhZ2Vfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3Jfcm5pY19xdWVyeSB7CisJc3RydWN0IGMyd3Jfcm5pY19xdWVyeV9yZXEgcmVxOworCXN0cnVjdCBjMndyX3JuaWNfcXVlcnlfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBXUl9STklDX0dFVENPTkZJRworICovCisKK3N0cnVjdCBjMndyX3JuaWNfZ2V0Y29uZmlnX3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIG9wdGlvbjsJCS8qIHNlZSBjMl9nZXRjb25maWdfY21kX3QgKi8KKwl1NjQgcmVwbHlfYnVmOworCXUzMiByZXBseV9idWZfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3JuaWNfZ2V0Y29uZmlnX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgb3B0aW9uOwkJLyogc2VlIGMyX2dldGNvbmZpZ19jbWRfdCAqLworCXUzMiBjb3VudF9sZW47CQkvKiBsZW5ndGggb2YgdGhlIG51bWJlciBvZiBhZGRyZXNzZXMgY29uZmlndXJlZCAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3VuaW9uIGMyd3Jfcm5pY19nZXRjb25maWcgeworCXN0cnVjdCBjMndyX3JuaWNfZ2V0Y29uZmlnX3JlcSByZXE7CisJc3RydWN0IGMyd3Jfcm5pY19nZXRjb25maWdfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCisvKgorICogV1JfUk5JQ19TRVRDT05GSUcKKyAqLworc3RydWN0IGMyd3Jfcm5pY19zZXRjb25maWdfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgb3B0aW9uOwkJLyogU2VlIGMyX3NldGNvbmZpZ19jbWRfdCAqLworCS8qIHZhcmlhYmxlIGRhdGEgYW5kIHBhZC4gU2VlIGMyX25ldGFkZHIgYW5kIGMyX3JvdXRlICovCisJdTggZGF0YVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9ybmljX3NldGNvbmZpZyB7CisJc3RydWN0IGMyd3Jfcm5pY19zZXRjb25maWdfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9ybmljX3NldGNvbmZpZ19yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKKy8qCisgKiBXUl9STklDX0NMT1NFCisgKi8KK3N0cnVjdCBjMndyX3JuaWNfY2xvc2VfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9ybmljX2Nsb3NlX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3JuaWNfY2xvc2UgeworCXN0cnVjdCBjMndyX3JuaWNfY2xvc2VfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9ybmljX2Nsb3NlX3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIENRIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdHJ1Y3QgYzJ3cl9jcV9jcmVhdGVfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCBzaGFyZWRfaHQ7CisJdTY0IHVzZXJfY29udGV4dDsKKwl1NjQgbXNnX3Bvb2w7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBtc2dfc2l6ZTsKKwl1MzIgZGVwdGg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3JfY3FfY3JlYXRlX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgbXFfaW5kZXg7CisJdTMyIGFkYXB0ZXJfc2hhcmVkOworCXUzMiBjcV9oYW5kbGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9jcV9jcmVhdGUgeworCXN0cnVjdCBjMndyX2NxX2NyZWF0ZV9yZXEgcmVxOworCXN0cnVjdCBjMndyX2NxX2NyZWF0ZV9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX2NxX21vZGlmeV9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBjcV9oYW5kbGU7CisJdTMyIG5ld19kZXB0aDsKKwl1NjQgbmV3X21zZ19wb29sOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX2NxX21vZGlmeV9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9jcV9tb2RpZnkgeworCXN0cnVjdCBjMndyX2NxX21vZGlmeV9yZXEgcmVxOworCXN0cnVjdCBjMndyX2NxX21vZGlmeV9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX2NxX2Rlc3Ryb3lfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgY3FfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX2NxX2Rlc3Ryb3lfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3VuaW9uIGMyd3JfY3FfZGVzdHJveSB7CisJc3RydWN0IGMyd3JfY3FfZGVzdHJveV9yZXEgcmVxOworCXN0cnVjdCBjMndyX2NxX2Rlc3Ryb3lfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCisvKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUEQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3N0cnVjdCBjMndyX3BkX2FsbG9jX3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIHBkX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3BkX2FsbG9jX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3BkX2FsbG9jIHsKKwlzdHJ1Y3QgYzJ3cl9wZF9hbGxvY19yZXEgcmVxOworCXN0cnVjdCBjMndyX3BkX2FsbG9jX3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3JfcGRfZGVhbGxvY19yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBwZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9wZF9kZWFsbG9jX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3BkX2RlYWxsb2MgeworCXN0cnVjdCBjMndyX3BkX2RlYWxsb2NfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9wZF9kZWFsbG9jX3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNSUSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RydWN0IGMyd3Jfc3JxX2NyZWF0ZV9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTY0IHNoYXJlZF9odDsKKwl1NjQgdXNlcl9jb250ZXh0OworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgc3JxX2RlcHRoOworCXUzMiBzcnFfbGltaXQ7CisJdTMyIHNnbF9kZXB0aDsKKwl1MzIgcGRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3Jfc3JxX2NyZWF0ZV9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHNycV9kZXB0aDsKKwl1MzIgc2dsX2RlcHRoOworCXUzMiBtc2dfc2l6ZTsKKwl1MzIgbXFfaW5kZXg7CisJdTMyIG1xX3N0YXJ0OworCXUzMiBzcnFfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3VuaW9uIGMyd3Jfc3JxX2NyZWF0ZSB7CisJc3RydWN0IGMyd3Jfc3JxX2NyZWF0ZV9yZXEgcmVxOworCXN0cnVjdCBjMndyX3NycV9jcmVhdGVfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9zcnFfZGVzdHJveV9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBzcnFfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3NycV9kZXN0cm95X3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3NycV9kZXN0cm95IHsKKwlzdHJ1Y3QgYzJ3cl9zcnFfZGVzdHJveV9yZXEgcmVxOworCXN0cnVjdCBjMndyX3NycV9kZXN0cm95X3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFFQIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitlbnVtIGMyd3JfcXBfZmxhZ3MgeworCVFQX1JETUFfUkVBRCA9IDB4MDAwMDAwMDEsCS8qIFJETUEgcmVhZCBlbmFibGVkPyAqLworCVFQX1JETUFfV1JJVEUgPSAweDAwMDAwMDAyLAkvKiBSRE1BIHdyaXRlIGVuYWJsZWQ/ICovCisJUVBfTVdfQklORCA9IDB4MDAwMDAwMDQsCS8qIE1XcyBlbmFibGVkICovCisJUVBfWkVST19TVEFHID0gMHgwMDAwMDAwOCwJLyogZW5hYmxlZD8gKi8KKwlRUF9SRU1PVEVfVEVSTUlOQVRJT04gPSAweDAwMDAwMDEwLAkvKiByZW1vdGUgZW5kIHRlcm1pbmF0ZWQgKi8KKwlRUF9SRE1BX1JFQURfUkVTUE9OU0UgPSAweDAwMDAwMDIwCS8qIFJlbW90ZSBSRE1BIHJlYWQgICovCisJICAgIC8qIGVuYWJsZWQ/ICovCit9OworCitzdHJ1Y3QgYzJ3cl9xcF9jcmVhdGVfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCBzaGFyZWRfc3FfaHQ7CisJdTY0IHNoYXJlZF9ycV9odDsKKwl1NjQgdXNlcl9jb250ZXh0OworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgc3FfY3FfaGFuZGxlOworCXUzMiBycV9jcV9oYW5kbGU7CisJdTMyIHNxX2RlcHRoOworCXUzMiBycV9kZXB0aDsKKwl1MzIgc3JxX2hhbmRsZTsKKwl1MzIgc3JxX2xpbWl0OworCXUzMiBmbGFnczsJCS8qIHNlZSBlbnVtIGMyd3JfcXBfZmxhZ3MgKi8KKwl1MzIgc2VuZF9zZ2xfZGVwdGg7CisJdTMyIHJlY3Zfc2dsX2RlcHRoOworCXUzMiByZG1hX3dyaXRlX3NnbF9kZXB0aDsKKwl1MzIgb3JkOworCXUzMiBpcmQ7CisJdTMyIHBkX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3FwX2NyZWF0ZV9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHNxX2RlcHRoOworCXUzMiBycV9kZXB0aDsKKwl1MzIgc2VuZF9zZ2xfZGVwdGg7CisJdTMyIHJlY3Zfc2dsX2RlcHRoOworCXUzMiByZG1hX3dyaXRlX3NnbF9kZXB0aDsKKwl1MzIgb3JkOworCXUzMiBpcmQ7CisJdTMyIHNxX21zZ19zaXplOworCXUzMiBzcV9tcV9pbmRleDsKKwl1MzIgc3FfbXFfc3RhcnQ7CisJdTMyIHJxX21zZ19zaXplOworCXUzMiBycV9tcV9pbmRleDsKKwl1MzIgcnFfbXFfc3RhcnQ7CisJdTMyIHFwX2hhbmRsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3FwX2NyZWF0ZSB7CisJc3RydWN0IGMyd3JfcXBfY3JlYXRlX3JlcSByZXE7CisJc3RydWN0IGMyd3JfcXBfY3JlYXRlX3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3JfcXBfcXVlcnlfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgcXBfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3FwX3F1ZXJ5X3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1NjQgdXNlcl9jb250ZXh0OworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgc3FfZGVwdGg7CisJdTMyIHJxX2RlcHRoOworCXUzMiBzZW5kX3NnbF9kZXB0aDsKKwl1MzIgcmRtYV93cml0ZV9zZ2xfZGVwdGg7CisJdTMyIHJlY3Zfc2dsX2RlcHRoOworCXUzMiBvcmQ7CisJdTMyIGlyZDsKKwl1MTYgcXBfc3RhdGU7CisJdTE2IGZsYWdzOwkJLyogc2VlIGMyd3JfcXBfZmxhZ3NfdCAqLworCXUzMiBxcF9pZDsKKwl1MzIgbG9jYWxfYWRkcjsKKwl1MzIgcmVtb3RlX2FkZHI7CisJdTE2IGxvY2FsX3BvcnQ7CisJdTE2IHJlbW90ZV9wb3J0OworCXUzMiB0ZXJtaW5hdGVfbXNnX2xlbmd0aDsJLyogMCBpZiBub3QgcHJlc2VudCAqLworCXU4IGRhdGFbMF07CisJLyogVGVybWluYXRlIE1lc3NhZ2UgaW4tbGluZSBoZXJlLiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3VuaW9uIGMyd3JfcXBfcXVlcnkgeworCXN0cnVjdCBjMndyX3FwX3F1ZXJ5X3JlcSByZXE7CisJc3RydWN0IGMyd3JfcXBfcXVlcnlfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9xcF9tb2RpZnlfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCBzdHJlYW1fbXNnOworCXUzMiBzdHJlYW1fbXNnX2xlbmd0aDsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIHFwX2hhbmRsZTsKKwl1MzIgbmV4dF9xcF9zdGF0ZTsKKwl1MzIgb3JkOworCXUzMiBpcmQ7CisJdTMyIHNxX2RlcHRoOworCXUzMiBycV9kZXB0aDsKKwl1MzIgbGxwX2VwX2hhbmRsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9xcF9tb2RpZnlfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBvcmQ7CisJdTMyIGlyZDsKKwl1MzIgc3FfZGVwdGg7CisJdTMyIHJxX2RlcHRoOworCXUzMiBzcV9tc2dfc2l6ZTsKKwl1MzIgc3FfbXFfaW5kZXg7CisJdTMyIHNxX21xX3N0YXJ0OworCXUzMiBycV9tc2dfc2l6ZTsKKwl1MzIgcnFfbXFfaW5kZXg7CisJdTMyIHJxX21xX3N0YXJ0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3VuaW9uIGMyd3JfcXBfbW9kaWZ5IHsKKwlzdHJ1Y3QgYzJ3cl9xcF9tb2RpZnlfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9xcF9tb2RpZnlfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9xcF9kZXN0cm95X3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIHFwX2hhbmRsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9xcF9kZXN0cm95X3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3FwX2Rlc3Ryb3kgeworCXN0cnVjdCBjMndyX3FwX2Rlc3Ryb3lfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9xcF9kZXN0cm95X3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworLyoKKyAqIFRoZSBDQ1dSX1FQX0NPTk5FQ1QgbXNnIGlzIHBvc3RlZCBvbiB0aGUgdmVyYnMgcmVxdWVzdCBxdWV1ZS4gIEl0IGNhbgorICogb25seSBiZSBwb3N0ZWQgd2hlbiBhIFFQIGlzIGluIElETEUgc3RhdGUuICBBZnRlciB0aGUgY29ubmVjdCByZXF1ZXN0IGlzCisgKiBzdWJtaXR0ZWQgdG8gdGhlIExMUCwgdGhlIGFkYXB0ZXIgbW92ZXMgdGhlIFFQIHRvIENPTk5FQ1RfUEVORElORyBzdGF0ZS4KKyAqIE5vIHN5bmNocm9ub3VzIHJlcGx5IGZyb20gYWRhcHRlciB0byB0aGlzIFdSLiAgVGhlIHJlc3VsdHMgb2YKKyAqIGNvbm5lY3Rpb24gYXJlIHBhc3NlZCBiYWNrIGluIGFuIGFzeW5jIGV2ZW50IENDQUVfQUNUSVZFX0NPTk5FQ1RfUkVTVUxUUworICogU2VlIGMyd3JfYWVfYWN0aXZlX2Nvbm5lY3RfcmVzdWx0c190CisgKi8KK3N0cnVjdCBjMndyX3FwX2Nvbm5lY3RfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgcXBfaGFuZGxlOworCXUzMiByZW1vdGVfYWRkcjsKKwl1MTYgcmVtb3RlX3BvcnQ7CisJdTE2IHBhZDsKKwl1MzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKKwl1OCBwcml2YXRlX2RhdGFbMF07CS8qIFByaXZhdGUgZGF0YSBpbi1saW5lLiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3FwX2Nvbm5lY3QgeworCXN0cnVjdCBjMndyX3FwX2Nvbm5lY3RfcmVxIHJlcTsKKwkvKiBubyBzeW5jaHJvbm91cyByZXBseS4gICAgICAgICAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKKworLyoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1NIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK3N0cnVjdCBjMndyX25zbXJfc3RhZ19hbGxvY19yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBwYmxfZGVwdGg7CisJdTMyIHBkX2lkOworCXUzMiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9uc21yX3N0YWdfYWxsb2NfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBwYmxfZGVwdGg7CisJdTMyIHN0YWdfaW5kZXg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9uc21yX3N0YWdfYWxsb2MgeworCXN0cnVjdCBjMndyX25zbXJfc3RhZ19hbGxvY19yZXEgcmVxOworCXN0cnVjdCBjMndyX25zbXJfc3RhZ19hbGxvY19yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX25zbXJfcmVnaXN0ZXJfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCB2YTsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTE2IGZsYWdzOworCXU4IHN0YWdfa2V5OworCXU4IHBhZDsKKwl1MzIgcGRfaWQ7CisJdTMyIHBibF9kZXB0aDsKKwl1MzIgcGJlX3NpemU7CisJdTMyIGZibzsKKwl1MzIgbGVuZ3RoOworCXUzMiBhZGRyc19sZW5ndGg7CisJLyogYXJyYXkgb2YgcGFkZHJzIChtdXN0IGJlIGFsaWduZWQgb24gYSA2NGJpdCBib3VuZGFyeSkgKi8KKwl1NjQgcGFkZHJzWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX25zbXJfcmVnaXN0ZXJfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBwYmxfZGVwdGg7CisJdTMyIHN0YWdfaW5kZXg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9uc21yX3JlZ2lzdGVyIHsKKwlzdHJ1Y3QgYzJ3cl9uc21yX3JlZ2lzdGVyX3JlcSByZXE7CisJc3RydWN0IGMyd3JfbnNtcl9yZWdpc3Rlcl9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX25zbXJfcGJsX3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIGZsYWdzOworCXUzMiBzdGFnX2luZGV4OworCXUzMiBhZGRyc19sZW5ndGg7CisJLyogYXJyYXkgb2YgcGFkZHJzIChtdXN0IGJlIGFsaWduZWQgb24gYSA2NGJpdCBib3VuZGFyeSkgKi8KKwl1NjQgcGFkZHJzWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX25zbXJfcGJsX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX25zbXJfcGJsIHsKKwlzdHJ1Y3QgYzJ3cl9uc21yX3BibF9yZXEgcmVxOworCXN0cnVjdCBjMndyX25zbXJfcGJsX3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3JfbXJfcXVlcnlfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgc3RhZ19pbmRleDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9tcl9xdWVyeV9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTggc3RhZ19rZXk7CisJdTggcGFkWzNdOworCXUzMiBwZF9pZDsKKwl1MzIgZmxhZ3M7CisJdTMyIHBibF9kZXB0aDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX21yX3F1ZXJ5IHsKKwlzdHJ1Y3QgYzJ3cl9tcl9xdWVyeV9yZXEgcmVxOworCXN0cnVjdCBjMndyX21yX3F1ZXJ5X3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3JfbXdfcXVlcnlfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgc3RhZ19pbmRleDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9td19xdWVyeV9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTggc3RhZ19rZXk7CisJdTggcGFkWzNdOworCXUzMiBwZF9pZDsKKwl1MzIgZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9td19xdWVyeSB7CisJc3RydWN0IGMyd3JfbXdfcXVlcnlfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9td19xdWVyeV9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKKworc3RydWN0IGMyd3Jfc3RhZ19kZWFsbG9jX3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIHN0YWdfaW5kZXg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3Jfc3RhZ19kZWFsbG9jX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCit1bmlvbiBjMndyX3N0YWdfZGVhbGxvYyB7CisJc3RydWN0IGMyd3Jfc3RhZ19kZWFsbG9jX3JlcSByZXE7CisJc3RydWN0IGMyd3Jfc3RhZ19kZWFsbG9jX3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworc3RydWN0IGMyd3JfbnNtcl9yZXJlZ2lzdGVyX3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1NjQgdmE7CisJdTMyIHJuaWNfaGFuZGxlOworCXUxNiBmbGFnczsKKwl1OCBzdGFnX2tleTsKKwl1OCBwYWQ7CisJdTMyIHN0YWdfaW5kZXg7CisJdTMyIHBkX2lkOworCXUzMiBwYmxfZGVwdGg7CisJdTMyIHBiZV9zaXplOworCXUzMiBmYm87CisJdTMyIGxlbmd0aDsKKwl1MzIgYWRkcnNfbGVuZ3RoOworCXUzMiBwYWQxOworCS8qIGFycmF5IG9mIHBhZGRycyAobXVzdCBiZSBhbGlnbmVkIG9uIGEgNjRiaXQgYm91bmRhcnkpICovCisJdTY0IHBhZGRyc1swXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9uc21yX3JlcmVnaXN0ZXJfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBwYmxfZGVwdGg7CisJdTMyIHN0YWdfaW5kZXg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9uc21yX3JlcmVnaXN0ZXIgeworCXN0cnVjdCBjMndyX25zbXJfcmVyZWdpc3Rlcl9yZXEgcmVxOworCXN0cnVjdCBjMndyX25zbXJfcmVyZWdpc3Rlcl9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3N0cnVjdCBjMndyX3Ntcl9yZWdpc3Rlcl9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTY0IHZhOworCXUzMiBybmljX2hhbmRsZTsKKwl1MTYgZmxhZ3M7CisJdTggc3RhZ19rZXk7CisJdTggcGFkOworCXUzMiBzdGFnX2luZGV4OworCXUzMiBwZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9zbXJfcmVnaXN0ZXJfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBzdGFnX2luZGV4OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKK3VuaW9uIGMyd3Jfc21yX3JlZ2lzdGVyIHsKKwlzdHJ1Y3QgYzJ3cl9zbXJfcmVnaXN0ZXJfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9zbXJfcmVnaXN0ZXJfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9td19hbGxvY19yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBwZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitzdHJ1Y3QgYzJ3cl9td19hbGxvY19yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHN0YWdfaW5kZXg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKwordW5pb24gYzJ3cl9td19hbGxvYyB7CisJc3RydWN0IGMyd3JfbXdfYWxsb2NfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9td19hbGxvY19yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSA7CisKKy8qCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXUnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdHJ1Y3QgYzJ3cl91c2VyX2hkciB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsJCS8qIEhhcyBzdGF0dXMgYW5kIFdSIFR5cGUgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgOworCitlbnVtIGMyX3FwX3N0YXRlIHsKKwlDMl9RUF9TVEFURV9JRExFID0gMHgwMSwKKwlDMl9RUF9TVEFURV9DT05ORUNUSU5HID0gMHgwMiwKKwlDMl9RUF9TVEFURV9SVFMgPSAweDA0LAorCUMyX1FQX1NUQVRFX0NMT1NJTkcgPSAweDA4LAorCUMyX1FQX1NUQVRFX1RFUk1JTkFURSA9IDB4MTAsCisJQzJfUVBfU1RBVEVfRVJST1IgPSAweDIwLAorfTsKKworLyogQ29tcGxldGlvbiBxdWV1ZSBlbnRyeS4gKi8KK3N0cnVjdCBjMndyX2NlIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOwkJLyogSGFzIHN0YXR1cyBhbmQgV1IgVHlwZSAqLworCXU2NCBxcF91c2VyX2NvbnRleHQ7CS8qIGMyX3VzZXJfcXBfdCAqICovCisJdTMyIHFwX3N0YXRlOwkJLyogQ3VycmVudCBRUCBTdGF0ZSAqLworCXUzMiBoYW5kbGU7CQkvKiBRUElEIG9yIEVQIEhhbmRsZSAqLworCXUzMiBieXRlc19yY3ZkOwkJLyogdmFsaWQgZm9yIFJFQ1YgV0NzICovCisJdTMyIHN0YWc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIDsKKworCisvKgorICogRmxhZ3MgdXNlZCBmb3IgYWxsIHBvc3Qtc3EgV1JzLiAgVGhlc2UgbXVzdCBmaXQgaW4gdGhlIGZsYWdzCisgKiBmaWVsZCBvZiB0aGUgc3RydWN0IGMyd3JfaGRyIChlaWdodCBiaXRzKS4KKyAqLworZW51bSB7CisJU1FfU0lHTkFMRUQgPSAweDAxLAorCVNRX1JFQURfRkVOQ0UgPSAweDAyLAorCVNRX0ZFTkNFID0gMHgwNCwKK307CisKKy8qCisgKiBDb21tb24gZmllbGRzIGZvciBhbGwgcG9zdC1zcSBXUnMuICBOYW1lbHkgdGhlIHN0YW5kYXJkIGhlYWRlciBhbmQgYQorICogc2Vjb25kYXJ5IGhlYWRlciB3aXRoIGZpZWxkcyBjb21tb24gdG8gYWxsIHBvc3Qtc3EgV1JzLgorICovCitzdHJ1Y3QgYzJfc3FfaGRyIHsKKwlzdHJ1Y3QgYzJ3cl91c2VyX2hkciB1c2VyX2hkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBTYW1lIGFzIGFib3ZlIGJ1dCBmb3IgcG9zdC1ycSBXUnMuCisgKi8KK3N0cnVjdCBjMl9ycV9oZHIgeworCXN0cnVjdCBjMndyX3VzZXJfaGRyIHVzZXJfaGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIHVzZSB0aGUgc2FtZSBzdHJ1Y3QgZm9yIGFsbCBzZW5kcy4KKyAqLworc3RydWN0IGMyd3Jfc2VuZF9yZXEgeworCXN0cnVjdCBjMl9zcV9oZHIgc3FfaGRyOworCXUzMiBzZ2VfbGVuOworCXUzMiByZW1vdGVfc3RhZzsKKwl1OCBkYXRhWzBdOwkJLyogU0dFIGFycmF5ICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX3NlbmQgeworCXN0cnVjdCBjMndyX3NlbmRfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9jZSByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJ3cl9yZG1hX3dyaXRlX3JlcSB7CisJc3RydWN0IGMyX3NxX2hkciBzcV9oZHI7CisJdTY0IHJlbW90ZV90bzsKKwl1MzIgcmVtb3RlX3N0YWc7CisJdTMyIHNnZV9sZW47CisJdTggZGF0YVswXTsJCS8qIFNHRSBhcnJheSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9yZG1hX3dyaXRlIHsKKwlzdHJ1Y3QgYzJ3cl9yZG1hX3dyaXRlX3JlcSByZXE7CisJc3RydWN0IGMyd3JfY2UgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3JfcmRtYV9yZWFkX3JlcSB7CisJc3RydWN0IGMyX3NxX2hkciBzcV9oZHI7CisJdTY0IGxvY2FsX3RvOworCXU2NCByZW1vdGVfdG87CisJdTMyIGxvY2FsX3N0YWc7CisJdTMyIHJlbW90ZV9zdGFnOworCXUzMiBsZW5ndGg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX3JkbWFfcmVhZCB7CisJc3RydWN0IGMyd3JfcmRtYV9yZWFkX3JlcSByZXE7CisJc3RydWN0IGMyd3JfY2UgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3JfbXdfYmluZF9yZXEgeworCXN0cnVjdCBjMl9zcV9oZHIgc3FfaGRyOworCXU2NCB2YTsKKwl1OCBzdGFnX2tleTsKKwl1OCBwYWRbM107CisJdTMyIG13X3N0YWdfaW5kZXg7CisJdTMyIG1yX3N0YWdfaW5kZXg7CisJdTMyIGxlbmd0aDsKKwl1MzIgZmxhZ3M7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX213X2JpbmQgeworCXN0cnVjdCBjMndyX213X2JpbmRfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9jZSByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJ3cl9uc21yX2Zhc3RyZWdfcmVxIHsKKwlzdHJ1Y3QgYzJfc3FfaGRyIHNxX2hkcjsKKwl1NjQgdmE7CisJdTggc3RhZ19rZXk7CisJdTggcGFkWzNdOworCXUzMiBzdGFnX2luZGV4OworCXUzMiBwYmVfc2l6ZTsKKwl1MzIgZmJvOworCXUzMiBsZW5ndGg7CisJdTMyIGFkZHJzX2xlbmd0aDsKKwkvKiBhcnJheSBvZiBwYWRkcnMgKG11c3QgYmUgYWxpZ25lZCBvbiBhIDY0Yml0IGJvdW5kYXJ5KSAqLworCXU2NCBwYWRkcnNbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX25zbXJfZmFzdHJlZyB7CisJc3RydWN0IGMyd3JfbnNtcl9mYXN0cmVnX3JlcSByZXE7CisJc3RydWN0IGMyd3JfY2UgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3Jfc3RhZ19pbnZhbGlkYXRlX3JlcSB7CisJc3RydWN0IGMyX3NxX2hkciBzcV9oZHI7CisJdTggc3RhZ19rZXk7CisJdTggcGFkWzNdOworCXUzMiBzdGFnX2luZGV4OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9zdGFnX2ludmFsaWRhdGUgeworCXN0cnVjdCBjMndyX3N0YWdfaW52YWxpZGF0ZV9yZXEgcmVxOworCXN0cnVjdCBjMndyX2NlIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3Jfc3F3ciB7CisJc3RydWN0IGMyX3NxX2hkciBzcV9oZHI7CisJc3RydWN0IGMyd3Jfc2VuZF9yZXEgc2VuZDsKKwlzdHJ1Y3QgYzJ3cl9zZW5kX3JlcSBzZW5kX3NlOworCXN0cnVjdCBjMndyX3NlbmRfcmVxIHNlbmRfaW52OworCXN0cnVjdCBjMndyX3NlbmRfcmVxIHNlbmRfc2VfaW52OworCXN0cnVjdCBjMndyX3JkbWFfd3JpdGVfcmVxIHJkbWFfd3JpdGU7CisJc3RydWN0IGMyd3JfcmRtYV9yZWFkX3JlcSByZG1hX3JlYWQ7CisJc3RydWN0IGMyd3JfbXdfYmluZF9yZXEgbXdfYmluZDsKKwlzdHJ1Y3QgYzJ3cl9uc21yX2Zhc3RyZWdfcmVxIG5zbXJfZmFzdHJlZzsKKwlzdHJ1Y3QgYzJ3cl9zdGFnX2ludmFsaWRhdGVfcmVxIHN0YWdfaW52OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogUlEgV1JzCisgKi8KK3N0cnVjdCBjMndyX3Jxd3IgeworCXN0cnVjdCBjMl9ycV9oZHIgcnFfaGRyOworCXU4IGRhdGFbMF07CQkvKiBhcnJheSBvZiBTR0VzICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX3JlY3YgeworCXN0cnVjdCBjMndyX3Jxd3IgcmVxOworCXN0cnVjdCBjMndyX2NlIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBBbGwgQUVzIHN0YXJ0IHdpdGggdGhpcyBoZWFkZXIuICBNb3N0IEFFcyBvbmx5IG5lZWQgdG8gY29udmV5IHRoZQorICogaW5mb3JtYXRpb24gaW4gdGhlIGhlYWRlci4gIFNvbWUsIGxpa2UgTExQIGNvbm5lY3Rpb24gZXZlbnRzLCBuZWVkCisgKiBtb3JlIGluZm8uICBUaGUgdW5pb24gdHlwZGVmIGMyd3JfYWVfdCBoYXMgYWxsIHRoZSBwb3NzaWJsZSBBRXMuCisgKgorICogaGRyLmNvbnRleHQgaXMgdGhlIHVzZXJfY29udGV4dCBmcm9tIHRoZSBybmljX29wZW4gV1IuICBOVUxMIElmIHRoaXMKKyAqIGlzIG5vdCBhZmZpbGlhdGVkIHdpdGggYW4gcm5pYworICoKKyAqIGhkci5pZCBpcyB0aGUgQUUgaWRlbnRpZmllciAoZWc7ICBDQ0FFX1JFTU9URV9TSFVURE9XTiwKKyAqIENDQUVfTExQX0NMT1NFX0NPTVBMRVRFKQorICoKKyAqIHJlc291cmNlX3R5cGUgaXMgb25lIG9mOiAgQzJfUkVTX0lORF9RUCwgQzJfUkVTX0lORF9DUSwgQzJfUkVTX0lORF9TUlEKKyAqCisgKiB1c2VyX2NvbnRleHQgaXMgdGhlIGNvbnRleHQgcGFzc2VkIGRvd24gd2hlbiB0aGUgaG9zdCBjcmVhdGVkIHRoZSByZXNvdXJjZS4KKyAqLworc3RydWN0IGMyd3JfYWVfaGRyIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCB1c2VyX2NvbnRleHQ7CS8qIHVzZXIgY29udGV4dCBmb3IgdGhpcyByZXMuICovCisJdTMyIHJlc291cmNlX3R5cGU7CS8qIHNlZSBlbnVtIGMyX3Jlc291cmNlX2luZGljYXRvciAqLworCXUzMiByZXNvdXJjZTsJCS8qIGhhbmRsZSBmb3IgcmVzb3VyY2UgKi8KKwl1MzIgcXBfc3RhdGU7CQkvKiBjdXJyZW50IFFQIFN0YXRlICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogQWZ0ZXIgc3VibWl0dGluZyB0aGUgQ0NBRV9BQ1RJVkVfQ09OTkVDVF9SRVNVTFRTIG1lc3NhZ2Ugb24gdGhlIEFFUSwKKyAqIHRoZSBhZGFwdGVyIG1vdmVzIHRoZSBRUCBpbnRvIFJUUyBzdGF0ZQorICovCitzdHJ1Y3QgYzJ3cl9hZV9hY3RpdmVfY29ubmVjdF9yZXN1bHRzIHsKKwlzdHJ1Y3QgYzJ3cl9hZV9oZHIgYWVfaGRyOworCXUzMiBsYWRkcjsKKwl1MzIgcmFkZHI7CisJdTE2IGxwb3J0OworCXUxNiBycG9ydDsKKwl1MzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKKwl1OCBwcml2YXRlX2RhdGFbMF07CS8qIGRhdGEgaXMgaW4tbGluZSBpbiB0aGUgbXNnLiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIFdoZW4gY29ubmVjdGlvbnMgYXJlIGVzdGFibGlzaGVkIGJ5IHRoZSBzdGFjayAoYW5kIHRoZSBwcml2YXRlIGRhdGEKKyAqIE1QQSBmcmFtZSBpcyByZWNlaXZlZCksIHRoZSBhZGFwdGVyIHdpbGwgZ2VuZXJhdGUgYW4gZXZlbnQgdG8gdGhlIGhvc3QuCisgKiBUaGUgZGV0YWlscyBvZiB0aGUgY29ubmVjdGlvbiwgYW55IHByaXZhdGUgZGF0YSwgYW5kIHRoZSBuZXcgY29ubmVjdGlvbgorICogcmVxdWVzdCBoYW5kbGUgaXMgcGFzc2VkIHVwIHZpYSB0aGUgQ0NBRV9DT05ORUNUSU9OX1JFUVVFU1QgbXNnIG9uIHRoZQorICogQUUgcXVldWU6CisgKi8KK3N0cnVjdCBjMndyX2FlX2Nvbm5lY3Rpb25fcmVxdWVzdCB7CisJc3RydWN0IGMyd3JfYWVfaGRyIGFlX2hkcjsKKwl1MzIgY3JfaGFuZGxlOwkJLyogY29ubnJlcSBoYW5kbGUgKHNvY2sgcHRyKSAqLworCXUzMiBsYWRkcjsKKwl1MzIgcmFkZHI7CisJdTE2IGxwb3J0OworCXUxNiBycG9ydDsKKwl1MzIgcHJpdmF0ZV9kYXRhX2xlbmd0aDsKKwl1OCBwcml2YXRlX2RhdGFbMF07CS8qIGRhdGEgaXMgaW4tbGluZSBpbiB0aGUgbXNnLiAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9hZSB7CisJc3RydWN0IGMyd3JfYWVfaGRyIGFlX2dlbmVyaWM7CisJc3RydWN0IGMyd3JfYWVfYWN0aXZlX2Nvbm5lY3RfcmVzdWx0cyBhZV9hY3RpdmVfY29ubmVjdF9yZXN1bHRzOworCXN0cnVjdCBjMndyX2FlX2Nvbm5lY3Rpb25fcmVxdWVzdCBhZV9jb25uZWN0aW9uX3JlcXVlc3Q7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJ3cl9pbml0X3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1NjQgaGludF9jb3VudDsKKwl1NjQgcTBfaG9zdF9zaGFyZWQ7CisJdTY0IHExX2hvc3Rfc2hhcmVkOworCXU2NCBxMV9ob3N0X21zZ19wb29sOworCXU2NCBxMl9ob3N0X3NoYXJlZDsKKwl1NjQgcTJfaG9zdF9tc2dfcG9vbDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2luaXRfcmVwIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9pbml0IHsKKwlzdHJ1Y3QgYzJ3cl9pbml0X3JlcSByZXE7CisJc3RydWN0IGMyd3JfaW5pdF9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIEZvciB1cGdyYWRpbmcgZmxhc2guCisgKi8KKworc3RydWN0IGMyd3JfZmxhc2hfaW5pdF9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3JfZmxhc2hfaW5pdF9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIGFkYXB0ZXJfZmxhc2hfYnVmX29mZnNldDsKKwl1MzIgYWRhcHRlcl9mbGFzaF9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX2ZsYXNoX2luaXQgeworCXN0cnVjdCBjMndyX2ZsYXNoX2luaXRfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9mbGFzaF9pbml0X3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJ3cl9mbGFzaF9yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBsZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJ3cl9mbGFzaF9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHN0YXR1czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3JfZmxhc2ggeworCXN0cnVjdCBjMndyX2ZsYXNoX3JlcSByZXE7CisJc3RydWN0IGMyd3JfZmxhc2hfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2J1Zl9hbGxvY19yZXEgeworCXN0cnVjdCBjMndyX2hkciBoZHI7CisJdTMyIHJuaWNfaGFuZGxlOworCXUzMiBzaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3JfYnVmX2FsbG9jX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgb2Zmc2V0OwkJLyogMCBpZiBtZW0gbm90IGF2YWlsYWJsZSAqLworCXUzMiBzaXplOwkJLyogMCBpZiBtZW0gbm90IGF2YWlsYWJsZSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9idWZfYWxsb2MgeworCXN0cnVjdCBjMndyX2J1Zl9hbGxvY19yZXEgcmVxOworCXN0cnVjdCBjMndyX2J1Zl9hbGxvY19yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3JfYnVmX2ZyZWVfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgb2Zmc2V0OwkJLyogTXVzdCBtYXRjaCB2YWx1ZSBmcm9tIGFsbG9jICovCisJdTMyIHNpemU7CQkvKiBNdXN0IG1hdGNoIHZhbHVlIGZyb20gYWxsb2MgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2J1Zl9mcmVlX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3JfYnVmX2ZyZWUgeworCXN0cnVjdCBjMndyX2J1Zl9mcmVlX3JlcSByZXE7CisJc3RydWN0IGMyd3JfY2UgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGMyd3JfZmxhc2hfd3JpdGVfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgb2Zmc2V0OworCXUzMiBzaXplOworCXUzMiB0eXBlOworCXUzMiBmbGFnczsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2ZsYXNoX3dyaXRlX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9mbGFzaF93cml0ZSB7CisJc3RydWN0IGMyd3JfZmxhc2hfd3JpdGVfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9mbGFzaF93cml0ZV9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIE1lc3NhZ2VzIGZvciBMTFAgY29ubmVjdGlvbiBzZXR1cC4KKyAqLworCisvKgorICogTGlzdGVuIFJlcXVlc3QuICBUaGlzIGFsbG9jYXRlcyBhIGxpc3RlbmluZyBlbmRwb2ludCB0byBhbGxvdyBwYXNzaXZlCisgKiBjb25uZWN0aW9uIHNldHVwLiAgTmV3bHkgZXN0YWJsaXNoZWQgTExQIGNvbm5lY3Rpb25zIGFyZSBwYXNzZWQgdXAKKyAqIHZpYSBhbiBBRS4gIFNlZSBjMndyX2FlX2Nvbm5lY3Rpb25fcmVxdWVzdF90CisgKi8KK3N0cnVjdCBjMndyX2VwX2xpc3Rlbl9jcmVhdGVfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXU2NCB1c2VyX2NvbnRleHQ7CS8qIHJldHVybmVkIGluIEFFcy4gKi8KKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIGxvY2FsX2FkZHI7CQkvKiBsb2NhbCBhZGRyLCBvciAwICAqLworCXUxNiBsb2NhbF9wb3J0OwkJLyogMCBtZWFucyAicGljayBvbmUiICovCisJdTE2IHBhZDsKKwl1MzIgYmFja2xvZzsJCS8qIHRyYWRpb25hbCB0Y3AgbGlzdGVuIGJsICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgYzJ3cl9lcF9saXN0ZW5fY3JlYXRlX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgZXBfaGFuZGxlOwkJLyogaGFuZGxlIHRvIG5ldyBsaXN0ZW5pbmcgZXAgKi8KKwl1MTYgbG9jYWxfcG9ydDsJCS8qIHJlc3VsdGluZyBwb3J0Li4uICovCisJdTE2IHBhZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3JfZXBfbGlzdGVuX2NyZWF0ZSB7CisJc3RydWN0IGMyd3JfZXBfbGlzdGVuX2NyZWF0ZV9yZXEgcmVxOworCXN0cnVjdCBjMndyX2VwX2xpc3Rlbl9jcmVhdGVfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2VwX2xpc3Rlbl9kZXN0cm95X3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIGVwX2hhbmRsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2VwX2xpc3Rlbl9kZXN0cm95X3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3JfZXBfbGlzdGVuX2Rlc3Ryb3kgeworCXN0cnVjdCBjMndyX2VwX2xpc3Rlbl9kZXN0cm95X3JlcSByZXE7CisJc3RydWN0IGMyd3JfZXBfbGlzdGVuX2Rlc3Ryb3lfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2VwX3F1ZXJ5X3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIGVwX2hhbmRsZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjMndyX2VwX3F1ZXJ5X3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwl1MzIgcm5pY19oYW5kbGU7CisJdTMyIGxvY2FsX2FkZHI7CisJdTMyIHJlbW90ZV9hZGRyOworCXUxNiBsb2NhbF9wb3J0OworCXUxNiByZW1vdGVfcG9ydDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3JfZXBfcXVlcnkgeworCXN0cnVjdCBjMndyX2VwX3F1ZXJ5X3JlcSByZXE7CisJc3RydWN0IGMyd3JfZXBfcXVlcnlfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKworLyoKKyAqIFRoZSBob3N0IHBhc3NlcyB0aGlzIGRvd24gdG8gaW5kaWNhdGUgYWNjZXB0YW5jZSBvZiBhIHBlbmRpbmcgaVdBUlAKKyAqIGNvbm5lY3Rpb24uICBUaGUgY3JfaGFuZGxlIHdhcyBvYnRhaW5lZCBmcm9tIHRoZSBDT05ORUNUSU9OX1JFUVVFU1QKKyAqIEFFIHBhc3NlZCB1cCBieSB0aGUgYWRhcHRlci4gIFNlZSBjMndyX2FlX2Nvbm5lY3Rpb25fcmVxdWVzdF90LgorICovCitzdHJ1Y3QgYzJ3cl9jcl9hY2NlcHRfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgcXBfaGFuZGxlOwkJLyogUVAgdG8gYmluZCB0byB0aGlzIExMUCBjb25uICovCisJdTMyIGVwX2hhbmRsZTsJCS8qIExMUCAgaGFuZGxlIHRvIGFjY2VwdCAqLworCXUzMiBwcml2YXRlX2RhdGFfbGVuZ3RoOworCXU4IHByaXZhdGVfZGF0YVswXTsJLyogZGF0YSBpbi1saW5lIGluIG1zZy4gKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBhZGFwdGVyIHNlbmRzIHJlcGx5IHdoZW4gcHJpdmF0ZSBkYXRhIGlzIHN1Y2Nlc3NmdWxseSBzdWJtaXR0ZWQgdG8KKyAqIHRoZSBMTFAuCisgKi8KK3N0cnVjdCBjMndyX2NyX2FjY2VwdF9yZXAgeworCXN0cnVjdCBjMndyX2hkciBoZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCit1bmlvbiBjMndyX2NyX2FjY2VwdCB7CisJc3RydWN0IGMyd3JfY3JfYWNjZXB0X3JlcSByZXE7CisJc3RydWN0IGMyd3JfY3JfYWNjZXB0X3JlcCByZXA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKgorICogVGhlIGhvc3Qgc2VuZHMgdGhpcyBkb3duIGlmIGEgZ2l2ZW4gaVdBUlAgY29ubmVjdGlvbiByZXF1ZXN0IHdhcworICogcmVqZWN0ZWQgYnkgdGhlIGNvbnN1bWVyLiAgVGhlIGNyX2hhbmRsZSB3YXMgb2J0YWluZWQgZnJvbSBhCisgKiBwcmV2aW91cyBjMndyX2FlX2Nvbm5lY3Rpb25fcmVxdWVzdF90IEFFIHNlbnQgYnkgdGhlIGFkYXB0ZXIuCisgKi8KK3N0cnVjdCAgYzJ3cl9jcl9yZWplY3RfcmVxIHsKKwlzdHJ1Y3QgYzJ3cl9oZHIgaGRyOworCXUzMiBybmljX2hhbmRsZTsKKwl1MzIgZXBfaGFuZGxlOwkJLyogTExQIGhhbmRsZSB0byByZWplY3QgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBEdW5ubyBpZiB0aGlzIGlzIG5lZWRlZCwgYnV0IHdlJ2xsIGFkZCBpdCBmb3Igbm93LiAgVGhlIGFkYXB0ZXIgd2lsbAorICogc2VuZCB0aGUgcmVqZWN0X3JlcGx5IGFmdGVyIHRoZSBMTFAgZW5kcG9pbnQgaGFzIGJlZW4gZGVzdHJveWVkLgorICovCitzdHJ1Y3QgIGMyd3JfY3JfcmVqZWN0X3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3VuaW9uIGMyd3JfY3JfcmVqZWN0IHsKKwlzdHJ1Y3QgYzJ3cl9jcl9yZWplY3RfcmVxIHJlcTsKKwlzdHJ1Y3QgYzJ3cl9jcl9yZWplY3RfcmVwIHJlcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBjb25zb2xlIGNvbW1hbmQuICBVc2VkIHRvIGltcGxlbWVudCBhIGRlYnVnIGNvbnNvbGUgb3ZlciB0aGUgdmVyYnMKKyAqIHJlcXVlc3QgYW5kIHJlcGx5IHF1ZXVlcy4KKyAqLworCisvKgorICogQ29uc29sZSByZXF1ZXN0IG1lc3NhZ2UuICBJdCBjb250YWluczoKKyAqCS0gbWVzc2FnZSBoZHIgd2l0aCBpZCA9IENDV1JfQ09OU09MRQorICoJLSB0aGUgcGh5c2FkZHIvbGVuIG9mIGhvc3QgbWVtb3J5IHRvIGJlIHVzZWQgZm9yIHRoZSByZXBseS4KKyAqCS0gdGhlIGNvbW1hbmQgc3RyaW5nLiAgZWc6ICAibmV0c3RhdCAtcyIgb3IgInpvbmVpbmZvIgorICovCitzdHJ1Y3QgYzJ3cl9jb25zb2xlX3JlcSB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsJCS8qIGlkID0gQ0NXUl9DT05TT0xFICovCisJdTY0IHJlcGx5X2J1ZjsJCS8qIHBpbm5lZCBob3N0IGJ1ZiBmb3IgcmVwbHkgKi8KKwl1MzIgcmVwbHlfYnVmX2xlbjsJLyogbGVuZ3RoIG9mIHJlcGx5IGJ1ZmZlciAqLworCXU4IGNvbW1hbmRbMF07CQkvKiBOVUwgdGVybWluYXRlZCBhc2NpaSBzdHJpbmcgKi8KKwkvKiBjb250YWluaW5nIHRoZSBjb21tYW5kIHJlcSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIGZsYWdzIHVzZWQgaW4gdGhlIGNvbnNvbGUgcmVwbHkuCisgKi8KK2VudW0gYzJfY29uc29sZV9mbGFncyB7CisJQ09OU19SRVBMWV9UUlVOQ0FURUQgPSAweDAwMDAwMDAxCS8qIHJlcGx5IHdhcyB0cnVuY2F0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qCisgKiBDb25zb2xlIHJlcGx5IG1lc3NhZ2UuCisgKiBoZHIucmVzdWx0IGNvbnRhaW5zIHRoZSBjMl9zdGF0dXNfdCBlcnJvciBpZiB0aGUgcmVwbHkgd2FzIF9ub3RfIGdlbmVyYXRlZCwKKyAqIG9yIEMyX09LIGlmIHRoZSByZXBseSB3YXMgZ2VuZXJhdGVkLgorICovCitzdHJ1Y3QgYzJ3cl9jb25zb2xlX3JlcCB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsJCS8qIGlkID0gQ0NXUl9DT05TT0xFICovCisJdTMyIGZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwordW5pb24gYzJ3cl9jb25zb2xlIHsKKwlzdHJ1Y3QgYzJ3cl9jb25zb2xlX3JlcSByZXE7CisJc3RydWN0IGMyd3JfY29uc29sZV9yZXAgcmVwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogR2lhbnQgdW5pb24gd2l0aCBhbGwgV1JzLiAgTWFrZXMgbGlmZSBlYXNpZXIuLi4KKyAqLwordW5pb24gYzJ3ciB7CisJc3RydWN0IGMyd3JfaGRyIGhkcjsKKwlzdHJ1Y3QgYzJ3cl91c2VyX2hkciB1c2VyX2hkcjsKKwl1bmlvbiBjMndyX3JuaWNfb3BlbiBybmljX29wZW47CisJdW5pb24gYzJ3cl9ybmljX3F1ZXJ5IHJuaWNfcXVlcnk7CisJdW5pb24gYzJ3cl9ybmljX2dldGNvbmZpZyBybmljX2dldGNvbmZpZzsKKwl1bmlvbiBjMndyX3JuaWNfc2V0Y29uZmlnIHJuaWNfc2V0Y29uZmlnOworCXVuaW9uIGMyd3Jfcm5pY19jbG9zZSBybmljX2Nsb3NlOworCXVuaW9uIGMyd3JfY3FfY3JlYXRlIGNxX2NyZWF0ZTsKKwl1bmlvbiBjMndyX2NxX21vZGlmeSBjcV9tb2RpZnk7CisJdW5pb24gYzJ3cl9jcV9kZXN0cm95IGNxX2Rlc3Ryb3k7CisJdW5pb24gYzJ3cl9wZF9hbGxvYyBwZF9hbGxvYzsKKwl1bmlvbiBjMndyX3BkX2RlYWxsb2MgcGRfZGVhbGxvYzsKKwl1bmlvbiBjMndyX3NycV9jcmVhdGUgc3JxX2NyZWF0ZTsKKwl1bmlvbiBjMndyX3NycV9kZXN0cm95IHNycV9kZXN0cm95OworCXVuaW9uIGMyd3JfcXBfY3JlYXRlIHFwX2NyZWF0ZTsKKwl1bmlvbiBjMndyX3FwX3F1ZXJ5IHFwX3F1ZXJ5OworCXVuaW9uIGMyd3JfcXBfbW9kaWZ5IHFwX21vZGlmeTsKKwl1bmlvbiBjMndyX3FwX2Rlc3Ryb3kgcXBfZGVzdHJveTsKKwlzdHJ1Y3QgYzJ3cl9xcF9jb25uZWN0IHFwX2Nvbm5lY3Q7CisJdW5pb24gYzJ3cl9uc21yX3N0YWdfYWxsb2MgbnNtcl9zdGFnX2FsbG9jOworCXVuaW9uIGMyd3JfbnNtcl9yZWdpc3RlciBuc21yX3JlZ2lzdGVyOworCXVuaW9uIGMyd3JfbnNtcl9wYmwgbnNtcl9wYmw7CisJdW5pb24gYzJ3cl9tcl9xdWVyeSBtcl9xdWVyeTsKKwl1bmlvbiBjMndyX213X3F1ZXJ5IG13X3F1ZXJ5OworCXVuaW9uIGMyd3Jfc3RhZ19kZWFsbG9jIHN0YWdfZGVhbGxvYzsKKwl1bmlvbiBjMndyX3Nxd3Igc3F3cjsKKwlzdHJ1Y3QgYzJ3cl9ycXdyIHJxd3I7CisJc3RydWN0IGMyd3JfY2UgY2U7CisJdW5pb24gYzJ3cl9hZSBhZTsKKwl1bmlvbiBjMndyX2luaXQgaW5pdDsKKwl1bmlvbiBjMndyX2VwX2xpc3Rlbl9jcmVhdGUgZXBfbGlzdGVuX2NyZWF0ZTsKKwl1bmlvbiBjMndyX2VwX2xpc3Rlbl9kZXN0cm95IGVwX2xpc3Rlbl9kZXN0cm95OworCXVuaW9uIGMyd3JfY3JfYWNjZXB0IGNyX2FjY2VwdDsKKwl1bmlvbiBjMndyX2NyX3JlamVjdCBjcl9yZWplY3Q7CisJdW5pb24gYzJ3cl9jb25zb2xlIGNvbnNvbGU7CisJdW5pb24gYzJ3cl9mbGFzaF9pbml0IGZsYXNoX2luaXQ7CisJdW5pb24gYzJ3cl9mbGFzaCBmbGFzaDsKKwl1bmlvbiBjMndyX2J1Zl9hbGxvYyBidWZfYWxsb2M7CisJdW5pb24gYzJ3cl9idWZfZnJlZSBidWZfZnJlZTsKKwl1bmlvbiBjMndyX2ZsYXNoX3dyaXRlIGZsYXNoX3dyaXRlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworCisvKgorICogQWNjZXNzb3JzIGZvciB0aGUgd3IgZmllbGRzIHRoYXQgYXJlIHBhY2tlZCB0b2dldGhlciB0aWdodGx5IHRvCisgKiByZWR1Y2UgdGhlIHdyIG1lc3NhZ2Ugc2l6ZS4gIFRoZSB3ciBhcmd1bWVudHMgYXJlIHZvaWQqIHNvIHRoYXQKKyAqIGVpdGhlciBhIHN0cnVjdCBjMndyKiwgYSBzdHJ1Y3QgYzJ3cl9oZHIqLCBvciBhIHBvaW50ZXIgdG8gYW55IG9mIHRoZSB0eXBlcworICogaW4gdGhlIHN0cnVjdCBjMndyIHVuaW9uIGNhbiBiZSBwYXNzZWQgaW4uCisgKi8KK3N0YXRpYyBfX2lubGluZV9fIHU4IGMyX3dyX2dldF9pZCh2b2lkICp3cikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgYzJ3cl9oZHIgKikgd3IpLT5pZDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYzJfd3Jfc2V0X2lkKHZvaWQgKndyLCB1OCBpZCkKK3sKKwkoKHN0cnVjdCBjMndyX2hkciAqKSB3ciktPmlkID0gaWQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1OCBjMl93cl9nZXRfcmVzdWx0KHZvaWQgKndyKQoreworCXJldHVybiAoKHN0cnVjdCBjMndyX2hkciAqKSB3ciktPnJlc3VsdDsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgYzJfd3Jfc2V0X3Jlc3VsdCh2b2lkICp3ciwgdTggcmVzdWx0KQoreworCSgoc3RydWN0IGMyd3JfaGRyICopIHdyKS0+cmVzdWx0ID0gcmVzdWx0OworfQorc3RhdGljIF9faW5saW5lX18gdTggYzJfd3JfZ2V0X2ZsYWdzKHZvaWQgKndyKQoreworCXJldHVybiAoKHN0cnVjdCBjMndyX2hkciAqKSB3ciktPmZsYWdzOworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBjMl93cl9zZXRfZmxhZ3Modm9pZCAqd3IsIHU4IGZsYWdzKQoreworCSgoc3RydWN0IGMyd3JfaGRyICopIHdyKS0+ZmxhZ3MgPSBmbGFnczsKK30KK3N0YXRpYyBfX2lubGluZV9fIHU4IGMyX3dyX2dldF9zZ2VfY291bnQodm9pZCAqd3IpCit7CisJcmV0dXJuICgoc3RydWN0IGMyd3JfaGRyICopIHdyKS0+c2dlX2NvdW50OworfQorc3RhdGljIF9faW5saW5lX18gdm9pZCBjMl93cl9zZXRfc2dlX2NvdW50KHZvaWQgKndyLCB1OCBzZ2VfY291bnQpCit7CisJKChzdHJ1Y3QgYzJ3cl9oZHIgKikgd3IpLT5zZ2VfY291bnQgPSBzZ2VfY291bnQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB1MzIgYzJfd3JfZ2V0X3dxZV9jb3VudCh2b2lkICp3cikKK3sKKwlyZXR1cm4gKChzdHJ1Y3QgYzJ3cl9oZHIgKikgd3IpLT53cWVfY291bnQ7Cit9CitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGMyX3dyX3NldF93cWVfY291bnQodm9pZCAqd3IsIHUzMiB3cWVfY291bnQpCit7CisJKChzdHJ1Y3QgYzJ3cl9oZHIgKikgd3IpLT53cWVfY291bnQgPSB3cWVfY291bnQ7Cit9CisKKyNlbmRpZgkJCQkvKiBfQzJfV1JfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyMjM4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9LY29uZmlnCkBAIC0wLDAgKzEsMTYgQEAKK2NvbmZpZyBJTkZJTklCQU5EX0VIQ0EKKwl0cmlzdGF0ZSAiZUhDQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gSUJNRUJVUyAmJiBJTkZJTklCQU5ECisJLS0taGVscC0tLQorCVRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBJQk0gcFNlcmllcyBlSENBIEluZmluaUJhbmQgYWRhcHRlci4KKworCVRvIGNvbXBpbGUgdGhlIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorCXdpbGwgYmUgY2FsbGVkIGliX2VoY2EuCisKK2NvbmZpZyBJTkZJTklCQU5EX0VIQ0FfU0NBTElORworCWJvb2wgIlNjYWxpbmcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIElCTUVCVVMgJiYgSU5GSU5JQkFORF9FSENBICYmIEhPVFBMVUdfQ1BVICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwllSENBIHNjYWxpbmcgc3VwcG9ydCBzY2hlZHVsZXMgdGhlIENRIGNhbGxiYWNrcyB0byBkaWZmZXJlbnQgQ1BVcy4KKworCVRvIGVuYWJsZSB0aGlzIGZlYXR1cmUgY2hvb3NlIFkgaGVyZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRkMjg0ZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL01ha2VmaWxlCkBAIC0wLDAgKzEsMTYgQEAKKyMgIEF1dGhvcnM6IEhlaWtvIEogU2NoaWNrIDxzY2hpY2toakBkZS5pYm0uY29tPgorIyAgICAgICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisjICAgICAgICAgICBKb2FjaGltIEZlbmtlcyA8ZmVua2VzQGRlLmlibS5jb20+CisjCisjICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisjCisjICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCIEJTRC4KKworb2JqLSQoQ09ORklHX0lORklOSUJBTkRfRUhDQSkgKz0gaWJfZWhjYS5vCisKK2liX2VoY2Etb2JqcyAgPSBlaGNhX21haW4ubyBlaGNhX2hjYS5vIGVoY2FfbWNhc3QubyBlaGNhX3BkLm8gZWhjYV9hdi5vIGVoY2FfZXEubyBcCisJCWVoY2FfY3EubyBlaGNhX3FwLm8gZWhjYV9zcXAubyBlaGNhX21ybXcubyBlaGNhX3JlcXMubyBlaGNhX2lycS5vIFwKKwkJZWhjYV91dmVyYnMubyBpcHpfcHRfZm4ubyBoY3BfaWYubyBoY3BfcGh5cC5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfYXYuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfYXYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmFjMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9hdi5jCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICBhZHJlc3MgdmVjdG9yIGZ1bmN0aW9ucworICoKKyAqICBBdXRob3JzOiBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgS2hhZGlqYSBTb3Vpc3NpIDxzb3Vpc3Npa0BkZS5pYm0uY29tPgorICogICAgICAgICAgIFJlaW5oYXJkIEVybnN0IDxyZXJuc3RAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisjaW5jbHVkZSAiZWhjYV9pdmVyYnMuaCIKKyNpbmNsdWRlICJoY3BfaWYuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICphdl9jYWNoZTsKKworc3RydWN0IGliX2FoICplaGNhX2NyZWF0ZV9haChzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBlaGNhX2F2ICphdjsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gY29udGFpbmVyX29mKHBkLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsCisJCQkJCSAgICAgIGliX2RldmljZSk7CisKKwlhdiA9IGttZW1fY2FjaGVfYWxsb2MoYXZfY2FjaGUsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWF2KSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJPdXQgb2YgbWVtb3J5IHBkPSVwIGFoX2F0dHI9JXAiLAorCQkJIHBkLCBhaF9hdHRyKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJYXYtPmF2LnNsID0gYWhfYXR0ci0+c2w7CisJYXYtPmF2LmRsaWQgPSBhaF9hdHRyLT5kbGlkOworCWF2LT5hdi5zbGlkX3BhdGhfYml0cyA9IGFoX2F0dHItPnNyY19wYXRoX2JpdHM7CisKKwlpZiAoZWhjYV9zdGF0aWNfcmF0ZSA8IDApIHsKKwkJaW50IGFoX211bHQgPSBpYl9yYXRlX3RvX211bHQoYWhfYXR0ci0+c3RhdGljX3JhdGUpOworCQlpbnQgZWhjYV9tdWx0ID0KKwkJCWliX3JhdGVfdG9fbXVsdChzaGNhLT5zcG9ydFthaF9hdHRyLT5wb3J0X251bV0ucmF0ZSApOworCisJCWlmIChhaF9tdWx0ID49IGVoY2FfbXVsdCkKKwkJCWF2LT5hdi5pcGQgPSAwOworCQllbHNlCisJCQlhdi0+YXYuaXBkID0gKGFoX211bHQgPiAwKSA/CisJCQkJKChlaGNhX211bHQgLSAxKSAvIGFoX211bHQpIDogMDsKKwl9IGVsc2UKKwkgICAgICAgIGF2LT5hdi5pcGQgPSBlaGNhX3N0YXRpY19yYXRlOworCisJYXYtPmF2LmxuaCA9IGFoX2F0dHItPmFoX2ZsYWdzOworCWF2LT5hdi5ncmgud29yZF8wID0gRUhDQV9CTUFTS19TRVQoR1JIX0lQVkVSU0lPTl9NQVNLLCA2KTsKKwlhdi0+YXYuZ3JoLndvcmRfMCB8PSBFSENBX0JNQVNLX1NFVChHUkhfVENMQVNTX01BU0ssCisJCQkJCSAgICBhaF9hdHRyLT5ncmgudHJhZmZpY19jbGFzcyk7CisJYXYtPmF2LmdyaC53b3JkXzAgfD0gRUhDQV9CTUFTS19TRVQoR1JIX0ZMT1dMQUJFTF9NQVNLLAorCQkJCQkgICAgYWhfYXR0ci0+Z3JoLmZsb3dfbGFiZWwpOworCWF2LT5hdi5ncmgud29yZF8wIHw9IEVIQ0FfQk1BU0tfU0VUKEdSSF9IT1BMSU1JVF9NQVNLLAorCQkJCQkgICAgYWhfYXR0ci0+Z3JoLmhvcF9saW1pdCk7CisJYXYtPmF2LmdyaC53b3JkXzAgfD0gRUhDQV9CTUFTS19TRVQoR1JIX05FWFRIRUFERVJfTUFTSywgMHgxQik7CisJLyogc2V0IHNnaWQgaW4gZ3JoLndvcmRfMSAqLworCWlmIChhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkgeworCQlpbnQgcmM7CisJCXN0cnVjdCBpYl9wb3J0X2F0dHIgcG9ydF9hdHRyOworCQl1bmlvbiBpYl9naWQgZ2lkOworCQltZW1zZXQoJnBvcnRfYXR0ciwgMCwgc2l6ZW9mKHBvcnRfYXR0cikpOworCQlyYyA9IGVoY2FfcXVlcnlfcG9ydChwZC0+ZGV2aWNlLCBhaF9hdHRyLT5wb3J0X251bSwKKwkJCQkgICAgICZwb3J0X2F0dHIpOworCQlpZiAocmMpIHsgLyogaW52YWxpZCBwb3J0IG51bWJlciAqLworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJJbnZhbGlkIHBvcnQgbnVtYmVyICIKKwkJCQkgImVoY2FfcXVlcnlfcG9ydCgpIHJldHVybmVkICV4ICIKKwkJCQkgInBkPSVwIGFoX2F0dHI9JXAiLCByYywgcGQsIGFoX2F0dHIpOworCQkJZ290byBjcmVhdGVfYWhfZXhpdDE7CisJCX0KKwkJbWVtc2V0KCZnaWQsIDAsIHNpemVvZihnaWQpKTsKKwkJcmMgPSBlaGNhX3F1ZXJ5X2dpZChwZC0+ZGV2aWNlLAorCQkJCSAgICBhaF9hdHRyLT5wb3J0X251bSwKKwkJCQkgICAgYWhfYXR0ci0+Z3JoLnNnaWRfaW5kZXgsICZnaWQpOworCQlpZiAocmMpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiRmFpbGVkIHRvIHJldHJpZXZlIHNnaWQgIgorCQkJCSAiZWhjYV9xdWVyeV9naWQoKSByZXR1cm5lZCAleCAiCisJCQkJICJwZD0lcCBhaF9hdHRyPSVwIiwgcmMsIHBkLCBhaF9hdHRyKTsKKwkJCWdvdG8gY3JlYXRlX2FoX2V4aXQxOworCQl9CisJCW1lbWNweSgmYXYtPmF2LmdyaC53b3JkXzEsICZnaWQsIHNpemVvZihnaWQpKTsKKwl9CisJLyogZm9yIHRoZSB0aW1lIGJlaW5nIHdlIHVzZSBhIGhhcmQgY29kZWQgUE1UVSBvZiAyMDQ4IEJ5dGVzICovCisJYXYtPmF2LnBtdHUgPSA0OworCisJLyogZGdpZCBjb21lcyBpbiBncmgud29yZF8zICovCisJbWVtY3B5KCZhdi0+YXYuZ3JoLndvcmRfMywgJmFoX2F0dHItPmdyaC5kZ2lkLAorCSAgICAgICBzaXplb2YoYWhfYXR0ci0+Z3JoLmRnaWQpKTsKKworCXJldHVybiAmYXYtPmliX2FoOworCitjcmVhdGVfYWhfZXhpdDE6CisJa21lbV9jYWNoZV9mcmVlKGF2X2NhY2hlLCBhdik7CisKKwlyZXR1cm4gRVJSX1BUUihyZXQpOworfQorCitpbnQgZWhjYV9tb2RpZnlfYWgoc3RydWN0IGliX2FoICphaCwgc3RydWN0IGliX2FoX2F0dHIgKmFoX2F0dHIpCit7CisJc3RydWN0IGVoY2FfYXYgKmF2OworCXN0cnVjdCBlaGNhX3VkX2F2IG5ld19laGNhX2F2OworCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihhaC0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOworCisJaWYgKG15X3BkLT5pYl9wZC51b2JqZWN0ICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICYmCisJICAgIG15X3BkLT5vd25waWQgIT0gY3VyX3BpZCkgeworCQllaGNhX2VycihhaC0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCisJCQkgY3VyX3BpZCwgbXlfcGQtPm93bnBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldCgmbmV3X2VoY2FfYXYsIDAsIHNpemVvZihuZXdfZWhjYV9hdikpOworCW5ld19laGNhX2F2LnNsID0gYWhfYXR0ci0+c2w7CisJbmV3X2VoY2FfYXYuZGxpZCA9IGFoX2F0dHItPmRsaWQ7CisJbmV3X2VoY2FfYXYuc2xpZF9wYXRoX2JpdHMgPSBhaF9hdHRyLT5zcmNfcGF0aF9iaXRzOworCW5ld19laGNhX2F2LmlwZCA9IGFoX2F0dHItPnN0YXRpY19yYXRlOworCW5ld19laGNhX2F2LmxuaCA9IEVIQ0FfQk1BU0tfU0VUKEdSSF9GTEFHX01BU0ssCisJCQkJCSAoYWhfYXR0ci0+YWhfZmxhZ3MgJiBJQl9BSF9HUkgpID4gMCk7CisJbmV3X2VoY2FfYXYuZ3JoLndvcmRfMCA9IEVIQ0FfQk1BU0tfU0VUKEdSSF9UQ0xBU1NfTUFTSywKKwkJCQkJCWFoX2F0dHItPmdyaC50cmFmZmljX2NsYXNzKTsKKwluZXdfZWhjYV9hdi5ncmgud29yZF8wIHw9IEVIQ0FfQk1BU0tfU0VUKEdSSF9GTE9XTEFCRUxfTUFTSywKKwkJCQkJCSBhaF9hdHRyLT5ncmguZmxvd19sYWJlbCk7CisJbmV3X2VoY2FfYXYuZ3JoLndvcmRfMCB8PSBFSENBX0JNQVNLX1NFVChHUkhfSE9QTElNSVRfTUFTSywKKwkJCQkJCSBhaF9hdHRyLT5ncmguaG9wX2xpbWl0KTsKKwluZXdfZWhjYV9hdi5ncmgud29yZF8wIHw9IEVIQ0FfQk1BU0tfU0VUKEdSSF9ORVhUSEVBREVSX01BU0ssIDB4MWIpOworCisJLyogc2V0IHNnaWQgaW4gZ3JoLndvcmRfMSAqLworCWlmIChhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkgeworCQlpbnQgcmM7CisJCXN0cnVjdCBpYl9wb3J0X2F0dHIgcG9ydF9hdHRyOworCQl1bmlvbiBpYl9naWQgZ2lkOworCQltZW1zZXQoJnBvcnRfYXR0ciwgMCwgc2l6ZW9mKHBvcnRfYXR0cikpOworCQlyYyA9IGVoY2FfcXVlcnlfcG9ydChhaC0+ZGV2aWNlLCBhaF9hdHRyLT5wb3J0X251bSwKKwkJCQkgICAgICZwb3J0X2F0dHIpOworCQlpZiAocmMpIHsgLyogaW52YWxpZCBwb3J0IG51bWJlciAqLworCQkJZWhjYV9lcnIoYWgtPmRldmljZSwgIkludmFsaWQgcG9ydCBudW1iZXIgIgorCQkJCSAiZWhjYV9xdWVyeV9wb3J0KCkgcmV0dXJuZWQgJXggIgorCQkJCSAiYWg9JXAgYWhfYXR0cj0lcCBwb3J0X251bT0leCIsCisJCQkJIHJjLCBhaCwgYWhfYXR0ciwgYWhfYXR0ci0+cG9ydF9udW0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJbWVtc2V0KCZnaWQsIDAsIHNpemVvZihnaWQpKTsKKwkJcmMgPSBlaGNhX3F1ZXJ5X2dpZChhaC0+ZGV2aWNlLAorCQkJCSAgICBhaF9hdHRyLT5wb3J0X251bSwKKwkJCQkgICAgYWhfYXR0ci0+Z3JoLnNnaWRfaW5kZXgsICZnaWQpOworCQlpZiAocmMpIHsKKwkJCWVoY2FfZXJyKGFoLT5kZXZpY2UsICJGYWlsZWQgdG8gcmV0cmlldmUgc2dpZCAiCisJCQkJICJlaGNhX3F1ZXJ5X2dpZCgpIHJldHVybmVkICV4ICIKKwkJCQkgImFoPSVwIGFoX2F0dHI9JXAgcG9ydF9udW09JXggIgorCQkJCSAic2dpZF9pbmRleD0leCIsCisJCQkJIHJjLCBhaCwgYWhfYXR0ciwgYWhfYXR0ci0+cG9ydF9udW0sCisJCQkJIGFoX2F0dHItPmdyaC5zZ2lkX2luZGV4KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW1lbWNweSgmbmV3X2VoY2FfYXYuZ3JoLndvcmRfMSwgJmdpZCwgc2l6ZW9mKGdpZCkpOworCX0KKworCW5ld19laGNhX2F2LnBtdHUgPSA0OyAvKiBzZWUgYWxzbyBjb21tZW50IGluIGNyZWF0ZV9haCgpICovCisKKwltZW1jcHkoJm5ld19laGNhX2F2LmdyaC53b3JkXzMsICZhaF9hdHRyLT5ncmguZGdpZCwKKwkgICAgICAgc2l6ZW9mKGFoX2F0dHItPmdyaC5kZ2lkKSk7CisKKwlhdiA9IGNvbnRhaW5lcl9vZihhaCwgc3RydWN0IGVoY2FfYXYsIGliX2FoKTsKKwlhdi0+YXYgPSBuZXdfZWhjYV9hdjsKKworCXJldHVybiAwOworfQorCitpbnQgZWhjYV9xdWVyeV9haChzdHJ1Y3QgaWJfYWggKmFoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cikKK3sKKwlzdHJ1Y3QgZWhjYV9hdiAqYXYgPSBjb250YWluZXJfb2YoYWgsIHN0cnVjdCBlaGNhX2F2LCBpYl9haCk7CisJc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKGFoLT5wZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKKwl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CisKKwlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKKwkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCWVoY2FfZXJyKGFoLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKKwkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KCZhaF9hdHRyLT5ncmguZGdpZCwgJmF2LT5hdi5ncmgud29yZF8zLAorCSAgICAgICBzaXplb2YoYWhfYXR0ci0+Z3JoLmRnaWQpKTsKKwlhaF9hdHRyLT5zbCA9IGF2LT5hdi5zbDsKKworCWFoX2F0dHItPmRsaWQgPSBhdi0+YXYuZGxpZDsKKworCWFoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBhdi0+YXYuc2xpZF9wYXRoX2JpdHM7CisJYWhfYXR0ci0+c3RhdGljX3JhdGUgPSBhdi0+YXYuaXBkOworCWFoX2F0dHItPmFoX2ZsYWdzID0gRUhDQV9CTUFTS19HRVQoR1JIX0ZMQUdfTUFTSywgYXYtPmF2LmxuaCk7CisJYWhfYXR0ci0+Z3JoLnRyYWZmaWNfY2xhc3MgPSBFSENBX0JNQVNLX0dFVChHUkhfVENMQVNTX01BU0ssCisJCQkJCQkgICAgYXYtPmF2LmdyaC53b3JkXzApOworCWFoX2F0dHItPmdyaC5ob3BfbGltaXQgPSBFSENBX0JNQVNLX0dFVChHUkhfSE9QTElNSVRfTUFTSywKKwkJCQkJCWF2LT5hdi5ncmgud29yZF8wKTsKKwlhaF9hdHRyLT5ncmguZmxvd19sYWJlbCA9IEVIQ0FfQk1BU0tfR0VUKEdSSF9GTE9XTEFCRUxfTUFTSywKKwkJCQkJCSBhdi0+YXYuZ3JoLndvcmRfMCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGVoY2FfZGVzdHJveV9haChzdHJ1Y3QgaWJfYWggKmFoKQoreworCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihhaC0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOworCisJaWYgKG15X3BkLT5pYl9wZC51b2JqZWN0ICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICYmCisJICAgIG15X3BkLT5vd25waWQgIT0gY3VyX3BpZCkgeworCQllaGNhX2VycihhaC0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCisJCQkgY3VyX3BpZCwgbXlfcGQtPm93bnBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWttZW1fY2FjaGVfZnJlZShhdl9jYWNoZSwgY29udGFpbmVyX29mKGFoLCBzdHJ1Y3QgZWhjYV9hdiwgaWJfYWgpKTsKKworCXJldHVybiAwOworfQorCitpbnQgZWhjYV9pbml0X2F2X2NhY2hlKHZvaWQpCit7CisJYXZfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZWhjYV9jYWNoZV9hdiIsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBlaGNhX2F2KSwgMCwKKwkJCQkgICBTTEFCX0hXQ0FDSEVfQUxJR04sCisJCQkJICAgTlVMTCwgTlVMTCk7CisJaWYgKCFhdl9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZWhjYV9jbGVhbnVwX2F2X2NhY2hlKHZvaWQpCit7CisJaWYgKGF2X2NhY2hlKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koYXZfY2FjaGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NsYXNzZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzcyMjAzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzLmgKQEAgLTAsMCArMSwzNDYgQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIFN0cnVjdCBkZWZpbml0aW9uIGZvciBlSENBIGludGVybmFsIHN0cnVjdHVyZXMKKyAqCisgKiAgQXV0aG9yczogSGVpa28gSiBTY2hpY2sgPHNjaGlja2hqQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fRUhDQV9DTEFTU0VTX0hfXworI2RlZmluZSBfX0VIQ0FfQ0xBU1NFU19IX18KKworI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImlwel9wdF9mbi5oIgorCitzdHJ1Y3QgZWhjYV9tb2R1bGU7CitzdHJ1Y3QgZWhjYV9xcDsKK3N0cnVjdCBlaGNhX2NxOworc3RydWN0IGVoY2FfZXE7CitzdHJ1Y3QgZWhjYV9tcjsKK3N0cnVjdCBlaGNhX213Oworc3RydWN0IGVoY2FfcGQ7CitzdHJ1Y3QgZWhjYV9hdjsKKworI2lmZGVmIENPTkZJR19QUEM2NAorI2luY2x1ZGUgImVoY2FfY2xhc3Nlc19wU2VyaWVzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KKyNpbmNsdWRlIDxyZG1hL2liX3VzZXJfdmVyYnMuaD4KKworI2luY2x1ZGUgImVoY2FfaXJxLmgiCisKK3N0cnVjdCBlaGNhX2VxIHsKKwl1MzIgbGVuZ3RoOworCXN0cnVjdCBpcHpfcXVldWUgaXB6X3F1ZXVlOworCXN0cnVjdCBpcHpfZXFfaGFuZGxlIGlwel9lcV9oYW5kbGU7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGhfZ2FscGFzIGdhbHBhczsKKwlpbnQgaXNfaW5pdGlhbGl6ZWQ7CisJc3RydWN0IGVoY2FfcGZlcSBwZjsKKwlzcGlubG9ja190IHNwaW5sb2NrOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBpbnRlcnJ1cHRfdGFzazsKKwl1MzIgaXN0OworfTsKKworc3RydWN0IGVoY2Ffc3BvcnQgeworCXN0cnVjdCBpYl9jcSAqaWJjcV9hcXAxOworCXN0cnVjdCBpYl9xcCAqaWJxcF9hcXAxOworCWVudW0gaWJfcmF0ZSAgcmF0ZTsKKwllbnVtIGliX3BvcnRfc3RhdGUgcG9ydF9zdGF0ZTsKK307CisKK3N0cnVjdCBlaGNhX3NoY2EgeworCXN0cnVjdCBpYl9kZXZpY2UgaWJfZGV2aWNlOworCXN0cnVjdCBpYm1lYnVzX2RldiAqaWJtZWJ1c19kZXY7CisJdTggbnVtX3BvcnRzOworCWludCBod19sZXZlbDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNoY2FfbGlzdDsKKwlzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGlwel9oY2FfaGFuZGxlOworCXN0cnVjdCBlaGNhX3Nwb3J0IHNwb3J0WzJdOworCXN0cnVjdCBlaGNhX2VxIGVxOworCXN0cnVjdCBlaGNhX2VxIG5lcTsKKwlzdHJ1Y3QgZWhjYV9tciAqbWF4bXI7CisJc3RydWN0IGVoY2FfcGQgKnBkOworCXN0cnVjdCBoX2dhbHBhcyBnYWxwYXM7Cit9OworCitzdHJ1Y3QgZWhjYV9wZCB7CisJc3RydWN0IGliX3BkIGliX3BkOworCXN0cnVjdCBpcHpfcGQgZndfcGQ7CisJdTMyIG93bnBpZDsKK307CisKK3N0cnVjdCBlaGNhX3FwIHsKKwlzdHJ1Y3QgaWJfcXAgaWJfcXA7CisJdTMyIHFwX3R5cGU7CisJc3RydWN0IGlwel9xdWV1ZSBpcHpfc3F1ZXVlOworCXN0cnVjdCBpcHpfcXVldWUgaXB6X3JxdWV1ZTsKKwlzdHJ1Y3QgaF9nYWxwYXMgZ2FscGFzOworCXUzMiBxa2V5OworCXUzMiByZWFsX3FwX251bTsKKwl1MzIgdG9rZW47CisJc3BpbmxvY2tfdCBzcGlubG9ja19zOworCXNwaW5sb2NrX3Qgc3BpbmxvY2tfcjsKKwl1MzIgc3FfbWF4X2lubGluZV9kYXRhX3NpemU7CisJc3RydWN0IGlwel9xcF9oYW5kbGUgaXB6X3FwX2hhbmRsZTsKKwlzdHJ1Y3QgZWhjYV9wZnFwIHBmOworCXN0cnVjdCBpYl9xcF9pbml0X2F0dHIgaW5pdF9hdHRyOworCXU2NCB1c3BhY2Vfc3F1ZXVlOworCXU2NCB1c3BhY2VfcnF1ZXVlOworCXU2NCB1c3BhY2VfZndoOworCXN0cnVjdCBlaGNhX2NxICpzZW5kX2NxOworCXN0cnVjdCBlaGNhX2NxICpyZWN2X2NxOworCXVuc2lnbmVkIGludCBzcWVycl9wdXJnZWZsYWc7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdF9lbnRyaWVzOworfTsKKworLyogbXVzdCBiZSBwb3dlciBvZiAyICovCisjZGVmaW5lIFFQX0hBU0hUQUJfTEVOIDgKKworc3RydWN0IGVoY2FfY3EgeworCXN0cnVjdCBpYl9jcSBpYl9jcTsKKwlzdHJ1Y3QgaXB6X3F1ZXVlIGlwel9xdWV1ZTsKKwlzdHJ1Y3QgaF9nYWxwYXMgZ2FscGFzOworCXNwaW5sb2NrX3Qgc3BpbmxvY2s7CisJdTMyIGNxX251bWJlcjsKKwl1MzIgdG9rZW47CisJdTMyIG5yX29mX2VudHJpZXM7CisJc3RydWN0IGlwel9jcV9oYW5kbGUgaXB6X2NxX2hhbmRsZTsKKwlzdHJ1Y3QgZWhjYV9wZmNxIHBmOworCXNwaW5sb2NrX3QgY2JfbG9jazsKKwl1NjQgdXNwYWNlX3F1ZXVlOworCXU2NCB1c3BhY2VfZndoOworCXN0cnVjdCBobGlzdF9oZWFkIHFwX2hhc2h0YWJbUVBfSEFTSFRBQl9MRU5dOworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJdTMyIG5yX2NhbGxiYWNrczsKKwlzcGlubG9ja190IHRhc2tfbG9jazsKKwl1MzIgb3ducGlkOworfTsKKworZW51bSBlaGNhX21yX2ZsYWcgeworCUVIQ0FfTVJfRkxBR19GTVIgPSAweDgwMDAwMDAwLAkgLyogRk1SLCBjcmVhdGVkIHdpdGggZWhjYV9hbGxvY19mbXIgKi8KKwlFSENBX01SX0ZMQUdfTUFYTVIgPSAweDQwMDAwMDAwLCAvKiBtYXgtTVIgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworfTsKKworc3RydWN0IGVoY2FfbXIgeworCXVuaW9uIHsKKwkJc3RydWN0IGliX21yIGliX21yOwkvKiBtdXN0IGFsd2F5cyBiZSBmaXJzdCBpbiBlaGNhX21yICovCisJCXN0cnVjdCBpYl9mbXIgaWJfZm1yOwkvKiBtdXN0IGFsd2F5cyBiZSBmaXJzdCBpbiBlaGNhX21yICovCisJfSBpYjsKKwlzcGlubG9ja190IG1ybG9jazsKKworCWVudW0gZWhjYV9tcl9mbGFnIGZsYWdzOworCXUzMiBudW1fcGFnZXM7CQkvKiBudW1iZXIgb2YgTVIgcGFnZXMgKi8KKwl1MzIgbnVtXzRrOwkJLyogbnVtYmVyIG9mIDRrICJwYWdlIiBwb3J0aW9ucyB0byBmb3JtIE1SICovCisJaW50IGFjbDsJCS8qIEFDTCAoc3RvcmVkIGhlcmUgZm9yIHVzYWdlIGluIHJlcmVnaXN0ZXIpICovCisJdTY0ICpzdGFydDsJCS8qIHZpcnR1YWwgc3RhcnQgYWRkcmVzcyAoc3RvcmVkIGhlcmUgZm9yICovCisJICAgICAgICAgICAgICAgICAgICAgICAgLyogdXNhZ2UgaW4gcmVyZWdpc3RlcikgKi8KKwl1NjQgc2l6ZTsJCS8qIHNpemUgKHN0b3JlZCBoZXJlIGZvciB1c2FnZSBpbiByZXJlZ2lzdGVyKSAqLworCXUzMiBmbXJfcGFnZV9zaXplOwkvKiBwYWdlIHNpemUgZm9yIEZNUiAqLworCXUzMiBmbXJfbWF4X3BhZ2VzOwkvKiBtYXggcGFnZXMgZm9yIEZNUiAqLworCXUzMiBmbXJfbWF4X21hcHM7CS8qIG1heCBvdXRzdGFuZGluZyBtYXBzIGZvciBGTVIgKi8KKwl1MzIgZm1yX21hcF9jbnQ7CS8qIG1hcCBjb3VudGVyIGZvciBGTVIgKi8KKwkvKiBmdyBzcGVjaWZpYyBkYXRhICovCisJc3RydWN0IGlwel9tcm13X2hhbmRsZSBpcHpfbXJfaGFuZGxlOwkvKiBNUiBoYW5kbGUgZm9yIGgtY2FsbHMgKi8KKwlzdHJ1Y3QgaF9nYWxwYXMgZ2FscGFzOworCS8qIGRhdGEgZm9yIHVzZXJzcGFjZSBicmlkZ2UgKi8KKwl1MzIgbnJfb2ZfcGFnZXM7CisJdm9pZCAqcGFnZWFycmF5OworfTsKKworc3RydWN0IGVoY2FfbXcgeworCXN0cnVjdCBpYl9tdyBpYl9tdzsJLyogZ2VuMiBtdywgbXVzdCBhbHdheXMgYmUgZmlyc3QgaW4gZWhjYV9tdyAqLworCXNwaW5sb2NrX3QgbXdsb2NrOworCisJdTggbmV2ZXJfYm91bmQ7CQkvKiBpbmRpY2F0aW9uIE1XIHdhcyBuZXZlciBib3VuZCAqLworCXN0cnVjdCBpcHpfbXJtd19oYW5kbGUgaXB6X213X2hhbmRsZTsJLyogTVcgaGFuZGxlIGZvciBoLWNhbGxzICovCisJc3RydWN0IGhfZ2FscGFzIGdhbHBhczsKK307CisKK2VudW0gZWhjYV9tcl9wZ2lfdHlwZSB7CisJRUhDQV9NUl9QR0lfUEhZUyAgID0gMSwgIC8qIHR5cGUgb2YgZWhjYV9yZWdfcGh5c19tciwKKwkJCQkgICogZWhjYV9yZXJlZ19waHlzX21yLAorCQkJCSAgKiBlaGNhX3JlZ19pbnRlcm5hbF9tYXhtciAqLworCUVIQ0FfTVJfUEdJX1VTRVIgICA9IDIsICAvKiB0eXBlIG9mIGVoY2FfcmVnX3VzZXJfbXIgKi8KKwlFSENBX01SX1BHSV9GTVIgICAgPSAzICAgLyogdHlwZSBvZiBlaGNhX21hcF9waHlzX2ZtciAqLworfTsKKworc3RydWN0IGVoY2FfbXJfcGdpbmZvIHsKKwllbnVtIGVoY2FfbXJfcGdpX3R5cGUgdHlwZTsKKwl1NjQgbnVtX3BhZ2VzOworCXU2NCBwYWdlX2NudDsKKwl1NjQgbnVtXzRrOyAgICAgICAvKiBudW1iZXIgb2YgNGsgInBhZ2UiIHBvcnRpb25zICovCisJdTY0IHBhZ2VfNGtfY250OyAgLyogY291bnRlciBmb3IgNGsgInBhZ2UiIHBvcnRpb25zICovCisJdTY0IG5leHRfNGs7ICAgICAgLyogbmV4dCA0ayAicGFnZSIgcG9ydGlvbiBpbiBidWZmZXIvY2h1bmsvbGlzdGVsZW0gKi8KKworCS8qIHR5cGUgRUhDQV9NUl9QR0lfUEhZUyBzZWN0aW9uICovCisJaW50IG51bV9waHlzX2J1ZjsKKwlzdHJ1Y3QgaWJfcGh5c19idWYgKnBoeXNfYnVmX2FycmF5OworCXU2NCBuZXh0X2J1ZjsKKworCS8qIHR5cGUgRUhDQV9NUl9QR0lfVVNFUiBzZWN0aW9uICovCisJc3RydWN0IGliX3VtZW0gKnJlZ2lvbjsKKwlzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqbmV4dF9jaHVuazsKKwl1NjQgbmV4dF9ubWFwOworCisJLyogdHlwZSBFSENBX01SX1BHSV9GTVIgc2VjdGlvbiAqLworCXU2NCAqcGFnZV9saXN0OworCXU2NCBuZXh0X2xpc3RlbGVtOworCS8qIG5leHRfNGsgYWxzbyB1c2VkIHdpdGhpbiBFSENBX01SX1BHSV9GTVIgKi8KK307CisKKy8qIG91dHB1dCBwYXJhbWV0ZXJzIGZvciBNUi9GTVIgaGlweiBjYWxscyAqLworc3RydWN0IGVoY2FfbXJfaGlwem91dF9wYXJtcyB7CisJc3RydWN0IGlwel9tcm13X2hhbmRsZSBoYW5kbGU7CisJdTMyIGxrZXk7CisJdTMyIHJrZXk7CisJdTY0IGxlbjsKKwl1NjQgdmFkZHI7CisJdTMyIGFjbDsKK307CisKKy8qIG91dHB1dCBwYXJhbWV0ZXJzIGZvciBNVyBoaXB6IGNhbGxzICovCitzdHJ1Y3QgZWhjYV9td19oaXB6b3V0X3Bhcm1zIHsKKwlzdHJ1Y3QgaXB6X21ybXdfaGFuZGxlIGhhbmRsZTsKKwl1MzIgcmtleTsKK307CisKK3N0cnVjdCBlaGNhX2F2IHsKKwlzdHJ1Y3QgaWJfYWggaWJfYWg7CisJc3RydWN0IGVoY2FfdWRfYXYgYXY7Cit9OworCitzdHJ1Y3QgZWhjYV91Y29udGV4dCB7CisJc3RydWN0IGliX3Vjb250ZXh0IGliX3Vjb250ZXh0OworfTsKKworc3RydWN0IGVoY2FfbW9kdWxlICplaGNhX21vZHVsZV9uZXcodm9pZCk7CisKK2ludCBlaGNhX21vZHVsZV9kZWxldGUoc3RydWN0IGVoY2FfbW9kdWxlICptZSk7CisKK2ludCBlaGNhX2VxX2N0b3Ioc3RydWN0IGVoY2FfZXEgKmVxKTsKKworaW50IGVoY2FfZXFfZHRvcihzdHJ1Y3QgZWhjYV9lcSAqZXEpOworCitzdHJ1Y3QgZWhjYV9zaGNhICplaGNhX3NoY2FfbmV3KHZvaWQpOworCitpbnQgZWhjYV9zaGNhX2RlbGV0ZShzdHJ1Y3QgZWhjYV9zaGNhICptZSk7CisKK3N0cnVjdCBlaGNhX3Nwb3J0ICplaGNhX3Nwb3J0X25ldyhzdHJ1Y3QgZWhjYV9zaGNhICphbmNob3IpOworCitpbnQgZWhjYV9pbml0X3BkX2NhY2hlKHZvaWQpOwordm9pZCBlaGNhX2NsZWFudXBfcGRfY2FjaGUodm9pZCk7CitpbnQgZWhjYV9pbml0X2NxX2NhY2hlKHZvaWQpOwordm9pZCBlaGNhX2NsZWFudXBfY3FfY2FjaGUodm9pZCk7CitpbnQgZWhjYV9pbml0X3FwX2NhY2hlKHZvaWQpOwordm9pZCBlaGNhX2NsZWFudXBfcXBfY2FjaGUodm9pZCk7CitpbnQgZWhjYV9pbml0X2F2X2NhY2hlKHZvaWQpOwordm9pZCBlaGNhX2NsZWFudXBfYXZfY2FjaGUodm9pZCk7CitpbnQgZWhjYV9pbml0X21ybXdfY2FjaGUodm9pZCk7Cit2b2lkIGVoY2FfY2xlYW51cF9tcm13X2NhY2hlKHZvaWQpOworCitleHRlcm4gc3BpbmxvY2tfdCBlaGNhX3FwX2lkcl9sb2NrOworZXh0ZXJuIHNwaW5sb2NrX3QgZWhjYV9jcV9pZHJfbG9jazsKK2V4dGVybiBzdHJ1Y3QgaWRyIGVoY2FfcXBfaWRyOworZXh0ZXJuIHN0cnVjdCBpZHIgZWhjYV9jcV9pZHI7CisKK2V4dGVybiBpbnQgZWhjYV9zdGF0aWNfcmF0ZTsKK2V4dGVybiBpbnQgZWhjYV9wb3J0X2FjdF90aW1lOworZXh0ZXJuIGludCBlaGNhX3VzZV9ocF9tcjsKKworc3RydWN0IGlwenVfcXVldWVfcmVzcCB7CisJdTY0IHF1ZXVlOyAgICAgICAgLyogcG9pbnRzIHRvIGZpcnN0IHF1ZXVlIGVudHJ5ICovCisJdTMyIHFlX3NpemU7ICAgICAgLyogcXVldWUgZW50cnkgc2l6ZSAqLworCXUzMiBhY3RfbnJfb2Zfc2c7CisJdTMyIHF1ZXVlX2xlbmd0aDsgLyogcXVldWUgbGVuZ3RoIGFsbG9jYXRlZCBpbiBieXRlcyAqLworCXUzMiBwYWdlc2l6ZTsKKwl1MzIgdG9nZ2xlX3N0YXRlOworCXUzMiBkdW1teTsgLyogcGFkZGluZyBmb3IgOCBieXRlIGFsaWdubWVudCAqLworfTsKKworc3RydWN0IGVoY2FfY3JlYXRlX2NxX3Jlc3AgeworCXUzMiBjcV9udW1iZXI7CisJdTMyIHRva2VuOworCXN0cnVjdCBpcHp1X3F1ZXVlX3Jlc3AgaXB6X3F1ZXVlOworCXN0cnVjdCBoX2dhbHBhcyBnYWxwYXM7Cit9OworCitzdHJ1Y3QgZWhjYV9jcmVhdGVfcXBfcmVzcCB7CisJdTMyIHFwX251bTsKKwl1MzIgdG9rZW47CisJdTMyIHFwX3R5cGU7CisJdTMyIHFrZXk7CisJLyogcXBfbnVtIGFzc2lnbmVkIGJ5IGVoY2E6IHNxcDAvMSBtYXkgaGF2ZSBnb3QgZGlmZmVyZW50IG51bWJlcnMgKi8KKwl1MzIgcmVhbF9xcF9udW07CisJdTMyIGR1bW15OyAvKiBwYWRkaW5nIGZvciA4IGJ5dGUgYWxpZ25tZW50ICovCisJc3RydWN0IGlwenVfcXVldWVfcmVzcCBpcHpfc3F1ZXVlOworCXN0cnVjdCBpcHp1X3F1ZXVlX3Jlc3AgaXB6X3JxdWV1ZTsKKwlzdHJ1Y3QgaF9nYWxwYXMgZ2FscGFzOworfTsKKworc3RydWN0IGVoY2FfYWxsb2NfY3FfcGFybXMgeworCXUzMiBucl9jcWU7CisJdTMyIGFjdF9ucl9vZl9lbnRyaWVzOworCXUzMiBhY3RfcGFnZXM7CisJc3RydWN0IGlwel9lcV9oYW5kbGUgZXFfaGFuZGxlOworfTsKKworc3RydWN0IGVoY2FfYWxsb2NfcXBfcGFybXMgeworCWludCBzZXJ2aWNldHlwZTsKKwlpbnQgc2lndHlwZTsKKwlpbnQgZGFxcF9jdHJsOworCWludCBtYXhfc2VuZF9zZ2U7CisJaW50IG1heF9yZWN2X3NnZTsKKwlpbnQgdWRfYXZfbF9rZXlfY3RsOworCisJdTE2IGFjdF9ucl9zZW5kX3dxZXM7CisJdTE2IGFjdF9ucl9yZWN2X3dxZXM7CisJdTggIGFjdF9ucl9yZWN2X3NnZXM7CisJdTggIGFjdF9ucl9zZW5kX3NnZXM7CisKKwl1MzIgbnJfcnFfcGFnZXM7CisJdTMyIG5yX3NxX3BhZ2VzOworCisJc3RydWN0IGlwel9lcV9oYW5kbGUgaXB6X2VxX2hhbmRsZTsKKwlzdHJ1Y3QgaXB6X3BkIHBkOworfTsKKworaW50IGVoY2FfY3FfYXNzaWduX3FwKHN0cnVjdCBlaGNhX2NxICpjcSwgc3RydWN0IGVoY2FfcXAgKnFwKTsKK2ludCBlaGNhX2NxX3VuYXNzaWduX3FwKHN0cnVjdCBlaGNhX2NxICpjcSwgdW5zaWduZWQgaW50IHFwX251bSk7CitzdHJ1Y3QgZWhjYV9xcCogZWhjYV9jcV9nZXRfcXAoc3RydWN0IGVoY2FfY3EgKmNxLCBpbnQgcXBfbnVtKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NsYXNzZXNfcFNlcmllcy5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzX3BTZXJpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjY1ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jbGFzc2VzX3BTZXJpZXMuaApAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgcFNlcmllcyBpbnRlcmZhY2UgZGVmaW5pdGlvbnMKKyAqCisgKiAgQXV0aG9yczogV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2Ugb2YgR1BMIHYyLjAgYW5kIE9wZW5JQgorICogIEJTRC4KKyAqCisgKiBPcGVuSUIgQlNEIExpY2Vuc2UKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfX0VIQ0FfQ0xBU1NFU19QU0VSSUVTX0hfXworI2RlZmluZSBfX0VIQ0FfQ0xBU1NFU19QU0VSSUVTX0hfXworCisjaW5jbHVkZSAiaGNwX3BoeXAuaCIKKyNpbmNsdWRlICJpcHpfcHRfZm4uaCIKKworCitzdHJ1Y3QgZWhjYV9wZnFwIHsKKwlzdHJ1Y3QgaXB6X3FwdCBzcXB0OworCXN0cnVjdCBpcHpfcXB0IHJxcHQ7Cit9OworCitzdHJ1Y3QgZWhjYV9wZmNxIHsKKwlzdHJ1Y3QgaXB6X3FwdCBxcHQ7CisJdTMyIGNxbnI7Cit9OworCitzdHJ1Y3QgZWhjYV9wZmVxIHsKKwlzdHJ1Y3QgaXB6X3FwdCBxcHQ7CisJc3RydWN0IGhfZ2FscGEgZ2FscGE7CisJdTMyIGVxbnI7Cit9OworCitzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIHsKKwl1NjQgaGFuZGxlOworfTsKKworc3RydWN0IGlwel9jcV9oYW5kbGUgeworCXU2NCBoYW5kbGU7Cit9OworCitzdHJ1Y3QgaXB6X2VxX2hhbmRsZSB7CisJdTY0IGhhbmRsZTsKK307CisKK3N0cnVjdCBpcHpfcXBfaGFuZGxlIHsKKwl1NjQgaGFuZGxlOworfTsKK3N0cnVjdCBpcHpfbXJtd19oYW5kbGUgeworCXU2NCBoYW5kbGU7Cit9OworCitzdHJ1Y3QgaXB6X3BkIHsKKwl1MzIgdmFsdWU7Cit9OworCitzdHJ1Y3QgaGNwX21vZGlmeV9xcF9jb250cm9sX2Jsb2NrIHsKKwl1MzIgcWtleTsgICAgICAgICAgICAgICAgICAgICAgLyogMDAgKi8KKwl1MzIgcmRkOyAgICAgICAgICAgICAgICAgICAgICAgLyogcmVsaWFibGUgZGF0YWdyYW0gZG9tYWluICovCisJdTMyIHNlbmRfcHNuOyAgICAgICAgICAgICAgICAgIC8qIDAyICovCisJdTMyIHJlY2VpdmVfcHNuOyAgICAgICAgICAgICAgIC8qIDAzICovCisJdTMyIHByaW1fcGh5c19wb3J0OyAgICAgICAgICAgIC8qIDA0ICovCisJdTMyIGFsdF9waHlzX3BvcnQ7ICAgICAgICAgICAgIC8qIDA1ICovCisJdTMyIHByaW1fcF9rZXlfaWR4OyAgICAgICAgICAgIC8qIDA2ICovCisJdTMyIGFsdF9wX2tleV9pZHg7ICAgICAgICAgICAgIC8qIDA3ICovCisJdTMyIHJkbWFfYXRvbWljX2N0cmw7ICAgICAgICAgIC8qIDA4ICovCisJdTMyIHFwX3N0YXRlOyAgICAgICAgICAgICAgICAgIC8qIDA5ICovCisJdTMyIHJlc2VydmVkXzEwOyAgICAgICAgICAgICAgIC8qIDEwICovCisJdTMyIHJkbWFfbnJfYXRvbWljX3Jlc3BfcmVzOyAgIC8qIDExICovCisJdTMyIHBhdGhfbWlncmF0aW9uX3N0YXRlOyAgICAgIC8qIDEyICovCisJdTMyIHJkbWFfYXRvbWljX291dHN0X2Rlc3RfcXA7IC8qIDEzICovCisJdTMyIGRlc3RfcXBfbnI7ICAgICAgICAgICAgICAgIC8qIDE0ICovCisJdTMyIG1pbl9ybnJfbmFrX3RpbWVyX2ZpZWxkOyAgIC8qIDE1ICovCisJdTMyIHNlcnZpY2VfbGV2ZWw7ICAgICAgICAgICAgIC8qIDE2ICovCisJdTMyIHNlbmRfZ3JoX2ZsYWc7ICAgICAgICAgICAgIC8qIDE3ICovCisJdTMyIHJldHJ5X2NvdW50OyAgICAgICAgICAgICAgIC8qIDE4ICovCisJdTMyIHRpbWVvdXQ7ICAgICAgICAgICAgICAgICAgIC8qIDE5ICovCisJdTMyIHBhdGhfbXR1OyAgICAgICAgICAgICAgICAgIC8qIDIwICovCisJdTMyIG1heF9zdGF0aWNfcmF0ZTsgICAgICAgICAgIC8qIDIxICovCisJdTMyIGRsaWQ7ICAgICAgICAgICAgICAgICAgICAgIC8qIDIyICovCisJdTMyIHJucl9yZXRyeV9jb3VudDsgICAgICAgICAgIC8qIDIzICovCisJdTMyIHNvdXJjZV9wYXRoX2JpdHM7ICAgICAgICAgIC8qIDI0ICovCisJdTMyIHRyYWZmaWNfY2xhc3M7ICAgICAgICAgICAgIC8qIDI1ICovCisJdTMyIGhvcF9saW1pdDsgICAgICAgICAgICAgICAgIC8qIDI2ICovCisJdTMyIHNvdXJjZV9naWRfaWR4OyAgICAgICAgICAgIC8qIDI3ICovCisJdTMyIGZsb3dfbGFiZWw7ICAgICAgICAgICAgICAgIC8qIDI4ICovCisJdTMyIHJlc2VydmVkXzI5OyAgICAgICAgICAgICAgIC8qIDI5ICovCisJdW5pb24geyAgICAgICAgICAgICAgICAgICAgICAgIC8qIDMwICovCisJCXU2NCBkd1syXTsKKwkJdTggYnl0ZVsxNl07CisJfSBkZXN0X2dpZDsKKwl1MzIgc2VydmljZV9sZXZlbF9hbDsgICAgICAgICAgLyogMzQgKi8KKwl1MzIgc2VuZF9ncmhfZmxhZ19hbDsgICAgICAgICAgLyogMzUgKi8KKwl1MzIgcmV0cnlfY291bnRfYWw7ICAgICAgICAgICAgLyogMzYgKi8KKwl1MzIgdGltZW91dF9hbDsgICAgICAgICAgICAgICAgLyogMzcgKi8KKwl1MzIgbWF4X3N0YXRpY19yYXRlX2FsOyAgICAgICAgLyogMzggKi8KKwl1MzIgZGxpZF9hbDsgICAgICAgICAgICAgICAgICAgLyogMzkgKi8KKwl1MzIgcm5yX3JldHJ5X2NvdW50X2FsOyAgICAgICAgLyogNDAgKi8KKwl1MzIgc291cmNlX3BhdGhfYml0c19hbDsgICAgICAgLyogNDEgKi8KKwl1MzIgdHJhZmZpY19jbGFzc19hbDsgICAgICAgICAgLyogNDIgKi8KKwl1MzIgaG9wX2xpbWl0X2FsOyAgICAgICAgICAgICAgLyogNDMgKi8KKwl1MzIgc291cmNlX2dpZF9pZHhfYWw7ICAgICAgICAgLyogNDQgKi8KKwl1MzIgZmxvd19sYWJlbF9hbDsgICAgICAgICAgICAgLyogNDUgKi8KKwl1MzIgcmVzZXJ2ZWRfNDY7ICAgICAgICAgICAgICAgLyogNDYgKi8KKwl1MzIgcmVzZXJ2ZWRfNDc7ICAgICAgICAgICAgICAgLyogNDcgKi8KKwl1bmlvbiB7ICAgICAgICAgICAgICAgICAgICAgICAgLyogNDggKi8KKwkJdTY0IGR3WzJdOworCQl1OCBieXRlWzE2XTsKKwl9IGRlc3RfZ2lkX2FsOworCXUzMiBtYXhfbnJfb3V0c3Rfc2VuZF93cjsgICAgICAvKiA1MiAqLworCXUzMiBtYXhfbnJfb3V0c3RfcmVjdl93cjsgICAgICAvKiA1MyAqLworCXUzMiBkaXNhYmxlX2V0ZV9jcmVkaXRfY2hlY2s7ICAvKiA1NCAqLworCXUzMiBxcF9udW1iZXI7ICAgICAgICAgICAgICAgICAvKiA1NSAqLworCXU2NCBzZW5kX3F1ZXVlX2hhbmRsZTsgICAgICAgICAvKiA1NiAqLworCXU2NCByZWN2X3F1ZXVlX2hhbmRsZTsgICAgICAgICAvKiA1OCAqLworCXUzMiBhY3R1YWxfbnJfc2dlc19pbl9zcV93cWU7ICAvKiA2MCAqLworCXUzMiBhY3R1YWxfbnJfc2dlc19pbl9ycV93cWU7ICAvKiA2MSAqLworCXUzMiBxcF9lbmFibGU7ICAgICAgICAgICAgICAgICAvKiA2MiAqLworCXUzMiBjdXJyX3NycV9saW1pdDsgICAgICAgICAgICAvKiA2MyAqLworCXU2NCBxcF9hZmZfYXN5bl9ldl9sb2dfcmVnOyAgICAvKiA2NCAqLworCXU2NCBzaGFyZWRfcnFfaG5kbDsgICAgICAgICAgICAvKiA2NiAqLworCXU2NCB0cmlnZ19kb29yYmVsbF9xcF9obmRsOyAgICAvKiA2OCAqLworCXUzMiByZXNlcnZlZF83MF8xMjdbNThdOyAgICAgICAvKiA3MCAqLworfTsKKworI2RlZmluZSBNUVBDQl9NQVNLX1FLRVkgICAgICAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMCwwKQorI2RlZmluZSBNUVBDQl9NQVNLX1NFTkRfUFNOICAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMiwyKQorI2RlZmluZSBNUVBDQl9NQVNLX1JFQ0VJVkVfUFNOICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMywzKQorI2RlZmluZSBNUVBDQl9NQVNLX1BSSU1fUEhZU19QT1JUICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oNCw0KQorI2RlZmluZSBNUVBDQl9QUklNX1BIWVNfUE9SVCAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjQsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfQUxUX1BIWVNfUE9SVCAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSg1LDUpCisjZGVmaW5lIE1RUENCX01BU0tfUFJJTV9QX0tFWV9JRFggICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSg2LDYpCisjZGVmaW5lIE1RUENCX1BSSU1fUF9LRVlfSURYICAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNCwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19BTFRfUF9LRVlfSURYICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDcsNykKKyNkZWZpbmUgTVFQQ0JfTUFTS19SRE1BX0FUT01JQ19DVFJMICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDgsOCkKKyNkZWZpbmUgTVFQQ0JfTUFTS19RUF9TVEFURSAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDksOSkKKyNkZWZpbmUgTVFQQ0JfUVBfU1RBVEUgICAgICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI0LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX1JETUFfTlJfQVRPTUlDX1JFU1BfUkVTICAgICAgRUhDQV9CTUFTS19JQk0oMTEsMTEpCisjZGVmaW5lIE1RUENCX01BU0tfUEFUSF9NSUdSQVRJT05fU1RBVEUgICAgICAgICBFSENBX0JNQVNLX0lCTSgxMiwxMikKKyNkZWZpbmUgTVFQQ0JfTUFTS19SRE1BX0FUT01JQ19PVVRTVF9ERVNUX1FQICAgIEVIQ0FfQk1BU0tfSUJNKDEzLDEzKQorI2RlZmluZSBNUVBDQl9NQVNLX0RFU1RfUVBfTlIgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMTQsMTQpCisjZGVmaW5lIE1RUENCX01BU0tfTUlOX1JOUl9OQUtfVElNRVJfRklFTEQgICAgICBFSENBX0JNQVNLX0lCTSgxNSwxNSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19TRVJWSUNFX0xFVkVMICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDE2LDE2KQorI2RlZmluZSBNUVBDQl9NQVNLX1NFTkRfR1JIX0ZMQUcgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMTcsMTcpCisjZGVmaW5lIE1RUENCX01BU0tfUkVUUllfQ09VTlQgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgxOCwxOCkKKyNkZWZpbmUgTVFQQ0JfTUFTS19USU1FT1VUICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDE5LDE5KQorI2RlZmluZSBNUVBDQl9NQVNLX1BBVEhfTVRVICAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjAsMjApCisjZGVmaW5lIE1RUENCX1BBVEhfTVRVICAgICAgICAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNCwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19NQVhfU1RBVElDX1JBVEUgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDIxLDIxKQorI2RlZmluZSBNUVBDQl9NQVhfU1RBVElDX1JBVEUgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjQsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfRExJRCAgICAgICAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyMiwyMikKKyNkZWZpbmUgTVFQQ0JfRExJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDE2LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX1JOUl9SRVRSWV9DT1VOVCAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjMsMjMpCisjZGVmaW5lIE1RUENCX1JOUl9SRVRSWV9DT1VOVCAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyOSwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19TT1VSQ0VfUEFUSF9CSVRTICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI0LDI0KQorI2RlZmluZSBNUVBDQl9TT1VSQ0VfUEFUSF9CSVRTICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjUsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfVFJBRkZJQ19DTEFTUyAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNSwyNSkKKyNkZWZpbmUgTVFQQ0JfVFJBRkZJQ19DTEFTUyAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI0LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX0hPUF9MSU1JVCAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjYsMjYpCisjZGVmaW5lIE1RUENCX0hPUF9MSU1JVCAgICAgICAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNCwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19TT1VSQ0VfR0lEX0lEWCAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI3LDI3KQorI2RlZmluZSBNUVBDQl9TT1VSQ0VfR0lEX0lEWCAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjQsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfRkxPV19MQUJFTCAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyOCwyOCkKKyNkZWZpbmUgTVFQQ0JfRkxPV19MQUJFTCAgICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDEyLDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX0RFU1RfR0lEICAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMzAsMzApCisjZGVmaW5lIE1RUENCX01BU0tfU0VSVklDRV9MRVZFTF9BTCAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzMSwzMSkKKyNkZWZpbmUgTVFQQ0JfU0VSVklDRV9MRVZFTF9BTCAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI4LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX1NFTkRfR1JIX0ZMQUdfQUwgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMzIsMzIpCisjZGVmaW5lIE1RUENCX1NFTkRfR1JIX0ZMQUdfQUwgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzMSwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19SRVRSWV9DT1VOVF9BTCAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDMzLDMzKQorI2RlZmluZSBNUVBDQl9SRVRSWV9DT1VOVF9BTCAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjksMzEpCisjZGVmaW5lIE1RUENCX01BU0tfVElNRU9VVF9BTCAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzNCwzNCkKKyNkZWZpbmUgTVFQQ0JfVElNRU9VVF9BTCAgICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI3LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX01BWF9TVEFUSUNfUkFURV9BTCAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMzUsMzUpCisjZGVmaW5lIE1RUENCX01BWF9TVEFUSUNfUkFURV9BTCAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNCwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19ETElEX0FMICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDM2LDM2KQorI2RlZmluZSBNUVBDQl9ETElEX0FMICAgICAgICAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMTYsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfUk5SX1JFVFJZX0NPVU5UX0FMICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzNywzNykKKyNkZWZpbmUgTVFQQ0JfUk5SX1JFVFJZX0NPVU5UX0FMICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI5LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX1NPVVJDRV9QQVRIX0JJVFNfQUwgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMzgsMzgpCisjZGVmaW5lIE1RUENCX1NPVVJDRV9QQVRIX0JJVFNfQUwgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNSwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19UUkFGRklDX0NMQVNTX0FMICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDM5LDM5KQorI2RlZmluZSBNUVBDQl9UUkFGRklDX0NMQVNTX0FMICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMjQsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfSE9QX0xJTUlUX0FMICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSg0MCw0MCkKKyNkZWZpbmUgTVFQQ0JfSE9QX0xJTUlUX0FMICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI0LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX1NPVVJDRV9HSURfSURYX0FMICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oNDEsNDEpCisjZGVmaW5lIE1RUENCX1NPVVJDRV9HSURfSURYX0FMICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgyNCwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19GTE9XX0xBQkVMX0FMICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDQyLDQyKQorI2RlZmluZSBNUVBDQl9GTE9XX0xBQkVMX0FMICAgICAgICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMTIsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfREVTVF9HSURfQUwgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSg0NCw0NCkKKyNkZWZpbmUgTVFQQ0JfTUFTS19NQVhfTlJfT1VUU1RfU0VORF9XUiAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDQ1LDQ1KQorI2RlZmluZSBNUVBDQl9NQVhfTlJfT1VUU1RfU0VORF9XUiAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMTYsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfTUFYX05SX09VVFNUX1JFQ1ZfV1IgICAgICAgICBFSENBX0JNQVNLX0lCTSg0Niw0NikKKyNkZWZpbmUgTVFQQ0JfTUFYX05SX09VVFNUX1JFQ1ZfV1IgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDE2LDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX0RJU0FCTEVfRVRFX0NSRURJVF9DSEVDSyAgICAgRUhDQV9CTUFTS19JQk0oNDcsNDcpCisjZGVmaW5lIE1RUENCX0RJU0FCTEVfRVRFX0NSRURJVF9DSEVDSyAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzMSwzMSkKKyNkZWZpbmUgTVFQQ0JfUVBfTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDgsMzEpCisjZGVmaW5lIE1RUENCX01BU0tfUVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSg0OCw0OCkKKyNkZWZpbmUgTVFQQ0JfUVBfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDMxLDMxKQorI2RlZmluZSBNUVBDQl9NQVNLX0NVUlJfU1FSX0xJTUlUICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oNDksNDkpCisjZGVmaW5lIE1RUENCX0NVUlJfU1FSX0xJTUlUICAgICAgICAgICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgxNSwzMSkKKyNkZWZpbmUgTVFQQ0JfTUFTS19RUF9BRkZfQVNZTl9FVl9MT0dfUkVHICAgICAgIEVIQ0FfQk1BU0tfSUJNKDUwLDUwKQorI2RlZmluZSBNUVBDQl9NQVNLX1NIQVJFRF9SUV9ITkRMICAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oNTEsNTEpCisKKyNlbmRpZiAvKiBfX0VIQ0FfQ0xBU1NFU19QU0VSSUVTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9jcS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OGZlMTkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2NxLmMKQEAgLTAsMCArMSw0MjcgQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIENvbXBsZXRpb24gcXVldWUgaGFuZGxpbmcKKyAqCisgKiAgQXV0aG9yczogV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIEtoYWRpamEgU291aXNzaSA8c291aXNzaUBkZS5pYm0uY29tPgorICogICAgICAgICAgIFJlaW5oYXJkIEVybnN0IDxyZXJuc3RAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIZWlrbyBKIFNjaGljayA8c2NoaWNraGpAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2Ugb2YgR1BMIHYyLjAgYW5kIE9wZW5JQgorICogIEJTRC4KKyAqCisgKiBPcGVuSUIgQlNEIExpY2Vuc2UKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CisKKyNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgorI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImVoY2FfaXJxLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqY3FfY2FjaGU7CisKK2ludCBlaGNhX2NxX2Fzc2lnbl9xcChzdHJ1Y3QgZWhjYV9jcSAqY3EsIHN0cnVjdCBlaGNhX3FwICpxcCkKK3sKKwl1bnNpZ25lZCBpbnQgcXBfbnVtID0gcXAtPnJlYWxfcXBfbnVtOworCXVuc2lnbmVkIGludCBrZXkgPSBxcF9udW0gJiAoUVBfSEFTSFRBQl9MRU4tMSk7CisJdW5zaWduZWQgbG9uZyBzcGxfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPnNwaW5sb2NrLCBzcGxfZmxhZ3MpOworCWhsaXN0X2FkZF9oZWFkKCZxcC0+bGlzdF9lbnRyaWVzLCAmY3EtPnFwX2hhc2h0YWJba2V5XSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3EtPnNwaW5sb2NrLCBzcGxfZmxhZ3MpOworCisJZWhjYV9kYmcoY3EtPmliX2NxLmRldmljZSwgImNxX251bT0leCByZWFsX3FwX251bT0leCIsCisJCSBjcS0+Y3FfbnVtYmVyLCBxcF9udW0pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBlaGNhX2NxX3VuYXNzaWduX3FwKHN0cnVjdCBlaGNhX2NxICpjcSwgdW5zaWduZWQgaW50IHJlYWxfcXBfbnVtKQoreworCWludCByZXQgPSAtRUlOVkFMOworCXVuc2lnbmVkIGludCBrZXkgPSByZWFsX3FwX251bSAmIChRUF9IQVNIVEFCX0xFTi0xKTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaXRlcjsKKwlzdHJ1Y3QgZWhjYV9xcCAqcXA7CisJdW5zaWduZWQgbG9uZyBzcGxfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPnNwaW5sb2NrLCBzcGxfZmxhZ3MpOworCWhsaXN0X2Zvcl9lYWNoKGl0ZXIsICZjcS0+cXBfaGFzaHRhYltrZXldKSB7CisJCXFwID0gaGxpc3RfZW50cnkoaXRlciwgc3RydWN0IGVoY2FfcXAsIGxpc3RfZW50cmllcyk7CisJCWlmIChxcC0+cmVhbF9xcF9udW0gPT0gcmVhbF9xcF9udW0pIHsKKwkJCWhsaXN0X2RlbChpdGVyKTsKKwkJCWVoY2FfZGJnKGNxLT5pYl9jcS5kZXZpY2UsCisJCQkJICJyZW1vdmVkIHFwIGZyb20gY3EgLmNxX251bT0leCByZWFsX3FwX251bT0leCIsCisJCQkJIGNxLT5jcV9udW1iZXIsIHJlYWxfcXBfbnVtKTsKKwkJCXJldCA9IDA7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+c3BpbmxvY2ssIHNwbF9mbGFncyk7CisJaWYgKHJldCkKKwkJZWhjYV9lcnIoY3EtPmliX2NxLmRldmljZSwKKwkJCSAicXAgbm90IGZvdW5kIGNxX251bT0leCByZWFsX3FwX251bT0leCIsCisJCQkgY3EtPmNxX251bWJlciwgcmVhbF9xcF9udW0pOworCisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGVoY2FfcXAqIGVoY2FfY3FfZ2V0X3FwKHN0cnVjdCBlaGNhX2NxICpjcSwgaW50IHJlYWxfcXBfbnVtKQoreworCXN0cnVjdCBlaGNhX3FwICpyZXQgPSBOVUxMOworCXVuc2lnbmVkIGludCBrZXkgPSByZWFsX3FwX251bSAmIChRUF9IQVNIVEFCX0xFTi0xKTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqaXRlcjsKKwlzdHJ1Y3QgZWhjYV9xcCAqcXA7CisJaGxpc3RfZm9yX2VhY2goaXRlciwgJmNxLT5xcF9oYXNodGFiW2tleV0pIHsKKwkJcXAgPSBobGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgZWhjYV9xcCwgbGlzdF9lbnRyaWVzKTsKKwkJaWYgKHFwLT5yZWFsX3FwX251bSA9PSByZWFsX3FwX251bSkgeworCQkJcmV0ID0gcXA7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gcmV0OworfQorCitzdHJ1Y3QgaWJfY3EgKmVoY2FfY3JlYXRlX2NxKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgaW50IGNxZSwKKwkJCSAgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0YXRpYyBjb25zdCB1MzIgYWRkaXRpb25hbF9jcWUgPSAyMDsKKwlzdHJ1Y3QgaWJfY3EgKmNxOworCXN0cnVjdCBlaGNhX2NxICpteV9jcTsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0KKwkJY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlOworCXN0cnVjdCBlaGNhX2FsbG9jX2NxX3Bhcm1zIHBhcmFtOyAvKiBoX2NhbGwncyBvdXQgcGFyYW1ldGVycyAqLworCXN0cnVjdCBoX2dhbHBhIGdhbDsKKwl2b2lkICp2cGFnZTsKKwl1MzIgY291bnRlcjsKKwl1NjQgcnBhZ2UsIGNxeF9mZWMsIGhfcmV0OworCWludCBpcHpfcmMsIHJldCwgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGNxZSA+PSAweEZGRkZGRkZGIC0gNjQgLSBhZGRpdGlvbmFsX2NxZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlteV9jcSA9IGttZW1fY2FjaGVfYWxsb2MoY3FfY2FjaGUsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIW15X2NxKSB7CisJCWVoY2FfZXJyKGRldmljZSwgIk91dCBvZiBtZW1vcnkgZm9yIGVoY2FfY3Egc3RydWN0IGRldmljZT0lcCIsCisJCQkgZGV2aWNlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJbWVtc2V0KG15X2NxLCAwLCBzaXplb2Yoc3RydWN0IGVoY2FfY3EpKTsKKwltZW1zZXQoJnBhcmFtLCAwLCBzaXplb2Yoc3RydWN0IGVoY2FfYWxsb2NfY3FfcGFybXMpKTsKKworCXNwaW5fbG9ja19pbml0KCZteV9jcS0+c3BpbmxvY2spOworCXNwaW5fbG9ja19pbml0KCZteV9jcS0+Y2JfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJm15X2NxLT50YXNrX2xvY2spOworCW15X2NxLT5vd25waWQgPSBjdXJyZW50LT50Z2lkOworCisJY3EgPSAmbXlfY3EtPmliX2NxOworCisJYWRhcHRlcl9oYW5kbGUgPSBzaGNhLT5pcHpfaGNhX2hhbmRsZTsKKwlwYXJhbS5lcV9oYW5kbGUgPSBzaGNhLT5lcS5pcHpfZXFfaGFuZGxlOworCisJZG8geworCQlpZiAoIWlkcl9wcmVfZ2V0KCZlaGNhX2NxX2lkciwgR0ZQX0tFUk5FTCkpIHsKKwkJCWNxID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCWVoY2FfZXJyKGRldmljZSwgIkNhbid0IHJlc2VydmUgaWRyIG5yLiBkZXZpY2U9JXAiLAorCQkJCSBkZXZpY2UpOworCQkJZ290byBjcmVhdGVfY3FfZXhpdDE7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBpZHJfZ2V0X25ldygmZWhjYV9jcV9pZHIsIG15X2NxLCAmbXlfY3EtPnRva2VuKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCisJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOworCisJaWYgKHJldCkgeworCQljcSA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWVoY2FfZXJyKGRldmljZSwgIkNhbid0IGFsbG9jYXRlIG5ldyBpZHIgZW50cnkuIGRldmljZT0lcCIsCisJCQkgZGV2aWNlKTsKKwkJZ290byBjcmVhdGVfY3FfZXhpdDE7CisJfQorCisJLyoKKwkgKiBDUXMgbWF4aW11bSBkZXB0aCBpcyA0R0ItNjQsIGJ1dCB3ZSBuZWVkIGFkZGl0aW9uYWwgMjAgYXMgYnVmZmVyCisJICogZm9yIHJlY2VpdmluZyBlcnJvcnMgQ1FFcy4KKwkgKi8KKwlwYXJhbS5ucl9jcWUgPSBjcWUgKyBhZGRpdGlvbmFsX2NxZTsKKwloX3JldCA9IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9jcShhZGFwdGVyX2hhbmRsZSwgbXlfY3EsICZwYXJhbSk7CisKKwlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoY2FfZXJyKGRldmljZSwgImhpcHpfaF9hbGxvY19yZXNvdXJjZV9jcSgpIGZhaWxlZCAiCisJCQkgImhfcmV0PSVseCBkZXZpY2U9JXAiLCBoX3JldCwgZGV2aWNlKTsKKwkJY3EgPSBFUlJfUFRSKGVoY2EyaWJfcmV0dXJuX2NvZGUoaF9yZXQpKTsKKwkJZ290byBjcmVhdGVfY3FfZXhpdDI7CisJfQorCisJaXB6X3JjID0gaXB6X3F1ZXVlX2N0b3IoJm15X2NxLT5pcHpfcXVldWUsIHBhcmFtLmFjdF9wYWdlcywKKwkJCQlFSENBX1BBR0VTSVpFLCBzaXplb2Yoc3RydWN0IGVoY2FfY3FlKSwgMCk7CisJaWYgKCFpcHpfcmMpIHsKKwkJZWhjYV9lcnIoZGV2aWNlLCAiaXB6X3F1ZXVlX2N0b3IoKSBmYWlsZWQgaXB6X3JjPSV4IGRldmljZT0lcCIsCisJCQkgaXB6X3JjLCBkZXZpY2UpOworCQljcSA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gY3JlYXRlX2NxX2V4aXQzOworCX0KKworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBwYXJhbS5hY3RfcGFnZXM7IGNvdW50ZXIrKykgeworCQl2cGFnZSA9IGlwel9xcGFnZWl0X2dldF9pbmMoJm15X2NxLT5pcHpfcXVldWUpOworCQlpZiAoIXZwYWdlKSB7CisJCQllaGNhX2VycihkZXZpY2UsICJpcHpfcXBhZ2VpdF9nZXRfaW5jKCkgIgorCQkJCSAicmV0dXJucyBOVUxMIGRldmljZT0lcCIsIGRldmljZSk7CisJCQljcSA9IEVSUl9QVFIoLUVBR0FJTik7CisJCQlnb3RvIGNyZWF0ZV9jcV9leGl0NDsKKwkJfQorCQlycGFnZSA9IHZpcnRfdG9fYWJzKHZwYWdlKTsKKworCQloX3JldCA9IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9jcShhZGFwdGVyX2hhbmRsZSwKKwkJCQkJCSBteV9jcS0+aXB6X2NxX2hhbmRsZSwKKwkJCQkJCSAmbXlfY3EtPnBmLAorCQkJCQkJIDAsCisJCQkJCQkgMCwKKwkJCQkJCSBycGFnZSwKKwkJCQkJCSAxLAorCQkJCQkJIG15X2NxLT5nYWxwYXMuCisJCQkJCQkga2VybmVsKTsKKworCQlpZiAoaF9yZXQgPCBIX1NVQ0NFU1MpIHsKKwkJCWVoY2FfZXJyKGRldmljZSwgImhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9jcSgpIGZhaWxlZCAiCisJCQkJICJlaGNhX2NxPSVwIGNxX251bT0leCBoX3JldD0lbHggY291bnRlcj0laSAiCisJCQkJICJhY3RfcGFnZXM9JWkiLCBteV9jcSwgbXlfY3EtPmNxX251bWJlciwKKwkJCQkgaF9yZXQsIGNvdW50ZXIsIHBhcmFtLmFjdF9wYWdlcyk7CisJCQljcSA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCQlnb3RvIGNyZWF0ZV9jcV9leGl0NDsKKwkJfQorCisJCWlmIChjb3VudGVyID09IChwYXJhbS5hY3RfcGFnZXMgLSAxKSkgeworCQkJdnBhZ2UgPSBpcHpfcXBhZ2VpdF9nZXRfaW5jKCZteV9jcS0+aXB6X3F1ZXVlKTsKKwkJCWlmICgoaF9yZXQgIT0gSF9TVUNDRVNTKSB8fCB2cGFnZSkgeworCQkJCWVoY2FfZXJyKGRldmljZSwgIlJlZ2lzdHJhdGlvbiBvZiBwYWdlcyBub3QgIgorCQkJCQkgImNvbXBsZXRlIGVoY2FfY3E9JXAgY3FfbnVtPSV4ICIKKwkJCQkJICJoX3JldD0lbHgiLCBteV9jcSwgbXlfY3EtPmNxX251bWJlciwKKwkJCQkJIGhfcmV0KTsKKwkJCQljcSA9IEVSUl9QVFIoLUVBR0FJTik7CisJCQkJZ290byBjcmVhdGVfY3FfZXhpdDQ7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoaF9yZXQgIT0gSF9QQUdFX1JFR0lTVEVSRUQpIHsKKwkJCQllaGNhX2VycihkZXZpY2UsICJSZWdpc3RyYXRpb24gb2YgcGFnZSBmYWlsZWQgIgorCQkJCQkgImVoY2FfY3E9JXAgY3FfbnVtPSV4IGhfcmV0PSVseCIKKwkJCQkJICJjb3VudGVyPSVpIGFjdF9wYWdlcz0laSIsCisJCQkJCSBteV9jcSwgbXlfY3EtPmNxX251bWJlciwKKwkJCQkJIGhfcmV0LCBjb3VudGVyLCBwYXJhbS5hY3RfcGFnZXMpOworCQkJCWNxID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCQlnb3RvIGNyZWF0ZV9jcV9leGl0NDsKKwkJCX0KKwkJfQorCX0KKworCWlwel9xZWl0X3Jlc2V0KCZteV9jcS0+aXB6X3F1ZXVlKTsKKworCWdhbCA9IG15X2NxLT5nYWxwYXMua2VybmVsOworCWNxeF9mZWMgPSBoaXB6X2dhbHBhX2xvYWQoZ2FsLCBDUVRFTU1fT0ZGU0VUKGNxeF9mZWMpKTsKKwllaGNhX2RiZyhkZXZpY2UsICJlaGNhX2NxPSVwIGNxX251bT0leCBDUVhfRkVDPSVseCIsCisJCSBteV9jcSwgbXlfY3EtPmNxX251bWJlciwgY3F4X2ZlYyk7CisKKwlteV9jcS0+aWJfY3EuY3FlID0gbXlfY3EtPm5yX29mX2VudHJpZXMgPQorCQlwYXJhbS5hY3RfbnJfb2ZfZW50cmllcyAtIGFkZGl0aW9uYWxfY3FlOworCW15X2NxLT5jcV9udW1iZXIgPSAobXlfY3EtPmlwel9jcV9oYW5kbGUuaGFuZGxlKSAmIDB4ZmZmZjsKKworCWZvciAoaSA9IDA7IGkgPCBRUF9IQVNIVEFCX0xFTjsgaSsrKQorCQlJTklUX0hMSVNUX0hFQUQoJm15X2NxLT5xcF9oYXNodGFiW2ldKTsKKworCWlmIChjb250ZXh0KSB7CisJCXN0cnVjdCBpcHpfcXVldWUgKmlwel9xdWV1ZSA9ICZteV9jcS0+aXB6X3F1ZXVlOworCQlzdHJ1Y3QgZWhjYV9jcmVhdGVfY3FfcmVzcCByZXNwOworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwkJbWVtc2V0KCZyZXNwLCAwLCBzaXplb2YocmVzcCkpOworCQlyZXNwLmNxX251bWJlciA9IG15X2NxLT5jcV9udW1iZXI7CisJCXJlc3AudG9rZW4gPSBteV9jcS0+dG9rZW47CisJCXJlc3AuaXB6X3F1ZXVlLnFlX3NpemUgPSBpcHpfcXVldWUtPnFlX3NpemU7CisJCXJlc3AuaXB6X3F1ZXVlLmFjdF9ucl9vZl9zZyA9IGlwel9xdWV1ZS0+YWN0X25yX29mX3NnOworCQlyZXNwLmlwel9xdWV1ZS5xdWV1ZV9sZW5ndGggPSBpcHpfcXVldWUtPnF1ZXVlX2xlbmd0aDsKKwkJcmVzcC5pcHpfcXVldWUucGFnZXNpemUgPSBpcHpfcXVldWUtPnBhZ2VzaXplOworCQlyZXNwLmlwel9xdWV1ZS50b2dnbGVfc3RhdGUgPSBpcHpfcXVldWUtPnRvZ2dsZV9zdGF0ZTsKKwkJcmV0ID0gZWhjYV9tbWFwX25vcGFnZSgoKHU2NCkobXlfY3EtPnRva2VuKSA8PCAzMikgfCAweDEyMDAwMDAwLAorCQkJCSAgICAgICBpcHpfcXVldWUtPnF1ZXVlX2xlbmd0aCwKKwkJCQkgICAgICAgKHZvaWQqKikmcmVzcC5pcHpfcXVldWUucXVldWUsCisJCQkJICAgICAgICZ2bWEpOworCQlpZiAocmV0KSB7CisJCQllaGNhX2VycihkZXZpY2UsICJDb3VsZCBub3QgbW1hcCBxdWV1ZSBwYWdlcyIpOworCQkJY3EgPSBFUlJfUFRSKHJldCk7CisJCQlnb3RvIGNyZWF0ZV9jcV9leGl0NDsKKwkJfQorCQlteV9jcS0+dXNwYWNlX3F1ZXVlID0gcmVzcC5pcHpfcXVldWUucXVldWU7CisJCXJlc3AuZ2FscGFzID0gbXlfY3EtPmdhbHBhczsKKwkJcmV0ID0gZWhjYV9tbWFwX3JlZ2lzdGVyKG15X2NxLT5nYWxwYXMudXNlci5md19oYW5kbGUsCisJCQkJCSAodm9pZCoqKSZyZXNwLmdhbHBhcy5rZXJuZWwuZndfaGFuZGxlLAorCQkJCQkgJnZtYSk7CisJCWlmIChyZXQpIHsKKwkJCWVoY2FfZXJyKGRldmljZSwgIkNvdWxkIG5vdCBtbWFwIGZ3X2hhbmRsZSIpOworCQkJY3EgPSBFUlJfUFRSKHJldCk7CisJCQlnb3RvIGNyZWF0ZV9jcV9leGl0NTsKKwkJfQorCQlteV9jcS0+dXNwYWNlX2Z3aCA9ICh1NjQpcmVzcC5nYWxwYXMua2VybmVsLmZ3X2hhbmRsZTsKKwkJaWYgKGliX2NvcHlfdG9fdWRhdGEodWRhdGEsICZyZXNwLCBzaXplb2YocmVzcCkpKSB7CisJCQllaGNhX2VycihkZXZpY2UsICJDb3B5IHRvIHVkYXRhIGZhaWxlZC4iKTsKKwkJCWdvdG8gY3JlYXRlX2NxX2V4aXQ2OworCQl9CisJfQorCisJcmV0dXJuIGNxOworCitjcmVhdGVfY3FfZXhpdDY6CisJZWhjYV9tdW5tYXAobXlfY3EtPnVzcGFjZV9md2gsIEVIQ0FfUEFHRVNJWkUpOworCitjcmVhdGVfY3FfZXhpdDU6CisJZWhjYV9tdW5tYXAobXlfY3EtPnVzcGFjZV9xdWV1ZSwgbXlfY3EtPmlwel9xdWV1ZS5xdWV1ZV9sZW5ndGgpOworCitjcmVhdGVfY3FfZXhpdDQ6CisJaXB6X3F1ZXVlX2R0b3IoJm15X2NxLT5pcHpfcXVldWUpOworCitjcmVhdGVfY3FfZXhpdDM6CisJaF9yZXQgPSBoaXB6X2hfZGVzdHJveV9jcShhZGFwdGVyX2hhbmRsZSwgbXlfY3EsIDEpOworCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpCisJCWVoY2FfZXJyKGRldmljZSwgImhpcHpfaF9kZXN0cm95X2NxKCkgZmFpbGVkIGVoY2FfY3E9JXAgIgorCQkJICJjcV9udW09JXggaF9yZXQ9JWx4IiwgbXlfY3EsIG15X2NxLT5jcV9udW1iZXIsIGhfcmV0KTsKKworY3JlYXRlX2NxX2V4aXQyOgorCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNhX2NxX2lkcl9sb2NrLCBmbGFncyk7CisJaWRyX3JlbW92ZSgmZWhjYV9jcV9pZHIsIG15X2NxLT50b2tlbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCitjcmVhdGVfY3FfZXhpdDE6CisJa21lbV9jYWNoZV9mcmVlKGNxX2NhY2hlLCBteV9jcSk7CisKKwlyZXR1cm4gY3E7Cit9CisKK2ludCBlaGNhX2Rlc3Ryb3lfY3Eoc3RydWN0IGliX2NxICpjcSkKK3sKKwl1NjQgaF9yZXQ7CisJaW50IHJldDsKKwlzdHJ1Y3QgZWhjYV9jcSAqbXlfY3EgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBlaGNhX2NxLCBpYl9jcSk7CisJaW50IGNxX251bSA9IG15X2NxLT5jcV9udW1iZXI7CisJc3RydWN0IGliX2RldmljZSAqZGV2aWNlID0gY3EtPmRldmljZTsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gY29udGFpbmVyX29mKGRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKKwkJCQkJICAgICAgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlID0gc2hjYS0+aXB6X2hjYV9oYW5kbGU7CisJdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCXdoaWxlIChteV9jcS0+bnJfY2FsbGJhY2tzKQorCQl5aWVsZCgpOworCisJaWRyX3JlbW92ZSgmZWhjYV9jcV9pZHIsIG15X2NxLT50b2tlbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCisJaWYgKG15X2NxLT51c3BhY2VfcXVldWUgJiYgbXlfY3EtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCWVoY2FfZXJyKGRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAorCQkJIGN1cl9waWQsIG15X2NxLT5vd25waWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiB1bi1tbWFwIGlmIHZtYSBhbGxvYyAqLworCWlmIChteV9jcS0+dXNwYWNlX3F1ZXVlICkgeworCQlyZXQgPSBlaGNhX211bm1hcChteV9jcS0+dXNwYWNlX3F1ZXVlLAorCQkJCSAgbXlfY3EtPmlwel9xdWV1ZS5xdWV1ZV9sZW5ndGgpOworCQlpZiAocmV0KQorCQkJZWhjYV9lcnIoZGV2aWNlLCAiQ291bGQgbm90IG11bm1hcCBxdWV1ZSBlaGNhX2NxPSVwICIKKwkJCQkgImNxX251bT0leCIsIG15X2NxLCBjcV9udW0pOworCQlyZXQgPSBlaGNhX211bm1hcChteV9jcS0+dXNwYWNlX2Z3aCwgRUhDQV9QQUdFU0laRSk7CisJCWlmIChyZXQpCisJCQllaGNhX2VycihkZXZpY2UsICJDb3VsZCBub3QgbXVubWFwIGZ3aCBlaGNhX2NxPSVwICIKKwkJCQkgImNxX251bT0leCIsIG15X2NxLCBjcV9udW0pOworCX0KKworCWhfcmV0ID0gaGlwel9oX2Rlc3Ryb3lfY3EoYWRhcHRlcl9oYW5kbGUsIG15X2NxLCAwKTsKKwlpZiAoaF9yZXQgPT0gSF9SX1NUQVRFKSB7CisJCS8qIGNxIGluIGVycjogcmVhZCBlcnIgZGF0YSBhbmQgZGVzdHJveSBpdCBmb3JjaWJseSAqLworCQllaGNhX2RiZyhkZXZpY2UsICJlaGNhX2NxPSVwIGNxX251bT0leCByZXNzb3VyY2U9JWx4IGluIGVyciAiCisJCQkgInN0YXRlLiBUcnkgdG8gZGVsZXRlIGl0IGZvcmNpYmx5LiIsCisJCQkgbXlfY3EsIGNxX251bSwgbXlfY3EtPmlwel9jcV9oYW5kbGUuaGFuZGxlKTsKKwkJZWhjYV9lcnJvcl9kYXRhKHNoY2EsIG15X2NxLCBteV9jcS0+aXB6X2NxX2hhbmRsZS5oYW5kbGUpOworCQloX3JldCA9IGhpcHpfaF9kZXN0cm95X2NxKGFkYXB0ZXJfaGFuZGxlLCBteV9jcSwgMSk7CisJCWlmIChoX3JldCA9PSBIX1NVQ0NFU1MpCisJCQllaGNhX2RiZyhkZXZpY2UsICJjcV9udW09JXggZGVsZXRlZCBzdWNjZXNzZnVsbHkuIiwKKwkJCQkgY3FfbnVtKTsKKwl9CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2VycihkZXZpY2UsICJoaXB6X2hfZGVzdHJveV9jcSgpIGZhaWxlZCBoX3JldD0lbHggIgorCQkJICJlaGNhX2NxPSVwIGNxX251bT0leCIsIGhfcmV0LCBteV9jcSwgY3FfbnVtKTsKKwkJcmV0dXJuIGVoY2EyaWJfcmV0dXJuX2NvZGUoaF9yZXQpOworCX0KKwlpcHpfcXVldWVfZHRvcigmbXlfY3EtPmlwel9xdWV1ZSk7CisJa21lbV9jYWNoZV9mcmVlKGNxX2NhY2hlLCBteV9jcSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGVoY2FfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqY3EsIGludCBjcWUsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RydWN0IGVoY2FfY3EgKm15X2NxID0gY29udGFpbmVyX29mKGNxLCBzdHJ1Y3QgZWhjYV9jcSwgaWJfY3EpOworCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKKworCWlmIChteV9jcS0+dXNwYWNlX3F1ZXVlICYmIG15X2NxLT5vd25waWQgIT0gY3VyX3BpZCkgeworCQllaGNhX2VycihjcS0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCisJCQkgY3VyX3BpZCwgbXlfY3EtPm93bnBpZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFRPRE86IHByb3BlciByZXNpemUgbmVlZHMgdG8gYmUgZG9uZSAqLworCWVoY2FfZXJyKGNxLT5kZXZpY2UsICJub3QgaW1wbGVtZW50ZWQgeWV0Iik7CisKKwlyZXR1cm4gLUVGQVVMVDsKK30KKworaW50IGVoY2FfaW5pdF9jcV9jYWNoZSh2b2lkKQoreworCWNxX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImVoY2FfY2FjaGVfY3EiLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBlaGNhX2NxKSwgMCwKKwkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwKKwkJCQkgICAgIE5VTEwsIE5VTEwpOworCWlmICghY3FfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIGVoY2FfY2xlYW51cF9jcV9jYWNoZSh2b2lkKQoreworCWlmIChjcV9jYWNoZSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KGNxX2NhY2hlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfZXEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfZXEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjgxZGVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9lcS5jCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICBFdmVudCBxdWV1ZSBoYW5kbGluZworICoKKyAqICBBdXRob3JzOiBXYWxlcmkgRm9taW4gPGZvbWluQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgS2hhZGlqYSBTb3Vpc3NpIDxzb3Vpc3NpQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgUmVpbmhhcmQgRXJuc3QgPHJlcm5zdEBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhlaWtvIEogU2NoaWNrIDxzY2hpY2toakBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhvYW5nLU5hbSBOZ3V5ZW4gPGhuZ3V5ZW5AZGUuaWJtLmNvbT4KKyAqCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZWhjYV9jbGFzc2VzLmgiCisjaW5jbHVkZSAiZWhjYV9pcnEuaCIKKyNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgorI2luY2x1ZGUgImVoY2FfcWVzLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisjaW5jbHVkZSAiaXB6X3B0X2ZuLmgiCisKK2ludCBlaGNhX2NyZWF0ZV9lcShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkgICBzdHJ1Y3QgZWhjYV9lcSAqZXEsCisJCSAgIGNvbnN0IGVudW0gZWhjYV9lcV90eXBlIHR5cGUsIGNvbnN0IHUzMiBsZW5ndGgpCit7CisJdTY0IHJldDsKKwl1MzIgbnJfcGFnZXM7CisJdTMyIGk7CisJdm9pZCAqdnBhZ2U7CisJc3RydWN0IGliX2RldmljZSAqaWJfZGV2ID0gJnNoY2EtPmliX2RldmljZTsKKworCXNwaW5fbG9ja19pbml0KCZlcS0+c3BpbmxvY2spOworCWVxLT5pc19pbml0aWFsaXplZCA9IDA7CisKKwlpZiAodHlwZSAhPSBFSENBX0VRICYmIHR5cGUgIT0gRUhDQV9ORVEpIHsKKwkJZWhjYV9lcnIoaWJfZGV2LCAiSW52YWxpZCBFUSB0eXBlICV4LiBlcT0lcCIsIHR5cGUsIGVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghbGVuZ3RoKSB7CisJCWVoY2FfZXJyKGliX2RldiwgIkVRIGxlbmd0aCBtdXN0IG5vdCBiZSB6ZXJvLiBlcT0lcCIsIGVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gaGlwel9oX2FsbG9jX3Jlc291cmNlX2VxKHNoY2EtPmlwel9oY2FfaGFuZGxlLAorCQkJCSAgICAgICAmZXEtPnBmLAorCQkJCSAgICAgICB0eXBlLAorCQkJCSAgICAgICBsZW5ndGgsCisJCQkJICAgICAgICZlcS0+aXB6X2VxX2hhbmRsZSwKKwkJCQkgICAgICAgJmVxLT5sZW5ndGgsCisJCQkJICAgICAgICZucl9wYWdlcywgJmVxLT5pc3QpOworCisJaWYgKHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhjYV9lcnIoaWJfZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgRVEvTkVRLiBlcT0lcCIsIGVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0ID0gaXB6X3F1ZXVlX2N0b3IoJmVxLT5pcHpfcXVldWUsIG5yX3BhZ2VzLAorCQkJICAgICBFSENBX1BBR0VTSVpFLCBzaXplb2Yoc3RydWN0IGVoY2FfZXFlKSwgMCk7CisJaWYgKCFyZXQpIHsKKwkJZWhjYV9lcnIoaWJfZGV2LCAiQ2FuJ3QgYWxsb2NhdGUgRVEgcGFnZXMgZXE9JXAiLCBlcSk7CisJCWdvdG8gY3JlYXRlX2VxX2V4aXQxOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CisJCXU2NCBycGFnZTsKKworCQlpZiAoISh2cGFnZSA9IGlwel9xcGFnZWl0X2dldF9pbmMoJmVxLT5pcHpfcXVldWUpKSkgeworCQkJcmV0ID0gSF9SRVNPVVJDRTsKKwkJCWdvdG8gY3JlYXRlX2VxX2V4aXQyOworCQl9CisKKwkJcnBhZ2UgPSB2aXJ0X3RvX2Ficyh2cGFnZSk7CisJCXJldCA9IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9lcShzaGNhLT5pcHpfaGNhX2hhbmRsZSwKKwkJCQkJICAgICAgIGVxLT5pcHpfZXFfaGFuZGxlLAorCQkJCQkgICAgICAgJmVxLT5wZiwKKwkJCQkJICAgICAgIDAsIDAsIHJwYWdlLCAxKTsKKworCQlpZiAoaSA9PSAobnJfcGFnZXMgLSAxKSkgeworCQkJLyogbGFzdCBwYWdlICovCisJCQl2cGFnZSA9IGlwel9xcGFnZWl0X2dldF9pbmMoJmVxLT5pcHpfcXVldWUpOworCQkJaWYgKHJldCAhPSBIX1NVQ0NFU1MgfHwgdnBhZ2UpCisJCQkJZ290byBjcmVhdGVfZXFfZXhpdDI7CisJCX0gZWxzZSB7CisJCQlpZiAocmV0ICE9IEhfUEFHRV9SRUdJU1RFUkVEIHx8ICF2cGFnZSkKKwkJCQlnb3RvIGNyZWF0ZV9lcV9leGl0MjsKKwkJfQorCX0KKworCWlwel9xZWl0X3Jlc2V0KCZlcS0+aXB6X3F1ZXVlKTsKKworCS8qIHJlZ2lzdGVyIGludGVycnVwdCBoYW5kbGVycyBhbmQgaW5pdGlhbGl6ZSB3b3JrIHF1ZXVlcyAqLworCWlmICh0eXBlID09IEVIQ0FfRVEpIHsKKwkJcmV0ID0gaWJtZWJ1c19yZXF1ZXN0X2lycShOVUxMLCBlcS0+aXN0LCBlaGNhX2ludGVycnVwdF9lcSwKKwkJCQkJICBTQV9JTlRFUlJVUFQsICJlaGNhX2VxIiwKKwkJCQkJICAodm9pZCAqKXNoY2EpOworCQlpZiAocmV0IDwgMCkKKwkJCWVoY2FfZXJyKGliX2RldiwgIkNhbid0IG1hcCBpbnRlcnJ1cHQgaGFuZGxlci4iKTsKKworCQl0YXNrbGV0X2luaXQoJmVxLT5pbnRlcnJ1cHRfdGFzaywgZWhjYV90YXNrbGV0X2VxLCAobG9uZylzaGNhKTsKKwl9IGVsc2UgaWYgKHR5cGUgPT0gRUhDQV9ORVEpIHsKKwkJcmV0ID0gaWJtZWJ1c19yZXF1ZXN0X2lycShOVUxMLCBlcS0+aXN0LCBlaGNhX2ludGVycnVwdF9uZXEsCisJCQkJCSAgU0FfSU5URVJSVVBULCAiZWhjYV9uZXEiLAorCQkJCQkgICh2b2lkICopc2hjYSk7CisJCWlmIChyZXQgPCAwKQorCQkJZWhjYV9lcnIoaWJfZGV2LCAiQ2FuJ3QgbWFwIGludGVycnVwdCBoYW5kbGVyLiIpOworCisJCXRhc2tsZXRfaW5pdCgmZXEtPmludGVycnVwdF90YXNrLCBlaGNhX3Rhc2tsZXRfbmVxLCAobG9uZylzaGNhKTsKKwl9CisKKwllcS0+aXNfaW5pdGlhbGl6ZWQgPSAxOworCisJcmV0dXJuIDA7CisKK2NyZWF0ZV9lcV9leGl0MjoKKwlpcHpfcXVldWVfZHRvcigmZXEtPmlwel9xdWV1ZSk7CisKK2NyZWF0ZV9lcV9leGl0MToKKwloaXB6X2hfZGVzdHJveV9lcShzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZXEpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3ZvaWQgKmVoY2FfcG9sbF9lcShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCBzdHJ1Y3QgZWhjYV9lcSAqZXEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl2b2lkICplcWU7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CisJZXFlID0gaXB6X2VxaXRfZXFfZ2V0X2luY192YWxpZCgmZXEtPmlwel9xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZXFlOworfQorCitpbnQgZWhjYV9kZXN0cm95X2VxKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsIHN0cnVjdCBlaGNhX2VxICplcSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBoX3JldDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcS0+c3BpbmxvY2ssIGZsYWdzKTsKKwlpYm1lYnVzX2ZyZWVfaXJxKE5VTEwsIGVxLT5pc3QsICh2b2lkICopc2hjYSk7CisKKwloX3JldCA9IGhpcHpfaF9kZXN0cm95X2VxKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBlcSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcS0+c3BpbmxvY2ssIGZsYWdzKTsKKworCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGZyZWUgRVEgcmVzb3VyY2VzLiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaXB6X3F1ZXVlX2R0b3IoJmVxLT5pcHpfcXVldWUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2hjYS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWFlNmFjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9oY2EuYwpAQCAtMCwwICsxLDI0MSBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgSENBIHF1ZXJ5IGZ1bmN0aW9ucworICoKKyAqICBBdXRob3JzOiBIZWlrbyBKIFNjaGljayA8c2NoaWNraGpAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisKK2ludCBlaGNhX3F1ZXJ5X2RldmljZShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgc3RydWN0IGliX2RldmljZV9hdHRyICpwcm9wcykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gY29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgZWhjYV9zaGNhLAorCQkJCQkgICAgICBpYl9kZXZpY2UpOworCXN0cnVjdCBoaXB6X3F1ZXJ5X2hjYSAqcmJsb2NrOworCisJcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYmxvY2spIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChoaXB6X2hfcXVlcnlfaGNhKHNoY2EtPmlwel9oY2FfaGFuZGxlLCByYmxvY2spICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2FuJ3QgcXVlcnkgZGV2aWNlIHByb3BlcnRpZXMiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBxdWVyeV9kZXZpY2UxOworCX0KKworCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBpYl9kZXZpY2VfYXR0cikpOworCXByb3BzLT5md192ZXIgICAgICAgICAgPSByYmxvY2stPmh3X3ZlcjsKKwlwcm9wcy0+bWF4X21yX3NpemUgICAgID0gcmJsb2NrLT5tYXhfbXJfc2l6ZTsKKwlwcm9wcy0+dmVuZG9yX2lkICAgICAgID0gcmJsb2NrLT52ZW5kb3JfaWQgPj4gODsKKwlwcm9wcy0+dmVuZG9yX3BhcnRfaWQgID0gcmJsb2NrLT52ZW5kb3JfcGFydF9pZCA+PiAxNjsKKwlwcm9wcy0+aHdfdmVyICAgICAgICAgID0gcmJsb2NrLT5od192ZXI7CisJcHJvcHMtPm1heF9xcCAgICAgICAgICA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfcXAsIElOVF9NQVgpOworCXByb3BzLT5tYXhfcXBfd3IgICAgICAgPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3dxZXNfd3EsIElOVF9NQVgpOworCXByb3BzLT5tYXhfc2dlICAgICAgICAgPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3NnZSwgSU5UX01BWCk7CisJcHJvcHMtPm1heF9zZ2VfcmQgICAgICA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfc2dlX3JkLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X2NxICAgICAgICAgID0gbWluX3QoaW50LCByYmxvY2stPm1heF9jcSwgSU5UX01BWCk7CisJcHJvcHMtPm1heF9jcWUgICAgICAgICA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfY3FlLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X21yICAgICAgICAgID0gbWluX3QoaW50LCByYmxvY2stPm1heF9tciwgSU5UX01BWCk7CisJcHJvcHMtPm1heF9tdyAgICAgICAgICA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfbXcsIElOVF9NQVgpOworCXByb3BzLT5tYXhfcGQgICAgICAgICAgPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3BkLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X2FoICAgICAgICAgID0gbWluX3QoaW50LCByYmxvY2stPm1heF9haCwgSU5UX01BWCk7CisJcHJvcHMtPm1heF9mbXIgICAgICAgICA9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfbXIsIElOVF9NQVgpOworCXByb3BzLT5tYXhfc3JxICAgICAgICAgPSAwOworCXByb3BzLT5tYXhfc3JxX3dyICAgICAgPSAwOworCXByb3BzLT5tYXhfc3JxX3NnZSAgICAgPSAwOworCXByb3BzLT5tYXhfcGtleXMgICAgICAgPSAxNjsKKwlwcm9wcy0+bG9jYWxfY2FfYWNrX2RlbGF5CisJCT0gcmJsb2NrLT5sb2NhbF9jYV9hY2tfZGVsYXk7CisJcHJvcHMtPm1heF9yYXdfaXB2Nl9xcAorCQk9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfcmF3X2lwdjZfcXAsIElOVF9NQVgpOworCXByb3BzLT5tYXhfcmF3X2V0aHlfcXAKKwkJPSBtaW5fdChpbnQsIHJibG9jay0+bWF4X3Jhd19ldGh5X3FwLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X21jYXN0X2dycAorCQk9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfbWNhc3RfZ3JwLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaAorCQk9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfbWNhc3RfcXBfYXR0YWNoLCBJTlRfTUFYKTsKKwlwcm9wcy0+bWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaAorCQk9IG1pbl90KGludCwgcmJsb2NrLT5tYXhfdG90YWxfbWNhc3RfcXBfYXR0YWNoLCBJTlRfTUFYKTsKKworcXVlcnlfZGV2aWNlMToKKwlrZnJlZShyYmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGVoY2FfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwKKwkJICAgIHU4IHBvcnQsIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSBjb250YWluZXJfb2YoaWJkZXYsIHN0cnVjdCBlaGNhX3NoY2EsCisJCQkJCSAgICAgIGliX2RldmljZSk7CisJc3RydWN0IGhpcHpfcXVlcnlfcG9ydCAqcmJsb2NrOworCisJcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYmxvY2spIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChoaXB6X2hfcXVlcnlfcG9ydChzaGNhLT5pcHpfaGNhX2hhbmRsZSwgcG9ydCwgcmJsb2NrKSAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IHF1ZXJ5IHBvcnQgcHJvcGVydGllcyIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHF1ZXJ5X3BvcnQxOworCX0KKworCW1lbXNldChwcm9wcywgMCwgc2l6ZW9mKHN0cnVjdCBpYl9wb3J0X2F0dHIpKTsKKwlwcm9wcy0+c3RhdGUgPSByYmxvY2stPnN0YXRlOworCisJc3dpdGNoIChyYmxvY2stPm1heF9tdHUpIHsKKwljYXNlIDB4MToKKwkJcHJvcHMtPmFjdGl2ZV9tdHUgPSBwcm9wcy0+bWF4X210dSA9IElCX01UVV8yNTY7CisJCWJyZWFrOworCWNhc2UgMHgyOgorCQlwcm9wcy0+YWN0aXZlX210dSA9IHByb3BzLT5tYXhfbXR1ID0gSUJfTVRVXzUxMjsKKwkJYnJlYWs7CisJY2FzZSAweDM6CisJCXByb3BzLT5hY3RpdmVfbXR1ID0gcHJvcHMtPm1heF9tdHUgPSBJQl9NVFVfMTAyNDsKKwkJYnJlYWs7CisJY2FzZSAweDQ6CisJCXByb3BzLT5hY3RpdmVfbXR1ID0gcHJvcHMtPm1heF9tdHUgPSBJQl9NVFVfMjA0ODsKKwkJYnJlYWs7CisJY2FzZSAweDU6CisJCXByb3BzLT5hY3RpdmVfbXR1ID0gcHJvcHMtPm1heF9tdHUgPSBJQl9NVFVfNDA5NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlVua25vd24gTVRVIHNpemU6ICV4LiIsCisJCQkgcmJsb2NrLT5tYXhfbXR1KTsKKwkJYnJlYWs7CisJfQorCisJcHJvcHMtPmdpZF90YmxfbGVuICAgICA9IHJibG9jay0+Z2lkX3RibF9sZW47CisJcHJvcHMtPm1heF9tc2dfc3ogICAgICA9IHJibG9jay0+bWF4X21zZ19zejsKKwlwcm9wcy0+YmFkX3BrZXlfY250ciAgID0gcmJsb2NrLT5iYWRfcGtleV9jbnRyOworCXByb3BzLT5xa2V5X3Zpb2xfY250ciAgPSByYmxvY2stPnFrZXlfdmlvbF9jbnRyOworCXByb3BzLT5wa2V5X3RibF9sZW4gICAgPSByYmxvY2stPnBrZXlfdGJsX2xlbjsKKwlwcm9wcy0+bGlkICAgICAgICAgICAgID0gcmJsb2NrLT5saWQ7CisJcHJvcHMtPnNtX2xpZCAgICAgICAgICA9IHJibG9jay0+c21fbGlkOworCXByb3BzLT5sbWMgICAgICAgICAgICAgPSByYmxvY2stPmxtYzsKKwlwcm9wcy0+c21fc2wgICAgICAgICAgID0gcmJsb2NrLT5zbV9zbDsKKwlwcm9wcy0+c3VibmV0X3RpbWVvdXQgID0gcmJsb2NrLT5zdWJuZXRfdGltZW91dDsKKwlwcm9wcy0+aW5pdF90eXBlX3JlcGx5ID0gcmJsb2NrLT5pbml0X3R5cGVfcmVwbHk7CisKKwlwcm9wcy0+YWN0aXZlX3dpZHRoICAgID0gSUJfV0lEVEhfMTJYOworCXByb3BzLT5hY3RpdmVfc3BlZWQgICAgPSAweDE7CisKK3F1ZXJ5X3BvcnQxOgorCWtmcmVlKHJibG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZWhjYV9xdWVyeV9wa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LCB1MTYgaW5kZXgsIHUxNiAqcGtleSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gY29udGFpbmVyX29mKGliZGV2LCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCXN0cnVjdCBoaXB6X3F1ZXJ5X3BvcnQgKnJibG9jazsKKworCWlmIChpbmRleCA+IDE2KSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJJbnZhbGlkIGluZGV4OiAleC4iLCBpbmRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJibG9jayA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWlmICghcmJsb2NrKSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICAiQ2FuJ3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGhpcHpfaF9xdWVyeV9wb3J0KHNoY2EtPmlwel9oY2FfaGFuZGxlLCBwb3J0LCByYmxvY2spICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2FuJ3QgcXVlcnkgcG9ydCBwcm9wZXJ0aWVzIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcXVlcnlfcGtleTE7CisJfQorCisJbWVtY3B5KHBrZXksICZyYmxvY2stPnBrZXlfZW50cmllcyArIGluZGV4LCBzaXplb2YodTE2KSk7CisKK3F1ZXJ5X3BrZXkxOgorCWtmcmVlKHJibG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZWhjYV9xdWVyeV9naWQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQsCisJCSAgIGludCBpbmRleCwgdW5pb24gaWJfZ2lkICpnaWQpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGNvbnRhaW5lcl9vZihpYmRldiwgc3RydWN0IGVoY2Ffc2hjYSwKKwkJCQkJICAgICAgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgaGlwel9xdWVyeV9wb3J0ICpyYmxvY2s7CisKKwlpZiAoaW5kZXggPiAyNTUpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkludmFsaWQgaW5kZXg6ICV4LiIsIGluZGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmJsb2NrID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyYmxvY2spIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWlmIChoaXB6X2hfcXVlcnlfcG9ydChzaGNhLT5pcHpfaGNhX2hhbmRsZSwgcG9ydCwgcmJsb2NrKSAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IHF1ZXJ5IHBvcnQgcHJvcGVydGllcyIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHF1ZXJ5X2dpZDE7CisJfQorCisJbWVtY3B5KCZnaWQtPnJhd1swXSwgJnJibG9jay0+Z2lkX3ByZWZpeCwgc2l6ZW9mKHU2NCkpOworCW1lbWNweSgmZ2lkLT5yYXdbOF0sICZyYmxvY2stPmd1aWRfZW50cmllc1tpbmRleF0sIHNpemVvZih1NjQpKTsKKworcXVlcnlfZ2lkMToKKwlrZnJlZShyYmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGVoY2FfbW9kaWZ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsCisJCSAgICAgdTggcG9ydCwgaW50IHBvcnRfbW9kaWZ5X21hc2ssCisJCSAgICAgc3RydWN0IGliX3BvcnRfbW9kaWZ5ICpwcm9wcykKK3sKKwkvKiBOb3QgaW1wbGVtZW50ZWQgeWV0ICovCisJcmV0dXJuIC1FRkFVTFQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTY1YjViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwpAQCAtMCwwICsxLDc2MiBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgRnVuY3Rpb25zIGZvciBFUXMsIE5FUXMgYW5kIGludGVycnVwdHMKKyAqCisgKiAgQXV0aG9yczogSGVpa28gSiBTY2hpY2sgPHNjaGlja2hqQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgS2hhZGlqYSBTb3Vpc3NpIDxzb3Vpc3NpQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZWhjYV9jbGFzc2VzLmgiCisjaW5jbHVkZSAiZWhjYV9pcnEuaCIKKyNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgorI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJoY3BfaWYuaCIKKyNpbmNsdWRlICJoaXB6X2Zucy5oIgorCisjZGVmaW5lIEVRRV9DT01QTEVUSU9OX0VWRU5UICAgRUhDQV9CTUFTS19JQk0oMSwxKQorI2RlZmluZSBFUUVfQ1FfUVBfTlVNQkVSICAgICAgIEVIQ0FfQk1BU0tfSUJNKDgsMzEpCisjZGVmaW5lIEVRRV9FRV9JREVOVElGSUVSICAgICAgRUhDQV9CTUFTS19JQk0oMiw3KQorI2RlZmluZSBFUUVfQ1FfTlVNQkVSICAgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDgsMzEpCisjZGVmaW5lIEVRRV9RUF9OVU1CRVIgICAgICAgICAgRUhDQV9CTUFTS19JQk0oOCwzMSkKKyNkZWZpbmUgRVFFX1FQX1RPS0VOICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzMiw2MykKKyNkZWZpbmUgRVFFX0NRX1RPS0VOICAgICAgICAgICBFSENBX0JNQVNLX0lCTSgzMiw2MykKKworI2RlZmluZSBORVFFX0NPTVBMRVRJT05fRVZFTlQgIEVIQ0FfQk1BU0tfSUJNKDEsMSkKKyNkZWZpbmUgTkVRRV9FVkVOVF9DT0RFICAgICAgICBFSENBX0JNQVNLX0lCTSgyLDcpCisjZGVmaW5lIE5FUUVfUE9SVF9OVU1CRVIgICAgICAgRUhDQV9CTUFTS19JQk0oOCwxNSkKKyNkZWZpbmUgTkVRRV9QT1JUX0FWQUlMQUJJTElUWSBFSENBX0JNQVNLX0lCTSgxNiwxNikKKworI2RlZmluZSBFUlJPUl9EQVRBX0xFTkdUSCAgICAgIEVIQ0FfQk1BU0tfSUJNKDUyLDYzKQorI2RlZmluZSBFUlJPUl9EQVRBX1RZUEUgICAgICAgIEVIQ0FfQk1BU0tfSUJNKDAsNykKKworI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORworCitzdGF0aWMgdm9pZCBxdWV1ZV9jb21wX3Rhc2soc3RydWN0IGVoY2FfY3EgKl9fY3EpOworCitzdGF0aWMgc3RydWN0IGVoY2FfY29tcF9wb29sKiBwb29sOworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjb21wX3Bvb2xfY2FsbGJhY2tfbmI7CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgZWhjYV9jcSAqY3EpCit7CisJaWYgKCFjcS0+aWJfY3EuY29tcF9oYW5kbGVyKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmNxLT5jYl9sb2NrKTsKKwljcS0+aWJfY3EuY29tcF9oYW5kbGVyKCZjcS0+aWJfY3EsIGNxLT5pYl9jcS5jcV9jb250ZXh0KTsKKwlzcGluX3VubG9jaygmY3EtPmNiX2xvY2spOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBwcmludF9lcnJvcl9kYXRhKHN0cnVjdCBlaGNhX3NoY2EgKiBzaGNhLCB2b2lkKiBkYXRhLAorCQkJICAgICB1NjQqIHJibG9jaywgaW50IGxlbmd0aCkKK3sKKwl1NjQgdHlwZSA9IEVIQ0FfQk1BU0tfR0VUKEVSUk9SX0RBVEFfVFlQRSwgcmJsb2NrWzJdKTsKKwl1NjQgcmVzb3VyY2UgPSByYmxvY2tbMV07CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIDB4MTogLyogUXVldWUgUGFpciAqLworCXsKKwkJc3RydWN0IGVoY2FfcXAgKnFwID0gKHN0cnVjdCBlaGNhX3FwKilkYXRhOworCisJCS8qIG9ubHkgcHJpbnQgZXJyb3IgZGF0YSBpZiBBRVIgaXMgc2V0ICovCisJCWlmIChyYmxvY2tbNl0gPT0gMCkKKwkJCXJldHVybjsKKworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJRUCAweCV4IChyZXNvdXJjZT0lbHgpIGhhcyBlcnJvcnMuIiwKKwkJCSBxcC0+aWJfcXAucXBfbnVtLCByZXNvdXJjZSk7CisJCWJyZWFrOworCX0KKwljYXNlIDB4NDogLyogQ29tcGxldGlvbiBRdWV1ZSAqLworCXsKKwkJc3RydWN0IGVoY2FfY3EgKmNxID0gKHN0cnVjdCBlaGNhX2NxKilkYXRhOworCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkgIkNRIDB4JXggKHJlc291cmNlPSVseCkgaGFzIGVycm9ycy4iLAorCQkJIGNxLT5jcV9udW1iZXIsIHJlc291cmNlKTsKKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkgIlVua25vd24gZXJycm9yIHR5cGU6ICVseCBvbiAlcy4iLAorCQkJIHR5cGUsIHNoY2EtPmliX2RldmljZS5uYW1lKTsKKwkJYnJlYWs7CisJfQorCisJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkVycm9yIGRhdGEgaXMgYXZhaWxhYmxlOiAlbHguIiwgcmVzb3VyY2UpOworCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJFSENBIC0tLS0tIGVycm9yIGRhdGEgYmVnaW4gIgorCQkgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIpOworCWVoY2FfZG1wKHJibG9jaywgbGVuZ3RoLCAicmVzb3VyY2U9JWx4IiwgcmVzb3VyY2UpOworCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJFSENBIC0tLS0tIGVycm9yIGRhdGEgZW5kICIKKwkJICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CisKKwlyZXR1cm47Cit9CisKK2ludCBlaGNhX2Vycm9yX2RhdGEoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwgdm9pZCAqZGF0YSwKKwkJICAgIHU2NCByZXNvdXJjZSkKK3sKKworCXVuc2lnbmVkIGxvbmcgcmV0OworCXU2NCAqcmJsb2NrOworCXVuc2lnbmVkIGxvbmcgYmxvY2tfY291bnQ7CisKKwlyYmxvY2sgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJibG9jaykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3JfZGF0YTE7CisJfQorCisJcmV0ID0gaGlwel9oX2Vycm9yX2RhdGEoc2hjYS0+aXB6X2hjYV9oYW5kbGUsCisJCQkJcmVzb3VyY2UsCisJCQkJcmJsb2NrLAorCQkJCSZibG9ja19jb3VudCk7CisKKwlpZiAocmV0ID09IEhfUl9TVEFURSkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJObyBlcnJvciBkYXRhIGlzIGF2YWlsYWJsZTogJWx4LiIsIHJlc291cmNlKTsKKwl9CisJZWxzZSBpZiAocmV0ID09IEhfU1VDQ0VTUykgeworCQlpbnQgbGVuZ3RoOworCisJCWxlbmd0aCA9IEVIQ0FfQk1BU0tfR0VUKEVSUk9SX0RBVEFfTEVOR1RILCByYmxvY2tbMF0pOworCisJCWlmIChsZW5ndGggPiBQQUdFX1NJWkUpCisJCQlsZW5ndGggPSBQQUdFX1NJWkU7CisKKwkJcHJpbnRfZXJyb3JfZGF0YShzaGNhLCBkYXRhLCByYmxvY2ssIGxlbmd0aCk7CisJfQorCWVsc2UgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJFcnJvciBkYXRhIGNvdWxkIG5vdCBiZSBmZXRjaGVkOiAlbHgiLCByZXNvdXJjZSk7CisJfQorCisJa2ZyZWUocmJsb2NrKTsKKworZXJyb3JfZGF0YTE6CisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgdm9pZCBxcF9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkJICAgICAgdTY0IGVxZSwKKwkJCSAgICAgIGVudW0gaWJfZXZlbnRfdHlwZSBldmVudF90eXBlKQoreworCXN0cnVjdCBpYl9ldmVudCBldmVudDsKKwlzdHJ1Y3QgZWhjYV9xcCAqcXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdG9rZW4gPSBFSENBX0JNQVNLX0dFVChFUUVfUVBfVE9LRU4sIGVxZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCXFwID0gaWRyX2ZpbmQoJmVoY2FfcXBfaWRyLCB0b2tlbik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCisKKwlpZiAoIXFwKQorCQlyZXR1cm47CisKKwllaGNhX2Vycm9yX2RhdGEoc2hjYSwgcXAsIHFwLT5pcHpfcXBfaGFuZGxlLmhhbmRsZSk7CisKKwlpZiAoIXFwLT5pYl9xcC5ldmVudF9oYW5kbGVyKQorCQlyZXR1cm47CisKKwlldmVudC5kZXZpY2UgICAgID0gJnNoY2EtPmliX2RldmljZTsKKwlldmVudC5ldmVudCAgICAgID0gZXZlbnRfdHlwZTsKKwlldmVudC5lbGVtZW50LnFwID0gJnFwLT5pYl9xcDsKKworCXFwLT5pYl9xcC5ldmVudF9oYW5kbGVyKCZldmVudCwgcXAtPmliX3FwLnFwX2NvbnRleHQpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBjcV9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkJCQkgIHU2NCBlcWUpCit7CisJc3RydWN0IGVoY2FfY3EgKmNxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHRva2VuID0gRUhDQV9CTUFTS19HRVQoRVFFX0NRX1RPS0VOLCBlcWUpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKwljcSA9IGlkcl9maW5kKCZlaGNhX2NxX2lkciwgdG9rZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKworCWlmICghY3EpCisJCXJldHVybjsKKworCWVoY2FfZXJyb3JfZGF0YShzaGNhLCBjcSwgY3EtPmlwel9jcV9oYW5kbGUuaGFuZGxlKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfaWRlbnRpZmllcihzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCB1NjQgZXFlKQoreworCXU4IGlkZW50aWZpZXIgPSBFSENBX0JNQVNLX0dFVChFUUVfRUVfSURFTlRJRklFUiwgZXFlKTsKKworCXN3aXRjaCAoaWRlbnRpZmllcikgeworCWNhc2UgMHgwMjogLyogcGF0aCBtaWdyYXRlZCAqLworCQlxcF9ldmVudF9jYWxsYmFjayhzaGNhLCBlcWUsIElCX0VWRU5UX1BBVEhfTUlHKTsKKwkJYnJlYWs7CisJY2FzZSAweDAzOiAvKiBjb21tdW5pY2F0aW9uIGVzdGFibGlzaGVkICovCisJCXFwX2V2ZW50X2NhbGxiYWNrKHNoY2EsIGVxZSwgSUJfRVZFTlRfQ09NTV9FU1QpOworCQlicmVhazsKKwljYXNlIDB4MDQ6IC8qIHNlbmQgcXVldWUgZHJhaW5lZCAqLworCQlxcF9ldmVudF9jYWxsYmFjayhzaGNhLCBlcWUsIElCX0VWRU5UX1NRX0RSQUlORUQpOworCQlicmVhazsKKwljYXNlIDB4MDU6IC8qIFFQIGVycm9yICovCisJY2FzZSAweDA2OiAvKiBRUCBlcnJvciAqLworCQlxcF9ldmVudF9jYWxsYmFjayhzaGNhLCBlcWUsIElCX0VWRU5UX1FQX0ZBVEFMKTsKKwkJYnJlYWs7CisJY2FzZSAweDA3OiAvKiBDUSBlcnJvciAqLworCWNhc2UgMHgwODogLyogQ1EgZXJyb3IgKi8KKwkJY3FfZXZlbnRfY2FsbGJhY2soc2hjYSwgZXFlKTsKKwkJYnJlYWs7CisJY2FzZSAweDA5OiAvKiBNUk1XUFRFIGVycm9yICovCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJNUk1XUFRFIGVycm9yLiIpOworCQlicmVhazsKKwljYXNlIDB4MEE6IC8qIHBvcnQgZXZlbnQgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlBvcnQgZXZlbnQuIik7CisJCWJyZWFrOworCWNhc2UgMHgwQjogLyogTVIgYWNjZXNzIGVycm9yICovCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJNUiBhY2Nlc3MgZXJyb3IuIik7CisJCWJyZWFrOworCWNhc2UgMHgwQzogLyogRVEgZXJyb3IgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkVRIGVycm9yLiIpOworCQlicmVhazsKKwljYXNlIDB4MEQ6IC8qIFAvUV9LZXkgbWlzbWF0Y2ggKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlAvUV9LZXkgbWlzbWF0Y2guIik7CisJCWJyZWFrOworCWNhc2UgMHgxMDogLyogc2FtcGxpbmcgY29tcGxldGUgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlNhbXBsaW5nIGNvbXBsZXRlLiIpOworCQlicmVhazsKKwljYXNlIDB4MTE6IC8qIHVuYWZmaWxpYXRlZCBhY2Nlc3MgZXJyb3IgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlVuYWZmaWxpYXRlZCBhY2Nlc3MgZXJyb3IuIik7CisJCWJyZWFrOworCWNhc2UgMHgxMjogLyogcGF0aCBtaWdyYXRpbmcgZXJyb3IgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlBhdGggbWlncmF0aW9uIGVycm9yLiIpOworCQlicmVhazsKKwljYXNlIDB4MTM6IC8qIGludGVyZmFjZSB0cmFjZSBzdG9wcGVkICovCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJJbnRlcmZhY2UgdHJhY2Ugc3RvcHBlZC4iKTsKKwkJYnJlYWs7CisJY2FzZSAweDE0OiAvKiBmaXJzdCBlcnJvciBjYXB0dXJlIGluZm8gYXZhaWxhYmxlICovCisJZGVmYXVsdDoKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlVua25vd24gaWRlbnRpZmllcjogJXggb24gJXMuIiwKKwkJCSBpZGVudGlmaWVyLCBzaGNhLT5pYl9kZXZpY2UubmFtZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcGFyc2VfZWMoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwgdTY0IGVxZSkKK3sKKwlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CisJdTggZWMgICA9IEVIQ0FfQk1BU0tfR0VUKE5FUUVfRVZFTlRfQ09ERSwgZXFlKTsKKwl1OCBwb3J0ID0gRUhDQV9CTUFTS19HRVQoTkVRRV9QT1JUX05VTUJFUiwgZXFlKTsKKworCXN3aXRjaCAoZWMpIHsKKwljYXNlIDB4MzA6IC8qIHBvcnQgYXZhaWxhYmlsaXR5IGNoYW5nZSAqLworCQlpZiAoRUhDQV9CTUFTS19HRVQoTkVRRV9QT1JUX0FWQUlMQUJJTElUWSwgZXFlKSkgeworCQkJZWhjYV9pbmZvKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkJICAicG9ydCAleCBpcyBhY3RpdmUuIiwgcG9ydCk7CisJCQlldmVudC5kZXZpY2UgPSAmc2hjYS0+aWJfZGV2aWNlOworCQkJZXZlbnQuZXZlbnQgPSBJQl9FVkVOVF9QT1JUX0FDVElWRTsKKwkJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0OworCQkJc2hjYS0+c3BvcnRbcG9ydCAtIDFdLnBvcnRfc3RhdGUgPSBJQl9QT1JUX0FDVElWRTsKKwkJCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJCX0gZWxzZSB7CisJCQllaGNhX2luZm8oJnNoY2EtPmliX2RldmljZSwKKwkJCQkgICJwb3J0ICV4IGlzIGluYWN0aXZlLiIsIHBvcnQpOworCQkJZXZlbnQuZGV2aWNlID0gJnNoY2EtPmliX2RldmljZTsKKwkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCQlldmVudC5lbGVtZW50LnBvcnRfbnVtID0gcG9ydDsKKwkJCXNoY2EtPnNwb3J0W3BvcnQgLSAxXS5wb3J0X3N0YXRlID0gSUJfUE9SVF9ET1dOOworCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKwkJfQorCQlicmVhazsKKwljYXNlIDB4MzE6CisJCS8qIHBvcnQgY29uZmlndXJhdGlvbiBjaGFuZ2UKKwkJICogZGlzcnVwdGl2ZSBjaGFuZ2UgaXMgY2F1c2VkIGJ5CisJCSAqIExJRCwgUEtFWSBvciBTTSBjaGFuZ2UKKwkJICovCisJCWVoY2Ffd2Fybigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICAiZGlzcnVwdGl2ZSBwb3J0ICV4IGNvbmZpZ3VyYXRpb24gY2hhbmdlIiwgcG9ydCk7CisKKwkJZWhjYV9pbmZvKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkgInBvcnQgJXggaXMgaW5hY3RpdmUuIiwgcG9ydCk7CisJCWV2ZW50LmRldmljZSA9ICZzaGNhLT5pYl9kZXZpY2U7CisJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0OworCQlzaGNhLT5zcG9ydFtwb3J0IC0gMV0ucG9ydF9zdGF0ZSA9IElCX1BPUlRfRE9XTjsKKwkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKKworCQllaGNhX2luZm8oJnNoY2EtPmliX2RldmljZSwKKwkJCSAicG9ydCAleCBpcyBhY3RpdmUuIiwgcG9ydCk7CisJCWV2ZW50LmRldmljZSA9ICZzaGNhLT5pYl9kZXZpY2U7CisJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9BQ1RJVkU7CisJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0OworCQlzaGNhLT5zcG9ydFtwb3J0IC0gMV0ucG9ydF9zdGF0ZSA9IElCX1BPUlRfQUNUSVZFOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCQlicmVhazsKKwljYXNlIDB4MzI6IC8qIGFkYXB0ZXIgbWFsZnVuY3Rpb24gKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkFkYXB0ZXIgbWFsZnVuY3Rpb24uIik7CisJCWJyZWFrOworCWNhc2UgMHgzMzogIC8qIHRyYWNlIHN0b3BwZWQgKi8KKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlRyYWNlZCBzdG9wcGVkLiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiVW5rbm93biBldmVudCBjb2RlOiAleCBvbiAlcy4iLAorCQkJIGVjLCBzaGNhLT5pYl9kZXZpY2UubmFtZSk7CisJCWJyZWFrOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlc2V0X2VxX3BlbmRpbmcoc3RydWN0IGVoY2FfY3EgKmNxKQoreworCXU2NCBDUXhfRVA7CisJc3RydWN0IGhfZ2FscGEgZ2FsID0gY3EtPmdhbHBhcy5rZXJuZWw7CisKKwloaXB6X2dhbHBhX3N0b3JlX2NxKGdhbCwgY3F4X2VwLCAweDApOworCUNReF9FUCA9IGhpcHpfZ2FscGFfbG9hZChnYWwsIENRVEVNTV9PRkZTRVQoY3F4X2VwKSk7CisKKwlyZXR1cm47Cit9CisKK2lycXJldHVybl90IGVoY2FfaW50ZXJydXB0X25lcShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSAoc3RydWN0IGVoY2Ffc2hjYSopZGV2X2lkOworCisJdGFza2xldF9oaV9zY2hlZHVsZSgmc2hjYS0+bmVxLmludGVycnVwdF90YXNrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwordm9pZCBlaGNhX3Rhc2tsZXRfbmVxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gKHN0cnVjdCBlaGNhX3NoY2EqKWRhdGE7CisJc3RydWN0IGVoY2FfZXFlICplcWU7CisJdTY0IHJldDsKKworCWVxZSA9IChzdHJ1Y3QgZWhjYV9lcWUgKillaGNhX3BvbGxfZXEoc2hjYSwgJnNoY2EtPm5lcSk7CisKKwl3aGlsZSAoZXFlKSB7CisJCWlmICghRUhDQV9CTUFTS19HRVQoTkVRRV9DT01QTEVUSU9OX0VWRU5ULCBlcWUtPmVudHJ5KSkKKwkJCXBhcnNlX2VjKHNoY2EsIGVxZS0+ZW50cnkpOworCisJCWVxZSA9IChzdHJ1Y3QgZWhjYV9lcWUgKillaGNhX3BvbGxfZXEoc2hjYSwgJnNoY2EtPm5lcSk7CisJfQorCisJcmV0ID0gaGlwel9oX3Jlc2V0X2V2ZW50KHNoY2EtPmlwel9oY2FfaGFuZGxlLAorCQkJCSBzaGNhLT5uZXEuaXB6X2VxX2hhbmRsZSwgMHhGRkZGRkZGRkZGRkZGRkZGTCk7CisKKwlpZiAocmV0ICE9IEhfU1VDQ0VTUykKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbid0IGNsZWFyIG5vdGlmaWNhdGlvbiBldmVudHMuIik7CisKKwlyZXR1cm47Cit9CisKK2lycXJldHVybl90IGVoY2FfaW50ZXJydXB0X2VxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IChzdHJ1Y3QgZWhjYV9zaGNhKilkZXZfaWQ7CisKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZzaGNhLT5lcS5pbnRlcnJ1cHRfdGFzayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3ZvaWQgZWhjYV90YXNrbGV0X2VxKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gKHN0cnVjdCBlaGNhX3NoY2EqKWRhdGE7CisJc3RydWN0IGVoY2FfZXFlICplcWU7CisJaW50IGludF9zdGF0ZTsKKwlpbnQgcXVlcnlfY250ID0gMDsKKworCWRvIHsKKwkJZXFlID0gKHN0cnVjdCBlaGNhX2VxZSAqKWVoY2FfcG9sbF9lcShzaGNhLCAmc2hjYS0+ZXEpOworCisJCWlmICgoc2hjYS0+aHdfbGV2ZWwgPj0gMikgJiYgZXFlKQorCQkJaW50X3N0YXRlID0gMTsKKwkJZWxzZQorCQkJaW50X3N0YXRlID0gMDsKKworCQl3aGlsZSAoKGludF9zdGF0ZSA9PSAxKSB8fCBlcWUpIHsKKwkJCXdoaWxlIChlcWUpIHsKKwkJCQl1NjQgZXFlX3ZhbHVlID0gZXFlLT5lbnRyeTsKKworCQkJCWVoY2FfZGJnKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkJCSAiZXFlX3ZhbHVlPSVseCIsIGVxZV92YWx1ZSk7CisKKwkJCQkvKiBUT0RPOiBiZXR0ZXIgc3RydWN0dXJlICovCisJCQkJaWYgKEVIQ0FfQk1BU0tfR0VUKEVRRV9DT01QTEVUSU9OX0VWRU5ULAorCQkJCQkJICAgZXFlX3ZhbHVlKSkgeworCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQkJCQl1MzIgdG9rZW47CisJCQkJCXN0cnVjdCBlaGNhX2NxICpjcTsKKworCQkJCQllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLAorCQkJCQkJICIuLi4gY29tcGxldGlvbiBldmVudCIpOworCQkJCQl0b2tlbiA9CisJCQkJCQlFSENBX0JNQVNLX0dFVChFUUVfQ1FfVE9LRU4sCisJCQkJCQkJICAgICAgIGVxZV92YWx1ZSk7CisJCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNhX2NxX2lkcl9sb2NrLAorCQkJCQkJCSAgZmxhZ3MpOworCQkJCQljcSA9IGlkcl9maW5kKCZlaGNhX2NxX2lkciwgdG9rZW4pOworCisJCQkJCWlmIChjcSA9PSBOVUxMKSB7CisJCQkJCQlzcGluX3VubG9jaygmZWhjYV9jcV9pZHJfbG9jayk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCisJCQkJCXJlc2V0X2VxX3BlbmRpbmcoY3EpOworI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORworCQkJCQlxdWV1ZV9jb21wX3Rhc2soY3EpOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNhX2NxX2lkcl9sb2NrLAorCQkJCQkJCSAgICAgICBmbGFncyk7CisjZWxzZQorCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNhX2NxX2lkcl9sb2NrLAorCQkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJCWNvbXBfZXZlbnRfY2FsbGJhY2soY3EpOworI2VuZGlmCisJCQkJfSBlbHNlIHsKKwkJCQkJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwKKwkJCQkJCSAiLi4uIG5vbiBjb21wbGV0aW9uIGV2ZW50Iik7CisJCQkJCXBhcnNlX2lkZW50aWZpZXIoc2hjYSwgZXFlX3ZhbHVlKTsKKwkJCQl9CisJCQkJZXFlID0KKwkJCQkJKHN0cnVjdCBlaGNhX2VxZSAqKWVoY2FfcG9sbF9lcShzaGNhLAorCQkJCQkJCQkgICAgJnNoY2EtPmVxKTsKKwkJCX0KKworCQkJaWYgKHNoY2EtPmh3X2xldmVsID49IDIpIHsKKwkJCQlpbnRfc3RhdGUgPQorCQkJCSAgICBoaXB6X2hfcXVlcnlfaW50X3N0YXRlKHNoY2EtPmlwel9oY2FfaGFuZGxlLAorCQkJCQkJCSAgIHNoY2EtPmVxLmlzdCk7CisJCQkJcXVlcnlfY250Kys7CisJCQkJaW9zeW5jKCk7CisJCQkJaWYgKHF1ZXJ5X2NudCA+PSAxMDApIHsKKwkJCQkJcXVlcnlfY250ID0gMDsKKwkJCQkJaW50X3N0YXRlID0gMDsKKwkJCQl9CisJCQl9CisJCQllcWUgPSAoc3RydWN0IGVoY2FfZXFlICopZWhjYV9wb2xsX2VxKHNoY2EsICZzaGNhLT5lcSk7CisKKwkJfQorCX0gd2hpbGUgKGludF9zdGF0ZSAhPSAwKTsKKworCXJldHVybjsKK30KKworI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORworCitzdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfb25saW5lX2NwdShzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wqIHBvb2wpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnc19sYXN0X2NwdTsKKworCWlmIChlaGNhX2RlYnVnX2xldmVsKQorCQllaGNhX2RtcCgmY3B1X29ubGluZV9tYXAsIHNpemVvZihjcHVtYXNrX3QpLCAiIik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9vbC0+bGFzdF9jcHVfbG9jaywgZmxhZ3NfbGFzdF9jcHUpOworCXBvb2wtPmxhc3RfY3B1ID0gbmV4dF9jcHUocG9vbC0+bGFzdF9jcHUsIGNwdV9vbmxpbmVfbWFwKTsKKwlpZiAocG9vbC0+bGFzdF9jcHUgPT0gTlJfQ1BVUykKKwkJcG9vbC0+bGFzdF9jcHUgPSBmaXJzdF9jcHUoY3B1X29ubGluZV9tYXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvb2wtPmxhc3RfY3B1X2xvY2ssIGZsYWdzX2xhc3RfY3B1KTsKKworCXJldHVybiBwb29sLT5sYXN0X2NwdTsKK30KKworc3RhdGljIHZvaWQgX19xdWV1ZV9jb21wX3Rhc2soc3RydWN0IGVoY2FfY3EgKl9fY3EsCisJCQkgICAgICBzdHJ1Y3QgZWhjYV9jcHVfY29tcF90YXNrICpjY3QpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnc19jY3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnc19jcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmX19jcS0+dGFza19sb2NrLCBmbGFnc19jcSk7CisKKwlpZiAoX19jcS0+bnJfY2FsbGJhY2tzID09IDApIHsKKwkJX19jcS0+bnJfY2FsbGJhY2tzKys7CisJCWxpc3RfYWRkX3RhaWwoJl9fY3EtPmVudHJ5LCAmY2N0LT5jcV9saXN0KTsKKwkJY2N0LT5jcV9qb2JzKys7CisJCXdha2VfdXAoJmNjdC0+d2FpdF9xdWV1ZSk7CisJfQorCWVsc2UKKwkJX19jcS0+bnJfY2FsbGJhY2tzKys7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZfX2NxLT50YXNrX2xvY2ssIGZsYWdzX2NxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfY29tcF90YXNrKHN0cnVjdCBlaGNhX2NxICpfX2NxKQoreworCWludCBjcHU7CisJaW50IGNwdV9pZDsKKwlzdHJ1Y3QgZWhjYV9jcHVfY29tcF90YXNrICpjY3Q7CisKKwljcHUgPSBnZXRfY3B1KCk7CisJY3B1X2lkID0gZmluZF9uZXh0X29ubGluZV9jcHUocG9vbCk7CisKKwlCVUdfT04oIWNwdV9vbmxpbmUoY3B1X2lkKSk7CisKKwljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1X2lkKTsKKworCWlmIChjY3QtPmNxX2pvYnMgPiAwKSB7CisJCWNwdV9pZCA9IGZpbmRfbmV4dF9vbmxpbmVfY3B1KHBvb2wpOworCQljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1X2lkKTsKKwl9CisKKwlfX3F1ZXVlX2NvbXBfdGFzayhfX2NxLCBjY3QpOworCisJcHV0X2NwdSgpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBydW5fY29tcF90YXNrKHN0cnVjdCBlaGNhX2NwdV9jb21wX3Rhc2sqIGNjdCkKK3sKKwlzdHJ1Y3QgZWhjYV9jcSAqY3E7CisJdW5zaWduZWQgbG9uZyBmbGFnc19jY3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnc19jcTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmY2N0LT5jcV9saXN0KSkgeworCQljcSA9IGxpc3RfZW50cnkoY2N0LT5jcV9saXN0Lm5leHQsIHN0cnVjdCBlaGNhX2NxLCBlbnRyeSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNjdC0+dGFza19sb2NrLCBmbGFnc19jY3QpOworCQljb21wX2V2ZW50X2NhbGxiYWNrKGNxKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNjdC0+dGFza19sb2NrLCBmbGFnc19jY3QpOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZjcS0+dGFza19sb2NrLCBmbGFnc19jcSk7CisJCWNxLT5ucl9jYWxsYmFja3MtLTsKKwkJaWYgKGNxLT5ucl9jYWxsYmFja3MgPT0gMCkgeworCQkJbGlzdF9kZWxfaW5pdChjY3QtPmNxX2xpc3QubmV4dCk7CisJCQljY3QtPmNxX2pvYnMtLTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcS0+dGFza19sb2NrLCBmbGFnc19jcSk7CisKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKworCXJldHVybjsKK30KKworc3RhdGljIGludCBjb21wX3Rhc2sodm9pZCAqX19jY3QpCit7CisJc3RydWN0IGVoY2FfY3B1X2NvbXBfdGFzayogY2N0ID0gX19jY3Q7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCXdoaWxlKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKKwkJYWRkX3dhaXRfcXVldWUoJmNjdC0+d2FpdF9xdWV1ZSwgJndhaXQpOworCisJCWlmIChsaXN0X2VtcHR5KCZjY3QtPmNxX2xpc3QpKQorCQkJc2NoZWR1bGUoKTsKKwkJZWxzZQorCQkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJCXJlbW92ZV93YWl0X3F1ZXVlKCZjY3QtPndhaXRfcXVldWUsICZ3YWl0KTsKKworCQlpZiAoIWxpc3RfZW1wdHkoJmNjdC0+Y3FfbGlzdCkpCisJCQlydW5fY29tcF90YXNrKF9fY2N0KTsKKworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCX0KKwlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3JlYXRlX2NvbXBfdGFzayhzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wgKnBvb2wsCisJCQkJCSAgICBpbnQgY3B1KQoreworCXN0cnVjdCBlaGNhX2NwdV9jb21wX3Rhc2sgKmNjdDsKKworCWNjdCA9IHBlcl9jcHVfcHRyKHBvb2wtPmNwdV9jb21wX3Rhc2tzLCBjcHUpOworCXNwaW5fbG9ja19pbml0KCZjY3QtPnRhc2tfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmNjdC0+Y3FfbGlzdCk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY2N0LT53YWl0X3F1ZXVlKTsKKwljY3QtPnRhc2sgPSBrdGhyZWFkX2NyZWF0ZShjb21wX3Rhc2ssIGNjdCwgImVoY2FfY29tcC8lZCIsIGNwdSk7CisKKwlyZXR1cm4gY2N0LT50YXNrOworfQorCitzdGF0aWMgdm9pZCBkZXN0cm95X2NvbXBfdGFzayhzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wgKnBvb2wsCisJCQkgICAgICBpbnQgY3B1KQoreworCXN0cnVjdCBlaGNhX2NwdV9jb21wX3Rhc2sgKmNjdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJdW5zaWduZWQgbG9uZyBmbGFnc19jY3Q7CisKKwljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKworCXRhc2sgPSBjY3QtPnRhc2s7CisJY2N0LT50YXNrID0gTlVMTDsKKwljY3QtPmNxX2pvYnMgPSAwOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzX2NjdCk7CisKKwlpZiAodGFzaykKKwkJa3RocmVhZF9zdG9wKHRhc2spOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB0YWtlX292ZXJfd29yayhzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wgKnBvb2wsCisJCQkgICBpbnQgY3B1KQoreworCXN0cnVjdCBlaGNhX2NwdV9jb21wX3Rhc2sgKmNjdCA9IHBlcl9jcHVfcHRyKHBvb2wtPmNwdV9jb21wX3Rhc2tzLCBjcHUpOworCUxJU1RfSEVBRChsaXN0KTsKKwlzdHJ1Y3QgZWhjYV9jcSAqY3E7CisJdW5zaWduZWQgbG9uZyBmbGFnc19jY3Q7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2N0LT50YXNrX2xvY2ssIGZsYWdzX2NjdCk7CisKKwlsaXN0X3NwbGljZV9pbml0KCZjY3QtPmNxX2xpc3QsICZsaXN0KTsKKworCXdoaWxlKCFsaXN0X2VtcHR5KCZsaXN0KSkgeworCSAgICAgICBjcSA9IGxpc3RfZW50cnkoY2N0LT5jcV9saXN0Lm5leHQsIHN0cnVjdCBlaGNhX2NxLCBlbnRyeSk7CisKKwkgICAgICAgbGlzdF9kZWwoJmNxLT5lbnRyeSk7CisJICAgICAgIF9fcXVldWVfY29tcF90YXNrKGNxLCBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywKKwkJCQkJCSBzbXBfcHJvY2Vzc29yX2lkKCkpKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjY3QtPnRhc2tfbG9jaywgZmxhZ3NfY2N0KTsKKworfQorCitzdGF0aWMgaW50IGNvbXBfcG9vbF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQkJICAgICAgdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3QgZWhjYV9jcHVfY29tcF90YXNrICpjY3Q7CisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJCWVoY2FfZ2VuX2RiZygiQ1BVOiAleCAoQ1BVX1BSRVBBUkUpIiwgY3B1KTsKKwkJaWYoIWNyZWF0ZV9jb21wX3Rhc2socG9vbCwgY3B1KSkgeworCQkJZWhjYV9nZW5fZXJyKCJDYW4ndCBjcmVhdGUgY29tcF90YXNrIGZvciBjcHU6ICV4IiwgY3B1KTsKKwkJCXJldHVybiBOT1RJRllfQkFEOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCQllaGNhX2dlbl9kYmcoIkNQVTogJXggKENQVV9DQU5DRUxFRCkiLCBjcHUpOworCQljY3QgPSBwZXJfY3B1X3B0cihwb29sLT5jcHVfY29tcF90YXNrcywgY3B1KTsKKwkJa3RocmVhZF9iaW5kKGNjdC0+dGFzaywgYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApKTsKKwkJZGVzdHJveV9jb21wX3Rhc2socG9vbCwgY3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfT05MSU5FOgorCQllaGNhX2dlbl9kYmcoIkNQVTogJXggKENQVV9PTkxJTkUpIiwgY3B1KTsKKwkJY2N0ID0gcGVyX2NwdV9wdHIocG9vbC0+Y3B1X2NvbXBfdGFza3MsIGNwdSk7CisJCWt0aHJlYWRfYmluZChjY3QtPnRhc2ssIGNwdSk7CisJCXdha2VfdXBfcHJvY2VzcyhjY3QtPnRhc2spOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJCWVoY2FfZ2VuX2RiZygiQ1BVOiAleCAoQ1BVX0RPV05fUFJFUEFSRSkiLCBjcHUpOworCQlicmVhazsKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwkJZWhjYV9nZW5fZGJnKCJDUFU6ICV4IChDUFVfRE9XTl9GQUlMRUQpIiwgY3B1KTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVBRDoKKwkJZWhjYV9nZW5fZGJnKCJDUFU6ICV4IChDUFVfREVBRCkiLCBjcHUpOworCQlkZXN0cm95X2NvbXBfdGFzayhwb29sLCBjcHUpOworCQl0YWtlX292ZXJfd29yayhwb29sLCBjcHUpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTk9USUZZX09LOworfQorCisjZW5kaWYKKworaW50IGVoY2FfY3JlYXRlX2NvbXBfcG9vbCh2b2lkKQoreworI2lmZGVmIENPTkZJR19JTkZJTklCQU5EX0VIQ0FfU0NBTElORworCWludCBjcHU7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOworCisJcG9vbCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlaGNhX2NvbXBfcG9vbCksIEdGUF9LRVJORUwpOworCWlmIChwb29sID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJnBvb2wtPmxhc3RfY3B1X2xvY2spOworCXBvb2wtPmxhc3RfY3B1ID0gYW55X29ubGluZV9jcHUoY3B1X29ubGluZV9tYXApOworCisJcG9vbC0+Y3B1X2NvbXBfdGFza3MgPSBhbGxvY19wZXJjcHUoc3RydWN0IGVoY2FfY3B1X2NvbXBfdGFzayk7CisJaWYgKHBvb2wtPmNwdV9jb21wX3Rhc2tzID09IE5VTEwpIHsKKwkJa2ZyZWUocG9vbCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CisJCXRhc2sgPSBjcmVhdGVfY29tcF90YXNrKHBvb2wsIGNwdSk7CisJCWlmICh0YXNrKSB7CisJCQlrdGhyZWFkX2JpbmQodGFzaywgY3B1KTsKKwkJCXdha2VfdXBfcHJvY2Vzcyh0YXNrKTsKKwkJfQorCX0KKworCWNvbXBfcG9vbF9jYWxsYmFja19uYi5ub3RpZmllcl9jYWxsID0gY29tcF9wb29sX2NhbGxiYWNrOworCWNvbXBfcG9vbF9jYWxsYmFja19uYi5wcmlvcml0eSA9MDsKKwlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJmNvbXBfcG9vbF9jYWxsYmFja19uYik7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCit2b2lkIGVoY2FfZGVzdHJveV9jb21wX3Bvb2wodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9FSENBX1NDQUxJTkcKKwlpbnQgaTsKKworCXVucmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjb21wX3Bvb2xfY2FsbGJhY2tfbmIpOworCisJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykgeworCQlpZiAoY3B1X29ubGluZShpKSkKKwkJCWRlc3Ryb3lfY29tcF90YXNrKHBvb2wsIGkpOworCX0KKyNlbmRpZgorCisJcmV0dXJuOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODViZjFmZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgYW5kIHN0cnVjdHMgZm9yIEVRcywgTkVRcyBhbmQgaW50ZXJydXB0cworICoKKyAqICBBdXRob3JzOiBIZWlrbyBKIFNjaGljayA8c2NoaWNraGpAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBLaGFkaWphIFNvdWlzc2kgPHNvdWlzc2lAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19FSENBX0lSUV9ICisjZGVmaW5lIF9fRUhDQV9JUlFfSAorCisKK3N0cnVjdCBlaGNhX3NoY2E7CisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworaW50IGVoY2FfZXJyb3JfZGF0YShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCB2b2lkICpkYXRhLCB1NjQgcmVzb3VyY2UpOworCitpcnFyZXR1cm5fdCBlaGNhX2ludGVycnVwdF9uZXEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIGVoY2FfdGFza2xldF9uZXEodW5zaWduZWQgbG9uZyBkYXRhKTsKKworaXJxcmV0dXJuX3QgZWhjYV9pbnRlcnJ1cHRfZXEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cit2b2lkIGVoY2FfdGFza2xldF9lcSh1bnNpZ25lZCBsb25nIGRhdGEpOworCitzdHJ1Y3QgZWhjYV9jcHVfY29tcF90YXNrIHsKKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3F1ZXVlOworCXN0cnVjdCBsaXN0X2hlYWQgY3FfbGlzdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3BpbmxvY2tfdCB0YXNrX2xvY2s7CisJaW50IGNxX2pvYnM7Cit9OworCitzdHJ1Y3QgZWhjYV9jb21wX3Bvb2wgeworCXN0cnVjdCBlaGNhX2NwdV9jb21wX3Rhc2sgKmNwdV9jb21wX3Rhc2tzOworCWludCBsYXN0X2NwdTsKKwlzcGlubG9ja190IGxhc3RfY3B1X2xvY2s7Cit9OworCitpbnQgZWhjYV9jcmVhdGVfY29tcF9wb29sKHZvaWQpOwordm9pZCBlaGNhX2Rlc3Ryb3lfY29tcF9wb29sKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2l2ZXJicy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxOWMzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2l2ZXJicy5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICBGdW5jdGlvbiBkZWZpbml0aW9ucyBmb3IgaW50ZXJuYWwgZnVuY3Rpb25zCisgKgorICogIEF1dGhvcnM6IEhlaWtvIEogU2NoaWNrIDxzY2hpY2toakBkZS5pYm0uY29tPgorICogICAgICAgICAgIERpZXRtYXIgRGVja2VyIDxkZGVja2VyQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fRUhDQV9JVkVSQlNfSF9fCisjZGVmaW5lIF9fRUhDQV9JVkVSQlNfSF9fCisKKyNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKKworaW50IGVoY2FfcXVlcnlfZGV2aWNlKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCBzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKnByb3BzKTsKKworaW50IGVoY2FfcXVlcnlfcG9ydChzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCwKKwkJICAgIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKTsKKworaW50IGVoY2FfcXVlcnlfcGtleShzdHJ1Y3QgaWJfZGV2aWNlICppYmRldiwgdTggcG9ydCwgdTE2IGluZGV4LCB1MTYgKiBwa2V5KTsKKworaW50IGVoY2FfcXVlcnlfZ2lkKHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LCBpbnQgaW5kZXgsCisJCSAgIHVuaW9uIGliX2dpZCAqZ2lkKTsKKworaW50IGVoY2FfbW9kaWZ5X3BvcnQoc3RydWN0IGliX2RldmljZSAqaWJkZXYsIHU4IHBvcnQsIGludCBwb3J0X21vZGlmeV9tYXNrLAorCQkgICAgIHN0cnVjdCBpYl9wb3J0X21vZGlmeSAqcHJvcHMpOworCitzdHJ1Y3QgaWJfcGQgKmVoY2FfYWxsb2NfcGQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJICAgIHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwKKwkJCSAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKworaW50IGVoY2FfZGVhbGxvY19wZChzdHJ1Y3QgaWJfcGQgKnBkKTsKKworc3RydWN0IGliX2FoICplaGNhX2NyZWF0ZV9haChzdHJ1Y3QgaWJfcGQgKnBkLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cik7CisKK2ludCBlaGNhX21vZGlmeV9haChzdHJ1Y3QgaWJfYWggKmFoLCBzdHJ1Y3QgaWJfYWhfYXR0ciAqYWhfYXR0cik7CisKK2ludCBlaGNhX3F1ZXJ5X2FoKHN0cnVjdCBpYl9haCAqYWgsIHN0cnVjdCBpYl9haF9hdHRyICphaF9hdHRyKTsKKworaW50IGVoY2FfZGVzdHJveV9haChzdHJ1Y3QgaWJfYWggKmFoKTsKKworc3RydWN0IGliX21yICplaGNhX2dldF9kbWFfbXIoc3RydWN0IGliX3BkICpwZCwgaW50IG1yX2FjY2Vzc19mbGFncyk7CisKK3N0cnVjdCBpYl9tciAqZWhjYV9yZWdfcGh5c19tcihzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJICAgICAgIHN0cnVjdCBpYl9waHlzX2J1ZiAqcGh5c19idWZfYXJyYXksCisJCQkgICAgICAgaW50IG51bV9waHlzX2J1ZiwKKwkJCSAgICAgICBpbnQgbXJfYWNjZXNzX2ZsYWdzLCB1NjQgKmlvdmFfc3RhcnQpOworCitzdHJ1Y3QgaWJfbXIgKmVoY2FfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwKKwkJCSAgICAgICBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJICAgICAgIGludCBtcl9hY2Nlc3NfZmxhZ3MsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCitpbnQgZWhjYV9yZXJlZ19waHlzX21yKHN0cnVjdCBpYl9tciAqbXIsCisJCSAgICAgICBpbnQgbXJfcmVyZWdfbWFzaywKKwkJICAgICAgIHN0cnVjdCBpYl9wZCAqcGQsCisJCSAgICAgICBzdHJ1Y3QgaWJfcGh5c19idWYgKnBoeXNfYnVmX2FycmF5LAorCQkgICAgICAgaW50IG51bV9waHlzX2J1ZiwgaW50IG1yX2FjY2Vzc19mbGFncywgdTY0ICppb3ZhX3N0YXJ0KTsKKworaW50IGVoY2FfcXVlcnlfbXIoc3RydWN0IGliX21yICptciwgc3RydWN0IGliX21yX2F0dHIgKm1yX2F0dHIpOworCitpbnQgZWhjYV9kZXJlZ19tcihzdHJ1Y3QgaWJfbXIgKm1yKTsKKworc3RydWN0IGliX213ICplaGNhX2FsbG9jX213KHN0cnVjdCBpYl9wZCAqcGQpOworCitpbnQgZWhjYV9iaW5kX213KHN0cnVjdCBpYl9xcCAqcXAsIHN0cnVjdCBpYl9tdyAqbXcsCisJCSBzdHJ1Y3QgaWJfbXdfYmluZCAqbXdfYmluZCk7CisKK2ludCBlaGNhX2RlYWxsb2NfbXcoc3RydWN0IGliX213ICptdyk7CisKK3N0cnVjdCBpYl9mbXIgKmVoY2FfYWxsb2NfZm1yKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkgICAgICBpbnQgbXJfYWNjZXNzX2ZsYWdzLAorCQkJICAgICAgc3RydWN0IGliX2Ztcl9hdHRyICpmbXJfYXR0cik7CisKK2ludCBlaGNhX21hcF9waHlzX2ZtcihzdHJ1Y3QgaWJfZm1yICpmbXIsCisJCSAgICAgIHU2NCAqcGFnZV9saXN0LCBpbnQgbGlzdF9sZW4sIHU2NCBpb3ZhKTsKKworaW50IGVoY2FfdW5tYXBfZm1yKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KTsKKworaW50IGVoY2FfZGVhbGxvY19mbXIoc3RydWN0IGliX2ZtciAqZm1yKTsKKworZW51bSBlaGNhX2VxX3R5cGUgeworCUVIQ0FfRVEgPSAwLCAvKiBFdmVudCBRdWV1ZSAgICAgICAgICAgICAgKi8KKwlFSENBX05FUSAgICAgLyogTm90aWZpY2F0aW9uIEV2ZW50IFF1ZXVlICovCit9OworCitpbnQgZWhjYV9jcmVhdGVfZXEoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwgc3RydWN0IGVoY2FfZXEgKmVxLAorCQkgICBlbnVtIGVoY2FfZXFfdHlwZSB0eXBlLCBjb25zdCB1MzIgbGVuZ3RoKTsKKworaW50IGVoY2FfZGVzdHJveV9lcShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCBzdHJ1Y3QgZWhjYV9lcSAqZXEpOworCit2b2lkICplaGNhX3BvbGxfZXEoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwgc3RydWN0IGVoY2FfZXEgKmVxKTsKKworCitzdHJ1Y3QgaWJfY3EgKmVoY2FfY3JlYXRlX2NxKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgaW50IGNxZSwKKwkJCSAgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LAorCQkJICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKworaW50IGVoY2FfZGVzdHJveV9jcShzdHJ1Y3QgaWJfY3EgKmNxKTsKKworaW50IGVoY2FfcmVzaXplX2NxKHN0cnVjdCBpYl9jcSAqY3EsIGludCBjcWUsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCitpbnQgZWhjYV9wb2xsX2NxKHN0cnVjdCBpYl9jcSAqY3EsIGludCBudW1fZW50cmllcywgc3RydWN0IGliX3djICp3Yyk7CisKK2ludCBlaGNhX3BlZWtfY3Eoc3RydWN0IGliX2NxICpjcSwgaW50IHdjX2NudCk7CisKK2ludCBlaGNhX3JlcV9ub3RpZnlfY3Eoc3RydWN0IGliX2NxICpjcSwgZW51bSBpYl9jcV9ub3RpZnkgY3Ffbm90aWZ5KTsKKworc3RydWN0IGliX3FwICplaGNhX2NyZWF0ZV9xcChzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJICAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkgICAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOworCitpbnQgZWhjYV9kZXN0cm95X3FwKHN0cnVjdCBpYl9xcCAqcXApOworCitpbnQgZWhjYV9tb2RpZnlfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwgaW50IGF0dHJfbWFzaywKKwkJICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CisKK2ludCBlaGNhX3F1ZXJ5X3FwKHN0cnVjdCBpYl9xcCAqcXAsIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAorCQkgIGludCBxcF9hdHRyX21hc2ssIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cik7CisKK2ludCBlaGNhX3Bvc3Rfc2VuZChzdHJ1Y3QgaWJfcXAgKnFwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqc2VuZF93ciwKKwkJICAgc3RydWN0IGliX3NlbmRfd3IgKipiYWRfc2VuZF93cik7CisKK2ludCBlaGNhX3Bvc3RfcmVjdihzdHJ1Y3QgaWJfcXAgKnFwLCBzdHJ1Y3QgaWJfcmVjdl93ciAqcmVjdl93ciwKKwkJICAgc3RydWN0IGliX3JlY3Zfd3IgKipiYWRfcmVjdl93cik7CisKK3U2NCBlaGNhX2RlZmluZV9zcXAoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwgc3RydWN0IGVoY2FfcXAgKmlicXAsCisJCSAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICpxcF9pbml0X2F0dHIpOworCitpbnQgZWhjYV9hdHRhY2hfbWNhc3Qoc3RydWN0IGliX3FwICpxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOworCitpbnQgZWhjYV9kZXRhY2hfbWNhc3Qoc3RydWN0IGliX3FwICpxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOworCitzdHJ1Y3QgaWJfdWNvbnRleHQgKmVoY2FfYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKKworaW50IGVoY2FfZGVhbGxvY191Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQpOworCitpbnQgZWhjYV9tbWFwKHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCit2b2lkIGVoY2FfcG9sbF9lcXModW5zaWduZWQgbG9uZyBkYXRhKTsKKworaW50IGVoY2FfbW1hcF9ub3BhZ2UodTY0IGZvZmZzZXQsdTY0IGxlbmd0aCx2b2lkICoqbWFwcGVkLAorCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYSk7CisKK2ludCBlaGNhX21tYXBfcmVnaXN0ZXIodTY0IHBoeXNpY2FsLHZvaWQgKiptYXBwZWQsCisJCSAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWEpOworCitpbnQgZWhjYV9tdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzODA5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21haW4uYwpAQCAtMCwwICsxLDgxOCBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgbW9kdWxlIHN0YXJ0IHN0b3AsIGhjYSBkZXRlY3Rpb24KKyAqCisgKiAgQXV0aG9yczogSGVpa28gSiBTY2hpY2sgPHNjaGlja2hqQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgSG9hbmctTmFtIE5ndXllbiA8aG5ndXllbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIEpvYWNoaW0gRmVua2VzIDxmZW5rZXNAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKKyNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgorI2luY2x1ZGUgImVoY2FfbXJtdy5oIgorI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJoY3BfaWYuaCIKKworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklCTSBlU2VydmVyIEhDQSBJbmZpbmlCYW5kIERldmljZSBEcml2ZXIiKTsKK01PRFVMRV9WRVJTSU9OKCJTVk5FSENBXzAwMTYiKTsKKworaW50IGVoY2Ffb3Blbl9hcXAxICAgICA9IDA7CitpbnQgZWhjYV9kZWJ1Z19sZXZlbCAgID0gMDsKK2ludCBlaGNhX2h3X2xldmVsICAgICAgPSAwOworaW50IGVoY2FfbnJfcG9ydHMgICAgICA9IDI7CitpbnQgZWhjYV91c2VfaHBfbXIgICAgID0gMDsKK2ludCBlaGNhX3BvcnRfYWN0X3RpbWUgPSAzMDsKK2ludCBlaGNhX3BvbGxfYWxsX2VxcyAgPSAxOworaW50IGVoY2Ffc3RhdGljX3JhdGUgICA9IC0xOworCittb2R1bGVfcGFyYW1fbmFtZWQob3Blbl9hcXAxLCAgICAgZWhjYV9vcGVuX2FxcDEsICAgICBpbnQsIDApOworbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnX2xldmVsLCAgIGVoY2FfZGVidWdfbGV2ZWwsICAgaW50LCAwKTsKK21vZHVsZV9wYXJhbV9uYW1lZChod19sZXZlbCwgICAgICBlaGNhX2h3X2xldmVsLCAgICAgIGludCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQobnJfcG9ydHMsICAgICAgZWhjYV9ucl9wb3J0cywgICAgICBpbnQsIDApOworbW9kdWxlX3BhcmFtX25hbWVkKHVzZV9ocF9tciwgICAgIGVoY2FfdXNlX2hwX21yLCAgICAgaW50LCAwKTsKK21vZHVsZV9wYXJhbV9uYW1lZChwb3J0X2FjdF90aW1lLCBlaGNhX3BvcnRfYWN0X3RpbWUsIGludCwgMCk7Cittb2R1bGVfcGFyYW1fbmFtZWQocG9sbF9hbGxfZXFzLCAgZWhjYV9wb2xsX2FsbF9lcXMsICBpbnQsIDApOworbW9kdWxlX3BhcmFtX25hbWVkKHN0YXRpY19yYXRlLCAgIGVoY2Ffc3RhdGljX3JhdGUsICAgaW50LCAwKTsKKworTU9EVUxFX1BBUk1fREVTQyhvcGVuX2FxcDEsCisJCSAiQVFQMSBvbiBzdGFydHVwICgwOiBubyAoZGVmYXVsdCksIDE6IHllcykiKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWdfbGV2ZWwsCisJCSAiZGVidWcgbGV2ZWwiCisJCSAiICgwOiBubyBkZWJ1ZyB0cmFjZXMgKGRlZmF1bHQpLCAxOiB3aXRoIGRlYnVnIHRyYWNlcykiKTsKK01PRFVMRV9QQVJNX0RFU0MoaHdfbGV2ZWwsCisJCSAiaGFyZHdhcmUgbGV2ZWwiCisJCSAiICgwOiBhdXRvc2Vuc2luZyAoZGVmYXVsdCksIDE6IHYuIDAuMjAsIDI6IHYuIDAuMjEpIik7CitNT0RVTEVfUEFSTV9ERVNDKG5yX3BvcnRzLAorCQkgIm51bWJlciBvZiBjb25uZWN0ZWQgcG9ydHMgKGRlZmF1bHQ6IDIpIik7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9ocF9tciwKKwkJICJoaWdoIHBlcmZvcm1hbmNlIE1ScyAoMDogbm8gKGRlZmF1bHQpLCAxOiB5ZXMpIik7CitNT0RVTEVfUEFSTV9ERVNDKHBvcnRfYWN0X3RpbWUsCisJCSAidGltZSB0byB3YWl0IGZvciBwb3J0IGFjdGl2YXRpb24gKGRlZmF1bHQ6IDMwIHNlYykiKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbF9hbGxfZXFzLAorCQkgInBvbGxzIGFsbCBldmVudCBxdWV1ZXMgcGVyaW9kaWNhbGx5IgorCQkgIiAoMDogbm8sIDE6IHllcyAoZGVmYXVsdCkpIik7CitNT0RVTEVfUEFSTV9ERVNDKHN0YXRpY19yYXRlLAorCQkgInNldCBwZXJtYW5lbnQgc3RhdGljIHJhdGUgKGRlZmF1bHQ6IGRpc2FibGVkKSIpOworCitzcGlubG9ja190IGVoY2FfcXBfaWRyX2xvY2s7CitzcGlubG9ja190IGVoY2FfY3FfaWRyX2xvY2s7CitERUZJTkVfSURSKGVoY2FfcXBfaWRyKTsKK0RFRklORV9JRFIoZWhjYV9jcV9pZHIpOworCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzaGNhX2xpc3Q7IC8qIGxpc3Qgb2YgYWxsIHJlZ2lzdGVyZWQgZWhjYXMgKi8KK3N0YXRpYyBzcGlubG9ja190IHNoY2FfbGlzdF9sb2NrOworCitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgcG9sbF9lcXNfdGltZXI7CisKK3N0YXRpYyBpbnQgZWhjYV9jcmVhdGVfc2xhYl9jYWNoZXModm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZWhjYV9pbml0X3BkX2NhY2hlKCk7CisJaWYgKHJldCkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBjcmVhdGUgUEQgU0xBQiBjYWNoZS4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBlaGNhX2luaXRfY3FfY2FjaGUoKTsKKwlpZiAocmV0KSB7CisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGNyZWF0ZSBDUSBTTEFCIGNhY2hlLiIpOworCQlnb3RvIGNyZWF0ZV9zbGFiX2NhY2hlczI7CisJfQorCisJcmV0ID0gZWhjYV9pbml0X3FwX2NhY2hlKCk7CisJaWYgKHJldCkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBjcmVhdGUgUVAgU0xBQiBjYWNoZS4iKTsKKwkJZ290byBjcmVhdGVfc2xhYl9jYWNoZXMzOworCX0KKworCXJldCA9IGVoY2FfaW5pdF9hdl9jYWNoZSgpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJDYW5ub3QgY3JlYXRlIEFWIFNMQUIgY2FjaGUuIik7CisJCWdvdG8gY3JlYXRlX3NsYWJfY2FjaGVzNDsKKwl9CisKKwlyZXQgPSBlaGNhX2luaXRfbXJtd19jYWNoZSgpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJDYW5ub3QgY3JlYXRlIE1SJk1XIFNMQUIgY2FjaGUuIik7CisJCWdvdG8gY3JlYXRlX3NsYWJfY2FjaGVzNTsKKwl9CisKKwlyZXR1cm4gMDsKKworY3JlYXRlX3NsYWJfY2FjaGVzNToKKwllaGNhX2NsZWFudXBfYXZfY2FjaGUoKTsKKworY3JlYXRlX3NsYWJfY2FjaGVzNDoKKwllaGNhX2NsZWFudXBfcXBfY2FjaGUoKTsKKworY3JlYXRlX3NsYWJfY2FjaGVzMzoKKwllaGNhX2NsZWFudXBfY3FfY2FjaGUoKTsKKworY3JlYXRlX3NsYWJfY2FjaGVzMjoKKwllaGNhX2NsZWFudXBfcGRfY2FjaGUoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGVoY2FfZGVzdHJveV9zbGFiX2NhY2hlcyh2b2lkKQoreworCWVoY2FfY2xlYW51cF9tcm13X2NhY2hlKCk7CisJZWhjYV9jbGVhbnVwX2F2X2NhY2hlKCk7CisJZWhjYV9jbGVhbnVwX3FwX2NhY2hlKCk7CisJZWhjYV9jbGVhbnVwX2NxX2NhY2hlKCk7CisJZWhjYV9jbGVhbnVwX3BkX2NhY2hlKCk7Cit9CisKKyNkZWZpbmUgRUhDQV9IQ0FBVkVSICBFSENBX0JNQVNLX0lCTSgzMiwzOSkKKyNkZWZpbmUgRUhDQV9SRVZJRCAgICBFSENBX0JNQVNLX0lCTSg0MCw2MykKKworaW50IGVoY2Ffc2Vuc2VfYXR0cmlidXRlcyhzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhKQoreworCWludCByZXQgPSAwOworCXU2NCBoX3JldDsKKwlzdHJ1Y3QgaGlwel9xdWVyeV9oY2EgKnJibG9jazsKKworCXJibG9jayA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWlmICghcmJsb2NrKSB7CisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGFsbG9jYXRlIHJibG9jayBtZW1vcnkuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWhfcmV0ID0gaGlwel9oX3F1ZXJ5X2hjYShzaGNhLT5pcHpfaGNhX2hhbmRsZSwgcmJsb2NrKTsKKwlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IHF1ZXJ5IGRldmljZSBwcm9wZXJ0aWVzLiBoX3JldD0lbHgiLAorCQkJICAgICBoX3JldCk7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBudW1fcG9ydHMxOworCX0KKworCWlmIChlaGNhX25yX3BvcnRzID09IDEpCisJCXNoY2EtPm51bV9wb3J0cyA9IDE7CisJZWxzZQorCQlzaGNhLT5udW1fcG9ydHMgPSAodTgpcmJsb2NrLT5udW1fcG9ydHM7CisKKwllaGNhX2dlbl9kYmcoIiAuLi4gZm91bmQgJXggcG9ydHMiLCByYmxvY2stPm51bV9wb3J0cyk7CisKKwlpZiAoZWhjYV9od19sZXZlbCA9PSAwKSB7CisJCXUzMiBoY2FhdmVyOworCQl1MzIgcmV2aWQ7CisKKwkJaGNhYXZlciA9IEVIQ0FfQk1BU0tfR0VUKEVIQ0FfSENBQVZFUiwgcmJsb2NrLT5od192ZXIpOworCQlyZXZpZCAgID0gRUhDQV9CTUFTS19HRVQoRUhDQV9SRVZJRCwgcmJsb2NrLT5od192ZXIpOworCisJCWVoY2FfZ2VuX2RiZygiIC4uLiBoYXJkd2FyZSB2ZXJzaW9uPSV4OiV4IiwgaGNhYXZlciwgcmV2aWQpOworCisJCWlmICgoaGNhYXZlciA9PSAxKSAmJiAocmV2aWQgPT0gMCkpCisJCQlzaGNhLT5od19sZXZlbCA9IDA7CisJCWVsc2UgaWYgKChoY2FhdmVyID09IDEpICYmIChyZXZpZCA9PSAxKSkKKwkJCXNoY2EtPmh3X2xldmVsID0gMTsKKwkJZWxzZSBpZiAoKGhjYWF2ZXIgPT0gMSkgJiYgKHJldmlkID09IDIpKQorCQkJc2hjYS0+aHdfbGV2ZWwgPSAyOworCX0KKwllaGNhX2dlbl9kYmcoIiAuLi4gaGFyZHdhcmUgbGV2ZWw9JXgiLCBzaGNhLT5od19sZXZlbCk7CisKKwlzaGNhLT5zcG9ydFswXS5yYXRlID0gSUJfUkFURV8zMF9HQlBTOworCXNoY2EtPnNwb3J0WzFdLnJhdGUgPSBJQl9SQVRFXzMwX0dCUFM7CisKK251bV9wb3J0czE6CisJa2ZyZWUocmJsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGluaXRfbm9kZV9ndWlkKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGhpcHpfcXVlcnlfaGNhICpyYmxvY2s7CisKKwlyYmxvY2sgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJibG9jaykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2FuJ3QgYWxsb2NhdGUgcmJsb2NrIG1lbW9yeS4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaWYgKGhpcHpfaF9xdWVyeV9oY2Eoc2hjYS0+aXB6X2hjYV9oYW5kbGUsIHJibG9jaykgIT0gSF9TVUNDRVNTKSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJDYW4ndCBxdWVyeSBkZXZpY2UgcHJvcGVydGllcyIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGluaXRfbm9kZV9ndWlkMTsKKwl9CisKKwltZW1jcHkoJnNoY2EtPmliX2RldmljZS5ub2RlX2d1aWQsICZyYmxvY2stPm5vZGVfZ3VpZCwgc2l6ZW9mKHU2NCkpOworCitpbml0X25vZGVfZ3VpZDE6CisJa2ZyZWUocmJsb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZWhjYV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaW5pdF9ub2RlX2d1aWQoc2hjYSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXN0cmxjcHkoc2hjYS0+aWJfZGV2aWNlLm5hbWUsICJlaGNhJWQiLCBJQl9ERVZJQ0VfTkFNRV9NQVgpOworCXNoY2EtPmliX2RldmljZS5vd25lciAgICAgICAgICAgICAgID0gVEhJU19NT0RVTEU7CisKKwlzaGNhLT5pYl9kZXZpY2UudXZlcmJzX2FiaV92ZXIJICAgID0gNTsKKwlzaGNhLT5pYl9kZXZpY2UudXZlcmJzX2NtZF9tYXNrCSAgICA9CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0dFVF9DT05URVhUKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9ERVZJQ0UpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUE9SVCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUEQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFQUxMT0NfUEQpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1JFR19NUikJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVIpCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DT01QX0NIQU5ORUwpCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0NRKQkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVApCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUCkJCXwKKwkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUVApCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfUVApCQl8CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVCkJfAorCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVRBQ0hfTUNBU1QpOworCisJc2hjYS0+aWJfZGV2aWNlLm5vZGVfdHlwZSAgICAgICAgICAgPSBSRE1BX05PREVfSUJfQ0E7CisJc2hjYS0+aWJfZGV2aWNlLnBoeXNfcG9ydF9jbnQgICAgICAgPSBzaGNhLT5udW1fcG9ydHM7CisJc2hjYS0+aWJfZGV2aWNlLmRtYV9kZXZpY2UgICAgICAgICAgPSAmc2hjYS0+aWJtZWJ1c19kZXYtPm9mZGV2LmRldjsKKwlzaGNhLT5pYl9kZXZpY2UucXVlcnlfZGV2aWNlICAgICAgICA9IGVoY2FfcXVlcnlfZGV2aWNlOworCXNoY2EtPmliX2RldmljZS5xdWVyeV9wb3J0ICAgICAgICAgID0gZWhjYV9xdWVyeV9wb3J0OworCXNoY2EtPmliX2RldmljZS5xdWVyeV9naWQgICAgICAgICAgID0gZWhjYV9xdWVyeV9naWQ7CisJc2hjYS0+aWJfZGV2aWNlLnF1ZXJ5X3BrZXkgICAgICAgICAgPSBlaGNhX3F1ZXJ5X3BrZXk7CisJLyogc2hjYS0+aW5fZGV2aWNlLm1vZGlmeV9kZXZpY2UgICAgPSBlaGNhX21vZGlmeV9kZXZpY2UgICAgKi8KKwlzaGNhLT5pYl9kZXZpY2UubW9kaWZ5X3BvcnQgICAgICAgICA9IGVoY2FfbW9kaWZ5X3BvcnQ7CisJc2hjYS0+aWJfZGV2aWNlLmFsbG9jX3Vjb250ZXh0ICAgICAgPSBlaGNhX2FsbG9jX3Vjb250ZXh0OworCXNoY2EtPmliX2RldmljZS5kZWFsbG9jX3Vjb250ZXh0ICAgID0gZWhjYV9kZWFsbG9jX3Vjb250ZXh0OworCXNoY2EtPmliX2RldmljZS5hbGxvY19wZCAgICAgICAgICAgID0gZWhjYV9hbGxvY19wZDsKKwlzaGNhLT5pYl9kZXZpY2UuZGVhbGxvY19wZCAgICAgICAgICA9IGVoY2FfZGVhbGxvY19wZDsKKwlzaGNhLT5pYl9kZXZpY2UuY3JlYXRlX2FoCSAgICA9IGVoY2FfY3JlYXRlX2FoOworCS8qIHNoY2EtPmliX2RldmljZS5tb2RpZnlfYWgJICAgID0gZWhjYV9tb2RpZnlfYWg7CSAgICAqLworCXNoY2EtPmliX2RldmljZS5xdWVyeV9haAkgICAgPSBlaGNhX3F1ZXJ5X2FoOworCXNoY2EtPmliX2RldmljZS5kZXN0cm95X2FoCSAgICA9IGVoY2FfZGVzdHJveV9haDsKKwlzaGNhLT5pYl9kZXZpY2UuY3JlYXRlX3FwCSAgICA9IGVoY2FfY3JlYXRlX3FwOworCXNoY2EtPmliX2RldmljZS5tb2RpZnlfcXAJICAgID0gZWhjYV9tb2RpZnlfcXA7CisJc2hjYS0+aWJfZGV2aWNlLnF1ZXJ5X3FwCSAgICA9IGVoY2FfcXVlcnlfcXA7CisJc2hjYS0+aWJfZGV2aWNlLmRlc3Ryb3lfcXAJICAgID0gZWhjYV9kZXN0cm95X3FwOworCXNoY2EtPmliX2RldmljZS5wb3N0X3NlbmQJICAgID0gZWhjYV9wb3N0X3NlbmQ7CisJc2hjYS0+aWJfZGV2aWNlLnBvc3RfcmVjdgkgICAgPSBlaGNhX3Bvc3RfcmVjdjsKKwlzaGNhLT5pYl9kZXZpY2UuY3JlYXRlX2NxCSAgICA9IGVoY2FfY3JlYXRlX2NxOworCXNoY2EtPmliX2RldmljZS5kZXN0cm95X2NxCSAgICA9IGVoY2FfZGVzdHJveV9jcTsKKwlzaGNhLT5pYl9kZXZpY2UucmVzaXplX2NxCSAgICA9IGVoY2FfcmVzaXplX2NxOworCXNoY2EtPmliX2RldmljZS5wb2xsX2NxCQkgICAgPSBlaGNhX3BvbGxfY3E7CisJLyogc2hjYS0+aWJfZGV2aWNlLnBlZWtfY3EJICAgID0gZWhjYV9wZWVrX2NxOwkgICAgKi8KKwlzaGNhLT5pYl9kZXZpY2UucmVxX25vdGlmeV9jcQkgICAgPSBlaGNhX3JlcV9ub3RpZnlfY3E7CisJLyogc2hjYS0+aWJfZGV2aWNlLnJlcV9uY29tcF9ub3RpZiAgPSBlaGNhX3JlcV9uY29tcF9ub3RpZjsgKi8KKwlzaGNhLT5pYl9kZXZpY2UuZ2V0X2RtYV9tcgkgICAgPSBlaGNhX2dldF9kbWFfbXI7CisJc2hjYS0+aWJfZGV2aWNlLnJlZ19waHlzX21yCSAgICA9IGVoY2FfcmVnX3BoeXNfbXI7CisJc2hjYS0+aWJfZGV2aWNlLnJlZ191c2VyX21yCSAgICA9IGVoY2FfcmVnX3VzZXJfbXI7CisJc2hjYS0+aWJfZGV2aWNlLnF1ZXJ5X21yCSAgICA9IGVoY2FfcXVlcnlfbXI7CisJc2hjYS0+aWJfZGV2aWNlLmRlcmVnX21yCSAgICA9IGVoY2FfZGVyZWdfbXI7CisJc2hjYS0+aWJfZGV2aWNlLnJlcmVnX3BoeXNfbXIJICAgID0gZWhjYV9yZXJlZ19waHlzX21yOworCXNoY2EtPmliX2RldmljZS5hbGxvY19tdwkgICAgPSBlaGNhX2FsbG9jX213OworCXNoY2EtPmliX2RldmljZS5iaW5kX213CQkgICAgPSBlaGNhX2JpbmRfbXc7CisJc2hjYS0+aWJfZGV2aWNlLmRlYWxsb2NfbXcJICAgID0gZWhjYV9kZWFsbG9jX213OworCXNoY2EtPmliX2RldmljZS5hbGxvY19mbXIJICAgID0gZWhjYV9hbGxvY19mbXI7CisJc2hjYS0+aWJfZGV2aWNlLm1hcF9waHlzX2ZtcgkgICAgPSBlaGNhX21hcF9waHlzX2ZtcjsKKwlzaGNhLT5pYl9kZXZpY2UudW5tYXBfZm1yCSAgICA9IGVoY2FfdW5tYXBfZm1yOworCXNoY2EtPmliX2RldmljZS5kZWFsbG9jX2ZtcgkgICAgPSBlaGNhX2RlYWxsb2NfZm1yOworCXNoY2EtPmliX2RldmljZS5hdHRhY2hfbWNhc3QJICAgID0gZWhjYV9hdHRhY2hfbWNhc3Q7CisJc2hjYS0+aWJfZGV2aWNlLmRldGFjaF9tY2FzdAkgICAgPSBlaGNhX2RldGFjaF9tY2FzdDsKKwkvKiBzaGNhLT5pYl9kZXZpY2UucHJvY2Vzc19tYWQJICAgID0gZWhjYV9wcm9jZXNzX21hZDsJICAgICovCisJc2hjYS0+aWJfZGV2aWNlLm1tYXAJCSAgICA9IGVoY2FfbW1hcDsKKworCXJldCA9IGliX3JlZ2lzdGVyX2RldmljZSgmc2hjYS0+aWJfZGV2aWNlKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJpYl9yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWQgcmV0PSV4IiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhjYV9jcmVhdGVfYXFwMShzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLCB1MzIgcG9ydCkKK3sKKwlzdHJ1Y3QgZWhjYV9zcG9ydCAqc3BvcnQgPSAmc2hjYS0+c3BvcnRbcG9ydCAtIDFdOworCXN0cnVjdCBpYl9jcSAqaWJjcTsKKwlzdHJ1Y3QgaWJfcXAgKmlicXA7CisJc3RydWN0IGliX3FwX2luaXRfYXR0ciBxcF9pbml0X2F0dHI7CisJaW50IHJldDsKKworCWlmIChzcG9ydC0+aWJjcV9hcXAxKSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJBUVAxIENRIGlzIGFscmVhZHkgY3JlYXRlZC4iKTsKKwkJcmV0dXJuIC1FUEVSTTsKKwl9CisKKwlpYmNxID0gaWJfY3JlYXRlX2NxKCZzaGNhLT5pYl9kZXZpY2UsIE5VTEwsIE5VTEwsICh2b2lkKikoLTEpLCAxMCk7CisJaWYgKElTX0VSUihpYmNxKSkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGNyZWF0ZSBBUVAxIENRLiIpOworCQlyZXR1cm4gUFRSX0VSUihpYmNxKTsKKwl9CisJc3BvcnQtPmliY3FfYXFwMSA9IGliY3E7CisKKwlpZiAoc3BvcnQtPmlicXBfYXFwMSkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQVFQMSBRUCBpcyBhbHJlYWR5IGNyZWF0ZWQuIik7CisJCXJldCA9IC1FUEVSTTsKKwkJZ290byBjcmVhdGVfYXFwMTsKKwl9CisKKwltZW1zZXQoJnFwX2luaXRfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBpYl9xcF9pbml0X2F0dHIpKTsKKwlxcF9pbml0X2F0dHIuc2VuZF9jcSAgICAgICAgICA9IGliY3E7CisJcXBfaW5pdF9hdHRyLnJlY3ZfY3EgICAgICAgICAgPSBpYmNxOworCXFwX2luaXRfYXR0ci5zcV9zaWdfdHlwZSAgICAgID0gSUJfU0lHTkFMX0FMTF9XUjsKKwlxcF9pbml0X2F0dHIuY2FwLm1heF9zZW5kX3dyICA9IDEwMDsKKwlxcF9pbml0X2F0dHIuY2FwLm1heF9yZWN2X3dyICA9IDEwMDsKKwlxcF9pbml0X2F0dHIuY2FwLm1heF9zZW5kX3NnZSA9IDI7CisJcXBfaW5pdF9hdHRyLmNhcC5tYXhfcmVjdl9zZ2UgPSAxOworCXFwX2luaXRfYXR0ci5xcF90eXBlICAgICAgICAgID0gSUJfUVBUX0dTSTsKKwlxcF9pbml0X2F0dHIucG9ydF9udW0gICAgICAgICA9IHBvcnQ7CisJcXBfaW5pdF9hdHRyLnFwX2NvbnRleHQgICAgICAgPSBOVUxMOworCXFwX2luaXRfYXR0ci5ldmVudF9oYW5kbGVyICAgID0gTlVMTDsKKwlxcF9pbml0X2F0dHIuc3JxICAgICAgICAgICAgICA9IE5VTEw7CisKKwlpYnFwID0gaWJfY3JlYXRlX3FwKCZzaGNhLT5wZC0+aWJfcGQsICZxcF9pbml0X2F0dHIpOworCWlmIChJU19FUlIoaWJxcCkpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIkNhbm5vdCBjcmVhdGUgQVFQMSBRUC4iKTsKKwkJcmV0ID0gUFRSX0VSUihpYnFwKTsKKwkJZ290byBjcmVhdGVfYXFwMTsKKwl9CisJc3BvcnQtPmlicXBfYXFwMSA9IGlicXA7CisKKwlyZXR1cm4gMDsKKworY3JlYXRlX2FxcDE6CisJaWJfZGVzdHJveV9jcShzcG9ydC0+aWJjcV9hcXAxKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGVoY2FfZGVzdHJveV9hcXAxKHN0cnVjdCBlaGNhX3Nwb3J0ICpzcG9ydCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gaWJfZGVzdHJveV9xcChzcG9ydC0+aWJxcF9hcXAxKTsKKwlpZiAocmV0KSB7CisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGRlc3Ryb3kgQVFQMSBRUC4gcmV0PSV4IiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBpYl9kZXN0cm95X2NxKHNwb3J0LT5pYmNxX2FxcDEpOworCWlmIChyZXQpCisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGRlc3Ryb3kgQVFQMSBDUS4gcmV0PSV4IiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGVoY2Ffc2hvd19kZWJ1Z19sZXZlbChzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZGRwLCBjaGFyICpidWYpCit7CisJcmV0dXJuICBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLAorCQkJIGVoY2FfZGVidWdfbGV2ZWwpOworfQorCitzdGF0aWMgc3NpemVfdCBlaGNhX3N0b3JlX2RlYnVnX2xldmVsKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZHAsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IHZhbHVlID0gKCpidWYpIC0gJzAnOworCWlmICh2YWx1ZSA+PSAwICYmIHZhbHVlIDw9IDkpCisJCWVoY2FfZGVidWdfbGV2ZWwgPSB2YWx1ZTsKKwlyZXR1cm4gMTsKK30KKworRFJJVkVSX0FUVFIoZGVidWdfbGV2ZWwsIFNfSVJVU1IgfCBTX0lXVVNSLAorCSAgICBlaGNhX3Nob3dfZGVidWdfbGV2ZWwsIGVoY2Ffc3RvcmVfZGVidWdfbGV2ZWwpOworCit2b2lkIGVoY2FfY3JlYXRlX2RyaXZlcl9zeXNmcyhzdHJ1Y3QgaWJtZWJ1c19kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfY3JlYXRlX2ZpbGUoJmRydi0+ZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOworfQorCit2b2lkIGVoY2FfcmVtb3ZlX2RyaXZlcl9zeXNmcyhzdHJ1Y3QgaWJtZWJ1c19kcml2ZXIgKmRydikKK3sKKwlkcml2ZXJfcmVtb3ZlX2ZpbGUoJmRydi0+ZHJpdmVyLCAmZHJpdmVyX2F0dHJfZGVidWdfbGV2ZWwpOworfQorCisjZGVmaW5lIEVIQ0FfUkVTT1VSQ0VfQVRUUihuYW1lKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitzdGF0aWMgc3NpemVfdCAgZWhjYV9zaG93XyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCAgICAgICAgICAgIFwKKwkJCQkgY2hhciAqYnVmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorewkJCQkJCQkJCSAgIFwKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhOwkJCQkJCSAgIFwKKwlzdHJ1Y3QgaGlwel9xdWVyeV9oY2EgKnJibG9jazsJCQkJICAgICAgICAgICBcCisJaW50IGRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQkJCQkJCSAgIFwKKwlzaGNhID0gZGV2LT5kcml2ZXJfZGF0YTsJCQkJCSAgIFwKKwkJCQkJCQkJCSAgIFwKKwlyYmxvY2sgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsJCQkgICBcCisJaWYgKCFyYmxvY2spIHsJCQkJCQkgICAgICAgICAgIFwKKwkJZGV2X2VycihkZXYsICJDYW4ndCBhbGxvY2F0ZSByYmxvY2sgbWVtb3J5LiIpOwkJICAgXAorCQlyZXR1cm4gMDsJCQkJCQkgICBcCisJfQkJCQkJCQkJICAgXAorCQkJCQkJCQkJICAgXAorCWlmIChoaXB6X2hfcXVlcnlfaGNhKHNoY2EtPmlwel9oY2FfaGFuZGxlLCByYmxvY2spICE9IEhfU1VDQ0VTUykgeyBcCisJCWRldl9lcnIoZGV2LCAiQ2FuJ3QgcXVlcnkgZGV2aWNlIHByb3BlcnRpZXMiKTsJICAgCSAgIFwKKwkJa2ZyZWUocmJsb2NrKTsJCQkJCSAgIAkgICBcCisJCXJldHVybiAwOwkJCQkJICAgCSAgIFwKKwl9CQkJCQkJCQkgICBcCisJCQkJCQkJCQkgICBcCisJZGF0YSA9IHJibG9jay0+bmFtZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlrZnJlZShyYmxvY2spOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJCQkJCQkJICAgXAorCWlmICgoc3RyY21wKCNuYW1lLCAibnVtX3BvcnRzIikgPT0gMCkgJiYgKGVoY2FfbnJfcG9ydHMgPT0gMSkpCSAgIFwKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjU2LCAiMVxuIik7CQkJICAgXAorCWVsc2UJCQkJCQkJCSAgIFwKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgMjU2LCAiJWRcbiIsIGRhdGEpOwkJICAgXAorCQkJCQkJCQkJICAgXAorfQkJCQkJCQkJCSAgIFwKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBlaGNhX3Nob3dfIyNuYW1lLCBOVUxMKTsKKworRUhDQV9SRVNPVVJDRV9BVFRSKG51bV9wb3J0cyk7CitFSENBX1JFU09VUkNFX0FUVFIoaHdfdmVyKTsKK0VIQ0FfUkVTT1VSQ0VfQVRUUihtYXhfZXEpOworRUhDQV9SRVNPVVJDRV9BVFRSKGN1cl9lcSk7CitFSENBX1JFU09VUkNFX0FUVFIobWF4X2NxKTsKK0VIQ0FfUkVTT1VSQ0VfQVRUUihjdXJfY3EpOworRUhDQV9SRVNPVVJDRV9BVFRSKG1heF9xcCk7CitFSENBX1JFU09VUkNFX0FUVFIoY3VyX3FwKTsKK0VIQ0FfUkVTT1VSQ0VfQVRUUihtYXhfbXIpOworRUhDQV9SRVNPVVJDRV9BVFRSKGN1cl9tcik7CitFSENBX1JFU09VUkNFX0FUVFIobWF4X213KTsKK0VIQ0FfUkVTT1VSQ0VfQVRUUihjdXJfbXcpOworRUhDQV9SRVNPVVJDRV9BVFRSKG1heF9wZCk7CitFSENBX1JFU09VUkNFX0FUVFIobWF4X2FoKTsKKworc3RhdGljIHNzaXplX3QgZWhjYV9zaG93X2FkYXB0ZXJfaGFuZGxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gZGV2LT5kcml2ZXJfZGF0YTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlKTsKKworfQorc3RhdGljIERFVklDRV9BVFRSKGFkYXB0ZXJfaGFuZGxlLCBTX0lSVUdPLCBlaGNhX3Nob3dfYWRhcHRlcl9oYW5kbGUsIE5VTEwpOworCisKK3ZvaWQgZWhjYV9jcmVhdGVfZGV2aWNlX3N5c2ZzKHN0cnVjdCBpYm1lYnVzX2RldiAqZGV2KQoreworCWRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5vZmRldi5kZXYsICZkZXZfYXR0cl9hZGFwdGVyX2hhbmRsZSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX251bV9wb3J0cyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2h3X3Zlcik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9lcSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9lcSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9jcSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9jcSk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9xcCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9xcCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9tcik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9tcik7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9tdyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9tdyk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9wZCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9haCk7Cit9CisKK3ZvaWQgZWhjYV9yZW1vdmVfZGV2aWNlX3N5c2ZzKHN0cnVjdCBpYm1lYnVzX2RldiAqZGV2KQoreworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2LT5vZmRldi5kZXYsICZkZXZfYXR0cl9hZGFwdGVyX2hhbmRsZSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX251bV9wb3J0cyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2h3X3Zlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9lcSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9lcSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9jcSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9jcSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9xcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9xcCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9tcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9tcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9tdyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX2N1cl9tdyk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9wZCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPm9mZGV2LmRldiwgJmRldl9hdHRyX21heF9haCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGVoY2FfcHJvYmUoc3RydWN0IGlibWVidXNfZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYTsKKwl1NjQgKmhhbmRsZTsKKwlzdHJ1Y3QgaWJfcGQgKmlicGQ7CisJaW50IHJldDsKKworCWhhbmRsZSA9ICh1NjQgKilnZXRfcHJvcGVydHkoZGV2LT5vZmRldi5ub2RlLCAiaWJtLGhjYS1oYW5kbGUiLCBOVUxMKTsKKwlpZiAoIWhhbmRsZSkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBnZXQgZUhDQSBoYW5kbGUgZm9yIGFkYXB0ZXI6ICVzLiIsCisJCQkgICAgIGRldi0+b2ZkZXYubm9kZS0+ZnVsbF9uYW1lKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKCEoKmhhbmRsZSkpIHsKKwkJZWhjYV9nZW5fZXJyKCJXcm9uZyBlSENBIGhhbmRsZSBmb3IgYWRhcHRlcjogJXMuIiwKKwkJCSAgICAgZGV2LT5vZmRldi5ub2RlLT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzaGNhID0gKHN0cnVjdCBlaGNhX3NoY2EgKilpYl9hbGxvY19kZXZpY2Uoc2l6ZW9mKCpzaGNhKSk7CisJaWYgKCFzaGNhKSB7CisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGFsbG9jYXRlIHNoY2EgbWVtb3J5LiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzaGNhLT5pYm1lYnVzX2RldiA9IGRldjsKKwlzaGNhLT5pcHpfaGNhX2hhbmRsZS5oYW5kbGUgPSAqaGFuZGxlOworCWRldi0+b2ZkZXYuZGV2LmRyaXZlcl9kYXRhID0gc2hjYTsKKworCXJldCA9IGVoY2Ffc2Vuc2VfYXR0cmlidXRlcyhzaGNhKTsKKwlpZiAocmV0IDwgMCkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBzZW5zZSBlSENBIGF0dHJpYnV0ZXMuIik7CisJCWdvdG8gcHJvYmUxOworCX0KKworCXJldCA9IGVoY2FfcmVnaXN0ZXJfZGV2aWNlKHNoY2EpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJDYW5ub3QgcmVnaXN0ZXIgSW5maW5pYmFuZCBkZXZpY2UiKTsKKwkJZ290byBwcm9iZTE7CisJfQorCisJLyogY3JlYXRlIGV2ZW50IHF1ZXVlcyAqLworCXJldCA9IGVoY2FfY3JlYXRlX2VxKHNoY2EsICZzaGNhLT5lcSwgRUhDQV9FUSwgMjA0OCk7CisJaWYgKHJldCkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGNyZWF0ZSBFUS4iKTsKKwkJZ290byBwcm9iZTI7CisJfQorCisJcmV0ID0gZWhjYV9jcmVhdGVfZXEoc2hjYSwgJnNoY2EtPm5lcSwgRUhDQV9ORVEsIDUxMyk7CisJaWYgKHJldCkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGNyZWF0ZSBORVEuIik7CisJCWdvdG8gcHJvYmUzOworCX0KKworCS8qIGNyZWF0ZSBpbnRlcm5hbCBwcm90ZWN0aW9uIGRvbWFpbiAqLworCWlicGQgPSBlaGNhX2FsbG9jX3BkKCZzaGNhLT5pYl9kZXZpY2UsICh2b2lkKikoLTEpLCBOVUxMKTsKKwlpZiAoSVNfRVJSKGlicGQpKSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJDYW5ub3QgY3JlYXRlIGludGVybmFsIFBELiIpOworCQlyZXQgPSBQVFJfRVJSKGlicGQpOworCQlnb3RvIHByb2JlNDsKKwl9CisKKwlzaGNhLT5wZCA9IGNvbnRhaW5lcl9vZihpYnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCXNoY2EtPnBkLT5pYl9wZC5kZXZpY2UgPSAmc2hjYS0+aWJfZGV2aWNlOworCisJLyogY3JlYXRlIGludGVybmFsIG1heCBNUiAqLworCXJldCA9IGVoY2FfcmVnX2ludGVybmFsX21heG1yKHNoY2EsIHNoY2EtPnBkLCAmc2hjYS0+bWF4bXIpOworCisJaWYgKHJldCkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fubm90IGNyZWF0ZSBpbnRlcm5hbCBNUiByZXQ9JXgiLAorCQkJIHJldCk7CisJCWdvdG8gcHJvYmU1OworCX0KKworCS8qIGNyZWF0ZSBBUVAxIGZvciBwb3J0IDEgKi8KKwlpZiAoZWhjYV9vcGVuX2FxcDEgPT0gMSkgeworCQlzaGNhLT5zcG9ydFswXS5wb3J0X3N0YXRlID0gSUJfUE9SVF9ET1dOOworCQlyZXQgPSBlaGNhX2NyZWF0ZV9hcXAxKHNoY2EsIDEpOworCQlpZiAocmV0KSB7CisJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJCSAiQ2Fubm90IGNyZWF0ZSBBUVAxIGZvciBwb3J0IDEuIik7CisJCQlnb3RvIHByb2JlNjsKKwkJfQorCX0KKworCS8qIGNyZWF0ZSBBUVAxIGZvciBwb3J0IDIgKi8KKwlpZiAoKGVoY2Ffb3Blbl9hcXAxID09IDEpICYmIChzaGNhLT5udW1fcG9ydHMgPT0gMikpIHsKKwkJc2hjYS0+c3BvcnRbMV0ucG9ydF9zdGF0ZSA9IElCX1BPUlRfRE9XTjsKKwkJcmV0ID0gZWhjYV9jcmVhdGVfYXFwMShzaGNhLCAyKTsKKwkJaWYgKHJldCkgeworCQkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwKKwkJCQkgIkNhbm5vdCBjcmVhdGUgQVFQMSBmb3IgcG9ydCAyLiIpOworCQkJZ290byBwcm9iZTc7CisJCX0KKwl9CisKKwllaGNhX2NyZWF0ZV9kZXZpY2Vfc3lzZnMoZGV2KTsKKworCXNwaW5fbG9jaygmc2hjYV9saXN0X2xvY2spOworCWxpc3RfYWRkKCZzaGNhLT5zaGNhX2xpc3QsICZzaGNhX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzaGNhX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gMDsKKworcHJvYmU3OgorCXJldCA9IGVoY2FfZGVzdHJveV9hcXAxKCZzaGNhLT5zcG9ydFswXSk7CisJaWYgKHJldCkKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwKKwkJCSAiQ2Fubm90IGRlc3Ryb3kgQVFQMSBmb3IgcG9ydCAxLiByZXQ9JXgiLCByZXQpOworCitwcm9iZTY6CisJcmV0ID0gZWhjYV9kZXJlZ19pbnRlcm5hbF9tYXhtcihzaGNhKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJDYW5ub3QgZGVzdHJveSBpbnRlcm5hbCBNUi4gcmV0PSV4IiwgcmV0KTsKKworcHJvYmU1OgorCXJldCA9IGVoY2FfZGVhbGxvY19wZCgmc2hjYS0+cGQtPmliX3BkKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJDYW5ub3QgZGVzdHJveSBpbnRlcm5hbCBQRC4gcmV0PSV4IiwgcmV0KTsKKworcHJvYmU0OgorCXJldCA9IGVoY2FfZGVzdHJveV9lcShzaGNhLCAmc2hjYS0+bmVxKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJDYW5ub3QgZGVzdHJveSBORVEuIHJldD0leCIsIHJldCk7CisKK3Byb2JlMzoKKwlyZXQgPSBlaGNhX2Rlc3Ryb3lfZXEoc2hjYSwgJnNoY2EtPmVxKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJDYW5ub3QgZGVzdHJveSBFUS4gcmV0PSV4IiwgcmV0KTsKKworcHJvYmUyOgorCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZzaGNhLT5pYl9kZXZpY2UpOworCitwcm9iZTE6CisJaWJfZGVhbGxvY19kZXZpY2UoJnNoY2EtPmliX2RldmljZSk7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgZWhjYV9yZW1vdmUoc3RydWN0IGlibWVidXNfZGV2ICpkZXYpCit7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGRldi0+b2ZkZXYuZGV2LmRyaXZlcl9kYXRhOworCWludCByZXQ7CisKKwllaGNhX3JlbW92ZV9kZXZpY2Vfc3lzZnMoZGV2KTsKKworCWlmIChlaGNhX29wZW5fYXFwMSA9PSAxKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgc2hjYS0+bnVtX3BvcnRzOyBpKyspIHsKKwkJCXJldCA9IGVoY2FfZGVzdHJveV9hcXAxKCZzaGNhLT5zcG9ydFtpXSk7CisJCQlpZiAocmV0KQorCQkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkJCSAiQ2Fubm90IGRlc3Ryb3kgQVFQMSBmb3IgcG9ydCAleCAiCisJCQkJCSAicmV0PSV4IiwgcmV0LCBpKTsKKwkJfQorCX0KKworCWliX3VucmVnaXN0ZXJfZGV2aWNlKCZzaGNhLT5pYl9kZXZpY2UpOworCisJcmV0ID0gZWhjYV9kZXJlZ19pbnRlcm5hbF9tYXhtcihzaGNhKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJDYW5ub3QgZGVzdHJveSBpbnRlcm5hbCBNUi4gcmV0PSV4IiwgcmV0KTsKKworCXJldCA9IGVoY2FfZGVhbGxvY19wZCgmc2hjYS0+cGQtPmliX3BkKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLAorCQkJICJDYW5ub3QgZGVzdHJveSBpbnRlcm5hbCBQRC4gcmV0PSV4IiwgcmV0KTsKKworCXJldCA9IGVoY2FfZGVzdHJveV9lcShzaGNhLCAmc2hjYS0+ZXEpOworCWlmIChyZXQpCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJDYW5ub3QgZGVzdHJveSBFUS4gcmV0PSV4IiwgcmV0KTsKKworCXJldCA9IGVoY2FfZGVzdHJveV9lcShzaGNhLCAmc2hjYS0+bmVxKTsKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiQ2Fub3QgZGVzdHJveSBORVEuIHJldD0leCIsIHJldCk7CisKKwlpYl9kZWFsbG9jX2RldmljZSgmc2hjYS0+aWJfZGV2aWNlKTsKKworCXNwaW5fbG9jaygmc2hjYV9saXN0X2xvY2spOworCWxpc3RfZGVsKCZzaGNhLT5zaGNhX2xpc3QpOworCXNwaW5fdW5sb2NrKCZzaGNhX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBlaGNhX2RldmljZV90YWJsZVtdID0KK3sKKwl7CisJCS5uYW1lICAgICAgID0gImxoY2EiLAorCQkuY29tcGF0aWJsZSA9ICJJQk0sbGhjYSIsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWJtZWJ1c19kcml2ZXIgZWhjYV9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gImVoY2EiLAorCS5pZF90YWJsZSA9IGVoY2FfZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICA9IGVoY2FfcHJvYmUsCisJLnJlbW92ZSAgID0gZWhjYV9yZW1vdmUsCit9OworCit2b2lkIGVoY2FfcG9sbF9lcXModW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2E7CisKKwlzcGluX2xvY2soJnNoY2FfbGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNoY2EsICZzaGNhX2xpc3QsIHNoY2FfbGlzdCkgeworCQlpZiAoc2hjYS0+ZXEuaXNfaW5pdGlhbGl6ZWQpCisJCQllaGNhX3Rhc2tsZXRfZXEoKHVuc2lnbmVkIGxvbmcpKHZvaWQqKXNoY2EpOworCX0KKwltb2RfdGltZXIoJnBvbGxfZXFzX3RpbWVyLCBqaWZmaWVzICsgSFopOworCXNwaW5fdW5sb2NrKCZzaGNhX2xpc3RfbG9jayk7Cit9CisKK2ludCBfX2luaXQgZWhjYV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwcmludGsoS0VSTl9JTkZPICJlSENBIEluZmluaWJhbmQgRGV2aWNlIERyaXZlciAiCisJICAgICAgICAgICAgICAgICAiKFJlbC46IFNWTkVIQ0FfMDAxNilcbiIpOworCWlkcl9pbml0KCZlaGNhX3FwX2lkcik7CisJaWRyX2luaXQoJmVoY2FfY3FfaWRyKTsKKwlzcGluX2xvY2tfaW5pdCgmZWhjYV9xcF9pZHJfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmVoY2FfY3FfaWRyX2xvY2spOworCisJSU5JVF9MSVNUX0hFQUQoJnNoY2FfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJnNoY2FfbGlzdF9sb2NrKTsKKworCWlmICgocmV0ID0gZWhjYV9jcmVhdGVfY29tcF9wb29sKCkpKSB7CisJCWVoY2FfZ2VuX2VycigiQ2Fubm90IGNyZWF0ZSBjb21wIHBvb2wuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKChyZXQgPSBlaGNhX2NyZWF0ZV9zbGFiX2NhY2hlcygpKSkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCBjcmVhdGUgU0xBQiBjYWNoZXMiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBtb2R1bGVfaW5pdDE7CisJfQorCisJaWYgKChyZXQgPSBpYm1lYnVzX3JlZ2lzdGVyX2RyaXZlcigmZWhjYV9kcml2ZXIpKSkgeworCQllaGNhX2dlbl9lcnIoIkNhbm5vdCByZWdpc3RlciBlSENBIGRldmljZSBkcml2ZXIiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBtb2R1bGVfaW5pdDI7CisJfQorCisJZWhjYV9jcmVhdGVfZHJpdmVyX3N5c2ZzKCZlaGNhX2RyaXZlcik7CisKKwlpZiAoZWhjYV9wb2xsX2FsbF9lcXMgIT0gMSkgeworCQllaGNhX2dlbl9lcnIoIldBUk5JTkchISEiKTsKKwkJZWhjYV9nZW5fZXJyKCJJdCBpcyBwb3NzaWJsZSB0byBsb3NlIGludGVycnVwdHMuIik7CisJfSBlbHNlIHsKKwkJaW5pdF90aW1lcigmcG9sbF9lcXNfdGltZXIpOworCQlwb2xsX2Vxc190aW1lci5mdW5jdGlvbiA9IGVoY2FfcG9sbF9lcXM7CisJCXBvbGxfZXFzX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFo7CisJCWFkZF90aW1lcigmcG9sbF9lcXNfdGltZXIpOworCX0KKworCXJldHVybiAwOworCittb2R1bGVfaW5pdDI6CisJZWhjYV9kZXN0cm95X3NsYWJfY2FjaGVzKCk7CisKK21vZHVsZV9pbml0MToKKwllaGNhX2Rlc3Ryb3lfY29tcF9wb29sKCk7CisJcmV0dXJuIHJldDsKK307CisKK3ZvaWQgX19leGl0IGVoY2FfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlpZiAoZWhjYV9wb2xsX2FsbF9lcXMgPT0gMSkKKwkJZGVsX3RpbWVyX3N5bmMoJnBvbGxfZXFzX3RpbWVyKTsKKworCWVoY2FfcmVtb3ZlX2RyaXZlcl9zeXNmcygmZWhjYV9kcml2ZXIpOworCWlibWVidXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmVoY2FfZHJpdmVyKTsKKworCWVoY2FfZGVzdHJveV9zbGFiX2NhY2hlcygpOworCisJZWhjYV9kZXN0cm95X2NvbXBfcG9vbCgpOworCisJaWRyX2Rlc3Ryb3koJmVoY2FfY3FfaWRyKTsKKwlpZHJfZGVzdHJveSgmZWhjYV9xcF9pZHIpOworfTsKKworbW9kdWxlX2luaXQoZWhjYV9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChlaGNhX21vZHVsZV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWNhc3QuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbWNhc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmE4NzA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tY2FzdC5jCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICBtY2FzdCAgZnVuY3Rpb25zCisgKgorICogIEF1dGhvcnM6IEtoYWRpamEgU291aXNzaSA8c291aXNzaWtAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBXYWxlcmkgRm9taW4gPGZvbWluQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgUmVpbmhhcmQgRXJuc3QgPHJlcm5zdEBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhvYW5nLU5hbSBOZ3V5ZW4gPGhuZ3V5ZW5AZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIZWlrbyBKIFNjaGljayA8c2NoaWNraGpAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisjaW5jbHVkZSAiZWhjYV9xZXMuaCIKKyNpbmNsdWRlICJlaGNhX2l2ZXJicy5oIgorI2luY2x1ZGUgImhjcF9pZi5oIgorCisjZGVmaW5lIE1BWF9NQ19MSUQgMHhGRkZFCisjZGVmaW5lIE1JTl9NQ19MSUQgMHhDMDAwCS8qIE11bHRpY2FzdCBsaW1pdHMgKi8KKyNkZWZpbmUgRUhDQV9WQUxJRF9NVUxUSUNBU1RfR0lEKGdpZCkgICgoZ2lkKVswXSA9PSAweEZGKQorI2RlZmluZSBFSENBX1ZBTElEX01VTFRJQ0FTVF9MSUQobGlkKSBcCisJKCgobGlkKSA+PSBNSU5fTUNfTElEKSAmJiAoKGxpZCkgPD0gTUFYX01DX0xJRCkpCisKK2ludCBlaGNhX2F0dGFjaF9tY2FzdChzdHJ1Y3QgaWJfcXAgKmlicXAsIHVuaW9uIGliX2dpZCAqZ2lkLCB1MTYgbGlkKQoreworCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9IGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgZWhjYV9xcCwgaWJfcXApOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSBjb250YWluZXJfb2YoaWJxcC0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLAorCQkJCQkgICAgICBpYl9kZXZpY2UpOworCXVuaW9uIGliX2dpZCBteV9naWQ7CisJdTY0IHN1Ym5ldF9wcmVmaXgsIGludGVyZmFjZV9pZCwgaF9yZXQ7CisKKwlpZiAoaWJxcC0+cXBfdHlwZSAhPSBJQl9RUFRfVUQpIHsKKwkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiaW52YWxpZCBxcF90eXBlPSV4IiwgaWJxcC0+cXBfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKEVIQ0FfVkFMSURfTVVMVElDQVNUX0dJRChnaWQtPnJhdykpKSB7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgImludmFsaWQgbXVsaXRjYXN0IGdpZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKChsaWQgPCBNSU5fTUNfTElEKSB8fCAobGlkID4gTUFYX01DX0xJRCkpIHsKKwkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiaW52YWxpZCBtdWxpdGNhc3QgbGlkPSV4IiwgbGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KCZteV9naWQucmF3LCBnaWQtPnJhdywgc2l6ZW9mKHVuaW9uIGliX2dpZCkpOworCisJc3VibmV0X3ByZWZpeCA9IGJlNjRfdG9fY3B1KG15X2dpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCk7CisJaW50ZXJmYWNlX2lkID0gYmU2NF90b19jcHUobXlfZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQpOworCWhfcmV0ID0gaGlwel9oX2F0dGFjaF9tY3FwKHNoY2EtPmlwel9oY2FfaGFuZGxlLAorCQkJCSAgIG15X3FwLT5pcHpfcXBfaGFuZGxlLAorCQkJCSAgIG15X3FwLT5nYWxwYXMua2VybmVsLAorCQkJCSAgIGxpZCwgc3VibmV0X3ByZWZpeCwgaW50ZXJmYWNlX2lkKTsKKwlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKQorCQllaGNhX2VycihpYnFwLT5kZXZpY2UsCisJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4IGhpcHpfaF9hdHRhY2hfbWNxcCgpIGZhaWxlZCAiCisJCQkgImhfcmV0PSVseCIsIG15X3FwLCBpYnFwLT5xcF9udW0sIGhfcmV0KTsKKworCXJldHVybiBlaGNhMmliX3JldHVybl9jb2RlKGhfcmV0KTsKK30KKworaW50IGVoY2FfZGV0YWNoX21jYXN0KHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpCit7CisJc3RydWN0IGVoY2FfcXAgKm15X3FwID0gY29udGFpbmVyX29mKGlicXAsIHN0cnVjdCBlaGNhX3FwLCBpYl9xcCk7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGNvbnRhaW5lcl9vZihpYnFwLT5wZC0+ZGV2aWNlLAorCQkJCQkgICAgICBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCXVuaW9uIGliX2dpZCBteV9naWQ7CisJdTY0IHN1Ym5ldF9wcmVmaXgsIGludGVyZmFjZV9pZCwgaF9yZXQ7CisKKwlpZiAoaWJxcC0+cXBfdHlwZSAhPSBJQl9RUFRfVUQpIHsKKwkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiaW52YWxpZCBxcF90eXBlICV4IiwgaWJxcC0+cXBfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICghKEVIQ0FfVkFMSURfTVVMVElDQVNUX0dJRChnaWQtPnJhdykpKSB7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgImludmFsaWQgbXVsaXRjYXN0IGdpZCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgaWYgKChsaWQgPCBNSU5fTUNfTElEKSB8fCAobGlkID4gTUFYX01DX0xJRCkpIHsKKwkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiaW52YWxpZCBtdWxpdGNhc3QgbGlkPSV4IiwgbGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWVtY3B5KCZteV9naWQucmF3LCBnaWQtPnJhdywgc2l6ZW9mKHVuaW9uIGliX2dpZCkpOworCisJc3VibmV0X3ByZWZpeCA9IGJlNjRfdG9fY3B1KG15X2dpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCk7CisJaW50ZXJmYWNlX2lkID0gYmU2NF90b19jcHUobXlfZ2lkLmdsb2JhbC5pbnRlcmZhY2VfaWQpOworCWhfcmV0ID0gaGlwel9oX2RldGFjaF9tY3FwKHNoY2EtPmlwel9oY2FfaGFuZGxlLAorCQkJCSAgIG15X3FwLT5pcHpfcXBfaGFuZGxlLAorCQkJCSAgIG15X3FwLT5nYWxwYXMua2VybmVsLAorCQkJCSAgIGxpZCwgc3VibmV0X3ByZWZpeCwgaW50ZXJmYWNlX2lkKTsKKwlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKQorCQllaGNhX2VycihpYnFwLT5kZXZpY2UsCisJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4IGhpcHpfaF9kZXRhY2hfbWNxcCgpIGZhaWxlZCAiCisJCQkgImhfcmV0PSVseCIsIG15X3FwLCBpYnFwLT5xcF9udW0sIGhfcmV0KTsKKworCXJldHVybiBlaGNhMmliX3JldHVybl9jb2RlKGhfcmV0KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9tcm13LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNjU0NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5jCkBAIC0wLDAgKzEsMjI2MSBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgTVIvTVcgZnVuY3Rpb25zCisgKgorICogIEF1dGhvcnM6IERpZXRtYXIgRGVja2VyIDxkZGVja2VyQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCisjaW5jbHVkZSAiZWhjYV9tcm13LmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisjaW5jbHVkZSAiaGlwel9ody5oIgorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm1yX2NhY2hlOworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICptd19jYWNoZTsKKworc3RhdGljIHN0cnVjdCBlaGNhX21yICplaGNhX21yX25ldyh2b2lkKQoreworCXN0cnVjdCBlaGNhX21yICptZTsKKworCW1lID0ga21lbV9jYWNoZV9hbGxvYyhtcl9jYWNoZSwgU0xBQl9LRVJORUwpOworCWlmIChtZSkgeworCQltZW1zZXQobWUsIDAsIHNpemVvZihzdHJ1Y3QgZWhjYV9tcikpOworCQlzcGluX2xvY2tfaW5pdCgmbWUtPm1ybG9jayk7CisJfSBlbHNlCisJCWVoY2FfZ2VuX2VycigiYWxsb2MgZmFpbGVkIik7CisKKwlyZXR1cm4gbWU7Cit9CisKK3N0YXRpYyB2b2lkIGVoY2FfbXJfZGVsZXRlKHN0cnVjdCBlaGNhX21yICptZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUobXJfY2FjaGUsIG1lKTsKK30KKworc3RhdGljIHN0cnVjdCBlaGNhX213ICplaGNhX213X25ldyh2b2lkKQoreworCXN0cnVjdCBlaGNhX213ICptZTsKKworCW1lID0ga21lbV9jYWNoZV9hbGxvYyhtd19jYWNoZSwgU0xBQl9LRVJORUwpOworCWlmIChtZSkgeworCQltZW1zZXQobWUsIDAsIHNpemVvZihzdHJ1Y3QgZWhjYV9tdykpOworCQlzcGluX2xvY2tfaW5pdCgmbWUtPm13bG9jayk7CisJfSBlbHNlCisJCWVoY2FfZ2VuX2VycigiYWxsb2MgZmFpbGVkIik7CisKKwlyZXR1cm4gbWU7Cit9CisKK3N0YXRpYyB2b2lkIGVoY2FfbXdfZGVsZXRlKHN0cnVjdCBlaGNhX213ICptZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUobXdfY2FjaGUsIG1lKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGliX21yICplaGNhX2dldF9kbWFfbXIoc3RydWN0IGliX3BkICpwZCwgaW50IG1yX2FjY2Vzc19mbGFncykKK3sKKwlzdHJ1Y3QgaWJfbXIgKmliX21yOworCWludCByZXQ7CisJc3RydWN0IGVoY2FfbXIgKmVfbWF4bXI7CisJc3RydWN0IGVoY2FfcGQgKmVfcGQgPSBjb250YWluZXJfb2YocGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CisJCWNvbnRhaW5lcl9vZihwZC0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCisJaWYgKHNoY2EtPm1heG1yKSB7CisJCWVfbWF4bXIgPSBlaGNhX21yX25ldygpOworCQlpZiAoIWVfbWF4bXIpIHsKKwkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJvdXQgb2YgbWVtb3J5Iik7CisJCQlpYl9tciA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQlnb3RvIGdldF9kbWFfbXJfZXhpdDA7CisJCX0KKworCQlyZXQgPSBlaGNhX3JlZ19tYXhtcihzaGNhLCBlX21heG1yLCAodTY0KilLRVJORUxCQVNFLAorCQkJCSAgICAgbXJfYWNjZXNzX2ZsYWdzLCBlX3BkLAorCQkJCSAgICAgJmVfbWF4bXItPmliLmliX21yLmxrZXksCisJCQkJICAgICAmZV9tYXhtci0+aWIuaWJfbXIucmtleSk7CisJCWlmIChyZXQpIHsKKwkJCWliX21yID0gRVJSX1BUUihyZXQpOworCQkJZ290byBnZXRfZG1hX21yX2V4aXQwOworCQl9CisJCWliX21yID0gJmVfbWF4bXItPmliLmliX21yOworCX0gZWxzZSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJubyBpbnRlcm5hbCBtYXgtTVIgZXhpc3QhIik7CisJCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBnZXRfZG1hX21yX2V4aXQwOworCX0KKworZ2V0X2RtYV9tcl9leGl0MDoKKwlpZiAoSVNfRVJSKGliX21yKSkKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgInJjPSVseCBwZD0lcCBtcl9hY2Nlc3NfZmxhZ3M9JXggIiwKKwkJCSBQVFJfRVJSKGliX21yKSwgcGQsIG1yX2FjY2Vzc19mbGFncyk7CisJcmV0dXJuIGliX21yOworfSAvKiBlbmQgZWhjYV9nZXRfZG1hX21yKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGliX21yICplaGNhX3JlZ19waHlzX21yKHN0cnVjdCBpYl9wZCAqcGQsCisJCQkgICAgICAgc3RydWN0IGliX3BoeXNfYnVmICpwaHlzX2J1Zl9hcnJheSwKKwkJCSAgICAgICBpbnQgbnVtX3BoeXNfYnVmLAorCQkJICAgICAgIGludCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkgICAgICAgdTY0ICppb3ZhX3N0YXJ0KQoreworCXN0cnVjdCBpYl9tciAqaWJfbXI7CisJaW50IHJldDsKKwlzdHJ1Y3QgZWhjYV9tciAqZV9tcjsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0KKwkJY29udGFpbmVyX29mKHBkLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsIGliX2RldmljZSk7CisJc3RydWN0IGVoY2FfcGQgKmVfcGQgPSBjb250YWluZXJfb2YocGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisKKwl1NjQgc2l6ZTsKKwlzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gcGdpbmZvPXswLDAsMCwwLDAsMCwwLE5VTEwsMCxOVUxMLE5VTEwsMCxOVUxMLDB9OworCXUzMiBudW1fcGFnZXNfbXI7CisJdTMyIG51bV9wYWdlc180azsgLyogNGsgcG9ydGlvbiAicGFnZXMiICovCisKKwlpZiAoKG51bV9waHlzX2J1ZiA8PSAwKSB8fCAhcGh5c19idWZfYXJyYXkpIHsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IG51bV9waHlzX2J1Zj0leCAiCisJCQkgInBoeXNfYnVmX2FycmF5PSVwIiwgbnVtX3BoeXNfYnVmLCBwaHlzX2J1Zl9hcnJheSk7CisJCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byByZWdfcGh5c19tcl9leGl0MDsKKwl9CisJaWYgKCgobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9XUklURSkgJiYKKwkgICAgICEobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKSkgfHwKKwkgICAgKChtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfUkVNT1RFX0FUT01JQykgJiYKKwkgICAgICEobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKSkpIHsKKwkJLyoKKwkJICogUmVtb3RlIFdyaXRlIEFjY2VzcyByZXF1aXJlcyBMb2NhbCBXcml0ZSBBY2Nlc3MKKwkJICogUmVtb3RlIEF0b21pYyBBY2Nlc3MgcmVxdWlyZXMgTG9jYWwgV3JpdGUgQWNjZXNzCisJCSAqLworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiYmFkIGlucHV0IHZhbHVlczogbXJfYWNjZXNzX2ZsYWdzPSV4IiwKKwkJCSBtcl9hY2Nlc3NfZmxhZ3MpOworCQlpYl9tciA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gcmVnX3BoeXNfbXJfZXhpdDA7CisJfQorCisJLyogY2hlY2sgcGh5c2ljYWwgYnVmZmVyIGxpc3QgYW5kIGNhbGN1bGF0ZSBzaXplICovCisJcmV0ID0gZWhjYV9tcl9jaGtfYnVmX2FuZF9jYWxjX3NpemUocGh5c19idWZfYXJyYXksIG51bV9waHlzX2J1ZiwKKwkJCQkJICAgIGlvdmFfc3RhcnQsICZzaXplKTsKKwlpZiAocmV0KSB7CisJCWliX21yID0gRVJSX1BUUihyZXQpOworCQlnb3RvIHJlZ19waHlzX21yX2V4aXQwOworCX0KKwlpZiAoKHNpemUgPT0gMCkgfHwKKwkgICAgKCgodTY0KWlvdmFfc3RhcnQgKyBzaXplKSA8ICh1NjQpaW92YV9zdGFydCkpIHsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IHNpemU9JWx4IGlvdmFfc3RhcnQ9JXAiLAorCQkJIHNpemUsIGlvdmFfc3RhcnQpOworCQlpYl9tciA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gcmVnX3BoeXNfbXJfZXhpdDA7CisJfQorCisJZV9tciA9IGVoY2FfbXJfbmV3KCk7CisJaWYgKCFlX21yKSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJvdXQgb2YgbWVtb3J5Iik7CisJCWliX21yID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byByZWdfcGh5c19tcl9leGl0MDsKKwl9CisKKwkvKiBkZXRlcm1pbmUgbnVtYmVyIG9mIE1SIHBhZ2VzICovCisJbnVtX3BhZ2VzX21yID0gKCgoKHU2NClpb3ZhX3N0YXJ0ICUgUEFHRV9TSVpFKSArIHNpemUgKworCQkJIFBBR0VfU0laRSAtIDEpIC8gUEFHRV9TSVpFKTsKKwludW1fcGFnZXNfNGsgPSAoKCgodTY0KWlvdmFfc3RhcnQgJSBFSENBX1BBR0VTSVpFKSArIHNpemUgKworCQkJIEVIQ0FfUEFHRVNJWkUgLSAxKSAvIEVIQ0FfUEFHRVNJWkUpOworCisJLyogcmVnaXN0ZXIgTVIgb24gSENBICovCisJaWYgKGVoY2FfbXJfaXNfbWF4bXIoc2l6ZSwgaW92YV9zdGFydCkpIHsKKwkJZV9tci0+ZmxhZ3MgfD0gRUhDQV9NUl9GTEFHX01BWE1SOworCQlyZXQgPSBlaGNhX3JlZ19tYXhtcihzaGNhLCBlX21yLCBpb3ZhX3N0YXJ0LCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkJICAgICBlX3BkLCAmZV9tci0+aWIuaWJfbXIubGtleSwKKwkJCQkgICAgICZlX21yLT5pYi5pYl9tci5ya2V5KTsKKwkJaWYgKHJldCkgeworCQkJaWJfbXIgPSBFUlJfUFRSKHJldCk7CisJCQlnb3RvIHJlZ19waHlzX21yX2V4aXQxOworCQl9CisJfSBlbHNlIHsKKwkJcGdpbmZvLnR5cGUgICAgICAgICAgID0gRUhDQV9NUl9QR0lfUEhZUzsKKwkJcGdpbmZvLm51bV9wYWdlcyAgICAgID0gbnVtX3BhZ2VzX21yOworCQlwZ2luZm8ubnVtXzRrICAgICAgICAgPSBudW1fcGFnZXNfNGs7CisJCXBnaW5mby5udW1fcGh5c19idWYgICA9IG51bV9waHlzX2J1ZjsKKwkJcGdpbmZvLnBoeXNfYnVmX2FycmF5ID0gcGh5c19idWZfYXJyYXk7CisJCXBnaW5mby5uZXh0XzRrICAgICAgICA9ICgoKHU2NClpb3ZhX3N0YXJ0ICYgflBBR0VfTUFTSykgLworCQkJCQkgRUhDQV9QQUdFU0laRSk7CisKKwkJcmV0ID0gZWhjYV9yZWdfbXIoc2hjYSwgZV9tciwgaW92YV9zdGFydCwgc2l6ZSwgbXJfYWNjZXNzX2ZsYWdzLAorCQkJCSAgZV9wZCwgJnBnaW5mbywgJmVfbXItPmliLmliX21yLmxrZXksCisJCQkJICAmZV9tci0+aWIuaWJfbXIucmtleSk7CisJCWlmIChyZXQpIHsKKwkJCWliX21yID0gRVJSX1BUUihyZXQpOworCQkJZ290byByZWdfcGh5c19tcl9leGl0MTsKKwkJfQorCX0KKworCS8qIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uIG9mIGFsbCBwYWdlcyAqLworCXJldHVybiAmZV9tci0+aWIuaWJfbXI7CisKK3JlZ19waHlzX21yX2V4aXQxOgorCWVoY2FfbXJfZGVsZXRlKGVfbXIpOworcmVnX3BoeXNfbXJfZXhpdDA6CisJaWYgKElTX0VSUihpYl9tcikpCisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJyYz0lbHggcGQ9JXAgcGh5c19idWZfYXJyYXk9JXAgIgorCQkJICJudW1fcGh5c19idWY9JXggbXJfYWNjZXNzX2ZsYWdzPSV4IGlvdmFfc3RhcnQ9JXAiLAorCQkJIFBUUl9FUlIoaWJfbXIpLCBwZCwgcGh5c19idWZfYXJyYXksCisJCQkgbnVtX3BoeXNfYnVmLCBtcl9hY2Nlc3NfZmxhZ3MsIGlvdmFfc3RhcnQpOworCXJldHVybiBpYl9tcjsKK30gLyogZW5kIGVoY2FfcmVnX3BoeXNfbXIoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdHJ1Y3QgaWJfbXIgKmVoY2FfcmVnX3VzZXJfbXIoc3RydWN0IGliX3BkICpwZCwKKwkJCSAgICAgICBzdHJ1Y3QgaWJfdW1lbSAqcmVnaW9uLAorCQkJICAgICAgIGludCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkgICAgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSkKK3sKKwlzdHJ1Y3QgaWJfbXIgKmliX21yOworCXN0cnVjdCBlaGNhX21yICplX21yOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPQorCQljb250YWluZXJfb2YocGQtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgZWhjYV9wZCAqZV9wZCA9IGNvbnRhaW5lcl9vZihwZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKKwlzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gcGdpbmZvPXswLDAsMCwwLDAsMCwwLE5VTEwsMCxOVUxMLE5VTEwsMCxOVUxMLDB9OworCWludCByZXQ7CisJdTMyIG51bV9wYWdlc19tcjsKKwl1MzIgbnVtX3BhZ2VzXzRrOyAvKiA0ayBwb3J0aW9uICJwYWdlcyIgKi8KKworCWlmICghcGQpIHsKKwkJZWhjYV9nZW5fZXJyKCJiYWQgcGQ9JXAiLCBwZCk7CisJCXJldHVybiBFUlJfUFRSKC1FRkFVTFQpOworCX0KKwlpZiAoIXJlZ2lvbikgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiYmFkIGlucHV0IHZhbHVlczogcmVnaW9uPSVwIiwgcmVnaW9uKTsKKwkJaWJfbXIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIHJlZ191c2VyX21yX2V4aXQwOworCX0KKwlpZiAoKChtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSAmJgorCSAgICAgIShtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKSB8fAorCSAgICAoKG1yX2FjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSAmJgorCSAgICAgIShtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKSkgeworCQkvKgorCQkgKiBSZW1vdGUgV3JpdGUgQWNjZXNzIHJlcXVpcmVzIExvY2FsIFdyaXRlIEFjY2VzcworCQkgKiBSZW1vdGUgQXRvbWljIEFjY2VzcyByZXF1aXJlcyBMb2NhbCBXcml0ZSBBY2Nlc3MKKwkJICovCisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJiYWQgaW5wdXQgdmFsdWVzOiBtcl9hY2Nlc3NfZmxhZ3M9JXgiLAorCQkJIG1yX2FjY2Vzc19mbGFncyk7CisJCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byByZWdfdXNlcl9tcl9leGl0MDsKKwl9CisJaWYgKHJlZ2lvbi0+cGFnZV9zaXplICE9IFBBR0VfU0laRSkgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAicGFnZSBzaXplIG5vdCBzdXBwb3J0ZWQsICIKKwkJCSAicmVnaW9uLT5wYWdlX3NpemU9JXgiLCByZWdpb24tPnBhZ2Vfc2l6ZSk7CisJCWliX21yID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byByZWdfdXNlcl9tcl9leGl0MDsKKwl9CisKKwlpZiAoKHJlZ2lvbi0+bGVuZ3RoID09IDApIHx8CisJICAgICgocmVnaW9uLT52aXJ0X2Jhc2UgKyByZWdpb24tPmxlbmd0aCkgPCByZWdpb24tPnZpcnRfYmFzZSkpIHsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IGxlbmd0aD0lbHggIgorCQkJICJ2aXJ0X2Jhc2U9JWx4IiwgcmVnaW9uLT5sZW5ndGgsIHJlZ2lvbi0+dmlydF9iYXNlKTsKKwkJaWJfbXIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIHJlZ191c2VyX21yX2V4aXQwOworCX0KKworCWVfbXIgPSBlaGNhX21yX25ldygpOworCWlmICghZV9tcikgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAib3V0IG9mIG1lbW9yeSIpOworCQlpYl9tciA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gcmVnX3VzZXJfbXJfZXhpdDA7CisJfQorCisJLyogZGV0ZXJtaW5lIG51bWJlciBvZiBNUiBwYWdlcyAqLworCW51bV9wYWdlc19tciA9ICgoKHJlZ2lvbi0+dmlydF9iYXNlICUgUEFHRV9TSVpFKSArIHJlZ2lvbi0+bGVuZ3RoICsKKwkJCSBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRSk7CisJbnVtX3BhZ2VzXzRrID0gKCgocmVnaW9uLT52aXJ0X2Jhc2UgJSBFSENBX1BBR0VTSVpFKSArIHJlZ2lvbi0+bGVuZ3RoICsKKwkJCSBFSENBX1BBR0VTSVpFIC0gMSkgLyBFSENBX1BBR0VTSVpFKTsKKworCS8qIHJlZ2lzdGVyIE1SIG9uIEhDQSAqLworCXBnaW5mby50eXBlICAgICAgID0gRUhDQV9NUl9QR0lfVVNFUjsKKwlwZ2luZm8ubnVtX3BhZ2VzICA9IG51bV9wYWdlc19tcjsKKwlwZ2luZm8ubnVtXzRrICAgICA9IG51bV9wYWdlc180azsKKwlwZ2luZm8ucmVnaW9uICAgICA9IHJlZ2lvbjsKKwlwZ2luZm8ubmV4dF80awkgID0gcmVnaW9uLT5vZmZzZXQgLyBFSENBX1BBR0VTSVpFOworCXBnaW5mby5uZXh0X2NodW5rID0gbGlzdF9wcmVwYXJlX2VudHJ5KHBnaW5mby5uZXh0X2NodW5rLAorCQkJCQkgICAgICAgKCZyZWdpb24tPmNodW5rX2xpc3QpLAorCQkJCQkgICAgICAgbGlzdCk7CisKKwlyZXQgPSBlaGNhX3JlZ19tcihzaGNhLCBlX21yLCAodTY0KilyZWdpb24tPnZpcnRfYmFzZSwKKwkJCSAgcmVnaW9uLT5sZW5ndGgsIG1yX2FjY2Vzc19mbGFncywgZV9wZCwgJnBnaW5mbywKKwkJCSAgJmVfbXItPmliLmliX21yLmxrZXksICZlX21yLT5pYi5pYl9tci5ya2V5KTsKKwlpZiAocmV0KSB7CisJCWliX21yID0gRVJSX1BUUihyZXQpOworCQlnb3RvIHJlZ191c2VyX21yX2V4aXQxOworCX0KKworCS8qIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uIG9mIGFsbCBwYWdlcyAqLworCXJldHVybiAmZV9tci0+aWIuaWJfbXI7CisKK3JlZ191c2VyX21yX2V4aXQxOgorCWVoY2FfbXJfZGVsZXRlKGVfbXIpOworcmVnX3VzZXJfbXJfZXhpdDA6CisJaWYgKElTX0VSUihpYl9tcikpCisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJyYz0lbHggcGQ9JXAgcmVnaW9uPSVwIG1yX2FjY2Vzc19mbGFncz0leCIKKwkJCSAiIHVkYXRhPSVwIiwKKwkJCSBQVFJfRVJSKGliX21yKSwgcGQsIHJlZ2lvbiwgbXJfYWNjZXNzX2ZsYWdzLCB1ZGF0YSk7CisJcmV0dXJuIGliX21yOworfSAvKiBlbmQgZWhjYV9yZWdfdXNlcl9tcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX3JlcmVnX3BoeXNfbXIoc3RydWN0IGliX21yICptciwKKwkJICAgICAgIGludCBtcl9yZXJlZ19tYXNrLAorCQkgICAgICAgc3RydWN0IGliX3BkICpwZCwKKwkJICAgICAgIHN0cnVjdCBpYl9waHlzX2J1ZiAqcGh5c19idWZfYXJyYXksCisJCSAgICAgICBpbnQgbnVtX3BoeXNfYnVmLAorCQkgICAgICAgaW50IG1yX2FjY2Vzc19mbGFncywKKwkJICAgICAgIHU2NCAqaW92YV9zdGFydCkKK3sKKwlpbnQgcmV0OworCisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CisJCWNvbnRhaW5lcl9vZihtci0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCXN0cnVjdCBlaGNhX21yICplX21yID0gY29udGFpbmVyX29mKG1yLCBzdHJ1Y3QgZWhjYV9tciwgaWIuaWJfbXIpOworCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihtci0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJdTY0IG5ld19zaXplOworCXU2NCAqbmV3X3N0YXJ0OworCXUzMiBuZXdfYWNsOworCXN0cnVjdCBlaGNhX3BkICpuZXdfcGQ7CisJdTMyIHRtcF9sa2V5LCB0bXBfcmtleTsKKwl1bnNpZ25lZCBsb25nIHNsX2ZsYWdzOworCXUzMiBudW1fcGFnZXNfbXIgPSAwOworCXUzMiBudW1fcGFnZXNfNGsgPSAwOyAvKiA0ayBwb3J0aW9uICJwYWdlcyIgKi8KKwlzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gcGdpbmZvPXswLDAsMCwwLDAsMCwwLE5VTEwsMCxOVUxMLE5VTEwsMCxOVUxMLDB9OworCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKKworCWlmIChteV9wZC0+aWJfcGQudW9iamVjdCAmJiBteV9wZC0+aWJfcGQudW9iamVjdC0+Y29udGV4dCAmJgorCSAgICAobXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSkgeworCQllaGNhX2Vycihtci0+ZGV2aWNlLCAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCisJCQkgY3VyX3BpZCwgbXlfcGQtPm93bnBpZCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcmVyZWdfcGh5c19tcl9leGl0MDsKKwl9CisKKwlpZiAoIShtcl9yZXJlZ19tYXNrICYgSUJfTVJfUkVSRUdfVFJBTlMpKSB7CisJCS8qIFRPRE8gbm90IHN1cHBvcnRlZCwgYmVjYXVzZSBQSFlQIHJlcmVnIGhDYWxsIG5lZWRzIHBhZ2VzICovCisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJyZXJlZyB3aXRob3V0IElCX01SX1JFUkVHX1RSQU5TIG5vdCAiCisJCQkgInN1cHBvcnRlZCB5ZXQsIG1yX3JlcmVnX21hc2s9JXgiLCBtcl9yZXJlZ19tYXNrKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byByZXJlZ19waHlzX21yX2V4aXQwOworCX0KKworCWlmIChtcl9yZXJlZ19tYXNrICYgSUJfTVJfUkVSRUdfUEQpIHsKKwkJaWYgKCFwZCkgeworCQkJZWhjYV9lcnIobXItPmRldmljZSwgInJlcmVnIHdpdGggYmFkIHBkLCBwZD0lcCAiCisJCQkJICJtcl9yZXJlZ19tYXNrPSV4IiwgcGQsIG1yX3JlcmVnX21hc2spOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcmVyZWdfcGh5c19tcl9leGl0MDsKKwkJfQorCX0KKworCWlmICgobXJfcmVyZWdfbWFzayAmCisJICAgICB+KElCX01SX1JFUkVHX1RSQU5TIHwgSUJfTVJfUkVSRUdfUEQgfCBJQl9NUl9SRVJFR19BQ0NFU1MpKSB8fAorCSAgICAobXJfcmVyZWdfbWFzayA9PSAwKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHJlcmVnX3BoeXNfbXJfZXhpdDA7CisJfQorCisJLyogY2hlY2sgb3RoZXIgcGFyYW1ldGVycyAqLworCWlmIChlX21yID09IHNoY2EtPm1heG1yKSB7CisJCS8qIHNob3VsZCBiZSBpbXBvc3NpYmxlLCBob3dldmVyIHJlamVjdCB0byBiZSBzdXJlICovCisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJyZXJlZyBpbnRlcm5hbCBtYXgtTVIgaW1wb3NzaWJsZSwgbXI9JXAgIgorCQkJICJzaGNhLT5tYXhtcj0lcCBtci0+bGtleT0leCIsCisJCQkgbXIsIHNoY2EtPm1heG1yLCBtci0+bGtleSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcmVyZWdfcGh5c19tcl9leGl0MDsKKwl9CisJaWYgKG1yX3JlcmVnX21hc2sgJiBJQl9NUl9SRVJFR19UUkFOUykgeyAvKiB0cmFuc2wuLCBpLmUuIGFkZHIvc2l6ZSAqLworCQlpZiAoZV9tci0+ZmxhZ3MgJiBFSENBX01SX0ZMQUdfRk1SKSB7CisJCQllaGNhX2Vycihtci0+ZGV2aWNlLCAibm90IHN1cHBvcnRlZCBmb3IgRk1SLCBtcj0lcCAiCisJCQkJICJmbGFncz0leCIsIG1yLCBlX21yLT5mbGFncyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byByZXJlZ19waHlzX21yX2V4aXQwOworCQl9CisJCWlmICghcGh5c19idWZfYXJyYXkgfHwgbnVtX3BoeXNfYnVmIDw9IDApIHsKKwkJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJiYWQgaW5wdXQgdmFsdWVzOiBtcl9yZXJlZ19tYXNrPSV4IgorCQkJCSAiIHBoeXNfYnVmX2FycmF5PSVwIG51bV9waHlzX2J1Zj0leCIsCisJCQkJIG1yX3JlcmVnX21hc2ssIHBoeXNfYnVmX2FycmF5LCBudW1fcGh5c19idWYpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gcmVyZWdfcGh5c19tcl9leGl0MDsKKwkJfQorCX0KKwlpZiAoKG1yX3JlcmVnX21hc2sgJiBJQl9NUl9SRVJFR19BQ0NFU1MpICYmCS8qIGNoYW5nZSBBQ0wgKi8KKwkgICAgKCgobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9XUklURSkgJiYKKwkgICAgICAhKG1yX2FjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19MT0NBTF9XUklURSkpIHx8CisJICAgICAoKG1yX2FjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSAmJgorCSAgICAgICEobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKSkpKSB7CisJCS8qCisJCSAqIFJlbW90ZSBXcml0ZSBBY2Nlc3MgcmVxdWlyZXMgTG9jYWwgV3JpdGUgQWNjZXNzCisJCSAqIFJlbW90ZSBBdG9taWMgQWNjZXNzIHJlcXVpcmVzIExvY2FsIFdyaXRlIEFjY2VzcworCQkgKi8KKwkJZWhjYV9lcnIobXItPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IG1yX3JlcmVnX21hc2s9JXggIgorCQkJICJtcl9hY2Nlc3NfZmxhZ3M9JXgiLCBtcl9yZXJlZ19tYXNrLCBtcl9hY2Nlc3NfZmxhZ3MpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIHJlcmVnX3BoeXNfbXJfZXhpdDA7CisJfQorCisJLyogc2V0IHJlcXVlc3RlZCB2YWx1ZXMgZGVwZW5kZW50IG9uIHJlcmVnIHJlcXVlc3QgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZV9tci0+bXJsb2NrLCBzbF9mbGFncyk7CisJbmV3X3N0YXJ0ID0gZV9tci0+c3RhcnQ7ICAvKiBuZXcgPT0gb2xkIGFkZHJlc3MgKi8KKwluZXdfc2l6ZSAgPSBlX21yLT5zaXplOwkgIC8qIG5ldyA9PSBvbGQgbGVuZ3RoICovCisJbmV3X2FjbCAgID0gZV9tci0+YWNsOwkgIC8qIG5ldyA9PSBvbGQgYWNjZXNzIGNvbnRyb2wgKi8KKwluZXdfcGQgICAgPSBjb250YWluZXJfb2YobXItPnBkLHN0cnVjdCBlaGNhX3BkLGliX3BkKTsgLypuZXcgPT0gb2xkIFBEKi8KKworCWlmIChtcl9yZXJlZ19tYXNrICYgSUJfTVJfUkVSRUdfVFJBTlMpIHsKKwkJbmV3X3N0YXJ0ID0gaW92YV9zdGFydDsJLyogY2hhbmdlIGFkZHJlc3MgKi8KKwkJLyogY2hlY2sgcGh5c2ljYWwgYnVmZmVyIGxpc3QgYW5kIGNhbGN1bGF0ZSBzaXplICovCisJCXJldCA9IGVoY2FfbXJfY2hrX2J1Zl9hbmRfY2FsY19zaXplKHBoeXNfYnVmX2FycmF5LAorCQkJCQkJICAgIG51bV9waHlzX2J1ZiwgaW92YV9zdGFydCwKKwkJCQkJCSAgICAmbmV3X3NpemUpOworCQlpZiAocmV0KQorCQkJZ290byByZXJlZ19waHlzX21yX2V4aXQxOworCQlpZiAoKG5ld19zaXplID09IDApIHx8CisJCSAgICAoKCh1NjQpaW92YV9zdGFydCArIG5ld19zaXplKSA8ICh1NjQpaW92YV9zdGFydCkpIHsKKwkJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJiYWQgaW5wdXQgdmFsdWVzOiBuZXdfc2l6ZT0lbHggIgorCQkJCSAiaW92YV9zdGFydD0lcCIsIG5ld19zaXplLCBpb3ZhX3N0YXJ0KTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHJlcmVnX3BoeXNfbXJfZXhpdDE7CisJCX0KKwkJbnVtX3BhZ2VzX21yID0gKCgoKHU2NCluZXdfc3RhcnQgJSBQQUdFX1NJWkUpICsgbmV3X3NpemUgKworCQkJCSBQQUdFX1NJWkUgLSAxKSAvIFBBR0VfU0laRSk7CisJCW51bV9wYWdlc180ayA9ICgoKCh1NjQpbmV3X3N0YXJ0ICUgRUhDQV9QQUdFU0laRSkgKyBuZXdfc2l6ZSArCisJCQkJIEVIQ0FfUEFHRVNJWkUgLSAxKSAvIEVIQ0FfUEFHRVNJWkUpOworCQlwZ2luZm8udHlwZSAgICAgICAgICAgPSBFSENBX01SX1BHSV9QSFlTOworCQlwZ2luZm8ubnVtX3BhZ2VzICAgICAgPSBudW1fcGFnZXNfbXI7CisJCXBnaW5mby5udW1fNGsgICAgICAgICA9IG51bV9wYWdlc180azsKKwkJcGdpbmZvLm51bV9waHlzX2J1ZiAgID0gbnVtX3BoeXNfYnVmOworCQlwZ2luZm8ucGh5c19idWZfYXJyYXkgPSBwaHlzX2J1Zl9hcnJheTsKKwkJcGdpbmZvLm5leHRfNGsgICAgICAgID0gKCgodTY0KWlvdmFfc3RhcnQgJiB+UEFHRV9NQVNLKSAvCisJCQkJCSBFSENBX1BBR0VTSVpFKTsKKwl9CisJaWYgKG1yX3JlcmVnX21hc2sgJiBJQl9NUl9SRVJFR19BQ0NFU1MpCisJCW5ld19hY2wgPSBtcl9hY2Nlc3NfZmxhZ3M7CisJaWYgKG1yX3JlcmVnX21hc2sgJiBJQl9NUl9SRVJFR19QRCkKKwkJbmV3X3BkID0gY29udGFpbmVyX29mKHBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCisJcmV0ID0gZWhjYV9yZXJlZ19tcihzaGNhLCBlX21yLCBuZXdfc3RhcnQsIG5ld19zaXplLCBuZXdfYWNsLAorCQkJICAgIG5ld19wZCwgJnBnaW5mbywgJnRtcF9sa2V5LCAmdG1wX3JrZXkpOworCWlmIChyZXQpCisJCWdvdG8gcmVyZWdfcGh5c19tcl9leGl0MTsKKworCS8qIHN1Y2Nlc3NmdWwgcmVyZWdpc3RyYXRpb24gKi8KKwlpZiAobXJfcmVyZWdfbWFzayAmIElCX01SX1JFUkVHX1BEKQorCQltci0+cGQgPSBwZDsKKwltci0+bGtleSA9IHRtcF9sa2V5OworCW1yLT5ya2V5ID0gdG1wX3JrZXk7CisKK3JlcmVnX3BoeXNfbXJfZXhpdDE6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZV9tci0+bXJsb2NrLCBzbF9mbGFncyk7CityZXJlZ19waHlzX21yX2V4aXQwOgorCWlmIChyZXQpCisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJyZXQ9JXggbXI9JXAgbXJfcmVyZWdfbWFzaz0leCBwZD0lcCAiCisJCQkgInBoeXNfYnVmX2FycmF5PSVwIG51bV9waHlzX2J1Zj0leCBtcl9hY2Nlc3NfZmxhZ3M9JXggIgorCQkJICJpb3ZhX3N0YXJ0PSVwIiwKKwkJCSByZXQsIG1yLCBtcl9yZXJlZ19tYXNrLCBwZCwgcGh5c19idWZfYXJyYXksCisJCQkgbnVtX3BoeXNfYnVmLCBtcl9hY2Nlc3NfZmxhZ3MsIGlvdmFfc3RhcnQpOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX3JlcmVnX3BoeXNfbXIoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgZWhjYV9xdWVyeV9tcihzdHJ1Y3QgaWJfbXIgKm1yLCBzdHJ1Y3QgaWJfbXJfYXR0ciAqbXJfYXR0cikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1NjQgaF9yZXQ7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CisJCWNvbnRhaW5lcl9vZihtci0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCXN0cnVjdCBlaGNhX21yICplX21yID0gY29udGFpbmVyX29mKG1yLCBzdHJ1Y3QgZWhjYV9tciwgaWIuaWJfbXIpOworCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihtci0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOworCXVuc2lnbmVkIGxvbmcgc2xfZmxhZ3M7CisJc3RydWN0IGVoY2FfbXJfaGlwem91dF9wYXJtcyBoaXB6b3V0ID0ge3swfSwwLDAsMCwwLDB9OworCisJaWYgKG15X3BkLT5pYl9wZC51b2JqZWN0ICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICYmCisJICAgIChteV9wZC0+b3ducGlkICE9IGN1cl9waWQpKSB7CisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKKwkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBxdWVyeV9tcl9leGl0MDsKKwl9CisKKwlpZiAoKGVfbXItPmZsYWdzICYgRUhDQV9NUl9GTEFHX0ZNUikpIHsKKwkJZWhjYV9lcnIobXItPmRldmljZSwgIm5vdCBzdXBwb3J0ZWQgZm9yIEZNUiwgbXI9JXAgZV9tcj0lcCAiCisJCQkgImVfbXItPmZsYWdzPSV4IiwgbXIsIGVfbXIsIGVfbXItPmZsYWdzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBxdWVyeV9tcl9leGl0MDsKKwl9CisKKwltZW1zZXQobXJfYXR0ciwgMCwgc2l6ZW9mKHN0cnVjdCBpYl9tcl9hdHRyKSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmVfbXItPm1ybG9jaywgc2xfZmxhZ3MpOworCisJaF9yZXQgPSBoaXB6X2hfcXVlcnlfbXIoc2hjYS0+aXB6X2hjYV9oYW5kbGUsIGVfbXIsICZoaXB6b3V0KTsKKwlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJoaXB6X21yX3F1ZXJ5IGZhaWxlZCwgaF9yZXQ9JWx4IG1yPSVwICIKKwkJCSAiaGNhX2huZGw9JWx4IG1yX2huZGw9JWx4IGxrZXk9JXgiLAorCQkJIGhfcmV0LCBtciwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLAorCQkJIGVfbXItPmlwel9tcl9oYW5kbGUuaGFuZGxlLCBtci0+bGtleSk7CisJCXJldCA9IGVoY2FfbXJtd19tYXBfaHJjX3F1ZXJ5X21yKGhfcmV0KTsKKwkJZ290byBxdWVyeV9tcl9leGl0MTsKKwl9CisJbXJfYXR0ci0+cGQgICAgICAgICAgICAgICA9IG1yLT5wZDsKKwltcl9hdHRyLT5kZXZpY2VfdmlydF9hZGRyID0gaGlwem91dC52YWRkcjsKKwltcl9hdHRyLT5zaXplICAgICAgICAgICAgID0gaGlwem91dC5sZW47CisJbXJfYXR0ci0+bGtleSAgICAgICAgICAgICA9IGhpcHpvdXQubGtleTsKKwltcl9hdHRyLT5ya2V5ICAgICAgICAgICAgID0gaGlwem91dC5ya2V5OworCWVoY2FfbXJtd19yZXZlcnNlX21hcF9hY2woJmhpcHpvdXQuYWNsLCAmbXJfYXR0ci0+bXJfYWNjZXNzX2ZsYWdzKTsKKworcXVlcnlfbXJfZXhpdDE6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZV9tci0+bXJsb2NrLCBzbF9mbGFncyk7CitxdWVyeV9tcl9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2Vycihtci0+ZGV2aWNlLCAicmV0PSV4IG1yPSVwIG1yX2F0dHI9JXAiLAorCQkJIHJldCwgbXIsIG1yX2F0dHIpOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX3F1ZXJ5X21yKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGVoY2FfZGVyZWdfbXIoc3RydWN0IGliX21yICptcikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1NjQgaF9yZXQ7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CisJCWNvbnRhaW5lcl9vZihtci0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCXN0cnVjdCBlaGNhX21yICplX21yID0gY29udGFpbmVyX29mKG1yLCBzdHJ1Y3QgZWhjYV9tciwgaWIuaWJfbXIpOworCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihtci0+cGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOworCisJaWYgKG15X3BkLT5pYl9wZC51b2JqZWN0ICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICYmCisJICAgIChteV9wZC0+b3ducGlkICE9IGN1cl9waWQpKSB7CisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKKwkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkZXJlZ19tcl9leGl0MDsKKwl9CisKKwlpZiAoKGVfbXItPmZsYWdzICYgRUhDQV9NUl9GTEFHX0ZNUikpIHsKKwkJZWhjYV9lcnIobXItPmRldmljZSwgIm5vdCBzdXBwb3J0ZWQgZm9yIEZNUiwgbXI9JXAgZV9tcj0lcCAiCisJCQkgImVfbXItPmZsYWdzPSV4IiwgbXIsIGVfbXIsIGVfbXItPmZsYWdzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkZXJlZ19tcl9leGl0MDsKKwl9IGVsc2UgaWYgKGVfbXIgPT0gc2hjYS0+bWF4bXIpIHsKKwkJLyogc2hvdWxkIGJlIGltcG9zc2libGUsIGhvd2V2ZXIgcmVqZWN0IHRvIGJlIHN1cmUgKi8KKwkJZWhjYV9lcnIobXItPmRldmljZSwgImRlcmVnIGludGVybmFsIG1heC1NUiBpbXBvc3NpYmxlLCBtcj0lcCAiCisJCQkgInNoY2EtPm1heG1yPSVwIG1yLT5sa2V5PSV4IiwKKwkJCSBtciwgc2hjYS0+bWF4bXIsIG1yLT5sa2V5KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBkZXJlZ19tcl9leGl0MDsKKwl9CisKKwkvKiBUT0RPOiBCVVNZOiBNUiBzdGlsbCBoYXMgYm91bmQgd2luZG93KHMpICovCisJaF9yZXQgPSBoaXB6X2hfZnJlZV9yZXNvdXJjZV9tcihzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9tcik7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycihtci0+ZGV2aWNlLCAiaGlwel9mcmVlX21yIGZhaWxlZCwgaF9yZXQ9JWx4IHNoY2E9JXAgIgorCQkJICJlX21yPSVwIGhjYV9obmRsPSVseCBtcl9obmRsPSVseCBtci0+bGtleT0leCIsCisJCQkgaF9yZXQsIHNoY2EsIGVfbXIsIHNoY2EtPmlwel9oY2FfaGFuZGxlLmhhbmRsZSwKKwkJCSBlX21yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwgbXItPmxrZXkpOworCQlyZXQgPSBlaGNhX21ybXdfbWFwX2hyY19mcmVlX21yKGhfcmV0KTsKKwkJZ290byBkZXJlZ19tcl9leGl0MDsKKwl9CisKKwkvKiBzdWNjZXNzZnVsIGRlcmVnaXN0cmF0aW9uICovCisJZWhjYV9tcl9kZWxldGUoZV9tcik7CisKK2RlcmVnX21yX2V4aXQwOgorCWlmIChyZXQpCisJCWVoY2FfZXJyKG1yLT5kZXZpY2UsICJyZXQ9JXggbXI9JXAiLCByZXQsIG1yKTsKKwlyZXR1cm4gcmV0OworfSAvKiBlbmQgZWhjYV9kZXJlZ19tcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0cnVjdCBpYl9tdyAqZWhjYV9hbGxvY19tdyhzdHJ1Y3QgaWJfcGQgKnBkKQoreworCXN0cnVjdCBpYl9tdyAqaWJfbXc7CisJdTY0IGhfcmV0OworCXN0cnVjdCBlaGNhX213ICplX213OworCXN0cnVjdCBlaGNhX3BkICplX3BkID0gY29udGFpbmVyX29mKHBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPQorCQljb250YWluZXJfb2YocGQtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgZWhjYV9td19oaXB6b3V0X3Bhcm1zIGhpcHpvdXQgPSB7ezB9LDB9OworCisJZV9tdyA9IGVoY2FfbXdfbmV3KCk7CisJaWYgKCFlX213KSB7CisJCWliX213ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBhbGxvY19td19leGl0MDsKKwl9CisKKwloX3JldCA9IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9tdyhzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9tdywKKwkJCQkJIGVfcGQtPmZ3X3BkLCAmaGlwem91dCk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiaGlwel9td19hbGxvY2F0ZSBmYWlsZWQsIGhfcmV0PSVseCAiCisJCQkgInNoY2E9JXAgaGNhX2huZGw9JWx4IG13PSVwIiwKKwkJCSBoX3JldCwgc2hjYSwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLCBlX213KTsKKwkJaWJfbXcgPSBFUlJfUFRSKGVoY2FfbXJtd19tYXBfaHJjX2FsbG9jKGhfcmV0KSk7CisJCWdvdG8gYWxsb2NfbXdfZXhpdDE7CisJfQorCS8qIHN1Y2Nlc3NmdWwgTVcgYWxsb2NhdGlvbiAqLworCWVfbXctPmlwel9td19oYW5kbGUgPSBoaXB6b3V0LmhhbmRsZTsKKwllX213LT5pYl9tdy5ya2V5ICAgID0gaGlwem91dC5ya2V5OworCXJldHVybiAmZV9tdy0+aWJfbXc7CisKK2FsbG9jX213X2V4aXQxOgorCWVoY2FfbXdfZGVsZXRlKGVfbXcpOworYWxsb2NfbXdfZXhpdDA6CisJaWYgKElTX0VSUihpYl9tdykpCisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJyYz0lbHggcGQ9JXAiLCBQVFJfRVJSKGliX213KSwgcGQpOworCXJldHVybiBpYl9tdzsKK30gLyogZW5kIGVoY2FfYWxsb2NfbXcoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgZWhjYV9iaW5kX213KHN0cnVjdCBpYl9xcCAqcXAsCisJCSBzdHJ1Y3QgaWJfbXcgKm13LAorCQkgc3RydWN0IGliX213X2JpbmQgKm13X2JpbmQpCit7CisJLyogVE9ETzogbm90IHN1cHBvcnRlZCB1cCB0byBub3cgKi8KKwllaGNhX2dlbl9lcnIoImJpbmQgTVcgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQgYnkgSENBRCIpOworCisJcmV0dXJuIC1FUEVSTTsKK30gLyogZW5kIGVoY2FfYmluZF9tdygpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX2RlYWxsb2NfbXcoc3RydWN0IGliX213ICptdykKK3sKKwl1NjQgaF9yZXQ7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CisJCWNvbnRhaW5lcl9vZihtdy0+ZGV2aWNlLCBzdHJ1Y3QgZWhjYV9zaGNhLCBpYl9kZXZpY2UpOworCXN0cnVjdCBlaGNhX213ICplX213ID0gY29udGFpbmVyX29mKG13LCBzdHJ1Y3QgZWhjYV9tdywgaWJfbXcpOworCisJaF9yZXQgPSBoaXB6X2hfZnJlZV9yZXNvdXJjZV9tdyhzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9tdyk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycihtdy0+ZGV2aWNlLCAiaGlwel9mcmVlX213IGZhaWxlZCwgaF9yZXQ9JWx4IHNoY2E9JXAgIgorCQkJICJtdz0lcCBya2V5PSV4IGhjYV9obmRsPSVseCBtd19obmRsPSVseCIsCisJCQkgaF9yZXQsIHNoY2EsIG13LCBtdy0+cmtleSwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLAorCQkJIGVfbXctPmlwel9td19oYW5kbGUuaGFuZGxlKTsKKwkJcmV0dXJuIGVoY2FfbXJtd19tYXBfaHJjX2ZyZWVfbXcoaF9yZXQpOworCX0KKwkvKiBzdWNjZXNzZnVsIGRlYWxsb2NhdGlvbiAqLworCWVoY2FfbXdfZGVsZXRlKGVfbXcpOworCXJldHVybiAwOworfSAvKiBlbmQgZWhjYV9kZWFsbG9jX213KCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RydWN0IGliX2ZtciAqZWhjYV9hbGxvY19mbXIoc3RydWN0IGliX3BkICpwZCwKKwkJCSAgICAgIGludCBtcl9hY2Nlc3NfZmxhZ3MsCisJCQkgICAgICBzdHJ1Y3QgaWJfZm1yX2F0dHIgKmZtcl9hdHRyKQoreworCXN0cnVjdCBpYl9mbXIgKmliX2ZtcjsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0KKwkJY29udGFpbmVyX29mKHBkLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsIGliX2RldmljZSk7CisJc3RydWN0IGVoY2FfcGQgKmVfcGQgPSBjb250YWluZXJfb2YocGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisJc3RydWN0IGVoY2FfbXIgKmVfZm1yOworCWludCByZXQ7CisJdTMyIHRtcF9sa2V5LCB0bXBfcmtleTsKKwlzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gcGdpbmZvPXswLDAsMCwwLDAsMCwwLE5VTEwsMCxOVUxMLE5VTEwsMCxOVUxMLDB9OworCisJLyogY2hlY2sgb3RoZXIgcGFyYW1ldGVycyAqLworCWlmICgoKG1yX2FjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpICYmCisJICAgICAhKG1yX2FjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19MT0NBTF9XUklURSkpIHx8CisJICAgICgobXJfYWNjZXNzX2ZsYWdzICYgSUJfQUNDRVNTX1JFTU9URV9BVE9NSUMpICYmCisJICAgICAhKG1yX2FjY2Vzc19mbGFncyAmIElCX0FDQ0VTU19MT0NBTF9XUklURSkpKSB7CisJCS8qCisJCSAqIFJlbW90ZSBXcml0ZSBBY2Nlc3MgcmVxdWlyZXMgTG9jYWwgV3JpdGUgQWNjZXNzCisJCSAqIFJlbW90ZSBBdG9taWMgQWNjZXNzIHJlcXVpcmVzIExvY2FsIFdyaXRlIEFjY2VzcworCQkgKi8KKwkJZWhjYV9lcnIocGQtPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IG1yX2FjY2Vzc19mbGFncz0leCIsCisJCQkgbXJfYWNjZXNzX2ZsYWdzKTsKKwkJaWJfZm1yID0gRVJSX1BUUigtRUlOVkFMKTsKKwkJZ290byBhbGxvY19mbXJfZXhpdDA7CisJfQorCWlmIChtcl9hY2Nlc3NfZmxhZ3MgJiBJQl9BQ0NFU1NfTVdfQklORCkgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiYmFkIGlucHV0IHZhbHVlczogbXJfYWNjZXNzX2ZsYWdzPSV4IiwKKwkJCSBtcl9hY2Nlc3NfZmxhZ3MpOworCQlpYl9mbXIgPSBFUlJfUFRSKC1FSU5WQUwpOworCQlnb3RvIGFsbG9jX2Ztcl9leGl0MDsKKwl9CisJaWYgKChmbXJfYXR0ci0+bWF4X3BhZ2VzID09IDApIHx8IChmbXJfYXR0ci0+bWF4X21hcHMgPT0gMCkpIHsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgImJhZCBpbnB1dCB2YWx1ZXM6IGZtcl9hdHRyLT5tYXhfcGFnZXM9JXggIgorCQkJICJmbXJfYXR0ci0+bWF4X21hcHM9JXggZm1yX2F0dHItPnBhZ2Vfc2hpZnQ9JXgiLAorCQkJIGZtcl9hdHRyLT5tYXhfcGFnZXMsIGZtcl9hdHRyLT5tYXhfbWFwcywKKwkJCSBmbXJfYXR0ci0+cGFnZV9zaGlmdCk7CisJCWliX2ZtciA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gYWxsb2NfZm1yX2V4aXQwOworCX0KKwlpZiAoKCgxIDw8IGZtcl9hdHRyLT5wYWdlX3NoaWZ0KSAhPSBFSENBX1BBR0VTSVpFKSAmJgorCSAgICAoKDEgPDwgZm1yX2F0dHItPnBhZ2Vfc2hpZnQpICE9IFBBR0VfU0laRSkpIHsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgInVuc3VwcG9ydGVkIGZtcl9hdHRyLT5wYWdlX3NoaWZ0PSV4IiwKKwkJCSBmbXJfYXR0ci0+cGFnZV9zaGlmdCk7CisJCWliX2ZtciA9IEVSUl9QVFIoLUVJTlZBTCk7CisJCWdvdG8gYWxsb2NfZm1yX2V4aXQwOworCX0KKworCWVfZm1yID0gZWhjYV9tcl9uZXcoKTsKKwlpZiAoIWVfZm1yKSB7CisJCWliX2ZtciA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYWxsb2NfZm1yX2V4aXQwOworCX0KKwllX2Ztci0+ZmxhZ3MgfD0gRUhDQV9NUl9GTEFHX0ZNUjsKKworCS8qIHJlZ2lzdGVyIE1SIG9uIEhDQSAqLworCXJldCA9IGVoY2FfcmVnX21yKHNoY2EsIGVfZm1yLCBOVUxMLAorCQkJICBmbXJfYXR0ci0+bWF4X3BhZ2VzICogKDEgPDwgZm1yX2F0dHItPnBhZ2Vfc2hpZnQpLAorCQkJICBtcl9hY2Nlc3NfZmxhZ3MsIGVfcGQsICZwZ2luZm8sCisJCQkgICZ0bXBfbGtleSwgJnRtcF9ya2V5KTsKKwlpZiAocmV0KSB7CisJCWliX2ZtciA9IEVSUl9QVFIocmV0KTsKKwkJZ290byBhbGxvY19mbXJfZXhpdDE7CisJfQorCisJLyogc3VjY2Vzc2Z1bCAqLworCWVfZm1yLT5mbXJfcGFnZV9zaXplID0gMSA8PCBmbXJfYXR0ci0+cGFnZV9zaGlmdDsKKwllX2Ztci0+Zm1yX21heF9wYWdlcyA9IGZtcl9hdHRyLT5tYXhfcGFnZXM7CisJZV9mbXItPmZtcl9tYXhfbWFwcyA9IGZtcl9hdHRyLT5tYXhfbWFwczsKKwllX2Ztci0+Zm1yX21hcF9jbnQgPSAwOworCXJldHVybiAmZV9mbXItPmliLmliX2ZtcjsKKworYWxsb2NfZm1yX2V4aXQxOgorCWVoY2FfbXJfZGVsZXRlKGVfZm1yKTsKK2FsbG9jX2Ztcl9leGl0MDoKKwlpZiAoSVNfRVJSKGliX2ZtcikpCisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJyYz0lbHggcGQ9JXAgbXJfYWNjZXNzX2ZsYWdzPSV4ICIKKwkJCSAiZm1yX2F0dHI9JXAiLCBQVFJfRVJSKGliX2ZtciksIHBkLAorCQkJIG1yX2FjY2Vzc19mbGFncywgZm1yX2F0dHIpOworCXJldHVybiBpYl9mbXI7Cit9IC8qIGVuZCBlaGNhX2FsbG9jX2ZtcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX21hcF9waHlzX2ZtcihzdHJ1Y3QgaWJfZm1yICpmbXIsCisJCSAgICAgIHU2NCAqcGFnZV9saXN0LAorCQkgICAgICBpbnQgbGlzdF9sZW4sCisJCSAgICAgIHU2NCBpb3ZhKQoreworCWludCByZXQ7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9CisJCWNvbnRhaW5lcl9vZihmbXItPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgZWhjYV9tciAqZV9mbXIgPSBjb250YWluZXJfb2YoZm1yLCBzdHJ1Y3QgZWhjYV9tciwgaWIuaWJfZm1yKTsKKwlzdHJ1Y3QgZWhjYV9wZCAqZV9wZCA9IGNvbnRhaW5lcl9vZihmbXItPnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCXN0cnVjdCBlaGNhX21yX3BnaW5mbyBwZ2luZm89ezAsMCwwLDAsMCwwLDAsTlVMTCwwLE5VTEwsTlVMTCwwLE5VTEwsMH07CisJdTMyIHRtcF9sa2V5LCB0bXBfcmtleTsKKworCWlmICghKGVfZm1yLT5mbGFncyAmIEVIQ0FfTVJfRkxBR19GTVIpKSB7CisJCWVoY2FfZXJyKGZtci0+ZGV2aWNlLCAibm90IGEgRk1SLCBlX2Ztcj0lcCBlX2Ztci0+ZmxhZ3M9JXgiLAorCQkJIGVfZm1yLCBlX2Ztci0+ZmxhZ3MpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG1hcF9waHlzX2Ztcl9leGl0MDsKKwl9CisJcmV0ID0gZWhjYV9mbXJfY2hlY2tfcGFnZV9saXN0KGVfZm1yLCBwYWdlX2xpc3QsIGxpc3RfbGVuKTsKKwlpZiAocmV0KQorCQlnb3RvIG1hcF9waHlzX2Ztcl9leGl0MDsKKwlpZiAoaW92YSAlIGVfZm1yLT5mbXJfcGFnZV9zaXplKSB7CisJCS8qIG9ubHkgd2hvbGUtbnVtYmVyZWQgcGFnZXMgKi8KKwkJZWhjYV9lcnIoZm1yLT5kZXZpY2UsICJiYWQgaW92YSwgaW92YT0lbHggZm1yX3BhZ2Vfc2l6ZT0leCIsCisJCQkgaW92YSwgZV9mbXItPmZtcl9wYWdlX3NpemUpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG1hcF9waHlzX2Ztcl9leGl0MDsKKwl9CisJaWYgKGVfZm1yLT5mbXJfbWFwX2NudCA+PSBlX2Ztci0+Zm1yX21heF9tYXBzKSB7CisJCS8qIEhDQUQgZG9lcyBub3QgbGltaXQgdGhlIG1hcHMsIGhvd2V2ZXIgdHJhY2UgdGhpcyBhbnl3YXkgKi8KKwkJZWhjYV9pbmZvKGZtci0+ZGV2aWNlLCAibWFwIGxpbWl0IGV4Y2VlZGVkLCBmbXI9JXAgIgorCQkJICAiZV9mbXItPmZtcl9tYXBfY250PSV4IGVfZm1yLT5mbXJfbWF4X21hcHM9JXgiLAorCQkJICBmbXIsIGVfZm1yLT5mbXJfbWFwX2NudCwgZV9mbXItPmZtcl9tYXhfbWFwcyk7CisJfQorCisJcGdpbmZvLnR5cGUgICAgICA9IEVIQ0FfTVJfUEdJX0ZNUjsKKwlwZ2luZm8ubnVtX3BhZ2VzID0gbGlzdF9sZW47CisJcGdpbmZvLm51bV80ayAgICA9IGxpc3RfbGVuICogKGVfZm1yLT5mbXJfcGFnZV9zaXplIC8gRUhDQV9QQUdFU0laRSk7CisJcGdpbmZvLnBhZ2VfbGlzdCA9IHBhZ2VfbGlzdDsKKwlwZ2luZm8ubmV4dF80ayAgID0gKChpb3ZhICYgKGVfZm1yLT5mbXJfcGFnZV9zaXplLTEpKSAvCisJCQkgICAgRUhDQV9QQUdFU0laRSk7CisKKwlyZXQgPSBlaGNhX3JlcmVnX21yKHNoY2EsIGVfZm1yLCAodTY0Kilpb3ZhLAorCQkJICAgIGxpc3RfbGVuICogZV9mbXItPmZtcl9wYWdlX3NpemUsCisJCQkgICAgZV9mbXItPmFjbCwgZV9wZCwgJnBnaW5mbywgJnRtcF9sa2V5LCAmdG1wX3JrZXkpOworCWlmIChyZXQpCisJCWdvdG8gbWFwX3BoeXNfZm1yX2V4aXQwOworCisJLyogc3VjY2Vzc2Z1bCByZXJlZ2lzdHJhdGlvbiAqLworCWVfZm1yLT5mbXJfbWFwX2NudCsrOworCWVfZm1yLT5pYi5pYl9mbXIubGtleSA9IHRtcF9sa2V5OworCWVfZm1yLT5pYi5pYl9mbXIucmtleSA9IHRtcF9ya2V5OworCXJldHVybiAwOworCittYXBfcGh5c19mbXJfZXhpdDA6CisJaWYgKHJldCkKKwkJZWhjYV9lcnIoZm1yLT5kZXZpY2UsICJyZXQ9JXggZm1yPSVwIHBhZ2VfbGlzdD0lcCBsaXN0X2xlbj0leCAiCisJCQkgImlvdmE9JWx4IiwKKwkJCSByZXQsIGZtciwgcGFnZV9saXN0LCBsaXN0X2xlbiwgaW92YSk7CisJcmV0dXJuIHJldDsKK30gLyogZW5kIGVoY2FfbWFwX3BoeXNfZm1yKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGVoY2FfdW5tYXBfZm1yKHN0cnVjdCBsaXN0X2hlYWQgKmZtcl9saXN0KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpYl9mbXIgKmliX2ZtcjsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhID0gTlVMTDsKKwlzdHJ1Y3QgZWhjYV9zaGNhICpwcmV2X3NoY2E7CisJc3RydWN0IGVoY2FfbXIgKmVfZm1yOworCXUzMiBudW1fZm1yID0gMDsKKwl1MzIgdW5tYXBfZm1yX2NudCA9IDA7CisKKwkvKiBjaGVjayBhbGwgRk1SIGJlbG9uZyB0byBzYW1lIFNIQ0EsIGFuZCBjaGVjayBpbnRlcm5hbCBmbGFnICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShpYl9mbXIsIGZtcl9saXN0LCBsaXN0KSB7CisJCXByZXZfc2hjYSA9IHNoY2E7CisJCWlmICghaWJfZm1yKSB7CisJCQllaGNhX2dlbl9lcnIoImJhZCBmbXI9JXAgaW4gbGlzdCIsIGliX2Ztcik7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bm1hcF9mbXJfZXhpdDA7CisJCX0KKwkJc2hjYSA9IGNvbnRhaW5lcl9vZihpYl9mbXItPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKKwkJCQkgICAgaWJfZGV2aWNlKTsKKwkJZV9mbXIgPSBjb250YWluZXJfb2YoaWJfZm1yLCBzdHJ1Y3QgZWhjYV9tciwgaWIuaWJfZm1yKTsKKwkJaWYgKChzaGNhICE9IHByZXZfc2hjYSkgJiYgcHJldl9zaGNhKSB7CisJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiU0hDQSBtaXNtYXRjaCwgc2hjYT0lcCAiCisJCQkJICJwcmV2X3NoY2E9JXAgZV9mbXI9JXAiLAorCQkJCSBzaGNhLCBwcmV2X3NoY2EsIGVfZm1yKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIHVubWFwX2Ztcl9leGl0MDsKKwkJfQorCQlpZiAoIShlX2Ztci0+ZmxhZ3MgJiBFSENBX01SX0ZMQUdfRk1SKSkgeworCQkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIm5vdCBhIEZNUiwgZV9mbXI9JXAgIgorCQkJCSAiZV9mbXItPmZsYWdzPSV4IiwgZV9mbXIsIGVfZm1yLT5mbGFncyk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byB1bm1hcF9mbXJfZXhpdDA7CisJCX0KKwkJbnVtX2ZtcisrOworCX0KKworCS8qIGxvb3Agb3ZlciBhbGwgRk1ScyB0byB1bm1hcCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoaWJfZm1yLCBmbXJfbGlzdCwgbGlzdCkgeworCQl1bm1hcF9mbXJfY250Kys7CisJCWVfZm1yID0gY29udGFpbmVyX29mKGliX2Ztciwgc3RydWN0IGVoY2FfbXIsIGliLmliX2Ztcik7CisJCXNoY2EgPSBjb250YWluZXJfb2YoaWJfZm1yLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsCisJCQkJICAgIGliX2RldmljZSk7CisJCXJldCA9IGVoY2FfdW5tYXBfb25lX2ZtcihzaGNhLCBlX2Ztcik7CisJCWlmIChyZXQpIHsKKwkJCS8qIHVubWFwIGZhaWxlZCwgc3RvcCB1bm1hcHBpbmcgb2YgcmVzdCBvZiBGTVJzICovCisJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAidW5tYXAgb2Ygb25lIEZNUiBmYWlsZWQsICIKKwkJCQkgInN0b3AgcmVzdCwgZV9mbXI9JXAgbnVtX2Ztcj0leCAiCisJCQkJICJ1bm1hcF9mbXJfY250PSV4IGxrZXk9JXgiLCBlX2ZtciwgbnVtX2ZtciwKKwkJCQkgdW5tYXBfZm1yX2NudCwgZV9mbXItPmliLmliX2Ztci5sa2V5KTsKKwkJCWdvdG8gdW5tYXBfZm1yX2V4aXQwOworCQl9CisJfQorCit1bm1hcF9mbXJfZXhpdDA6CisJaWYgKHJldCkKKwkJZWhjYV9nZW5fZXJyKCJyZXQ9JXggZm1yX2xpc3Q9JXAgbnVtX2Ztcj0leCB1bm1hcF9mbXJfY250PSV4IiwKKwkJCSAgICAgcmV0LCBmbXJfbGlzdCwgbnVtX2ZtciwgdW5tYXBfZm1yX2NudCk7CisJcmV0dXJuIHJldDsKK30gLyogZW5kIGVoY2FfdW5tYXBfZm1yKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworaW50IGVoY2FfZGVhbGxvY19mbXIoc3RydWN0IGliX2ZtciAqZm1yKQoreworCWludCByZXQ7CisJdTY0IGhfcmV0OworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPQorCQljb250YWluZXJfb2YoZm1yLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsIGliX2RldmljZSk7CisJc3RydWN0IGVoY2FfbXIgKmVfZm1yID0gY29udGFpbmVyX29mKGZtciwgc3RydWN0IGVoY2FfbXIsIGliLmliX2Ztcik7CisKKwlpZiAoIShlX2Ztci0+ZmxhZ3MgJiBFSENBX01SX0ZMQUdfRk1SKSkgeworCQllaGNhX2VycihmbXItPmRldmljZSwgIm5vdCBhIEZNUiwgZV9mbXI9JXAgZV9mbXItPmZsYWdzPSV4IiwKKwkJCSBlX2ZtciwgZV9mbXItPmZsYWdzKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBmcmVlX2Ztcl9leGl0MDsKKwl9CisKKwloX3JldCA9IGhpcHpfaF9mcmVlX3Jlc291cmNlX21yKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBlX2Ztcik7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2VycihmbXItPmRldmljZSwgImhpcHpfZnJlZV9tciBmYWlsZWQsIGhfcmV0PSVseCBlX2Ztcj0lcCAiCisJCQkgImhjYV9obmRsPSVseCBmbXJfaG5kbD0lbHggZm1yLT5sa2V5PSV4IiwKKwkJCSBoX3JldCwgZV9mbXIsIHNoY2EtPmlwel9oY2FfaGFuZGxlLmhhbmRsZSwKKwkJCSBlX2Ztci0+aXB6X21yX2hhbmRsZS5oYW5kbGUsIGZtci0+bGtleSk7CisJCXJldCA9IGVoY2FfbXJtd19tYXBfaHJjX2ZyZWVfbXIoaF9yZXQpOworCQlnb3RvIGZyZWVfZm1yX2V4aXQwOworCX0KKwkvKiBzdWNjZXNzZnVsIGRlcmVnaXN0cmF0aW9uICovCisJZWhjYV9tcl9kZWxldGUoZV9mbXIpOworCXJldHVybiAwOworCitmcmVlX2Ztcl9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmV0PSV4IGZtcj0lcCIsIHJldCwgZm1yKTsKKwlyZXR1cm4gcmV0OworfSAvKiBlbmQgZWhjYV9kZWFsbG9jX2ZtcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX3JlZ19tcihzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQlzdHJ1Y3QgZWhjYV9tciAqZV9tciwKKwkJdTY0ICppb3ZhX3N0YXJ0LAorCQl1NjQgc2l6ZSwKKwkJaW50IGFjbCwKKwkJc3RydWN0IGVoY2FfcGQgKmVfcGQsCisJCXN0cnVjdCBlaGNhX21yX3BnaW5mbyAqcGdpbmZvLAorCQl1MzIgKmxrZXksIC8qT1VUKi8KKwkJdTMyICpya2V5KSAvKk9VVCovCit7CisJaW50IHJldDsKKwl1NjQgaF9yZXQ7CisJdTMyIGhpcHpfYWNsOworCXN0cnVjdCBlaGNhX21yX2hpcHpvdXRfcGFybXMgaGlwem91dCA9IHt7MH0sMCwwLDAsMCwwfTsKKworCWVoY2FfbXJtd19tYXBfYWNsKGFjbCwgJmhpcHpfYWNsKTsKKwllaGNhX21ybXdfc2V0X3Bnc2l6ZV9oaXB6X2FjbCgmaGlwel9hY2wpOworCWlmIChlaGNhX3VzZV9ocF9tciA9PSAxKQorCSAgICAgICAgaGlwel9hY2wgfD0gMHgwMDAwMDAwMTsKKworCWhfcmV0ID0gaGlwel9oX2FsbG9jX3Jlc291cmNlX21yKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBlX21yLAorCQkJCQkgKHU2NClpb3ZhX3N0YXJ0LCBzaXplLCBoaXB6X2FjbCwKKwkJCQkJIGVfcGQtPmZ3X3BkLCAmaGlwem91dCk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9hbGxvY19tciBmYWlsZWQsIGhfcmV0PSVseCAiCisJCQkgImhjYV9obmRsPSVseCIsIGhfcmV0LCBzaGNhLT5pcHpfaGNhX2hhbmRsZS5oYW5kbGUpOworCQlyZXQgPSBlaGNhX21ybXdfbWFwX2hyY19hbGxvYyhoX3JldCk7CisJCWdvdG8gZWhjYV9yZWdfbXJfZXhpdDA7CisJfQorCisJZV9tci0+aXB6X21yX2hhbmRsZSA9IGhpcHpvdXQuaGFuZGxlOworCisJcmV0ID0gZWhjYV9yZWdfbXJfcnBhZ2VzKHNoY2EsIGVfbXIsIHBnaW5mbyk7CisJaWYgKHJldCkKKwkJZ290byBlaGNhX3JlZ19tcl9leGl0MTsKKworCS8qIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uICovCisJZV9tci0+bnVtX3BhZ2VzID0gcGdpbmZvLT5udW1fcGFnZXM7CisJZV9tci0+bnVtXzRrICAgID0gcGdpbmZvLT5udW1fNGs7CisJZV9tci0+c3RhcnQgICAgID0gaW92YV9zdGFydDsKKwllX21yLT5zaXplICAgICAgPSBzaXplOworCWVfbXItPmFjbCAgICAgICA9IGFjbDsKKwkqbGtleSA9IGhpcHpvdXQubGtleTsKKwkqcmtleSA9IGhpcHpvdXQucmtleTsKKwlyZXR1cm4gMDsKKworZWhjYV9yZWdfbXJfZXhpdDE6CisJaF9yZXQgPSBoaXB6X2hfZnJlZV9yZXNvdXJjZV9tcihzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9tcik7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaF9yZXQ9JWx4IHNoY2E9JXAgZV9tcj0lcCAiCisJCQkgImlvdmFfc3RhcnQ9JXAgc2l6ZT0lbHggYWNsPSV4IGVfcGQ9JXAgbGtleT0leCAiCisJCQkgInBnaW5mbz0lcCBudW1fcGFnZXM9JWx4IG51bV80az0lbHggcmV0PSV4IiwKKwkJCSBoX3JldCwgc2hjYSwgZV9tciwgaW92YV9zdGFydCwgc2l6ZSwgYWNsLCBlX3BkLAorCQkJIGhpcHpvdXQubGtleSwgcGdpbmZvLCBwZ2luZm8tPm51bV9wYWdlcywKKwkJCSBwZ2luZm8tPm51bV80aywgcmV0KTsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImludGVybmFsIGVycm9yIGluIGVoY2FfcmVnX21yLCAiCisJCQkgIm5vdCByZWNvdmVyYWJsZSIpOworCX0KK2VoY2FfcmVnX21yX2V4aXQwOgorCWlmIChyZXQpCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJyZXQ9JXggc2hjYT0lcCBlX21yPSVwICIKKwkJCSAiaW92YV9zdGFydD0lcCBzaXplPSVseCBhY2w9JXggZV9wZD0lcCBwZ2luZm89JXAgIgorCQkJICJudW1fcGFnZXM9JWx4IG51bV80az0lbHgiLAorCQkJIHJldCwgc2hjYSwgZV9tciwgaW92YV9zdGFydCwgc2l6ZSwgYWNsLCBlX3BkLCBwZ2luZm8sCisJCQkgcGdpbmZvLT5udW1fcGFnZXMsIHBnaW5mby0+bnVtXzRrKTsKKwlyZXR1cm4gcmV0OworfSAvKiBlbmQgZWhjYV9yZWdfbXIoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgZWhjYV9yZWdfbXJfcnBhZ2VzKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCSAgICAgICBzdHJ1Y3QgZWhjYV9tciAqZV9tciwKKwkJICAgICAgIHN0cnVjdCBlaGNhX21yX3BnaW5mbyAqcGdpbmZvKQoreworCWludCByZXQgPSAwOworCXU2NCBoX3JldDsKKwl1MzIgcm51bTsKKwl1NjQgcnBhZ2U7CisJdTMyIGk7CisJdTY0ICprcGFnZTsKKworCWtwYWdlID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrcGFnZSkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAia3BhZ2UgYWxsb2MgZmFpbGVkIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZWhjYV9yZWdfbXJfcnBhZ2VzX2V4aXQwOworCX0KKworCS8qIG1heCA1MTIgcGFnZXMgcGVyIHNob3QgKi8KKwlmb3IgKGkgPSAwOyBpIDwgKChwZ2luZm8tPm51bV80ayArIDUxMiAtIDEpIC8gNTEyKTsgaSsrKSB7CisKKwkJaWYgKGkgPT0gKChwZ2luZm8tPm51bV80ayArIDUxMiAtIDEpIC8gNTEyKSAtIDEpIHsKKwkJCXJudW0gPSBwZ2luZm8tPm51bV80ayAlIDUxMjsgLyogbGFzdCBzaG90ICovCisJCQlpZiAocm51bSA9PSAwKQorCQkJCXJudW0gPSA1MTI7ICAgICAgLyogbGFzdCBzaG90IGlzIGZ1bGwgKi8KKwkJfSBlbHNlCisJCQlybnVtID0gNTEyOworCisJCWlmIChybnVtID4gMSkgeworCQkJcmV0ID0gZWhjYV9zZXRfcGFnZWJ1ZihlX21yLCBwZ2luZm8sIHJudW0sIGtwYWdlKTsKKwkJCWlmIChyZXQpIHsKKwkJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiZWhjYV9zZXRfcGFnZWJ1ZiAiCisJCQkJCSAiYmFkIHJjLCByZXQ9JXggcm51bT0leCBrcGFnZT0lcCIsCisJCQkJCSByZXQsIHJudW0sIGtwYWdlKTsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZWhjYV9yZWdfbXJfcnBhZ2VzX2V4aXQxOworCQkJfQorCQkJcnBhZ2UgPSB2aXJ0X3RvX2FicyhrcGFnZSk7CisJCQlpZiAoIXJwYWdlKSB7CisJCQkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImtwYWdlPSVwIGk9JXgiLAorCQkJCQkga3BhZ2UsIGkpOworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBlaGNhX3JlZ19tcl9ycGFnZXNfZXhpdDE7CisJCQl9CisJCX0gZWxzZSB7ICAvKiBybnVtPT0xICovCisJCQlyZXQgPSBlaGNhX3NldF9wYWdlYnVmXzEoZV9tciwgcGdpbmZvLCAmcnBhZ2UpOworCQkJaWYgKHJldCkgeworCQkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJlaGNhX3NldF9wYWdlYnVmXzEgIgorCQkJCQkgImJhZCByYywgcmV0PSV4IGk9JXgiLCByZXQsIGkpOworCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJZ290byBlaGNhX3JlZ19tcl9ycGFnZXNfZXhpdDE7CisJCQl9CisJCX0KKworCQloX3JldCA9IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9tcihzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9tciwKKwkJCQkJCSAwLCAvKiBwYWdlc2l6ZSA0ayAqLworCQkJCQkJIDAsIHJwYWdlLCBybnVtKTsKKworCQlpZiAoaSA9PSAoKHBnaW5mby0+bnVtXzRrICsgNTEyIC0gMSkgLyA1MTIpIC0gMSkgeworCQkJLyoKKwkJCSAqIGNoZWNrIGZvciAncmVnaXN0cmF0aW9uIGNvbXBsZXRlJz09SF9TVUNDRVNTCisJCQkgKiBhbmQgZm9yICdwYWdlIHJlZ2lzdGVyZWQnPT1IX1BBR0VfUkVHSVNURVJFRAorCQkJICovCisJCQlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKSB7CisJCQkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImxhc3QgIgorCQkJCQkgImhpcHpfcmVnX3JwYWdlX21yIGZhaWxlZCwgaF9yZXQ9JWx4ICIKKwkJCQkJICJlX21yPSVwIGk9JXggaGNhX2huZGw9JWx4IG1yX2huZGw9JWx4IgorCQkJCQkgIiBsa2V5PSV4IiwgaF9yZXQsIGVfbXIsIGksCisJCQkJCSBzaGNhLT5pcHpfaGNhX2hhbmRsZS5oYW5kbGUsCisJCQkJCSBlX21yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwKKwkJCQkJIGVfbXItPmliLmliX21yLmxrZXkpOworCQkJCXJldCA9IGVoY2FfbXJtd19tYXBfaHJjX3JycGdfbGFzdChoX3JldCk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlyZXQgPSAwOworCQl9IGVsc2UgaWYgKGhfcmV0ICE9IEhfUEFHRV9SRUdJU1RFUkVEKSB7CisJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9yZWdfcnBhZ2VfbXIgZmFpbGVkLCAiCisJCQkJICJoX3JldD0lbHggZV9tcj0lcCBpPSV4IGxrZXk9JXggaGNhX2huZGw9JWx4ICIKKwkJCQkgIm1yX2huZGw9JWx4IiwgaF9yZXQsIGVfbXIsIGksCisJCQkJIGVfbXItPmliLmliX21yLmxrZXksCisJCQkJIHNoY2EtPmlwel9oY2FfaGFuZGxlLmhhbmRsZSwKKwkJCQkgZV9tci0+aXB6X21yX2hhbmRsZS5oYW5kbGUpOworCQkJcmV0ID0gZWhjYV9tcm13X21hcF9ocmNfcnJwZ19ub3RsYXN0KGhfcmV0KTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCXJldCA9IDA7CisJfSAvKiBlbmQgZm9yKGkpICovCisKKworZWhjYV9yZWdfbXJfcnBhZ2VzX2V4aXQxOgorCWtmcmVlKGtwYWdlKTsKK2VoY2FfcmVnX21yX3JwYWdlc19leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmV0PSV4IHNoY2E9JXAgZV9tcj0lcCBwZ2luZm89JXAgIgorCQkJICJudW1fcGFnZXM9JWx4IG51bV80az0lbHgiLCByZXQsIHNoY2EsIGVfbXIsIHBnaW5mbywKKwkJCSBwZ2luZm8tPm51bV9wYWdlcywgcGdpbmZvLT5udW1fNGspOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX3JlZ19tcl9ycGFnZXMoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbmxpbmUgaW50IGVoY2FfcmVyZWdfbXJfcmVyZWcxKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCQkJc3RydWN0IGVoY2FfbXIgKmVfbXIsCisJCQkJdTY0ICppb3ZhX3N0YXJ0LAorCQkJCXU2NCBzaXplLAorCQkJCXUzMiBhY2wsCisJCQkJc3RydWN0IGVoY2FfcGQgKmVfcGQsCisJCQkJc3RydWN0IGVoY2FfbXJfcGdpbmZvICpwZ2luZm8sCisJCQkJdTMyICpsa2V5LCAvKk9VVCovCisJCQkJdTMyICpya2V5KSAvKk9VVCovCit7CisJaW50IHJldDsKKwl1NjQgaF9yZXQ7CisJdTMyIGhpcHpfYWNsOworCXU2NCAqa3BhZ2U7CisJdTY0IHJwYWdlOworCXN0cnVjdCBlaGNhX21yX3BnaW5mbyBwZ2luZm9fc2F2ZTsKKwlzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zIGhpcHpvdXQgPSB7ezB9LDAsMCwwLDAsMH07CisKKwllaGNhX21ybXdfbWFwX2FjbChhY2wsICZoaXB6X2FjbCk7CisJZWhjYV9tcm13X3NldF9wZ3NpemVfaGlwel9hY2woJmhpcHpfYWNsKTsKKworCWtwYWdlID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrcGFnZSkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAia3BhZ2UgYWxsb2MgZmFpbGVkIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZWhjYV9yZXJlZ19tcl9yZXJlZzFfZXhpdDA7CisJfQorCisJcGdpbmZvX3NhdmUgPSAqcGdpbmZvOworCXJldCA9IGVoY2Ffc2V0X3BhZ2VidWYoZV9tciwgcGdpbmZvLCBwZ2luZm8tPm51bV80aywga3BhZ2UpOworCWlmIChyZXQpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgInNldCBwYWdlYnVmIGZhaWxlZCwgZV9tcj0lcCAiCisJCQkgInBnaW5mbz0lcCB0eXBlPSV4IG51bV9wYWdlcz0lbHggbnVtXzRrPSVseCBrcGFnZT0lcCIsCisJCQkgZV9tciwgcGdpbmZvLCBwZ2luZm8tPnR5cGUsIHBnaW5mby0+bnVtX3BhZ2VzLAorCQkJIHBnaW5mby0+bnVtXzRrLGtwYWdlKTsKKwkJZ290byBlaGNhX3JlcmVnX21yX3JlcmVnMV9leGl0MTsKKwl9CisJcnBhZ2UgPSB2aXJ0X3RvX2FicyhrcGFnZSk7CisJaWYgKCFycGFnZSkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAia3BhZ2U9JXAiLCBrcGFnZSk7CisJCXJldCA9IC1FRkFVTFQ7CisJCWdvdG8gZWhjYV9yZXJlZ19tcl9yZXJlZzFfZXhpdDE7CisJfQorCWhfcmV0ID0gaGlwel9oX3JlcmVnaXN0ZXJfcG1yKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBlX21yLAorCQkJCSAgICAgICh1NjQpaW92YV9zdGFydCwgc2l6ZSwgaGlwel9hY2wsCisJCQkJICAgICAgZV9wZC0+ZndfcGQsIHJwYWdlLCAmaGlwem91dCk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQkvKgorCQkgKiByZXJlZ2lzdHJhdGlvbiB1bnN1Y2Nlc3NmdWwsIHRyeSBpdCBhZ2FpbiB3aXRoIHRoZSAzIGhDYWxscywKKwkJICogZS5nLiB0aGlzIGlzIHJlcXVpcmVkIGluIGNhc2UgSF9NUl9DT05ESVRJT04KKwkJICogKE1XIGJvdW5kIG9yIE1SIGlzIHNoYXJlZCkKKwkJICovCisJCWVoY2Ffd2Fybigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9oX3JlcmVnaXN0ZXJfcG1yIGZhaWxlZCAiCisJCQkgICIoUmVyZWcxKSwgaF9yZXQ9JWx4IGVfbXI9JXAiLCBoX3JldCwgZV9tcik7CisJCSpwZ2luZm8gPSBwZ2luZm9fc2F2ZTsKKwkJcmV0ID0gLUVBR0FJTjsKKwl9IGVsc2UgaWYgKCh1NjQqKWhpcHpvdXQudmFkZHIgIT0gaW92YV9zdGFydCkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiUEhZUCBjaGFuZ2VkIGlvdmFfc3RhcnQgaW4gIgorCQkJICJyZXJlZ19wbXIsIGlvdmFfc3RhcnQ9JXAgaW92YV9zdGFydF9vdXQ9JWx4IGVfbXI9JXAgIgorCQkJICJtcl9oYW5kbGU9JWx4IGxrZXk9JXggbGtleV9vdXQ9JXgiLCBpb3ZhX3N0YXJ0LAorCQkJIGhpcHpvdXQudmFkZHIsIGVfbXIsIGVfbXItPmlwel9tcl9oYW5kbGUuaGFuZGxlLAorCQkJIGVfbXItPmliLmliX21yLmxrZXksIGhpcHpvdXQubGtleSk7CisJCXJldCA9IC1FRkFVTFQ7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogc3VjY2Vzc2Z1bCByZXJlZ2lzdHJhdGlvbgorCQkgKiBub3RlOiBzdGFydCBhbmQgc3RhcnRfb3V0IGFyZSBpZGVudGljYWwgZm9yIGVTZXJ2ZXIgSENBcworCQkgKi8KKwkJZV9tci0+bnVtX3BhZ2VzID0gcGdpbmZvLT5udW1fcGFnZXM7CisJCWVfbXItPm51bV80ayAgICA9IHBnaW5mby0+bnVtXzRrOworCQllX21yLT5zdGFydCAgICAgPSBpb3ZhX3N0YXJ0OworCQllX21yLT5zaXplICAgICAgPSBzaXplOworCQllX21yLT5hY2wgICAgICAgPSBhY2w7CisJCSpsa2V5ID0gaGlwem91dC5sa2V5OworCQkqcmtleSA9IGhpcHpvdXQucmtleTsKKwl9CisKK2VoY2FfcmVyZWdfbXJfcmVyZWcxX2V4aXQxOgorCWtmcmVlKGtwYWdlKTsKK2VoY2FfcmVyZWdfbXJfcmVyZWcxX2V4aXQwOgorCWlmICggcmV0ICYmIChyZXQgIT0gLUVBR0FJTikgKQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmV0PSV4IGxrZXk9JXggcmtleT0leCAiCisJCQkgInBnaW5mbz0lcCBudW1fcGFnZXM9JWx4IG51bV80az0lbHgiLAorCQkJIHJldCwgKmxrZXksICpya2V5LCBwZ2luZm8sIHBnaW5mby0+bnVtX3BhZ2VzLAorCQkJIHBnaW5mby0+bnVtXzRrKTsKKwlyZXR1cm4gcmV0OworfSAvKiBlbmQgZWhjYV9yZXJlZ19tcl9yZXJlZzEoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgZWhjYV9yZXJlZ19tcihzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkgIHN0cnVjdCBlaGNhX21yICplX21yLAorCQkgIHU2NCAqaW92YV9zdGFydCwKKwkJICB1NjQgc2l6ZSwKKwkJICBpbnQgYWNsLAorCQkgIHN0cnVjdCBlaGNhX3BkICplX3BkLAorCQkgIHN0cnVjdCBlaGNhX21yX3BnaW5mbyAqcGdpbmZvLAorCQkgIHUzMiAqbGtleSwKKwkJICB1MzIgKnJrZXkpCit7CisJaW50IHJldCA9IDA7CisJdTY0IGhfcmV0OworCWludCByZXJlZ18xX2hjYWxsID0gMTsgLyogMTogdXNlIGhpcHpfaF9yZXJlZ2lzdGVyX3BtciBkaXJlY3RseSAqLworCWludCByZXJlZ18zX2hjYWxsID0gMDsgLyogMTogdXNlIDMgaGlweiBjYWxscyBmb3IgcmVyZWdpc3RyYXRpb24gKi8KKworCS8qIGZpcnN0IGRldGVybWluZSByZXJlZ2lzdHJhdGlvbiBoQ2FsbChzKSAqLworCWlmICgocGdpbmZvLT5udW1fNGsgPiA1MTIpIHx8IChlX21yLT5udW1fNGsgPiA1MTIpIHx8CisJICAgIChwZ2luZm8tPm51bV80ayA+IGVfbXItPm51bV80aykpIHsKKwkJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgIlJlcmVnMyBjYXNlLCBwZ2luZm8tPm51bV80az0lbHggIgorCQkJICJlX21yLT5udW1fNGs9JXgiLCBwZ2luZm8tPm51bV80aywgZV9tci0+bnVtXzRrKTsKKwkJcmVyZWdfMV9oY2FsbCA9IDA7CisJCXJlcmVnXzNfaGNhbGwgPSAxOworCX0KKworCWlmIChlX21yLT5mbGFncyAmIEVIQ0FfTVJfRkxBR19NQVhNUikgewkvKiBjaGVjayBmb3IgbWF4LU1SICovCisJCXJlcmVnXzFfaGNhbGwgPSAwOworCQlyZXJlZ18zX2hjYWxsID0gMTsKKwkJZV9tci0+ZmxhZ3MgJj0gfkVIQ0FfTVJfRkxBR19NQVhNUjsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgIlJlcmVnIE1SIGZvciBtYXgtTVIhIGVfbXI9JXAiLAorCQkJIGVfbXIpOworCX0KKworCWlmIChyZXJlZ18xX2hjYWxsKSB7CisJCXJldCA9IGVoY2FfcmVyZWdfbXJfcmVyZWcxKHNoY2EsIGVfbXIsIGlvdmFfc3RhcnQsIHNpemUsCisJCQkJCSAgIGFjbCwgZV9wZCwgcGdpbmZvLCBsa2V5LCBya2V5KTsKKwkJaWYgKHJldCkgeworCQkJaWYgKHJldCA9PSAtRUFHQUlOKQorCQkJCXJlcmVnXzNfaGNhbGwgPSAxOworCQkJZWxzZQorCQkJCWdvdG8gZWhjYV9yZXJlZ19tcl9leGl0MDsKKwkJfQorCX0KKworCWlmIChyZXJlZ18zX2hjYWxsKSB7CisJCXN0cnVjdCBlaGNhX21yIHNhdmVfbXI7CisKKwkJLyogZmlyc3QgZGVyZWdpc3RlciBvbGQgTVIgKi8KKwkJaF9yZXQgPSBoaXB6X2hfZnJlZV9yZXNvdXJjZV9tcihzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9tcik7CisJCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKKwkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJoaXB6X2ZyZWVfbXIgZmFpbGVkLCAiCisJCQkJICJoX3JldD0lbHggZV9tcj0lcCBoY2FfaG5kbD0lbHggbXJfaG5kbD0lbHggIgorCQkJCSAibXItPmxrZXk9JXgiLAorCQkJCSBoX3JldCwgZV9tciwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLAorCQkJCSBlX21yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwKKwkJCQkgZV9tci0+aWIuaWJfbXIubGtleSk7CisJCQlyZXQgPSBlaGNhX21ybXdfbWFwX2hyY19mcmVlX21yKGhfcmV0KTsKKwkJCWdvdG8gZWhjYV9yZXJlZ19tcl9leGl0MDsKKwkJfQorCQkvKiBjbGVhbiBlaGNhX21yX3QsIHdpdGhvdXQgY2hhbmdpbmcgc3RydWN0IGliX21yIGFuZCBsb2NrICovCisJCXNhdmVfbXIgPSAqZV9tcjsKKwkJZWhjYV9tcl9kZWxldGVuZXcoZV9tcik7CisKKwkJLyogc2V0IHNvbWUgTVIgdmFsdWVzICovCisJCWVfbXItPmZsYWdzID0gc2F2ZV9tci5mbGFnczsKKwkJZV9tci0+Zm1yX3BhZ2Vfc2l6ZSA9IHNhdmVfbXIuZm1yX3BhZ2Vfc2l6ZTsKKwkJZV9tci0+Zm1yX21heF9wYWdlcyA9IHNhdmVfbXIuZm1yX21heF9wYWdlczsKKwkJZV9tci0+Zm1yX21heF9tYXBzID0gc2F2ZV9tci5mbXJfbWF4X21hcHM7CisJCWVfbXItPmZtcl9tYXBfY250ID0gc2F2ZV9tci5mbXJfbWFwX2NudDsKKworCQlyZXQgPSBlaGNhX3JlZ19tcihzaGNhLCBlX21yLCBpb3ZhX3N0YXJ0LCBzaXplLCBhY2wsCisJCQkJICAgICAgZV9wZCwgcGdpbmZvLCBsa2V5LCBya2V5KTsKKwkJaWYgKHJldCkgeworCQkJdTMyIG9mZnNldCA9ICh1NjQpKCZlX21yLT5mbGFncykgLSAodTY0KWVfbXI7CisJCQltZW1jcHkoJmVfbXItPmZsYWdzLCAmKHNhdmVfbXIuZmxhZ3MpLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZWhjYV9tcikgLSBvZmZzZXQpOworCQkJZ290byBlaGNhX3JlcmVnX21yX2V4aXQwOworCQl9CisJfQorCitlaGNhX3JlcmVnX21yX2V4aXQwOgorCWlmIChyZXQpCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJyZXQ9JXggc2hjYT0lcCBlX21yPSVwICIKKwkJCSAiaW92YV9zdGFydD0lcCBzaXplPSVseCBhY2w9JXggZV9wZD0lcCBwZ2luZm89JXAgIgorCQkJICJudW1fcGFnZXM9JWx4IGxrZXk9JXggcmtleT0leCByZXJlZ18xX2hjYWxsPSV4ICIKKwkJCSAicmVyZWdfM19oY2FsbD0leCIsIHJldCwgc2hjYSwgZV9tciwgaW92YV9zdGFydCwgc2l6ZSwKKwkJCSBhY2wsIGVfcGQsIHBnaW5mbywgcGdpbmZvLT5udW1fcGFnZXMsICpsa2V5LCAqcmtleSwKKwkJCSByZXJlZ18xX2hjYWxsLCByZXJlZ18zX2hjYWxsKTsKKwlyZXR1cm4gcmV0OworfSAvKiBlbmQgZWhjYV9yZXJlZ19tcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX3VubWFwX29uZV9mbXIoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwKKwkJICAgICAgIHN0cnVjdCBlaGNhX21yICplX2ZtcikKK3sKKwlpbnQgcmV0ID0gMDsKKwl1NjQgaF9yZXQ7CisJaW50IHJlcmVnXzFfaGNhbGwgPSAxOyAvKiAxOiB1c2UgaGlwel9tcl9yZXJlZ2lzdGVyIGRpcmVjdGx5ICovCisJaW50IHJlcmVnXzNfaGNhbGwgPSAwOyAvKiAxOiB1c2UgMyBoaXB6IGNhbGxzIGZvciB1bm1hcHBpbmcgKi8KKwlzdHJ1Y3QgZWhjYV9wZCAqZV9wZCA9CisJCWNvbnRhaW5lcl9vZihlX2Ztci0+aWIuaWJfZm1yLnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCXN0cnVjdCBlaGNhX21yIHNhdmVfZm1yOworCXUzMiB0bXBfbGtleSwgdG1wX3JrZXk7CisJc3RydWN0IGVoY2FfbXJfcGdpbmZvIHBnaW5mbz17MCwwLDAsMCwwLDAsMCxOVUxMLDAsTlVMTCxOVUxMLDAsTlVMTCwwfTsKKwlzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zIGhpcHpvdXQgPSB7ezB9LDAsMCwwLDAsMH07CisKKwkvKiBmaXJzdCBjaGVjayBpZiByZXJlZ2lzdHJhdGlvbiBoQ2FsbCBjYW4gYmUgdXNlZCBmb3IgdW5tYXAgKi8KKwlpZiAoZV9mbXItPmZtcl9tYXhfcGFnZXMgPiA1MTIpIHsKKwkJcmVyZWdfMV9oY2FsbCA9IDA7CisJCXJlcmVnXzNfaGNhbGwgPSAxOworCX0KKworCWlmIChyZXJlZ18xX2hjYWxsKSB7CisJCS8qCisJCSAqIG5vdGU6IGFmdGVyIHVzaW5nIHJlcmVnIGhjYWxsIHdpdGggbGVuPTAsCisJCSAqIHJlcmVnIGhjYWxsIG11c3QgYmUgdXNlZCBhZ2FpbiBmb3IgcmVnaXN0ZXJpbmcgcGFnZXMKKwkJICovCisJCWhfcmV0ID0gaGlwel9oX3JlcmVnaXN0ZXJfcG1yKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBlX2ZtciwgMCwKKwkJCQkJICAgICAgMCwgMCwgZV9wZC0+ZndfcGQsIDAsICZoaXB6b3V0KTsKKwkJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQkJLyoKKwkJCSAqIHNob3VsZCBub3QgaGFwcGVuLCBiZWNhdXNlIGxlbmd0aCBjaGVja2VkIGFib3ZlLAorCQkJICogRk1ScyBhcmUgbm90IHNoYXJlZCBhbmQgbm8gTVcgYm91bmQgdG8gRk1ScworCQkJICovCisJCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9yZXJlZ2lzdGVyX3BtciBmYWlsZWQgIgorCQkJCSAiKFJlcmVnMSksIGhfcmV0PSVseCBlX2Ztcj0lcCBoY2FfaG5kbD0lbHggIgorCQkJCSAibXJfaG5kbD0lbHggbGtleT0leCBsa2V5X291dD0leCIsCisJCQkJIGhfcmV0LCBlX2Ztciwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLAorCQkJCSBlX2Ztci0+aXB6X21yX2hhbmRsZS5oYW5kbGUsCisJCQkJIGVfZm1yLT5pYi5pYl9mbXIubGtleSwgaGlwem91dC5sa2V5KTsKKwkJCXJlcmVnXzNfaGNhbGwgPSAxOworCQl9IGVsc2UgeworCQkJLyogc3VjY2Vzc2Z1bCByZXJlZ2lzdHJhdGlvbiAqLworCQkJZV9mbXItPnN0YXJ0ID0gTlVMTDsKKwkJCWVfZm1yLT5zaXplID0gMDsKKwkJCXRtcF9sa2V5ID0gaGlwem91dC5sa2V5OworCQkJdG1wX3JrZXkgPSBoaXB6b3V0LnJrZXk7CisJCX0KKwl9CisKKwlpZiAocmVyZWdfM19oY2FsbCkgeworCQlzdHJ1Y3QgZWhjYV9tciBzYXZlX21yOworCisJCS8qIGZpcnN0IGZyZWUgb2xkIEZNUiAqLworCQloX3JldCA9IGhpcHpfaF9mcmVlX3Jlc291cmNlX21yKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBlX2Ztcik7CisJCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKKwkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJoaXB6X2ZyZWVfbXIgZmFpbGVkLCAiCisJCQkJICJoX3JldD0lbHggZV9mbXI9JXAgaGNhX2huZGw9JWx4IG1yX2huZGw9JWx4ICIKKwkJCQkgImxrZXk9JXgiLAorCQkJCSBoX3JldCwgZV9mbXIsIHNoY2EtPmlwel9oY2FfaGFuZGxlLmhhbmRsZSwKKwkJCQkgZV9mbXItPmlwel9tcl9oYW5kbGUuaGFuZGxlLAorCQkJCSBlX2Ztci0+aWIuaWJfZm1yLmxrZXkpOworCQkJcmV0ID0gZWhjYV9tcm13X21hcF9ocmNfZnJlZV9tcihoX3JldCk7CisJCQlnb3RvIGVoY2FfdW5tYXBfb25lX2Ztcl9leGl0MDsKKwkJfQorCQkvKiBjbGVhbiBlaGNhX21yX3QsIHdpdGhvdXQgY2hhbmdpbmcgbG9jayAqLworCQlzYXZlX2ZtciA9ICplX2ZtcjsKKwkJZWhjYV9tcl9kZWxldGVuZXcoZV9mbXIpOworCisJCS8qIHNldCBzb21lIE1SIHZhbHVlcyAqLworCQllX2Ztci0+ZmxhZ3MgPSBzYXZlX2Ztci5mbGFnczsKKwkJZV9mbXItPmZtcl9wYWdlX3NpemUgPSBzYXZlX2Ztci5mbXJfcGFnZV9zaXplOworCQllX2Ztci0+Zm1yX21heF9wYWdlcyA9IHNhdmVfZm1yLmZtcl9tYXhfcGFnZXM7CisJCWVfZm1yLT5mbXJfbWF4X21hcHMgPSBzYXZlX2Ztci5mbXJfbWF4X21hcHM7CisJCWVfZm1yLT5mbXJfbWFwX2NudCA9IHNhdmVfZm1yLmZtcl9tYXBfY250OworCQllX2Ztci0+YWNsID0gc2F2ZV9mbXIuYWNsOworCisJCXBnaW5mby50eXBlICAgICAgPSBFSENBX01SX1BHSV9GTVI7CisJCXBnaW5mby5udW1fcGFnZXMgPSAwOworCQlwZ2luZm8ubnVtXzRrICAgID0gMDsKKwkJcmV0ID0gZWhjYV9yZWdfbXIoc2hjYSwgZV9mbXIsIE5VTEwsCisJCQkJICAoZV9mbXItPmZtcl9tYXhfcGFnZXMgKiBlX2Ztci0+Zm1yX3BhZ2Vfc2l6ZSksCisJCQkJICBlX2Ztci0+YWNsLCBlX3BkLCAmcGdpbmZvLCAmdG1wX2xrZXksCisJCQkJICAmdG1wX3JrZXkpOworCQlpZiAocmV0KSB7CisJCQl1MzIgb2Zmc2V0ID0gKHU2NCkoJmVfZm1yLT5mbGFncykgLSAodTY0KWVfZm1yOworCQkJbWVtY3B5KCZlX2Ztci0+ZmxhZ3MsICYoc2F2ZV9tci5mbGFncyksCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBlaGNhX21yKSAtIG9mZnNldCk7CisJCQlnb3RvIGVoY2FfdW5tYXBfb25lX2Ztcl9leGl0MDsKKwkJfQorCX0KKworZWhjYV91bm1hcF9vbmVfZm1yX2V4aXQwOgorCWlmIChyZXQpCisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJyZXQ9JXggdG1wX2xrZXk9JXggdG1wX3JrZXk9JXggIgorCQkJICJmbXJfbWF4X3BhZ2VzPSV4IHJlcmVnXzFfaGNhbGw9JXggcmVyZWdfM19oY2FsbD0leCIsCisJCQkgcmV0LCB0bXBfbGtleSwgdG1wX3JrZXksIGVfZm1yLT5mbXJfbWF4X3BhZ2VzLAorCQkJIHJlcmVnXzFfaGNhbGwsIHJlcmVnXzNfaGNhbGwpOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX3VubWFwX29uZV9mbXIoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitpbnQgZWhjYV9yZWdfc21yKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCSBzdHJ1Y3QgZWhjYV9tciAqZV9vcmlnbXIsCisJCSBzdHJ1Y3QgZWhjYV9tciAqZV9uZXdtciwKKwkJIHU2NCAqaW92YV9zdGFydCwKKwkJIGludCBhY2wsCisJCSBzdHJ1Y3QgZWhjYV9wZCAqZV9wZCwKKwkJIHUzMiAqbGtleSwgLypPVVQqLworCQkgdTMyICpya2V5KSAvKk9VVCovCit7CisJaW50IHJldCA9IDA7CisJdTY0IGhfcmV0OworCXUzMiBoaXB6X2FjbDsKKwlzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zIGhpcHpvdXQgPSB7ezB9LDAsMCwwLDAsMH07CisKKwllaGNhX21ybXdfbWFwX2FjbChhY2wsICZoaXB6X2FjbCk7CisJZWhjYV9tcm13X3NldF9wZ3NpemVfaGlwel9hY2woJmhpcHpfYWNsKTsKKworCWhfcmV0ID0gaGlwel9oX3JlZ2lzdGVyX3NtcihzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9uZXdtciwgZV9vcmlnbXIsCisJCQkJICAgICh1NjQpaW92YV9zdGFydCwgaGlwel9hY2wsIGVfcGQtPmZ3X3BkLAorCQkJCSAgICAmaGlwem91dCk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9yZWdfc21yIGZhaWxlZCwgaF9yZXQ9JWx4ICIKKwkJCSAic2hjYT0lcCBlX29yaWdtcj0lcCBlX25ld21yPSVwIGlvdmFfc3RhcnQ9JXAgYWNsPSV4ICIKKwkJCSAiZV9wZD0lcCBoY2FfaG5kbD0lbHggbXJfaG5kbD0lbHggbGtleT0leCIsCisJCQkgaF9yZXQsIHNoY2EsIGVfb3JpZ21yLCBlX25ld21yLCBpb3ZhX3N0YXJ0LCBhY2wsIGVfcGQsCisJCQkgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLAorCQkJIGVfb3JpZ21yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwKKwkJCSBlX29yaWdtci0+aWIuaWJfbXIubGtleSk7CisJCXJldCA9IGVoY2FfbXJtd19tYXBfaHJjX3JlZ19zbXIoaF9yZXQpOworCQlnb3RvIGVoY2FfcmVnX3Ntcl9leGl0MDsKKwl9CisJLyogc3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24gKi8KKwllX25ld21yLT5udW1fcGFnZXMgICAgID0gZV9vcmlnbXItPm51bV9wYWdlczsKKwllX25ld21yLT5udW1fNGsgICAgICAgID0gZV9vcmlnbXItPm51bV80azsKKwllX25ld21yLT5zdGFydCAgICAgICAgID0gaW92YV9zdGFydDsKKwllX25ld21yLT5zaXplICAgICAgICAgID0gZV9vcmlnbXItPnNpemU7CisJZV9uZXdtci0+YWNsICAgICAgICAgICA9IGFjbDsKKwllX25ld21yLT5pcHpfbXJfaGFuZGxlID0gaGlwem91dC5oYW5kbGU7CisJKmxrZXkgPSBoaXB6b3V0LmxrZXk7CisJKnJrZXkgPSBoaXB6b3V0LnJrZXk7CisJcmV0dXJuIDA7CisKK2VoY2FfcmVnX3Ntcl9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmV0PSV4IHNoY2E9JXAgZV9vcmlnbXI9JXAgIgorCQkJICJlX25ld21yPSVwIGlvdmFfc3RhcnQ9JXAgYWNsPSV4IGVfcGQ9JXAiLAorCQkJIHJldCwgc2hjYSwgZV9vcmlnbXIsIGVfbmV3bXIsIGlvdmFfc3RhcnQsIGFjbCwgZV9wZCk7CisJcmV0dXJuIHJldDsKK30gLyogZW5kIGVoY2FfcmVnX3NtcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHJlZ2lzdGVyIGludGVybmFsIG1heC1NUiB0byBpbnRlcm5hbCBTSENBICovCitpbnQgZWhjYV9yZWdfaW50ZXJuYWxfbWF4bXIoCisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwKKwlzdHJ1Y3QgZWhjYV9wZCAqZV9wZCwKKwlzdHJ1Y3QgZWhjYV9tciAqKmVfbWF4bXIpICAvKk9VVCovCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZWhjYV9tciAqZV9tcjsKKwl1NjQgKmlvdmFfc3RhcnQ7CisJdTY0IHNpemVfbWF4bXI7CisJc3RydWN0IGVoY2FfbXJfcGdpbmZvIHBnaW5mbz17MCwwLDAsMCwwLDAsMCxOVUxMLDAsTlVMTCxOVUxMLDAsTlVMTCwwfTsKKwlzdHJ1Y3QgaWJfcGh5c19idWYgaWJfcGJ1ZjsKKwl1MzIgbnVtX3BhZ2VzX21yOworCXUzMiBudW1fcGFnZXNfNGs7IC8qIDRrIHBvcnRpb24gInBhZ2VzIiAqLworCisJZV9tciA9IGVoY2FfbXJfbmV3KCk7CisJaWYgKCFlX21yKSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJvdXQgb2YgbWVtb3J5Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZWhjYV9yZWdfaW50ZXJuYWxfbWF4bXJfZXhpdDA7CisJfQorCWVfbXItPmZsYWdzIHw9IEVIQ0FfTVJfRkxBR19NQVhNUjsKKworCS8qIHJlZ2lzdGVyIGludGVybmFsIG1heC1NUiBvbiBIQ0EgKi8KKwlzaXplX21heG1yID0gKHU2NCloaWdoX21lbW9yeSAtIFBBR0VfT0ZGU0VUOworCWlvdmFfc3RhcnQgPSAodTY0KilLRVJORUxCQVNFOworCWliX3BidWYuYWRkciA9IDA7CisJaWJfcGJ1Zi5zaXplID0gc2l6ZV9tYXhtcjsKKwludW1fcGFnZXNfbXIgPSAoKCgodTY0KWlvdmFfc3RhcnQgJSBQQUdFX1NJWkUpICsgc2l6ZV9tYXhtciArCisJCQkgUEFHRV9TSVpFIC0gMSkgLyBQQUdFX1NJWkUpOworCW51bV9wYWdlc180ayA9ICgoKCh1NjQpaW92YV9zdGFydCAlIEVIQ0FfUEFHRVNJWkUpICsgc2l6ZV9tYXhtciArCisJCQkgRUhDQV9QQUdFU0laRSAtIDEpIC8gRUhDQV9QQUdFU0laRSk7CisKKwlwZ2luZm8udHlwZSAgICAgICAgICAgPSBFSENBX01SX1BHSV9QSFlTOworCXBnaW5mby5udW1fcGFnZXMgICAgICA9IG51bV9wYWdlc19tcjsKKwlwZ2luZm8ubnVtXzRrICAgICAgICAgPSBudW1fcGFnZXNfNGs7CisJcGdpbmZvLm51bV9waHlzX2J1ZiAgID0gMTsKKwlwZ2luZm8ucGh5c19idWZfYXJyYXkgPSAmaWJfcGJ1ZjsKKworCXJldCA9IGVoY2FfcmVnX21yKHNoY2EsIGVfbXIsIGlvdmFfc3RhcnQsIHNpemVfbWF4bXIsIDAsIGVfcGQsCisJCQkgICZwZ2luZm8sICZlX21yLT5pYi5pYl9tci5sa2V5LAorCQkJICAmZV9tci0+aWIuaWJfbXIucmtleSk7CisJaWYgKHJldCkgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmVnIG9mIGludGVybmFsIG1heCBNUiBmYWlsZWQsICIKKwkJCSAiZV9tcj0lcCBpb3ZhX3N0YXJ0PSVwIHNpemVfbWF4bXI9JWx4IG51bV9wYWdlc19tcj0leCAiCisJCQkgIm51bV9wYWdlc180az0leCIsIGVfbXIsIGlvdmFfc3RhcnQsIHNpemVfbWF4bXIsCisJCQkgbnVtX3BhZ2VzX21yLCBudW1fcGFnZXNfNGspOworCQlnb3RvIGVoY2FfcmVnX2ludGVybmFsX21heG1yX2V4aXQxOworCX0KKworCS8qIHN1Y2Nlc3NmdWwgcmVnaXN0cmF0aW9uIG9mIGFsbCBwYWdlcyAqLworCWVfbXItPmliLmliX21yLmRldmljZSA9IGVfcGQtPmliX3BkLmRldmljZTsKKwllX21yLT5pYi5pYl9tci5wZCA9ICZlX3BkLT5pYl9wZDsKKwllX21yLT5pYi5pYl9tci51b2JqZWN0ID0gTlVMTDsKKwlhdG9taWNfaW5jKCYoZV9wZC0+aWJfcGQudXNlY250KSk7CisJYXRvbWljX3NldCgmKGVfbXItPmliLmliX21yLnVzZWNudCksIDApOworCSplX21heG1yID0gZV9tcjsKKwlyZXR1cm4gMDsKKworZWhjYV9yZWdfaW50ZXJuYWxfbWF4bXJfZXhpdDE6CisJZWhjYV9tcl9kZWxldGUoZV9tcik7CitlaGNhX3JlZ19pbnRlcm5hbF9tYXhtcl9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmV0PSV4IHNoY2E9JXAgZV9wZD0lcCBlX21heG1yPSVwIiwKKwkJCSByZXQsIHNoY2EsIGVfcGQsIGVfbWF4bXIpOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX3JlZ19pbnRlcm5hbF9tYXhtcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX3JlZ19tYXhtcihzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkgICBzdHJ1Y3QgZWhjYV9tciAqZV9uZXdtciwKKwkJICAgdTY0ICppb3ZhX3N0YXJ0LAorCQkgICBpbnQgYWNsLAorCQkgICBzdHJ1Y3QgZWhjYV9wZCAqZV9wZCwKKwkJICAgdTMyICpsa2V5LAorCQkgICB1MzIgKnJrZXkpCit7CisJdTY0IGhfcmV0OworCXN0cnVjdCBlaGNhX21yICplX29yaWdtciA9IHNoY2EtPm1heG1yOworCXUzMiBoaXB6X2FjbDsKKwlzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zIGhpcHpvdXQgPSB7ezB9LDAsMCwwLDAsMH07CisKKwllaGNhX21ybXdfbWFwX2FjbChhY2wsICZoaXB6X2FjbCk7CisJZWhjYV9tcm13X3NldF9wZ3NpemVfaGlwel9hY2woJmhpcHpfYWNsKTsKKworCWhfcmV0ID0gaGlwel9oX3JlZ2lzdGVyX3NtcihzaGNhLT5pcHpfaGNhX2hhbmRsZSwgZV9uZXdtciwgZV9vcmlnbXIsCisJCQkJICAgICh1NjQpaW92YV9zdGFydCwgaGlwel9hY2wsIGVfcGQtPmZ3X3BkLAorCQkJCSAgICAmaGlwem91dCk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9yZWdfc21yIGZhaWxlZCwgaF9yZXQ9JWx4ICIKKwkJCSAiZV9vcmlnbXI9JXAgaGNhX2huZGw9JWx4IG1yX2huZGw9JWx4IGxrZXk9JXgiLAorCQkJIGhfcmV0LCBlX29yaWdtciwgc2hjYS0+aXB6X2hjYV9oYW5kbGUuaGFuZGxlLAorCQkJIGVfb3JpZ21yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwKKwkJCSBlX29yaWdtci0+aWIuaWJfbXIubGtleSk7CisJCXJldHVybiBlaGNhX21ybXdfbWFwX2hyY19yZWdfc21yKGhfcmV0KTsKKwl9CisJLyogc3VjY2Vzc2Z1bCByZWdpc3RyYXRpb24gKi8KKwllX25ld21yLT5udW1fcGFnZXMgICAgID0gZV9vcmlnbXItPm51bV9wYWdlczsKKwllX25ld21yLT5udW1fNGsgICAgICAgID0gZV9vcmlnbXItPm51bV80azsKKwllX25ld21yLT5zdGFydCAgICAgICAgID0gaW92YV9zdGFydDsKKwllX25ld21yLT5zaXplICAgICAgICAgID0gZV9vcmlnbXItPnNpemU7CisJZV9uZXdtci0+YWNsICAgICAgICAgICA9IGFjbDsKKwllX25ld21yLT5pcHpfbXJfaGFuZGxlID0gaGlwem91dC5oYW5kbGU7CisJKmxrZXkgPSBoaXB6b3V0LmxrZXk7CisJKnJrZXkgPSBoaXB6b3V0LnJrZXk7CisJcmV0dXJuIDA7Cit9IC8qIGVuZCBlaGNhX3JlZ19tYXhtcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK2ludCBlaGNhX2RlcmVnX2ludGVybmFsX21heG1yKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZWhjYV9tciAqZV9tYXhtcjsKKwlzdHJ1Y3QgaWJfcGQgKmliX3BkOworCisJaWYgKCFzaGNhLT5tYXhtcikgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiYmFkIGNhbGwsIHNoY2E9JXAiLCBzaGNhKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlaGNhX2RlcmVnX2ludGVybmFsX21heG1yX2V4aXQwOworCX0KKworCWVfbWF4bXIgPSBzaGNhLT5tYXhtcjsKKwlpYl9wZCA9IGVfbWF4bXItPmliLmliX21yLnBkOworCXNoY2EtPm1heG1yID0gTlVMTDsgLyogcmVtb3ZlIGludGVybmFsIG1heC1NUiBpbmRpY2F0aW9uIGZyb20gU0hDQSAqLworCisJcmV0ID0gZWhjYV9kZXJlZ19tcigmZV9tYXhtci0+aWIuaWJfbXIpOworCWlmIChyZXQpIHsKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImRlcmVnIGludGVybmFsIG1heC1NUiBmYWlsZWQsICIKKwkJCSAicmV0PSV4IGVfbWF4bXI9JXAgc2hjYT0lcCBsa2V5PSV4IiwKKwkJCSByZXQsIGVfbWF4bXIsIHNoY2EsIGVfbWF4bXItPmliLmliX21yLmxrZXkpOworCQlzaGNhLT5tYXhtciA9IGVfbWF4bXI7CisJCWdvdG8gZWhjYV9kZXJlZ19pbnRlcm5hbF9tYXhtcl9leGl0MDsKKwl9CisKKwlhdG9taWNfZGVjKCZpYl9wZC0+dXNlY250KTsKKworZWhjYV9kZXJlZ19pbnRlcm5hbF9tYXhtcl9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAicmV0PSV4IHNoY2E9JXAgc2hjYS0+bWF4bXI9JXAiLAorCQkJIHJldCwgc2hjYSwgc2hjYS0+bWF4bXIpOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX2RlcmVnX2ludGVybmFsX21heG1yKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGNoZWNrIHBoeXNpY2FsIGJ1ZmZlciBhcnJheSBvZiBNUiB2ZXJicyBmb3IgdmFsaWRuZXNzIGFuZAorICogY2FsY3VsYXRlcyBNUiBzaXplCisgKi8KK2ludCBlaGNhX21yX2Noa19idWZfYW5kX2NhbGNfc2l6ZShzdHJ1Y3QgaWJfcGh5c19idWYgKnBoeXNfYnVmX2FycmF5LAorCQkJCSAgaW50IG51bV9waHlzX2J1ZiwKKwkJCQkgIHU2NCAqaW92YV9zdGFydCwKKwkJCQkgIHU2NCAqc2l6ZSkKK3sKKwlzdHJ1Y3QgaWJfcGh5c19idWYgKnBidWYgPSBwaHlzX2J1Zl9hcnJheTsKKwl1NjQgc2l6ZV9jb3VudCA9IDA7CisJdTMyIGk7CisKKwlpZiAobnVtX3BoeXNfYnVmID09IDApIHsKKwkJZWhjYV9nZW5fZXJyKCJiYWQgcGh5cyBidWYgYXJyYXkgbGVuLCBudW1fcGh5c19idWY9MCIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogY2hlY2sgZmlyc3QgYnVmZmVyICovCisJaWYgKCgodTY0KWlvdmFfc3RhcnQgJiB+UEFHRV9NQVNLKSAhPSAocGJ1Zi0+YWRkciAmIH5QQUdFX01BU0spKSB7CisJCWVoY2FfZ2VuX2VycigiaW92YV9zdGFydC9hZGRyIG1pc21hdGNoLCBpb3ZhX3N0YXJ0PSVwICIKKwkJCSAgICAgInBidWYtPmFkZHI9JWx4IHBidWYtPnNpemU9JWx4IiwKKwkJCSAgICAgaW92YV9zdGFydCwgcGJ1Zi0+YWRkciwgcGJ1Zi0+c2l6ZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoKChwYnVmLT5hZGRyICsgcGJ1Zi0+c2l6ZSkgJSBQQUdFX1NJWkUpICYmCisJICAgIChudW1fcGh5c19idWYgPiAxKSkgeworCQllaGNhX2dlbl9lcnIoImFkZHIvc2l6ZSBtaXNtYXRjaCBpbiAxc3QgYnVmLCBwYnVmLT5hZGRyPSVseCAiCisJCQkgICAgICJwYnVmLT5zaXplPSVseCIsIHBidWYtPmFkZHIsIHBidWYtPnNpemUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3BoeXNfYnVmOyBpKyspIHsKKwkJaWYgKChpID4gMCkgJiYgKHBidWYtPmFkZHIgJSBQQUdFX1NJWkUpKSB7CisJCQllaGNhX2dlbl9lcnIoImJhZCBhZGRyZXNzLCBpPSV4IHBidWYtPmFkZHI9JWx4ICIKKwkJCQkgICAgICJwYnVmLT5zaXplPSVseCIsCisJCQkJICAgICBpLCBwYnVmLT5hZGRyLCBwYnVmLT5zaXplKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgoKGkgPiAwKSAmJgkvKiBub3QgMXN0ICovCisJCSAgICAgKGkgPCAobnVtX3BoeXNfYnVmIC0gMSkpICYmCS8qIG5vdCBsYXN0ICovCisJCSAgICAgKHBidWYtPnNpemUgJSBQQUdFX1NJWkUpKSB8fCAocGJ1Zi0+c2l6ZSA9PSAwKSkgeworCQkJZWhjYV9nZW5fZXJyKCJiYWQgc2l6ZSwgaT0leCBwYnVmLT5zaXplPSVseCIsCisJCQkJICAgICBpLCBwYnVmLT5zaXplKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXNpemVfY291bnQgKz0gcGJ1Zi0+c2l6ZTsKKwkJcGJ1ZisrOworCX0KKworCSpzaXplID0gc2l6ZV9jb3VudDsKKwlyZXR1cm4gMDsKK30gLyogZW5kIGVoY2FfbXJfY2hrX2J1Zl9hbmRfY2FsY19zaXplKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogY2hlY2sgcGFnZSBsaXN0IG9mIG1hcCBGTVIgdmVyYiBmb3IgdmFsaWRuZXNzICovCitpbnQgZWhjYV9mbXJfY2hlY2tfcGFnZV9saXN0KHN0cnVjdCBlaGNhX21yICplX2ZtciwKKwkJCSAgICAgdTY0ICpwYWdlX2xpc3QsCisJCQkgICAgIGludCBsaXN0X2xlbikKK3sKKwl1MzIgaTsKKwl1NjQgKnBhZ2U7CisKKwlpZiAoKGxpc3RfbGVuID09IDApIHx8IChsaXN0X2xlbiA+IGVfZm1yLT5mbXJfbWF4X3BhZ2VzKSkgeworCQllaGNhX2dlbl9lcnIoImJhZCBsaXN0X2xlbiwgbGlzdF9sZW49JXggIgorCQkJICAgICAiZV9mbXItPmZtcl9tYXhfcGFnZXM9JXggZm1yPSVwIiwKKwkJCSAgICAgbGlzdF9sZW4sIGVfZm1yLT5mbXJfbWF4X3BhZ2VzLCBlX2Ztcik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGVhY2ggcGFnZSBtdXN0IGJlIGFsaWduZWQgKi8KKwlwYWdlID0gcGFnZV9saXN0OworCWZvciAoaSA9IDA7IGkgPCBsaXN0X2xlbjsgaSsrKSB7CisJCWlmICgqcGFnZSAlIGVfZm1yLT5mbXJfcGFnZV9zaXplKSB7CisJCQllaGNhX2dlbl9lcnIoImJhZCBwYWdlLCBpPSV4ICpwYWdlPSVseCBwYWdlPSVwIGZtcj0lcCAiCisJCQkJICAgICAiZm1yX3BhZ2Vfc2l6ZT0leCIsIGksICpwYWdlLCBwYWdlLCBlX2ZtciwKKwkJCQkgICAgIGVfZm1yLT5mbXJfcGFnZV9zaXplKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXBhZ2UrKzsKKwl9CisKKwlyZXR1cm4gMDsKK30gLyogZW5kIGVoY2FfZm1yX2NoZWNrX3BhZ2VfbGlzdCgpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIHNldHVwIHBhZ2UgYnVmZmVyIGZyb20gcGFnZSBpbmZvICovCitpbnQgZWhjYV9zZXRfcGFnZWJ1ZihzdHJ1Y3QgZWhjYV9tciAqZV9tciwKKwkJICAgICBzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gKnBnaW5mbywKKwkJICAgICB1MzIgbnVtYmVyLAorCQkgICAgIHU2NCAqa3BhZ2UpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGliX3VtZW1fY2h1bmsgKnByZXZfY2h1bms7CisJc3RydWN0IGliX3VtZW1fY2h1bmsgKmNodW5rOworCXN0cnVjdCBpYl9waHlzX2J1ZiAqcGJ1ZjsKKwl1NjQgKmZtcmxpc3Q7CisJdTY0IG51bTRrLCBwZ2FkZHIsIG9mZnM0azsKKwl1MzIgaSA9IDA7CisJdTMyIGogPSAwOworCisJaWYgKHBnaW5mby0+dHlwZSA9PSBFSENBX01SX1BHSV9QSFlTKSB7CisJCS8qIGxvb3Agb3ZlciBkZXNpcmVkIHBoeXNfYnVmX2FycmF5IGVudHJpZXMgKi8KKwkJd2hpbGUgKGkgPCBudW1iZXIpIHsKKwkJCXBidWYgICA9IHBnaW5mby0+cGh5c19idWZfYXJyYXkgKyBwZ2luZm8tPm5leHRfYnVmOworCQkJbnVtNGsgID0gKChwYnVmLT5hZGRyICUgRUhDQV9QQUdFU0laRSkgKyBwYnVmLT5zaXplICsKKwkJCQkgIEVIQ0FfUEFHRVNJWkUgLSAxKSAvIEVIQ0FfUEFHRVNJWkU7CisJCQlvZmZzNGsgPSAocGJ1Zi0+YWRkciAmIH5QQUdFX01BU0spIC8gRUhDQV9QQUdFU0laRTsKKwkJCXdoaWxlIChwZ2luZm8tPm5leHRfNGsgPCBvZmZzNGsgKyBudW00aykgeworCQkJCS8qIHNhbml0eSBjaGVjayAqLworCQkJCWlmICgocGdpbmZvLT5wYWdlX2NudCA+PSBwZ2luZm8tPm51bV9wYWdlcykgfHwKKwkJCQkgICAgKHBnaW5mby0+cGFnZV80a19jbnQgPj0gcGdpbmZvLT5udW1fNGspKSB7CisJCQkJCWVoY2FfZ2VuX2VycigicGFnZV9jbnQgPj0gbnVtX3BhZ2VzLCAiCisJCQkJCQkgICAgICJwYWdlX2NudD0lbHggIgorCQkJCQkJICAgICAibnVtX3BhZ2VzPSVseCAiCisJCQkJCQkgICAgICJwYWdlXzRrX2NudD0lbHggIgorCQkJCQkJICAgICAibnVtXzRrPSVseCBpPSV4IiwKKwkJCQkJCSAgICAgcGdpbmZvLT5wYWdlX2NudCwKKwkJCQkJCSAgICAgcGdpbmZvLT5udW1fcGFnZXMsCisJCQkJCQkgICAgIHBnaW5mby0+cGFnZV80a19jbnQsCisJCQkJCQkgICAgIHBnaW5mby0+bnVtXzRrLCBpKTsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBlaGNhX3NldF9wYWdlYnVmX2V4aXQwOworCQkJCX0KKwkJCQkqa3BhZ2UgPSBwaHlzX3RvX2FicygKKwkJCQkJKHBidWYtPmFkZHIgJiBFSENBX1BBR0VNQVNLKQorCQkJCQkrIChwZ2luZm8tPm5leHRfNGsgKiBFSENBX1BBR0VTSVpFKSk7CisJCQkJaWYgKCAhKCprcGFnZSkgJiYgcGJ1Zi0+YWRkciApIHsKKwkJCQkJZWhjYV9nZW5fZXJyKCJwYnVmLT5hZGRyPSVseCAiCisJCQkJCQkgICAgICJwYnVmLT5zaXplPSVseCAiCisJCQkJCQkgICAgICJuZXh0XzRrPSVseCIsIHBidWYtPmFkZHIsCisJCQkJCQkgICAgIHBidWYtPnNpemUsCisJCQkJCQkgICAgIHBnaW5mby0+bmV4dF80ayk7CisJCQkJCXJldCA9IC1FRkFVTFQ7CisJCQkJCWdvdG8gZWhjYV9zZXRfcGFnZWJ1Zl9leGl0MDsKKwkJCQl9CisJCQkJKHBnaW5mby0+cGFnZV80a19jbnQpKys7CisJCQkJKHBnaW5mby0+bmV4dF80aykrKzsKKwkJCQlpZiAocGdpbmZvLT5uZXh0XzRrICUKKwkJCQkgICAgKFBBR0VfU0laRSAvIEVIQ0FfUEFHRVNJWkUpID09IDApCisJCQkJCShwZ2luZm8tPnBhZ2VfY250KSsrOworCQkJCWtwYWdlKys7CisJCQkJaSsrOworCQkJCWlmIChpID49IG51bWJlcikgYnJlYWs7CisJCQl9CisJCQlpZiAocGdpbmZvLT5uZXh0XzRrID49IG9mZnM0ayArIG51bTRrKSB7CisJCQkJKHBnaW5mby0+bmV4dF9idWYpKys7CisJCQkJcGdpbmZvLT5uZXh0XzRrID0gMDsKKwkJCX0KKwkJfQorCX0gZWxzZSBpZiAocGdpbmZvLT50eXBlID09IEVIQ0FfTVJfUEdJX1VTRVIpIHsKKwkJLyogbG9vcCBvdmVyIGRlc2lyZWQgY2h1bmsgZW50cmllcyAqLworCQljaHVuayAgICAgID0gcGdpbmZvLT5uZXh0X2NodW5rOworCQlwcmV2X2NodW5rID0gcGdpbmZvLT5uZXh0X2NodW5rOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGNodW5rLAorCQkJCQkgICAgICgmKHBnaW5mby0+cmVnaW9uLT5jaHVua19saXN0KSksCisJCQkJCSAgICAgbGlzdCkgeworCQkJZm9yIChpID0gcGdpbmZvLT5uZXh0X25tYXA7IGkgPCBjaHVuay0+bm1hcDsgKSB7CisJCQkJcGdhZGRyID0gKCBwYWdlX3RvX3BmbihjaHVuay0+cGFnZV9saXN0W2ldLnBhZ2UpCisJCQkJCSAgIDw8IFBBR0VfU0hJRlQgKTsKKwkJCQkqa3BhZ2UgPSBwaHlzX3RvX2FicyhwZ2FkZHIgKworCQkJCQkJICAgICAocGdpbmZvLT5uZXh0XzRrICoKKwkJCQkJCSAgICAgIEVIQ0FfUEFHRVNJWkUpKTsKKwkJCQlpZiAoICEoKmtwYWdlKSApIHsKKwkJCQkJZWhjYV9nZW5fZXJyKCJwZ2FkZHI9JWx4ICIKKwkJCQkJCSAgICAgImNodW5rLT5wYWdlX2xpc3RbaV09JWx4ICIKKwkJCQkJCSAgICAgImk9JXggbmV4dF80az0lbHggbXI9JXAiLAorCQkJCQkJICAgICBwZ2FkZHIsCisJCQkJCQkgICAgICh1NjQpc2dfZG1hX2FkZHJlc3MoCisJCQkJCQkJICAgICAmY2h1bmstPgorCQkJCQkJCSAgICAgcGFnZV9saXN0W2ldKSwKKwkJCQkJCSAgICAgaSwgcGdpbmZvLT5uZXh0XzRrLCBlX21yKTsKKwkJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQkJZ290byBlaGNhX3NldF9wYWdlYnVmX2V4aXQwOworCQkJCX0KKwkJCQkocGdpbmZvLT5wYWdlXzRrX2NudCkrKzsKKwkJCQkocGdpbmZvLT5uZXh0XzRrKSsrOworCQkJCWtwYWdlKys7CisJCQkJaWYgKHBnaW5mby0+bmV4dF80ayAlCisJCQkJICAgIChQQUdFX1NJWkUgLyBFSENBX1BBR0VTSVpFKSA9PSAwKSB7CisJCQkJCShwZ2luZm8tPnBhZ2VfY250KSsrOworCQkJCQkocGdpbmZvLT5uZXh0X25tYXApKys7CisJCQkJCXBnaW5mby0+bmV4dF80ayA9IDA7CisJCQkJCWkrKzsKKwkJCQl9CisJCQkJaisrOworCQkJCWlmIChqID49IG51bWJlcikgYnJlYWs7CisJCQl9CisJCQlpZiAoKHBnaW5mby0+bmV4dF9ubWFwID49IGNodW5rLT5ubWFwKSAmJgorCQkJICAgIChqID49IG51bWJlcikpIHsKKwkJCQlwZ2luZm8tPm5leHRfbm1hcCA9IDA7CisJCQkJcHJldl9jaHVuayA9IGNodW5rOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChwZ2luZm8tPm5leHRfbm1hcCA+PSBjaHVuay0+bm1hcCkgeworCQkJCXBnaW5mby0+bmV4dF9ubWFwID0gMDsKKwkJCQlwcmV2X2NodW5rID0gY2h1bms7CisJCQl9IGVsc2UgaWYgKGogPj0gbnVtYmVyKQorCQkJCWJyZWFrOworCQkJZWxzZQorCQkJCXByZXZfY2h1bmsgPSBjaHVuazsKKwkJfQorCQlwZ2luZm8tPm5leHRfY2h1bmsgPQorCQkJbGlzdF9wcmVwYXJlX2VudHJ5KHByZXZfY2h1bmssCisJCQkJCSAgICgmKHBnaW5mby0+cmVnaW9uLT5jaHVua19saXN0KSksCisJCQkJCSAgIGxpc3QpOworCX0gZWxzZSBpZiAocGdpbmZvLT50eXBlID09IEVIQ0FfTVJfUEdJX0ZNUikgeworCQkvKiBsb29wIG92ZXIgZGVzaXJlZCBwYWdlX2xpc3QgZW50cmllcyAqLworCQlmbXJsaXN0ID0gcGdpbmZvLT5wYWdlX2xpc3QgKyBwZ2luZm8tPm5leHRfbGlzdGVsZW07CisJCWZvciAoaSA9IDA7IGkgPCBudW1iZXI7IGkrKykgeworCQkJKmtwYWdlID0gcGh5c190b19hYnMoKCpmbXJsaXN0ICYgRUhDQV9QQUdFTUFTSykgKworCQkJCQkgICAgIHBnaW5mby0+bmV4dF80ayAqIEVIQ0FfUEFHRVNJWkUpOworCQkJaWYgKCAhKCprcGFnZSkgKSB7CisJCQkJZWhjYV9nZW5fZXJyKCIqZm1ybGlzdD0lbHggZm1ybGlzdD0lcCAiCisJCQkJCSAgICAgIm5leHRfbGlzdGVsZW09JWx4IG5leHRfNGs9JWx4IiwKKwkJCQkJICAgICAqZm1ybGlzdCwgZm1ybGlzdCwKKwkJCQkJICAgICBwZ2luZm8tPm5leHRfbGlzdGVsZW0sCisJCQkJCSAgICAgcGdpbmZvLT5uZXh0XzRrKTsKKwkJCQlyZXQgPSAtRUZBVUxUOworCQkJCWdvdG8gZWhjYV9zZXRfcGFnZWJ1Zl9leGl0MDsKKwkJCX0KKwkJCShwZ2luZm8tPnBhZ2VfNGtfY250KSsrOworCQkJKHBnaW5mby0+bmV4dF80aykrKzsKKwkJCWtwYWdlKys7CisJCQlpZiAocGdpbmZvLT5uZXh0XzRrICUKKwkJCSAgICAoZV9tci0+Zm1yX3BhZ2Vfc2l6ZSAvIEVIQ0FfUEFHRVNJWkUpID09IDApIHsKKwkJCQkocGdpbmZvLT5wYWdlX2NudCkrKzsKKwkJCQkocGdpbmZvLT5uZXh0X2xpc3RlbGVtKSsrOworCQkJCWZtcmxpc3QrKzsKKwkJCQlwZ2luZm8tPm5leHRfNGsgPSAwOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZWhjYV9nZW5fZXJyKCJiYWQgcGdpbmZvLT50eXBlPSV4IiwgcGdpbmZvLT50eXBlKTsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBlaGNhX3NldF9wYWdlYnVmX2V4aXQwOworCX0KKworZWhjYV9zZXRfcGFnZWJ1Zl9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2dlbl9lcnIoInJldD0leCBlX21yPSVwIHBnaW5mbz0lcCB0eXBlPSV4IG51bV9wYWdlcz0lbHggIgorCQkJICAgICAibnVtXzRrPSVseCBuZXh0X2J1Zj0lbHggbmV4dF80az0lbHggbnVtYmVyPSV4ICIKKwkJCSAgICAgImtwYWdlPSVwIHBhZ2VfY250PSVseCBwYWdlXzRrX2NudD0lbHggaT0leCAiCisJCQkgICAgICJuZXh0X2xpc3RlbGVtPSVseCByZWdpb249JXAgbmV4dF9jaHVuaz0lcCAiCisJCQkgICAgICJuZXh0X25tYXA9JWx4IiwgcmV0LCBlX21yLCBwZ2luZm8sIHBnaW5mby0+dHlwZSwKKwkJCSAgICAgcGdpbmZvLT5udW1fcGFnZXMsIHBnaW5mby0+bnVtXzRrLAorCQkJICAgICBwZ2luZm8tPm5leHRfYnVmLCBwZ2luZm8tPm5leHRfNGssIG51bWJlciwga3BhZ2UsCisJCQkgICAgIHBnaW5mby0+cGFnZV9jbnQsIHBnaW5mby0+cGFnZV80a19jbnQsIGksCisJCQkgICAgIHBnaW5mby0+bmV4dF9saXN0ZWxlbSwgcGdpbmZvLT5yZWdpb24sCisJCQkgICAgIHBnaW5mby0+bmV4dF9jaHVuaywgcGdpbmZvLT5uZXh0X25tYXApOworCXJldHVybiByZXQ7Cit9IC8qIGVuZCBlaGNhX3NldF9wYWdlYnVmKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogc2V0dXAgMSBwYWdlIGZyb20gcGFnZSBpbmZvIHBhZ2UgYnVmZmVyICovCitpbnQgZWhjYV9zZXRfcGFnZWJ1Zl8xKHN0cnVjdCBlaGNhX21yICplX21yLAorCQkgICAgICAgc3RydWN0IGVoY2FfbXJfcGdpbmZvICpwZ2luZm8sCisJCSAgICAgICB1NjQgKnJwYWdlKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBpYl9waHlzX2J1ZiAqdG1wX3BidWY7CisJdTY0ICpmbXJsaXN0OworCXN0cnVjdCBpYl91bWVtX2NodW5rICpjaHVuazsKKwlzdHJ1Y3QgaWJfdW1lbV9jaHVuayAqcHJldl9jaHVuazsKKwl1NjQgcGdhZGRyLCBudW00aywgb2ZmczRrOworCisJaWYgKHBnaW5mby0+dHlwZSA9PSBFSENBX01SX1BHSV9QSFlTKSB7CisJCS8qIHNhbml0eSBjaGVjayAqLworCQlpZiAoKHBnaW5mby0+cGFnZV9jbnQgPj0gcGdpbmZvLT5udW1fcGFnZXMpIHx8CisJCSAgICAocGdpbmZvLT5wYWdlXzRrX2NudCA+PSBwZ2luZm8tPm51bV80aykpIHsKKwkJCWVoY2FfZ2VuX2VycigicGFnZV9jbnQgPj0gbnVtX3BhZ2VzLCBwYWdlX2NudD0lbHggIgorCQkJCSAgICAgIm51bV9wYWdlcz0lbHggcGFnZV80a19jbnQ9JWx4IG51bV80az0lbHgiLAorCQkJCSAgICAgcGdpbmZvLT5wYWdlX2NudCwgcGdpbmZvLT5udW1fcGFnZXMsCisJCQkJICAgICBwZ2luZm8tPnBhZ2VfNGtfY250LCBwZ2luZm8tPm51bV80ayk7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJZ290byBlaGNhX3NldF9wYWdlYnVmXzFfZXhpdDA7CisJCX0KKwkJdG1wX3BidWYgPSBwZ2luZm8tPnBoeXNfYnVmX2FycmF5ICsgcGdpbmZvLT5uZXh0X2J1ZjsKKwkJbnVtNGsgID0gKCh0bXBfcGJ1Zi0+YWRkciAlIEVIQ0FfUEFHRVNJWkUpICsgdG1wX3BidWYtPnNpemUgKworCQkJICBFSENBX1BBR0VTSVpFIC0gMSkgLyBFSENBX1BBR0VTSVpFOworCQlvZmZzNGsgPSAodG1wX3BidWYtPmFkZHIgJiB+UEFHRV9NQVNLKSAvIEVIQ0FfUEFHRVNJWkU7CisJCSpycGFnZSA9IHBoeXNfdG9fYWJzKCh0bXBfcGJ1Zi0+YWRkciAmIEVIQ0FfUEFHRU1BU0spICsKKwkJCQkgICAgIChwZ2luZm8tPm5leHRfNGsgKiBFSENBX1BBR0VTSVpFKSk7CisJCWlmICggISgqcnBhZ2UpICYmIHRtcF9wYnVmLT5hZGRyICkgeworCQkJZWhjYV9nZW5fZXJyKCJ0bXBfcGJ1Zi0+YWRkcj0lbHgiCisJCQkJICAgICAiIHRtcF9wYnVmLT5zaXplPSVseCBuZXh0XzRrPSVseCIsCisJCQkJICAgICB0bXBfcGJ1Zi0+YWRkciwgdG1wX3BidWYtPnNpemUsCisJCQkJICAgICBwZ2luZm8tPm5leHRfNGspOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZWhjYV9zZXRfcGFnZWJ1Zl8xX2V4aXQwOworCQl9CisJCShwZ2luZm8tPnBhZ2VfNGtfY250KSsrOworCQkocGdpbmZvLT5uZXh0XzRrKSsrOworCQlpZiAocGdpbmZvLT5uZXh0XzRrICUgKFBBR0VfU0laRSAvIEVIQ0FfUEFHRVNJWkUpID09IDApCisJCQkocGdpbmZvLT5wYWdlX2NudCkrKzsKKwkJaWYgKHBnaW5mby0+bmV4dF80ayA+PSBvZmZzNGsgKyBudW00aykgeworCQkJKHBnaW5mby0+bmV4dF9idWYpKys7CisJCQlwZ2luZm8tPm5leHRfNGsgPSAwOworCQl9CisJfSBlbHNlIGlmIChwZ2luZm8tPnR5cGUgPT0gRUhDQV9NUl9QR0lfVVNFUikgeworCQljaHVuayAgICAgID0gcGdpbmZvLT5uZXh0X2NodW5rOworCQlwcmV2X2NodW5rID0gcGdpbmZvLT5uZXh0X2NodW5rOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlKGNodW5rLAorCQkJCQkgICAgICgmKHBnaW5mby0+cmVnaW9uLT5jaHVua19saXN0KSksCisJCQkJCSAgICAgbGlzdCkgeworCQkJcGdhZGRyID0gKCBwYWdlX3RvX3BmbihjaHVuay0+cGFnZV9saXN0WworCQkJCQkJICAgICAgIHBnaW5mby0+bmV4dF9ubWFwXS5wYWdlKQorCQkJCSAgIDw8IFBBR0VfU0hJRlQpOworCQkJKnJwYWdlID0gcGh5c190b19hYnMocGdhZGRyICsKKwkJCQkJICAgICAocGdpbmZvLT5uZXh0XzRrICogRUhDQV9QQUdFU0laRSkpOworCQkJaWYgKCAhKCpycGFnZSkgKSB7CisJCQkJZWhjYV9nZW5fZXJyKCJwZ2FkZHI9JWx4IGNodW5rLT5wYWdlX2xpc3RbXT0lbHgiCisJCQkJCSAgICAgIiBuZXh0X25tYXA9JWx4IG5leHRfNGs9JWx4IG1yPSVwIiwKKwkJCQkJICAgICBwZ2FkZHIsICh1NjQpc2dfZG1hX2FkZHJlc3MoCisJCQkJCQkgICAgICZjaHVuay0+cGFnZV9saXN0WworCQkJCQkJCSAgICAgcGdpbmZvLT4KKwkJCQkJCQkgICAgIG5leHRfbm1hcF0pLAorCQkJCQkgICAgIHBnaW5mby0+bmV4dF9ubWFwLCBwZ2luZm8tPm5leHRfNGssCisJCQkJCSAgICAgZV9tcik7CisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCQlnb3RvIGVoY2Ffc2V0X3BhZ2VidWZfMV9leGl0MDsKKwkJCX0KKwkJCShwZ2luZm8tPnBhZ2VfNGtfY250KSsrOworCQkJKHBnaW5mby0+bmV4dF80aykrKzsKKwkJCWlmIChwZ2luZm8tPm5leHRfNGsgJQorCQkJICAgIChQQUdFX1NJWkUgLyBFSENBX1BBR0VTSVpFKSA9PSAwKSB7CisJCQkJKHBnaW5mby0+cGFnZV9jbnQpKys7CisJCQkJKHBnaW5mby0+bmV4dF9ubWFwKSsrOworCQkJCXBnaW5mby0+bmV4dF80ayA9IDA7CisJCQl9CisJCQlpZiAocGdpbmZvLT5uZXh0X25tYXAgPj0gY2h1bmstPm5tYXApIHsKKwkJCQlwZ2luZm8tPm5leHRfbm1hcCA9IDA7CisJCQkJcHJldl9jaHVuayA9IGNodW5rOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJcGdpbmZvLT5uZXh0X2NodW5rID0KKwkJCWxpc3RfcHJlcGFyZV9lbnRyeShwcmV2X2NodW5rLAorCQkJCQkgICAoJihwZ2luZm8tPnJlZ2lvbi0+Y2h1bmtfbGlzdCkpLAorCQkJCQkgICBsaXN0KTsKKwl9IGVsc2UgaWYgKHBnaW5mby0+dHlwZSA9PSBFSENBX01SX1BHSV9GTVIpIHsKKwkJZm1ybGlzdCA9IHBnaW5mby0+cGFnZV9saXN0ICsgcGdpbmZvLT5uZXh0X2xpc3RlbGVtOworCQkqcnBhZ2UgPSBwaHlzX3RvX2FicygoKmZtcmxpc3QgJiBFSENBX1BBR0VNQVNLKSArCisJCQkJICAgICBwZ2luZm8tPm5leHRfNGsgKiBFSENBX1BBR0VTSVpFKTsKKwkJaWYgKCAhKCpycGFnZSkgKSB7CisJCQllaGNhX2dlbl9lcnIoIipmbXJsaXN0PSVseCBmbXJsaXN0PSVwICIKKwkJCQkgICAgICJuZXh0X2xpc3RlbGVtPSVseCBuZXh0XzRrPSVseCIsCisJCQkJICAgICAqZm1ybGlzdCwgZm1ybGlzdCwgcGdpbmZvLT5uZXh0X2xpc3RlbGVtLAorCQkJCSAgICAgcGdpbmZvLT5uZXh0XzRrKTsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlnb3RvIGVoY2Ffc2V0X3BhZ2VidWZfMV9leGl0MDsKKwkJfQorCQkocGdpbmZvLT5wYWdlXzRrX2NudCkrKzsKKwkJKHBnaW5mby0+bmV4dF80aykrKzsKKwkJaWYgKHBnaW5mby0+bmV4dF80ayAlCisJCSAgICAoZV9tci0+Zm1yX3BhZ2Vfc2l6ZSAvIEVIQ0FfUEFHRVNJWkUpID09IDApIHsKKwkJCShwZ2luZm8tPnBhZ2VfY250KSsrOworCQkJKHBnaW5mby0+bmV4dF9saXN0ZWxlbSkrKzsKKwkJCXBnaW5mby0+bmV4dF80ayA9IDA7CisJCX0KKwl9IGVsc2UgeworCQllaGNhX2dlbl9lcnIoImJhZCBwZ2luZm8tPnR5cGU9JXgiLCBwZ2luZm8tPnR5cGUpOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGVoY2Ffc2V0X3BhZ2VidWZfMV9leGl0MDsKKwl9CisKK2VoY2Ffc2V0X3BhZ2VidWZfMV9leGl0MDoKKwlpZiAocmV0KQorCQllaGNhX2dlbl9lcnIoInJldD0leCBlX21yPSVwIHBnaW5mbz0lcCB0eXBlPSV4IG51bV9wYWdlcz0lbHggIgorCQkJICAgICAibnVtXzRrPSVseCBuZXh0X2J1Zj0lbHggbmV4dF80az0lbHggcnBhZ2U9JXAgIgorCQkJICAgICAicGFnZV9jbnQ9JWx4IHBhZ2VfNGtfY250PSVseCBuZXh0X2xpc3RlbGVtPSVseCAiCisJCQkgICAgICJyZWdpb249JXAgbmV4dF9jaHVuaz0lcCBuZXh0X25tYXA9JWx4IiwgcmV0LCBlX21yLAorCQkJICAgICBwZ2luZm8sIHBnaW5mby0+dHlwZSwgcGdpbmZvLT5udW1fcGFnZXMsCisJCQkgICAgIHBnaW5mby0+bnVtXzRrLCBwZ2luZm8tPm5leHRfYnVmLCBwZ2luZm8tPm5leHRfNGssCisJCQkgICAgIHJwYWdlLCBwZ2luZm8tPnBhZ2VfY250LCBwZ2luZm8tPnBhZ2VfNGtfY250LAorCQkJICAgICBwZ2luZm8tPm5leHRfbGlzdGVsZW0sIHBnaW5mby0+cmVnaW9uLAorCQkJICAgICBwZ2luZm8tPm5leHRfY2h1bmssIHBnaW5mby0+bmV4dF9ubWFwKTsKKwlyZXR1cm4gcmV0OworfSAvKiBlbmQgZWhjYV9zZXRfcGFnZWJ1Zl8xKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIGNoZWNrIE1SIGlmIGl0IGlzIGEgbWF4LU1SLCBpLmUuIHVzZXMgd2hvbGUgbWVtb3J5CisgKiBpbiBjYXNlIGl0J3MgYSBtYXgtTVIgMSBpcyByZXR1cm5lZCwgZWxzZSAwCisgKi8KK2ludCBlaGNhX21yX2lzX21heG1yKHU2NCBzaXplLAorCQkgICAgIHU2NCAqaW92YV9zdGFydCkKK3sKKwkvKiBhIE1SIGlzIHRyZWF0ZWQgYXMgbWF4LU1SIG9ubHkgaWYgaXQgZml0cyBmb2xsb3dpbmc6ICovCisJaWYgKChzaXplID09ICgodTY0KWhpZ2hfbWVtb3J5IC0gUEFHRV9PRkZTRVQpKSAmJgorCSAgICAoaW92YV9zdGFydCA9PSAodm9pZCopS0VSTkVMQkFTRSkpIHsKKwkJZWhjYV9nZW5fZGJnKCJ0aGlzIGlzIGEgbWF4LU1SIik7CisJCXJldHVybiAxOworCX0gZWxzZQorCQlyZXR1cm4gMDsKK30gLyogZW5kIGVoY2FfbXJfaXNfbWF4bXIoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtYXAgYWNjZXNzIGNvbnRyb2wgZm9yIE1SL01XLiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgTVIgYW5kIE1XLiAqLwordm9pZCBlaGNhX21ybXdfbWFwX2FjbChpbnQgaWJfYWNsLAorCQkgICAgICAgdTMyICpoaXB6X2FjbCkKK3sKKwkqaGlwel9hY2wgPSAwOworCWlmIChpYl9hY2wgJiBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpCisJCSpoaXB6X2FjbCB8PSBISVBaX0FDQ0VTU0NUUkxfUl9SRUFEOworCWlmIChpYl9hY2wgJiBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKQorCQkqaGlwel9hY2wgfD0gSElQWl9BQ0NFU1NDVFJMX1JfV1JJVEU7CisJaWYgKGliX2FjbCAmIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKQorCQkqaGlwel9hY2wgfD0gSElQWl9BQ0NFU1NDVFJMX1JfQVRPTUlDOworCWlmIChpYl9hY2wgJiBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpCisJCSpoaXB6X2FjbCB8PSBISVBaX0FDQ0VTU0NUUkxfTF9XUklURTsKKwlpZiAoaWJfYWNsICYgSUJfQUNDRVNTX01XX0JJTkQpCisJCSpoaXB6X2FjbCB8PSBISVBaX0FDQ0VTU0NUUkxfTVdfQklORDsKK30gLyogZW5kIGVoY2FfbXJtd19tYXBfYWNsKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogc2V0cyBwYWdlIHNpemUgaW4gaGlweiBhY2Nlc3MgY29udHJvbCBmb3IgTVIvTVcuICovCit2b2lkIGVoY2FfbXJtd19zZXRfcGdzaXplX2hpcHpfYWNsKHUzMiAqaGlwel9hY2wpIC8qSU5PVVQqLworeworCXJldHVybjsgLyogSENBIHN1cHBvcnRzIG9ubHkgNGsgKi8KK30gLyogZW5kIGVoY2FfbXJtd19zZXRfcGdzaXplX2hpcHpfYWNsKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIHJldmVyc2UgbWFwIGFjY2VzcyBjb250cm9sIGZvciBNUi9NVy4KKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBNUiBhbmQgTVcuCisgKi8KK3ZvaWQgZWhjYV9tcm13X3JldmVyc2VfbWFwX2FjbChjb25zdCB1MzIgKmhpcHpfYWNsLAorCQkJICAgICAgIGludCAqaWJfYWNsKSAvKk9VVCovCit7CisJKmliX2FjbCA9IDA7CisJaWYgKCpoaXB6X2FjbCAmIEhJUFpfQUNDRVNTQ1RSTF9SX1JFQUQpCisJCSppYl9hY2wgfD0gSUJfQUNDRVNTX1JFTU9URV9SRUFEOworCWlmICgqaGlwel9hY2wgJiBISVBaX0FDQ0VTU0NUUkxfUl9XUklURSkKKwkJKmliX2FjbCB8PSBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFOworCWlmICgqaGlwel9hY2wgJiBISVBaX0FDQ0VTU0NUUkxfUl9BVE9NSUMpCisJCSppYl9hY2wgfD0gSUJfQUNDRVNTX1JFTU9URV9BVE9NSUM7CisJaWYgKCpoaXB6X2FjbCAmIEhJUFpfQUNDRVNTQ1RSTF9MX1dSSVRFKQorCQkqaWJfYWNsIHw9IElCX0FDQ0VTU19MT0NBTF9XUklURTsKKwlpZiAoKmhpcHpfYWNsICYgSElQWl9BQ0NFU1NDVFJMX01XX0JJTkQpCisJCSppYl9hY2wgfD0gSUJfQUNDRVNTX01XX0JJTkQ7Cit9IC8qIGVuZCBlaGNhX21ybXdfcmV2ZXJzZV9tYXBfYWNsKCkgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogbWFwIEhJUFogcmMgdG8gSUIgcmV0Y29kZXMgZm9yIE1SL01XIGFsbG9jYXRpb25zCisgKiBVc2VkIGZvciBoaXB6X21yX3JlZ19hbGxvYyBhbmQgaGlwel9td19hbGxvYy4KKyAqLworaW50IGVoY2FfbXJtd19tYXBfaHJjX2FsbG9jKGNvbnN0IHU2NCBoaXB6X3JjKQoreworCXN3aXRjaCAoaGlwel9yYykgeworCWNhc2UgSF9TVUNDRVNTOgkgICAgICAgICAgICAgLyogc3VjY2Vzc2Z1bCBjb21wbGV0aW9uICovCisJCXJldHVybiAwOworCWNhc2UgSF9BREFQVEVSX1BBUk06ICAgICAgICAgLyogaW52YWxpZCBhZGFwdGVyIGhhbmRsZSAqLworCWNhc2UgSF9SVF9QQVJNOiAgICAgICAgICAgICAgLyogaW52YWxpZCByZXNvdXJjZSB0eXBlICovCisJY2FzZSBIX05PVF9FTk9VR0hfUkVTT1VSQ0VTOiAvKiBpbnN1ZmZpY2llbnQgcmVzb3VyY2VzICovCisJY2FzZSBIX01MRU5HVEhfUEFSTTogICAgICAgICAvKiBpbnZhbGlkIG1lbW9yeSBsZW5ndGggKi8KKwljYXNlIEhfTUVNX0FDQ0VTU19QQVJNOiAgICAgIC8qIGludmFsaWQgYWNjZXNzIGNvbnRyb2xzICovCisJY2FzZSBIX0NPTlNUUkFJTkVEOiAgICAgICAgICAvKiByZXNvdXJjZSBjb25zdHJhaW50ICovCisJCXJldHVybiAtRUlOVkFMOworCWNhc2UgSF9CVVNZOiAgICAgICAgICAgICAgICAgLyogbG9uZyBidXN5ICovCisJCXJldHVybiAtRUJVU1k7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfSAvKiBlbmQgZWhjYV9tcm13X21hcF9ocmNfYWxsb2MoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogbWFwIEhJUFogcmMgdG8gSUIgcmV0Y29kZXMgZm9yIE1SIHJlZ2lzdGVyIHJwYWdlCisgKiBVc2VkIGZvciBoaXB6X2hfcmVnaXN0ZXJfcnBhZ2VfbXIgYXQgcmVnaXN0ZXJpbmcgbGFzdCBwYWdlCisgKi8KK2ludCBlaGNhX21ybXdfbWFwX2hyY19ycnBnX2xhc3QoY29uc3QgdTY0IGhpcHpfcmMpCit7CisJc3dpdGNoIChoaXB6X3JjKSB7CisJY2FzZSBIX1NVQ0NFU1M6ICAgICAgICAgLyogcmVnaXN0cmF0aW9uIGNvbXBsZXRlICovCisJCXJldHVybiAwOworCWNhc2UgSF9QQUdFX1JFR0lTVEVSRUQ6CS8qIHBhZ2UgcmVnaXN0ZXJlZCAqLworCWNhc2UgSF9BREFQVEVSX1BBUk06ICAgIC8qIGludmFsaWQgYWRhcHRlciBoYW5kbGUgKi8KKwljYXNlIEhfUkhfUEFSTTogICAgICAgICAvKiBpbnZhbGlkIHJlc291cmNlIGhhbmRsZSAqLworLyoJY2FzZSBIX1FUX1BBUk06ICAgICAgICAgICAgaW52YWxpZCBxdWV1ZSB0eXBlICovCisJY2FzZSBIX1BBUkFNRVRFUjogICAgICAgLyoKKwkJCQkgKiBpbnZhbGlkIGxvZ2ljYWwgYWRkcmVzcywKKwkJCQkgKiBvciBjb3VudCB6ZXJvIG9yIGdyZWF0ZXIgNTEyCisJCQkJICovCisJY2FzZSBIX1RBQkxFX0ZVTEw6ICAgICAgLyogcGFnZSB0YWJsZSBmdWxsICovCisJY2FzZSBIX0hBUkRXQVJFOiAgICAgICAgLyogSENBIG5vdCBvcGVyYXRpb25hbCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEhfQlVTWTogICAgICAgICAgICAvKiBsb25nIGJ1c3kgKi8KKwkJcmV0dXJuIC1FQlVTWTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9IC8qIGVuZCBlaGNhX21ybXdfbWFwX2hyY19ycnBnX2xhc3QoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogbWFwIEhJUFogcmMgdG8gSUIgcmV0Y29kZXMgZm9yIE1SIHJlZ2lzdGVyIHJwYWdlCisgKiBVc2VkIGZvciBoaXB6X2hfcmVnaXN0ZXJfcnBhZ2VfbXIgYXQgcmVnaXN0ZXJpbmcgb25lIHBhZ2UsIGJ1dCBub3QgbGFzdCBwYWdlCisgKi8KK2ludCBlaGNhX21ybXdfbWFwX2hyY19ycnBnX25vdGxhc3QoY29uc3QgdTY0IGhpcHpfcmMpCit7CisJc3dpdGNoIChoaXB6X3JjKSB7CisJY2FzZSBIX1BBR0VfUkVHSVNURVJFRDoJLyogcGFnZSByZWdpc3RlcmVkICovCisJCXJldHVybiAwOworCWNhc2UgSF9TVUNDRVNTOiAgICAgICAgIC8qIHJlZ2lzdHJhdGlvbiBjb21wbGV0ZSAqLworCWNhc2UgSF9BREFQVEVSX1BBUk06ICAgIC8qIGludmFsaWQgYWRhcHRlciBoYW5kbGUgKi8KKwljYXNlIEhfUkhfUEFSTTogICAgICAgICAvKiBpbnZhbGlkIHJlc291cmNlIGhhbmRsZSAqLworLyoJY2FzZSBIX1FUX1BBUk06ICAgICAgICAgICAgaW52YWxpZCBxdWV1ZSB0eXBlICovCisJY2FzZSBIX1BBUkFNRVRFUjogICAgICAgLyoKKwkJCQkgKiBpbnZhbGlkIGxvZ2ljYWwgYWRkcmVzcywKKwkJCQkgKiBvciBjb3VudCB6ZXJvIG9yIGdyZWF0ZXIgNTEyCisJCQkJICovCisJY2FzZSBIX1RBQkxFX0ZVTEw6ICAgICAgLyogcGFnZSB0YWJsZSBmdWxsICovCisJY2FzZSBIX0hBUkRXQVJFOiAgICAgICAgLyogSENBIG5vdCBvcGVyYXRpb25hbCAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEhfQlVTWTogICAgICAgICAgICAvKiBsb25nIGJ1c3kgKi8KKwkJcmV0dXJuIC1FQlVTWTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9IC8qIGVuZCBlaGNhX21ybXdfbWFwX2hyY19ycnBnX25vdGxhc3QoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBtYXAgSElQWiByYyB0byBJQiByZXRjb2RlcyBmb3IgTVIgcXVlcnkuIFVzZWQgZm9yIGhpcHpfbXJfcXVlcnkuICovCitpbnQgZWhjYV9tcm13X21hcF9ocmNfcXVlcnlfbXIoY29uc3QgdTY0IGhpcHpfcmMpCit7CisJc3dpdGNoIChoaXB6X3JjKSB7CisJY2FzZSBIX1NVQ0NFU1M6CSAgICAgICAgICAgICAvKiBzdWNjZXNzZnVsIGNvbXBsZXRpb24gKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBIX0FEQVBURVJfUEFSTTogICAgICAgICAvKiBpbnZhbGlkIGFkYXB0ZXIgaGFuZGxlICovCisJY2FzZSBIX1JIX1BBUk06ICAgICAgICAgICAgICAvKiBpbnZhbGlkIHJlc291cmNlIGhhbmRsZSAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEhfQlVTWTogICAgICAgICAgICAgICAgIC8qIGxvbmcgYnVzeSAqLworCQlyZXR1cm4gLUVCVVNZOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30gLyogZW5kIGVoY2FfbXJtd19tYXBfaHJjX3F1ZXJ5X21yKCkgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBtYXAgSElQWiByYyB0byBJQiByZXRjb2RlcyBmb3IgZnJlZWluZyBNUiByZXNvdXJjZQorICogVXNlZCBmb3IgaGlwel9oX2ZyZWVfcmVzb3VyY2VfbXIKKyAqLworaW50IGVoY2FfbXJtd19tYXBfaHJjX2ZyZWVfbXIoY29uc3QgdTY0IGhpcHpfcmMpCit7CisJc3dpdGNoIChoaXB6X3JjKSB7CisJY2FzZSBIX1NVQ0NFU1M6ICAgICAgLyogcmVzb3VyY2UgZnJlZWQgKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBIX0FEQVBURVJfUEFSTTogLyogaW52YWxpZCBhZGFwdGVyIGhhbmRsZSAqLworCWNhc2UgSF9SSF9QQVJNOiAgICAgIC8qIGludmFsaWQgcmVzb3VyY2UgaGFuZGxlICovCisJY2FzZSBIX1JfU1RBVEU6ICAgICAgLyogaW52YWxpZCByZXNvdXJjZSBzdGF0ZSAqLworCWNhc2UgSF9IQVJEV0FSRTogICAgIC8qIEhDQSBub3Qgb3BlcmF0aW9uYWwgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBIX1JFU09VUkNFOiAgICAgLyogUmVzb3VyY2UgaW4gdXNlICovCisJY2FzZSBIX0JVU1k6ICAgICAgICAgLyogbG9uZyBidXN5ICovCisJCXJldHVybiAtRUJVU1k7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfSAvKiBlbmQgZWhjYV9tcm13X21hcF9ocmNfZnJlZV9tcigpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBtYXAgSElQWiByYyB0byBJQiByZXRjb2RlcyBmb3IgZnJlZWluZyBNVyByZXNvdXJjZQorICogVXNlZCBmb3IgaGlwel9oX2ZyZWVfcmVzb3VyY2VfbXcKKyAqLworaW50IGVoY2FfbXJtd19tYXBfaHJjX2ZyZWVfbXcoY29uc3QgdTY0IGhpcHpfcmMpCit7CisJc3dpdGNoIChoaXB6X3JjKSB7CisJY2FzZSBIX1NVQ0NFU1M6CSAgICAgLyogcmVzb3VyY2UgZnJlZWQgKi8KKwkJcmV0dXJuIDA7CisJY2FzZSBIX0FEQVBURVJfUEFSTTogLyogaW52YWxpZCBhZGFwdGVyIGhhbmRsZSAqLworCWNhc2UgSF9SSF9QQVJNOiAgICAgIC8qIGludmFsaWQgcmVzb3VyY2UgaGFuZGxlICovCisJY2FzZSBIX1JfU1RBVEU6ICAgICAgLyogaW52YWxpZCByZXNvdXJjZSBzdGF0ZSAqLworCWNhc2UgSF9IQVJEV0FSRTogICAgIC8qIEhDQSBub3Qgb3BlcmF0aW9uYWwgKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBIX1JFU09VUkNFOiAgICAgLyogUmVzb3VyY2UgaW4gdXNlICovCisJY2FzZSBIX0JVU1k6ICAgICAgICAgLyogbG9uZyBidXN5ICovCisJCXJldHVybiAtRUJVU1k7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfSAvKiBlbmQgZWhjYV9tcm13X21hcF9ocmNfZnJlZV9tdygpICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBtYXAgSElQWiByYyB0byBJQiByZXRjb2RlcyBmb3IgU01SIHJlZ2lzdHJhdGlvbnMKKyAqIFVzZWQgZm9yIGhpcHpfaF9yZWdpc3Rlcl9zbXIuCisgKi8KK2ludCBlaGNhX21ybXdfbWFwX2hyY19yZWdfc21yKGNvbnN0IHU2NCBoaXB6X3JjKQoreworCXN3aXRjaCAoaGlwel9yYykgeworCWNhc2UgSF9TVUNDRVNTOgkgICAgICAgICAgICAgLyogc3VjY2Vzc2Z1bCBjb21wbGV0aW9uICovCisJCXJldHVybiAwOworCWNhc2UgSF9BREFQVEVSX1BBUk06ICAgICAgICAgLyogaW52YWxpZCBhZGFwdGVyIGhhbmRsZSAqLworCWNhc2UgSF9SSF9QQVJNOiAgICAgICAgICAgICAgLyogaW52YWxpZCByZXNvdXJjZSBoYW5kbGUgKi8KKwljYXNlIEhfTUVNX1BBUk06ICAgICAgICAgICAgIC8qIGludmFsaWQgTVIgdmlydHVhbCBhZGRyZXNzICovCisJY2FzZSBIX01FTV9BQ0NFU1NfUEFSTTogICAgICAvKiBpbnZhbGlkIGFjY2VzcyBjb250cm9scyAqLworCWNhc2UgSF9OT1RfRU5PVUdIX1JFU09VUkNFUzogLyogaW5zdWZmaWNpZW50IHJlc291cmNlcyAqLworCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEhfQlVTWTogICAgICAgICAgICAgICAgIC8qIGxvbmcgYnVzeSAqLworCQlyZXR1cm4gLUVCVVNZOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30gLyogZW5kIGVoY2FfbXJtd19tYXBfaHJjX3JlZ19zbXIoKSAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogTVIgZGVzdHJ1Y3RvciBhbmQgY29uc3RydWN0b3IKKyAqIHVzZWQgaW4gUmVyZWdpc3RlciBNUiB2ZXJiLCBzZXRzIGFsbCBmaWVsZHMgaW4gZWhjYV9tcl90IHRvIDAsCisgKiBleGNlcHQgc3RydWN0IGliX21yIGFuZCBzcGlubG9jaworICovCit2b2lkIGVoY2FfbXJfZGVsZXRlbmV3KHN0cnVjdCBlaGNhX21yICptcikKK3sKKwltci0+ZmxhZ3MgICAgICAgICA9IDA7CisJbXItPm51bV9wYWdlcyAgICAgPSAwOworCW1yLT5udW1fNGsgICAgICAgID0gMDsKKwltci0+YWNsICAgICAgICAgICA9IDA7CisJbXItPnN0YXJ0ICAgICAgICAgPSBOVUxMOworCW1yLT5mbXJfcGFnZV9zaXplID0gMDsKKwltci0+Zm1yX21heF9wYWdlcyA9IDA7CisJbXItPmZtcl9tYXhfbWFwcyAgPSAwOworCW1yLT5mbXJfbWFwX2NudCAgID0gMDsKKwltZW1zZXQoJm1yLT5pcHpfbXJfaGFuZGxlLCAwLCBzaXplb2YobXItPmlwel9tcl9oYW5kbGUpKTsKKwltZW1zZXQoJm1yLT5nYWxwYXMsIDAsIHNpemVvZihtci0+Z2FscGFzKSk7CisJbXItPm5yX29mX3BhZ2VzICAgPSAwOworCW1yLT5wYWdlYXJyYXkgICAgID0gTlVMTDsKK30gLyogZW5kIGVoY2FfbXJfZGVsZXRlbmV3KCkgKi8KKworaW50IGVoY2FfaW5pdF9tcm13X2NhY2hlKHZvaWQpCit7CisJbXJfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZWhjYV9jYWNoZV9tciIsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGVoY2FfbXIpLCAwLAorCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCSAgICAgTlVMTCwgTlVMTCk7CisJaWYgKCFtcl9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJbXdfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZWhjYV9jYWNoZV9tdyIsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGVoY2FfbXcpLCAwLAorCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCSAgICAgTlVMTCwgTlVMTCk7CisJaWYgKCFtd19jYWNoZSkgeworCQlrbWVtX2NhY2hlX2Rlc3Ryb3kobXJfY2FjaGUpOworCQltcl9jYWNoZSA9IE5VTEw7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCBlaGNhX2NsZWFudXBfbXJtd19jYWNoZSh2b2lkKQoreworCWlmIChtcl9jYWNoZSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KG1yX2NhY2hlKTsKKwlpZiAobXdfY2FjaGUpCisJCWttZW1fY2FjaGVfZGVzdHJveShtd19jYWNoZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfbXJtdy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5MzZlNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX21ybXcuaApAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgTVIvTVcgZGVjbGFyYXRpb25zIGFuZCBpbmxpbmUgZnVuY3Rpb25zCisgKgorICogIEF1dGhvcnM6IERpZXRtYXIgRGVja2VyIDxkZGVja2VyQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9FSENBX01STVdfSF8KKyNkZWZpbmUgX0VIQ0FfTVJNV19IXworCitpbnQgZWhjYV9yZWdfbXIoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwKKwkJc3RydWN0IGVoY2FfbXIgKmVfbXIsCisJCXU2NCAqaW92YV9zdGFydCwKKwkJdTY0IHNpemUsCisJCWludCBhY2wsCisJCXN0cnVjdCBlaGNhX3BkICplX3BkLAorCQlzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gKnBnaW5mbywKKwkJdTMyICpsa2V5LAorCQl1MzIgKnJrZXkpOworCitpbnQgZWhjYV9yZWdfbXJfcnBhZ2VzKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCSAgICAgICBzdHJ1Y3QgZWhjYV9tciAqZV9tciwKKwkJICAgICAgIHN0cnVjdCBlaGNhX21yX3BnaW5mbyAqcGdpbmZvKTsKKworaW50IGVoY2FfcmVyZWdfbXIoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwKKwkJICBzdHJ1Y3QgZWhjYV9tciAqZV9tciwKKwkJICB1NjQgKmlvdmFfc3RhcnQsCisJCSAgdTY0IHNpemUsCisJCSAgaW50IG1yX2FjY2Vzc19mbGFncywKKwkJICBzdHJ1Y3QgZWhjYV9wZCAqZV9wZCwKKwkJICBzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gKnBnaW5mbywKKwkJICB1MzIgKmxrZXksCisJCSAgdTMyICpya2V5KTsKKworaW50IGVoY2FfdW5tYXBfb25lX2ZtcihzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkgICAgICAgc3RydWN0IGVoY2FfbXIgKmVfZm1yKTsKKworaW50IGVoY2FfcmVnX3NtcihzdHJ1Y3QgZWhjYV9zaGNhICpzaGNhLAorCQkgc3RydWN0IGVoY2FfbXIgKmVfb3JpZ21yLAorCQkgc3RydWN0IGVoY2FfbXIgKmVfbmV3bXIsCisJCSB1NjQgKmlvdmFfc3RhcnQsCisJCSBpbnQgYWNsLAorCQkgc3RydWN0IGVoY2FfcGQgKmVfcGQsCisJCSB1MzIgKmxrZXksCisJCSB1MzIgKnJrZXkpOworCitpbnQgZWhjYV9yZWdfaW50ZXJuYWxfbWF4bXIoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwKKwkJCSAgICBzdHJ1Y3QgZWhjYV9wZCAqZV9wZCwKKwkJCSAgICBzdHJ1Y3QgZWhjYV9tciAqKm1heG1yKTsKKworaW50IGVoY2FfcmVnX21heG1yKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCSAgIHN0cnVjdCBlaGNhX21yICplX25ld21yLAorCQkgICB1NjQgKmlvdmFfc3RhcnQsCisJCSAgIGludCBhY2wsCisJCSAgIHN0cnVjdCBlaGNhX3BkICplX3BkLAorCQkgICB1MzIgKmxrZXksCisJCSAgIHUzMiAqcmtleSk7CisKK2ludCBlaGNhX2RlcmVnX2ludGVybmFsX21heG1yKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EpOworCitpbnQgZWhjYV9tcl9jaGtfYnVmX2FuZF9jYWxjX3NpemUoc3RydWN0IGliX3BoeXNfYnVmICpwaHlzX2J1Zl9hcnJheSwKKwkJCQkgIGludCBudW1fcGh5c19idWYsCisJCQkJICB1NjQgKmlvdmFfc3RhcnQsCisJCQkJICB1NjQgKnNpemUpOworCitpbnQgZWhjYV9mbXJfY2hlY2tfcGFnZV9saXN0KHN0cnVjdCBlaGNhX21yICplX2ZtciwKKwkJCSAgICAgdTY0ICpwYWdlX2xpc3QsCisJCQkgICAgIGludCBsaXN0X2xlbik7CisKK2ludCBlaGNhX3NldF9wYWdlYnVmKHN0cnVjdCBlaGNhX21yICplX21yLAorCQkgICAgIHN0cnVjdCBlaGNhX21yX3BnaW5mbyAqcGdpbmZvLAorCQkgICAgIHUzMiBudW1iZXIsCisJCSAgICAgdTY0ICprcGFnZSk7CisKK2ludCBlaGNhX3NldF9wYWdlYnVmXzEoc3RydWN0IGVoY2FfbXIgKmVfbXIsCisJCSAgICAgICBzdHJ1Y3QgZWhjYV9tcl9wZ2luZm8gKnBnaW5mbywKKwkJICAgICAgIHU2NCAqcnBhZ2UpOworCitpbnQgZWhjYV9tcl9pc19tYXhtcih1NjQgc2l6ZSwKKwkJICAgICB1NjQgKmlvdmFfc3RhcnQpOworCit2b2lkIGVoY2FfbXJtd19tYXBfYWNsKGludCBpYl9hY2wsCisJCSAgICAgICB1MzIgKmhpcHpfYWNsKTsKKwordm9pZCBlaGNhX21ybXdfc2V0X3Bnc2l6ZV9oaXB6X2FjbCh1MzIgKmhpcHpfYWNsKTsKKwordm9pZCBlaGNhX21ybXdfcmV2ZXJzZV9tYXBfYWNsKGNvbnN0IHUzMiAqaGlwel9hY2wsCisJCQkgICAgICAgaW50ICppYl9hY2wpOworCitpbnQgZWhjYV9tcm13X21hcF9ocmNfYWxsb2MoY29uc3QgdTY0IGhpcHpfcmMpOworCitpbnQgZWhjYV9tcm13X21hcF9ocmNfcnJwZ19sYXN0KGNvbnN0IHU2NCBoaXB6X3JjKTsKKworaW50IGVoY2FfbXJtd19tYXBfaHJjX3JycGdfbm90bGFzdChjb25zdCB1NjQgaGlwel9yYyk7CisKK2ludCBlaGNhX21ybXdfbWFwX2hyY19xdWVyeV9tcihjb25zdCB1NjQgaGlwel9yYyk7CisKK2ludCBlaGNhX21ybXdfbWFwX2hyY19mcmVlX21yKGNvbnN0IHU2NCBoaXB6X3JjKTsKKworaW50IGVoY2FfbXJtd19tYXBfaHJjX2ZyZWVfbXcoY29uc3QgdTY0IGhpcHpfcmMpOworCitpbnQgZWhjYV9tcm13X21hcF9ocmNfcmVnX3Ntcihjb25zdCB1NjQgaGlwel9yYyk7CisKK3ZvaWQgZWhjYV9tcl9kZWxldGVuZXcoc3RydWN0IGVoY2FfbXIgKm1yKTsKKworI2VuZGlmICAvKl9FSENBX01STVdfSF8qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9wZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9wZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjM2NkYzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3BkLmMKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIFBEIGZ1bmN0aW9ucworICoKKyAqICBBdXRob3JzOiBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorCisjaW5jbHVkZSAiZWhjYV90b29scy5oIgorI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcGRfY2FjaGU7CisKK3N0cnVjdCBpYl9wZCAqZWhjYV9hbGxvY19wZChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCisJCQkgICAgc3RydWN0IGliX3Vjb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBlaGNhX3BkICpwZDsKKworCXBkID0ga21lbV9jYWNoZV9hbGxvYyhwZF9jYWNoZSwgU0xBQl9LRVJORUwpOworCWlmICghcGQpIHsKKwkJZWhjYV9lcnIoZGV2aWNlLCAiZGV2aWNlPSVwIGNvbnRleHQ9JXAgb3V0IG9mIG1lbW9yeSIsCisJCQkgZGV2aWNlLCBjb250ZXh0KTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJbWVtc2V0KHBkLCAwLCBzaXplb2Yoc3RydWN0IGVoY2FfcGQpKTsKKwlwZC0+b3ducGlkID0gY3VycmVudC0+dGdpZDsKKworCS8qCisJICogS2VybmVsIFBEOiB3aGVuIGRldmljZSA9IC0xLCAwCisJICogVXNlciAgIFBEOiB3aGVuIGNvbnRleHQgIT0gLTEKKwkgKi8KKwlpZiAoIWNvbnRleHQpIHsKKwkJLyoKKwkJICogS2VybmVsIFBEcyBhZnRlciBpbml0IHJldXNlcyBhbHdheXMKKwkJICogdGhlIG9uZSBjcmVhdGVkIGluIGVoY2Ffc2hjYV9yZW9wZW4oKQorCQkgKi8KKwkJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGNvbnRhaW5lcl9vZihkZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsCisJCQkJCQkgICAgICBpYl9kZXZpY2UpOworCQlwZC0+ZndfcGQudmFsdWUgPSBzaGNhLT5wZC0+ZndfcGQudmFsdWU7CisJfSBlbHNlCisJCXBkLT5md19wZC52YWx1ZSA9ICh1NjQpcGQ7CisKKwlyZXR1cm4gJnBkLT5pYl9wZDsKK30KKworaW50IGVoY2FfZGVhbGxvY19wZChzdHJ1Y3QgaWJfcGQgKnBkKQoreworCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKKwlzdHJ1Y3QgZWhjYV9wZCAqbXlfcGQgPSBjb250YWluZXJfb2YocGQsIHN0cnVjdCBlaGNhX3BkLCBpYl9wZCk7CisKKwlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKKwkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKKwkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJa21lbV9jYWNoZV9mcmVlKHBkX2NhY2hlLAorCQkJY29udGFpbmVyX29mKHBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpKTsKKworCXJldHVybiAwOworfQorCitpbnQgZWhjYV9pbml0X3BkX2NhY2hlKHZvaWQpCit7CisJcGRfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZWhjYV9jYWNoZV9wZCIsCisJCQkJICAgICBzaXplb2Yoc3RydWN0IGVoY2FfcGQpLCAwLAorCQkJCSAgICAgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCSAgICAgTlVMTCwgTlVMTCk7CisJaWYgKCFwZF9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZWhjYV9jbGVhbnVwX3BkX2NhY2hlKHZvaWQpCit7CisJaWYgKHBkX2NhY2hlKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3kocGRfY2FjaGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcwN2QyOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcWVzLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIEhhcmR3YXJlIHJlcXVlc3Qgc3RydWN0dXJlcworICoKKyAqICBBdXRob3JzOiBXYWxlcmkgRm9taW4gPGZvbWluQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgUmVpbmhhcmQgRXJuc3QgPHJlcm5zdEBkZS5pYm0uY29tPgorICogICAgICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2Ugb2YgR1BMIHYyLjAgYW5kIE9wZW5JQgorICogIEJTRC4KKyAqCisgKiBPcGVuSUIgQlNEIExpY2Vuc2UKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaWZuZGVmIF9FSENBX1FFU19IXworI2RlZmluZSBfRUhDQV9RRVNfSF8KKworI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKworLyogdmlydHVhbCBzY2F0dGVyIGdhdGhlciBlbnRyeSB0byBzcGVjaWZ5IHJlbW90ZSBhZHJlc3NlcyB3aXRoIGxlbmd0aCAqLworc3RydWN0IGVoY2FfdnNnZW50cnkgeworCXU2NCB2YWRkcjsKKwl1MzIgbGtleTsKKwl1MzIgbGVuZ3RoOworfTsKKworI2RlZmluZSBHUkhfRkxBR19NQVNLICAgICAgICBFSENBX0JNQVNLX0lCTSg3LDcpCisjZGVmaW5lIEdSSF9JUFZFUlNJT05fTUFTSyAgIEVIQ0FfQk1BU0tfSUJNKDAsMykKKyNkZWZpbmUgR1JIX1RDTEFTU19NQVNLICAgICAgRUhDQV9CTUFTS19JQk0oNCwxMikKKyNkZWZpbmUgR1JIX0ZMT1dMQUJFTF9NQVNLICAgRUhDQV9CTUFTS19JQk0oMTMsMzEpCisjZGVmaW5lIEdSSF9QQVlMRU5fTUFTSyAgICAgIEVIQ0FfQk1BU0tfSUJNKDMyLDQ3KQorI2RlZmluZSBHUkhfTkVYVEhFQURFUl9NQVNLICBFSENBX0JNQVNLX0lCTSg0OCw1NSkKKyNkZWZpbmUgR1JIX0hPUExJTUlUX01BU0sgICAgRUhDQV9CTUFTS19JQk0oNTYsNjMpCisKKy8qCisgKiBVbnJlbGlhYmxlIERhdGFncmFtIEFkZHJlc3MgVmVjdG9yIEZvcm1hdAorICogc2VlIElCVEEgVm9sMSBjaGFwdGVyIDguMyBHbG9iYWwgUm91dGluZyBIZWFkZXIKKyAqLworc3RydWN0IGVoY2FfdWRfYXYgeworCXU4IHNsOworCXU4IGxuaDsKKwl1MTYgZGxpZDsKKwl1OCByZXNlcnZlZDE7CisJdTggcmVzZXJ2ZWQyOworCXU4IHJlc2VydmVkMzsKKwl1OCBzbGlkX3BhdGhfYml0czsKKwl1OCByZXNlcnZlZDQ7CisJdTggaXBkOworCXU4IHJlc2VydmVkNTsKKwl1OCBwbXR1OworCXUzMiByZXNlcnZlZDY7CisJdTY0IHJlc2VydmVkNzsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQl1NjQgd29yZF8wOyAvKiBhbHdheXMgc2V0IHRvIDYgICovCisJCQkvKnNob3VsZCBiZSAweDFCIGZvciBJQiB0cmFuc3BvcnQgKi8KKwkJCXU2NCB3b3JkXzE7CisJCQl1NjQgd29yZF8yOworCQkJdTY0IHdvcmRfMzsKKwkJCXU2NCB3b3JkXzQ7CisJCX0gZ3JoOworCQlzdHJ1Y3QgeworCQkJdTMyIHdkXzA7CisJCQl1MzIgd2RfMTsKKwkJCS8qIERXb3JkXzEgLS0+IFNHSUQgKi8KKworCQkJdTMyIHNnaWRfd2QzOworCQkJdTMyIHNnaWRfd2QyOworCisJCQl1MzIgc2dpZF93ZDE7CisJCQl1MzIgc2dpZF93ZDA7CisJCQkvKiBEV29yZF8zIC0tPiBER0lEICovCisKKwkJCXUzMiBkZ2lkX3dkMzsKKwkJCXUzMiBkZ2lkX3dkMjsKKworCQkJdTMyIGRnaWRfd2QxOworCQkJdTMyIGRnaWRfd2QwOworCQl9IGdyaF9sOworCX07Cit9OworCisvKiBtYXhpbXVtIG51bWJlciBvZiBzZyBlbnRyaWVzIGFsbG93ZWQgaW4gYSBXUUUgKi8KKyNkZWZpbmUgTUFYX1dRRV9TR19FTlRSSUVTIDI1MgorCisjZGVmaW5lIFdRRV9PUFRZUEVfU0VORCAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFdRRV9PUFRZUEVfUkRNQVJFQUQgICAgICAgICAweDQwCisjZGVmaW5lIFdRRV9PUFRZUEVfUkRNQVdSSVRFICAgICAgICAweDIwCisjZGVmaW5lIFdRRV9PUFRZUEVfQ01QU1dBUCAgICAgICAgICAweDEwCisjZGVmaW5lIFdRRV9PUFRZUEVfRkVUQ0hBREQgICAgICAgICAweDA4CisjZGVmaW5lIFdRRV9PUFRZUEVfQklORCAgICAgICAgICAgICAweDA0CisKKyNkZWZpbmUgV1FFX1dSRkxBR19SRVFfU0lHTkFMX0NPTSAgIDB4ODAKKyNkZWZpbmUgV1FFX1dSRkxBR19GRU5DRSAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgV1FFX1dSRkxBR19JTU1fREFUQV9QUkVTRU5UIDB4MjAKKyNkZWZpbmUgV1FFX1dSRkxBR19TT0xJQ19FVkVOVCAgICAgIDB4MTAKKworI2RlZmluZSBXUUVGX0NBQ0hFX0hJTlQgICAgICAgICAgICAgMHg4MAorI2RlZmluZSBXUUVGX0NBQ0hFX0hJTlRfUkRfV1IgICAgICAgMHg0MAorI2RlZmluZSBXUUVGX1RJTUVEX1dRRSAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXUUVGX1BVUkdFICAgICAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBXUUVGX0hJR0hfTklCQkxFICAgICAgICAgICAgMHhGMAorCisjZGVmaW5lIE1XX0JJTkRfQUNDRVNTQ1RSTF9SX1dSSVRFICAgMHg0MAorI2RlZmluZSBNV19CSU5EX0FDQ0VTU0NUUkxfUl9SRUFEICAgIDB4MjAKKyNkZWZpbmUgTVdfQklORF9BQ0NFU1NDVFJMX1JfQVRPTUlDICAweDEwCisKK3N0cnVjdCBlaGNhX3dxZSB7CisJdTY0IHdvcmtfcmVxdWVzdF9pZDsKKwl1OCBvcHR5cGU7CisJdTggd3JfZmxhZzsKKwl1MTYgcGtleWk7CisJdTggd3FlZjsKKwl1OCBucl9vZl9kYXRhX3NlZzsKKwl1MTYgd3FlX3Byb3ZpZGVkX3NsaWQ7CisJdTMyIGRlc3RpbmF0aW9uX3FwX251bWJlcjsKKwl1MzIgcmVzeW5jX3Bzbl9zcXA7CisJdTMyIGxvY2FsX2VlX2NvbnRleHRfcWtleTsKKwl1MzIgaW1tZWRpYXRlX2RhdGE7CisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdTY0IHJlbW90ZV92aXJ0dWFsX2FkcmVzczsKKwkJCXUzMiBya2V5OworCQkJdTMyIHJlc2VydmVkOworCQkJdTY0IGF0b21pY18xc3Rfb3BfZG1hX2xlbjsKKwkJCXU2NCBhdG9taWNfMm5kX29wOworCQkJc3RydWN0IGVoY2FfdnNnZW50cnkgc2dfbGlzdFtNQVhfV1FFX1NHX0VOVFJJRVNdOworCisJCX0gbnVkOworCQlzdHJ1Y3QgeworCQkJdTY0IGVoY2FfdWRfYXZfcHRyOworCQkJdTY0IHJlc2VydmVkMTsKKwkJCXU2NCByZXNlcnZlZDI7CisJCQl1NjQgcmVzZXJ2ZWQzOworCQkJc3RydWN0IGVoY2FfdnNnZW50cnkgc2dfbGlzdFtNQVhfV1FFX1NHX0VOVFJJRVNdOworCQl9IHVkX2F2cDsKKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBlaGNhX3VkX2F2IHVkX2F2OworCQkJc3RydWN0IGVoY2FfdnNnZW50cnkgc2dfbGlzdFtNQVhfV1FFX1NHX0VOVFJJRVMgLQorCQkJCQkJICAgICAyXTsKKwkJfSB1ZF9hdjsKKwkJc3RydWN0IHsKKwkJCXU2NCByZXNlcnZlZDA7CisJCQl1NjQgcmVzZXJ2ZWQxOworCQkJdTY0IHJlc2VydmVkMjsKKwkJCXU2NCByZXNlcnZlZDM7CisJCQlzdHJ1Y3QgZWhjYV92c2dlbnRyeSBzZ19saXN0W01BWF9XUUVfU0dfRU5UUklFU107CisJCX0gYWxsX3JjdjsKKworCQlzdHJ1Y3QgeworCQkJdTY0IHJlc2VydmVkOworCQkJdTMyIHJrZXk7CisJCQl1MzIgb2xkX3JrZXk7CisJCQl1NjQgcmVzZXJ2ZWQxOworCQkJdTY0IHJlc2VydmVkMjsKKwkJCXU2NCB2aXJ0dWFsX2FkZHJlc3M7CisJCQl1MzIgcmVzZXJ2ZWQzOworCQkJdTMyIGxlbmd0aDsKKwkJCXUzMiByZXNlcnZlZDQ7CisJCQl1MTYgcmVzZXJ2ZWQ1OworCQkJdTggcmVzZXJ2ZWQ2OworCQkJdTggbHJfY3RsOworCQkJdTMyIGxrZXk7CisJCQl1MzIgcmVzZXJ2ZWQ3OworCQkJdTY0IHJlc2VydmVkODsKKwkJCXU2NCByZXNlcnZlZDk7CisJCQl1NjQgcmVzZXJ2ZWQxMDsKKwkJCXU2NCByZXNlcnZlZDExOworCQl9IGJpbmQ7CisJCXN0cnVjdCB7CisJCQl1NjQgcmVzZXJ2ZWQxMjsKKwkJCXU2NCByZXNlcnZlZDEzOworCQkJdTMyIHNpemU7CisJCQl1MzIgc3RhcnQ7CisJCX0gaW5saW5lX2RhdGE7CisJfSB1OworCit9OworCisjZGVmaW5lIFdDX1NFTkRfUkVDRUlWRSBFSENBX0JNQVNLX0lCTSgwLDApCisjZGVmaW5lIFdDX0lNTV9EQVRBICAgICBFSENBX0JNQVNLX0lCTSgxLDEpCisjZGVmaW5lIFdDX0dSSF9QUkVTRU5UICBFSENBX0JNQVNLX0lCTSgyLDIpCisjZGVmaW5lIFdDX1NFX0JJVCAgICAgICBFSENBX0JNQVNLX0lCTSgzLDMpCisjZGVmaW5lIFdDX1NUQVRVU19FUlJPUl9CSVQgMHg4MDAwMDAwMAorI2RlZmluZSBXQ19TVEFUVVNfUkVNT1RFX0VSUk9SX0ZMQUdTIDB4MDAwMEY4MDAKKyNkZWZpbmUgV0NfU1RBVFVTX1BVUkdFX0JJVCAweDEwCisKK3N0cnVjdCBlaGNhX2NxZSB7CisJdTY0IHdvcmtfcmVxdWVzdF9pZDsKKwl1OCBvcHR5cGU7CisJdTggd19jb21wbGV0aW9uX2ZsYWdzOworCXUxNiByZXNlcnZlZDE7CisJdTMyIG5yX2J5dGVzX3RyYW5zZmVycmVkOworCXUzMiBpbW1lZGlhdGVfZGF0YTsKKwl1MzIgbG9jYWxfcXBfbnVtYmVyOworCXU4IGZyZWVkX3Jlc291cmNlX2NvdW50OworCXU4IHNlcnZpY2VfbGV2ZWw7CisJdTE2IHdxZV9jb3VudDsKKwl1MzIgcXBfdG9rZW47CisJdTMyIHFrZXlfZWVfdG9rZW47CisJdTMyIHJlbW90ZV9xcF9udW1iZXI7CisJdTE2IGRsaWQ7CisJdTE2IHJsaWQ7CisJdTE2IHJlc2VydmVkMjsKKwl1MTYgcGtleV9pbmRleDsKKwl1MzIgY3FlX3RpbWVzdGFtcDsKKwl1MzIgd3FlX3RpbWVzdGFtcDsKKwl1OCB3cWVfdGltZXN0YW1wX3ZhbGlkOworCXU4IHJlc2VydmVkMzsKKwl1OCByZXNlcnZlZDQ7CisJdTggY3FlX2ZsYWdzOworCXUzMiBzdGF0dXM7Cit9OworCitzdHJ1Y3QgZWhjYV9lcWUgeworCXU2NCBlbnRyeTsKK307CisKK3N0cnVjdCBlaGNhX21ydGUgeworCXU2NCBzdGFydGluZ192YTsKKwl1NjQgbGVuZ3RoOyAvKiBsZW5ndGggb2YgbWVtb3J5IHJlZ2lvbiBpbiBieXRlcyovCisJdTMyIHBkOworCXU4IGtleV9pbnN0YW5jZTsKKwl1OCBwYWdlc2l6ZTsKKwl1OCBtcl9jb250cm9sOworCXU4IGxvY2FsX3JlbW90ZV9hY2Nlc3NfY3RybDsKKwl1OCByZXNlcnZlZFsweDIwIC0gMHgxOF07CisJdTY0IGF0X3BvaW50ZXJbNF07Cit9OworI2VuZGlmIC8qX0VIQ0FfUUVTX0hfKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Mzk0MTIzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCkBAIC0wLDAgKzEsMTUwNyBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgUVAgZnVuY3Rpb25zCisgKgorICogIEF1dGhvcnM6IFdhbGVyaSBGb21pbiA8Zm9taW5AZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgUmVpbmhhcmQgRXJuc3QgPHJlcm5zdEBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhlaWtvIEogU2NoaWNrIDxzY2hpY2toakBkZS5pYm0uY29tPgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2Ugb2YgR1BMIHYyLjAgYW5kIE9wZW5JQgorICogIEJTRC4KKyAqCisgKiBPcGVuSUIgQlNEIExpY2Vuc2UKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJlaGNhX3Flcy5oIgorI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisjaW5jbHVkZSAiaGlwel9mbnMuaCIKKworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpxcF9jYWNoZTsKKworLyoKKyAqIGF0dHJpYnV0ZXMgbm90IHN1cHBvcnRlZCBieSBxdWVyeSBxcAorICovCisjZGVmaW5lIFFQX0FUVFJfUVVFUllfTk9UX1NVUFBPUlRFRCAoSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDIHwgXAorCQkJCSAgICAgSUJfUVBfTUFYX1FQX1JEX0FUT01JQyAgIHwgXAorCQkJCSAgICAgSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgIHwgXAorCQkJCSAgICAgSUJfUVBfRU5fU1FEX0FTWU5DX05PVElGWSkKKworLyoKKyAqIGVoY2EgKGludGVybmFsKSBxcCBzdGF0ZSB2YWx1ZXMKKyAqLworZW51bSBlaGNhX3FwX3N0YXRlIHsKKwlFSENBX1FQU19SRVNFVCA9IDEsCisJRUhDQV9RUFNfSU5JVCA9IDIsCisJRUhDQV9RUFNfUlRSID0gMywKKwlFSENBX1FQU19SVFMgPSA1LAorCUVIQ0FfUVBTX1NRRCA9IDYsCisJRUhDQV9RUFNfU1FFID0gOCwKKwlFSENBX1FQU19FUlIgPSAxMjgKK307CisKKy8qCisgKiBxcCBzdGF0ZSB0cmFuc2l0aW9ucyBhcyBkZWZpbmVkIGJ5IElCIEFyY2ggUmVsIDEuMSBwYWdlIDQzMQorICovCitlbnVtIGliX3FwX3N0YXRldHJhbnMgeworCUlCX1FQU1RfQU5ZMlJFU0VULAorCUlCX1FQU1RfQU5ZMkVSUiwKKwlJQl9RUFNUX1JFU0VUMklOSVQsCisJSUJfUVBTVF9JTklUMlJUUiwKKwlJQl9RUFNUX0lOSVQySU5JVCwKKwlJQl9RUFNUX1JUUjJSVFMsCisJSUJfUVBTVF9SVFMyU1FELAorCUlCX1FQU1RfUlRTMlJUUywKKwlJQl9RUFNUX1NRRDJSVFMsCisJSUJfUVBTVF9TUUUyUlRTLAorCUlCX1FQU1RfU1FEMlNRRCwKKwlJQl9RUFNUX01BWAkvKiBuciBvZiB0cmFuc2l0aW9ucywgdGhpcyBtdXN0IGJlIGxhc3QhISEgKi8KK307CisKKy8qCisgKiBpYjJlaGNhX3FwX3N0YXRlIG1hcHMgSUIgdG8gZWhjYSBxcF9zdGF0ZQorICogcmV0dXJucyBlaGNhIHFwIHN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gZ2l2ZW4gaWIgcXAgc3RhdGUKKyAqLworc3RhdGljIGlubGluZSBlbnVtIGVoY2FfcXBfc3RhdGUgaWIyZWhjYV9xcF9zdGF0ZShlbnVtIGliX3FwX3N0YXRlIGliX3FwX3N0YXRlKQoreworCXN3aXRjaCAoaWJfcXBfc3RhdGUpIHsKKwljYXNlIElCX1FQU19SRVNFVDoKKwkJcmV0dXJuIEVIQ0FfUVBTX1JFU0VUOworCWNhc2UgSUJfUVBTX0lOSVQ6CisJCXJldHVybiBFSENBX1FQU19JTklUOworCWNhc2UgSUJfUVBTX1JUUjoKKwkJcmV0dXJuIEVIQ0FfUVBTX1JUUjsKKwljYXNlIElCX1FQU19SVFM6CisJCXJldHVybiBFSENBX1FQU19SVFM7CisJY2FzZSBJQl9RUFNfU1FEOgorCQlyZXR1cm4gRUhDQV9RUFNfU1FEOworCWNhc2UgSUJfUVBTX1NRRToKKwkJcmV0dXJuIEVIQ0FfUVBTX1NRRTsKKwljYXNlIElCX1FQU19FUlI6CisJCXJldHVybiBFSENBX1FQU19FUlI7CisJZGVmYXVsdDoKKwkJZWhjYV9nZW5fZXJyKCJpbnZhbGlkIGliX3FwX3N0YXRlPSV4IiwgaWJfcXBfc3RhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiBlaGNhMmliX3FwX3N0YXRlIG1hcHMgZWhjYSB0byBJQiBxcF9zdGF0ZQorICogcmV0dXJucyBpYiBxcCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIGdpdmVuIGVoY2EgcXAgc3RhdGUKKyAqLworc3RhdGljIGlubGluZSBlbnVtIGliX3FwX3N0YXRlIGVoY2EyaWJfcXBfc3RhdGUoZW51bSBlaGNhX3FwX3N0YXRlCisJCQkJCQllaGNhX3FwX3N0YXRlKQoreworCXN3aXRjaCAoZWhjYV9xcF9zdGF0ZSkgeworCWNhc2UgRUhDQV9RUFNfUkVTRVQ6CisJCXJldHVybiBJQl9RUFNfUkVTRVQ7CisJY2FzZSBFSENBX1FQU19JTklUOgorCQlyZXR1cm4gSUJfUVBTX0lOSVQ7CisJY2FzZSBFSENBX1FQU19SVFI6CisJCXJldHVybiBJQl9RUFNfUlRSOworCWNhc2UgRUhDQV9RUFNfUlRTOgorCQlyZXR1cm4gSUJfUVBTX1JUUzsKKwljYXNlIEVIQ0FfUVBTX1NRRDoKKwkJcmV0dXJuIElCX1FQU19TUUQ7CisJY2FzZSBFSENBX1FQU19TUUU6CisJCXJldHVybiBJQl9RUFNfU1FFOworCWNhc2UgRUhDQV9RUFNfRVJSOgorCQlyZXR1cm4gSUJfUVBTX0VSUjsKKwlkZWZhdWx0OgorCQllaGNhX2dlbl9lcnIoImludmFsaWQgZWhjYV9xcF9zdGF0ZT0leCIsIGVoY2FfcXBfc3RhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9Cit9CisKKy8qCisgKiBlaGNhX3FwX3R5cGUgdXNlZCBhcyBpbmRleCBmb3IgcmVxX2F0dHIgYW5kIG9wdF9hdHRyIG9mCisgKiBzdHJ1Y3QgZWhjYV9tb2RxcF9zdGF0ZXRyYW5zCisgKi8KK2VudW0gZWhjYV9xcF90eXBlIHsKKwlRUFRfUkMgPSAwLAorCVFQVF9VQyA9IDEsCisJUVBUX1VEID0gMiwKKwlRUFRfU1FQID0gMywKKwlRUFRfTUFYCit9OworCisvKgorICogaWIyZWhjYXFwdHlwZSBtYXBzIEliIHRvIGVoY2EgcXBfdHlwZQorICogcmV0dXJucyBlaGNhIHFwIHR5cGUgY29ycmVzcG9uZGluZyB0byBpYiBxcCB0eXBlCisgKi8KK3N0YXRpYyBpbmxpbmUgZW51bSBlaGNhX3FwX3R5cGUgaWIyZWhjYXFwdHlwZShlbnVtIGliX3FwX3R5cGUgaWJxcHR5cGUpCit7CisJc3dpdGNoIChpYnFwdHlwZSkgeworCWNhc2UgSUJfUVBUX1NNSToKKwljYXNlIElCX1FQVF9HU0k6CisJCXJldHVybiBRUFRfU1FQOworCWNhc2UgSUJfUVBUX1JDOgorCQlyZXR1cm4gUVBUX1JDOworCWNhc2UgSUJfUVBUX1VDOgorCQlyZXR1cm4gUVBUX1VDOworCWNhc2UgSUJfUVBUX1VEOgorCQlyZXR1cm4gUVBUX1VEOworCWRlZmF1bHQ6CisJCWVoY2FfZ2VuX2VycigiSW52YWxpZCBpYnFwdHlwZT0leCIsIGlicXB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGVudW0gaWJfcXBfc3RhdGV0cmFucyBnZXRfbW9kcXBfc3RhdGV0cmFucyhpbnQgaWJfZnJvbXN0YXRlLAorCQkJCQkJCSBpbnQgaWJfdG9zdGF0ZSkKK3sKKwlpbnQgaW5kZXggPSAtRUlOVkFMOworCXN3aXRjaCAoaWJfdG9zdGF0ZSkgeworCWNhc2UgSUJfUVBTX1JFU0VUOgorCQlpbmRleCA9IElCX1FQU1RfQU5ZMlJFU0VUOworCQlicmVhazsKKwljYXNlIElCX1FQU19JTklUOgorCQlzd2l0Y2ggKGliX2Zyb21zdGF0ZSkgeworCQljYXNlIElCX1FQU19SRVNFVDoKKwkJCWluZGV4ID0gSUJfUVBTVF9SRVNFVDJJTklUOworCQkJYnJlYWs7CisJCWNhc2UgSUJfUVBTX0lOSVQ6CisJCQlpbmRleCA9IElCX1FQU1RfSU5JVDJJTklUOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJQl9RUFNfUlRSOgorCQlpZiAoaWJfZnJvbXN0YXRlID09IElCX1FQU19JTklUKQorCQkJaW5kZXggPSBJQl9RUFNUX0lOSVQyUlRSOworCQlicmVhazsKKwljYXNlIElCX1FQU19SVFM6CisJCXN3aXRjaCAoaWJfZnJvbXN0YXRlKSB7CisJCWNhc2UgSUJfUVBTX1JUUjoKKwkJCWluZGV4ID0gSUJfUVBTVF9SVFIyUlRTOworCQkJYnJlYWs7CisJCWNhc2UgSUJfUVBTX1JUUzoKKwkJCWluZGV4ID0gSUJfUVBTVF9SVFMyUlRTOworCQkJYnJlYWs7CisJCWNhc2UgSUJfUVBTX1NRRDoKKwkJCWluZGV4ID0gSUJfUVBTVF9TUUQyUlRTOworCQkJYnJlYWs7CisJCWNhc2UgSUJfUVBTX1NRRToKKwkJCWluZGV4ID0gSUJfUVBTVF9TUUUyUlRTOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJQl9RUFNfU1FEOgorCQlpZiAoaWJfZnJvbXN0YXRlID09IElCX1FQU19SVFMpCisJCQlpbmRleCA9IElCX1FQU1RfUlRTMlNRRDsKKwkJYnJlYWs7CisJY2FzZSBJQl9RUFNfU1FFOgorCQlicmVhazsKKwljYXNlIElCX1FQU19FUlI6CisJCWluZGV4ID0gSUJfUVBTVF9BTlkyRVJSOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuIGluZGV4OworfQorCitlbnVtIGVoY2Ffc2VydmljZV90eXBlIHsKKwlTVF9SQyA9IDAsCisJU1RfVUMgPSAxLAorCVNUX1JEID0gMiwKKwlTVF9VRCA9IDMKK307CisKKy8qCisgKiBpYnFwdHlwZTJzZXJ2aWNldHlwZSByZXR1cm5zIGhjcCBzZXJ2aWNlIHR5cGUgY29ycmVzcG9uZGluZyB0byBnaXZlbgorICogaWIgcXAgdHlwZSB1c2VkIGJ5IGNyZWF0ZV9xcCgpCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlicXB0eXBlMnNlcnZpY2V0eXBlKGVudW0gaWJfcXBfdHlwZSBpYnFwdHlwZSkKK3sKKwlzd2l0Y2ggKGlicXB0eXBlKSB7CisJY2FzZSBJQl9RUFRfU01JOgorCWNhc2UgSUJfUVBUX0dTSToKKwkJcmV0dXJuIFNUX1VEOworCWNhc2UgSUJfUVBUX1JDOgorCQlyZXR1cm4gU1RfUkM7CisJY2FzZSBJQl9RUFRfVUM6CisJCXJldHVybiBTVF9VQzsKKwljYXNlIElCX1FQVF9VRDoKKwkJcmV0dXJuIFNUX1VEOworCWNhc2UgSUJfUVBUX1JBV19JUFY2OgorCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIElCX1FQVF9SQVdfRVRZOgorCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWZhdWx0OgorCQllaGNhX2dlbl9lcnIoIkludmFsaWQgaWJxcHR5cGU9JXgiLCBpYnFwdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworLyoKKyAqIGluaXRfcXBfcXVldWVzIGluaXRpYWxpemVzL2NvbnN0cnVjdHMgci9zcXVldWUgYW5kIHJlZ2lzdGVycyBxdWV1ZSBwYWdlcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaW5pdF9xcF9xdWV1ZXMoc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSwKKwkJCQkgc3RydWN0IGVoY2FfcXAgKm15X3FwLAorCQkJCSBpbnQgbnJfc3FfcGFnZXMsCisJCQkJIGludCBucl9ycV9wYWdlcywKKwkJCQkgaW50IHN3cWVfc2l6ZSwKKwkJCQkgaW50IHJ3cWVfc2l6ZSwKKwkJCQkgaW50IG5yX3NlbmRfc2dlcywgaW50IG5yX3JlY2VpdmVfc2dlcykKK3sKKwlpbnQgcmV0LCBjbnQsIGlwel9yYzsKKwl2b2lkICp2cGFnZTsKKwl1NjQgcnBhZ2UsIGhfcmV0OworCXN0cnVjdCBpYl9kZXZpY2UgKmliX2RldiA9ICZzaGNhLT5pYl9kZXZpY2U7CisJc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBpcHpfaGNhX2hhbmRsZSA9IHNoY2EtPmlwel9oY2FfaGFuZGxlOworCisJaXB6X3JjID0gaXB6X3F1ZXVlX2N0b3IoJm15X3FwLT5pcHpfc3F1ZXVlLAorCQkJCW5yX3NxX3BhZ2VzLAorCQkJCUVIQ0FfUEFHRVNJWkUsIHN3cWVfc2l6ZSwgbnJfc2VuZF9zZ2VzKTsKKwlpZiAoIWlwel9yYykgeworCQllaGNhX2VycihpYl9kZXYsIkNhbm5vdCBhbGxvY2F0ZSBwYWdlIGZvciBzcXVldWUuIGlwel9yYz0leCIsCisJCQkgaXB6X3JjKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlpcHpfcmMgPSBpcHpfcXVldWVfY3RvcigmbXlfcXAtPmlwel9ycXVldWUsCisJCQkJbnJfcnFfcGFnZXMsCisJCQkJRUhDQV9QQUdFU0laRSwgcndxZV9zaXplLCBucl9yZWNlaXZlX3NnZXMpOworCWlmICghaXB6X3JjKSB7CisJCWVoY2FfZXJyKGliX2RldiwgIkNhbm5vdCBhbGxvY2F0ZSBwYWdlIGZvciBycXVldWUuIGlwel9yYz0leCIsCisJCQkgaXB6X3JjKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGluaXRfcXBfcXVldWVzMDsKKwl9CisJLyogcmVnaXN0ZXIgU1EgcGFnZXMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IG5yX3NxX3BhZ2VzOyBjbnQrKykgeworCQl2cGFnZSA9IGlwel9xcGFnZWl0X2dldF9pbmMoJm15X3FwLT5pcHpfc3F1ZXVlKTsKKwkJaWYgKCF2cGFnZSkgeworCQkJZWhjYV9lcnIoaWJfZGV2LCAiU1EgaXB6X3FwYWdlaXRfZ2V0X2luYygpICIKKwkJCQkgImZhaWxlZCBwX3ZwYWdlPSAlcCIsIHZwYWdlKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGluaXRfcXBfcXVldWVzMTsKKwkJfQorCQlycGFnZSA9IHZpcnRfdG9fYWJzKHZwYWdlKTsKKworCQloX3JldCA9IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9xcChpcHpfaGNhX2hhbmRsZSwKKwkJCQkJCSBteV9xcC0+aXB6X3FwX2hhbmRsZSwKKwkJCQkJCSAmbXlfcXAtPnBmLCAwLCAwLAorCQkJCQkJIHJwYWdlLCAxLAorCQkJCQkJIG15X3FwLT5nYWxwYXMua2VybmVsKTsKKwkJaWYgKGhfcmV0IDwgSF9TVUNDRVNTKSB7CisJCQllaGNhX2VycihpYl9kZXYsICJTUSBoaXB6X3FwX3JlZ2lzdGVyX3JwYWdlKCkiCisJCQkJICIgZmFpbGVkIHJjPSVseCIsIGhfcmV0KTsKKwkJCXJldCA9IGVoY2EyaWJfcmV0dXJuX2NvZGUoaF9yZXQpOworCQkJZ290byBpbml0X3FwX3F1ZXVlczE7CisJCX0KKwl9CisKKwlpcHpfcWVpdF9yZXNldCgmbXlfcXAtPmlwel9zcXVldWUpOworCisJLyogcmVnaXN0ZXIgUlEgcGFnZXMgKi8KKwlmb3IgKGNudCA9IDA7IGNudCA8IG5yX3JxX3BhZ2VzOyBjbnQrKykgeworCQl2cGFnZSA9IGlwel9xcGFnZWl0X2dldF9pbmMoJm15X3FwLT5pcHpfcnF1ZXVlKTsKKwkJaWYgKCF2cGFnZSkgeworCQkJZWhjYV9lcnIoaWJfZGV2LCAiUlEgaXB6X3FwYWdlaXRfZ2V0X2luYygpICIKKwkJCQkgImZhaWxlZCBwX3ZwYWdlID0gJXAiLCB2cGFnZSk7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBpbml0X3FwX3F1ZXVlczE7CisJCX0KKworCQlycGFnZSA9IHZpcnRfdG9fYWJzKHZwYWdlKTsKKworCQloX3JldCA9IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9xcChpcHpfaGNhX2hhbmRsZSwKKwkJCQkJCSBteV9xcC0+aXB6X3FwX2hhbmRsZSwKKwkJCQkJCSAmbXlfcXAtPnBmLCAwLCAxLAorCQkJCQkJIHJwYWdlLCAxLG15X3FwLT5nYWxwYXMua2VybmVsKTsKKwkJaWYgKGhfcmV0IDwgSF9TVUNDRVNTKSB7CisJCQllaGNhX2VycihpYl9kZXYsICJSUSBoaXB6X3FwX3JlZ2lzdGVyX3JwYWdlKCkgZmFpbGVkICIKKwkJCQkgInJjPSVseCIsIGhfcmV0KTsKKwkJCXJldCA9IGVoY2EyaWJfcmV0dXJuX2NvZGUoaF9yZXQpOworCQkJZ290byBpbml0X3FwX3F1ZXVlczE7CisJCX0KKwkJaWYgKGNudCA9PSAobnJfcnFfcGFnZXMgLSAxKSkgewkvKiBsYXN0IHBhZ2UhICovCisJCQlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKSB7CisJCQkJZWhjYV9lcnIoaWJfZGV2LCAiUlEgaGlwel9xcF9yZWdpc3Rlcl9ycGFnZSgpICIKKwkJCQkJICJoX3JldD0gJWx4ICIsIGhfcmV0KTsKKwkJCQlyZXQgPSBlaGNhMmliX3JldHVybl9jb2RlKGhfcmV0KTsKKwkJCQlnb3RvIGluaXRfcXBfcXVldWVzMTsKKwkJCX0KKwkJCXZwYWdlID0gaXB6X3FwYWdlaXRfZ2V0X2luYygmbXlfcXAtPmlwel9ycXVldWUpOworCQkJaWYgKHZwYWdlKSB7CisJCQkJZWhjYV9lcnIoaWJfZGV2LCAiaXB6X3FwYWdlaXRfZ2V0X2luYygpICIKKwkJCQkJICJzaG91bGQgbm90IHN1Y2NlZWQgdnBhZ2U9JXAiLCB2cGFnZSk7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGluaXRfcXBfcXVldWVzMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChoX3JldCAhPSBIX1BBR0VfUkVHSVNURVJFRCkgeworCQkJCWVoY2FfZXJyKGliX2RldiwgIlJRIGhpcHpfcXBfcmVnaXN0ZXJfcnBhZ2UoKSAiCisJCQkJCSAiaF9yZXQ9ICVseCAiLCBoX3JldCk7CisJCQkJcmV0ID0gZWhjYTJpYl9yZXR1cm5fY29kZShoX3JldCk7CisJCQkJZ290byBpbml0X3FwX3F1ZXVlczE7CisJCQl9CisJCX0KKwl9CisKKwlpcHpfcWVpdF9yZXNldCgmbXlfcXAtPmlwel9ycXVldWUpOworCisJcmV0dXJuIDA7CisKK2luaXRfcXBfcXVldWVzMToKKwlpcHpfcXVldWVfZHRvcigmbXlfcXAtPmlwel9ycXVldWUpOworaW5pdF9xcF9xdWV1ZXMwOgorCWlwel9xdWV1ZV9kdG9yKCZteV9xcC0+aXB6X3NxdWV1ZSk7CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGliX3FwICplaGNhX2NyZWF0ZV9xcChzdHJ1Y3QgaWJfcGQgKnBkLAorCQkJICAgICBzdHJ1Y3QgaWJfcXBfaW5pdF9hdHRyICppbml0X2F0dHIsCisJCQkgICAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCit7CisJc3RhdGljIGludCBkYV9yY19tc2dfc2l6ZVtdPXsgMTI4LCAyNTYsIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiB9OworCXN0YXRpYyBpbnQgZGFfdWRfc3FfbXNnX3NpemVbXT17IDEyOCwgMzg0LCA4OTYsIDE5MjAsIDM5NjggfTsKKwlzdHJ1Y3QgZWhjYV9xcCAqbXlfcXA7CisJc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKHBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSBjb250YWluZXJfb2YocGQtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKKwkJCQkJICAgICAgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQgPSBOVUxMOworCXU2NCBoX3JldDsKKwlpbnQgbWF4X3NlbmRfc2dlLCBtYXhfcmVjdl9zZ2UsIHJldDsKKworCS8qIGhfY2FsbCdzIG91dCBwYXJhbWV0ZXJzICovCisJc3RydWN0IGVoY2FfYWxsb2NfcXBfcGFybXMgcGFybXM7CisJdTMyIHN3cWVfc2l6ZSA9IDAsIHJ3cWVfc2l6ZSA9IDA7CisJdTggZGFxcF9jb21wbGV0aW9uLCBpc2RhcXA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmIChpbml0X2F0dHItPnNxX3NpZ190eXBlICE9IElCX1NJR05BTF9SRVFfV1IgJiYKKwkJaW5pdF9hdHRyLT5zcV9zaWdfdHlwZSAhPSBJQl9TSUdOQUxfQUxMX1dSKSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJpbml0X2F0dHItPnNnX3NpZ190eXBlPSV4IG5vdCBhbGxvd2VkIiwKKwkJCSBpbml0X2F0dHItPnNxX3NpZ190eXBlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJLyogc2F2ZSBkYXFwIGNvbXBsZXRpb24gYml0cyAqLworCWRhcXBfY29tcGxldGlvbiA9IGluaXRfYXR0ci0+cXBfdHlwZSAmIDB4NjA7CisJLyogc2F2ZSBkYXFwIGJpdCAqLworCWlzZGFxcCA9IChpbml0X2F0dHItPnFwX3R5cGUgJiAweDgwKSA/IDEgOiAwOworCWluaXRfYXR0ci0+cXBfdHlwZSA9IGluaXRfYXR0ci0+cXBfdHlwZSAmIDB4MUY7CisKKwlpZiAoaW5pdF9hdHRyLT5xcF90eXBlICE9IElCX1FQVF9VRCAmJgorCSAgICBpbml0X2F0dHItPnFwX3R5cGUgIT0gSUJfUVBUX1NNSSAmJgorCSAgICBpbml0X2F0dHItPnFwX3R5cGUgIT0gSUJfUVBUX0dTSSAmJgorCSAgICBpbml0X2F0dHItPnFwX3R5cGUgIT0gSUJfUVBUX1VDICYmCisJICAgIGluaXRfYXR0ci0+cXBfdHlwZSAhPSBJQl9RUFRfUkMpIHsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgIndyb25nIFFQIFR5cGU9JXgiLCBpbml0X2F0dHItPnFwX3R5cGUpOworCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisJaWYgKChpbml0X2F0dHItPnFwX3R5cGUgIT0gSUJfUVBUX1JDICYmIGluaXRfYXR0ci0+cXBfdHlwZSAhPSBJQl9RUFRfVUQpCisJICAgICYmIGlzZGFxcCkgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAidW5zdXBwb3J0ZWQgTEwgUVAgVHlwZT0leCIsCisJCQkgaW5pdF9hdHRyLT5xcF90eXBlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfSBlbHNlIGlmIChpbml0X2F0dHItPnFwX3R5cGUgPT0gSUJfUVBUX1JDICYmIGlzZGFxcCAmJgorCQkgICAoaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgPiAyNTUgfHwKKwkJICAgIGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyID4gMjU1ICkpIHsKKwkJICAgICAgIGVoY2FfZXJyKHBkLT5kZXZpY2UsICJJbnZhbGlkIE51bWJlciBvZiBtYXhfc3Ffd3IgPSV4ICIKKwkJCQkib3IgbWF4X3JxX3dyPSV4IGZvciBRUCBUeXBlPSV4IiwKKwkJCQlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciwKKwkJCQlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93cixpbml0X2F0dHItPnFwX3R5cGUpOworCQkgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfSBlbHNlIGlmIChpbml0X2F0dHItPnFwX3R5cGUgPT0gSUJfUVBUX1VEICYmIGlzZGFxcCAmJgorCQkgIGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyID4gMjU1KSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsCisJCQkgIkludmFsaWQgTnVtYmVyIG9mIG1heF9zZW5kX3dyPSV4IGZvciBVRCBRUF9UWVBFPSV4IiwKKwkJCSBpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciwgaW5pdF9hdHRyLT5xcF90eXBlKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJfQorCisJaWYgKHBkLT51b2JqZWN0ICYmIHVkYXRhKQorCQljb250ZXh0ID0gcGQtPnVvYmplY3QtPmNvbnRleHQ7CisKKwlteV9xcCA9IGttZW1fY2FjaGVfYWxsb2MocXBfY2FjaGUsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIW15X3FwKSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJwZD0lcCBub3QgZW5vdWdoIG1lbW9yeSB0byBhbGxvYyBxcCIsIHBkKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCisJbWVtc2V0KG15X3FwLCAwLCBzaXplb2Yoc3RydWN0IGVoY2FfcXApKTsKKwltZW1zZXQgKCZwYXJtcywgMCwgc2l6ZW9mKHN0cnVjdCBlaGNhX2FsbG9jX3FwX3Bhcm1zKSk7CisJc3Bpbl9sb2NrX2luaXQoJm15X3FwLT5zcGlubG9ja19zKTsKKwlzcGluX2xvY2tfaW5pdCgmbXlfcXAtPnNwaW5sb2NrX3IpOworCisJbXlfcXAtPnJlY3ZfY3EgPQorCQljb250YWluZXJfb2YoaW5pdF9hdHRyLT5yZWN2X2NxLCBzdHJ1Y3QgZWhjYV9jcSwgaWJfY3EpOworCW15X3FwLT5zZW5kX2NxID0KKwkJY29udGFpbmVyX29mKGluaXRfYXR0ci0+c2VuZF9jcSwgc3RydWN0IGVoY2FfY3EsIGliX2NxKTsKKworCW15X3FwLT5pbml0X2F0dHIgPSAqaW5pdF9hdHRyOworCisJZG8geworCQlpZiAoIWlkcl9wcmVfZ2V0KCZlaGNhX3FwX2lkciwgR0ZQX0tFUk5FTCkpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiQ2FuJ3QgcmVzZXJ2ZSBpZHIgcmVzb3VyY2VzLiIpOworCQkJZ290byBjcmVhdGVfcXBfZXhpdDA7CisJCX0KKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCQlyZXQgPSBpZHJfZ2V0X25ldygmZWhjYV9xcF9pZHIsIG15X3FwLCAmbXlfcXAtPnRva2VuKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCisJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOworCisJaWYgKHJldCkgeworCQlyZXQgPSAtRU5PTUVNOworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiQ2FuJ3QgYWxsb2NhdGUgbmV3IGlkciBlbnRyeS4iKTsKKwkJZ290byBjcmVhdGVfcXBfZXhpdDA7CisJfQorCisJcGFybXMuc2VydmljZXR5cGUgPSBpYnFwdHlwZTJzZXJ2aWNldHlwZShpbml0X2F0dHItPnFwX3R5cGUpOworCWlmIChwYXJtcy5zZXJ2aWNldHlwZSA8IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZWhjYV9lcnIocGQtPmRldmljZSwgIkludmFsaWQgcXBfdHlwZT0leCIsIGluaXRfYXR0ci0+cXBfdHlwZSk7CisJCWdvdG8gY3JlYXRlX3FwX2V4aXQwOworCX0KKworCWlmIChpbml0X2F0dHItPnNxX3NpZ190eXBlID09IElCX1NJR05BTF9BTExfV1IpCisJCXBhcm1zLnNpZ3R5cGUgPSBIQ0FMTF9TSUdUX0VWRVJZOworCWVsc2UKKwkJcGFybXMuc2lndHlwZSA9IEhDQUxMX1NJR1RfQllfV1FFOworCisJLyogVURfQVYgQ0lSQ1VNVkVOVElPTiAqLworCW1heF9zZW5kX3NnZSA9IGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZTsKKwltYXhfcmVjdl9zZ2UgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2U7CisJaWYgKElCX1FQVF9VRCA9PSBpbml0X2F0dHItPnFwX3R5cGUgfHwKKwkgICAgSUJfUVBUX0dTSSA9PSBpbml0X2F0dHItPnFwX3R5cGUgfHwKKwkgICAgSUJfUVBUX1NNSSA9PSBpbml0X2F0dHItPnFwX3R5cGUpIHsKKwkJbWF4X3NlbmRfc2dlICs9IDI7CisJCW1heF9yZWN2X3NnZSArPSAyOworCX0KKworCXBhcm1zLmlwel9lcV9oYW5kbGUgPSBzaGNhLT5lcS5pcHpfZXFfaGFuZGxlOworCXBhcm1zLmRhcXBfY3RybCA9IGlzZGFxcCB8IGRhcXBfY29tcGxldGlvbjsKKwlwYXJtcy5wZCA9IG15X3BkLT5md19wZDsKKwlwYXJtcy5tYXhfcmVjdl9zZ2UgPSBtYXhfcmVjdl9zZ2U7CisJcGFybXMubWF4X3NlbmRfc2dlID0gbWF4X3NlbmRfc2dlOworCisJaF9yZXQgPSBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfcXAoc2hjYS0+aXB6X2hjYV9oYW5kbGUsIG15X3FwLCAmcGFybXMpOworCisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiaF9hbGxvY19yZXNvdXJjZV9xcCgpIGZhaWxlZCBoX3JldD0lbHgiLAorCQkJIGhfcmV0KTsKKwkJcmV0ID0gZWhjYTJpYl9yZXR1cm5fY29kZShoX3JldCk7CisJCWdvdG8gY3JlYXRlX3FwX2V4aXQxOworCX0KKworCXN3aXRjaCAoaW5pdF9hdHRyLT5xcF90eXBlKSB7CisJY2FzZSBJQl9RUFRfUkM6CisJICAgICAgICBpZiAoaXNkYXFwID09IDApIHsKKwkJCXN3cWVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBlaGNhX3dxZSwgdS5udWQuc2dfbGlzdFsKKwkJCQkJICAgICAocGFybXMuYWN0X25yX3NlbmRfc2dlcyldKTsKKwkJCXJ3cWVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBlaGNhX3dxZSwgdS5udWQuc2dfbGlzdFsKKwkJCQkJICAgICAocGFybXMuYWN0X25yX3JlY3Zfc2dlcyldKTsKKwkJfSBlbHNlIHsgLyogZm9yIGRhcXAgd2UgbmVlZCB0byB1c2UgbXNnIHNpemUsIG5vdCB3cWUgc2l6ZSAqLworCQkgICAgICAgIHN3cWVfc2l6ZSA9IGRhX3JjX21zZ19zaXplW21heF9zZW5kX3NnZV07CisJCQlyd3FlX3NpemUgPSBkYV9yY19tc2dfc2l6ZVttYXhfcmVjdl9zZ2VdOworCQkJcGFybXMuYWN0X25yX3NlbmRfc2dlcyA9IDE7CisJCQlwYXJtcy5hY3RfbnJfcmVjdl9zZ2VzID0gMTsKKwkJfQorCQlicmVhazsKKwljYXNlIElCX1FQVF9VQzoKKwkJc3dxZV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGVoY2Ffd3FlLAorCQkJCSAgICAgdS5udWQuc2dfbGlzdFtwYXJtcy5hY3RfbnJfc2VuZF9zZ2VzXSk7CisJCXJ3cWVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBlaGNhX3dxZSwKKwkJCQkgICAgIHUubnVkLnNnX2xpc3RbcGFybXMuYWN0X25yX3JlY3Zfc2dlc10pOworCQlicmVhazsKKworCWNhc2UgSUJfUVBUX1VEOgorCWNhc2UgSUJfUVBUX0dTSToKKwljYXNlIElCX1FQVF9TTUk6CisJCS8qIFVEIGNpcmN1bXZlbnRpb24gKi8KKwkJcGFybXMuYWN0X25yX3JlY3Zfc2dlcyAtPSAyOworCQlwYXJtcy5hY3RfbnJfc2VuZF9zZ2VzIC09IDI7CisJCWlmIChpc2RhcXApIHsKKwkJICAgICAgICBzd3FlX3NpemUgPSBkYV91ZF9zcV9tc2dfc2l6ZVttYXhfc2VuZF9zZ2VdOworCQkJcndxZV9zaXplID0gZGFfcmNfbXNnX3NpemVbbWF4X3JlY3Zfc2dlXTsKKwkJCXBhcm1zLmFjdF9ucl9zZW5kX3NnZXMgPSAxOworCQkJcGFybXMuYWN0X25yX3JlY3Zfc2dlcyA9IDE7CisJCX0gZWxzZSB7CisJCQlzd3FlX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3QgZWhjYV93cWUsCisJCQkJCSAgICAgdS51ZF9hdi5zZ19saXN0W3Bhcm1zLmFjdF9ucl9zZW5kX3NnZXNdKTsKKwkJCXJ3cWVfc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCBlaGNhX3dxZSwKKwkJCQkJICAgICB1LnVkX2F2LnNnX2xpc3RbcGFybXMuYWN0X25yX3JlY3Zfc2dlc10pOworCQl9CisKKwkJaWYgKElCX1FQVF9HU0kgPT0gaW5pdF9hdHRyLT5xcF90eXBlIHx8CisJCSAgICBJQl9RUFRfU01JID09IGluaXRfYXR0ci0+cXBfdHlwZSkgeworCQkJcGFybXMuYWN0X25yX3NlbmRfd3FlcyA9IGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3dyOworCQkJcGFybXMuYWN0X25yX3JlY3Zfd3FlcyA9IGluaXRfYXR0ci0+Y2FwLm1heF9yZWN2X3dyOworCQkJcGFybXMuYWN0X25yX3NlbmRfc2dlcyA9IGluaXRfYXR0ci0+Y2FwLm1heF9zZW5kX3NnZTsKKwkJCXBhcm1zLmFjdF9ucl9yZWN2X3NnZXMgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl9zZ2U7CisJCQlteV9xcC0+cmVhbF9xcF9udW0gPQorCQkJCShpbml0X2F0dHItPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkgPyAwIDogMTsKKwkJfQorCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogaW5pdGlhbGl6ZXMgci9zcXVldWUgYW5kIHJlZ2lzdGVycyBxdWV1ZSBwYWdlcyAqLworCXJldCA9IGluaXRfcXBfcXVldWVzKHNoY2EsIG15X3FwLAorCQkJICAgICBwYXJtcy5ucl9zcV9wYWdlcywgcGFybXMubnJfcnFfcGFnZXMsCisJCQkgICAgIHN3cWVfc2l6ZSwgcndxZV9zaXplLAorCQkJICAgICBwYXJtcy5hY3RfbnJfc2VuZF9zZ2VzLCBwYXJtcy5hY3RfbnJfcmVjdl9zZ2VzKTsKKwlpZiAocmV0KSB7CisJCWVoY2FfZXJyKHBkLT5kZXZpY2UsCisJCQkgIkNvdWxkbid0IGluaXRpYWxpemUgci9zcXVldWUgYW5kIHBhZ2VzIHJldD0leCIsIHJldCk7CisJCWdvdG8gY3JlYXRlX3FwX2V4aXQyOworCX0KKworCW15X3FwLT5pYl9xcC5wZCA9ICZteV9wZC0+aWJfcGQ7CisJbXlfcXAtPmliX3FwLmRldmljZSA9IG15X3BkLT5pYl9wZC5kZXZpY2U7CisKKwlteV9xcC0+aWJfcXAucmVjdl9jcSA9IGluaXRfYXR0ci0+cmVjdl9jcTsKKwlteV9xcC0+aWJfcXAuc2VuZF9jcSA9IGluaXRfYXR0ci0+c2VuZF9jcTsKKworCW15X3FwLT5pYl9xcC5xcF9udW0gPSBteV9xcC0+cmVhbF9xcF9udW07CisJbXlfcXAtPmliX3FwLnFwX3R5cGUgPSBpbml0X2F0dHItPnFwX3R5cGU7CisKKwlteV9xcC0+cXBfdHlwZSA9IGluaXRfYXR0ci0+cXBfdHlwZTsKKwlteV9xcC0+aWJfcXAuc3JxID0gaW5pdF9hdHRyLT5zcnE7CisKKwlteV9xcC0+aWJfcXAucXBfY29udGV4dCA9IGluaXRfYXR0ci0+cXBfY29udGV4dDsKKwlteV9xcC0+aWJfcXAuZXZlbnRfaGFuZGxlciA9IGluaXRfYXR0ci0+ZXZlbnRfaGFuZGxlcjsKKworCWluaXRfYXR0ci0+Y2FwLm1heF9pbmxpbmVfZGF0YSA9IDA7IC8qIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0gcGFybXMuYWN0X25yX3JlY3Zfc2dlczsKKwlpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciA9IHBhcm1zLmFjdF9ucl9yZWN2X3dxZXM7CisJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlID0gcGFybXMuYWN0X25yX3NlbmRfc2dlczsKKwlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciA9IHBhcm1zLmFjdF9ucl9zZW5kX3dxZXM7CisKKwkvKiBOT1RFOiBkZWZpbmVfYXBxMCgpIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJaWYgKGluaXRfYXR0ci0+cXBfdHlwZSA9PSBJQl9RUFRfR1NJKSB7CisJCWhfcmV0ID0gZWhjYV9kZWZpbmVfc3FwKHNoY2EsIG15X3FwLCBpbml0X2F0dHIpOworCQlpZiAoaF9yZXQgIT0gSF9TVUNDRVNTKSB7CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiZWhjYV9kZWZpbmVfc3FwKCkgZmFpbGVkIHJjPSVseCIsCisJCQkJIGhfcmV0KTsKKwkJCXJldCA9IGVoY2EyaWJfcmV0dXJuX2NvZGUoaF9yZXQpOworCQkJZ290byBjcmVhdGVfcXBfZXhpdDM7CisJCX0KKwl9CisJaWYgKGluaXRfYXR0ci0+c2VuZF9jcSkgeworCQlzdHJ1Y3QgZWhjYV9jcSAqY3EgPSBjb250YWluZXJfb2YoaW5pdF9hdHRyLT5zZW5kX2NxLAorCQkJCQkJICBzdHJ1Y3QgZWhjYV9jcSwgaWJfY3EpOworCQlyZXQgPSBlaGNhX2NxX2Fzc2lnbl9xcChjcSwgbXlfcXApOworCQlpZiAocmV0KSB7CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiQ291bGRuJ3QgYXNzaWduIHFwIHRvIHNlbmRfY3EgcmV0PSV4IiwKKwkJCQkgcmV0KTsKKwkJCWdvdG8gY3JlYXRlX3FwX2V4aXQzOworCQl9CisJCW15X3FwLT5zZW5kX2NxID0gY3E7CisJfQorCS8qIGNvcHkgcXVldWVzLCBnYWxwYSBkYXRhIHRvIHVzZXIgc3BhY2UgKi8KKwlpZiAoY29udGV4dCAmJiB1ZGF0YSkgeworCQlzdHJ1Y3QgaXB6X3F1ZXVlICppcHpfcnF1ZXVlID0gJm15X3FwLT5pcHpfcnF1ZXVlOworCQlzdHJ1Y3QgaXB6X3F1ZXVlICppcHpfc3F1ZXVlID0gJm15X3FwLT5pcHpfc3F1ZXVlOworCQlzdHJ1Y3QgZWhjYV9jcmVhdGVfcXBfcmVzcCByZXNwOworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWE7CisJCW1lbXNldCgmcmVzcCwgMCwgc2l6ZW9mKHJlc3ApKTsKKworCQlyZXNwLnFwX251bSA9IG15X3FwLT5yZWFsX3FwX251bTsKKwkJcmVzcC50b2tlbiA9IG15X3FwLT50b2tlbjsKKwkJcmVzcC5xcF90eXBlID0gbXlfcXAtPnFwX3R5cGU7CisJCXJlc3AucWtleSA9IG15X3FwLT5xa2V5OworCQlyZXNwLnJlYWxfcXBfbnVtID0gbXlfcXAtPnJlYWxfcXBfbnVtOworCQkvKiBycXVldWUgcHJvcGVydGllcyAqLworCQlyZXNwLmlwel9ycXVldWUucWVfc2l6ZSA9IGlwel9ycXVldWUtPnFlX3NpemU7CisJCXJlc3AuaXB6X3JxdWV1ZS5hY3RfbnJfb2Zfc2cgPSBpcHpfcnF1ZXVlLT5hY3RfbnJfb2Zfc2c7CisJCXJlc3AuaXB6X3JxdWV1ZS5xdWV1ZV9sZW5ndGggPSBpcHpfcnF1ZXVlLT5xdWV1ZV9sZW5ndGg7CisJCXJlc3AuaXB6X3JxdWV1ZS5wYWdlc2l6ZSA9IGlwel9ycXVldWUtPnBhZ2VzaXplOworCQlyZXNwLmlwel9ycXVldWUudG9nZ2xlX3N0YXRlID0gaXB6X3JxdWV1ZS0+dG9nZ2xlX3N0YXRlOworCQlyZXQgPSBlaGNhX21tYXBfbm9wYWdlKCgodTY0KShteV9xcC0+dG9rZW4pIDw8IDMyKSB8IDB4MjIwMDAwMDAsCisJCQkJICAgICAgIGlwel9ycXVldWUtPnF1ZXVlX2xlbmd0aCwKKwkJCQkgICAgICAgKHZvaWQqKikmcmVzcC5pcHpfcnF1ZXVlLnF1ZXVlLAorCQkJCSAgICAgICAmdm1hKTsKKwkJaWYgKHJldCkgeworCQkJZWhjYV9lcnIocGQtPmRldmljZSwgIkNvdWxkIG5vdCBtbWFwIHJxdWV1ZSBwYWdlcyIpOworCQkJZ290byBjcmVhdGVfcXBfZXhpdDM7CisJCX0KKwkJbXlfcXAtPnVzcGFjZV9ycXVldWUgPSByZXNwLmlwel9ycXVldWUucXVldWU7CisJCS8qIHNxdWV1ZSBwcm9wZXJ0aWVzICovCisJCXJlc3AuaXB6X3NxdWV1ZS5xZV9zaXplID0gaXB6X3NxdWV1ZS0+cWVfc2l6ZTsKKwkJcmVzcC5pcHpfc3F1ZXVlLmFjdF9ucl9vZl9zZyA9IGlwel9zcXVldWUtPmFjdF9ucl9vZl9zZzsKKwkJcmVzcC5pcHpfc3F1ZXVlLnF1ZXVlX2xlbmd0aCA9IGlwel9zcXVldWUtPnF1ZXVlX2xlbmd0aDsKKwkJcmVzcC5pcHpfc3F1ZXVlLnBhZ2VzaXplID0gaXB6X3NxdWV1ZS0+cGFnZXNpemU7CisJCXJlc3AuaXB6X3NxdWV1ZS50b2dnbGVfc3RhdGUgPSBpcHpfc3F1ZXVlLT50b2dnbGVfc3RhdGU7CisJCXJldCA9IGVoY2FfbW1hcF9ub3BhZ2UoKCh1NjQpKG15X3FwLT50b2tlbikgPDwgMzIpIHwgMHgyMzAwMDAwMCwKKwkJCQkgICAgICAgaXB6X3NxdWV1ZS0+cXVldWVfbGVuZ3RoLAorCQkJCSAgICAgICAodm9pZCoqKSZyZXNwLmlwel9zcXVldWUucXVldWUsCisJCQkJICAgICAgICZ2bWEpOworCQlpZiAocmV0KSB7CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiQ291bGQgbm90IG1tYXAgc3F1ZXVlIHBhZ2VzIik7CisJCQlnb3RvIGNyZWF0ZV9xcF9leGl0NDsKKwkJfQorCQlteV9xcC0+dXNwYWNlX3NxdWV1ZSA9IHJlc3AuaXB6X3NxdWV1ZS5xdWV1ZTsKKwkJLyogZndfaGFuZGxlICovCisJCXJlc3AuZ2FscGFzID0gbXlfcXAtPmdhbHBhczsKKwkJcmV0ID0gZWhjYV9tbWFwX3JlZ2lzdGVyKG15X3FwLT5nYWxwYXMudXNlci5md19oYW5kbGUsCisJCQkJCSAodm9pZCoqKSZyZXNwLmdhbHBhcy5rZXJuZWwuZndfaGFuZGxlLAorCQkJCQkgJnZtYSk7CisJCWlmIChyZXQpIHsKKwkJCWVoY2FfZXJyKHBkLT5kZXZpY2UsICJDb3VsZCBub3QgbW1hcCBmd19oYW5kbGUiKTsKKwkJCWdvdG8gY3JlYXRlX3FwX2V4aXQ1OworCQl9CisJCW15X3FwLT51c3BhY2VfZndoID0gKHU2NClyZXNwLmdhbHBhcy5rZXJuZWwuZndfaGFuZGxlOworCisJCWlmIChpYl9jb3B5X3RvX3VkYXRhKHVkYXRhLCAmcmVzcCwgc2l6ZW9mIHJlc3ApKSB7CisJCQllaGNhX2VycihwZC0+ZGV2aWNlLCAiQ29weSB0byB1ZGF0YSBmYWlsZWQiKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGNyZWF0ZV9xcF9leGl0NjsKKwkJfQorCX0KKworCXJldHVybiAmbXlfcXAtPmliX3FwOworCitjcmVhdGVfcXBfZXhpdDY6CisJZWhjYV9tdW5tYXAobXlfcXAtPnVzcGFjZV9md2gsIEVIQ0FfUEFHRVNJWkUpOworCitjcmVhdGVfcXBfZXhpdDU6CisJZWhjYV9tdW5tYXAobXlfcXAtPnVzcGFjZV9zcXVldWUsIG15X3FwLT5pcHpfc3F1ZXVlLnF1ZXVlX2xlbmd0aCk7CisKK2NyZWF0ZV9xcF9leGl0NDoKKwllaGNhX211bm1hcChteV9xcC0+dXNwYWNlX3JxdWV1ZSwgbXlfcXAtPmlwel9ycXVldWUucXVldWVfbGVuZ3RoKTsKKworY3JlYXRlX3FwX2V4aXQzOgorCWlwel9xdWV1ZV9kdG9yKCZteV9xcC0+aXB6X3JxdWV1ZSk7CisJaXB6X3F1ZXVlX2R0b3IoJm15X3FwLT5pcHpfc3F1ZXVlKTsKKworY3JlYXRlX3FwX2V4aXQyOgorCWhpcHpfaF9kZXN0cm95X3FwKHNoY2EtPmlwel9oY2FfaGFuZGxlLCBteV9xcCk7CisKK2NyZWF0ZV9xcF9leGl0MToKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCWlkcl9yZW1vdmUoJmVoY2FfcXBfaWRyLCBteV9xcC0+dG9rZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfcXBfaWRyX2xvY2ssIGZsYWdzKTsKKworY3JlYXRlX3FwX2V4aXQwOgorCWttZW1fY2FjaGVfZnJlZShxcF9jYWNoZSwgbXlfcXApOworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CisKKy8qCisgKiBwcmVwYXJlX3NxZV9ydHMgY2FsbGVkIGJ5IGludGVybmFsX21vZGlmeV9xcCgpIGF0IHRyYW5zIHNxZSAtPiBydHMKKyAqIHNldCBwdXJnZSBiaXQgb2YgYmFkIHdxZSBhbmQgc3Vic2VxdWVudCB3cWVzIHRvIGF2b2lkIHJlZW50ZXJpbmcgc3FlCisgKiByZXR1cm5zIHRvdGFsIG51bWJlciBvZiBiYWQgd3FlcyBpbiBiYWRfd3FlX2NudAorICovCitzdGF0aWMgaW50IHByZXBhcmVfc3FlX3J0cyhzdHJ1Y3QgZWhjYV9xcCAqbXlfcXAsIHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCQkgICBpbnQgKmJhZF93cWVfY250KQoreworCXU2NCBoX3JldDsKKwlzdHJ1Y3QgaXB6X3F1ZXVlICpzcXVldWU7CisJdm9pZCAqYmFkX3NlbmRfd3FlX3AsICpiYWRfc2VuZF93cWVfdjsKKwl2b2lkICpzcXVldWVfc3RhcnRfcCwgKnNxdWV1ZV9lbmRfcDsKKwl2b2lkICpzcXVldWVfc3RhcnRfdiwgKnNxdWV1ZV9lbmRfdjsKKwlzdHJ1Y3QgZWhjYV93cWUgKndxZTsKKwlpbnQgcXBfbnVtID0gbXlfcXAtPmliX3FwLnFwX251bTsKKworCS8qIGdldCBzZW5kIHdxZSBwb2ludGVyICovCisJaF9yZXQgPSBoaXB6X2hfZGlzYWJsZV9hbmRfZ2V0X3dxZShzaGNhLT5pcHpfaGNhX2hhbmRsZSwKKwkJCQkJICAgbXlfcXAtPmlwel9xcF9oYW5kbGUsICZteV9xcC0+cGYsCisJCQkJCSAgICZiYWRfc2VuZF93cWVfcCwgTlVMTCwgMik7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2Vycigmc2hjYS0+aWJfZGV2aWNlLCAiaGlwel9oX2Rpc2FibGVfYW5kX2dldF93cWUoKSBmYWlsZWQiCisJCQkgIiBlaGNhX3FwPSVwIHFwX251bT0leCBoX3JldD0lbHgiLAorCQkJIG15X3FwLCBxcF9udW0sIGhfcmV0KTsKKwkJcmV0dXJuIGVoY2EyaWJfcmV0dXJuX2NvZGUoaF9yZXQpOworCX0KKwliYWRfc2VuZF93cWVfcCA9ICh2b2lkKikoKHU2NCliYWRfc2VuZF93cWVfcCAmICh+KDFMPDw2MykpKTsKKwllaGNhX2RiZygmc2hjYS0+aWJfZGV2aWNlLCAicXBfbnVtPSV4IGJhZF9zZW5kX3dxZV9wPSVwIiwKKwkJIHFwX251bSwgYmFkX3NlbmRfd3FlX3ApOworCS8qIGNvbnZlcnQgd3FlIHBvaW50ZXIgdG8gdmFkciAqLworCWJhZF9zZW5kX3dxZV92ID0gYWJzX3RvX3ZpcnQoKHU2NCliYWRfc2VuZF93cWVfcCk7CisJaWYgKGVoY2FfZGVidWdfbGV2ZWwpCisJCWVoY2FfZG1wKGJhZF9zZW5kX3dxZV92LCAzMiwgInFwX251bT0leCBiYWRfd3FlIiwgcXBfbnVtKTsKKwlzcXVldWUgPSAmbXlfcXAtPmlwel9zcXVldWU7CisJc3F1ZXVlX3N0YXJ0X3AgPSAodm9pZCopdmlydF90b19hYnMoaXB6X3FlaXRfY2FsYyhzcXVldWUsIDBMKSk7CisJc3F1ZXVlX2VuZF9wID0gc3F1ZXVlX3N0YXJ0X3Arc3F1ZXVlLT5xdWV1ZV9sZW5ndGg7CisJc3F1ZXVlX3N0YXJ0X3YgPSBhYnNfdG9fdmlydCgodTY0KXNxdWV1ZV9zdGFydF9wKTsKKwlzcXVldWVfZW5kX3YgPSBhYnNfdG9fdmlydCgodTY0KXNxdWV1ZV9lbmRfcCk7CisJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgInFwX251bT0leCBzcXVldWVfc3RhcnRfdj0lcCBzcXVldWVfZW5kX3Y9JXAiLAorCQkgcXBfbnVtLCBzcXVldWVfc3RhcnRfdiwgc3F1ZXVlX2VuZF92KTsKKworCS8qIGxvb3Agc2V0cyB3cWUncyBwdXJnZSBiaXQgKi8KKwl3cWUgPSAoc3RydWN0IGVoY2Ffd3FlKiliYWRfc2VuZF93cWVfdjsKKwkqYmFkX3dxZV9jbnQgPSAwOworCXdoaWxlICh3cWUtPm9wdHlwZSAhPSAweGZmICYmIHdxZS0+d3FlZiAhPSAweGZmKSB7CisJCWlmIChlaGNhX2RlYnVnX2xldmVsKQorCQkJZWhjYV9kbXAod3FlLCAzMiwgInFwX251bT0leCB3cWUiLCBxcF9udW0pOworCQl3cWUtPm5yX29mX2RhdGFfc2VnID0gMDsgLyogc3VwcHJlc3MgZGF0YSBhY2Nlc3MgKi8KKwkJd3FlLT53cWVmID0gV1FFRl9QVVJHRTsgLyogV1FFIHRvIGJlIHB1cmdlZCAqLworCQl3cWUgPSAoc3RydWN0IGVoY2Ffd3FlKikoKHU4Kil3cWUrc3F1ZXVlLT5xZV9zaXplKTsKKwkJKmJhZF93cWVfY250ID0gKCpiYWRfd3FlX2NudCkrMTsKKwkJaWYgKCh2b2lkKil3cWUgPj0gc3F1ZXVlX2VuZF92KSB7CisJCQl3cWUgPSBzcXVldWVfc3RhcnRfdjsKKwkJfQorCX0KKwkvKgorCSAqIGJhZCB3cWUgd2lsbCBiZSByZXByb2Nlc3NlZCBhbmQgaWdub3JlZCB3aGVuIHBvbF9jcSgpIGlzIGNhbGxlZCwKKwkgKiAgaS5lLiBuciBvZiB3cWVzIHdpdGggZmx1c2ggZXJyb3Igc3RhdHVzIGlzIG9uZSBsZXNzCisJICovCisJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgInFwX251bT0leCBmbHVzaGVycl93cWVfY250PSV4IiwKKwkJIHFwX251bSwgKCpiYWRfd3FlX2NudCktMSk7CisJd3FlLT53cWVmID0gMDsKKworCXJldHVybiAwOworfQorCisvKgorICogaW50ZXJuYWxfbW9kaWZ5X3FwIHdpdGggY2lyY3VtdmVudGlvbiB0byBoYW5kbGUgYXFwMCBwcm9wZXJseQorICogc21pX3Jlc2V0MmluaXQgaW5kaWNhdGVzIGlmIHRoaXMgaXMgYW4gaW50ZXJuYWwgcmVzZXQtdG8taW5pdC1jYWxsIGZvcgorICogc21pLiBUaGlzIGZsYWcgbXVzdCBhbHdheXMgYmUgemVybyBpZiBjYWxsZWQgZnJvbSBlaGNhX21vZGlmeV9xcCgpIQorICogVGhpcyBpbnRlcm5hbCBmdW5jIHdhcyBpbnRvcmR1Y2VkIHRvIGF2b2lkIHJlY3Vyc2lvbiBvZiBlaGNhX21vZGlmeV9xcCgpIQorICovCitzdGF0aWMgaW50IGludGVybmFsX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsCisJCQkgICAgICBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwKKwkJCSAgICAgIGludCBhdHRyX21hc2ssIGludCBzbWlfcmVzZXQyaW5pdCkKK3sKKwllbnVtIGliX3FwX3N0YXRlIHFwX2N1cl9zdGF0ZSwgcXBfbmV3X3N0YXRlOworCWludCBjbnQsIHFwX2F0dHJfaWR4LCByZXQgPSAwOworCWVudW0gaWJfcXBfc3RhdGV0cmFucyBzdGF0ZXRyYW5zOworCXN0cnVjdCBoY3BfbW9kaWZ5X3FwX2NvbnRyb2xfYmxvY2sgKm1xcGNiOworCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9IGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgZWhjYV9xcCwgaWJfcXApOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPQorCQljb250YWluZXJfb2YoaWJxcC0+cGQtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwgaWJfZGV2aWNlKTsKKwl1NjQgdXBkYXRlX21hc2s7CisJdTY0IGhfcmV0OworCWludCBiYWRfd3FlX2NudCA9IDA7CisJaW50IHNxdWV1ZV9sb2NrZWQgPSAwOworCXVuc2lnbmVkIGxvbmcgc3BsX2ZsYWdzID0gMDsKKworCS8qIGRvIHF1ZXJ5X3FwIHRvIG9idGFpbiBjdXJyZW50IGF0dHIgdmFsdWVzICovCisJbXFwY2IgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAobXFwY2IgPT0gTlVMTCkgeworCQllaGNhX2VycihpYnFwLT5kZXZpY2UsICJDb3VsZCBub3QgZ2V0IHplcm9lZCBwYWdlIGZvciBtcXBjYiAiCisJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4ICIsIG15X3FwLCBpYnFwLT5xcF9udW0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloX3JldCA9IGhpcHpfaF9xdWVyeV9xcChzaGNhLT5pcHpfaGNhX2hhbmRsZSwKKwkJCQlteV9xcC0+aXB6X3FwX2hhbmRsZSwKKwkJCQkmbXlfcXAtPnBmLAorCQkJCW1xcGNiLCBteV9xcC0+Z2FscGFzLmtlcm5lbCk7CisJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGNhX2VycihpYnFwLT5kZXZpY2UsICJoaXB6X2hfcXVlcnlfcXAoKSBmYWlsZWQgIgorCQkJICJlaGNhX3FwPSVwIHFwX251bT0leCBoX3JldD0lbHgiLAorCQkJIG15X3FwLCBpYnFwLT5xcF9udW0sIGhfcmV0KTsKKwkJcmV0ID0gZWhjYTJpYl9yZXR1cm5fY29kZShoX3JldCk7CisJCWdvdG8gbW9kaWZ5X3FwX2V4aXQxOworCX0KKworCXFwX2N1cl9zdGF0ZSA9IGVoY2EyaWJfcXBfc3RhdGUobXFwY2ItPnFwX3N0YXRlKTsKKworCWlmIChxcF9jdXJfc3RhdGUgPT0gLUVJTlZBTCkgewkvKiBpbnZhbGlkIHFwIHN0YXRlICovCisJCXJldCA9IC1FSU5WQUw7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkludmFsaWQgY3VycmVudCBlaGNhX3FwX3N0YXRlPSV4ICIKKwkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXgiLAorCQkJIG1xcGNiLT5xcF9zdGF0ZSwgbXlfcXAsIGlicXAtPnFwX251bSk7CisJCWdvdG8gbW9kaWZ5X3FwX2V4aXQxOworCX0KKwkvKgorCSAqIGNpcmN1bXZlbnRpb24gdG8gc2V0IGFxcDAgaW5pdGlhbCBzdGF0ZSB0byBpbml0CisJICogYXMgZXhwZWN0ZWQgYnkgSUIgc3BlYworCSAqLworCWlmIChzbWlfcmVzZXQyaW5pdCA9PSAwICYmCisJICAgIGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSAmJgorCSAgICBxcF9jdXJfc3RhdGUgPT0gSUJfUVBTX1JFU0VUICYmCisJICAgIChhdHRyX21hc2sgJiBJQl9RUF9TVEFURSkgJiYKKwkgICAgYXR0ci0+cXBfc3RhdGUgPT0gSUJfUVBTX0lOSVQpIHsgLyogUkVTRVQgLT4gSU5JVCAqLworCQlzdHJ1Y3QgaWJfcXBfYXR0ciBzbWlxcF9hdHRyID0geworCQkJLnFwX3N0YXRlID0gSUJfUVBTX0lOSVQsCisJCQkucG9ydF9udW0gPSBteV9xcC0+aW5pdF9hdHRyLnBvcnRfbnVtLAorCQkJLnBrZXlfaW5kZXggPSAwLAorCQkJLnFrZXkgPSAwCisJCX07CisJCWludCBzbWlxcF9hdHRyX21hc2sgPSBJQl9RUF9TVEFURSB8IElCX1FQX1BPUlQgfAorCQkJSUJfUVBfUEtFWV9JTkRFWCB8IElCX1FQX1FLRVk7CisJCWludCBzbWlyYyA9IGludGVybmFsX21vZGlmeV9xcCgKKwkJCWlicXAsICZzbWlxcF9hdHRyLCBzbWlxcF9hdHRyX21hc2ssIDEpOworCQlpZiAoc21pcmMpIHsKKwkJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIlNNSSBSRVNFVCAtPiBJTklUIGZhaWxlZC4gIgorCQkJCSAiZWhjYV9tb2RpZnlfcXAoKSByYz0leCIsIHNtaXJjKTsKKwkJCXJldCA9IEhfUEFSQU1FVEVSOworCQkJZ290byBtb2RpZnlfcXBfZXhpdDE7CisJCX0KKwkJcXBfY3VyX3N0YXRlID0gSUJfUVBTX0lOSVQ7CisJCWVoY2FfZGJnKGlicXAtPmRldmljZSwgIlNNSSBSRVNFVCAtPiBJTklUIHN1Y2NlZWRlZCIpOworCX0KKwkvKiBpcyB0cmFuc21pdHRlZCBjdXJyZW50IHN0YXRlICBlcXVhbCB0byAicmVhbCIgY3VycmVudCBzdGF0ZSAqLworCWlmICgoYXR0cl9tYXNrICYgSUJfUVBfQ1VSX1NUQVRFKSAmJgorCSAgICBxcF9jdXJfc3RhdGUgIT0gYXR0ci0+Y3VyX3FwX3N0YXRlKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwKKwkJCSAiSW52YWxpZCBJQl9RUF9DVVJfU1RBVEUgYXR0ci0+Y3Vycl9xcF9zdGF0ZT0leCA8PiIKKwkJCSAiIGFjdHVhbCBjdXJfcXBfc3RhdGU9JXguIGVoY2FfcXA9JXAgcXBfbnVtPSV4IiwKKwkJCSBhdHRyLT5jdXJfcXBfc3RhdGUsIHFwX2N1cl9zdGF0ZSwgbXlfcXAsIGlicXAtPnFwX251bSk7CisJCWdvdG8gbW9kaWZ5X3FwX2V4aXQxOworCX0KKworCWVoY2FfZGJnKGlicXAtPmRldmljZSwiZWhjYV9xcD0lcCBxcF9udW09JXggY3VycmVudCBxcF9zdGF0ZT0leCAiCisJCSAibmV3IHFwX3N0YXRlPSV4IGF0dHJpYnV0ZV9tYXNrPSV4IiwKKwkJIG15X3FwLCBpYnFwLT5xcF9udW0sIHFwX2N1cl9zdGF0ZSwgYXR0ci0+cXBfc3RhdGUsIGF0dHJfbWFzayk7CisKKwlxcF9uZXdfc3RhdGUgPSBhdHRyX21hc2sgJiBJQl9RUF9TVEFURSA/IGF0dHItPnFwX3N0YXRlIDogcXBfY3VyX3N0YXRlOworCWlmICghc21pX3Jlc2V0MmluaXQgJiYKKwkgICAgIWliX21vZGlmeV9xcF9pc19vayhxcF9jdXJfc3RhdGUsIHFwX25ld19zdGF0ZSwgaWJxcC0+cXBfdHlwZSwKKwkJCQlhdHRyX21hc2spKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwKKwkJCSAiSW52YWxpZCBxcCB0cmFuc2l0aW9uIG5ld19zdGF0ZT0leCBjdXJfc3RhdGU9JXggIgorCQkJICJlaGNhX3FwPSVwIHFwX251bT0leCBhdHRyX21hc2s9JXgiLCBxcF9uZXdfc3RhdGUsCisJCQkgcXBfY3VyX3N0YXRlLCBteV9xcCwgaWJxcC0+cXBfbnVtLCBhdHRyX21hc2spOworCQlnb3RvIG1vZGlmeV9xcF9leGl0MTsKKwl9CisKKwlpZiAoKG1xcGNiLT5xcF9zdGF0ZSA9IGliMmVoY2FfcXBfc3RhdGUocXBfbmV3X3N0YXRlKSkpCisJCXVwZGF0ZV9tYXNrID0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19RUF9TVEFURSwgMSk7CisJZWxzZSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkludmFsaWQgbmV3IHFwIHN0YXRlPSV4ICIKKwkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXgiLAorCQkJIHFwX25ld19zdGF0ZSwgbXlfcXAsIGlicXAtPnFwX251bSk7CisJCWdvdG8gbW9kaWZ5X3FwX2V4aXQxOworCX0KKworCS8qIHJldHJpZXZlIHN0YXRlIHRyYW5zaXRpb24gc3RydWN0IHRvIGdldCByZXEgYW5kIG9wdCBhdHRycyAqLworCXN0YXRldHJhbnMgPSBnZXRfbW9kcXBfc3RhdGV0cmFucyhxcF9jdXJfc3RhdGUsIHFwX25ld19zdGF0ZSk7CisJaWYgKHN0YXRldHJhbnMgPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIjxJTlZBTElEIFNUQVRFIENIQU5HRT4gcXBfY3VyX3N0YXRlPSV4ICIKKwkJCSAibmV3X3FwX3N0YXRlPSV4IFN0YXRlX3hzaXRpb249JXggZWhjYV9xcD0lcCAiCisJCQkgInFwX251bT0leCIsIHFwX2N1cl9zdGF0ZSwgcXBfbmV3X3N0YXRlLAorCQkJIHN0YXRldHJhbnMsIG15X3FwLCBpYnFwLT5xcF9udW0pOworCQlnb3RvIG1vZGlmeV9xcF9leGl0MTsKKwl9CisKKwlxcF9hdHRyX2lkeCA9IGliMmVoY2FxcHR5cGUoaWJxcC0+cXBfdHlwZSk7CisKKwlpZiAocXBfYXR0cl9pZHggPCAwKSB7CisJCXJldCA9IHFwX2F0dHJfaWR4OworCQllaGNhX2VycihpYnFwLT5kZXZpY2UsCisJCQkgIkludmFsaWQgUVAgdHlwZT0leCBlaGNhX3FwPSVwIHFwX251bT0leCIsCisJCQkgaWJxcC0+cXBfdHlwZSwgbXlfcXAsIGlicXAtPnFwX251bSk7CisJCWdvdG8gbW9kaWZ5X3FwX2V4aXQxOworCX0KKworCWVoY2FfZGJnKGlicXAtPmRldmljZSwKKwkJICJlaGNhX3FwPSVwIHFwX251bT0leCA8VkFMSUQgU1RBVEUgQ0hBTkdFPiBxcF9zdGF0ZV94c2l0PSV4IiwKKwkJIG15X3FwLCBpYnFwLT5xcF9udW0sIHN0YXRldHJhbnMpOworCisJLyogc3FlIC0+IHJ0czogc2V0IHB1cmdlIGJpdCBvZiBiYWQgd3FlIGJlZm9yZSBhY3R1YWwgdHJhbnMgKi8KKwlpZiAoKG15X3FwLT5xcF90eXBlID09IElCX1FQVF9VRCB8fAorCSAgICAgbXlfcXAtPnFwX3R5cGUgPT0gSUJfUVBUX0dTSSB8fAorCSAgICAgbXlfcXAtPnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkgJiYKKwkgICAgc3RhdGV0cmFucyA9PSBJQl9RUFNUX1NRRTJSVFMpIHsKKwkJLyogbWFyayBuZXh0IGZyZWUgd3FlIGlmIGtlcm5lbCAqLworCQlpZiAobXlfcXAtPnVzcGFjZV9zcXVldWUgPT0gMCkgeworCQkJc3RydWN0IGVoY2Ffd3FlICp3cWU7CisJCQkvKiBsb2NrIHNlbmQgcXVldWUgKi8KKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZteV9xcC0+c3BpbmxvY2tfcywgc3BsX2ZsYWdzKTsKKwkJCXNxdWV1ZV9sb2NrZWQgPSAxOworCQkJLyogbWFyayBuZXh0IGZyZWUgd3FlICovCisJCQl3cWUgPSAoc3RydWN0IGVoY2Ffd3FlKikKKwkJCQlpcHpfcWVpdF9nZXQoJm15X3FwLT5pcHpfc3F1ZXVlKTsKKwkJCXdxZS0+b3B0eXBlID0gd3FlLT53cWVmID0gMHhmZjsKKwkJCWVoY2FfZGJnKGlicXAtPmRldmljZSwgInFwX251bT0leCBuZXh0X2ZyZWVfd3FlPSVwIiwKKwkJCQkgaWJxcC0+cXBfbnVtLCB3cWUpOworCQl9CisJCXJldCA9IHByZXBhcmVfc3FlX3J0cyhteV9xcCwgc2hjYSwgJmJhZF93cWVfY250KTsKKwkJaWYgKHJldCkgeworCQkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAicHJlcGFyZV9zcWVfcnRzKCkgZmFpbGVkICIKKwkJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4IHJldD0leCIsCisJCQkJIG15X3FwLCBpYnFwLT5xcF9udW0sIHJldCk7CisJCQlnb3RvIG1vZGlmeV9xcF9leGl0MjsKKwkJfQorCX0KKworCS8qCisJICogZW5hYmxlIFJETUFfQXRvbWljX0NvbnRyb2wgaWYgcmVzZXQtPmluaXQgdW5kIHJlbGlhYmxlIGNvbgorCSAqIHRoaXMgaXMgbmVjZXNzYXJ5IHNpbmNlIGdlbjIgZG9lcyBub3QgcHJvdmlkZSB0aGF0IGZsYWcsCisJICogYnV0IHBIeXAgcmVxdWlyZXMgaXQKKwkgKi8KKwlpZiAoc3RhdGV0cmFucyA9PSBJQl9RUFNUX1JFU0VUMklOSVQgJiYKKwkgICAgKGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1JDIHx8IGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VDKSkgeworCQltcXBjYi0+cmRtYV9hdG9taWNfY3RybCA9IDM7CisJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfUkRNQV9BVE9NSUNfQ1RSTCwgMSk7CisJfQorCS8qIGNpcmMuIHBIeXAgcmVxdWlyZXMgI1JETUEvQXRvbWljIFJlc3AgUmVzIGZvciBVQyBJTklUIC0+IFJUUiAqLworCWlmIChzdGF0ZXRyYW5zID09IElCX1FQU1RfSU5JVDJSVFIgJiYKKwkgICAgKGlicXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VDKSAmJgorCSAgICAhKGF0dHJfbWFzayAmIElCX1FQX01BWF9ERVNUX1JEX0FUT01JQykpIHsKKwkJbXFwY2ItPnJkbWFfbnJfYXRvbWljX3Jlc3BfcmVzID0gMTsgLyogZGVmYXVsdCB0byAxICovCisJCXVwZGF0ZV9tYXNrIHw9CisJCQlFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1JETUFfTlJfQVRPTUlDX1JFU1BfUkVTLCAxKTsKKwl9CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEtFWV9JTkRFWCkgeworCQltcXBjYi0+cHJpbV9wX2tleV9pZHggPSBhdHRyLT5wa2V5X2luZGV4OworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1BSSU1fUF9LRVlfSURYLCAxKTsKKwl9CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1BPUlQpIHsKKwkJaWYgKGF0dHItPnBvcnRfbnVtIDwgMSB8fCBhdHRyLT5wb3J0X251bSA+IHNoY2EtPm51bV9wb3J0cykgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkludmFsaWQgcG9ydD0leC4gIgorCQkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXggbnVtX3BvcnRzPSV4IiwKKwkJCQkgYXR0ci0+cG9ydF9udW0sIG15X3FwLCBpYnFwLT5xcF9udW0sCisJCQkJIHNoY2EtPm51bV9wb3J0cyk7CisJCQlnb3RvIG1vZGlmeV9xcF9leGl0MjsKKwkJfQorCQltcXBjYi0+cHJpbV9waHlzX3BvcnQgPSBhdHRyLT5wb3J0X251bTsKKwkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19QUklNX1BIWVNfUE9SVCwgMSk7CisJfQorCWlmIChhdHRyX21hc2sgJiBJQl9RUF9RS0VZKSB7CisJCW1xcGNiLT5xa2V5ID0gYXR0ci0+cWtleTsKKwkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19RS0VZLCAxKTsKKwl9CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX0FWKSB7CisJCWludCBhaF9tdWx0ID0gaWJfcmF0ZV90b19tdWx0KGF0dHItPmFoX2F0dHIuc3RhdGljX3JhdGUpOworCQlpbnQgZWhjYV9tdWx0ID0gaWJfcmF0ZV90b19tdWx0KHNoY2EtPnNwb3J0W215X3FwLT4KKwkJCQkJCWluaXRfYXR0ci5wb3J0X251bV0ucmF0ZSk7CisKKwkJbXFwY2ItPmRsaWQgPSBhdHRyLT5haF9hdHRyLmRsaWQ7CisJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfRExJRCwgMSk7CisJCW1xcGNiLT5zb3VyY2VfcGF0aF9iaXRzID0gYXR0ci0+YWhfYXR0ci5zcmNfcGF0aF9iaXRzOworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1NPVVJDRV9QQVRIX0JJVFMsIDEpOworCQltcXBjYi0+c2VydmljZV9sZXZlbCA9IGF0dHItPmFoX2F0dHIuc2w7CisJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfU0VSVklDRV9MRVZFTCwgMSk7CisKKwkJaWYgKGFoX211bHQgPCBlaGNhX211bHQpCisJCQltcXBjYi0+bWF4X3N0YXRpY19yYXRlID0gKGFoX211bHQgPiAwKSA/CisJCQkoKGVoY2FfbXVsdCAtIDEpIC8gYWhfbXVsdCkgOiAwOworCQllbHNlCisJCQltcXBjYi0+bWF4X3N0YXRpY19yYXRlID0gMDsKKworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX01BWF9TVEFUSUNfUkFURSwgMSk7CisKKwkJLyoKKwkJICogb25seSBpZiBHUkggaXMgVFJVRSB3ZSBtaWdodCBjb25zaWRlciBTT1VSQ0VfR0lEX0lEWAorCQkgKiBhbmQgREVTVF9HSUQgb3RoZXJ3aXNlIHBoeXBlIHdpbGwgcmV0dXJuIEhfQVRUUl9QQVJNISEhCisJCSAqLworCQlpZiAoYXR0ci0+YWhfYXR0ci5haF9mbGFncyA9PSBJQl9BSF9HUkgpIHsKKwkJCW1xcGNiLT5zZW5kX2dyaF9mbGFnID0gMSA8PCAzMTsKKwkJCXVwZGF0ZV9tYXNrIHw9CisJCQkJRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19TRU5EX0dSSF9GTEFHLCAxKTsKKwkJCW1xcGNiLT5zb3VyY2VfZ2lkX2lkeCA9IGF0dHItPmFoX2F0dHIuZ3JoLnNnaWRfaW5kZXg7CisJCQl1cGRhdGVfbWFzayB8PQorCQkJCUVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfU09VUkNFX0dJRF9JRFgsIDEpOworCisJCQlmb3IgKGNudCA9IDA7IGNudCA8IDE2OyBjbnQrKykKKwkJCQltcXBjYi0+ZGVzdF9naWQuYnl0ZVtjbnRdID0KKwkJCQkJYXR0ci0+YWhfYXR0ci5ncmguZGdpZC5yYXdbY250XTsKKworCQkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19ERVNUX0dJRCwgMSk7CisJCQltcXBjYi0+Zmxvd19sYWJlbCA9IGF0dHItPmFoX2F0dHIuZ3JoLmZsb3dfbGFiZWw7CisJCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX0ZMT1dfTEFCRUwsIDEpOworCQkJbXFwY2ItPmhvcF9saW1pdCA9IGF0dHItPmFoX2F0dHIuZ3JoLmhvcF9saW1pdDsKKwkJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfSE9QX0xJTUlULCAxKTsKKwkJCW1xcGNiLT50cmFmZmljX2NsYXNzID0gYXR0ci0+YWhfYXR0ci5ncmgudHJhZmZpY19jbGFzczsKKwkJCXVwZGF0ZV9tYXNrIHw9CisJCQkJRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19UUkFGRklDX0NMQVNTLCAxKTsKKwkJfQorCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01UVSkgeworCQltcXBjYi0+cGF0aF9tdHUgPSBhdHRyLT5wYXRoX210dTsKKwkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19QQVRIX01UVSwgMSk7CisJfQorCWlmIChhdHRyX21hc2sgJiBJQl9RUF9USU1FT1VUKSB7CisJCW1xcGNiLT50aW1lb3V0ID0gYXR0ci0+dGltZW91dDsKKwkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19USU1FT1VULCAxKTsKKwl9CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1JFVFJZX0NOVCkgeworCQltcXBjYi0+cmV0cnlfY291bnQgPSBhdHRyLT5yZXRyeV9jbnQ7CisJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfUkVUUllfQ09VTlQsIDEpOworCX0KKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUk5SX1JFVFJZKSB7CisJCW1xcGNiLT5ybnJfcmV0cnlfY291bnQgPSBhdHRyLT5ybnJfcmV0cnk7CisJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfUk5SX1JFVFJZX0NPVU5ULCAxKTsKKwl9CisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1JRX1BTTikgeworCQltcXBjYi0+cmVjZWl2ZV9wc24gPSBhdHRyLT5ycV9wc247CisJCXVwZGF0ZV9tYXNrIHw9IEVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfUkVDRUlWRV9QU04sIDEpOworCX0KKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX0RFU1RfUkRfQVRPTUlDKSB7CisJCW1xcGNiLT5yZG1hX25yX2F0b21pY19yZXNwX3JlcyA9IGF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA8IDMgPworCQkJYXR0ci0+bWF4X2Rlc3RfcmRfYXRvbWljIDogMjsKKwkJdXBkYXRlX21hc2sgfD0KKwkJCUVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfUkRNQV9OUl9BVE9NSUNfUkVTUF9SRVMsIDEpOworCX0KKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUFYX1FQX1JEX0FUT01JQykgeworCQltcXBjYi0+cmRtYV9hdG9taWNfb3V0c3RfZGVzdF9xcCA9IGF0dHItPm1heF9yZF9hdG9taWMgPCAzID8KKwkJCWF0dHItPm1heF9yZF9hdG9taWMgOiAyOworCQl1cGRhdGVfbWFzayB8PQorCQkJRUhDQV9CTUFTS19TRVQKKwkJCShNUVBDQl9NQVNLX1JETUFfQVRPTUlDX09VVFNUX0RFU1RfUVAsIDEpOworCX0KKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQUxUX1BBVEgpIHsKKwkJaW50IGFoX211bHQgPSBpYl9yYXRlX3RvX211bHQoYXR0ci0+YWx0X2FoX2F0dHIuc3RhdGljX3JhdGUpOworCQlpbnQgZWhjYV9tdWx0ID0gaWJfcmF0ZV90b19tdWx0KAorCQkJc2hjYS0+c3BvcnRbbXlfcXAtPmluaXRfYXR0ci5wb3J0X251bV0ucmF0ZSk7CisKKwkJbXFwY2ItPmRsaWRfYWwgPSBhdHRyLT5hbHRfYWhfYXR0ci5kbGlkOworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX0RMSURfQUwsIDEpOworCQltcXBjYi0+c291cmNlX3BhdGhfYml0c19hbCA9IGF0dHItPmFsdF9haF9hdHRyLnNyY19wYXRoX2JpdHM7CisJCXVwZGF0ZV9tYXNrIHw9CisJCQlFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1NPVVJDRV9QQVRIX0JJVFNfQUwsIDEpOworCQltcXBjYi0+c2VydmljZV9sZXZlbF9hbCA9IGF0dHItPmFsdF9haF9hdHRyLnNsOworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1NFUlZJQ0VfTEVWRUxfQUwsIDEpOworCisJCWlmIChhaF9tdWx0IDwgZWhjYV9tdWx0KQorCQkJbXFwY2ItPm1heF9zdGF0aWNfcmF0ZSA9IChhaF9tdWx0ID4gMCkgPworCQkJKChlaGNhX211bHQgLSAxKSAvIGFoX211bHQpIDogMDsKKwkJZWxzZQorCQkJbXFwY2ItPm1heF9zdGF0aWNfcmF0ZV9hbCA9IDA7CisKKwkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19NQVhfU1RBVElDX1JBVEVfQUwsIDEpOworCisJCS8qCisJCSAqIG9ubHkgaWYgR1JIIGlzIFRSVUUgd2UgbWlnaHQgY29uc2lkZXIgU09VUkNFX0dJRF9JRFgKKwkJICogYW5kIERFU1RfR0lEIG90aGVyd2lzZSBwaHlwZSB3aWxsIHJldHVybiBIX0FUVFJfUEFSTSEhIQorCQkgKi8KKwkJaWYgKGF0dHItPmFsdF9haF9hdHRyLmFoX2ZsYWdzID09IElCX0FIX0dSSCkgeworCQkJbXFwY2ItPnNlbmRfZ3JoX2ZsYWdfYWwgPSAxIDw8IDMxOworCQkJdXBkYXRlX21hc2sgfD0KKwkJCQlFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1NFTkRfR1JIX0ZMQUdfQUwsIDEpOworCQkJbXFwY2ItPnNvdXJjZV9naWRfaWR4X2FsID0KKwkJCQlhdHRyLT5hbHRfYWhfYXR0ci5ncmguc2dpZF9pbmRleDsKKwkJCXVwZGF0ZV9tYXNrIHw9CisJCQkJRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19TT1VSQ0VfR0lEX0lEWF9BTCwgMSk7CisKKwkJCWZvciAoY250ID0gMDsgY250IDwgMTY7IGNudCsrKQorCQkJCW1xcGNiLT5kZXN0X2dpZF9hbC5ieXRlW2NudF0gPQorCQkJCQlhdHRyLT5hbHRfYWhfYXR0ci5ncmguZGdpZC5yYXdbY250XTsKKworCQkJdXBkYXRlX21hc2sgfD0KKwkJCQlFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX0RFU1RfR0lEX0FMLCAxKTsKKwkJCW1xcGNiLT5mbG93X2xhYmVsX2FsID0gYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmZsb3dfbGFiZWw7CisJCQl1cGRhdGVfbWFzayB8PQorCQkJCUVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfRkxPV19MQUJFTF9BTCwgMSk7CisJCQltcXBjYi0+aG9wX2xpbWl0X2FsID0gYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmhvcF9saW1pdDsKKwkJCXVwZGF0ZV9tYXNrIHw9CisJCQkJRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19IT1BfTElNSVRfQUwsIDEpOworCQkJbXFwY2ItPnRyYWZmaWNfY2xhc3NfYWwgPQorCQkJCWF0dHItPmFsdF9haF9hdHRyLmdyaC50cmFmZmljX2NsYXNzOworCQkJdXBkYXRlX21hc2sgfD0KKwkJCQlFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1RSQUZGSUNfQ0xBU1NfQUwsIDEpOworCQl9CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01JTl9STlJfVElNRVIpIHsKKwkJbXFwY2ItPm1pbl9ybnJfbmFrX3RpbWVyX2ZpZWxkID0gYXR0ci0+bWluX3Jucl90aW1lcjsKKwkJdXBkYXRlX21hc2sgfD0KKwkJCUVIQ0FfQk1BU0tfU0VUKE1RUENCX01BU0tfTUlOX1JOUl9OQUtfVElNRVJfRklFTEQsIDEpOworCX0KKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9TUV9QU04pIHsKKwkJbXFwY2ItPnNlbmRfcHNuID0gYXR0ci0+c3FfcHNuOworCQl1cGRhdGVfbWFzayB8PSBFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1NFTkRfUFNOLCAxKTsKKwl9CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfREVTVF9RUE4pIHsKKwkJbXFwY2ItPmRlc3RfcXBfbnIgPSBhdHRyLT5kZXN0X3FwX251bTsKKwkJdXBkYXRlX21hc2sgfD0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19ERVNUX1FQX05SLCAxKTsKKwl9CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NSUdfU1RBVEUpIHsKKwkJbXFwY2ItPnBhdGhfbWlncmF0aW9uX3N0YXRlID0gYXR0ci0+cGF0aF9taWdfc3RhdGU7CisJCXVwZGF0ZV9tYXNrIHw9CisJCQlFSENBX0JNQVNLX1NFVChNUVBDQl9NQVNLX1BBVEhfTUlHUkFUSU9OX1NUQVRFLCAxKTsKKwl9CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQ0FQKSB7CisJCW1xcGNiLT5tYXhfbnJfb3V0c3Rfc2VuZF93ciA9IGF0dHItPmNhcC5tYXhfc2VuZF93cisxOworCQl1cGRhdGVfbWFzayB8PQorCQkJRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19NQVhfTlJfT1VUU1RfU0VORF9XUiwgMSk7CisJCW1xcGNiLT5tYXhfbnJfb3V0c3RfcmVjdl93ciA9IGF0dHItPmNhcC5tYXhfcmVjdl93cisxOworCQl1cGRhdGVfbWFzayB8PQorCQkJRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19NQVhfTlJfT1VUU1RfUkVDVl9XUiwgMSk7CisJCS8qIG5vIHN1cHBvcnQgZm9yIG1heF9zZW5kL3JlY3Zfc2dlIHlldCAqLworCX0KKworCWlmIChlaGNhX2RlYnVnX2xldmVsKQorCQllaGNhX2RtcChtcXBjYiwgNCo3MCwgInFwX251bT0leCIsIGlicXAtPnFwX251bSk7CisKKwloX3JldCA9IGhpcHpfaF9tb2RpZnlfcXAoc2hjYS0+aXB6X2hjYV9oYW5kbGUsCisJCQkJIG15X3FwLT5pcHpfcXBfaGFuZGxlLAorCQkJCSAmbXlfcXAtPnBmLAorCQkJCSB1cGRhdGVfbWFzaywKKwkJCQkgbXFwY2IsIG15X3FwLT5nYWxwYXMua2VybmVsKTsKKworCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKKwkJcmV0ID0gZWhjYTJpYl9yZXR1cm5fY29kZShoX3JldCk7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgImhpcHpfaF9tb2RpZnlfcXAoKSBmYWlsZWQgcmM9JWx4ICIKKwkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXgiLGhfcmV0LCBteV9xcCwgaWJxcC0+cXBfbnVtKTsKKwkJZ290byBtb2RpZnlfcXBfZXhpdDI7CisJfQorCisJaWYgKChteV9xcC0+cXBfdHlwZSA9PSBJQl9RUFRfVUQgfHwKKwkgICAgIG15X3FwLT5xcF90eXBlID09IElCX1FQVF9HU0kgfHwKKwkgICAgIG15X3FwLT5xcF90eXBlID09IElCX1FQVF9TTUkpICYmCisJICAgIHN0YXRldHJhbnMgPT0gSUJfUVBTVF9TUUUyUlRTKSB7CisJCS8qIGRvb3JiZWxsIHRvIHJlcHJvY2Vzc2luZyB3cWVzICovCisJCWlvc3luYygpOyAvKiBzZXJpYWxpemUgR0FMIHJlZ2lzdGVyIGFjY2VzcyAqLworCQloaXB6X3VwZGF0ZV9zcWEobXlfcXAsIGJhZF93cWVfY250LTEpOworCQllaGNhX2dlbl9kYmcoImRvb3JiZWxsIGZvciAleCB3cWVzIiwgYmFkX3dxZV9jbnQpOworCX0KKworCWlmIChzdGF0ZXRyYW5zID09IElCX1FQU1RfUkVTRVQySU5JVCB8fAorCSAgICBzdGF0ZXRyYW5zID09IElCX1FQU1RfSU5JVDJJTklUKSB7CisJCW1xcGNiLT5xcF9lbmFibGUgPSAxOworCQltcXBjYi0+cXBfc3RhdGUgPSBFSENBX1FQU19JTklUOworCQl1cGRhdGVfbWFzayA9IDA7CisJCXVwZGF0ZV9tYXNrID0gRUhDQV9CTUFTS19TRVQoTVFQQ0JfTUFTS19RUF9FTkFCTEUsIDEpOworCisJCWhfcmV0ID0gaGlwel9oX21vZGlmeV9xcChzaGNhLT5pcHpfaGNhX2hhbmRsZSwKKwkJCQkJIG15X3FwLT5pcHpfcXBfaGFuZGxlLAorCQkJCQkgJm15X3FwLT5wZiwKKwkJCQkJIHVwZGF0ZV9tYXNrLAorCQkJCQkgbXFwY2IsCisJCQkJCSBteV9xcC0+Z2FscGFzLmtlcm5lbCk7CisKKwkJaWYgKGhfcmV0ICE9IEhfU1VDQ0VTUykgeworCQkJcmV0ID0gZWhjYTJpYl9yZXR1cm5fY29kZShoX3JldCk7CisJCQllaGNhX2VycihpYnFwLT5kZXZpY2UsICJFTkFCTEUgaW4gY29udGV4dCBvZiAiCisJCQkJICJSRVNFVF8yX0lOSVQgZmFpbGVkISBNYXliZSB5b3UgZGlkbid0IGdldCAiCisJCQkJICJhIExJRCBoX3JldD0lbHggZWhjYV9xcD0lcCBxcF9udW09JXgiLAorCQkJCSBoX3JldCwgbXlfcXAsIGlicXAtPnFwX251bSk7CisJCQlnb3RvIG1vZGlmeV9xcF9leGl0MjsKKwkJfQorCX0KKworCWlmIChzdGF0ZXRyYW5zID09IElCX1FQU1RfQU5ZMlJFU0VUKSB7CisJCWlwel9xZWl0X3Jlc2V0KCZteV9xcC0+aXB6X3JxdWV1ZSk7CisJCWlwel9xZWl0X3Jlc2V0KCZteV9xcC0+aXB6X3NxdWV1ZSk7CisJfQorCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX1FLRVkpCisJCW15X3FwLT5xa2V5ID0gYXR0ci0+cWtleTsKKworbW9kaWZ5X3FwX2V4aXQyOgorCWlmIChzcXVldWVfbG9ja2VkKSB7IC8qIHRoaXMgbWVhbnM6IHNxZSAtPiBydHMgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXlfcXAtPnNwaW5sb2NrX3MsIHNwbF9mbGFncyk7CisJCW15X3FwLT5zcWVycl9wdXJnZWZsYWcgPSAxOworCX0KKworbW9kaWZ5X3FwX2V4aXQxOgorCWtmcmVlKG1xcGNiKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBlaGNhX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLCBpbnQgYXR0cl9tYXNrLAorCQkgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9IGNvbnRhaW5lcl9vZihpYnFwLCBzdHJ1Y3QgZWhjYV9xcCwgaWJfcXApOworCXN0cnVjdCBlaGNhX3BkICpteV9wZCA9IGNvbnRhaW5lcl9vZihteV9xcC0+aWJfcXAucGQsIHN0cnVjdCBlaGNhX3BkLAorCQkJCQkgICAgIGliX3BkKTsKKwl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CisKKwlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKKwkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCWVoY2FfZXJyKGlicXAtPnBkLT5kZXZpY2UsICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKKwkJCSBjdXJfcGlkLCBteV9wZC0+b3ducGlkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIGludGVybmFsX21vZGlmeV9xcChpYnFwLCBhdHRyLCBhdHRyX21hc2ssIDApOworfQorCitpbnQgZWhjYV9xdWVyeV9xcChzdHJ1Y3QgaWJfcXAgKnFwLAorCQkgIHN0cnVjdCBpYl9xcF9hdHRyICpxcF9hdHRyLAorCQkgIGludCBxcF9hdHRyX21hc2ssIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cikKK3sKKwlzdHJ1Y3QgZWhjYV9xcCAqbXlfcXAgPSBjb250YWluZXJfb2YocXAsIHN0cnVjdCBlaGNhX3FwLCBpYl9xcCk7CisJc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKG15X3FwLT5pYl9xcC5wZCwgc3RydWN0IGVoY2FfcGQsCisJCQkJCSAgICAgaWJfcGQpOworCXN0cnVjdCBlaGNhX3NoY2EgKnNoY2EgPSBjb250YWluZXJfb2YocXAtPmRldmljZSwgc3RydWN0IGVoY2Ffc2hjYSwKKwkJCQkJICAgICAgaWJfZGV2aWNlKTsKKwlzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlID0gc2hjYS0+aXB6X2hjYV9oYW5kbGU7CisJc3RydWN0IGhjcF9tb2RpZnlfcXBfY29udHJvbF9ibG9jayAqcXBjYjsKKwl1MzIgY3VyX3BpZCA9IGN1cnJlbnQtPnRnaWQ7CisJaW50IGNudCwgcmV0ID0gMDsKKwl1NjQgaF9yZXQ7CisKKwlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgICYmIG15X3BkLT5pYl9wZC51b2JqZWN0LT5jb250ZXh0ICAmJgorCSAgICBteV9wZC0+b3ducGlkICE9IGN1cl9waWQpIHsKKwkJZWhjYV9lcnIocXAtPmRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAorCQkJIGN1cl9waWQsIG15X3BkLT5vd25waWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocXBfYXR0cl9tYXNrICYgUVBfQVRUUl9RVUVSWV9OT1RfU1VQUE9SVEVEKSB7CisJCWVoY2FfZXJyKHFwLT5kZXZpY2UsIkludmFsaWQgYXR0cmlidXRlIG1hc2sgIgorCQkJICJlaGNhX3FwPSVwIHFwX251bT0leCBxcF9hdHRyX21hc2s9JXggIiwKKwkJCSBteV9xcCwgcXAtPnFwX251bSwgcXBfYXR0cl9tYXNrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcXBjYiA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwgKTsKKwlpZiAoIXFwY2IpIHsKKwkJZWhjYV9lcnIocXAtPmRldmljZSwiT3V0IG9mIG1lbW9yeSBmb3IgcXBjYiAiCisJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4IiwgbXlfcXAsIHFwLT5xcF9udW0pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwloX3JldCA9IGhpcHpfaF9xdWVyeV9xcChhZGFwdGVyX2hhbmRsZSwKKwkJCQlteV9xcC0+aXB6X3FwX2hhbmRsZSwKKwkJCQkmbXlfcXAtPnBmLAorCQkJCXFwY2IsIG15X3FwLT5nYWxwYXMua2VybmVsKTsKKworCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKKwkJcmV0ID0gZWhjYTJpYl9yZXR1cm5fY29kZShoX3JldCk7CisJCWVoY2FfZXJyKHFwLT5kZXZpY2UsImhpcHpfaF9xdWVyeV9xcCgpIGZhaWxlZCAiCisJCQkgImVoY2FfcXA9JXAgcXBfbnVtPSV4IGhfcmV0PSVseCIsCisJCQkgbXlfcXAsIHFwLT5xcF9udW0sIGhfcmV0KTsKKwkJZ290byBxdWVyeV9xcF9leGl0MTsKKwl9CisKKwlxcF9hdHRyLT5jdXJfcXBfc3RhdGUgPSBlaGNhMmliX3FwX3N0YXRlKHFwY2ItPnFwX3N0YXRlKTsKKwlxcF9hdHRyLT5xcF9zdGF0ZSA9IHFwX2F0dHItPmN1cl9xcF9zdGF0ZTsKKworCWlmIChxcF9hdHRyLT5jdXJfcXBfc3RhdGUgPT0gLUVJTlZBTCkgeworCQlyZXQgPSAtRUlOVkFMOworCQllaGNhX2VycihxcC0+ZGV2aWNlLCJHb3QgaW52YWxpZCBlaGNhX3FwX3N0YXRlPSV4ICIKKwkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXgiLAorCQkJIHFwY2ItPnFwX3N0YXRlLCBteV9xcCwgcXAtPnFwX251bSk7CisJCWdvdG8gcXVlcnlfcXBfZXhpdDE7CisJfQorCisJaWYgKHFwX2F0dHItPnFwX3N0YXRlID09IElCX1FQU19TUUQpCisJCXFwX2F0dHItPnNxX2RyYWluaW5nID0gMTsKKworCXFwX2F0dHItPnFrZXkgPSBxcGNiLT5xa2V5OworCXFwX2F0dHItPnBhdGhfbXR1ID0gcXBjYi0+cGF0aF9tdHU7CisJcXBfYXR0ci0+cGF0aF9taWdfc3RhdGUgPSBxcGNiLT5wYXRoX21pZ3JhdGlvbl9zdGF0ZTsKKwlxcF9hdHRyLT5ycV9wc24gPSBxcGNiLT5yZWNlaXZlX3BzbjsKKwlxcF9hdHRyLT5zcV9wc24gPSBxcGNiLT5zZW5kX3BzbjsKKwlxcF9hdHRyLT5taW5fcm5yX3RpbWVyID0gcXBjYi0+bWluX3Jucl9uYWtfdGltZXJfZmllbGQ7CisJcXBfYXR0ci0+Y2FwLm1heF9zZW5kX3dyID0gcXBjYi0+bWF4X25yX291dHN0X3NlbmRfd3ItMTsKKwlxcF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgPSBxcGNiLT5tYXhfbnJfb3V0c3RfcmVjdl93ci0xOworCS8qIFVEX0FWIENJUkNVTVZFTlRJT04gKi8KKwlpZiAobXlfcXAtPnFwX3R5cGUgPT0gSUJfUVBUX1VEKSB7CisJCXFwX2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgPQorCQkJcXBjYi0+YWN0dWFsX25yX3NnZXNfaW5fc3Ffd3FlIC0gMjsKKwkJcXBfYXR0ci0+Y2FwLm1heF9yZWN2X3NnZSA9CisJCQlxcGNiLT5hY3R1YWxfbnJfc2dlc19pbl9ycV93cWUgLSAyOworCX0gZWxzZSB7CisJCXFwX2F0dHItPmNhcC5tYXhfc2VuZF9zZ2UgPQorCQkJcXBjYi0+YWN0dWFsX25yX3NnZXNfaW5fc3Ffd3FlOworCQlxcF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0KKwkJCXFwY2ItPmFjdHVhbF9ucl9zZ2VzX2luX3JxX3dxZTsKKwl9CisKKwlxcF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gbXlfcXAtPnNxX21heF9pbmxpbmVfZGF0YV9zaXplOworCXFwX2F0dHItPmRlc3RfcXBfbnVtID0gcXBjYi0+ZGVzdF9xcF9ucjsKKworCXFwX2F0dHItPnBrZXlfaW5kZXggPQorCQlFSENBX0JNQVNLX0dFVChNUVBDQl9QUklNX1BfS0VZX0lEWCwgcXBjYi0+cHJpbV9wX2tleV9pZHgpOworCisJcXBfYXR0ci0+cG9ydF9udW0gPQorCQlFSENBX0JNQVNLX0dFVChNUVBDQl9QUklNX1BIWVNfUE9SVCwgcXBjYi0+cHJpbV9waHlzX3BvcnQpOworCisJcXBfYXR0ci0+dGltZW91dCA9IHFwY2ItPnRpbWVvdXQ7CisJcXBfYXR0ci0+cmV0cnlfY250ID0gcXBjYi0+cmV0cnlfY291bnQ7CisJcXBfYXR0ci0+cm5yX3JldHJ5ID0gcXBjYi0+cm5yX3JldHJ5X2NvdW50OworCisJcXBfYXR0ci0+YWx0X3BrZXlfaW5kZXggPQorCQlFSENBX0JNQVNLX0dFVChNUVBDQl9QUklNX1BfS0VZX0lEWCwgcXBjYi0+YWx0X3Bfa2V5X2lkeCk7CisKKwlxcF9hdHRyLT5hbHRfcG9ydF9udW0gPSBxcGNiLT5hbHRfcGh5c19wb3J0OworCXFwX2F0dHItPmFsdF90aW1lb3V0ID0gcXBjYi0+dGltZW91dF9hbDsKKworCS8qIHByaW1hcnkgYXYgKi8KKwlxcF9hdHRyLT5haF9hdHRyLnNsID0gcXBjYi0+c2VydmljZV9sZXZlbDsKKworCWlmIChxcGNiLT5zZW5kX2dyaF9mbGFnKSB7CisJCXFwX2F0dHItPmFoX2F0dHIuYWhfZmxhZ3MgPSBJQl9BSF9HUkg7CisJfQorCisJcXBfYXR0ci0+YWhfYXR0ci5zdGF0aWNfcmF0ZSA9IHFwY2ItPm1heF9zdGF0aWNfcmF0ZTsKKwlxcF9hdHRyLT5haF9hdHRyLmRsaWQgPSBxcGNiLT5kbGlkOworCXFwX2F0dHItPmFoX2F0dHIuc3JjX3BhdGhfYml0cyA9IHFwY2ItPnNvdXJjZV9wYXRoX2JpdHM7CisJcXBfYXR0ci0+YWhfYXR0ci5wb3J0X251bSA9IHFwX2F0dHItPnBvcnRfbnVtOworCisJLyogcHJpbWFyeSBHUkggKi8KKwlxcF9hdHRyLT5haF9hdHRyLmdyaC50cmFmZmljX2NsYXNzID0gcXBjYi0+dHJhZmZpY19jbGFzczsKKwlxcF9hdHRyLT5haF9hdHRyLmdyaC5ob3BfbGltaXQgPSBxcGNiLT5ob3BfbGltaXQ7CisJcXBfYXR0ci0+YWhfYXR0ci5ncmguc2dpZF9pbmRleCA9IHFwY2ItPnNvdXJjZV9naWRfaWR4OworCXFwX2F0dHItPmFoX2F0dHIuZ3JoLmZsb3dfbGFiZWwgPSBxcGNiLT5mbG93X2xhYmVsOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCisJCXFwX2F0dHItPmFoX2F0dHIuZ3JoLmRnaWQucmF3W2NudF0gPQorCQkJcXBjYi0+ZGVzdF9naWQuYnl0ZVtjbnRdOworCisJLyogYWx0ZXJuYXRlIEFWICovCisJcXBfYXR0ci0+YWx0X2FoX2F0dHIuc2wgPSBxcGNiLT5zZXJ2aWNlX2xldmVsX2FsOworCWlmIChxcGNiLT5zZW5kX2dyaF9mbGFnX2FsKSB7CisJCXFwX2F0dHItPmFsdF9haF9hdHRyLmFoX2ZsYWdzID0gSUJfQUhfR1JIOworCX0KKworCXFwX2F0dHItPmFsdF9haF9hdHRyLnN0YXRpY19yYXRlID0gcXBjYi0+bWF4X3N0YXRpY19yYXRlX2FsOworCXFwX2F0dHItPmFsdF9haF9hdHRyLmRsaWQgPSBxcGNiLT5kbGlkX2FsOworCXFwX2F0dHItPmFsdF9haF9hdHRyLnNyY19wYXRoX2JpdHMgPSBxcGNiLT5zb3VyY2VfcGF0aF9iaXRzX2FsOworCisJLyogYWx0ZXJuYXRlIEdSSCAqLworCXFwX2F0dHItPmFsdF9haF9hdHRyLmdyaC50cmFmZmljX2NsYXNzID0gcXBjYi0+dHJhZmZpY19jbGFzc19hbDsKKwlxcF9hdHRyLT5hbHRfYWhfYXR0ci5ncmguaG9wX2xpbWl0ID0gcXBjYi0+aG9wX2xpbWl0X2FsOworCXFwX2F0dHItPmFsdF9haF9hdHRyLmdyaC5zZ2lkX2luZGV4ID0gcXBjYi0+c291cmNlX2dpZF9pZHhfYWw7CisJcXBfYXR0ci0+YWx0X2FoX2F0dHIuZ3JoLmZsb3dfbGFiZWwgPSBxcGNiLT5mbG93X2xhYmVsX2FsOworCisJZm9yIChjbnQgPSAwOyBjbnQgPCAxNjsgY250KyspCisJCXFwX2F0dHItPmFsdF9haF9hdHRyLmdyaC5kZ2lkLnJhd1tjbnRdID0KKwkJCXFwY2ItPmRlc3RfZ2lkX2FsLmJ5dGVbY250XTsKKworCS8qIHJldHVybiBpbml0IGF0dHJpYnV0ZXMgZ2l2ZW4gaW4gZWhjYV9jcmVhdGVfcXAgKi8KKwlpZiAocXBfaW5pdF9hdHRyKQorCQkqcXBfaW5pdF9hdHRyID0gbXlfcXAtPmluaXRfYXR0cjsKKworCWlmIChlaGNhX2RlYnVnX2xldmVsKQorCQllaGNhX2RtcChxcGNiLCA0KjcwLCAicXBfbnVtPSV4IiwgcXAtPnFwX251bSk7CisKK3F1ZXJ5X3FwX2V4aXQxOgorCWtmcmVlKHFwY2IpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGVoY2FfZGVzdHJveV9xcChzdHJ1Y3QgaWJfcXAgKmlicXApCit7CisJc3RydWN0IGVoY2FfcXAgKm15X3FwID0gY29udGFpbmVyX29mKGlicXAsIHN0cnVjdCBlaGNhX3FwLCBpYl9xcCk7CisJc3RydWN0IGVoY2Ffc2hjYSAqc2hjYSA9IGNvbnRhaW5lcl9vZihpYnFwLT5kZXZpY2UsIHN0cnVjdCBlaGNhX3NoY2EsCisJCQkJCSAgICAgIGliX2RldmljZSk7CisJc3RydWN0IGVoY2FfcGQgKm15X3BkID0gY29udGFpbmVyX29mKG15X3FwLT5pYl9xcC5wZCwgc3RydWN0IGVoY2FfcGQsCisJCQkJCSAgICAgaWJfcGQpOworCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKKwl1MzIgcXBfbnVtID0gaWJxcC0+cXBfbnVtOworCWludCByZXQ7CisJdTY0IGhfcmV0OworCXU4IHBvcnRfbnVtOworCWVudW0gaWJfcXBfdHlwZQlxcF90eXBlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAobXlfcGQtPmliX3BkLnVvYmplY3QgJiYgbXlfcGQtPmliX3BkLnVvYmplY3QtPmNvbnRleHQgJiYKKwkgICAgbXlfcGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAorCQkJIGN1cl9waWQsIG15X3BkLT5vd25waWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXlfcXAtPnNlbmRfY3EpIHsKKwkJcmV0ID0gZWhjYV9jcV91bmFzc2lnbl9xcChteV9xcC0+c2VuZF9jcSwKKwkJCQkJICAgICAgbXlfcXAtPnJlYWxfcXBfbnVtKTsKKwkJaWYgKHJldCkgeworCQkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiQ291bGRuJ3QgdW5hc3NpZ24gcXAgZnJvbSAiCisJCQkJICJzZW5kX2NxIHJldD0leCBxcF9udW09JXggY3FfbnVtPSV4IiwgcmV0LAorCQkJCSBteV9xcC0+aWJfcXAucXBfbnVtLCBteV9xcC0+c2VuZF9jcS0+Y3FfbnVtYmVyKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCWlkcl9yZW1vdmUoJmVoY2FfcXBfaWRyLCBteV9xcC0+dG9rZW4pOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfcXBfaWRyX2xvY2ssIGZsYWdzKTsKKworCS8qIHVuLW1tYXAgaWYgdm1hIGFsbG9jICovCisJaWYgKG15X3FwLT51c3BhY2VfcnF1ZXVlKSB7CisJCXJldCA9IGVoY2FfbXVubWFwKG15X3FwLT51c3BhY2VfcnF1ZXVlLAorCQkJCSAgbXlfcXAtPmlwel9ycXVldWUucXVldWVfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkNvdWxkIG5vdCBtdW5tYXAgcnF1ZXVlICIKKwkJCQkgInFwX251bT0leCIsIHFwX251bSk7CisJCXJldCA9IGVoY2FfbXVubWFwKG15X3FwLT51c3BhY2Vfc3F1ZXVlLAorCQkJCSAgbXlfcXAtPmlwel9zcXVldWUucXVldWVfbGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkNvdWxkIG5vdCBtdW5tYXAgc3F1ZXVlICIKKwkJCQkgInFwX251bT0leCIsIHFwX251bSk7CisJCXJldCA9IGVoY2FfbXVubWFwKG15X3FwLT51c3BhY2VfZndoLCBFSENBX1BBR0VTSVpFKTsKKwkJaWYgKHJldCkKKwkJCWVoY2FfZXJyKGlicXAtPmRldmljZSwgIkNvdWxkIG5vdCBtdW5tYXAgZndoIHFwX251bT0leCIsCisJCQkJIHFwX251bSk7CisJfQorCisJaF9yZXQgPSBoaXB6X2hfZGVzdHJveV9xcChzaGNhLT5pcHpfaGNhX2hhbmRsZSwgbXlfcXApOworCWlmIChoX3JldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhjYV9lcnIoaWJxcC0+ZGV2aWNlLCAiaGlwel9oX2Rlc3Ryb3lfcXAoKSBmYWlsZWQgcmM9JWx4ICIKKwkJCSAiZWhjYV9xcD0lcCBxcF9udW09JXgiLCBoX3JldCwgbXlfcXAsIHFwX251bSk7CisJCXJldHVybiBlaGNhMmliX3JldHVybl9jb2RlKGhfcmV0KTsKKwl9CisKKwlwb3J0X251bSA9IG15X3FwLT5pbml0X2F0dHIucG9ydF9udW07CisJcXBfdHlwZSAgPSBteV9xcC0+aW5pdF9hdHRyLnFwX3R5cGU7CisKKwkvKiBubyBzdXBwb3J0IGZvciBJQl9RUFRfU01JIHlldCAqLworCWlmIChxcF90eXBlID09IElCX1FQVF9HU0kpIHsKKwkJc3RydWN0IGliX2V2ZW50IGV2ZW50OworCQllaGNhX2luZm8oaWJxcC0+ZGV2aWNlLCAiZGV2aWNlICVzOiBwb3J0ICV4IGlzIGluYWN0aXZlLiIsCisJCQkgIHNoY2EtPmliX2RldmljZS5uYW1lLCBwb3J0X251bSk7CisJCWV2ZW50LmRldmljZSA9ICZzaGNhLT5pYl9kZXZpY2U7CisJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CisJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0X251bTsKKwkJc2hjYS0+c3BvcnRbcG9ydF9udW0gLSAxXS5wb3J0X3N0YXRlID0gSUJfUE9SVF9ET1dOOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCX0KKworCWlwel9xdWV1ZV9kdG9yKCZteV9xcC0+aXB6X3JxdWV1ZSk7CisJaXB6X3F1ZXVlX2R0b3IoJm15X3FwLT5pcHpfc3F1ZXVlKTsKKwlrbWVtX2NhY2hlX2ZyZWUocXBfY2FjaGUsIG15X3FwKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGVoY2FfaW5pdF9xcF9jYWNoZSh2b2lkKQoreworCXFwX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImVoY2FfY2FjaGVfcXAiLAorCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCBlaGNhX3FwKSwgMCwKKwkJCQkgICAgIFNMQUJfSFdDQUNIRV9BTElHTiwKKwkJCQkgICAgIE5VTEwsIE5VTEwpOworCWlmICghcXBfY2FjaGUpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIGVoY2FfY2xlYW51cF9xcF9jYWNoZSh2b2lkKQoreworCWlmIChxcF9jYWNoZSkKKwkJa21lbV9jYWNoZV9kZXN0cm95KHFwX2NhY2hlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcmVxcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9yZXFzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2YmRhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcmVxcy5jCkBAIC0wLDAgKzEsNjUzIEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICBwb3N0X3NlbmQvcmVjdiwgcG9sbF9jcSwgcmVxX25vdGlmeQorICoKKyAqICBBdXRob3JzOiBXYWxlcmkgRm9taW4gPGZvbWluQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgSG9hbmctTmFtIE5ndXllbiA8aG5ndXllbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIFJlaW5oYXJkIEVybnN0IDxyZXJuc3RAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPGFzbS1wb3dlcnBjL3N5c3RlbS5oPgorI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJlaGNhX3Flcy5oIgorI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisjaW5jbHVkZSAiaGlwel9mbnMuaCIKKworc3RhdGljIGlubGluZSBpbnQgZWhjYV93cml0ZV9yd3FlKHN0cnVjdCBpcHpfcXVldWUgKmlwel9ycXVldWUsCisJCQkJICBzdHJ1Y3QgZWhjYV93cWUgKndxZV9wLAorCQkJCSAgc3RydWN0IGliX3JlY3Zfd3IgKnJlY3Zfd3IpCit7CisJdTggY250X2RzOworCWlmICh1bmxpa2VseSgocmVjdl93ci0+bnVtX3NnZSA8IDApIHx8CisJCSAgICAgKHJlY3Zfd3ItPm51bV9zZ2UgPiBpcHpfcnF1ZXVlLT5hY3RfbnJfb2Zfc2cpKSkgeworCQllaGNhX2dlbl9lcnIoIkludmFsaWQgbnVtYmVyIG9mIFdRRSBTR0UuICIKKwkJCSAibnVtX3NxZT0leCBtYXhfbnJfb2Zfc2c9JXgiLAorCQkJIHJlY3Zfd3ItPm51bV9zZ2UsIGlwel9ycXVldWUtPmFjdF9ucl9vZl9zZyk7CisJCXJldHVybiAtRUlOVkFMOyAvKiBpbnZhbGlkIFNHIGxpc3QgbGVuZ3RoICovCisJfQorCisJLyogY2xlYXIgd3FlIGhlYWRlciB1bnRpbCBzZ2xpc3QgKi8KKwltZW1zZXQod3FlX3AsIDAsIG9mZnNldG9mKHN0cnVjdCBlaGNhX3dxZSwgdS51ZF9hdi5zZ19saXN0KSk7CisKKwl3cWVfcC0+d29ya19yZXF1ZXN0X2lkID0gcmVjdl93ci0+d3JfaWQ7CisJd3FlX3AtPm5yX29mX2RhdGFfc2VnID0gcmVjdl93ci0+bnVtX3NnZTsKKworCWZvciAoY250X2RzID0gMDsgY250X2RzIDwgcmVjdl93ci0+bnVtX3NnZTsgY250X2RzKyspIHsKKwkJd3FlX3AtPnUuYWxsX3Jjdi5zZ19saXN0W2NudF9kc10udmFkZHIgPQorCQkJcmVjdl93ci0+c2dfbGlzdFtjbnRfZHNdLmFkZHI7CisJCXdxZV9wLT51LmFsbF9yY3Yuc2dfbGlzdFtjbnRfZHNdLmxrZXkgPQorCQkJcmVjdl93ci0+c2dfbGlzdFtjbnRfZHNdLmxrZXk7CisJCXdxZV9wLT51LmFsbF9yY3Yuc2dfbGlzdFtjbnRfZHNdLmxlbmd0aCA9CisJCQlyZWN2X3dyLT5zZ19saXN0W2NudF9kc10ubGVuZ3RoOworCX0KKworCWlmIChlaGNhX2RlYnVnX2xldmVsKSB7CisJCWVoY2FfZ2VuX2RiZygiUkVDRUlWRSBXUUUgd3JpdHRlbiBpbnRvIGlwel9ycXVldWU9JXAiLCBpcHpfcnF1ZXVlKTsKKwkJZWhjYV9kbXAoIHdxZV9wLCAxNiooNiArIHdxZV9wLT5ucl9vZl9kYXRhX3NlZyksICJyZWN2IHdxZSIpOworCX0KKworCXJldHVybiAwOworfQorCisjaWYgZGVmaW5lZChERUJVR19HU0lfU0VORF9XUikKKworLyogbmVlZCBpYl9tYWQgc3RydWN0ICovCisjaW5jbHVkZSA8cmRtYS9pYl9tYWQuaD4KKworc3RhdGljIHZvaWQgdHJhY2Vfc2VuZF93cl91ZChjb25zdCBzdHJ1Y3QgaWJfc2VuZF93ciAqc2VuZF93cikKK3sKKwlpbnQgaWR4OworCWludCBqOworCXdoaWxlIChzZW5kX3dyKSB7CisJCXN0cnVjdCBpYl9tYWRfaGRyICptYWRfaGRyID0gc2VuZF93ci0+d3IudWQubWFkX2hkcjsKKwkJc3RydWN0IGliX3NnZSAqc2dlID0gc2VuZF93ci0+c2dfbGlzdDsKKwkJZWhjYV9nZW5fZGJnKCJzZW5kX3dyIyV4IHdyX2lkPSVseCBudW1fc2dlPSV4ICIKKwkJCSAgICAgInNlbmRfZmxhZ3M9JXggb3Bjb2RlPSV4IixpZHgsIHNlbmRfd3ItPndyX2lkLAorCQkJICAgICBzZW5kX3dyLT5udW1fc2dlLCBzZW5kX3dyLT5zZW5kX2ZsYWdzLAorCQkJICAgICBzZW5kX3dyLT5vcGNvZGUpOworCQlpZiAobWFkX2hkcikgeworCQkJZWhjYV9nZW5fZGJnKCJzZW5kX3dyIyV4IG1hZF9oZHIgYmFzZV92ZXJzaW9uPSV4ICIKKwkJCQkgICAgICJtZ210X2NsYXNzPSV4IGNsYXNzX3ZlcnNpb249JXggbWV0aG9kPSV4ICIKKwkJCQkgICAgICJzdGF0dXM9JXggY2xhc3Nfc3BlY2lmaWM9JXggdGlkPSVseCAiCisJCQkJICAgICAiYXR0cl9pZD0leCByZXN2PSV4IGF0dHJfbW9kPSV4IiwKKwkJCQkgICAgIGlkeCwgbWFkX2hkci0+YmFzZV92ZXJzaW9uLAorCQkJCSAgICAgbWFkX2hkci0+bWdtdF9jbGFzcywKKwkJCQkgICAgIG1hZF9oZHItPmNsYXNzX3ZlcnNpb24sIG1hZF9oZHItPm1ldGhvZCwKKwkJCQkgICAgIG1hZF9oZHItPnN0YXR1cywgbWFkX2hkci0+Y2xhc3Nfc3BlY2lmaWMsCisJCQkJICAgICBtYWRfaGRyLT50aWQsIG1hZF9oZHItPmF0dHJfaWQsCisJCQkJICAgICBtYWRfaGRyLT5yZXN2LAorCQkJCSAgICAgbWFkX2hkci0+YXR0cl9tb2QpOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBzZW5kX3dyLT5udW1fc2dlOyBqKyspIHsKKwkJCXU4ICpkYXRhID0gKHU4ICopIGFic190b192aXJ0KHNnZS0+YWRkcik7CisJCQllaGNhX2dlbl9kYmcoInNlbmRfd3IjJXggc2dlIyV4IGFkZHI9JXAgbGVuZ3RoPSV4ICIKKwkJCQkgICAgICJsa2V5PSV4IiwKKwkJCQkgICAgIGlkeCwgaiwgZGF0YSwgc2dlLT5sZW5ndGgsIHNnZS0+bGtleSk7CisJCQkvKiBhc3N1bWUgbGVuZ3RoIGlzIG4qMTYgKi8KKwkJCWVoY2FfZG1wKGRhdGEsIHNnZS0+bGVuZ3RoLCAic2VuZF93ciMleCBzZ2UjJXgiLAorCQkJCSBpZHgsIGopOworCQkJc2dlKys7CisJCX0gLyogZW9mIGZvciBqICovCisJCWlkeCsrOworCQlzZW5kX3dyID0gc2VuZF93ci0+bmV4dDsKKwl9IC8qIGVvZiB3aGlsZSBzZW5kX3dyICovCit9CisKKyNlbmRpZiAvKiBERUJVR19HU0lfU0VORF9XUiAqLworCitzdGF0aWMgaW5saW5lIGludCBlaGNhX3dyaXRlX3N3cWUoc3RydWN0IGVoY2FfcXAgKnFwLAorCQkJCSAgc3RydWN0IGVoY2Ffd3FlICp3cWVfcCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBpYl9zZW5kX3dyICpzZW5kX3dyKQoreworCXUzMiBpZHg7CisJdTY0IGRtYV9sZW5ndGg7CisJc3RydWN0IGVoY2FfYXYgKm15X2F2OworCXUzMiByZW1vdGVfcWtleSA9IHNlbmRfd3ItPndyLnVkLnJlbW90ZV9xa2V5OworCisJaWYgKHVubGlrZWx5KChzZW5kX3dyLT5udW1fc2dlIDwgMCkgfHwKKwkJICAgICAoc2VuZF93ci0+bnVtX3NnZSA+IHFwLT5pcHpfc3F1ZXVlLmFjdF9ucl9vZl9zZykpKSB7CisJCWVoY2FfZ2VuX2VycigiSW52YWxpZCBudW1iZXIgb2YgV1FFIFNHRS4gIgorCQkJICJudW1fc3FlPSV4IG1heF9ucl9vZl9zZz0leCIsCisJCQkgc2VuZF93ci0+bnVtX3NnZSwgcXAtPmlwel9zcXVldWUuYWN0X25yX29mX3NnKTsKKwkJcmV0dXJuIC1FSU5WQUw7IC8qIGludmFsaWQgU0cgbGlzdCBsZW5ndGggKi8KKwl9CisKKwkvKiBjbGVhciB3cWUgaGVhZGVyIHVudGlsIHNnbGlzdCAqLworCW1lbXNldCh3cWVfcCwgMCwgb2Zmc2V0b2Yoc3RydWN0IGVoY2Ffd3FlLCB1LnVkX2F2LnNnX2xpc3QpKTsKKworCXdxZV9wLT53b3JrX3JlcXVlc3RfaWQgPSBzZW5kX3dyLT53cl9pZDsKKworCXN3aXRjaCAoc2VuZF93ci0+b3Bjb2RlKSB7CisJY2FzZSBJQl9XUl9TRU5EOgorCWNhc2UgSUJfV1JfU0VORF9XSVRIX0lNTToKKwkJd3FlX3AtPm9wdHlwZSA9IFdRRV9PUFRZUEVfU0VORDsKKwkJYnJlYWs7CisJY2FzZSBJQl9XUl9SRE1BX1dSSVRFOgorCWNhc2UgSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTToKKwkJd3FlX3AtPm9wdHlwZSA9IFdRRV9PUFRZUEVfUkRNQVdSSVRFOworCQlicmVhazsKKwljYXNlIElCX1dSX1JETUFfUkVBRDoKKwkJd3FlX3AtPm9wdHlwZSA9IFdRRV9PUFRZUEVfUkRNQVJFQUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVoY2FfZ2VuX2VycigiSW52YWxpZCBvcGNvZGU9JXgiLCBzZW5kX3dyLT5vcGNvZGUpOworCQlyZXR1cm4gLUVJTlZBTDsgLyogaW52YWxpZCBvcGNvZGUgKi8KKwl9CisKKwl3cWVfcC0+d3FlZiA9IChzZW5kX3dyLT5vcGNvZGUpICYgV1FFRl9ISUdIX05JQkJMRTsKKworCXdxZV9wLT53cl9mbGFnID0gMDsKKworCWlmIChzZW5kX3dyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9TSUdOQUxFRCkKKwkJd3FlX3AtPndyX2ZsYWcgfD0gV1FFX1dSRkxBR19SRVFfU0lHTkFMX0NPTTsKKworCWlmIChzZW5kX3dyLT5vcGNvZGUgPT0gSUJfV1JfU0VORF9XSVRIX0lNTSB8fAorCSAgICBzZW5kX3dyLT5vcGNvZGUgPT0gSUJfV1JfUkRNQV9XUklURV9XSVRIX0lNTSkgeworCQkvKiB0aGlzIG1pZ2h0IG5vdCB3b3JrIGFzIGxvbmcgYXMgSFcgZG9lcyBub3Qgc3VwcG9ydCBpdCAqLworCQl3cWVfcC0+aW1tZWRpYXRlX2RhdGEgPSBiZTMyX3RvX2NwdShzZW5kX3dyLT5pbW1fZGF0YSk7CisJCXdxZV9wLT53cl9mbGFnIHw9IFdRRV9XUkZMQUdfSU1NX0RBVEFfUFJFU0VOVDsKKwl9CisKKwl3cWVfcC0+bnJfb2ZfZGF0YV9zZWcgPSBzZW5kX3dyLT5udW1fc2dlOworCisJc3dpdGNoIChxcC0+cXBfdHlwZSkgeworCWNhc2UgSUJfUVBUX1NNSToKKwljYXNlIElCX1FQVF9HU0k6CisJCS8qIG5vIGJyZWFrIGlzIGludGVudGlhbCBoZXJlICovCisJY2FzZSBJQl9RUFRfVUQ6CisJCS8qIElCIDEuMiBzcGVjIEMxMC0xNSBjb21wbGlhbmNlICovCisJCWlmIChzZW5kX3dyLT53ci51ZC5yZW1vdGVfcWtleSAmIDB4ODAwMDAwMDApCisJCQlyZW1vdGVfcWtleSA9IHFwLT5xa2V5OworCisJCXdxZV9wLT5kZXN0aW5hdGlvbl9xcF9udW1iZXIgPSBzZW5kX3dyLT53ci51ZC5yZW1vdGVfcXBuIDw8IDg7CisJCXdxZV9wLT5sb2NhbF9lZV9jb250ZXh0X3FrZXkgPSByZW1vdGVfcWtleTsKKwkJaWYgKCFzZW5kX3dyLT53ci51ZC5haCkgeworCQkJZWhjYV9nZW5fZXJyKCJ3ci51ZC5haCBpcyBOVUxMLiBxcD0lcCIsIHFwKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCW15X2F2ID0gY29udGFpbmVyX29mKHNlbmRfd3ItPndyLnVkLmFoLCBzdHJ1Y3QgZWhjYV9hdiwgaWJfYWgpOworCQl3cWVfcC0+dS51ZF9hdi51ZF9hdiA9IG15X2F2LT5hdjsKKworCQkvKgorCQkgKiBvbWl0dGVkIGNoZWNrIG9mIElCX1NFTkRfSU5MSU5FCisJCSAqIHNpbmNlIEhXIGRvZXMgbm90IHN1cHBvcnQgaXQKKwkJICovCisJCWZvciAoaWR4ID0gMDsgaWR4IDwgc2VuZF93ci0+bnVtX3NnZTsgaWR4KyspIHsKKwkJCXdxZV9wLT51LnVkX2F2LnNnX2xpc3RbaWR4XS52YWRkciA9CisJCQkJc2VuZF93ci0+c2dfbGlzdFtpZHhdLmFkZHI7CisJCQl3cWVfcC0+dS51ZF9hdi5zZ19saXN0W2lkeF0ubGtleSA9CisJCQkJc2VuZF93ci0+c2dfbGlzdFtpZHhdLmxrZXk7CisJCQl3cWVfcC0+dS51ZF9hdi5zZ19saXN0W2lkeF0ubGVuZ3RoID0KKwkJCQlzZW5kX3dyLT5zZ19saXN0W2lkeF0ubGVuZ3RoOworCQl9IC8qIGVvZiBmb3IgaWR4ICovCisJCWlmIChxcC0+cXBfdHlwZSA9PSBJQl9RUFRfU01JIHx8CisJCSAgICBxcC0+cXBfdHlwZSA9PSBJQl9RUFRfR1NJKQorCQkJd3FlX3AtPnUudWRfYXYudWRfYXYucG10dSA9IDE7CisJCWlmIChxcC0+cXBfdHlwZSA9PSBJQl9RUFRfR1NJKSB7CisJCQl3cWVfcC0+cGtleWkgPSBzZW5kX3dyLT53ci51ZC5wa2V5X2luZGV4OworI2lmZGVmIERFQlVHX0dTSV9TRU5EX1dSCisJCQl0cmFjZV9zZW5kX3dyX3VkKHNlbmRfd3IpOworI2VuZGlmIC8qIERFQlVHX0dTSV9TRU5EX1dSICovCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElCX1FQVF9VQzoKKwkJaWYgKHNlbmRfd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX0ZFTkNFKQorCQkJd3FlX3AtPndyX2ZsYWcgfD0gV1FFX1dSRkxBR19GRU5DRTsKKwkJLyogbm8gYnJlYWsgaXMgaW50ZW50aW9uYWwgaGVyZSAqLworCWNhc2UgSUJfUVBUX1JDOgorCQkvKiBUT0RPOiBhdG9taWMgbm90IGltcGxlbWVudGVkICovCisJCXdxZV9wLT51Lm51ZC5yZW1vdGVfdmlydHVhbF9hZHJlc3MgPQorCQkJc2VuZF93ci0+d3IucmRtYS5yZW1vdGVfYWRkcjsKKwkJd3FlX3AtPnUubnVkLnJrZXkgPSBzZW5kX3dyLT53ci5yZG1hLnJrZXk7CisKKwkJLyoKKwkJICogb21pdHRlZCBjaGVja2luZyBvZiBJQl9TRU5EX0lOTElORQorCQkgKiBzaW5jZSBIVyBkb2VzIG5vdCBzdXBwb3J0IGl0CisJCSAqLworCQlkbWFfbGVuZ3RoID0gMDsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBzZW5kX3dyLT5udW1fc2dlOyBpZHgrKykgeworCQkJd3FlX3AtPnUubnVkLnNnX2xpc3RbaWR4XS52YWRkciA9CisJCQkJc2VuZF93ci0+c2dfbGlzdFtpZHhdLmFkZHI7CisJCQl3cWVfcC0+dS5udWQuc2dfbGlzdFtpZHhdLmxrZXkgPQorCQkJCXNlbmRfd3ItPnNnX2xpc3RbaWR4XS5sa2V5OworCQkJd3FlX3AtPnUubnVkLnNnX2xpc3RbaWR4XS5sZW5ndGggPQorCQkJCXNlbmRfd3ItPnNnX2xpc3RbaWR4XS5sZW5ndGg7CisJCQlkbWFfbGVuZ3RoICs9IHNlbmRfd3ItPnNnX2xpc3RbaWR4XS5sZW5ndGg7CisJCX0gLyogZW9mIGlkeCAqLworCQl3cWVfcC0+dS5udWQuYXRvbWljXzFzdF9vcF9kbWFfbGVuID0gZG1hX2xlbmd0aDsKKworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVoY2FfZ2VuX2VycigiSW52YWxpZCBxcHR5cGU9JXgiLCBxcC0+cXBfdHlwZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChlaGNhX2RlYnVnX2xldmVsKSB7CisJCWVoY2FfZ2VuX2RiZygiU0VORCBXUUUgd3JpdHRlbiBpbnRvIHF1ZXVlIHFwPSVwICIsIHFwKTsKKwkJZWhjYV9kbXAoIHdxZV9wLCAxNiooNiArIHdxZV9wLT5ucl9vZl9kYXRhX3NlZyksICJzZW5kIHdxZSIpOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogbWFwX2liX3djX3N0YXR1cyBjb252ZXJ0cyByYXcgY3FlX3N0YXR1cyB0byBpYl93Y19zdGF0dXMgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBfaWJfd2Nfc3RhdHVzKHUzMiBjcWVfc3RhdHVzLAorCQkJCSAgICBlbnVtIGliX3djX3N0YXR1cyAqd2Nfc3RhdHVzKQoreworCWlmICh1bmxpa2VseShjcWVfc3RhdHVzICYgV0NfU1RBVFVTX0VSUk9SX0JJVCkpIHsKKwkJc3dpdGNoIChjcWVfc3RhdHVzICYgMHgzRikgeworCQljYXNlIDB4MDE6CisJCWNhc2UgMHgyMToKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19MT0NfTEVOX0VSUjsKKwkJCWJyZWFrOworCQljYXNlIDB4MDI6CisJCWNhc2UgMHgyMjoKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19MT0NfUVBfT1BfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgMHgwMzoKKwkJY2FzZSAweDIzOgorCQkJKndjX3N0YXR1cyA9IElCX1dDX0xPQ19FRUNfT1BfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgMHgwNDoKKwkJY2FzZSAweDI0OgorCQkJKndjX3N0YXR1cyA9IElCX1dDX0xPQ19QUk9UX0VSUjsKKwkJCWJyZWFrOworCQljYXNlIDB4MDU6CisJCWNhc2UgMHgyNToKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CisJCQlicmVhazsKKwkJY2FzZSAweDA2OgorCQkJKndjX3N0YXR1cyA9IElCX1dDX01XX0JJTkRfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgMHgwNzogLyogcmVtb3RlIGVycm9yIC0gbG9vayBpbnRvIGJpdHMgMjA6MjQgKi8KKwkJCXN3aXRjaCAoKGNxZV9zdGF0dXMKKwkJCQkgJiBXQ19TVEFUVVNfUkVNT1RFX0VSUk9SX0ZMQUdTKSA+PiAxMSkgeworCQkJY2FzZSAweDA6CisJCQkJLyoKKwkJCQkgKiBQU04gU2VxdWVuY2UgRXJyb3IhCisJCQkJICogY291bGRuJ3QgZmluZCBhIG1hdGNoaW5nIHN0YXR1cyEKKwkJCQkgKi8KKwkJCQkqd2Nfc3RhdHVzID0gSUJfV0NfR0VORVJBTF9FUlI7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MToKKwkJCQkqd2Nfc3RhdHVzID0gSUJfV0NfUkVNX0lOVl9SRVFfRVJSOworCQkJCWJyZWFrOworCQkJY2FzZSAweDI6CisJCQkJKndjX3N0YXR1cyA9IElCX1dDX1JFTV9BQ0NFU1NfRVJSOworCQkJCWJyZWFrOworCQkJY2FzZSAweDM6CisJCQkJKndjX3N0YXR1cyA9IElCX1dDX1JFTV9PUF9FUlI7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4NDoKKwkJCQkqd2Nfc3RhdHVzID0gSUJfV0NfUkVNX0lOVl9SRF9SRVFfRVJSOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgMHgwODoKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19SRVRSWV9FWENfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgMHgwOToKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19STlJfUkVUUllfRVhDX0VSUjsKKwkJCWJyZWFrOworCQljYXNlIDB4MEE6CisJCWNhc2UgMHgyRDoKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19SRU1fQUJPUlRfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgMHgwQjoKKwkJY2FzZSAweDJFOgorCQkJKndjX3N0YXR1cyA9IElCX1dDX0lOVl9FRUNOX0VSUjsKKwkJCWJyZWFrOworCQljYXNlIDB4MEM6CisJCWNhc2UgMHgyRjoKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19JTlZfRUVDX1NUQVRFX0VSUjsKKwkJCWJyZWFrOworCQljYXNlIDB4MEQ6CisJCQkqd2Nfc3RhdHVzID0gSUJfV0NfQkFEX1JFU1BfRVJSOworCQkJYnJlYWs7CisJCWNhc2UgMHgxMDoKKwkJCS8qIFdRRSBwdXJnZWQgKi8KKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCSp3Y19zdGF0dXMgPSBJQl9XQ19GQVRBTF9FUlI7CisKKwkJfQorCX0gZWxzZQorCQkqd2Nfc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKK30KKworaW50IGVoY2FfcG9zdF9zZW5kKHN0cnVjdCBpYl9xcCAqcXAsCisJCSAgIHN0cnVjdCBpYl9zZW5kX3dyICpzZW5kX3dyLAorCQkgICBzdHJ1Y3QgaWJfc2VuZF93ciAqKmJhZF9zZW5kX3dyKQoreworCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9IGNvbnRhaW5lcl9vZihxcCwgc3RydWN0IGVoY2FfcXAsIGliX3FwKTsKKwlzdHJ1Y3QgaWJfc2VuZF93ciAqY3VyX3NlbmRfd3I7CisJc3RydWN0IGVoY2Ffd3FlICp3cWVfcDsKKwlpbnQgd3FlX2NudCA9IDA7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBzcGxfZmxhZ3M7CisKKwkvKiBMT0NLIHRoZSBRVUVVRSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZteV9xcC0+c3BpbmxvY2tfcywgc3BsX2ZsYWdzKTsKKworCS8qIGxvb3AgcHJvY2Vzc2VzIGxpc3Qgb2Ygc2VuZCByZXFzICovCisJZm9yIChjdXJfc2VuZF93ciA9IHNlbmRfd3I7IGN1cl9zZW5kX3dyICE9IE5VTEw7CisJICAgICBjdXJfc2VuZF93ciA9IGN1cl9zZW5kX3dyLT5uZXh0KSB7CisJCXU2NCBzdGFydF9vZmZzZXQgPSBteV9xcC0+aXB6X3NxdWV1ZS5jdXJyZW50X3Ffb2Zmc2V0OworCQkvKiBnZXQgcG9pbnRlciBuZXh0IHRvIGZyZWUgV1FFICovCisJCXdxZV9wID0gaXB6X3FlaXRfZ2V0X2luYygmbXlfcXAtPmlwel9zcXVldWUpOworCQlpZiAodW5saWtlbHkoIXdxZV9wKSkgeworCQkJLyogdG9vIG1hbnkgcG9zdGVkIHdvcmsgcmVxdWVzdHM6IHF1ZXVlIG92ZXJmbG93ICovCisJCQlpZiAoYmFkX3NlbmRfd3IpCisJCQkJKmJhZF9zZW5kX3dyID0gY3VyX3NlbmRfd3I7CisJCQlpZiAod3FlX2NudCA9PSAwKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQllaGNhX2VycihxcC0+ZGV2aWNlLCAiVG9vIG1hbnkgcG9zdGVkIFdRRXMgIgorCQkJCQkgInFwX251bT0leCIsIHFwLT5xcF9udW0pOworCQkJfQorCQkJZ290byBwb3N0X3NlbmRfZXhpdDA7CisJCX0KKwkJLyogd3JpdGUgYSBTRU5EIFdRRSBpbnRvIHRoZSBRVUVVRSAqLworCQlyZXQgPSBlaGNhX3dyaXRlX3N3cWUobXlfcXAsIHdxZV9wLCBjdXJfc2VuZF93cik7CisJCS8qCisJCSAqIGlmIHNvbWV0aGluZyBmYWlsZWQsCisJCSAqIHJlc2V0IHRoZSBmcmVlIGVudHJ5IHBvaW50ZXIgdG8gdGhlIHN0YXJ0IHZhbHVlCisJCSAqLworCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJbXlfcXAtPmlwel9zcXVldWUuY3VycmVudF9xX29mZnNldCA9IHN0YXJ0X29mZnNldDsKKwkJCSpiYWRfc2VuZF93ciA9IGN1cl9zZW5kX3dyOworCQkJaWYgKHdxZV9jbnQgPT0gMCkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZWhjYV9lcnIocXAtPmRldmljZSwgIkNvdWxkIG5vdCB3cml0ZSBXUUUgIgorCQkJCQkgInFwX251bT0leCIsIHFwLT5xcF9udW0pOworCQkJfQorCQkJZ290byBwb3N0X3NlbmRfZXhpdDA7CisJCX0KKwkJd3FlX2NudCsrOworCQllaGNhX2RiZyhxcC0+ZGV2aWNlLCAiZWhjYV9xcD0lcCBxcF9udW09JXggd3FlX2NudD0lZCIsCisJCQkgbXlfcXAsIHFwLT5xcF9udW0sIHdxZV9jbnQpOworCX0gLyogZW9mIGZvciBjdXJfc2VuZF93ciAqLworCitwb3N0X3NlbmRfZXhpdDA6CisJLyogVU5MT0NLIHRoZSBRVUVVRSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm15X3FwLT5zcGlubG9ja19zLCBzcGxfZmxhZ3MpOworCWlvc3luYygpOyAvKiBzZXJpYWxpemUgR0FMIHJlZ2lzdGVyIGFjY2VzcyAqLworCWhpcHpfdXBkYXRlX3NxYShteV9xcCwgd3FlX2NudCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGVoY2FfcG9zdF9yZWN2KHN0cnVjdCBpYl9xcCAqcXAsCisJCSAgIHN0cnVjdCBpYl9yZWN2X3dyICpyZWN2X3dyLAorCQkgICBzdHJ1Y3QgaWJfcmVjdl93ciAqKmJhZF9yZWN2X3dyKQoreworCXN0cnVjdCBlaGNhX3FwICpteV9xcCA9IGNvbnRhaW5lcl9vZihxcCwgc3RydWN0IGVoY2FfcXAsIGliX3FwKTsKKwlzdHJ1Y3QgaWJfcmVjdl93ciAqY3VyX3JlY3Zfd3I7CisJc3RydWN0IGVoY2Ffd3FlICp3cWVfcDsKKwlpbnQgd3FlX2NudCA9IDA7CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBzcGxfZmxhZ3M7CisKKwkvKiBMT0NLIHRoZSBRVUVVRSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZteV9xcC0+c3BpbmxvY2tfciwgc3BsX2ZsYWdzKTsKKworCS8qIGxvb3AgcHJvY2Vzc2VzIGxpc3Qgb2Ygc2VuZCByZXFzICovCisJZm9yIChjdXJfcmVjdl93ciA9IHJlY3Zfd3I7IGN1cl9yZWN2X3dyICE9IE5VTEw7CisJICAgICBjdXJfcmVjdl93ciA9IGN1cl9yZWN2X3dyLT5uZXh0KSB7CisJCXU2NCBzdGFydF9vZmZzZXQgPSBteV9xcC0+aXB6X3JxdWV1ZS5jdXJyZW50X3Ffb2Zmc2V0OworCQkvKiBnZXQgcG9pbnRlciBuZXh0IHRvIGZyZWUgV1FFICovCisJCXdxZV9wID0gaXB6X3FlaXRfZ2V0X2luYygmbXlfcXAtPmlwel9ycXVldWUpOworCQlpZiAodW5saWtlbHkoIXdxZV9wKSkgeworCQkJLyogdG9vIG1hbnkgcG9zdGVkIHdvcmsgcmVxdWVzdHM6IHF1ZXVlIG92ZXJmbG93ICovCisJCQlpZiAoYmFkX3JlY3Zfd3IpCisJCQkJKmJhZF9yZWN2X3dyID0gY3VyX3JlY3Zfd3I7CisJCQlpZiAod3FlX2NudCA9PSAwKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKKwkJCQllaGNhX2VycihxcC0+ZGV2aWNlLCAiVG9vIG1hbnkgcG9zdGVkIFdRRXMgIgorCQkJCQkgInFwX251bT0leCIsIHFwLT5xcF9udW0pOworCQkJfQorCQkJZ290byBwb3N0X3JlY3ZfZXhpdDA7CisJCX0KKwkJLyogd3JpdGUgYSBSRUNWIFdRRSBpbnRvIHRoZSBRVUVVRSAqLworCQlyZXQgPSBlaGNhX3dyaXRlX3J3cWUoJm15X3FwLT5pcHpfcnF1ZXVlLCB3cWVfcCwgY3VyX3JlY3Zfd3IpOworCQkvKgorCQkgKiBpZiBzb21ldGhpbmcgZmFpbGVkLAorCQkgKiByZXNldCB0aGUgZnJlZSBlbnRyeSBwb2ludGVyIHRvIHRoZSBzdGFydCB2YWx1ZQorCQkgKi8KKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCW15X3FwLT5pcHpfcnF1ZXVlLmN1cnJlbnRfcV9vZmZzZXQgPSBzdGFydF9vZmZzZXQ7CisJCQkqYmFkX3JlY3Zfd3IgPSBjdXJfcmVjdl93cjsKKwkJCWlmICh3cWVfY250ID09IDApIHsKKwkJCQlyZXQgPSAtRUlOVkFMOworCQkJCWVoY2FfZXJyKHFwLT5kZXZpY2UsICJDb3VsZCBub3Qgd3JpdGUgV1FFICIKKwkJCQkJICJxcF9udW09JXgiLCBxcC0+cXBfbnVtKTsKKwkJCX0KKwkJCWdvdG8gcG9zdF9yZWN2X2V4aXQwOworCQl9CisJCXdxZV9jbnQrKzsKKwkJZWhjYV9nZW5fZGJnKCJlaGNhX3FwPSVwIHFwX251bT0leCB3cWVfY250PSVkIiwKKwkJICAgICBteV9xcCwgcXAtPnFwX251bSwgd3FlX2NudCk7CisJfSAvKiBlb2YgZm9yIGN1cl9yZWN2X3dyICovCisKK3Bvc3RfcmVjdl9leGl0MDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteV9xcC0+c3BpbmxvY2tfciwgc3BsX2ZsYWdzKTsKKwlpb3N5bmMoKTsgLyogc2VyaWFsaXplIEdBTCByZWdpc3RlciBhY2Nlc3MgKi8KKwloaXB6X3VwZGF0ZV9ycWEobXlfcXAsIHdxZV9jbnQpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBpYl93Y19vcGNvZGUgdGFibGUgY29udmVydHMgZWhjYSB3YyBvcGNvZGUgdG8gaWIKKyAqIFNpbmNlIHdlIHVzZSB6ZXJvIHRvIGluZGljYXRlIGludmFsaWQgb3Bjb2RlLCB0aGUgYWN0dWFsIGliIG9wY29kZSBtdXN0CisgKiBiZSBkZWNyZW1lbnRlZCEhIQorICovCitzdGF0aWMgY29uc3QgdTggaWJfd2Nfb3Bjb2RlWzI1NV0gPSB7CisJWzB4MDFdID0gSUJfV0NfUkVDVisxLAorCVsweDAyXSA9IElCX1dDX1JFQ1ZfUkRNQV9XSVRIX0lNTSsxLAorCVsweDA0XSA9IElCX1dDX0JJTkRfTVcrMSwKKwlbMHgwOF0gPSBJQl9XQ19GRVRDSF9BREQrMSwKKwlbMHgxMF0gPSBJQl9XQ19DT01QX1NXQVArMSwKKwlbMHgyMF0gPSBJQl9XQ19SRE1BX1dSSVRFKzEsCisJWzB4NDBdID0gSUJfV0NfUkRNQV9SRUFEKzEsCisJWzB4ODBdID0gSUJfV0NfU0VORCsxCit9OworCisvKiBpbnRlcm5hbCBmdW5jdGlvbiB0byBwb2xsIG9uZSBlbnRyeSBvZiBjcSAqLworc3RhdGljIGlubGluZSBpbnQgZWhjYV9wb2xsX2NxX29uZShzdHJ1Y3QgaWJfY3EgKmNxLCBzdHJ1Y3QgaWJfd2MgKndjKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBlaGNhX2NxICpteV9jcSA9IGNvbnRhaW5lcl9vZihjcSwgc3RydWN0IGVoY2FfY3EsIGliX2NxKTsKKwlzdHJ1Y3QgZWhjYV9jcWUgKmNxZTsKKwlpbnQgY3FlX2NvdW50ID0gMDsKKworcG9sbF9jcV9vbmVfcmVhZF9jcWU6CisJY3FlID0gKHN0cnVjdCBlaGNhX2NxZSAqKQorCQlpcHpfcWVpdF9nZXRfaW5jX3ZhbGlkKCZteV9jcS0+aXB6X3F1ZXVlKTsKKwlpZiAoIWNxZSkgeworCQlyZXQgPSAtRUFHQUlOOworCQllaGNhX2RiZyhjcS0+ZGV2aWNlLCAiQ29tcGxldGlvbiBxdWV1ZSBpcyBlbXB0eSBlaGNhX2NxPSVwICIKKwkJCSAiY3FfbnVtPSV4IHJldD0leCIsIG15X2NxLCBteV9jcS0+Y3FfbnVtYmVyLCByZXQpOworCQlnb3RvICBwb2xsX2NxX29uZV9leGl0MDsKKwl9CisKKwkvKiBwcmV2ZW50cyBsb2FkcyBiZWluZyByZW9yZGVyZWQgYWNyb3NzIHRoaXMgcG9pbnQgKi8KKwlybWIoKTsKKworCWNxZV9jb3VudCsrOworCWlmICh1bmxpa2VseShjcWUtPnN0YXR1cyAmIFdDX1NUQVRVU19QVVJHRV9CSVQpKSB7CisJCXN0cnVjdCBlaGNhX3FwICpxcD1laGNhX2NxX2dldF9xcChteV9jcSwgY3FlLT5sb2NhbF9xcF9udW1iZXIpOworCQlpbnQgcHVyZ2VmbGFnOworCQl1bnNpZ25lZCBsb25nIHNwbF9mbGFnczsKKwkJaWYgKCFxcCkgeworCQkJZWhjYV9lcnIoY3EtPmRldmljZSwgImNxX251bT0leCBxcF9udW09JXggIgorCQkJCSAiY291bGQgbm90IGZpbmQgcXAgLT4gaWdub3JlIGNxZSIsCisJCQkJIG15X2NxLT5jcV9udW1iZXIsIGNxZS0+bG9jYWxfcXBfbnVtYmVyKTsKKwkJCWVoY2FfZG1wKGNxZSwgNjQsICJjcV9udW09JXggcXBfbnVtPSV4IiwKKwkJCQkgbXlfY3EtPmNxX251bWJlciwgY3FlLT5sb2NhbF9xcF9udW1iZXIpOworCQkJLyogaWdub3JlIHRoaXMgcHVyZ2VkIGNxZSAqLworCQkJZ290byBwb2xsX2NxX29uZV9yZWFkX2NxZTsKKwkJfQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmcXAtPnNwaW5sb2NrX3MsIHNwbF9mbGFncyk7CisJCXB1cmdlZmxhZyA9IHFwLT5zcWVycl9wdXJnZWZsYWc7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zcGlubG9ja19zLCBzcGxfZmxhZ3MpOworCisJCWlmIChwdXJnZWZsYWcpIHsKKwkJCWVoY2FfZGJnKGNxLT5kZXZpY2UsICJHb3QgQ1FFIHdpdGggcHVyZ2VkIGJpdCBxcF9udW09JXggIgorCQkJCSAic3JjX3FwPSV4IiwKKwkJCQkgY3FlLT5sb2NhbF9xcF9udW1iZXIsIGNxZS0+cmVtb3RlX3FwX251bWJlcik7CisJCQlpZiAoZWhjYV9kZWJ1Z19sZXZlbCkKKwkJCQllaGNhX2RtcChjcWUsIDY0LCAicXBfbnVtPSV4IHNyY19xcD0leCIsCisJCQkJCSBjcWUtPmxvY2FsX3FwX251bWJlciwKKwkJCQkJIGNxZS0+cmVtb3RlX3FwX251bWJlcik7CisJCQkvKgorCQkJICogaWdub3JlIHRoaXMgdG8gYXZvaWQgZG91YmxlIGNxZXMgb2YgYmFkIHdxZQorCQkJICogdGhhdCBjYXVzZWQgc3FlIGFuZCB0dXJuIG9mZiBwdXJnZSBmbGFnCisJCQkgKi8KKwkJCXFwLT5zcWVycl9wdXJnZWZsYWcgPSAwOworCQkJZ290byBwb2xsX2NxX29uZV9yZWFkX2NxZTsKKwkJfQorCX0KKworCS8qIHRyYWNpbmcgY3FlICovCisJaWYgKGVoY2FfZGVidWdfbGV2ZWwpIHsKKwkJZWhjYV9kYmcoY3EtPmRldmljZSwKKwkJCSAiUmVjZWl2ZWQgQ09NUExFVElPTiBlaGNhX2NxPSVwIGNxX251bT0leCAtLS0tLSIsCisJCQkgbXlfY3EsIG15X2NxLT5jcV9udW1iZXIpOworCQllaGNhX2RtcChjcWUsIDY0LCAiZWhjYV9jcT0lcCBjcV9udW09JXgiLAorCQkJIG15X2NxLCBteV9jcS0+Y3FfbnVtYmVyKTsKKwkJZWhjYV9kYmcoY3EtPmRldmljZSwKKwkJCSAiZWhjYV9jcT0lcCBjcV9udW09JXggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsCisJCQkgbXlfY3EsIG15X2NxLT5jcV9udW1iZXIpOworCX0KKworCS8qIHdlIGdvdCBhIGNvbXBsZXRpb24hICovCisJd2MtPndyX2lkID0gY3FlLT53b3JrX3JlcXVlc3RfaWQ7CisKKwkvKiBldmFsIGliX3djX29wY29kZSAqLworCXdjLT5vcGNvZGUgPSBpYl93Y19vcGNvZGVbY3FlLT5vcHR5cGVdLTE7CisJaWYgKHVubGlrZWx5KHdjLT5vcGNvZGUgPT0gLTEpKSB7CisJCWVoY2FfZXJyKGNxLT5kZXZpY2UsICJJbnZhbGlkIGNxZS0+T1BUeXBlPSV4IGNxZS0+c3RhdHVzPSV4ICIKKwkJCSAiZWhjYV9jcT0lcCBjcV9udW09JXgiLAorCQkJIGNxZS0+b3B0eXBlLCBjcWUtPnN0YXR1cywgbXlfY3EsIG15X2NxLT5jcV9udW1iZXIpOworCQkvKiBkdW1wIGNxZSBmb3Igb3RoZXIgaW5mb3MgKi8KKwkJZWhjYV9kbXAoY3FlLCA2NCwgImVoY2FfY3E9JXAgY3FfbnVtPSV4IiwKKwkJCSBteV9jcSwgbXlfY3EtPmNxX251bWJlcik7CisJCS8qIHVwZGF0ZSBhbHNvIHF1ZXVlIGFkZGVyIHRvIHRocm93IGF3YXkgdGhpcyBlbnRyeSEhISAqLworCQlnb3RvIHBvbGxfY3Ffb25lX2V4aXQwOworCX0KKwkvKiBldmFsIGliX3djX3N0YXR1cyAqLworCWlmICh1bmxpa2VseShjcWUtPnN0YXR1cyAmIFdDX1NUQVRVU19FUlJPUl9CSVQpKSB7CisJCS8qIGNvbXBsZXRlIHdpdGggZXJyb3JzICovCisJCW1hcF9pYl93Y19zdGF0dXMoY3FlLT5zdGF0dXMsICZ3Yy0+c3RhdHVzKTsKKwkJd2MtPnZlbmRvcl9lcnIgPSB3Yy0+c3RhdHVzOworCX0gZWxzZQorCQl3Yy0+c3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKKworCXdjLT5xcF9udW0gPSBjcWUtPmxvY2FsX3FwX251bWJlcjsKKwl3Yy0+Ynl0ZV9sZW4gPSBjcWUtPm5yX2J5dGVzX3RyYW5zZmVycmVkOworCXdjLT5wa2V5X2luZGV4ID0gY3FlLT5wa2V5X2luZGV4OworCXdjLT5zbGlkID0gY3FlLT5ybGlkOworCXdjLT5kbGlkX3BhdGhfYml0cyA9IGNxZS0+ZGxpZDsKKwl3Yy0+c3JjX3FwID0gY3FlLT5yZW1vdGVfcXBfbnVtYmVyOworCXdjLT53Y19mbGFncyA9IGNxZS0+d19jb21wbGV0aW9uX2ZsYWdzOworCXdjLT5pbW1fZGF0YSA9IGNwdV90b19iZTMyKGNxZS0+aW1tZWRpYXRlX2RhdGEpOworCXdjLT5zbCA9IGNxZS0+c2VydmljZV9sZXZlbDsKKworCWlmICh3Yy0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MpCisJCWVoY2FfZGJnKGNxLT5kZXZpY2UsCisJCQkgImVoY2FfY3E9JXAgY3FfbnVtPSV4IFdBUk5JTkcgdW5zdWNjZXNzZnVsIGNxZSAiCisJCQkgIk9QVHlwZT0leCBzdGF0dXM9JXggcXBfbnVtPSV4IHNyY19xcD0leCB3cl9pZD0lbHggIgorCQkJICJjcWU9JXAiLCBteV9jcSwgbXlfY3EtPmNxX251bWJlciwgY3FlLT5vcHR5cGUsCisJCQkgY3FlLT5zdGF0dXMsIGNxZS0+bG9jYWxfcXBfbnVtYmVyLAorCQkJIGNxZS0+cmVtb3RlX3FwX251bWJlciwgY3FlLT53b3JrX3JlcXVlc3RfaWQsIGNxZSk7CisKK3BvbGxfY3Ffb25lX2V4aXQwOgorCWlmIChjcWVfY291bnQgPiAwKQorCQloaXB6X3VwZGF0ZV9mZWNhKG15X2NxLCBjcWVfY291bnQpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IGVoY2FfcG9sbF9jcShzdHJ1Y3QgaWJfY3EgKmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqd2MpCit7CisJc3RydWN0IGVoY2FfY3EgKm15X2NxID0gY29udGFpbmVyX29mKGNxLCBzdHJ1Y3QgZWhjYV9jcSwgaWJfY3EpOworCWludCBucjsKKwlzdHJ1Y3QgaWJfd2MgKmN1cnJlbnRfd2MgPSB3YzsKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBsb25nIHNwbF9mbGFnczsKKworCWlmIChudW1fZW50cmllcyA8IDEpIHsKKwkJZWhjYV9lcnIoY3EtPmRldmljZSwgIkludmFsaWQgbnVtX2VudHJpZXM9JWQgZWhjYV9jcT0lcCAiCisJCQkgImNxX251bT0leCIsIG51bV9lbnRyaWVzLCBteV9jcSwgbXlfY3EtPmNxX251bWJlcik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gcG9sbF9jcV9leGl0MDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbXlfY3EtPnNwaW5sb2NrLCBzcGxfZmxhZ3MpOworCWZvciAobnIgPSAwOyBuciA8IG51bV9lbnRyaWVzOyBucisrKSB7CisJCXJldCA9IGVoY2FfcG9sbF9jcV9vbmUoY3EsIGN1cnJlbnRfd2MpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWN1cnJlbnRfd2MrKzsKKwl9IC8qIGVvZiBmb3IgbnIgKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteV9jcS0+c3BpbmxvY2ssIHNwbF9mbGFncyk7CisJaWYgKHJldCA9PSAtRUFHQUlOICB8fCAhcmV0KQorCQlyZXQgPSBucjsKKworcG9sbF9jcV9leGl0MDoKKwlyZXR1cm4gcmV0OworfQorCitpbnQgZWhjYV9yZXFfbm90aWZ5X2NxKHN0cnVjdCBpYl9jcSAqY3EsIGVudW0gaWJfY3Ffbm90aWZ5IGNxX25vdGlmeSkKK3sKKwlzdHJ1Y3QgZWhjYV9jcSAqbXlfY3EgPSBjb250YWluZXJfb2YoY3EsIHN0cnVjdCBlaGNhX2NxLCBpYl9jcSk7CisKKwlzd2l0Y2ggKGNxX25vdGlmeSkgeworCWNhc2UgSUJfQ1FfU09MSUNJVEVEOgorCQloaXB6X3NldF9jcXhfbjAobXlfY3EsIDEpOworCQlicmVhazsKKwljYXNlIElCX0NRX05FWFRfQ09NUDoKKwkJaGlwel9zZXRfY3F4X24xKG15X2NxLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjE2ZTljCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwpAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgU1FQIGZ1bmN0aW9ucworICoKKyAqICBBdXRob3JzOiBLaGFkaWphIFNvdWlzc2kgPHNvdWlzc2lAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIZWlrbyBKIFNjaGljayA8c2NoaWNraGpAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJlaGNhX3Flcy5oIgorI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisKKworLyoqCisgKiBlaGNhX2RlZmluZV9zcXAgLSBEZWZpbmVzIHNwZWNpYWwgcXVldWUgcGFpciAxIChHU0kgUVApLiBXaGVuIHNwZWNpYWwgcXVldWUKKyAqIHBhaXIgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHksIHRoZSBjb3JyZXNwb25kaW5nIHBvcnQgZ2V0cyBhY3RpdmUuCisgKgorICogRGVmaW5lIFNwZWNpYWwgUXVldWUgcGFpciAwIChTTUkgUVApIGlzIHN0aWxsIG5vdCBzdXBwb3J0ZWQuCisgKgorICogQHFwX2luaXRfYXR0cjogUXVldWUgcGFpciBpbml0IGF0dHJpYnV0ZXMgd2l0aCBwb3J0IGFuZCBxdWV1ZSBwYWlyIHR5cGUKKyAqLworCit1NjQgZWhjYV9kZWZpbmVfc3FwKHN0cnVjdCBlaGNhX3NoY2EgKnNoY2EsCisJCSAgICBzdHJ1Y3QgZWhjYV9xcCAqZWhjYV9xcCwKKwkJICAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cikKK3sKKwl1MzIgcG1hX3FwX25yLCBibWFfcXBfbnI7CisJdTY0IHJldDsKKwl1OCBwb3J0ID0gcXBfaW5pdF9hdHRyLT5wb3J0X251bTsKKwlpbnQgY291bnRlcjsKKworCXNoY2EtPnNwb3J0W3BvcnQgLSAxXS5wb3J0X3N0YXRlID0gSUJfUE9SVF9ET1dOOworCisJc3dpdGNoIChxcF9pbml0X2F0dHItPnFwX3R5cGUpIHsKKwljYXNlIElCX1FQVF9TTUk6CisJCS8qIGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgeWV0ICovCisJCWJyZWFrOworCWNhc2UgSUJfUVBUX0dTSToKKwkJcmV0ID0gaGlwel9oX2RlZmluZV9hcXAxKHNoY2EtPmlwel9oY2FfaGFuZGxlLAorCQkJCQkgZWhjYV9xcC0+aXB6X3FwX2hhbmRsZSwKKwkJCQkJIGVoY2FfcXAtPmdhbHBhcy5rZXJuZWwsCisJCQkJCSAodTMyKSBxcF9pbml0X2F0dHItPnBvcnRfbnVtLAorCQkJCQkgJnBtYV9xcF9uciwgJmJtYV9xcF9ucik7CisKKwkJaWYgKHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsCisJCQkJICJDYW4ndCBkZWZpbmUgQVFQMSBmb3IgcG9ydCAleC4gcmM9JWx4IiwKKwkJCQkgcG9ydCwgcmV0KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZWhjYV9lcnIoJnNoY2EtPmliX2RldmljZSwgImludmFsaWQgcXBfdHlwZT0leCIsCisJCQkgcXBfaW5pdF9hdHRyLT5xcF90eXBlKTsKKwkJcmV0dXJuIEhfUEFSQU1FVEVSOworCX0KKworCWZvciAoY291bnRlciA9IDA7CisJICAgICBzaGNhLT5zcG9ydFtwb3J0IC0gMV0ucG9ydF9zdGF0ZSAhPSBJQl9QT1JUX0FDVElWRSAmJgorCQkgICAgIGNvdW50ZXIgPCBlaGNhX3BvcnRfYWN0X3RpbWU7CisJICAgICBjb3VudGVyKyspIHsKKwkJZWhjYV9kYmcoJnNoY2EtPmliX2RldmljZSwgIi4uLiB3YWl0IHVudGlsIHBvcnQgJXggaXMgYWN0aXZlIiwKKwkJCSBwb3J0KTsKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwMCk7CisJfQorCisJaWYgKGNvdW50ZXIgPT0gZWhjYV9wb3J0X2FjdF90aW1lKSB7CisJCWVoY2FfZXJyKCZzaGNhLT5pYl9kZXZpY2UsICJQb3J0ICV4IGlzIG5vdCBhY3RpdmUuIiwgcG9ydCk7CisJCXJldHVybiBIX0hBUkRXQVJFOworCX0KKworCXJldHVybiBIX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Rvb2xzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Rvb2xzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1NmJiOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdG9vbHMuaApAQCAtMCwwICsxLDE3MiBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgYXV4aWxpYXJ5IGZ1bmN0aW9ucworICoKKyAqICBBdXRob3JzOiBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgS2hhZGlqYSBTb3Vpc3NpIDxzb3Vpc3Npa0BkZS5pYm0uY29tPgorICogICAgICAgICAgIFdhbGVyaSBGb21pbiA8Zm9taW5AZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIZWlrbyBKIFNjaGljayA8c2NoaWNraGpAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKworI2lmbmRlZiBFSENBX1RPT0xTX0gKKyNkZWZpbmUgRUhDQV9UT09MU19ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWRyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CisjaW5jbHVkZSA8YXNtL2libWVidXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCitleHRlcm4gaW50IGVoY2FfZGVidWdfbGV2ZWw7CisKKyNkZWZpbmUgZWhjYV9kYmcoaWJfZGV2LCBmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoZWhjYV9kZWJ1Z19sZXZlbCkpIFwKKwkJCWRldl9wcmludGsoS0VSTl9ERUJVRywgKGliX2RldiktPmRtYV9kZXZpY2UsIFwKKwkJCQkgICAiUFUlMDR4IEVIQ0FfREJHOiVzICIgZm9ybWF0ICJcbiIsIFwKKwkJCQkgICBnZXRfcGFjYSgpLT5wYWNhX2luZGV4LCBfX0ZVTkNUSU9OX18sIFwKKwkJCQkgICAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBlaGNhX2luZm8oaWJfZGV2LCBmb3JtYXQsIGFyZy4uLikgXAorCWRldl9pbmZvKChpYl9kZXYpLT5kbWFfZGV2aWNlLCAiUFUlMDR4IEVIQ0FfSU5GTzolcyAiIGZvcm1hdCAiXG4iLCBcCisJCSBnZXRfcGFjYSgpLT5wYWNhX2luZGV4LCBfX0ZVTkNUSU9OX18sICMjIGFyZykKKworI2RlZmluZSBlaGNhX3dhcm4oaWJfZGV2LCBmb3JtYXQsIGFyZy4uLikgXAorCWRldl93YXJuKChpYl9kZXYpLT5kbWFfZGV2aWNlLCAiUFUlMDR4IEVIQ0FfV0FSTjolcyAiIGZvcm1hdCAiXG4iLCBcCisJCSBnZXRfcGFjYSgpLT5wYWNhX2luZGV4LCBfX0ZVTkNUSU9OX18sICMjIGFyZykKKworI2RlZmluZSBlaGNhX2VycihpYl9kZXYsIGZvcm1hdCwgYXJnLi4uKSBcCisJZGV2X2VycigoaWJfZGV2KS0+ZG1hX2RldmljZSwgIlBVJTA0eCBFSENBX0VSUjolcyAiIGZvcm1hdCAiXG4iLCBcCisJCWdldF9wYWNhKCktPnBhY2FfaW5kZXgsIF9fRlVOQ1RJT05fXywgIyMgYXJnKQorCisvKiB1c2UgdGhpcyBvbmUgb25seSBpZiBubyBpYl9kZXYgYXZhaWxhYmxlICovCisjZGVmaW5lIGVoY2FfZ2VuX2RiZyhmb3JtYXQsIGFyZy4uLikgXAorCWRvIHsgXAorCQlpZiAodW5saWtlbHkoZWhjYV9kZWJ1Z19sZXZlbCkpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJQVSUwNHggRUhDQV9EQkc6JXMgIiBmb3JtYXQgIlxuIixcCisJCQkgICAgICAgZ2V0X3BhY2EoKS0+cGFjYV9pbmRleCwgX19GVU5DVElPTl9fLCAjIyBhcmcpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBlaGNhX2dlbl93YXJuKGZvcm1hdCwgYXJnLi4uKSBcCisJZG8geyBcCisJCWlmICh1bmxpa2VseShlaGNhX2RlYnVnX2xldmVsKSkgXAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiUFUlMDR4IEVIQ0FfV0FSTjolcyAiIGZvcm1hdCAiXG4iLFwKKwkJCSAgICAgICBnZXRfcGFjYSgpLT5wYWNhX2luZGV4LCBfX0ZVTkNUSU9OX18sICMjIGFyZyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGVoY2FfZ2VuX2Vycihmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0VSUiAiUFUlMDR4IEVIQ0FfRVJSOiVzICIgZm9ybWF0ICJcbiIsIFwKKwkJZ2V0X3BhY2EoKS0+cGFjYV9pbmRleCwgX19GVU5DVElPTl9fLCAjIyBhcmcpCisKKy8qKgorICogZWhjYV9kbXAgLSBwcmludGsgYSBtZW1vcnkgYmxvY2ssIHdob3NlIGxlbmd0aCBpcyBuKjggYnl0ZXMuCisgKiBFYWNoIGxpbmUgaGFzIHRoZSBmb2xsb3dpbmcgbGF5b3V0OgorICogPGZvcm1hdCBzdHJpbmc+IGFkcj1YIG9mcz1ZIDw4IGJ5dGVzIGhleD4gPDggYnl0ZXMgaGV4PgorICovCisjZGVmaW5lIGVoY2FfZG1wKGFkciwgbGVuLCBmb3JtYXQsIGFyZ3MuLi4pIFwKKwlkbyB7CQkJCSAgICAgICBcCisJCXVuc2lnbmVkIGludCB4OwkJCSAgICAgIFwKKwkJdW5zaWduZWQgaW50IGwgPSAodW5zaWduZWQgaW50KShsZW4pOyBcCisJCXVuc2lnbmVkIGNoYXIgKmRlYiA9ICh1bnNpZ25lZCBjaGFyKikoYWRyKTsJXAorCQlmb3IgKHggPSAwOyB4IDwgbDsgeCArPSAxNikgeyBcCisJCQlwcmludGsoIkVIQ0FfRE1QOiVzIiBmb3JtYXQgXAorCQkJICAgICAgICIgYWRyPSVwIG9mcz0lMDR4ICUwMTZseCAlMDE2bHhcbiIsIFwKKwkJCSAgICAgICBfX0ZVTkNUSU9OX18sICMjYXJncywgZGViLCB4LCBcCisJCQkgICAgICAgKigodTY0ICopJmRlYlswXSksICooKHU2NCAqKSZkZWJbOF0pKTsgXAorCQkJZGViICs9IDE2OyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKy8qIGRlZmluZSBhIGJpdG1hc2ssIGxpdHRsZSBlbmRpYW4gdmVyc2lvbiAqLworI2RlZmluZSBFSENBX0JNQVNLKHBvcyxsZW5ndGgpICgoKHBvcyk8PDE2KSsobGVuZ3RoKSkKKworLyogZGVmaW5lIGEgYml0bWFzaywgdGhlIGlibSB3YXkuLi4gKi8KKyNkZWZpbmUgRUhDQV9CTUFTS19JQk0oZnJvbSx0bykgKCgoNjMtdG8pPDwxNikrKCh0byktKGZyb20pKzEpKQorCisvKiBpbnRlcm5hbCBmdW5jdGlvbiwgZG9uJ3QgdXNlICovCisjZGVmaW5lIEVIQ0FfQk1BU0tfU0hJRlRQT1MobWFzaykgKCgobWFzayk+PjE2KSYweGZmZmYpCisKKy8qIGludGVybmFsIGZ1bmN0aW9uLCBkb24ndCB1c2UgKi8KKyNkZWZpbmUgRUhDQV9CTUFTS19NQVNLKG1hc2spICgweGZmZmZmZmZmZmZmZmZmZmZVTEwgPj4gKCg2NC0obWFzaykpJjB4ZmZmZikpCisKKy8qKgorICogRUhDQV9CTUFTS19TRVQgLSByZXR1cm4gdmFsdWUgc2hpZnRlZCBhbmQgbWFza2VkIGJ5IG1hc2sKKyAqIHZhcmlhYmxlfD1FSENBX0JNQVNLX1NFVChNWV9NQVNLLDB4NDcxMSkgT1JzIHRoZSBiaXRzIGluIHZhcmlhYmxlCisgKiB2YXJpYWJsZSY9fkVIQ0FfQk1BU0tfU0VUKE1ZX01BU0ssLTEpIGNsZWFycyB0aGUgYml0cyBmcm9tIHRoZSBtYXNrCisgKiBpbiB2YXJpYWJsZQorICovCisjZGVmaW5lIEVIQ0FfQk1BU0tfU0VUKG1hc2ssdmFsdWUpIFwKKwkoKEVIQ0FfQk1BU0tfTUFTSyhtYXNrKSAmICgodTY0KSh2YWx1ZSkpKTw8RUhDQV9CTUFTS19TSElGVFBPUyhtYXNrKSkKKworLyoqCisgKiBFSENBX0JNQVNLX0dFVCAtIGV4dHJhY3QgYSBwYXJhbWV0ZXIgZnJvbSB2YWx1ZSBieSBtYXNrCisgKi8KKyNkZWZpbmUgRUhDQV9CTUFTS19HRVQobWFzayx2YWx1ZSkgXAorCShFSENBX0JNQVNLX01BU0sobWFzaykmICgoKHU2NCkodmFsdWUpKT4+RUhDQV9CTUFTS19TSElGVFBPUyhtYXNrKSkpCisKKworLyogQ29udmVydHMgZWhjYSB0byBpYiByZXR1cm4gY29kZSAqLworc3RhdGljIGlubGluZSBpbnQgZWhjYTJpYl9yZXR1cm5fY29kZSh1NjQgZWhjYV9yYykKK3sKKwlzd2l0Y2ggKGVoY2FfcmMpIHsKKwljYXNlIEhfU1VDQ0VTUzoKKwkJcmV0dXJuIDA7CisJY2FzZSBIX0JVU1k6CisJCXJldHVybiAtRUJVU1k7CisJY2FzZSBIX05PX01FTToKKwkJcmV0dXJuIC1FTk9NRU07CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCisKKyNlbmRpZiAvKiBFSENBX1RPT0xTX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfdXZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwODc2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3V2ZXJicy5jCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICB1c2Vyc3BhY2Ugc3VwcG9ydCB2ZXJicworICoKKyAqICBBdXRob3JzOiBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgSGVpa28gSiBTY2hpY2sgPHNjaGlja2hqQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKworI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImVoY2FfaXZlcmJzLmgiCisjaW5jbHVkZSAiZWhjYV9tcm13LmgiCisjaW5jbHVkZSAiZWhjYV90b29scy5oIgorI2luY2x1ZGUgImhjcF9pZi5oIgorCitzdHJ1Y3QgaWJfdWNvbnRleHQgKmVoY2FfYWxsb2NfdWNvbnRleHQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQoreworCXN0cnVjdCBlaGNhX3Vjb250ZXh0ICpteV9jb250ZXh0OworCisJbXlfY29udGV4dCA9IGt6YWxsb2Moc2l6ZW9mICpteV9jb250ZXh0LCBHRlBfS0VSTkVMKTsKKwlpZiAoIW15X2NvbnRleHQpIHsKKwkJZWhjYV9lcnIoZGV2aWNlLCAiT3V0IG9mIG1lbW9yeSBkZXZpY2U9JXAiLCBkZXZpY2UpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwlyZXR1cm4gJm15X2NvbnRleHQtPmliX3Vjb250ZXh0OworfQorCitpbnQgZWhjYV9kZWFsbG9jX3Vjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCkKK3sKKwlrZnJlZShjb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IGVoY2FfdWNvbnRleHQsIGliX3Vjb250ZXh0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwYWdlICplaGNhX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCSB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCAqdHlwZSkKK3sKKwlzdHJ1Y3QgcGFnZSAqbXlwYWdlID0gTlVMTDsKKwl1NjQgZmlsZW9mZnNldCA9IHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVDsKKwl1MzIgaWRyX2hhbmRsZSA9IGZpbGVvZmZzZXQgPj4gMzI7CisJdTMyIHFfdHlwZSA9IChmaWxlb2Zmc2V0ID4+IDI4KSAmIDB4RjsJICAvKiBDUSwgUVAsLi4uICAgICAgICAqLworCXUzMiByc3JjX3R5cGUgPSAoZmlsZW9mZnNldCA+PiAyNCkgJiAweEY7IC8qIHNxLHJxLGNtbmRfd2luZG93ICovCisJdTMyIGN1cl9waWQgPSBjdXJyZW50LT50Z2lkOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGVoY2FfY3EgKmNxOworCXN0cnVjdCBlaGNhX3FwICpxcDsKKwlzdHJ1Y3QgZWhjYV9wZCAqcGQ7CisJdTY0IG9mZnNldDsKKwl2b2lkICp2YWRkcjsKKworCXN3aXRjaCAocV90eXBlKSB7CisJY2FzZSAxOiAvKiBDUSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9jcV9pZHJfbG9jaywgZmxhZ3MpOworCQljcSA9IGlkcl9maW5kKCZlaGNhX2NxX2lkciwgaWRyX2hhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKworCQkvKiBtYWtlIHN1cmUgdGhpcyBtbWFwIHJlYWxseSBiZWxvbmdzIHRvIHRoZSBhdXRob3JpemVkIHVzZXIgKi8KKwkJaWYgKCFjcSkgeworCQkJZWhjYV9nZW5fZXJyKCJjcSBpcyBOVUxMIHJldD1OT1BBR0VfU0lHQlVTIik7CisJCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsKKwkJfQorCisJCWlmIChjcS0+b3ducGlkICE9IGN1cl9waWQpIHsKKwkJCWVoY2FfZXJyKGNxLT5pYl9jcS5kZXZpY2UsCisJCQkJICJJbnZhbGlkIGNhbGxlciBwaWQ9JXggb3ducGlkPSV4IiwKKwkJCQkgY3VyX3BpZCwgY3EtPm93bnBpZCk7CisJCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsKKwkJfQorCisJCWlmIChyc3JjX3R5cGUgPT0gMikgeworCQkJZWhjYV9kYmcoY3EtPmliX2NxLmRldmljZSwgImNxPSVwIGNxIHF1ZXVlYXJlYSIsIGNxKTsKKwkJCW9mZnNldCA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OworCQkJdmFkZHIgPSBpcHpfcWVpdF9jYWxjKCZjcS0+aXB6X3F1ZXVlLCBvZmZzZXQpOworCQkJZWhjYV9kYmcoY3EtPmliX2NxLmRldmljZSwgIm9mZnNldD0lbHggdmFkZHI9JXAiLAorCQkJCSBvZmZzZXQsIHZhZGRyKTsKKwkJCW15cGFnZSA9IHZpcnRfdG9fcGFnZSh2YWRkcik7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIDI6IC8qIFFQICovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZlaGNhX3FwX2lkcl9sb2NrLCBmbGFncyk7CisJCXFwID0gaWRyX2ZpbmQoJmVoY2FfcXBfaWRyLCBpZHJfaGFuZGxlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCisJCS8qIG1ha2Ugc3VyZSB0aGlzIG1tYXAgcmVhbGx5IGJlbG9uZ3MgdG8gdGhlIGF1dGhvcml6ZWQgdXNlciAqLworCQlpZiAoIXFwKSB7CisJCQllaGNhX2dlbl9lcnIoInFwIGlzIE5VTEwgcmV0PU5PUEFHRV9TSUdCVVMiKTsKKwkJCXJldHVybiBOT1BBR0VfU0lHQlVTOworCQl9CisKKwkJcGQgPSBjb250YWluZXJfb2YocXAtPmliX3FwLnBkLCBzdHJ1Y3QgZWhjYV9wZCwgaWJfcGQpOworCQlpZiAocGQtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCQllaGNhX2VycihxcC0+aWJfcXAuZGV2aWNlLAorCQkJCSAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCisJCQkJIGN1cl9waWQsIHBkLT5vd25waWQpOworCQkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CisJCX0KKworCQlpZiAocnNyY190eXBlID09IDIpIHsJLyogcnF1ZXVlICovCisJCQllaGNhX2RiZyhxcC0+aWJfcXAuZGV2aWNlLCAicXA9JXAgcXAgcnF1ZXVlYXJlYSIsIHFwKTsKKwkJCW9mZnNldCA9IGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0OworCQkJdmFkZHIgPSBpcHpfcWVpdF9jYWxjKCZxcC0+aXB6X3JxdWV1ZSwgb2Zmc2V0KTsKKwkJCWVoY2FfZGJnKHFwLT5pYl9xcC5kZXZpY2UsICJvZmZzZXQ9JWx4IHZhZGRyPSVwIiwKKwkJCQkgb2Zmc2V0LCB2YWRkcik7CisJCQlteXBhZ2UgPSB2aXJ0X3RvX3BhZ2UodmFkZHIpOworCQl9IGVsc2UgaWYgKHJzcmNfdHlwZSA9PSAzKSB7CS8qIHNxdWV1ZSAqLworCQkJZWhjYV9kYmcocXAtPmliX3FwLmRldmljZSwgInFwPSVwIHFwIHNxdWV1ZWFyZWEiLCBxcCk7CisJCQlvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKKwkJCXZhZGRyID0gaXB6X3FlaXRfY2FsYygmcXAtPmlwel9zcXVldWUsIG9mZnNldCk7CisJCQllaGNhX2RiZyhxcC0+aWJfcXAuZGV2aWNlLCAib2Zmc2V0PSVseCB2YWRkcj0lcCIsCisJCQkJIG9mZnNldCwgdmFkZHIpOworCQkJbXlwYWdlID0gdmlydF90b19wYWdlKHZhZGRyKTsKKwkJfQorCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVoY2FfZ2VuX2VycigiYmFkIHF1ZXVlIHR5cGUgJXgiLCBxX3R5cGUpOworCQlyZXR1cm4gTk9QQUdFX1NJR0JVUzsKKwl9CisKKwlpZiAoIW15cGFnZSkgeworCQllaGNhX2dlbl9lcnIoIkludmFsaWQgcGFnZSBhZHI9PU5VTEwgcmV0PU5PUEFHRV9TSUdCVVMiKTsKKwkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CisJfQorCWdldF9wYWdlKG15cGFnZSk7CisKKwlyZXR1cm4gbXlwYWdlOworfQorCitzdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGVoY2F1X3ZtX29wcyA9IHsKKwkubm9wYWdlID0gZWhjYV9ub3BhZ2UsCit9OworCitpbnQgZWhjYV9tbWFwKHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJdTY0IGZpbGVvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisJdTMyIGlkcl9oYW5kbGUgPSBmaWxlb2Zmc2V0ID4+IDMyOworCXUzMiBxX3R5cGUgPSAoZmlsZW9mZnNldCA+PiAyOCkgJiAweEY7CSAgLyogQ1EsIFFQLC4uLiAgICAgICAgKi8KKwl1MzIgcnNyY190eXBlID0gKGZpbGVvZmZzZXQgPj4gMjQpICYgMHhGOyAvKiBzcSxycSxjbW5kX3dpbmRvdyAqLworCXUzMiBjdXJfcGlkID0gY3VycmVudC0+dGdpZDsKKwl1MzIgcmV0OworCXU2NCB2c2l6ZSwgcGh5c2ljYWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZWhjYV9jcSAqY3E7CisJc3RydWN0IGVoY2FfcXAgKnFwOworCXN0cnVjdCBlaGNhX3BkICpwZDsKKworCXN3aXRjaCAocV90eXBlKSB7CisJY2FzZSAgMTogLyogQ1EgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmVoY2FfY3FfaWRyX2xvY2ssIGZsYWdzKTsKKwkJY3EgPSBpZHJfZmluZCgmZWhjYV9jcV9pZHIsIGlkcl9oYW5kbGUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaGNhX2NxX2lkcl9sb2NrLCBmbGFncyk7CisKKwkJLyogbWFrZSBzdXJlIHRoaXMgbW1hcCByZWFsbHkgYmVsb25ncyB0byB0aGUgYXV0aG9yaXplZCB1c2VyICovCisJCWlmICghY3EpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAoY3EtPm93bnBpZCAhPSBjdXJfcGlkKSB7CisJCQllaGNhX2VycihjcS0+aWJfY3EuZGV2aWNlLAorCQkJCSAiSW52YWxpZCBjYWxsZXIgcGlkPSV4IG93bnBpZD0leCIsCisJCQkJIGN1cl9waWQsIGNxLT5vd25waWQpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlpZiAoIWNxLT5pYl9jcS51b2JqZWN0IHx8IGNxLT5pYl9jcS51b2JqZWN0LT5jb250ZXh0ICE9IGNvbnRleHQpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlzd2l0Y2ggKHJzcmNfdHlwZSkgeworCQljYXNlIDE6IC8qIGdhbHBhIGZ3IGhhbmRsZSAqLworCQkJZWhjYV9kYmcoY3EtPmliX2NxLmRldmljZSwgImNxPSVwIGNxIHRyaWdnZXJhcmVhIiwgY3EpOworCQkJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKKwkJCXZzaXplID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OworCQkJaWYgKHZzaXplICE9IEVIQ0FfUEFHRVNJWkUpIHsKKwkJCQllaGNhX2VycihjcS0+aWJfY3EuZGV2aWNlLCAiaW52YWxpZCB2c2l6ZT0lbHgiLAorCQkJCQkgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKworCQkJcGh5c2ljYWwgPSBjcS0+Z2FscGFzLnVzZXIuZndfaGFuZGxlOworCQkJdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9SRVNFUlZFRDsKKworCQkJZWhjYV9kYmcoY3EtPmliX2NxLmRldmljZSwKKwkJCQkgInZzaXplPSVseCBwaHlzaWNhbD0lbHgiLCB2c2l6ZSwgcGh5c2ljYWwpOworCQkJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKKwkJCQkJICAgICAgcGh5c2ljYWwgPj4gUEFHRV9TSElGVCwgdnNpemUsCisJCQkJCSAgICAgIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJCWlmIChyZXQpIHsKKwkJCQllaGNhX2VycihjcS0+aWJfY3EuZGV2aWNlLAorCQkJCQkgInJlbWFwX3Bmbl9yYW5nZSgpIGZhaWxlZCByZXQ9JXgiLAorCQkJCQkgcmV0KTsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMjogLyogY3EgcXVldWVfYWRkciAqLworCQkJZWhjYV9kYmcoY3EtPmliX2NxLmRldmljZSwgImNxPSVwIGNxIHFfYWRkciIsIGNxKTsKKwkJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CisJCQl2bWEtPnZtX29wcyA9ICZlaGNhdV92bV9vcHM7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJZWhjYV9lcnIoY3EtPmliX2NxLmRldmljZSwgImJhZCByZXNvdXJjZSB0eXBlICV4IiwKKwkJCQkgcnNyY190eXBlKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWJyZWFrOworCisJY2FzZSAyOiAvKiBRUCAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWhjYV9xcF9pZHJfbG9jaywgZmxhZ3MpOworCQlxcCA9IGlkcl9maW5kKCZlaGNhX3FwX2lkciwgaWRyX2hhbmRsZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVoY2FfcXBfaWRyX2xvY2ssIGZsYWdzKTsKKworCQkvKiBtYWtlIHN1cmUgdGhpcyBtbWFwIHJlYWxseSBiZWxvbmdzIHRvIHRoZSBhdXRob3JpemVkIHVzZXIgKi8KKwkJaWYgKCFxcCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXBkID0gY29udGFpbmVyX29mKHFwLT5pYl9xcC5wZCwgc3RydWN0IGVoY2FfcGQsIGliX3BkKTsKKwkJaWYgKHBkLT5vd25waWQgIT0gY3VyX3BpZCkgeworCQkJZWhjYV9lcnIocXAtPmliX3FwLmRldmljZSwKKwkJCQkgIkludmFsaWQgY2FsbGVyIHBpZD0leCBvd25waWQ9JXgiLAorCQkJCSBjdXJfcGlkLCBwZC0+b3ducGlkKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJaWYgKCFxcC0+aWJfcXAudW9iamVjdCB8fCBxcC0+aWJfcXAudW9iamVjdC0+Y29udGV4dCAhPSBjb250ZXh0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc3dpdGNoIChyc3JjX3R5cGUpIHsKKwkJY2FzZSAxOiAvKiBnYWxwYSBmdyBoYW5kbGUgKi8KKwkJCWVoY2FfZGJnKHFwLT5pYl9xcC5kZXZpY2UsICJxcD0lcCBxcCB0cmlnZ2VyYXJlYSIsIHFwKTsKKwkJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CisJCQl2c2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwkJCWlmICh2c2l6ZSAhPSBFSENBX1BBR0VTSVpFKSB7CisJCQkJZWhjYV9lcnIocXAtPmliX3FwLmRldmljZSwgImludmFsaWQgdnNpemU9JWx4IiwKKwkJCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisKKwkJCXBoeXNpY2FsID0gcXAtPmdhbHBhcy51c2VyLmZ3X2hhbmRsZTsKKwkJCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQ7CisKKwkJCWVoY2FfZGJnKHFwLT5pYl9xcC5kZXZpY2UsICJ2c2l6ZT0lbHggcGh5c2ljYWw9JWx4IiwKKwkJCQkgdnNpemUsIHBoeXNpY2FsKTsKKwkJCXJldCA9IHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCisJCQkJCSAgICAgIHBoeXNpY2FsID4+IFBBR0VfU0hJRlQsIHZzaXplLAorCQkJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7CisJCQlpZiAocmV0KSB7CisJCQkJZWhjYV9lcnIocXAtPmliX3FwLmRldmljZSwKKwkJCQkJICJyZW1hcF9wZm5fcmFuZ2UoKSBmYWlsZWQgcmV0PSV4IiwKKwkJCQkJIHJldCk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIDI6IC8qIHFwIHJxdWV1ZV9hZGRyICovCisJCQllaGNhX2RiZyhxcC0+aWJfcXAuZGV2aWNlLCAicXA9JXAgcXAgcnF1ZXVlX2FkZHIiLCBxcCk7CisJCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCQkJdm1hLT52bV9vcHMgPSAmZWhjYXVfdm1fb3BzOworCQkJYnJlYWs7CisKKwkJY2FzZSAzOiAvKiBxcCBzcXVldWVfYWRkciAqLworCQkJZWhjYV9kYmcocXAtPmliX3FwLmRldmljZSwgInFwPSVwIHFwIHNxdWV1ZV9hZGRyIiwgcXApOworCQkJdm1hLT52bV9mbGFncyB8PSBWTV9SRVNFUlZFRDsKKwkJCXZtYS0+dm1fb3BzID0gJmVoY2F1X3ZtX29wczsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllaGNhX2VycihxcC0+aWJfcXAuZGV2aWNlLCAiYmFkIHJlc291cmNlIHR5cGUgJXgiLAorCQkJCSByc3JjX3R5cGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllaGNhX2dlbl9lcnIoImJhZCBxdWV1ZSB0eXBlICV4IiwgcV90eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBlaGNhX21tYXBfbm9wYWdlKHU2NCBmb2Zmc2V0LCB1NjQgbGVuZ3RoLCB2b2lkICoqbWFwcGVkLAorCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYSkKK3sKKwlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCSptYXBwZWQgPSAodm9pZCopZG9fbW1hcChOVUxMLDAsIGxlbmd0aCwgUFJPVF9XUklURSwKKwkJCQkgTUFQX1NIQVJFRCB8IE1BUF9BTk9OWU1PVVMsCisJCQkJIGZvZmZzZXQpOworCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCWlmICghKCptYXBwZWQpKSB7CisJCWVoY2FfZ2VuX2VycigiY291bGRuJ3QgbW1hcCBmb2Zmc2V0PSVseCBsZW5ndGg9JWx4IiwKKwkJCSAgICAgZm9mZnNldCwgbGVuZ3RoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKnZtYSA9IGZpbmRfdm1hKGN1cnJlbnQtPm1tLCAodTY0KSptYXBwZWQpOworCWlmICghKCp2bWEpKSB7CisJCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWRvX211bm1hcChjdXJyZW50LT5tbSwgMCwgbGVuZ3RoKTsKKwkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWVoY2FfZ2VuX2VycigiY291bGRuJ3QgZmluZCB2bWEgcXVldWU9JXAiLCAqbWFwcGVkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSgqdm1hKS0+dm1fZmxhZ3MgfD0gVk1fUkVTRVJWRUQ7CisJKCp2bWEpLT52bV9vcHMgPSAmZWhjYXVfdm1fb3BzOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBlaGNhX21tYXBfcmVnaXN0ZXIodTY0IHBoeXNpY2FsLCB2b2lkICoqbWFwcGVkLAorCQkgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1hKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyB2c2l6ZTsKKwkvKiBlaGNhIGh3IHN1cHBvcnRzIG9ubHkgNGsgcGFnZSAqLworCXJldCA9IGVoY2FfbW1hcF9ub3BhZ2UoMCwgRUhDQV9QQUdFU0laRSwgbWFwcGVkLCB2bWEpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJjb3VsZCdudCBtbWFwIHBoeXNpY2FsPSVseCIsIHBoeXNpY2FsKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkoKnZtYSktPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCXZzaXplID0gKCp2bWEpLT52bV9lbmQgLSAoKnZtYSktPnZtX3N0YXJ0OworCWlmICh2c2l6ZSAhPSBFSENBX1BBR0VTSVpFKSB7CisJCWVoY2FfZ2VuX2VycigiaW52YWxpZCB2c2l6ZT0lbHgiLAorCQkJICAgICAoKnZtYSktPnZtX2VuZCAtICgqdm1hKS0+dm1fc3RhcnQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkoKnZtYSktPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQoKCp2bWEpLT52bV9wYWdlX3Byb3QpOworCSgqdm1hKS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9SRVNFUlZFRDsKKworCXJldCA9IHJlbWFwX3Bmbl9yYW5nZSgoKnZtYSksICgqdm1hKS0+dm1fc3RhcnQsCisJCQkgICAgICBwaHlzaWNhbCA+PiBQQUdFX1NISUZULCB2c2l6ZSwKKwkJCSAgICAgICgqdm1hKS0+dm1fcGFnZV9wcm90KTsKKwlpZiAocmV0KSB7CisJCWVoY2FfZ2VuX2VycigicmVtYXBfcGZuX3JhbmdlKCkgZmFpbGVkIHJldD0leCIsIHJldCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXJldHVybiAwOworCit9CisKK2ludCBlaGNhX211bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBsZW4pIHsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCWlmIChtbSkgeworCQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCQlyZXQgPSBkb19tdW5tYXAobW0sIGFkZHIsIGxlbik7CisJCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCX0KKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX2lmLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmI0NmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX2lmLmMKQEAgLTAsMCArMSw4NzQgQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIEZpcm13YXJlIEluZmluaWJhbmQgSW50ZXJmYWNlIGNvZGUgZm9yIFBPV0VSCisgKgorICogIEF1dGhvcnM6IENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhvYW5nLU5hbSBOZ3V5ZW4gPGhuZ3V5ZW5AZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBHZXJkIEJheWVyIDxnZXJkLmJheWVyQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSUJNIENvcnBvcmF0aW9uCisgKgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgc291cmNlIGNvZGUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkdWFsIGxpY2Vuc2Ugb2YgR1BMIHYyLjAgYW5kIE9wZW5JQgorICogIEJTRC4KKyAqCisgKiBPcGVuSUIgQlNEIExpY2Vuc2UKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogYW5kL29yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKKyAqIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGFzbS9odmNhbGwuaD4KKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisjaW5jbHVkZSAiaGNwX2lmLmgiCisjaW5jbHVkZSAiaGNwX3BoeXAuaCIKKyNpbmNsdWRlICJoaXB6X2Zucy5oIgorI2luY2x1ZGUgImlwel9wdF9mbi5oIgorCisjZGVmaW5lIEhfQUxMX1JFU19RUF9FTkhBTkNFRF9PUFMgICAgICAgRUhDQV9CTUFTS19JQk0oOSwgMTEpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9QVEVfUElOICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMTIsIDEyKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfU0VSVklDRV9UWVBFICAgICAgIEVIQ0FfQk1BU0tfSUJNKDEzLCAxNSkKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0xMX1JRX0NRRV9QT1NUSU5HICBFSENBX0JNQVNLX0lCTSgxOCwgMTgpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9MTF9TUV9DUUVfUE9TVElORyAgRUhDQV9CTUFTS19JQk0oMTksIDIxKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfU0lHTkFMSU5HX1RZUEUgICAgIEVIQ0FfQk1BU0tfSUJNKDIyLCAyMykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX1VEX0FWX0xLRVlfQ1RSTCAgICBFSENBX0JNQVNLX0lCTSgzMSwgMzEpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9SRVNPVVJDRV9UWVBFICAgICAgRUhDQV9CTUFTS19JQk0oNTYsIDYzKQorCisjZGVmaW5lIEhfQUxMX1JFU19RUF9NQVhfT1VUU1RfU0VORF9XUiAgRUhDQV9CTUFTS19JQk0oMCwgMTUpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9NQVhfT1VUU1RfUkVDVl9XUiAgRUhDQV9CTUFTS19JQk0oMTYsIDMxKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfTUFYX1NFTkRfU0dFICAgICAgIEVIQ0FfQk1BU0tfSUJNKDMyLCAzOSkKKyNkZWZpbmUgSF9BTExfUkVTX1FQX01BWF9SRUNWX1NHRSAgICAgICBFSENBX0JNQVNLX0lCTSg0MCwgNDcpCisKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0FDVF9PVVRTVF9TRU5EX1dSICBFSENBX0JNQVNLX0lCTSgxNiwgMzEpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9BQ1RfT1VUU1RfUkVDVl9XUiAgRUhDQV9CTUFTS19JQk0oNDgsIDYzKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfQUNUX1NFTkRfU0dFICAgICAgIEVIQ0FfQk1BU0tfSUJNKDgsIDE1KQorI2RlZmluZSBIX0FMTF9SRVNfUVBfQUNUX1JFQ1ZfU0dFICAgICAgIEVIQ0FfQk1BU0tfSUJNKDI0LCAzMSkKKworI2RlZmluZSBIX0FMTF9SRVNfUVBfU1FVRVVFX1NJWkVfUEFHRVMgIEVIQ0FfQk1BU0tfSUJNKDAsIDMxKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfUlFVRVVFX1NJWkVfUEFHRVMgIEVIQ0FfQk1BU0tfSUJNKDMyLCA2MykKKworLyogZGlyZWN0IGFjY2VzcyBxcCBjb250cm9scyAqLworI2RlZmluZSBEQVFQX0NUUkxfRU5BQkxFICAgIDB4MDEKKyNkZWZpbmUgREFRUF9DVFJMX1NFTkRfQ09NUCAweDIwCisjZGVmaW5lIERBUVBfQ1RSTF9SRUNWX0NPTVAgMHg0MAorCitzdGF0aWMgdTMyIGdldF9sb25nYnVzeV9tc2VjcyhpbnQgbG9uZ2J1c3lfcmMpCit7CisJc3dpdGNoIChsb25nYnVzeV9yYykgeworCWNhc2UgSF9MT05HX0JVU1lfT1JERVJfMV9NU0VDOgorCQlyZXR1cm4gMTsKKwljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwX01TRUM6CisJCXJldHVybiAxMDsKKwljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwMF9NU0VDOgorCQlyZXR1cm4gMTAwOworCWNhc2UgSF9MT05HX0JVU1lfT1JERVJfMV9TRUM6CisJCXJldHVybiAxMDAwOworCWNhc2UgSF9MT05HX0JVU1lfT1JERVJfMTBfU0VDOgorCQlyZXR1cm4gMTAwMDA7CisJY2FzZSBIX0xPTkdfQlVTWV9PUkRFUl8xMDBfU0VDOgorCQlyZXR1cm4gMTAwMDAwOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworc3RhdGljIGxvbmcgZWhjYV9wbHBhcl9oY2FsbF9ub3JldHModW5zaWduZWQgbG9uZyBvcGNvZGUsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZzMsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBhcmc1LAorCQkJCSAgICB1bnNpZ25lZCBsb25nIGFyZzYsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnNykKK3sKKwlsb25nIHJldDsKKwlpbnQgaSwgc2xlZXBfbXNlY3M7CisKKwllaGNhX2dlbl9kYmcoIm9wY29kZT0lbHggYXJnMT0lbHggYXJnMj0lbHggYXJnMz0lbHggYXJnND0lbHggIgorCQkgICAgICJhcmc1PSVseCBhcmc2PSVseCBhcmc3PSVseCIsCisJCSAgICAgb3Bjb2RlLCBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3KTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJcmV0ID0gcGxwYXJfaGNhbGxfbm9yZXRzKG9wY29kZSwgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwKKwkJCQkJIGFyZzUsIGFyZzYsIGFyZzcpOworCisJCWlmIChIX0lTX0xPTkdfQlVTWShyZXQpKSB7CisJCQlzbGVlcF9tc2VjcyA9IGdldF9sb25nYnVzeV9tc2VjcyhyZXQpOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoc2xlZXBfbXNlY3MpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocmV0IDwgSF9TVUNDRVNTKQorCQkJZWhjYV9nZW5fZXJyKCJvcGNvZGU9JWx4IHJldD0lbHgiCisJCQkJICAgICAiIGFyZzE9JWx4IGFyZzI9JWx4IGFyZzM9JWx4IGFyZzQ9JWx4IgorCQkJCSAgICAgIiBhcmc1PSVseCBhcmc2PSVseCBhcmc3PSVseCAiLAorCQkJCSAgICAgb3Bjb2RlLCByZXQsCisJCQkJICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LAorCQkJCSAgICAgYXJnNiwgYXJnNyk7CisKKwkJZWhjYV9nZW5fZGJnKCJvcGNvZGU9JWx4IHJldD0lbHgiLCBvcGNvZGUsIHJldCk7CisJCXJldHVybiByZXQ7CisKKwl9CisKKwlyZXR1cm4gSF9CVVNZOworfQorCitzdGF0aWMgbG9uZyBlaGNhX3BscGFyX2hjYWxsOSh1bnNpZ25lZCBsb25nIG9wY29kZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKm91dHMsIC8qIGFycmF5IG9mIDkgb3V0cHV0cyAqLworCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmczLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc0LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc1LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc2LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc3LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc4LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc5KQoreworCWxvbmcgcmV0OworCWludCBpLCBzbGVlcF9tc2VjczsKKworCWVoY2FfZ2VuX2RiZygib3Bjb2RlPSVseCBhcmcxPSVseCBhcmcyPSVseCBhcmczPSVseCBhcmc0PSVseCAiCisJCSAgICAgImFyZzU9JWx4IGFyZzY9JWx4IGFyZzc9JWx4IGFyZzg9JWx4IGFyZzk9JWx4IiwKKwkJICAgICBvcGNvZGUsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsCisJCSAgICAgYXJnOCwgYXJnOSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXJldCA9IHBscGFyX2hjYWxsOShvcGNvZGUsIG91dHMsCisJCQkJICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwKKwkJCQkgICBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5KTsKKworCQlpZiAoSF9JU19MT05HX0JVU1kocmV0KSkgeworCQkJc2xlZXBfbXNlY3MgPSBnZXRfbG9uZ2J1c3lfbXNlY3MocmV0KTsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKHNsZWVwX21zZWNzKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJldCA8IEhfU1VDQ0VTUykKKwkJCWVoY2FfZ2VuX2Vycigib3Bjb2RlPSVseCByZXQ9JWx4IgorCQkJCSAgICAgIiBhcmcxPSVseCBhcmcyPSVseCBhcmczPSVseCBhcmc0PSVseCIKKwkJCQkgICAgICIgYXJnNT0lbHggYXJnNj0lbHggYXJnNz0lbHggYXJnOD0lbHgiCisJCQkJICAgICAiIGFyZzk9JWx4IgorCQkJCSAgICAgIiBvdXQxPSVseCBvdXQyPSVseCBvdXQzPSVseCBvdXQ0PSVseCIKKwkJCQkgICAgICIgb3V0NT0lbHggb3V0Nj0lbHggb3V0Nz0lbHggb3V0OD0lbHgiCisJCQkJICAgICAiIG91dDk9JWx4IiwKKwkJCQkgICAgIG9wY29kZSwgcmV0LAorCQkJCSAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwKKwkJCQkgICAgIGFyZzYsIGFyZzcsIGFyZzgsIGFyZzksCisJCQkJICAgICBvdXRzWzBdLCBvdXRzWzFdLCBvdXRzWzJdLCBvdXRzWzNdLAorCQkJCSAgICAgb3V0c1s0XSwgb3V0c1s1XSwgb3V0c1s2XSwgb3V0c1s3XSwKKwkJCQkgICAgIG91dHNbOF0pOworCisJCWVoY2FfZ2VuX2RiZygib3Bjb2RlPSVseCByZXQ9JWx4IG91dDE9JWx4IG91dDI9JWx4IG91dDM9JWx4ICIKKwkJCSAgICAgIm91dDQ9JWx4IG91dDU9JWx4IG91dDY9JWx4IG91dDc9JWx4IG91dDg9JWx4ICIKKwkJCSAgICAgIm91dDk9JWx4IiwKKwkJCSAgICAgb3Bjb2RlLCByZXQsIG91dHNbMF0sIG91dHNbMV0sIG91dHNbMl0sIG91dHNbM10sCisJCQkgICAgIG91dHNbNF0sIG91dHNbNV0sIG91dHNbNl0sIG91dHNbN10sIG91dHNbOF0pOworCQlyZXR1cm4gcmV0OworCisJfQorCisJcmV0dXJuIEhfQlVTWTsKK30KK3U2NCBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfZXEoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoY2FfcGZlcSAqcGZlcSwKKwkJCSAgICAgY29uc3QgdTMyIG5lcV9jb250cm9sLAorCQkJICAgICBjb25zdCB1MzIgbnVtYmVyX29mX2VudHJpZXMsCisJCQkgICAgIHN0cnVjdCBpcHpfZXFfaGFuZGxlICplcV9oYW5kbGUsCisJCQkgICAgIHUzMiAqYWN0X25yX29mX2VudHJpZXMsCisJCQkgICAgIHUzMiAqYWN0X3BhZ2VzLAorCQkJICAgICB1MzIgKmVxX2lzdCkKK3sKKwl1NjQgcmV0OworCXU2NCBvdXRzW1BMUEFSX0hDQUxMOV9CVUZTSVpFXTsKKwl1NjQgYWxsb2NhdGVfY29udHJvbHM7CisKKwkvKiByZXNvdXJjZSB0eXBlICovCisJYWxsb2NhdGVfY29udHJvbHMgPSAzVUxMOworCisJLyogSVNOIGlzIGFzc29jaWF0ZWQgKi8KKwlpZiAobmVxX2NvbnRyb2wgIT0gMSkKKwkJYWxsb2NhdGVfY29udHJvbHMgPSAoMVVMTCA8PCAoNjMgLSA3KSkgfCBhbGxvY2F0ZV9jb250cm9sczsKKwllbHNlIC8qIG5vdGlmaWNhdGlvbiBldmVudCBxdWV1ZSAqLworCQlhbGxvY2F0ZV9jb250cm9scyA9ICgxVUxMIDw8IDYzKSB8IGFsbG9jYXRlX2NvbnRyb2xzOworCisJcmV0ID0gZWhjYV9wbHBhcl9oY2FsbDkoSF9BTExPQ19SRVNPVVJDRSwgb3V0cywKKwkJCQlhZGFwdGVyX2hhbmRsZS5oYW5kbGUsICAvKiByNCAqLworCQkJCWFsbG9jYXRlX2NvbnRyb2xzLCAgICAgIC8qIHI1ICovCisJCQkJbnVtYmVyX29mX2VudHJpZXMsICAgICAgLyogcjYgKi8KKwkJCQkwLCAwLCAwLCAwLCAwLCAwKTsKKwllcV9oYW5kbGUtPmhhbmRsZSA9IG91dHNbMF07CisJKmFjdF9ucl9vZl9lbnRyaWVzID0gKHUzMilvdXRzWzNdOworCSphY3RfcGFnZXMgPSAodTMyKW91dHNbNF07CisJKmVxX2lzdCA9ICh1MzIpb3V0c1s1XTsKKworCWlmIChyZXQgPT0gSF9OT1RfRU5PVUdIX1JFU09VUkNFUykKKwkJZWhjYV9nZW5fZXJyKCJOb3QgZW5vdWdoIHJlc291cmNlIC0gcmV0PSVseCAiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9yZXNldF9ldmVudChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICAgc3RydWN0IGlwel9lcV9oYW5kbGUgZXFfaGFuZGxlLAorCQkgICAgICAgY29uc3QgdTY0IGV2ZW50X21hc2spCit7CisJcmV0dXJuIGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVTRVRfRVZFTlRTLAorCQkJCSAgICAgICBhZGFwdGVyX2hhbmRsZS5oYW5kbGUsIC8qIHI0ICovCisJCQkJICAgICAgIGVxX2hhbmRsZS5oYW5kbGUsICAgICAgLyogcjUgKi8KKwkJCQkgICAgICAgZXZlbnRfbWFzaywJICAgICAgLyogcjYgKi8KKwkJCQkgICAgICAgMCwgMCwgMCwgMCk7Cit9CisKK3U2NCBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfY3EoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoY2FfY3EgKmNxLAorCQkJICAgICBzdHJ1Y3QgZWhjYV9hbGxvY19jcV9wYXJtcyAqcGFyYW0pCit7CisJdTY0IHJldDsKKwl1NjQgb3V0c1tQTFBBUl9IQ0FMTDlfQlVGU0laRV07CisKKwlyZXQgPSBlaGNhX3BscGFyX2hjYWxsOShIX0FMTE9DX1JFU09VUkNFLCBvdXRzLAorCQkJCWFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgICAvKiByNCAgKi8KKwkJCQkyLAkgICAgICAgICAgICAgICAgIC8qIHI1ICAqLworCQkJCXBhcmFtLT5lcV9oYW5kbGUuaGFuZGxlLCAvKiByNiAgKi8KKwkJCQljcS0+dG9rZW4sCSAgICAgICAgIC8qIHI3ICAqLworCQkJCXBhcmFtLT5ucl9jcWUsICAgICAgICAgICAvKiByOCAgKi8KKwkJCQkwLCAwLCAwLCAwKTsKKwljcS0+aXB6X2NxX2hhbmRsZS5oYW5kbGUgPSBvdXRzWzBdOworCXBhcmFtLT5hY3RfbnJfb2ZfZW50cmllcyA9ICh1MzIpb3V0c1szXTsKKwlwYXJhbS0+YWN0X3BhZ2VzID0gKHUzMilvdXRzWzRdOworCisJaWYgKHJldCA9PSBIX1NVQ0NFU1MpCisJCWhjcF9nYWxwYXNfY3RvcigmY3EtPmdhbHBhcywgb3V0c1s1XSwgb3V0c1s2XSk7CisKKwlpZiAocmV0ID09IEhfTk9UX0VOT1VHSF9SRVNPVVJDRVMpCisJCWVoY2FfZ2VuX2VycigiTm90IGVub3VnaCByZXNvdXJjZXMuIHJldD0lbHgiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9xcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgZWhjYV9xcCAqcXAsCisJCQkgICAgIHN0cnVjdCBlaGNhX2FsbG9jX3FwX3Bhcm1zICpwYXJtcykKK3sKKwl1NjQgcmV0OworCXU2NCBhbGxvY2F0ZV9jb250cm9sczsKKwl1NjQgbWF4X3IxMF9yZWc7CisJdTY0IG91dHNbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCXUxNiBtYXhfbnJfcmVjZWl2ZV93cWVzID0gcXAtPmluaXRfYXR0ci5jYXAubWF4X3JlY3Zfd3IgKyAxOworCXUxNiBtYXhfbnJfc2VuZF93cWVzID0gcXAtPmluaXRfYXR0ci5jYXAubWF4X3NlbmRfd3IgKyAxOworCWludCBkYXFwX2N0cmwgPSBwYXJtcy0+ZGFxcF9jdHJsOworCisJYWxsb2NhdGVfY29udHJvbHMgPQorCQlFSENBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfRU5IQU5DRURfT1BTLAorCQkJICAgICAgIChkYXFwX2N0cmwgJiBEQVFQX0NUUkxfRU5BQkxFKSA/IDEgOiAwKQorCQl8IEVIQ0FfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9QVEVfUElOLCAwKQorCQl8IEVIQ0FfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9TRVJWSUNFX1RZUEUsIHBhcm1zLT5zZXJ2aWNldHlwZSkKKwkJfCBFSENBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfU0lHTkFMSU5HX1RZUEUsIHBhcm1zLT5zaWd0eXBlKQorCQl8IEVIQ0FfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9MTF9SUV9DUUVfUE9TVElORywKKwkJCQkgKGRhcXBfY3RybCAmIERBUVBfQ1RSTF9SRUNWX0NPTVApID8gMSA6IDApCisJCXwgRUhDQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX0xMX1NRX0NRRV9QT1NUSU5HLAorCQkJCSAoZGFxcF9jdHJsICYgREFRUF9DVFJMX1NFTkRfQ09NUCkgPyAxIDogMCkKKwkJfCBFSENBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfVURfQVZfTEtFWV9DVFJMLAorCQkJCSBwYXJtcy0+dWRfYXZfbF9rZXlfY3RsKQorCQl8IEVIQ0FfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9SRVNPVVJDRV9UWVBFLCAxKTsKKworCW1heF9yMTBfcmVnID0KKwkJRUhDQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX01BWF9PVVRTVF9TRU5EX1dSLAorCQkJICAgICAgIG1heF9ucl9zZW5kX3dxZXMpCisJCXwgRUhDQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX01BWF9PVVRTVF9SRUNWX1dSLAorCQkJCSBtYXhfbnJfcmVjZWl2ZV93cWVzKQorCQl8IEVIQ0FfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfU0VORF9TR0UsCisJCQkJIHBhcm1zLT5tYXhfc2VuZF9zZ2UpCisJCXwgRUhDQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX01BWF9SRUNWX1NHRSwKKwkJCQkgcGFybXMtPm1heF9yZWN2X3NnZSk7CisKKwlyZXQgPSBlaGNhX3BscGFyX2hjYWxsOShIX0FMTE9DX1JFU09VUkNFLCBvdXRzLAorCQkJCWFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwJICAgICAgICAgICAvKiByNCAgKi8KKwkJCQlhbGxvY2F0ZV9jb250cm9scywJICAgICAgICAgICAvKiByNSAgKi8KKwkJCQlxcC0+c2VuZF9jcS0+aXB6X2NxX2hhbmRsZS5oYW5kbGUsCisJCQkJcXAtPnJlY3ZfY3EtPmlwel9jcV9oYW5kbGUuaGFuZGxlLAorCQkJCXBhcm1zLT5pcHpfZXFfaGFuZGxlLmhhbmRsZSwKKwkJCQkoKHU2NClxcC0+dG9rZW4gPDwgMzIpIHwgcGFybXMtPnBkLnZhbHVlLAorCQkJCW1heF9yMTBfcmVnLAkgICAgICAgICAgICAgICAgICAgLyogcjEwICovCisJCQkJcGFybXMtPnVkX2F2X2xfa2V5X2N0bCwgICAgICAgICAgICAvKiByMTEgKi8KKwkJCQkwKTsKKwlxcC0+aXB6X3FwX2hhbmRsZS5oYW5kbGUgPSBvdXRzWzBdOworCXFwLT5yZWFsX3FwX251bSA9ICh1MzIpb3V0c1sxXTsKKwlwYXJtcy0+YWN0X25yX3NlbmRfc2dlcyA9CisJCSh1MTYpRUhDQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0FDVF9PVVRTVF9TRU5EX1dSLCBvdXRzWzJdKTsKKwlwYXJtcy0+YWN0X25yX3JlY3Zfd3FlcyA9CisJCSh1MTYpRUhDQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0FDVF9PVVRTVF9SRUNWX1dSLCBvdXRzWzJdKTsKKwlwYXJtcy0+YWN0X25yX3NlbmRfc2dlcyA9CisJCSh1OClFSENBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfQUNUX1NFTkRfU0dFLCBvdXRzWzNdKTsKKwlwYXJtcy0+YWN0X25yX3JlY3Zfc2dlcyA9CisJCSh1OClFSENBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfQUNUX1JFQ1ZfU0dFLCBvdXRzWzNdKTsKKwlwYXJtcy0+bnJfc3FfcGFnZXMgPQorCQkodTMyKUVIQ0FfQk1BU0tfR0VUKEhfQUxMX1JFU19RUF9TUVVFVUVfU0laRV9QQUdFUywgb3V0c1s0XSk7CisJcGFybXMtPm5yX3JxX3BhZ2VzID0KKwkJKHUzMilFSENBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfUlFVRVVFX1NJWkVfUEFHRVMsIG91dHNbNF0pOworCisJaWYgKHJldCA9PSBIX1NVQ0NFU1MpCisJCWhjcF9nYWxwYXNfY3RvcigmcXAtPmdhbHBhcywgb3V0c1s2XSwgb3V0c1s2XSk7CisKKwlpZiAocmV0ID09IEhfTk9UX0VOT1VHSF9SRVNPVVJDRVMpCisJCWVoY2FfZ2VuX2VycigiTm90IGVub3VnaCByZXNvdXJjZXMuIHJldD0lbHgiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9xdWVyeV9wb3J0KGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICAgIGNvbnN0IHU4IHBvcnRfaWQsCisJCSAgICAgIHN0cnVjdCBoaXB6X3F1ZXJ5X3BvcnQgKnF1ZXJ5X3BvcnRfcmVzcG9uc2VfYmxvY2spCit7CisJdTY0IHJldDsKKwl1NjQgcl9jYiA9IHZpcnRfdG9fYWJzKHF1ZXJ5X3BvcnRfcmVzcG9uc2VfYmxvY2spOworCisJaWYgKHJfY2IgJiAoRUhDQV9QQUdFU0laRS0xKSkgeworCQllaGNhX2dlbl9lcnIoInJlc3BvbnNlIGJsb2NrIG5vdCBwYWdlIGFsaWduZWQiKTsKKwkJcmV0dXJuIEhfUEFSQU1FVEVSOworCX0KKworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfUVVFUllfUE9SVCwKKwkJCQkgICAgICBhZGFwdGVyX2hhbmRsZS5oYW5kbGUsIC8qIHI0ICovCisJCQkJICAgICAgcG9ydF9pZCwJICAgICAgICAgICAgIC8qIHI1ICovCisJCQkJICAgICAgcl9jYiwJICAgICAgICAgICAgIC8qIHI2ICovCisJCQkJICAgICAgMCwgMCwgMCwgMCk7CisKKwlpZiAoZWhjYV9kZWJ1Z19sZXZlbCkKKwkJZWhjYV9kbXAocXVlcnlfcG9ydF9yZXNwb25zZV9ibG9jaywgNjQsICJyZXNwb25zZV9ibG9jayIpOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9xdWVyeV9oY2EoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICBzdHJ1Y3QgaGlwel9xdWVyeV9oY2EgKnF1ZXJ5X2hjYV9yYmxvY2spCit7CisJdTY0IHJfY2IgPSB2aXJ0X3RvX2FicyhxdWVyeV9oY2FfcmJsb2NrKTsKKworCWlmIChyX2NiICYgKEVIQ0FfUEFHRVNJWkUtMSkpIHsKKwkJZWhjYV9nZW5fZXJyKCJyZXNwb25zZV9ibG9jaz0lcCBub3QgcGFnZSBhbGlnbmVkIiwKKwkJCSAgICAgcXVlcnlfaGNhX3JibG9jayk7CisJCXJldHVybiBIX1BBUkFNRVRFUjsKKwl9CisKKwlyZXR1cm4gZWhjYV9wbHBhcl9oY2FsbF9ub3JldHMoSF9RVUVSWV9IQ0EsCisJCQkJICAgICAgIGFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgLyogcjQgKi8KKwkJCQkgICAgICAgcl9jYiwgICAgICAgICAgICAgICAgICAvKiByNSAqLworCQkJCSAgICAgICAwLCAwLCAwLCAwLCAwKTsKK30KKwordTY0IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICBjb25zdCB1OCBwYWdlc2l6ZSwKKwkJCSAgY29uc3QgdTggcXVldWVfdHlwZSwKKwkJCSAgY29uc3QgdTY0IHJlc291cmNlX2hhbmRsZSwKKwkJCSAgY29uc3QgdTY0IGxvZ2ljYWxfYWRkcmVzc19vZl9wYWdlLAorCQkJICB1NjQgY291bnQpCit7CisJcmV0dXJuIGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVHSVNURVJfUlBBR0VTLAorCQkJCSAgICAgICBhZGFwdGVyX2hhbmRsZS5oYW5kbGUsICAgICAgLyogcjQgICovCisJCQkJICAgICAgIHF1ZXVlX3R5cGUgfCBwYWdlc2l6ZSA8PCA4LCAvKiByNSAgKi8KKwkJCQkgICAgICAgcmVzb3VyY2VfaGFuZGxlLAkgICAgICAgICAgIC8qIHI2ICAqLworCQkJCSAgICAgICBsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSwgICAgLyogcjcgICovCisJCQkJICAgICAgIGNvdW50LAkgICAgICAgICAgICAgICAgICAgLyogcjggICovCisJCQkJICAgICAgIDAsIDApOworfQorCit1NjQgaGlwel9oX3JlZ2lzdGVyX3JwYWdlX2VxKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfZXFfaGFuZGxlIGVxX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoY2FfcGZlcSAqcGZlcSwKKwkJCSAgICAgY29uc3QgdTggcGFnZXNpemUsCisJCQkgICAgIGNvbnN0IHU4IHF1ZXVlX3R5cGUsCisJCQkgICAgIGNvbnN0IHU2NCBsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSwKKwkJCSAgICAgY29uc3QgdTY0IGNvdW50KQoreworCWlmIChjb3VudCAhPSAxKSB7CisJCWVoY2FfZ2VuX2VycigiUHBhZ2UgY291bnRlcj0lbHgiLCBjb3VudCk7CisJCXJldHVybiBIX1BBUkFNRVRFUjsKKwl9CisJcmV0dXJuIGhpcHpfaF9yZWdpc3Rlcl9ycGFnZShhZGFwdGVyX2hhbmRsZSwKKwkJCQkgICAgIHBhZ2VzaXplLAorCQkJCSAgICAgcXVldWVfdHlwZSwKKwkJCQkgICAgIGVxX2hhbmRsZS5oYW5kbGUsCisJCQkJICAgICBsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSwgY291bnQpOworfQorCit1NjQgaGlwel9oX3F1ZXJ5X2ludF9zdGF0ZShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgdTMyIGlzdCkKK3sKKwl1NjQgcmV0OworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfUVVFUllfSU5UX1NUQVRFLAorCQkJCSAgICAgIGFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgLyogcjQgKi8KKwkJCQkgICAgICBpc3QsICAgICAgICAgICAgICAgICAgIC8qIHI1ICovCisJCQkJICAgICAgMCwgMCwgMCwgMCwgMCk7CisKKwlpZiAocmV0ICE9IEhfU1VDQ0VTUyAmJiByZXQgIT0gSF9CVVNZKQorCQllaGNhX2dlbl9lcnIoIkNvdWxkIG5vdCBxdWVyeSBpbnRlcnJ1cHQgc3RhdGUuIik7CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX3JlZ2lzdGVyX3JwYWdlX2NxKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfY3FfaGFuZGxlIGNxX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoY2FfcGZjcSAqcGZjcSwKKwkJCSAgICAgY29uc3QgdTggcGFnZXNpemUsCisJCQkgICAgIGNvbnN0IHU4IHF1ZXVlX3R5cGUsCisJCQkgICAgIGNvbnN0IHU2NCBsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSwKKwkJCSAgICAgY29uc3QgdTY0IGNvdW50LAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaF9nYWxwYSBnYWwpCit7CisJaWYgKGNvdW50ICE9IDEpIHsKKwkJZWhjYV9nZW5fZXJyKCJQYWdlIGNvdW50ZXI9JWx4IiwgY291bnQpOworCQlyZXR1cm4gSF9QQVJBTUVURVI7CisJfQorCisJcmV0dXJuIGhpcHpfaF9yZWdpc3Rlcl9ycGFnZShhZGFwdGVyX2hhbmRsZSwgcGFnZXNpemUsIHF1ZXVlX3R5cGUsCisJCQkJICAgICBjcV9oYW5kbGUuaGFuZGxlLCBsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSwKKwkJCQkgICAgIGNvdW50KTsKK30KKwordTY0IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9xcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCQkgICAgIHN0cnVjdCBlaGNhX3BmcXAgKnBmcXAsCisJCQkgICAgIGNvbnN0IHU4IHBhZ2VzaXplLAorCQkJICAgICBjb25zdCB1OCBxdWV1ZV90eXBlLAorCQkJICAgICBjb25zdCB1NjQgbG9naWNhbF9hZGRyZXNzX29mX3BhZ2UsCisJCQkgICAgIGNvbnN0IHU2NCBjb3VudCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGhfZ2FscGEgZ2FscGEpCit7CisJaWYgKGNvdW50ICE9IDEpIHsKKwkJZWhjYV9nZW5fZXJyKCJQYWdlIGNvdW50ZXI9JWx4IiwgY291bnQpOworCQlyZXR1cm4gSF9QQVJBTUVURVI7CisJfQorCisJcmV0dXJuIGhpcHpfaF9yZWdpc3Rlcl9ycGFnZShhZGFwdGVyX2hhbmRsZSxwYWdlc2l6ZSxxdWV1ZV90eXBlLAorCQkJCSAgICAgcXBfaGFuZGxlLmhhbmRsZSxsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSwKKwkJCQkgICAgIGNvdW50KTsKK30KKwordTY0IGhpcHpfaF9kaXNhYmxlX2FuZF9nZXRfd3FlKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlwel9xcF9oYW5kbGUgcXBfaGFuZGxlLAorCQkJICAgICAgIHN0cnVjdCBlaGNhX3BmcXAgKnBmcXAsCisJCQkgICAgICAgdm9pZCAqKmxvZ19hZGRyX25leHRfc3Ffd3FlMnByb2Nlc3NlZCwKKwkJCSAgICAgICB2b2lkICoqbG9nX2FkZHJfbmV4dF9ycV93cWUycHJvY2Vzc2VkLAorCQkJICAgICAgIGludCBkaXNfYW5kX2dldF9mdW5jdGlvbl9jb2RlKQoreworCXU2NCByZXQ7CisJdTY0IG91dHNbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCisJcmV0ID0gZWhjYV9wbHBhcl9oY2FsbDkoSF9ESVNBQkxFX0FORF9HRVRDLCBvdXRzLAorCQkJCWFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgICAgIC8qIHI0ICovCisJCQkJZGlzX2FuZF9nZXRfZnVuY3Rpb25fY29kZSwgLyogcjUgKi8KKwkJCQlxcF9oYW5kbGUuaGFuZGxlLAkgICAvKiByNiAqLworCQkJCTAsIDAsIDAsIDAsIDAsIDApOworCWlmIChsb2dfYWRkcl9uZXh0X3NxX3dxZTJwcm9jZXNzZWQpCisJCSpsb2dfYWRkcl9uZXh0X3NxX3dxZTJwcm9jZXNzZWQgPSAodm9pZCopb3V0c1swXTsKKwlpZiAobG9nX2FkZHJfbmV4dF9ycV93cWUycHJvY2Vzc2VkKQorCQkqbG9nX2FkZHJfbmV4dF9ycV93cWUycHJvY2Vzc2VkID0gKHZvaWQqKW91dHNbMV07CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX21vZGlmeV9xcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfcXBfaGFuZGxlIHFwX2hhbmRsZSwKKwkJICAgICBzdHJ1Y3QgZWhjYV9wZnFwICpwZnFwLAorCQkgICAgIGNvbnN0IHU2NCB1cGRhdGVfbWFzaywKKwkJICAgICBzdHJ1Y3QgaGNwX21vZGlmeV9xcF9jb250cm9sX2Jsb2NrICptcXBjYiwKKwkJICAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwpCit7CisJdTY0IHJldDsKKwl1NjQgb3V0c1tQTFBBUl9IQ0FMTDlfQlVGU0laRV07CisJcmV0ID0gZWhjYV9wbHBhcl9oY2FsbDkoSF9NT0RJRllfUVAsIG91dHMsCisJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAvKiByNCAqLworCQkJCXFwX2hhbmRsZS5oYW5kbGUsICAgICAgLyogcjUgKi8KKwkJCQl1cGRhdGVfbWFzaywJICAgICAgIC8qIHI2ICovCisJCQkJdmlydF90b19hYnMobXFwY2IpLCAgICAvKiByNyAqLworCQkJCTAsIDAsIDAsIDAsIDApOworCisJaWYgKHJldCA9PSBIX05PVF9FTk9VR0hfUkVTT1VSQ0VTKQorCQllaGNhX2dlbl9lcnIoIkluc3VmZmljaWVudCByZXNvdXJjZXMgcmV0PSVseCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX3F1ZXJ5X3FwKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCSAgICBzdHJ1Y3QgZWhjYV9wZnFwICpwZnFwLAorCQkgICAgc3RydWN0IGhjcF9tb2RpZnlfcXBfY29udHJvbF9ibG9jayAqcXFwY2IsCisJCSAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwpCit7CisJcmV0dXJuIGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfUVVFUllfUVAsCisJCQkJICAgICAgIGFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgLyogcjQgKi8KKwkJCQkgICAgICAgcXBfaGFuZGxlLmhhbmRsZSwgICAgICAvKiByNSAqLworCQkJCSAgICAgICB2aXJ0X3RvX2FicyhxcXBjYiksICAgIC8qIHI2ICovCisJCQkJICAgICAgIDAsIDAsIDAsIDApOworfQorCit1NjQgaGlwel9oX2Rlc3Ryb3lfcXAoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgc3RydWN0IGVoY2FfcXAgKnFwKQoreworCXU2NCByZXQ7CisJdTY0IG91dHNbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCisJcmV0ID0gaGNwX2dhbHBhc19kdG9yKCZxcC0+Z2FscGFzKTsKKwlpZiAocmV0KSB7CisJCWVoY2FfZ2VuX2VycigiQ291bGQgbm90IGRlc3RydWN0IHFwLT5nYWxwYXMiKTsKKwkJcmV0dXJuIEhfUkVTT1VSQ0U7CisJfQorCXJldCA9IGVoY2FfcGxwYXJfaGNhbGw5KEhfRElTQUJMRV9BTkRfR0VUQywgb3V0cywKKwkJCQlhZGFwdGVyX2hhbmRsZS5oYW5kbGUsICAgICAvKiByNCAqLworCQkJCS8qIGZ1bmN0aW9uIGNvZGUgKi8KKwkJCQkxLAkgICAgICAgICAgICAgICAgICAgLyogcjUgKi8KKwkJCQlxcC0+aXB6X3FwX2hhbmRsZS5oYW5kbGUsICAvKiByNiAqLworCQkJCTAsIDAsIDAsIDAsIDAsIDApOworCWlmIChyZXQgPT0gSF9IQVJEV0FSRSkKKwkJZWhjYV9nZW5fZXJyKCJIQ0Egbm90IG9wZXJhdGlvbmFsLiByZXQ9JWx4IiwgcmV0KTsKKworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfRlJFRV9SRVNPVVJDRSwKKwkJCQkgICAgICBhZGFwdGVyX2hhbmRsZS5oYW5kbGUsICAgICAvKiByNCAqLworCQkJCSAgICAgIHFwLT5pcHpfcXBfaGFuZGxlLmhhbmRsZSwgIC8qIHI1ICovCisJCQkJICAgICAgMCwgMCwgMCwgMCwgMCk7CisKKwlpZiAocmV0ID09IEhfUkVTT1VSQ0UpCisJCWVoY2FfZ2VuX2VycigiUmVzb3VyY2Ugc3RpbGwgaW4gdXNlLiByZXQ9JWx4IiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3U2NCBoaXB6X2hfZGVmaW5lX2FxcDAoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHpfcXBfaGFuZGxlIHFwX2hhbmRsZSwKKwkJICAgICAgIHN0cnVjdCBoX2dhbHBhIGdhbCwKKwkJICAgICAgIHUzMiBwb3J0KQoreworCXJldHVybiBlaGNhX3BscGFyX2hjYWxsX25vcmV0cyhIX0RFRklORV9BUVAwLAorCQkJCSAgICAgICBhZGFwdGVyX2hhbmRsZS5oYW5kbGUsIC8qIHI0ICovCisJCQkJICAgICAgIHFwX2hhbmRsZS5oYW5kbGUsICAgICAgLyogcjUgKi8KKwkJCQkgICAgICAgcG9ydCwgICAgICAgICAgICAgICAgICAvKiByNiAqLworCQkJCSAgICAgICAwLCAwLCAwLCAwKTsKK30KKwordTY0IGhpcHpfaF9kZWZpbmVfYXFwMShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlwel9xcF9oYW5kbGUgcXBfaGFuZGxlLAorCQkgICAgICAgc3RydWN0IGhfZ2FscGEgZ2FsLAorCQkgICAgICAgdTMyIHBvcnQsIHUzMiAqIHBtYV9xcF9uciwKKwkJICAgICAgIHUzMiAqIGJtYV9xcF9ucikKK3sKKwl1NjQgcmV0OworCXU2NCBvdXRzW1BMUEFSX0hDQUxMOV9CVUZTSVpFXTsKKworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGw5KEhfREVGSU5FX0FRUDEsIG91dHMsCisJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAvKiByNCAqLworCQkJCXFwX2hhbmRsZS5oYW5kbGUsICAgICAgLyogcjUgKi8KKwkJCQlwb3J0LAkgICAgICAgICAgICAgICAvKiByNiAqLworCQkJCTAsIDAsIDAsIDAsIDAsIDApOworCSpwbWFfcXBfbnIgPSAodTMyKW91dHNbMF07CisJKmJtYV9xcF9uciA9ICh1MzIpb3V0c1sxXTsKKworCWlmIChyZXQgPT0gSF9BTElBU19FWElTVCkKKwkJZWhjYV9nZW5fZXJyKCJBUVAxIGFscmVhZHkgZXhpc3RzLiByZXQ9JWx4IiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3U2NCBoaXB6X2hfYXR0YWNoX21jcXAoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHpfcXBfaGFuZGxlIHFwX2hhbmRsZSwKKwkJICAgICAgIHN0cnVjdCBoX2dhbHBhIGdhbCwKKwkJICAgICAgIHUxNiBtY2dfZGxpZCwKKwkJICAgICAgIHU2NCBzdWJuZXRfcHJlZml4LCB1NjQgaW50ZXJmYWNlX2lkKQoreworCXU2NCByZXQ7CisKKwlyZXQgPSBlaGNhX3BscGFyX2hjYWxsX25vcmV0cyhIX0FUVEFDSF9NQ1FQLAorCQkJCSAgICAgIGFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgIC8qIHI0ICovCisJCQkJICAgICAgcXBfaGFuZGxlLmhhbmRsZSwgICAgICAgLyogcjUgKi8KKwkJCQkgICAgICBtY2dfZGxpZCwgICAgICAgICAgICAgICAvKiByNiAqLworCQkJCSAgICAgIGludGVyZmFjZV9pZCwgICAgICAgICAgIC8qIHI3ICovCisJCQkJICAgICAgc3VibmV0X3ByZWZpeCwgICAgICAgICAgLyogcjggKi8KKwkJCQkgICAgICAwLCAwKTsKKworCWlmIChyZXQgPT0gSF9OT1RfRU5PVUdIX1JFU09VUkNFUykKKwkJZWhjYV9nZW5fZXJyKCJOb3QgZW5vdWdoIHJlc291cmNlcy4gcmV0PSVseCIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX2RldGFjaF9tY3FwKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCSAgICAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwsCisJCSAgICAgICB1MTYgbWNnX2RsaWQsCisJCSAgICAgICB1NjQgc3VibmV0X3ByZWZpeCwgdTY0IGludGVyZmFjZV9pZCkKK3sKKwlyZXR1cm4gZWhjYV9wbHBhcl9oY2FsbF9ub3JldHMoSF9ERVRBQ0hfTUNRUCwKKwkJCQkgICAgICAgYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAvKiByNCAqLworCQkJCSAgICAgICBxcF9oYW5kbGUuaGFuZGxlLCAgICAgIC8qIHI1ICovCisJCQkJICAgICAgIG1jZ19kbGlkLCAgICAgICAgICAgICAgLyogcjYgKi8KKwkJCQkgICAgICAgaW50ZXJmYWNlX2lkLCAgICAgICAgICAvKiByNyAqLworCQkJCSAgICAgICBzdWJuZXRfcHJlZml4LCAgICAgICAgIC8qIHI4ICovCisJCQkJICAgICAgIDAsIDApOworfQorCit1NjQgaGlwel9oX2Rlc3Ryb3lfY3EoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgc3RydWN0IGVoY2FfY3EgKmNxLAorCQkgICAgICB1OCBmb3JjZV9mbGFnKQoreworCXU2NCByZXQ7CisKKwlyZXQgPSBoY3BfZ2FscGFzX2R0b3IoJmNxLT5nYWxwYXMpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJDb3VsZCBub3QgZGVzdHJ1Y3QgY3AtPmdhbHBhcyIpOworCQlyZXR1cm4gSF9SRVNPVVJDRTsKKwl9CisKKwlyZXQgPSBlaGNhX3BscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfUkVTT1VSQ0UsCisJCQkJICAgICAgYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAgLyogcjQgKi8KKwkJCQkgICAgICBjcS0+aXB6X2NxX2hhbmRsZS5oYW5kbGUsICAvKiByNSAqLworCQkJCSAgICAgIGZvcmNlX2ZsYWcgIT0gMCA/IDFMIDogMEwsIC8qIHI2ICovCisJCQkJICAgICAgMCwgMCwgMCwgMCk7CisKKwlpZiAocmV0ID09IEhfUkVTT1VSQ0UpCisJCWVoY2FfZ2VuX2VycigiSF9GUkVFX1JFU09VUkNFIGZhaWxlZCByZXQ9JWx4ICIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX2Rlc3Ryb3lfZXEoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgc3RydWN0IGVoY2FfZXEgKmVxKQoreworCXU2NCByZXQ7CisKKwlyZXQgPSBoY3BfZ2FscGFzX2R0b3IoJmVxLT5nYWxwYXMpOworCWlmIChyZXQpIHsKKwkJZWhjYV9nZW5fZXJyKCJDb3VsZCBub3QgZGVzdHJ1Y3QgZXEtPmdhbHBhcyIpOworCQlyZXR1cm4gSF9SRVNPVVJDRTsKKwl9CisKKwlyZXQgPSBlaGNhX3BscGFyX2hjYWxsX25vcmV0cyhIX0ZSRUVfUkVTT1VSQ0UsCisJCQkJICAgICAgYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAgLyogcjQgKi8KKwkJCQkgICAgICBlcS0+aXB6X2VxX2hhbmRsZS5oYW5kbGUsICAvKiByNSAqLworCQkJCSAgICAgIDAsIDAsIDAsIDAsIDApOworCisJaWYgKHJldCA9PSBIX1JFU09VUkNFKQorCQllaGNhX2dlbl9lcnIoIlJlc291cmNlIGluIHVzZS4gcmV0PSVseCAiLCByZXQpOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9tcihjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tciAqbXIsCisJCQkgICAgIGNvbnN0IHU2NCB2YWRkciwKKwkJCSAgICAgY29uc3QgdTY0IGxlbmd0aCwKKwkJCSAgICAgY29uc3QgdTMyIGFjY2Vzc19jdHJsLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaXB6X3BkIHBkLAorCQkJICAgICBzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zICpvdXRwYXJtcykKK3sKKwl1NjQgcmV0OworCXU2NCBvdXRzW1BMUEFSX0hDQUxMOV9CVUZTSVpFXTsKKworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGw5KEhfQUxMT0NfUkVTT1VSQ0UsIG91dHMsCisJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAgICAgICAgIC8qIHI0ICovCisJCQkJNSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHI1ICovCisJCQkJdmFkZHIsICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHI2ICovCisJCQkJbGVuZ3RoLCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHI3ICovCisJCQkJKCgodTY0KWFjY2Vzc19jdHJsKSA8PCAzMlVMTCksICAgIC8qIHI4ICovCisJCQkJcGQudmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHI5ICovCisJCQkJMCwgMCwgMCk7CisJb3V0cGFybXMtPmhhbmRsZS5oYW5kbGUgPSBvdXRzWzBdOworCW91dHBhcm1zLT5sa2V5ID0gKHUzMilvdXRzWzJdOworCW91dHBhcm1zLT5ya2V5ID0gKHUzMilvdXRzWzNdOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9tcihjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tciAqbXIsCisJCQkgICAgIGNvbnN0IHU4IHBhZ2VzaXplLAorCQkJICAgICBjb25zdCB1OCBxdWV1ZV90eXBlLAorCQkJICAgICBjb25zdCB1NjQgbG9naWNhbF9hZGRyZXNzX29mX3BhZ2UsCisJCQkgICAgIGNvbnN0IHU2NCBjb3VudCkKK3sKKwl1NjQgcmV0OworCisJaWYgKChjb3VudCA+IDEpICYmIChsb2dpY2FsX2FkZHJlc3Nfb2ZfcGFnZSAmIChFSENBX1BBR0VTSVpFLTEpKSkgeworCQllaGNhX2dlbl9lcnIoImxvZ2ljYWxfYWRkcmVzc19vZl9wYWdlIG5vdCBvbiBhIDRrIGJvdW5kYXJ5ICIKKwkJCSAgICAgImFkYXB0ZXJfaGFuZGxlPSVseCBtcj0lcCBtcl9oYW5kbGU9JWx4ICIKKwkJCSAgICAgInBhZ2VzaXplPSV4IHF1ZXVlX3R5cGU9JXggIgorCQkJICAgICAibG9naWNhbF9hZGRyZXNzX29mX3BhZ2U9JWx4IGNvdW50PSVseCIsCisJCQkgICAgIGFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgbXIsCisJCQkgICAgIG1yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwgcGFnZXNpemUsIHF1ZXVlX3R5cGUsCisJCQkgICAgIGxvZ2ljYWxfYWRkcmVzc19vZl9wYWdlLCBjb3VudCk7CisJCXJldCA9IEhfUEFSQU1FVEVSOworCX0gZWxzZQorCQlyZXQgPSBoaXB6X2hfcmVnaXN0ZXJfcnBhZ2UoYWRhcHRlcl9oYW5kbGUsIHBhZ2VzaXplLAorCQkJCQkgICAgcXVldWVfdHlwZSwKKwkJCQkJICAgIG1yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwKKwkJCQkJICAgIGxvZ2ljYWxfYWRkcmVzc19vZl9wYWdlLCBjb3VudCk7CisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9xdWVyeV9tcihjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgY29uc3Qgc3RydWN0IGVoY2FfbXIgKm1yLAorCQkgICAgc3RydWN0IGVoY2FfbXJfaGlwem91dF9wYXJtcyAqb3V0cGFybXMpCit7CisJdTY0IHJldDsKKwl1NjQgb3V0c1tQTFBBUl9IQ0FMTDlfQlVGU0laRV07CisKKwlyZXQgPSBlaGNhX3BscGFyX2hjYWxsOShIX1FVRVJZX01SLCBvdXRzLAorCQkJCWFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwgICAgIC8qIHI0ICovCisJCQkJbXItPmlwel9tcl9oYW5kbGUuaGFuZGxlLCAgLyogcjUgKi8KKwkJCQkwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlvdXRwYXJtcy0+bGVuID0gb3V0c1swXTsKKwlvdXRwYXJtcy0+dmFkZHIgPSBvdXRzWzFdOworCW91dHBhcm1zLT5hY2wgID0gb3V0c1s0XSA+PiAzMjsKKwlvdXRwYXJtcy0+bGtleSA9ICh1MzIpKG91dHNbNV0gPj4gMzIpOworCW91dHBhcm1zLT5ya2V5ID0gKHUzMikob3V0c1s1XSAmICgweGZmZmZmZmZmKSk7CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX2ZyZWVfcmVzb3VyY2VfbXIoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tciAqbXIpCit7CisJcmV0dXJuIGVoY2FfcGxwYXJfaGNhbGxfbm9yZXRzKEhfRlJFRV9SRVNPVVJDRSwKKwkJCQkgICAgICAgYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAvKiByNCAqLworCQkJCSAgICAgICBtci0+aXB6X21yX2hhbmRsZS5oYW5kbGUsIC8qIHI1ICovCisJCQkJICAgICAgIDAsIDAsIDAsIDAsIDApOworfQorCit1NjQgaGlwel9oX3JlcmVnaXN0ZXJfcG1yKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgIGNvbnN0IHN0cnVjdCBlaGNhX21yICptciwKKwkJCSAgY29uc3QgdTY0IHZhZGRyX2luLAorCQkJICBjb25zdCB1NjQgbGVuZ3RoLAorCQkJICBjb25zdCB1MzIgYWNjZXNzX2N0cmwsCisJCQkgIGNvbnN0IHN0cnVjdCBpcHpfcGQgcGQsCisJCQkgIGNvbnN0IHU2NCBtcl9hZGRyX2NiLAorCQkJICBzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zICpvdXRwYXJtcykKK3sKKwl1NjQgcmV0OworCXU2NCBvdXRzW1BMUEFSX0hDQUxMOV9CVUZTSVpFXTsKKworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGw5KEhfUkVSRUdJU1RFUl9QTVIsIG91dHMsCisJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAvKiByNCAqLworCQkJCW1yLT5pcHpfbXJfaGFuZGxlLmhhbmRsZSwgLyogcjUgKi8KKwkJCQl2YWRkcl9pbiwJICAgICAgICAgIC8qIHI2ICovCisJCQkJbGVuZ3RoLCAgICAgICAgICAgICAgICAgICAvKiByNyAqLworCQkJCS8qIHI4ICovCisJCQkJKCgoKHU2NClhY2Nlc3NfY3RybCkgPDwgMzJVTEwpIHwgcGQudmFsdWUpLAorCQkJCW1yX2FkZHJfY2IsICAgICAgICAgICAgICAgLyogcjkgKi8KKwkJCQkwLCAwLCAwKTsKKwlvdXRwYXJtcy0+dmFkZHIgPSBvdXRzWzFdOworCW91dHBhcm1zLT5sa2V5ID0gKHUzMilvdXRzWzJdOworCW91dHBhcm1zLT5ya2V5ID0gKHUzMilvdXRzWzNdOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9yZWdpc3Rlcl9zbXIoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCWNvbnN0IHN0cnVjdCBlaGNhX21yICptciwKKwkJCWNvbnN0IHN0cnVjdCBlaGNhX21yICpvcmlnX21yLAorCQkJY29uc3QgdTY0IHZhZGRyX2luLAorCQkJY29uc3QgdTMyIGFjY2Vzc19jdHJsLAorCQkJY29uc3Qgc3RydWN0IGlwel9wZCBwZCwKKwkJCXN0cnVjdCBlaGNhX21yX2hpcHpvdXRfcGFybXMgKm91dHBhcm1zKQoreworCXU2NCByZXQ7CisJdTY0IG91dHNbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCisJcmV0ID0gZWhjYV9wbHBhcl9oY2FsbDkoSF9SRUdJU1RFUl9TTVIsIG91dHMsCisJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAgICAgICAgIC8qIHI0ICovCisJCQkJb3JpZ19tci0+aXB6X21yX2hhbmRsZS5oYW5kbGUsICAgIC8qIHI1ICovCisJCQkJdmFkZHJfaW4sICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHI2ICovCisJCQkJKCgodTY0KWFjY2Vzc19jdHJsKSA8PCAzMlVMTCksICAgIC8qIHI3ICovCisJCQkJcGQudmFsdWUsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHI4ICovCisJCQkJMCwgMCwgMCwgMCk7CisJb3V0cGFybXMtPmhhbmRsZS5oYW5kbGUgPSBvdXRzWzBdOworCW91dHBhcm1zLT5sa2V5ID0gKHUzMilvdXRzWzJdOworCW91dHBhcm1zLT5ya2V5ID0gKHUzMilvdXRzWzNdOworCisJcmV0dXJuIHJldDsKK30KKwordTY0IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9tdyhjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tdyAqbXcsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfcGQgcGQsCisJCQkgICAgIHN0cnVjdCBlaGNhX213X2hpcHpvdXRfcGFybXMgKm91dHBhcm1zKQoreworCXU2NCByZXQ7CisJdTY0IG91dHNbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCisJcmV0ID0gZWhjYV9wbHBhcl9oY2FsbDkoSF9BTExPQ19SRVNPVVJDRSwgb3V0cywKKwkJCQlhZGFwdGVyX2hhbmRsZS5oYW5kbGUsICAgICAgLyogcjQgKi8KKwkJCQk2LCAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcjUgKi8KKwkJCQlwZC52YWx1ZSwgICAgICAgICAgICAgICAgICAgLyogcjYgKi8KKwkJCQkwLCAwLCAwLCAwLCAwLCAwKTsKKwlvdXRwYXJtcy0+aGFuZGxlLmhhbmRsZSA9IG91dHNbMF07CisJb3V0cGFybXMtPnJrZXkgPSAodTMyKW91dHNbM107CisKKwlyZXR1cm4gcmV0OworfQorCit1NjQgaGlwel9oX3F1ZXJ5X213KGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tdyAqbXcsCisJCSAgICBzdHJ1Y3QgZWhjYV9td19oaXB6b3V0X3Bhcm1zICpvdXRwYXJtcykKK3sKKwl1NjQgcmV0OworCXU2NCBvdXRzW1BMUEFSX0hDQUxMOV9CVUZTSVpFXTsKKworCXJldCA9IGVoY2FfcGxwYXJfaGNhbGw5KEhfUVVFUllfTVcsIG91dHMsCisJCQkJYWRhcHRlcl9oYW5kbGUuaGFuZGxlLCAgICAvKiByNCAqLworCQkJCW13LT5pcHpfbXdfaGFuZGxlLmhhbmRsZSwgLyogcjUgKi8KKwkJCQkwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKwlvdXRwYXJtcy0+cmtleSA9ICh1MzIpb3V0c1szXTsKKworCXJldHVybiByZXQ7Cit9CisKK3U2NCBoaXB6X2hfZnJlZV9yZXNvdXJjZV9tdyhjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBlaGNhX213ICptdykKK3sKKwlyZXR1cm4gZWhjYV9wbHBhcl9oY2FsbF9ub3JldHMoSF9GUkVFX1JFU09VUkNFLAorCQkJCSAgICAgICBhZGFwdGVyX2hhbmRsZS5oYW5kbGUsICAgIC8qIHI0ICovCisJCQkJICAgICAgIG13LT5pcHpfbXdfaGFuZGxlLmhhbmRsZSwgLyogcjUgKi8KKwkJCQkgICAgICAgMCwgMCwgMCwgMCwgMCk7Cit9CisKK3U2NCBoaXB6X2hfZXJyb3JfZGF0YShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICBjb25zdCB1NjQgcmVzc291cmNlX2hhbmRsZSwKKwkJICAgICAgdm9pZCAqcmJsb2NrLAorCQkgICAgICB1bnNpZ25lZCBsb25nICpieXRlX2NvdW50KQoreworCXU2NCByX2NiID0gdmlydF90b19hYnMocmJsb2NrKTsKKworCWlmIChyX2NiICYgKEVIQ0FfUEFHRVNJWkUtMSkpIHsKKwkJZWhjYV9nZW5fZXJyKCJyYmxvY2sgbm90IHBhZ2UgYWxpZ25lZC4iKTsKKwkJcmV0dXJuIEhfUEFSQU1FVEVSOworCX0KKworCXJldHVybiBlaGNhX3BscGFyX2hjYWxsX25vcmV0cyhIX0VSUk9SX0RBVEEsCisJCQkJICAgICAgIGFkYXB0ZXJfaGFuZGxlLmhhbmRsZSwKKwkJCQkgICAgICAgcmVzc291cmNlX2hhbmRsZSwKKwkJCQkgICAgICAgcl9jYiwKKwkJCQkgICAgICAgMCwgMCwgMCwgMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9pZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4N2ViZDQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfaWYuaApAQCAtMCwwICsxLDI2MSBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgRmlybXdhcmUgSW5maW5pYmFuZCBJbnRlcmZhY2UgY29kZSBmb3IgUE9XRVIKKyAqCisgKiAgQXV0aG9yczogQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgSG9hbmctTmFtIE5ndXllbiA8aG5ndXllbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIEdlcmQgQmF5ZXIgPGdlcmQuYmF5ZXJAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBXYWxlcmkgRm9taW4gPGZvbWluQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fSENQX0lGX0hfXworI2RlZmluZSBfX0hDUF9JRl9IX18KKworI2luY2x1ZGUgImVoY2FfY2xhc3Nlcy5oIgorI2luY2x1ZGUgImVoY2FfdG9vbHMuaCIKKyNpbmNsdWRlICJoaXB6X2h3LmgiCisKKy8qCisgKiBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfZXEgYWxsb2NhdGVzIEVRIHJlc291cmNlcyBpbiBIVyBhbmQgRlcsIGluaXRhbGl6ZQorICogcmVzb3VyY2VzLCBjcmVhdGUgdGhlIGVtcHR5IEVRUFQgKHJpbmcpLgorICovCit1NjQgaGlwel9oX2FsbG9jX3Jlc291cmNlX2VxKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgIHN0cnVjdCBlaGNhX3BmZXEgKnBmZXEsCisJCQkgICAgIGNvbnN0IHUzMiBuZXFfY29udHJvbCwKKwkJCSAgICAgY29uc3QgdTMyIG51bWJlcl9vZl9lbnRyaWVzLAorCQkJICAgICBzdHJ1Y3QgaXB6X2VxX2hhbmRsZSAqZXFfaGFuZGxlLAorCQkJICAgICB1MzIgKiBhY3RfbnJfb2ZfZW50cmllcywKKwkJCSAgICAgdTMyICogYWN0X3BhZ2VzLAorCQkJICAgICB1MzIgKiBlcV9pc3QpOworCit1NjQgaGlwel9oX3Jlc2V0X2V2ZW50KGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICAgICBzdHJ1Y3QgaXB6X2VxX2hhbmRsZSBlcV9oYW5kbGUsCisJCSAgICAgICBjb25zdCB1NjQgZXZlbnRfbWFzayk7CisvKgorICogaGlwel9oX2FsbG9jYXRlX3Jlc291cmNlX2NxIGFsbG9jYXRlcyBDUSByZXNvdXJjZXMgaW4gSFcgYW5kIEZXLCBpbml0aWFsaXplCisgKiByZXNvdXJjZXMsIGNyZWF0ZSB0aGUgZW1wdHkgQ1FQVCAocmluZykuCisgKi8KK3U2NCBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfY3EoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoY2FfY3EgKmNxLAorCQkJICAgICBzdHJ1Y3QgZWhjYV9hbGxvY19jcV9wYXJtcyAqcGFyYW0pOworCisKKy8qCisgKiBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfcXAgYWxsb2NhdGVzIFFQIHJlc291cmNlcyBpbiBIVyBhbmQgRlcsCisgKiBpbml0aWFsaXplIHJlc291cmNlcywgY3JlYXRlIGVtcHR5IFFQUFRzICgyIHJpbmdzKS4KKyAqLwordTY0IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9xcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgZWhjYV9xcCAqcXAsCisJCQkgICAgIHN0cnVjdCBlaGNhX2FsbG9jX3FwX3Bhcm1zICpwYXJtcyk7CisKK3U2NCBoaXB6X2hfcXVlcnlfcG9ydChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICBjb25zdCB1OCBwb3J0X2lkLAorCQkgICAgICBzdHJ1Y3QgaGlwel9xdWVyeV9wb3J0ICpxdWVyeV9wb3J0X3Jlc3BvbnNlX2Jsb2NrKTsKKwordTY0IGhpcHpfaF9xdWVyeV9oY2EoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICBzdHJ1Y3QgaGlwel9xdWVyeV9oY2EgKnF1ZXJ5X2hjYV9yYmxvY2spOworCisvKgorICogaGlwel9oX3JlZ2lzdGVyX3JwYWdlIGludGVybmFsIGZ1bmN0aW9uIGluIGhjcF9pZi5oIGZvciBhbGwKKyAqIGhjcF9IX1JFR0lTVEVSX1JQQUdFIGNhbGxzLgorICovCit1NjQgaGlwel9oX3JlZ2lzdGVyX3JwYWdlKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgIGNvbnN0IHU4IHBhZ2VzaXplLAorCQkJICBjb25zdCB1OCBxdWV1ZV90eXBlLAorCQkJICBjb25zdCB1NjQgcmVzb3VyY2VfaGFuZGxlLAorCQkJICBjb25zdCB1NjQgbG9naWNhbF9hZGRyZXNzX29mX3BhZ2UsCisJCQkgIHU2NCBjb3VudCk7CisKK3U2NCBoaXB6X2hfcmVnaXN0ZXJfcnBhZ2VfZXEoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGlwel9lcV9oYW5kbGUgZXFfaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgZWhjYV9wZmVxICpwZmVxLAorCQkJICAgICBjb25zdCB1OCBwYWdlc2l6ZSwKKwkJCSAgICAgY29uc3QgdTggcXVldWVfdHlwZSwKKwkJCSAgICAgY29uc3QgdTY0IGxvZ2ljYWxfYWRkcmVzc19vZl9wYWdlLAorCQkJICAgICBjb25zdCB1NjQgY291bnQpOworCit1NjQgaGlwel9oX3F1ZXJ5X2ludF9zdGF0ZShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlCisJCQkgICBoY3BfYWRhcHRlcl9oYW5kbGUsCisJCQkgICB1MzIgaXN0KTsKKwordTY0IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9jcShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaXB6X2NxX2hhbmRsZSBjcV9oYW5kbGUsCisJCQkgICAgIHN0cnVjdCBlaGNhX3BmY3EgKnBmY3EsCisJCQkgICAgIGNvbnN0IHU4IHBhZ2VzaXplLAorCQkJICAgICBjb25zdCB1OCBxdWV1ZV90eXBlLAorCQkJICAgICBjb25zdCB1NjQgbG9naWNhbF9hZGRyZXNzX29mX3BhZ2UsCisJCQkgICAgIGNvbnN0IHU2NCBjb3VudCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGhfZ2FscGEgZ2FsKTsKKwordTY0IGhpcHpfaF9yZWdpc3Rlcl9ycGFnZV9xcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCQkgICAgIHN0cnVjdCBlaGNhX3BmcXAgKnBmcXAsCisJCQkgICAgIGNvbnN0IHU4IHBhZ2VzaXplLAorCQkJICAgICBjb25zdCB1OCBxdWV1ZV90eXBlLAorCQkJICAgICBjb25zdCB1NjQgbG9naWNhbF9hZGRyZXNzX29mX3BhZ2UsCisJCQkgICAgIGNvbnN0IHU2NCBjb3VudCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGhfZ2FscGEgZ2FscGEpOworCit1NjQgaGlwel9oX2Rpc2FibGVfYW5kX2dldF93cWUoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCQkgICAgICAgc3RydWN0IGVoY2FfcGZxcCAqcGZxcCwKKwkJCSAgICAgICB2b2lkICoqbG9nX2FkZHJfbmV4dF9zcV93cWVfdGJfcHJvY2Vzc2VkLAorCQkJICAgICAgIHZvaWQgKipsb2dfYWRkcl9uZXh0X3JxX3dxZV90Yl9wcm9jZXNzZWQsCisJCQkgICAgICAgaW50IGRpc19hbmRfZ2V0X2Z1bmN0aW9uX2NvZGUpOworZW51bSBoY2FsbF9zaWd0IHsKKwlIQ0FMTF9TSUdUX05PX0NRRSA9IDAsCisJSENBTExfU0lHVF9CWV9XUUUgPSAxLAorCUhDQUxMX1NJR1RfRVZFUlkgPSAyCit9OworCit1NjQgaGlwel9oX21vZGlmeV9xcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfcXBfaGFuZGxlIHFwX2hhbmRsZSwKKwkJICAgICBzdHJ1Y3QgZWhjYV9wZnFwICpwZnFwLAorCQkgICAgIGNvbnN0IHU2NCB1cGRhdGVfbWFzaywKKwkJICAgICBzdHJ1Y3QgaGNwX21vZGlmeV9xcF9jb250cm9sX2Jsb2NrICptcXBjYiwKKwkJICAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwpOworCit1NjQgaGlwel9oX3F1ZXJ5X3FwKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCSAgICBzdHJ1Y3QgZWhjYV9wZnFwICpwZnFwLAorCQkgICAgc3RydWN0IGhjcF9tb2RpZnlfcXBfY29udHJvbF9ibG9jayAqcXFwY2IsCisJCSAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwpOworCit1NjQgaGlwel9oX2Rlc3Ryb3lfcXAoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgc3RydWN0IGVoY2FfcXAgKnFwKTsKKwordTY0IGhpcHpfaF9kZWZpbmVfYXFwMChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlwel9xcF9oYW5kbGUgcXBfaGFuZGxlLAorCQkgICAgICAgc3RydWN0IGhfZ2FscGEgZ2FsLAorCQkgICAgICAgdTMyIHBvcnQpOworCit1NjQgaGlwel9oX2RlZmluZV9hcXAxKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCSAgICAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwsCisJCSAgICAgICB1MzIgcG9ydCwgdTMyICogcG1hX3FwX25yLAorCQkgICAgICAgdTMyICogYm1hX3FwX25yKTsKKwordTY0IGhpcHpfaF9hdHRhY2hfbWNxcChjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICAgY29uc3Qgc3RydWN0IGlwel9xcF9oYW5kbGUgcXBfaGFuZGxlLAorCQkgICAgICAgc3RydWN0IGhfZ2FscGEgZ2FsLAorCQkgICAgICAgdTE2IG1jZ19kbGlkLAorCQkgICAgICAgdTY0IHN1Ym5ldF9wcmVmaXgsIHU2NCBpbnRlcmZhY2VfaWQpOworCit1NjQgaGlwel9oX2RldGFjaF9tY3FwKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgaXB6X3FwX2hhbmRsZSBxcF9oYW5kbGUsCisJCSAgICAgICBzdHJ1Y3QgaF9nYWxwYSBnYWwsCisJCSAgICAgICB1MTYgbWNnX2RsaWQsCisJCSAgICAgICB1NjQgc3VibmV0X3ByZWZpeCwgdTY0IGludGVyZmFjZV9pZCk7CisKK3U2NCBoaXB6X2hfZGVzdHJveV9jcShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICBzdHJ1Y3QgZWhjYV9jcSAqY3EsCisJCSAgICAgIHU4IGZvcmNlX2ZsYWcpOworCit1NjQgaGlwel9oX2Rlc3Ryb3lfZXEoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgICAgc3RydWN0IGVoY2FfZXEgKmVxKTsKKworLyoKKyAqIGhpcHpfaF9hbGxvY19yZXNvdXJjZV9tciBhbGxvY2F0ZXMgTVIgcmVzb3VyY2VzIGluIEhXIGFuZCBGVywgaW5pdGlhbGl6ZQorICogcmVzb3VyY2VzLgorICovCit1NjQgaGlwel9oX2FsbG9jX3Jlc291cmNlX21yKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBlaGNhX21yICptciwKKwkJCSAgICAgY29uc3QgdTY0IHZhZGRyLAorCQkJICAgICBjb25zdCB1NjQgbGVuZ3RoLAorCQkJICAgICBjb25zdCB1MzIgYWNjZXNzX2N0cmwsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfcGQgcGQsCisJCQkgICAgIHN0cnVjdCBlaGNhX21yX2hpcHpvdXRfcGFybXMgKm91dHBhcm1zKTsKKworLyogaGlwel9oX3JlZ2lzdGVyX3JwYWdlX21yIHJlZ2lzdGVycyBNUiByZXNvdXJjZSBwYWdlcyBpbiBIVyBhbmQgRlcgKi8KK3U2NCBoaXB6X2hfcmVnaXN0ZXJfcnBhZ2VfbXIoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGVoY2FfbXIgKm1yLAorCQkJICAgICBjb25zdCB1OCBwYWdlc2l6ZSwKKwkJCSAgICAgY29uc3QgdTggcXVldWVfdHlwZSwKKwkJCSAgICAgY29uc3QgdTY0IGxvZ2ljYWxfYWRkcmVzc19vZl9wYWdlLAorCQkJICAgICBjb25zdCB1NjQgY291bnQpOworCisvKiBoaXB6X2hfcXVlcnlfbXIgcXVlcmllcyBNUiBpbiBIVyBhbmQgRlcgKi8KK3U2NCBoaXB6X2hfcXVlcnlfbXIoY29uc3Qgc3RydWN0IGlwel9hZGFwdGVyX2hhbmRsZSBhZGFwdGVyX2hhbmRsZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBlaGNhX21yICptciwKKwkJICAgIHN0cnVjdCBlaGNhX21yX2hpcHpvdXRfcGFybXMgKm91dHBhcm1zKTsKKworLyogaGlwel9oX2ZyZWVfcmVzb3VyY2VfbXIgZnJlZXMgTVIgcmVzb3VyY2VzIGluIEhXIGFuZCBGVyAqLwordTY0IGhpcHpfaF9mcmVlX3Jlc291cmNlX21yKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgY29uc3Qgc3RydWN0IGVoY2FfbXIgKm1yKTsKKworLyogaGlwel9oX3JlcmVnaXN0ZXJfcG1yIHJlcmVnaXN0ZXJzIE1SIGluIEhXIGFuZCBGVyAqLwordTY0IGhpcHpfaF9yZXJlZ2lzdGVyX3Btcihjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICBjb25zdCBzdHJ1Y3QgZWhjYV9tciAqbXIsCisJCQkgIGNvbnN0IHU2NCB2YWRkcl9pbiwKKwkJCSAgY29uc3QgdTY0IGxlbmd0aCwKKwkJCSAgY29uc3QgdTMyIGFjY2Vzc19jdHJsLAorCQkJICBjb25zdCBzdHJ1Y3QgaXB6X3BkIHBkLAorCQkJICBjb25zdCB1NjQgbXJfYWRkcl9jYiwKKwkJCSAgc3RydWN0IGVoY2FfbXJfaGlwem91dF9wYXJtcyAqb3V0cGFybXMpOworCisvKiBoaXB6X2hfcmVnaXN0ZXJfc21yIHJlZ2lzdGVyIHNoYXJlZCBNUiBpbiBIVyBhbmQgRlcgKi8KK3U2NCBoaXB6X2hfcmVnaXN0ZXJfc21yKGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCQljb25zdCBzdHJ1Y3QgZWhjYV9tciAqbXIsCisJCQljb25zdCBzdHJ1Y3QgZWhjYV9tciAqb3JpZ19tciwKKwkJCWNvbnN0IHU2NCB2YWRkcl9pbiwKKwkJCWNvbnN0IHUzMiBhY2Nlc3NfY3RybCwKKwkJCWNvbnN0IHN0cnVjdCBpcHpfcGQgcGQsCisJCQlzdHJ1Y3QgZWhjYV9tcl9oaXB6b3V0X3Bhcm1zICpvdXRwYXJtcyk7CisKKy8qCisgKiBoaXB6X2hfYWxsb2NfcmVzb3VyY2VfbXcgYWxsb2NhdGVzIE1XIHJlc291cmNlcyBpbiBIVyBhbmQgRlcsIGluaXRpYWxpemUKKyAqIHJlc291cmNlcy4KKyAqLwordTY0IGhpcHpfaF9hbGxvY19yZXNvdXJjZV9tdyhjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tdyAqbXcsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpcHpfcGQgcGQsCisJCQkgICAgIHN0cnVjdCBlaGNhX213X2hpcHpvdXRfcGFybXMgKm91dHBhcm1zKTsKKworLyogaGlwel9oX3F1ZXJ5X213IHF1ZXJpZXMgTVcgaW4gSFcgYW5kIEZXICovCit1NjQgaGlwel9oX3F1ZXJ5X213KGNvbnN0IHN0cnVjdCBpcHpfYWRhcHRlcl9oYW5kbGUgYWRhcHRlcl9oYW5kbGUsCisJCSAgICBjb25zdCBzdHJ1Y3QgZWhjYV9tdyAqbXcsCisJCSAgICBzdHJ1Y3QgZWhjYV9td19oaXB6b3V0X3Bhcm1zICpvdXRwYXJtcyk7CisKKy8qIGhpcHpfaF9mcmVlX3Jlc291cmNlX213IGZyZWVzIE1XIHJlc291cmNlcyBpbiBIVyBhbmQgRlcgKi8KK3U2NCBoaXB6X2hfZnJlZV9yZXNvdXJjZV9tdyhjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgIGNvbnN0IHN0cnVjdCBlaGNhX213ICptdyk7CisKK3U2NCBoaXB6X2hfZXJyb3JfZGF0YShjb25zdCBzdHJ1Y3QgaXB6X2FkYXB0ZXJfaGFuZGxlIGFkYXB0ZXJfaGFuZGxlLAorCQkgICAgICBjb25zdCB1NjQgcmVzc291cmNlX2hhbmRsZSwKKwkJICAgICAgdm9pZCAqcmJsb2NrLAorCQkgICAgICB1bnNpZ25lZCBsb25nICpieXRlX2NvdW50KTsKKworI2VuZGlmIC8qIF9fSENQX0lGX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX3BoeXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9waHlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIxYTQ3NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hjcF9waHlwLmMKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgIGxvYWQgc3RvcmUgYWJzdHJhY3Rpb24gZm9yIGVoY2EgcmVnaXN0ZXIgYWNjZXNzIHdpdGggdHJhY2luZworICoKKyAqICBBdXRob3JzOiBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiZWhjYV9jbGFzc2VzLmgiCisjaW5jbHVkZSAiaGlwel9ody5oIgorCitpbnQgaGNhbGxfbWFwX3BhZ2UodTY0IHBoeXNhZGRyLCB1NjQgKm1hcGFkZHIpCit7CisJKm1hcGFkZHIgPSAodTY0KShpb3JlbWFwKHBoeXNhZGRyLCBFSENBX1BBR0VTSVpFKSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBoY2FsbF91bm1hcF9wYWdlKHU2NCBtYXBhZGRyKQoreworCWlvdW5tYXAoKHZvbGF0aWxlIHZvaWQgX19pb21lbSopbWFwYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBoY3BfZ2FscGFzX2N0b3Ioc3RydWN0IGhfZ2FscGFzICpnYWxwYXMsCisJCSAgICB1NjQgcGFkZHJfa2VybmVsLCB1NjQgcGFkZHJfdXNlcikKK3sKKwlpbnQgcmV0ID0gaGNhbGxfbWFwX3BhZ2UocGFkZHJfa2VybmVsLCAmZ2FscGFzLT5rZXJuZWwuZndfaGFuZGxlKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ2FscGFzLT51c2VyLmZ3X2hhbmRsZSA9IHBhZGRyX3VzZXI7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGhjcF9nYWxwYXNfZHRvcihzdHJ1Y3QgaF9nYWxwYXMgKmdhbHBhcykKK3sKKwlpZiAoZ2FscGFzLT5rZXJuZWwuZndfaGFuZGxlKSB7CisJCWludCByZXQgPSBoY2FsbF91bm1hcF9wYWdlKGdhbHBhcy0+a2VybmVsLmZ3X2hhbmRsZSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCX0KKworCWdhbHBhcy0+dXNlci5md19oYW5kbGUgPSBnYWxwYXMtPmtlcm5lbC5md19oYW5kbGUgPSAwOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oY3BfcGh5cC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX3BoeXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MzA1YzJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGNwX3BoeXAuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogIElCTSBlU2VydmVyIGVIQ0EgSW5maW5pYmFuZCBkZXZpY2UgZHJpdmVyIGZvciBMaW51eCBvbiBQT1dFUgorICoKKyAqICBGaXJtd2FyZSBjYWxscworICoKKyAqICBBdXRob3JzOiBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBIb2FuZy1OYW0gTmd1eWVuIDxobmd1eWVuQGRlLmlibS5jb20+CisgKiAgICAgICAgICAgV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIEdlcmQgQmF5ZXIgPGdlcmQuYmF5ZXJAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19IQ1BfUEhZUF9IX18KKyNkZWZpbmUgX19IQ1BfUEhZUF9IX18KKworCisvKgorICogZUhDQSBwYWdlIChtYXBwZWQgaW50byBtZW1vcnkpCisgKiByZXNvdXJjZSB0byBhY2Nlc3MgZUhDQSByZWdpc3RlciBwYWdlcyBpbiBDUFUgYWRkcmVzcyBzcGFjZQorKi8KK3N0cnVjdCBoX2dhbHBhIHsKKwl1NjQgZndfaGFuZGxlOworCS8qIGZvciBwU2VyaWVzIHRoaXMgaXMgYSA2NGJpdCBtZW1vcnkgYWRkcmVzcyB3aGVyZQorCSAgIEkvTyBtZW1vcnkgaXMgbWFwcGVkIGludG8gQ1BVIGFkZHJlc3Mgc3BhY2UgKGt2KSAqLworfTsKKworLyoKKyAqIHJlc291cmNlIHRvIGFjY2VzcyBlSENBIGFkZHJlc3Mgc3BhY2UgcmVnaXN0ZXJzLCBhbGwgdHlwZXMKKyAqLworc3RydWN0IGhfZ2FscGFzIHsKKwl1MzIgcGlkOwkJLypQSUQgb2YgdXNlcnNwYWNlIGdhbHBhIGNoZWNraW5nICovCisJc3RydWN0IGhfZ2FscGEgdXNlcjsJLyogdXNlciBzcGFjZSBhY2Nlc3NpYmxlIHJlc291cmNlLAorCQkJCSAgIHNldCB0byAwIGlmIHVudXNlZCAqLworCXN0cnVjdCBoX2dhbHBhIGtlcm5lbDsJLyoga2VybmVsIHNwYWNlIGFjY2Vzc2libGUgcmVzb3VyY2UsCisJCQkJICAgc2V0IHRvIDAgaWYgdW51c2VkICovCit9OworCitzdGF0aWMgaW5saW5lIHU2NCBoaXB6X2dhbHBhX2xvYWQoc3RydWN0IGhfZ2FscGEgZ2FscGEsIHUzMiBvZmZzZXQpCit7CisJdTY0IGFkZHIgPSBnYWxwYS5md19oYW5kbGUgKyBvZmZzZXQ7CisJcmV0dXJuICoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKilhZGRyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGlwel9nYWxwYV9zdG9yZShzdHJ1Y3QgaF9nYWxwYSBnYWxwYSwgdTMyIG9mZnNldCwgdTY0IHZhbHVlKQoreworCXU2NCBhZGRyID0gZ2FscGEuZndfaGFuZGxlICsgb2Zmc2V0OworCSoodm9sYXRpbGUgdTY0IF9fZm9yY2UgKilhZGRyID0gdmFsdWU7Cit9CisKK2ludCBoY3BfZ2FscGFzX2N0b3Ioc3RydWN0IGhfZ2FscGFzICpnYWxwYXMsCisJCSAgICB1NjQgcGFkZHJfa2VybmVsLCB1NjQgcGFkZHJfdXNlcik7CisKK2ludCBoY3BfZ2FscGFzX2R0b3Ioc3RydWN0IGhfZ2FscGFzICpnYWxwYXMpOworCitpbnQgaGNhbGxfbWFwX3BhZ2UodTY0IHBoeXNhZGRyLCB1NjQgKiBtYXBhZGRyKTsKKworaW50IGhjYWxsX3VubWFwX3BhZ2UodTY0IG1hcGFkZHIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hpcHpfZm5zLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oaXB6X2Zucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWM5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oaXB6X2Zucy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIEhXIGFic3RyYWN0aW9uIHJlZ2lzdGVyIGZ1bmN0aW9ucworICoKKyAqICBBdXRob3JzOiBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBSZWluaGFyZCBFcm5zdCA8cmVybnN0QGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fSElQWl9GTlNfSF9fCisjZGVmaW5lIF9fSElQWl9GTlNfSF9fCisKKyNpbmNsdWRlICJlaGNhX2NsYXNzZXMuaCIKKyNpbmNsdWRlICJoaXB6X2h3LmgiCisKKyNpbmNsdWRlICJoaXB6X2Zuc19jb3JlLmgiCisKKyNkZWZpbmUgaGlwel9nYWxwYV9zdG9yZV9lcShnYWwsIG9mZnNldCwgdmFsdWUpIFwKKwloaXB6X2dhbHBhX3N0b3JlKGdhbCwgRVFURU1NX09GRlNFVChvZmZzZXQpLCB2YWx1ZSkKKworI2RlZmluZSBoaXB6X2dhbHBhX2xvYWRfZXEoZ2FsLCBvZmZzZXQpIFwKKwloaXB6X2dhbHBhX2xvYWQoZ2FsLCBFUVRFTU1fT0ZGU0VUKG9mZnNldCkpCisKKyNkZWZpbmUgaGlwel9nYWxwYV9zdG9yZV9xcGVkKGdhbCwgb2Zmc2V0LCB2YWx1ZSkgXAorCWhpcHpfZ2FscGFfc3RvcmUoZ2FsLCBRUEVETU1fT0ZGU0VUKG9mZnNldCksIHZhbHVlKQorCisjZGVmaW5lIGhpcHpfZ2FscGFfbG9hZF9xcGVkKGdhbCwgb2Zmc2V0KSBcCisJaGlwel9nYWxwYV9sb2FkKGdhbCwgUVBFRE1NX09GRlNFVChvZmZzZXQpKQorCisjZGVmaW5lIGhpcHpfZ2FscGFfc3RvcmVfbXJtdyhnYWwsIG9mZnNldCwgdmFsdWUpIFwKKwloaXB6X2dhbHBhX3N0b3JlKGdhbCwgTVJNV01NX09GRlNFVChvZmZzZXQpLCB2YWx1ZSkKKworI2RlZmluZSBoaXB6X2dhbHBhX2xvYWRfbXJtdyhnYWwsIG9mZnNldCkgXAorCWhpcHpfZ2FscGFfbG9hZChnYWwsIE1STVdNTV9PRkZTRVQob2Zmc2V0KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oaXB6X2Zuc19jb3JlLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oaXB6X2Zuc19jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4OThhMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2hpcHpfZm5zX2NvcmUuaApAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgSFcgYWJzdHJhY3Rpb24gcmVnaXN0ZXIgZnVuY3Rpb25zCisgKgorICogIEF1dGhvcnM6IENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhlaWtvIEogU2NoaWNrIDxzY2hpY2toakBkZS5pYm0uY29tPgorICogICAgICAgICAgIEhvYW5nLU5hbSBOZ3V5ZW4gPGhuZ3V5ZW5AZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBSZWluaGFyZCBFcm5zdCA8cmVybnN0QGRlLmlibS5jb20+CisgKgorICogIENvcHlyaWdodCAoYykgMjAwNSBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBzb3VyY2UgY29kZSBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGR1YWwgbGljZW5zZSBvZiBHUEwgdjIuMCBhbmQgT3BlbklCCisgKiAgQlNELgorICoKKyAqIE9wZW5JQiBCU0QgTGljZW5zZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCisgKiBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCisgKiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorICogSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9fSElQWl9GTlNfQ09SRV9IX18KKyNkZWZpbmUgX19ISVBaX0ZOU19DT1JFX0hfXworCisjaW5jbHVkZSAiaGNwX3BoeXAuaCIKKyNpbmNsdWRlICJoaXB6X2h3LmgiCisKKyNkZWZpbmUgaGlwel9nYWxwYV9zdG9yZV9jcShnYWwsIG9mZnNldCwgdmFsdWUpIFwKKwloaXB6X2dhbHBhX3N0b3JlKGdhbCwgQ1FURU1NX09GRlNFVChvZmZzZXQpLCB2YWx1ZSkKKworI2RlZmluZSBoaXB6X2dhbHBhX2xvYWRfY3EoZ2FsLCBvZmZzZXQpIFwKKwloaXB6X2dhbHBhX2xvYWQoZ2FsLCBDUVRFTU1fT0ZGU0VUKG9mZnNldCkpCisKKyNkZWZpbmUgaGlwel9nYWxwYV9zdG9yZV9xcChnYWwsb2Zmc2V0LCB2YWx1ZSkgXAorCWhpcHpfZ2FscGFfc3RvcmUoZ2FsLCBRUFRFTU1fT0ZGU0VUKG9mZnNldCksIHZhbHVlKQorI2RlZmluZSBoaXB6X2dhbHBhX2xvYWRfcXAoZ2FsLCBvZmZzZXQpIFwKKwloaXB6X2dhbHBhX2xvYWQoZ2FsLFFQVEVNTV9PRkZTRVQob2Zmc2V0KSkKKworc3RhdGljIGlubGluZSB2b2lkIGhpcHpfdXBkYXRlX3NxYShzdHJ1Y3QgZWhjYV9xcCAqcXAsIHUxNiBucl93cWVzKQoreworCS8qICByaW5naW5nIGRvb3JiZWxsIDotKSAqLworCWhpcHpfZ2FscGFfc3RvcmVfcXAocXAtPmdhbHBhcy5rZXJuZWwsIHFweF9zcWEsCisJCQkgICAgRUhDQV9CTUFTS19TRVQoUVBYX1NRQURERVIsIG5yX3dxZXMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhpcHpfdXBkYXRlX3JxYShzdHJ1Y3QgZWhjYV9xcCAqcXAsIHUxNiBucl93cWVzKQoreworCS8qICByaW5naW5nIGRvb3JiZWxsIDotKSAqLworCWhpcHpfZ2FscGFfc3RvcmVfcXAocXAtPmdhbHBhcy5rZXJuZWwsIHFweF9ycWEsCisJCQkgICAgRUhDQV9CTUFTS19TRVQoUVBYX1JRQURERVIsIG5yX3dxZXMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhpcHpfdXBkYXRlX2ZlY2Eoc3RydWN0IGVoY2FfY3EgKmNxLCB1MzIgbnJfY3FlcykKK3sKKwloaXB6X2dhbHBhX3N0b3JlX2NxKGNxLT5nYWxwYXMua2VybmVsLCBjcXhfZmVjYSwKKwkJCSAgICBFSENBX0JNQVNLX1NFVChDUVhfRkVDQURERVIsIG5yX2NxZXMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhpcHpfc2V0X2NxeF9uMChzdHJ1Y3QgZWhjYV9jcSAqY3EsIHUzMiB2YWx1ZSkKK3sKKwl1NjQgY3F4X24wX3JlZzsKKworCWhpcHpfZ2FscGFfc3RvcmVfY3EoY3EtPmdhbHBhcy5rZXJuZWwsIGNxeF9uMCwKKwkJCSAgICBFSENBX0JNQVNLX1NFVChDUVhfTjBfR0VORVJBVEVfU09MSUNJVEVEX0NPTVBfRVZFTlQsCisJCQkJCSAgIHZhbHVlKSk7CisJY3F4X24wX3JlZyA9IGhpcHpfZ2FscGFfbG9hZF9jcShjcS0+Z2FscGFzLmtlcm5lbCwgY3F4X24wKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGhpcHpfc2V0X2NxeF9uMShzdHJ1Y3QgZWhjYV9jcSAqY3EsIHUzMiB2YWx1ZSkKK3sKKwl1NjQgY3F4X24xX3JlZzsKKworCWhpcHpfZ2FscGFfc3RvcmVfY3EoY3EtPmdhbHBhcy5rZXJuZWwsIGNxeF9uMSwKKwkJCSAgICBFSENBX0JNQVNLX1NFVChDUVhfTjFfR0VORVJBVEVfQ09NUF9FVkVOVCwgdmFsdWUpKTsKKwljcXhfbjFfcmVnID0gaGlwel9nYWxwYV9sb2FkX2NxKGNxLT5nYWxwYXMua2VybmVsLCBjcXhfbjEpOworfQorCisjZW5kaWYgLyogX19ISVBaX0ZOQ19DT1JFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGlwel9ody5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvaGlwel9ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmYzkyYjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9oaXB6X2h3LmgKQEAgLTAsMCArMSwzODggQEAKKy8qCisgKiAgSUJNIGVTZXJ2ZXIgZUhDQSBJbmZpbmliYW5kIGRldmljZSBkcml2ZXIgZm9yIExpbnV4IG9uIFBPV0VSCisgKgorICogIGVIQ0EgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiAgQXV0aG9yczogV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgICAgIFJlaW5oYXJkIEVybnN0IDxyZXJuc3RAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19ISVBaX0hXX0hfXworI2RlZmluZSBfX0hJUFpfSFdfSF9fCisKKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisKKy8qIFFQIFRhYmxlIEVudHJ5IE1lbW9yeSBNYXAgKi8KK3N0cnVjdCBoaXB6X3FwdGVtbSB7CisJdTY0IHFweF9oY3I7CisJdTY0IHFweF9jOworCXU2NCBxcHhfaGVycjsKKwl1NjQgcXB4X2FlcjsKKy8qIDB4MjAqLworCXU2NCBxcHhfc3FhOworCXU2NCBxcHhfc3FjOworCXU2NCBxcHhfcnFhOworCXU2NCBxcHhfcnFjOworLyogMHg0MCovCisJdTY0IHFweF9zdDsKKwl1NjQgcXB4X3Btc3RhdGU7CisJdTY0IHFweF9wbWZhOworCXU2NCBxcHhfcGtleTsKKy8qIDB4NjAqLworCXU2NCBxcHhfcGtleWE7CisJdTY0IHFweF9wa2V5YjsKKwl1NjQgcXB4X3BrZXljOworCXU2NCBxcHhfcGtleWQ7CisvKiAweDgwKi8KKwl1NjQgcXB4X3FrZXk7CisJdTY0IHFweF9kcXA7CisJdTY0IHFweF9kbGlkcDsKKwl1NjQgcXB4X3BvcnRwOworLyogMHhhMCovCisJdTY0IHFweF9zbGlkcDsKKwl1NjQgcXB4X3NsaWRwcDsKKwl1NjQgcXB4X2RsaWRhOworCXU2NCBxcHhfcG9ydGE7CisvKiAweGMwKi8KKwl1NjQgcXB4X3NsaWRhOworCXU2NCBxcHhfc2xpZHBhOworCXU2NCBxcHhfc2x2bDsKKwl1NjQgcXB4X2lwZDsKKy8qIDB4ZTAqLworCXU2NCBxcHhfbXR1OworCXU2NCBxcHhfbGF0bzsKKwl1NjQgcXB4X3JsaW1pdDsKKwl1NjQgcXB4X3JucmxpbWl0OworLyogMHgxMDAqLworCXU2NCBxcHhfdDsKKwl1NjQgcXB4X3NxaHA7CisJdTY0IHFweF9zcXB0cDsKKwl1NjQgcXB4X25zcHNuOworLyogMHgxMjAqLworCXU2NCBxcHhfbnNwc25od207CisJdTY0IHJlc2VydmVkMTsKKwl1NjQgcXB4X3Nkc2k7CisJdTY0IHFweF9zZHNiYzsKKy8qIDB4MTQwKi8KKwl1NjQgcXB4X3Nxd3NpemU7CisJdTY0IHFweF9zcXd0czsKKwl1NjQgcXB4X2xzbjsKKwl1NjQgcXB4X25zc247CisvKiAweDE2MCAqLworCXU2NCBxcHhfbW9yOworCXU2NCBxcHhfY29yOworCXU2NCBxcHhfc3FzaXplOworCXU2NCBxcHhfZXJjOworLyogMHgxODAqLworCXU2NCBxcHhfcm5ycmM7CisJdTY0IHFweF9lcm5yd3Q7CisJdTY0IHFweF9ybnJyZXNwOworCXU2NCBxcHhfbG1zbmE7CisvKiAweDFhMCAqLworCXU2NCBxcHhfc3FocGM7CisJdTY0IHFweF9zcWNwdHA7CisJdTY0IHFweF9zaWd0OworCXU2NCBxcHhfd3FlY250OworLyogMHgxYzAqLworCXU2NCBxcHhfcnFocDsKKwl1NjQgcXB4X3JxcHRwOworCXU2NCBxcHhfcnFzaXplOworCXU2NCBxcHhfbnJyOworLyogMHgxZTAqLworCXU2NCBxcHhfcmRtYWM7CisJdTY0IHFweF9ucnBzbjsKKwl1NjQgcXB4X2xhcHNuOworCXU2NCBxcHhfbGNyOworLyogMHgyMDAqLworCXU2NCBxcHhfcndjOworCXU2NCBxcHhfcnd2YTsKKwl1NjQgcXB4X3Jkc2k7CisJdTY0IHFweF9yZHNiYzsKKy8qIDB4MjIwKi8KKwl1NjQgcXB4X3Jxd3NpemU7CisJdTY0IHFweF9jcm1zbjsKKwl1NjQgcXB4X3JkZDsKKwl1NjQgcXB4X2xhcnBzbjsKKy8qIDB4MjQwKi8KKwl1NjQgcXB4X3BkOworCXU2NCBxcHhfc2NxbjsKKwl1NjQgcXB4X3JjcW47CisJdTY0IHFweF9hZXFuOworLyogMHgyNjAqLworCXU2NCBxcHhfYWFlbG9nOworCXU2NCBxcHhfcmFtOworCXU2NCBxcHhfcmRtYXFlMDsKKwl1NjQgcXB4X3JkbWFxZTE7CisvKiAweDI4MCovCisJdTY0IHFweF9yZG1hcWUyOworCXU2NCBxcHhfcmRtYXFlMzsKKwl1NjQgcXB4X25ycHNuaHdtOworLyogMHgyOTgqLworCXU2NCByZXNlcnZlZFsoMHg0MDAgLSAweDI5OCkgLyA4XTsKKy8qIDB4NDAwIGV4dGVuZGVkIGRhdGEgKi8KKwl1NjQgcmVzZXJ2ZWRfZXh0WygweDUwMCAtIDB4NDAwKSAvIDhdOworLyogMHg1MDAgKi8KKwl1NjQgcmVzZXJ2ZWQyWygweDEwMDAgLSAweDUwMCkgLyA4XTsKKy8qIDB4MTAwMCAgICAgICovCit9OworCisjZGVmaW5lIFFQWF9TUUFEREVSIEVIQ0FfQk1BU0tfSUJNKDQ4LDYzKQorI2RlZmluZSBRUFhfUlFBRERFUiBFSENBX0JNQVNLX0lCTSg0OCw2MykKKworI2RlZmluZSBRUFRFTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBoaXB6X3FwdGVtbSx4KQorCisvKiBNUk1XUFQgRW50cnkgTWVtb3J5IE1hcCAqLworc3RydWN0IGhpcHpfbXJtd21tIHsKKwkvKiAweDAwICovCisJdTY0IG1yeF9oY3I7CisKKwl1NjQgbXJ4X2M7CisJdTY0IG1yeF9oZXJyOworCXU2NCBtcnhfYWVyOworCS8qIDB4MjAgKi8KKwl1NjQgbXJ4X3BwOworCXU2NCByZXNlcnZlZDE7CisJdTY0IHJlc2VydmVkMjsKKwl1NjQgcmVzZXJ2ZWQzOworCS8qIDB4NDAgKi8KKwl1NjQgcmVzZXJ2ZWQ0WygweDIwMCAtIDB4NDApIC8gOF07CisJLyogMHgyMDAgKi8KKwl1NjQgbXJ4X2N0bFs2NF07CisKK307CisKKyNkZWZpbmUgTVJNV01NX09GRlNFVCh4KSBvZmZzZXRvZihzdHJ1Y3QgaGlwel9tcm13bW0seCkKKworc3RydWN0IGhpcHpfcXBlZG1tIHsKKwkvKiAweDAwICovCisJdTY0IHJlc2VydmVkMFsoMHg0MDApIC8gOF07CisJLyogMHg0MDAgKi8KKwl1NjQgcXBlZHhfcGhoOworCXU2NCBxcGVkeF9wcHNncDsKKwkvKiAweDQxMCAqLworCXU2NCBxcGVkeF9wcHNndTsKKwl1NjQgcXBlZHhfcHBkZ3A7CisJLyogMHg0MjAgKi8KKwl1NjQgcXBlZHhfcHBkZ3U7CisJdTY0IHFwZWR4X2FwaDsKKwkvKiAweDQzMCAqLworCXU2NCBxcGVkeF9hcHNncDsKKwl1NjQgcXBlZHhfYXBzZ3U7CisJLyogMHg0NDAgKi8KKwl1NjQgcXBlZHhfYXBkZ3A7CisJdTY0IHFwZWR4X2FwZGd1OworCS8qIDB4NDUwICovCisJdTY0IHFwZWR4X2FwYXY7CisJdTY0IHFwZWR4X2Fwc2F2OworCS8qIDB4NDYwICAqLworCXU2NCBxcGVkeF9oY3I7CisJdTY0IHJlc2VydmVkMVs0XTsKKwkvKiAweDQ4OCAqLworCXU2NCBxcGVkeF9ycmwwOworCS8qIDB4NDkwICovCisJdTY0IHFwZWR4X3JycmtleTA7CisJdTY0IHFwZWR4X3JydmEwOworCS8qIDB4NGEwICovCisJdTY0IHJlc2VydmVkMjsKKwl1NjQgcXBlZHhfcnJsMTsKKwkvKiAweDRiMCAqLworCXU2NCBxcGVkeF9ycnJrZXkxOworCXU2NCBxcGVkeF9ycnZhMTsKKwkvKiAweDRjMCAqLworCXU2NCByZXNlcnZlZDM7CisJdTY0IHFwZWR4X3JybDI7CisJLyogMHg0ZDAgKi8KKwl1NjQgcXBlZHhfcnJya2V5MjsKKwl1NjQgcXBlZHhfcnJ2YTI7CisJLyogMHg0ZTAgKi8KKwl1NjQgcmVzZXJ2ZWQ0OworCXU2NCBxcGVkeF9ycmwzOworCS8qIDB4NGYwICovCisJdTY0IHFwZWR4X3JycmtleTM7CisJdTY0IHFwZWR4X3JydmEzOworfTsKKworI2RlZmluZSBRUEVETU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBoaXB6X3FwZWRtbSx4KQorCisvKiBDUSBUYWJsZSBFbnRyeSBNZW1vcnkgTWFwICovCitzdHJ1Y3QgaGlwel9jcXRlbW0geworCXU2NCBjcXhfaGNyOworCXU2NCBjcXhfYzsKKwl1NjQgY3F4X2hlcnI7CisJdTY0IGNxeF9hZXI7CisvKiAweDIwICAqLworCXU2NCBjcXhfcHRwOworCXU2NCBjcXhfdHA7CisJdTY0IGNxeF9mZWM7CisJdTY0IGNxeF9mZWNhOworLyogMHg0MCAgKi8KKwl1NjQgY3F4X2VwOworCXU2NCBjcXhfZXE7CisvKiAweDUwICAqLworCXU2NCByZXNlcnZlZDE7CisJdTY0IGNxeF9uMDsKKy8qIDB4NjAgICovCisJdTY0IGNxeF9uMTsKKwl1NjQgcmVzZXJ2ZWQyWygweDEwMDAgLSAweDYwKSAvIDhdOworLyogMHgxMDAwICovCit9OworCisjZGVmaW5lIENRWF9GRUNfQ1FFX0NOVCAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMzIsNjMpCisjZGVmaW5lIENRWF9GRUNBRERFUiAgICAgICAgICAgICAgRUhDQV9CTUFTS19JQk0oMzIsNjMpCisjZGVmaW5lIENRWF9OMF9HRU5FUkFURV9TT0xJQ0lURURfQ09NUF9FVkVOVCBFSENBX0JNQVNLX0lCTSgwLDApCisjZGVmaW5lIENRWF9OMV9HRU5FUkFURV9DT01QX0VWRU5UIEVIQ0FfQk1BU0tfSUJNKDAsMCkKKworI2RlZmluZSBDUVRFTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBoaXB6X2NxdGVtbSx4KQorCisvKiBFUSBUYWJsZSBFbnRyeSBNZW1vcnkgTWFwICovCitzdHJ1Y3QgaGlwel9lcXRlbW0geworCXU2NCBlcXhfaGNyOworCXU2NCBlcXhfYzsKKworCXU2NCBlcXhfaGVycjsKKwl1NjQgZXF4X2FlcjsKKy8qIDB4MjAgKi8KKwl1NjQgZXF4X3B0cDsKKwl1NjQgZXF4X3RwOworCXU2NCBlcXhfc3NiYTsKKwl1NjQgZXF4X3BzYmE7CisKKy8qIDB4NDAgKi8KKwl1NjQgZXF4X2NlYzsKKwl1NjQgZXF4X21lcWw7CisJdTY0IGVxeF94aXNiaTsKKwl1NjQgZXF4X3hpc2M7CisvKiAweDYwICovCisJdTY0IGVxeF9pdDsKKworfTsKKworI2RlZmluZSBFUVRFTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBoaXB6X2VxdGVtbSx4KQorCisvKiBhY2Nlc3MgY29udHJvbCBkZWZpbmVzIGZvciBNUi9NVyAqLworI2RlZmluZSBISVBaX0FDQ0VTU0NUUkxfTF9XUklURSAgMHgwMDgwMDAwMAorI2RlZmluZSBISVBaX0FDQ0VTU0NUUkxfUl9XUklURSAgMHgwMDQwMDAwMAorI2RlZmluZSBISVBaX0FDQ0VTU0NUUkxfUl9SRUFEICAgMHgwMDIwMDAwMAorI2RlZmluZSBISVBaX0FDQ0VTU0NUUkxfUl9BVE9NSUMgMHgwMDEwMDAwMAorI2RlZmluZSBISVBaX0FDQ0VTU0NUUkxfTVdfQklORCAgMHgwMDA4MDAwMAorCisvKiBxdWVyeSBoY2EgcmVzcG9uc2UgYmxvY2sgKi8KK3N0cnVjdCBoaXB6X3F1ZXJ5X2hjYSB7CisJdTMyIGN1cl9yZWxpYWJsZV9kZzsKKwl1MzIgY3VyX3FwOworCXUzMiBjdXJfY3E7CisJdTMyIGN1cl9lcTsKKwl1MzIgY3VyX21yOworCXUzMiBjdXJfbXc7CisJdTMyIGN1cl9lZV9jb250ZXh0OworCXUzMiBjdXJfbWNhc3RfZ3JwOworCXUzMiBjdXJfcXBfYXR0YWNoZWRfbWNhc3RfZ3JwOworCXUzMiByZXNlcnZlZDE7CisJdTMyIGN1cl9pcHY2X3FwOworCXUzMiBjdXJfZXRoX3FwOworCXUzMiBjdXJfaHBfbXI7CisJdTMyIHJlc2VydmVkMlszXTsKKwl1MzIgbWF4X3JkX2RvbWFpbjsKKwl1MzIgbWF4X3FwOworCXUzMiBtYXhfY3E7CisJdTMyIG1heF9lcTsKKwl1MzIgbWF4X21yOworCXUzMiBtYXhfaHBfbXI7CisJdTMyIG1heF9tdzsKKwl1MzIgbWF4X21yd3B0ZTsKKwl1MzIgbWF4X3NwZWNpYWxfbXJ3cHRlOworCXUzMiBtYXhfcmRfZWVfY29udGV4dDsKKwl1MzIgbWF4X21jYXN0X2dycDsKKwl1MzIgbWF4X3RvdGFsX21jYXN0X3FwX2F0dGFjaDsKKwl1MzIgbWF4X21jYXN0X3FwX2F0dGFjaDsKKwl1MzIgbWF4X3Jhd19pcHY2X3FwOworCXUzMiBtYXhfcmF3X2V0aHlfcXA7CisJdTMyIGludGVybmFsX2Nsb2NrX2ZyZXF1ZW5jeTsKKwl1MzIgbWF4X3BkOworCXUzMiBtYXhfYWg7CisJdTMyIG1heF9jcWU7CisJdTMyIG1heF93cWVzX3dxOworCXUzMiBtYXhfcGFydGl0aW9uczsKKwl1MzIgbWF4X3JyX2VlX2NvbnRleHQ7CisJdTMyIG1heF9ycl9xcDsKKwl1MzIgbWF4X3JyX2hjYTsKKwl1MzIgbWF4X2FjdF93cXNfZWVfY29udGV4dDsKKwl1MzIgbWF4X2FjdF93cXNfcXA7CisJdTMyIG1heF9zZ2U7CisJdTMyIG1heF9zZ2VfcmQ7CisJdTMyIG1lbW9yeV9wYWdlX3NpemVfc3VwcG9ydGVkOworCXU2NCBtYXhfbXJfc2l6ZTsKKwl1MzIgbG9jYWxfY2FfYWNrX2RlbGF5OworCXUzMiBudW1fcG9ydHM7CisJdTMyIHZlbmRvcl9pZDsKKwl1MzIgdmVuZG9yX3BhcnRfaWQ7CisJdTMyIGh3X3ZlcjsKKwl1NjQgbm9kZV9ndWlkOworCXU2NCBoY2FfY2FwX2luZGljYXRvcnM7CisJdTMyIGRhdGFfY291bnRlcl9yZWdpc3Rlcl9zaXplOworCXUzMiBtYXhfc2hhcmVkX3JxOworCXUzMiBtYXhfaXNuc19lcTsKKwl1MzIgbWF4X25lcTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisvKiBxdWVyeSBwb3J0IHJlc3BvbnNlIGJsb2NrICovCitzdHJ1Y3QgaGlwel9xdWVyeV9wb3J0IHsKKwl1MzIgc3RhdGU7CisJdTMyIGJhZF9wa2V5X2NudHI7CisJdTMyIGxtYzsKKwl1MzIgbGlkOworCXUzMiBzdWJuZXRfdGltZW91dDsKKwl1MzIgcWtleV92aW9sX2NudHI7CisJdTMyIHNtX3NsOworCXUzMiBzbV9saWQ7CisJdTMyIGNhcGFiaWxpdHlfbWFzazsKKwl1MzIgaW5pdF90eXBlX3JlcGx5OworCXUzMiBwa2V5X3RibF9sZW47CisJdTMyIGdpZF90YmxfbGVuOworCXU2NCBnaWRfcHJlZml4OworCXUzMiBwb3J0X25yOworCXUxNiBwa2V5X2VudHJpZXNbMTZdOworCXU4ICByZXNlcnZlZDFbMzJdOworCXUzMiB0cmVudF9zaXplOworCXUzMiB0cmJ1Zl9zaXplOworCXU2NCBtYXhfbXNnX3N6OworCXUzMiBtYXhfbXR1OworCXUzMiB2bF9jYXA7CisJdTggIHJlc2VydmVkMlsxOTAwXTsKKwl1NjQgZ3VpZF9lbnRyaWVzWzI1NV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9pcHpfcHRfZm4uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2lwel9wdF9mbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMjhmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9pcHpfcHRfZm4uYwpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgaW50ZXJuYWwgcXVldWUgaGFuZGxpbmcKKyAqCisgKiAgQXV0aG9yczogV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIFJlaW5oYXJkIEVybnN0IDxyZXJuc3RAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisjaW5jbHVkZSAiaXB6X3B0X2ZuLmgiCisKK3ZvaWQgKmlwel9xcGFnZWl0X2dldF9pbmMoc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0ID0gaXB6X3FlaXRfZ2V0KHF1ZXVlKTsKKwlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCArPSBxdWV1ZS0+cGFnZXNpemU7CisJaWYgKHF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID4gcXVldWUtPnF1ZXVlX2xlbmd0aCkgeworCQlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCAtPSBxdWV1ZS0+cGFnZXNpemU7CisJCXJldCA9IE5VTEw7CisJfQorCWlmICgoKHU2NClyZXQpICUgRUhDQV9QQUdFU0laRSkgeworCQllaGNhX2dlbl9lcnIoIkVSUk9SISEgbm90IGF0IFBBR0UtQm91bmRhcnkiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgKmlwel9xZWl0X2VxX2dldF9pbmMoc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0ID0gaXB6X3FlaXRfZ2V0KHF1ZXVlKTsKKwl1NjQgbGFzdF9lbnRyeV9pbl9xID0gcXVldWUtPnF1ZXVlX2xlbmd0aCAtIHF1ZXVlLT5xZV9zaXplOworCisJcXVldWUtPmN1cnJlbnRfcV9vZmZzZXQgKz0gcXVldWUtPnFlX3NpemU7CisJaWYgKHF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID4gbGFzdF9lbnRyeV9pbl9xKSB7CisJCXF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID0gMDsKKwkJcXVldWUtPnRvZ2dsZV9zdGF0ZSA9ICh+cXVldWUtPnRvZ2dsZV9zdGF0ZSkgJiAxOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludCBpcHpfcXVldWVfY3RvcihzdHJ1Y3QgaXB6X3F1ZXVlICpxdWV1ZSwKKwkJICAgY29uc3QgdTMyIG5yX29mX3BhZ2VzLAorCQkgICBjb25zdCB1MzIgcGFnZXNpemUsIGNvbnN0IHUzMiBxZV9zaXplLCBjb25zdCB1MzIgbnJfb2Zfc2cpCit7CisJaW50IHBhZ2VzX3Blcl9rcGFnZSA9IFBBR0VfU0laRSA+PiBFSENBX1BBR0VTSElGVDsKKwlpbnQgZjsKKworCWlmIChwYWdlc2l6ZSA+IFBBR0VfU0laRSkgeworCQllaGNhX2dlbl9lcnIoIkZBVEFMIEVSUk9SOiBwYWdlc2l6ZT0leCBpcyBncmVhdGVyICIKKwkJCSAgICAgInRoYW4ga2VybmVsIHBhZ2Ugc2l6ZSIsIHBhZ2VzaXplKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmICghcGFnZXNfcGVyX2twYWdlKSB7CisJCWVoY2FfZ2VuX2VycigiRkFUQUwgRVJST1I6IGludmFsaWQga2VybmVsIHBhZ2Ugc2l6ZS4gIgorCQkJICAgICAicGFnZXNfcGVyX2twYWdlPSV4IiwgcGFnZXNfcGVyX2twYWdlKTsKKwkJcmV0dXJuIDA7CisJfQorCXF1ZXVlLT5xdWV1ZV9sZW5ndGggPSBucl9vZl9wYWdlcyAqIHBhZ2VzaXplOworCXF1ZXVlLT5xdWV1ZV9wYWdlcyA9IHZtYWxsb2MobnJfb2ZfcGFnZXMgKiBzaXplb2Yodm9pZCAqKSk7CisJaWYgKCFxdWV1ZS0+cXVldWVfcGFnZXMpIHsKKwkJZWhjYV9nZW5fZXJyKCJFUlJPUiEhIGRpZG4ndCBnZXQgdGhlIG1lbW9yeSIpOworCQlyZXR1cm4gMDsKKwl9CisJbWVtc2V0KHF1ZXVlLT5xdWV1ZV9wYWdlcywgMCwgbnJfb2ZfcGFnZXMgKiBzaXplb2Yodm9pZCAqKSk7CisJLyoKKwkgKiBhbGxvY2F0ZSBwYWdlcyBmb3IgcXVldWU6CisJICogb3V0ZXIgbG9vcCBhbGxvY2F0ZXMgd2hvbGUga2VybmVsIHBhZ2VzIChwYWdlIGFsaWduZWQpIGFuZAorCSAqIGlubmVyIGxvb3AgZGl2aWRlcyBhIGtlcm5lbCBwYWdlIGludG8gc21hbGxlciBoY2EgcXVldWUgcGFnZXMKKwkgKi8KKwlmID0gMDsKKwl3aGlsZSAoZiA8IG5yX29mX3BhZ2VzKSB7CisJCXU4ICprcGFnZSA9ICh1OCopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpbnQgazsKKwkJaWYgKCFrcGFnZSkKKwkJCWdvdG8gaXB6X3F1ZXVlX2N0b3JfZXhpdDA7IC8qTk9NRU0qLworCQlmb3IgKGsgPSAwOyBrIDwgcGFnZXNfcGVyX2twYWdlICYmIGYgPCBucl9vZl9wYWdlczsgaysrKSB7CisJCQkocXVldWUtPnF1ZXVlX3BhZ2VzKVtmXSA9IChzdHJ1Y3QgaXB6X3BhZ2UgKilrcGFnZTsKKwkJCWtwYWdlICs9IEVIQ0FfUEFHRVNJWkU7CisJCQlmKys7CisJCX0KKwl9CisKKwlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCA9IDA7CisJcXVldWUtPnFlX3NpemUgPSBxZV9zaXplOworCXF1ZXVlLT5hY3RfbnJfb2Zfc2cgPSBucl9vZl9zZzsKKwlxdWV1ZS0+cGFnZXNpemUgPSBwYWdlc2l6ZTsKKwlxdWV1ZS0+dG9nZ2xlX3N0YXRlID0gMTsKKwlyZXR1cm4gMTsKKworIGlwel9xdWV1ZV9jdG9yX2V4aXQwOgorCWVoY2FfZ2VuX2VycigiQ291bGRuJ3QgZ2V0IGFsbG9jIHBhZ2VzIHF1ZXVlPSVwIGY9JXggbnJfb2ZfcGFnZXM9JXgiLAorCQkgICAgIHF1ZXVlLCBmLCBucl9vZl9wYWdlcyk7CisJZm9yIChmID0gMDsgZiA8IG5yX29mX3BhZ2VzOyBmICs9IHBhZ2VzX3Blcl9rcGFnZSkgeworCQlpZiAoIShxdWV1ZS0+cXVldWVfcGFnZXMpW2ZdKQorCQkJYnJlYWs7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykocXVldWUtPnF1ZXVlX3BhZ2VzKVtmXSk7CisJfQorCXJldHVybiAwOworfQorCitpbnQgaXB6X3F1ZXVlX2R0b3Ioc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpCit7CisJaW50IHBhZ2VzX3Blcl9rcGFnZSA9IFBBR0VfU0laRSA+PiBFSENBX1BBR0VTSElGVDsKKwlpbnQgZzsKKwlpbnQgbnJfcGFnZXM7CisKKwlpZiAoIXF1ZXVlIHx8ICFxdWV1ZS0+cXVldWVfcGFnZXMpIHsKKwkJZWhjYV9nZW5fZGJnKCJxdWV1ZSBvciBxdWV1ZV9wYWdlcyBpcyBOVUxMIik7CisJCXJldHVybiAwOworCX0KKwlucl9wYWdlcyA9IHF1ZXVlLT5xdWV1ZV9sZW5ndGggLyBxdWV1ZS0+cGFnZXNpemU7CisJZm9yIChnID0gMDsgZyA8IG5yX3BhZ2VzOyBnICs9IHBhZ2VzX3Blcl9rcGFnZSkKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKShxdWV1ZS0+cXVldWVfcGFnZXMpW2ddKTsKKwl2ZnJlZShxdWV1ZS0+cXVldWVfcGFnZXMpOworCisJcmV0dXJuIDE7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9pcHpfcHRfZm4uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2lwel9wdF9mbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmMTM1MDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9pcHpfcHRfZm4uaApAQCAtMCwwICsxLDI0NyBAQAorLyoKKyAqICBJQk0gZVNlcnZlciBlSENBIEluZmluaWJhbmQgZGV2aWNlIGRyaXZlciBmb3IgTGludXggb24gUE9XRVIKKyAqCisgKiAgaW50ZXJuYWwgcXVldWUgaGFuZGxpbmcKKyAqCisgKiAgQXV0aG9yczogV2FsZXJpIEZvbWluIDxmb21pbkBkZS5pYm0uY29tPgorICogICAgICAgICAgIFJlaW5oYXJkIEVybnN0IDxyZXJuc3RAZGUuaWJtLmNvbT4KKyAqICAgICAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZHVhbCBsaWNlbnNlIG9mIEdQTCB2Mi4wIGFuZCBPcGVuSUIKKyAqICBCU0QuCisgKgorICogT3BlbklCIEJTRCBMaWNlbnNlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSCisgKiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19JUFpfUFRfRk5fSF9fCisjZGVmaW5lIF9fSVBaX1BUX0ZOX0hfXworCisjZGVmaW5lIEVIQ0FfUEFHRVNISUZUICAgMTIKKyNkZWZpbmUgRUhDQV9QQUdFU0laRSAgIDQwOTZVTAorI2RlZmluZSBFSENBX1BBR0VNQVNLICAgKH4oRUhDQV9QQUdFU0laRS0xKSkKKyNkZWZpbmUgRUhDQV9QVF9FTlRSSUVTIDUxMlVMCisKKyNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCisjaW5jbHVkZSAiZWhjYV9xZXMuaCIKKworLyogc3RydWN0IGdlbmVyaWMgZWhjYSBwYWdlICovCitzdHJ1Y3QgaXB6X3BhZ2UgeworCXU4IGVudHJpZXNbRUhDQV9QQUdFU0laRV07Cit9OworCisvKiBzdHJ1Y3QgZ2VuZXJpYyBxdWV1ZSBpbiBsaW51eCBrZXJuZWwgdmlydHVhbCBtZW1vcnkgKGt2KSAqLworc3RydWN0IGlwel9xdWV1ZSB7CisJdTY0IGN1cnJlbnRfcV9vZmZzZXQ7CS8qIGN1cnJlbnQgcXVldWUgZW50cnkgKi8KKworCXN0cnVjdCBpcHpfcGFnZSAqKnF1ZXVlX3BhZ2VzOwkvKiBhcnJheSBvZiBwYWdlcyBiZWxvbmdpbmcgdG8gcXVldWUgKi8KKwl1MzIgcWVfc2l6ZTsJCS8qIHF1ZXVlIGVudHJ5IHNpemUgKi8KKwl1MzIgYWN0X25yX29mX3NnOworCXUzMiBxdWV1ZV9sZW5ndGg7CS8qIHF1ZXVlIGxlbmd0aCBhbGxvY2F0ZWQgaW4gYnl0ZXMgKi8KKwl1MzIgcGFnZXNpemU7CisJdTMyIHRvZ2dsZV9zdGF0ZTsJLyogdG9nZ2xlIGZsYWcgLSBwZXIgcGFnZSAqLworCXUzMiBkdW1teTM7CQkvKiA2NCBiaXQgYWxpZ25tZW50ICovCit9OworCisvKgorICogcmV0dXJuIGN1cnJlbnQgUXVldWUgRW50cnkgZm9yIGEgY2VydGFpbiBxX29mZnNldAorICogcmV0dXJucyBhZGRyZXNzIChrdikgb2YgUXVldWUgRW50cnkKKyAqLworc3RhdGljIGlubGluZSB2b2lkICppcHpfcWVpdF9jYWxjKHN0cnVjdCBpcHpfcXVldWUgKnF1ZXVlLCB1NjQgcV9vZmZzZXQpCit7CisJc3RydWN0IGlwel9wYWdlICpjdXJyZW50X3BhZ2U7CisJaWYgKHFfb2Zmc2V0ID49IHF1ZXVlLT5xdWV1ZV9sZW5ndGgpCisJCXJldHVybiBOVUxMOworCWN1cnJlbnRfcGFnZSA9IChxdWV1ZS0+cXVldWVfcGFnZXMpW3Ffb2Zmc2V0ID4+IEVIQ0FfUEFHRVNISUZUXTsKKwlyZXR1cm4gICZjdXJyZW50X3BhZ2UtPmVudHJpZXNbcV9vZmZzZXQgJiAoRUhDQV9QQUdFU0laRSAtIDEpXTsKK30KKworLyoKKyAqIHJldHVybiBjdXJyZW50IFF1ZXVlIEVudHJ5CisgKiByZXR1cm5zIGFkZHJlc3MgKGt2KSBvZiBRdWV1ZSBFbnRyeQorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmlwel9xZWl0X2dldChzdHJ1Y3QgaXB6X3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gaXB6X3FlaXRfY2FsYyhxdWV1ZSwgcXVldWUtPmN1cnJlbnRfcV9vZmZzZXQpOworfQorCisvKgorICogcmV0dXJuIGN1cnJlbnQgUXVldWUgUGFnZSAsIGluY3JlbWVudCBRdWV1ZSBQYWdlIGl0ZXJhdG9yIGZyb20KKyAqIHBhZ2UgdG8gcGFnZSBpbiBzdHJ1Y3QgaXB6X3F1ZXVlLCBsYXN0IGluY3JlbWVudCB3aWxsIHJldHVybiAwISBhbmQKKyAqIE5PVCB3cmFwCisgKiByZXR1cm5zIGFkZHJlc3MgKGt2KSBvZiBRdWV1ZSBQYWdlCisgKiB3YXJuaW5nIGRvbid0IHVzZSBpbiBwYXJhbGxlbCB3aXRoIGlwel9RRV9nZXRfaW5jKCkKKyAqLwordm9pZCAqaXB6X3FwYWdlaXRfZ2V0X2luYyhzdHJ1Y3QgaXB6X3F1ZXVlICpxdWV1ZSk7CisKKy8qCisgKiByZXR1cm4gY3VycmVudCBRdWV1ZSBFbnRyeSwgaW5jcmVtZW50IFF1ZXVlIEVudHJ5IGl0ZXJhdG9yIGJ5IG9uZQorICogc3RlcCBpbiBzdHJ1Y3QgaXB6X3F1ZXVlLCB3aWxsIHdyYXAgaW4gcmluZ2J1ZmZlcgorICogcmV0dXJucyBhZGRyZXNzIChrdikgb2YgUXVldWUgRW50cnkgQkVGT1JFIGluY3JlbWVudAorICogd2FybmluZyBkb24ndCB1c2UgaW4gcGFyYWxsZWwgd2l0aCBpcHpfcXBhZ2VpdF9nZXRfaW5jKCkKKyAqIHdhcm5pbmcgdW5wcmVkaWN0YWJsZSByZXN1bHRzIG1heSBvY2N1ciBpZiBzdGVwcz5hY3RfbnJfb2ZfcXVldWVfZW50cmllcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmlwel9xZWl0X2dldF9pbmMoc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0ID0gaXB6X3FlaXRfZ2V0KHF1ZXVlKTsKKwlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCArPSBxdWV1ZS0+cWVfc2l6ZTsKKwlpZiAocXVldWUtPmN1cnJlbnRfcV9vZmZzZXQgPj0gcXVldWUtPnF1ZXVlX2xlbmd0aCkgeworCQlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCA9IDA7CisJCS8qIHRvZ2dsZSB0aGUgdmFsaWQgZmxhZyAqLworCQlxdWV1ZS0+dG9nZ2xlX3N0YXRlID0gKH5xdWV1ZS0+dG9nZ2xlX3N0YXRlKSAmIDE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHJldHVybiBjdXJyZW50IFF1ZXVlIEVudHJ5LCBpbmNyZW1lbnQgUXVldWUgRW50cnkgaXRlcmF0b3IgYnkgb25lCisgKiBzdGVwIGluIHN0cnVjdCBpcHpfcXVldWUsIHdpbGwgd3JhcCBpbiByaW5nYnVmZmVyCisgKiByZXR1cm5zIGFkZHJlc3MgKGt2KSBvZiBRdWV1ZSBFbnRyeSBCRUZPUkUgaW5jcmVtZW50CisgKiByZXR1cm5zIDAgYW5kIGRvZXMgbm90IGluY3JlbWVudCwgaWYgd3JvbmcgdmFsaWQgc3RhdGUKKyAqIHdhcm5pbmcgZG9uJ3QgdXNlIGluIHBhcmFsbGVsIHdpdGggaXB6X3FwYWdlaXRfZ2V0X2luYygpCisgKiB3YXJuaW5nIHVucHJlZGljdGFibGUgcmVzdWx0cyBtYXkgb2NjdXIgaWYgc3RlcHM+YWN0X25yX29mX3F1ZXVlX2VudHJpZXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkICppcHpfcWVpdF9nZXRfaW5jX3ZhbGlkKHN0cnVjdCBpcHpfcXVldWUgKnF1ZXVlKQoreworCXN0cnVjdCBlaGNhX2NxZSAqY3FlID0gaXB6X3FlaXRfZ2V0KHF1ZXVlKTsKKwl1MzIgY3FlX2ZsYWdzID0gY3FlLT5jcWVfZmxhZ3M7CisKKwlpZiAoKGNxZV9mbGFncyA+PiA3KSAhPSAocXVldWUtPnRvZ2dsZV9zdGF0ZSAmIDEpKQorCQlyZXR1cm4gTlVMTDsKKworCWlwel9xZWl0X2dldF9pbmMocXVldWUpOworCXJldHVybiBjcWU7Cit9CisKKy8qCisgKiByZXR1cm5zIGFuZCByZXNldHMgUXVldWUgRW50cnkgaXRlcmF0b3IKKyAqIHJldHVybnMgYWRkcmVzcyAoa3YpIG9mIGZpcnN0IFF1ZXVlIEVudHJ5CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqaXB6X3FlaXRfcmVzZXQoc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpCit7CisJcXVldWUtPmN1cnJlbnRfcV9vZmZzZXQgPSAwOworCXJldHVybiBpcHpfcWVpdF9nZXQocXVldWUpOworfQorCisvKiBzdHJ1Y3QgZ2VuZXJpYyBwYWdlIHRhYmxlICovCitzdHJ1Y3QgaXB6X3B0IHsKKwl1NjQgZW50cmllc1tFSENBX1BUX0VOVFJJRVNdOworfTsKKworLyogc3RydWN0IHBhZ2UgdGFibGUgZm9yIGEgcXVldWUsIG9ubHkgdG8gYmUgdXNlZCBpbiBwZiAqLworc3RydWN0IGlwel9xcHQgeworCS8qIHF1ZXVlIHBhZ2UgdGFibGVzIChrdiksIHVzZSB1NjQgYmVjYXVzZSB3ZSBrbm93IHRoZSBlbGVtZW50IGxlbmd0aCAqLworCXU2NCAqcXB0czsKKwl1MzIgbl9xcHRzOworCXUzMiBuX3B0ZXM7ICAgICAgIC8qICBudW1iZXIgb2YgcGFnZSB0YWJsZSBlbnRyaWVzICovCisJdTY0ICpjdXJyZW50X3B0ZV9hZGRyOworfTsKKworLyoKKyAqIGNvbnN0cnVjdG9yIGZvciBhIGlwel9xdWV1ZV90LCBwbGFjZW1lbnQgbmV3IGZvciBpcHpfcXVldWVfdCwKKyAqIG5ldyBmb3IgYWxsIGRlcGVuZGVudCBkYXRhc3RydWN0b3JzCisgKiBhbGwgUVAgVGFibGVzIGFyZSB0aGUgc2FtZQorICogZmxvdzoKKyAqICAgIGFsbG9jYXRlK3BpbiBxdWV1ZQorICogc2VlIGlwel9xcHRfY3RvcigpCisgKiByZXR1cm5zIHRydWUgaWYgb2ssIGZhbHNlIGlmIG91dCBvZiBtZW1vcnkKKyAqLworaW50IGlwel9xdWV1ZV9jdG9yKHN0cnVjdCBpcHpfcXVldWUgKnF1ZXVlLCBjb25zdCB1MzIgbnJfb2ZfcGFnZXMsCisJCSAgIGNvbnN0IHUzMiBwYWdlc2l6ZSwgY29uc3QgdTMyIHFlX3NpemUsCisJCSAgIGNvbnN0IHUzMiBucl9vZl9zZyk7CisKKy8qCisgKiBkZXN0cnVjdG9yIGZvciBhIGlwel9xdWV1ZV90CisgKiAgLSMgZnJlZSBxdWV1ZQorICogIHNlZSBpcHpfcXVldWVfY3RvcigpCisgKiAgcmV0dXJucyB0cnVlIGlmIG9rLCBmYWxzZSBpZiBxdWV1ZSB3YXMgTlVMTC1wdHIgb2YgZnJlZSBmYWlsZWQKKyAqLworaW50IGlwel9xdWV1ZV9kdG9yKHN0cnVjdCBpcHpfcXVldWUgKnF1ZXVlKTsKKworLyoKKyAqIGNvbnN0cnVjdG9yIGZvciBhIGlwel9xcHRfdCwKKyAqIHBsYWNlbWVudCBuZXcgZm9yIHN0cnVjdCBpcHpfcXVldWUsIG5ldyBmb3IgYWxsIGRlcGVuZGVudCBkYXRhc3RydWN0b3JzCisgKiBhbGwgUVAgVGFibGVzIGFyZSB0aGUgc2FtZSwKKyAqIGZsb3c6CisgKiAtIyBhbGxvY2F0ZStwaW4gcXVldWUKKyAqIC0jIGluaXRpYWxpc2UgcHRjYgorICogLSMgYWxsb2NhdGUrcGluIFBUcworICogLSMgbGluayBQVHMgdG8gYSByaW5nLCBhY2NvcmRpbmcgdG8gSENBIEFyY2gsIHNldCBiaXQ2MiBpZCBuZWVkZWQKKyAqIC0jIHRoZSByaW5nIG11c3QgaGF2ZSByb29tIGZvciBleGFjdGx5IG5yX29mX1BURXMKKyAqIHNlZSBpcHpfcXB0X2N0b3IoKQorICovCit2b2lkIGlwel9xcHRfY3RvcihzdHJ1Y3QgaXB6X3FwdCAqcXB0LAorCQkgIGNvbnN0IHUzMiBucl9vZl9xZXMsCisJCSAgY29uc3QgdTMyIHBhZ2VzaXplLAorCQkgIGNvbnN0IHUzMiBxZV9zaXplLAorCQkgIGNvbnN0IHU4IGxvd2J5dGUsIGNvbnN0IHU4IHRvZ2dsZSwKKwkJICB1MzIgKiBhY3RfbnJfb2ZfUUVzLCB1MzIgKiBhY3RfbnJfb2ZfcGFnZXMpOworCisvKgorICogcmV0dXJuIGN1cnJlbnQgUXVldWUgRW50cnksIGluY3JlbWVudCBRdWV1ZSBFbnRyeSBpdGVyYXRvciBieSBvbmUKKyAqIHN0ZXAgaW4gc3RydWN0IGlwel9xdWV1ZSwgd2lsbCB3cmFwIGluIHJpbmdidWZmZXIKKyAqIHJldHVybnMgYWRkcmVzcyAoa3YpIG9mIFF1ZXVlIEVudHJ5IEJFRk9SRSBpbmNyZW1lbnQKKyAqIHdhcm5pbmcgZG9uJ3QgdXNlIGluIHBhcmFsbGVsIHdpdGggaXB6X3FwYWdlaXRfZ2V0X2luYygpCisgKiB3YXJuaW5nIHVucHJlZGljdGFibGUgcmVzdWx0cyBtYXkgb2NjdXIgaWYgc3RlcHM+YWN0X25yX29mX3F1ZXVlX2VudHJpZXMKKyAqIGZpeCBFUSBwYWdlIHByb2JsZW1zCisgKi8KK3ZvaWQgKmlwel9xZWl0X2VxX2dldF9pbmMoc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpOworCisvKgorICogcmV0dXJuIGN1cnJlbnQgRXZlbnQgUXVldWUgRW50cnksIGluY3JlbWVudCBRdWV1ZSBFbnRyeSBpdGVyYXRvcgorICogYnkgb25lIHN0ZXAgaW4gc3RydWN0IGlwel9xdWV1ZSBpZiB2YWxpZCwgd2lsbCB3cmFwIGluIHJpbmdidWZmZXIKKyAqIHJldHVybnMgYWRkcmVzcyAoa3YpIG9mIFF1ZXVlIEVudHJ5IEJFRk9SRSBpbmNyZW1lbnQKKyAqIHJldHVybnMgMCBhbmQgZG9lcyBub3QgaW5jcmVtZW50LCBpZiB3cm9uZyB2YWxpZCBzdGF0ZQorICogd2FybmluZyBkb24ndCB1c2UgaW4gcGFyYWxsZWwgd2l0aCBpcHpfcXVldWVfUVBhZ2VpdF9nZXRfaW5jKCkKKyAqIHdhcm5pbmcgdW5wcmVkaWN0YWJsZSByZXN1bHRzIG1heSBvY2N1ciBpZiBzdGVwcz5hY3RfbnJfb2ZfcXVldWVfZW50cmllcworICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmlwel9lcWl0X2VxX2dldF9pbmNfdmFsaWQoc3RydWN0IGlwel9xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0ID0gaXB6X3FlaXRfZ2V0KHF1ZXVlKTsKKwl1MzIgcWUgPSAqKHU4ICopIHJldDsKKwlpZiAoKHFlID4+IDcpICE9IChxdWV1ZS0+dG9nZ2xlX3N0YXRlICYgMSkpCisJCXJldHVybiBOVUxMOworCWlwel9xZWl0X2VxX2dldF9pbmMocXVldWUpOyAvKiB0aGlzIGlzIGEgZ29vZCBvbmUgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKiByZXR1cm5zIGFkZHJlc3MgKEdYKSBvZiBmaXJzdCBxdWV1ZSBlbnRyeSAqLworc3RhdGljIGlubGluZSB1NjQgaXB6X3FwdF9nZXRfZmlyc3RwYWdlKHN0cnVjdCBpcHpfcXB0ICpxcHQpCit7CisJcmV0dXJuIGJlNjRfdG9fY3B1KHFwdC0+cXB0c1swXSk7Cit9CisKKy8qIHJldHVybnMgYWRkcmVzcyAoa3YpIG9mIGZpcnN0IHBhZ2Ugb2YgcXVldWUgcGFnZSB0YWJsZSAqLworc3RhdGljIGlubGluZSB2b2lkICppcHpfcXB0X2dldF9xcHQoc3RydWN0IGlwel9xcHQgKnFwdCkKK3sKKwlyZXR1cm4gcXB0LT5xcHRzOworfQorCisjZW5kaWYJCQkJLyogX19JUFpfUFRfRk5fSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnCmluZGV4IDFkYjk0ODkuLjU3NGE2NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9LY29uZmlnCkBAIC0xLDE2ICsxLDkgQEAKLWNvbmZpZyBJUEFUSF9DT1JFCi0JdHJpc3RhdGUgIlFMb2dpYyBJbmZpbmlQYXRoIERyaXZlciIKLQlkZXBlbmRzIG9uIDY0QklUICYmIFBDSV9NU0kgJiYgTkVUCi0JLS0taGVscC0tLQotCVRoaXMgaXMgYSBsb3ctbGV2ZWwgZHJpdmVyIGZvciBRTG9naWMgSW5maW5pUGF0aCBob3N0IGNoYW5uZWwKLQlhZGFwdGVycyAoSENBcykgYmFzZWQgb24gdGhlIEhULTQwMCBhbmQgUEUtODAwIGNoaXBzLgotCiBjb25maWcgSU5GSU5JQkFORF9JUEFUSAotCXRyaXN0YXRlICJRTG9naWMgSW5maW5pUGF0aCBWZXJicyBEcml2ZXIiCi0JZGVwZW5kcyBvbiBJUEFUSF9DT1JFICYmIElORklOSUJBTkQKKwl0cmlzdGF0ZSAiUUxvZ2ljIEluZmluaVBhdGggRHJpdmVyIgorCWRlcGVuZHMgb24gUENJX01TSSAmJiA2NEJJVCAmJiBJTkZJTklCQU5ECiAJLS0taGVscC0tLQotCVRoaXMgaXMgYSBkcml2ZXIgdGhhdCBwcm92aWRlcyBJbmZpbmlCYW5kIHZlcmJzIHN1cHBvcnQgZm9yCi0JUUxvZ2ljIEluZmluaVBhdGggaG9zdCBjaGFubmVsIGFkYXB0ZXJzIChIQ0FzKS4gIFRoaXMKLQlhbGxvd3MgdGhlc2UgZGV2aWNlcyB0byBiZSB1c2VkIHdpdGggYm90aCBrZXJuZWwgdXBwZXIgbGV2ZWwKLQlwcm90b2NvbHMgc3VjaCBhcyBJUC1vdmVyLUluZmluaUJhbmQgYXMgd2VsbCBhcyB3aXRoIHVzZXJzcGFjZQotCWFwcGxpY2F0aW9ucyAoaW4gY29uanVuY3Rpb24gd2l0aCBJbmZpbmlCYW5kIHVzZXJzcGFjZSBhY2Nlc3MpLgorCVRoaXMgaXMgYSBkcml2ZXIgZm9yIFFMb2dpYyBJbmZpbmlQYXRoIGhvc3QgY2hhbm5lbCBhZGFwdGVycywKKwlpbmNsdWRpbmcgSW5maW5pQmFuZCB2ZXJicyBzdXBwb3J0LiAgVGhpcyBkcml2ZXIgYWxsb3dzIHRoZXNlCisJZGV2aWNlcyB0byBiZSB1c2VkIHdpdGggYm90aCBrZXJuZWwgdXBwZXIgbGV2ZWwgcHJvdG9jb2xzIHN1Y2gKKwlhcyBJUC1vdmVyLUluZmluaUJhbmQgYXMgd2VsbCBhcyB3aXRoIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMKKwkoaW4gY29uanVuY3Rpb24gd2l0aCBJbmZpbmlCYW5kIHVzZXJzcGFjZSBhY2Nlc3MpLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL01ha2VmaWxlCmluZGV4IGIwYmY3MjguLjVlMjljYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvTWFrZWZpbGUKQEAgLTEsMzYgKzEsMzUgQEAKIEVYVFJBX0NGTEFHUyArPSAtRElQQVRIX0lEU1RSPSciUUxvZ2ljIGtlcm5lbC5vcmcgZHJpdmVyIicgXAogCS1ESVBBVEhfS0VSTl9UWVBFPTAKIAotb2JqLSQoQ09ORklHX0lQQVRIX0NPUkUpICs9IGlwYXRoX2NvcmUubwogb2JqLSQoQ09ORklHX0lORklOSUJBTkRfSVBBVEgpICs9IGliX2lwYXRoLm8KIAotaXBhdGhfY29yZS15IDo9IFwKK2liX2lwYXRoLXkgOj0gXAorCWlwYXRoX2NxLm8gXAogCWlwYXRoX2RpYWcubyBcCiAJaXBhdGhfZHJpdmVyLm8gXAogCWlwYXRoX2VlcHJvbS5vIFwKIAlpcGF0aF9maWxlX29wcy5vIFwKIAlpcGF0aF9mcy5vIFwKLQlpcGF0aF9odDQwMC5vIFwKKwlpcGF0aF9pYmE2MTEwLm8gXAorCWlwYXRoX2liYTYxMjAubyBcCiAJaXBhdGhfaW5pdF9jaGlwLm8gXAogCWlwYXRoX2ludHIubyBcCi0JaXBhdGhfbGF5ZXIubyBcCi0JaXBhdGhfcGU4MDAubyBcCi0JaXBhdGhfc3RhdHMubyBcCi0JaXBhdGhfc3lzZnMubyBcCi0JaXBhdGhfdXNlcl9wYWdlcy5vCi0KLWlwYXRoX2NvcmUtJChDT05GSUdfWDg2XzY0KSArPSBpcGF0aF93Y194ODZfNjQubwotCi1pYl9pcGF0aC15IDo9IFwKLQlpcGF0aF9jcS5vIFwKIAlpcGF0aF9rZXlzLm8gXAorCWlwYXRoX2xheWVyLm8gXAogCWlwYXRoX21hZC5vIFwKKwlpcGF0aF9tbWFwLm8gXAogCWlwYXRoX21yLm8gXAogCWlwYXRoX3FwLm8gXAogCWlwYXRoX3JjLm8gXAogCWlwYXRoX3J1Yy5vIFwKIAlpcGF0aF9zcnEubyBcCisJaXBhdGhfc3RhdHMubyBcCisJaXBhdGhfc3lzZnMubyBcCiAJaXBhdGhfdWMubyBcCiAJaXBhdGhfdWQubyBcCi0JaXBhdGhfdmVyYnMubyBcCi0JaXBhdGhfdmVyYnNfbWNhc3QubworCWlwYXRoX3VzZXJfcGFnZXMubyBcCisJaXBhdGhfdmVyYnNfbWNhc3QubyBcCisJaXBhdGhfdmVyYnMubworCitpYl9pcGF0aC0kKENPTkZJR19YODZfNjQpICs9IGlwYXRoX3djX3g4Nl82NC5vCitpYl9pcGF0aC0kKENPTkZJR19QUEM2NCkgKz0gaXBhdGhfd2NfcHBjNjQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oCmluZGV4IDA2MmJkMzkuLmY1Nzc5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY29tbW9uLmgKQEAgLTEwNiw5ICsxMDYsOSBAQAogCV9fdTY0IHNwc19ldGhlcl9zcGt0czsKIAkvKiBudW1iZXIgb2YgImV0aGVybmV0IiBwYWNrZXRzIHJlY2VpdmVkIGJ5IGRyaXZlciAqLwogCV9fdTY0IHNwc19ldGhlcl9ycGt0czsKLQkvKiBudW1iZXIgb2YgU01BIHBhY2tldHMgc2VudCBieSBkcml2ZXIgKi8KKwkvKiBudW1iZXIgb2YgU01BIHBhY2tldHMgc2VudCBieSBkcml2ZXIuIE9ic29sZXRlLiAqLwogCV9fdTY0IHNwc19zbWFfc3BrdHM7Ci0JLyogbnVtYmVyIG9mIFNNQSBwYWNrZXRzIHJlY2VpdmVkIGJ5IGRyaXZlciAqLworCS8qIG51bWJlciBvZiBTTUEgcGFja2V0cyByZWNlaXZlZCBieSBkcml2ZXIuIE9ic29sZXRlLiAqLwogCV9fdTY0IHNwc19zbWFfcnBrdHM7CiAJLyogbnVtYmVyIG9mIHRpbWVzIGFsbCBwb3J0cyByY3ZoZHJxIHdhcyBmdWxsIGFuZCBwYWNrZXQgZHJvcHBlZCAqLwogCV9fdTY0IHNwc19oZHJxZnVsbDsKQEAgLTEzOCw3ICsxMzgsNyBAQAogCV9fdTY0IHNwc19wYWdldW5sb2NrczsKIAkvKgogCSAqIE51bWJlciBvZiBwYWNrZXRzIGRyb3BwZWQgaW4ga2VybmVsIG90aGVyIHRoYW4gZXJyb3JzIChldGhlcgotCSAqIHBhY2tldHMgaWYgaXBhdGggbm90IGNvbmZpZ3VyZWQsIHNtYS9tYWQsIGV0Yy4pCisJICogcGFja2V0cyBpZiBpcGF0aCBub3QgY29uZmlndXJlZCwgZXRjLikKIAkgKi8KIAlfX3U2NCBzcHNfa3Jkcm9wczsKIAkvKiBwYWQgZm9yIGZ1dHVyZSBncm93dGggKi8KQEAgLTE1Myw4ICsxNTMsNiBAQAogI2RlZmluZSBJUEFUSF9TVEFUVVNfRElTQUJMRUQgICAgICAweDIJLyogaGFyZHdhcmUgZGlzYWJsZWQgKi8KIC8qIERldmljZSBoYXMgYmVlbiBkaXNhYmxlZCB2aWEgYWRtaW4gcmVxdWVzdCAqLwogI2RlZmluZSBJUEFUSF9TVEFUVVNfQURNSU5fRElTQUJMRUQgICAgMHg0Ci0jZGVmaW5lIElQQVRIX1NUQVRVU19PSUJfU01BICAgICAgIDB4OAkvKiBpcGF0aF9tYWQga2VybmVsIFNNQSBydW5uaW5nICovCi0jZGVmaW5lIElQQVRIX1NUQVRVU19TTUEgICAgICAgICAgMHgxMAkvKiB1c2VyIFNNQSBydW5uaW5nICovCiAvKiBDaGlwIGhhcyBiZWVuIGZvdW5kIGFuZCBpbml0dGVkICovCiAjZGVmaW5lIElQQVRIX1NUQVRVU19DSElQX1BSRVNFTlQgMHgyMAogLyogSUIgbGluayBpcyBhdCBBQ1RJVkUsIHVzYWJsZSBmb3IgZGF0YSB0cmFmZmljICovCkBAIC00NjUsMTIgKzQ2MywxMSBAQAogCXN0cnVjdCBpcGF0aF9pb3ZlYyBzcHNfaW92WzRdOwogfTsKIAotLyogUGFzc2VkIGludG8gU01BIHNwZWNpYWwgZmlsZSdzIC0+cmVhZCBhbmQgLT53cml0ZSBtZXRob2RzLiAqLwotc3RydWN0IGlwYXRoX3NtYV9wa3QKLXsKLQlfX3UzMiB1bml0OwkvKiB1bml0IG9uIHdoaWNoIHRvIHNlbmQgcGFja2V0ICovCi0JX191NjQgZGF0YTsJLyogYWRkcmVzcyBvZiBwYXlsb2FkIGluIHVzZXJzcGFjZSAqLwotCV9fdTMyIGxlbjsJLyogbGVuZ3RoIG9mIHBheWxvYWQgKi8KKy8qIFBhc3NlZCBpbnRvIGRpYWcgZGF0YSBzcGVjaWFsIGZpbGUncyAtPndyaXRlIG1ldGhvZC4gKi8KK3N0cnVjdCBpcGF0aF9kaWFnX3BrdCB7CisJX191MzIgdW5pdDsKKwlfX3U2NCBkYXRhOworCV9fdTMyIGxlbjsKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jcS5jCmluZGV4IDNlZmVlMzQuLjA0OTIyMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jcS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jcS5jCkBAIC00MiwyMCArNDIsMjggQEAKICAqIEBlbnRyeTogd29yayBjb21wbGV0aW9uIGVudHJ5IHRvIGFkZAogICogQHNpZzogdHJ1ZSBpZiBAZW50cnkgaXMgYSBzb2xpY2l0YXRlZCBlbnRyeQogICoKLSAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIG9uZSBvZiB0aGUgcXAtPnNfbG9jayBvciBxcC0+cl9ycS5sb2NrIGhlbGQuCisgKiBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCBxcC0+c19sb2NrIGhlbGQuCiAgKi8KIHZvaWQgaXBhdGhfY3FfZW50ZXIoc3RydWN0IGlwYXRoX2NxICpjcSwgc3RydWN0IGliX3djICplbnRyeSwgaW50IHNvbGljaXRlZCkKIHsKKwlzdHJ1Y3QgaXBhdGhfY3Ffd2MgKndjID0gY3EtPnF1ZXVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGhlYWQ7CiAJdTMyIG5leHQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChjcS0+aGVhZCA9PSBjcS0+aWJjcS5jcWUpCisJLyoKKwkgKiBOb3RlIHRoYXQgdGhlIGhlYWQgcG9pbnRlciBtaWdodCBiZSB3cml0YWJsZSBieSB1c2VyIHByb2Nlc3Nlcy4KKwkgKiBUYWtlIGNhcmUgdG8gdmVyaWZ5IGl0IGlzIGEgc2FuZSB2YWx1ZS4KKwkgKi8KKwloZWFkID0gd2MtPmhlYWQ7CisJaWYgKGhlYWQgPj0gKHVuc2lnbmVkKSBjcS0+aWJjcS5jcWUpIHsKKwkJaGVhZCA9IGNxLT5pYmNxLmNxZTsKIAkJbmV4dCA9IDA7Ci0JZWxzZQotCQluZXh0ID0gY3EtPmhlYWQgKyAxOwotCWlmICh1bmxpa2VseShuZXh0ID09IGNxLT50YWlsKSkgeworCX0gZWxzZQorCQluZXh0ID0gaGVhZCArIDE7CisJaWYgKHVubGlrZWx5KG5leHQgPT0gd2MtPnRhaWwpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CiAJCWlmIChjcS0+aWJjcS5ldmVudF9oYW5kbGVyKSB7CiAJCQlzdHJ1Y3QgaWJfZXZlbnQgZXY7CkBAIC02Nyw4ICs3NSw4IEBACiAJCX0KIAkJcmV0dXJuOwogCX0KLQljcS0+cXVldWVbY3EtPmhlYWRdID0gKmVudHJ5OwotCWNxLT5oZWFkID0gbmV4dDsKKwl3Yy0+cXVldWVbaGVhZF0gPSAqZW50cnk7CisJd2MtPmhlYWQgPSBuZXh0OwogCiAJaWYgKGNxLT5ub3RpZnkgPT0gSUJfQ1FfTkVYVF9DT01QIHx8CiAJICAgIChjcS0+bm90aWZ5ID09IElCX0NRX1NPTElDSVRFRCAmJiBzb2xpY2l0ZWQpKSB7CkBAIC0xMDEsMTkgKzEwOSwyMCBAQAogaW50IGlwYXRoX3BvbGxfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqZW50cnkpCiB7CiAJc3RydWN0IGlwYXRoX2NxICpjcSA9IHRvX2ljcShpYmNxKTsKKwlzdHJ1Y3QgaXBhdGhfY3Ffd2MgKndjID0gY3EtPnF1ZXVlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG5wb2xsZWQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3EtPmxvY2ssIGZsYWdzKTsKIAogCWZvciAobnBvbGxlZCA9IDA7IG5wb2xsZWQgPCBudW1fZW50cmllczsgKytucG9sbGVkLCArK2VudHJ5KSB7Ci0JCWlmIChjcS0+dGFpbCA9PSBjcS0+aGVhZCkKKwkJaWYgKHdjLT50YWlsID09IHdjLT5oZWFkKQogCQkJYnJlYWs7Ci0JCSplbnRyeSA9IGNxLT5xdWV1ZVtjcS0+dGFpbF07Ci0JCWlmIChjcS0+dGFpbCA9PSBjcS0+aWJjcS5jcWUpCi0JCQljcS0+dGFpbCA9IDA7CisJCSplbnRyeSA9IHdjLT5xdWV1ZVt3Yy0+dGFpbF07CisJCWlmICh3Yy0+dGFpbCA+PSBjcS0+aWJjcS5jcWUpCisJCQl3Yy0+dGFpbCA9IDA7CiAJCWVsc2UKLQkJCWNxLT50YWlsKys7CisJCQl3Yy0+dGFpbCsrOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNxLT5sb2NrLCBmbGFncyk7CkBAIC0xNjAsMzggKzE2OSw3NCBAQAogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CiAJc3RydWN0IGlwYXRoX2NxICpjcTsKLQlzdHJ1Y3QgaWJfd2MgKndjOworCXN0cnVjdCBpcGF0aF9jcV93YyAqd2M7CiAJc3RydWN0IGliX2NxICpyZXQ7CiAKLQlpZiAoZW50cmllcyA+IGliX2lwYXRoX21heF9jcWVzKSB7CisJaWYgKGVudHJpZXMgPCAxIHx8IGVudHJpZXMgPiBpYl9pcGF0aF9tYXhfY3FlcykgewogCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOwotCQlnb3RvIGJhaWw7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlpZiAoZGV2LT5uX2Nxc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X2NxcykgewogCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIGJhaWw7CisJCWdvdG8gZG9uZTsKIAl9CiAKLQkvKgotCSAqIE5lZWQgdG8gdXNlIHZtYWxsb2MoKSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbGFyZ2UgI3Mgb2YKLQkgKiBlbnRyaWVzLgotCSAqLworCS8qIEFsbG9jYXRlIHRoZSBjb21wbGV0aW9uIHF1ZXVlIHN0cnVjdHVyZS4gKi8KIAljcSA9IGttYWxsb2Moc2l6ZW9mKCpjcSksIEdGUF9LRVJORUwpOwogCWlmICghY3EpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCiAJLyoKLQkgKiBOZWVkIHRvIHVzZSB2bWFsbG9jKCkgaWYgd2Ugd2FudCB0byBzdXBwb3J0IGxhcmdlICNzIG9mIGVudHJpZXMuCisJICogQWxsb2NhdGUgdGhlIGNvbXBsZXRpb24gcXVldWUgZW50cmllcyBhbmQgaGVhZC90YWlsIHBvaW50ZXJzLgorCSAqIFRoaXMgaXMgYWxsb2NhdGVkIHNlcGFyYXRlbHkgc28gdGhhdCBpdCBjYW4gYmUgcmVzaXplZCBhbmQKKwkgKiBhbHNvIG1hcHBlZCBpbnRvIHVzZXIgc3BhY2UuCisJICogV2UgbmVlZCB0byB1c2Ugdm1hbGxvYygpIGluIG9yZGVyIHRvIHN1cHBvcnQgbW1hcCBhbmQgbGFyZ2UKKwkgKiBudW1iZXJzIG9mIGVudHJpZXMuCiAJICovCi0Jd2MgPSB2bWFsbG9jKHNpemVvZigqd2MpICogKGVudHJpZXMgKyAxKSk7CisJd2MgPSB2bWFsbG9jX3VzZXIoc2l6ZW9mKCp3YykgKyBzaXplb2Yoc3RydWN0IGliX3djKSAqIGVudHJpZXMpOwogCWlmICghd2MpIHsKLQkJa2ZyZWUoY3EpOwogCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIGJhaWw7CisJCWdvdG8gYmFpbF9jcTsKIAl9CisKKwkvKgorCSAqIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgV0MgYXMgdGhlIG9mZnNldCB0byBtbWFwLgorCSAqIFNlZSBpcGF0aF9tbWFwKCkgZm9yIGRldGFpbHMuCisJICovCisJaWYgKHVkYXRhICYmIHVkYXRhLT5vdXRsZW4gPj0gc2l6ZW9mKF9fdTY0KSkgeworCQlzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvICppcDsKKwkJX191NjQgb2Zmc2V0ID0gKF9fdTY0KSB3YzsKKwkJaW50IGVycjsKKworCQllcnIgPSBpYl9jb3B5X3RvX3VkYXRhKHVkYXRhLCAmb2Zmc2V0LCBzaXplb2Yob2Zmc2V0KSk7CisJCWlmIChlcnIpIHsKKwkJCXJldCA9IEVSUl9QVFIoZXJyKTsKKwkJCWdvdG8gYmFpbF93YzsKKwkJfQorCisJCS8qIEFsbG9jYXRlIGluZm8gZm9yIGlwYXRoX21tYXAoKS4gKi8KKwkJaXAgPSBrbWFsbG9jKHNpemVvZigqaXApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFpcCkgeworCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJCWdvdG8gYmFpbF93YzsKKwkJfQorCQljcS0+aXAgPSBpcDsKKwkJaXAtPmNvbnRleHQgPSBjb250ZXh0OworCQlpcC0+b2JqID0gd2M7CisJCWtyZWZfaW5pdCgmaXAtPnJlZik7CisJCWlwLT5tbWFwX2NudCA9IDA7CisJCWlwLT5zaXplID0gUEFHRV9BTElHTihzaXplb2YoKndjKSArCisJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpYl93YykgKiBlbnRyaWVzKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wZW5kaW5nX2xvY2spOworCQlpcC0+bmV4dCA9IGRldi0+cGVuZGluZ19tbWFwczsKKwkJZGV2LT5wZW5kaW5nX21tYXBzID0gaXA7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wZW5kaW5nX2xvY2spOworCX0gZWxzZQorCQljcS0+aXAgPSBOVUxMOworCiAJLyoKIAkgKiBpYl9jcmVhdGVfY3EoKSB3aWxsIGluaXRpYWxpemUgY3EtPmliY3EgZXhjZXB0IGZvciBjcS0+aWJjcS5jcWUuCiAJICogVGhlIG51bWJlciBvZiBlbnRyaWVzIHNob3VsZCBiZSA+PSB0aGUgbnVtYmVyIHJlcXVlc3RlZCBvciByZXR1cm4KQEAgLTIwMiwxNSArMjQ3LDIyIEBACiAJY3EtPnRyaWdnZXJlZCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJmNxLT5sb2NrKTsKIAl0YXNrbGV0X2luaXQoJmNxLT5jb21wdGFzaywgc2VuZF9jb21wbGV0ZSwgKHVuc2lnbmVkIGxvbmcpY3EpOwotCWNxLT5oZWFkID0gMDsKLQljcS0+dGFpbCA9IDA7CisJd2MtPmhlYWQgPSAwOworCXdjLT50YWlsID0gMDsKIAljcS0+cXVldWUgPSB3YzsKIAogCXJldCA9ICZjcS0+aWJjcTsKIAogCWRldi0+bl9jcXNfYWxsb2NhdGVkKys7CisJZ290byBkb25lOwogCi1iYWlsOgorYmFpbF93YzoKKwl2ZnJlZSh3Yyk7CisKK2JhaWxfY3E6CisJa2ZyZWUoY3EpOworCitkb25lOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyOSw3ICsyODEsMTAgQEAKIAogCXRhc2tsZXRfa2lsbCgmY3EtPmNvbXB0YXNrKTsKIAlkZXYtPm5fY3FzX2FsbG9jYXRlZC0tOwotCXZmcmVlKGNxLT5xdWV1ZSk7CisJaWYgKGNxLT5pcCkKKwkJa3JlZl9wdXQoJmNxLT5pcC0+cmVmLCBpcGF0aF9yZWxlYXNlX21tYXBfaW5mbyk7CisJZWxzZQorCQl2ZnJlZShjcS0+cXVldWUpOwogCWtmcmVlKGNxKTsKIAogCXJldHVybiAwOwpAQCAtMjUzLDcgKzMwOCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNxLT5sb2NrLCBmbGFncyk7CiAJLyoKIAkgKiBEb24ndCBjaGFuZ2UgSUJfQ1FfTkVYVF9DT01QIHRvIElCX0NRX1NPTElDSVRFRCBidXQgYWxsb3cKLQkgKiBhbnkgb3RoZXIgdHJhbnNpdGlvbnMuCisJICogYW55IG90aGVyIHRyYW5zaXRpb25zIChzZWUgQzExLTMxIGFuZCBDMTEtMzIgaW4gY2guIDExLjQuMi4yKS4KIAkgKi8KIAlpZiAoY3EtPm5vdGlmeSAhPSBJQl9DUV9ORVhUX0NPTVApCiAJCWNxLT5ub3RpZnkgPSBub3RpZnk7CkBAIC0yNjQsNDYgKzMxOSw4NiBAQAogaW50IGlwYXRoX3Jlc2l6ZV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGludCBjcWUsIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCiB7CiAJc3RydWN0IGlwYXRoX2NxICpjcSA9IHRvX2ljcShpYmNxKTsKLQlzdHJ1Y3QgaWJfd2MgKndjLCAqb2xkX3djOwotCXUzMiBuOworCXN0cnVjdCBpcGF0aF9jcV93YyAqb2xkX3djID0gY3EtPnF1ZXVlOworCXN0cnVjdCBpcGF0aF9jcV93YyAqd2M7CisJdTMyIGhlYWQsIHRhaWwsIG47CiAJaW50IHJldDsKIAorCWlmIChjcWUgPCAxIHx8IGNxZSA+IGliX2lwYXRoX21heF9jcWVzKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKIAkvKgogCSAqIE5lZWQgdG8gdXNlIHZtYWxsb2MoKSBpZiB3ZSB3YW50IHRvIHN1cHBvcnQgbGFyZ2UgI3Mgb2YgZW50cmllcy4KIAkgKi8KLQl3YyA9IHZtYWxsb2Moc2l6ZW9mKCp3YykgKiAoY3FlICsgMSkpOworCXdjID0gdm1hbGxvY191c2VyKHNpemVvZigqd2MpICsgc2l6ZW9mKHN0cnVjdCBpYl93YykgKiBjcWUpOwogCWlmICghd2MpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBiYWlsOwogCX0KIAorCS8qCisJICogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBXQyBhcyB0aGUgb2Zmc2V0IHRvIG1tYXAuCisJICogU2VlIGlwYXRoX21tYXAoKSBmb3IgZGV0YWlscy4KKwkgKi8KKwlpZiAodWRhdGEgJiYgdWRhdGEtPm91dGxlbiA+PSBzaXplb2YoX191NjQpKSB7CisJCV9fdTY0IG9mZnNldCA9IChfX3U2NCkgd2M7CisKKwkJcmV0ID0gaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJm9mZnNldCwgc2l6ZW9mKG9mZnNldCkpOworCQlpZiAocmV0KQorCQkJZ290byBiYWlsOworCX0KKwogCXNwaW5fbG9ja19pcnEoJmNxLT5sb2NrKTsKLQlpZiAoY3EtPmhlYWQgPCBjcS0+dGFpbCkKLQkJbiA9IGNxLT5pYmNxLmNxZSArIDEgKyBjcS0+aGVhZCAtIGNxLT50YWlsOworCS8qCisJICogTWFrZSBzdXJlIGhlYWQgYW5kIHRhaWwgYXJlIHNhbmUgc2luY2UgdGhleQorCSAqIG1pZ2h0IGJlIHVzZXIgd3JpdGFibGUuCisJICovCisJaGVhZCA9IG9sZF93Yy0+aGVhZDsKKwlpZiAoaGVhZCA+ICh1MzIpIGNxLT5pYmNxLmNxZSkKKwkJaGVhZCA9ICh1MzIpIGNxLT5pYmNxLmNxZTsKKwl0YWlsID0gb2xkX3djLT50YWlsOworCWlmICh0YWlsID4gKHUzMikgY3EtPmliY3EuY3FlKQorCQl0YWlsID0gKHUzMikgY3EtPmliY3EuY3FlOworCWlmIChoZWFkIDwgdGFpbCkKKwkJbiA9IGNxLT5pYmNxLmNxZSArIDEgKyBoZWFkIC0gdGFpbDsKIAllbHNlCi0JCW4gPSBjcS0+aGVhZCAtIGNxLT50YWlsOworCQluID0gaGVhZCAtIHRhaWw7CiAJaWYgKHVubGlrZWx5KCh1MzIpY3FlIDwgbikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7CiAJCXZmcmVlKHdjKTsKIAkJcmV0ID0gLUVPVkVSRkxPVzsKIAkJZ290byBiYWlsOwogCX0KLQlmb3IgKG4gPSAwOyBjcS0+dGFpbCAhPSBjcS0+aGVhZDsgbisrKSB7Ci0JCXdjW25dID0gY3EtPnF1ZXVlW2NxLT50YWlsXTsKLQkJaWYgKGNxLT50YWlsID09IGNxLT5pYmNxLmNxZSkKLQkJCWNxLT50YWlsID0gMDsKKwlmb3IgKG4gPSAwOyB0YWlsICE9IGhlYWQ7IG4rKykgeworCQl3Yy0+cXVldWVbbl0gPSBvbGRfd2MtPnF1ZXVlW3RhaWxdOworCQlpZiAodGFpbCA9PSAodTMyKSBjcS0+aWJjcS5jcWUpCisJCQl0YWlsID0gMDsKIAkJZWxzZQotCQkJY3EtPnRhaWwrKzsKKwkJCXRhaWwrKzsKIAl9CiAJY3EtPmliY3EuY3FlID0gY3FlOwotCWNxLT5oZWFkID0gbjsKLQljcS0+dGFpbCA9IDA7Ci0Jb2xkX3djID0gY3EtPnF1ZXVlOworCXdjLT5oZWFkID0gbjsKKwl3Yy0+dGFpbCA9IDA7CiAJY3EtPnF1ZXVlID0gd2M7CiAJc3Bpbl91bmxvY2tfaXJxKCZjcS0+bG9jayk7CiAKIAl2ZnJlZShvbGRfd2MpOwogCisJaWYgKGNxLT5pcCkgeworCQlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJjcS0+ZGV2aWNlKTsKKwkJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqaXAgPSBjcS0+aXA7CisKKwkJaXAtPm9iaiA9IHdjOworCQlpcC0+c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKCp3YykgKworCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgaWJfd2MpICogY3FlKTsKKwkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wZW5kaW5nX2xvY2spOworCQlpcC0+bmV4dCA9IGRldi0+cGVuZGluZ19tbWFwczsKKwkJZGV2LT5wZW5kaW5nX21tYXBzID0gaXA7CisJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wZW5kaW5nX2xvY2spOworCX0KKwogCXJldCA9IDA7CiAKIGJhaWw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kZWJ1Zy5oCmluZGV4IGY0MTViZWQuLmRmNjlmMGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGVidWcuaApAQCAtNjAsNyArNjAsNiBAQAogI2RlZmluZSBfX0lQQVRIX1VTRVJfU0VORCAgIDB4MTAwMAkvKiB1c2UgdXNlciBtb2RlIHNlbmQgKi8KICNkZWZpbmUgX19JUEFUSF9LRVJORUxfU0VORCAweDIwMDAJLyogdXNlIGtlcm5lbCBtb2RlIHNlbmQgKi8KICNkZWZpbmUgX19JUEFUSF9FUEtUREJHICAgICAweDQwMDAJLyogcHJpbnQgZXRoZXJuZXQgcGFja2V0IGRhdGEgKi8KLSNkZWZpbmUgX19JUEFUSF9TTUFEQkcgICAgICAweDgwMDAJLyogc21hIHBhY2tldCBkZWJ1ZyAqLwogI2RlZmluZSBfX0lQQVRIX0lQQVRIREJHICAgIDB4MTAwMDAJLyogRXRoZXJuZXQgKElQQVRIKSBnZW4gZGVidWcgKi8KICNkZWZpbmUgX19JUEFUSF9JUEFUSFdBUk4gICAweDIwMDAwCS8qIEV0aGVybmV0IChJUEFUSCkgd2FybmluZ3MgKi8KICNkZWZpbmUgX19JUEFUSF9JUEFUSEVSUiAgICAweDQwMDAwCS8qIEV0aGVybmV0IChJUEFUSCkgZXJyb3JzICovCkBAIC04NCw3ICs4Myw2IEBACiAvKiBwcmludCBtbWFwL25vcGFnZSBzdHVmZiwgbm90IHVzaW5nIFZEQkcgYW55IG1vcmUgKi8KICNkZWZpbmUgX19JUEFUSF9NTURCRyAgICAgMHgwCiAjZGVmaW5lIF9fSVBBVEhfRVBLVERCRyAgIDB4MAkvKiBwcmludCBldGhlcm5ldCBwYWNrZXQgZGF0YSAqLwotI2RlZmluZSBfX0lQQVRIX1NNQURCRyAgICAweDAgICAvKiBwcm9jZXNzIHN0YXJ0dXAgKGluaXQpL2V4aXQgbWVzc2FnZXMgKi8KICNkZWZpbmUgX19JUEFUSF9JUEFUSERCRyAgMHgwCS8qIEV0aGVybmV0IChJUEFUSCkgdGFibGUgZHVtcCBvbiAqLwogI2RlZmluZSBfX0lQQVRIX0lQQVRIV0FSTiAweDAJLyogRXRoZXJuZXQgKElQQVRIKSB3YXJuaW5ncyBvbiAgICovCiAjZGVmaW5lIF9fSVBBVEhfSVBBVEhFUlIgIDB4MAkvKiBFdGhlcm5ldCAoSVBBVEgpIGVycm9ycyBvbiAgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RpYWcuYwppbmRleCAxNDdkZDg5Li4yOGI2YjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZGlhZy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kaWFnLmMKQEAgLTQxLDExICs0MSwxMSBAQAogICogdGhyb3VnaCB0aGUgL3N5cy9idXMvcGNpIHJlc291cmNlIG1tYXAgaW50ZXJmYWNlLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKLSNpbmNsdWRlICJpcGF0aF9sYXllci5oIgogI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiBpbnQgaXBhdGhfZGlhZ19pbnVzZTsKQEAgLTI3NCw2ICsyNzQsMTU4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXBhdGhfZGlhZ3BrdF93cml0ZShzdHJ1Y3QgZmlsZSAqZnAsCisJCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCisJCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZik7CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRpYWdwa3RfZmlsZV9vcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLndyaXRlID0gaXBhdGhfZGlhZ3BrdF93cml0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2RldiAqZGlhZ3BrdF9jZGV2Oworc3RhdGljIHN0cnVjdCBjbGFzc19kZXZpY2UgKmRpYWdwa3RfY2xhc3NfZGV2OworCitpbnQgX19pbml0IGlwYXRoX2RpYWdwa3RfYWRkKHZvaWQpCit7CisJcmV0dXJuIGlwYXRoX2NkZXZfaW5pdChJUEFUSF9ESUFHUEtUX01JTk9SLAorCQkJICAgICAgICJpcGF0aF9kaWFncGt0IiwgJmRpYWdwa3RfZmlsZV9vcHMsCisJCQkgICAgICAgJmRpYWdwa3RfY2RldiwgJmRpYWdwa3RfY2xhc3NfZGV2KTsKK30KKwordm9pZCBfX2V4aXQgaXBhdGhfZGlhZ3BrdF9yZW1vdmUodm9pZCkKK3sKKwlpcGF0aF9jZGV2X2NsZWFudXAoJmRpYWdwa3RfY2RldiwgJmRpYWdwa3RfY2xhc3NfZGV2KTsKK30KKworLyoqCisgKiBpcGF0aF9kaWFncGt0X3dyaXRlIC0gd3JpdGUgYW4gSUIgcGFja2V0CisgKiBAZnA6IHRoZSBkaWFnIGRhdGEgZGV2aWNlIGZpbGUgcG9pbnRlcgorICogQGRhdGE6IGlwYXRoX2RpYWdfcGt0IHN0cnVjdHVyZSBzYXlpbmcgd2hlcmUgdG8gZ2V0IHRoZSBwYWNrZXQKKyAqIEBjb3VudDogc2l6ZSBvZiBkYXRhIHRvIHdyaXRlCisgKiBAb2ZmOiB1bnVzZWQgYnkgdGhpcyBjb2RlCisgKi8KK3N0YXRpYyBzc2l6ZV90IGlwYXRoX2RpYWdwa3Rfd3JpdGUoc3RydWN0IGZpbGUgKmZwLAorCQkJCSAgIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJdTMyIF9faW9tZW0gKnBpb2J1ZjsKKwl1MzIgcGxlbiwgY2xlbiwgcGJ1Zm47CisJc3RydWN0IGlwYXRoX2RpYWdfcGt0IGRwOworCXUzMiAqdG1wYnVmID0gTlVMTDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJc3NpemVfdCByZXQgPSAwOworCXU2NCB2YWw7CisKKwlpZiAoY291bnQgPCBzaXplb2YoZHApKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmRwLCBkYXRhLCBzaXplb2YoZHApKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogc2VuZCBjb3VudCBtdXN0IGJlIGFuIGV4YWN0IG51bWJlciBvZiBkd29yZHMgKi8KKwlpZiAoZHAubGVuICYgMykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJY2xlbiA9IGRwLmxlbiA+PiAyOworCisJZGQgPSBpcGF0aF9sb29rdXAoZHAudW5pdCk7CisJaWYgKCFkZCB8fCAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX1BSRVNFTlQpIHx8CisJICAgICFkZC0+aXBhdGhfa3JlZ2Jhc2UpIHsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiaWxsZWdhbCB1bml0ICV1IGZvciBkaWFnIGRhdGEgc2VuZFxuIiwKKwkJCSAgIGRwLnVuaXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGlwYXRoX2RpYWdfaW51c2UgJiYgIWRpYWdfc2V0X2xpbmsgJiYKKwkgICAgIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSkgeworCQlkaWFnX3NldF9saW5rID0gMTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVHJ5aW5nIHRvIHNldCB0byBzZXQgbGluayBhY3RpdmUgZm9yICIKKwkJCSAgICJkaWFnIHBrdFxuIik7CisJCWlwYXRoX3NldF9saW5rc3RhdGUoZGQsIElQQVRIX0lCX0xJTktBUk0pOworCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRkLCBJUEFUSF9JQl9MSU5LQUNUSVZFKTsKKwl9CisKKwlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9JTklUVEVEKSkgeworCQkvKiBubyBoYXJkd2FyZSwgZnJlZXplLCBldGMuICovCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInVuaXQgJXUgbm90IHVzYWJsZVxuIiwgZGQtPmlwYXRoX3VuaXQpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIGJhaWw7CisJfQorCXZhbCA9IGRkLT5pcGF0aF9sYXN0aWJjc3RhdCAmIElQQVRIX0lCU1RBVEVfTUFTSzsKKwlpZiAodmFsICE9IElQQVRIX0lCU1RBVEVfSU5JVCAmJiB2YWwgIT0gSVBBVEhfSUJTVEFURV9BUk0gJiYKKwkgICAgdmFsICE9IElQQVRIX0lCU1RBVEVfQUNUSVZFKSB7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInVuaXQgJXUgbm90IHJlYWR5IChzdGF0ZSAlbGx4KVxuIiwKKwkJCSAgIGRkLT5pcGF0aF91bml0LCAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogbmVlZCB0b3RhbCBsZW5ndGggYmVmb3JlIGZpcnN0IHdvcmQgd3JpdHRlbiAqLworCS8qICsxIHdvcmQgaXMgZm9yIHRoZSBxd29yZCBwYWRkaW5nICovCisJcGxlbiA9IHNpemVvZih1MzIpICsgZHAubGVuOworCisJaWYgKChwbGVuICsgNCkgPiBkZC0+aXBhdGhfaWJtYXhsZW4pIHsKKwkJaXBhdGhfZGJnKCJQa3QgbGVuIDB4JXggPiBpYm1heGxlbiAleFxuIiwKKwkJCSAgcGxlbiAtIDQsIGRkLT5pcGF0aF9pYm1heGxlbik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsJLyogYmVmb3JlIHdyaXRpbmcgcGJjICovCisJfQorCXRtcGJ1ZiA9IHZtYWxsb2MocGxlbik7CisJaWYgKCF0bXBidWYpIHsKKwkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSB0bXAgYnVmZmVyLCAiCisJCQkgImZhaWxpbmdcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcGJ1ZiwKKwkJCSAgIChjb25zdCB2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgZHAuZGF0YSwKKwkJCSAgIGRwLmxlbikpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJZ290byBiYWlsOworCX0KKworCXBpb2J1ZiA9IGlwYXRoX2dldHBpb2J1ZihkZCwgJnBidWZuKTsKKwlpZiAoIXBpb2J1ZikgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJObyBQSU8gYnVmZmVycyBhdmFpbCB1bml0IGZvciAldVxuIiwKKwkJCSAgIGRkLT5pcGF0aF91bml0KTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGJhaWw7CisJfQorCisJcGxlbiA+Pj0gMjsJCS8qIGluIGR3b3JkcyAqLworCisJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9QS1REQkcpCisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgInVuaXQgJXUgMHgleCsxdyBwaW8lZFxuIiwKKwkJCSAgIGRkLT5pcGF0aF91bml0LCBwbGVuIC0gMSwgcGJ1Zm4pOworCisJLyogd2UgaGF2ZSB0byBmbHVzaCBhZnRlciB0aGUgUEJDIGZvciBjb3JyZWN0bmVzcyBvbiBzb21lIGNwdXMKKwkgKiBvciBXQyBidWZmZXIgY2FuIGJlIHdyaXR0ZW4gb3V0IG9mIG9yZGVyICovCisJd3JpdGVxKHBsZW4sIHBpb2J1Zik7CisJaXBhdGhfZmx1c2hfd2MoKTsKKwkvKiBjb3B5IGFsbCBieSB0aGUgdHJpZ2dlciB3b3JkLCB0aGVuIGZsdXNoLCBzbyBpdCdzIHdyaXR0ZW4KKwkgKiB0byBjaGlwIGJlZm9yZSB0cmlnZ2VyIHdvcmQsIHRoZW4gd3JpdGUgdHJpZ2dlciB3b3JkLCB0aGVuCisJICogZmx1c2ggYWdhaW4sIHNvIHBhY2tldCBpcyBzZW50LiAqLworCV9faW93cml0ZTMyX2NvcHkocGlvYnVmICsgMiwgdG1wYnVmLCBjbGVuIC0gMSk7CisJaXBhdGhfZmx1c2hfd2MoKTsKKwlfX3Jhd193cml0ZWwodG1wYnVmW2NsZW4gLSAxXSwgcGlvYnVmICsgY2xlbiArIDEpOworCWlwYXRoX2ZsdXNoX3djKCk7CisKKwlyZXQgPSBzaXplb2YoZHApOworCitiYWlsOgorCXZmcmVlKHRtcGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBpcGF0aF9kaWFnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZwKQogewogCW11dGV4X2xvY2soJmlwYXRoX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwppbmRleCBmOTg1MThkLi4yMTA4NDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCi0jaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiBzdGF0aWMgdm9pZCBpcGF0aF91cGRhdGVfcGlvX2J1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CkBAIC01MSw4ICs1MSw2IEBACiAJcmV0dXJuIGluYW1lOwogfQogCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9nZXRfdW5pdF9uYW1lKTsKLQogI2RlZmluZSBEUklWRVJfTE9BRF9NU0cgIlFMb2dpYyAiIElQQVRIX0RSVl9OQU1FICIgbG9hZGVkOiAiCiAjZGVmaW5lIFBGWCBJUEFUSF9EUlZfTkFNRSAiOiAiCiAKQEAgLTYwLDEzICs1OCwxMyBAQAogICogVGhlIHNpemUgaGFzIHRvIGJlIGxvbmdlciB0aGFuIHRoaXMgc3RyaW5nLCBzbyB3ZSBjYW4gYXBwZW5kCiAgKiBib2FyZC9jaGlwIGluZm9ybWF0aW9uIHRvIGl0IGluIHRoZSBpbml0IGNvZGUuCiAgKi8KLWNvbnN0IGNoYXIgaXBhdGhfY29yZV92ZXJzaW9uW10gPSBJUEFUSF9JRFNUUiAiXG4iOworY29uc3QgY2hhciBpYl9pcGF0aF92ZXJzaW9uW10gPSBJUEFUSF9JRFNUUiAiXG4iOwogCiBzdGF0aWMgc3RydWN0IGlkciB1bml0X3RhYmxlOwogREVGSU5FX1NQSU5MT0NLKGlwYXRoX2RldnNfbG9jayk7CiBMSVNUX0hFQUQoaXBhdGhfZGV2X2xpc3QpOwogCi13YWl0X3F1ZXVlX2hlYWRfdCBpcGF0aF9zbWFfc3RhdGVfd2FpdDsKK3dhaXRfcXVldWVfaGVhZF90IGlwYXRoX3N0YXRlX3dhaXQ7CiAKIHVuc2lnbmVkIGlwYXRoX2RlYnVnID0gX19JUEFUSF9JTkZPOwogCkBAIC00MDMsMTAgKzQwMSwxMCBAQAogCS8qIHNldHVwIHRoZSBjaGlwLXNwZWNpZmljIGZ1bmN0aW9ucywgYXMgZWFybHkgYXMgcG9zc2libGUuICovCiAJc3dpdGNoIChlbnQtPmRldmljZSkgewogCWNhc2UgUENJX0RFVklDRV9JRF9JTkZJTklQQVRIX0hUOgotCQlpcGF0aF9pbml0X2h0NDAwX2Z1bmNzKGRkKTsKKwkJaXBhdGhfaW5pdF9pYmE2MTEwX2Z1bmNzKGRkKTsKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfREVWSUNFX0lEX0lORklOSVBBVEhfUEU4MDA6Ci0JCWlwYXRoX2luaXRfcGU4MDBfZnVuY3MoZGQpOworCQlpcGF0aF9pbml0X2liYTYxMjBfZnVuY3MoZGQpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpcGF0aF9kZXZfZXJyKGRkLCAiRm91bmQgdW5rbm93biBRTG9naWMgZGV2aWNlaWQgMHgleCwgIgpAQCAtNDQwLDcgKzQzOCwxMyBAQAogCX0KIAlkZC0+aXBhdGhfcGNpcmV2ID0gcmV2OwogCisjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKKwkvKiBUaGVyZSBpc24ndCBhIGdlbmVyaWMgd2F5IHRvIHNwZWNpZnkgd3JpdGV0aHJvdWdoIG1hcHBpbmdzICovCisJZGQtPmlwYXRoX2tyZWdiYXNlID0gX19pb3JlbWFwKGFkZHIsIGxlbiwKKwkJKF9QQUdFX05PX0NBQ0hFfF9QQUdFX1dSSVRFVEhSVSkpOworI2Vsc2UKIAlkZC0+aXBhdGhfa3JlZ2Jhc2UgPSBpb3JlbWFwX25vY2FjaGUoYWRkciwgbGVuKTsKKyNlbmRpZgogCiAJaWYgKCFkZC0+aXBhdGhfa3JlZ2Jhc2UpIHsKIAkJaXBhdGhfZGJnKCJVbmFibGUgdG8gbWFwIGlvIGFkZHIgJWxseCB0byBrdmlydCwgZmFpbGluZ1xuIiwKQEAgLTUwMyw3ICs1MDcsNyBAQAogCWlwYXRoZnNfYWRkX2RldmljZShkZCk7CiAJaXBhdGhfdXNlcl9hZGQoZGQpOwogCWlwYXRoX2RpYWdfYWRkKGRkKTsKLQlpcGF0aF9sYXllcl9hZGQoZGQpOworCWlwYXRoX3JlZ2lzdGVyX2liX2RldmljZShkZCk7CiAKIAlnb3RvIGJhaWw7CiAKQEAgLTUzMiw3ICs1MzYsNyBAQAogCQlyZXR1cm47CiAKIAlkZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpcGF0aF9sYXllcl9yZW1vdmUoZGQpOworCWlwYXRoX3VucmVnaXN0ZXJfaWJfZGV2aWNlKGRkLT52ZXJic19kZXYpOwogCWlwYXRoX2RpYWdfcmVtb3ZlKGRkKTsKIAlpcGF0aF91c2VyX3JlbW92ZShkZCk7CiAJaXBhdGhmc19yZW1vdmVfZGV2aWNlKGRkKTsKQEAgLTYwNywyMSArNjExLDIzIEBACiAgKgogICogd2FpdCB1cCB0byBtc2VjcyBtaWxsaXNlY29uZHMgZm9yIElCIGxpbmsgc3RhdGUgY2hhbmdlIHRvIG9jY3VyIGZvcgogICogbm93LCB0YWtlIHRoZSBlYXN5IHBvbGxpbmcgcm91dGUuICBDdXJyZW50bHkgdXNlZCBvbmx5IGJ5Ci0gKiBpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlLiAgUmV0dXJucyAwIGlmIHN0YXRlIHJlYWNoZWQsIG90aGVyd2lzZQorICogaXBhdGhfc2V0X2xpbmtzdGF0ZS4gIFJldHVybnMgMCBpZiBzdGF0ZSByZWFjaGVkLCBvdGhlcndpc2UKICAqIC1FVElNRURPVVQgc3RhdGUgY2FuIGhhdmUgbXVsdGlwbGUgc3RhdGVzIHNldCwgZm9yIGFueSBvZiBzZXZlcmFsCiAgKiB0cmFuc2l0aW9ucy4KICAqLwotaW50IGlwYXRoX3dhaXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIHN0YXRlLCBpbnQgbXNlY3MpCitzdGF0aWMgaW50IGlwYXRoX3dhaXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIHN0YXRlLAorCQkJCWludCBtc2VjcykKIHsKLQlkZC0+aXBhdGhfc21hX3N0YXRlX3dhbnRlZCA9IHN0YXRlOwotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGlwYXRoX3NtYV9zdGF0ZV93YWl0LAorCWRkLT5pcGF0aF9zdGF0ZV93YW50ZWQgPSBzdGF0ZTsKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChpcGF0aF9zdGF0ZV93YWl0LAogCQkJCQkgKGRkLT5pcGF0aF9mbGFncyAmIHN0YXRlKSwKIAkJCQkJIG1zZWNzX3RvX2ppZmZpZXMobXNlY3MpKTsKLQlkZC0+aXBhdGhfc21hX3N0YXRlX3dhbnRlZCA9IDA7CisJZGQtPmlwYXRoX3N0YXRlX3dhbnRlZCA9IDA7CiAKIAlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJiBzdGF0ZSkpIHsKIAkJdTY0IHZhbDsKLQkJaXBhdGhfY2RiZyhTTUEsICJEaWRuJ3QgcmVhY2ggbGlua3N0YXRlICVzIHdpdGhpbiAldSBtc1xuIiwKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiRGlkbid0IHJlYWNoIGxpbmtzdGF0ZSAlcyB3aXRoaW4gJXUiCisJCQkgICAiIG1zXG4iLAogCQkJICAgLyogdGVzdCBJTklUIGFoZWFkIG9mIERPV04sIGJvdGggY2FuIGJlIHNldCAqLwogCQkJICAgKHN0YXRlICYgSVBBVEhfTElOS0lOSVQpID8gIklOSVQiIDoKIAkJCSAgICgoc3RhdGUgJiBJUEFUSF9MSU5LRE9XTikgPyAiRE9XTiIgOgpAQCAtODA3LDU4ICs4MTMsNiBAQAogCXJldHVybiBza2I7CiB9CiAKLS8qKgotICogaXBhdGhfcmN2X2xheWVyIC0gcmVjZWl2ZSBhIHBhY2tldCBmb3IgdGhlIGxheWVyZWQgKGV0aGVybmV0KSBkcml2ZXIKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAZXRhaWw6IHRoZSBza19idWZmIG51bWJlcgotICogQHRsZW46IHRoZSB0b3RhbCBwYWNrZXQgbGVuZ3RoCi0gKiBAaGRyOiB0aGUgZXRoZXJuZXQgaGVhZGVyCi0gKgotICogU2VwYXJhdGUgcm91dGluZSBmb3IgYmV0dGVyIG92ZXJhbGwgb3B0aW1pemF0aW9uCi0gKi8KLXN0YXRpYyB2b2lkIGlwYXRoX3Jjdl9sYXllcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBldGFpbCwKLQkJCSAgICB1MzIgdGxlbiwgc3RydWN0IGV0aGVyX2hlYWRlciAqaGRyKQotewotCXUzMiBlbGVuOwotCXU4IHBhZCwgKmJ0aGJ5dGVzOwotCXN0cnVjdCBza19idWZmICpza2IsICpuc2tiOwotCi0JaWYgKGRkLT5pcGF0aF9wb3J0MF9za2JzICYmCi0JCQloZHItPnN1Yl9vcGNvZGUgPT0gSVBBVEhfSVRINFhfT1BDT0RFX0VOQ0FQKSB7Ci0JCS8qCi0JCSAqIEFsbG9jYXRlIGEgbmV3IHNrX2J1ZmYgdG8gcmVwbGFjZSB0aGUgb25lIHdlIGdpdmUKLQkJICogdG8gdGhlIG5ldHdvcmsgc3RhY2suCi0JCSAqLwotCQluc2tiID0gaXBhdGhfYWxsb2Nfc2tiKGRkLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFuc2tiKSB7Ci0JCQkvKiBjb3VudCBPSyBwYWNrZXRzIHRoYXQgd2UgZHJvcCAqLwotCQkJaXBhdGhfc3RhdHMuc3BzX2tyZHJvcHMrKzsKLQkJCXJldHVybjsKLQkJfQotCi0JCWJ0aGJ5dGVzID0gKHU4ICopIGhkci0+YnRoOwotCQlwYWQgPSAoYnRoYnl0ZXNbMV0gPj4gNCkgJiAzOwotCQkvKiArQ1JDMzIgKi8KLQkJZWxlbiA9IHRsZW4gLSAoc2l6ZW9mKCpoZHIpICsgcGFkICsgc2l6ZW9mKHUzMikpOwotCi0JCXNrYiA9IGRkLT5pcGF0aF9wb3J0MF9za2JzW2V0YWlsXTsKLQkJZGQtPmlwYXRoX3BvcnQwX3NrYnNbZXRhaWxdID0gbnNrYjsKLQkJc2tiX3B1dChza2IsIGVsZW4pOwotCi0JCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsIGV0YWlsICsgKHU2NCBfX2lvbWVtICopCi0JCQkJICAgICgoY2hhciBfX2lvbWVtICopIGRkLT5pcGF0aF9rcmVnYmFzZQotCQkJCSAgICAgKyBkZC0+aXBhdGhfcmN2ZWdyYmFzZSksIDAsCi0JCQkJICAgIHZpcnRfdG9fcGh5cyhuc2tiLT5kYXRhKSk7Ci0KLQkJX19pcGF0aF9sYXllcl9yY3YoZGQsIGhkciwgc2tiKTsKLQotCQkvKiBhbm90aGVyIGV0aGVyIHBhY2tldCByZWNlaXZlZCAqLwotCQlpcGF0aF9zdGF0cy5zcHNfZXRoZXJfcnBrdHMrKzsKLQl9Ci0JZWxzZSBpZiAoaGRyLT5zdWJfb3Bjb2RlID09IElQQVRIX0lUSDRYX09QQ09ERV9MSURfQVJQKQotCQlfX2lwYXRoX2xheWVyX3Jjdl9saWQoZGQsIGhkcik7Ci19Ci0KIHN0YXRpYyB2b2lkIGlwYXRoX3Jjdl9oZHJlcnIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAogCQkJICAgICB1MzIgZWZsYWdzLAogCQkJICAgICB1MzIgbCwKQEAgLTk3MiwyNiArOTI2LDE3IEBACiAJCWlmICh1bmxpa2VseShlZmxhZ3MpKQogCQkJaXBhdGhfcmN2X2hkcmVycihkZCwgZWZsYWdzLCBsLCBldGFpbCwgcmMpOwogCQllbHNlIGlmIChldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9OT05fS0QpIHsKLQkJCQlpbnQgcmV0ID0gX19pcGF0aF92ZXJic19yY3YoZGQsIHJjICsgMSwKLQkJCQkJCQkgICAgZWJ1ZiwgdGxlbik7Ci0JCQkJaWYgKHJldCA9PSAtRU5PREVWKQotCQkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsCi0JCQkJCQkgICAicmVjZWl2ZWQgSUIgcGFja2V0LCAiCi0JCQkJCQkgICAibm90IFNNQSAoUVA9JXgpXG4iLCBxcCk7Ci0JCQkJaWYgKGRkLT5pcGF0aF9sbGlfY291bnRlcikKLQkJCQkJZGQtPmlwYXRoX2xsaV9jb3VudGVyLS07Ci0KLQkJfSBlbHNlIGlmIChldHlwZSA9PSBSQ1ZIUV9SQ1ZfVFlQRV9FQUdFUikgewotCQkJaWYgKHFwID09IElQQVRIX0tEX1FQICYmCi0JCQkgICAgYnRoYnl0ZXNbMF0gPT0gaXBhdGhfbGF5ZXJfcmN2X29wY29kZSAmJgotCQkJICAgIGVidWYpCi0JCQkJaXBhdGhfcmN2X2xheWVyKGRkLCBldGFpbCwgdGxlbiwKLQkJCQkJCShzdHJ1Y3QgZXRoZXJfaGVhZGVyICopaGRyKTsKLQkJCWVsc2UKLQkJCQlpcGF0aF9jZGJnKFBLVCwgInR5cCAleCwgb3Bjb2RlICV4IChlYWdlciwgIgotCQkJCQkgICAicXA9JXgpLCBsZW4gJXg7IGlnbm9yZWRcbiIsCi0JCQkJCSAgIGV0eXBlLCBidGhieXRlc1swXSwgcXAsIHRsZW4pOworCQkJaXBhdGhfaWJfcmN2KGRkLT52ZXJic19kZXYsIHJjICsgMSwgZWJ1ZiwgdGxlbik7CisJCQlpZiAoZGQtPmlwYXRoX2xsaV9jb3VudGVyKQorCQkJCWRkLT5pcGF0aF9sbGlfY291bnRlci0tOworCQkJaXBhdGhfY2RiZyhQS1QsICJ0eXAgJXgsIG9wY29kZSAleCAoZWFnZXIsICIKKwkJCQkgICAicXA9JXgpLCBsZW4gJXg7IGlnbm9yZWRcbiIsCisJCQkJICAgZXR5cGUsIGJ0aGJ5dGVzWzBdLCBxcCwgdGxlbik7CiAJCX0KKwkJZWxzZSBpZiAoZXR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfRUFHRVIpCisJCQlpcGF0aF9jZGJnKFBLVCwgInR5cCAleCwgb3Bjb2RlICV4IChlYWdlciwgIgorCQkJCSAgICJxcD0leCksIGxlbiAleDsgaWdub3JlZFxuIiwKKwkJCQkgICBldHlwZSwgYnRoYnl0ZXNbMF0sIHFwLCB0bGVuKTsKIAkJZWxzZSBpZiAoZXR5cGUgPT0gUkNWSFFfUkNWX1RZUEVfRVhQRUNURUQpCiAJCQlpcGF0aF9kYmcoIkJ1ZzogRXhwZWN0ZWQgVElELCBvcGNvZGUgJXg7IGlnbm9yZWRcbiIsCiAJCQkJICBiZTMyX3RvX2NwdShoZHItPmJ0aFswXSkgJiAweGZmKTsKQEAgLTEwMjQsNyArOTY5LDggQEAKIAkJICovCiAJCWlmIChsID09IGhkcnF0YWlsIHx8IChpICYmICEoaSYweGYpKSkgewogCQkJdTY0IGx2YWw7Ci0JCQlpZiAobCA9PSBoZHJxdGFpbCkgLyogUEUtODAwIGludGVycnVwdCBvbmx5IG9uIGxhc3QgKi8KKwkJCWlmIChsID09IGhkcnF0YWlsKQorCQkJCS8qIHJlcXVlc3QgSUJBNjEyMCBpbnRlcnJ1cHQgb25seSBvbiBsYXN0ICovCiAJCQkJbHZhbCA9IGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiB8IGw7CiAJCQllbHNlCiAJCQkJbHZhbCA9IGw7CkBAIC0xMDM4LDcgKzk4NCw3IEBACiAJfQogCiAJaWYgKCFkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYgJiYgIXJlbG9vcCkgewotCQkvKiBIVC00MDAgd29ya2Fyb3VuZDsgd2UgY2FuIGhhdmUgYSByYWNlIGNsZWFyaW5nIGNoaXAKKwkJLyogSUJBNjExMCB3b3JrYXJvdW5kOyB3ZSBjYW4gaGF2ZSBhIHJhY2UgY2xlYXJpbmcgY2hpcAogCQkgKiBpbnRlcnJ1cHQgd2l0aCBhbm90aGVyIGludGVycnVwdCBhYm91dCB0byBiZSBkZWxpdmVyZWQsCiAJCSAqIGFuZCBjYW4gY2xlYXIgaXQgYmVmb3JlIGl0IGlzIGRlbGl2ZXJlZCBvbiB0aGUgR1BJTwogCQkgKiB3b3JrYXJvdW5kLiAgQnkgZG9pbmcgdGhlIGV4dHJhIGNoZWNrIGhlcmUgZm9yIHRoZQpAQCAtMTIxMSw3ICsxMTU3LDcgQEAKICAqCiAgKiBkbyBhcHByb3ByaWF0ZSBtYXJraW5nIGFzIGJ1c3ksIGV0Yy4KICAqIHJldHVybnMgYnVmZmVyIG51bWJlciBpZiBvbmUgZm91bmQgKD49MCksIG5lZ2F0aXZlIG51bWJlciBpcyBlcnJvci4KLSAqIFVzZWQgYnkgaXBhdGhfc21hX3NlbmRfcGt0IGFuZCBpcGF0aF9sYXllcl9zZW5kCisgKiBVc2VkIGJ5IGlwYXRoX2xheWVyX3NlbmQKICAqLwogdTMyIF9faW9tZW0gKmlwYXRoX2dldHBpb2J1ZihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiAqIHBidWZudW0pCiB7CkBAIC0xMzE3LDEzICsxMjYzLDYgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCWlmICh1cGRhdGVkKQotCQkvKgotCQkgKiByYW4gb3V0IG9mIGJ1ZnMsIG5vdyBzb21lIChhdCBsZWFzdCB0aGlzIG9uZSB3ZSBqdXN0Ci0JCSAqIGdvdCkgYXJlIG5vdyBhdmFpbGFibGUsIHNvIHRlbGwgdGhlIGxheWVyZWQgZHJpdmVyLgotCQkgKi8KLQkJX19pcGF0aF9sYXllcl9pbnRyKGRkLCBJUEFUSF9MQVlFUl9JTlRfU0VORF9DT05USU5VRSk7Ci0KIAkvKgogCSAqIHNldCBuZXh0IHN0YXJ0aW5nIHBsYWNlLiAgU2luY2UgaXQncyBqdXN0IGFuIG9wdGltaXphdGlvbiwKIAkgKiBpdCBkb2Vzbid0IG1hdHRlciB3aG8gd2lucyBvbiB0aGlzLCBzbyBubyBsb2NraW5nCkBAIC0xNTAwLDcgKzE0MzksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgaXBhdGhfc2V0X2liX2xzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCB3aGljaCkKK3N0YXRpYyB2b2lkIGlwYXRoX3NldF9pYl9sc3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgd2hpY2gpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKndoYXRbNF0gPSB7CiAJCVswXSA9ICJET1dOIiwKQEAgLTE1MTEsNyArMTQ1MCw3IEBACiAJaW50IGxpbmtjbWQgPSAod2hpY2ggPj4gSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpICYKIAkJCUlORklOSVBBVEhfSUJDQ19MSU5LQ01EX01BU0s7CiAKLQlpcGF0aF9jZGJnKFNNQSwgIlRyeWluZyB0byBtb3ZlIHVuaXQgJXUgdG8gJXMsIGN1cnJlbnQgbHRzdGF0ZSAiCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVHJ5aW5nIHRvIG1vdmUgdW5pdCAldSB0byAlcywgY3VycmVudCBsdHN0YXRlICIKIAkJICAgImlzICVzXG4iLCBkZC0+aXBhdGhfdW5pdCwKIAkJICAgd2hhdFtsaW5rY21kXSwKIAkJICAgaXBhdGhfaWJjc3RhdHVzX3N0clsKQEAgLTE1MjAsNyArMTQ1OSw3IEBACiAJCQkgICAgSU5GSU5JUEFUSF9JQkNTX0xJTktUUkFJTklOR1NUQVRFX1NISUZUKSAmCiAJCQkgICBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTS10pOwogCS8qIGZsdXNoIGFsbCBxdWV1ZWQgc2VuZHMgd2hlbiBnb2luZyB0byBET1dOIG9yIElOSVQsIHRvIGJlIHN1cmUgdGhhdAotCSAqIHRoZXkgZG9uJ3QgYmxvY2sgU01BIGFuZCBvdGhlciBNQUQgcGFja2V0cyAqLworCSAqIHRoZXkgZG9uJ3QgYmxvY2sgTUFEIHBhY2tldHMgKi8KIAlpZiAoIWxpbmtjbWQgfHwgbGlua2NtZCA9PSBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9JTklUKSB7CiAJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCiAJCQkJIElORklOSVBBVEhfU19BQk9SVCk7CkBAIC0xNTM0LDYgKzE0NzMsMTgwIEBACiAJCQkgZGQtPmlwYXRoX2liY2N0cmwgfCB3aGljaCk7CiB9CiAKK2ludCBpcGF0aF9zZXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTggbmV3c3RhdGUpCit7CisJdTMyIGxzdGF0ZTsKKwlpbnQgcmV0OworCisJc3dpdGNoIChuZXdzdGF0ZSkgeworCWNhc2UgSVBBVEhfSUJfTElOS0RPV046CisJCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9QT0xMIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisJCS8qIGRvbid0IHdhaXQgKi8KKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCisJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9TTEVFUDoKKwkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NMRUVQIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TSElGVCk7CisJCS8qIGRvbid0IHdhaXQgKi8KKwkJcmV0ID0gMDsKKwkJZ290byBiYWlsOworCisJY2FzZSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFOgorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfRElTQUJMRSA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOworCQkvKiBkb24ndCB3YWl0ICovCisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKworCWNhc2UgSVBBVEhfSUJfTElOS0lOSVQ6CisJCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LSU5JVCkgeworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9JTklUIDw8CisJCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKTsKKwkJbHN0YXRlID0gSVBBVEhfTElOS0lOSVQ7CisJCWJyZWFrOworCisJY2FzZSBJUEFUSF9JQl9MSU5LQVJNOgorCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSB7CisJCQlyZXQgPSAwOworCQkJZ290byBiYWlsOworCQl9CisJCWlmICghKGRkLT5pcGF0aF9mbGFncyAmCisJCSAgICAgIChJUEFUSF9MSU5LSU5JVCB8IElQQVRIX0xJTktBQ1RJVkUpKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BUk1FRCA8PAorCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCk7CisJCS8qCisJCSAqIFNpbmNlIHRoZSBwb3J0IGNhbiB0cmFuc2l0aW9uIHRvIEFDVElWRSBieSByZWNlaXZpbmcKKwkJICogYSBub24gVkwgMTUgcGFja2V0LCB3YWl0IGZvciBlaXRoZXIgc3RhdGUuCisJCSAqLworCQlsc3RhdGUgPSBJUEFUSF9MSU5LQVJNRUQgfCBJUEFUSF9MSU5LQUNUSVZFOworCQlicmVhazsKKworCWNhc2UgSVBBVEhfSUJfTElOS0FDVElWRToKKwkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpIHsKKwkJCXJldCA9IDA7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9BQ1RJVkUgPDwKKwkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpOworCQlsc3RhdGUgPSBJUEFUSF9MSU5LQUNUSVZFOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWlwYXRoX2RiZygiSW52YWxpZCBsaW5rc3RhdGUgMHgleCByZXF1ZXN0ZWRcbiIsIG5ld3N0YXRlKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwlyZXQgPSBpcGF0aF93YWl0X2xpbmtzdGF0ZShkZCwgbHN0YXRlLCAyMDAwKTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGlwYXRoX3NldF9tdHUgLSBzZXQgdGhlIE1UVQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBhcmc6IHRoZSBuZXcgTVRVCisgKgorICogd2UgY2FuIGhhbmRsZSAiYW55IiBpbmNvbWluZyBzaXplLCB0aGUgaXNzdWUgaGVyZSBpcyB3aGV0aGVyIHdlCisgKiBuZWVkIHRvIHJlc3RyaWN0IG91ciBvdXRnb2luZyBzaXplLiAgIEZvciBub3csIHdlIGRvbid0IGRvIGFueQorICogc2FuaXR5IGNoZWNraW5nIG9uIHRoaXMsIGFuZCB3ZSBkb24ndCBkZWFsIHdpdGggd2hhdCBoYXBwZW5zIHRvCisgKiBwcm9ncmFtcyB0aGF0IGFyZSBhbHJlYWR5IHJ1bm5pbmcgd2hlbiB0aGUgc2l6ZSBjaGFuZ2VzLgorICogTk9URTogY2hhbmdpbmcgdGhlIE1UVSB3aWxsIHVzdWFsbHkgY2F1c2UgdGhlIElCQyB0byBnbyBiYWNrIHRvCisgKiBsaW5rIGluaXRpYWxpemUgKElQQVRIX0lCU1RBVEVfSU5JVCkgc3RhdGUuLi4KKyAqLworaW50IGlwYXRoX3NldF9tdHUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYgYXJnKQoreworCXUzMiBwaW9zaXplOworCWludCBjaGFuZ2VkID0gMDsKKwlpbnQgcmV0OworCisJLyoKKwkgKiBtdHUgaXMgSUIgZGF0YSBwYXlsb2FkIG1heC4gIEl0J3MgdGhlIGxhcmdlc3QgcG93ZXIgb2YgMiBsZXNzCisJICogdGhhbiBwaW9zaXplIChvciBldmVuIGxhcmdlciwgc2luY2UgaXQgb25seSByZWFsbHkgY29udHJvbHMgdGhlCisJICogbGFyZ2VzdCB3ZSBjYW4gcmVjZWl2ZTsgd2UgY2FuIHNlbmQgdGhlIG1heCBvZiB0aGUgbXR1IGFuZAorCSAqIHBpb3NpemUpLiAgV2UgY2hlY2sgdGhhdCBpdCdzIG9uZSBvZiB0aGUgdmFsaWQgSUIgc2l6ZXMuCisJICovCisJaWYgKGFyZyAhPSAyNTYgJiYgYXJnICE9IDUxMiAmJiBhcmcgIT0gMTAyNCAmJiBhcmcgIT0gMjA0OCAmJgorCSAgICBhcmcgIT0gNDA5NikgeworCQlpcGF0aF9kYmcoIlRyeWluZyB0byBzZXQgaW52YWxpZCBtdHUgJXUsIGZhaWxpbmdcbiIsIGFyZyk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisJaWYgKGRkLT5pcGF0aF9pYm10dSA9PSBhcmcpIHsKKwkJcmV0ID0gMDsgICAgICAgIC8qIHNhbWUgYXMgY3VycmVudCAqLworCQlnb3RvIGJhaWw7CisJfQorCisJcGlvc2l6ZSA9IGRkLT5pcGF0aF9pYm1heGxlbjsKKwlkZC0+aXBhdGhfaWJtdHUgPSBhcmc7CisKKwlpZiAoYXJnID49IChwaW9zaXplIC0gSVBBVEhfUElPX01BWElCSERSKSkgeworCQkvKiBPbmx5IGlmIGl0J3Mgbm90IHRoZSBpbml0aWFsIHZhbHVlIChvciByZXNldCB0byBpdCkgKi8KKwkJaWYgKHBpb3NpemUgIT0gZGQtPmlwYXRoX2luaXRfaWJtYXhsZW4pIHsKKwkJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7CisJCQljaGFuZ2VkID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoKGFyZyArIElQQVRIX1BJT19NQVhJQkhEUikgIT0gZGQtPmlwYXRoX2libWF4bGVuKSB7CisJCXBpb3NpemUgPSBhcmcgKyBJUEFUSF9QSU9fTUFYSUJIRFI7CisJCWlwYXRoX2NkYmcoVkVSQk9TRSwgImlibWF4bGVuIHdhcyAweCV4LCBzZXR0aW5nIHRvIDB4JXggIgorCQkJICAgIihtdHUgMHgleClcbiIsIGRkLT5pcGF0aF9pYm1heGxlbiwgcGlvc2l6ZSwKKwkJCSAgIGFyZyk7CisJCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7CisJCWNoYW5nZWQgPSAxOworCX0KKworCWlmIChjaGFuZ2VkKSB7CisJCS8qCisJCSAqIHNldCB0aGUgSUJDIG1heHBrdGxlbmd0aCB0byB0aGUgc2l6ZSBvZiBvdXIgcGlvCisJCSAqIGJ1ZmZlcnMgaW4gd29yZHMKKwkJICovCisJCXU2NCBpYmMgPSBkZC0+aXBhdGhfaWJjY3RybDsKKwkJaWJjICY9IH4oSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9NQVNLIDw8CisJCQkgSU5GSU5JUEFUSF9JQkNDX01BWFBLVExFTl9TSElGVCk7CisKKwkJcGlvc2l6ZSA9IHBpb3NpemUgLSAyICogc2l6ZW9mKHUzMik7ICAgIC8qIGlnbm9yZSBwYmMgKi8KKwkJZGQtPmlwYXRoX2libWF4bGVuID0gcGlvc2l6ZTsKKwkJcGlvc2l6ZSAvPSBzaXplb2YodTMyKTsgLyogaW4gd29yZHMgKi8KKwkJLyoKKwkJICogZm9yIElDUkMsIHdoaWNoIHdlIG9ubHkgc2VuZCBpbiBkaWFnIHRlc3QgcGt0IG1vZGUsIGFuZAorCQkgKiB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQgZm9yIG10dQorCQkgKi8KKwkJcGlvc2l6ZSArPSAxOworCisJCWliYyB8PSBwaW9zaXplIDw8IElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fU0hJRlQ7CisJCWRkLT5pcGF0aF9pYmNjdHJsID0gaWJjOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwkJZGQtPmlwYXRoX2ZfdGlkdGVtcGxhdGUoZGQpOworCX0KKworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoX3NldF9saWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgYXJnLCB1OCBsbWMpCit7CisJZGQtPmlwYXRoX2xpZCA9IGFyZzsKKwlkZC0+aXBhdGhfbG1jID0gbG1jOworCisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogaXBhdGhfcmVhZF9rcmVnNjRfcG9ydCAtIHJlYWQgYSBkZXZpY2UncyBwZXItcG9ydCA2NC1iaXQga2VybmVsIHJlZ2lzdGVyCiAgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQpAQCAtMTYzNywxMyArMTc1MCw2IEBACiAJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUgPDwKIAkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOwogCi0JLyoKLQkgKiB3ZSBhcmUgc2h1dHRpbmcgZG93biwgc28gdGVsbCB0aGUgbGF5ZXJlZCBkcml2ZXIuICBXZSBkb24ndCBkbwotCSAqIHRoaXMgb24ganVzdCBhIGxpbmsgc3RhdGUgY2hhbmdlLCBtdWNoIGxpa2UgZXRoZXJuZXQsIGEgY2FibGUKLQkgKiB1bnBsdWcsIGV0Yy4gZG9lc24ndCBjaGFuZ2UgZHJpdmVyIHN0YXRlCi0JICovCi0JaXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX0lGX0RPV04pOwotCiAJLyogZGlzYWJsZSBJQkMgKi8KIAlkZC0+aXBhdGhfY29udHJvbCAmPSB+SU5GSU5JUEFUSF9DX0xJTktFTkFCTEU7CiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9jb250cm9sLApAQCAtMTc0Myw3ICsxODQ5LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JaXBhdGhfZGJnKEtFUk5fSU5GTyBEUklWRVJfTE9BRF9NU0cgIiVzIiwgaXBhdGhfY29yZV92ZXJzaW9uKTsKKwlpcGF0aF9kYmcoS0VSTl9JTkZPIERSSVZFUl9MT0FEX01TRyAiJXMiLCBpYl9pcGF0aF92ZXJzaW9uKTsKIAogCS8qCiAJICogVGhlc2UgbXVzdCBiZSBjYWxsZWQgYmVmb3JlIHRoZSBkcml2ZXIgaXMgcmVnaXN0ZXJlZCB3aXRoCkBAIC0xNzc2LDggKzE4ODIsMTggQEAKIAkJZ290byBiYWlsX2dyb3VwOwogCX0KIAorCXJldCA9IGlwYXRoX2RpYWdwa3RfYWRkKCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIElQQVRIX0RSVl9OQU1FICI6IFVuYWJsZSB0byBjcmVhdGUgIgorCQkgICAgICAgImRpYWcgZGF0YSBkZXZpY2U6IGVycm9yICVkXG4iLCAtcmV0KTsKKwkJZ290byBiYWlsX2lwYXRoZnM7CisJfQorCiAJZ290byBiYWlsOwogCitiYWlsX2lwYXRoZnM6CisJaXBhdGhfZXhpdF9pcGF0aGZzKCk7CisKIGJhaWxfZ3JvdXA6CiAJaXBhdGhfZHJpdmVyX3JlbW92ZV9ncm91cCgmaXBhdGhfZHJpdmVyLmRyaXZlcik7CiAKQEAgLTE4ODgsNiArMjAwNCw4IEBACiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlpcGF0aF9kaWFncGt0X3JlbW92ZSgpOworCiAJaXBhdGhfZXhpdF9pcGF0aGZzKCk7CiAKIAlpcGF0aF9kcml2ZXJfcmVtb3ZlX2dyb3VwKCZpcGF0aF9kcml2ZXIuZHJpdmVyKTsKQEAgLTE5OTgsNSArMjExNiwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBpcGF0aF9zZXRfcnhfcG9sX2ludihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IG5ld19wb2xfaW52KQoreworCXU2NCB2YWw7CisJaWYgKCBuZXdfcG9sX2ludiA+IElORklOSVBBVEhfWEdYU19SWF9QT0xfTUFTSyApIHsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIGRkLT5pcGF0aF9yeF9wb2xfaW52ICE9IG5ld19wb2xfaW52ICkgeworCQlkZC0+aXBhdGhfcnhfcG9sX2ludiA9IG5ld19wb2xfaW52OworCQl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnKTsKKwkJdmFsICY9IH4oSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLIDw8CisJCQkgSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9TSElGVCk7CisJCXZhbCB8PSAoKHU2NClkZC0+aXBhdGhfcnhfcG9sX2ludikgPDwKKwkJCUlORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQ7CisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZywgdmFsKTsKKwl9CisJcmV0dXJuIDA7Cit9CiBtb2R1bGVfaW5pdChpbmZpbmlwYXRoX2luaXQpOwogbW9kdWxlX2V4aXQoaW5maW5pcGF0aF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKaW5kZXggYmJhYTcwZS4uMjk5MzBlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZpbGVfb3BzLmMKQEAgLTM5LDcgKzM5LDYgQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCi0jaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogc3RhdGljIGludCBpcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKQEAgLTk4NSwxNSArOTg0LDE3IEBACiAJICogd3JpdGUgY29tYmluaW5nIGJlaGF2aW9yIHdlIHdhbnQgb24gdGhlIFBJTyBidWZmZXJzIQogCSAqLwogCi0JaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9SRUFEKSB7Ci0JCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCi0JCQkgIkNhbid0IG1hcCBwaW9idWZzIGFzIHJlYWRhYmxlIChmbGFncz0lbHgpXG4iLAotCQkJIHZtYS0+dm1fZmxhZ3MpOwotCQlyZXQgPSAtRVBFUk07Ci0JCWdvdG8gYmFpbDsKLQl9CisjaWYgZGVmaW5lZChfX3Bvd2VycGNfXykKKwkvKiBUaGVyZSBpc24ndCBhIGdlbmVyaWMgd2F5IHRvIHNwZWNpZnkgd3JpdGV0aHJvdWdoIG1hcHBpbmdzICovCisJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfTk9fQ0FDSEU7CisJcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCkgfD0gX1BBR0VfV1JJVEVUSFJVOworCXBncHJvdF92YWwodm1hLT52bV9wYWdlX3Byb3QpICY9IH5fUEFHRV9HVUFSREVEOworI2VuZGlmCiAKLQkvKiBkb24ndCBhbGxvdyB0aGVtIHRvIGxhdGVyIGNoYW5nZSB0byByZWFkYWJsZSB3aXRoIG1wcm90ZWN0ICovCisJLyoKKwkgKiBkb24ndCBhbGxvdyB0aGVtIHRvIGxhdGVyIGNoYW5nZSB0byByZWFkYWJsZSB3aXRoIG1wcm90ZWN0IChmb3Igd2hlbgorCSAqIG5vdCBpbml0aWFsbHkgbWFwcGVkIHJlYWRhYmxlLCBhcyBpcyBub3JtYWxseSB0aGUgY2FzZSkKKwkgKi8KIAl2bWEtPnZtX2ZsYWdzICY9IH5WTV9NQVlSRUFEOwogCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVENPUFkgfCBWTV9ET05URVhQQU5EOwogCkBAIC0xMTA5LDcgKzExMTAsNyBAQAogCQlyZXQgPSBtbWFwX3JjdmVncmJ1ZnModm1hLCBwZCk7CiAJZWxzZSBpZiAocGdhZGRyID09ICh1NjQpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cykgewogCQkvKgotCQkgKiBUaGUgcmN2aGRycSBpdHNlbGY7IHJlYWRvbmx5IGV4Y2VwdCBvbiBIVC00MDAgKHNvIGhhdmUKKwkJICogVGhlIHJjdmhkcnEgaXRzZWxmOyByZWFkb25seSBleGNlcHQgb24gSFQgKHNvIGhhdmUKIAkJICogdG8gYWxsb3cgd3JpdGFibGUgbWFwcGluZyksIG11bHRpcGxlIHBhZ2VzLCBjb250aWd1b3VzCiAJCSAqIGZyb20gYW4gaS9vIHBlcnNwZWN0aXZlLgogCQkgKi8KQEAgLTExNDksNiArMTE1MCw3IEBACiAJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKIAl1MzIgaGVhZCwgdGFpbDsKIAlpbnQgYml0OworCXVuc2lnbmVkIHBvbGxmbGFnID0gMDsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAKIAlwZCA9IHBvcnRfZnAoZnApOwpAQCAtMTE4NSw5ICsxMTg3LDEyIEBACiAJCQljbGVhcl9iaXQoSVBBVEhfUE9SVF9XQUlUSU5HX1JDViwgJnBkLT5wb3J0X2ZsYWcpOwogCQkJcGQtPnBvcnRfcmN2d2FpdF90bysrOwogCQl9CisJCWVsc2UKKwkJCXBvbGxmbGFnID0gUE9MTElOIHwgUE9MTFJETk9STTsKIAl9CiAJZWxzZSB7CiAJCS8qIGl0J3MgYWxyZWFkeSBoYXBwZW5lZDsgZG9uJ3QgZG8gd2FpdF9ldmVudCBvdmVyaGVhZCAqLworCQlwb2xsZmxhZyA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAJCXBkLT5wb3J0X3Jjdm5vd2FpdCsrOwogCX0KIApAQCAtMTE5NSw3ICsxMjAwLDcgQEAKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCiAJCQkgZGQtPmlwYXRoX3JjdmN0cmwpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBvbGxmbGFnOwogfQogCiBzdGF0aWMgaW50IHRyeV9hbGxvY19wb3J0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgaW50IHBvcnQsCkBAIC0xMjk3LDE0ICsxMzAyLDE0IEBACiAJICogVGhpcyBjb2RlIGlzIHByZXNlbnQgdG8gYWxsb3cgYSBrbm93bGVkZ2VhYmxlIHBlcnNvbiB0bwogCSAqIHNwZWNpZnkgdGhlIGxheW91dCBvZiBwcm9jZXNzZXMgdG8gcHJvY2Vzc29ycyBiZWZvcmUgb3BlbmluZwogCSAqIHRoaXMgZHJpdmVyLCBhbmQgdGhlbiB3ZSdsbCBhc3NpZ24gdGhlIHByb2Nlc3MgdG8gdGhlICJjbG9zZXN0IgotCSAqIEhULTQwMCB0byB0aGF0IHByb2Nlc3NvciAod2UgYXNzdW1lIHJlYXNvbmFibGUgY29ubmVjdGl2aXR5LAorCSAqIEluZmluaVBhdGggY2hpcCB0byB0aGF0IHByb2Nlc3NvciAod2UgYXNzdW1lIHJlYXNvbmFibGUgY29ubmVjdGl2aXR5LAogCSAqIGZvciBub3cpLiAgVGhpcyBjb2RlIGFzc3VtZXMgdGhhdCBpZiBhZmZpbml0eSBoYXMgYmVlbiBzZXQKIAkgKiBiZWZvcmUgdGhpcyBwb2ludCwgdGhhdCBhdCBtb3N0IG9uZSBjcHUgaXMgc2V0OyBmb3Igbm93IHRoaXMKIAkgKiBpcyByZWFzb25hYmxlLiAgSSBjaGVjayBmb3IgYm90aCBjcHVzX2VtcHR5KCkgYW5kIGNwdXNfZnVsbCgpLAogCSAqIGluIGNhc2Ugc29tZSBrZXJuZWwgdmFyaWFudCBzZXRzIG5vbmUgb2YgdGhlIGJpdHMgd2hlbiBubwogCSAqIGFmZmluaXR5IGlzIHNldC4gIDIuNi4xMSBhbmQgMTIga2VybmVscyBoYXZlIGFsbCBwcmVzZW50CiAJICogY3B1cyBzZXQuICBTb21lIGRheSB3ZSdsbCBoYXZlIHRvIGZpeCBpdCB1cCBmdXJ0aGVyIHRvIGhhbmRsZQotCSAqIGEgY3B1IHN1YnNldC4gIFRoaXMgYWxnb3JpdGhtIGZhaWxzIGZvciB0d28gSFQtNDAwJ3MgY29ubmVjdGVkCisJICogYSBjcHUgc3Vic2V0LiAgVGhpcyBhbGdvcml0aG0gZmFpbHMgZm9yIHR3byBIVCBjaGlwcyBjb25uZWN0ZWQKIAkgKiBpbiB0dW5uZWwgZmFzaGlvbi4gIEV2ZW50dWFsbHkgdGhpcyBuZWVkcyByZWFsIHRvcG9sb2d5CiAJICogaW5mb3JtYXRpb24uICBUaGVyZSBtYXkgYmUgc29tZSBpc3N1ZXMgd2l0aCBkdWFsIGNvcmUgbnVtYmVyaW5nCiAJICogYXMgd2VsbC4gIFRoaXMgbmVlZHMgbW9yZSB3b3JrIHByaW9yIHRvIHJlbGVhc2UuCkBAIC0xODE1LDcgKzE4MjAsNyBAQAogCQlpZiAocmV0IDwgMCkgewogCQkJaXBhdGhfZGV2X2VycihkZCwgIkNvdWxkIG5vdCBjcmVhdGUgd2lsZGNhcmQgIgogCQkJCSAgICAgICJtaW5vcjogZXJyb3IgJWRcbiIsIC1yZXQpOwotCQkJZ290byBiYWlsX3NtYTsKKwkJCWdvdG8gYmFpbF91c2VyOwogCQl9CiAKIAkJYXRvbWljX3NldCgmdXNlcl9zZXR1cCwgMSk7CkBAIC0xODMxLDcgKzE4MzYsNyBAQAogCiAJZ290byBiYWlsOwogCi1iYWlsX3NtYToKK2JhaWxfdXNlcjoKIAl1c2VyX2NsZWFudXAoKTsKIGJhaWw6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKaW5kZXggMDkzNmQ4ZS4uYTVlYjMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMKQEAgLTE5MSw4ICsxOTEsOCBAQAogCXBvcnRpbmZvWzRdID0gKGRkLT5pcGF0aF9saWQgPDwgMTYpOwogCiAJLyoKLQkgKiBOb3RpbXBsIHlldCBTTUxJRCAoc2hvdWxkIHdlIHN0b3JlIHRoaXMgaW4gdGhlIGRyaXZlciwgaW4gY2FzZQotCSAqIFNNQSBkaWVzPykgIENhcGFiaWxpdHlNYXNrIGlzIDAsIHdlIGRvbid0IHN1cHBvcnQgYW55IG9mIHRoZXNlCisJICogTm90aW1wbCB5ZXQgU01MSUQuCisJICogQ2FwYWJpbGl0eU1hc2sgaXMgMCwgd2UgZG9uJ3Qgc3VwcG9ydCBhbnkgb2YgdGhlc2UKIAkgKiBEaWFnQ29kZSBpcyAwOyB3ZSBkb24ndCBzdG9yZSBhbnkgZGlhZyBpbmZvIGZvciBub3cgTm90aW1wbCB5ZXQKIAkgKiBNX0tleUxlYXNlUGVyaW9kICh3ZSBkb24ndCBzdXBwb3J0IE1fS2V5KQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2h0NDAwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCnNpbWlsYXJpdHkgaW5kZXggOTYlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9odDQwMC5jCnJlbmFtZSB0byBkcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCmluZGV4IDNkYjAxNWQuLmJmMjQ1NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9odDQwMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb2YgdGhlIGNvZGUgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUgSW5maW5pUGF0aAotICogSFQtNDAwIGNoaXAuCisgKiBIVCBjaGlwLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KQEAgLTQzLDcgKzQzLDcgQEAKICNpbmNsdWRlICJpcGF0aF9yZWdpc3RlcnMuaCIKIAogLyoKLSAqIFRoaXMgbGlzdHMgdGhlIEluZmluaVBhdGggSFQ0MDAgcmVnaXN0ZXJzLCBpbiB0aGUgYWN0dWFsIGNoaXAgbGF5b3V0LgorICogVGhpcyBsaXN0cyB0aGUgSW5maW5pUGF0aCByZWdpc3RlcnMsIGluIHRoZSBhY3R1YWwgY2hpcCBsYXlvdXQuCiAgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgbmV2ZXIgYmUgZGlyZWN0bHkgYWNjZXNzZWQuCiAgKgogICogVGhlIG5hbWVzIGFyZSBpbiBJbnRlckNhcCBmb3JtIGJlY2F1c2UgdGhleSdyZSB0YWtlbiBzdHJhaWdodCBmcm9tCkBAIC00NjEsOCArNDYxLDkgQEAKIAkJCSAqIHRpbWVzLgogCQkJICovCiAJCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkgewotCQkJCWlwYXRoX2Rldl9lcnIoZGQsICJGYXRhbCBFcnJvciAoZnJlZXplICIKLQkJCQkJICAgICAgIm1vZGUpLCBubyBsb25nZXIgdXNhYmxlXG4iKTsKKwkJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmF0YWwgSGFyZHdhcmUgRXJyb3IgKGZyZWV6ZSAiCisJCQkJCSAgICAgICJtb2RlKSwgbm8gbG9uZ2VyIHVzYWJsZSwgU04gJS4xNnNcbiIsCisJCQkJCQkgIGRkLT5pcGF0aF9zZXJpYWwpOwogCQkJCWlzZmF0YWwgPSAxOwogCQkJfQogCQkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfSUJfUkVBRFk7CkBAIC01MzcsNyArNTM4LDcgQEAKIAlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjcpCiAJCXN0cmxjYXQobXNnLCAiW0hUIGNvcmUgTWlzYzddIiwgbXNnbCk7CiAJaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQpIHsKLQkJc3RybGNhdChtc2csICJbTWVtb3J5IEJJU1QgdGVzdCBmYWlsZWQsIEhULTQwMCB1bnVzYWJsZV0iLAorCQlzdHJsY2F0KG1zZywgIltNZW1vcnkgQklTVCB0ZXN0IGZhaWxlZCwgSW5maW5pUGF0aCBoYXJkd2FyZSB1bnVzYWJsZV0iLAogCQkJbXNnbCk7CiAJCS8qIGlnbm9yZSBmcm9tIG5vdyBvbiwgc28gZGlzYWJsZSB1bnRpbCBkcml2ZXIgcmVsb2FkZWQgKi8KIAkJZGQtPmlwYXRoX2h3ZXJybWFzayAmPSB+SU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRDsKQEAgLTU1Myw3ICs1NTQsNyBAQAogCiAJaWYgKGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCkgewogCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywKLQkJCSAiW1BMTCBmYWlsZWQgKCVsbHgpLCBIVC00MDAgdW51c2FibGVdIiwKKwkJCSAiW1BMTCBmYWlsZWQgKCVsbHgpLCBJbmZpbmlQYXRoIGhhcmR3YXJlIHVudXNhYmxlXSIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgKGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCkpOwogCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7CiAJCS8qIGlnbm9yZSBmcm9tIG5vdyBvbiwgc28gZGlzYWJsZSB1bnRpbCBkcml2ZXIgcmVsb2FkZWQgKi8KQEAgLTYxMCwxOCArNjExLDE4IEBACiAJCWJyZWFrOwogCWNhc2UgNToKIAkJLyoKLQkJICogSFQtNDYwIG9yaWdpbmFsIHByb2R1Y3Rpb24gYm9hcmQ7IHR3byBwcm9kdWN0aW9uIGxldmVscywgd2l0aAorCQkgKiBvcmlnaW5hbCBwcm9kdWN0aW9uIGJvYXJkOyB0d28gcHJvZHVjdGlvbiBsZXZlbHMsIHdpdGgKIAkJICogZGlmZmVyZW50IHNlcmlhbCBudW1iZXIgcmFuZ2VzLiAgIFNlZSBpcGF0aF9odF9lYXJseV9pbml0KCkgZm9yCiAJCSAqIGNhc2Ugd2hlcmUgd2UgZW5hYmxlIElQQVRIX0dQSU9fSU5UUiBmb3IgbGF0ZXIgc2VyaWFsICMgcmFuZ2UuCiAJCSAqLwotCQluID0gIkluZmluaVBhdGhfSFQtNDYwIjsKKwkJbiA9ICJJbmZpbmlQYXRoX1FIVDcwNDAiOwogCQlicmVhazsKIAljYXNlIDY6CiAJCW4gPSAiT0VNX0JvYXJkXzMiOwogCQlicmVhazsKIAljYXNlIDc6Ci0JCS8qIEhULTQ2MCBzbWFsbCBmb3JtIGZhY3RvciBwcm9kdWN0aW9uIGJvYXJkICovCi0JCW4gPSAiSW5maW5pUGF0aF9IVC00NjUiOworCQkvKiBzbWFsbCBmb3JtIGZhY3RvciBwcm9kdWN0aW9uIGJvYXJkICovCisJCW4gPSAiSW5maW5pUGF0aF9RSFQ3MTQwIjsKIAkJYnJlYWs7CiAJY2FzZSA4OgogCQluID0gIkxTL1gtMSI7CkBAIC02MzMsNyArNjM0LDcgQEAKIAkJbiA9ICJPRU1fQm9hcmRfMiI7CiAJCWJyZWFrOwogCWNhc2UgMTE6Ci0JCW4gPSAiSW5maW5pUGF0aF9IVC00NzAiOworCQluID0gIkluZmluaVBhdGhfSFQtNDcwIjsgLyogb2Jzb2xldGVkICovCiAJCWJyZWFrOwogCWNhc2UgMTI6CiAJCW4gPSAiT0VNX0JvYXJkXzQiOwpAQCAtNjQxLDcgKzY0Miw3IEBACiAJZGVmYXVsdDoJCS8qIGRvbid0IGtub3csIGp1c3QgcHJpbnQgdGhlIG51bWJlciAqLwogCQlpcGF0aF9kZXZfZXJyKGRkLCAiRG9uJ3QgeWV0IGtub3cgYWJvdXQgYm9hcmQgIgogCQkJICAgICAgIndpdGggSUQgJXVcbiIsIGJvYXJkcmV2KTsKLQkJc25wcmludGYobmFtZSwgbmFtZWxlbiwgIlVua25vd25fSW5maW5pUGF0aF9IVC00eHhfJXUiLAorCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiVW5rbm93bl9JbmZpbmlQYXRoX1FIVDd4eHhfJXUiLAogCQkJIGJvYXJkcmV2KTsKIAkJYnJlYWs7CiAJfQpAQCAtNjUwLDExICs2NTEsMTAgQEAKIAogCWlmIChkZC0+aXBhdGhfbWFqcmV2ICE9IDMgfHwgKGRkLT5pcGF0aF9taW5yZXYgPCAyIHx8IGRkLT5pcGF0aF9taW5yZXYgPiAzKSkgewogCQkvKgotCQkgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBIVC00MDAKLQkJICogUmV2IDMuMgorCQkgKiBUaGlzIHZlcnNpb24gb2YgdGhlIGRyaXZlciBvbmx5IHN1cHBvcnRzIFJldiAzLjIgYW5kIDMuMwogCQkgKi8KIAkJaXBhdGhfZGV2X2VycihkZCwKLQkJCSAgICAgICJVbnN1cHBvcnRlZCBIVC00MDAgcmV2aXNpb24gJXUuJXUhXG4iLAorCQkJICAgICAgIlVuc3VwcG9ydGVkIEluZmluaVBhdGggaGFyZHdhcmUgcmV2aXNpb24gJXUuJXUhXG4iLAogCQkJICAgICAgZGQtPmlwYXRoX21hanJldiwgZGQtPmlwYXRoX21pbnJldik7CiAJCXJldCA9IDE7CiAJCWdvdG8gYmFpbDsKQEAgLTczOCw3ICs3MzgsNyBAQAogCiBzdGF0aWMgaW50IGlwYXRoX3NldHVwX2h0X3Jlc2V0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKLQlpcGF0aF9kYmcoIk5vIHJlc2V0IHBvc3NpYmxlIGZvciBIVC00MDBcbiIpOworCWlwYXRoX2RiZygiTm8gcmVzZXQgcG9zc2libGUgZm9yIHRoaXMgSW5maW5pUGF0aCBoYXJkd2FyZVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNSw3ICs5MjUsNyBAQAogCiAJLyoKIAkgKiBrZXJuZWxzIHdpdGggQ09ORklHX1BDSV9NU0kgc2V0IHRoZSB2ZWN0b3IgaW4gdGhlIGlycSBmaWVsZCBvZgotCSAqIHN0cnVjdCBwY2lfZGV2aWNlLCBzbyB3ZSB1c2UgdGhhdCB0byBwcm9ncmFtIHRoZSBIVC00MDAgaW50ZXJuYWwKKwkgKiBzdHJ1Y3QgcGNpX2RldmljZSwgc28gd2UgdXNlIHRoYXQgdG8gcHJvZ3JhbSB0aGUgaW50ZXJuYWwKIAkgKiBpbnRlcnJ1cHQgcmVnaXN0ZXIgKG5vdCBjb25maWcgc3BhY2UpIHdpdGggdGhhdCB2YWx1ZS4gVGhlIEJJT1MKIAkgKiBtdXN0IHN0aWxsIGhhdmUgZG9uZSB0aGUgYmFzaWMgTVNJIHNldHVwLgogCSAqLwpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKICAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCiAgKgogICogQ2FsbGVkIGR1cmluZyBkcml2ZXIgdW5sb2FkLgotICogVGhpcyBpcyBjdXJyZW50bHkgYSBub3AgZm9yIHRoZSBIVC00MDAsIG5vdCBmb3IgYWxsIGNoaXBzCisgKiBUaGlzIGlzIGN1cnJlbnRseSBhIG5vcCBmb3IgdGhlIEhUIGNoaXAsIG5vdCBmb3IgYWxsIGNoaXBzCiAgKi8KIHN0YXRpYyB2b2lkIGlwYXRoX3NldHVwX2h0X2NsZWFudXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewpAQCAtMTI5MCw2ICsxMjkwLDE1IEBACiAJCXZhbCAmPSB+SU5GSU5JUEFUSF9YR1hTX1JFU0VUOwogCQljaGFuZ2UgPSAxOwogCX0KKwlpZiAoKCh2YWwgPj4gSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9TSElGVCkgJgorCSAgICAgSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLKSAhPSBkZC0+aXBhdGhfcnhfcG9sX2ludiApIHsKKwkJLyogbmVlZCB0byBjb21wZW5zYXRlIGZvciBUeCBpbnZlcnNpb24gaW4gcGFydG5lciAqLworCQl2YWwgJj0gfihJTkZJTklQQVRIX1hHWFNfUlhfUE9MX01BU0sgPDwKKwkJICAgICAgICAgSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9TSElGVCk7CisJCXZhbCB8PSBkZC0+aXBhdGhfcnhfcG9sX2ludiA8PAorCQkJSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9TSElGVDsKKwkJY2hhbmdlID0gMTsKKwl9CiAJaWYgKGNoYW5nZSkKIAkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl94Z3hzY29uZmlnLCB2YWwpOwogCkBAIC0xNDcwLDcgKzE0NzksNyBAQAogCWRkLT5pcGF0aF9yY3ZoZHJzaXplID0gSVBBVEhfREZMVF9SQ1ZIRFJTSVpFOwogCiAJLyoKLQkgKiBGb3IgSFQtNDAwLCB3ZSBhbGxvY2F0ZSBhIHNvbWV3aGF0IG92ZXJseSBsYXJnZSBlYWdlciBidWZmZXIsCisJICogRm9yIEhULCB3ZSBhbGxvY2F0ZSBhIHNvbWV3aGF0IG92ZXJseSBsYXJnZSBlYWdlciBidWZmZXIsCiAJICogc3VjaCB0aGF0IHdlIGNhbiBndWFyYW50ZWUgdGhhdCB3ZSBjYW4gcmVjZWl2ZSB0aGUgbGFyZ2VzdAogCSAqIHBhY2tldCB0aGF0IHdlIGNhbiBzZW5kIG91dC4gIFRvIHRydWx5IHN1cHBvcnQgYSA0S0IgTVRVLAogCSAqIHdlIG5lZWQgdG8gYnVtcCB0aGlzIHRvIGEgbGFyZ2UgdmFsdWUuICBUbyBkYXRlLCBvdGhlciB0aGFuCkBAIC0xNTMxLDcgKzE1NDAsNyBAQAogCWlmKGRkLT5pcGF0aF9ib2FyZHJldiA9PSA1ICYmIGRkLT5pcGF0aF9zZXJpYWxbMF0gPT0gJzEnICYmCiAJCWRkLT5pcGF0aF9zZXJpYWxbMV0gPT0gJzInICYmIGRkLT5pcGF0aF9zZXJpYWxbMl0gPT0gJzgnKSB7CiAJCS8qCi0JCSAqIExhdGVyIHByb2R1Y3Rpb24gSFQtNDYwIGhhcyBzYW1lIGNoYW5nZXMgYXMgSFQtNDY1LCBzbworCQkgKiBMYXRlciBwcm9kdWN0aW9uIFFIVDcwNDAgaGFzIHNhbWUgY2hhbmdlcyBhcyBRSFQ3MTQwLCBzbwogCQkgKiBjYW4gdXNlIEdQSU8gaW50ZXJydXB0cy4gIFRoZXkgaGF2ZSBzZXJpYWwgIydzIHN0YXJ0aW5nCiAJCSAqIHdpdGggMTI4LCByYXRoZXIgdGhhbiAxMTIuCiAJCSAqLwpAQCAtMTU2MCwxMyArMTU2OSwxMyBAQAogfQogCiAvKioKLSAqIGlwYXRoX2luaXRfaHQ0MDBfZnVuY3MgLSBzZXQgdXAgdGhlIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMKKyAqIGlwYXRoX2luaXRfaWJhNjExMF9mdW5jcyAtIHNldCB1cCB0aGUgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycwogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKICAqCiAgKiBUaGlzIGlzIGdsb2JhbCwgYW5kIGlzIGNhbGxlZCBkaXJlY3RseSBhdCBpbml0IHRvIHNldCB1cCB0aGUKICAqIGNoaXAtc3BlY2lmaWMgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIGxhdGVyIHVzZS4KICAqLwotdm9pZCBpcGF0aF9pbml0X2h0NDAwX2Z1bmNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3ZvaWQgaXBhdGhfaW5pdF9pYmE2MTEwX2Z1bmNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKIAlkZC0+aXBhdGhfZl9pbnRyc2V0dXAgPSBpcGF0aF9odF9pbnRjb25maWc7CiAJZGQtPmlwYXRoX2ZfYnVzID0gaXBhdGhfc2V0dXBfaHRfY29uZmlnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3BlODAwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCnNpbWlsYXJpdHkgaW5kZXggOTQlCnJlbmFtZSBmcm9tIGRyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9wZTgwMC5jCnJlbmFtZSB0byBkcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCmluZGV4IGI4M2Y2NmQuLmQ4NjUxNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9wZTgwMC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqLwogLyoKICAqIFRoaXMgZmlsZSBjb250YWlucyBhbGwgb2YgdGhlIGNvZGUgdGhhdCBpcyBzcGVjaWZpYyB0byB0aGUKLSAqIEluZmluaVBhdGggUEUtODAwIGNoaXAuCisgKiBJbmZpbmlQYXRoIFBDSWUgY2hpcC4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CkBAIC00NSw5ICs0NSw5IEBACiAKIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBjaGlwLXNwZWNpZmljIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGFuZAotICogYWNjZXNzIGZ1bmN0aW9ucyBmb3IgdGhlIFFMb2dpYyBJbmZpbmlQYXRoIFBFODAwLCB0aGUgUENJLUV4cHJlc3MgY2hpcC4KKyAqIGFjY2VzcyBmdW5jdGlvbnMgZm9yIHRoZSBRTG9naWMgSW5maW5pUGF0aCBQQ0ktRXhwcmVzcyBjaGlwLgogICoKLSAqIFRoaXMgbGlzdHMgdGhlIEluZmluaVBhdGggUEU4MDAgcmVnaXN0ZXJzLCBpbiB0aGUgYWN0dWFsIGNoaXAgbGF5b3V0LgorICogVGhpcyBsaXN0cyB0aGUgSW5maW5pUGF0aCByZWdpc3RlcnMsIGluIHRoZSBhY3R1YWwgY2hpcCBsYXlvdXQuCiAgKiBUaGlzIHN0cnVjdHVyZSBzaG91bGQgbmV2ZXIgYmUgZGlyZWN0bHkgYWNjZXNzZWQuCiAgKi8KIHN0cnVjdCBfaW5maW5pcGF0aF9kb19ub3RfdXNlX2tlcm5lbF9yZWdzIHsKQEAgLTIxMyw3ICsyMTMsNiBAQAogCS5rcl9yY3ZoZHJhZGRyID0gSVBBVEhfS1JFR19PRkZTRVQoUmN2SGRyQWRkcjApLAogCS5rcl9yY3ZoZHJ0YWlsYWRkciA9IElQQVRIX0tSRUdfT0ZGU0VUKFJjdkhkclRhaWxBZGRyMCksCiAKLQkvKiBUaGlzIGdyb3VwIGlzIHBlLTgwMC1zcGVjaWZpYzsgYW5kIHVzZWQgb25seSBpbiB0aGlzIGZpbGUgKi8KIAkvKiBUaGUgcmN2cGt0bGVkIHJlZ2lzdGVyIGNvbnRyb2xzIG9uZSBvZiB0aGUgZGVidWcgcG9ydCBzaWduYWxzLCBzbwogCSAqIGEgcGFja2V0IGFjdGl2aXR5IExFRCBjYW4gYmUgY29ubmVjdGVkIHRvIGl0LiAqLwogCS5rcl9yY3Zwa3RsZWRjbnQgPSBJUEFUSF9LUkVHX09GRlNFVChSY3ZQa3RMRURDbnQpLApAQCAtMzY0LDggKzM2Myw5IEBACiAJCQkgKiBhbmQgd2UgZ2V0IGhlcmUgbXVsdGlwbGUgdGltZXMKIAkJCSAqLwogCQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpIHsKLQkJCQlpcGF0aF9kZXZfZXJyKGRkLCAiRmF0YWwgRXJyb3IgKGZyZWV6ZSAiCi0JCQkJCSAgICAgICJtb2RlKSwgbm8gbG9uZ2VyIHVzYWJsZVxuIik7CisJCQkJaXBhdGhfZGV2X2VycihkZCwgIkZhdGFsIEhhcmR3YXJlIEVycm9yIChmcmVlemUgIgorCQkJCQkgICAgICAibW9kZSksIG5vIGxvbmdlciB1c2FibGUsIFNOICUuMTZzXG4iLAorCQkJCQkJICBkZC0+aXBhdGhfc2VyaWFsKTsKIAkJCQlpc2ZhdGFsID0gMTsKIAkJCX0KIAkJCS8qCkBAIC0zODgsNyArMzg4LDcgQEAKIAkqbXNnID0gJ1wwJzsKIAogCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9NRU1CSVNURkFJTEVEKSB7Ci0JCXN0cmxjYXQobXNnLCAiW01lbW9yeSBCSVNUIHRlc3QgZmFpbGVkLCBQRS04MDAgdW51c2FibGVdIiwKKwkJc3RybGNhdChtc2csICJbTWVtb3J5IEJJU1QgdGVzdCBmYWlsZWQsIEluZmluaVBhdGggaGFyZHdhcmUgdW51c2FibGVdIiwKIAkJCW1zZ2wpOwogCQkvKiBpZ25vcmUgZnJvbSBub3cgb24sIHNvIGRpc2FibGUgdW50aWwgZHJpdmVyIHJlbG9hZGVkICovCiAJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfSFdFUlJPUjsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCiAJaWYgKGh3ZXJycyAmIF9JUEFUSF9QTExfRkFJTCkgewogCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywKLQkJCSAiW1BMTCBmYWlsZWQgKCVsbHgpLCBQRS04MDAgdW51c2FibGVdIiwKKwkJCSAiW1BMTCBmYWlsZWQgKCVsbHgpLCBJbmZpbmlQYXRoIGhhcmR3YXJlIHVudXNhYmxlXSIsCiAJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgaHdlcnJzICYgX0lQQVRIX1BMTF9GQUlMKTsKIAkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOwogCQkvKiBpZ25vcmUgZnJvbSBub3cgb24sIHNvIGRpc2FibGUgdW50aWwgZHJpdmVyIHJlbG9hZGVkICovCkBAIC01MTEsMjIgKzUxMSwyNSBAQAogCQluID0gIkluZmluaVBhdGhfRW11bGF0aW9uIjsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQluID0gIkluZmluaVBhdGhfUEUtODAwLUJyaW5ndXAiOworCQluID0gIkluZmluaVBhdGhfUUxFNzE0MC1CcmluZ3VwIjsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQluID0gIkluZmluaVBhdGhfUEUtODgwIjsKKwkJbiA9ICJJbmZpbmlQYXRoX1FMRTcxNDAiOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCW4gPSAiSW5maW5pUGF0aF9QRS04NTAiOworCQluID0gIkluZmluaVBhdGhfUU1JNzE0MCI7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJbiA9ICJJbmZpbmlQYXRoX1BFLTg2MCI7CisJCW4gPSAiSW5maW5pUGF0aF9RRU03MTQwIjsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQluID0gIkluZmluaVBhdGhfUU1INzE0MCI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlwYXRoX2Rldl9lcnIoZGQsCiAJCQkgICAgICAiRG9uJ3QgeWV0IGtub3cgYWJvdXQgYm9hcmQgd2l0aCBJRCAldVxuIiwKIAkJCSAgICAgIGJvYXJkcmV2KTsKLQkJc25wcmludGYobmFtZSwgbmFtZWxlbiwgIlVua25vd25fSW5maW5pUGF0aF9QRS04eHhfJXUiLAorCQlzbnByaW50ZihuYW1lLCBuYW1lbGVuLCAiVW5rbm93bl9JbmZpbmlQYXRoX1BDSWVfJXUiLAogCQkJIGJvYXJkcmV2KTsKIAkJYnJlYWs7CiAJfQpAQCAtNTM0LDcgKzUzNyw3IEBACiAJCXNucHJpbnRmKG5hbWUsIG5hbWVsZW4sICIlcyIsIG4pOwogCiAJaWYgKGRkLT5pcGF0aF9tYWpyZXYgIT0gNCB8fCAhZGQtPmlwYXRoX21pbnJldiB8fCBkZC0+aXBhdGhfbWlucmV2PjIpIHsKLQkJaXBhdGhfZGV2X2VycihkZCwgIlVuc3VwcG9ydGVkIFBFLTgwMCByZXZpc2lvbiAldS4ldSFcbiIsCisJCWlwYXRoX2Rldl9lcnIoZGQsICJVbnN1cHBvcnRlZCBJbmZpbmlQYXRoIGhhcmR3YXJlIHJldmlzaW9uICV1LiV1IVxuIiwKIAkJCSAgICAgIGRkLT5pcGF0aF9tYWpyZXYsIGRkLT5pcGF0aF9taW5yZXYpOwogCQlyZXQgPSAxOwogCX0gZWxzZQpAQCAtNjUxLDYgKzY1NCwxNSBAQAogCQl2YWwgJj0gfklORklOSVBBVEhfWEdYU19SRVNFVDsKIAkJY2hhbmdlID0gMTsKIAl9CisJaWYgKCgodmFsID4+IElORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQpICYKKwkgICAgIElORklOSVBBVEhfWEdYU19SWF9QT0xfTUFTSykgIT0gZGQtPmlwYXRoX3J4X3BvbF9pbnYgKSB7CisJCS8qIG5lZWQgdG8gY29tcGVuc2F0ZSBmb3IgVHggaW52ZXJzaW9uIGluIHBhcnRuZXIgKi8KKwkJdmFsICY9IH4oSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLIDw8CisJCSAgICAgICAgIElORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQpOworCQl2YWwgfD0gZGQtPmlwYXRoX3J4X3BvbF9pbnYgPDwKKwkJCUlORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQ7CisJCWNoYW5nZSA9IDE7CisJfQogCWlmIChjaGFuZ2UpCiAJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZywgdmFsKTsKIApAQCAtNzA1LDcgKzcxNyw3IEBACiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwLCB2YWwpOwogfQogCi0vKiB0aGlzIGlzIG5vdCB5ZXQgbmVlZGVkIG9uIHRoZSBQRTgwMCwgc28ganVzdCByZXR1cm4gMC4gKi8KKy8qIHRoaXMgaXMgbm90IHlldCBuZWVkZWQgb24gdGhpcyBjaGlwLCBzbyBqdXN0IHJldHVybiAwLiAqLwogc3RhdGljIGludCBpcGF0aF9wZV9pbnRjb25maWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCXJldHVybiAwOwpAQCAtNzU5LDggKzc3MSw4IEBACiAgKgogICogVGhpcyBpcyBjYWxsZWQgZHVyaW5nIGRyaXZlciB1bmxvYWQuCiAgKiBXZSBkbyB0aGUgcGNpX2Rpc2FibGVfbXNpIGhlcmUsIG5vdCBpbiBnZW5lcmljIGNvZGUsIGJlY2F1c2UgaXQKLSAqIGlzbid0IHVzZWQgZm9yIHRoZSBIVC00MDAuIElmIHdlIGRvIGVuZCB1cCBuZWVkaW5nIHBjaV9lbmFibGVfbXNpCi0gKiBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgZm9yIEhULTQwMCwgd2UnbGwgbW92ZSB0aGUgY2FsbCBiYWNrCisgKiBpc24ndCB1c2VkIGZvciB0aGUgSFQgY2hpcHMuIElmIHdlIGRvIGVuZCB1cCBuZWVkaW5nIHBjaV9lbmFibGVfbXNpCisgKiBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgZm9yIEhULCB3ZSdsbCBtb3ZlIHRoZSBjYWxsIGJhY2sKICAqIGludG8gdGhlIG1haW4gaW5pdF9vbmUgY29kZS4KICAqLwogc3RhdGljIHZvaWQgaXBhdGhfc2V0dXBfcGVfY2xlYW51cChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCkBAIC03ODAsMTAgKzc5MiwxMCBAQAogICogbGF0ZSBpbiAyLjYuMTYpLgogICogQWxsIHRoYXQgY2FuIGJlIGRvbmUgaXMgdG8gZWRpdCB0aGUga2VybmVsIHNvdXJjZSB0byByZW1vdmUgdGhlIHF1aXJrCiAgKiBjaGVjayB1bnRpbCB0aGF0IGlzIGZpeGVkLgotICogV2UgZG8gbm90IG5lZWQgdG8gY2FsbCBlbmFibGVfbXNpKCkgZm9yIG91ciBIeXBlclRyYW5zcG9ydCBjaGlwIChIVC00MDApLAotICogZXZlbiB0aG9zZSBpdCB1c2VzIE1TSSwgYW5kIHdlIHdhbnQgdG8gYXZvaWQgdGhlIHF1aXJrIHdhcm5pbmcsIHNvCi0gKiBTbyB3ZSBjYWxsIGVuYWJsZV9tc2kgb25seSBmb3IgdGhlIFBFLTgwMC4gIElmIHdlIGRvIGVuZCB1cCBuZWVkaW5nCi0gKiBwY2lfZW5hYmxlX21zaSBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUgZm9yIEhULTQwMCwgd2UnbGwgbW92ZSB0aGUKKyAqIFdlIGRvIG5vdCBuZWVkIHRvIGNhbGwgZW5hYmxlX21zaSgpIGZvciBvdXIgSHlwZXJUcmFuc3BvcnQgY2hpcCwKKyAqIGV2ZW4gdGhvdWdoIGl0IHVzZXMgTVNJLCBhbmQgd2Ugd2FudCB0byBhdm9pZCB0aGUgcXVpcmsgd2FybmluZywgc28KKyAqIFNvIHdlIGNhbGwgZW5hYmxlX21zaSBvbmx5IGZvciBQQ0llLiAgSWYgd2UgZG8gZW5kIHVwIG5lZWRpbmcKKyAqIHBjaV9lbmFibGVfbXNpIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSBmb3IgSFQsIHdlJ2xsIG1vdmUgdGhlCiAgKiBjYWxsIGJhY2sgaW50byB0aGUgbWFpbiBpbml0X29uZSBjb2RlLgogICogV2Ugc2F2ZSB0aGUgbXNpIGxvIGFuZCBoaSB2YWx1ZXMsIHNvIHdlIGNhbiByZXN0b3JlIHRoZW0gYWZ0ZXIKICAqIGNoaXAgcmVzZXQgKHRoZSBrZXJuZWwgUENJIGluZnJhc3RydWN0dXJlIGRvZXNuJ3QgeWV0IGhhbmRsZSB0aGF0CkBAIC05NzEsOCArOTgzLDcgQEAKIAlpbnQgcmV0OwogCiAJLyogVXNlIEVSUk9SIHNvIGl0IHNob3dzIHVwIGluIGxvZ3MsIGV0Yy4gKi8KLQlpcGF0aF9kZXZfZXJyKGRkLCAiUmVzZXR0aW5nIFBFLTgwMCB1bml0ICV1XG4iLAotCQkgICAgICBkZC0+aXBhdGhfdW5pdCk7CisJaXBhdGhfZGV2X2VycihkZCwgIlJlc2V0dGluZyBJbmZpbmlQYXRoIHVuaXQgJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKIAkvKiBrZWVwIGNoaXAgZnJvbSBiZWluZyBhY2Nlc3NlZCBpbiBhIGZldyBwbGFjZXMgKi8KIAlkZC0+aXBhdGhfZmxhZ3MgJj0gfihJUEFUSF9JTklUVEVEfElQQVRIX1BSRVNFTlQpOwogCXZhbCA9IGRkLT5pcGF0aF9jb250cm9sIHwgSU5GSU5JUEFUSF9DX1JFU0VUOwpAQCAtMTA3OCw3ICsxMDg5LDcgQEAKICAqIEBwb3J0OiB0aGUgcG9ydAogICoKICAqIGNsZWFyIGFsbCBUSUQgZW50cmllcyBmb3IgYSBwb3J0LCBleHBlY3RlZCBhbmQgZWFnZXIuCi0gKiBVc2VkIGZyb20gaXBhdGhfY2xvc2UoKS4gIE9uIFBFODAwLCBUSURzIGFyZSBvbmx5IDMyIGJpdHMsCisgKiBVc2VkIGZyb20gaXBhdGhfY2xvc2UoKS4gIE9uIHRoaXMgY2hpcCwgVElEcyBhcmUgb25seSAzMiBiaXRzLAogICogbm90IDY0LCBidXQgdGhleSBhcmUgc3RpbGwgb24gNjQgYml0IGJvdW5kYXJpZXMsIHNvIHRpZGJhc2UKICAqIGlzIGRlY2xhcmVkIGFzIHU2NCAqIGZvciB0aGUgcG9pbnRlciBtYXRoLCBldmVuIHRob3VnaCB3ZSB3cml0ZSAzMiBiaXRzCiAgKi8KQEAgLTExNDgsOSArMTE1OSw5IEBACiAJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIXzRCWVRFX1RJRDsKIAogCS8qCi0JICogRm9yIG9wZW5pYiwgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBhbiBJQiBoZWFkZXIgb2YgOTYgYnl0ZXMKLQkgKiBvciAyNCBkd29yZHMuICBIVC00MDAgaGFzIGFyYml0cmFyeSBzaXplZCByZWNlaXZlIGJ1ZmZlcnMsIHNvIHdlCi0JICogbWFkZSB0aGVtIHRoZSBzYW1lIHNpemUgYXMgdGhlIFBJTyBidWZmZXJzLiAgVGhlIFBFLTgwMCBkb2VzIG5vdAorCSAqIEZvciBvcGVuZmFicmljcywgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGhhbmRsZSBhbiBJQiBoZWFkZXIgb2YKKwkgKiAyNCBkd29yZHMuICBIVCBjaGlwIGhhcyBhcmJpdHJhcnkgc2l6ZWQgcmVjZWl2ZSBidWZmZXJzLCBzbyB3ZQorCSAqIG1hZGUgdGhlbSB0aGUgc2FtZSBzaXplIGFzIHRoZSBQSU8gYnVmZmVycy4gIFRoaXMgY2hpcCBkb2VzIG5vdAogCSAqIGhhbmRsZSBhcmJpdHJhcnkgc2l6ZSBidWZmZXJzLCBzbyB3ZSBuZWVkIHRoZSBoZWFkZXIgbGFyZ2UgZW5vdWdoCiAJICogdG8gaGFuZGxlIGxhcmdlc3QgSUIgaGVhZGVyLCBidXQgc3RpbGwgaGF2ZSByb29tIGZvciBhIDJLQiBNVFUKIAkgKiBzdGFuZGFyZCBJQiBwYWNrZXQuCkBAIC0xMTU4LDExICsxMTY5LDEwIEBACiAJZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgPSAyNDsKIAlkZC0+aXBhdGhfcmN2aGRyc2l6ZSA9IElQQVRIX0RGTFRfUkNWSERSU0laRTsKIAotCS8qIEZvciBIVC00MDAsIHdlIGFsbG9jYXRlIGEgc29tZXdoYXQgb3Zlcmx5IGxhcmdlIGVhZ2VyIGJ1ZmZlciwKLQkgKiBzdWNoIHRoYXQgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IHdlIGNhbiByZWNlaXZlIHRoZSBsYXJnZXN0IHBhY2tldAotCSAqIHRoYXQgd2UgY2FuIHNlbmQgb3V0LiAgVG8gdHJ1bHkgc3VwcG9ydCBhIDRLQiBNVFUsIHdlIG5lZWQgdG8KLQkgKiBidW1wIHRoaXMgdG8gYSBsYXJnZXIgdmFsdWUuICBXZSdsbCBkbyB0aGlzIHdoZW4gSSBnZXQgYXJvdW5kIHRvCi0JICogdGVzdGluZyA0S0Igc2VuZHMgb24gdGhlIFBFLTgwMCwgd2hpY2ggSSBoYXZlIG5vdCB5ZXQgZG9uZS4KKwkvKgorCSAqIFRvIHRydWx5IHN1cHBvcnQgYSA0S0IgTVRVIChmb3IgdXNlcm1vZGUpLCB3ZSBuZWVkIHRvCisJICogYnVtcCB0aGlzIHRvIGEgbGFyZ2VyIHZhbHVlLiAgRm9yIG5vdywgd2UgdXNlIHRoZW0gZm9yCisJICogdGhlIGtlcm5lbCBvbmx5LgogCSAqLwogCWRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplID0gMjA0ODsKIAkvKgpAQCAtMTE3NSw5ICsxMTg1LDkgQEAKIAlkZC0+aXBhdGhfaW5pdF9pYm1heGxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbjsKIAogCS8qCi0JICogRm9yIFBFLTgwMCwgd2UgY2FuIHJlcXVlc3QgYSByZWNlaXZlIGludGVycnVwdCBmb3IgMSBvcgorCSAqIFdlIGNhbiByZXF1ZXN0IGEgcmVjZWl2ZSBpbnRlcnJ1cHQgZm9yIDEgb3IKIAkgKiBtb3JlIHBhY2tldHMgZnJvbSBjdXJyZW50IG9mZnNldC4gIEZvciBub3csIHdlIHNldCB0aGlzCi0JICogdXAgZm9yIGEgc2luZ2xlIHBhY2tldCwgdG8gbWF0Y2ggdGhlIEhULTQwMCBiZWhhdmlvci4KKwkgKiB1cCBmb3IgYSBzaW5nbGUgcGFja2V0LgogCSAqLwogCWRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZiA9IDFVTEw8PDMyOwogCkBAIC0xMjE2LDEzICsxMjI2LDEzIEBACiB9CiAKIC8qKgotICogaXBhdGhfaW5pdF9wZTgwMF9mdW5jcyAtIHNldCB1cCB0aGUgY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycworICogaXBhdGhfaW5pdF9pYmE2MTIwX2Z1bmNzIC0gc2V0IHVwIHRoZSBjaGlwLXNwZWNpZmljIGZ1bmN0aW9uIHBvaW50ZXJzCiAgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQogICoKICAqIFRoaXMgaXMgZ2xvYmFsLCBhbmQgaXMgY2FsbGVkIGRpcmVjdGx5IGF0IGluaXQgdG8gc2V0IHVwIHRoZQogICogY2hpcC1zcGVjaWZpYyBmdW5jdGlvbiBwb2ludGVycyBmb3IgbGF0ZXIgdXNlLgogICovCi12b2lkIGlwYXRoX2luaXRfcGU4MDBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQordm9pZCBpcGF0aF9pbml0X2liYTYxMjBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCWRkLT5pcGF0aF9mX2ludHJzZXR1cCA9IGlwYXRoX3BlX2ludGNvbmZpZzsKIAlkZC0+aXBhdGhfZl9idXMgPSBpcGF0aF9zZXR1cF9wZV9jb25maWc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKaW5kZXggNDE0Y2RkMS4uNDQ2NjlkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYwpAQCAtNTMsOCArNTMsOCBAQAogTU9EVUxFX1BBUk1fREVTQyhjZmdwb3J0cywgIlNldCBtYXggbnVtYmVyIG9mIHBvcnRzIHRvIHVzZSIpOwogCiAvKgotICogTnVtYmVyIG9mIGJ1ZmZlcnMgcmVzZXJ2ZWQgZm9yIGRyaXZlciAobGF5ZXJlZCBkcml2ZXJzIGFuZCBTTUEKLSAqIHNlbmQpLiAgUmVzZXJ2ZWQgYXQgZW5kIG9mIGJ1ZmZlciBsaXN0LiAgIEluaXRpYWxpemVkIGJhc2VkIG9uCisgKiBOdW1iZXIgb2YgYnVmZmVycyByZXNlcnZlZCBmb3IgZHJpdmVyICh2ZXJicyBhbmQgbGF5ZXJlZCBkcml2ZXJzLikKKyAqIFJlc2VydmVkIGF0IGVuZCBvZiBidWZmZXIgbGlzdC4gICBJbml0aWFsaXplZCBiYXNlZCBvbgogICogbnVtYmVyIG9mIFBJTyBidWZmZXJzIGlmIG5vdCBzZXQgdmlhIG1vZHVsZSBpbnRlcmZhY2UuCiAgKiBUaGUgcHJvYmxlbSB3aXRoIHRoaXMgaXMgdGhhdCBpdCdzIGdsb2JhbCwgYnV0IHdlJ2xsIHVzZSBkaWZmZXJlbnQKICAqIG51bWJlcnMgZm9yIGRpZmZlcmVudCBjaGlwIHR5cGVzLiAgU28gdGhlIGRlZmF1bHQgdmFsdWUgaXMgbm90CkBAIC04MCw3ICs4MCw3IEBACiAgKgogICogQWxsb2NhdGUgdGhlIGVhZ2VyIFRJRCBidWZmZXJzIGFuZCBwcm9ncmFtIHRoZW0gaW50byBpbmZpbmlwYXRoLgogICogV2UgdXNlIHRoZSBuZXR3b3JrIGxheWVyIGFsbG9jX3NrYigpIGFsbG9jYXRvciB0byBhbGxvY2F0ZSB0aGUKLSAqIG1lbW9yeSwgYW5kIGVpdGhlciB1c2UgdGhlIGJ1ZmZlcnMgYXMgaXMgZm9yIHRoaW5ncyBsaWtlIFNNQQorICogbWVtb3J5LCBhbmQgZWl0aGVyIHVzZSB0aGUgYnVmZmVycyBhcyBpcyBmb3IgdGhpbmdzIGxpa2UgdmVyYnMKICAqIHBhY2tldHMsIG9yIHBhc3MgdGhlIGJ1ZmZlcnMgdXAgdG8gdGhlIGlwYXRoIGxheWVyZWQgZHJpdmVyIGFuZAogICogdGhlbmNlIHRoZSBuZXR3b3JrIGxheWVyLCByZXBsYWNpbmcgdGhlbSBhcyB3ZSBkbyBzbyAoc2VlCiAgKiBpcGF0aF9yY3ZfbGF5ZXIoKSkuCkBAIC0yNDAsNyArMjQwLDExIEBACiAJCQkgICJvbmx5IHN1cHBvcnRzICV1XG4iLCBpcGF0aF9jZmdwb3J0cywKIAkJCSAgZGQtPmlwYXRoX3BvcnRjbnQpOwogCX0KLQlkZC0+aXBhdGhfcGQgPSBremFsbG9jKHNpemVvZigqZGQtPmlwYXRoX3BkKSAqIGRkLT5pcGF0aF9jZmdwb3J0cywKKwkvKgorCSAqIEFsbG9jYXRlIGZ1bGwgcG9ydGNudCBhcnJheSwgcmF0aGVyIHRoYW4ganVzdCBjZmdwb3J0cywgYmVjYXVzZQorCSAqIGNsZWFudXAgaXRlcmF0ZXMgYWNyb3NzIGFsbCBwb3NzaWJsZSBwb3J0cy4KKwkgKi8KKwlkZC0+aXBhdGhfcGQgPSBremFsbG9jKHNpemVvZigqZGQtPmlwYXRoX3BkKSAqIGRkLT5pcGF0aF9wb3J0Y250LAogCQkJICAgICAgIEdGUF9LRVJORUwpOwogCiAJaWYgKCFkZC0+aXBhdGhfcGQpIHsKQEAgLTQ0Niw5ICs0NTAsOSBAQAogCXUzMiB2YWw7CiAJaW50IGk7CiAKLQlpZiAoIXJlaW5pdCkgewotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpcGF0aF9zbWFfc3RhdGVfd2FpdCk7Ci0JfQorCWlmICghcmVpbml0KQorCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpcGF0aF9zdGF0ZV93YWl0KTsKKwogCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKIAkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7CiAKQEAgLTY4Nyw3ICs2OTEsNyBAQAogCWRkLT5pcGF0aF9waW9hdnJlZ3MgPSBBTElHTih2YWwsIHNpemVvZih1NjQpICogQklUU19QRVJfQllURSAvIDIpCiAJCS8gKHNpemVvZih1NjQpICogQklUU19QRVJfQllURSAvIDIpOwogCWlmIChpcGF0aF9rcGlvYnVmcyA9PSAwKSB7Ci0JCS8qIG5vdCBzZXQgYnkgdXNlciwgb3Igc2V0IGV4cGxpY3RseSB0byBkZWZhdWx0ICAqLworCQkvKiBub3Qgc2V0IGJ5IHVzZXIgKHRoaXMgaXMgZGVmYXVsdCkgKi8KIAkJaWYgKChkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0aykgPiAxMjgpCiAJCQlrcGlvYnVmcyA9IDMyOwogCQllbHNlCkBAIC05NDYsNiArOTUwLDcgQEAKIAkJCWRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrIC0gdmFsOwogCX0KIAorCWlwYXRoX2twaW9idWZzID0gdmFsOwogCXJldCA9IDA7CiBiYWlsOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggMjgwZTczMi4uNDliZjdiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKLSNpbmNsdWRlICJpcGF0aF9sYXllci5oIgorI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCiAjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKIC8qIFRoZXNlIGFyZSBhbGwgcmN2LXJlbGF0ZWQgZXJyb3JzIHdoaWNoIHdlIHdhbnQgdG8gY291bnQgZm9yIHN0YXRzICovCkBAIC0yMDEsNyArMjAxLDcgQEAKIAkJCQkgIGliX2xpbmtzdGF0ZShsc3RhdGUpKTsKIAkJfQogCQllbHNlCi0JCQlpcGF0aF9jZGJnKFNNQSwgIlVuaXQgJXUgbGluayBzdGF0ZSAlcywgbGFzdCAiCisJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbml0ICV1IGxpbmsgc3RhdGUgJXMsIGxhc3QgIgogCQkJCSAgICJ3YXMgJXNcbiIsIGRkLT5pcGF0aF91bml0LAogCQkJCSAgIGliX2xpbmtzdGF0ZShsc3RhdGUpLAogCQkJCSAgIGliX2xpbmtzdGF0ZSgodW5zaWduZWQpCkBAIC0yMTMsNyArMjEzLDcgQEAKIAkJaWYgKGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0lOSVQgfHwKIAkJICAgIGxzdGF0ZSA9PSBJUEFUSF9JQlNUQVRFX0FSTSB8fAogCQkgICAgbHN0YXRlID09IElQQVRIX0lCU1RBVEVfQUNUSVZFKQotCQkJaXBhdGhfY2RiZyhTTUEsICJVbml0ICV1IGxpbmsgc3RhdGUgZG93biIKKwkJCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVuaXQgJXUgbGluayBzdGF0ZSBkb3duIgogCQkJCSAgICIgKHN0YXRlIDB4JXgpLCBmcm9tICVzXG4iLAogCQkJCSAgIGRkLT5pcGF0aF91bml0LAogCQkJCSAgICh1MzIpdmFsICYgSVBBVEhfSUJTVEFURV9NQVNLLApAQCAtMjY5LDcgKzI2OSw3IEBACiAJCQkgICAgIElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfTUFTSykKIAkJCSAgICA9PSBJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9BQ1RJVkUpCiAJCQkJLyogaWYgZnJvbSB1cCB0byBkb3duIGJlIG1vcmUgdm9jYWwgKi8KLQkJCQlpcGF0aF9jZGJnKFNNQSwKKwkJCQlpcGF0aF9jZGJnKFZFUkJPU0UsCiAJCQkJCSAgICJVbml0ICV1IGxpbmsgbm93IGRvd24gKCVzKVxuIiwKIAkJCQkJICAgZGQtPmlwYXRoX3VuaXQsCiAJCQkJCSAgIGlwYXRoX2liY3N0YXR1c19zdHJbbHRzdGF0ZV0pOwpAQCAtMjg5LDggKzI4OSw2IEBACiAJCSpkZC0+aXBhdGhfc3RhdHVzcCB8PQogCQkJSVBBVEhfU1RBVFVTX0lCX1JFQURZIHwgSVBBVEhfU1RBVFVTX0lCX0NPTkY7CiAJCWRkLT5pcGF0aF9mX3NldGV4dGxlZChkZCwgbHN0YXRlLCBsdHN0YXRlKTsKLQotCQlfX2lwYXRoX2xheWVyX2ludHIoZGQsIElQQVRIX0xBWUVSX0lOVF9JRl9VUCk7CiAJfSBlbHNlIGlmICgodmFsICYgSVBBVEhfSUJTVEFURV9NQVNLKSA9PSBJUEFUSF9JQlNUQVRFX0lOSVQpIHsKIAkJLyoKIAkJICogc2V0IElOSVQgYW5kIERPV04uICBEb3duIGlzIGNoZWNrZWQgYnkgbW9zdCBvZiB0aGUgb3RoZXIKQEAgLTU5OCwxMSArNTk2LDExIEBACiAKIAlpZiAoIW5vcHJpbnQgJiYgKm1zZykKIAkJaXBhdGhfZGV2X2VycihkZCwgIiVzIGVycm9yXG4iLCBtc2cpOwotCWlmIChkZC0+aXBhdGhfc21hX3N0YXRlX3dhbnRlZCAmIGRkLT5pcGF0aF9mbGFncykgewotCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJzbWEgd2FudGVkIHN0YXRlICV4LCBpZmxhZ3Mgbm93ICV4LCAiCi0JCQkgICAid2FraW5nXG4iLCBkZC0+aXBhdGhfc21hX3N0YXRlX3dhbnRlZCwKKwlpZiAoZGQtPmlwYXRoX3N0YXRlX3dhbnRlZCAmIGRkLT5pcGF0aF9mbGFncykgeworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJkcml2ZXIgd2FudGVkIHN0YXRlICV4LCBpZmxhZ3Mgbm93ICV4LCAiCisJCQkgICAid2FraW5nXG4iLCBkZC0+aXBhdGhfc3RhdGVfd2FudGVkLAogCQkJICAgZGQtPmlwYXRoX2ZsYWdzKTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZpcGF0aF9zbWFfc3RhdGVfd2FpdCk7CisJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmaXBhdGhfc3RhdGVfd2FpdCk7CiAJfQogCiAJcmV0dXJuIGNoa2VycnBrdHM7CkBAIC03MDgsMTEgKzcwNiw3IEBACiB7CiAJaW50IHJldDsKIAotCXJldCA9IF9faXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX1NFTkRfQ09OVElOVUUpOwotCWlmIChyZXQgPiAwKQotCQlnb3RvIHNldDsKLQotCXJldCA9IF9faXBhdGhfdmVyYnNfcGlvYnVmYXZhaWwoZGQpOworCXJldCA9IGlwYXRoX2liX3Bpb2J1ZmF2YWlsKGRkLT52ZXJic19kZXYpOwogCWlmIChyZXQgPiAwKQogCQlnb3RvIHNldDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCmluZGV4IGU5ZjM3NGYuLmE4YTU2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTEzMiwxMiArMTMyLDYgQEAKIAl2b2lkICpsX2FyZzsKIH07CiAKLS8qIFZlcmJzIGxheWVyIGludGVyZmFjZSAqLwotc3RydWN0IF92ZXJic19sYXllciB7Ci0Jdm9pZCAqbF9hcmc7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgbF90aW1lcjsKLX07Ci0KIHN0cnVjdCBpcGF0aF9kZXZkYXRhIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGlwYXRoX2xpc3Q7CiAKQEAgLTE5OCw3ICsxOTIsOCBAQAogCXZvaWQgKCppcGF0aF9mX3NldGV4dGxlZCkoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTY0LCB1NjQpOwogCS8qIGZpbGwgb3V0IGNoaXAtc3BlY2lmaWMgZmllbGRzICovCiAJaW50ICgqaXBhdGhfZl9nZXRfYmFzZV9pbmZvKShzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKiwgdm9pZCAqKTsKLQlzdHJ1Y3QgX3ZlcmJzX2xheWVyIHZlcmJzX2xheWVyOworCXN0cnVjdCBpcGF0aF9pYmRldiAqdmVyYnNfZGV2OworCXN0cnVjdCB0aW1lcl9saXN0IHZlcmJzX3RpbWVyOwogCS8qIHRvdGFsIGR3b3JkcyBzZW50IChzdW1tZWQgZnJvbSBjb3VudGVyKSAqLwogCXU2NCBpcGF0aF9zd29yZDsKIAkvKiB0b3RhbCBkd29yZHMgcmN2ZCAoc3VtbWVkIGZyb20gY291bnRlcikgKi8KQEAgLTI0MSw3ICsyMzYsNyBAQAogCXU2NCBpcGF0aF90aWR0ZW1wbGF0ZTsKIAkvKiB2YWx1ZSB0byB3cml0ZSB0byBmcmVlIFRJRHMgKi8KIAl1NjQgaXBhdGhfdGlkaW52YWxpZDsKLQkvKiBQRS04MDAgcmN2IGludGVycnVwdCBzZXR1cCAqLworCS8qIElCQTYxMjAgcmN2IGludGVycnVwdCBzZXR1cCAqLwogCXU2NCBpcGF0aF9yaGRyaGVhZF9pbnRyX29mZjsKIAogCS8qIHNpemUgb2YgbWVtb3J5IGF0IGlwYXRoX2tyZWdiYXNlICovCkBAIC0yNTAsOCArMjQ1LDggQEAKIAl1MzIgaXBhdGhfcGlvYXZyZWdzOwogCS8qIElQQVRIX1BPTEwsIGV0Yy4gKi8KIAl1MzIgaXBhdGhfZmxhZ3M7Ci0JLyogaXBhdGhfZmxhZ3Mgc21hIGlzIHdhaXRpbmcgZm9yICovCi0JdTMyIGlwYXRoX3NtYV9zdGF0ZV93YW50ZWQ7CisJLyogaXBhdGhfZmxhZ3MgZHJpdmVyIGlzIHdhaXRpbmcgZm9yICovCisJdTMyIGlwYXRoX3N0YXRlX3dhbnRlZDsKIAkvKiBsYXN0IGJ1ZmZlciBmb3IgdXNlciB1c2UsIGZpcnN0IGJ1ZiBmb3Iga2VybmVsIHVzZSBpcyB0aGlzCiAJICogaW5kZXguICovCiAJdTMyIGlwYXRoX2xhc3Rwb3J0X3Bpb2J1ZjsKQEAgLTMxMSwxMCArMzA2LDYgQEAKIAl1MzIgaXBhdGhfcGNpYmFyMDsKIAkvKiBzbyB3ZSBjYW4gcmV3cml0ZSBpdCBhZnRlciBhIGNoaXAgcmVzZXQgKi8KIAl1MzIgaXBhdGhfcGNpYmFyMTsKLQkvKiBzZXF1ZW50aWFsIHRyaWVzIGZvciBTTUEgc2VuZCBhbmQgbm8gYnVmcyAqLwotCXUzMiBpcGF0aF9ub3NtYV9idWZzOwotCS8qIGR1cmF0aW9uIChzZWNvbmRzKSBpcGF0aF9ub3NtYV9idWZzIHNldCAqLwotCXUzMiBpcGF0aF9ub3NtYV9zZWNzOwogCiAJLyogSFQvUENJIFZlbmRvciBJRCAoaGVyZSBmb3IgTm9kZUluZm8pICovCiAJdTE2IGlwYXRoX3ZlbmRvcmlkOwpAQCAtNTEyLDYgKzUwMyw4IEBACiAJdTggaXBhdGhfcGNpX2NhY2hlbGluZTsKIAkvKiBMSUQgbWFzayBjb250cm9sICovCiAJdTggaXBhdGhfbG1jOworCS8qIFJ4IFBvbGFyaXR5IGludmVyc2lvbiAoY29tcGVuc2F0ZSBmb3IgfnR4IG9uIHBhcnRuZXIpICovCisJdTggaXBhdGhfcnhfcG9sX2ludjsKIAogCS8qIGxvY2FsIGxpbmsgaW50ZWdyaXR5IGNvdW50ZXIgKi8KIAl1MzIgaXBhdGhfbGxpX2NvdW50ZXI7CkBAIC01MjMsMTggKzUxNiw2IEBACiBleHRlcm4gc3BpbmxvY2tfdCBpcGF0aF9kZXZzX2xvY2s7CiBleHRlcm4gc3RydWN0IGlwYXRoX2RldmRhdGEgKmlwYXRoX2xvb2t1cChpbnQgdW5pdCk7CiAKLWV4dGVybiB1MTYgaXBhdGhfbGF5ZXJfcmN2X29wY29kZTsKLWV4dGVybiBpbnQgX19pcGF0aF9sYXllcl9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMik7Ci1leHRlcm4gaW50IGlwYXRoX2xheWVyX2ludHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyKTsKLWV4dGVybiBpbnQgX19pcGF0aF9sYXllcl9yY3Yoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdm9pZCAqLAotCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKTsKLWV4dGVybiBpbnQgX19pcGF0aF9sYXllcl9yY3ZfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHZvaWQgKik7Ci1leHRlcm4gaW50IF9faXBhdGhfdmVyYnNfcGlvYnVmYXZhaWwoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Ci1leHRlcm4gaW50IF9faXBhdGhfdmVyYnNfcmN2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHZvaWQgKiwgdm9pZCAqLCB1MzIpOwotCi12b2lkIGlwYXRoX2xheWVyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKLXZvaWQgaXBhdGhfbGF5ZXJfcmVtb3ZlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwotCiBpbnQgaXBhdGhfaW5pdF9jaGlwKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIGludCk7CiBpbnQgaXBhdGhfZW5hYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CiB2b2lkIGlwYXRoX2Rpc2FibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKQEAgLTU0OSw5ICs1MzAsOCBAQAogCiBpbnQgaXBhdGhfZGlhZ19hZGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiB2b2lkIGlwYXRoX2RpYWdfcmVtb3ZlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwotdm9pZCBpcGF0aF9kaWFnX2JyaW5ndXBfbGluayhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIAotZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGlwYXRoX3NtYV9zdGF0ZV93YWl0OworZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IGlwYXRoX3N0YXRlX3dhaXQ7CiAKIGludCBpcGF0aF91c2VyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwogdm9pZCBpcGF0aF91c2VyX3JlbW92ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwpAQCAtNTgyLDEyICs1NjIsMTQgQEAKIAogaW50IGlwYXRoX3BhcnNlX3VzaG9ydChjb25zdCBjaGFyICpzdHIsIHVuc2lnbmVkIHNob3J0ICp2YWxwKTsKIAotaW50IGlwYXRoX3dhaXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiwgaW50KTsKLXZvaWQgaXBhdGhfc2V0X2liX2xzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBpbnQpOwogdm9pZCBpcGF0aF9rcmVjZWl2ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIGludCBpcGF0aF9zZXRyY3ZoZHJzaXplKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHVuc2lnbmVkKTsKIGludCBpcGF0aF9yZXNldF9kZXZpY2UoaW50KTsKIHZvaWQgaXBhdGhfZ2V0X2Zhc3RzdGF0cyh1bnNpZ25lZCBsb25nKTsKK2ludCBpcGF0aF9zZXRfbGlua3N0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHU4KTsKK2ludCBpcGF0aF9zZXRfbXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUxNik7CitpbnQgaXBhdGhfc2V0X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MzIsIHU4KTsKK2ludCBpcGF0aF9zZXRfcnhfcG9sX2ludihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IG5ld19wb2xfaW52KTsKIAogLyogZm9yIHVzZSBpbiBzeXN0ZW0gY2FsbHMsIHdoZXJlIHdlIHdhbnQgdG8ga25vdyBkZXZpY2UgdHlwZSwgZXRjLiAqLwogI2RlZmluZSBwb3J0X2ZwKGZwKSAoKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqKSAoZnApLT5wcml2YXRlX2RhdGEpCkBAIC02NDIsMTAgKzYyNCw4IEBACiBpbnQgaXBhdGhfd2FpdGZvcl9tZGlvX2NtZHJlYWR5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwogaW50IGlwYXRoX3dhaXRmb3JfY29tcGxldGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaXBhdGhfa3JlZywgdTY0LCB1NjQgKik7CiB1MzIgX19pb21lbSAqaXBhdGhfZ2V0cGlvYnVmKHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUzMiAqKTsKLS8qIGluaXQgUEUtODAwLXNwZWNpZmljIGZ1bmMgKi8KLXZvaWQgaXBhdGhfaW5pdF9wZTgwMF9mdW5jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKLS8qIGluaXQgSFQtNDAwLXNwZWNpZmljIGZ1bmMgKi8KLXZvaWQgaXBhdGhfaW5pdF9odDQwMF9mdW5jcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKK3ZvaWQgaXBhdGhfaW5pdF9pYmE2MTIwX2Z1bmNzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCBpcGF0aF9pbml0X2liYTYxMTBfZnVuY3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiB2b2lkIGlwYXRoX2dldF9lZXByb21faW5mbyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIHU2NCBpcGF0aF9zbmFwX2NudHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgaXBhdGhfY3JlZyk7CiAKQEAgLTgwMSw3ICs3ODEsNyBAQAogCiBzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKIAotZXh0ZXJuIGNvbnN0IGNoYXIgaXBhdGhfY29yZV92ZXJzaW9uW107CitleHRlcm4gY29uc3QgY2hhciBpYl9pcGF0aF92ZXJzaW9uW107CiAKIGludCBpcGF0aF9kcml2ZXJfY3JlYXRlX2dyb3VwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOwogdm9pZCBpcGF0aF9kcml2ZXJfcmVtb3ZlX2dyb3VwKHN0cnVjdCBkZXZpY2VfZHJpdmVyICopOwpAQCAtODEwLDYgKzc5MCw5IEBACiB2b2lkIGlwYXRoX2RldmljZV9yZW1vdmVfZ3JvdXAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIGludCBpcGF0aF9leHBvc2VfcmVzZXQoc3RydWN0IGRldmljZSAqKTsKIAoraW50IGlwYXRoX2RpYWdwa3RfYWRkKHZvaWQpOwordm9pZCBpcGF0aF9kaWFncGt0X3JlbW92ZSh2b2lkKTsKKwogaW50IGlwYXRoX2luaXRfaXBhdGhmcyh2b2lkKTsKIHZvaWQgaXBhdGhfZXhpdF9pcGF0aGZzKHZvaWQpOwogaW50IGlwYXRoZnNfYWRkX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKQEAgLTgzMSwxMCArODE0LDEwIEBACiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggaXBhdGhfbXV0ZXg7CiAKLSNkZWZpbmUgSVBBVEhfRFJWX05BTUUJCSJpcGF0aF9jb3JlIgorI2RlZmluZSBJUEFUSF9EUlZfTkFNRQkJImliX2lwYXRoIgogI2RlZmluZSBJUEFUSF9NQUpPUgkJMjMzCiAjZGVmaW5lIElQQVRIX1VTRVJfTUlOT1JfQkFTRQkwCi0jZGVmaW5lIElQQVRIX1NNQV9NSU5PUgkJMTI4CisjZGVmaW5lIElQQVRIX0RJQUdQS1RfTUlOT1IJMTI3CiAjZGVmaW5lIElQQVRIX0RJQUdfTUlOT1JfQkFTRQkxMjkKICNkZWZpbmUgSVBBVEhfTk1JTk9SUwkJMjU1CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jCmluZGV4IGE1Y2EyNzkuLmJhMWI5MzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKIAogLyoqCiAgKiBpcGF0aF9hbGxvY19sa2V5IC0gYWxsb2NhdGUgYW4gbGtleQpAQCAtNjAsNyArNjEsNyBAQAogCQlyID0gKHIgKyAxKSAmIChya3QtPm1heCAtIDEpOwogCQlpZiAociA9PSBuKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZya3QtPmxvY2ssIGZsYWdzKTsKLQkJCV9WRVJCU19JTkZPKCJMS0VZIHRhYmxlIGZ1bGxcbiIpOworCQkJaXBhdGhfZGJnKEtFUk5fSU5GTyAiTEtFWSB0YWJsZSBmdWxsXG4iKTsKIAkJCXJldCA9IDA7CiAJCQlnb3RvIGJhaWw7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9sYXllci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKaW5kZXggYjI4YzZmOC4uZTQ2YWE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmMKQEAgLTQyLDI2ICs0MiwyMCBAQAogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAjaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKKyNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgogI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCiAvKiBBY3F1aXJlIGJlZm9yZSBpcGF0aF9kZXZzX2xvY2suICovCiBzdGF0aWMgREVGSU5FX01VVEVYKGlwYXRoX2xheWVyX211dGV4KTsKIAotc3RhdGljIGludCBpcGF0aF92ZXJic19yZWdpc3RlcmVkOwotCiB1MTYgaXBhdGhfbGF5ZXJfcmN2X29wY29kZTsKIAogc3RhdGljIGludCAoKmxheWVyX2ludHIpKHZvaWQgKiwgdTMyKTsKIHN0YXRpYyBpbnQgKCpsYXllcl9yY3YpKHZvaWQgKiwgdm9pZCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKIHN0YXRpYyBpbnQgKCpsYXllcl9yY3ZfbGlkKSh2b2lkICosIHZvaWQgKik7Ci1zdGF0aWMgaW50ICgqdmVyYnNfcGlvYnVmYXZhaWwpKHZvaWQgKik7Ci1zdGF0aWMgdm9pZCAoKnZlcmJzX3Jjdikodm9pZCAqLCB2b2lkICosIHZvaWQgKiwgdTMyKTsKIAogc3RhdGljIHZvaWQgKigqbGF5ZXJfYWRkX29uZSkoaW50LCBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKIHN0YXRpYyB2b2lkICgqbGF5ZXJfcmVtb3ZlX29uZSkodm9pZCAqKTsKLXN0YXRpYyB2b2lkICooKnZlcmJzX2FkZF9vbmUpKGludCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Ci1zdGF0aWMgdm9pZCAoKnZlcmJzX3JlbW92ZV9vbmUpKHZvaWQgKik7Ci1zdGF0aWMgdm9pZCAoKnZlcmJzX3RpbWVyX2NiKSh2b2lkICopOwogCiBpbnQgX19pcGF0aF9sYXllcl9pbnRyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGFyZykKIHsKQEAgLTEwNywzMDIgKzEwMSwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBfX2lwYXRoX3ZlcmJzX3Bpb2J1ZmF2YWlsKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3ZvaWQgaXBhdGhfbGF5ZXJfbGlkX2NoYW5nZWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewotCWludCByZXQgPSAtRU5PREVWOwotCi0JaWYgKGRkLT52ZXJic19sYXllci5sX2FyZyAmJiB2ZXJic19waW9idWZhdmFpbCkKLQkJcmV0ID0gdmVyYnNfcGlvYnVmYXZhaWwoZGQtPnZlcmJzX2xheWVyLmxfYXJnKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBfX2lwYXRoX3ZlcmJzX3JjdihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHZvaWQgKnJjLCB2b2lkICplYnVmLAotCQkgICAgICB1MzIgdGxlbikKLXsKLQlpbnQgcmV0ID0gLUVOT0RFVjsKLQotCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcgJiYgdmVyYnNfcmN2KSB7Ci0JCXZlcmJzX3JjdihkZC0+dmVyYnNfbGF5ZXIubF9hcmcsIHJjLCBlYnVmLCB0bGVuKTsKLQkJcmV0ID0gMDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IG5ld3N0YXRlKQotewotCXUzMiBsc3RhdGU7Ci0JaW50IHJldDsKLQotCXN3aXRjaCAobmV3c3RhdGUpIHsKLQljYXNlIElQQVRIX0lCX0xJTktET1dOOgotCQlpcGF0aF9zZXRfaWJfbHN0YXRlKGRkLCBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfUE9MTCA8PAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOwotCQkvKiBkb24ndCB3YWl0ICovCi0JCXJldCA9IDA7Ci0JCWdvdG8gYmFpbDsKLQotCWNhc2UgSVBBVEhfSUJfTElOS0RPV05fU0xFRVA6Ci0JCWlwYXRoX3NldF9pYl9sc3RhdGUoZGQsIElORklOSVBBVEhfSUJDQ19MSU5LSU5JVENNRF9TTEVFUCA8PAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0lOSVRDTURfU0hJRlQpOwotCQkvKiBkb24ndCB3YWl0ICovCi0JCXJldCA9IDA7Ci0JCWdvdG8gYmFpbDsKLQotCWNhc2UgSVBBVEhfSUJfTElOS0RPV05fRElTQUJMRToKLQkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwKLQkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX0RJU0FCTEUgPDwKLQkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktJTklUQ01EX1NISUZUKTsKLQkJLyogZG9uJ3Qgd2FpdCAqLwotCQlyZXQgPSAwOwotCQlnb3RvIGJhaWw7Ci0KLQljYXNlIElQQVRIX0lCX0xJTktJTklUOgotCQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfTElOS0lOSVQpIHsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfSU5JVCA8PAotCQkJCSAgICBJTkZJTklQQVRIX0lCQ0NfTElOS0NNRF9TSElGVCk7Ci0JCWxzdGF0ZSA9IElQQVRIX0xJTktJTklUOwotCQlicmVhazsKLQotCWNhc2UgSVBBVEhfSUJfTElOS0FSTToKLQkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBUk1FRCkgewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gYmFpbDsKLQkJfQotCQlpZiAoIShkZC0+aXBhdGhfZmxhZ3MgJgotCQkgICAgICAoSVBBVEhfTElOS0lOSVQgfCBJUEFUSF9MSU5LQUNUSVZFKSkpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQVJNRUQgPDwKLQkJCQkgICAgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfU0hJRlQpOwotCQkvKgotCQkgKiBTaW5jZSB0aGUgcG9ydCBjYW4gdHJhbnNpdGlvbiB0byBBQ1RJVkUgYnkgcmVjZWl2aW5nCi0JCSAqIGEgbm9uIFZMIDE1IHBhY2tldCwgd2FpdCBmb3IgZWl0aGVyIHN0YXRlLgotCQkgKi8KLQkJbHN0YXRlID0gSVBBVEhfTElOS0FSTUVEIHwgSVBBVEhfTElOS0FDVElWRTsKLQkJYnJlYWs7Ci0KLQljYXNlIElQQVRIX0lCX0xJTktBQ1RJVkU6Ci0JCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSB7Ci0JCQlyZXQgPSAwOwotCQkJZ290byBiYWlsOwotCQl9Ci0JCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBUk1FRCkpIHsKLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQkJaXBhdGhfc2V0X2liX2xzdGF0ZShkZCwgSU5GSU5JUEFUSF9JQkNDX0xJTktDTURfQUNUSVZFIDw8Ci0JCQkJICAgIElORklOSVBBVEhfSUJDQ19MSU5LQ01EX1NISUZUKTsKLQkJbHN0YXRlID0gSVBBVEhfTElOS0FDVElWRTsKLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlpcGF0aF9kYmcoIkludmFsaWQgbGlua3N0YXRlIDB4JXggcmVxdWVzdGVkXG4iLCBuZXdzdGF0ZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JcmV0ID0gaXBhdGhfd2FpdF9saW5rc3RhdGUoZGQsIGxzdGF0ZSwgMjAwMCk7Ci0KLWJhaWw6Ci0JcmV0dXJuIHJldDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZSk7Ci0KLS8qKgotICogaXBhdGhfbGF5ZXJfc2V0X210dSAtIHNldCB0aGUgTVRVCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQotICogQGFyZzogdGhlIG5ldyBNVFUKLSAqCi0gKiB3ZSBjYW4gaGFuZGxlICJhbnkiIGluY29taW5nIHNpemUsIHRoZSBpc3N1ZSBoZXJlIGlzIHdoZXRoZXIgd2UKLSAqIG5lZWQgdG8gcmVzdHJpY3Qgb3VyIG91dGdvaW5nIHNpemUuICAgRm9yIG5vdywgd2UgZG9uJ3QgZG8gYW55Ci0gKiBzYW5pdHkgY2hlY2tpbmcgb24gdGhpcywgYW5kIHdlIGRvbid0IGRlYWwgd2l0aCB3aGF0IGhhcHBlbnMgdG8KLSAqIHByb2dyYW1zIHRoYXQgYXJlIGFscmVhZHkgcnVubmluZyB3aGVuIHRoZSBzaXplIGNoYW5nZXMuCi0gKiBOT1RFOiBjaGFuZ2luZyB0aGUgTVRVIHdpbGwgdXN1YWxseSBjYXVzZSB0aGUgSUJDIHRvIGdvIGJhY2sgdG8KLSAqIGxpbmsgaW5pdGlhbGl6ZSAoSVBBVEhfSUJTVEFURV9JTklUKSBzdGF0ZS4uLgotICovCi1pbnQgaXBhdGhfbGF5ZXJfc2V0X210dShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBhcmcpCi17Ci0JdTMyIHBpb3NpemU7Ci0JaW50IGNoYW5nZWQgPSAwOwotCWludCByZXQ7Ci0KLQkvKgotCSAqIG10dSBpcyBJQiBkYXRhIHBheWxvYWQgbWF4LiAgSXQncyB0aGUgbGFyZ2VzdCBwb3dlciBvZiAyIGxlc3MKLQkgKiB0aGFuIHBpb3NpemUgKG9yIGV2ZW4gbGFyZ2VyLCBzaW5jZSBpdCBvbmx5IHJlYWxseSBjb250cm9scyB0aGUKLQkgKiBsYXJnZXN0IHdlIGNhbiByZWNlaXZlOyB3ZSBjYW4gc2VuZCB0aGUgbWF4IG9mIHRoZSBtdHUgYW5kCi0JICogcGlvc2l6ZSkuICBXZSBjaGVjayB0aGF0IGl0J3Mgb25lIG9mIHRoZSB2YWxpZCBJQiBzaXplcy4KLQkgKi8KLQlpZiAoYXJnICE9IDI1NiAmJiBhcmcgIT0gNTEyICYmIGFyZyAhPSAxMDI0ICYmIGFyZyAhPSAyMDQ4ICYmCi0JICAgIGFyZyAhPSA0MDk2KSB7Ci0JCWlwYXRoX2RiZygiVHJ5aW5nIHRvIHNldCBpbnZhbGlkIG10dSAldSwgZmFpbGluZ1xuIiwgYXJnKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQlpZiAoZGQtPmlwYXRoX2libXR1ID09IGFyZykgewotCQlyZXQgPSAwOwkvKiBzYW1lIGFzIGN1cnJlbnQgKi8KLQkJZ290byBiYWlsOwotCX0KLQotCXBpb3NpemUgPSBkZC0+aXBhdGhfaWJtYXhsZW47Ci0JZGQtPmlwYXRoX2libXR1ID0gYXJnOwotCi0JaWYgKGFyZyA+PSAocGlvc2l6ZSAtIElQQVRIX1BJT19NQVhJQkhEUikpIHsKLQkJLyogT25seSBpZiBpdCdzIG5vdCB0aGUgaW5pdGlhbCB2YWx1ZSAob3IgcmVzZXQgdG8gaXQpICovCi0JCWlmIChwaW9zaXplICE9IGRkLT5pcGF0aF9pbml0X2libWF4bGVuKSB7Ci0JCQlkZC0+aXBhdGhfaWJtYXhsZW4gPSBwaW9zaXplOwotCQkJY2hhbmdlZCA9IDE7Ci0JCX0KLQl9IGVsc2UgaWYgKChhcmcgKyBJUEFUSF9QSU9fTUFYSUJIRFIpICE9IGRkLT5pcGF0aF9pYm1heGxlbikgewotCQlwaW9zaXplID0gYXJnICsgSVBBVEhfUElPX01BWElCSERSOwotCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJpYm1heGxlbiB3YXMgMHgleCwgc2V0dGluZyB0byAweCV4ICIKLQkJCSAgICIobXR1IDB4JXgpXG4iLCBkZC0+aXBhdGhfaWJtYXhsZW4sIHBpb3NpemUsCi0JCQkgICBhcmcpOwotCQlkZC0+aXBhdGhfaWJtYXhsZW4gPSBwaW9zaXplOwotCQljaGFuZ2VkID0gMTsKLQl9Ci0KLQlpZiAoY2hhbmdlZCkgewotCQkvKgotCQkgKiBzZXQgdGhlIElCQyBtYXhwa3RsZW5ndGggdG8gdGhlIHNpemUgb2Ygb3VyIHBpbwotCQkgKiBidWZmZXJzIGluIHdvcmRzCi0JCSAqLwotCQl1NjQgaWJjID0gZGQtPmlwYXRoX2liY2N0cmw7Ci0JCWliYyAmPSB+KElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fTUFTSyA8PAotCQkJIElORklOSVBBVEhfSUJDQ19NQVhQS1RMRU5fU0hJRlQpOwotCi0JCXBpb3NpemUgPSBwaW9zaXplIC0gMiAqIHNpemVvZih1MzIpOwkvKiBpZ25vcmUgcGJjICovCi0JCWRkLT5pcGF0aF9pYm1heGxlbiA9IHBpb3NpemU7Ci0JCXBpb3NpemUgLz0gc2l6ZW9mKHUzMik7CS8qIGluIHdvcmRzICovCi0JCS8qCi0JCSAqIGZvciBJQ1JDLCB3aGljaCB3ZSBvbmx5IHNlbmQgaW4gZGlhZyB0ZXN0IHBrdCBtb2RlLCBhbmQKLQkJICogd2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCB0aGF0IGZvciBtdHUKLQkJICovCi0JCXBpb3NpemUgKz0gMTsKLQotCQlpYmMgfD0gcGlvc2l6ZSA8PCBJTkZJTklQQVRIX0lCQ0NfTUFYUEtUTEVOX1NISUZUOwotCQlkZC0+aXBhdGhfaWJjY3RybCA9IGliYzsKLQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAotCQkJCSBkZC0+aXBhdGhfaWJjY3RybCk7Ci0JCWRkLT5pcGF0aF9mX3RpZHRlbXBsYXRlKGRkKTsKLQl9Ci0KLQlyZXQgPSAwOwotCi1iYWlsOgotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9tdHUpOwotCi1pbnQgaXBhdGhfc2V0X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBhcmcsIHU4IGxtYykKLXsKLQlkZC0+aXBhdGhfbGlkID0gYXJnOwotCWRkLT5pcGF0aF9sbWMgPSBsbWM7Ci0KIAltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CiAKIAlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnICYmIGxheWVyX2ludHIpCiAJCWxheWVyX2ludHIoZGQtPmlwYXRoX2xheWVyLmxfYXJnLCBJUEFUSF9MQVlFUl9JTlRfTElEKTsKIAogCW11dGV4X3VubG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOwotCi0JcmV0dXJuIDA7CiB9CiAKLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX3NldF9saWQpOwotCi1pbnQgaXBhdGhfbGF5ZXJfc2V0X2d1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBfX2JlNjQgZ3VpZCkKLXsKLQkvKiBYWFggLSBuZWVkIHRvIGluZm9ybSBhbnlvbmUgd2hvIGNhcmVzIHRoaXMganVzdCBoYXBwZW5lZC4gKi8KLQlkZC0+aXBhdGhfZ3VpZCA9IGd1aWQ7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9ndWlkKTsKLQotX19iZTY0IGlwYXRoX2xheWVyX2dldF9ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlyZXR1cm4gZGQtPmlwYXRoX2d1aWQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9ndWlkKTsKLQotdTMyIGlwYXRoX2xheWVyX2dldF9uZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JcmV0dXJuIGRkLT5pcGF0aF9uZ3VpZDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X25ndWlkKTsKLQotdTMyIGlwYXRoX2xheWVyX2dldF9tYWpyZXYoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCXJldHVybiBkZC0+aXBhdGhfbWFqcmV2OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbWFqcmV2KTsKLQotdTMyIGlwYXRoX2xheWVyX2dldF9taW5yZXYoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCXJldHVybiBkZC0+aXBhdGhfbWlucmV2OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbWlucmV2KTsKLQotdTMyIGlwYXRoX2xheWVyX2dldF9wY2lyZXYoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCXJldHVybiBkZC0+aXBhdGhfcGNpcmV2OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfcGNpcmV2KTsKLQotdTMyIGlwYXRoX2xheWVyX2dldF9mbGFncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JcmV0dXJuIGRkLT5pcGF0aF9mbGFnczsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2ZsYWdzKTsKLQotc3RydWN0IGRldmljZSAqaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JcmV0dXJuICZkZC0+cGNpZGV2LT5kZXY7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9kZXZpY2UpOwotCi11MTYgaXBhdGhfbGF5ZXJfZ2V0X2RldmljZWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlyZXR1cm4gZGQtPmlwYXRoX2RldmljZWlkOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfZGV2aWNlaWQpOwotCi11MzIgaXBhdGhfbGF5ZXJfZ2V0X3ZlbmRvcmlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlyZXR1cm4gZGQtPmlwYXRoX3ZlbmRvcmlkOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfdmVuZG9yaWQpOwotCi11NjQgaXBhdGhfbGF5ZXJfZ2V0X2xhc3RpYmNzdGF0KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlyZXR1cm4gZGQtPmlwYXRoX2xhc3RpYmNzdGF0OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQpOwotCi11MzIgaXBhdGhfbGF5ZXJfZ2V0X2libXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlyZXR1cm4gZGQtPmlwYXRoX2libXR1OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfaWJtdHUpOwotCiB2b2lkIGlwYXRoX2xheWVyX2FkZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CiAJbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOwpAQCAtNDExLDEwICsxMTksNiBAQAogCQlkZC0+aXBhdGhfbGF5ZXIubF9hcmcgPQogCQkJbGF5ZXJfYWRkX29uZShkZC0+aXBhdGhfdW5pdCwgZGQpOwogCi0JaWYgKHZlcmJzX2FkZF9vbmUpCi0JCWRkLT52ZXJic19sYXllci5sX2FyZyA9Ci0JCQl2ZXJic19hZGRfb25lKGRkLT5pcGF0aF91bml0LCBkZCk7Ci0KIAltdXRleF91bmxvY2soJmlwYXRoX2xheWVyX211dGV4KTsKIH0KIApAQCAtNDI3LDExICsxMzEsNiBAQAogCQlkZC0+aXBhdGhfbGF5ZXIubF9hcmcgPSBOVUxMOwogCX0KIAotCWlmIChkZC0+dmVyYnNfbGF5ZXIubF9hcmcgJiYgdmVyYnNfcmVtb3ZlX29uZSkgewotCQl2ZXJic19yZW1vdmVfb25lKGRkLT52ZXJic19sYXllci5sX2FyZyk7Ci0JCWRkLT52ZXJic19sYXllci5sX2FyZyA9IE5VTEw7Ci0JfQotCiAJbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7CiB9CiAKQEAgLTQ2Myw5ICsxNjIsNiBAQAogCQlpZiAoZGQtPmlwYXRoX2xheWVyLmxfYXJnKQogCQkJY29udGludWU7CiAKLQkJaWYgKCEoKmRkLT5pcGF0aF9zdGF0dXNwICYgSVBBVEhfU1RBVFVTX1NNQSkpCi0JCQkqZGQtPmlwYXRoX3N0YXR1c3AgfD0gSVBBVEhfU1RBVFVTX09JQl9TTUE7Ci0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7CiAJCWRkLT5pcGF0aF9sYXllci5sX2FyZyA9IGxfYWRkKGRkLT5pcGF0aF91bml0LCBkZCk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKQEAgLTUwOSwxMDcgKzIwNSw2IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3VucmVnaXN0ZXIpOwogCi1zdGF0aWMgdm9pZCBfX2lwYXRoX3ZlcmJzX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKSBhcmc7Ci0KLQkvKgotCSAqIElmIHBvcnQgMCByZWNlaXZlIHBhY2tldCBpbnRlcnJ1cHRzIGFyZSBub3QgYXZhaWxhYmxlLCBvcgotCSAqIGNhbiBiZSBtaXNzZWQsIHBvbGwgdGhlIHJlY2VpdmUgcXVldWUKLQkgKi8KLQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfUE9MTF9SWF9JTlRSKQotCQlpcGF0aF9rcmVjZWl2ZShkZCk7Ci0KLQkvKiBIYW5kbGUgdmVyYnMgbGF5ZXIgdGltZW91dHMuICovCi0JaWYgKGRkLT52ZXJic19sYXllci5sX2FyZyAmJiB2ZXJic190aW1lcl9jYikKLQkJdmVyYnNfdGltZXJfY2IoZGQtPnZlcmJzX2xheWVyLmxfYXJnKTsKLQotCW1vZF90aW1lcigmZGQtPnZlcmJzX2xheWVyLmxfdGltZXIsIGppZmZpZXMgKyAxKTsKLX0KLQotLyoqCi0gKiBpcGF0aF92ZXJic19yZWdpc3RlciAtIHZlcmJzIGxheWVyIHJlZ2lzdHJhdGlvbgotICogQGxfcGlvYnVmYXZhaWw6IGNhbGxiYWNrIGZvciB3aGVuIFBJTyBidWZmZXJzIGJlY29tZSBhdmFpbGFibGUKLSAqIEBsX3JjdjogY2FsbGJhY2sgZm9yIHJlY2VpdmluZyBhIHBhY2tldAotICogQGxfdGltZXJfY2I6IHRpbWVyIGNhbGxiYWNrCi0gKiBAaXBhdGhfZGV2ZGF0YTogZGV2aWNlIGRhdGEgc3RydWN0dXJlIGlzIHB1dCBoZXJlCi0gKi8KLWludCBpcGF0aF92ZXJic19yZWdpc3Rlcih2b2lkICooKmxfYWRkKShpbnQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopLAotCQkJIHZvaWQgKCpsX3JlbW92ZSkodm9pZCAqYXJnKSwKLQkJCSBpbnQgKCpsX3Bpb2J1ZmF2YWlsKSAodm9pZCAqYXJnKSwKLQkJCSB2b2lkICgqbF9yY3YpICh2b2lkICphcmcsIHZvaWQgKnJoZHIsCi0JCQkJCXZvaWQgKmRhdGEsIHUzMiB0bGVuKSwKLQkJCSB2b2lkICgqbF90aW1lcl9jYikgKHZvaWQgKmFyZykpCi17Ci0Jc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQltdXRleF9sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7Ci0KLQl2ZXJic19hZGRfb25lID0gbF9hZGQ7Ci0JdmVyYnNfcmVtb3ZlX29uZSA9IGxfcmVtb3ZlOwotCXZlcmJzX3Bpb2J1ZmF2YWlsID0gbF9waW9idWZhdmFpbDsKLQl2ZXJic19yY3YgPSBsX3JjdjsKLQl2ZXJic190aW1lcl9jYiA9IGxfdGltZXJfY2I7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGQsIHRtcCwgJmlwYXRoX2Rldl9saXN0LCBpcGF0aF9saXN0KSB7Ci0JCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRkLT52ZXJic19sYXllci5sX2FyZykKLQkJCWNvbnRpbnVlOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOwotCQlkZC0+dmVyYnNfbGF5ZXIubF9hcmcgPSBsX2FkZChkZC0+aXBhdGhfdW5pdCwgZGQpOwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7Ci0JbXV0ZXhfdW5sb2NrKCZpcGF0aF9sYXllcl9tdXRleCk7Ci0KLQlpcGF0aF92ZXJic19yZWdpc3RlcmVkID0gMTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF92ZXJic19yZWdpc3Rlcik7Ci0KLXZvaWQgaXBhdGhfdmVyYnNfdW5yZWdpc3Rlcih2b2lkKQotewotCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbXV0ZXhfbG9jaygmaXBhdGhfbGF5ZXJfbXV0ZXgpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZCwgdG1wLCAmaXBhdGhfZGV2X2xpc3QsIGlwYXRoX2xpc3QpIHsKLQkJKmRkLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfT0lCX1NNQTsKLQotCQlpZiAoZGQtPnZlcmJzX2xheWVyLmxfYXJnICYmIHZlcmJzX3JlbW92ZV9vbmUpIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOwotCQkJdmVyYnNfcmVtb3ZlX29uZShkZC0+dmVyYnNfbGF5ZXIubF9hcmcpOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOwotCQkJZGQtPnZlcmJzX2xheWVyLmxfYXJnID0gTlVMTDsKLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOwotCi0JdmVyYnNfYWRkX29uZSA9IE5VTEw7Ci0JdmVyYnNfcmVtb3ZlX29uZSA9IE5VTEw7Ci0JdmVyYnNfcGlvYnVmYXZhaWwgPSBOVUxMOwotCXZlcmJzX3JjdiA9IE5VTEw7Ci0JdmVyYnNfdGltZXJfY2IgPSBOVUxMOwotCi0JaXBhdGhfdmVyYnNfcmVnaXN0ZXJlZCA9IDA7Ci0KLQltdXRleF91bmxvY2soJmlwYXRoX2xheWVyX211dGV4KTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfdmVyYnNfdW5yZWdpc3Rlcik7Ci0KIGludCBpcGF0aF9sYXllcl9vcGVuKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyICogcGt0bWF4KQogewogCWludCByZXQ7CkBAIC02OTgsMzkwICsyOTMsNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfYmNhc3QpOwogCi11MzIgaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCXJldHVybiBpcGF0aF9yZWFkX2NyZWczMihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJwa2V5KTsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkpOwotCi1zdGF0aWMgdm9pZCB1cGRhdGVfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuZ3RoKQotewotCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOwotCi0Jc2dlLT52YWRkciArPSBsZW5ndGg7Ci0Jc2dlLT5sZW5ndGggLT0gbGVuZ3RoOwotCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW5ndGg7Ci0JaWYgKHNnZS0+c2dlX2xlbmd0aCA9PSAwKSB7Ci0JCWlmICgtLXNzLT5udW1fc2dlKQotCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOwotCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKLQkJaWYgKCsrc2dlLT5uID49IElQQVRIX1NFR1NaKSB7Ci0JCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCi0JCQkJcmV0dXJuOwotCQkJc2dlLT5uID0gMDsKLQkJfQotCQlzZ2UtPnZhZGRyID0gc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS52YWRkcjsKLQkJc2dlLT5sZW5ndGggPSBzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLmxlbmd0aDsKLQl9Ci19Ci0KLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KLXN0YXRpYyBpbmxpbmUgdTMyIGdldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCi17Ci0JcmV0dXJuIGRhdGEgPj4gc2hpZnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIHNldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCi17Ci0JcmV0dXJuIGRhdGEgPDwgc2hpZnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTMyIGNsZWFyX3VwcGVyX2J5dGVzKHUzMiBkYXRhLCB1MzIgbiwgdTMyIG9mZikKLXsKLQlkYXRhIDw8PSAoKHNpemVvZih1MzIpIC0gbikgKiBCSVRTX1BFUl9CWVRFKTsKLQlkYXRhID4+PSAoKHNpemVvZih1MzIpIC0gbiAtIG9mZikgKiBCSVRTX1BFUl9CWVRFKTsKLQlyZXR1cm4gZGF0YTsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHUzMiBnZXRfdXBwZXJfYml0cyh1MzIgZGF0YSwgdTMyIHNoaWZ0KQotewotCXJldHVybiBkYXRhIDw8IHNoaWZ0OwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBzZXRfdXBwZXJfYml0cyh1MzIgZGF0YSwgdTMyIHNoaWZ0KQotewotCXJldHVybiBkYXRhID4+IHNoaWZ0OwotfQotCi1zdGF0aWMgaW5saW5lIHUzMiBjbGVhcl91cHBlcl9ieXRlcyh1MzIgZGF0YSwgdTMyIG4sIHUzMiBvZmYpCi17Ci0JZGF0YSA+Pj0gKChzaXplb2YodTMyKSAtIG4pICogQklUU19QRVJfQllURSk7Ci0JZGF0YSA8PD0gKChzaXplb2YodTMyKSAtIG4gLSBvZmYpICogQklUU19QRVJfQllURSk7Ci0JcmV0dXJuIGRhdGE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgY29weV9pbyh1MzIgX19pb21lbSAqcGlvYnVmLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKLQkJICAgIHUzMiBsZW5ndGgpCi17Ci0JdTMyIGV4dHJhID0gMDsKLQl1MzIgZGF0YSA9IDA7Ci0JdTMyIGxhc3Q7Ci0KLQl3aGlsZSAoMSkgewotCQl1MzIgbGVuID0gc3MtPnNnZS5sZW5ndGg7Ci0JCXUzMiBvZmY7Ci0KLQkJQlVHX09OKGxlbiA9PSAwKTsKLQkJaWYgKGxlbiA+IGxlbmd0aCkKLQkJCWxlbiA9IGxlbmd0aDsKLQkJaWYgKGxlbiA+IHNzLT5zZ2Uuc2dlX2xlbmd0aCkKLQkJCWxlbiA9IHNzLT5zZ2Uuc2dlX2xlbmd0aDsKLQkJLyogSWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkLCB0cnkgdG8gYWxpZ24gaXQuICovCi0JCW9mZiA9ICh1bnNpZ25lZCBsb25nKXNzLT5zZ2UudmFkZHIgJiAoc2l6ZW9mKHUzMikgLSAxKTsKLQkJaWYgKG9mZikgewotCQkJdTMyICphZGRyID0gKHUzMiAqKSgodW5zaWduZWQgbG9uZylzcy0+c2dlLnZhZGRyICYKLQkJCQkJICAgIH4oc2l6ZW9mKHUzMikgLSAxKSk7Ci0JCQl1MzIgdiA9IGdldF91cHBlcl9iaXRzKCphZGRyLCBvZmYgKiBCSVRTX1BFUl9CWVRFKTsKLQkJCXUzMiB5OwotCi0JCQl5ID0gc2l6ZW9mKHUzMikgLSBvZmY7Ci0JCQlpZiAobGVuID4geSkKLQkJCQlsZW4gPSB5OwotCQkJaWYgKGxlbiArIGV4dHJhID49IHNpemVvZih1MzIpKSB7Ci0JCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBleHRyYSAqCi0JCQkJCQkgICAgICAgQklUU19QRVJfQllURSk7Ci0JCQkJbGVuID0gc2l6ZW9mKHUzMikgLSBleHRyYTsKLQkJCQlpZiAobGVuID09IGxlbmd0aCkgewotCQkJCQlsYXN0ID0gZGF0YTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBwaW9idWYpOwotCQkJCXBpb2J1ZisrOwotCQkJCWV4dHJhID0gMDsKLQkJCQlkYXRhID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogQ2xlYXIgdW51c2VkIHVwcGVyIGJ5dGVzICovCi0JCQkJZGF0YSB8PSBjbGVhcl91cHBlcl9ieXRlcyh2LCBsZW4sIGV4dHJhKTsKLQkJCQlpZiAobGVuID09IGxlbmd0aCkgewotCQkJCQlsYXN0ID0gZGF0YTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWV4dHJhICs9IGxlbjsKLQkJCX0KLQkJfSBlbHNlIGlmIChleHRyYSkgewotCQkJLyogU291cmNlIGFkZHJlc3MgaXMgYWxpZ25lZC4gKi8KLQkJCXUzMiAqYWRkciA9ICh1MzIgKikgc3MtPnNnZS52YWRkcjsKLQkJCWludCBzaGlmdCA9IGV4dHJhICogQklUU19QRVJfQllURTsKLQkJCWludCB1c2hpZnQgPSAzMiAtIHNoaWZ0OwotCQkJdTMyIGwgPSBsZW47Ci0KLQkJCXdoaWxlIChsID49IHNpemVvZih1MzIpKSB7Ci0JCQkJdTMyIHYgPSAqYWRkcjsKLQotCQkJCWRhdGEgfD0gc2V0X3VwcGVyX2JpdHModiwgc2hpZnQpOwotCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBwaW9idWYpOwotCQkJCWRhdGEgPSBnZXRfdXBwZXJfYml0cyh2LCB1c2hpZnQpOwotCQkJCXBpb2J1ZisrOwotCQkJCWFkZHIrKzsKLQkJCQlsIC09IHNpemVvZih1MzIpOwotCQkJfQotCQkJLyoKLQkJCSAqIFdlIHN0aWxsIGhhdmUgJ2V4dHJhJyBudW1iZXIgb2YgYnl0ZXMgbGVmdG92ZXIuCi0JCQkgKi8KLQkJCWlmIChsKSB7Ci0JCQkJdTMyIHYgPSAqYWRkcjsKLQotCQkJCWlmIChsICsgZXh0cmEgPj0gc2l6ZW9mKHUzMikpIHsKLQkJCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBzaGlmdCk7Ci0JCQkJCWxlbiAtPSBsICsgZXh0cmEgLSBzaXplb2YodTMyKTsKLQkJCQkJaWYgKGxlbiA9PSBsZW5ndGgpIHsKLQkJCQkJCWxhc3QgPSBkYXRhOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJX19yYXdfd3JpdGVsKGRhdGEsIHBpb2J1Zik7Ci0JCQkJCXBpb2J1ZisrOwotCQkJCQlleHRyYSA9IDA7Ci0JCQkJCWRhdGEgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIENsZWFyIHVudXNlZCB1cHBlciBieXRlcyAqLwotCQkJCQlkYXRhIHw9IGNsZWFyX3VwcGVyX2J5dGVzKHYsIGwsCi0JCQkJCQkJCSAgZXh0cmEpOwotCQkJCQlpZiAobGVuID09IGxlbmd0aCkgewotCQkJCQkJbGFzdCA9IGRhdGE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlleHRyYSArPSBsOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAobGVuID09IGxlbmd0aCkgewotCQkJCWxhc3QgPSBkYXRhOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgaWYgKGxlbiA9PSBsZW5ndGgpIHsKLQkJCXUzMiB3OwotCi0JCQkvKgotCQkJICogTmVlZCB0byByb3VuZCB1cCBmb3IgdGhlIGxhc3QgZHdvcmQgaW4gdGhlCi0JCQkgKiBwYWNrZXQuCi0JCQkgKi8KLQkJCXcgPSAobGVuICsgMykgPj4gMjsKLQkJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBzcy0+c2dlLnZhZGRyLCB3IC0gMSk7Ci0JCQlwaW9idWYgKz0gdyAtIDE7Ci0JCQlsYXN0ID0gKCh1MzIgKikgc3MtPnNnZS52YWRkcilbdyAtIDFdOwotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQl1MzIgdyA9IGxlbiA+PiAyOwotCi0JCQlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1Ziwgc3MtPnNnZS52YWRkciwgdyk7Ci0JCQlwaW9idWYgKz0gdzsKLQotCQkJZXh0cmEgPSBsZW4gJiAoc2l6ZW9mKHUzMikgLSAxKTsKLQkJCWlmIChleHRyYSkgewotCQkJCXUzMiB2ID0gKCh1MzIgKikgc3MtPnNnZS52YWRkcilbd107Ci0KLQkJCQkvKiBDbGVhciB1bnVzZWQgdXBwZXIgYnl0ZXMgKi8KLQkJCQlkYXRhID0gY2xlYXJfdXBwZXJfYnl0ZXModiwgZXh0cmEsIDApOwotCQkJfQotCQl9Ci0JCXVwZGF0ZV9zZ2Uoc3MsIGxlbik7Ci0JCWxlbmd0aCAtPSBsZW47Ci0JfQotCS8qIFVwZGF0ZSBhZGRyZXNzIGJlZm9yZSBzZW5kaW5nIHBhY2tldC4gKi8KLQl1cGRhdGVfc2dlKHNzLCBsZW5ndGgpOwotCS8qIG11c3QgZmx1c2ggZWFybHkgZXZlcnl0aGluZyBiZWZvcmUgdHJpZ2dlciB3b3JkICovCi0JaXBhdGhfZmx1c2hfd2MoKTsKLQlfX3Jhd193cml0ZWwobGFzdCwgcGlvYnVmKTsKLQkvKiBiZSBzdXJlIHRyaWdnZXIgd29yZCBpcyB3cml0dGVuICovCi0JaXBhdGhfZmx1c2hfd2MoKTsKLX0KLQotLyoqCi0gKiBpcGF0aF92ZXJic19zZW5kIC0gc2VuZCBhIHBhY2tldCBmcm9tIHRoZSB2ZXJicyBsYXllcgotICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKLSAqIEBoZHJ3b3JkczogdGhlIG51bWJlciBvZiB3b3JkcyBpbiB0aGUgaGVhZGVyCi0gKiBAaGRyOiB0aGUgcGFja2V0IGhlYWRlcgotICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGluIGJ5dGVzCi0gKiBAc3M6IHRoZSBTR0UgdG8gc2VuZAotICoKLSAqIFRoaXMgaXMgbGlrZSBpcGF0aF9zbWFfc2VuZF9wa3QoKSBpbiB0aGF0IHdlIG5lZWQgdG8gYmUgYWJsZSB0byBzZW5kCi0gKiBwYWNrZXRzIGFmdGVyIHRoZSBjaGlwIGlzIGluaXRpYWxpemVkIChNQURzKSBidXQgYWxzbyBsaWtlCi0gKiBpcGF0aF9sYXllcl9zZW5kX2hkcigpIHNpbmNlIGl0cyB1c2VkIGJ5IHRoZSB2ZXJicyBsYXllci4KLSAqLwotaW50IGlwYXRoX3ZlcmJzX3NlbmQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MzIgaGRyd29yZHMsCi0JCSAgICAgdTMyICpoZHIsIHUzMiBsZW4sIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzKQotewotCXUzMiBfX2lvbWVtICpwaW9idWY7Ci0JdTMyIHBsZW47Ci0JaW50IHJldDsKLQotCS8qICsxIGlzIGZvciB0aGUgcXdvcmQgcGFkZGluZyBvZiBwYmMgKi8KLQlwbGVuID0gaGRyd29yZHMgKyAoKGxlbiArIDMpID4+IDIpICsgMTsKLQlpZiAodW5saWtlbHkoKHBsZW4gPDwgMikgPiBkZC0+aXBhdGhfaWJtYXhsZW4pKSB7Ci0JCWlwYXRoX2RiZygicGFja2V0IGxlbiAweCV4IHRvbyBsb25nLCBmYWlsaW5nXG4iLCBwbGVuKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQotCS8qIEdldCBhIFBJTyBidWZmZXIgdG8gdXNlLiAqLwotCXBpb2J1ZiA9IGlwYXRoX2dldHBpb2J1ZihkZCwgTlVMTCk7Ci0JaWYgKHVubGlrZWx5KHBpb2J1ZiA9PSBOVUxMKSkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQkvKgotCSAqIFdyaXRlIGxlbiB0byBjb250cm9sIHF3b3JkLCBubyBmbGFncy4KLQkgKiBXZSBoYXZlIHRvIGZsdXNoIGFmdGVyIHRoZSBQQkMgZm9yIGNvcnJlY3RuZXNzIG9uIHNvbWUgY3B1cwotCSAqIG9yIFdDIGJ1ZmZlciBjYW4gYmUgd3JpdHRlbiBvdXQgb2Ygb3JkZXIuCi0JICovCi0Jd3JpdGVxKHBsZW4sIHBpb2J1Zik7Ci0JaXBhdGhfZmx1c2hfd2MoKTsKLQlwaW9idWYgKz0gMjsKLQlpZiAobGVuID09IDApIHsKLQkJLyoKLQkJICogSWYgdGhlcmUgaXMganVzdCB0aGUgaGVhZGVyIHBvcnRpb24sIG11c3QgZmx1c2ggYmVmb3JlCi0JCSAqIHdyaXRpbmcgbGFzdCB3b3JkIG9mIGhlYWRlciBmb3IgY29ycmVjdG5lc3MsIGFuZCBhZnRlcgotCQkgKiB0aGUgbGFzdCBoZWFkZXIgd29yZCAodHJpZ2dlciB3b3JkKS4KLQkJICovCi0JCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBoZHIsIGhkcndvcmRzIC0gMSk7Ci0JCWlwYXRoX2ZsdXNoX3djKCk7Ci0JCV9fcmF3X3dyaXRlbChoZHJbaGRyd29yZHMgLSAxXSwgcGlvYnVmICsgaGRyd29yZHMgLSAxKTsKLQkJaXBhdGhfZmx1c2hfd2MoKTsKLQkJcmV0ID0gMDsKLQkJZ290byBiYWlsOwotCX0KLQotCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBoZHIsIGhkcndvcmRzKTsKLQlwaW9idWYgKz0gaGRyd29yZHM7Ci0KLQkvKiBUaGUgY29tbW9uIGNhc2UgaXMgYWxpZ25lZCBhbmQgY29udGFpbmVkIGluIG9uZSBzZWdtZW50LiAqLwotCWlmIChsaWtlbHkoc3MtPm51bV9zZ2UgPT0gMSAmJiBsZW4gPD0gc3MtPnNnZS5sZW5ndGggJiYKLQkJICAgISgodW5zaWduZWQgbG9uZylzcy0+c2dlLnZhZGRyICYgKHNpemVvZih1MzIpIC0gMSkpKSkgewotCQl1MzIgdzsKLQkJdTMyICphZGRyID0gKHUzMiAqKSBzcy0+c2dlLnZhZGRyOwotCi0JCS8qIFVwZGF0ZSBhZGRyZXNzIGJlZm9yZSBzZW5kaW5nIHBhY2tldC4gKi8KLQkJdXBkYXRlX3NnZShzcywgbGVuKTsKLQkJLyogTmVlZCB0byByb3VuZCB1cCBmb3IgdGhlIGxhc3QgZHdvcmQgaW4gdGhlIHBhY2tldC4gKi8KLQkJdyA9IChsZW4gKyAzKSA+PiAyOwotCQlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1ZiwgYWRkciwgdyAtIDEpOwotCQkvKiBtdXN0IGZsdXNoIGVhcmx5IGV2ZXJ5dGhpbmcgYmVmb3JlIHRyaWdnZXIgd29yZCAqLwotCQlpcGF0aF9mbHVzaF93YygpOwotCQlfX3Jhd193cml0ZWwoYWRkclt3IC0gMV0sIHBpb2J1ZiArIHcgLSAxKTsKLQkJLyogYmUgc3VyZSB0cmlnZ2VyIHdvcmQgaXMgd3JpdHRlbiAqLwotCQlpcGF0aF9mbHVzaF93YygpOwotCQlyZXQgPSAwOwotCQlnb3RvIGJhaWw7Ci0JfQotCWNvcHlfaW8ocGlvYnVmLCBzcywgbGVuKTsKLQlyZXQgPSAwOwotCi1iYWlsOgotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX3ZlcmJzX3NlbmQpOwotCi1pbnQgaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1NjQgKnN3b3JkcywKLQkJCQkgIHU2NCAqcndvcmRzLCB1NjQgKnNwa3RzLCB1NjQgKnJwa3RzLAotCQkJCSAgdTY0ICp4bWl0X3dhaXQpCi17Ci0JaW50IHJldDsKLQotCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpKSB7Ci0JCS8qIG5vIGhhcmR3YXJlLCBmcmVlemUsIGV0Yy4gKi8KLQkJaXBhdGhfZGJnKCJ1bml0ICV1IG5vdCB1c2FibGVcbiIsIGRkLT5pcGF0aF91bml0KTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQkqc3dvcmRzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250KTsKLQkqcndvcmRzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRyY3ZjbnQpOwotCSpzcGt0cyA9IGlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RzZW5kY250KTsKLQkqcnBrdHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KTsKLQkqeG1pdF93YWl0ID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3NlbmRzdGFsbGNudCk7Ci0KLQlyZXQgPSAwOwotCi1iYWlsOgotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKTsKLQotLyoqCi0gKiBpcGF0aF9sYXllcl9nZXRfY291bnRlcnMgLSBnZXQgdmFyaW91cyBjaGlwIGNvdW50ZXJzCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQotICogQGNudHJzOiBjb3VudGVycyBhcmUgcGxhY2VkIGhlcmUKLSAqCi0gKiBSZXR1cm4gdGhlIGNvdW50ZXJzIG5lZWRlZCBieSByZWN2X3BtYV9nZXRfcG9ydGNvdW50ZXJzKCkuCi0gKi8KLWludCBpcGF0aF9sYXllcl9nZXRfY291bnRlcnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAotCQkJICAgICAgc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzICpjbnRycykKLXsKLQlpbnQgcmV0OwotCi0JaWYgKCEoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfSU5JVFRFRCkpIHsKLQkJLyogbm8gaGFyZHdhcmUsIGZyZWV6ZSwgZXRjLiAqLwotCQlpcGF0aF9kYmcoInVuaXQgJXUgbm90IHVzYWJsZVxuIiwgZGQtPmlwYXRoX3VuaXQpOwotCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIGJhaWw7Ci0JfQotCWNudHJzLT5zeW1ib2xfZXJyb3JfY291bnRlciA9Ci0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYnN5bWJvbGVycmNudCk7Ci0JY250cnMtPmxpbmtfZXJyb3JfcmVjb3ZlcnlfY291bnRlciA9Ci0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYmxpbmtlcnJyZWNvdmNudCk7Ci0JLyoKLQkgKiBUaGUgbGluayBkb3duZWQgY291bnRlciBjb3VudHMgd2hlbiB0aGUgb3RoZXIgc2lkZSBkb3ducyB0aGUKLQkgKiBjb25uZWN0aW9uLiAgV2UgYWRkIGluIHRoZSBudW1iZXIgb2YgdGltZXMgd2UgZG93bmVkIHRoZSBsaW5rCi0JICogZHVlIHRvIGxvY2FsIGxpbmsgaW50ZWdyaXR5IGVycm9ycyB0byBjb21wZW5zYXRlLgotCSAqLwotCWNudHJzLT5saW5rX2Rvd25lZF9jb3VudGVyID0KLQkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2libGlua2Rvd25jbnQpOwotCWNudHJzLT5wb3J0X3Jjdl9lcnJvcnMgPQotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfcnhkcm9wcGt0Y250KSArCi0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9yY3ZvdmZsY250KSArCi0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wb3J0b3ZmbGNudCkgKwotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJyX3JsZW5jbnQpICsKLQkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2ludmFsaWRybGVuY250KSArCi0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJpY3JjY250KSArCi0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJ2Y3JjY250KSArCi0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJscGNyY2NudCkgKwotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfYmFkZm9ybWF0Y250KTsKLQljbnRycy0+cG9ydF9yY3ZfcmVtcGh5c19lcnJvcnMgPQotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcmN2ZWJwY250KTsKLQljbnRycy0+cG9ydF94bWl0X2Rpc2NhcmRzID0KLQkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3Vuc3VwdmxjbnQpOwotCWNudHJzLT5wb3J0X3htaXRfZGF0YSA9Ci0JCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl93b3Jkc2VuZGNudCk7Ci0JY250cnMtPnBvcnRfcmN2X2RhdGEgPQotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHJjdmNudCk7Ci0JY250cnMtPnBvcnRfeG1pdF9wYWNrZXRzID0KLQkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHNlbmRjbnQpOwotCWNudHJzLT5wb3J0X3Jjdl9wYWNrZXRzID0KLQkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3BrdHJjdmNudCk7Ci0JY250cnMtPmxvY2FsX2xpbmtfaW50ZWdyaXR5X2Vycm9ycyA9IGRkLT5pcGF0aF9sbGlfZXJyb3JzOwotCWNudHJzLT5leGNlc3NpdmVfYnVmZmVyX292ZXJydW5fZXJyb3JzID0gMDsgLyogWFhYICovCi0KLQlyZXQgPSAwOwotCi1iYWlsOgotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9jb3VudGVycyk7Ci0KLWludCBpcGF0aF9sYXllcl93YW50X2J1ZmZlcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0Jc2V0X2JpdChJUEFUSF9TX1BJT0lOVEJVRkFWQUlMLCAmZGQtPmlwYXRoX3NlbmRjdHJsKTsKLQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAotCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfd2FudF9idWZmZXIpOwotCiBpbnQgaXBhdGhfbGF5ZXJfc2VuZF9oZHIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICpoZHIpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMTUzLDM4OSArMzY0LDMgQEAKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X3Bpb2ludGJ1ZmF2YWlsX2ludCk7Ci0KLWludCBpcGF0aF9sYXllcl9lbmFibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCS8qCi0JICogSFQtNDAwIGhhcyBhIGRlc2lnbiBmbGF3IHdoZXJlIHRoZSBjaGlwIGFuZCBrZXJuZWwgaWRlYQotCSAqIG9mIHRoZSB0YWlsIHJlZ2lzdGVyIGRvbid0IGFsd2F5cyBhZ3JlZSwgYW5kIHRoZXJlZm9yZSB3ZSB3b24ndAotCSAqIGdldCBhbiBpbnRlcnJ1cHQgb24gdGhlIG5leHQgcGFja2V0IHJlY2VpdmVkLgotCSAqIElmIHRoZSBib2FyZCBzdXBwb3J0cyBwZXIgcGFja2V0IHJlY2VpdmUgaW50ZXJydXB0cywgdXNlIGl0LgotCSAqIE90aGVyd2lzZSwgdGhlIHRpbWVyIGZ1bmN0aW9uIHBlcmlvZGljYWxseSBjaGVja3MgZm9yIHBhY2tldHMKLQkgKiB0byBjb3ZlciB0aGlzIGNhc2UuCi0JICogRWl0aGVyIHdheSwgdGhlIHRpbWVyIGlzIG5lZWRlZCBmb3IgdmVyYnMgbGF5ZXIgcmVsYXRlZAotCSAqIHByb2Nlc3NpbmcuCi0JICovCi0JaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgewotCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2RlYnVncG9ydHNlbGVjdCwKLQkJCQkgMHgyMDc0MDc2NTQyMzEwVUxMKTsKLQkJLyogRW5hYmxlIEdQSU8gYml0IDIgaW50ZXJydXB0ICovCi0JCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLAotCQkJCSAodTY0KSAoMSA8PCAyKSk7Ci0JfQotCi0JaW5pdF90aW1lcigmZGQtPnZlcmJzX2xheWVyLmxfdGltZXIpOwotCWRkLT52ZXJic19sYXllci5sX3RpbWVyLmZ1bmN0aW9uID0gX19pcGF0aF92ZXJic190aW1lcjsKLQlkZC0+dmVyYnNfbGF5ZXIubF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGQ7Ci0JZGQtPnZlcmJzX2xheWVyLmxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAxOwotCWFkZF90aW1lcigmZGQtPnZlcmJzX2xheWVyLmxfdGltZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2VuYWJsZV90aW1lcik7Ci0KLWludCBpcGF0aF9sYXllcl9kaXNhYmxlX3RpbWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQkvKiBEaXNhYmxlIEdQSU8gYml0IDIgaW50ZXJydXB0ICovCi0JaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikKLQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX21hc2ssIDApOwotCi0JZGVsX3RpbWVyX3N5bmMoJmRkLT52ZXJic19sYXllci5sX3RpbWVyKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9kaXNhYmxlX3RpbWVyKTsKLQotLyoqCi0gKiBpcGF0aF9sYXllcl9zZXRfdmVyYnNfZmxhZ3MgLSBzZXQgdGhlIHZlcmJzIGxheWVyIGZsYWdzCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQotICogQGZsYWdzOiB0aGUgZmxhZ3MgdG8gc2V0Ci0gKi8KLWludCBpcGF0aF9sYXllcl9zZXRfdmVyYnNfZmxhZ3Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBmbGFncykKLXsKLQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqc3M7Ci0JdW5zaWduZWQgbG9uZyBsZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBsZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzcywgJmlwYXRoX2Rldl9saXN0LCBpcGF0aF9saXN0KSB7Ci0JCWlmICghKHNzLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpKQotCQkJY29udGludWU7Ci0JCWlmICgoZmxhZ3MgJiBJUEFUSF9WRVJCU19LRVJORUxfU01BKSAmJgotCQkgICAgISgqc3MtPmlwYXRoX3N0YXR1c3AgJiBJUEFUSF9TVEFUVVNfU01BKSkKLQkJCSpzcy0+aXBhdGhfc3RhdHVzcCB8PSBJUEFUSF9TVEFUVVNfT0lCX1NNQTsKLQkJZWxzZQotCQkJKnNzLT5pcGF0aF9zdGF0dXNwICY9IH5JUEFUSF9TVEFUVVNfT0lCX1NNQTsKLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGxmbGFncyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzKTsKLQotLyoqCi0gKiBpcGF0aF9sYXllcl9nZXRfbnBrZXlzIC0gcmV0dXJuIHRoZSBzaXplIG9mIHRoZSBQS0VZIHRhYmxlIGZvciBwb3J0IDAKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKi8KLXVuc2lnbmVkIGlwYXRoX2xheWVyX2dldF9ucGtleXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCXJldHVybiBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wZFswXS0+cG9ydF9wa2V5cyk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9ucGtleXMpOwotCi0vKioKLSAqIGlwYXRoX2xheWVyX2dldF9wa2V5IC0gcmV0dXJuIHRoZSBpbmRleGVkIFBLRVkgZnJvbSB0aGUgcG9ydCAwIFBLRVkgdGFibGUKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAaW5kZXg6IHRoZSBQS0VZIGluZGV4Ci0gKi8KLXVuc2lnbmVkIGlwYXRoX2xheWVyX2dldF9wa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgaW5kZXgpCi17Ci0JdW5zaWduZWQgcmV0OwotCi0JaWYgKGluZGV4ID49IEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3BrZXlzKSkKLQkJcmV0ID0gMDsKLQllbHNlCi0JCXJldCA9IGRkLT5pcGF0aF9wZFswXS0+cG9ydF9wa2V5c1tpbmRleF07Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfcGtleSk7Ci0KLS8qKgotICogaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzIC0gcmV0dXJuIHRoZSBQS0VZIHRhYmxlIGZvciBwb3J0IDAKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAcGtleXM6IHRoZSBwa2V5IHRhYmxlIGlzIHBsYWNlZCBoZXJlCi0gKi8KLWludCBpcGF0aF9sYXllcl9nZXRfcGtleXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYgKiBwa2V5cykKLXsKLQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkWzBdOwotCi0JbWVtY3B5KHBrZXlzLCBwZC0+cG9ydF9wa2V5cywgc2l6ZW9mKHBkLT5wb3J0X3BrZXlzKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzKTsKLQotLyoqCi0gKiBybV9wa2V5IC0gZGVjcmVjbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgZ2l2ZW4gUEtFWQotICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKLSAqIEBrZXk6IHRoZSBQS0VZIGluZGV4Ci0gKgotICogUmV0dXJuIHRydWUgaWYgdGhpcyB3YXMgdGhlIGxhc3QgcmVmZXJlbmNlIGFuZCB0aGUgaGFyZHdhcmUgdGFibGUgZW50cnkKLSAqIG5lZWRzIHRvIGJlIGNoYW5nZWQuCi0gKi8KLXN0YXRpYyBpbnQgcm1fcGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBrZXkpCi17Ci0JaW50IGk7Ci0JaW50IHJldDsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGkrKykgewotCQlpZiAoZGQtPmlwYXRoX3BrZXlzW2ldICE9IGtleSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKSkgewotCQkJZGQtPmlwYXRoX3BrZXlzW2ldID0gMDsKLQkJCXJldCA9IDE7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JcmV0ID0gMDsKLQotYmFpbDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGFkZF9wa2V5IC0gYWRkIHRoZSBnaXZlbiBQS0VZIHRvIHRoZSBoYXJkd2FyZSB0YWJsZQotICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKLSAqIEBrZXk6IHRoZSBQS0VZCi0gKgotICogUmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgdW5hYmxlIHRvIGFkZCB0aGUgZW50cnksIHplcm8gaWYgbm8gY2hhbmdlLAotICogb3IgMSBpZiB0aGUgaGFyZHdhcmUgUEtFWSByZWdpc3RlciBuZWVkcyB0byBiZSB1cGRhdGVkLgotICovCi1zdGF0aWMgaW50IGFkZF9wa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2IGtleSkKLXsKLQlpbnQgaTsKLQl1MTYgbGtleSA9IGtleSAmIDB4N0ZGRjsKLQlpbnQgYW55ID0gMDsKLQlpbnQgcmV0OwotCi0JaWYgKGxrZXkgPT0gMHg3RkZGKSB7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQkvKiBMb29rIGZvciBhbiBlbXB0eSBzbG90IG9yIGEgbWF0Y2hpbmcgUEtFWS4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZC0+aXBhdGhfcGtleXMpOyBpKyspIHsKLQkJaWYgKCFkZC0+aXBhdGhfcGtleXNbaV0pIHsKLQkJCWFueSsrOwotCQkJY29udGludWU7Ci0JCX0KLQkJLyogSWYgaXQgbWF0Y2hlcyBleGFjdGx5LCB0cnkgdG8gaW5jcmVtZW50IHRoZSByZWYgY291bnQgKi8KLQkJaWYgKGRkLT5pcGF0aF9wa2V5c1tpXSA9PSBrZXkpIHsKLQkJCWlmIChhdG9taWNfaW5jX3JldHVybigmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKSA+IDEpIHsKLQkJCQlyZXQgPSAwOwotCQkJCWdvdG8gYmFpbDsKLQkJCX0KLQkJCS8qIExvc3QgdGhlIHJhY2UuIExvb2sgZm9yIGFuIGVtcHR5IHNsb3QgYmVsb3cuICovCi0JCQlhdG9taWNfZGVjKCZkZC0+aXBhdGhfcGtleXJlZnNbaV0pOwotCQkJYW55Kys7Ci0JCX0KLQkJLyoKLQkJICogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gaGF2ZSBib3RoIHRoZSBsaW1pdGVkIGFuZCB1bmxpbWl0ZWQKLQkJICogUEtFWSBzZXQgYXQgdGhlIHNhbWUgdGltZSBzaW5jZSB0aGUgdW5saW1pdGVkIG9uZSB3aWxsCi0JCSAqIGRpc2FibGUgdGhlIGxpbWl0ZWQgb25lLgotCQkgKi8KLQkJaWYgKChkZC0+aXBhdGhfcGtleXNbaV0gJiAweDdGRkYpID09IGxrZXkpIHsKLQkJCXJldCA9IC1FRVhJU1Q7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQl9Ci0JaWYgKCFhbnkpIHsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIGJhaWw7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGkrKykgewotCQlpZiAoIWRkLT5pcGF0aF9wa2V5c1tpXSAmJgotCQkgICAgYXRvbWljX2luY19yZXR1cm4oJmRkLT5pcGF0aF9wa2V5cmVmc1tpXSkgPT0gMSkgewotCQkJLyogZm9yIGlwYXRoc3RhdHMsIGV0Yy4gKi8KLQkJCWlwYXRoX3N0YXRzLnNwc19wa2V5c1tpXSA9IGxrZXk7Ci0JCQlkZC0+aXBhdGhfcGtleXNbaV0gPSBrZXk7Ci0JCQlyZXQgPSAxOwotCQkJZ290byBiYWlsOwotCQl9Ci0JfQotCXJldCA9IC1FQlVTWTsKLQotYmFpbDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKioKLSAqIGlwYXRoX2xheWVyX3NldF9wa2V5cyAtIHNldCB0aGUgUEtFWSB0YWJsZSBmb3IgcG9ydCAwCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQotICogQHBrZXlzOiB0aGUgUEtFWSB0YWJsZQotICovCi1pbnQgaXBhdGhfbGF5ZXJfc2V0X3BrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2ICogcGtleXMpCi17Ci0Jc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKLQlpbnQgaTsKLQlpbnQgY2hhbmdlZCA9IDA7Ci0KLQlwZCA9IGRkLT5pcGF0aF9wZFswXTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkLT5wb3J0X3BrZXlzKTsgaSsrKSB7Ci0JCXUxNiBrZXkgPSBwa2V5c1tpXTsKLQkJdTE2IG9rZXkgPSBwZC0+cG9ydF9wa2V5c1tpXTsKLQotCQlpZiAoa2V5ID09IG9rZXkpCi0JCQljb250aW51ZTsKLQkJLyoKLQkJICogVGhlIHZhbHVlIG9mIHRoaXMgUEtFWSB0YWJsZSBlbnRyeSBpcyBjaGFuZ2luZy4KLQkJICogUmVtb3ZlIHRoZSBvbGQgZW50cnkgaW4gdGhlIGhhcmR3YXJlJ3MgYXJyYXkgb2YgUEtFWXMuCi0JCSAqLwotCQlpZiAob2tleSAmIDB4N0ZGRikKLQkJCWNoYW5nZWQgfD0gcm1fcGtleShkZCwgb2tleSk7Ci0JCWlmIChrZXkgJiAweDdGRkYpIHsKLQkJCWludCByZXQgPSBhZGRfcGtleShkZCwga2V5KTsKLQotCQkJaWYgKHJldCA8IDApCi0JCQkJa2V5ID0gMDsKLQkJCWVsc2UKLQkJCQljaGFuZ2VkIHw9IHJldDsKLQkJfQotCQlwZC0+cG9ydF9wa2V5c1tpXSA9IGtleTsKLQl9Ci0JaWYgKGNoYW5nZWQpIHsKLQkJdTY0IHBrZXk7Ci0KLQkJcGtleSA9ICh1NjQpIGRkLT5pcGF0aF9wa2V5c1swXSB8Ci0JCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzFdIDw8IDE2KSB8Ci0JCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzJdIDw8IDMyKSB8Ci0JCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzNdIDw8IDQ4KTsKLQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicDAgbmV3IHBrZXkgcmVnICVsbHhcbiIsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwa2V5KTsKLQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wYXJ0aXRpb25rZXksCi0JCQkJIHBrZXkpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X3BrZXlzKTsKLQotLyoqCi0gKiBpcGF0aF9sYXllcl9nZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUgLSBnZXQgdGhlIGRlZmF1bHQgbGlua2Rvd24gc3RhdGUKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKgotICogUmV0dXJucyB6ZXJvIGlmIHRoZSBkZWZhdWx0IGlzIFBPTEwsIDEgaWYgdGhlIGRlZmF1bHQgaXMgU0xFRVAuCi0gKi8KLWludCBpcGF0aF9sYXllcl9nZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCXJldHVybiAhIShkZC0+aXBhdGhfaWJjY3RybCAmIElORklOSVBBVEhfSUJDQ19MSU5LRE9XTkRFRkFVTFRTVEFURSk7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX2dldF9saW5rZG93bmRlZmF1bHRzdGF0ZSk7Ci0KLS8qKgotICogaXBhdGhfbGF5ZXJfc2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlIC0gc2V0IHRoZSBkZWZhdWx0IGxpbmtkb3duIHN0YXRlCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQotICogQHNsZWVwOiB0aGUgbmV3IHN0YXRlCi0gKgotICogTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IHRha2UgZWZmZWN0IHdoZW4gdGhlIGxpbmsgc3RhdGUgY2hhbmdlcy4KLSAqLwotaW50IGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCi0JCQkJCSBpbnQgc2xlZXApCi17Ci0JaWYgKHNsZWVwKQotCQlkZC0+aXBhdGhfaWJjY3RybCB8PSBJTkZJTklQQVRIX0lCQ0NfTElOS0RPV05ERUZBVUxUU1RBVEU7Ci0JZWxzZQotCQlkZC0+aXBhdGhfaWJjY3RybCAmPSB+SU5GSU5JUEFUSF9JQkNDX0xJTktET1dOREVGQVVMVFNUQVRFOwotCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjY3RybCwKLQkJCSBkZC0+aXBhdGhfaWJjY3RybCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZSk7Ci0KLWludCBpcGF0aF9sYXllcl9nZXRfcGh5ZXJydGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKLXsKLQlyZXR1cm4gKGRkLT5pcGF0aF9pYmNjdHJsID4+Ci0JCUlORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQpICYKLQkJSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9NQVNLOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfcGh5ZXJydGhyZXNob2xkKTsKLQotLyoqCi0gKiBpcGF0aF9sYXllcl9zZXRfcGh5ZXJydGhyZXNob2xkIC0gc2V0IHRoZSBwaHlzaWNhbCBlcnJvciB0aHJlc2hvbGQKLSAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCi0gKiBAbjogdGhlIG5ldyB0aHJlc2hvbGQKLSAqCi0gKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgbGluayBzdGF0ZSBjaGFuZ2VzLgotICovCi1pbnQgaXBhdGhfbGF5ZXJfc2V0X3BoeWVycnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIG4pCi17Ci0JdW5zaWduZWQgdjsKLQotCXYgPSAoZGQtPmlwYXRoX2liY2N0cmwgPj4gSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9TSElGVCkgJgotCQlJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX01BU0s7Ci0JaWYgKHYgIT0gbikgewotCQlkZC0+aXBhdGhfaWJjY3RybCAmPQotCQkJfihJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX01BU0sgPDwKLQkJCSAgSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9TSElGVCk7Ci0JCWRkLT5pcGF0aF9pYmNjdHJsIHw9Ci0JCQkodTY0KSBuIDw8IElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQ7Ci0JCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfaWJjY3RybCwKLQkJCQkgZGQtPmlwYXRoX2liY2N0cmwpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfc2V0X3BoeWVycnRocmVzaG9sZCk7Ci0KLWludCBpcGF0aF9sYXllcl9nZXRfb3ZlcnJ1bnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JcmV0dXJuIChkZC0+aXBhdGhfaWJjY3RybCA+PgotCQlJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVCkgJgotCQlJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9NQVNLOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChpcGF0aF9sYXllcl9nZXRfb3ZlcnJ1bnRocmVzaG9sZCk7Ci0KLS8qKgotICogaXBhdGhfbGF5ZXJfc2V0X292ZXJydW50aHJlc2hvbGQgLSBzZXQgdGhlIG92ZXJydW4gdGhyZXNob2xkCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQotICogQG46IHRoZSBuZXcgdGhyZXNob2xkCi0gKgotICogTm90ZSB0aGF0IHRoaXMgd2lsbCBvbmx5IHRha2UgZWZmZWN0IHdoZW4gdGhlIGxpbmsgc3RhdGUgY2hhbmdlcy4KLSAqLwotaW50IGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgbikKLXsKLQl1bnNpZ25lZCB2OwotCi0JdiA9IChkZC0+aXBhdGhfaWJjY3RybCA+PiBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVCkgJgotCQlJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9NQVNLOwotCWlmICh2ICE9IG4pIHsKLQkJZGQtPmlwYXRoX2liY2N0cmwgJj0KLQkJCX4oSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfTUFTSyA8PAotCQkJICBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVCk7Ci0JCWRkLT5pcGF0aF9pYmNjdHJsIHw9Ci0JCQkodTY0KSBuIDw8IElORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX1NISUZUOwotCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCi0JCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLUVYUE9SVF9TWU1CT0xfR1BMKGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkKTsKLQotaW50IGlwYXRoX2xheWVyX2dldF9ib2FyZG5hbWUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBjaGFyICpuYW1lLAotCQkJICAgICAgc2l6ZV90IG5hbWVsZW4pCi17Ci0JcmV0dXJuIGRkLT5pcGF0aF9mX2dldF9ib2FyZG5hbWUoZGQsIG5hbWUsIG5hbWVsZW4pOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X2JvYXJkbmFtZSk7Ci0KLXUzMiBpcGF0aF9sYXllcl9nZXRfcmN2aGRyZW50c2l6ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCi17Ci0JcmV0dXJuIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplOwotfQotRVhQT1JUX1NZTUJPTF9HUEwoaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2xheWVyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaAppbmRleCA3MTQ4NTA5Li4zODU0YTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbGF5ZXIuaApAQCAtNDAsNzMgKzQwLDkgQEAKICAqLwogCiBzdHJ1Y3Qgc2tfYnVmZjsKLXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGU7CiBzdHJ1Y3QgaXBhdGhfZGV2ZGF0YTsKIHN0cnVjdCBldGhlcl9oZWFkZXI7CiAKLXN0cnVjdCBpcGF0aF9sYXllcl9jb3VudGVycyB7Ci0JdTY0IHN5bWJvbF9lcnJvcl9jb3VudGVyOwotCXU2NCBsaW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7Ci0JdTY0IGxpbmtfZG93bmVkX2NvdW50ZXI7Ci0JdTY0IHBvcnRfcmN2X2Vycm9yczsKLQl1NjQgcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7Ci0JdTY0IHBvcnRfeG1pdF9kaXNjYXJkczsKLQl1NjQgcG9ydF94bWl0X2RhdGE7Ci0JdTY0IHBvcnRfcmN2X2RhdGE7Ci0JdTY0IHBvcnRfeG1pdF9wYWNrZXRzOwotCXU2NCBwb3J0X3Jjdl9wYWNrZXRzOwotCXUzMiBsb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnM7Ci0JdTMyIGV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7Ci19OwotCi0vKgotICogQSBzZWdtZW50IGlzIGEgbGluZWFyIHJlZ2lvbiBvZiBsb3cgcGh5c2ljYWwgbWVtb3J5LgotICogWFhYIE1heWJlIHdlIHNob3VsZCB1c2UgcGh5cyBhZGRyIGhlcmUgYW5kIGttYXAoKS9rdW5tYXAoKS4KLSAqIFVzZWQgYnkgdGhlIHZlcmJzIGxheWVyLgotICovCi1zdHJ1Y3QgaXBhdGhfc2VnIHsKLQl2b2lkICp2YWRkcjsKLQlzaXplX3QgbGVuZ3RoOwotfTsKLQotLyogVGhlIG51bWJlciBvZiBpcGF0aF9zZWdzIHRoYXQgZml0IGluIGEgcGFnZS4gKi8KLSNkZWZpbmUgSVBBVEhfU0VHU1ogICAgIChQQUdFX1NJWkUgLyBzaXplb2YgKHN0cnVjdCBpcGF0aF9zZWcpKQotCi1zdHJ1Y3QgaXBhdGhfc2VnYXJyYXkgewotCXN0cnVjdCBpcGF0aF9zZWcgc2Vnc1tJUEFUSF9TRUdTWl07Ci19OwotCi1zdHJ1Y3QgaXBhdGhfbXJlZ2lvbiB7Ci0JdTY0IHVzZXJfYmFzZTsJCS8qIFVzZXIncyBhZGRyZXNzIGZvciB0aGlzIHJlZ2lvbiAqLwotCXU2NCBpb3ZhOwkJLyogSUIgc3RhcnQgYWRkcmVzcyBvZiB0aGlzIHJlZ2lvbiAqLwotCXNpemVfdCBsZW5ndGg7Ci0JdTMyIGxrZXk7Ci0JdTMyIG9mZnNldDsJCS8qIG9mZnNldCAoYnl0ZXMpIHRvIHN0YXJ0IG9mIHJlZ2lvbiAqLwotCWludCBhY2Nlc3NfZmxhZ3M7Ci0JdTMyIG1heF9zZWdzOwkJLyogbnVtYmVyIG9mIGlwYXRoX3NlZ3MgaW4gYWxsIHRoZSBhcnJheXMgKi8KLQl1MzIgbWFwc3o7CQkvKiBzaXplIG9mIHRoZSBtYXAgYXJyYXkgKi8KLQlzdHJ1Y3QgaXBhdGhfc2VnYXJyYXkgKm1hcFswXTsJLyogdGhlIHNlZ21lbnRzICovCi19OwotCi0vKgotICogVGhlc2Uga2VlcCB0cmFjayBvZiB0aGUgY29weSBwcm9ncmVzcyB3aXRoaW4gYSBtZW1vcnkgcmVnaW9uLgotICogVXNlZCBieSB0aGUgdmVyYnMgbGF5ZXIuCi0gKi8KLXN0cnVjdCBpcGF0aF9zZ2UgewotCXN0cnVjdCBpcGF0aF9tcmVnaW9uICptcjsKLQl2b2lkICp2YWRkcjsJCS8qIGN1cnJlbnQgcG9pbnRlciBpbnRvIHRoZSBzZWdtZW50ICovCi0JdTMyIHNnZV9sZW5ndGg7CQkvKiBsZW5ndGggb2YgdGhlIFNHRSAqLwotCXUzMiBsZW5ndGg7CQkvKiByZW1haW5pbmcgbGVuZ3RoIG9mIHRoZSBzZWdtZW50ICovCi0JdTE2IG07CQkJLyogY3VycmVudCBpbmRleDogbXItPm1hcFttXSAqLwotCXUxNiBuOwkJCS8qIGN1cnJlbnQgaW5kZXg6IG1yLT5tYXBbbV0tPnNlZ3Nbbl0gKi8KLX07Ci0KLXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgewotCXN0cnVjdCBpcGF0aF9zZ2UgKnNnX2xpc3Q7CS8qIG5leHQgU0dFIHRvIGJlIHVzZWQgaWYgYW55ICovCi0Jc3RydWN0IGlwYXRoX3NnZSBzZ2U7CS8qIHByb2dyZXNzIHN0YXRlIGZvciB0aGUgY3VycmVudCBTR0UgKi8KLQl1OCBudW1fc2dlOwotfTsKLQogaW50IGlwYXRoX2xheWVyX3JlZ2lzdGVyKHZvaWQgKigqbF9hZGQpKGludCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKiksCiAJCQkgdm9pZCAoKmxfcmVtb3ZlKSh2b2lkICopLAogCQkJIGludCAoKmxfaW50cikodm9pZCAqLCB1MzIpLApAQCAtMTE0LDYyICs1MCwxNCBAQAogCQkJCSAgICAgIHN0cnVjdCBza19idWZmICopLAogCQkJIHUxNiByY3Zfb3Bjb2RlLAogCQkJIGludCAoKmxfcmN2X2xpZCkodm9pZCAqLCB2b2lkICopKTsKLWludCBpcGF0aF92ZXJic19yZWdpc3Rlcih2b2lkICooKmxfYWRkKShpbnQsIHN0cnVjdCBpcGF0aF9kZXZkYXRhICopLAotCQkJIHZvaWQgKCpsX3JlbW92ZSkodm9pZCAqYXJnKSwKLQkJCSBpbnQgKCpsX3Bpb2J1ZmF2YWlsKSh2b2lkICphcmcpLAotCQkJIHZvaWQgKCpsX3Jjdikodm9pZCAqYXJnLCB2b2lkICpyaGRyLAotCQkJCSAgICAgICB2b2lkICpkYXRhLCB1MzIgdGxlbiksCi0JCQkgdm9pZCAoKmxfdGltZXJfY2IpKHZvaWQgKmFyZykpOwogdm9pZCBpcGF0aF9sYXllcl91bnJlZ2lzdGVyKHZvaWQpOwotdm9pZCBpcGF0aF92ZXJic191bnJlZ2lzdGVyKHZvaWQpOwogaW50IGlwYXRoX2xheWVyX29wZW4oc3RydWN0IGlwYXRoX2RldmRhdGEgKiwgdTMyICogcGt0bWF4KTsKIHUxNiBpcGF0aF9sYXllcl9nZXRfbGlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7CiBpbnQgaXBhdGhfbGF5ZXJfZ2V0X21hYyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4ICopOwogdTE2IGlwYXRoX2xheWVyX2dldF9iY2FzdChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotdTMyIGlwYXRoX2xheWVyX2dldF9jcl9lcnJwa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7Ci1pbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IHN0YXRlKTsKLWludCBpcGF0aF9sYXllcl9zZXRfbXR1KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHUxNik7Ci1pbnQgaXBhdGhfc2V0X2xpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCB1MzIsIHU4KTsKIGludCBpcGF0aF9sYXllcl9zZW5kX2hkcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCiAJCQkgc3RydWN0IGV0aGVyX2hlYWRlciAqaGRyKTsKLWludCBpcGF0aF92ZXJic19zZW5kKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGhkcndvcmRzLAotCQkgICAgIHUzMiAqIGhkciwgdTMyIGxlbiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MpOwogaW50IGlwYXRoX2xheWVyX3NldF9waW9pbnRidWZhdmFpbF9pbnQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLWludCBpcGF0aF9sYXllcl9nZXRfYm9hcmRuYW1lKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqbmFtZSwKLQkJCSAgICAgIHNpemVfdCBuYW1lbGVuKTsKLWludCBpcGF0aF9sYXllcl9zbmFwc2hvdF9jb3VudGVycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCAqc3dvcmRzLAotCQkJCSAgdTY0ICpyd29yZHMsIHU2NCAqc3BrdHMsIHU2NCAqcnBrdHMsCi0JCQkJICB1NjQgKnhtaXRfd2FpdCk7Ci1pbnQgaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKLQkJCSAgICAgc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzICpjbnRycyk7Ci1pbnQgaXBhdGhfbGF5ZXJfd2FudF9idWZmZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLWludCBpcGF0aF9sYXllcl9zZXRfZ3VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqLCBfX2JlNjQgZ3VpZCk7Ci1fX2JlNjQgaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Ci11MzIgaXBhdGhfbGF5ZXJfZ2V0X25ndWlkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwotdTMyIGlwYXRoX2xheWVyX2dldF9tYWpyZXYoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7Ci11MzIgaXBhdGhfbGF5ZXJfZ2V0X21pbnJldihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKLXUzMiBpcGF0aF9sYXllcl9nZXRfcGNpcmV2KHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwotdTMyIGlwYXRoX2xheWVyX2dldF9mbGFncyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotc3RydWN0IGRldmljZSAqaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotdTE2IGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotdTMyIGlwYXRoX2xheWVyX2dldF92ZW5kb3JpZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqKTsKLXU2NCBpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLXUzMiBpcGF0aF9sYXllcl9nZXRfaWJtdHUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLWludCBpcGF0aF9sYXllcl9lbmFibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKLWludCBpcGF0aF9sYXllcl9kaXNhYmxlX3RpbWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7Ci1pbnQgaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgZmxhZ3MpOwotdW5zaWduZWQgaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotdW5zaWduZWQgaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBpbmRleCk7Ci1pbnQgaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2ICpwa2V5cyk7Ci1pbnQgaXBhdGhfbGF5ZXJfc2V0X3BrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2ICpwa2V5cyk7Ci1pbnQgaXBhdGhfbGF5ZXJfZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCk7Ci1pbnQgaXBhdGhfbGF5ZXJfc2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKLQkJCQkJIGludCBzbGVlcCk7Ci1pbnQgaXBhdGhfbGF5ZXJfZ2V0X3BoeWVycnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotaW50IGlwYXRoX2xheWVyX3NldF9waHllcnJ0aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBuKTsKLWludCBpcGF0aF9sYXllcl9nZXRfb3ZlcnJ1bnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwotaW50IGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgbik7Ci11MzIgaXBhdGhfbGF5ZXJfZ2V0X3JjdmhkcmVudHNpemUoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKTsKIAogLyogaXBhdGhfZXRoZXIgaW50ZXJydXB0IHZhbHVlcyAqLwogI2RlZmluZSBJUEFUSF9MQVlFUl9JTlRfSUZfVVAgMHgyCkBAIC0xNzgsOSArNjYsNiBAQAogI2RlZmluZSBJUEFUSF9MQVlFUl9JTlRfU0VORF9DT05USU5VRSAweDEwCiAjZGVmaW5lIElQQVRIX0xBWUVSX0lOVF9CQ0FTVCAweDQwCiAKLS8qIF92ZXJic19sYXllci5sX2ZsYWdzICovCi0jZGVmaW5lIElQQVRIX1ZFUkJTX0tFUk5FTF9TTUEgMHgxCi0KIGV4dGVybiB1bnNpZ25lZCBpcGF0aF9kZWJ1ZzsgLyogZGVidWdnaW5nIGJpdCBtYXNrICovCiAKICNlbmRpZgkJCQkvKiBfSVBBVEhfTEFZRVJfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCmluZGV4IGQzNDAyMzQuLjcyZDFkYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKQEAgLTEwMSwxNSArMTAxLDE1IEBACiAJbmlwLT5udW1fcG9ydHMgPSBpYmRldi0+cGh5c19wb3J0X2NudDsKIAkvKiBUaGlzIGlzIGFscmVhZHkgaW4gbmV0d29yayBvcmRlciAqLwogCW5pcC0+c3lzX2d1aWQgPSB0b19pZGV2KGliZGV2KS0+c3lzX2ltYWdlX2d1aWQ7Ci0JbmlwLT5ub2RlX2d1aWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZCk7CisJbmlwLT5ub2RlX2d1aWQgPSBkZC0+aXBhdGhfZ3VpZDsKIAluaXAtPnBvcnRfZ3VpZCA9IG5pcC0+c3lzX2d1aWQ7Ci0JbmlwLT5wYXJ0aXRpb25fY2FwID0gY3B1X3RvX2JlMTYoaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhkZCkpOwotCW5pcC0+ZGV2aWNlX2lkID0gY3B1X3RvX2JlMTYoaXBhdGhfbGF5ZXJfZ2V0X2RldmljZWlkKGRkKSk7Ci0JbWFqcmV2ID0gaXBhdGhfbGF5ZXJfZ2V0X21hanJldihkZCk7Ci0JbWlucmV2ID0gaXBhdGhfbGF5ZXJfZ2V0X21pbnJldihkZCk7CisJbmlwLT5wYXJ0aXRpb25fY2FwID0gY3B1X3RvX2JlMTYoaXBhdGhfZ2V0X25wa2V5cyhkZCkpOworCW5pcC0+ZGV2aWNlX2lkID0gY3B1X3RvX2JlMTYoZGQtPmlwYXRoX2RldmljZWlkKTsKKwltYWpyZXYgPSBkZC0+aXBhdGhfbWFqcmV2OworCW1pbnJldiA9IGRkLT5pcGF0aF9taW5yZXY7CiAJbmlwLT5yZXZpc2lvbiA9IGNwdV90b19iZTMyKChtYWpyZXYgPDwgMTYpIHwgbWlucmV2KTsKIAluaXAtPmxvY2FsX3BvcnRfbnVtID0gcG9ydDsKLQl2ZW5kb3IgPSBpcGF0aF9sYXllcl9nZXRfdmVuZG9yaWQoZGQpOworCXZlbmRvciA9IGRkLT5pcGF0aF92ZW5kb3JpZDsKIAluaXAtPnZlbmRvcl9pZFswXSA9IDA7CiAJbmlwLT52ZW5kb3JfaWRbMV0gPSB2ZW5kb3IgPj4gODsKIAluaXAtPnZlbmRvcl9pZFsyXSA9IHZlbmRvcjsKQEAgLTEzMywxMyArMTMzLDg5IEBACiAJICovCiAJaWYgKHN0YXJ0Z3ggPT0gMCkKIAkJLyogVGhlIGZpcnN0IGlzIGEgY29weSBvZiB0aGUgcmVhZC1vbmx5IEhXIEdVSUQuICovCi0JCSpwID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQodG9faWRldihpYmRldiktPmRkKTsKKwkJKnAgPSB0b19pZGV2KGliZGV2KS0+ZGQtPmlwYXRoX2d1aWQ7CiAJZWxzZQogCQlzbXAtPnN0YXR1cyB8PSBJQl9TTVBfSU5WQUxJRF9GSUVMRDsKIAogCXJldHVybiByZXBseShzbXApOwogfQogCisKK3N0YXRpYyBpbnQgZ2V0X292ZXJydW50aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiAoZGQtPmlwYXRoX2liY2N0cmwgPj4KKwkJSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfTUFTSzsKK30KKworLyoqCisgKiBzZXRfb3ZlcnJ1bnRocmVzaG9sZCAtIHNldCB0aGUgb3ZlcnJ1biB0aHJlc2hvbGQKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbjogdGhlIG5ldyB0aHJlc2hvbGQKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgbGluayBzdGF0ZSBjaGFuZ2VzLgorICovCitzdGF0aWMgaW50IHNldF9vdmVycnVudGhyZXNob2xkKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdW5zaWduZWQgbikKK3sKKwl1bnNpZ25lZCB2OworCisJdiA9IChkZC0+aXBhdGhfaWJjY3RybCA+PiBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVCkgJgorCQlJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9NQVNLOworCWlmICh2ICE9IG4pIHsKKwkJZGQtPmlwYXRoX2liY2N0cmwgJj0KKwkJCX4oSU5GSU5JUEFUSF9JQkNDX09WRVJSVU5USFJFU0hPTERfTUFTSyA8PAorCQkJICBJTkZJTklQQVRIX0lCQ0NfT1ZFUlJVTlRIUkVTSE9MRF9TSElGVCk7CisJCWRkLT5pcGF0aF9pYmNjdHJsIHw9CisJCQkodTY0KSBuIDw8IElORklOSVBBVEhfSUJDQ19PVkVSUlVOVEhSRVNIT0xEX1NISUZUOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BoeWVycnRocmVzaG9sZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIChkZC0+aXBhdGhfaWJjY3RybCA+PgorCQlJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUKSAmCisJCUlORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfTUFTSzsKK30KKworLyoqCisgKiBzZXRfcGh5ZXJydGhyZXNob2xkIC0gc2V0IHRoZSBwaHlzaWNhbCBlcnJvciB0aHJlc2hvbGQKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAbjogdGhlIG5ldyB0aHJlc2hvbGQKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgbGluayBzdGF0ZSBjaGFuZ2VzLgorICovCitzdGF0aWMgaW50IHNldF9waHllcnJ0aHJlc2hvbGQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1bnNpZ25lZCBuKQoreworCXVuc2lnbmVkIHY7CisKKwl2ID0gKGRkLT5pcGF0aF9pYmNjdHJsID4+IElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQpICYKKwkJSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9NQVNLOworCWlmICh2ICE9IG4pIHsKKwkJZGQtPmlwYXRoX2liY2N0cmwgJj0KKwkJCX4oSU5GSU5JUEFUSF9JQkNDX1BIWUVSUlRIUkVTSE9MRF9NQVNLIDw8CisJCQkgIElORklOSVBBVEhfSUJDQ19QSFlFUlJUSFJFU0hPTERfU0hJRlQpOworCQlkZC0+aXBhdGhfaWJjY3RybCB8PQorCQkJKHU2NCkgbiA8PCBJTkZJTklQQVRIX0lCQ0NfUEhZRVJSVEhSRVNIT0xEX1NISUZUOworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2liY2N0cmwsCisJCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlIC0gZ2V0IHRoZSBkZWZhdWx0IGxpbmtkb3duIHN0YXRlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICoKKyAqIFJldHVybnMgemVybyBpZiB0aGUgZGVmYXVsdCBpcyBQT0xMLCAxIGlmIHRoZSBkZWZhdWx0IGlzIFNMRUVQLgorICovCitzdGF0aWMgaW50IGdldF9saW5rZG93bmRlZmF1bHRzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuICEhKGRkLT5pcGF0aF9pYmNjdHJsICYgSU5GSU5JUEFUSF9JQkNDX0xJTktET1dOREVGQVVMVFNUQVRFKTsKK30KKwogc3RhdGljIGludCByZWN2X3N1Ym5fZ2V0X3BvcnRpbmZvKHN0cnVjdCBpYl9zbXAgKnNtcCwKIAkJCQkgIHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0KQogewpAQCAtMTY2LDcgKzI0Miw3IEBACiAJICAgIChkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jID4+IDYpID09IDApCiAJCXBpcC0+bWtleSA9IGRldi0+bWtleTsKIAlwaXAtPmdpZF9wcmVmaXggPSBkZXYtPmdpZF9wcmVmaXg7Ci0JbGlkID0gaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKTsKKwlsaWQgPSBkZXYtPmRkLT5pcGF0aF9saWQ7CiAJcGlwLT5saWQgPSBsaWQgPyBjcHVfdG9fYmUxNihsaWQpIDogSUJfTElEX1BFUk1JU1NJVkU7CiAJcGlwLT5zbV9saWQgPSBjcHVfdG9fYmUxNihkZXYtPnNtX2xpZCk7CiAJcGlwLT5jYXBfbWFzayA9IGNwdV90b19iZTMyKGRldi0+cG9ydF9jYXBfZmxhZ3MpOwpAQCAtMTc3LDE0ICsyNTMsMTQgQEAKIAlwaXAtPmxpbmtfd2lkdGhfc3VwcG9ydGVkID0gMzsJLyogMXggb3IgNHggKi8KIAlwaXAtPmxpbmtfd2lkdGhfYWN0aXZlID0gMjsJLyogNHggKi8KIAlwaXAtPmxpbmtzcGVlZF9wb3J0c3RhdGUgPSAweDEwOwkvKiAyLjVHYnBzICovCi0JaWJjc3RhdCA9IGlwYXRoX2xheWVyX2dldF9sYXN0aWJjc3RhdChkZXYtPmRkKTsKKwlpYmNzdGF0ID0gZGV2LT5kZC0+aXBhdGhfbGFzdGliY3N0YXQ7CiAJcGlwLT5saW5rc3BlZWRfcG9ydHN0YXRlIHw9ICgoaWJjc3RhdCA+PiA0KSAmIDB4MykgKyAxOwogCXBpcC0+cG9ydHBoeXNzdGF0ZV9saW5rZG93biA9CiAJCShpcGF0aF9jdnRfcGh5c3BvcnRzdGF0ZVtpYmNzdGF0ICYgMHhmXSA8PCA0KSB8Ci0JCShpcGF0aF9sYXllcl9nZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoZGV2LT5kZCkgPyAxIDogMik7CisJCShnZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoZGV2LT5kZCkgPyAxIDogMik7CiAJcGlwLT5ta2V5cHJvdF9yZXN2X2xtYyA9IGRldi0+bWtleXByb3RfcmVzdl9sbWM7CiAJcGlwLT5saW5rc3BlZWRhY3RpdmVfZW5hYmxlZCA9IDB4MTE7CS8qIDIuNUdicHMsIDIuNUdicHMgKi8KLQlzd2l0Y2ggKGlwYXRoX2xheWVyX2dldF9pYm10dShkZXYtPmRkKSkgeworCXN3aXRjaCAoZGV2LT5kZC0+aXBhdGhfaWJtdHUpIHsKIAljYXNlIDQwOTY6CiAJCW10dSA9IElCX01UVV80MDk2OwogCQlicmVhazsKQEAgLTIxNyw3ICsyOTMsNyBAQAogCXBpcC0+bWtleV92aW9sYXRpb25zID0gY3B1X3RvX2JlMTYoZGV2LT5ta2V5X3Zpb2xhdGlvbnMpOwogCS8qIFBfS2V5VmlvbGF0aW9ucyBhcmUgY291bnRlZCBieSBoYXJkd2FyZS4gKi8KIAlwaXAtPnBrZXlfdmlvbGF0aW9ucyA9Ci0JCWNwdV90b19iZTE2KChpcGF0aF9sYXllcl9nZXRfY3JfZXJycGtleShkZXYtPmRkKSAtCisJCWNwdV90b19iZTE2KChpcGF0aF9nZXRfY3JfZXJycGtleShkZXYtPmRkKSAtCiAJCQkgICAgIGRldi0+el9wa2V5X3Zpb2xhdGlvbnMpICYgMHhGRkZGKTsKIAlwaXAtPnFrZXlfdmlvbGF0aW9ucyA9IGNwdV90b19iZTE2KGRldi0+cWtleV92aW9sYXRpb25zKTsKIAkvKiBPbmx5IHRoZSBoYXJkd2FyZSBHVUlEIGlzIHN1cHBvcnRlZCBmb3Igbm93ICovCkBAIC0yMjYsOCArMzAyLDggQEAKIAkvKiAzMi43NjggdXNlYy4gcmVzcG9uc2UgdGltZSAoZ3Vlc3NpbmcpICovCiAJcGlwLT5yZXN2X3Jlc3B0aW1ldmFsdWUgPSAzOwogCXBpcC0+bG9jYWxwaHllcnJvcnNfb3ZlcnJ1bmVycm9ycyA9Ci0JCShpcGF0aF9sYXllcl9nZXRfcGh5ZXJydGhyZXNob2xkKGRldi0+ZGQpIDw8IDQpIHwKLQkJaXBhdGhfbGF5ZXJfZ2V0X292ZXJydW50aHJlc2hvbGQoZGV2LT5kZCk7CisJCShnZXRfcGh5ZXJydGhyZXNob2xkKGRldi0+ZGQpIDw8IDQpIHwKKwkJZ2V0X292ZXJydW50aHJlc2hvbGQoZGV2LT5kZCk7CiAJLyogcGlwLT5tYXhfY3JlZGl0X2hpbnQ7ICovCiAJLyogcGlwLT5saW5rX3JvdW5kdHJpcF9sYXRlbmN5WzNdOyAqLwogCkBAIC0yMzcsNiArMzEzLDIwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBnZXRfcGtleXMgLSByZXR1cm4gdGhlIFBLRVkgdGFibGUgZm9yIHBvcnQgMAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBwa2V5czogdGhlIHBrZXkgdGFibGUgaXMgcGxhY2VkIGhlcmUKKyAqLworc3RhdGljIGludCBnZXRfcGtleXMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1MTYgKiBwa2V5cykKK3sKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkWzBdOworCisJbWVtY3B5KHBrZXlzLCBwZC0+cG9ydF9wa2V5cywgc2l6ZW9mKHBkLT5wb3J0X3BrZXlzKSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByZWN2X3N1Ym5fZ2V0X3BrZXl0YWJsZShzdHJ1Y3QgaWJfc21wICpzbXAsCiAJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCiB7CkBAIC0yNDksOSArMzM5LDkgQEAKIAltZW1zZXQoc21wLT5kYXRhLCAwLCBzaXplb2Yoc21wLT5kYXRhKSk7CiAJaWYgKHN0YXJ0cHggPT0gMCkgewogCQlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJkZXYpOwotCQl1bnNpZ25lZCBpLCBuID0gaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhkZXYtPmRkKTsKKwkJdW5zaWduZWQgaSwgbiA9IGlwYXRoX2dldF9ucGtleXMoZGV2LT5kZCk7CiAKLQkJaXBhdGhfbGF5ZXJfZ2V0X3BrZXlzKGRldi0+ZGQsIHApOworCQlnZXRfcGtleXMoZGV2LT5kZCwgcCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IG47IGkrKykKIAkJCXFbaV0gPSBjcHVfdG9fYmUxNihwW2ldKTsKQEAgLTI2OSw2ICszNTksMjQgQEAKIH0KIAogLyoqCisgKiBzZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUgLSBzZXQgdGhlIGRlZmF1bHQgbGlua2Rvd24gc3RhdGUKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAc2xlZXA6IHRoZSBuZXcgc3RhdGUKKyAqCisgKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgdGFrZSBlZmZlY3Qgd2hlbiB0aGUgbGluayBzdGF0ZSBjaGFuZ2VzLgorICovCitzdGF0aWMgaW50IHNldF9saW5rZG93bmRlZmF1bHRzdGF0ZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIGludCBzbGVlcCkKK3sKKwlpZiAoc2xlZXApCisJCWRkLT5pcGF0aF9pYmNjdHJsIHw9IElORklOSVBBVEhfSUJDQ19MSU5LRE9XTkRFRkFVTFRTVEFURTsKKwllbHNlCisJCWRkLT5pcGF0aF9pYmNjdHJsICY9IH5JTkZJTklQQVRIX0lCQ0NfTElOS0RPV05ERUZBVUxUU1RBVEU7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9pYmNjdHJsLAorCQkJIGRkLT5pcGF0aF9pYmNjdHJsKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiByZWN2X3N1Ym5fc2V0X3BvcnRpbmZvIC0gc2V0IHBvcnQgaW5mb3JtYXRpb24KICAqIEBzbXA6IHRoZSBpbmNvbWluZyBTTSBwYWNrZXQKICAqIEBpYmRldjogdGhlIGluZmluaWJhbmQgZGV2aWNlCkBAIC0yOTAsNyArMzk4LDcgQEAKIAl1OCBzdGF0ZTsKIAl1MTYgbHN0YXRlOwogCXUzMiBtdHU7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBvcmU7CiAKIAlpZiAoYmUzMl90b19jcHUoc21wLT5hdHRyX21vZCkgPiBpYmRldi0+cGh5c19wb3J0X2NudCkKIAkJZ290byBlcnI7CkBAIC0zMDQsNyArNDEyLDcgQEAKIAlkZXYtPm1rZXlfbGVhc2VfcGVyaW9kID0gYmUxNl90b19jcHUocGlwLT5ta2V5X2xlYXNlX3BlcmlvZCk7CiAKIAlsaWQgPSBiZTE2X3RvX2NwdShwaXAtPmxpZCk7Ci0JaWYgKGxpZCAhPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKSB7CisJaWYgKGxpZCAhPSBkZXYtPmRkLT5pcGF0aF9saWQpIHsKIAkJLyogTXVzdCBiZSBhIHZhbGlkIHVuaWNhc3QgTElEIGFkZHJlc3MuICovCiAJCWlmIChsaWQgPT0gMCB8fCBsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFKQogCQkJZ290byBlcnI7CkBAIC0zNDIsMTEgKzQ1MCwxMSBAQAogCWNhc2UgMDogLyogTk9QICovCiAJCWJyZWFrOwogCWNhc2UgMTogLyogU0xFRVAgKi8KLQkJaWYgKGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkLCAxKSkKKwkJaWYgKHNldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkLCAxKSkKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAljYXNlIDI6IC8qIFBPTEwgKi8KLQkJaWYgKGlwYXRoX2xheWVyX3NldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkLCAwKSkKKwkJaWYgKHNldF9saW5rZG93bmRlZmF1bHRzdGF0ZShkZXYtPmRkLCAwKSkKIAkJCWdvdG8gZXJyOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzc2LDcgKzQ4NCw3IEBACiAJCS8qIFhYWCBXZSBoYXZlIGFscmVhZHkgcGFydGlhbGx5IHVwZGF0ZWQgb3VyIHN0YXRlISAqLwogCQlnb3RvIGVycjsKIAl9Ci0JaXBhdGhfbGF5ZXJfc2V0X210dShkZXYtPmRkLCBtdHUpOworCWlwYXRoX3NldF9tdHUoZGV2LT5kZCwgbXR1KTsKIAogCWRldi0+c21fc2wgPSBwaXAtPm5laWdoYm9ybXR1X21hc3RlcnNtc2wgJiAweEY7CiAKQEAgLTM5MiwyMCArNTAwLDE2IEBACiAJICogbGF0ZXIuCiAJICovCiAJaWYgKHBpcC0+cGtleV92aW9sYXRpb25zID09IDApCi0JCWRldi0+el9wa2V5X3Zpb2xhdGlvbnMgPQotCQkJaXBhdGhfbGF5ZXJfZ2V0X2NyX2VycnBrZXkoZGV2LT5kZCk7CisJCWRldi0+el9wa2V5X3Zpb2xhdGlvbnMgPSBpcGF0aF9nZXRfY3JfZXJycGtleShkZXYtPmRkKTsKIAogCWlmIChwaXAtPnFrZXlfdmlvbGF0aW9ucyA9PSAwKQogCQlkZXYtPnFrZXlfdmlvbGF0aW9ucyA9IDA7CiAKLQlpZiAoaXBhdGhfbGF5ZXJfc2V0X3BoeWVycnRocmVzaG9sZCgKLQkJICAgIGRldi0+ZGQsCi0JCSAgICAocGlwLT5sb2NhbHBoeWVycm9yc19vdmVycnVuZXJyb3JzID4+IDQpICYgMHhGKSkKKwlvcmUgPSBwaXAtPmxvY2FscGh5ZXJyb3JzX292ZXJydW5lcnJvcnM7CisJaWYgKHNldF9waHllcnJ0aHJlc2hvbGQoZGV2LT5kZCwgKG9yZSA+PiA0KSAmIDB4RikpCiAJCWdvdG8gZXJyOwogCi0JaWYgKGlwYXRoX2xheWVyX3NldF9vdmVycnVudGhyZXNob2xkKAotCQkgICAgZGV2LT5kZCwKLQkJICAgIChwaXAtPmxvY2FscGh5ZXJyb3JzX292ZXJydW5lcnJvcnMgJiAweEYpKSkKKwlpZiAoc2V0X292ZXJydW50aHJlc2hvbGQoZGV2LT5kZCwgKG9yZSAmIDB4RikpKQogCQlnb3RvIGVycjsKIAogCWRldi0+c3VibmV0X3RpbWVvdXQgPSBwaXAtPmNsaWVudHJlcmVnX3Jlc3Zfc3VibmV0dG8gJiAweDFGOwpAQCAtNDIzLDcgKzUyNyw3IEBACiAJICogaXMgZG93biBvciBpcyBiZWluZyBzZXQgdG8gZG93bi4KIAkgKi8KIAlzdGF0ZSA9IHBpcC0+bGlua3NwZWVkX3BvcnRzdGF0ZSAmIDB4RjsKLQlmbGFncyA9IGlwYXRoX2xheWVyX2dldF9mbGFncyhkZXYtPmRkKTsKKwlmbGFncyA9IGRldi0+ZGQtPmlwYXRoX2ZsYWdzOwogCWxzdGF0ZSA9IChwaXAtPnBvcnRwaHlzc3RhdGVfbGlua2Rvd24gPj4gNCkgJiAweEY7CiAJaWYgKGxzdGF0ZSAmJiAhKHN0YXRlID09IElCX1BPUlRfRE9XTiB8fCBzdGF0ZSA9PSBJQl9QT1JUX05PUCkpCiAJCWdvdG8gZXJyOwpAQCAtNDM5LDcgKzU0Myw3IEBACiAJCS8qIEZBTExUSFJPVUdIICovCiAJY2FzZSBJQl9QT1JUX0RPV046CiAJCWlmIChsc3RhdGUgPT0gMCkKLQkJCWlmIChpcGF0aF9sYXllcl9nZXRfbGlua2Rvd25kZWZhdWx0c3RhdGUoZGV2LT5kZCkpCisJCQlpZiAoZ2V0X2xpbmtkb3duZGVmYXVsdHN0YXRlKGRldi0+ZGQpKQogCQkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOX1NMRUVQOwogCQkJZWxzZQogCQkJCWxzdGF0ZSA9IElQQVRIX0lCX0xJTktET1dOOwpAQCAtNDUxLDcgKzU1NSw3IEBACiAJCQlsc3RhdGUgPSBJUEFUSF9JQl9MSU5LRE9XTl9ESVNBQkxFOwogCQllbHNlCiAJCQlnb3RvIGVycjsKLQkJaXBhdGhfbGF5ZXJfc2V0X2xpbmtzdGF0ZShkZXYtPmRkLCBsc3RhdGUpOworCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIGxzdGF0ZSk7CiAJCWlmIChmbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpIHsKIAkJCWV2ZW50LmV2ZW50ID0gSUJfRVZFTlRfUE9SVF9FUlI7CiAJCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOwpAQCAtNDYwLDcgKzU2NCw3IEBACiAJY2FzZSBJQl9QT1JUX0FSTUVEOgogCQlpZiAoIShmbGFncyAmIChJUEFUSF9MSU5LSU5JVCB8IElQQVRIX0xJTktBQ1RJVkUpKSkKIAkJCWJyZWFrOwotCQlpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktBUk0pOworCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktBUk0pOwogCQlpZiAoZmxhZ3MgJiBJUEFUSF9MSU5LQUNUSVZFKSB7CiAJCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1BPUlRfRVJSOwogCQkJaWJfZGlzcGF0Y2hfZXZlbnQoJmV2ZW50KTsKQEAgLTQ2OSw3ICs1NzMsNyBAQAogCWNhc2UgSUJfUE9SVF9BQ1RJVkU6CiAJCWlmICghKGZsYWdzICYgSVBBVEhfTElOS0FSTUVEKSkKIAkJCWJyZWFrOwotCQlpcGF0aF9sYXllcl9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktBQ1RJVkUpOworCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktBQ1RJVkUpOwogCQlldmVudC5ldmVudCA9IElCX0VWRU5UX1BPUlRfQUNUSVZFOwogCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOwogCQlicmVhazsKQEAgLTQ5Myw2ICs1OTcsMTUyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBybV9wa2V5IC0gZGVjcmVjbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50IGZvciB0aGUgZ2l2ZW4gUEtFWQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBrZXk6IHRoZSBQS0VZIGluZGV4CisgKgorICogUmV0dXJuIHRydWUgaWYgdGhpcyB3YXMgdGhlIGxhc3QgcmVmZXJlbmNlIGFuZCB0aGUgaGFyZHdhcmUgdGFibGUgZW50cnkKKyAqIG5lZWRzIHRvIGJlIGNoYW5nZWQuCisgKi8KK3N0YXRpYyBpbnQgcm1fcGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiBrZXkpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGkrKykgeworCQlpZiAoZGQtPmlwYXRoX3BrZXlzW2ldICE9IGtleSkKKwkJCWNvbnRpbnVlOworCQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKSkgeworCQkJZGQtPmlwYXRoX3BrZXlzW2ldID0gMDsKKwkJCXJldCA9IDE7CisJCQlnb3RvIGJhaWw7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGFkZF9wa2V5IC0gYWRkIHRoZSBnaXZlbiBQS0VZIHRvIHRoZSBoYXJkd2FyZSB0YWJsZQorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBrZXk6IHRoZSBQS0VZCisgKgorICogUmV0dXJuIGFuIGVycm9yIGNvZGUgaWYgdW5hYmxlIHRvIGFkZCB0aGUgZW50cnksIHplcm8gaWYgbm8gY2hhbmdlLAorICogb3IgMSBpZiB0aGUgaGFyZHdhcmUgUEtFWSByZWdpc3RlciBuZWVkcyB0byBiZSB1cGRhdGVkLgorICovCitzdGF0aWMgaW50IGFkZF9wa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTE2IGtleSkKK3sKKwlpbnQgaTsKKwl1MTYgbGtleSA9IGtleSAmIDB4N0ZGRjsKKwlpbnQgYW55ID0gMDsKKwlpbnQgcmV0OworCisJaWYgKGxrZXkgPT0gMHg3RkZGKSB7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisKKwkvKiBMb29rIGZvciBhbiBlbXB0eSBzbG90IG9yIGEgbWF0Y2hpbmcgUEtFWS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZC0+aXBhdGhfcGtleXMpOyBpKyspIHsKKwkJaWYgKCFkZC0+aXBhdGhfcGtleXNbaV0pIHsKKwkJCWFueSsrOworCQkJY29udGludWU7CisJCX0KKwkJLyogSWYgaXQgbWF0Y2hlcyBleGFjdGx5LCB0cnkgdG8gaW5jcmVtZW50IHRoZSByZWYgY291bnQgKi8KKwkJaWYgKGRkLT5pcGF0aF9wa2V5c1tpXSA9PSBrZXkpIHsKKwkJCWlmIChhdG9taWNfaW5jX3JldHVybigmZGQtPmlwYXRoX3BrZXlyZWZzW2ldKSA+IDEpIHsKKwkJCQlyZXQgPSAwOworCQkJCWdvdG8gYmFpbDsKKwkJCX0KKwkJCS8qIExvc3QgdGhlIHJhY2UuIExvb2sgZm9yIGFuIGVtcHR5IHNsb3QgYmVsb3cuICovCisJCQlhdG9taWNfZGVjKCZkZC0+aXBhdGhfcGtleXJlZnNbaV0pOworCQkJYW55Kys7CisJCX0KKwkJLyoKKwkJICogSXQgbWFrZXMgbm8gc2Vuc2UgdG8gaGF2ZSBib3RoIHRoZSBsaW1pdGVkIGFuZCB1bmxpbWl0ZWQKKwkJICogUEtFWSBzZXQgYXQgdGhlIHNhbWUgdGltZSBzaW5jZSB0aGUgdW5saW1pdGVkIG9uZSB3aWxsCisJCSAqIGRpc2FibGUgdGhlIGxpbWl0ZWQgb25lLgorCQkgKi8KKwkJaWYgKChkZC0+aXBhdGhfcGtleXNbaV0gJiAweDdGRkYpID09IGxrZXkpIHsKKwkJCXJldCA9IC1FRVhJU1Q7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9CisJaWYgKCFhbnkpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGJhaWw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wa2V5cyk7IGkrKykgeworCQlpZiAoIWRkLT5pcGF0aF9wa2V5c1tpXSAmJgorCQkgICAgYXRvbWljX2luY19yZXR1cm4oJmRkLT5pcGF0aF9wa2V5cmVmc1tpXSkgPT0gMSkgeworCQkJLyogZm9yIGlwYXRoc3RhdHMsIGV0Yy4gKi8KKwkJCWlwYXRoX3N0YXRzLnNwc19wa2V5c1tpXSA9IGxrZXk7CisJCQlkZC0+aXBhdGhfcGtleXNbaV0gPSBrZXk7CisJCQlyZXQgPSAxOworCQkJZ290byBiYWlsOworCQl9CisJfQorCXJldCA9IC1FQlVTWTsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHNldF9wa2V5cyAtIHNldCB0aGUgUEtFWSB0YWJsZSBmb3IgcG9ydCAwCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBrZXlzOiB0aGUgUEtFWSB0YWJsZQorICovCitzdGF0aWMgaW50IHNldF9wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUxNiAqcGtleXMpCit7CisJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKKwlpbnQgaTsKKwlpbnQgY2hhbmdlZCA9IDA7CisKKwlwZCA9IGRkLT5pcGF0aF9wZFswXTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBkLT5wb3J0X3BrZXlzKTsgaSsrKSB7CisJCXUxNiBrZXkgPSBwa2V5c1tpXTsKKwkJdTE2IG9rZXkgPSBwZC0+cG9ydF9wa2V5c1tpXTsKKworCQlpZiAoa2V5ID09IG9rZXkpCisJCQljb250aW51ZTsKKwkJLyoKKwkJICogVGhlIHZhbHVlIG9mIHRoaXMgUEtFWSB0YWJsZSBlbnRyeSBpcyBjaGFuZ2luZy4KKwkJICogUmVtb3ZlIHRoZSBvbGQgZW50cnkgaW4gdGhlIGhhcmR3YXJlJ3MgYXJyYXkgb2YgUEtFWXMuCisJCSAqLworCQlpZiAob2tleSAmIDB4N0ZGRikKKwkJCWNoYW5nZWQgfD0gcm1fcGtleShkZCwgb2tleSk7CisJCWlmIChrZXkgJiAweDdGRkYpIHsKKwkJCWludCByZXQgPSBhZGRfcGtleShkZCwga2V5KTsKKworCQkJaWYgKHJldCA8IDApCisJCQkJa2V5ID0gMDsKKwkJCWVsc2UKKwkJCQljaGFuZ2VkIHw9IHJldDsKKwkJfQorCQlwZC0+cG9ydF9wa2V5c1tpXSA9IGtleTsKKwl9CisJaWYgKGNoYW5nZWQpIHsKKwkJdTY0IHBrZXk7CisKKwkJcGtleSA9ICh1NjQpIGRkLT5pcGF0aF9wa2V5c1swXSB8CisJCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzFdIDw8IDE2KSB8CisJCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzJdIDw8IDMyKSB8CisJCQkoKHU2NCkgZGQtPmlwYXRoX3BrZXlzWzNdIDw8IDQ4KTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicDAgbmV3IHBrZXkgcmVnICVsbHhcbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBwa2V5KTsKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9wYXJ0aXRpb25rZXksCisJCQkJIHBrZXkpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCByZWN2X3N1Ym5fc2V0X3BrZXl0YWJsZShzdHJ1Y3QgaWJfc21wICpzbXAsCiAJCQkJICAgc3RydWN0IGliX2RldmljZSAqaWJkZXYpCiB7CkBAIC01MDAsMTMgKzc1MCwxMiBAQAogCV9fYmUxNiAqcCA9IChfX2JlMTYgKikgc21wLT5kYXRhOwogCXUxNiAqcSA9ICh1MTYgKikgc21wLT5kYXRhOwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7Ci0JdW5zaWduZWQgaSwgbiA9IGlwYXRoX2xheWVyX2dldF9ucGtleXMoZGV2LT5kZCk7CisJdW5zaWduZWQgaSwgbiA9IGlwYXRoX2dldF9ucGtleXMoZGV2LT5kZCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogCQlxW2ldID0gYmUxNl90b19jcHUocFtpXSk7CiAKLQlpZiAoc3RhcnRweCAhPSAwIHx8Ci0JICAgIGlwYXRoX2xheWVyX3NldF9wa2V5cyhkZXYtPmRkLCBxKSAhPSAwKQorCWlmIChzdGFydHB4ICE9IDAgfHwgc2V0X3BrZXlzKGRldi0+ZGQsIHEpICE9IDApCiAJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCiAJcmV0dXJuIHJlY3Zfc3Vibl9nZXRfcGtleXRhYmxlKHNtcCwgaWJkZXYpOwpAQCAtODQ0LDEwICsxMDkzLDEwIEBACiAJc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgKnAgPSAoc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgKikKIAkJcG1wLT5kYXRhOwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7Ci0Jc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOworCXN0cnVjdCBpcGF0aF92ZXJic19jb3VudGVycyBjbnRyczsKIAl1OCBwb3J0X3NlbGVjdCA9IHAtPnBvcnRfc2VsZWN0OwogCi0JaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKGRldi0+ZGQsICZjbnRycyk7CisJaXBhdGhfZ2V0X2NvdW50ZXJzKGRldi0+ZGQsICZjbnRycyk7CiAKIAkvKiBBZGp1c3QgY291bnRlcnMgZm9yIGFueSByZXNldHMgZG9uZS4gKi8KIAljbnRycy5zeW1ib2xfZXJyb3JfY291bnRlciAtPSBkZXYtPnpfc3ltYm9sX2Vycm9yX2NvdW50ZXI7CkBAIC05NDQsOCArMTE5Myw4IEBACiAJdTY0IHN3b3JkcywgcndvcmRzLCBzcGt0cywgcnBrdHMsIHh3YWl0OwogCXU4IHBvcnRfc2VsZWN0ID0gcC0+cG9ydF9zZWxlY3Q7CiAKLQlpcGF0aF9sYXllcl9zbmFwc2hvdF9jb3VudGVycyhkZXYtPmRkLCAmc3dvcmRzLCAmcndvcmRzLCAmc3BrdHMsCi0JCQkJICAgICAgJnJwa3RzLCAmeHdhaXQpOworCWlwYXRoX3NuYXBzaG90X2NvdW50ZXJzKGRldi0+ZGQsICZzd29yZHMsICZyd29yZHMsICZzcGt0cywKKwkJCQkmcnBrdHMsICZ4d2FpdCk7CiAKIAkvKiBBZGp1c3QgY291bnRlcnMgZm9yIGFueSByZXNldHMgZG9uZS4gKi8KIAlzd29yZHMgLT0gZGV2LT56X3BvcnRfeG1pdF9kYXRhOwpAQCAtOTc4LDEzICsxMjI3LDEzIEBACiAJc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgKnAgPSAoc3RydWN0IGliX3BtYV9wb3J0Y291bnRlcnMgKikKIAkJcG1wLT5kYXRhOwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7Ci0Jc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOworCXN0cnVjdCBpcGF0aF92ZXJic19jb3VudGVycyBjbnRyczsKIAogCS8qCiAJICogU2luY2UgdGhlIEhXIGRvZXNuJ3Qgc3VwcG9ydCBjbGVhcmluZyBjb3VudGVycywgd2Ugc2F2ZSB0aGUKIAkgKiBjdXJyZW50IGNvdW50IGFuZCBzdWJ0cmFjdCBpdCBmcm9tIGZ1dHVyZSByZXNwb25zZXMuCiAJICovCi0JaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKGRldi0+ZGQsICZjbnRycyk7CisJaXBhdGhfZ2V0X2NvdW50ZXJzKGRldi0+ZGQsICZjbnRycyk7CiAKIAlpZiAocC0+Y291bnRlcl9zZWxlY3QgJiBJQl9QTUFfU0VMX1NZTUJPTF9FUlJPUikKIAkJZGV2LT56X3N5bWJvbF9lcnJvcl9jb3VudGVyID0gY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXI7CkBAIC0xMDQxLDggKzEyOTAsOCBAQAogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CiAJdTY0IHN3b3JkcywgcndvcmRzLCBzcGt0cywgcnBrdHMsIHh3YWl0OwogCi0JaXBhdGhfbGF5ZXJfc25hcHNob3RfY291bnRlcnMoZGV2LT5kZCwgJnN3b3JkcywgJnJ3b3JkcywgJnNwa3RzLAotCQkJCSAgICAgICZycGt0cywgJnh3YWl0KTsKKwlpcGF0aF9zbmFwc2hvdF9jb3VudGVycyhkZXYtPmRkLCAmc3dvcmRzLCAmcndvcmRzLCAmc3BrdHMsCisJCQkJJnJwa3RzLCAmeHdhaXQpOwogCiAJaWYgKHAtPmNvdW50ZXJfc2VsZWN0ICYgSUJfUE1BX1NFTFhfUE9SVF9YTUlUX0RBVEEpCiAJCWRldi0+el9wb3J0X3htaXRfZGF0YSA9IHN3b3JkczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tbWFwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYjczNzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbW1hcC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCisKKy8qKgorICogaXBhdGhfcmVsZWFzZV9tbWFwX2luZm8gLSBmcmVlIG1tYXAgaW5mbyBzdHJ1Y3R1cmUKKyAqIEByZWY6IGEgcG9pbnRlciB0byB0aGUga3JlZiB3aXRoaW4gc3RydWN0IGlwYXRoX21tYXBfaW5mbworICovCit2b2lkIGlwYXRoX3JlbGVhc2VfbW1hcF9pbmZvKHN0cnVjdCBrcmVmICpyZWYpCit7CisJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqaXAgPQorCQljb250YWluZXJfb2YocmVmLCBzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvLCByZWYpOworCisJdmZyZWUoaXAtPm9iaik7CisJa2ZyZWUoaXApOworfQorCisvKgorICogb3BlbiBhbmQgY2xvc2Uga2VlcCB0cmFjayBvZiBob3cgbWFueSB0aW1lcyB0aGUgQ1EgaXMgbWFwcGVkLAorICogdG8gYXZvaWQgcmVsZWFzaW5nIGl0LgorICovCitzdGF0aWMgdm9pZCBpcGF0aF92bWFfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvICppcCA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCisJa3JlZl9nZXQoJmlwLT5yZWYpOworCWlwLT5tbWFwX2NudCsrOworfQorCitzdGF0aWMgdm9pZCBpcGF0aF92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqaXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCWlwLT5tbWFwX2NudC0tOworCWtyZWZfcHV0KCZpcC0+cmVmLCBpcGF0aF9yZWxlYXNlX21tYXBfaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaXBhdGhfdm1fb3BzID0geworCS5vcGVuID0gICAgIGlwYXRoX3ZtYV9vcGVuLAorCS5jbG9zZSA9ICAgIGlwYXRoX3ZtYV9jbG9zZSwKK307CisKKy8qKgorICogaXBhdGhfbW1hcCAtIGNyZWF0ZSBhIG5ldyBtbWFwIHJlZ2lvbgorICogQGNvbnRleHQ6IHRoZSBJQiB1c2VyIGNvbnRleHQgb2YgdGhlIHByb2Nlc3MgbWFraW5nIHRoZSBtbWFwKCkgY2FsbAorICogQHZtYTogdGhlIFZNQSB0byBiZSBpbml0aWFsaXplZAorICogUmV0dXJuIHplcm8gaWYgdGhlIG1tYXAgaXMgT0suIE90aGVyd2lzZSwgcmV0dXJuIGFuIGVycm5vLgorICovCitpbnQgaXBhdGhfbW1hcChzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihjb250ZXh0LT5kZXZpY2UpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKKwlzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvICppcCwgKipwcDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCS8qCisJICogU2VhcmNoIHRoZSBkZXZpY2UncyBsaXN0IG9mIG9iamVjdHMgd2FpdGluZyBmb3IgYSBtbWFwIGNhbGwuCisJICogTm9ybWFsbHksIHRoaXMgbGlzdCBpcyB2ZXJ5IHNob3J0IHNpbmNlIGEgY2FsbCB0byBjcmVhdGUgYQorCSAqIENRLCBRUCwgb3IgU1JRIGlzIHNvb24gZm9sbG93ZWQgYnkgYSBjYWxsIHRvIG1tYXAoKS4KKwkgKi8KKwlzcGluX2xvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJZm9yIChwcCA9ICZkZXYtPnBlbmRpbmdfbW1hcHM7IChpcCA9ICpwcCk7IHBwID0gJmlwLT5uZXh0KSB7CisJCS8qIE9ubHkgdGhlIGNyZWF0b3IgaXMgYWxsb3dlZCB0byBtbWFwIHRoZSBvYmplY3QgKi8KKwkJaWYgKGNvbnRleHQgIT0gaXAtPmNvbnRleHQgfHwgKHZvaWQgKikgb2Zmc2V0ICE9IGlwLT5vYmopCisJCQljb250aW51ZTsKKwkJLyogRG9uJ3QgYWxsb3cgYSBtbWFwIGxhcmdlciB0aGFuIHRoZSBvYmplY3QuICovCisJCWlmIChzaXplID4gaXAtPnNpemUpCisJCQlicmVhazsKKworCQkqcHAgPSBpcC0+bmV4dDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7CisKKwkJcmV0ID0gcmVtYXBfdm1hbGxvY19yYW5nZSh2bWEsIGlwLT5vYmosIDApOworCQlpZiAocmV0KQorCQkJZ290byBkb25lOworCQl2bWEtPnZtX29wcyA9ICZpcGF0aF92bV9vcHM7CisJCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gaXA7CisJCWlwYXRoX3ZtYV9vcGVuKHZtYSk7CisJCWdvdG8gZG9uZTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7Citkb25lOgorCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCmluZGV4IDRhYzMxYTUuLmIzNmY2ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCkBAIC0zNiw2ICszNiwxOCBAQAogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKIAorLyogRmFzdCBtZW1vcnkgcmVnaW9uICovCitzdHJ1Y3QgaXBhdGhfZm1yIHsKKwlzdHJ1Y3QgaWJfZm1yIGliZm1yOworCXU4IHBhZ2Vfc2hpZnQ7CisJc3RydWN0IGlwYXRoX21yZWdpb24gbXI7ICAgICAgICAvKiBtdXN0IGJlIGxhc3QgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX2ZtciAqdG9faWZtcihzdHJ1Y3QgaWJfZm1yICppYmZtcikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGliZm1yLCBzdHJ1Y3QgaXBhdGhfZm1yLCBpYmZtcik7Cit9CisKIC8qKgogICogaXBhdGhfZ2V0X2RtYV9tciAtIGdldCBhIERNQSBtZW1vcnkgcmVnaW9uCiAgKiBAcGQ6IHByb3RlY3Rpb24gZG9tYWluIGZvciB0aGlzIG1lbW9yeSByZWdpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKaW5kZXggODNlNTU3Yi4uMjI0YjBmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3FwLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgotI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogCiAjZGVmaW5lIEJJVFNfUEVSX1BBR0UJCShQQUdFX1NJWkUqQklUU19QRVJfQllURSkKICNkZWZpbmUgQklUU19QRVJfUEFHRV9NQVNLCShCSVRTX1BFUl9QQUdFLTEpCkBAIC00NCwxOSArNDQsNiBAQAogI2RlZmluZSBmaW5kX25leHRfb2Zmc2V0KG1hcCwgb2ZmKSBmaW5kX25leHRfemVyb19iaXQoKG1hcCktPnBhZ2UsIFwKIAkJCQkJCSAgICAgIEJJVFNfUEVSX1BBR0UsIG9mZikKIAotI2RlZmluZSBUUkFOU19JTlZBTElECTAKLSNkZWZpbmUgVFJBTlNfQU5ZMlJTVAkxCi0jZGVmaW5lIFRSQU5TX1JTVDJJTklUCTIKLSNkZWZpbmUgVFJBTlNfSU5JVDJJTklUCTMKLSNkZWZpbmUgVFJBTlNfSU5JVDJSVFIJNAotI2RlZmluZSBUUkFOU19SVFIyUlRTCTUKLSNkZWZpbmUgVFJBTlNfUlRTMlJUUwk2Ci0jZGVmaW5lIFRSQU5TX1NRRVJSMlJUUwk3Ci0jZGVmaW5lIFRSQU5TX0FOWTJFUlIJOAotI2RlZmluZSBUUkFOU19SVFMyU1FECTkgIC8qIFhYWCBXYWl0IGZvciBleHBlY3RlZCBBQ0tzICYgc2lnbmFsIGV2ZW50ICovCi0jZGVmaW5lIFRSQU5TX1NRRDJTUUQJMTAgLyogZXJyb3IgaWYgbm90IGRyYWluZWQgJiBwYXJhbWV0ZXIgY2hhbmdlICovCi0jZGVmaW5lIFRSQU5TX1NRRDJSVFMJMTEgLyogZXJyb3IgaWYgbm90IGRyYWluZWQgKi8KLQogLyoKICAqIENvbnZlcnQgdGhlIEFFVEggY3JlZGl0IGNvZGUgaW50byB0aGUgbnVtYmVyIG9mIGNyZWRpdHMuCiAgKi8KQEAgLTI4Nyw3ICsyNzQsNyBAQAogCQkJCWZyZWVfcXBuKHFwdCwgcXAtPmlicXAucXBfbnVtKTsKIAkJCWlmICghYXRvbWljX2RlY19hbmRfdGVzdCgmcXAtPnJlZmNvdW50KSB8fAogCQkJICAgICFpcGF0aF9kZXN0cm95X3FwKCZxcC0+aWJxcCkpCi0JCQkJX1ZFUkJTX0lORk8oIlFQIG1lbW9yeSBsZWFrIVxuIik7CisJCQkJaXBhdGhfZGJnKEtFUk5fSU5GTyAiUVAgbWVtb3J5IGxlYWshXG4iKTsKIAkJCXFwID0gbnFwOwogCQl9CiAJfQpAQCAtMzU1LDggKzM0MiwxMCBAQAogCXFwLT5zX2xhc3QgPSAwOwogCXFwLT5zX3NzbiA9IDE7CiAJcXAtPnNfbHNuID0gMDsKLQlxcC0+cl9ycS5oZWFkID0gMDsKLQlxcC0+cl9ycS50YWlsID0gMDsKKwlpZiAocXAtPnJfcnEud3EpIHsKKwkJcXAtPnJfcnEud3EtPmhlYWQgPSAwOworCQlxcC0+cl9ycS53cS0+dGFpbCA9IDA7CisJfQogCXFwLT5yX3JldXNlX3NnZSA9IDA7CiB9CiAKQEAgLTM3Myw4ICszNjIsOCBAQAogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwogCXN0cnVjdCBpYl93YyB3YzsKIAotCV9WRVJCU19JTkZPKCJRUCVkLyVkIGluIGVycm9yIHN0YXRlXG4iLAotCQkgICAgcXAtPmlicXAucXBfbnVtLCBxcC0+cmVtb3RlX3Fwbik7CisJaXBhdGhfZGJnKEtFUk5fSU5GTyAiUVAlZC8lZCBpbiBlcnJvciBzdGF0ZVxuIiwKKwkJICBxcC0+aWJxcC5xcF9udW0sIHFwLT5yZW1vdGVfcXBuKTsKIAogCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOwogCS8qIFhYWCBXaGF0IGlmIGl0cyBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHRpbWVvdXQgY29kZT8gKi8KQEAgLTQxMCwxNSArMzk5LDMyIEBACiAJcXAtPnNfaGRyd29yZHMgPSAwOwogCXFwLT5zX2Fja19zdGF0ZSA9IElCX09QQ09ERV9SQ19BQ0tOT1dMRURHRTsKIAotCXdjLm9wY29kZSA9IElCX1dDX1JFQ1Y7Ci0Jc3Bpbl9sb2NrKCZxcC0+cl9ycS5sb2NrKTsKLQl3aGlsZSAocXAtPnJfcnEudGFpbCAhPSBxcC0+cl9ycS5oZWFkKSB7Ci0JCXdjLndyX2lkID0gZ2V0X3J3cWVfcHRyKCZxcC0+cl9ycSwgcXAtPnJfcnEudGFpbCktPndyX2lkOwotCQlpZiAoKytxcC0+cl9ycS50YWlsID49IHFwLT5yX3JxLnNpemUpCi0JCQlxcC0+cl9ycS50YWlsID0gMDsKLQkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsIDEpOworCWlmIChxcC0+cl9ycS53cSkgeworCQlzdHJ1Y3QgaXBhdGhfcndxICp3cTsKKwkJdTMyIGhlYWQ7CisJCXUzMiB0YWlsOworCisJCXNwaW5fbG9jaygmcXAtPnJfcnEubG9jayk7CisKKwkJLyogc2FuaXR5IGNoZWNrIHBvaW50ZXJzIGJlZm9yZSB0cnVzdGluZyB0aGVtICovCisJCXdxID0gcXAtPnJfcnEud3E7CisJCWhlYWQgPSB3cS0+aGVhZDsKKwkJaWYgKGhlYWQgPj0gcXAtPnJfcnEuc2l6ZSkKKwkJCWhlYWQgPSAwOworCQl0YWlsID0gd3EtPnRhaWw7CisJCWlmICh0YWlsID49IHFwLT5yX3JxLnNpemUpCisJCQl0YWlsID0gMDsKKwkJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKKwkJd2hpbGUgKHRhaWwgIT0gaGVhZCkgeworCQkJd2Mud3JfaWQgPSBnZXRfcndxZV9wdHIoJnFwLT5yX3JxLCB0YWlsKS0+d3JfaWQ7CisJCQlpZiAoKyt0YWlsID49IHFwLT5yX3JxLnNpemUpCisJCQkJdGFpbCA9IDA7CisJCQlpcGF0aF9jcV9lbnRlcih0b19pY3EocXAtPmlicXAucmVjdl9jcSksICZ3YywgMSk7CisJCX0KKwkJd3EtPnRhaWwgPSB0YWlsOworCisJCXNwaW5fdW5sb2NrKCZxcC0+cl9ycS5sb2NrKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJnFwLT5yX3JxLmxvY2spOwogfQogCiAvKioKQEAgLTQyNiwxMSArNDMyLDEyIEBACiAgKiBAaWJxcDogdGhlIHF1ZXVlIHBhaXIgd2hvJ3MgYXR0cmlidXRlcyB3ZSdyZSBtb2RpZnlpbmcKICAqIEBhdHRyOiB0aGUgbmV3IGF0dHJpYnV0ZXMKICAqIEBhdHRyX21hc2s6IHRoZSBtYXNrIG9mIGF0dHJpYnV0ZXMgdG8gbW9kaWZ5CisgKiBAdWRhdGE6IHVzZXIgZGF0YSBmb3IgaXBhdGh2ZXJicy5zbwogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBvdGhlcndpc2UgcmV0dXJucyBhbiBlcnJuby4KICAqLwogaW50IGlwYXRoX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLAotCQkgICAgaW50IGF0dHJfbWFzaykKKwkJICAgIGludCBhdHRyX21hc2ssIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCiB7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGlicXAtPmRldmljZSk7CiAJc3RydWN0IGlwYXRoX3FwICpxcCA9IHRvX2lxcChpYnFwKTsKQEAgLTQ0OCwxOSArNDU1LDQ2IEBACiAJCQkJYXR0cl9tYXNrKSkKIAkJZ290byBpbnZhbDsKIAotCWlmIChhdHRyX21hc2sgJiBJQl9RUF9BVikKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfQVYpIHsKIAkJaWYgKGF0dHItPmFoX2F0dHIuZGxpZCA9PSAwIHx8CiAJCSAgICBhdHRyLT5haF9hdHRyLmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFKQogCQkJZ290byBpbnZhbDsKIAorCQlpZiAoKGF0dHItPmFoX2F0dHIuYWhfZmxhZ3MgJiBJQl9BSF9HUkgpICYmCisJCSAgICAoYXR0ci0+YWhfYXR0ci5ncmguc2dpZF9pbmRleCA+IDEpKQorCQkJZ290byBpbnZhbDsKKwl9CisKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEtFWV9JTkRFWCkKLQkJaWYgKGF0dHItPnBrZXlfaW5kZXggPj0gaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhkZXYtPmRkKSkKKwkJaWYgKGF0dHItPnBrZXlfaW5kZXggPj0gaXBhdGhfZ2V0X25wa2V5cyhkZXYtPmRkKSkKIAkJCWdvdG8gaW52YWw7CiAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUlOX1JOUl9USU1FUikKIAkJaWYgKGF0dHItPm1pbl9ybnJfdGltZXIgPiAzMSkKIAkJCWdvdG8gaW52YWw7CiAKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUE9SVCkKKwkJaWYgKGF0dHItPnBvcnRfbnVtID09IDAgfHwKKwkJICAgIGF0dHItPnBvcnRfbnVtID4gaWJxcC0+ZGV2aWNlLT5waHlzX3BvcnRfY250KQorCQkJZ290byBpbnZhbDsKKworCWlmIChhdHRyX21hc2sgJiBJQl9RUF9QQVRIX01UVSkKKwkJaWYgKGF0dHItPnBhdGhfbXR1ID4gSUJfTVRVXzQwOTYpCisJCQlnb3RvIGludmFsOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9ERVNUX1JEX0FUT01JQykKKwkJaWYgKGF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA+IDEpCisJCQlnb3RvIGludmFsOworCisJaWYgKGF0dHJfbWFzayAmIElCX1FQX01BWF9RUF9SRF9BVE9NSUMpCisJCWlmIChhdHRyLT5tYXhfcmRfYXRvbWljID4gMSkKKwkJCWdvdG8gaW52YWw7CisKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfUEFUSF9NSUdfU1RBVEUpCisJCWlmIChhdHRyLT5wYXRoX21pZ19zdGF0ZSAhPSBJQl9NSUdfTUlHUkFURUQgJiYKKwkJICAgIGF0dHItPnBhdGhfbWlnX3N0YXRlICE9IElCX01JR19SRUFSTSkKKwkJCWdvdG8gaW52YWw7CisKIAlzd2l0Y2ggKG5ld19zdGF0ZSkgewogCWNhc2UgSUJfUVBTX1JFU0VUOgogCQlpcGF0aF9yZXNldF9xcChxcCk7CkBAIC01MTEsNiArNTQ1LDkgQEAKIAlpZiAoYXR0cl9tYXNrICYgSUJfUVBfTUlOX1JOUl9USU1FUikKIAkJcXAtPnJfbWluX3Jucl90aW1lciA9IGF0dHItPm1pbl9ybnJfdGltZXI7CiAKKwlpZiAoYXR0cl9tYXNrICYgSUJfUVBfVElNRU9VVCkKKwkJcXAtPnRpbWVvdXQgPSBhdHRyLT50aW1lb3V0OworCiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX1FLRVkpCiAJCXFwLT5xa2V5ID0gYXR0ci0+cWtleTsKIApAQCAtNTQzLDcgKzU4MCw3IEBACiAJYXR0ci0+ZGVzdF9xcF9udW0gPSBxcC0+cmVtb3RlX3FwbjsKIAlhdHRyLT5xcF9hY2Nlc3NfZmxhZ3MgPSBxcC0+cXBfYWNjZXNzX2ZsYWdzOwogCWF0dHItPmNhcC5tYXhfc2VuZF93ciA9IHFwLT5zX3NpemUgLSAxOwotCWF0dHItPmNhcC5tYXhfcmVjdl93ciA9IHFwLT5yX3JxLnNpemUgLSAxOworCWF0dHItPmNhcC5tYXhfcmVjdl93ciA9IHFwLT5pYnFwLnNycSA/IDAgOiBxcC0+cl9ycS5zaXplIC0gMTsKIAlhdHRyLT5jYXAubWF4X3NlbmRfc2dlID0gcXAtPnNfbWF4X3NnZTsKIAlhdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0gcXAtPnJfcnEubWF4X3NnZTsKIAlhdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKQEAgLTU1Nyw3ICs1OTQsNyBAQAogCWF0dHItPm1heF9kZXN0X3JkX2F0b21pYyA9IDE7CiAJYXR0ci0+bWluX3Jucl90aW1lciA9IHFwLT5yX21pbl9ybnJfdGltZXI7CiAJYXR0ci0+cG9ydF9udW0gPSAxOwotCWF0dHItPnRpbWVvdXQgPSAwOworCWF0dHItPnRpbWVvdXQgPSBxcC0+dGltZW91dDsKIAlhdHRyLT5yZXRyeV9jbnQgPSBxcC0+c19yZXRyeV9jbnQ7CiAJYXR0ci0+cm5yX3JldHJ5ID0gcXAtPnNfcm5yX3JldHJ5OwogCWF0dHItPmFsdF9wb3J0X251bSA9IDA7CkBAIC01NjksOSArNjA2LDEwIEBACiAJaW5pdF9hdHRyLT5yZWN2X2NxID0gcXAtPmlicXAucmVjdl9jcTsKIAlpbml0X2F0dHItPnNycSA9IHFwLT5pYnFwLnNycTsKIAlpbml0X2F0dHItPmNhcCA9IGF0dHItPmNhcDsKLQlpbml0X2F0dHItPnNxX3NpZ190eXBlID0KLQkJKHFwLT5zX2ZsYWdzICYgKDEgPDwgSVBBVEhfU19TSUdOQUxfUkVRX1dSKSkKLQkJPyBJQl9TSUdOQUxfUkVRX1dSIDogMDsKKwlpZiAocXAtPnNfZmxhZ3MgJiAoMSA8PCBJUEFUSF9TX1NJR05BTF9SRVFfV1IpKQorCQlpbml0X2F0dHItPnNxX3NpZ190eXBlID0gSUJfU0lHTkFMX1JFUV9XUjsKKwllbHNlCisJCWluaXRfYXR0ci0+c3Ffc2lnX3R5cGUgPSBJQl9TSUdOQUxfQUxMX1dSOwogCWluaXRfYXR0ci0+cXBfdHlwZSA9IHFwLT5pYnFwLnFwX3R5cGU7CiAJaW5pdF9hdHRyLT5wb3J0X251bSA9IDE7CiAJcmV0dXJuIDA7CkBAIC01OTYsMTMgKzYzNCwyMyBAQAogCX0gZWxzZSB7CiAJCXUzMiBtaW4sIG1heCwgeDsKIAkJdTMyIGNyZWRpdHM7CisJCXN0cnVjdCBpcGF0aF9yd3EgKndxID0gcXAtPnJfcnEud3E7CisJCXUzMiBoZWFkOworCQl1MzIgdGFpbDsKIAorCQkvKiBzYW5pdHkgY2hlY2sgcG9pbnRlcnMgYmVmb3JlIHRydXN0aW5nIHRoZW0gKi8KKwkJaGVhZCA9IHdxLT5oZWFkOworCQlpZiAoaGVhZCA+PSBxcC0+cl9ycS5zaXplKQorCQkJaGVhZCA9IDA7CisJCXRhaWwgPSB3cS0+dGFpbDsKKwkJaWYgKHRhaWwgPj0gcXAtPnJfcnEuc2l6ZSkKKwkJCXRhaWwgPSAwOwogCQkvKgogCQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgY3JlZGl0cyBhdmFpbGFibGUgKFJXUUVzKS4KIAkJICogWFhYIE5vdCBob2xkaW5nIHRoZSByX3JxLmxvY2sgaGVyZSBzbyB0aGVyZSBpcyBhIHNtYWxsCiAJCSAqIGNoYW5jZSB0aGF0IHRoZSBwYWlyIG9mIHJlYWRzIGFyZSBub3QgYXRvbWljLgogCQkgKi8KLQkJY3JlZGl0cyA9IHFwLT5yX3JxLmhlYWQgLSBxcC0+cl9ycS50YWlsOworCQljcmVkaXRzID0gaGVhZCAtIHRhaWw7CiAJCWlmICgoaW50KWNyZWRpdHMgPCAwKQogCQkJY3JlZGl0cyArPSBxcC0+cl9ycS5zaXplOwogCQkvKgpAQCAtNjc5LDI3ICs3MjcsMzcgQEAKIAljYXNlIElCX1FQVF9VRDoKIAljYXNlIElCX1FQVF9TTUk6CiAJY2FzZSBJQl9RUFRfR1NJOgotCQlxcCA9IGttYWxsb2Moc2l6ZW9mKCpxcCksIEdGUF9LRVJORUwpOworCQlzeiA9IHNpemVvZigqcXApOworCQlpZiAoaW5pdF9hdHRyLT5zcnEpIHsKKwkJCXN0cnVjdCBpcGF0aF9zcnEgKnNycSA9IHRvX2lzcnEoaW5pdF9hdHRyLT5zcnEpOworCisJCQlzeiArPSBzaXplb2YoKnFwLT5yX3NnX2xpc3QpICoKKwkJCQlzcnEtPnJxLm1heF9zZ2U7CisJCX0gZWxzZQorCQkJc3ogKz0gc2l6ZW9mKCpxcC0+cl9zZ19saXN0KSAqCisJCQkJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlOworCQlxcCA9IGttYWxsb2Moc3osIEdGUF9LRVJORUwpOwogCQlpZiAoIXFwKSB7Ci0JCQl2ZnJlZShzd3EpOwogCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJCWdvdG8gYmFpbDsKKwkJCWdvdG8gYmFpbF9zd3E7CiAJCX0KIAkJaWYgKGluaXRfYXR0ci0+c3JxKSB7CisJCQlzeiA9IDA7CiAJCQlxcC0+cl9ycS5zaXplID0gMDsKIAkJCXFwLT5yX3JxLm1heF9zZ2UgPSAwOwogCQkJcXAtPnJfcnEud3EgPSBOVUxMOworCQkJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfd3IgPSAwOworCQkJaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlID0gMDsKIAkJfSBlbHNlIHsKIAkJCXFwLT5yX3JxLnNpemUgPSBpbml0X2F0dHItPmNhcC5tYXhfcmVjdl93ciArIDE7CiAJCQlxcC0+cl9ycS5tYXhfc2dlID0gaW5pdF9hdHRyLT5jYXAubWF4X3JlY3Zfc2dlOwotCQkJc3ogPSAoc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpICogcXAtPnJfcnEubWF4X3NnZSkgKworCQkJc3ogPSAoc2l6ZW9mKHN0cnVjdCBpYl9zZ2UpICogcXAtPnJfcnEubWF4X3NnZSkgKwogCQkJCXNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSk7Ci0JCQlxcC0+cl9ycS53cSA9IHZtYWxsb2MocXAtPnJfcnEuc2l6ZSAqIHN6KTsKKwkJCXFwLT5yX3JxLndxID0gdm1hbGxvY191c2VyKHNpemVvZihzdHJ1Y3QgaXBhdGhfcndxKSArCisJCQkJCSAgICAgIHFwLT5yX3JxLnNpemUgKiBzeik7CiAJCQlpZiAoIXFwLT5yX3JxLndxKSB7Ci0JCQkJa2ZyZWUocXApOwotCQkJCXZmcmVlKHN3cSk7CiAJCQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJCQlnb3RvIGJhaWw7CisJCQkJZ290byBiYWlsX3FwOwogCQkJfQogCQl9CiAKQEAgLTcxOSwyNCArNzc3LDE5IEBACiAJCXFwLT5zX3dxID0gc3dxOwogCQlxcC0+c19zaXplID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfd3IgKyAxOwogCQlxcC0+c19tYXhfc2dlID0gaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlOwotCQlxcC0+c19mbGFncyA9IGluaXRfYXR0ci0+c3Ffc2lnX3R5cGUgPT0gSUJfU0lHTkFMX1JFUV9XUiA/Ci0JCQkxIDw8IElQQVRIX1NfU0lHTkFMX1JFUV9XUiA6IDA7CisJCWlmIChpbml0X2F0dHItPnNxX3NpZ190eXBlID09IElCX1NJR05BTF9SRVFfV1IpCisJCQlxcC0+c19mbGFncyA9IDEgPDwgSVBBVEhfU19TSUdOQUxfUkVRX1dSOworCQllbHNlCisJCQlxcC0+c19mbGFncyA9IDA7CiAJCWRldiA9IHRvX2lkZXYoaWJwZC0+ZGV2aWNlKTsKIAkJZXJyID0gaXBhdGhfYWxsb2NfcXBuKCZkZXYtPnFwX3RhYmxlLCBxcCwKIAkJCQkgICAgICBpbml0X2F0dHItPnFwX3R5cGUpOwogCQlpZiAoZXJyKSB7Ci0JCQl2ZnJlZShzd3EpOwotCQkJdmZyZWUocXAtPnJfcnEud3EpOwotCQkJa2ZyZWUocXApOwogCQkJcmV0ID0gRVJSX1BUUihlcnIpOwotCQkJZ290byBiYWlsOworCQkJZ290byBiYWlsX3J3cTsKIAkJfQorCQlxcC0+aXAgPSBOVUxMOwogCQlpcGF0aF9yZXNldF9xcChxcCk7Ci0KLQkJLyogVGVsbCB0aGUgY29yZSBkcml2ZXIgdGhhdCB0aGUga2VybmVsIFNNQSBpcyBwcmVzZW50LiAqLwotCQlpZiAoaW5pdF9hdHRyLT5xcF90eXBlID09IElCX1FQVF9TTUkpCi0JCQlpcGF0aF9sYXllcl9zZXRfdmVyYnNfZmxhZ3MoZGV2LT5kZCwKLQkJCQkJCSAgICBJUEFUSF9WRVJCU19LRVJORUxfU01BKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNzQ3LDggKzgwMCw2MyBAQAogCiAJaW5pdF9hdHRyLT5jYXAubWF4X2lubGluZV9kYXRhID0gMDsKIAotCXJldCA9ICZxcC0+aWJxcDsKKwkvKgorCSAqIFJldHVybiB0aGUgYWRkcmVzcyBvZiB0aGUgUldRIGFzIHRoZSBvZmZzZXQgdG8gbW1hcC4KKwkgKiBTZWUgaXBhdGhfbW1hcCgpIGZvciBkZXRhaWxzLgorCSAqLworCWlmICh1ZGF0YSAmJiB1ZGF0YS0+b3V0bGVuID49IHNpemVvZihfX3U2NCkpIHsKKwkJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqaXA7CisJCV9fdTY0IG9mZnNldCA9IChfX3U2NCkgcXAtPnJfcnEud3E7CisJCWludCBlcnI7CiAKKwkJZXJyID0gaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJm9mZnNldCwgc2l6ZW9mKG9mZnNldCkpOworCQlpZiAoZXJyKSB7CisJCQlyZXQgPSBFUlJfUFRSKGVycik7CisJCQlnb3RvIGJhaWxfcndxOworCQl9CisKKwkJaWYgKHFwLT5yX3JxLndxKSB7CisJCQkvKiBBbGxvY2F0ZSBpbmZvIGZvciBpcGF0aF9tbWFwKCkuICovCisJCQlpcCA9IGttYWxsb2Moc2l6ZW9mKCppcCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFpcCkgeworCQkJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCQkJZ290byBiYWlsX3J3cTsKKwkJCX0KKwkJCXFwLT5pcCA9IGlwOworCQkJaXAtPmNvbnRleHQgPSBpYnBkLT51b2JqZWN0LT5jb250ZXh0OworCQkJaXAtPm9iaiA9IHFwLT5yX3JxLndxOworCQkJa3JlZl9pbml0KCZpcC0+cmVmKTsKKwkJCWlwLT5tbWFwX2NudCA9IDA7CisJCQlpcC0+c2l6ZSA9IFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBpcGF0aF9yd3EpICsKKwkJCQkJICAgICAgcXAtPnJfcnEuc2l6ZSAqIHN6KTsKKwkJCXNwaW5fbG9ja19pcnEoJmRldi0+cGVuZGluZ19sb2NrKTsKKwkJCWlwLT5uZXh0ID0gZGV2LT5wZW5kaW5nX21tYXBzOworCQkJZGV2LT5wZW5kaW5nX21tYXBzID0gaXA7CisJCQlzcGluX3VubG9ja19pcnEoJmRldi0+cGVuZGluZ19sb2NrKTsKKwkJfQorCX0KKworCXNwaW5fbG9jaygmZGV2LT5uX3Fwc19sb2NrKTsKKwlpZiAoZGV2LT5uX3Fwc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X3FwcykgeworCQlzcGluX3VubG9jaygmZGV2LT5uX3Fwc19sb2NrKTsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsX2lwOworCX0KKworCWRldi0+bl9xcHNfYWxsb2NhdGVkKys7CisJc3Bpbl91bmxvY2soJmRldi0+bl9xcHNfbG9jayk7CisKKwlyZXQgPSAmcXAtPmlicXA7CisJZ290byBiYWlsOworCitiYWlsX2lwOgorCWtmcmVlKHFwLT5pcCk7CitiYWlsX3J3cToKKwl2ZnJlZShxcC0+cl9ycS53cSk7CitiYWlsX3FwOgorCWtmcmVlKHFwKTsKK2JhaWxfc3dxOgorCXZmcmVlKHN3cSk7CiBiYWlsOgogCXJldHVybiByZXQ7CiB9CkBAIC03NjgsMTUgKzg3NiwxMiBAQAogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnFwLT5kZXZpY2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBUZWxsIHRoZSBjb3JlIGRyaXZlciB0aGF0IHRoZSBrZXJuZWwgU01BIGlzIGdvbmUuICovCi0JaWYgKHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1NNSSkKLQkJaXBhdGhfbGF5ZXJfc2V0X3ZlcmJzX2ZsYWdzKGRldi0+ZGQsIDApOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnFwLT5yX3JxLmxvY2ssIGZsYWdzKTsKLQlzcGluX2xvY2soJnFwLT5zX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+c19sb2NrLCBmbGFncyk7CiAJcXAtPnN0YXRlID0gSUJfUVBTX0VSUjsKLQlzcGluX3VubG9jaygmcXAtPnNfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmRldi0+bl9xcHNfbG9jayk7CisJZGV2LT5uX3Fwc19hbGxvY2F0ZWQtLTsKKwlzcGluX3VubG9jaygmZGV2LT5uX3Fwc19sb2NrKTsKIAogCS8qIFN0b3AgdGhlIHNlbmRpbmcgdGFza2xldC4gKi8KIAl0YXNrbGV0X2tpbGwoJnFwLT5zX3Rhc2spOwpAQCAtNzk3LDggKzkwMiwxMSBAQAogCWlmIChhdG9taWNfcmVhZCgmcXAtPnJlZmNvdW50KSAhPSAwKQogCQlpcGF0aF9mcmVlX3FwKCZkZXYtPnFwX3RhYmxlLCBxcCk7CiAKKwlpZiAocXAtPmlwKQorCQlrcmVmX3B1dCgmcXAtPmlwLT5yZWYsIGlwYXRoX3JlbGVhc2VfbW1hcF9pbmZvKTsKKwllbHNlCisJCXZmcmVlKHFwLT5yX3JxLndxKTsKIAl2ZnJlZShxcC0+c193cSk7Ci0JdmZyZWUocXAtPnJfcnEud3EpOwogCWtmcmVlKHFwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTg1MCw4ICs5NTgsOCBAQAogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOwogCi0JX1ZFUkJTX0lORk8oIlNlbmQgcXVldWUgZXJyb3Igb24gUVAlZC8lZDogZXJyOiAlZFxuIiwKLQkJICAgIHFwLT5pYnFwLnFwX251bSwgcXAtPnJlbW90ZV9xcG4sIHdjLT5zdGF0dXMpOworCWlwYXRoX2RiZyhLRVJOX0lORk8gIlNlbmQgcXVldWUgZXJyb3Igb24gUVAlZC8lZDogZXJyOiAlZFxuIiwKKwkJICBxcC0+aWJxcC5xcF9udW0sIHFwLT5yZW1vdGVfcXBuLCB3Yy0+c3RhdHVzKTsKIAogCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOwogCS8qIFhYWCBXaGF0IGlmIGl0cyBhbHJlYWR5IHJlbW92ZWQgYnkgdGhlIHRpbWVvdXQgY29kZT8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKaW5kZXggNzc0ZDE2MS4uYTA4NjU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqLwogCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKLSNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKKyNpbmNsdWRlICJpcGF0aF9rZXJuZWwuaCIKIAogLyogY3V0IGRvd24gcmlkaWN1bG91c2x5IGxvbmcgSUIgbWFjcm8gbmFtZXMgKi8KICNkZWZpbmUgT1AoeCkgSUJfT1BDT0RFX1JDXyMjeApAQCAtNTQwLDcgKzU0MCw3IEBACiAJCWxyaDAgPSBJUEFUSF9MUkhfR1JIOwogCX0KIAkvKiByZWFkIHBrZXlfaW5kZXggdy9vIGxvY2sgKGl0cyBhdG9taWMpICovCi0JYnRoMCA9IGlwYXRoX2xheWVyX2dldF9wa2V5KGRldi0+ZGQsIHFwLT5zX3BrZXlfaW5kZXgpOworCWJ0aDAgPSBpcGF0aF9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKIAlpZiAocXAtPnJfbmFrX3N0YXRlKQogCQlvaGRyLT51LmFldGggPSBjcHVfdG9fYmUzMigocXAtPnJfbXNuICYgSVBBVEhfTVNOX01BU0spIHwKIAkJCQkJICAgIChxcC0+cl9uYWtfc3RhdGUgPDwKQEAgLTU1Nyw3ICs1NTcsNyBAQAogCWhkci5scmhbMF0gPSBjcHVfdG9fYmUxNihscmgwKTsKIAloZHIubHJoWzFdID0gY3B1X3RvX2JlMTYocXAtPnJlbW90ZV9haF9hdHRyLmRsaWQpOwogCWhkci5scmhbMl0gPSBjcHVfdG9fYmUxNihod29yZHMgKyBTSVpFX09GX0NSQyk7Ci0JaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOworCWhkci5scmhbM10gPSBjcHVfdG9fYmUxNihkZXYtPmRkLT5pcGF0aF9saWQpOwogCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOwogCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKIAlvaGRyLT5idGhbMl0gPSBjcHVfdG9fYmUzMihxcC0+cl9hY2tfcHNuICYgSVBBVEhfUFNOX01BU0spOwpAQCAtMTMyMyw4ICsxMzIzLDcgQEAKIAkJICogdGhlIGVhZ2VyIGhlYWRlciBidWZmZXIgc2l6ZSB0byA1NiBieXRlcyBzbyB0aGUgbGFzdCA0CiAJCSAqIGJ5dGVzIG9mIHRoZSBCVEggaGVhZGVyIChQU04pIGlzIGluIHRoZSBkYXRhIGJ1ZmZlci4KIAkJICovCi0JCWhlYWRlcl9pbl9kYXRhID0KLQkJCWlwYXRoX2xheWVyX2dldF9yY3ZoZHJlbnRzaXplKGRldi0+ZGQpID09IDE2OworCQloZWFkZXJfaW5fZGF0YSA9IGRldi0+ZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgPT0gMTY7CiAJCWlmIChoZWFkZXJfaW5fZGF0YSkgewogCQkJcHNuID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOwogCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaAppbmRleCA4OWRmOGY1Li42ZTIzYjNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JlZ2lzdGVycy5oCkBAIC0zNiw4ICszNiw3IEBACiAKIC8qCiAgKiBUaGlzIGZpbGUgc2hvdWxkIG9ubHkgYmUgaW5jbHVkZWQgYnkga2VybmVsIHNvdXJjZSwgYW5kIGJ5IHRoZSBkaWFncy4gIEl0Ci0gKiBkZWZpbmVzIHRoZSByZWdpc3RlcnMsIGFuZCB0aGVpciBjb250ZW50cywgZm9yIHRoZSBJbmZpbmlQYXRoIEhULTQwMAotICogY2hpcC4KKyAqIGRlZmluZXMgdGhlIHJlZ2lzdGVycywgYW5kIHRoZWlyIGNvbnRlbnRzLCBmb3IgSW5maW5pUGF0aCBjaGlwcy4KICAqLwogCiAvKgpAQCAtMjgzLDEwICsyODIsMTIgQEAKICNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX1JFU0VUICAgICAgICAgIDB4N1VMTAogI2RlZmluZSBJTkZJTklQQVRIX1hHWFNfTURJT0FERFJfTUFTSyAgMHhmVUxMCiAjZGVmaW5lIElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCA0CisjZGVmaW5lIElORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQgMTkKKyNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX1JYX1BPTF9NQVNLIDB4ZlVMTAogCiAjZGVmaW5lIElORklOSVBBVEhfUlRfQUREUl9NQVNLIDB4RkZGRkZGRkZGRlVMTAkvKiA0MCBiaXRzIHZhbGlkICovCiAKLS8qIFRJRCBlbnRyaWVzIChtZW1vcnkpLCBIVDQwMC1vbmx5ICovCisvKiBUSUQgZW50cmllcyAobWVtb3J5KSwgSFQtb25seSAqLwogI2RlZmluZSBJTkZJTklQQVRIX1JUX1ZBTElEIDB4ODAwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBJTkZJTklQQVRIX1JUX0FERFJfU0hJRlQgMAogI2RlZmluZSBJTkZJTklQQVRIX1JUX0JVRlNJWkVfTUFTSyAweDNGRkYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwppbmRleCA3NzJiYzU5Zi4uNWMxZGEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwpAQCAtMzIsNyArMzIsNyBAQAogICovCiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgotI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogCiAvKgogICogQ29udmVydCB0aGUgQUVUSCBSTlIgdGltZW91dCBjb2RlIGludG8gdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMuCkBAIC0xMDYsNiArMTA2LDU0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5wZW5kaW5nX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBpbml0X3NnZShzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlKQoreworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOworCWludCB1c2VyID0gdG9faXBkKHFwLT5pYnFwLnBkKS0+dXNlcjsKKwlpbnQgaSwgaiwgcmV0OworCXN0cnVjdCBpYl93YyB3YzsKKworCXFwLT5yX2xlbiA9IDA7CisJZm9yIChpID0gaiA9IDA7IGkgPCB3cWUtPm51bV9zZ2U7IGkrKykgeworCQlpZiAod3FlLT5zZ19saXN0W2ldLmxlbmd0aCA9PSAwKQorCQkJY29udGludWU7CisJCS8qIENoZWNrIExLRVkgKi8KKwkJaWYgKCh1c2VyICYmIHdxZS0+c2dfbGlzdFtpXS5sa2V5ID09IDApIHx8CisJCSAgICAhaXBhdGhfbGtleV9vaygmZGV2LT5sa190YWJsZSwKKwkJCQkgICAmcXAtPnJfc2dfbGlzdFtqXSwgJndxZS0+c2dfbGlzdFtpXSwKKwkJCQkgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKQorCQkJZ290byBiYWRfbGtleTsKKwkJcXAtPnJfbGVuICs9IHdxZS0+c2dfbGlzdFtpXS5sZW5ndGg7CisJCWorKzsKKwl9CisJcXAtPnJfc2dlLnNnZSA9IHFwLT5yX3NnX2xpc3RbMF07CisJcXAtPnJfc2dlLnNnX2xpc3QgPSBxcC0+cl9zZ19saXN0ICsgMTsKKwlxcC0+cl9zZ2UubnVtX3NnZSA9IGo7CisJcmV0ID0gMTsKKwlnb3RvIGJhaWw7CisKK2JhZF9sa2V5OgorCXdjLndyX2lkID0gd3FlLT53cl9pZDsKKwl3Yy5zdGF0dXMgPSBJQl9XQ19MT0NfUFJPVF9FUlI7CisJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKKwl3Yy52ZW5kb3JfZXJyID0gMDsKKwl3Yy5ieXRlX2xlbiA9IDA7CisJd2MuaW1tX2RhdGEgPSAwOworCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwl3Yy5zcmNfcXAgPSAwOworCXdjLndjX2ZsYWdzID0gMDsKKwl3Yy5wa2V5X2luZGV4ID0gMDsKKwl3Yy5zbGlkID0gMDsKKwl3Yy5zbCA9IDA7CisJd2MuZGxpZF9wYXRoX2JpdHMgPSAwOworCXdjLnBvcnRfbnVtID0gMDsKKwkvKiBTaWduYWwgc29saWNpdGVkIGNvbXBsZXRpb24gZXZlbnQuICovCisJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsIDEpOworCXJldCA9IDA7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogaXBhdGhfZ2V0X3J3cWUgLSBjb3B5IHRoZSBuZXh0IFJXUUUgaW50byB0aGUgUVAncyBSV1FFCiAgKiBAcXA6IHRoZSBRUApAQCAtMTE5LDcxICsxNjcsNzEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBpcGF0aF9ycSAqcnE7CisJc3RydWN0IGlwYXRoX3J3cSAqd3E7CiAJc3RydWN0IGlwYXRoX3NycSAqc3JxOwogCXN0cnVjdCBpcGF0aF9yd3FlICp3cWU7Ci0JaW50IHJldCA9IDE7CisJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBpYl9ldmVudCAqLCB2b2lkICopOworCXUzMiB0YWlsOworCWludCByZXQ7CiAKLQlpZiAoIXFwLT5pYnFwLnNycSkgeworCWlmIChxcC0+aWJxcC5zcnEpIHsKKwkJc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOworCQloYW5kbGVyID0gc3JxLT5pYnNycS5ldmVudF9oYW5kbGVyOworCQlycSA9ICZzcnEtPnJxOworCX0gZWxzZSB7CisJCXNycSA9IE5VTEw7CisJCWhhbmRsZXIgPSBOVUxMOwogCQlycSA9ICZxcC0+cl9ycTsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0KLQkJaWYgKHVubGlrZWx5KHJxLT50YWlsID09IHJxLT5oZWFkKSkgewotCQkJcmV0ID0gMDsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCQl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKLQkJcXAtPnJfd3JfaWQgPSB3cWUtPndyX2lkOwotCQlpZiAoIXdyX2lkX29ubHkpIHsKLQkJCXFwLT5yX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07Ci0JCQlxcC0+cl9zZ2Uuc2dfbGlzdCA9IHdxZS0+c2dfbGlzdCArIDE7Ci0JCQlxcC0+cl9zZ2UubnVtX3NnZSA9IHdxZS0+bnVtX3NnZTsKLQkJCXFwLT5yX2xlbiA9IHdxZS0+bGVuZ3RoOwotCQl9Ci0JCWlmICgrK3JxLT50YWlsID49IHJxLT5zaXplKQotCQkJcnEtPnRhaWwgPSAwOwotCQlnb3RvIGRvbmU7CiAJfQogCi0Jc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOwotCXJxID0gJnNycS0+cnE7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJxLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAodW5saWtlbHkocnEtPnRhaWwgPT0gcnEtPmhlYWQpKSB7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0Jd3FlID0gZ2V0X3J3cWVfcHRyKHJxLCBycS0+dGFpbCk7CisJd3EgPSBycS0+d3E7CisJdGFpbCA9IHdxLT50YWlsOworCS8qIFZhbGlkYXRlIHRhaWwgYmVmb3JlIHVzaW5nIGl0IHNpbmNlIGl0IGlzIHVzZXIgd3JpdGFibGUuICovCisJaWYgKHRhaWwgPj0gcnEtPnNpemUpCisJCXRhaWwgPSAwOworCWRvIHsKKwkJaWYgKHVubGlrZWx5KHRhaWwgPT0gd3EtPmhlYWQpKSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCQkJcmV0ID0gMDsKKwkJCWdvdG8gYmFpbDsKKwkJfQorCQl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHRhaWwpOworCQlpZiAoKyt0YWlsID49IHJxLT5zaXplKQorCQkJdGFpbCA9IDA7CisJfSB3aGlsZSAoIXdyX2lkX29ubHkgJiYgIWluaXRfc2dlKHFwLCB3cWUpKTsKIAlxcC0+cl93cl9pZCA9IHdxZS0+d3JfaWQ7Ci0JaWYgKCF3cl9pZF9vbmx5KSB7Ci0JCXFwLT5yX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07Ci0JCXFwLT5yX3NnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKLQkJcXAtPnJfc2dlLm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7Ci0JCXFwLT5yX2xlbiA9IHdxZS0+bGVuZ3RoOwotCX0KLQlpZiAoKytycS0+dGFpbCA+PSBycS0+c2l6ZSkKLQkJcnEtPnRhaWwgPSAwOwotCWlmIChzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIpIHsKLQkJc3RydWN0IGliX2V2ZW50IGV2OworCXdxLT50YWlsID0gdGFpbDsKKworCXJldCA9IDE7CisJaWYgKGhhbmRsZXIpIHsKIAkJdTMyIG47CiAKLQkJaWYgKHJxLT5oZWFkIDwgcnEtPnRhaWwpCi0JCQluID0gcnEtPnNpemUgKyBycS0+aGVhZCAtIHJxLT50YWlsOworCQkvKgorCQkgKiB2YWxpZGF0ZSBoZWFkIHBvaW50ZXIgdmFsdWUgYW5kIGNvbXB1dGUKKwkJICogdGhlIG51bWJlciBvZiByZW1haW5pbmcgV1FFcy4KKwkJICovCisJCW4gPSB3cS0+aGVhZDsKKwkJaWYgKG4gPj0gcnEtPnNpemUpCisJCQluID0gMDsKKwkJaWYgKG4gPCB0YWlsKQorCQkJbiArPSBycS0+c2l6ZSAtIHRhaWw7CiAJCWVsc2UKLQkJCW4gPSBycS0+aGVhZCAtIHJxLT50YWlsOworCQkJbiAtPSB0YWlsOwogCQlpZiAobiA8IHNycS0+bGltaXQpIHsKKwkJCXN0cnVjdCBpYl9ldmVudCBldjsKKwogCQkJc3JxLT5saW1pdCA9IDA7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCQkJZXYuZGV2aWNlID0gcXAtPmlicXAuZGV2aWNlOwogCQkJZXYuZWxlbWVudC5zcnEgPSBxcC0+aWJxcC5zcnE7CiAJCQlldi5ldmVudCA9IElCX0VWRU5UX1NSUV9MSU1JVF9SRUFDSEVEOwotCQkJc3JxLT5pYnNycS5ldmVudF9oYW5kbGVyKCZldiwKLQkJCQkJCSBzcnEtPmlic3JxLnNycV9jb250ZXh0KTsKKwkJCWhhbmRsZXIoJmV2LCBzcnEtPmlic3JxLnNycV9jb250ZXh0KTsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCX0KLQotZG9uZToKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCiBiYWlsOgogCXJldHVybiByZXQ7CiB9CkBAIC00MjIsNiArNDcwLDE1IEBACiAJCXdha2VfdXAoJnFwLT53YWl0KTsKIH0KIAorc3RhdGljIGludCB3YW50X2J1ZmZlcihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJc2V0X2JpdChJUEFUSF9TX1BJT0lOVEJVRkFWQUlMLCAmZGQtPmlwYXRoX3NlbmRjdHJsKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRjdHJsLAorCQkJIGRkLT5pcGF0aF9zZW5kY3RybCk7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpcGF0aF9ub19idWZzX2F2YWlsYWJsZSAtIHRlbGwgdGhlIGxheWVyIGRyaXZlciB3ZSBuZWVkIGJ1ZmZlcnMKICAqIEBxcDogdGhlIFFQIHRoYXQgY2F1c2VkIHRoZSBwcm9ibGVtCkBAIC00MzgsNyArNDk1LDcgQEAKIAkJbGlzdF9hZGRfdGFpbCgmcXAtPnBpb3dhaXQsICZkZXYtPnBpb3dhaXQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cGVuZGluZ19sb2NrLCBmbGFncyk7CiAJLyoKLQkgKiBOb3RlIHRoYXQgYXMgc29vbiBhcyBpcGF0aF9sYXllcl93YW50X2J1ZmZlcigpIGlzIGNhbGxlZCBhbmQKKwkgKiBOb3RlIHRoYXQgYXMgc29vbiBhcyB3YW50X2J1ZmZlcigpIGlzIGNhbGxlZCBhbmQKIAkgKiBwb3NzaWJseSBiZWZvcmUgaXQgcmV0dXJucywgaXBhdGhfaWJfcGlvYnVmYXZhaWwoKQogCSAqIGNvdWxkIGJlIGNhbGxlZC4gIElmIHdlIGFyZSBzdGlsbCBpbiB0aGUgdGFza2xldCBmdW5jdGlvbiwKIAkgKiB0YXNrbGV0X2hpX3NjaGVkdWxlKCkgd2lsbCBub3QgY2FsbCB1cyB1bnRpbCB0aGUgbmV4dCB0aW1lCkBAIC00NDgsNyArNTA1LDcgQEAKIAkgKi8KIAljbGVhcl9iaXQoSVBBVEhfU19CVVNZLCAmcXAtPnNfZmxhZ3MpOwogCXRhc2tsZXRfdW5sb2NrKCZxcC0+c190YXNrKTsKLQlpcGF0aF9sYXllcl93YW50X2J1ZmZlcihkZXYtPmRkKTsKKwl3YW50X2J1ZmZlcihkZXYtPmRkKTsKIAlkZXYtPm5fcGlvd2FpdCsrOwogfQogCkBAIC01NjMsNyArNjIwLDcgQEAKIAloZHItPmhvcF9saW1pdCA9IGdyaC0+aG9wX2xpbWl0OwogCS8qIFRoZSBTR0lEIGlzIDMyLWJpdCBhbGlnbmVkLiAqLwogCWhkci0+c2dpZC5nbG9iYWwuc3VibmV0X3ByZWZpeCA9IGRldi0+Z2lkX3ByZWZpeDsKLQloZHItPnNnaWQuZ2xvYmFsLmludGVyZmFjZV9pZCA9IGlwYXRoX2xheWVyX2dldF9ndWlkKGRldi0+ZGQpOworCWhkci0+c2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkID0gZGV2LT5kZC0+aXBhdGhfZ3VpZDsKIAloZHItPmRnaWQgPSBncmgtPmRnaWQ7CiAKIAkvKiBHUkggaGVhZGVyIHNpemUgaW4gMzItYml0IHdvcmRzLiAqLwpAQCAtNTk1LDggKzY1Miw3IEBACiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoSVBBVEhfU19CVVNZLCAmcXAtPnNfZmxhZ3MpKQogCQlnb3RvIGJhaWw7CiAKLQlpZiAodW5saWtlbHkocXAtPnJlbW90ZV9haF9hdHRyLmRsaWQgPT0KLQkJICAgICBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpKSkgeworCWlmICh1bmxpa2VseShxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCA9PSBkZXYtPmRkLT5pcGF0aF9saWQpKSB7CiAJCWlwYXRoX3J1Y19sb29wYmFjayhxcCk7CiAJCWdvdG8gY2xlYXI7CiAJfQpAQCAtNjYzLDggKzcxOSw4IEBACiAJcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KHFwLT5yZW1vdGVfYWhfYXR0ci5kbGlkKTsKIAlxcC0+c19oZHIubHJoWzJdID0gY3B1X3RvX2JlMTYocXAtPnNfaGRyd29yZHMgKyBud29yZHMgKwogCQkJCSAgICAgICBTSVpFX09GX0NSQyk7Ci0JcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpOwotCWJ0aDAgfD0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7CisJcXAtPnNfaGRyLmxyaFszXSA9IGNwdV90b19iZTE2KGRldi0+ZGQtPmlwYXRoX2xpZCk7CisJYnRoMCB8PSBpcGF0aF9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKIAlidGgwIHw9IGV4dHJhX2J5dGVzIDw8IDIwOwogCW9oZHItPmJ0aFswXSA9IGNwdV90b19iZTMyKGJ0aDApOwogCW9oZHItPmJ0aFsxXSA9IGNwdV90b19iZTMyKHFwLT5yZW1vdGVfcXBuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYwppbmRleCBmNzYwNDM0Li45NDFlODY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jCkBAIC00OCw2NiArNDgsMzkgQEAKIAkJCSAgIHN0cnVjdCBpYl9yZWN2X3dyICoqYmFkX3dyKQogewogCXN0cnVjdCBpcGF0aF9zcnEgKnNycSA9IHRvX2lzcnEoaWJzcnEpOwotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnNycS0+ZGV2aWNlKTsKKwlzdHJ1Y3QgaXBhdGhfcndxICp3cTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKIAlmb3IgKDsgd3I7IHdyID0gd3ItPm5leHQpIHsKIAkJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKIAkJdTMyIG5leHQ7Ci0JCWludCBpLCBqOworCQlpbnQgaTsKIAotCQlpZiAod3ItPm51bV9zZ2UgPiBzcnEtPnJxLm1heF9zZ2UpIHsKKwkJaWYgKCh1bnNpZ25lZCkgd3ItPm51bV9zZ2UgPiBzcnEtPnJxLm1heF9zZ2UpIHsKIAkJCSpiYWRfd3IgPSB3cjsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGJhaWw7CiAJCX0KIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7Ci0JCW5leHQgPSBzcnEtPnJxLmhlYWQgKyAxOworCQl3cSA9IHNycS0+cnEud3E7CisJCW5leHQgPSB3cS0+aGVhZCArIDE7CiAJCWlmIChuZXh0ID49IHNycS0+cnEuc2l6ZSkKIAkJCW5leHQgPSAwOwotCQlpZiAobmV4dCA9PSBzcnEtPnJxLnRhaWwpIHsKKwkJaWYgKG5leHQgPT0gd3EtPnRhaWwpIHsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOwogCQkJKmJhZF93ciA9IHdyOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCi0JCXdxZSA9IGdldF9yd3FlX3B0cigmc3JxLT5ycSwgc3JxLT5ycS5oZWFkKTsKKwkJd3FlID0gZ2V0X3J3cWVfcHRyKCZzcnEtPnJxLCB3cS0+aGVhZCk7CiAJCXdxZS0+d3JfaWQgPSB3ci0+d3JfaWQ7Ci0JCXdxZS0+c2dfbGlzdFswXS5tciA9IE5VTEw7Ci0JCXdxZS0+c2dfbGlzdFswXS52YWRkciA9IE5VTEw7Ci0JCXdxZS0+c2dfbGlzdFswXS5sZW5ndGggPSAwOwotCQl3cWUtPnNnX2xpc3RbMF0uc2dlX2xlbmd0aCA9IDA7Ci0JCXdxZS0+bGVuZ3RoID0gMDsKLQkJZm9yIChpID0gMCwgaiA9IDA7IGkgPCB3ci0+bnVtX3NnZTsgaSsrKSB7Ci0JCQkvKiBDaGVjayBMS0VZICovCi0JCQlpZiAodG9faXBkKHNycS0+aWJzcnEucGQpLT51c2VyICYmCi0JCQkgICAgd3ItPnNnX2xpc3RbaV0ubGtleSA9PSAwKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLAotCQkJCQkJICAgICAgIGZsYWdzKTsKLQkJCQkqYmFkX3dyID0gd3I7Ci0JCQkJcmV0ID0gLUVJTlZBTDsKLQkJCQlnb3RvIGJhaWw7Ci0JCQl9Ci0JCQlpZiAod3ItPnNnX2xpc3RbaV0ubGVuZ3RoID09IDApCi0JCQkJY29udGludWU7Ci0JCQlpZiAoIWlwYXRoX2xrZXlfb2soJmRldi0+bGtfdGFibGUsCi0JCQkJCSAgICZ3cWUtPnNnX2xpc3Rbal0sCi0JCQkJCSAgICZ3ci0+c2dfbGlzdFtpXSwKLQkJCQkJICAgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFKSkgewotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywKLQkJCQkJCSAgICAgICBmbGFncyk7Ci0JCQkJKmJhZF93ciA9IHdyOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBiYWlsOwotCQkJfQotCQkJd3FlLT5sZW5ndGggKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOwotCQkJaisrOwotCQl9Ci0JCXdxZS0+bnVtX3NnZSA9IGo7Ci0JCXNycS0+cnEuaGVhZCA9IG5leHQ7CisJCXdxZS0+bnVtX3NnZSA9IHdyLT5udW1fc2dlOworCQlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7IGkrKykKKwkJCXdxZS0+c2dfbGlzdFtpXSA9IHdyLT5zZ19saXN0W2ldOworCQl3cS0+aGVhZCA9IG5leHQ7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOwogCX0KIAlyZXQgPSAwOwpAQCAtMTMzLDUzICsxMDYsOTUgQEAKIAogCWlmIChkZXYtPm5fc3Jxc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X3NycXMpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKHNycV9pbml0X2F0dHItPmF0dHIubWF4X3dyID09IDApIHsKIAkJcmV0ID0gRVJSX1BUUigtRUlOVkFMKTsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCiAJaWYgKChzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF9zZ2UgPiBpYl9pcGF0aF9tYXhfc3JxX3NnZXMpIHx8CiAJICAgIChzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF93ciA+IGliX2lwYXRoX21heF9zcnFfd3JzKSkgewogCQlyZXQgPSBFUlJfUFRSKC1FSU5WQUwpOwotCQlnb3RvIGJhaWw7CisJCWdvdG8gZG9uZTsKIAl9CiAKIAlzcnEgPSBrbWFsbG9jKHNpemVvZigqc3JxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcnEpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBiYWlsOworCQlnb3RvIGRvbmU7CiAJfQogCiAJLyoKIAkgKiBOZWVkIHRvIHVzZSB2bWFsbG9jKCkgaWYgd2Ugd2FudCB0byBzdXBwb3J0IGxhcmdlICNzIG9mIGVudHJpZXMuCiAJICovCiAJc3JxLT5ycS5zaXplID0gc3JxX2luaXRfYXR0ci0+YXR0ci5tYXhfd3IgKyAxOwotCXN6ID0gc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpICogc3JxX2luaXRfYXR0ci0+YXR0ci5tYXhfc2dlICsKKwlzcnEtPnJxLm1heF9zZ2UgPSBzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF9zZ2U7CisJc3ogPSBzaXplb2Yoc3RydWN0IGliX3NnZSkgKiBzcnEtPnJxLm1heF9zZ2UgKwogCQlzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpOwotCXNycS0+cnEud3EgPSB2bWFsbG9jKHNycS0+cnEuc2l6ZSAqIHN6KTsKKwlzcnEtPnJxLndxID0gdm1hbGxvY191c2VyKHNpemVvZihzdHJ1Y3QgaXBhdGhfcndxKSArIHNycS0+cnEuc2l6ZSAqIHN6KTsKIAlpZiAoIXNycS0+cnEud3EpIHsKLQkJa2ZyZWUoc3JxKTsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBiYWlsOworCQlnb3RvIGJhaWxfc3JxOwogCX0KIAogCS8qCisJICogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBSV1EgYXMgdGhlIG9mZnNldCB0byBtbWFwLgorCSAqIFNlZSBpcGF0aF9tbWFwKCkgZm9yIGRldGFpbHMuCisJICovCisJaWYgKHVkYXRhICYmIHVkYXRhLT5vdXRsZW4gPj0gc2l6ZW9mKF9fdTY0KSkgeworCQlzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvICppcDsKKwkJX191NjQgb2Zmc2V0ID0gKF9fdTY0KSBzcnEtPnJxLndxOworCQlpbnQgZXJyOworCisJCWVyciA9IGliX2NvcHlfdG9fdWRhdGEodWRhdGEsICZvZmZzZXQsIHNpemVvZihvZmZzZXQpKTsKKwkJaWYgKGVycikgeworCQkJcmV0ID0gRVJSX1BUUihlcnIpOworCQkJZ290byBiYWlsX3dxOworCQl9CisKKwkJLyogQWxsb2NhdGUgaW5mbyBmb3IgaXBhdGhfbW1hcCgpLiAqLworCQlpcCA9IGttYWxsb2Moc2l6ZW9mKCppcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWlwKSB7CisJCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOworCQkJZ290byBiYWlsX3dxOworCQl9CisJCXNycS0+aXAgPSBpcDsKKwkJaXAtPmNvbnRleHQgPSBpYnBkLT51b2JqZWN0LT5jb250ZXh0OworCQlpcC0+b2JqID0gc3JxLT5ycS53cTsKKwkJa3JlZl9pbml0KCZpcC0+cmVmKTsKKwkJaXAtPm1tYXBfY250ID0gMDsKKwkJaXAtPnNpemUgPSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3QgaXBhdGhfcndxKSArCisJCQkJICAgICAgc3JxLT5ycS5zaXplICogc3opOworCQlzcGluX2xvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCWlwLT5uZXh0ID0gZGV2LT5wZW5kaW5nX21tYXBzOworCQlkZXYtPnBlbmRpbmdfbW1hcHMgPSBpcDsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJfSBlbHNlCisJCXNycS0+aXAgPSBOVUxMOworCisJLyoKIAkgKiBpYl9jcmVhdGVfc3JxKCkgd2lsbCBpbml0aWFsaXplIHNycS0+aWJzcnEuCiAJICovCiAJc3Bpbl9sb2NrX2luaXQoJnNycS0+cnEubG9jayk7Ci0Jc3JxLT5ycS5oZWFkID0gMDsKLQlzcnEtPnJxLnRhaWwgPSAwOworCXNycS0+cnEud3EtPmhlYWQgPSAwOworCXNycS0+cnEud3EtPnRhaWwgPSAwOwogCXNycS0+cnEubWF4X3NnZSA9IHNycV9pbml0X2F0dHItPmF0dHIubWF4X3NnZTsKIAlzcnEtPmxpbWl0ID0gc3JxX2luaXRfYXR0ci0+YXR0ci5zcnFfbGltaXQ7CiAKLQlyZXQgPSAmc3JxLT5pYnNycTsKLQogCWRldi0+bl9zcnFzX2FsbG9jYXRlZCsrOwogCi1iYWlsOgorCXJldCA9ICZzcnEtPmlic3JxOworCWdvdG8gZG9uZTsKKworYmFpbF93cToKKwl2ZnJlZShzcnEtPnJxLndxKTsKKworYmFpbF9zcnE6CisJa2ZyZWUoc3JxKTsKKworZG9uZToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODgsODMgKzIwMywxMzAgQEAKICAqIEBpYnNycTogdGhlIFNSUSB0byBtb2RpZnkKICAqIEBhdHRyOiB0aGUgbmV3IGF0dHJpYnV0ZXMgb2YgdGhlIFNSUQogICogQGF0dHJfbWFzazogaW5kaWNhdGVzIHdoaWNoIGF0dHJpYnV0ZXMgdG8gbW9kaWZ5CisgKiBAdWRhdGE6IHVzZXIgZGF0YSBmb3IgaXBhdGh2ZXJicy5zbwogICovCiBpbnQgaXBhdGhfbW9kaWZ5X3NycShzdHJ1Y3QgaWJfc3JxICppYnNycSwgc3RydWN0IGliX3NycV9hdHRyICphdHRyLAotCQkgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2spCisJCSAgICAgZW51bSBpYl9zcnFfYXR0cl9tYXNrIGF0dHJfbWFzaywKKwkJICAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewogCXN0cnVjdCBpcGF0aF9zcnEgKnNycSA9IHRvX2lzcnEoaWJzcnEpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCWlmIChhdHRyX21hc2sgJiBJQl9TUlFfTUFYX1dSKQotCQlpZiAoKGF0dHItPm1heF93ciA+IGliX2lwYXRoX21heF9zcnFfd3JzKSB8fAotCQkgICAgKGF0dHItPm1heF9zZ2UgPiBzcnEtPnJxLm1heF9zZ2UpKSB7Ci0JCQlyZXQgPSAtRUlOVkFMOwotCQkJZ290byBiYWlsOwotCQl9Ci0KLQlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX0xJTUlUKQotCQlpZiAoYXR0ci0+c3JxX2xpbWl0ID49IHNycS0+cnEuc2l6ZSkgewotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gYmFpbDsKLQkJfQorCWludCByZXQgPSAwOwogCiAJaWYgKGF0dHJfbWFzayAmIElCX1NSUV9NQVhfV1IpIHsKLQkJc3RydWN0IGlwYXRoX3J3cWUgKndxLCAqcDsKLQkJdTMyIHN6LCBzaXplLCBuOworCQlzdHJ1Y3QgaXBhdGhfcndxICpvd3E7CisJCXN0cnVjdCBpcGF0aF9yd3EgKndxOworCQlzdHJ1Y3QgaXBhdGhfcndxZSAqcDsKKwkJdTMyIHN6LCBzaXplLCBuLCBoZWFkLCB0YWlsOworCisJCS8qIENoZWNrIHRoYXQgdGhlIHJlcXVlc3RlZCBzaXplcyBhcmUgYmVsb3cgdGhlIGxpbWl0cy4gKi8KKwkJaWYgKChhdHRyLT5tYXhfd3IgPiBpYl9pcGF0aF9tYXhfc3JxX3dycykgfHwKKwkJICAgICgoYXR0cl9tYXNrICYgSUJfU1JRX0xJTUlUKSA/CisJCSAgICAgYXR0ci0+c3JxX2xpbWl0IDogc3JxLT5saW1pdCkgPiBhdHRyLT5tYXhfd3IpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KIAogCQlzeiA9IHNpemVvZihzdHJ1Y3QgaXBhdGhfcndxZSkgKwotCQkJYXR0ci0+bWF4X3NnZSAqIHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKTsKKwkJCXNycS0+cnEubWF4X3NnZSAqIHNpemVvZihzdHJ1Y3QgaWJfc2dlKTsKIAkJc2l6ZSA9IGF0dHItPm1heF93ciArIDE7Ci0JCXdxID0gdm1hbGxvYyhzaXplICogc3opOworCQl3cSA9IHZtYWxsb2NfdXNlcihzaXplb2Yoc3RydWN0IGlwYXRoX3J3cSkgKyBzaXplICogc3opOwogCQlpZiAoIXdxKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBiYWlsOwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOwotCQlpZiAoc3JxLT5ycS5oZWFkIDwgc3JxLT5ycS50YWlsKQotCQkJbiA9IHNycS0+cnEuc2l6ZSArIHNycS0+cnEuaGVhZCAtIHNycS0+cnEudGFpbDsKKwkJLyoKKwkJICogUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSBSV1EgYXMgdGhlIG9mZnNldCB0byBtbWFwLgorCQkgKiBTZWUgaXBhdGhfbW1hcCgpIGZvciBkZXRhaWxzLgorCQkgKi8KKwkJaWYgKHVkYXRhICYmIHVkYXRhLT5pbmxlbiA+PSBzaXplb2YoX191NjQpKSB7CisJCQlfX3U2NCBvZmZzZXRfYWRkcjsKKwkJCV9fdTY0IG9mZnNldCA9IChfX3U2NCkgd3E7CisKKwkJCXJldCA9IGliX2NvcHlfZnJvbV91ZGF0YSgmb2Zmc2V0X2FkZHIsIHVkYXRhLAorCQkJCQkJIHNpemVvZihvZmZzZXRfYWRkcikpOworCQkJaWYgKHJldCkgeworCQkJCXZmcmVlKHdxKTsKKwkJCQlnb3RvIGJhaWw7CisJCQl9CisJCQl1ZGF0YS0+b3V0YnVmID0gKHZvaWQgX191c2VyICopIG9mZnNldF9hZGRyOworCQkJcmV0ID0gaWJfY29weV90b191ZGF0YSh1ZGF0YSwgJm9mZnNldCwKKwkJCQkJICAgICAgIHNpemVvZihvZmZzZXQpKTsKKwkJCWlmIChyZXQpIHsKKwkJCQl2ZnJlZSh3cSk7CisJCQkJZ290byBiYWlsOworCQkJfQorCQl9CisKKwkJc3Bpbl9sb2NrX2lycSgmc3JxLT5ycS5sb2NrKTsKKwkJLyoKKwkJICogdmFsaWRhdGUgaGVhZCBwb2ludGVyIHZhbHVlIGFuZCBjb21wdXRlCisJCSAqIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIFdRRXMuCisJCSAqLworCQlvd3EgPSBzcnEtPnJxLndxOworCQloZWFkID0gb3dxLT5oZWFkOworCQlpZiAoaGVhZCA+PSBzcnEtPnJxLnNpemUpCisJCQloZWFkID0gMDsKKwkJdGFpbCA9IG93cS0+dGFpbDsKKwkJaWYgKHRhaWwgPj0gc3JxLT5ycS5zaXplKQorCQkJdGFpbCA9IDA7CisJCW4gPSBoZWFkOworCQlpZiAobiA8IHRhaWwpCisJCQluICs9IHNycS0+cnEuc2l6ZSAtIHRhaWw7CiAJCWVsc2UKLQkJCW4gPSBzcnEtPnJxLmhlYWQgLSBzcnEtPnJxLnRhaWw7Ci0JCWlmIChzaXplIDw9IG4gfHwgc2l6ZSA8PSBzcnEtPmxpbWl0KSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKKwkJCW4gLT0gdGFpbDsKKwkJaWYgKHNpemUgPD0gbikgeworCQkJc3Bpbl91bmxvY2tfaXJxKCZzcnEtPnJxLmxvY2spOwogCQkJdmZyZWUod3EpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCQluID0gMDsKLQkJcCA9IHdxOwotCQl3aGlsZSAoc3JxLT5ycS50YWlsICE9IHNycS0+cnEuaGVhZCkgeworCQlwID0gd3EtPndxOworCQl3aGlsZSAodGFpbCAhPSBoZWFkKSB7CiAJCQlzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlOwogCQkJaW50IGk7CiAKLQkJCXdxZSA9IGdldF9yd3FlX3B0cigmc3JxLT5ycSwgc3JxLT5ycS50YWlsKTsKKwkJCXdxZSA9IGdldF9yd3FlX3B0cigmc3JxLT5ycSwgdGFpbCk7CiAJCQlwLT53cl9pZCA9IHdxZS0+d3JfaWQ7Ci0JCQlwLT5sZW5ndGggPSB3cWUtPmxlbmd0aDsKIAkJCXAtPm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7CiAJCQlmb3IgKGkgPSAwOyBpIDwgd3FlLT5udW1fc2dlOyBpKyspCiAJCQkJcC0+c2dfbGlzdFtpXSA9IHdxZS0+c2dfbGlzdFtpXTsKIAkJCW4rKzsKIAkJCXAgPSAoc3RydWN0IGlwYXRoX3J3cWUgKikoKGNoYXIgKikgcCArIHN6KTsKLQkJCWlmICgrK3NycS0+cnEudGFpbCA+PSBzcnEtPnJxLnNpemUpCi0JCQkJc3JxLT5ycS50YWlsID0gMDsKKwkJCWlmICgrK3RhaWwgPj0gc3JxLT5ycS5zaXplKQorCQkJCXRhaWwgPSAwOwogCQl9Ci0JCXZmcmVlKHNycS0+cnEud3EpOwogCQlzcnEtPnJxLndxID0gd3E7CiAJCXNycS0+cnEuc2l6ZSA9IHNpemU7Ci0JCXNycS0+cnEuaGVhZCA9IG47Ci0JCXNycS0+cnEudGFpbCA9IDA7Ci0JCXNycS0+cnEubWF4X3NnZSA9IGF0dHItPm1heF9zZ2U7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNycS0+cnEubG9jaywgZmxhZ3MpOwotCX0KKwkJd3EtPmhlYWQgPSBuOworCQl3cS0+dGFpbCA9IDA7CisJCWlmIChhdHRyX21hc2sgJiBJQl9TUlFfTElNSVQpCisJCQlzcnEtPmxpbWl0ID0gYXR0ci0+c3JxX2xpbWl0OworCQlzcGluX3VubG9ja19pcnEoJnNycS0+cnEubG9jayk7CiAKLQlpZiAoYXR0cl9tYXNrICYgSUJfU1JRX0xJTUlUKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzcnEtPnJxLmxvY2ssIGZsYWdzKTsKLQkJc3JxLT5saW1pdCA9IGF0dHItPnNycV9saW1pdDsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3JxLT5ycS5sb2NrLCBmbGFncyk7CisJCXZmcmVlKG93cSk7CisKKwkJaWYgKHNycS0+aXApIHsKKwkJCXN0cnVjdCBpcGF0aF9tbWFwX2luZm8gKmlwID0gc3JxLT5pcDsKKwkJCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihzcnEtPmlic3JxLmRldmljZSk7CisKKwkJCWlwLT5vYmogPSB3cTsKKwkJCWlwLT5zaXplID0gUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IGlwYXRoX3J3cSkgKworCQkJCQkgICAgICBzaXplICogc3opOworCQkJc3Bpbl9sb2NrX2lycSgmZGV2LT5wZW5kaW5nX2xvY2spOworCQkJaXAtPm5leHQgPSBkZXYtPnBlbmRpbmdfbW1hcHM7CisJCQlkZXYtPnBlbmRpbmdfbW1hcHMgPSBpcDsKKwkJCXNwaW5fdW5sb2NrX2lycSgmZGV2LT5wZW5kaW5nX2xvY2spOworCQl9CisJfSBlbHNlIGlmIChhdHRyX21hc2sgJiBJQl9TUlFfTElNSVQpIHsKKwkJc3Bpbl9sb2NrX2lycSgmc3JxLT5ycS5sb2NrKTsKKwkJaWYgKGF0dHItPnNycV9saW1pdCA+PSBzcnEtPnJxLnNpemUpCisJCQlyZXQgPSAtRUlOVkFMOworCQllbHNlCisJCQlzcnEtPmxpbWl0ID0gYXR0ci0+c3JxX2xpbWl0OworCQlzcGluX3VubG9ja19pcnEoJnNycS0+cnEubG9jayk7CiAJfQotCXJldCA9IDA7CiAKIGJhaWw6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zdGF0cy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKaW5kZXggNzAzNTFiNy4uMzBhODI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N0YXRzLmMKQEAgLTI3MSwzMyArMjcxLDYgQEAKIAkJfQogCX0KIAotCWlmIChkZC0+aXBhdGhfbm9zbWFfYnVmcykgewotCQlkZC0+aXBhdGhfbm9zbWFfc2VjcyArPSA1OwotCQlpZiAoZGQtPmlwYXRoX25vc21hX3NlY3MgPj0gMzApIHsKLQkJCWlwYXRoX2NkYmcoU01BLCAiTm8gU01BIGJ1ZnMgYXZhaWwgJXUgc2Vjb25kczsgIgotCQkJCSAgICJjYW5jZWxsaW5nIHBlbmRpbmcgc2VuZHNcbiIsCi0JCQkJICAgZGQtPmlwYXRoX25vc21hX3NlY3MpOwotCQkJLyoKLQkJCSAqIGlzc3VlIGFuIGFib3J0IGFzIHdlbGwsIGluIGNhc2Ugd2UgaGF2ZSBhIHBhY2tldAotCQkJICogc3R1Y2sgaW4gbGF1bmNoIGZpZm8uICBUaGlzIGNvdWxkIGNvcnJ1cHQgYW4KLQkJCSAqIG91dGdvaW5nIHVzZXIgcGFja2V0IGluIHRoZSB3b3JzdCBjYXNlLAotCQkJICogYnV0IHRoaXMgaXMgYSBwcmV0dHkgY2F0YXN0cm9waGljLCBhbnl3YXkuCi0JCQkgKi8KLQkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGN0cmwsCi0JCQkJCSBJTkZJTklQQVRIX1NfQUJPUlQpOwotCQkJaXBhdGhfZGlzYXJtX3Bpb2J1ZnMoZGQsIGRkLT5pcGF0aF9sYXN0cG9ydF9waW9idWYsCi0JCQkJCSAgICAgZGQtPmlwYXRoX3Bpb2JjbnQyayArCi0JCQkJCSAgICAgZGQtPmlwYXRoX3Bpb2JjbnQ0ayAtCi0JCQkJCSAgICAgZGQtPmlwYXRoX2xhc3Rwb3J0X3Bpb2J1Zik7Ci0JCQkvKiBzdGFydCBhZ2FpbiwgaWYgbmVjZXNzYXJ5ICovCi0JCQlkZC0+aXBhdGhfbm9zbWFfc2VjcyA9IDA7Ci0JCX0gZWxzZQotCQkJaXBhdGhfY2RiZyhTTUEsICJObyBTTUEgYnVmcyBhdmFpbCAldSB0cmllcywgIgotCQkJCSAgICJhZnRlciAldSBzZWNvbmRzXG4iLAotCQkJCSAgIGRkLT5pcGF0aF9ub3NtYV9idWZzLAotCQkJCSAgIGRkLT5pcGF0aF9ub3NtYV9zZWNzKTsKLQl9Ci0KIGRvbmU6CiAJbW9kX3RpbWVyKCZkZC0+aXBhdGhfc3RhdHNfdGltZXIsIGppZmZpZXMgKyBIWiAqIDUpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3N5c2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYwppbmRleCBiOTg4MjFkLi5lMjk5MTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCi0jaW5jbHVkZSAiaXBhdGhfbGF5ZXIuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAogLyoqCkBAIC03Niw3ICs3NSw3IEBACiBzdGF0aWMgc3NpemVfdCBzaG93X3ZlcnNpb24oc3RydWN0IGRldmljZV9kcml2ZXIgKmRldiwgY2hhciAqYnVmKQogewogCS8qIFRoZSBzdHJpbmcgcHJpbnRlZCBoZXJlIGlzIGFscmVhZHkgbmV3bGluZS10ZXJtaW5hdGVkLiAqLwotCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcyIsIGlwYXRoX2NvcmVfdmVyc2lvbik7CisJcmV0dXJuIHNjbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzIiwgaWJfaXBhdGhfdmVyc2lvbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbnVtX3VuaXRzKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkZXYsIGNoYXIgKmJ1ZikKQEAgLTEwOCw4ICsxMDcsOCBAQAogCSJJbml0dGVkIiwKIAkiRGlzYWJsZWQiLAogCSJBZG1pbl9EaXNhYmxlZCIsCi0JIk9JQl9TTUEiLAotCSJTTUEiLAorCSIiLCAvKiBUaGlzIHVzZWQgdG8gYmUgdGhlIG9sZCAiT0lCX1NNQSIgc3RhdHVzLiAqLworCSIiLCAvKiBUaGlzIHVzZWQgdG8gYmUgdGhlIG9sZCAiU01BIiBzdGF0dXMuICovCiAJIlByZXNlbnQiLAogCSJJQl9saW5rX3VwIiwKIAkiSUJfY29uZmlndXJlZCIsCkBAIC0yMjcsNyArMjI2LDYgQEAKIAl1bml0ID0gZGQtPmlwYXRoX3VuaXQ7CiAKIAlkZC0+aXBhdGhfbWxpZCA9IG1saWQ7Ci0JaXBhdGhfbGF5ZXJfaW50cihkZCwgSVBBVEhfTEFZRVJfSU5UX0JDQVNUKTsKIAogCWdvdG8gYmFpbDsKIGludmFsaWQ6CkBAIC00NjcsNyArNDY1LDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBpbnZhbGlkOwogCi0JciA9IGlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGQsIHN0YXRlKTsKKwlyID0gaXBhdGhfc2V0X2xpbmtzdGF0ZShkZCwgc3RhdGUpOwogCWlmIChyIDwgMCkgewogCQlyZXQgPSByOwogCQlnb3RvIGJhaWw7CkBAIC01MDIsNyArNTAwLDcgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBpbnZhbGlkOwogCi0JciA9IGlwYXRoX2xheWVyX3NldF9tdHUoZGQsIG10dSk7CisJciA9IGlwYXRoX3NldF9tdHUoZGQsIG10dSk7CiAJaWYgKHIgPCAwKQogCQlyZXQgPSByOwogCkBAIC01NjMsNiArNTYxLDMzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3Qgc3RvcmVfcnhfcG9sX2ludihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICBjb25zdCBjaGFyICpidWYsCisJCQkgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0LCByOworCXUxNiB2YWw7CisKKwlyZXQgPSBpcGF0aF9wYXJzZV91c2hvcnQoYnVmLCAmdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBpbnZhbGlkOworCisJciA9IGlwYXRoX3NldF9yeF9wb2xfaW52KGRkLCB2YWwpOworCWlmIChyIDwgMCkgeworCQlyZXQgPSByOworCQlnb3RvIGJhaWw7CisJfQorCisJZ290byBiYWlsOworaW52YWxpZDoKKwlpcGF0aF9kZXZfZXJyKGRkLCAiYXR0ZW1wdCB0byBzZXQgaW52YWxpZCBSeCBQb2xhcml0eSBpbnZlcnRcbiIpOworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCisKIHN0YXRpYyBEUklWRVJfQVRUUihudW1fdW5pdHMsIFNfSVJVR08sIHNob3dfbnVtX3VuaXRzLCBOVUxMKTsKIHN0YXRpYyBEUklWRVJfQVRUUih2ZXJzaW9uLCBTX0lSVUdPLCBzaG93X3ZlcnNpb24sIE5VTEwpOwogCkBAIC01ODksNiArNjE0LDcgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihzdGF0dXNfc3RyLCBTX0lSVUdPLCBzaG93X3N0YXR1c19zdHIsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGJvYXJkdmVyc2lvbiwgU19JUlVHTywgc2hvd19ib2FyZHZlcnNpb24sIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHVuaXQsIFNfSVJVR08sIHNob3dfdW5pdCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIocnhfcG9sX2ludiwgU19JV1VTUiwgTlVMTCwgc3RvcmVfcnhfcG9sX2ludik7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpkZXZfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9ndWlkLmF0dHIsCkBAIC02MDMsNiArNjI5LDcgQEAKIAkmZGV2X2F0dHJfYm9hcmR2ZXJzaW9uLmF0dHIsCiAJJmRldl9hdHRyX3VuaXQuYXR0ciwKIAkmZGV2X2F0dHJfZW5hYmxlZC5hdHRyLAorCSZkZXZfYXR0cl9yeF9wb2xfaW52LmF0dHIsCiAJTlVMTAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYwppbmRleCBjMzNhYmVhLi4wZmQzY2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWMuYwpAQCAtMzIsNyArMzIsNyBAQAogICovCiAKICNpbmNsdWRlICJpcGF0aF92ZXJicy5oIgotI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgorI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogCiAvKiBjdXQgZG93biByaWRpY3Vsb3VzbHkgbG9uZyBJQiBtYWNybyBuYW1lcyAqLwogI2RlZmluZSBPUCh4KSBJQl9PUENPREVfVUNfIyN4CkBAIC0yNjEsOCArMjYxLDcgQEAKIAkJICogc2l6ZSB0byA1NiBieXRlcyBzbyB0aGUgbGFzdCA0IGJ5dGVzIG9mCiAJCSAqIHRoZSBCVEggaGVhZGVyIChQU04pIGlzIGluIHRoZSBkYXRhIGJ1ZmZlci4KIAkJICovCi0JCWhlYWRlcl9pbl9kYXRhID0KLQkJCWlwYXRoX2xheWVyX2dldF9yY3ZoZHJlbnRzaXplKGRldi0+ZGQpID09IDE2OworCQloZWFkZXJfaW5fZGF0YSA9IGRldi0+ZGQtPmlwYXRoX3JjdmhkcmVudHNpemUgPT0gMTY7CiAJCWlmIChoZWFkZXJfaW5fZGF0YSkgewogCQkJcHNuID0gYmUzMl90b19jcHUoKChfX2JlMzIgKikgZGF0YSlbMF0pOwogCQkJZGF0YSArPSBzaXplb2YoX19iZTMyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91ZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKaW5kZXggMzQ2NjEyOS4uNjk5MWQxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMKQEAgLTM0LDcgKzM0LDU0IEBACiAjaW5jbHVkZSA8cmRtYS9pYl9zbWkuaD4KIAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCi0jaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCisjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCisKK3N0YXRpYyBpbnQgaW5pdF9zZ2Uoc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGlwYXRoX3J3cWUgKndxZSwKKwkJICAgIHUzMiAqbGVuZ3RocCwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MpCit7CisJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CisJaW50IHVzZXIgPSB0b19pcGQocXAtPmlicXAucGQpLT51c2VyOworCWludCBpLCBqLCByZXQ7CisJc3RydWN0IGliX3djIHdjOworCisJKmxlbmd0aHAgPSAwOworCWZvciAoaSA9IGogPSAwOyBpIDwgd3FlLT5udW1fc2dlOyBpKyspIHsKKwkJaWYgKHdxZS0+c2dfbGlzdFtpXS5sZW5ndGggPT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBDaGVjayBMS0VZICovCisJCWlmICgodXNlciAmJiB3cWUtPnNnX2xpc3RbaV0ubGtleSA9PSAwKSB8fAorCQkgICAgIWlwYXRoX2xrZXlfb2soJmRldi0+bGtfdGFibGUsCisJCQkJICAgaiA/ICZzcy0+c2dfbGlzdFtqIC0gMV0gOiAmc3MtPnNnZSwKKwkJCQkgICAmd3FlLT5zZ19saXN0W2ldLCBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKQorCQkJZ290byBiYWRfbGtleTsKKwkJKmxlbmd0aHAgKz0gd3FlLT5zZ19saXN0W2ldLmxlbmd0aDsKKwkJaisrOworCX0KKwlzcy0+bnVtX3NnZSA9IGo7CisJcmV0ID0gMTsKKwlnb3RvIGJhaWw7CisKK2JhZF9sa2V5OgorCXdjLndyX2lkID0gd3FlLT53cl9pZDsKKwl3Yy5zdGF0dXMgPSBJQl9XQ19MT0NfUFJPVF9FUlI7CisJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKKwl3Yy52ZW5kb3JfZXJyID0gMDsKKwl3Yy5ieXRlX2xlbiA9IDA7CisJd2MuaW1tX2RhdGEgPSAwOworCXdjLnFwX251bSA9IHFwLT5pYnFwLnFwX251bTsKKwl3Yy5zcmNfcXAgPSAwOworCXdjLndjX2ZsYWdzID0gMDsKKwl3Yy5wa2V5X2luZGV4ID0gMDsKKwl3Yy5zbGlkID0gMDsKKwl3Yy5zbCA9IDA7CisJd2MuZGxpZF9wYXRoX2JpdHMgPSAwOworCXdjLnBvcnRfbnVtID0gMDsKKwkvKiBTaWduYWwgc29saWNpdGVkIGNvbXBsZXRpb24gZXZlbnQuICovCisJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCAmd2MsIDEpOworCXJldCA9IDA7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CiAKIC8qKgogICogaXBhdGhfdWRfbG9vcGJhY2sgLSBoYW5kbGUgc2VuZCBvbiBsb29wYmFjayBRUHMKQEAgLTQ2LDYgKzkzLDggQEAKICAqCiAgKiBUaGlzIGlzIGNhbGxlZCBmcm9tIGlwYXRoX3Bvc3RfdWRfc2VuZCgpIHRvIGZvcndhcmQgYSBXUUUgYWRkcmVzc2VkCiAgKiB0byB0aGUgc2FtZSBIQ0EuCisgKiBOb3RlIHRoYXQgdGhlIHJlY2VpdmUgaW50ZXJydXB0IGhhbmRsZXIgbWF5IGJlIGNhbGxpbmcgaXBhdGhfdWRfcmN2KCkKKyAqIHdoaWxlIHRoaXMgaXMgYmVpbmcgY2FsbGVkLgogICovCiBzdGF0aWMgdm9pZCBpcGF0aF91ZF9sb29wYmFjayhzdHJ1Y3QgaXBhdGhfcXAgKnNxcCwKIAkJCSAgICAgIHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLApAQCAtNjAsNyArMTA5LDExIEBACiAJc3RydWN0IGlwYXRoX3NycSAqc3JxOwogCXN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgcnNnZTsKIAlzdHJ1Y3QgaXBhdGhfc2dlICpzZ2U7CisJc3RydWN0IGlwYXRoX3J3cSAqd3E7CiAJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKKwl2b2lkICgqaGFuZGxlcikoc3RydWN0IGliX2V2ZW50ICosIHZvaWQgKik7CisJdTMyIHRhaWw7CisJdTMyIHJsZW47CiAKIAlxcCA9IGlwYXRoX2xvb2t1cF9xcG4oJmRldi0+cXBfdGFibGUsIHdyLT53ci51ZC5yZW1vdGVfcXBuKTsKIAlpZiAoIXFwKQpAQCAtOTQsNiArMTQ3LDEzIEBACiAJCXdjLT5pbW1fZGF0YSA9IDA7CiAJfQogCisJaWYgKHdyLT5udW1fc2dlID4gMSkgeworCQlyc2dlLnNnX2xpc3QgPSBrbWFsbG9jKCh3ci0+bnVtX3NnZSAtIDEpICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBpcGF0aF9zZ2UpLAorCQkJCSAgICAgICBHRlBfQVRPTUlDKTsKKwl9IGVsc2UKKwkJcnNnZS5zZ19saXN0ID0gTlVMTDsKKwogCS8qCiAJICogR2V0IHRoZSBuZXh0IHdvcmsgcmVxdWVzdCBlbnRyeSB0byBmaW5kIHdoZXJlIHRvIHB1dCB0aGUgZGF0YS4KIAkgKiBOb3RlIHRoYXQgaXQgaXMgc2FmZSB0byBkcm9wIHRoZSBsb2NrIGFmdGVyIGNoYW5naW5nIHJxLT50YWlsCkBAIC0xMDEsMzcgKzE2MSw1MiBAQAogCSAqLwogCWlmIChxcC0+aWJxcC5zcnEpIHsKIAkJc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOworCQloYW5kbGVyID0gc3JxLT5pYnNycS5ldmVudF9oYW5kbGVyOwogCQlycSA9ICZzcnEtPnJxOwogCX0gZWxzZSB7CiAJCXNycSA9IE5VTEw7CisJCWhhbmRsZXIgPSBOVUxMOwogCQlycSA9ICZxcC0+cl9ycTsKIAl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQlpZiAocnEtPnRhaWwgPT0gcnEtPmhlYWQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQkJZGV2LT5uX3BrdF9kcm9wcysrOwotCQlnb3RvIGRvbmU7CisJd3EgPSBycS0+d3E7CisJdGFpbCA9IHdxLT50YWlsOworCXdoaWxlICgxKSB7CisJCWlmICh1bmxpa2VseSh0YWlsID09IHdxLT5oZWFkKSkgeworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwkJCWRldi0+bl9wa3RfZHJvcHMrKzsKKwkJCWdvdG8gYmFpbF9zZ2U7CisJCX0KKwkJd3FlID0gZ2V0X3J3cWVfcHRyKHJxLCB0YWlsKTsKKwkJaWYgKCsrdGFpbCA+PSBycS0+c2l6ZSkKKwkJCXRhaWwgPSAwOworCQlpZiAoaW5pdF9zZ2UocXAsIHdxZSwgJnJsZW4sICZyc2dlKSkKKwkJCWJyZWFrOworCQl3cS0+dGFpbCA9IHRhaWw7CiAJfQogCS8qIFNpbGVudGx5IGRyb3AgcGFja2V0cyB3aGljaCBhcmUgdG9vIGJpZy4gKi8KLQl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKLQlpZiAod2MtPmJ5dGVfbGVuID4gd3FlLT5sZW5ndGgpIHsKKwlpZiAod2MtPmJ5dGVfbGVuID4gcmxlbikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOwogCQlkZXYtPm5fcGt0X2Ryb3BzKys7Ci0JCWdvdG8gZG9uZTsKKwkJZ290byBiYWlsX3NnZTsKIAl9CisJd3EtPnRhaWwgPSB0YWlsOwogCXdjLT53cl9pZCA9IHdxZS0+d3JfaWQ7Ci0JcnNnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07Ci0JcnNnZS5zZ19saXN0ID0gd3FlLT5zZ19saXN0ICsgMTsKLQlyc2dlLm51bV9zZ2UgPSB3cWUtPm51bV9zZ2U7Ci0JaWYgKCsrcnEtPnRhaWwgPj0gcnEtPnNpemUpCi0JCXJxLT50YWlsID0gMDsKLQlpZiAoc3JxICYmIHNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcikgeworCWlmIChoYW5kbGVyKSB7CiAJCXUzMiBuOwogCi0JCWlmIChycS0+aGVhZCA8IHJxLT50YWlsKQotCQkJbiA9IHJxLT5zaXplICsgcnEtPmhlYWQgLSBycS0+dGFpbDsKKwkJLyoKKwkJICogdmFsaWRhdGUgaGVhZCBwb2ludGVyIHZhbHVlIGFuZCBjb21wdXRlCisJCSAqIHRoZSBudW1iZXIgb2YgcmVtYWluaW5nIFdRRXMuCisJCSAqLworCQluID0gd3EtPmhlYWQ7CisJCWlmIChuID49IHJxLT5zaXplKQorCQkJbiA9IDA7CisJCWlmIChuIDwgdGFpbCkKKwkJCW4gKz0gcnEtPnNpemUgLSB0YWlsOwogCQllbHNlCi0JCQluID0gcnEtPmhlYWQgLSBycS0+dGFpbDsKKwkJCW4gLT0gdGFpbDsKIAkJaWYgKG4gPCBzcnEtPmxpbWl0KSB7CiAJCQlzdHJ1Y3QgaWJfZXZlbnQgZXY7CiAKQEAgLTE0MCwxMiArMjE1LDEyIEBACiAJCQlldi5kZXZpY2UgPSBxcC0+aWJxcC5kZXZpY2U7CiAJCQlldi5lbGVtZW50LnNycSA9IHFwLT5pYnFwLnNycTsKIAkJCWV2LmV2ZW50ID0gSUJfRVZFTlRfU1JRX0xJTUlUX1JFQUNIRUQ7Ci0JCQlzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIoJmV2LAotCQkJCQkJIHNycS0+aWJzcnEuc3JxX2NvbnRleHQpOworCQkJaGFuZGxlcigmZXYsIHNycS0+aWJzcnEuc3JxX2NvbnRleHQpOwogCQl9IGVsc2UKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CiAJfSBlbHNlCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJxLT5sb2NrLCBmbGFncyk7CisKIAlhaF9hdHRyID0gJnRvX2lhaCh3ci0+d3IudWQuYWgpLT5hdHRyOwogCWlmIChhaF9hdHRyLT5haF9mbGFncyAmIElCX0FIX0dSSCkgewogCQlpcGF0aF9jb3B5X3NnZSgmcnNnZSwgJmFoX2F0dHItPmdyaCwgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpKTsKQEAgLTE4Niw3ICsyNjEsNyBAQAogCXdjLT5zcmNfcXAgPSBzcXAtPmlicXAucXBfbnVtOwogCS8qIFhYWCBkbyB3ZSBrbm93IHdoaWNoIHBrZXkgbWF0Y2hlZD8gT25seSBuZWVkZWQgZm9yIEdTSS4gKi8KIAl3Yy0+cGtleV9pbmRleCA9IDA7Ci0Jd2MtPnNsaWQgPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpIHwKKwl3Yy0+c2xpZCA9IGRldi0+ZGQtPmlwYXRoX2xpZCB8CiAJCShhaF9hdHRyLT5zcmNfcGF0aF9iaXRzICYKIAkJICgoMSA8PCAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmIDcpKSAtIDEpKTsKIAl3Yy0+c2wgPSBhaF9hdHRyLT5zbDsKQEAgLTE5Niw2ICsyNzEsOCBAQAogCWlwYXRoX2NxX2VudGVyKHRvX2ljcShxcC0+aWJxcC5yZWN2X2NxKSwgd2MsCiAJCSAgICAgICB3ci0+c2VuZF9mbGFncyAmIElCX1NFTkRfU09MSUNJVEVEKTsKIAorYmFpbF9zZ2U6CisJa2ZyZWUocnNnZS5zZ19saXN0KTsKIGRvbmU6CiAJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnFwLT5yZWZjb3VudCkpCiAJCXdha2VfdXAoJnFwLT53YWl0KTsKQEAgLTI3Niw3ICszNTMsNyBAQAogCQlzcy5udW1fc2dlKys7CiAJfQogCS8qIENoZWNrIGZvciBpbnZhbGlkIHBhY2tldCBzaXplLiAqLwotCWlmIChsZW4gPiBpcGF0aF9sYXllcl9nZXRfaWJtdHUoZGV2LT5kZCkpIHsKKwlpZiAobGVuID4gZGV2LT5kZC0+aXBhdGhfaWJtdHUpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBiYWlsOwogCX0KQEAgLTI5OCw3ICszNzUsNyBAQAogCQlkZXYtPm5fdW5pY2FzdF94bWl0Kys7CiAJCWxpZCA9IGFoX2F0dHItPmRsaWQgJgogCQkJfigoMSA8PCAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmIDcpKSAtIDEpOwotCQlpZiAodW5saWtlbHkobGlkID09IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7CisJCWlmICh1bmxpa2VseShsaWQgPT0gZGV2LT5kZC0+aXBhdGhfbGlkKSkgewogCQkJLyoKIAkJCSAqIFBhc3MgaW4gYW4gdW5pbml0aWFsaXplZCBpYl93YyB0byBzYXZlIHN0YWNrCiAJCQkgKiBzcGFjZS4KQEAgLTMyNyw3ICs0MDQsNyBAQAogCQlxcC0+c19oZHIudS5sLmdyaC5zZ2lkLmdsb2JhbC5zdWJuZXRfcHJlZml4ID0KIAkJCWRldi0+Z2lkX3ByZWZpeDsKIAkJcXAtPnNfaGRyLnUubC5ncmguc2dpZC5nbG9iYWwuaW50ZXJmYWNlX2lkID0KLQkJCWlwYXRoX2xheWVyX2dldF9ndWlkKGRldi0+ZGQpOworCQkJZGV2LT5kZC0+aXBhdGhfZ3VpZDsKIAkJcXAtPnNfaGRyLnUubC5ncmguZGdpZCA9IGFoX2F0dHItPmdyaC5kZ2lkOwogCQkvKgogCQkgKiBEb24ndCB3b3JyeSBhYm91dCBzZW5kaW5nIHRvIGxvY2FsbHkgYXR0YWNoZWQgbXVsdGljYXN0CkBAIC0zNTcsNyArNDM0LDcgQEAKIAlxcC0+c19oZHIubHJoWzBdID0gY3B1X3RvX2JlMTYobHJoMCk7CiAJcXAtPnNfaGRyLmxyaFsxXSA9IGNwdV90b19iZTE2KGFoX2F0dHItPmRsaWQpOwkvKiBERVNUIExJRCAqLwogCXFwLT5zX2hkci5scmhbMl0gPSBjcHVfdG9fYmUxNihod29yZHMgKyBud29yZHMgKyBTSVpFX09GX0NSQyk7Ci0JbGlkID0gaXBhdGhfbGF5ZXJfZ2V0X2xpZChkZXYtPmRkKTsKKwlsaWQgPSBkZXYtPmRkLT5pcGF0aF9saWQ7CiAJaWYgKGxpZCkgewogCQlsaWQgfD0gYWhfYXR0ci0+c3JjX3BhdGhfYml0cyAmCiAJCQkoKDEgPDwgKGRldi0+bWtleXByb3RfcmVzdl9sbWMgJiA3KSkgLSAxKTsKQEAgLTM2OCw3ICs0NDUsNyBAQAogCQlidGgwIHw9IDEgPDwgMjM7CiAJYnRoMCB8PSBleHRyYV9ieXRlcyA8PCAyMDsKIAlidGgwIHw9IHFwLT5pYnFwLnFwX3R5cGUgPT0gSUJfUVBUX1NNSSA/IElQQVRIX0RFRkFVTFRfUF9LRVkgOgotCQlpcGF0aF9sYXllcl9nZXRfcGtleShkZXYtPmRkLCBxcC0+c19wa2V5X2luZGV4KTsKKwkJaXBhdGhfZ2V0X3BrZXkoZGV2LT5kZCwgcXAtPnNfcGtleV9pbmRleCk7CiAJb2hkci0+YnRoWzBdID0gY3B1X3RvX2JlMzIoYnRoMCk7CiAJLyoKIAkgKiBVc2UgdGhlIG11bHRpY2FzdCBRUCBpZiB0aGUgZGVzdGluYXRpb24gTElEIGlzIGEgbXVsdGljYXN0IExJRC4KQEAgLTQzMywxMyArNTEwLDkgQEAKIAlpbnQgb3Bjb2RlOwogCXUzMiBoZHJzaXplOwogCXUzMiBwYWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CiAJdTMyIHFrZXk7CiAJdTMyIHNyY19xcDsKLQlzdHJ1Y3QgaXBhdGhfcnEgKnJxOwotCXN0cnVjdCBpcGF0aF9zcnEgKnNycTsKLQlzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlOwogCXUxNiBkbGlkOwogCWludCBoZWFkZXJfaW5fZGF0YTsKIApAQCAtNDU4LDggKzUzMSw3IEBACiAJCSAqIHRoZSBlYWdlciBoZWFkZXIgYnVmZmVyIHNpemUgdG8gNTYgYnl0ZXMgc28gdGhlIGxhc3QgMTIKIAkJICogYnl0ZXMgb2YgdGhlIElCIGhlYWRlciBpcyBpbiB0aGUgZGF0YSBidWZmZXIuCiAJCSAqLwotCQloZWFkZXJfaW5fZGF0YSA9Ci0JCQlpcGF0aF9sYXllcl9nZXRfcmN2aGRyZW50c2l6ZShkZXYtPmRkKSA9PSAxNjsKKwkJaGVhZGVyX2luX2RhdGEgPSBkZXYtPmRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplID09IDE2OwogCQlpZiAoaGVhZGVyX2luX2RhdGEpIHsKIAkJCXFrZXkgPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKSBkYXRhKVsxXSk7CiAJCQlzcmNfcXAgPSBiZTMyX3RvX2NwdSgoKF9fYmUzMiAqKSBkYXRhKVsyXSk7CkBAIC01NDcsMTkgKzYxOSwxMCBAQAogCiAJLyoKIAkgKiBHZXQgdGhlIG5leHQgd29yayByZXF1ZXN0IGVudHJ5IHRvIGZpbmQgd2hlcmUgdG8gcHV0IHRoZSBkYXRhLgotCSAqIE5vdGUgdGhhdCBpdCBpcyBzYWZlIHRvIGRyb3AgdGhlIGxvY2sgYWZ0ZXIgY2hhbmdpbmcgcnEtPnRhaWwKLQkgKiBzaW5jZSBpcGF0aF9wb3N0X3JlY2VpdmUoKSB3b24ndCBmaWxsIHRoZSBlbXB0eSBzbG90LgogCSAqLwotCWlmIChxcC0+aWJxcC5zcnEpIHsKLQkJc3JxID0gdG9faXNycShxcC0+aWJxcC5zcnEpOwotCQlycSA9ICZzcnEtPnJxOwotCX0gZWxzZSB7Ci0JCXNycSA9IE5VTEw7Ci0JCXJxID0gJnFwLT5yX3JxOwotCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQlpZiAocnEtPnRhaWwgPT0gcnEtPmhlYWQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKKwlpZiAocXAtPnJfcmV1c2Vfc2dlKQorCQlxcC0+cl9yZXVzZV9zZ2UgPSAwOworCWVsc2UgaWYgKCFpcGF0aF9nZXRfcndxZShxcCwgMCkpIHsKIAkJLyoKIAkJICogQ291bnQgVkwxNSBwYWNrZXRzIGRyb3BwZWQgZHVlIHRvIG5vIHJlY2VpdmUgYnVmZmVyLgogCQkgKiBPdGhlcndpc2UsIGNvdW50IHRoZW0gYXMgYnVmZmVyIG92ZXJydW5zIHNpbmNlIHVzdWFsbHksCkBAIC01NzMsMzkgKzYzNiwxMSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCS8qIFNpbGVudGx5IGRyb3AgcGFja2V0cyB3aGljaCBhcmUgdG9vIGJpZy4gKi8KLQl3cWUgPSBnZXRfcndxZV9wdHIocnEsIHJxLT50YWlsKTsKLQlpZiAod2MuYnl0ZV9sZW4gPiB3cWUtPmxlbmd0aCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCWlmICh3Yy5ieXRlX2xlbiA+IHFwLT5yX2xlbikgeworCQlxcC0+cl9yZXVzZV9zZ2UgPSAxOwogCQlkZXYtPm5fcGt0X2Ryb3BzKys7CiAJCWdvdG8gYmFpbDsKIAl9Ci0Jd2Mud3JfaWQgPSB3cWUtPndyX2lkOwotCXFwLT5yX3NnZS5zZ2UgPSB3cWUtPnNnX2xpc3RbMF07Ci0JcXAtPnJfc2dlLnNnX2xpc3QgPSB3cWUtPnNnX2xpc3QgKyAxOwotCXFwLT5yX3NnZS5udW1fc2dlID0gd3FlLT5udW1fc2dlOwotCWlmICgrK3JxLT50YWlsID49IHJxLT5zaXplKQotCQlycS0+dGFpbCA9IDA7Ci0JaWYgKHNycSAmJiBzcnEtPmlic3JxLmV2ZW50X2hhbmRsZXIpIHsKLQkJdTMyIG47Ci0KLQkJaWYgKHJxLT5oZWFkIDwgcnEtPnRhaWwpCi0JCQluID0gcnEtPnNpemUgKyBycS0+aGVhZCAtIHJxLT50YWlsOwotCQllbHNlCi0JCQluID0gcnEtPmhlYWQgLSBycS0+dGFpbDsKLQkJaWYgKG4gPCBzcnEtPmxpbWl0KSB7Ci0JCQlzdHJ1Y3QgaWJfZXZlbnQgZXY7Ci0KLQkJCXNycS0+bGltaXQgPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQkJCWV2LmRldmljZSA9IHFwLT5pYnFwLmRldmljZTsKLQkJCWV2LmVsZW1lbnQuc3JxID0gcXAtPmlicXAuc3JxOwotCQkJZXYuZXZlbnQgPSBJQl9FVkVOVF9TUlFfTElNSVRfUkVBQ0hFRDsKLQkJCXNycS0+aWJzcnEuZXZlbnRfaGFuZGxlcigmZXYsCi0JCQkJCQkgc3JxLT5pYnNycS5zcnFfY29udGV4dCk7Ci0JCX0gZWxzZQotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnEtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaGFzX2dyaCkgewogCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCAmaGRyLT51LmwuZ3JoLAogCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWJfZ3JoKSk7CkBAIC02MTQsNiArNjQ5LDcgQEAKIAkJaXBhdGhfc2tpcF9zZ2UoJnFwLT5yX3NnZSwgc2l6ZW9mKHN0cnVjdCBpYl9ncmgpKTsKIAlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBkYXRhLAogCQkgICAgICAgd2MuYnl0ZV9sZW4gLSBzaXplb2Yoc3RydWN0IGliX2dyaCkpOworCXdjLndyX2lkID0gcXAtPnJfd3JfaWQ7CiAJd2Muc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKIAl3Yy5vcGNvZGUgPSBJQl9XQ19SRUNWOwogCXdjLnZlbmRvcl9lcnIgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwppbmRleCBkNzBhOWI2Li5iODM4MWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtMzMsMTUgKzMzLDEzIEBACiAKICNpbmNsdWRlIDxyZG1hL2liX21hZC5oPgogI2luY2x1ZGUgPHJkbWEvaWJfdXNlcl92ZXJicy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogCiAjaW5jbHVkZSAiaXBhdGhfa2VybmVsLmgiCiAjaW5jbHVkZSAiaXBhdGhfdmVyYnMuaCIKICNpbmNsdWRlICJpcGF0aF9jb21tb24uaCIKIAotLyogTm90IHN0YXRpYywgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRoZSBjb21waWxlciByZW1vdmluZyBpdCAqLwotY29uc3QgY2hhciBpcGF0aF92ZXJic192ZXJzaW9uW10gPSAiaXBhdGhfdmVyYnMgIiBJUEFUSF9JRFNUUjsKLQogc3RhdGljIHVuc2lnbmVkIGludCBpYl9pcGF0aF9xcF90YWJsZV9zaXplID0gMjUxOwogbW9kdWxlX3BhcmFtX25hbWVkKHFwX3RhYmxlX3NpemUsIGliX2lwYXRoX3FwX3RhYmxlX3NpemUsIHVpbnQsIFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhxcF90YWJsZV9zaXplLCAiUVAgdGFibGUgc2l6ZSIpOwpAQCAtNTIsMTAgKzUwLDYgQEAKIE1PRFVMRV9QQVJNX0RFU0MobGtleV90YWJsZV9zaXplLAogCQkgIkxLRVkgdGFibGUgc2l6ZSBpbiBiaXRzICgyXm4sIDEgPD0gbiA8PSAyMykiKTsKIAotdW5zaWduZWQgaW50IGliX2lwYXRoX2RlYnVnOwkvKiBkZWJ1ZyBtYXNrICovCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGliX2lwYXRoX2RlYnVnLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVmVyYnMgZGVidWcgbWFzayIpOwotCiBzdGF0aWMgdW5zaWduZWQgaW50IGliX2lwYXRoX21heF9wZHMgPSAweEZGRkY7CiBtb2R1bGVfcGFyYW1fbmFtZWQobWF4X3BkcywgaWJfaXBhdGhfbWF4X3BkcywgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfcGRzLApAQCAtNzksNiArNzMsMTAgQEAKIAkJICAgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfcXBfd3JzLCAiTWF4aW11bSBudW1iZXIgb2YgUVAgV1JzIHRvIHN1cHBvcnQiKTsKIAordW5zaWduZWQgaW50IGliX2lwYXRoX21heF9xcHMgPSAxNjM4NDsKK21vZHVsZV9wYXJhbV9uYW1lZChtYXhfcXBzLCBpYl9pcGF0aF9tYXhfcXBzLCB1aW50LCBTX0lXVVNSIHwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9xcHMsICJNYXhpbXVtIG51bWJlciBvZiBRUHMgdG8gc3VwcG9ydCIpOworCiB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X3NnZXMgPSAweDYwOwogbW9kdWxlX3BhcmFtX25hbWVkKG1heF9zZ2VzLCBpYl9pcGF0aF9tYXhfc2dlcywgdWludCwgU19JV1VTUiB8IFNfSVJVR08pOwogTU9EVUxFX1BBUk1fREVTQyhtYXhfc2dlcywgIk1heGltdW0gbnVtYmVyIG9mIFNHRXMgdG8gc3VwcG9ydCIpOwpAQCAtMTA5LDkgKzEwNyw5IEBACiAJCSAgIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X3NycV93cnMsICJNYXhpbXVtIG51bWJlciBvZiBTUlEgV1JzIHN1cHBvcnQiKTsKIAotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX0FVVEhPUigiUUxvZ2ljIDxzdXBwb3J0QHBhdGhzY2FsZS5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYyBJbmZpbmlQYXRoIGRyaXZlciIpOworc3RhdGljIHVuc2lnbmVkIGludCBpYl9pcGF0aF9kaXNhYmxlX3NtYTsKK21vZHVsZV9wYXJhbV9uYW1lZChkaXNhYmxlX3NtYSwgaWJfaXBhdGhfZGlzYWJsZV9zbWEsIHVpbnQsIFNfSVdVU1IgfCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaWJfaXBhdGhfZGlzYWJsZV9zbWEsICJEaXNhYmxlIHRoZSBTTUEiKTsKIAogY29uc3QgaW50IGliX2lwYXRoX3N0YXRlX29wc1tJQl9RUFNfRVJSICsgMV0gPSB7CiAJW0lCX1FQU19SRVNFVF0gPSAwLApAQCAtMTI1LDYgKzEyMywxNiBAQAogCVtJQl9RUFNfRVJSXSA9IDAsCiB9OwogCitzdHJ1Y3QgaXBhdGhfdWNvbnRleHQgeworCXN0cnVjdCBpYl91Y29udGV4dCBpYnVjb250ZXh0OworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBhdGhfdWNvbnRleHQgKnRvX2l1Y29udGV4dChzdHJ1Y3QgaWJfdWNvbnRleHQKKwkJCQkJCSAgKmlidWNvbnRleHQpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihpYnVjb250ZXh0LCBzdHJ1Y3QgaXBhdGhfdWNvbnRleHQsIGlidWNvbnRleHQpOworfQorCiAvKgogICogVHJhbnNsYXRlIGliX3dyX29wY29kZSBpbnRvIGliX3djX29wY29kZS4KICAqLwpAQCAtMjc3LDExICsyODUsMTIgQEAKIAkJCSAgICAgIHN0cnVjdCBpYl9yZWN2X3dyICoqYmFkX3dyKQogewogCXN0cnVjdCBpcGF0aF9xcCAqcXAgPSB0b19pcXAoaWJxcCk7CisJc3RydWN0IGlwYXRoX3J3cSAqd3EgPSBxcC0+cl9ycS53cTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKIAkvKiBDaGVjayB0aGF0IHN0YXRlIGlzIE9LIHRvIHBvc3QgcmVjZWl2ZS4gKi8KLQlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BPU1RfUkVDVl9PSykpIHsKKwlpZiAoIShpYl9pcGF0aF9zdGF0ZV9vcHNbcXAtPnN0YXRlXSAmIElQQVRIX1BPU1RfUkVDVl9PSykgfHwgIXdxKSB7CiAJCSpiYWRfd3IgPSB3cjsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBiYWlsOwpAQCAtMjkwLDU5ICsyOTksMzEgQEAKIAlmb3IgKDsgd3I7IHdyID0gd3ItPm5leHQpIHsKIAkJc3RydWN0IGlwYXRoX3J3cWUgKndxZTsKIAkJdTMyIG5leHQ7Ci0JCWludCBpLCBqOworCQlpbnQgaTsKIAotCQlpZiAod3ItPm51bV9zZ2UgPiBxcC0+cl9ycS5tYXhfc2dlKSB7CisJCWlmICgodW5zaWduZWQpIHdyLT5udW1fc2dlID4gcXAtPnJfcnEubWF4X3NnZSkgewogCQkJKmJhZF93ciA9IHdyOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gYmFpbDsKIAkJfQogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7Ci0JCW5leHQgPSBxcC0+cl9ycS5oZWFkICsgMTsKKwkJbmV4dCA9IHdxLT5oZWFkICsgMTsKIAkJaWYgKG5leHQgPj0gcXAtPnJfcnEuc2l6ZSkKIAkJCW5leHQgPSAwOwotCQlpZiAobmV4dCA9PSBxcC0+cl9ycS50YWlsKSB7CisJCWlmIChuZXh0ID09IHdxLT50YWlsKSB7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CiAJCQkqYmFkX3dyID0gd3I7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byBiYWlsOwogCQl9CiAKLQkJd3FlID0gZ2V0X3J3cWVfcHRyKCZxcC0+cl9ycSwgcXAtPnJfcnEuaGVhZCk7CisJCXdxZSA9IGdldF9yd3FlX3B0cigmcXAtPnJfcnEsIHdxLT5oZWFkKTsKIAkJd3FlLT53cl9pZCA9IHdyLT53cl9pZDsKLQkJd3FlLT5zZ19saXN0WzBdLm1yID0gTlVMTDsKLQkJd3FlLT5zZ19saXN0WzBdLnZhZGRyID0gTlVMTDsKLQkJd3FlLT5zZ19saXN0WzBdLmxlbmd0aCA9IDA7Ci0JCXdxZS0+c2dfbGlzdFswXS5zZ2VfbGVuZ3RoID0gMDsKLQkJd3FlLT5sZW5ndGggPSAwOwotCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHdyLT5udW1fc2dlOyBpKyspIHsKLQkJCS8qIENoZWNrIExLRVkgKi8KLQkJCWlmICh0b19pcGQocXAtPmlicXAucGQpLT51c2VyICYmCi0JCQkgICAgd3ItPnNnX2xpc3RbaV0ubGtleSA9PSAwKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywKLQkJCQkJCSAgICAgICBmbGFncyk7Ci0JCQkJKmJhZF93ciA9IHdyOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBiYWlsOwotCQkJfQotCQkJaWYgKHdyLT5zZ19saXN0W2ldLmxlbmd0aCA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKCFpcGF0aF9sa2V5X29rKAotCQkJCSAgICAmdG9faWRldihxcC0+aWJxcC5kZXZpY2UpLT5sa190YWJsZSwKLQkJCQkgICAgJndxZS0+c2dfbGlzdFtqXSwgJndyLT5zZ19saXN0W2ldLAotCQkJCSAgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKSB7Ci0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnJfcnEubG9jaywKLQkJCQkJCSAgICAgICBmbGFncyk7Ci0JCQkJKmJhZF93ciA9IHdyOwotCQkJCXJldCA9IC1FSU5WQUw7Ci0JCQkJZ290byBiYWlsOwotCQkJfQotCQkJd3FlLT5sZW5ndGggKz0gd3ItPnNnX2xpc3RbaV0ubGVuZ3RoOwotCQkJaisrOwotCQl9Ci0JCXdxZS0+bnVtX3NnZSA9IGo7Ci0JCXFwLT5yX3JxLmhlYWQgPSBuZXh0OworCQl3cWUtPm51bV9zZ2UgPSB3ci0+bnVtX3NnZTsKKwkJZm9yIChpID0gMDsgaSA8IHdyLT5udW1fc2dlOyBpKyspCisJCQl3cWUtPnNnX2xpc3RbaV0gPSB3ci0+c2dfbGlzdFtpXTsKKwkJd3EtPmhlYWQgPSBuZXh0OwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxcC0+cl9ycS5sb2NrLCBmbGFncyk7CiAJfQogCXJldCA9IDA7CkBAIC0zNzcsNiArMzU4LDkgQEAKIAlzd2l0Y2ggKHFwLT5pYnFwLnFwX3R5cGUpIHsKIAljYXNlIElCX1FQVF9TTUk6CiAJY2FzZSBJQl9RUFRfR1NJOgorCQlpZiAoaWJfaXBhdGhfZGlzYWJsZV9zbWEpCisJCQlicmVhazsKKwkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIElCX1FQVF9VRDoKIAkJaXBhdGhfdWRfcmN2KGRldiwgaGRyLCBoYXNfZ3JoLCBkYXRhLCB0bGVuLCBxcCk7CiAJCWJyZWFrOwpAQCAtMzk1LDcgKzM3OSw3IEBACiB9CiAKIC8qKgotICogaXBhdGhfaWJfcmN2IC0gcHJvY2VzcyBhbmQgaW5jb21pbmcgcGFja2V0CisgKiBpcGF0aF9pYl9yY3YgLSBwcm9jZXNzIGFuIGluY29taW5nIHBhY2tldAogICogQGFyZzogdGhlIGRldmljZSBwb2ludGVyCiAgKiBAcmhkcjogdGhlIGhlYWRlciBvZiB0aGUgcGFja2V0CiAgKiBAZGF0YTogdGhlIHBhY2tldCBkYXRhCkBAIC00MDQsOSArMzg4LDkgQEAKICAqIFRoaXMgaXMgY2FsbGVkIGZyb20gaXBhdGhfa3JlY2VpdmUoKSB0byBwcm9jZXNzIGFuIGluY29taW5nIHBhY2tldCBhdAogICogaW50ZXJydXB0IGxldmVsLiBUbGVuIGlzIHRoZSBsZW5ndGggb2YgdGhlIGhlYWRlciArIGRhdGEgKyBDUkMgaW4gYnl0ZXMuCiAgKi8KLXN0YXRpYyB2b2lkIGlwYXRoX2liX3Jjdih2b2lkICphcmcsIHZvaWQgKnJoZHIsIHZvaWQgKmRhdGEsIHUzMiB0bGVuKQordm9pZCBpcGF0aF9pYl9yY3Yoc3RydWN0IGlwYXRoX2liZGV2ICpkZXYsIHZvaWQgKnJoZHIsIHZvaWQgKmRhdGEsCisJCSAgdTMyIHRsZW4pCiB7Ci0Jc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSAoc3RydWN0IGlwYXRoX2liZGV2ICopIGFyZzsKIAlzdHJ1Y3QgaXBhdGhfaWJfaGVhZGVyICpoZHIgPSByaGRyOwogCXN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyOwogCXN0cnVjdCBpcGF0aF9xcCAqcXA7CkBAIC00MjcsNyArNDExLDcgQEAKIAlsaWQgPSBiZTE2X3RvX2NwdShoZHItPmxyaFsxXSk7CiAJaWYgKGxpZCA8IElQQVRIX01VTFRJQ0FTVF9MSURfQkFTRSkgewogCQlsaWQgJj0gfigoMSA8PCAoZGV2LT5ta2V5cHJvdF9yZXN2X2xtYyAmIDcpKSAtIDEpOwotCQlpZiAodW5saWtlbHkobGlkICE9IGlwYXRoX2xheWVyX2dldF9saWQoZGV2LT5kZCkpKSB7CisJCWlmICh1bmxpa2VseShsaWQgIT0gZGV2LT5kZC0+aXBhdGhfbGlkKSkgewogCQkJZGV2LT5yY3ZfZXJyb3JzKys7CiAJCQlnb3RvIGJhaWw7CiAJCX0KQEAgLTQ5NSw5ICs0NzksOCBAQAogICogVGhpcyBpcyBjYWxsZWQgZnJvbSBpcGF0aF9kb19yY3ZfdGltZXIoKSBhdCBpbnRlcnJ1cHQgbGV2ZWwgdG8gY2hlY2sgZm9yCiAgKiBRUHMgd2hpY2ggbmVlZCByZXRyYW5zbWl0cyBhbmQgdG8gY29sbGVjdCBwZXJmb3JtYW5jZSBudW1iZXJzLgogICovCi1zdGF0aWMgdm9pZCBpcGF0aF9pYl90aW1lcih2b2lkICphcmcpCit2b2lkIGlwYXRoX2liX3RpbWVyKHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2KQogewotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKSBhcmc7CiAJc3RydWN0IGlwYXRoX3FwICpyZXNlbmQgPSBOVUxMOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxhc3Q7CiAJc3RydWN0IGlwYXRoX3FwICpxcDsKQEAgLTUzOSwxOSArNTIyLDE5IEBACiAJaWYgKGRldi0+cG1hX3NhbXBsZV9zdGF0dXMgPT0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfU1RBUlRFRCAmJgogCSAgICAtLWRldi0+cG1hX3NhbXBsZV9zdGFydCA9PSAwKSB7CiAJCWRldi0+cG1hX3NhbXBsZV9zdGF0dXMgPSBJQl9QTUFfU0FNUExFX1NUQVRVU19SVU5OSU5HOwotCQlpcGF0aF9sYXllcl9zbmFwc2hvdF9jb3VudGVycyhkZXYtPmRkLCAmZGV2LT5pcGF0aF9zd29yZCwKLQkJCQkJICAgICAgJmRldi0+aXBhdGhfcndvcmQsCi0JCQkJCSAgICAgICZkZXYtPmlwYXRoX3Nwa3RzLAotCQkJCQkgICAgICAmZGV2LT5pcGF0aF9ycGt0cywKLQkJCQkJICAgICAgJmRldi0+aXBhdGhfeG1pdF93YWl0KTsKKwkJaXBhdGhfc25hcHNob3RfY291bnRlcnMoZGV2LT5kZCwgJmRldi0+aXBhdGhfc3dvcmQsCisJCQkJCSZkZXYtPmlwYXRoX3J3b3JkLAorCQkJCQkmZGV2LT5pcGF0aF9zcGt0cywKKwkJCQkJJmRldi0+aXBhdGhfcnBrdHMsCisJCQkJCSZkZXYtPmlwYXRoX3htaXRfd2FpdCk7CiAJfQogCWlmIChkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID09IElCX1BNQV9TQU1QTEVfU1RBVFVTX1JVTk5JTkcpIHsKIAkJaWYgKGRldi0+cG1hX3NhbXBsZV9pbnRlcnZhbCA9PSAwKSB7CiAJCQl1NjQgdGEsIHRiLCB0YywgdGQsIHRlOwogCiAJCQlkZXYtPnBtYV9zYW1wbGVfc3RhdHVzID0gSUJfUE1BX1NBTVBMRV9TVEFUVVNfRE9ORTsKLQkJCWlwYXRoX2xheWVyX3NuYXBzaG90X2NvdW50ZXJzKGRldi0+ZGQsICZ0YSwgJnRiLAotCQkJCQkJICAgICAgJnRjLCAmdGQsICZ0ZSk7CisJCQlpcGF0aF9zbmFwc2hvdF9jb3VudGVycyhkZXYtPmRkLCAmdGEsICZ0YiwKKwkJCQkJCSZ0YywgJnRkLCAmdGUpOwogCiAJCQlkZXYtPmlwYXRoX3N3b3JkID0gdGEgLSBkZXYtPmlwYXRoX3N3b3JkOwogCQkJZGV2LT5pcGF0aF9yd29yZCA9IHRiIC0gZGV2LT5pcGF0aF9yd29yZDsKQEAgLTU4MSw2ICs1NjQsMzYyIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCB1cGRhdGVfc2dlKHN0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgKnNzLCB1MzIgbGVuZ3RoKQoreworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnZSA9ICZzcy0+c2dlOworCisJc2dlLT52YWRkciArPSBsZW5ndGg7CisJc2dlLT5sZW5ndGggLT0gbGVuZ3RoOworCXNnZS0+c2dlX2xlbmd0aCAtPSBsZW5ndGg7CisJaWYgKHNnZS0+c2dlX2xlbmd0aCA9PSAwKSB7CisJCWlmICgtLXNzLT5udW1fc2dlKQorCQkJKnNnZSA9ICpzcy0+c2dfbGlzdCsrOworCX0gZWxzZSBpZiAoc2dlLT5sZW5ndGggPT0gMCAmJiBzZ2UtPm1yICE9IE5VTEwpIHsKKwkJaWYgKCsrc2dlLT5uID49IElQQVRIX1NFR1NaKSB7CisJCQlpZiAoKytzZ2UtPm0gPj0gc2dlLT5tci0+bWFwc3opCisJCQkJcmV0dXJuOworCQkJc2dlLT5uID0gMDsKKwkJfQorCQlzZ2UtPnZhZGRyID0gc2dlLT5tci0+bWFwW3NnZS0+bV0tPnNlZ3Nbc2dlLT5uXS52YWRkcjsKKwkJc2dlLT5sZW5ndGggPSBzZ2UtPm1yLT5tYXBbc2dlLT5tXS0+c2Vnc1tzZ2UtPm5dLmxlbmd0aDsKKwl9Cit9CisKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KK3N0YXRpYyBpbmxpbmUgdTMyIGdldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIGRhdGEgPj4gc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNldF91cHBlcl9iaXRzKHUzMiBkYXRhLCB1MzIgc2hpZnQpCit7CisJcmV0dXJuIGRhdGEgPDwgc2hpZnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNsZWFyX3VwcGVyX2J5dGVzKHUzMiBkYXRhLCB1MzIgbiwgdTMyIG9mZikKK3sKKwlkYXRhIDw8PSAoKHNpemVvZih1MzIpIC0gbikgKiBCSVRTX1BFUl9CWVRFKTsKKwlkYXRhID4+PSAoKHNpemVvZih1MzIpIC0gbiAtIG9mZikgKiBCSVRTX1BFUl9CWVRFKTsKKwlyZXR1cm4gZGF0YTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfdXBwZXJfYml0cyh1MzIgZGF0YSwgdTMyIHNoaWZ0KQoreworCXJldHVybiBkYXRhIDw8IHNoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzZXRfdXBwZXJfYml0cyh1MzIgZGF0YSwgdTMyIHNoaWZ0KQoreworCXJldHVybiBkYXRhID4+IHNoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBjbGVhcl91cHBlcl9ieXRlcyh1MzIgZGF0YSwgdTMyIG4sIHUzMiBvZmYpCit7CisJZGF0YSA+Pj0gKChzaXplb2YodTMyKSAtIG4pICogQklUU19QRVJfQllURSk7CisJZGF0YSA8PD0gKChzaXplb2YodTMyKSAtIG4gLSBvZmYpICogQklUU19QRVJfQllURSk7CisJcmV0dXJuIGRhdGE7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgY29weV9pbyh1MzIgX19pb21lbSAqcGlvYnVmLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKKwkJICAgIHUzMiBsZW5ndGgpCit7CisJdTMyIGV4dHJhID0gMDsKKwl1MzIgZGF0YSA9IDA7CisJdTMyIGxhc3Q7CisKKwl3aGlsZSAoMSkgeworCQl1MzIgbGVuID0gc3MtPnNnZS5sZW5ndGg7CisJCXUzMiBvZmY7CisKKwkJQlVHX09OKGxlbiA9PSAwKTsKKwkJaWYgKGxlbiA+IGxlbmd0aCkKKwkJCWxlbiA9IGxlbmd0aDsKKwkJaWYgKGxlbiA+IHNzLT5zZ2Uuc2dlX2xlbmd0aCkKKwkJCWxlbiA9IHNzLT5zZ2Uuc2dlX2xlbmd0aDsKKwkJLyogSWYgdGhlIHNvdXJjZSBhZGRyZXNzIGlzIG5vdCBhbGlnbmVkLCB0cnkgdG8gYWxpZ24gaXQuICovCisJCW9mZiA9ICh1bnNpZ25lZCBsb25nKXNzLT5zZ2UudmFkZHIgJiAoc2l6ZW9mKHUzMikgLSAxKTsKKwkJaWYgKG9mZikgeworCQkJdTMyICphZGRyID0gKHUzMiAqKSgodW5zaWduZWQgbG9uZylzcy0+c2dlLnZhZGRyICYKKwkJCQkJICAgIH4oc2l6ZW9mKHUzMikgLSAxKSk7CisJCQl1MzIgdiA9IGdldF91cHBlcl9iaXRzKCphZGRyLCBvZmYgKiBCSVRTX1BFUl9CWVRFKTsKKwkJCXUzMiB5OworCisJCQl5ID0gc2l6ZW9mKHUzMikgLSBvZmY7CisJCQlpZiAobGVuID4geSkKKwkJCQlsZW4gPSB5OworCQkJaWYgKGxlbiArIGV4dHJhID49IHNpemVvZih1MzIpKSB7CisJCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBleHRyYSAqCisJCQkJCQkgICAgICAgQklUU19QRVJfQllURSk7CisJCQkJbGVuID0gc2l6ZW9mKHUzMikgLSBleHRyYTsKKwkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQlsYXN0ID0gZGF0YTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBwaW9idWYpOworCQkJCXBpb2J1ZisrOworCQkJCWV4dHJhID0gMDsKKwkJCQlkYXRhID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJLyogQ2xlYXIgdW51c2VkIHVwcGVyIGJ5dGVzICovCisJCQkJZGF0YSB8PSBjbGVhcl91cHBlcl9ieXRlcyh2LCBsZW4sIGV4dHJhKTsKKwkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQlsYXN0ID0gZGF0YTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWV4dHJhICs9IGxlbjsKKwkJCX0KKwkJfSBlbHNlIGlmIChleHRyYSkgeworCQkJLyogU291cmNlIGFkZHJlc3MgaXMgYWxpZ25lZC4gKi8KKwkJCXUzMiAqYWRkciA9ICh1MzIgKikgc3MtPnNnZS52YWRkcjsKKwkJCWludCBzaGlmdCA9IGV4dHJhICogQklUU19QRVJfQllURTsKKwkJCWludCB1c2hpZnQgPSAzMiAtIHNoaWZ0OworCQkJdTMyIGwgPSBsZW47CisKKwkJCXdoaWxlIChsID49IHNpemVvZih1MzIpKSB7CisJCQkJdTMyIHYgPSAqYWRkcjsKKworCQkJCWRhdGEgfD0gc2V0X3VwcGVyX2JpdHModiwgc2hpZnQpOworCQkJCV9fcmF3X3dyaXRlbChkYXRhLCBwaW9idWYpOworCQkJCWRhdGEgPSBnZXRfdXBwZXJfYml0cyh2LCB1c2hpZnQpOworCQkJCXBpb2J1ZisrOworCQkJCWFkZHIrKzsKKwkJCQlsIC09IHNpemVvZih1MzIpOworCQkJfQorCQkJLyoKKwkJCSAqIFdlIHN0aWxsIGhhdmUgJ2V4dHJhJyBudW1iZXIgb2YgYnl0ZXMgbGVmdG92ZXIuCisJCQkgKi8KKwkJCWlmIChsKSB7CisJCQkJdTMyIHYgPSAqYWRkcjsKKworCQkJCWlmIChsICsgZXh0cmEgPj0gc2l6ZW9mKHUzMikpIHsKKwkJCQkJZGF0YSB8PSBzZXRfdXBwZXJfYml0cyh2LCBzaGlmdCk7CisJCQkJCWxlbiAtPSBsICsgZXh0cmEgLSBzaXplb2YodTMyKTsKKwkJCQkJaWYgKGxlbiA9PSBsZW5ndGgpIHsKKwkJCQkJCWxhc3QgPSBkYXRhOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJX19yYXdfd3JpdGVsKGRhdGEsIHBpb2J1Zik7CisJCQkJCXBpb2J1ZisrOworCQkJCQlleHRyYSA9IDA7CisJCQkJCWRhdGEgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIENsZWFyIHVudXNlZCB1cHBlciBieXRlcyAqLworCQkJCQlkYXRhIHw9IGNsZWFyX3VwcGVyX2J5dGVzKHYsIGwsCisJCQkJCQkJCSAgZXh0cmEpOworCQkJCQlpZiAobGVuID09IGxlbmd0aCkgeworCQkJCQkJbGFzdCA9IGRhdGE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlleHRyYSArPSBsOworCQkJCX0KKwkJCX0gZWxzZSBpZiAobGVuID09IGxlbmd0aCkgeworCQkJCWxhc3QgPSBkYXRhOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgaWYgKGxlbiA9PSBsZW5ndGgpIHsKKwkJCXUzMiB3OworCisJCQkvKgorCQkJICogTmVlZCB0byByb3VuZCB1cCBmb3IgdGhlIGxhc3QgZHdvcmQgaW4gdGhlCisJCQkgKiBwYWNrZXQuCisJCQkgKi8KKwkJCXcgPSAobGVuICsgMykgPj4gMjsKKwkJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBzcy0+c2dlLnZhZGRyLCB3IC0gMSk7CisJCQlwaW9idWYgKz0gdyAtIDE7CisJCQlsYXN0ID0gKCh1MzIgKikgc3MtPnNnZS52YWRkcilbdyAtIDFdOworCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl1MzIgdyA9IGxlbiA+PiAyOworCisJCQlfX2lvd3JpdGUzMl9jb3B5KHBpb2J1Ziwgc3MtPnNnZS52YWRkciwgdyk7CisJCQlwaW9idWYgKz0gdzsKKworCQkJZXh0cmEgPSBsZW4gJiAoc2l6ZW9mKHUzMikgLSAxKTsKKwkJCWlmIChleHRyYSkgeworCQkJCXUzMiB2ID0gKCh1MzIgKikgc3MtPnNnZS52YWRkcilbd107CisKKwkJCQkvKiBDbGVhciB1bnVzZWQgdXBwZXIgYnl0ZXMgKi8KKwkJCQlkYXRhID0gY2xlYXJfdXBwZXJfYnl0ZXModiwgZXh0cmEsIDApOworCQkJfQorCQl9CisJCXVwZGF0ZV9zZ2Uoc3MsIGxlbik7CisJCWxlbmd0aCAtPSBsZW47CisJfQorCS8qIFVwZGF0ZSBhZGRyZXNzIGJlZm9yZSBzZW5kaW5nIHBhY2tldC4gKi8KKwl1cGRhdGVfc2dlKHNzLCBsZW5ndGgpOworCS8qIG11c3QgZmx1c2ggZWFybHkgZXZlcnl0aGluZyBiZWZvcmUgdHJpZ2dlciB3b3JkICovCisJaXBhdGhfZmx1c2hfd2MoKTsKKwlfX3Jhd193cml0ZWwobGFzdCwgcGlvYnVmKTsKKwkvKiBiZSBzdXJlIHRyaWdnZXIgd29yZCBpcyB3cml0dGVuICovCisJaXBhdGhfZmx1c2hfd2MoKTsKK30KKworLyoqCisgKiBpcGF0aF92ZXJic19zZW5kIC0gc2VuZCBhIHBhY2tldAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBoZHJ3b3JkczogdGhlIG51bWJlciBvZiB3b3JkcyBpbiB0aGUgaGVhZGVyCisgKiBAaGRyOiB0aGUgcGFja2V0IGhlYWRlcgorICogQGxlbjogdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IGluIGJ5dGVzCisgKiBAc3M6IHRoZSBTR0UgdG8gc2VuZAorICovCitpbnQgaXBhdGhfdmVyYnNfc2VuZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBoZHJ3b3JkcywKKwkJICAgICB1MzIgKmhkciwgdTMyIGxlbiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MpCit7CisJdTMyIF9faW9tZW0gKnBpb2J1ZjsKKwl1MzIgcGxlbjsKKwlpbnQgcmV0OworCisJLyogKzEgaXMgZm9yIHRoZSBxd29yZCBwYWRkaW5nIG9mIHBiYyAqLworCXBsZW4gPSBoZHJ3b3JkcyArICgobGVuICsgMykgPj4gMikgKyAxOworCWlmICh1bmxpa2VseSgocGxlbiA8PCAyKSA+IGRkLT5pcGF0aF9pYm1heGxlbikpIHsKKwkJaXBhdGhfZGJnKCJwYWNrZXQgbGVuIDB4JXggdG9vIGxvbmcsIGZhaWxpbmdcbiIsIHBsZW4pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJLyogR2V0IGEgUElPIGJ1ZmZlciB0byB1c2UuICovCisJcGlvYnVmID0gaXBhdGhfZ2V0cGlvYnVmKGRkLCBOVUxMKTsKKwlpZiAodW5saWtlbHkocGlvYnVmID09IE5VTEwpKSB7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBiYWlsOworCX0KKworCS8qCisJICogV3JpdGUgbGVuIHRvIGNvbnRyb2wgcXdvcmQsIG5vIGZsYWdzLgorCSAqIFdlIGhhdmUgdG8gZmx1c2ggYWZ0ZXIgdGhlIFBCQyBmb3IgY29ycmVjdG5lc3Mgb24gc29tZSBjcHVzCisJICogb3IgV0MgYnVmZmVyIGNhbiBiZSB3cml0dGVuIG91dCBvZiBvcmRlci4KKwkgKi8KKwl3cml0ZXEocGxlbiwgcGlvYnVmKTsKKwlpcGF0aF9mbHVzaF93YygpOworCXBpb2J1ZiArPSAyOworCWlmIChsZW4gPT0gMCkgeworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBqdXN0IHRoZSBoZWFkZXIgcG9ydGlvbiwgbXVzdCBmbHVzaCBiZWZvcmUKKwkJICogd3JpdGluZyBsYXN0IHdvcmQgb2YgaGVhZGVyIGZvciBjb3JyZWN0bmVzcywgYW5kIGFmdGVyCisJCSAqIHRoZSBsYXN0IGhlYWRlciB3b3JkICh0cmlnZ2VyIHdvcmQpLgorCQkgKi8KKwkJX19pb3dyaXRlMzJfY29weShwaW9idWYsIGhkciwgaGRyd29yZHMgLSAxKTsKKwkJaXBhdGhfZmx1c2hfd2MoKTsKKwkJX19yYXdfd3JpdGVsKGhkcltoZHJ3b3JkcyAtIDFdLCBwaW9idWYgKyBoZHJ3b3JkcyAtIDEpOworCQlpcGF0aF9mbHVzaF93YygpOworCQlyZXQgPSAwOworCQlnb3RvIGJhaWw7CisJfQorCisJX19pb3dyaXRlMzJfY29weShwaW9idWYsIGhkciwgaGRyd29yZHMpOworCXBpb2J1ZiArPSBoZHJ3b3JkczsKKworCS8qIFRoZSBjb21tb24gY2FzZSBpcyBhbGlnbmVkIGFuZCBjb250YWluZWQgaW4gb25lIHNlZ21lbnQuICovCisJaWYgKGxpa2VseShzcy0+bnVtX3NnZSA9PSAxICYmIGxlbiA8PSBzcy0+c2dlLmxlbmd0aCAmJgorCQkgICAhKCh1bnNpZ25lZCBsb25nKXNzLT5zZ2UudmFkZHIgJiAoc2l6ZW9mKHUzMikgLSAxKSkpKSB7CisJCXUzMiB3OworCQl1MzIgKmFkZHIgPSAodTMyICopIHNzLT5zZ2UudmFkZHI7CisKKwkJLyogVXBkYXRlIGFkZHJlc3MgYmVmb3JlIHNlbmRpbmcgcGFja2V0LiAqLworCQl1cGRhdGVfc2dlKHNzLCBsZW4pOworCQkvKiBOZWVkIHRvIHJvdW5kIHVwIGZvciB0aGUgbGFzdCBkd29yZCBpbiB0aGUgcGFja2V0LiAqLworCQl3ID0gKGxlbiArIDMpID4+IDI7CisJCV9faW93cml0ZTMyX2NvcHkocGlvYnVmLCBhZGRyLCB3IC0gMSk7CisJCS8qIG11c3QgZmx1c2ggZWFybHkgZXZlcnl0aGluZyBiZWZvcmUgdHJpZ2dlciB3b3JkICovCisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCV9fcmF3X3dyaXRlbChhZGRyW3cgLSAxXSwgcGlvYnVmICsgdyAtIDEpOworCQkvKiBiZSBzdXJlIHRyaWdnZXIgd29yZCBpcyB3cml0dGVuICovCisJCWlwYXRoX2ZsdXNoX3djKCk7CisJCXJldCA9IDA7CisJCWdvdG8gYmFpbDsKKwl9CisJY29weV9pbyhwaW9idWYsIHNzLCBsZW4pOworCXJldCA9IDA7CisKK2JhaWw6CisJcmV0dXJuIHJldDsKK30KKworaW50IGlwYXRoX3NuYXBzaG90X2NvdW50ZXJzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTY0ICpzd29yZHMsCisJCQkgICAgdTY0ICpyd29yZHMsIHU2NCAqc3BrdHMsIHU2NCAqcnBrdHMsCisJCQkgICAgdTY0ICp4bWl0X3dhaXQpCit7CisJaW50IHJldDsKKworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpKSB7CisJCS8qIG5vIGhhcmR3YXJlLCBmcmVlemUsIGV0Yy4gKi8KKwkJaXBhdGhfZGJnKCJ1bml0ICV1IG5vdCB1c2FibGVcbiIsIGRkLT5pcGF0aF91bml0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwkqc3dvcmRzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRzZW5kY250KTsKKwkqcndvcmRzID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRyY3ZjbnQpOworCSpzcGt0cyA9IGlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RzZW5kY250KTsKKwkqcnBrdHMgPSBpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcGt0cmN2Y250KTsKKwkqeG1pdF93YWl0ID0gaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3NlbmRzdGFsbGNudCk7CisKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKKy8qKgorICogaXBhdGhfZ2V0X2NvdW50ZXJzIC0gZ2V0IHZhcmlvdXMgY2hpcCBjb3VudGVycworICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqIEBjbnRyczogY291bnRlcnMgYXJlIHBsYWNlZCBoZXJlCisgKgorICogUmV0dXJuIHRoZSBjb3VudGVycyBuZWVkZWQgYnkgcmVjdl9wbWFfZ2V0X3BvcnRjb3VudGVycygpLgorICovCitpbnQgaXBhdGhfZ2V0X2NvdW50ZXJzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJICAgICAgIHN0cnVjdCBpcGF0aF92ZXJic19jb3VudGVycyAqY250cnMpCit7CisJaW50IHJldDsKKworCWlmICghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0lOSVRURUQpKSB7CisJCS8qIG5vIGhhcmR3YXJlLCBmcmVlemUsIGV0Yy4gKi8KKwkJaXBhdGhfZGJnKCJ1bml0ICV1IG5vdCB1c2FibGVcbiIsIGRkLT5pcGF0aF91bml0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwljbnRycy0+c3ltYm9sX2Vycm9yX2NvdW50ZXIgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfaWJzeW1ib2xlcnJjbnQpOworCWNudHJzLT5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXIgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfaWJsaW5rZXJycmVjb3ZjbnQpOworCS8qCisJICogVGhlIGxpbmsgZG93bmVkIGNvdW50ZXIgY291bnRzIHdoZW4gdGhlIG90aGVyIHNpZGUgZG93bnMgdGhlCisJICogY29ubmVjdGlvbi4gIFdlIGFkZCBpbiB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIGRvd25lZCB0aGUgbGluaworCSAqIGR1ZSB0byBsb2NhbCBsaW5rIGludGVncml0eSBlcnJvcnMgdG8gY29tcGVuc2F0ZS4KKwkgKi8KKwljbnRycy0+bGlua19kb3duZWRfY291bnRlciA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pYmxpbmtkb3duY250KTsKKwljbnRycy0+cG9ydF9yY3ZfZXJyb3JzID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3J4ZHJvcHBrdGNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcmN2b3ZmbGNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfcG9ydG92ZmxjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2Vycl9ybGVuY250KSArCisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9pbnZhbGlkcmxlbmNudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJyaWNyY2NudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJydmNyY2NudCkgKworCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfZXJybHBjcmNjbnQpICsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2JhZGZvcm1hdGNudCk7CisJY250cnMtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3JjdmVicGNudCk7CisJY250cnMtPnBvcnRfeG1pdF9kaXNjYXJkcyA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl91bnN1cHZsY250KTsKKwljbnRycy0+cG9ydF94bWl0X2RhdGEgPQorCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3Jfd29yZHNlbmRjbnQpOworCWNudHJzLT5wb3J0X3Jjdl9kYXRhID0KKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3dvcmRyY3ZjbnQpOworCWNudHJzLT5wb3J0X3htaXRfcGFja2V0cyA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RzZW5kY250KTsKKwljbnRycy0+cG9ydF9yY3ZfcGFja2V0cyA9CisJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RyY3ZjbnQpOworCWNudHJzLT5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgPSBkZC0+aXBhdGhfbGxpX2Vycm9yczsKKwljbnRycy0+ZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9ycyA9IDA7IC8qIFhYWCAqLworCisJcmV0ID0gMDsKKworYmFpbDoKKwlyZXR1cm4gcmV0OworfQorCiAvKioKICAqIGlwYXRoX2liX3Bpb2J1ZmF2YWlsIC0gY2FsbGJhY2sgd2hlbiBhIFBJTyBidWZmZXIgaXMgYXZhaWxhYmxlCiAgKiBAYXJnOiB0aGUgZGV2aWNlIHBvaW50ZXIKQEAgLTU5MSw5ICs5MzAsOCBAQAogICogUVBzIHdhaXRpbmcgZm9yIGJ1ZmZlcnMgKGZvciBub3csIGp1c3QgZG8gYSB0YXNrbGV0X2hpX3NjaGVkdWxlIGFuZAogICogcmV0dXJuIHplcm8pLgogICovCi1zdGF0aWMgaW50IGlwYXRoX2liX3Bpb2J1ZmF2YWlsKHZvaWQgKmFyZykKK2ludCBpcGF0aF9pYl9waW9idWZhdmFpbChzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldikKIHsKLQlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IChzdHJ1Y3QgaXBhdGhfaWJkZXYgKikgYXJnOwogCXN0cnVjdCBpcGF0aF9xcCAqcXA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApAQCAtNjI0LDE0ICs5NjIsMTQgQEAKIAkJSUJfREVWSUNFX0JBRF9RS0VZX0NOVFIgfCBJQl9ERVZJQ0VfU0hVVERPV05fUE9SVCB8CiAJCUlCX0RFVklDRV9TWVNfSU1BR0VfR1VJRDsKIAlwcm9wcy0+cGFnZV9zaXplX2NhcCA9IFBBR0VfU0laRTsKLQlwcm9wcy0+dmVuZG9yX2lkID0gaXBhdGhfbGF5ZXJfZ2V0X3ZlbmRvcmlkKGRldi0+ZGQpOwotCXByb3BzLT52ZW5kb3JfcGFydF9pZCA9IGlwYXRoX2xheWVyX2dldF9kZXZpY2VpZChkZXYtPmRkKTsKLQlwcm9wcy0+aHdfdmVyID0gaXBhdGhfbGF5ZXJfZ2V0X3BjaXJldihkZXYtPmRkKTsKKwlwcm9wcy0+dmVuZG9yX2lkID0gZGV2LT5kZC0+aXBhdGhfdmVuZG9yaWQ7CisJcHJvcHMtPnZlbmRvcl9wYXJ0X2lkID0gZGV2LT5kZC0+aXBhdGhfZGV2aWNlaWQ7CisJcHJvcHMtPmh3X3ZlciA9IGRldi0+ZGQtPmlwYXRoX3BjaXJldjsKIAogCXByb3BzLT5zeXNfaW1hZ2VfZ3VpZCA9IGRldi0+c3lzX2ltYWdlX2d1aWQ7CiAKIAlwcm9wcy0+bWF4X21yX3NpemUgPSB+MHVsbDsKLQlwcm9wcy0+bWF4X3FwID0gZGV2LT5xcF90YWJsZS5tYXg7CisJcHJvcHMtPm1heF9xcCA9IGliX2lwYXRoX21heF9xcHM7CiAJcHJvcHMtPm1heF9xcF93ciA9IGliX2lwYXRoX21heF9xcF93cnM7CiAJcHJvcHMtPm1heF9zZ2UgPSBpYl9pcGF0aF9tYXhfc2dlczsKIAlwcm9wcy0+bWF4X2NxID0gaWJfaXBhdGhfbWF4X2NxczsKQEAgLTY0Nyw3ICs5ODUsNyBAQAogCXByb3BzLT5tYXhfc3JxX3NnZSA9IGliX2lwYXRoX21heF9zcnFfc2dlczsKIAkvKiBwcm9wcy0+bG9jYWxfY2FfYWNrX2RlbGF5ICovCiAJcHJvcHMtPmF0b21pY19jYXAgPSBJQl9BVE9NSUNfSENBOwotCXByb3BzLT5tYXhfcGtleXMgPSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpOworCXByb3BzLT5tYXhfcGtleXMgPSBpcGF0aF9nZXRfbnBrZXlzKGRldi0+ZGQpOwogCXByb3BzLT5tYXhfbWNhc3RfZ3JwID0gaWJfaXBhdGhfbWF4X21jYXN0X2dycHM7CiAJcHJvcHMtPm1heF9tY2FzdF9xcF9hdHRhY2ggPSBpYl9pcGF0aF9tYXhfbWNhc3RfcXBfYXR0YWNoZWQ7CiAJcHJvcHMtPm1heF90b3RhbF9tY2FzdF9xcF9hdHRhY2ggPSBwcm9wcy0+bWF4X21jYXN0X3FwX2F0dGFjaCAqCkBAIC02NzIsMTIgKzEwMTAsMTcgQEAKIAlbSU5GSU5JUEFUSF9JQkNTX0xUX1NUQVRFX1JFQ09WRVJJRExFXSA9IDYsCiB9OwogCit1MzIgaXBhdGhfZ2V0X2NyX2VycnBrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXJldHVybiBpcGF0aF9yZWFkX2NyZWczMihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJwa2V5KTsKK30KKwogc3RhdGljIGludCBpcGF0aF9xdWVyeV9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LAogCQkJICAgIHU4IHBvcnQsIHN0cnVjdCBpYl9wb3J0X2F0dHIgKnByb3BzKQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CiAJZW51bSBpYl9tdHUgbXR1OwotCXUxNiBsaWQgPSBpcGF0aF9sYXllcl9nZXRfbGlkKGRldi0+ZGQpOworCXUxNiBsaWQgPSBkZXYtPmRkLT5pcGF0aF9saWQ7CiAJdTY0IGliY3N0YXQ7CiAKIAltZW1zZXQocHJvcHMsIDAsIHNpemVvZigqcHJvcHMpKTsKQEAgLTY4NSwxNiArMTAyOCwxNiBAQAogCXByb3BzLT5sbWMgPSBkZXYtPm1rZXlwcm90X3Jlc3ZfbG1jICYgNzsKIAlwcm9wcy0+c21fbGlkID0gZGV2LT5zbV9saWQ7CiAJcHJvcHMtPnNtX3NsID0gZGV2LT5zbV9zbDsKLQlpYmNzdGF0ID0gaXBhdGhfbGF5ZXJfZ2V0X2xhc3RpYmNzdGF0KGRldi0+ZGQpOworCWliY3N0YXQgPSBkZXYtPmRkLT5pcGF0aF9sYXN0aWJjc3RhdDsKIAlwcm9wcy0+c3RhdGUgPSAoKGliY3N0YXQgPj4gNCkgJiAweDMpICsgMTsKIAkvKiBTZWUgcGh5c19zdGF0ZV9zaG93KCkgKi8KIAlwcm9wcy0+cGh5c19zdGF0ZSA9IGlwYXRoX2N2dF9waHlzcG9ydHN0YXRlWwotCQlpcGF0aF9sYXllcl9nZXRfbGFzdGliY3N0YXQoZGV2LT5kZCkgJiAweGZdOworCQlkZXYtPmRkLT5pcGF0aF9sYXN0aWJjc3RhdCAmIDB4Zl07CiAJcHJvcHMtPnBvcnRfY2FwX2ZsYWdzID0gZGV2LT5wb3J0X2NhcF9mbGFnczsKIAlwcm9wcy0+Z2lkX3RibF9sZW4gPSAxOwogCXByb3BzLT5tYXhfbXNnX3N6ID0gMHg4MDAwMDAwMDsKLQlwcm9wcy0+cGtleV90YmxfbGVuID0gaXBhdGhfbGF5ZXJfZ2V0X25wa2V5cyhkZXYtPmRkKTsKLQlwcm9wcy0+YmFkX3BrZXlfY250ciA9IGlwYXRoX2xheWVyX2dldF9jcl9lcnJwa2V5KGRldi0+ZGQpIC0KKwlwcm9wcy0+cGtleV90YmxfbGVuID0gaXBhdGhfZ2V0X25wa2V5cyhkZXYtPmRkKTsKKwlwcm9wcy0+YmFkX3BrZXlfY250ciA9IGlwYXRoX2dldF9jcl9lcnJwa2V5KGRldi0+ZGQpIC0KIAkJZGV2LT56X3BrZXlfdmlvbGF0aW9uczsKIAlwcm9wcy0+cWtleV92aW9sX2NudHIgPSBkZXYtPnFrZXlfdmlvbGF0aW9uczsKIAlwcm9wcy0+YWN0aXZlX3dpZHRoID0gSUJfV0lEVEhfNFg7CkBAIC03MDQsNyArMTA0Nyw3IEBACiAJcHJvcHMtPmluaXRfdHlwZV9yZXBseSA9IDA7CiAKIAlwcm9wcy0+bWF4X210dSA9IElCX01UVV80MDk2OwotCXN3aXRjaCAoaXBhdGhfbGF5ZXJfZ2V0X2libXR1KGRldi0+ZGQpKSB7CisJc3dpdGNoIChkZXYtPmRkLT5pcGF0aF9pYm10dSkgewogCWNhc2UgNDA5NjoKIAkJbXR1ID0gSUJfTVRVXzQwOTY7CiAJCWJyZWFrOwpAQCAtNzYzLDcgKzExMDYsNyBAQAogCWRldi0+cG9ydF9jYXBfZmxhZ3MgfD0gcHJvcHMtPnNldF9wb3J0X2NhcF9tYXNrOwogCWRldi0+cG9ydF9jYXBfZmxhZ3MgJj0gfnByb3BzLT5jbHJfcG9ydF9jYXBfbWFzazsKIAlpZiAocG9ydF9tb2RpZnlfbWFzayAmIElCX1BPUlRfU0hVVERPV04pCi0JCWlwYXRoX2xheWVyX3NldF9saW5rc3RhdGUoZGV2LT5kZCwgSVBBVEhfSUJfTElOS0RPV04pOworCQlpcGF0aF9zZXRfbGlua3N0YXRlKGRldi0+ZGQsIElQQVRIX0lCX0xJTktET1dOKTsKIAlpZiAocG9ydF9tb2RpZnlfbWFzayAmIElCX1BPUlRfUkVTRVRfUUtFWV9DTlRSKQogCQlkZXYtPnFrZXlfdmlvbGF0aW9ucyA9IDA7CiAJcmV0dXJuIDA7CkBAIC03ODAsNyArMTEyMyw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAJZ2lkLT5nbG9iYWwuc3VibmV0X3ByZWZpeCA9IGRldi0+Z2lkX3ByZWZpeDsKLQlnaWQtPmdsb2JhbC5pbnRlcmZhY2VfaWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZXYtPmRkKTsKKwlnaWQtPmdsb2JhbC5pbnRlcmZhY2VfaWQgPSBkZXYtPmRkLT5pcGF0aF9ndWlkOwogCiAJcmV0ID0gMDsKIApAQCAtODAzLDE4ICsxMTQ2LDIyIEBACiAJICogd2UgYWxsb3cgYWxsb2NhdGlvbnMgb2YgbW9yZSB0aGFuIHdlIHJlcG9ydCBmb3IgdGhpcyB2YWx1ZS4KIAkgKi8KIAotCWlmIChkZXYtPm5fcGRzX2FsbG9jYXRlZCA9PSBpYl9pcGF0aF9tYXhfcGRzKSB7Ci0JCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KIAlwZCA9IGttYWxsb2Moc2l6ZW9mICpwZCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZCkgewogCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlnb3RvIGJhaWw7CiAJfQogCisJc3Bpbl9sb2NrKCZkZXYtPm5fcGRzX2xvY2spOworCWlmIChkZXYtPm5fcGRzX2FsbG9jYXRlZCA9PSBpYl9pcGF0aF9tYXhfcGRzKSB7CisJCXNwaW5fdW5sb2NrKCZkZXYtPm5fcGRzX2xvY2spOworCQlrZnJlZShwZCk7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbDsKKwl9CisKIAlkZXYtPm5fcGRzX2FsbG9jYXRlZCsrOworCXNwaW5fdW5sb2NrKCZkZXYtPm5fcGRzX2xvY2spOwogCiAJLyogaWJfYWxsb2NfcGQoKSB3aWxsIGluaXRpYWxpemUgcGQtPmlicGQuICovCiAJcGQtPnVzZXIgPSB1ZGF0YSAhPSBOVUxMOwpAQCAtODMwLDcgKzExNzcsOSBAQAogCXN0cnVjdCBpcGF0aF9wZCAqcGQgPSB0b19pcGQoaWJwZCk7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KGlicGQtPmRldmljZSk7CiAKKwlzcGluX2xvY2soJmRldi0+bl9wZHNfbG9jayk7CiAJZGV2LT5uX3Bkc19hbGxvY2F0ZWQtLTsKKwlzcGluX3VubG9jaygmZGV2LT5uX3Bkc19sb2NrKTsKIAogCWtmcmVlKHBkKTsKIApAQCAtODUxLDExICsxMjAwLDYgQEAKIAlzdHJ1Y3QgaWJfYWggKnJldDsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocGQtPmRldmljZSk7CiAKLQlpZiAoZGV2LT5uX2Foc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X2FocykgewotCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwotCQlnb3RvIGJhaWw7Ci0JfQotCiAJLyogQSBtdWx0aWNhc3QgYWRkcmVzcyByZXF1aXJlcyBhIEdSSCAoc2VlIGNoLiA4LjQuMSkuICovCiAJaWYgKGFoX2F0dHItPmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFICYmCiAJICAgIGFoX2F0dHItPmRsaWQgIT0gSVBBVEhfUEVSTUlTU0lWRV9MSUQgJiYKQEAgLTg4MSw3ICsxMjI1LDE2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlzcGluX2xvY2soJmRldi0+bl9haHNfbG9jayk7CisJaWYgKGRldi0+bl9haHNfYWxsb2NhdGVkID09IGliX2lwYXRoX21heF9haHMpIHsKKwkJc3Bpbl91bmxvY2soJmRldi0+bl9haHNfbG9jayk7CisJCWtmcmVlKGFoKTsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsOworCX0KKwogCWRldi0+bl9haHNfYWxsb2NhdGVkKys7CisJc3Bpbl91bmxvY2soJmRldi0+bl9haHNfbG9jayk7CiAKIAkvKiBpYl9jcmVhdGVfYWgoKSB3aWxsIGluaXRpYWxpemUgYWgtPmliYWguICovCiAJYWgtPmF0dHIgPSAqYWhfYXR0cjsKQEAgLTkwMyw3ICsxMjU2LDkgQEAKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYoaWJhaC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgaXBhdGhfYWggKmFoID0gdG9faWFoKGliYWgpOwogCisJc3Bpbl9sb2NrKCZkZXYtPm5fYWhzX2xvY2spOwogCWRldi0+bl9haHNfYWxsb2NhdGVkLS07CisJc3Bpbl91bmxvY2soJmRldi0+bl9haHNfbG9jayk7CiAKIAlrZnJlZShhaCk7CiAKQEAgLTkxOSwyNSArMTI3NCw1MCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGlwYXRoX2dldF9ucGtleXMgLSByZXR1cm4gdGhlIHNpemUgb2YgdGhlIFBLRVkgdGFibGUgZm9yIHBvcnQgMAorICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKKyAqLwordW5zaWduZWQgaXBhdGhfZ2V0X25wa2V5cyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCit7CisJcmV0dXJuIEFSUkFZX1NJWkUoZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3BrZXlzKTsKK30KKworLyoqCisgKiBpcGF0aF9nZXRfcGtleSAtIHJldHVybiB0aGUgaW5kZXhlZCBQS0VZIGZyb20gdGhlIHBvcnQgMCBQS0VZIHRhYmxlCisgKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQGluZGV4OiB0aGUgUEtFWSBpbmRleAorICovCit1bnNpZ25lZCBpcGF0aF9nZXRfcGtleShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHVuc2lnbmVkIGluZGV4KQoreworCXVuc2lnbmVkIHJldDsKKworCWlmIChpbmRleCA+PSBBUlJBWV9TSVpFKGRkLT5pcGF0aF9wZFswXS0+cG9ydF9wa2V5cykpCisJCXJldCA9IDA7CisJZWxzZQorCQlyZXQgPSBkZC0+aXBhdGhfcGRbMF0tPnBvcnRfcGtleXNbaW5kZXhdOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBpcGF0aF9xdWVyeV9wa2V5KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2LCB1OCBwb3J0LCB1MTYgaW5kZXgsCiAJCQkgICAgdTE2ICpwa2V5KQogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmRldik7CiAJaW50IHJldDsKIAotCWlmIChpbmRleCA+PSBpcGF0aF9sYXllcl9nZXRfbnBrZXlzKGRldi0+ZGQpKSB7CisJaWYgKGluZGV4ID49IGlwYXRoX2dldF9ucGtleXMoZGV2LT5kZCkpIHsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBiYWlsOwogCX0KIAotCSpwa2V5ID0gaXBhdGhfbGF5ZXJfZ2V0X3BrZXkoZGV2LT5kZCwgaW5kZXgpOworCSpwa2V5ID0gaXBhdGhfZ2V0X3BrZXkoZGV2LT5kZCwgaW5kZXgpOwogCXJldCA9IDA7CiAKIGJhaWw6CiAJcmV0dXJuIHJldDsKIH0KIAotCiAvKioKICAqIGlwYXRoX2FsbG9jX3Vjb250ZXh0IC0gYWxsb2NhdGUgYSB1Y29udGVzdAogICogQGliZGV2OiB0aGUgaW5maW5pYmFuZCBkZXZpY2UKQEAgLTk3MCwyNiArMTM1MCw5MSBAQAogCiBzdGF0aWMgaW50IGlwYXRoX3ZlcmJzX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBpYl9kZXZpY2UgKmRldik7CiAKK3N0YXRpYyB2b2lkIF9fdmVyYnNfdGltZXIodW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopIGFyZzsKKworCS8qCisJICogSWYgcG9ydCAwIHJlY2VpdmUgcGFja2V0IGludGVycnVwdHMgYXJlIG5vdCBhdmFpbGFibGUsIG9yCisJICogY2FuIGJlIG1pc3NlZCwgcG9sbCB0aGUgcmVjZWl2ZSBxdWV1ZQorCSAqLworCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF9QT0xMX1JYX0lOVFIpCisJCWlwYXRoX2tyZWNlaXZlKGRkKTsKKworCS8qIEhhbmRsZSB2ZXJicyBsYXllciB0aW1lb3V0cy4gKi8KKwlpcGF0aF9pYl90aW1lcihkZC0+dmVyYnNfZGV2KTsKKworCW1vZF90aW1lcigmZGQtPnZlcmJzX3RpbWVyLCBqaWZmaWVzICsgMSk7Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX3RpbWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkvKgorCSAqIEVhcmx5IGNoaXBzIGhhZCBhIGRlc2lnbiBmbGF3IHdoZXJlIHRoZSBjaGlwIGFuZCBrZXJuZWwgaWRlYQorCSAqIG9mIHRoZSB0YWlsIHJlZ2lzdGVyIGRvbid0IGFsd2F5cyBhZ3JlZSwgYW5kIHRoZXJlZm9yZSB3ZSB3b24ndAorCSAqIGdldCBhbiBpbnRlcnJ1cHQgb24gdGhlIG5leHQgcGFja2V0IHJlY2VpdmVkLgorCSAqIElmIHRoZSBib2FyZCBzdXBwb3J0cyBwZXIgcGFja2V0IHJlY2VpdmUgaW50ZXJydXB0cywgdXNlIGl0LgorCSAqIE90aGVyd2lzZSwgdGhlIHRpbWVyIGZ1bmN0aW9uIHBlcmlvZGljYWxseSBjaGVja3MgZm9yIHBhY2tldHMKKwkgKiB0byBjb3ZlciB0aGlzIGNhc2UuCisJICogRWl0aGVyIHdheSwgdGhlIHRpbWVyIGlzIG5lZWRlZCBmb3IgdmVyYnMgbGF5ZXIgcmVsYXRlZAorCSAqIHByb2Nlc3NpbmcuCisJICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgeworCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2RlYnVncG9ydHNlbGVjdCwKKwkJCQkgMHgyMDc0MDc2NTQyMzEwVUxMKTsKKwkJLyogRW5hYmxlIEdQSU8gYml0IDIgaW50ZXJydXB0ICovCisJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLAorCQkJCSAodTY0KSAoMSA8PCAyKSk7CisJfQorCisJaW5pdF90aW1lcigmZGQtPnZlcmJzX3RpbWVyKTsKKwlkZC0+dmVyYnNfdGltZXIuZnVuY3Rpb24gPSBfX3ZlcmJzX3RpbWVyOworCWRkLT52ZXJic190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGQ7CisJZGQtPnZlcmJzX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgMTsKKwlhZGRfdGltZXIoJmRkLT52ZXJic190aW1lcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaXNhYmxlX3RpbWVyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwkvKiBEaXNhYmxlIEdQSU8gYml0IDIgaW50ZXJydXB0ICovCisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikKKwkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX21hc2ssIDApOworCisJZGVsX3RpbWVyX3N5bmMoJmRkLT52ZXJic190aW1lcik7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCiAgKiBpcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2UgLSByZWdpc3RlciBvdXIgZGV2aWNlIHdpdGggdGhlIGluZmluaWJhbmQgY29yZQotICogQHVuaXQ6IHRoZSBkZXZpY2UgbnVtYmVyIHRvIHJlZ2lzdGVyCiAgKiBAZGQ6IHRoZSBkZXZpY2UgZGF0YSBzdHJ1Y3R1cmUKICAqIFJldHVybiB0aGUgYWxsb2NhdGVkIGlwYXRoX2liZGV2IHBvaW50ZXIgb3IgTlVMTCBvbiBlcnJvci4KICAqLwotc3RhdGljIHZvaWQgKmlwYXRoX3JlZ2lzdGVyX2liX2RldmljZShpbnQgdW5pdCwgc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoraW50IGlwYXRoX3JlZ2lzdGVyX2liX2RldmljZShzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0Jc3RydWN0IGlwYXRoX2xheWVyX2NvdW50ZXJzIGNudHJzOworCXN0cnVjdCBpcGF0aF92ZXJic19jb3VudGVycyBjbnRyczsKIAlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmlkZXY7CiAJc3RydWN0IGliX2RldmljZSAqZGV2OwogCWludCByZXQ7CiAKIAlpZGV2ID0gKHN0cnVjdCBpcGF0aF9pYmRldiAqKWliX2FsbG9jX2RldmljZShzaXplb2YgKmlkZXYpOwotCWlmIChpZGV2ID09IE5VTEwpCisJaWYgKGlkZXYgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIGJhaWw7CisJfQogCiAJZGV2ID0gJmlkZXYtPmliZGV2OwogCiAJLyogT25seSBuZWVkIHRvIGluaXRpYWxpemUgbm9uLXplcm8gZmllbGRzLiAqLworCXNwaW5fbG9ja19pbml0KCZpZGV2LT5uX3Bkc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaWRldi0+bl9haHNfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmlkZXYtPm5fY3FzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpZGV2LT5uX3Fwc19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaWRldi0+bl9zcnFzX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZpZGV2LT5uX21jYXN0X2dycHNfbG9jayk7CisKIAlzcGluX2xvY2tfaW5pdCgmaWRldi0+cXBfdGFibGUubG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmlkZXYtPmxrX3RhYmxlLmxvY2spOwogCWlkZXYtPnNtX2xpZCA9IF9fY29uc3RhbnRfYmUxNl90b19jcHUoSUJfTElEX1BFUk1JU1NJVkUpOwpAQCAtMTAzMCw3ICsxNDc1LDcgQEAKIAlpZGV2LT5saW5rX3dpZHRoX2VuYWJsZWQgPSAzOwkvKiAxeCBvciA0eCAqLwogCiAJLyogU25hcHNob3QgY3VycmVudCBIVyBjb3VudGVycyB0byAiY2xlYXIiIHRoZW0uICovCi0JaXBhdGhfbGF5ZXJfZ2V0X2NvdW50ZXJzKGRkLCAmY250cnMpOworCWlwYXRoX2dldF9jb3VudGVycyhkZCwgJmNudHJzKTsKIAlpZGV2LT56X3N5bWJvbF9lcnJvcl9jb3VudGVyID0gY250cnMuc3ltYm9sX2Vycm9yX2NvdW50ZXI7CiAJaWRldi0+el9saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXIgPQogCQljbnRycy5saW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CkBAIC0xMDU0LDE0ICsxNDk5LDE0IEBACiAJICogZGV2aWNlIHR5cGVzIGluIHRoZSBzeXN0ZW0sIHdlIGNhbid0IGJlIHN1cmUgdGhpcyBpcyB1bmlxdWUuCiAJICovCiAJaWYgKCFzeXNfaW1hZ2VfZ3VpZCkKLQkJc3lzX2ltYWdlX2d1aWQgPSBpcGF0aF9sYXllcl9nZXRfZ3VpZChkZCk7CisJCXN5c19pbWFnZV9ndWlkID0gZGQtPmlwYXRoX2d1aWQ7CiAJaWRldi0+c3lzX2ltYWdlX2d1aWQgPSBzeXNfaW1hZ2VfZ3VpZDsKLQlpZGV2LT5pYl91bml0ID0gdW5pdDsKKwlpZGV2LT5pYl91bml0ID0gZGQtPmlwYXRoX3VuaXQ7CiAJaWRldi0+ZGQgPSBkZDsKIAogCXN0cmxjcHkoZGV2LT5uYW1lLCAiaXBhdGglZCIsIElCX0RFVklDRV9OQU1FX01BWCk7CiAJZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCWRldi0+bm9kZV9ndWlkID0gaXBhdGhfbGF5ZXJfZ2V0X2d1aWQoZGQpOworCWRldi0+bm9kZV9ndWlkID0gZGQtPmlwYXRoX2d1aWQ7CiAJZGV2LT51dmVyYnNfYWJpX3ZlciA9IElQQVRIX1VWRVJCU19BQklfVkVSU0lPTjsKIAlkZXYtPnV2ZXJic19jbWRfbWFzayA9CiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0dFVF9DT05URVhUKQkJfApAQCAtMTA5Myw5ICsxNTM4LDkgQEAKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUVVFUllfU1JRKQkJfAogCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1NSUSkJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TUlFfUkVDVik7Ci0JZGV2LT5ub2RlX3R5cGUgPSBJQl9OT0RFX0NBOworCWRldi0+bm9kZV90eXBlID0gUkRNQV9OT0RFX0lCX0NBOwogCWRldi0+cGh5c19wb3J0X2NudCA9IDE7Ci0JZGV2LT5kbWFfZGV2aWNlID0gaXBhdGhfbGF5ZXJfZ2V0X2RldmljZShkZCk7CisJZGV2LT5kbWFfZGV2aWNlID0gJmRkLT5wY2lkZXYtPmRldjsKIAlkZXYtPmNsYXNzX2Rldi5kZXYgPSBkZXYtPmRtYV9kZXZpY2U7CiAJZGV2LT5xdWVyeV9kZXZpY2UgPSBpcGF0aF9xdWVyeV9kZXZpY2U7CiAJZGV2LT5tb2RpZnlfZGV2aWNlID0gaXBhdGhfbW9kaWZ5X2RldmljZTsKQEAgLTExMzcsOSArMTU4MiwxMCBAQAogCWRldi0+YXR0YWNoX21jYXN0ID0gaXBhdGhfbXVsdGljYXN0X2F0dGFjaDsKIAlkZXYtPmRldGFjaF9tY2FzdCA9IGlwYXRoX211bHRpY2FzdF9kZXRhY2g7CiAJZGV2LT5wcm9jZXNzX21hZCA9IGlwYXRoX3Byb2Nlc3NfbWFkOworCWRldi0+bW1hcCA9IGlwYXRoX21tYXA7CiAKIAlzbnByaW50ZihkZXYtPm5vZGVfZGVzYywgc2l6ZW9mKGRldi0+bm9kZV9kZXNjKSwKLQkJIElQQVRIX0lEU1RSICIgJXMga2VybmVsX1NNQSIsIHN5c3RlbV91dHNuYW1lLm5vZGVuYW1lKTsKKwkJIElQQVRIX0lEU1RSICIgJXMiLCBzeXN0ZW1fdXRzbmFtZS5ub2RlbmFtZSk7CiAKIAlyZXQgPSBpYl9yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKIAlpZiAocmV0KQpAQCAtMTE0OCw3ICsxNTk0LDcgQEAKIAlpZiAoaXBhdGhfdmVyYnNfcmVnaXN0ZXJfc3lzZnMoZGV2KSkKIAkJZ290byBlcnJfY2xhc3M7CiAKLQlpcGF0aF9sYXllcl9lbmFibGVfdGltZXIoZGQpOworCWVuYWJsZV90aW1lcihkZCk7CiAKIAlnb3RvIGJhaWw7CiAKQEAgLTExNjAsMzcgKzE2MDYsMzIgQEAKIAlrZnJlZShpZGV2LT5xcF90YWJsZS50YWJsZSk7CiBlcnJfcXA6CiAJaWJfZGVhbGxvY19kZXZpY2UoZGV2KTsKLQlfVkVSQlNfRVJST1IoImliX2lwYXRoJWQgY2Fubm90IHJlZ2lzdGVyIHZlcmJzICglZCkhXG4iLAotCQkgICAgIHVuaXQsIC1yZXQpOworCWlwYXRoX2Rldl9lcnIoZGQsICJjYW5ub3QgcmVnaXN0ZXIgdmVyYnM6ICVkIVxuIiwgLXJldCk7CiAJaWRldiA9IE5VTEw7CiAKIGJhaWw6Ci0JcmV0dXJuIGlkZXY7CisJZGQtPnZlcmJzX2RldiA9IGlkZXY7CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgaXBhdGhfdW5yZWdpc3Rlcl9pYl9kZXZpY2Uodm9pZCAqYXJnKQordm9pZCBpcGF0aF91bnJlZ2lzdGVyX2liX2RldmljZShzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldikKIHsKLQlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IChzdHJ1Y3QgaXBhdGhfaWJkZXYgKikgYXJnOwogCXN0cnVjdCBpYl9kZXZpY2UgKmliZGV2ID0gJmRldi0+aWJkZXY7CiAKLQlpcGF0aF9sYXllcl9kaXNhYmxlX3RpbWVyKGRldi0+ZGQpOworCWRpc2FibGVfdGltZXIoZGV2LT5kZCk7CiAKIAlpYl91bnJlZ2lzdGVyX2RldmljZShpYmRldik7CiAKIAlpZiAoIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ1swXSkgfHwKIAkgICAgIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ1sxXSkgfHwKIAkgICAgIWxpc3RfZW1wdHkoJmRldi0+cGVuZGluZ1syXSkpCi0JCV9WRVJCU19FUlJPUigiaXBhdGglZCBwZW5kaW5nIGxpc3Qgbm90IGVtcHR5IVxuIiwKLQkJCSAgICAgZGV2LT5pYl91bml0KTsKKwkJaXBhdGhfZGV2X2VycihkZXYtPmRkLCAicGVuZGluZyBsaXN0IG5vdCBlbXB0eSFcbiIpOwogCWlmICghbGlzdF9lbXB0eSgmZGV2LT5waW93YWl0KSkKLQkJX1ZFUkJTX0VSUk9SKCJpcGF0aCVkIHBpb3dhaXQgbGlzdCBub3QgZW1wdHkhXG4iLAotCQkJICAgICBkZXYtPmliX3VuaXQpOworCQlpcGF0aF9kZXZfZXJyKGRldi0+ZGQsICJwaW93YWl0IGxpc3Qgbm90IGVtcHR5IVxuIik7CiAJaWYgKCFsaXN0X2VtcHR5KCZkZXYtPnJucndhaXQpKQotCQlfVkVSQlNfRVJST1IoImlwYXRoJWQgcm5yd2FpdCBsaXN0IG5vdCBlbXB0eSFcbiIsCi0JCQkgICAgIGRldi0+aWJfdW5pdCk7CisJCWlwYXRoX2Rldl9lcnIoZGV2LT5kZCwgInJucndhaXQgbGlzdCBub3QgZW1wdHkhXG4iKTsKIAlpZiAoIWlwYXRoX21jYXN0X3RyZWVfZW1wdHkoKSkKLQkJX1ZFUkJTX0VSUk9SKCJpcGF0aCVkIG11bHRpY2FzdCB0YWJsZSBtZW1vcnkgbGVhayFcbiIsCi0JCQkgICAgIGRldi0+aWJfdW5pdCk7CisJCWlwYXRoX2Rldl9lcnIoZGV2LT5kZCwgIm11bHRpY2FzdCB0YWJsZSBtZW1vcnkgbGVhayFcbiIpOwogCS8qCiAJICogTm90ZSB0aGF0IGlwYXRoX3VucmVnaXN0ZXJfaWJfZGV2aWNlKCkgY2FuIGJlIGNhbGxlZCBiZWZvcmUgYWxsCiAJICogdGhlIFFQcyBhcmUgZGVzdHJveWVkIQpAQCAtMTIwMSwyNSArMTY0MiwxMiBAQAogCWliX2RlYWxsb2NfZGV2aWNlKGliZGV2KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaXBhdGhfdmVyYnNfaW5pdCh2b2lkKQotewotCXJldHVybiBpcGF0aF92ZXJic19yZWdpc3RlcihpcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2UsCi0JCQkJICAgIGlwYXRoX3VucmVnaXN0ZXJfaWJfZGV2aWNlLAotCQkJCSAgICBpcGF0aF9pYl9waW9idWZhdmFpbCwgaXBhdGhfaWJfcmN2LAotCQkJCSAgICBpcGF0aF9pYl90aW1lcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpcGF0aF92ZXJic19jbGVhbnVwKHZvaWQpCi17Ci0JaXBhdGhfdmVyYnNfdW5yZWdpc3RlcigpOwotfQotCiBzdGF0aWMgc3NpemVfdCBzaG93X3JldihzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPQogCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOwogCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXhcbiIsIGlwYXRoX2xheWVyX2dldF9wY2lyZXYoZGV2LT5kZCkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV4XG4iLCBkZXYtPmRkLT5pcGF0aF9wY2lyZXYpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2hjYShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCkBAIC0xMjI4LDcgKzE2NTYsNyBAQAogCQljb250YWluZXJfb2YoY2Rldiwgc3RydWN0IGlwYXRoX2liZGV2LCBpYmRldi5jbGFzc19kZXYpOwogCWludCByZXQ7CiAKLQlyZXQgPSBpcGF0aF9sYXllcl9nZXRfYm9hcmRuYW1lKGRldi0+ZGQsIGJ1ZiwgMTI4KTsKKwlyZXQgPSBkZXYtPmRkLT5pcGF0aF9mX2dldF9ib2FyZG5hbWUoZGV2LT5kZCwgYnVmLCAxMjgpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGJhaWw7CiAJc3RyY2F0KGJ1ZiwgIlxuIik7CkBAIC0xMzA1LDYgKzE3MzMsMyBAQAogYmFpbDoKIAlyZXR1cm4gcmV0OwogfQotCi1tb2R1bGVfaW5pdChpcGF0aF92ZXJic19pbml0KTsKLW1vZHVsZV9leGl0KGlwYXRoX3ZlcmJzX2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaAppbmRleCAyZGY2ODQ3Li4wOWJiYjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaApAQCAtMzgsMTAgKzM4LDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8cmRtYS9pYl9wYWNrLmg+CiAKICNpbmNsdWRlICJpcGF0aF9sYXllci5oIgotI2luY2x1ZGUgInZlcmJzX2RlYnVnLmgiCiAKICNkZWZpbmUgUVBOX01BWCAgICAgICAgICAgICAgICAgKDEgPDwgMjQpCiAjZGVmaW5lIFFQTk1BUF9FTlRSSUVTICAgICAgICAgIChRUE5fTUFYIC8gUEFHRV9TSVpFIC8gQklUU19QRVJfQllURSkKQEAgLTUwLDcgKzUwLDcgQEAKICAqIEluY3JlbWVudCB0aGlzIHZhbHVlIGlmIGFueSBjaGFuZ2VzIHRoYXQgYnJlYWsgdXNlcnNwYWNlIEFCSQogICogY29tcGF0aWJpbGl0eSBhcmUgbWFkZS4KICAqLwotI2RlZmluZSBJUEFUSF9VVkVSQlNfQUJJX1ZFUlNJT04gICAgICAgMQorI2RlZmluZSBJUEFUSF9VVkVSQlNfQUJJX1ZFUlNJT04gICAgICAgMgogCiAvKgogICogRGVmaW5lIGFuIGliX2NxX25vdGlmeSB2YWx1ZSB0aGF0IGlzIG5vdCB2YWxpZCBzbyB3ZSBrbm93IHdoZW4gQ1EKQEAgLTE1MiwxOSArMTUyLDYgQEAKIAlpbnQgbl9hdHRhY2hlZDsKIH07CiAKLS8qIE1lbW9yeSByZWdpb24gKi8KLXN0cnVjdCBpcGF0aF9tciB7Ci0Jc3RydWN0IGliX21yIGlibXI7Ci0Jc3RydWN0IGlwYXRoX21yZWdpb24gbXI7CS8qIG11c3QgYmUgbGFzdCAqLwotfTsKLQotLyogRmFzdCBtZW1vcnkgcmVnaW9uICovCi1zdHJ1Y3QgaXBhdGhfZm1yIHsKLQlzdHJ1Y3QgaWJfZm1yIGliZm1yOwotCXU4IHBhZ2Vfc2hpZnQ7Ci0Jc3RydWN0IGlwYXRoX21yZWdpb24gbXI7CS8qIG11c3QgYmUgbGFzdCAqLwotfTsKLQogLyogUHJvdGVjdGlvbiBkb21haW4gKi8KIHN0cnVjdCBpcGF0aF9wZCB7CiAJc3RydWN0IGliX3BkIGlicGQ7CkBAIC0xNzgsNTggKzE2NSw4OSBAQAogfTsKIAogLyoKLSAqIFF1aWNrIGRlc2NyaXB0aW9uIG9mIG91ciBDUS9RUCBsb2NraW5nIHNjaGVtZToKLSAqCi0gKiBXZSBoYXZlIG9uZSBnbG9iYWwgbG9jayB0aGF0IHByb3RlY3RzIGRldi0+Y3EvcXBfdGFibGUuICBFYWNoCi0gKiBzdHJ1Y3QgaXBhdGhfY3EvcXAgYWxzbyBoYXMgaXRzIG93biBsb2NrLiAgQW4gaW5kaXZpZHVhbCBxcCBsb2NrCi0gKiBtYXkgYmUgdGFrZW4gaW5zaWRlIG9mIGFuIGluZGl2aWR1YWwgY3EgbG9jay4gIEJvdGggY3FzIGF0dGFjaGVkIHRvCi0gKiBhIHFwIG1heSBiZSBsb2NrZWQsIHdpdGggdGhlIHNlbmQgY3EgbG9ja2VkIGZpcnN0LiAgTm8gb3RoZXIKLSAqIG5lc3Rpbmcgc2hvdWxkIGJlIGRvbmUuCi0gKgotICogRWFjaCBzdHJ1Y3QgaXBhdGhfY3EvcXAgYWxzbyBoYXMgYW4gYXRvbWljX3QgcmVmIGNvdW50LiAgVGhlCi0gKiBwb2ludGVyIGZyb20gdGhlIGNxL3FwX3RhYmxlIHRvIHRoZSBzdHJ1Y3QgY291bnRzIGFzIG9uZSByZWZlcmVuY2UuCi0gKiBUaGlzIHJlZmVyZW5jZSBhbHNvIGlzIGdvb2QgZm9yIGFjY2VzcyB0aHJvdWdoIHRoZSBjb25zdW1lciBBUEksIHNvCi0gKiBtb2RpZnlpbmcgdGhlIENRL1FQIGV0YyBkb2Vzbid0IG5lZWQgdG8gdGFrZSBhbm90aGVyIHJlZmVyZW5jZS4KLSAqIEFjY2VzcyBiZWNhdXNlIG9mIGEgY29tcGxldGlvbiBiZWluZyBwb2xsZWQgZG9lcyBuZWVkIGEgcmVmZXJlbmNlLgotICoKLSAqIEZpbmFsbHksIGVhY2ggc3RydWN0IGlwYXRoX2NxL3FwIGhhcyBhIHdhaXRfcXVldWVfaGVhZF90IGZvciB0aGUKLSAqIGRlc3Ryb3kgZnVuY3Rpb24gdG8gc2xlZXAgb24uCi0gKgotICogVGhpcyBtZWFucyB0aGF0IGFjY2VzcyBmcm9tIHRoZSBjb25zdW1lciBBUEkgcmVxdWlyZXMgbm90aGluZyBidXQKLSAqIHRha2luZyB0aGUgc3RydWN0J3MgbG9jay4KLSAqCi0gKiBBY2Nlc3MgYmVjYXVzZSBvZiBhIGNvbXBsZXRpb24gZXZlbnQgc2hvdWxkIGdvIGFzIGZvbGxvd3M6Ci0gKiAtIGxvY2sgY3EvcXBfdGFibGUgYW5kIGxvb2sgdXAgc3RydWN0Ci0gKiAtIGluY3JlbWVudCByZWYgY291bnQgaW4gc3RydWN0Ci0gKiAtIGRyb3AgY3EvcXBfdGFibGUgbG9jawotICogLSBsb2NrIHN0cnVjdCwgZG8geW91ciB0aGluZywgYW5kIHVubG9jayBzdHJ1Y3QKLSAqIC0gZGVjcmVtZW50IHJlZiBjb3VudDsgaWYgemVybywgd2FrZSB1cCB3YWl0ZXJzCi0gKgotICogVG8gZGVzdHJveSBhIENRL1FQLCB3ZSBjYW4gZG8gdGhlIGZvbGxvd2luZzoKLSAqIC0gbG9jayBjcS9xcF90YWJsZSwgcmVtb3ZlIHBvaW50ZXIsIHVubG9jayBjcS9xcF90YWJsZSBsb2NrCi0gKiAtIGRlY3JlbWVudCByZWYgY291bnQKLSAqIC0gd2FpdF9ldmVudCB1bnRpbCByZWYgY291bnQgaXMgemVybwotICoKLSAqIEl0IGlzIHRoZSBjb25zdW1lcidzIHJlc3BvbnNpYmlsdHkgdG8gbWFrZSBzdXJlIHRoYXQgbm8gUVAKLSAqIG9wZXJhdGlvbnMgKFdRRSBwb3N0aW5nIG9yIHN0YXRlIG1vZGlmaWNhdGlvbikgYXJlIHBlbmRpbmcgd2hlbiB0aGUKLSAqIFFQIGlzIGRlc3Ryb3llZC4gIEFsc28sIHRoZSBjb25zdW1lciBtdXN0IG1ha2Ugc3VyZSB0aGF0IGNhbGxzIHRvCi0gKiBxcF9tb2RpZnkgYXJlIHNlcmlhbGl6ZWQuCi0gKgotICogUG9zc2libGUgb3B0aW1pemF0aW9ucyAod2FpdCBmb3IgcHJvZmlsZSBkYXRhIHRvIHNlZSBpZi93aGVyZSB3ZQotICogaGF2ZSBsb2NrcyBib3VuY2luZyBiZXR3ZWVuIENQVXMpOgotICogLSBzcGxpdCBjcS9xcCB0YWJsZSBsb2NrIGludG8gbiBzZXBhcmF0ZSAoY2FjaGUtYWxpZ25lZCkgbG9ja3MsCi0gKiAgIGluZGV4ZWQgKHNheSkgYnkgdGhlIHBhZ2UgaW4gdGhlIHRhYmxlCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGJ5IGlwYXRoX21tYXAoKSB0byB2YWxpZGF0ZSBhbiBvZmZzZXQKKyAqIHdoZW4gYW4gbW1hcCgpIHJlcXVlc3QgaXMgbWFkZS4gIFRoZSB2bV9hcmVhX3N0cnVjdCB0aGVuIHVzZXMKKyAqIHRoaXMgYXMgaXRzIHZtX3ByaXZhdGVfZGF0YS4KICAqLworc3RydWN0IGlwYXRoX21tYXBfaW5mbyB7CisJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqbmV4dDsKKwlzdHJ1Y3QgaWJfdWNvbnRleHQgKmNvbnRleHQ7CisJdm9pZCAqb2JqOworCXN0cnVjdCBrcmVmIHJlZjsKKwl1bnNpZ25lZCBzaXplOworCXVuc2lnbmVkIG1tYXBfY250OworfTsKIAorLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gY29udGFpbiB0aGUgaGVhZCBwb2ludGVyLCB0YWlsIHBvaW50ZXIsCisgKiBhbmQgY29tcGxldGlvbiBxdWV1ZSBlbnRyaWVzIGFzIGEgc2luZ2xlIG1lbW9yeSBhbGxvY2F0aW9uIHNvCisgKiBpdCBjYW4gYmUgbW1hcCdlZCBpbnRvIHVzZXIgc3BhY2UuCisgKi8KK3N0cnVjdCBpcGF0aF9jcV93YyB7CisJdTMyIGhlYWQ7CQkvKiBpbmRleCBvZiBuZXh0IGVudHJ5IHRvIGZpbGwgKi8KKwl1MzIgdGFpbDsJCS8qIGluZGV4IG9mIG5leHQgaWJfcG9sbF9jcSgpIGVudHJ5ICovCisJc3RydWN0IGliX3djIHF1ZXVlWzFdOwkvKiB0aGlzIGlzIGFjdHVhbGx5IHNpemUgaWJjcS5jcWUgKyAxICovCit9OworCisvKgorICogVGhlIGNvbXBsZXRpb24gcXVldWUgc3RydWN0dXJlLgorICovCiBzdHJ1Y3QgaXBhdGhfY3EgewogCXN0cnVjdCBpYl9jcSBpYmNxOwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCBjb21wdGFzazsKIAlzcGlubG9ja190IGxvY2s7CiAJdTggbm90aWZ5OwogCXU4IHRyaWdnZXJlZDsKLQl1MzIgaGVhZDsJCS8qIG5ldyByZWNvcmRzIGFkZGVkIHRvIHRoZSBoZWFkICovCi0JdTMyIHRhaWw7CQkvKiBwb2xsX2NxKCkgcmVhZHMgZnJvbSBoZXJlLiAqLwotCXN0cnVjdCBpYl93YyAqcXVldWU7CS8qIHRoaXMgaXMgYWN0dWFsbHkgaWJjcS5jcWUgKyAxICovCisJc3RydWN0IGlwYXRoX2NxX3djICpxdWV1ZTsKKwlzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvICppcDsKK307CisKKy8qCisgKiBBIHNlZ21lbnQgaXMgYSBsaW5lYXIgcmVnaW9uIG9mIGxvdyBwaHlzaWNhbCBtZW1vcnkuCisgKiBYWFggTWF5YmUgd2Ugc2hvdWxkIHVzZSBwaHlzIGFkZHIgaGVyZSBhbmQga21hcCgpL2t1bm1hcCgpLgorICogVXNlZCBieSB0aGUgdmVyYnMgbGF5ZXIuCisgKi8KK3N0cnVjdCBpcGF0aF9zZWcgeworCXZvaWQgKnZhZGRyOworCXNpemVfdCBsZW5ndGg7Cit9OworCisvKiBUaGUgbnVtYmVyIG9mIGlwYXRoX3NlZ3MgdGhhdCBmaXQgaW4gYSBwYWdlLiAqLworI2RlZmluZSBJUEFUSF9TRUdTWiAgICAgKFBBR0VfU0laRSAvIHNpemVvZiAoc3RydWN0IGlwYXRoX3NlZykpCisKK3N0cnVjdCBpcGF0aF9zZWdhcnJheSB7CisJc3RydWN0IGlwYXRoX3NlZyBzZWdzW0lQQVRIX1NFR1NaXTsKK307CisKK3N0cnVjdCBpcGF0aF9tcmVnaW9uIHsKKwl1NjQgdXNlcl9iYXNlOwkJLyogVXNlcidzIGFkZHJlc3MgZm9yIHRoaXMgcmVnaW9uICovCisJdTY0IGlvdmE7CQkvKiBJQiBzdGFydCBhZGRyZXNzIG9mIHRoaXMgcmVnaW9uICovCisJc2l6ZV90IGxlbmd0aDsKKwl1MzIgbGtleTsKKwl1MzIgb2Zmc2V0OwkJLyogb2Zmc2V0IChieXRlcykgdG8gc3RhcnQgb2YgcmVnaW9uICovCisJaW50IGFjY2Vzc19mbGFnczsKKwl1MzIgbWF4X3NlZ3M7CQkvKiBudW1iZXIgb2YgaXBhdGhfc2VncyBpbiBhbGwgdGhlIGFycmF5cyAqLworCXUzMiBtYXBzejsJCS8qIHNpemUgb2YgdGhlIG1hcCBhcnJheSAqLworCXN0cnVjdCBpcGF0aF9zZWdhcnJheSAqbWFwWzBdOwkvKiB0aGUgc2VnbWVudHMgKi8KK307CisKKy8qCisgKiBUaGVzZSBrZWVwIHRyYWNrIG9mIHRoZSBjb3B5IHByb2dyZXNzIHdpdGhpbiBhIG1lbW9yeSByZWdpb24uCisgKiBVc2VkIGJ5IHRoZSB2ZXJicyBsYXllci4KKyAqLworc3RydWN0IGlwYXRoX3NnZSB7CisJc3RydWN0IGlwYXRoX21yZWdpb24gKm1yOworCXZvaWQgKnZhZGRyOwkJLyogY3VycmVudCBwb2ludGVyIGludG8gdGhlIHNlZ21lbnQgKi8KKwl1MzIgc2dlX2xlbmd0aDsJCS8qIGxlbmd0aCBvZiB0aGUgU0dFICovCisJdTMyIGxlbmd0aDsJCS8qIHJlbWFpbmluZyBsZW5ndGggb2YgdGhlIHNlZ21lbnQgKi8KKwl1MTYgbTsJCQkvKiBjdXJyZW50IGluZGV4OiBtci0+bWFwW21dICovCisJdTE2IG47CQkJLyogY3VycmVudCBpbmRleDogbXItPm1hcFttXS0+c2Vnc1tuXSAqLworfTsKKworLyogTWVtb3J5IHJlZ2lvbiAqLworc3RydWN0IGlwYXRoX21yIHsKKwlzdHJ1Y3QgaWJfbXIgaWJtcjsKKwlzdHJ1Y3QgaXBhdGhfbXJlZ2lvbiBtcjsJLyogbXVzdCBiZSBsYXN0ICovCiB9OwogCiAvKgpAQCAtMjQ4LDMyICsyNjYsNTAgQEAKIAogLyoKICAqIFJlY2VpdmUgd29yayByZXF1ZXN0IHF1ZXVlIGVudHJ5LgotICogVGhlIHNpemUgb2YgdGhlIHNnX2xpc3QgaXMgZGV0ZXJtaW5lZCB3aGVuIHRoZSBRUCBpcyBjcmVhdGVkIGFuZCBzdG9yZWQKLSAqIGluIHFwLT5yX21heF9zZ2UuCisgKiBUaGUgc2l6ZSBvZiB0aGUgc2dfbGlzdCBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIFFQIChvciBTUlEpIGlzIGNyZWF0ZWQKKyAqIGFuZCBzdG9yZWQgaW4gcXAtPnJfcnEubWF4X3NnZSAob3Igc3JxLT5ycS5tYXhfc2dlKS4KICAqLwogc3RydWN0IGlwYXRoX3J3cWUgewogCXU2NCB3cl9pZDsKLQl1MzIgbGVuZ3RoOwkJLyogdG90YWwgbGVuZ3RoIG9mIGRhdGEgaW4gc2dfbGlzdCAqLwogCXU4IG51bV9zZ2U7Ci0Jc3RydWN0IGlwYXRoX3NnZSBzZ19saXN0WzBdOworCXN0cnVjdCBpYl9zZ2Ugc2dfbGlzdFswXTsKK307CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGNvbnRhaW4gdGhlIGhlYWQgcG9pbnRlciwgdGFpbCBwb2ludGVyLAorICogYW5kIHJlY2VpdmUgd29yayBxdWV1ZSBlbnRyaWVzIGFzIGEgc2luZ2xlIG1lbW9yeSBhbGxvY2F0aW9uIHNvCisgKiBpdCBjYW4gYmUgbW1hcCdlZCBpbnRvIHVzZXIgc3BhY2UuCisgKiBOb3RlIHRoYXQgdGhlIHdxIGFycmF5IGVsZW1lbnRzIGFyZSB2YXJpYWJsZSBzaXplIHNvIHlvdSBjYW4ndAorICoganVzdCBpbmRleCBpbnRvIHRoZSBhcnJheSB0byBnZXQgdGhlIE4ndGggZWxlbWVudDsKKyAqIHVzZSBnZXRfcndxZV9wdHIoKSBpbnN0ZWFkLgorICovCitzdHJ1Y3QgaXBhdGhfcndxIHsKKwl1MzIgaGVhZDsJCS8qIG5ldyB3b3JrIHJlcXVlc3RzIHBvc3RlZCB0byB0aGUgaGVhZCAqLworCXUzMiB0YWlsOwkJLyogcmVjZWl2ZXMgcHVsbCByZXF1ZXN0cyBmcm9tIGhlcmUuICovCisJc3RydWN0IGlwYXRoX3J3cWUgd3FbMF07CiB9OwogCiBzdHJ1Y3QgaXBhdGhfcnEgeworCXN0cnVjdCBpcGF0aF9yd3EgKndxOwogCXNwaW5sb2NrX3QgbG9jazsKLQl1MzIgaGVhZDsJCS8qIG5ldyB3b3JrIHJlcXVlc3RzIHBvc3RlZCB0byB0aGUgaGVhZCAqLwotCXUzMiB0YWlsOwkJLyogcmVjZWl2ZXMgcHVsbCByZXF1ZXN0cyBmcm9tIGhlcmUuICovCiAJdTMyIHNpemU7CQkvKiBzaXplIG9mIFJXUUUgYXJyYXkgKi8KIAl1OCBtYXhfc2dlOwotCXN0cnVjdCBpcGF0aF9yd3FlICp3cTsJLyogUldRRSBhcnJheSAqLwogfTsKIAogc3RydWN0IGlwYXRoX3NycSB7CiAJc3RydWN0IGliX3NycSBpYnNycTsKIAlzdHJ1Y3QgaXBhdGhfcnEgcnE7CisJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqaXA7CiAJLyogc2VuZCBzaWduYWwgd2hlbiBudW1iZXIgb2YgUldRRXMgPCBsaW1pdCAqLwogCXUzMiBsaW1pdDsKIH07CiAKK3N0cnVjdCBpcGF0aF9zZ2Vfc3RhdGUgeworCXN0cnVjdCBpcGF0aF9zZ2UgKnNnX2xpc3Q7ICAgICAgLyogbmV4dCBTR0UgdG8gYmUgdXNlZCBpZiBhbnkgKi8KKwlzdHJ1Y3QgaXBhdGhfc2dlIHNnZTsgICAvKiBwcm9ncmVzcyBzdGF0ZSBmb3IgdGhlIGN1cnJlbnQgU0dFICovCisJdTggbnVtX3NnZTsKK307CisKIC8qCiAgKiBWYXJpYWJsZXMgcHJlZml4ZWQgd2l0aCBzXyBhcmUgZm9yIHRoZSByZXF1ZXN0ZXIgKHNlbmRlcikuCiAgKiBWYXJpYWJsZXMgcHJlZml4ZWQgd2l0aCByXyBhcmUgZm9yIHRoZSByZXNwb25kZXIgKHJlY2VpdmVyKS4KQEAgLTI5Myw2ICszMjksNyBAQAogCWF0b21pY190IHJlZmNvdW50OwogCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7CiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNfdGFzazsKKwlzdHJ1Y3QgaXBhdGhfbW1hcF9pbmZvICppcDsKIAlzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzX2N1cl9zZ2U7CiAJc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSBzX3NnZTsJLyogY3VycmVudCBzZW5kIHJlcXVlc3QgZGF0YSAqLwogCS8qIGN1cnJlbnQgUkRNQSByZWFkIHNlbmQgZGF0YSAqLwpAQCAtMzM0LDYgKzM3MSw3IEBACiAJdTggc19yZXRyeTsJCS8qIHJlcXVlc3RlciByZXRyeSBjb3VudGVyICovCiAJdTggc19ybnJfcmV0cnk7CQkvKiByZXF1ZXN0ZXIgUk5SIHJldHJ5IGNvdW50ZXIgKi8KIAl1OCBzX3BrZXlfaW5kZXg7CS8qIFBLRVkgaW5kZXggdG8gdXNlICovCisJdTggdGltZW91dDsJCS8qIFRpbWVvdXQgZm9yIHRoaXMgUVAgKi8KIAllbnVtIGliX210dSBwYXRoX210dTsKIAl1MzIgcmVtb3RlX3FwbjsKIAl1MzIgcWtleTsJCS8qIFFLRVkgZm9yIHRoaXMgUVAgKGZvciBVRCBvciBSRCkgKi8KQEAgLTM0NSw3ICszODMsOCBAQAogCXUzMiBzX3NzbjsJCS8qIFNTTiBvZiB0YWlsIGVudHJ5ICovCiAJdTMyIHNfbHNuOwkJLyogbGltaXQgc2VxdWVuY2UgbnVtYmVyIChjcmVkaXQpICovCiAJc3RydWN0IGlwYXRoX3N3cWUgKnNfd3E7CS8qIHNlbmQgd29yayBxdWV1ZSAqLwotCXN0cnVjdCBpcGF0aF9ycSByX3JxOwkvKiByZWNlaXZlIHdvcmsgcXVldWUgKi8KKwlzdHJ1Y3QgaXBhdGhfcnEgcl9ycTsJCS8qIHJlY2VpdmUgd29yayBxdWV1ZSAqLworCXN0cnVjdCBpcGF0aF9zZ2Ugcl9zZ19saXN0WzBdOwkvKiB2ZXJpZmllZCBTR0VzICovCiB9OwogCiAvKgpAQCAtMzY5LDE1ICs0MDgsMTUgQEAKIAogLyoKICAqIFNpbmNlIHN0cnVjdCBpcGF0aF9yd3FlIGlzIG5vdCBhIGZpeGVkIHNpemUsIHdlIGNhbid0IHNpbXBseSBpbmRleCBpbnRvCi0gKiBzdHJ1Y3QgaXBhdGhfcnEud3EuICBUaGlzIGZ1bmN0aW9uIGRvZXMgdGhlIGFycmF5IGluZGV4IGNvbXB1dGF0aW9uLgorICogc3RydWN0IGlwYXRoX3J3cS53cS4gIFRoaXMgZnVuY3Rpb24gZG9lcyB0aGUgYXJyYXkgaW5kZXggY29tcHV0YXRpb24uCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX3J3cWUgKmdldF9yd3FlX3B0cihzdHJ1Y3QgaXBhdGhfcnEgKnJxLAogCQkJCQkgICAgICB1bnNpZ25lZCBuKQogewogCXJldHVybiAoc3RydWN0IGlwYXRoX3J3cWUgKikKLQkJKChjaGFyICopIHJxLT53cSArCisJCSgoY2hhciAqKSBycS0+d3EtPndxICsKIAkJIChzaXplb2Yoc3RydWN0IGlwYXRoX3J3cWUpICsKLQkJICBycS0+bWF4X3NnZSAqIHNpemVvZihzdHJ1Y3QgaXBhdGhfc2dlKSkgKiBuKTsKKwkJICBycS0+bWF4X3NnZSAqIHNpemVvZihzdHJ1Y3QgaWJfc2dlKSkgKiBuKTsKIH0KIAogLyoKQEAgLTQxNyw2ICs0NTYsNyBAQAogCXN0cnVjdCBpYl9kZXZpY2UgaWJkZXY7CiAJc3RydWN0IGxpc3RfaGVhZCBkZXZfbGlzdDsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CisJc3RydWN0IGlwYXRoX21tYXBfaW5mbyAqcGVuZGluZ19tbWFwczsKIAlpbnQgaWJfdW5pdDsJCS8qIFRoaXMgaXMgdGhlIGRldmljZSBudW1iZXIgKi8KIAl1MTYgc21fbGlkOwkJLyogaW4gaG9zdCBvcmRlciAqLwogCXU4IHNtX3NsOwpAQCAtNDM1LDExICs0NzUsMjAgQEAKIAlfX2JlNjQgc3lzX2ltYWdlX2d1aWQ7CS8qIGluIG5ldHdvcmsgb3JkZXIgKi8KIAlfX2JlNjQgZ2lkX3ByZWZpeDsJLyogaW4gbmV0d29yayBvcmRlciAqLwogCV9fYmU2NCBta2V5OworCiAJdTMyIG5fcGRzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIFBEcyBhbGxvY2F0ZWQgZm9yIGRldmljZSAqLworCXNwaW5sb2NrX3Qgbl9wZHNfbG9jazsKIAl1MzIgbl9haHNfYWxsb2NhdGVkOwkvKiBudW1iZXIgb2YgQUhzIGFsbG9jYXRlZCBmb3IgZGV2aWNlICovCisJc3BpbmxvY2tfdCBuX2Foc19sb2NrOwogCXUzMiBuX2Nxc19hbGxvY2F0ZWQ7CS8qIG51bWJlciBvZiBDUXMgYWxsb2NhdGVkIGZvciBkZXZpY2UgKi8KKwlzcGlubG9ja190IG5fY3FzX2xvY2s7CisJdTMyIG5fcXBzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIFFQcyBhbGxvY2F0ZWQgZm9yIGRldmljZSAqLworCXNwaW5sb2NrX3Qgbl9xcHNfbG9jazsKIAl1MzIgbl9zcnFzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIFNSUXMgYWxsb2NhdGVkIGZvciBkZXZpY2UgKi8KKwlzcGlubG9ja190IG5fc3Jxc19sb2NrOwogCXUzMiBuX21jYXN0X2dycHNfYWxsb2NhdGVkOyAvKiBudW1iZXIgb2YgbWNhc3QgZ3JvdXBzIGFsbG9jYXRlZCAqLworCXNwaW5sb2NrX3Qgbl9tY2FzdF9ncnBzX2xvY2s7CisKIAl1NjQgaXBhdGhfc3dvcmQ7CS8qIHRvdGFsIGR3b3JkcyBzZW50IChzYW1wbGUgcmVzdWx0KSAqLwogCXU2NCBpcGF0aF9yd29yZDsJLyogdG90YWwgZHdvcmRzIHJlY2VpdmVkIChzYW1wbGUgcmVzdWx0KSAqLwogCXU2NCBpcGF0aF9zcGt0czsJLyogdG90YWwgcGFja2V0cyBzZW50IChzYW1wbGUgcmVzdWx0KSAqLwpAQCAtNDk0LDggKzU0MywxOSBAQAogCXN0cnVjdCBpcGF0aF9vcGNvZGVfc3RhdHMgb3BzdGF0c1sxMjhdOwogfTsKIAotc3RydWN0IGlwYXRoX3Vjb250ZXh0IHsKLQlzdHJ1Y3QgaWJfdWNvbnRleHQgaWJ1Y29udGV4dDsKK3N0cnVjdCBpcGF0aF92ZXJic19jb3VudGVycyB7CisJdTY0IHN5bWJvbF9lcnJvcl9jb3VudGVyOworCXU2NCBsaW5rX2Vycm9yX3JlY292ZXJ5X2NvdW50ZXI7CisJdTY0IGxpbmtfZG93bmVkX2NvdW50ZXI7CisJdTY0IHBvcnRfcmN2X2Vycm9yczsKKwl1NjQgcG9ydF9yY3ZfcmVtcGh5c19lcnJvcnM7CisJdTY0IHBvcnRfeG1pdF9kaXNjYXJkczsKKwl1NjQgcG9ydF94bWl0X2RhdGE7CisJdTY0IHBvcnRfcmN2X2RhdGE7CisJdTY0IHBvcnRfeG1pdF9wYWNrZXRzOworCXU2NCBwb3J0X3Jjdl9wYWNrZXRzOworCXUzMiBsb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnM7CisJdTMyIGV4Y2Vzc2l2ZV9idWZmZXJfb3ZlcnJ1bl9lcnJvcnM7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF9tciAqdG9faW1yKHN0cnVjdCBpYl9tciAqaWJtcikKQEAgLTUwMywxMSArNTYzLDYgQEAKIAlyZXR1cm4gY29udGFpbmVyX29mKGlibXIsIHN0cnVjdCBpcGF0aF9tciwgaWJtcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX2ZtciAqdG9faWZtcihzdHJ1Y3QgaWJfZm1yICppYmZtcikKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGliZm1yLCBzdHJ1Y3QgaXBhdGhfZm1yLCBpYmZtcik7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwYXRoX3BkICp0b19pcGQoc3RydWN0IGliX3BkICppYnBkKQogewogCXJldHVybiBjb250YWluZXJfb2YoaWJwZCwgc3RydWN0IGlwYXRoX3BkLCBpYnBkKTsKQEAgLTU0NSwxMiArNjAwLDYgQEAKIAkJICAgICAgc3RydWN0IGliX2dyaCAqaW5fZ3JoLAogCQkgICAgICBzdHJ1Y3QgaWJfbWFkICppbl9tYWQsIHN0cnVjdCBpYl9tYWQgKm91dF9tYWQpOwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcGF0aF91Y29udGV4dCAqdG9faXVjb250ZXh0KHN0cnVjdCBpYl91Y29udGV4dAotCQkJCQkJICAqaWJ1Y29udGV4dCkKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGlidWNvbnRleHQsIHN0cnVjdCBpcGF0aF91Y29udGV4dCwgaWJ1Y29udGV4dCk7Ci19Ci0KIC8qCiAgKiBDb21wYXJlIHRoZSBsb3dlciAyNCBiaXRzIG9mIHRoZSB0d28gdmFsdWVzLgogICogUmV0dXJucyBhbiBpbnRlZ2VyIDwsID09LCBvciA+IHRoYW4gemVyby4KQEAgLTU2Miw2ICs2MTEsMTMgQEAKIAogc3RydWN0IGlwYXRoX21jYXN0ICppcGF0aF9tY2FzdF9maW5kKHVuaW9uIGliX2dpZCAqbWdpZCk7CiAKK2ludCBpcGF0aF9zbmFwc2hvdF9jb3VudGVycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU2NCAqc3dvcmRzLAorCQkJICAgIHU2NCAqcndvcmRzLCB1NjQgKnNwa3RzLCB1NjQgKnJwa3RzLAorCQkJICAgIHU2NCAqeG1pdF93YWl0KTsKKworaW50IGlwYXRoX2dldF9jb3VudGVycyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsCisJCSAgICAgICBzdHJ1Y3QgaXBhdGhfdmVyYnNfY291bnRlcnMgKmNudHJzKTsKKwogaW50IGlwYXRoX211bHRpY2FzdF9hdHRhY2goc3RydWN0IGliX3FwICppYnFwLCB1bmlvbiBpYl9naWQgKmdpZCwgdTE2IGxpZCk7CiAKIGludCBpcGF0aF9tdWx0aWNhc3RfZGV0YWNoKHN0cnVjdCBpYl9xcCAqaWJxcCwgdW5pb24gaWJfZ2lkICpnaWQsIHUxNiBsaWQpOwpAQCAtNTc5LDcgKzYzNSw3IEBACiBpbnQgaXBhdGhfZGVzdHJveV9xcChzdHJ1Y3QgaWJfcXAgKmlicXApOwogCiBpbnQgaXBhdGhfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCi0JCSAgICBpbnQgYXR0cl9tYXNrKTsKKwkJICAgIGludCBhdHRyX21hc2ssIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogCiBpbnQgaXBhdGhfcXVlcnlfcXAoc3RydWN0IGliX3FwICppYnFwLCBzdHJ1Y3QgaWJfcXBfYXR0ciAqYXR0ciwKIAkJICAgaW50IGF0dHJfbWFzaywgc3RydWN0IGliX3FwX2luaXRfYXR0ciAqaW5pdF9hdHRyKTsKQEAgLTU5Miw2ICs2NDgsOSBAQAogCiB2b2lkIGlwYXRoX2dldF9jcmVkaXQoc3RydWN0IGlwYXRoX3FwICpxcCwgdTMyIGFldGgpOwogCitpbnQgaXBhdGhfdmVyYnNfc2VuZChzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHUzMiBoZHJ3b3JkcywKKwkJICAgICB1MzIgKmhkciwgdTMyIGxlbiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MpOworCiB2b2lkIGlwYXRoX2NxX2VudGVyKHN0cnVjdCBpcGF0aF9jcSAqY3EsIHN0cnVjdCBpYl93YyAqZW50cnksIGludCBzaWcpOwogCiBpbnQgaXBhdGhfcmtleV9vayhzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsCkBAIC02MzgsNyArNjk3LDggQEAKIAkJCQlzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAogaW50IGlwYXRoX21vZGlmeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwKLQkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrKTsKKwkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrLAorCQkgICAgIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogCiBpbnQgaXBhdGhfcXVlcnlfc3JxKHN0cnVjdCBpYl9zcnEgKmlic3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKmF0dHIpOwogCkBAIC02ODAsNiArNzQwLDEwIEBACiAKIGludCBpcGF0aF9kZWFsbG9jX2ZtcihzdHJ1Y3QgaWJfZm1yICppYmZtcik7CiAKK3ZvaWQgaXBhdGhfcmVsZWFzZV9tbWFwX2luZm8oc3RydWN0IGtyZWYgKnJlZik7CisKK2ludCBpcGF0aF9tbWFwKHN0cnVjdCBpYl91Y29udGV4dCAqY29udGV4dCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOworCiB2b2lkIGlwYXRoX25vX2J1ZnNfYXZhaWxhYmxlKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpcGF0aF9pYmRldiAqZGV2KTsKIAogdm9pZCBpcGF0aF9pbnNlcnRfcm5yX3F1ZXVlKHN0cnVjdCBpcGF0aF9xcCAqcXApOwpAQCAtNzAwLDYgKzc2NCwyMiBAQAogaW50IGlwYXRoX21ha2VfdWNfcmVxKHN0cnVjdCBpcGF0aF9xcCAqcXAsIHN0cnVjdCBpcGF0aF9vdGhlcl9oZWFkZXJzICpvaGRyLAogCQkgICAgICB1MzIgcG10dSwgdTMyICpidGgwcCwgdTMyICpidGgycCk7CiAKK2ludCBpcGF0aF9yZWdpc3Rlcl9pYl9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisKK3ZvaWQgaXBhdGhfdW5yZWdpc3Rlcl9pYl9kZXZpY2Uoc3RydWN0IGlwYXRoX2liZGV2ICopOworCit2b2lkIGlwYXRoX2liX3JjdihzdHJ1Y3QgaXBhdGhfaWJkZXYgKiwgdm9pZCAqLCB2b2lkICosIHUzMik7CisKK2ludCBpcGF0aF9pYl9waW9idWZhdmFpbChzdHJ1Y3QgaXBhdGhfaWJkZXYgKik7CisKK3ZvaWQgaXBhdGhfaWJfdGltZXIoc3RydWN0IGlwYXRoX2liZGV2ICopOworCit1bnNpZ25lZCBpcGF0aF9nZXRfbnBrZXlzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOworCit1MzIgaXBhdGhfZ2V0X2NyX2VycnBrZXkoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CisKK3Vuc2lnbmVkIGlwYXRoX2dldF9wa2V5KHN0cnVjdCBpcGF0aF9kZXZkYXRhICosIHVuc2lnbmVkKTsKKwogZXh0ZXJuIGNvbnN0IGVudW0gaWJfd2Nfb3Bjb2RlIGliX2lwYXRoX3djX29wY29kZVtdOwogCiBleHRlcm4gY29uc3QgdTggaXBhdGhfY3Z0X3BoeXNwb3J0c3RhdGVbXTsKQEAgLTcxNCw2ICs3OTQsOCBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IGliX2lwYXRoX21heF9xcF93cnM7CiAKK2V4dGVybiB1bnNpZ25lZCBpbnQgaWJfaXBhdGhfbWF4X3FwczsKKwogZXh0ZXJuIHVuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfc2dlczsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBpYl9pcGF0aF9tYXhfbWNhc3RfZ3JwczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJic19tY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKaW5kZXggZWUwZTFkOS4uMDg1ZTI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzX21jYXN0LmMKQEAgLTIwNywxMiArMjA3LDE3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlzcGluX2xvY2soJmRldi0+bl9tY2FzdF9ncnBzX2xvY2spOwogCWlmIChkZXYtPm5fbWNhc3RfZ3Jwc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X21jYXN0X2dycHMpIHsKKwkJc3Bpbl91bmxvY2soJmRldi0+bl9tY2FzdF9ncnBzX2xvY2spOwogCQlyZXQgPSBFTk9NRU07CiAJCWdvdG8gYmFpbDsKIAl9CiAKIAlkZXYtPm5fbWNhc3RfZ3Jwc19hbGxvY2F0ZWQrKzsKKwlzcGluX3VubG9jaygmZGV2LT5uX21jYXN0X2dycHNfbG9jayk7CisKKwltY2FzdC0+bl9hdHRhY2hlZCsrOwogCiAJbGlzdF9hZGRfdGFpbF9yY3UoJm1xcC0+bGlzdCwgJm1jYXN0LT5xcF9saXN0KTsKIApAQCAtMzQzLDcgKzM0OCw5IEBACiAJCWF0b21pY19kZWMoJm1jYXN0LT5yZWZjb3VudCk7CiAJCXdhaXRfZXZlbnQobWNhc3QtPndhaXQsICFhdG9taWNfcmVhZCgmbWNhc3QtPnJlZmNvdW50KSk7CiAJCWlwYXRoX21jYXN0X2ZyZWUobWNhc3QpOworCQlzcGluX2xvY2soJmRldi0+bl9tY2FzdF9ncnBzX2xvY2spOwogCQlkZXYtPm5fbWNhc3RfZ3Jwc19hbGxvY2F0ZWQtLTsKKwkJc3Bpbl91bmxvY2soJmRldi0+bl9tY2FzdF9ncnBzX2xvY2spOwogCX0KIAogCXJldCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfd2NfcHBjNjQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y19wcGM2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzNmZkZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfd2NfcHBjNjQuYwpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCisgKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKKyAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQorICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKKyAqCisgKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgorICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lci4KKyAqCisgKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIFRoaXMgZmlsZSBpcyBjb25kaXRpb25hbGx5IGJ1aWx0IG9uIFBvd2VyUEMgb25seS4gIE90aGVyd2lzZSB3ZWFrIHN5bWJvbAorICogdmVyc2lvbnMgb2YgdGhlIGZ1bmN0aW9ucyBleHBvcnRlZCBmcm9tIGhlcmUgYXJlIHVzZWQuCisgKi8KKworI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgorCisvKioKKyAqIGlwYXRoX3Vub3JkZXJlZF93YyAtIGluZGljYXRlIHdoZXRoZXIgd3JpdGUgY29tYmluaW5nIGlzIG9yZGVyZWQKKyAqCisgKiBQb3dlclBDIHN5c3RlbXMgKGF0IGxlYXN0IHRob3NlIGluIHRoZSA5NzAgcHJvY2Vzc29yIGZhbWlseSkKKyAqIHdyaXRlIHBhcnRpYWxseSBmaWxsZWQgc3RvcmUgYnVmZmVycyBpbiBhZGRyZXNzIG9yZGVyLCBidXQgd2lsbCB3cml0ZQorICogY29tcGxldGVseSBmaWxsZWQgc3RvcmUgYnVmZmVycyBpbiAicmFuZG9tIiBvcmRlciwgYW5kIHRoZXJlZm9yZSBtdXN0CisgKiBoYXZlIHNlcmlhbGl6YXRpb24gZm9yIGNvcnJlY3RuZXNzIHdpdGggY3VycmVudCBJbmZpbmlQYXRoIGNoaXBzLgorICoKKyAqLworaW50IGlwYXRoX3Vub3JkZXJlZF93Yyh2b2lkKQoreworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL3ZlcmJzX2RlYnVnLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvdmVyYnNfZGVidWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjE4NjY3Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvdmVyYnNfZGVidWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFFMb2dpYywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFBhdGhTY2FsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhIGNob2ljZSBvZiBvbmUgb2YgdHdvCi0gKiBsaWNlbnNlcy4gIFlvdSBtYXkgY2hvb3NlIHRvIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgYXZhaWxhYmxlIGZyb20gdGhlIGZpbGUKLSAqIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUsIG9yIHRoZQotICogT3BlbklCLm9yZyBCU0QgbGljZW5zZSBiZWxvdzoKLSAqCi0gKiAgICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvcgotICogICAgIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZwotICogICAgIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQotICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgZGlzY2xhaW1lci4KLSAqCi0gKiAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCi0gKiAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCi0gKiAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAotICogRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAotICogTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUwotICogQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCi0gKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgotICogQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQotICogU09GVFdBUkUuCi0gKi8KLQotI2lmbmRlZiBfVkVSQlNfREVCVUdfSAotI2RlZmluZSBfVkVSQlNfREVCVUdfSAotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRyYWNpbmcgY29kZSBmb3IgdGhlIGliX2lwYXRoIGtlcm5lbCBtb2R1bGUuCi0gKi8KLSNpZm5kZWYgX1ZFUkJTX0RFQlVHR0lORwkvKiB0cmFjaW5nIGVuYWJsZWQgb3Igbm90ICovCi0jZGVmaW5lIF9WRVJCU19ERUJVR0dJTkcgMQotI2VuZGlmCi0KLWV4dGVybiB1bnNpZ25lZCBpYl9pcGF0aF9kZWJ1ZzsKLQotI2RlZmluZSBfVkVSQlNfRVJST1IoZm10LC4uLikgXAotCWRvIHsgXAotCQlwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCwgImliX2lwYXRoIiwgIyNfX1ZBX0FSR1NfXyk7IFwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgX1ZFUkJTX1VOSVRfRVJST1IodW5pdCxmbXQsLi4uKSBcCi0JZG8geyBcCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6ICIgZm10LCAiaWJfaXBhdGgiLCAjI19fVkFfQVJHU19fKTsgXAotCX0gd2hpbGUoMCkKLQotI2lmIF9WRVJCU19ERUJVR0dJTkcKLQotLyoKLSAqIE1hc2sgdmFsdWVzIGZvciBkZWJ1Z2dpbmcuICBUaGUgc2NoZW1lIGFsbG93cyB1cyB0byBjb21waWxlIG91dCBhbnkKLSAqIG9mIHRoZSBkZWJ1ZyB0cmFjaW5nIHN0dWZmLCBhbmQgaWYgY29tcGlsZWQgaW4sIHRvIGVuYWJsZSBvcgotICogZGlzYWJsZSBkeW5hbWljYWxseS4KLSAqIFRoaXMgY2FuIGJlIHNldCBhdCBtb2Rwcm9iZSB0aW1lIGFsc286Ci0gKiAgICAgIG1vZHByb2JlIGliX3BhdGggaWJfaXBhdGhfZGVidWc9MwotICovCi0KLSNkZWZpbmUgX19WRVJCU19JTkZPICAgICAgICAweDEJLyogZ2VuZXJpYyBsb3cgdmVyYm9zaXR5IHN0dWZmICovCi0jZGVmaW5lIF9fVkVSQlNfREJHICAgICAgICAgMHgyCS8qIGdlbmVyaWMgZGVidWcgKi8KLSNkZWZpbmUgX19WRVJCU19WREJHICAgICAgICAweDQJLyogdmVyYm9zZSBkZWJ1ZyAqLwotI2RlZmluZSBfX1ZFUkJTX1NNQURCRyAgICAgIDB4ODAwMAkvKiBzbWEgcGFja2V0IGRlYnVnICovCi0KLSNkZWZpbmUgX1ZFUkJTX0lORk8oZm10LC4uLikgXAotCWRvIHsgXAotCQlpZiAodW5saWtlbHkoaWJfaXBhdGhfZGVidWcmX19WRVJCU19JTkZPKSkgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm10LCJpYl9pcGF0aCIsIFwKLQkJCSAgICAgICAjI19fVkFfQVJHU19fKTsgXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBfVkVSQlNfREJHKGZtdCwuLi4pIFwKLQlkbyB7IFwKLQkJaWYgKHVubGlrZWx5KGliX2lwYXRoX2RlYnVnJl9fVkVSQlNfREJHKSkgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18sIFwKLQkJCSAgICAgICAjI19fVkFfQVJHU19fKTsgXAotCX0gd2hpbGUoMCkKLQotI2RlZmluZSBfVkVSQlNfVkRCRyhmbXQsLi4uKSBcCi0JZG8geyBcCi0JCWlmICh1bmxpa2VseShpYl9pcGF0aF9kZWJ1ZyZfX1ZFUkJTX1ZEQkcpKSBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXywgXAotCQkJICAgICAgICMjX19WQV9BUkdTX18pOyBcCi0JfSB3aGlsZSgwKQotCi0jZGVmaW5lIF9WRVJCU19TTUFEQkcoZm10LC4uLikgXAotCWRvIHsgXAotCQlpZiAodW5saWtlbHkoaWJfaXBhdGhfZGVidWcmX19WRVJCU19TTUFEQkcpKSBcCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXywgXAotCQkJICAgICAgICMjX19WQV9BUkdTX18pOyBcCi0JfSB3aGlsZSgwKQotCi0jZWxzZSAvKiAhIF9WRVJCU19ERUJVR0dJTkcgKi8KLQotI2RlZmluZSBfVkVSQlNfSU5GTyhmbXQsLi4uKQotI2RlZmluZSBfVkVSQlNfREJHKGZtdCwuLi4pCi0jZGVmaW5lIF9WRVJCU19WREJHKGZtdCwuLi4pCi0jZGVmaW5lIF9WRVJCU19TTUFEQkcoZm10LC4uLikKLQotI2VuZGlmIC8qIF9WRVJCU19ERUJVR0dJTkcgKi8KLQotI2VuZGlmIC8qIF9WRVJCU19ERUJVR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYWxsb2NhdG9yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYWxsb2NhdG9yLmMKaW5kZXggOWJhMzIxMWMuLmY5MzBlNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9hbGxvY2F0b3IuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYWxsb2NhdG9yLmMKQEAgLTQxLDkgKzQxLDExIEBACiAvKiBUcml2aWFsIGJpdG1hcC1iYXNlZCBhbGxvY2F0b3IgKi8KIHUzMiBtdGhjYV9hbGxvYyhzdHJ1Y3QgbXRoY2FfYWxsb2MgKmFsbG9jKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIG9iajsKIAotCXNwaW5fbG9jaygmYWxsb2MtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZhbGxvYy0+bG9jaywgZmxhZ3MpOworCiAJb2JqID0gZmluZF9uZXh0X3plcm9fYml0KGFsbG9jLT50YWJsZSwgYWxsb2MtPm1heCwgYWxsb2MtPmxhc3QpOwogCWlmIChvYmogPj0gYWxsb2MtPm1heCkgewogCQlhbGxvYy0+dG9wID0gKGFsbG9jLT50b3AgKyBhbGxvYy0+bWF4KSAmIGFsbG9jLT5tYXNrOwpAQCAtNTYsMTkgKzU4LDI0IEBACiAJfSBlbHNlCiAJCW9iaiA9IC0xOwogCi0Jc3Bpbl91bmxvY2soJmFsbG9jLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbGxvYy0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIG9iajsKIH0KIAogdm9pZCBtdGhjYV9mcmVlKHN0cnVjdCBtdGhjYV9hbGxvYyAqYWxsb2MsIHUzMiBvYmopCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwogCW9iaiAmPSBhbGxvYy0+bWF4IC0gMTsKLQlzcGluX2xvY2soJmFsbG9jLT5sb2NrKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZhbGxvYy0+bG9jaywgZmxhZ3MpOworCiAJY2xlYXJfYml0KG9iaiwgYWxsb2MtPnRhYmxlKTsKIAlhbGxvYy0+bGFzdCA9IG1pbihhbGxvYy0+bGFzdCwgb2JqKTsKIAlhbGxvYy0+dG9wID0gKGFsbG9jLT50b3AgKyBhbGxvYy0+bWF4KSAmIGFsbG9jLT5tYXNrOwotCXNwaW5fdW5sb2NrKCZhbGxvYy0+bG9jayk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbGxvYy0+bG9jaywgZmxhZ3MpOwogfQogCiBpbnQgbXRoY2FfYWxsb2NfaW5pdChzdHJ1Y3QgbXRoY2FfYWxsb2MgKmFsbG9jLCB1MzIgbnVtLCB1MzIgbWFzaywKQEAgLTEwOCwxNCArMTE1LDE1IEBACiAgKiBzZXJpYWxpemUgYWNjZXNzIHRvIHRoZSBhcnJheS4KICAqLwogCisjZGVmaW5lIE1USENBX0FSUkFZX01BU0sgKFBBR0VfU0laRSAvIHNpemVvZiAodm9pZCAqKSAtIDEpCisKIHZvaWQgKm10aGNhX2FycmF5X2dldChzdHJ1Y3QgbXRoY2FfYXJyYXkgKmFycmF5LCBpbnQgaW5kZXgpCiB7CiAJaW50IHAgPSAoaW5kZXggKiBzaXplb2YgKHZvaWQgKikpID4+IFBBR0VfU0hJRlQ7CiAKLQlpZiAoYXJyYXktPnBhZ2VfbGlzdFtwXS5wYWdlKSB7Ci0JCWludCBpID0gaW5kZXggJiAoUEFHRV9TSVpFIC8gc2l6ZW9mICh2b2lkICopIC0gMSk7Ci0JCXJldHVybiBhcnJheS0+cGFnZV9saXN0W3BdLnBhZ2VbaV07Ci0JfSBlbHNlCisJaWYgKGFycmF5LT5wYWdlX2xpc3RbcF0ucGFnZSkKKwkJcmV0dXJuIGFycmF5LT5wYWdlX2xpc3RbcF0ucGFnZVtpbmRleCAmIE1USENBX0FSUkFZX01BU0tdOworCWVsc2UKIAkJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTEzMCw4ICsxMzgsNyBAQAogCWlmICghYXJyYXktPnBhZ2VfbGlzdFtwXS5wYWdlKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWFycmF5LT5wYWdlX2xpc3RbcF0ucGFnZVtpbmRleCAmIChQQUdFX1NJWkUgLyBzaXplb2YgKHZvaWQgKikgLSAxKV0gPQotCQl2YWx1ZTsKKwlhcnJheS0+cGFnZV9saXN0W3BdLnBhZ2VbaW5kZXggJiBNVEhDQV9BUlJBWV9NQVNLXSA9IHZhbHVlOwogCSsrYXJyYXktPnBhZ2VfbGlzdFtwXS51c2VkOwogCiAJcmV0dXJuIDA7CkBAIC0xNDQsNyArMTUxLDggQEAKIAlpZiAoLS1hcnJheS0+cGFnZV9saXN0W3BdLnVzZWQgPT0gMCkgewogCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGFycmF5LT5wYWdlX2xpc3RbcF0ucGFnZSk7CiAJCWFycmF5LT5wYWdlX2xpc3RbcF0ucGFnZSA9IE5VTEw7Ci0JfQorCX0gZWxzZQorCQlhcnJheS0+cGFnZV9saXN0W3BdLnBhZ2VbaW5kZXggJiBNVEhDQV9BUlJBWV9NQVNLXSA9IE5VTEw7CiAKIAlpZiAoYXJyYXktPnBhZ2VfbGlzdFtwXS51c2VkIDwgMCkKIAkJcHJfZGVidWcoIkFycmF5ICVwIGluZGV4ICVkIHBhZ2UgJWQgd2l0aCByZWYgY291bnQgJWQgPCAwXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2F2LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYwppbmRleCBlMjE1MDQxLi42OTU5OTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfYXYuYwpAQCAtOTAsNyArOTAsNyBAQAogCWNhc2UgTVRIQ0FfUkFURV9UQVZPUl8xWDogICAgIHJldHVybiBJQl9SQVRFXzJfNV9HQlBTOwogCWNhc2UgTVRIQ0FfUkFURV9UQVZPUl8xWF9ERFI6IHJldHVybiBJQl9SQVRFXzVfR0JQUzsKIAljYXNlIE1USENBX1JBVEVfVEFWT1JfNFg6ICAgICByZXR1cm4gSUJfUkFURV8xMF9HQlBTOwotCWRlZmF1bHQ6CQkgICAgICByZXR1cm4gcG9ydF9yYXRlOworCWRlZmF1bHQ6CQkgICAgICByZXR1cm4gbXVsdF90b19pYl9yYXRlKHBvcnRfcmF0ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jYXRhcy5jCmluZGV4IGMzYmVjNzQuLmNkMDQ0ZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY2F0YXMuYwpAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlICJtdGhjYV9kZXYuaCIKIApAQCAtNDgsOSArNDksNDEgQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhjYXRhc19sb2NrKTsKIAorc3RhdGljIExJU1RfSEVBRChjYXRhc19saXN0KTsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY2F0YXNfd3E7CitzdGF0aWMgc3RydWN0IHdvcmtfc3RydWN0IGNhdGFzX3dvcms7CisKK3N0YXRpYyBpbnQgY2F0YXNfcmVzZXRfZGlzYWJsZTsKK21vZHVsZV9wYXJhbV9uYW1lZChjYXRhc19yZXNldF9kaXNhYmxlLCBjYXRhc19yZXNldF9kaXNhYmxlLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhjYXRhc19yZXNldF9kaXNhYmxlLCAiZGlzYWJsZSByZXNldCBvbiBjYXRhc3Ryb3BoaWMgZXZlbnQgaWYgbm9uemVybyIpOworCitzdGF0aWMgdm9pZCBjYXRhc19yZXNldCh2b2lkICp3b3JrX3B0cikKK3sKKwlzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsICp0bXBkZXY7CisJTElTVF9IRUFEKHRsaXN0KTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmbXRoY2FfZGV2aWNlX211dGV4KTsKKworCXNwaW5fbG9ja19pcnEoJmNhdGFzX2xvY2spOworCWxpc3Rfc3BsaWNlX2luaXQoJmNhdGFzX2xpc3QsICZ0bGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxKCZjYXRhc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcGRldiwgJnRsaXN0LCBjYXRhc19lcnIubGlzdCkgeworCQlyZXQgPSBfX210aGNhX3Jlc3RhcnRfb25lKGRldi0+cGRldik7CisJCWlmIChyZXQpCisJCQltdGhjYV9lcnIoZGV2LCAiUmVzZXQgZmFpbGVkICglZClcbiIsIHJldCk7CisJCWVsc2UKKwkJCW10aGNhX2RiZyhkZXYsICJSZXNldCBzdWNjZWVkZWRcbiIpOworCX0KKworCW11dGV4X3VubG9jaygmbXRoY2FfZGV2aWNlX211dGV4KTsKK30KKwogc3RhdGljIHZvaWQgaGFuZGxlX2NhdGFzKHN0cnVjdCBtdGhjYV9kZXYgKmRldikKIHsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAljb25zdCBjaGFyICp0eXBlOwogCWludCBpOwogCkBAIC04Miw2ICsxMTUsMTQgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2LT5jYXRhc19lcnIuc2l6ZTsgKytpKQogCQltdGhjYV9lcnIoZGV2LCAiICBidWZbJTAyeF06ICUwOHhcbiIsCiAJCQkgIGksIHN3YWIzMihyZWFkbChkZXYtPmNhdGFzX2Vyci5tYXAgKyBpKSkpOworCisJaWYgKGNhdGFzX3Jlc2V0X2Rpc2FibGUpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZjYXRhc19sb2NrLCBmbGFncyk7CisJbGlzdF9hZGQoJmRldi0+Y2F0YXNfZXJyLmxpc3QsICZjYXRhc19saXN0KTsKKwlxdWV1ZV93b3JrKGNhdGFzX3dxLCAmY2F0YXNfd29yayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2F0YXNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBwb2xsX2NhdGFzKHVuc2lnbmVkIGxvbmcgZGV2X3B0cikKQEAgLTEzNSw2ICsxNzYsNyBAQAogCWRldi0+Y2F0YXNfZXJyLnRpbWVyLmRhdGEgICAgID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAlkZXYtPmNhdGFzX2Vyci50aW1lci5mdW5jdGlvbiA9IHBvbGxfY2F0YXM7CiAJZGV2LT5jYXRhc19lcnIudGltZXIuZXhwaXJlcyAgPSBqaWZmaWVzICsgTVRIQ0FfQ0FUQVNfUE9MTF9JTlRFUlZBTDsKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5jYXRhc19lcnIubGlzdCk7CiAJYWRkX3RpbWVyKCZkZXYtPmNhdGFzX2Vyci50aW1lcik7CiB9CiAKQEAgLTE1Myw0ICsxOTUsMjQgQEAKIAkJCQkgICAgZGV2LT5jYXRhc19lcnIuYWRkciksCiAJCQkJICAgZGV2LT5jYXRhc19lcnIuc2l6ZSAqIDQpOwogCX0KKworCXNwaW5fbG9ja19pcnEoJmNhdGFzX2xvY2spOworCWxpc3RfZGVsKCZkZXYtPmNhdGFzX2Vyci5saXN0KTsKKwlzcGluX3VubG9ja19pcnEoJmNhdGFzX2xvY2spOworfQorCitpbnQgX19pbml0IG10aGNhX2NhdGFzX2luaXQodm9pZCkKK3sKKwlJTklUX1dPUksoJmNhdGFzX3dvcmssIGNhdGFzX3Jlc2V0LCBOVUxMKTsKKworCWNhdGFzX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoIm10aGNhX2NhdGFzIik7CisJaWYgKCFjYXRhc193cSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBtdGhjYV9jYXRhc19jbGVhbnVwKHZvaWQpCit7CisJZGVzdHJveV93b3JrcXVldWUoY2F0YXNfd3EpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NtZC5jCmluZGV4IGRlYWJjMTQuLjk5YTk0ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9jbWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY21kLmMKQEAgLTM0LDcgKzM0LDcgQEAKICAqICRJZDogbXRoY2FfY21kLmMgMTM0OSAyMDA0LTEyLTE2IDIxOjA5OjQzWiByb2xhbmQgJAogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwppbmRleCAzZTI3YTA4Li5lMzkzNjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfY3EuYwpAQCAtNTQ0LDExICs1NDQsMTEgQEAKIAkJd3EgPSAmKCpjdXJfcXApLT5ycTsKIAkJd3FlID0gYmUzMl90b19jcHUoY3FlLT53cWUpOwogCQl3cWVfaW5kZXggPSB3cWUgPj4gd3EtPndxZV9zaGlmdDsKLSAgICAgICAgICAgICAgIC8qCi0JCSogV1FFIGFkZHIgPT0gYmFzZSAtIDEgbWlnaHQgYmUgcmVwb3J0ZWQgaW4gcmVjZWl2ZSBjb21wbGV0aW9uCi0JCSogd2l0aCBlcnJvciBpbnN0ZWFkIG9mIChycSBzaXplIC0gMSkgYnkgU2luYWkgRlcgMS4wLjgwMCBhbmQKLQkJKiBBcmJlbCBGVyA1LjEuNDAwLiAgVGhpcyBidWcgc2hvdWxkIGJlIGZpeGVkIGluIGxhdGVyIEZXIHJldnMuCi0JCSovCisJCS8qCisJCSAqIFdRRSBhZGRyID09IGJhc2UgLSAxIG1pZ2h0IGJlIHJlcG9ydGVkIGluIHJlY2VpdmUgY29tcGxldGlvbgorCQkgKiB3aXRoIGVycm9yIGluc3RlYWQgb2YgKHJxIHNpemUgLSAxKSBieSBTaW5haSBGVyAxLjAuODAwIGFuZAorCQkgKiBBcmJlbCBGVyA1LjEuNDAwLiAgVGhpcyBidWcgc2hvdWxkIGJlIGZpeGVkIGluIGxhdGVyIEZXIHJldnMuCisJCSAqLwogCQlpZiAodW5saWtlbHkod3FlX2luZGV4IDwgMCkpCiAJCQl3cWVfaW5kZXggPSB3cS0+bWF4IC0gMTsKIAkJZW50cnktPndyX2lkID0gKCpjdXJfcXApLT53cmlkW3dxZV9pbmRleF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfZGV2LmgKaW5kZXggZjgxNjBiOC4uZmU1Y2VjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX2Rldi5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9kZXYuaApAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KIApAQCAtMjgzLDggKzI4NCwxMSBAQAogCXVuc2lnbmVkIGxvbmcJCXN0b3A7CiAJdTMyCQkJc2l6ZTsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiB9OwogCitleHRlcm4gc3RydWN0IG11dGV4IG10aGNhX2RldmljZV9tdXRleDsKKwogc3RydWN0IG10aGNhX2RldiB7CiAJc3RydWN0IGliX2RldmljZSAgaWJfZGV2OwogCXN0cnVjdCBwY2lfZGV2ICAgKnBkZXY7CkBAIC00NTAsNiArNDU0LDkgQEAKIAogdm9pZCBtdGhjYV9zdGFydF9jYXRhc19wb2xsKHN0cnVjdCBtdGhjYV9kZXYgKmRldik7CiB2b2lkIG10aGNhX3N0b3BfY2F0YXNfcG9sbChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpOworaW50IF9fbXRoY2FfcmVzdGFydF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworaW50IG10aGNhX2NhdGFzX2luaXQodm9pZCk7Cit2b2lkIG10aGNhX2NhdGFzX2NsZWFudXAodm9pZCk7CiAKIGludCBtdGhjYV91YXJfYWxsb2Moc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2FfdWFyICp1YXIpOwogdm9pZCBtdGhjYV91YXJfZnJlZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsIHN0cnVjdCBtdGhjYV91YXIgKnVhcik7CkBAIC01MDYsNyArNTEzLDcgQEAKIAkJICAgIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwgc3RydWN0IG10aGNhX3NycSAqc3JxKTsKIHZvaWQgbXRoY2FfZnJlZV9zcnEoc3RydWN0IG10aGNhX2RldiAqZGV2LCBzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEpOwogaW50IG10aGNhX21vZGlmeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwKLQkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrKTsKKwkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIGludCBtdGhjYV9xdWVyeV9zcnEoc3RydWN0IGliX3NycSAqc3JxLCBzdHJ1Y3QgaWJfc3JxX2F0dHIgKnNycV9hdHRyKTsKIGludCBtdGhjYV9tYXhfc3JxX3NnZShzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYpOwogdm9pZCBtdGhjYV9zcnFfZXZlbnQoc3RydWN0IG10aGNhX2RldiAqZGV2LCB1MzIgc3JxbiwKQEAgLTUyMSw3ICs1MjgsOCBAQAogCQkgICAgZW51bSBpYl9ldmVudF90eXBlIGV2ZW50X3R5cGUpOwogaW50IG10aGNhX3F1ZXJ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIsIGludCBxcF9hdHRyX21hc2ssCiAJCSAgIHN0cnVjdCBpYl9xcF9pbml0X2F0dHIgKnFwX2luaXRfYXR0cik7Ci1pbnQgbXRoY2FfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsIGludCBhdHRyX21hc2spOworaW50IG10aGNhX21vZGlmeV9xcChzdHJ1Y3QgaWJfcXAgKmlicXAsIHN0cnVjdCBpYl9xcF9hdHRyICphdHRyLCBpbnQgYXR0cl9tYXNrLAorCQkgICAgc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiBpbnQgbXRoY2FfdGF2b3JfcG9zdF9zZW5kKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3NlbmRfd3IgKndyLAogCQkJICBzdHJ1Y3QgaWJfc2VuZF93ciAqKmJhZF93cik7CiBpbnQgbXRoY2FfdGF2b3JfcG9zdF9yZWNlaXZlKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3JlY3Zfd3IgKndyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21hZC5jCmluZGV4IGQ5YmMwMzAuLjQ1ZTEwNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFkLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCiAJCQltdGhjYV91cGRhdGVfcmF0ZSh0b19tZGV2KGliZGV2KSwgcG9ydF9udW0pOwogCQkJdXBkYXRlX3NtX2FoKHRvX21kZXYoaWJkZXYpLCBwb3J0X251bSwKLQkJCQkgICAgIGJlMTZfdG9fY3B1KHBpbmZvLT5saWQpLAorCQkJCSAgICAgYmUxNl90b19jcHUocGluZm8tPnNtX2xpZCksCiAJCQkJICAgICBwaW5mby0+bmVpZ2hib3JtdHVfbWFzdGVyc21zbCAmIDB4Zik7CiAKIAkJCWV2ZW50LmRldmljZSAgICAgICAgICAgPSBpYmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfbWFpbi5jCmluZGV4IDU1N2NkZTMuLjQ3ZWEwMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX21haW4uYwpAQCAtODAsNiArODAsOCBAQAogbW9kdWxlX3BhcmFtKHR1bmVfcGNpLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh0dW5lX3BjaSwgImluY3JlYXNlIFBDSSBidXJzdCBmcm9tIHRoZSBkZWZhdWx0IHNldCBieSBCSU9TIGlmIG5vbnplcm8iKTsKIAorc3RydWN0IG11dGV4IG10aGNhX2RldmljZV9tdXRleDsKKwogc3RhdGljIGNvbnN0IGNoYXIgbXRoY2FfdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogCURSVl9OQU1FICI6IE1lbGxhbm94IEluZmluaUJhbmQgSENBIGRyaXZlciB2IgogCURSVl9WRVJTSU9OICIgKCIgRFJWX1JFTERBVEUgIilcbiI7CkBAIC05NjcsMzkgKzk2OSwyNiBAQAogfSBtdGhjYV9oY2FfdGFibGVbXSA9IHsKIAlbVEFWT1JdICAgICAgICA9IHsgLmxhdGVzdF9mdyA9IE1USENBX0ZXX1ZFUigzLCA0LCAwKSwKIAkJCSAgIC5mbGFncyAgICAgPSAwIH0sCi0JW0FSQkVMX0NPTVBBVF0gPSB7IC5sYXRlc3RfZncgPSBNVEhDQV9GV19WRVIoNCwgNywgNDAwKSwKKwlbQVJCRUxfQ09NUEFUXSA9IHsgLmxhdGVzdF9mdyA9IE1USENBX0ZXX1ZFUig0LCA3LCA2MDApLAogCQkJICAgLmZsYWdzICAgICA9IE1USENBX0ZMQUdfUENJRSB9LAotCVtBUkJFTF9OQVRJVkVdID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDUsIDEsIDApLAorCVtBUkJFTF9OQVRJVkVdID0geyAubGF0ZXN0X2Z3ID0gTVRIQ0FfRldfVkVSKDUsIDEsIDQwMCksCiAJCQkgICAuZmxhZ3MgICAgID0gTVRIQ0FfRkxBR19NRU1GUkVFIHwKIAkJCQkJTVRIQ0FfRkxBR19QQ0lFIH0sCi0JW1NJTkFJXSAgICAgICAgPSB7IC5sYXRlc3RfZncgPSBNVEhDQV9GV19WRVIoMSwgMCwgODAwKSwKKwlbU0lOQUldICAgICAgICA9IHsgLmxhdGVzdF9mdyA9IE1USENBX0ZXX1ZFUigxLCAxLCAwKSwKIAkJCSAgIC5mbGFncyAgICAgPSBNVEhDQV9GTEFHX01FTUZSRUUgfAogCQkJCQlNVEhDQV9GTEFHX1BDSUUgICAgfAogCQkJCQlNVEhDQV9GTEFHX1NJTkFJX09QVCB9CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBtdGhjYV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKLQkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBfX210aGNhX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgaGNhX3R5cGUpCiB7Ci0Jc3RhdGljIGludCBtdGhjYV92ZXJzaW9uX3ByaW50ZWQgPSAwOwogCWludCBkZHJfaGlkZGVuID0gMDsKIAlpbnQgZXJyOwogCXN0cnVjdCBtdGhjYV9kZXYgKm1kZXY7CiAKLQlpZiAoIW10aGNhX3ZlcnNpb25fcHJpbnRlZCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIG10aGNhX3ZlcnNpb24pOwotCQkrK210aGNhX3ZlcnNpb25fcHJpbnRlZDsKLQl9Ci0KIAlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW5pdGlhbGl6aW5nICVzXG4iLAogCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAKLQlpZiAoaWQtPmRyaXZlcl9kYXRhID49IEFSUkFZX1NJWkUobXRoY2FfaGNhX3RhYmxlKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBoYXMgaW52YWxpZCBkcml2ZXIgZGF0YSAlbHhcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSwgaWQtPmRyaXZlcl9kYXRhKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsICIKQEAgLTEwNjUsNyArMTA1NCw3IEBACiAKIAltZGV2LT5wZGV2ID0gcGRldjsKIAotCW1kZXYtPm10aGNhX2ZsYWdzID0gbXRoY2FfaGNhX3RhYmxlW2lkLT5kcml2ZXJfZGF0YV0uZmxhZ3M7CisJbWRldi0+bXRoY2FfZmxhZ3MgPSBtdGhjYV9oY2FfdGFibGVbaGNhX3R5cGVdLmZsYWdzOwogCWlmIChkZHJfaGlkZGVuKQogCQltZGV2LT5tdGhjYV9mbGFncyB8PSBNVEhDQV9GTEFHX0REUl9ISURERU47CiAKQEAgLTEwOTksMTMgKzEwODgsMTMgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9jbWQ7CiAKLQlpZiAobWRldi0+ZndfdmVyIDwgbXRoY2FfaGNhX3RhYmxlW2lkLT5kcml2ZXJfZGF0YV0ubGF0ZXN0X2Z3KSB7CisJaWYgKG1kZXYtPmZ3X3ZlciA8IG10aGNhX2hjYV90YWJsZVtoY2FfdHlwZV0ubGF0ZXN0X2Z3KSB7CiAJCW10aGNhX3dhcm4obWRldiwgIkhDQSBGVyB2ZXJzaW9uICVkLiVkLiVkIGlzIG9sZCAoJWQuJWQuJWQgaXMgY3VycmVudCkuXG4iLAogCQkJICAgKGludCkgKG1kZXYtPmZ3X3ZlciA+PiAzMiksIChpbnQpIChtZGV2LT5md192ZXIgPj4gMTYpICYgMHhmZmZmLAogCQkJICAgKGludCkgKG1kZXYtPmZ3X3ZlciAmIDB4ZmZmZiksCi0JCQkgICAoaW50KSAobXRoY2FfaGNhX3RhYmxlW2lkLT5kcml2ZXJfZGF0YV0ubGF0ZXN0X2Z3ID4+IDMyKSwKLQkJCSAgIChpbnQpIChtdGhjYV9oY2FfdGFibGVbaWQtPmRyaXZlcl9kYXRhXS5sYXRlc3RfZncgPj4gMTYpICYgMHhmZmZmLAotCQkJICAgKGludCkgKG10aGNhX2hjYV90YWJsZVtpZC0+ZHJpdmVyX2RhdGFdLmxhdGVzdF9mdyAmIDB4ZmZmZikpOworCQkJICAgKGludCkgKG10aGNhX2hjYV90YWJsZVtoY2FfdHlwZV0ubGF0ZXN0X2Z3ID4+IDMyKSwKKwkJCSAgIChpbnQpIChtdGhjYV9oY2FfdGFibGVbaGNhX3R5cGVdLmxhdGVzdF9mdyA+PiAxNikgJiAweGZmZmYsCisJCQkgICAoaW50KSAobXRoY2FfaGNhX3RhYmxlW2hjYV90eXBlXS5sYXRlc3RfZncgJiAweGZmZmYpKTsKIAkJbXRoY2Ffd2FybihtZGV2LCAiSWYgeW91IGhhdmUgcHJvYmxlbXMsIHRyeSB1cGRhdGluZyB5b3VyIEhDQSBGVy5cbiIpOwogCX0KIApAQCAtMTEyMiw2ICsxMTExLDcgQEAKIAkJZ290byBlcnJfdW5yZWdpc3RlcjsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtZGV2KTsKKwltZGV2LT5oY2FfdHlwZSA9IGhjYV90eXBlOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExNjYsNyArMTE1Niw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19kZXZleGl0IG10aGNhX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCBfX210aGNhX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG10aGNhX2RldiAqbWRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAl1OCBzdGF0dXM7CkBAIC0xMjExLDYgKzEyMDEsNTEgQEAKIAl9CiB9CiAKK2ludCBfX210aGNhX3Jlc3RhcnRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBtdGhjYV9kZXYgKm1kZXY7CisKKwltZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWlmICghbWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisJX19tdGhjYV9yZW1vdmVfb25lKHBkZXYpOworCXJldHVybiBfX210aGNhX2luaXRfb25lKHBkZXYsIG1kZXYtPmhjYV90eXBlKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbXRoY2FfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdGF0aWMgaW50IG10aGNhX3ZlcnNpb25fcHJpbnRlZCA9IDA7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJm10aGNhX2RldmljZV9tdXRleCk7CisKKwlpZiAoIW10aGNhX3ZlcnNpb25fcHJpbnRlZCkgeworCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIG10aGNhX3ZlcnNpb24pOworCQkrK210aGNhX3ZlcnNpb25fcHJpbnRlZDsKKwl9CisKKwlpZiAoaWQtPmRyaXZlcl9kYXRhID49IEFSUkFZX1NJWkUobXRoY2FfaGNhX3RhYmxlKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBoYXMgaW52YWxpZCBkcml2ZXIgZGF0YSAlbHhcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSwgaWQtPmRyaXZlcl9kYXRhKTsKKwkJbXV0ZXhfdW5sb2NrKCZtdGhjYV9kZXZpY2VfbXV0ZXgpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXQgPSBfX210aGNhX2luaXRfb25lKHBkZXYsIGlkLT5kcml2ZXJfZGF0YSk7CisKKwltdXRleF91bmxvY2soJm10aGNhX2RldmljZV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbXRoY2FfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwltdXRleF9sb2NrKCZtdGhjYV9kZXZpY2VfbXV0ZXgpOworCV9fbXRoY2FfcmVtb3ZlX29uZShwZGV2KTsKKwltdXRleF91bmxvY2soJm10aGNhX2RldmljZV9tdXRleCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBtdGhjYV9wY2lfdGFibGVbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NRUxMQU5PWCwgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9UQVZPUiksCiAJICAuZHJpdmVyX2RhdGEgPSBUQVZPUiB9LApAQCAtMTI0OCwxMyArMTI4MywyNCBAQAogewogCWludCByZXQ7CiAKKwltdXRleF9pbml0KCZtdGhjYV9kZXZpY2VfbXV0ZXgpOworCXJldCA9IG10aGNhX2NhdGFzX2luaXQoKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbXRoY2FfZHJpdmVyKTsKLQlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IDA7CisJaWYgKHJldCA8IDApIHsKKwkJbXRoY2FfY2F0YXNfY2xlYW51cCgpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbXRoY2FfY2xlYW51cCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmbXRoY2FfZHJpdmVyKTsKKwltdGhjYV9jYXRhc19jbGVhbnVwKCk7CiB9CiAKIG1vZHVsZV9pbml0KG10aGNhX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Byb3ZpZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwppbmRleCAyMzBhZTIxLi45ODFmZTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuYwpAQCAtMTI4NywxMiArMTI4Nyw4IEBACiAJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9RUCkJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9RUCkJCXwKIAkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfQVRUQUNIX01DQVNUKQl8Ci0JCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVCkJfAotCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfU1JRKQkJfAotCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9NT0RJRllfU1JRKQkJfAotCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9TUlEpCQl8Ci0JCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfU1JRKTsKLQlkZXYtPmliX2Rldi5ub2RlX3R5cGUgICAgICAgICAgICA9IElCX05PREVfQ0E7CisJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFVEFDSF9NQ0FTVCk7CisJZGV2LT5pYl9kZXYubm9kZV90eXBlICAgICAgICAgICAgPSBSRE1BX05PREVfSUJfQ0E7CiAJZGV2LT5pYl9kZXYucGh5c19wb3J0X2NudCAgICAgICAgPSBkZXYtPmxpbWl0cy5udW1fcG9ydHM7CiAJZGV2LT5pYl9kZXYuZG1hX2RldmljZSAgICAgICAgICAgPSAmZGV2LT5wZGV2LT5kZXY7CiAJZGV2LT5pYl9kZXYuY2xhc3NfZGV2LmRldiAgICAgICAgPSAmZGV2LT5wZGV2LT5kZXY7CkBAIC0xMzE2LDYgKzEzMTIsMTEgQEAKIAkJZGV2LT5pYl9kZXYubW9kaWZ5X3NycSAgICAgICAgICAgPSBtdGhjYV9tb2RpZnlfc3JxOwogCQlkZXYtPmliX2Rldi5xdWVyeV9zcnEgICAgICAgICAgICA9IG10aGNhX3F1ZXJ5X3NycTsKIAkJZGV2LT5pYl9kZXYuZGVzdHJveV9zcnEgICAgICAgICAgPSBtdGhjYV9kZXN0cm95X3NycTsKKwkJZGV2LT5pYl9kZXYudXZlcmJzX2NtZF9tYXNrCXw9CisJCQkoMXVsbCA8PCBJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfU1JRKQkJfAorCQkJKDF1bGwgPDwgSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1NSUSkJCXwKKwkJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1NSUSkJCXwKKwkJCSgxdWxsIDw8IElCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfU1JRKTsKIAogCQlpZiAobXRoY2FfaXNfbWVtZnJlZShkZXYpKQogCQkJZGV2LT5pYl9kZXYucG9zdF9zcnFfcmVjdiA9IG10aGNhX2FyYmVsX3Bvc3Rfc3JxX3JlY3Y7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcHJvdmlkZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCmluZGV4IDhkZTI4ODcuLjlhNWJlY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9wcm92aWRlci5oCkBAIC0xMzYsOCArMTM2LDggQEAKICAqIFdlIGhhdmUgb25lIGdsb2JhbCBsb2NrIHRoYXQgcHJvdGVjdHMgZGV2LT5jcS9xcF90YWJsZS4gIEVhY2gKICAqIHN0cnVjdCBtdGhjYV9jcS9xcCBhbHNvIGhhcyBpdHMgb3duIGxvY2suICBBbiBpbmRpdmlkdWFsIHFwIGxvY2sKICAqIG1heSBiZSB0YWtlbiBpbnNpZGUgb2YgYW4gaW5kaXZpZHVhbCBjcSBsb2NrLiAgQm90aCBjcXMgYXR0YWNoZWQgdG8KLSAqIGEgcXAgbWF5IGJlIGxvY2tlZCwgd2l0aCB0aGUgc2VuZCBjcSBsb2NrZWQgZmlyc3QuICBObyBvdGhlcgotICogbmVzdGluZyBzaG91bGQgYmUgZG9uZS4KKyAqIGEgcXAgbWF5IGJlIGxvY2tlZCwgd2l0aCB0aGUgY3Egd2l0aCB0aGUgbG93ZXIgY3FuIGxvY2tlZCBmaXJzdC4KKyAqIE5vIG90aGVyIG5lc3Rpbmcgc2hvdWxkIGJlIGRvbmUuCiAgKgogICogRWFjaCBzdHJ1Y3QgbXRoY2FfY3EvcXAgYWxzbyBoYXMgYW4gcmVmIGNvdW50LCBwcm90ZWN0ZWQgYnkgdGhlCiAgKiBjb3JyZXNwb25kaW5nIHRhYmxlIGxvY2suICBUaGUgcG9pbnRlciBmcm9tIHRoZSBjcS9xcF90YWJsZSB0byB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKaW5kZXggY2Q4YjY3Mi4uNWU1YzU4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3FwLmMKQEAgLTk5LDYgKzk5LDEwIEBACiAJTVRIQ0FfUVBfQklUX1JTQyA9IDEgPDwgIDMKIH07CiAKK2VudW0geworCU1USENBX1NFTkRfRE9PUkJFTExfRkVOQ0UgPSAxIDw8IDUKK307CisKIHN0cnVjdCBtdGhjYV9xcF9wYXRoIHsKIAlfX2JlMzIgcG9ydF9wa2V5OwogCXU4ICAgICBybnJfcmV0cnk7CkBAIC00MDQsNyArNDA4LDcgQEAKIAlpYl9haF9hdHRyLT5zbCAgICAgICAJICA9IGJlMzJfdG9fY3B1KHBhdGgtPnNsX3RjbGFzc19mbG93bGFiZWwpID4+IDI4OwogCWliX2FoX2F0dHItPnNyY19wYXRoX2JpdHMgPSBwYXRoLT5nX215bG1jICYgMHg3ZjsKIAlpYl9haF9hdHRyLT5zdGF0aWNfcmF0ZSAgID0gbXRoY2FfcmF0ZV90b19pYihkZXYsCi0JCQkJCQkgICAgIHBhdGgtPnN0YXRpY19yYXRlICYgMHg3LAorCQkJCQkJICAgICBwYXRoLT5zdGF0aWNfcmF0ZSAmIDB4ZiwKIAkJCQkJCSAgICAgaWJfYWhfYXR0ci0+cG9ydF9udW0pOwogCWliX2FoX2F0dHItPmFoX2ZsYWdzICAgICAgPSAocGF0aC0+Z19teWxtYyAmICgxIDw8IDcpKSA/IElCX0FIX0dSSCA6IDA7CiAJaWYgKGliX2FoX2F0dHItPmFoX2ZsYWdzKSB7CkBAIC00NjgsMTAgKzQ3MiwxNCBAQAogCWlmIChxcC0+dHJhbnNwb3J0ID09IFJDIHx8IHFwLT50cmFuc3BvcnQgPT0gVUMpIHsKIAkJdG9faWJfYWhfYXR0cihkZXYsICZxcF9hdHRyLT5haF9hdHRyLCAmY29udGV4dC0+cHJpX3BhdGgpOwogCQl0b19pYl9haF9hdHRyKGRldiwgJnFwX2F0dHItPmFsdF9haF9hdHRyLCAmY29udGV4dC0+YWx0X3BhdGgpOworCQlxcF9hdHRyLT5hbHRfcGtleV9pbmRleCA9CisJCQliZTMyX3RvX2NwdShjb250ZXh0LT5hbHRfcGF0aC5wb3J0X3BrZXkpICYgMHg3ZjsKKwkJcXBfYXR0ci0+YWx0X3BvcnRfbnVtIAk9IHFwX2F0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtOwogCX0KIAotCXFwX2F0dHItPnBrZXlfaW5kZXggICAgID0gYmUzMl90b19jcHUoY29udGV4dC0+cHJpX3BhdGgucG9ydF9wa2V5KSAmIDB4N2Y7Ci0JcXBfYXR0ci0+YWx0X3BrZXlfaW5kZXggPSBiZTMyX3RvX2NwdShjb250ZXh0LT5hbHRfcGF0aC5wb3J0X3BrZXkpICYgMHg3ZjsKKwlxcF9hdHRyLT5wa2V5X2luZGV4ID0gYmUzMl90b19jcHUoY29udGV4dC0+cHJpX3BhdGgucG9ydF9wa2V5KSAmIDB4N2Y7CisJcXBfYXR0ci0+cG9ydF9udW0gICA9CisJCShiZTMyX3RvX2NwdShjb250ZXh0LT5wcmlfcGF0aC5wb3J0X3BrZXkpID4+IDI0KSAmIDB4MzsKIAogCS8qIHFwX2F0dHItPmVuX3NxZF9hc3luY19ub3RpZnkgaXMgb25seSBhcHBsaWNhYmxlIGluIG1vZGlmeSBxcCAqLwogCXFwX2F0dHItPnNxX2RyYWluaW5nID0gbXRoY2Ffc3RhdGUgPT0gTVRIQ0FfUVBfU1RBVEVfRFJBSU5JTkc7CkBAIC00ODIsMTEgKzQ5MCw5IEBACiAJCTEgPDwgKChiZTMyX3RvX2NwdShjb250ZXh0LT5wYXJhbXMyKSA+PiAyMSkgJiAweDcpOwogCXFwX2F0dHItPm1pbl9ybnJfdGltZXIgCSAgICA9CiAJCShiZTMyX3RvX2NwdShjb250ZXh0LT5ybnJfbmV4dHJlY3Zwc24pID4+IDI0KSAmIDB4MWY7Ci0JcXBfYXR0ci0+cG9ydF9udW0gCSAgICA9IHFwX2F0dHItPmFoX2F0dHIucG9ydF9udW07CiAJcXBfYXR0ci0+dGltZW91dCAJICAgID0gY29udGV4dC0+cHJpX3BhdGguYWNrdG8gPj4gMzsKIAlxcF9hdHRyLT5yZXRyeV9jbnQgCSAgICA9IChiZTMyX3RvX2NwdShjb250ZXh0LT5wYXJhbXMxKSA+PiAxNikgJiAweDc7CiAJcXBfYXR0ci0+cm5yX3JldHJ5IAkgICAgPSBjb250ZXh0LT5wcmlfcGF0aC5ybnJfcmV0cnkgPj4gNTsKLQlxcF9hdHRyLT5hbHRfcG9ydF9udW0gCSAgICA9IHFwX2F0dHItPmFsdF9haF9hdHRyLnBvcnRfbnVtOwogCXFwX2F0dHItPmFsdF90aW1lb3V0IAkgICAgPSBjb250ZXh0LT5hbHRfcGF0aC5hY2t0byA+PiAzOwogCXFwX2luaXRfYXR0ci0+Y2FwIAkgICAgPSBxcF9hdHRyLT5jYXA7CiAKQEAgLTUyMyw3ICs1MjksOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbXRoY2FfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsIGludCBhdHRyX21hc2spCitpbnQgbXRoY2FfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsIGludCBhdHRyX21hc2ssCisJCSAgICBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewogCXN0cnVjdCBtdGhjYV9kZXYgKmRldiA9IHRvX21kZXYoaWJxcC0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbXRoY2FfcXAgKnFwID0gdG9fbXFwKGlicXApOwpAQCAtODM4LDExICs4NDUsMTAgQEAKIAkgKiBlbnRyaWVzIGFuZCByZWluaXRpYWxpemUgdGhlIFFQLgogCSAqLwogCWlmIChuZXdfc3RhdGUgPT0gSUJfUVBTX1JFU0VUICYmICFxcC0+aWJxcC51b2JqZWN0KSB7Ci0JCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnNlbmRfY3EpLCBxcC0+cXBuLAorCQltdGhjYV9jcV9jbGVhbihkZXYsIHRvX21jcShxcC0+aWJxcC5yZWN2X2NxKSwgcXAtPnFwbiwKIAkJCSAgICAgICBxcC0+aWJxcC5zcnEgPyB0b19tc3JxKHFwLT5pYnFwLnNycSkgOiBOVUxMKTsKIAkJaWYgKHFwLT5pYnFwLnNlbmRfY3EgIT0gcXAtPmlicXAucmVjdl9jcSkKLQkJCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnJlY3ZfY3EpLCBxcC0+cXBuLAotCQkJCSAgICAgICBxcC0+aWJxcC5zcnEgPyB0b19tc3JxKHFwLT5pYnFwLnNycSkgOiBOVUxMKTsKKwkJCW10aGNhX2NxX2NsZWFuKGRldiwgdG9fbWNxKHFwLT5pYnFwLnNlbmRfY3EpLCBxcC0+cXBuLCBOVUxMKTsKIAogCQltdGhjYV93cV9yZXNldCgmcXAtPnNxKTsKIAkJcXAtPnNxLmxhc3QgPSBnZXRfc2VuZF93cWUocXAsIHFwLT5zcS5tYXggLSAxKTsKQEAgLTEyNTksNiArMTI2NSwzMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBtdGhjYV9sb2NrX2NxcyhzdHJ1Y3QgbXRoY2FfY3EgKnNlbmRfY3EsIHN0cnVjdCBtdGhjYV9jcSAqcmVjdl9jcSkKK3sKKwlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKQorCQlzcGluX2xvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKKwllbHNlIGlmIChzZW5kX2NxLT5jcW4gPCByZWN2X2NxLT5jcW4pIHsKKwkJc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJCXNwaW5fbG9ja19uZXN0ZWQoJnJlY3ZfY3EtPmxvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2tfaXJxKCZyZWN2X2NxLT5sb2NrKTsKKwkJc3Bpbl9sb2NrX25lc3RlZCgmc2VuZF9jcS0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCX0KK30KKworc3RhdGljIHZvaWQgbXRoY2FfdW5sb2NrX2NxcyhzdHJ1Y3QgbXRoY2FfY3EgKnNlbmRfY3EsIHN0cnVjdCBtdGhjYV9jcSAqcmVjdl9jcSkKK3sKKwlpZiAoc2VuZF9jcSA9PSByZWN2X2NxKQorCQlzcGluX3VubG9ja19pcnEoJnNlbmRfY3EtPmxvY2spOworCWVsc2UgaWYgKHNlbmRfY3EtPmNxbiA8IHJlY3ZfY3EtPmNxbikgeworCQlzcGluX3VubG9jaygmcmVjdl9jcS0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJfSBlbHNlIHsKKwkJc3Bpbl91bmxvY2soJnNlbmRfY3EtPmxvY2spOworCQlzcGluX3VubG9ja19pcnEoJnJlY3ZfY3EtPmxvY2spOworCX0KK30KKwogaW50IG10aGNhX2FsbG9jX3NxcChzdHJ1Y3QgbXRoY2FfZGV2ICpkZXYsCiAJCSAgICBzdHJ1Y3QgbXRoY2FfcGQgKnBkLAogCQkgICAgc3RydWN0IG10aGNhX2NxICpzZW5kX2NxLApAQCAtMTMxMSwxNyArMTM0MywxMyBAQAogCSAqIExvY2sgQ1FzIGhlcmUsIHNvIHRoYXQgQ1EgcG9sbGluZyBjb2RlIGNhbiBkbyBRUCBsb29rdXAKIAkgKiB3aXRob3V0IHRha2luZyBhIGxvY2suCiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7Ci0JaWYgKHNlbmRfY3EgIT0gcmVjdl9jcSkKLQkJc3Bpbl9sb2NrKCZyZWN2X2NxLT5sb2NrKTsKKwltdGhjYV9sb2NrX2NxcyhzZW5kX2NxLCByZWN2X2NxKTsKIAogCXNwaW5fbG9jaygmZGV2LT5xcF90YWJsZS5sb2NrKTsKIAltdGhjYV9hcnJheV9jbGVhcigmZGV2LT5xcF90YWJsZS5xcCwgbXFwbik7CiAJc3Bpbl91bmxvY2soJmRldi0+cXBfdGFibGUubG9jayk7CiAKLQlpZiAoc2VuZF9jcSAhPSByZWN2X2NxKQotCQlzcGluX3VubG9jaygmcmVjdl9jcS0+bG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZzZW5kX2NxLT5sb2NrKTsKKwltdGhjYV91bmxvY2tfY3FzKHNlbmRfY3EsIHJlY3ZfY3EpOwogCiAgZXJyX291dDoKIAlkbWFfZnJlZV9jb2hlcmVudCgmZGV2LT5wZGV2LT5kZXYsIHNxcC0+aGVhZGVyX2J1Zl9zaXplLApAQCAtMTM1NSw5ICsxMzgzLDcgQEAKIAkgKiBMb2NrIENRcyBoZXJlLCBzbyB0aGF0IENRIHBvbGxpbmcgY29kZSBjYW4gZG8gUVAgbG9va3VwCiAJICogd2l0aG91dCB0YWtpbmcgYSBsb2NrLgogCSAqLwotCXNwaW5fbG9ja19pcnEoJnNlbmRfY3EtPmxvY2spOwotCWlmIChzZW5kX2NxICE9IHJlY3ZfY3EpCi0JCXNwaW5fbG9jaygmcmVjdl9jcS0+bG9jayk7CisJbXRoY2FfbG9ja19jcXMoc2VuZF9jcSwgcmVjdl9jcSk7CiAKIAlzcGluX2xvY2soJmRldi0+cXBfdGFibGUubG9jayk7CiAJbXRoY2FfYXJyYXlfY2xlYXIoJmRldi0+cXBfdGFibGUucXAsCkBAIC0xMzY1LDkgKzEzOTEsNyBAQAogCS0tcXAtPnJlZmNvdW50OwogCXNwaW5fdW5sb2NrKCZkZXYtPnFwX3RhYmxlLmxvY2spOwogCi0JaWYgKHNlbmRfY3EgIT0gcmVjdl9jcSkKLQkJc3Bpbl91bmxvY2soJnJlY3ZfY3EtPmxvY2spOwotCXNwaW5fdW5sb2NrX2lycSgmc2VuZF9jcS0+bG9jayk7CisJbXRoY2FfdW5sb2NrX2NxcyhzZW5kX2NxLCByZWN2X2NxKTsKIAogCXdhaXRfZXZlbnQocXAtPndhaXQsICFnZXRfcXBfcmVmY291bnQoZGV2LCBxcCkpOwogCkBAIC0xNTAyLDcgKzE1MjYsNyBAQAogCWludCBpOwogCWludCBzaXplOwogCWludCBzaXplMCA9IDA7Ci0JdTMyIGYwID0gMDsKKwl1MzIgZjA7CiAJaW50IGluZDsKIAl1OCBvcDAgPSAwOwogCkBAIC0xNjg2LDYgKzE3MTAsOCBAQAogCQlpZiAoIXNpemUwKSB7CiAJCQlzaXplMCA9IHNpemU7CiAJCQlvcDAgICA9IG10aGNhX29wY29kZVt3ci0+b3Bjb2RlXTsKKwkJCWYwICAgID0gd3ItPnNlbmRfZmxhZ3MgJiBJQl9TRU5EX0ZFTkNFID8KKwkJCQlNVEhDQV9TRU5EX0RPT1JCRUxMX0ZFTkNFIDogMDsKIAkJfQogCiAJCSsraW5kOwpAQCAtMTg0Myw3ICsxODY5LDcgQEAKIAlpbnQgaTsKIAlpbnQgc2l6ZTsKIAlpbnQgc2l6ZTAgPSAwOwotCXUzMiBmMCA9IDA7CisJdTMyIGYwOwogCWludCBpbmQ7CiAJdTggb3AwID0gMDsKIApAQCAtMjA1MSw2ICsyMDc3LDggQEAKIAkJaWYgKCFzaXplMCkgewogCQkJc2l6ZTAgPSBzaXplOwogCQkJb3AwICAgPSBtdGhjYV9vcGNvZGVbd3ItPm9wY29kZV07CisJCQlmMCAgICA9IHdyLT5zZW5kX2ZsYWdzICYgSUJfU0VORF9GRU5DRSA/CisJCQkJTVRIQ0FfU0VORF9ET09SQkVMTF9GRU5DRSA6IDA7CiAJCX0KIAogCQkrK2luZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9zcnEuYwppbmRleCBiNjBhOWQ3Li4wZjMxNmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2Ffc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3NycS5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIH0KIAogaW50IG10aGNhX21vZGlmeV9zcnEoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9zcnFfYXR0ciAqYXR0ciwKLQkJICAgICBlbnVtIGliX3NycV9hdHRyX21hc2sgYXR0cl9tYXNrKQorCQkgICAgIGVudW0gaWJfc3JxX2F0dHJfbWFzayBhdHRyX21hc2ssIHN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpCiB7CiAJc3RydWN0IG10aGNhX2RldiAqZGV2ID0gdG9fbWRldihpYnNycS0+ZGV2aWNlKTsKIAlzdHJ1Y3QgbXRoY2Ffc3JxICpzcnEgPSB0b19tc3JxKGlic3JxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV91YXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV91YXIuYwppbmRleCA4ZTkyMTk4Li44YjcyODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfdWFyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L210aGNhL210aGNhX3Vhci5jCkBAIC02MCw3ICs2MCw3IEBACiAJcmV0ID0gbXRoY2FfYWxsb2NfaW5pdCgmZGV2LT51YXJfdGFibGUuYWxsb2MsCiAJCQkgICAgICAgZGV2LT5saW1pdHMubnVtX3VhcnMsCiAJCQkgICAgICAgZGV2LT5saW1pdHMubnVtX3VhcnMgLSAxLAotCQkJICAgICAgIGRldi0+bGltaXRzLnJlc2VydmVkX3VhcnMpOworCQkJICAgICAgIGRldi0+bGltaXRzLnJlc2VydmVkX3VhcnMgKyAxKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL0tjb25maWcKaW5kZXggMTNkNmQwMS4uZDc0NjUzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvS2NvbmZpZwpAQCAtNiw4ICs2LDcgQEAKIAkgIHRyYW5zcG9ydHMgSVAgcGFja2V0cyBvdmVyIEluZmluaUJhbmQgc28geW91IGNhbiB1c2UgeW91ciBJQgogCSAgZGV2aWNlIGFzIGEgZmFuY3kgTklDLgogCi0JICBUaGUgSVBvSUIgcHJvdG9jb2wgaXMgZGVmaW5lZCBieSB0aGUgSUVURiBpcG9pYiB3b3JraW5nCi0JICBncm91cDogPGh0dHA6Ly93d3cuaWV0Zi5vcmcvaHRtbC5jaGFydGVycy9pcG9pYi1jaGFydGVyLmh0bWw+LgorCSAgU2VlIERvY3VtZW50YXRpb24vaW5maW5pYmFuZC9pcG9pYi50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KIAogY29uZmlnIElORklOSUJBTkRfSVBPSUJfREVCVUcKIAlib29sICJJUC1vdmVyLUluZmluaUJhbmQgZGVidWdnaW5nIiBpZiBFTUJFRERFRApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYi5oCmluZGV4IDQ3NGFhMjEuLjBiOGE3OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liLmgKQEAgLTMzNiw2ICszMzYsOCBAQAogZXh0ZXJuIGludCBpcG9pYl9zZW5kcV9zaXplOwogZXh0ZXJuIGludCBpcG9pYl9yZWN2cV9zaXplOwogCitleHRlcm4gc3RydWN0IGliX3NhX2NsaWVudCBpcG9pYl9zYV9jbGllbnQ7CisKICNpZmRlZiBDT05GSUdfSU5GSU5JQkFORF9JUE9JQl9ERUJVRwogZXh0ZXJuIGludCBpcG9pYl9kZWJ1Z19sZXZlbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9pYi5jCmluZGV4IDUwMzM2NjYuLmY0MjZhNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfaWIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2liLmMKQEAgLTE2OSwxMTcgKzE2OSwxMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXBvaWJfaWJfaGFuZGxlX3djKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGliX3djICp3YykKK3N0YXRpYyB2b2lkIGlwb2liX2liX2hhbmRsZV9yeF93YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWJfd2MgKndjKQoreworCXN0cnVjdCBpcG9pYl9kZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgaW50IHdyX2lkID0gd2MtPndyX2lkICYgfklQT0lCX09QX1JFQ1Y7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGFkZHI7CisKKwlpcG9pYl9kYmdfZGF0YShwcml2LCAicmVjdiBjb21wbGV0aW9uOiBpZCAlZCwgb3AgJWQsIHN0YXR1czogJWRcbiIsCisJCSAgICAgICB3cl9pZCwgd2MtPm9wY29kZSwgd2MtPnN0YXR1cyk7CisKKwlpZiAodW5saWtlbHkod3JfaWQgPj0gaXBvaWJfcmVjdnFfc2l6ZSkpIHsKKwkJaXBvaWJfd2Fybihwcml2LCAicmVjdiBjb21wbGV0aW9uIGV2ZW50IHdpdGggd3JpZCAlZCAoPiAlZClcbiIsCisJCQkgICB3cl9pZCwgaXBvaWJfcmVjdnFfc2l6ZSk7CisJCXJldHVybjsKKwl9CisKKwlza2IgID0gcHJpdi0+cnhfcmluZ1t3cl9pZF0uc2tiOworCWFkZHIgPSBwcml2LT5yeF9yaW5nW3dyX2lkXS5tYXBwaW5nOworCisJaWYgKHVubGlrZWx5KHdjLT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykpIHsKKwkJaWYgKHdjLT5zdGF0dXMgIT0gSUJfV0NfV1JfRkxVU0hfRVJSKQorCQkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHJlY3YgZXZlbnQgIgorCQkJCSAgICIoc3RhdHVzPSVkLCB3cmlkPSVkIHZlbmRfZXJyICV4KVxuIiwKKwkJCQkgICB3Yy0+c3RhdHVzLCB3cl9pZCwgd2MtPnZlbmRvcl9lcnIpOworCQlkbWFfdW5tYXBfc2luZ2xlKHByaXYtPmNhLT5kbWFfZGV2aWNlLCBhZGRyLAorCQkJCSBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcHJpdi0+cnhfcmluZ1t3cl9pZF0uc2tiID0gTlVMTDsKKwkJcmV0dXJuOworCX0KKworCS8qCisJICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYSBuZXcgUlggYnVmZmVyLCBkdW1wCisJICogdGhpcyBwYWNrZXQgYW5kIHJldXNlIHRoZSBvbGQgYnVmZmVyLgorCSAqLworCWlmICh1bmxpa2VseShpcG9pYl9hbGxvY19yeF9za2IoZGV2LCB3cl9pZCkpKSB7CisJCSsrcHJpdi0+c3RhdHMucnhfZHJvcHBlZDsKKwkJZ290byByZXBvc3Q7CisJfQorCisJaXBvaWJfZGJnX2RhdGEocHJpdiwgInJlY2VpdmVkICVkIGJ5dGVzLCBTTElEIDB4JTA0eFxuIiwKKwkJICAgICAgIHdjLT5ieXRlX2xlbiwgd2MtPnNsaWQpOworCisJZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgYWRkciwKKwkJCSBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKworCXNrYl9wdXQoc2tiLCB3Yy0+Ynl0ZV9sZW4pOworCXNrYl9wdWxsKHNrYiwgSUJfR1JIX0JZVEVTKTsKKworCWlmICh3Yy0+c2xpZCAhPSBwcml2LT5sb2NhbF9saWQgfHwKKwkgICAgd2MtPnNyY19xcCAhPSBwcml2LT5xcC0+cXBfbnVtKSB7CisJCXNrYi0+cHJvdG9jb2wgPSAoKHN0cnVjdCBpcG9pYl9oZWFkZXIgKikgc2tiLT5kYXRhKS0+cHJvdG87CisJCXNrYi0+bWFjLnJhdyA9IHNrYi0+ZGF0YTsKKwkJc2tiX3B1bGwoc2tiLCBJUE9JQl9FTkNBUF9MRU4pOworCisJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJCSsrcHJpdi0+c3RhdHMucnhfcGFja2V0czsKKwkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKKwkJc2tiLT5kZXYgPSBkZXY7CisJCS8qIFhYWCBnZXQgY29ycmVjdCBQQUNLRVRfIHR5cGUgaGVyZSAqLworCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJCW5ldGlmX3J4X25pKHNrYik7CisJfSBlbHNlIHsKKwkJaXBvaWJfZGJnX2RhdGEocHJpdiwgImRyb3BwaW5nIGxvb3BiYWNrIHBhY2tldFxuIik7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJfQorCityZXBvc3Q6CisJaWYgKHVubGlrZWx5KGlwb2liX2liX3Bvc3RfcmVjZWl2ZShkZXYsIHdyX2lkKSkpCisJCWlwb2liX3dhcm4ocHJpdiwgImlwb2liX2liX3Bvc3RfcmVjZWl2ZSBmYWlsZWQgIgorCQkJICAgImZvciBidWYgJWRcbiIsIHdyX2lkKTsKK30KKworc3RhdGljIHZvaWQgaXBvaWJfaWJfaGFuZGxlX3R4X3djKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl93YyAqd2MpCiB7CiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgd3JfaWQgPSB3Yy0+d3JfaWQ7CisJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpcG9pYl9kYmdfZGF0YShwcml2LCAiY2FsbGVkOiBpZCAlZCwgb3AgJWQsIHN0YXR1czogJWRcbiIsCisJaXBvaWJfZGJnX2RhdGEocHJpdiwgInNlbmQgY29tcGxldGlvbjogaWQgJWQsIG9wICVkLCBzdGF0dXM6ICVkXG4iLAogCQkgICAgICAgd3JfaWQsIHdjLT5vcGNvZGUsIHdjLT5zdGF0dXMpOwogCi0JaWYgKHdyX2lkICYgSVBPSUJfT1BfUkVDVikgewotCQl3cl9pZCAmPSB+SVBPSUJfT1BfUkVDVjsKLQotCQlpZiAod3JfaWQgPCBpcG9pYl9yZWN2cV9zaXplKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiICA9IHByaXYtPnJ4X3Jpbmdbd3JfaWRdLnNrYjsKLQkJCWRtYV9hZGRyX3QgICAgICBhZGRyID0gcHJpdi0+cnhfcmluZ1t3cl9pZF0ubWFwcGluZzsKLQotCQkJaWYgKHVubGlrZWx5KHdjLT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUykpIHsKLQkJCQlpZiAod2MtPnN0YXR1cyAhPSBJQl9XQ19XUl9GTFVTSF9FUlIpCi0JCQkJCWlwb2liX3dhcm4ocHJpdiwgImZhaWxlZCByZWN2IGV2ZW50ICIKLQkJCQkJCSAgICIoc3RhdHVzPSVkLCB3cmlkPSVkIHZlbmRfZXJyICV4KVxuIiwKLQkJCQkJCSAgIHdjLT5zdGF0dXMsIHdyX2lkLCB3Yy0+dmVuZG9yX2Vycik7Ci0JCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgYWRkciwKLQkJCQkJCSBJUE9JQl9CVUZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKLQkJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJCXByaXYtPnJ4X3Jpbmdbd3JfaWRdLnNrYiA9IE5VTEw7Ci0JCQkJcmV0dXJuOwotCQkJfQotCi0JCQkvKgotCQkJICogSWYgd2UgY2FuJ3QgYWxsb2NhdGUgYSBuZXcgUlggYnVmZmVyLCBkdW1wCi0JCQkgKiB0aGlzIHBhY2tldCBhbmQgcmV1c2UgdGhlIG9sZCBidWZmZXIuCi0JCQkgKi8KLQkJCWlmICh1bmxpa2VseShpcG9pYl9hbGxvY19yeF9za2IoZGV2LCB3cl9pZCkpKSB7Ci0JCQkJKytwcml2LT5zdGF0cy5yeF9kcm9wcGVkOwotCQkJCWdvdG8gcmVwb3N0OwotCQkJfQotCi0JCQlpcG9pYl9kYmdfZGF0YShwcml2LCAicmVjZWl2ZWQgJWQgYnl0ZXMsIFNMSUQgMHglMDR4XG4iLAotCQkJCSAgICAgICB3Yy0+Ynl0ZV9sZW4sIHdjLT5zbGlkKTsKLQotCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwgYWRkciwKLQkJCQkJIElQT0lCX0JVRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JCQlza2JfcHV0KHNrYiwgd2MtPmJ5dGVfbGVuKTsKLQkJCXNrYl9wdWxsKHNrYiwgSUJfR1JIX0JZVEVTKTsKLQotCQkJaWYgKHdjLT5zbGlkICE9IHByaXYtPmxvY2FsX2xpZCB8fAotCQkJICAgIHdjLT5zcmNfcXAgIT0gcHJpdi0+cXAtPnFwX251bSkgewotCQkJCXNrYi0+cHJvdG9jb2wgPSAoKHN0cnVjdCBpcG9pYl9oZWFkZXIgKikgc2tiLT5kYXRhKS0+cHJvdG87Ci0JCQkJc2tiLT5tYWMucmF3ID0gc2tiLT5kYXRhOwotCQkJCXNrYl9wdWxsKHNrYiwgSVBPSUJfRU5DQVBfTEVOKTsKLQotCQkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCQkJKytwcml2LT5zdGF0cy5yeF9wYWNrZXRzOwotCQkJCXByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JCQkJc2tiLT5kZXYgPSBkZXY7Ci0JCQkJLyogWFhYIGdldCBjb3JyZWN0IFBBQ0tFVF8gdHlwZSBoZXJlICovCi0JCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwotCQkJCW5ldGlmX3J4X25pKHNrYik7Ci0JCQl9IGVsc2UgewotCQkJCWlwb2liX2RiZ19kYXRhKHByaXYsICJkcm9wcGluZyBsb29wYmFjayBwYWNrZXRcbiIpOwotCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCQl9Ci0KLQkJcmVwb3N0OgotCQkJaWYgKHVubGlrZWx5KGlwb2liX2liX3Bvc3RfcmVjZWl2ZShkZXYsIHdyX2lkKSkpCi0JCQkJaXBvaWJfd2Fybihwcml2LCAiaXBvaWJfaWJfcG9zdF9yZWNlaXZlIGZhaWxlZCAiCi0JCQkJCSAgICJmb3IgYnVmICVkXG4iLCB3cl9pZCk7Ci0JCX0gZWxzZQotCQkJaXBvaWJfd2Fybihwcml2LCAiY29tcGxldGlvbiBldmVudCB3aXRoIHdyaWQgJWRcbiIsCi0JCQkJICAgd3JfaWQpOwotCi0JfSBlbHNlIHsKLQkJc3RydWN0IGlwb2liX3R4X2J1ZiAqdHhfcmVxOwotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCWlmICh3cl9pZCA+PSBpcG9pYl9zZW5kcV9zaXplKSB7Ci0JCQlpcG9pYl93YXJuKHByaXYsICJjb21wbGV0aW9uIGV2ZW50IHdpdGggd3JpZCAlZCAoPiAlZClcbiIsCi0JCQkJICAgd3JfaWQsIGlwb2liX3NlbmRxX3NpemUpOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaXBvaWJfZGJnX2RhdGEocHJpdiwgInNlbmQgY29tcGxldGUsIHdyaWQgJWRcbiIsIHdyX2lkKTsKLQotCQl0eF9yZXEgPSAmcHJpdi0+dHhfcmluZ1t3cl9pZF07Ci0KLQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5jYS0+ZG1hX2RldmljZSwKLQkJCQkgcGNpX3VubWFwX2FkZHIodHhfcmVxLCBtYXBwaW5nKSwKLQkJCQkgdHhfcmVxLT5za2ItPmxlbiwKLQkJCQkgRE1BX1RPX0RFVklDRSk7Ci0KLQkJKytwcml2LT5zdGF0cy50eF9wYWNrZXRzOwotCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSB0eF9yZXEtPnNrYi0+bGVuOwotCi0JCWRldl9rZnJlZV9za2JfYW55KHR4X3JlcS0+c2tiKTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCQkrK3ByaXYtPnR4X3RhaWw7Ci0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYKLQkJICAgIHRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fVVAsICZwcml2LT5mbGFncykgJiYKLQkJICAgIHByaXYtPnR4X2hlYWQgLSBwcml2LT50eF90YWlsIDw9IGlwb2liX3NlbmRxX3NpemUgPj4gMSkKLQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCi0JCWlmICh3Yy0+c3RhdHVzICE9IElCX1dDX1NVQ0NFU1MgJiYKLQkJICAgIHdjLT5zdGF0dXMgIT0gSUJfV0NfV1JfRkxVU0hfRVJSKQotCQkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHNlbmQgZXZlbnQgIgotCQkJCSAgICIoc3RhdHVzPSVkLCB3cmlkPSVkIHZlbmRfZXJyICV4KVxuIiwKLQkJCQkgICB3Yy0+c3RhdHVzLCB3cl9pZCwgd2MtPnZlbmRvcl9lcnIpOworCWlmICh1bmxpa2VseSh3cl9pZCA+PSBpcG9pYl9zZW5kcV9zaXplKSkgeworCQlpcG9pYl93YXJuKHByaXYsICJzZW5kIGNvbXBsZXRpb24gZXZlbnQgd2l0aCB3cmlkICVkICg+ICVkKVxuIiwKKwkJCSAgIHdyX2lkLCBpcG9pYl9zZW5kcV9zaXplKTsKKwkJcmV0dXJuOwogCX0KKworCXR4X3JlcSA9ICZwcml2LT50eF9yaW5nW3dyX2lkXTsKKworCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+Y2EtPmRtYV9kZXZpY2UsCisJCQkgcGNpX3VubWFwX2FkZHIodHhfcmVxLCBtYXBwaW5nKSwKKwkJCSB0eF9yZXEtPnNrYi0+bGVuLAorCQkJIERNQV9UT19ERVZJQ0UpOworCisJKytwcml2LT5zdGF0cy50eF9wYWNrZXRzOworCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IHR4X3JlcS0+c2tiLT5sZW47CisKKwlkZXZfa2ZyZWVfc2tiX2FueSh0eF9yZXEtPnNrYik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOworCSsrcHJpdi0+dHhfdGFpbDsKKwlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCisJICAgIHRlc3RfYml0KElQT0lCX0ZMQUdfQURNSU5fVVAsICZwcml2LT5mbGFncykgJiYKKwkgICAgcHJpdi0+dHhfaGVhZCAtIHByaXYtPnR4X3RhaWwgPD0gaXBvaWJfc2VuZHFfc2l6ZSA+PiAxKQorCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOworCisJaWYgKHdjLT5zdGF0dXMgIT0gSUJfV0NfU1VDQ0VTUyAmJgorCSAgICB3Yy0+c3RhdHVzICE9IElCX1dDX1dSX0ZMVVNIX0VSUikKKwkJaXBvaWJfd2Fybihwcml2LCAiZmFpbGVkIHNlbmQgZXZlbnQgIgorCQkJICAgIihzdGF0dXM9JWQsIHdyaWQ9JWQgdmVuZF9lcnIgJXgpXG4iLAorCQkJICAgd2MtPnN0YXR1cywgd3JfaWQsIHdjLT52ZW5kb3JfZXJyKTsKK30KKworc3RhdGljIHZvaWQgaXBvaWJfaWJfaGFuZGxlX3djKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpYl93YyAqd2MpCit7CisJaWYgKHdjLT53cl9pZCAmIElQT0lCX09QX1JFQ1YpCisJCWlwb2liX2liX2hhbmRsZV9yeF93YyhkZXYsIHdjKTsKKwllbHNlCisJCWlwb2liX2liX2hhbmRsZV90eF93YyhkZXYsIHdjKTsKIH0KIAogdm9pZCBpcG9pYl9pYl9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKmRldl9wdHIpCkBAIC0zMjAsNyArMzMyLDcgQEAKIAlzdHJ1Y3QgaXBvaWJfdHhfYnVmICp0eF9yZXE7CiAJZG1hX2FkZHJfdCBhZGRyOwogCi0JaWYgKHNrYi0+bGVuID4gZGV2LT5tdHUgKyBJTkZJTklCQU5EX0FMRU4pIHsKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4gPiBkZXYtPm10dSArIElORklOSUJBTkRfQUxFTikpIHsKIAkJaXBvaWJfd2Fybihwcml2LCAicGFja2V0IGxlbiAlZCAoPiAlZCkgdG9vIGxvbmcgdG8gc2VuZCwgZHJvcHBpbmdcbiIsCiAJCQkgICBza2ItPmxlbiwgZGV2LT5tdHUgKyBJTkZJTklCQU5EX0FMRU4pOwogCQkrK3ByaXYtPnN0YXRzLnR4X2Ryb3BwZWQ7CkBAIC02MTksOCArNjMxLDEwIEBACiAJICogVGhlIGRldmljZSBjb3VsZCBoYXZlIGJlZW4gYnJvdWdodCBkb3duIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCB3aGVuCiAJICogd2UgZ2V0IGhlcmUsIGRvbid0IGJyaW5nIGl0IGJhY2sgdXAgaWYgaXQncyBub3QgY29uZmlndXJlZCB1cAogCSAqLwotCWlmICh0ZXN0X2JpdChJUE9JQl9GTEFHX0FETUlOX1VQLCAmcHJpdi0+ZmxhZ3MpKQorCWlmICh0ZXN0X2JpdChJUE9JQl9GTEFHX0FETUlOX1VQLCAmcHJpdi0+ZmxhZ3MpKSB7CiAJCWlwb2liX2liX2Rldl91cChkZXYpOworCQlpcG9pYl9tY2FzdF9yZXN0YXJ0X3Rhc2soZGV2KTsKKwl9CiAKIAltdXRleF9sb2NrKCZwcml2LT52bGFuX211dGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwppbmRleCBjZjcxZDJhLi4xZWFmMDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX21haW4uYwpAQCAtNDAsNyArNDAsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4JLyogRm9yIEFSUEhSRF94eHggKi8KQEAgLTgyLDYgKzgxLDggQEAKIAogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmlwb2liX3dvcmtxdWV1ZTsKIAorc3RydWN0IGliX3NhX2NsaWVudCBpcG9pYl9zYV9jbGllbnQ7CisKIHN0YXRpYyB2b2lkIGlwb2liX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyB2b2lkIGlwb2liX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIApAQCAtMzM2LDcgKzMzNyw4IEBACiAJc3RydWN0IGlwb2liX3BhdGggKnBhdGgsICp0cDsKIAlMSVNUX0hFQUQocmVtb3ZlX2xpc3QpOwogCi0Jc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CisJc3Bpbl9sb2NrKCZwcml2LT5sb2NrKTsKIAogCWxpc3Rfc3BsaWNlKCZwcml2LT5wYXRoX2xpc3QsICZyZW1vdmVfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnBhdGhfbGlzdCk7CkBAIC0zNDcsMTIgKzM0OSwxNSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwYXRoLCB0cCwgJnJlbW92ZV9saXN0LCBsaXN0KSB7CiAJCWlmIChwYXRoLT5xdWVyeSkKIAkJCWliX3NhX2NhbmNlbF9xdWVyeShwYXRoLT5xdWVyeV9pZCwgcGF0aC0+cXVlcnkpOwotCQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCQlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmcHJpdi0+dHhfbG9jayk7CiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oJnBhdGgtPmRvbmUpOwogCQlwYXRoX2ZyZWUoZGV2LCBwYXRoKTsKLQkJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CisJCXNwaW5fbG9ja19pcnEoJnByaXYtPnR4X2xvY2spOworCQlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnEoJnByaXYtPmxvY2spOworCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJnByaXYtPnR4X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBwYXRoX3JlY19jb21wbGV0aW9uKGludCBzdGF0dXMsCkBAIC00NTksNyArNDY0LDcgQEAKIAlpbml0X2NvbXBsZXRpb24oJnBhdGgtPmRvbmUpOwogCiAJcGF0aC0+cXVlcnlfaWQgPQotCQlpYl9zYV9wYXRoX3JlY19nZXQocHJpdi0+Y2EsIHByaXYtPnBvcnQsCisJCWliX3NhX3BhdGhfcmVjX2dldCgmaXBvaWJfc2FfY2xpZW50LCBwcml2LT5jYSwgcHJpdi0+cG9ydCwKIAkJCQkgICAmcGF0aC0+cGF0aHJlYywKIAkJCQkgICBJQl9TQV9QQVRIX1JFQ19ER0lECQl8CiAJCQkJICAgSUJfU0FfUEFUSF9SRUNfU0dJRAkJfApAQCAtNjE1LDcgKzYyMCw3IEBACiAJc3RydWN0IGlwb2liX25laWdoICpuZWlnaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpKQorCWlmICh1bmxpa2VseSghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnByaXYtPnR4X2xvY2ssIGZsYWdzKSkpCiAJCXJldHVybiBORVRERVZfVFhfTE9DS0VEOwogCiAJLyoKQEAgLTYyOCw3ICs2MzMsNyBAQAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCi0JaWYgKHNrYi0+ZHN0ICYmIHNrYi0+ZHN0LT5uZWlnaGJvdXIpIHsKKwlpZiAobGlrZWx5KHNrYi0+ZHN0ICYmIHNrYi0+ZHN0LT5uZWlnaGJvdXIpKSB7CiAJCWlmICh1bmxpa2VseSghKnRvX2lwb2liX25laWdoKHNrYi0+ZHN0LT5uZWlnaGJvdXIpKSkgewogCQkJaXBvaWJfcGF0aF9sb29rdXAoc2tiLCBkZXYpOwogCQkJZ290byBvdXQ7CkBAIC0xMTA3LDEzICsxMTEyLDE2IEBACiAJc3RydWN0IGlwb2liX2Rldl9wcml2ICpwcml2OwogCWludCBzLCBlLCBwOwogCisJaWYgKHJkbWFfbm9kZV9nZXRfdHJhbnNwb3J0KGRldmljZS0+bm9kZV90eXBlKSAhPSBSRE1BX1RSQU5TUE9SVF9JQikKKwkJcmV0dXJuOworCiAJZGV2X2xpc3QgPSBrbWFsbG9jKHNpemVvZiAqZGV2X2xpc3QsIEdGUF9LRVJORUwpOwogCWlmICghZGV2X2xpc3QpCiAJCXJldHVybjsKIAogCUlOSVRfTElTVF9IRUFEKGRldl9saXN0KTsKIAotCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBJQl9OT0RFX1NXSVRDSCkgeworCWlmIChkZXZpY2UtPm5vZGVfdHlwZSA9PSBSRE1BX05PREVfSUJfU1dJVENIKSB7CiAJCXMgPSAwOwogCQllID0gMDsKIAl9IGVsc2UgewpAQCAtMTEzNyw2ICsxMTQ1LDkgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYsICp0bXA7CiAJc3RydWN0IGxpc3RfaGVhZCAqZGV2X2xpc3Q7CiAKKwlpZiAocmRtYV9ub2RlX2dldF90cmFuc3BvcnQoZGV2aWNlLT5ub2RlX3R5cGUpICE9IFJETUFfVFJBTlNQT1JUX0lCKQorCQlyZXR1cm47CisKIAlkZXZfbGlzdCA9IGliX2dldF9jbGllbnRfZGF0YShkZXZpY2UsICZpcG9pYl9jbGllbnQpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHByaXYsIHRtcCwgZGV2X2xpc3QsIGxpc3QpIHsKQEAgLTExODEsMTMgKzExOTIsMTYgQEAKIAkJZ290byBlcnJfZnM7CiAJfQogCisJaWJfc2FfcmVnaXN0ZXJfY2xpZW50KCZpcG9pYl9zYV9jbGllbnQpOworCiAJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZpcG9pYl9jbGllbnQpOwogCWlmIChyZXQpCi0JCWdvdG8gZXJyX3dxOworCQlnb3RvIGVycl9zYTsKIAogCXJldHVybiAwOwogCi1lcnJfd3E6CitlcnJfc2E6CisJaWJfc2FfdW5yZWdpc3Rlcl9jbGllbnQoJmlwb2liX3NhX2NsaWVudCk7CiAJZGVzdHJveV93b3JrcXVldWUoaXBvaWJfd29ya3F1ZXVlKTsKIAogZXJyX2ZzOgpAQCAtMTE5OSw2ICsxMjEzLDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcG9pYl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZpcG9pYl9jbGllbnQpOworCWliX3NhX3VucmVnaXN0ZXJfY2xpZW50KCZpcG9pYl9zYV9jbGllbnQpOwogCWlwb2liX3VucmVnaXN0ZXJfZGVidWdmcygpOwogCWRlc3Ryb3lfd29ya3F1ZXVlKGlwb2liX3dvcmtxdWV1ZSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCBiNWU2YTdiLi4zZmFhMTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTMyNiw2ICszMjYsNyBAQAogCiAJCS8qIENsZWFyIHRoZSBidXN5IGZsYWcgc28gd2UgdHJ5IGFnYWluICovCiAJCWNsZWFyX2JpdChJUE9JQl9NQ0FTVF9GTEFHX0JVU1ksICZtY2FzdC0+ZmxhZ3MpOworCQltY2FzdC0+cXVlcnkgPSBOVUxMOwogCX0KIAogCWNvbXBsZXRlKCZtY2FzdC0+ZG9uZSk7CkBAIC0zNjAsNyArMzYxLDcgQEAKIAogCWluaXRfY29tcGxldGlvbigmbWNhc3QtPmRvbmUpOwogCi0JcmV0ID0gaWJfc2FfbWNtZW1iZXJfcmVjX3NldChwcml2LT5jYSwgcHJpdi0+cG9ydCwgJnJlYywKKwlyZXQgPSBpYl9zYV9tY21lbWJlcl9yZWNfc2V0KCZpcG9pYl9zYV9jbGllbnQsIHByaXYtPmNhLCBwcml2LT5wb3J0LCAmcmVjLAogCQkJCSAgICAgSUJfU0FfTUNNRU1CRVJfUkVDX01HSUQJCXwKIAkJCQkgICAgIElCX1NBX01DTUVNQkVSX1JFQ19QT1JUX0dJRAl8CiAJCQkJICAgICBJQl9TQV9NQ01FTUJFUl9SRUNfUEtFWQkJfApAQCAtNDcxLDIyICs0NzIsMzIgQEAKIAogCWlmIChjcmVhdGUpIHsKIAkJY29tcF9tYXNrIHw9Ci0JCQlJQl9TQV9NQ01FTUJFUl9SRUNfUUtFWQkJfAotCQkJSUJfU0FfTUNNRU1CRVJfUkVDX1NMCQl8Ci0JCQlJQl9TQV9NQ01FTUJFUl9SRUNfRkxPV19MQUJFTAl8Ci0JCQlJQl9TQV9NQ01FTUJFUl9SRUNfVFJBRkZJQ19DTEFTUzsKKwkJCUlCX1NBX01DTUVNQkVSX1JFQ19RS0VZCQkJfAorCQkJSUJfU0FfTUNNRU1CRVJfUkVDX01UVV9TRUxFQ1RPUgkJfAorCQkJSUJfU0FfTUNNRU1CRVJfUkVDX01UVQkJCXwKKwkJCUlCX1NBX01DTUVNQkVSX1JFQ19UUkFGRklDX0NMQVNTCXwKKwkJCUlCX1NBX01DTUVNQkVSX1JFQ19SQVRFX1NFTEVDVE9SCXwKKwkJCUlCX1NBX01DTUVNQkVSX1JFQ19SQVRFCQkJfAorCQkJSUJfU0FfTUNNRU1CRVJfUkVDX1NMCQkJfAorCQkJSUJfU0FfTUNNRU1CRVJfUkVDX0ZMT1dfTEFCRUwJCXwKKwkJCUlCX1NBX01DTUVNQkVSX1JFQ19IT1BfTElNSVQ7CiAKIAkJcmVjLnFrZXkJICA9IHByaXYtPmJyb2FkY2FzdC0+bWNtZW1iZXIucWtleTsKKwkJcmVjLm10dV9zZWxlY3RvciAgPSBJQl9TQV9FUTsKKwkJcmVjLm10dQkJICA9IHByaXYtPmJyb2FkY2FzdC0+bWNtZW1iZXIubXR1OworCQlyZWMudHJhZmZpY19jbGFzcyA9IHByaXYtPmJyb2FkY2FzdC0+bWNtZW1iZXIudHJhZmZpY19jbGFzczsKKwkJcmVjLnJhdGVfc2VsZWN0b3IgPSBJQl9TQV9FUTsKKwkJcmVjLnJhdGUJICA9IHByaXYtPmJyb2FkY2FzdC0+bWNtZW1iZXIucmF0ZTsKIAkJcmVjLnNsCQkgID0gcHJpdi0+YnJvYWRjYXN0LT5tY21lbWJlci5zbDsKIAkJcmVjLmZsb3dfbGFiZWwJICA9IHByaXYtPmJyb2FkY2FzdC0+bWNtZW1iZXIuZmxvd19sYWJlbDsKLQkJcmVjLnRyYWZmaWNfY2xhc3MgPSBwcml2LT5icm9hZGNhc3QtPm1jbWVtYmVyLnRyYWZmaWNfY2xhc3M7CisJCXJlYy5ob3BfbGltaXQJICA9IHByaXYtPmJyb2FkY2FzdC0+bWNtZW1iZXIuaG9wX2xpbWl0OwogCX0KIAogCWluaXRfY29tcGxldGlvbigmbWNhc3QtPmRvbmUpOwogCi0JcmV0ID0gaWJfc2FfbWNtZW1iZXJfcmVjX3NldChwcml2LT5jYSwgcHJpdi0+cG9ydCwgJnJlYywgY29tcF9tYXNrLAotCQkJCSAgICAgbWNhc3QtPmJhY2tvZmYgKiAxMDAwLCBHRlBfQVRPTUlDLAotCQkJCSAgICAgaXBvaWJfbWNhc3Rfam9pbl9jb21wbGV0ZSwKKwlyZXQgPSBpYl9zYV9tY21lbWJlcl9yZWNfc2V0KCZpcG9pYl9zYV9jbGllbnQsIHByaXYtPmNhLCBwcml2LT5wb3J0LAorCQkJCSAgICAgJnJlYywgY29tcF9tYXNrLCBtY2FzdC0+YmFja29mZiAqIDEwMDAsCisJCQkJICAgICBHRlBfQVRPTUlDLCBpcG9pYl9tY2FzdF9qb2luX2NvbXBsZXRlLAogCQkJCSAgICAgbWNhc3QsICZtY2FzdC0+cXVlcnkpOwogCiAJaWYgKHJldCA8IDApIHsKQEAgLTUyNyw3ICs1MzgsNyBAQAogCQkJcHJpdi0+bG9jYWxfcmF0ZSA9IGF0dHIuYWN0aXZlX3NwZWVkICoKIAkJCQlpYl93aWR0aF9lbnVtX3RvX2ludChhdHRyLmFjdGl2ZV93aWR0aCk7CiAJCX0gZWxzZQotCQkJaXBvaWJfd2Fybihwcml2LCAiaWJfcXVlcnlfcG9ydCBmYWlsZWRcbiIpOworCQlpcG9pYl93YXJuKHByaXYsICJpYl9xdWVyeV9wb3J0IGZhaWxlZFxuIik7CiAJfQogCiAJaWYgKCFwcml2LT5icm9hZGNhc3QpIHsKQEAgLTY4MCw3ICs2OTEsNyBAQAogCSAqIEp1c3QgbWFrZSBvbmUgc2hvdCBhdCBsZWF2aW5nIGFuZCBkb24ndCB3YWl0IGZvciBhIHJlcGx5OwogCSAqIGlmIHdlIGZhaWwsIHRvbyBiYWQuCiAJICovCi0JcmV0ID0gaWJfc2FfbWNtZW1iZXJfcmVjX2RlbGV0ZShwcml2LT5jYSwgcHJpdi0+cG9ydCwgJnJlYywKKwlyZXQgPSBpYl9zYV9tY21lbWJlcl9yZWNfZGVsZXRlKCZpcG9pYl9zYV9jbGllbnQsIHByaXYtPmNhLCBwcml2LT5wb3J0LCAmcmVjLAogCQkJCQlJQl9TQV9NQ01FTUJFUl9SRUNfTUdJRAkJfAogCQkJCQlJQl9TQV9NQ01FTUJFUl9SRUNfUE9SVF9HSUQJfAogCQkJCQlJQl9TQV9NQ01FTUJFUl9SRUNfUEtFWQkJfApAQCAtNzk0LDcgKzgwNSw3IEBACiAJfQogCiAJaWYgKHByaXYtPmJyb2FkY2FzdCkgewotIAkJcmJfZXJhc2UoJnByaXYtPmJyb2FkY2FzdC0+cmJfbm9kZSwgJnByaXYtPm11bHRpY2FzdF90cmVlKTsKKwkJcmJfZXJhc2UoJnByaXYtPmJyb2FkY2FzdC0+cmJfbm9kZSwgJnByaXYtPm11bHRpY2FzdF90cmVlKTsKIAkJbGlzdF9hZGRfdGFpbCgmcHJpdi0+YnJvYWRjYXN0LT5saXN0LCAmcmVtb3ZlX2xpc3QpOwogCQlwcml2LT5icm9hZGNhc3QgPSBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWcKaW5kZXggZmVhZDg3ZC4uMzY1YTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgSU5GSU5JQkFORF9JU0VSCiAJdHJpc3RhdGUgIklTQ1NJIFJETUEgUHJvdG9jb2wiCi0JZGVwZW5kcyBvbiBJTkZJTklCQU5EICYmIFNDU0kKKwlkZXBlbmRzIG9uIElORklOSUJBTkQgJiYgU0NTSSAmJiBJTkVUCiAJc2VsZWN0IFNDU0lfSVNDU0lfQVRUUlMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgSVNDU0kgUkRNQSBQcm90b2NvbCBvdmVyIEluZmluaUJhbmQuICBUaGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwppbmRleCAzNGIwZGE1Li5lOWNmMWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKQEAgLTM3OCwyMSArMzc4LDYgQEAKIAlyZXR1cm4gaXNlcl9jb25uX3NldF9mdWxsX2ZlYXR1cmVkX21vZGUoY29ubik7CiB9CiAKLXN0YXRpYyB2b2lkCi1pc2NzaV9pc2VyX2Nvbm5fdGVybWluYXRlKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQotewotCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGNvbm4tPmRkX2RhdGE7Ci0Jc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubiA9IGlzZXJfY29ubi0+aWJfY29ubjsKLQotCUJVR19PTighaWJfY29ubik7Ci0JLyogc3RhcnRzIGNvbm4gdGVhcmRvd24gcHJvY2Vzcywgd2FpdHMgdW50aWwgYWxsIHByZXZpb3VzbHkgICAqCi0JICogcG9zdGVkIGJ1ZmZlcnMgZ2V0IGZsdXNoZWQsIGRlYWxsb2NhdGVzIGFsbCBjb25uIHJlc291cmNlcyAqLwotCWlzZXJfY29ubl90ZXJtaW5hdGUoaWJfY29ubik7Ci0JaXNlcl9jb25uLT5pYl9jb25uID0gTlVMTDsKLQljb25uLT5yZWN2X2xvY2sgPSBOVUxMOwotfQotCi0KIHN0YXRpYyBzdHJ1Y3QgaXNjc2lfdHJhbnNwb3J0IGlzY3NpX2lzZXJfdHJhbnNwb3J0OwogCiBzdGF0aWMgc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICoKQEAgLTU1NSwxMyArNTQwLDEzIEBACiBzdGF0aWMgdm9pZAogaXNjc2lfaXNlcl9lcF9kaXNjb25uZWN0KF9fdTY0IGVwX2hhbmRsZSkKIHsKLQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uID0gaXNjc2lfaXNlcl9pYl9jb25uX2xvb2t1cChlcF9oYW5kbGUpOworCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm47CiAKKwlpYl9jb25uID0gaXNjc2lfaXNlcl9pYl9jb25uX2xvb2t1cChlcF9oYW5kbGUpOwogCWlmICghaWJfY29ubikKIAkJcmV0dXJuOwogCiAJaXNlcl9lcnIoImliIGNvbm4gJXAgc3RhdGUgJWRcbiIsaWJfY29ubiwgaWJfY29ubi0+c3RhdGUpOwotCiAJaXNlcl9jb25uX3Rlcm1pbmF0ZShpYl9jb25uKTsKIH0KIApAQCAtNTcwLDYgKzU1NSw3IEBACiAJLnF1ZXVlY29tbWFuZCAgICAgICAgICAgPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCiAJLmNhbl9xdWV1ZQkJPSBJU0NTSV9YTUlUX0NNRFNfTUFYIC0gMSwKIAkuc2dfdGFibGVzaXplICAgICAgICAgICA9IElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFLAorCS5tYXhfc2VjdG9ycwkJPSAxMDI0LAogCS5jbWRfcGVyX2x1biAgICAgICAgICAgID0gSVNDU0lfTUFYX0NNRF9QRVJfTFVOLAogCS5laF9hYm9ydF9oYW5kbGVyICAgICAgID0gaXNjc2lfZWhfYWJvcnQsCiAJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IGlzY3NpX2VoX2hvc3RfcmVzZXQsCkBAIC02MTQsOSArNjAwLDYgQEAKIAkuZ2V0X3Nlc3Npb25fcGFyYW0JPSBpc2NzaV9zZXNzaW9uX2dldF9wYXJhbSwKIAkuc3RhcnRfY29ubiAgICAgICAgICAgICA9IGlzY3NpX2lzZXJfY29ubl9zdGFydCwKIAkuc3RvcF9jb25uICAgICAgICAgICAgICA9IGlzY3NpX2Nvbm5fc3RvcCwKLQkvKiB0aGVzZSBhcmUgY2FsbGVkIGFzIHBhcnQgb2YgY29ubiByZWNvdmVyeSAqLwotCS5zdXNwZW5kX2Nvbm5fcmVjdgk9IE5VTEwsIC8qIEZJWE1FIGlzL2hvdyB0aGlzIHJlbHZhbnQgdG8gaXNlcj8gKi8KLQkudGVybWluYXRlX2Nvbm4JCT0gaXNjc2lfaXNlcl9jb25uX3Rlcm1pbmF0ZSwKIAkvKiBJTyAqLwogCS5zZW5kX3BkdQkJPSBpc2NzaV9jb25uX3NlbmRfcGR1LAogCS5nZXRfc3RhdHMJCT0gaXNjc2lfaXNlcl9jb25uX2dldF9zdGF0cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmggYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCmluZGV4IDMzNTBiYTYuLjdlMWE0MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaApAQCAtODIsOCArODIsMTIgQEAKIAkJICAgICAgIF9fZnVuY19fICwgIyMgYXJnKTsJCVwKIAl9IHdoaWxlICgwKQogCisjZGVmaW5lIFNISUZUXzRLCTEyCisjZGVmaW5lIFNJWkVfNEsJKDFVTCA8PCBTSElGVF80SykKKyNkZWZpbmUgTUFTS180SwkofihTSVpFXzRLLTEpKQorCiAJCQkJCS8qIHN1cHBvcnQgdXB0byA1MTJLQiBpbiBvbmUgUkRNQSAqLwotI2RlZmluZSBJU0NTSV9JU0VSX1NHX1RBQkxFU0laRSAgICAgICAgICgweDgwMDAwID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIElTQ1NJX0lTRVJfU0dfVEFCTEVTSVpFICAgICAgICAgKDB4ODAwMDAgPj4gU0hJRlRfNEspCiAjZGVmaW5lIElTQ1NJX0lTRVJfTUFYX0xVTgkJMjU2CiAjZGVmaW5lIElTQ1NJX0lTRVJfTUFYX0NNRF9MRU4JCTE2CiAKQEAgLTE3MSw2ICsxNzUsNyBAQAogCXU2NCAgdmE7CiAJdTY0ICBsZW47CiAJdm9pZCAqbWVtX2g7CisJaW50ICBpc19mbXI7CiB9OwogCiBzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9tZW1vcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCmluZGV4IDMxOTUwYTUuLmQwYjAzZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAiaXNjc2lfaXNlci5oIgogCiAjZGVmaW5lIElTRVJfS01BTExPQ19USFJFU0hPTEQgMHgyMDAwMCAvKiAxMjhLIC0ga21hbGxvYyBsaW1pdCAqLworCiAvKioKICAqIERlY3JlbWVudHMgdGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgdGhlCiAgKiByZWdpc3RlcmVkIGJ1ZmZlciAmIHJlbGVhc2VzIGl0CkBAIC01NSw3ICs1Niw3IEBACiAJaWYgKChhdG9taWNfcmVhZCgmcmVnZF9idWYtPnJlZl9jb3VudCkgPT0gMCkgfHwKIAkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcmVnZF9idWYtPnJlZl9jb3VudCkpIHsKIAkJLyogaWYgd2UgdXNlZCB0aGUgZG1hIG1yLCB1bnJlZyBpcyBqdXN0IE5PUCAqLwotCQlpZiAocmVnZF9idWYtPnJlZy5ya2V5ICE9IDApCisJCWlmIChyZWdkX2J1Zi0+cmVnLmlzX2ZtcikKIAkJCWlzZXJfdW5yZWdfbWVtKCZyZWdkX2J1Zi0+cmVnKTsKIAogCQlpZiAocmVnZF9idWYtPmRtYV9hZGRyKSB7CkBAIC05MCw5ICs5MSw5IEBACiAJQlVHX09OKGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyKSk7CiAKIAlyZWdkX2J1Zi0+cmVnLmxrZXkgPSBkZXZpY2UtPm1yLT5sa2V5OwotCXJlZ2RfYnVmLT5yZWcucmtleSA9IDA7IC8qIGluZGljYXRlIHRoZXJlJ3Mgbm8gbmVlZCB0byB1bnJlZyAqLwogCXJlZ2RfYnVmLT5yZWcubGVuICA9IHJlZ2RfYnVmLT5kYXRhX3NpemU7CiAJcmVnZF9idWYtPnJlZy52YSAgID0gZG1hX2FkZHI7CisJcmVnZF9idWYtPnJlZy5pc19mbXIgPSAwOwogCiAJcmVnZF9idWYtPmRtYV9hZGRyICA9IGRtYV9hZGRyOwogCXJlZ2RfYnVmLT5kaXJlY3Rpb24gPSBkaXJlY3Rpb247CkBAIC0yMzksNyArMjQwLDcgQEAKIAlpbnQgaTsKIAogCS8qIGNvbXB1dGUgdGhlIG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCi0JcGFnZV92ZWMtPm9mZnNldCA9ICh1NjQpIHNnWzBdLm9mZnNldDsKKwlwYWdlX3ZlYy0+b2Zmc2V0ID0gKHU2NCkgc2dbMF0ub2Zmc2V0ICYgfk1BU0tfNEs7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZG1hX25lbnRzOyBpKyspIHsKIAkJdG90YWxfc3ogKz0gc2dfZG1hX2xlbigmc2dbaV0pOwpAQCAtMjQ3LDIxICsyNDgsMzAgQEAKIAkJZmlyc3RfYWRkciA9IHNnX2RtYV9hZGRyZXNzKCZzZ1tpXSk7CiAJCWxhc3RfYWRkciAgPSBmaXJzdF9hZGRyICsgc2dfZG1hX2xlbigmc2dbaV0pOwogCi0JCXN0YXJ0X2FsaWduZWQgPSAhKGZpcnN0X2FkZHIgJiB+UEFHRV9NQVNLKTsKLQkJZW5kX2FsaWduZWQgICA9ICEobGFzdF9hZGRyICAmIH5QQUdFX01BU0spOworCQlzdGFydF9hbGlnbmVkID0gIShmaXJzdF9hZGRyICYgfk1BU0tfNEspOworCQllbmRfYWxpZ25lZCAgID0gIShsYXN0X2FkZHIgICYgfk1BU0tfNEspOwogCiAJCS8qIGNvbnRpbnVlIHRvIGNvbGxlY3QgcGFnZSBmcmFnbWVudHMgdGlsbCBhbGlnbmVkIG9yIFNHIGVuZHMgKi8KIAkJd2hpbGUgKCFlbmRfYWxpZ25lZCAmJiAoaSArIDEgPCBkYXRhLT5kbWFfbmVudHMpKSB7CiAJCQlpKys7CiAJCQl0b3RhbF9zeiArPSBzZ19kbWFfbGVuKCZzZ1tpXSk7CiAJCQlsYXN0X2FkZHIgPSBzZ19kbWFfYWRkcmVzcygmc2dbaV0pICsgc2dfZG1hX2xlbigmc2dbaV0pOwotCQkJZW5kX2FsaWduZWQgPSAhKGxhc3RfYWRkciAgJiB+UEFHRV9NQVNLKTsKKwkJCWVuZF9hbGlnbmVkID0gIShsYXN0X2FkZHIgICYgfk1BU0tfNEspOwogCQl9CiAKLQkJZmlyc3RfYWRkciA9IGZpcnN0X2FkZHIgJiBQQUdFX01BU0s7CisJCS8qIGhhbmRsZSB0aGUgMXN0IHBhZ2UgaW4gdGhlIDFzdCBETUEgZWxlbWVudCAqLworCQlpZiAoY3VyX3BhZ2UgPT0gMCkgeworCQkJcGFnZSA9IGZpcnN0X2FkZHIgJiBNQVNLXzRLOworCQkJcGFnZV92ZWMtPnBhZ2VzW2N1cl9wYWdlXSA9IHBhZ2U7CisJCQljdXJfcGFnZSsrOworCQkJcGFnZSArPSBTSVpFXzRLOworCQl9IGVsc2UKKwkJCXBhZ2UgPSBmaXJzdF9hZGRyOwogCi0JCWZvciAocGFnZSA9IGZpcnN0X2FkZHI7IHBhZ2UgPCBsYXN0X2FkZHI7IHBhZ2UgKz0gUEFHRV9TSVpFKQotCQkJcGFnZV92ZWMtPnBhZ2VzW2N1cl9wYWdlKytdID0gcGFnZTsKKwkJZm9yICg7IHBhZ2UgPCBsYXN0X2FkZHI7IHBhZ2UgKz0gU0laRV80SykgeworCQkJcGFnZV92ZWMtPnBhZ2VzW2N1cl9wYWdlXSA9IHBhZ2U7CisJCQljdXJfcGFnZSsrOworCQl9CiAKIAl9CiAJcGFnZV92ZWMtPmRhdGFfc2l6ZSA9IHRvdGFsX3N6OwpAQCAtMjY5LDggKzI3OSw3IEBACiAJcmV0dXJuIGN1cl9wYWdlOwogfQogCi0jZGVmaW5lIE1BU0tfNEsJCQkoKDFVTCA8PCAxMikgLSAxKSAvKiAweEZGRiAqLwotI2RlZmluZSBJU180S19BTElHTkVEKGFkZHIpCSgoKCh1bnNpZ25lZCBsb25nKWFkZHIpICYgTUFTS180SykgPT0gMCkKKyNkZWZpbmUgSVNfNEtfQUxJR05FRChhZGRyKQkoKCgodW5zaWduZWQgbG9uZylhZGRyKSAmIH5NQVNLXzRLKSA9PSAwKQogCiAvKioKICAqIGlzZXJfZGF0YV9idWZfYWxpZ25lZF9sZW4gLSBUcmllcyB0byBkZXRlcm1pbmUgdGhlIG1heGltYWwgY29ycmVjdGx5IGFsaWduZWQKQEAgLTMyMCw5ICszMjksOSBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopZGF0YS0+YnVmOwogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPnNpemU7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+ZG1hX25lbnRzOyBpKyspCiAJCWlzZXJfZXJyKCJzZ1slZF0gZG1hX2FkZHI6MHglbFggcGFnZToweCVwICIKLQkJCSAib2ZmOiVkIHN6OiVkIGRtYV9sZW46JWRcbiIsCisJCQkgIm9mZjoweCV4IHN6OjB4JXggZG1hX2xlbjoweCV4XG4iLAogCQkJIGksICh1bnNpZ25lZCBsb25nKXNnX2RtYV9hZGRyZXNzKCZzZ1tpXSksCiAJCQkgc2dbaV0ucGFnZSwgc2dbaV0ub2Zmc2V0LAogCQkJIHNnW2ldLmxlbmd0aCxzZ19kbWFfbGVuKCZzZ1tpXSkpOwpAQCAtMzUyLDcgKzM2MSw3IEBACiAKIAlwYWdlX3ZlYy0+bGVuZ3RoID0gcGFnZV92ZWNfbGVuOwogCi0JaWYgKHBhZ2VfdmVjX2xlbiAqIFBBR0VfU0laRSA8IHBhZ2VfdmVjLT5kYXRhX3NpemUpIHsKKwlpZiAocGFnZV92ZWNfbGVuICogU0laRV80SyA8IHBhZ2VfdmVjLT5kYXRhX3NpemUpIHsKIAkJaXNlcl9lcnIoInBhZ2VfdmVjIHRvbyBzaG9ydCB0byBob2xkIHRoaXMgU0dcbiIpOwogCQlpc2VyX2RhdGFfYnVmX2R1bXAoZGF0YSk7CiAJCWlzZXJfZHVtcF9wYWdlX3ZlYyhwYWdlX3ZlYyk7CkBAIC0zNzAsMTUgKzM3OSwxOCBAQAogCQkgICAgICBlbnVtICAgaXNlcl9kYXRhX2RpciAgICAgICAgY21kX2RpcikKIHsKIAlzdHJ1Y3QgaXNlcl9jb25uICAgICAqaWJfY29ubiA9IGlzZXJfY3Rhc2stPmlzZXJfY29ubi0+aWJfY29ubjsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgICAqZGV2aWNlID0gaWJfY29ubi0+ZGV2aWNlOwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICptZW0gPSAmaXNlcl9jdGFzay0+ZGF0YVtjbWRfZGlyXTsKIAlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CiAJaW50IGFsaWduZWRfbGVuOwogCWludCBlcnI7CisJaW50IGk7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAogCXJlZ2RfYnVmID0gJmlzZXJfY3Rhc2stPnJkbWFfcmVnZFtjbWRfZGlyXTsKIAogCWFsaWduZWRfbGVuID0gaXNlcl9kYXRhX2J1Zl9hbGlnbmVkX2xlbihtZW0pOwotCWlmIChhbGlnbmVkX2xlbiAhPSBtZW0tPnNpemUpIHsKKwlpZiAoYWxpZ25lZF9sZW4gIT0gbWVtLT5kbWFfbmVudHMpIHsKIAkJaXNlcl9lcnIoInJkbWEgYWxpZ25tZW50IHZpb2xhdGlvbiAlZC8lZCBhbGlnbmVkXG4iLAogCQkJIGFsaWduZWRfbGVuLCBtZW0tPnNpemUpOwogCQlpc2VyX2RhdGFfYnVmX2R1bXAobWVtKTsKQEAgLTM4OSwxMCArNDAxLDM4IEBACiAJCW1lbSA9ICZpc2VyX2N0YXNrLT5kYXRhX2NvcHlbY21kX2Rpcl07CiAJfQogCi0JaXNlcl9wYWdlX3ZlY19idWlsZChtZW0sIGliX2Nvbm4tPnBhZ2VfdmVjKTsKLQllcnIgPSBpc2VyX3JlZ19wYWdlX3ZlYyhpYl9jb25uLCBpYl9jb25uLT5wYWdlX3ZlYywgJnJlZ2RfYnVmLT5yZWcpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJLyogaWYgdGhlcmUgYSBzaW5nbGUgZG1hIGVudHJ5LCBGTVIgaXMgbm90IG5lZWRlZCAqLworCWlmIChtZW0tPmRtYV9uZW50cyA9PSAxKSB7CisJCXNnID0gKHN0cnVjdCBzY2F0dGVybGlzdCAqKW1lbS0+YnVmOworCisJCXJlZ2RfYnVmLT5yZWcubGtleSA9IGRldmljZS0+bXItPmxrZXk7CisJCXJlZ2RfYnVmLT5yZWcucmtleSA9IGRldmljZS0+bXItPnJrZXk7CisJCXJlZ2RfYnVmLT5yZWcubGVuICA9IHNnX2RtYV9sZW4oJnNnWzBdKTsKKwkJcmVnZF9idWYtPnJlZy52YSAgID0gc2dfZG1hX2FkZHJlc3MoJnNnWzBdKTsKKwkJcmVnZF9idWYtPnJlZy5pc19mbXIgPSAwOworCisJCWlzZXJfZGJnKCJQSFlTSUNBTCBNZW0ucmVnaXN0ZXI6IGxrZXk6IDB4JTA4WCBya2V5OiAweCUwOFggICIKKwkJCSAidmE6IDB4JTA4bFggc3o6ICVsZF1cbiIsCisJCQkgKHVuc2lnbmVkIGludClyZWdkX2J1Zi0+cmVnLmxrZXksCisJCQkgKHVuc2lnbmVkIGludClyZWdkX2J1Zi0+cmVnLnJrZXksCisJCQkgKHVuc2lnbmVkIGxvbmcpcmVnZF9idWYtPnJlZy52YSwKKwkJCSAodW5zaWduZWQgbG9uZylyZWdkX2J1Zi0+cmVnLmxlbik7CisJfSBlbHNlIHsgLyogdXNlIEZNUiBmb3IgbXVsdGlwbGUgZG1hIGVudHJpZXMgKi8KKwkJaXNlcl9wYWdlX3ZlY19idWlsZChtZW0sIGliX2Nvbm4tPnBhZ2VfdmVjKTsKKwkJZXJyID0gaXNlcl9yZWdfcGFnZV92ZWMoaWJfY29ubiwgaWJfY29ubi0+cGFnZV92ZWMsICZyZWdkX2J1Zi0+cmVnKTsKKwkJaWYgKGVycikgeworCQkJaXNlcl9kYXRhX2J1Zl9kdW1wKG1lbSk7CisJCQlpc2VyX2VycigibWVtLT5kbWFfbmVudHMgPSAlZCAoZGxlbmd0aCA9IDB4JXgpXG4iLCBtZW0tPmRtYV9uZW50cywKKwkJCQkgbnRvaDI0KGlzZXJfY3Rhc2stPmRlc2MuaXNjc2lfaGVhZGVyLmRsZW5ndGgpKTsKKwkJCWlzZXJfZXJyKCJwYWdlX3ZlYzogZGF0YV9zaXplID0gMHgleCwgbGVuZ3RoID0gJWQsIG9mZnNldCA9IDB4JXhcbiIsCisJCQkJIGliX2Nvbm4tPnBhZ2VfdmVjLT5kYXRhX3NpemUsIGliX2Nvbm4tPnBhZ2VfdmVjLT5sZW5ndGgsCisJCQkJIGliX2Nvbm4tPnBhZ2VfdmVjLT5vZmZzZXQpOworCQkJZm9yIChpPTAgOyBpPGliX2Nvbm4tPnBhZ2VfdmVjLT5sZW5ndGggOyBpKyspCisJCQkJaXNlcl9lcnIoInBhZ2VfdmVjWyVkXSA9IDB4JWxseFxuIiwgaSwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGliX2Nvbm4tPnBhZ2VfdmVjLT5wYWdlc1tpXSk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJfQogCiAJLyogdGFrZSBhIHJlZmVyZW5jZSBvbiB0aGlzIHJlZ2QgYnVmIHN1Y2ggdGhhdCBpdCB3aWxsIG5vdCBiZSByZWxlYXNlZCAqCiAJICogKGVnIGluIHNlbmQgZHRvIGNvbXBsZXRpb24pIGJlZm9yZSB3ZSBnZXQgdGhlIHNjc2kgcmVzcG9uc2UgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKaW5kZXggNzJmZWJmMS4uZWNkY2E3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCkBAIC04OCw4ICs4OCw5IEBACiAJCSAgICAgaXNlcl9jcV90YXNrbGV0X2ZuLAogCQkgICAgICh1bnNpZ25lZCBsb25nKWRldmljZSk7CiAKLQlkZXZpY2UtPm1yID0gaWJfZ2V0X2RtYV9tcihkZXZpY2UtPnBkLAotCQkJCSAgIElCX0FDQ0VTU19MT0NBTF9XUklURSk7CisJZGV2aWNlLT5tciA9IGliX2dldF9kbWFfbXIoZGV2aWNlLT5wZCwgSUJfQUNDRVNTX0xPQ0FMX1dSSVRFIHwKKwkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFIHwKKwkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOwogCWlmIChJU19FUlIoZGV2aWNlLT5tcikpCiAJCWdvdG8gZG1hX21yX2VycjsKIApAQCAtMTUwLDcgKzE1MSw3IEBACiAJfQogCWliX2Nvbm4tPnBhZ2VfdmVjLT5wYWdlcyA9ICh1NjQgKikgKGliX2Nvbm4tPnBhZ2VfdmVjICsgMSk7CiAKLQlwYXJhbXMucGFnZV9zaGlmdCAgICAgICAgPSBQQUdFX1NISUZUOworCXBhcmFtcy5wYWdlX3NoaWZ0ICAgICAgICA9IFNISUZUXzRLOwogCS8qIHdoZW4gdGhlIGZpcnN0L2xhc3QgU0cgZWxlbWVudCBhcmUgbm90IHN0YXJ0L2VuZCAqCiAJICogcGFnZSBhbGlnbmVkLCB0aGUgbWFwIHdob3VsZCBiZSBvZiBOKzEgcGFnZXMgICAgICovCiAJcGFyYW1zLm1heF9wYWdlc19wZXJfZm1yID0gSVNDU0lfSVNFUl9TR19UQUJMRVNJWkUgKyAxOwpAQCAtNjA0LDggKzYwNSw5IEBACiAKIAltZW1fcmVnLT5sa2V5ICA9IG1lbS0+Zm1yLT5sa2V5OwogCW1lbV9yZWctPnJrZXkgID0gbWVtLT5mbXItPnJrZXk7Ci0JbWVtX3JlZy0+bGVuICAgPSBwYWdlX3ZlYy0+bGVuZ3RoICogUEFHRV9TSVpFOworCW1lbV9yZWctPmxlbiAgID0gcGFnZV92ZWMtPmxlbmd0aCAqIFNJWkVfNEs7CiAJbWVtX3JlZy0+dmEgICAgPSBpb19hZGRyOworCW1lbV9yZWctPmlzX2ZtciA9IDE7CiAJbWVtX3JlZy0+bWVtX2ggPSAodm9pZCAqKW1lbTsKIAogCW1lbV9yZWctPnZhICAgKz0gcGFnZV92ZWMtPm9mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKaW5kZXggOGY0NzJlNy4uNDRiOWU1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTc3LDYgKzc3LDE0IEBACiAKIHN0YXRpYyBjb25zdCB1OCB0b3BzcGluX291aVszXSA9IHsgMHgwMCwgMHgwNSwgMHhhZCB9OwogCitzdGF0aWMgaW50IG1lbGxhbm94X3dvcmthcm91bmRzID0gMTsKKworbW9kdWxlX3BhcmFtKG1lbGxhbm94X3dvcmthcm91bmRzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhtZWxsYW5veF93b3JrYXJvdW5kcywKKwkJICJFbmFibGUgd29ya2Fyb3VuZHMgZm9yIE1lbGxhbm94IFNSUCB0YXJnZXQgYnVncyBpZiAhPSAwIik7CisKK3N0YXRpYyBjb25zdCB1OCBtZWxsYW5veF9vdWlbM10gPSB7IDB4MDAsIDB4MDIsIDB4YzkgfTsKKwogc3RhdGljIHZvaWQgc3JwX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgdm9pZCBzcnBfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKTsKQEAgLTg4LDYgKzk2LDggQEAKIAkucmVtb3ZlID0gc3JwX3JlbW92ZV9vbmUKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgaWJfc2FfY2xpZW50IHNycF9zYV9jbGllbnQ7CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNycF90YXJnZXRfcG9ydCAqaG9zdF90b190YXJnZXQoc3RydWN0IFNjc2lfSG9zdCAqaG9zdCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKikgaG9zdC0+aG9zdGRhdGE7CkBAIC0yNTksNyArMjY5LDggQEAKIAogCWluaXRfY29tcGxldGlvbigmdGFyZ2V0LT5kb25lKTsKIAotCXRhcmdldC0+cGF0aF9xdWVyeV9pZCA9IGliX3NhX3BhdGhfcmVjX2dldCh0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwKKwl0YXJnZXQtPnBhdGhfcXVlcnlfaWQgPSBpYl9zYV9wYXRoX3JlY19nZXQoJnNycF9zYV9jbGllbnQsCisJCQkJCQkgICB0YXJnZXQtPnNycF9ob3N0LT5kZXYtPmRldiwKIAkJCQkJCSAgIHRhcmdldC0+c3JwX2hvc3QtPnBvcnQsCiAJCQkJCQkgICAmdGFyZ2V0LT5wYXRoLAogCQkJCQkJICAgSUJfU0FfUEFUSF9SRUNfREdJRAkJfApAQCAtMzIyLDcgKzMzMyw3IEBACiAJcmVxLT5wcml2LnJlcV9idWZfZm10IAk9IGNwdV90b19iZTE2KFNSUF9CVUZfRk9STUFUX0RJUkVDVCB8CiAJCQkJCSAgICAgIFNSUF9CVUZfRk9STUFUX0lORElSRUNUKTsKIAkvKgotCSAqIEluIHRoZSBwdWJsaXNoZWQgU1JQIHNwZWNpZmljYXRpb24gKGRyYWZ0IHJldi4gMTZhKSwgdGhlIAorCSAqIEluIHRoZSBwdWJsaXNoZWQgU1JQIHNwZWNpZmljYXRpb24gKGRyYWZ0IHJldi4gMTZhKSwgdGhlCiAJICogcG9ydCBpZGVudGlmaWVyIGZvcm1hdCBpcyA4IGJ5dGVzIG9mIElEIGV4dGVuc2lvbiBmb2xsb3dlZAogCSAqIGJ5IDggYnl0ZXMgb2YgR1VJRC4gIE9sZGVyIGRyYWZ0cyBwdXQgdGhlIHR3byBoYWx2ZXMgaW4gdGhlCiAJICogb3Bwb3NpdGUgb3JkZXIsIHNvIHRoYXQgdGhlIEdVSUQgY29tZXMgZmlyc3QuCkBAIC01MjYsOCArNTM3LDEwIEBACiAJd2hpbGUgKGliX3BvbGxfY3EodGFyZ2V0LT5jcSwgMSwgJndjKSA+IDApCiAJCTsgLyogbm90aGluZyAqLwogCisJc3Bpbl9sb2NrX2lycSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxLCB0bXAsICZ0YXJnZXQtPnJlcV9xdWV1ZSwgbGlzdCkKIAkJc3JwX3Jlc2V0X3JlcSh0YXJnZXQsIHJlcSk7CisJc3Bpbl91bmxvY2tfaXJxKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2spOwogCiAJdGFyZ2V0LT5yeF9oZWFkCSA9IDA7CiAJdGFyZ2V0LT50eF9oZWFkCSA9IDA7CkBAIC01NjcsNyArNTgwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNycF9tYXBfZm1yKHN0cnVjdCBzcnBfZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2NhdCwKK3N0YXRpYyBpbnQgc3JwX21hcF9mbXIoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNjYXQsCiAJCSAgICAgICBpbnQgc2dfY250LCBzdHJ1Y3Qgc3JwX3JlcXVlc3QgKnJlcSwKIAkJICAgICAgIHN0cnVjdCBzcnBfZGlyZWN0X2J1ZiAqYnVmKQogewpAQCAtNTc3LDEwICs1OTAsMTUgQEAKIAlpbnQgcGFnZV9jbnQ7CiAJaW50IGksIGo7CiAJaW50IHJldDsKKwlzdHJ1Y3Qgc3JwX2RldmljZSAqZGV2ID0gdGFyZ2V0LT5zcnBfaG9zdC0+ZGV2OwogCiAJaWYgKCFkZXYtPmZtcl9wb29sKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCWlmICgoc2dfZG1hX2FkZHJlc3MoJnNjYXRbMF0pICYgfmRldi0+Zm1yX3BhZ2VfbWFzaykgJiYKKwkgICAgbWVsbGFub3hfd29ya2Fyb3VuZHMgJiYgIW1lbWNtcCgmdGFyZ2V0LT5pb2NfZ3VpZCwgbWVsbGFub3hfb3VpLCAzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlsZW4gPSBwYWdlX2NudCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHNnX2NudDsgKytpKSB7CiAJCWlmIChzZ19kbWFfYWRkcmVzcygmc2NhdFtpXSkgJiB+ZGV2LT5mbXJfcGFnZV9tYXNrKSB7CkBAIC02ODMsNyArNzAxLDcgQEAKIAkJYnVmLT52YSAgPSBjcHVfdG9fYmU2NChzZ19kbWFfYWRkcmVzcyhzY2F0KSk7CiAJCWJ1Zi0+a2V5ID0gY3B1X3RvX2JlMzIodGFyZ2V0LT5zcnBfaG9zdC0+ZGV2LT5tci0+cmtleSk7CiAJCWJ1Zi0+bGVuID0gY3B1X3RvX2JlMzIoc2dfZG1hX2xlbihzY2F0KSk7Ci0JfSBlbHNlIGlmIChzcnBfbWFwX2Ztcih0YXJnZXQtPnNycF9ob3N0LT5kZXYsIHNjYXQsIGNvdW50LCByZXEsCisJfSBlbHNlIGlmIChzcnBfbWFwX2Ztcih0YXJnZXQsIHNjYXQsIGNvdW50LCByZXEsCiAJCQkgICAgICAgKHZvaWQgKikgY21kLT5hZGRfZGF0YSkpIHsKIAkJLyoKIAkJICogRk1SIG1hcHBpbmcgZmFpbGVkLCBhbmQgdGhlIHNjYXR0ZXJsaXN0IGhhcyBtb3JlCkBAIC03ODQsMTMgKzgwMiw2IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNycF9yZWNvbm5lY3Rfd29yayh2b2lkICp0YXJnZXRfcHRyKQotewotCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHRhcmdldF9wdHI7Ci0KLQlzcnBfcmVjb25uZWN0X3RhcmdldCh0YXJnZXQpOwotfQotCiBzdGF0aWMgdm9pZCBzcnBfaGFuZGxlX3JlY3Yoc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0LCBzdHJ1Y3QgaWJfd2MgKndjKQogewogCXN0cnVjdCBzcnBfaXUgKml1OwpAQCAtODQzLDcgKzg1NCw2IEBACiB7CiAJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gdGFyZ2V0X3B0cjsKIAlzdHJ1Y3QgaWJfd2Mgd2M7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX05FWFRfQ09NUCk7CiAJd2hpbGUgKGliX3BvbGxfY3EoY3EsIDEsICZ3YykgPiAwKSB7CkBAIC04NTEsMTAgKzg2MSw2IEBACiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgJXMgc3RhdHVzICVkXG4iLAogCQkJICAgICAgIHdjLndyX2lkICYgU1JQX09QX1JFQ1YgPyAicmVjZWl2ZSIgOiAic2VuZCIsCiAJCQkgICAgICAgd2Muc3RhdHVzKTsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKHRhcmdldC0+c2NzaV9ob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKLQkJCWlmICh0YXJnZXQtPnN0YXRlID09IFNSUF9UQVJHRVRfTElWRSkKLQkJCQlzY2hlZHVsZV93b3JrKCZ0YXJnZXQtPndvcmspOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSh0YXJnZXQtPnNjc2lfaG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xNDQ2LDEyICsxNDUyLDI4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRhcmdldC0+emVyb19yZXFfbGltKTsKIH0KIAotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGlkX2V4dCwJU19JUlVHTywgc2hvd19pZF9leHQsCQlOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpb2NfZ3VpZCwJU19JUlVHTywgc2hvd19pb2NfZ3VpZCwJCU5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHNlcnZpY2VfaWQsCVNfSVJVR08sIHNob3dfc2VydmljZV9pZCwJTlVMTCk7Ci1zdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIocGtleSwJCVNfSVJVR08sIHNob3dfcGtleSwJCU5VTEwpOwotc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGRnaWQsCQlTX0lSVUdPLCBzaG93X2RnaWQsCQlOVUxMKTsKLXN0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUih6ZXJvX3JlcV9saW0sCVNfSVJVR08sIHNob3dfemVyb19yZXFfbGltLAlOVUxMKTsKK3N0YXRpYyBzc2l6ZV90IHNob3dfbG9jYWxfaWJfcG9ydChzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRhcmdldC0+c3JwX2hvc3QtPnBvcnQpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2xvY2FsX2liX2RldmljZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHNycF90YXJnZXRfcG9ydCAqdGFyZ2V0ID0gaG9zdF90b190YXJnZXQoY2xhc3NfdG9fc2hvc3QoY2RldikpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHRhcmdldC0+c3JwX2hvc3QtPmRldi0+ZGV2LT5uYW1lKTsKK30KKworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGlkX2V4dCwJICBTX0lSVUdPLCBzaG93X2lkX2V4dCwJCSBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihpb2NfZ3VpZCwJICBTX0lSVUdPLCBzaG93X2lvY19ndWlkLAkgTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoc2VydmljZV9pZCwJICBTX0lSVUdPLCBzaG93X3NlcnZpY2VfaWQsCSBOVUxMKTsKK3N0YXRpYyBDTEFTU19ERVZJQ0VfQVRUUihwa2V5LAkJICBTX0lSVUdPLCBzaG93X3BrZXksCQkgTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoZGdpZCwJCSAgU19JUlVHTywgc2hvd19kZ2lkLAkJIE5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKHplcm9fcmVxX2xpbSwJICBTX0lSVUdPLCBzaG93X3plcm9fcmVxX2xpbSwJIE5VTEwpOworc3RhdGljIENMQVNTX0RFVklDRV9BVFRSKGxvY2FsX2liX3BvcnQsICAgU19JUlVHTywgc2hvd19sb2NhbF9pYl9wb3J0LAkgTlVMTCk7CitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIobG9jYWxfaWJfZGV2aWNlLCBTX0lSVUdPLCBzaG93X2xvY2FsX2liX2RldmljZSwgTlVMTCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqc3JwX2hvc3RfYXR0cnNbXSA9IHsKIAkmY2xhc3NfZGV2aWNlX2F0dHJfaWRfZXh0LApAQCAtMTQ2MCw2ICsxNDgyLDggQEAKIAkmY2xhc3NfZGV2aWNlX2F0dHJfcGtleSwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfZGdpZCwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfemVyb19yZXFfbGltLAorCSZjbGFzc19kZXZpY2VfYXR0cl9sb2NhbF9pYl9wb3J0LAorCSZjbGFzc19kZXZpY2VfYXR0cl9sb2NhbF9pYl9kZXZpY2UsCiAJTlVMTAogfTsKIApAQCAtMTY5MCw4ICsxNzE0LDYgQEAKIAl0YXJnZXQtPnNjc2lfaG9zdCAgPSB0YXJnZXRfaG9zdDsKIAl0YXJnZXQtPnNycF9ob3N0ICAgPSBob3N0OwogCi0JSU5JVF9XT1JLKCZ0YXJnZXQtPndvcmssIHNycF9yZWNvbm5lY3Rfd29yaywgdGFyZ2V0KTsKLQogCUlOSVRfTElTVF9IRUFEKCZ0YXJnZXQtPmZyZWVfcmVxcyk7CiAJSU5JVF9MSVNUX0hFQUQoJnRhcmdldC0+cmVxX3F1ZXVlKTsKIAlmb3IgKGkgPSAwOyBpIDwgU1JQX1NRX1NJWkU7ICsraSkgewpAQCAtMTg4MCw3ICsxOTAyLDcgQEAKIAlpZiAoSVNfRVJSKHNycF9kZXYtPmZtcl9wb29sKSkKIAkJc3JwX2Rldi0+Zm1yX3Bvb2wgPSBOVUxMOwogCi0JaWYgKGRldmljZS0+bm9kZV90eXBlID09IElCX05PREVfU1dJVENIKSB7CisJaWYgKGRldmljZS0+bm9kZV90eXBlID09IFJETUFfTk9ERV9JQl9TV0lUQ0gpIHsKIAkJcyA9IDA7CiAJCWUgPSAwOwogCX0gZWxzZSB7CkBAIC0xOTc5LDkgKzIwMDEsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKKwlpYl9zYV9yZWdpc3Rlcl9jbGllbnQoJnNycF9zYV9jbGllbnQpOworCiAJcmV0ID0gaWJfcmVnaXN0ZXJfY2xpZW50KCZzcnBfY2xpZW50KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImNvdWxkbid0IHJlZ2lzdGVyIElCIGNsaWVudFxuIik7CisJCWliX3NhX3VucmVnaXN0ZXJfY2xpZW50KCZzcnBfc2FfY2xpZW50KTsKIAkJY2xhc3NfdW5yZWdpc3Rlcigmc3JwX2NsYXNzKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xOTkyLDYgKzIwMTcsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IHNycF9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZzcnBfY2xpZW50KTsKKwlpYl9zYV91bnJlZ2lzdGVyX2NsaWVudCgmc3JwX3NhX2NsaWVudCk7CiAJY2xhc3NfdW5yZWdpc3Rlcigmc3JwX2NsYXNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9ldmRldi5jIGIvZHJpdmVycy9pbnB1dC9ldmRldi5jCmluZGV4IGEyOWQ1Y2UuLjRiZjQ4MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZXZkZXYuYworKysgYi9kcml2ZXJzL2lucHV0L2V2ZGV2LmMKQEAgLTEyNywxNCArMTI3LDEwIEBACiB7CiAJc3RydWN0IGV2ZGV2X2xpc3QgKmxpc3Q7CiAJaW50IGkgPSBpbWlub3IoaW5vZGUpIC0gRVZERVZfTUlOT1JfQkFTRTsKLQlpbnQgYWNjZXB0X2VycjsKIAogCWlmIChpID49IEVWREVWX01JTk9SUyB8fCAhZXZkZXZfdGFibGVbaV0gfHwgIWV2ZGV2X3RhYmxlW2ldLT5leGlzdCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoKGFjY2VwdF9lcnIgPSBpbnB1dF9hY2NlcHRfcHJvY2VzcygmKGV2ZGV2X3RhYmxlW2ldLT5oYW5kbGUpLCBmaWxlKSkpCi0JCXJldHVybiBhY2NlcHRfZXJyOwotCiAJaWYgKCEobGlzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBldmRldl9saXN0KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjYwLDcgKzI1Niw3IEBACiAKIAkJaWYgKGV2ZGV2X2V2ZW50X2Zyb21fdXNlcihidWZmZXIgKyByZXR2YWwsICZldmVudCkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJaW5wdXRfZXZlbnQobGlzdC0+ZXZkZXYtPmhhbmRsZS5kZXYsIGV2ZW50LnR5cGUsIGV2ZW50LmNvZGUsIGV2ZW50LnZhbHVlKTsKKwkJaW5wdXRfaW5qZWN0X2V2ZW50KCZsaXN0LT5ldmRldi0+aGFuZGxlLCBldmVudC50eXBlLCBldmVudC5jb2RlLCBldmVudC52YWx1ZSk7CiAJCXJldHZhbCArPSBldmRldl9ldmVudF9zaXplKCk7CiAJfQogCkBAIC00MjgsOCArNDI0LDggQEAKIAkJCWlmIChnZXRfdXNlcih2LCBpcCArIDEpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCi0JCQlpbnB1dF9ldmVudChkZXYsIEVWX1JFUCwgUkVQX0RFTEFZLCB1KTsKLQkJCWlucHV0X2V2ZW50KGRldiwgRVZfUkVQLCBSRVBfUEVSSU9ELCB2KTsKKwkJCWlucHV0X2luamVjdF9ldmVudCgmZXZkZXYtPmhhbmRsZSwgRVZfUkVQLCBSRVBfREVMQVksIHUpOworCQkJaW5wdXRfaW5qZWN0X2V2ZW50KCZldmRldi0+aGFuZGxlLCBFVl9SRVAsIFJFUF9QRVJJT0QsIHYpOwogCiAJCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9mbTgwMS1ncC5jIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9mbTgwMS1ncC5jCmluZGV4IDQ3ZTkzZGEuLjkwZGU1YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZm04MDEtZ3AuYworKysgYi9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2ZtODAxLWdwLmMKQEAgLTEwNiwxMCArMTA2LDEwIEBACiAJZ3AtPmdhbWVwb3J0ID0gcG9ydDsKIAlncC0+cmVzX3BvcnQgPSByZXF1ZXN0X3JlZ2lvbihwb3J0LT5pbywgMHgxMCwgIkZNODAxIEdQIik7CiAJaWYgKCFncC0+cmVzX3BvcnQpIHsKLQkJa2ZyZWUoZ3ApOwotCQlnYW1lcG9ydF9mcmVlX3BvcnQocG9ydCk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJmbTgwMS1ncDogdW5hYmxlIHRvIGdyYWIgcmVnaW9uIDB4JXgtMHgleFxuIiwKIAkJCXBvcnQtPmlvLCBwb3J0LT5pbyArIDB4MGYpOworCQlnYW1lcG9ydF9mcmVlX3BvcnQocG9ydCk7CisJCWtmcmVlKGdwKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYyBiL2RyaXZlcnMvaW5wdXQvZ2FtZXBvcnQvZ2FtZXBvcnQuYwppbmRleCAzNjY0NGJmLi4zZjQ3YWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2dhbWVwb3J0L2dhbWVwb3J0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9nYW1lcG9ydC9nYW1lcG9ydC5jCkBAIC01Myw2ICs1Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgYnVzX3R5cGUgZ2FtZXBvcnRfYnVzOwogCitzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydik7CiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTsKIHN0YXRpYyB2b2lkIGdhbWVwb3J0X2Rlc3Ryb3lfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KTsKIHN0YXRpYyB2b2lkIGdhbWVwb3J0X3JlY29ubmVjdF9wb3J0KHN0cnVjdCBnYW1lcG9ydCAqZ2FtZXBvcnQpOwpAQCAtMjExLDggKzIxMiwxNCBAQAogCiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9maW5kX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQogeworCWludCBlcnJvcjsKKwogCWRvd25fd3JpdGUoJmdhbWVwb3J0X2J1cy5zdWJzeXMucndzZW0pOwotCWRldmljZV9hdHRhY2goJmdhbWVwb3J0LT5kZXYpOworCWVycm9yID0gZGV2aWNlX2F0dGFjaCgmZ2FtZXBvcnQtPmRldik7CisJaWYgKGVycm9yIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJImdhbWVwb3J0OiBkZXZpY2VfYXR0YWNoKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCQlnYW1lcG9ydC0+cGh5cywgZ2FtZXBvcnQtPm5hbWUsIGVycm9yKTsKIAl1cF93cml0ZSgmZ2FtZXBvcnRfYnVzLnN1YnN5cy5yd3NlbSk7CiB9CiAKQEAgLTMxNiw3ICszMjMsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhbWVwb3J0X2V2ZW50X2xvY2ssIGZsYWdzKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGdhbWVwb3J0X2V2ZW50ICpnYW1lcG9ydF9nZXRfZXZlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwpAQCAtMzQyLDcgKzM0OCw2IEBACiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9oYW5kbGVfZXZlbnQodm9pZCkKIHsKIAlzdHJ1Y3QgZ2FtZXBvcnRfZXZlbnQgKmV2ZW50OwotCXN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmdhbWVwb3J0X2RydjsKIAogCW11dGV4X2xvY2soJmdhbWVwb3J0X211dGV4KTsKIApAQCAtMzY5LDggKzM3NCw3IEBACiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgR0FNRVBPUlRfUkVHSVNURVJfRFJJVkVSOgotCQkJCWdhbWVwb3J0X2RydiA9IGV2ZW50LT5vYmplY3Q7Ci0JCQkJZHJpdmVyX3JlZ2lzdGVyKCZnYW1lcG9ydF9kcnYtPmRyaXZlcik7CisJCQkJZ2FtZXBvcnRfYWRkX2RyaXZlcihldmVudC0+b2JqZWN0KTsKIAkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKQEAgLTUzMiw2ICs1MzYsNyBAQAogCWlmIChnYW1lcG9ydC0+cGFyZW50KQogCQlnYW1lcG9ydC0+ZGV2LnBhcmVudCA9ICZnYW1lcG9ydC0+cGFyZW50LT5kZXY7CiAKKwlJTklUX0xJU1RfSEVBRCgmZ2FtZXBvcnQtPm5vZGUpOwogCXNwaW5fbG9ja19pbml0KCZnYW1lcG9ydC0+dGltZXJfbG9jayk7CiAJaW5pdF90aW1lcigmZ2FtZXBvcnQtPnBvbGxfdGltZXIpOwogCWdhbWVwb3J0LT5wb2xsX3RpbWVyLmZ1bmN0aW9uID0gZ2FtZXBvcnRfcnVuX3BvbGxfaGFuZGxlcjsKQEAgLTU0NCw2ICs1NDksOCBAQAogICovCiBzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfcG9ydChzdHJ1Y3QgZ2FtZXBvcnQgKmdhbWVwb3J0KQogeworCWludCBlcnJvcjsKKwogCWlmIChnYW1lcG9ydC0+cGFyZW50KQogCQlnYW1lcG9ydC0+cGFyZW50LT5jaGlsZCA9IGdhbWVwb3J0OwogCkBAIC01NTgsOCArNTY1LDEzIEBACiAJCXByaW50ayhLRVJOX0lORk8gImdhbWVwb3J0OiAlcyBpcyAlcywgc3BlZWQgJWRrSHpcbiIsCiAJCQlnYW1lcG9ydC0+bmFtZSwgZ2FtZXBvcnQtPnBoeXMsIGdhbWVwb3J0LT5zcGVlZCk7CiAKLQlkZXZpY2VfYWRkKCZnYW1lcG9ydC0+ZGV2KTsKLQlnYW1lcG9ydC0+cmVnaXN0ZXJlZCA9IDE7CisJZXJyb3IgPSBkZXZpY2VfYWRkKCZnYW1lcG9ydC0+ZGV2KTsKKwlpZiAoZXJyb3IpCisJCXByaW50ayhLRVJOX0VSUgorCQkJImdhbWVwb3J0OiBkZXZpY2VfYWRkKCkgZmFpbGVkIGZvciAlcyAoJXMpLCBlcnJvcjogJWRcbiIsCisJCQlnYW1lcG9ydC0+cGh5cywgZ2FtZXBvcnQtPm5hbWUsIGVycm9yKTsKKwllbHNlCisJCWdhbWVwb3J0LT5yZWdpc3RlcmVkID0gMTsKIH0KIAogLyoKQEAgLTU4MywxMCArNTk1LDExIEBACiAKIAlpZiAoZ2FtZXBvcnQtPnJlZ2lzdGVyZWQpIHsKIAkJZGV2aWNlX2RlbCgmZ2FtZXBvcnQtPmRldik7Ci0JCWxpc3RfZGVsX2luaXQoJmdhbWVwb3J0LT5ub2RlKTsKIAkJZ2FtZXBvcnQtPnJlZ2lzdGVyZWQgPSAwOwogCX0KIAorCWxpc3RfZGVsX2luaXQoJmdhbWVwb3J0LT5ub2RlKTsKKwogCWdhbWVwb3J0X3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhnYW1lcG9ydCk7CiAJcHV0X2RldmljZSgmZ2FtZXBvcnQtPmRldik7CiB9CkBAIC03MDQsMTEgKzcxNywyMiBAQAogfQogCiBzdGF0aWMgc3RydWN0IGJ1c190eXBlIGdhbWVwb3J0X2J1cyA9IHsKLQkubmFtZSA9CSJnYW1lcG9ydCIsCi0JLnByb2JlID0gZ2FtZXBvcnRfZHJpdmVyX3Byb2JlLAotCS5yZW1vdmUgPSBnYW1lcG9ydF9kcml2ZXJfcmVtb3ZlLAorCS5uYW1lCT0gImdhbWVwb3J0IiwKKwkucHJvYmUJPSBnYW1lcG9ydF9kcml2ZXJfcHJvYmUsCisJLnJlbW92ZQk9IGdhbWVwb3J0X2RyaXZlcl9yZW1vdmUsCiB9OwogCitzdGF0aWMgdm9pZCBnYW1lcG9ydF9hZGRfZHJpdmVyKHN0cnVjdCBnYW1lcG9ydF9kcml2ZXIgKmRydikKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkiZ2FtZXBvcnQ6IGRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKKwkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKK30KKwogdm9pZCBfX2dhbWVwb3J0X3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgZ2FtZXBvcnRfZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCWRydi0+ZHJpdmVyLmJ1cyA9ICZnYW1lcG9ydF9idXM7CkBAIC03NzgsMTYgKzgwMiwyNCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnYW1lcG9ydF9pbml0KHZvaWQpCiB7Ci0JZ2FtZXBvcnRfdGFzayA9IGt0aHJlYWRfcnVuKGdhbWVwb3J0X3RocmVhZCwgTlVMTCwgImtnYW1lcG9ydGQiKTsKLQlpZiAoSVNfRVJSKGdhbWVwb3J0X3Rhc2spKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiZ2FtZXBvcnQ6IEZhaWxlZCB0byBzdGFydCBrZ2FtZXBvcnRkXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoZ2FtZXBvcnRfdGFzayk7Ci0JfQorCWludCBlcnJvcjsKIAogCWdhbWVwb3J0X2J1cy5kZXZfYXR0cnMgPSBnYW1lcG9ydF9kZXZpY2VfYXR0cnM7CiAJZ2FtZXBvcnRfYnVzLmRydl9hdHRycyA9IGdhbWVwb3J0X2RyaXZlcl9hdHRyczsKIAlnYW1lcG9ydF9idXMubWF0Y2ggPSBnYW1lcG9ydF9idXNfbWF0Y2g7Ci0JYnVzX3JlZ2lzdGVyKCZnYW1lcG9ydF9idXMpOworCWVycm9yID0gYnVzX3JlZ2lzdGVyKCZnYW1lcG9ydF9idXMpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIgImdhbWVwb3J0OiBmYWlsZWQgdG8gcmVnaXN0ZXIgZ2FtZXBvcnQgYnVzLCBlcnJvcjogJWRcbiIsIGVycm9yKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWdhbWVwb3J0X3Rhc2sgPSBrdGhyZWFkX3J1bihnYW1lcG9ydF90aHJlYWQsIE5VTEwsICJrZ2FtZXBvcnRkIik7CisJaWYgKElTX0VSUihnYW1lcG9ydF90YXNrKSkgeworCQlidXNfdW5yZWdpc3RlcigmZ2FtZXBvcnRfYnVzKTsKKwkJZXJyb3IgPSBQVFJfRVJSKGdhbWVwb3J0X3Rhc2spOworCQlwcmludGsoS0VSTl9FUlIgImdhbWVwb3J0OiBGYWlsZWQgdG8gc3RhcnQga2dhbWVwb3J0ZCwgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwppbmRleCBhOTA0ODZmLi45Y2I0YjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC9pbnB1dC5jCkBAIC0zNSw2ICszNSwxNiBAQAogCiBzdGF0aWMgc3RydWN0IGlucHV0X2hhbmRsZXIgKmlucHV0X3RhYmxlWzhdOwogCisvKioKKyAqIGlucHV0X2V2ZW50KCkgLSByZXBvcnQgbmV3IGlucHV0IGV2ZW50CisgKiBAaGFuZGxlOiBkZXZpY2UgdGhhdCBnZW5lcmF0ZWQgdGhlIGV2ZW50CisgKiBAdHlwZTogdHlwZSBvZiB0aGUgZXZlbnQKKyAqIEBjb2RlOiBldmVudCBjb2RlCisgKiBAdmFsdWU6IHZhbHVlIG9mIHRoZSBldmVudAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHVzZWQgYnkgZHJpdmVycyBpbXBsZW1lbnRpbmcgdmFyaW91cyBpbnB1dCBkZXZpY2VzCisgKiBTZWUgYWxzbyBpbnB1dF9pbmplY3RfZXZlbnQoKQorICovCiB2b2lkIGlucHV0X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCiB7CiAJc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlOwpAQCAtMTgzLDYgKzE5MywyMyBAQAogfQogRVhQT1JUX1NZTUJPTChpbnB1dF9ldmVudCk7CiAKKy8qKgorICogaW5wdXRfaW5qZWN0X2V2ZW50KCkgLSBzZW5kIGlucHV0IGV2ZW50IGZyb20gaW5wdXQgaGFuZGxlcgorICogQGhhbmRsZTogaW5wdXQgaGFuZGxlIHRvIHNlbmQgZXZlbnQgdGhyb3VnaAorICogQHR5cGU6IHR5cGUgb2YgdGhlIGV2ZW50CisgKiBAY29kZTogZXZlbnQgY29kZQorICogQHZhbHVlOiB2YWx1ZSBvZiB0aGUgZXZlbnQKKyAqCisgKiBTaW1pbGFyIHRvIGlucHV0X2V2ZW50KCkgYnV0IHdpbGwgaWdub3JlIGV2ZW50IGlmIGRldmljZSBpcyAiZ3JhYmJlZCIgYW5kIGhhbmRsZQorICogaW5qZWN0aW5nIGV2ZW50IGlzIG5vdCB0aGUgb25lIHRoYXQgb3ducyB0aGUgZGV2aWNlLgorICovCit2b2lkIGlucHV0X2luamVjdF9ldmVudChzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCWlmICghaGFuZGxlLT5kZXYtPmdyYWIgfHwgaGFuZGxlLT5kZXYtPmdyYWIgPT0gaGFuZGxlKQorCQlpbnB1dF9ldmVudChoYW5kbGUtPmRldiwgdHlwZSwgY29kZSwgdmFsdWUpOworfQorRVhQT1JUX1NZTUJPTChpbnB1dF9pbmplY3RfZXZlbnQpOworCiBzdGF0aWMgdm9pZCBpbnB1dF9yZXBlYXRfa2V5KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSAodm9pZCAqKSBkYXRhOwpAQCAtMTk3LDE1ICsyMjQsNiBAQAogCQltb2RfdGltZXIoJmRldi0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGRldi0+cmVwW1JFUF9QRVJJT0RdKSk7CiB9CiAKLWludCBpbnB1dF9hY2NlcHRfcHJvY2VzcyhzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWlmIChoYW5kbGUtPmRldi0+YWNjZXB0KQotCQlyZXR1cm4gaGFuZGxlLT5kZXYtPmFjY2VwdChoYW5kbGUtPmRldiwgZmlsZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaW5wdXRfYWNjZXB0X3Byb2Nlc3MpOwotCiBpbnQgaW5wdXRfZ3JhYl9kZXZpY2Uoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlKQogewogCWlmIChoYW5kbGUtPmRldi0+Z3JhYikKQEAgLTIxOCw4ICsyMzYsMTUgQEAKIAogdm9pZCBpbnB1dF9yZWxlYXNlX2RldmljZShzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpCiB7Ci0JaWYgKGhhbmRsZS0+ZGV2LT5ncmFiID09IGhhbmRsZSkKLQkJaGFuZGxlLT5kZXYtPmdyYWIgPSBOVUxMOworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGhhbmRsZS0+ZGV2OworCisJaWYgKGRldi0+Z3JhYiA9PSBoYW5kbGUpIHsKKwkJZGV2LT5ncmFiID0gTlVMTDsKKworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZSwgJmRldi0+aF9saXN0LCBkX25vZGUpCisJCQlpZiAoaGFuZGxlLT5oYW5kbGVyLT5zdGFydCkKKwkJCQloYW5kbGUtPmhhbmRsZXItPnN0YXJ0KGhhbmRsZSk7CisJfQogfQogRVhQT1JUX1NZTUJPTChpbnB1dF9yZWxlYXNlX2RldmljZSk7CiAKQEAgLTk2Myw4ICs5ODgsMTEgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhbmRsZXIsICZpbnB1dF9oYW5kbGVyX2xpc3QsIG5vZGUpCiAJCWlmICghaGFuZGxlci0+YmxhY2tsaXN0IHx8ICFpbnB1dF9tYXRjaF9kZXZpY2UoaGFuZGxlci0+YmxhY2tsaXN0LCBkZXYpKQogCQkJaWYgKChpZCA9IGlucHV0X21hdGNoX2RldmljZShoYW5kbGVyLT5pZF90YWJsZSwgZGV2KSkpCi0JCQkJaWYgKChoYW5kbGUgPSBoYW5kbGVyLT5jb25uZWN0KGhhbmRsZXIsIGRldiwgaWQpKSkKKwkJCQlpZiAoKGhhbmRsZSA9IGhhbmRsZXItPmNvbm5lY3QoaGFuZGxlciwgZGV2LCBpZCkpKSB7CiAJCQkJCWlucHV0X2xpbmtfaGFuZGxlKGhhbmRsZSk7CisJCQkJCWlmIChoYW5kbGVyLT5zdGFydCkKKwkJCQkJCWhhbmRsZXItPnN0YXJ0KGhhbmRsZSk7CisJCQkJfQogCiAJaW5wdXRfd2FrZXVwX3Byb2Nmc19yZWFkZXJzKCk7CiAKQEAgLTEwMjgsOCArMTA1NiwxMSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmaW5wdXRfZGV2X2xpc3QsIG5vZGUpCiAJCWlmICghaGFuZGxlci0+YmxhY2tsaXN0IHx8ICFpbnB1dF9tYXRjaF9kZXZpY2UoaGFuZGxlci0+YmxhY2tsaXN0LCBkZXYpKQogCQkJaWYgKChpZCA9IGlucHV0X21hdGNoX2RldmljZShoYW5kbGVyLT5pZF90YWJsZSwgZGV2KSkpCi0JCQkJaWYgKChoYW5kbGUgPSBoYW5kbGVyLT5jb25uZWN0KGhhbmRsZXIsIGRldiwgaWQpKSkKKwkJCQlpZiAoKGhhbmRsZSA9IGhhbmRsZXItPmNvbm5lY3QoaGFuZGxlciwgZGV2LCBpZCkpKSB7CiAJCQkJCWlucHV0X2xpbmtfaGFuZGxlKGhhbmRsZSk7CisJCQkJCWlmIChoYW5kbGVyLT5zdGFydCkKKwkJCQkJCWhhbmRsZXItPnN0YXJ0KGhhbmRsZSk7CisJCQkJfQogCiAJaW5wdXRfd2FrZXVwX3Byb2Nmc19yZWFkZXJzKCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9pZm9yY2UvaWZvcmNlLW1haW4uYwppbmRleCA2ZDk5ZTNjLi5iNDkxNGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL2lmb3JjZS9pZm9yY2UtbWFpbi5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svaWZvcmNlL2lmb3JjZS1tYWluLmMKQEAgLTc5LDYgKzc5LDcgQEAKIAl7IDB4MDZmOCwgMHgwMDAxLCAiR3VpbGxlbW90IFJhY2UgTGVhZGVyIEZvcmNlIEZlZWRiYWNrIiwJYnRuX3doZWVsLCBhYnNfd2hlZWwsIGZmX2lmb3JjZSB9LCAvLz8KIAl7IDB4MDZmOCwgMHgwMDA0LCAiR3VpbGxlbW90IEZvcmNlIEZlZWRiYWNrIFJhY2luZyBXaGVlbCIsCWJ0bl93aGVlbCwgYWJzX3doZWVsLCBmZl9pZm9yY2UgfSwgLy8/CiAJeyAweDA2ZjgsIDB4MDAwNCwgIkd1bGxlbW90IEpldCBMZWFkZXIgM0QiLAkJCWJ0bl9qb3lzdGljaywgYWJzX2pveXN0aWNrLCBmZl9pZm9yY2UgfSwgLy8/CisJeyAweDA2ZDYsIDB4MjliYywgIlRydXN0IEZvcmNlIEZlZWRiYWNrIFJhY2UgTWFzdGVyIiwJCWJ0bl93aGVlbCwgYWJzX3doZWVsLCBmZl9pZm9yY2UgfSwKIAl7IDB4MDAwMCwgMHgwMDAwLCAiVW5rbm93biBJLUZvcmNlIERldmljZSBbJTA0eDolMDR4XSIsCQlidG5fam95c3RpY2ssIGFic19qb3lzdGljaywgZmZfaWZvcmNlIH0KIH07CiAKQEAgLTIyMiwyMiArMjIzLDIyIEBACiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGlmb3JjZV9jb3JlX2VmZmVjdCogY29yZV9lZmZlY3Q7CiAKLQkvKiBDaGVjayB3aG8gaXMgdHJ5aW5nIHRvIGVyYXNlIHRoaXMgZWZmZWN0ICovCi0JaWYgKGlmb3JjZS0+Y29yZV9lZmZlY3RzW2VmZmVjdF9pZF0ub3duZXIgIT0gY3VycmVudC0+cGlkKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgImlmb3JjZS1tYWluLmM6ICVkIHRyaWVkIHRvIGVyYXNlIGFuIGVmZmVjdCBiZWxvbmdpbmcgdG8gJWRcbiIsIGN1cnJlbnQtPnBpZCwgaWZvcmNlLT5jb3JlX2VmZmVjdHNbZWZmZWN0X2lkXS5vd25lcik7Ci0JCXJldHVybiAtRUFDQ0VTOwotCX0KLQogCWlmIChlZmZlY3RfaWQgPCAwIHx8IGVmZmVjdF9pZCA+PSBGRl9FRkZFQ1RTX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQljb3JlX2VmZmVjdCA9IGlmb3JjZS0+Y29yZV9lZmZlY3RzICsgZWZmZWN0X2lkOworCWNvcmVfZWZmZWN0ID0gJmlmb3JjZS0+Y29yZV9lZmZlY3RzW2VmZmVjdF9pZF07CisKKwkvKiBDaGVjayB3aG8gaXMgdHJ5aW5nIHRvIGVyYXNlIHRoaXMgZWZmZWN0ICovCisJaWYgKGNvcmVfZWZmZWN0LT5vd25lciAhPSBjdXJyZW50LT5waWQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWZvcmNlLW1haW4uYzogJWQgdHJpZWQgdG8gZXJhc2UgYW4gZWZmZWN0IGJlbG9uZ2luZyB0byAlZFxuIiwgY3VycmVudC0+cGlkLCBjb3JlX2VmZmVjdC0+b3duZXIpOworCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CiAKIAlpZiAodGVzdF9iaXQoRkZfTU9EMV9JU19VU0VELCBjb3JlX2VmZmVjdC0+ZmxhZ3MpKQotCQllcnIgPSByZWxlYXNlX3Jlc291cmNlKCYoaWZvcmNlLT5jb3JlX2VmZmVjdHNbZWZmZWN0X2lkXS5tb2QxX2NodW5rKSk7CisJCWVyciA9IHJlbGVhc2VfcmVzb3VyY2UoJmNvcmVfZWZmZWN0LT5tb2QxX2NodW5rKTsKIAogCWlmICghZXJyICYmIHRlc3RfYml0KEZGX01PRDJfSVNfVVNFRCwgY29yZV9lZmZlY3QtPmZsYWdzKSkKLQkJZXJyID0gcmVsZWFzZV9yZXNvdXJjZSgmKGlmb3JjZS0+Y29yZV9lZmZlY3RzW2VmZmVjdF9pZF0ubW9kMl9jaHVuaykpOworCQllcnIgPSByZWxlYXNlX3Jlc291cmNlKCZjb3JlX2VmZmVjdC0+bW9kMl9jaHVuayk7CiAKIAkvKlRPRE86IHJlbWVtYmVyIHRvIGNoYW5nZSB0aGF0IGlmIG1vcmUgRkZfTU9EKiBiaXRzIGFyZSBhZGRlZCAqLwogCWNvcmVfZWZmZWN0LT5mbGFnc1swXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jIGIvZHJpdmVycy9pbnB1dC9qb3lzdGljay9zcGFjZWJhbGwuYwppbmRleCA3NWViNWNhLi43YTE5ZWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2pveXN0aWNrL3NwYWNlYmFsbC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvam95c3RpY2svc3BhY2ViYWxsLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqLwogCiAjZGVmaW5lIFNQQUNFQkFMTF9NQVhfTEVOR1RICTEyOAotI2RlZmluZSBTUEFDRUJBTExfTUFYX0lECTgKKyNkZWZpbmUgU1BBQ0VCQUxMX01BWF9JRAk5CiAKICNkZWZpbmUgU1BBQ0VCQUxMXzEwMDMgICAgICAxCiAjZGVmaW5lIFNQQUNFQkFMTF8yMDAzQiAgICAgMwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9hdGtiZC5jCmluZGV4IGNlMWYxMGUuLmE4NmFmZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvYXRrYmQuYworKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2F0a2JkLmMKQEAgLTQ4Miw2ICs0ODIsNTUgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBpbnQgYXRrYmRfc2V0X3JlcGVhdF9yYXRlKHN0cnVjdCBhdGtiZCAqYXRrYmQpCit7CisJY29uc3Qgc2hvcnQgcGVyaW9kWzMyXSA9CisJCXsgMzMsICAzNywgIDQyLCAgNDYsICA1MCwgIDU0LCAgNTgsICA2MywgIDY3LCAgNzUsICA4MywgIDkyLCAxMDAsIDEwOSwgMTE2LCAxMjUsCisJCSAxMzMsIDE0OSwgMTY3LCAxODIsIDIwMCwgMjE3LCAyMzIsIDI1MCwgMjcwLCAzMDMsIDMzMywgMzcwLCA0MDAsIDQzNSwgNDcwLCA1MDAgfTsKKwljb25zdCBzaG9ydCBkZWxheVs0XSA9CisJCXsgMjUwLCA1MDAsIDc1MCwgMTAwMCB9OworCisJc3RydWN0IGlucHV0X2RldiAqZGV2ID0gYXRrYmQtPmRldjsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtOworCWludCBpID0gMCwgaiA9IDA7CisKKwl3aGlsZSAoaSA8IEFSUkFZX1NJWkUocGVyaW9kKSAtIDEgJiYgcGVyaW9kW2ldIDwgZGV2LT5yZXBbUkVQX1BFUklPRF0pCisJCWkrKzsKKwlkZXYtPnJlcFtSRVBfUEVSSU9EXSA9IHBlcmlvZFtpXTsKKworCXdoaWxlIChqIDwgQVJSQVlfU0laRShkZWxheSkgLSAxICYmIGRlbGF5W2pdIDwgZGV2LT5yZXBbUkVQX0RFTEFZXSkKKwkJaisrOworCWRldi0+cmVwW1JFUF9ERUxBWV0gPSBkZWxheVtqXTsKKworCXBhcmFtID0gaSB8IChqIDw8IDUpOworCXJldHVybiBwczJfY29tbWFuZCgmYXRrYmQtPnBzMmRldiwgJnBhcmFtLCBBVEtCRF9DTURfU0VUUkVQKTsKK30KKworc3RhdGljIGludCBhdGtiZF9zZXRfbGVkcyhzdHJ1Y3QgYXRrYmQgKmF0a2JkKQoreworCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IGF0a2JkLT5kZXY7CisJdW5zaWduZWQgY2hhciBwYXJhbVsyXTsKKworCXBhcmFtWzBdID0gKHRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPyAxIDogMCkKKwkJIHwgKHRlc3RfYml0KExFRF9OVU1MLCAgICBkZXYtPmxlZCkgPyAyIDogMCkKKwkJIHwgKHRlc3RfYml0KExFRF9DQVBTTCwgICBkZXYtPmxlZCkgPyA0IDogMCk7CisJaWYgKHBzMl9jb21tYW5kKCZhdGtiZC0+cHMyZGV2LCBwYXJhbSwgQVRLQkRfQ01EX1NFVExFRFMpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoYXRrYmQtPmV4dHJhKSB7CisJCXBhcmFtWzBdID0gMDsKKwkJcGFyYW1bMV0gPSAodGVzdF9iaXQoTEVEX0NPTVBPU0UsIGRldi0+bGVkKSA/IDB4MDEgOiAwKQorCQkJIHwgKHRlc3RfYml0KExFRF9TTEVFUCwgICBkZXYtPmxlZCkgPyAweDAyIDogMCkKKwkJCSB8ICh0ZXN0X2JpdChMRURfU1VTUEVORCwgZGV2LT5sZWQpID8gMHgwNCA6IDApCisJCQkgfCAodGVzdF9iaXQoTEVEX01JU0MsICAgIGRldi0+bGVkKSA/IDB4MTAgOiAwKQorCQkJIHwgKHRlc3RfYml0KExFRF9NVVRFLCAgICBkZXYtPmxlZCkgPyAweDIwIDogMCk7CisJCWlmIChwczJfY29tbWFuZCgmYXRrYmQtPnBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9FWF9TRVRMRURTKSkKKwkJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIGF0a2JkX2V2ZW50X3dvcmsoKSBpcyB1c2VkIHRvIGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgZXZlbnRzIHRoYXQKICAqIGNhbiBub3QgYmUgcHJvY2Vzc2VkIGJ5IGlucHV0X2V2ZW50KCkgd2hpY2ggaXMgb2Z0ZW4gY2FsbGVkIGZyb20KQEAgLTQ5MCw0NyArNTM5LDE1IEBACiAKIHN0YXRpYyB2b2lkIGF0a2JkX2V2ZW50X3dvcmsodm9pZCAqZGF0YSkKIHsKLQljb25zdCBzaG9ydCBwZXJpb2RbMzJdID0KLQkJeyAzMywgIDM3LCAgNDIsICA0NiwgIDUwLCAgNTQsICA1OCwgIDYzLCAgNjcsICA3NSwgIDgzLCAgOTIsIDEwMCwgMTA5LCAxMTYsIDEyNSwKLQkJIDEzMywgMTQ5LCAxNjcsIDE4MiwgMjAwLCAyMTcsIDIzMiwgMjUwLCAyNzAsIDMwMywgMzMzLCAzNzAsIDQwMCwgNDM1LCA0NzAsIDUwMCB9OwotCWNvbnN0IHNob3J0IGRlbGF5WzRdID0KLQkJeyAyNTAsIDUwMCwgNzUwLCAxMDAwIH07Ci0KIAlzdHJ1Y3QgYXRrYmQgKmF0a2JkID0gZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSBhdGtiZC0+ZGV2OwotCXVuc2lnbmVkIGNoYXIgcGFyYW1bMl07Ci0JaW50IGksIGo7CiAKIAltdXRleF9sb2NrKCZhdGtiZC0+ZXZlbnRfbXV0ZXgpOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKSB7Ci0JCXBhcmFtWzBdID0gKHRlc3RfYml0KExFRF9TQ1JPTExMLCBkZXYtPmxlZCkgPyAxIDogMCkKLQkJCSB8ICh0ZXN0X2JpdChMRURfTlVNTCwgICAgZGV2LT5sZWQpID8gMiA6IDApCi0JCQkgfCAodGVzdF9iaXQoTEVEX0NBUFNMLCAgIGRldi0+bGVkKSA/IDQgOiAwKTsKLQkJcHMyX2NvbW1hbmQoJmF0a2JkLT5wczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfU0VUTEVEUyk7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9MRURfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQlhdGtiZF9zZXRfbGVkcyhhdGtiZCk7CiAKLQkJaWYgKGF0a2JkLT5leHRyYSkgewotCQkJcGFyYW1bMF0gPSAwOwotCQkJcGFyYW1bMV0gPSAodGVzdF9iaXQoTEVEX0NPTVBPU0UsIGRldi0+bGVkKSA/IDB4MDEgOiAwKQotCQkJCSB8ICh0ZXN0X2JpdChMRURfU0xFRVAsICAgZGV2LT5sZWQpID8gMHgwMiA6IDApCi0JCQkJIHwgKHRlc3RfYml0KExFRF9TVVNQRU5ELCBkZXYtPmxlZCkgPyAweDA0IDogMCkKLQkJCQkgfCAodGVzdF9iaXQoTEVEX01JU0MsICAgIGRldi0+bGVkKSA/IDB4MTAgOiAwKQotCQkJCSB8ICh0ZXN0X2JpdChMRURfTVVURSwgICAgZGV2LT5sZWQpID8gMHgyMCA6IDApOwotCQkJcHMyX2NvbW1hbmQoJmF0a2JkLT5wczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfRVhfU0VUTEVEUyk7Ci0JCX0KLQl9Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KEFUS0JEX1JFUF9FVkVOVF9CSVQsICZhdGtiZC0+ZXZlbnRfbWFzaykpIHsKLQkJaSA9IGogPSAwOwotCQl3aGlsZSAoaSA8IDMxICYmIHBlcmlvZFtpXSA8IGRldi0+cmVwW1JFUF9QRVJJT0RdKQotCQkJaSsrOwotCQl3aGlsZSAoaiA8IDMgJiYgZGVsYXlbal0gPCBkZXYtPnJlcFtSRVBfREVMQVldKQotCQkJaisrOwotCQlkZXYtPnJlcFtSRVBfUEVSSU9EXSA9IHBlcmlvZFtpXTsKLQkJZGV2LT5yZXBbUkVQX0RFTEFZXSA9IGRlbGF5W2pdOwotCQlwYXJhbVswXSA9IGkgfCAoaiA8PCA1KTsKLQkJcHMyX2NvbW1hbmQoJmF0a2JkLT5wczJkZXYsIHBhcmFtLCBBVEtCRF9DTURfU0VUUkVQKTsKLQl9CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChBVEtCRF9SRVBfRVZFTlRfQklULCAmYXRrYmQtPmV2ZW50X21hc2spKQorCQlhdGtiZF9zZXRfcmVwZWF0X3JhdGUoYXRrYmQpOwogCiAJbXV0ZXhfdW5sb2NrKCZhdGtiZC0+ZXZlbnRfbXV0ZXgpOwogfQpAQCAtOTc1LDcgKzk5Miw2IEBACiB7CiAJc3RydWN0IGF0a2JkICphdGtiZCA9IHNlcmlvX2dldF9kcnZkYXRhKHNlcmlvKTsKIAlzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYgPSBzZXJpby0+ZHJ2OwotCXVuc2lnbmVkIGNoYXIgcGFyYW1bMV07CiAKIAlpZiAoIWF0a2JkIHx8ICFkcnYpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImF0a2JkOiByZWNvbm5lY3QgcmVxdWVzdCwgYnV0IHNlcmlvIGlzIGRpc2Nvbm5lY3RlZCwgaWdub3JpbmcuLi5cbiIpOwpAQCAtOTg1LDEwICsxMDAxLDYgQEAKIAlhdGtiZF9kaXNhYmxlKGF0a2JkKTsKIAogCWlmIChhdGtiZC0+d3JpdGUpIHsKLQkJcGFyYW1bMF0gPSAodGVzdF9iaXQoTEVEX1NDUk9MTEwsIGF0a2JkLT5kZXYtPmxlZCkgPyAxIDogMCkKLQkJICAgICAgICAgfCAodGVzdF9iaXQoTEVEX05VTUwsICAgIGF0a2JkLT5kZXYtPmxlZCkgPyAyIDogMCkKLQkJICAgICAgICAgfCAodGVzdF9iaXQoTEVEX0NBUFNMLCAgIGF0a2JkLT5kZXYtPmxlZCkgPyA0IDogMCk7Ci0KIAkJaWYgKGF0a2JkX3Byb2JlKGF0a2JkKSkKIAkJCXJldHVybiAtMTsKIAkJaWYgKGF0a2JkLT5zZXQgIT0gYXRrYmRfc2VsZWN0X3NldChhdGtiZCwgYXRrYmQtPnNldCwgYXRrYmQtPmV4dHJhKSkKQEAgLTk5Niw4ICsxMDA4LDEzIEBACiAKIAkJYXRrYmRfYWN0aXZhdGUoYXRrYmQpOwogCi0JCWlmIChwczJfY29tbWFuZCgmYXRrYmQtPnBzMmRldiwgcGFyYW0sIEFUS0JEX0NNRF9TRVRMRURTKSkKLQkJCXJldHVybiAtMTsKKy8qCisgKiBSZXN0b3JlIHJlcGVhdCByYXRlIGFuZCBMRURzICh0aGF0IHdlcmUgcmVzZXQgYnkgYXRrYmRfYWN0aXZhdGUpCisgKiB0byBwcmUtcmVzdW1lIHN0YXRlCisgKi8KKwkJaWYgKCFhdGtiZC0+c29mdHJlcGVhdCkKKwkJCWF0a2JkX3NldF9yZXBlYXRfcmF0ZShhdGtiZCk7CisJCWF0a2JkX3NldF9sZWRzKGF0a2JkKTsKIAl9CiAKIAlhdGtiZF9lbmFibGUoYXRrYmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jIGIvZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCmluZGV4IGNjZjBmYWUuLmRlMGY0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy93aXN0cm9uX2J0bnMuYworKysgYi9kcml2ZXJzL2lucHV0L21pc2Mvd2lzdHJvbl9idG5zLmMKQEAgLTk0LDcgKzk0LDcgQEAKIAogc3RhdGljIHNzaXplX3QgX19pbml0IGxvY2F0ZV93aXN0cm9uX2Jpb3Modm9pZCBfX2lvbWVtICpiYXNlKQogewotCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9faW5pdGRhdGEgc2lnbmF0dXJlW10gPQorCXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9faW5pdGRhdGEgc2lnbmF0dXJlW10gPQogCQl7IDB4NDIsIDB4MjEsIDB4NTUsIDB4MzAgfTsKIAlzc2l6ZV90IG9mZnNldDsKIApAQCAtMzQzLDcgKzM0Myw3IEBACiAgKiBhIGxpc3Qgb2YgYnV0dG9ucyBhbmQgdGhlaXIga2V5IGNvZGVzIChyZXBvcnRlZCB3aGVuIGxvYWRpbmcgdGhpcyBtb2R1bGUKICAqIHdpdGggZm9yY2U9MSkgYW5kIHRoZSBvdXRwdXQgb2YgZG1pZGVjb2RlIHRvICRNT0RVTEVfQVVUSE9SLgogICovCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgZG1pX2lkc1tdID0geworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGRtaV9pZHNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLmNhbGxiYWNrID0gZG1pX21hdGNoZWQsCiAJCS5pZGVudCA9ICJGdWppdHN1LVNpZW1lbnMgQW1pbG8gUHJvIFYyMDAwIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMgYi9kcml2ZXJzL2lucHV0L21vdXNlL2xvZ2lwczJwcC5jCmluZGV4IDJmMGQyODguLjU0YjY5NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbW91c2UvbG9naXBzMnBwLmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS9sb2dpcHMycHAuYwpAQCAtMjM4LDggKzIzOCw3IEBACiAJCXsgMTAwLAlQUzJQUF9LSU5EX01YLAkJCQkJLyogTVg1MTAgKi8KIAkJCQlQUzJQUF9XSEVFTCB8IFBTMlBQX1NJREVfQlROIHwgUFMyUFBfVEFTS19CVE4gfAogCQkJCVBTMlBQX0VYVFJBX0JUTiB8IFBTMlBQX05BVl9CVE4gfSwKLQkJeyAxMTEsICBQUzJQUF9LSU5EX01YLAkJCQkJLyogTVgzMDAgKi8KLQkJCQlQUzJQUF9XSEVFTCB8IFBTMlBQX0VYVFJBX0JUTiB8IFBTMlBQX1RBU0tfQlROIH0sCisJCXsgMTExLCAgUFMyUFBfS0lORF9NWCwJUFMyUFBfV0hFRUwgfCBQUzJQUF9TSURFX0JUTiB9LAkvKiBNWDMwMCByZXBvcnRzIHRhc2sgYnV0dG9uIGFzIHNpZGUgKi8KIAkJeyAxMTIsCVBTMlBQX0tJTkRfTVgsCQkJCQkvKiBNWDUwMCAqLwogCQkJCVBTMlBQX1dIRUVMIHwgUFMyUFBfU0lERV9CVE4gfCBQUzJQUF9UQVNLX0JUTiB8CiAJCQkJUFMyUFBfRVhUUkFfQlROIHwgUFMyUFBfTkFWX0JUTiB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYyBiL2RyaXZlcnMvaW5wdXQvbW91c2UvcHNtb3VzZS1iYXNlLmMKaW5kZXggOGJjOWY1MS4uMzQzYWZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS9wc21vdXNlLWJhc2UuYworKysgYi9kcml2ZXJzL2lucHV0L21vdXNlL3BzbW91c2UtYmFzZS5jCkBAIC00ODUsMTMgKzQ4NSw2IEBACiAJcGFyYW1bMF0gPSAgNDA7CiAJcHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgUFNNT1VTRV9DTURfU0VUUkFURSk7CiAKLQlwYXJhbVswXSA9IDIwMDsKLQlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKLQlwYXJhbVswXSA9IDIwMDsKLQlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKLQlwYXJhbVswXSA9ICA2MDsKLQlwczJfY29tbWFuZChwczJkZXYsIHBhcmFtLCBQU01PVVNFX0NNRF9TRVRSQVRFKTsKLQogCWlmIChzZXRfcHJvcGVydGllcykgewogCQlzZXRfYml0KEJUTl9NSURETEUsIHBzbW91c2UtPmRldi0+a2V5Yml0KTsKIAkJc2V0X2JpdChSRUxfV0hFRUwsIHBzbW91c2UtPmRldi0+cmVsYml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbW91c2UvdHJhY2twb2ludC5jIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMKaW5kZXggNmQ5ZWM5YS4uYWU1ODcxYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMKKysrIGIvZHJpdmVycy9pbnB1dC9tb3VzZS90cmFja3BvaW50LmMKQEAgLTE4MywyMSArMTgzLDI2IEBACiAJLmF0dHJzID0gdHJhY2twb2ludF9hdHRycywKIH07CiAKLXN0YXRpYyB2b2lkIHRyYWNrcG9pbnRfZGlzY29ubmVjdChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKK3N0YXRpYyBpbnQgdHJhY2twb2ludF9zdGFydF9wcm90b2NvbChzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSwgdW5zaWduZWQgY2hhciAqZmlybXdhcmVfaWQpCiB7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldi5rb2JqLCAmdHJhY2twb2ludF9hdHRyX2dyb3VwKTsKKwl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdID0geyAwIH07CiAKLQlrZnJlZShwc21vdXNlLT5wcml2YXRlKTsKLQlwc21vdXNlLT5wcml2YXRlID0gTlVMTDsKKwlpZiAocHMyX2NvbW1hbmQoJnBzbW91c2UtPnBzMmRldiwgcGFyYW0sIE1BS0VfUFMyX0NNRCgwLCAyLCBUUF9SRUFEX0lEKSkpCisJCXJldHVybiAtMTsKKworCWlmIChwYXJhbVswXSAhPSBUUF9NQUdJQ19JREVOVCkKKwkJcmV0dXJuIC0xOworCisJaWYgKGZpcm13YXJlX2lkKQorCQkqZmlybXdhcmVfaWQgPSBwYXJhbVsxXTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRyYWNrcG9pbnRfc3luYyhzdHJ1Y3QgcHNtb3VzZSAqcHNtb3VzZSkKIHsKLQl1bnNpZ25lZCBjaGFyIHRvZ2dsZTsKIAlzdHJ1Y3QgdHJhY2twb2ludF9kYXRhICp0cCA9IHBzbW91c2UtPnByaXZhdGU7Ci0KLQlpZiAoIXRwKQotCQlyZXR1cm4gLTE7CisJdW5zaWduZWQgY2hhciB0b2dnbGU7CiAKIAkvKiBEaXNhYmxlIGZlYXR1cmVzIHRoYXQgbWF5IG1ha2UgZGV2aWNlIHVudXNhYmxlIHdpdGggdGhpcyBkcml2ZXIgKi8KIAl0cmFja3BvaW50X3JlYWQoJnBzbW91c2UtPnBzMmRldiwgVFBfVE9HR0xFX1RXT0hBTkQsICZ0b2dnbGUpOwpAQCAtMjYzLDI3ICsyNjgsMzggQEAKIAl0cC0+ZXh0X2RldiA9IFRQX0RFRl9FWFRfREVWOwogfQogCitzdGF0aWMgdm9pZCB0cmFja3BvaW50X2Rpc2Nvbm5lY3Qoc3RydWN0IHBzbW91c2UgKnBzbW91c2UpCit7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZwc21vdXNlLT5wczJkZXYuc2VyaW8tPmRldi5rb2JqLCAmdHJhY2twb2ludF9hdHRyX2dyb3VwKTsKKworCWtmcmVlKHBzbW91c2UtPnByaXZhdGUpOworCXBzbW91c2UtPnByaXZhdGUgPSBOVUxMOworfQorCitzdGF0aWMgaW50IHRyYWNrcG9pbnRfcmVjb25uZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlKQoreworCWlmICh0cmFja3BvaW50X3N0YXJ0X3Byb3RvY29sKHBzbW91c2UsIE5VTEwpKQorCQlyZXR1cm4gLTE7CisKKwlpZiAodHJhY2twb2ludF9zeW5jKHBzbW91c2UpKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IHRyYWNrcG9pbnRfZGV0ZWN0KHN0cnVjdCBwc21vdXNlICpwc21vdXNlLCBpbnQgc2V0X3Byb3BlcnRpZXMpCiB7CiAJc3RydWN0IHRyYWNrcG9pbnRfZGF0YSAqcHJpdjsKIAlzdHJ1Y3QgcHMyZGV2ICpwczJkZXYgPSAmcHNtb3VzZS0+cHMyZGV2OwogCXVuc2lnbmVkIGNoYXIgZmlybXdhcmVfaWQ7CiAJdW5zaWduZWQgY2hhciBidXR0b25faW5mbzsKLQl1bnNpZ25lZCBjaGFyIHBhcmFtWzJdOwogCi0JcGFyYW1bMF0gPSBwYXJhbVsxXSA9IDA7Ci0KLQlpZiAocHMyX2NvbW1hbmQocHMyZGV2LCBwYXJhbSwgTUFLRV9QUzJfQ01EKDAsIDIsIFRQX1JFQURfSUQpKSkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKHBhcmFtWzBdICE9IFRQX01BR0lDX0lERU5UKQorCWlmICh0cmFja3BvaW50X3N0YXJ0X3Byb3RvY29sKHBzbW91c2UsICZmaXJtd2FyZV9pZCkpCiAJCXJldHVybiAtMTsKIAogCWlmICghc2V0X3Byb3BlcnRpZXMpCiAJCXJldHVybiAwOwogCi0JZmlybXdhcmVfaWQgPSBwYXJhbVsxXTsKLQogCWlmICh0cmFja3BvaW50X3JlYWQoJnBzbW91c2UtPnBzMmRldiwgVFBfRVhUX0JUTiwgJmJ1dHRvbl9pbmZvKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJ0cmFja3BvaW50LmM6IGZhaWxlZCB0byBnZXQgZXh0ZW5kZWQgYnV0dG9uIGRhdGFcbiIpOwogCQlidXR0b25faW5mbyA9IDA7CkBAIC0yOTYsNyArMzEyLDcgQEAKIAlwc21vdXNlLT52ZW5kb3IgPSAiSUJNIjsKIAlwc21vdXNlLT5uYW1lID0gIlRyYWNrUG9pbnQiOwogCi0JcHNtb3VzZS0+cmVjb25uZWN0ID0gdHJhY2twb2ludF9zeW5jOworCXBzbW91c2UtPnJlY29ubmVjdCA9IHRyYWNrcG9pbnRfcmVjb25uZWN0OwogCXBzbW91c2UtPmRpc2Nvbm5lY3QgPSB0cmFja3BvaW50X2Rpc2Nvbm5lY3Q7CiAKIAl0cmFja3BvaW50X2RlZmF1bHRzKHByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vbGlicHMyLmMKaW5kZXggNjFhNmY5Ny4uZWQyMDJmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9saWJwczIuYworKysgYi9kcml2ZXJzL2lucHV0L3NlcmlvL2xpYnBzMi5jCkBAIC0xNzcsNiArMTc3LDExIEBACiAJCXJldHVybiAtMTsKIAl9CiAKKwlpZiAoc2VuZCAmJiAhcGFyYW0pIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC0xOworCX0KKwogCW11dGV4X2xvY2tfbmVzdGVkKCZwczJkZXYtPmNtZF9tdXRleCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJc2VyaW9fcGF1c2VfcngocHMyZGV2LT5zZXJpbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMgYi9kcml2ZXJzL2lucHV0L3NlcmlvL3NlcmlvLmMKaW5kZXggNjUyMTAzNC4uM2U3NmFkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9zZXJpby9zZXJpby5jCisrKyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vc2VyaW8uYwpAQCAtNjIsNiArNjIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGJ1c190eXBlIHNlcmlvX2J1czsKIAorc3RhdGljIHZvaWQgc2VyaW9fYWRkX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYpOwogc3RhdGljIHZvaWQgc2VyaW9fYWRkX3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7CiBzdGF0aWMgdm9pZCBzZXJpb19kZXN0cm95X3BvcnQoc3RydWN0IHNlcmlvICpzZXJpbyk7CiBzdGF0aWMgdm9pZCBzZXJpb19yZWNvbm5lY3RfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKTsKQEAgLTE0MCw4ICsxNDEsMTQgQEAKIAogc3RhdGljIHZvaWQgc2VyaW9fZmluZF9kcml2ZXIoc3RydWN0IHNlcmlvICpzZXJpbykKIHsKKwlpbnQgZXJyb3I7CisKIAlkb3duX3dyaXRlKCZzZXJpb19idXMuc3Vic3lzLnJ3c2VtKTsKLQlkZXZpY2VfYXR0YWNoKCZzZXJpby0+ZGV2KTsKKwllcnJvciA9IGRldmljZV9hdHRhY2goJnNlcmlvLT5kZXYpOworCWlmIChlcnJvciA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJzZXJpbzogZGV2aWNlX2F0dGFjaCgpIGZhaWxlZCBmb3IgJXMgKCVzKSwgZXJyb3I6ICVkXG4iLAorCQkJc2VyaW8tPnBoeXMsIHNlcmlvLT5uYW1lLCBlcnJvcik7CiAJdXBfd3JpdGUoJnNlcmlvX2J1cy5zdWJzeXMucndzZW0pOwogfQogCkBAIC0yNzIsNyArMjc5LDYgQEAKIHN0YXRpYyB2b2lkIHNlcmlvX2hhbmRsZV9ldmVudCh2b2lkKQogewogCXN0cnVjdCBzZXJpb19ldmVudCAqZXZlbnQ7Ci0Jc3RydWN0IHNlcmlvX2RyaXZlciAqc2VyaW9fZHJ2OwogCiAJbXV0ZXhfbG9jaygmc2VyaW9fbXV0ZXgpOwogCkBAIC0zMDQsOCArMzEwLDcgQEAKIAkJCQlicmVhazsKIAogCQkJY2FzZSBTRVJJT19SRUdJU1RFUl9EUklWRVI6Ci0JCQkJc2VyaW9fZHJ2ID0gZXZlbnQtPm9iamVjdDsKLQkJCQlkcml2ZXJfcmVnaXN0ZXIoJnNlcmlvX2Rydi0+ZHJpdmVyKTsKKwkJCQlzZXJpb19hZGRfZHJpdmVyKGV2ZW50LT5vYmplY3QpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNTI1LDYgKzUzMCw3IEBACiAKIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCisJSU5JVF9MSVNUX0hFQUQoJnNlcmlvLT5ub2RlKTsKIAlzcGluX2xvY2tfaW5pdCgmc2VyaW8tPmxvY2spOwogCW11dGV4X2luaXQoJnNlcmlvLT5kcnZfbXV0ZXgpOwogCWRldmljZV9pbml0aWFsaXplKCZzZXJpby0+ZGV2KTsKQEAgLTU0Miw2ICs1NDgsOCBAQAogICovCiBzdGF0aWMgdm9pZCBzZXJpb19hZGRfcG9ydChzdHJ1Y3Qgc2VyaW8gKnNlcmlvKQogeworCWludCBlcnJvcjsKKwogCWlmIChzZXJpby0+cGFyZW50KSB7CiAJCXNlcmlvX3BhdXNlX3J4KHNlcmlvLT5wYXJlbnQpOwogCQlzZXJpby0+cGFyZW50LT5jaGlsZCA9IHNlcmlvOwpAQCAtNTUxLDkgKzU1OSwxOSBAQAogCWxpc3RfYWRkX3RhaWwoJnNlcmlvLT5ub2RlLCAmc2VyaW9fbGlzdCk7CiAJaWYgKHNlcmlvLT5zdGFydCkKIAkJc2VyaW8tPnN0YXJ0KHNlcmlvKTsKLQlkZXZpY2VfYWRkKCZzZXJpby0+ZGV2KTsKLQlzeXNmc19jcmVhdGVfZ3JvdXAoJnNlcmlvLT5kZXYua29iaiwgJnNlcmlvX2lkX2F0dHJfZ3JvdXApOwotCXNlcmlvLT5yZWdpc3RlcmVkID0gMTsKKwllcnJvciA9IGRldmljZV9hZGQoJnNlcmlvLT5kZXYpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2VyaW86IGRldmljZV9hZGQoKSBmYWlsZWQgZm9yICVzICglcyksIGVycm9yOiAlZFxuIiwKKwkJCXNlcmlvLT5waHlzLCBzZXJpby0+bmFtZSwgZXJyb3IpOworCWVsc2UgeworCQlzZXJpby0+cmVnaXN0ZXJlZCA9IDE7CisJCWVycm9yID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzZXJpby0+ZGV2LmtvYmosICZzZXJpb19pZF9hdHRyX2dyb3VwKTsKKwkJaWYgKGVycm9yKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJInNlcmlvOiBzeXNmc19jcmVhdGVfZ3JvdXAoKSBmYWlsZWQgZm9yICVzICglcyksIGVycm9yOiAlZFxuIiwKKwkJCQlzZXJpby0+cGh5cywgc2VyaW8tPm5hbWUsIGVycm9yKTsKKwl9CiB9CiAKIC8qCkBAIC01ODMsMTAgKzYwMSwxMCBAQAogCWlmIChzZXJpby0+cmVnaXN0ZXJlZCkgewogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnNlcmlvLT5kZXYua29iaiwgJnNlcmlvX2lkX2F0dHJfZ3JvdXApOwogCQlkZXZpY2VfZGVsKCZzZXJpby0+ZGV2KTsKLQkJbGlzdF9kZWxfaW5pdCgmc2VyaW8tPm5vZGUpOwogCQlzZXJpby0+cmVnaXN0ZXJlZCA9IDA7CiAJfQogCisJbGlzdF9kZWxfaW5pdCgmc2VyaW8tPm5vZGUpOwogCXNlcmlvX3JlbW92ZV9wZW5kaW5nX2V2ZW50cyhzZXJpbyk7CiAJcHV0X2RldmljZSgmc2VyaW8tPmRldik7CiB9CkBAIC03NTYsNiArNzc0LDE3IEBACiAJLnJlbW92ZSA9IHNlcmlvX2RyaXZlcl9yZW1vdmUsCiB9OwogCitzdGF0aWMgdm9pZCBzZXJpb19hZGRfZHJpdmVyKHN0cnVjdCBzZXJpb19kcml2ZXIgKmRydikKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IGRyaXZlcl9yZWdpc3RlcigmZHJ2LT5kcml2ZXIpOworCWlmIChlcnJvcikKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkic2VyaW86IGRyaXZlcl9yZWdpc3RlcigpIGZhaWxlZCBmb3IgJXMsIGVycm9yOiAlZFxuIiwKKwkJCWRydi0+ZHJpdmVyLm5hbWUsIGVycm9yKTsKK30KKwogdm9pZCBfX3NlcmlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2VyaW9fZHJpdmVyICpkcnYsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCWRydi0+ZHJpdmVyLmJ1cyA9ICZzZXJpb19idXM7CkBAIC05MDMsMTggKzkzMiwyNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzZXJpb19pbml0KHZvaWQpCiB7Ci0Jc2VyaW9fdGFzayA9IGt0aHJlYWRfcnVuKHNlcmlvX3RocmVhZCwgTlVMTCwgImtzZXJpb2QiKTsKLQlpZiAoSVNfRVJSKHNlcmlvX3Rhc2spKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2VyaW86IEZhaWxlZCB0byBzdGFydCBrc2VyaW9kXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIoc2VyaW9fdGFzayk7Ci0JfQorCWludCBlcnJvcjsKIAogCXNlcmlvX2J1cy5kZXZfYXR0cnMgPSBzZXJpb19kZXZpY2VfYXR0cnM7CiAJc2VyaW9fYnVzLmRydl9hdHRycyA9IHNlcmlvX2RyaXZlcl9hdHRyczsKIAlzZXJpb19idXMubWF0Y2ggPSBzZXJpb19idXNfbWF0Y2g7CiAJc2VyaW9fYnVzLnVldmVudCA9IHNlcmlvX3VldmVudDsKIAlzZXJpb19idXMucmVzdW1lID0gc2VyaW9fcmVzdW1lOwotCWJ1c19yZWdpc3Rlcigmc2VyaW9fYnVzKTsKKwllcnJvciA9IGJ1c19yZWdpc3Rlcigmc2VyaW9fYnVzKTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZXJpbzogZmFpbGVkIHRvIHJlZ2lzdGVyIHNlcmlvIGJ1cywgZXJyb3I6ICVkXG4iLCBlcnJvcik7CisJCXJldHVybiBlcnJvcjsKKwl9CisKKwlzZXJpb190YXNrID0ga3RocmVhZF9ydW4oc2VyaW9fdGhyZWFkLCBOVUxMLCAia3NlcmlvZCIpOworCWlmIChJU19FUlIoc2VyaW9fdGFzaykpIHsKKwkJYnVzX3VucmVnaXN0ZXIoJnNlcmlvX2J1cyk7CisJCWVycm9yID0gUFRSX0VSUihzZXJpb190YXNrKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJzZXJpbzogRmFpbGVkIHRvIHN0YXJ0IGtzZXJpb2QsIGVycm9yOiAlZFxuIiwgZXJyb3IpOworCQlyZXR1cm4gZXJyb3I7CisJfQogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXN5bmMuaCBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3luYy5oCmluZGV4IDBhNWJlN2YuLmFmM2ViOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3luYy5oCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3luYy5oCkBAIC0yNTYsNyArMjU2LDYgQEAKICNkZWZpbmUgTk9fT1JERVJfQ0hFQ0tfTUFTSyAweDAwMDAwMDEwCiAjZGVmaW5lIExPV19DSEFOTkVMX01BU0sgMHgwMDAwMDAyMAogI2RlZmluZSBOT19IU0NYMzBfTUFTSyAgMHgwMDAwMDA0MAotI2RlZmluZSBNT0RFX01BU0sgICAweDAwMDAwMDgwCiAjZGVmaW5lIFNFVF9CT0FSRCAgIDB4MDAwMDEwMDAKICNkZWZpbmUgU0VUX0NSQzQgICAweDAwMDMwMDAwCiAjZGVmaW5lIFNFVF9MMV9UUklTVEFURSAgMHgwMDA0MDAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnIGIvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnCmluZGV4IGE0ZjcyODguLjNlZjU2N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vaTRsL0tjb25maWcKQEAgLTUsNiArNSw3IEBACiBjb25maWcgSVNETl9QUFAKIAlib29sICJTdXBwb3J0IHN5bmNocm9ub3VzIFBQUCIKIAlkZXBlbmRzIG9uIElORVQKKwlzZWxlY3QgU0xIQwogCWhlbHAKIAkgIE92ZXIgZGlnaXRhbCBjb25uZWN0aW9ucyBzdWNoIGFzIElTRE4sIHRoZXJlIGlzIG5vIG5lZWQgdG8KIAkgIHN5bmNocm9uaXplIHNlbmRlciBhbmQgcmVjaXBpZW50J3MgY2xvY2tzIHdpdGggc3RhcnQgYW5kIHN0b3AgYml0cwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZyBiL2RyaXZlcnMvbWFjaW50b3NoL0tjb25maWcKaW5kZXggZjVmZTdmYi4uZDVkNjQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvS2NvbmZpZworKysgYi9kcml2ZXJzL21hY2ludG9zaC9LY29uZmlnCkBAIC05MCw2ICs5MCwxNSBAQAogCSAgYW5kIHRoZSBpZGUtZGlzayBMRUQgdHJpZ2dlciBhbmQgY29uZmlndXJlIGFwcHJvcHJpYXRlbHkgdGhyb3VnaAogCSAgc3lzZnMuCiAKK2NvbmZpZyBBREJfUE1VX0xFRF9JREUKKwlib29sICJVc2UgZnJvbnQgTEVEIGFzIElERSBMRUQgYnkgZGVmYXVsdCIKKwlkZXBlbmRzIG9uIEFEQl9QTVVfTEVECisJc2VsZWN0IExFRFNfVFJJR0dFUlMKKwlzZWxlY3QgTEVEU19UUklHR0VSX0lERV9ESVNLCisJaGVscAorCSAgVGhpcyBvcHRpb24gbWFrZXMgdGhlIGZyb250IExFRCBkZWZhdWx0IHRvIHRoZSBJREUgdHJpZ2dlcgorCSAgc28gdGhhdCBpdCBibGlua3Mgb24gSURFIGFjdGl2aXR5LgorCiBjb25maWcgUE1BQ19TTVUKIAlib29sICJTdXBwb3J0IGZvciBTTVUgIGJhc2VkIFBvd2VyTWFjcyIKIAlkZXBlbmRzIG9uIFBQQ19QTUFDNjQKQEAgLTEwMCw3ICsxMDksNyBAQAogCiBjb25maWcgUE1BQ19BUE1fRU1VCiAJdHJpc3RhdGUgIkFQTSBlbXVsYXRpb24iCi0JZGVwZW5kcyBvbiBQUENfUE1BQyAmJiBQUEMzMiAmJiBQTQorCWRlcGVuZHMgb24gUFBDX1BNQUMgJiYgUFBDMzIgJiYgUE0gJiYgQURCX1BNVQogCiBjb25maWcgUE1BQ19NRURJQUJBWQogCWJvb2wgIlN1cHBvcnQgUG93ZXJCb29rIGhvdHN3YXAgbWVkaWEgYmF5IgpAQCAtMTE1LDggKzEyNCw2IEBACiAJYm9vbCAiQmFja2xpZ2h0IGNvbnRyb2wgZm9yIExDRCBzY3JlZW5zIgogCWRlcGVuZHMgb24gQURCX1BNVSAmJiBGQiA9IHkgJiYgKEJST0tFTiB8fCAhUFBDNjQpCiAJc2VsZWN0IEZCX0JBQ0tMSUdIVAotCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCi0Jc2VsZWN0IEJBQ0tMSUdIVF9MQ0RfU1VQUE9SVAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIE1hY2ludG9zaCBzcGVjaWZpYyBleHRlbnNpb25zIG9mIHRoZSBnZW5lcmljCiAJICBiYWNrbGlnaHQgY29kZS4gV2l0aCB0aGlzIGVuYWJsZWQsIHRoZSBicmlnaHRuZXNzIGtleXMgb24gb2xkZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL2FkYmhpZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKaW5kZXggNTQ1YmUxZS4uYzY5ZDIzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvYWRiaGlkLmMKQEAgLTQ1LDE0ICs0NSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3BtdS5oPgogCiAjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vYmFja2xpZ2h0Lmg+CiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAjaW5jbHVkZSA8YXNtL3BtYWNfZmVhdHVyZS5oPgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKLSNpbmNsdWRlIDxhc20vYmFja2xpZ2h0Lmg+Ci0jZW5kaWYKLQogTU9EVUxFX0FVVEhPUigiRnJhbnogU2lybCA8RnJhbnouU2lybC1rZXJuZWxAbGF1dGVyYmFjaC5jb20+Iik7CiAKICNkZWZpbmUgS0VZQl9LRVlSRUcJMAkvKiByZWdpc3RlciAjIGZvciBrZXkgdXAvZG93biBkYXRhICovCkBAIC0yMzcsMTEgKzIzNCw2IEBACiBzdGF0aWMgc3RydWN0IGFkYl9pZHMgbW91c2VfaWRzOwogc3RhdGljIHN0cnVjdCBhZGJfaWRzIGJ1dHRvbnNfaWRzOwogCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0vKiBFeHBvcnRlZCB0byB2aWEtcG11LmMgKi8KLWludCBkaXNhYmxlX2tlcm5lbF9iYWNrbGlnaHQgPSAwOwotI2VuZGlmIC8qIENPTkZJR19QTUFDX0JBQ0tMSUdIVCAqLwotCiAvKiBLaW5kIG9mIGtleWJvYXJkLCBzZWUgQXBwbGUgdGVjaG5vdGUgMTE1MiAgKi8KICNkZWZpbmUgQURCX0tFWUJPQVJEX1VOS05PV04JMAogI2RlZmluZSBBREJfS0VZQk9BUkRfQU5TSQkweDAxMDAKQEAgLTUyNyw3ICs1MTksNyBAQAogCiAJCWNhc2UgMHhhOgkvKiBicmlnaHRuZXNzIGRlY3JlYXNlICovCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JCQlpZiAoIWRpc2FibGVfa2VybmVsX2JhY2tsaWdodCAmJiBkb3duKQorCQkJaWYgKGRvd24pCiAJCQkJcG1hY19iYWNrbGlnaHRfa2V5X2Rvd24oKTsKICNlbmRpZgogCQkJaW5wdXRfcmVwb3J0X2tleShhZGJoaWRbaWRdLT5pbnB1dCwgS0VZX0JSSUdIVE5FU1NET1dOLCBkb3duKTsKQEAgLTUzNSw3ICs1MjcsNyBAQAogCiAJCWNhc2UgMHg5OgkvKiBicmlnaHRuZXNzIGluY3JlYXNlICovCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCi0JCQlpZiAoIWRpc2FibGVfa2VybmVsX2JhY2tsaWdodCAmJiBkb3duKQorCQkJaWYgKGRvd24pCiAJCQkJcG1hY19iYWNrbGlnaHRfa2V5X3VwKCk7CiAjZW5kaWYKIAkJCWlucHV0X3JlcG9ydF9rZXkoYWRiaGlkW2lkXS0+aW5wdXQsIEtFWV9CUklHSFRORVNTVVAsIGRvd24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fYXNpYy5jCmluZGV4IDgyNjU3YmMuLmQ1NjIxNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX2FzaWMuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19hc2ljLmMKQEAgLTEzOSw3ICsxMzksOSBAQAogewogCXN0cnVjdCBtYWNpb19kZXYgKiBtYWNpb19kZXY7CiAJc3RydWN0IG9mX2RldmljZSAqIG9mOwotCWNoYXIgKnNjcmF0Y2gsICpjb21wYXQsICpjb21wYXQyOworCWNoYXIgKnNjcmF0Y2g7CisJY29uc3QgY2hhciAqY29tcGF0LCAqY29tcGF0MjsKKwogCWludCBpID0gMDsKIAlpbnQgbGVuZ3RoLCBjcGxlbiwgY3BsZW4yLCBzZWVuID0gMDsKIApAQCAtMTczLDcgKzE3NSw3IEBACiAgICAgICAgICAqIGl0J3Mgbm90IHJlYWxseSBsZWdhbCB0byBzcGxpdCBpdCBvdXQgd2l0aCBjb21tYXMuIFdlIHNwbGl0IGl0CiAgICAgICAgICAqIHVwIHVzaW5nIGEgbnVtYmVyIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcyBpbnN0ZWFkLiAqLwogCi0JY29tcGF0ID0gKGNoYXIgKikgZ2V0X3Byb3BlcnR5KG9mLT5ub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CisJY29tcGF0ID0gZ2V0X3Byb3BlcnR5KG9mLT5ub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CiAJY29tcGF0MiA9IGNvbXBhdDsKIAljcGxlbjI9IGNwbGVuOwogCXdoaWxlIChjb21wYXQgJiYgY3BsZW4gPiAwKSB7CkBAIC00NTQsNyArNDU2LDcgQEAKIAkJCQkJICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50X3JlcykKIHsKIAlzdHJ1Y3QgbWFjaW9fZGV2ICpkZXY7Ci0JdTMyICpyZWc7CisJY29uc3QgdTMyICpyZWc7CiAJCiAJaWYgKG5wID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwpAQCAtNDg5LDcgKzQ5MSw3IEBACiAjZW5kaWYKIAkJCU1BWF9OT0RFX05BTUVfU0laRSwgbnAtPm5hbWUpOwogCX0gZWxzZSB7Ci0JCXJlZyA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKKwkJcmVnID0gZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CiAJCXNwcmludGYoZGV2LT5vZmRldi5kZXYuYnVzX2lkLCAiJTFkLiUwOHg6JS4qcyIsCiAJCQljaGlwLT5sYnVzLmluZGV4LAogCQkJcmVnID8gKnJlZyA6IDAsIE1BWF9OT0RFX05BTUVfU0laRSwgbnAtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYyBiL2RyaXZlcnMvbWFjaW50b3NoL21hY2lvX3N5c2ZzLmMKaW5kZXggY2FlMjRhMS4uODU2NmJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvbWFjaW9fc3lzZnMuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9tYWNpb19zeXNmcy5jCkBAIC0xNiwxMiArMTYsMTIgQEAKIGNvbXBhdGlibGVfc2hvdyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBvZl9kZXZpY2UgKm9mOwotCWNoYXIgKmNvbXBhdDsKKwljb25zdCBjaGFyICpjb21wYXQ7CiAJaW50IGNwbGVuOwogCWludCBsZW5ndGggPSAwOwogCiAJb2YgPSAmdG9fbWFjaW9fZGV2aWNlIChkZXYpLT5vZmRldjsKLQljb21wYXQgPSAoY2hhciAqKSBnZXRfcHJvcGVydHkob2YtPm5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKKwljb21wYXQgPSBnZXRfcHJvcGVydHkob2YtPm5vZGUsICJjb21wYXRpYmxlIiwgJmNwbGVuKTsKIAlpZiAoIWNvbXBhdCkgewogCQkqYnVmID0gJ1wwJzsKIAkJcmV0dXJuIDA7CkBAIC00MiwxMiArNDIsMTIgQEAKIAkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgb2ZfZGV2aWNlICpvZjsKLQljaGFyICpjb21wYXQ7CisJY29uc3QgY2hhciAqY29tcGF0OwogCWludCBjcGxlbjsKIAlpbnQgbGVuZ3RoOwogCiAJb2YgPSAmdG9fbWFjaW9fZGV2aWNlIChkZXYpLT5vZmRldjsKLQljb21wYXQgPSAoY2hhciAqKSBnZXRfcHJvcGVydHkgKG9mLT5ub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CisJY29tcGF0ID0gZ2V0X3Byb3BlcnR5KG9mLT5ub2RlLCAiY29tcGF0aWJsZSIsICZjcGxlbik7CiAJaWYgKCFjb21wYXQpIGNvbXBhdCA9ICIiLCBjcGxlbiA9IDE7CiAJbGVuZ3RoID0gc3ByaW50ZiAoYnVmLCAib2Y6TiVzVCVzIiwgb2YtPm5vZGUtPm5hbWUsIG9mLT5ub2RlLT50eXBlKTsKIAlidWYgKz0gbGVuZ3RoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMgYi9kcml2ZXJzL21hY2ludG9zaC9zbXUuYwppbmRleCAwMGVmNDY4Li4wOTBlNDBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC9zbXUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC9zbXUuYwpAQCAtNDU0LDcgKzQ1NCw3IEBACiBpbnQgX19pbml0IHNtdV9pbml0ICh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyICpkYXRhOworCWNvbnN0IHUzMiAqZGF0YTsKIAogICAgICAgICBucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJzbXUiKTsKICAgICAgICAgaWYgKG5wID09IE5VTEwpCkBAIC00OTAsNyArNDkwLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJTTVU6IENhbid0IGZpbmQgZG9vcmJlbGwgR1BJTyAhXG4iKTsKIAkJZ290byBmYWlsOwogCX0KLQlkYXRhID0gKHUzMiAqKWdldF9wcm9wZXJ0eShzbXUtPmRiX25vZGUsICJyZWciLCBOVUxMKTsKKwlkYXRhID0gZ2V0X3Byb3BlcnR5KHNtdS0+ZGJfbm9kZSwgInJlZyIsIE5VTEwpOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJb2Zfbm9kZV9wdXQoc211LT5kYl9ub2RlKTsKIAkJc211LT5kYl9ub2RlID0gTlVMTDsKQEAgLTUxMSw3ICs1MTEsNyBAQAogCQlzbXUtPm1zZ19ub2RlID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgInNtdS1pbnRlcnJ1cHQiKTsKIAkJaWYgKHNtdS0+bXNnX25vZGUgPT0gTlVMTCkKIAkJCWJyZWFrOwotCQlkYXRhID0gKHUzMiAqKWdldF9wcm9wZXJ0eShzbXUtPm1zZ19ub2RlLCAicmVnIiwgTlVMTCk7CisJCWRhdGEgPSBnZXRfcHJvcGVydHkoc211LT5tc2dfbm9kZSwgInJlZyIsIE5VTEwpOwogCQlpZiAoZGF0YSA9PSBOVUxMKSB7CiAJCQlvZl9ub2RlX3B1dChzbXUtPm1zZ19ub2RlKTsKIAkJCXNtdS0+bXNnX25vZGUgPSBOVUxMOwpAQCAtOTgyLDExICs5ODIsMTEgQEAKIC8qIE5vdGU6IE9ubHkgYWxsb3dlZCB0byByZXR1cm4gZXJyb3IgY29kZSBpbiBwb2ludGVycyAodXNpbmcgRVJSX1BUUikKICAqIHdoZW4gaW50ZXJydXB0aWJsZSBpcyAxCiAgKi8KLXN0cnVjdCBzbXVfc2RicF9oZWFkZXIgKl9fc211X2dldF9zZGJfcGFydGl0aW9uKGludCBpZCwgdW5zaWduZWQgaW50ICpzaXplLAotCQkJCQkJaW50IGludGVycnVwdGlibGUpCitjb25zdCBzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpfX3NtdV9nZXRfc2RiX3BhcnRpdGlvbihpbnQgaWQsCisJCXVuc2lnbmVkIGludCAqc2l6ZSwgaW50IGludGVycnVwdGlibGUpCiB7CiAJY2hhciBwbmFtZVszMl07Ci0Jc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqcGFydDsKKwljb25zdCBzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpwYXJ0OwogCiAJaWYgKCFzbXUpCiAJCXJldHVybiBOVUxMOwpAQCAtMTAwMyw4ICsxMDAzLDcgQEAKIAl9IGVsc2UKIAkJbXV0ZXhfbG9jaygmc211X3BhcnRfYWNjZXNzKTsKIAotCXBhcnQgPSAoc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqKWdldF9wcm9wZXJ0eShzbXUtPm9mX25vZGUsCi0JCQkJCQkgICAgICBwbmFtZSwgc2l6ZSk7CisJcGFydCA9IGdldF9wcm9wZXJ0eShzbXUtPm9mX25vZGUsIHBuYW1lLCBzaXplKTsKIAlpZiAocGFydCA9PSBOVUxMKSB7CiAJCURQUklOVEsoInRyeWluZyB0byBleHRyYWN0IGZyb20gU01VIC4uLlxuIik7CiAJCXBhcnQgPSBzbXVfY3JlYXRlX3NkYl9wYXJ0aXRpb24oaWQpOwpAQCAtMTAxNSw3ICsxMDE0LDcgQEAKIAlyZXR1cm4gcGFydDsKIH0KIAotc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqc211X2dldF9zZGJfcGFydGl0aW9uKGludCBpZCwgdW5zaWduZWQgaW50ICpzaXplKQorY29uc3Qgc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqc211X2dldF9zZGJfcGFydGl0aW9uKGludCBpZCwgdW5zaWduZWQgaW50ICpzaXplKQogewogCXJldHVybiBfX3NtdV9nZXRfc2RiX3BhcnRpdGlvbihpZCwgc2l6ZSwgMCk7CiB9CkBAIC0xMDk0LDcgKzEwOTMsNyBAQAogCQlwcC0+bW9kZSA9IHNtdV9maWxlX2V2ZW50czsKIAkJcmV0dXJuIDA7CiAJfSBlbHNlIGlmIChoZHIuY21kdHlwZSA9PSBTTVVfQ01EVFlQRV9HRVRfUEFSVElUSU9OKSB7Ci0JCXN0cnVjdCBzbXVfc2RicF9oZWFkZXIgKnBhcnQ7CisJCWNvbnN0IHN0cnVjdCBzbXVfc2RicF9oZWFkZXIgKnBhcnQ7CiAJCXBhcnQgPSBfX3NtdV9nZXRfc2RiX3BhcnRpdGlvbihoZHIuY21kLCBOVUxMLCAxKTsKIAkJaWYgKHBhcnQgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IDdmODY0NzguLmEwZjMwZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTQ3LDcgKzQ3LDcgQEAKIAogc3RhdGljIHU4IGRlZmF1bHRfbGltaXRzX2xvY2FsWzNdID0gezcwLCA1MCwgNzB9OyAgICAvKiBsb2NhbCwgc2Vuc29yMSwgc2Vuc29yMiAqLwogc3RhdGljIHU4IGRlZmF1bHRfbGltaXRzX2NoaXBbM10gPSB7ODAsIDY1LCA4MH07ICAgIC8qIGxvY2FsLCBzZW5zb3IxLCBzZW5zb3IyICovCi1zdGF0aWMgY2hhciAqc2Vuc29yX2xvY2F0aW9uWzNdID0ge05VTEwsIE5VTEwsIE5VTEx9Oworc3RhdGljIGNvbnN0IGNoYXIgKnNlbnNvcl9sb2NhdGlvblszXSA9IHtOVUxMLCBOVUxMLCBOVUxMfTsKIAogc3RhdGljIGludCBsaW1pdF9hZGp1c3QgPSAwOwogc3RhdGljIGludCBmYW5fc3BlZWQgPSAtMTsKQEAgLTU1Myw3ICs1NTMsNyBAQAogdGhlcm1vc3RhdF9pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlKiBucDsKLQl1MzIgKnByb3A7CisJY29uc3QgdTMyICpwcm9wOwogCWludCBpID0gMCwgb2Zmc2V0ID0gMDsKIAkKIAlucCA9IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJmYW4iKTsKQEAgLTU2NiwxMyArNTY2LDEzIEBACiAJZWxzZQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXByb3AgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiaHdzZW5zb3ItcGFyYW1zLXZlcnNpb24iLCBOVUxMKTsKKwlwcm9wID0gZ2V0X3Byb3BlcnR5KG5wLCAiaHdzZW5zb3ItcGFyYW1zLXZlcnNpb24iLCBOVUxMKTsKIAlwcmludGsoS0VSTl9JTkZPICJhZHQ3NDZ4OiB2ZXJzaW9uICVkICglc3N1cHBvcnRlZClcbiIsICpwcm9wLAogCQkJICgqcHJvcCA9PSAxKT8iIjoidW4iKTsKIAlpZiAoKnByb3AgIT0gMSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlwcm9wID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCXByb3AgPSBnZXRfcHJvcGVydHkobnAsICJyZWciLCBOVUxMKTsKIAlpZiAoIXByb3ApCiAJCXJldHVybiAtRU5PREVWOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggYzFmZTBiMy4uZDAwYzBjMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKQEAgLTk1LDYgKzk1LDE3IEBACiAgKgktIFVzZSBtaW4vbWF4IG1hY3JvcyBoZXJlIG9yIHRoZXJlCiAgKgktIExhdGVzdCBkYXJ3aW4gdXBkYXRlZCBVM0ggbWluIGZhbiBzcGVlZCB0byAyMCUgUFdNCiAgKgorICogIEp1bHkuIDA2LCAyMDA2IDogMS4zCisgKgktIEZpeCBzZXR0aW5nIG9mIFJQTSBmYW5zIG9uIFhzZXJ2ZSBHNSAodGhleSB3ZXJlIGdvaW5nIHRvbyBmYXN0KQorICogICAgICAtIEFkZCBtaXNzaW5nIHNsb3RzIGZhbiBjb250cm9sIGxvb3AgZm9yIFhzZXJ2ZSBHNQorICoJLSBMb3dlciBmaXhlZCBzbG90cyBmYW4gc3BlZWQgZnJvbSA1MCUgdG8gNDAlIG9uIGRlc2t0b3AgRzVzLiBXZQorICogICAgICAgIHN0aWxsIGNhbid0IHByb3Blcmx5IGltcGxlbWVudCB0aGUgY29udHJvbCBsb29wIGZvciB0aGVzZSwgc28gbGV0J3MKKyAqICAgICAgICByZWR1Y2UgdGhlIG5vaXNlIGEgbGl0dGxlIGJpdCwgaXQgYXBwZWFycyB0aGF0IDQwJSBzdGlsbCBnaXZlcyB1cworICogICAgICAgIGEgcHJldHR5IGdvb2QgYWlyIGZsb3cKKyAqCS0gQWRkIGNvZGUgdG8gInRpY2tsZSIgdGhlIEZDVSByZWd1bGFyeSBzbyBpdCBkb2Vzbid0IHRoaW5rIHRoYXQKKyAqICAgICAgICB3ZSBhcmUgZ29uZSB3aGlsZSBpbiBmYWN0LCB0aGUgbWFjaGluZSBqdXN0IGRpZG4ndCBuZWVkIGFueSBmYW4KKyAqICAgICAgICBzcGVlZCBjaGFuZ2UgbGF0ZWx5CisgKgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTIxLDcgKzEzMiw3IEBACiAKICNpbmNsdWRlICJ0aGVybV9wbTcyLmgiCiAKLSNkZWZpbmUgVkVSU0lPTiAiMS4yYjIiCisjZGVmaW5lIFZFUlNJT04gIjEuMyIKIAogI3VuZGVmIERFQlVHCiAKQEAgLTE0Niw2ICsxNTcsNyBAQAogc3RhdGljIHN0cnVjdCBiYWNrc2lkZV9waWRfc3RhdGUJYmFja3NpZGVfc3RhdGU7CiBzdGF0aWMgc3RydWN0IGRyaXZlc19waWRfc3RhdGUJCWRyaXZlc19zdGF0ZTsKIHN0YXRpYyBzdHJ1Y3QgZGltbV9waWRfc3RhdGUJCWRpbW1zX3N0YXRlOworc3RhdGljIHN0cnVjdCBzbG90c19waWRfc3RhdGUJCXNsb3RzX3N0YXRlOwogc3RhdGljIGludAkJCQlzdGF0ZTsKIHN0YXRpYyBpbnQJCQkJY3B1X2NvdW50Owogc3RhdGljIGludAkJCQljcHVfcGlkX3R5cGU7CkBAIC0xNTQsNyArMTY2LDggQEAKIHN0YXRpYyBpbnQJCQkJY3JpdGljYWxfc3RhdGU7CiBzdGF0aWMgaW50CQkJCXJhY2ttYWM7CiBzdGF0aWMgczMyCQkJCWRpbW1fb3V0cHV0X2NsYW1wOwotCitzdGF0aWMgaW50IAkJCQlmY3VfcnBtX3NoaWZ0Oworc3RhdGljIGludAkJCQlmY3VfdGlja2xlX3RpY2tzOwogc3RhdGljIERFQ0xBUkVfTVVURVgoZHJpdmVyX2xvY2spOwogCiAvKgpAQCAtNDk1LDEzICs1MDgsMjAgQEAKIAlyYyA9IGZhbl93cml0ZV9yZWcoMHgyZSwgJmJ1ZiwgMSk7CiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIC1FSU87CisJcmMgPSBmYW5fcmVhZF9yZWcoMCwgJmJ1ZiwgMSk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIC1FSU87CisJZmN1X3JwbV9zaGlmdCA9IChidWYgPT0gMSkgPyAyIDogMzsKKwlwcmludGsoS0VSTl9ERUJVRyAiRkNVIEluaXRpYWxpemVkLCBSUE0gZmFuIHNoaWZ0IGlzICVkXG4iLAorCSAgICAgICBmY3VfcnBtX3NoaWZ0KTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNldF9ycG1fZmFuKGludCBmYW5faW5kZXgsIGludCBycG0pCiB7CiAJdW5zaWduZWQgY2hhciBidWZbMl07Ci0JaW50IHJjLCBpZDsKKwlpbnQgcmMsIGlkLCBtaW4sIG1heDsKIAogCWlmIChmY3VfZmFuc1tmYW5faW5kZXhdLnR5cGUgIT0gRkNVX0ZBTl9SUE0pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTA5LDEyICs1MjksMTUgQEAKIAlpZiAoaWQgPT0gRkNVX0ZBTl9BQlNFTlRfSUQpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHJwbSA8IDMwMCkKLQkJcnBtID0gMzAwOwotCWVsc2UgaWYgKHJwbSA+IDgxOTEpCi0JCXJwbSA9IDgxOTE7Ci0JYnVmWzBdID0gcnBtID4+IDU7Ci0JYnVmWzFdID0gcnBtIDw8IDM7CisJbWluID0gMjQwMCA+PiBmY3VfcnBtX3NoaWZ0OworCW1heCA9IDU2MDAwID4+IGZjdV9ycG1fc2hpZnQ7CisKKwlpZiAocnBtIDwgbWluKQorCQlycG0gPSBtaW47CisJZWxzZSBpZiAocnBtID4gbWF4KQorCQlycG0gPSBtYXg7CisJYnVmWzBdID0gcnBtID4+ICg4IC0gZmN1X3JwbV9zaGlmdCk7CisJYnVmWzFdID0gcnBtIDw8IGZjdV9ycG1fc2hpZnQ7CiAJcmMgPSBmYW5fd3JpdGVfcmVnKDB4MTAgKyAoaWQgKiAyKSwgYnVmLCAyKTsKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gLUVJTzsKQEAgLTU1MSw3ICs1NzQsNyBAQAogCWlmIChyYyAhPSAyKQogCQlyZXR1cm4gLUVJTzsKIAotCXJldHVybiAoYnVmWzBdIDw8IDUpIHwgYnVmWzFdID4+IDM7CisJcmV0dXJuIChidWZbMF0gPDwgKDggLSBmY3VfcnBtX3NoaWZ0KSkgfCBidWZbMV0gPj4gZmN1X3JwbV9zaGlmdDsKIH0KIAogc3RhdGljIGludCBzZXRfcHdtX2ZhbihpbnQgZmFuX2luZGV4LCBpbnQgcHdtKQpAQCAtNjA5LDYgKzYzMiwyNiBAQAogCXJldHVybiAoYnVmWzBdICogMTAwMCkgLyAyNTU5OwogfQogCitzdGF0aWMgdm9pZCB0aWNrbGVfZmN1KHZvaWQpCit7CisJaW50IHB3bTsKKworCXB3bSA9IGdldF9wd21fZmFuKFNMT1RTX0ZBTl9QV01fSU5ERVgpOworCisJREJHKCJGQ1UgVGlja2xlLCBzbG90cyBmYW4gaXM6ICVkXG4iLCBwd20pOworCWlmIChwd20gPCAwKQorCQlwd20gPSAxMDA7CisKKwlpZiAoIXJhY2ttYWMpIHsKKwkJcHdtID0gU0xPVFNfRkFOX0RFRkFVTFRfUFdNOworCX0gZWxzZSBpZiAocHdtIDwgU0xPVFNfUElEX09VVFBVVF9NSU4pCisJCXB3bSA9IFNMT1RTX1BJRF9PVVRQVVRfTUlOOworCisJLyogVGhhdCBpcyBob3BlZnVsbHkgZW5vdWdoIHRvIG1ha2UgdGhlIEZDVSBoYXBweSAqLworCXNldF9wd21fZmFuKFNMT1RTX0ZBTl9QV01fSU5ERVgsIHB3bSk7Cit9CisKKwogLyoKICAqIFV0aWxpdHkgcm91dGluZSB0byByZWFkIHRoZSBDUFUgY2FsaWJyYXRpb24gRUVQUk9NIGRhdGEKICAqIGZyb20gdGhlIGRldmljZS10cmVlCkBAIC02MTcsNyArNjYwLDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCWNoYXIgbm9kZW5hbWVbNjRdOwotCXU4ICpkYXRhOworCWNvbnN0IHU4ICpkYXRhOwogCWludCBsZW47CiAKIAkvKiBwcm9tLmMgcm91dGluZSBmb3IgZmluZGluZyBhIG5vZGUgYnkgcGF0aCBpcyBhIGJpdCBicmFpbiBkZWFkCkBAIC02MzAsNyArNjczLDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJ0aGVybV9wbTcyOiBGYWlsZWQgdG8gcmV0cmlldmUgY3B1aWQgbm9kZSBmcm9tIGRldmljZS10cmVlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWRhdGEgPSAodTggKilnZXRfcHJvcGVydHkobnAsICJjcHVpZCIsICZsZW4pOworCWRhdGEgPSBnZXRfcHJvcGVydHkobnAsICJjcHVpZCIsICZsZW4pOwogCWlmIChkYXRhID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ0aGVybV9wbTcyOiBGYWlsZWQgdG8gcmV0cmlldmUgY3B1aWQgcHJvcGVydHkgZnJvbSBkZXZpY2UtdHJlZVxuIik7CiAJCW9mX25vZGVfcHV0KG5wKTsKQEAgLTcxNSw2ICs3NTgsOSBAQAogQlVJTERfU0hPV19GVU5DX0ZJWChkcml2ZXNfdGVtcGVyYXR1cmUsIGRyaXZlc19zdGF0ZS5sYXN0X3RlbXApCiBCVUlMRF9TSE9XX0ZVTkNfSU5UKGRyaXZlc19mYW5fcnBtLCBkcml2ZXNfc3RhdGUucnBtKQogCitCVUlMRF9TSE9XX0ZVTkNfRklYKHNsb3RzX3RlbXBlcmF0dXJlLCBzbG90c19zdGF0ZS5sYXN0X3RlbXApCitCVUlMRF9TSE9XX0ZVTkNfSU5UKHNsb3RzX2Zhbl9wd20sIHNsb3RzX3N0YXRlLnB3bSkKKwogQlVJTERfU0hPV19GVU5DX0ZJWChkaW1tc190ZW1wZXJhdHVyZSwgZGltbXNfc3RhdGUubGFzdF90ZW1wKQogCiBzdGF0aWMgREVWSUNFX0FUVFIoY3B1MF90ZW1wZXJhdHVyZSxTX0lSVUdPLHNob3dfY3B1MF90ZW1wZXJhdHVyZSxOVUxMKTsKQEAgLTczNSw2ICs3ODEsOSBAQAogc3RhdGljIERFVklDRV9BVFRSKGRyaXZlc190ZW1wZXJhdHVyZSxTX0lSVUdPLHNob3dfZHJpdmVzX3RlbXBlcmF0dXJlLE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGRyaXZlc19mYW5fcnBtLFNfSVJVR08sc2hvd19kcml2ZXNfZmFuX3JwbSxOVUxMKTsKIAorc3RhdGljIERFVklDRV9BVFRSKHNsb3RzX3RlbXBlcmF0dXJlLFNfSVJVR08sc2hvd19zbG90c190ZW1wZXJhdHVyZSxOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihzbG90c19mYW5fcHdtLFNfSVJVR08sc2hvd19zbG90c19mYW5fcHdtLE5VTEwpOworCiBzdGF0aWMgREVWSUNFX0FUVFIoZGltbXNfdGVtcGVyYXR1cmUsU19JUlVHTyxzaG93X2RpbW1zX3RlbXBlcmF0dXJlLE5VTEwpOwogCiAvKgpAQCAtMTA3Niw2ICsxMTI1LDkgQEAKIAlmYW5fbWluID0gZGltbV9vdXRwdXRfY2xhbXA7CiAJZmFuX21pbiA9IG1heChmYW5fbWluLCAoaW50KXN0YXRlLT5tcHUucm1pbm5faW50YWtlX2Zhbik7CiAKKwlEQkcoIiBDUFUgbWluIG1wdSA9ICVkLCBtaW4gZGltbSA9ICVkXG4iLAorCSAgICBzdGF0ZS0+bXB1LnJtaW5uX2ludGFrZV9mYW4sIGRpbW1fb3V0cHV0X2NsYW1wKTsKKwogCXN0YXRlLT5ycG0gPSBtYXgoc3RhdGUtPnJwbSwgKGludClmYW5fbWluKTsKIAlzdGF0ZS0+cnBtID0gbWluKHN0YXRlLT5ycG0sIChpbnQpc3RhdGUtPm1wdS5ybWF4bl9pbnRha2VfZmFuKTsKIAlzdGF0ZS0+aW50YWtlX3JwbSA9IHN0YXRlLT5ycG07CkBAIC0xMjg0LDcgKzEzMzYsNyBAQAogCSAqLwogCXUzID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi91M0AwLGY4MDAwMDAwIik7CiAJaWYgKHUzICE9IE5VTEwpIHsKLQkJdTMyICp2ZXJzID0gKHUzMiAqKWdldF9wcm9wZXJ0eSh1MywgImRldmljZS1yZXYiLCBOVUxMKTsKKwkJY29uc3QgdTMyICp2ZXJzID0gZ2V0X3Byb3BlcnR5KHUzLCAiZGV2aWNlLXJldiIsIE5VTEwpOwogCQlpZiAodmVycykKIAkJCWlmICgoKCp2ZXJzKSAmIDB4M2YpIDwgMHgzNCkKIAkJCQl1M2ggPSAwOwpAQCAtMTM3NCw3ICsxNDI2LDggQEAKIAlEQkcoIiAgY3VycmVudCBycG06ICVkXG4iLCBzdGF0ZS0+cnBtKTsKIAogCS8qIEdldCBzb21lIHNlbnNvciByZWFkaW5ncyAqLwotCXRlbXAgPSBsZTE2X3RvX2NwdShpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoc3RhdGUtPm1vbml0b3IsIERTMTc3NV9URU1QKSkgPDwgODsKKwl0ZW1wID0gbGUxNl90b19jcHUoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKHN0YXRlLT5tb25pdG9yLAorCQkJCQkJICAgIERTMTc3NV9URU1QKSkgPDwgODsKIAlzdGF0ZS0+bGFzdF90ZW1wID0gdGVtcDsKIAlEQkcoIiAgdGVtcDogJWQuJTAzZCwgdGFyZ2V0OiAlZC4lMDNkXG4iLCBGSVgzMlRPUFJJTlQodGVtcCksCiAJICAgIEZJWDMyVE9QUklOVChEUklWRVNfUElEX0lOUFVUX1RBUkdFVCkpOwpAQCAtMTU3NSw3ICsxNjI4LDcgQEAKIH0KIAogLyoKLSAqIERpc3Bvc2Ugb2YgdGhlIHN0YXRlIGRhdGEgZm9yIHRoZSBkcml2ZXMgY29udHJvbCBsb29wCisgKiBEaXNwb3NlIG9mIHRoZSBzdGF0ZSBkYXRhIGZvciB0aGUgRElNTSBjb250cm9sIGxvb3AKICAqLwogc3RhdGljIHZvaWQgZGlzcG9zZV9kaW1tc19zdGF0ZShzdHJ1Y3QgZGltbV9waWRfc3RhdGUgKnN0YXRlKQogewpAQCAtMTU4OCw2ICsxNjQxLDEyNyBAQAogCXN0YXRlLT5tb25pdG9yID0gTlVMTDsKIH0KIAorLyoKKyAqIFNsb3RzIGZhbiBjb250cm9sIGxvb3AKKyAqLworc3RhdGljIHZvaWQgZG9fbW9uaXRvcl9zbG90cyhzdHJ1Y3Qgc2xvdHNfcGlkX3N0YXRlICpzdGF0ZSkKK3sKKwlzMzIgdGVtcCwgaW50ZWdyYWwsIGRlcml2YXRpdmU7CisJczY0IGludGVnX3AsIGRlcml2X3AsIHByb3BfcCwgc3VtOworCWludCBpLCByYzsKKworCWlmICgtLXN0YXRlLT50aWNrcyAhPSAwKQorCQlyZXR1cm47CisJc3RhdGUtPnRpY2tzID0gU0xPVFNfUElEX0lOVEVSVkFMOworCisJREJHKCJzbG90czpcbiIpOworCisJLyogQ2hlY2sgZmFuIHN0YXR1cyAqLworCXJjID0gZ2V0X3B3bV9mYW4oU0xPVFNfRkFOX1BXTV9JTkRFWCk7CisJaWYgKHJjIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJFcnJvciAlZCByZWFkaW5nIHNsb3RzIGZhbiAhXG4iLCByYyk7CisJCS8qIFhYWCBXaGF0IGRvIHdlIGRvIG5vdyA/ICovCisJfSBlbHNlCisJCXN0YXRlLT5wd20gPSByYzsKKwlEQkcoIiAgY3VycmVudCBwd206ICVkXG4iLCBzdGF0ZS0+cHdtKTsKKworCS8qIEdldCBzb21lIHNlbnNvciByZWFkaW5ncyAqLworCXRlbXAgPSBsZTE2X3RvX2NwdShpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoc3RhdGUtPm1vbml0b3IsCisJCQkJCQkgICAgRFMxNzc1X1RFTVApKSA8PCA4OworCXN0YXRlLT5sYXN0X3RlbXAgPSB0ZW1wOworCURCRygiICB0ZW1wOiAlZC4lMDNkLCB0YXJnZXQ6ICVkLiUwM2RcbiIsIEZJWDMyVE9QUklOVCh0ZW1wKSwKKwkgICAgRklYMzJUT1BSSU5UKFNMT1RTX1BJRF9JTlBVVF9UQVJHRVQpKTsKKworCS8qIFN0b3JlIHRlbXBlcmF0dXJlIGFuZCBlcnJvciBpbiBoaXN0b3J5IGFycmF5ICovCisJc3RhdGUtPmN1cl9zYW1wbGUgPSAoc3RhdGUtPmN1cl9zYW1wbGUgKyAxKSAlIFNMT1RTX1BJRF9ISVNUT1JZX1NJWkU7CisJc3RhdGUtPnNhbXBsZV9oaXN0b3J5W3N0YXRlLT5jdXJfc2FtcGxlXSA9IHRlbXA7CisJc3RhdGUtPmVycm9yX2hpc3Rvcnlbc3RhdGUtPmN1cl9zYW1wbGVdID0gdGVtcCAtIFNMT1RTX1BJRF9JTlBVVF9UQVJHRVQ7CisKKwkvKiBJZiBmaXJzdCBsb29wLCBmaWxsIHRoZSBoaXN0b3J5IHRhYmxlICovCisJaWYgKHN0YXRlLT5maXJzdCkgeworCQlmb3IgKGkgPSAwOyBpIDwgKFNMT1RTX1BJRF9ISVNUT1JZX1NJWkUgLSAxKTsgaSsrKSB7CisJCQlzdGF0ZS0+Y3VyX3NhbXBsZSA9IChzdGF0ZS0+Y3VyX3NhbXBsZSArIDEpICUKKwkJCQlTTE9UU19QSURfSElTVE9SWV9TSVpFOworCQkJc3RhdGUtPnNhbXBsZV9oaXN0b3J5W3N0YXRlLT5jdXJfc2FtcGxlXSA9IHRlbXA7CisJCQlzdGF0ZS0+ZXJyb3JfaGlzdG9yeVtzdGF0ZS0+Y3VyX3NhbXBsZV0gPQorCQkJCXRlbXAgLSBTTE9UU19QSURfSU5QVVRfVEFSR0VUOworCQl9CisJCXN0YXRlLT5maXJzdCA9IDA7CisJfQorCisJLyogQ2FsY3VsYXRlIHRoZSBpbnRlZ3JhbCB0ZXJtICovCisJc3VtID0gMDsKKwlpbnRlZ3JhbCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFNMT1RTX1BJRF9ISVNUT1JZX1NJWkU7IGkrKykKKwkJaW50ZWdyYWwgKz0gc3RhdGUtPmVycm9yX2hpc3RvcnlbaV07CisJaW50ZWdyYWwgKj0gU0xPVFNfUElEX0lOVEVSVkFMOworCURCRygiICBpbnRlZ3JhbDogJTA4eFxuIiwgaW50ZWdyYWwpOworCWludGVnX3AgPSAoKHM2NClTTE9UU19QSURfR19yKSAqIChzNjQpaW50ZWdyYWw7CisJREJHKCIgICBpbnRlZ19wOiAlZFxuIiwgKGludCkoaW50ZWdfcCA+PiAzNikpOworCXN1bSArPSBpbnRlZ19wOworCisJLyogQ2FsY3VsYXRlIHRoZSBkZXJpdmF0aXZlIHRlcm0gKi8KKwlkZXJpdmF0aXZlID0gc3RhdGUtPmVycm9yX2hpc3Rvcnlbc3RhdGUtPmN1cl9zYW1wbGVdIC0KKwkJc3RhdGUtPmVycm9yX2hpc3RvcnlbKHN0YXRlLT5jdXJfc2FtcGxlICsgU0xPVFNfUElEX0hJU1RPUllfU0laRSAtIDEpCisJCQkJICAgICUgU0xPVFNfUElEX0hJU1RPUllfU0laRV07CisJZGVyaXZhdGl2ZSAvPSBTTE9UU19QSURfSU5URVJWQUw7CisJZGVyaXZfcCA9ICgoczY0KVNMT1RTX1BJRF9HX2QpICogKHM2NClkZXJpdmF0aXZlOworCURCRygiICAgZGVyaXZfcDogJWRcbiIsIChpbnQpKGRlcml2X3AgPj4gMzYpKTsKKwlzdW0gKz0gZGVyaXZfcDsKKworCS8qIENhbGN1bGF0ZSB0aGUgcHJvcG9ydGlvbmFsIHRlcm0gKi8KKwlwcm9wX3AgPSAoKHM2NClTTE9UU19QSURfR19wKSAqIChzNjQpKHN0YXRlLT5lcnJvcl9oaXN0b3J5W3N0YXRlLT5jdXJfc2FtcGxlXSk7CisJREJHKCIgICBwcm9wX3A6ICVkXG4iLCAoaW50KShwcm9wX3AgPj4gMzYpKTsKKwlzdW0gKz0gcHJvcF9wOworCisJLyogU2NhbGUgc3VtICovCisJc3VtID4+PSAzNjsKKworCURCRygiICAgc3VtOiAlZFxuIiwgKGludClzdW0pOworCXN0YXRlLT5wd20gPSAoczMyKXN1bTsKKworCXN0YXRlLT5wd20gPSBtYXgoc3RhdGUtPnB3bSwgU0xPVFNfUElEX09VVFBVVF9NSU4pOworCXN0YXRlLT5wd20gPSBtaW4oc3RhdGUtPnB3bSwgU0xPVFNfUElEX09VVFBVVF9NQVgpOworCisJREJHKCIqKiBEUklWRVMgUFdNOiAlZFxuIiwgKGludClzdGF0ZS0+cHdtKTsKKwlzZXRfcHdtX2ZhbihTTE9UU19GQU5fUFdNX0lOREVYLCBzdGF0ZS0+cHdtKTsKK30KKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHN0YXRlIHN0cnVjdHVyZSBmb3IgdGhlIHNsb3RzIGJheSBmYW4gY29udHJvbCBsb29wCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9zbG90c19zdGF0ZShzdHJ1Y3Qgc2xvdHNfcGlkX3N0YXRlICpzdGF0ZSkKK3sKKwlzdGF0ZS0+dGlja3MgPSAxOworCXN0YXRlLT5maXJzdCA9IDE7CisJc3RhdGUtPnB3bSA9IDUwOworCisJc3RhdGUtPm1vbml0b3IgPSBhdHRhY2hfaTJjX2NoaXAoWFNFUlZFX1NMT1RTX0xNNzUsICJzbG90c190ZW1wIik7CisJaWYgKHN0YXRlLT5tb25pdG9yID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2aWNlX2NyZWF0ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3Nsb3RzX3RlbXBlcmF0dXJlKTsKKwlkZXZpY2VfY3JlYXRlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2xvdHNfZmFuX3B3bSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIERpc3Bvc2Ugb2YgdGhlIHN0YXRlIGRhdGEgZm9yIHRoZSBzbG90cyBjb250cm9sIGxvb3AKKyAqLworc3RhdGljIHZvaWQgZGlzcG9zZV9zbG90c19zdGF0ZShzdHJ1Y3Qgc2xvdHNfcGlkX3N0YXRlICpzdGF0ZSkKK3sKKwlpZiAoc3RhdGUtPm1vbml0b3IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZGV2aWNlX3JlbW92ZV9maWxlKCZvZl9kZXYtPmRldiwgJmRldl9hdHRyX3Nsb3RzX3RlbXBlcmF0dXJlKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm9mX2Rldi0+ZGV2LCAmZGV2X2F0dHJfc2xvdHNfZmFuX3B3bSk7CisKKwlkZXRhY2hfaTJjX2NoaXAoc3RhdGUtPm1vbml0b3IpOworCXN0YXRlLT5tb25pdG9yID0gTlVMTDsKK30KKworCiBzdGF0aWMgaW50IGNhbGxfY3JpdGljYWxfb3ZlcnRlbXAodm9pZCkKIHsKIAljaGFyICphcmd2W10gPSB7IGNyaXRpY2FsX292ZXJ0ZW1wX3BhdGgsIE5VTEwgfTsKQEAgLTE2MTcsMTQgKzE3OTEsMTcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogU2V0IHRoZSBQQ0kgZmFuIG9uY2UgZm9yIG5vdyAqLwotCXNldF9wd21fZmFuKFNMT1RTX0ZBTl9QV01fSU5ERVgsIFNMT1RTX0ZBTl9ERUZBVUxUX1BXTSk7CisJLyogU2V0IHRoZSBQQ0kgZmFuIG9uY2UgZm9yIG5vdyBvbiBub24tUmFja01hYyAqLworCWlmICghcmFja21hYykKKwkJc2V0X3B3bV9mYW4oU0xPVFNfRkFOX1BXTV9JTkRFWCwgU0xPVFNfRkFOX0RFRkFVTFRfUFdNKTsKIAogCS8qIEluaXRpYWxpemUgQURDcyAqLwogCWluaXRpYWxpemVfYWRjKCZjcHVfc3RhdGVbMF0pOwogCWlmIChjcHVfc3RhdGVbMV0ubW9uaXRvciAhPSBOVUxMKQogCQlpbml0aWFsaXplX2FkYygmY3B1X3N0YXRlWzFdKTsKIAorCWZjdV90aWNrbGVfdGlja3MgPSBGQ1VfVElDS0xFX1RJQ0tTOworCiAJdXAoJmRyaXZlcl9sb2NrKTsKIAogCXdoaWxlIChzdGF0ZSA9PSBzdGF0ZV9hdHRhY2hlZCkgewpAQCAtMTYzNCw2ICsxODExLDEyIEBACiAKIAkJZG93bigmZHJpdmVyX2xvY2spOwogCisJCS8qIFRpY2tsZSB0aGUgRkNVIGp1c3QgaW4gY2FzZSAqLworCQlpZiAoLS1mY3VfdGlja2xlX3RpY2tzIDwgMCkgeworCQkJZmN1X3RpY2tsZV90aWNrcyA9IEZDVV9USUNLTEVfVElDS1M7CisJCQl0aWNrbGVfZmN1KCk7CisJCX0KKwogCQkvKiBGaXJzdCwgd2UgYWx3YXlzIGNhbGN1bGF0ZSB0aGUgbmV3IERJTU1zIHN0YXRlIG9uIGFuIFhzZXJ2ZSAqLwogCQlpZiAocmFja21hYykKIAkJCWRvX21vbml0b3JfZGltbXMoJmRpbW1zX3N0YXRlKTsKQEAgLTE2NTQsNyArMTgzNyw5IEBACiAJCX0KIAkJLyogVGhlbiwgdGhlIHJlc3QgKi8KIAkJZG9fbW9uaXRvcl9iYWNrc2lkZSgmYmFja3NpZGVfc3RhdGUpOwotCQlpZiAoIXJhY2ttYWMpCisJCWlmIChyYWNrbWFjKQorCQkJZG9fbW9uaXRvcl9zbG90cygmc2xvdHNfc3RhdGUpOworCQllbHNlCiAJCQlkb19tb25pdG9yX2RyaXZlcygmZHJpdmVzX3N0YXRlKTsKIAkJdXAoJmRyaXZlcl9sb2NrKTsKIApAQCAtMTY5Niw2ICsxODgxLDcgQEAKIAlkaXNwb3NlX2NwdV9zdGF0ZSgmY3B1X3N0YXRlWzFdKTsKIAlkaXNwb3NlX2JhY2tzaWRlX3N0YXRlKCZiYWNrc2lkZV9zdGF0ZSk7CiAJZGlzcG9zZV9kcml2ZXNfc3RhdGUoJmRyaXZlc19zdGF0ZSk7CisJZGlzcG9zZV9zbG90c19zdGF0ZSgmc2xvdHNfc3RhdGUpOwogCWRpc3Bvc2VfZGltbXNfc3RhdGUoJmRpbW1zX3N0YXRlKTsKIH0KIApAQCAtMTc0NSw2ICsxOTMxLDggQEAKIAkJZ290byBmYWlsOwogCWlmIChyYWNrbWFjICYmIGluaXRfZGltbXNfc3RhdGUoJmRpbW1zX3N0YXRlKSkKIAkJZ290byBmYWlsOworCWlmIChyYWNrbWFjICYmIGluaXRfc2xvdHNfc3RhdGUoJnNsb3RzX3N0YXRlKSkKKwkJZ290byBmYWlsOwogCWlmICghcmFja21hYyAmJiBpbml0X2RyaXZlc19zdGF0ZSgmZHJpdmVzX3N0YXRlKSkKIAkJZ290byBmYWlsOwogCkBAIC0xOTIzLDggKzIxMTEsOCBAQAogCiAJd2hpbGUgKChucCA9IG9mX2dldF9uZXh0X2NoaWxkKGZjdV9ub2RlLCBucCkpICE9IE5VTEwpIHsKIAkJaW50IHR5cGUgPSAtMTsKLQkJY2hhciAqbG9jOwotCQl1MzIgKnJlZzsKKwkJY29uc3QgY2hhciAqbG9jOworCQljb25zdCB1MzIgKnJlZzsKIAogCQlEQkcoIiBjb250cm9sOiAlcywgdHlwZTogJXNcbiIsIG5wLT5uYW1lLCBucC0+dHlwZSk7CiAKQEAgLTE5NDAsOCArMjEyOCw4IEBACiAJCQljb250aW51ZTsKIAogCQkvKiBMb29rdXAgZm9yIGEgbWF0Y2hpbmcgbG9jYXRpb24gKi8KLQkJbG9jID0gKGNoYXIgKilnZXRfcHJvcGVydHkobnAsICJsb2NhdGlvbiIsIE5VTEwpOwotCQlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgTlVMTCk7CisJCWxvYyA9IGdldF9wcm9wZXJ0eShucCwgImxvY2F0aW9uIiwgTlVMTCk7CisJCXJlZyA9IGdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwogCQlpZiAobG9jID09IE5VTEwgfHwgcmVnID09IE5VTEwpCiAJCQljb250aW51ZTsKIAkJREJHKCIgbWF0Y2hpbmcgbG9jYXRpb246ICVzLCByZWc6IDB4JTA4eFxuIiwgbG9jLCAqcmVnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuaCBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuaAppbmRleCBmYzdlOWI3Li4zOTNjYzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmgKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5oCkBAIC0xMDUsNiArMTA1LDcgQEAKICNkZWZpbmUgRFJJVkVTX0RBTExBU19JRAkweDk0CiAjZGVmaW5lIEJBQ0tTSURFX01BWF9JRAkJMHg5OAogI2RlZmluZSBYU0VSVkVfRElNTVNfTE04NwkweDI1YQorI2RlZmluZSBYU0VSVkVfU0xPVFNfTE03NQkweDI5MAogCiAvKgogICogU29tZSBNQVg2NjkwLCBEUzE3NzUsIExNODcgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKQEAgLTE5OCw3ICsxOTksNyBAQAogCiAjZGVmaW5lIFNMT1RTX0ZBTl9QV01fREVGQVVMVF9JRAkyCiAjZGVmaW5lIFNMT1RTX0ZBTl9QV01fSU5ERVgJCTIKLSNkZWZpbmUJU0xPVFNfRkFOX0RFRkFVTFRfUFdNCQk1MCAvKiBEbyBiZXR0ZXIgaGVyZSAhICovCisjZGVmaW5lCVNMT1RTX0ZBTl9ERUZBVUxUX1BXTQkJNDAgLyogRG8gYmV0dGVyIGhlcmUgISAqLwogCiAKIC8qCkBAIC0yMDYsNyArMjA3LDcgQEAKICAqLwogI2RlZmluZSBESU1NX1BJRF9HX2QJCQkwCiAjZGVmaW5lIERJTU1fUElEX0dfcAkJCTAKLSNkZWZpbmUgRElNTV9QSURfR19yCQkJMHg2NTUzNjAwCisjZGVmaW5lIERJTU1fUElEX0dfcgkJCTB4MDY1NTM2MDAKICNkZWZpbmUgRElNTV9QSURfSU5QVVRfVEFSR0VUCQkzMjc2ODAwCiAjZGVmaW5lIERJTU1fUElEX0lOVEVSVkFMICAgIAkJMQogI2RlZmluZSBESU1NX1BJRF9PVVRQVVRfTUFYCQkxNDAwMApAQCAtMjI2LDYgKzIyNywzMSBAQAogfTsKIAogCisvKgorICogUElEIGZhY3RvcnMgZm9yIHRoZSBYc2VydmUgU2xvdHMgY29udHJvbCBsb29wCisgKi8KKyNkZWZpbmUgU0xPVFNfUElEX0dfZAkJCTAKKyNkZWZpbmUgU0xPVFNfUElEX0dfcAkJCTAKKyNkZWZpbmUgU0xPVFNfUElEX0dfcgkJCTB4MDAxMDAwMDAKKyNkZWZpbmUgU0xPVFNfUElEX0lOUFVUX1RBUkdFVAkJMzIwMDAwMAorI2RlZmluZSBTTE9UU19QSURfSU5URVJWQUwgICAgCQkxCisjZGVmaW5lIFNMT1RTX1BJRF9PVVRQVVRfTUFYCQkxMDAKKyNkZWZpbmUgU0xPVFNfUElEX09VVFBVVF9NSU4JCTIwCisjZGVmaW5lIFNMT1RTX1BJRF9ISVNUT1JZX1NJWkUJCTIwCisKK3N0cnVjdCBzbG90c19waWRfc3RhdGUKK3sKKwlpbnQJCQl0aWNrczsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqCW1vbml0b3I7CisJczMyCSAgICAgICAJCXNhbXBsZV9oaXN0b3J5W1NMT1RTX1BJRF9ISVNUT1JZX1NJWkVdOworCXMzMgkJCWVycm9yX2hpc3RvcnlbU0xPVFNfUElEX0hJU1RPUllfU0laRV07CisJaW50CQkJY3VyX3NhbXBsZTsKKwlzMzIJCQlsYXN0X3RlbXA7CisJaW50CQkJZmlyc3Q7CisJaW50CQkJcHdtOworfTsKKworCiAKIC8qIERlc2t0b3BzICovCiAKQEAgLTI4Myw2ICszMDksOSBAQAogCXMzMgkJCXB1bXBfbWF4OwogfTsKIAorLyogVGlja2xlIEZDVSBldmVyeSAxMCBzZWNvbmRzICovCisjZGVmaW5lIEZDVV9USUNLTEVfVElDS1MJMTAKKwogLyoKICAqIERyaXZlciBzdGF0ZQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV93aW5kdHVubmVsLmMKaW5kZXggYzdkMWMyOS4uNzM4ZmFhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fd2luZHR1bm5lbC5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3dpbmR0dW5uZWwuYwpAQCAtNDg0LDE0ICs0ODQsMTQgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBnNGZhbl9pbml0KCB2b2lkICkKIHsKLQlzdHJ1Y3QgYXBwbGVfdGhlcm1hbF9pbmZvICppbmZvOworCWNvbnN0IHN0cnVjdCBhcHBsZV90aGVybWFsX2luZm8gKmluZm87CiAJc3RydWN0IGRldmljZV9ub2RlICpucDsKIAogCWluaXRfTVVURVgoICZ4LmxvY2sgKTsKIAogCWlmKCAhKG5wPW9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJwb3dlci1tZ3QiKSkgKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlpbmZvID0gKHN0cnVjdCBhcHBsZV90aGVybWFsX2luZm8qKWdldF9wcm9wZXJ0eShucCwgInRoZXJtYWwtaW5mbyIsIE5VTEwpOworCWluZm8gPSBnZXRfcHJvcGVydHkobnAsICJ0aGVybWFsLWluZm8iLCBOVUxMKTsKIAlvZl9ub2RlX3B1dChucCk7CiAKIAlpZiggIWluZm8gfHwgIW1hY2hpbmVfaXNfY29tcGF0aWJsZSgiUG93ZXJNYWMzLDYiKSApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLWN1ZGEuYwppbmRleCA2OWQ1NDUyLi43NTEyZDFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtY3VkYS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1jdWRhLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogewogICAgIHN0cnVjdCBhZGJfcmVxdWVzdCByZXE7CiAgICAgcGh5c19hZGRyX3QgdGFkZHI7Ci0gICAgdTMyICpyZWc7CisgICAgY29uc3QgdTMyICpyZWc7CiAgICAgaW50IGVycjsKIAogICAgIGlmICh2aWFzICE9IDApCkBAIC0xMzIsNyArMTMyLDcgQEAKICAgICBpZiAodmlhcyA9PSAwKQogCXJldHVybiAwOwogCi0gICAgcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eSh2aWFzLCAicmVnIiwgTlVMTCk7CisgICAgcmVnID0gZ2V0X3Byb3BlcnR5KHZpYXMsICJyZWciLCBOVUxMKTsKICAgICBpZiAocmVnID09IE5VTEwpIHsKIAkgICAgcHJpbnRrKEtFUk5fRVJSICJ2aWEtY3VkYTogTm8gXCJyZWdcIiBwcm9wZXJ0eSAhXG4iKTsKIAkgICAgZ290byBmYWlsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggYjQyZDA1Zi4uYTgyZjMxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNSwxOSArMTUsNTEgQEAKIAogI2RlZmluZSBNQVhfUE1VX0xFVkVMIDB4RkYKIAotc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqdmlhczsKIHN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X3Byb3BlcnRpZXMgcG11X2JhY2tsaWdodF9kYXRhOworc3RhdGljIHNwaW5sb2NrX3QgcG11X2JhY2tsaWdodF9sb2NrOworc3RhdGljIGludCBzbGVlcGluZzsKK3N0YXRpYyB1OCBibF9jdXJ2ZVtGQl9CQUNLTElHSFRfTEVWRUxTXTsKIAotc3RhdGljIGludCBwbXVfYmFja2xpZ2h0X2dldF9sZXZlbF9icmlnaHRuZXNzKHN0cnVjdCBmYl9pbmZvICppbmZvLAotCQlpbnQgbGV2ZWwpCitzdGF0aWMgdm9pZCBwbXVfYmFja2xpZ2h0X2luaXRfY3VydmUodTggb2ZmLCB1OCBtaW4sIHU4IG1heCkKK3sKKwl1bnNpZ25lZCBpbnQgaSwgZmxhdCwgY291bnQsIHJhbmdlID0gKG1heCAtIG1pbik7CisKKwlibF9jdXJ2ZVswXSA9IG9mZjsKKworCWZvciAoZmxhdCA9IDE7IGZsYXQgPCAoRkJfQkFDS0xJR0hUX0xFVkVMUyAvIDE2KTsgKytmbGF0KQorCQlibF9jdXJ2ZVtmbGF0XSA9IG1pbjsKKworCWNvdW50ID0gRkJfQkFDS0xJR0hUX0xFVkVMUyAqIDE1IC8gMTY7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpCisJCWJsX2N1cnZlW2ZsYXQgKyBpXSA9IG1pbiArIChyYW5nZSAqIChpICsgMSkgLyBjb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgcG11X2JhY2tsaWdodF9jdXJ2ZV9sb29rdXAoaW50IHZhbHVlKQoreworCWludCBsZXZlbCA9IChGQl9CQUNLTElHSFRfTEVWRUxTIC0gMSk7CisJaW50IGksIG1heCA9IDA7CisKKwkvKiBMb29rIGZvciBiaWdnZXN0IHZhbHVlICovCisJZm9yIChpID0gMDsgaSA8IEZCX0JBQ0tMSUdIVF9MRVZFTFM7IGkrKykKKwkJbWF4ID0gbWF4KChpbnQpYmxfY3VydmVbaV0sIG1heCk7CisKKwkvKiBMb29rIGZvciBuZWFyZXN0IHZhbHVlICovCisJZm9yIChpID0gMDsgaSA8IEZCX0JBQ0tMSUdIVF9MRVZFTFM7IGkrKykgeworCQlpbnQgZGlmZiA9IGFicyhibF9jdXJ2ZVtpXSAtIHZhbHVlKTsKKwkJaWYgKGRpZmYgPCBtYXgpIHsKKwkJCW1heCA9IGRpZmY7CisJCQlsZXZlbCA9IGk7CisJCX0KKwl9CisJcmV0dXJuIGxldmVsOworfQorCitzdGF0aWMgaW50IHBtdV9iYWNrbGlnaHRfZ2V0X2xldmVsX2JyaWdodG5lc3MoaW50IGxldmVsKQogewogCWludCBwbXVsZXZlbDsKIAogCS8qIEdldCBhbmQgY29udmVydCB0aGUgdmFsdWUgKi8KLQltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0JcG11bGV2ZWwgPSBpbmZvLT5ibF9jdXJ2ZVtsZXZlbF0gKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX1BNVV9MRVZFTDsKLQltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKLQorCXBtdWxldmVsID0gYmxfY3VydmVbbGV2ZWxdICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9QTVVfTEVWRUw7CiAJaWYgKHBtdWxldmVsIDwgMCkKIAkJcG11bGV2ZWwgPSAwOwogCWVsc2UgaWYgKHBtdWxldmVsID4gTUFYX1BNVV9MRVZFTCkKQEAgLTM4LDI1ICs3MCwzNyBAQAogCiBzdGF0aWMgaW50IHBtdV9iYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCiB7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm8gPSBjbGFzc19nZXRfZGV2ZGF0YSgmYmQtPmNsYXNzX2Rldik7CiAJc3RydWN0IGFkYl9yZXF1ZXN0IHJlcTsKLQlpbnQgcG11bGV2ZWwsIGxldmVsID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGxldmVsID0gYmQtPnByb3BzLT5icmlnaHRuZXNzOwogCi0JaWYgKHZpYXMgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9iYWNrbGlnaHRfbG9jaywgZmxhZ3MpOworCisJLyogRG9uJ3QgdXBkYXRlIGJyaWdodG5lc3Mgd2hlbiBzbGVlcGluZyAqLworCWlmIChzbGVlcGluZykKKwkJZ290byBvdXQ7CiAKIAlpZiAoYmQtPnByb3BzLT5wb3dlciAhPSBGQl9CTEFOS19VTkJMQU5LIHx8CiAJICAgIGJkLT5wcm9wcy0+ZmJfYmxhbmsgIT0gRkJfQkxBTktfVU5CTEFOSykKIAkJbGV2ZWwgPSAwOwogCi0JcG11bGV2ZWwgPSBwbXVfYmFja2xpZ2h0X2dldF9sZXZlbF9icmlnaHRuZXNzKGluZm8sIGxldmVsKTsKKwlpZiAobGV2ZWwgPiAwKSB7CisJCWludCBwbXVsZXZlbCA9IHBtdV9iYWNrbGlnaHRfZ2V0X2xldmVsX2JyaWdodG5lc3MobGV2ZWwpOwogCi0JcG11X3JlcXVlc3QoJnJlcSwgTlVMTCwgMiwgUE1VX0JBQ0tMSUdIVF9CUklHSFQsIHBtdWxldmVsKTsKLQlwbXVfd2FpdF9jb21wbGV0ZSgmcmVxKTsKKwkJcG11X3JlcXVlc3QoJnJlcSwgTlVMTCwgMiwgUE1VX0JBQ0tMSUdIVF9CUklHSFQsIHBtdWxldmVsKTsKKwkJcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CiAKLQlwbXVfcmVxdWVzdCgmcmVxLCBOVUxMLCAyLCBQTVVfUE9XRVJfQ1RSTCwKLQkJUE1VX1BPV19CQUNLTElHSFQgfCAobGV2ZWwgPiAwID8gUE1VX1BPV19PTiA6IFBNVV9QT1dfT0ZGKSk7Ci0JcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CisJCXBtdV9yZXF1ZXN0KCZyZXEsIE5VTEwsIDIsIFBNVV9QT1dFUl9DVFJMLAorCQkJUE1VX1BPV19CQUNLTElHSFQgfCBQTVVfUE9XX09OKTsKKwkJcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CisJfSBlbHNlIHsKKwkJcG11X3JlcXVlc3QoJnJlcSwgTlVMTCwgMiwgUE1VX1BPV0VSX0NUUkwsCisJCQlQTVVfUE9XX0JBQ0tMSUdIVCB8IFBNVV9QT1dfT0ZGKTsKKwkJcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CisJfQorCitvdXQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2JhY2tsaWdodF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTczLDE1ICsxMTcsMjMgQEAKIAkubWF4X2JyaWdodG5lc3MJPSAoRkJfQkFDS0xJR0hUX0xFVkVMUyAtIDEpLAogfTsKIAotdm9pZCBfX2luaXQgcG11X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqaW5fdmlhcykKKyNpZmRlZiBDT05GSUdfUE0KK3ZvaWQgcG11X2JhY2tsaWdodF9zZXRfc2xlZXAoaW50IHNsZWVwKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG11X2JhY2tsaWdodF9sb2NrLCBmbGFncyk7CisJc2xlZXBpbmcgPSBzbGVlcDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbXVfYmFja2xpZ2h0X2xvY2ssIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKwordm9pZCBfX2luaXQgcG11X2JhY2tsaWdodF9pbml0KCkKIHsKIAlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQ7Ci0Jc3RydWN0IGZiX2luZm8gKmluZm87CiAJY2hhciBuYW1lWzEwXTsKIAlpbnQgbGV2ZWwsIGF1dG9zYXZlOwogCi0JdmlhcyA9IGluX3ZpYXM7Ci0KIAkvKiBTcGVjaWFsIGNhc2UgZm9yIHRoZSBvbGQgUG93ZXJCb29rIHNpbmNlIEkgY2FuJ3QgdGVzdCBvbiBpdCAqLwogCWF1dG9zYXZlID0KIAkJbWFjaGluZV9pc19jb21wYXRpYmxlKCJBQVBMLDM0MDAvMjQwMCIpIHx8CkBAIC05MywyNyArMTQ1LDE0IEBACiAJICAgICFtYWNoaW5lX2lzX2NvbXBhdGlibGUoIlBvd2VyQm9vazEsMSIpKQogCQlyZXR1cm47CiAKLQkvKiBBY3R1YWxseSwgdGhpcyBpcyBhIGhhY2ssIGJ1dCBJIGRvbid0IGtub3cgb2YgYSBiZXR0ZXIgd2F5Ci0JICogdG8gZ2V0IHRoZSBmaXJzdCBmcmFtZWJ1ZmZlciBkZXZpY2UuCi0JICovCi0JaW5mbyA9IHJlZ2lzdGVyZWRfZmJbMF07Ci0JaWYgKCFpbmZvKSB7Ci0JCXByaW50aygicG11Ymw6IE5vIGZyYW1lYnVmZmVyIGZvdW5kXG4iKTsKLQkJZ290byBlcnJvcjsKLQl9CisJc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAicG11YmwiKTsKIAotCXNucHJpbnRmKG5hbWUsIHNpemVvZihuYW1lKSwgInBtdWJsJWQiLCBpbmZvLT5ub2RlKTsKLQotCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBpbmZvLCAmcG11X2JhY2tsaWdodF9kYXRhKTsKKwliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgTlVMTCwgJnBtdV9iYWNrbGlnaHRfZGF0YSk7CiAJaWYgKElTX0VSUihiZCkpIHsKIAkJcHJpbnRrKCJwbXVibDogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KLQotCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKLQlpbmZvLT5ibF9kZXYgPSBiZDsKLQlmYl9ibF9kZWZhdWx0X2N1cnZlKGluZm8sIDB4N0YsIDB4NDYsIDB4MEUpOwotCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOworCXBtdV9iYWNrbGlnaHRfaW5pdF9jdXJ2ZSgweDdGLCAweDQ2LCAweDBFKTsKIAogCWxldmVsID0gcG11X2JhY2tsaWdodF9kYXRhLm1heF9icmlnaHRuZXNzOwogCkBAIC0xMjMsMTggKzE2MiwxNiBAQAogCQlwbXVfcmVxdWVzdCgmcmVxLCBOVUxMLCAyLCAweGQ5LCAwKTsKIAkJcG11X3dhaXRfY29tcGxldGUoJnJlcSk7CiAKLQkJbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCQlsZXZlbCA9IHBtYWNfYmFja2xpZ2h0X2N1cnZlX2xvb2t1cChpbmZvLAorCQlsZXZlbCA9IHBtdV9iYWNrbGlnaHRfY3VydmVfbG9va3VwKAogCQkJCShyZXEucmVwbHlbMF0gPj4gNCkgKgogCQkJCXBtdV9iYWNrbGlnaHRfZGF0YS5tYXhfYnJpZ2h0bmVzcyAvIDE1KTsKLQkJbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiAJfQogCi0JdXAoJmJkLT5zZW0pOworCWRvd24oJmJkLT5zZW0pOwogCWJkLT5wcm9wcy0+YnJpZ2h0bmVzcyA9IGxldmVsOwogCWJkLT5wcm9wcy0+cG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwogCWJkLT5wcm9wcy0+dXBkYXRlX3N0YXR1cyhiZCk7Ci0JZG93bigmYmQtPnNlbSk7CisJdXAoJmJkLT5zZW0pOwogCiAJbXV0ZXhfbG9jaygmcG1hY19iYWNrbGlnaHRfbXV0ZXgpOwogCWlmICghcG1hY19iYWNrbGlnaHQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYwppbmRleCBhZjgzNzVlZC4uMTc5YWYxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1sZWQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWxlZC5jCkBAIC03NCw3ICs3NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgbGVkX2NsYXNzZGV2IHBtdV9sZWQgPSB7CiAJLm5hbWUgPSAicG11LWZyb250LWxlZCIsCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX1BNQUNfQkxJTksKKyNpZmRlZiBDT05GSUdfQURCX1BNVV9MRURfSURFCiAJLmRlZmF1bHRfdHJpZ2dlciA9ICJpZGUtZGlzayIsCiAjZW5kaWYKIAkuYnJpZ2h0bmVzc19zZXQgPSBwbXVfbGVkX3NldCwKQEAgLTEyMCw3ICsxMjAsNyBAQAogCWR0ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi8iKTsKIAlpZiAoZHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JbW9kZWwgPSAoY29uc3QgY2hhciAqKWdldF9wcm9wZXJ0eShkdCwgIm1vZGVsIiwgTlVMTCk7CisJbW9kZWwgPSBnZXRfcHJvcGVydHkoZHQsICJtb2RlbCIsIE5VTEwpOwogCWlmIChtb2RlbCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlpZiAoc3RybmNtcChtb2RlbCwgIlBvd2VyQm9vayIsIHN0cmxlbigiUG93ZXJCb29rIikpICE9IDAgJiYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCAwNmNhODBiLi5kZGEwMzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC0xNiw3ICsxNiw2IEBACiAgKiAgICBhIHNsZWVwIG9yIGEgZnJlcS4gc3dpdGNoCiAgKiAgLSBNb3ZlIHNsZWVwIGNvZGUgb3V0IG9mIGhlcmUgdG8gcG1hY19wbSwgbWVyZ2UgaW50byBuZXcKICAqICAgIGNvbW1vbiBQTSBpbmZyYXN0cnVjdHVyZQotICogIC0gTW92ZSBiYWNrbGlnaHQgY29kZSBvdXQgYXMgd2VsbAogICogIC0gU2F2ZS9SZXN0b3JlIFBDSSBzcGFjZSBwcm9wZXJseQogICoKICAqLwpAQCAtNjAsOSArNTksNyBAQAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90aW1lLmg+Ci0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCiAjaW5jbHVkZSA8YXNtL2JhY2tsaWdodC5oPgotI2VuZGlmCiAKICNpbmNsdWRlICJ2aWEtcG11LWV2ZW50LmgiCiAKQEAgLTE3NywxMCArMTc0LDYgQEAKIHN0YXRpYyBzdHJ1Y3QgYWRiX3JlcXVlc3QgYmF0dF9yZXE7CiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3BtdV9iYXR0W1BNVV9NQVhfQkFUVEVSSUVTXTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEQkhJRCkgJiYgZGVmaW5lZChDT05GSUdfUE1BQ19CQUNLTElHSFQpCi1leHRlcm4gaW50IGRpc2FibGVfa2VybmVsX2JhY2tsaWdodDsKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKSAqLwotCiBpbnQgX19mYWtlX3NsZWVwOwogaW50IGFzbGVlcDsKIEJMT0NLSU5HX05PVElGSUVSX0hFQUQoc2xlZXBfbm90aWZpZXJfbGlzdCk7CkBAIC0yODcsNyArMjgwLDcgQEAKIGludCBfX2luaXQgZmluZF92aWFfcG11KHZvaWQpCiB7CiAJdTY0IHRhZGRyOwotCXUzMiAqcmVnOworCWNvbnN0IHUzMiAqcmVnOwogCiAJaWYgKHZpYSAhPSAwKQogCQlyZXR1cm4gMTsKQEAgLTI5NSw3ICsyODgsNyBAQAogCWlmICh2aWFzID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eSh2aWFzLCAicmVnIiwgTlVMTCk7CisJcmVnID0gZ2V0X3Byb3BlcnR5KHZpYXMsICJyZWciLCBOVUxMKTsKIAlpZiAocmVnID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWEtcG11OiBObyBcInJlZ1wiIHByb3BlcnR5ICFcbiIpOwogCQlnb3RvIGZhaWw7CkBAIC0zMzcsNyArMzMwLDcgQEAKIAkJCiAJCWdwaW9wID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoTlVMTCwgImdwaW8iKTsKIAkJaWYgKGdwaW9wKSB7Ci0JCQlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KGdwaW9wLCAicmVnIiwgTlVMTCk7CisJCQlyZWcgPSBnZXRfcHJvcGVydHkoZ3Bpb3AsICJyZWciLCBOVUxMKTsKIAkJCWlmIChyZWcpCiAJCQkJZ2FkZHIgPSBvZl90cmFuc2xhdGVfYWRkcmVzcyhncGlvcCwgcmVnKTsKIAkJCWlmIChnYWRkciAhPSBPRl9CQURfQUREUikKQEAgLTQ2Niw3ICs0NTksNyBAQAogCiAjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCiAJLyogSW5pdGlhbGl6ZSBiYWNrbGlnaHQgKi8KLQlwbXVfYmFja2xpZ2h0X2luaXQodmlhcyk7CisJcG11X2JhY2tsaWdodF9pbml0KCk7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19QUEMzMgpAQCAtNDg2LDkgKzQ3OSw5IEBACiAJCXBtdV9iYXR0ZXJpZXNbMV0uZmxhZ3MgfD0gUE1VX0JBVFRfVFlQRV9TTUFSVDsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2aWNlX25vZGUqIHByaW0gPSBmaW5kX2RldmljZXMoInBvd2VyLW1ndCIpOwotCQl1MzIgKnByaW1faW5mbyA9IE5VTEw7CisJCWNvbnN0IHUzMiAqcHJpbV9pbmZvID0gTlVMTDsKIAkJaWYgKHByaW0pCi0JCQlwcmltX2luZm8gPSAodTMyICopZ2V0X3Byb3BlcnR5KHByaW0sICJwcmltLWluZm8iLCBOVUxMKTsKKwkJCXByaW1faW5mbyA9IGdldF9wcm9wZXJ0eShwcmltLCAicHJpbS1pbmZvIiwgTlVMTCk7CiAJCWlmIChwcmltX2luZm8pIHsKIAkJCS8qIE90aGVyIHN0dWZmcyBoZXJlIHlldCB1bmtub3duICovCiAJCQlwbXVfYmF0dGVyeV9jb3VudCA9IChwcmltX2luZm9bNl0gPj4gMTYpICYgMHhmZjsKQEAgLTE0MDMsMTEgKzEzOTYsOCBAQAogCWVsc2UgaWYgKCgxIDw8IHBpcnEpICYgUE1VX0lOVF9TTkRCUlQpIHsKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKIAkJaWYgKGxlbiA9PSAzKQotI2lmZGVmIENPTkZJR19JTlBVVF9BREJISUQKLQkJCWlmICghZGlzYWJsZV9rZXJuZWxfYmFja2xpZ2h0KQotI2VuZGlmIC8qIENPTkZJR19JTlBVVF9BREJISUQgKi8KLQkJCQlwbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X2JyaWdodG5lc3MoZGF0YVsxXSA+PiA0KTsKLSNlbmRpZiAvKiBDT05GSUdfUE1BQ19CQUNLTElHSFQgKi8KKwkJCXBtYWNfYmFja2xpZ2h0X3NldF9sZWdhY3lfYnJpZ2h0bmVzc19wbXUoZGF0YVsxXSA+PiA0KTsKKyNlbmRpZgogCX0KIAkvKiBUaWNrIGludGVycnVwdCAqLwogCWVsc2UgaWYgKCgxIDw8IHBpcnEpICYgUE1VX0lOVF9USUNLKSB7CkBAIC0yMDA1LDYgKzE5OTUsOCBAQAogCW91dF84KCZ2aWFbSUVSXSwgSUVSX1NFVCB8IFNSX0lOVCB8IENCMV9JTlQpOwogfQogCitleHRlcm4gdm9pZCBwbXVfYmFja2xpZ2h0X3NldF9zbGVlcChpbnQgc2xlZXApOworCiBzdGF0aWMgaW50CiBwbWFjX3N1c3BlbmRfZGV2aWNlcyh2b2lkKQogewpAQCAtMjA0Miw2ICsyMDM0LDExIEBACiAJCXJldHVybiAtRUJVU1k7CiAJfQogCisjaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCisJLyogVGVsbCBiYWNrbGlnaHQgY29kZSBub3QgdG8gbXVjayBhcm91bmQgd2l0aCB0aGUgY2hpcCBhbnltb3JlICovCisJcG11X2JhY2tsaWdodF9zZXRfc2xlZXAoMSk7CisjZW5kaWYKKwogCS8qIENhbGwgcGxhdGZvcm0gZnVuY3Rpb25zIG1hcmtlZCAib24gc2xlZXAiICovCiAJcG1hY19wZnVuY19pMmNfc3VzcGVuZCgpOwogCXBtYWNfcGZ1bmNfYmFzZV9zdXNwZW5kKCk7CkBAIC0yMTAwLDYgKzIwOTcsMTEgQEAKIHsKIAltZGVsYXkoMTAwKTsKIAorI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAorCS8qIFRlbGwgYmFja2xpZ2h0IGNvZGUgaXQgY2FuIHVzZSB0aGUgY2hpcCBhZ2FpbiAqLworCXBtdV9iYWNrbGlnaHRfc2V0X3NsZWVwKDApOworI2VuZGlmCisKIAkvKiBQb3dlciBiYWNrIHVwIHN5c3RlbSBkZXZpY2VzIChpbmNsdWRpbmcgdGhlIFBJQykgKi8KIAlkZXZpY2VfcG93ZXJfdXAoKTsKIApAQCAtMjQxNCw3ICsyNDE2LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiAjaWYgZGVmaW5lZChDT05GSUdfSU5QVVRfQURCSElEKSAmJiBkZWZpbmVkKENPTkZJR19QTUFDX0JBQ0tMSUdIVCkKIAlpbnQJYmFja2xpZ2h0X2xvY2tlcjsKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKSAqLwkKKyNlbmRpZgogfTsKIAogc3RhdGljIExJU1RfSEVBRChhbGxfcG11X3B2dCk7CkBAIC0yNDY0LDcgKzI0NjYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZhbGxfcHZ0X2xvY2ssIGZsYWdzKTsKICNpZiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKQogCXBwLT5iYWNrbGlnaHRfbG9ja2VyID0gMDsKLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKSAqLwkKKyNlbmRpZgogCWxpc3RfYWRkKCZwcC0+bGlzdCwgJmFsbF9wbXVfcHZ0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbGxfcHZ0X2xvY2ssIGZsYWdzKTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBwcDsKQEAgLTI1NTksMTMgKzI1NjEsMTIgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFsbF9wdnRfbG9jaywgZmxhZ3MpOwogCQlsaXN0X2RlbCgmcHAtPmxpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbGxfcHZ0X2xvY2ssIGZsYWdzKTsKKwogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX0FEQkhJRCkgJiYgZGVmaW5lZChDT05GSUdfUE1BQ19CQUNLTElHSFQpCi0JCWlmIChwcC0+YmFja2xpZ2h0X2xvY2tlcikgewotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0JCQlkaXNhYmxlX2tlcm5lbF9iYWNrbGlnaHQtLTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtdV9sb2NrLCBmbGFncyk7Ci0JCX0KLSNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19JTlBVVF9BREJISUQpICYmIGRlZmluZWQoQ09ORklHX1BNQUNfQkFDS0xJR0hUKSAqLworCQlpZiAocHAtPmJhY2tsaWdodF9sb2NrZXIpCisJCQlwbWFjX2JhY2tsaWdodF9lbmFibGUoKTsKKyNlbmRpZgorCiAJCWtmcmVlKHBwKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMjY0MiwxOCArMjY0MywxOCBAQAogI2lmZGVmIENPTkZJR19JTlBVVF9BREJISUQKIAljYXNlIFBNVV9JT0NfR1JBQl9CQUNLTElHSFQ6IHsKIAkJc3RydWN0IHBtdV9wcml2YXRlICpwcCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCQlpZiAocHAtPmJhY2tsaWdodF9sb2NrZXIpCiAJCQlyZXR1cm4gMDsKKwogCQlwcC0+YmFja2xpZ2h0X2xvY2tlciA9IDE7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwbXVfbG9jaywgZmxhZ3MpOwotCQlkaXNhYmxlX2tlcm5lbF9iYWNrbGlnaHQrKzsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG11X2xvY2ssIGZsYWdzKTsKKwkJcG1hY19iYWNrbGlnaHRfZGlzYWJsZSgpOworCiAJCXJldHVybiAwOwogCX0KICNlbmRpZiAvKiBDT05GSUdfSU5QVVRfQURCSElEICovCiAjZW5kaWYgLyogQ09ORklHX1BNQUNfQkFDS0xJR0hUX0xFR0FDWSAqLworCiAJY2FzZSBQTVVfSU9DX0dFVF9NT0RFTDoKIAkgICAgCXJldHVybiBwdXRfdXNlcihwbXVfa2luZCwgYXJncCk7CiAJY2FzZSBQTVVfSU9DX0hBU19BREI6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKaW5kZXggZjFkZjZlZi4uMmZmNTQ2ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtODEuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTgxLmMKQEAgLTM5Niw3ICszOTYsNyBAQAogc3RhdGljIHZvaWQgd2Zfc211X2NyZWF0ZV9jcHVfZmFucyh2b2lkKQogewogCXN0cnVjdCB3Zl9jcHVfcGlkX3BhcmFtIHBpZF9wYXJhbTsKLQlzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpoZHI7CisJY29uc3Qgc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqaGRyOwogCXN0cnVjdCBzbXVfc2RicF9jcHVwaWRkYXRhICpwaWRkYXRhOwogCXN0cnVjdCBzbXVfc2RicF9mdnQgKmZ2dDsKIAlzMzIgdG1heCwgdGRlbHRhLCBtYXhwb3csIHBvd2FkajsKQEAgLTcwMiw3ICs3MDIsNyBAQAogCiBzdGF0aWMgaW50IHdmX2luaXRfcG0odm9pZCkKIHsKLQlzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpoZHI7CisJY29uc3Qgc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqaGRyOwogCiAJaGRyID0gc211X2dldF9zZGJfcGFydGl0aW9uKFNNVV9TREJfU0VOU09SVFJFRV9JRCwgTlVMTCk7CiAJaWYgKGhkciAhPSAwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9wbTkxLmMKaW5kZXggMGQ2MzcyZS4uNTllOWZmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fcG05MS5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3BtOTEuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiBzdGF0aWMgdm9pZCB3Zl9zbXVfY3JlYXRlX2NwdV9mYW5zKHZvaWQpCiB7CiAJc3RydWN0IHdmX2NwdV9waWRfcGFyYW0gcGlkX3BhcmFtOwotCXN0cnVjdCBzbXVfc2RicF9oZWFkZXIgKmhkcjsKKwljb25zdCBzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpoZHI7CiAJc3RydWN0IHNtdV9zZGJwX2NwdXBpZGRhdGEgKnBpZGRhdGE7CiAJc3RydWN0IHNtdV9zZGJwX2Z2dCAqZnZ0OwogCXMzMiB0bWF4LCB0ZGVsdGEsIG1heHBvdywgcG93YWRqOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfY29udHJvbHMuYwppbmRleCBhOWU4OGVkYy4uYmZmMWYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKQEAgLTE1OSwxNCArMTU5LDE1IEBACiAJCQkJCSAgICAgIGludCBwd21fZmFuKQogewogCXN0cnVjdCBzbXVfZmFuX2NvbnRyb2wgKmZjdDsKLQlzMzIgKnY7IHUzMiAqcmVnOwotCWNoYXIgKmw7CisJY29uc3QgczMyICp2OworCWNvbnN0IHUzMiAqcmVnOworCWNvbnN0IGNoYXIgKmw7CiAKIAlmY3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc211X2Zhbl9jb250cm9sKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGZjdCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAlmY3QtPmN0cmwub3BzID0gJnNtdV9mYW5fb3BzOwotCWwgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShub2RlLCAibG9jYXRpb24iLCBOVUxMKTsKKwlsID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJsb2NhdGlvbiIsIE5VTEwpOwogCWlmIChsID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIApAQCAtMjIzLDE3ICsyMjQsMTcgQEAKIAkJZ290byBmYWlsOwogCiAJLyogR2V0IG1pbiAmIG1heCB2YWx1ZXMqLwotCXYgPSAoczMyICopZ2V0X3Byb3BlcnR5KG5vZGUsICJtaW4tdmFsdWUiLCBOVUxMKTsKKwl2ID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJtaW4tdmFsdWUiLCBOVUxMKTsKIAlpZiAodiA9PSBOVUxMKQogCQlnb3RvIGZhaWw7CiAJZmN0LT5taW4gPSAqdjsKLQl2ID0gKHMzMiAqKWdldF9wcm9wZXJ0eShub2RlLCAibWF4LXZhbHVlIiwgTlVMTCk7CisJdiA9IGdldF9wcm9wZXJ0eShub2RlLCAibWF4LXZhbHVlIiwgTlVMTCk7CiAJaWYgKHYgPT0gTlVMTCkKIAkJZ290byBmYWlsOwogCWZjdC0+bWF4ID0gKnY7CiAKIAkvKiBHZXQgInJlZyIgdmFsdWUgKi8KLQlyZWcgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKKwlyZWcgPSBnZXRfcHJvcGVydHkobm9kZSwgInJlZyIsIE5VTEwpOwogCWlmIChyZWcgPT0gTlVMTCkKIAkJZ290byBmYWlsOwogCWZjdC0+cmVnID0gKnJlZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwppbmRleCBlMjk1YTA3Li5hY2ViNjFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCkBAIC0yMzMsMTUgKzIzMywxNSBAQAogewogCXN0cnVjdCB3Zl9zYXQgKnNhdDsKIAlzdHJ1Y3Qgd2Zfc2F0X3NlbnNvciAqc2VuczsKLQl1MzIgKnJlZzsKLQljaGFyICpsb2MsICp0eXBlOworCWNvbnN0IHUzMiAqcmVnOworCWNvbnN0IGNoYXIgKmxvYywgKnR5cGU7CiAJdTggYWRkciwgY2hpcCwgY29yZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNoaWxkOwogCWludCBzaGlmdCwgY3B1LCBpbmRleDsKIAljaGFyICpuYW1lOwogCWludCB2c2Vuc1syXSwgaXNlbnNbMl07CiAKLQlyZWcgPSAodTMyICopIGdldF9wcm9wZXJ0eShkZXYsICJyZWciLCBOVUxMKTsKKwlyZWcgPSBnZXRfcHJvcGVydHkoZGV2LCAicmVnIiwgTlVMTCk7CiAJaWYgKHJlZyA9PSBOVUxMKQogCQlyZXR1cm47CiAJYWRkciA9ICpyZWc7CkBAIC0yNjgsNyArMjY4LDcgQEAKIAlpc2Vuc1swXSA9IGlzZW5zWzFdID0gLTE7CiAJY2hpbGQgPSBOVUxMOwogCXdoaWxlICgoY2hpbGQgPSBvZl9nZXRfbmV4dF9jaGlsZChkZXYsIGNoaWxkKSkgIT0gTlVMTCkgewotCQlyZWcgPSAodTMyICopIGdldF9wcm9wZXJ0eShjaGlsZCwgInJlZyIsIE5VTEwpOworCQlyZWcgPSBnZXRfcHJvcGVydHkoY2hpbGQsICJyZWciLCBOVUxMKTsKIAkJdHlwZSA9IGdldF9wcm9wZXJ0eShjaGlsZCwgImRldmljZV90eXBlIiwgTlVMTCk7CiAJCWxvYyA9IGdldF9wcm9wZXJ0eShjaGlsZCwgImxvY2F0aW9uIiwgTlVMTCk7CiAJCWlmIChyZWcgPT0gTlVMTCB8fCBsb2MgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCmluZGV4IGJlZDI1ZGMuLmRlZmU5OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYwpAQCAtMTk4LDE0ICsxOTgsMTQgQEAKIHN0YXRpYyBzdHJ1Y3Qgc211X2FkX3NlbnNvciAqc211X2Fkc19jcmVhdGUoc3RydWN0IGRldmljZV9ub2RlICpub2RlKQogewogCXN0cnVjdCBzbXVfYWRfc2Vuc29yICphZHM7Ci0JY2hhciAqYywgKmw7Ci0JdTMyICp2OworCWNvbnN0IGNoYXIgKmMsICpsOworCWNvbnN0IHUzMiAqdjsKIAogCWFkcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbXVfYWRfc2Vuc29yKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGFkcyA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKLQljID0gKGNoYXIgKilnZXRfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7Ci0JbCA9IChjaGFyICopZ2V0X3Byb3BlcnR5KG5vZGUsICJsb2NhdGlvbiIsIE5VTEwpOworCWMgPSBnZXRfcHJvcGVydHkobm9kZSwgImRldmljZV90eXBlIiwgTlVMTCk7CisJbCA9IGdldF9wcm9wZXJ0eShub2RlLCAibG9jYXRpb24iLCBOVUxMKTsKIAlpZiAoYyA9PSBOVUxMIHx8IGwgPT0gTlVMTCkKIAkJZ290byBmYWlsOwogCkBAIC0yNTUsNyArMjU1LDcgQEAKIAl9IGVsc2UKIAkJZ290byBmYWlsOwogCi0JdiA9ICh1MzIgKilnZXRfcHJvcGVydHkobm9kZSwgInJlZyIsIE5VTEwpOworCXYgPSBnZXRfcHJvcGVydHkobm9kZSwgInJlZyIsIE5VTEwpOwogCWlmICh2ID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAlhZHMtPnJlZyA9ICp2OwpAQCAtMzgyLDcgKzM4Miw3IEBACiAKIHN0YXRpYyB2b2lkIHNtdV9mZXRjaF9wYXJhbV9wYXJ0aXRpb25zKHZvaWQpCiB7Ci0Jc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqaGRyOworCWNvbnN0IHN0cnVjdCBzbXVfc2RicF9oZWFkZXIgKmhkcjsKIAogCS8qIEdldCBDUFUgdm9sdGFnZS9jdXJyZW50L3Bvd2VyIGNhbGlicmF0aW9uIGRhdGEgKi8KIAloZHIgPSBzbXVfZ2V0X3NkYl9wYXJ0aXRpb24oU01VX1NEQl9DUFVWQ1BfSUQsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jIGIvZHJpdmVycy9tZC9kbS1jcnlwdC5jCmluZGV4IDYwMjJlZDEuLmJkYmQzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tY3J5cHQuYworKysgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKQEAgLTUsNiArNSw3IEBACiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNzgsMTEgKzc5LDEzIEBACiAJICovCiAJc3RydWN0IGNyeXB0X2l2X29wZXJhdGlvbnMgKml2X2dlbl9vcHM7CiAJY2hhciAqaXZfbW9kZTsKLQl2b2lkICppdl9nZW5fcHJpdmF0ZTsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqaXZfZ2VuX3ByaXZhdGU7CiAJc2VjdG9yX3QgaXZfb2Zmc2V0OwogCXVuc2lnbmVkIGludCBpdl9zaXplOwogCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwljaGFyIGNpcGhlcltDUllQVE9fTUFYX0FMR19OQU1FXTsKKwljaGFyIGNoYWlubW9kZVtDUllQVE9fTUFYX0FMR19OQU1FXTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtOwogCXVuc2lnbmVkIGludCBrZXlfc2l6ZTsKIAl1OCBrZXlbMF07CiB9OwpAQCAtOTYsMTIgKzk5LDEyIEBACiAvKgogICogRGlmZmVyZW50IElWIGdlbmVyYXRpb24gYWxnb3JpdGhtczoKICAqCi0gKiBwbGFpbjogdGhlIGluaXRpYWwgdmVjdG9yIGlzIHRoZSAzMi1iaXQgbG93LWVuZGlhbiB2ZXJzaW9uIG9mIHRoZSBzZWN0b3IKKyAqIHBsYWluOiB0aGUgaW5pdGlhbCB2ZWN0b3IgaXMgdGhlIDMyLWJpdCBsaXR0bGUtZW5kaWFuIHZlcnNpb24gb2YgdGhlIHNlY3RvcgogICogICAgICAgIG51bWJlciwgcGFkZGVkIHdpdGggemVyb3MgaWYgbmVjY2Vzc2FyeS4KICAqCi0gKiBlc3NfaXY6ICJlbmNyeXB0ZWQgc2VjdG9yfHNhbHQgaW5pdGlhbCB2ZWN0b3IiLCB0aGUgc2VjdG9yIG51bWJlciBpcwotICogICAgICAgICBlbmNyeXB0ZWQgd2l0aCB0aGUgYnVsayBjaXBoZXIgdXNpbmcgYSBzYWx0IGFzIGtleS4gVGhlIHNhbHQKLSAqICAgICAgICAgc2hvdWxkIGJlIGRlcml2ZWQgZnJvbSB0aGUgYnVsayBjaXBoZXIncyBrZXkgdmlhIGhhc2hpbmcuCisgKiBlc3NpdjogImVuY3J5cHRlZCBzZWN0b3J8c2FsdCBpbml0aWFsIHZlY3RvciIsIHRoZSBzZWN0b3IgbnVtYmVyIGlzCisgKiAgICAgICAgZW5jcnlwdGVkIHdpdGggdGhlIGJ1bGsgY2lwaGVyIHVzaW5nIGEgc2FsdCBhcyBrZXkuIFRoZSBzYWx0CisgKiAgICAgICAgc2hvdWxkIGJlIGRlcml2ZWQgZnJvbSB0aGUgYnVsayBjaXBoZXIncyBrZXkgdmlhIGhhc2hpbmcuCiAgKgogICogcGx1bWI6IHVuaW1wbGVtZW50ZWQsIHNlZToKICAqIGh0dHA6Ly9hcnRpY2xlLmdtYW5lLm9yZy9nbWFuZS5saW51eC5rZXJuZWwuZGV2aWNlLW1hcHBlci5kbS1jcnlwdC80NTQKQEAgLTExOCwxMSArMTIxLDEzIEBACiBzdGF0aWMgaW50IGNyeXB0X2l2X2Vzc2l2X2N0cihzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYywgc3RydWN0IGRtX3RhcmdldCAqdGksCiAJICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm9wdHMpCiB7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKmVzc2l2X3RmbTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqaGFzaF90Zm07CisJc3RydWN0IGNyeXB0b19jaXBoZXIgKmVzc2l2X3RmbTsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2hfdGZtOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAJdW5zaWduZWQgaW50IHNhbHRzaXplOwogCXU4ICpzYWx0OworCWludCBlcnI7CiAKIAlpZiAob3B0cyA9PSBOVUxMKSB7CiAJCXRpLT5lcnJvciA9ICJEaWdlc3QgYWxnb3JpdGhtIG1pc3NpbmcgZm9yIEVTU0lWIG1vZGUiOwpAQCAtMTMwLDc2ICsxMzUsNzAgQEAKIAl9CiAKIAkvKiBIYXNoIHRoZSBjaXBoZXIga2V5IHdpdGggdGhlIGdpdmVuIGhhc2ggYWxnb3JpdGhtICovCi0JaGFzaF90Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKG9wdHMsIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCk7Ci0JaWYgKGhhc2hfdGZtID09IE5VTEwpIHsKKwloYXNoX3RmbSA9IGNyeXB0b19hbGxvY19oYXNoKG9wdHMsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoaGFzaF90Zm0pKSB7CiAJCXRpLT5lcnJvciA9ICJFcnJvciBpbml0aWFsaXppbmcgRVNTSVYgaGFzaCI7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gUFRSX0VSUihoYXNoX3RmbSk7CiAJfQogCi0JaWYgKGNyeXB0b190Zm1fYWxnX3R5cGUoaGFzaF90Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpIHsKLQkJdGktPmVycm9yID0gIkV4cGVjdGVkIGRpZ2VzdCBhbGdvcml0aG0gZm9yIEVTU0lWIGhhc2giOwotCQljcnlwdG9fZnJlZV90Zm0oaGFzaF90Zm0pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzYWx0c2l6ZSA9IGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUoaGFzaF90Zm0pOworCXNhbHRzaXplID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoX3RmbSk7CiAJc2FsdCA9IGttYWxsb2Moc2FsdHNpemUsIEdGUF9LRVJORUwpOwogCWlmIChzYWx0ID09IE5VTEwpIHsKIAkJdGktPmVycm9yID0gIkVycm9yIGttYWxsb2Npbmcgc2FsdCBzdG9yYWdlIGluIEVTU0lWIjsKLQkJY3J5cHRvX2ZyZWVfdGZtKGhhc2hfdGZtKTsKKwkJY3J5cHRvX2ZyZWVfaGFzaChoYXNoX3RmbSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXNnX3NldF9idWYoJnNnLCBjYy0+a2V5LCBjYy0+a2V5X3NpemUpOwotCWNyeXB0b19kaWdlc3RfZGlnZXN0KGhhc2hfdGZtLCAmc2csIDEsIHNhbHQpOwotCWNyeXB0b19mcmVlX3RmbShoYXNoX3RmbSk7CisJZGVzYy50Zm0gPSBoYXNoX3RmbTsKKwlkZXNjLmZsYWdzID0gQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQOworCWVyciA9IGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnNnLCBjYy0+a2V5X3NpemUsIHNhbHQpOworCWNyeXB0b19mcmVlX2hhc2goaGFzaF90Zm0pOworCisJaWYgKGVycikgeworCQl0aS0+ZXJyb3IgPSAiRXJyb3IgY2FsY3VsYXRpbmcgaGFzaCBpbiBFU1NJViI7CisJCXJldHVybiBlcnI7CisJfQogCiAJLyogU2V0dXAgdGhlIGVzc2l2X3RmbSB3aXRoIHRoZSBnaXZlbiBzYWx0ICovCi0JZXNzaXZfdGZtID0gY3J5cHRvX2FsbG9jX3RmbShjcnlwdG9fdGZtX2FsZ19uYW1lKGNjLT50Zm0pLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1JZUFRPX1RGTV9NT0RFX0VDQiB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVApOwotCWlmIChlc3Npdl90Zm0gPT0gTlVMTCkgeworCWVzc2l2X3RmbSA9IGNyeXB0b19hbGxvY19jaXBoZXIoY2MtPmNpcGhlciwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihlc3Npdl90Zm0pKSB7CiAJCXRpLT5lcnJvciA9ICJFcnJvciBhbGxvY2F0aW5nIGNyeXB0byB0Zm0gZm9yIEVTU0lWIjsKIAkJa2ZyZWUoc2FsdCk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gUFRSX0VSUihlc3Npdl90Zm0pOwogCX0KLQlpZiAoY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGVzc2l2X3RmbSkKLQkgICAgIT0gY3J5cHRvX3RmbV9hbGdfaXZzaXplKGNjLT50Zm0pKSB7CisJaWYgKGNyeXB0b19jaXBoZXJfYmxvY2tzaXplKGVzc2l2X3RmbSkgIT0KKwkgICAgY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUoY2MtPnRmbSkpIHsKIAkJdGktPmVycm9yID0gIkJsb2NrIHNpemUgb2YgRVNTSVYgY2lwaGVyIGRvZXMgIgogCQkJICAgICAgICAibm90IG1hdGNoIElWIHNpemUgb2YgYmxvY2sgY2lwaGVyIjsKLQkJY3J5cHRvX2ZyZWVfdGZtKGVzc2l2X3RmbSk7CisJCWNyeXB0b19mcmVlX2NpcGhlcihlc3Npdl90Zm0pOwogCQlrZnJlZShzYWx0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmIChjcnlwdG9fY2lwaGVyX3NldGtleShlc3Npdl90Zm0sIHNhbHQsIHNhbHRzaXplKSA8IDApIHsKKwllcnIgPSBjcnlwdG9fY2lwaGVyX3NldGtleShlc3Npdl90Zm0sIHNhbHQsIHNhbHRzaXplKTsKKwlpZiAoZXJyKSB7CiAJCXRpLT5lcnJvciA9ICJGYWlsZWQgdG8gc2V0IGtleSBmb3IgRVNTSVYgY2lwaGVyIjsKLQkJY3J5cHRvX2ZyZWVfdGZtKGVzc2l2X3RmbSk7CisJCWNyeXB0b19mcmVlX2NpcGhlcihlc3Npdl90Zm0pOwogCQlrZnJlZShzYWx0KTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnI7CiAJfQogCWtmcmVlKHNhbHQpOwogCi0JY2MtPml2X2dlbl9wcml2YXRlID0gKHZvaWQgKillc3Npdl90Zm07CisJY2MtPml2X2dlbl9wcml2YXRlID0gZXNzaXZfdGZtOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBjcnlwdF9pdl9lc3Npdl9kdHIoc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MpCiB7Ci0JY3J5cHRvX2ZyZWVfdGZtKChzdHJ1Y3QgY3J5cHRvX3RmbSAqKWNjLT5pdl9nZW5fcHJpdmF0ZSk7CisJY3J5cHRvX2ZyZWVfY2lwaGVyKGNjLT5pdl9nZW5fcHJpdmF0ZSk7CiAJY2MtPml2X2dlbl9wcml2YXRlID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBjcnlwdF9pdl9lc3Npdl9nZW4oc3RydWN0IGNyeXB0X2NvbmZpZyAqY2MsIHU4ICppdiwgc2VjdG9yX3Qgc2VjdG9yKQogewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQogCW1lbXNldChpdiwgMCwgY2MtPml2X3NpemUpOwogCSoodTY0ICopaXYgPSBjcHVfdG9fbGU2NChzZWN0b3IpOwotCi0Jc2dfc2V0X2J1Zigmc2csIGl2LCBjYy0+aXZfc2l6ZSk7Ci0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0KChzdHJ1Y3QgY3J5cHRvX3RmbSAqKWNjLT5pdl9nZW5fcHJpdmF0ZSwKLQkgICAgICAgICAgICAgICAgICAgICAgJnNnLCAmc2csIGNjLT5pdl9zaXplKTsKLQorCWNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoY2MtPml2X2dlbl9wcml2YXRlLCBpdiwgaXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yMjAsNiArMjE5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB3cml0ZSwgc2VjdG9yX3Qgc2VjdG9yKQogewogCXU4IGl2W2NjLT5pdl9zaXplXTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYyA9IHsKKwkJLnRmbSA9IGNjLT50Zm0sCisJCS5pbmZvID0gaXYsCisJCS5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUCwKKwl9OwogCWludCByOwogCiAJaWYgKGNjLT5pdl9nZW5fb3BzKSB7CkBAIC0yMjgsMTQgKzIzMiwxNCBAQAogCQkJcmV0dXJuIHI7CiAKIAkJaWYgKHdyaXRlKQotCQkJciA9IGNyeXB0b19jaXBoZXJfZW5jcnlwdF9pdihjYy0+dGZtLCBvdXQsIGluLCBsZW5ndGgsIGl2KTsKKwkJCXIgPSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHRfaXYoJmRlc2MsIG91dCwgaW4sIGxlbmd0aCk7CiAJCWVsc2UKLQkJCXIgPSBjcnlwdG9fY2lwaGVyX2RlY3J5cHRfaXYoY2MtPnRmbSwgb3V0LCBpbiwgbGVuZ3RoLCBpdik7CisJCQlyID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0X2l2KCZkZXNjLCBvdXQsIGluLCBsZW5ndGgpOwogCX0gZWxzZSB7CiAJCWlmICh3cml0ZSkKLQkJCXIgPSBjcnlwdG9fY2lwaGVyX2VuY3J5cHQoY2MtPnRmbSwgb3V0LCBpbiwgbGVuZ3RoKTsKKwkJCXIgPSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsIG91dCwgaW4sIGxlbmd0aCk7CiAJCWVsc2UKLQkJCXIgPSBjcnlwdG9fY2lwaGVyX2RlY3J5cHQoY2MtPnRmbSwgb3V0LCBpbiwgbGVuZ3RoKTsKKwkJCXIgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsIG91dCwgaW4sIGxlbmd0aCk7CiAJfQogCiAJcmV0dXJuIHI7CkBAIC01MTAsMTMgKzUxNCwxMiBAQAogc3RhdGljIGludCBjcnlwdF9jdHIoc3RydWN0IGRtX3RhcmdldCAqdGksIHVuc2lnbmVkIGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlzdHJ1Y3QgY3J5cHRfY29uZmlnICpjYzsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm07CiAJY2hhciAqdG1wOwogCWNoYXIgKmNpcGhlcjsKIAljaGFyICpjaGFpbm1vZGU7CiAJY2hhciAqaXZtb2RlOwogCWNoYXIgKml2b3B0czsKLQl1bnNpZ25lZCBpbnQgY3J5cHRvX2ZsYWdzOwogCXVuc2lnbmVkIGludCBrZXlfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdG1wbGw7CiAKQEAgLTU1NiwzMSArNTU5LDI1IEBACiAJCWl2bW9kZSA9ICJwbGFpbiI7CiAJfQogCi0JLyogQ2hvb3NlIGNyeXB0b19mbGFncyBhY2NvcmRpbmcgdG8gY2hhaW5tb2RlICovCi0JaWYgKHN0cmNtcChjaGFpbm1vZGUsICJjYmMiKSA9PSAwKQotCQljcnlwdG9fZmxhZ3MgPSBDUllQVE9fVEZNX01PREVfQ0JDOwotCWVsc2UgaWYgKHN0cmNtcChjaGFpbm1vZGUsICJlY2IiKSA9PSAwKQotCQljcnlwdG9fZmxhZ3MgPSBDUllQVE9fVEZNX01PREVfRUNCOwotCWVsc2UgewotCQl0aS0+ZXJyb3IgPSAiVW5rbm93biBjaGFpbmluZyBtb2RlIjsKLQkJZ290byBiYWQxOwotCX0KLQotCWlmIChjcnlwdG9fZmxhZ3MgIT0gQ1JZUFRPX1RGTV9NT0RFX0VDQiAmJiAhaXZtb2RlKSB7CisJaWYgKHN0cmNtcChjaGFpbm1vZGUsICJlY2IiKSAmJiAhaXZtb2RlKSB7CiAJCXRpLT5lcnJvciA9ICJUaGlzIGNoYWluaW5nIG1vZGUgcmVxdWlyZXMgYW4gSVYgbWVjaGFuaXNtIjsKIAkJZ290byBiYWQxOwogCX0KIAotCXRmbSA9IGNyeXB0b19hbGxvY190Zm0oY2lwaGVyLCBjcnlwdG9fZmxhZ3MgfCBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVApOwotCWlmICghdGZtKSB7CisJaWYgKHNucHJpbnRmKGNjLT5jaXBoZXIsIENSWVBUT19NQVhfQUxHX05BTUUsICIlcyglcykiLCBjaGFpbm1vZGUsIAorCQkgICAgIGNpcGhlcikgPj0gQ1JZUFRPX01BWF9BTEdfTkFNRSkgeworCQl0aS0+ZXJyb3IgPSAiQ2hhaW4gbW9kZSArIGNpcGhlciBuYW1lIGlzIHRvbyBsb25nIjsKKwkJZ290byBiYWQxOworCX0KKworCXRmbSA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoY2MtPmNpcGhlciwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUih0Zm0pKSB7CiAJCXRpLT5lcnJvciA9ICJFcnJvciBhbGxvY2F0aW5nIGNyeXB0byB0Zm0iOwogCQlnb3RvIGJhZDE7CiAJfQotCWlmIChjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUikgewotCQl0aS0+ZXJyb3IgPSAiRXhwZWN0ZWQgY2lwaGVyIGFsZ29yaXRobSI7Ci0JCWdvdG8gYmFkMjsKLQl9CiAKKwlzdHJjcHkoY2MtPmNpcGhlciwgY2lwaGVyKTsKKwlzdHJjcHkoY2MtPmNoYWlubW9kZSwgY2hhaW5tb2RlKTsKIAljYy0+dGZtID0gdGZtOwogCiAJLyoKQEAgLTYwMywxMiArNjAwLDEyIEBACiAJICAgIGNjLT5pdl9nZW5fb3BzLT5jdHIoY2MsIHRpLCBpdm9wdHMpIDwgMCkKIAkJZ290byBiYWQyOwogCi0JaWYgKHRmbS0+Y3J0X2NpcGhlci5jaXRfZGVjcnlwdF9pdiAmJiB0Zm0tPmNydF9jaXBoZXIuY2l0X2VuY3J5cHRfaXYpCisJY2MtPml2X3NpemUgPSBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pOworCWlmIChjYy0+aXZfc2l6ZSkKIAkJLyogYXQgbGVhc3QgYSA2NCBiaXQgc2VjdG9yIG51bWJlciBzaG91bGQgZml0IGluIG91ciBidWZmZXIgKi8KLQkJY2MtPml2X3NpemUgPSBtYXgoY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSksCisJCWNjLT5pdl9zaXplID0gbWF4KGNjLT5pdl9zaXplLAogCQkgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KShzaXplb2YodTY0KSAvIHNpemVvZih1OCkpKTsKIAllbHNlIHsKLQkJY2MtPml2X3NpemUgPSAwOwogCQlpZiAoY2MtPml2X2dlbl9vcHMpIHsKIAkJCURNV0FSTigiU2VsZWN0ZWQgY2lwaGVyIGRvZXMgbm90IHN1cHBvcnQgSVZzIik7CiAJCQlpZiAoY2MtPml2X2dlbl9vcHMtPmR0cikKQEAgLTYyOSw3ICs2MjYsNyBAQAogCQlnb3RvIGJhZDQ7CiAJfQogCi0JaWYgKHRmbS0+Y3J0X2NpcGhlci5jaXRfc2V0a2V5KHRmbSwgY2MtPmtleSwga2V5X3NpemUpIDwgMCkgeworCWlmIChjcnlwdG9fYmxrY2lwaGVyX3NldGtleSh0Zm0sIGNjLT5rZXksIGtleV9zaXplKSA8IDApIHsKIAkJdGktPmVycm9yID0gIkVycm9yIHNldHRpbmcga2V5IjsKIAkJZ290byBiYWQ1OwogCX0KQEAgLTY3NSw3ICs2NzIsNyBAQAogCWlmIChjYy0+aXZfZ2VuX29wcyAmJiBjYy0+aXZfZ2VuX29wcy0+ZHRyKQogCQljYy0+aXZfZ2VuX29wcy0+ZHRyKGNjKTsKIGJhZDI6Ci0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHRmbSk7CiBiYWQxOgogCS8qIE11c3QgemVybyBrZXkgbWF0ZXJpYWwgYmVmb3JlIGZyZWVpbmcgKi8KIAltZW1zZXQoY2MsIDAsIHNpemVvZigqY2MpICsgY2MtPmtleV9zaXplICogc2l6ZW9mKHU4KSk7CkBAIC02OTMsNyArNjkwLDcgQEAKIAlrZnJlZShjYy0+aXZfbW9kZSk7CiAJaWYgKGNjLT5pdl9nZW5fb3BzICYmIGNjLT5pdl9nZW5fb3BzLT5kdHIpCiAJCWNjLT5pdl9nZW5fb3BzLT5kdHIoY2MpOwotCWNyeXB0b19mcmVlX3RmbShjYy0+dGZtKTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY2MtPnRmbSk7CiAJZG1fcHV0X2RldmljZSh0aSwgY2MtPmRldik7CiAKIAkvKiBNdXN0IHplcm8ga2V5IG1hdGVyaWFsIGJlZm9yZSBmcmVlaW5nICovCkBAIC04NTgsMTggKzg1NSw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBTVEFUVVNUWVBFX1RBQkxFOgotCQljaXBoZXIgPSBjcnlwdG9fdGZtX2FsZ19uYW1lKGNjLT50Zm0pOworCQljaXBoZXIgPSBjcnlwdG9fYmxrY2lwaGVyX25hbWUoY2MtPnRmbSk7CiAKLQkJc3dpdGNoKGNjLT50Zm0tPmNydF9jaXBoZXIuY2l0X21vZGUpIHsKLQkJY2FzZSBDUllQVE9fVEZNX01PREVfQ0JDOgotCQkJY2hhaW5tb2RlID0gImNiYyI7Ci0JCQlicmVhazsKLQkJY2FzZSBDUllQVE9fVEZNX01PREVfRUNCOgotCQkJY2hhaW5tb2RlID0gImVjYiI7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCUJVRygpOwotCQl9CisJCWNoYWlubW9kZSA9IGNjLT5jaGFpbm1vZGU7CiAKIAkJaWYgKGNjLT5pdl9tb2RlKQogCQkJRE1FTUlUKCIlcy0lcy0lcyAiLCBjaXBoZXIsIGNoYWlubW9kZSwgY2MtPml2X21vZGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jIGIvZHJpdmVycy9tZC9kbS1tcGF0aC5jCmluZGV4IDIxNzYxNWIuLjkzZjcwMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbXBhdGguYworKysgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKQEAgLTcxMCw2ICs3MTAsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltLT50aSA9IHRpOworCiAJciA9IHBhcnNlX2ZlYXR1cmVzKCZhcywgbSwgdGkpOwogCWlmIChyKQogCQlnb3RvIGJhZDsKQEAgLTc1MSw3ICs3NTMsNiBAQAogCX0KIAogCXRpLT5wcml2YXRlID0gbTsKLQltLT50aSA9IHRpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYyBiL2RyaXZlcnMvbWQvZG0tcmFpZDEuYwppbmRleCBiZTQ4Y2VkLi5jNTRkZTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXJhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCkBAIC0yNTUsNyArMjU1LDkgQEAKIAlzdHJ1Y3QgcmVnaW9uICpyZWcsICpucmVnOwogCiAJcmVhZF91bmxvY2soJnJoLT5oYXNoX2xvY2spOwotCW5yZWcgPSBtZW1wb29sX2FsbG9jKHJoLT5yZWdpb25fcG9vbCwgR0ZQX05PSU8pOworCW5yZWcgPSBtZW1wb29sX2FsbG9jKHJoLT5yZWdpb25fcG9vbCwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFucmVnKSkKKwkJbnJlZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWdpb24pLCBHRlBfTk9JTyk7CiAJbnJlZy0+c3RhdGUgPSByaC0+bG9nLT50eXBlLT5pbl9zeW5jKHJoLT5sb2csIHJlZ2lvbiwgMSkgPwogCQlSSF9DTEVBTiA6IFJIX05PU1lOQzsKIAlucmVnLT5yaCA9IHJoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9saW5lYXIuYyBiL2RyaXZlcnMvbWQvbGluZWFyLmMKaW5kZXggZmY4M2M5Yi4uYjk5YzE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9saW5lYXIuYworKysgYi9kcml2ZXJzL21kL2xpbmVhci5jCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JbWluX3NwYWNpbmcgPSBtZGRldi0+YXJyYXlfc2l6ZTsKKwltaW5fc3BhY2luZyA9IGNvbmYtPmFycmF5X3NpemU7CiAJc2VjdG9yX2RpdihtaW5fc3BhY2luZywgUEFHRV9TSVpFL3NpemVvZihzdHJ1Y3QgZGV2X2luZm8gKikpOwogCiAJLyogbWluX3NwYWNpbmcgaXMgdGhlIG1pbmltdW0gc3BhY2luZyB0aGF0IHdpbGwgZml0IHRoZSBoYXNoCkBAIC0xNzEsNyArMTcxLDcgQEAKIAkgKiB0aGF0IGlzIGxhcmdlciB0aGFuIG1pbl9zcGFjaW5nIGFzIHVzZSB0aGUgc2l6ZSBvZiB0aGF0IGFzCiAJICogdGhlIGFjdHVhbCBzcGFjaW5nCiAJICovCi0JY29uZi0+aGFzaF9zcGFjaW5nID0gbWRkZXYtPmFycmF5X3NpemU7CisJY29uZi0+aGFzaF9zcGFjaW5nID0gY29uZi0+YXJyYXlfc2l6ZTsKIAlmb3IgKGk9MDsgaSA8IGNudC0xIDsgaSsrKSB7CiAJCXNlY3Rvcl90IHN6ID0gMDsKIAkJaW50IGo7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAljdXJyX29mZnNldCA9IDA7CiAJaSA9IDA7CiAJZm9yIChjdXJyX29mZnNldCA9IDA7Ci0JICAgICBjdXJyX29mZnNldCA8IG1kZGV2LT5hcnJheV9zaXplOworCSAgICAgY3Vycl9vZmZzZXQgPCBjb25mLT5hcnJheV9zaXplOwogCSAgICAgY3Vycl9vZmZzZXQgKz0gY29uZi0+aGFzaF9zcGFjaW5nKSB7CiAKIAkJd2hpbGUgKGkgPCBtZGRldi0+cmFpZF9kaXNrcy0xICYmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL21kLmMgYi9kcml2ZXJzL21kL21kLmMKaW5kZXggYjZkMTYwMi4uOGRiYWIyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9tZC5jCisrKyBiL2RyaXZlcnMvbWQvbWQuYwpAQCAtMTU5Nyw2ICsxNTk3LDE5IEBACiAKIHJlcGVhdDoKIAlzcGluX2xvY2tfaXJxKCZtZGRldi0+d3JpdGVfbG9jayk7CisKKwlpZiAobWRkZXYtPmRlZ3JhZGVkICYmIG1kZGV2LT5zYl9kaXJ0eSA9PSAzKQorCQkvKiBJZiB0aGUgYXJyYXkgaXMgZGVncmFkZWQsIHRoZW4gc2tpcHBpbmcgc3BhcmVzIGlzIGJvdGgKKwkJICogZGFuZ2Vyb3VzIGFuZCBmYWlybHkgcG9pbnRsZXNzLgorCQkgKiBEYW5nZXJvdXMgYmVjYXVzZSBhIGRldmljZSB0aGF0IHdhcyByZW1vdmVkIGZyb20gdGhlIGFycmF5CisJCSAqIG1pZ2h0IGhhdmUgYSBldmVudF9jb3VudCB0aGF0IHN0aWxsIGxvb2tzIHVwLXRvLWRhdGUsCisJCSAqIHNvIGl0IGNhbiBiZSByZS1hZGRlZCB3aXRob3V0IGEgcmVzeW5jLgorCQkgKiBQb2ludGxlc3MgYmVjYXVzZSBpZiB0aGVyZSBhcmUgYW55IHNwYXJlcyB0byBza2lwLAorCQkgKiB0aGVuIGEgcmVjb3Zlcnkgd2lsbCBoYXBwZW4gYW5kIHNvb24gdGhhdCBhcnJheSB3b24ndAorCQkgKiBiZSBkZWdyYWRlZCBhbnkgbW9yZSBhbmQgdGhlIHNwYXJlIGNhbiBnbyBiYWNrIHRvIHNsZWVwIHRoZW4uCisJCSAqLworCQltZGRldi0+c2JfZGlydHkgPSAxOworCiAJc3luY19yZXEgPSBtZGRldi0+aW5fc3luYzsKIAltZGRldi0+dXRpbWUgPSBnZXRfc2Vjb25kcygpOwogCWlmIChtZGRldi0+c2JfZGlydHkgPT0gMykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDEuYyBiL2RyaXZlcnMvbWQvcmFpZDEuYwppbmRleCAxZWZlMjJhLi4zYjRkNjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQxLmMKKysrIGIvZHJpdmVycy9tZC9yYWlkMS5jCkBAIC05MzAsMTAgKzkzMCwxMyBAQAogCiAJc2VxX3ByaW50ZihzZXEsICIgWyVkLyVkXSBbIiwgY29uZi0+cmFpZF9kaXNrcywKIAkJCQkJCWNvbmYtPndvcmtpbmdfZGlza3MpOwotCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspCisJcmN1X3JlYWRfbG9jaygpOworCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOwogCQlzZXFfcHJpbnRmKHNlcSwgIiVzIiwKLQkJCSAgICAgIGNvbmYtPm1pcnJvcnNbaV0ucmRldiAmJgotCQkJICAgICAgdGVzdF9iaXQoSW5fc3luYywgJmNvbmYtPm1pcnJvcnNbaV0ucmRldi0+ZmxhZ3MpID8gIlUiIDogIl8iKTsKKwkJCSAgIHJkZXYgJiYgdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSA/ICJVIiA6ICJfIik7CisJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCXNlcV9wcmludGYoc2VxLCAiXSIpOwogfQogCkBAIC05NzUsNyArOTc4LDYgQEAKIHN0YXRpYyB2b2lkIHByaW50X2NvbmYoY29uZl90ICpjb25mKQogewogCWludCBpOwotCW1pcnJvcl9pbmZvX3QgKnRtcDsKIAogCXByaW50aygiUkFJRDEgY29uZiBwcmludG91dDpcbiIpOwogCWlmICghY29uZikgewpAQCAtOTg1LDE0ICs5ODcsMTcgQEAKIAlwcmludGsoIiAtLS0gd2Q6JWQgcmQ6JWRcbiIsIGNvbmYtPndvcmtpbmdfZGlza3MsCiAJCWNvbmYtPnJhaWRfZGlza3MpOwogCisJcmN1X3JlYWRfbG9jaygpOwogCWZvciAoaSA9IDA7IGkgPCBjb25mLT5yYWlkX2Rpc2tzOyBpKyspIHsKIAkJY2hhciBiW0JERVZOQU1FX1NJWkVdOwotCQl0bXAgPSBjb25mLT5taXJyb3JzICsgaTsKLQkJaWYgKHRtcC0+cmRldikKKwkJbWRrX3JkZXZfdCAqcmRldiA9IHJjdV9kZXJlZmVyZW5jZShjb25mLT5taXJyb3JzW2ldLnJkZXYpOworCQlpZiAocmRldikKIAkJCXByaW50aygiIGRpc2sgJWQsIHdvOiVkLCBvOiVkLCBkZXY6JXNcbiIsCi0JCQkJaSwgIXRlc3RfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKSwgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpLAotCQkJCWJkZXZuYW1lKHRtcC0+cmRldi0+YmRldixiKSk7CisJCQkgICAgICAgaSwgIXRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncyksCisJCQkgICAgICAgIXRlc3RfYml0KEZhdWx0eSwgJnJkZXYtPmZsYWdzKSwKKwkJCSAgICAgICBiZGV2bmFtZShyZGV2LT5iZGV2LGIpKTsKIAl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNsb3NlX3N5bmMoY29uZl90ICpjb25mKQpAQCAtMTAwOCwyMCArMTAxMywyMCBAQAogewogCWludCBpOwogCWNvbmZfdCAqY29uZiA9IG1kZGV2LT5wcml2YXRlOwotCW1pcnJvcl9pbmZvX3QgKnRtcDsKIAogCS8qCiAJICogRmluZCBhbGwgZmFpbGVkIGRpc2tzIHdpdGhpbiB0aGUgUkFJRDEgY29uZmlndXJhdGlvbiAKLQkgKiBhbmQgbWFyayB0aGVtIHJlYWRhYmxlCisJICogYW5kIG1hcmsgdGhlbSByZWFkYWJsZS4KKwkgKiBDYWxsZWQgdW5kZXIgbWRkZXYgbG9jaywgc28gcmN1IHByb3RlY3Rpb24gbm90IG5lZWRlZC4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgY29uZi0+cmFpZF9kaXNrczsgaSsrKSB7Ci0JCXRtcCA9IGNvbmYtPm1pcnJvcnMgKyBpOwotCQlpZiAodG1wLT5yZGV2IAotCQkgICAgJiYgIXRlc3RfYml0KEZhdWx0eSwgJnRtcC0+cmRldi0+ZmxhZ3MpCi0JCSAgICAmJiAhdGVzdF9iaXQoSW5fc3luYywgJnRtcC0+cmRldi0+ZmxhZ3MpKSB7CisJCW1ka19yZGV2X3QgKnJkZXYgPSBjb25mLT5taXJyb3JzW2ldLnJkZXY7CisJCWlmIChyZGV2CisJCSAgICAmJiAhdGVzdF9iaXQoRmF1bHR5LCAmcmRldi0+ZmxhZ3MpCisJCSAgICAmJiAhdGVzdF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKSkgewogCQkJY29uZi0+d29ya2luZ19kaXNrcysrOwogCQkJbWRkZXYtPmRlZ3JhZGVkLS07Ci0JCQlzZXRfYml0KEluX3N5bmMsICZ0bXAtPnJkZXYtPmZsYWdzKTsKKwkJCXNldF9iaXQoSW5fc3luYywgJnJkZXYtPmZsYWdzKTsKIAkJfQogCX0KIApAQCAtMTIzNyw3ICsxMjQyLDcgQEAKIAkJLyogb3VjaCAtIGZhaWxlZCB0byByZWFkIGFsbCBvZiB0aGF0LgogCQkgKiBUcnkgc29tZSBzeW5jaHJvbm91cyByZWFkcyBvZiBvdGhlciBkZXZpY2VzIHRvIGdldAogCQkgKiBnb29kIGRhdGEsIG11Y2ggbGlrZSB3aXRoIG5vcm1hbCByZWFkIGVycm9ycy4gIE9ubHkKLQkJICogcmVhZCBpbnRvIHRoZSBwYWdlcyB3ZSBhbHJlYWR5IGhhdmUgc28gdGhleSB3ZSBkb24ndAorCQkgKiByZWFkIGludG8gdGhlIHBhZ2VzIHdlIGFscmVhZHkgaGF2ZSBzbyB3ZSBkb24ndAogCQkgKiBuZWVkIHRvIHJlLWlzc3VlIHRoZSByZWFkIHJlcXVlc3QuCiAJCSAqIFdlIGRvbid0IG5lZWQgdG8gZnJlZXplIHRoZSBhcnJheSwgYmVjYXVzZSBiZWluZyBpbiBhbgogCQkgKiBhY3RpdmUgc3luYyByZXF1ZXN0LCB0aGVyZSBpcyBubyBub3JtYWwgSU8sIGFuZApAQCAtMTI1Nyw2ICsxMjYyLDEwIEBACiAJCQkJcyA9IFBBR0VfU0laRSA+PiA5OwogCQkJZG8gewogCQkJCWlmIChyMV9iaW8tPmJpb3NbZF0tPmJpX2VuZF9pbyA9PSBlbmRfc3luY19yZWFkKSB7CisJCQkJCS8qIE5vIHJjdSBwcm90ZWN0aW9uIG5lZWRlZCBoZXJlIGRldmljZXMKKwkJCQkJICogY2FuIG9ubHkgYmUgcmVtb3ZlZCB3aGVuIG5vIHJlc3luYyBpcworCQkJCQkgKiBhY3RpdmUsIGFuZCByZXN5bmMgaXMgY3VycmVudGx5IGFjdGl2ZQorCQkJCQkgKi8KIAkJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKIAkJCQkJaWYgKHN5bmNfcGFnZV9pbyhyZGV2LT5iZGV2LAogCQkJCQkJCSBzZWN0ICsgcmRldi0+ZGF0YV9vZmZzZXQsCkBAIC0xNDYzLDYgKzE0NzIsMTEgQEAKIAkJCQkJcyA9IFBBR0VfU0laRSA+PiA5OwogCiAJCQkJZG8geworCQkJCQkvKiBOb3RlOiBubyByY3UgcHJvdGVjdGlvbiBuZWVkZWQgaGVyZQorCQkJCQkgKiBhcyB0aGlzIGlzIHN5bmNocm9ub3VzIGluIHRoZSByYWlkMWQgdGhyZWFkCisJCQkJCSAqIHdoaWNoIGlzIHRoZSB0aHJlYWQgdGhhdCBtaWdodCByZW1vdmUKKwkJCQkJICogYSBkZXZpY2UuICBJZiByYWlkMWQgZXZlciBiZWNvbWVzIG11bHRpLXRocmVhZGVkLi4uLgorCQkJCQkgKi8KIAkJCQkJcmRldiA9IGNvbmYtPm1pcnJvcnNbZF0ucmRldjsKIAkJCQkJaWYgKHJkZXYgJiYKIAkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykgJiYKQEAgLTE0ODYsNyArMTUwMCw2IEBACiAJCQkJCQkJZCA9IGNvbmYtPnJhaWRfZGlza3M7CiAJCQkJCQlkLS07CiAJCQkJCQlyZGV2ID0gY29uZi0+bWlycm9yc1tkXS5yZGV2OwotCQkJCQkJYXRvbWljX2FkZChzLCAmcmRldi0+Y29ycmVjdGVkX2Vycm9ycyk7CiAJCQkJCQlpZiAocmRldiAmJgogCQkJCQkJICAgIHRlc3RfYml0KEluX3N5bmMsICZyZGV2LT5mbGFncykpIHsKIAkJCQkJCQlpZiAoc3luY19wYWdlX2lvKHJkZXYtPmJkZXYsCkBAIC0xNTA5LDkgKzE1MjIsMTEgQEAKIAkJCQkJCQkJCSBzPDw5LCBjb25mLT50bXBwYWdlLCBSRUFEKSA9PSAwKQogCQkJCQkJCQkvKiBXZWxsLCB0aGlzIGRldmljZSBpcyBkZWFkICovCiAJCQkJCQkJCW1kX2Vycm9yKG1kZGV2LCByZGV2KTsKLQkJCQkJCQllbHNlCisJCQkJCQkJZWxzZSB7CisJCQkJCQkJCWF0b21pY19hZGQocywgJnJkZXYtPmNvcnJlY3RlZF9lcnJvcnMpOwogCQkJCQkJCQlwcmludGsoS0VSTl9JTkZPICJyYWlkMTolczogcmVhZCBlcnJvciBjb3JyZWN0ZWQgKCVkIHNlY3RvcnMgYXQgJWxsdSBvbiAlcylcbiIsCiAJCQkJCQkJCSAgICAgICBtZG5hbWUobWRkZXYpLCBzLCAodW5zaWduZWQgbG9uZyBsb25nKShzZWN0ICsgcmRldi0+ZGF0YV9vZmZzZXQpLCBiZGV2bmFtZShyZGV2LT5iZGV2LCBiKSk7CisJCQkJCQkJfQogCQkJCQkJfQogCQkJCQl9CiAJCQkJfSBlbHNlIHsKQEAgLTE2MjUsMTUgKzE2NDAsMTYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogYmVmb3JlIGJ1aWxkaW5nIGEgcmVxdWVzdCwgY2hlY2sgaWYgd2UgY2FuIHNraXAgdGhlc2UgYmxvY2tzLi4KLQkgKiBUaGlzIGNhbGwgdGhlIGJpdG1hcF9zdGFydF9zeW5jIGRvZXNuJ3QgYWN0dWFsbHkgcmVjb3JkIGFueXRoaW5nCi0JICovCiAJaWYgKG1kZGV2LT5iaXRtYXAgPT0gTlVMTCAmJgogCSAgICBtZGRldi0+cmVjb3ZlcnlfY3AgPT0gTWF4U2VjdG9yICYmCisJICAgICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpICYmCiAJICAgIGNvbmYtPmZ1bGxzeW5jID09IDApIHsKIAkJKnNraXBwZWQgPSAxOwogCQlyZXR1cm4gbWF4X3NlY3RvciAtIHNlY3Rvcl9ucjsKIAl9CisJLyogYmVmb3JlIGJ1aWxkaW5nIGEgcmVxdWVzdCwgY2hlY2sgaWYgd2UgY2FuIHNraXAgdGhlc2UgYmxvY2tzLi4KKwkgKiBUaGlzIGNhbGwgdGhlIGJpdG1hcF9zdGFydF9zeW5jIGRvZXNuJ3QgYWN0dWFsbHkgcmVjb3JkIGFueXRoaW5nCisJICovCiAJaWYgKCFiaXRtYXBfc3RhcnRfc3luYyhtZGRldi0+Yml0bWFwLCBzZWN0b3JfbnIsICZzeW5jX2Jsb2NrcywgMSkgJiYKIAkgICAgIWNvbmYtPmZ1bGxzeW5jICYmICF0ZXN0X2JpdChNRF9SRUNPVkVSWV9SRVFVRVNURUQsICZtZGRldi0+cmVjb3ZlcnkpKSB7CiAJCS8qIFdlIGNhbiBza2lwIHRoaXMgYmxvY2ssIGFuZCBwcm9iYWJseSBzZXZlcmFsIG1vcmUgKi8KQEAgLTE3ODYsMTkgKzE4MDIsMTcgQEAKIAkJZm9yIChpPTA7IGk8Y29uZi0+cmFpZF9kaXNrczsgaSsrKSB7CiAJCQliaW8gPSByMV9iaW8tPmJpb3NbaV07CiAJCQlpZiAoYmlvLT5iaV9lbmRfaW8gPT0gZW5kX3N5bmNfcmVhZCkgewotCQkJCW1kX3N5bmNfYWNjdChjb25mLT5taXJyb3JzW2ldLnJkZXYtPmJkZXYsIG5yX3NlY3RvcnMpOworCQkJCW1kX3N5bmNfYWNjdChiaW8tPmJpX2JkZXYsIG5yX3NlY3RvcnMpOwogCQkJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlhdG9taWNfc2V0KCZyMV9iaW8tPnJlbWFpbmluZywgMSk7CiAJCWJpbyA9IHIxX2Jpby0+Ymlvc1tyMV9iaW8tPnJlYWRfZGlza107Ci0JCW1kX3N5bmNfYWNjdChjb25mLT5taXJyb3JzW3IxX2Jpby0+cmVhZF9kaXNrXS5yZGV2LT5iZGV2LAotCQkJICAgICBucl9zZWN0b3JzKTsKKwkJbWRfc3luY19hY2N0KGJpby0+YmlfYmRldiwgbnJfc2VjdG9ycyk7CiAJCWdlbmVyaWNfbWFrZV9yZXF1ZXN0KGJpbyk7CiAKIAl9Ci0KIAlyZXR1cm4gbnJfc2VjdG9yczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCmluZGV4IGVmNTJlNmQuLmVkNGFhNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL0tjb25maWcKQEAgLTUzLDcgKzUzLDcgQEAKIAkgIElmIHlvdSBhcmUgdW5zdXJlIGFzIHRvIHdoZXRoZXIgdGhpcyBpcyByZXF1aXJlZCwgYW5zd2VyIFkuCiAKIGNvbmZpZyBWSURFT19WNEwyCi0JdHJpc3RhdGUKKwlib29sCiAJZGVmYXVsdCB5CiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCmluZGV4IDgzOTNkNDcuLjdlMGNlZGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCkBAIC0xMTkwLDYgKzExOTAsNyBAQAogCQl9CiAJCXJldHVybiBlcnI7CiAJfQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCWNhc2UgVklESU9DR01CVUY6CiAJewogCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKQEAgLTEyMTgsNiArMTIxOSw3IEBACiAJCW11dGV4X3VubG9jaygmcS0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KKyNlbmRpZgogCWRlZmF1bHQ6CiAJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCiAJCQkJCQkgIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCmluZGV4IGQ3ZjFmZDUuLjQ5YTA2ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgRFZCX0IyQzJfRkxFWENPUAogCXRyaXN0YXRlICJUZWNobmlzYXQvQjJDMiBGbGV4Q29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlzZWxlY3QgRFZCX1BMTAogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfTVQzNTIKIAlzZWxlY3QgRFZCX01UMzEyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwppbmRleCBmMzk0MDAyLi43ZDBlZTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgRFZCX0JUOFhYCiAJdHJpc3RhdGUgIkJUOHh4IGJhc2VkIFBDSSBjYXJkcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMgJiYgVklERU9fQlQ4NDgKKwlzZWxlY3QgRFZCX1BMTAogCXNlbGVjdCBEVkJfTVQzNTIKIAlzZWxlY3QgRFZCX1NQODg3WAogCXNlbGVjdCBEVkJfTlhUNjAwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCBkNjg3YTE0Li4wNmFjODk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJc3RhdGUtPmJhbmR3aWR0aCA9IGJhbmR3aWR0aDsKIAogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgIT0gRFNUX1RZUEVfSVNfVEVSUikKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCXN3aXRjaCAoYmFuZHdpZHRoKSB7CiAJY2FzZSBCQU5EV0lEVEhfNl9NSFo6CkBAIC00NjIsNyArNDYyLDcgQEAKIAogCXN0YXRlLT5zeW1ib2xfcmF0ZSA9IHNyYXRlOwogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfVEVSUikgewotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAlkcHJpbnRrKHZlcmJvc2UsIERTVF9JTkZPLCAxLCAic2V0IHN5bXJhdGUgJXUiLCBzcmF0ZSk7CiAJc3JhdGUgLz0gMTAwMDsKQEAgLTUwNCw3ICs1MDQsNyBAQAogc3RhdGljIGludCBkc3Rfc2V0X21vZHVsYXRpb24oc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIGZlX21vZHVsYXRpb25fdCBtb2R1bGF0aW9uKQogewogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgIT0gRFNUX1RZUEVfSVNfQ0FCTEUpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAlzdGF0ZS0+bW9kdWxhdGlvbiA9IG1vZHVsYXRpb247CiAJc3dpdGNoIChtb2R1bGF0aW9uKSB7CkBAIC0xMjM0LDcgKzEyMzQsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAlpZiAod3JpdGVfZHN0KHN0YXRlLCBkYXRhLCBsZW4pKSB7Ci0JCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJUcmluZyB0byByZWNvdmVyLi4gIik7CisJCWRwcmludGsodmVyYm9zZSwgRFNUX0lORk8sIDEsICJUcnlpbmcgdG8gcmVjb3Zlci4uICIpOwogCQlpZiAoKGRzdF9lcnJvcl9yZWNvdmVyeShzdGF0ZSkpIDwgMCkgewogCQkJZHByaW50ayh2ZXJib3NlLCBEU1RfRVJST1IsIDEsICJSZWNvdmVyeSBGYWlsZWQuIik7CiAJCQlnb3RvIGVycm9yOwpAQCAtMTMyOCwxNSArMTMyOCwxMyBAQAogewogCXU4IHBha2V0WzhdID0geyAweDAwLCAweDA5LCAweGZmLCAweGZmLCAweDAxLCAweDAwLCAweDAwLCAweDAwIH07CiAKLQlpZiAoc3RhdGUtPmRzdF90eXBlID09IERTVF9UWVBFX0lTX1RFUlIpCi0JCXJldHVybiAwOworCWlmIChzdGF0ZS0+ZHN0X3R5cGUgIT0gRFNUX1RZUEVfSVNfU0FUKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJcGFrZXRbNF0gPSBzdGF0ZS0+dHhfdHVuYVs0XTsKIAlwYWtldFsyXSA9IHN0YXRlLT50eF90dW5hWzJdOwogCXBha2V0WzNdID0gc3RhdGUtPnR4X3R1bmFbM107CiAJcGFrZXRbN10gPSBkc3RfY2hlY2tfc3VtIChwYWtldCwgNyk7Ci0JZHN0X2NvbW1hbmQoc3RhdGUsIHBha2V0LCA4KTsKLQotCXJldHVybiAwOworCXJldHVybiBkc3RfY29tbWFuZChzdGF0ZSwgcGFrZXQsIDgpOwogfQogCiBzdGF0aWMgaW50IGRzdF9nZXRfdHVuYShzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSkKQEAgLTE0NjUsNyArMTQ2Myw3IEBACiAJdTggcGFrZXRbOF0gPSB7IDB4MDAsIDB4MDgsIDB4MDQsIDB4ZTAsIDB4MTAsIDB4MzgsIDB4ZjAsIDB4ZWMgfTsKIAogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgIT0gRFNUX1RZUEVfSVNfU0FUKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWlmIChjbWQtPm1zZ19sZW4gPiAwICYmIGNtZC0+bXNnX2xlbiA8IDUpCiAJCW1lbWNweSgmcGFrZXRbM10sIGNtZC0+bXNnLCBjbWQtPm1zZ19sZW4pOwogCWVsc2UgaWYgKGNtZC0+bXNnX2xlbiA9PSA1ICYmIHN0YXRlLT5kc3RfaHdfY2FwICYgRFNUX1RZUEVfSEFTX0RJU0VRQzUpCkBAIC0xNDczLDE4ICsxNDcxLDE3IEBACiAJZWxzZQogCQlyZXR1cm4gLUVJTlZBTDsKIAlwYWtldFs3XSA9IGRzdF9jaGVja19zdW0oJnBha2V0WzBdLCA3KTsKLQlkc3RfY29tbWFuZChzdGF0ZSwgcGFrZXQsIDgpOwotCXJldHVybiAwOworCXJldHVybiBkc3RfY29tbWFuZChzdGF0ZSwgcGFrZXQsIDgpOwogfQogCiBzdGF0aWMgaW50IGRzdF9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewotCWludCBuZWVkX2NtZDsKKwlpbnQgbmVlZF9jbWQsIHJldHZhbCA9IDA7CiAJc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCXN0YXRlLT52b2x0YWdlID0gdm9sdGFnZTsKIAlpZiAoc3RhdGUtPmRzdF90eXBlICE9IERTVF9UWVBFX0lTX1NBVCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCW5lZWRfY21kID0gMDsKIApAQCAtMTUwNiw5ICsxNTAzLDkgQEAKIAl9CiAKIAlpZiAobmVlZF9jbWQpCi0JCWRzdF90b25lX3Bvd2VyX2NtZChzdGF0ZSk7CisJCXJldHZhbCA9IGRzdF90b25lX3Bvd2VyX2NtZChzdGF0ZSk7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50IGRzdF9zZXRfdG9uZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCkBAIC0xNTE3LDcgKzE1MTQsNyBAQAogCiAJc3RhdGUtPnRvbmUgPSB0b25lOwogCWlmIChzdGF0ZS0+ZHN0X3R5cGUgIT0gRFNUX1RZUEVfSVNfU0FUKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc3dpdGNoICh0b25lKSB7CiAJY2FzZSBTRUNfVE9ORV9PRkY6CkBAIC0xNTMzLDkgKzE1MzAsNyBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkc3RfdG9uZV9wb3dlcl9jbWQoc3RhdGUpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGRzdF90b25lX3Bvd2VyX2NtZChzdGF0ZSk7CiB9CiAKIHN0YXRpYyBpbnQgZHN0X3NlbmRfYnVyc3Qoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY19taW5pX2NtZF90IG1pbmljbWQpCkBAIC0xNTQzLDcgKzE1MzgsNyBAQAogCXN0cnVjdCBkc3Rfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CiAKIAlpZiAoc3RhdGUtPmRzdF90eXBlICE9IERTVF9UWVBFX0lTX1NBVCkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlzdGF0ZS0+bWluaWNtZCA9IG1pbmljbWQ7CiAJc3dpdGNoIChtaW5pY21kKSB7CiAJY2FzZSBTRUNfTUlOSV9BOgpAQCAtMTU1Myw5ICsxNTQ4LDcgQEAKIAkJc3RhdGUtPnR4X3R1bmFbM10gPSAweGZmOwogCQlicmVhazsKIAl9Ci0JZHN0X3RvbmVfcG93ZXJfY21kKHN0YXRlKTsKLQotCXJldHVybiAwOworCXJldHVybiBkc3RfdG9uZV9wb3dlcl9jbWQoc3RhdGUpOwogfQogCiAKQEAgLTE2MDgsMjggKzE2MDEsMzEgQEAKIHsKIAlzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JZHN0X2dldF9zaWduYWwoc3RhdGUpOworCWludCByZXR2YWwgPSBkc3RfZ2V0X3NpZ25hbChzdGF0ZSk7CiAJKnN0cmVuZ3RoID0gc3RhdGUtPmRlY29kZV9zdHJlbmd0aDsKIAotCXJldHVybiAwOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgZHN0X3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnNucikKIHsKIAlzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JZHN0X2dldF9zaWduYWwoc3RhdGUpOworCWludCByZXR2YWwgPSBkc3RfZ2V0X3NpZ25hbChzdGF0ZSk7CiAJKnNuciA9IHN0YXRlLT5kZWNvZGVfc25yOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBkc3Rfc2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnApCiB7CisJaW50IHJldHZhbCA9IC1FSU5WQUw7CiAJc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAogCWlmIChwICE9IE5VTEwpIHsKLQkJZHN0X3NldF9mcmVxKHN0YXRlLCBwLT5mcmVxdWVuY3kpOworCQlyZXR2YWwgPSBkc3Rfc2V0X2ZyZXEoc3RhdGUsIHAtPmZyZXF1ZW5jeSk7CisJCWlmKHJldHZhbCAhPSAwKQorCQkJcmV0dXJuIHJldHZhbDsKIAkJZHByaW50ayh2ZXJib3NlLCBEU1RfREVCVUcsIDEsICJTZXQgRnJlcXVlbmN5PVslZF0iLCBwLT5mcmVxdWVuY3kpOwogCiAJCWlmIChzdGF0ZS0+ZHN0X3R5cGUgPT0gRFNUX1RZUEVfSVNfU0FUKSB7CkBAIC0xNjQ3LDEwICsxNjQzLDEwIEBACiAJCQlkc3Rfc2V0X3N5bWJvbHJhdGUoc3RhdGUsIHAtPnUucWFtLnN5bWJvbF9yYXRlKTsKIAkJCWRzdF9zZXRfbW9kdWxhdGlvbihzdGF0ZSwgcC0+dS5xYW0ubW9kdWxhdGlvbik7CiAJCX0KLQkJZHN0X3dyaXRlX3R1bmEoZmUpOworCQlyZXR2YWwgPSBkc3Rfd3JpdGVfdHVuYShmZSk7CiAJfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIGludCBkc3RfdHVuZV9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvTWFrZWZpbGUKaW5kZXggMTEwNTQ2NS4uMGI1MTgyODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL01ha2VmaWxlCkBAIC0yLDggKzIsOCBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIGtlcm5lbCBEVkIgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLWR2Yi1jb3JlLW9ianMgPSBkdmJkZXYubyBkbXhkZXYubyBkdmJfZGVtdXgubyBkdmJfZmlsdGVyLm8gCVwKLQkJZHZiX2NhX2VuNTAyMjEubyBkdmJfZnJvbnRlbmQubyAJCVwKLQkJZHZiX25ldC5vIGR2Yl9yaW5nYnVmZmVyLm8gZHZiX21hdGgubworZHZiLWNvcmUtb2JqcyA6PSBkdmJkZXYubyBkbXhkZXYubyBkdmJfZGVtdXgubyBkdmJfZmlsdGVyLm8gCVwKKwkJIGR2Yl9jYV9lbjUwMjIxLm8gZHZiX2Zyb250ZW5kLm8gCQlcCisJCSBkdmJfbmV0Lm8gZHZiX3JpbmdidWZmZXIubyBkdmJfbWF0aC5vCiAKIG9iai0kKENPTkZJR19EVkJfQ09SRSkgKz0gZHZiLWNvcmUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA1OWFjMzVkLi41N2IzNGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwpAQCAtNTI2LDcgKzUyNiw5IEBACiAJZmVwcml2LT5kZWxheSA9IDMqSFo7CiAJZmVwcml2LT5zdGF0dXMgPSAwOwogCWZlcHJpdi0+d2FrZXVwID0gMDsKLQlmZXByaXYtPnJlaW5pdGlhbGlzZSA9IDE7CisJZmVwcml2LT5yZWluaXRpYWxpc2UgPSAwOworCisJZHZiX2Zyb250ZW5kX2luaXQoZmUpOwogCiAJd2hpbGUgKDEpIHsKIAkJdXAoJmZlcHJpdi0+c2VtKTsJICAgIC8qIGlzIGxvY2tlZCB3aGVuIHdlIGVudGVyIHRoZSB0aHJlYWQuLi4gKi8KQEAgLTEwMTMsMTcgKzEwMTUsMTggQEAKIAkJcmV0dXJuIHJldDsKIAogCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkpIHsKKworCQkvKiBub3JtYWwgdHVuZSBtb2RlIHdoZW4gb3BlbmVkIFIvVyAqLworCQlmZXByaXYtPnR1bmVfbW9kZV9mbGFncyAmPSB+RkVfVFVORV9NT0RFX09ORVNIT1Q7CisJCWZlcHJpdi0+dG9uZSA9IC0xOworCQlmZXByaXYtPnZvbHRhZ2UgPSAtMTsKKwogCQlyZXQgPSBkdmJfZnJvbnRlbmRfc3RhcnQgKGZlKTsKIAkJaWYgKHJldCkKIAkJCWR2Yl9nZW5lcmljX3JlbGVhc2UgKGlub2RlLCBmaWxlKTsKIAogCQkvKiAgZW1wdHkgZXZlbnQgcXVldWUgKi8KIAkJZmVwcml2LT5ldmVudHMuZXZlbnRyID0gZmVwcml2LT5ldmVudHMuZXZlbnR3ID0gMDsKLQotCQkvKiBub3JtYWwgdHVuZSBtb2RlIHdoZW4gb3BlbmVkIFIvVyAqLwotCQlmZXByaXYtPnR1bmVfbW9kZV9mbGFncyAmPSB+RkVfVFVORV9NT0RFX09ORVNIT1Q7Ci0JCWZlcHJpdi0+dG9uZSA9IC0xOwotCQlmZXByaXYtPnZvbHRhZ2UgPSAtMTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCmluZGV4IDNiYzY3MjIuLjc1ODI0YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKQEAgLTIsNiArMiw3IEBACiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIHZhcmlvdXMgVVNCIERWQiBkZXZpY2VzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCICYmIEkyQwogCXNlbGVjdCBGV19MT0FERVIKKwlzZWxlY3QgRFZCX1BMTAogCWhlbHAKIAkgIEJ5IGVuYWJsaW5nIHRoaXMgeW91IHdpbGwgYmUgYWJsZSB0byBjaG9vc2UgdGhlIHZhcmlvdXMgc3VwcG9ydGVkCiAJICBVU0IxLjEgYW5kIFVTQjIuMCBEVkIgZGV2aWNlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKaW5kZXggMGVmMzYxZi4uZGI5Nzg1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcKQEAgLTYsNDMgKzYsNDMgQEAKIAogY29uZmlnIERWQl9TVFYwMjk5CiAJdHJpc3RhdGUgIlNUIFNUVjAyOTkgYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0NYMjQxMTAKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyNDExMCBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfQ1gyNDEyMwogCXRyaXN0YXRlICJDb25leGFudCBDWDI0MTIzIGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9UREE4MDgzCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBODA4MyBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTVQzMTIKIAl0cmlzdGF0ZSAiWmFybGluayBWUDMxMC9NVDMxMiBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfVkVTMVg5MwogCXRyaXN0YXRlICJWTFNJIFZFUzE4OTMgb3IgVkVTMTk5MyBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfUzVIMTQyMAogCXRyaXN0YXRlICJTYW1zdW5nIFM1SDE0MjAgYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCkBAIC01MSw3ICs1MSw3IEBACiAKIGNvbmZpZyBEVkJfU1A4ODcwCiAJdHJpc3RhdGUgIlNwYXNlIHNwODg3MCBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgpAQCAtNjMsNyArNjMsNyBAQAogCiBjb25maWcgRFZCX1NQODg3WAogCXRyaXN0YXRlICJTcGFzZSBzcDg4N3ggYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KQEAgLTc1LDI1ICs3NSwyNSBAQAogCiBjb25maWcgRFZCX0NYMjI3MDAKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMjcwMCBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfQ1gyMjcwMgogCXRyaXN0YXRlICJDb25leGFudCBjeDIyNzAyIGRlbW9kdWxhdG9yIChPRkRNKSIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTDY0NzgxCiAJdHJpc3RhdGUgIkxTSSBMNjQ3ODEiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX1REQTEwMDRYCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBMTAwNDVIL1REQTEwMDQ2SCBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgpAQCAtMTA2LDMyICsxMDYsMzIgQEAKIAogY29uZmlnIERWQl9OWFQ2MDAwCiAJdHJpc3RhdGUgIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUNjAwMCBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTVQzNTIKIAl0cmlzdGF0ZSAiWmFybGluayBNVDM1MiBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfWkwxMDM1MwogCXRyaXN0YXRlICJaYXJsaW5rIFpMMTAzNTMgYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0RJQjMwMDBNQgogCXRyaXN0YXRlICJEaUJjb20gMzAwME0tQiIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gRGVzaWduZWQgZm9yIG1vYmlsZSB1c2FnZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAogCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0RJQjMwMDBNQwogCXRyaXN0YXRlICJEaUJjb20gMzAwMFAvTS1DIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBEZXNpZ25lZCBmb3IgbW9iaWxlIHVzYWdlLiBTYXkgWSB3aGVuIHlvdSB3YW50CiAJICB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCkBAIC0xNDEsMTkgKzE0MSwxOSBAQAogCiBjb25maWcgRFZCX1ZFUzE4MjAKIAl0cmlzdGF0ZSAiVkxTSSBWRVMxODIwIGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWhlbHAKIAkgIEEgRFZCLUMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9UREExMDAyMQogCXRyaXN0YXRlICJQaGlsaXBzIFREQTEwMDIxIGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWhlbHAKIAkgIEEgRFZCLUMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9TVFYwMjk3CiAJdHJpc3RhdGUgIlNUIFNUVjAyOTcgYmFzZWQiCi0JZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCiAJaGVscAogCSAgQSBEVkItQyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCkBAIC0xNjIsNyArMTYyLDcgQEAKIAogY29uZmlnIERWQl9OWFQyMDBYCiAJdHJpc3RhdGUgIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUMjAwMi9OWFQyMDA0IGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKQEAgLTE3Niw3ICsxNzYsNyBAQAogCiBjb25maWcgRFZCX09SNTEyMTEKIAl0cmlzdGF0ZSAiT3JlbiBPUjUxMjExIGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KQEAgLTE4OCw3ICsxODgsNyBAQAogCiBjb25maWcgRFZCX09SNTExMzIKIAl0cmlzdGF0ZSAiT3JlbiBPUjUxMTMyIGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiBjb25maWcgRFZCX0JDTTM1MTAKIAl0cmlzdGF0ZSAiQnJvYWRjb20gQkNNMzUxMCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQW4gQVRTQyA4VlNCLzE2VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvCkBAIC0yMTEsNyArMjExLDcgQEAKIAogY29uZmlnIERWQl9MR0RUMzMwWAogCXRyaXN0YXRlICJMRyBFbGVjdHJvbmljcyBMR0RUMzMwMi9MR0RUMzMwMyBiYXNlZCIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KQEAgLTIyMCwxNSArMjIwLDE5IEBACiBjb21tZW50ICJNaXNjZWxsYW5lb3VzIGRldmljZXMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCitjb25maWcgRFZCX1BMTAorCXRyaXN0YXRlCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwogY29uZmlnIERWQl9MTkJQMjEKIAl0cmlzdGF0ZSAiTE5CUDIxIFNFQyBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWhlbHAKIAkgIEFuIFNFQyBjb250cm9sIGNoaXAuCiAKIGNvbmZpZyBEVkJfSVNMNjQyMQogCXRyaXN0YXRlICJJU0w2NDIxIFNFQyBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gRFZCX0NPUkUKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWhlbHAKIAkgIEFuIFNFQyBjb250cm9sIGNoaXAuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQppbmRleCA1MjIyMjQ1Li4wZTQ4ODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCkBAIC00LDcgKzQsNyBAQAogCiBFWFRSQV9DRkxBR1MgPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLwogCi1vYmotJChDT05GSUdfRFZCX0NPUkUpICs9IGR2Yi1wbGwubworb2JqLSQoQ09ORklHX0RWQl9QTEwpICs9IGR2Yi1wbGwubwogb2JqLSQoQ09ORklHX0RWQl9TVFYwMjk5KSArPSBzdHYwMjk5Lm8KIG9iai0kKENPTkZJR19EVkJfU1A4ODcwKSArPSBzcDg4NzAubwogb2JqLSQoQ09ORklHX0RWQl9DWDIyNzAwKSArPSBjeDIyNzAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IGExODk2ODMuLjJiZTMzZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtMTk0LDExICsxOTQsMTEgQEAKIAkJeyAgMjUzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweDYyIC8qIDAxMSAwIDAgMCAgMTAgKi8gfSwKIAkJeyAgMzgzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGEyIC8qIDEwMSAwIDAgMCAgMTAgKi8gfSwKIAkJeyAgNDQzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGMyIC8qIDExMCAwIDAgMCAgMTAgKi8gfSwKLQkJeyAgNDQ0MDAwMDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGMzIC8qIDExMCAwIDAgMCAgMTEgKi8gfSwKLQkJeyAgNTgzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweDYzIC8qIDAxMSAwIDAgMCAgMTEgKi8gfSwKLQkJeyAgNzkzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGEzIC8qIDEwMSAwIDAgMCAgMTEgKi8gfSwKLQkJeyAgNDQ0ODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGMzIC8qIDExMCAwIDAgMCAgMTEgKi8gfSwKLQkJeyAgODYxMDAwMDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGUzIC8qIDExMSAwIDAgMCAgMTEgKi8gfSwKKwkJeyAgNDQ0MDAwMDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGM0IC8qIDExMCAwIDAgMSAgMDAgKi8gfSwKKwkJeyAgNTgzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweDY0IC8qIDAxMSAwIDAgMSAgMDAgKi8gfSwKKwkJeyAgNzkzODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGE0IC8qIDEwMSAwIDAgMSAgMDAgKi8gfSwKKwkJeyAgNDQ0ODM0MDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGM0IC8qIDExMCAwIDAgMSAgMDAgKi8gfSwKKwkJeyAgODYxMDAwMDAwLCAzNjI0OTMzMywgMTY2NjY3LCAweGNhLCAweGU0IC8qIDExMSAwIDAgMSAgMDAgKi8gfSwKIAl9CiB9OwogRVhQT1JUX1NZTUJPTChkdmJfcGxsX3RkYTY2NXgpOwpAQCAtNjEzLDcgKzYxMywyMSBAQAogCiBpbnQgZHZiX3BsbF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBwbGxfYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfcGxsX2Rlc2MgKmRlc2MpCiB7CisJdTggYjEgW10gPSB7IDAgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcGxsX2FkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAxIH07CiAJc3RydWN0IGR2Yl9wbGxfcHJpdiAqcHJpdiA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChpMmMgIT0gTlVMTCkgeworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCQlyZXQgPSBpMmNfdHJhbnNmZXIgKGkyYywgJm1zZywgMSk7CisJCWlmIChyZXQgIT0gMSkKKwkJCXJldHVybiAtMTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCSAgICAgZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwl9CiAKIAlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGR2Yl9wbGxfcHJpdiksIEdGUF9LRVJORUwpOwogCWlmIChwcml2ID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCmluZGV4IDdkOGU2ZTguLjliODRiMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9LY29uZmlnCkBAIC0yLDYgKzIsNyBAQAogCXRyaXN0YXRlICJQbHV0bzIgY2FyZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDCiAJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IERWQl9QTEwKIAlzZWxlY3QgRFZCX1REQTEwMDRYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUENJIGNhcmRzIGJhc2VkIG9uIHRoZSBQbHV0bzIgRlBHQSBsaWtlIHRoZSBTYXRlbGNvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCA5ODc4ODFmLi41ZmIwOTc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTMsNiArMyw3IEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgRldfTE9BREVSCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKKwlzZWxlY3QgRFZCX1BMTAogCXNlbGVjdCBEVkJfVkVTMTgyMAogCXNlbGVjdCBEVkJfVkVTMVg5MwogCXNlbGVjdCBEVkJfU1RWMDI5OQpAQCAtNjEsNiArNjIsNyBAQAogCXRyaXN0YXRlICJCdWRnZXQgY2FyZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fU0FBNzE0NgorCXNlbGVjdCBEVkJfUExMCiAJc2VsZWN0IERWQl9TVFYwMjk5CiAJc2VsZWN0IERWQl9WRVMxWDkzCiAJc2VsZWN0IERWQl9WRVMxODIwCkBAIC04Myw2ICs4NSw3IEBACiAJdHJpc3RhdGUgIkJ1ZGdldCBjYXJkcyB3aXRoIG9uYm9hcmQgQ0kgY29ubmVjdG9yIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDYKKwlzZWxlY3QgRFZCX1BMTAogCXNlbGVjdCBEVkJfU1RWMDI5NwogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVERBMTAwNFgKQEAgLTEwNCw2ICsxMDcsNyBAQAogCXRyaXN0YXRlICJCdWRnZXQgY2FyZHMgd2l0aCBhbmFsb2cgdmlkZW8gaW5wdXRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKKwlzZWxlY3QgRFZCX1BMTAogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVERBMTAwNFgKIAlzZWxlY3QgRFZCX1REQTEwMDIxCkBAIC0xMjIsNiArMTI2LDcgQEAKIAl0cmlzdGF0ZSAiQVY3MTEwIGNhcmRzIHdpdGggQnVkZ2V0IFBhdGNoIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgRFZCX0JVREdFVCAmJiBWSURFT19WNEwxCiAJc2VsZWN0IERWQl9BVjcxMTAKKwlzZWxlY3QgRFZCX1BMTAogCXNlbGVjdCBEVkJfU1RWMDI5OQogCXNlbGVjdCBEVkJfVkVTMVg5MwogCXNlbGVjdCBEVkJfVERBODA4MwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwppbmRleCA1MDBmMTVjLi40NTA2MTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYwpAQCAtMjIwMyw4ICsyMjAzLDggQEAKIAkJCQlhdjcxMTAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBuZXh1c2NhX3N0djAyOTdfdHVuZXJfc2V0X3BhcmFtczsKIAogCQkJCS8qIHNldCBUREE5ODE5IGludG8gRFZCIG1vZGUgKi8KLQkJCQlzYWE3MTQ2X3NldGdwaW8oYXY3MTEwLT5kZXYsIDEsIFNBQTcxNDZfR1BJT19PVVRMTyk7IC8vIFREQTkxOTggcGluOShTVEQpCi0JCQkJc2FhNzE0Nl9zZXRncGlvKGF2NzExMC0+ZGV2LCAzLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOyAvLyBUREE5MTk4IHBpbjMwKFZJRikKKwkJCQlzYWE3MTQ2X3NldGdwaW8oYXY3MTEwLT5kZXYsIDEsIFNBQTcxNDZfR1BJT19PVVRMTyk7IC8vIFREQTk4MTkgcGluOShTVEQpCisJCQkJc2FhNzE0Nl9zZXRncGlvKGF2NzExMC0+ZGV2LCAzLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOyAvLyBUREE5ODE5IHBpbjMwKFZJRikKIAogCQkJCS8qIHR1bmVyIG9uIHRoaXMgbmVlZHMgYSBzbG93ZXIgaTJjIGJ1cyBzcGVlZCAqLwogCQkJCWF2NzExMC0+ZGV2LT5pMmNfYml0cmF0ZSA9IFNBQTcxNDZfSTJDX0JVU19CSVRfUkFURV8yNDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKaW5kZXggNjQwNTU0Ni4uNmZmZTUzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwpAQCAtMjcyLDggKzI3Miw4IEBACiAJCQkJaWYgKHZlczE4MjBfd3JpdGVyZWcoZGV2LCAweDA5LCAweDBmLCAweDYwKSkKIAkJCQkJZHByaW50aygxLCAic2V0dGluZyBiYW5kIGluIGRlbW9kdWxhdG9yIGZhaWxlZC5cbiIpOwogCQkJfSBlbHNlIGlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9TVFYwMjk3KSB7Ci0JCQkJc2FhNzE0Nl9zZXRncGlvKGRldiwgMSwgU0FBNzE0Nl9HUElPX09VVEhJKTsgLy8gVERBOTE5OCBwaW45KFNURCkKLQkJCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAzLCBTQUE3MTQ2X0dQSU9fT1VUSEkpOyAvLyBUREE5MTk4IHBpbjMwKFZJRikKKwkJCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUSEkpOyAvLyBUREE5ODE5IHBpbjkoU1REKQorCQkJCXNhYTcxNDZfc2V0Z3BpbyhkZXYsIDMsIFNBQTcxNDZfR1BJT19PVVRISSk7IC8vIFREQTk4MTkgcGluMzAoVklGKQogCQkJfQogCQkJaWYgKGkyY193cml0ZXJlZyhhdjcxMTAsIDB4NDgsIDB4MDIsIDB4ZDApICE9IDEpCiAJCQkJZHByaW50aygxLCAic2FhNzExMyB3cml0ZSBmYWlsZWQgQCBjYXJkICVkIiwgYXY3MTEwLT5kdmJfYWRhcHRlci5udW0pOwpAQCAtMzA4LDggKzMwOCw4IEBACiAJCQlpZiAodmVzMTgyMF93cml0ZXJlZyhkZXYsIDB4MDksIDB4MGYsIDB4MjApKQogCQkJCWRwcmludGsoMSwgInNldHRpbmcgYmFuZCBpbiBkZW1vZHVsYXRvciBmYWlsZWQuXG4iKTsKIAkJfSBlbHNlIGlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9TVFYwMjk3KSB7Ci0JCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOyAvLyBUREE5MTk4IHBpbjkoU1REKQotCQkJc2FhNzE0Nl9zZXRncGlvKGRldiwgMywgU0FBNzE0Nl9HUElPX09VVExPKTsgLy8gVERBOTE5OCBwaW4zMChWSUYpCisJCQlzYWE3MTQ2X3NldGdwaW8oZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOyAvLyBUREE5ODE5IHBpbjkoU1REKQorCQkJc2FhNzE0Nl9zZXRncGlvKGRldiwgMywgU0FBNzE0Nl9HUElPX09VVExPKTsgLy8gVERBOTgxOSBwaW4zMChWSUYpCiAJCX0KIAl9CiAKQEAgLTc1MCw4ICs3NTAsOCBAQAogCQkJaWYgKHZlczE4MjBfd3JpdGVyZWcoYXY3MTEwLT5kZXYsIDB4MDksIDB4MGYsIDB4MjApKQogCQkJCWRwcmludGsoMSwgInNldHRpbmcgYmFuZCBpbiBkZW1vZHVsYXRvciBmYWlsZWQuXG4iKTsKIAkJfSBlbHNlIGlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyAmIEFOQUxPR19UVU5FUl9TVFYwMjk3KSB7Ci0JCQlzYWE3MTQ2X3NldGdwaW8oYXY3MTEwLT5kZXYsIDEsIFNBQTcxNDZfR1BJT19PVVRMTyk7IC8vIFREQTkxOTggcGluOShTVEQpCi0JCQlzYWE3MTQ2X3NldGdwaW8oYXY3MTEwLT5kZXYsIDMsIFNBQTcxNDZfR1BJT19PVVRMTyk7IC8vIFREQTkxOTggcGluMzAoVklGKQorCQkJc2FhNzE0Nl9zZXRncGlvKGF2NzExMC0+ZGV2LCAxLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOyAvLyBUREE5ODE5IHBpbjkoU1REKQorCQkJc2FhNzE0Nl9zZXRncGlvKGF2NzExMC0+ZGV2LCAzLCBTQUE3MTQ2X0dQSU9fT1VUTE8pOyAvLyBUREE5ODE5IHBpbjMwKFZJRikKIAkJfQogCiAJCS8qIGluaXQgdGhlIHNhYTcxMTMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKaW5kZXggNWYxMTFkNC4uMmQyMWZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMKQEAgLTEzMDMsNiArMTMwMyw5IEBACiAJYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2FkYXB0ZXIucHJpdiA9IGJ1ZGdldF9hdjsKIAlmcm9udGVuZF9pbml0KGJ1ZGdldF9hdik7CiAJY2lpbnRmX2luaXQoYnVkZ2V0X2F2KTsKKworCXR0cGNpX2J1ZGdldF9pbml0X2hvb2tzKCZidWRnZXRfYXYtPmJ1ZGdldCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCA0Yjk2NmVlLi5mZmJiYjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtMTEwMSw2ICsxMTAxLDggQEAKIAlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfYWRhcHRlci5wcml2ID0gYnVkZ2V0X2NpOwogCWZyb250ZW5kX2luaXQoYnVkZ2V0X2NpKTsKIAorCXR0cGNpX2J1ZGdldF9pbml0X2hvb2tzKCZidWRnZXRfY2ktPmJ1ZGdldCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1jb3JlLmMKaW5kZXggZTRjZjc3Ny4uZTE1NTYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY29yZS5jCkBAIC02Myw5ICs2Myw2IEBACiB7CiAJZHByaW50aygyLCAiYnVkZ2V0OiAlcFxuIiwgYnVkZ2V0KTsKIAotCWlmICgtLWJ1ZGdldC0+ZmVlZGluZykKLQkJcmV0dXJuIGJ1ZGdldC0+ZmVlZGluZzsKLQogCXNhYTcxNDZfd3JpdGUoYnVkZ2V0LT5kZXYsIE1DMSwgTUFTS18yMCk7CS8vIERNQTMgb2ZmCiAJU0FBNzE0Nl9JRVJfRElTQUJMRShidWRnZXQtPmRldiwgTUFTS18xMCk7CiAJcmV0dXJuIDA7CkBAIC03Nyw4ICs3NCw4IEBACiAKIAlkcHJpbnRrKDIsICJidWRnZXQ6ICVwXG4iLCBidWRnZXQpOwogCi0JaWYgKGJ1ZGdldC0+ZmVlZGluZykKLQkJcmV0dXJuICsrYnVkZ2V0LT5mZWVkaW5nOworCWlmICghYnVkZ2V0LT5mZWVkaW5nIHx8ICFidWRnZXQtPmZlX3N5bmNlZCkKKwkJcmV0dXJuIDA7CiAKIAlzYWE3MTQ2X3dyaXRlKGRldiwgTUMxLCBNQVNLXzIwKTsJLy8gRE1BMyBvZmYKIApAQCAtMTM5LDcgKzEzNiwzMyBAQAogCVNBQTcxNDZfSUVSX0VOQUJMRShidWRnZXQtPmRldiwgTUFTS18xMCk7CS8qIFZQRSAqLwogCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzEsIChNQVNLXzA0IHwgTUFTS18yMCkpOwkvKiBETUEzIG9uICovCiAKLQlyZXR1cm4gKytidWRnZXQtPmZlZWRpbmc7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnVkZ2V0X3JlYWRfZmVfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdHVzKQoreworCXN0cnVjdCBidWRnZXQgKmJ1ZGdldCA9IChzdHJ1Y3QgYnVkZ2V0ICopIGZlLT5kdmItPnByaXY7CisJaW50IHN5bmNlZDsKKwlpbnQgcmV0OworCisJaWYgKGJ1ZGdldC0+cmVhZF9mZV9zdGF0dXMpCisJCXJldCA9IGJ1ZGdldC0+cmVhZF9mZV9zdGF0dXMoZmUsIHN0YXR1cyk7CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKCFyZXQpIHsKKwkJc3luY2VkID0gKCpzdGF0dXMgJiBGRV9IQVNfTE9DSyk7CisJCWlmIChzeW5jZWQgIT0gYnVkZ2V0LT5mZV9zeW5jZWQpIHsKKwkJCWJ1ZGdldC0+ZmVfc3luY2VkID0gc3luY2VkOworCQkJc3Bpbl9sb2NrKCZidWRnZXQtPmZlZWRsb2NrKTsKKwkJCWlmIChzeW5jZWQpCisJCQkJc3RhcnRfdHNfY2FwdHVyZShidWRnZXQpOworCQkJZWxzZQorCQkJCXN0b3BfdHNfY2FwdHVyZShidWRnZXQpOworCQkJc3Bpbl91bmxvY2soJmJ1ZGdldC0+ZmVlZGxvY2spOworCQl9CisJfQorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIHZwZWlycSh1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC0yNjcsNyArMjkwLDcgQEAKIHsKIAlzdHJ1Y3QgZHZiX2RlbXV4ICpkZW11eCA9IGZlZWQtPmRlbXV4OwogCXN0cnVjdCBidWRnZXQgKmJ1ZGdldCA9IChzdHJ1Y3QgYnVkZ2V0ICopIGRlbXV4LT5wcml2OwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAKIAlkcHJpbnRrKDIsICJidWRnZXQ6ICVwXG4iLCBidWRnZXQpOwogCkBAIC0yNzYsNyArMjk5LDggQEAKIAogCXNwaW5fbG9jaygmYnVkZ2V0LT5mZWVkbG9jayk7CiAJZmVlZC0+cHVzaV9zZWVuID0gMDsgLyogaGF2ZSBhIGNsZWFuIHNlY3Rpb24gc3RhcnQgKi8KLQlzdGF0dXMgPSBzdGFydF90c19jYXB0dXJlKGJ1ZGdldCk7CisJaWYgKGJ1ZGdldC0+ZmVlZGluZysrID09IDApCisJCXN0YXR1cyA9IHN0YXJ0X3RzX2NhcHR1cmUoYnVkZ2V0KTsKIAlzcGluX3VubG9jaygmYnVkZ2V0LT5mZWVkbG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI4NSwxMiArMzA5LDEzIEBACiB7CiAJc3RydWN0IGR2Yl9kZW11eCAqZGVtdXggPSBmZWVkLT5kZW11eDsKIAlzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCAqKSBkZW11eC0+cHJpdjsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSAwOwogCiAJZHByaW50aygyLCAiYnVkZ2V0OiAlcFxuIiwgYnVkZ2V0KTsKIAogCXNwaW5fbG9jaygmYnVkZ2V0LT5mZWVkbG9jayk7Ci0Jc3RhdHVzID0gc3RvcF90c19jYXB0dXJlKGJ1ZGdldCk7CisJaWYgKC0tYnVkZ2V0LT5mZWVkaW5nID09IDApCisJCXN0YXR1cyA9IHN0b3BfdHNfY2FwdHVyZShidWRnZXQpOwogCXNwaW5fdW5sb2NrKCZidWRnZXQtPmZlZWRsb2NrKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDcwLDYgKzQ5NSwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgdHRwY2lfYnVkZ2V0X2luaXRfaG9va3Moc3RydWN0IGJ1ZGdldCAqYnVkZ2V0KQoreworCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCAmJiAhYnVkZ2V0LT5yZWFkX2ZlX3N0YXR1cykgeworCQlidWRnZXQtPnJlYWRfZmVfc3RhdHVzID0gYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy5yZWFkX3N0YXR1czsKKwkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy5yZWFkX3N0YXR1cyA9IGJ1ZGdldF9yZWFkX2ZlX3N0YXR1czsKKwl9Cit9CisKIGludCB0dHBjaV9idWRnZXRfZGVpbml0KHN0cnVjdCBidWRnZXQgKmJ1ZGdldCkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGJ1ZGdldC0+ZGV2OwpAQCAtNTA4LDExICs1NDEsOCBAQAogCXNwaW5fbG9jaygmYnVkZ2V0LT5mZWVkbG9jayk7CiAJYnVkZ2V0LT52aWRlb19wb3J0ID0gdmlkZW9fcG9ydDsKIAlpZiAoYnVkZ2V0LT5mZWVkaW5nKSB7Ci0JCWludCBvbGRmZWVkaW5nID0gYnVkZ2V0LT5mZWVkaW5nOwotCQlidWRnZXQtPmZlZWRpbmcgPSAxOwogCQlzdG9wX3RzX2NhcHR1cmUoYnVkZ2V0KTsKIAkJc3RhcnRfdHNfY2FwdHVyZShidWRnZXQpOwotCQlidWRnZXQtPmZlZWRpbmcgPSBvbGRmZWVkaW5nOwogCX0KIAlzcGluX3VubG9jaygmYnVkZ2V0LT5mZWVkbG9jayk7CiB9CkBAIC01MjAsNiArNTUwLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0cGNpX2J1ZGdldF9kZWJpcmVhZCk7CiBFWFBPUlRfU1lNQk9MX0dQTCh0dHBjaV9idWRnZXRfZGViaXdyaXRlKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHR0cGNpX2J1ZGdldF9pbml0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHR0cGNpX2J1ZGdldF9pbml0X2hvb2tzKTsKIEVYUE9SVF9TWU1CT0xfR1BMKHR0cGNpX2J1ZGdldF9kZWluaXQpOwogRVhQT1JUX1NZTUJPTF9HUEwodHRwY2lfYnVkZ2V0X2lycTEwX2hhbmRsZXIpOwogRVhQT1JUX1NZTUJPTF9HUEwodHRwY2lfYnVkZ2V0X3NldF92aWRlb19wb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKaW5kZXggZWU2MGNlOS4uNTcyMjc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKQEAgLTYxNyw2ICs2MTcsOCBAQAogCWJ1ZGdldC0+ZHZiX2FkYXB0ZXIucHJpdiA9IGJ1ZGdldDsKIAlmcm9udGVuZF9pbml0KGJ1ZGdldCk7CiAKKwl0dHBjaV9idWRnZXRfaW5pdF9ob29rcyhidWRnZXQpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKaW5kZXggMzU3NjFmMS4uODYzZGZmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmMKQEAgLTM3NSw5ICszNzUsNiBAQAogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzcnU2X3R1bmVyX3NldF9wYXJhbXM7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+dHVuZXJfcHJpdiA9ICZidWRnZXQtPmkyY19hZGFwOwotCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gYnVkZ2V0X2Rpc2VxY19zZW5kX21hc3Rlcl9jbWQ7Ci0JCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLmRpc2VxY19zZW5kX2J1cnN0ID0gYnVkZ2V0X2Rpc2VxY19zZW5kX2J1cnN0OwotCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy5zZXRfdG9uZSA9IGJ1ZGdldF9zZXRfdG9uZTsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpAQCAtNDc0LDYgKzQ3MSw4IEBACiAJYnVkZ2V0LT5kdmJfYWRhcHRlci5wcml2ID0gYnVkZ2V0OwogCWZyb250ZW5kX2luaXQoYnVkZ2V0KTsKIAorCXR0cGNpX2J1ZGdldF9pbml0X2hvb2tzKGJ1ZGdldCk7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LmggYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaAppbmRleCBlY2VhM2ExLi5lOGE1Yzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuaApAQCAtNTIsOSArNTIsNiBAQAogCXN0cnVjdCBkbXhfZnJvbnRlbmQgaHdfZnJvbnRlbmQ7CiAJc3RydWN0IGRteF9mcm9udGVuZCBtZW1fZnJvbnRlbmQ7CiAKLQlpbnQgZmVfc3luY2VkOwotCXN0cnVjdCBtdXRleCBwaWRfbXV0ZXg7Ci0KIAlpbnQgY2lfcHJlc2VudDsKIAlpbnQgdmlkZW9fcG9ydDsKIApAQCAtNzQsNiArNzEsOSBAQAogCiAJc3RydWN0IGR2Yl9hZGFwdGVyIGR2Yl9hZGFwdGVyOwogCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9mcm9udGVuZDsKKwlpbnQgKCpyZWFkX2ZlX3N0YXR1cykoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpOworCWludCBmZV9zeW5jZWQ7CisKIAl2b2lkICpwcml2OwogfTsKIApAQCAtMTA2LDYgKzEwNiw3IEBACiBleHRlcm4gaW50IHR0cGNpX2J1ZGdldF9pbml0KHN0cnVjdCBidWRnZXQgKmJ1ZGdldCwgc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsCiAJCQkgICAgIHN0cnVjdCBzYWE3MTQ2X3BjaV9leHRlbnNpb25fZGF0YSAqaW5mbywKIAkJCSAgICAgc3RydWN0IG1vZHVsZSAqb3duZXIpOworZXh0ZXJuIHZvaWQgdHRwY2lfYnVkZ2V0X2luaXRfaG9va3Moc3RydWN0IGJ1ZGdldCAqYnVkZ2V0KTsKIGV4dGVybiBpbnQgdHRwY2lfYnVkZ2V0X2RlaW5pdChzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQpOwogZXh0ZXJuIHZvaWQgdHRwY2lfYnVkZ2V0X2lycTEwX2hhbmRsZXIoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIHUzMiAqIGlzcik7CiBleHRlcm4gdm9pZCB0dHBjaV9idWRnZXRfc2V0X3ZpZGVvX3BvcnQoc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYsIGludCB2aWRlb19wb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWcKaW5kZXggOTJjN2NkYy4uNDZhNmE2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgRFZCX1RUVVNCX0JVREdFVAogCXRyaXN0YXRlICJUZWNobm90cmVuZC9IYXVwcGF1Z2UgTm92YS1VU0IgZGV2aWNlcyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFVTQgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCICYmIEkyQworCXNlbGVjdCBEVkJfUExMCiAJc2VsZWN0IERWQl9DWDIyNzAwCiAJc2VsZWN0IERWQl9UREExMDA0WAogCXNlbGVjdCBEVkJfVkVTMTgyMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCmluZGV4IGRlMzEyOGEuLjIyMDA3NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKQEAgLTM1MCw1ICszNTAsMTUgQEAKIAloZWxwCiAJICBFbnRlciB0aGUgSS9PIHBvcnQgb2YgeW91ciBab2x0cml4IHJhZGlvIGNhcmQuCiAKLWVuZG1lbnUKK2NvbmZpZyBVU0JfRFNCUgorCXRyaXN0YXRlICJELUxpbmsgVVNCIEZNIHJhZGlvIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMSAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKKwkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIE5vdGUgdGhhdCB0aGUgYXVkaW8gaXMgbm90IGRpZ2l0YWwsIGFuZAorCSAgeW91IG11c3QgY29ubmVjdCB0aGUgbGluZSBvdXQgY29ubmVjdG9yIHRvIGEgc291bmQgY2FyZCBvciBhCisJICBzZXQgb2Ygc3BlYWtlcnMuCiAKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRzYnIxMDAuCitlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9yYWRpby9NYWtlZmlsZQppbmRleCBlOTViNjgwLi5jZjU1YTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vTWFrZWZpbGUKQEAgLTIwLDUgKzIwLDYgQEAKIG9iai0kKENPTkZJR19SQURJT19HRU1URUtfUENJKSArPSByYWRpby1nZW10ZWstcGNpLm8KIG9iai0kKENPTkZJR19SQURJT19UUlVTVCkgKz0gcmFkaW8tdHJ1c3Qubwogb2JqLSQoQ09ORklHX1JBRElPX01BRVNUUk8pICs9IHJhZGlvLW1hZXN0cm8ubworb2JqLSQoQ09ORklHX1VTQl9EU0JSKSArPSBkc2JyMTAwLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1Jc291bmQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZHNicjEwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbWVkaWEvdmlkZW8vZHNicjEwMC5jCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCmluZGV4IDZkNTMyZjEuLjk0ZDA3OGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiBjb25maWcgVklERU9fU0FBNTI0OQogCXRyaXN0YXRlICJTQUE1MjQ5IFRlbGV0ZXh0IHByb2Nlc3NvciIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgVklERU9fVjRMMQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEkyQyBidXMgYmFzZWQgdGVsZXRleHQgdXNpbmcgdGhlIFNBQTUyNDkgY2hpcC4gQXQgdGhlCiAJICBtb21lbnQgdGhpcyBpcyBvbmx5IHVzZWZ1bCBvbiBzb21lIEV1cm9wZWFuIFdpblRWIGNhcmRzLgpAQCAtMTU1LDcgKzE1NSw3IEBACiAKIGNvbmZpZyBUVU5FUl8zMDM2CiAJdHJpc3RhdGUgIlNBQjMwMzYgdHVuZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgUGhpbGlwcyBTQUIzMDM2IGNvbXBhdGlibGUgdHVuZXJzLgogCSAgSWYgaW4gZG91YnQsIHNheSBOLgpAQCAtMjYwLDcgKzI2MCw3IEBACiAKIGNvbmZpZyBWSURFT19NWEIKIAl0cmlzdGF0ZSAiU2llbWVucy1OaXhkb3JmICdNdWx0aW1lZGlhIGVYdGVuc2lvbiBCb2FyZCciCi0JZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gUENJICYmIFZJREVPX1Y0TDEgJiYgSTJDCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKIAlzZWxlY3QgVklERU9fVFVORVIKIAktLS1oZWxwLS0tCkBAIC0yNzIsNyArMjcyLDcgQEAKIAogY29uZmlnIFZJREVPX0RQQwogCXRyaXN0YXRlICJQaGlsaXBzLVNlbWljb25kdWN0b3JzICdkcGM3MTQ2IGRlbW9uc3RyYXRpb24gYm9hcmQnIgotCWRlcGVuZHMgb24gUENJICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxICYmIEkyQwogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCiAJc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCkBAIC0yODcsNyArMjg3LDcgQEAKIAogY29uZmlnIFZJREVPX0hFWElVTV9PUklPTgogCXRyaXN0YXRlICJIZXhpdW0gSFYtUENJNiBhbmQgT3Jpb24gZnJhbWUgZ3JhYmJlciIKLQlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBWSURFT19WNEwyCiAJLS0taGVscC0tLQpAQCAtMjk5LDcgKzI5OSw3IEBACiAKIGNvbmZpZyBWSURFT19IRVhJVU1fR0VNSU5JCiAJdHJpc3RhdGUgIkhleGl1bSBHZW1pbmkgZnJhbWUgZ3JhYmJlciIKLQlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBWSURFT19WNEwyCiAJLS0taGVscC0tLQpAQCAtNDQ5LDE4ICs0NDksNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWciCiAKLWNvbmZpZyBVU0JfRFNCUgotCXRyaXN0YXRlICJELUxpbmsgVVNCIEZNIHJhZGlvIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMSAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIE5vdGUgdGhhdCB0aGUgYXVkaW8gaXMgbm90IGRpZ2l0YWwsIGFuZAotCSAgeW91IG11c3QgY29ubmVjdCB0aGUgbGluZSBvdXQgY29ubmVjdG9yIHRvIGEgc291bmQgY2FyZCBvciBhCi0JICBzZXQgb2Ygc3BlYWtlcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGRzYnIxMDAuCi0KIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvbWVkaWEvdmlkZW8vZXQ2MXgyNTEvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCmluZGV4IDM1M2Q2MWMuLmU4MmU1MTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQpAQCAtNzcsNyArNzcsNiBAQAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjM0MVgpICs9IGN4MjM0MXgubwogCiBvYmotJChDT05GSUdfVVNCX0RBQlVTQikgICAgICAgICs9IGRhYnVzYi5vCi1vYmotJChDT05GSUdfVVNCX0RTQlIpICAgICAgICAgICs9IGRzYnIxMDAubwogb2JqLSQoQ09ORklHX1VTQl9PVjUxMSkgICAgICAgICArPSBvdjUxMS5vCiBvYmotJChDT05GSUdfVVNCX1NFNDAxKSAgICAgICAgICs9IHNlNDAxLm8KIG9iai0kKENPTkZJR19VU0JfU1RWNjgwKSAgICAgICAgKz0gc3R2NjgwLm8KQEAgLTkxLDYgKzkwLDcgQEAKIG9iai0kKENPTkZJR19VU0JfSUJNQ0FNKSAgICAgICAgKz0gdXNidmlkZW8vCiBvYmotJChDT05GSUdfVVNCX0tPTklDQVdDKSAgICAgICs9IHVzYnZpZGVvLwogb2JqLSQoQ09ORklHX1VTQl9WSUNBTSkgICAgICAgICArPSB1c2J2aWRlby8KK29iai0kKENPTkZJR19VU0JfUVVJQ0tDQU1fTUVTU0VOR0VSKQkrPSB1c2J2aWRlby8KIAogb2JqLSQoQ09ORklHX1ZJREVPX1ZJVkkpICs9IHZpdmkubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggMTUzZjZhNC4uY2RjZjU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19CVDg0OAogCXRyaXN0YXRlICJCVDg0OCBWaWRlbyBGb3IgTGludXgiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwyCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCiAJc2VsZWN0IEkyQ19BTEdPQklUCiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBWSURFT19CVENYCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggNTc2NGE4OS4uMjBkZmY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtMzkyMyw3ICszOTIzLDEyIEBACiAJCWdvdG8gZXJyOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogcmVnaXN0ZXJlZCBkZXZpY2UgdmlkZW8lZFxuIiwKIAkgICAgICAgYnR2LT5jLm5yLGJ0di0+dmlkZW9fZGV2LT5taW5vciAmIDB4MWYpOwotCXZpZGVvX2RldmljZV9jcmVhdGVfZmlsZShidHYtPnZpZGVvX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2NhcmQpOworCWlmIChjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJmJ0di0+dmlkZW9fZGV2LT5jbGFzc19kZXYsCisJCQkJICAgICAmY2xhc3NfZGV2aWNlX2F0dHJfY2FyZCk8MCkgeworCQlwcmludGsoS0VSTl9FUlIgImJ0dHYlZDogY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlICdjYXJkJyAiCisJCSAgICAgICAiZmFpbGVkXG4iLCBidHYtPmMubnIpOworCQlnb3RvIGVycjsKKwl9CiAKIAkvKiB2YmkgKi8KIAlidHYtPnZiaV9kZXYgPSB2ZGV2X2luaXQoYnR2LCAmYnR0dl92YmlfdGVtcGxhdGUsICJ2YmkiKTsKQEAgLTQyODcsNiArNDI5Miw4IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9pbml0X21vZHVsZSh2b2lkKQogeworCWludCByZXQ7CisKIAlidHR2X251bSA9IDA7CiAKIAlwcmludGsoS0VSTl9JTkZPICJidHR2OiBkcml2ZXIgdmVyc2lvbiAlZC4lZC4lZCBsb2FkZWRcbiIsCkBAIC00MzA4LDcgKzQzMTUsMTEgQEAKIAogCWJ0dHZfY2hlY2tfY2hpcHNldCgpOwogCi0JYnVzX3JlZ2lzdGVyKCZidHR2X3N1Yl9idXNfdHlwZSk7CisJcmV0ID0gYnVzX3JlZ2lzdGVyKCZidHR2X3N1Yl9idXNfdHlwZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0djogYnVzX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJ0dHZfcGNpX2RyaXZlcik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKaW5kZXggYjQxZjgxZC4uOTMzZDZkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlucHV0LmMKQEAgLTMwMyw2ICszMDMsNyBAQAogCQlpci0+bWFza19rZXl1cCAgID0gMHgwMTAwMDA7CiAJCWlyLT5wb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CisJY2FzZSBCVFRWX0JPQVJEX1BWX000OTAwOgogCWNhc2UgQlRUVl9CT0FSRF9QVl9CVDg3OFBfOUI6CiAJY2FzZSBCVFRWX0JPQVJEX1BWX0JUODc4UF9QTFVTOgogCQlpcl9jb2RlcyAgICAgICAgID0gaXJfY29kZXNfcGl4ZWx2aWV3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCmluZGV4IDhjOWYwZjcuLjYzNjc2ZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKQEAgLTMxLDExICszMSwxNiBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImJ0dHZwLmgiCiAKLS8qIE9mZnNldCBmcm9tIGxpbmUgc3luYyBwdWxzZSBsZWFkaW5nIGVkZ2UgKDBIKSBpbiAxIC8gc2FtcGxpbmdfcmF0ZToKLSAgIGJ0OHg4IC9IUkVTRVQgcHVsc2Ugc3RhcnRzIGF0IDBIIGFuZCBoYXMgbGVuZ3RoIDY0IC8gZkNMS3gxIChFfE9fVlRDCi0gICBIU0ZNVCA9IDApLiBWQklfSERFTEFZIChhbHdheXMgMCkgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIHRyYWlsaW5nIGVkZ2UKLSAgIG9mIC9IUkVTRVQgaW4gMSAvIGZDTEt4MSwgYW5kIHRoZSBzYW1wbGluZ19yYXRlIHR2bm9ybS0+RnNjIGlzIGZDTEt4Mi4gKi8KLSNkZWZpbmUgVkJJX09GRlNFVCAoKDY0ICsgMCkgKiAyKQorLyogT2Zmc2V0IGZyb20gbGluZSBzeW5jIHB1bHNlIGxlYWRpbmcgZWRnZSAoMEgpIHRvIHN0YXJ0IG9mIFZCSSBjYXB0dXJlLAorICAgaW4gZkNMS3gyIHBpeGVscy4gIEFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0LCBWQkkgY2FwdHVyZSBzdGFydHMKKyAgIFZCSV9IREVMQVkgZkNMS3gxIHBpeGVscyBmcm9tIHRoZSB0YWlsaW5nIGVkZ2VvZiAvSFJFU0VULCBhbmQgL0hSRVNFVAorICAgaXMgNjQgZkNMS3gxIHBpeGVscyB3aWRlLiAgVkJJX0hERUxBWSBpcyBzZXQgdG8gMCwgc28gdGhpcyBzaG91bGQgYmUKKyAgICg2NCArIDApICogMiA9IDEyOCBmQ0xLeDIgcGl4ZWxzLiAgQnV0IGl0J3Mgbm90ISAgVGhlIGRhdGFzaGVldCBpcworICAgSnVzdCBQbGFpbiBXcm9uZy4gIFRoZSByZWFsIHZhbHVlIGFwcGVhcnMgdG8gYmUgZGlmZmVyZW50IGZvcgorICAgZGlmZmVyZW50IHJldmlzaW9ucyBvZiB0aGUgYnQ4eDggY2hpcHMsIGFuZCB0byBiZSBhZmZlY3RlZCBieSB0aGUKKyAgIGhvcml6b250YWwgc2NhbGluZyBmYWN0b3IuICBFeHBlcmltZW50YWxseSwgdGhlIHZhbHVlIGlzIG1lYXN1cmVkCisgICB0byBiZSBhYm91dCAyNDQuICAqLworI2RlZmluZSBWQklfT0ZGU0VUIDI0NAogCiAjZGVmaW5lIFZCSV9ERUZMSU5FUyAxNgogI2RlZmluZSBWQklfTUFYTElORVMgMzIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYwppbmRleCAzNTNkMDJiLi5iNjllZTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NvbXBhdF9pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCkBAIC0yMSw3ICsyMSw3IEBACiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAKLQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogc3RydWN0IHZpZGVvX3R1bmVyMzIgewogCWNvbXBhdF9pbnRfdCB0dW5lcjsKIAljaGFyIG5hbWVbMzJdOwpAQCAtMTA3LDYgKzEwNyw3IEBACiAJY29tcGF0X2NhZGRyX3QgY2xpcHM7CiAJY29tcGF0X2ludF90IGNsaXBjb3VudDsKIH07CisjZW5kaWYKIAogc3RhdGljIGludCBuYXRpdmVfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtMTI0LDYgKzEyNSw3IEBACiB9CiAKIAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogLyogWW91IGdldCBiYWNrIGV2ZXJ5dGhpbmcgZXhjZXB0IHRoZSBjbGlwcy4uLiAqLwogc3RhdGljIGludCBwdXRfdmlkZW9fd2luZG93MzIoc3RydWN0IHZpZGVvX3dpbmRvdyAqa3AsIHN0cnVjdCB2aWRlb193aW5kb3czMiBfX3VzZXIgKnVwKQogewpAQCAtMTM4LDYgKzE0MCw3IEBACiAJCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiBzdHJ1Y3QgdjRsMl9jbGlwMzIKIHsKQEAgLTQ5MCw2ICs0OTMsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorc3RydWN0IHZpZGVvX2NvZGUzMgoreworCWNoYXIJCWxvYWR3aGF0WzE2XTsJLyogbmFtZSBvciB0YWcgb2YgZmlsZSBiZWluZyBwYXNzZWQgKi8KKwljb21wYXRfaW50X3QJZGF0YXNpemU7CisJdW5zaWduZWQgY2hhcgkqZGF0YTsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IG1pY3JvY29kZTMyKHN0cnVjdCB2aWRlb19jb2RlICprcCwgc3RydWN0IHZpZGVvX2NvZGUzMiBfX3VzZXIgKnVwKQoreworCWlmKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHVwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NvZGUzMikpIHx8CisJCWNvcHlfZnJvbV91c2VyKGtwLT5sb2Fkd2hhdCwgdXAtPmxvYWR3aGF0LCBzaXplb2YgKHVwLT5sb2Fkd2hhdCkpIHx8CisJCWdldF91c2VyKGtwLT5kYXRhc2l6ZSwgJnVwLT5kYXRhc2l6ZSkgfHwKKwkJY29weV9mcm9tX3VzZXIoa3AtPmRhdGEsIHVwLT5kYXRhLCB1cC0+ZGF0YXNpemUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKICNkZWZpbmUgVklESU9DR1RVTkVSMzIJCV9JT1dSKCd2Jyw0LCBzdHJ1Y3QgdmlkZW9fdHVuZXIzMikKICNkZWZpbmUgVklESU9DU1RVTkVSMzIJCV9JT1coJ3YnLDUsIHN0cnVjdCB2aWRlb190dW5lcjMyKQogI2RlZmluZSBWSURJT0NHV0lOMzIJCV9JT1IoJ3YnLDksIHN0cnVjdCB2aWRlb193aW5kb3czMikKQEAgLTQ5OCw2ICs1MTksOSBAQAogI2RlZmluZSBWSURJT0NTRkJVRjMyCQlfSU9XKCd2JywxMiwgc3RydWN0IHZpZGVvX2J1ZmZlcjMyKQogI2RlZmluZSBWSURJT0NHRlJFUTMyCQlfSU9SKCd2JywxNCwgdTMyKQogI2RlZmluZSBWSURJT0NTRlJFUTMyCQlfSU9XKCd2JywxNSwgdTMyKQorI2RlZmluZSBWSURJT0NTTUlDUk9DT0RFMzIJX0lPVygndicsMjcsIHN0cnVjdCB2aWRlb19jb2RlMzIpCisKKyNlbmRpZgogCiAvKiBWSURJT0NfRU5VTUlOUFVUMzIgaXMgVklESU9DX0VOVU1JTlBVVCBtaW51cyA0IGJ5dGVzIG9mIHBhZGRpbmcgYWxpZ25lbWVudCAqLwogI2RlZmluZSBWSURJT0NfRU5VTUlOUFVUMzIJVklESU9DX0VOVU1JTlBVVCAtIF9JT0MoMCwgMCwgMCwgNCkKQEAgLTUxOSw2ICs1NDMsNyBAQAogI2RlZmluZSBWSURJT0NfU19JTlBVVDMyCV9JT1dSICgnVicsIDM5LCBjb21wYXRfaW50X3QpCiAjZGVmaW5lIFZJRElPQ19UUllfRk1UMzIgICAgICAJX0lPV1IgKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdDMyKQogCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiBlbnVtIHsKIAlNYXhDbGlwcyA9ICh+MFUtc2l6ZW9mKHN0cnVjdCB2aWRlb193aW5kb3cpKS9zaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApCiB9OwpAQCAtNTgzLDEzICs2MDgsMTcgQEAKIAogCXJldHVybiBuYXRpdmVfaW9jdGwoZmlsZSwgVklESU9DU1dJTiwgKHVuc2lnbmVkIGxvbmcpdncpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgZG9fdmlkZW9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXVuaW9uIHsKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAkJc3RydWN0IHZpZGVvX3R1bmVyIHZ0OwogCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIHZiOwogCQlzdHJ1Y3QgdmlkZW9fd2luZG93IHZ3OworCQlzdHJ1Y3QgdmlkZW9fY29kZSB2YzsKKyNlbmRpZgogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgdjJmOwogCQlzdHJ1Y3QgdjRsMl9idWZmZXIgdjJiOwogCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciB2MmZiOwpAQCAtNjA1LDYgKzYzNCw3IEBACiAKIAkvKiBGaXJzdCwgY29udmVydCB0aGUgY29tbWFuZC4gKi8KIAlzd2l0Y2goY21kKSB7CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJY2FzZSBWSURJT0NHVFVORVIzMjogY21kID0gVklESU9DR1RVTkVSOyBicmVhazsKIAljYXNlIFZJRElPQ1NUVU5FUjMyOiBjbWQgPSBWSURJT0NTVFVORVI7IGJyZWFrOwogCWNhc2UgVklESU9DR1dJTjMyOiBjbWQgPSBWSURJT0NHV0lOOyBicmVhazsKQEAgLTYxMiw2ICs2NDIsOCBAQAogCWNhc2UgVklESU9DU0ZCVUYzMjogY21kID0gVklESU9DU0ZCVUY7IGJyZWFrOwogCWNhc2UgVklESU9DR0ZSRVEzMjogY21kID0gVklESU9DR0ZSRVE7IGJyZWFrOwogCWNhc2UgVklESU9DU0ZSRVEzMjogY21kID0gVklESU9DU0ZSRVE7IGJyZWFrOworCWNhc2UgVklESU9DU01JQ1JPQ09ERTMyOiBjbWQgPSBWSURJT0NTTUlDUk9DT0RFOyBicmVhazsKKyNlbmRpZgogCWNhc2UgVklESU9DX0dfRk1UMzI6IGNtZCA9IFZJRElPQ19HX0ZNVDsgYnJlYWs7CiAJY2FzZSBWSURJT0NfU19GTVQzMjogY21kID0gVklESU9DX1NfRk1UOyBicmVhazsKIAljYXNlIFZJRElPQ19RVUVSWUJVRjMyOiBjbWQgPSBWSURJT0NfUVVFUllCVUY7IGJyZWFrOwpAQCAtNjMxLDYgKzY2Myw3IEBACiAJfTsKIAogCXN3aXRjaChjbWQpIHsKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAljYXNlIFZJRElPQ1NUVU5FUjoKIAljYXNlIFZJRElPQ0dUVU5FUjoKIAkJZXJyID0gZ2V0X3ZpZGVvX3R1bmVyMzIoJmthcmcudnQsIHVwKTsKQEAgLTY0NCw2ICs2NzcsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVklESU9DU0ZSRVE6CisjZW5kaWYKIAljYXNlIFZJRElPQ19TX0lOUFVUOgogCWNhc2UgVklESU9DX09WRVJMQVk6CiAJY2FzZSBWSURJT0NfU1RSRUFNT046CkBAIC02OTcsMTQgKzczMSwyMSBAQAogCQljb21wYXRpYmxlX2FyZyA9IDA7CiAJCWJyZWFrOwogCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJY2FzZSBWSURJT0NHV0lOOgogCWNhc2UgVklESU9DR0ZCVUY6CiAJY2FzZSBWSURJT0NHRlJFUToKKyNlbmRpZgogCWNhc2UgVklESU9DX0dfRkJVRjoKIAljYXNlIFZJRElPQ19HX0lOUFVUOgogCQljb21wYXRpYmxlX2FyZyA9IDA7CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJY2FzZSBWSURJT0NTTUlDUk9DT0RFOgorCQllcnIgPSBtaWNyb2NvZGUzMigma2FyZy52YywgdXApOworCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWJyZWFrOworI2VuZGlmCiAJfTsKLQogCWlmKGVycikKIAkJZ290byBvdXQ7CiAKQEAgLTcxOSw2ICs3NjAsNyBAQAogCX0KIAlpZihlcnIgPT0gMCkgewogCQlzd2l0Y2goY21kKSB7CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJCWNhc2UgVklESU9DR1RVTkVSOgogCQkJZXJyID0gcHV0X3ZpZGVvX3R1bmVyMzIoJmthcmcudnQsIHVwKTsKIAkJCWJyZWFrOwpAQCAtNzMwLDcgKzc3Miw3IEBACiAJCWNhc2UgVklESU9DR0ZCVUY6CiAJCQllcnIgPSBwdXRfdmlkZW9fYnVmZmVyMzIoJmthcmcudmIsIHVwKTsKIAkJCWJyZWFrOwotCisjZW5kaWYKIAkJY2FzZSBWSURJT0NfR19GQlVGOgogCQkJZXJyID0gcHV0X3Y0bDJfZnJhbWVidWZmZXIzMigma2FyZy52MmZiLCB1cCk7CiAJCQlicmVhazsKQEAgLTc2OCw3ICs4MTAsOSBAQAogCQkJZXJyID0gcHV0X3Y0bDJfaW5wdXQzMigma2FyZy52MmksIHVwKTsKIAkJCWJyZWFrOwogCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJCWNhc2UgVklESU9DR0ZSRVE6CisjZW5kaWYKIAkJY2FzZSBWSURJT0NfR19JTlBVVDoKIAkJCWVyciA9IHB1dF91c2VyKCgodTMyKWthcmcudngpLCAodTMyIF9fdXNlciAqKXVwKTsKIAkJCWJyZWFrOwpAQCAtNzg2LDYgKzgzMCw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlzd2l0Y2ggKGNtZCkgeworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCWNhc2UgVklESU9DU1dJTjMyOgogCQlyZXQgPSBkb19zZXRfd2luZG93KGZpbGUsIGNtZCwgYXJnKTsKIAkJYnJlYWs7CkBAIC03OTYsNiArODQxLDcgQEAKIAljYXNlIFZJRElPQ1NGQlVGMzI6CiAJY2FzZSBWSURJT0NHRlJFUTMyOgogCWNhc2UgVklESU9DU0ZSRVEzMjoKKyNlbmRpZgogCWNhc2UgVklESU9DX1FVRVJZQ0FQOgogCWNhc2UgVklESU9DX0VOVU1fRk1UOgogCWNhc2UgVklESU9DX0dfRk1UMzI6CkBAIC04MjcsNiArODczLDcgQEAKIAkJcmV0ID0gZG9fdmlkZW9faW9jdGwoZmlsZSwgY21kLCBhcmcpOwogCQlicmVhazsKIAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCS8qIExpdHRsZSB2LCB0aGUgdmlkZW80bGludXggaW9jdGxzIChjb25mbGljdD8pICovCiAJY2FzZSBWSURJT0NHQ0FQOgogCWNhc2UgVklESU9DR0NIQU46CkBAIC04NTUsNiArOTAyLDcgQEAKIAljYXNlIF9JT1IoJ3YnICwgQkFTRV9WSURJT0NQUklWQVRFKzcsIGludCk6CiAJCXJldCA9IG5hdGl2ZV9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7CiAJCWJyZWFrOworI2VuZGlmCiAJZGVmYXVsdDoKIAkJdjRsX3ByaW50X2lvY3RsKCJjb21wYXRfaW9jdGwzMiIsIGNtZCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9LY29uZmlnCmluZGV4IDUxM2NjMDkuLmUzOWE5NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgVklERU9fQ1BJQTIKIAl0cmlzdGF0ZSAiQ1BpQTIgVmlkZW8gRm9yIExpbnV4IgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIFVTQgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIFVTQiAmJiBWSURFT19WNEwxCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgdmlkZW80bGludXggZHJpdmVyIGZvciBjYW1lcmFzIGJhc2VkIG9uIFZpc2lvbidzIENQaUEyCiAJICAoQ29sb3VyIFByb2Nlc3NvciBJbnRlcmZhY2UgQVNJQyksIHN1Y2ggYXMgdGhlIERpZ2l0YWwgQmx1ZSBRWDUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuYwppbmRleCA1YzIwMzZiLi43YmI3NTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCkBAIC0xMDQsOCArMTA0LDggQEAKIAlpZiAoaTJjX21hc3Rlcl9yZWN2KGNsaWVudCwgYnVmZmVyLCA0KSA8IDQpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIChidWZmZXJbMF0gPDwgMjQpIHwgKGJ1ZmZlclsxXSA8PCAxNikgfAotCSAgICAoYnVmZmVyWzJdIDw8IDgpIHwgYnVmZmVyWzNdOworCXJldHVybiAoYnVmZmVyWzNdIDw8IDI0KSB8IChidWZmZXJbMl0gPDwgMTYpIHwKKwkgICAgKGJ1ZmZlclsxXSA8PCA4KSB8IGJ1ZmZlclswXTsKIH0KIAogaW50IGN4MjU4NDBfYW5kX29yKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBhZGRyLCB1bnNpZ25lZCBhbmRfbWFzaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKaW5kZXggODBlMjNlZS4uN2E5NGU2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcKQEAgLTUxLDYgKzUxLDcgQEAKIAl0cmlzdGF0ZSAiRFZCL0FUU0MgU3VwcG9ydCBmb3IgY3gyMzg4eCBiYXNlZCBUViBjYXJkcyIKIAlkZXBlbmRzIG9uIFZJREVPX0NYODggJiYgRFZCX0NPUkUKIAlzZWxlY3QgVklERU9fQlVGX0RWQgorCXNlbGVjdCBEVkJfUExMCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQ29uZXhhbnQgMjM4OHggY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCmluZGV4IDcyYjYzMGEuLmMyNTU2NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwpAQCAtODksNyArODksNyBAQAogCiAJCWF1eGdwaW8gPSBjeF9yZWFkKE1PX0dQMV9JTyk7CiAJCS8qIFRha2Ugb3V0IHRoZSBwYXJpdHkgcGFydCAqLwotCQlncGlvKz0oZ3BpbyAmIDB4N2ZkKSArIChhdXhncGlvICYgMHhlZik7CisJCWdwaW89KGdwaW8gJiAweDdmZCkgKyAoYXV4Z3BpbyAmIDB4ZWYpOwogCX0gZWxzZQogCQlhdXhncGlvID0gZ3BpbzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKaW5kZXggMjIyNWQ0Yi4uOTRjOTJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCkBAIC0xMTgwLDcgKzExODAsNiBAQAogCQkJVjRMMl9DQVBfUkVBRFdSSVRFICAgICB8CiAJCQlWNEwyX0NBUF9TVFJFQU1JTkcgICAgIHwKIAkJCVY0TDJfQ0FQX1ZCSV9DQVBUVVJFICAgfAotCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSB8CiAJCQkwOwogCQlpZiAoVU5TRVQgIT0gY29yZS0+dHVuZXJfdHlwZSkKIAkJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1RVTkVSOwpAQCAtMTIyNiw3ICsxMjI1LDcgQEAKIAkJc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwogCQlyZXR1cm4gY3g4ODAwX3RyeV9mbXQoZGV2LGZoLGYpOwogCX0KLSNpZmRlZiBIQVZFX1Y0TDEKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAkvKiAtLS0gc3RyZWFtaW5nIGNhcHR1cmUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCWNhc2UgVklESU9DR01CVUY6CiAJewpAQCAtMTU4NSw3ICsxNTg0LDcgQEAKIAkJKmlkID0gMDsKIAkJcmV0dXJuIDA7CiAJfQotI2lmZGVmIEhBVkVfVjRMMQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCWNhc2UgVklESU9DU1RVTkVSOgogCXsKIAkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCmluZGV4IGRiYjc1YTcuLjU2MjQ2YjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxCiBzdGF0aWMgaW50IG1zcF9tb2RlX3Y0bDJfdG9fdjRsMShpbnQgcnhzdWJjaGFucywgaW50IGF1ZG1vZGUpCiB7CiAJaWYgKHJ4c3ViY2hhbnMgPT0gVjRMMl9UVU5FUl9TVUJfTU9OTykKQEAgLTM4NCw2ICszODQsNyBAQAogCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX0xBTkcxOwogCXJldHVybiBWNEwyX1RVTkVSX01PREVfTU9OTzsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IG1zcF9nZXRfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewpAQCAtNTA5LDYgKzUxMCw3IEBACiAJLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCiAJLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCiAJICAga2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLworI2lmZGVmIENPTkZJR19WSURFT19WNEwxCiAJY2FzZSBWSURJT0NHQVVESU86CiAJewogCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwpAQCAtNTc3LDYgKzU3OSwxMiBAQAogCX0KIAogCWNhc2UgVklESU9DU0ZSRVE6CisJeworCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLworCQltc3Bfd2FrZV90aHJlYWQoY2xpZW50KTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJewogCQkvKiBuZXcgY2hhbm5lbCAtLSBraWNrIGF1ZGlvIGNhcnJpZXIgc2NhbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWt0aHJlYWRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwppbmRleCBmMmZkOTE5Li5lZDAyZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAta3RocmVhZHMuYwpAQCAtOTYxLDEwICs5NjEsMTAgQEAKIAkJLyogc2V0dXAgdGhlIGNoaXAqLwogCQltc3AzNHh4Z19yZXNldChjbGllbnQpOwogCQlzdGF0ZS0+c3RkID0gc3RhdGUtPnJhZGlvID8gMHg0MCA6IG1zcF9zdGFuZGFyZDsKLQkJaWYgKHN0YXRlLT5zdGQgIT0gMSkKLQkJCWdvdG8gdW5tdXRlOwogCQkvKiBzdGFydCBhdXRvZGV0ZWN0ICovCiAJCW1zcF93cml0ZV9kZW0oY2xpZW50LCAweDIwLCBzdGF0ZS0+c3RkKTsKKwkJaWYgKHN0YXRlLT5zdGQgIT0gMSkKKwkJCWdvdG8gdW5tdXRlOwogCiAJCS8qIHdhdGNoIGF1dG9kZXRlY3QgKi8KIAkJdjRsX2RiZygxLCBtc3BfZGVidWcsIGNsaWVudCwgInN0YXJ0ZWQgYXV0b2RldGVjdCwgd2FpdGluZyBmb3IgcmVzdWx0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggOWI0OGFiYy4uYmUxZTVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTg1Miw3ICs4NTIsNiBAQAogCXJldHVybiBoZHctPnNlcmlhbF9udW1iZXI7CiB9CiAKLQogaW50IHB2cjJfaGR3X2dldF91bml0X251bWJlcihzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlyZXR1cm4gaGR3LT51bml0X251bWJlcjsKQEAgLTIzMTgsNyArMjMxNyw2IEBACiAJfQogfQogCi0KIC8qIFJldHVybiBuYW1lIGZvciB0aGlzIGRyaXZlciBpbnN0YW5jZSAqLwogY29uc3QgY2hhciAqcHZyMl9oZHdfZ2V0X2RyaXZlcl9uYW1lKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewpAQCAtMjU0Miw2ICsyNTQwLDEwIEBACiB9CiAKIAorLyogSXNzdWUgYSBjb21tYW5kIGFuZCBnZXQgYSByZXNwb25zZSBmcm9tIHRoZSBkZXZpY2UuICBUaGlzIGV4dGVuZGVkCisgICB2ZXJzaW9uIGluY2x1ZGVzIGEgcHJvYmUgZmxhZyAod2hpY2ggaWYgc2V0IG1lYW5zIHRoYXQgZGV2aWNlIGVycm9ycworICAgc2hvdWxkIG5vdCBiZSBsb2dnZWQgb3IgdHJlYXRlZCBhcyBmYXRhbCkgYW5kIGEgdGltZW91dCBpbiBqaWZmaWVzLgorICAgVGhpcyBjYW4gYmUgdXNlZCB0byBub24tbGV0aGFsbHkgcHJvYmUgdGhlIGhlYWx0aCBvZiBlbmRwb2ludCAxLiAqLwogc3RhdGljIGludCBwdnIyX3NlbmRfcmVxdWVzdF9leChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKIAkJCQl1bnNpZ25lZCBpbnQgdGltZW91dCxpbnQgcHJvYmVfZmwsCiAJCQkJdm9pZCAqd3JpdGVfZGF0YSx1bnNpZ25lZCBpbnQgd3JpdGVfbGVuLApAQCAtMjk3MCw2ICsyOTcyLDcgQEAKIH0KIAogCisvKiBTdG9wIC8gc3RhcnQgdmlkZW8gc3RyZWFtIHRyYW5zcG9ydCAqLwogc3RhdGljIGludCBwdnIyX2hkd19jbWRfdXNic3RyZWFtKHN0cnVjdCBwdnIyX2hkdyAqaGR3LGludCBydW5GbCkKIHsKIAlpbnQgc3RhdHVzOwpAQCAtMzA2OCw2ICszMDcxLDcgQEAKIH0KIAogCisvKiBGaW5kIEkyQyBhZGRyZXNzIG9mIGVlcHJvbSAqLwogc3RhdGljIGludCBwdnIyX2hkd19nZXRfZWVwcm9tX2FkZHIoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJaW50IHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5jCmluZGV4IDY4MWY3OWMuLjFlMzkzNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCitzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9idWZmZXJfc3RhdGVfZGVjb2RlKGVudW0gcHZyMl9idWZmZXJfc3RhdGUpOworCiAjZGVmaW5lIEJVRkZFUl9TSUcgMHg0NzY1MzI3MQogCiAvLyAjZGVmaW5lIFNBTklUWV9DSEVDS19CVUZGRVJTCkBAIC01MTUsNiArNTE3LDEwIEBACiB9CiAKIC8qIFF1ZXJ5IC8gc2V0IHRoZSBub21pbmFsIGJ1ZmZlciBjb3VudCAqLworaW50IHB2cjJfc3RyZWFtX2dldF9idWZmZXJfY291bnQoc3RydWN0IHB2cjJfc3RyZWFtICpzcCkKK3sKKwlyZXR1cm4gc3AtPmJ1ZmZlcl90YXJnZXRfY291bnQ7Cit9CiAKIGludCBwdnIyX3N0cmVhbV9zZXRfYnVmZmVyX2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqc3AsdW5zaWduZWQgaW50IGNudCkKIHsKQEAgLTU1Myw3ICs1NTksNiBAQAogCXJldHVybiBzcC0+cl9jb3VudDsKIH0KIAotCiB2b2lkIHB2cjJfc3RyZWFtX2tpbGwoc3RydWN0IHB2cjJfc3RyZWFtICpzcCkKIHsKIAlzdHJ1Y3QgcHZyMl9idWZmZXIgKmJwOwpAQCAtNjA3LDcgKzYxMiw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotCiBpbnQgcHZyMl9idWZmZXJfc2V0X2J1ZmZlcihzdHJ1Y3QgcHZyMl9idWZmZXIgKmJwLHZvaWQgKnB0cix1bnNpZ25lZCBpbnQgY250KQogewogCWludCByZXQgPSAwOwpAQCAtNjQ2LDcgKzY1MCw2IEBACiAJcmV0dXJuIGJwLT5zdGF0dXM7CiB9CiAKLQogaW50IHB2cjJfYnVmZmVyX2dldF9pZChzdHJ1Y3QgcHZyMl9idWZmZXIgKmJwKQogewogCXJldHVybiBicC0+aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW8uaAppbmRleCA5NjI4NWFkLi45MzI3OWNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pby5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvLmgKQEAgLTQ3LDYgKzQ3LDcgQEAKIAkJCSAgICAgIHZvaWQgKmRhdGEpOwogCiAvKiBRdWVyeSAvIHNldCB0aGUgbm9taW5hbCBidWZmZXIgY291bnQgKi8KK2ludCBwdnIyX3N0cmVhbV9nZXRfYnVmZmVyX2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqKTsKIGludCBwdnIyX3N0cmVhbV9zZXRfYnVmZmVyX2NvdW50KHN0cnVjdCBwdnIyX3N0cmVhbSAqLHVuc2lnbmVkIGludCk7CiAKIC8qIEdldCBhIHBvaW50ZXIgdG8gYSBidWZmZXIgdGhhdCBpcyBlaXRoZXIgaWRsZSwgcmVhZHksIG9yIGlzIHNwZWNpZmllZApAQCAtNTgsNiArNTksNyBAQAogLyogRmluZCBvdXQgaG93IG1hbnkgYnVmZmVycyBhcmUgaWRsZSBvciByZWFkeSAqLwogaW50IHB2cjJfc3RyZWFtX2dldF9yZWFkeV9jb3VudChzdHJ1Y3QgcHZyMl9zdHJlYW0gKik7CiAKKwogLyogS2lsbCBhbGwgcGVuZGluZyBidWZmZXJzIGFuZCB0aHJvdyBhd2F5IGFueSByZWFkeSBidWZmZXJzIGFzIHdlbGwgKi8KIHZvaWQgcHZyMl9zdHJlYW1fa2lsbChzdHJ1Y3QgcHZyMl9zdHJlYW0gKik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWlvcmVhZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKaW5kZXggZjdhMmUyMi4uYjcxZjlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaW9yZWFkLmMKQEAgLTIxMyw3ICsyMTMsOSBAQAogCQkJCSAgICIgcHZyMl9pb3JlYWRfc2V0dXAgKHRlYXItZG93bikgaWQ9JXAiLGNwKTsKIAkJCXB2cjJfaW9yZWFkX3N0b3AoY3ApOwogCQkJcHZyMl9zdHJlYW1fa2lsbChjcC0+c3RyZWFtKTsKLQkJCXB2cjJfc3RyZWFtX3NldF9idWZmZXJfY291bnQoY3AtPnN0cmVhbSwwKTsKKwkJCWlmIChwdnIyX3N0cmVhbV9nZXRfYnVmZmVyX2NvdW50KGNwLT5zdHJlYW0pKSB7CisJCQkJcHZyMl9zdHJlYW1fc2V0X2J1ZmZlcl9jb3VudChjcC0+c3RyZWFtLDApOworCQkJfQogCQkJY3AtPnN0cmVhbSA9IE5VTEw7CiAJCX0KIAkJaWYgKHNwKSB7CkBAIC0yNTEsNyArMjUzLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0KIHN0YXRpYyBpbnQgcHZyMl9pb3JlYWRfZ2V0X2J1ZmZlcihzdHJ1Y3QgcHZyMl9pb3JlYWQgKmNwKQogewogCWludCBzdGF0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggNmFmNTVhOC4uZDFkZGE1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC00NCwxMiArNDQsMTYgQEAKIAlzdHJ1Y3Qga29ial90eXBlIGt0eXBlOwogCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGF0dHJfdjRsX21pbm9yX251bWJlcjsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX3VuaXRfbnVtYmVyOworCWludCB2NGxfbWlub3JfbnVtYmVyX2NyZWF0ZWRfb2s7CisJaW50IHVuaXRfbnVtYmVyX2NyZWF0ZWRfb2s7CiB9OwogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMKIHN0cnVjdCBwdnIyX3N5c2ZzX2RlYnVnaWZjIHsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX2RlYnVnY21kOwogCXN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGF0dHJfZGVidWdpbmZvOworCWludCBkZWJ1Z2NtZF9jcmVhdGVkX29rOworCWludCBkZWJ1Z2luZm9fY3JlYXRlZF9vazsKIH07CiAjZW5kaWYgLyogQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMgKi8KIApAQCAtNjcsNiArNzEsNyBAQAogCXN0cnVjdCBwdnIyX3N5c2ZzX2N0bF9pdGVtICppdGVtX25leHQ7CiAJc3RydWN0IGF0dHJpYnV0ZSAqYXR0cl9nZW5bN107CiAJc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBncnA7CisJaW50IGNyZWF0ZWRfb2s7CiAJY2hhciBuYW1lWzgwXTsKIH07CiAKQEAgLTQ4Nyw2ICs0OTIsNyBAQAogCXN0cnVjdCBwdnIyX3N5c2ZzX2Z1bmNfc2V0ICpmcDsKIAlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOwogCXVuc2lnbmVkIGludCBjbnQsYWNudDsKKwlpbnQgcmV0OwogCiAJaWYgKChjdGxfaWQgPCAwKSB8fCAoY3RsX2lkID49IChzaXplb2YoZnVuY3MpL3NpemVvZihmdW5jc1swXSkpKSkgewogCQlyZXR1cm47CkBAIC01ODksNyArNTk1LDEzIEBACiAJY2lwLT5ncnAubmFtZSA9IGNpcC0+bmFtZTsKIAljaXAtPmdycC5hdHRycyA9IGNpcC0+YXR0cl9nZW47CiAKLQlzeXNmc19jcmVhdGVfZ3JvdXAoJnNmcC0+Y2xhc3NfZGV2LT5rb2JqLCZjaXAtPmdycCk7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZzZnAtPmNsYXNzX2Rldi0+a29iaiwmY2lwLT5ncnApOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN5c2ZzX2NyZWF0ZV9ncm91cCBlcnJvcjogJWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJldCk7CisJCXJldHVybjsKKwl9CisJY2lwLT5jcmVhdGVkX29rID0gITA7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl9ERUJVR0lGQwpAQCAtNjAwLDYgKzYxMiw4IEBACiBzdGF0aWMgdm9pZCBwdnIyX3N5c2ZzX2FkZF9kZWJ1Z2lmYyhzdHJ1Y3QgcHZyMl9zeXNmcyAqc2ZwKQogewogCXN0cnVjdCBwdnIyX3N5c2ZzX2RlYnVnaWZjICpkaXA7CisJaW50IHJldDsKKwogCWRpcCA9IGttYWxsb2Moc2l6ZW9mKCpkaXApLEdGUF9LRVJORUwpOwogCWlmICghZGlwKSByZXR1cm47CiAJbWVtc2V0KGRpcCwwLHNpemVvZigqZGlwKSk7CkBAIC02MTMsMTcgKzYyNywzNCBAQAogCWRpcC0+YXR0cl9kZWJ1Z2luZm8uYXR0ci5tb2RlID0gU19JUlVHTzsKIAlkaXAtPmF0dHJfZGVidWdpbmZvLnNob3cgPSBkZWJ1Z2luZm9fc2hvdzsKIAlzZnAtPmRlYnVnaWZjID0gZGlwOwotCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShzZnAtPmNsYXNzX2RldiwmZGlwLT5hdHRyX2RlYnVnY21kKTsKLQljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsJmRpcC0+YXR0cl9kZWJ1Z2luZm8pOworCXJldCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShzZnAtPmNsYXNzX2RldiwmZGlwLT5hdHRyX2RlYnVnY21kKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlIGVycm9yOiAlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwl9IGVsc2UgeworCQlkaXAtPmRlYnVnY21kX2NyZWF0ZWRfb2sgPSAhMDsKKwl9CisJcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LCZkaXAtPmF0dHJfZGVidWdpbmZvKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlIGVycm9yOiAlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcmV0KTsKKwl9IGVsc2UgeworCQlkaXAtPmRlYnVnaW5mb19jcmVhdGVkX29rID0gITA7CisJfQogfQogCiAKIHN0YXRpYyB2b2lkIHB2cjJfc3lzZnNfdGVhcl9kb3duX2RlYnVnaWZjKHN0cnVjdCBwdnIyX3N5c2ZzICpzZnApCiB7CiAJaWYgKCFzZnAtPmRlYnVnaWZjKSByZXR1cm47Ci0JY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LAotCQkJCSAmc2ZwLT5kZWJ1Z2lmYy0+YXR0cl9kZWJ1Z2luZm8pOwotCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShzZnAtPmNsYXNzX2Rldiwmc2ZwLT5kZWJ1Z2lmYy0+YXR0cl9kZWJ1Z2NtZCk7CisJaWYgKHNmcC0+ZGVidWdpZmMtPmRlYnVnaW5mb19jcmVhdGVkX29rKSB7CisJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShzZnAtPmNsYXNzX2RldiwKKwkJCQkJICZzZnAtPmRlYnVnaWZjLT5hdHRyX2RlYnVnaW5mbyk7CisJfQorCWlmIChzZnAtPmRlYnVnaWZjLT5kZWJ1Z2NtZF9jcmVhdGVkX29rKSB7CisJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShzZnAtPmNsYXNzX2RldiwKKwkJCQkJICZzZnAtPmRlYnVnaWZjLT5hdHRyX2RlYnVnY21kKTsKKwl9CiAJa2ZyZWUoc2ZwLT5kZWJ1Z2lmYyk7CiAJc2ZwLT5kZWJ1Z2lmYyA9IE5VTEw7CiB9CkBAIC02NDUsNyArNjc2LDkgQEAKIAlzdHJ1Y3QgcHZyMl9zeXNmc19jdGxfaXRlbSAqY2lwMSwqY2lwMjsKIAlmb3IgKGNpcDEgPSBzZnAtPml0ZW1fZmlyc3Q7IGNpcDE7IGNpcDEgPSBjaXAyKSB7CiAJCWNpcDIgPSBjaXAxLT5pdGVtX25leHQ7Ci0JCXN5c2ZzX3JlbW92ZV9ncm91cCgmc2ZwLT5jbGFzc19kZXYtPmtvYmosJmNpcDEtPmdycCk7CisJCWlmIChjaXAxLT5jcmVhdGVkX29rKSB7CisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnNmcC0+Y2xhc3NfZGV2LT5rb2JqLCZjaXAxLT5ncnApOworCQl9CiAJCXB2cjJfc3lzZnNfdHJhY2UoIkRlc3Ryb3lpbmcgcHZyMl9zeXNmc19jdGxfaXRlbSBpZD0lcCIsY2lwMSk7CiAJCWtmcmVlKGNpcDEpOwogCX0KQEAgLTY3NSw4ICs3MDgsMTQgQEAKIAlwdnIyX3N5c2ZzX3RlYXJfZG93bl9kZWJ1Z2lmYyhzZnApOwogI2VuZGlmIC8qIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDICovCiAJcHZyMl9zeXNmc190ZWFyX2Rvd25fY29udHJvbHMoc2ZwKTsKLQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsJnNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyKTsKLQljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsJnNmcC0+YXR0cl91bml0X251bWJlcik7CisJaWYgKHNmcC0+djRsX21pbm9yX251bWJlcl9jcmVhdGVkX29rKSB7CisJCWNsYXNzX2RldmljZV9yZW1vdmVfZmlsZShzZnAtPmNsYXNzX2RldiwKKwkJCQkJICZzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlcik7CisJfQorCWlmIChzZnAtPnVuaXRfbnVtYmVyX2NyZWF0ZWRfb2spIHsKKwkJY2xhc3NfZGV2aWNlX3JlbW92ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LAorCQkJCQkgJnNmcC0+YXR0cl91bml0X251bWJlcik7CisJfQogCXB2cjJfc3lzZnNfdHJhY2UoIkRlc3Ryb3lpbmcgY2xhc3NfZGV2IGlkPSVwIixzZnAtPmNsYXNzX2Rldik7CiAJc2ZwLT5jbGFzc19kZXYtPmNsYXNzX2RhdGEgPSBOVUxMOwogCWNsYXNzX2RldmljZV91bnJlZ2lzdGVyKHNmcC0+Y2xhc3NfZGV2KTsKQEAgLTcwOSw2ICs3NDgsOCBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKKwlpbnQgcmV0OworCiAJdXNiX2RldiA9IHB2cjJfaGR3X2dldF9kZXYoc2ZwLT5jaGFubmVsLmhkdyk7CiAJaWYgKCF1c2JfZGV2KSByZXR1cm47CiAJY2xhc3NfZGV2ID0ga21hbGxvYyhzaXplb2YoKmNsYXNzX2RldiksR0ZQX0tFUk5FTCk7CkBAIC03MzMsMjAgKzc3NCw0MCBAQAogCiAJc2ZwLT5jbGFzc19kZXYgPSBjbGFzc19kZXY7CiAJY2xhc3NfZGV2LT5jbGFzc19kYXRhID0gc2ZwOwotCWNsYXNzX2RldmljZV9yZWdpc3RlcihjbGFzc19kZXYpOworCXJldCA9IGNsYXNzX2RldmljZV9yZWdpc3RlcihjbGFzc19kZXYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY2xhc3NfZGV2aWNlX3JlZ2lzdGVyIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWtmcmVlKGNsYXNzX2Rldik7CisJCXJldHVybjsKKwl9CiAKIAlzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlci5hdHRyLm93bmVyID0gVEhJU19NT0RVTEU7CiAJc2ZwLT5hdHRyX3Y0bF9taW5vcl9udW1iZXIuYXR0ci5uYW1lID0gInY0bF9taW5vcl9udW1iZXIiOwogCXNmcC0+YXR0cl92NGxfbWlub3JfbnVtYmVyLmF0dHIubW9kZSA9IFNfSVJVR087CiAJc2ZwLT5hdHRyX3Y0bF9taW5vcl9udW1iZXIuc2hvdyA9IHY0bF9taW5vcl9udW1iZXJfc2hvdzsKIAlzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlci5zdG9yZSA9IE5VTEw7Ci0JY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LCZzZnAtPmF0dHJfdjRsX21pbm9yX251bWJlcik7CisJcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LAorCQkJCSAgICAgICAmc2ZwLT5hdHRyX3Y0bF9taW5vcl9udW1iZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUgZXJyb3I6ICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQpOworCX0gZWxzZSB7CisJCXNmcC0+djRsX21pbm9yX251bWJlcl9jcmVhdGVkX29rID0gITA7CisJfQorCiAJc2ZwLT5hdHRyX3VuaXRfbnVtYmVyLmF0dHIub3duZXIgPSBUSElTX01PRFVMRTsKIAlzZnAtPmF0dHJfdW5pdF9udW1iZXIuYXR0ci5uYW1lID0gInVuaXRfbnVtYmVyIjsKIAlzZnAtPmF0dHJfdW5pdF9udW1iZXIuYXR0ci5tb2RlID0gU19JUlVHTzsKIAlzZnAtPmF0dHJfdW5pdF9udW1iZXIuc2hvdyA9IHVuaXRfbnVtYmVyX3Nob3c7CiAJc2ZwLT5hdHRyX3VuaXRfbnVtYmVyLnN0b3JlID0gTlVMTDsKLQljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoc2ZwLT5jbGFzc19kZXYsJnNmcC0+YXR0cl91bml0X251bWJlcik7CisJcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKHNmcC0+Y2xhc3NfZGV2LCZzZnAtPmF0dHJfdW5pdF9udW1iZXIpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUgZXJyb3I6ICVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fLCByZXQpOworCX0gZWxzZSB7CisJCXNmcC0+dW5pdF9udW1iZXJfY3JlYXRlZF9vayA9ICEwOworCX0KIAogCXB2cjJfc3lzZnNfYWRkX2NvbnRyb2xzKHNmcCk7CiAjaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCmluZGV4IDY5NzE0NWUuLjhmZGY3MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZwpAQCAtMzAsNyArMzAsNyBAQAogCiBjb25maWcgVVNCX1BXQ19ERUJVRwogCWJvb2wgIlVTQiBQaGlsaXBzIENhbWVyYXMgdmVyYm9zZSBkZWJ1ZyIKLQlkZXBlbmRzIFVTQl9QV0MKKwlkZXBlbmRzIG9uIFVTQl9QV0MKIAloZWxwCiAJICBTYXkgWSBoZXJlIGluIG9yZGVyIHRvIGhhdmUgdGhlIHB3YyBkcml2ZXIgZ2VuZXJhdGUgdmVyYm9zZSBkZWJ1Z2dpbmcKIAkgIG1lc3NhZ2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwppbmRleCA0N2QwZDgzLi5kNDcwMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYwpAQCAtMTYwLDYgKzE2MCw3IEBACiAJLnBvbGwgPQkJcHdjX3ZpZGVvX3BvbGwsCiAJLm1tYXAgPQkJcHdjX3ZpZGVvX21tYXAsCiAJLmlvY3RsID0gICAgICAgIHB3Y192aWRlb19pb2N0bCwKKwkuY29tcGF0X2lvY3RsID0gdjRsX2NvbXBhdF9pb2N0bDMyLAogCS5sbHNlZWsgPSAgICAgICBub19sbHNlZWssCiB9Owogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcHdjX3RlbXBsYXRlID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwppbmRleCBlMWMxODA1Li5mNTU0MzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvS2NvbmZpZwpAQCAtNDAsNiArNDAsNyBAQAogCWRlcGVuZHMgb24gVklERU9fU0FBNzEzNCAmJiBEVkJfQ09SRQogCXNlbGVjdCBWSURFT19CVUZfRFZCCiAJc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBEVkJfUExMCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCmluZGV4IGYxZmQ2OWUuLmQ3M2NmZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKQEAgLTk5Nyw5ICs5OTcsOSBAQAogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCi0JaWYgKCFkbWFzb3VuZF9pbml0ICYmICFkbWFzb3VuZF9leGl0KSB7Ci0JCWRtYXNvdW5kX2luaXQgPSBhbHNhX2RldmljZV9pbml0OwotCQlkbWFzb3VuZF9leGl0ID0gYWxzYV9kZXZpY2VfZXhpdDsKKwlpZiAoIXNhYTcxMzRfZG1hc291bmRfaW5pdCAmJiAhc2FhNzEzNF9kbWFzb3VuZF9leGl0KSB7CisJCXNhYTcxMzRfZG1hc291bmRfaW5pdCA9IGFsc2FfZGV2aWNlX2luaXQ7CisJCXNhYTcxMzRfZG1hc291bmRfZXhpdCA9IGFsc2FfZGV2aWNlX2V4aXQ7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2FhNzEzNCBBTFNBOiBjYW4ndCBsb2FkLCBETUEgc291bmQgaGFuZGxlciBhbHJlYWR5IGFzc2lnbmVkIChwcm9iYWJseSB0byBPU1MpXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEwMzYsOCArMTAzNiw4IEBACiAJCXNuZF9jYXJkX2ZyZWUoc25kX3NhYTcxMzRfY2FyZHNbaWR4XSk7CiAJfQogCi0JZG1hc291bmRfaW5pdCA9IE5VTEw7Ci0JZG1hc291bmRfZXhpdCA9IE5VTEw7CisJc2FhNzEzNF9kbWFzb3VuZF9pbml0ID0gTlVMTDsKKwlzYWE3MTM0X2RtYXNvdW5kX2V4aXQgPSBOVUxMOwogCXByaW50ayhLRVJOX0lORk8gInNhYTcxMzQgQUxTQSBkcml2ZXIgZm9yIERNQSBzb3VuZCB1bmxvYWRlZFxuIik7CiAKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKaW5kZXggNmU5N2NjOC4uYmUzYTgxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwpAQCAtOTUsOCArOTUsOCBAQAogc3RhdGljIExJU1RfSEVBRChtb3BzX2xpc3QpOwogc3RhdGljIHVuc2lnbmVkIGludCBzYWE3MTM0X2RldmNvdW50OwogCi1pbnQgKCpkbWFzb3VuZF9pbml0KShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Ci1pbnQgKCpkbWFzb3VuZF9leGl0KShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CitpbnQgKCpzYWE3MTM0X2RtYXNvdW5kX2luaXQpKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKK2ludCAoKnNhYTcxMzRfZG1hc291bmRfZXhpdCkoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpOwogCiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmIChjb3JlX2RlYnVnKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzL2NvcmU6ICIgZm10LCBkZXYtPm5hbWUgLCAjIyBhcmcpCkBAIC0xMDA4LDggKzEwMDgsOCBAQAogCS8qIGNoZWNrIGZvciBzaWduYWwgKi8KIAlzYWE3MTM0X2lycV92aWRlb19pbnRsKGRldik7CiAKLQlpZiAoZG1hc291bmRfaW5pdCAmJiAhZGV2LT5kbWFzb3VuZC5wcml2X2RhdGEpIHsKLQkJZG1hc291bmRfaW5pdChkZXYpOworCWlmIChzYWE3MTM0X2RtYXNvdW5kX2luaXQgJiYgIWRldi0+ZG1hc291bmQucHJpdl9kYXRhKSB7CisJCXNhYTcxMzRfZG1hc291bmRfaW5pdChkZXYpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTAzNiw4ICsxMDM2LDggQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9tcGVnX29wcyAqbW9wczsKIAogCS8qIFJlbGVhc2UgRE1BIHNvdW5kIG1vZHVsZXMgaWYgcHJlc2VudCAqLwotCWlmIChkbWFzb3VuZF9leGl0ICYmIGRldi0+ZG1hc291bmQucHJpdl9kYXRhKSB7Ci0JCWRtYXNvdW5kX2V4aXQoZGV2KTsKKwlpZiAoc2FhNzEzNF9kbWFzb3VuZF9leGl0ICYmIGRldi0+ZG1hc291bmQucHJpdl9kYXRhKSB7CisJCXNhYTcxMzRfZG1hc291bmRfZXhpdChkZXYpOwogCX0KIAogCS8qIGRlYnVnZ2luZyAuLi4gKi8KQEAgLTExNjksOCArMTE2OSw4IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tIGZvciB0aGUgRE1BIHNvdW5kIG1vZHVsZXMgLS0tLS0tLS0tLS0tLS0tICovCiAKLUVYUE9SVF9TWU1CT0woZG1hc291bmRfaW5pdCk7Ci1FWFBPUlRfU1lNQk9MKGRtYXNvdW5kX2V4aXQpOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X2RtYXNvdW5kX2luaXQpOworRVhQT1JUX1NZTUJPTChzYWE3MTM0X2RtYXNvdW5kX2V4aXQpOwogRVhQT1JUX1NZTUJPTChzYWE3MTM0X3BndGFibGVfZnJlZSk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfcGd0YWJsZV9idWlsZCk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfcGd0YWJsZV9hbGxvYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1vc3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jCmluZGV4IDM4OTVkMDUuLjJlM2JhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LW9zcy5jCkBAIC05OTMsOSArOTkzLDkgQEAKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCWlmICghZG1hc291bmRfaW5pdCAmJiAhZG1hc291bmRfZXhpdCkgewotCQlkbWFzb3VuZF9pbml0ID0gb3NzX2RldmljZV9pbml0OwotCQlkbWFzb3VuZF9leGl0ID0gb3NzX2RldmljZV9leGl0OworCWlmICghc2FhNzEzNF9kbWFzb3VuZF9pbml0ICYmICFzYWE3MTM0X2RtYXNvdW5kX2V4aXQpIHsKKwkJc2FhNzEzNF9kbWFzb3VuZF9pbml0ID0gb3NzX2RldmljZV9pbml0OworCQlzYWE3MTM0X2RtYXNvdW5kX2V4aXQgPSBvc3NfZGV2aWNlX2V4aXQ7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic2FhNzEzNCBPU1M6IGNhbid0IGxvYWQsIERNQSBzb3VuZCBoYW5kbGVyIGFscmVhZHkgYXNzaWduZWQgKHByb2JhYmx5IHRvIEFMU0EpXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTEwMzcsOCArMTAzNyw4IEBACiAKIAl9CiAKLQlkbWFzb3VuZF9pbml0ID0gTlVMTDsKLQlkbWFzb3VuZF9leGl0ID0gTlVMTDsKKwlzYWE3MTM0X2RtYXNvdW5kX2luaXQgPSBOVUxMOworCXNhYTcxMzRfZG1hc291bmRfZXhpdCA9IE5VTEw7CiAKIAlwcmludGsoS0VSTl9JTkZPICJzYWE3MTM0IE9TUyBkcml2ZXIgZm9yIERNQSBzb3VuZCB1bmxvYWRlZFxuIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCmluZGV4IGU0MTU2ZWMuLjJjMTcxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYwpAQCAtNDAsNyArNDAsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHZpZGVvX2RlYnVnICAgPSAwOwogc3RhdGljIHVuc2lnbmVkIGludCBnYnVmZmVycyAgICAgID0gODsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbm9uaW50ZXJsYWNlZCA9IDA7CitzdGF0aWMgdW5zaWduZWQgaW50IG5vbmludGVybGFjZWQgPSAxOwogc3RhdGljIHVuc2lnbmVkIGludCBnYnVmc2l6ZSAgICAgID0gNzIwKjU3Nio0Owogc3RhdGljIHVuc2lnbmVkIGludCBnYnVmc2l6ZV9tYXggID0gNzIwKjU3Nio0OwogbW9kdWxlX3BhcmFtKHZpZGVvX2RlYnVnLCBpbnQsIDA2NDQpOwpAQCAtNDgsNyArNDgsNyBAQAogbW9kdWxlX3BhcmFtKGdidWZmZXJzLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhnYnVmZmVycywibnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycywgcmFuZ2UgMi0zMiIpOwogbW9kdWxlX3BhcmFtKG5vbmludGVybGFjZWQsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vbmludGVybGFjZWQsInZpZGVvIGlucHV0IGlzIG5vbmludGVybGFjZWQiKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9uaW50ZXJsYWNlZCwiY2FwdHVyZSBub24gaW50ZXJsYWNlZCB2aWRlbyIpOwogCiAjZGVmaW5lIGRwcmludGsoZm10LCBhcmcuLi4pCWlmICh2aWRlb19kZWJ1ZykgXAogCXByaW50ayhLRVJOX0RFQlVHICIlcy92aWRlbzogIiBmbXQsIGRldi0+bmFtZSAsICMjIGFyZykKQEAgLTIwODcsNyArMjA4Nyw3IEBACiAJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKIAkJcmV0dXJuIHNhYTcxMzRfdHJ5X2ZtdChkZXYsZmgsZik7CiAJfQotI2lmZGVmIEhBVkVfVjRMMQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAogCWNhc2UgVklESU9DR01CVUY6CiAJewogCQlzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZiA9IGFyZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IGQ1ZWU5OWMuLmMwNGNlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtNTg2LDggKzU4Niw4IEBACiAKIGludCBzYWE3MTM0X3NldF9kbWFiaXRzKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKIAotZXh0ZXJuIGludCAoKmRtYXNvdW5kX2luaXQpKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2KTsKLWV4dGVybiBpbnQgKCpkbWFzb3VuZF9leGl0KShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CitleHRlcm4gaW50ICgqc2FhNzEzNF9kbWFzb3VuZF9pbml0KShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CitleHRlcm4gaW50ICgqc2FhNzEzNF9kbWFzb3VuZF9leGl0KShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc3RyYWRpcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKaW5kZXggYjM2YmE5Zi4uNTY4NjU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zdHJhZGlzLmMKQEAgLTIxODEsNyArMjE4MSw2IEBACiAJeyAwIH0KIH07CiAKLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBzdHJhZGlzX3BjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc3RyYWRpc19kcml2ZXIgPSB7CiAJLm5hbWUgPSAic3RyYWRpcyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IGY3ZWI0MDIuLjQwNTkwYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0xOTYsMTQgKzE5Niw2IEBACiAJCWkyY19tYXN0ZXJfc2VuZChjLCBidWZmZXIsIDQpOwogCQlkZWZhdWx0X3R1bmVyX2luaXQoYyk7CiAJCWJyZWFrOwotCWNhc2UgVFVORVJfTEdfVERWU19IMDZYRjoKLQkJLyogU2V0IHRoZSBBdXhpbGlhcnkgQnl0ZS4gKi8KLQkJYnVmZmVyWzJdICY9IH4weDIwOwotCQlidWZmZXJbMl0gfD0gMHgxODsKLQkJYnVmZmVyWzNdID0gMHgyMDsKLQkJaTJjX21hc3Rlcl9zZW5kKGMsIGJ1ZmZlciwgNCk7Ci0JCWRlZmF1bHRfdHVuZXJfaW5pdChjKTsKLQkJYnJlYWs7CiAJY2FzZSBUVU5FUl9QSElMSVBTX1REMTMxNjoKIAkJYnVmZmVyWzBdID0gMHgwYjsKIAkJYnVmZmVyWzFdID0gMHhkYzsKQEAgLTU5OCw2ICs1OTAsNyBAQAogCQlpZiAodC0+c3RhbmRieSkKIAkJCXQtPnN0YW5kYnkgKGNsaWVudCk7CiAJCWJyZWFrOworI2lmZGVmIENPTkZJR19WSURFT19WNEwxCiAJY2FzZSBWSURJT0NTQVVESU86CiAJCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NTQVVESU8iKSA9PSBFSU5WQUwpCiAJCQlyZXR1cm4gMDsKQEAgLTYwNywxNyArNjAwLDYgQEAKIAkJLyogU2hvdWxkIGJlIGltcGxlbWVudGVkLCBzaW5jZSBidHR2IGNhbGxzIGl0ICovCiAJCXR1bmVyX2RiZygiVklESU9DU0FVRElPIG5vdCBpbXBsZW1lbnRlZC5cbiIpOwogCQlicmVhazsKLQljYXNlIFREQTk4ODdfU0VUX0NPTkZJRzoKLQkJaWYgKHQtPnR5cGUgPT0gVFVORVJfVERBOTg4NykgewotCQkJaW50ICppID0gYXJnOwotCi0JCQl0LT50ZGE5ODg3X2NvbmZpZyA9ICppOwotCQkJc2V0X2ZyZXEoY2xpZW50LCB0LT50dl9mcmVxKTsKLQkJfQotCQlicmVhazsKLQkvKiAtLS0gdjRsIGlvY3RscyAtLS0gKi8KLQkvKiB0YWtlIGNhcmU6IGJ0dHYgZG9lcyB1c2Vyc3BhY2UgY29weWluZywgd2UnbGwgZ2V0IGEKLQkgICBrZXJuZWwgcG9pbnRlciBoZXJlLi4uICovCiAJY2FzZSBWSURJT0NTQ0hBTjoKIAkJewogCQkJc3RhdGljIGNvbnN0IHY0bDJfc3RkX2lkIG1hcFtdID0gewpAQCAtNzAxLDcgKzY4MywxOCBAQAogCQkJCSAgICA/IFZJREVPX1NPVU5EX1NURVJFTyA6IFZJREVPX1NPVU5EX01PTk87CiAJCQlyZXR1cm4gMDsKIAkJfQorI2VuZGlmCisJY2FzZSBUREE5ODg3X1NFVF9DT05GSUc6CisJCWlmICh0LT50eXBlID09IFRVTkVSX1REQTk4ODcpIHsKKwkJCWludCAqaSA9IGFyZzsKIAorCQkJdC0+dGRhOTg4N19jb25maWcgPSAqaTsKKwkJCXNldF9mcmVxKGNsaWVudCwgdC0+dHZfZnJlcSk7CisJCX0KKwkJYnJlYWs7CisJLyogLS0tIHY0bCBpb2N0bHMgLS0tICovCisJLyogdGFrZSBjYXJlOiBidHR2IGRvZXMgdXNlcnNwYWNlIGNvcHlpbmcsIHdlJ2xsIGdldCBhCisJICAga2VybmVsIHBvaW50ZXIgaGVyZS4uLiAqLwogCWNhc2UgVklESU9DX1NfU1REOgogCQl7CiAJCQl2NGwyX3N0ZF9pZCAqaWQgPSBhcmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYwppbmRleCBkMDcxYzVjLi5hYmUzN2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKQEAgLTMzOSw3ICszMzksMjAgQEAKIAlpZiAoNCAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsNCkpKQogCQl0dW5lcl93YXJuKCJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDQpXG4iLHJjKTsKIAotCWlmICh0LT50eXBlID09IFRVTkVSX01JQ1JPVFVORV80MDQyRkk1KSB7CisJc3dpdGNoICh0LT50eXBlKSB7CisJY2FzZSBUVU5FUl9MR19URFZTX0gwNlhGOgorCQkvKiBTZXQgdGhlIEF1eGlsaWFyeSBCeXRlLiAqLworCQlidWZmZXJbMF0gPSBidWZmZXJbMl07CisJCWJ1ZmZlclswXSAmPSB+MHgyMDsKKwkJYnVmZmVyWzBdIHw9IDB4MTg7CisJCWJ1ZmZlclsxXSA9IDB4MjA7CisJCXR1bmVyX2RiZygidHYgMHglMDJ4IDB4JTAyeFxuIixidWZmZXJbMF0sYnVmZmVyWzFdKTsKKworCQlpZiAoMiAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoYyxidWZmZXIsMikpKQorCQkJdHVuZXJfd2FybigiaTJjIGkvbyBlcnJvcjogcmMgPT0gJWQgKHNob3VsZCBiZSAyKVxuIixyYyk7CisJCWJyZWFrOworCWNhc2UgVFVORVJfTUlDUk9UVU5FXzQwNDJGSTU6CisJewogCQkvLyBGSVhNRSAtIHRoaXMgbWF5IGFsc28gd29yayBmb3Igb3RoZXIgdHVuZXJzCiAJCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEpOwogCQl1OCBzdGF0dXNfYnl0ZSA9IDA7CkBAIC0zNjQsMTAgKzM3NywxMiBAQAogCQlidWZmZXJbMl0gPSBjb25maWc7CiAJCWJ1ZmZlclszXSA9IGNiOwogCQl0dW5lcl9kYmcoInR2IDB4JTAyeCAweCUwMnggMHglMDJ4IDB4JTAyeFxuIiwKLQkJICAgICAgIGJ1ZmZlclswXSxidWZmZXJbMV0sYnVmZmVyWzJdLGJ1ZmZlclszXSk7CisJCQkgIGJ1ZmZlclswXSxidWZmZXJbMV0sYnVmZmVyWzJdLGJ1ZmZlclszXSk7CiAKIAkJaWYgKDQgIT0gKHJjID0gaTJjX21hc3Rlcl9zZW5kKGMsYnVmZmVyLDQpKSkKIAkJCXR1bmVyX3dhcm4oImkyYyBpL28gZXJyb3I6IHJjID09ICVkIChzaG91bGQgYmUgNClcbiIscmMpOworCQlicmVhazsKKwl9CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKaW5kZXggYTE2N2UxNy4uOGI1NDI1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYwpAQCAtOTI2LDExICs5MjYsMTcgQEAKIAogLyogLS0tLS0tLS0tLS0tIFRVTkVSX1lNRUNfVFZGNjZUNV9CX0RGRiAtIFBoaWxpcHMgUEFMIC0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3ltZWNfdHZmNjZ0NV9iX2RmZl9wYWxfcmFuZ2VzW10gPSB7CisJeyAxNiAqIDE2MC4yNSAvKk1IeiovLCAweDhlLCAweDAxLCB9LAorCXsgMTYgKiA0NjQuMjUgLypNSHoqLywgMHg4ZSwgMHgwMiwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4OGUsIDB4MDgsIH0sCit9OworCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl95bWVjX3R2ZjY2dDVfYl9kZmZfcGFyYW1zW10gPSB7CiAJewogCQkudHlwZSAgID0gVFVORVJfUEFSQU1fVFlQRV9QQUwsCi0JCS5yYW5nZXMgPSB0dW5lcl90ZW5hXzk1MzNfZGlfcGFsX3JhbmdlcywKLQkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVuYV85NTMzX2RpX3BhbF9yYW5nZXMpLAorCQkucmFuZ2VzID0gdHVuZXJfeW1lY190dmY2NnQ1X2JfZGZmX3BhbF9yYW5nZXMsCisJCS5jb3VudCAgPSBBUlJBWV9TSVpFKHR1bmVyX3ltZWNfdHZmNjZ0NV9iX2RmZl9wYWxfcmFuZ2VzKSwKIAl9LAogfTsKIApAQCAtMTAyNywxMCArMTAzMywxMSBAQAogLyogNzAtNzkgKi8KIC8qIC0tLS0tLS0tLS0tLSBUVU5FUl9TQU1TVU5HX1RDUE5fMjEyMVAzMEEgLSBTYW1zdW5nIE5UU0MgLS0tLS0tLS0tLS0tICovCiAKKy8qICcrIDQnIHR1cm5zIG9uIHRoZSBMb3cgTm9pc2UgQW1wbGlmaWVyICovCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3NhbXN1bmdfdGNwbl8yMTIxcDMwYV9udHNjX3Jhbmdlc1tdID0gewotCXsgMTYgKiAxMzAuMDAgLypNSHoqLywgMHhjZSwgMHgwMSwgfSwKLQl7IDE2ICogMzY0LjUwIC8qTUh6Ki8sIDB4Y2UsIDB4MDIsIH0sCi0JeyAxNiAqIDk5OS45OSAgICAgICAgLCAweGNlLCAweDA4LCB9LAorCXsgMTYgKiAxMzAuMDAgLypNSHoqLywgMHhjZSwgMHgwMSArIDQsIH0sCisJeyAxNiAqIDM2NC41MCAvKk1IeiovLCAweGNlLCAweDAyICsgNCwgfSwKKwl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4Y2UsIDB4MDggKyA0LCB9LAogfTsKIAogc3RhdGljIHN0cnVjdCB0dW5lcl9wYXJhbXMgdHVuZXJfc2Ftc3VuZ190Y3BuXzIxMjFwMzBhX3BhcmFtc1tdID0gewpAQCAtMTA2MCwxMCArMTA2NywxMSBAQAogCiAvKiAtLS0tLS0tLS0tLS0gVFVORVJfU0FNU1VOR19UQ1BHXzYxMjFQMzBBIC0gU2Ftc3VuZyBQQUwgLS0tLS0tLS0tLS0tICovCiAKKy8qICcrIDQnIHR1cm5zIG9uIHRoZSBMb3cgTm9pc2UgQW1wbGlmaWVyICovCiBzdGF0aWMgc3RydWN0IHR1bmVyX3JhbmdlIHR1bmVyX3NhbXN1bmdfdGNwZ182MTIxcDMwYV9wYWxfcmFuZ2VzW10gPSB7Ci0JeyAxNiAqIDE0Ni4yNSAvKk1IeiovLCAweGNlLCAweDAxLCB9LAotCXsgMTYgKiA0MjguNTAgLypNSHoqLywgMHhjZSwgMHgwMiwgfSwKLQl7IDE2ICogOTk5Ljk5ICAgICAgICAsIDB4Y2UsIDB4MDgsIH0sCisJeyAxNiAqIDE0Ni4yNSAvKk1IeiovLCAweGNlLCAweDAxICsgNCwgfSwKKwl7IDE2ICogNDI4LjUwIC8qTUh6Ki8sIDB4Y2UsIDB4MDIgKyA0LCB9LAorCXsgMTYgKiA5OTkuOTkgICAgICAgICwgMHhjZSwgMHgwOCArIDQsIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHR1bmVyX3BhcmFtcyB0dW5lcl9zYW1zdW5nX3RjcGdfNjEyMXAzMGFfcGFyYW1zW10gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWcKaW5kZXggNTlmYjg5OS4uYTBmZDgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vS2NvbmZpZwpAQCAtMyw3ICszLDcgQEAKIAogY29uZmlnIFVTQl9WSUNBTQogCXRyaXN0YXRlICJVU0IgM2NvbSBIb21lQ29ubmVjdCAoYWthIHZpY2FtKSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIFZJREVPX1Y0TDEgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFZJREVPX1VTQlZJREVPCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSAzY29tIGhvbWVjb25uZWN0IGNhbWVyYSAodmljYW0pLgpAQCAtMTMsNyArMTMsNyBAQAogCiBjb25maWcgVVNCX0lCTUNBTQogCXRyaXN0YXRlICJVU0IgSUJNIChYaXJsaW5rKSBDLWl0IENhbWVyYSBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19VU0JWSURFTwogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIElCTSAiQy1JdCIgY2FtZXJhLCBhbHNvIGtub3duIGFzCkBAIC0yOCw3ICsyOCw3IEBACiAKIGNvbmZpZyBVU0JfS09OSUNBV0MKIAl0cmlzdGF0ZSAiVVNCIEtvbmljYSBXZWJjYW0gc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgVklERU9fVVNCVklERU8KIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHdlYmNhbXMgYmFzZWQgb24gYSBLb25pY2EKQEAgLTM5LDcgKzM5LDcgQEAKIAogY29uZmlnIFVTQl9RVUlDS0NBTV9NRVNTRU5HRVIKIAl0cmlzdGF0ZSAiVVNCIExvZ2l0ZWNoIFF1aWNrY2FtIE1lc3NlbmdlciIKLQlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYKKwlkZXBlbmRzIG9uIFVTQiAmJiBWSURFT19ERVYgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19VU0JWSURFTwogCS0tLWhlbHAtLS0KIAkgIFNheSBZIG9yIE0gaGVyZSB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIFVTQiBMb2dpdGVjaCBRdWlja2NhbQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IGQ4M2EyYzguLmQ3YzNmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTU5OSw2ICs1OTksMTAgQEAKIAkJCWRwcmludGsoIlZJRElPQ0dQSUNUIC8gVklESU9DX0dfRk1UOiAlZFxuIixlcnIpOwogCQkJYnJlYWs7CiAJCX0KKworCQlwaWN0LT5kZXB0aCAgID0gKChmbXQyLT5mbXQucGl4LmJ5dGVzcGVybGluZTw8MykKKwkJCQkgKyAoZm10Mi0+Zm10LnBpeC53aWR0aC0xKSApCisJCQkJIC9mbXQyLT5mbXQucGl4LndpZHRoOwogCQlwaWN0LT5wYWxldHRlID0gcGl4ZWxmb3JtYXRfdG9fcGFsZXR0ZSgKIAkJCWZtdDItPmZtdC5waXgucGl4ZWxmb3JtYXQpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCBmMDZkYzE5Li44ZDk3MmZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGRlYnVnIGhlbHAgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0jaWZkZWYgSEFWRV9WNEwxCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiBzdGF0aWMgY29uc3QgY2hhciAqdjRsMV9pb2N0bHNbXSA9IHsKIAlbX0lPQ19OUihWSURJT0NHQ0FQKV0gICAgICAgPSAiVklESU9DR0NBUCIsCiAJW19JT0NfTlIoVklESU9DR0NIQU4pXSAgICAgID0gIlZJRElPQ0dDSEFOIiwKQEAgLTMwMSw3ICszMDEsNyBAQAogI2RlZmluZSBWNEwyX0lPQ1RMUyBBUlJBWV9TSVpFKHY0bDJfaW9jdGxzKQogCiBzdGF0aWMgY29uc3QgY2hhciAqdjRsMl9pbnRfaW9jdGxzW10gPSB7Ci0jaWZkZWYgSEFWRV9WSURFT19ERUNPREVSCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJW19JT0NfTlIoREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTKV0gICAgPSAiREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTIiwKIAlbX0lPQ19OUihERUNPREVSX0dFVF9TVEFUVVMpXSAgICAgICAgICA9ICJERUNPREVSX0dFVF9TVEFUVVMiLAogCVtfSU9DX05SKERFQ09ERVJfU0VUX05PUk0pXSAgICAgICAgICAgID0gIkRFQ09ERVJfU0VUX05PUk0iLApAQCAtMzY3LDcgKzM2Nyw3IEBACiAJCSAgICAgICAoX0lPQ19OUihjbWQpIDwgVjRMMl9JTlRfSU9DVExTKSA/CiAJCSAgICAgICB2NGwyX2ludF9pb2N0bHNbX0lPQ19OUihjbWQpXSA6ICJVTktOT1dOIiwgZGlyLCBjbWQpOwogCQlicmVhazsKLSNpZmRlZiBIQVZFX1Y0TDEKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAljYXNlICd2JzoKIAkJcHJpbnRrKCJ2NGwxIGlvY3RsICVzLCBkaXI9JXMgKDB4JTA4eClcbiIsCiAJCSAgICAgICAoX0lPQ19OUihjbWQpIDwgVjRMMV9JT0NUTFMpID8KQEAgLTQxNCw2ICs0MTQsNyBAQAogCQlwcmludGsgKCIlczogdHVuZXIgdHlwZT0lZFxuIiwgcywgKnApOwogCQlicmVhazsKIAl9CisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJY2FzZSBERUNPREVSX1NFVF9WQklfQllQQVNTOgogCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgogCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgpAQCAtNDI0LDYgKzQyNSw3IEBACiAJY2FzZSBWSURJT0NDQVBUVVJFOgogCWNhc2UgVklESU9DU1lOQzoKIAljYXNlIFZJRElPQ1NXUklURU1PREU6CisjZW5kaWYKIAljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6CiAJY2FzZSBUVU5FUl9TRVRfU1RBTkRCWToKIAljYXNlIFREQTk4ODdfU0VUX0NPTkZJRzoKQEAgLTc1NSw2ICs3NTcsNyBAQAogCQkJCXAtPmFmYyk7CiAJCWJyZWFrOwogCX0KKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAljYXNlIFZJRElPQ0dWQklGTVQ6CiAJY2FzZSBWSURJT0NTVkJJRk1UOgogCXsKQEAgLTkyNCw2ICs5MjcsMTQgQEAKIAkJCQlwLT5jbGlwY291bnQpOwogCQlicmVhazsKIAl9CisJY2FzZSBWSURJT0NHRlJFUToKKwljYXNlIFZJRElPQ1NGUkVROgorCXsKKwkJdW5zaWduZWQgbG9uZyAqcD1hcmc7CisJCXByaW50ayAoIiVzOiB2YWx1ZT0lbHVcbiIsIHMsICpwKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCiAJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6CiAJY2FzZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVROgogCWNhc2UgVklESU9DX0lOVF9TX1NUQU5EQlk6CkBAIC05MzMsMTMgKzk0NCw2IEBACiAJCXByaW50ayAoIiVzOiB2YWx1ZT0lZFxuIiwgcywgKnApOwogCQlicmVhazsKIAl9Ci0JY2FzZSBWSURJT0NHRlJFUToKLQljYXNlIFZJRElPQ1NGUkVROgotCXsKLQkJdW5zaWduZWQgbG9uZyAqcD1hcmc7Ci0JCXByaW50ayAoIiVzOiB2YWx1ZT0lbHVcbiIsIHMsICpwKTsKLQkJYnJlYWs7Ci0JfQogCWNhc2UgVklESU9DX0dfU1REOgogCWNhc2UgVklESU9DX1NfU1REOgogCWNhc2UgVklESU9DX1FVRVJZU1REOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCmluZGV4IGIyNmViYWYuLjg4YmYyYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKQEAgLTc2MCw3ICs3NjAsNyBAQAogCQlyZXQ9dmZkLT52aWRpb2Nfb3ZlcmxheShmaWxlLCBmaCwgKmkpOwogCQlicmVhazsKIAl9Ci0jaWZkZWYgSEFWRV9WNEwxCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJLyogLS0tIHN0cmVhbWluZyBjYXB0dXJlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAljYXNlIFZJRElPQ0dNQlVGOgogCXsKQEAgLTE1MTIsNiArMTUxMiw3IEBACiAJaW50IGk9MDsKIAlpbnQgYmFzZTsKIAlpbnQgZW5kOworCWludCByZXQ7CiAJY2hhciAqbmFtZV9iYXNlOwogCiAJc3dpdGNoKHR5cGUpCkBAIC0xNTM3LDYgKzE1MzgsOCBAQAogCQkJbmFtZV9iYXNlID0gInJhZGlvIjsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBjYWxsZWQgd2l0aCB1bmtub3duIHR5cGU6ICVkXG4iLAorCQkJICAgICAgIF9fRlVOQ1RJT05fXywgdHlwZSk7CiAJCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xNTcxLDkgKzE1NzQsMTggQEAKIAl2ZmQtPmNsYXNzX2Rldi5jbGFzcyAgICAgICA9ICZ2aWRlb19jbGFzczsKIAl2ZmQtPmNsYXNzX2Rldi5kZXZ0ICAgICAgICA9IE1LREVWKFZJREVPX01BSk9SLCB2ZmQtPm1pbm9yKTsKIAlzcHJpbnRmKHZmZC0+Y2xhc3NfZGV2LmNsYXNzX2lkLCAiJXMlZCIsIG5hbWVfYmFzZSwgaSAtIGJhc2UpOwotCWNsYXNzX2RldmljZV9yZWdpc3RlcigmdmZkLT5jbGFzc19kZXYpOwotCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmZkLT5jbGFzc19kZXYsCi0JCQkJJmNsYXNzX2RldmljZV9hdHRyX25hbWUpOworCXJldCA9IGNsYXNzX2RldmljZV9yZWdpc3RlcigmdmZkLT5jbGFzc19kZXYpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNsYXNzX2RldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGZhaWxfbWlub3I7CisJfQorCXJldCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmdmZkLT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9uYW1lKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUgJ25hbWUnIGZhaWxlZFxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXyk7CisJCWdvdG8gZmFpbF9jbGFzc2RldjsKKwl9CiAKICNpZiAxCiAJLyogbmVlZGVkIHVudGlsIGFsbCBkcml2ZXJzIGFyZSBmaXhlZCAqLwpAQCAtMTU4Myw2ICsxNTk1LDE1IEBACiAJCSAgICAgICAiaHR0cDovL2x3bi5uZXQvQXJ0aWNsZXMvMzY4NTAvXG4iLCB2ZmQtPm5hbWUpOwogI2VuZGlmCiAJcmV0dXJuIDA7CisKK2ZhaWxfY2xhc3NkZXY6CisJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoJnZmZC0+Y2xhc3NfZGV2KTsKK2ZhaWxfbWlub3I6CisJbXV0ZXhfbG9jaygmdmlkZW9kZXZfbG9jayk7CisJdmlkZW9fZGV2aWNlW3ZmZC0+bWlub3JdID0gTlVMTDsKKwl2ZmQtPm1pbm9yID0gLTE7CisJbXV0ZXhfdW5sb2NrKCZ2aWRlb2Rldl9sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKaW5kZXggNDFkMjNjOC4uODQxODg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMKQEAgLTk4Niw3ICs5ODYsNyBAQAogCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSk7CiB9CiAKLSNpZmRlZiBIQVZFX1Y0TDEKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIHN0YXRpYyBpbnQgdmlkaW9jZ21idWYgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdmlkZW9fbWJ1ZiAqbWJ1ZikKIHsKIAlzdHJ1Y3Qgdml2aV9maCAgKmZoPXByaXY7CkBAIC0xMzI4LDcgKzEzMjgsNyBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgICA9IHZpZGlvY19zX2N0cmwsCiAJLnZpZGlvY19zdHJlYW1vbiAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAogCS52aWRpb2Nfc3RyZWFtb2ZmICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCi0jaWZkZWYgSEFWRV9WNEwxCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAJLnZpZGlvY2dtYnVmICAgICAgICAgID0gdmlkaW9jZ21idWYsCiAjZW5kaWYKIAkudHZub3JtcyAgICAgICAgICAgICAgPSB0dm5vcm1zLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi5oCmluZGV4IGZmY2RhOTUuLjhmYjRhMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuLmgKQEAgLTI2Nyw3ICsyNjcsNyBAQAogfTsKIAogLyogd2hvb3BzLCB0aGlzIG9uZSBpcyB1bmRlY2xhcmVkIGlmICF2NGwyICovCi0jaWZuZGVmIEhBVkVfVjRMMgorI2lmbmRlZiBDT05GSUdfVklERU9fVjRMMgogc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uIHsKIAlpbnQgcXVhbGl0eTsKIAlpbnQgQVBQbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCmluZGV4IGQ5YTU4NzYuLjVmOTBkYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwpAQCAtODYsNyArODYsNyBAQAogI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgogI2luY2x1ZGUgInpvcmFuX2NhcmQuaCIKIAotI2lmZGVmIEhBVkVfVjRMMgorI2lmZGVmIENPTkZJR19WSURFT19WNEwyCiAJLyogd2UgZGVjbGFyZSBzb21lIGNhcmQgdHlwZSBkZWZpbml0aW9ucyBoZXJlLCB0aGV5IG1lYW4KIAkgKiB0aGUgc2FtZSBhcyB0aGUgdjRsMSBaT1JBTl9WSURfVFlQRSBhYm92ZSwgZXhjZXB0IGl0J3MgdjRsMiAqLwogI2RlZmluZSBaT1JBTl9WNEwyX1ZJRF9GTEFHUyAoIFwKQEAgLTEwMyw3ICsxMDMsNyBAQAogCXsKIAkJLm5hbWUgPSAiMTUtYml0IFJHQiIsCiAJCS5wYWxldHRlID0gVklERU9fUEFMRVRURV9SR0I1NTUsCi0jaWZkZWYgSEFWRV9WNEwyCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDIKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KIAkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0I1NTUsCiAjZWxzZQpAQCAtMTE3LDcgKzExNyw3IEBACiAJfSwgewogCQkubmFtZSA9ICIxNi1iaXQgUkdCIiwKIAkJLnBhbGV0dGUgPSBWSURFT19QQUxFVFRFX1JHQjU2NSwKLSNpZmRlZiBIQVZFX1Y0TDIKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMgogI2lmZGVmIF9fTElUVExFX0VORElBTgogCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKICNlbHNlCkBAIC0xMzEsNyArMTMxLDcgQEAKIAl9LCB7CiAJCS5uYW1lID0gIjI0LWJpdCBSR0IiLAogCQkucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMjQsCi0jaWZkZWYgSEFWRV9WNEwyCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDIKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KIAkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IyNCwKICNlbHNlCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAl9LCB7CiAJCS5uYW1lID0gIjMyLWJpdCBSR0IiLAogCQkucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfUkdCMzIsCi0jaWZkZWYgSEFWRV9WNEwyCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDIKICNpZmRlZiBfX0xJVFRMRV9FTkRJQU4KIAkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IzMiwKICNlbHNlCkBAIC0xNTksNyArMTU5LDcgQEAKIAl9LCB7CiAJCS5uYW1lID0gIjQ6MjoyLCBwYWNrZWQsIFlVWVYiLAogCQkucGFsZXR0ZSA9IFZJREVPX1BBTEVUVEVfWVVWNDIyLAotI2lmZGVmIEhBVkVfVjRMMgorI2lmZGVmIENPTkZJR19WSURFT19WNEwyCiAJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfWVVZViwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAogI2VuZGlmCkBAIC0xNjksNyArMTY5LDcgQEAKIAl9LCB7CiAJCS5uYW1lID0gIkhhcmR3YXJlLWVuY29kZWQgTW90aW9uLUpQRUciLAogCQkucGFsZXR0ZSA9IC0xLAotI2lmZGVmIEhBVkVfVjRMMgorI2lmZGVmIENPTkZJR19WSURFT19WNEwyCiAJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfTUpQRUcsCiAJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKICNlbmRpZgpAQCAtMjEwLDcgKzIxMCw3IEBACiBtb2R1bGVfcGFyYW0obG9ja19ub3JtLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhsb2NrX25vcm0sICJVc2VycyBjYW4ndCBjaGFuZ2Ugbm9ybSIpOwogCi0jaWZkZWYgSEFWRV9WNEwyCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDIKIAkvKiBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIGJ1ZmZlcnNpemVzIGZvciB2NGwyCiAJICogd2UgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IGhpZ2hlciBwb3dlci1vZi10d28sIHdoaWNoCiAJICogd2lsbCBiZSB0aGUgcmVjb21tZW5kZWQgYnVmZmVyc2l6ZSAqLwpAQCAtMTc2MSw3ICsxNzYxLDcgQEAKIAlyZXR1cm4gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwogfQogCi0jaWZkZWYgSEFWRV9WNEwyCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDIKIAkvKiBnZXQgdGhlIHN0YXR1cyBvZiBhIGJ1ZmZlciBpbiB0aGUgY2xpZW50cyBidWZmZXIgcXVldWUgKi8KIHN0YXRpYyBpbnQKIHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyAoc3RydWN0IGZpbGUgICAgICAgICpmaWxlLApAQCAtMjY3Niw3ICsyNjc2LDcgQEAKIAl9CiAJCWJyZWFrOwogCi0jaWZkZWYgSEFWRV9WNEwyCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDIKIAogCQkvKiBUaGUgbmV3IHZpZGVvNGxpbnV4MiBjYXB0dXJlIGludGVyZmFjZSAtIG11Y2ggbmljZXIgdGhhbiB2aWRlbzRsaW51eDEsIHNpbmNlCiAJCSAqIGl0IGFsbG93cyBmb3IgaW50ZWdyYXRpbmcgdGhlIEpQRUcgY2FwdHVyaW5nIGNhbGxzIGluc2lkZSBzdGFuZGFyZCB2NGwyCkBAIC00Njg5LDcgKzQ2ODksNyBAQAogc3RydWN0IHZpZGVvX2RldmljZSB6b3Jhbl90ZW1wbGF0ZSBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gWk9SQU5fTkFNRSwKIAkudHlwZSA9IFpPUkFOX1ZJRF9UWVBFLAotI2lmZGVmIEhBVkVfVjRMMgorI2lmZGVmIENPTkZJR19WSURFT19WNEwyCiAJLnR5cGUyID0gWk9SQU5fVjRMMl9WSURfRkxBR1MsCiAjZW5kaWYKIAkuaGFyZHdhcmUgPSBaT1JBTl9IQVJEV0FSRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0YmFzZS5oIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKaW5kZXggZDRjYjE0NC4uYzUzN2Q3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKKysrIGIvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRiYXNlLmgKQEAgLTY0MCw3ICs2NDAsNiBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdAkgZmNfc2V0dXBfcmVzZXRfd29yazsKIAlzdHJ1Y3QgbGlzdF9oZWFkCSBmY19ycG9ydHM7CiAJc3BpbmxvY2tfdAkJIGZjX3Jlc2Nhbl93b3JrX2xvY2s7Ci0JaW50CQkJIGZjX3Jlc2Nhbl93b3JrX2NvdW50OwogCXN0cnVjdCB3b3JrX3N0cnVjdAkgZmNfcmVzY2FuX3dvcms7CiAJY2hhcgkJCSBmY19yZXNjYW5fd29ya19xX25hbWVbS09CSl9OQU1FX0xFTl07CiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmZjX3Jlc2Nhbl93b3JrX3E7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMgYi9kcml2ZXJzL21lc3NhZ2UvZnVzaW9uL21wdGZjLmMKaW5kZXggOTBkYTdkNi4uODU2OTZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2Z1c2lvbi9tcHRmYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9mdXNpb24vbXB0ZmMuYwpAQCAtNjY5LDcgKzY2OSwxMCBAQAogCQkJICogaWYgc3RpbGwgZG9pbmcgZGlzY292ZXJ5LAogCQkJICogaGFuZyBsb29zZSBhIHdoaWxlIHVudGlsIGZpbmlzaGVkCiAJCQkgKi8KLQkJCWlmIChwcDBkZXN0LT5Qb3J0U3RhdGUgPT0gTVBJX0ZDUE9SVFBBR0UwX1BPUlRTVEFURV9VTktOT1dOKSB7CisJCQlpZiAoKHBwMGRlc3QtPlBvcnRTdGF0ZSA9PSBNUElfRkNQT1JUUEFHRTBfUE9SVFNUQVRFX1VOS05PV04pIHx8CisJCQkgICAgKHBwMGRlc3QtPlBvcnRTdGF0ZSA9PSBNUElfRkNQT1JUUEFHRTBfUE9SVFNUQVRFX09OTElORSAmJgorCQkJICAgICAocHAwZGVzdC0+RmxhZ3MgJiBNUElfRkNQT1JUUEFHRTBfRkxBR1NfQVRUQUNIX1RZUEVfTUFTSykKKwkJCSAgICAgID09IE1QSV9GQ1BPUlRQQUdFMF9GTEFHU19BVFRBQ0hfTk9fSU5JVCkpIHsKIAkJCQlpZiAoY291bnQtLSA+IDApIHsKIAkJCQkJbXNsZWVwKDEwMCk7CiAJCQkJCWdvdG8gdHJ5X2FnYWluOwpAQCAtODk1LDU5ICs4OTgsNDUgQEAKIHsKIAlNUFRfQURBUFRFUgkJKmlvYyA9IChNUFRfQURBUFRFUiAqKWFyZzsKIAlpbnQJCQlpaTsKLQlpbnQJCQl3b3JrX3RvX2RvOwogCXU2NAkJCXBuOwotCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCXN0cnVjdCBtcHRmY19ycG9ydF9pbmZvICpyaTsKIAotCWRvIHsKLQkJLyogc3RhcnQgYnkgdGFnZ2luZyBhbGwgcG9ydHMgYXMgbWlzc2luZyAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJpLCAmaW9jLT5mY19ycG9ydHMsIGxpc3QpIHsKLQkJCWlmIChyaS0+ZmxhZ3MgJiBNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEKSB7Ci0JCQkJcmktPmZsYWdzIHw9IE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01JU1NJTkc7Ci0JCQl9CisJLyogc3RhcnQgYnkgdGFnZ2luZyBhbGwgcG9ydHMgYXMgbWlzc2luZyAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkocmksICZpb2MtPmZjX3Jwb3J0cywgbGlzdCkgeworCQlpZiAocmktPmZsYWdzICYgTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRCkgeworCQkJcmktPmZsYWdzIHw9IE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01JU1NJTkc7CiAJCX0KKwl9CiAKLQkJLyoKLQkJICogbm93IHJlc2NhbiBkZXZpY2VzIGtub3duIHRvIGFkYXB0ZXIsCi0JCSAqIHdpbGwgcmVyZWdpc3RlciBleGlzdGluZyBycG9ydHMKLQkJICovCi0JCWZvciAoaWk9MDsgaWkgPCBpb2MtPmZhY3RzLk51bWJlck9mUG9ydHM7IGlpKyspIHsKLQkJCSh2b2lkKSBtcHRmY19HZXRGY1BvcnRQYWdlMChpb2MsIGlpKTsKLQkJCW1wdGZjX2luaXRfaG9zdF9hdHRyKGlvYyxpaSk7CS8qIHJlZnJlc2ggKi8KLQkJCW1wdGZjX0dldEZjRGV2UGFnZTAoaW9jLGlpLG1wdGZjX3JlZ2lzdGVyX2Rldik7CisJLyoKKwkgKiBub3cgcmVzY2FuIGRldmljZXMga25vd24gdG8gYWRhcHRlciwKKwkgKiB3aWxsIHJlcmVnaXN0ZXIgZXhpc3RpbmcgcnBvcnRzCisJICovCisJZm9yIChpaT0wOyBpaSA8IGlvYy0+ZmFjdHMuTnVtYmVyT2ZQb3J0czsgaWkrKykgeworCQkodm9pZCkgbXB0ZmNfR2V0RmNQb3J0UGFnZTAoaW9jLCBpaSk7CisJCW1wdGZjX2luaXRfaG9zdF9hdHRyKGlvYywgaWkpOwkvKiByZWZyZXNoICovCisJCW1wdGZjX0dldEZjRGV2UGFnZTAoaW9jLCBpaSwgbXB0ZmNfcmVnaXN0ZXJfZGV2KTsKKwl9CisKKwkvKiBkZWxldGUgZGV2aWNlcyBzdGlsbCBtaXNzaW5nICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyaSwgJmlvYy0+ZmNfcnBvcnRzLCBsaXN0KSB7CisJCS8qIGlmIG5ld2x5IG1pc3NpbmcsIGRlbGV0ZSBpdCAqLworCQlpZiAocmktPmZsYWdzICYgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORykgeworCisJCQlyaS0+ZmxhZ3MgJj0gfihNUFRfUlBPUlRfSU5GT19GTEFHU19SRUdJU1RFUkVEfAorCQkJCSAgICAgICBNUFRfUlBPUlRfSU5GT19GTEFHU19NSVNTSU5HKTsKKwkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShyaS0+cnBvcnQpOwkvKiB3b24ndCBzbGVlcCAqLworCQkJcmktPnJwb3J0ID0gTlVMTDsKKworCQkJcG4gPSAodTY0KXJpLT5wZzAuV1dQTi5IaWdoIDw8IDMyIHwKKwkJCSAgICAgKHU2NClyaS0+cGcwLldXUE4uTG93OworCQkJZGZjcHJpbnRrICgoTVlJT0Nfc19JTkZPX0ZNVAorCQkJCSJtcHRmY19yZXNjYW4uJWQ6ICVsbHggZGVsZXRlZFxuIiwKKwkJCQlpb2MtPm5hbWUsCisJCQkJaW9jLT5zaC0+aG9zdF9ubywKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBuKSk7CiAJCX0KLQotCQkvKiBkZWxldGUgZGV2aWNlcyBzdGlsbCBtaXNzaW5nICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocmksICZpb2MtPmZjX3Jwb3J0cywgbGlzdCkgewotCQkJLyogaWYgbmV3bHkgbWlzc2luZywgZGVsZXRlIGl0ICovCi0JCQlpZiAocmktPmZsYWdzICYgTVBUX1JQT1JUX0lORk9fRkxBR1NfTUlTU0lORykgewotCi0JCQkJcmktPmZsYWdzICY9IH4oTVBUX1JQT1JUX0lORk9fRkxBR1NfUkVHSVNURVJFRHwKLQkJCQkJICAgICAgIE1QVF9SUE9SVF9JTkZPX0ZMQUdTX01JU1NJTkcpOwotCQkJCWZjX3JlbW90ZV9wb3J0X2RlbGV0ZShyaS0+cnBvcnQpOwkvKiB3b24ndCBzbGVlcCAqLwotCQkJCXJpLT5ycG9ydCA9IE5VTEw7Ci0KLQkJCQlwbiA9ICh1NjQpcmktPnBnMC5XV1BOLkhpZ2ggPDwgMzIgfAotCQkJCSAgICAgKHU2NClyaS0+cGcwLldXUE4uTG93OwotCQkJCWRmY3ByaW50ayAoKE1ZSU9DX3NfSU5GT19GTVQKLQkJCQkJIm1wdGZjX3Jlc2Nhbi4lZDogJWxseCBkZWxldGVkXG4iLAotCQkJCQlpb2MtPm5hbWUsCi0JCQkJCWlvYy0+c2gtPmhvc3Rfbm8sCi0JCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcG4pKTsKLQkJCX0KLQkJfQotCi0JCS8qCi0JCSAqIGFsbG93IG11bHRpcGxlIHBhc3NlcyBhcyB0YXJnZXQgc3RhdGUKLQkJICogbWlnaHQgaGF2ZSBjaGFuZ2VkIGR1cmluZyBzY2FuCi0JCSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7Ci0JCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX2NvdW50ID4gMikgCS8qIG9ubHkgbmVlZCBvbmUgbW9yZSAqLwotCQkJaW9jLT5mY19yZXNjYW5fd29ya19jb3VudCA9IDI7Ci0JCXdvcmtfdG9fZG8gPSAtLWlvYy0+ZmNfcmVzY2FuX3dvcmtfY291bnQ7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZmNfcmVzY2FuX3dvcmtfbG9jaywgZmxhZ3MpOwotCX0gd2hpbGUgKHdvcmtfdG9fZG8pOworCX0KIH0KIAogc3RhdGljIGludApAQCAtMTE1OSw3ICsxMTQ4LDYgQEAKIAkgKglieSBkb2luZyBpdCB2aWEgdGhlIHdvcmtxdWV1ZSwgc29tZSBsb2NraW5nIGlzIGVsaW1pbmF0ZWQKIAkgKi8KIAotCWlvYy0+ZmNfcmVzY2FuX3dvcmtfY291bnQgPSAxOwogCXF1ZXVlX3dvcmsoaW9jLT5mY19yZXNjYW5fd29ya19xLCAmaW9jLT5mY19yZXNjYW5fd29yayk7CiAJZmx1c2hfd29ya3F1ZXVlKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSk7CiAKQEAgLTEyMDIsMTAgKzExOTAsOCBAQAogCWNhc2UgTVBJX0VWRU5UX1JFU0NBTjoKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYy0+ZmNfcmVzY2FuX3dvcmtfbG9jaywgZmxhZ3MpOwogCQlpZiAoaW9jLT5mY19yZXNjYW5fd29ya19xKSB7Ci0JCQlpZiAoaW9jLT5mY19yZXNjYW5fd29ya19jb3VudCsrID09IDApIHsKLQkJCQlxdWV1ZV93b3JrKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSwKLQkJCQkJICAgJmlvYy0+ZmNfcmVzY2FuX3dvcmspOwotCQkJfQorCQkJcXVldWVfd29yayhpb2MtPmZjX3Jlc2Nhbl93b3JrX3EsCisJCQkJICAgJmlvYy0+ZmNfcmVzY2FuX3dvcmspOwogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+ZmNfcmVzY2FuX3dvcmtfbG9jaywgZmxhZ3MpOwogCQlicmVhazsKQEAgLTEyNDgsMTAgKzEyMzQsOCBAQAogCQltcHRmY19TZXRGY1BvcnRQYWdlMV9kZWZhdWx0cyhpb2MpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7CiAJCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX3EpIHsKLQkJCWlmIChpb2MtPmZjX3Jlc2Nhbl93b3JrX2NvdW50KysgPT0gMCkgewotCQkJCXF1ZXVlX3dvcmsoaW9jLT5mY19yZXNjYW5fd29ya19xLAotCQkJCQkgICAmaW9jLT5mY19yZXNjYW5fd29yayk7Ci0JCQl9CisJCQlxdWV1ZV93b3JrKGlvYy0+ZmNfcmVzY2FuX3dvcmtfcSwKKwkJCQkgICAmaW9jLT5mY19yZXNjYW5fd29yayk7CiAJCX0KIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9jLT5mY19yZXNjYW5fd29ya19sb2NrLCBmbGFncyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaW14bW1jLmMgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwppbmRleCA3Y2E5ZTk1Li5mYjY1NjViIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9pbXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwpAQCAtOTEsNiArOTEsOCBAQAogCWludAkJCWRtYV9hbGxvY2F0ZWQ7CiAKIAl1bnNpZ25lZCBjaGFyCQlhY3R1YWxfYnVzX3dpZHRoOworCisJaW50CQkJcHJldl9jbWRfY29kZTsKIH07CiAKICNkZWZpbmUgSU1YTUNJX1BFTkRfSVJRX2IJMApAQCAtMjQ4LDE2ICsyNTAsMTQgQEAKIAkgKiBwYXJ0aWFsIEZJRk8gZmlsbHMgYW5kIHJlYWRzLiBUaGUgbGVuZ3RoIGhhcyB0byBiZSByb3VuZGVkIHVwIHRvIGJ1cnN0IHNpemUgbXVsdGlwbGUuCiAJICogVGhpcyBpcyByZXF1aXJlZCBmb3IgU0NSIHJlYWQgYXQgbGVhc3QuCiAJICovCi0JaWYgKGRhdGFzeiA8IDY0KSB7CisJaWYgKGRhdGFzeiA8IDUxMikgewogCQlob3N0LT5kbWFfc2l6ZSA9IGRhdGFzejsKIAkJaWYgKGRhdGEtPmZsYWdzICYgTU1DX0RBVEFfUkVBRCkgewogCQkJaG9zdC0+ZG1hX2RpciA9IERNQV9GUk9NX0RFVklDRTsKIAogCQkJLyogSGFjayB0byBlbmFibGUgcmVhZCBTQ1IgKi8KLQkJCWlmKGRhdGFzeiA8IDE2KSB7Ci0JCQkJTU1DX05PQiA9IDE7Ci0JCQkJTU1DX0JMS19MRU4gPSAxNjsKLQkJCX0KKwkJCU1NQ19OT0IgPSAxOworCQkJTU1DX0JMS19MRU4gPSA1MTI7CiAJCX0gZWxzZSB7CiAJCQlob3N0LT5kbWFfZGlyID0gRE1BX1RPX0RFVklDRTsKIAkJfQpAQCAtNDA5LDYgKzQwOSw5IEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0LT5sb2NrLCBmbGFncyk7CiAKKwlpZihyZXEgJiYgcmVxLT5jbWQpCisJCWhvc3QtPnByZXZfY21kX2NvZGUgPSByZXEtPmNtZC0+b3Bjb2RlOworCiAJaG9zdC0+cmVxID0gTlVMTDsKIAlob3N0LT5jbWQgPSBOVUxMOwogCWhvc3QtPmRhdGEgPSBOVUxMOwpAQCAtNTUzLDcgKzU1Niw2IEBACiB7CiAJaW50IGk7CiAJaW50IGJ1cnN0X2xlbjsKLQlpbnQgZmx1c2hfbGVuOwogCWludCB0cmFuc19kb25lID0gMDsKIAl1bnNpZ25lZCBpbnQgc3RhdCA9ICpwc3RhdDsKIApAQCAtNTY2LDQ0ICs1NjgsNDMgQEAKIAlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgcnVubmluZyBTVEFUVVMgPSAweCV4XG4iLAogCQlzdGF0KTsKIAorCXVkZWxheSgyMCk7CS8qIHJlcXVpcmVkIGZvciBjbG9ja3MgPCA4TUh6Ki8KKwogCWlmKGhvc3QtPmRtYV9kaXIgPT0gRE1BX0ZST01fREVWSUNFKSB7CiAJCWlteG1jaV9idXN5X3dhaXRfZm9yX3N0YXR1cyhob3N0LCAmc3RhdCwKIAkJCQlTVEFUVVNfQVBQTF9CVUZGX0ZGIHwgU1RBVFVTX0RBVEFfVFJBTlNfRE9ORSwKLQkJCQkyMCwgImlteG1jaV9jcHVfZHJpdmVuX2RhdGEgcmVhZCIpOworCQkJCTUwLCAiaW14bWNpX2NwdV9kcml2ZW5fZGF0YSByZWFkIik7CiAKIAkJd2hpbGUoKHN0YXQgJiAoU1RBVFVTX0FQUExfQlVGRl9GRiB8ICBTVEFUVVNfREFUQV9UUkFOU19ET05FKSkgJiYKLQkJICAgICAgKGhvc3QtPmRhdGFfY250IDwgaG9zdC0+ZG1hX3NpemUpKSB7Ci0JCQlpZihidXJzdF9sZW4gPj0gaG9zdC0+ZG1hX3NpemUgLSBob3N0LT5kYXRhX2NudCkgewotCQkJCWZsdXNoX2xlbiA9IGJ1cnN0X2xlbjsKLQkJCQlidXJzdF9sZW4gPSBob3N0LT5kbWFfc2l6ZSAtIGhvc3QtPmRhdGFfY250OwotCQkJCWZsdXNoX2xlbiAtPSBidXJzdF9sZW47Ci0JCQkJaG9zdC0+ZGF0YV9jbnQgPSBob3N0LT5kbWFfc2l6ZTsKLQkJCQl0cmFuc19kb25lID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJZmx1c2hfbGVuID0gMDsKLQkJCQlob3N0LT5kYXRhX2NudCArPSBidXJzdF9sZW47Ci0JCQl9CisJCSAgICAgIChob3N0LT5kYXRhX2NudCA8IDUxMikpIHsKKworCQkJdWRlbGF5KDIwKTsJLyogcmVxdWlyZWQgZm9yIGNsb2NrcyA8IDhNSHoqLwogCiAJCQlmb3IoaSA9IGJ1cnN0X2xlbjsgaT49MiA7IGktPTIpIHsKLQkJCQkqKGhvc3QtPmRhdGFfcHRyKyspID0gTU1DX0JVRkZFUl9BQ0NFU1M7Ci0JCQkJdWRlbGF5KDIwKTsJLyogcmVxdWlyZWQgZm9yIGNsb2NrcyA8IDhNSHoqLworCQkJCXUxNiBkYXRhOworCQkJCWRhdGEgPSBNTUNfQlVGRkVSX0FDQ0VTUzsKKwkJCQl1ZGVsYXkoMTApOwkvKiByZXF1aXJlZCBmb3IgY2xvY2tzIDwgOE1IeiovCisJCQkJaWYoaG9zdC0+ZGF0YV9jbnQrMiA8PSBob3N0LT5kbWFfc2l6ZSkgeworCQkJCQkqKGhvc3QtPmRhdGFfcHRyKyspID0gZGF0YTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZihob3N0LT5kYXRhX2NudCA8IGhvc3QtPmRtYV9zaXplKQorCQkJCQkJKih1OCopKGhvc3QtPmRhdGFfcHRyKSA9IGRhdGE7CisJCQkJfQorCQkJCWhvc3QtPmRhdGFfY250ICs9IDI7CiAJCQl9CiAKLQkJCWlmKGkgPT0gMSkKLQkJCQkqKHU4KikoaG9zdC0+ZGF0YV9wdHIpID0gTU1DX0JVRkZFUl9BQ0NFU1M7Ci0KIAkJCXN0YXQgPSBNTUNfU1RBVFVTOwogCi0JCQkvKiBGbHVzaCBleHRyYSBieXRlcyBmcm9tIEZJRk8gKi8KLQkJCXdoaWxlKGZsdXNoX2xlbiAmJiAhKHN0YXQgJiBTVEFUVVNfREFUQV9UUkFOU19ET05FKSl7Ci0JCQkJaSA9IE1NQ19CVUZGRVJfQUNDRVNTOwotCQkJCXN0YXQgPSBNTUNfU1RBVFVTOwotCQkJCXN0YXQgJj0gflNUQVRVU19DUkNfUkVBRF9FUlI7IC8qIFN0dXBpZCBidXQgcmVxdWlyZWQgdGhlcmUgKi8KLQkJCX0KLQotCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJlYWQgYnVyc3QgJWQgU1RBVFVTID0gMHgleFxuIiwKLQkJCQlidXJzdF9sZW4sIHN0YXQpOworCQkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJpbXhtY2lfY3B1X2RyaXZlbl9kYXRhIHJlYWQgJWQgYnVyc3QgJWQgU1RBVFVTID0gMHgleFxuIiwKKwkJCQlob3N0LT5kYXRhX2NudCwgYnVyc3RfbGVuLCBzdGF0KTsKIAkJfQorCisJCWlmKChzdGF0ICYgU1RBVFVTX0RBVEFfVFJBTlNfRE9ORSkgJiYgKGhvc3QtPmRhdGFfY250ID49IDUxMikpCisJCQl0cmFuc19kb25lID0gMTsKKworCQlpZihob3N0LT5kbWFfc2l6ZSAmIDB4MWZmKQorCQkJc3RhdCAmPSB+U1RBVFVTX0NSQ19SRUFEX0VSUjsKKwogCX0gZWxzZSB7CiAJCWlteG1jaV9idXN5X3dhaXRfZm9yX3N0YXR1cyhob3N0LCAmc3RhdCwKIAkJCQlTVEFUVVNfQVBQTF9CVUZGX0ZFLApAQCAtNjkyLDggKzY5Myw4IEBACiAJCSAgICAgICB3aGF0LCBzdGF0LCBNTUNfSU5UX01BU0spOwogCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRF9EQVRfQ09OVCA9IDB4JTA0eCwgTU1DX0JMS19MRU4gPSAweCUwNHgsIE1NQ19OT0IgPSAweCUwNHgsIERNQV9DQ1IgPSAweCUwOHhcbiIsCiAJCSAgICAgICBNTUNfQ01EX0RBVF9DT05ULCBNTUNfQkxLX0xFTiwgTU1DX05PQiwgQ0NSKGhvc3QtPmRtYSkpOwotCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRCVkLCBidXMgJWQtYml0LCBkbWFfc2l6ZSA9IDB4JXhcbiIsCi0JCSAgICAgICBob3N0LT5jbWQ/aG9zdC0+Y21kLT5vcGNvZGU6MCwgMTw8aG9zdC0+YWN0dWFsX2J1c193aWR0aCwgaG9zdC0+ZG1hX3NpemUpOworCQlkZXZfZXJyKG1tY19kZXYoaG9zdC0+bW1jKSwgIkNNRCVkLCBwcmV2Q01EJWQsIGJ1cyAlZC1iaXQsIGRtYV9zaXplID0gMHgleFxuIiwKKwkJICAgICAgIGhvc3QtPmNtZD9ob3N0LT5jbWQtPm9wY29kZTowLCBob3N0LT5wcmV2X2NtZF9jb2RlLCAxPDxob3N0LT5hY3R1YWxfYnVzX3dpZHRoLCBob3N0LT5kbWFfc2l6ZSk7CiAJfQogCiAJaWYoIWhvc3QtPnByZXNlbnQgfHwgdGltZW91dCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tYy5jIGIvZHJpdmVycy9tbWMvbW1jLmMKaW5kZXggMzM1MjViZC4uNzRlYWFlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jLmMKQEAgLTI0Nyw2ICsyNDcsNTUgQEAKIAogRVhQT1JUX1NZTUJPTChtbWNfd2FpdF9mb3JfYXBwX2NtZCk7CiAKKy8qKgorICoJbW1jX3NldF9kYXRhX3RpbWVvdXQgLSBzZXQgdGhlIHRpbWVvdXQgZm9yIGEgZGF0YSBjb21tYW5kCisgKglAZGF0YTogZGF0YSBwaGFzZSBmb3IgY29tbWFuZAorICoJQGNhcmQ6IHRoZSBNTUMgY2FyZCBhc3NvY2lhdGVkIHdpdGggdGhlIGRhdGEgdHJhbnNmZXIKKyAqCUB3cml0ZTogZmxhZyB0byBkaWZmZXJlbnRpYXRlIHJlYWRzIGZyb20gd3JpdGVzCisgKi8KK3ZvaWQgbW1jX3NldF9kYXRhX3RpbWVvdXQoc3RydWN0IG1tY19kYXRhICpkYXRhLCBjb25zdCBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsCisJCQkgIGludCB3cml0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgbXVsdDsKKworCS8qCisJICogU0QgY2FyZHMgdXNlIGEgMTAwIG11bHRpcGxpZXIgcmF0aGVyIHRoYW4gMTAKKwkgKi8KKwltdWx0ID0gbW1jX2NhcmRfc2QoY2FyZCkgPyAxMDAgOiAxMDsKKworCS8qCisJICogU2NhbGUgdXAgdGhlIG11bHRpcGxpZXIgKGFuZCB0aGVyZWZvcmUgdGhlIHRpbWVvdXQpIGJ5CisJICogdGhlIHIydyBmYWN0b3IgZm9yIHdyaXRlcy4KKwkgKi8KKwlpZiAod3JpdGUpCisJCW11bHQgPDw9IGNhcmQtPmNzZC5yMndfZmFjdG9yOworCisJZGF0YS0+dGltZW91dF9ucyA9IGNhcmQtPmNzZC50YWNjX25zICogbXVsdDsKKwlkYXRhLT50aW1lb3V0X2Nsa3MgPSBjYXJkLT5jc2QudGFjY19jbGtzICogbXVsdDsKKworCS8qCisJICogU0QgY2FyZHMgYWxzbyBoYXZlIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSB0aW1lb3V0LgorCSAqLworCWlmIChtbWNfY2FyZF9zZChjYXJkKSkgeworCQl1bnNpZ25lZCBpbnQgdGltZW91dF91cywgbGltaXRfdXM7CisKKwkJdGltZW91dF91cyA9IGRhdGEtPnRpbWVvdXRfbnMgLyAxMDAwOworCQl0aW1lb3V0X3VzICs9IGRhdGEtPnRpbWVvdXRfY2xrcyAqIDEwMDAgLworCQkJKGNhcmQtPmhvc3QtPmlvcy5jbG9jayAvIDEwMDApOworCisJCWlmICh3cml0ZSkKKwkJCWxpbWl0X3VzID0gMjUwMDAwOworCQllbHNlCisJCQlsaW1pdF91cyA9IDEwMDAwMDsKKworCQlpZiAodGltZW91dF91cyA+IGxpbWl0X3VzKSB7CisJCQlkYXRhLT50aW1lb3V0X25zID0gbGltaXRfdXMgKiAxMDAwOworCQkJZGF0YS0+dGltZW91dF9jbGtzID0gMDsKKwkJfQorCX0KK30KK0VYUE9SVF9TWU1CT0wobW1jX3NldF9kYXRhX3RpbWVvdXQpOworCiBzdGF0aWMgaW50IG1tY19zZWxlY3RfY2FyZChzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CiAKIC8qKgpAQCAtOTA4LDExICs5NTcsOSBAQAogewogCWludCBlcnI7CiAJc3RydWN0IG1tY19jYXJkICpjYXJkOwotCiAJc3RydWN0IG1tY19yZXF1ZXN0IG1ycTsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOwogCXN0cnVjdCBtbWNfZGF0YSBkYXRhOwotCiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjYXJkLCAmaG9zdC0+Y2FyZHMsIG5vZGUpIHsKQEAgLTk0Nyw4ICs5OTQsOCBAQAogCiAJCW1lbXNldCgmZGF0YSwgMCwgc2l6ZW9mKHN0cnVjdCBtbWNfZGF0YSkpOwogCi0JCWRhdGEudGltZW91dF9ucyA9IGNhcmQtPmNzZC50YWNjX25zICogMTA7Ci0JCWRhdGEudGltZW91dF9jbGtzID0gY2FyZC0+Y3NkLnRhY2NfY2xrcyAqIDEwOworCQltbWNfc2V0X2RhdGFfdGltZW91dCgmZGF0YSwgY2FyZCwgMCk7CisKIAkJZGF0YS5ibGtzel9iaXRzID0gMzsKIAkJZGF0YS5ibGtzeiA9IDEgPDwgMzsKIAkJZGF0YS5ibG9ja3MgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9tbWNfYmxvY2suYwppbmRleCAxMTVjYzIxLi5hMGUwZGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNfYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9tbWNfYmxvY2suYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9tbWMvY2FyZC5oPgorI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL3Byb3RvY29sLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC0xNzEsOCArMTcyLDYgQEAKIAogCQlicnEuY21kLmFyZyA9IHJlcS0+c2VjdG9yIDw8IDk7CiAJCWJycS5jbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOwotCQlicnEuZGF0YS50aW1lb3V0X25zID0gY2FyZC0+Y3NkLnRhY2NfbnMgKiAxMDsKLQkJYnJxLmRhdGEudGltZW91dF9jbGtzID0gY2FyZC0+Y3NkLnRhY2NfY2xrcyAqIDEwOwogCQlicnEuZGF0YS5ibGtzel9iaXRzID0gbWQtPmJsb2NrX2JpdHM7CiAJCWJycS5kYXRhLmJsa3N6ID0gMSA8PCBtZC0+YmxvY2tfYml0czsKIAkJYnJxLmRhdGEuYmxvY2tzID0gcmVxLT5ucl9zZWN0b3JzID4+IChtZC0+YmxvY2tfYml0cyAtIDkpOwpAQCAtMTgwLDYgKzE3OSw4IEBACiAJCWJycS5zdG9wLmFyZyA9IDA7CiAJCWJycS5zdG9wLmZsYWdzID0gTU1DX1JTUF9SMUIgfCBNTUNfQ01EX0FDOwogCisJCW1tY19zZXRfZGF0YV90aW1lb3V0KCZicnEuZGF0YSwgY2FyZCwgcnFfZGF0YV9kaXIocmVxKSAhPSBSRUFEKTsKKwogCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CiAJCQlicnEuY21kLm9wY29kZSA9IGJycS5kYXRhLmJsb2NrcyA+IDEgPyBNTUNfUkVBRF9NVUxUSVBMRV9CTE9DSyA6IE1NQ19SRUFEX1NJTkdMRV9CTE9DSzsKIAkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1JFQUQ7CkBAIC0xODcsMTIgKzE4OCw2IEBACiAJCQlicnEuY21kLm9wY29kZSA9IE1NQ19XUklURV9CTE9DSzsKIAkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1dSSVRFOwogCQkJYnJxLmRhdGEuYmxvY2tzID0gMTsKLQotCQkJLyoKLQkJCSAqIFNjYWxlIHVwIHRoZSB0aW1lb3V0IGJ5IHRoZSByMncgZmFjdG9yCi0JCQkgKi8KLQkJCWJycS5kYXRhLnRpbWVvdXRfbnMgPDw9IGNhcmQtPmNzZC5yMndfZmFjdG9yOwotCQkJYnJxLmRhdGEudGltZW91dF9jbGtzIDw8PSBjYXJkLT5jc2QucjJ3X2ZhY3RvcjsKIAkJfQogCiAJCWlmIChicnEuZGF0YS5ibG9ja3MgPiAxKSB7CkBAIC0zMjQsNTIgKzMxOSwxMSBAQAogCW1kLT5yZWFkX29ubHkgPSBtbWNfYmxrX3JlYWRvbmx5KGNhcmQpOwogCiAJLyoKLQkgKiBGaWd1cmUgb3V0IGEgd29ya2FibGUgYmxvY2sgc2l6ZS4gIE1NQyBjYXJkcyBoYXZlOgotCSAqICAtIHR3byBibG9jayBzaXplcywgb25lIGZvciByZWFkIGFuZCBvbmUgZm9yIHdyaXRlLgotCSAqICAtIG1heSBzdXBwb3J0IHBhcnRpYWwgcmVhZHMgYW5kL29yIHdyaXRlcwotCSAqICAgIChhbGxvd3MgYmxvY2sgc2l6ZXMgc21hbGxlciB0aGFuIHNwZWNpZmllZCkKKwkgKiBCb3RoIFNEIGFuZCBNTUMgc3BlY2lmaWNhdGlvbnMgc3RhdGUgKGFsdGhvdWdoIGEgYml0CisJICogdW5jbGVhcmx5IGluIHRoZSBNTUMgY2FzZSkgdGhhdCBhIGJsb2NrIHNpemUgb2YgNTEyCisJICogYnl0ZXMgbXVzdCBhbHdheXMgYmUgc3VwcG9ydGVkIGJ5IHRoZSBjYXJkLgogCSAqLwotCW1kLT5ibG9ja19iaXRzID0gY2FyZC0+Y3NkLnJlYWRfYmxrYml0czsKLQlpZiAoY2FyZC0+Y3NkLndyaXRlX2Jsa2JpdHMgIT0gY2FyZC0+Y3NkLnJlYWRfYmxrYml0cykgewotCQlpZiAoY2FyZC0+Y3NkLndyaXRlX2Jsa2JpdHMgPCBjYXJkLT5jc2QucmVhZF9ibGtiaXRzICYmCi0JCSAgICBjYXJkLT5jc2QucmVhZF9wYXJ0aWFsKSB7Ci0JCQkvKgotCQkJICogd3JpdGUgYmxvY2sgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gcmVhZCBibG9jawotCQkJICogc2l6ZSwgYnV0IHdlIHN1cHBvcnQgcGFydGlhbCByZWFkcywgc28gY2hvb3NlCi0JCQkgKiB0aGUgc21hbGxlciB3cml0ZSBibG9jayBzaXplLgotCQkJICovCi0JCQltZC0+YmxvY2tfYml0cyA9IGNhcmQtPmNzZC53cml0ZV9ibGtiaXRzOwotCQl9IGVsc2UgaWYgKGNhcmQtPmNzZC53cml0ZV9ibGtiaXRzID4gY2FyZC0+Y3NkLnJlYWRfYmxrYml0cyAmJgotCQkJICAgY2FyZC0+Y3NkLndyaXRlX3BhcnRpYWwpIHsKLQkJCS8qCi0JCQkgKiByZWFkIGJsb2NrIHNpemUgaXMgc21hbGxlciB0aGFuIHdyaXRlIGJsb2NrCi0JCQkgKiBzaXplLCBidXQgd2Ugc3VwcG9ydCBwYXJ0aWFsIHdyaXRlcy4gIFVzZSByZWFkCi0JCQkgKiBibG9jayBzaXplLgotCQkJICovCi0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogV2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIGNvbmZpZ3VyYXRpb24gZm9yIHdyaXRlcy4KLQkJCSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHNlbGVjdCBibG9jayBzaXplIGZvciAiCi0JCQkJIndyaXRpbmcgKHJiJXUgd2IldSBycCV1IHdwJXUpXG4iLAotCQkJCW1tY19jYXJkX2lkKGNhcmQpLAotCQkJCTEgPDwgY2FyZC0+Y3NkLnJlYWRfYmxrYml0cywKLQkJCQkxIDw8IGNhcmQtPmNzZC53cml0ZV9ibGtiaXRzLAotCQkJCWNhcmQtPmNzZC5yZWFkX3BhcnRpYWwsCi0JCQkJY2FyZC0+Y3NkLndyaXRlX3BhcnRpYWwpOwotCQkJbWQtPnJlYWRfb25seSA9IDE7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIFJlZnVzZSB0byBhbGxvdyBibG9jayBzaXplcyBzbWFsbGVyIHRoYW4gNTEyIGJ5dGVzLgotCSAqLwotCWlmIChtZC0+YmxvY2tfYml0cyA8IDkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHN1cHBvcnQgYmxvY2sgc2l6ZSAldVxuIiwKLQkJCW1tY19jYXJkX2lkKGNhcmQpLCAxIDw8IG1kLT5ibG9ja19iaXRzKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBlcnJfa2ZyZWU7Ci0JfQorCW1kLT5ibG9ja19iaXRzID0gOTsKIAogCW1kLT5kaXNrID0gYWxsb2NfZGlzaygxIDw8IE1NQ19TSElGVCk7CiAJaWYgKG1kLT5kaXNrID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY19xdWV1ZS5jIGIvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMKaW5kZXggMGI5NjgyZS4uNzRmOGNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMKQEAgLTc5LDcgKzc5LDggQEAKIAkJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIAkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJaWYgKCFibGtfcXVldWVfcGx1Z2dlZChxKSkKLQkJCW1xLT5yZXEgPSByZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KHEpOworCQkJcmVxID0gZWx2X25leHRfcmVxdWVzdChxKTsKKwkJbXEtPnJlcSA9IHJlcTsKIAkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCiAJCWlmICghcmVxKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggOGEzMGVmMy4uYzM1MWM2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgIndic2QuaCIKIAogI2RlZmluZSBEUklWRVJfTkFNRSAid2JzZCIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuNiIKIAogI2RlZmluZSBEQkcoeC4uLikgXAogCXByX2RlYnVnKERSSVZFUl9OQU1FICI6ICIgeCkKQEAgLTE0MzksMTMgKzE0MzksMTMgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9yZXF1ZXN0X3JlZ2lvbihzdHJ1Y3Qgd2JzZF9ob3N0ICpob3N0LCBpbnQgYmFzZSkKIHsKLQlpZiAoaW8gJiAweDcpCisJaWYgKGJhc2UgJiAweDcpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCA4LCBEUklWRVJfTkFNRSkpCiAJCXJldHVybiAtRUlPOwogCi0JaG9zdC0+YmFzZSA9IGlvOworCWhvc3QtPmJhc2UgPSBiYXNlOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzczLDcgKzE3NzMsNyBAQAogCS8qCiAJICogUmVxdWVzdCByZXNvdXJjZXMuCiAJICovCi0JcmV0ID0gd2JzZF9yZXF1ZXN0X3Jlc291cmNlcyhob3N0LCBpbywgaXJxLCBkbWEpOworCXJldCA9IHdic2RfcmVxdWVzdF9yZXNvdXJjZXMoaG9zdCwgYmFzZSwgaXJxLCBkbWEpOwogCWlmIChyZXQpIHsKIAkJd2JzZF9yZWxlYXNlX3Jlc291cmNlcyhob3N0KTsKIAkJd2JzZF9mcmVlX21tYyhkZXYpOwpAQCAtMTg2MSw2ICsxODYxLDcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgd2JzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJLyogVXNlIHRoZSBtb2R1bGUgcGFyYW1ldGVycyBmb3IgcmVzb3VyY2VzICovCiAJcmV0dXJuIHdic2RfaW5pdCgmZGV2LT5kZXYsIGlvLCBpcnEsIGRtYSwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL0tjb25maWcgYi9kcml2ZXJzL210ZC9LY29uZmlnCmluZGV4IDEzNDRhZDcuLjcxN2U5MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvS2NvbmZpZwpAQCAtMjYzLDYgKzI2MywxNCBAQAogCiAJCWh0dHA6Ly93d3cuZ2Vuc3cuY29tL3BhZ2VzL3Byb2QvYmlvcy9yZmQuaHRtCiAKK2NvbmZpZyBTU0ZEQworCWJvb2wgIk5BTkQgU1NGREMgKFNtYXJ0TWVkaWEpIHJlYWQgb25seSB0cmFuc2xhdGlvbiBsYXllciIKKwlkZXBlbmRzIG9uIE1URAorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyByZWFkIG9ubHkgYWNjZXNzIHRvIFNtYXJ0TWVkaWEgZm9ybWF0dGVkIE5BTkQKKwkgIGZsYXNoLiBZb3UgY2FuIG1vdW50IGl0IHdpdGggRkFUIGZpbGUgc3lzdGVtLgorCiBzb3VyY2UgImRyaXZlcnMvbXRkL2NoaXBzL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9NYWtlZmlsZQppbmRleCBmYzkzNzQ0Li4xZTM2YjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL210ZC9NYWtlZmlsZQpAQCAtMjEsNiArMjEsNyBAQAogb2JqLSQoQ09ORklHX05GVEwpCQkrPSBuZnRsLm8gbXRkX2Jsa2RldnMubwogb2JqLSQoQ09ORklHX0lORlRMKQkJKz0gaW5mdGwubyBtdGRfYmxrZGV2cy5vCiBvYmotJChDT05GSUdfUkZEX0ZUTCkJCSs9IHJmZF9mdGwubyBtdGRfYmxrZGV2cy5vCitvYmotJChDT05GSUdfU1NGREMpCQkrPSBzc2ZkYy5vIG10ZF9ibGtkZXZzLm8KIAogbmZ0bC1vYmpzCQk6PSBuZnRsY29yZS5vIG5mdGxtb3VudC5vCiBpbmZ0bC1vYmpzCQk6PSBpbmZ0bGNvcmUubyBpbmZ0bG1vdW50Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV9jbWRzZXRfMDAwMS5jIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKaW5kZXggMzllZGI4Mi4uN2VhNDlhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAxLmMKQEAgLTkwOCw3ICs5MDgsNyBAQAogCiBzdGF0aWMgaW50IF9feGlwcmFtIHhpcF93YWl0X2Zvcl9vcGVyYXRpb24oCiAJCXN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAotCQl1bnNpZ25lZCBsb25nIGFkciwgaW50ICpjaGlwX29wX3RpbWUgKQorCQl1bnNpZ25lZCBsb25nIGFkciwgdW5zaWduZWQgaW50IGNoaXBfb3BfdGltZSApCiB7CiAJc3RydWN0IGNmaV9wcml2YXRlICpjZmkgPSBtYXAtPmZsZHJ2X3ByaXY7CiAJc3RydWN0IGNmaV9wcmlfaW50ZWxleHQgKmNmaXAgPSBjZmktPmNtZHNldF9wcml2OwpAQCAtOTE3LDcgKzkxNyw3IEBACiAJZmxzdGF0ZV90IG9sZHN0YXRlLCBuZXdzdGF0ZTsKIAogICAgICAgIAlzdGFydCA9IHhpcF9jdXJydGltZSgpOwotCXVzZWMgPSAqY2hpcF9vcF90aW1lICogODsKKwl1c2VjID0gY2hpcF9vcF90aW1lICogODsKIAlpZiAodXNlYyA9PSAwKQogCQl1c2VjID0gNTAwMDAwOwogCWRvbmUgPSAwOwpAQCAtMTAyNyw4ICsxMDI3LDggQEAKICNkZWZpbmUgWElQX0lOVkFMX0NBQ0hFRF9SQU5HRShtYXAsIGZyb20sIHNpemUpICBcCiAJSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKQogCi0jZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwgaW52YWxfYWRyLCBpbnZhbF9sZW4sIHBfdXNlYykgXAotCXhpcF93YWl0X2Zvcl9vcGVyYXRpb24obWFwLCBjaGlwLCBjbWRfYWRyLCBwX3VzZWMpCisjZGVmaW5lIElOVkFMX0NBQ0hFX0FORF9XQUlUKG1hcCwgY2hpcCwgY21kX2FkciwgaW52YWxfYWRyLCBpbnZhbF9sZW4sIHVzZWMpIFwKKwl4aXBfd2FpdF9mb3Jfb3BlcmF0aW9uKG1hcCwgY2hpcCwgY21kX2FkciwgdXNlYykKIAogI2Vsc2UKIApAQCAtMTA0MCw2NCArMTA0MCw2NCBAQAogc3RhdGljIGludCBpbnZhbF9jYWNoZV9hbmRfd2FpdF9mb3Jfb3BlcmF0aW9uKAogCQlzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwKIAkJdW5zaWduZWQgbG9uZyBjbWRfYWRyLCB1bnNpZ25lZCBsb25nIGludmFsX2FkciwgaW50IGludmFsX2xlbiwKLQkJaW50ICpjaGlwX29wX3RpbWUgKQorCQl1bnNpZ25lZCBpbnQgY2hpcF9vcF90aW1lKQogewogCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OwogCW1hcF93b3JkIHN0YXR1cywgc3RhdHVzX09LID0gQ01EKDB4ODApOwotCWludCB6LCBjaGlwX3N0YXRlID0gY2hpcC0+c3RhdGU7Ci0JdW5zaWduZWQgbG9uZyB0aW1lbzsKKwlpbnQgY2hpcF9zdGF0ZSA9IGNoaXAtPnN0YXRlOworCXVuc2lnbmVkIGludCB0aW1lbywgc2xlZXBfdGltZTsKIAogCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKIAlpZiAoaW52YWxfbGVuKQogCQlJTlZBTElEQVRFX0NBQ0hFRF9SQU5HRShtYXAsIGludmFsX2FkciwgaW52YWxfbGVuKTsKLQlpZiAoKmNoaXBfb3BfdGltZSkKLQkJY2ZpX3VkZWxheSgqY2hpcF9vcF90aW1lKTsKIAlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwogCi0JdGltZW8gPSAqY2hpcF9vcF90aW1lICogOCAqIEhaIC8gMTAwMDAwMDsKLQlpZiAodGltZW8gPCBIWi8yKQotCQl0aW1lbyA9IEhaLzI7Ci0JdGltZW8gKz0gamlmZmllczsKKwkvKiBzZXQgb3VyIHRpbWVvdXQgdG8gOCB0aW1lcyB0aGUgZXhwZWN0ZWQgZGVsYXkgKi8KKwl0aW1lbyA9IGNoaXBfb3BfdGltZSAqIDg7CisJaWYgKCF0aW1lbykKKwkJdGltZW8gPSA1MDAwMDA7CisJc2xlZXBfdGltZSA9IGNoaXBfb3BfdGltZSAvIDI7CiAKLQl6ID0gMDsKIAlmb3IgKDs7KSB7Ci0JCWlmIChjaGlwLT5zdGF0ZSAhPSBjaGlwX3N0YXRlKSB7Ci0JCQkvKiBTb21lb25lJ3Mgc3VzcGVuZGVkIHRoZSBvcGVyYXRpb246IHNsZWVwICovCi0JCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQkJYWRkX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0JCQlzcGluX3VubG9jayhjaGlwLT5tdXRleCk7Ci0JCQlzY2hlZHVsZSgpOwotCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmNoaXAtPndxLCAmd2FpdCk7Ci0JCQl0aW1lbyA9IGppZmZpZXMgKyAoSFogLyAyKTsgLyogRklYTUUgKi8KLQkJCXNwaW5fbG9jayhjaGlwLT5tdXRleCk7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCXN0YXR1cyA9IG1hcF9yZWFkKG1hcCwgY21kX2Fkcik7CiAJCWlmIChtYXBfd29yZF9hbmRlcXVhbChtYXAsIHN0YXR1cywgc3RhdHVzX09LLCBzdGF0dXNfT0spKQogCQkJYnJlYWs7CiAKLQkJLyogT0sgU3RpbGwgd2FpdGluZyAqLwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lbykpIHsKKwkJaWYgKCF0aW1lbykgewogCQkJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBjbWRfYWRyKTsKIAkJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwogCQkJcmV0dXJuIC1FVElNRTsKIAkJfQogCi0JCS8qIExhdGVuY3kgaXNzdWVzLiBEcm9wIHRoZSBsb2NrLCB3YWl0IGEgd2hpbGUgYW5kIHJldHJ5ICovCi0JCXorKzsKKwkJLyogT0sgU3RpbGwgd2FpdGluZy4gRHJvcCB0aGUgbG9jaywgd2FpdCBhIHdoaWxlIGFuZCByZXRyeS4gKi8KIAkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOwotCQljZmlfdWRlbGF5KDEpOworCQlpZiAoc2xlZXBfdGltZSA+PSAxMDAwMDAwL0haKSB7CisJCQkvKgorCQkJICogSGFsZiBvZiB0aGUgbm9ybWFsIGRlbGF5IHN0aWxsIHJlbWFpbmluZworCQkJICogY2FuIGJlIHBlcmZvcm1lZCB3aXRoIGEgc2xlZXBpbmcgZGVsYXkgaW5zdGVhZAorCQkJICogb2YgYnVzeSB3YWl0aW5nLgorCQkJICovCisJCQltc2xlZXAoc2xlZXBfdGltZS8xMDAwKTsKKwkJCXRpbWVvIC09IHNsZWVwX3RpbWU7CisJCQlzbGVlcF90aW1lID0gMTAwMDAwMC9IWjsKKwkJfSBlbHNlIHsKKwkJCXVkZWxheSgxKTsKKwkJCWNvbmRfcmVzY2hlZCgpOworCQkJdGltZW8tLTsKKwkJfQogCQlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOwotCX0KIAotCWlmICgheikgewotCQlpZiAoIS0tKCpjaGlwX29wX3RpbWUpKQotCQkJKmNoaXBfb3BfdGltZSA9IDE7Ci0JfSBlbHNlIGlmICh6ID4gMSkKLQkJKysoKmNoaXBfb3BfdGltZSk7CisJCWlmIChjaGlwLT5zdGF0ZSAhPSBjaGlwX3N0YXRlKSB7CisJCQkvKiBTb21lb25lJ3Mgc3VzcGVuZGVkIHRoZSBvcGVyYXRpb246IHNsZWVwICovCisJCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKKwkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOworCQkJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOworCQkJc2NoZWR1bGUoKTsKKwkJCXJlbW92ZV93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOworCQkJc3Bpbl9sb2NrKGNoaXAtPm11dGV4KTsKKwkJfQorCX0KIAogCS8qIERvbmUgYW5kIGhhcHB5LiAqLwogIAljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKQEAgLTExMDcsOCArMTEwNyw3IEBACiAjZW5kaWYKIAogI2RlZmluZSBXQUlUX1RJTUVPVVQobWFwLCBjaGlwLCBhZHIsIHVkZWxheSkgXAotCSh7IGludCBfX3VkZWxheSA9ICh1ZGVsYXkpOyBcCi0JICAgSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsIDAsIDAsICZfX3VkZWxheSk7IH0pCisJSU5WQUxfQ0FDSEVfQU5EX1dBSVQobWFwLCBjaGlwLCBhZHIsIDAsIDAsIHVkZWxheSk7CiAKIAogc3RhdGljIGludCBkb19wb2ludF9vbmVjaGlwIChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgc3RydWN0IGZsY2hpcCAqY2hpcCwgbG9mZl90IGFkciwgc2l6ZV90IGxlbikKQEAgLTEzMzIsNyArMTMzMSw3IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwKIAkJCQkgICBhZHIsIG1hcF9iYW5rd2lkdGgobWFwKSwKLQkJCQkgICAmY2hpcC0+d29yZF93cml0ZV90aW1lKTsKKwkJCQkgICBjaGlwLT53b3JkX3dyaXRlX3RpbWUpOwogCWlmIChyZXQpIHsKIAkJeGlwX2VuYWJsZShtYXAsIGNoaXAsIGFkcik7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IHdvcmQgd3JpdGUgZXJyb3IgKHN0YXR1cyB0aW1lb3V0KVxuIiwgbWFwLT5uYW1lKTsKQEAgLTE1NjksNyArMTU2OCw3IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGNtZF9hZHIsCiAJCQkJICAgYWRyLCBsZW4sCi0JCQkJICAgJmNoaXAtPmJ1ZmZlcl93cml0ZV90aW1lKTsKKwkJCQkgICBjaGlwLT5idWZmZXJfd3JpdGVfdGltZSk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGNtZF9hZHIpOwogCQljaGlwLT5zdGF0ZSA9IEZMX1NUQVRVUzsKQEAgLTE3MDQsNyArMTcwMyw3IEBACiAKIAlyZXQgPSBJTlZBTF9DQUNIRV9BTkRfV0FJVChtYXAsIGNoaXAsIGFkciwKIAkJCQkgICBhZHIsIGxlbiwKLQkJCQkgICAmY2hpcC0+ZXJhc2VfdGltZSk7CisJCQkJICAgY2hpcC0+ZXJhc2VfdGltZSk7CiAJaWYgKHJldCkgewogCQltYXBfd3JpdGUobWFwLCBDTUQoMHg3MCksIGFkcik7CiAJCWNoaXAtPnN0YXRlID0gRkxfU1RBVFVTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvY2ZpX2NtZHNldF8wMDAyLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwppbmRleCA5ODg1NzI2Li43MDJhZTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfY21kc2V0XzAwMDIuYwpAQCAtNDUsOSArNDUsMTEgQEAKICNkZWZpbmUgTUFYX1dPUkRfUkVUUklFUyAzCiAKICNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FNRAkweDAwMDEKKyNkZWZpbmUgTUFOVUZBQ1RVUkVSX0FUTUVMCTB4MDAxRgogI2RlZmluZSBNQU5VRkFDVFVSRVJfU1NUCTB4MDBCRgogI2RlZmluZSBTU1Q0OUxGMDA0QgkgICAgICAgIDB4MDA2MAogI2RlZmluZSBTU1Q0OUxGMDA4QQkJMHgwMDVhCisjZGVmaW5lIEFUNDlCVjY0MTYJCTB4MDBkNgogCiBzdGF0aWMgaW50IGNmaV9hbWRzdGRfcmVhZCAoc3RydWN0IG10ZF9pbmZvICosIGxvZmZfdCwgc2l6ZV90LCBzaXplX3QgKiwgdV9jaGFyICopOwogc3RhdGljIGludCBjZmlfYW1kc3RkX3dyaXRlX3dvcmRzKHN0cnVjdCBtdGRfaW5mbyAqLCBsb2ZmX3QsIHNpemVfdCwgc2l6ZV90ICosIGNvbnN0IHVfY2hhciAqKTsKQEAgLTY4LDYgKzcwLDkgQEAKIHN0YXRpYyB2b2lkIHB1dF9jaGlwKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLCB1bnNpZ25lZCBsb25nIGFkcik7CiAjaW5jbHVkZSAiZndoX2xvY2suaCIKIAorc3RhdGljIGludCBjZmlfYXRtZWxfbG9jayhzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbik7CitzdGF0aWMgaW50IGNmaV9hdG1lbF91bmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pOworCiBzdGF0aWMgc3RydWN0IG10ZF9jaGlwX2RyaXZlciBjZmlfYW1kc3RkX2NoaXBkcnYgPSB7CiAJLnByb2JlCQk9IE5VTEwsIC8qIE5vdCB1c2FibGUgZGlyZWN0bHkgKi8KIAkuZGVzdHJveQk9IGNmaV9hbWRzdGRfZGVzdHJveSwKQEAgLTE2MSw2ICsxNjYsMjYgQEAKIAl9CiB9CiAKKy8qIEF0bWVsIGNoaXBzIGRvbid0IHVzZSB0aGUgc2FtZSBQUkkgZm9ybWF0IGFzIEFNRCBjaGlwcyAqLworc3RhdGljIHZvaWQgZml4dXBfY29udmVydF9hdG1lbF9wcmkoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKnBhcmFtKQoreworCXN0cnVjdCBtYXBfaW5mbyAqbWFwID0gbXRkLT5wcml2OworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OworCXN0cnVjdCBjZmlfcHJpX2FtZHN0ZCAqZXh0cCA9IGNmaS0+Y21kc2V0X3ByaXY7CisJc3RydWN0IGNmaV9wcmlfYXRtZWwgYXRtZWxfcHJpOworCisJbWVtY3B5KCZhdG1lbF9wcmksIGV4dHAsIHNpemVvZihhdG1lbF9wcmkpKTsKKwltZW1zZXQoKGNoYXIgKilleHRwICsgNSwgMCwgc2l6ZW9mKCpleHRwKSAtIDUpOworCisJaWYgKGF0bWVsX3ByaS5GZWF0dXJlcyAmIDB4MDIpCisJCWV4dHAtPkVyYXNlU3VzcGVuZCA9IDI7CisKKwlpZiAoYXRtZWxfcHJpLkJvdHRvbUJvb3QpCisJCWV4dHAtPlRvcEJvdHRvbSA9IDI7CisJZWxzZQorCQlleHRwLT5Ub3BCb3R0b20gPSAzOworfQorCiBzdGF0aWMgdm9pZCBmaXh1cF91c2Vfc2Vjc2koc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKnBhcmFtKQogewogCS8qIFNldHVwIGZvciBjaGlwcyB3aXRoIGEgc2Vjc2kgYXJlYSAqLwpAQCAtMTc5LDYgKzIwNCwxNyBAQAogCiB9CiAKKy8qCisgKiBTb21lIEF0bWVsIGNoaXBzIChlLmcuIHRoZSBBVDQ5QlY2NDE2KSBwb3dlci11cCB3aXRoIGFsbCBzZWN0b3JzCisgKiBsb2NrZWQgYnkgZGVmYXVsdC4KKyAqLworc3RhdGljIHZvaWQgZml4dXBfdXNlX2F0bWVsX2xvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQgKnBhcmFtKQoreworCW10ZC0+bG9jayA9IGNmaV9hdG1lbF9sb2NrOworCW10ZC0+dW5sb2NrID0gY2ZpX2F0bWVsX3VubG9jazsKKwltdGQtPmZsYWdzIHw9IE1URF9TVFVQSURfTE9DSzsKK30KKwogc3RhdGljIHN0cnVjdCBjZmlfZml4dXAgY2ZpX2ZpeHVwX3RhYmxlW10gPSB7CiAjaWZkZWYgQU1EX0JPT1RMT0NfQlVHCiAJeyBDRklfTUZSX0FNRCwgQ0ZJX0lEX0FOWSwgZml4dXBfYW1kX2Jvb3RibG9jaywgTlVMTCB9LApAQCAtMTkyLDYgKzIyOCw3IEBACiAjaWYgIUZPUkNFX1dPUkRfV1JJVEUKIAl7IENGSV9NRlJfQU5ZLCBDRklfSURfQU5ZLCBmaXh1cF91c2Vfd3JpdGVfYnVmZmVycywgTlVMTCwgfSwKICNlbmRpZgorCXsgQ0ZJX01GUl9BVE1FTCwgQ0ZJX0lEX0FOWSwgZml4dXBfY29udmVydF9hdG1lbF9wcmksIE5VTEwgfSwKIAl7IDAsIDAsIE5VTEwsIE5VTEwgfQogfTsKIHN0YXRpYyBzdHJ1Y3QgY2ZpX2ZpeHVwIGplZGVjX2ZpeHVwX3RhYmxlW10gPSB7CkBAIC0yMDcsNiArMjQ0LDcgQEAKIAkgKiB3ZSBrbm93IHRoYXQgaXMgdGhlIGNhc2UuCiAJICovCiAJeyBDRklfTUZSX0FOWSwgQ0ZJX0lEX0FOWSwgZml4dXBfdXNlX2VyYXNlX2NoaXAsIE5VTEwgfSwKKwl7IENGSV9NRlJfQVRNRUwsIEFUNDlCVjY0MTYsIGZpeHVwX3VzZV9hdG1lbF9sb2NrLCBOVUxMIH0sCiAJeyAwLCAwLCBOVUxMLCBOVUxMIH0KIH07CiAKQEAgLTE2MDcsNiArMTY0NSw4MCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRvX2F0bWVsX2xvY2soc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCisJCQkgdW5zaWduZWQgbG9uZyBhZHIsIGludCBsZW4sIHZvaWQgKnRodW5rKQoreworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OworCWludCByZXQ7CisKKwlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCXJldCA9IGdldF9jaGlwKG1hcCwgY2hpcCwgYWRyICsgY2hpcC0+c3RhcnQsIEZMX0xPQ0tJTkcpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3VubG9jazsKKwljaGlwLT5zdGF0ZSA9IEZMX0xPQ0tJTkc7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiTVREICVzKCk6IExPQ0sgMHglMDhseCBsZW4gJWRcbiIsCisJICAgICAgX19mdW5jX18sIGFkciwgbGVuKTsKKworCWNmaV9zZW5kX2dlbl9jbWQoMHhBQSwgY2ZpLT5hZGRyX3VubG9jazEsIGNoaXAtPnN0YXJ0LCBtYXAsIGNmaSwKKwkJCSBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4NTUsIGNmaS0+YWRkcl91bmxvY2syLCBjaGlwLT5zdGFydCwgbWFwLCBjZmksCisJCQkgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJY2ZpX3NlbmRfZ2VuX2NtZCgweDgwLCBjZmktPmFkZHJfdW5sb2NrMSwgY2hpcC0+c3RhcnQsIG1hcCwgY2ZpLAorCQkJIGNmaS0+ZGV2aWNlX3R5cGUsIE5VTEwpOworCWNmaV9zZW5kX2dlbl9jbWQoMHhBQSwgY2ZpLT5hZGRyX3VubG9jazEsIGNoaXAtPnN0YXJ0LCBtYXAsIGNmaSwKKwkJCSBjZmktPmRldmljZV90eXBlLCBOVUxMKTsKKwljZmlfc2VuZF9nZW5fY21kKDB4NTUsIGNmaS0+YWRkcl91bmxvY2syLCBjaGlwLT5zdGFydCwgbWFwLCBjZmksCisJCQkgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NDApLCBjaGlwLT5zdGFydCArIGFkcik7CisKKwljaGlwLT5zdGF0ZSA9IEZMX1JFQURZOworCXB1dF9jaGlwKG1hcCwgY2hpcCwgYWRyICsgY2hpcC0+c3RhcnQpOworCXJldCA9IDA7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2soY2hpcC0+bXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fYXRtZWxfdW5sb2NrKHN0cnVjdCBtYXBfaW5mbyAqbWFwLCBzdHJ1Y3QgZmxjaGlwICpjaGlwLAorCQkJICAgdW5zaWduZWQgbG9uZyBhZHIsIGludCBsZW4sIHZvaWQgKnRodW5rKQoreworCXN0cnVjdCBjZmlfcHJpdmF0ZSAqY2ZpID0gbWFwLT5mbGRydl9wcml2OworCWludCByZXQ7CisKKwlzcGluX2xvY2soY2hpcC0+bXV0ZXgpOworCXJldCA9IGdldF9jaGlwKG1hcCwgY2hpcCwgYWRyICsgY2hpcC0+c3RhcnQsIEZMX1VOTE9DS0lORyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfdW5sb2NrOworCWNoaXAtPnN0YXRlID0gRkxfVU5MT0NLSU5HOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywgIk1URCAlcygpOiBMT0NLIDB4JTA4bHggbGVuICVkXG4iLAorCSAgICAgIF9fZnVuY19fLCBhZHIsIGxlbik7CisKKwljZmlfc2VuZF9nZW5fY21kKDB4QUEsIGNmaS0+YWRkcl91bmxvY2sxLCBjaGlwLT5zdGFydCwgbWFwLCBjZmksCisJCQkgY2ZpLT5kZXZpY2VfdHlwZSwgTlVMTCk7CisJbWFwX3dyaXRlKG1hcCwgQ01EKDB4NzApLCBhZHIpOworCisJY2hpcC0+c3RhdGUgPSBGTF9SRUFEWTsKKwlwdXRfY2hpcChtYXAsIGNoaXAsIGFkciArIGNoaXAtPnN0YXJ0KTsKKwlyZXQgPSAwOworCitvdXRfdW5sb2NrOgorCXNwaW5fdW5sb2NrKGNoaXAtPm11dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNmaV9hdG1lbF9sb2NrKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuKQoreworCXJldHVybiBjZmlfdmFyc2l6ZV9mcm9iKG10ZCwgZG9fYXRtZWxfbG9jaywgb2ZzLCBsZW4sIE5VTEwpOworfQorCitzdGF0aWMgaW50IGNmaV9hdG1lbF91bmxvY2soc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIGNmaV92YXJzaXplX2Zyb2IobXRkLCBkb19hdG1lbF91bmxvY2ssIG9mcywgbGVuLCBOVUxMKTsKK30KKwogCiBzdGF0aWMgdm9pZCBjZmlfYW1kc3RkX3N5bmMgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYyBiL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKaW5kZXggOGYzOWQwYS4uMTE1NGRhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYworKysgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCkBAIC0xMTEsNiArMTExLDcgQEAKICNkZWZpbmUgTVgyOUxWMDQwQwkweDAwNEYKICNkZWZpbmUgTVgyOUxWMTYwVAkweDIyQzQKICNkZWZpbmUgTVgyOUxWMTYwQgkweDIyNDkKKyNkZWZpbmUgTVgyOUYwNDAJMHgwMEE0CiAjZGVmaW5lIE1YMjlGMDE2CTB4MDBBRAogI2RlZmluZSBNWDI5RjAwMlQJMHgwMEIwCiAjZGVmaW5lIE1YMjlGMDA0VAkweDAwNDUKQEAgLTExNzIsNiArMTE3MywxOSBAQAogCQl9CiAJfSwgewogCQkubWZyX2lkCQk9IE1BTlVGQUNUVVJFUl9NQUNST05JWCwKKwkJLmRldl9pZAkJPSBNWDI5RjA0MCwKKwkJLm5hbWUJCT0gIk1hY3Jvbml4IE1YMjlGMDQwIiwKKwkJLnVhZGRyCQk9IHsKKwkJCVswXSA9IE1URF9VQUREUl8weDA1NTVfMHgwMkFBIC8qIHg4ICovCisJCX0sCisJCS5EZXZTaXplCT0gU0laRV81MTJLaUIsCisJCS5DbWRTZXQJCT0gUF9JRF9BTURfU1RELAorCQkuTnVtRXJhc2VSZWdpb25zPSAxLAorCQkucmVnaW9ucwk9IHsKKwkJCUVSQVNFSU5GTygweDEwMDAwLDgpLAorCQl9CisgICAgICAgIH0sIHsKKwkJLm1mcl9pZAkJPSBNQU5VRkFDVFVSRVJfTUFDUk9OSVgsCiAJCS5kZXZfaWQJCT0gTVgyOUYwMTYsCiAJCS5uYW1lCQk9ICJNYWNyb25peCBNWDI5RjAxNiIsCiAJCS51YWRkcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9ibG9jazJtdGQuYwppbmRleCBlZGUzNTYxLi40MDFjNmEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL2Jsb2NrMm10ZC5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvYmxvY2sybXRkLmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAKICNkZWZpbmUgVkVSU0lPTiAiJFJldmlzaW9uOiAxLjMwICQiCiAKQEAgLTIzNiw2ICsyMzcsOCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKworCiBzdGF0aWMgaW50IGJsb2NrMm10ZF93cml0ZShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLCBzaXplX3QgbGVuLAogCQlzaXplX3QgKnJldGxlbiwgY29uc3QgdV9jaGFyICpidWYpCiB7CkBAIC0yOTksNiArMzAyLDE5IEBACiAKIAkvKiBHZXQgYSBoYW5kbGUgb24gdGhlIGRldmljZSAqLwogCWJkZXYgPSBvcGVuX2JkZXZfZXhjbChkZXZuYW1lLCBPX1JEV1IsIE5VTEwpOworI2lmbmRlZiBNT0RVTEUKKwlpZiAoSVNfRVJSKGJkZXYpKSB7CisKKwkJLyogV2UgbWlnaHQgbm90IGhhdmUgcm9vdGZzIG1vdW50ZWQgYXQgdGhpcyBwb2ludC4gVHJ5CisJCSAgIHRvIHJlc29sdmUgdGhlIGRldmljZSBuYW1lIGJ5IG90aGVyIG1lYW5zLiAqLworCisJCWRldl90IGRldiA9IG5hbWVfdG9fZGV2X3QoZGV2bmFtZSk7CisJCWlmIChkZXYgIT0gMCkgeworCQkJYmRldiA9IG9wZW5fYnlfZGV2bnVtKGRldiwgRk1PREVfV1JJVEUgfCBGTU9ERV9SRUFEKTsKKwkJfQorCX0KKyNlbmRpZgorCiAJaWYgKElTX0VSUihiZGV2KSkgewogCQlFUlJPUigiZXJyb3I6IGNhbm5vdCBvcGVuIGRldmljZSAlcyIsIGRldm5hbWUpOwogCQlnb3RvIGRldmluaXRfZXJyOwpAQCAtMzkzLDI2ICs0MDksNiBAQAogfQogCiAKLXN0YXRpYyBpbnQgcGFyc2VfbmFtZShjaGFyICoqcG5hbWUsIGNvbnN0IGNoYXIgKnRva2VuLCBzaXplX3QgbGltaXQpCi17Ci0Jc2l6ZV90IGxlbjsKLQljaGFyICpuYW1lOwotCi0JbGVuID0gc3RybGVuKHRva2VuKSArIDE7Ci0JaWYgKGxlbiA+IGxpbWl0KQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCW5hbWUgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuYW1lKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXN0cmNweShuYW1lLCB0b2tlbik7Ci0KLQkqcG5hbWUgPSBuYW1lOwotCXJldHVybiAwOwotfQotCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBraWxsX2ZpbmFsX25ld2xpbmUoY2hhciAqc3RyKQogewogCWNoYXIgKm5ld2xpbmUgPSBzdHJyY2hyKHN0ciwgJ1xuJyk7CkBAIC00MjYsOSArNDIyLDE1IEBACiAJcmV0dXJuIDA7CQkJCVwKIH0gd2hpbGUgKDApCiAKLXN0YXRpYyBpbnQgYmxvY2sybXRkX3NldHVwKGNvbnN0IGNoYXIgKnZhbCwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApCisjaWZuZGVmIE1PRFVMRQorc3RhdGljIGludCBibG9jazJtdGRfaW5pdF9jYWxsZWQgPSAwOworc3RhdGljIF9faW5pdGRhdGEgY2hhciBibG9jazJtdGRfcGFyYW1saW5lWzgwICsgMTJdOyAvKiA4MCBmb3IgZGV2aWNlLCAxMiBmb3IgZXJhc2Ugc2l6ZSAqLworI2VuZGlmCisKKworc3RhdGljIGludCBibG9jazJtdGRfc2V0dXAyKGNvbnN0IGNoYXIgKnZhbCkKIHsKLQljaGFyIGJ1Zls4MCsxMl07IC8qIDgwIGZvciBkZXZpY2UsIDEyIGZvciBlcmFzZSBzaXplICovCisJY2hhciBidWZbODAgKyAxMl07IC8qIDgwIGZvciBkZXZpY2UsIDEyIGZvciBlcmFzZSBzaXplICovCiAJY2hhciAqc3RyID0gYnVmOwogCWNoYXIgKnRva2VuWzJdOwogCWNoYXIgKm5hbWU7CkBAIC00NTAsMTMgKzQ1Miw5IEBACiAJaWYgKCF0b2tlblswXSkKIAkJcGFyc2VfZXJyKCJubyBhcmd1bWVudCIpOwogCi0JcmV0ID0gcGFyc2VfbmFtZSgmbmFtZSwgdG9rZW5bMF0sIDgwKTsKLQlpZiAocmV0ID09IC1FTk9NRU0pCi0JCXBhcnNlX2Vycigib3V0IG9mIG1lbW9yeSIpOwotCWlmIChyZXQgPT0gLUVOT1NQQykKLQkJcGFyc2VfZXJyKCJuYW1lIHRvbyBsb25nIik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIDA7CisJbmFtZSA9IHRva2VuWzBdOworCWlmIChzdHJsZW4obmFtZSkgKyAxID4gODApCisJCXBhcnNlX2VycigiZGV2aWNlIG5hbWUgdG9vIGxvbmciKTsKIAogCWlmICh0b2tlblsxXSkgewogCQlyZXQgPSBwYXJzZV9udW0oJmVyYXNlX3NpemUsIHRva2VuWzFdKTsKQEAgLTQ3MiwxMyArNDcwLDQ4IEBACiB9CiAKIAorc3RhdGljIGludCBibG9jazJtdGRfc2V0dXAoY29uc3QgY2hhciAqdmFsLCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKyNpZmRlZiBNT0RVTEUKKwlyZXR1cm4gYmxvY2sybXRkX3NldHVwMih2YWwpOworI2Vsc2UKKwkvKiBJZiBtb3JlIHBhcmFtZXRlcnMgYXJlIGxhdGVyIHBhc3NlZCBpbiB2aWEKKwkgICAvc3lzL21vZHVsZS9ibG9jazJtdGQvcGFyYW1ldGVycy9ibG9jazJtdGQKKwkgICBhbmQgYmxvY2sybXRkX2luaXQoKSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCwKKwkgICB3ZSBjYW4gcGFyc2UgdGhlIGFyZ3VtZW50IG5vdy4gKi8KKworCWlmIChibG9jazJtdGRfaW5pdF9jYWxsZWQpCisJCXJldHVybiBibG9jazJtdGRfc2V0dXAyKHZhbCk7CisKKwkvKiBEdXJpbmcgZWFybHkgYm9vdCBzdGFnZSwgd2Ugb25seSBzYXZlIHRoZSBwYXJhbWV0ZXJzCisJICAgaGVyZS4gV2UgbXVzdCBwYXJzZSB0aGVtIGxhdGVyOiBpZiB0aGUgcGFyYW0gcGFzc2VkCisJICAgZnJvbSBrZXJuZWwgYm9vdCBjb21tYW5kIGxpbmUsIGJsb2NrMm10ZF9zZXR1cCgpIGlzCisJICAgY2FsbGVkIHNvIGVhcmx5IHRoYXQgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHJlc29sdmUKKwkgICB0aGUgZGV2aWNlIChldmVuIGttYWxsb2MoKSBmYWlscykuIERldGVyIHRoYXQgd29yayB0bworCSAgIGJsb2NrMm10ZF9zZXR1cDIoKS4gKi8KKworCXN0cmxjcHkoYmxvY2sybXRkX3BhcmFtbGluZSwgdmFsLCBzaXplb2YoYmxvY2sybXRkX3BhcmFtbGluZSkpOworCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworCiBtb2R1bGVfcGFyYW1fY2FsbChibG9jazJtdGQsIGJsb2NrMm10ZF9zZXR1cCwgTlVMTCwgTlVMTCwgMDIwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJsb2NrMm10ZCwgIkRldmljZSB0byB1c2UuIFwiYmxvY2sybXRkPTxkZXY+Wyw8ZXJhc2VzaXplPl1cIiIpOwogCiBzdGF0aWMgaW50IF9faW5pdCBibG9jazJtdGRfaW5pdCh2b2lkKQogeworCWludCByZXQgPSAwOwogCUlORk8oInZlcnNpb24gIiBWRVJTSU9OKTsKLQlyZXR1cm4gMDsKKworI2lmbmRlZiBNT0RVTEUKKwlpZiAoc3RybGVuKGJsb2NrMm10ZF9wYXJhbWxpbmUpKQorCQlyZXQgPSBibG9jazJtdGRfc2V0dXAyKGJsb2NrMm10ZF9wYXJhbWxpbmUpOworCWJsb2NrMm10ZF9pbml0X2NhbGxlZCA9IDE7CisjZW5kaWYKKworCXJldHVybiByZXQ7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYyBiL2RyaXZlcnMvbXRkL2RldmljZXMvbTI1cDgwLmMKaW5kZXggYTg0NjYxNC4uZWY0YTczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvZGV2aWNlcy9tMjVwODAuYworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL20yNXA4MC5jCkBAIC00MDYsMTMgKzQwNiwxMyBAQAogCiBzdGF0aWMgc3RydWN0IGZsYXNoX2luZm8gX19kZXZpbml0ZGF0YSBtMjVwX2RhdGEgW10gPSB7CiAJLyogUkVWSVNJVDogZmlsbCBpbiBKRURFQyBpZHMsIGZvciBwYXJ0cyB0aGF0IGhhdmUgdGhlbSAqLwotCXsgIm0yNXAwNSIsIDB4MDUsIDB4MDAwMCwgMzIgKiAxMDI0LCAyIH0sCi0JeyAibTI1cDEwIiwgMHgxMCwgMHgwMDAwLCAzMiAqIDEwMjQsIDQgfSwKLQl7ICJtMjVwMjAiLCAweDExLCAweDAwMDAsIDY0ICogMTAyNCwgNCB9LAotCXsgIm0yNXA0MCIsIDB4MTIsIDB4MDAwMCwgNjQgKiAxMDI0LCA4IH0sCisJeyAibTI1cDA1IiwgMHgwNSwgMHgyMDEwLCAzMiAqIDEwMjQsIDIgfSwKKwl7ICJtMjVwMTAiLCAweDEwLCAweDIwMTEsIDMyICogMTAyNCwgNCB9LAorCXsgIm0yNXAyMCIsIDB4MTEsIDB4MjAxMiwgNjQgKiAxMDI0LCA0IH0sCisJeyAibTI1cDQwIiwgMHgxMiwgMHgyMDEzLCA2NCAqIDEwMjQsIDggfSwKIAl7ICJtMjVwODAiLCAweDEzLCAweDAwMDAsIDY0ICogMTAyNCwgMTYgfSwKLQl7ICJtMjVwMTYiLCAweDE0LCAweDAwMDAsIDY0ICogMTAyNCwgMzIgfSwKLQl7ICJtMjVwMzIiLCAweDE1LCAweDAwMDAsIDY0ICogMTAyNCwgNjQgfSwKKwl7ICJtMjVwMTYiLCAweDE0LCAweDIwMTUsIDY0ICogMTAyNCwgMzIgfSwKKwl7ICJtMjVwMzIiLCAweDE1LCAweDIwMTYsIDY0ICogMTAyNCwgNjQgfSwKIAl7ICJtMjVwNjQiLCAweDE2LCAweDIwMTcsIDY0ICogMTAyNCwgMTI4IH0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9wbWM1NTEuYwppbmRleCA2ZjliYmY2Li4zNTRlMTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9kZXZpY2VzL3BtYzU1MS5jCisrKyBiL2RyaXZlcnMvbXRkL2RldmljZXMvcG1jNTUxLmMKQEAgLTQsODIgKzQsODIgQEAKICAqIFBNQzU1MSBQQ0kgTWV6emFuaW5lIFJhbSBEZXZpY2UKICAqCiAgKiBBdXRob3I6Ci0gKiAgICAgICBNYXJrIEZlcnJlbGwgPG1mZXJyZWxsQG12aXN0YS5jb20+Ci0gKiAgICAgICBDb3B5cmlnaHQgMTk5OSwyMDAwIE5vcnRlbCBOZXR3b3JrcworICoJTWFyayBGZXJyZWxsIDxtZmVycmVsbEBtdmlzdGEuY29tPgorICoJQ29weXJpZ2h0IDE5OTksMjAwMCBOb3J0ZWwgTmV0d29ya3MKICAqCiAgKiBMaWNlbnNlOgotICoJIEFzIHBhcnQgb2YgdGhpcyBkcml2ZXIgd2FzIGRlcml2ZWQgZnJvbSB0aGUgc2xyYW0uYyBkcml2ZXIgaXQKLSAqCSBmYWxscyB1bmRlciB0aGUgc2FtZSBsaWNlbnNlLCB3aGljaCBpcyBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqCSBMaWNlbnNlIHYyCisgKglBcyBwYXJ0IG9mIHRoaXMgZHJpdmVyIHdhcyBkZXJpdmVkIGZyb20gdGhlIHNscmFtLmMgZHJpdmVyIGl0CisgKglmYWxscyB1bmRlciB0aGUgc2FtZSBsaWNlbnNlLCB3aGljaCBpcyBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqCUxpY2Vuc2UgdjIKICAqCiAgKiBEZXNjcmlwdGlvbjoKLSAqCSBUaGlzIGRyaXZlciBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IHRoZSBQTUM1NTEgUENJIFJhbSBkZXZpY2UKLSAqCSBmcm9tIFJhbWl4IEluYy4gIFRoZSBQTUM1NTEgaXMgYSBQTUMgTWV6emFuaW5lIG1vZHVsZSBmb3IKLSAqCSBjUENJIGVtYmVkZGVkIHN5c3RlbXMuICBUaGUgZGV2aWNlIGNvbnRhaW5zIGEgc2luZ2xlIFNST00KLSAqCSB0aGF0IGluaXRpYWxseSBwcm9ncmFtcyB0aGUgVjM3MFBEQyBjaGlwc2V0IG9uYm9hcmQgdGhlCi0gKgkgZGV2aWNlLCBhbmQgdmFyaW91cyBiYW5rcyBvZiBEUkFNL1NEUkFNIG9uYm9hcmQuICBUaGlzIGRyaXZlcgotICoJIGltcGxlbWVudHMgdGhpcyBQQ0kgUmFtIGRldmljZSBhcyBhbiBNVEQgKE1lbW9yeSBUZWNobm9sb2d5Ci0gKgkgRGV2aWNlKSBzbyB0aGF0IGl0IGNhbiBiZSB1c2VkIHRvIGhvbGQgYSBmaWxlIHN5c3RlbSwgb3IgZm9yCi0gKgkgYWRkZWQgc3dhcCBzcGFjZSBpbiBlbWJlZGRlZCBzeXN0ZW1zLiAgU2luY2UgdGhlIG1lbW9yeSBvbgotICoJIHRoaXMgYm9hcmQgaXNuJ3QgYXMgZmFzdCBhcyBtYWluIG1lbW9yeSB3ZSBkbyBub3QgdHJ5IHRvIGhvb2sKLSAqCSBpdCBpbnRvIG1haW4gbWVtb3J5IGFzIHRoYXQgd291bGQgc2ltcGx5IHJlZHVjZSBwZXJmb3JtYW5jZQotICoJIG9uIHRoZSBzeXN0ZW0uICBVc2luZyBpdCBhcyBhIGJsb2NrIGRldmljZSBhbGxvd3MgdXMgdG8gdXNlCi0gKgkgaXQgYXMgaGlnaCBzcGVlZCBzd2FwIG9yIGZvciBhIGhpZ2ggc3BlZWQgZGlzayBkZXZpY2Ugb2Ygc29tZQotICoJIHNvcnQuICBXaGljaCBiZWNvbWVzIHZlcnkgdXNlZnVsIG9uIGRpc2tsZXNzIHN5c3RlbXMgaW4gdGhlCi0gKgkgZW1iZWRkZWQgbWFya2V0IEkgbWlnaHQgYWRkLgorICoJVGhpcyBkcml2ZXIgaXMgaW50ZW5kZWQgdG8gc3VwcG9ydCB0aGUgUE1DNTUxIFBDSSBSYW0gZGV2aWNlCisgKglmcm9tIFJhbWl4IEluYy4gIFRoZSBQTUM1NTEgaXMgYSBQTUMgTWV6emFuaW5lIG1vZHVsZSBmb3IKKyAqCWNQQ0kgZW1iZWRkZWQgc3lzdGVtcy4gIFRoZSBkZXZpY2UgY29udGFpbnMgYSBzaW5nbGUgU1JPTQorICoJdGhhdCBpbml0aWFsbHkgcHJvZ3JhbXMgdGhlIFYzNzBQREMgY2hpcHNldCBvbmJvYXJkIHRoZQorICoJZGV2aWNlLCBhbmQgdmFyaW91cyBiYW5rcyBvZiBEUkFNL1NEUkFNIG9uYm9hcmQuICBUaGlzIGRyaXZlcgorICoJaW1wbGVtZW50cyB0aGlzIFBDSSBSYW0gZGV2aWNlIGFzIGFuIE1URCAoTWVtb3J5IFRlY2hub2xvZ3kKKyAqCURldmljZSkgc28gdGhhdCBpdCBjYW4gYmUgdXNlZCB0byBob2xkIGEgZmlsZSBzeXN0ZW0sIG9yIGZvcgorICoJYWRkZWQgc3dhcCBzcGFjZSBpbiBlbWJlZGRlZCBzeXN0ZW1zLiAgU2luY2UgdGhlIG1lbW9yeSBvbgorICoJdGhpcyBib2FyZCBpc24ndCBhcyBmYXN0IGFzIG1haW4gbWVtb3J5IHdlIGRvIG5vdCB0cnkgdG8gaG9vaworICoJaXQgaW50byBtYWluIG1lbW9yeSBhcyB0aGF0IHdvdWxkIHNpbXBseSByZWR1Y2UgcGVyZm9ybWFuY2UKKyAqCW9uIHRoZSBzeXN0ZW0uICBVc2luZyBpdCBhcyBhIGJsb2NrIGRldmljZSBhbGxvd3MgdXMgdG8gdXNlCisgKglpdCBhcyBoaWdoIHNwZWVkIHN3YXAgb3IgZm9yIGEgaGlnaCBzcGVlZCBkaXNrIGRldmljZSBvZiBzb21lCisgKglzb3J0LiAgV2hpY2ggYmVjb21lcyB2ZXJ5IHVzZWZ1bCBvbiBkaXNrbGVzcyBzeXN0ZW1zIGluIHRoZQorICoJZW1iZWRkZWQgbWFya2V0IEkgbWlnaHQgYWRkLgogICoKICAqIE5vdGVzOgotICoJIER1ZSB0byB3aGF0IEkgYXNzdW1lIGlzIG1vcmUgYnVnZ3kgU1JPTSwgdGhlIDY0TSBQTUM1NTEgSQotICoJIGhhdmUgYXZhaWxhYmxlIGNsYWltcyB0aGF0IGFsbCA0IG9mIGl0J3MgRFJBTSBiYW5rcyBoYXZlIDY0TQotICoJIG9mIHJhbSBjb25maWd1cmVkIChtYWtpbmcgYSBncmFuZCB0b3RhbCBvZiAyNTZNIG9uYm9hcmQpLgotICoJIFRoaXMgaXMgc2xpZ2h0bHkgYW5ub3lpbmcgc2luY2UgdGhlIEJBUjAgc2l6ZSByZWZsZWN0cyB0aGUKLSAqCSBhcGVydHVyZSBzaXplLCBub3QgdGhlIGRyYW0gc2l6ZSwgYW5kIHRoZSBWMzcwUERDIHN1cHBsaWVzIG5vCi0gKgkgb3RoZXIgbWV0aG9kIGZvciBtZW1vcnkgc2l6ZSBkaXNjb3ZlcnkuICBUaGlzIHByb2JsZW0gaXMKLSAqCSBtb3N0bHkgb25seSByZWxldmFudCB3aGVuIGNvbXBpbGVkIGFzIGEgbW9kdWxlLCBhcyB0aGUKLSAqCSB1bmxvYWRpbmcgb2YgdGhlIG1vZHVsZSB3aXRoIGFuIGFwZXJ0dXJlIHNpemUgc21hbGxlciB0aGVuCi0gKgkgdGhlIHJhbSB3aWxsIGNhdXNlIHRoZSBkcml2ZXIgdG8gZGV0ZWN0IHRoZSBvbmJvYXJkIG1lbW9yeQotICoJIHNpemUgdG8gYmUgZXF1YWwgdG8gdGhlIGFwZXJ0dXJlIHNpemUgd2hlbiB0aGUgbW9kdWxlIGlzCi0gKgkgcmVsb2FkZWQuICBTb29vbywgdG8gaGVscCwgdGhlIG1vZHVsZSBzdXBwb3J0cyBhbiBtc2l6ZQotICoJIG9wdGlvbiB0byBhbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb25ib2FyZCBtZW1vcnksIGFuZAotICoJIGFuIGFzaXplIG9wdGlvbiwgdG8gYWxsb3cgdGhlIHNwZWNpZmljYXRpb24gb2YgdGhlIGFwZXJ0dXJlCi0gKgkgc2l6ZS4gIFRoZSBhcGVydHVyZSBtdXN0IGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhlbiB0aGUgbWVtb3J5Ci0gKgkgc2l6ZSwgdGhlIGRyaXZlciB3aWxsIGNvcnJlY3QgdGhpcyBpZiB5b3Ugc2NyZXcgaXQgdXAuICBUaGlzCi0gKgkgcHJvYmxlbSBpcyBub3QgcmVsZXZhbnQgZm9yIGNvbXBpbGVkIGluIGRyaXZlcnMgYXMgY29tcGlsZWQKLSAqCSBpbiBkcml2ZXJzIG9ubHkgaW5pdCBvbmNlLgorICoJRHVlIHRvIHdoYXQgSSBhc3N1bWUgaXMgbW9yZSBidWdneSBTUk9NLCB0aGUgNjRNIFBNQzU1MSBJCisgKgloYXZlIGF2YWlsYWJsZSBjbGFpbXMgdGhhdCBhbGwgNCBvZiBpdCdzIERSQU0gYmFua3MgaGF2ZSA2NE0KKyAqCW9mIHJhbSBjb25maWd1cmVkIChtYWtpbmcgYSBncmFuZCB0b3RhbCBvZiAyNTZNIG9uYm9hcmQpLgorICoJVGhpcyBpcyBzbGlnaHRseSBhbm5veWluZyBzaW5jZSB0aGUgQkFSMCBzaXplIHJlZmxlY3RzIHRoZQorICoJYXBlcnR1cmUgc2l6ZSwgbm90IHRoZSBkcmFtIHNpemUsIGFuZCB0aGUgVjM3MFBEQyBzdXBwbGllcyBubworICoJb3RoZXIgbWV0aG9kIGZvciBtZW1vcnkgc2l6ZSBkaXNjb3ZlcnkuICBUaGlzIHByb2JsZW0gaXMKKyAqCW1vc3RseSBvbmx5IHJlbGV2YW50IHdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIGFzIHRoZQorICoJdW5sb2FkaW5nIG9mIHRoZSBtb2R1bGUgd2l0aCBhbiBhcGVydHVyZSBzaXplIHNtYWxsZXIgdGhlbgorICoJdGhlIHJhbSB3aWxsIGNhdXNlIHRoZSBkcml2ZXIgdG8gZGV0ZWN0IHRoZSBvbmJvYXJkIG1lbW9yeQorICoJc2l6ZSB0byBiZSBlcXVhbCB0byB0aGUgYXBlcnR1cmUgc2l6ZSB3aGVuIHRoZSBtb2R1bGUgaXMKKyAqCXJlbG9hZGVkLiAgU29vb28sIHRvIGhlbHAsIHRoZSBtb2R1bGUgc3VwcG9ydHMgYW4gbXNpemUKKyAqCW9wdGlvbiB0byBhbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgb25ib2FyZCBtZW1vcnksIGFuZAorICoJYW4gYXNpemUgb3B0aW9uLCB0byBhbGxvdyB0aGUgc3BlY2lmaWNhdGlvbiBvZiB0aGUgYXBlcnR1cmUKKyAqCXNpemUuICBUaGUgYXBlcnR1cmUgbXVzdCBiZSBlcXVhbCB0byBvciBsZXNzIHRoZW4gdGhlIG1lbW9yeQorICoJc2l6ZSwgdGhlIGRyaXZlciB3aWxsIGNvcnJlY3QgdGhpcyBpZiB5b3Ugc2NyZXcgaXQgdXAuICBUaGlzCisgKglwcm9ibGVtIGlzIG5vdCByZWxldmFudCBmb3IgY29tcGlsZWQgaW4gZHJpdmVycyBhcyBjb21waWxlZAorICoJaW4gZHJpdmVycyBvbmx5IGluaXQgb25jZS4KICAqCiAgKiBDcmVkaXRzOgotICogICAgICAgU2FlZWQgS2FyYW1vb3ogPHNhZWVkQHJhbWl4LmNvbT4gb2YgUmFtaXggSU5DLiBmb3IgdGhlCi0gKiAgICAgICBpbml0aWFsIGV4YW1wbGUgY29kZSBvZiBob3cgdG8gaW5pdGlhbGl6ZSB0aGlzIGRldmljZSBhbmQgZm9yCi0gKiAgICAgICBoZWxwIHdpdGggcXVlc3Rpb25zIEkgaGFkIGNvbmNlcm5pbmcgb3BlcmF0aW9uIG9mIHRoZSBkZXZpY2UuCisgKglTYWVlZCBLYXJhbW9veiA8c2FlZWRAcmFtaXguY29tPiBvZiBSYW1peCBJTkMuIGZvciB0aGUKKyAqCWluaXRpYWwgZXhhbXBsZSBjb2RlIG9mIGhvdyB0byBpbml0aWFsaXplIHRoaXMgZGV2aWNlIGFuZCBmb3IKKyAqCWhlbHAgd2l0aCBxdWVzdGlvbnMgSSBoYWQgY29uY2VybmluZyBvcGVyYXRpb24gb2YgdGhlIGRldmljZS4KICAqCi0gKiAgICAgICBNb3N0IG9mIHRoZSBNVEQgY29kZSBmb3IgdGhpcyBkcml2ZXIgd2FzIG9yaWdpbmFsbHkgd3JpdHRlbgotICogICAgICAgZm9yIHRoZSBzbHJhbS5vIG1vZHVsZSBpbiB0aGUgTVREIGRyaXZlcnMgcGFja2FnZSB3aGljaAotICogICAgICAgYWxsb3dzIHRoZSBtYXBwaW5nIG9mIHN5c3RlbSBtZW1vcnkgaW50byBhbiBNVEQgZGV2aWNlLgotICogICAgICAgU2luY2UgdGhlIFBNQzU1MSBtZW1vcnkgbW9kdWxlIGlzIGFjY2Vzc2VkIGluIHRoZSBzYW1lCi0gKiAgICAgICBmYXNoaW9uIGFzIHN5c3RlbSBtZW1vcnksIHRoZSBzbHJhbS5jIGNvZGUgYmVjYW1lIGEgdmVyeSBuaWNlCi0gKiAgICAgICBmaXQgdG8gdGhlIG5lZWRzIG9mIHRoaXMgZHJpdmVyLiAgQWxsIHdlIGFkZGVkIHdhcyBQQ0kKLSAqICAgICAgIGRldGVjdGlvbi9pbml0aWFsaXphdGlvbiB0byB0aGUgZHJpdmVyIGFuZCBhdXRvbWF0aWNhbGx5IGZpZ3VyZQotICogICAgICAgb3V0IHRoZSBzaXplIHZpYSB0aGUgUENJIGRldGVjdGlvbi5vLCBsYXRlciBjaGFuZ2VzIGJ5IENvcmV5Ci0gKiAgICAgICBNaW55YXJkIHNldCB1cCB0aGUgY2FyZCB0byB1dGlsaXplIGEgMU0gc2xpZGluZyBhcGF0dXJlLgorICoJTW9zdCBvZiB0aGUgTVREIGNvZGUgZm9yIHRoaXMgZHJpdmVyIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4KKyAqCWZvciB0aGUgc2xyYW0ubyBtb2R1bGUgaW4gdGhlIE1URCBkcml2ZXJzIHBhY2thZ2Ugd2hpY2gKKyAqCWFsbG93cyB0aGUgbWFwcGluZyBvZiBzeXN0ZW0gbWVtb3J5IGludG8gYW4gTVREIGRldmljZS4KKyAqCVNpbmNlIHRoZSBQTUM1NTEgbWVtb3J5IG1vZHVsZSBpcyBhY2Nlc3NlZCBpbiB0aGUgc2FtZQorICoJZmFzaGlvbiBhcyBzeXN0ZW0gbWVtb3J5LCB0aGUgc2xyYW0uYyBjb2RlIGJlY2FtZSBhIHZlcnkgbmljZQorICoJZml0IHRvIHRoZSBuZWVkcyBvZiB0aGlzIGRyaXZlci4gIEFsbCB3ZSBhZGRlZCB3YXMgUENJCisgKglkZXRlY3Rpb24vaW5pdGlhbGl6YXRpb24gdG8gdGhlIGRyaXZlciBhbmQgYXV0b21hdGljYWxseSBmaWd1cmUKKyAqCW91dCB0aGUgc2l6ZSB2aWEgdGhlIFBDSSBkZXRlY3Rpb24ubywgbGF0ZXIgY2hhbmdlcyBieSBDb3JleQorICoJTWlueWFyZCBzZXQgdXAgdGhlIGNhcmQgdG8gdXRpbGl6ZSBhIDFNIHNsaWRpbmcgYXBhdHVyZS4KICAqCi0gKgkgQ29yZXkgTWlueWFyZCA8bWlueWFyZEBub3J0ZWxuZXR3b3Jrcy5jb20+Ci0gKiAgICAgICAqIE1vZGlmaWVkIGRyaXZlciB0byB1dGlsaXplIGEgc2xpZGluZyBhcGVydHVyZSBpbnN0ZWFkIG9mCi0gKiAgICAgICAgIG1hcHBpbmcgYWxsIG1lbW9yeSBpbnRvIGtlcm5lbCBzcGFjZSB3aGljaCB0dXJuZWQgb3V0IHRvCi0gKiAgICAgICAgIGJlIHZlcnkgd2FzdGVmdWwuCi0gKiAgICAgICAqIExvY2F0ZWQgYSBidWcgaW4gdGhlIFNST00ncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSB0aGF0Ci0gKiAgICAgICAgIG1hZGUgdGhlIG1lbW9yeSB1bnVzYWJsZSwgYWRkZWQgYSBmaXggdG8gY29kZSB0byB0b3VjaCB1cAotICogICAgICAgICB0aGUgRFJBTSBzb21lLgorICoJQ29yZXkgTWlueWFyZCA8bWlueWFyZEBub3J0ZWxuZXR3b3Jrcy5jb20+CisgKgkqIE1vZGlmaWVkIGRyaXZlciB0byB1dGlsaXplIGEgc2xpZGluZyBhcGVydHVyZSBpbnN0ZWFkIG9mCisgKgkgbWFwcGluZyBhbGwgbWVtb3J5IGludG8ga2VybmVsIHNwYWNlIHdoaWNoIHR1cm5lZCBvdXQgdG8KKyAqCSBiZSB2ZXJ5IHdhc3RlZnVsLgorICoJKiBMb2NhdGVkIGEgYnVnIGluIHRoZSBTUk9NJ3MgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgdGhhdAorICoJIG1hZGUgdGhlIG1lbW9yeSB1bnVzYWJsZSwgYWRkZWQgYSBmaXggdG8gY29kZSB0byB0b3VjaCB1cAorICoJIHRoZSBEUkFNIHNvbWUuCiAgKgogICogQnVncy9GSVhNRSdzOgotICogICAgICAgKiBNVVNUIGZpeCB0aGUgaW5pdCBmdW5jdGlvbiB0byBub3Qgc3BpbiBvbiBhIHJlZ2lzdGVyCi0gKiAgICAgICB3YWl0aW5nIGZvciBpdCB0byBzZXQgLi4gdGhpcyBkb2VzIG5vdCBzYWZlbHkgaGFuZGxlIGJ1c3RlZAotICogICAgICAgZGV2aWNlcyB0aGF0IG5ldmVyIHJlc2V0IHRoZSByZWdpc3RlciBjb3JyZWN0bHkgd2hpY2ggd2lsbAotICogICAgICAgY2F1c2UgdGhlIHN5c3RlbSB0byBoYW5nIHcvIGEgcmVib290IGJlaW5nIHRoZSBvbmx5IGNoYW5jZSBhdAotICogICAgICAgcmVjb3Zlci4gW3NvcnQgb2YgZml4ZWQsIGNvdWxkIGJlIGJldHRlcl0KLSAqICAgICAgICogQWRkIEkyQyBoYW5kbGluZyBvZiB0aGUgU1JPTSBzbyB3ZSBjYW4gcmVhZCB0aGUgU1JPTSdzIGluZm9ybWF0aW9uCi0gKiAgICAgICBhYm91dCB0aGUgYXBlcnR1cmUgc2l6ZS4gIFRoaXMgc2hvdWxkIGFsd2F5cyBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlCi0gKiAgICAgICBvbmJvYXJkIG1lbW9yeSBzaXplLgotICogICAgICAgKiBDb21iIHRoZSBpbml0IHJvdXRpbmUuICBJdCdzIHN0aWxsIGEgYml0IGNsdWRneSBvbiBhIGZldyB0aGluZ3MuCisgKgkqIE1VU1QgZml4IHRoZSBpbml0IGZ1bmN0aW9uIHRvIG5vdCBzcGluIG9uIGEgcmVnaXN0ZXIKKyAqCXdhaXRpbmcgZm9yIGl0IHRvIHNldCAuLiB0aGlzIGRvZXMgbm90IHNhZmVseSBoYW5kbGUgYnVzdGVkCisgKglkZXZpY2VzIHRoYXQgbmV2ZXIgcmVzZXQgdGhlIHJlZ2lzdGVyIGNvcnJlY3RseSB3aGljaCB3aWxsCisgKgljYXVzZSB0aGUgc3lzdGVtIHRvIGhhbmcgdy8gYSByZWJvb3QgYmVpbmcgdGhlIG9ubHkgY2hhbmNlIGF0CisgKglyZWNvdmVyLiBbc29ydCBvZiBmaXhlZCwgY291bGQgYmUgYmV0dGVyXQorICoJKiBBZGQgSTJDIGhhbmRsaW5nIG9mIHRoZSBTUk9NIHNvIHdlIGNhbiByZWFkIHRoZSBTUk9NJ3MgaW5mb3JtYXRpb24KKyAqCWFib3V0IHRoZSBhcGVydHVyZSBzaXplLiAgVGhpcyBzaG91bGQgYWx3YXlzIGFjY3VyYXRlbHkgcmVmbGVjdCB0aGUKKyAqCW9uYm9hcmQgbWVtb3J5IHNpemUuCisgKgkqIENvbWIgdGhlIGluaXQgcm91dGluZS4gIEl0J3Mgc3RpbGwgYSBiaXQgY2x1ZGd5IG9uIGEgZmV3IHRoaW5ncy4KICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC05OSw4NCArOTksODMgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKLSNpZm5kZWYgQ09ORklHX1BDSQotI2Vycm9yIEVuYWJsZSBQQ0kgaW4geW91ciBrZXJuZWwgY29uZmlnCi0jZW5kaWYKLQogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcG1jNTUxLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL2NvbXBhdG1hYy5oPgogCiBzdGF0aWMgc3RydWN0IG10ZF9pbmZvICpwbWM1NTFsaXN0OwogCi1zdGF0aWMgaW50IHBtYzU1MV9lcmFzZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cikKK3N0YXRpYyBpbnQgcG1jNTUxX2VyYXNlKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgZXJhc2VfaW5mbyAqaW5zdHIpCiB7Ci0gICAgICAgIHN0cnVjdCBteXByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0gICAgICAgIHUzMiBzb2ZmX2hpLCBzb2ZmX2xvOyAvKiBzdGFydCBhZGRyZXNzIG9mZnNldCBoaS9sbyAqLwotICAgICAgICB1MzIgZW9mZl9oaSwgZW9mZl9sbzsgLyogZW5kIGFkZHJlc3Mgb2Zmc2V0IGhpL2xvICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kOworCXN0cnVjdCBteXByaXYgKnByaXYgPSBtdGQtPnByaXY7CisJdTMyIHNvZmZfaGksIHNvZmZfbG87CS8qIHN0YXJ0IGFkZHJlc3Mgb2Zmc2V0IGhpL2xvICovCisJdTMyIGVvZmZfaGksIGVvZmZfbG87CS8qIGVuZCBhZGRyZXNzIG9mZnNldCBoaS9sbyAqLworCXVuc2lnbmVkIGxvbmcgZW5kOwogCXVfY2hhciAqcHRyOwogCXNpemVfdCByZXRsZW47CiAKICNpZmRlZiBDT05GSUdfTVREX1BNQzU1MV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTFfZXJhc2UocG9zOiVsZCwgbGVuOiVsZClcbiIsIChsb25nKWluc3RyLT5hZGRyLCAobG9uZylpbnN0ci0+bGVuKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX2VyYXNlKHBvczolbGQsIGxlbjolbGQpXG4iLCAobG9uZylpbnN0ci0+YWRkciwKKwkJKGxvbmcpaW5zdHItPmxlbik7CiAjZW5kaWYKIAotICAgICAgICBlbmQgPSBpbnN0ci0+YWRkciArIGluc3RyLT5sZW4gLSAxOworCWVuZCA9IGluc3RyLT5hZGRyICsgaW5zdHItPmxlbiAtIDE7CiAKLSAgICAgICAgLyogSXMgaXQgcGFzdCB0aGUgZW5kPyAqLwotICAgICAgICBpZiAoIGVuZCA+IG10ZC0+c2l6ZSApIHsKKwkvKiBJcyBpdCBwYXN0IHRoZSBlbmQ/ICovCisJaWYgKGVuZCA+IG10ZC0+c2l6ZSkgewogI2lmZGVmIENPTkZJR19NVERfUE1DNTUxX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV9lcmFzZSgpIG91dCBvZiBib3VuZHMgKCVsZCA+ICVsZClcbiIsIChsb25nKWVuZCwgKGxvbmcpbXRkLT5zaXplKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV9lcmFzZSgpIG91dCBvZiBib3VuZHMgKCVsZCA+ICVsZClcbiIsCisJCQkobG9uZyllbmQsIChsb25nKW10ZC0+c2l6ZSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLSAgICAgICAgZW9mZl9oaSA9IGVuZCAmIH4ocHJpdi0+YXNpemUgLSAxKTsKLSAgICAgICAgc29mZl9oaSA9IGluc3RyLT5hZGRyICYgfihwcml2LT5hc2l6ZSAtIDEpOwotICAgICAgICBlb2ZmX2xvID0gZW5kICYgKHByaXYtPmFzaXplIC0gMSk7Ci0gICAgICAgIHNvZmZfbG8gPSBpbnN0ci0+YWRkciAmIChwcml2LT5hc2l6ZSAtIDEpOworCWVvZmZfaGkgPSBlbmQgJiB+KHByaXYtPmFzaXplIC0gMSk7CisJc29mZl9oaSA9IGluc3RyLT5hZGRyICYgfihwcml2LT5hc2l6ZSAtIDEpOworCWVvZmZfbG8gPSBlbmQgJiAocHJpdi0+YXNpemUgLSAxKTsKKwlzb2ZmX2xvID0gaW5zdHItPmFkZHIgJiAocHJpdi0+YXNpemUgLSAxKTsKIAotCXBtYzU1MV9wb2ludCAobXRkLCBpbnN0ci0+YWRkciwgaW5zdHItPmxlbiwgJnJldGxlbiwgJnB0cik7CisJcG1jNTUxX3BvaW50KG10ZCwgaW5zdHItPmFkZHIsIGluc3RyLT5sZW4sICZyZXRsZW4sICZwdHIpOwogCi0gICAgICAgIGlmICggc29mZl9oaSA9PSBlb2ZmX2hpIHx8IG10ZC0+c2l6ZSA9PSBwcml2LT5hc2l6ZSkgewotICAgICAgICAgICAgICAgIC8qIFRoZSB3aG9sZSB0aGluZyBmaXRzIHdpdGhpbiBvbmUgYWNjZXNzLCBzbyBqdXN0IG9uZSBzaG90Ci0gICAgICAgICAgICAgICAgICAgd2lsbCBkbyBpdC4gKi8KLSAgICAgICAgICAgICAgICBtZW1zZXQocHRyLCAweGZmLCBpbnN0ci0+bGVuKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIGRvIG11bHRpcGxlIHdyaXRlcyB0byBnZXQgYWxsIHRoZSBkYXRhCi0gICAgICAgICAgICAgICAgICAgd3JpdHRlbi4gKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoc29mZl9oaSAhPSBlb2ZmX2hpKSB7CisJaWYgKHNvZmZfaGkgPT0gZW9mZl9oaSB8fCBtdGQtPnNpemUgPT0gcHJpdi0+YXNpemUpIHsKKwkJLyogVGhlIHdob2xlIHRoaW5nIGZpdHMgd2l0aGluIG9uZSBhY2Nlc3MsIHNvIGp1c3Qgb25lIHNob3QKKwkJICAgd2lsbCBkbyBpdC4gKi8KKwkJbWVtc2V0KHB0ciwgMHhmZiwgaW5zdHItPmxlbik7CisJfSBlbHNlIHsKKwkJLyogV2UgaGF2ZSB0byBkbyBtdWx0aXBsZSB3cml0ZXMgdG8gZ2V0IGFsbCB0aGUgZGF0YQorCQkgICB3cml0dGVuLiAqLworCQl3aGlsZSAoc29mZl9oaSAhPSBlb2ZmX2hpKSB7CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKLQkJCXByaW50ayggS0VSTl9ERUJVRyAicG1jNTUxX2VyYXNlKCkgc29mZl9oaTogJWxkLCBlb2ZmX2hpOiAlbGRcbiIsIChsb25nKXNvZmZfaGksIChsb25nKWVvZmZfaGkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV9lcmFzZSgpIHNvZmZfaGk6ICVsZCwgIgorCQkJCSJlb2ZmX2hpOiAlbGRcbiIsIChsb25nKXNvZmZfaGksIChsb25nKWVvZmZfaGkpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQocHRyLCAweGZmLCBwcml2LT5hc2l6ZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc29mZl9oaSArIHByaXYtPmFzaXplID49IG10ZC0+c2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvZmZfaGkgKz0gcHJpdi0+YXNpemU7Ci0JCQlwbWM1NTFfcG9pbnQgKG10ZCwocHJpdi0+YmFzZV9tYXAwfHNvZmZfaGkpLAotCQkJCSAgICAgIHByaXYtPmFzaXplLCAmcmV0bGVuLCAmcHRyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtc2V0IChwdHIsIDB4ZmYsIGVvZmZfbG8pOwotICAgICAgICB9CisJCQltZW1zZXQocHRyLCAweGZmLCBwcml2LT5hc2l6ZSk7CisJCQlpZiAoc29mZl9oaSArIHByaXYtPmFzaXplID49IG10ZC0+c2l6ZSkgeworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJc29mZl9oaSArPSBwcml2LT5hc2l6ZTsKKwkJCXBtYzU1MV9wb2ludChtdGQsIChwcml2LT5iYXNlX21hcDAgfCBzb2ZmX2hpKSwKKwkJCQkgICAgIHByaXYtPmFzaXplLCAmcmV0bGVuLCAmcHRyKTsKKwkJfQorCQltZW1zZXQocHRyLCAweGZmLCBlb2ZmX2xvKTsKKwl9CiAKLW91dDoKKyAgICAgIG91dDoKIAlpbnN0ci0+c3RhdGUgPSBNVERfRVJBU0VfRE9ORTsKICNpZmRlZiBDT05GSUdfTVREX1BNQzU1MV9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTFfZXJhc2UoKSBkb25lXG4iKTsKICNlbmRpZgogCi0gICAgICAgIG10ZF9lcmFzZV9jYWxsYmFjayhpbnN0cik7Ci0gICAgICAgIHJldHVybiAwOworCW10ZF9lcmFzZV9jYWxsYmFjayhpbnN0cik7CisJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGludCBwbWM1NTFfcG9pbnQgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqKm10ZGJ1ZikKK3N0YXRpYyBpbnQgcG1jNTUxX3BvaW50KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqIHJldGxlbiwgdV9jaGFyICoqIG10ZGJ1ZikKIHsKLSAgICAgICAgc3RydWN0IG15cHJpdiAqcHJpdiA9IG10ZC0+cHJpdjsKLSAgICAgICAgdTMyIHNvZmZfaGk7Ci0gICAgICAgIHUzMiBzb2ZmX2xvOworCXN0cnVjdCBteXByaXYgKnByaXYgPSBtdGQtPnByaXY7CisJdTMyIHNvZmZfaGk7CisJdTMyIHNvZmZfbG87CiAKICNpZmRlZiBDT05GSUdfTVREX1BNQzU1MV9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTFfcG9pbnQoJWxkLCAlbGQpXG4iLCAobG9uZylmcm9tLCAobG9uZylsZW4pOwpAQCAtMTg0LDE4ICsxODMsMTkgQEAKIAogCWlmIChmcm9tICsgbGVuID4gbXRkLT5zaXplKSB7CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKLQkJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV9wb2ludCgpIG91dCBvZiBib3VuZHMgKCVsZCA+ICVsZClcbiIsIChsb25nKWZyb20rbGVuLCAobG9uZyltdGQtPnNpemUpOworCQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3BvaW50KCkgb3V0IG9mIGJvdW5kcyAoJWxkID4gJWxkKVxuIiwKKwkJCShsb25nKWZyb20gKyBsZW4sIChsb25nKW10ZC0+c2l6ZSk7CiAjZW5kaWYKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0gICAgICAgIHNvZmZfaGkgPSBmcm9tICYgfihwcml2LT5hc2l6ZSAtIDEpOwotICAgICAgICBzb2ZmX2xvID0gZnJvbSAmIChwcml2LT5hc2l6ZSAtIDEpOworCXNvZmZfaGkgPSBmcm9tICYgfihwcml2LT5hc2l6ZSAtIDEpOworCXNvZmZfbG8gPSBmcm9tICYgKHByaXYtPmFzaXplIC0gMSk7CiAKIAkvKiBDaGVhcCBoYWNrIG9wdGltaXphdGlvbiAqLwotCWlmKCBwcml2LT5jdXJyX21hcDAgIT0gZnJvbSApIHsKLSAgICAgICAgCXBjaV93cml0ZV9jb25maWdfZHdvcmQgKCBwcml2LT5kZXYsIFBNQzU1MV9QQ0lfTUVNX01BUDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJKHByaXYtPmJhc2VfbWFwMCB8IHNvZmZfaGkpICk7CisJaWYgKHByaXYtPmN1cnJfbWFwMCAhPSBmcm9tKSB7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHJpdi0+ZGV2LCBQTUM1NTFfUENJX01FTV9NQVAwLAorCQkJCQkocHJpdi0+YmFzZV9tYXAwIHwgc29mZl9oaSkpOwogCQlwcml2LT5jdXJyX21hcDAgPSBzb2ZmX2hpOwogCX0KIApAQCAtMjA0LDEzNyArMjA0LDE0NCBAQAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyB2b2lkIHBtYzU1MV91bnBvaW50IChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdV9jaGFyICphZGRyLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbikKK3N0YXRpYyB2b2lkIHBtYzU1MV91bnBvaW50KHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKiBhZGRyLCBsb2ZmX3QgZnJvbSwKKwkJCSAgIHNpemVfdCBsZW4pCiB7CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3VucG9pbnQoKVxuIik7CiAjZW5kaWYKIH0KIAotCi1zdGF0aWMgaW50IHBtYzU1MV9yZWFkIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1ZikKK3N0YXRpYyBpbnQgcG1jNTUxX3JlYWQoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLAorCQkJc2l6ZV90ICogcmV0bGVuLCB1X2NoYXIgKiBidWYpCiB7Ci0gICAgICAgIHN0cnVjdCBteXByaXYgKnByaXYgPSBtdGQtPnByaXY7Ci0gICAgICAgIHUzMiBzb2ZmX2hpLCBzb2ZmX2xvOyAvKiBzdGFydCBhZGRyZXNzIG9mZnNldCBoaS9sbyAqLwotICAgICAgICB1MzIgZW9mZl9oaSwgZW9mZl9sbzsgLyogZW5kIGFkZHJlc3Mgb2Zmc2V0IGhpL2xvICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kOworCXN0cnVjdCBteXByaXYgKnByaXYgPSBtdGQtPnByaXY7CisJdTMyIHNvZmZfaGksIHNvZmZfbG87CS8qIHN0YXJ0IGFkZHJlc3Mgb2Zmc2V0IGhpL2xvICovCisJdTMyIGVvZmZfaGksIGVvZmZfbG87CS8qIGVuZCBhZGRyZXNzIG9mZnNldCBoaS9sbyAqLworCXVuc2lnbmVkIGxvbmcgZW5kOwogCXVfY2hhciAqcHRyOwotICAgICAgICB1X2NoYXIgKmNvcHl0byA9IGJ1ZjsKKwl1X2NoYXIgKmNvcHl0byA9IGJ1ZjsKIAogI2lmZGVmIENPTkZJR19NVERfUE1DNTUxX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV9yZWFkKHBvczolbGQsIGxlbjolbGQpIGFzaXplOiAlbGRcbiIsIChsb25nKWZyb20sIChsb25nKWxlbiwgKGxvbmcpcHJpdi0+YXNpemUpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTFfcmVhZChwb3M6JWxkLCBsZW46JWxkKSBhc2l6ZTogJWxkXG4iLAorCQkobG9uZylmcm9tLCAobG9uZylsZW4sIChsb25nKXByaXYtPmFzaXplKTsKICNlbmRpZgogCi0gICAgICAgIGVuZCA9IGZyb20gKyBsZW4gLSAxOworCWVuZCA9IGZyb20gKyBsZW4gLSAxOwogCi0gICAgICAgIC8qIElzIGl0IHBhc3QgdGhlIGVuZD8gKi8KLSAgICAgICAgaWYgKGVuZCA+IG10ZC0+c2l6ZSkgeworCS8qIElzIGl0IHBhc3QgdGhlIGVuZD8gKi8KKwlpZiAoZW5kID4gbXRkLT5zaXplKSB7CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3JlYWQoKSBvdXQgb2YgYm91bmRzICglbGQgPiAlbGQpXG4iLCAobG9uZykgZW5kLCAobG9uZyltdGQtPnNpemUpOworCQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3JlYWQoKSBvdXQgb2YgYm91bmRzICglbGQgPiAlbGQpXG4iLAorCQkJKGxvbmcpZW5kLCAobG9uZyltdGQtPnNpemUpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0gICAgICAgIHNvZmZfaGkgPSBmcm9tICYgfihwcml2LT5hc2l6ZSAtIDEpOwotICAgICAgICBlb2ZmX2hpID0gZW5kICYgfihwcml2LT5hc2l6ZSAtIDEpOwotICAgICAgICBzb2ZmX2xvID0gZnJvbSAmIChwcml2LT5hc2l6ZSAtIDEpOwotICAgICAgICBlb2ZmX2xvID0gZW5kICYgKHByaXYtPmFzaXplIC0gMSk7CisJc29mZl9oaSA9IGZyb20gJiB+KHByaXYtPmFzaXplIC0gMSk7CisJZW9mZl9oaSA9IGVuZCAmIH4ocHJpdi0+YXNpemUgLSAxKTsKKwlzb2ZmX2xvID0gZnJvbSAmIChwcml2LT5hc2l6ZSAtIDEpOworCWVvZmZfbG8gPSBlbmQgJiAocHJpdi0+YXNpemUgLSAxKTsKIAotCXBtYzU1MV9wb2ludCAobXRkLCBmcm9tLCBsZW4sIHJldGxlbiwgJnB0cik7CisJcG1jNTUxX3BvaW50KG10ZCwgZnJvbSwgbGVuLCByZXRsZW4sICZwdHIpOwogCi0gICAgICAgIGlmIChzb2ZmX2hpID09IGVvZmZfaGkpIHsKLSAgICAgICAgICAgICAgICAvKiBUaGUgd2hvbGUgdGhpbmcgZml0cyB3aXRoaW4gb25lIGFjY2Vzcywgc28ganVzdCBvbmUgc2hvdAotICAgICAgICAgICAgICAgICAgIHdpbGwgZG8gaXQuICovCi0gICAgICAgICAgICAgICAgbWVtY3B5KGNvcHl0bywgcHRyLCBsZW4pOwotICAgICAgICAgICAgICAgIGNvcHl0byArPSBsZW47Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLyogV2UgaGF2ZSB0byBkbyBtdWx0aXBsZSB3cml0ZXMgdG8gZ2V0IGFsbCB0aGUgZGF0YQotICAgICAgICAgICAgICAgICAgIHdyaXR0ZW4uICovCi0gICAgICAgICAgICAgICAgd2hpbGUgKHNvZmZfaGkgIT0gZW9mZl9oaSkgeworCWlmIChzb2ZmX2hpID09IGVvZmZfaGkpIHsKKwkJLyogVGhlIHdob2xlIHRoaW5nIGZpdHMgd2l0aGluIG9uZSBhY2Nlc3MsIHNvIGp1c3Qgb25lIHNob3QKKwkJICAgd2lsbCBkbyBpdC4gKi8KKwkJbWVtY3B5KGNvcHl0bywgcHRyLCBsZW4pOworCQljb3B5dG8gKz0gbGVuOworCX0gZWxzZSB7CisJCS8qIFdlIGhhdmUgdG8gZG8gbXVsdGlwbGUgd3JpdGVzIHRvIGdldCBhbGwgdGhlIGRhdGEKKwkJICAgd3JpdHRlbi4gKi8KKwkJd2hpbGUgKHNvZmZfaGkgIT0gZW9mZl9oaSkgewogI2lmZGVmIENPTkZJR19NVERfUE1DNTUxX0RFQlVHCi0JCQlwcmludGsoIEtFUk5fREVCVUcgInBtYzU1MV9yZWFkKCkgc29mZl9oaTogJWxkLCBlb2ZmX2hpOiAlbGRcbiIsIChsb25nKXNvZmZfaGksIChsb25nKWVvZmZfaGkpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV9yZWFkKCkgc29mZl9oaTogJWxkLCAiCisJCQkJImVvZmZfaGk6ICVsZFxuIiwgKGxvbmcpc29mZl9oaSwgKGxvbmcpZW9mZl9oaSk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShjb3B5dG8sIHB0ciwgcHJpdi0+YXNpemUpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29weXRvICs9IHByaXYtPmFzaXplOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvZmZfaGkgKyBwcml2LT5hc2l6ZSA+PSBtdGQtPnNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBzb2ZmX2hpICs9IHByaXYtPmFzaXplOwotCQkJcG1jNTUxX3BvaW50IChtdGQsIHNvZmZfaGksIHByaXYtPmFzaXplLCByZXRsZW4sICZwdHIpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkoY29weXRvLCBwdHIsIGVvZmZfbG8pOwotICAgICAgICAgICAgICAgIGNvcHl0byArPSBlb2ZmX2xvOwotICAgICAgICB9CisJCQltZW1jcHkoY29weXRvLCBwdHIsIHByaXYtPmFzaXplKTsKKwkJCWNvcHl0byArPSBwcml2LT5hc2l6ZTsKKwkJCWlmIChzb2ZmX2hpICsgcHJpdi0+YXNpemUgPj0gbXRkLT5zaXplKSB7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlzb2ZmX2hpICs9IHByaXYtPmFzaXplOworCQkJcG1jNTUxX3BvaW50KG10ZCwgc29mZl9oaSwgcHJpdi0+YXNpemUsIHJldGxlbiwgJnB0cik7CisJCX0KKwkJbWVtY3B5KGNvcHl0bywgcHRyLCBlb2ZmX2xvKTsKKwkJY29weXRvICs9IGVvZmZfbG87CisJfQogCi1vdXQ6CisgICAgICBvdXQ6CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3JlYWQoKSBkb25lXG4iKTsKICNlbmRpZgotICAgICAgICAqcmV0bGVuID0gY29weXRvIC0gYnVmOwotICAgICAgICByZXR1cm4gMDsKKwkqcmV0bGVuID0gY29weXRvIC0gYnVmOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHBtYzU1MV93cml0ZSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKQorc3RhdGljIGludCBwbWM1NTFfd3JpdGUoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwKKwkJCXNpemVfdCAqIHJldGxlbiwgY29uc3QgdV9jaGFyICogYnVmKQogewotICAgICAgICBzdHJ1Y3QgbXlwcml2ICpwcml2ID0gbXRkLT5wcml2OwotICAgICAgICB1MzIgc29mZl9oaSwgc29mZl9sbzsgLyogc3RhcnQgYWRkcmVzcyBvZmZzZXQgaGkvbG8gKi8KLSAgICAgICAgdTMyIGVvZmZfaGksIGVvZmZfbG87IC8qIGVuZCBhZGRyZXNzIG9mZnNldCBoaS9sbyAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIGVuZDsKKwlzdHJ1Y3QgbXlwcml2ICpwcml2ID0gbXRkLT5wcml2OworCXUzMiBzb2ZmX2hpLCBzb2ZmX2xvOwkvKiBzdGFydCBhZGRyZXNzIG9mZnNldCBoaS9sbyAqLworCXUzMiBlb2ZmX2hpLCBlb2ZmX2xvOwkvKiBlbmQgYWRkcmVzcyBvZmZzZXQgaGkvbG8gKi8KKwl1bnNpZ25lZCBsb25nIGVuZDsKIAl1X2NoYXIgKnB0cjsKLSAgICAgICAgY29uc3QgdV9jaGFyICpjb3B5ZnJvbSA9IGJ1ZjsKLQorCWNvbnN0IHVfY2hhciAqY29weWZyb20gPSBidWY7CiAKICNpZmRlZiBDT05GSUdfTVREX1BNQzU1MV9ERUJVRwotCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTFfd3JpdGUocG9zOiVsZCwgbGVuOiVsZCkgYXNpemU6JWxkXG4iLCAobG9uZyl0bywgKGxvbmcpbGVuLCAobG9uZylwcml2LT5hc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MV93cml0ZShwb3M6JWxkLCBsZW46JWxkKSBhc2l6ZTolbGRcbiIsCisJCShsb25nKXRvLCAobG9uZylsZW4sIChsb25nKXByaXYtPmFzaXplKTsKICNlbmRpZgogCi0gICAgICAgIGVuZCA9IHRvICsgbGVuIC0gMTsKLSAgICAgICAgLyogSXMgaXQgcGFzdCB0aGUgZW5kPyAgb3IgZGlkIHRoZSB1MzIgd3JhcD8gKi8KLSAgICAgICAgaWYgKGVuZCA+IG10ZC0+c2l6ZSApIHsKKwllbmQgPSB0byArIGxlbiAtIDE7CisJLyogSXMgaXQgcGFzdCB0aGUgZW5kPyAgb3IgZGlkIHRoZSB1MzIgd3JhcD8gKi8KKwlpZiAoZW5kID4gbXRkLT5zaXplKSB7CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3dyaXRlKCkgb3V0IG9mIGJvdW5kcyAoZW5kOiAlbGQsIHNpemU6ICVsZCwgdG86ICVsZClcbiIsIChsb25nKSBlbmQsIChsb25nKW10ZC0+c2l6ZSwgKGxvbmcpdG8pOworCQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3dyaXRlKCkgb3V0IG9mIGJvdW5kcyAoZW5kOiAlbGQsICIKKwkJCSJzaXplOiAlbGQsIHRvOiAlbGQpXG4iLCAobG9uZyllbmQsIChsb25nKW10ZC0+c2l6ZSwKKwkJCShsb25nKXRvKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9CisJCXJldHVybiAtRUlOVkFMOworCX0KIAotICAgICAgICBzb2ZmX2hpID0gdG8gJiB+KHByaXYtPmFzaXplIC0gMSk7Ci0gICAgICAgIGVvZmZfaGkgPSBlbmQgJiB+KHByaXYtPmFzaXplIC0gMSk7Ci0gICAgICAgIHNvZmZfbG8gPSB0byAmIChwcml2LT5hc2l6ZSAtIDEpOwotICAgICAgICBlb2ZmX2xvID0gZW5kICYgKHByaXYtPmFzaXplIC0gMSk7CisJc29mZl9oaSA9IHRvICYgfihwcml2LT5hc2l6ZSAtIDEpOworCWVvZmZfaGkgPSBlbmQgJiB+KHByaXYtPmFzaXplIC0gMSk7CisJc29mZl9sbyA9IHRvICYgKHByaXYtPmFzaXplIC0gMSk7CisJZW9mZl9sbyA9IGVuZCAmIChwcml2LT5hc2l6ZSAtIDEpOwogCi0JcG1jNTUxX3BvaW50IChtdGQsIHRvLCBsZW4sIHJldGxlbiwgJnB0cik7CisJcG1jNTUxX3BvaW50KG10ZCwgdG8sIGxlbiwgcmV0bGVuLCAmcHRyKTsKIAotICAgICAgICBpZiAoc29mZl9oaSA9PSBlb2ZmX2hpKSB7Ci0gICAgICAgICAgICAgICAgLyogVGhlIHdob2xlIHRoaW5nIGZpdHMgd2l0aGluIG9uZSBhY2Nlc3MsIHNvIGp1c3Qgb25lIHNob3QKLSAgICAgICAgICAgICAgICAgICB3aWxsIGRvIGl0LiAqLwotICAgICAgICAgICAgICAgIG1lbWNweShwdHIsIGNvcHlmcm9tLCBsZW4pOwotICAgICAgICAgICAgICAgIGNvcHlmcm9tICs9IGxlbjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBXZSBoYXZlIHRvIGRvIG11bHRpcGxlIHdyaXRlcyB0byBnZXQgYWxsIHRoZSBkYXRhCi0gICAgICAgICAgICAgICAgICAgd3JpdHRlbi4gKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAoc29mZl9oaSAhPSBlb2ZmX2hpKSB7CisJaWYgKHNvZmZfaGkgPT0gZW9mZl9oaSkgeworCQkvKiBUaGUgd2hvbGUgdGhpbmcgZml0cyB3aXRoaW4gb25lIGFjY2Vzcywgc28ganVzdCBvbmUgc2hvdAorCQkgICB3aWxsIGRvIGl0LiAqLworCQltZW1jcHkocHRyLCBjb3B5ZnJvbSwgbGVuKTsKKwkJY29weWZyb20gKz0gbGVuOworCX0gZWxzZSB7CisJCS8qIFdlIGhhdmUgdG8gZG8gbXVsdGlwbGUgd3JpdGVzIHRvIGdldCBhbGwgdGhlIGRhdGEKKwkJICAgd3JpdHRlbi4gKi8KKwkJd2hpbGUgKHNvZmZfaGkgIT0gZW9mZl9oaSkgewogI2lmZGVmIENPTkZJR19NVERfUE1DNTUxX0RFQlVHCi0JCQlwcmludGsoIEtFUk5fREVCVUcgInBtYzU1MV93cml0ZSgpIHNvZmZfaGk6ICVsZCwgZW9mZl9oaTogJWxkXG4iLCAobG9uZylzb2ZmX2hpLCAobG9uZyllb2ZmX2hpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTFfd3JpdGUoKSBzb2ZmX2hpOiAlbGQsICIKKwkJCQkiZW9mZl9oaTogJWxkXG4iLCAobG9uZylzb2ZmX2hpLCAobG9uZyllb2ZmX2hpKTsKICNlbmRpZgotICAgICAgICAgICAgICAgIAltZW1jcHkocHRyLCBjb3B5ZnJvbSwgcHJpdi0+YXNpemUpOwotICAgICAgICAgICAgICAgIAljb3B5ZnJvbSArPSBwcml2LT5hc2l6ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb2ZmX2hpID49IG10ZC0+c2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHNvZmZfaGkgKz0gcHJpdi0+YXNpemU7Ci0JCQlwbWM1NTFfcG9pbnQgKG10ZCwgc29mZl9oaSwgcHJpdi0+YXNpemUsIHJldGxlbiwgJnB0cik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweShwdHIsIGNvcHlmcm9tLCBlb2ZmX2xvKTsKLSAgICAgICAgICAgICAgICBjb3B5ZnJvbSArPSBlb2ZmX2xvOwotICAgICAgICB9CisJCQltZW1jcHkocHRyLCBjb3B5ZnJvbSwgcHJpdi0+YXNpemUpOworCQkJY29weWZyb20gKz0gcHJpdi0+YXNpemU7CisJCQlpZiAoc29mZl9oaSA+PSBtdGQtPnNpemUpIHsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCXNvZmZfaGkgKz0gcHJpdi0+YXNpemU7CisJCQlwbWM1NTFfcG9pbnQobXRkLCBzb2ZmX2hpLCBwcml2LT5hc2l6ZSwgcmV0bGVuLCAmcHRyKTsKKwkJfQorCQltZW1jcHkocHRyLCBjb3B5ZnJvbSwgZW9mZl9sbyk7CisJCWNvcHlmcm9tICs9IGVvZmZfbG87CisJfQogCi1vdXQ6CisgICAgICBvdXQ6CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxX3dyaXRlKCkgZG9uZVxuIik7CiAjZW5kaWYKLSAgICAgICAgKnJldGxlbiA9IGNvcHlmcm9tIC0gYnVmOwotICAgICAgICByZXR1cm4gMDsKKwkqcmV0bGVuID0gY29weWZyb20gLSBidWY7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zNDksNTggKzM1Niw1OCBAQAogICogbWVjaGFuaXNtCiAgKiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgcmVnaW9uIGZvdW5kLgogICovCi1zdGF0aWMgdTMyIGZpeHVwX3BtYzU1MSAoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB1MzIgZml4dXBfcG1jNTUxKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7CiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfQlVHRklYCi0gICAgICAgIHUzMiBkcmFtX2RhdGE7CisJdTMyIGRyYW1fZGF0YTsKICNlbmRpZgotICAgICAgICB1MzIgc2l6ZSwgZGNtZCwgY2ZnLCBkdG1wOwotICAgICAgICB1MTYgY21kLCB0bXAsIGk7CisJdTMyIHNpemUsIGRjbWQsIGNmZywgZHRtcDsKKwl1MTYgY21kLCB0bXAsIGk7CiAJdTggYmNtZCwgY291bnRlcjsKIAotICAgICAgICAvKiBTYW5pdHkgQ2hlY2sgKi8KLSAgICAgICAgaWYoIWRldikgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwotICAgICAgICB9CisJLyogU2FuaXR5IENoZWNrICovCisJaWYgKCFkZXYpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRvIHJlc2V0IHRoZSBjYXJkCiAJICogRklYTUU6IFN0b3AgU3Bpbm5pbmcgcmVnaXN0ZXJzCiAJICovCi0JY291bnRlcj0wOworCWNvdW50ZXIgPSAwOwogCS8qIHVubG9jayByZWdpc3RlcnMgKi8KLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQTUM1NTFfU1lTX0NUUkxfUkVHLCAweEE1ICk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUE1DNTUxX1NZU19DVFJMX1JFRywgMHhBNSk7CiAJLyogcmVhZCBpbiBvbGQgZGF0YSAqLwotCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUE1DNTUxX1NZU19DVFJMX1JFRywgJmJjbWQgKTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBNQzU1MV9TWVNfQ1RSTF9SRUcsICZiY21kKTsKIAkvKiBiYW5nIHRoZSByZXNldCBsaW5lIHVwIGFuZCBkb3duIGZvciBhIGZldyAqLwotCWZvcihpPTA7aTwxMDtpKyspIHsKLQkJY291bnRlcj0wOworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWNvdW50ZXIgPSAwOwogCQliY21kICY9IH4weDgwOwotCQl3aGlsZShjb3VudGVyKysgPCAxMDApIHsKKwkJd2hpbGUgKGNvdW50ZXIrKyA8IDEwMCkgewogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUE1DNTUxX1NZU19DVFJMX1JFRywgYmNtZCk7CiAJCX0KLQkJY291bnRlcj0wOworCQljb3VudGVyID0gMDsKIAkJYmNtZCB8PSAweDgwOwotCQl3aGlsZShjb3VudGVyKysgPCAxMDApIHsKKwkJd2hpbGUgKGNvdW50ZXIrKyA8IDEwMCkgewogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUE1DNTUxX1NZU19DVFJMX1JFRywgYmNtZCk7CiAJCX0KIAl9Ci0JYmNtZCB8PSAoMHg0MHwweDIwKTsKKwliY21kIHw9ICgweDQwIHwgMHgyMCk7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUE1DNTUxX1NZU19DVFJMX1JFRywgYmNtZCk7CiAKLSAgICAgICAgLyoKKwkvKgogCSAqIFRha2UgY2FyZSBhbmQgdHVybiBvZmYgdGhlIG1lbW9yeSBvbiB0aGUgZGV2aWNlIHdoaWxlIHdlCiAJICogdHdlYWsgdGhlIGNvbmZpZ3VyYXRpb25zCiAJICovCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwotICAgICAgICB0bXAgPSBjbWQgJiB+KFBDSV9DT01NQU5EX0lPfFBDSV9DT01NQU5EX01FTU9SWSk7Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCB0bXApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCXRtcCA9IGNtZCAmIH4oUENJX0NPTU1BTkRfSU8gfCBQQ0lfQ09NTUFORF9NRU1PUlkpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCB0bXApOwogCiAJLyoKIAkgKiBEaXNhYmxlIGV4aXN0aW5nIGFwZXJ0dXJlIGJlZm9yZSBwcm9iaW5nIG1lbW9yeSBzaXplCiAJICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX1BDSV9NRU1fTUFQMCwgJmRjbWQpOwotICAgICAgICBkdG1wPShkY21kfFBNQzU1MV9QQ0lfTUVNX01BUF9FTkFCTEV8UE1DNTUxX1BDSV9NRU1fTUFQX1JFR19FTik7CisJZHRtcCA9IChkY21kIHwgUE1DNTUxX1BDSV9NRU1fTUFQX0VOQUJMRSB8IFBNQzU1MV9QQ0lfTUVNX01BUF9SRUdfRU4pOwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfUENJX01FTV9NQVAwLCBkdG1wKTsKIAkvKgogCSAqIEdyYWIgb2xkIEJBUjAgY29uZmlnIHNvIHRoYXQgd2UgY2FuIGZpZ3VyZSBvdXQgbWVtb3J5IHNpemUKQEAgLTQxMSwyMjAgKzQxOCwyMzAgQEAKIAkgKiB0aGVuIHdyaXRlIGFsbCAxJ3MgdG8gdGhlIG1lbW9yeSBzcGFjZSwgcmVhZCBiYWNrIHRoZSByZXN1bHQgaW50bwogCSAqICJzaXplIiwgYW5kIHRoZW4gd3JpdGUgYmFjayBhbGwgdGhlIG9sZCBjb25maWcuCiAJICovCi0JcGNpX3JlYWRfY29uZmlnX2R3b3JkKCBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmNmZyApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmNmZyk7CiAjaWZuZGVmIENPTkZJR19NVERfUE1DNTUxX0JVR0ZJWAotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoIGRldiwgUENJX0JBU0VfQUREUkVTU18wLCB+MCApOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZCggZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsICZzaXplICk7Ci0Jc2l6ZSA9IChzaXplJlBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spOwotCXNpemUgJj0gfihzaXplLTEpOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoIGRldiwgUENJX0JBU0VfQUREUkVTU18wLCBjZmcgKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wLCB+MCk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wLCAmc2l6ZSk7CisJc2l6ZSA9IChzaXplICYgUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSyk7CisJc2l6ZSAmPSB+KHNpemUgLSAxKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUENJX0JBU0VfQUREUkVTU18wLCBjZmcpOwogI2Vsc2UKLSAgICAgICAgLyoKLSAgICAgICAgICogR2V0IHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgYnkgcmVhZGluZyBhbGwgdGhlIERSQU0gc2l6ZSB2YWx1ZXMKLSAgICAgICAgICogYW5kIGFkZGluZyB0aGVtIHVwLgotICAgICAgICAgKgotICAgICAgICAgKiBLTFVER0UgQUxFUlQ6IHRoZSBib2FyZHMgd2UgYXJlIHVzaW5nIGhhdmUgaW52YWxpZCBjb2x1bW4gYW5kCi0gICAgICAgICAqIHJvdyBtdXggdmFsdWVzLiAgV2UgZml4IHRoZW0gaGVyZSwgYnV0IHRoaXMgd2lsbCBicmVhayBvdGhlcgotICAgICAgICAgKiBtZW1vcnkgY29uZmlndXJhdGlvbnMuCi0gICAgICAgICAqLwotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEswLCAmZHJhbV9kYXRhKTsKLSAgICAgICAgc2l6ZSA9IFBNQzU1MV9EUkFNX0JMS19HRVRfU0laRShkcmFtX2RhdGEpOwotICAgICAgICBkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX0NPTF9NVVgoZHJhbV9kYXRhLCAweDUpOwotICAgICAgICBkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX1JPV19NVVgoZHJhbV9kYXRhLCAweDkpOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMCwgZHJhbV9kYXRhKTsKKwkvKgorCSAqIEdldCB0aGUgc2l6ZSBvZiB0aGUgbWVtb3J5IGJ5IHJlYWRpbmcgYWxsIHRoZSBEUkFNIHNpemUgdmFsdWVzCisJICogYW5kIGFkZGluZyB0aGVtIHVwLgorCSAqCisJICogS0xVREdFIEFMRVJUOiB0aGUgYm9hcmRzIHdlIGFyZSB1c2luZyBoYXZlIGludmFsaWQgY29sdW1uIGFuZAorCSAqIHJvdyBtdXggdmFsdWVzLiAgV2UgZml4IHRoZW0gaGVyZSwgYnV0IHRoaXMgd2lsbCBicmVhayBvdGhlcgorCSAqIG1lbW9yeSBjb25maWd1cmF0aW9ucy4KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEswLCAmZHJhbV9kYXRhKTsKKwlzaXplID0gUE1DNTUxX0RSQU1fQkxLX0dFVF9TSVpFKGRyYW1fZGF0YSk7CisJZHJhbV9kYXRhID0gUE1DNTUxX0RSQU1fQkxLX1NFVF9DT0xfTVVYKGRyYW1fZGF0YSwgMHg1KTsKKwlkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX1JPV19NVVgoZHJhbV9kYXRhLCAweDkpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEswLCBkcmFtX2RhdGEpOwogCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBNQzU1MV9EUkFNX0JMSzEsICZkcmFtX2RhdGEpOwotICAgICAgICBzaXplICs9IFBNQzU1MV9EUkFNX0JMS19HRVRfU0laRShkcmFtX2RhdGEpOwotICAgICAgICBkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX0NPTF9NVVgoZHJhbV9kYXRhLCAweDUpOwotICAgICAgICBkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX1JPV19NVVgoZHJhbV9kYXRhLCAweDkpOwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMSwgZHJhbV9kYXRhKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEsxLCAmZHJhbV9kYXRhKTsKKwlzaXplICs9IFBNQzU1MV9EUkFNX0JMS19HRVRfU0laRShkcmFtX2RhdGEpOworCWRyYW1fZGF0YSA9IFBNQzU1MV9EUkFNX0JMS19TRVRfQ09MX01VWChkcmFtX2RhdGEsIDB4NSk7CisJZHJhbV9kYXRhID0gUE1DNTUxX0RSQU1fQkxLX1NFVF9ST1dfTVVYKGRyYW1fZGF0YSwgMHg5KTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMSwgZHJhbV9kYXRhKTsKIAotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEsyLCAmZHJhbV9kYXRhKTsKLSAgICAgICAgc2l6ZSArPSBQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZHJhbV9kYXRhKTsKLSAgICAgICAgZHJhbV9kYXRhID0gUE1DNTUxX0RSQU1fQkxLX1NFVF9DT0xfTVVYKGRyYW1fZGF0YSwgMHg1KTsKLSAgICAgICAgZHJhbV9kYXRhID0gUE1DNTUxX0RSQU1fQkxLX1NFVF9ST1dfTVVYKGRyYW1fZGF0YSwgMHg5KTsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBNQzU1MV9EUkFNX0JMSzIsIGRyYW1fZGF0YSk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMiwgJmRyYW1fZGF0YSk7CisJc2l6ZSArPSBQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZHJhbV9kYXRhKTsKKwlkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX0NPTF9NVVgoZHJhbV9kYXRhLCAweDUpOworCWRyYW1fZGF0YSA9IFBNQzU1MV9EUkFNX0JMS19TRVRfUk9XX01VWChkcmFtX2RhdGEsIDB4OSk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBNQzU1MV9EUkFNX0JMSzIsIGRyYW1fZGF0YSk7CiAKLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMywgJmRyYW1fZGF0YSk7Ci0gICAgICAgIHNpemUgKz0gUE1DNTUxX0RSQU1fQkxLX0dFVF9TSVpFKGRyYW1fZGF0YSk7Ci0gICAgICAgIGRyYW1fZGF0YSA9IFBNQzU1MV9EUkFNX0JMS19TRVRfQ09MX01VWChkcmFtX2RhdGEsIDB4NSk7Ci0gICAgICAgIGRyYW1fZGF0YSA9IFBNQzU1MV9EUkFNX0JMS19TRVRfUk9XX01VWChkcmFtX2RhdGEsIDB4OSk7Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEszLCBkcmFtX2RhdGEpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBNQzU1MV9EUkFNX0JMSzMsICZkcmFtX2RhdGEpOworCXNpemUgKz0gUE1DNTUxX0RSQU1fQkxLX0dFVF9TSVpFKGRyYW1fZGF0YSk7CisJZHJhbV9kYXRhID0gUE1DNTUxX0RSQU1fQkxLX1NFVF9DT0xfTVVYKGRyYW1fZGF0YSwgMHg1KTsKKwlkcmFtX2RhdGEgPSBQTUM1NTFfRFJBTV9CTEtfU0VUX1JPV19NVVgoZHJhbV9kYXRhLCAweDkpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9CTEszLCBkcmFtX2RhdGEpOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIE9vcHMgLi4gc29tZXRoaW5nIHdlbnQgd3JvbmcKLSAgICAgICAgICovCi0gICAgICAgIGlmKCAoc2l6ZSAmPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7Ci0gICAgICAgIH0KLSNlbmRpZiAvKiBDT05GSUdfTVREX1BNQzU1MV9CVUdGSVggKi8KKwkvKgorCSAqIE9vcHMgLi4gc29tZXRoaW5nIHdlbnQgd3JvbmcKKwkgKi8KKwlpZiAoKHNpemUgJj0gUENJX0JBU0VfQUREUkVTU19NRU1fTUFTSykgPT0gMCkgeworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisjZW5kaWYJCQkJLyogQ09ORklHX01URF9QTUM1NTFfQlVHRklYICovCiAKLQlpZiAoKGNmZyZQQ0lfQkFTRV9BRERSRVNTX1NQQUNFKSAhPSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWSkgewotICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworCWlmICgoY2ZnICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgIT0gUENJX0JBU0VfQUREUkVTU19TUEFDRV9NRU1PUlkpIHsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0gICAgICAgIC8qCi0gICAgICAgICAqIFByZWNoYXJnZSBEcmFtCi0gICAgICAgICAqLwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQoIGRldiwgUE1DNTUxX1NEUkFNX01BLCAweDA0MDAgKTsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKCBkZXYsIFBNQzU1MV9TRFJBTV9DTUQsIDB4MDBiZiApOworCS8qCisJICogUHJlY2hhcmdlIERyYW0KKwkgKi8KKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQTUM1NTFfU0RSQU1fTUEsIDB4MDQwMCk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUE1DNTUxX1NEUkFNX0NNRCwgMHgwMGJmKTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBXYWl0IHVudGlsIGNvbW1hbmQgaGFzIGdvbmUgdGhyb3VnaAotICAgICAgICAgKiBGSVhNRTogcmVnaXN0ZXIgc3Bpbm5pbmcgaXNzdWUKLSAgICAgICAgICovCi0gICAgICAgIGRvIHsJcGNpX3JlYWRfY29uZmlnX3dvcmQoIGRldiwgUE1DNTUxX1NEUkFNX0NNRCwgJmNtZCApOwotCQlpZihjb3VudGVyKysgPiAxMDApYnJlYWs7Ci0gICAgICAgIH0gd2hpbGUgKCAoUENJX0NPTU1BTkRfSU8pICYgY21kICk7CisJLyoKKwkgKiBXYWl0IHVudGlsIGNvbW1hbmQgaGFzIGdvbmUgdGhyb3VnaAorCSAqIEZJWE1FOiByZWdpc3RlciBzcGlubmluZyBpc3N1ZQorCSAqLworCWRvIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQTUM1NTFfU0RSQU1fQ01ELCAmY21kKTsKKwkJaWYgKGNvdW50ZXIrKyA+IDEwMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKChQQ0lfQ09NTUFORF9JTykgJiBjbWQpOwogCi0gICAgICAgIC8qCisJLyoKIAkgKiBUdXJuIG9uIGF1dG8gcmVmcmVzaAogCSAqIFRoZSBsb29wIGlzIHRha2VuIGRpcmVjdGx5IGZyb20gUmFtaXgncyBleGFtcGxlIGNvZGUuICBJIGFzc3VtZSB0aGF0CiAJICogdGhpcyBtdXN0IGJlIGhlbGQgaGlnaCBmb3Igc29tZSBkdXJhdGlvbiBvZiB0aW1lLCBidXQgSSBjYW4gZmluZCBubwogCSAqIGRvY3VtZW50YXRpb24gcmVmcmVuY2luZyB0aGUgcmVhc29ucyB3aHkuCi0gICAgICAgICAqLwotICAgICAgICBmb3IgKCBpID0gMTsgaTw9OCA7IGkrKykgewotICAgICAgICAgICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZCAoZGV2LCBQTUM1NTFfU0RSQU1fQ01ELCAweDBkZik7CisJICovCisJZm9yIChpID0gMTsgaSA8PSA4OyBpKyspIHsKKwkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgUE1DNTUxX1NEUkFNX0NNRCwgMHgwZGYpOwogCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBNYWtlIGNlcnRhaW4gY29tbWFuZCBoYXMgZ29uZSB0aHJvdWdoCi0gICAgICAgICAgICAgICAgICogRklYTUU6IHJlZ2lzdGVyIHNwaW5uaW5nIGlzc3VlCi0gICAgICAgICAgICAgICAgICovCi0JCWNvdW50ZXI9MDsKLSAgICAgICAgICAgICAgICBkbyB7CXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUE1DNTUxX1NEUkFNX0NNRCwgJmNtZCk7Ci0JCQlpZihjb3VudGVyKysgPiAxMDApYnJlYWs7Ci0gICAgICAgICAgICAgICAgfSB3aGlsZSAoIChQQ0lfQ09NTUFORF9JTykgJiBjbWQgKTsKLSAgICAgICAgfQorCQkvKgorCQkgKiBNYWtlIGNlcnRhaW4gY29tbWFuZCBoYXMgZ29uZSB0aHJvdWdoCisJCSAqIEZJWE1FOiByZWdpc3RlciBzcGlubmluZyBpc3N1ZQorCQkgKi8KKwkJY291bnRlciA9IDA7CisJCWRvIHsKKwkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUE1DNTUxX1NEUkFNX0NNRCwgJmNtZCk7CisJCQlpZiAoY291bnRlcisrID4gMTAwKQorCQkJCWJyZWFrOworCQl9IHdoaWxlICgoUENJX0NPTU1BTkRfSU8pICYgY21kKTsKKwl9CiAKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkICggZGV2LCBQTUM1NTFfU0RSQU1fTUEsIDB4MDAyMCk7Ci0gICAgICAgIHBjaV93cml0ZV9jb25maWdfd29yZCAoIGRldiwgUE1DNTUxX1NEUkFNX0NNRCwgMHgwZmYpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBNQzU1MV9TRFJBTV9NQSwgMHgwMDIwKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQTUM1NTFfU0RSQU1fQ01ELCAweDBmZik7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogV2FpdCB1bnRpbCBjb21tYW5kIGNvbXBsZXRlcwotICAgICAgICAgKiBGSVhNRTogcmVnaXN0ZXIgc3Bpbm5pbmcgaXNzdWUKLSAgICAgICAgICovCi0JY291bnRlcj0wOwotICAgICAgICBkbyB7CXBjaV9yZWFkX2NvbmZpZ193b3JkICggZGV2LCBQTUM1NTFfU0RSQU1fQ01ELCAmY21kKTsKLQkJaWYoY291bnRlcisrID4gMTAwKWJyZWFrOwotICAgICAgICB9IHdoaWxlICggKFBDSV9DT01NQU5EX0lPKSAmIGNtZCApOworCS8qCisJICogV2FpdCB1bnRpbCBjb21tYW5kIGNvbXBsZXRlcworCSAqIEZJWE1FOiByZWdpc3RlciBzcGlubmluZyBpc3N1ZQorCSAqLworCWNvdW50ZXIgPSAwOworCWRvIHsKKwkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQTUM1NTFfU0RSQU1fQ01ELCAmY21kKTsKKwkJaWYgKGNvdW50ZXIrKyA+IDEwMCkKKwkJCWJyZWFrOworCX0gd2hpbGUgKChQQ0lfQ09NTUFORF9JTykgJiBjbWQpOwogCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ19kd29yZCAoIGRldiwgUE1DNTUxX0RSQU1fQ0ZHLCAmZGNtZCk7Ci0gICAgICAgIGRjbWQgfD0gMHgwMjAwMDAwMDsKLSAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoIGRldiwgUE1DNTUxX0RSQU1fQ0ZHLCBkY21kKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBQTUM1NTFfRFJBTV9DRkcsICZkY21kKTsKKwlkY21kIHw9IDB4MDIwMDAwMDA7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIFBNQzU1MV9EUkFNX0NGRywgZGNtZCk7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogQ2hlY2sgdG8gbWFrZSBjZXJ0YWluIGZhc3QgYmFjay10by1iYWNrLCBpZiBub3QKLSAgICAgICAgICogdGhlbiBzZXQgaXQgc28KLSAgICAgICAgICovCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKCBkZXYsIFBDSV9TVEFUVVMsICZjbWQpOwotICAgICAgICBpZigoY21kJlBDSV9DT01NQU5EX0ZBU1RfQkFDSykgPT0gMCkgewotICAgICAgICAgICAgICAgIGNtZCB8PSBQQ0lfQ09NTUFORF9GQVNUX0JBQ0s7Ci0gICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKCBkZXYsIFBDSV9TVEFUVVMsIGNtZCk7Ci0gICAgICAgIH0KKwkvKgorCSAqIENoZWNrIHRvIG1ha2UgY2VydGFpbiBmYXN0IGJhY2stdG8tYmFjaywgaWYgbm90CisJICogdGhlbiBzZXQgaXQgc28KKwkgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsICZjbWQpOworCWlmICgoY21kICYgUENJX0NPTU1BTkRfRkFTVF9CQUNLKSA9PSAwKSB7CisJCWNtZCB8PSBQQ0lfQ09NTUFORF9GQVNUX0JBQ0s7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIGNtZCk7CisJfQogCi0gICAgICAgIC8qCi0gICAgICAgICAqIENoZWNrIHRvIG1ha2UgY2VydGFpbiB0aGUgREVWU0VMIGlzIHNldCBjb3JyZWN0bHksIHRoaXMgZGV2aWNlCi0gICAgICAgICAqIGhhcyBhIHRlbmRhbmN5IHRvIGFzc2VydCBERVZTRUwgYW5kIFRSRFkgd2hlbiBhIHdyaXRlIGlzIHBlcmZvcm1lZAotICAgICAgICAgKiB0byB0aGUgbWVtb3J5IHdoZW4gbWVtb3J5IGlzIHJlYWQtb25seQotICAgICAgICAgKi8KLSAgICAgICAgaWYoKGNtZCZQQ0lfU1RBVFVTX0RFVlNFTF9NQVNLKSAhPSAweDApIHsKLSAgICAgICAgICAgICAgICBjbWQgJj0gflBDSV9TVEFUVVNfREVWU0VMX01BU0s7Ci0gICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ193b3JkKCBkZXYsIFBDSV9TVEFUVVMsIGNtZCApOwotICAgICAgICB9Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNldCB0byBiZSBwcmVmZXRjaGFibGUgYW5kIHB1dCBldmVyeXRoaW5nIGJhY2sgYmFzZWQgb24gb2xkIGNmZy4KKwkvKgorCSAqIENoZWNrIHRvIG1ha2UgY2VydGFpbiB0aGUgREVWU0VMIGlzIHNldCBjb3JyZWN0bHksIHRoaXMgZGV2aWNlCisJICogaGFzIGEgdGVuZGFuY3kgdG8gYXNzZXJ0IERFVlNFTCBhbmQgVFJEWSB3aGVuIGEgd3JpdGUgaXMgcGVyZm9ybWVkCisJICogdG8gdGhlIG1lbW9yeSB3aGVuIG1lbW9yeSBpcyByZWFkLW9ubHkKKwkgKi8KKwlpZiAoKGNtZCAmIFBDSV9TVEFUVVNfREVWU0VMX01BU0spICE9IDB4MCkgeworCQljbWQgJj0gflBDSV9TVEFUVVNfREVWU0VMX01BU0s7CisJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9TVEFUVVMsIGNtZCk7CisJfQorCS8qCisJICogU2V0IHRvIGJlIHByZWZldGNoYWJsZSBhbmQgcHV0IGV2ZXJ5dGhpbmcgYmFjayBiYXNlZCBvbiBvbGQgY2ZnLgogCSAqIGl0J3MgcG9zc2libGUgdGhhdCB0aGUgcmVzZXQgb2YgdGhlIFYzNzBQREMgbnVrZWQgdGhlIG9yaWdpbmFsCiAJICogc2V0dXAKLSAgICAgICAgICovCisJICovCiAJLyoKLSAgICAgICAgY2ZnIHw9IFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIOwotCXBjaV93cml0ZV9jb25maWdfZHdvcmQoIGRldiwgUENJX0JBU0VfQUREUkVTU18wLCBjZmcgKTsKLQkqLworCSAgIGNmZyB8PSBQQ0lfQkFTRV9BRERSRVNTX01FTV9QUkVGRVRDSDsKKwkgICBwY2lfd3JpdGVfY29uZmlnX2R3b3JkKCBkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgY2ZnICk7CisJICovCiAKLSAgICAgICAgLyoKLSAgICAgICAgICogVHVybiBQQ0kgbWVtb3J5IGFuZCBJL08gYnVzIGFjY2VzcyBiYWNrIG9uCi0gICAgICAgICAqLwotICAgICAgICBwY2lfd3JpdGVfY29uZmlnX3dvcmQoIGRldiwgUENJX0NPTU1BTkQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfSU8gKTsKKwkvKgorCSAqIFR1cm4gUENJIG1lbW9yeSBhbmQgSS9PIGJ1cyBhY2Nlc3MgYmFjayBvbgorCSAqLworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELAorCQkJICAgICAgUENJX0NPTU1BTkRfTUVNT1JZIHwgUENJX0NPTU1BTkRfSU8pOwogI2lmZGVmIENPTkZJR19NVERfUE1DNTUxX0RFQlVHCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNvbWUgc2NyZWVuIGZ1bgotICAgICAgICAgKi8KLSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogJWQlYyAoMHgleCkgb2YgJXNwcmVmZXRjaGFibGUgbWVtb3J5IGF0IDB4JWxseFxuIiwKLQkgICAgICAgKHNpemU8MTAyNCk/c2l6ZTooc2l6ZTwxMDQ4NTc2KT9zaXplPj4xMDpzaXplPj4yMCwKLSAgICAgICAgICAgICAgIChzaXplPDEwMjQpPydCJzooc2l6ZTwxMDQ4NTc2KT8nSyc6J00nLAotCSAgICAgICBzaXplLCAoKGRjbWQmKDB4MTw8MykpID09IDApPyJub24tIjoiIiwKLSAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpKChkZXYtPnJlc291cmNlWzBdLnN0YXJ0KSZQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSk7CisJLyoKKwkgKiBTb21lIHNjcmVlbiBmdW4KKwkgKi8KKwlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxOiAlZCVjICgweCV4KSBvZiAlc3ByZWZldGNoYWJsZSBtZW1vcnkgYXQgIgorCQkiMHglbGx4XG4iLCAoc2l6ZSA8IDEwMjQpID8gc2l6ZSA6IChzaXplIDwgMTA0ODU3NikgPworCQlzaXplID4+IDEwIDogc2l6ZSA+PiAyMCwKKwkJKHNpemUgPCAxMDI0KSA/ICdCJyA6IChzaXplIDwgMTA0ODU3NikgPyAnSycgOiAnTScsIHNpemUsCisJCSgoZGNtZCAmICgweDEgPDwgMykpID09IDApID8gIm5vbi0iIDogIiIsCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KGRldiwgMCkpOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIENoZWNrIHRvIHNlZSB0aGUgc3RhdGUgb2YgdGhlIG1lbW9yeQotICAgICAgICAgKi8KLSAgICAgICAgcGNpX3JlYWRfY29uZmlnX2R3b3JkKCBkZXYsIFBNQzU1MV9EUkFNX0JMSzAsICZkY21kICk7Ci0gICAgICAgIHByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IERSQU1fQkxLMCBGbGFnczogJXMsJXNcbiIKLQkJCSAgInBtYzU1MTogRFJBTV9CTEswIFNpemU6ICVkIGF0ICVkXG4iCi0JCQkgICJwbWM1NTE6IERSQU1fQkxLMCBSb3cgTVVYOiAlZCwgQ29sIE1VWDogJWRcbiIsCi0gICAgICAgICAgICAgICAoKCgweDE8PDEpJmRjbWQpID09IDApPyJSVyI6IlJPIiwKLSAgICAgICAgICAgICAgICgoKDB4MTw8MCkmZGNtZCkgPT0gMCk/Ik9mZiI6Ik9uIiwKLQkgICAgICAgUE1DNTUxX0RSQU1fQkxLX0dFVF9TSVpFKGRjbWQpLAotCSAgICAgICAoKGRjbWQ+PjIwKSYweDdGRiksICgoZGNtZD4+MTMpJjB4NyksICgoZGNtZD4+OSkmMHhGKSApOworCS8qCisJICogQ2hlY2sgdG8gc2VlIHRoZSBzdGF0ZSBvZiB0aGUgbWVtb3J5CisJICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMCwgJmRjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IERSQU1fQkxLMCBGbGFnczogJXMsJXNcbiIKKwkJInBtYzU1MTogRFJBTV9CTEswIFNpemU6ICVkIGF0ICVkXG4iCisJCSJwbWM1NTE6IERSQU1fQkxLMCBSb3cgTVVYOiAlZCwgQ29sIE1VWDogJWRcbiIsCisJCSgoKDB4MSA8PCAxKSAmIGRjbWQpID09IDApID8gIlJXIiA6ICJSTyIsCisJCSgoKDB4MSA8PCAwKSAmIGRjbWQpID09IDApID8gIk9mZiIgOiAiT24iLAorCQlQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCisJCSgoZGNtZCA+PiAyMCkgJiAweDdGRiksICgoZGNtZCA+PiAxMykgJiAweDcpLAorCQkoKGRjbWQgPj4gOSkgJiAweEYpKTsKIAotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoIGRldiwgUE1DNTUxX0RSQU1fQkxLMSwgJmRjbWQgKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogRFJBTV9CTEsxIEZsYWdzOiAlcywlc1xuIgotCQkJICAicG1jNTUxOiBEUkFNX0JMSzEgU2l6ZTogJWQgYXQgJWRcbiIKLQkJCSAgInBtYzU1MTogRFJBTV9CTEsxIFJvdyBNVVg6ICVkLCBDb2wgTVVYOiAlZFxuIiwKLSAgICAgICAgICAgICAgICgoKDB4MTw8MSkmZGNtZCkgPT0gMCk/IlJXIjoiUk8iLAotICAgICAgICAgICAgICAgKCgoMHgxPDwwKSZkY21kKSA9PSAwKT8iT2ZmIjoiT24iLAotCSAgICAgICBQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCi0JICAgICAgICgoZGNtZD4+MjApJjB4N0ZGKSwgKChkY21kPj4xMykmMHg3KSwgKChkY21kPj45KSYweEYpICk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMSwgJmRjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IERSQU1fQkxLMSBGbGFnczogJXMsJXNcbiIKKwkJInBtYzU1MTogRFJBTV9CTEsxIFNpemU6ICVkIGF0ICVkXG4iCisJCSJwbWM1NTE6IERSQU1fQkxLMSBSb3cgTVVYOiAlZCwgQ29sIE1VWDogJWRcbiIsCisJCSgoKDB4MSA8PCAxKSAmIGRjbWQpID09IDApID8gIlJXIiA6ICJSTyIsCisJCSgoKDB4MSA8PCAwKSAmIGRjbWQpID09IDApID8gIk9mZiIgOiAiT24iLAorCQlQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCisJCSgoZGNtZCA+PiAyMCkgJiAweDdGRiksICgoZGNtZCA+PiAxMykgJiAweDcpLAorCQkoKGRjbWQgPj4gOSkgJiAweEYpKTsKIAotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoIGRldiwgUE1DNTUxX0RSQU1fQkxLMiwgJmRjbWQgKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogRFJBTV9CTEsyIEZsYWdzOiAlcywlc1xuIgotCQkJICAicG1jNTUxOiBEUkFNX0JMSzIgU2l6ZTogJWQgYXQgJWRcbiIKLQkJCSAgInBtYzU1MTogRFJBTV9CTEsyIFJvdyBNVVg6ICVkLCBDb2wgTVVYOiAlZFxuIiwKLSAgICAgICAgICAgICAgICgoKDB4MTw8MSkmZGNtZCkgPT0gMCk/IlJXIjoiUk8iLAotICAgICAgICAgICAgICAgKCgoMHgxPDwwKSZkY21kKSA9PSAwKT8iT2ZmIjoiT24iLAotCSAgICAgICBQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCi0JICAgICAgICgoZGNtZD4+MjApJjB4N0ZGKSwgKChkY21kPj4xMykmMHg3KSwgKChkY21kPj45KSYweEYpICk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMiwgJmRjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IERSQU1fQkxLMiBGbGFnczogJXMsJXNcbiIKKwkJInBtYzU1MTogRFJBTV9CTEsyIFNpemU6ICVkIGF0ICVkXG4iCisJCSJwbWM1NTE6IERSQU1fQkxLMiBSb3cgTVVYOiAlZCwgQ29sIE1VWDogJWRcbiIsCisJCSgoKDB4MSA8PCAxKSAmIGRjbWQpID09IDApID8gIlJXIiA6ICJSTyIsCisJCSgoKDB4MSA8PCAwKSAmIGRjbWQpID09IDApID8gIk9mZiIgOiAiT24iLAorCQlQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCisJCSgoZGNtZCA+PiAyMCkgJiAweDdGRiksICgoZGNtZCA+PiAxMykgJiAweDcpLAorCQkoKGRjbWQgPj4gOSkgJiAweEYpKTsKIAotICAgICAgICBwY2lfcmVhZF9jb25maWdfZHdvcmQoIGRldiwgUE1DNTUxX0RSQU1fQkxLMywgJmRjbWQgKTsKLSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogRFJBTV9CTEszIEZsYWdzOiAlcywlc1xuIgotCQkJICAicG1jNTUxOiBEUkFNX0JMSzMgU2l6ZTogJWQgYXQgJWRcbiIKLQkJCSAgInBtYzU1MTogRFJBTV9CTEszIFJvdyBNVVg6ICVkLCBDb2wgTVVYOiAlZFxuIiwKLSAgICAgICAgICAgICAgICgoKDB4MTw8MSkmZGNtZCkgPT0gMCk/IlJXIjoiUk8iLAotICAgICAgICAgICAgICAgKCgoMHgxPDwwKSZkY21kKSA9PSAwKT8iT2ZmIjoiT24iLAotCSAgICAgICBQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCi0JICAgICAgICgoZGNtZD4+MjApJjB4N0ZGKSwgKChkY21kPj4xMykmMHg3KSwgKChkY21kPj45KSYweEYpICk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgUE1DNTUxX0RSQU1fQkxLMywgJmRjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IERSQU1fQkxLMyBGbGFnczogJXMsJXNcbiIKKwkJInBtYzU1MTogRFJBTV9CTEszIFNpemU6ICVkIGF0ICVkXG4iCisJCSJwbWM1NTE6IERSQU1fQkxLMyBSb3cgTVVYOiAlZCwgQ29sIE1VWDogJWRcbiIsCisJCSgoKDB4MSA8PCAxKSAmIGRjbWQpID09IDApID8gIlJXIiA6ICJSTyIsCisJCSgoKDB4MSA8PCAwKSAmIGRjbWQpID09IDApID8gIk9mZiIgOiAiT24iLAorCQlQTUM1NTFfRFJBTV9CTEtfR0VUX1NJWkUoZGNtZCksCisJCSgoZGNtZCA+PiAyMCkgJiAweDdGRiksICgoZGNtZCA+PiAxMykgJiAweDcpLAorCQkoKGRjbWQgPj4gOSkgJiAweEYpKTsKIAotICAgICAgICBwY2lfcmVhZF9jb25maWdfd29yZCggZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCApOwotICAgICAgICBwcmludGsoIEtFUk5fREVCVUcgInBtYzU1MTogTWVtb3J5IEFjY2VzcyAlc1xuIiwKLSAgICAgICAgICAgICAgICAoKCgweDE8PDEpJmNtZCkgPT0gMCk/Im9mZiI6Im9uIiApOwotICAgICAgICBwcmludGsoIEtFUk5fREVCVUcgInBtYzU1MTogSS9PIEFjY2VzcyAlc1xuIiwKLSAgICAgICAgICAgICAgICAoKCgweDE8PDApJmNtZCkgPT0gMCk/Im9mZiI6Im9uIiApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX0NPTU1BTkQsICZjbWQpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IE1lbW9yeSBBY2Nlc3MgJXNcbiIsCisJCSgoKDB4MSA8PCAxKSAmIGNtZCkgPT0gMCkgPyAib2ZmIiA6ICJvbiIpOworCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IEkvTyBBY2Nlc3MgJXNcbiIsCisJCSgoKDB4MSA8PCAwKSAmIGNtZCkgPT0gMCkgPyAib2ZmIiA6ICJvbiIpOwogCi0gICAgICAgIHBjaV9yZWFkX2NvbmZpZ193b3JkKCBkZXYsIFBDSV9TVEFUVVMsICZjbWQgKTsKLSAgICAgICAgcHJpbnRrKCBLRVJOX0RFQlVHICJwbWM1NTE6IERldnNlbCAlc1xuIiwKLSAgICAgICAgICAgICAgICAoKFBDSV9TVEFUVVNfREVWU0VMX01BU0smY21kKT09MHgwMDApPyJGYXN0IjoKLSAgICAgICAgICAgICAgICAoKFBDSV9TVEFUVVNfREVWU0VMX01BU0smY21kKT09MHgyMDApPyJNZWRpdW0iOgotICAgICAgICAgICAgICAgICgoUENJX1NUQVRVU19ERVZTRUxfTUFTSyZjbWQpPT0weDQwMCk/IlNsb3ciOiJJbnZhbGlkIiApOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgUENJX1NUQVRVUywgJmNtZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogRGV2c2VsICVzXG4iLAorCQkoKFBDSV9TVEFUVVNfREVWU0VMX01BU0sgJiBjbWQpID09IDB4MDAwKSA/ICJGYXN0IiA6CisJCSgoUENJX1NUQVRVU19ERVZTRUxfTUFTSyAmIGNtZCkgPT0gMHgyMDApID8gIk1lZGl1bSIgOgorCQkoKFBDSV9TVEFUVVNfREVWU0VMX01BU0sgJiBjbWQpID09IDB4NDAwKSA/ICJTbG93IiA6ICJJbnZhbGlkIik7CiAKLSAgICAgICAgcHJpbnRrKCBLRVJOX0RFQlVHICJwbWM1NTE6ICVzRmFzdCBCYWNrLXRvLUJhY2tcbiIsCi0gICAgICAgICAgICAgICAgKChQQ0lfQ09NTUFORF9GQVNUX0JBQ0smY21kKSA9PSAwKT8iTm90ICI6IiIgKTsKKwlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxOiAlc0Zhc3QgQmFjay10by1CYWNrXG4iLAorCQkoKFBDSV9DT01NQU5EX0ZBU1RfQkFDSyAmIGNtZCkgPT0gMCkgPyAiTm90ICIgOiAiIik7CiAKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBNQzU1MV9TWVNfQ1RSTF9SRUcsICZiY21kICk7Ci0JcHJpbnRrKCBLRVJOX0RFQlVHICJwbWM1NTE6IEVFUFJPTSBpcyB1bmRlciAlcyBjb250cm9sXG4iCi0JCQkgICAicG1jNTUxOiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBpcyAlc2xvY2tlZCB0byBQQ0kgYWNjZXNzXG4iCi0JCQkgICAicG1jNTUxOiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBpcyAlc2xvY2tlZCB0byBFRVBST00gYWNjZXNzXG4iLAotCQkoYmNtZCYweDEpPyJzb2Z0d2FyZSI6ImhhcmR3YXJlIiwKLQkJKGJjbWQmMHgyMCk/IiI6InVuIiwgKGJjbWQmMHg0MCk/IiI6InVuIik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQTUM1NTFfU1lTX0NUUkxfUkVHLCAmYmNtZCk7CisJcHJpbnRrKEtFUk5fREVCVUcgInBtYzU1MTogRUVQUk9NIGlzIHVuZGVyICVzIGNvbnRyb2xcbiIKKwkJInBtYzU1MTogU3lzdGVtIENvbnRyb2wgUmVnaXN0ZXIgaXMgJXNsb2NrZWQgdG8gUENJIGFjY2Vzc1xuIgorCQkicG1jNTUxOiBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciBpcyAlc2xvY2tlZCB0byBFRVBST00gYWNjZXNzXG4iLAorCQkoYmNtZCAmIDB4MSkgPyAic29mdHdhcmUiIDogImhhcmR3YXJlIiwKKwkJKGJjbWQgJiAweDIwKSA/ICIiIDogInVuIiwgKGJjbWQgJiAweDQwKSA/ICIiIDogInVuIik7CiAjZW5kaWYKLSAgICAgICAgcmV0dXJuIHNpemU7CisJcmV0dXJuIHNpemU7CiB9CiAKIC8qCiAgKiBLZXJuZWwgdmVyc2lvbiBzcGVjaWZpYyBtb2R1bGUgc3R1ZmZhZ2VzCiAgKi8KIAotCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJNYXJrIEZlcnJlbGwgPG1mZXJyZWxsQG12aXN0YS5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oUE1DNTUxX1ZFUlNJT04pOwpAQCAtNjMyLDExICs2NDksMTEgQEAKIC8qCiAgKiBTdHVmZiB0aGVzZSBvdXRzaWRlIHRoZSBpZmRlZiBzbyBhcyB0byBub3QgYnVzdCBjb21waWxlZCBpbiBkcml2ZXIgc3VwcG9ydAogICovCi1zdGF0aWMgaW50IG1zaXplPTA7CitzdGF0aWMgaW50IG1zaXplID0gMDsKICNpZiBkZWZpbmVkKENPTkZJR19NVERfUE1DNTUxX0FQRVJUVVJFX1NJWkUpCi1zdGF0aWMgaW50IGFzaXplPUNPTkZJR19NVERfUE1DNTUxX0FQRVJUVVJFX1NJWkUKK3N0YXRpYyBpbnQgYXNpemUgPSBDT05GSUdfTVREX1BNQzU1MV9BUEVSVFVSRV9TSVpFCiAjZWxzZQotc3RhdGljIGludCBhc2l6ZT0wOworc3RhdGljIGludCBhc2l6ZSA9IDA7CiAjZW5kaWYKIAogbW9kdWxlX3BhcmFtKG1zaXplLCBpbnQsIDApOwpAQCAtNjQ5LDE2NCArNjY2LDE3NCBAQAogICovCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X3BtYzU1MSh2b2lkKQogewotICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqUENJX0RldmljZSA9IE5VTEw7Ci0gICAgICAgIHN0cnVjdCBteXByaXYgKnByaXY7Ci0gICAgICAgIGludCBjb3VudCwgZm91bmQ9MDsKLSAgICAgICAgc3RydWN0IG10ZF9pbmZvICptdGQ7Ci0gICAgICAgIHUzMiBsZW5ndGggPSAwOworCXN0cnVjdCBwY2lfZGV2ICpQQ0lfRGV2aWNlID0gTlVMTDsKKwlzdHJ1Y3QgbXlwcml2ICpwcml2OworCWludCBjb3VudCwgZm91bmQgPSAwOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCXUzMiBsZW5ndGggPSAwOwogCi0JaWYobXNpemUpIHsKLQkJbXNpemUgPSAoMSA8PCAoZmZzKG1zaXplKSAtIDEpKTw8MjA7Ci0JCWlmIChtc2l6ZSA+ICgxPDwzMCkpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBJbnZhbGlkIG1lbW9yeSBzaXplIFslZF1cbiIsIG1zaXplKTsKKwlpZiAobXNpemUpIHsKKwkJbXNpemUgPSAoMSA8PCAoZmZzKG1zaXplKSAtIDEpKSA8PCAyMDsKKwkJaWYgKG1zaXplID4gKDEgPDwgMzApKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogSW52YWxpZCBtZW1vcnkgc2l6ZSBbJWRdXG4iLAorCQkJCW1zaXplKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCi0JaWYoYXNpemUpIHsKLQkJYXNpemUgPSAoMSA8PCAoZmZzKGFzaXplKSAtIDEpKTw8MjA7Ci0JCWlmIChhc2l6ZSA+ICgxPDwzMCkgKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogSW52YWxpZCBhcGVydHVyZSBzaXplIFslZF1cbiIsIGFzaXplKTsKKwlpZiAoYXNpemUpIHsKKwkJYXNpemUgPSAoMSA8PCAoZmZzKGFzaXplKSAtIDEpKSA8PCAyMDsKKwkJaWYgKGFzaXplID4gKDEgPDwgMzApKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogSW52YWxpZCBhcGVydHVyZSBzaXplICIKKwkJCQkiWyVkXVxuIiwgYXNpemUpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyBQTUM1NTFfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyBQTUM1NTFfVkVSU0lPTik7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogUENVLWJ1cyBjaGlwc2V0IHByb2JlLgotICAgICAgICAgKi8KLSAgICAgICAgZm9yKCBjb3VudCA9IDA7IGNvdW50IDwgTUFYX01URF9ERVZJQ0VTOyBjb3VudCsrICkgeworCS8qCisJICogUENVLWJ1cyBjaGlwc2V0IHByb2JlLgorCSAqLworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IE1BWF9NVERfREVWSUNFUzsgY291bnQrKykgewogCi0gICAgICAgICAgICAgICAgaWYgKChQQ0lfRGV2aWNlID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVjNfU0VNSSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RFVklDRV9JRF9WM19TRU1JX1YzNzBQREMsCi0JCQkJCQkgIFBDSV9EZXZpY2UgKSApID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKwkJaWYgKChQQ0lfRGV2aWNlID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9WM19TRU1JLAorCQkJCQkJICBQQ0lfREVWSUNFX0lEX1YzX1NFTUlfVjM3MFBEQywKKwkJCQkJCSAgUENJX0RldmljZSkpID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CiAKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogRm91bmQgUENJIFYzNzBQREMgYXQgMHglbGx4XG4iLAotCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKVBDSV9EZXZpY2UtPnJlc291cmNlWzBdLnN0YXJ0KTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IEZvdW5kIFBDSSBWMzcwUERDIGF0IDB4JWxseFxuIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KFBDSV9EZXZpY2UsIDApKTsKIAotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogVGhlIFBNQzU1MSBkZXZpY2UgYWN0cyBWRVJZIHdlaXJkIGlmIHlvdSBkb24ndCBpbml0IGl0Ci0gICAgICAgICAgICAgICAgICogZmlyc3QuICBpLmUuIGl0IHdpbGwgbm90IGNvcnJlY3RseSByZXBvcnQgZGV2c2VsLiAgSWYgZm9yCi0gICAgICAgICAgICAgICAgICogc29tZSByZWFzb24gdGhlIHNkcmFtIGlzIGluIGEgd3JvdGUtcHJvdGVjdGVkIHN0YXRlIHRoZQotICAgICAgICAgICAgICAgICAqIGRldmljZSB3aWxsIERFVlNFTCB3aGVuIGl0IGlzIHdyaXR0ZW4gdG8gY2F1c2luZyBwcm9ibGVtcwotICAgICAgICAgICAgICAgICAqIHdpdGggdGhlIG9sZHByb2MuYyBkcml2ZXIgaW4KLSAgICAgICAgICAgICAgICAgKiBzb21lIGtlcm5lbHMgKDIuMi4qKQotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmKChsZW5ndGggPSBmaXh1cF9wbWM1NTEoUENJX0RldmljZSkpIDw9IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBDYW5ub3QgaW5pdCBTRFJBTVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisJCS8qCisJCSAqIFRoZSBQTUM1NTEgZGV2aWNlIGFjdHMgVkVSWSB3ZWlyZCBpZiB5b3UgZG9uJ3QgaW5pdCBpdAorCQkgKiBmaXJzdC4gIGkuZS4gaXQgd2lsbCBub3QgY29ycmVjdGx5IHJlcG9ydCBkZXZzZWwuICBJZiBmb3IKKwkJICogc29tZSByZWFzb24gdGhlIHNkcmFtIGlzIGluIGEgd3JvdGUtcHJvdGVjdGVkIHN0YXRlIHRoZQorCQkgKiBkZXZpY2Ugd2lsbCBERVZTRUwgd2hlbiBpdCBpcyB3cml0dGVuIHRvIGNhdXNpbmcgcHJvYmxlbXMKKwkJICogd2l0aCB0aGUgb2xkcHJvYy5jIGRyaXZlciBpbgorCQkgKiBzb21lIGtlcm5lbHMgKDIuMi4qKQorCQkgKi8KKwkJaWYgKChsZW5ndGggPSBmaXh1cF9wbWM1NTEoUENJX0RldmljZSkpIDw9IDApIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBDYW5ub3QgaW5pdCBTRFJBTVxuIik7CisJCQlicmVhazsKKwkJfQogCiAJCS8qCiAJCSAqIFRoaXMgaXMgbmVlZGVkIHVudGlsIHRoZSBkcml2ZXIgaXMgY2FwYWJsZSBvZiByZWFkaW5nIHRoZQogCQkgKiBvbmJvYXJkIEkyQyBTUk9NIHRvIGRpc2NvdmVyIHRoZSAicmVhbCIgbWVtb3J5IHNpemUuCiAJCSAqLwotCQlpZihtc2l6ZSkgeworCQlpZiAobXNpemUpIHsKIAkJCWxlbmd0aCA9IG1zaXplOwotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IFVzaW5nIHNwZWNpZmllZCBtZW1vcnkgc2l6ZSAweCV4XG4iLCBsZW5ndGgpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IFVzaW5nIHNwZWNpZmllZCBtZW1vcnkgIgorCQkJCSJzaXplIDB4JXhcbiIsIGxlbmd0aCk7CiAJCX0gZWxzZSB7CiAJCQltc2l6ZSA9IGxlbmd0aDsKIAkJfQogCi0gICAgICAgICAgICAgICAgbXRkID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG10ZF9pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFtdGQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBDYW5ub3QgYWxsb2NhdGUgbmV3IE1URCBkZXZpY2UuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIG1lbXNldChtdGQsIDAsIHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pKTsKLQotICAgICAgICAgICAgICAgIHByaXYgPSBrbWFsbG9jIChzaXplb2Yoc3RydWN0IG15cHJpdiksIEdGUF9LRVJORUwpOwotICAgICAgICAgICAgICAgIGlmICghcHJpdikgewotICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IENhbm5vdCBhbGxvY2F0ZSBuZXcgTVREIGRldmljZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobXRkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1zZXQocHJpdiwgMCwgc2l6ZW9mKCpwcml2KSk7Ci0gICAgICAgICAgICAgICAgbXRkLT5wcml2ID0gcHJpdjsKLSAgICAgICAgICAgICAgICBwcml2LT5kZXYgPSBQQ0lfRGV2aWNlOwotCi0JCWlmKGFzaXplID4gbGVuZ3RoKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogcmVkdWNpbmcgYXBlcnR1cmUgc2l6ZSB0byBmaXQgJWRNXG4iLGxlbmd0aD4+MjApOwotCQkJcHJpdi0+YXNpemUgPSBhc2l6ZSA9IGxlbmd0aDsKLQkJfSBlbHNlIGlmIChhc2l6ZSA9PSAwIHx8IGFzaXplID09IGxlbmd0aCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IFVzaW5nIGV4aXN0aW5nIGFwZXJ0dXJlIHNpemUgJWRNXG4iLCBsZW5ndGg+PjIwKTsKLQkJCXByaXYtPmFzaXplID0gYXNpemUgPSBsZW5ndGg7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogVXNpbmcgc3BlY2lmaWVkIGFwZXJ0dXJlIHNpemUgJWRNXG4iLCBhc2l6ZT4+MjApOwotCQkJcHJpdi0+YXNpemUgPSBhc2l6ZTsKLQkJfQotICAgICAgICAgICAgICAgIHByaXYtPnN0YXJ0ID0gaW9yZW1hcCgoKFBDSV9EZXZpY2UtPnJlc291cmNlWzBdLnN0YXJ0KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+YXNpemUpOwotCi0JCWlmICghcHJpdi0+c3RhcnQpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBVbmFibGUgdG8gbWFwIElPIHNwYWNlXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKG10ZC0+cHJpdik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShtdGQpOworCQltdGQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFtdGQpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBDYW5ub3QgYWxsb2NhdGUgbmV3IE1URCAiCisJCQkJImRldmljZS5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAorCQlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG15cHJpdiksIEdGUF9LRVJORUwpOworCQlpZiAoIXByaXYpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBDYW5ub3QgYWxsb2NhdGUgbmV3IE1URCAiCisJCQkJImRldmljZS5cbiIpOworCQkJa2ZyZWUobXRkKTsKKwkJCWJyZWFrOworCQl9CisJCW10ZC0+cHJpdiA9IHByaXY7CisJCXByaXYtPmRldiA9IFBDSV9EZXZpY2U7CisKKwkJaWYgKGFzaXplID4gbGVuZ3RoKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogcmVkdWNpbmcgYXBlcnR1cmUgc2l6ZSB0byAiCisJCQkJImZpdCAlZE1cbiIsIGxlbmd0aCA+PiAyMCk7CisJCQlwcml2LT5hc2l6ZSA9IGFzaXplID0gbGVuZ3RoOworCQl9IGVsc2UgaWYgKGFzaXplID09IDAgfHwgYXNpemUgPT0gbGVuZ3RoKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogVXNpbmcgZXhpc3RpbmcgYXBlcnR1cmUgIgorCQkJCSJzaXplICVkTVxuIiwgbGVuZ3RoID4+IDIwKTsKKwkJCXByaXYtPmFzaXplID0gYXNpemUgPSBsZW5ndGg7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogVXNpbmcgc3BlY2lmaWVkIGFwZXJ0dXJlICIKKwkJCQkic2l6ZSAlZE1cbiIsIGFzaXplID4+IDIwKTsKKwkJCXByaXYtPmFzaXplID0gYXNpemU7CisJCX0KKwkJcHJpdi0+c3RhcnQgPSBwY2lfaW9tYXAoUENJX0RldmljZSwgMCwgcHJpdi0+YXNpemUpOworCisJCWlmICghcHJpdi0+c3RhcnQpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiBVbmFibGUgdG8gbWFwIElPIHNwYWNlXG4iKTsKKwkJCWtmcmVlKG10ZC0+cHJpdik7CisJCQlrZnJlZShtdGQpOworCQkJYnJlYWs7CisJCX0KICNpZmRlZiBDT05GSUdfTVREX1BNQzU1MV9ERUJVRwotCQlwcmludGsoIEtFUk5fREVCVUcgInBtYzU1MTogc2V0dGluZyBhcGVydHVyZSB0byAlZFxuIiwKLQkJCWZmcyhwcml2LT5hc2l6ZT4+MjApLTEpOworCQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxOiBzZXR0aW5nIGFwZXJ0dXJlIHRvICVkXG4iLAorCQkJZmZzKHByaXYtPmFzaXplID4+IDIwKSAtIDEpOwogI2VuZGlmCiAKLSAgICAgICAgICAgICAgICBwcml2LT5iYXNlX21hcDAgPSAoIFBNQzU1MV9QQ0lfTUVNX01BUF9SRUdfRU4KLQkJCQkgIHwgUE1DNTUxX1BDSV9NRU1fTUFQX0VOQUJMRQotCQkJCSAgfCAoZmZzKHByaXYtPmFzaXplPj4yMCktMSk8PDQgKTsKLSAgICAgICAgICAgICAgICBwcml2LT5jdXJyX21hcDAgPSBwcml2LT5iYXNlX21hcDA7Ci0gICAgICAgICAgICAgICAgcGNpX3dyaXRlX2NvbmZpZ19kd29yZCAoIHByaXYtPmRldiwgUE1DNTUxX1BDSV9NRU1fTUFQMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+Y3Vycl9tYXAwICk7CisJCXByaXYtPmJhc2VfbWFwMCA9IChQTUM1NTFfUENJX01FTV9NQVBfUkVHX0VOCisJCQkJICAgfCBQTUM1NTFfUENJX01FTV9NQVBfRU5BQkxFCisJCQkJICAgfCAoZmZzKHByaXYtPmFzaXplID4+IDIwKSAtIDEpIDw8IDQpOworCQlwcml2LT5jdXJyX21hcDAgPSBwcml2LT5iYXNlX21hcDA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHJpdi0+ZGV2LCBQTUM1NTFfUENJX01FTV9NQVAwLAorCQkJCQlwcml2LT5jdXJyX21hcDApOwogCiAjaWZkZWYgQ09ORklHX01URF9QTUM1NTFfREVCVUcKLQkJcHJpbnRrKCBLRVJOX0RFQlVHICJwbWM1NTE6IGFwZXJ0dXJlIHNldCB0byAlZFxuIiwKLQkJCShwcml2LT5iYXNlX21hcDAgJiAweEYwKT4+NCApOworCQlwcmludGsoS0VSTl9ERUJVRyAicG1jNTUxOiBhcGVydHVyZSBzZXQgdG8gJWRcbiIsCisJCQkocHJpdi0+YmFzZV9tYXAwICYgMHhGMCkgPj4gNCk7CiAjZW5kaWYKIAotICAgICAgICAgICAgICAgIG10ZC0+c2l6ZSAJPSBtc2l6ZTsKLSAgICAgICAgICAgICAgICBtdGQtPmZsYWdzIAk9IE1URF9DQVBfUkFNOwotICAgICAgICAgICAgICAgIG10ZC0+ZXJhc2UgCT0gcG1jNTUxX2VyYXNlOwotICAgICAgICAgICAgICAgIG10ZC0+cmVhZCAJPSBwbWM1NTFfcmVhZDsKLSAgICAgICAgICAgICAgICBtdGQtPndyaXRlIAk9IHBtYzU1MV93cml0ZTsKLSAgICAgICAgICAgICAgICBtdGQtPnBvaW50IAk9IHBtYzU1MV9wb2ludDsKLSAgICAgICAgICAgICAgICBtdGQtPnVucG9pbnQgCT0gcG1jNTUxX3VucG9pbnQ7Ci0gICAgICAgICAgICAgICAgbXRkLT50eXBlIAk9IE1URF9SQU07Ci0gICAgICAgICAgICAgICAgbXRkLT5uYW1lIAk9ICJQTUM1NTEgUkFNIGJvYXJkIjsKLSAgICAgICAgICAgICAgICBtdGQtPmVyYXNlc2l6ZSAJPSAweDEwMDAwOwotICAgICAgICAgICAgICAgIG10ZC0+d3JpdGVzaXplICA9IDE7Ci0gICAgICAgICAgICAgICAgbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOworCQltdGQtPnNpemUgPSBtc2l6ZTsKKwkJbXRkLT5mbGFncyA9IE1URF9DQVBfUkFNOworCQltdGQtPmVyYXNlID0gcG1jNTUxX2VyYXNlOworCQltdGQtPnJlYWQgPSBwbWM1NTFfcmVhZDsKKwkJbXRkLT53cml0ZSA9IHBtYzU1MV93cml0ZTsKKwkJbXRkLT5wb2ludCA9IHBtYzU1MV9wb2ludDsKKwkJbXRkLT51bnBvaW50ID0gcG1jNTUxX3VucG9pbnQ7CisJCW10ZC0+dHlwZSA9IE1URF9SQU07CisJCW10ZC0+bmFtZSA9ICJQTUM1NTEgUkFNIGJvYXJkIjsKKwkJbXRkLT5lcmFzZXNpemUgPSAweDEwMDAwOworCQltdGQtPndyaXRlc2l6ZSA9IDE7CisJCW10ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotICAgICAgICAgICAgICAgIGlmIChhZGRfbXRkX2RldmljZShtdGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldyBkZXZpY2VcbiIpOwotCQkJaW91bm1hcChwcml2LT5zdGFydCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShtdGQtPnByaXYpOwotICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUobXRkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIlJlZ2lzdGVyZWQgcG1jNTUxIG1lbW9yeSBkZXZpY2UuXG4iKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIk1hcHBlZCAlZE0gb2YgbWVtb3J5IGZyb20gMHglcCB0byAweCVwXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5hc2l6ZT4+MjAsCi0gICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnN0YXJ0LAotICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5zdGFydCArIHByaXYtPmFzaXplKTsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgIlRvdGFsIG1lbW9yeSBpcyAlZCVjXG4iLAotCSAgICAgICAJCShsZW5ndGg8MTAyNCk/bGVuZ3RoOgotCQkJCShsZW5ndGg8MTA0ODU3Nik/bGVuZ3RoPj4xMDpsZW5ndGg+PjIwLAotICAgICAgICAgICAgICAgCQkobGVuZ3RoPDEwMjQpPydCJzoobGVuZ3RoPDEwNDg1NzYpPydLJzonTScpOworCQlpZiAoYWRkX210ZF9kZXZpY2UobXRkKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IEZhaWxlZCB0byByZWdpc3RlciBuZXcgIgorCQkJCSJkZXZpY2VcbiIpOworCQkJcGNpX2lvdW5tYXAoUENJX0RldmljZSwgcHJpdi0+c3RhcnQpOworCQkJa2ZyZWUobXRkLT5wcml2KTsKKwkJCWtmcmVlKG10ZCk7CisJCQlicmVhazsKKwkJfQorCisJCS8qIEtlZXAgYSByZWZlcmVuY2UgYXMgdGhlIGFkZF9tdGRfZGV2aWNlIHdvcmtlZCAqLworCQlwY2lfZGV2X2dldChQQ0lfRGV2aWNlKTsKKworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJlZ2lzdGVyZWQgcG1jNTUxIG1lbW9yeSBkZXZpY2UuXG4iKTsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJNYXBwZWQgJWRNIG9mIG1lbW9yeSBmcm9tIDB4JXAgdG8gMHglcFxuIiwKKwkJCXByaXYtPmFzaXplID4+IDIwLAorCQkJcHJpdi0+c3RhcnQsIHByaXYtPnN0YXJ0ICsgcHJpdi0+YXNpemUpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlRvdGFsIG1lbW9yeSBpcyAlZCVjXG4iLAorCQkJKGxlbmd0aCA8IDEwMjQpID8gbGVuZ3RoIDoKKwkJCShsZW5ndGggPCAxMDQ4NTc2KSA/IGxlbmd0aCA+PiAxMCA6IGxlbmd0aCA+PiAyMCwKKwkJCShsZW5ndGggPCAxMDI0KSA/ICdCJyA6IChsZW5ndGggPCAxMDQ4NTc2KSA/ICdLJyA6ICdNJyk7CiAJCXByaXYtPm5leHRwbWM1NTEgPSBwbWM1NTFsaXN0OwogCQlwbWM1NTFsaXN0ID0gbXRkOwogCQlmb3VuZCsrOwotICAgICAgICB9CisJfQogCi0gICAgICAgIGlmKCAhcG1jNTUxbGlzdCApIHsKLSAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9OT1RJQ0UgInBtYzU1MTogbm90IGRldGVjdGVkXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKLSAgICAgICAgfSBlbHNlIHsKKwkvKiBFeGl0ZWQgZWFybHksIHJlZmVyZW5jZSBsZWZ0IG92ZXIgKi8KKwlpZiAoUENJX0RldmljZSkKKwkJcGNpX2Rldl9wdXQoUENJX0RldmljZSk7CisKKwlpZiAoIXBtYzU1MWxpc3QpIHsKKwkJcHJpbnRrKEtFUk5fTk9USUNFICJwbWM1NTE6IG5vdCBkZXRlY3RlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAicG1jNTUxOiAlZCBwbWM1NTEgZGV2aWNlcyBsb2FkZWRcbiIsIGZvdW5kKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKwkJcmV0dXJuIDA7CiAJfQogfQogCkBAIC04MTUsMjMgKzg0MiwyNCBAQAogICovCiBzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9wbWM1NTEodm9pZCkKIHsKLSAgICAgICAgaW50IGZvdW5kPTA7Ci0gICAgICAgIHN0cnVjdCBtdGRfaW5mbyAqbXRkOworCWludCBmb3VuZCA9IDA7CisJc3RydWN0IG10ZF9pbmZvICptdGQ7CiAJc3RydWN0IG15cHJpdiAqcHJpdjsKIAotCXdoaWxlKChtdGQ9cG1jNTUxbGlzdCkpIHsKKwl3aGlsZSAoKG10ZCA9IHBtYzU1MWxpc3QpKSB7CiAJCXByaXYgPSBtdGQtPnByaXY7CiAJCXBtYzU1MWxpc3QgPSBwcml2LT5uZXh0cG1jNTUxOwogCi0JCWlmKHByaXYtPnN0YXJ0KSB7Ci0JCQlwcmludGsgKEtFUk5fREVCVUcgInBtYzU1MTogdW5tYXBwaW5nICVkTSBzdGFydGluZyBhdCAweCVwXG4iLAotCQkJCXByaXYtPmFzaXplPj4yMCwgcHJpdi0+c3RhcnQpOwotCQkJaW91bm1hcCAocHJpdi0+c3RhcnQpOworCQlpZiAocHJpdi0+c3RhcnQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJwbWM1NTE6IHVubWFwcGluZyAlZE0gc3RhcnRpbmcgYXQgIgorCQkJCSIweCVwXG4iLCBwcml2LT5hc2l6ZSA+PiAyMCwgcHJpdi0+c3RhcnQpOworCQkJcGNpX2lvdW5tYXAocHJpdi0+ZGV2LCBwcml2LT5zdGFydCk7CiAJCX0KKwkJcGNpX2Rldl9wdXQocHJpdi0+ZGV2KTsKIAotCQlrZnJlZSAobXRkLT5wcml2KTsKLQkJZGVsX210ZF9kZXZpY2UgKG10ZCk7Ci0JCWtmcmVlIChtdGQpOworCQlrZnJlZShtdGQtPnByaXYpOworCQlkZWxfbXRkX2RldmljZShtdGQpOworCQlrZnJlZShtdGQpOwogCQlmb3VuZCsrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCmluZGV4IDgzZDBiMmEuLjI0NzQ3YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKQEAgLTEzLDEzICsxMywxMyBAQAogCiBjb25maWcgTVREX1BIWVNNQVAKIAl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBpbiBwaHlzaWNhbCBtZW1vcnkgbWFwIgotCWRlcGVuZHMgb24gTVREX0NGSQorCWRlcGVuZHMgb24gTVREX0NGSSB8fCBNVERfSkVERUNQUk9CRSB8fCBNVERfUk9NCiAJaGVscAotCSAgVGhpcyBwcm92aWRlcyBhICdtYXBwaW5nJyBkcml2ZXIgd2hpY2ggYWxsb3dzIHRoZSBDRkkgcHJvYmUgYW5kCi0JICBjb21tYW5kIHNldCBkcml2ZXIgY29kZSB0byBjb21tdW5pY2F0ZSB3aXRoIGZsYXNoIGNoaXBzIHdoaWNoCi0JICBhcmUgbWFwcGVkIHBoeXNpY2FsbHkgaW50byB0aGUgQ1BVJ3MgbWVtb3J5LiBZb3Ugd2lsbCBuZWVkIHRvCi0JICBjb25maWd1cmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgYW5kIHNpemUgb2YgdGhlIGZsYXNoIGNoaXBzIG9uCi0JICB5b3VyIHBhcnRpY3VsYXIgYm9hcmQgYXMgd2VsbCBhcyB0aGUgYnVzIHdpZHRoLCBlaXRoZXIgc3RhdGljYWxseQorCSAgVGhpcyBwcm92aWRlcyBhICdtYXBwaW5nJyBkcml2ZXIgd2hpY2ggYWxsb3dzIHRoZSBOT1IgRmxhc2ggYW5kCisJICBST00gZHJpdmVyIGNvZGUgdG8gY29tbXVuaWNhdGUgd2l0aCBjaGlwcyB3aGljaCBhcmUgbWFwcGVkCisJICBwaHlzaWNhbGx5IGludG8gdGhlIENQVSdzIG1lbW9yeS4gWW91IHdpbGwgbmVlZCB0byBjb25maWd1cmUKKwkgIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFuZCBzaXplIG9mIHRoZSBmbGFzaCBjaGlwcyBvbiB5b3VyCisJICBwYXJ0aWN1bGFyIGJvYXJkIGFzIHdlbGwgYXMgdGhlIGJ1cyB3aWR0aCwgZWl0aGVyIHN0YXRpY2FsbHkKIAkgIHdpdGggY29uZmlnIG9wdGlvbnMgb3IgYXQgcnVuLXRpbWUuCiAKIGNvbmZpZyBNVERfUEhZU01BUF9TVEFSVApAQCAtNDQ3LDE0ICs0NDcsNiBAQAogCSAgMjEyODUgYnJpZGdlIHVzZWQgd2l0aCBJbnRlbCdzIFN0cm9uZ0FSTSBwcm9jZXNzb3JzLiBNb3JlIGluZm8gYXQKIAkgIDxodHRwOi8vd3d3LmludGVsLmNvbS9kZXNpZ24vYnJpZGdlL2RvY3MvMjEyODVfZG9jdW1lbnRhdGlvbi5odG0+LgogCi1jb25maWcgTVREX0lRODAzMTAKLQl0cmlzdGF0ZSAiQ0ZJIEZsYXNoIGRldmljZSBtYXBwZWQgb24gdGhlIFhTY2FsZSBJUTgwMzEwIGJvYXJkIgotCWRlcGVuZHMgb24gTVREX0NGSSAmJiBBUkNIX0lRODAzMTAKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgYWNjZXNzIHJvdXRpbmVzIGZvciB0aGUgZmxhc2ggY2hpcHMgb24gdGhlIEludGVsIFhTY2FsZQotCSAgSVE4MDMxMCBldmFsdWF0aW9uIGJvYXJkLiBJZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgYm9hcmRzIGFuZCB3b3VsZAotCSAgbGlrZSB0byB1c2UgdGhlIGZsYXNoIGNoaXBzIG9uIGl0LCBzYXkgJ1knLgotCiBjb25maWcgTVREX0lYUDRYWAogCXRyaXN0YXRlICJDRkkgRmxhc2ggZGV2aWNlIG1hcHBlZCBvbiBJbnRlbCBJWFA0eHggYmFzZWQgc3lzdGVtcyIKIAlkZXBlbmRzIG9uIE1URF9DRkkgJiYgTVREX0NPTVBMRVhfTUFQUElOR1MgJiYgQVJDSF9JWFA0WFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IGFiNzFmMTcuLjE5MWMxOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNiBAQAogb2JqLSQoQ09ORklHX01URF9DU1RNX01JUFNfSVhYKQkrPSBjc3RtX21pcHNfaXh4Lm8KIG9iai0kKENPTkZJR19NVERfREMyMTI4NSkJKz0gZGMyMTI4NS5vCiBvYmotJChDT05GSUdfTVREX0RJTE5FVFBDKQkrPSBkaWxuZXRwYy5vCi1vYmotJChDT05GSUdfTVREX0lRODAzMTApCSs9IGlxODAzMTAubwogb2JqLSQoQ09ORklHX01URF9MNDQwR1gpCSs9IGw0NDBneC5vCiBvYmotJChDT05GSUdfTVREX0FNRDc2WFJPTSkJKz0gYW1kNzZ4cm9tLm8KIG9iai0kKENPTkZJR19NVERfSUNIWFJPTSkJKz0gaWNoeHJvbS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9hbWQ3Nnhyb20uYwppbmRleCA0NDc5NTViLi43OTdjYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2FtZDc2eHJvbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvYW1kNzZ4cm9tLmMKQEAgLTU3LDYgKzU3LDcgQEAKIAkJLyogRGlzYWJsZSB3cml0ZXMgdGhyb3VnaCB0aGUgcm9tIHdpbmRvdyAqLwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZSh3aW5kb3ctPnBkZXYsIDB4NDAsICZieXRlKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHdpbmRvdy0+cGRldiwgMHg0MCwgYnl0ZSAmIH4xKTsKKwkJcGNpX2Rldl9wdXQod2luZG93LT5wZGV2KTsKIAl9CiAKIAkvKiBGcmVlIGFsbCBvZiB0aGUgbXRkIGRldmljZXMgKi8KQEAgLTkxLDcgKzkyLDcgQEAKIAlzdHJ1Y3QgYW1kNzZ4cm9tX21hcF9pbmZvICptYXAgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgbWFwX3RvcDsKIAotCS8qIFJlbWVtYmVyIHRoZSBwY2kgZGV2IEkgZmluZCB0aGUgd2luZG93IGluICovCisJLyogUmVtZW1iZXIgdGhlIHBjaSBkZXYgSSBmaW5kIHRoZSB3aW5kb3cgaW4gLSBhbHJlYWR5IGhhdmUgYSByZWYgKi8KIAl3aW5kb3ctPnBkZXYgPSBwZGV2OwogCiAJLyogQXNzdW1lIHRoZSByb20gd2luZG93IGlzIHByb3Blcmx5IHNldHVwLCBhbmQgZmluZCBpdCdzIHNpemUgKi8KQEAgLTMwMiw3ICszMDMsNyBAQAogCXN0cnVjdCBwY2lfZGV2aWNlX2lkICppZDsKIAlwZGV2ID0gTlVMTDsKIAlmb3IoaWQgPSBhbWQ3Nnhyb21fcGNpX3RibDsgaWQtPnZlbmRvcjsgaWQrKykgewotCQlwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKGlkLT52ZW5kb3IsIGlkLT5kZXZpY2UsIE5VTEwpOworCQlwZGV2ID0gcGNpX2dldF9kZXZpY2UoaWQtPnZlbmRvciwgaWQtPmRldmljZSwgTlVMTCk7CiAJCWlmIChwZGV2KSB7CiAJCQlicmVhazsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9hcmN0aWMtbXRkLmMgYi9kcml2ZXJzL210ZC9tYXBzL2FyY3RpYy1tdGQuYwppbmRleCBkOTVhZTU4Li42NDJkOTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2FyY3RpYy1tdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2FyY3RpYy1tdGQuYwpAQCAtOTYsNiArOTYsOCBAQAogc3RhdGljIGludCBfX2luaXQKIGluaXRfYXJjdGljX210ZCh2b2lkKQogeworCWludCBlcnIgPSAwOworCiAJcHJpbnRrKCIlczogMHglMDh4IGF0IDB4JTA4eFxuIiwgTkFNRSwgU0laRSwgUEFERFIpOwogCiAJYXJjdGljX210ZF9tYXAudmlydCA9IGlvcmVtYXAoUEFERFIsIFNJWkUpOwpAQCAtMTA5LDEyICsxMTEsMjAgQEAKIAlwcmludGsoIiVzOiBwcm9iaW5nICVkLWJpdCBmbGFzaCBidXNcbiIsIE5BTUUsIEJVU1dJRFRIICogOCk7CiAJYXJjdGljX210ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmFyY3RpY19tdGRfbWFwKTsKIAotCWlmICghYXJjdGljX210ZCkKKwlpZiAoIWFyY3RpY19tdGQpIHsKKwkJaW91bm1hcCgodm9pZCAqKSBhcmN0aWNfbXRkX21hcC52aXJ0KTsKIAkJcmV0dXJuIC1FTlhJTzsKKwl9CiAKIAlhcmN0aWNfbXRkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0JcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucyhhcmN0aWNfbXRkLCBhcmN0aWNfcGFydGl0aW9ucywgUEFSVElUSU9OUyk7CisJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKGFyY3RpY19tdGQsIGFyY3RpY19wYXJ0aXRpb25zLCBQQVJUSVRJT05TKTsKKwlpZiAoZXJyKSB7CisJCXByaW50aygiJXM6IGFkZF9tdGRfcGFydGl0aW9ucyBmYWlsZWRcbiIsIE5BTUUpOworCQlpb3VubWFwKCh2b2lkICopIGFyY3RpY19tdGRfbWFwLnZpcnQpOworCX0KKworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9iZWVjaC1tdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvYmVlY2gtbXRkLmMKaW5kZXggNWRmNzM2MS4uYTY0YjFhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9iZWVjaC1tdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2JlZWNoLW10ZC5jCkBAIC03Miw2ICs3Miw4IEBACiBzdGF0aWMgaW50IF9faW5pdAogaW5pdF9iZWVjaF9tdGQodm9pZCkKIHsKKwlpbnQgZXJyID0gMDsKKwogCXByaW50aygiJXM6IDB4JTA4eCBhdCAweCUwOHhcbiIsIE5BTUUsIFNJWkUsIFBBRERSKTsKIAogCWJlZWNoX210ZF9tYXAudmlydCA9IGlvcmVtYXAoUEFERFIsIFNJWkUpOwpAQCAtODYsMTIgKzg4LDIwIEBACiAJcHJpbnRrKCIlczogcHJvYmluZyAlZC1iaXQgZmxhc2ggYnVzXG4iLCBOQU1FLCBCVVNXSURUSCAqIDgpOwogCWJlZWNoX210ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmJlZWNoX210ZF9tYXApOwogCi0JaWYgKCFiZWVjaF9tdGQpCisJaWYgKCFiZWVjaF9tdGQpIHsKKwkJaW91bm1hcCgodm9pZCAqKSBiZWVjaF9tdGRfbWFwLnZpcnQpOwogCQlyZXR1cm4gLUVOWElPOworCX0KIAogCWJlZWNoX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCXJldHVybiBhZGRfbXRkX3BhcnRpdGlvbnMoYmVlY2hfbXRkLCBiZWVjaF9wYXJ0aXRpb25zLCAyKTsKKwllcnIgPSBhZGRfbXRkX3BhcnRpdGlvbnMoYmVlY2hfbXRkLCBiZWVjaF9wYXJ0aXRpb25zLCAyKTsKKwlpZiAoZXJyKSB7CisJCXByaW50aygiJXM6IGFkZF9tdGRfcGFydGl0aW9ucyBmYWlsZWRcbiIsIE5BTUUpOworCQlpb3VubWFwKCh2b2lkICopIGJlZWNoX210ZF9tYXAudmlydCk7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2NzdG1fbWlwc19peHguYyBiL2RyaXZlcnMvbXRkL21hcHMvY3N0bV9taXBzX2l4eC5jCmluZGV4IGFhNTZkZWYuLmQ2YmVmMTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2NzdG1fbWlwc19peHguYworKysgYi9kcml2ZXJzL210ZC9tYXBzL2NzdG1fbWlwc19peHguYwpAQCAtMTcxLDcgKzE3MSwxNCBAQAogCQljc3RtX21pcHNfaXh4X21hcFtpXS5waHlzID0gY3N0bV9taXBzX2l4eF9ib2FyZF9kZXNjW2ldLndpbmRvd19hZGRyOwogCQljc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0ID0gaW9yZW1hcChjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbaV0ud2luZG93X2FkZHIsIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tpXS53aW5kb3dfc2l6ZSk7CiAJCWlmICghY3N0bV9taXBzX2l4eF9tYXBbaV0udmlydCkgeworCQkJaW50IGogPSAwOwogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGlvcmVtYXBcbiIpOworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykgeworCQkJCWlmIChjc3RtX21pcHNfaXh4X21hcFtqXS52aXJ0KSB7CisJCQkJCWlvdW5tYXAoKHZvaWQgKiljc3RtX21pcHNfaXh4X21hcFtqXS52aXJ0KTsKKwkJCQkJY3N0bV9taXBzX2l4eF9tYXBbal0udmlydCA9IDA7CisJCQkJfQorCQkJfQogCQkJcmV0dXJuIC1FSU87CiAJICAgICAgICB9CiAJCWNzdG1fbWlwc19peHhfbWFwW2ldLm5hbWUgPSBjc3RtX21pcHNfaXh4X2JvYXJkX2Rlc2NbaV0ubmFtZTsKQEAgLTIwNCw4ICsyMTEsMTUgQEAKIAkgICAgICAgICAgICAgICAgY3N0bV9taXBzX2l4eF9tYXBbaV0ubWFwX3ByaXZfMiA9ICh1bnNpZ25lZCBsb25nKW15bXRkOwogCQkgICAgICAgIGFkZF9tdGRfcGFydGl0aW9ucyhteW10ZCwgcGFydHMsIGNzdG1fbWlwc19peHhfYm9hcmRfZGVzY1tpXS5udW1fcGFydGl0aW9ucyk7CiAJCX0KLQkJZWxzZQotCSAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKKwkJZWxzZSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgUEhZU01BUF9OVU1CRVI7IGkrKykgeworCQkJCWlmIChjc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0KSB7CisJCQkJCWlvdW5tYXAoKHZvaWQgKiljc3RtX21pcHNfaXh4X21hcFtpXS52aXJ0KTsKKwkJCQkJY3N0bV9taXBzX2l4eF9tYXBbaV0udmlydCA9IDA7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FTlhJTzsKKwkJfQogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYyBiL2RyaXZlcnMvbXRkL21hcHMvZWJvbnkuYwppbmRleCA2NDFlMWRkLi4xNDg4YmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2Vib255LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9lYm9ueS5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAkJCQkJQVJSQVlfU0laRShlYm9ueV9zbWFsbF9wYXJ0aXRpb25zKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7CisJCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTE3LDYgKzExOCw3IEBACiAKIAlpZiAoIWVib255X2xhcmdlX21hcC52aXJ0KSB7CiAJCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXAgZmxhc2hcbiIpOworCQlpb3VubWFwKGVib255X3NtYWxsX21hcC52aXJ0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMjksNiArMTMxLDggQEAKIAkJCQkJQVJSQVlfU0laRShlYm9ueV9sYXJnZV9wYXJ0aXRpb25zKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7CisJCWlvdW5tYXAoZWJvbnlfc21hbGxfbWFwLnZpcnQpOworCQlpb3VubWFwKGVib255X2xhcmdlX21hcC52aXJ0KTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvZm9ydHVuZXQuYyBiL2RyaXZlcnMvbXRkL21hcHMvZm9ydHVuZXQuYwppbmRleCBjNmJmNGUxLi43YzUwYzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2ZvcnR1bmV0LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9mb3J0dW5ldC5jCkBAIC0yMTgsOCArMjE4LDExIEBACiAJCQkJbWFwX3JlZ2lvbnNbaXhdLm1hcF9pbmZvLnNpemUpOwogCQkJaWYoIW1hcF9yZWdpb25zW2l4XS5tYXBfaW5mby52aXJ0KQogCQkJeworCQkJCWludCBqID0gMDsKIAkJCQlwcmludGsoTVREX0ZPUlRVTkVUX1BLICIlcyBmbGFzaCBmYWlsZWQgdG8gaW9yZW1hcCFcbiIsCiAJCQkJCW1hcF9yZWdpb25zW2l4XS5tYXBfaW5mby5uYW1lKTsKKwkJCQlmb3IgKGogPSAwIDsgaiA8IGl4OyBqKyspCisJCQkJCWlvdW5tYXAobWFwX3JlZ2lvbnNbal0ubWFwX2luZm8udmlydCk7CiAJCQkJcmV0dXJuIC1FTlhJTzsKIAkJCX0KIAkJCXNpbXBsZV9tYXBfaW5pdCgmbWFwX3JlZ2lvbnNbaXhdLm1hcF9pbmZvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaWNoeHJvbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9pY2h4cm9tLmMKaW5kZXggZGI0YjU3MC4uMmJiM2U2MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvaWNoeHJvbS5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaWNoeHJvbS5jCkBAIC02MSw2ICs2MSw3IEBACiAJLyogRGlzYWJsZSB3cml0ZXMgdGhyb3VnaCB0aGUgcm9tIHdpbmRvdyAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHdpbmRvdy0+cGRldiwgQklPU19DTlRMLCAmd29yZCk7CiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHdpbmRvdy0+cGRldiwgQklPU19DTlRMLCB3b3JkICYgfjEpOworCXBjaV9kZXZfcHV0KHdpbmRvdy0+cGRldik7CiAKIAkvKiBGcmVlIGFsbCBvZiB0aGUgbXRkIGRldmljZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobWFwLCBzY3JhdGNoLCAmd2luZG93LT5tYXBzLCBsaXN0KSB7CkBAIC0zNTUsNyArMzU2LDcgQEAKIAogCXBkZXYgPSBOVUxMOwogCWZvciAoaWQgPSBpY2h4cm9tX3BjaV90Ymw7IGlkLT52ZW5kb3I7IGlkKyspIHsKLQkJcGRldiA9IHBjaV9maW5kX2RldmljZShpZC0+dmVuZG9yLCBpZC0+ZGV2aWNlLCBOVUxMKTsKKwkJcGRldiA9IHBjaV9nZXRfZGV2aWNlKGlkLT52ZW5kb3IsIGlkLT5kZXZpY2UsIE5VTEwpOwogCQlpZiAocGRldikgewogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvaXE4MDMxMC5jIGIvZHJpdmVycy9tdGQvbWFwcy9pcTgwMzEwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZDllODcuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9pcTgwMzEwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTggKzAsMCBAQAotLyoKLSAqICRJZDogaXE4MDMxMC5jLHYgMS4yMSAyMDA1LzExLzA3IDExOjE0OjI3IGdsZWl4bmVyIEV4cCAkCi0gKgotICogTWFwcGluZyBmb3IgdGhlIEludGVsIFhTY2FsZSBJUTgwMzEwIGV2YWx1YXRpb24gYm9hcmQKLSAqCi0gKiBBdXRob3I6CU5pY29sYXMgUGl0cmUKLSAqIENvcHlyaWdodDoJKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotCi0jZGVmaW5lIFdJTkRPV19BRERSIAkwCi0jZGVmaW5lIFdJTkRPV19TSVpFIAk4KjEwMjQqMTAyNAotI2RlZmluZSBCVVNXSURUSCAJMQotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKLQotc3RhdGljIHN0cnVjdCBtYXBfaW5mbyBpcTgwMzEwX21hcCA9IHsKLQkubmFtZSA9ICJJUTgwMzEwIGZsYXNoIiwKLQkuc2l6ZSA9IFdJTkRPV19TSVpFLAotCS5iYW5rd2lkdGggPSBCVVNXSURUSCwKLQkucGh5cyA9IFdJTkRPV19BRERSCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaXE4MDMxMF9wYXJ0aXRpb25zWzRdID0gewotCXsKLQkJLm5hbWUgPQkJIkZpcm13YXJlIiwKLQkJLnNpemUgPQkJMHgwMDA4MDAwMCwKLQkJLm9mZnNldCA9CTAsCi0JCS5tYXNrX2ZsYWdzID0JTVREX1dSSVRFQUJMRSAgLyogZm9yY2UgcmVhZC1vbmx5ICovCi0JfSx7Ci0JCS5uYW1lID0JCSJLZXJuZWwiLAotCQkuc2l6ZSA9CQkweDAwMGEwMDAwLAotCQkub2Zmc2V0ID0JMHgwMDA4MDAwMCwKLQl9LHsKLQkJLm5hbWUgPQkJIkZpbGVzeXN0ZW0iLAotCQkuc2l6ZSA9CQkweDAwNjAwMDAwLAotCQkub2Zmc2V0ID0JMHgwMDEyMDAwMAotCX0sewotCQkubmFtZSA9CQkiUmVkQm9vdCIsCi0JCS5zaXplID0JCTB4MDAwZTAwMDAsCi0JCS5vZmZzZXQgPQkweDAwNzIwMDAwLAotCQkubWFza19mbGFncyA9CU1URF9XUklURUFCTEUKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9pbmZvICpteW10ZDsKLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFyc2VkX3BhcnRzOwotc3RhdGljIGNvbnN0IGNoYXIgKnByb2Jlc1tdID0geyAiUmVkQm9vdCIsICJjbWRsaW5lcGFydCIsIE5VTEwgfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9pcTgwMzEwKHZvaWQpCi17Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24gKnBhcnRzOwotCWludCBuYl9wYXJ0cyA9IDA7Ci0JaW50IHBhcnNlZF9ucl9wYXJ0cyA9IDA7Ci0JaW50IHJldDsKLQotCWlxODAzMTBfbWFwLnZpcnQgPSBpb3JlbWFwKFdJTkRPV19BRERSLCBXSU5ET1dfU0laRSk7Ci0JaWYgKCFpcTgwMzEwX21hcC52aXJ0KSB7Ci0JCXByaW50aygiRmFpbGVkIHRvIGlvcmVtYXBcbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0Jc2ltcGxlX21hcF9pbml0KCZpcTgwMzEwX21hcCk7Ci0KLQlteW10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmlxODAzMTBfbWFwKTsKLQlpZiAoIW15bXRkKSB7Ci0JCWlvdW5tYXAoKHZvaWQgKilpcTgwMzEwX21hcC52aXJ0KTsKLQkJcmV0dXJuIC1FTlhJTzsKLQl9Ci0JbXltdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlyZXQgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhteW10ZCwgcHJvYmVzLCAmcGFyc2VkX3BhcnRzLCAwKTsKLQotCWlmIChyZXQgPiAwKQotCQlwYXJzZWRfbnJfcGFydHMgPSByZXQ7Ci0KLQlpZiAocGFyc2VkX25yX3BhcnRzID4gMCkgewotCQlwYXJ0cyA9IHBhcnNlZF9wYXJ0czsKLQkJbmJfcGFydHMgPSBwYXJzZWRfbnJfcGFydHM7Ci0JfSBlbHNlIHsKLQkJcGFydHMgPSBpcTgwMzEwX3BhcnRpdGlvbnM7Ci0JCW5iX3BhcnRzID0gQVJSQVlfU0laRShpcTgwMzEwX3BhcnRpdGlvbnMpOwotCX0KLQlhZGRfbXRkX3BhcnRpdGlvbnMobXltdGQsIHBhcnRzLCBuYl9wYXJ0cyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2lxODAzMTAodm9pZCkKLXsKLQlpZiAobXltdGQpIHsKLQkJZGVsX210ZF9wYXJ0aXRpb25zKG15bXRkKTsKLQkJbWFwX2Rlc3Ryb3kobXltdGQpOwotCQlrZnJlZShwYXJzZWRfcGFydHMpOwotCX0KLQlpZiAoaXE4MDMxMF9tYXAudmlydCkKLQkJaW91bm1hcCgodm9pZCAqKWlxODAzMTBfbWFwLnZpcnQpOwotfQotCi1tb2R1bGVfaW5pdChpbml0X2lxODAzMTApOwotbW9kdWxlX2V4aXQoY2xlYW51cF9pcTgwMzEwKTsKLQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJOaWNvbGFzIFBpdHJlIDxuaWNvQGNhbS5vcmc+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBtYXAgZHJpdmVyIGZvciBJbnRlbCBYU2NhbGUgSVE4MDMxMCBldmFsdWF0aW9uIGJvYXJkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jIGIvZHJpdmVycy9tdGQvbWFwcy9peHA0eHguYwppbmRleCA5ODZjNTg2Li43YTgyOGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL2l4cDR4eC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvaXhwNHh4LmMKQEAgLTI1Myw3ICsyNTMsNyBAQAogCS8qIFVzZSB0aGUgZmFzdCB2ZXJzaW9uICovCiAJaW5mby0+bWFwLndyaXRlID0gaXhwNHh4X3dyaXRlMTYsCiAKLQllcnIgPSBwYXJzZV9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQsIHByb2JlcywgJmluZm8tPnBhcnRpdGlvbnMsIDApOworCWVyciA9IHBhcnNlX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgcHJvYmVzLCAmaW5mby0+cGFydGl0aW9ucywgZGV2LT5yZXNvdXJjZS0+c3RhcnQpOwogCWlmIChlcnIgPiAwKSB7CiAJCWVyciA9IGFkZF9tdGRfcGFydGl0aW9ucyhpbmZvLT5tdGQsIGluZm8tPnBhcnRpdGlvbnMsIGVycik7CiAJCWlmKGVycikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvbDQ0MGd4LmMgYi9kcml2ZXJzL210ZC9tYXBzL2w0NDBneC5jCmluZGV4IDZiNzg0ZWYuLjY3NjIwYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbDQ0MGd4LmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9sNDQwZ3guYwpAQCAtNjEsMTQgKzYxLDE3IEBACiAJc3RydWN0IHJlc291cmNlICpwbV9pb2Jhc2U7CiAJX191MTYgd29yZDsKIAotCWRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAorCWRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8wLCBOVUxMKTsKIAotCXBtX2RldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0lOVEVMLAorCXBtX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCiAJCVBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zLCBOVUxMKTsKIAorCXBjaV9kZXZfcHV0KGRldik7CisKIAlpZiAoIWRldiB8fCAhcG1fZGV2KSB7CiAJCXByaW50ayhLRVJOX05PVElDRSAiTDQ0MEdYIGZsYXNoIG1hcHBpbmc6IGZhaWxlZCB0byBmaW5kIFBJSVg0IElTQSBicmlkZ2UsIGNhbm5vdCBjb250aW51ZVxuIik7CisJCXBjaV9kZXZfcHV0KHBtX2Rldik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNzYsNiArNzksNyBAQAogCiAJaWYgKCFsNDQwZ3hfbWFwLnZpcnQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIGlvcmVtYXAgTDQ0MEdYIGZsYXNoIHJlZ2lvblxuIik7CisJCXBjaV9kZXZfcHV0KHBtX2Rldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlzaW1wbGVfbWFwX2luaXQoJmw0NDBneF9tYXApOwpAQCAtOTksOCArMTAzLDEyIEBACiAJCXBtX2lvYmFzZS0+c3RhcnQgKz0gaW9iYXNlICYgfjE7CiAJCXBtX2lvYmFzZS0+ZW5kICs9IGlvYmFzZSAmIH4xOwogCisJCXBjaV9kZXZfcHV0KHBtX2Rldik7CisKIAkJLyogQWxsb2NhdGUgdGhlIHJlc291cmNlIHJlZ2lvbiAqLwogCQlpZiAocGNpX2Fzc2lnbl9yZXNvdXJjZShwbV9kZXYsIFBJSVhFX0lPQkFTRV9SRVNPVVJDRSkgIT0gMCkgeworCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCXBjaV9kZXZfcHV0KHBtX2Rldik7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDb3VsZCBub3QgYWxsb2NhdGUgcG0gaW9iYXNlIHJlc291cmNlXG4iKTsKIAkJCWlvdW5tYXAobDQ0MGd4X21hcC52aXJ0KTsKIAkJCXJldHVybiAtRU5YSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL2xhc2F0LmMgYi9kcml2ZXJzL210ZC9tYXBzL2xhc2F0LmMKaW5kZXggMWMxM2QyZC4uZTM0Mzc2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9sYXNhdC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvbGFzYXQuYwpAQCAtNzksNiArNzksNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpb3VubWFwKGxhc2F0X21hcC52aXJ0KTsKIAlyZXR1cm4gLUVOWElPOwogfQogCkBAIC04OSw2ICs5MCw3IEBACiAJCW1hcF9kZXN0cm95KGxhc2F0X210ZCk7CiAJfQogCWlmIChsYXNhdF9tYXAudmlydCkgeworCQlpb3VubWFwKGxhc2F0X21hcC52aXJ0KTsKIAkJbGFzYXRfbWFwLnZpcnQgPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMgYi9kcml2ZXJzL210ZC9tYXBzL25ldHRlbC5jCmluZGV4IDA5OTRiNWIuLjE5OGU4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvbmV0dGVsLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9uZXR0ZWwuYwpAQCAtMjc3LDYgKzI3Nyw3IEBACiAJbmV0dGVsX2FtZF9tYXAudmlydCA9IGlvcmVtYXBfbm9jYWNoZShhbWRhZGRyLCBtYXhzaXplKTsKIAlpZiAoIW5ldHRlbF9hbWRfbWFwLnZpcnQpIHsKIAkJcHJpbnRrKCJTTkFQR0VBUjogZmFpbGVkIHRvIGlvcmVtYXAoKSBCT09UQ1NcbiIpOworCQlpb3VubWFwKG5ldHRlbF9tbWNycCk7CiAJCXJldHVybigtRUlPKTsKIAl9CiAJc2ltcGxlX21hcF9pbml0KCZuZXR0ZWxfYW1kX21hcCk7CkBAIC0zMzcsNyArMzM4LDggQEAKIAkJbmV0dGVsX2FtZF9tYXAudmlydCA9IE5VTEw7CiAjZWxzZQogCQkvKiBPbmx5IEFNRCBmbGFzaCBzdXBwb3J0ZWQgKi8KLQkJcmV0dXJuKC1FTlhJTyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dF91bm1hcDI7CiAjZW5kaWYKIAl9CiAKQEAgLTM2MSwxNCArMzYzLDE1IEBACiAJbmV0dGVsX2ludGVsX21hcC52aXJ0ID0gaW9yZW1hcF9ub2NhY2hlKGludGVsMGFkZHIsIG1heHNpemUpOwogCWlmICghbmV0dGVsX2ludGVsX21hcC52aXJ0KSB7CiAJCXByaW50aygiU05BUEdFQVI6IGZhaWxlZCB0byBpb3JlbWFwKCkgUk9NQ1MxXG4iKTsKLQkJcmV0dXJuKC1FSU8pOworCQlyYyA9IC1FSU87CisJCWdvdG8gb3V0X3VubWFwMjsKIAl9CiAJc2ltcGxlX21hcF9pbml0KCZuZXR0ZWxfaW50ZWxfbWFwKTsKIAogCWludGVsX210ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJm5ldHRlbF9pbnRlbF9tYXApOwogCWlmICghaW50ZWxfbXRkKSB7Ci0JCWlvdW5tYXAobmV0dGVsX2ludGVsX21hcC52aXJ0KTsKLQkJcmV0dXJuKC1FTlhJTyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dF91bm1hcDE7CiAJfQogCiAJLyogU2V0IFBBUiB0byB0aGUgZGV0ZWN0ZWQgc2l6ZSAqLwpAQCAtMzk0LDEzICszOTcsMTQgQEAKIAluZXR0ZWxfaW50ZWxfbWFwLnZpcnQgPSBpb3JlbWFwX25vY2FjaGUoaW50ZWwwYWRkciwgbWF4c2l6ZSk7CiAJaWYgKCFuZXR0ZWxfaW50ZWxfbWFwLnZpcnQpIHsKIAkJcHJpbnRrKCJTTkFQR0VBUjogZmFpbGVkIHRvIGlvcmVtYXAoKSBST01DUzEvMlxuIik7Ci0JCXJldHVybigtRUlPKTsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dF91bm1hcDI7CiAJfQogCiAJaW50ZWxfbXRkID0gZG9fbWFwX3Byb2JlKCJjZmlfcHJvYmUiLCAmbmV0dGVsX2ludGVsX21hcCk7CiAJaWYgKCEgaW50ZWxfbXRkKSB7Ci0JCWlvdW5tYXAoKHZvaWQgKikgbmV0dGVsX2ludGVsX21hcC52aXJ0KTsKLQkJcmV0dXJuKC1FTlhJTyk7CisJCXJjID0gLUVOWElPOworCQlnb3RvIG91dF91bm1hcDE7CiAJfQogCiAJaW50ZWwxc2l6ZSA9IGludGVsX210ZC0+c2l6ZSAtIGludGVsMHNpemU7CkBAIC00NTYsNiArNDYwLDE4IEBACiAjZW5kaWYKIAogCXJldHVybihyYyk7CisKKyNpZmRlZiBDT05GSUdfTVREX0NGSV9JTlRFTEVYVAorb3V0X3VubWFwMToKKwlpb3VubWFwKCh2b2lkICopIG5ldHRlbF9pbnRlbF9tYXAudmlydCk7CisjZW5kaWYKKworb3V0X3VubWFwMjoKKwlpb3VubWFwKG5ldHRlbF9tbWNycCk7CisJaW91bm1hcChuZXR0ZWxfYW1kX21hcC52aXJ0KTsKKworCXJldHVybihyYyk7CisJCQogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ2OSw2ICs0ODUsMTAgQEAKIAkJZGVsX210ZF9wYXJ0aXRpb25zKGFtZF9tdGQpOwogCQltYXBfZGVzdHJveShhbWRfbXRkKTsKIAl9CisJaWYgKG5ldHRlbF9tbWNycCkgeworCQlpb3VubWFwKG5ldHRlbF9tbWNycCk7CisJCW5ldHRlbF9tbWNycCA9IE5VTEw7CisJfQogCWlmIChuZXR0ZWxfYW1kX21hcC52aXJ0KSB7CiAJCWlvdW5tYXAobmV0dGVsX2FtZF9tYXAudmlydCk7CiAJCW5ldHRlbF9hbWRfbWFwLnZpcnQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYyBiL2RyaXZlcnMvbXRkL21hcHMvb2NvdGVhLmMKaW5kZXggMmYwNzYwMi4uNTUyMmVhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9vY290ZWEuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL29jb3RlYS5jCkBAIC05Nyw2ICs5Nyw3IEBACiAJCQkJCUFSUkFZX1NJWkUob2NvdGVhX3NtYWxsX3BhcnRpdGlvbnMpKTsKIAl9IGVsc2UgewogCQlwcmludGsoIm1hcCBwcm9iZSBmYWlsZWQgZm9yIGZsYXNoXG4iKTsKKwkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApAQCAtMTA2LDYgKzEwNyw3IEBACiAKIAlpZiAoIW9jb3RlYV9sYXJnZV9tYXAudmlydCkgewogCQlwcmludGsoIkZhaWxlZCB0byBpb3JlbWFwIGZsYXNoXG4iKTsKKwkJaW91bm1hcChvY290ZWFfc21hbGxfbWFwLnZpcnQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTExOCw2ICsxMjAsOCBAQAogCQkJCQlBUlJBWV9TSVpFKG9jb3RlYV9sYXJnZV9wYXJ0aXRpb25zKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKCJtYXAgcHJvYmUgZmFpbGVkIGZvciBmbGFzaFxuIik7CisJCWlvdW5tYXAob2NvdGVhX3NtYWxsX21hcC52aXJ0KTsKKwkJaW91bm1hcChvY290ZWFfbGFyZ2VfbWFwLnZpcnQpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGNtY2lhbXRkLmMKaW5kZXggYzg2MTEzNC4uOTk1MzQ3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9wY21jaWFtdGQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BjbWNpYW10ZC5jCkBAIC02MDIsNiArNjAyLDEwIEBACiAJcmV0ID0gcGNtY2lhX3JlcXVlc3RfY29uZmlndXJhdGlvbihsaW5rLCAmbGluay0+Y29uZik7CiAJaWYocmV0ICE9IENTX1NVQ0NFU1MpIHsKIAkJY3NfZXJyb3IobGluaywgUmVxdWVzdENvbmZpZ3VyYXRpb24sIHJldCk7CisJCWlmIChkZXYtPndpbl9iYXNlKSB7CisJCQlpb3VubWFwKGRldi0+d2luX2Jhc2UpOworCQkJZGV2LT53aW5fYmFzZSA9IE5VTEw7CisJCX0KIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3BoeXNtYXAuYyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCmluZGV4IDc3OTlhMjUuLmJjN2NjNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGh5c21hcC5jCkBAIC0xNTgsOSArMTU4LDQyIEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwaHlzbWFwX2ZsYXNoX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldCA9IDA7CisKKwlpZiAoaW5mbykKKwkJcmV0ID0gaW5mby0+bXRkLT5zdXNwZW5kKGluZm8tPm10ZCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBoeXNtYXBfZmxhc2hfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGh5c21hcF9mbGFzaF9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlpZiAoaW5mbykKKwkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGh5c21hcF9mbGFzaF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHBoeXNtYXBfZmxhc2hfaW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJaWYgKGluZm8gJiYgaW5mby0+bXRkLT5zdXNwZW5kKGluZm8tPm10ZCkgPT0gMCkKKwkJaW5mby0+bXRkLT5yZXN1bWUoaW5mby0+bXRkKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwaHlzbWFwX2ZsYXNoX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gcGh5c21hcF9mbGFzaF9wcm9iZSwKIAkucmVtb3ZlCQk9IHBoeXNtYXBfZmxhc2hfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gcGh5c21hcF9mbGFzaF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gcGh5c21hcF9mbGFzaF9yZXN1bWUsCisJLnNodXRkb3duCT0gcGh5c21hcF9mbGFzaF9zaHV0ZG93biwKKyNlbmRpZgogCS5kcml2ZXIJCT0gewogCQkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9yZWR3b29kLmMgYi9kcml2ZXJzL210ZC9tYXBzL3JlZHdvb2QuYwppbmRleCBlYzhmZGFlLi4yMjU3ZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL3JlZHdvb2QuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3JlZHdvb2QuYwpAQCAtMTI2LDYgKzEyNiw4IEBACiAKIGludCBfX2luaXQgaW5pdF9yZWR3b29kX2ZsYXNoKHZvaWQpCiB7CisJaW50IGVyciA9IDA7CisKIAlwcmludGsoS0VSTl9OT1RJQ0UgInJlZHdvb2Q6IGZsYXNoIG1hcHBpbmc6ICV4IGF0ICV4XG4iLAogCQkJV0lORE9XX1NJWkUsIFdJTkRPV19BRERSKTsKIApAQCAtMTQxLDExICsxNDMsMTggQEAKIAogCWlmIChyZWR3b29kX210ZCkgewogCQlyZWR3b29kX210ZC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJcmV0dXJuIGFkZF9tdGRfcGFydGl0aW9ucyhyZWR3b29kX210ZCwKKwkJZXJyID0gYWRkX210ZF9wYXJ0aXRpb25zKHJlZHdvb2RfbXRkLAogCQkJCXJlZHdvb2RfZmxhc2hfcGFydGl0aW9ucywKIAkJCQlOVU1fUkVEV09PRF9GTEFTSF9QQVJUSVRJT05TKTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKCJpbml0X3JlZHdvb2RfZmxhc2g6IGFkZF9tdGRfcGFydGl0aW9ucyBmYWlsZWRcbiIpOworCQkJaW91bm1hcChyZWR3b29kX2ZsYXNoX21hcC52aXJ0KTsKKwkJfQorCQlyZXR1cm4gZXJyOworCiAJfQogCisJaW91bm1hcChyZWR3b29kX2ZsYXNoX21hcC52aXJ0KTsKIAlyZXR1cm4gLUVOWElPOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3NiYzgyNDAuYyBiL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jCmluZGV4IDdkMGZjZjguLmI4YzEzMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvc2JjODI0MC5jCkBAIC0xNTYsNyArMTU2LDcgQEAKIAl9OwogCiAJaW50IGRldmljZXNmb3VuZCA9IDA7Ci0JaW50IGk7CisJaW50IGksajsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fRkxBU0hfQkFOS1M7IGkrKykgewogCQlwcmludGsgKEtFUk5fTk9USUNFIE1TR19QUkVGSVgKQEAgLTE2Niw2ICsxNjYsMTAgQEAKIAkJCSh1bnNpZ25lZCBsb25nKSBpb3JlbWFwIChwdFtpXS5hZGRyLCBwdFtpXS5zaXplKTsKIAkJaWYgKCFzYmM4MjQwX21hcFtpXS5tYXBfcHJpdl8xKSB7CiAJCQlwcmludGsgKE1TR19QUkVGSVggImZhaWxlZCB0byBpb3JlbWFwXG4iKTsKKwkJCWZvciAoaiA9IDA7IGogPCBpOyBqKyspIHsKKwkJCQlpb3VubWFwKCh2b2lkICopIHNiYzgyNDBfbWFwW2pdLm1hcF9wcml2XzEpOworCQkJCXNiYzgyNDBfbWFwW2pdLm1hcF9wcml2XzEgPSAwOworCQkJfQogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAkJc2ltcGxlX21hcF9pbml0KCZzYmM4MjQwX210ZFtpXSk7CkBAIC0xNzUsNiArMTc5LDExIEBACiAJCWlmIChzYmM4MjQwX210ZFtpXSkgewogCQkJc2JjODI0MF9tdGRbaV0tPm1vZHVsZSA9IFRISVNfTU9EVUxFOwogCQkJZGV2aWNlc2ZvdW5kKys7CisJCX0gZWxzZSB7CisJCQlpZiAoc2JjODI0MF9tYXBbaV0ubWFwX3ByaXZfMSkgeworCQkJCWlvdW5tYXAoKHZvaWQgKikgc2JjODI0MF9tYXBbaV0ubWFwX3ByaXZfMSk7CisJCQkJc2JjODI0MF9tYXBbaV0ubWFwX3ByaXZfMSA9IDA7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMgYi9kcml2ZXJzL210ZC9tYXBzL3NjeDIwMF9kb2NmbGFzaC5jCmluZGV4IDczOTFmZDUuLjVlMmJjZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvc2N4MjAwX2RvY2ZsYXNoLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9zY3gyMDBfZG9jZmxhc2guYwpAQCAtODcsMTkgKzg3LDIzIEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyBOQU1FICI6IE5hdFNlbWkgU0N4MjAwIERPQ0NTIEZsYXNoIERyaXZlclxuIik7CiAKLQlpZiAoKGJyaWRnZSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX05TLAorCWlmICgoYnJpZGdlID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9OUywKIAkJCQkgICAgICBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9CUklER0UsCiAJCQkJICAgICAgTlVMTCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogY2hlY2sgdGhhdCB3ZSBoYXZlIGZvdW5kIHRoZSBjb25maWd1cmF0aW9uIGJsb2NrICovCi0JaWYgKCFzY3gyMDBfY2JfcHJlc2VudCgpKQorCWlmICghc2N4MjAwX2NiX3ByZXNlbnQoKSkgeworCQlwY2lfZGV2X3B1dChicmlkZ2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAKIAlpZiAocHJvYmUpIHsKIAkJLyogVHJ5IHRvIHVzZSB0aGUgcHJlc2VudCBmbGFzaCBtYXBwaW5nIGlmIGFueSAqLwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBTQ3gyMDBfRE9DQ1NfQkFTRSwgJmJhc2UpOwogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoYnJpZGdlLCBTQ3gyMDBfRE9DQ1NfQ1RSTCwgJmN0cmwpOworCQlwY2lfZGV2X3B1dChicmlkZ2UpOworCiAJCXBtciA9IGlubChzY3gyMDBfY2JfYmFzZSArIFNDeDIwMF9QTVIpOwogCiAJCWlmIChiYXNlID09IDAKQEAgLTEyNyw2ICsxMzEsNyBAQAogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9IGVsc2UgeworCQlwY2lfZGV2X3B1dChicmlkZ2UpOwogCQlmb3IgKHUgPSBzaXplOyB1ID4gMTsgdSA+Pj0gMSkKIAkJCTsKIAkJaWYgKHUgIT0gMSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYyBiL2RyaXZlcnMvbXRkL21hcHMvd2FsbnV0LmMKaW5kZXggZWM4MGVlYy4uY2E5MzIxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy93YWxudXQuYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3dhbG51dC5jCkBAIC02OCw2ICs2OCw3IEBACiAKIAlpZiAoV0FMTlVUX0ZMQVNIX09OQkRfTihmcGdhX2JyZHMxKSkgewogCQlwcmludGsoIlRoZSBvbi1ib2FyZCBmbGFzaCBpcyBkaXNhYmxlZCAoVTc5IHN3IDUpISIpOworCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAoV0FMTlVUX0ZMQVNIX1NSQU1fU0VMKGZwZ2FfYnJkczEpKQpAQCAtODEsNiArODIsNyBAQAogCiAJaWYgKCF3YWxudXRfbWFwLnZpcnQpIHsKIAkJcHJpbnRrKCJGYWlsZWQgdG8gaW9yZW1hcCBmbGFzaC5cbiIpOworCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtOTMsOSArOTUsMTEgQEAKIAkJCQkJQVJSQVlfU0laRSh3YWxudXRfcGFydGl0aW9ucykpOwogCX0gZWxzZSB7CiAJCXByaW50aygibWFwIHByb2JlIGZhaWxlZCBmb3IgZmxhc2hcbiIpOworCQlpb3VubWFwKGZwZ2Ffc3RhdHVzX2Fkcik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCisJaW91bm1hcChmcGdhX3N0YXR1c19hZHIpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRjaGFyLmMgYi9kcml2ZXJzL210ZC9tdGRjaGFyLmMKaW5kZXggZmI4YjRmNy4uNWI2YWNmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbXRkY2hhci5jCisrKyBiL2RyaXZlcnMvbXRkL210ZGNoYXIuYwpAQCAtNjIsMTUgKzYyLDEyIEBACiAJc3RydWN0IG10ZF9pbmZvICptdGQgPSBtZmktPm10ZDsKIAogCXN3aXRjaCAob3JpZykgewotCWNhc2UgMDoKLQkJLyogU0VFS19TRVQgKi8KKwljYXNlIFNFRUtfU0VUOgogCQlicmVhazsKLQljYXNlIDE6Ci0JCS8qIFNFRUtfQ1VSICovCisJY2FzZSBTRUVLX0NVUjoKIAkJb2Zmc2V0ICs9IGZpbGUtPmZfcG9zOwogCQlicmVhazsKLQljYXNlIDI6Ci0JCS8qIFNFRUtfRU5EICovCisJY2FzZSBTRUVLX0VORDoKIAkJb2Zmc2V0ICs9IG10ZC0+c2l6ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL210ZGNvcmUuYyBiL2RyaXZlcnMvbXRkL210ZGNvcmUuYwppbmRleCAxNjhkM2JhLi5jNGQyNmRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRjb3JlLmMKKysrIGIvZHJpdmVycy9tdGQvbXRkY29yZS5jCkBAIC01Nyw2ICs1NywxNiBAQAogCQkJbXRkLT5pbmRleCA9IGk7CiAJCQltdGQtPnVzZWNvdW50ID0gMDsKIAorCQkJLyogU29tZSBjaGlwcyBhbHdheXMgcG93ZXIgdXAgbG9ja2VkLiBVbmxvY2sgdGhlbSBub3cgKi8KKwkJCWlmICgobXRkLT5mbGFncyAmIE1URF9XUklURUFCTEUpCisJCQkgICAgJiYgKG10ZC0+ZmxhZ3MgJiBNVERfU1RVUElEX0xPQ0spICYmIG10ZC0+dW5sb2NrKSB7CisJCQkJaWYgKG10ZC0+dW5sb2NrKG10ZCwgMCwgbXRkLT5zaXplKSkKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCQkgICAgICAgIiVzOiB1bmxvY2sgZmFpbGVkLCAiCisJCQkJCSAgICAgICAid3JpdGVzIG1heSBub3Qgd29ya1xuIiwKKwkJCQkJICAgICAgIG10ZC0+bmFtZSk7CisJCQl9CisKIAkJCURFQlVHKDAsICJtdGQ6IEdpdmluZyBvdXQgZGV2aWNlICVkIHRvICVzXG4iLGksIG10ZC0+bmFtZSk7CiAJCQkvKiBObyBuZWVkIHRvIGdldCBhIHJlZmNvdW50IG9uIHRoZSBtb2R1bGUgY29udGFpbmluZwogCQkJICAgdGhlIG5vdGlmaWVyLCBzaW5jZSB3ZSBob2xkIHRoZSBtdGRfdGFibGVfbXV0ZXggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCAzZGI3N2VlLi5jOTkzMDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC0xMSw3ICsxMSw3IEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyBhbGwgdHlwZSBvZiBOQU5EIGZsYXNoCiAJICBkZXZpY2VzLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBzZWUKLQkgIDxodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnL3RlY2gvbmFuZC5odG1sPi4KKwkgIDxodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnL2RvYy9uYW5kLmh0bWw+LgogCiBjb25maWcgTVREX05BTkRfVkVSSUZZX1dSSVRFCiAJYm9vbCAiVmVyaWZ5IE5BTkQgcGFnZSB3cml0ZXMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jIGIvZHJpdmVycy9tdGQvbmFuZC9hbXMtZGVsdGEuYwppbmRleCBkNzg5N2RjLi5hMGJhMDdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL2Ftcy1kZWx0YS5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvYW1zLWRlbHRhLmMKQEAgLTEzMCwxMSArMTMwLDEzIEBACiAJaWYgKGN0cmwgJiBOQU5EX0NUUkxfQ0hBTkdFKSB7CiAJCXVuc2lnbmVkIGxvbmcgYml0czsKIAotCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpIDw8IDI7Ci0JCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0NMRSkgPDwgNzsKLQkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA8PCA2OworCQliaXRzID0gKH5jdHJsICYgTkFORF9OQ0UpID8gQU1TX0RFTFRBX0xBVENIMl9OQU5EX05DRSA6IDA7CisJCWJpdHMgfD0gKGN0cmwgJiBOQU5EX0NMRSkgPyBBTVNfREVMVEFfTEFUQ0gyX05BTkRfQ0xFIDogMDsKKwkJYml0cyB8PSAoY3RybCAmIE5BTkRfQUxFKSA/IEFNU19ERUxUQV9MQVRDSDJfTkFORF9BTEUgOiAwOwogCi0JCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoMHhDMiwgYml0cyk7CisJCWFtc19kZWx0YV9sYXRjaDJfd3JpdGUoQU1TX0RFTFRBX0xBVENIMl9OQU5EX0NMRSB8CisJCQkJQU1TX0RFTFRBX0xBVENIMl9OQU5EX0FMRSB8CisJCQkJQU1TX0RFTFRBX0xBVENIMl9OQU5EX05DRSwgYml0cyk7CiAJfQogCiAJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9hdTE1NTBuZC5jCmluZGV4IDMxMjI4MzMuLjA5ZTQyMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvYXUxNTUwbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2F1MTU1MG5kLmMKQEAgLTIxLDE4ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0vKiBmaXhtZTogdGhpcyBpcyB1Z2x5ICovCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwgNiwgMCkKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS9hdTEwMDAuaD4KLSNpZmRlZiBDT05GSUdfTUlQU19QQjE1NTAKLSNpbmNsdWRlIDxhc20vcGIxNTUwLmg+Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfTUlQU19EQjE1NTAKLSNpbmNsdWRlIDxhc20vZGIxeDAwLmg+Ci0jZW5kaWYKLSNlbmRpZgogCiAvKgogICogTVREIHN0cnVjdHVyZSBmb3IgTkFORCBjb250cm9sbGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2VkYjczMTIuYyBiL2RyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jCmluZGV4IDUxNmMwZTUuLjEyMDE3ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvZWRiNzMxMi5jCkBAIC0xOTgsNiArMTk4LDkgQEAKIAkvKiBSZWxlYXNlIHJlc291cmNlcywgdW5yZWdpc3RlciBkZXZpY2UgKi8KIAluYW5kX3JlbGVhc2UoYXA3MzEyX210ZCk7CiAKKwkvKiBSZWxlYXNlIGlvIHJlc291cmNlICovCisJaW91bm1hcCgodm9pZCAqKXRoaXMtPklPX0FERFJfUik7CisKIAkvKiBGcmVlIHRoZSBNVEQgZGV2aWNlIHN0cnVjdHVyZSAqLwogCWtmcmVlKGVwNzMxMl9tdGQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYyBiL2RyaXZlcnMvbXRkL25hbmQvbmFuZF9iYXNlLmMKaW5kZXggNjJiODYxMy4uOTc1YjJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uYW5kX2Jhc2UuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL25hbmRfYmFzZS5jCkBAIC0xMDkzLDkgKzEwOTMsMTAgQEAKIAogCXJldCA9IG5hbmRfZG9fcmVhZF9vcHMobXRkLCBmcm9tLCAmY2hpcC0+b3BzKTsKIAorCSpyZXRsZW4gPSBjaGlwLT5vcHMucmV0bGVuOworCiAJbmFuZF9yZWxlYXNlX2RldmljZShtdGQpOwogCi0JKnJldGxlbiA9IGNoaXAtPm9wcy5yZXRsZW47CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTIwMyw3ICsxMjA0LDcgQEAKIAkJcG9zID0gc3RlcHMgKiAoZWNjc2l6ZSArIGNodW5rKTsKIAkJc3RlcHMgPSAwOwogCX0gZWxzZQotCQlwb3MgPSBlY2NzaXplICsgY2h1bms7CisJCXBvcyA9IGVjY3NpemU7CiAKIAljaGlwLT5jbWRmdW5jKG10ZCwgTkFORF9DTURfU0VRSU4sIHBvcywgcGFnZSk7CiAJZm9yIChpID0gMDsgaSA8IHN0ZXBzOyBpKyspIHsKQEAgLTE1NjYsNyArMTU2Nyw3IEBACiAJCQkJYnl0ZXMgPSBtaW5fdChzaXplX3QsIGxlbiwgZnJlZS0+bGVuZ3RoKTsKIAkJCQlib2ZmcyA9IGZyZWUtPm9mZnNldDsKIAkJCX0KLQkJCW1lbWNweShjaGlwLT5vb2JfcG9pICsgd29mZnMsIG9vYiwgYnl0ZXMpOworCQkJbWVtY3B5KGNoaXAtPm9vYl9wb2kgKyBib2Zmcywgb29iLCBieXRlcyk7CiAJCQlvb2IgKz0gYnl0ZXM7CiAJCX0KIAkJcmV0dXJuIG9vYjsKQEAgLTE2OTEsOSArMTY5MiwxMCBAQAogCiAJcmV0ID0gbmFuZF9kb193cml0ZV9vcHMobXRkLCB0bywgJmNoaXAtPm9wcyk7CiAKKwkqcmV0bGVuID0gY2hpcC0+b3BzLnJldGxlbjsKKwogCW5hbmRfcmVsZWFzZV9kZXZpY2UobXRkKTsKIAotCSpyZXRsZW4gPSBjaGlwLT5vcHMucmV0bGVuOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyMjIsNyArMjIyNCw3IEBACiAJfQogCiAJLyogVHJ5IHRvIGlkZW50aWZ5IG1hbnVmYWN0dXJlciAqLwotCWZvciAobWFmX2lkeCA9IDA7IG5hbmRfbWFudWZfaWRzW21hZl9pZHhdLmlkICE9IDB4MDsgbWFmX2lkKyspIHsKKwlmb3IgKG1hZl9pZHggPSAwOyBuYW5kX21hbnVmX2lkc1ttYWZfaWR4XS5pZCAhPSAweDA7IG1hZl9pZHgrKykgewogCQlpZiAobmFuZF9tYW51Zl9pZHNbbWFmX2lkeF0uaWQgPT0gKm1hZl9pZCkKIAkJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvbmRmYy5jIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKaW5kZXggZTViZDg4Zi4uMDM5Yzc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9uZGZjLmMKQEAgLTE2OCw3ICsxNjgsNyBAQAogCWNoaXAtPmVjYy5tb2RlID0gTkFORF9FQ0NfSFc7CiAJY2hpcC0+ZWNjLnNpemUgPSAyNTY7CiAJY2hpcC0+ZWNjLmJ5dGVzID0gMzsKLQljaGlwLT5lY2NsYXlvdXQgPSBtdGQtPnBsX2NoaXAtPmVjY2xheW91dDsKKwljaGlwLT5lY2NsYXlvdXQgPSBjaGlwLT5lY2MubGF5b3V0ID0gbXRkLT5wbF9jaGlwLT5lY2NsYXlvdXQ7CiAJbXRkLT5tdGQucHJpdiA9IGNoaXA7CiAJbXRkLT5tdGQub3duZXIgPSBUSElTX01PRFVMRTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYyBiL2RyaXZlcnMvbXRkL25hbmQvcHBjaGFtZWxlb25ldmIuYwppbmRleCAyMmZhNjVjLi5lYjdkNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL3BwY2hhbWVsZW9uZXZiLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9wcGNoYW1lbGVvbmV2Yi5jCkBAIC0yNzYsNiArMjc2LDcgQEAKIAkvKiBTY2FuIHRvIGZpbmQgZXhpc3RlbmNlIG9mIHRoZSBkZXZpY2UgKGl0IGNvdWxkIG5vdCBiZSBtb3VudGVkKSAqLwogCWlmIChuYW5kX3NjYW4ocHBjaGFtZWxlb25fbXRkLCAxKSkgewogCQlpb3VubWFwKCh2b2lkICopcHBjaGFtZWxlb25fZmlvX2Jhc2UpOworCQlwcGNoYW1lbGVvbl9maW9fYmFzZSA9IE5VTEw7CiAJCWtmcmVlKHBwY2hhbWVsZW9uX210ZCk7CiAJCWdvdG8gbmFuZF9ldmJfaW5pdDsKIAl9CkBAIC0zMTQsNiArMzE1LDggQEAKIAlwcGNoYW1lbGVvbmV2Yl9tdGQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbXRkX2luZm8pICsgc2l6ZW9mKHN0cnVjdCBuYW5kX2NoaXApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBwY2hhbWVsZW9uZXZiX210ZCkgewogCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBQUENoYW1lbGVvbkVWQiBOQU5EIE1URCBkZXZpY2Ugc3RydWN0dXJlLlxuIik7CisJCWlmIChwcGNoYW1lbGVvbl9maW9fYmFzZSkKKwkJCWlvdW5tYXAocHBjaGFtZWxlb25fZmlvX2Jhc2UpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTMyMiw2ICszMjUsOCBAQAogCWlmICghcHBjaGFtZWxlb25ldmJfZmlvX2Jhc2UpIHsKIAkJcHJpbnRrKCJpb3JlbWFwIFBQQ2hhbWVsZW9uRVZCIE5BTkQgZmxhc2ggZmFpbGVkXG4iKTsKIAkJa2ZyZWUocHBjaGFtZWxlb25ldmJfbXRkKTsKKwkJaWYgKHBwY2hhbWVsZW9uX2Zpb19iYXNlKQorCQkJaW91bm1hcChwcGNoYW1lbGVvbl9maW9fYmFzZSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzc4LDYgKzM4Myw4IEBACiAJaWYgKG5hbmRfc2NhbihwcGNoYW1lbGVvbmV2Yl9tdGQsIDEpKSB7CiAJCWlvdW5tYXAoKHZvaWQgKilwcGNoYW1lbGVvbmV2Yl9maW9fYmFzZSk7CiAJCWtmcmVlKHBwY2hhbWVsZW9uZXZiX210ZCk7CisJCWlmIChwcGNoYW1lbGVvbl9maW9fYmFzZSkKKwkJCWlvdW5tYXAocHBjaGFtZWxlb25fZmlvX2Jhc2UpOwogCQlyZXR1cm4gLUVOWElPOwogCX0KICNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvc2hhcnBzbC5jIGIvZHJpdmVycy9tdGQvbmFuZC9zaGFycHNsLmMKaW5kZXggZmJlZWRjMy4uNTFjNzI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9zaGFycHNsLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9zaGFycHNsLmMKQEAgLTc4LDcgKzc4LDcgQEAKIC8qCiAgKgloYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcwogICoJY3RybDoKLSAqCU5BTkRfQ05FOiBiaXQgMCAtPiBiaXQgMCAmIDQKKyAqCU5BTkRfQ05FOiBiaXQgMCAtPiAhIGJpdCAwICYgNAogICoJTkFORF9DTEU6IGJpdCAxIC0+IGJpdCAxCiAgKglOQU5EX0FMRTogYml0IDIgLT4gYml0IDIKICAqCkBAIC05Miw3ICs5MiwxMCBAQAogCQl1bnNpZ25lZCBjaGFyIGJpdHMgPSBjdHJsICYgMHgwNzsKIAogCQliaXRzIHw9IChjdHJsICYgMHgwMSkgPDwgNDsKLQkJd3JpdGViKChyZWFkYihGTEFTSENUTCkgJiAweDE3KSB8IGJpdHMsIEZMQVNIQ1RMKTsKKworCQliaXRzIF49IDB4MTE7CisKKwkJd3JpdGViKChyZWFkYihGTEFTSENUTCkgJiB+MHgxNykgfCBiaXRzLCBGTEFTSENUTCk7CiAJfQogCiAJaWYgKGNtZCAhPSBOQU5EX0NNRF9OT05FKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvc3NmZGMuYyBiL2RyaXZlcnMvbXRkL3NzZmRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiZjAxNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbXRkL3NzZmRjLmMKQEAgLTAsMCArMSw0NjggQEAKKy8qCisgKiBMaW51eCBkcml2ZXIgZm9yIFNTRkRDIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyIChSZWFkIG9ubHkpCisgKiAoYykgMjAwNSBFcHRhciBzcmwKKyAqIEF1dGhvcjogQ2xhdWRpbyBMYW5jb25lbGxpIDxsYW5jb25lbGxpLmNsYXVkaW9AZXB0YXIuY29tPgorICoKKyAqIEJhc2VkIG9uIE5URkwgYW5kIE1UREJMT0NLX1JPIGRyaXZlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2Jsa3RyYW5zLmg+CisKK3N0cnVjdCBzc2ZkY3JfcmVjb3JkIHsKKwlzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiBtYmQ7CisJaW50IHVzZWNvdW50OworCXVuc2lnbmVkIGNoYXIgaGVhZHM7CisJdW5zaWduZWQgY2hhciBzZWN0b3JzOworCXVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKwlpbnQgY2lzX2Jsb2NrOwkJCS8qIGJsb2NrIG4uIGNvbnRhaW5pbmcgQ0lTL0lESSAqLworCWludCBlcmFzZV9zaXplOwkJCS8qIHBoeXNfYmxvY2tfc2l6ZSAqLworCXVuc2lnbmVkIHNob3J0ICpsb2dpY19ibG9ja19tYXA7IC8qIGFsbCB6b25lcyAobWF4IDgxOTIgcGh5cyBibG9ja3Mgb24KKwkJCQkJICAgIHRoZSAxMjhNQikgKi8KKwlpbnQgbWFwX2xlbjsJCQkvKiBuLiBwaHlzX2Jsb2NrcyBvbiB0aGUgY2FyZCAqLworfTsKKworI2RlZmluZSBTU0ZEQ1JfTUFKT1IJCTI1NworI2RlZmluZSBTU0ZEQ1JfUEFSVE5fQklUUwkzCisKKyNkZWZpbmUgU0VDVE9SX1NJWkUJCTUxMgorI2RlZmluZSBTRUNUT1JfU0hJRlQJCTkKKyNkZWZpbmUgT09CX1NJWkUJCTE2CisKKyNkZWZpbmUgTUFYX0xPR0lDX0JMS19QRVJfWk9ORQkxMDAwCisjZGVmaW5lIE1BWF9QSFlTX0JMS19QRVJfWk9ORQkxMDI0CisKKyNkZWZpbmUgS0IoeCkJKCAoeCkgKiAxMDI0TCApCisjZGVmaW5lIE1CKHgpCSggS0IoeCkgKiAxMDI0TCApCisKKy8qKiBDSFMgVGFibGUKKwkJMU1CCTJNQgk0TUIJOE1CCTE2TUIJMzJNQgk2NE1CCTEyOE1CCitOQ3lsaW5kZXIJMTI1CTEyNQkyNTAJMjUwCTUwMAk1MDAJNTAwCTUwMAorTkhlYWQJCTQJNAk0CTQJNAk4CTgJMTYKK05TZWN0b3IJCTQJOAk4CTE2CTE2CTE2CTMyCTMyCitTdW1TZWN0b3IJMiwwMDAJNCwwMDAJOCwwMDAJMTYsMDAwCTMyLDAwMAk2NCwwMDAJMTI4LDAwMAkyNTYsMDAwCitTZWN0b3JTaXplCTUxMgk1MTIJNTEyCTUxMgk1MTIJNTEyCTUxMgk1MTIKKyoqLworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIHNob3J0IGN5bDsKKwl1bnNpZ25lZCBjaGFyIGhlYWQ7CisJdW5zaWduZWQgY2hhciBzZWM7Cit9IGNoc19lbnRyeV90OworCisvKiBNdXN0IGJlIG9yZGVyZWQgYnkgc2l6ZSAqLworc3RhdGljIGNvbnN0IGNoc19lbnRyeV90IGNoc190YWJsZVtdID0geworCXsgTUIoICAxKSwgMTI1LCAgNCwgIDQgfSwKKwl7IE1CKCAgMiksIDEyNSwgIDQsICA4IH0sCisJeyBNQiggIDQpLCAyNTAsICA0LCAgOCB9LAorCXsgTUIoICA4KSwgMjUwLCAgNCwgMTYgfSwKKwl7IE1CKCAxNiksIDUwMCwgIDQsIDE2IH0sCisJeyBNQiggMzIpLCA1MDAsICA4LCAxNiB9LAorCXsgTUIoIDY0KSwgNTAwLCAgOCwgMzIgfSwKKwl7IE1CKDEyOCksIDUwMCwgMTYsIDMyIH0sCisJeyAwIH0sCit9OworCitzdGF0aWMgaW50IGdldF9jaHModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBzaG9ydCAqY3lsLCB1bnNpZ25lZCBjaGFyICpoZWFkLAorCQkJdW5zaWduZWQgY2hhciAqc2VjKQoreworCWludCBrOworCWludCBmb3VuZCA9IDA7CisKKwlrID0gMDsKKwl3aGlsZSAoY2hzX3RhYmxlW2tdLnNpemUgPiAwICYmIHNpemUgPiBjaHNfdGFibGVba10uc2l6ZSkKKwkJaysrOworCisJaWYgKGNoc190YWJsZVtrXS5zaXplID4gMCkgeworCQlpZiAoY3lsKQorCQkJKmN5bCA9IGNoc190YWJsZVtrXS5jeWw7CisJCWlmIChoZWFkKQorCQkJKmhlYWQgPSBjaHNfdGFibGVba10uaGVhZDsKKwkJaWYgKHNlYykKKwkJCSpzZWMgPSBjaHNfdGFibGVba10uc2VjOworCQlmb3VuZCA9IDE7CisJfQorCisJcmV0dXJuIGZvdW5kOworfQorCisvKiBUaGVzZSBieXRlcyBhcmUgdGhlIHNpZ25hdHVyZSBmb3IgdGhlIENJUy9JREkgc2VjdG9yICovCitzdGF0aWMgY29uc3QgdWludDhfdCBjaXNfbnVtYmVyc1tdID0geworCTB4MDEsIDB4MDMsIDB4RDksIDB4MDEsIDB4RkYsIDB4MTgsIDB4MDIsIDB4REYsIDB4MDEsIDB4MjAKK307CisKKy8qIFJlYWQgYW5kIGNoZWNrIGZvciBhIHZhbGlkIENJUyBzZWN0b3IgKi8KK3N0YXRpYyBpbnQgZ2V0X3ZhbGlkX2Npc19zZWN0b3Ioc3RydWN0IG10ZF9pbmZvICptdGQpCit7CisJaW50IHJldCwgaywgY2lzX3NlY3RvcjsKKwlzaXplX3QgcmV0bGVuOworCWxvZmZfdCBvZmZzZXQ7CisJdWludDhfdCBzZWN0X2J1ZltTRUNUT1JfU0laRV07CisKKwkvKgorCSAqIExvb2sgZm9yIENJUy9JREkgc2VjdG9yIG9uIHRoZSBmaXJzdCBHT09EIGJsb2NrIChnaXZlIHVwIGFmdGVyIDQgYmFkCisJICogYmxvY2tzKS4gSWYgdGhlIGZpcnN0IGdvb2QgYmxvY2sgZG9lc24ndCBjb250YWluIENJUyBudW1iZXIgdGhlIGZsYXNoCisJICogaXMgbm90IFNTRkRDIGZvcm1hdHRlZAorCSAqLworCWNpc19zZWN0b3IgPSAtMTsKKwlmb3IgKGsgPSAwLCBvZmZzZXQgPSAwOyBrIDwgNDsgaysrLCBvZmZzZXQgKz0gbXRkLT5lcmFzZXNpemUpIHsKKwkJaWYgKCFtdGQtPmJsb2NrX2lzYmFkKG10ZCwgb2Zmc2V0KSkgeworCQkJcmV0ID0gbXRkLT5yZWFkKG10ZCwgb2Zmc2V0LCBTRUNUT1JfU0laRSwgJnJldGxlbiwKKwkJCQlzZWN0X2J1Zik7CisKKwkJCS8qIENJUyBwYXR0ZXJuIG1hdGNoIG9uIHRoZSBzZWN0b3IgYnVmZmVyICovCisJCQlpZiAoIHJldCA8IDAgfHwgcmV0bGVuICE9IFNFQ1RPUl9TSVpFICkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkJIlNTRkRDX1JPOmNhbid0IHJlYWQgQ0lTL0lESSBzZWN0b3JcbiIpOworCQkJfSBlbHNlIGlmICggIW1lbWNtcChzZWN0X2J1ZiwgY2lzX251bWJlcnMsCisJCQkJCXNpemVvZihjaXNfbnVtYmVycykpICkgeworCQkJCS8qIEZvdW5kICovCisJCQkJY2lzX3NlY3RvciA9IChpbnQpKG9mZnNldCA+PiBTRUNUT1JfU0hJRlQpOworCQkJfSBlbHNlIHsKKwkJCQlERUJVRyhNVERfREVCVUdfTEVWRUwxLAorCQkJCQkiU1NGRENfUk86IENJUy9JREkgc2VjdG9yIG5vdCBmb3VuZCIKKwkJCQkJIiBvbiAlcyAobXRkJWQpXG4iLCBtdGQtPm5hbWUsCisJCQkJCW10ZC0+aW5kZXgpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gY2lzX3NlY3RvcjsKK30KKworLyogUmVhZCBwaHlzaWNhbCBzZWN0b3IgKHdyYXBwZXIgdG8gTVREX1JFQUQpICovCitzdGF0aWMgaW50IHJlYWRfcGh5c2ljYWxfc2VjdG9yKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpzZWN0X2J1ZiwKKwkJCQlpbnQgc2VjdF9ubykKK3sKKwlpbnQgcmV0OworCXNpemVfdCByZXRsZW47CisJbG9mZl90IG9mZnNldCA9IChsb2ZmX3Qpc2VjdF9ubyA8PCBTRUNUT1JfU0hJRlQ7CisKKwlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZmZzZXQsIFNFQ1RPUl9TSVpFLCAmcmV0bGVuLCBzZWN0X2J1Zik7CisJaWYgKHJldCA8IDAgfHwgcmV0bGVuICE9IFNFQ1RPUl9TSVpFKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gMDsKK30KKworLyogUmVhZCByZWR1bmRhbmN5IGFyZWEgKHdyYXBwZXIgdG8gTVREX1JFQURfT09CICovCitzdGF0aWMgaW50IHJlYWRfcmF3X29vYihzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mZnMsIHVpbnQ4X3QgKmJ1ZikKK3sKKwlzdHJ1Y3QgbXRkX29vYl9vcHMgb3BzOworCWludCByZXQ7CisKKwlvcHMubW9kZSA9IE1URF9PT0JfUkFXOworCW9wcy5vb2JvZmZzID0gMDsKKwlvcHMub29ibGVuID0gbXRkLT5vb2JzaXplOworCW9wcy5sZW4gPSBPT0JfU0laRTsKKwlvcHMub29iYnVmID0gYnVmOworCW9wcy5kYXRidWYgPSBOVUxMOworCisJcmV0ID0gbXRkLT5yZWFkX29vYihtdGQsIG9mZnMsICZvcHMpOworCWlmIChyZXQgPCAwIHx8IG9wcy5yZXRsZW4gIT0gT09CX1NJWkUpCisJCXJldHVybiAtMTsKKworCXJldHVybiAwOworfQorCisvKiBQYXJpdHkgY2FsY3VsYXRvciBvbiBhIHdvcmQgb2YgbiBiaXQgc2l6ZSAqLworc3RhdGljIGludCBnZXRfcGFyaXR5KGludCBudW1iZXIsIGludCBzaXplKQoreworIAlpbnQgazsKKwlpbnQgcGFyaXR5OworCisJcGFyaXR5ID0gMTsKKwlmb3IgKGsgPSAwOyBrIDwgc2l6ZTsgaysrKSB7CisJCXBhcml0eSArPSAobnVtYmVyID4+IGspOworCQlwYXJpdHkgJj0gMTsKKwl9CisJcmV0dXJuIHBhcml0eTsKK30KKworLyogUmVhZCBhbmQgdmFsaWRhdGUgdGhlIGxvZ2ljYWwgYmxvY2sgYWRkcmVzcyBmaWVsZCBzdG9yZWQgaW4gdGhlIE9PQiAqLworc3RhdGljIGludCBnZXRfbG9naWNhbF9hZGRyZXNzKHVpbnQ4X3QgKm9vYl9idWYpCit7CisJaW50IGJsb2NrX2FkZHJlc3MsIHBhcml0eTsKKwlpbnQgb2Zmc2V0WzJdID0gezYsIDExfTsgLyogb2Zmc2V0IG9mIHRoZSAyIGFkZHJlc3MgZmllbGRzIHdpdGhpbiBPT0IgKi8KKwlpbnQgajsKKwlpbnQgb2sgPSAwOworCisJLyoKKwkgKiBMb29rIGZvciB0aGUgZmlyc3QgdmFsaWQgbG9naWNhbCBhZGRyZXNzCisJICogVmFsaWQgYWRkcmVzcyBoYXMgZml4ZWQgcGF0dGVybiBvbiBtb3N0IHNpZ25pZmljYW50IGJpdHMgYW5kCisJICogcGFyaXR5IGNoZWNrCisJICovCisJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUob2Zmc2V0KTsgaisrKSB7CisJCWJsb2NrX2FkZHJlc3MgPSAoKGludClvb2JfYnVmW29mZnNldFtqXV0gPDwgOCkgfAorCQkJb29iX2J1ZltvZmZzZXRbal0rMV07CisKKwkJLyogQ2hlY2sgZm9yIHRoZSBzaWduYXR1cmUgYml0cyBpbiB0aGUgYWRkcmVzcyBmaWVsZCAoTVNCaXRzKSAqLworCQlpZiAoKGJsb2NrX2FkZHJlc3MgJiB+MHg3RkYpID09IDB4MTAwMCkgeworCQkJcGFyaXR5ID0gYmxvY2tfYWRkcmVzcyAmIDB4MDE7CisJCQlibG9ja19hZGRyZXNzICY9IDB4N0ZGOworCQkJYmxvY2tfYWRkcmVzcyA+Pj0gMTsKKworCQkJaWYgKGdldF9wYXJpdHkoYmxvY2tfYWRkcmVzcywgMTApICE9IHBhcml0eSkgeworCQkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsCisJCQkJCSJTU0ZEQ19STzogbG9naWNhbCBhZGRyZXNzIGZpZWxkJWQiCisJCQkJCSJwYXJpdHkgZXJyb3IoMHglMDRYKVxuIiwgaisxLAorCQkJCQlibG9ja19hZGRyZXNzKTsKKwkJCX0gZWxzZSB7CisJCQkJb2sgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJaWYgKCAhb2sgKQorCQlibG9ja19hZGRyZXNzID0gLTI7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLCAiU1NGRENfUk86IGdldF9sb2dpY2FsX2FkZHJlc3MoKSAlZFxuIiwKKwkJYmxvY2tfYWRkcmVzcyk7CisKKwlyZXR1cm4gYmxvY2tfYWRkcmVzczsKK30KKworLyogQnVpbGQgdGhlIGxvZ2ljIGJsb2NrIG1hcCAqLworc3RhdGljIGludCBidWlsZF9sb2dpY2FsX2Jsb2NrX21hcChzdHJ1Y3Qgc3NmZGNyX3JlY29yZCAqc3NmZGMpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJdWludDhfdCBvb2JfYnVmW09PQl9TSVpFXTsKKwlpbnQgcmV0LCBibG9ja19hZGRyZXNzLCBwaHlzX2Jsb2NrOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3NmZGMtPm1iZC5tdGQ7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwxLCAiU1NGRENfUk86IGJ1aWxkX2Jsb2NrX21hcCgpIG5ibGtzPSVkICglbHVLKVxuIiwKKwkJc3NmZGMtPm1hcF9sZW4sICh1bnNpZ25lZCBsb25nKXNzZmRjLT5tYXBfbGVuICoKKwkJc3NmZGMtPmVyYXNlX3NpemUgLyAxMDI0ICk7CisKKwkvKiBTY2FuIGV2ZXJ5IHBoeXNpY2FsIGJsb2NrLCBza2lwIENJUyBibG9jayAqLworCWZvciAocGh5c19ibG9jayA9IHNzZmRjLT5jaXNfYmxvY2sgKyAxOyBwaHlzX2Jsb2NrIDwgc3NmZGMtPm1hcF9sZW47CisJCQlwaHlzX2Jsb2NrKyspIHsKKwkJb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpcGh5c19ibG9jayAqIHNzZmRjLT5lcmFzZV9zaXplOworCQlpZiAobXRkLT5ibG9ja19pc2JhZChtdGQsIG9mZnNldCkpCisJCQljb250aW51ZTsJLyogc2tpcCBiYWQgYmxvY2tzICovCisKKwkJcmV0ID0gcmVhZF9yYXdfb29iKG10ZCwgb2Zmc2V0LCBvb2JfYnVmKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCURFQlVHKE1URF9ERUJVR19MRVZFTDAsCisJCQkJIlNTRkRDX1JPOiBtdGQgcmVhZF9vb2IoKSBmYWlsZWQgYXQgJWx1XG4iLAorCQkJCW9mZnNldCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYmxvY2tfYWRkcmVzcyA9IGdldF9sb2dpY2FsX2FkZHJlc3Mob29iX2J1Zik7CisKKwkJLyogU2tpcCBpbnZhbGlkIGFkZHJlc3NlcyAqLworCQlpZiAoYmxvY2tfYWRkcmVzcyA+PSAwICYmCisJCQkJYmxvY2tfYWRkcmVzcyA8IE1BWF9MT0dJQ19CTEtfUEVSX1pPTkUpIHsKKwkJCWludCB6b25lX2luZGV4OworCisJCQl6b25lX2luZGV4ID0gcGh5c19ibG9jayAvIE1BWF9QSFlTX0JMS19QRVJfWk9ORTsKKwkJCWJsb2NrX2FkZHJlc3MgKz0gem9uZV9pbmRleCAqIE1BWF9MT0dJQ19CTEtfUEVSX1pPTkU7CisJCQlzc2ZkYy0+bG9naWNfYmxvY2tfbWFwW2Jsb2NrX2FkZHJlc3NdID0KKwkJCQkodW5zaWduZWQgc2hvcnQpcGh5c19ibG9jazsKKworCQkJREVCVUcoTVREX0RFQlVHX0xFVkVMMiwKKwkJCQkiU1NGRENfUk86IGJ1aWxkX2Jsb2NrX21hcCgpIHBoeXNfYmxvY2s9JWQsIgorCQkJCSJsb2dpY19ibG9ja19hZGRyPSVkLCB6b25lPSVkXG4iLAorCQkJCXBoeXNfYmxvY2ssIGJsb2NrX2FkZHJlc3MsIHpvbmVfaW5kZXgpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzc2ZkY3JfYWRkX210ZChzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyAqdHIsIHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXN0cnVjdCBzc2ZkY3JfcmVjb3JkICpzc2ZkYzsKKwlpbnQgY2lzX3NlY3RvcjsKKworCS8qIENoZWNrIGZvciBzbWFsbCBwYWdlIE5BTkQgZmxhc2ggKi8KKwlpZiAobXRkLT50eXBlICE9IE1URF9OQU5ERkxBU0ggfHwgbXRkLT5vb2JzaXplICE9IE9PQl9TSVpFKQorCQlyZXR1cm47CisKKwkvKiBDaGVjayBmb3IgU1NERkMgZm9ybWF0IGJ5IHJlYWRpbmcgQ0lTL0lESSBzZWN0b3IgKi8KKwljaXNfc2VjdG9yID0gZ2V0X3ZhbGlkX2Npc19zZWN0b3IobXRkKTsKKwlpZiAoY2lzX3NlY3RvciA9PSAtMSkKKwkJcmV0dXJuOworCisJc3NmZGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3NmZGNyX3JlY29yZCksIEdGUF9LRVJORUwpOworCWlmICghc3NmZGMpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJIlNTRkRDX1JPOiBvdXQgb2YgbWVtb3J5IGZvciBkYXRhIHN0cnVjdHVyZXNcbiIpOworCQlyZXR1cm47CisJfQorCisJc3NmZGMtPm1iZC5tdGQgPSBtdGQ7CisJc3NmZGMtPm1iZC5kZXZudW0gPSAtMTsKKwlzc2ZkYy0+bWJkLmJsa3NpemUgPSBTRUNUT1JfU0laRTsKKwlzc2ZkYy0+bWJkLnRyID0gdHI7CisJc3NmZGMtPm1iZC5yZWFkb25seSA9IDE7CisKKwlzc2ZkYy0+Y2lzX2Jsb2NrID0gY2lzX3NlY3RvciAvIChtdGQtPmVyYXNlc2l6ZSA+PiBTRUNUT1JfU0hJRlQpOworCXNzZmRjLT5lcmFzZV9zaXplID0gbXRkLT5lcmFzZXNpemU7CisJc3NmZGMtPm1hcF9sZW4gPSBtdGQtPnNpemUgLyBtdGQtPmVyYXNlc2l6ZTsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDEsCisJCSJTU0ZEQ19STzogY2lzX2Jsb2NrPSVkLGVyYXNlX3NpemU9JWQsbWFwX2xlbj0lZCxuX3pvbmVzPSVkXG4iLAorCQlzc2ZkYy0+Y2lzX2Jsb2NrLCBzc2ZkYy0+ZXJhc2Vfc2l6ZSwgc3NmZGMtPm1hcF9sZW4sCisJCShzc2ZkYy0+bWFwX2xlbiArIE1BWF9QSFlTX0JMS19QRVJfWk9ORSAtIDEpIC8KKwkJTUFYX1BIWVNfQkxLX1BFUl9aT05FKTsKKworCS8qIFNldCBnZW9tZXRyeSAqLworCXNzZmRjLT5oZWFkcyA9IDE2OworCXNzZmRjLT5zZWN0b3JzID0gMzI7CisJZ2V0X2NocyggbXRkLT5zaXplLCBOVUxMLCAmc3NmZGMtPmhlYWRzLCAmc3NmZGMtPnNlY3RvcnMpOworCXNzZmRjLT5jeWxpbmRlcnMgPSAodW5zaWduZWQgc2hvcnQpKChtdGQtPnNpemUgPj4gU0VDVE9SX1NISUZUKSAvCisJCQkoKGxvbmcpc3NmZGMtPnNlY3RvcnMgKiAobG9uZylzc2ZkYy0+aGVhZHMpKTsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJTU0ZEQ19STzogdXNpbmcgQzolZCBIOiVkIFM6JWQgPT0gJWxkIHNlY3RzXG4iLAorCQlzc2ZkYy0+Y3lsaW5kZXJzLCBzc2ZkYy0+aGVhZHMgLCBzc2ZkYy0+c2VjdG9ycywKKwkJKGxvbmcpc3NmZGMtPmN5bGluZGVycyAqIChsb25nKXNzZmRjLT5oZWFkcyAqCisJCShsb25nKXNzZmRjLT5zZWN0b3JzICk7CisKKwlzc2ZkYy0+bWJkLnNpemUgPSAobG9uZylzc2ZkYy0+aGVhZHMgKiAobG9uZylzc2ZkYy0+Y3lsaW5kZXJzICoKKwkJCQkobG9uZylzc2ZkYy0+c2VjdG9yczsKKworCS8qIEFsbG9jYXRlIGxvZ2ljYWwgYmxvY2sgbWFwICovCisJc3NmZGMtPmxvZ2ljX2Jsb2NrX21hcCA9IGttYWxsb2MoIHNpemVvZihzc2ZkYy0+bG9naWNfYmxvY2tfbWFwWzBdKSAqCisJCQkJCQlzc2ZkYy0+bWFwX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzc2ZkYy0+bG9naWNfYmxvY2tfbWFwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSJTU0ZEQ19STzogb3V0IG9mIG1lbW9yeSBmb3IgZGF0YSBzdHJ1Y3R1cmVzXG4iKTsKKwkJZ290byBvdXRfZXJyOworCX0KKwltZW1zZXQoc3NmZGMtPmxvZ2ljX2Jsb2NrX21hcCwgMHhmZiwgc2l6ZW9mKHNzZmRjLT5sb2dpY19ibG9ja19tYXBbMF0pICoKKwkJc3NmZGMtPm1hcF9sZW4pOworCisJLyogQnVpbGQgbG9naWNhbCBibG9jayBtYXAgKi8KKwlpZiAoYnVpbGRfbG9naWNhbF9ibG9ja19tYXAoc3NmZGMpIDwgMCkKKwkJZ290byBvdXRfZXJyOworCisJLyogUmVnaXN0ZXIgZGV2aWNlICsgcGFydGl0aW9ucyAqLworCWlmIChhZGRfbXRkX2Jsa3RyYW5zX2Rldigmc3NmZGMtPm1iZCkpCisJCWdvdG8gb3V0X2VycjsKKworCXByaW50ayhLRVJOX0lORk8gIlNTRkRDX1JPOiBGb3VuZCBzc2ZkYyVjIG9uIG10ZCVkICglcylcbiIsCisJCXNzZmRjLT5tYmQuZGV2bnVtICsgJ2EnLCBtdGQtPmluZGV4LCBtdGQtPm5hbWUpOworCXJldHVybjsKKworb3V0X2VycjoKKwlrZnJlZShzc2ZkYy0+bG9naWNfYmxvY2tfbWFwKTsKKyAgICAgICAga2ZyZWUoc3NmZGMpOworfQorCitzdGF0aWMgdm9pZCBzc2ZkY3JfcmVtb3ZlX2RldihzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2KQoreworCXN0cnVjdCBzc2ZkY3JfcmVjb3JkICpzc2ZkYyA9IChzdHJ1Y3Qgc3NmZGNyX3JlY29yZCAqKWRldjsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJTU0ZEQ19STzogcmVtb3ZlX2RldiAoaT0lZClcbiIsIGRldi0+ZGV2bnVtKTsKKworCWRlbF9tdGRfYmxrdHJhbnNfZGV2KGRldik7CisJa2ZyZWUoc3NmZGMtPmxvZ2ljX2Jsb2NrX21hcCk7CisJa2ZyZWUoc3NmZGMpOworfQorCitzdGF0aWMgaW50IHNzZmRjcl9yZWFkc2VjdChzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LAorCQkJCXVuc2lnbmVkIGxvbmcgbG9naWNfc2VjdF9ubywgY2hhciAqYnVmKQoreworCXN0cnVjdCBzc2ZkY3JfcmVjb3JkICpzc2ZkYyA9IChzdHJ1Y3Qgc3NmZGNyX3JlY29yZCAqKWRldjsKKwlpbnQgc2VjdG9yc19wZXJfYmxvY2ssIG9mZnNldCwgYmxvY2tfYWRkcmVzczsKKworCXNlY3RvcnNfcGVyX2Jsb2NrID0gc3NmZGMtPmVyYXNlX3NpemUgPj4gU0VDVE9SX1NISUZUOworCW9mZnNldCA9IChpbnQpKGxvZ2ljX3NlY3Rfbm8gJSBzZWN0b3JzX3Blcl9ibG9jayk7CisJYmxvY2tfYWRkcmVzcyA9IChpbnQpKGxvZ2ljX3NlY3Rfbm8gLyBzZWN0b3JzX3Blcl9ibG9jayk7CisKKwlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCQkiU1NGRENfUk86IHNzZmRjcl9yZWFkc2VjdCglbHUpIHNlY19wZXJfYmxrPSVkLCBvZnN0PSVkLCIKKwkJIiBibG9ja19hZGRyPSVkXG4iLCBsb2dpY19zZWN0X25vLCBzZWN0b3JzX3Blcl9ibG9jaywgb2Zmc2V0LAorCQlibG9ja19hZGRyZXNzKTsKKworCWlmIChibG9ja19hZGRyZXNzID49IHNzZmRjLT5tYXBfbGVuKQorCQlCVUcoKTsKKworCWJsb2NrX2FkZHJlc3MgPSBzc2ZkYy0+bG9naWNfYmxvY2tfbWFwW2Jsb2NrX2FkZHJlc3NdOworCisJREVCVUcoTVREX0RFQlVHX0xFVkVMMywKKwkJIlNTRkRDX1JPOiBzc2ZkY3JfcmVhZHNlY3QoKSBwaHlzX2Jsb2NrX2FkZHI9JWRcbiIsCisJCWJsb2NrX2FkZHJlc3MpOworCisJaWYgKGJsb2NrX2FkZHJlc3MgPCAweGZmZmYpIHsKKwkJdW5zaWduZWQgbG9uZyBzZWN0X25vOworCisJCXNlY3Rfbm8gPSAodW5zaWduZWQgbG9uZylibG9ja19hZGRyZXNzICogc2VjdG9yc19wZXJfYmxvY2sgKworCQkJCW9mZnNldDsKKworCQlERUJVRyhNVERfREVCVUdfTEVWRUwzLAorCQkJIlNTRkRDX1JPOiBzc2ZkY3JfcmVhZHNlY3QoKSBwaHlzX3NlY3Rfbm89JWx1XG4iLAorCQkJc2VjdF9ubyk7CisKKwkJaWYgKHJlYWRfcGh5c2ljYWxfc2VjdG9yKCBzc2ZkYy0+bWJkLm10ZCwgYnVmLCBzZWN0X25vICkgPCAwKQorCQkJcmV0dXJuIC1FSU87CisJfSBlbHNlIHsKKwkJbWVtc2V0KGJ1ZiwgMHhmZiwgU0VDVE9SX1NJWkUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNzZmRjcl9nZXRnZW8oc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwgIHN0cnVjdCBoZF9nZW9tZXRyeSAqZ2VvKQoreworCXN0cnVjdCBzc2ZkY3JfcmVjb3JkICpzc2ZkYyA9IChzdHJ1Y3Qgc3NmZGNyX3JlY29yZCAqKWRldjsKKworCURFQlVHKE1URF9ERUJVR19MRVZFTDEsICJTU0ZEQ19STzogc3NmZGNyX2dldGdlbygpIEM9JWQsIEg9JWQsIFM9JWRcbiIsCisJCQlzc2ZkYy0+Y3lsaW5kZXJzLCBzc2ZkYy0+aGVhZHMsIHNzZmRjLT5zZWN0b3JzKTsKKworCWdlby0+aGVhZHMgPSBzc2ZkYy0+aGVhZHM7CisJZ2VvLT5zZWN0b3JzID0gc3NmZGMtPnNlY3RvcnM7CisJZ2VvLT5jeWxpbmRlcnMgPSBzc2ZkYy0+Y3lsaW5kZXJzOworCisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogTW9kdWxlIHN0dWZmCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wcyBzc2ZkY3JfdHIgPSB7CisJLm5hbWUJCT0gInNzZmRjIiwKKwkubWFqb3IJCT0gU1NGRENSX01BSk9SLAorCS5wYXJ0X2JpdHMJPSBTU0ZEQ1JfUEFSVE5fQklUUywKKwkuZ2V0Z2VvCQk9IHNzZmRjcl9nZXRnZW8sCisJLnJlYWRzZWN0CT0gc3NmZGNyX3JlYWRzZWN0LAorCS5hZGRfbXRkCT0gc3NmZGNyX2FkZF9tdGQsCisJLnJlbW92ZV9kZXYJPSBzc2ZkY3JfcmVtb3ZlX2RldiwKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3NzZmRjcih2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIlNTRkRDIHJlYWQtb25seSBGbGFzaCBUcmFuc2xhdGlvbiBsYXllclxuIik7CisKKwlyZXR1cm4gcmVnaXN0ZXJfbXRkX2Jsa3RyYW5zKCZzc2ZkY3JfdHIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgY2xlYW51cF9zc2ZkY3Iodm9pZCkKK3sKKwlkZXJlZ2lzdGVyX210ZF9ibGt0cmFucygmc3NmZGNyX3RyKTsKK30KKworbW9kdWxlX2luaXQoaW5pdF9zc2ZkY3IpOworbW9kdWxlX2V4aXQoY2xlYW51cF9zc2ZkY3IpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJDbGF1ZGlvIExhbmNvbmVsbGkgPGxhbmNvbmVsbGkuY2xhdWRpb0BlcHRhci5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZsYXNoIFRyYW5zbGF0aW9uIExheWVyIGZvciByZWFkLW9ubHkgU1NGREMgU21hcnRNZWRpYSBjYXJkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMS5jIGIvZHJpdmVycy9uZXQvM2M1MDEuYwppbmRleCAwNzEzNmVjLi4xYjgyYmNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC0zMCwxNyArMzAsMTcgQEAKICAgICB3aXRoIGEgVFgtVFggb3B0aW1pc2F0aW9uIHRvIHNlZSBpZiB3ZSBjYW4gdG91Y2ggMTgwLTIwMEsvc2Vjb25kIGFzIHNlZW1zCiAgICAgdGhlb3JldGljYWxseSBtYXhpbXVtLgogICAgIAkJMTk5NTA0MDIgQWxhbiBDb3ggPEFsYW4uQ294QGxpbnV4Lm9yZz4KLSAgICAJCQotICAgIENsZWFuZWQgdXAgZm9yIDIuMy54IGJlY2F1c2Ugd2UgYnJva2UgU01QIG5vdy4gCisKKyAgICBDbGVhbmVkIHVwIGZvciAyLjMueCBiZWNhdXNlIHdlIGJyb2tlIFNNUCBub3cuCiAgICAgCQkyMDAwMDIwOCBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgogCiAgICAgQ2hlY2sgdXAgcGFzcyBmb3IgMi41LiBOb3RoaW5nIHNpZ25pZmljYW50IGNoYW5nZWQKICAgICAJCTIwMDIxMDA5IEFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CiAKLSAgICBGaXhlZCB6ZXJvIGZpbGwgY29ybmVyIGNhc2UgCisgICAgRml4ZWQgemVybyBmaWxsIGNvcm5lciBjYXNlCiAgICAgCQkyMDAzMDEwNCBBbGFuIENveCA8YWxhbkByZWRoYXQuY29tPgotICAgIAkJCi0gICAgCQkKKworCiAgICBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCB0aGUgInByZWZlcnJlZCBmb3JtIiBvZiB0aGlzIGNvZGUgaXMgb25lIHdoaWNoCiAgICBpcyBpbiBhbiBvcGVuIG5vbiBwYXRlbnQgZW5jdW1iZXJlZCBmb3JtYXQuIFdoZXJlIGNyeXB0b2dyYXBoaWMga2V5IHNpZ25pbmcKICAgIGZvcm1zIHBhcnQgb2YgdGhlIHByb2Nlc3Mgb2YgY3JlYXRpbmcgYW4gZXhlY3V0YWJsZSB0aGUgaW5mb3JtYXRpb24KQEAgLTU4LDcgKzU4LDcgQEAKICAqICBTb21lIGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlIGZyb20gM0NvbS4gRHVlIHRvIHRoZSBib2FyZHMgYWdlCiAgKiAgc3RhbmRhcmQgcmVzcG9uc2VzIHdoZW4geW91IGFzayBmb3IgdGhpcyB3aWxsIHJhbmdlIGZyb20gJ2JlIHNlcmlvdXMnCiAgKiAgdG8gJ2dpdmUgaXQgdG8gYSBtdXNldW0nLiBUaGUgZG9jdW1lbnRhdGlvbiBpcyBpbmNvbXBsZXRlIGFuZCBtb3N0bHkKLSAqICBvZiBoaXN0b3JpY2FsIGludGVyZXN0IGFueXdheS4gCisgKiAgb2YgaGlzdG9yaWNhbCBpbnRlcmVzdCBhbnl3YXkuCiAgKgogICogIFRoZSBiYXNpYyBzeXN0ZW0gaXMgYSBzaW5nbGUgYnVmZmVyIHdoaWNoIGNhbiBiZSB1c2VkIHRvIHJlY2VpdmUgb3IKICAqICB0cmFuc21pdCBhIHBhY2tldC4gQSB0aGlyZCBjb21tYW5kIG1vZGUgZXhpc3RzIHdoZW4geW91IGFyZSBzZXR0aW5nCkBAIC04MCw3ICs4MCw3IEBACiAgKiAgb3V0IHdpdGggdGhvc2UgdG9vKS4KICAqCiAgKiBET0M6IFByb2JsZW1zCi0gKiAgCisgKgogICogIFRoZXJlIGFyZSBhIHdpZGUgdmFyaWV0eSBvZiB1bmRvY3VtZW50ZWQgZXJyb3IgcmV0dXJucyBmcm9tIHRoZSBjYXJkCiAgKiAgYW5kIHlvdSBiYXNpY2FsbHkgaGF2ZSB0byBraWNrIHRoZSBib2FyZCBhbmQgcHJheSBpZiB0aGV5IHR1cm4gdXAuIE1vc3QKICAqICBvbmx5IG9jY3VyIHVuZGVyIGV4dHJlbWUgbG9hZCBvciBpZiB5b3UgZG8gc29tZXRoaW5nIHRoZSBib2FyZCBkb2Vzbid0CkBAIC0xMjAsNyArMTIwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogZm9yIENPTkZJR19JUF9NVUxUSUNBU1QgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgpAQCAtMTQ2LDcgKzE0NSw3IEBACiAKIC8qKgogICogZWwxX3Byb2JlOgkJLQlwcm9iZSBmb3IgYSAzYzUwMQotICogQGRldjogVGhlIGRldmljZSBzdHJ1Y3R1cmUgcGFzc2VkIGluIHRvIHByb2JlLiAKKyAqIEBkZXY6IFRoZSBkZXZpY2Ugc3RydWN0dXJlIHBhc3NlZCBpbiB0byBwcm9iZS4KICAqCiAgKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSB0d28gcGxhY2VzLiBUaGUgbmV0d29yayBsYXllciB3aWxsIHByb2JlIHVzaW5nCiAgKiBhIGRldmljZSBzdHJ1Y3R1cmUgcGFzc2VkIGluIHdpdGggdGhlIHByb2JlIGluZm9ybWF0aW9uIGNvbXBsZXRlZC4gRm9yIGEKQEAgLTE1Niw3ICsxNTUsNyBAQAogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuIEVOWElPIGlmIGFza2VkIG5vdCB0byBwcm9iZSBhbmQgRU5PREVWIGlmIGFza2VkIHRvCiAgKiBwcm9iZSBhbmQgZmFpbGluZyB0byBmaW5kIGFueXRoaW5nLgogICovCi0gCisKIHN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IGVsMV9wcm9iZShpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsKQEAgLTIwMSw3ICsyMDAsNyBAQAogfQogCiAvKioKLSAqCWVsMV9wcm9iZTE6IAorICoJZWwxX3Byb2JlMToKICAqCUBkZXY6IFRoZSBkZXZpY2Ugc3RydWN0dXJlIHRvIHVzZQogICoJQGlvYWRkcjogQW4gSS9PIGFkZHJlc3MgdG8gcHJvYmUgYXQuCiAgKgpAQCAtMzA4LDcgKzMwNyw3IEBACiAJbWVtc2V0KGRldi0+cHJpdiwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKLQkKKwogCS8qCiAJICoJVGhlIEVMMS1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgogCSAqLwpAQCAtMzI5LDcgKzMyOCw3IEBACiAgKglAZGV2OiBkZXZpY2UgdGhhdCBpcyBiZWluZyBvcGVuZWQKICAqCiAgKglXaGVuIGFuIGlmY29uZmlnIGlzIGlzc3VlZCB3aGljaCBjaGFuZ2VzIHRoZSBkZXZpY2UgZmxhZ3MgdG8gaW5jbHVkZQotICoJSUZGX1VQIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLiBJdCBpcyBvbmx5IGNhbGxlZCB3aGVuIHRoZSBjaGFuZ2UgCisgKglJRkZfVVAgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0IGlzIG9ubHkgY2FsbGVkIHdoZW4gdGhlIGNoYW5nZQogICoJb2NjdXJzLCBub3Qgd2hlbiB0aGUgaW50ZXJmYWNlIHJlbWFpbnMgdXAuICNlbDFfY2xvc2Ugd2lsbCBiZSBjYWxsZWQKICAqCXdoZW4gaXQgZ29lcyBkb3duLgogICoKQEAgLTM2OCwxMiArMzY3LDEyIEBACiAgKiB2aW9sZW5jZSBhbmQgcHJheWVyCiAgKgogICovCi0gCisKIHN0YXRpYyB2b2lkIGVsX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotIAorCiAJaWYgKGVsX2RlYnVnKQogCQlwcmludGsgKEtFUk5fREVCVUcgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXQsIHR4c3IgJSMyeCBheHNyPSUwMnggcnhzcj0lMDJ4LlxuIiwKIAkJCWRldi0+bmFtZSwgaW5iKFRYX1NUQVRVUyksIGluYihBWF9TVEFUVVMpLCBpbmIoUlhfU1RBVFVTKSk7CkBAIC0zODYsNyArMzg1LDcgQEAKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLSAKKwogLyoqCiAgKiBlbF9zdGFydF94bWl0OgogICogQHNrYjogVGhlIHBhY2tldCB0aGF0IGlzIHF1ZXVlZCB0byBiZSBzZW50CkBAIC00MjIsNyArNDIxLDcgQEAKIAkgKi8KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCQorCiAJLyoKIAkgKglBdm9pZCB0aW1lci1iYXNlZCByZXRyYW5zbWlzc2lvbiBjb25mbGljdHMuCiAJICovCkBAIC00MzUsMTAgKzQzNCwxMCBAQAogCQlpbnQgcGFkID0gMDsKIAkJaW50IGdwX3N0YXJ0OwogCQl1bnNpZ25lZCBjaGFyICpidWYgPSBza2ItPmRhdGE7Ci0JCQorCiAJCWlmIChsZW4gPCBFVEhfWkxFTikKIAkJCXBhZCA9IEVUSF9aTEVOIC0gbGVuOwotCQkJCisKIAkJZ3Bfc3RhcnQgPSAweDgwMCAtICggbGVuICsgcGFkICk7CiAKIAkJbHAtPnR4X3BrdF9zdGFydCA9IGdwX3N0YXJ0OwpAQCAtNDY0LDcgKzQ2Myw3IEBACiAJCSAqLwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCQorCiAJCW91dHcoMHgwMCwgUlhfQlVGX0NMUik7CQkvKiBTZXQgcnggcGFja2V0IGFyZWEgdG8gMC4gKi8KIAkJb3V0dyhncF9zdGFydCwgR1BfTE9XKTsJCS8qIGFpbSAtIHBhY2tldCB3aWxsIGJlIGxvYWRlZCBpbnRvIGJ1ZmZlciBzdGFydCAqLwogCQlvdXRzYihEQVRBUE9SVCxidWYsbGVuKTsJLyogbG9hZCBidWZmZXIgKHVzdWFsIHRoaW5nIGVhY2ggYnl0ZSBpbmNyZW1lbnRzIHRoZSBwb2ludGVyKSAqLwpAQCAtNDczLDcgKzQ3Miw3IEBACiAJCQkJb3V0YigwLCBEQVRBUE9SVCk7CiAJCX0KIAkJb3V0dyhncF9zdGFydCwgR1BfTE9XKTsJCS8qIHRoZSBib2FyZCByZXVzZXMgdGhlIHNhbWUgcmVnaXN0ZXIgKi8KLQkKKwogCQlpZihscC0+bG9hZGluZyAhPSAyKQogCQl7CiAJCQlvdXRiKEFYX1hNSVQsIEFYX0NNRCk7CQkvKiBmaXJlIC4uLiBUcmlnZ2VyIHhtaXQuICAqLwpAQCAtNDk5LDcgKzQ5OCw3IEBACiAgKiBAZGV2X2lkOiBUaGUgM2M1MDEgdGhhdCBidXJwZWQKICAqIEByZWdzOiBSZWdpc3RlciBkYXRhIChzdXJwbHVzIHRvIG91ciByZXF1aXJlbWVudHMpCiAgKgotICogSGFuZGxlIHRoZSBldGhlciBpbnRlcmZhY2UgaW50ZXJydXB0cy4gVGhlIDNjNTAxIG5lZWRzIGEgbG90IG1vcmUgCisgKiBIYW5kbGUgdGhlIGV0aGVyIGludGVyZmFjZSBpbnRlcnJ1cHRzLiBUaGUgM2M1MDEgbmVlZHMgYSBsb3QgbW9yZQogICogaGFuZCBob2xkaW5nIHRoYW4gbW9zdCBjYXJkcy4gSW4gcGFydGljdWxhciB3ZSBnZXQgYSB0cmFuc21pdCBpbnRlcnJ1cHQKICAqIHdpdGggYSBjb2xsaXNpb24gZXJyb3IgYmVjYXVzZSB0aGUgYm9hcmQgZmlybXdhcmUgaXNudCBjYXBhYmxlIG9mIHJld2luZGluZwogICogaXRzIG93biB0cmFuc21pdCBidWZmZXIgcG9pbnRlcnMuIEl0IGNhbiBob3dldmVyIGNvdW50IHRvIDE2IGZvciB1cy4KQEAgLTUyNyw3ICs1MjYsNyBAQAogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9jaygmbHAtPmxvY2spOwotCQorCiAJLyoKIAkgKglXaGF0IGhhcHBlbmVkID8KIAkgKi8KQEAgLTc5NSw3ICs3OTQsNyBAQAogICogb2YgdGhlIHJlc3Qgd2lsbCBiZSBjbGVhbmVkIHVwIGJ5ICNlbDFfb3Blbi4gQWx3YXlzIHJldHVybnMgMCBpbmRpY2F0aW5nCiAgKiBhIHN1Y2Nlc3MuCiAgKi8KLSAKKwogc3RhdGljIGludCBlbDFfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC04MDQsNyArODAzLDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFNodXR0aW5nIGRvd24gRXRoZXJuZXQgY2FyZCBhdCAlI3guXG4iLCBkZXYtPm5hbWUsIGlvYWRkcik7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAkvKgogCSAqCUZyZWUgYW5kIGRpc2FibGUgdGhlIElSUS4KIAkgKi8KQEAgLTgyNSw3ICs4MjQsNyBAQAogICoKICAqIFJldHVybnMgdGhlIHN0YXRpc3RpY3MgZm9yIHRoZSBjYXJkIGZyb20gdGhlIGNhcmQgcHJpdmF0ZSBkYXRhCiAgKi8KLSAKKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplbDFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtODM2LDcgKzgzNSw3IEBACiAgKiBzZXRfbXVsdGljYXN0X2xpc3Q6CiAgKiBAZGV2OiBUaGUgZGV2aWNlIHRvIGFkanVzdAogICoKLSAqIFNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yIHRvIHVzZSB0aGUgYmVzdC1lZmZvcnQgCisgKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvciB0byB1c2UgdGhlIGJlc3QtZWZmb3J0CiAgKiBmaWx0ZXJpbmcgc3VwcG9ydGVkLiBUaGUgM2M1MDEgc3VwcG9ydHMgb25seSB0aHJlZSBtb2RlcyBvZiBmaWx0ZXJpbmcuCiAgKiBJdCBhbHdheXMgcmVjZWl2ZXMgYnJvYWRjYXN0cyBhbmQgcGFja2V0cyBmb3IgaXRzZWxmLiBZb3UgY2FuIGNob29zZSB0bwogICogb3B0aW9uYWxseSByZWNlaXZlIGFsbCBwYWNrZXRzLCBvciBhbGwgbXVsdGljYXN0IHBhY2tldHMgb24gdG9wIG9mIHRoaXMuCkBAIC04ODIsNyArODgxLDcgQEAKIAlkZWJ1ZyA9IGxldmVsOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X3NldF9tc2dsZXZlbCwKQEAgLTkwOCw3ICs5MDcsNyBAQAogICogUmV0dXJucyAwIGZvciBzdWNjZXNzIG9yIC1FSU8gaWYgYSBjYXJkIGlzIG5vdCBmb3VuZC4gUmV0dXJuaW5nIGFuIGVycm9yCiAgKiBoZXJlIGFsc28gY2F1c2VzIHRoZSBtb2R1bGUgdG8gYmUgdW5sb2FkZWQKICAqLwotIAorCiBpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJZGV2XzNjNTAxID0gZWwxX3Byb2JlKC0xKTsKQEAgLTkxOSwxMSArOTE4LDExIEBACiAKIC8qKgogICogY2xlYW51cF9tb2R1bGU6Ci0gKiAKKyAqCiAgKiBUaGUgbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLiBXZSB1bmhvb2sgb3VyIG5ldHdvcmsgZGV2aWNlIGZyb20gdGhlIHN5c3RlbQogICogYW5kIHRoZW4gZnJlZSB1cCB0aGUgcmVzb3VyY2VzIHdlIHRvb2sgd2hlbiB0aGUgY2FyZCB3YXMgZm91bmQuCiAgKi8KLSAKKwogdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfM2M1MDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUwMS5oIGIvZHJpdmVycy9uZXQvM2M1MDEuaAppbmRleCBhZGIwNTg4Li4zOWQzMzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUwMS5oCisrKyBiL2RyaXZlcnMvbmV0LzNjNTAxLmgKQEAgLTEzLDcgKzEzLDcgQEAKIHN0YXRpYyBpbnQgIGVsMV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZWwxX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKICNkZWZpbmUgRUwxX0lPX0VYVEVOVAkxNgogCkBAIC0zNyw3ICszNyw3IEBACiAJc3BpbmxvY2tfdAlsb2NrOwkJLyogU2VyaWFsaXppbmcgbG9jayAqLwogfTsKIAotDAorCiAjZGVmaW5lIFJYX1NUQVRVUyAoaW9hZGRyICsgMHgwNikKICNkZWZpbmUgUlhfQ01ECSAgUlhfU1RBVFVTCiAjZGVmaW5lIFRYX1NUQVRVUyAoaW9hZGRyICsgMHgwNykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTAzLmMgYi9kcml2ZXJzL25ldC8zYzUwMy5jCmluZGV4IGNiNWVmNzUuLmEzNGIyMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTAzLmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDMuYwpAQCAtNzksOSArNzksOSBAQAogCQkJICAgaW50IHJpbmdfb2Zmc2V0KTsKIHN0YXRpYyB2b2lkIGVsMl9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwKIAkJCSBpbnQgcmluZ19wYWdlKTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKLQwKKwogLyogVGhpcyByb3V0aW5lIHByb2JlcyBmb3IgYSBtZW1vcnktbWFwcGVkIDNjNTAzIGJvYXJkIGJ5IGxvb2tpbmcgZm9yCiAgICB0aGUgImxvY2F0aW9uIHJlZ2lzdGVyIiBhdCB0aGUgZW5kIG9mIHRoZSBqdW1wZXJlZCBib290IFBST00gc3BhY2UuCiAgICBUaGlzIHdvcmtzIGV2ZW4gaWYgYSBQUk9NIGlzbid0IHRoZXJlLgpAQCAtOTYsNyArOTYsNyBAQAogICAgIGludCBpcnEgPSBkZXYtPmlycTsKIAogICAgIFNFVF9NT0RVTEVfT1dORVIoZGV2KTsKLSAgICAKKwogICAgIGlmIChiYXNlX2FkZHIgPiAweDFmZikJLyogQ2hlY2sgYSBzaW5nbGUgc3BlY2lmaWVkIGxvY2F0aW9uLiAqLwogCXJldHVybiBlbDJfcHJvYmUxKGRldiwgYmFzZV9hZGRyKTsKICAgICBlbHNlIGlmIChiYXNlX2FkZHIgIT0gMCkJCS8qIERvbid0IHByb2JlIGF0IGFsbC4gKi8KQEAgLTEyNyw3ICsxMjcsNyBAQAogCiAvKiAgVHJ5IGFsbCBvZiB0aGUgbG9jYXRpb25zIHRoYXQgYXJlbid0IG9idmlvdXNseSBlbXB0eS4gIFRoaXMgdG91Y2hlcwogICAgIGEgbG90IG9mIGxvY2F0aW9ucywgYW5kIGlzIG11Y2ggcmlza2llciB0aGFuIHRoZSBjb2RlIGFib3ZlLiAqLwotc3RhdGljIGludCBfX2luaXQgCitzdGF0aWMgaW50IF9faW5pdAogZWwyX3Bpb19wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgIGludCBpOwpAQCAtMTczLDcgKzE3Myw3IEBACiAvKiBQcm9iZSBmb3IgdGhlIEV0aGVybGluayBJSSBjYXJkIGF0IEkvTyBwb3J0IGJhc2UgSU9BRERSLAogICAgcmV0dXJuaW5nIG5vbi16ZXJvIG9uIHN1Y2Nlc3MuICBJZiBmb3VuZCwgc2V0IHRoZSBzdGF0aW9uCiAgICBhZGRyZXNzIGFuZCBtZW1vcnkgcGFyYW1ldGVycyBpbiBERVZJQ0UuICovCi1zdGF0aWMgaW50IF9faW5pdCAKK3N0YXRpYyBpbnQgX19pbml0CiBlbDJfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpCiB7CiAgICAgaW50IGksIGlvYmFzZV9yZWcsIG1lbWJhc2VfcmVnLCBzYXZlZF80MDYsIHdvcmRsZW5ndGgsIHJldHZhbDsKQEAgLTM2Nyw3ICszNjcsNyBAQAogICAgIHJlbGVhc2VfcmVnaW9uKGlvYWRkciwgRUwyX0lPX0VYVEVOVCk7CiAgICAgcmV0dXJuIHJldHZhbDsKIH0KLQwKKwogc3RhdGljIGludAogZWwyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTM4NSw3ICszODUsNyBAQAogCQlvdXRiX3AoMHgwNCA8PCAoKCppcnFwID09IDkpID8gMiA6ICppcnFwKSwgRTMzR19JRENGUik7CiAJCW91dGJfcCgweDAwLCBFMzNHX0lEQ0ZSKTsKIAkJaWYgKCppcnFwID09IHByb2JlX2lycV9vZmYoY29va2llKQkvKiBJdCdzIGEgZ29vZCBJUlEgbGluZSEgKi8KLQkJICAgICYmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEgPSAqaXJxcCwgCisJCSAgICAmJiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxID0gKmlycXAsCiAJCSAgICBlaV9pbnRlcnJ1cHQsIDAsIGRldi0+bmFtZSwgZGV2KSkgPT0gMCkpCiAJCSAgICBicmVhazsKIAkgICAgfQpAQCAtNjY2LDcgKzY2Niw3IEBACiAJc3ByaW50ZihpbmZvLT5idXNfaW5mbywgIklTQSAweCVseCIsIGRldi0+YmFzZV9hZGRyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDMuaCBiL2RyaXZlcnMvbmV0LzNjNTAzLmgKaW5kZXggYjlmOGE0Ni4uZTIzNjdiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDMuaAorKysgYi9kcml2ZXJzL25ldC8zYzUwMy5oCkBAIC0xNCw3ICsxNCw3IEBACiAKIC8qIFNoYXJlZCBtZW1vcnkgbWFuYWdlbWVudCBwYXJhbWV0ZXJzLiBOQjogVGhlIDggYml0IGNhcmRzIGhhdmUgb25seQogICAgb25lIGJhbmsgKE1CMSkgd2hpY2ggc2VydmVzIGJvdGggVHggYW5kIFJ4IHBhY2tldCBzcGFjZS4gVGhlIDE2Yml0Ci0gICBjYXJkcyBoYXZlIDIgYmFua3MsIE1CMCBmb3IgVHggcGFja2V0cywgYW5kIE1CMSBmb3IgUnggcGFja2V0cy4gCisgICBjYXJkcyBoYXZlIDIgYmFua3MsIE1CMCBmb3IgVHggcGFja2V0cywgYW5kIE1CMSBmb3IgUnggcGFja2V0cy4KICAgIFlvdSBjaG9vc2Ugd2hpY2ggYmFuayBhcHBlYXJzIGluIHRoZSBzaC4gbWVtIHdpbmRvdyB3aXRoIEVHQUNGUl9NQlNuICovCiAKICNkZWZpbmUgRUwyX01CMF9TVEFSVF9QRwkoMHgwMCkJLyogRUwyLzE2IFR4IHBhY2tldHMgZ28gaW4gYmFuayAwICovCkBAIC04Miw3ICs4Miw3IEBACiAJMAkxCTAJMHg0MDAwIC0tIGJhbmsgMiwgbm90IHVzZWQKIAkwCTEJMQkweDYwMDAgLS0gYmFuayAzLCBub3QgdXNlZAogCi1UaGVyZSB3YXMgZ29pbmcgdG8gYmUgYSAzMmsgY2FyZCB0aGF0IHVzZWQgYmFuayAyIGFuZCAzLCBidXQgaXQgCitUaGVyZSB3YXMgZ29pbmcgdG8gYmUgYSAzMmsgY2FyZCB0aGF0IHVzZWQgYmFuayAyIGFuZCAzLCBidXQgaXQKIG5ldmVyIGdvdCBwcm9kdWNlZC4KIAogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmMgYi9kcml2ZXJzL25ldC8zYzUwNS5jCmluZGV4IDE5YzBiODUuLmFiODIzMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuYwpAQCAtMzE1LDExICszMTUsMTEgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKIAkJYWRhcHRlci0+ZG1haW5nID0gMDsKIAkJYWRhcHRlci0+YnVzeSA9IDA7Ci0JCQorCiAJCWY9Y2xhaW1fZG1hX2xvY2soKTsKIAkJZGlzYWJsZV9kbWEoZGV2LT5kbWEpOwogCQlyZWxlYXNlX2RtYV9sb2NrKGYpOwotCQkKKwogCQlpZiAoYWRhcHRlci0+cnhfYWN0aXZlKQogCQkJYWRhcHRlci0+cnhfYWN0aXZlLS07CiAJCW91dGJfY29udHJvbChhZGFwdGVyLT5oY3JfdmFsICYgfihETUFFIHwgVENFTiB8IERJUiksIGRldik7CkBAIC02NjAsNyArNjYwLDcgQEAKIAogCWRldiA9IGRldl9pZDsKIAlhZGFwdGVyID0gKGVscF9kZXZpY2UgKikgZGV2LT5wcml2OwotCQorCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5sb2NrKTsKIAogCWRvIHsKQEAgLTcxMiw3ICs3MTIsNyBAQAogCQl0aW1lb3V0ID0gamlmZmllcyArIDMqSFovMTAwOwogCQl3aGlsZSAoKGluYl9zdGF0dXMoZGV2LT5iYXNlX2FkZHIpICYgQUNSRikgIT0gMCAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSkgewogCQkJaWYgKHJlY2VpdmVfcGNiKGRldiwgJmFkYXB0ZXItPmlyeF9wY2IpKSB7Ci0JCQkJc3dpdGNoIChhZGFwdGVyLT5pcnhfcGNiLmNvbW1hbmQpIAorCQkJCXN3aXRjaCAoYWRhcHRlci0+aXJ4X3BjYi5jb21tYW5kKQogCQkJCXsKIAkJCQljYXNlIDA6CiAJCQkJCWJyZWFrOwpAQCAtODg5LDcgKzg4OSw3IEBACiAJYWRhcHRlci0+c2VuZF9wY2Jfc2VtYXBob3JlID0gMDsKIAlhZGFwdGVyLT5yeF9iYWNrbG9nLmluID0gMDsKIAlhZGFwdGVyLT5yeF9iYWNrbG9nLm91dCA9IDA7Ci0JCisKIAlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+bG9jayk7CiAKIAkvKgpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAl9CiAKIAlhZGFwdGVyLT5zdGF0cy50eF9ieXRlcyArPSBubGVuOwotCQorCiAJLyoKIAkgKiBzZW5kIHRoZSBhZGFwdGVyIGEgdHJhbnNtaXQgcGFja2V0IGNvbW1hbmQuIElnbm9yZSBzZWdtZW50IGFuZCBvZmZzZXQKIAkgKiBhbmQgbWFrZSBzdXJlIHRoZSBsZW5ndGggaXMgZXZlbgpAQCAtMTA0NCw3ICsxMDQ0LDcgQEAKIAlvdXRiX2NvbnRyb2woYWRhcHRlci0+aGNyX3ZhbCB8IERNQUUgfCBUQ0VOLCBkZXYpOwogCWVuYWJsZV9kbWEoZGV2LT5kbWEpOwogCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOwotCQorCiAJaWYgKGVscF9kZWJ1ZyA+PSAzKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERNQSB0cmFuc2ZlciBzdGFydGVkXG4iLCBkZXYtPm5hbWUpOwogCkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogLyoKICAqCVRoZSB1cHBlciBsYXllciB0aGlua3Mgd2UgdGltZWQgb3V0CiAgKi8KLSAKKwogc3RhdGljIHZvaWQgZWxwX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAllbHBfZGV2aWNlICphZGFwdGVyID0gZGV2LT5wcml2OwpAQCAtMTA4MCw3ICsxMDgwLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWVscF9kZXZpY2UgKmFkYXB0ZXIgPSBkZXYtPnByaXY7Ci0JCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+bG9jaywgZmxhZ3MpOwogCWNoZWNrXzNjNTA1X2RtYShkZXYpOwogCkBAIC0xMDg4LDcgKzEwODgsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlcXVlc3QgdG8gc2VuZCBwYWNrZXQgb2YgbGVuZ3RoICVkXG4iLCBkZXYtPm5hbWUsIChpbnQpIHNrYi0+bGVuKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCS8qCiAJICogc2VuZCB0aGUgcGFja2V0IGF0IHNrYi0+ZGF0YSBmb3Igc2tiLT5sZW4KIAkgKi8KQEAgLTExNjksNyArMTE2OSw3IEBACiAJZGVidWcgPSBsZXZlbDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IG5ldGRldl9zZXRfbXNnbGV2ZWwsCkBAIC0xMjM1LDcgKzEyMzUsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlcXVlc3QgdG8gc2V0IG11bHRpY2FzdCBsaXN0XG4iLCBkZXYtPm5hbWUpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmxvY2ssIGZsYWdzKTsKLQkKKwogCWlmICghKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSkgewogCQkvKiBzZW5kIGEgImxvYWQgbXVsdGljYXN0IGxpc3QiIGNvbW1hbmQgdG8gdGhlIGJvYXJkLCBtYXggMTAgYWRkcnMvY21kICovCiAJCS8qIGlmIG51bV9hZGRycz09MCB0aGUgbGlzdCB3aWxsIGJlIGNsZWFyZWQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmggYi9kcml2ZXJzL25ldC8zYzUwNS5oCmluZGV4IDc3ZGZlZWQuLjE5MTBjYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmgKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuaApAQCAtNzIsNyArNzIsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogIHRpbWVvdXQgdmFsdWUKLSAqCXRoaXMgaXMgYSByb3VnaCB2YWx1ZSB1c2VkIGZvciBsb29wcyB0byBzdG9wIHRoZW0gZnJvbSAKKyAqCXRoaXMgaXMgYSByb3VnaCB2YWx1ZSB1c2VkIGZvciBsb29wcyB0byBzdG9wIHRoZW0gZnJvbQogICoJbG9ja2luZyB1cCB0aGUgd2hvbGUgbWFjaGluZSBpbiB0aGUgY2FzZSBvZiBmYWlsdXJlIG9yCiAgKgllcnJvciBjb25kaXRpb25zCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDcuYyBiL2RyaXZlcnMvbmV0LzNjNTA3LmMKaW5kZXggNjAzOTA0OS4uODIwNWE1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDcuYworKysgYi9kcml2ZXJzL25ldC8zYzUwNy5jCkBAIC0yOTQsMTQgKzI5NCwxNCBAQAogCiBzdGF0aWMgdm9pZCBoYXJkd2FyZV9zZW5kX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpidWYsIHNob3J0IGxlbmd0aCwgc2hvcnQgcGFkKTsKIHN0YXRpYyB2b2lkIGluaXRfODI1ODZfbWVtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIGluaXRfcnhfYnVmcyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAogc3RhdGljIGludCBpbyA9IDB4MzAwOwogc3RhdGljIGludCBpcnE7CiBzdGF0aWMgaW50IG1lbV9zdGFydDsKIAotDAorCiAvKiBDaGVjayBmb3IgYSBuZXR3b3JrIGFkYXB0b3Igb2YgdGhpcyB0eXBlLCBhbmQgcmV0dXJuICcwJyBpZmYgb25lIGV4aXN0cy4KIAlJZiBkZXYtPmJhc2VfYWRkciA9PSAwLCBwcm9iZSBhbGwgbGlrZWx5IGxvY2F0aW9ucy4KIAlJZiBkZXYtPmJhc2VfYWRkciA9PSAxLCBhbHdheXMgcmV0dXJuIGZhaWx1cmUuCkBAIC0zNzksNyArMzc5LDcgQEAKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYWRkciwgRUwxNl9JT19FWFRFTlQsIERSVl9OQU1FKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAoKGluYihpb2FkZHIpICE9ICcqJykgfHwgKGluYihpb2FkZHIgKyAxKSAhPSAnMycpIHx8IAorCWlmICgoaW5iKGlvYWRkcikgIT0gJyonKSB8fCAoaW5iKGlvYWRkciArIDEpICE9ICczJykgfHwKIAkgICAgKGluYihpb2FkZHIgKyAyKSAhPSAnQycpIHx8IChpbmIoaW9hZGRyICsgMykgIT0gJ08nKSkgewogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKQEAgLTU3NSw3ICs1NzUsNyBAQAogCXdoaWxlIChscC0+dHhfcGt0c19pbl9yaW5nKSB7CiAJICB1bnNpZ25lZCBzaG9ydCB0eF9zdGF0dXMgPSByZWFkdyhzaG1lbStscC0+dHhfcmVhcCk7CiAJICBpZiAoISh0eF9zdGF0dXMgJiAweDgwMDApKSB7Ci0JCWlmIChuZXRfZGVidWcgPiA1KSAKKwkJaWYgKG5ldF9kZWJ1ZyA+IDUpCiAJCQlwcmludGsoIlR4IGNvbW1hbmQgaW5jb21wbGV0ZSAoJSN4KS5cbiIsIGxwLT50eF9yZWFwKTsKIAkJYnJlYWs7CiAJICB9CkBAIC04MjUsNyArODI1LDcgQEAKIAl9CiAKIAkvKiBHcmltbHkgYmxvY2sgZnVydGhlciBwYWNrZXRzIGlmIHRoZXJlIGhhcyBiZWVuIGluc3VmZmljaWVudCByZWFwaW5nLiAqLwotCWlmICgrK2xwLT50eF9wa3RzX2luX3JpbmcgPCBOVU1fVFhfQlVGUykgCisJaWYgKCsrbHAtPnR4X3BrdHNfaW5fcmluZyA8IE5VTV9UWF9CVUZTKQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKQEAgLTkxOSw3ICs5MTksNyBAQAogCWRlYnVnID0gbGV2ZWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIAkuZ2V0X21zZ2xldmVsCQk9IG5ldGRldl9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSBuZXRkZXZfc2V0X21zZ2xldmVsLApAQCAtOTUzLDcgKzk1Myw3IEBACiAjZW5kaWYgLyogTU9EVUxFICovCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQwKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqICBjb21waWxlLWNvbW1hbmQ6ICJnY2MgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvbmV0L2luZXQgLUkvdXNyL3NyYy9saW51eC9kcml2ZXJzL25ldCAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtbTQ4NiAtYyAzYzUwNy5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggY2JkYWU1NC4uNTljMzM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0yOCw3ICsyOCw3IEBACiAJRklYRVM6CiAJCUFsYW4gQ294OiAgICAgICBSZW1vdmVkIHRoZSAnVW5leHBlY3RlZCBpbnRlcnJ1cHQnIGJ1Zy4KIAkJTWljaGFlbCBNZXNrZXM6CVVwZ3JhZGVkIHRvIERvbmFsZCBCZWNrZXIncyB2ZXJzaW9uIDEuMDcuCi0JCUFsYW4gQ294OglJbmNyZWFzZWQgdGhlIGVlcHJvbSBkZWxheS4gUmVnYXJkbGVzcyBvZiAKKwkJQWxhbiBDb3g6CUluY3JlYXNlZCB0aGUgZWVwcm9tIGRlbGF5LiBSZWdhcmRsZXNzIG9mCiAJCQkJd2hhdCB0aGUgZG9jcyBzYXkgc29tZSBwZW9wbGUgZGVmaW5pdGVseQogCQkJCWdldCBwcm9ibGVtcyB3aXRoIGxvd2VyIChidXQgaW4gY2FyZCBzcGVjKQogCQkJCWRlbGF5cwpAQCAtMTYyLDcgKzE2Miw3IEBACiAjZGVmaW5lIFdONF9NRURJQQkweDBBCQkvKiBXaW5kb3cgNDogVmFyaW91cyB0cmFuc2N2ci9tZWRpYSBiaXRzLiAqLwogI2RlZmluZQlNRURJQV9UUAkweDAwQzAJCS8qIEVuYWJsZSBsaW5rIGJlYXQgYW5kIGphYmJlciBmb3IgMTBiYXNlVC4gKi8KICNkZWZpbmUgV040X05FVERJQUcJMHgwNgkJLyogV2luZG93IDQ6IE5ldCBkaWFnbm9zdGljICovCi0jZGVmaW5lIEZEX0VOQUJMRQkweDgwMDAJCS8qIEVuYWJsZSBmdWxsLWR1cGxleCAoImV4dGVybmFsIGxvb3BiYWNrIikgKi8gIAorI2RlZmluZSBGRF9FTkFCTEUJMHg4MDAwCQkvKiBFbmFibGUgZnVsbC1kdXBsZXggKCJleHRlcm5hbCBsb29wYmFjayIpICovCiAKIC8qCiAgKiBNdXN0IGJlIGEgcG93ZXIgb2YgdHdvICh3ZSB1c2UgYSBiaW5hcnkgYW5kIGluIHRoZQpAQCAtMjAwLDcgKzIwMCw3IEBACiBzdGF0aWMgdm9pZCBlbDNfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGVsM191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogI2lmZGVmIEVMM19TVVNQRU5ECiBzdGF0aWMgaW50IGVsM19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKiwgcG1fbWVzc2FnZV90KTsKIHN0YXRpYyBpbnQgZWwzX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICopOwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJewogCQljb25zdCBjaGFyICppZl9uYW1lc1tdID0geyIxMGJhc2VUIiwgIkFVSSIsICJ1bmRlZmluZWQiLCAiQk5DIn07CiAJCXByaW50aygiJXM6IDNjNXg5IGZvdW5kIGF0ICUjMy4zbHgsICVzIHBvcnQsIGFkZHJlc3MgIiwKLQkJCWRldi0+bmFtZSwgZGV2LT5iYXNlX2FkZHIsIAorCQkJZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkciwKIAkJCWlmX25hbWVzWyhkZXYtPmlmX3BvcnQgJiAweDAzKV0pOwogCX0KIApAQCAtNTI4LDcgKzUyOCw3IEBACiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCiAJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKLQkKKwogCS8qIFNldCBwYXNzZWQtaW4gSVJRIG9yIEkvTyBBZGRyLiAqLwogCWlmIChkZXYtPmlycSA+IDEgICYmICBkZXYtPmlycSA8IDE2KQogCQkJaXJxID0gZGV2LT5pcnE7CkBAIC02MzAsNyArNjMwLDcgQEAKIAlpZl9wb3J0ID0gcG9zNCAmIDB4MDM7CiAKIAlpcnEgPSBtY2FfZGV2aWNlX3RyYW5zZm9ybV9pcnEobWRldiwgaXJxKTsKLQlpb2FkZHIgPSBtY2FfZGV2aWNlX3RyYW5zZm9ybV9pb3BvcnQobWRldiwgaW9hZGRyKTsgCisJaW9hZGRyID0gbWNhX2RldmljZV90cmFuc2Zvcm1faW9wb3J0KG1kZXYsIGlvYWRkcik7CiAJaWYgKGVsM19kZWJ1ZyA+IDIpIHsKIAkJCXByaW50aygiM2M1Mjk6IGlycSAlZCAgaW9hZGRyIDB4JXggIGlmcG9ydCAlZFxuIiwgaXJxLCBpb2FkZHIsIGlmX3BvcnQpOwogCX0KQEAgLTY2Nyw3ICs2NjcsNyBAQAogCWVsM19jYXJkcysrOwogCXJldHVybiAwOwogfQotCQkKKwogI2VuZGlmIC8qIENPTkZJR19NQ0EgKi8KIAogI2lmZGVmIENPTkZJR19FSVNBCkBAIC02ODQsNyArNjg0LDcgQEAKIAkvKiBZZWVwZWUsIFRoZSBkcml2ZXIgZnJhbWV3b3JrIGlzIGNhbGxpbmcgdXMgISAqLwogCWVkZXYgPSB0b19laXNhX2RldmljZSAoZGV2aWNlKTsKIAlpb2FkZHIgPSBlZGV2LT5iYXNlX2FkZHI7Ci0JCisKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYWRkciwgRUwzX0lPX0VYVEVOVCwgIjNjNTA5IikpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTc1MSw3ICs3NTEsNyBAQAogc3RhdGljIHVzaG9ydCByZWFkX2VlcHJvbShpbnQgaW9hZGRyLCBpbnQgaW5kZXgpCiB7CiAJb3V0dyhFRVBST01fUkVBRCArIGluZGV4LCBpb2FkZHIgKyAxMCk7Ci0JLyogUGF1c2UgZm9yIGF0IGxlYXN0IDE2MiB1cy4gZm9yIHRoZSByZWFkIHRvIHRha2UgcGxhY2UuIAorCS8qIFBhdXNlIGZvciBhdCBsZWFzdCAxNjIgdXMuIGZvciB0aGUgcmVhZCB0byB0YWtlIHBsYWNlLgogCSAgIFNvbWUgY2hpcHMgc2VlbSB0byByZXF1aXJlIG11Y2ggbG9uZ2VyICovCiAJbWRlbGF5KDIpOwogCXJldHVybiBpbncoaW9hZGRyICsgMTIpOwpAQCAtNzY5LDcgKzc2OSw3IEBACiAJLyogUGF1c2UgZm9yIGF0IGxlYXN0IDE2MiB1cy4gZm9yIHRoZSByZWFkIHRvIHRha2UgcGxhY2UuICovCiAJLyogU29tZSBjaGlwcyBzZWVtIHRvIHJlcXVpcmUgbXVjaCBsb25nZXIgKi8KIAltZGVsYXkoNCk7Ci0JCisKIAlmb3IgKGJpdCA9IDE1OyBiaXQgPj0gMDsgYml0LS0pCiAJCXdvcmQgPSAod29yZCA8PCAxKSArIChpbmIoaWRfcG9ydCkgJiAweDAxKTsKIApAQCAtODM4LDcgKzgzOCw3IEBACiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAogCWxwLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkKKwogCWlmIChlbDNfZGVidWcgPiA0KSB7CiAJCXByaW50aygiJXM6IGVsM19zdGFydF94bWl0KGxlbmd0aCA9ICV1KSBjYWxsZWQsIHN0YXR1cyAlNC40eC5cbiIsCiAJCQkgICBkZXYtPm5hbWUsIHNrYi0+bGVuLCBpbncoaW9hZGRyICsgRUwzX1NUQVRVUykpOwpAQCAtODc5LDExICs4NzksNyBAQAogCW91dHcoc2tiLT5sZW4sIGlvYWRkciArIFRYX0ZJRk8pOwogCW91dHcoMHgwMCwgaW9hZGRyICsgVFhfRklGTyk7CiAJLyogLi4uIGFuZCB0aGUgcGFja2V0IHJvdW5kZWQgdG8gYSBkb3VibGV3b3JkLiAqLwotI2lmZGVmICBfX3Bvd2VycGNfXwotCW91dHNsX25zKGlvYWRkciArIFRYX0ZJRk8sIHNrYi0+ZGF0YSwgKHNrYi0+bGVuICsgMykgPj4gMik7Ci0jZWxzZQogCW91dHNsKGlvYWRkciArIFRYX0ZJRk8sIHNrYi0+ZGF0YSwgKHNrYi0+bGVuICsgMykgPj4gMik7Ci0jZW5kaWYKIAogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWlmIChpbncoaW9hZGRyICsgVFhfRlJFRSkgPiAxNTM2KQpAQCAtMTAyNCw3ICsxMDIwLDcgQEAKIAkgKglUaGlzIGlzIGZhc3QgZW5vdWdoIG5vdCB0byBib3RoZXIgd2l0aCBkaXNhYmxlIElSUQogCSAqCXN0dWZmLgogCSAqLwotCSAKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCXVwZGF0ZV9zdGF0cyhkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CkBAIC0xMTAzLDEzICsxMDk5LDggQEAKIAkJCQlza2JfcmVzZXJ2ZShza2IsIDIpOyAgICAgLyogQWxpZ24gSVAgb24gMTYgYnl0ZSAqLwogCiAJCQkJLyogJ3NrYi0+ZGF0YScgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiBza19idWZmIGRhdGEgYXJlYS4gKi8KLSNpZmRlZiAgX19wb3dlcnBjX18KLQkJCQlpbnNsX25zKGlvYWRkcitSWF9GSUZPLCBza2JfcHV0KHNrYixwa3RfbGVuKSwKLQkJCQkJCQkgICAocGt0X2xlbiArIDMpID4+IDIpOwotI2Vsc2UKIAkJCQlpbnNsKGlvYWRkciArIFJYX0ZJRk8sIHNrYl9wdXQoc2tiLHBrdF9sZW4pLAogCQkJCQkgKHBrdF9sZW4gKyAzKSA+PiAyKTsKLSNlbmRpZgogCiAJCQkJb3V0dyhSeERpc2NhcmQsIGlvYWRkciArIEVMM19DTUQpOyAvKiBQb3AgdG9wIFJ4IHBhY2tldC4gKi8KIAkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7CkBAIC0xMTY4LDcgKzExNTksNyBAQAogewogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCWlmIChlbDNfZGVidWcgPiAyKQogCQlwcmludGsoIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAKQEAgLTExODcsNyArMTE3OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgCitzdGF0aWMgaW50CiBlbDNfbGlua19vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTEyMDQsOSArMTE5NSw5IEBACiB7CiAJdTE2IHRtcDsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JCisKIAlFTDNXSU5ET1coMCk7Ci0JLyogb2J0YWluIGN1cnJlbnQgdHJhbnNjZWl2ZXIgdmlhIFdONF9NRURJQT8gKi8JCisJLyogb2J0YWluIGN1cnJlbnQgdHJhbnNjZWl2ZXIgdmlhIFdONF9NRURJQT8gKi8KIAl0bXAgPSBpbncoaW9hZGRyICsgV04wX0FERFJfQ09ORik7CiAJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCXN3aXRjaCAodG1wID4+IDE0KSB7CkBAIC0xMzQ5LDcgKzEzNDAsNyBAQAogCWVsM19kZWJ1ZyA9IHY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGVsM19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gZWwzX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gZWwzX3NldF9zZXR0aW5ncywKQEAgLTEzOTEsNyArMTM4Miw3IEBACiB7CiAJaW50IGksIHN3X2luZm8sIG5ldF9kaWFnOwogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQkKKwogCS8qIEFjdGl2YXRpbmcgdGhlIGJvYXJkIHJlcXVpcmVkIGFuZCBkb2VzIG5vIGhhcm0gb3RoZXJ3aXNlICovCiAJb3V0dygweDAwMDEsIGlvYWRkciArIDQpOwogCkBAIC0xNDExLDcgKzE0MDIsNyBAQAogCQkvKiBDb21iaW5lIHNlY29uZGFyeSBzd19pbmZvIHdvcmQgKHRoZSBhZGFwdGVyIGxldmVsKSBhbmQgcHJpbWFyeQogCQkJc3dfaW5mbyB3b3JkIChkdXBsZXggc2V0dGluZyBwbHVzIG90aGVyIHVzZWxlc3MgYml0cykgKi8KIAkJRUwzV0lORE9XKDApOwotCQlzd19pbmZvID0gKHJlYWRfZWVwcm9tKGlvYWRkciwgMHgxNCkgJiAweDQwMGYpIHwgCisJCXN3X2luZm8gPSAocmVhZF9lZXByb20oaW9hZGRyLCAweDE0KSAmIDB4NDAwZikgfAogCQkJKHJlYWRfZWVwcm9tKGlvYWRkciwgMHgwZCkgJiAweEJmZjApOwogCiAJCUVMM1dJTkRPVyg0KTsKQEAgLTE0ODMsNyArMTQ3NCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwOwogCWludCBpb2FkZHI7Ci0JCisKIAlkZXYgPSBwZGV2LT5kcml2ZXJfZGF0YTsKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC0xNTA3LDcgKzE0OTgsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGVsM19wcml2YXRlICpscDsKIAlpbnQgaW9hZGRyOwotCQorCiAJZGV2ID0gcGRldi0+ZHJpdmVyX2RhdGE7CiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwpAQCAtMTUxOSw3ICsxNTEwLDcgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCiAJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggNDUzMmIxNy4uOTFmMjIzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC0xMiwxMiArMTIsMTIgQEAKIAlBbm5hcG9saXMgTUQgMjE0MDMKIAogCi0JMjAwMC8yLzItIEFkZGVkIHN1cHBvcnQgZm9yIGtlcm5lbC1sZXZlbCBJU0FQblAgCisJMjAwMC8yLzItIEFkZGVkIHN1cHBvcnQgZm9yIGtlcm5lbC1sZXZlbCBJU0FQblAKIAkJYnkgU3RlcGhlbiBGcm9zdCA8c2Zyb3N0QHNub3dtYW4ubmV0PiBhbmQgQWxlc3NhbmRybyBadW1tbwogCUNsZWFuZWQgdXAgZm9yIDIuMy54L3NvZnRuZXQgYnkgSmVmZiBHYXJ6aWsgYW5kIEFsYW4gQ294LgotCQorCiAJMjAwMS8xMS8xNyAtIEFkZGVkIGV0aHRvb2wgc3VwcG9ydCAoamdhcnppaykKLQkKKwogCTIwMDIvMTAvMjggLSBMb2NraW5nIHVwZGF0ZXMgZm9yIDIuNSAoYWxhbkByZWRoYXQuY29tKQogCiAqLwpAQCAtMTg3LDkgKzE4Nyw5IEBACiAJVG90YWxSZXNldCA9IDAgPDwgMTEsIFNlbGVjdFdpbmRvdyA9IDEgPDwgMTEsIFN0YXJ0Q29heCA9IDIgPDwgMTEsCiAJUnhEaXNhYmxlID0gMyA8PCAxMSwgUnhFbmFibGUgPSA0IDw8IDExLCBSeFJlc2V0ID0gNSA8PCAxMSwKIAlVcFN0YWxsID0gNiA8PCAxMSwgVXBVbnN0YWxsID0gKDYgPDwgMTEpICsgMSwgRG93blN0YWxsID0gKDYgPDwgMTEpICsgMiwKLQlEb3duVW5zdGFsbCA9ICg2IDw8IDExKSArIDMsIFJ4RGlzY2FyZCA9IDggPDwgMTEsIFR4RW5hYmxlID0gOSA8PCAxMSwgCi0JVHhEaXNhYmxlID0gMTAgPDwgMTEsIFR4UmVzZXQgPSAxMSA8PCAxMSwgRmFrZUludHIgPSAxMiA8PCAxMSwgCi0JQWNrSW50ciA9IDEzIDw8IDExLCBTZXRJbnRyRW5iID0gMTQgPDwgMTEsIFNldFN0YXR1c0VuYiA9IDE1IDw8IDExLCAKKwlEb3duVW5zdGFsbCA9ICg2IDw8IDExKSArIDMsIFJ4RGlzY2FyZCA9IDggPDwgMTEsIFR4RW5hYmxlID0gOSA8PCAxMSwKKwlUeERpc2FibGUgPSAxMCA8PCAxMSwgVHhSZXNldCA9IDExIDw8IDExLCBGYWtlSW50ciA9IDEyIDw8IDExLAorCUFja0ludHIgPSAxMyA8PCAxMSwgU2V0SW50ckVuYiA9IDE0IDw8IDExLCBTZXRTdGF0dXNFbmIgPSAxNSA8PCAxMSwKIAlTZXRSeEZpbHRlciA9IDE2IDw8IDExLCBTZXRSeFRocmVzaG9sZCA9IDE3IDw8IDExLAogCVNldFR4VGhyZXNob2xkID0gMTggPDwgMTEsIFNldFR4U3RhcnQgPSAxOSA8PCAxMSwgU3RhcnRETUFVcCA9IDIwIDw8IDExLAogCVN0YXJ0RE1BRG93biA9ICgyMCA8PCAxMSkgKyAxLCBTdGF0c0VuYWJsZSA9IDIxIDw8IDExLApAQCAtMzM4LDE1ICszMzgsMTUgQEAKIAkJbWFzazo4LAkJCS8qIFRoZSB0cmFuc2NlaXZlci1wcmVzZW50IGJpdCBpbiBXbjNfQ29uZmlnLiAqLwogCQluZXh0Ojg7CQkJLyogVGhlIG1lZGlhIHR5cGUgdG8gdHJ5IG5leHQuICovCiAJc2hvcnQgd2FpdDsJCQkvKiBUaW1lIGJlZm9yZSB3ZSBjaGVjayBtZWRpYSBzdGF0dXMuICovCi19IG1lZGlhX3RibFtdID0gewkKLQl7ICIxMGJhc2VUIiwgTWVkaWFfMTBUUCwgMHgwOCwgWENWUl8xMGJhc2UyLCAoMTQgKiBIWikgLyAxMCB9LCAKLQl7ICIxME1icyBBVUkiLCBNZWRpYV9TUUUsIDB4MjAsIFhDVlJfRGVmYXVsdCwgKDEgKiBIWikgLyAxMH0sIAotCXsgInVuZGVmaW5lZCIsIDAsIDB4ODAsIFhDVlJfMTBiYXNlVCwgMTAwMDB9LCAKLQl7ICIxMGJhc2UyIiwgMCwgMHgxMCwgWENWUl9BVUksICgxICogSFopIC8gMTB9LCAKLQl7ICIxMDBiYXNlVFgiLCBNZWRpYV9MbmssIDB4MDIsIFhDVlJfMTAwYmFzZUZ4LCAoMTQgKiBIWikgLyAxMH0sIAotCXsgIjEwMGJhc2VGWCIsIE1lZGlhX0xuaywgMHgwNCwgWENWUl9NSUksICgxNCAqIEhaKSAvIDEwfSwgCi0JeyAiTUlJIiwgMCwgMHg0MCwgWENWUl8xMGJhc2VULCAzICogSFp9LCAKLQl7ICJ1bmRlZmluZWQiLCAwLCAweDAxLCBYQ1ZSXzEwYmFzZVQsIDEwMDAwfSwgCit9IG1lZGlhX3RibFtdID0geworCXsgIjEwYmFzZVQiLCBNZWRpYV8xMFRQLCAweDA4LCBYQ1ZSXzEwYmFzZTIsICgxNCAqIEhaKSAvIDEwIH0sCisJeyAiMTBNYnMgQVVJIiwgTWVkaWFfU1FFLCAweDIwLCBYQ1ZSX0RlZmF1bHQsICgxICogSFopIC8gMTB9LAorCXsgInVuZGVmaW5lZCIsIDAsIDB4ODAsIFhDVlJfMTBiYXNlVCwgMTAwMDB9LAorCXsgIjEwYmFzZTIiLCAwLCAweDEwLCBYQ1ZSX0FVSSwgKDEgKiBIWikgLyAxMH0sCisJeyAiMTAwYmFzZVRYIiwgTWVkaWFfTG5rLCAweDAyLCBYQ1ZSXzEwMGJhc2VGeCwgKDE0ICogSFopIC8gMTB9LAorCXsgIjEwMGJhc2VGWCIsIE1lZGlhX0xuaywgMHgwNCwgWENWUl9NSUksICgxNCAqIEhaKSAvIDEwfSwKKwl7ICJNSUkiLCAwLCAweDQwLCBYQ1ZSXzEwYmFzZVQsIDMgKiBIWn0sCisJeyAidW5kZWZpbmVkIiwgMCwgMHgwMSwgWENWUl8xMGJhc2VULCAxMDAwMH0sCiAJeyAiRGVmYXVsdCIsIDAsIDB4RkYsIFhDVlJfMTBiYXNlVCwgMTAwMDB9LAogfTsKIApAQCAtMzc5LDEwICszNzksMTAgQEAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9zdGF0cyhpbnQgYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmNvcmtzY3Jld19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwotDAorc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKLS8qIAorCisvKgogICAgVW5mb3J0dW5hdGVseSBtYXhpbWl6aW5nIHRoZSBzaGFyZWQgY29kZSBiZXR3ZWVuIHRoZSBpbnRlZ3JhdGVkIGFuZAogICAgbW9kdWxlIHZlcnNpb24gb2YgdGhlIGRyaXZlciByZXN1bHRzIGluIGEgY29tcGxpY2F0ZWQgc2V0IG9mIGluaXRpYWxpemF0aW9uCiAgICBwcm9jZWR1cmVzLgpAQCAtNjEyLDcgKzYxMiw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IDNDb20gJXMgYXQgJSMzeCwiLCBkZXYtPm5hbWUsIHZwLT5wcm9kdWN0X25hbWUsIGlvYWRkcik7CiAKIAlzcGluX2xvY2tfaW5pdCgmdnAtPmxvY2spOwotCQorCiAJLyogUmVhZCB0aGUgc3RhdGlvbiBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTS4gKi8KIAlFTDNXSU5ET1coMCk7CiAJZm9yIChpID0gMDsgaSA8IDB4MTg7IGkrKykgewpAQCAtNjkxLDcgKzY5MSw3IEBACiAKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiB9Ci0MCisKIAogc3RhdGljIGludCBjb3Jrc2NyZXdfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNzE1LDcgKzcxNSw3IEBACiAJfSBlbHNlIGlmICh2cC0+YXV0b3NlbGVjdCkgewogCQkvKiBGaW5kIGZpcnN0IGF2YWlsYWJsZSBtZWRpYSB0eXBlLCBzdGFydGluZyB3aXRoIDEwMGJhc2VUeC4gKi8KIAkJZGV2LT5pZl9wb3J0ID0gNDsKLQkJd2hpbGUgKCEodnAtPmF2YWlsYWJsZV9tZWRpYSAmIG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLm1hc2spKSAKKwkJd2hpbGUgKCEodnAtPmF2YWlsYWJsZV9tZWRpYSAmIG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLm1hc2spKQogCQkJZGV2LT5pZl9wb3J0ID0gbWVkaWFfdGJsW2Rldi0+aWZfcG9ydF0ubmV4dDsKIAogCQlpZiAoY29ya3NjcmV3X2RlYnVnID4gMSkKQEAgLTg3MSw3ICs4NzEsNyBAQAogCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5uYW1lKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2cC0+bG9jaywgZmxhZ3MpOwotCQorCiAJewogCQlpbnQgb2xkX3dpbmRvdyA9IGludyhpb2FkZHIgKyBFTDNfQ01EKSA+PiAxMzsKIAkJaW50IG1lZGlhX3N0YXR1czsKQEAgLTkxMSw3ICs5MTEsNyBAQAogCQkJCSAgICBtZWRpYV90YmxbZGV2LT5pZl9wb3J0XS5uZXh0OwogCQkJfQogCQkJd2hpbGUgKCEodnAtPmF2YWlsYWJsZV9tZWRpYSAmIG1lZGlhX3RibFtkZXYtPmlmX3BvcnRdLm1hc2spKTsKLQkJCQorCiAJCQlpZiAoZGV2LT5pZl9wb3J0ID09IDgpIHsJLyogR28gYmFjayB0byBkZWZhdWx0LiAqLwogCQkJCWRldi0+aWZfcG9ydCA9IHZwLT5kZWZhdWx0X21lZGlhOwogCQkJCWlmIChjb3Jrc2NyZXdfZGVidWcgPiAxKQpAQCAtOTQwLDcgKzk0MCw3IEBACiAJCX0KIAkJRUwzV0lORE9XKG9sZF93aW5kb3cpOwogCX0KLQkKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZwLT5sb2NrLCBmbGFncyk7CiAJaWYgKGNvcmtzY3Jld19kZWJ1ZyA+IDEpCiAJCXByaW50aygiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aW1lciBmaW5pc2hlZCwgJXMuXG4iLApAQCAtMTAwMyw3ICsxMDAzLDggQEAKIAkJLyogQ2FsY3VsYXRlIHRoZSBuZXh0IFR4IGRlc2NyaXB0b3IgZW50cnkuICovCiAJCWludCBlbnRyeSA9IHZwLT5jdXJfdHggJSBUWF9SSU5HX1NJWkU7CiAJCXN0cnVjdCBib29tX3R4X2Rlc2MgKnByZXZfZW50cnk7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGk7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCWludCBpOwogCiAJCWlmICh2cC0+dHhfZnVsbCkJLyogTm8gcm9vbSB0byB0cmFuc21pdCB3aXRoICovCiAJCQlyZXR1cm4gMTsKQEAgLTEwMjUsNyArMTAyNiw3IEBACiAJCW91dHcoRG93blN0YWxsLCBpb2FkZHIgKyBFTDNfQ01EKTsKIAkJLyogV2FpdCBmb3IgdGhlIHN0YWxsIHRvIGNvbXBsZXRlLiAqLwogCQlmb3IgKGkgPSAyMDsgaSA+PSAwOyBpLS0pCi0JCQlpZiAoKGludyhpb2FkZHIgKyBFTDNfU1RBVFVTKSAmIENtZEluUHJvZ3Jlc3MpID09IDApIAorCQkJaWYgKChpbncoaW9hZGRyICsgRUwzX1NUQVRVUykgJiBDbWRJblByb2dyZXNzKSA9PSAwKQogCQkJCWJyZWFrOwogCQlpZiAocHJldl9lbnRyeSkKIAkJCXByZXZfZW50cnktPm5leHQgPSBpc2FfdmlydF90b19idXMoJnZwLT50eF9yaW5nW2VudHJ5XSk7CkBAIC0xMTAxLDcgKzExMDIsNyBAQAogCQkJCQlpbnQgajsKIAkJCQkJb3V0dyhUeFJlc2V0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIAkJCQkJZm9yIChqID0gMjA7IGogPj0gMDsgai0tKQotCQkJCQkJaWYgKCEoaW53KGlvYWRkciArIEVMM19TVEFUVVMpICYgQ21kSW5Qcm9ncmVzcykpIAorCQkJCQkJaWYgKCEoaW53KGlvYWRkciArIEVMM19TVEFUVVMpICYgQ21kSW5Qcm9ncmVzcykpCiAJCQkJCQkJYnJlYWs7CiAJCQkJfQogCQkJCW91dHcoVHhFbmFibGUsIGlvYWRkciArIEVMM19DTUQpOwpAQCAtMTEyOSw3ICsxMTMwLDcgQEAKIAlsYXRlbmN5ID0gaW5iKGlvYWRkciArIFRpbWVyKTsKIAogCXNwaW5fbG9jaygmbHAtPmxvY2spOwotCQorCiAJc3RhdHVzID0gaW53KGlvYWRkciArIEVMM19TVEFUVVMpOwogCiAJaWYgKGNvcmtzY3Jld19kZWJ1ZyA+IDQpCkBAIC0xMjQ4LDcgKzEyNDksNyBAQAogCQlvdXR3KEFja0ludHIgfCBJbnRSZXEgfCBJbnRMYXRjaCwgaW9hZGRyICsgRUwzX0NNRCk7CiAKIAl9IHdoaWxlICgoc3RhdHVzID0gaW53KGlvYWRkciArIEVMM19TVEFUVVMpKSAmIChJbnRMYXRjaCB8IFJ4Q29tcGxldGUpKTsKLQkKKwogCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CiAKIAlpZiAoY29ya3NjcmV3X2RlYnVnID4gNCkKQEAgLTEzMDcsNyArMTMwOCw3IEBACiAJCQkJdnAtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJCQkJLyogV2FpdCBhIGxpbWl0ZWQgdGltZSB0byBnbyB0byBuZXh0IHBhY2tldC4gKi8KIAkJCQlmb3IgKGkgPSAyMDA7IGkgPj0gMDsgaS0tKQotCQkJCQlpZiAoISAoaW53KGlvYWRkciArIEVMM19TVEFUVVMpICYgQ21kSW5Qcm9ncmVzcykpIAorCQkJCQlpZiAoISAoaW53KGlvYWRkciArIEVMM19TVEFUVVMpICYgQ21kSW5Qcm9ncmVzcykpCiAJCQkJCQlicmVhazsKIAkJCQljb250aW51ZTsKIAkJCX0gZWxzZSBpZiAoY29ya3NjcmV3X2RlYnVnKQpAQCAtMTU2MCwxMyArMTU2MSwxMyBAQAogCWNvcmtzY3Jld19kZWJ1ZyA9IGxldmVsOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X3NldF9tc2dsZXZlbCwKIH07CiAKLQwKKwogI2lmZGVmIE1PRFVMRQogdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQogewpAQCAtMTU4Myw3ICsxNTg0LDcgQEAKIAl9CiB9CiAjZW5kaWYJCQkJLyogTU9EVUxFICovCi0MCisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiAgY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1ETU9EVUxFIC1EX19LRVJORUxfXyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyAzYzUxNS5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggNWRmZDk3Zi4uY2Y4YTBiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgU3R1YXJ0IEFkYW1zb24gPHN0dWFydC5hZGFtc29uQGNvbXBzb2MubmV0PgogICAgTm92IDIwMDEKICAgIGFkZGVkIHN1cHBvcnQgZm9yIGV0aHRvb2wgKGpnYXJ6aWspCi0JCisKICAgICRIZWFkZXI6IC9mc3lzMi9ob21lL2NocmlzYi9saW51eC0xLjMuNTktTUNBL2RyaXZlcnMvbmV0L1JDUy8zYzUyMy5jLHYgMS4xIDE5OTYvMDIvMDUgMDE6NTM6NDYgY2hyaXNiIEV4cCBjaHJpc2IgJAogICovCiAKQEAgLTE4OSw3ICsxODksNyBAQAogI2lmZGVmIEVMTUNfTVVMVElDQVNUCiBzdGF0aWMgdm9pZCBzZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAjZW5kaWYKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKIC8qIGhlbHBlci1mdW5jdGlvbnMgKi8KIHN0YXRpYyBpbnQgaW5pdDU4NihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTQzNCwxNCArNDM0LDE0IEBACiAKIAkJZGV2LT5pcnE9aXJxX3RhYmxlWyhzdGF0dXMgJiBFTE1DX1NUQVRVU19JUlFfU0VMRUNUKSA+PiA2XTsKIAkJZGV2LT5iYXNlX2FkZHI9Y3NyX3RhYmxlWyhzdGF0dXMgJiBFTE1DX1NUQVRVU19DU1JfU0VMRUNUKSA+PiAxXTsKLQkJCisKIAkJLyoKIAkJICAgSWYgd2UncmUgdHJ5aW5nIHRvIG1hdGNoIGEgc3BlY2lmaWVkIGlycSBvciBJTyBhZGRyZXNzLAogCQkgICB3ZSdsbCByZWplY3QgYSBtYXRjaCB1bmxlc3MgaXQncyB3aGF0IHdlJ3JlIGxvb2tpbmcgZm9yLgogCQkgICBBbHNvIHJlamVjdCBpdCBpZiB0aGUgY2FyZCBpcyBhbHJlYWR5IGluIHVzZS4KIAkJICovCiAKLQkJaWYgKChpcnEgJiYgaXJxICE9IGRldi0+aXJxKSB8fCAKKwkJaWYgKChpcnEgJiYgaXJxICE9IGRldi0+aXJxKSB8fAogCQkgICAgKGJhc2VfYWRkciAmJiBiYXNlX2FkZHIgIT0gZGV2LT5iYXNlX2FkZHIpKSB7CiAJCQlzbG90ID0gbWNhX2ZpbmRfYWRhcHRlcihFTE1DX01DQV9JRCwgc2xvdCArIDEpOwogCQkJY29udGludWU7CkBAIC01NDAsNyArNTQwLDcgQEAKIAogCS8qIGR1bXAgYWxsIHRoZSBhc3NvcnRlZCBpbmZvcm1hdGlvbiAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBJUlEgJWQsICVzdGVybmFsIHhjdnIsIG1lbW9yeSAlI2x4LSUjbHguXG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIGRldi0+aXJxLCBkZXYtPmlmX3BvcnQgPyAiZXgiIDogImluIiwgCisJICAgICAgIGRldi0+aXJxLCBkZXYtPmlmX3BvcnQgPyAiZXgiIDogImluIiwKIAkgICAgICAgZGV2LT5tZW1fc3RhcnQsIGRldi0+bWVtX2VuZCAtIDEpOwogCiAJLyogVGhlIGhhcmR3YXJlIGFkZHJlc3MgZm9yIHRoZSAzYzUyMyBpcyBzdG9yZWQgaW4gdGhlIGZpcnN0IHNpeApAQCAtNTY0LDcgKzU2NCw3IEBACiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBOVUxMOwogI2VuZGlmCiAJZGV2LT5ldGh0b29sX29wcyA9ICZuZXRkZXZfZXRodG9vbF9vcHM7Ci0JCisKIAkvKiBub3RlIHRoYXQgd2UgaGF2ZW4ndCBhY3R1YWxseSByZXF1ZXN0ZWQgdGhlIElSUSBmcm9tIHRoZSBrZXJuZWwuCiAJICAgVGhhdCBnZXRzIGRvbmUgaW4gZWxtY19vcGVuKCkuICBJJ20gbm90IHN1cmUgdGhhdCdzIHN1Y2ggYSBnb29kIGlkZWEsCiAJICAgYnV0IGl0IHdvcmtzLCBzbyBJJ2xsIGdvIHdpdGggaXQuICovCkBAIC01ODMsNyArNTgzLDcgQEAKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgRUxNQ19JT19FWFRFTlQpOwogCXJldHVybiByZXR2YWw7CiB9Ci0gCisKIHN0YXRpYyB2b2lkIGNsZWFudXBfY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCW1jYV9zZXRfYWRhcHRlcl9wcm9jZm4oKChzdHJ1Y3QgcHJpdiAqKSAoZGV2LT5wcml2KSktPnNsb3QsIE5VTEwsIE5VTEwpOwpAQCAtOTI2LDcgKzkyNiw3IEBACiAKIAlwID0gKHN0cnVjdCBwcml2ICopIGRldi0+cHJpdjsKIAotCXdoaWxlICgoc3RhdCA9IHAtPnNjYi0+c3RhdHVzICYgU1RBVF9NQVNLKSkgCisJd2hpbGUgKChzdGF0ID0gcC0+c2NiLT5zdGF0dXMgJiBTVEFUX01BU0spKQogCXsKIAkJcC0+c2NiLT5jbWQgPSBzdGF0OwogCQllbG1jX2F0dG41ODYoKTsJLyogYWNrIGludGVyLiAqLwpAQCAtMTEwMiw3ICsxMTAyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHRpbWVvdXQKICAqLwotIAorCiBzdGF0aWMgdm9pZCBlbG1jX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcHJpdiAqcCA9IChzdHJ1Y3QgcHJpdiAqKSBkZXYtPnByaXY7CkBAIC0xMTI5LDcgKzExMjksNyBAQAogCQllbG1jX29wZW4oZGV2KTsKIAl9CiB9Ci0gCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHNlbmQgZnJhbWUKICAqLwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlsZW4gPSAoRVRIX1pMRU4gPCBza2ItPmxlbikgPyBza2ItPmxlbiA6IEVUSF9aTEVOOwotCQorCiAJaWYgKGxlbiAhPSBza2ItPmxlbikKIAkJbWVtc2V0KChjaGFyICopIHAtPnhtaXRfY2J1ZmZzW3AtPnhtaXRfY291bnRdLCAwLCBFVEhfWkxFTik7CiAJbWVtY3B5KChjaGFyICopIHAtPnhtaXRfY2J1ZmZzW3AtPnhtaXRfY291bnRdLCAoY2hhciAqKSAoc2tiLT5kYXRhKSwgc2tiLT5sZW4pOwpAQCAtMTE3Nyw3ICsxMTc3LDcgQEAKICNlbHNlCiAJbmV4dF9ub3AgPSAocC0+bm9wX3BvaW50ICsgMSkgJiAweDE7CiAJcC0+eG1pdF9idWZmc1swXS0+c2l6ZSA9IFRCRF9MQVNUIHwgbGVuOwotCQorCiAJcC0+eG1pdF9jbWRzWzBdLT5jbWRfbGluayA9IHAtPm5vcF9jbWRzW25leHRfbm9wXS0+Y21kX2xpbmsKIAkgICAgPSBtYWtlMTYoKHAtPm5vcF9jbWRzW25leHRfbm9wXSkpOwogCXAtPnhtaXRfY21kc1swXS0+Y21kX3N0YXR1cyA9IHAtPm5vcF9jbWRzW25leHRfbm9wXS0+Y21kX3N0YXR1cyA9IDA7CkBAIC0xMjU5LDcgKzEyNTksNyBAQAogCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJNQ0EgMHglbHgiLCBkZXYtPmJhc2VfYWRkcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKQEAgLTEyODEsNyArMTI4MSw3IEBACiB7CiAJaW50IHRoaXNfZGV2LGZvdW5kID0gMDsKIAotCS8qIExvb3AgdW50aWwgd2UgZWl0aGVyIGNhbid0IGZpbmQgYW55IG1vcmUgY2FyZHMsIG9yIHdlIGhhdmUgTUFYXzNDNTIzX0NBUkRTICovCQorCS8qIExvb3AgdW50aWwgd2UgZWl0aGVyIGNhbid0IGZpbmQgYW55IG1vcmUgY2FyZHMsIG9yIHdlIGhhdmUgTUFYXzNDNTIzX0NBUkRTICovCiAJZm9yKHRoaXNfZGV2PTA7IHRoaXNfZGV2PE1BWF8zQzUyM19DQVJEUzsgdGhpc19kZXYrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBwcml2KSk7CiAJCWlmICghZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuaCBiL2RyaXZlcnMvbmV0LzNjNTIzLmgKaW5kZXggNzI5MmY4OC4uNjk1NjQ0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuaAorKysgYi9kcml2ZXJzL25ldC8zYzUyMy5oCkBAIC0xMzAsNyArMTMwLDcgQEAKIC8qCiAgKiBSZWNlaXZlIEJ1ZmZlciBEZXNjcmlwdG9yIChSQkQpCiAgKi8KLXN0cnVjdCByYmRfc3RydWN0IAorc3RydWN0IHJiZF9zdHJ1Y3QKIHsKICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOwkvKiBzdGF0dXMgd29yZCxudW1iZXIgb2YgdXNlZCBieXRlcyBpbiBidWZmICovCiAgIHVuc2lnbmVkIHNob3J0IG5leHQ7CQkvKiBwb2ludGVyb2Zmc2V0IHRvIG5leHQgUkJEICovCkBAIC0xODIsNyArMTgyLDcgQEAKIC8qCiAgKiBJQSBTZXR1cCBjb21tYW5kCiAgKi8KLXN0cnVjdCBpYXNldHVwX2NtZF9zdHJ1Y3QgCitzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0CiB7CiAgIHVuc2lnbmVkIHNob3J0IGNtZF9zdGF0dXM7CiAgIHVuc2lnbmVkIHNob3J0IGNtZF9jbWQ7CkBAIC0xOTEsNyArMTkxLDcgQEAKIH07CiAKIC8qCi0gKiBDb25maWd1cmUgY29tbWFuZCAKKyAqIENvbmZpZ3VyZSBjb21tYW5kCiAgKi8KIHN0cnVjdCBjb25maWd1cmVfY21kX3N0cnVjdAogewpAQCAtMjEzLDkgKzIxMyw5IEBACiB9OwogCiAvKgotICogTXVsdGljYXN0IFNldHVwIGNvbW1hbmQgCisgKiBNdWx0aWNhc3QgU2V0dXAgY29tbWFuZAogICovCi1zdHJ1Y3QgbWNzZXR1cF9jbWRfc3RydWN0IAorc3RydWN0IG1jc2V0dXBfY21kX3N0cnVjdAogewogICB1bnNpZ25lZCBzaG9ydCBjbWRfc3RhdHVzOwogICB1bnNpZ25lZCBzaG9ydCBjbWRfY21kOwpAQCAtMjI1LDkgKzIyNSw5IEBACiB9OwogCiAvKgotICogdHJhbnNtaXQgY29tbWFuZCAKKyAqIHRyYW5zbWl0IGNvbW1hbmQKICAqLwotc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QgCitzdHJ1Y3QgdHJhbnNtaXRfY21kX3N0cnVjdAogewogICB1bnNpZ25lZCBzaG9ydCBjbWRfc3RhdHVzOwogICB1bnNpZ25lZCBzaG9ydCBjbWRfY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjcuYyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKaW5kZXggMDNjMGY3MS4uNjI1ZTU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjcuYworKysgYi9kcml2ZXJzL25ldC8zYzUyNy5jCkBAIC0xLDcgKzEsNyBAQAogLyogM2M1MjcuYzogM0NvbSBFdGhlcmxpbmsvTUMzMiBkcml2ZXIgZm9yIExpbnV4IDIuNCBhbmQgMi42LgogICoKICAqCShjKSBDb3B5cmlnaHQgMTk5OCBSZWQgSGF0IFNvZnR3YXJlIEluYwotICoJV3JpdHRlbiBieSBBbGFuIENveC4gCisgKglXcml0dGVuIGJ5IEFsYW4gQ294LgogICoJRnVydGhlciBkZWJ1Z2dpbmcgYnkgQ2FybCBEcm91Z2dlLgogICogICAgICBJbml0aWFsIFNNUCBzdXBwb3J0IGJ5IEZlbGlwZSBXIERhbWFzaW8gPGZlbGlwZXdkQHRlcnJhLmNvbS5icj4KICAqICAgICAgSGVhdmlseSBtb2RpZmllZCBieSBSaWNoYXJkIFByb2N0ZXIgPHJucEBwYXJhZGlzZS5uZXQubno+CkBAIC0zMCwxMiArMzAsMTIgQEAKICAqCVRoZSBkaWFncmFtIChGaWd1cmUgMS0xKSBhbmQgdGhlIFBPUyBzdW1tYXJ5IGRpc2FncmVlIHdpdGggdGhlCiAgKgkiSW50ZXJydXB0IExldmVsIiBzZWN0aW9uIGluIHRoZSBtYW51YWwuCiAgKgotICoJVGhlIG1hbnVhbCBjb250cmFkaWN0cyBpdHNlbGYgd2hlbiBkZXNjcmliaW5nIHRoZSBtaW5pbXVtIG51bWJlciAKLSAqCWJ1ZmZlcnMgaW4gdGhlICdjb25maWd1cmUgbGlzdHMnIGNvbW1hbmQuIAotICoJTXkgY2FyZCBhY2NlcHRzIGEgYnVmZmVyIGNvbmZpZyBvZiA0LzQuIAorICoJVGhlIG1hbnVhbCBjb250cmFkaWN0cyBpdHNlbGYgd2hlbiBkZXNjcmliaW5nIHRoZSBtaW5pbXVtIG51bWJlcgorICoJYnVmZmVycyBpbiB0aGUgJ2NvbmZpZ3VyZSBsaXN0cycgY29tbWFuZC4KKyAqCU15IGNhcmQgYWNjZXB0cyBhIGJ1ZmZlciBjb25maWcgb2YgNC80LgogICoKICAqCVNldHRpbmcgdGhlIFNBViBCUCBiaXQgZG9lcyBub3Qgc2F2ZSBiYWQgcGFja2V0cywgYnV0Ci0gKglvbmx5IGVuYWJsZXMgUlggb24tY2FyZCBzdGF0cyBjb2xsZWN0aW9uLiAKKyAqCW9ubHkgZW5hYmxlcyBSWCBvbi1jYXJkIHN0YXRzIGNvbGxlY3Rpb24uCiAgKgogICoJVGhlIGRvY3VtZW50YXRpb24gaW4gcGxhY2VzIHNlZW1zIHRvIG1pc3MgdGhpbmdzLiBJbiBhY3R1YWwgZmFjdAogICoJSSd2ZSBhbHdheXMgZXZlbnR1YWxseSBmb3VuZCBldmVyeXRoaW5nIGlzIGRvY3VtZW50ZWQsIGl0IGp1c3QKQEAgLTY0LDE2ICs2NCwxNiBAQAogICoJcmVjZWl2ZWQgZnJhbWVzIGV4Y2VlZGluZyBhIGNvbmZpZ3VyYWJsZSBsZW5ndGggYXJlIHBhc3NlZAogICoJZGlyZWN0bHkgdG8gdGhlIGhpZ2hlciBuZXR3b3JraW5nIGxheWVycyB3aXRob3V0IGluY3VyaW5nIGEgY29weSwKICAqCWluIHdoYXQgYW1vdW50cyB0byBhIHRpbWUvc3BhY2UgdHJhZGUtb2ZmLgotICoJIAorICoKICAqCVRoZSBjYXJkIGFsc28ga2VlcHMgYSBsYXJnZSBhbW91bnQgb2Ygc3RhdGlzdGljYWwgaW5mb3JtYXRpb24KICAqCW9uLWJvYXJkLiBJbiBhIHBlcmZlY3Qgd29ybGQsIHRoZXNlIGNvdWxkIGJlIHVzZWQgc2FmZWx5IGF0IG5vCiAgKgljb3N0LiBIb3dldmVyLCBsYWNraW5nIGluZm9ybWF0aW9uIHRvIHRoZSBjb250cmFyeSwgcHJvY2Vzc2luZwogICoJdGhlbSB3aXRob3V0IHJhY2VzIHdvdWxkIGludm9sdmUgc28gbXVjaCBleHRyYSBjb21wbGV4aXR5IGFzIHRvCiAgKgltYWtlIGl0IHVud29ydGh3aGlsZSB0byBkbyBzby4gSW4gdGhlIGVuZCwgYSBoeWJyaWQgU1cvSFcKLSAqCWltcGxlbWVudGF0aW9uIHdhcyBtYWRlIG5lY2Vzc2FyeSAtLS0gc2VlIG1jMzJfdXBkYXRlX3N0YXRzKCkuICAKKyAqCWltcGxlbWVudGF0aW9uIHdhcyBtYWRlIG5lY2Vzc2FyeSAtLS0gc2VlIG1jMzJfdXBkYXRlX3N0YXRzKCkuCiAgKgogICogRE9DOiBOb3RlcwotICoJCisgKgogICoJSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHVzZSB0d28gb3IgbW9yZSBjYXJkcywgYnV0IGF0IHRoaXMgc3RhZ2UKICAqCW9ubHkgYnkgbG9hZGluZyB0d28gY29waWVzIG9mIHRoZSBzYW1lIG1vZHVsZS4KICAqCkBAIC0xMzIsMjggKzEzMiwyOCBAQAogLyogVGhlIG51bWJlciBvZiBsb3cgSS9PIHBvcnRzIHVzZWQgYnkgdGhlIGV0aGVyY2FyZC4gKi8KICNkZWZpbmUgTUMzMl9JT19FWFRFTlQJOAogCi0vKiBBcyBpbXBsZW1lbnRlZCwgdmFsdWVzIG11c3QgYmUgYSBwb3dlci1vZi0yIC0tIDQvOC8xNi8zMiAqLyAKKy8qIEFzIGltcGxlbWVudGVkLCB2YWx1ZXMgbXVzdCBiZSBhIHBvd2VyLW9mLTIgLS0gNC84LzE2LzMyICovCiAjZGVmaW5lIFRYX1JJTkdfTEVOICAgICAzMiAgICAgICAvKiBUeXBpY2FsbHkgdGhlIGNhcmQgc3VwcG9ydHMgMzcgICovCiAjZGVmaW5lIFJYX1JJTkdfTEVOICAgICA4ICAgICAgICAvKiAgICAgIiAgICAgICAiICAgICAgICAiICAgICAgICAgICovCiAKLS8qIENvcHkgYnJlYWsgcG9pbnQsIHNlZSBhYm92ZSBmb3IgZGV0YWlscy4gCi0gKiBTZXR0aW5nIHRvID4gMTUxMiBlZmZlY3RpdmVseSBkaXNhYmxlcyB0aGlzIGZlYXR1cmUuCSovCSAgICAKKy8qIENvcHkgYnJlYWsgcG9pbnQsIHNlZSBhYm92ZSBmb3IgZGV0YWlscy4KKyAqIFNldHRpbmcgdG8gPiAxNTEyIGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4JKi8KICNkZWZpbmUgUlhfQ09QWUJSRUFLICAgIDIwMCAgICAgIC8qIFZhbHVlIGZyb20gM2M1OXguYyAqLwogCiAvKiBJc3N1ZSB0aGUgODI1ODYgd29ya2Fyb3VuZCBjb21tYW5kIC0gdGhpcyBpcyBmb3IgImJ1c3kgbGFucyIsIGJ1dAotICogYmFzaWNhbGx5IG1lYW5zIGZvciBhbGwgbGFucyBub3cgZGF5cyAtIGhhcyBhIHBlcmZvcm1hbmNlIChsYXRlbmN5KSAKLSAqIGNvc3QsIGJ1dCBiZXN0IHNldC4gKi8gCisgKiBiYXNpY2FsbHkgbWVhbnMgZm9yIGFsbCBsYW5zIG5vdyBkYXlzIC0gaGFzIGEgcGVyZm9ybWFuY2UgKGxhdGVuY3kpCisgKiBjb3N0LCBidXQgYmVzdCBzZXQuICovCiBzdGF0aWMgY29uc3QgaW50IFdPUktBUk9VTkRfODI1ODY9MTsKIAogLyogUG9pbnRlcnMgdG8gYnVmZmVycyBhbmQgdGhlaXIgb24tY2FyZCByZWNvcmRzICovCi1zdHJ1Y3QgbWMzMl9yaW5nX2Rlc2MgCitzdHJ1Y3QgbWMzMl9yaW5nX2Rlc2MKIHsKLQl2b2xhdGlsZSBzdHJ1Y3Qgc2tiX2hlYWRlciAqcDsgICAgICAgICAgICAgICAgICAgIAotCXN0cnVjdCBza19idWZmICpza2I7ICAgICAgICAgIAorCXZvbGF0aWxlIHN0cnVjdCBza2JfaGVhZGVyICpwOworCXN0cnVjdCBza19idWZmICpza2I7CiB9OwogCiAvKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWRzIHRvIGJlIGtlcHQgZm9yIGVhY2ggYm9hcmQuICovCi1zdHJ1Y3QgbWMzMl9sb2NhbCAKK3N0cnVjdCBtYzMyX2xvY2FsCiB7CiAJaW50IHNsb3Q7CiAKQEAgLTE2NSw3ICsxNjUsNyBAQAogICAgICAgICB2b2xhdGlsZSBzdHJ1Y3QgbWMzMl9zdGF0cyAqc3RhdHM7ICAgIC8qIFN0YXJ0IG9mIG9uLWNhcmQgc3RhdGlzdGljcyAqLwogICAgICAgICB1MTYgdHhfY2hhaW47ICAgICAgICAgICAvKiBUcmFuc21pdCBsaXN0IHN0YXJ0IG9mZnNldCAqLwogCXUxNiByeF9jaGFpbjsgICAgICAgICAgIC8qIFJlY2VpdmUgbGlzdCBzdGFydCBvZmZzZXQgKi8KLSAgICAgICAgdTE2IHR4X2xlbjsgICAgICAgICAgICAgLyogVHJhbnNtaXQgbGlzdCBjb3VudCAqLyAKKyAgICAgICAgdTE2IHR4X2xlbjsgICAgICAgICAgICAgLyogVHJhbnNtaXQgbGlzdCBjb3VudCAqLwogICAgICAgICB1MTYgcnhfbGVuOyAgICAgICAgICAgICAvKiBSZWNlaXZlIGxpc3QgY291bnQgKi8KIAogCXUxNiB4Y2VpdmVyX2Rlc2lyZWRfc3RhdGU7IC8qIEhBTFRFRCBvciBSVU5OSU5HICovCkBAIC0xODAsNyArMTgwLDcgQEAKIAlhdG9taWNfdCB0eF9yaW5nX2hlYWQ7ICAvKiBpbmRleCB0byB0eCBlbi1xdWV1ZSBlbmQgKi8KIAl1MTYgdHhfcmluZ190YWlsOyAgICAgICAvKiBpbmRleCB0byB0eCBkZS1xdWV1ZSBlbmQgKi8KIAotCXUxNiByeF9yaW5nX3RhaWw7ICAgICAgIC8qIGluZGV4IHRvIHJ4IGRlLXF1ZXVlIGVuZCAqLyAKKwl1MTYgcnhfcmluZ190YWlsOyAgICAgICAvKiBpbmRleCB0byByeCBkZS1xdWV1ZSBlbmQgKi8KIAogCXN0cnVjdCBzZW1hcGhvcmUgY21kX211dGV4OyAgICAvKiBTZXJpYWxpc2VzIGlzc3Vpbmcgb2YgZXhlY3V0ZSBjb21tYW5kcyAqLwogICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBleGVjdXRpb25fY21kOyAvKiBDYXJkIGhhcyBjb21wbGV0ZWQgYW4gZXhlY3V0ZSBjb21tYW5kICovCkBAIC0yMDQsNyArMjA0LDcgQEAKIH07CiAKIAotLyogTWFjcm9zIGZvciByaW5nIGluZGV4IG1hbmlwdWxhdGlvbnMgKi8gCisvKiBNYWNyb3MgZm9yIHJpbmcgaW5kZXggbWFuaXB1bGF0aW9ucyAqLwogc3RhdGljIGlubGluZSB1MTYgbmV4dF9yeCh1MTYgcngpIHsgcmV0dXJuIChyeCsxKSYoUlhfUklOR19MRU4tMSk7IH07CiBzdGF0aWMgaW5saW5lIHUxNiBwcmV2X3J4KHUxNiByeCkgeyByZXR1cm4gKHJ4LTEpJihSWF9SSU5HX0xFTi0xKTsgfTsKIApAQCAtMjIyLDcgKzIyMiw3IEBACiBzdGF0aWMgc3RydWN0CW5ldF9kZXZpY2Vfc3RhdHMgKm1jMzJfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJbWMzMl9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZAltYzMyX3Jlc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIAogc3RhdGljIHZvaWQgY2xlYW51cF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yNTksMjEgKzI1OSwyMSBAQAogCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCi0JLyogRG8gbm90IGNoZWNrIGFueSBzdXBwbGllZCBpL28gbG9jYXRpb25zLiAKKwkvKiBEbyBub3QgY2hlY2sgYW55IHN1cHBsaWVkIGkvbyBsb2NhdGlvbnMuCiAJICAgUE9TIHJlZ2lzdGVycyB1c3VhbGx5IGRvbid0IGZhaWwgOikgKi8KIAotCS8qIE1DQSBjYXJkcyBoYXZlIFBPUyByZWdpc3RlcnMuICAKLQkgICBBdXRvZGV0ZWN0aW5nIE1DQSBjYXJkcyBpcyBleHRyZW1lbHkgc2ltcGxlLiAKKwkvKiBNQ0EgY2FyZHMgaGF2ZSBQT1MgcmVnaXN0ZXJzLgorCSAgIEF1dG9kZXRlY3RpbmcgTUNBIGNhcmRzIGlzIGV4dHJlbWVseSBzaW1wbGUuCiAJICAgSnVzdCBzZWFyY2ggZm9yIHRoZSBjYXJkLiAqLwogCiAJZm9yKGkgPSAwOyAobWMzMl9hZGFwdGVyc1tpXS5uYW1lICE9IE5VTEwpOyBpKyspIHsKLQkJY3VycmVudF9tY2Ffc2xvdCA9IAorCQljdXJyZW50X21jYV9zbG90ID0KIAkJCW1jYV9maW5kX3VudXNlZF9hZGFwdGVyKG1jMzJfYWRhcHRlcnNbaV0uaWQsIDApOwogCiAJCWlmKGN1cnJlbnRfbWNhX3Nsb3QgIT0gTUNBX05PVEZPVU5EKSB7CiAJCQlpZighbWMzMl9wcm9iZTEoZGV2LCBjdXJyZW50X21jYV9zbG90KSkKIAkJCXsKLQkJCQltY2Ffc2V0X2FkYXB0ZXJfbmFtZShjdXJyZW50X21jYV9zbG90LCAKKwkJCQltY2Ffc2V0X2FkYXB0ZXJfbmFtZShjdXJyZW50X21jYV9zbG90LAogCQkJCQkJbWMzMl9hZGFwdGVyc1tpXS5uYW1lKTsKIAkJCQltY2FfbWFya19hc191c2VkKGN1cnJlbnRfbWNhX3Nsb3QpOwogCQkJCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwpAQCAtMjg0LDcgKzI4NCw3IEBACiAJCQkJfQogCQkJCXJldHVybiBkZXY7CiAJCQl9Ci0JCQkKKwogCQl9CiAJfQogCWZyZWVfbmV0ZGV2KGRldik7CkBAIC0yOTgsNyArMjk4LDcgQEAKICAqCiAgKiBEZWNvZGUgdGhlIHNsb3QgZGF0YSBhbmQgY29uZmlndXJlIHRoZSBjYXJkIHN0cnVjdHVyZXMuIEhhdmluZyBkb25lIHRoaXMgd2UKICAqIGNhbiByZXNldCB0aGUgY2FyZCBhbmQgY29uZmlndXJlIGl0LiBUaGUgY2FyZCBkb2VzIGEgZnVsbCBzZWxmIHRlc3QgY3ljbGUKLSAqIGluIGZpcm13YXJlIHNvIHdlIGhhdmUgdG8gd2FpdCBmb3IgaXQgdG8gcmV0dXJuIGFuZCBwb3N0IHVzIGVpdGhlciBhIAorICogaW4gZmlybXdhcmUgc28gd2UgaGF2ZSB0byB3YWl0IGZvciBpdCB0byByZXR1cm4gYW5kIHBvc3QgdXMgZWl0aGVyIGEKICAqIGZhaWx1cmUgY2FzZSBvciBzb21lIGFkZHJlc3NlcyB3ZSB1c2UgdG8gZmluZCB0aGUgYm9hcmQgaW50ZXJuYWxzLgogICovCiAKQEAgLTM0Nyw3ICszNDcsNyBAQAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBmb3VuZCBpbiBzbG90ICVkOiIsIGRldi0+bmFtZSwgY2FyZG5hbWUsIHNsb3QpOwogCiAJUE9TID0gbWNhX3JlYWRfc3RvcmVkX3BvcyhzbG90LCAyKTsKLQkKKwogCWlmKCEoUE9TJjEpKQogCXsKIAkJcHJpbnRrKCIgZGlzYWJsZWQuXG4iKTsKQEAgLTM1Nyw3ICszNTcsNyBAQAogCS8qIEZpbGwgaW4gdGhlICdkZXYnIGZpZWxkcy4gKi8KIAlkZXYtPmJhc2VfYWRkciA9IG1jYV9pb19iYXNlc1soUE9TPj4xKSY3XTsKIAlkZXYtPm1lbV9zdGFydCA9IG1jYV9tZW1fYmFzZXNbKFBPUz4+NCkmN107Ci0JCisKIAlQT1MgPSBtY2FfcmVhZF9zdG9yZWRfcG9zKHNsb3QsIDQpOwogCWlmKCEoUE9TJjEpKQogCXsKQEAgLTM2NiwyMSArMzY2LDIxIEBACiAJfQogCiAJUE9TID0gbWNhX3JlYWRfc3RvcmVkX3BvcyhzbG90LCA1KTsKLQkKKwogCWk9KFBPUz4+NCkmMzsKIAlpZihpPT0zKQogCXsKIAkJcHJpbnRrKCJpbnZhbGlkIG1lbW9yeSB3aW5kb3cuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQorCiAJaSo9MTYzODQ7CiAJaSs9MTYzODQ7Ci0JCisKIAlkZXYtPm1lbV9lbmQ9ZGV2LT5tZW1fc3RhcnQgKyBpOwotCQorCiAJZGV2LT5pcnEgPSAoKFBPUz4+MikmMykrOTsKLQkKKwogCWlmKCFyZXF1ZXN0X3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgTUMzMl9JT19FWFRFTlQsIGNhcmRuYW1lKSkKIAl7CiAJCXByaW50aygiaW8gMHglM2xYLCB3aGljaCBpcyBidXN5LlxuIiwgZGV2LT5iYXNlX2FkZHIpOwpAQCAtMzg5LDIzICszODksMjMgQEAKIAogCXByaW50aygiaW8gMHglM2xYIGlycSAlZCBtZW0gMHglbFggKCVkSylcbiIsCiAJCWRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSwgZGV2LT5tZW1fc3RhcnQsIGkvMTAyNCk7Ci0JCi0JCisKKwogCS8qIFdlIG91Z2h0IHRvIHNldCB0aGUgY2FjaGUgbGluZSBzaXplIGhlcmUuLiAqLwotCQotCQorCisKIAkvKgogCSAqCUdvIFBST00gYnJvd3NpbmcKIAkgKi8KLQkgCisKIAlwcmludGsoIiVzOiBBZGRyZXNzICIsIGRldi0+bmFtZSk7Ci0JIAorCiAJLyogUmV0cmlldmUgYW5kIHByaW50IHRoZSBldGhlcm5ldCBhZGRyZXNzLiAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJewogCQltY2Ffd3JpdGVfcG9zKHNsb3QsIDYsIGkrMTIpOwogCQltY2Ffd3JpdGVfcG9zKHNsb3QsIDcsIDApOwotCQorCiAJCXByaW50aygiICUyLjJ4IiwgZGV2LT5kZXZfYWRkcltpXSA9IG1jYV9yZWFkX3BvcyhzbG90LDMpKTsKIAl9CiAKQEAgLTQxMywxMiArNDEzLDEyIEBACiAJbWNhX3dyaXRlX3BvcyhzbG90LCA3LCAwKTsKIAogCVBPUyA9IG1jYV9yZWFkX3N0b3JlZF9wb3Moc2xvdCwgNCk7Ci0JCisKIAlpZihQT1MmMikKIAkJcHJpbnRrKCIgOiBCTkMgcG9ydCBzZWxlY3RlZC5cbiIpOwotCWVsc2UgCisJZWxzZQogCQlwcmludGsoIiA6IEFVSSBwb3J0IHNlbGVjdGVkLlxuIik7Ci0JCQorCiAJUE9TPWluYihkZXYtPmJhc2VfYWRkcitIT1NUX0NUUkwpOwogCVBPU3w9SE9TVF9DVFJMX0FUVE58SE9TVF9DVFJMX1JFU0VUOwogCVBPUyY9fkhPU1RfQ1RSTF9JTlRFOwpAQCAtNDI4LDkgKzQyOCw5IEBACiAJLyogUmVzZXQgb2ZmICovCiAJUE9TJj1+KEhPU1RfQ1RSTF9BVFROfEhPU1RfQ1RSTF9SRVNFVCk7CiAJb3V0YihQT1MsIGRldi0+YmFzZV9hZGRyK0hPU1RfQ1RSTCk7Ci0JCisKIAl1ZGVsYXkoMzAwKTsKLQkKKwogCS8qCiAJICoJR3JhYiB0aGUgSVJRCiAJICovCkBAIC00NDgsMTQgKzQ0OCwxNCBAQAogCWk9MDsKIAogCWJhc2UgPSBpbmIoZGV2LT5iYXNlX2FkZHIpOwotCQorCiAJd2hpbGUoYmFzZSA9PSAweEZGKQogCXsKIAkJaSsrOwogCQlpZihpID09IDEwMDApCiAJCXsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBib290IGFkYXB0ZXIuXG4iLCBkZXYtPm5hbWUpOwotCQkJZXJyID0gLUVOT0RFVjsgCisJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBlcnJfZXhpdF9pcnE7CiAJCX0KIAkJdWRlbGF5KDEwMDApOwpAQCAtNDcwLDE1ICs0NzAsMTUgQEAKIAkJCQliYXNlPDB4MEE/IiB0ZXN0IGZhaWx1cmUiOiIiKTsKIAkJZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5rbm93biBmYWlsdXJlICVkLlxuIiwgZGV2LT5uYW1lLCBiYXNlKTsKLQkJZXJyID0gLUVOT0RFVjsgCisJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX2V4aXRfaXJxOwogCX0KLQkKKwogCWJhc2U9MDsKIAlmb3IoaT0wO2k8NDtpKyspCiAJewogCQlpbnQgbj0wOwotCQorCiAJCXdoaWxlKCEoaW5iKGRldi0+YmFzZV9hZGRyKzIpJigxPDw1KSkpCiAJCXsKIAkJCW4rKzsKQEAgLTQ5MywzMSArNDkzLDMxIEBACiAKIAkJYmFzZXw9KGluYihkZXYtPmJhc2VfYWRkcik8PCg4KmkpKTsKIAl9Ci0JCisKIAlscC0+ZXhlY19ib3g9aXNhX2J1c190b192aXJ0KGRldi0+bWVtX3N0YXJ0K2Jhc2UpOwotCQotCWJhc2U9bHAtPmV4ZWNfYm94LT5kYXRhWzFdPDwxNnxscC0+ZXhlY19ib3gtPmRhdGFbMF07ICAKLQkKKworCWJhc2U9bHAtPmV4ZWNfYm94LT5kYXRhWzFdPDwxNnxscC0+ZXhlY19ib3gtPmRhdGFbMF07CisKIAlscC0+YmFzZSA9IGRldi0+bWVtX3N0YXJ0K2Jhc2U7Ci0JCi0JbHAtPnJ4X2JveD1pc2FfYnVzX3RvX3ZpcnQobHAtPmJhc2UgKyBscC0+ZXhlY19ib3gtPmRhdGFbMl0pOyAKKworCWxwLT5yeF9ib3g9aXNhX2J1c190b192aXJ0KGxwLT5iYXNlICsgbHAtPmV4ZWNfYm94LT5kYXRhWzJdKTsKIAlscC0+dHhfYm94PWlzYV9idXNfdG9fdmlydChscC0+YmFzZSArIGxwLT5leGVjX2JveC0+ZGF0YVszXSk7Ci0JCisKIAlscC0+c3RhdHMgPSBpc2FfYnVzX3RvX3ZpcnQobHAtPmJhc2UgKyBscC0+ZXhlY19ib3gtPmRhdGFbNV0pOwogCiAJLyoKIAkgKglEZXNjcmlwdG9yIGNoYWlucyAoY2FyZCByZWxhdGl2ZSkKIAkgKi8KLQkgCisKIAlscC0+dHhfY2hhaW4gCQk9IGxwLT5leGVjX2JveC0+ZGF0YVs4XTsgICAvKiBUcmFuc21pdCBsaXN0IHN0YXJ0IG9mZnNldCAqLwogCWxwLT5yeF9jaGFpbiAJCT0gbHAtPmV4ZWNfYm94LT5kYXRhWzEwXTsgIC8qIFJlY2VpdmUgbGlzdCBzdGFydCBvZmZzZXQgKi8KLQlscC0+dHhfbGVuIAkJPSBscC0+ZXhlY19ib3gtPmRhdGFbOV07ICAgLyogVHJhbnNtaXQgbGlzdCBjb3VudCAqLyAKKwlscC0+dHhfbGVuIAkJPSBscC0+ZXhlY19ib3gtPmRhdGFbOV07ICAgLyogVHJhbnNtaXQgbGlzdCBjb3VudCAqLwogCWxwLT5yeF9sZW4gCQk9IGxwLT5leGVjX2JveC0+ZGF0YVsxMV07ICAvKiBSZWNlaXZlIGxpc3QgY291bnQgKi8KIAogCWluaXRfTVVURVhfTE9DS0VEKCZscC0+Y21kX211dGV4KTsKIAlpbml0X2NvbXBsZXRpb24oJmxwLT5leGVjdXRpb25fY21kKTsKIAlpbml0X2NvbXBsZXRpb24oJmxwLT54Y2VpdmVyX2NtZCk7Ci0JCisKIAlwcmludGsoIiVzOiBGaXJtd2FyZSBSZXYgJWQuICVkIFJYIGJ1ZmZlcnMsICVkIFRYIGJ1ZmZlcnMuIEJhc2Ugb2YgMHglMDhYLlxuIiwKIAkJZGV2LT5uYW1lLCBscC0+ZXhlY19ib3gtPmRhdGFbMTJdLCBscC0+cnhfbGVuLCBscC0+dHhfbGVuLCBscC0+YmFzZSk7CiAKQEAgLTU0MywxMiArNTQzLDEyIEBACiAvKioKICAqCW1jMzJfcmVhZHlfcG9sbAkJLQl3YWl0IHVudGlsIHdlIGNhbiBmZWVkIGl0IGEgY29tbWFuZAogICoJQGRldjoJVGhlIGRldmljZSB0byB3YWl0IGZvcgotICoJCisgKgogICoJV2FpdCB1bnRpbCB0aGUgY2FyZCBiZWNvbWVzIHJlYWR5IHRvIGFjY2VwdCBhIGNvbW1hbmQgdmlhIHRoZQogICoJY29tbWFuZCByZWdpc3Rlci4gVGhpcyB0ZWxscyB1cyBub3RoaW5nIGFib3V0IHRoZSBjb21wbGV0aW9uCiAgKglzdGF0dXMgb2YgYW55IHBlbmRpbmcgY29tbWFuZHMgYW5kIHRha2VzIHZlcnkgbGl0dGxlIHRpbWUgYXQgYWxsLgogICovCi0gCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYzMyX3JlYWR5X3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC02MDgsMjIgKzYwOCwyMiBAQAogICoKICAqCVNlbmRzIGV4ZWMgY29tbWFuZHMgaW4gYSB1c2VyIGNvbnRleHQuIFRoaXMgcGVybWl0cyB1cyB0byB3YWl0IGFyb3VuZAogICoJZm9yIHRoZSByZXBsaWVzIGFuZCBhbHNvIHRvIHdhaXQgZm9yIHRoZSBjb21tYW5kIGJ1ZmZlciB0byBjb21wbGV0ZQotICoJZnJvbSBhIHByZXZpb3VzIGNvbW1hbmQgYmVmb3JlIHdlIGV4ZWN1dGUgb3VyIGNvbW1hbmQuIEFmdGVyIG91ciAKKyAqCWZyb20gYSBwcmV2aW91cyBjb21tYW5kIGJlZm9yZSB3ZSBleGVjdXRlIG91ciBjb21tYW5kLiBBZnRlciBvdXIKICAqCWNvbW1hbmQgY29tcGxldGVzIHdlIHdpbGwgYXR0ZW1wdCBhbnkgcGVuZGluZyBtdWx0aWNhc3QgcmVsb2FkCiAgKgl3ZSBibG9ja2VkIG9mZiBieSBob2dnaW5nIHRoZSBleGVjIGJ1ZmZlci4KICAqCi0gKglZb3UgZmVlZCB0aGUgY2FyZCBhIGNvbW1hbmQsIHlvdSB3YWl0LCBpdCBpbnRlcnJ1cHRzIHlvdSBnZXQgYSAKKyAqCVlvdSBmZWVkIHRoZSBjYXJkIGEgY29tbWFuZCwgeW91IHdhaXQsIGl0IGludGVycnVwdHMgeW91IGdldCBhCiAgKglyZXBseS4gQWxsIHdlbGwgYW5kIGdvb2QuIFRoZSBjb21wbGljYXRpb24gYXJpc2VzIGJlY2F1c2UgeW91IHVzZQogICoJY29tbWFuZHMgZm9yIGZpbHRlciBsaXN0IGNoYW5nZXMgd2hpY2ggY29tZSBpbiBhdCBiaCBsZXZlbCBmcm9tIHRoaW5ncwogICoJbGlrZSBJUFY2IGdyb3VwIHN0dWZmLgogICovCi0gIAorCiBzdGF0aWMgaW50IG1jMzJfY29tbWFuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgY21kLCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCXN0cnVjdCBtYzMyX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCByZXQgPSAwOwotCQorCiAJZG93bigmbHAtPmNtZF9tdXRleCk7CiAKIAkvKgpAQCAtNjQwLDcgKzY0MCw3IEBACiAJb3V0YigxPDw2LCBpb2FkZHIrSE9TVF9DTUQpOwogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmbHAtPmV4ZWN1dGlvbl9jbWQpOwotCQorCiAJaWYobHAtPmV4ZWNfYm94LT5tYm94JigxPDwxMykpCiAJCXJldCA9IC0xOwogCkBAIC02NjQsOCArNjY0LDggQEAKICAqCUBkZXY6IFRoZSAzYzUyNyBjYXJkIHRvIGlzc3VlIHRoZSBjb21tYW5kIHRvCiAgKgogICoJVGhpcyBtYXkgYmUgY2FsbGVkIGZyb20gdGhlIGludGVycnVwdCBzdGF0ZSwgd2hlcmUgaXQgaXMgdXNlZAotICoJdG8gcmVzdGFydCB0aGUgcnggcmluZyBpZiB0aGUgY2FyZCBydW5zIG91dCBvZiByeCBidWZmZXJzLiAKLSAqCQorICoJdG8gcmVzdGFydCB0aGUgcnggcmluZyBpZiB0aGUgY2FyZCBydW5zIG91dCBvZiByeCBidWZmZXJzLgorICoKICAqIAlXZSBtdXN0IGZpcnN0IGNoZWNrIGlmIGl0J3Mgb2sgdG8gKHJlKXN0YXJ0IHRoZSB0cmFuc2NlaXZlci4gU2VlCiAgKiAgICAgIG1jMzJfY2xvc2UgZm9yIGRldGFpbHMuCiAgKi8KQEAgLTY3NSwyMSArNjc1LDIxIEBACiAJc3RydWN0IG1jMzJfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLQkvKiBJZ25vcmUgUlggb3ZlcmZsb3cgb24gZGV2aWNlIGNsb3N1cmUgKi8gCisJLyogSWdub3JlIFJYIG92ZXJmbG93IG9uIGRldmljZSBjbG9zdXJlICovCiAJaWYgKGxwLT54Y2VpdmVyX2Rlc2lyZWRfc3RhdGU9PUhBTFRFRCkKLQkJcmV0dXJuOyAKKwkJcmV0dXJuOwogCiAJLyogR2l2ZSB0aGUgY2FyZCB0aGUgb2Zmc2V0IHRvIHRoZSBwb3N0LUVPTC1iaXQgUlggZGVzY3JpcHRvciAqLwotCW1jMzJfcmVhZHlfcG9sbChkZXYpOyAKKwltYzMyX3JlYWR5X3BvbGwoZGV2KTsKIAlscC0+cnhfYm94LT5tYm94PTA7Ci0JbHAtPnJ4X2JveC0+ZGF0YVswXT1scC0+cnhfcmluZ1twcmV2X3J4KGxwLT5yeF9yaW5nX3RhaWwpXS5wLT5uZXh0OyAKLQlvdXRiKEhPU1RfQ01EX1NUQVJUX1JYLCBpb2FkZHIrSE9TVF9DTUQpOyAgICAgIAorCWxwLT5yeF9ib3gtPmRhdGFbMF09bHAtPnJ4X3JpbmdbcHJldl9yeChscC0+cnhfcmluZ190YWlsKV0ucC0+bmV4dDsKKwlvdXRiKEhPU1RfQ01EX1NUQVJUX1JYLCBpb2FkZHIrSE9TVF9DTUQpOwogCi0JbWMzMl9yZWFkeV9wb2xsKGRldik7IAorCW1jMzJfcmVhZHlfcG9sbChkZXYpOwogCWxwLT50eF9ib3gtPm1ib3g9MDsKLQlvdXRiKEhPU1RfQ01EX1JFU1RSVF9UWCwgaW9hZGRyK0hPU1RfQ01EKTsgICAvKiBjYXJkIGlnbm9yZXMgdGhpcyBvbiBSWCByZXN0YXJ0ICovIAotCQotCS8qIFdlIGFyZSBub3QgaW50ZXJydXB0ZWQgb24gc3RhcnQgY29tcGxldGlvbiAqLyAKKwlvdXRiKEhPU1RfQ01EX1JFU1RSVF9UWCwgaW9hZGRyK0hPU1RfQ01EKTsgICAvKiBjYXJkIGlnbm9yZXMgdGhpcyBvbiBSWCByZXN0YXJ0ICovCisKKwkvKiBXZSBhcmUgbm90IGludGVycnVwdGVkIG9uIHN0YXJ0IGNvbXBsZXRpb24gKi8KIH0KIAogCkBAIC03MDMsMjEgKzcwMywyMSBAQAogICoKICAqCVdlIHRoZW4gc2xlZXAgdW50aWwgdGhlIGNhcmQgaGFzIG5vdGlmaWVkIHVzIHRoYXQgYm90aCByeCBhbmQKICAqCXR4IGhhdmUgYmVlbiBzdXNwZW5kZWQuCi0gKi8gCisgKi8KIAotc3RhdGljIHZvaWQgbWMzMl9oYWx0X3RyYW5zY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorc3RhdGljIHZvaWQgbWMzMl9oYWx0X3RyYW5zY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1jMzJfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLQltYzMyX3JlYWR5X3BvbGwoZGV2KTsJCisJbWMzMl9yZWFkeV9wb2xsKGRldik7CiAJbHAtPnJ4X2JveC0+bWJveD0wOwotCW91dGIoSE9TVF9DTURfU1VTUE5EX1JYLCBpb2FkZHIrSE9TVF9DTUQpOwkJCQorCW91dGIoSE9TVF9DTURfU1VTUE5EX1JYLCBpb2FkZHIrSE9TVF9DTUQpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJmxwLT54Y2VpdmVyX2NtZCk7CiAKLQltYzMyX3JlYWR5X3BvbGwoZGV2KTsgCisJbWMzMl9yZWFkeV9wb2xsKGRldik7CiAJbHAtPnR4X2JveC0+bWJveD0wOwotCW91dGIoSE9TVF9DTURfU1VTUE5EX1RYLCBpb2FkZHIrSE9TVF9DTUQpOwkKKwlvdXRiKEhPU1RfQ01EX1NVU1BORF9UWCwgaW9hZGRyK0hPU1RfQ01EKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZscC0+eGNlaXZlcl9jbWQpOwogfQogCkBAIC03NDEsMTQgKzc0MSwxNCBAQAogICoJV2UgdGhlbiBzZXQgdGhlIGVuZC1vZi1saXN0IGJpdCBmb3IgdGhlIGxhc3QgZW50cnkgc28gdGhhdCB0aGUKICAqIAljYXJkIHdpbGwga25vdyB3aGVuIGl0IGhhcyBydW4gb3V0IG9mIGJ1ZmZlcnMuCiAgKi8KLQkgCisKIHN0YXRpYyBpbnQgbWMzMl9sb2FkX3J4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpOwogCXUxNiByeF9iYXNlOwogCXZvbGF0aWxlIHN0cnVjdCBza2JfaGVhZGVyICpwOwotCQorCiAJcnhfYmFzZT1scC0+cnhfY2hhaW47CiAKIAlmb3IoaT0wOyBpPFJYX1JJTkdfTEVOOyBpKyspIHsKQEAgLTc2MSwxNCArNzYxLDE0IEBACiAJCXNrYl9yZXNlcnZlKGxwLT5yeF9yaW5nW2ldLnNrYiwgMTgpOwogCiAJCXA9aXNhX2J1c190b192aXJ0KGxwLT5iYXNlK3J4X2Jhc2UpOwotCQkJCQorCiAJCXAtPmNvbnRyb2w9MDsKIAkJcC0+ZGF0YT1pc2FfdmlydF90b19idXMobHAtPnJ4X3JpbmdbaV0uc2tiLT5kYXRhKTsKIAkJcC0+c3RhdHVzPTA7CiAJCXAtPmxlbmd0aD0xNTMyOwotCQotCQlscC0+cnhfcmluZ1tpXS5wPXA7IAotCQlyeF9iYXNlPXAtPm5leHQ7IAorCisJCWxwLT5yeF9yaW5nW2ldLnA9cDsKKwkJcnhfYmFzZT1wLT5uZXh0OwogCX0KIAogCWxwLT5yeF9yaW5nW2ktMV0ucC0+Y29udHJvbCB8PSBDT05UUk9MX0VPTDsKQEAgLTc3NiwxNCArNzc2LDE0IEBACiAJbHAtPnJ4X3JpbmdfdGFpbD0wOwogCiAJcmV0dXJuIDA7Ci19CQorfQogCiAKIC8qKgogICoJbWMzMl9mbHVzaF9yeF9yaW5nCS0JZnJlZSB0aGUgcmluZyBvZiByZWNlaXZlIGJ1ZmZlcnMKICAqCUBscDogTG9jYWwgZGF0YSBvZiAzYzUyNyB0byBmbHVzaCB0aGUgcnggcmluZyBvZgogICoKLSAqCUZyZWUgdGhlIGJ1ZmZlciBmb3IgZWFjaCByaW5nIHNsb3QuIFRoaXMgbWF5IGJlIGNhbGxlZCAKKyAqCUZyZWUgdGhlIGJ1ZmZlciBmb3IgZWFjaCByaW5nIHNsb3QuIFRoaXMgbWF5IGJlIGNhbGxlZAogICogICAgICBiZWZvcmUgbWMzMl9sb2FkX3J4X3JpbmcoKSwgZWcuIG9uIGVycm9yIGluIG1jMzJfb3BlbigpLgogICogICAgICBSZXF1aXJlcyByeCBza2IgcG9pbnRlcnMgdG8gcG9pbnQgdG8gYSB2YWxpZCBza2IsIG9yIE5VTEwuCiAgKi8KQEAgLTc5MSwxNiArNzkxLDE2IEBACiBzdGF0aWMgdm9pZCBtYzMyX2ZsdXNoX3J4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOyAKKwlpbnQgaTsKIAotCWZvcihpPTA7IGkgPCBSWF9SSU5HX0xFTjsgaSsrKSAKLQl7IAorCWZvcihpPTA7IGkgPCBSWF9SSU5HX0xFTjsgaSsrKQorCXsKIAkJaWYgKGxwLT5yeF9yaW5nW2ldLnNrYikgewogCQkJZGV2X2tmcmVlX3NrYihscC0+cnhfcmluZ1tpXS5za2IpOwogCQkJbHAtPnJ4X3JpbmdbaV0uc2tiID0gTlVMTDsKIAkJfQotCQlscC0+cnhfcmluZ1tpXS5wPU5VTEw7IAotCX0gCisJCWxwLT5yeF9yaW5nW2ldLnA9TlVMTDsKKwl9CiB9CiAKIApAQCAtODA4LDMxICs4MDgsMzEgQEAKICAqCW1jMzJfbG9hZF90eF9yaW5nCS0JbG9hZCB0cmFuc21pdCByaW5nCiAgKglAZGV2OiBUaGUgM2M1MjcgY2FyZCB0byBpc3N1ZSB0aGUgY29tbWFuZCB0bwogICoKLSAqCVRoaXMgc2V0cyB1cCB0aGUgaG9zdCB0cmFuc21pdCBkYXRhLXN0cnVjdHVyZXMuIAorICoJVGhpcyBzZXRzIHVwIHRoZSBob3N0IHRyYW5zbWl0IGRhdGEtc3RydWN0dXJlcy4KICAqCiAgKglGaXJzdCwgd2Ugb2J0YWluIGZyb20gdGhlIGNhcmQgaXQncyBjdXJyZW50IHBvc3Rpb24gaW4gdGhlIHR4CiAgKglyaW5nLCBzbyB0aGF0IHdlIHdpbGwga25vdyB3aGVyZSB0byBiZWdpbiB0cmFuc21pdHRpbmcKICAqCXBhY2tldHMuCi0gKiAJCisgKgogICogCVRoZW4sIHdlIHJlYWQgdGhlICduZXh0JyBwb2ludGVycyBmcm9tIHRoZSBvbi1jYXJkIHR4IHJpbmcgaW50bwogICogIAlvdXIgdHhfcmluZyBhcnJheSB0byByZWR1Y2Ugc2xvdyBzaGFyZWQtbWVtIHJlYWRzLiBGaW5hbGx5LCB3ZQogICogCWludGl0YWxpc2UgdGhlIHR4IGhvdXNlIGtlZXBpbmcgdmFyaWFibGVzLgotICogCi0gKi8gCisgKgorICovCiAKIHN0YXRpYyB2b2lkIG1jMzJfbG9hZF90eF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17IAorewogCXN0cnVjdCBtYzMyX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IHNrYl9oZWFkZXIgKnA7Ci0JaW50IGk7IAorCWludCBpOwogCXUxNiB0eF9iYXNlOwogCi0JdHhfYmFzZT1scC0+dHhfYm94LT5kYXRhWzBdOyAKKwl0eF9iYXNlPWxwLT50eF9ib3gtPmRhdGFbMF07CiAKIAlmb3IoaT0wIDsgaTxUWF9SSU5HX0xFTiA7IGkrKykKIAl7CiAJCXA9aXNhX2J1c190b192aXJ0KGxwLT5iYXNlK3R4X2Jhc2UpOwotCQlscC0+dHhfcmluZ1tpXS5wPXA7IAorCQlscC0+dHhfcmluZ1tpXS5wPXA7CiAJCWxwLT50eF9yaW5nW2ldLnNrYj1OVUxMOwogCiAJCXR4X2Jhc2U9cC0+bmV4dDsKQEAgLTg0MSwxMCArODQxLDEwIEBACiAJLyogLTEgc28gdGhhdCB0eF9yaW5nX2hlYWQgY2Fubm90ICJsYXAiIHR4X3JpbmdfdGFpbCAqLwogCS8qIHNlZSBtYzMyX3R4X3JpbmcgKi8KIAotCWF0b21pY19zZXQoJmxwLT50eF9jb3VudCwgVFhfUklOR19MRU4tMSk7IAotCWF0b21pY19zZXQoJmxwLT50eF9yaW5nX2hlYWQsIDApOyAKLQlscC0+dHhfcmluZ190YWlsPTA7IAotfSAKKwlhdG9taWNfc2V0KCZscC0+dHhfY291bnQsIFRYX1JJTkdfTEVOLTEpOworCWF0b21pY19zZXQoJmxwLT50eF9yaW5nX2hlYWQsIDApOworCWxwLT50eF9yaW5nX3RhaWw9MDsKK30KIAogCiAvKioKQEAgLTg3MSwxMSArODcxLDExIEBACiAJCX0KIAl9CiAKLQlhdG9taWNfc2V0KCZscC0+dHhfY291bnQsIDApOyAKLQlhdG9taWNfc2V0KCZscC0+dHhfcmluZ19oZWFkLCAwKTsgCisJYXRvbWljX3NldCgmbHAtPnR4X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZscC0+dHhfcmluZ19oZWFkLCAwKTsKIAlscC0+dHhfcmluZ190YWlsPTA7CiB9Ci0gCQorCiAKIC8qKgogICoJbWMzMl9vcGVuCS0JaGFuZGxlICd1cCcgb2YgY2FyZApAQCAtOTA5LDcgKzkwOSw3IEBACiAJcmVncz1pbmIoaW9hZGRyK0hPU1RfQ1RSTCk7CiAJcmVnc3w9SE9TVF9DVFJMX0lOVEU7CiAJb3V0YihyZWdzLCBpb2FkZHIrSE9TVF9DVFJMKTsKLQkKKwogCS8qCiAJICogICAgICBBbGxvdyBvdXJzZWx2ZXMgdG8gaXNzdWUgY29tbWFuZHMKIAkgKi8KQEAgLTkyNCw1MiArOTI0LDUyIEBACiAJbWMzMl9jb21tYW5kKGRldiwgNCwgJm9uZSwgMik7CiAKIAkvKgotCSAqCVBva2UgaXQgdG8gbWFrZSBzdXJlIGl0J3MgcmVhbGx5IGRlYWQuIAorCSAqCVBva2UgaXQgdG8gbWFrZSBzdXJlIGl0J3MgcmVhbGx5IGRlYWQuCiAJICovCiAKLQltYzMyX2hhbHRfdHJhbnNjZWl2ZXIoZGV2KTsgCi0JbWMzMl9mbHVzaF90eF9yaW5nKGRldik7IAorCW1jMzJfaGFsdF90cmFuc2NlaXZlcihkZXYpOworCW1jMzJfZmx1c2hfdHhfcmluZyhkZXYpOwogCi0JLyogCi0JICoJQXNrIGNhcmQgdG8gc2V0IHVwIG9uLWNhcmQgZGVzY3JpcHRvcnMgdG8gb3VyIHNwZWMgCi0JICovIAorCS8qCisJICoJQXNrIGNhcmQgdG8gc2V0IHVwIG9uLWNhcmQgZGVzY3JpcHRvcnMgdG8gb3VyIHNwZWMKKwkgKi8KIAotCWlmKG1jMzJfY29tbWFuZChkZXYsIDgsIGRlc2NudW1idWZmcywgNCkpIHsgCisJaWYobWMzMl9jb21tYW5kKGRldiwgOCwgZGVzY251bWJ1ZmZzLCA0KSkgewogCQlwcmludGsoIiVzOiAlcyByZWplY3RlZCBvdXIgYnVmZmVyIGNvbmZpZ3VyYXRpb24hXG4iLAogCSAJICAgICAgIGRldi0+bmFtZSwgY2FyZG5hbWUpOwotCQltYzMyX2Nsb3NlKGRldik7IAotCQlyZXR1cm4gLUVOT0JVRlM7IAorCQltYzMyX2Nsb3NlKGRldik7CisJCXJldHVybiAtRU5PQlVGUzsKIAl9Ci0JCi0JLyogUmVwb3J0IG5ldyBjb25maWd1cmF0aW9uICovIAotCW1jMzJfY29tbWFuZChkZXYsIDYsIE5VTEwsIDApOyAKKworCS8qIFJlcG9ydCBuZXcgY29uZmlndXJhdGlvbiAqLworCW1jMzJfY29tbWFuZChkZXYsIDYsIE5VTEwsIDApOwogCiAJbHAtPnR4X2NoYWluIAkJPSBscC0+ZXhlY19ib3gtPmRhdGFbOF07ICAgLyogVHJhbnNtaXQgbGlzdCBzdGFydCBvZmZzZXQgKi8KIAlscC0+cnhfY2hhaW4gCQk9IGxwLT5leGVjX2JveC0+ZGF0YVsxMF07ICAvKiBSZWNlaXZlIGxpc3Qgc3RhcnQgb2Zmc2V0ICovCi0JbHAtPnR4X2xlbiAJCT0gbHAtPmV4ZWNfYm94LT5kYXRhWzldOyAgIC8qIFRyYW5zbWl0IGxpc3QgY291bnQgKi8gCisJbHAtPnR4X2xlbiAJCT0gbHAtPmV4ZWNfYm94LT5kYXRhWzldOyAgIC8qIFRyYW5zbWl0IGxpc3QgY291bnQgKi8KIAlscC0+cnhfbGVuIAkJPSBscC0+ZXhlY19ib3gtPmRhdGFbMTFdOyAgLyogUmVjZWl2ZSBsaXN0IGNvdW50ICovCi0gCisKIAkvKiBTZXQgTmV0d29yayBBZGRyZXNzICovCiAJbWMzMl9jb21tYW5kKGRldiwgMSwgZGV2LT5kZXZfYWRkciwgNik7Ci0JCisKIAkvKiBTZXQgdGhlIGZpbHRlcnMgKi8KIAltYzMyX3NldF9tdWx0aWNhc3RfbGlzdChkZXYpOwotCQkgICAKLQlpZiAoV09SS0FST1VORF84MjU4NikgeyAKKworCWlmIChXT1JLQVJPVU5EXzgyNTg2KSB7CiAJCXUxNiB6ZXJvX3dvcmQ9MDsKIAkJbWMzMl9jb21tYW5kKGRldiwgMHgwRCwgJnplcm9fd29yZCwgMik7ICAgLyogODI1ODYgYnVnIHdvcmthcm91bmQgb24gICovCiAJfQogCiAJbWMzMl9sb2FkX3R4X3JpbmcoZGV2KTsKLQkKLQlpZihtYzMyX2xvYWRfcnhfcmluZyhkZXYpKSAKKworCWlmKG1jMzJfbG9hZF9yeF9yaW5nKGRldikpCiAJewogCQltYzMyX2Nsb3NlKGRldik7CiAJCXJldHVybiAtRU5PQlVGUzsKIAl9CiAKIAlscC0+eGNlaXZlcl9kZXNpcmVkX3N0YXRlID0gUlVOTklORzsKLQkKKwogCS8qIEFuZCBmaW5hbGx5LCBzZXQgdGhlIGJhbGwgcm9sbGluZy4uLiAqLwogCW1jMzJfc3RhcnRfdHJhbnNjZWl2ZXIoZGV2KTsKIApAQCAtMTAxNSwxNCArMTAxNSwxNCBAQAogICogICAgICBhZnRlciB3ZSd2ZSBlc3RhYmxpc2hlZCBhIHZhbGlkIHBhY2tldCBvbiB0aGUgdHggcmluZyAoYW5kCiAgKiAgICAgIGJlZm9yZSB3ZSBsZXQgdGhlIGNhcmQgInNlZSIgaXQsIHRvIHByZXZlbnQgaXQgcmFjaW5nIHdpdGggdGhlCiAgKiAgICAgIGlycSBoYW5kbGVyKS4KLSAqIAorICoKICAqLwogCiBzdGF0aWMgaW50IG1jMzJfc2VuZF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBoZWFkID0gYXRvbWljX3JlYWQoJmxwLT50eF9yaW5nX2hlYWQpOwotCQorCiAJdm9sYXRpbGUgc3RydWN0IHNrYl9oZWFkZXIgKnAsICpucDsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTEwMzYsMzEgKzEwMzYsMzEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JYXRvbWljX2RlYygmbHAtPnR4X2NvdW50KTsgCisJYXRvbWljX2RlYygmbHAtPnR4X2NvdW50KTsKIAogCS8qIFAgaXMgdGhlIGxhc3Qgc2VuZGluZy9zZW50IGJ1ZmZlciBhcyBhIHBvaW50ZXIgKi8KIAlwPWxwLT50eF9yaW5nW2hlYWRdLnA7Ci0JCQorCiAJaGVhZCA9IG5leHRfdHgoaGVhZCk7CiAKIAkvKiBOUCBpcyB0aGUgYnVmZmVyIHdlIHdpbGwgYmUgbG9hZGluZyAqLwotCW5wPWxwLT50eF9yaW5nW2hlYWRdLnA7IAotCQorCW5wPWxwLT50eF9yaW5nW2hlYWRdLnA7CisKIAkvKiBXZSB3aWxsIG5lZWQgdGhpcyB0byBmbHVzaCB0aGUgYnVmZmVyIG91dCAqLwogCWxwLT50eF9yaW5nW2hlYWRdLnNrYj1za2I7CiAKLQlucC0+bGVuZ3RoICAgICAgPSB1bmxpa2VseShza2ItPmxlbiA8IEVUSF9aTEVOKSA/IEVUSF9aTEVOIDogc2tiLT5sZW47CQkJCisJbnAtPmxlbmd0aCAgICAgID0gdW5saWtlbHkoc2tiLT5sZW4gPCBFVEhfWkxFTikgPyBFVEhfWkxFTiA6IHNrYi0+bGVuOwogCW5wLT5kYXRhCT0gaXNhX3ZpcnRfdG9fYnVzKHNrYi0+ZGF0YSk7CiAJbnAtPnN0YXR1cwk9IDA7Ci0JbnAtPmNvbnRyb2wgICAgID0gQ09OVFJPTF9FT1AgfCBDT05UUk9MX0VPTDsgICAgIAorCW5wLT5jb250cm9sICAgICA9IENPTlRST0xfRU9QIHwgQ09OVFJPTF9FT0w7CiAJd21iKCk7Ci0JCQorCiAJLyoKIAkgKiBUaGUgbmV3IGZyYW1lIGhhcyBiZWVuIHNldHVwOyB3ZSBjYW4gbm93CiAJICogbGV0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciBhbmQgY2FyZCAic2VlIiBpdAogCSAqLwogCi0JYXRvbWljX3NldCgmbHAtPnR4X3JpbmdfaGVhZCwgaGVhZCk7IAorCWF0b21pY19zZXQoJmxwLT50eF9yaW5nX2hlYWQsIGhlYWQpOwogCXAtPmNvbnRyb2wgICAgICY9IH5DT05UUk9MX0VPTDsKIAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKQEAgLTEwNzIsMTMgKzEwNzIsMTMgQEAKICAqCW1jMzJfdXBkYXRlX3N0YXRzCS0JcHVsbCBvZmYgdGhlIG9uIGJvYXJkIHN0YXRpc3RpY3MKICAqCUBkZXY6IDNjNTI3IHRvIHNlcnZpY2UKICAqCi0gKiAKKyAqCiAgKglRdWVyeSBhbmQgcmVzZXQgdGhlIG9uLWNhcmQgc3RhdHMuIFRoZXJlJ3MgdGhlIHNtYWxsIHBvc3NpYmlsaXR5CiAgKglvZiBhIHJhY2UgaGVyZSwgd2hpY2ggd291bGQgcmVzdWx0IGluIGFuIHVuZGVyZXN0aW1hdGlvbiBvZgogICoJYWN0dWFsIGVycm9ycy4gQXMgc3VjaCwgd2UnZCBwcmVmZXIgdG8ga2VlcCBhbGwgb3VyIHN0YXRzCiAgKgljb2xsZWN0aW9uIGluIHNvZnR3YXJlLiBBcyBhIHJ1bGUsIHdlIGRvLiBIb3dldmVyIGl0IGNhbid0IGJlCiAgKgl1c2VkIGZvciByeCBlcnJvcnMgYW5kIGNvbGxpc2lvbnMgYXMsIGJ5IGRlZmF1bHQsIHRoZSBjYXJkIGRpc2NhcmRzCi0gKgliYWQgcnggcGFja2V0cy4gCisgKgliYWQgcnggcGFja2V0cy4KICAqCiAgKglTZXR0aW5nIHRoZSBTQVYgQlAgaW4gdGhlIHJ4IGZpbHRlciBjb21tYW5kIHN1cHBvc2VkbHkKICAqCXN0b3BzIHRoaXMgYmVoYXZpb3VyLiBIb3dldmVyLCB0ZXN0aW5nIHNob3dzIHRoYXQgaXQgb25seSBzZWVtcyB0bwpAQCAtMTA5MCwzMCArMTA5MCwzMCBAQAogc3RhdGljIHZvaWQgbWMzMl91cGRhdGVfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXZvbGF0aWxlIHN0cnVjdCBtYzMyX3N0YXRzICpzdCA9IGxwLT5zdGF0czsgCisJdm9sYXRpbGUgc3RydWN0IG1jMzJfc3RhdHMgKnN0ID0gbHAtPnN0YXRzOwogCi0JdTMyIHJ4X2Vycm9ycz0wOyAKLSAgICAgIAotCXJ4X2Vycm9ycys9bHAtPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzICAgKz1zdC0+cnhfY3JjX2Vycm9yczsgICAgICAgICAKKwl1MzIgcnhfZXJyb3JzPTA7CisKKwlyeF9lcnJvcnMrPWxwLT5uZXRfc3RhdHMucnhfY3JjX2Vycm9ycyAgICs9c3QtPnJ4X2NyY19lcnJvcnM7CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5yeF9jcmNfZXJyb3JzPTA7Ci0JcnhfZXJyb3JzKz1scC0+bmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzICArPXN0LT5yeF9vdmVycnVuX2Vycm9yczsgICAKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X292ZXJydW5fZXJyb3JzPTA7IAotCXJ4X2Vycm9ycys9bHAtPm5ldF9zdGF0cy5yeF9mcmFtZV9lcnJvcnMgKz1zdC0+cnhfYWxpZ25tZW50X2Vycm9yczsgCisJcnhfZXJyb3JzKz1scC0+bmV0X3N0YXRzLnJ4X2ZpZm9fZXJyb3JzICArPXN0LT5yeF9vdmVycnVuX2Vycm9yczsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X292ZXJydW5fZXJyb3JzPTA7CisJcnhfZXJyb3JzKz1scC0+bmV0X3N0YXRzLnJ4X2ZyYW1lX2Vycm9ycyArPXN0LT5yeF9hbGlnbm1lbnRfZXJyb3JzOwogIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X2FsaWdubWVudF9lcnJvcnM9MDsKLQlyeF9lcnJvcnMrPWxwLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycys9c3QtPnJ4X3Rvb3Nob3J0X2Vycm9yczsgCisJcnhfZXJyb3JzKz1scC0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrPXN0LT5yeF90b29zaG9ydF9lcnJvcnM7CiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0LT5yeF90b29zaG9ydF9lcnJvcnM9MDsKIAlyeF9lcnJvcnMrPWxwLT5uZXRfc3RhdHMucnhfbWlzc2VkX2Vycm9ycys9c3QtPnJ4X291dG9mcmVzb3VyY2VfZXJyb3JzOwotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdC0+cnhfb3V0b2ZyZXNvdXJjZV9lcnJvcnM9MDsgCi0gICAgICAgIGxwLT5uZXRfc3RhdHMucnhfZXJyb3JzPXJ4X2Vycm9yczsgCi0JCQkJCQkgICAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3QtPnJ4X291dG9mcmVzb3VyY2VfZXJyb3JzPTA7CisgICAgICAgIGxwLT5uZXRfc3RhdHMucnhfZXJyb3JzPXJ4X2Vycm9yczsKKwogCS8qIE51bWJlciBvZiBwYWNrZXRzIHdoaWNoIHNhdyBvbmUgY29sbGlzaW9uICovCiAJbHAtPm5ldF9zdGF0cy5jb2xsaXNpb25zKz1zdC0+ZGF0YUNbMTBdOwotCXN0LT5kYXRhQ1sxMF09MDsgCisJc3QtPmRhdGFDWzEwXT0wOwogCi0JLyogTnVtYmVyIG9mIHBhY2tldHMgd2hpY2ggc2F3IDItLTE1IGNvbGxpc2lvbnMgKi8gCi0JbHAtPm5ldF9zdGF0cy5jb2xsaXNpb25zKz1zdC0+ZGF0YUNbMTFdOyAKLQlzdC0+ZGF0YUNbMTFdPTA7IAotfQkKKwkvKiBOdW1iZXIgb2YgcGFja2V0cyB3aGljaCBzYXcgMi0tMTUgY29sbGlzaW9ucyAqLworCWxwLT5uZXRfc3RhdHMuY29sbGlzaW9ucys9c3QtPmRhdGFDWzExXTsKKwlzdC0+ZGF0YUNbMTFdPTA7Cit9CiAKIAogLyoqCkBAIC0xMTMwLDcgKzExMzAsNyBAQAogICoJRm9yIGVhY2ggY29tcGxldGVkIHBhY2tldCwgd2Ugd2lsbCBlaXRoZXIgY29weSBpdCBhbmQgcGFzcyBpdCB1cAogICogCXRoZSBzdGFjayBvciwgaWYgdGhlIHBhY2tldCBpcyBuZWFyIE1UVSBzaXplZCwgd2UgYWxsb2NhdGUKICAqCWFub3RoZXIgYnVmZmVyIGFuZCBmbGlwIHRoZSBvbGQgb25lIHVwIHRoZSBzdGFjay4KLSAqIAorICoKICAqCVdlIG11c3Qgc3VjY2VlZCBpbiBrZWVwaW5nIGEgYnVmZmVyIG9uIHRoZSByaW5nLiBJZiBuZWNlc3Nhcnkgd2UKICAqCXdpbGwgdG9zcyBhIHJlY2VpdmVkIHBhY2tldCByYXRoZXIgdGhhbiBsb3NlIGEgcmluZyBlbnRyeS4gT25jZQogICoJdGhlIGZpcnN0IHVuY29tcGxldGVkIGRlc2NyaXB0b3IgaXMgZm91bmQsIHdlIG1vdmUgdGhlCkBAIC0xMTQ3LDcyICsxMTQ3LDcyIEBACiAJaW50IHg9MDsKIAogCXJ4X29sZF90YWlsID0gcnhfcmluZ190YWlsID0gbHAtPnJ4X3JpbmdfdGFpbDsKLQkKLQlkbwotCXsgCi0JCXA9bHAtPnJ4X3JpbmdbcnhfcmluZ190YWlsXS5wOyAKIAotCQlpZighKHAtPnN0YXR1cyAmICgxPDw3KSkpIHsgLyogTm90IENPTVBMRVRFRCAqLyAKKwlkbworCXsKKwkJcD1scC0+cnhfcmluZ1tyeF9yaW5nX3RhaWxdLnA7CisKKwkJaWYoIShwLT5zdGF0dXMgJiAoMTw8NykpKSB7IC8qIE5vdCBDT01QTEVURUQgKi8KIAkJCWJyZWFrOwotCQl9IAorCQl9CiAJCWlmKHAtPnN0YXR1cyAmICgxPDw2KSkgLyogQ09NUExFVEVEX09LICovCi0JCXsJCSAgICAgICAgCisJCXsKIAogCQkJdTE2IGxlbmd0aD1wLT5sZW5ndGg7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOyAKLQkJCXN0cnVjdCBza19idWZmICpuZXdza2I7IAorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCXN0cnVjdCBza19idWZmICpuZXdza2I7CiAKIAkJCS8qIFRyeSB0byBzYXZlIHRpbWUgYnkgYXZvaWRpbmcgYSBjb3B5IG9uIGJpZyBmcmFtZXMgKi8KIAotCQkJaWYgKChsZW5ndGggPiBSWF9DT1BZQlJFQUspIAotCQkJICAgICYmICgobmV3c2tiPWRldl9hbGxvY19za2IoMTUzMikpICE9IE5VTEwpKSAKLQkJCXsgCisJCQlpZiAoKGxlbmd0aCA+IFJYX0NPUFlCUkVBSykKKwkJCSAgICAmJiAoKG5ld3NrYj1kZXZfYWxsb2Nfc2tiKDE1MzIpKSAhPSBOVUxMKSkKKwkJCXsKIAkJCQlza2I9bHAtPnJ4X3JpbmdbcnhfcmluZ190YWlsXS5za2I7CiAJCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7Ci0JCQkJCi0JCQkJc2tiX3Jlc2VydmUobmV3c2tiLDE4KTsgCi0JCQkJbHAtPnJ4X3JpbmdbcnhfcmluZ190YWlsXS5za2I9bmV3c2tiOyAgCi0JCQkJcC0+ZGF0YT1pc2FfdmlydF90b19idXMobmV3c2tiLT5kYXRhKTsgIAotCQkJfSAKLQkJCWVsc2UgCisKKwkJCQlza2JfcmVzZXJ2ZShuZXdza2IsMTgpOworCQkJCWxwLT5yeF9yaW5nW3J4X3JpbmdfdGFpbF0uc2tiPW5ld3NrYjsKKwkJCQlwLT5kYXRhPWlzYV92aXJ0X3RvX2J1cyhuZXdza2ItPmRhdGEpOworCQkJfQorCQkJZWxzZQogCQkJewotCQkJCXNrYj1kZXZfYWxsb2Nfc2tiKGxlbmd0aCsyKTsgIAorCQkJCXNrYj1kZXZfYWxsb2Nfc2tiKGxlbmd0aCsyKTsKIAogCQkJCWlmKHNrYj09TlVMTCkgewotCQkJCQlscC0+bmV0X3N0YXRzLnJ4X2Ryb3BwZWQrKzsgCi0JCQkJCWdvdG8gZHJvcHBlZDsgCisJCQkJCWxwLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOworCQkJCQlnb3RvIGRyb3BwZWQ7CiAJCQkJfQogCiAJCQkJc2tiX3Jlc2VydmUoc2tiLDIpOwogCQkJCW1lbWNweShza2JfcHV0KHNrYiwgbGVuZ3RoKSwKIAkJCQkgICAgICAgbHAtPnJ4X3JpbmdbcnhfcmluZ190YWlsXS5za2ItPmRhdGEsIGxlbmd0aCk7CiAJCQl9Ci0JCQkKLQkJCXNrYi0+cHJvdG9jb2w9ZXRoX3R5cGVfdHJhbnMoc2tiLGRldik7IAotCQkJc2tiLT5kZXY9ZGV2OyAKKworCQkJc2tiLT5wcm90b2NvbD1ldGhfdHlwZV90cmFucyhza2IsZGV2KTsKKwkJCXNrYi0+ZGV2PWRldjsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0gCQkJbHAtPm5ldF9zdGF0cy5yeF9wYWNrZXRzKys7IAotIAkJCWxwLT5uZXRfc3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOyAKKyAJCQlscC0+bmV0X3N0YXRzLnJ4X3BhY2tldHMrKzsKKyAJCQlscC0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKIAkJCW5ldGlmX3J4KHNrYik7CiAJCX0KIAogCWRyb3BwZWQ6Ci0JCXAtPmxlbmd0aCA9IDE1MzI7IAorCQlwLT5sZW5ndGggPSAxNTMyOwogCQlwLT5zdGF0dXMgPSAwOwotCQkKLQkJcnhfcmluZ190YWlsPW5leHRfcngocnhfcmluZ190YWlsKTsgCisKKwkJcnhfcmluZ190YWlsPW5leHRfcngocnhfcmluZ190YWlsKTsKIAl9Ci0gICAgICAgIHdoaWxlKHgrKzw0OCk7ICAKKyAgICAgICAgd2hpbGUoeCsrPDQ4KTsKIAotCS8qIElmIHRoZXJlIHdhcyBhY3R1YWxseSBhIGZyYW1lIHRvIGJlIHByb2Nlc3NlZCwgcGxhY2UgdGhlIEVPTCBiaXQgKi8gCi0JLyogYXQgdGhlIGRlc2NyaXB0b3IgcHJpb3IgdG8gdGhlIG9uZSB0byBiZSBmaWxsZWQgbmV4dCAqLyAKKwkvKiBJZiB0aGVyZSB3YXMgYWN0dWFsbHkgYSBmcmFtZSB0byBiZSBwcm9jZXNzZWQsIHBsYWNlIHRoZSBFT0wgYml0ICovCisJLyogYXQgdGhlIGRlc2NyaXB0b3IgcHJpb3IgdG8gdGhlIG9uZSB0byBiZSBmaWxsZWQgbmV4dCAqLwogCi0JaWYgKHJ4X3JpbmdfdGFpbCAhPSByeF9vbGRfdGFpbCkgCi0JeyAKLQkJbHAtPnJ4X3JpbmdbcHJldl9yeChyeF9yaW5nX3RhaWwpXS5wLT5jb250cm9sIHw9ICBDT05UUk9MX0VPTDsgCi0JCWxwLT5yeF9yaW5nW3ByZXZfcngocnhfb2xkX3RhaWwpXS5wLT5jb250cm9sICAmPSB+Q09OVFJPTF9FT0w7IAorCWlmIChyeF9yaW5nX3RhaWwgIT0gcnhfb2xkX3RhaWwpCisJeworCQlscC0+cnhfcmluZ1twcmV2X3J4KHJ4X3JpbmdfdGFpbCldLnAtPmNvbnRyb2wgfD0gIENPTlRST0xfRU9MOworCQlscC0+cnhfcmluZ1twcmV2X3J4KHJ4X29sZF90YWlsKV0ucC0+Y29udHJvbCAgJj0gfkNPTlRST0xfRU9MOwogCi0JCWxwLT5yeF9yaW5nX3RhaWw9cnhfcmluZ190YWlsOyAKKwkJbHAtPnJ4X3JpbmdfdGFpbD1yeF9yaW5nX3RhaWw7CiAJfQogfQogCkBAIC0xMjI4LDEwICsxMjI4LDEwIEBACiAgKglhbnkgZXJyb3JzLiBUaGlzIGNvbnRpbnVlcyB1bnRpbCB0aGUgdHJhbnNtaXQgcmluZyBpcyBlbXB0aWVkCiAgKglvciB3ZSByZWFjaCBhIGRlc2NyaXB0b3IgdGhhdCBoYXNuJ3QgeWV0IGJlZW4gcHJvY2Vzc2VkIGJ5IHRoZQogICoJY2FyZC4KLSAqIAorICoKICAqLwogCi1zdGF0aWMgdm9pZCBtYzMyX3R4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgdm9pZCBtYzMyX3R4X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHN0cnVjdCBza2JfaGVhZGVyICpucDsKQEAgLTEyNDMsMjggKzEyNDMsMjggQEAKIAkgKiBjb25kaXRpb24gd2l0aCAncXVldWUgZnVsbCcKIAkgKi8KIAotCXdoaWxlIChscC0+dHhfcmluZ190YWlsICE9IGF0b21pY19yZWFkKCZscC0+dHhfcmluZ19oZWFkKSkgIAotCXsgICAKLQkJdTE2IHQ7IAorCXdoaWxlIChscC0+dHhfcmluZ190YWlsICE9IGF0b21pY19yZWFkKCZscC0+dHhfcmluZ19oZWFkKSkKKwl7CisJCXUxNiB0OwogCi0JCXQ9bmV4dF90eChscC0+dHhfcmluZ190YWlsKTsgCi0JCW5wPWxwLT50eF9yaW5nW3RdLnA7IAorCQl0PW5leHRfdHgobHAtPnR4X3JpbmdfdGFpbCk7CisJCW5wPWxwLT50eF9yaW5nW3RdLnA7CiAKLQkJaWYoIShucC0+c3RhdHVzICYgKDE8PDcpKSkgCisJCWlmKCEobnAtPnN0YXR1cyAmICgxPDw3KSkpCiAJCXsKLQkJCS8qIE5vdCBDT01QTEVURUQgKi8gCi0JCQlicmVhazsgCi0JCX0gCisJCQkvKiBOb3QgQ09NUExFVEVEICovCisJCQlicmVhazsKKwkJfQogCQlscC0+bmV0X3N0YXRzLnR4X3BhY2tldHMrKzsKIAkJaWYoIShucC0+c3RhdHVzICYgKDE8PDYpKSkgLyogTm90IENPTVBMRVRFRF9PSyAqLwogCQl7Ci0JCQlscC0+bmV0X3N0YXRzLnR4X2Vycm9ycysrOyAgIAorCQkJbHAtPm5ldF9zdGF0cy50eF9lcnJvcnMrKzsKIAogCQkJc3dpdGNoKG5wLT5zdGF0dXMmMHgwRikKIAkJCXsKIAkJCQljYXNlIDE6CiAJCQkJCWxwLT5uZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKLQkJCQkJYnJlYWs7IC8qIE1heCBjb2xsaXNpb25zICovIAorCQkJCQlicmVhazsgLyogTWF4IGNvbGxpc2lvbnMgKi8KIAkJCQljYXNlIDI6CiAJCQkJCWxwLT5uZXRfc3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCQkJYnJlYWs7CkBAIC0xMjczLDEwICsxMjczLDEwIEBACiAJCQkJCWJyZWFrOwogCQkJCWNhc2UgNDoKIAkJCQkJbHAtPm5ldF9zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7Ci0JCQkJCWJyZWFrOyAgLyogQ1RTIExvc3QgKi8gCisJCQkJCWJyZWFrOyAgLyogQ1RTIExvc3QgKi8KIAkJCQljYXNlIDU6CiAJCQkJCWxwLT5uZXRfc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKLQkJCQkJYnJlYWs7IC8qIFRyYW5zbWl0IHRpbWVvdXQgKi8gCisJCQkJCWJyZWFrOyAvKiBUcmFuc21pdCB0aW1lb3V0ICovCiAJCQl9CiAJCX0KIAkJLyogUGFja2V0cyBhcmUgc2VudCBpbiBvcmRlciAtIHRoaXMgaXMKQEAgLTEyODgsMTAgKzEyODgsMTAgQEAKIAkJYXRvbWljX2luYygmbHAtPnR4X2NvdW50KTsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCi0JCWxwLT50eF9yaW5nX3RhaWw9dDsgCisJCWxwLT50eF9yaW5nX3RhaWw9dDsKIAl9CiAKLX0gCit9CiAKIAogLyoqCkBAIC0xMzIyLDEzICsxMzIyLDEzIEBACiAJc3RydWN0IG1jMzJfbG9jYWwgKmxwOwogCWludCBpb2FkZHIsIHN0YXR1cywgYm9ndXNjb3VudCA9IDA7CiAJaW50IHJ4X2V2ZW50ID0gMDsKLQlpbnQgdHhfZXZlbnQgPSAwOyAKLQkKKwlpbnQgdHhfZXZlbnQgPSAwOworCiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBpcnEgJWQgZm9yIHVua25vd24gZGV2aWNlLlxuIiwgY2FyZG5hbWUsIGlycSk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0gCisKIAlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlscCA9IG5ldGRldl9wcml2KGRldik7CiAKQEAgLTEzMzgsMTkgKzEzMzgsMTkgQEAKIAl7CiAJCXN0YXR1cz1pbmIoaW9hZGRyK0hPU1RfQ01EKTsKIAotI2lmZGVmIERFQlVHX0lSUQkJCisjaWZkZWYgREVCVUdfSVJRCiAJCXByaW50aygiU3RhdHVzIFRYJWQgUlglZCBFWCVkIE9WJWQgQkMlZFxuIiwKIAkJCShzdGF0dXMmNyksIChzdGF0dXM+PjMpJjcsIChzdGF0dXM+PjYpJjEsCiAJCQkoc3RhdHVzPj43KSYxLCBib2d1c2NvdW50KTsKICNlbmRpZgotCQkJCisKIAkJc3dpdGNoKHN0YXR1cyY3KQogCQl7CiAJCQljYXNlIDA6CiAJCQkJYnJlYWs7CiAJCQljYXNlIDY6IC8qIFRYIGZhaWwgKi8KIAkJCWNhc2UgMjoJLyogVFggb2sgKi8KLQkJCQl0eF9ldmVudCA9IDE7IAorCQkJCXR4X2V2ZW50ID0gMTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMzogLyogSGFsdCAqLwogCQkJY2FzZSA0OiAvKiBBYm9ydCAqLwpAQCAtMTM2NSw3ICsxMzY1LDcgQEAKIAkJCWNhc2UgMDoKIAkJCQlicmVhazsKIAkJCWNhc2UgMjoJLyogUlggKi8KLQkJCQlyeF9ldmVudD0xOyAKKwkJCQlyeF9ldmVudD0xOwogCQkJCWJyZWFrOwogCQkJY2FzZSAzOiAvKiBIYWx0ICovCiAJCQljYXNlIDQ6IC8qIEFib3J0ICovCkBAIC0xMzc1LDEyICsxMzc1LDEyIEBACiAJCQkJLyogT3V0IG9mIFJYIGJ1ZmZlcnMgc3RhdCAqLwogCQkJCS8qIE11c3QgcmVzdGFydCByeCAqLwogCQkJCWxwLT5uZXRfc3RhdHMucnhfZHJvcHBlZCsrOwotCQkJCW1jMzJfcnhfcmluZyhkZXYpOyAKLQkJCQltYzMyX3N0YXJ0X3RyYW5zY2VpdmVyKGRldik7IAorCQkJCW1jMzJfcnhfcmluZyhkZXYpOworCQkJCW1jMzJfc3RhcnRfdHJhbnNjZWl2ZXIoZGV2KTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKCIlczogc3RyYW5nZSByeCBhY2sgJWRcbiIsIAotCQkJCQlkZXYtPm5hbWUsIHN0YXR1cyY3KTsJCQkKKwkJCQlwcmludGsoIiVzOiBzdHJhbmdlIHJ4IGFjayAlZFxuIiwKKwkJCQkJZGV2LT5uYW1lLCBzdGF0dXMmNyk7CiAJCX0KIAkJc3RhdHVzPj49MzsKIAkJaWYoc3RhdHVzJjEpCkBAIC0xMzg5LDEwICsxMzg5LDEwIEBACiAJCQkgKiBObyB0aHJlYWQgaXMgd2FpdGluZzogd2UgbmVlZCB0byB0aWR5CiAJCQkgKiB1cCBvdXJzZWxmLgogCQkJICovCi0JCQkJICAgCisKIAkJCWlmIChscC0+Y21kX25vbmJsb2NraW5nKSB7CiAJCQkJdXAoJmxwLT5jbWRfbXV0ZXgpOwotCQkJCWlmIChscC0+bWNfcmVsb2FkX3dhaXQpIAorCQkJCWlmIChscC0+bWNfcmVsb2FkX3dhaXQpCiAJCQkJCW1jMzJfcmVzZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAkJCX0KIAkJCWVsc2UgY29tcGxldGUoJmxwLT5leGVjdXRpb25fY21kKTsKQEAgLTE0MDEsMjIgKzE0MDEsMjIgQEAKIAkJewogCQkJLyoKIAkJCSAqCVdlIGdldCBpbnRlcnJ1cHRlZCBvbmNlIHBlcgotCQkJICoJY291bnRlciB0aGF0IGlzIGFib3V0IHRvIG92ZXJmbG93LiAKKwkJCSAqCWNvdW50ZXIgdGhhdCBpcyBhYm91dCB0byBvdmVyZmxvdy4KIAkJCSAqLwogCi0JCQltYzMyX3VwZGF0ZV9zdGF0cyhkZXYpOwkJCQorCQkJbWMzMl91cGRhdGVfc3RhdHMoZGV2KTsKIAkJfQogCX0KIAogCiAJLyoKLQkgKglQcm9jZXNzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSByaW5ncyAKKwkgKglQcm9jZXNzIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSByaW5ncwogICAgICAgICAgKi8KIAotCWlmKHR4X2V2ZW50KSAKKwlpZih0eF9ldmVudCkKIAkJbWMzMl90eF9yaW5nKGRldik7Ci0JIAotCWlmKHJ4X2V2ZW50KSAKKworCWlmKHJ4X2V2ZW50KQogCQltYzMyX3J4X3JpbmcoZGV2KTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTE0MzUsNyArMTQzNSw3IEBACiAgKglkcml2ZXIuICBPdGhlcndpc2UsIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGNhcmQgbWF5IHJ1biBvdXQKICAqCW9mIHJlY2VpdmUgYnVmZmVycyBhbmQgcmVzdGFydCB0aGUgdHJhbnNjZWl2ZXIgd2hpbGUgd2UncmUKICAqCXRyeWluZyB0byBjbG9zZSBpdC4KLSAqIAorICoKICAqCVdlIGFib3J0IGFueSByZWNlaXZlIGFuZCB0cmFuc21pdHMgZ29pbmcgb24gYW5kIHRoZW4gd2FpdCB1bnRpbAogICoJYW55IHBlbmRpbmcgZXhlYyBjb21tYW5kcyBoYXZlIGNvbXBsZXRlZCBpbiBvdGhlciBjb2RlIHRocmVhZHMuCiAgKglJbiB0aGVvcnkgd2UgY2FuJ3QgZ2V0IGhlcmUgd2hpbGUgdGhhdCBpcyB0cnVlLCBpbiBwcmFjdGljZSBJIGFtCkBAIC0xNDUyLDcgKzE0NTIsNyBAQAogCiAJdTggcmVnczsKIAl1MTYgb25lPTE7Ci0JCisKIAlscC0+eGNlaXZlcl9kZXNpcmVkX3N0YXRlID0gSEFMVEVEOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtMTQ2NCwyMiArMTQ2NCwyMiBAQAogCiAJLyogU2h1dCBkb3duIHRoZSB0cmFuc2NlaXZlciAqLwogCi0JbWMzMl9oYWx0X3RyYW5zY2VpdmVyKGRldik7IAotCQorCW1jMzJfaGFsdF90cmFuc2NlaXZlcihkZXYpOworCiAJLyogRW5zdXJlIHdlIGlzc3VlIG5vIG1vcmUgY29tbWFuZHMgYmV5b25kIHRoaXMgcG9pbnQgKi8KIAogCWRvd24oJmxwLT5jbWRfbXV0ZXgpOwotCQotCS8qIE9rIHRoZSBjYXJkIGlzIG5vdyBzdG9wcGluZyAqLwkKLQkKKworCS8qIE9rIHRoZSBjYXJkIGlzIG5vdyBzdG9wcGluZyAqLworCiAJcmVncz1pbmIoaW9hZGRyK0hPU1RfQ1RSTCk7CiAJcmVncyY9fkhPU1RfQ1RSTF9JTlRFOwogCW91dGIocmVncywgaW9hZGRyK0hPU1RfQ1RSTCk7CiAKIAltYzMyX2ZsdXNoX3J4X3JpbmcoZGV2KTsKIAltYzMyX2ZsdXNoX3R4X3JpbmcoZGV2KTsKLQkJCi0JbWMzMl91cGRhdGVfc3RhdHMoZGV2KTsgCisKKwltYzMyX3VwZGF0ZV9zdGF0cyhkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDkwLDE1ICsxNDkwLDE1IEBACiAgKglAZGV2OiBUaGUgM2M1MjcgY2FyZCB0byBoYW5kbGUKICAqCiAgKglXZSd2ZSBjb2xsZWN0ZWQgYWxsIHRoZSBzdGF0cyB3ZSBjYW4gaW4gc29mdHdhcmUgYWxyZWFkeS4gTm93Ci0gKglpdCdzIHRpbWUgdG8gdXBkYXRlIHRob3NlIGtlcHQgb24tY2FyZCBhbmQgcmV0dXJuIHRoZSBsb3QuIAotICogCisgKglpdCdzIHRpbWUgdG8gdXBkYXRlIHRob3NlIGtlcHQgb24tY2FyZCBhbmQgcmV0dXJuIHRoZSBsb3QuCisgKgogICovCiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbWMzMl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWMzMl9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQotCW1jMzJfdXBkYXRlX3N0YXRzKGRldik7IAorCisJbWMzMl91cGRhdGVfc3RhdHMoZGV2KTsKIAlyZXR1cm4gJmxwLT5uZXRfc3RhdHM7CiB9CiAKQEAgLTE1MDYsNyArMTUwNiw3IEBACiAvKioKICAqCWRvX21jMzJfc2V0X211bHRpY2FzdF9saXN0CS0JYXR0ZW1wdCB0byB1cGRhdGUgbXVsdGljYXN0cwogICoJQGRldjogM2M1MjcgZGV2aWNlIHRvIGxvYWQgdGhlIGxpc3Qgb24KLSAqCUByZXRyeTogaW5kaWNhdGVzIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBjYWxsLiAKKyAqCUByZXRyeTogaW5kaWNhdGVzIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBjYWxsLgogICoKICAqCiAgKiAJQWN0dWFsbHkgc2V0IG9yIGNsZWFyIHRoZSBtdWx0aWNhc3QgZmlsdGVyIGZvciB0aGlzIGFkYXB0b3IuIFRoZQpAQCAtMTUxNCwyMiArMTUxNCwyMiBAQAogICoJc3RhdGUgYXMgaXQgbWF5IHRha2UgbXVsdGlwbGUgY2FsbHMgdG8gZ2V0IHRoZSBjb21tYW5kIHNlcXVlbmNlCiAgKgljb21wbGV0ZWQuIFdlIGp1c3Qga2VlcCB0cnlpbmcgdG8gc2NoZWR1bGUgdGhlIGxvYWRzIHVudGlsIHdlCiAgKgltYW5hZ2UgdG8gcHJvY2VzcyB0aGVtIGFsbC4KLSAqIAotICoJbnVtX2FkZHJzID09IC0xCVByb21pc2N1b3VzIG1vZGUsIHJlY2VpdmUgYWxsIHBhY2tldHMKLSAqIAotICoJbnVtX2FkZHJzID09IDAJTm9ybWFsIG1vZGUsIGNsZWFyIG11bHRpY2FzdCBsaXN0Ci0gKiAKLSAqCW51bV9hZGRycyA+IDAJTXVsdGljYXN0IG1vZGUsIHJlY2VpdmUgbm9ybWFsIGFuZCBNQyBwYWNrZXRzLCAKLSAqCQkJYW5kIGRvIGJlc3QtZWZmb3J0IGZpbHRlcmluZy4gCiAgKgotICoJU2VlIG1jMzJfdXBkYXRlX3N0YXRzKCkgcmVnYXJkcyBzZXR0aW5nIHRoZSBTQVYgQlAgYml0LiAKKyAqCW51bV9hZGRycyA9PSAtMQlQcm9taXNjdW91cyBtb2RlLCByZWNlaXZlIGFsbCBwYWNrZXRzCisgKgorICoJbnVtX2FkZHJzID09IDAJTm9ybWFsIG1vZGUsIGNsZWFyIG11bHRpY2FzdCBsaXN0CisgKgorICoJbnVtX2FkZHJzID4gMAlNdWx0aWNhc3QgbW9kZSwgcmVjZWl2ZSBub3JtYWwgYW5kIE1DIHBhY2tldHMsCisgKgkJCWFuZCBkbyBiZXN0LWVmZm9ydCBmaWx0ZXJpbmcuCisgKgorICoJU2VlIG1jMzJfdXBkYXRlX3N0YXRzKCkgcmVnYXJkcyBzZXR0aW5nIHRoZSBTQVYgQlAgYml0LgogICoKICAqLwogCiBzdGF0aWMgdm9pZCBkb19tYzMyX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcmV0cnkpCiB7CiAJc3RydWN0IG1jMzJfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MTYgZmlsdCA9ICgxPDwyKTsgLyogU2F2ZSBCYWQgUGFja2V0cywgZm9yIHN0YXRzIHB1cnBvc2VzICovIAorCXUxNiBmaWx0ID0gKDE8PDIpOyAvKiBTYXZlIEJhZCBQYWNrZXRzLCBmb3Igc3RhdHMgcHVycG9zZXMgKi8KIAogCWlmIChkZXYtPmZsYWdzJklGRl9QUk9NSVNDKQogCQkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLwpAQCAtMTU0NCw5ICsxNTQ0LDkgQEAKIAkJdW5zaWduZWQgY2hhciBibG9ja1s2Ml07CiAJCXVuc2lnbmVkIGNoYXIgKmJwOwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtYz1kZXYtPm1jX2xpc3Q7Ci0JCQorCiAJCWludCBpOwotCSAgICAgICAKKwogCQlpZihyZXRyeT09MCkKIAkJCWxwLT5tY19saXN0X3ZhbGlkID0gMDsKIAkJaWYoIWxwLT5tY19saXN0X3ZhbGlkKQpAQCAtMTU1NCw3ICsxNTU0LDcgQEAKIAkJCWJsb2NrWzFdPTA7CiAJCQlibG9ja1swXT1kZXYtPm1jX2NvdW50OwogCQkJYnA9YmxvY2srMjsKLQkJCisKIAkJCWZvcihpPTA7aTxkZXYtPm1jX2NvdW50O2krKykKIAkJCXsKIAkJCQltZW1jcHkoYnAsIGRtYy0+ZG1pX2FkZHIsIDYpOwpAQCAtMTU2OSwxMiArMTU2OSwxMiBAQAogCQkJbHAtPm1jX2xpc3RfdmFsaWQ9MTsKIAkJfQogCX0KLQkKLQlpZihtYzMyX2NvbW1hbmRfbm93YWl0KGRldiwgMCwgJmZpbHQsIDIpPT0tMSkgCisKKwlpZihtYzMyX2NvbW1hbmRfbm93YWl0KGRldiwgMCwgJmZpbHQsIDIpPT0tMSkKIAl7CiAJCWxwLT5tY19yZWxvYWRfd2FpdCA9IDE7Ci0JfSAKLQllbHNlIHsgCisJfQorCWVsc2UgewogCQlscC0+bWNfcmVsb2FkX3dhaXQgPSAwOwogCX0KIH0KQEAgLTE2MjcsNyArMTYyNyw3IEBACiAJbWMzMl9kZWJ1ZyA9IGxldmVsOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X3NldF9tc2dsZXZlbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTI3LmggYi9kcml2ZXJzL25ldC8zYzUyNy5oCmluZGV4IDUzYjViMDcuLjc1ZTI4ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTI3LmgKKysrIGIvZHJpdmVycy9uZXQvM2M1MjcuaApAQCAtNSw3ICs1LDcgQEAKIC8qCiAgKglSZWdpc3RlcnMKICAqLwotICAKKwogI2RlZmluZSBIT1NUX0NNRAkJMAogI2RlZmluZSAgICAgICAgIEhPU1RfQ01EX1NUQVJUX1JYICAgKDE8PDMpCiAjZGVmaW5lICAgICAgICAgSE9TVF9DTURfU1VTUE5EX1JYICAoMzw8MykKQEAgLTYzLDcgKzYzLDcgQEAKIAl1MzIgdHhfdW5kZXJydW5fZXJyb3JzOwogCXUzMiB0eF9jdHNfZXJyb3JzOwogCXUzMiB0eF90aW1lb3V0X2Vycm9yczsKLQkKKwogCS8qIHZhcmlvdXMgY3J1ZnQgKi8KIAl1MzIgZGF0YUFbNl07CiAJdTE2IGRhdGFCWzVdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggODBlOGNhMC4uZTFlNTNiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTl4LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1OXguYwpAQCAtNzI5LDcgKzcyOSw3IEBACiAjZW5kaWYKIHN0YXRpYyB2b2lkIHZvcnRleF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgYWNwaV9zZXRfV09MKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB2b3J0ZXhfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHZvcnRleF9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIHNldF84MDIxcV9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBlbmFibGUpOwogCiAvKiBUaGlzIGRyaXZlciB1c2VzICdvcHRpb25zJyB0byBwYXNzIHRoZSBtZWRpYSB0eXBlLCBmdWxsLWR1cGxleCBmbGFnLCBldGMuICovCkBAIC03OTYsNyArNzk2LDcgQEAKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCSh2cC0+ZnVsbF9idXNfbWFzdGVyX3J4ID8gYm9vbWVyYW5nX2ludGVycnVwdDp2b3J0ZXhfaW50ZXJydXB0KShkZXYtPmlycSxkZXYsTlVMTCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfSAKK30KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1BNCkBAIC05MDQsNyArOTA0LDcgQEAKIAogCXZwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpb2FkZHIgPSB2cC0+aW9hZGRyOwotCQorCiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpb3dyaXRlMTYoVG90YWxSZXNldHwweDE0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciwgVk9SVEVYX1RPVEFMX1NJWkUpOwpAQCAtOTM1LDcgKzkzNSw3IEBACiAJCWVpc2FfZm91bmQgPSAxOwogCX0KICNlbmRpZgotCQorCiAJLyogU3BlY2lhbCBjb2RlIHRvIHdvcmstYXJvdW5kIHRoZSBDb21wYXEgUENJIEJJT1MzMiBwcm9ibGVtLiAqLwogCWlmIChjb21wYXFfaW9hZGRyKSB7CiAJCXZvcnRleF9wcm9iZTEoTlVMTCwgaW9wb3J0X21hcChjb21wYXFfaW9hZGRyLCBWT1JURVhfVE9UQUxfU0laRSksCkBAIC05NTMsNyArOTUzLDcgQEAKIAlzdHJ1Y3Qgdm9ydGV4X2NoaXBfaW5mbyAqdmNpOwogCXZvaWQgX19pb21lbSAqaW9hZGRyOwogCi0JLyogd2FrZSB1cCBhbmQgZW5hYmxlIGRldmljZSAqLwkJCisJLyogd2FrZSB1cCBhbmQgZW5hYmxlIGRldmljZSAqLwogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjIDwgMCkKIAkJZ290byBvdXQ7CkBAIC0xMDg5LDcgKzEwODksNyBAQAogCQlpZiAocmVxdWVzdF9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIHZjaS0+aW9fc2l6ZSwgcHJpbnRfbmFtZSkgIT0gTlVMTCkKIAkJCXZwLT5tdXN0X2ZyZWVfcmVnaW9uID0gMTsKIAotCQkvKiBlbmFibGUgYnVzLW1hc3RlcmluZyBpZiBuZWNlc3NhcnkgKi8JCQorCQkvKiBlbmFibGUgYnVzLW1hc3RlcmluZyBpZiBuZWNlc3NhcnkgKi8KIAkJaWYgKHZjaS0+ZmxhZ3MgJiBQQ0lfVVNFU19NQVNURVIpCiAJCQlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtMTEzMSw3ICsxMTMxLDcgQEAKIAl2cC0+dHhfcmluZ19kbWEgPSB2cC0+cnhfcmluZ19kbWEgKyBzaXplb2Yoc3RydWN0IGJvb21fcnhfZGVzYykgKiBSWF9SSU5HX1NJWkU7CiAKIAkvKiBpZiB3ZSBhcmUgYSBQQ0kgZHJpdmVyLCB3ZSBzdG9yZSBpbmZvIGluIHBkZXYtPmRyaXZlcl9kYXRhCi0JICogaW5zdGVhZCBvZiBhIG1vZHVsZSBsaXN0ICovCQorCSAqIGluc3RlYWQgb2YgYSBtb2R1bGUgbGlzdCAqLwogCWlmIChwZGV2KQogCQlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAlpZiAoZWRldikKQEAgLTEzOTMsNyArMTM5Myw3IEBACiAJZGV2LT50eF90aW1lb3V0ID0gdm9ydGV4X3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9ICh3YXRjaGRvZyAqIEhaKSAvIDEwMDA7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBvbGxfdm9ydGV4OyAKKwlkZXYtPnBvbGxfY29udHJvbGxlciA9IHBvbGxfdm9ydGV4OwogI2VuZGlmCiAJaWYgKHBkZXYpIHsKIAkJdnAtPnBtX3N0YXRlX3ZhbGlkID0gMTsKQEAgLTE4NzUsMTEgKzE4NzUsMTEgQEAKIAkJdnAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCX0KLQkKKwogCS8qIElzc3VlIFR4IEVuYWJsZSAqLwogCWlvd3JpdGUxNihUeEVuYWJsZSwgaW9hZGRyICsgRUwzX0NNRCk7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JCisKIAkvKiBTd2l0Y2ggdG8gcmVnaXN0ZXIgc2V0IDcgZm9yIG5vcm1hbCB1c2UuICovCiAJRUwzV0lORE9XKDcpOwogfQpAQCAtMjMxNiwxMCArMjMxNiwxMCBAQAogCQkJCWlmICgodnAtPnR4X3JpbmdbZW50cnldLnN0YXR1cyAmIEROX0NPTVBMRVRFKSA9PSAwKQogCQkJCQlicmVhazsJCQkvKiBJdCBzdGlsbCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQuICovCiAjZW5kaWYKLQkJCQkJCisKIAkJCQlpZiAodnAtPnR4X3NrYnVmZltlbnRyeV0pIHsKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHZwLT50eF9za2J1ZmZbZW50cnldOwotI2lmIERPX1pFUk9DT1BZCQkJCQkKKyNpZiBET19aRVJPQ09QWQogCQkJCQlpbnQgaTsKIAkJCQkJZm9yIChpPTA7IGk8PXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKIAkJCQkJCQlwY2lfdW5tYXBfc2luZ2xlKFZPUlRFWF9QQ0kodnApLApAQCAtMjYzMyw3ICsyNjMzLDcgQEAKIAkJCQkJCSJub3QgdXNpbmcgdGhlbSFcbiIsIGRldi0+bmFtZSk7CiAJfQogI2VuZGlmCi0JCQorCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAKIAlpZiAodnAtPmZ1bGxfYnVzX21hc3Rlcl9yeCkgeyAvKiBGcmVlIEJvb21lcmFuZyBidXMgbWFzdGVyIFJ4IGJ1ZmZlcnMuICovCkBAIC0yNjc1LDcgKzI2NzUsNyBAQAogCWlmICh2b3J0ZXhfZGVidWcgPiAwKSB7CiAJc3RydWN0IHZvcnRleF9wcml2YXRlICp2cCA9IG5ldGRldl9wcml2KGRldik7CiAJCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdnAtPmlvYWRkcjsKLQkJCisKIAkJaWYgKHZwLT5mdWxsX2J1c19tYXN0ZXJfdHgpIHsKIAkJCWludCBpOwogCQkJaW50IHN0YWxsZWQgPSBpb3JlYWQzMihpb2FkZHIgKyBQa3RTdGF0dXMpICYgMHgwNDsJLyogUG9zc2libGUgcmFjeS4gQnV0IGl0J3Mgb25seSBkZWJ1ZyBzdHVmZiAqLwpAQCAtMjg3Myw3ICsyODczLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdm9ydGV4X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2b3J0ZXhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHZvcnRleF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IHZvcnRleF9nZXRfc3RyaW5ncywKIAkuZ2V0X21zZ2xldmVsICAgICAgICAgICA9IHZvcnRleF9nZXRfbXNnbGV2ZWwsCkBAIC0yOTI4LDcgKzI5MjgsNyBAQAogCWludCBuZXdfbW9kZTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJaWYgKHZvcnRleF9kZWJ1ZyA+IDApCisJCWlmICh2b3J0ZXhfZGVidWcgPiAzKQogCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogU2V0dGluZyBwcm9taXNjdW91cyBtb2RlLlxuIiwgZGV2LT5uYW1lKTsKIAkJbmV3X21vZGUgPSBTZXRSeEZpbHRlcnxSeFN0YXRpb258UnhNdWx0aWNhc3R8UnhCcm9hZGNhc3R8UnhQcm9tOwogCX0gZWxzZQlpZiAoKGRldi0+bWNfbGlzdCkgIHx8ICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKQEAgLTMxNjksNyArMzE2OSw3IEBACiB7CiAJaW50IHBjaV9yYywgZWlzYV9yYzsKIAotCXBjaV9yYyA9IHBjaV9tb2R1bGVfaW5pdCgmdm9ydGV4X2RyaXZlcik7CisJcGNpX3JjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdm9ydGV4X2RyaXZlcik7CiAJZWlzYV9yYyA9IHZvcnRleF9laXNhX2luaXQoKTsKIAogCWlmIChwY2lfcmMgPT0gMCkKQEAgLTMxOTAsNyArMzE5MCw3IEBACiAJLyogVGFrZSBjYXJlIG9mIHRoZSBFSVNBIGRldmljZXMgKi8KIAllaXNhX2RyaXZlcl91bnJlZ2lzdGVyKCZ2b3J0ZXhfZWlzYV9kcml2ZXIpOwogI2VuZGlmCi0JCisKIAlpZiAoY29tcGFxX25ldF9kZXZpY2UpIHsKIAkJdnAgPSBjb21wYXFfbmV0X2RldmljZS0+cHJpdjsKIAkJaW9hZGRyID0gaW9wb3J0X21hcChjb21wYXFfbmV0X2RldmljZS0+YmFzZV9hZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvNzk5MC5jIGIvZHJpdmVycy9uZXQvNzk5MC5jCmluZGV4IDg2NjMzYzUuLmRiN2IxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0Lzc5OTAuYworKysgYi9kcml2ZXJzL25ldC83OTkwLmMKQEAgLTEsNyArMSw3IEBACi0vKiAKLSAqIDc5OTAuYyAtLSBMQU5DRSBldGhlcm5ldCBJQyBnZW5lcmljIHJvdXRpbmVzLiAKKy8qCisgKiA3OTkwLmMgLS0gTEFOQ0UgZXRoZXJuZXQgSUMgZ2VuZXJpYyByb3V0aW5lcy4KICAqIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBzZXBhcmF0ZSBvdXQgdGhlIGJpdHMgb2YgdmFyaW91cyBldGhlcm5ldAotICogZHJpdmVycyB0aGF0IGFyZSBjb21tb24gYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIEFNRCA3OTkwIExBTkNFIAorICogZHJpdmVycyB0aGF0IGFyZSBjb21tb24gYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIEFNRCA3OTkwIExBTkNFCiAgKiAoTG9jYWwgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXIgZm9yIEV0aGVybmV0KSBjaGlwLgogICoKICAqIENvcHlyaWdodCAoQykgMDUvMTk5OCBQZXRlciBNYXlkZWxsIDxwbWF5ZGVsbEBjaGlhcmsuZ3JlZW5lbmQub3JnLnVrPgpAQCAtOSw3ICs5LDcgQEAKICAqIE1vc3Qgb2YgdGhpcyBzdHVmZiB3YXMgb2J0YWluZWQgYnkgbG9va2luZyBhdCBvdGhlciBMQU5DRSBkcml2ZXJzLAogICogaW4gcGFydGljdWxhciBhMjA2NS5bY2hdLiBUaGUgQU1EIEMtTEFOQ0UgZGF0YXNoZWV0IHdhcyBhbHNvIGhlbHBmdWwuCiAgKiBOQjogdGhpcyB3YXMgbWFkZSBlYXN5IGJ5IHRoZSBmYWN0IHRoYXQgSmVzIFNvcmVuc2VuIGhhZCBjbGVhbmVkIHVwCi0gKiBtb3N0IG9mIGEyMDI1IGFuZCBzdW5sYW5jZSB3aXRoIHRoZSBhaW0gb2YgbWVyZ2luZyB0aGVtLCBzbyB0aGUgCisgKiBtb3N0IG9mIGEyMDI1IGFuZCBzdW5sYW5jZSB3aXRoIHRoZSBhaW0gb2YgbWVyZ2luZyB0aGVtLCBzbyB0aGUKICAqIGNvbW1vbiBjb2RlIHdhcyBwcmV0dHkgb2J2aW91cy4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICBpYi0+YnR4X3JpbmdbdF0ubGVuZ3RoLFwKICAgICAgICAgICAgICAgICAgICAgICAgaWItPmJ0eF9yaW5nW3RdLm1pc2MsIGliLT5idHhfcmluZ1t0XS50bWQxX2JpdHMpO1wKICAgICAgICAgfVwKLX0gd2hpbGUgKDApIAorfSB3aGlsZSAoMCkKICNlbHNlCiAjZGVmaW5lIFBSSU5UX1JJTkdTKCkKLSNlbmRpZiAgICAgICAgCisjZW5kaWYKIAogLyogTG9hZCB0aGUgQ1NSIHJlZ2lzdGVycy4gVGhlIExBTkNFIGhhcyB0byBiZSBTVE9QcGVkIHdoZW4gd2UgZG8gdGhpcyEgKi8KIHN0YXRpYyB2b2lkIGxvYWRfY3NycyAoc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwKQpAQCAtMTU3LDcgKzE1Nyw3IEBACiAgICAgICAgICAqIGEyMDY1IGFuZCBhdGFyaWxhbmNlIGRvIHRoZSBieXRlc3dhcCBhbmQgbGFuY2UuYyAoUEMpIGRvZXNuJ3QuCiAgICAgICAgICAqIEhvd2V2ZXIsIHRoZSBkYXRhc2hlZXQgc2F5cyB0aGF0IHRoZSBCU1dBUCBiaXQgZG9lc24ndCBhZmZlY3QKICAgICAgICAgICogdGhlIGluaXQgYmxvY2ssIHNvIHN1cmVseSBpdCBzaG91bGQgYmUgbG93IGJ5dGUgZmlyc3QgZm9yCi0gICAgICAgICAqIGV2ZXJ5Ym9keT8gVW0uXSAKKyAgICAgICAgICogZXZlcnlib2R5PyBVbS5dCiAgICAgICAgICAqIFdlIGNvdWxkIGRlZmluZSB0aGUgaWItPnBoeXNhZGRyIGFzIHRocmVlIDE2Yml0IHZhbHVlcyBhbmQKICAgICAgICAgICogdXNlIChhZGRyWzFdIDw8IDgpIHwgYWRkclswXSAmIGNvLCBidXQgdGhpcyBpcyBtb3JlIGVmZmljaWVudC4KICAgICAgICAgICovCkBAIC0xNzEsMTEgKzE3MSwxMSBAQAogI2Vsc2UKICAgICAgICAgZm9yIChpPTA7IGk8NjsgaSsrKQogICAgICAgICAgICBpYi0+cGh5c19hZGRyW2ldID0gZGV2LT5kZXZfYWRkcltpXTsKLSNlbmRpZiAgICAgICAgCisjZW5kaWYKIAogICAgICAgICBpZiAoREVCVUdfSVJJTkcpCiAgICAgICAgICAgICAgICAgcHJpbnRrICgiVFggcmluZ3M6XG4iKTsKLSAgICAKKwogCWxwLT50eF9mdWxsID0gMDsKICAgICAgICAgLyogU2V0dXAgdGhlIFR4IHJpbmcgZW50cmllcyAqLwogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKDE8PGxwLT5sYW5jZV9sb2dfdHhfYnVmcyk7IGkrKykgewpAQCAtMTg1LDcgKzE4NSw3IEBACiAgICAgICAgICAgICAgICAgaWItPmJ0eF9yaW5nIFtpXS50bWQxX2JpdHMgPSAwOwogICAgICAgICAgICAgICAgIGliLT5idHhfcmluZyBbaV0ubGVuZ3RoICAgID0gMHhmMDAwOyAvKiBUaGUgb25lcyByZXF1aXJlZCBieSB0bWQyICovCiAgICAgICAgICAgICAgICAgaWItPmJ0eF9yaW5nIFtpXS5taXNjICAgICAgPSAwOwotICAgICAgICAgICAgICAgIGlmIChERUJVR19JUklORykgCisgICAgICAgICAgICAgICAgaWYgKERFQlVHX0lSSU5HKQogICAgICAgICAgICAgICAgICAgIHByaW50ayAoIiVkOiAweCU4Ljh4XG4iLCBpLCBsZXB0cik7CiAgICAgICAgIH0KIApAQCAtMjA2LDE0ICsyMDYsMTQgQEAKICAgICAgICAgfQogCiAgICAgICAgIC8qIFNldHVwIHRoZSBpbml0aWFsaXphdGlvbiBibG9jayAqLwotICAgIAorCiAgICAgICAgIC8qIFNldHVwIHJ4IGRlc2NyaXB0b3IgcG9pbnRlciAqLwogICAgICAgICBsZXB0ciA9IExBTkNFX0FERFIoJmFpYi0+YnJ4X3JpbmcpOwogICAgICAgICBpYi0+cnhfbGVuID0gKGxwLT5sYW5jZV9sb2dfcnhfYnVmcyA8PCAxMykgfCAobGVwdHIgPj4gMTYpOwogICAgICAgICBpYi0+cnhfcHRyID0gbGVwdHI7CiAgICAgICAgIGlmIChERUJVR19JUklORykKICAgICAgICAgICAgICAgICBwcmludGsgKCJSWCBwdHI6ICU4Ljh4XG4iLCBsZXB0cik7Ci0gICAgCisKICAgICAgICAgLyogU2V0dXAgdHggZGVzY3JpcHRvciBwb2ludGVyICovCiAgICAgICAgIGxlcHRyID0gTEFOQ0VfQUREUigmYWliLT5idHhfcmluZyk7CiAgICAgICAgIGliLT50eF9sZW4gPSAobHAtPmxhbmNlX2xvZ190eF9idWZzIDw8IDEzKSB8IChsZXB0ciA+PiAxNik7CkBAIC0yNTYsNyArMjU2LDcgQEAKIHsKICAgICAgICAgc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICAgICAgaW50IHN0YXR1czsKLSAgICAKKwogICAgICAgICAvKiBTdG9wIHRoZSBsYW5jZSAqLwogICAgICAgICBXUklURVJBUChscCwgTEVfQ1NSMCk7CiAgICAgICAgIFdSSVRFUkRQKGxwLCBMRV9DMF9TVE9QKTsKQEAgLTI5Nyw3ICsyOTcsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0hQMzAwCiAJYmxpbmtlbl9sZWRzKDB4NDAsIDApOwotI2VuZGlmICAgIAorI2VuZGlmCiAgICAgICAgIFdSSVRFUkRQKGxwLCBMRV9DMF9SSU5UIHwgTEVfQzBfSU5FQSk7ICAgICAvKiBhY2sgUnggaW50LCByZWVuYWJsZSBpbnRzICovCiAgICAgICAgIGZvciAocmQgPSAmaWItPmJyeF9yaW5nIFtscC0+cnhfbmV3XTsgICAgIC8qIEZvciBlYWNoIFJ4IHJpbmcgd2Ugb3duLi4uICovCiAgICAgICAgICAgICAgISgoYml0cyA9IHJkLT5ybWQxX2JpdHMpICYgTEVfUjFfT1dOKTsKQEAgLTMzMCw3ICszMzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBscC0+cnhfbmV3ID0gKGxwLT5yeF9uZXcgKyAxKSAmIGxwLT5yeF9yaW5nX21vZF9tYXNrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgICAgICAgICBza2ItPmRldiA9IGRldjsKICAgICAgICAgICAgICAgICAgICAgICAgIHNrYl9yZXNlcnZlIChza2IsIDIpOyAgICAgICAgICAgLyogMTYgYnl0ZSBhbGlnbiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgc2tiX3B1dCAoc2tiLCBsZW4pOyAgICAgICAgICAgICAvKiBtYWtlIHJvb20gKi8KQEAgLTM3NCwxMCArMzc0LDEwIEBACiAgICAgICAgICAgICAgICAgLyogSWYgd2UgaGl0IGEgcGFja2V0IG5vdCBvd25lZCBieSB1cywgc3RvcCAqLwogICAgICAgICAgICAgICAgIGlmICh0ZC0+dG1kMV9iaXRzICYgTEVfVDFfT1dOKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAodGQtPnRtZDFfYml0cyAmIExFX1QxX0VSUikgewogICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzID0gdGQtPm1pc2M7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgICAgICAgICAgICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIExFX1QzX1JUWSkgIGxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIExFX1QzX0xDT0wpIGxwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CkBAIC00MjksNyArNDI5LDcgQEAKIAogICAgICAgICAgICAgICAgICAgICAgICAgbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgICAgICAgICAgaiA9IChqICsgMSkgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKICAgICAgICAgfQogICAgICAgICBscC0+dHhfb2xkID0gajsKQEAgLTQ1MCw3ICs0NTAsNyBAQAogICAgICAgICBjc3IwID0gUkVBRFJEUChscCk7CiAKICAgICAgICAgUFJJTlRfUklOR1MoKTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKCEoY3NyMCAmIExFX0MwX0lOVFIpKSB7ICAgICAvKiBDaGVjayBpZiBhbnkgaW50ZXJydXB0IGhhcyAqLwogCQlzcGluX3VubG9jayAoJmxwLT5kZXZsb2NrKTsKICAgICAgICAgICAgICAgICByZXR1cm4gSVJRX05PTkU7ICAgICAgICAvKiBiZWVuIGdlbmVyYXRlZCBieSB0aGUgTGFuY2UuICovCkBAIC00NzYsNyArNDc2LDcgQEAKICAgICAgICAgaWYgKGNzcjAgJiBMRV9DMF9NSVNTKQogICAgICAgICAgICAgICAgIGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsgICAgICAgLyogTWlzc2VkIGEgUnggZnJhbWUuICovCiAgICAgICAgIGlmIChjc3IwICYgTEVfQzBfTUVSUikgewotICAgICAgICAgICAgICAgIHByaW50aygiJXM6IEJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gZmFpbHVyZSwgc3RhdHVzICU0LjR4LlxuIiwgCisgICAgICAgICAgICAgICAgcHJpbnRrKCIlczogQnVzIG1hc3RlciBhcmJpdHJhdGlvbiBmYWlsdXJlLCBzdGF0dXMgJTQuNHguXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGNzcjApOwogICAgICAgICAgICAgICAgIC8qIFJlc3RhcnQgdGhlIGNoaXAuICovCiAgICAgICAgICAgICAgICAgV1JJVEVSRFAobHAsIExFX0MwX1NUUlQpOwpAQCAtNDg2LDcgKzQ4Niw3IEBACiAJCWxwLT50eF9mdWxsID0gMDsKIAkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBXUklURVJBUChscCwgTEVfQ1NSMCk7CiAgICAgICAgIFdSSVRFUkRQKGxwLCBMRV9DMF9CQUJMfExFX0MwX0NFUlJ8TEVfQzBfTUlTU3xMRV9DMF9NRVJSfExFX0MwX0lET058TEVfQzBfSU5FQSk7CiAKQEAgLTQ5OCw3ICs0OTgsNyBAQAogewogICAgICAgICBzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXM7Ci0gICAgICAgIAorCiAgICAgICAgIC8qIEluc3RhbGwgdGhlIEludGVycnVwdCBoYW5kbGVyLiBPciB3ZSBjb3VsZCBzaHVudCB0aGlzIG91dCB0byBzcGVjaWZpYyBkcml2ZXJzPyAqLwogICAgICAgICBpZiAocmVxdWVzdF9pcnEobHAtPmlycSwgbGFuY2VfaW50ZXJydXB0LCAwLCBscC0+bmFtZSwgZGV2KSkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVBR0FJTjsKQEAgLTUxMyw3ICs1MTMsNyBAQAogaW50IGxhbmNlX2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgICAgICBzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgICAgICAKKwogCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CiAKICAgICAgICAgLyogU3RvcCB0aGUgTEFOQ0UgKi8KQEAgLTU1Myw3ICs1NTMsNyBAQAogICAgICAgICAvKiBkdW1wIHRoZSBwYWNrZXQgKi8KICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBpOwotICAgICAgICAKKwogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGkgJSAxNikgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrICgiXG4iKTsKQEAgLTU2NSwxMSArNTY1LDExIEBACiAgICAgICAgIGVudHJ5ID0gbHAtPnR4X25ldyAmIGxwLT50eF9yaW5nX21vZF9tYXNrOwogICAgICAgICBpYi0+YnR4X3JpbmcgW2VudHJ5XS5sZW5ndGggPSAoLWxlbikgfCAweGYwMDA7CiAgICAgICAgIGliLT5idHhfcmluZyBbZW50cnldLm1pc2MgPSAwOwotICAgIAorCiAgICAgCWlmIChza2ItPmxlbiA8IEVUSF9aTEVOKQogICAgIAkJbWVtc2V0KChjaGFyICopJmliLT50eF9idWZbZW50cnldWzBdLCAwLCBFVEhfWkxFTik7CiAgICAgICAgIG1lbWNweSAoKGNoYXIgKikmaWItPnR4X2J1ZiBbZW50cnldWzBdLCBza2ItPmRhdGEsIHNrYmxlbik7Ci0gICAgCisKICAgICAgICAgLyogTm93LCBnaXZlIHRoZSBwYWNrZXQgdG8gdGhlIGxhbmNlICovCiAgICAgICAgIGliLT5idHhfcmluZyBbZW50cnldLnRtZDFfYml0cyA9IChMRV9UMV9QT0t8TEVfVDFfT1dOKTsKICAgICAgICAgbHAtPnR4X25ldyA9IChscC0+dHhfbmV3KzEpICYgbHAtPnR4X3JpbmdfbW9kX21hc2s7CkBAIC01NzksNyArNTc5LDcgQEAKICAgICAgICAgV1JJVEVSRFAobHAsIExFX0MwX0lORUEgfCBMRV9DMF9URE1EKTsKICAgICAgICAgZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAgICAgICAgIGRldl9rZnJlZV9za2IgKHNrYik7Ci0gICAgCisKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmxwLT5kZXZsb2NrLCBmbGFncyk7CiAgICAgICAgIGlmIChUWF9CVUZGU19BVkFJTCkKIAkJbmV0aWZfc3RhcnRfcXVldWUgKGRldik7CkBAIC02MDcsOSArNjA3LDkgQEAKICAgICAgICAgY2hhciAqYWRkcnM7CiAgICAgICAgIGludCBpOwogICAgICAgICB1MzIgY3JjOwotICAgICAgICAKKwogICAgICAgICAvKiBzZXQgYWxsIG11bHRpY2FzdCBiaXRzICovCi0gICAgICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKXsgCisgICAgICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKXsKICAgICAgICAgICAgICAgICBpYi0+ZmlsdGVyIFswXSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgaWItPmZpbHRlciBbMV0gPSAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTYyNiw3ICs2MjYsNyBAQAogICAgICAgICAgICAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogICAgICAgICAgICAgICAgIGlmICghKCphZGRycyAmIDEpKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgCisKIAkJY3JjID0gZXRoZXJfY3JjX2xlKDYsIGFkZHJzKTsKICAgICAgICAgICAgICAgICBjcmMgPSBjcmMgPj4gMjY7CiAgICAgICAgICAgICAgICAgbWNhc3RfdGFibGUgW2NyYyA+PiA0XSB8PSAxIDw8IChjcmMgJiAweGYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvNzk5MC5oIGIvZHJpdmVycy9uZXQvNzk5MC5oCmluZGV4IDMxYWU1MDkuLmIxMjEyYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0Lzc5OTAuaAorKysgYi9kcml2ZXJzL25ldC83OTkwLmgKQEAgLTEsOSArMSw5IEBACi0vKiAKKy8qCiAgKiA3OTkwLmggLS0gTEFOQ0UgZXRoZXJuZXQgSUMgZ2VuZXJpYyByb3V0aW5lcy4KICAqIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBzZXBhcmF0ZSBvdXQgdGhlIGJpdHMgb2YgdmFyaW91cyBldGhlcm5ldAogICogZHJpdmVycyB0aGF0IGFyZSBjb21tb24gYmVjYXVzZSB0aGV5IGFsbCB1c2UgdGhlIEFNRCA3OTkwIExBTkNFCiAgKiAoTG9jYWwgQXJlYSBOZXR3b3JrIENvbnRyb2xsZXIgZm9yIEV0aGVybmV0KSBjaGlwLgotICogCisgKgogICogQ29weXJpZ2h0IChDKSAwNS8xOTk4IFBldGVyIE1heWRlbGwgPHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWs+CiAgKgogICogTW9zdCBvZiB0aGlzIHN0dWZmIHdhcyBvYnRhaW5lZCBieSBsb29raW5nIGF0IG90aGVyIExBTkNFIGRyaXZlcnMsCkBAIC01NSw3ICs1NSw3IEBACiAJCQkJICAgICAqLwogCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IG1ibGVuZ3RoOyAgICAvKiBBY3R1YWwgbnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkICovCiB9OwotIAorCiAvKiBEaXR0byBmb3IgVE1EOiAqLwogc3RydWN0IGxhbmNlX3R4X2Rlc2MgewogCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHRtZDA7ICAgICAgICAvKiBsb3cgYWRkcmVzcyBvZiBwYWNrZXQgKi8KQEAgLTgwLDggKzgwLDggQEAKICAgICAgICAgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgcnhfbGVuOyAgICAgICAgICAvKiByZWNlaXZlIGxlbiBhbmQgaGlnaCBhZGRyICovCiAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHR4X3B0cjsgICAgICAgICAgLyogdHJhbnNtaXQgZGVzY3JpcHRvciBhZGRyICovCiAgICAgICAgIHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IHR4X2xlbjsgICAgICAgICAgLyogdHJhbnNtaXQgbGVuIGFuZCBoaWdoIGFkZHIgKi8KLSAgICAKLSAgICAgICAgLyogVGhlIFR4IGFuZCBSeCByaW5nIGVudHJpZXMgbXVzdCBiZSBhbGlnbmVkIG9uIDgtYnl0ZSBib3VuZGFyaWVzLiAKKworICAgICAgICAvKiBUaGUgVHggYW5kIFJ4IHJpbmcgZW50cmllcyBtdXN0IGJlIGFsaWduZWQgb24gOC1ieXRlIGJvdW5kYXJpZXMuCiAgICAgICAgICAqIFRoaXMgd2lsbCBiZSB0cnVlIGlmIHRoaXMgd2hvbGUgc3RydWN0IGlzIDgtYnl0ZSBhbGlnbmVkLgogICAgICAgICAgKi8KICAgICAgICAgdm9sYXRpbGUgc3RydWN0IGxhbmNlX3R4X2Rlc2MgYnR4X3JpbmdbVFhfUklOR19TSVpFXTsKQEAgLTEwNCwyMSArMTA0LDIxIEBACiAJdW5zaWduZWQgbG9uZyBiYXNlOwogICAgICAgICB2b2xhdGlsZSBzdHJ1Y3QgbGFuY2VfaW5pdF9ibG9jayAqaW5pdF9ibG9jazsgLyogQ1BVIGFkZHJlc3Mgb2YgUkFNICovCiAgICAgICAgIHZvbGF0aWxlIHN0cnVjdCBsYW5jZV9pbml0X2Jsb2NrICpsYW5jZV9pbml0X2Jsb2NrOyAvKiBMQU5DRSBhZGRyZXNzIG9mIFJBTSAqLwotICAgICAgICAKKwogICAgICAgICBpbnQgcnhfbmV3LCB0eF9uZXc7CiAgICAgICAgIGludCByeF9vbGQsIHR4X29sZDsKLSAgICAgICAgCisKICAgICAgICAgaW50IGxhbmNlX2xvZ19yeF9idWZzLCBsYW5jZV9sb2dfdHhfYnVmczsKICAgICAgICAgaW50IHJ4X3JpbmdfbW9kX21hc2ssIHR4X3JpbmdfbW9kX21hc2s7Ci0gICAgICAgIAorCiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogICAgICAgICBpbnQgdHBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUUEUgaXMgc2VsZWN0ZWQgKi8KICAgICAgICAgaW50IGF1dG9fc2VsZWN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2FibGUtc2VsZWN0aW9uIGlzIGJ5IGNhcnJpZXIgKi8KICAgICAgICAgdW5zaWduZWQgc2hvcnQgYnVzbWFzdGVyX3JlZ3ZhbDsKIAogICAgICAgICB1bnNpZ25lZCBpbnQgaXJxOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUlEgdG8gcmVnaXN0ZXIgKi8KLSAgICAgICAgCi0gICAgICAgIC8qIFRoaXMgaXMgYmVjYXVzZSB0aGUgSFAgTEFOQ0UgaXMgZGlzZ3VzdGluZyBhbmQgeW91IGhhdmUgdG8gY2hlY2sgCisKKyAgICAgICAgLyogVGhpcyBpcyBiZWNhdXNlIHRoZSBIUCBMQU5DRSBpcyBkaXNndXN0aW5nIGFuZCB5b3UgaGF2ZSB0byBjaGVjawogICAgICAgICAgKiBhIERJTy1zcGVjaWZpYyByZWdpc3RlciBldmVyeSB0aW1lIHlvdSByZWFkL3dyaXRlIHRoZSBMQU5DRSByZWdzIDotPAogICAgICAgICAgKiBbY291bGQgd2UgZ2V0IGF3YXkgd2l0aCBtYWtpbmcgdGhlc2Ugc29tZSBzb3J0IG9mIG1hY3JvP10KICAgICAgICAgICovCkBAIC0xNDgsNyArMTQ4LDcgQEAKICNkZWZpbmUgTEVfQzBfUklOVAkweDA0MDAJCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCiAjZGVmaW5lIExFX0MwX1RJTlQJMHgwMjAwCQkvKiBUcmFuc21pdCBJbnRlcnJ1cHQgKi8KICNkZWZpbmUgTEVfQzBfSURPTgkweDAxMDAJCS8qIEluaXRpYWxpemF0aW9uIERvbmUgKi8KLSNkZWZpbmUgTEVfQzBfSU5UUgkweDAwODAJCS8qIEludGVycnVwdCBGbGFnIAorI2RlZmluZSBMRV9DMF9JTlRSCTB4MDA4MAkJLyogSW50ZXJydXB0IEZsYWcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBCQUJMIHwgTUlTUyB8IE1FUlIgfCBSSU5UIHwgVElOVCB8IElET04gKi8KICNkZWZpbmUgTEVfQzBfSU5FQQkweDAwNDAJCS8qIEludGVycnVwdCBFbmFibGUgKi8KICNkZWZpbmUgTEVfQzBfUlhPTgkweDAwMjAJCS8qIFJlY2VpdmUgT24gKi8KQEAgLTE4NSw3ICsxODUsNyBAQAogI2RlZmluZSBMRV9NT19QU0VMMSAgIDB4MDEwMCAgICAgICAgICAvKiBwb3J0IHNlbGVjdGlvbiBiaXQxICovCiAjZGVmaW5lIExFX01PX1BTRUwwICAgMHgwMDgwICAgICAgICAgIC8qIHBvcnQgc2VsZWN0aW9uIGJpdDAgKi8KIC8qIGFuZCB0aGlzIG9uZSBpcyBmcm9tIHRoZSBDLUxBTkNFIGRhdGEgc2hlZXQuLi4gKi8KLSNkZWZpbmUgTEVfTU9fRU1CQSAgICAgIDB4MDA4MCAgICAgICAgICAvKiBFbmFibGUgTW9kaWZpZWQgQmFja29mZiBBbGdvcml0aG0gCisjZGVmaW5lIExFX01PX0VNQkEgICAgICAweDAwODAgICAgICAgICAgLyogRW5hYmxlIE1vZGlmaWVkIEJhY2tvZmYgQWxnb3JpdGhtCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEMtTEFOQ0UsIG5vdCBvcmlnaW5hbCBMQU5DRSkgKi8KICNkZWZpbmUgTEVfTU9fSU5UTAkweDAwNDAJCS8qIEludGVybmFsIExvb3BiYWNrICovCiAjZGVmaW5lIExFX01PX0RSVFkJMHgwMDIwCQkvKiBEaXNhYmxlIFJldHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MTM5Y3AuYyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCmluZGV4IDE0MjhiYjcuLjViYTExZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzljcC5jCisrKyBiL2RyaXZlcnMvbmV0LzgxMzljcC5jCkBAIC00OCw3ICs0OCw3IEBACiAgKi8KIAogI2RlZmluZSBEUlZfTkFNRQkJIjgxMzljcCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjIiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4zIgogI2RlZmluZSBEUlZfUkVMREFURQkJIk1hciAyMiwgMjAwNCIKIAogCkBAIC0zMTQsMTIgKzMxNCw2IEBACiAJdTY0CQlhZGRyOwogfTsKIAotc3RydWN0IHJpbmdfaW5mbyB7Ci0Jc3RydWN0IHNrX2J1ZmYJCSpza2I7Ci0JZG1hX2FkZHJfdAkJbWFwcGluZzsKLQl1MzIJCQlsZW47Ci19OwotCiBzdHJ1Y3QgY3BfZG1hX3N0YXRzIHsKIAl1NjQJCQl0eF9vazsKIAl1NjQJCQlyeF9vazsKQEAgLTM1MywyMyArMzQ3LDIzIEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbmV0X3N0YXRzOwogCXN0cnVjdCBjcF9leHRyYV9zdGF0cwljcF9zdGF0czsKIAotCXVuc2lnbmVkCQlyeF90YWlsCQlfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJdW5zaWduZWQJCXJ4X2hlYWQJCV9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKwl1bnNpZ25lZAkJcnhfdGFpbDsKIAlzdHJ1Y3QgY3BfZGVzYwkJKnJ4X3Jpbmc7Ci0Jc3RydWN0IHJpbmdfaW5mbwlyeF9za2JbQ1BfUlhfUklOR19TSVpFXTsKLQl1bnNpZ25lZAkJcnhfYnVmX3N6OworCXN0cnVjdCBza19idWZmCQkqcnhfc2tiW0NQX1JYX1JJTkdfU0laRV07CiAKIAl1bnNpZ25lZAkJdHhfaGVhZAkJX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCXVuc2lnbmVkCQl0eF90YWlsOwotCiAJc3RydWN0IGNwX2Rlc2MJCSp0eF9yaW5nOwotCXN0cnVjdCByaW5nX2luZm8JdHhfc2tiW0NQX1RYX1JJTkdfU0laRV07Ci0JZG1hX2FkZHJfdAkJcmluZ19kbWE7CisJc3RydWN0IHNrX2J1ZmYJCSp0eF9za2JbQ1BfVFhfUklOR19TSVpFXTsKKworCXVuc2lnbmVkCQlyeF9idWZfc3o7CisJdW5zaWduZWQJCXdvbF9lbmFibGVkIDogMTsgLyogSXMgV2FrZS1vbi1MQU4gZW5hYmxlZD8gKi8KIAogI2lmIENQX1ZMQU5fVEFHX1VTRUQKIAlzdHJ1Y3Qgdmxhbl9ncm91cAkqdmxncnA7CiAjZW5kaWYKLQotCXVuc2lnbmVkIGludAkJd29sX2VuYWJsZWQgOiAxOyAvKiBJcyBXYWtlLW9uLUxBTiBlbmFibGVkPyAqLworCWRtYV9hZGRyX3QJCXJpbmdfZG1hOwogCiAJc3RydWN0IG1paV9pZl9pbmZvCW1paV9pZjsKIH07CkBAIC00MDcsMTAgKzQwMSw4IEBACiAJCQkgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKTsKIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNwX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9WRU5ET1JfSURfUkVBTFRFSywgUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzksCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCB9LAotCXsgUENJX1ZFTkRPUl9JRF9UVFRFQ0gsIFBDSV9ERVZJQ0VfSURfVFRURUNIX01DMzIyLAotCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9SRUFMVEVLLAlQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSksIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVFRURUNILAlQQ0lfREVWSUNFX0lEX1RUVEVDSF9NQzMyMiksIH0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjcF9wY2lfdGJsKTsKQEAgLTU0Miw3ICs1MzQsNyBAQAogCQlzdHJ1Y3QgY3BfZGVzYyAqZGVzYzsKIAkJdW5zaWduZWQgYnVmbGVuOwogCi0JCXNrYiA9IGNwLT5yeF9za2JbcnhfdGFpbF0uc2tiOworCQlza2IgPSBjcC0+cnhfc2tiW3J4X3RhaWxdOwogCQlCVUdfT04oIXNrYik7CiAKIAkJZGVzYyA9ICZjcC0+cnhfcmluZ1tyeF90YWlsXTsKQEAgLTU1MSw3ICs1NDMsNyBAQAogCQkJYnJlYWs7CiAKIAkJbGVuID0gKHN0YXR1cyAmIDB4MWZmZikgLSA0OwotCQltYXBwaW5nID0gY3AtPnJ4X3NrYltyeF90YWlsXS5tYXBwaW5nOworCQltYXBwaW5nID0gbGU2NF90b19jcHUoZGVzYy0+YWRkcik7CiAKIAkJaWYgKChzdGF0dXMgJiAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSAhPSAoRmlyc3RGcmFnIHwgTGFzdEZyYWcpKSB7CiAJCQkvKiB3ZSBkb24ndCBzdXBwb3J0IGluY29taW5nIGZyYWdtZW50ZWQgZnJhbWVzLgpAQCAtNTcyLDcgKzU2NCw3IEBACiAKIAkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoY3ApKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeCBzbG90ICVkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7CisJCQkgICAgICAgZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7CiAKIAkJYnVmbGVuID0gY3AtPnJ4X2J1Zl9zeiArIFJYX09GRlNFVDsKIAkJbmV3X3NrYiA9IGRldl9hbGxvY19za2IgKGJ1Zmxlbik7CkBAIC01ODIsNyArNTc0LDcgQEAKIAkJfQogCiAJCXNrYl9yZXNlcnZlKG5ld19za2IsIFJYX09GRlNFVCk7Ci0JCW5ld19za2ItPmRldiA9IGNwLT5kZXY7CisJCW5ld19za2ItPmRldiA9IGRldjsKIAogCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBtYXBwaW5nLAogCQkJCSBidWZsZW4sIFBDSV9ETUFfRlJPTURFVklDRSk7CkBAIC01OTUsMTEgKzU4Nyw5IEBACiAKIAkJc2tiX3B1dChza2IsIGxlbik7CiAKLQkJbWFwcGluZyA9Ci0JCWNwLT5yeF9za2JbcnhfdGFpbF0ubWFwcGluZyA9Ci0JCQlwY2lfbWFwX3NpbmdsZShjcC0+cGRldiwgbmV3X3NrYi0+ZGF0YSwKLQkJCQkgICAgICAgYnVmbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQljcC0+cnhfc2tiW3J4X3RhaWxdLnNrYiA9IG5ld19za2I7CisJCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShjcC0+cGRldiwgbmV3X3NrYi0+ZGF0YSwgYnVmbGVuLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJY3AtPnJ4X3NrYltyeF90YWlsXSA9IG5ld19za2I7CiAKIAkJY3Bfcnhfc2tiKGNwLCBza2IsIGRlc2MpOwogCQlyeCsrOwpAQCAtNzE3LDE5ICs3MDcsMjEgQEAKIAl1bnNpZ25lZCB0eF90YWlsID0gY3AtPnR4X3RhaWw7CiAKIAl3aGlsZSAodHhfdGFpbCAhPSB0eF9oZWFkKSB7CisJCXN0cnVjdCBjcF9kZXNjICp0eGQgPSBjcC0+dHhfcmluZyArIHR4X3RhaWw7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAJCXUzMiBzdGF0dXM7CiAKIAkJcm1iKCk7Ci0JCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGNwLT50eF9yaW5nW3R4X3RhaWxdLm9wdHMxKTsKKwkJc3RhdHVzID0gbGUzMl90b19jcHUodHhkLT5vcHRzMSk7CiAJCWlmIChzdGF0dXMgJiBEZXNjT3duKQogCQkJYnJlYWs7CiAKLQkJc2tiID0gY3AtPnR4X3NrYlt0eF90YWlsXS5za2I7CisJCXNrYiA9IGNwLT50eF9za2JbdHhfdGFpbF07CiAJCUJVR19PTighc2tiKTsKIAotCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBjcC0+dHhfc2tiW3R4X3RhaWxdLm1hcHBpbmcsCi0JCQkJIGNwLT50eF9za2JbdHhfdGFpbF0ubGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NpbmdsZShjcC0+cGRldiwgbGU2NF90b19jcHUodHhkLT5hZGRyKSwKKwkJCQkgbGUzMl90b19jcHUodHhkLT5vcHRzMSkgJiAweGZmZmYsCisJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwogCiAJCWlmIChzdGF0dXMgJiBMYXN0RnJhZykgewogCQkJaWYgKHN0YXR1cyAmIChUeEVycm9yIHwgVHhGSUZPVW5kZXIpKSB7CkBAIC03NTYsNyArNzQ4LDcgQEAKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KIAotCQljcC0+dHhfc2tiW3R4X3RhaWxdLnNrYiA9IE5VTEw7CisJCWNwLT50eF9za2JbdHhfdGFpbF0gPSBOVUxMOwogCiAJCXR4X3RhaWwgPSBORVhUX1RYKHR4X3RhaWwpOwogCX0KQEAgLTgyNiw5ICs4MTgsNyBAQAogCQl0eGQtPm9wdHMxID0gY3B1X3RvX2xlMzIoZmxhZ3MpOwogCQl3bWIoKTsKIAotCQljcC0+dHhfc2tiW2VudHJ5XS5za2IgPSBza2I7Ci0JCWNwLT50eF9za2JbZW50cnldLm1hcHBpbmcgPSBtYXBwaW5nOwotCQljcC0+dHhfc2tiW2VudHJ5XS5sZW4gPSBsZW47CisJCWNwLT50eF9za2JbZW50cnldID0gc2tiOwogCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBjcF9kZXNjICp0eGQ7CkBAIC04NDQsOSArODM0LDcgQEAKIAkJZmlyc3RfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKIAkJZmlyc3RfbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGNwLT5wZGV2LCBza2ItPmRhdGEsCiAJCQkJCSAgICAgICBmaXJzdF9sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQljcC0+dHhfc2tiW2VudHJ5XS5za2IgPSBza2I7Ci0JCWNwLT50eF9za2JbZW50cnldLm1hcHBpbmcgPSBmaXJzdF9tYXBwaW5nOwotCQljcC0+dHhfc2tiW2VudHJ5XS5sZW4gPSBmaXJzdF9sZW47CisJCWNwLT50eF9za2JbZW50cnldID0gc2tiOwogCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwogCiAJCWZvciAoZnJhZyA9IDA7IGZyYWcgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBmcmFnKyspIHsKQEAgLTg4Nyw5ICs4NzUsNyBAQAogCQkJdHhkLT5vcHRzMSA9IGNwdV90b19sZTMyKGN0cmwpOwogCQkJd21iKCk7CiAKLQkJCWNwLT50eF9za2JbZW50cnldLnNrYiA9IHNrYjsKLQkJCWNwLT50eF9za2JbZW50cnldLm1hcHBpbmcgPSBtYXBwaW5nOwotCQkJY3AtPnR4X3NrYltlbnRyeV0ubGVuID0gbGVuOworCQkJY3AtPnR4X3NrYltlbnRyeV0gPSBza2I7CiAJCQllbnRyeSA9IE5FWFRfVFgoZW50cnkpOwogCQl9CiAKQEAgLTk0Miw4ICs5MjgsNiBAQAogCS8qIE5vdGU6IGRvIG5vdCByZW9yZGVyLCBHQ0MgaXMgY2xldmVyIGFib3V0IGNvbW1vbiBzdGF0ZW1lbnRzLiAqLwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJcHJpbnRrIChLRVJOX05PVElDRSAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsCi0JCQlkZXYtPm5hbWUpOwogCQlyeF9tb2RlID0KIAkJICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAJCSAgICBBY2NlcHRBbGxQaHlzOwpAQCAtMTA5MSw2ICsxMDc1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBDUF9SWF9SSU5HX1NJWkU7IGkrKykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQlkbWFfYWRkcl90IG1hcHBpbmc7CiAKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihjcC0+cnhfYnVmX3N6ICsgUlhfT0ZGU0VUKTsKIAkJaWYgKCFza2IpCkBAIC0xMDk5LDEyICsxMDg0LDEyIEBACiAJCXNrYi0+ZGV2ID0gY3AtPmRldjsKIAkJc2tiX3Jlc2VydmUoc2tiLCBSWF9PRkZTRVQpOwogCi0JCWNwLT5yeF9za2JbaV0ubWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGNwLT5wZGV2LAotCQkJc2tiLT5kYXRhLCBjcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQljcC0+cnhfc2tiW2ldLnNrYiA9IHNrYjsKKwkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGNwLT5wZGV2LCBza2ItPmRhdGEsIGNwLT5yeF9idWZfc3osCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQljcC0+cnhfc2tiW2ldID0gc2tiOwogCiAJCWNwLT5yeF9yaW5nW2ldLm9wdHMyID0gMDsKLQkJY3AtPnJ4X3JpbmdbaV0uYWRkciA9IGNwdV90b19sZTY0KGNwLT5yeF9za2JbaV0ubWFwcGluZyk7CisJCWNwLT5yeF9yaW5nW2ldLmFkZHIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTsKIAkJaWYgKGkgPT0gKENQX1JYX1JJTkdfU0laRSAtIDEpKQogCQkJY3AtPnJ4X3JpbmdbaV0ub3B0czEgPQogCQkJCWNwdV90b19sZTMyKERlc2NPd24gfCBSaW5nRW5kIHwgY3AtPnJ4X2J1Zl9zeik7CkBAIC0xMTUyLDIzICsxMTM3LDI3IEBACiAKIHN0YXRpYyB2b2lkIGNwX2NsZWFuX3JpbmdzIChzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3ApCiB7CisJc3RydWN0IGNwX2Rlc2MgKmRlc2M7CiAJdW5zaWduZWQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBDUF9SWF9SSU5HX1NJWkU7IGkrKykgewotCQlpZiAoY3AtPnJ4X3NrYltpXS5za2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoY3AtPnBkZXYsIGNwLT5yeF9za2JbaV0ubWFwcGluZywKKwkJaWYgKGNwLT5yeF9za2JbaV0pIHsKKwkJCWRlc2MgPSBjcC0+cnhfcmluZyArIGk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBsZTY0X3RvX2NwdShkZXNjLT5hZGRyKSwKIAkJCQkJIGNwLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQlkZXZfa2ZyZWVfc2tiKGNwLT5yeF9za2JbaV0uc2tiKTsKKwkJCWRldl9rZnJlZV9za2IoY3AtPnJ4X3NrYltpXSk7CiAJCX0KIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ1BfVFhfUklOR19TSVpFOyBpKyspIHsKLQkJaWYgKGNwLT50eF9za2JbaV0uc2tiKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY3AtPnR4X3NrYltpXS5za2I7CisJCWlmIChjcC0+dHhfc2tiW2ldKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gY3AtPnR4X3NrYltpXTsKIAotCQkJcGNpX3VubWFwX3NpbmdsZShjcC0+cGRldiwgY3AtPnR4X3NrYltpXS5tYXBwaW5nLAotCQkJCSAJIGNwLT50eF9za2JbaV0ubGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKLQkJCWlmIChsZTMyX3RvX2NwdShjcC0+dHhfcmluZ1tpXS5vcHRzMSkgJiBMYXN0RnJhZykKKwkJCWRlc2MgPSBjcC0+dHhfcmluZyArIGk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBsZTY0X3RvX2NwdShkZXNjLT5hZGRyKSwKKwkJCQkJIGxlMzJfdG9fY3B1KGRlc2MtPm9wdHMxKSAmIDB4ZmZmZiwKKwkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJaWYgKGxlMzJfdG9fY3B1KGRlc2MtPm9wdHMxKSAmIExhc3RGcmFnKQogCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJCWNwLT5uZXRfc3RhdHMudHhfZHJvcHBlZCsrOwogCQl9CkBAIC0xMTc3LDggKzExNjYsOCBAQAogCW1lbXNldChjcC0+cnhfcmluZywgMCwgc2l6ZW9mKHN0cnVjdCBjcF9kZXNjKSAqIENQX1JYX1JJTkdfU0laRSk7CiAJbWVtc2V0KGNwLT50eF9yaW5nLCAwLCBzaXplb2Yoc3RydWN0IGNwX2Rlc2MpICogQ1BfVFhfUklOR19TSVpFKTsKIAotCW1lbXNldCgmY3AtPnJ4X3NrYiwgMCwgc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pICogQ1BfUlhfUklOR19TSVpFKTsKLQltZW1zZXQoJmNwLT50eF9za2IsIDAsIHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSAqIENQX1RYX1JJTkdfU0laRSk7CisJbWVtc2V0KGNwLT5yeF9za2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIENQX1JYX1JJTkdfU0laRSk7CisJbWVtc2V0KGNwLT50eF9za2IsIDAsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSAqIENQX1RYX1JJTkdfU0laRSk7CiB9CiAKIHN0YXRpYyB2b2lkIGNwX2ZyZWVfcmluZ3MgKHN0cnVjdCBjcF9wcml2YXRlICpjcCkKQEAgLTE1NTcsNyArMTU0Niw3IEBACiAJcGNpX2ZyZWVfY29uc2lzdGVudChjcC0+cGRldiwgc2l6ZW9mKCpuaWNfc3RhdHMpLCBuaWNfc3RhdHMsIGRtYSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgY3BfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGNwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBjcF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3JlZ3NfbGVuCQk9IGNwX2dldF9yZWdzX2xlbiwKIAkuZ2V0X3N0YXRzX2NvdW50CT0gY3BfZ2V0X3N0YXRzX2NvdW50LApAQCAtMjAxMCw3ICsxOTk5LDYgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlCVUdfT04oIWRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpb3VubWFwKGNwLT5yZWdzKTsKIAlpZiAoY3AtPndvbF9lbmFibGVkKQpAQCAtMjAyNSwxNCArMjAxMywxMiBAQAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBjcF9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0Jc3RydWN0IGNwX3ByaXZhdGUgKmNwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKLQljcCAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKCFkZXYgfHwgIW5ldGlmX3J1bm5pbmcgKGRldikpIHJldHVybiAwOworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm4gMDsKIAogCW5ldGlmX2RldmljZV9kZXRhY2ggKGRldik7CiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKQEAgLTIwOTgsNyArMjA4NCw3IEBACiAjaWZkZWYgTU9EVUxFCiAJcHJpbnRrKCIlcyIsIHZlcnNpb24pOwogI2VuZGlmCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJmNwX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNwX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjcF9leGl0ICh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IGU0ZjRlYWYuLmRiYzVjMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTkwLDcgKzkwLDcgQEAKICovCiAKICNkZWZpbmUgRFJWX05BTUUJIjgxMzl0b28iCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjkuMjciCisjZGVmaW5lIERSVl9WRVJTSU9OCSIwLjkuMjgiCiAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNjM5LDcgKzYzOSw3IEBACiBzdGF0aWMgdm9pZCBydGw4MTM5X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfdGhyZWFkICh2b2lkICpfZGF0YSk7CiBzdGF0aWMgdm9pZCBydGw4MTM5X3R4X3RpbWVvdXRfdGFzayh2b2lkICpfZGF0YSk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxMzlfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxMzlfZXRodG9vbF9vcHM7CiAKIC8qIHdyaXRlIE1NSU8gcmVnaXN0ZXIsIHdpdGggZmx1c2ggKi8KIC8qIEZsdXNoIGF2b2lkcyBydGw4MTM5IGJ1ZyB3LyBwb3N0ZWQgTU1JTyB3cml0ZXMgKi8KQEAgLTI0NDYsNyArMjQ0Niw3IEBACiAJbWVtY3B5KGRhdGEsIGV0aHRvb2xfc3RhdHNfa2V5cywgc2l6ZW9mKGV0aHRvb2xfc3RhdHNfa2V5cykpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxMzlfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxMzlfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHJ0bDgxMzlfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBydGw4MTM5X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IHJ0bDgxMzlfc2V0X3NldHRpbmdzLApAQCAtMjUxMiw5ICsyNTEyLDYgQEAKIAogCS8qIE5vdGU6IGRvIG5vdCByZW9yZGVyLCBHQ0MgaXMgY2xldmVyIGFib3V0IGNvbW1vbiBzdGF0ZW1lbnRzLiAqLwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJcHJpbnRrIChLRVJOX05PVElDRSAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsCi0JCQlkZXYtPm5hbWUpOwogCQlyeF9tb2RlID0KIAkJICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAJCSAgICBBY2NlcHRBbGxQaHlzOwpAQCAtMjYyOSw3ICsyNjI2LDcgQEAKIAlwcmludGsgKEtFUk5fSU5GTyBSVEw4MTM5X0RSSVZFUl9OQU1FICJcbiIpOwogI2VuZGlmCiAKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmcnRsODEzOV9wY2lfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnRsODEzOV9wY2lfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MjU5Ni5jIGIvZHJpdmVycy9uZXQvODI1OTYuYwppbmRleCA3ZTJjYTk1Li5jOWU0ZGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKQEAgLTQ0NCw3ICs0NDQsNyBAQAogc3RhdGljIGlubGluZSBpbnQgd2FpdF9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGk1OTZfY21kICpjbWQsIGludCBkZWxjbnQsIGNoYXIgKnN0cikKIHsKIAl2b2xhdGlsZSBzdHJ1Y3QgaTU5Nl9jbWQgKmMgPSBjbWQ7Ci0JCisKIAl3aGlsZSAoLS1kZWxjbnQgJiYgYy0+Y29tbWFuZCkKIAkJdWRlbGF5KDEwKTsKIAlpZiAoIWRlbGNudCkgewpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJCXJldHVybiAwOwogfQogCi0gCisKIHN0YXRpYyB2b2lkIGk1OTZfZGlzcGxheV9kYXRhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CkBAIC03ODcsNyArNzg3LDcgQEAKIAkJfQogCQlERUIoREVCX1JYRlJBTUUsIHByaW50ayhLRVJOX0RFQlVHICIgIHJmZCAlcCwgcmZkLnJiZCAlcCwgcmZkLnN0YXQgJTA0eFxuIiwKIAkJCXJmZCwgcmZkLT5yYmQsIHJmZC0+c3RhdCkpOwotCQkKKwogCQlpZiAocmJkICE9IEk1OTZfTlVMTCAmJiAoKHJmZC0+c3RhdCkgJiBTVEFUX09LKSkgewogCQkJLyogYSBnb29kIGZyYW1lICovCiAJCQlpbnQgcGt0X2xlbiA9IHJiZC0+Y291bnQgJiAweDNmZmY7CkBAIC04OTksNyArODk5LDcgQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgaTU5Nl9jbGVhbnVwX2NtZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaTU5Nl9wcml2YXRlICpscCkKK3N0YXRpYyB2b2lkIGk1OTZfY2xlYW51cF9jbWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHApCiB7CiAJc3RydWN0IGk1OTZfY21kICpwdHI7CiAKQEAgLTkzMiw3ICs5MzIsOCBAQAogCWxwLT5zY2IuY21kID0gSTU5Nl9OVUxMOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaTU5Nl9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaTU5Nl9wcml2YXRlICpscCwgaW50IGlvYWRkcikKK3N0YXRpYyB2b2lkIGk1OTZfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGk1OTZfcHJpdmF0ZSAqbHAsCisJCQlpbnQgaW9hZGRyKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEyMDcsNyArMTIwOCw3IEBACiAJCSAgIFNvbWUgb3RoZXIgYm9hcmRzIHRyaXAgdGhlIGNoZWNrc3VtLi4gYnV0IHRoZW4gYXBwZWFyIGFzCiAJCSAgIGV0aGVyIGFkZHJlc3MgMC4gVHJhcCB0aGVzZSAtIEFDICovCiAKLQkJaWYgKChjaGVja3N1bSAlIDB4MTAwKSB8fCAKKwkJaWYgKChjaGVja3N1bSAlIDB4MTAwKSB8fAogCQkgICAgKG1lbWNtcChldGhfYWRkciwgIlx4MDBceDAwXHg0OSIsIDMpICE9IDApKSB7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBvdXQxOwpAQCAtMTU0NCw3ICsxNTQ1LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogT25seSAlZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHN1cHBvcnRlZCIsCiAJCQlkZXYtPm5hbWUsIGNudCk7CiAJfQotCQorCiAJaWYgKGRldi0+bWNfY291bnQgPiAwKSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQl1bnNpZ25lZCBjaGFyICpjcDsKQEAgLTE1NzgsNyArMTU3OSw3IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiaTgyNTk2IGRlYnVnIG1hc2siKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaWYgKGRlYnVnID49IDApCiAJCWk1OTZfZGVidWcgPSBkZWJ1ZzsKQEAgLTE1ODgsNyArMTU4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKK3ZvaWQgX19leGl0IGNsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2XzgyNTk2KTsKICNpZmRlZiBfX21jNjgwMDBfXwpAQCAtMTYwOCw3ICsxNjA5LDcgQEAKIH0KIAogI2VuZGlmCQkJCS8qIE1PRFVMRSAqLwotDAorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogIGNvbXBpbGUtY29tbWFuZDogImdjYyAtRF9fS0VSTkVMX18gLUkvdXNyL3NyYy9saW51eC9uZXQvaW5ldCAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtbTQ4NiAtYyA4MjU5Ni5jIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODM5MC5jIGIvZHJpdmVycy9uZXQvODM5MC5jCmluZGV4IGQyOTM1YWUuLjViNmIwNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgzOTAuYworKysgYi9kcml2ZXJzL25ldC84MzkwLmMKQEAgLTEsNyArMSw3IEBACiAvKiA4MzkwLmM6IEEgZ2VuZXJhbCBOUzgzOTAgZXRoZXJuZXQgZHJpdmVyIGNvcmUgZm9yIGxpbnV4LiAqLwogLyoKIAlXcml0dGVuIDE5OTItOTQgYnkgRG9uYWxkIEJlY2tlci4KLSAgCisKIAlDb3B5cmlnaHQgMTk5MyBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgdGhlCiAJRGlyZWN0b3IsIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeS4KIApAQCAtMTMsNyArMTMsNyBAQAogCTQxMCBTZXZlcm4gQXZlLiwgU3VpdGUgMjEwCiAJQW5uYXBvbGlzIE1EIDIxNDAzCiAKLSAgCisKICAgVGhpcyBpcyB0aGUgY2hpcC1zcGVjaWZpYyBjb2RlIGZvciBtYW55IDgzOTAtYmFzZWQgZXRoZXJuZXQgYWRhcHRvcnMuCiAgIFRoaXMgaXMgbm90IGEgY29tcGxldGUgZHJpdmVyLCBpdCBtdXN0IGJlIGNvbWJpbmVkIHdpdGggYm9hcmQtc3BlY2lmaWMKICAgY29kZSBzdWNoIGFzIG5lLmMsIHdkLmMsIDNjNTAzLmMsIGV0Yy4KQEAgLTI3LDcgKzI3LDcgQEAKICAgQ2hhbmdlbG9nOgogCiAgIFBhdWwgR29ydG1ha2VyCTogcmVtb3ZlIHNldF9iaXQgbG9jaywgb3RoZXIgY2xlYW51cHMuCi0gIFBhdWwgR29ydG1ha2VyCTogYWRkIGVpX2dldF84MzkwX2hkcigpIHNvIHdlIGNhbiBwYXNzIHNrYidzIHRvIAorICBQYXVsIEdvcnRtYWtlcgk6IGFkZCBlaV9nZXRfODM5MF9oZHIoKSBzbyB3ZSBjYW4gcGFzcyBza2IncyB0bwogCQkJICBlaV9ibG9ja19pbnB1dCgpIGZvciBldGhfaW9fY29weV9hbmRfc3VtKCkuCiAgIFBhdWwgR29ydG1ha2VyCTogZXhjaGFuZ2Ugc3RhdGljIGludCBlaV9waW5ncG9uZyBmb3IgYSAjZGVmaW5lLAogCQkJICBhbHNvIGFkZCBiZXR0ZXIgVHggZXJyb3IgaGFuZGxpbmcuCkBAIC05NCw5ICs5NCw5IEBACiAJCVJlYWQgdGhlIDQgYnl0ZSwgcGFnZSBhbGlnbmVkIDgzOTAgaGVhZGVyLiAqSWYqIHRoZXJlIGlzIGEKIAkJc3Vic2VxdWVudCByZWFkLCBpdCB3aWxsIGJlIG9mIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQuCiAJdm9pZCBibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCByaW5nX29mZnNldCkKLQkJUmVhZCBDT1VOVCBieXRlcyBmcm9tIHRoZSBwYWNrZXQgYnVmZmVyIGludG8gdGhlIHNrYiBkYXRhIGFyZWEuIFN0YXJ0IAorCQlSZWFkIENPVU5UIGJ5dGVzIGZyb20gdGhlIHBhY2tldCBidWZmZXIgaW50byB0aGUgc2tiIGRhdGEgYXJlYS4gU3RhcnQKIAkJcmVhZGluZyBmcm9tIFJJTkdfT0ZGU0VULCB0aGUgYWRkcmVzcyBhcyB0aGUgODM5MCBzZWVzIGl0LiAgVGhpcyB3aWxsIGFsd2F5cwotCQlmb2xsb3cgdGhlIHJlYWQgb2YgdGhlIDgzOTAgaGVhZGVyLiAKKwkJZm9sbG93IHRoZSByZWFkIG9mIHRoZSA4MzkwIGhlYWRlci4KICovCiAjZGVmaW5lIGVpX3Jlc2V0XzgzOTAgKGVpX2xvY2FsLT5yZXNldF84MzkwKQogI2RlZmluZSBlaV9ibG9ja19vdXRwdXQgKGVpX2xvY2FsLT5ibG9ja19vdXRwdXQpCkBAIC0xMjgsNyArMTI4LDcgQEAKICAqCWEgcGFnZSByZWdpc3RlciB0aGF0IGNvbnRyb2xzIGJhbmsgYW5kIHBhY2tldCBidWZmZXIgYWNjZXNzLiBXZSBndWFyZAogICoJdGhpcyB3aXRoIGVpX2xvY2FsLT5wYWdlX2xvY2suIE5vYm9keSBzaG91bGQgYXNzdW1lIG9yIHNldCB0aGUgcGFnZSBvdGhlcgogICoJdGhhbiB6ZXJvIHdoZW4gdGhlIGxvY2sgaXMgbm90IGhlbGQuIExvY2sgaG9sZGVycyBtdXN0IHJlc3RvcmUgcGFnZSAwCi0gKgliZWZvcmUgdW5sb2NraW5nLiBFdmVuIHB1cmUgcmVhZGVycyBtdXN0IHRha2UgdGhlIGxvY2sgdG8gcHJvdGVjdCBpbiAKKyAqCWJlZm9yZSB1bmxvY2tpbmcuIEV2ZW4gcHVyZSByZWFkZXJzIG11c3QgdGFrZSB0aGUgbG9jayB0byBwcm90ZWN0IGluCiAgKglwYWdlIDAuCiAgKgogICoJVG8gbWFrZSBsaWZlIGRpZmZpY3VsdCB0aGUgY2hpcCBjYW4gYWxzbyBiZSB2ZXJ5IHNsb3cuIFdlIHRoZXJlZm9yZSBjYW4ndApAQCAtMTQxLDE0ICsxNDEsMTQgQEAKICAqCWEgbGF0ZW5jeSBvbiBTTVAgaXJxIGRlbGl2ZXJ5LiBTbyB3ZSBjYW4gZWFzaWx5IGdvICJkaXNhYmxlIGlycSIgInN5bmMgaXJxcyIKICAqCWVudGVyIGxvY2ssIHRha2UgdGhlIHF1ZXVlZCBpcnEuIFNvIHdlIHdhZGRsZSBpbnN0ZWFkIG9mIGZseWluZy4KICAqCi0gKglGaW5hbGx5IGJ5IHNwZWNpYWwgYXJyYW5nZW1lbnQgZm9yIHRoZSBwdXJwb3NlIG9mIGJlaW5nIGdlbmVyYWxseSAKKyAqCUZpbmFsbHkgYnkgc3BlY2lhbCBhcnJhbmdlbWVudCBmb3IgdGhlIHB1cnBvc2Ugb2YgYmVpbmcgZ2VuZXJhbGx5CiAgKglhbm5veWluZyB0aGUgdHJhbnNtaXQgZnVuY3Rpb24gaXMgY2FsbGVkIGJoIGF0b21pYy4gVGhhdCBwbGFjZXMKICAqCXJlc3RyaWN0aW9ucyBvbiB0aGUgdXNlciBjb250ZXh0IGNhbGxlcnMgYXMgZGlzYWJsZV9pcnEgd29uJ3Qgc2F2ZQogICoJdGhlbS4KICAqLwotIAogCi0MCisKKwogLyoqCiAgKiBlaV9vcGVuIC0gT3Blbi9pbml0aWFsaXplIHRoZSBib2FyZC4KICAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIGluaXRpYWxpemUKQEAgLTE2OCwxMiArMTY4LDEyIEBACiAJCSBkZXYtPnR4X3RpbWVvdXQgPSBlaV90eF90aW1lb3V0OwogCWlmIChkZXYtPndhdGNoZG9nX3RpbWVvIDw9IDApCiAJCSBkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLSAgICAKKwogCS8qCiAJICoJR3JhYiB0aGUgcGFnZSBsb2NrIHNvIHdlIG93biB0aGUgcmVnaXN0ZXIgc2V0LCB0aGVuIGNhbGwKIAkgKgl0aGUgaW5pdCBmdW5jdGlvbi4KIAkgKi8KLSAgICAgIAorCiAgICAgICAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlOUzgzOTBfaW5pdChkZXYsIDEpOwogCS8qIFNldCB0aGUgZmxhZyBiZWZvcmUgd2UgZHJvcCB0aGUgbG9jaywgVGhhdCB3YXkgdGhlIElSUSBhcnJpdmVzCkBAIC0xOTgsNyArMTk4LDcgQEAKIAkvKgogCSAqCUhvbGQgdGhlIHBhZ2UgbG9jayBkdXJpbmcgY2xvc2UKIAkgKi8KLQkgCQorCiAgICAgICAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlOUzgzOTBfaW5pdChkZXYsIDApOwogICAgICAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKQEAgLTI0MSwyNiArMjQxLDI2IEBACiAJCWRldi0+bmFtZSwgKHR4c3IgJiBFTlRTUl9BQlQpID8gImV4Y2VzcyBjb2xsaXNpb25zLiIgOgogCQkoaXNyKSA/ICJsb3N0IGludGVycnVwdD8iIDogImNhYmxlIHByb2JsZW0/IiwgdHhzciwgaXNyLCB0aWNrc3NvZmFyKTsKIAotCWlmICghaXNyICYmICFlaV9sb2NhbC0+c3RhdC50eF9wYWNrZXRzKSAKKwlpZiAoIWlzciAmJiAhZWlfbG9jYWwtPnN0YXQudHhfcGFja2V0cykKIAl7CiAJCS8qIFRoZSA4MzkwIHByb2JhYmx5IGhhc24ndCBnb3R0ZW4gb24gdGhlIGNhYmxlIHlldC4gKi8KIAkJZWlfbG9jYWwtPmludGVyZmFjZV9udW0gXj0gMTsgICAvKiBUcnkgYSBkaWZmZXJlbnQgeGN2ci4gICovCiAJfQogCiAJLyogVWdseSBidXQgYSByZXNldCBjYW4gYmUgc2xvdywgeWV0IG11c3QgYmUgcHJvdGVjdGVkICovCi0JCQorCiAJZGlzYWJsZV9pcnFfbm9zeW5jX2xvY2tkZXAoZGV2LT5pcnEpOwogCXNwaW5fbG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0JCQorCiAJLyogVHJ5IHRvIHJlc3RhcnQgdGhlIGNhcmQuICBQZXJoYXBzIHRoZSB1c2VyIGhhcyBmaXhlZCBzb21ldGhpbmcuICovCiAJZWlfcmVzZXRfODM5MChkZXYpOwogCU5TODM5MF9pbml0KGRldiwgMSk7Ci0JCQorCiAJc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwogCWVuYWJsZV9pcnFfbG9ja2RlcChkZXYtPmlycSk7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQotICAgIAorCiAvKioKICAqIGVpX3N0YXJ0X3htaXQgLSBiZWdpbiBwYWNrZXQgdHJhbnNtaXNzaW9uCiAgKiBAc2tiOiBwYWNrZXQgdG8gYmUgc2VudApAQCAtMjY4LDcgKzI2OCw3IEBACiAgKgogICogU2VuZHMgYSBwYWNrZXQgdG8gYW4gODM5MCBuZXR3b3JrIGRldmljZS4KICAqLwotIAorCiBzdGF0aWMgaW50IGVpX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTI4NSwyNCArMjg1LDI0IEBACiAJCWRhdGEgPSBidWY7CiAJfQogCi0JLyogTWFzayBpbnRlcnJ1cHRzIGZyb20gdGhlIGV0aGVyY2FyZC4gCisJLyogTWFzayBpbnRlcnJ1cHRzIGZyb20gdGhlIGV0aGVyY2FyZC4KIAkgICBTTVA6IFdlIGhhdmUgdG8gZ3JhYiB0aGUgbG9jayBoZXJlIG90aGVyd2lzZSB0aGUgSVJRIGhhbmRsZXIKIAkgICBvbiBhbm90aGVyIENQVSBjYW4gZmxpcCB3aW5kb3cgYW5kIHJhY2UgdGhlIElSUSBtYXNrIHNldC4gV2UgZW5kCiAJICAgdXAgdHJhc2hpbmcgdGhlIG1jYXN0IGZpbHRlciBub3QgZGlzYWJsaW5nIGlycXMgaWYgd2UgZG9uJ3QgbG9jayAqLwotCSAgIAorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlvdXRiX3AoMHgwMCwgZTgzOTBfYmFzZSArIEVOMF9JTVIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLQkKLQkKKworCiAJLyoKIAkgKglTbG93IHBoYXNlIHdpdGggbG9jayBoZWxkLgogCSAqLwotCSAKLQlkaXNhYmxlX2lycV9ub3N5bmMoZGV2LT5pcnEpOwotCQorCisJZGlzYWJsZV9pcnFfbm9zeW5jX2xvY2tkZXAoZGV2LT5pcnEpOworCiAJc3Bpbl9sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLQkKKwogCWVpX2xvY2FsLT5pcnFsb2NrID0gMTsKIAogCS8qCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkgKiBjYXJkLCBsZWF2aW5nIGEgc3Vic3RhbnRpYWwgZ2FwIGJldHdlZW4gZWFjaCB0cmFuc21pdHRlZCBwYWNrZXQuCiAJICovCiAKLQlpZiAoZWlfbG9jYWwtPnR4MSA9PSAwKSAKKwlpZiAoZWlfbG9jYWwtPnR4MSA9PSAwKQogCXsKIAkJb3V0cHV0X3BhZ2UgPSBlaV9sb2NhbC0+dHhfc3RhcnRfcGFnZTsKIAkJZWlfbG9jYWwtPnR4MSA9IHNlbmRfbGVuZ3RoOwpAQCAtMzIxLDcgKzMyMSw3IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGlkbGUgdHJhbnNtaXR0ZXIgdHgyPSVkLCBsYXN0dHg9JWQsIHR4aW5nPSVkLlxuIiwKIAkJCQlkZXYtPm5hbWUsIGVpX2xvY2FsLT50eDIsIGVpX2xvY2FsLT5sYXN0dHgsIGVpX2xvY2FsLT50eGluZyk7CiAJfQotCWVsc2UgaWYgKGVpX2xvY2FsLT50eDIgPT0gMCkgCisJZWxzZSBpZiAoZWlfbG9jYWwtPnR4MiA9PSAwKQogCXsKIAkJb3V0cHV0X3BhZ2UgPSBlaV9sb2NhbC0+dHhfc3RhcnRfcGFnZSArIFRYX1BBR0VTLzI7CiAJCWVpX2xvY2FsLT50eDIgPSBzZW5kX2xlbmd0aDsKQEAgLTMzOCw3ICszMzgsNyBAQAogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCW91dGJfcChFTklTUl9BTEwsIGU4MzkwX2Jhc2UgKyBFTjBfSU1SKTsKIAkJc3Bpbl91bmxvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwotCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwkJZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKIAkJZWlfbG9jYWwtPnN0YXQudHhfZXJyb3JzKys7CiAJCXJldHVybiAxOwogCX0KQEAgLTM0OCwyMCArMzQ4LDIwIEBACiAJICogaXNuJ3QgYWxyZWFkeSBzZW5kaW5nLiBJZiBpdCBpcyBidXN5LCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2lsbAogCSAqIHRyaWdnZXIgdGhlIHNlbmQgbGF0ZXIsIHVwb24gcmVjZWl2aW5nIGEgVHggZG9uZSBpbnRlcnJ1cHQuCiAJICovCi0JIAorCiAJZWlfYmxvY2tfb3V0cHV0KGRldiwgc2VuZF9sZW5ndGgsIGRhdGEsIG91dHB1dF9wYWdlKTsKLQkJCi0JaWYgKCEgZWlfbG9jYWwtPnR4aW5nKSAKKworCWlmICghIGVpX2xvY2FsLT50eGluZykKIAl7CiAJCWVpX2xvY2FsLT50eGluZyA9IDE7CiAJCU5TODM5MF90cmlnZ2VyX3NlbmQoZGV2LCBzZW5kX2xlbmd0aCwgb3V0cHV0X3BhZ2UpOwogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJaWYgKG91dHB1dF9wYWdlID09IGVpX2xvY2FsLT50eF9zdGFydF9wYWdlKSAKKwkJaWYgKG91dHB1dF9wYWdlID09IGVpX2xvY2FsLT50eF9zdGFydF9wYWdlKQogCQl7CiAJCQllaV9sb2NhbC0+dHgxID0gLTE7CiAJCQllaV9sb2NhbC0+bGFzdHR4ID0gLTE7CiAJCX0KLQkJZWxzZSAKKwkJZWxzZQogCQl7CiAJCQllaV9sb2NhbC0+dHgyID0gLTE7CiAJCQllaV9sb2NhbC0+bGFzdHR4ID0gLTI7CkBAIC0zNzcsMTYgKzM3NywxNiBAQAogCS8qIFR1cm4gODM5MCBpbnRlcnJ1cHRzIGJhY2sgb24uICovCiAJZWlfbG9jYWwtPmlycWxvY2sgPSAwOwogCW91dGJfcChFTklTUl9BTEwsIGU4MzkwX2Jhc2UgKyBFTjBfSU1SKTsKLQkKKwogCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwllbmFibGVfaXJxX2xvY2tkZXAoZGV2LT5pcnEpOwogCiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAllaV9sb2NhbC0+c3RhdC50eF9ieXRlcyArPSBzZW5kX2xlbmd0aDsKLSAgICAKKwogCXJldHVybiAwOwogfQotDAorCiAvKioKICAqIGVpX2ludGVycnVwdCAtIGhhbmRsZSB0aGUgaW50ZXJydXB0cyBmcm9tIGFuIDgzOTAKICAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKQEAgLTQwNiwyMyArNDA2LDIzIEBACiAJbG9uZyBlODM5MF9iYXNlOwogCWludCBpbnRlcnJ1cHRzLCBucl9zZXJ2aWNlZCA9IDA7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWw7Ci0gICAgCi0JaWYgKGRldiA9PSBOVUxMKSAKKworCWlmIChkZXYgPT0gTlVMTCkKIAl7CiAJCXByaW50ayAoIm5ldF9pbnRlcnJ1cHQoKTogaXJxICVkIGZvciB1bmtub3duIGRldmljZS5cbiIsIGlycSk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0gICAgCisKIAllODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyoKIAkgKglQcm90ZWN0IHRoZSBpcnEgdGVzdCB0b28uCiAJICovCi0JIAorCiAJc3Bpbl9sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKIAotCWlmIChlaV9sb2NhbC0+aXJxbG9jaykgCisJaWYgKGVpX2xvY2FsLT5pcnFsb2NrKQogCXsKICNpZiAxIC8qIFRoaXMgbWlnaHQganVzdCBiZSBhbiBpbnRlcnJ1cHQgZm9yIGEgUENJIGRldmljZSBzaGFyaW5nIHRoaXMgbGluZSAqLwogCQkvKiBUaGUgImlycWxvY2siIGNoZWNrIGlzIG9ubHkgZm9yIHRlc3RpbmcuICovCkBAIC00MzUsMTYgKzQzNSwxNiBAQAogCQlzcGluX3VubG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9Ci0gICAgCisKIAkvKiBDaGFuZ2UgdG8gcGFnZSAwIGFuZCByZWFkIHRoZSBpbnRyIHN0YXR1cyByZWcuICovCiAJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKIAlpZiAoZWlfZGVidWcgPiAzKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGludGVycnVwdChpc3I9JSMyLjJ4KS5cbiIsIGRldi0+bmFtZSwKIAkJCSAgIGluYl9wKGU4MzkwX2Jhc2UgKyBFTjBfSVNSKSk7Ci0gICAgCisKIAkvKiAhIUFzc3VtcHRpb24hISAtLSB3ZSBzdGF5IGluIHBhZ2UgMC4JIERvbid0IGJyZWFrIHRoaXMuICovCiAJd2hpbGUgKChpbnRlcnJ1cHRzID0gaW5iX3AoZTgzOTBfYmFzZSArIEVOMF9JU1IpKSAhPSAwCi0JCSAgICYmICsrbnJfc2VydmljZWQgPCBNQVhfU0VSVklDRSkgCisJCSAgICYmICsrbnJfc2VydmljZWQgPCBNQVhfU0VSVklDRSkKIAl7CiAJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW50ZXJydXB0IGZyb20gc3RvcHBlZCBjYXJkXG4iLCBkZXYtPm5hbWUpOwpAQCAtNDUzLDkgKzQ1Myw5IEBACiAJCQlpbnRlcnJ1cHRzID0gMDsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfT1ZFUikgCisJCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfT1ZFUikKIAkJCWVpX3J4X292ZXJydW4oZGV2KTsKLQkJZWxzZSBpZiAoaW50ZXJydXB0cyAmIChFTklTUl9SWCtFTklTUl9SWF9FUlIpKSAKKwkJZWxzZSBpZiAoaW50ZXJydXB0cyAmIChFTklTUl9SWCtFTklTUl9SWF9FUlIpKQogCQl7CiAJCQkvKiBHb3QgYSBnb29kICg/KSBwYWNrZXQuICovCiAJCQllaV9yZWNlaXZlKGRldik7CkBAIC00NjYsMjcgKzQ2NiwyNyBAQAogCQllbHNlIGlmIChpbnRlcnJ1cHRzICYgRU5JU1JfVFhfRVJSKQogCQkJZWlfdHhfZXJyKGRldik7CiAKLQkJaWYgKGludGVycnVwdHMgJiBFTklTUl9DT1VOVEVSUykgCisJCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfQ09VTlRFUlMpCiAJCXsKIAkJCWVpX2xvY2FsLT5zdGF0LnJ4X2ZyYW1lX2Vycm9ycyArPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIwKTsKIAkJCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIxKTsKIAkJCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0NPVU5URVIyKTsKIAkJCW91dGJfcChFTklTUl9DT1VOVEVSUywgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2sgaW50ci4gKi8KIAkJfQotCQkKKwogCQkvKiBJZ25vcmUgYW55IFJEQyBpbnRlcnJ1cHRzIHRoYXQgbWFrZSBpdCBiYWNrIHRvIGhlcmUuICovCi0JCWlmIChpbnRlcnJ1cHRzICYgRU5JU1JfUkRDKSAKKwkJaWYgKGludGVycnVwdHMgJiBFTklTUl9SREMpCiAJCXsKIAkJCW91dGJfcChFTklTUl9SREMsIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsKIAkJfQogCiAJCW91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVEFSVCwgZTgzOTBfYmFzZSArIEU4MzkwX0NNRCk7CiAJfQotICAgIAotCWlmIChpbnRlcnJ1cHRzICYmIGVpX2RlYnVnKSAKKworCWlmIChpbnRlcnJ1cHRzICYmIGVpX2RlYnVnKQogCXsKIAkJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUQVJULCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLQkJaWYgKG5yX3NlcnZpY2VkID49IE1BWF9TRVJWSUNFKSAKKwkJaWYgKG5yX3NlcnZpY2VkID49IE1BWF9TRVJWSUNFKQogCQl7CiAJCQkvKiAweEZGIGlzIHZhbGlkIGZvciBhIGNhcmQgcmVtb3ZhbCAqLwogCQkJaWYoaW50ZXJydXB0cyE9MHhGRikKQEAgLTUwNSw5ICs1MDUsOSBAQAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiB2b2lkIGVpX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJZGlzYWJsZV9pcnFfbG9ja2RlcChkZXYtPmlycSk7CiAJZWlfaW50ZXJydXB0KGRldi0+aXJxLCBkZXYsIE5VTEwpOwotCWVuYWJsZV9pcnEoZGV2LT5pcnEpOworCWVuYWJsZV9pcnFfbG9ja2RlcChkZXYtPmlycSk7CiB9CiAjZW5kaWYKIApAQCAtNTUxLDcgKzU1MSw3IEBACiAKIAlpZiAodHhfd2FzX2Fib3J0ZWQpCiAJCWVpX3R4X2ludHIoZGV2KTsKLQllbHNlIAorCWVsc2UKIAl7CiAJCWVpX2xvY2FsLT5zdGF0LnR4X2Vycm9ycysrOwogCQlpZiAodHhzciAmIEVOVFNSX0NSUykgZWlfbG9jYWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKQEAgLTU3Myw3ICs1NzMsNyBAQAogCWxvbmcgZTgzOTBfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc3RhdHVzID0gaW5iKGU4MzkwX2Jhc2UgKyBFTjBfVFNSKTsKLSAgICAKKwogCW91dGJfcChFTklTUl9UWCwgZTgzOTBfYmFzZSArIEVOMF9JU1IpOyAvKiBBY2sgaW50ci4gKi8KIAogCS8qCkBAIC01ODIsMTMgKzU4MiwxMyBAQAogCSAqLwogCWVpX2xvY2FsLT50eHF1ZXVlLS07CiAKLQlpZiAoZWlfbG9jYWwtPnR4MSA8IDApIAorCWlmIChlaV9sb2NhbC0+dHgxIDwgMCkKIAl7CiAJCWlmIChlaV9sb2NhbC0+bGFzdHR4ICE9IDEgJiYgZWlfbG9jYWwtPmxhc3R0eCAhPSAtMSkKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJvZ3VzIGxhc3RfdHhfYnVmZmVyICVkLCB0eDE9JWQuXG4iLAogCQkJCWVpX2xvY2FsLT5uYW1lLCBlaV9sb2NhbC0+bGFzdHR4LCBlaV9sb2NhbC0+dHgxKTsKIAkJZWlfbG9jYWwtPnR4MSA9IDA7Ci0JCWlmIChlaV9sb2NhbC0+dHgyID4gMCkgCisJCWlmIChlaV9sb2NhbC0+dHgyID4gMCkKIAkJewogCQkJZWlfbG9jYWwtPnR4aW5nID0gMTsKIAkJCU5TODM5MF90cmlnZ2VyX3NlbmQoZGV2LCBlaV9sb2NhbC0+dHgyLCBlaV9sb2NhbC0+dHhfc3RhcnRfcGFnZSArIDYpOwpAQCAtNTk2LDE1ICs1OTYsMTUgQEAKIAkJCWVpX2xvY2FsLT50eDIgPSAtMSwKIAkJCWVpX2xvY2FsLT5sYXN0dHggPSAyOwogCQl9Ci0JCWVsc2UgZWlfbG9jYWwtPmxhc3R0eCA9IDIwLCBlaV9sb2NhbC0+dHhpbmcgPSAwOwkKKwkJZWxzZSBlaV9sb2NhbC0+bGFzdHR4ID0gMjAsIGVpX2xvY2FsLT50eGluZyA9IDA7CiAJfQotCWVsc2UgaWYgKGVpX2xvY2FsLT50eDIgPCAwKSAKKwllbHNlIGlmIChlaV9sb2NhbC0+dHgyIDwgMCkKIAl7CiAJCWlmIChlaV9sb2NhbC0+bGFzdHR4ICE9IDIgICYmICBlaV9sb2NhbC0+bGFzdHR4ICE9IC0yKQogCQkJcHJpbnRrKCIlczogYm9ndXMgbGFzdF90eF9idWZmZXIgJWQsIHR4Mj0lZC5cbiIsCiAJCQkJZWlfbG9jYWwtPm5hbWUsIGVpX2xvY2FsLT5sYXN0dHgsIGVpX2xvY2FsLT50eDIpOwogCQllaV9sb2NhbC0+dHgyID0gMDsKLQkJaWYgKGVpX2xvY2FsLT50eDEgPiAwKSAKKwkJaWYgKGVpX2xvY2FsLT50eDEgPiAwKQogCQl7CiAJCQllaV9sb2NhbC0+dHhpbmcgPSAxOwogCQkJTlM4MzkwX3RyaWdnZXJfc2VuZChkZXYsIGVpX2xvY2FsLT50eDEsIGVpX2xvY2FsLT50eF9zdGFydF9wYWdlKTsKQEAgLTYyMywxNyArNjIzLDE3IEBACiAJCWVpX2xvY2FsLT5zdGF0LmNvbGxpc2lvbnMrKzsKIAlpZiAoc3RhdHVzICYgRU5UU1JfUFRYKQogCQllaV9sb2NhbC0+c3RhdC50eF9wYWNrZXRzKys7Ci0JZWxzZSAKKwllbHNlCiAJewogCQllaV9sb2NhbC0+c3RhdC50eF9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIEVOVFNSX0FCVCkgCisJCWlmIChzdGF0dXMgJiBFTlRTUl9BQlQpCiAJCXsKIAkJCWVpX2xvY2FsLT5zdGF0LnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQllaV9sb2NhbC0+c3RhdC5jb2xsaXNpb25zICs9IDE2OwogCQl9Ci0JCWlmIChzdGF0dXMgJiBFTlRTUl9DUlMpIAorCQlpZiAoc3RhdHVzICYgRU5UU1JfQ1JTKQogCQkJZWlfbG9jYWwtPnN0YXQudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJaWYgKHN0YXR1cyAmIEVOVFNSX0ZVKSAKKwkJaWYgKHN0YXR1cyAmIEVOVFNSX0ZVKQogCQkJZWlfbG9jYWwtPnN0YXQudHhfZmlmb19lcnJvcnMrKzsKIAkJaWYgKHN0YXR1cyAmIEVOVFNSX0NESCkKIAkJCWVpX2xvY2FsLT5zdGF0LnR4X2hlYXJ0YmVhdF9lcnJvcnMrKzsKQEAgLTY0Nyw3ICs2NDcsNyBAQAogICogZWlfcmVjZWl2ZSAtIHJlY2VpdmUgc29tZSBwYWNrZXRzCiAgKiBAZGV2OiBuZXR3b3JrIGRldmljZSB3aXRoIHdoaWNoIHJlY2VpdmUgd2lsbCBiZSBydW4KICAqCi0gKiBXZSBoYXZlIGEgZ29vZCBwYWNrZXQocyksIGdldCBpdC90aGVtIG91dCBvZiB0aGUgYnVmZmVycy4gCisgKiBXZSBoYXZlIGEgZ29vZCBwYWNrZXQocyksIGdldCBpdC90aGVtIG91dCBvZiB0aGUgYnVmZmVycy4KICAqIENhbGxlZCB3aXRoIGxvY2sgaGVsZC4KICAqLwogCkBAIC02NjAsNDIgKzY2MCw0MiBAQAogCWludCByeF9wa3RfY291bnQgPSAwOwogCXN0cnVjdCBlODM5MF9wa3RfaGRyIHJ4X2ZyYW1lOwogCWludCBudW1fcnhfcGFnZXMgPSBlaV9sb2NhbC0+c3RvcF9wYWdlLWVpX2xvY2FsLT5yeF9zdGFydF9wYWdlOwotICAgIAotCXdoaWxlICgrK3J4X3BrdF9jb3VudCA8IDEwKSAKKworCXdoaWxlICgrK3J4X3BrdF9jb3VudCA8IDEwKQogCXsKIAkJaW50IHBrdF9sZW4sIHBrdF9zdGF0OwotCQkKKwogCQkvKiBHZXQgdGhlIHJ4IHBhZ2UgKGluY29taW5nIHBhY2tldCBwb2ludGVyKS4gKi8KIAkJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UxLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKIAkJcnhpbmdfcGFnZSA9IGluYl9wKGU4MzkwX2Jhc2UgKyBFTjFfQ1VSUEFHKTsKIAkJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwLCBlODM5MF9iYXNlICsgRTgzOTBfQ01EKTsKLQkJCisKIAkJLyogUmVtb3ZlIG9uZSBmcmFtZSBmcm9tIHRoZSByaW5nLiAgQm91bmRhcnkgaXMgYWx3YXlzIGEgcGFnZSBiZWhpbmQuICovCiAJCXRoaXNfZnJhbWUgPSBpbmJfcChlODM5MF9iYXNlICsgRU4wX0JPVU5EQVJZKSArIDE7CiAJCWlmICh0aGlzX2ZyYW1lID49IGVpX2xvY2FsLT5zdG9wX3BhZ2UpCiAJCQl0aGlzX2ZyYW1lID0gZWlfbG9jYWwtPnJ4X3N0YXJ0X3BhZ2U7Ci0JCQorCiAJCS8qIFNvbWVkYXkgd2UnbGwgb21pdCB0aGUgcHJldmlvdXMsIGlmZiB3ZSBuZXZlciBnZXQgdGhpcyBtZXNzYWdlLgotCQkgICAoVGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNsb25lIGNsYWltZWQgdG8gaGF2ZSBhIHByb2JsZW0uKSAgCi0JCSAgIAorCQkgICAoVGhlcmUgaXMgYXQgbGVhc3Qgb25lIGNsb25lIGNsYWltZWQgdG8gaGF2ZSBhIHByb2JsZW0uKQorCiAJCSAgIEtlZXAgcXVpZXQgaWYgaXQgbG9va3MgbGlrZSBhIGNhcmQgcmVtb3ZhbC4gT25lIHByb2JsZW0gaGVyZQogCQkgICBpcyB0aGF0IHNvbWUgY2xvbmVzIGNyYXNoIGluIHJvdWdobHkgdGhlIHNhbWUgd2F5LgogCQkgKi8KIAkJaWYgKGVpX2RlYnVnID4gMCAgJiYgIHRoaXNfZnJhbWUgIT0gZWlfbG9jYWwtPmN1cnJlbnRfcGFnZSAmJiAodGhpc19mcmFtZSE9MHgwIHx8IHJ4aW5nX3BhZ2UhPTB4RkYpKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbWlzbWF0Y2hlZCByZWFkIHBhZ2UgcG9pbnRlcnMgJTJ4IHZzICUyeC5cbiIsCiAJCQkJICAgZGV2LT5uYW1lLCB0aGlzX2ZyYW1lLCBlaV9sb2NhbC0+Y3VycmVudF9wYWdlKTsKLQkJCisKIAkJaWYgKHRoaXNfZnJhbWUgPT0gcnhpbmdfcGFnZSkJLyogUmVhZCBhbGwgdGhlIGZyYW1lcz8gKi8KIAkJCWJyZWFrOwkJCQkvKiBEb25lIGZvciBub3cgKi8KLQkJCisKIAkJY3VycmVudF9vZmZzZXQgPSB0aGlzX2ZyYW1lIDw8IDg7CiAJCWVpX2dldF84MzkwX2hkcihkZXYsICZyeF9mcmFtZSwgdGhpc19mcmFtZSk7Ci0JCQorCiAJCXBrdF9sZW4gPSByeF9mcmFtZS5jb3VudCAtIHNpemVvZihzdHJ1Y3QgZTgzOTBfcGt0X2hkcik7CiAJCXBrdF9zdGF0ID0gcnhfZnJhbWUuc3RhdHVzOwotCQkKKwogCQluZXh0X2ZyYW1lID0gdGhpc19mcmFtZSArIDEgKyAoKHBrdF9sZW4rNCk+PjgpOwotCQkKKwogCQkvKiBDaGVjayBmb3IgYm9nb3NpdHkgd2FybmVkIGJ5IDNjNTAzIGJvb2s6IHRoZSBzdGF0dXMgYnl0ZSBpcyBuZXZlcgogCQkgICB3cml0dGVuLiAgVGhpcyBoYXBwZW5lZCBhIGxvdCBkdXJpbmcgdGVzdGluZyEgVGhpcyBjb2RlIHNob3VsZCBiZQogCQkgICBjbGVhbmVkIHVwIHNvbWVkYXkuICovCkBAIC03MDksNyArNzA5LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKHBrdF9sZW4gPCA2MCAgfHwgIHBrdF9sZW4gPiAxNTE4KSAKKwkJaWYgKHBrdF9sZW4gPCA2MCAgfHwgIHBrdF9sZW4gPiAxNTE4KQogCQl7CiAJCQlpZiAoZWlfZGVidWcpCiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBib2d1cyBwYWNrZXQgc2l6ZTogJWQsIHN0YXR1cz0lIzJ4IG54cGc9JSMyeC5cbiIsCkBAIC03MTgsMTIgKzcxOCwxMiBAQAogCQkJZWlfbG9jYWwtPnN0YXQucnhfZXJyb3JzKys7CiAJCQllaV9sb2NhbC0+c3RhdC5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCX0KLQkJIGVsc2UgaWYgKChwa3Rfc3RhdCAmIDB4MEYpID09IEVOUlNSX1JYT0spIAorCQkgZWxzZSBpZiAoKHBrdF9zdGF0ICYgMHgwRikgPT0gRU5SU1JfUlhPSykKIAkJewogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJCQorCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4rMik7Ci0JCQlpZiAoc2tiID09IE5VTEwpIAorCQkJaWYgKHNrYiA9PSBOVUxMKQogCQkJewogCQkJCWlmIChlaV9kZWJ1ZyA+IDEpCiAJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogQ291bGRuJ3QgYWxsb2NhdGUgYSBza19idWZmIG9mIHNpemUgJWQuXG4iLApAQCAtNzQ1LDggKzc0NSw4IEBACiAJCQkJaWYgKHBrdF9zdGF0ICYgRU5SU1JfUEhZKQogCQkJCQllaV9sb2NhbC0+c3RhdC5tdWx0aWNhc3QrKzsKIAkJCX0KLQkJfSAKLQkJZWxzZSAKKwkJfQorCQllbHNlCiAJCXsKIAkJCWlmIChlaV9kZWJ1ZykKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJvZ3VzIHBhY2tldDogc3RhdHVzPSUjMnggbnhwZz0lIzJ4IHNpemU9JWRcbiIsCkBAIC03NTgsNyArNzU4LDcgQEAKIAkJCQllaV9sb2NhbC0+c3RhdC5yeF9maWZvX2Vycm9ycysrOwogCQl9CiAJCW5leHRfZnJhbWUgPSByeF9mcmFtZS5uZXh0OwotCQkKKwogCQkvKiBUaGlzIF9zaG91bGRfIG5ldmVyIGhhcHBlbjogaXQncyBoZXJlIGZvciBhdm9pZGluZyBiYWQgY2xvbmVzLiAqLwogCQlpZiAobmV4dF9mcmFtZSA+PSBlaV9sb2NhbC0+c3RvcF9wYWdlKSB7CiAJCQlwcmludGsoIiVzOiBuZXh0IGZyYW1lIGluY29uc2lzdGVuY3ksICUjMnhcbiIsIGRldi0+bmFtZSwKQEAgLTc4NSw3ICs3ODUsNyBAQAogICogVGhpcyBpbmNsdWRlcyBjYXVzaW5nICJ0aGUgTklDIHRvIGRlZmVyIGluZGVmaW5pdGVseSB3aGVuIGl0IGlzIHN0b3BwZWQKICAqIG9uIGEgYnVzeSBuZXR3b3JrLiIgIFVnaC4KICAqIENhbGxlZCB3aXRoIGxvY2sgaGVsZC4gRG9uJ3QgY2FsbCB0aGlzIHdpdGggdGhlIGludGVycnVwdHMgb2ZmIG9yIHlvdXIKLSAqIGNvbXB1dGVyIHdpbGwgaGF0ZSB5b3UgLSBpdCB0YWtlcyAxMG1zIG9yIHNvLiAKKyAqIGNvbXB1dGVyIHdpbGwgaGF0ZSB5b3UgLSBpdCB0YWtlcyAxMG1zIG9yIHNvLgogICovCiAKIHN0YXRpYyB2b2lkIGVpX3J4X292ZXJydW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTc5MywxOSArNzkzLDE5IEBACiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJdW5zaWduZWQgY2hhciB3YXNfdHhpbmcsIG11c3RfcmVzZW5kID0gMDsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlICopIG5ldGRldl9wcml2KGRldik7Ci0gICAgCisKIAkvKgogCSAqIFJlY29yZCB3aGV0aGVyIGEgVHggd2FzIGluIHByb2dyZXNzIGFuZCB0aGVuIGlzc3VlIHRoZQogCSAqIHN0b3AgY29tbWFuZC4KIAkgKi8KIAl3YXNfdHhpbmcgPSBpbmJfcChlODM5MF9iYXNlK0U4MzkwX0NNRCkgJiBFODM5MF9UUkFOUzsKIAlvdXRiX3AoRTgzOTBfTk9ETUErRTgzOTBfUEFHRTArRTgzOTBfU1RPUCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOwotICAgIAorCiAJaWYgKGVpX2RlYnVnID4gMSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlciBvdmVycnVuLlxuIiwgZGV2LT5uYW1lKTsKIAllaV9sb2NhbC0+c3RhdC5yeF9vdmVyX2Vycm9ycysrOwotICAgIAotCS8qIAorCisJLyoKIAkgKiBXYWl0IGEgZnVsbCBUeCB0aW1lICgxLjJtcykgKyBzb21lIGd1YXJkIHRpbWUsIE5TIHNheXMgMS42bXMgdG90YWwuCiAJICogRWFybHkgZGF0YXNoZWV0cyBzYWlkIHRvIHBvbGwgdGhlIHJlc2V0IGJpdCwgYnV0IG5vdyB0aGV5IHNheSB0aGF0CiAJICogaXQgImlzIG5vdCBhIHJlbGlhYmxlIGluZGljYXRvciBhbmQgc3Vic2VxdWVudGx5IHNob3VsZCBiZSBpZ25vcmVkLiIKQEAgLTgyNiw3ICs4MjYsNyBAQAogCSAqLwogCiAJaWYgKHdhc190eGluZykKLQl7IAorCXsKIAkJdW5zaWduZWQgY2hhciB0eF9jb21wbGV0ZWQgPSBpbmJfcChlODM5MF9iYXNlK0VOMF9JU1IpICYgKEVOSVNSX1RYK0VOSVNSX1RYX0VSUik7CiAJCWlmICghdHhfY29tcGxldGVkKQogCQkJbXVzdF9yZXNlbmQgPSAxOwpAQCAtODQ4LDcgKzg0OCw3IEBACiAJLyoKIAkgKiBMZWF2ZSBsb29wYmFjayBtb2RlLCBhbmQgcmVzZW5kIGFueSBwYWNrZXQgdGhhdCBnb3Qgc3RvcHBlZC4KIAkgKi8KLQlvdXRiX3AoRTgzOTBfVFhDT05GSUcsIGU4MzkwX2Jhc2UgKyBFTjBfVFhDUik7IAorCW91dGJfcChFODM5MF9UWENPTkZJRywgZTgzOTBfYmFzZSArIEVOMF9UWENSKTsKIAlpZiAobXVzdF9yZXNlbmQpCiAgICAgCQlvdXRiX3AoRTgzOTBfTk9ETUEgKyBFODM5MF9QQUdFMCArIEU4MzkwX1NUQVJUICsgRTgzOTBfVFJBTlMsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOwogfQpAQCAtODU2LDEzICs4NTYsMTMgQEAKIC8qCiAgKglDb2xsZWN0IHRoZSBzdGF0cy4gVGhpcyBpcyBjYWxsZWQgdW5sb2NrZWQgYW5kIGZyb20gc2V2ZXJhbCBjb250ZXh0cy4KICAqLwotIAorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmdldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSAqKSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgCisKIAkvKiBJZiB0aGUgY2FyZCBpcyBzdG9wcGVkLCBqdXN0IHJldHVybiB0aGUgcHJlc2VudCBzdGF0cy4gKi8KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuICZlaV9sb2NhbC0+c3RhdDsKQEAgLTg3Myw3ICs4NzMsNyBAQAogCWVpX2xvY2FsLT5zdGF0LnJ4X2NyY19lcnJvcnMgICArPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjEpOwogCWVpX2xvY2FsLT5zdGF0LnJ4X21pc3NlZF9lcnJvcnMrPSBpbmJfcChpb2FkZHIgKyBFTjBfQ09VTlRFUjIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLSAgICAKKwogCXJldHVybiAmZWlfbG9jYWwtPnN0YXQ7CiB9CiAKQEAgLTg4MSwyMSArODgxLDIxIEBACiAgKiBGb3JtIHRoZSA2NCBiaXQgODM5MCBtdWx0aWNhc3QgdGFibGUgZnJvbSB0aGUgbGlua2VkIGxpc3Qgb2YgYWRkcmVzc2VzCiAgKiBhc3NvY2lhdGVkIHdpdGggdGhpcyBkZXYgc3RydWN0dXJlLgogICovCi0gCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYWtlX21jX2JpdHModTggKmJpdHMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAKLQlmb3IgKGRtaT1kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pPWRtaS0+bmV4dCkgCisJZm9yIChkbWk9ZGV2LT5tY19saXN0OyBkbWk7IGRtaT1kbWktPm5leHQpCiAJewogCQl1MzIgY3JjOwotCQlpZiAoZG1pLT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTikgCisJCWlmIChkbWktPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKQogCQl7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBtdWx0aWNhc3QgYWRkcmVzcyBsZW5ndGggZ2l2ZW4uXG4iLCBkZXYtPm5hbWUpOwogCQkJY29udGludWU7CiAJCX0KIAkJY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBkbWktPmRtaV9hZGRyKTsKLQkJLyogCisJCS8qCiAJCSAqIFRoZSA4MzkwIHVzZXMgdGhlIDYgbW9zdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZQogCQkgKiBDUkMgdG8gaW5kZXggdGhlIG11bHRpY2FzdCB0YWJsZS4KIAkJICovCkBAIC05MDgsMTYgKzkwOCwxNiBAQAogICogQGRldjogbmV0IGRldmljZSBmb3Igd2hpY2ggbXVsdGljYXN0IGZpbHRlciBpcyBhZGp1c3RlZAogICoKICAqCVNldCBvciBjbGVhciB0aGUgbXVsdGljYXN0IGZpbHRlciBmb3IgdGhpcyBhZGFwdG9yLiBNYXkgYmUgY2FsbGVkCi0gKglmcm9tIGEgQkggaW4gMi4xLnguIE11c3QgYmUgY2FsbGVkIHdpdGggbG9jayBoZWxkLiAKKyAqCWZyb20gYSBCSCBpbiAyLjEueC4gTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrIGhlbGQuCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgZG9fc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbG9uZyBlODM5MF9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IGk7CiAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgPSAoc3RydWN0IGVpX2RldmljZSopbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmICghKGRldi0+ZmxhZ3MmKElGRl9QUk9NSVNDfElGRl9BTExNVUxUSSkpKSAKKwlpZiAoIShkZXYtPmZsYWdzJihJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkKIAl7CiAJCW1lbXNldChlaV9sb2NhbC0+bWNmaWx0ZXIsIDAsIDgpOwogCQlpZiAoZGV2LT5tY19saXN0KQpAQCAtOTI2LDIzICs5MjYsMjMgQEAKIAllbHNlCiAJCW1lbXNldChlaV9sb2NhbC0+bWNmaWx0ZXIsIDB4RkYsIDgpOwkvKiBtY2FzdCBzZXQgdG8gYWNjZXB0LWFsbCAqLwogCi0JLyogCisJLyoKIAkgKiBEUDgzOTAgbWFudWFscyBkb24ndCBzcGVjaWZ5IGFueSBtYWdpYyBzZXF1ZW5jZSBmb3IgYWx0ZXJpbmcKIAkgKiB0aGUgbXVsdGljYXN0IHJlZ3Mgb24gYW4gYWxyZWFkeSBydW5uaW5nIGNhcmQuIFRvIGJlIHNhZmUsIHdlCiAJICogZW5zdXJlIG11bHRpY2FzdCBtb2RlIGlzIG9mZiBwcmlvciB0byBsb2FkaW5nIHVwIHRoZSBuZXcgaGFzaAogCSAqIHRhYmxlLiBJZiB0aGlzIHByb3ZlcyB0byBiZSBub3QgZW5vdWdoLCB3ZSBjYW4gYWx3YXlzIHJlc29ydAogCSAqIHRvIHN0b3BwaW5nIHRoZSBOSUMsIGxvYWRpbmcgdGhlIHRhYmxlIGFuZCB0aGVuIHJlc3RhcnRpbmcuCiAJICoKLQkgKiBCdWcgQWxlcnQhICBUaGUgTUMgcmVncyBvbiB0aGUgU01DIDgzQzY5MCAoU01DIEVsaXRlIGFuZCBTTUMgCisJICogQnVnIEFsZXJ0ISAgVGhlIE1DIHJlZ3Mgb24gdGhlIFNNQyA4M0M2OTAgKFNNQyBFbGl0ZSBhbmQgU01DCiAJICogRWxpdGUxNikgYXBwZWFyIHRvIGJlIHdyaXRlLW9ubHkuIFRoZSBOUyA4MzkwIGRhdGEgc2hlZXQgbGlzdHMKIAkgKiB0aGVtIGFzIHIvdyBzbyB0aGlzIGlzIGEgYnVnLiAgVGhlIFNNQyA4M0M3OTAgKFNNQyBVbHRyYSBhbmQKIAkgKiBVbHRyYTMyIEVJU0EpIGFwcGVhcnMgdG8gaGF2ZSB0aGlzIGJ1ZyBmaXhlZC4KIAkgKi8KLQkgCisKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQlvdXRiX3AoRTgzOTBfUlhDT05GSUcsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CiAJb3V0Yl9wKEU4MzkwX05PRE1BICsgRTgzOTBfUEFHRTEsIGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpOwotCWZvcihpID0gMDsgaSA8IDg7IGkrKykgCisJZm9yKGkgPSAwOyBpIDwgODsgaSsrKQogCXsKIAkJb3V0Yl9wKGVpX2xvY2FsLT5tY2ZpbHRlcltpXSwgZTgzOTBfYmFzZSArIEVOMV9NVUxUX1NISUZUKGkpKTsKICNpZm5kZWYgQlVHXzgzQzY5MApAQCAtOTY1LDE2ICs5NjUsMTYgQEAKICAqCWJlIHBhcmFsbGVsIHRvIGp1c3QgYWJvdXQgZXZlcnl0aGluZyBlbHNlLiBJdHMgYWxzbyBmYWlybHkgcXVpY2sgYW5kCiAgKglub3QgY2FsbGVkIHRvbyBvZnRlbi4gTXVzdCBwcm90ZWN0IGFnYWluc3QgYm90aCBiaCBhbmQgaXJxIHVzZXJzCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWlfZGV2aWNlICplaV9sb2NhbCA9IChzdHJ1Y3QgZWlfZGV2aWNlKiluZXRkZXZfcHJpdihkZXYpOwotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKIAlkb19zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaV9sb2NhbC0+cGFnZV9sb2NrLCBmbGFncyk7Ci19CQorfQogCiAvKioKICAqIGV0aGRldl9zZXR1cCAtIGluaXQgcmVzdCBvZiA4MzkwIGRldmljZSBzdHJ1Y3QKQEAgLTk4OSw3ICs5ODksNyBAQAogCXN0cnVjdCBlaV9kZXZpY2UgKmVpX2xvY2FsID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKIAlpZiAoZWlfZGVidWcgPiAxKQogCQlwcmludGsodmVyc2lvbik7Ci0gICAgCisKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9ICZlaV9zdGFydF94bWl0OwogCWRldi0+Z2V0X3N0YXRzCT0gZ2V0X3N0YXRzOwogCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJnNldF9tdWx0aWNhc3RfbGlzdDsKQEAgLTEwMTEsNyArMTAxMSw3IEBACiAJCQkJZXRoZGV2X3NldHVwKTsKIH0KIAotDAorCiAKIAogLyogVGhpcyBwYWdlIG9mIGZ1bmN0aW9ucyBzaG91bGQgYmUgODM5MCBnZW5lcmljICovCkBAIC0xMDMzLDkgKzEwMzMsOSBAQAogCWludCBlbmRjZmcgPSBlaV9sb2NhbC0+d29yZDE2CiAJICAgID8gKDB4NDggfCBFTkRDRkdfV1RTIHwgKGVpX2xvY2FsLT5iaWdlbmRpYW4gPyBFTkRDRkdfQk9TIDogMCkpCiAJICAgIDogMHg0ODsKLSAgICAKKwogCWlmKHNpemVvZihzdHJ1Y3QgZTgzOTBfcGt0X2hkcikhPTQpCi0gICAgCQlwYW5pYygiODM5MC5jOiBoZWFkZXIgc3RydWN0IG1pc3BhY2tlZFxuIik7ICAgIAorICAgIAkJcGFuaWMoIjgzOTAuYzogaGVhZGVyIHN0cnVjdCBtaXNwYWNrZWRcbiIpOwogCS8qIEZvbGxvdyBOYXRpb25hbCBTZW1pJ3MgcmVjb21tZW5kYXRpb25zIGZvciBpbml0aW5nIHRoZSBEUDgzOTAyLiAqLwogCW91dGJfcChFODM5MF9OT0RNQStFODM5MF9QQUdFMCtFODM5MF9TVE9QLCBlODM5MF9iYXNlK0U4MzkwX0NNRCk7IC8qIDB4MjEgKi8KIAlvdXRiX3AoZW5kY2ZnLCBlODM5MF9iYXNlICsgRU4wX0RDRkcpOwkvKiAweDQ4IG9yIDB4NDkgKi8KQEAgLTEwNTUsMTEgKzEwNTUsMTEgQEAKIAkvKiBDbGVhciB0aGUgcGVuZGluZyBpbnRlcnJ1cHRzIGFuZCBtYXNrLiAqLwogCW91dGJfcCgweEZGLCBlODM5MF9iYXNlICsgRU4wX0lTUik7CiAJb3V0Yl9wKDB4MDAsICBlODM5MF9iYXNlICsgRU4wX0lNUik7Ci0gICAgCisKIAkvKiBDb3B5IHRoZSBzdGF0aW9uIGFkZHJlc3MgaW50byB0aGUgRFM4MzkwIHJlZ2lzdGVycy4gKi8KIAogCW91dGJfcChFODM5MF9OT0RNQSArIEU4MzkwX1BBR0UxICsgRTgzOTBfU1RPUCwgZTgzOTBfYmFzZStFODM5MF9DTUQpOyAvKiAweDYxICovCi0JZm9yKGkgPSAwOyBpIDwgNjsgaSsrKSAKKwlmb3IoaSA9IDA7IGkgPCA2OyBpKyspCiAJewogCQlvdXRiX3AoZGV2LT5kZXZfYWRkcltpXSwgZTgzOTBfYmFzZSArIEVOMV9QSFlTX1NISUZUKGkpKTsKIAkJaWYgKGVpX2RlYnVnID4gMSAmJiBpbmJfcChlODM5MF9iYXNlICsgRU4xX1BIWVNfU0hJRlQoaSkpIT1kZXYtPmRldl9hZGRyW2ldKQpAQCAtMTA3Myw3ICsxMDczLDcgQEAKIAllaV9sb2NhbC0+dHgxID0gZWlfbG9jYWwtPnR4MiA9IDA7CiAJZWlfbG9jYWwtPnR4aW5nID0gMDsKIAotCWlmIChzdGFydHApIAorCWlmIChzdGFydHApCiAJewogCQlvdXRiX3AoMHhmZiwgIGU4MzkwX2Jhc2UgKyBFTjBfSVNSKTsKIAkJb3V0Yl9wKEVOSVNSX0FMTCwgIGU4MzkwX2Jhc2UgKyBFTjBfSU1SKTsKQEAgLTEwODUsMTggKzEwODUsMTggQEAKIAl9CiB9CiAKLS8qIFRyaWdnZXIgYSB0cmFuc21pdCBzdGFydCwgYXNzdW1pbmcgdGhlIGxlbmd0aCBpcyB2YWxpZC4gCisvKiBUcmlnZ2VyIGEgdHJhbnNtaXQgc3RhcnQsIGFzc3VtaW5nIHRoZSBsZW5ndGggaXMgdmFsaWQuCiAgICBBbHdheXMgY2FsbGVkIHdpdGggdGhlIHBhZ2UgbG9jayBoZWxkICovCi0gICAKKwogc3RhdGljIHZvaWQgTlM4MzkwX3RyaWdnZXJfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAogCQkJCQkJCQlpbnQgc3RhcnRfcGFnZSkKIHsKIAlsb25nIGU4MzkwX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKICAJc3RydWN0IGVpX2RldmljZSAqZWlfbG9jYWwgX19hdHRyaWJ1dGUoKHVudXNlZCkpID0gKHN0cnVjdCBlaV9kZXZpY2UgKikgbmV0ZGV2X3ByaXYoZGV2KTsKLSAgIAorCiAJb3V0Yl9wKEU4MzkwX05PRE1BK0U4MzkwX1BBR0UwLCBlODM5MF9iYXNlK0U4MzkwX0NNRCk7Ci0gICAgCi0JaWYgKGluYl9wKGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpICYgRTgzOTBfVFJBTlMpIAorCisJaWYgKGluYl9wKGU4MzkwX2Jhc2UgKyBFODM5MF9DTUQpICYgRTgzOTBfVFJBTlMpCiAJewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJpZ2dlcl9zZW5kKCkgY2FsbGVkIHdpdGggdGhlIHRyYW5zbWl0dGVyIGJ1c3kuXG4iLAogCQkJZGV2LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuaCBiL2RyaXZlcnMvbmV0LzgzOTAuaAppbmRleCBhOWE1OGY1Li5jYTRlYjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmgKKysrIGIvZHJpdmVycy9uZXQvODM5MC5oCkBAIC0xMDYsNyArMTA2LDcgQEAKICAqCU9ubHkgZ2VuZXJhdGUgaW5kaXJlY3QgbG9hZHMgZ2l2ZW4gYSBtYWNoaW5lIHRoYXQgbmVlZHMgdGhlbS4KICAqICAgICAgLSByZW1vdmVkIEFNSUdBX1BDTUNJQSBmcm9tIHRoaXMgbGlzdCwgaGFuZGxlZCBhcyBJU0EgaW8gbm93CiAgKi8KLSAKKwogI2lmIGRlZmluZWQoQ09ORklHX01BQykgfHwgIFwKICAgICBkZWZpbmVkKENPTkZJR19aT1JSTzgzOTApIHx8IGRlZmluZWQoQ09ORklHX1pPUlJPODM5MF9NT0RVTEUpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19IWURSQSkgfHwgZGVmaW5lZChDT05GSUdfSFlEUkFfTU9EVUxFKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L0tjb25maWcKaW5kZXggMzkxODk5MC4uNjMxNTQ3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9LY29uZmlnCkBAIC00MzgsMTIgKzQzOCw2IEBACiAJICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBvbmJvYXJkIGNhcmQgb2YgTUlQUyBNYWdudW0gNDAwMCwKIAkgIEFjZXIgUElDQSwgT2xpdmV0dGkgTTcwMC0xMCBhbmQgYSBmZXcgb3RoZXIgaWRlbnRpY2FsIE9FTSBzeXN0ZW1zLgogCi1jb25maWcgTUlQU19HVDk2MTAwRVRICi0JYm9vbCAiTUlQUyBHVDk2MTAwIEV0aGVybmV0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgTUlQU19HVDk2MTAwCi0JaGVscAotCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBFdGhlcm5ldCBzdWJzeXN0ZW0gb24geW91ciBHVDk2MTAwIGNhcmQuCi0KIGNvbmZpZyBNSVBTX0FVMVgwMF9FTkVUCiAJYm9vbCAiTUlQUyBBVTEwMDAgRXRoZXJuZXQgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIE5FVF9FVEhFUk5FVCAmJiBTT0NfQVUxWDAwCkBAIC0xMzAwLDYgKzEyOTQsMjMgQEAKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9uZXQtbW9kdWxlcy50eHQ+LiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBwY25ldDMyLgogCitjb25maWcgUENORVQzMl9OQVBJCisJYm9vbCAiVXNlIFJYIHBvbGxpbmcgKE5BUEkpIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gUENORVQzMiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKKwkgIHdoZW4gdGhlIGRyaXZlciBpcyByZWNlaXZpbmcgbG90cyBvZiBwYWNrZXRzIGZyb20gdGhlIGNhcmQuIEl0IGlzCisJICBzdGlsbCBzb21ld2hhdCBleHBlcmltZW50YWwgYW5kIHRodXMgbm90IHlldCBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKwkgIElmIHlvdXIgZXN0aW1hdGVkIFJ4IGxvYWQgaXMgMTBrcHBzIG9yIG1vcmUsIG9yIGlmIHRoZSBjYXJkIHdpbGwgYmUKKwkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCisJICB0aGVuIHNheSBZIGhlcmUuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQ+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgorCiBjb25maWcgQU1EODExMV9FVEgKIAl0cmlzdGF0ZSAiQU1EIDgxMTEgKG5ldyBQQ0kgbGFuY2UpIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBORVRfUENJICYmIFBDSQpAQCAtMTQxMSw2ICsxNDIyLDIyIEBACiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUgd2lsbCBiZQogCSAgY2FsbGVkIGZvcmNlZGV0aC4KIAorY29uZmlnIEZPUkNFREVUSF9OQVBJCisJYm9vbCAiVXNlIFJ4IGFuZCBUeCBQb2xsaW5nIChOQVBJKSAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIEZPUkNFREVUSCAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBOQVBJIGlzIGEgbmV3IGRyaXZlciBBUEkgZGVzaWduZWQgdG8gcmVkdWNlIENQVSBhbmQgaW50ZXJydXB0IGxvYWQKKwkgIHdoZW4gdGhlIGRyaXZlciBpcyByZWNlaXZpbmcgbG90cyBvZiBwYWNrZXRzIGZyb20gdGhlIGNhcmQuIEl0IGlzCisJICBzdGlsbCBzb21ld2hhdCBleHBlcmltZW50YWwgYW5kIHRodXMgbm90IHlldCBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKwkgIElmIHlvdXIgZXN0aW1hdGVkIFJ4IGxvYWQgaXMgMTBrcHBzIG9yIG1vcmUsIG9yIGlmIHRoZSBjYXJkIHdpbGwgYmUKKwkgIGRlcGxveWVkIG9uIHBvdGVudGlhbGx5IHVuZnJpZW5kbHkgbmV0d29ya3MgKGUuZy4gaW4gYSBmaXJld2FsbCksCisJICB0aGVuIHNheSBZIGhlcmUuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTkFQSV9IT1dUTy50eHQ+IGZvciBtb3JlCisJICBpbmZvcm1hdGlvbi4KKworCSAgSWYgaW4gZG91YnQsIHNheSBOLgogCiBjb25maWcgQ1M4OXgwCiAJdHJpc3RhdGUgIkNTODl4MCBzdXBwb3J0IgpAQCAtMTcyNCw2ICsxNzUxLDIwIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IFkuCiAKK2NvbmZpZyBWSUFfUkhJTkVfTkFQSQorCWJvb2wgIlVzZSBSeCBQb2xsaW5nIChOQVBJKSIKKwlkZXBlbmRzIG9uIFZJQV9SSElORQorCWhlbHAKKwkgIE5BUEkgaXMgYSBuZXcgZHJpdmVyIEFQSSBkZXNpZ25lZCB0byByZWR1Y2UgQ1BVIGFuZCBpbnRlcnJ1cHQgbG9hZAorCSAgd2hlbiB0aGUgZHJpdmVyIGlzIHJlY2VpdmluZyBsb3RzIG9mIHBhY2tldHMgZnJvbSB0aGUgY2FyZC4KKworCSAgSWYgeW91ciBlc3RpbWF0ZWQgUnggbG9hZCBpcyAxMGtwcHMgb3IgbW9yZSwgb3IgaWYgdGhlIGNhcmQgd2lsbCBiZQorCSAgZGVwbG95ZWQgb24gcG90ZW50aWFsbHkgdW5mcmllbmRseSBuZXR3b3JrcyAoZS5nLiBpbiBhIGZpcmV3YWxsKSwKKwkgIHRoZW4gc2F5IFkgaGVyZS4KKworCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9OQVBJX0hPV1RPLnR4dD4gZm9yIG1vcmUKKwkgIGluZm9ybWF0aW9uLgorCiBjb25maWcgTEFOX1NBQTk3MzAKIAlib29sICJQaGlsaXBzIFNBQTk3MzAgRXRoZXJuZXQgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIE5FVF9QQ0kgJiYgRVhQRVJJTUVOVEFMICYmIE1JUFMKQEAgLTIyMTksOSArMjI2MCwzNiBAQAogCWJvb2wgIk5BUEkgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIEdJQU5GQVIKIAorY29uZmlnIFVDQ19HRVRICisJdHJpc3RhdGUgIkZyZWVzY2FsZSBRRSBVQ0MgR0VUSCIKKwlkZXBlbmRzIG9uIFFVSUNDX0VOR0lORSAmJiBVQ0NfRkFTVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIHRoZSBHaWdhYml0IEV0aGVybmV0IG1vZGUgb2YgUUUgVUNDLgorCSAgUUUgY2FuIGJlIGZvdW5kIG9uIE1QQzgzNnggQ1BVcy4KKworY29uZmlnIFVHRVRIX05BUEkKKwlib29sICJOQVBJIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBVQ0NfR0VUSAorCitjb25maWcgVUdFVEhfTUFHSUNfUEFDS0VUCisJYm9vbCAiTWFnaWMgUGFja2V0IGRldGVjdGlvbiBzdXBwb3J0IgorCWRlcGVuZHMgb24gVUNDX0dFVEgKKworY29uZmlnIFVHRVRIX0ZJTFRFUklORworCWJvb2wgIk1hYyBhZGRyZXNzIGZpbHRlcmluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gVUNDX0dFVEgKKworY29uZmlnIFVHRVRIX1RYX09OX0RFTU9ORAorCWJvb2wgIlRyYW5zbWl0IG9uIERlbW9uZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVUNDX0dFVEgKKworY29uZmlnIFVHRVRIX0hBU19HSUdBCisJYm9vbAorCWRlcGVuZHMgb24gVUNDX0dFVEggJiYgTVBDODM2eAorCiBjb25maWcgTVY2NDNYWF9FVEgKIAl0cmlzdGF0ZSAiTVYtNjQzWFggRXRoZXJuZXQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1PTUVOQ09fT0NFTE9UX0MgfHwgTU9NRU5DT19KQUdVQVJfQVRYIHx8IE1WNjQzNjAgfHwgTU9NRU5DT19PQ0VMT1RfMyB8fCBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gTU9NRU5DT19PQ0VMT1RfQyB8fCBNT01FTkNPX0pBR1VBUl9BVFggfHwgTVY2NDM2MCB8fCBNT01FTkNPX09DRUxPVF8zIHx8IChQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMikKIAlzZWxlY3QgTUlJCiAJaGVscAogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgRXRoZXJuZXQgb24gdGhlIE1hcnZlbGwgTVY2NDNYWApAQCAtMjI0OSw2ICsyMzE3LDE1IEBACiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgUG9ydCAyIG9mIHRoZSBNYXJ2ZWxsIE1WNjQzWFggR2lnYWJpdAogCSAgRXRoZXJuZXQuCiAKK2NvbmZpZyBRTEEzWFhYCisJdHJpc3RhdGUgIlFMb2dpYyBRTEEzWFhYIE5ldHdvcmsgRHJpdmVyIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBRTG9naWMgSVNQM1hYWCBnaWdhYml0IEV0aGVybmV0IGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBxbGEzeHh4LgorCiBlbmRtZW51CiAKICMKQEAgLTIyNzcsNiArMjM1NCwxNSBAQAogICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKICAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBjeGdiLgogCitjb25maWcgRUhFQQorCXRyaXN0YXRlICJlSEVBIEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJQk1FQlVTCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIElCTSBwU2VyaWVzIGVIRUEgZXRoZXJuZXQgYWRhcHRlci4KKworCSAgVG8gY29tcGlsZSB0aGUgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBlaGVhLgorCiBjb25maWcgSVhHQgogCXRyaXN0YXRlICJJbnRlbChSKSBQUk8vMTBHYkUgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtMjM1Miw3ICsyNDM4LDcgQEAKIAkgIHlvdSB3aWxsIG5lZWQgYSBuZXdlciBmaXJtd2FyZSBpbWFnZS4KIAkgIFlvdSBtYXkgZ2V0IHRoaXMgaW1hZ2Ugb3IgbW9yZSBpbmZvcm1hdGlvbiwgYXQ6CiAKLQkgIDxodHRwOi8vd3d3Lm15cmkuY29tL015cmktMTBHLz4KKwkgIDxodHRwOi8vd3d3Lm15cmkuY29tL3Njcy9kb3dubG9hZC1NeXJpMTBHRS5odG1sPgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlIGFuZCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0LW1vZHVsZXMudHh0Pi4gIFRoZSBtb2R1bGUKQEAgLTI1MDksNiArMjU5NSw3IEBACiAKIGNvbmZpZyBQUFAKIAl0cmlzdGF0ZSAiUFBQIChwb2ludC10by1wb2ludCBwcm90b2NvbCkgc3VwcG9ydCIKKwlzZWxlY3QgU0xIQwogCS0tLWhlbHAtLS0KIAkgIFBQUCAoUG9pbnQgdG8gUG9pbnQgUHJvdG9jb2wpIGlzIGEgbmV3ZXIgYW5kIGJldHRlciBTTElQLiAgSXQgc2VydmVzCiAJICB0aGUgc2FtZSBwdXJwb3NlOiBzZW5kaW5nIEludGVybmV0IHRyYWZmaWMgb3ZlciB0ZWxlcGhvbmUgKGFuZCBvdGhlcgpAQCAtMjY4OSw2ICsyNzc2LDcgQEAKIGNvbmZpZyBTTElQX0NPTVBSRVNTRUQKIAlib29sICJDU0xJUCBjb21wcmVzc2VkIGhlYWRlcnMiCiAJZGVwZW5kcyBvbiBTTElQCisJc2VsZWN0IFNMSEMKIAktLS1oZWxwLS0tCiAJICBUaGlzIHByb3RvY29sIGlzIGZhc3RlciB0aGFuIFNMSVAgYmVjYXVzZSBpdCB1c2VzIGNvbXByZXNzaW9uIG9uIHRoZQogCSAgVENQL0lQIGhlYWRlcnMgKG5vdCBvbiB0aGUgZGF0YSBpdHNlbGYpLCBidXQgaXQgaGFzIHRvIGJlIHN1cHBvcnRlZApAQCAtMjcwMSw2ICsyNzg5LDEyIEBACiAJICA8aHR0cDovL3d3dy50bGRwLm9yZy9kb2NzLmh0bWwjaG93dG8+LCBleHBsYWlucyBob3cgdG8gY29uZmlndXJlCiAJICBDU0xJUC4gVGhpcyB3b24ndCBlbmxhcmdlIHlvdXIga2VybmVsLgogCitjb25maWcgU0xIQworCXRyaXN0YXRlCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBWYW4gSmFjb2JzZW4gc2VyaWFsIGxpbmUgaGVhZGVyIGNvbXByZXNzaW9uCisJICByb3V0aW5lcy4KKwogY29uZmlnIFNMSVBfU01BUlQKIAlib29sICJLZWVwYWxpdmUgYW5kIGxpbmVmaWxsIgogCWRlcGVuZHMgb24gU0xJUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQppbmRleCBjOTFlOTUxLi5mMjcwYmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9NYWtlZmlsZQpAQCAtMiwxNCArMiwxMSBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIExpbnV4IG5ldHdvcmsgKGV0aGVyY2FyZCkgZGV2aWNlIGRyaXZlcnMuCiAjCiAKLWlmZXEgKCQoQ09ORklHX0lTRE5fUFBQKSx5KQotICBvYmotJChDT05GSUdfSVNETikgKz0gc2xoYy5vCi1lbmRpZgotCiBvYmotJChDT05GSUdfRTEwMDApICs9IGUxMDAwLwogb2JqLSQoQ09ORklHX0lCTV9FTUFDKSArPSBpYm1fZW1hYy8KIG9iai0kKENPTkZJR19JWEdCKSArPSBpeGdiLwogb2JqLSQoQ09ORklHX0NIRUxTSU9fVDEpICs9IGNoZWxzaW8vCitvYmotJChDT05GSUdfRUhFQSkgKz0gZWhlYS8KIG9iai0kKENPTkZJR19CT05ESU5HKSArPSBib25kaW5nLwogb2JqLSQoQ09ORklHX0dJQU5GQVIpICs9IGdpYW5mYXJfZHJpdmVyLm8KIApAQCAtMTgsNiArMTUsOSBAQAogCQlnaWFuZmFyX21paS5vIFwKIAkJZ2lhbmZhcl9zeXNmcy5vCiAKK29iai0kKENPTkZJR19VQ0NfR0VUSCkgKz0gdWNjX2dldGhfZHJpdmVyLm8KK3VjY19nZXRoX2RyaXZlci1vYmpzIDo9IHVjY19nZXRoLm8gdWNjX2dldGhfcGh5Lm8KKwogIwogIyBsaW5rIG9yZGVyIGltcG9ydGFudCBoZXJlCiAjCkBAIC0xMTAsOCArMTEwLDkgQEAKIG9iai0kKENPTkZJR19ORV9IODMwMCkgKz0gbmUtaDgzMDAubyA4MzkwLm8KIAogb2JqLSQoQ09ORklHX01WNjQzWFhfRVRIKSArPSBtdjY0M3h4X2V0aC5vCitvYmotJChDT05GSUdfUUxBM1hYWCkgKz0gcWxhM3h4eC5vCiAKLW9iai0kKENPTkZJR19QUFApICs9IHBwcF9nZW5lcmljLm8gc2xoYy5vCitvYmotJChDT05GSUdfUFBQKSArPSBwcHBfZ2VuZXJpYy5vCiBvYmotJChDT05GSUdfUFBQX0FTWU5DKSArPSBwcHBfYXN5bmMubwogb2JqLSQoQ09ORklHX1BQUF9TWU5DX1RUWSkgKz0gcHBwX3N5bmN0dHkubwogb2JqLSQoQ09ORklHX1BQUF9ERUZMQVRFKSArPSBwcHBfZGVmbGF0ZS5vCkBAIC0xMjAsOSArMTIxLDcgQEAKIG9iai0kKENPTkZJR19QUFBPRSkgKz0gcHBwb3gubyBwcHBvZS5vCiAKIG9iai0kKENPTkZJR19TTElQKSArPSBzbGlwLm8KLWlmZXEgKCQoQ09ORklHX1NMSVBfQ09NUFJFU1NFRCkseSkKLSAgb2JqLSQoQ09ORklHX1NMSVApICs9IHNsaGMubwotZW5kaWYKK29iai0kKENPTkZJR19TTEhDKSArPSBzbGhjLm8KIAogb2JqLSQoQ09ORklHX0RVTU1ZKSArPSBkdW1teS5vCiBvYmotJChDT05GSUdfSUZCKSArPSBpZmIubwpAQCAtMTcxLDcgKzE3MCw2IEBACiBvYmotJChDT05GSUdfTVZNRTE0N19ORVQpICs9IG12bWUxNDcubyA3OTkwLm8KIG9iai0kKENPTkZJR19FUVVBTElaRVIpICs9IGVxbC5vCiBvYmotJChDT05GSUdfTUlQU19KQVpaX1NPTklDKSArPSBqYXp6c29uaWMubwotb2JqLSQoQ09ORklHX01JUFNfR1Q5NjEwMEVUSCkgKz0gZ3Q5NjEwMGV0aC5vCiBvYmotJChDT05GSUdfTUlQU19BVTFYMDBfRU5FVCkgKz0gYXUxMDAwX2V0aC5vCiBvYmotJChDT05GSUdfTUlQU19TSU1fTkVUKSArPSBtaXBzbmV0Lm8KIG9iai0kKENPTkZJR19TR0lfSU9DM19FVEgpICs9IGlvYzMtZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L1NwYWNlLmMgYi9kcml2ZXJzL25ldC9TcGFjZS5jCmluZGV4IGE4YzI0NWEuLjk5NTMyMDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L1NwYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvU3BhY2UuYwpAQCAtMTgsNyArMTgsNyBAQAogICoJCS0gc3RydWN0IGluaXQgY2xlYW51cCwgZW5hYmxlIG11bHRpcGxlIElTQSBhdXRvcHJvYmVzLgogICoJCUFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPiAtIDA5LzE5OTkKICAqCQktIGZpeCBzYm5pOiBzL2RldmljZS9uZXRfZGV2aWNlLwotICoJCVBhdWwgR29ydG1ha2VyICgwNi85OCk6IAorICoJCVBhdWwgR29ydG1ha2VyICgwNi85OCk6CiAgKgkJIC0gc29ydCBwcm9iZXMgaW4gYSBzYW5lIHdheSwgbWFrZSBzdXJlIGFsbCAoc2FmZSkgcHJvYmVzCiAgKgkJICAgZ2V0IHJ1biBvbmNlICYgZmFpbGVkIGF1dG9wcm9iZXMgZG9uJ3QgYXV0b3Byb2JlIGFnYWluLgogICoKQEAgLTkxLDcgKzkxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqbWMzMl9wcm9iZShpbnQgdW5pdCk7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmNvcHNfcHJvYmUoaW50IHVuaXQpOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpsdHBjX3Byb2JlKHZvaWQpOwotICAKKwogLyogRGV0YWNoYWJsZSBkZXZpY2VzICgicG9ja2V0IGFkYXB0b3JzIikgKi8KIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqZGU2MjBfcHJvYmUoaW50IHVuaXQpOwogCkBAIC0xMjksMTAgKzEyOSwxMCBAQAogICovCiAKIHN0YXRpYyBzdHJ1Y3QgZGV2cHJvYmUyIGVpc2FfcHJvYmVzW10gX19pbml0ZGF0YSA9IHsKLSNpZmRlZiBDT05GSUdfVUxUUkEzMiAKLQl7dWx0cmEzMl9wcm9iZSwgMH0sCQorI2lmZGVmIENPTkZJR19VTFRSQTMyCisJe3VsdHJhMzJfcHJvYmUsIDB9LAogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FDMzIwMAkKKyNpZmRlZiBDT05GSUdfQUMzMjAwCiAJe2FjMzIwMF9wcm9iZSwgMH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRVMzMjEwCkBAIC0xNjcsMTQgKzE2NywxNCBAQAogc3RhdGljIHN0cnVjdCBkZXZwcm9iZTIgaXNhX3Byb2Jlc1tdIF9faW5pdGRhdGEgPSB7CiAjaWZkZWYgQ09ORklHX0hQMTAwIAkJLyogSVNBLCBFSVNBICYgUENJICovCiAJe2hwMTAwX3Byb2JlLCAwfSwKLSNlbmRpZgkKKyNlbmRpZgogI2lmZGVmIENPTkZJR18zQzUxNQogCXt0YzUxNV9wcm9iZSwgMH0sCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfVUxUUkEgCisjaWZkZWYgQ09ORklHX1VMVFJBCiAJe3VsdHJhX3Byb2JlLCAwfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19XRDgweDMgCisjaWZkZWYgQ09ORklHX1dEODB4MwogCXt3ZF9wcm9iZSwgMH0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRUwyIAkJLyogM2M1MDMgKi8KQEAgLTE5OSw3ICsxOTksNyBAQAogI2lmZGVmIENPTkZJR19TTUM5MTk0CiAJe3NtY19pbml0LCAwfSwKICNlbmRpZgotI2lmZGVmIENPTkZJR19TRUVRODAwNSAKKyNpZmRlZiBDT05GSUdfU0VFUTgwMDUKIAl7c2VlcTgwMDVfcHJvYmUsIDB9LAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NTODl4MApAQCAtMjk1LDcgKzI5NSw3IEBACiAgKiBVbmlmaWVkIGV0aGVybmV0IGRldmljZSBwcm9iZSwgc2VnbWVudGVkIHBlciBhcmNoaXRlY3R1cmUgYW5kCiAgKiBwZXIgYnVzIGludGVyZmFjZS4gVGhpcyBkcml2ZXMgdGhlIGxlZ2FjeSBkZXZpY2VzIG9ubHkgZm9yIG5vdy4KICAqLwotIAorCiBzdGF0aWMgdm9pZCBfX2luaXQgZXRoaWZfcHJvYmUyKGludCB1bml0KQogewogCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyID0gbmV0ZGV2X2Jvb3RfYmFzZSgiZXRoIiwgdW5pdCk7CkBAIC0zNDksNyArMzQ5LDcgQEAKIH0KICNlbmRpZgogCi0JCisKIC8qCiAgKglUaGUgbG9vcGJhY2sgZGV2aWNlIGlzIGdsb2JhbCBzbyBpdCBjYW4gYmUgZGlyZWN0bHkgcmVmZXJlbmNlZAogICoJYnkgdGhlIG5ldHdvcmsgY29kZS4gQWxzbywgaXQgbXVzdCBiZSBmaXJzdCBvbiBkZXZpY2UgbGlzdC4KQEAgLTM2NSw3ICszNjUsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgIk5ldHdvcmsgbG9vcGJhY2sgZGV2aWNlIHNldHVwIGZhaWxlZFxuIik7CiAJfQogCi0JCisKICNpZmRlZiBDT05GSUdfU0JOSQogCWZvciAobnVtID0gMDsgbnVtIDwgODsgKytudW0pCiAJCXNibmlfcHJvYmUobnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmMgYi9kcml2ZXJzL25ldC9hMjA2NS5jCmluZGV4IGY0ZWE2MjYuLjVmNzI1OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmMKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuYwpAQCAtOTMsNyArOTMsNyBAQAogCXVuc2lnbmVkIHNob3J0IHJ4X2xlbjsJCS8qIHJlY2VpdmUgbGVuIGFuZCBoaWdoIGFkZHIgKi8KIAl1bnNpZ25lZCBzaG9ydCB0eF9wdHI7CQkvKiB0cmFuc21pdCBkZXNjcmlwdG9yIGFkZHIgKi8KIAl1bnNpZ25lZCBzaG9ydCB0eF9sZW47CQkvKiB0cmFuc21pdCBsZW4gYW5kIGhpZ2ggYWRkciAqLwotICAgIAorCiAJLyogVGhlIFR4IGFuZCBSeCByaW5nIGVudHJpZXMgbXVzdCBhbGlnbmVkIG9uIDgtYnl0ZSBib3VuZGFyaWVzLiAqLwogCXN0cnVjdCBsYW5jZV9yeF9kZXNjIGJyeF9yaW5nW1JYX1JJTkdfU0laRV07CiAJc3RydWN0IGxhbmNlX3R4X2Rlc2MgYnR4X3JpbmdbVFhfUklOR19TSVpFXTsKQEAgLTExNSw3ICsxMTUsNyBAQAogCiAJaW50IHJ4X25ldywgdHhfbmV3OwogCWludCByeF9vbGQsIHR4X29sZDsKLSAgICAKKwogCWludCBsYW5jZV9sb2dfcnhfYnVmcywgbGFuY2VfbG9nX3R4X2J1ZnM7CiAJaW50IHJ4X3JpbmdfbW9kX21hc2ssIHR4X3JpbmdfbW9kX21hc2s7CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCiAJaWYgKFpFUk8pCiAJCXByaW50ayhLRVJOX0RFQlVHICJUWCByaW5nczpcbiIpOwotICAgIAorCiAJLyogU2V0dXAgdGhlIFR4IHJpbmcgZW50cmllcyAqLwogCWZvciAoaSA9IDA7IGkgPD0gKDE8PGxwLT5sYW5jZV9sb2dfdHhfYnVmcyk7IGkrKykgewogCQlsZXB0ciA9IExBTkNFX0FERFIoJmFpYi0+dHhfYnVmW2ldWzBdKTsKQEAgLTIxOSwxNCArMjE5LDE0IEBACiAJfQogCiAJLyogU2V0dXAgdGhlIGluaXRpYWxpemF0aW9uIGJsb2NrICovCi0gICAgCisKIAkvKiBTZXR1cCByeCBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KIAlsZXB0ciA9IExBTkNFX0FERFIoJmFpYi0+YnJ4X3JpbmcpOwogCWliLT5yeF9sZW4gPSAobHAtPmxhbmNlX2xvZ19yeF9idWZzIDw8IDEzKSB8IChsZXB0ciA+PiAxNik7CiAJaWItPnJ4X3B0ciA9IGxlcHRyOwogCWlmIChaRVJPKQogCQlwcmludGsoS0VSTl9ERUJVRyAiUlggcHRyOiAlOC44eFxuIiwgbGVwdHIpOwotICAgIAorCiAJLyogU2V0dXAgdHggZGVzY3JpcHRvciBwb2ludGVyICovCiAJbGVwdHIgPSBMQU5DRV9BRERSKCZhaWItPmJ0eF9yaW5nKTsKIAlpYi0+dHhfbGVuID0gKGxwLT5sYW5jZV9sb2dfdHhfYnVmcyA8PCAxMykgfCAobGVwdHIgPj4gMTYpOwpAQCAtMjg2LDcgKzI4Niw3IEBACiAJfQogCXByaW50ayAoIl1cbiIpOwogI2VuZGlmCi0gICAgCisKIAlsbC0+cmRwID0gTEVfQzBfUklOVHxMRV9DMF9JTkVBOwogCWZvciAocmQgPSAmaWItPmJyeF9yaW5nIFtscC0+cnhfbmV3XTsKIAkgICAgICEoKGJpdHMgPSByZC0+cm1kMV9iaXRzKSAmIExFX1IxX09XTik7CkBAIC0zMTksNyArMzE5LDcgQEAKIAkJCQlscC0+cnhfbmV3ID0gKGxwLT5yeF9uZXcgKyAxKSAmIGxwLT5yeF9yaW5nX21vZF9tYXNrOwogCQkJCXJldHVybiAwOwogCQkJfQotCSAgICAKKwogCQkJc2tiLT5kZXYgPSBkZXY7CiAJCQlza2JfcmVzZXJ2ZSAoc2tiLCAyKTsJCS8qIDE2IGJ5dGUgYWxpZ24gKi8KIAkJCXNrYl9wdXQgKHNrYiwgbGVuKTsJCS8qIG1ha2Ugcm9vbSAqLwpAQCAtMzYxLDEwICszNjEsMTAgQEAKIAkJLyogSWYgd2UgaGl0IGEgcGFja2V0IG5vdCBvd25lZCBieSB1cywgc3RvcCAqLwogCQlpZiAodGQtPnRtZDFfYml0cyAmIExFX1QxX09XTikKIAkJCWJyZWFrOwotCQkKKwogCQlpZiAodGQtPnRtZDFfYml0cyAmIExFX1QxX0VSUikgewogCQkJc3RhdHVzID0gdGQtPm1pc2M7Ci0JICAgIAorCiAJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAoc3RhdHVzICYgTEVfVDNfUlRZKSAgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQlpZiAoc3RhdHVzICYgTEVfVDNfTENPTCkgbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKQEAgLTQxNyw3ICs0MTcsNyBAQAogCiAJCQlscC0+c3RhdHMudHhfcGFja2V0cysrOwogCQl9Ci0JCisKIAkJaiA9IChqICsgMSkgJiBscC0+dHhfcmluZ19tb2RfbWFzazsKIAl9CiAJbHAtPnR4X29sZCA9IGo7CkBAIC00NTIsNyArNDUyLDcgQEAKIAkJLyogQ2xlYXIgdGhlIGVycm9yIGNvbmRpdGlvbiAqLwogCQlsbC0+cmRwID0gTEVfQzBfQkFCTHxMRV9DMF9FUlJ8TEVfQzBfTUlTU3xMRV9DMF9JTkVBOwogCX0KLSAgICAKKwogCWlmIChjc3IwICYgTEVfQzBfUklOVCkKIAkJbGFuY2VfcnggKGRldik7CiAKQEAgLTUyOCw3ICs1MjgsNyBAQAogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX3JlZ3MgKmxsID0gbHAtPmxsOwogCWludCBzdGF0dXM7Ci0gICAgCisKIAkvKiBTdG9wIHRoZSBsYW5jZSAqLwogCWxsLT5yYXAgPSBMRV9DU1IwOwogCWxsLT5yZHAgPSBMRV9DMF9TVE9QOwpAQCAtNTY5LDcgKzU2OSw3IEBACiAKIAlza2JsZW4gPSBza2ItPmxlbjsKIAlsZW4gPSBza2JsZW47Ci0JCisKIAlpZiAobGVuIDwgRVRIX1pMRU4pIHsKIAkJbGVuID0gRVRIX1pMRU47CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCkBAIC01ODcsNyArNTg3LDcgQEAKIAkvKiBkdW1wIHRoZSBwYWNrZXQgKi8KIAl7CiAJCWludCBpOwotCQorCiAJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CiAJCQlpZiAoKGkgJSAxNikgPT0gMCkKIAkJCQlwcmludGsoIlxuIiBLRVJOX0RFQlVHKTsKQEAgLTU5OSwxMyArNTk5LDEzIEBACiAJZW50cnkgPSBscC0+dHhfbmV3ICYgbHAtPnR4X3JpbmdfbW9kX21hc2s7CiAJaWItPmJ0eF9yaW5nIFtlbnRyeV0ubGVuZ3RoID0gKC1sZW4pIHwgMHhmMDAwOwogCWliLT5idHhfcmluZyBbZW50cnldLm1pc2MgPSAwOwotICAgIAorCiAJbWVtY3B5ICgoY2hhciAqKSZpYi0+dHhfYnVmIFtlbnRyeV1bMF0sIHNrYi0+ZGF0YSwgc2tibGVuKTsKIAogCS8qIENsZWFyIHRoZSBzbGFjayBvZiB0aGUgcGFja2V0LCBkbyBJIG5lZWQgdGhpcz8gKi8KIAlpZiAobGVuICE9IHNrYmxlbikKIAkJbWVtc2V0ICgoY2hhciAqKSAmaWItPnR4X2J1ZiBbZW50cnldW3NrYmxlbl0sIDAsIGxlbiAtIHNrYmxlbik7Ci0gICAgCisKIAkvKiBOb3csIGdpdmUgdGhlIHBhY2tldCB0byB0aGUgbGFuY2UgKi8KIAlpYi0+YnR4X3JpbmcgW2VudHJ5XS50bWQxX2JpdHMgPSAoTEVfVDFfUE9LfExFX1QxX09XTik7CiAJbHAtPnR4X25ldyA9IChscC0+dHhfbmV3KzEpICYgbHAtPnR4X3JpbmdfbW9kX21hc2s7CkBAIC02MTksNyArNjE5LDcgQEAKIAlsbC0+cmRwID0gTEVfQzBfSU5FQSB8IExFX0MwX1RETUQ7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKLSAgICAKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiBzdGF0dXM7CkBAIC02NDIsOSArNjQyLDkgQEAKIAljaGFyICphZGRyczsKIAlpbnQgaTsKIAl1MzIgY3JjOwotCQorCiAJLyogc2V0IGFsbCBtdWx0aWNhc3QgYml0cyAqLwotCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKXsgCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpewogCQlpYi0+ZmlsdGVyIFswXSA9IDB4ZmZmZmZmZmY7CiAJCWliLT5maWx0ZXIgWzFdID0gMHhmZmZmZmZmZjsKIAkJcmV0dXJuOwpAQCAtNjYxLDcgKzY2MSw3IEBACiAJCS8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCWNvbnRpbnVlOwotCQkKKwogCQljcmMgPSBldGhlcl9jcmNfbGUoNiwgYWRkcnMpOwogCQljcmMgPSBjcmMgPj4gMjY7CiAJCW1jYXN0X3RhYmxlIFtjcmMgPj4gNF0gfD0gMSA8PCAoY3JjICYgMHhmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2EyMDY1LmggYi9kcml2ZXJzL25ldC9hMjA2NS5oCmluZGV4IDE4NGFkNTcuLjUxMTc3NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2EyMDY1LmgKKysrIGIvZHJpdmVycy9uZXQvYTIwNjUuaApAQCAtMTA5LDcgKzEwOSw3IEBACiAJCQkJICAgICAqLwogCXVuc2lnbmVkIHNob3J0IG1ibGVuZ3RoOyAgICAvKiBBYWN0dWFsIG51bWJlciBvZiBieXRlcyByZWNlaXZlZCAqLwogfTsKLSAKKwogc3RydWN0IGxhbmNlX3R4X2Rlc2MgewogCXVuc2lnbmVkIHNob3J0IHRtZDA7ICAgICAgICAvKiBsb3cgYWRkcmVzcyBvZiBwYWNrZXQgKi8KIAl1bnNpZ25lZCBjaGFyICB0bWQxX2JpdHM7ICAgLyogZGVzY3JpcHRvciBiaXRzICovCkBAIC0xMTcsNyArMTE3LDcgQEAKIAlzaG9ydCAgICBsZW5ndGg7ICAgICAgIAkgICAgLyogTGVuZ3RoIGlzIDJzIGNvbXBsZW1lbnQgKG5lZ2F0aXZlKSEgKi8KIAl1bnNpZ25lZCBzaG9ydCBtaXNjOwogfTsKLQkJCisKIAogLyoKICAqCQlSZWNlaXZlIEZsYWdzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hYzMyMDAuYyBiL2RyaXZlcnMvbmV0L2FjMzIwMC5jCmluZGV4IDc5NTJkYzYuLjBkY2E4YmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjMzIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2FjMzIwMC5jCkBAIC00NSw3ICs0NSw3IEBACiAjZGVmaW5lIEFDX05JQ19CQVNFCTB4MDAKICNkZWZpbmUgQUNfU0FfUFJPTQkweDE2CQkJLyogVGhlIHN0YXRpb24gYWRkcmVzcyBQUk9NLiAqLwogI2RlZmluZSBBQ19BRERSMAkweDAwCQkJLyogUHJlZml4IHN0YXRpb24gYWRkcmVzcyB2YWx1ZXMuICovCi0jZGVmaW5lIEFDX0FERFIxCTB4NDAJCQkKKyNkZWZpbmUgQUNfQUREUjEJMHg0MAogI2RlZmluZSBBQ19BRERSMgkweDkwCiAjZGVmaW5lIEFDX0lEX1BPUlQJMHhDODAKICNkZWZpbmUgQUNfRUlTQV9JRAkweDAxMTBkMzA1CkBAIC04OSw3ICs4OSw3IEBACiAJCQkJCWludCByaW5nX3BhZ2UpOwogCiBzdGF0aWMgaW50IGFjX2Nsb3NlX2NhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0MCisKIAogLyoJUHJvYmUgZm9yIHRoZSBBQzMyMDAuCiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCWRldi0+aWZfcG9ydCA9IGluYihpb2FkZHIgKyBBQ19DT05GSUcpID4+IDY7CiAJZGV2LT5tZW1fc3RhcnQgPSBjb25maWcybWVtKGluYihpb2FkZHIgKyBBQ19DT05GSUcpKTsKIAotCXByaW50aygiJXM6IEFDMzIwMCBhdCAlIzN4IHdpdGggJWRrQiBtZW1vcnkgYXQgcGh5c2ljYWwgYWRkcmVzcyAlI2x4LlxuIiwgCisJcHJpbnRrKCIlczogQUMzMjAwIGF0ICUjM3ggd2l0aCAlZGtCIG1lbW9yeSBhdCBwaHlzaWNhbCBhZGRyZXNzICUjbHguXG4iLAogCQkJZGV2LT5uYW1lLCBpb2FkZHIsIEFDX1NUT1BfUEcvNCwgZGV2LT5tZW1fc3RhcnQpOwogCiAJLyoKQEAgLTM3MCw4ICszNzAsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbnNlbCBBQzMyMDAgRUlTQSBldGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotaW50Ci1pbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuYyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCmluZGV4IDFjMDFlOWIuLjA0NzNjNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5jCkBAIC05OSw3ICs5OSw3IEBACiAjZW5kaWYKIAogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0FMVEVPTgotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMVEVPTgkJMHgxMmFlCQorI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FMVEVPTgkJMHgxMmFlCiAjZW5kaWYKICNpZm5kZWYgUENJX0RFVklDRV9JRF9BTFRFT05fQUNFTklDX0ZJQlJFCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxURU9OX0FDRU5JQ19GSUJSRSAgMHgwMDAxCkBAIC00NDMsNyArNDQzLDcgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHhfcmF0aW8sICJBY2VOSUMvM0M5ODUvR0E2MjAgcmF0aW8gb2YgTklDIG1lbW9yeSB1c2VkIGZvciBUWC9SWCBkZXNjcmlwdG9ycyAocmFuZ2UgMC02MykiKTsKIAogCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9IAorc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQogICAiYWNlbmljLmM6IHYwLjkyIDA4LzA1LzIwMDIgIEplcyBTb3JlbnNlbiwgbGludXgtYWNlbmljQFN1blNJVEUuZGtcbiIKICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vaG9tZS5jZXJuLmNoL35qZXMvZ2lnZS9hY2VuaWMuaHRtbFxuIjsKIApAQCAtNDUxLDcgKzQ1MSw3IEBACiBzdGF0aWMgaW50IGFjZV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfY21kICopOwogc3RhdGljIHZvaWQgYWNlX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2RydmluZm8gKik7CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYWNlX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBhY2VfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGFjZV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGFjZV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gYWNlX2dldF9kcnZpbmZvLApAQCAtNTE2LDcgKzUxNiw3IEBACiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmFwLT5wY2lfY29tbWFuZCk7CiAKLQkvKiBPcGVuRmlybXdhcmUgb24gTWFjJ3MgZG9lcyBub3Qgc2V0IHRoaXMgLSBET0guLiAqLyAKKwkvKiBPcGVuRmlybXdhcmUgb24gTWFjJ3MgZG9lcyBub3Qgc2V0IHRoaXMgLSBET0guLiAqLwogCWlmICghKGFwLT5wY2lfY29tbWFuZCAmIFBDSV9DT01NQU5EX01FTU9SWSkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEVuYWJsaW5nIFBDSSBNZW1vcnkgTWFwcGVkICIKIAkJICAgICAgICJhY2Nlc3MgLSB3YXMgbm90IGVuYWJsZWQgYnkgQklPUy9GaXJtd2FyZVxuIiwKQEAgLTYzNiw3ICs2MzYsNyBAQAogCXdyaXRlbChyZWFkbCgmcmVncy0+Q3B1Q3RybCkgfCBDUFVfSEFMVCwgJnJlZ3MtPkNwdUN0cmwpOwogCWlmIChhcC0+dmVyc2lvbiA+PSAyKQogCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkNwdUJDdHJsKSB8IENQVV9IQUxULCAmcmVncy0+Q3B1QkN0cmwpOwotCQorCiAJLyoKIAkgKiBUaGlzIGNsZWFycyBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzCiAJICovCkBAIC03MjUsNyArNzI1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYWNlbmljX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZhY2VuaWNfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFjZW5pY19wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFjZW5pY19leGl0KHZvaWQpCkBAIC0xMDU5LDcgKzEwNTksNyBAQAogCXByaW50ayhLRVJOX0lORk8gIiAgUENJIGJ1cyB3aWR0aDogJWkgYml0cywgc3BlZWQ6ICVpTUh6LCAiCiAJICAgICAgICJsYXRlbmN5OiAlaSBjbGtzXG4iLAogCSAgICAgICAJKHBjaV9zdGF0ZSAmIFBDSV8zMkJJVCkgPyAzMiA6IDY0LAotCQkocGNpX3N0YXRlICYgUENJXzY2TUhaKSA/IDY2IDogMzMsIAorCQkocGNpX3N0YXRlICYgUENJXzY2TUhaKSA/IDY2IDogMzMsCiAJCWFwLT5wY2lfbGF0ZW5jeSk7CiAKIAkvKgpAQCAtMTE2MSw3ICsxMTYxLDcgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIFBDSV9DT01NQU5ELCBhcC0+cGNpX2NvbW1hbmQpOwogCX0KICNlbmRpZgotCQkKKwogCS8qCiAJICogQ29uZmlndXJlIERNQSBhdHRyaWJ1dGVzLgogCSAqLwpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIAkJCSAgICAgIChSWF9TVERfUklOR19FTlRSSUVTICsKIAkJCSAgICAgICBSWF9KVU1CT19SSU5HX0VOVFJJRVMpKSkpOwogCQlpbmZvLT5yeF9taW5pX2N0cmwubWF4X2xlbiA9IEFDRV9NSU5JX1NJWkU7Ci0JCWluZm8tPnJ4X21pbmlfY3RybC5mbGFncyA9IAorCQlpbmZvLT5yeF9taW5pX2N0cmwuZmxhZ3MgPQogCQkgIFJDQl9GTEdfVENQX1VEUF9TVU18UkNCX0ZMR19OT19QU0VVRE9fSERSfEFDRV9SQ0JfVkxBTl9GTEFHOwogCiAJCWZvciAoaSA9IDA7IGkgPCBSWF9NSU5JX1JJTkdfRU5UUklFUzsgaSsrKQpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAogCWlmIChBQ0VfSVNfVElHT05fSShhcCkpIHsKIAkJYXAtPnR4X3JpbmcgPSAoc3RydWN0IHR4X2Rlc2MgKikgcmVncy0+V2luZG93OwotCQlmb3IgKGkgPSAwOyBpIDwgKFRJR09OX0lfVFhfUklOR19FTlRSSUVTIAorCQlmb3IgKGkgPSAwOyBpIDwgKFRJR09OX0lfVFhfUklOR19FTlRSSUVTCiAJCQkJICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSkgLyBzaXplb2YodTMyKTsgaSsrKQogCQkJd3JpdGVsKDAsICh2b2lkIF9faW9tZW0gKilhcC0+dHhfcmluZyAgKyBpICogNCk7CiAKQEAgLTE2NzAsNyArMTY3MCw3IEBACiB7CiAJc3RydWN0IGFjZV9yZWdzIF9faW9tZW0gKnJlZ3MgPSBhcC0+cmVnczsKIAlzaG9ydCBpLCBpZHg7Ci0JCisKIAogCXByZWZldGNodygmYXAtPmN1cl9yeF9idWZzKTsKIApAQCAtMTk2Niw3ICsxOTY2LDcgQEAKIAogCXByZWZldGNodygmYXAtPmN1cl9yeF9idWZzKTsKIAlwcmVmZXRjaHcoJmFwLT5jdXJfbWluaV9idWZzKTsKLQkKKwogCXdoaWxlIChpZHggIT0gcnhyZXRwcmQpIHsKIAkJc3RydWN0IHJpbmdfaW5mbyAqcmlwOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTk3Nyw3ICsxOTc3LDcgQEAKIAogCiAJCS8qIG1ha2Ugc3VyZSB0aGUgcnggZGVzY3JpcHRvciBpc24ndCByZWFkIGJlZm9yZSByeHJldHByZCAqLwotCQlpZiAoaWR4ID09IHJ4cmV0Y3NtKSAKKwkJaWYgKGlkeCA9PSByeHJldGNzbSkKIAkJCXJtYigpOwogCiAJCXJldGRlc2MgPSAmYXAtPnJ4X3JldHVybl9yaW5nW2lkeF07CkBAIC0yMDA5LDcgKzIwMDksNyBAQAogCQkJcmlwID0gJmFwLT5za2ItPnJ4X21pbmlfc2tidWZmW3NrYmlkeF07CiAJCQltYXBzaXplID0gQUNFX01JTklfQlVGU0laRTsKIAkJCXJ4ZGVzYyA9ICZhcC0+cnhfbWluaV9yaW5nW3NrYmlkeF07Ci0JCQltaW5pX2NvdW50Kys7IAorCQkJbWluaV9jb3VudCsrOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogdW5rbm93biBmcmFtZSB0eXBlICgweCUwMngpICIKQEAgLTIzNzcsNyArMjM3Nyw3IEBACiAJICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCi0JCisKIAlpZiAoYXAtPnByb21pc2MpIHsKIAkJY21kLmV2dCA9IENfU0VUX1BST01JU0NfTU9ERTsKIAkJY21kLmNvZGUgPSBDX0NfUFJPTUlTQ19ESVNBQkxFOwpAQCAtMjQxMiw3ICsyNDEyLDcgQEAKIAogCQlpZiAobWFwcGluZykgewogCQkJaWYgKEFDRV9JU19USUdPTl9JKGFwKSkgewotCQkJCXN0cnVjdCB0eF9kZXNjIF9faW9tZW0gKnR4IAorCQkJCXN0cnVjdCB0eF9kZXNjIF9faW9tZW0gKnR4CiAJCQkJCT0gKHN0cnVjdCB0eF9kZXNjIF9faW9tZW0gKikgJmFwLT50eF9yaW5nW2ldOwogCQkJCXdyaXRlbCgwLCAmdHgtPmFkZHIuYWRkcmhpKTsKIAkJCQl3cml0ZWwoMCwgJnR4LT5hZGRyLmFkZHJsbyk7CkBAIC0yNjI1LDcgKzI2MjUsNyBAQAogCQljcHVfcmVsYXgoKTsKIAkJZ290byByZXN0YXJ0OwogCX0KLQkKKwogCS8qIFRoZSByaW5nIGlzIHN0dWNrIGZ1bGwuICovCiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHJpbmcgc3R1Y2sgZnVsbFxuIiwgZGV2LT5uYW1lKTsKIAlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CkBAIC0yNzg0LDE4ICsyNzg0LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGFjZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKK3N0YXRpYyB2b2lkIGFjZV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCiB7CiAJc3RydWN0IGFjZV9wcml2YXRlICphcCA9IG5ldGRldl9wcml2KGRldik7CiAKIAlzdHJsY3B5KGluZm8tPmRyaXZlciwgImFjZW5pYyIsIHNpemVvZihpbmZvLT5kcml2ZXIpKTsKLQlzbnByaW50ZihpbmZvLT52ZXJzaW9uLCBzaXplb2YoaW5mby0+dmVyc2lvbiksICIlaS4laS4laSIsIAorCXNucHJpbnRmKGluZm8tPnZlcnNpb24sIHNpemVvZihpbmZvLT52ZXJzaW9uKSwgIiVpLiVpLiVpIiwKIAkJdGlnb25Gd1JlbGVhc2VNYWpvciwgdGlnb25Gd1JlbGVhc2VNaW5vciwKIAkJdGlnb25Gd1JlbGVhc2VGaXgpOwogCiAJaWYgKGFwLT5wZGV2KQotCQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhcC0+cGRldiksIAorCQlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShhcC0+cGRldiksCiAJCQlzaXplb2YoaW5mby0+YnVzX2luZm8pKTsKIAogfQpAQCAtMjkxMiw3ICsyOTEyLDcgQEAKIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJdHNpemUgPSBtaW5fdCh1MzIsICgofmRlc3QgJiAoQUNFX1dJTkRPV19TSVpFIC0gMSkpICsgMSksCiAJCQkgICAgbWluX3QodTMyLCBzaXplLCBBQ0VfV0lORE9XX1NJWkUpKTsKLQkJdGRlc3QgPSAodm9pZCBfX2lvbWVtICopICZyZWdzLT5XaW5kb3cgKyAKKwkJdGRlc3QgPSAodm9pZCBfX2lvbWVtICopICZyZWdzLT5XaW5kb3cgKwogCQkJKGRlc3QgJiAoQUNFX1dJTkRPV19TSVpFIC0gMSkpOwogCQl3cml0ZWwoZGVzdCAmIH4oQUNFX1dJTkRPV19TSVpFIC0gMSksICZyZWdzLT5XaW5CYXNlKTsKIAkJLyoKQEAgLTI5NDMsNyArMjk0Myw3IEBACiAJd2hpbGUgKHNpemUgPiAwKSB7CiAJCXRzaXplID0gbWluX3QodTMyLCAoKH5kZXN0ICYgKEFDRV9XSU5ET1dfU0laRSAtIDEpKSArIDEpLAogCQkJCW1pbl90KHUzMiwgc2l6ZSwgQUNFX1dJTkRPV19TSVpFKSk7Ci0JCXRkZXN0ID0gKHZvaWQgX19pb21lbSAqKSAmcmVncy0+V2luZG93ICsgCisJCXRkZXN0ID0gKHZvaWQgX19pb21lbSAqKSAmcmVncy0+V2luZG93ICsKIAkJCShkZXN0ICYgKEFDRV9XSU5ET1dfU0laRSAtIDEpKTsKIAkJd3JpdGVsKGRlc3QgJiB+KEFDRV9XSU5ET1dfU0laRSAtIDEpLCAmcmVncy0+V2luQmFzZSk7CiAKQEAgLTMwNjAsNyArMzA2MCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrLCBtYWdpYyA8PD0gMSkgewogCQl1ZGVsYXkoQUNFX1NIT1JUX0RFTEFZKTsKLQkJaWYgKG1hZ2ljICYgMHg4MCkgCisJCWlmIChtYWdpYyAmIDB4ODApCiAJCQlsb2NhbCB8PSBFRVBST01fREFUQV9PVVQ7CiAJCWVsc2UKIAkJCWxvY2FsICY9IH5FRVBST01fREFUQV9PVVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWMuaCBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCmluZGV4IDYyZWM4Y2UuLmVmYjE0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pYy5oCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pYy5oCkBAIC0xNzMsNyArMTczLDcgQEAKIC8qCiAgKiBIb3N0IGNvbnRyb2wgcmVnaXN0ZXIgYml0cy4KICAqLwotCQorCiAjZGVmaW5lIElOX0lOVAkJMHgwMQogI2RlZmluZSBDTFJfSU5UCQkweDAyCiAjZGVmaW5lIEhXX1JFU0VUCTB4MDgKQEAgLTQ0OSw3ICs0NDksNyBAQAogCiBzdHJ1Y3QgdHhfZGVzY3sKICAgICAgICAgYWNlYWRkcglhZGRyOwotCXUzMglmbGFnc2l6ZTsgCisJdTMyCWZsYWdzaXplOwogI2lmIDAKIC8qCiAgKiBUaGlzIGlzIGluIFBDSSBzaGFyZWQgbWVtIGFuZCBtdXN0IGJlIGFjY2Vzc2VkIHdpdGggcmVhZGwvd3JpdGVsCkBAIC03NTQsNyArNzU0LDcgQEAKIHsKIAlzdHJ1Y3QgYWNlX3ByaXZhdGUgKmFwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYWNlX3JlZ3MgX19pb21lbSAqcmVncyA9IGFwLT5yZWdzOwotIAorCiAJaWYgKEFDRV9JU19USUdPTl9JKGFwKSkKIAkJd3JpdGVsKDAsICZyZWdzLT5NYXNrSW50KTsKIAllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hY2VuaWNfZmlybXdhcmUuaCBiL2RyaXZlcnMvbmV0L2FjZW5pY19maXJtd2FyZS5oCmluZGV4IGVjMTQ2ZjYuLmZkNDFmNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FjZW5pY19maXJtd2FyZS5oCisrKyBiL2RyaXZlcnMvbmV0L2FjZW5pY19maXJtd2FyZS5oCkBAIC0yMyw0NTc3ICsyMyw0NTc3IEBACiAjZWxzZQogLyogR2VuZXJhdGVkIGJ5IGdlbmZ3LmMgKi8KIHN0YXRpYyB1MzIgdGlnb25Gd1RleHRbKE1BWF9URVhUX0xFTi80KSArIDFdIF9fZGV2aW5pdGRhdGEgPSB7Ci0weDEwMDAwMDAzLCAKLTB4MCwgMHhkLCAweGQsIDB4M2MxZDAwMDEsIAotMHg4ZmJkNWM1NCwgMHgzYTBmMDIxLCAweDNjMTAwMDAwLCAweDI2MTA0MDAwLCAKLTB4YzAwMTAwYywgMHgwLCAweGQsIDB4MjdiZGZmZDgsIAotMHgzYzFjYzAwMCwgMHgzYzFiMDAxMywgMHgzNzdiZDgwMCwgMHhkMDIxLCAKLTB4M2MxNzAwMTMsIDB4MzZmNzU0MTgsIDB4MmUwMjAyMSwgMHgzNDA1ODNlOCwgCi0weGFmYmYwMDI0LCAweGMwMDI0ODgsIDB4YWZiMDAwMjAsIDB4YzAwMjNlOCwgCi0weDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxYTQsIDB4MjQwNTAwMDEsIAotMHgyZTAzMDIxLCAweDM4MjEsIDB4M2MxMDAwMDEsIDB4MjYxMDdlNTAsIAotMHhhZmIwMDAxMCwgMHhjMDAyNDAzLCAweGFmYmIwMDE0LCAweDNjMDIwMDBmLCAKLTB4MzQ0MmZmZmYsIDB4MjAyMTAyNCwgMHgzNjIxMDJiLCAweDEwNDAwMDA5LCAKLTB4MjQwNTAwMDMsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxYjAsIDB4MjAwMzAyMSwgCi0weDM2MDM4MjEsIDB4M2MwMjAwMTAsIDB4YWZhMjAwMTAsIDB4YzAwMjQwMywgCi0weGFmYTAwMDE0LCAweDIwMjEsIDB4MzQwNWMwMDAsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4YTAyMDgzYjAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAKLTB4YTAyMDgzYjIsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2IzLCAKLTB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjA4M2I0LCAweGEyZTAwNGQ4LCAKLTB4NDE4YzAsIDB4MjQ4NDAwMDEsIDB4NzcxMDIxLCAweGFjNDA3MjdjLCAKLTB4NzcxMDIxLCAweGFjNDA3MjgwLCAweDJlMzEwMjEsIDB4YTQ0NTcyN2MsIAotMHgyYzgyMDAyMCwgMHgxNDQwZmZmNywgMHg0MThjMCwgMHgyMDIxLCAKLTB4MzQwNWMwMDAsIDB4NDE4YzAsIDB4MjQ4NDAwMDEsIDB4NzcxMDIxLCAKLTB4YWM0MDczN2MsIDB4NzcxMDIxLCAweGFjNDA3MzgwLCAweDJlMzEwMjEsIAotMHhhNDQ1NzM3YywgMHgyYzgyMDA4MCwgMHg1NDQwZmZmNywgMHg0MThjMCwgCi0weGFmODAwMDU0LCAweGFmODAwMTFjLCAweDhmODIwMDQ0LCAweDM0NDIwMDQwLCAKLTB4YWY4MjAwNDQsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMjAsIDB4YWY4MjAwNDQsIAotMHg4ZjQyMDIxOCwgMHgzMDQyMDAwMiwgMHgxMDQwMDAwOSwgMHgwLCAKLTB4OGY0MjAyMjAsIDB4M2MwMzAwMDIsIDB4MzQ2MzAwMDQsIDB4NDMxMDI1LCAKLTB4YWVlMjA0YzQsIDB4OGY0MjAyMWMsIDB4ODAwMTA3NCwgMHgzNDQyMDAwNCwgCi0weDhmNDIwMjIwLCAweDNjMDMwMDAyLCAweDM0NjMwMDA2LCAweDQzMTAyNSwgCi0weGFlZTIwNGM0LCAweDhmNDIwMjFjLCAweDM0NDIwMDA2LCAweGFlZTIwNGNjLCAKLTB4OGY0MjAyMTgsIDB4MzA0MjAwMTAsIDB4MTA0MDAwMGEsIDB4MCwgCi0weDhmNDIwMjFjLCAweDM0NDIwMDA0LCAweGFlZTIwNGM4LCAweDhmNDIwMjIwLCAKLTB4M2MwMzAwMGEsIDB4MzQ2MzAwMDQsIDB4NDMxMDI1LCAweDgwMDEwOGEsIAotMHhhZWUyMDRjMCwgMHg4ZjQyMDIyMCwgMHgzYzAzMDAwYSwgMHgzNDYzMDAwNiwgCi0weDQzMTAyNSwgMHhhZWUyMDRjMCwgMHg4ZjQyMDIxYywgMHgzNDQyMDAwNiwgCi0weGFlZTIwNGM4LCAweDhmNDIwMjE4LCAweDMwNDIwMjAwLCAweDEwNDAwMDAzLCAKLTB4MjQwMjAwMDEsIDB4ODAwMTA5MSwgMHhhMmUyNzI0OCwgMHhhMmUwNzI0OCwgCi0weDI0MDIwMDAxLCAweGFmODIwMGEwLCAweGFmODIwMGIwLCAweDhmODMwMDU0LCAKLTB4OGY4MjAwNTQsIDB4ODAwMTA5OSwgMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwgCi0weDYyMTAyMywgMHgyYzQyMDA2NSwgMHgxNDQwZmZmYywgMHgwLCAKLTB4YWY4MDAwNDQsIDB4OGY0MjAyMDgsIDB4OGY0MzAyMGMsIDB4YWVlMjAwMTAsIAotMHhhZWUzMDAxNCwgMHg4ZWU0MDAxMCwgMHg4ZWU1MDAxNCwgMHgyNmUyMDAzMCwgCi0weGFlZTIwMDI4LCAweDI0MDIwNDkwLCAweGFlZTIwMDE4LCAweGFmODQwMDkwLCAKLTB4YWY4NTAwOTQsIDB4OGVlMjAwMjgsIDB4YWY4MjAwYjQsIDB4OTZlMjAwMWEsIAotMHhhZjgyMDA5YywgMHg4ZjgyMDBiMCwgMHg4ZWUzMDRjYywgMHg0MzEwMjUsIAotMHhhZjgyMDBiMCwgMHg4ZjgyMDBiMCwgMHgzMDQyMDAwNCwgMHgxNDQwZmZmZCwgCi0weDAsIDB4OGVlMjA0NTAsIDB4OGVlMzA0NTQsIDB4YWVlMzA0ZmMsIAotMHg4ZWUyMDRmYywgMHgyNDQyZTAwMCwgMHgyYzQyMjAwMSwgMHgxNDQwMDAwZCwgCi0weDI2ZTQwMDMwLCAweDhlZTIwNDUwLCAweDhlZTMwNDU0LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDUxYmMsIDB4M2MwNTAwMDEsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIAotMHg4ZWU3MDRmYywgMHgzNGE1ZjAwMCwgMHhjMDAyNDAzLCAweDYwMzAyMSwgCi0weDI2ZTQwMDMwLCAweGMwMDI0ODgsIDB4MjQwNTA0MDAsIDB4Mjc0NDAwODAsIAotMHhjMDAyNDg4LCAweDI0MDUwMDgwLCAweDI2ZTQ3NzdjLCAweGMwMDI0ODgsIAotMHgyNDA1MDQwMCwgMHg4ZjQyMDI1YywgMHgyNmU0MDA5NCwgMHhhZWUyMDA2MCwgCi0weDhmNDIwMjYwLCAweDI3NDUwMjAwLCAweDI0MDYwMDA4LCAweGFlZTIwMDY4LCAKLTB4MjQwMjAwMDYsIDB4YzAwMjQ5YSwgMHhhZWUyMDA2NCwgMHgzYzAyM2I5YSwgCi0weDM0NDJjYTAwLCAweDIwMjEsIDB4MjQwMzAwMDIsIDB4YWVlMzAwNzQsIAotMHhhZWUzMDA3MCwgMHhhZWUyMDA2YywgMHgyNDAyMDNlOCwgMHhhZWUyMDEwNCwgCi0weDI0MDIwMDAxLCAweGFlZTMwMTAwLCAweGFlZTIwMTBjLCAweDNjMDMwMDAxLCAKLTB4NjQxODIxLCAweDkwNjM1YzIwLCAweDJlNDEwMjEsIDB4MjQ4NDAwMDEsIAotMHhhMDQzMDA5YywgMHgyYzgyMDAwZiwgMHgxNDQwZmZmOCwgMHgwLCAKLTB4OGY4MjAwNDAsIDB4MmU0MTgyMSwgMHgyNDg0MDAwMSwgMHgyMTcwMiwgCi0weDI0NDIwMDMwLCAweGEwNjIwMDljLCAweDJlNDEwMjEsIDB4YTA0MDAwOWMsIAotMHg5NmUyMDQ2YSwgMHgzMDQyMDAwMywgMHgxNDQwMDAwOSwgMHgwLCAKLTB4OTZlMjA0N2EsIDB4MzA0MjAwMDMsIDB4NTA0MDAxMzEsIDB4M2MwMzA4MDAsIAotMHg5NmUyMDQ2YSwgMHgzMDQyMDAwMywgMHgxMDQwMDAyYSwgMHgzYzAyMDcwMCwgCi0weDk2ZTIwNDdhLCAweDMwNDIwMDAzLCAweDEwNDAwMDI2LCAweDNjMDIwNzAwLCAKLTB4OTZlMzA0N2EsIDB4OTZlMjA0NmEsIDB4MTQ2MjAwMjIsIDB4M2MwMjA3MDAsIAotMHg4ZWUyMDRjMCwgMHgyNDAzMDAwMSwgMHhhMmUzNGUyMCwgMHgzNDQyMGUwMCwgCi0weGFlZTIwNGMwLCAweDhmNDIwMjE4LCAweDMwNDIwMTAwLCAweDEwNDAwMDA1LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHgyNDQyZTE2OCwgMHg4MDAxMTFkLCAKLTB4MjExMDAsIDB4M2MwMjAwMDEsIDB4MjQ0MmQzNWMsIDB4MjExMDAsIAotMHgyMTE4MiwgMHgzYzAzMDgwMCwgMHg0MzEwMjUsIDB4M2MwMTAwMDEsIAotMHhhYzIyMTIzOCwgMHgzYzAyMDAwMSwgMHgyNDQyZjY4MCwgMHgyMTEwMCwgCi0weDIxMTgyLCAweDNjMDMwODAwLCAweDQzMTAyNSwgMHgzYzAxMDAwMSwgCi0weGFjMjIxMjc4LCAweDhlZTIwMDAwLCAweDM0NDI0MDAwLCAweDgwMDEyMzgsIAotMHhhZWUyMDAwMCwgMHgzNDQyMzAwMCwgMHhhZmEyMDAxOCwgMHg4ZWUyMDYwOCwgCi0weDhmNDMwMjI4LCAweDI0NDIwMDAxLCAweDMwNDkwMGZmLCAweDUxMjMwMGUyLCAKLTB4YWZhMDAwMTAsIDB4OGVlMjA2MDgsIDB4MjEwYzAsIDB4NTcxMDIxLCAKLTB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsIDB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIAotMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwgMHgyNGU4MDAyMCwgMHgxMDIxMDJiLCAKLTB4NTA0MDAwMDEsIDB4Mjc2ODMwMDAsIDB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIAotMHgwLCAweDhmODIwMTI0LCAweDE1MDIwMDA3LCAweDEwMjEsIAotMHg4ZWUyMDFhNCwgMHgzMDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAKLTB4ODAwMTFhMCwgMHg4ZWUyMDFhNCwgMHg4ZWU0MDYwOCwgMHg0MjBjMCwgCi0weDgwMTgyMSwgMHg4ZWU0MDQzMCwgMHg4ZWU1MDQzNCwgMHhhMzI4MjEsIAotMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgMHhhY2U0MDAwMCwgCi0weGFjZTUwMDA0LCAweDhlZTMwNjA4LCAweDI0MDIwMDA4LCAweGE0ZTIwMDBlLCAKLTB4MjQwMjAwMGQsIDB4YWNlMjAwMTgsIDB4YWNlOTAwMWMsIDB4MzE4YzAsIAotMHgyNDYzMDYwYywgMHgyZTMxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LCAKLTB4YWNlMjAwMTAsIDB4YWY4ODAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIAotMHgyNDA2MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMDcsIDB4MTQ2MjAwMWYsIAotMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAKLTB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIAotMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgCi0weDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIAotMHgwLCAweDgwMDExOGEsIDB4MCwgMHgxNGEwMDAwNSwgCi0weDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIAotMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgCi0weGFjODAwMDAwLCAweDgwMDExYTAsIDB4MCwgMHg4ZWUyNGUzMCwgCi0weDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIAotMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgCi0weDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDcsIAotMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHg1NGMwMDAwYywgCi0weGFlZTkwNjA4LCAweDNjMDQwMDAxLCAweDI0ODQ1MWM4LCAweGFmYTAwMDEwLCAKLTB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIAotMHhjMDAyNDAzLCAweDM0YTVmMDAwLCAweDgwMDEyMjMsIDB4MCwgCi0weDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwgCi0weDUwNDAwMDAxLCAweDI3NjYzMDAwLCAweDhmODIwMTI4LCAweDEwYzIwMDA0LCAKLTB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLCAKLTB4OGVlMjAxYTQsIDB4MzAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgCi0weDgwMDEyMDcsIDB4OGVlMjAxYTQsIDB4OGVlMjA2MDgsIDB4YWM2MjAwMWMsIAotMHg4ZWU0MDRhMCwgMHg4ZWU1MDRhNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgCi0weDI0MDIwMDA4LCAweGE0NjIwMDBlLCAweDI0MDIwMDExLCAweGFjNjIwMDE4LCAKLTB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIAotMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzNywgMHgyNDA2MDAwMSwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHg4YzgzMDAwMCwgMHgyNDAyMDAxMiwgMHgxNDYyMDAxZiwgMHgwLCAKLTB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsIAotMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgCi0weDhlZTU0ZTMwLCAweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsIAotMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLCAKLTB4ODAwMTFmMSwgMHgwLCAweDE0YTAwMDA1LCAweDAsIAotMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgCi0weDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLCAKLTB4ODAwMTIwNywgMHgwLCAweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAKLTB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgCi0weDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAKLTB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAxMiwgMHhhYzgyMDAwMCwgCi0weDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDE0YzAwMDFiLCAweDAsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTFkMCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgCi0weDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIAotMHgzNGE1ZjAwMSwgMHg4ZWUyMDFiMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFiMCwgCi0weDgwMDEyMjMsIDB4OGVlMjAxYjAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxZGMsIAotMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgCi0weGMwMDI0MDMsIDB4MzRhNWYwMDUsIDB4OGVlMjAxYWMsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhYywgMHg4ZWUyMDFhYywgMHg4ZWUyMDE2MCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1MWU4LCAweDM0MDVmMDAxLCAweDI0NDIwMDAxLCAweGFlZTIwMTYwLCAKLTB4OGVlMjAxNjAsIDB4MzAyMSwgMHgzODIxLCAweGFmYTAwMDEwLCAKLTB4YzAwMjQwMywgMHhhZmEwMDAxNCwgMHg4MDAxMjM4LCAweDAsIAotMHgzYzAyMDAwMSwgMHgyNDQyZjVhOCwgMHgyMTEwMCwgMHgyMTE4MiwgCi0weDQzMTAyNSwgMHgzYzAxMDAwMSwgMHhhYzIyMTI3OCwgMHg5NmUyMDQ1YSwgCi0weDMwNDIwMDAzLCAweDEwNDAwMDI1LCAweDNjMDUwZmZmLCAweDhlZTIwNGM4LCAKLTB4MzRhNWZmZmYsIDB4MzQ0MjBhMDAsIDB4YWVlMjA0YzgsIDB4OGVlMzA0YzgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTFmNCwgMHgyNDAyMDAwMSwgMHhhMmUyMDRlYywgCi0weGEyZTIwNGVkLCAweDNjMDIwMDAyLCAweDYyMTgyNSwgMHgzYzAyMDAwMSwgCi0weDI0NDJhMzkwLCAweDQ1MTAyNCwgMHgyMTA4MiwgMHhhZWUzMDRjOCwgCi0weDNjMDMwODAwLCAweDQzMTAyNSwgMHgzYzAxMDAwMSwgMHhhYzIyMTIyMCwgCi0weDNjMDIwMDAxLCAweDI0NDJhZGQ0LCAweDQ1MTAyNCwgMHgyMTA4MiwgCi0weDQzMTAyNSwgMHgzYzAxMDAwMSwgMHhhYzIyMTI4MCwgMHg5NmU2MDQ1YSwgCi0weDM4MjEsIDB4MjQwNTAwMTEsIDB4YWZhMDAwMTAsIDB4YzAwMjQwMywgCi0weGFmYTAwMDE0LCAweDgwMDEyNjgsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDI0NDJhOWQ0LCAweDIxMTAwLCAweDIxMTgyLCAweDNjMDMwODAwLCAKLTB4NDMxMDI1LCAweDNjMDEwMDAxLCAweGFjMjIxMjgwLCAweDk2ZTIwNDZhLCAKLTB4MzA0MjAwMTAsIDB4MTQ0MDAwMDksIDB4MCwgMHg5NmUyMDQ3YSwgCi0weDMwNDIwMDEwLCAweDEwNDAwMTEyLCAweDAsIDB4OTZlMjA0NmEsIAotMHgzMDQyMDAxMCwgMHgxMDQwMDAwNSwgMHgzYzAyMDcwMCwgMHg5NmUyMDQ3YSwgCi0weDMwNDIwMDEwLCAweDE0NDAwMTAyLCAweDNjMDIwNzAwLCAweDM0NDIzMDAwLCAKLTB4YWZhMjAwMTgsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIDB4MjQ0MjAwMDEsIAotMHgzMDQ5MDBmZiwgMHg1MTIzMDBlMiwgMHhhZmEwMDAxMCwgMHg4ZWUyMDYwOCwgCi0weDIxMGMwLCAweDU3MTAyMSwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywgCi0weGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODcwMTIwLCAweDI3NjIzODAwLCAKLTB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwgCi0weDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIAotMHgxNTAyMDAwNywgMHgxMDIxLCAweDhlZTIwMWE0LCAweDMwMjEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxMmVhLCAweDhlZTIwMWE0LCAKLTB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLCAweDhlZTQwNDMwLCAKLTB4OGVlNTA0MzQsIDB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsIAotMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIDB4OGVlMzA2MDgsIAotMHgyNDAyMDAwOCwgMHhhNGUyMDAwZSwgMHgyNDAyMDAwZCwgMHhhY2UyMDAxOCwgCi0weGFjZTkwMDFjLCAweDMxOGMwLCAweDI0NjMwNjBjLCAweDJlMzEwMjEsIAotMHhhY2UyMDAwOCwgMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgCi0weDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MDYwMDAxLCAweDhlZTI0ZTMwLCAKLTB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgCi0weDI0MDIwMDA3LCAweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIAotMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTU0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgCi0weDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMTJkNCwgCi0weDAsIDB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMTJlYSwgCi0weDAsIDB4OGVlMjRlMzAsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIAotMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIAotMHgyZTIyMDIxLCAweDI0MDIwMDA3LCAweGFjODIwMDAwLCAweDI0MDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4NTRjMDAwMGMsIDB4YWVlOTA2MDgsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTFjOCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgCi0weDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMDAsIAotMHg4MDAxMzZkLCAweDAsIDB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIAotMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsIAotMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAweDhmODIwMTI0LCAKLTB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgMHgzMDIxLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTM1MSwgMHg4ZWUyMDFhNCwgCi0weDhlZTIwNjA4LCAweGFjNjIwMDFjLCAweDhlZTQwNGEwLCAweDhlZTUwNGE0LCAKLTB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsIAotMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgCi0weDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwMzcsIDB4MjQwNjAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDEyLCAKLTB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgCi0weDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsIAotMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAKLTB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxMzNiLCAweDAsIAotMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAKLTB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIAotMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxMzUxLCAweDAsIAotMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4MjQwMjAwMTIsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIAotMHgxNGMwMDAxYiwgMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1MWQwLCAKLTB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIAotMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDAxLCAweDhlZTIwMWIwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYjAsIDB4ODAwMTM2ZCwgMHg4ZWUyMDFiMCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1MWRjLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAKLTB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwNSwgCi0weDhlZTIwMWFjLCAweDI0NDIwMDAxLCAweGFlZTIwMWFjLCAweDhlZTIwMWFjLCAKLTB4OGVlMjAxNjAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxZTgsIDB4MzQwNWYwMDIsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDE2MCwgMHg4ZWUyMDE2MCwgMHgzMDIxLCAKLTB4MzgyMSwgMHhhZmEwMDAxMCwgMHhjMDAyNDAzLCAweGFmYTAwMDE0LCAKLTB4OTZlNjA0N2EsIDB4OTZlNzA0NmEsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyMDAsIAotMHgyNDA1MDAxMiwgMHhhZmEwMDAxMCwgMHhjMDAyNDAzLCAweGFmYTAwMDE0LCAKLTB4YzAwNDUwMCwgMHgwLCAweGMwMDIzMTgsIDB4MCwgCi0weDNjMDYwMDAxLCAweDM0YzYzODAwLCAweGFlZTAwNjA4LCAweGFmNDAwMjI4LCAKLTB4YWY0MDAyMmMsIDB4OTZlMzA0NTgsIDB4OGVlNDAwMDAsIDB4M2MwNTEyZDgsIAotMHgzNGE1YzM1OCwgMHgyNzYyMzgwMCwgMHhhZWUyNzI1OCwgMHgyNzYyMzgwMCwgCi0weGFlZTI3MjYwLCAweDI3NjIzODAwLCAweGFlZTI3MjY0LCAweDM2NjEwMjEsIAotMHhhZWUyNzI3MCwgMHgyNDAyZmZmZiwgMHhhZWUwMDRkNCwgMHhhZWUwMDRlMCwgCi0weGFlZTAwNGU0LCAweGFlZTAwNGYwLCAweGEyZTAwNGY0LCAweGFlZTAwZTBjLCAKLTB4YWVlMDBlMTgsIDB4YWVlMDBlMTAsIDB4YWVlMDBlMTQsIDB4YWVlMDBlMWMsIAotMHhhZWUwNzI0YywgMHhhZWUwNTI0NCwgMHhhZWUwNTI0MCwgMHhhZWUwNTIzYywgCi0weGFlZTA3MjUwLCAweGFlZTA3MjU0LCAweGFlZTA3MjVjLCAweGFlZTA3MjY4LCAKLTB4YWVlMDA0ZDAsIDB4MjQ2M2ZmZmYsIDB4ODUyMDI1LCAweGFlZTMwNGY4LCAKLTB4YWVlNDAwMDAsIDB4YWY4MDAwNjAsIDB4YWY4MjAwNjQsIDB4M2MwMjAxMDAsIAotMHhhZmEyMDAxOCwgMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgMHgyNDQyMDAwMSwgCi0weDMwNDkwMGZmLCAweDUxMjMwMGUyLCAweGFmYTAwMDEwLCAweDhlZTIwNjA4LCAKLTB4MjEwYzAsIDB4NTcxMDIxLCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLCAKLTB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIDB4OGY4NzAxMjAsIDB4Mjc2MjM4MDAsIAotMHgyNGU4MDAyMCwgMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgzMDAwLCAKLTB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgCi0weDE1MDIwMDA3LCAweDEwMjEsIDB4OGVlMjAxYTQsIDB4MzAyMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDE0MjIsIDB4OGVlMjAxYTQsIAotMHg4ZWU0MDYwOCwgMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsIAotMHg4ZWU1MDQzNCwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgCi0weDg2MjAyMSwgMHhhY2U0MDAwMCwgMHhhY2U1MDAwNCwgMHg4ZWUzMDYwOCwgCi0weDI0MDIwMDA4LCAweGE0ZTIwMDBlLCAweDI0MDIwMDBkLCAweGFjZTIwMDE4LCAKLTB4YWNlOTAwMWMsIDB4MzE4YzAsIDB4MjQ2MzA2MGMsIDB4MmUzMTAyMSwgCi0weGFjZTIwMDA4LCAweDhlZTIwNGM0LCAweGFjZTIwMDEwLCAweGFmODgwMTIwLCAKLTB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQwNjAwMDEsIDB4OGVlMjRlMzAsIAotMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAKLTB4MjQwMjAwMDcsIDB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgCi0weDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIAotMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAKLTB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxNDBjLCAKLTB4MCwgMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxNDIyLCAKLTB4MCwgMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgCi0weDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIAotMHhhYzgyMDAwNCwgMHg1NGMwMDAwYywgMHhhZWU5MDYwOCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1MWM4LCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAKLTB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwMCwgCi0weDgwMDE0YTUsIDB4MCwgMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgCi0weDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgCi0weDhmODIwMTI4LCAweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIAotMHgxNGMyMDAwNywgMHgwLCAweDhlZTIwMWE0LCAweDMwMjEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxNDg5LCAweDhlZTIwMWE0LCAKLTB4OGVlMjA2MDgsIDB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsIAotMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgMHgyNDAyMDAwOCwgMHhhNDYyMDAwZSwgCi0weDI0MDIwMDExLCAweGFjNjIwMDE4LCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAKLTB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIAotMHgxNDQwMDAzNywgMHgyNDA2MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgCi0weDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsIAotMHgxNDYyMDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAKLTB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIAotMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgCi0weDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIAotMHgxMGEyMDAwNSwgMHgwLCAweDgwMDE0NzMsIDB4MCwgCi0weDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIAotMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgCi0weDUwNDAwMDEzLCAweGFjODAwMDAwLCAweDgwMDE0ODksIDB4MCwgCi0weDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAKLTB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHgyNDAyMDAxMiwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgCi0weDE0YzAwMDFiLCAweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxZDAsIAotMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgCi0weDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMDEsIDB4OGVlMjAxYjAsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFiMCwgMHg4MDAxNGE1LCAweDhlZTIwMWIwLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDUxZGMsIDB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIAotMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDA1LCAKLTB4OGVlMjAxYWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIAotMHg4ZWUyMDE1NCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE1NCwgMHhjMDAxNGRjLCAKLTB4OGVlMjAxNTQsIDB4OGY4MjAwYTAsIDB4MzA0MjAwMDQsIDB4MTQ0MGZmZmQsIAotMHgwLCAweDhmODIwMDQwLCAweDMwNDIwMDAxLCAweDE0NDAwMDA4LCAKLTB4MCwgMHg4ZjQzMDEwNCwgMHgyNDAyMDAwMSwgMHgxMDYyMDAwNCwgCi0weDAsIDB4OGY0MjAyNjQsIDB4MTA0MDAwMDYsIDB4MCwgCi0weDhlZTIwMTdjLCAweDI0NDIwMDAxLCAweGFlZTIwMTdjLCAweDgwMDE0YzUsIAotMHg4ZWUyMDE3YywgMHg4ZjgyMDA0NCwgMHgzNDQyMDAwNCwgMHhhZjgyMDA0NCwgCi0weDhlZTIwMTc4LCAweDI0NDIwMDAxLCAweGFlZTIwMTc4LCAweDhlZTIwMTc4LCAKLTB4OGY4MjAwZDgsIDB4OGY4MzAwZDQsIDB4NDMxMDIzLCAweGFlZTI3MjZjLCAKLTB4OGVlMjcyNmMsIDB4MWM0MDAwMDMsIDB4M2MwMzAwMDEsIDB4NDMxMDIxLCAKLTB4YWVlMjcyNmMsIDB4YzAwNDA2NCwgMHgwLCAweGMwMDQ0NDAsIAotMHhhZjgwMDIyOCwgMHg4ZmJmMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LCAKLTB4MjdiZDAwMjgsIDB4M2UwMDAwOCwgMHgwLCAweDNlMDAwMDgsIAotMHgwLCAweDAsIDB4MCwgMHgyNDAyMDAyYywgCi0weGFmODIwMDUwLCAweGFlZTA3Mjc0LCAweDhmNDIwMjM4LCAweGFlZTI3Mjc4LCAKLTB4OGY4MjAwNTQsIDB4MjQ0MjAwNjcsIDB4YWY4MjAwNTgsIDB4YWVlMDdiODgsIAotMHhhZWUwN2I4YywgMHhhZWUwN2I4NCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhYzIwODNiYywgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4M2UwMDAwOCwgCi0weGEwMjA4M2I5LCAweDI3YmRmZmQ4LCAweGFmYmYwMDI0LCAweGFmYjAwMDIwLCAKLTB4OGY4MjAwNTQsIDB4M2MwMzAwMDEsIDB4OGM2MzVjZDgsIDB4MjQ0MjAwNjcsIAotMHgxMDYwMDAwZCwgMHhhZjgyMDA1OCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg5MDQyODNiOCwgMHgxMDQwMDAwNSwgMHgzYzAzMDIwMCwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHg4MDAxNTAzLCAweGEwMjA4M2I4LCAweDhlZTIwMDAwLCAKLTB4NDMxMDI1LCAweGFlZTIwMDAwLCAweDhmNDIwMjE4LCAweDMwNDIwMTAwLCAKLTB4MTA0MDAwYzYsIDB4MCwgMHg4ZjgyMDBiMCwgMHgzMDQyMDAwNCwgCi0weDEwNDAwMGMyLCAweDAsIDB4M2MwMzAwMDEsIDB4NzcxODIxLCAKLTB4OGM2MzgzZDAsIDB4OGY4MjAxMDQsIDB4MTQ2MjAwYjQsIDB4MCwgCi0weDNjMDMwMDAxLCAweDc3MTgyMSwgMHg4YzYzODNkNCwgMHg4ZjgyMDBiNCwgCi0weDE0NjIwMGFlLCAweDAsIDB4OGY4MjAwYjAsIDB4M2MwMzAwODAsIAotMHg0MzEwMjQsIDB4MTA0MDAwMGQsIDB4MCwgMHg4ZjgyMDExYywgCi0weDM0NDIwMDAyLCAweGFmODIwMTFjLCAweDhmODIwMGIwLCAweDI0MDNmZmZiLCAKLTB4NDMxMDI0LCAweGFmODIwMGIwLCAweDhmODIwMTFjLCAweDI0MDNmZmZkLCAKLTB4NDMxMDI0LCAweDgwMDE1Y2MsIDB4YWY4MjAxMWMsIDB4M2MwMzAwMDEsIAotMHg3NzE4MjEsIDB4OGM2MzgzZDAsIDB4OGY4MjAxMDQsIDB4MTQ2MjAwODIsIAotMHgwLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgMHg4YzYzODNkNCwgCi0weDhmODIwMGI0LCAweDE0NjIwMDdjLCAweDAsIDB4M2MwNzAwMDEsIAotMHhmNzM4MjEsIDB4OGNlNzgzZDAsIDB4OGY4MjAwYjAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTI3MCwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4Zjg2MDBiMCwgCi0weDNjMDUwMDA1LCAweGMwMDI0MDMsIDB4MzRhNTA5MDAsIDB4OGY4MjAxMWMsIAotMHgzNDQyMDAwMiwgMHhhZjgyMDExYywgMHg4ZjgzMDEwNCwgMHg4ZjgyMDBiMCwgCi0weDM0NDIwMDAxLCAweGFmODIwMGIwLCAweGFmODMwMTA0LCAweDhmODMwMTIwLCAKLTB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLCAKLTB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgCi0weDhmODIwMTI0LCAweDE0YzIwMDA2LCAweDAsIDB4OGVlMjAxYTQsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxNWEwLCAweDhlZTIwMWE0LCAKLTB4OGY0NDAyMDgsIDB4OGY0NTAyMGMsIDB4MjZlMjAwMzAsIDB4YWM2MjAwMDgsIAotMHgyNDAyMDQwMCwgMHhhNDYyMDAwZSwgMHgyNDAyMDAwZiwgMHhhYzYyMDAxOCwgCi0weGFjNjAwMDFjLCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAKLTB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIAotMHgwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAKLTB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgMHgyNDAyMDAwNywgMHgxNDYyMDAxZiwgCi0weDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIAotMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgCi0weDhlZTI0ZTM0LCAweDhlZTU0ZTMwLCAweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAKLTB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgCi0weDAsIDB4ODAwMTU4YSwgMHgwLCAweDE0YTAwMDA1LCAKLTB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgCi0weDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAKLTB4YWM4MDAwMDAsIDB4ODAwMTVhMCwgMHgwLCAweDhlZTI0ZTMwLCAKLTB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgCi0weDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAKLTB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAwNywgCi0weGFjODIwMDAwLCAweDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDhmODIwMTFjLCAKLTB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGFmODIwMTFjLCAweDhlZTIwMWU0LCAKLTB4M2MwNzAwMDEsIDB4ZjczODIxLCAweDhjZTc4M2QwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxZTQsIDB4OGVlMjAxZTQsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyN2MsIAotMHg4MDAxNWJkLCAweGFmYTAwMDEwLCAweDhmODIwMTA0LCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGFjMjI4M2QwLCAweDhmODIwMGI0LCAweDNjMDcwMDAxLCAKLTB4ZjczODIxLCAweDhjZTc4M2QwLCAweDNjMDQwMDAxLCAweDI0ODQ1Mjg0LCAKLTB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjI4M2Q0LCAweGFmYTAwMDEwLCAKLTB4YWZhMDAwMTQsIDB4OGY4NjAwYjAsIDB4M2MwNTAwMDUsIDB4YzAwMjQwMywgCi0weDM0YTUwOTAwLCAweDgwMDE1Y2MsIDB4MCwgMHg4ZjgyMDEwNCwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNkMCwgMHg4ZjgyMDBiNCwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNkNCwgMHg4ZWUyNzI3NCwgCi0weDkyZTMwNGY0LCAweDI0NDIwMDY3LCAweDE0NjAwMDA2LCAweGFlZTI3Mjc0LCAKLTB4OGVlMjcyNzQsIDB4OGY0MzAyMzQsIDB4NDMxMDJiLCAweDE0NDAwMDdiLCAKLTB4MCwgMHg4ZWUzMDRlNCwgMHg4ZWUyMDRmOCwgMHgxNDYyMDAwNCwgCi0weDAsIDB4OTJlMjA0ZjQsIDB4NTA0MDAwNzQsIDB4YTJlMDA0ZjQsIAotMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIAotMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgCi0weDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgCi0weDhlZTIwMWE0LCAweDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIAotMHg4MDAxNjM3LCAweDhlZTIwMWE0LCAweDhlZTIwNGU0LCAweGFjNjIwMDFjLCAKLTB4OGVlNDA0YjAsIDB4OGVlNTA0YjQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIAotMHgyNDAyMDAwOCwgMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgCi0weGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAKLTB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIDB4MCwgCi0weDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAKLTB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIAotMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLCAKLTB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgCi0weDgwMDE2MjEsIDB4MCwgMHgxNGEwMDAwNSwgMHgwLCAKLTB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIAotMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgCi0weDgwMDE2MzcsIDB4MCwgMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgCi0weDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgCi0weDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMTIsIDB4YWM4MjAwMDAsIAotMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHg1NjAwMDAwYiwgMHgyNDEwMDAwMSwgCi0weDhlZTIwNGU0LCAweDNjMDQwMDAxLCAweDI0ODQ1MjhjLCAweGFmYTAwMDE0LCAKLTB4YWZhMjAwMTAsIDB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIAotMHhjMDAyNDAzLCAweDM0YTVmMDA2LCAweDE2MDAwMDAzLCAweDI0MDIwMDAxLCAKLTB4ODAwMTY1MCwgMHhhMmUyMDRmNCwgMHg4ZWUyMDE3MCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTcwLCAweDhlZTIwMTcwLCAweDhlZTIwNGU0LCAweGEyZTAwNGY0LCAKLTB4YWVlMDA0ZjAsIDB4YWVlMDcyNzQsIDB4YWVlMjA0ZjgsIDB4OGVlMjBlMWMsIAotMHgxMDQwMDA2ZCwgMHgwLCAweDhmODMwMTIwLCAweDI3NjIzODAwLCAKLTB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjYzMDAwLCAKLTB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgCi0weDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsIDB4ODAyMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDE2YWQsIDB4OGVlMjAxYTQsIAotMHg4ZWUyNzI0YywgMHhhYzYyMDAxYywgMHg4ZWU0MDRhOCwgMHg4ZWU1MDRhYywgCi0weDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweDI0MDIwMDA4LCAweGE0NjIwMDBlLCAKLTB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIAotMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgCi0weDE0NDAwMDM3LCAweDI0MTAwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAKLTB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgMHgyNDAyMDAxMiwgCi0weDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIAotMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgCi0weGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTU0ZTMwLCAweDI0NDIwMDAxLCAKLTB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgCi0weDEwYTIwMDA1LCAweDAsIDB4ODAwMTY5NywgMHgwLCAKLTB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgCi0weGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAKLTB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMTZhZCwgMHgwLCAKLTB4OGVlMjRlMzAsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIAotMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDI0MDIwMDEyLCAweGFjODIwMDAwLCAweDI0MDIwMDAxLCAweGFjODIwMDA0LCAKLTB4NTYwMDAwMGIsIDB4MjQxMDAwMDEsIDB4OGVlMjcyNGMsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTI5OCwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZWU2NzI0YywgCi0weDhmNDcwMjgwLCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMDgsIAotMHg1NjAwMDAwMSwgMHhhZWUwMGUxYywgMHg4ZWUyMDE3NCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTc0LCAweDhlZTIwMTc0LCAweDhlZTI0ZTI0LCAweDEwNDAwMDE5LCAKLTB4MCwgMHhhZWUwNGUyNCwgMHg4ZjgyMDA0MCwgMHgzMDQyMDAwMSwgCi0weDE0NDAwMDA4LCAweDAsIDB4OGY0MzAxMDQsIDB4MjQwMjAwMDEsIAotMHgxMDYyMDAwNCwgMHgwLCAweDhmNDIwMjY0LCAweDEwNDAwMDA2LCAKLTB4MCwgMHg4ZWUyMDE3YywgMHgyNDQyMDAwMSwgMHhhZWUyMDE3YywgCi0weDgwMDE2ZGEsIDB4OGVlMjAxN2MsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMDQsIAotMHhhZjgyMDA0NCwgMHg4ZWUyMDE3OCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE3OCwgCi0weDhlZTIwMTc4LCAweDhlZTI3Mjc4LCAweDI0NDJmZjk5LCAweGFlZTI3Mjc4LCAKLTB4OGVlMjcyNzgsIDB4MWM0MDAyYWQsIDB4MCwgMHg4ZjQyMDIzOCwgCi0weDEwNDAwMmFhLCAweDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAKLTB4OTA0MjgzZTAsIDB4MTQ0MDAyYTUsIDB4MCwgMHg4ZjQyMDA4MCwgCi0weGFlZTIwMDRjLCAweDhmNDIwMGMwLCAweGFlZTIwMDQ4LCAweDhmNDIwMDg0LCAKLTB4YWVlMjAwMzgsIDB4OGY0MjAwODQsIDB4YWVlMjAyNDQsIDB4OGY0MjAwODgsIAotMHhhZWUyMDI0OCwgMHg4ZjQyMDA4YywgMHhhZWUyMDI0YywgMHg4ZjQyMDA5MCwgCi0weGFlZTIwMjUwLCAweDhmNDIwMDk0LCAweGFlZTIwMjU0LCAweDhmNDIwMDk4LCAKLTB4YWVlMjAyNTgsIDB4OGY0MjAwOWMsIDB4YWVlMjAyNWMsIDB4OGY0MjAwYTAsIAotMHhhZWUyMDI2MCwgMHg4ZjQyMDBhNCwgMHhhZWUyMDI2NCwgMHg4ZjQyMDBhOCwgCi0weGFlZTIwMjY4LCAweDhmNDIwMGFjLCAweGFlZTIwMjZjLCAweDhmNDIwMGIwLCAKLTB4YWVlMjAyNzAsIDB4OGY0MjAwYjQsIDB4YWVlMjAyNzQsIDB4OGY0MjAwYjgsIAotMHhhZWUyMDI3OCwgMHg4ZjQyMDBiYywgMHgyNDA0MDAwMSwgMHhhZWUyMDI3YywgCi0weGFlZTAwMDNjLCAweDQxMDgwLCAweDU3MTAyMSwgMHg4ZWUzMDAzYywgCi0weDhjNDIwMjQ0LCAweDI0ODQwMDAxLCAweDYyMTgyMSwgMHgyYzgyMDAwZiwgCi0weGFlZTMwMDNjLCAweDE0NDBmZmY4LCAweDQxMDgwLCAweDhmNDIwMGNjLCAKLTB4YWVlMjAwNTAsIDB4OGY0MjAwZDAsIDB4YWVlMjAwNTQsIDB4OGY4MzAxMjAsIAotMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIAotMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAKLTB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgCi0weDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTc3NSwgCi0weDhlZTIwMWE0LCAweDhmNDQwMjA4LCAweDhmNDUwMjBjLCAweDI2ZTIwMDMwLCAKLTB4YWM2MjAwMDgsIDB4MjQwMjA0MDAsIDB4YTQ2MjAwMGUsIDB4MjQwMjAwMGYsIAotMHhhYzYyMDAxOCwgMHhhYzYwMDAxYywgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgCi0weDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA3LCAKLTB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgCi0weDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsIAotMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAKLTB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxNzVmLCAweDAsIAotMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAKLTB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIAotMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxNzc1LCAweDAsIAotMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIAotMHgxMjAwMDIxMiwgMHgzYzAyMDQwMCwgMHhhZmEyMDAxOCwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg5MDQyODNiMCwgMHgxMDQwMDEwYiwgMHgwLCAKLTB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIDB4MjQ0MjAwMDEsIDB4MzA0YTAwZmYsIAotMHg1MTQzMDBmZCwgMHhhZmEwMDAxMCwgMHg4ZWUyMDYwOCwgMHgyMTBjMCwgCi0weDU3MTAyMSwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywgMHhhYzQzMDYwYywgCi0weGFjNDQwNjEwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NjkwMDMyLCAKLTB4MTIyMTAyMywgMHgyYzQyMDAzMywgMHgxMDQwMDA2YSwgMHg1ODIxLCAKLTB4MjQxODAwMDgsIDB4MjQwZjAwMGQsIDB4MjQwZDAwMDcsIDB4MjQwYzAwNDAsIAotMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwgMHgyNGU4MDAyMCwgCi0weDEwMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2ODMwMDAsIDB4OGY4MjAxMjgsIAotMHgxMTAyMDAwNCwgMHgwLCAweDhmODIwMTI0LCAweDE1MDIwMDA3LCAKLTB4MTAyMSwgMHg4ZWUyMDFhNCwgMHg4MDIxLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYTQsIDB4ODAwMTdmMywgMHg4ZWUyMDFhNCwgMHg4ZWU0MDYwOCwgCi0weDQyMGMwLCAweDgwMTgyMSwgMHg4ZWU0MDQzMCwgMHg4ZWU1MDQzNCwgCi0weGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgCi0weGFjZTQwMDAwLCAweGFjZTUwMDA0LCAweDhlZTIwNjA4LCAweGE0ZjgwMDBlLCAKLTB4YWNlZjAwMTgsIDB4YWNlYTAwMWMsIDB4MjEwYzAsIDB4MjQ0MjA2MGMsIAotMHgyZTIxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LCAweGFjZTIwMDEwLCAKLTB4YWY4ODAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzMsIDB4MjQxMDAwMDEsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgCi0weDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDAsIDB4OGM4MjAwMDQsIAotMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgCi0weDI0NDIwMDAxLCAweDEwNGMwMDA3LCAweDAsIDB4OGVlMjRlMzQsIAotMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLCAweDgwMDE3ZTAsIAotMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIAotMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgCi0weDJjNDIwMDExLCAweDUwNDAwMDEwLCAweGFjODAwMDAwLCAweDgwMDE3ZjMsIAotMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNGMwMDAzLCAKLTB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHhhYzhkMDAwMCwgMHhhYzhlMDAwNCwgMHg1NjAwMDAwNiwgMHgyNDBiMDAwMSwgCi0weDhmODIwMDU0LCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTQ0MGZmOWQsIAotMHgwLCAweDMxNjMwMGZmLCAweDI0MDIwMDAxLCAweDE0NjIwMDc3LCAKLTB4M2MwNTAwMDksIDB4YWVlYTA2MDgsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIAotMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDEwNDAwMDYxLCAKLTB4NTgyMSwgMHgyNDBkMDAwOCwgMHgyNDBjMDAxMSwgMHgyNDA4MDAxMiwgCi0weDI0MDcwMDQwLCAweDI0MGEwMDAxLCAweDhmODMwMTIwLCAweDI3NjIzODAwLCAKLTB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjYzMDAwLCAKLTB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgCi0weDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsIDB4ODAyMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDE4NWYsIDB4OGVlMjAxYTQsIAotMHg4ZWUyMDYwOCwgMHhhYzYyMDAxYywgMHg4ZWU0MDRhMCwgMHg4ZWU1MDRhNCwgCi0weDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweGE0NmQwMDBlLCAweGFjNmMwMDE4LCAKLTB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIAotMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgMHgyNDEwMDAwMSwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHg4YzgyMDAwMCwgMHgxNDQ4MDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAKLTB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4MTA0NzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgCi0weDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIDB4ODAwMTg0YywgCi0weDAsIDB4MTQ2MDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIDB4ODAwMTg1ZiwgCi0weDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4NTA0NzAwMDMsIAotMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weGFjODgwMDAwLCAweGFjOGEwMDA0LCAweDU2MDAwMDA2LCAweDI0MGIwMDAxLCAKLTB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgMHgxNDQwZmZhNiwgCi0weDAsIDB4MzE2MzAwZmYsIDB4MjQwMjAwMDEsIDB4MTQ2MjAwMDMsIAotMHgzYzA1MDAwOSwgMHg4MDAxOTdjLCAweDI0MTAwMDAxLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDUyYTQsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIAotMHg4Zjg3MDEyNCwgMHg4MDAxODdiLCAweDM0YTVmMDExLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDUyYjAsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIAotMHg4Zjg3MDEyNCwgMHgzNGE1ZjAxMCwgMHhjMDAyNDAzLCAweDgwMjEsIAotMHg4MDAxOTdjLCAweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyYmMsIAotMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgCi0weDgwMDE5NzUsIDB4MzRhNWYwMGYsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIAotMHgyNDQyMDAwMSwgMHgzMDQ5MDBmZiwgMHg1MTIzMDBlMiwgMHhhZmEwMDAxMCwgCi0weDhlZTIwNjA4LCAweDIxMGMwLCAweDU3MTAyMSwgMHg4ZmEzMDAxOCwgCi0weDhmYTQwMDFjLCAweGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODcwMTIwLCAKLTB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgCi0weDI3NjgzMDAwLCAweDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsIAotMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywgMHgxMDIxLCAweDhlZTIwMWE0LCAKLTB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxOGY3LCAKLTB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLCAKLTB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsIDB4YTMyODIxLCAweGEzMzAyYiwgCi0weDgyMjAyMSwgMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIAotMHg4ZWUzMDYwOCwgMHgyNDAyMDAwOCwgMHhhNGUyMDAwZSwgMHgyNDAyMDAwZCwgCi0weGFjZTIwMDE4LCAweGFjZTkwMDFjLCAweDMxOGMwLCAweDI0NjMwNjBjLCAKLTB4MmUzMTAyMSwgMHhhY2UyMDAwOCwgMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgCi0weGFmODgwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MTAwMDAxLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDhjODMwMDAwLCAweDI0MDIwMDA3LCAweDE0NjIwMDFmLCAweDAsIAotMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgCi0weDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAKLTB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgCi0weDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIAotMHg4MDAxOGUxLCAweDAsIDB4MTRhMDAwMDUsIDB4MCwgCi0weDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAKLTB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIAotMHg4MDAxOGY3LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQwMzAwNDAsIAotMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA3LCAweGFjODIwMDAwLCAKLTB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4NTYwMDAwMGMsIDB4YWVlOTA2MDgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTJjOCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgCi0weDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIAotMHgzNGE1ZjAwMCwgMHg4MDAxOTdjLCAweDAsIDB4OGY4MzAxMjAsIAotMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIAotMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAKLTB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgCi0weDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTk1ZSwgCi0weDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAweDhlZTQwNGEwLCAKLTB4OGVlNTA0YTQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIAotMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgCi0weGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAKLTB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIAotMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAKLTB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgCi0weDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIAotMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAKLTB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxOTQ4LCAKLTB4MCwgMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxOTVlLCAKLTB4MCwgMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgCi0weDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4MjQwMjAwMTIsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIAotMHhhYzgyMDAwNCwgMHg1NjAwMDAxZCwgMHgyNDEwMDAwMSwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1MmQwLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAKLTB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwMSwgCi0weDhlZTIwMWIwLCAweDI0NDIwMDAxLCAweGFlZTIwMWIwLCAweDgwMDE5N2MsIAotMHg4ZWUyMDFiMCwgMHgzYzA0MDAwMSwgMHgyNDg0NTJkYywgMHhhZmEwMDAxNCwgCi0weDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweDM0YTVmMDA1LCAKLTB4YzAwMjQwMywgMHgwLCAweDhlZTIwMWFjLCAweDgwMjEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFhYywgMHg4ZWUyMDFhYywgMHgxMjAwMDAwYywgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwODNiMCwgCi0weDhmNDIwMjM4LCAweDhlZTMwMTU4LCAweDI0NjMwMDAxLCAweGFlZTMwMTU4LCAKLTB4OGVlMzAxNTgsIDB4ODAwMTk4YywgMHhhZWUyNzI3OCwgMHgyNDAyMDAwMSwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyODNiMCwgMHgzYzAyMDAwMSwgCi0weDhjNDI1Y2Q4LCAweDEwNDAwMTg3LCAweDAsIDB4OGVlMjdiODQsIAotMHgyNDQzMDAwMSwgMHgyODQyMDBjOSwgMHgxNDQwMDFhNCwgMHhhZWUzN2I4NCwgCi0weDhlZTIwNGQ0LCAweDMwNDIwMDAyLCAweDE0NDAwMTE5LCAweGFlZTA3Yjg0LCAKLTB4OGVlMjA0ZDQsIDB4M2MwMzA2MDAsIDB4MzQ2MzEwMDAsIDB4MzQ0MjAwMDIsIAotMHhhZWUyMDRkNCwgMHhhZmEzMDAxOCwgMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgCi0weDI0NDIwMDAxLCAweDMwNGEwMGZmLCAweDUxNDMwMGZkLCAweGFmYTAwMDEwLCAKLTB4OGVlMjA2MDgsIDB4MjEwYzAsIDB4NTcxMDIxLCAweDhmYTMwMDE4LCAKLTB4OGZhNDAwMWMsIDB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIDB4OGY4MzAwNTQsIAotMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAKLTB4MTA0MDAwNmEsIDB4NTgyMSwgMHgyNDE4MDAwOCwgMHgyNDBmMDAwZCwgCi0weDI0MGQwMDA3LCAweDI0MGMwMDQwLCAweDI0MGUwMDAxLCAweDhmODcwMTIwLCAKLTB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgCi0weDI3NjgzMDAwLCAweDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsIAotMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywgMHgxMDIxLCAweDhlZTIwMWE0LCAKLTB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxYTE1LCAKLTB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLCAKLTB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsIDB4YTMyODIxLCAweGEzMzAyYiwgCi0weDgyMjAyMSwgMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIAotMHg4ZWUyMDYwOCwgMHhhNGY4MDAwZSwgMHhhY2VmMDAxOCwgMHhhY2VhMDAxYywgCi0weDIxMGMwLCAweDI0NDIwNjBjLCAweDJlMjEwMjEsIDB4YWNlMjAwMDgsIAotMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgCi0weDE0NDAwMDMzLCAweDI0MTAwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAKLTB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDRkMDAxZiwgCi0weDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIAotMHgwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAKLTB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0YzAwMDcsIAotMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAKLTB4MCwgMHg4MDAxYTAyLCAweDAsIDB4MTQ2MDAwMDUsIAotMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAKLTB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIAotMHhhYzgwMDAwMCwgMHg4MDAxYTE1LCAweDAsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHg1MDRjMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweGFjOGQwMDAwLCAweGFjOGUwMDA0LCAKLTB4NTYwMDAwMDYsIDB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywgCi0weDJjNDIwMDMzLCAweDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsIAotMHgyNDAyMDAwMSwgMHg1NDYyMDA3OCwgMHhhZmEwMDAxMCwgMHhhZWVhMDYwOCwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NjkwMDMyLCAweDEyMjEwMjMsIAotMHgyYzQyMDAzMywgMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGQwMDA4LCAKLTB4MjQwYzAwMTEsIDB4MjQwODAwMTIsIDB4MjQwNzAwNDAsIDB4MjQwYTAwMDEsIAotMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIAotMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgCi0weDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgCi0weDhlZTIwMWE0LCAweDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIAotMHg4MDAxYTgxLCAweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAKLTB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIAotMHhhNDZkMDAwZSwgMHhhYzZjMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgCi0weDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwMzMsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODIwMDAwLCAweDE0NDgwMDFmLCAKLTB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgCi0weDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIAotMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQ3MDAwNywgCi0weDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIAotMHgwLCAweDgwMDFhNmUsIDB4MCwgMHgxNDYwMDAwNSwgCi0weDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIAotMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgCi0weGFjODAwMDAwLCAweDgwMDFhODEsIDB4MCwgMHg4ZWUyNGUzMCwgCi0weDI0NDIwMDAxLCAweDUwNDcwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgCi0weDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4YWM4ODAwMDAsIDB4YWM4YTAwMDQsIAotMHg1NjAwMDAwNiwgMHgyNDBiMDAwMSwgMHg4ZjgyMDA1NCwgMHgxMjIxMDIzLCAKLTB4MmM0MjAwMzMsIDB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwgCi0weDI0MDIwMDAxLCAweDEwNjIwMDIyLCAweDAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTJhNCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwgCi0weDhmODcwMTI0LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMTEsIAotMHg4MDAxYWFkLCAweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyYjAsIAotMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwgMHg4Zjg3MDEyNCwgMHgzYzA1MDAwOSwgCi0weGMwMDI0MDMsIDB4MzRhNWYwMTAsIDB4ODAwMWFhZCwgMHgwLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDUyYmMsIDB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIAotMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDBmLCAKLTB4OGVlMjAxYWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIAotMHg4ZWUyMDE1YywgMHgyNDQyMDAwMSwgMHhhZWUyMDE1YywgMHg4ZWUyMDE1YywgCi0weDhlZTIwNGQ0LCAweDMwNDIwMDAxLCAweDEwNDAwMDU1LCAweDAsIAotMHg4ZjQyMDIxOCwgMHgzMDQyMDA4MCwgMHgxMDQwMDAyOSwgMHgwLCAKLTB4OGY4MjAwNDQsIDB4MzQ0MjAwNDAsIDB4YWY4MjAwNDQsIDB4OGVlMjdiN2MsIAotMHg0MDI4MjEsIDB4OGVlMjAwYzAsIDB4OGVlMzAwYzQsIDB4MjQwNjAwMDAsIAotMHgyNDA3ZmZmZiwgMHgyMDIxLCAweDQ2MTAyNCwgMHgxNDQ0MDAwZCwgCi0weDY3MTgyNCwgMHgxNDY1MDAwYiwgMHgwLCAweDhlZTI3YjgwLCAKLTB4NDAyODIxLCAweDhlZTIwMGUwLCAweDhlZTMwMGU0LCAweDIwMjEsIAotMHg0NjEwMjQsIDB4MTQ0NDAwMDMsIDB4NjcxODI0LCAweDEwNjUwMDBiLCAKLTB4MCwgMHg4ZWUyMDBjMCwgMHg4ZWUzMDBjNCwgMHg4ZWU0MDBlMCwgCi0weDhlZTUwMGU0LCAweGFlZTM3YjdjLCAweGFlZTU3YjgwLCAweDhmODIwMDQ0LCAKLTB4Mzg0MjAwMjAsIDB4ODAwMWIzOCwgMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgCi0weDI0MDNmZmRmLCAweDQzMTAyNCwgMHg4MDAxYjM4LCAweGFmODIwMDQ0LCAKLTB4OGY4MjAwNDQsIDB4MjQwM2ZmZGYsIDB4NDMxMDI0LCAweGFmODIwMDQ0LCAKLTB4OGVlMjdiN2MsIDB4NDAyODIxLCAweDhlZTIwMGMwLCAweDhlZTMwMGM0LCAKLTB4MjQwNjAwMDAsIDB4MjQwN2ZmZmYsIDB4MjAyMSwgMHg0NjEwMjQsIAotMHgxNDQ0MDAwZCwgMHg2NzE4MjQsIDB4MTQ2NTAwMGIsIDB4MCwgCi0weDhlZTI3YjgwLCAweDQwMjgyMSwgMHg4ZWUyMDBlMCwgMHg4ZWUzMDBlNCwgCi0weDIwMjEsIDB4NDYxMDI0LCAweDE0NDQwMDAzLCAweDY3MTgyNCwgCi0weDEwNjUwMDBiLCAweDAsIDB4OGVlMjAwYzAsIDB4OGVlMzAwYzQsIAotMHg4ZWU0MDBlMCwgMHg4ZWU1MDBlNCwgMHhhZWUzN2I3YywgMHhhZWU1N2I4MCwgCi0weDhmODIwMDQ0LCAweDM4NDIwMDQwLCAweDgwMDFiMzgsIDB4YWY4MjAwNDQsIAotMHg4ZjgyMDA0NCwgMHgzNDQyMDA0MCwgMHg4MDAxYjM4LCAweGFmODIwMDQ0LCAKLTB4OGY4MjAwNDQsIDB4MzQ0MjAwNDAsIDB4YWY4MjAwNDQsIDB4OGVlMjdiOGMsIAotMHgyNDQzMDAwMSwgMHgyODQyMDAxNSwgMHgxNDQwMDAyOCwgMHhhZWUzN2I4YywgCi0weDhmODIwMDQ0LCAweDM4NDIwMDIwLCAweGFmODIwMDQ0LCAweDgwMDFiMzgsIAotMHhhZWUwN2I4YywgMHg4ZWUyMDRkNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAxMSwgCi0weDAsIDB4OGY0MjAyMTgsIDB4MzA0MjAwODAsIDB4MTA0MDAwMDksIAotMHgwLCAweDhmODIwMDQ0LCAweDM0NDIwMDIwLCAweGFmODIwMDQ0LCAKLTB4OGY4MjAwNDQsIDB4MjQwM2ZmYmYsIDB4NDMxMDI0LCAweDgwMDFiMzYsIAotMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgMHgzNDQyMDA2MCwgMHg4MDAxYjM2LCAKLTB4YWY4MjAwNDQsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwNDAsIDB4YWY4MjAwNDQsIAotMHg4ZWUyN2I4OCwgMHgyNDQzMDAwMSwgMHgyODQyMTM4OSwgMHgxNDQwMDAwNSwgCi0weGFlZTM3Yjg4LCAweDhmODIwMDQ0LCAweDM4NDIwMDIwLCAweGFmODIwMDQ0LCAKLTB4YWVlMDdiODgsIDB4YzAwNDYwMywgMHgwLCAweDhmYmYwMDI0LCAKLTB4OGZiMDAwMjAsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZiOCwgCi0weGFmYmYwMDQ0LCAweGFmYjYwMDQwLCAweGFmYjUwMDNjLCAweGFmYjQwMDM4LCAKLTB4YWZiMzAwMzQsIDB4YWZiMjAwMzAsIDB4YWZiMTAwMmMsIDB4YWZiMDAwMjgsIAotMHg4Zjk2MDA2NCwgMHgzMmMyMDAwNCwgMHgxMDQwMDAwYywgMHgyNDAyMDAwNCwgCi0weGFmODIwMDY0LCAweDhmNDIwMTE0LCAweGFlZTIwNGUwLCAweDhmODIwMDYwLCAKLTB4MzQ0MjAwMDgsIDB4YWY4MjAwNjAsIDB4OGVlMjAxNmMsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDE2YywgMHg4MDAyMmY0LCAweDhlZTIwMTZjLCAweDMyYzIwMDAxLCAKLTB4MTA0MDAwMDQsIDB4MjQwMjAwMDEsIDB4YWY4MjAwNjQsIDB4ODAwMjJmNCwgCi0weDAsIDB4MzJjMjAwMDIsIDB4MTQ0MDAwMGMsIDB4M2MwNTAwMDMsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTM1NCwgMHgzNGE1MDAwMSwgMHgyYzAzMDIxLCAKLTB4MzgyMSwgMHhhZmEwMDAxMCwgMHhjMDAyNDAzLCAweGFmYTAwMDE0LCAKLTB4MjQwMmZmZjgsIDB4ODAwMjJmNCwgMHhhZjgyMDA2NCwgMHg4ZjQzMDIyYywgCi0weDhmNDIwMTBjLCAweDUwNjIwMDBjLCAweGFmYTAwMDEwLCAweDhmNDIwMjJjLCAKLTB4MjEwODAsIDB4NWExMDIxLCAweDhjNDIwMzAwLCAweGFmYTIwMDIwLCAKLTB4OGY0MjAyMmMsIDB4MjQwNzAwMDEsIDB4MjQ0MjAwMDEsIDB4MzA0MjAwM2YsIAotMHg4MDAxYjgwLCAweGFmNDIwMjJjLCAweDNjMDQwMDAxLCAweDI0ODQ1MzYwLCAKLTB4YWZhMDAwMTQsIDB4OGY0NjAyMmMsIDB4OGY0NzAxMGMsIDB4M2MwNTAwMDMsIAotMHhjMDAyNDAzLCAweDM0YTVmMDFmLCAweDM4MjEsIDB4MTRlMDAwMDMsIAotMHgwLCAweDgwMDIyZWQsIDB4YWY5NjAwNjQsIDB4OTNhMjAwMjAsIAotMHgyNDQzZmZmZiwgMHgyYzYyMDAxMSwgMHgxMDQwMDY1OCwgMHgzMTA4MCwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNTQxOCwgMHg0MDAwMDgsIAotMHgwLCAweDhmYTIwMDIwLCAweDMwNDIwZmZmLCAweGFlZTIwZTBjLCAKLTB4OGY4MjAwNjAsIDB4MzQ0MjAyMDAsIDB4YWY4MjAwNjAsIDB4OGVlMjAxMTgsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDExOCwgMHg4MDAyMmU4LCAweDhlZTIwMTE4LCAKLTB4OGZhMjAwMjAsIDB4MjQwMzAwMDEsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAKLTB4YTAyMzgzYjEsIDB4MzA0MjBmZmYsIDB4YWVlMjUyMzgsIDB4OGY4MjAwNjAsIAotMHgzNDQyMDEwMCwgMHhhZjgyMDA2MCwgMHg4ZWUyMDE0NCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTQ0LCAweDgwMDIyZTgsIDB4OGVlMjAxNDQsIDB4OGZhMjAwMjAsIAotMHgyMTIwMCwgMHgyMjUwMiwgMHgyNDAyMDAwMSwgMHgxMDgyMDAwNSwgCi0weDI0MDIwMDAyLCAweDEwODIwMDA5LCAweDI0MDJmZmZlLCAweDgwMDFiYzksIAotMHhhZmEwMDAxMCwgMHg4ZWUyMDRkNCwgMHhhZWU0MDA3MCwgMHhhZWU0MDA3NCwgCi0weDM0NDIwMDAxLCAweDgwMDFiYmQsIDB4YWVlMjA0ZDQsIDB4OGVlMzA0ZDQsIAotMHhhZWU0MDA3MCwgMHhhZWU0MDA3NCwgMHg2MjE4MjQsIDB4YWVlMzA0ZDQsIAotMHg4Zjg0MDA1NCwgMHg0MTQ0MiwgMHg0MWM4MiwgMHg0MzEwMjEsIAotMHg0MWNjMiwgMHg0MzEwMjMsIDB4NDFkMDIsIDB4NDMxMDIxLCAKLTB4NDFkNDIsIDB4NDMxMDIzLCAweDgwMDFiZDAsIDB4YWVlMjAwNzgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTM2YywgMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwgCi0weDNjMDUwMDAzLCAweGMwMDI0MDMsIDB4MzRhNTAwMDQsIDB4OGVlMjAxMTAsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDExMCwgMHg4MDAyMmU4LCAweDhlZTIwMTEwLCAKLTB4Mjc0NDAyMTIsIDB4YzAwMjJmZSwgMHgyNDA1MDAwNiwgMHgzMDQ5MDAxZiwgCi0weDkyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjQwMDAsIAotMHgxMDQwMDAwYSwgMHg5NzEwMjEsIDB4OTc0MzAyMTIsIDB4YTQ0MzcyN2UsIAotMHg4ZjQzMDIxNCwgMHg5NzEwMjEsIDB4YWM0MzcyODAsIDB4MmU0MTgyMSwgCi0weDM0MDI4MDAwLCAweDgwMDFjNzksIDB4YTQ2MjcyN2MsIDB4OTQ0MzcyN2UsIAotMHg5NzQyMDIxMiwgMHgxNDYyMDAwNiwgMHgyZTQxMDIxLCAweDk3MTAyMSwgCi0weDhjNDM3MjgwLCAweDhmNDIwMjE0LCAweDEwNjIwMDlmLCAweDJlNDEwMjEsIAotMHg5NDQyNzI3YywgMHgzMDQyODAwMCwgMHgxMDQwMDAyYSwgMHgyNDA2ZmZmZiwgCi0weDIwMjEsIDB4NDEwYzAsIDB4MmUyMTAyMSwgMHg5NDQyNzM3YywgCi0weDMwNDI0MDAwLCAweDU0NDAwMDA1LCAweDgwMzAyMSwgMHgyNDg0MDAwMSwgCi0weDJjODIwMDgwLCAweDE0NDBmZmY4LCAweDQxMGMwLCAweDRjMTAwMTAsIAotMHg2MThjMCwgMHg2MTBjMCwgMHg1NzE4MjEsIDB4OGM2MzczN2MsIAotMHg1NzEwMjEsIDB4YWZhMzAwMTAsIDB4OGM0MjczODAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTM3OCwgMHhhZmEyMDAxNCwgMHg4ZjQ3MDIxNCwgMHgzYzA1MDAwMywgCi0weGMwMDI0MDMsIDB4MzRhNTAwMTMsIDB4ODAwMWM5MCwgMHgzYzAyMDgwMCwgCi0weDk3NDQwMjEyLCAweDc3MTAyMSwgMHhhNDQ0NzM3ZSwgMHg4ZjQ0MDIxNCwgCi0weDc3MTAyMSwgMHgyZTMxODIxLCAweGFjNDQ3MzgwLCAweDM0MDI4MDAwLCAKLTB4YTQ2MjczN2MsIDB4OTEwYzAsIDB4MmUyMTAyMSwgMHg4MDAxYzc5LCAKLTB4YTQ0NjcyN2MsIDB4MmU0MTAyMSwgMHg5NDQ1NzI3YywgMHg4MDAxYzJlLCAKLTB4NTEwYzAsIDB4OTQ0MzczN2UsIDB4OTc0MjAyMTIsIDB4MTQ2MjAwMDYsIAotMHg1MTBjMCwgMHg5NzEwMjEsIDB4OGM0MzczODAsIDB4OGY0MjAyMTQsIAotMHgxMDYyMDA2NSwgMHg1MTBjMCwgMHgyZTIxMDIxLCAweDk0NDU3MzdjLCAKLTB4NTEwYzAsIDB4MmUyMTAyMSwgMHg5NDQyNzM3YywgMHgzMDQyODAwMCwgCi0weDEwNDBmZmYwLCAweDk3MTAyMSwgMHg1MjBjMCwgMHg5NzEwMjEsIAotMHg5NDQzNzM3ZSwgMHg5NzQyMDIxMiwgMHgxNDYyMDAwNiwgMHgyNDA2ZmZmZiwgCi0weDk3MTAyMSwgMHg4YzQzNzM4MCwgMHg4ZjQyMDIxNCwgMHgxMDYyMDA1MywgCi0weDNjMDIwODAwLCAweDIwMjEsIDB4NDEwYzAsIDB4MmUyMTAyMSwgCi0weDk0NDI3MzdjLCAweDMwNDI0MDAwLCAweDU0NDAwMDA1LCAweDgwMzAyMSwgCi0weDI0ODQwMDAxLCAweDJjODIwMDgwLCAweDE0NDBmZmY4LCAweDQxMGMwLCAKLTB4NGMxMDAyMywgMHg2MThjMCwgMHg5MTBjMCwgMHg1NzE4MjEsIAotMHg4YzYzNzI3YywgMHg1NzEwMjEsIDB4YWZhMzAwMTAsIDB4OGM0MjcyODAsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTM4NCwgMHhhZmEyMDAxNCwgMHg4ZjQ3MDIxNCwgCi0weDNjMDUwMDAzLCAweGMwMDI0MDMsIDB4MzRhNWYwMTcsIDB4ODAwMWM5MCwgCi0weDNjMDIwODAwLCAweDhmNDMwMjEwLCAweGI3MTAyMSwgMHhhYzQzNzc3YywgCi0weDhmNDMwMjE0LCAweGI3MTAyMSwgMHhhYzQzNzc4MCwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg4YzQyODNiNCwgMHgyNDQyMDAwMSwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhYzIyODNiNCwgMHgzYzAzMDAwMSwgMHg3NzE4MjEsIAotMHg4YzYzODNiNCwgMHgyZTUxMDIxLCAweDgwMDFjODIsIDB4YTQ0Mzc3N2MsIAotMHg5NzQ0MDIxMiwgMHg3NzEwMjEsIDB4YTQ0NDczN2UsIDB4OGY0NDAyMTQsIAotMHg3NzEwMjEsIDB4MmUzMTgyMSwgMHhhYzQ0NzM4MCwgMHgzNDAyODAwMCwgCi0weGE0NjI3MzdjLCAweDUxMGMwLCAweDJlMjEwMjEsIDB4YTQ0NjczN2MsIAotMHgyMDIxLCAweDQyOGMwLCAweDJlNTEwMjEsIDB4OTQ0Mjc3N2MsIAotMHgxMDQwZmZkYywgMHgyNDg0MDAwMSwgMHgyYzgyMDA4MCwgMHg1NDQwZmZmYSwgCi0weDQyOGMwLCAweDkyZTIwNGQ4LCAweDEwNDAwMDA2LCAweDI0MDIwMDAxLCAKLTB4OGVlMzA0ZGMsIDB4MTIyMTAwNCwgMHg2MjE4MjUsIDB4ODAwMWM4ZiwgCi0weGFlZTMwNGRjLCAweDhmODMwMjI4LCAweDI0MDIwMDAxLCAweDEyMjEwMDQsIAotMHg2MjE4MjUsIDB4YWY4MzAyMjgsIDB4M2MwMjA4MDAsIDB4MzQ0MjEwMDAsIAotMHhhZmEyMDAxOCwgMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgMHgyNDQyMDAwMSwgCi0weDMwNGEwMGZmLCAweDUxNDMwMGZkLCAweGFmYTAwMDEwLCAweDhlZTIwNjA4LCAKLTB4MjEwYzAsIDB4NTcxMDIxLCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLCAKLTB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIAotMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDEwNDAwMDZhLCAKLTB4NTgyMSwgMHgyNDEwMDAwOCwgMHgyNDBmMDAwZCwgMHgyNDBkMDAwNywgCi0weDI0MGMwMDQwLCAweDI0MGUwMDAxLCAweDhmODcwMTIwLCAweDI3NjIzODAwLCAKLTB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwgCi0weDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIAotMHgxNTAyMDAwNywgMHgxMDIxLCAweDhlZTIwMWE0LCAweDM4MjEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxZDA4LCAweDhlZTIwMWE0LCAKLTB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLCAweDhlZTQwNDMwLCAKLTB4OGVlNTA0MzQsIDB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsIAotMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIDB4OGVlMjA2MDgsIAotMHhhNGYwMDAwZSwgMHhhY2VmMDAxOCwgMHhhY2VhMDAxYywgMHgyMTBjMCwgCi0weDI0NDIwNjBjLCAweDJlMjEwMjEsIDB4YWNlMjAwMDgsIDB4OGVlMjA0YzQsIAotMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgCi0weDI0MDcwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAKLTB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDRkMDAxZiwgMHgwLCAKLTB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwgCi0weDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAKLTB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0YzAwMDcsIDB4MCwgCi0weDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIAotMHg4MDAxY2Y1LCAweDAsIDB4MTQ2MDAwMDUsIDB4MCwgCi0weDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAKLTB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIAotMHg4MDAxZDA4LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIAotMHg1MDRjMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIAotMHgyZTIyMDIxLCAweGFjOGQwMDAwLCAweGFjOGUwMDA0LCAweDU0ZTAwMDA2LCAKLTB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgCi0weDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsIDB4MjQwMjAwMDEsIAotMHg1NDYyMDA3OCwgMHhhZmEwMDAxMCwgMHhhZWVhMDYwOCwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDI0NjkwMDMyLCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsIAotMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGUwMDA4LCAweDI0MGQwMDExLCAKLTB4MjQwYTAwMTIsIDB4MjQwODAwNDAsIDB4MjQwYzAwMDEsIDB4OGY4MzAxMjAsIAotMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIAotMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAKLTB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgCi0weDM4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMWQ3NCwgCi0weDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAweDhlZTQwNGEwLCAKLTB4OGVlNTA0YTQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4YTQ2ZTAwMGUsIAotMHhhYzZkMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgCi0weGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAKLTB4MjQwNzAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIAotMHgyZTIyMDIxLCAweDhjODIwMDAwLCAweDE0NGEwMDFmLCAweDAsIAotMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAKLTB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIAotMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQ4MDAwNywgMHgwLCAKLTB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgCi0weDgwMDFkNjEsIDB4MCwgMHgxNDYwMDAwNSwgMHgwLCAKLTB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIAotMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgCi0weDgwMDFkNzQsIDB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgCi0weDUwNDgwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4YWM4YTAwMDAsIDB4YWM4YzAwMDQsIDB4NTRlMDAwMDYsIAotMHgyNDBiMDAwMSwgMHg4ZjgyMDA1NCwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAKLTB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwgMHgyNDAyMDAwMSwgCi0weDEwNjIwMDIyLCAweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzOTAsIAotMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwgMHg4Zjg3MDEyNCwgCi0weDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMTEsIDB4ODAwMWRhMCwgCi0weDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzOWMsIDB4YWZhMDAwMTQsIAotMHg4Zjg2MDEyMCwgMHg4Zjg3MDEyNCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAKLTB4MzRhNWYwMTAsIDB4ODAwMWRhMCwgMHgwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDUzYTgsIDB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIAotMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDBmLCAweDhlZTIwMWFjLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4OGVlMjAxMjQsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDEyNCwgMHg4MDAxZjk3LCAweDhlZTIwMTI0LCAKLTB4Mjc0NDAyMTIsIDB4YzAwMjJmZSwgMHgyNDA1MDAwNiwgMHgzMDQ5MDAxZiwgCi0weDkyOGMwLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjgwMDAsIAotMHgxMDQwMDAyZiwgMHgyZTUxMDIxLCAweDk0NDI3MjdjLCAweDMwNDI0MDAwLCAKLTB4MTQ0MDAwMWMsIDB4YjcxMDIxLCAweDk0NDM3MjdlLCAweDk3NDIwMjEyLCAKLTB4MTQ2MjAwMTgsIDB4YjcxMDIxLCAweDhjNDM3MjgwLCAweDhmNDIwMjE0LCAKLTB4NTQ2MjAwMTYsIDB4YWZhMjAwMTAsIDB4OTJlMjA0ZDgsIDB4MTA0MDAwMDcsIAotMHgyNDAyMDAwMSwgMHg4ZWUzMDRkYywgMHgxMjIxMDA0LCAweDIxMDI3LCAKLTB4NjIxODI0LCAweDgwMDFkYzksIDB4YWVlMzA0ZGMsIDB4OGY4MzAyMjgsIAotMHgxMjIxMDA0LCAweDIxMDI3LCAweDYyMTgyNCwgMHhhZjgzMDIyOCwgCi0weDkxMGMwLCAweDJlMjE4MjEsIDB4MzQwMmMwMDAsIDB4ODAwMWU0ZSwgCi0weGE0NjI3MjdjLCAweDhmNDIwMjE0LCAweGFmYTIwMDEwLCAweDkxMGMwLCAKLTB4NTcxMDIxLCAweDhjNDI3MjdjLCAweDNjMDQwMDAxLCAweDI0ODQ1M2I0LCAKLTB4M2MwNTAwMDMsIDB4YWZhMjAwMTQsIDB4OGY0NzAyMTAsIDB4MzRhNWYwMWMsIAotMHhjMDAyNDAzLCAweDEyMDMwMjEsIDB4ODAwMWU4MywgMHgzYzAyMDgwMCwgCi0weGI3MTAyMSwgMHg5NDQzNzI3ZSwgMHg5NzQyMDIxMiwgMHgxNDYyMDAxOSwgCi0weDkxOGMwLCAweGI3MTAyMSwgMHg4YzQzNzI4MCwgMHg4ZjQyMDIxNCwgCi0weDE0NjIwMDE0LCAweDkxOGMwLCAweDJlNTEwMjEsIDB4OTQ0NzcyN2MsIAotMHg3MjBjMCwgMHg5NzEwMjEsIDB4OTQ0MzczN2UsIDB4YjcxMDIxLCAKLTB4YTQ0MzcyN2UsIDB4OTcxMDIxLCAweDhjNDM3MzgwLCAweGI3MTAyMSwgCi0weGFjNDM3MjgwLCAweDJlNDEwMjEsIDB4OTQ0MzczN2MsIDB4MmU1MTAyMSwgCi0weGE0NDM3MjdjLCAweDJlNDE4MjEsIDB4MzQwMmMwMDAsIDB4ODAwMWU0ZSwgCi0weGE0NjI3MzdjLCAweDJlMzEwMjEsIDB4OTQ0NzcyN2MsIDB4MzAyMSwgCi0weDcyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MjczN2MsIDB4NDAyMSwgCi0weDMwNDI4MDAwLCAweDE0NDAwMDI1LCAweGUwMjgyMSwgMHg2MDUwMjEsIAotMHgzNDBiYzAwMCwgMHg5NzEwMjEsIDB4OTQ0MzczN2UsIDB4OTc0MjAyMTIsIAotMHg1NDYyMDAxNSwgMHhlMDI4MjEsIDB4OTcxMDIxLCAweDhjNDM3MzgwLCAKLTB4OGY0MjAyMTQsIDB4NTQ2MjAwMTAsIDB4ZTAyODIxLCAweDExMDAwMDA2LCAKLTB4MmU0MTAyMSwgMHg5NDQzNzM3YywgMHg1MTBjMCwgMHgyZTIxMDIxLCAKLTB4ODAwMWUxYSwgMHhhNDQzNzM3YywgMHg5NDQzNzM3YywgMHgyZWExMDIxLCAKLTB4YTQ0MzcyN2MsIDB4NzEwYzAsIDB4MmUyMTAyMSwgMHhhNDRiNzM3YywgCi0weDgwMDFlMjgsIDB4MjQwNjAwMDEsIDB4NTEwYzAsIDB4MmUyMTAyMSwgCi0weDk0NDc3MzdjLCAweDcyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MjczN2MsIAotMHgzMDQyODAwMCwgMHgxMDQwZmZkZiwgMHgyNTA4MDAwMSwgMHgzMGMyMDBmZiwgCi0weDE0NDAwMDI1LCAweDIwMjEsIDB4NzIwYzAsIDB4OTcxMDIxLCAKLTB4OTQ0MzczN2UsIDB4OTc0MjAyMTIsIDB4MTQ2MjAwMGYsIDB4OTEwYzAsIAotMHg5NzEwMjEsIDB4OGM0MzczODAsIDB4OGY0MjAyMTQsIDB4MTQ2MjAwMGEsIAotMHg5MTBjMCwgMHgyZTQxODIxLCAweDM0MDJjMDAwLCAweDE1MDAwMDE1LCAKLTB4YTQ2MjczN2MsIDB4OTEwYzAsIDB4MmUyMTgyMSwgMHgzNDAyODAwMCwgCi0weDgwMDFlNGUsIDB4YTQ2MjcyN2MsIDB4NTcxMDIxLCAweDhjNDI3MjdjLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDUzYzAsIDB4M2MwNTAwMDMsIDB4YWZhMjAwMTAsIAotMHg3MTBjMCwgMHg1NzEwMjEsIDB4OGM0MjczN2MsIDB4MzRhNTAwMWUsIAotMHgxMjAzMDIxLCAweGMwMDI0MDMsIDB4YWZhMjAwMTQsIDB4ODAwMWU4MywgCi0weDNjMDIwODAwLCAweDIwMjEsIDB4NDI4YzAsIDB4YjcxMDIxLCAKLTB4OTQ0Mzc3N2UsIDB4OTc0MjAyMTIsIDB4NTQ2MjAwMmIsIDB4MjQ4NDAwMDEsIAotMHhiNzEwMjEsIDB4OGM0Mzc3ODAsIDB4OGY0MjAyMTQsIDB4NTQ2MjAwMjYsIAotMHgyNDg0MDAwMSwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsIAotMHgyNDQyZmZmZiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjgzYjQsIAotMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4ODA5MDIxLCAKLTB4MjQyMTAyYiwgMHgxMDQwMDAwZSwgMHgyNGIxNzc3YywgMHgyNGIwNzc4NCwgCi0weDJmMDIwMjEsIDB4MmYxMjgyMSwgMHhjMDAyNDkwLCAweDI0MDYwMDA4LCAKLTB4MjYzMTAwMDgsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LCAKLTB4MjY1MjAwMDEsIDB4MjQyMTAyYiwgMHgxNDQwZmZmNSwgMHgyNjEwMDAwOCwgCi0weDNjMDQwMDAxLCAweDk3MjAyMSwgMHg4Yzg0ODNiNCwgMHgyNDA1MDAwOCwgCi0weDQyMGMwLCAweDI0ODQ3NzdjLCAweGMwMDI0ODgsIDB4MmU0MjAyMSwgCi0weDgwMDFlODMsIDB4M2MwMjA4MDAsIDB4MmM4MjAwODAsIDB4MTQ0MGZmY2YsIAotMHg0MjhjMCwgMHgzYzAyMDgwMCwgMHgzNDQyMjAwMCwgMHhhZmEyMDAxOCwgCi0weDhlZTIwNjA4LCAweDhmNDMwMjI4LCAweDI0NDIwMDAxLCAweDMwNGEwMGZmLCAKLTB4NTE0MzAwZmQsIDB4YWZhMDAwMTAsIDB4OGVlMjA2MDgsIDB4MjEwYzAsIAotMHg1NzEwMjEsIDB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsIDB4YWM0MzA2MGMsIAotMHhhYzQ0MDYxMCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgCi0weDEyMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTA0MDAwNmEsIDB4NTgyMSwgCi0weDI0MTAwMDA4LCAweDI0MGYwMDBkLCAweDI0MGQwMDA3LCAweDI0MGMwMDQwLCAKLTB4MjQwZTAwMDEsIDB4OGY4NzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIAotMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgzMDAwLCAweDhmODIwMTI4LCAKLTB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywgCi0weDEwMjEsIDB4OGVlMjAxYTQsIDB4MzgyMSwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMWE0LCAweDgwMDFlZmIsIDB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsIAotMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsIAotMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgMHg4NjIwMjEsIAotMHhhY2U0MDAwMCwgMHhhY2U1MDAwNCwgMHg4ZWUyMDYwOCwgMHhhNGYwMDAwZSwgCi0weGFjZWYwMDE4LCAweGFjZWEwMDFjLCAweDIxMGMwLCAweDI0NDIwNjBjLCAKLTB4MmUyMTAyMSwgMHhhY2UyMDAwOCwgMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgCi0weGFmODgwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MDcwMDAxLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDhjODIwMDAwLCAweDE0NGQwMDFmLCAweDAsIDB4OGVlMzRlMzAsIAotMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIAotMHgyNDQyMDAwMSwgMHgxMDRjMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAKLTB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAxZWU4LCAKLTB4MCwgMHgxNDYwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAxZWZiLCAKLTB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHg1MDRjMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4YWM4ZDAwMDAsIDB4YWM4ZTAwMDQsIDB4NTRlMDAwMDYsIDB4MjQwYjAwMDEsIAotMHg4ZjgyMDA1NCwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDE0NDBmZjlkLCAKLTB4MCwgMHgzMTYzMDBmZiwgMHgyNDAyMDAwMSwgMHg1NDYyMDA3OCwgCi0weGFmYTAwMDEwLCAweGFlZWEwNjA4LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4MjQ2OTAwMzIsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgMHgxMDQwMDA2MSwgCi0weDU4MjEsIDB4MjQwZTAwMDgsIDB4MjQwZDAwMTEsIDB4MjQwYTAwMTIsIAotMHgyNDA4MDA0MCwgMHgyNDBjMDAwMSwgMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgCi0weDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgCi0weDhmODIwMTI4LCAweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIAotMHgxNGMyMDAwNywgMHgwLCAweDhlZTIwMWE0LCAweDM4MjEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxZjY3LCAweDhlZTIwMWE0LCAKLTB4OGVlMjA2MDgsIDB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsIAotMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgMHhhNDZlMDAwZSwgMHhhYzZkMDAxOCwgCi0weGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAKLTB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzMsIDB4MjQwNzAwMDEsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4OGM4MjAwMDAsIDB4MTQ0YTAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgCi0weDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDAsIDB4OGM4MjAwMDQsIAotMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgCi0weDI0NDIwMDAxLCAweDEwNDgwMDA3LCAweDAsIDB4OGVlMjRlMzQsIAotMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLCAweDgwMDFmNTQsIAotMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIAotMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgCi0weDJjNDIwMDExLCAweDUwNDAwMDEwLCAweGFjODAwMDAwLCAweDgwMDFmNjcsIAotMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNDgwMDAzLCAKLTB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHhhYzhhMDAwMCwgMHhhYzhjMDAwNCwgMHg1NGUwMDAwNiwgMHgyNDBiMDAwMSwgCi0weDhmODIwMDU0LCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTQ0MGZmYTYsIAotMHgwLCAweDMxNjMwMGZmLCAweDI0MDIwMDAxLCAweDEwNjIwMDIyLCAKLTB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTM5MCwgMHhhZmEwMDAxMCwgCi0weGFmYTAwMDE0LCAweDhmODYwMTIwLCAweDhmODcwMTI0LCAweDNjMDUwMDA5LCAKLTB4YzAwMjQwMywgMHgzNGE1ZjAxMSwgMHg4MDAxZjkzLCAweDAsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTM5YywgMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwgCi0weDhmODcwMTI0LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMTAsIAotMHg4MDAxZjkzLCAweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzYTgsIAotMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgCi0weGMwMDI0MDMsIDB4MzRhNWYwMGYsIDB4OGVlMjAxYWMsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhYywgMHg4ZWUyMDFhYywgMHg4ZWUyMDEyOCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTI4LCAweDhlZTIwMTI4LCAweDhlZTIwMTY0LCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxNjQsIDB4ODAwMjJlOCwgMHg4ZWUyMDE2NCwgMHg4ZmEyMDAyMCwgCi0weDIxMjAwLCAweDIxZDAyLCAweDI0MDIwMDAxLCAweDEwNjIwMDA1LCAKLTB4MjQwMjAwMDIsIDB4MTA2MjAwMGQsIDB4MCwgMHg4MDAxZmI3LCAKLTB4YWZhMDAwMTAsIDB4OTJlMjA0ZDgsIDB4MTQ0MDAwMDYsIDB4MjQwMjAwMDEsIAotMHg4ZjgyMDIyOCwgMHhhZWUyMDRkYywgMHgyNDAyZmZmZiwgMHhhZjgyMDIyOCwgCi0weDI0MDIwMDAxLCAweDgwMDFmYmUsIDB4YTJlMjA0ZDgsIDB4OTJlMjA0ZDgsIAotMHg1MDQwMDAwYywgMHhhMmUwMDRkOCwgMHg4ZWUyMDRkYywgMHhhZjgyMDIyOCwgCi0weDgwMDFmYmUsIDB4YTJlMDA0ZDgsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzYzgsIAotMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwgMHgzYzA1MDAwMywgMHhjMDAyNDAzLCAKLTB4MzRhNWYwMDksIDB4OGVlMjAxM2MsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxM2MsIAotMHg4MDAyMmU4LCAweDhlZTIwMTNjLCAweDhmYTIwMDIwLCAweDIxMjAwLCAKLTB4MjI1MDIsIDB4MjQwMjAwMDEsIDB4MTA4MjAwMDUsIDB4MjQwMjAwMDIsIAotMHgxMDgyMDAwZiwgMHgwLCAweDgwMDFmZTMsIDB4YWZhMDAwMTAsIAotMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIAotMHgzNDQyMDAwOCwgMHhhZjgyMDIyMCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhMDIyODNiMiwgMHg4MDAxZmVhLCAweGFlZTQwMTA4LCAKLTB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZjcsIDB4NDMxMDI0LCAKLTB4YWY4MjAyMjAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2IyLCAKLTB4ODAwMWZlYSwgMHhhZWU0MDEwOCwgMHgzYzA0MDAwMSwgMHgyNDg0NTNkNCwgCi0weGFmYTAwMDE0LCAweDhmYTYwMDIwLCAweDNjMDUwMDAzLCAweGMwMDI0MDMsIAotMHgzNGE1ZjAwYSwgMHg4ZWUyMDEyYywgMHgyNDQyMDAwMSwgMHhhZWUyMDEyYywgCi0weDgwMDIyZTgsIDB4OGVlMjAxMmMsIDB4OGZhMjAwMjAsIDB4MjEyMDAsIAotMHgyMWQwMiwgMHgyNDAyMDAwMSwgMHgxMDYyMDAwNSwgMHgyNDAyMDAwMiwgCi0weDEwNjIwMDBlLCAweDAsIDB4ODAwMjAxMSwgMHhhZmEwMDAxMCwgCi0weDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgCi0weDM0NDIwMDA4LCAweGFmODIwMjIwLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweDgwMDIwMTgsIDB4YTAyMjgzYjMsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OTA0MjgzYjIsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAKLTB4MTQ0MDAwMGUsIDB4YTAyMDgzYjMsIDB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIAotMHgzNDYzZmZmNywgMHg0MzEwMjQsIDB4ODAwMjAxOCwgMHhhZjgyMDIyMCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1M2UwLCAweGFmYTAwMDE0LCAweDhmYTYwMDIwLCAKLTB4M2MwNTAwMDMsIDB4YzAwMjQwMywgMHgzNGE1ZjAwYiwgMHg4ZWUyMDExNCwgCi0weDI0NDIwMDAxLCAweGFlZTIwMTE0LCAweDgwMDIyZTgsIDB4OGVlMjAxMTQsIAotMHgyNzg0MDIwOCwgMHgyNzQ1MDIwMCwgMHhjMDAyNDlhLCAweDI0MDYwMDA4LCAKLTB4MjZlNDAwOTQsIDB4Mjc0NTAyMDAsIDB4YzAwMjQ5YSwgMHgyNDA2MDAwOCwgCi0weDhlZTIwMTM0LCAweDI0NDIwMDAxLCAweGFlZTIwMTM0LCAweDgwMDIyZTgsIAotMHg4ZWUyMDEzNCwgMHg4ZjQ2MDI0OCwgMHgyMDIxLCAweGMwMDUxMDgsIAotMHgyNDA1MDAwNCwgMHg4ZWUyMDEzMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDEzMCwgCi0weDgwMDIyZTgsIDB4OGVlMjAxMzAsIDB4OGVmMzAxY2MsIDB4OGVmNDAxZDAsIAotMHg4ZWY1MDFkOCwgMHg4ZWUyMDE0MCwgMHgyNmU0MDAzMCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTQwLCAweDhlZjAwMTQwLCAweDhlZjEwMDc0LCAweDhlZjIwMDcwLCAKLTB4YzAwMjQ4OCwgMHgyNDA1MDQwMCwgMHhhZWYzMDFjYywgMHhhZWY0MDFkMCwgCi0weGFlZjUwMWQ4LCAweGFlZjAwMTQwLCAweGFlZjEwMDc0LCAweGFlZjIwMDcwLCAKLTB4OGY0MjAyNWMsIDB4MjZlNDAwOTQsIDB4YWVlMjAwNjAsIDB4OGY0MjAyNjAsIAotMHgyNzQ1MDIwMCwgMHgyNDA2MDAwOCwgMHhhZWUyMDA2OCwgMHgyNDAyMDAwNiwgCi0weGMwMDI0OWEsIDB4YWVlMjAwNjQsIDB4M2MwMjNiOWEsIDB4MzQ0MmNhMDAsIAotMHhhZWUyMDA2YywgMHgyNDAyMDNlOCwgMHgyNDA0MDAwMiwgMHgyNDAzMDAwMSwgCi0weGFlZTIwMTA0LCAweGFlZTQwMTAwLCAweGFlZTMwMTBjLCAweDhmODIwMjIwLCAKLTB4MzA0MjAwMDgsIDB4MTA0MDAwMDQsIDB4MCwgMHhhZWUzMDEwOCwgCi0weDgwMDIwNjEsIDB4MjAyMSwgMHhhZWU0MDEwOCwgMHgyMDIxLCAKLTB4M2MwMzAwMDEsIDB4NjQxODIxLCAweDkwNjM1YzMwLCAweDJlNDEwMjEsIAotMHgyNDg0MDAwMSwgMHhhMDQzMDA5YywgMHgyYzgyMDAwZiwgMHgxNDQwZmZmOCwgCi0weDAsIDB4OGY4MjAwNDAsIDB4MmU0MTgyMSwgMHgyNDg0MDAwMSwgCi0weDIxNzAyLCAweDI0NDIwMDMwLCAweGEwNjIwMDljLCAweDJlNDEwMjEsIAotMHg4MDAyMmU4LCAweGEwNDAwMDljLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGEwMjI4M2UwLCAweDI0MGIwNDAwLCAweDI0MDgwMDE0LCAKLTB4MjQwYTAwNDAsIDB4MjQwOTAwMDEsIDB4OGY4MzAxMDAsIDB4Mjc2MjMwMDAsIAotMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjI4MDAsIAotMHg4ZjgyMDEwOCwgMHgxMGMyMDAwNCwgMHgwLCAweDhmODIwMTA0LCAKLTB4MTRjMjAwMDcsIDB4MjZlMjAwMzAsIDB4OGVlMjAxYTgsIDB4MzgyMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDIwYTgsIDB4OGVlMjAxYTgsIAotMHg4ZWU0MDRiOCwgMHg4ZWU1MDRiYywgMHhhYzYyMDAwOCwgMHhhNDZiMDAwZSwgCi0weGFjNjgwMDE4LCAweGFjNjAwMDFjLCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAKLTB4OGVlMjA0Y2MsIDB4YWM2MjAwMTAsIDB4YWY4NjAxMDAsIDB4OTJlMjA0ZWMsIAotMHgxNDQwMDAwZSwgMHgyNDA3MDAwMSwgMHg4ZWUyNGUyOCwgMHgyNDQyMDAwMSwgCi0weDUwNGEwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIAotMHhhZWUyNGUyOCwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgCi0weDJlMjEwMjEsIDB4YWM0ODAwMDAsIDB4YWM0OTAwMDQsIDB4MTBlMGZmZDIsIAotMHgwLCAweDgwMDIyZTgsIDB4MCwgMHgzYzAyMDkwMCwgCi0weGFlZTA1MjM4LCAweGFlZTA1MjNjLCAweGFlZTA1MjQwLCAweGFlZTA1MjQ0LCAKLTB4YWVlMDAxZDAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2IxLCAKLTB4YWZhMjAwMTgsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIDB4MjQ0MjAwMDEsIAotMHgzMDRhMDBmZiwgMHg1MTQzMDBmZCwgMHhhZmEwMDAxMCwgMHg4ZWUyMDYwOCwgCi0weDIxMGMwLCAweDU3MTAyMSwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywgCi0weGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4MjQ2OTAwMzIsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgMHgxMDQwMDA2YSwgCi0weDU4MjEsIDB4MjQxMDAwMDgsIDB4MjQwZjAwMGQsIDB4MjQwZDAwMDcsIAotMHgyNDBjMDA0MCwgMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwgCi0weDI0ZTgwMDIwLCAweDEwMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2ODMwMDAsIAotMHg4ZjgyMDEyOCwgMHgxMTAyMDAwNCwgMHgwLCAweDhmODIwMTI0LCAKLTB4MTUwMjAwMDcsIDB4MTAyMSwgMHg4ZWUyMDFhNCwgMHgzODIxLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMjEyYywgMHg4ZWUyMDFhNCwgCi0weDhlZTQwNjA4LCAweDQyMGMwLCAweDgwMTgyMSwgMHg4ZWU0MDQzMCwgCi0weDhlZTUwNDM0LCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLCAKLTB4ODYyMDIxLCAweGFjZTQwMDAwLCAweGFjZTUwMDA0LCAweDhlZTIwNjA4LCAKLTB4YTRmMDAwMGUsIDB4YWNlZjAwMTgsIDB4YWNlYTAwMWMsIDB4MjEwYzAsIAotMHgyNDQyMDYwYywgMHgyZTIxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LCAKLTB4YWNlMjAwMTAsIDB4YWY4ODAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzMsIAotMHgyNDA3MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsIDB4MCwgCi0weDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDAsIAotMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgCi0weDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNGMwMDA3LCAweDAsIAotMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLCAKLTB4ODAwMjExOSwgMHgwLCAweDE0NjAwMDA1LCAweDAsIAotMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgCi0weDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEwLCAweGFjODAwMDAwLCAKLTB4ODAwMjEyYywgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4NTA0YzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgCi0weGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAKLTB4MmUyMjAyMSwgMHhhYzhkMDAwMCwgMHhhYzhlMDAwNCwgMHg1NGUwMDAwNiwgCi0weDI0MGIwMDAxLCAweDhmODIwMDU0LCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsIAotMHgxNDQwZmY5ZCwgMHgwLCAweDMxNjMwMGZmLCAweDI0MDIwMDAxLCAKLTB4NTQ2MjAwNzgsIDB4YWZhMDAwMTAsIDB4YWVlYTA2MDgsIDB4OGY4MzAwNTQsIAotMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAKLTB4MTA0MDAwNjEsIDB4NTgyMSwgMHgyNDBlMDAwOCwgMHgyNDBkMDAxMSwgCi0weDI0MGEwMDEyLCAweDI0MDgwMDQwLCAweDI0MGMwMDAxLCAweDhmODMwMTIwLCAKLTB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLCAKLTB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgCi0weDhmODIwMTI0LCAweDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsIAotMHgzODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDIxOTgsIAotMHg4ZWUyMDFhNCwgMHg4ZWUyMDYwOCwgMHhhYzYyMDAxYywgMHg4ZWU0MDRhMCwgCi0weDhlZTUwNGE0LCAweDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweGE0NmUwMDBlLCAKLTB4YWM2ZDAwMTgsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIAotMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgCi0weDI0MDcwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAKLTB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDRhMDAxZiwgMHgwLCAKLTB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwgCi0weDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAKLTB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0ODAwMDcsIDB4MCwgCi0weDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIAotMHg4MDAyMTg1LCAweDAsIDB4MTQ2MDAwMDUsIDB4MCwgCi0weDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAKLTB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIAotMHg4MDAyMTk4LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIAotMHg1MDQ4MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIAotMHgyZTIyMDIxLCAweGFjOGEwMDAwLCAweGFjOGMwMDA0LCAweDU0ZTAwMDA2LCAKLTB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgCi0weDE0NDBmZmE2LCAweDAsIDB4MzE2MzAwZmYsIDB4MjQwMjAwMDEsIAotMHgxMDYyMDAyMiwgMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1MzkwLCAKLTB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIAotMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDExLCAweDgwMDIxYzQsIAotMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1MzljLCAweGFmYTAwMDE0LCAKLTB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgCi0weDM0YTVmMDEwLCAweDgwMDIxYzQsIDB4MCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1M2E4LCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAKLTB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwZiwgMHg4ZWUyMDFhYywgCi0weDI0NDIwMDAxLCAweGFlZTIwMWFjLCAweDhlZTIwMWFjLCAweDhlZTIwMTIwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxMjAsIDB4OGVlMjAxMjAsIDB4OGVlMjAxNjgsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDE2OCwgMHg4MDAyMmU4LCAweDhlZTIwMTY4LCAKLTB4OGY0MjAyNWMsIDB4MjZlNDAwOTQsIDB4YWVlMjAwNjAsIDB4OGY0MjAyNjAsIAotMHgyNzQ1MDIwMCwgMHgyNDA2MDAwOCwgMHhjMDAyNDlhLCAweGFlZTIwMDY4LCAKLTB4OGY4MjAyMjAsIDB4MzA0MjAwMDgsIDB4MTQ0MDAwMDIsIDB4MjQwMjAwMDEsIAotMHgyNDAyMDAwMiwgMHhhZWUyMDEwOCwgMHg4ZWUyMDExYywgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTFjLCAweDgwMDIyZTgsIDB4OGVlMjAxMWMsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTNlYywgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwgCi0weDNjMDUwMDAzLCAweGMwMDI0MDMsIDB4MzRhNWYwMGYsIDB4OTNhMjAwMjAsIAotMHgzYzAzMDcwMCwgMHgzNDYzMTAwMCwgMHg0MzEwMjUsIDB4YWZhMjAwMTgsIAotMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgMHgyNDQyMDAwMSwgMHgzMDQ5MDBmZiwgCi0weDUxMjMwMGUyLCAweGFmYTAwMDEwLCAweDhlZTIwNjA4LCAweDIxMGMwLCAKLTB4NTcxMDIxLCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLCAweGFjNDMwNjBjLCAKLTB4YWM0NDA2MTAsIDB4OGY4NzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIAotMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgzMDAwLCAweDhmODIwMTI4LCAKLTB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywgCi0weDEwMjEsIDB4OGVlMjAxYTQsIDB4MzgyMSwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMWE0LCAweDgwMDIyNWQsIDB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsIAotMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsIAotMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgMHg4NjIwMjEsIAotMHhhY2U0MDAwMCwgMHhhY2U1MDAwNCwgMHg4ZWUzMDYwOCwgMHgyNDAyMDAwOCwgCi0weGE0ZTIwMDBlLCAweDI0MDIwMDBkLCAweGFjZTIwMDE4LCAweGFjZTkwMDFjLCAKLTB4MzE4YzAsIDB4MjQ2MzA2MGMsIDB4MmUzMTAyMSwgMHhhY2UyMDAwOCwgCi0weDhlZTIwNGM0LCAweGFjZTIwMDEwLCAweGFmODgwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwMzcsIDB4MjQwNzAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA3LCAKLTB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgCi0weDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsIAotMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAKLTB4MTBhMjAwMDUsIDB4MCwgMHg4MDAyMjQ3LCAweDAsIAotMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAKLTB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIAotMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyMjVkLCAweDAsIAotMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIAotMHg1NGUwMDAwYywgMHhhZWU5MDYwOCwgMHgzYzA0MDAwMSwgMHgyNDg0NTNmNCwgCi0weGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAKLTB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwMCwgMHg4MDAyMmUwLCAKLTB4MCwgMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgCi0weGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgCi0weDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIAotMHgwLCAweDhlZTIwMWE0LCAweDM4MjEsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhNCwgMHg4MDAyMmM0LCAweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAKLTB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsIDB4MjQ2MjAwMWMsIAotMHhhYzYyMDAwOCwgMHgyNDAyMDAwOCwgMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgCi0weGFjNjIwMDE4LCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAKLTB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIAotMHgyNDA3MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIAotMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAKLTB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIAotMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgCi0weDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIAotMHgwLCAweDgwMDIyYWUsIDB4MCwgMHgxNGEwMDAwNSwgCi0weDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIAotMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgCi0weGFjODAwMDAwLCAweDgwMDIyYzQsIDB4MCwgMHg4ZWUyNGUzMCwgCi0weDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIAotMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgCi0weDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMTIsIAotMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNGUwMDAxYiwgCi0weDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzZmMsIDB4YWZhMDAwMTAsIAotMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgCi0weGMwMDI0MDMsIDB4MzRhNWYwMDEsIDB4OGVlMjAxYjAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFiMCwgMHg4MDAyMmUwLCAweDhlZTIwMWIwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDU0MDgsIDB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIAotMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDA1LCAweDhlZTIwMWFjLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4OGVlMjAxNTAsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDE1MCwgMHg4ZWUyMDE1MCwgMHg4ZWUyMDE2MCwgCi0weDI0NDIwMDAxLCAweGFlZTIwMTYwLCAweDhlZTIwMTYwLCAweDhmNDMwMjJjLCAKLTB4OGY0MjAxMGMsIDB4MTQ2MjAwMDksIDB4MjQwMjAwMDIsIDB4YWY4MjAwNjQsIAotMHg4ZjgyMDA2NCwgMHgxNDQwMDAwNSwgMHgwLCAweDhmNDMwMjJjLCAKLTB4OGY0MjAxMGMsIDB4MTQ2MmY4NzUsIDB4MCwgMHg4ZmJmMDA0NCwgCi0weDhmYjYwMDQwLCAweDhmYjUwMDNjLCAweDhmYjQwMDM4LCAweDhmYjMwMDM0LCAKLTB4OGZiMjAwMzAsIDB4OGZiMTAwMmMsIDB4OGZiMDAwMjgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDQ4LCAweDI3YmRmZmY4LCAweDI0MDhmZmZmLCAweDEwYTAwMDE0LCAKLTB4NDgyMSwgMHgzYzBhZWRiOCwgMHgzNTRhODMyMCwgMHg5MDg3MDAwMCwgCi0weDI0ODQwMDAxLCAweDMwMjEsIDB4MTA3MTAyNiwgMHgzMDQyMDAwMSwgCi0weDEwNDAwMDAyLCAweDgxODQyLCAweDZhMTgyNiwgMHg2MDQwMjEsIAotMHgyNGM2MDAwMSwgMHgyY2MyMDAwOCwgMHgxNDQwZmZmNywgMHg3Mzg0MiwgCi0weDI1MjkwMDAxLCAweDEyNTEwMmIsIDB4MTQ0MGZmZjAsIDB4MCwgCi0weDEwMDEwMjEsIDB4M2UwMDAwOCwgMHgyN2JkMDAwOCwgMHgyN2JkZmZlOCwgCi0weDI3NjQyODAwLCAweGFmYmYwMDEwLCAweGMwMDI0ODgsIDB4MjQwNTEwMDAsIAotMHgyNDAyMDAyMSwgMHhhZjgwMDEwMCwgMHhhZjgwMDEwNCwgMHhhZjgwMDEwOCwgCi0weGFmODAwMTEwLCAweGFmODAwMTE0LCAweGFmODAwMTE4LCAweGFmODAwMTIwLCAKLTB4YWY4MDAxMjQsIDB4YWY4MDAxMjgsIDB4YWY4MDAxMzAsIDB4YWY4MDAxMzQsIAotMHhhZjgwMDEzOCwgMHhhZWUwNGUyOCwgMHhhZWUwNGUyYywgMHhhZWUwNGUzMCwgCi0weGFlZTA0ZTM0LCAweGFmODIwMTFjLCAweDhmNDIwMjE4LCAweDMwNDIwMDQwLCAKLTB4MTA0MDAwMDQsIDB4MCwgMHg4ZjgyMDExYywgMHgzNDQyMDAwNCwgCi0weGFmODIwMTFjLCAweDhmYmYwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMTgsIAotMHgyN2JkZmZlMCwgMHhhZmJmMDAxOCwgMHg4ZjgyMDEwNCwgMHhhZmEyMDAxMCwgCi0weDhmODIwMTAwLCAweDNjMDUwMDAyLCAweGFmYTIwMDE0LCAweDhmODYwMGIwLCAKLTB4OGY4NzAxMWMsIDB4M2MwNDAwMDEsIDB4MjQ4NDU0YzAsIDB4YzAwMjQwMywgCi0weDM0YTVmMDAwLCAweDhmODMwMGIwLCAweDNjMDI3ZjAwLCAweDYyMTgyNCwgCi0weDNjMDIwNDAwLCAweDEwNjIwMDI5LCAweDQzMTAyYiwgMHgxNDQwMDAwOCwgCi0weDNjMDIyMDAwLCAweDNjMDIwMTAwLCAweDEwNjIwMDI0LCAweDNjMDIwMjAwLCAKLTB4MTA2MjAwMTEsIDB4MCwgMHg4MDAyMzc0LCAweDAsIAotMHgxMDYyMDAwOCwgMHgzYzAyNDAwMCwgMHgxNDYyMDAxYywgMHgwLCAKLTB4OGVlMjAxOTAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxOTAsIDB4ODAwMjM3NCwgCi0weDhlZTIwMTkwLCAweDhlZTIwMThjLCAweDI0NDIwMDAxLCAweGFlZTIwMThjLCAKLTB4ODAwMjM3NCwgMHg4ZWUyMDE4YywgMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwgCi0weGFmODIwMTFjLCAweDhmODMwMTA0LCAweDhmODIwMGIwLCAweDM0NDIwMDAxLCAKLTB4YWY4MjAwYjAsIDB4YWY4MzAxMDQsIDB4OGY4MjAxMWMsIDB4MjQwM2ZmZmQsIAotMHg0MzEwMjQsIDB4YWY4MjAxMWMsIDB4OGVlMjAxYTAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhMCwgMHg4MDAyMzc3LCAweDhlZTIwMWEwLCAweDhmODIwMGIwLCAKLTB4MzQ0MjAwMDEsIDB4YWY4MjAwYjAsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDIwLCAweDI3YmRmZmUwLCAweGFmYmYwMDFjLCAweGFmYjAwMDE4LCAKLTB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIDB4M2MwNTAwMDEsIAotMHhhZmEyMDAxNCwgMHg4Zjg2MDBhMCwgMHg4Zjg3MDExYywgMHgzYzA0MDAwMSwgCi0weDI0ODQ1NGNjLCAweGMwMDI0MDMsIDB4MzRhNWYwMDAsIDB4OGY4MzAwYTAsIAotMHgzYzAyN2YwMCwgMHg2MjE4MjQsIDB4M2MwMjA0MDAsIDB4MTA2MjAwNTMsIAotMHg4MDIxLCAweDQzMTAyYiwgMHgxNDQwMDAwOCwgMHgzYzA0MjAwMCwgCi0weDNjMDIwMTAwLCAweDEwNjIwMDRkLCAweDNjMDIwMjAwLCAweDEwNjIwMDNhLCAKLTB4MCwgMHg4MDAyM2UwLCAweDAsIDB4MTA2NDAwMDMsIAotMHgzYzAyNDAwMCwgMHgxNDYyMDA0NSwgMHgwLCAweDhmODIwMGEwLCAKLTB4NDQxMDI0LCAweDEwNDAwMDA2LCAweDAsIDB4OGVlMjAxOTQsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDE5NCwgMHg4MDAyM2E5LCAweDhlZTIwMTk0LCAKLTB4OGVlMjAxOTgsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxOTgsIDB4OGVlMjAxOTgsIAotMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwgMHhhZjgyMDExYywgMHg4ZjgyMDExYywgCi0weDMwNDIwMjAwLCAweDEwNDAwMDFiLCAweDAsIDB4OGY4MzAwYTAsIAotMHg4Zjg0MDEyNCwgMHg4ZjgyMDBhYywgMHgxNDQwMDAwNywgMHgyNDAyMDAwMSwgCi0weDNjMDIwMDAxLCAweDM0NDJmMDAwLCAweDYyMTAyNCwgMHg1MDQwMDAwMSwgCi0weDI0MTAwMDAxLCAweDI0MDIwMDAxLCAweDEyMDAwMDBkLCAweGFmODIwMGEwLCAKLTB4OGY4MjAxMjQsIDB4MjQ0MmZmZTAsIDB4YWY4MjAxMjQsIDB4OGY4MjAxMjQsIAotMHg4ZjgyMDEyNCwgMHgyNzYzMzAwMCwgMHg0MzEwMmIsIDB4MTA0MDAwMDUsIAotMHgyNzYyMzdlMCwgMHhhZjgyMDEyNCwgMHg4MDAyM2NhLCAweDAsIAotMHhhZjg0MDEyNCwgMHg4ZjgyMDExYywgMHgyNDAzZmZmZCwgMHg0MzEwMjQsIAotMHg4MDAyM2UzLCAweGFmODIwMTFjLCAweDhmODIwMTFjLCAweDM0NDIwMDAyLCAKLTB4YWY4MjAxMWMsIDB4OGY4MzAxMjQsIDB4OGY4MjAwYTAsIDB4MzQ0MjAwMDEsIAotMHhhZjgyMDBhMCwgMHhhZjgzMDEyNCwgMHg4ZjgyMDExYywgMHgyNDAzZmZmZCwgCi0weDQzMTAyNCwgMHhhZjgyMDExYywgMHg4ZWUyMDE5YywgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTljLCAweDgwMDIzZTMsIDB4OGVlMjAxOWMsIDB4OGY4MjAwYTAsIAotMHgzNDQyMDAwMSwgMHhhZjgyMDBhMCwgMHg4ZmJmMDAxYywgMHg4ZmIwMDAxOCwgCi0weDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDhjNDI1YzU4LCAweDI3YmRmZmU4LCAweGFmYmYwMDE0LCAweDE0NDAwMDEyLCAKLTB4YWZiMDAwMTAsIDB4M2MxMDAwMDEsIDB4MjYxMDVkZDAsIDB4MjAwMjAyMSwgCi0weGMwMDI0ODgsIDB4MjQwNTIwMDAsIDB4MjYwMjFmZTAsIDB4M2MwMTAwMDEsIAotMHhhYzIyNWQ5NCwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ5MCwgMHhhZjQyMDI1MCwgCi0weDI0MDIyMDAwLCAweGFmNTAwMjU0LCAweGFmNDIwMjU4LCAweDI0MDIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjVjNTgsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIAotMHgzZTAwMDA4LCAweDI3YmQwMDE4LCAweDNjMDMwMDAxLCAweDhjNjM1ZDk0LCAKLTB4OGM4MjAwMDAsIDB4OGZhODAwMTAsIDB4OGZhOTAwMTQsIDB4YWM2MjAwMDAsIAotMHgzYzAyMDAwMSwgMHg4YzQyNWQ5NCwgMHg4YzgzMDAwNCwgMHhhYzQzMDAwNCwgCi0weGFjNDUwMDA4LCAweDhmODQwMDU0LCAweDI0NDNmZmUwLCAweGFjNDYwMDEwLCAKLTB4YWM0NzAwMTQsIDB4YWM0ODAwMTgsIDB4YWM0OTAwMWMsIDB4M2MwMTAwMDEsIAotMHhhYzIzNWQ5NCwgMHhhYzQ0MDAwYywgMHgzYzAyMDAwMSwgMHgyNDQyNWRkMCwgCi0weDYyMTgyYiwgMHgxMDYwMDAwNSwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVkOTAsIDB4M2MwMTAwMDEsIDB4YWMyMjVkOTQsIDB4M2MwMzAwMDEsIAotMHg4YzYzNWQ5NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWM0MCwgMHhhYzYyMDAwMCwgCi0weDNjMDMwMDAxLCAweDhjNjM1ZDk0LCAweDNjMDIwMDAxLCAweDhjNDI1YzQwLCAKLTB4YWM2MjAwMDQsIDB4M2UwMDAwOCwgMHhhZjQzMDI1MCwgMHgzYzAzMDAwMSwgCi0weDhjNjM1ZDk0LCAweDNjMDIwMDAxLCAweDhjNDI1YzQwLCAweDI3YmRmZmQwLCAKLTB4YWZiNDAwMjAsIDB4OGZiNDAwNDAsIDB4YWZiMDAwMTAsIDB4ODA4MDIxLCAKLTB4YWZiNTAwMjQsIDB4OGZiNTAwNDQsIDB4OGZhNDAwNDgsIDB4YWZiMTAwMTQsIAotMHhhMDg4MjEsIDB4YWZiZjAwMjgsIDB4YWZiMzAwMWMsIDB4YWZiMjAwMTgsIAotMHhhYzYyMDAwMCwgMHgzYzA1MDAwMSwgMHg4Y2E1NWQ5NCwgMHgzYzAyMDAwMSwgCi0weDhjNDI1YzQwLCAweGMwOTAyMSwgMHhlMDk4MjEsIDB4MTA4MDAwMDYsIAotMHhhY2EyMDAwNCwgMHgyNGE1MDAwOCwgMHhjMDAyNDkwLCAweDI0MDYwMDE4LCAKLTB4ODAwMjQ0ZSwgMHgwLCAweDI0YTQwMDA4LCAweGMwMDI0ODgsIAotMHgyNDA1MDAxOCwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ5NCwgMHgzYzA1MDAwMSwgCi0weDI0YTU1ZGQwLCAweDI0NDJmZmUwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDk0LCAKLTB4NDUxMDJiLCAweDEwNDAwMDA1LCAweDAsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWQ5MCwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ5NCwgMHgzYzAzMDAwMSwgCi0weDhjNjM1ZDk0LCAweDhlMDIwMDAwLCAweGFjNjIwMDAwLCAweDNjMDMwMDAxLCAKLTB4OGM2MzVkOTQsIDB4OGUwMjAwMDQsIDB4YWM2MjAwMDQsIDB4YWM3MTAwMDgsIAotMHg4Zjg0MDA1NCwgMHgyNDYyZmZlMCwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ5NCwgCi0weDQ1MTAyYiwgMHhhYzcyMDAxMCwgMHhhYzczMDAxNCwgMHhhYzc0MDAxOCwgCi0weGFjNzUwMDFjLCAweDEwNDAwMDA1LCAweGFjNjQwMDBjLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVkOTAsIDB4M2MwMTAwMDEsIDB4YWMyMjVkOTQsIDB4M2MwMzAwMDEsIAotMHg4YzYzNWQ5NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWM0MCwgMHhhYzYyMDAwMCwgCi0weDNjMDMwMDAxLCAweDhjNjM1ZDk0LCAweDNjMDIwMDAxLCAweDhjNDI1YzQwLCAKLTB4YWM2MjAwMDQsIDB4YWY0MzAyNTAsIDB4OGZiZjAwMjgsIDB4OGZiNTAwMjQsIAotMHg4ZmI0MDAyMCwgMHg4ZmIzMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwgCi0weDhmYjAwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMzAsIDB4MTBhMDAwMDUsIAotMHgwLCAweGFjODAwMDAwLCAweDI0YTVmZmZjLCAweDE0YTBmZmZkLCAKLTB4MjQ4NDAwMDQsIDB4M2UwMDAwOCwgMHgwLCAweDEwYzAwMDA3LCAKLTB4MCwgMHg4YzgyMDAwMCwgMHgyNDg0MDAwNCwgMHgyNGM2ZmZmYywgCi0weGFjYTIwMDAwLCAweDE0YzBmZmZiLCAweDI0YTUwMDA0LCAweDNlMDAwMDgsIAotMHgwLCAweDEwYzAwMDA3LCAweDAsIDB4OGNhMjAwMDAsIAotMHgyNGE1MDAwNCwgMHgyNGM2ZmZmYywgMHhhYzgyMDAwMCwgMHgxNGMwZmZmYiwgCi0weDI0ODQwMDA0LCAweDNlMDAwMDgsIDB4MCwgMHgzZTAwMDA4LCAKLTB4MCwgMHgyN2JkZmZkOCwgMHhhZmJmMDAyMCwgMHg4ZWUzMDRlNCwgCi0weDhlZTIwNGUwLCAweDEwNjIwNDM2LCAweDAsIDB4OGVlMjA0ZTQsIAotMHg4ZWUzMDRmYywgMHgyMTEwMCwgMHg2MjYwMjEsIDB4OTU4NzAwMDgsIAotMHg4ZDhhMDAwMCwgMHg4ZDhiMDAwNCwgMHg5NThkMDAwYSwgMHg4ZWUyNzI1YywgCi0weDhlZTM3MjZjLCAweDMwZTRmZmZmLCAweDQ0MTAyMSwgMHg2MjE4MmIsIAotMHgxMDYwMDAxNSwgMHgzMWEyMDAwNCwgMHg4ZjgyMDBkOCwgMHg4ZWUzNzI1OCwgCi0weDQzMTAyMywgMHhhZWUyNzI2YywgMHg4ZWUyNzI2YywgMHgxYzQwMDAwMywgCi0weDNjMDMwMDAxLCAweDQzMTAyMSwgMHhhZWUyNzI2YywgMHg4ZWUyNzI1YywgCi0weDhlZTM3MjZjLCAweDQ0MTAyMSwgMHg2MjE4MmIsIDB4MTA2MDAwMDYsIAotMHgzMWEyMDAwNCwgMHg4ZWUyMDFiOCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFiOCwgCi0weDgwMDI4ZTEsIDB4OGVlMjAxYjgsIDB4MTA0MDAyNDAsIDB4MzFhMjAyMDAsIAotMHgxMDQwMDE0ZCwgMHg0ODIxLCAweDk2ZTIwNDVhLCAweDMwNDIwMDEwLCAKLTB4MTA0MDAxNDksIDB4MCwgMHg4Zjg0MDEwMCwgMHgyNzYyMzAwMCwgCi0weDI0ODUwMDIwLCAweGEyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY1MjgwMCwgCi0weDhmODIwMTA4LCAweDEwYTIwMDA0LCAweDAsIDB4OGY4MjAxMDQsIAotMHgxNGEyMDAwNiwgMHgyNDAyMDAwYywgMHg4ZWUyMDFhOCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMWE4LCAweDgwMDI1MmMsIDB4OGVlMjAxYTgsIDB4YWM4YTAwMDAsIAotMHhhYzhiMDAwNCwgMHg4ZWUzNzI2NCwgMHgyNDA2MDAwNSwgMHhhNDgyMDAwZSwgCi0weGFjODYwMDE4LCAweGFjODMwMDA4LCAweDhlZTIwNGU0LCAweGFjODIwMDFjLCAKLTB4OGVlMjA0YzgsIDB4YWM4MjAwMTAsIDB4YWY4NTAxMDAsIDB4OTJlMjA0ZWMsIAotMHgxNDQwMDAzNiwgMHgyNDA5MDAwMSwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgCi0weDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0NjAwMWYsIAotMHgwLCAweDhlZTM0ZTI4LCAweDhlZTI0ZTJjLCAweDEwNjIwMDFiLCAKLTB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIAotMHg4ZWUyNGUyYywgMHg4ZWU1NGUyOCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgCi0weDAsIDB4OGVlMjRlMmMsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIAotMHgwLCAweDgwMDI1MTYsIDB4MCwgMHgxNGEwMDAwNSwgCi0weDAsIDB4OGY4MjAxMDgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIAotMHg4ZjgyMDEwOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgCi0weGFjODAwMDAwLCAweDgwMDI1MmMsIDB4MCwgMHg4ZWUyNGUyOCwgCi0weDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIAotMHg4ZWUyNGUyOCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUyOCwgMHg4ZWUyNGUyOCwgCi0weDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDUsIAotMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNTIwMDAwYSwgCi0weDNjMDQwMDAxLCAweGFmYWIwMDEwLCAweDhlZTI3MjY0LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDU3MzAsIDB4M2MwNTAwMDQsIDB4YWZhMjAwMTQsIDB4OGVlNjA0ZTQsIAotMHg4MDAyOGJlLCAweDM0YTVmMTE0LCAweDhlZTI3MjY0LCAweDM0ODQzODAwLCAKLTB4MzY0MTgyMSwgMHgyNDQyMDAxMCwgMHg0MzEwMmIsIDB4MTQ0MDAwNzMsIAotMHgwLCAweDhlZTI3MjY0LCAweDI0NDgwMDEwLCAweDM2NDEwMjEsIAotMHgxMDIxMDJiLCAweDE0NDAwMDAyLCAweDNjMDJmZmZmLCAweDEwMjQwMjEsIAotMHg4Zjg1MDEwMCwgMHgyNzYyMzAwMCwgMHgyNGE2MDAyMCwgMHhjMjEwMmIsIAotMHg1MDQwMDAwMSwgMHgyNzY2MjgwMCwgMHg4ZjgyMDEwOCwgMHgxMGMyMDAwNCwgCi0weDAsIDB4OGY4MjAxMDQsIDB4MTRjMjAwMDcsIDB4MjU2MzAwMGMsIAotMHg4ZWUyMDFhOCwgMHg0ODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE4LCAKLTB4ODAwMjVhMCwgMHg4ZWUyMDFhOCwgMHgyYzY0MDAwYywgMHgxNDQxMDIxLCAKLTB4YWNhMjAwMDAsIDB4YWNhMzAwMDQsIDB4MjRlMmZmZjQsIDB4YTRhMjAwMGUsIAotMHgyNDAyMDAwNiwgMHhhY2E4MDAwOCwgMHhhY2EyMDAxOCwgMHg4ZWUyMDRlNCwgCi0weGFjYTIwMDFjLCAweDhlZTIwNGM4LCAweDNjMDMwMDAyLCAweDQzMTAyNSwgCi0weGFjYTIwMDEwLCAweGFmODYwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM3LCAKLTB4MjQwOTAwMDEsIDB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIAotMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA1LCAweDE0NjIwMDFmLCAKLTB4MCwgMHg4ZWUzNGUyOCwgMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwgCi0weDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAKLTB4OGVlMjRlMmMsIDB4OGVlNTRlMjgsIDB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIAotMHgwLCAweDhlZTI0ZTJjLCAweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAKLTB4MCwgMHg4MDAyNThhLCAweDAsIDB4MTRhMDAwMDUsIAotMHgwLCAweDhmODIwMTA4LCAweDI0NDIwMDIwLCAweGFmODIwMTA4LCAKLTB4OGY4MjAxMDgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIAotMHhhYzgwMDAwMCwgMHg4MDAyNWEwLCAweDAsIDB4OGVlMjRlMjgsIAotMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgMHgxMDIxLCAKLTB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIAotMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAKLTB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4MTUyMDAwMGEsIAotMHgyNTA4ZmZmYywgMHhhZmFiMDAxMCwgMHg4ZWUyNzI2NCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1NzMwLCAweDNjMDUwMDA0LCAweGFmYTIwMDE0LCAweDhlZTYwNGU0LCAKLTB4ODAwMjhiZSwgMHgzNGE1ZjEyNSwgMHgzNDAyODEwMCwgMHhhNTAyMDAwMCwgCi0weDk1ODIwMDBlLCAweDgwMDI2MWQsIDB4YTUwMjAwMDIsIDB4OGY4NTAxMDAsIAotMHgyNzYyMzAwMCwgMHgyNGE2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIAotMHgyNzY2MjgwMCwgMHg4ZjgyMDEwOCwgMHgxMGMyMDAwNCwgMHgwLCAKLTB4OGY4MjAxMDQsIDB4MTRjMjAwMDcsIDB4MjU2MzAwMGMsIDB4OGVlMjAxYTgsIAotMHg0ODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDI2MGQsIAotMHg4ZWUyMDFhOCwgMHgyYzY0MDAwYywgMHgxNDQxMDIxLCAweGFjYTIwMDAwLCAKLTB4YWNhMzAwMDQsIDB4OGVlMzcyNjQsIDB4MjRlMmZmZjQsIDB4YTRhMjAwMGUsIAotMHgyNDAyMDAwNiwgMHhhY2EyMDAxOCwgMHgyNDYzMDAxMCwgMHhhY2EzMDAwOCwgCi0weDhlZTIwNGU0LCAweGFjYTIwMDFjLCAweDhlZTIwNGM4LCAweDNjMDMwMDAyLCAKLTB4NDMxMDI1LCAweGFjYTIwMDEwLCAweGFmODYwMTAwLCAweDkyZTIwNGVjLCAKLTB4MTQ0MDAwMzcsIDB4MjQwOTAwMDEsIDB4OGVlMjRlMjgsIDB4MjEwYzAsIAotMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA1LCAKLTB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUyOCwgMHg4ZWUyNGUyYywgCi0weDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4OGVlMjRlMmMsIDB4OGVlNTRlMjgsIDB4MjQ0MjAwMDEsIAotMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTJjLCAweDI0NDIwMDAxLCAKLTB4MTBhMjAwMDUsIDB4MCwgMHg4MDAyNWY3LCAweDAsIAotMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTA4LCAweDI0NDIwMDIwLCAKLTB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIAotMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyNjBkLCAweDAsIAotMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIAotMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAKLTB4MjQwMjAwMDUsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIAotMHgxNTIwMDAwYSwgMHgzNDAyODEwMCwgMHhhZmFiMDAxMCwgMHg4ZWUyNzI2NCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1NzMwLCAweDNjMDUwMDA0LCAweGFmYTIwMDE0LCAKLTB4OGVlNjA0ZTQsIDB4ODAwMjhiZSwgMHgzNGE1ZjAxNSwgMHg4ZWUzNzI2NCwgCi0weGE0NjIwMDBjLCAweDhlZTM3MjY0LCAweDk1ODIwMDBlLCAweGE0NjIwMDBlLCAKLTB4ODAwMjY4MSwgMHgyNGU3MDAwNCwgMHg4Zjg0MDEwMCwgMHgyNzYyMzAwMCwgCi0weDI0ODUwMDIwLCAweGEyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY1MjgwMCwgCi0weDhmODIwMTA4LCAweDEwYTIwMDA0LCAweDAsIDB4OGY4MjAxMDQsIAotMHgxNGEyMDAwNywgMHgyNDAyMDAwNiwgMHg4ZWUyMDFhOCwgMHg0ODIxLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIDB4ODAwMjY3NywgMHg4ZWUyMDFhOCwgCi0weGFjOGEwMDAwLCAweGFjOGIwMDA0LCAweDhlZTM3MjY0LCAweGE0ODcwMDBlLCAKLTB4YWM4MjAwMTgsIDB4YWM4MzAwMDgsIDB4OGVlMjA0ZTQsIDB4YWM4MjAwMWMsIAotMHg4ZWUyMDRjOCwgMHgzYzAzMDAwMiwgMHg0MzEwMjUsIDB4YWM4MjAwMTAsIAotMHhhZjg1MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDAzNywgMHgyNDA5MDAwMSwgCi0weDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsIAotMHg4YzgzMDAwMCwgMHgyNDAyMDAwNSwgMHgxNDYyMDAxZiwgMHgwLCAKLTB4OGVlMzRlMjgsIDB4OGVlMjRlMmMsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsIAotMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUyYywgCi0weDhlZTU0ZTI4LCAweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsIAotMHg4ZWUyNGUyYywgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLCAKLTB4ODAwMjY2MSwgMHgwLCAweDE0YTAwMDA1LCAweDAsIAotMHg4ZjgyMDEwOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwgCi0weDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLCAKLTB4ODAwMjY3NywgMHgwLCAweDhlZTI0ZTI4LCAweDI0MDMwMDQwLCAKLTB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwgCi0weDI0NDIwMDAxLCAweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAKLTB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAwNSwgMHhhYzgyMDAwMCwgCi0weDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDE1MjAwMDA5LCAweDNjMDUwMDA0LCAKLTB4YWZhYjAwMTAsIDB4OGVlMjcyNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU3MzAsIAotMHhhZmEyMDAxNCwgMHg4ZWU2MDRlNCwgMHg4MDAyOGJlLCAweDM0YTVmMDA0LCAKLTB4OGVlMjcyNWMsIDB4MzBlN2ZmZmYsIDB4NDcxMDIxLCAweGFlZTI3MjVjLCAKLTB4OGVlMjA0ZTQsIDB4OGVlMzA0ZmMsIDB4OGVlNDcyNTgsIDB4MjExMDAsIAotMHg0MzEwMjEsIDB4YWM0NDAwMGMsIDB4OGVlMjcyNTgsIDB4YWZhMjAwMTgsIAotMHg4ZWUzNzI1YywgMHhhZmEzMDAxYywgMHg4ZWUyNzI1YywgMHgyYzQyMDAzYywgCi0weDEwNDAwMDA0LCAweDI0NjIwMDAxLCAweDI0MDNmZmZlLCAweDQzMTAyNCwgCi0weGFmYTIwMDFjLCAweDhlZTI3MjY0LCAweDNjMDYwMDAxLCAweDM0YzYzODAwLCAKLTB4OGVlMzcyNWMsIDB4MjQwNWZmZjgsIDB4NDcxMDIxLCAweDI0NDIwMDA3LCAKLTB4NDUxMDI0LCAweDI0NjMwMDA3LCAweGFlZTI3MjU4LCAweDhlZTI3MjZjLCAKLTB4OGVlNDcyNTgsIDB4NjUxODI0LCAweDQzMTAyMywgMHhhZWUyNzI2YywgCi0weDM2NjEwMjEsIDB4ODIyMDJiLCAweDE0ODAwMDA0LCAweDNjMDNmZmZmLCAKLTB4OGVlMjcyNTgsIDB4NDMxMDIxLCAweGFlZTI3MjU4LCAweDhlZTI3MjU4LCAKLTB4YWVlMjcyNjQsIDB4OGY4MjAwZjAsIDB4MjQ0NzAwMDgsIDB4Mjc2MjE4MDAsIAotMHhlMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NzEwMDAsIDB4OGY4MjAwZjQsIAotMHgxNGUyMDAwNywgMHgwLCAweDhlZTIwMWI0LCAweDQ4MjEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFiNCwgMHg4MDAyNmM0LCAweDhlZTIwMWI0LCAKLTB4OGY4MjAwZjAsIDB4MjQwOTAwMDEsIDB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsIAotMHhhYzQzMDAwMCwgMHhhYzQ0MDAwNCwgMHhhZjg3MDBmMCwgMHgxNTIwMDAxMiwgCi0weGQxMTQyLCAweDhmODIwMGYwLCAweGFmYTIwMDEwLCAweDhmODIwMGY0LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDU3M2MsIDB4YWZhMjAwMTQsIDB4OGZhNjAwMTgsIAotMHg4ZmE3MDAxYywgMHgzYzA1MDAwNCwgMHhjMDAyNDAzLCAweDM0YTVmMDA1LCAKLTB4OGVlMjAwODgsIDB4MjQ0MjAwMDEsIDB4YWVlMjAwODgsIDB4OGVlMjAwODgsIAotMHg4MDAyOGQzLCAweGFlZTA3MjVjLCAweDMwNDMwMDAzLCAweDI0MDIwMDAyLCAKLTB4MTA2MjAwMTYsIDB4Mjg2MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDEsIAotMHgxMDYyMDAwOCwgMHgwLCAweDgwMDI3MDMsIDB4MCwgCi0weDI0MDIwMDAzLCAweDEwNjIwMDE3LCAweDAsIDB4ODAwMjcwMywgCi0weDAsIDB4OGVlMjAwZTgsIDB4OGVlMzAwZWMsIDB4MjQ2MzAwMDEsIAotMHgyYzY0MDAwMSwgMHg0NDEwMjEsIDB4YWVlMjAwZTgsIDB4YWVlMzAwZWMsIAotMHg4ZWUyMDBlOCwgMHg4MDAyNzAzLCAweDhlZTMwMGVjLCAweDhlZTIwMGYwLCAKLTB4OGVlMzAwZjQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAKLTB4YWVlMjAwZjAsIDB4YWVlMzAwZjQsIDB4OGVlMjAwZjAsIDB4ODAwMjcwMywgCi0weDhlZTMwMGY0LCAweDhlZTIwMGY4LCAweDhlZTMwMGZjLCAweDI0NjMwMDAxLCAKLTB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGY4LCAweGFlZTMwMGZjLCAKLTB4OGVlMjAwZjgsIDB4OGVlMzAwZmMsIDB4OGVlMjcyNWMsIDB4OGVlNDAwZTAsIAotMHg4ZWU1MDBlNCwgMHg0MDE4MjEsIDB4MTAyMSwgMHhhMzI4MjEsIAotMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgMHhhZWU0MDBlMCwgCi0weGFlZTUwMGU0LCAweDgwMDI4ZDMsIDB4YWVlMDcyNWMsIDB4MzBlMmZmZmYsIAotMHgxMDQwMDFjMSwgMHgzMWEyMDIwMCwgMHgxMDQwMDE0ZCwgMHg0ODIxLCAKLTB4OTZlMjA0NWEsIDB4MzA0MjAwMTAsIDB4MTA0MDAxNDksIDB4MCwgCi0weDhmODQwMTAwLCAweDI3NjIzMDAwLCAweDI0ODUwMDIwLCAweGEyMTAyYiwgCi0weDUwNDAwMDAxLCAweDI3NjUyODAwLCAweDhmODIwMTA4LCAweDEwYTIwMDA0LCAKLTB4MCwgMHg4ZjgyMDEwNCwgMHgxNGEyMDAwNiwgMHgyNDAyMDAwYywgCi0weDhlZTIwMWE4LCAweDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDI3NmUsIAotMHg4ZWUyMDFhOCwgMHhhYzhhMDAwMCwgMHhhYzhiMDAwNCwgMHg4ZWUzNzI2NCwgCi0weDI0MDYwMDA1LCAweGE0ODIwMDBlLCAweGFjODYwMDE4LCAweGFjODMwMDA4LCAKLTB4OGVlMjA0ZTQsIDB4YWM4MjAwMWMsIDB4OGVlMjA0YzgsIDB4YWM4MjAwMTAsIAotMHhhZjg1MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDAzNiwgMHgyNDA5MDAwMSwgCi0weDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsIAotMHg4YzgyMDAwMCwgMHgxNDQ2MDAxZiwgMHgwLCAweDhlZTM0ZTI4LCAKLTB4OGVlMjRlMmMsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIAotMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUyYywgMHg4ZWU1NGUyOCwgCi0weDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMmMsIAotMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLCAweDgwMDI3NTgsIAotMHgwLCAweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMDgsIAotMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwgMHg4YzgyMDAwNCwgCi0weDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLCAweDgwMDI3NmUsIAotMHgwLCAweDhlZTI0ZTI4LCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAKLTB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwgMHgyNDQyMDAwMSwgCi0weGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAKLTB4MmUyMjAyMSwgMHgyNDAyMDAwNSwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgCi0weGFjODIwMDA0LCAweDE1MjAwMDBhLCAweDNjMDQwMDAxLCAweGFmYWIwMDEwLCAKLTB4OGVlMjcyNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU3MzAsIDB4M2MwNTAwMDQsIAotMHhhZmEyMDAxNCwgMHg4ZWU2MDRlNCwgMHg4MDAyOGJlLCAweDM0YTVmMDE0LCAKLTB4OGVlMjcyNjQsIDB4MzQ4NDM4MDAsIDB4MzY0MTgyMSwgMHgyNDQyMDAxMCwgCi0weDQzMTAyYiwgMHgxNDQwMDA3MywgMHgwLCAweDhlZTI3MjY0LCAKLTB4MjQ0ODAwMTAsIDB4MzY0MTAyMSwgMHgxMDIxMDJiLCAweDE0NDAwMDAyLCAKLTB4M2MwMmZmZmYsIDB4MTAyNDAyMSwgMHg4Zjg1MDEwMCwgMHgyNzYyMzAwMCwgCi0weDI0YTYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MjgwMCwgCi0weDhmODIwMTA4LCAweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMDQsIAotMHgxNGMyMDAwNywgMHgyNTYzMDAwYywgMHg4ZWUyMDFhOCwgMHg0ODIxLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIDB4ODAwMjdlMiwgMHg4ZWUyMDFhOCwgCi0weDJjNjQwMDBjLCAweDE0NDEwMjEsIDB4YWNhMjAwMDAsIDB4YWNhMzAwMDQsIAotMHgyNGUyZmZmNCwgMHhhNGEyMDAwZSwgMHgyNDAyMDAwNiwgMHhhY2E4MDAwOCwgCi0weGFjYTIwMDE4LCAweDhlZTIwNGU0LCAweGFjYTIwMDFjLCAweDhlZTIwNGM4LCAKLTB4M2MwMzAwMDIsIDB4NDMxMDI1LCAweGFjYTIwMDEwLCAweGFmODYwMTAwLCAKLTB4OTJlMjA0ZWMsIDB4MTQ0MDAwMzcsIDB4MjQwOTAwMDEsIDB4OGVlMjRlMjgsIAotMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAKLTB4MjQwMjAwMDUsIDB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUyOCwgCi0weDhlZTI0ZTJjLCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMmMsIDB4OGVlNTRlMjgsIAotMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTJjLCAKLTB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAyN2NjLCAKLTB4MCwgMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTA4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyN2UyLCAKLTB4MCwgMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgCi0weDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIAotMHhhZWUyNGUyOCwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgCi0weDJlMjIwMjEsIDB4MjQwMjAwMDUsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIAotMHhhYzgyMDAwNCwgMHgxNTIwMDAwYSwgMHgyNTA4ZmZmYywgMHhhZmFiMDAxMCwgCi0weDhlZTI3MjY0LCAweDNjMDQwMDAxLCAweDI0ODQ1NzMwLCAweDNjMDUwMDA0LCAKLTB4YWZhMjAwMTQsIDB4OGVlNjA0ZTQsIDB4ODAwMjhiZSwgMHgzNGE1ZjAxNSwgCi0weDM0MDI4MTAwLCAweGE1MDIwMDAwLCAweDk1ODIwMDBlLCAweDgwMDI4NWYsIAotMHhhNTAyMDAwMiwgMHg4Zjg1MDEwMCwgMHgyNzYyMzAwMCwgMHgyNGE2MDAyMCwgCi0weGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MjgwMCwgMHg4ZjgyMDEwOCwgCi0weDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMDQsIDB4MTRjMjAwMDcsIAotMHgyNTYzMDAwYywgMHg4ZWUyMDFhOCwgMHg0ODIxLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYTgsIDB4ODAwMjg0ZiwgMHg4ZWUyMDFhOCwgMHgyYzY0MDAwYywgCi0weDE0NDEwMjEsIDB4YWNhMjAwMDAsIDB4YWNhMzAwMDQsIDB4OGVlMzcyNjQsIAotMHgyNGUyZmZmNCwgMHhhNGEyMDAwZSwgMHgyNDAyMDAwNiwgMHhhY2EyMDAxOCwgCi0weDI0NjMwMDEwLCAweGFjYTMwMDA4LCAweDhlZTIwNGU0LCAweGFjYTIwMDFjLCAKLTB4OGVlMjA0YzgsIDB4M2MwMzAwMDIsIDB4NDMxMDI1LCAweGFjYTIwMDEwLCAKLTB4YWY4NjAxMDAsIDB4OTJlMjA0ZWMsIDB4MTQ0MDAwMzcsIDB4MjQwOTAwMDEsIAotMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAKLTB4OGM4MzAwMDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMWYsIDB4MCwgCi0weDhlZTM0ZTI4LCAweDhlZTI0ZTJjLCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAKLTB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMmMsIAotMHg4ZWU1NGUyOCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLCAKLTB4OGVlMjRlMmMsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgCi0weDgwMDI4MzksIDB4MCwgMHgxNGEwMDAwNSwgMHgwLCAKLTB4OGY4MjAxMDgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIAotMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgCi0weDgwMDI4NGYsIDB4MCwgMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwgCi0weDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsIAotMHgyNDQyMDAwMSwgMHhhZWUyNGUyOCwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgCi0weDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDUsIDB4YWM4MjAwMDAsIAotMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNTIwMDAwYSwgMHgzNDAyODEwMCwgCi0weGFmYWIwMDEwLCAweDhlZTI3MjY0LCAweDNjMDQwMDAxLCAweDI0ODQ1NzMwLCAKLTB4M2MwNTAwMDQsIDB4YWZhMjAwMTQsIDB4OGVlNjA0ZTQsIDB4ODAwMjhiZSwgCi0weDM0YTVmMDE2LCAweDhlZTM3MjY0LCAweGE0NjIwMDBjLCAweDhlZTM3MjY0LCAKLTB4OTU4MjAwMGUsIDB4YTQ2MjAwMGUsIDB4ODAwMjhjMiwgMHgyNGU3MDAwNCwgCi0weDhmODMwMTAwLCAweDI3NjIzMDAwLCAweDI0NjQwMDIwLCAweDgyMTAyYiwgCi0weDUwNDAwMDAxLCAweDI3NjQyODAwLCAweDhmODIwMTA4LCAweDEwODIwMDA0LCAKLTB4MCwgMHg4ZjgyMDEwNCwgMHgxNDgyMDAwNywgMHgyNDA1MDAwNSwgCi0weDhlZTIwMWE4LCAweDQ4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIAotMHg4MDAyOGI2LCAweDhlZTIwMWE4LCAweGFjNmEwMDAwLCAweGFjNmIwMDA0LCAKLTB4OGVlMjcyNjQsIDB4YTQ2NzAwMGUsIDB4YWM2NTAwMTgsIDB4YWM2MjAwMDgsIAotMHg4ZWUyMDRlNCwgMHhhYzYyMDAxYywgMHg4ZWUyMDRjOCwgMHhhYzYyMDAxMCwgCi0weGFmODQwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM2LCAweDI0MDkwMDAxLCAKLTB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgCi0weDhjODIwMDAwLCAweDE0NDUwMDFmLCAweDAsIDB4OGVlMzRlMjgsIAotMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTJjLCAweDhlZTU0ZTI4LCAKLTB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUyYywgCi0weDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMjhhMCwgCi0weDAsIDB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEwOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTA4LCAweDhmODIwMTA4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMjhiNiwgCi0weDAsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIAotMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTI4LCAweDI0NDIwMDAxLCAKLTB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIAotMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAweGFjODIwMDAwLCAweDI0MDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4MTUyMDAwMGIsIDB4M2MwNTAwMDQsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTc0OCwgMHhhZmFiMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDRlNCwgCi0weDM0YTVmMDE3LCAweGMwMDI0MDMsIDB4MzBlN2ZmZmYsIDB4ODAwMjhlMSwgCi0weDAsIDB4OGVlMjcyNjQsIDB4M2MwNTAwMDEsIDB4MzBlNGZmZmYsIAotMHg0NDEwMjEsIDB4YWVlMjcyNjQsIDB4OGVlMjcyNWMsIDB4OGVlMzcyNjQsIAotMHgzNGE1MzgwMCwgMHg0NDEwMjEsIDB4YWVlMjcyNWMsIDB4MzY1MTAyMSwgCi0weDYyMTgyYiwgMHgxNDYwMDAwNCwgMHgzYzAzZmZmZiwgMHg4ZWUyNzI2NCwgCi0weDQzMTAyMSwgMHhhZWUyNzI2NCwgMHg4ZWUzMDRlNCwgMHg5NmUyMDQ1OCwgCi0weDI0NjMwMDAxLCAweDI0NDJmZmZmLCAweDYyMTgyNCwgMHhhZWUzMDRlNCwgCi0weDhlZTMwNGU0LCAweDhlZTIwNGUwLCAweDE0NjIwMDA1LCAweDAsIAotMHg4ZjgyMDA2MCwgMHgyNDAzZmZmNywgMHg0MzEwMjQsIDB4YWY4MjAwNjAsIAotMHg4ZmJmMDAyMCwgMHgzZTAwMDA4LCAweDI3YmQwMDI4LCAweDI3YmRmZmUwLCAKLTB4YWZiZjAwMTgsIDB4OGVlMzA0ZTgsIDB4OGVlMjA0ZTAsIDB4MTA2MjAxODksIAotMHgwLCAweDhlZTIwNGU4LCAweDhlZTMwNGZjLCAweDIxMTAwLCAKLTB4NjIxODIxLCAweDk0NjcwMDA4LCAweDkyZTIwNGVkLCAweDhjNjgwMDAwLCAKLTB4OGM2OTAwMDQsIDB4MTA0MDAwMjMsIDB4OTQ2YTAwMGEsIDB4OGVlMjA0YzgsIAotMHgzNDQ2MDQwMCwgMHgzMTQyMDIwMCwgMHgxMDQwMDAxZiwgMHgwLCAKLTB4OTZlMjA0NWEsIDB4MzA0MjAwMTAsIDB4MTA0MDAwMWIsIDB4M2MwMjgwMDAsIAotMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjgzZDgsIDB4OGVlMjcyNjQsIAotMHg5NDY0MDAwZSwgMHgzYzA1MDAwMSwgMHgzNGE1MzgwMCwgMHgyNDQyMDAwNCwgCi0weGFlZTI3MjY0LCAweDhlZTM3MjY0LCAweDQyNDAwLCAweDM2NTEwMjEsIAotMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyNDgzZGMsIDB4NjIxODJiLCAKLTB4MTQ2MDAwMDUsIDB4MjRlNzAwMDQsIDB4OGVlMjcyNjQsIDB4M2MwM2ZmZmYsIAotMHg0MzEwMjEsIDB4YWVlMjcyNjQsIDB4OGVlMjcyNjQsIDB4ODAwMjkxNywgCi0weGFlZTI3MjU4LCAweDhlZTYwNGM4LCAweDhlZTI3MjZjLCAweDMwZTRmZmZmLCAKLTB4NDQxMDJhLCAweDEwNDAwMDE1LCAweDAsIDB4OGY4MjAwZDgsIAotMHg4ZWUzNzI1OCwgMHg0MzEwMjMsIDB4YWVlMjcyNmMsIDB4OGVlMjcyNmMsIAotMHgxYzQwMDAwNywgMHg0NDEwMmEsIDB4OGVlMjcyNmMsIDB4M2MwMzAwMDEsIAotMHg0MzEwMjEsIDB4YWVlMjcyNmMsIDB4OGVlMjcyNmMsIDB4NDQxMDJhLCAKLTB4MTA0MDAwMDYsIDB4MCwgMHg4ZWUyMDFiOCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMWI4LCAweDgwMDJhNzIsIDB4OGVlMjAxYjgsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OGM0MjgzZDgsIDB4NTQ0MDAwMDEsIDB4MjRlN2ZmZmMsIAotMHgzMTQyMDAwNCwgMHgxMDQwMDBiOSwgMHgzMGUyZmZmZiwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg4YzQyODNkOCwgMHgxMDQwMDAyZiwgMHg1MDIxLCAKLTB4OGY4NDAxMDAsIDB4Mjc2MjMwMDAsIDB4MjQ4NTAwMjAsIDB4YTIxMDJiLCAKLTB4NTA0MDAwMDEsIDB4Mjc2NTI4MDAsIDB4OGY4MjAxMDgsIDB4MTBhMjAwMzIsIAotMHgwLCAweDhmODIwMTA0LCAweDEwYTIwMDJmLCAweDI0MDIwMDE1LCAKLTB4YWM4ODAwMDAsIDB4YWM4OTAwMDQsIDB4OGVlMzcyNjQsIDB4YTQ4NzAwMGUsIAotMHhhYzgyMDAxOCwgMHhhYzgzMDAwOCwgMHg4ZWUyMDRlOCwgMHgzYzAzMDAwMSwgCi0weDc3MTgyMSwgMHg4YzYzODNkYywgMHhhYzg2MDAxMCwgMHg0MzEwMjUsIAotMHhhYzgyMDAxYywgMHhhZjg1MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDA2NiwgCi0weDI0MGEwMDAxLCAweDhlZTI0ZTI4LCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAKLTB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwgMHgyNDQyMDAwMSwgCi0weGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAKLTB4MmUyMTgyMSwgMHgyNDAyMDAxNSwgMHhhYzYyMDAwMCwgMHgyNDAyMDAwMSwgCi0weDgwMDI5YmYsIDB4YWM2MjAwMDQsIDB4OGY4NDAxMDAsIDB4Mjc2MjMwMDAsIAotMHgyNDg1MDAyMCwgMHhhMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NTI4MDAsIAotMHg4ZjgyMDEwOCwgMHgxMGEyMDAwNCwgMHgwLCAweDhmODIwMTA0LCAKLTB4MTRhMjAwMDYsIDB4MjQwMjAwMDYsIDB4OGVlMjAxYTgsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhOCwgMHg4MDAyOWJmLCAweDhlZTIwMWE4LCAweGFjODgwMDAwLCAKLTB4YWM4OTAwMDQsIDB4OGVlMzcyNjQsIDB4YTQ4NzAwMGUsIDB4YWM4MjAwMTgsIAotMHhhYzgzMDAwOCwgMHg4ZWUyMDRlOCwgMHhhYzg2MDAxMCwgMHhhYzgyMDAxYywgCi0weGFmODUwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM3LCAweDI0MGEwMDAxLCAKLTB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgCi0weDhjODMwMDAwLCAweDI0MDIwMDA1LCAweDE0NjIwMDFmLCAweDAsIAotMHg4ZWUzNGUyOCwgMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgCi0weDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTJjLCAKLTB4OGVlNTRlMjgsIDB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgCi0weDhlZTI0ZTJjLCAweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIAotMHg4MDAyOWE5LCAweDAsIDB4MTRhMDAwMDUsIDB4MCwgCi0weDhmODIwMTA4LCAweDI0NDIwMDIwLCAweGFmODIwMTA4LCAweDhmODIwMTA4LCAKLTB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIAotMHg4MDAyOWJmLCAweDAsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIAotMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTI4LCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIDB4MjEwYzAsIAotMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAweGFjODIwMDAwLCAKLTB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4MTU0MDAwMGEsIDB4MjQwMjAwMDEsIAotMHhhZmE5MDAxMCwgMHg4ZWUyNzI2NCwgMHgzYzA0MDAwMSwgMHgyNDg0NTczMCwgCi0weDNjMDUwMDA0LCAweGFmYTIwMDE0LCAweDhlZTYwNGU0LCAweDgwMDJhNGYsIAotMHgzNGE1ZjIwNCwgMHhhMmUyMDRlZCwgMHg4ZWUyMDRlOCwgMHg4ZWUzMDRmYywgCi0weDhlZTQ3MjU4LCAweDNjMDYwMDAxLCAweDM0YzYzODAwLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGFjMjA4M2Q4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgCi0weGFjMjA4M2RjLCAweDIxMTAwLCAweDQzMTAyMSwgMHhhYzQ0MDAwYywgCi0weDhlZTI3MjY0LCAweDI0MDVmZmY4LCAweDMwZTNmZmZmLCAweDQzMTAyMSwgCi0weDI0NDIwMDA3LCAweDQ1MTAyNCwgMHgyNDYzMDAwNywgMHhhZWUyNzI1OCwgCi0weDhlZTI3MjZjLCAweDhlZTQ3MjU4LCAweDY1MTgyNCwgMHg0MzEwMjMsIAotMHhhZWUyNzI2YywgMHgzNjYxMDIxLCAweDgyMjAyYiwgMHgxNDgwMDAwNCwgCi0weDNjMDNmZmZmLCAweDhlZTI3MjU4LCAweDQzMTAyMSwgMHhhZWUyNzI1OCwgCi0weDhlZTI3MjU4LCAweDgwMDJhNjQsIDB4YWVlMjcyNjQsIDB4MTA0MDAwNzMsIAotMHgwLCAweDhmODMwMTAwLCAweDI3NjIzMDAwLCAweDI0NjQwMDIwLCAKLTB4ODIxMDJiLCAweDE0NDAwMDAyLCAweDUwMjEsIDB4Mjc2NDI4MDAsIAotMHg4ZjgyMDEwOCwgMHgxMDgyMDAwNCwgMHgwLCAweDhmODIwMTA0LCAKLTB4MTQ4MjAwMDYsIDB4MjQwNTAwMDUsIDB4OGVlMjAxYTgsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhOCwgMHg4MDAyYTQ2LCAweDhlZTIwMWE4LCAweGFjNjgwMDAwLCAKLTB4YWM2OTAwMDQsIDB4OGVlMjcyNjQsIDB4YTQ2NzAwMGUsIDB4YWM2NTAwMTgsIAotMHhhYzYyMDAwOCwgMHg4ZWUyMDRlOCwgMHhhYzY2MDAxMCwgMHhhYzYyMDAxYywgCi0weGFmODQwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM2LCAweDI0MGEwMDAxLCAKLTB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgCi0weDhjODIwMDAwLCAweDE0NDUwMDFmLCAweDAsIDB4OGVlMzRlMjgsIAotMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTJjLCAweDhlZTU0ZTI4LCAKLTB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUyYywgCi0weDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMmEzMCwgCi0weDAsIDB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEwOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTA4LCAweDhmODIwMTA4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMmE0NiwgCi0weDAsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIAotMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTI4LCAweDI0NDIwMDAxLCAKLTB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIAotMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAweGFjODIwMDAwLCAweDI0MDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4MTU0MDAwMGMsIDB4MzBlNWZmZmYsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTc0OCwgMHgzYzA1MDAwNCwgMHhhZmE5MDAxMCwgMHhhZmEwMDAxNCwgCi0weDhlZTYwNGU0LCAweDM0YTVmMjM3LCAweGMwMDI0MDMsIDB4MzBlN2ZmZmYsIAotMHg4MDAyYTcyLCAweDAsIDB4OGVlMjcyNjQsIDB4NDUxMDIxLCAKLTB4YWVlMjcyNjQsIDB4OGVlMjcyNmMsIDB4OGVlMzcyNjQsIDB4M2MwNDAwMDEsIAotMHgzNDg0MzgwMCwgMHhhMmUwMDRlZCwgMHg0NTEwMjMsIDB4YWVlMjcyNmMsIAotMHgzNjQxMDIxLCAweDYyMTgyYiwgMHgxNDYwMDAwNCwgMHgzYzAzZmZmZiwgCi0weDhlZTI3MjY0LCAweDQzMTAyMSwgMHhhZWUyNzI2NCwgMHg4ZWUzMDRlOCwgCi0weDk2ZTIwNDU4LCAweDI0NjMwMDAxLCAweDI0NDJmZmZmLCAweDYyMTgyNCwgCi0weGFlZTMwNGU4LCAweDhlZTMwNGU4LCAweDhlZTIwNGUwLCAweDE0NjIwMDA1LCAKLTB4MCwgMHg4ZjgyMDA2MCwgMHgyNDAzZmZmNywgMHg0MzEwMjQsIAotMHhhZjgyMDA2MCwgMHg4ZmJmMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDIwLCAKLTB4MjdiZGZmZTAsIDB4YWZiZjAwMWMsIDB4YWZiMDAwMTgsIDB4OGY4MjAxMDAsIAotMHg4ZWUzNGUyYywgMHg4ZjgyMDEwNCwgMHg4Zjg1MDEwOCwgMHgyNDAyMDA0MCwgCi0weDI0NjMwMDAxLCAweDUwNjIwMDAzLCAweDEwMjEsIDB4OGVlMjRlMmMsIAotMHgyNDQyMDAwMSwgMHhhZWUyNGUyYywgMHg4ZWUyNGUyYywgMHg4ZWUzNGUyYywgCi0weDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4OGVlMjRlMjgsIAotMHg4Yzg3MDAwNCwgMHgxNDYyMDAwNywgMHhhMDMwMjEsIDB4OGY4MjAxMDgsIAotMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwgMHg4MDAyYWEyLCAKLTB4YWM4MDAwMDAsIDB4OGVlMjRlMmMsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIAotMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTJjLCAweDI0NDIwMDAxLCAKLTB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwNCwgCi0weDhmODMwMTA4LCAweDIxMTQwLCAweDYyMTgyMSwgMHhhZjgzMDEwOCwgCi0weGFjODAwMDAwLCAweDhjYzIwMDE4LCAweDI0NDNmZmZlLCAweDJjNjIwMDEzLCAKLTB4MTA0MDAwYzEsIDB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAKLTB4OGMyMjU3NzAsIDB4NDAwMDA4LCAweDAsIDB4OGVlMjA0ZjAsIAotMHg0NzEwMjEsIDB4YWVlMjA0ZjAsIDB4OGVlMjA0ZjAsIDB4OGY0MzAyM2MsIAotMHg0MzEwMmIsIDB4MTQ0MDAwYmUsIDB4MCwgMHg4ZWUzMDRlNCwgCi0weDhlZTIwNGY4LCAweDUwNjIwMGJhLCAweGEyZTAwNGY0LCAweDhmODMwMTIwLCAKLTB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLCAKLTB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgCi0weDhmODIwMTI0LCAweDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsIAotMHg4MDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDJiMTIsIAotMHg4ZWUyMDFhNCwgMHg4ZWUyMDRlNCwgMHhhYzYyMDAxYywgMHg4ZWU0MDRiMCwgCi0weDhlZTUwNGI0LCAweDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweDI0MDIwMDA4LCAKLTB4YTQ2MjAwMGUsIDB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsIDB4YWM2NDAwMDAsIAotMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgCi0weDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MTAwMDAxLCAweDhlZTI0ZTMwLCAKLTB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgCi0weDI0MDIwMDEyLCAweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIAotMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTU0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgCi0weDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMmFmYywgCi0weDAsIDB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMmIxMiwgCi0weDAsIDB4OGVlMjRlMzAsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIAotMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIAotMHgyZTIyMDIxLCAweDI0MDIwMDEyLCAweGFjODIwMDAwLCAweDI0MDIwMDAxLCAKLTB4YWM4MjAwMDQsIDB4NTYwMDAwMGIsIDB4MjQxMDAwMDEsIDB4OGVlMjA0ZTQsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTc1NCwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgCi0weDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIAotMHgzNGE1ZjAwNiwgMHgxNjAwMDAwMywgMHgyNDAyMDAwMSwgMHg4MDAyYjcxLCAKLTB4YTJlMjA0ZjQsIDB4OGVlMjAxNzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxNzAsIAotMHg4ZWUyMDE3MCwgMHg4ZWUyMDRlNCwgMHhhMmUwMDRmNCwgMHhhZWUwMDRmMCwgCi0weGFlZTIwNGY4LCAweDhmNDIwMjNjLCAweDUwNDAwMDQ1LCAweGFlZTA3Mjc0LCAKLTB4OGVlMjAxODQsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxODQsIDB4OGVlMjAxODQsIAotMHg4MDAyYjcxLCAweGFlZTA3Mjc0LCAweDhlZTIwNTA0LCAweDI0MDMwMDQwLCAKLTB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyMDUwNCwgCi0weDI0NDIwMDAxLCAweGFlZTIwNTA0LCAweDhlZTIwNTA0LCAweDhjYzMwMDE4LCAKLTB4MjEwODAsIDB4NTcxMDIxLCAweDhjNDQwNTA4LCAweDI0MDIwMDAzLCAKLTB4MTQ2MjAwMGYsIDB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg5MDQyODNiMSwgMHgxMDQwMDAxNCwgMHgwLCAweDhlZTIwMWQwLCAKLTB4OGVlMzUyNDAsIDB4NDQxMDIxLCAweGFlZTIwMWQwLCAweDhlZTIwMWQ4LCAKLTB4NjQxODIxLCAweDMwNjMwMGZmLCAweDgwMDJiNTksIDB4YWVlMzUyNDAsIAotMHg4ZWUyMDFjYywgMHg4ZWUzMGUxMCwgMHg0NDEwMjEsIDB4YWVlMjAxY2MsIAotMHg4ZWUyMDFkOCwgMHg2NDE4MjEsIDB4MzA2MzAxZmYsIDB4YWVlMzBlMTAsIAotMHg0NDEwMjEsIDB4YWVlMjAxZDgsIDB4OGVlMjAwMDAsIDB4MzQ0MjAwNDAsIAotMHg4MDAyYjcxLCAweGFlZTIwMDAwLCAweDhlZTIwMTRjLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGEwMjA4M2UwLCAweDI0NDIwMDAxLCAweGFlZTIwMTRjLCAKLTB4ODAwMmI3MSwgMHg4ZWUyMDE0YywgMHg5NGM3MDAwZSwgMHg4Y2MyMDAxYywgCi0weDNjMDQwMDAxLCAweDI0ODQ1NzYwLCAweGFmYTYwMDE0LCAweGFmYTIwMDEwLCAKLTB4OGNjNjAwMTgsIDB4M2MwNTAwMDgsIDB4YzAwMjQwMywgMHgzNGE1MDkxMCwgCi0weDhmYmYwMDFjLCAweDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIAotMHgyN2JkZmY5OCwgMHhhZmJmMDA2MCwgMHhhZmJlMDA1YywgMHhhZmI2MDA1OCwgCi0weGFmYjUwMDU0LCAweGFmYjQwMDUwLCAweGFmYjMwMDRjLCAweGFmYjIwMDQ4LCAKLTB4YWZiMTAwNDQsIDB4YWZiMDAwNDAsIDB4OGY4MzAxMDgsIDB4OGY4MjAxMDQsIAotMHhhZmEwMDAyNCwgMHgxMDYyMDNlNywgMHhhZmEwMDAyYywgMHgzYzFlMDAwMSwgCi0weDM3ZGUzODAwLCAweDNjMGJmZmZmLCAweDhmOTMwMTA4LCAweDhlNjIwMDE4LCAKLTB4OGY4MzAxMDQsIDB4MjQ0M2ZmZmUsIDB4MmM2MjAwMTQsIDB4MTA0MDAzY2YsIAotMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjU3YzAsIAotMHg0MDAwMDgsIDB4MCwgMHg5NjYzMDAwZSwgMHg4ZWUyNzI1YywgCi0weDhlZTQwNGYwLCAweDQzMTAyMSwgMHhhZWUyNzI1YywgMHg4ZTYzMDAxYywgCi0weDk2ZTIwNDU4LCAweDI0ODQwMDAxLCAweGFlZTQwNGYwLCAweDI0NjMwMDAxLCAKLTB4MjQ0MmZmZmYsIDB4NjIxODI0LCAweGFlZTMwNGU0LCAweDhmNDIwMjNjLCAKLTB4ODIyMDJiLCAweDE0ODAwM2I5LCAweDAsIDB4OGY4MzAxMjAsIAotMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIAotMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAKLTB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgCi0weDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMmJmZSwgCi0weDhlZTIwMWE0LCAweDhlZTIwNGU0LCAweGFjNjIwMDFjLCAweDhlZTQwNGIwLCAKLTB4OGVlNTA0YjQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIAotMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgCi0weGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAKLTB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIAotMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAKLTB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgCi0weDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MGMwMDQwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIAotMHgyNDQyMDAwMSwgMHgxMDRjMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAKLTB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAyYmU4LCAKLTB4MCwgMHgxNDYwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyYmZlLCAKLTB4MCwgMHg4ZWUyNGUzMCwgMHgyNDBjMDA0MCwgMHgyNDQyMDAwMSwgCi0weDUwNGMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4MjQwMjAwMTIsIDB4MjQwYzAwMDEsIDB4YWM4MjAwMDAsIAotMHhhYzhjMDAwNCwgMHg1NjAwMDAwZCwgMHgyNDEwMDAwMSwgMHg4ZWUyMDRlNCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1NzU0LCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLCAKLTB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4MzRhNWYwMDYsIAotMHhjMDAyNDAzLCAweGFmYWIwMDM4LCAweDhmYWIwMDM4LCAweDEyMDAwMzBhLCAKLTB4MjQwYzAwMDEsIDB4ODAwMmYxOSwgMHgwLCAweDk2NmMwMDFjLCAKLTB4YWZhYzAwMmMsIDB4OTY2MjAwMWUsIDB4M2MwYzgwMDAsIDB4YWZhYzAwMjQsIAotMHhhZTYyMDAxYywgMHg4ZTc1MDAxYywgMHg4ZWUyMDRmYywgMHg4ZWU0MDRmYywgCi0weDE1MTkwMCwgMHg2MjEwMjEsIDB4OGM1MjAwMGMsIDB4OTJlMjdiOTgsIAotMHg2NDE4MjEsIDB4OTQ3NjAwMGEsIDB4MTQ0MDAwMDMsIDB4MzJjMjAwMDIsIAotMHhhZWYyN2JhNCwgMHhhZWY1N2I5YywgMHgxMDQwMDA0YiwgMHg4MDIxLCAKLTB4OTZlMjA0NWEsIDB4MzA0MjAwMDIsIDB4MTA0MDAwNDcsIDB4MCwgCi0weDhlNjMwMDFjLCAweDhlZTIwNGZjLCAweDMyMTAwLCAweDgyMTAyMSwgCi0weDhjNDIwMDBjLCAweDM3ZTE4MjEsIDB4MjQ0MjAwMjIsIDB4NDMxMDJiLCAKLTB4MTQ0MDAwMGEsIDB4MjQwNTAwMTQsIDB4OGVlMjA0ZmMsIDB4ODIxMDIxLCAKLTB4OGM0NDAwMGMsIDB4YWZhYjAwMzgsIDB4YzAwMmY3NSwgMHgyNDg0MDAwZSwgCi0weDhmYWIwMDM4LCAweDgwMDJjNTIsIDB4MzA1MGZmZmYsIDB4OGVlMjA0ZmMsIAotMHg4MjEwMjEsIDB4OGM0MjAwMGMsIDB4OTQ1MDAwMGUsIDB4OTQ0MzAwMTAsIAotMHg5NDQ0MDAxMiwgMHg5NDQ1MDAxNCwgMHgyMDM4MDIxLCAweDIwNDgwMjEsIAotMHgyMDU4MDIxLCAweDk0NDMwMDE2LCAweDk0NDQwMDE4LCAweDk0NDUwMDFhLCAKLTB4MjAzODAyMSwgMHgyMDQ4MDIxLCAweDIwNTgwMjEsIDB4OTQ0MzAwMWMsIAotMHg5NDQ0MDAxZSwgMHg5NDQyMDAyMCwgMHgyMDM4MDIxLCAweDIwNDgwMjEsIAotMHgyMDI4MDIxLCAweDEwMWMwMiwgMHgzMjAyZmZmZiwgMHg2MjgwMjEsIAotMHg4ZTYzMDAxYywgMHg4ZWUyMDRmYywgMHgxMDI0MDIsIDB4MzI5MDAsIAotMHhhMjEwMjEsIDB4OGM0MzAwMGMsIDB4MzIwMmZmZmYsIDB4ODI4MDIxLCAKLTB4MzdlMTAyMSwgMHgyNDYzMDAxOCwgMHg2MjE4MmIsIDB4MTQ2MDAwMDksIAotMHgwLCAweDhlZTIwNGZjLCAweGEyMTAyMSwgMHg4YzQzMDAwYywgCi0weDEwMTAyNywgMHgzYzAxZmZmZiwgMHgyMzA4MjEsIDB4ODAwMmM2ZiwgCi0weGE0MjIwMDE4LCAweDhlZTIwNGZjLCAweGEyMTAyMSwgMHg4YzQzMDAwYywgCi0weDEwMTAyNywgMHhhNDYyMDAxOCwgMHg5NmUyMDQ1YSwgMHg4ODIxLCAKLTB4MzA0MjAwMDgsIDB4MTQ0MDAwNjMsIDB4YTAyMSwgMHg4ZTYzMDAxYywgCi0weDhlZTIwNGZjLCAweDMzMTAwLCAweGMyMTAyMSwgMHg4YzQyMDAwYywgCi0weDM3ZTE4MjEsIDB4MjQ0MjAwMjIsIDB4NDMxMDJiLCAweDE0NDAwMDM1LCAKLTB4MCwgMHg4ZWUyMDRmYywgMHhjMjEwMjEsIDB4OGM0MjAwMGMsIAotMHgyNDQ3MDAxMCwgMHgzN2UxMDIxLCAweGUyMTAyYiwgMHg1MDQwMDAwMSwgCi0weGViMzgyMSwgMHg4ZWUyMDRmYywgMHg5NGYxMDAwMCwgMHhjMjEwMjEsIAotMHg4YzQyMDAwYywgMHgyNDQ3MDAxNiwgMHgzN2UxMDIxLCAweGUyMTAyYiwgCi0weDE0NDAwMDAyLCAweDI2MzRmZmVjLCAweGViMzgyMSwgMHg4ZWUyMDRmYywgCi0weDkwZTMwMDAxLCAweGMyMTAyMSwgMHg4YzQyMDAwYywgMHgyNDQ3MDAxYSwgCi0weDM3ZTEwMjEsIDB4ZTIxMDJiLCAweDE0NDAwMDAyLCAweDI4Mzg4MjEsIAotMHhlYjM4MjEsIDB4OTRlMjAwMDAsIDB4MjRlNzAwMDIsIDB4MjIyODgyMSwgCi0weDM3ZTEwMjEsIDB4ZTIxMDJiLCAweDUwNDAwMDAxLCAweGViMzgyMSwgCi0weDk0ZTIwMDAwLCAweDI0ZTcwMDAyLCAweDIyMjg4MjEsIDB4MzdlMTAyMSwgCi0weGUyMTAyYiwgMHg1MDQwMDAwMSwgMHhlYjM4MjEsIDB4OTRlMjAwMDAsIAotMHgyNGU3MDAwMiwgMHgyMjI4ODIxLCAweDM3ZTEwMjEsIDB4ZTIxMDJiLCAKLTB4NTA0MDAwMDEsIDB4ZWIzODIxLCAweDk0ZTIwMDAwLCAweDgwMDJjZDAsIAotMHgyMjI4ODIxLCAweDhlZTIwNGZjLCAweGMyMTAyMSwgMHg4YzQzMDAwYywgCi0weDhlZTIwNGZjLCAweDk0NzEwMDEwLCAweDhlZTMwNGZjLCAweGMyMTAyMSwgCi0weDhjNDQwMDBjLCAweGMzMTgyMSwgMHg4YzYyMDAwYywgMHgyNjM0ZmZlYywgCi0weDkwODQwMDE3LCAweDhlZTMwNGZjLCAweDk0NDIwMDFhLCAweDI4NDg4MjEsIAotMHhjMzE4MjEsIDB4OGM2NTAwMGMsIDB4OGVlMzA0ZmMsIDB4MjIyODgyMSwgCi0weDhlZTIwNGZjLCAweGMzMTgyMSwgMHhjMjEwMjEsIDB4OGM0NDAwMGMsIAotMHg4YzYyMDAwYywgMHg5NGEzMDAxYywgMHg5NDg0MDAxZSwgMHg5NDQyMDAyMCwgCi0weDIyMzg4MjEsIDB4MjI0ODgyMSwgMHgyMjI4ODIxLCAweDExMWMwMiwgCi0weDMyMjJmZmZmLCAweDYyODgyMSwgMHgxMTFjMDIsIDB4MzIyMmZmZmYsIAotMHg2Mjg4MjEsIDB4MzJjMjAwMDEsIDB4MTA0MDAwYjIsIDB4MCwgCi0weDk2ZTIwNDVhLCAweDMwNDIwMDAxLCAweDEwNDAwMGFlLCAweDMyYzIwMDgwLCAKLTB4MTA0MDAwMDgsIDB4MCwgMHg5MmUyN2I5OCwgMHgxNDQwMDAwNSwgCi0weDAsIDB4MjQwYzAwMDEsIDB4YTJlYzdiOTgsIDB4YWVmNTdiOWMsIAotMHhhZWYyN2JhNCwgMHg4ZWUzMDRmYywgMHgxNTExMDAsIDB4NDMxMDIxLCAKLTB4OGM0NzAwMGMsIDB4MzdlMTgyMSwgMHgyNGUyMDAwZSwgMHg0MzEwMmIsIAotMHgxNDQwMDAwOCwgMHhlMDIwMjEsIDB4MjQwNTAwMGUsIDB4YzAwMmY3NSwgCi0weGFmYWIwMDM4LCAweDMwNDJmZmZmLCAweDhmYWIwMDM4LCAweDgwMDJkMDksIAotMHgyMDI4MDIxLCAweDk0ZTYwMDAwLCAweDI0ZTcwMDAyLCAweDk0ZTUwMDAwLCAKLTB4MjRlNzAwMDIsIDB4OTRlMzAwMDAsIDB4MjRlNzAwMDIsIDB4OTRlMjAwMDAsIAotMHgyNGU3MDAwMiwgMHg5NGU0MDAwMCwgMHgyNGU3MDAwMiwgMHgyMDY4MDIxLCAKLTB4MjA1ODAyMSwgMHgyMDM4MDIxLCAweDIwMjgwMjEsIDB4OTRlMjAwMDAsIAotMHg5NGUzMDAwMiwgMHgyMDQ4MDIxLCAweDIwMjgwMjEsIDB4MjAzODAyMSwgCi0weDEwMWMwMiwgMHgzMjAyZmZmZiwgMHg2MjgwMjEsIDB4MTAxYzAyLCAKLTB4MzIwMmZmZmYsIDB4OGVlNDdiOWMsIDB4NjI4MDIxLCAweDE0OTUwMDA0LCAKLTB4MzIwNWZmZmYsIDB4OTY2MjAwMTYsIDB4ODAwMmQxNywgMHg1MTIwMjEsIAotMHg5NjYyMDAxNiwgMHg1NDIwMjEsIDB4NDE0MDIsIDB4MzA4M2ZmZmYsIAotMHg0MzIwMjEsIDB4ODUyMDIzLCAweDQxNDAyLCAweDgyMjAyMSwgCi0weDMwODRmZmZmLCAweDUwODAwMDAxLCAweDM0MDRmZmZmLCAweDhlZTI3YmE0LCAKLTB4MjQ0MzAwMTcsIDB4MzdlMTAyMSwgMHg2MjEwMmIsIDB4NTA0MDAwMDEsIAotMHg2YjE4MjEsIDB4OTA2MzAwMDAsIDB4MjQwMjAwMTEsIDB4MTQ2MjAwMzEsIAotMHgyNDAyMDAwNiwgMHg4ZWUyN2JhNCwgMHgzN2UxODIxLCAweDI0NDIwMDI4LCAKLTB4NDMxMDJiLCAweDE0NDAwMDE4LCAweDAsIDB4OGVlMjdiOWMsIAotMHgxMmEyMDAwYSwgMHgzMmMyMDEwMCwgMHg4ZWUyN2JhNCwgMHgzYzAxZmZmZiwgCi0weDIyMDgyMSwgMHg5NDIyMDAyOCwgMHg4MjIwMjEsIDB4NDFjMDIsIAotMHgzMDgyZmZmZiwgMHg2MjIwMjEsIDB4MzJjMjAxMDAsIDB4MTQ0MDAwMDQsIAotMHg0MTAyNywgMHg5MmUyN2I5OCwgMHgxNDQwMDAwMiwgMHg0MTAyNywgCi0weDMwNDRmZmZmLCAweDhlZTI3YmE0LCAweDNjMDFmZmZmLCAweDIyMDgyMSwgCi0weDgwMDJkOGEsIDB4YTQyNDAwMjgsIDB4OGVlMjdiOWMsIDB4MTJhMjAwMDgsIAotMHgzMmMyMDEwMCwgMHg4ZWUyN2JhNCwgMHg5NDQyMDAyOCwgMHg4MjIwMjEsIAotMHg0MWMwMiwgMHgzMDgyZmZmZiwgMHg2MjIwMjEsIDB4MzJjMjAxMDAsIAotMHgxNDQwMDAwNCwgMHg0MTAyNywgMHg5MmUyN2I5OCwgMHgxNDQwMDAwMiwgCi0weDQxMDI3LCAweDMwNDRmZmZmLCAweDhlZTI3YmE0LCAweDgwMDJkOGEsIAotMHhhNDQ0MDAyOCwgMHgxNDYyMDAyZiwgMHgzN2UxODIxLCAweDhlZTI3YmE0LCAKLTB4MjQ0MjAwMzIsIDB4NDMxMDJiLCAweDE0NDAwMDE4LCAweDAsIAotMHg4ZWUyN2I5YywgMHgxMmEyMDAwYSwgMHgzMmMyMDEwMCwgMHg4ZWUyN2JhNCwgCi0weDNjMDFmZmZmLCAweDIyMDgyMSwgMHg5NDIyMDAzMiwgMHg4MjIwMjEsIAotMHg0MWMwMiwgMHgzMDgyZmZmZiwgMHg2MjIwMjEsIDB4MzJjMjAxMDAsIAotMHgxNDQwMDAwNCwgMHg0MTAyNywgMHg5MmUyN2I5OCwgMHgxNDQwMDAwMiwgCi0weDQxMDI3LCAweDMwNDRmZmZmLCAweDhlZTI3YmE0LCAweDNjMDFmZmZmLCAKLTB4MjIwODIxLCAweDgwMDJkOGEsIDB4YTQyNDAwMzIsIDB4OGVlMjdiOWMsIAotMHgxMmEyMDAwOCwgMHgzMmMyMDEwMCwgMHg4ZWUyN2JhNCwgMHg5NDQyMDAzMiwgCi0weDgyMjAyMSwgMHg0MWMwMiwgMHgzMDgyZmZmZiwgMHg2MjIwMjEsIAotMHgzMmMyMDEwMCwgMHgxNDQwMDAwNCwgMHg0MTAyNywgMHg5MmUyN2I5OCwgCi0weDE0NDAwMDAyLCAweDQxMDI3LCAweDMwNDRmZmZmLCAweDhlZTI3YmE0LCAKLTB4YTQ0NDAwMzIsIDB4OGZhYzAwMjQsIDB4MTE4MDAwMmMsIDB4MzdlMTgyMSwgCi0weDhlNDIwMDAwLCAweGFlNDJmZmZjLCAweDI2NDIwMDBhLCAweDQzMTAyYiwgCi0weDE0NDAwMDFiLCAweDM0MDM4MTAwLCAweDI2NDMwMDA0LCAweDM3ZTEwMjEsIAotMHg2MjEwMmIsIDB4MTQ0MDAwMDMsIDB4NjAyMDIxLCAweDZiMTgyMSwgCi0weDYwMjAyMSwgMHg4YzYyMDAwMCwgMHgyNDYzMDAwNCwgMHhhZTQyMDAwMCwgCi0weDM3ZTEwMjEsIDB4NjIxMDJiLCAweDUwNDAwMDAxLCAweDZiMTgyMSwgCi0weDhjNjIwMDAwLCAweGFjODIwMDAwLCAweDM0MDI4MTAwLCAweGE0NjIwMDAwLCAKLTB4MjQ2MzAwMDIsIDB4MzdlMTAyMSwgMHg2MjEwMmIsIDB4NTA0MDAwMDEsIAotMHg2YjE4MjEsIDB4OTdhYzAwMmUsIDB4ODAwMmRiNCwgMHhhNDZjMDAwMCwgCi0weDhlNDIwMDA0LCAweDhlNDQwMDA4LCAweGE2NDMwMDA4LCAweDk3YWMwMDJlLCAKLTB4YTY0YzAwMGEsIDB4YWU0MjAwMDAsIDB4YWU0NDAwMDQsIDB4OTY2MjAwMGUsIAotMHgyNjUyZmZmYywgMHgyNDQyMDAwNCwgMHhhNjYyMDAwZSwgMHg5NjYyMDAwZSwgCi0weDhlZTM3MjVjLCAweDYyMTgyMSwgMHhhZWUzNzI1YywgMHhhZmIyMDAxOCwgCi0weDhlZTM3MjVjLCAweGFmYTMwMDFjLCAweDhlZTI3MjVjLCAweDJjNDIwMDNjLCAKLTB4MTA0MDAwMDQsIDB4MjQ2MjAwMDEsIDB4MjQwM2ZmZmUsIDB4NDMxMDI0LCAKLTB4YWZhMjAwMWMsIDB4MzJjMjAwODAsIDB4MTA0MDAwMGMsIDB4MzJjMjAxMDAsIAotMHg4ZWUyN2JhOCwgMHgyNDQzMDAwMSwgMHgyMTBjMCwgMHg1NzEwMjEsIAotMHhhZWUzN2JhOCwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywgMHhhYzQzN2JhYywgCi0weGFjNDQ3YmIwLCAweDgwMDJlYTAsIDB4YWVlMDcyNWMsIDB4MTA0MDAwNzIsIAotMHgwLCAweDhlZTI3YmE4LCAweDI0NDMwMDAxLCAweDIxMGMwLCAKLTB4NTcxMDIxLCAweGFlZTM3YmE4LCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLCAKLTB4YWM0MzdiYWMsIDB4YWM0NDdiYjAsIDB4OGVlMjdiYTgsIDB4MTA0MDAwNjMsIAotMHg0ODIxLCAweDUwMjEsIDB4OGY4MjAwZjAsIDB4MjQ0ODAwMDgsIAotMHgyNzYyMTgwMCwgMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgxMDAwLCAKLTB4OGY4MjAwZjQsIDB4MTUwMjAwMDcsIDB4MCwgMHg4ZWUyMDFiNCwgCi0weDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYjQsIDB4ODAwMmRmYSwgCi0weDhlZTIwMWI0LCAweDhmODMwMGYwLCAweDI0MTAwMDAxLCAweDE1NzEwMjEsIAotMHg4YzQ0N2JhYywgMHg4YzQ1N2JiMCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgCi0weGFmODgwMGYwLCAweDE2MDAwMDA2LCAweDJlYTEwMjEsIDB4OGVlMjAwODgsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDA4OCwgMHg4MDAyZTNmLCAweDhlZTIwMDg4LCAKLTB4OGM0MjdiYjAsIDB4OGVlNDAwZTAsIDB4OGVlNTAwZTQsIDB4OGVlNjdiOWMsIAotMHg0MDE4MjEsIDB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzODJiLCAKLTB4ODIyMDIxLCAweDg3MjAyMSwgMHg4ZWUyMDRmYywgMHhjOTMwMjEsIAotMHg2MzEwMCwgMHhhZWU0MDBlMCwgMHhhZWU1MDBlNCwgMHhjMjMwMjEsIAotMHg5NGMyMDAwYSwgMHgyNDBjMDAwMiwgMHgyMTE0MiwgMHgzMDQzMDAwMywgCi0weDEwNmMwMDE2LCAweDI4NjIwMDAzLCAweDEwNDAwMDA1LCAweDI0MGMwMDAxLCAKLTB4MTA2YzAwMDgsIDB4MCwgMHg4MDAyZTNmLCAweDAsIAotMHgyNDBjMDAwMywgMHgxMDZjMDAxNywgMHgwLCAweDgwMDJlM2YsIAotMHgwLCAweDhlZTIwMGU4LCAweDhlZTMwMGVjLCAweDI0NjMwMDAxLCAKLTB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGU4LCAweGFlZTMwMGVjLCAKLTB4OGVlMjAwZTgsIDB4ODAwMmUzZiwgMHg4ZWUzMDBlYywgMHg4ZWUyMDBmMCwgCi0weDhlZTMwMGY0LCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAweDQ0MTAyMSwgCi0weGFlZTIwMGYwLCAweGFlZTMwMGY0LCAweDhlZTIwMGYwLCAweDgwMDJlM2YsIAotMHg4ZWUzMDBmNCwgMHg4ZWUyMDBmOCwgMHg4ZWUzMDBmYywgMHgyNDYzMDAwMSwgCi0weDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZWUyMDBmOCwgMHhhZWUzMDBmYywgCi0weDhlZTIwMGY4LCAweDhlZTMwMGZjLCAweDhlZTI3YmE4LCAweDI1MjkwMDAxLCAKLTB4MTIyMTAyYiwgMHgxNDQwZmZhMCwgMHgyNTRhMDAwOCwgMHhhMmUwN2I5OCwgCi0weDgwMDJlOWYsIDB4YWVlMDdiYTgsIDB4OGY4MjAwZjAsIDB4MjQ0NzAwMDgsIAotMHgyNzYyMTgwMCwgMHhlMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NzEwMDAsIAotMHg4ZjgyMDBmNCwgMHgxNGUyMDAwNywgMHgwLCAweDhlZTIwMWI0LCAKLTB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFiNCwgMHg4MDAyZTVkLCAKLTB4OGVlMjAxYjQsIDB4OGY4MjAwZjAsIDB4MjQxMDAwMDEsIDB4OGZhMzAwMTgsIAotMHg4ZmE0MDAxYywgMHhhYzQzMDAwMCwgMHhhYzQ0MDAwNCwgMHhhZjg3MDBmMCwgCi0weDE2MDAwMDA3LCAweDAsIDB4OGVlMjAwODgsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDA4OCwgMHg4ZWUyMDA4OCwgMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAKLTB4OGVlMjcyNWMsIDB4OGVlNDAwZTAsIDB4OGVlNTAwZTQsIDB4MjQwYzAwMDIsIAotMHg0MDE4MjEsIDB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAKLTB4ODIyMDIxLCAweDg2MjAyMSwgMHgxNjExNDIsIDB4MzA0MzAwMDMsIAotMHhhZWU0MDBlMCwgMHhhZWU1MDBlNCwgMHgxMDZjMDAxNywgMHgyYzYyMDAwMywgCi0weDEwNDAwMDA1LCAweDI0MGMwMDAxLCAweDEwNmMwMDA4LCAweDAsIAotMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAweDI0MGMwMDAzLCAweDEwNmMwMDE5LCAKLTB4MCwgMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAweDhlZTIwMGU4LCAKLTB4OGVlMzAwZWMsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAKLTB4YWVlMjAwZTgsIDB4YWVlMzAwZWMsIDB4OGVlMjAwZTgsIDB4OGVlMzAwZWMsIAotMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAweDhlZTIwMGYwLCAweDhlZTMwMGY0LCAKLTB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGYwLCAKLTB4YWVlMzAwZjQsIDB4OGVlMjAwZjAsIDB4OGVlMzAwZjQsIDB4ODAwMmVhMCwgCi0weGFlZTA3MjVjLCAweDhlZTIwMGY4LCAweDhlZTMwMGZjLCAweDI0NjMwMDAxLCAKLTB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGY4LCAweGFlZTMwMGZjLCAKLTB4OGVlMjAwZjgsIDB4OGVlMzAwZmMsIDB4YWVlMDcyNWMsIDB4OGU2MjAwMWMsIAotMHg5NmUzMDQ1OCwgMHg4ZWU0MDRmMCwgMHgyNDQyMDAwMSwgMHgyNDYzZmZmZiwgCi0weDQzMTAyNCwgMHgyNDg0MDAwMSwgMHhhZWUyMDRlNCwgMHhhZWU0MDRmMCwgCi0weDhmNDIwMjNjLCAweDgyMjAyYiwgMHgxNDgwMDBiMCwgMHgwLCAKLTB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAKLTB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIAotMHgwLCAweDhmODIwMTI0LCAweDE0YzIwMDA3LCAweDAsIAotMHg4ZWUyMDFhNCwgMHg4MDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAKLTB4ODAwMmYwNywgMHg4ZWUyMDFhNCwgMHg4ZWUyMDRlNCwgMHhhYzYyMDAxYywgCi0weDhlZTQwNGIwLCAweDhlZTUwNGI0LCAweDI0NjIwMDFjLCAweGFjNjIwMDA4LCAKLTB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsIDB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsIAotMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgCi0weGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MTAwMDAxLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDhjODMwMDAwLCAweDI0MDIwMDEyLCAweDE0NjIwMDFmLCAweDAsIAotMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDBjMDA0MCwgCi0weDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAKLTB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0YzAwMDcsIDB4MCwgCi0weDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIAotMHg4MDAyZWYxLCAweDAsIDB4MTQ2MDAwMDUsIDB4MCwgCi0weDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAKLTB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIAotMHg4MDAyZjA3LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQwYzAwNDAsIAotMHgyNDQyMDAwMSwgMHg1MDRjMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDEyLCAweDI0MGMwMDAxLCAKLTB4YWM4MjAwMDAsIDB4YWM4YzAwMDQsIDB4NTYwMDAwMGQsIDB4MjQxMDAwMDEsIAotMHg4ZWUyMDRlNCwgMHgzYzA0MDAwMSwgMHgyNDg0NTc1NCwgMHhhZmEwMDAxNCwgCi0weGFmYTIwMDEwLCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAKLTB4MzRhNWYwMDYsIDB4YzAwMjQwMywgMHhhZmFiMDAzOCwgMHg4ZmFiMDAzOCwgCi0weDE2MDAwMDAzLCAweDI0MGMwMDAxLCAweDgwMDJmNWMsIDB4YTJlYzA0ZjQsIAotMHg4ZWUyMDE3MCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE3MCwgMHg4ZWUyMDE3MCwgCi0weDhlZTIwNGU0LCAweGEyZTAwNGY0LCAweGFlZTAwNGYwLCAweGFlZTA3Mjc0LCAKLTB4YWVlMjA0ZjgsIDB4OGY0MjAyM2MsIDB4MTA0MDAwMzgsIDB4MCwgCi0weDhlZTIwMTg0LCAweDI0NDIwMDAxLCAweGFlZTIwMTg0LCAweDgwMDJmNWMsIAotMHg4ZWUyMDE4NCwgMHg4ZWUyMDUwNCwgMHgyNDBjMDA0MCwgMHgyNDQyMDAwMSwgCi0weDUwNGMwMDAzLCAweDEwMjEsIDB4OGVlMjA1MDQsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDUwNCwgMHg4ZWUyMDUwNCwgMHg4ZTYzMDAxOCwgMHgyNDBjMDAwMywgCi0weDIxMDgwLCAweDU3MTAyMSwgMHgxNDZjMDAwZiwgMHg4YzQ0MDUwOCwgCi0weDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMSwgMHgxMDQwMDAxNCwgCi0weDAsIDB4OGVlMjAxZDAsIDB4OGVlMzUyNDAsIDB4NDQxMDIxLCAKLTB4YWVlMjAxZDAsIDB4OGVlMjAxZDgsIDB4NjQxODIxLCAweDMwNjMwMGZmLCAKLTB4ODAwMmY0ZiwgMHhhZWUzNTI0MCwgMHg4ZWUyMDFjYywgMHg4ZWUzMGUxMCwgCi0weDQ0MTAyMSwgMHhhZWUyMDFjYywgMHg4ZWUyMDFkOCwgMHg2NDE4MjEsIAotMHgzMDYzMDFmZiwgMHhhZWUzMGUxMCwgMHg0NDEwMjEsIDB4YWVlMjAxZDgsIAotMHg4ZWUyMDAwMCwgMHgzNDQyMDA0MCwgMHg4MDAyZjVjLCAweGFlZTIwMDAwLCAKLTB4OGVlMjAxNGMsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2UwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxNGMsIDB4OGVlMjAxNGMsIDB4OGY4MjAxMDgsIAotMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwgMHg4ZjgyMDEwOCwgCi0weDI3NjMzMDAwLCAweDQzMTAyYiwgMHgxNDQwMDAwMiwgMHgyNzYyMjgwMCwgCi0weGFmODIwMTA4LCAweDhmODMwMTA4LCAweDhmODIwMTA0LCAweDE0NjJmYzFlLCAKLTB4MCwgMHg4ZmJmMDA2MCwgMHg4ZmJlMDA1YywgMHg4ZmI2MDA1OCwgCi0weDhmYjUwMDU0LCAweDhmYjQwMDUwLCAweDhmYjMwMDRjLCAweDhmYjIwMDQ4LCAKLTB4OGZiMTAwNDQsIDB4OGZiMDAwNDAsIDB4M2UwMDAwOCwgMHgyN2JkMDA2OCwgCi0weDUyODQzLCAweDEwYTAwMDBkLCAweDMwMjEsIDB4M2MwMzAwMDEsIAotMHgzNDYzMzgwMCwgMHgzYzA3ZmZmZiwgMHgzNjMxMDIxLCAweDgyMTAyYiwgCi0weDUwNDAwMDAxLCAweDg3MjAyMSwgMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgCi0weDI0YTVmZmZmLCAweDE0YTBmZmY4LCAweGMyMzAyMSwgMHg2MWMwMiwgCi0weDMwYzJmZmZmLCAweDYyMzAyMSwgMHg2MWMwMiwgMHgzMGMyZmZmZiwgCi0weDYyMzAyMSwgMHgzZTAwMDA4LCAweDMwYzJmZmZmLCAweDI3YmRmZjg4LCAKLTB4MjQwZjAwMDEsIDB4YWZiZjAwNzAsIDB4YWZiZTAwNmMsIDB4YWZiNjAwNjgsIAotMHhhZmI1MDA2NCwgMHhhZmI0MDA2MCwgMHhhZmIzMDA1YywgMHhhZmIyMDA1OCwgCi0weGFmYjEwMDU0LCAweGFmYjAwMDUwLCAweGEzYTAwMDI3LCAweGFmYWYwMDJjLCAKLTB4OGVlMjA0ZDQsIDB4ODAyMSwgMHgzMDQyMDAwMSwgMHgxNDQwMDAyYSwgCi0weGEzYTAwMDM3LCAweDhmODcwMGUwLCAweDhmODgwMGM0LCAweDhmODIwMGU4LCAKLTB4ZTIyMDIzLCAweDJjODIxMDAwLCAweDUwNDAwMDAxLCAweDI0ODQxMDAwLCAKLTB4NDIwYzIsIDB4ODAxODIxLCAweDhlZTQwMGM4LCAweDhlZTUwMGNjLCAKLTB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgCi0weDg2MjAyMSwgMHhhZWU0MDBjOCwgMHhhZWU1MDBjYywgMHg4ZjgzMDBjOCwgCi0weDNjMDIwMDBhLCAweDM0NDJlZmZmLCAweDEwMzIwMjMsIDB4NDQxMDJiLCAKLTB4MTA0MDAwMDMsIDB4M2MwMjAwMGEsIDB4MzQ0MmYwMDAsIDB4ODIyMDIxLCAKLTB4ODAxODIxLCAweDhlZTQwMGMwLCAweDhlZTUwMGM0LCAweDEwMjEsIAotMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgMHg4NjIwMjEsIAotMHhhZWU0MDBjMCwgMHhhZWU1MDBjNCwgMHhhZjg4MDBjOCwgMHhhZjg3MDBlNCwgCi0weDgwMDM0Y2MsIDB4YWY4NzAwZTgsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAKLTB4OTA0MjgzYzAsIDB4MTA0MDAwMGIsIDB4MCwgMHgzYzE0MDAwMSwgCi0weDI5N2EwMjEsIDB4OGU5NDgzYzQsIDB4M2MxMzAwMDEsIDB4Mjc3OTgyMSwgCi0weDhlNzM4M2M4LCAweDNjMTIwMDAxLCAweDI1NzkwMjEsIDB4ODAwMzE5MywgCi0weDhlNTI4M2NjLCAweDhmODMwMGUwLCAweDhmODIwMGU0LCAweDEwNDMwMDA3LCAKLTB4ODgyMSwgMHg4ZjgyMDBlNCwgMHgyNDExMDAwMSwgMHg4YzQzMDAwMCwgCi0weDhjNDQwMDA0LCAweGFmYTMwMDE4LCAweGFmYTQwMDFjLCAweDE2MjAwMDBlLCAKLTB4M2MwMmZmZmYsIDB4OGY4MjAwYzQsIDB4YWZhMjAwMTAsIDB4OGY4MjAwYzgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NTg3MCwgMHhhZmEyMDAxNCwgMHg4Zjg2MDBlMCwgCi0weDhmODcwMGU0LCAweDNjMDUwMDA2LCAweGMwMDI0MDMsIDB4MzRhNWYwMDAsIAotMHg4MDAzNGNjLCAweDAsIDB4OGZhMzAwMWMsIDB4OGZiMjAwMTgsIAotMHgzMDc0ZmZmZiwgMHgyNjk0ZmZmYywgMHg2MjEwMjQsIDB4MTA0MDAwNTgsIAotMHgyNDA5ODIxLCAweDNjMDIwMDgwLCAweDYyMTAyNCwgMHgxMDQwMDAwYSwgCi0weDNjMDQwMDQwLCAweDhlZTIwMDdjLCAweDI0NDIwMDAxLCAweGFlZTIwMDdjLCAKLTB4OGVlMjAwN2MsIDB4OGVlMjAxZmMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZmMsIAotMHg4MDAzNGM2LCAweDhlZTIwMWZjLCAweDNjMDYwMDA0LCAweDNjMGIwMDAxLCAKLTB4M2MwYTAwMDIsIDB4M2MwNTAwMTAsIDB4M2MwOTAwMDgsIDB4OGVlMjAwODAsIAotMHgzYzA4MDAyMCwgMHgzNDA3ODAwMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDA4MCwgCi0weDhlZTIwMDgwLCAweDhmYTIwMDFjLCAweDQ0MTgyNCwgMHgxMDY2MDAyMSwgCi0weGMzMTAyYiwgMHgxNDQwMDAwNywgMHgwLCAweDEwNmIwMDExLCAKLTB4MCwgMHgxMDZhMDAxNSwgMHgwLCAweDgwMDMwNDksIAotMHg0MjA0MiwgMHgxMDY1MDAyMywgMHhhMzEwMmIsIDB4MTQ0MDAwMDUsIAotMHgwLCAweDEwNjkwMDE5LCAweDAsIDB4ODAwMzA0OSwgCi0weDQyMDQyLCAweDEwNjgwMDIxLCAweDAsIDB4ODAwMzA0OSwgCi0weDQyMDQyLCAweDhlZTIwMDM0LCAweDI0NDIwMDAxLCAweGFlZTIwMDM0LCAKLTB4OGVlMjAwMzQsIDB4ODAwMzA0OSwgMHg0MjA0MiwgMHg4ZWUyMDFlYywgCi0weDI0NDIwMDAxLCAweGFlZTIwMWVjLCAweDhlZTIwMWVjLCAweDgwMDMwNDksIAotMHg0MjA0MiwgMHg4ZWUyMDFmMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFmMCwgCi0weDhlZTIwMWYwLCAweDgwMDMwNDksIDB4NDIwNDIsIDB4OGVlMjAxZjQsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFmNCwgMHg4ZWUyMDFmNCwgMHg4MDAzMDQ5LCAKLTB4NDIwNDIsIDB4OGVlMjAwMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAwMzAsIAotMHg4ZWUyMDAzMCwgMHg4MDAzMDQ5LCAweDQyMDQyLCAweDhlZTIwMWY4LCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxZjgsIDB4OGVlMjAxZjgsIDB4NDIwNDIsIAotMHgxMDg3MDQ3YywgMHgwLCAweDgwMDMwMGUsIDB4MCwgCi0weDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMiwgMHgxNDQwMDA4NCwgCi0weDI0MDIwMDAxLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgMHg5MDYzODNiMywgCi0weDE0NjIwMDdmLCAweDNjMDIwMTAwLCAweDhlNDMwMDAwLCAweDYyMTAyNCwgCi0weDEwNDAwMDZmLCAweDI0MDJmZmZmLCAweDE0NjIwMDA1LCAweDI0MTAwMDAxLCAKLTB4OTY0MzAwMDQsIDB4MzQwMmZmZmYsIDB4MTA2MjAwNzUsIDB4MCwgCi0weDkyZTIwNGQ4LCAweDE0NDAwMDcyLCAweDAsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4Mjg0MjAwMDUsIDB4MTA0MDAwMjAsIAotMHgzODIxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgCi0weDE4NDAwMDE2LCAweDI4MjEsIDB4OTY2NjAwMDAsIDB4NTIwYzAsIAotMHg5NzEwMjEsIDB4OTQ0Mjc3N2UsIDB4MTQ0NjAwMDksIDB4OTcxMDIxLCAKLTB4OTQ0Mzc3ODAsIDB4OTY2MjAwMDIsIDB4MTQ2MjAwMDUsIDB4OTcxMDIxLCAKLTB4OTQ0Mzc3ODIsIDB4OTY2MjAwMDQsIDB4NTA2MjAwMDgsIDB4MjQwNzAwMDEsIAotMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4MjRhNTAwMDEsIAotMHhhMjEwMmEsIDB4NTQ0MGZmZWUsIDB4NTIwYzAsIDB4MzBlMjAwZmYsIAotMHgxMDQwMDQ0MCwgMHgwLCAweDgwMDMwZDUsIDB4MCwgCi0weDI0MDIwMjEsIDB4YzAwMjJmZSwgMHgyNDA1MDAwNiwgMHgzMDQ0MDAxZiwgCi0weDQyOGMwLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjQwMDAsIAotMHgxNDQwMDQzNCwgMHhiNzEwMjEsIDB4OTQ0MzcyN2UsIDB4OTY2MjAwMDAsIAotMHgxNDYyMDAwYiwgMHg0MThjMCwgMHhiNzEwMjEsIDB4OTQ0MzcyODAsIAotMHg5NjYyMDAwMiwgMHgxNDYyMDAwNiwgMHg0MThjMCwgMHhiNzEwMjEsIAotMHg5NDQzNzI4MiwgMHg5NjYyMDAwNCwgMHgxMDYyMDAzNSwgMHg0MThjMCwgCi0weDJlMzEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjgwMDAsIDB4MTQ0MDA0MjEsIAotMHgyZTMxMDIxLCAweDk0NGI3MjdjLCAweDk2NjcwMDAwLCAweGIyOGMwLCAKLTB4YjcxMDIxLCAweDk0NDI3MzdlLCAweDgwMDMwYjcsIDB4MzAyMSwgCi0weDQyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MzczN2MsIDB4MmU0MTAyMSwgCi0weDk0NGI3MzdjLCAweDMwNjM4MDAwLCAweDE0NjAwMDEwLCAweGIyOGMwLCAKLTB4YjcxMDIxLCAweDk0NDI3MzdlLCAweDE0NDdmZmY1LCAweDE2MDIwMjEsIAotMHhiNzEwMjEsIDB4OTQ0MzczODAsIDB4OTY2MjAwMDIsIDB4NTQ2MmZmZjEsIAotMHg0MjBjMCwgMHhiNzEwMjEsIDB4OTQ0MzczODIsIDB4OTY2MjAwMDQsIAotMHg1NDYyZmZlYywgMHg0MjBjMCwgMHgyNDA2MDAwMSwgMHgzMGMyMDBmZiwgCi0weDEwNDAwNDAwLCAweDAsIDB4ODAwMzBkNSwgMHgwLCAKLTB4OTc0MzAyMDIsIDB4OTY0MjAwMDAsIDB4MTQ2MjAzZmEsIDB4MCwgCi0weDk3NDMwMjA0LCAweDk2NDIwMDAyLCAweDE0NjIwM2Y2LCAweDAsIAotMHg5NzQzMDIwNiwgMHg5NjQyMDAwNCwgMHgxNDYyMDNmMiwgMHgwLCAKLTB4OTI0MjAwMDAsIDB4M2EwMzAwMDEsIDB4MzA0MjAwMDEsIDB4NDMxMDI0LCAKLTB4MTA0MDAwNzQsIDB4MjQwMmZmZmYsIDB4OGU2MzAwMDAsIDB4MTQ2MjAwMDQsIAotMHgzNDAyZmZmZiwgMHg5NjYzMDAwNCwgMHgxMDYyMDA2ZiwgMHgyNDBmMDAwMiwgCi0weDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMiwgMHgxNDQwMDA2YSwgCi0weDI0MGYwMDAzLCAweDkyZTIwNGQ4LCAweDU0NDAwMDY4LCAweGFmYWYwMDJjLCAKLTB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LCAweDI4NDIwMDA1LCAKLTB4MTA0MDAwMjAsIDB4MzgyMSwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyODNiNCwgMHgxODQwMDAxNiwgMHgyODIxLCAweDk2NjYwMDAwLCAKLTB4NTIwYzAsIDB4OTcxMDIxLCAweDk0NDI3NzdlLCAweDE0NDYwMDA5LCAKLTB4OTcxMDIxLCAweDk0NDM3NzgwLCAweDk2NjIwMDAyLCAweDE0NjIwMDA1LCAKLTB4OTcxMDIxLCAweDk0NDM3NzgyLCAweDk2NjIwMDA0LCAweDUwNjIwMDA4LCAKLTB4MjQwNzAwMDEsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LCAKLTB4MjRhNTAwMDEsIDB4YTIxMDJhLCAweDU0NDBmZmVlLCAweDUyMGMwLCAKLTB4MzBlMjAwZmYsIDB4MTQ0MDAwNDQsIDB4MjQwZjAwMDMsIDB4ODAwMzRjNiwgCi0weDAsIDB4MjQwMjAyMSwgMHhjMDAyMmZlLCAweDI0MDUwMDA2LCAKLTB4MzA0NDAwMWYsIDB4NDI4YzAsIDB4MmU1MTAyMSwgMHg5NDQyNzI3YywgCi0weDMwNDI0MDAwLCAweDE0NDAwM2FmLCAweGI3MTAyMSwgMHg5NDQzNzI3ZSwgCi0weDk2NjIwMDAwLCAweDE0NjIwMDBiLCAweDQxOGMwLCAweGI3MTAyMSwgCi0weDk0NDM3MjgwLCAweDk2NjIwMDAyLCAweDE0NjIwMDA2LCAweDQxOGMwLCAKLTB4YjcxMDIxLCAweDk0NDM3MjgyLCAweDk2NjIwMDA0LCAweDEwNjIwMDI3LCAKLTB4NDE4YzAsIDB4MmUzMTAyMSwgMHg5NDQyNzI3YywgMHgzMDQyODAwMCwgCi0weDE0NDAwMzljLCAweDJlMzEwMjEsIDB4OTQ0YjcyN2MsIDB4OTY2NzAwMDAsIAotMHhiMjhjMCwgMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4ODAwMzEzYywgCi0weDMwMjEsIDB4NDIwYzAsIDB4MmU0MTAyMSwgMHg5NDQzNzM3YywgCi0weDJlNDEwMjEsIDB4OTQ0YjczN2MsIDB4MzA2MzgwMDAsIDB4MTQ2MDAwMTAsIAotMHhiMjhjMCwgMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4MTQ0N2ZmZjUsIAotMHgxNjAyMDIxLCAweGI3MTAyMSwgMHg5NDQzNzM4MCwgMHg5NjYyMDAwMiwgCi0weDU0NjJmZmYxLCAweDQyMGMwLCAweGI3MTAyMSwgMHg5NDQzNzM4MiwgCi0weDk2NjIwMDA0LCAweDU0NjJmZmVjLCAweDQyMGMwLCAweDI0MDYwMDAxLCAKLTB4MzBjMjAwZmYsIDB4MTA0MDAzN2IsIDB4MCwgMHg4MDAzMTRmLCAKLTB4MjQwZjAwMDMsIDB4MjQwZjAwMDEsIDB4YWZhZjAwMmMsIDB4OGY0MjAyNjAsIAotMHg1NDEwMmIsIDB4MTA0MDAwM2EsIDB4MCwgMHg4ZjgzMDBlNCwgCi0weDhmODIwMGUwLCAweDEwNjIwMDAzLCAweDI0NjMwMDA4LCAweGFmODMwMGU0LCAKLTB4YWY4MzAwZTgsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4MjgwMTgyMSwgCi0weDEwMjEsIDB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsIAotMHg4NjIwMjEsIDB4YWVlNDAwYzAsIDB4YWVlNTAwYzQsIDB4OGVlMjAwNTgsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDA1OCwgMHg4ZWUyMDA1OCwgMHg4ZWUyMDA3YywgCi0weDI0NDIwMDAxLCAweGFlZTIwMDdjLCAweDhlZTIwMDdjLCAweDhmODIwMGUwLCAKLTB4YWZhMjAwMTAsIDB4OGY4MjAwZTQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4NzgsIAotMHhhZmEyMDAxNCwgMHg4ZmE2MDAxOCwgMHg4ZmE3MDAxYywgMHgzYzA1MDAwNiwgCi0weGMwMDI0MDMsIDB4MzRhNWYwMDMsIDB4ODAwMzRjYywgMHgwLCAKLTB4OGVlMjUyNDAsIDB4YWZhMjAwMTAsIDB4OGVlMjUyNDQsIDB4M2MwNDAwMDEsIAotMHgyNDg0NTg4NCwgMHhhZmEyMDAxNCwgMHg4ZWU2MGUxMCwgMHg4ZWU3MGUxOCwgCi0weDNjMDUwMDA2LCAweGMwMDI0MDMsIDB4MzRhNWYwMDIsIDB4OGVlMjAxYzAsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFjMCwgMHg4ZWUyMDAwMCwgMHg4ZWUzMDFjMCwgCi0weDI0MDNmZmJmLCAweDQzMTAyNCwgMHg4MDAzNDcwLCAweGFlZTIwMDAwLCAKLTB4OTZlMjA0NjgsIDB4NTQxMDJiLCAweDEwNDAwMDAzLCAweDAsIAotMHgyNDBmMDAwMSwgMHhhM2FmMDAyNywgMHgxMjgwMDMwMSwgMHgyNDE2MDAwNywgCi0weDI0MTUwMDQwLCAweDI0MWUwMDAxLCAweDI0MGUwMDEyLCAweDhlZTI3MjRjLCAKLTB4OGY0MzAyODAsIDB4MjQ0MjAwMDEsIDB4MzA0MjA3ZmYsIDB4MTA2MjAyZDMsIAotMHgwLCAweDkzYTIwMDI3LCAweDEwNDAwMDE0LCAweDAsIAotMHg4ZWUzNTI0MCwgMHg4ZWUyNTI0NCwgMHgxMDYyMDAwOSwgMHgyNmVkNTI0NCwgCi0weDhlZTY1MjQ0LCAweDhlZTM1MjQ0LCAweDIxMTQwLCAweDI0NDI1MjQ4LCAKLTB4MmUyODAyMSwgMHgyNDYzMDAwMSwgMHg4MDAzMWJmLCAweDMwNmIwMGZmLCAKLTB4OTJlMjcyNDgsIDB4MTQ0MGZmY2EsIDB4MCwgMHg4ZWUyMDFlMCwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWUwLCAweDhlZTIwMWUwLCAweDhlZTMwZTEwLCAKLTB4OGVlMjBlMTgsIDB4MTA2MmZmYzIsIDB4MjZlZDBlMTgsIDB4OGVlNjBlMTgsIAotMHg4ZWUzMGUxOCwgMHgyMTE0MCwgMHgyNDQyMGUyMCwgMHgyZTI4MDIxLCAKLTB4MjQ2MzAwMDEsIDB4MzA2YjAxZmYsIDB4OTZlMjA0NmEsIDB4MzA0MjAwMTAsIAotMHgxMDQwMDAxOSwgMHgwLCAweDk2NDIwMDBjLCAweDM0MGY4MTAwLCAKLTB4MTQ0ZjAwMTUsIDB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg5MDQyODNjMCwgMHgxNDQwMDAxMCwgMHgwLCAweDk2NDIwMDBlLCAKLTB4YTYwMjAwMTYsIDB4OGU0MjAwMDgsIDB4OGU0MzAwMDQsIDB4OGU0NDAwMDAsIAotMHgyNjk0ZmZmYywgMHhhZTQyMDAwYywgMHhhZTQzMDAwOCwgMHhhZTQ0MDAwNCwgCi0weDk2MDIwMDBlLCAweDI2NzMwMDA0LCAweDI0MGYwMDAxLCAweGEzYWYwMDM3LCAKLTB4MzQ0MjAyMDAsIDB4YTYwMjAwMGUsIDB4OGUwMjAwMDAsIDB4OGUwMzAwMDQsIAotMHgzYzA0MDAwMSwgMHgzNDg0MzgwMCwgMHgzMDZhMDAwNywgMHgyNmE5ODIzLCAKLTB4MzY0MTAyMSwgMHgyNjIxMDJiLCAweDEwNDAwMDA1LCAweDI4YWEwMjEsIAotMHgyNjQxMDIzLCAweDM2MjE4MjMsIDB4M2MwMjAwMjAsIDB4NDM5ODIzLCAKLTB4MjY4MjAwMDcsIDB4MjQwNGZmZjgsIDB4OTYwMzAwMGEsIDB4NDQ2MDI0LCAKLTB4NmExODIxLCAweDZjMTAyYiwgMHgxMDQwMDAwMiwgMHgxODAzODIxLCAKLTB4NjAzODIxLCAweGFlMTMwMDE4LCAweDhmODgwMTIwLCAweDI0ZTIwMDA3LCAKLTB4NDQzODI0LCAweDI3NjIzODAwLCAweDI1MDkwMDIwLCAweDEyMjEwMmIsIAotMHg1MDQwMDAwMSwgMHgyNzY5MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMTIyMDAwNCwgCi0weDAsIDB4OGY4MjAxMjQsIDB4MTUyMjAwMDcsIDB4MTQwMTgyMSwgCi0weDhlZTIwMWE0LCAweDg4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIAotMHg4MDAzMjRjLCAweDhlZTIwMWE0LCAweDhlMDQwMDAwLCAweDhlMDUwMDA0LCAKLTB4MTAyMSwgMHhhZDEzMDAwOCwgMHhhNTA3MDAwZSwgMHhhZDE2MDAxOCwgCi0weGFkMDYwMDFjLCAweGEzMzAyYiwgMHhhMzI4MjMsIDB4ODIyMDIzLCAKLTB4ODYyMDIzLCAweGFkMDQwMDAwLCAweGFkMDUwMDA0LCAweDhlZTIwNGMwLCAKLTB4YWQwMjAwMTAsIDB4YWY4OTAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzMsIAotMHgyNDExMDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ1NjAwMWYsIDB4MCwgCi0weDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDAsIAotMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgCi0weDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNTUwMDA3LCAweDAsIAotMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLCAKLTB4ODAwMzIzOSwgMHgwLCAweDE0NjAwMDA1LCAweDAsIAotMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgCi0weDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEwLCAweGFjODAwMDAwLCAKLTB4ODAwMzI0YywgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4NTA1NTAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgCi0weGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAKLTB4MmUyMjAyMSwgMHhhYzk2MDAwMCwgMHhhYzllMDAwNCwgMHgxNjIwMDAxOCwgCi0weDNjMDUwMDA2LCAweDhlMDIwMDE4LCAweDNjMDQwMDAxLCAweDI0ODQ1ODkwLCAKLTB4YWZhMjAwMTAsIDB4OGUwMjAwMDAsIDB4OGUwMzAwMDQsIDB4MzRhNWYwMDksIAotMHgyMDAzMDIxLCAweGMwMDI0MDMsIDB4YWZhMzAwMTQsIDB4OTNhMjAwMzcsIAotMHgxMDQwMDIxNiwgMHgzNDBmODEwMCwgMHg4ZTQyMDAwNCwgMHg4ZTQzMDAwOCwgCi0weDhlNDQwMDBjLCAweGE2NGYwMDBjLCAweGFlNDIwMDAwLCAweGFlNDMwMDA0LCAKLTB4YWU0NDAwMDgsIDB4OTYwMjAwMTYsIDB4ODAwMzQ3MCwgMHhhNjQyMDAwZSwgCi0weDE0ZWMwMTY4LCAweDI4YTE4MjMsIDB4OTYwYzAwMGEsIDB4OTYwMzAwMGUsIAotMHgyOGExMDIzLCAweGE2MDIwMDBhLCAweDM0NjIwMDA0LCAweGE2MDIwMDBlLCAKLTB4OGY4ODAxMjAsIDB4Mjc2MjM4MDAsIDB4MjUwOTAwMjAsIDB4MTIyMTAyYiwgCi0weDE0NDAwMDAyLCAweDMwNmFmZmZmLCAweDI3NjkzMDAwLCAweDhmODIwMTI4LCAKLTB4MTEyMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgMHgxNTIyMDAwNywgCi0weDI0MDQwMDIwLCAweDhlZTIwMWE0LCAweDg4MjEsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhNCwgMHg4MDAzMmNhLCAweDhlZTIwMWE0LCAweDhlZTU3MjRjLCAKLTB4OGVlNjA0OTAsIDB4OGVlNzA0OTQsIDB4YTUwNDAwMGUsIDB4MjQwNDAwMDQsIAotMHhhZDEwMDAwOCwgMHhhZDA0MDAxOCwgMHg1Mjk0MCwgMHhhMDE4MjEsIAotMHgxMDIxLCAweGUzMzgyMSwgMHhlMzIwMmIsIDB4YzIzMDIxLCAKLTB4YzQzMDIxLCAweGFkMDYwMDAwLCAweGFkMDcwMDA0LCAweDhlZTI3MjRjLCAKLTB4YWQwMjAwMWMsIDB4OGVlMjA0YzQsIDB4YWQwMjAwMTAsIDB4YWY4OTAxMjAsIAotMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgMHgyNDExMDAwMSwgMHg4ZWUyNGUzMCwgCi0weDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIAotMHgxNDU2MDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAKLTB4MTA2MjAwMWIsIDB4MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgCi0weGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAKLTB4MTA1NTAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgCi0weDEwNjIwMDA1LCAweDAsIDB4ODAwMzJiNywgMHgwLCAKLTB4MTQ2MDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgCi0weGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAKLTB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIDB4ODAwMzJjYSwgMHgwLCAKLTB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4NTA1NTAwMDMsIDB4MTAyMSwgCi0weDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAKLTB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHhhYzk2MDAwMCwgCi0weGFjOWUwMDA0LCAweDE2MjAwMDBkLCAweDAsIDB4YTYwYzAwMGEsIAotMHhhNjBhMDAwZSwgMHg4ZjgyMDEwMCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEwNCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1ODljLCAweDNjMDUwMDA2LCAweGFmYTIwMDE0LCAKLTB4OGVlNjcyNGMsIDB4ODAwMzQzYiwgMHgzNGE1ZjAwYiwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhMDIwODNjMCwgMHhhZGFiMDAwMCwgMHg4ZWUyMDFkOCwgCi0weDhlZTM3MjRjLCAweDI0NDJmZmZmLCAweGFlZTIwMWQ4LCAweDhlZTIwMWQ4LCAKLTB4MjQ2MzAwMDEsIDB4MzA2MzA3ZmYsIDB4MjZlMjUyNDQsIDB4MTVhMjAwMDYsIAotMHhhZWUzNzI0YywgMHg4ZWUyMDFkMCwgMHgyNDQyZmZmZiwgMHhhZWUyMDFkMCwgCi0weDgwMDMyZWYsIDB4OGVlMjAxZDAsIDB4OGVlMjAxY2MsIDB4MjQ0MmZmZmYsIAotMHhhZWUyMDFjYywgMHg4ZWUyMDFjYywgMHg4ZjQyMDI0MCwgMHgxMDQwMDA3MywgCi0weDAsIDB4OGVlMjBlMWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjBlMWMsIAotMHg4ZjQzMDI0MCwgMHg0MzEwMmIsIDB4MTQ0MDAxNzYsIDB4YTAyMSwgCi0weDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwgCi0weDUwNDAwMDAxLCAweDI3NjYzMDAwLCAweDhmODIwMTI4LCAweDEwYzIwMDA0LCAKLTB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLCAKLTB4OGVlMjAxYTQsIDB4ODgyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgCi0weDgwMDMzNGYsIDB4OGVlMjAxYTQsIDB4OGVlMjcyNGMsIDB4YWM2MjAwMWMsIAotMHg4ZWU0MDRhOCwgMHg4ZWU1MDRhYywgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgCi0weDI0MDIwMDA4LCAweGE0NjIwMDBlLCAweDI0MDIwMDExLCAweGFjNjIwMDE4LCAKLTB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIAotMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgMHgyNDExMDAwMSwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHg4YzgyMDAwMCwgMHgxNDRlMDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAKLTB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4MTA1NTAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgCi0weDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIDB4ODAwMzMzYywgCi0weDAsIDB4MTQ2MDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIDB4ODAwMzM0ZiwgCi0weDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4NTA1NTAwMDMsIAotMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weGFjOGUwMDAwLCAweGFjOWUwMDA0LCAweDU2MjAwMDBkLCAweDI0MTEwMDAxLCAKLTB4OGVlMjcyNGMsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4YTgsIDB4YWZhMDAwMTQsIAotMHhhZmEyMDAxMCwgMHg4ZWU2NzI0YywgMHg4ZjQ3MDI4MCwgMHgzYzA1MDAwOSwgCi0weDM0YTVmMDA4LCAweGMwMDI0MDMsIDB4YWZhZTAwNDgsIDB4OGZhZTAwNDgsIAotMHg1NjIwMDAwMSwgMHhhZWUwMGUxYywgMHg4ZWUyMDE4OCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMTg4LCAweDgwMDMzYzgsIDB4OGVlMjAxODgsIDB4OGY4MzAxMjAsIAotMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIAotMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAKLTB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgCi0weDg4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMzNiYSwgCi0weDhlZTIwMWE0LCAweDhlZTI3MjRjLCAweGFjNjIwMDFjLCAweDhlZTQwNGE4LCAKLTB4OGVlNTA0YWMsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIAotMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgCi0weGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAKLTB4OTJlMjRlMjAsIDB4MTQ0MDAwMzMsIDB4MjQxMTAwMDEsIDB4OGVlMjRlMzAsIAotMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODIwMDAwLCAKLTB4MTQ0ZTAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgCi0weDEwNjIwMDFiLCAweDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIAotMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgCi0weDEwNTUwMDA3LCAweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIAotMHgxMDYyMDAwNSwgMHgwLCAweDgwMDMzYTcsIDB4MCwgCi0weDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIAotMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgCi0weDUwNDAwMDEwLCAweGFjODAwMDAwLCAweDgwMDMzYmEsIDB4MCwgCi0weDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNTUwMDAzLCAweDEwMjEsIAotMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgCi0weDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4YWM4ZTAwMDAsIAotMHhhYzllMDAwNCwgMHgxNjIwMDAwZCwgMHgwLCAweDhlZTI3MjRjLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDU4YTgsIDB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsIAotMHg4ZWU2NzI0YywgMHg4ZjQ3MDI4MCwgMHgzYzA1MDAwOSwgMHgzNGE1ZjAwOCwgCi0weGMwMDI0MDMsIDB4YWZhZTAwNDgsIDB4OGZhZTAwNDgsIDB4OGVlMjAxNzQsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDE3NCwgMHg4ZWUyMDE3NCwgMHg4MDAzNDZlLCAKLTB4YTAyMSwgMHg5NjBjMDAwYSwgMHgxODMxMDJiLCAweDU0NDAwMDAxLCAKLTB4MTgwMTgyMSwgMHhhNjAzMDAwYSwgMHg4Zjg4MDEyMCwgMHgyNzYyMzgwMCwgCi0weDI1MDkwMDIwLCAweDEyMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2OTMwMDAsIAotMHg4ZjgyMDEyOCwgMHgxMTIyMDAwNCwgMHgwLCAweDhmODIwMTI0LCAKLTB4MTUyMjAwMDcsIDB4MjQwNDAwMjAsIDB4OGVlMjAxYTQsIDB4ODgyMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDM0MmYsIDB4OGVlMjAxYTQsIAotMHg4ZWU1NzI0YywgMHg4ZWU2MDQ5MCwgMHg4ZWU3MDQ5NCwgMHhhNTA0MDAwZSwgCi0weDI0MDQwMDA0LCAweGFkMTAwMDA4LCAweGFkMDQwMDE4LCAweDUyOTQwLCAKLTB4YTAxODIxLCAweDEwMjEsIDB4ZTMzODIxLCAweGUzMjAyYiwgCi0weGMyMzAyMSwgMHhjNDMwMjEsIDB4YWQwNjAwMDAsIDB4YWQwNzAwMDQsIAotMHg4ZWUyNzI0YywgMHhhZDAyMDAxYywgMHg4ZWUyMDRjNCwgMHhhZDAyMDAxMCwgCi0weGFmODkwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MTEwMDAxLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDhjODIwMDAwLCAweDE0NTYwMDFmLCAweDAsIDB4OGVlMzRlMzAsIAotMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIAotMHgyNDQyMDAwMSwgMHgxMDU1MDAwNywgMHgwLCAweDhlZTI0ZTM0LCAKLTB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAzNDFjLCAKLTB4MCwgMHgxNDYwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAzNDJmLCAKLTB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHg1MDU1MDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4YWM5NjAwMDAsIDB4YWM5ZTAwMDQsIDB4MTYyMDAwMWQsIDB4MCwgCi0weGE2MGMwMDBhLCAweDhmODIwMTAwLCAweGFmYTIwMDEwLCAweDhmODIwMTA0LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDU4OWMsIDB4M2MwNTAwMDYsIDB4YWZhMjAwMTQsIAotMHg4ZWU2NzI0YywgMHgzNGE1ZjAwZCwgMHhjMDAyNDAzLCAweDIwMDM4MjEsIAotMHg5M2EyMDAzNywgMHgxMDQwMDAzMSwgMHgzNDBmODEwMCwgMHg4ZTQyMDAwNCwgCi0weDhlNDMwMDA4LCAweDhlNDQwMDBjLCAweGE2NGYwMDBjLCAweGFlNDIwMDAwLCAKLTB4YWU0MzAwMDQsIDB4YWU0NDAwMDgsIDB4OTYwMjAwMTYsIDB4YTY0MjAwMGUsIAotMHg5NjAyMDAwZSwgMHgzMDQyZmRmZiwgMHg4MDAzNDcwLCAweGE2MDIwMDBlLCAKLTB4OGVlMjAxZDgsIDB4MjQ0MmZmZmYsIDB4YWVlMjAxZDgsIDB4OGVlMjAxZDgsIAotMHg4ZWUyMDFjYywgMHgzYzA0MDAxZiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhMDNlODNjMCwgMHgyNDQyZmZmZiwgMHhhZWUyMDFjYywgMHg5NjAzMDAwYSwgCi0weDM0ODRmZmZmLCAweDhlZTIwMWNjLCAweDZhMTgyMSwgMHgyNjM5ODIxLCAKLTB4OTMyMDJiLCAweDEwODAwMDAzLCAweDNjMDJmZmY1LCAweDM0NDIxMDAwLCAKLTB4MjYyOTgyMSwgMHhhZGFiMDAwMCwgMHg4ZWUyNzI0YywgMHgyNDQyMDAwMSwgCi0weDMwNDIwN2ZmLCAweGFlZTI3MjRjLCAweDhmNDIwMjQwLCAweDEwNDAwMDA0LCAKLTB4MjgzYTAyMywgMHg4ZWUyMGUxYywgMHgyNDQyMDAwMSwgMHhhZWUyMGUxYywgCi0weGEzYTAwMDI3LCAweDE2ODBmZDI5LCAweDAsIDB4MTI4MDAwMjQsIAotMHgwLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzM0ODNjNCwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzMzODNjOCwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhYzMyODNjYywgMHg5M2EyMDAzNywgMHgxMDQwMDAwOCwgCi0weDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2NjLCAKLTB4MjQ0MjAwMDQsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjI4M2NjLCAKLTB4OGVlMjcyNGMsIDB4OGY0MzAyODAsIDB4MjQ0MjAwMDEsIDB4MzA0MjA3ZmYsIAotMHgxNDYyMDAwNiwgMHgwLCAweDhlZTIwMWM0LCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYzQsIDB4ODAwMzRjYywgMHg4ZWUyMDFjNCwgMHg4ZWUyMDFiYywgCi0weDI0NDIwMDAxLCAweGFlZTIwMWJjLCAweDgwMDM0Y2MsIDB4OGVlMjAxYmMsIAotMHg5N2E0MDAxZSwgMHgyNDg0ZmZmYywgMHg4MDE4MjEsIDB4OGVlNDAwYzAsIAotMHg4ZWU1MDBjNCwgMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIAotMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFlZTQwMGMwLCAweGFlZTUwMGM0LCAKLTB4OGZhZjAwMmMsIDB4MjQwMjAwMDIsIDB4MTFlMjAwMGYsIDB4MjllMjAwMDMsIAotMHgxNDQwMDAxNywgMHgyNDAyMDAwMywgMHgxNWUyMDAxNSwgMHgwLCAKLTB4OGVlMjAwZDAsIDB4OGVlMzAwZDQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIAotMHg0NDEwMjEsIDB4YWVlMjAwZDAsIDB4YWVlMzAwZDQsIDB4OGVlMjAwZDAsIAotMHg4MDAzNGM2LCAweDhlZTMwMGQ0LCAweDhlZTIwMGQ4LCAweDhlZTMwMGRjLCAKLTB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGQ4LCAKLTB4YWVlMzAwZGMsIDB4OGVlMjAwZDgsIDB4ODAwMzRjNiwgMHg4ZWUzMDBkYywgCi0weDhlZTIwMGM4LCAweDhlZTMwMGNjLCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAKLTB4NDQxMDIxLCAweGFlZTIwMGM4LCAweGFlZTMwMGNjLCAweDhlZTIwMGM4LCAKLTB4OGVlMzAwY2MsIDB4OGY4MzAwZTQsIDB4OGY4MjAwZTAsIDB4MTA2MjAwMDMsIAotMHgyNDYzMDAwOCwgMHhhZjgzMDBlNCwgMHhhZjgzMDBlOCwgMHg4ZmJmMDA3MCwgCi0weDhmYmUwMDZjLCAweDhmYjYwMDY4LCAweDhmYjUwMDY0LCAweDhmYjQwMDYwLCAKLTB4OGZiMzAwNWMsIDB4OGZiMjAwNTgsIDB4OGZiMTAwNTQsIDB4OGZiMDAwNTAsIAotMHgzZTAwMDA4LCAweDI3YmQwMDc4LCAweDI3YmRmZmIwLCAweGFmYjUwMDQ0LCAKLTB4YTgyMSwgMHhhZmIwMDAzMCwgMHg4MDIxLCAweGFmYmYwMDRjLCAKLTB4YWZiNjAwNDgsIDB4YWZiNDAwNDAsIDB4YWZiMzAwM2MsIDB4YWZiMjAwMzgsIAotMHhhZmIxMDAzNCwgMHg4ZWUyMDRkNCwgMHgyNDE0MDAwMSwgMHgzMDQyMDAwMSwgCi0weDE0NDAwMDJhLCAweGIwMjEsIDB4OGY4NzAwZTAsIDB4OGY4ODAwYzQsIAotMHg4ZjgyMDBlOCwgMHhlMjIwMjMsIDB4MmM4MjEwMDAsIDB4NTA0MDAwMDEsIAotMHgyNDg0MTAwMCwgMHg0MjBjMiwgMHg4MDE4MjEsIDB4OGVlNDAwYzgsIAotMHg4ZWU1MDBjYywgMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIAotMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFlZTQwMGM4LCAweGFlZTUwMGNjLCAKLTB4OGY4MzAwYzgsIDB4M2MwMjAwMGEsIDB4MzQ0MmVmZmYsIDB4MTAzMjAyMywgCi0weDQ0MTAyYiwgMHgxMDQwMDAwMywgMHgzYzAyMDAwYSwgMHgzNDQyZjAwMCwgCi0weDgyMjAyMSwgMHg4MDE4MjEsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIAotMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLCAKLTB4ODYyMDIxLCAweGFlZTQwMGMwLCAweGFlZTUwMGM0LCAweGFmODgwMGM4LCAKLTB4YWY4NzAwZTQsIDB4ODAwMzg1MCwgMHhhZjg3MDBlOCwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg5MDQyODNjMCwgMHgxMDQwMDAwYiwgMHgwLCAKLTB4M2MxMzAwMDEsIDB4Mjc3OTgyMSwgMHg4ZTczODNjNCwgMHgzYzExMDAwMSwgCi0weDIzNzg4MjEsIDB4OGUzMTgzYzgsIDB4M2MxMjAwMDEsIDB4MjU3OTAyMSwgCi0weDgwMDM2ZTgsIDB4OGU1MjgzY2MsIDB4OGY4MzAwZTAsIDB4OGY4MjAwZTQsIAotMHgxMDQzMDAwNywgMHg0ODIxLCAweDhmODIwMGU0LCAweDI0MDkwMDAxLCAKLTB4OGM0MzAwMDAsIDB4OGM0NDAwMDQsIDB4YWZhMzAwMTgsIDB4YWZhNDAwMWMsIAotMHgxNTIwMDAwZSwgMHgzYzAyZmZmZiwgMHg4ZjgyMDBjNCwgMHhhZmEyMDAxMCwgCi0weDhmODIwMGM4LCAweDNjMDQwMDAxLCAweDI0ODQ1ODcwLCAweGFmYTIwMDE0LCAKLTB4OGY4NjAwZTAsIDB4OGY4NzAwZTQsIDB4M2MwNTAwMDYsIDB4YzAwMjQwMywgCi0weDM0YTVmMDAwLCAweDgwMDM4NTAsIDB4MCwgMHg4ZmEzMDAxYywgCi0weDhmYjIwMDE4LCAweDMwNzNmZmZmLCAweDI2NzNmZmZjLCAweDYyMTAyNCwgCi0weDEwNDAwMDU4LCAweDI0MDg4MjEsIDB4M2MwMjAwODAsIDB4NjIxMDI0LCAKLTB4MTA0MDAwMGEsIDB4M2MwNDAwNDAsIDB4OGVlMjAwN2MsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDA3YywgMHg4ZWUyMDA3YywgMHg4ZWUyMDFmYywgMHgyNDQyMDAwMSwgCi0weGFlZTIwMWZjLCAweDgwMDM4NGEsIDB4OGVlMjAxZmMsIDB4M2MwNjAwMDQsIAotMHgzYzBiMDAwMSwgMHgzYzBhMDAwMiwgMHgzYzA1MDAxMCwgMHgzYzA5MDAwOCwgCi0weDhlZTIwMDgwLCAweDNjMDgwMDIwLCAweDM0MDc4MDAwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAwODAsIDB4OGVlMjAwODAsIDB4OGZhMjAwMWMsIDB4NDQxODI0LCAKLTB4MTA2NjAwMjEsIDB4YzMxMDJiLCAweDE0NDAwMDA3LCAweDAsIAotMHgxMDZiMDAxMSwgMHgwLCAweDEwNmEwMDE1LCAweDAsIAotMHg4MDAzNTkyLCAweDQyMDQyLCAweDEwNjUwMDIzLCAweGEzMTAyYiwgCi0weDE0NDAwMDA1LCAweDAsIDB4MTA2OTAwMTksIDB4MCwgCi0weDgwMDM1OTIsIDB4NDIwNDIsIDB4MTA2ODAwMjEsIDB4MCwgCi0weDgwMDM1OTIsIDB4NDIwNDIsIDB4OGVlMjAwMzQsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDAzNCwgMHg4ZWUyMDAzNCwgMHg4MDAzNTkyLCAweDQyMDQyLCAKLTB4OGVlMjAxZWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZWMsIDB4OGVlMjAxZWMsIAotMHg4MDAzNTkyLCAweDQyMDQyLCAweDhlZTIwMWYwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxZjAsIDB4OGVlMjAxZjAsIDB4ODAwMzU5MiwgMHg0MjA0MiwgCi0weDhlZTIwMWY0LCAweDI0NDIwMDAxLCAweGFlZTIwMWY0LCAweDhlZTIwMWY0LCAKLTB4ODAwMzU5MiwgMHg0MjA0MiwgMHg4ZWUyMDAzMCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMDMwLCAweDhlZTIwMDMwLCAweDgwMDM1OTIsIDB4NDIwNDIsIAotMHg4ZWUyMDFmOCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFmOCwgMHg4ZWUyMDFmOCwgCi0weDQyMDQyLCAweDEwODcwMmI3LCAweDAsIDB4ODAwMzU1NywgCi0weDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDkwNDI4M2IyLCAKLTB4MTQ0MDAwODQsIDB4MjQwMjAwMDEsIDB4M2MwMzAwMDEsIDB4NzcxODIxLCAKLTB4OTA2MzgzYjMsIDB4MTQ2MjAwN2YsIDB4M2MwMjAxMDAsIDB4OGU0MzAwMDAsIAotMHg2MjEwMjQsIDB4MTA0MDAwNmYsIDB4MjQwMmZmZmYsIDB4MTQ2MjAwMDUsIAotMHgyNDEwMDAwMSwgMHg5NjQzMDAwNCwgMHgzNDAyZmZmZiwgMHgxMDYyMDA3NSwgCi0weDAsIDB4OTJlMjA0ZDgsIDB4MTQ0MDAwNzIsIDB4MCwgCi0weDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgMHgyODQyMDAwNSwgCi0weDEwNDAwMDIwLCAweDM4MjEsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAKLTB4OGM0MjgzYjQsIDB4MTg0MDAwMTYsIDB4MjgyMSwgMHg5NjI2MDAwMCwgCi0weDUyMGMwLCAweDk3MTAyMSwgMHg5NDQyNzc3ZSwgMHgxNDQ2MDAwOSwgCi0weDk3MTAyMSwgMHg5NDQzNzc4MCwgMHg5NjIyMDAwMiwgMHgxNDYyMDAwNSwgCi0weDk3MTAyMSwgMHg5NDQzNzc4MiwgMHg5NjIyMDAwNCwgMHg1MDYyMDAwOCwgCi0weDI0MDcwMDAxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgCi0weDI0YTUwMDAxLCAweGEyMTAyYSwgMHg1NDQwZmZlZSwgMHg1MjBjMCwgCi0weDMwZTIwMGZmLCAweDEwNDAwMjdiLCAweDAsIDB4ODAwMzYxZSwgCi0weDAsIDB4MjQwMjAyMSwgMHhjMDAyMmZlLCAweDI0MDUwMDA2LCAKLTB4MzA0NDAwMWYsIDB4NDI4YzAsIDB4MmU1MTAyMSwgMHg5NDQyNzI3YywgCi0weDMwNDI0MDAwLCAweDE0NDAwMjZmLCAweGI3MTAyMSwgMHg5NDQzNzI3ZSwgCi0weDk2MjIwMDAwLCAweDE0NjIwMDBiLCAweDQxOGMwLCAweGI3MTAyMSwgCi0weDk0NDM3MjgwLCAweDk2MjIwMDAyLCAweDE0NjIwMDA2LCAweDQxOGMwLCAKLTB4YjcxMDIxLCAweDk0NDM3MjgyLCAweDk2MjIwMDA0LCAweDEwNjIwMDM1LCAKLTB4NDE4YzAsIDB4MmUzMTAyMSwgMHg5NDQyNzI3YywgMHgzMDQyODAwMCwgCi0weDE0NDAwMjVjLCAweDJlMzEwMjEsIDB4OTQ0ODcyN2MsIDB4OTYyNzAwMDAsIAotMHg4MjhjMCwgMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4ODAwMzYwMCwgCi0weDMwMjEsIDB4NDIwYzAsIDB4MmU0MTAyMSwgMHg5NDQzNzM3YywgCi0weDJlNDEwMjEsIDB4OTQ0ODczN2MsIDB4MzA2MzgwMDAsIDB4MTQ2MDAwMTAsIAotMHg4MjhjMCwgMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4MTQ0N2ZmZjUsIAotMHgxMDAyMDIxLCAweGI3MTAyMSwgMHg5NDQzNzM4MCwgMHg5NjIyMDAwMiwgCi0weDU0NjJmZmYxLCAweDQyMGMwLCAweGI3MTAyMSwgMHg5NDQzNzM4MiwgCi0weDk2MjIwMDA0LCAweDU0NjJmZmVjLCAweDQyMGMwLCAweDI0MDYwMDAxLCAKLTB4MzBjMjAwZmYsIDB4MTA0MDAyM2IsIDB4MCwgMHg4MDAzNjFlLCAKLTB4MCwgMHg5NzQzMDIwMiwgMHg5NjQyMDAwMCwgMHgxNDYyMDIzNSwgCi0weDAsIDB4OTc0MzAyMDQsIDB4OTY0MjAwMDIsIDB4MTQ2MjAyMzEsIAotMHgwLCAweDk3NDMwMjA2LCAweDk2NDIwMDA0LCAweDE0NjIwMjJkLCAKLTB4MCwgMHg5MjQyMDAwMCwgMHgzYTAzMDAwMSwgMHgzMDQyMDAwMSwgCi0weDQzMTAyNCwgMHgxMDQwMDA3NCwgMHgyNDAyZmZmZiwgMHg4ZTIzMDAwMCwgCi0weDE0NjIwMDA0LCAweDM0MDJmZmZmLCAweDk2MjMwMDA0LCAweDEwNjIwMDZmLCAKLTB4MjQxNDAwMDIsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDkwNDI4M2IyLCAKLTB4MTQ0MDAwNmEsIDB4MjQxNDAwMDMsIDB4OTJlMjA0ZDgsIDB4MTQ0MDAwNjcsIAotMHgwLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgCi0weDI4NDIwMDA1LCAweDEwNDAwMDIwLCAweDM4MjEsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4MTg0MDAwMTYsIDB4MjgyMSwgCi0weDk2MjYwMDAwLCAweDUyMGMwLCAweDk3MTAyMSwgMHg5NDQyNzc3ZSwgCi0weDE0NDYwMDA5LCAweDk3MTAyMSwgMHg5NDQzNzc4MCwgMHg5NjIyMDAwMiwgCi0weDE0NjIwMDA1LCAweDk3MTAyMSwgMHg5NDQzNzc4MiwgMHg5NjIyMDAwNCwgCi0weDUwNjIwMDA4LCAweDI0MDcwMDAxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgCi0weDhjNDI4M2I0LCAweDI0YTUwMDAxLCAweGEyMTAyYSwgMHg1NDQwZmZlZSwgCi0weDUyMGMwLCAweDMwZTIwMGZmLCAweDE0NDAwMDQ0LCAweDI0MTQwMDAzLCAKLTB4ODAwMzg0YSwgMHgwLCAweDI0MDIwMjEsIDB4YzAwMjJmZSwgCi0weDI0MDUwMDA2LCAweDMwNDQwMDFmLCAweDQyOGMwLCAweDJlNTEwMjEsIAotMHg5NDQyNzI3YywgMHgzMDQyNDAwMCwgMHgxNDQwMDFlYSwgMHhiNzEwMjEsIAotMHg5NDQzNzI3ZSwgMHg5NjIyMDAwMCwgMHgxNDYyMDAwYiwgMHg0MThjMCwgCi0weGI3MTAyMSwgMHg5NDQzNzI4MCwgMHg5NjIyMDAwMiwgMHgxNDYyMDAwNiwgCi0weDQxOGMwLCAweGI3MTAyMSwgMHg5NDQzNzI4MiwgMHg5NjIyMDAwNCwgCi0weDEwNjIwMDI3LCAweDQxOGMwLCAweDJlMzEwMjEsIDB4OTQ0MjcyN2MsIAotMHgzMDQyODAwMCwgMHgxNDQwMDFkNywgMHgyZTMxMDIxLCAweDk0NDg3MjdjLCAKLTB4OTYyNzAwMDAsIDB4ODI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLCAKLTB4ODAwMzY4NSwgMHgzMDIxLCAweDQyMGMwLCAweDJlNDEwMjEsIAotMHg5NDQzNzM3YywgMHgyZTQxMDIxLCAweDk0NDg3MzdjLCAweDMwNjM4MDAwLCAKLTB4MTQ2MDAwMTAsIDB4ODI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLCAKLTB4MTQ0N2ZmZjUsIDB4MTAwMjAyMSwgMHhiNzEwMjEsIDB4OTQ0MzczODAsIAotMHg5NjIyMDAwMiwgMHg1NDYyZmZmMSwgMHg0MjBjMCwgMHhiNzEwMjEsIAotMHg5NDQzNzM4MiwgMHg5NjIyMDAwNCwgMHg1NDYyZmZlYywgMHg0MjBjMCwgCi0weDI0MDYwMDAxLCAweDMwYzIwMGZmLCAweDEwNDAwMWI2LCAweDAsIAotMHg4MDAzNjk4LCAweDI0MTQwMDAzLCAweDI0MTQwMDAxLCAweDhmNDIwMjYwLCAKLTB4NTMxMDJiLCAweDEwNDAwMDQ5LCAweDAsIDB4OGY4MzAwZTQsIAotMHg4ZjgyMDBlMCwgMHgxMDYyMDAwMywgMHgyNDYzMDAwOCwgMHhhZjgzMDBlNCwgCi0weGFmODMwMGU4LCAweDhlZTQwMGMwLCAweDhlZTUwMGM0LCAweDI2MDE4MjEsIAotMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLCAKLTB4ODYyMDIxLCAweGFlZTQwMGMwLCAweGFlZTUwMGM0LCAweDhlZTIwMDU4LCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAwNTgsIDB4OGVlMjAwNTgsIDB4OGVlMjAwN2MsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDA3YywgMHg4ZWUyMDA3YywgMHg4ZjgyMDBlMCwgCi0weGFmYTIwMDEwLCAweDhmODIwMGU0LCAweDNjMDQwMDAxLCAweDI0ODQ1ODc4LCAKLTB4YWZhMjAwMTQsIDB4OGZhNjAwMTgsIDB4OGZhNzAwMWMsIDB4M2MwNTAwMDYsIAotMHhjMDAyNDAzLCAweDM0YTVmMDAzLCAweDgwMDM4NTAsIDB4MCwgCi0weDhlZTI1MjQwLCAweGFmYTIwMDEwLCAweDhlZTI1MjQ0LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDU4ODQsIDB4YWZhMjAwMTQsIDB4OGVlNjBlMTAsIDB4OGVlNzBlMTgsIAotMHhjMDAyNDAzLCAweDM0YTVmMDAyLCAweDhlZTIwMWMwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYzAsIDB4OGVlMjAwMDAsIDB4OGVlMzAxYzAsIDB4MjQwM2ZmYmYsIAotMHg0MzEwMjQsIDB4ODAwMzdmOCwgMHhhZWUyMDAwMCwgMHg4ZWUyNTI0MCwgCi0weGFmYTIwMDEwLCAweDhlZTI1MjQ0LCAweDNjMDQwMDAxLCAweDI0ODQ1ODg0LCAKLTB4YWZhMjAwMTQsIDB4OGVlNjBlMTAsIDB4OGVlNzBlMTgsIDB4M2MwNTAwMDYsIAotMHhjMDAyNDAzLCAweDM0YTVmMDAyLCAweDhlZTIwMWMwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYzAsIDB4ODAwMzdmOCwgMHg4ZWUyMDFjMCwgMHg5NmUyMDQ2OCwgCi0weDUzMTAyYiwgMHg1NDQwMDAwMSwgMHgzYzE1ODAwMCwgMHgxMjYwMDEzMSwgCi0weDNjMGMwMDFmLCAweDM1OGNmZmZmLCAweDhlZTI3MjRjLCAweDhmNDMwMjgwLCAKLTB4MjQ0MjAwMDEsIDB4MzA0MjA3ZmYsIDB4MTA2MjAxMDgsIDB4MCwgCi0weDEyYTAwMDE0LCAweDAsIDB4OGVlMzUyNDAsIDB4OGVlMjUyNDQsIAotMHgxMDYyMDAwOSwgMHgyNmVlNTI0NCwgMHg4ZWViNTI0NCwgMHg4ZWUzNTI0NCwgCi0weDIxMTQwLCAweDI0NDI1MjQ4LCAweDJlMjgwMjEsIDB4MjQ2MzAwMDEsIAotMHg4MDAzNzEyLCAweDMwNjgwMGZmLCAweDkyZTI3MjQ4LCAweDE0NDBmZmMwLCAKLTB4M2MwNTAwMDYsIDB4OGVlMjAxZTAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZTAsIAotMHg4ZWUyMDFlMCwgMHg4ZWUzMGUxMCwgMHg4ZWUyMGUxOCwgMHgxMDYyZmZjYiwgCi0weDI2ZWUwZTE4LCAweDhlZWIwZTE4LCAweGE4MjEsIDB4OGVlMzBlMTgsIAotMHgyMTE0MCwgMHgyNDQyMGUyMCwgMHgyZTI4MDIxLCAweDI0NjMwMDAxLCAKLTB4MzA2ODAxZmYsIDB4OTZlMjA0NmEsIDB4MzA0MjAwMTAsIDB4MTA0MDAwMTcsIAotMHgzNDAyODEwMCwgMHg5NjQzMDAwYywgMHgxNDYyMDAxNCwgMHgwLCAKLTB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDkwNDI4M2MwLCAweDE0NDAwMDBmLCAKLTB4MCwgMHg5NjQyMDAwZSwgMHhhNjAyMDAxNiwgMHg4ZTQyMDAwOCwgCi0weDhlNDMwMDA0LCAweDhlNDQwMDAwLCAweDI2NzNmZmZjLCAweGFlNDIwMDBjLCAKLTB4YWU0MzAwMDgsIDB4YWU0NDAwMDQsIDB4OTYwMjAwMGUsIDB4MjYzMTAwMDQsIAotMHgyNDE2MDAwMSwgMHgzNDQyMDIwMCwgMHhhNjAyMDAwZSwgMHg5NjAzMDAwYSwgCi0weDI2MDUwMjEsIDB4NzMxMDJiLCAweDEwNDAwMDAyLCAweDI2MDY4MjEsIAotMHg2MDUwMjEsIDB4MmQ0MjAwM2QsIDB4MTA0MDAwMmEsIDB4MzgyMSwgCi0weDk2MjMwMDBjLCAweDI0MDIwODAwLCAweDU0NjIwMDI3LCAweGFlMTEwMDE4LCAKLTB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDkwNDI4M2MwLCAweDU0NDAwMDIyLCAKLTB4YWUxMTAwMTgsIDB4MjYyMjAwMTcsIDB4MTgyMTAyYiwgMHgxMDQwMDAxMywgCi0weDAsIDB4M2MwMmZmZjUsIDB4NTExMDIxLCAweDkwNDIxMDE3LCAKLTB4Mzg0MzAwMDYsIDB4MmM2MzAwMDEsIDB4Mzg0MjAwMTEsIDB4MmM0MjAwMDEsIAotMHg2MjE4MjUsIDB4MTA2MDAwMTMsIDB4MjYyMjAwMTAsIDB4MTgyMTAyYiwgCi0weDEwNDAwMDBlLCAweDAsIDB4M2MwN2ZmZjUsIDB4ZjEzODIxLCAKLTB4OTRlNzEwMTAsIDB4ODAwMzc1ZSwgMHgyNGU3MDAwZSwgMHg5MjIyMDAxNywgCi0weDM4NDMwMDA2LCAweDJjNjMwMDAxLCAweDM4NDIwMDExLCAweDJjNDIwMDAxLCAKLTB4NjIxODI1LCAweDUwNjAwMDA0LCAweGFlMTEwMDE4LCAweDk2MjcwMDEwLCAKLTB4MjRlNzAwMGUsIDB4YWUxMTAwMTgsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAKLTB4OTA0MjgzYzAsIDB4MjEwMmIsIDB4MTRlMDAwMDIsIDB4MjRlYzAsIAotMHgxNDAzODIxLCAweDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLCAKLTB4YzIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjYzMDAwLCAweDhmODIwMTI4LCAKLTB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgCi0weDI0MDIwMDBiLCAweDhlZTIwMWE0LCAweDQ4MjEsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFhNCwgMHg4MDAzN2JmLCAweDhlZTIwMWE0LCAweDhlMDQwMDAwLCAKLTB4OGUwNTAwMDQsIDB4YWM2MjAwMTgsIDB4MTc1MTAyNSwgMHg0OTEwMjUsIAotMHhhYzcxMDAwOCwgMHhhNDY3MDAwZSwgMHhhYzYyMDAxYywgMHhhYzY0MDAwMCwgCi0weGFjNjUwMDA0LCAweDhlZTIwNGMwLCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAKLTB4OTJlMjRlMjAsIDB4MTQ0MDAwMzgsIDB4MjQwOTAwMDEsIDB4OGVlMjRlMzAsIAotMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAKLTB4MjQwMjAwMDcsIDB4MTQ2MjAwMjAsIDB4MCwgMHg4ZWUzNGUzMCwgCi0weDhlZTI0ZTM0LCAweDEwNjIwMDFjLCAweDAsIDB4OGM4MjAwMDQsIAotMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUzNGUzNCwgMHg4ZWU1NGUzMCwgCi0weDI0MDIwMDQwLCAweDI0NjMwMDAxLCAweDEwNjIwMDA3LCAweDAsIAotMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLCAKLTB4ODAwMzdhOSwgMHgwLCAweDE0YTAwMDA1LCAweDAsIAotMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgCi0weDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLCAKLTB4ODAwMzdiZiwgMHgwLCAweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAKLTB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgCi0weDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAKLTB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAwNywgMHhhYzgyMDAwMCwgCi0weDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDE1MjAwMDE4LCAweDNjMDUwMDA2LCAKLTB4OGUwMjAwMTgsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4OTAsIDB4YWZhMjAwMTAsIAotMHg4ZTAyMDAwMCwgMHg4ZTAzMDAwNCwgMHgzNGE1ZjAwOSwgMHgyMDAzMDIxLCAKLTB4YzAwMjQwMywgMHhhZmEzMDAxNCwgMHgzMmMyMDBmZiwgMHgxMDQwMDAyYiwgCi0weDM0MDI4MTAwLCAweDhlNDMwMDA0LCAweDhlNDQwMDA4LCAweDhlNDUwMDBjLCAKLTB4YTY0MjAwMGMsIDB4YWU0MzAwMDAsIDB4YWU0NDAwMDQsIDB4YWU0NTAwMDgsIAotMHg5NjAyMDAxNiwgMHg4MDAzN2Y4LCAweGE2NDIwMDBlLCAweDE1NGQwMDBhLCAKLTB4MCwgMHg5NjAyMDAwZSwgMHhhNjEzMDAwYSwgMHgzNDQyMDAwNCwgCi0weGE2MDIwMDBlLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwODNjMCwgCi0weDgwMDM3ZjYsIDB4OTgyMSwgMHg5NjA0MDAwYSwgMHg5MzEwMmIsIAotMHgxMDQwMDAwMiwgMHgyNjAxODIxLCAweDgwMTgyMSwgMHgyNDAyMDAwMSwgCi0weGE2MDMwMDBhLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyODNjMCwgCi0weDk2MDQwMDBhLCAweDIyNDg4MjEsIDB4MTkxMTAyYiwgMHgxMDQwMDAwMywgCi0weDNjMDJmZmY1LCAweDM0NDIxMDAwLCAweDIyMjg4MjEsIDB4MjY0OTgyMywgCi0weGE4MjEsIDB4MTY2MGZlZjQsIDB4YWRjODAwMDAsIDB4MTI2MDAwMjEsIAotMHgzMmMyMDBmZiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMzMzgzYzQsIAotMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMzMTgzYzgsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4MTA0MDAwMDgsIDB4YWMzMjgzY2MsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OGM0MjgzY2MsIDB4MjQ0MjAwMDQsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4YWMyMjgzY2MsIDB4OGVlMjcyNGMsIDB4OGY0MzAyODAsIAotMHgyNDQyMDAwMSwgMHgxNDYyMDAwNiwgMHgwLCAweDhlZTIwMWM0LCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYzQsIDB4ODAwMzg1MCwgMHg4ZWUyMDFjNCwgCi0weDhlZTIwMWJjLCAweDI0NDIwMDAxLCAweGFlZTIwMWJjLCAweDgwMDM4NTAsIAotMHg4ZWUyMDFiYywgMHg5N2E0MDAxZSwgMHgyNDg0ZmZmYywgMHg4MDE4MjEsIAotMHg4ZWU0MDBjMCwgMHg4ZWU1MDBjNCwgMHgxMDIxLCAweGEzMjgyMSwgCi0weGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLCAweDI0MDIwMDAyLCAKLTB4YWVlNDAwYzAsIDB4YWVlNTAwYzQsIDB4MTI4MjAwMGYsIDB4MmE4MjAwMDMsIAotMHgxNDQwMDAxNywgMHgyNDAyMDAwMywgMHgxNjgyMDAxNSwgMHgwLCAKLTB4OGVlMjAwZDAsIDB4OGVlMzAwZDQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIAotMHg0NDEwMjEsIDB4YWVlMjAwZDAsIDB4YWVlMzAwZDQsIDB4OGVlMjAwZDAsIAotMHg4MDAzODRhLCAweDhlZTMwMGQ0LCAweDhlZTIwMGQ4LCAweDhlZTMwMGRjLCAKLTB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGQ4LCAKLTB4YWVlMzAwZGMsIDB4OGVlMjAwZDgsIDB4ODAwMzg0YSwgMHg4ZWUzMDBkYywgCi0weDhlZTIwMGM4LCAweDhlZTMwMGNjLCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAKLTB4NDQxMDIxLCAweGFlZTIwMGM4LCAweGFlZTMwMGNjLCAweDhlZTIwMGM4LCAKLTB4OGVlMzAwY2MsIDB4OGY4MzAwZTQsIDB4OGY4MjAwZTAsIDB4MTA2MjAwMDMsIAotMHgyNDYzMDAwOCwgMHhhZjgzMDBlNCwgMHhhZjgzMDBlOCwgMHg4ZmJmMDA0YywgCi0weDhmYjYwMDQ4LCAweDhmYjUwMDQ0LCAweDhmYjQwMDQwLCAweDhmYjMwMDNjLCAKLTB4OGZiMjAwMzgsIDB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDUwLCAweDI3YmRmZjkwLCAweGFmYjYwMDYwLCAweGIwMjEsIAotMHhhZmJmMDA2OCwgMHhhZmJlMDA2NCwgMHhhZmI1MDA1YywgMHhhZmI0MDA1OCwgCi0weGFmYjMwMDU0LCAweGFmYjIwMDUwLCAweGFmYjEwMDRjLCAweGFmYjAwMDQ4LCAKLTB4OGVlMjA0ZDQsIDB4ODgyMSwgMHgyNDE1MDAwMSwgMHgzMDQyMDAwMSwgCi0weDE0NDAwMDJhLCAweGEzYTAwMDJmLCAweDhmODcwMGUwLCAweDhmODgwMGM0LCAKLTB4OGY4MjAwZTgsIDB4ZTIyMDIzLCAweDJjODIxMDAwLCAweDUwNDAwMDAxLCAKLTB4MjQ4NDEwMDAsIDB4NDIwYzIsIDB4ODAxODIxLCAweDhlZTQwMGM4LCAKLTB4OGVlNTAwY2MsIDB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAKLTB4ODIyMDIxLCAweDg2MjAyMSwgMHhhZWU0MDBjOCwgMHhhZWU1MDBjYywgCi0weDhmODMwMGM4LCAweDNjMDIwMDBhLCAweDM0NDJlZmZmLCAweDEwMzIwMjMsIAotMHg0NDEwMmIsIDB4MTA0MDAwMDMsIDB4M2MwMjAwMGEsIDB4MzQ0MmYwMDAsIAotMHg4MjIwMjEsIDB4ODAxODIxLCAweDhlZTQwMGMwLCAweDhlZTUwMGM0LCAKLTB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgCi0weDg2MjAyMSwgMHhhZWU0MDBjMCwgMHhhZWU1MDBjNCwgMHhhZjg4MDBjOCwgCi0weGFmODcwMGU0LCAweDgwMDNjNWIsIDB4YWY4NzAwZTgsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OTA0MjgzYzAsIDB4MTA0MDAwMGIsIDB4MCwgCi0weDNjMTMwMDAxLCAweDI3Nzk4MjEsIDB4OGU3MzgzYzQsIDB4M2MxMDAwMDEsIAotMHgyMTc4MDIxLCAweDhlMTA4M2M4LCAweDNjMTIwMDAxLCAweDI1NzkwMjEsIAotMHg4MDAzYTU5LCAweDhlNTI4M2NjLCAweDhmODMwMGUwLCAweDhmODIwMGU0LCAKLTB4MTA0MzAwMDcsIDB4MzgyMSwgMHg4ZjgyMDBlNCwgMHgyNDA3MDAwMSwgCi0weDhjNDMwMDAwLCAweDhjNDQwMDA0LCAweGFmYTMwMDE4LCAweGFmYTQwMDFjLCAKLTB4MTRlMDAwMGUsIDB4M2MwMmZmZmYsIDB4OGY4MjAwYzQsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDBjOCwgMHgzYzA0MDAwMSwgMHgyNDg0NThiNCwgMHhhZmEyMDAxNCwgCi0weDhmODYwMGUwLCAweDhmODcwMGU0LCAweDNjMDUwMDA2LCAweGMwMDI0MDMsIAotMHgzNGE1ZjIwMCwgMHg4MDAzYzViLCAweDAsIDB4OGZhMzAwMWMsIAotMHg4ZmIyMDAxOCwgMHgzMDczZmZmZiwgMHgyNjczZmZmYywgMHg2MjEwMjQsIAotMHgxMDQwMDA1OCwgMHgyNDA4MDIxLCAweDNjMDIwMDgwLCAweDYyMTAyNCwgCi0weDEwNDAwMDBhLCAweDNjMDQwMDQwLCAweDhlZTIwMDdjLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAwN2MsIDB4OGVlMjAwN2MsIDB4OGVlMjAxZmMsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDFmYywgMHg4MDAzYzU1LCAweDhlZTIwMWZjLCAweDNjMDYwMDA0LCAKLTB4M2MwYjAwMDEsIDB4M2MwYTAwMDIsIDB4M2MwNTAwMTAsIDB4M2MwOTAwMDgsIAotMHg4ZWUyMDA4MCwgMHgzYzA4MDAyMCwgMHgzNDA3ODAwMCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMDgwLCAweDhlZTIwMDgwLCAweDhmYTIwMDFjLCAweDQ0MTgyNCwgCi0weDEwNjYwMDIxLCAweGMzMTAyYiwgMHgxNDQwMDAwNywgMHgwLCAKLTB4MTA2YjAwMTEsIDB4MCwgMHgxMDZhMDAxNSwgMHgwLCAKLTB4ODAwMzkxNiwgMHg0MjA0MiwgMHgxMDY1MDAyMywgMHhhMzEwMmIsIAotMHgxNDQwMDAwNSwgMHgwLCAweDEwNjkwMDE5LCAweDAsIAotMHg4MDAzOTE2LCAweDQyMDQyLCAweDEwNjgwMDIxLCAweDAsIAotMHg4MDAzOTE2LCAweDQyMDQyLCAweDhlZTIwMDM0LCAweDI0NDIwMDAxLCAKLTB4YWVlMjAwMzQsIDB4OGVlMjAwMzQsIDB4ODAwMzkxNiwgMHg0MjA0MiwgCi0weDhlZTIwMWVjLCAweDI0NDIwMDAxLCAweGFlZTIwMWVjLCAweDhlZTIwMWVjLCAKLTB4ODAwMzkxNiwgMHg0MjA0MiwgMHg4ZWUyMDFmMCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMWYwLCAweDhlZTIwMWYwLCAweDgwMDM5MTYsIDB4NDIwNDIsIAotMHg4ZWUyMDFmNCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFmNCwgMHg4ZWUyMDFmNCwgCi0weDgwMDM5MTYsIDB4NDIwNDIsIDB4OGVlMjAwMzAsIDB4MjQ0MjAwMDEsIAotMHhhZWUyMDAzMCwgMHg4ZWUyMDAzMCwgMHg4MDAzOTE2LCAweDQyMDQyLCAKLTB4OGVlMjAxZjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZjgsIDB4OGVlMjAxZjgsIAotMHg0MjA0MiwgMHgxMDg3MDMzZSwgMHgwLCAweDgwMDM4ZGIsIAotMHgwLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMiwgCi0weDE0NDAwMDg0LCAweDI0MDIwMDAxLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgCi0weDkwNjM4M2IzLCAweDE0NjIwMDdmLCAweDNjMDIwMTAwLCAweDhlNDMwMDAwLCAKLTB4NjIxMDI0LCAweDEwNDAwMDZmLCAweDI0MDJmZmZmLCAweDE0NjIwMDA1LCAKLTB4MjQxMTAwMDEsIDB4OTY0MzAwMDQsIDB4MzQwMmZmZmYsIDB4MTA2MjAwNzUsIAotMHgwLCAweDkyZTIwNGQ4LCAweDE0NDAwMDcyLCAweDAsIAotMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4Mjg0MjAwMDUsIAotMHgxMDQwMDAyMCwgMHgzODIxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgCi0weDhjNDI4M2I0LCAweDE4NDAwMDE2LCAweDI4MjEsIDB4OTYwNjAwMDAsIAotMHg1MjBjMCwgMHg5NzEwMjEsIDB4OTQ0Mjc3N2UsIDB4MTQ0NjAwMDksIAotMHg5NzEwMjEsIDB4OTQ0Mzc3ODAsIDB4OTYwMjAwMDIsIDB4MTQ2MjAwMDUsIAotMHg5NzEwMjEsIDB4OTQ0Mzc3ODIsIDB4OTYwMjAwMDQsIDB4NTA2MjAwMDgsIAotMHgyNDA3MDAwMSwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsIAotMHgyNGE1MDAwMSwgMHhhMjEwMmEsIDB4NTQ0MGZmZWUsIDB4NTIwYzAsIAotMHgzMGUyMDBmZiwgMHgxMDQwMDMwMiwgMHgwLCAweDgwMDM5YTIsIAotMHgwLCAweDI0MDIwMjEsIDB4YzAwMjJmZSwgMHgyNDA1MDAwNiwgCi0weDMwNDQwMDFmLCAweDQyOGMwLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsIAotMHgzMDQyNDAwMCwgMHgxNDQwMDJmNiwgMHhiNzEwMjEsIDB4OTQ0MzcyN2UsIAotMHg5NjAyMDAwMCwgMHgxNDYyMDAwYiwgMHg0MThjMCwgMHhiNzEwMjEsIAotMHg5NDQzNzI4MCwgMHg5NjAyMDAwMiwgMHgxNDYyMDAwNiwgMHg0MThjMCwgCi0weGI3MTAyMSwgMHg5NDQzNzI4MiwgMHg5NjAyMDAwNCwgMHgxMDYyMDAzNSwgCi0weDQxOGMwLCAweDJlMzEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjgwMDAsIAotMHgxNDQwMDJlMywgMHgyZTMxMDIxLCAweDk0NGQ3MjdjLCAweDk2MDcwMDAwLCAKLTB4ZDI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLCAweDgwMDM5ODQsIAotMHgzMDIxLCAweDQyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MzczN2MsIAotMHgyZTQxMDIxLCAweDk0NGQ3MzdjLCAweDMwNjM4MDAwLCAweDE0NjAwMDEwLCAKLTB4ZDI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLCAweDE0NDdmZmY1LCAKLTB4MWEwMjAyMSwgMHhiNzEwMjEsIDB4OTQ0MzczODAsIDB4OTYwMjAwMDIsIAotMHg1NDYyZmZmMSwgMHg0MjBjMCwgMHhiNzEwMjEsIDB4OTQ0MzczODIsIAotMHg5NjAyMDAwNCwgMHg1NDYyZmZlYywgMHg0MjBjMCwgMHgyNDA2MDAwMSwgCi0weDMwYzIwMGZmLCAweDEwNDAwMmMyLCAweDAsIDB4ODAwMzlhMiwgCi0weDAsIDB4OTc0MzAyMDIsIDB4OTY0MjAwMDAsIDB4MTQ2MjAyYmMsIAotMHgwLCAweDk3NDMwMjA0LCAweDk2NDIwMDAyLCAweDE0NjIwMmI4LCAKLTB4MCwgMHg5NzQzMDIwNiwgMHg5NjQyMDAwNCwgMHgxNDYyMDJiNCwgCi0weDAsIDB4OTI0MjAwMDAsIDB4M2EyMzAwMDEsIDB4MzA0MjAwMDEsIAotMHg0MzEwMjQsIDB4MTA0MDAwNzQsIDB4MjQwMmZmZmYsIDB4OGUwMzAwMDAsIAotMHgxNDYyMDAwNCwgMHgzNDAyZmZmZiwgMHg5NjAzMDAwNCwgMHgxMDYyMDA2ZiwgCi0weDI0MTUwMDAyLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMiwgCi0weDE0NDAwMDZhLCAweDI0MTUwMDAzLCAweDkyZTIwNGQ4LCAweDE0NDAwMDY3LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsIAotMHgyODQyMDAwNSwgMHgxMDQwMDAyMCwgMHgzODIxLCAweDNjMDIwMDAxLCAKLTB4NTcxMDIxLCAweDhjNDI4M2I0LCAweDE4NDAwMDE2LCAweDI4MjEsIAotMHg5NjA2MDAwMCwgMHg1MjBjMCwgMHg5NzEwMjEsIDB4OTQ0Mjc3N2UsIAotMHgxNDQ2MDAwOSwgMHg5NzEwMjEsIDB4OTQ0Mzc3ODAsIDB4OTYwMjAwMDIsIAotMHgxNDYyMDAwNSwgMHg5NzEwMjEsIDB4OTQ0Mzc3ODIsIDB4OTYwMjAwMDQsIAotMHg1MDYyMDAwOCwgMHgyNDA3MDAwMSwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyODNiNCwgMHgyNGE1MDAwMSwgMHhhMjEwMmEsIDB4NTQ0MGZmZWUsIAotMHg1MjBjMCwgMHgzMGUyMDBmZiwgMHgxNDQwMDA0NCwgMHgyNDE1MDAwMywgCi0weDgwMDNjNTUsIDB4MCwgMHgyNDAyMDIxLCAweGMwMDIyZmUsIAotMHgyNDA1MDAwNiwgMHgzMDQ0MDAxZiwgMHg0MjhjMCwgMHgyZTUxMDIxLCAKLTB4OTQ0MjcyN2MsIDB4MzA0MjQwMDAsIDB4MTQ0MDAyNzEsIDB4YjcxMDIxLCAKLTB4OTQ0MzcyN2UsIDB4OTYwMjAwMDAsIDB4MTQ2MjAwMGIsIDB4NDE4YzAsIAotMHhiNzEwMjEsIDB4OTQ0MzcyODAsIDB4OTYwMjAwMDIsIDB4MTQ2MjAwMDYsIAotMHg0MThjMCwgMHhiNzEwMjEsIDB4OTQ0MzcyODIsIDB4OTYwMjAwMDQsIAotMHgxMDYyMDAyNywgMHg0MThjMCwgMHgyZTMxMDIxLCAweDk0NDI3MjdjLCAKLTB4MzA0MjgwMDAsIDB4MTQ0MDAyNWUsIDB4MmUzMTAyMSwgMHg5NDRkNzI3YywgCi0weDk2MDcwMDAwLCAweGQyOGMwLCAweGI3MTAyMSwgMHg5NDQyNzM3ZSwgCi0weDgwMDNhMDksIDB4MzAyMSwgMHg0MjBjMCwgMHgyZTQxMDIxLCAKLTB4OTQ0MzczN2MsIDB4MmU0MTAyMSwgMHg5NDRkNzM3YywgMHgzMDYzODAwMCwgCi0weDE0NjAwMDEwLCAweGQyOGMwLCAweGI3MTAyMSwgMHg5NDQyNzM3ZSwgCi0weDE0NDdmZmY1LCAweDFhMDIwMjEsIDB4YjcxMDIxLCAweDk0NDM3MzgwLCAKLTB4OTYwMjAwMDIsIDB4NTQ2MmZmZjEsIDB4NDIwYzAsIDB4YjcxMDIxLCAKLTB4OTQ0MzczODIsIDB4OTYwMjAwMDQsIDB4NTQ2MmZmZWMsIDB4NDIwYzAsIAotMHgyNDA2MDAwMSwgMHgzMGMyMDBmZiwgMHgxMDQwMDIzZCwgMHgwLCAKLTB4ODAwM2ExYywgMHgyNDE1MDAwMywgMHgyNDE1MDAwMSwgMHg4ZjQyMDI2MCwgCi0weDUzMTAyYiwgMHgxMDQwMDAzNiwgMHgwLCAweDhmODMwMGU0LCAKLTB4OGY4MjAwZTAsIDB4MTA2MjAwMDMsIDB4MjQ2MzAwMDgsIDB4YWY4MzAwZTQsIAotMHhhZjgzMDBlOCwgMHg4ZWU0MDBjMCwgMHg4ZWU1MDBjNCwgMHgyNjAxODIxLCAKLTB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgCi0weDg2MjAyMSwgMHhhZWU0MDBjMCwgMHhhZWU1MDBjNCwgMHg4ZWUyMDA1OCwgCi0weDI0NDIwMDAxLCAweGFlZTIwMDU4LCAweDhlZTIwMDU4LCAweDhlZTIwMDdjLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAwN2MsIDB4OGVlMjAwN2MsIDB4OGY4MjAwZTAsIAotMHhhZmEyMDAxMCwgMHg4ZjgyMDBlNCwgMHgzYzA0MDAwMSwgMHgyNDg0NThjMCwgCi0weGFmYTIwMDE0LCAweDhmYTYwMDE4LCAweDhmYTcwMDFjLCAweDNjMDUwMDA2LCAKLTB4YzAwMjQwMywgMHgzNGE1ZjIwMywgMHg4MDAzYzViLCAweDAsIAotMHg4ZWUyNTI0MCwgMHhhZmEyMDAxMCwgMHg4ZWUyNTI0NCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1OGNjLCAweGFmYTIwMDE0LCAweDhlZTYwZTEwLCAweDhlZTcwZTE4LCAKLTB4M2MwNTAwMDYsIDB4YzAwMjQwMywgMHgzNGE1ZjIwMiwgMHg4ZWUyMDFjMCwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWMwLCAweDgwMDNjMDIsIDB4OGVlMjAxYzAsIAotMHg5NmUyMDQ2OCwgMHg1MzEwMmIsIDB4NTQ0MDAwMDEsIDB4M2MxNjgwMDAsIAotMHgxMjYwMDFjYiwgMHgzYzBlMDAxZiwgMHgzNWNlZmZmZiwgMHgzYzBmZmZmNSwgCi0weDM1ZWYxMDAwLCAweDI0MWUwMDQwLCAweDhlZTI3MjRjLCAweDhmNDMwMjgwLCAKLTB4MjQ0MjAwMDEsIDB4MzA0MjA3ZmYsIDB4MTA2MjAxOWUsIDB4MCwgCi0weDEyYzAwMDEyLCAweDAsIDB4OGVlMzUyNDAsIDB4OGVlMjUyNDQsIAotMHgxMDYyMDAwYSwgMHgyNmY4NTI0NCwgMHg4ZWY0NTI0NCwgMHhhZmI4MDAyNCwgCi0weDhlZTM1MjQ0LCAweDIxMTQwLCAweDI0NDI1MjQ4LCAweDJlMjg4MjEsIAotMHgyNDYzMDAwMSwgMHg4MDAzYTg1LCAweDMwNmQwMGZmLCAweDhlZTIwMWUwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxZTAsIDB4OGVlMjAxZTAsIDB4OGVlMzBlMTAsIAotMHg4ZWUyMGUxOCwgMHgxMDYyZmZjYSwgMHgyNmY4MGUxOCwgMHg4ZWY0MGUxOCwgCi0weGIwMjEsIDB4YWZiODAwMjQsIDB4OGVlMzBlMTgsIDB4MjExNDAsIAotMHgyNDQyMGUyMCwgMHgyZTI4ODIxLCAweDI0NjMwMDAxLCAweDMwNmQwMWZmLCAKLTB4OTZlMjA0NmEsIDB4MzA0MjAwMTAsIDB4MTA0MDAwMTgsIDB4MzQwMjgxMDAsIAotMHg5NjQzMDAwYywgMHgxNDYyMDAxNSwgMHgwLCAweDNjMDIwMDAxLCAKLTB4NTcxMDIxLCAweDkwNDI4M2MwLCAweDE0NDAwMDEwLCAweDAsIAotMHg5NjQyMDAwZSwgMHhhNjIyMDAxNiwgMHg4ZTQyMDAwOCwgMHg4ZTQzMDAwNCwgCi0weDhlNDQwMDAwLCAweDI2NzNmZmZjLCAweGFlNDIwMDBjLCAweGFlNDMwMDA4LCAKLTB4YWU0NDAwMDQsIDB4OTYyMjAwMGUsIDB4MjYxMDAwMDQsIDB4MjQxODAwMDEsIAotMHhhM2I4MDAyZiwgMHgzNDQyMDIwMCwgMHhhNjIyMDAwZSwgMHg4ZTIyMDAwMCwgCi0weDhlMjMwMDA0LCAweDNjMDQwMDAxLCAweDM0ODQzODAwLCAweDIwMDMwMjEsIAotMHgzMDZhMDAwNywgMHgyMGE4MDIzLCAweDM2NDEwMjEsIDB4MjAyMTAyYiwgCi0weDEwNDAwMDA1LCAweDI2YTk4MjEsIDB4MjA0MTAyMywgMHgzNjIxODIzLCAKLTB4M2MwMjAwMjAsIDB4NDM4MDIzLCAweDI2NjIwMDA3LCAweDk2MjMwMDBhLCAKLTB4MjQxOGZmZjgsIDB4NThjODI0LCAweDZhMTgyMSwgMHg3OTEwMmIsIAotMHgxMDQwMDAwMiwgMHgzMjA2MDIxLCAweDYwNjAyMSwgMHgxODAxODIxLCAKLTB4MjQ2MjAwMDcsIDB4MjQxOGZmZjgsIDB4NTg2MDI0LCAweDI2YzEwMmIsIAotMHgxNDQwMDAwNCwgMHgxOTMyODIzLCAweDE4MzI4MjMsIDB4ODAwM2FjMywgCi0weGMzMTAyMSwgMHhkMzEwMjEsIDB4NGEyMDIzLCAweDFjNDEwMmIsIAotMHg1NDQwMDAwMSwgMHg4ZjIwMjEsIDB4MjU0MjAwNDAsIDB4NGMxMDJiLCAKLTB4MTQ0MDAwMzUsIDB4NTgyMSwgMHg5NGMzMDAwYywgMHgyNDAyMDgwMCwgCi0weDU0NjIwMDMyLCAweGFlMjYwMDE4LCAweDNjMDIwMDAxLCAweDU3MTAyMSwgCi0weDkwNDI4M2MwLCAweDU0NDAwMDJkLCAweGFlMjYwMDE4LCAweDI0YzIwMDE3LCAKLTB4MWMyMTAyYiwgMHgxMDQwMDAxMywgMHgwLCAweDNjMDJmZmY1LCAKLTB4NDYxMDIxLCAweDkwNDIxMDE3LCAweDM4NDMwMDA2LCAweDJjNjMwMDAxLCAKLTB4Mzg0MjAwMTEsIDB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDE0LCAKLTB4MjRjMjAwMTAsIDB4MWMyMTAyYiwgMHgxMDQwMDAwZSwgMHgwLCAKLTB4M2MwYmZmZjUsIDB4MTY2NTgyMSwgMHg5NTZiMTAxMCwgMHg4MDAzYWY0LCAKLTB4MjU2MjAwMGUsIDB4OTBjMjAwMTcsIDB4Mzg0MzAwMDYsIDB4MmM2MzAwMDEsIAotMHgzODQyMDAxMSwgMHgyYzQyMDAwMSwgMHg2MjE4MjUsIDB4MTA2MDAwMDUsIAotMHgxNjAxODIxLCAweDk0Y2IwMDEwLCAweDI1NjIwMDBlLCAweDRhNTgyMSwgCi0weDE2MDE4MjEsIDB4MjQ2MjAwMDcsIDB4MjQxOGZmZjgsIDB4NTg1ODI0LCAKLTB4YzMxMDIxLCAweDRhMjAyMywgMHgxYzQxMDJiLCAweDEwNDAwMDAyLCAKLTB4MTYzMjgyMywgMHg4ZjIwMjEsIDB4YWUyNjAwMTgsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OTA0MjgzYzAsIDB4MjEwMmIsIDB4MjE2YzAsIAotMHgxNTYwMDAwMiwgMHhhZmEyMDA0NCwgMHgxODA1ODIxLCAweDMwODIwMDAxLCAKLTB4MTA0MDAwMDcsIDB4NDAyMSwgMHg5MDg4MDAwMCwgMHgyNDg0MDAwMSwgCi0weDFjNDEwMmIsIDB4MTA0MDAwMDIsIDB4MjRhNWZmZmYsIDB4OGYyMDIxLCAKLTB4NTBhMDAwMTIsIDB4ODFjMDIsIDB4MmNhMjAwMDIsIDB4NTQ0MDAwMDksIAotMHgyNGE1ZmZmZiwgMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHgxMDI0MDIxLCAKLTB4MWM0MTAyYiwgMHgxMDQwMDAwNiwgMHgyNGE1ZmZmZSwgMHg4MDAzYjIxLCAKLTB4OGYyMDIxLCAweDkwODIwMDAwLCAweDIxMjAwLCAweDEwMjQwMjEsIAotMHgxNGEwZmZmMiwgMHgyY2EyMDAwMiwgMHg4MWMwMiwgMHgzMTAyZmZmZiwgCi0weDYyNDAyMSwgMHgzMTA4ZmZmZiwgMHgxNDAyODIxLCAweDExNDAwMDExLCAKLTB4MjAwMjAyMSwgMHgyY2EyMDAwMiwgMHg1NDQwMDAwOSwgMHgyNGE1ZmZmZiwgCi0weDk0ODIwMDAwLCAweDI0ODQwMDAyLCAweDEwMjQwMjEsIDB4MWM0MTAyYiwgCi0weDEwNDAwMDA2LCAweDI0YTVmZmZlLCAweDgwMDNiMzgsIDB4OGYyMDIxLCAKLTB4OTA4MjAwMDAsIDB4MjEyMDAsIDB4MTAyNDAyMSwgMHgxNGEwZmZmMiwgCi0weDJjYTIwMDAyLCAweDgxYzAyLCAweDMxMDJmZmZmLCAweDYyNDAyMSwgCi0weDgxYzAyLCAweDMxMDJmZmZmLCAweDhmODkwMTIwLCAweDYyNDAyMSwgCi0weDI3NjIzODAwLCAweDI1MjMwMDIwLCAweDYyMTAyYiwgMHgxNDQwMDAwMiwgCi0weDMxMDhmZmZmLCAweDI3NjMzMDAwLCAweDhmODIwMTI4LCAweDEwNjIwMDA0LCAKLTB4MCwgMHg4ZjgyMDEyNCwgMHgxNDYyMDAwNywgMHgxNDAyODIxLCAKLTB4OGVlMjAxYTQsIDB4MzgyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgCi0weDgwMDNiYzksIDB4OGVlMjAxYTQsIDB4OGUyNjAwMDAsIDB4OGUyNzAwMDQsIAotMHg4MTQwMCwgMHgzNDQ4MDAwYiwgMHhhZDMwMDAwOCwgMHhhNTJiMDAwZSwgCi0weGFkMjgwMDE4LCAweDhmYjgwMDQ0LCAweDIwMjEsIDB4Mjk2MTAyNSwgCi0weDU4MTAyNSwgMHhhZDIyMDAxYywgMHhlNTEwMmIsIDB4ZTUzODIzLCAKLTB4YzQzMDIzLCAweGMyMzAyMywgMHhhZDI2MDAwMCwgMHhhZDI3MDAwNCwgCi0weDhlZTIwNGMwLCAweGFkMjIwMDEwLCAweGFmODMwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwNWYsIDB4MjQwNzAwMDEsIDB4MjUwMmZmZWUsIDB4MmM0MjAwMDIsIAotMHgxNDQwMDAwMywgMHgyNDAyMDAxMSwgMHgxNTAyMDAyNCwgMHgwLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDhjODMwMDAwLCAweDI0MDIwMDEyLCAweDE0NjIwMDBmLCAweDAsIAotMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAwYiwgMHgwLCAKLTB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIAotMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDVlMDAyYSwgMHgwLCAKLTB4ODAwM2JhOCwgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAKLTB4NTA1ZTAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgCi0weGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAKLTB4MmUyMjAyMSwgMHg4MDAzYmM2LCAweDI0MDIwMDEyLCAweDhlZTI0ZTMwLCAKLTB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgCi0weDI0MDIwMDA3LCAweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIAotMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LCAKLTB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIAotMHgyNDQyMDAwMSwgMHgxMDVlMDAwNywgMHgwLCAweDhlZTI0ZTM0LCAKLTB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAzYmI0LCAKLTB4MCwgMHgxNDYwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIAotMHgyYzQyMDAxMSwgMHg1MDQwMDAxMiwgMHhhYzgwMDAwMCwgMHg4MDAzYmM5LCAKLTB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHg1MDVlMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIAotMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAKLTB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIAotMHgxNGUwMDAxOSwgMHgzYzA1MDAwNiwgMHgzYzA0MDAwMSwgMHgyNDg0NTg5MCwgCi0weDhlMjIwMDE4LCAweDM0YTVmMjA5LCAweGFmYTIwMDEwLCAweDhlMjIwMDAwLCAKLTB4OGUyMzAwMDQsIDB4MjIwMzAyMSwgMHgxNjAzODIxLCAweGMwMDI0MDMsIAotMHhhZmEzMDAxNCwgMHg5M2EyMDAyZiwgMHgxMDQwMDAyYSwgMHgzNDAyODEwMCwgCi0weDhlNDMwMDA0LCAweDhlNDQwMDA4LCAweDhlNDUwMDBjLCAweGE2NDIwMDBjLCAKLTB4YWU0MzAwMDAsIDB4YWU0NDAwMDQsIDB4YWU0NTAwMDgsIDB4OTYyMjAwMTYsIAotMHg4MDAzYzAyLCAweGE2NDIwMDBlLCAweDE1OTkwMDBhLCAweDI2YTE4MjMsIAotMHg5NjIyMDAwZSwgMHhhNjIzMDAwYSwgMHgzNDQyMDAwNCwgMHhhNjIyMDAwZSwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwODNjMCwgMHg4MDAzYmZmLCAKLTB4OTgyMSwgMHg5NjI0MDAwYSwgMHg4MzEwMmIsIDB4NTQ0MDAwMDEsIAotMHg4MDE4MjEsIDB4MjQwMjAwMDEsIDB4YTYyMzAwMGEsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4YTAyMjgzYzAsIDB4OTYyMjAwMGEsIDB4NGExODIxLCAKLTB4MjAzODAyMSwgMHgxZDAxMDJiLCAweDU0NDAwMDAxLCAweDIwZjgwMjEsIAotMHgyNjM5ODIzLCAweGIwMjEsIDB4OGZiODAwMjQsIDB4MTY2MGZlNWUsIAotMHhhZjBkMDAwMCwgMHgxMjYwMDAyMiwgMHgwLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGFjMzM4M2M0LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgCi0weGFjMzA4M2M4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzMyODNjYywgCi0weDkzYTIwMDJmLCAweDEwNDAwMDA4LCAweDAsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OGM0MjgzY2MsIDB4MjQ0MjAwMDQsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4YWMyMjgzY2MsIDB4OGY0MzAyODAsIDB4OGVlMjcyNGMsIAotMHgxNDYyMDAwNiwgMHgwLCAweDhlZTIwMWM0LCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYzQsIDB4ODAwM2M1YiwgMHg4ZWUyMDFjNCwgMHg4ZWUyMDFiYywgCi0weDI0NDIwMDAxLCAweGFlZTIwMWJjLCAweDgwMDNjNWIsIDB4OGVlMjAxYmMsIAotMHg5N2E0MDAxZSwgMHgyNDg0ZmZmYywgMHg4MDE4MjEsIDB4OGVlNDAwYzAsIAotMHg4ZWU1MDBjNCwgMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIAotMHg4MjIwMjEsIDB4ODYyMDIxLCAweDI0MDIwMDAyLCAweGFlZTQwMGMwLCAKLTB4YWVlNTAwYzQsIDB4MTJhMjAwMGYsIDB4MmFhMjAwMDMsIDB4MTQ0MDAwMTcsIAotMHgyNDAyMDAwMywgMHgxNmEyMDAxNSwgMHgwLCAweDhlZTIwMGQwLCAKLTB4OGVlMzAwZDQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAKLTB4YWVlMjAwZDAsIDB4YWVlMzAwZDQsIDB4OGVlMjAwZDAsIDB4ODAwM2M1NSwgCi0weDhlZTMwMGQ0LCAweDhlZTIwMGQ4LCAweDhlZTMwMGRjLCAweDI0NjMwMDAxLCAKLTB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGQ4LCAweGFlZTMwMGRjLCAKLTB4OGVlMjAwZDgsIDB4ODAwM2M1NSwgMHg4ZWUzMDBkYywgMHg4ZWUyMDBjOCwgCi0weDhlZTMwMGNjLCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAweDQ0MTAyMSwgCi0weGFlZTIwMGM4LCAweGFlZTMwMGNjLCAweDhlZTIwMGM4LCAweDhlZTMwMGNjLCAKLTB4OGY4MzAwZTQsIDB4OGY4MjAwZTAsIDB4MTA2MjAwMDMsIDB4MjQ2MzAwMDgsIAotMHhhZjgzMDBlNCwgMHhhZjgzMDBlOCwgMHg4ZmJmMDA2OCwgMHg4ZmJlMDA2NCwgCi0weDhmYjYwMDYwLCAweDhmYjUwMDVjLCAweDhmYjQwMDU4LCAweDhmYjMwMDU0LCAKLTB4OGZiMjAwNTAsIDB4OGZiMTAwNGMsIDB4OGZiMDAwNDgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDcwLCAweDI3YmRmZmUwLCAweGFmYmYwMDE4LCAweDhlZTMwZTE0LCAKLTB4OGVlMjBlMGMsIDB4MTA2MjAwNzQsIDB4MCwgMHg4ZWUzMGUwYywgCi0weDhlZTIwZTE0LCAweDYyMjAyMywgMHg0ODIwMDAxLCAweDI0ODQwMjAwLCAKLTB4OGVlMzBlMTgsIDB4OGVlMjBlMTQsIDB4NDMxMDJiLCAweDE0NDAwMDA0LCAKLTB4MjQwMjAyMDAsIDB4OGVlMzBlMTQsIDB4ODAwM2M3ZCwgMHg0MzE4MjMsIAotMHg4ZWUyMGUxOCwgMHg4ZWUzMGUxNCwgMHg0MzEwMjMsIDB4MjQ0M2ZmZmYsIAotMHg4MDQ4MjEsIDB4NjkxMDJhLCAweDU0NDAwMDAxLCAweDYwNDgyMSwgCi0weDhmODcwMTAwLCAweDI3NjIzMDAwLCAweDI0ZTgwMDIwLCAweDEwMjEwMmIsIAotMHg1MDQwMDAwMSwgMHgyNzY4MjgwMCwgMHg4ZjgyMDEwOCwgMHgxMTAyMDAwNCwgCi0weDAsIDB4OGY4MjAxMDQsIDB4MTUwMjAwMDcsIDB4MTAyMSwgCi0weDhlZTIwMWE4LCAweDIwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIAotMHg4MDAzY2JmLCAweDhlZTIwMWE4LCAweDhlZTQwZTE0LCAweDQyMTQwLCAKLTB4ODAxODIxLCAweDhlZTQwNDYwLCAweDhlZTUwNDY0LCAweGEzMjgyMSwgCi0weGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFjZTQwMDAwLCAKLTB4YWNlNTAwMDQsIDB4OGVlMzBlMTQsIDB4OTExNDAsIDB4YTRlMjAwMGUsIAotMHgyNDAyMDAwMiwgMHhhY2UyMDAxOCwgMHgzMTk0MCwgMHgyNDYzMGUyMCwgCi0weDJlMzEwMjEsIDB4YWNlMjAwMDgsIDB4OGVlMjBlMTQsIDB4YWNlMjAwMWMsIAotMHg4ZWUyMDRjYywgMHhhY2UyMDAxMCwgMHhhZjg4MDEwMCwgMHg5MmUyMDRlYywgCi0weDE0NDAwMDExLCAweDI0MDQwMDAxLCAweDhlZTI0ZTI4LCAweDI0MDMwMDQwLCAKLTB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwgCi0weDI0NDIwMDAxLCAweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAKLTB4MjQ0MjRlMzgsIDB4MmUyMTgyMSwgMHgyNDAyMDAwMiwgMHhhYzYyMDAwMCwgCi0weDI0MDIwMDAxLCAweGFjNjIwMDA0LCAweDE0ODAwMDBlLCAweDI0MDMwMDQwLCAKLTB4OGVlMjBlMTQsIDB4YWZhMjAwMTAsIDB4OGVlMjBlMTgsIDB4M2MwNTAwMDcsIAotMHhhZmEyMDAxNCwgMHg4ZWU2MGUwYywgMHg4ZWU3MGUxMCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1OGQ0LCAweGMwMDI0MDMsIDB4MzRhNWYwMDEsIDB4ODAwM2NkZCwgCi0weDAsIDB4OGVlMjA1MDAsIDB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIAotMHgxMDIxLCAweDhlZTIwNTAwLCAweDI0NDIwMDAxLCAweGFlZTIwNTAwLCAKLTB4OGVlMjA1MDAsIDB4MjEwODAsIDB4NTcxMDIxLCAweGFjNDkwNTA4LCAKLTB4OGVlMjBlMTQsIDB4NDkxMDIxLCAweDMwNDIwMWZmLCAweGFlZTIwZTE0LCAKLTB4OGVlMzBlMTQsIDB4OGVlMjBlMGMsIDB4MTQ2MjAwMDUsIDB4MCwgCi0weDhmODIwMDYwLCAweDI0MDNmZGZmLCAweDQzMTAyNCwgMHhhZjgyMDA2MCwgCi0weDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZTAsIAotMHhhZmJmMDAxOCwgMHg4ZWUzNTIzYywgMHg4ZWUyNTIzOCwgMHgxMDYyMDA3NCwgCi0weDAsIDB4OGVlMzUyMzgsIDB4OGVlMjUyM2MsIDB4NjIyMDIzLCAKLTB4NDgyMDAwMSwgMHgyNDg0MDEwMCwgMHg4ZWUzNTI0NCwgMHg4ZWUyNTIzYywgCi0weDQzMTAyYiwgMHgxNDQwMDAwNCwgMHgyNDAyMDEwMCwgMHg4ZWUzNTIzYywgCi0weDgwMDNjZmYsIDB4NDMxODIzLCAweDhlZTI1MjQ0LCAweDhlZTM1MjNjLCAKLTB4NDMxMDIzLCAweDI0NDNmZmZmLCAweDgwNDgyMSwgMHg2OTEwMmEsIAotMHg1NDQwMDAwMSwgMHg2MDQ4MjEsIDB4OGY4NzAxMDAsIDB4Mjc2MjMwMDAsIAotMHgyNGU4MDAyMCwgMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgyODAwLCAKLTB4OGY4MjAxMDgsIDB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEwNCwgCi0weDE1MDIwMDA3LCAweDEwMjEsIDB4OGVlMjAxYTgsIDB4MjAyMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDNkNDEsIDB4OGVlMjAxYTgsIAotMHg4ZWU0NTIzYywgMHg0MjE0MCwgMHg4MDE4MjEsIDB4OGVlNDA0NzAsIAotMHg4ZWU1MDQ3NCwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgCi0weDg2MjAyMSwgMHhhY2U0MDAwMCwgMHhhY2U1MDAwNCwgMHg4ZWUzNTIzYywgCi0weDkxMTQwLCAweGE0ZTIwMDBlLCAweDI0MDIwMDAzLCAweGFjZTIwMDE4LCAKLTB4MzE5NDAsIDB4MjQ2MzUyNDgsIDB4MmUzMTAyMSwgMHhhY2UyMDAwOCwgCi0weDhlZTI1MjNjLCAweGFjZTIwMDFjLCAweDhlZTIwNGNjLCAweGFjZTIwMDEwLCAKLTB4YWY4ODAxMDAsIDB4OTJlMjA0ZWMsIDB4MTQ0MDAwMTEsIDB4MjQwNDAwMDEsIAotMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgCi0weDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIAotMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIxODIxLCAKLTB4MjQwMjAwMDMsIDB4YWM2MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM2MjAwMDQsIAotMHgxNDgwMDAwZSwgMHgyNDAzMDA0MCwgMHg4ZWUyNTIzYywgMHhhZmEyMDAxMCwgCi0weDhlZTI1MjQ0LCAweDNjMDUwMDA3LCAweGFmYTIwMDE0LCAweDhlZTY1MjM4LCAKLTB4OGVlNzUyNDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4ZTAsIDB4YzAwMjQwMywgCi0weDM0YTVmMDEwLCAweDgwMDNkNWYsIDB4MCwgMHg4ZWUyMDUwMCwgCi0weDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjA1MDAsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDUwMCwgMHg4ZWUyMDUwMCwgMHgyMTA4MCwgCi0weDU3MTAyMSwgMHhhYzQ5MDUwOCwgMHg4ZWUyNTIzYywgMHg0OTEwMjEsIAotMHgzMDQyMDBmZiwgMHhhZWUyNTIzYywgMHg4ZWUzNTIzYywgMHg4ZWUyNTIzOCwgCi0weDE0NjIwMDA1LCAweDAsIDB4OGY4MjAwNjAsIDB4MjQwM2ZlZmYsIAotMHg0MzEwMjQsIDB4YWY4MjAwNjAsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDIwLCAweDhmODIwMTIwLCAweDhlZTM0ZTM0LCAweDhmODIwMTI0LCAKLTB4OGY4NjAxMjgsIDB4MjQwMjAwNDAsIDB4MjQ2MzAwMDEsIDB4NTA2MjAwMDMsIAotMHgxMDIxLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweGFlZTI0ZTM0LCAKLTB4OGVlMjRlMzQsIDB4OGVlNDRlMzQsIDB4OGVlMzRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgxNDgzMDAwNywgMHgyZTIyODIxLCAweDhmODIwMTI4LCAKLTB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4ODAwM2Q5MiwgCi0weGFjYTAwMDAwLCAweDhlZTI0ZTM0LCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAKLTB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgCi0weDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjI4MjEsIDB4OGNhMjAwMDQsIAotMHg4ZjgzMDEyOCwgMHgyMTE0MCwgMHg2MjE4MjEsIDB4YWY4MzAxMjgsIAotMHhhY2EwMDAwMCwgMHg4Y2MyMDAxOCwgMHgyNDQzZmZmZSwgMHgyYzYyMDAxMiwgCi0weDEwNDAwMDA4LCAweDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weDhjMjI1OGYwLCAweDQwMDAwOCwgMHgwLCAweDI0MDIwMDAxLCAKLTB4YWVlMjRlMjQsIDB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmM4LCAKLTB4YWZiZjAwMzAsIDB4YWZiNTAwMmMsIDB4YWZiNDAwMjgsIDB4YWZiMzAwMjQsIAotMHhhZmIyMDAyMCwgMHhhZmIxMDAxYywgMHhhZmIwMDAxOCwgMHg4ZjgzMDEyOCwgCi0weDhmODIwMTI0LCAweDEwNjIwMmIwLCAweDk4MjEsIDB4M2MxMTAwMWYsIAotMHgzNjMxZmZmZiwgMHgzYzEyZmZmNSwgMHgzNjUyMTAwMCwgMHgyNDE1MDAxMiwgCi0weDI0MTQwMDQwLCAweDhmOGMwMTI4LCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAKLTB4YWY4MjAxMjgsIDB4OTE4MjAwMWIsIDB4OGY4MzAxMjgsIDB4MjQ0M2ZmZmUsIAotMHgyYzYyMDAxMiwgMHgxMDQwMDI5YywgMHgzMTA4MCwgMHgzYzAxMDAwMSwgCi0weDIyMDgyMSwgMHg4YzIyNTk0OCwgMHg0MDAwMDgsIDB4MCwgCi0weDhmNDIwMjE4LCAweDMwNDIwMTAwLCAweDEwNDAwMDA3LCAweDAsIAotMHg5NTgzMDAxNiwgMHg5NTgyMDAxOCwgMHg2MjE4MjMsIDB4MzE0MDIsIAotMHg0MzEwMjEsIDB4YTU4MjAwMTYsIDB4OGQ4MjAwMWMsIDB4M2MwMzgwMDAsIAotMHgzMDQ0ZmZmZiwgMHg0MzY4MjQsIDB4M2MwMzA4MDAsIDB4NDMxODI0LCAKLTB4MTFhMDAwMDQsIDB4YWQ4NDAwMWMsIDB4NDExNDAsIDB4ODAwM2RkOCwgCi0weDI0NDI1MjQ4LCAweDQxMTQwLCAweDI0NDIwZTIwLCAweDJlMjU4MjEsIAotMHg5NTYyMDAwZSwgMHgzMDQyZmZmYywgMHgxMDYwMDAwNCwgMHhhNTYyMDAwZSwgCi0weDk1ODQwMDE2LCAweDgwMDNlYzAsIDB4MCwgMHg4ZDY5MDAxOCwgCi0weDQwMjEsIDB4OTUyYTAwMDAsIDB4MjUyOTAwMDIsIDB4OTUyNzAwMDAsIAotMHgyNTI5MDAwMiwgMHg5NTI2MDAwMCwgMHgyNTI5MDAwMiwgMHg5NTI1MDAwMCwgCi0weDI1MjkwMDAyLCAweDk1MjQwMDAwLCAweDI1MjkwMDAyLCAweDk1MjMwMDAwLCAKLTB4MjUyOTAwMDIsIDB4OTUyMjAwMDAsIDB4MjUyOTAwMDIsIDB4MTQ3NTAyMSwgCi0weDE0NjUwMjEsIDB4MTQ1NTAyMSwgMHgxNDQ1MDIxLCAweDE0MzUwMjEsIAotMHgxNDI1MDIxLCAweGExYzAyLCAweDMxNDJmZmZmLCAweDYyNTAyMSwgCi0weGExYzAyLCAweDMxNDJmZmZmLCAweDYyNTAyMSwgMHg5NmUyMDQ2YSwgCi0weDMxNGVmZmZmLCAweDMwNDIwMDAyLCAweDEwNDAwMDQ0LCAweDUwMjEsIAotMHgyNTIyMDAxNCwgMHgyMjIxMDJiLCAweDEwNDAwMDE0LCAweDEyMDE4MjEsIAotMHgyNDA1MDAwYSwgMHgyMDIxLCAweDIyMzEwMmIsIDB4NTQ0MDAwMDEsIAotMHg3MjE4MjEsIDB4OTQ2MjAwMDAsIDB4MjQ2MzAwMDIsIDB4MjRhNWZmZmYsIAotMHgxNGEwZmZmOSwgMHg4MjIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsIAotMHg2MjIwMjEsIDB4NDE0MDIsIDB4MzA4M2ZmZmYsIDB4NDMxMDIxLCAKLTB4MzA0MmZmZmYsIDB4ODAwM2UzMywgMHgxNDI1MDIxLCAweDk1MmEwMDAwLCAKLTB4MjUyOTAwMDIsIDB4OTUyODAwMDAsIDB4MjUyOTAwMDIsIDB4OTUyNzAwMDAsIAotMHgyNTI5MDAwMiwgMHg5NTI2MDAwMCwgMHgyNTI5MDAwMiwgMHg5NTI1MDAwMCwgCi0weDI1MjkwMDAyLCAweDk1MjMwMDAwLCAweDI1MjkwMDAyLCAweDk1MjIwMDAwLCAKLTB4MjUyOTAwMDIsIDB4OTUyNDAwMDAsIDB4MjUyOTAwMDIsIDB4MTQ4NTAyMSwgCi0weDE0NzUwMjEsIDB4MTQ2NTAyMSwgMHgxNDU1MDIxLCAweDE0MzUwMjEsIAotMHgxNDI1MDIxLCAweDk1MjIwMDAwLCAweDk1MjMwMDAyLCAweDE0NDUwMjEsIAotMHgxNDI1MDIxLCAweDE0MzUwMjEsIDB4YTFjMDIsIDB4MzE0MmZmZmYsIAotMHg2MjUwMjEsIDB4YTFjMDIsIDB4MzE0MmZmZmYsIDB4NjI1MDIxLCAKLTB4MzE0OGZmZmYsIDB4NTEwMDAwMDEsIDB4MzQwOGZmZmYsIDB4OGQ2MjAwMTgsIAotMHg5NDQzMDAwYywgMHgyNDAyMDgwMCwgMHg1NDYyMDAwNSwgMHhhNTY4MDAxMCwgCi0weDk1NjIwMDBlLCAweDM0NDIwMDAyLCAweGE1NjIwMDBlLCAweGE1NjgwMDEwLCAKLTB4OTZlMjA0NmEsIDB4MjgyMSwgMHgzMDQyMDAwOCwgMHgxNDQwMDA1NiwgCi0weDMwMjEsIDB4OGQ2MzAwMTgsIDB4MjQ2MjAwMjQsIDB4MjIyMTAyYiwgCi0weDEwNDAwMDM0LCAweDI0NjkwMDEwLCAweDIyOTEwMmIsIDB4NTQ0MDAwMDEsIAotMHgxMzI0ODIxLCAweDk1MjUwMDAwLCAweDI0NjkwMDE0LCAweDIyOTEwMmIsIAotMHgxMDQwMDAwMiwgMHgyNGE1ZmZlYywgMHgxMzI0ODIxLCAweDk1MjIwMDAwLCAKLTB4MzA0MjBmZmYsIDB4MTQ0MDAwMDMsIDB4MjUyOTAwMDIsIDB4ODAwM2U2MCwgCi0weDI0MTMwMDAxLCAweDk4MjEsIDB4YTAzMDIxLCAweDIyOTEwMmIsIAotMHg1NDQwMDAwMSwgMHgxMzI0ODIxLCAweDkxMjIwMDAxLCAweDI1MjkwMDAyLCAKLTB4YTIyODIxLCAweDIyOTEwMmIsIDB4NTQ0MDAwMDEsIDB4MTMyNDgyMSwgCi0weDI1MjkwMDAyLCAweDIyOTEwMmIsIDB4NTQ0MDAwMDEsIDB4MTMyNDgyMSwgCi0weDk1MjIwMDAwLCAweDI1MjkwMDAyLCAweGEyMjgyMSwgMHgyMjkxMDJiLCAKLTB4NTQ0MDAwMDEsIDB4MTMyNDgyMSwgMHg5NTIyMDAwMCwgMHgyNTI5MDAwMiwgCi0weGEyMjgyMSwgMHgyMjkxMDJiLCAweDU0NDAwMDAxLCAweDEzMjQ4MjEsIAotMHg5NTIyMDAwMCwgMHgyNTI5MDAwMiwgMHhhMjI4MjEsIDB4MjI5MTAyYiwgCi0weDU0NDAwMDAxLCAweDEzMjQ4MjEsIDB4OTUyMjAwMDAsIDB4ODAwM2U5OSwgCi0weGEyMjgyMSwgMHg5NDY1MDAxMCwgMHg5NDYyMDAxNCwgMHgyNDY5MDAxNiwgCi0weDMwNDIwZmZmLCAweDE0NDAwMDAzLCAweDI0YTVmZmVjLCAweDgwMDNlOGMsIAotMHgyNDEzMDAwMSwgMHg5ODIxLCAweGEwMzAyMSwgMHg5MTIzMDAwMSwgCi0weDI1MjkwMDA0LCAweDk1MjIwMDAwLCAweDI1MjkwMDAyLCAweDk1MjQwMDAwLCAKLTB4MjUyOTAwMDIsIDB4YTMyODIxLCAweGEyMjgyMSwgMHg5NTIyMDAwMCwgCi0weDk1MjMwMDAyLCAweGE0MjgyMSwgMHhhMjI4MjEsIDB4YTMyODIxLCAKLTB4NTFjMDIsIDB4MzBhMmZmZmYsIDB4NjIyODIxLCAweDUxYzAyLCAKLTB4MzBhMmZmZmYsIDB4NjIyODIxLCAweDk2ZTIwNDZhLCAweDMwNDIwMDAxLCAKLTB4MTA0MDAwMWUsIDB4MjAyMSwgMHg5NTgyMDAxNiwgMHg0ZTIwMjMsIAotMHg0MTQwMiwgMHg4MjIwMjEsIDB4MzI2MjAwZmYsIDB4NTA0MDAwMDIsIAotMHg4NjIwMjEsIDB4ODUyMDIxLCAweDQxNDAyLCAweDgyMjAyMSwgCi0weDMwODRmZmZmLCAweDUwODAwMDAxLCAweDM0MDRmZmZmLCAweDhkNjIwMDE4LCAKLTB4MjQ0MzAwMTcsIDB4MjIzMTAyYiwgMHg1NDQwMDAwMSwgMHg3MjE4MjEsIAotMHg5MDYyMDAwMCwgMHgzODQzMDAxMSwgMHgyYzYzMDAwMSwgMHgzODQyMDAwNiwgCi0weDJjNDIwMDAxLCAweDYyMTgyNSwgMHgxMDYwMDAwNCwgMHgwLCAKLTB4OTU2MjAwMGUsIDB4MzQ0MjAwMDEsIDB4YTU2MjAwMGUsIDB4OTU2MjAwMGUsIAotMHgyNDBhMDAwMiwgMHgzMDQyMDAwNCwgMHgxMDQwMDAwMiwgMHhhNTY0MDAxMiwgCi0weDI0MGEwMDA0LCAweDhmODgwMTIwLCAweDI3NjIzODAwLCAweDI1MDkwMDIwLCAKLTB4MTIyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY5MzAwMCwgMHg4ZjgyMDEyOCwgCi0weDExMjIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTUyMjAwMDcsIAotMHgyNDA0MDAyMCwgMHg4ZWUyMDFhNCwgMHg4MDIxLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxYTQsIDB4ODAwM2Y0ZiwgMHg4ZWUyMDFhNCwgMHg4ZWU1NzI0YywgCi0weDhlZTYwNDkwLCAweDhlZTcwNDk0LCAweGFkMGIwMDA4LCAweGE1MDQwMDBlLCAKLTB4YWQwYTAwMTgsIDB4NTI5NDAsIDB4YTAxODIxLCAweDEwMjEsIAotMHhlMzM4MjEsIDB4ZTMyMDJiLCAweGMyMzAyMSwgMHhjNDMwMjEsIAotMHhhZDA2MDAwMCwgMHhhZDA3MDAwNCwgMHg4ZWUyNzI0YywgMHg0ZDEwMjUsIAotMHhhZDAyMDAxYywgMHg4ZWUyMDRjNCwgMHhhZDAyMDAxMCwgMHhhZjg5MDEyMCwgCi0weDkyZTI0ZTIwLCAweDE0NDAwMDYwLCAweDI0MTAwMDAxLCAweDI1NDNmZmVlLCAKLTB4MmM2MzAwMDIsIDB4Mzk0MjAwMTEsIDB4MmM0MjAwMDEsIDB4NjIxODI1LCAKLTB4MTA2MDAwMjQsIDB4MCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgCi0weDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ1NTAwMGYsIAotMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDBiLCAKLTB4MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgCi0weDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNTQwMDJiLCAKLTB4MCwgMHg4MDAzZjJlLCAweDAsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHg1MDU0MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDAxLCAweDgwMDNmNGUsIAotMHhhYzk1MDAwMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgCi0weDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMDcsIDB4MTQ2MjAwMWYsIAotMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAKLTB4MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgCi0weDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNTQwMDA3LCAKLTB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgCi0weDAsIDB4ODAwM2YzYSwgMHgwLCAweDE0NjAwMDA1LCAKLTB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgCi0weDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEyLCAKLTB4YWM4MDAwMDAsIDB4ODAwM2Y0ZiwgMHgwLCAweDhlZTI0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4NTA1NDAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgCi0weDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAKLTB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAwNywgMHhhYzgyMDAwMCwgCi0weDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDE2MDAwMDBkLCAweDAsIAotMHg4ZjgyMDEyMCwgMHgzYzA0MDAwMSwgMHgyNDg0NTkzOCwgMHhhZmEwMDAxNCwgCi0weGFmYTIwMDEwLCAweDhkODYwMDFjLCAweDhmODcwMTI0LCAweDNjMDUwMDA4LCAKLTB4YzAwMjQwMywgMHgzNGE1MDAwMSwgMHg4MDA0MDU3LCAweDAsIAotMHg4ZWUyNzI0YywgMHgyNDQyMDAwMSwgMHgzMDQyMDdmZiwgMHgxMWEwMDAwNiwgCi0weGFlZTI3MjRjLCAweDhlZTIwMWQwLCAweDI0NDJmZmZmLCAweGFlZTIwMWQwLCAKLTB4ODAwM2Y2YiwgMHg4ZWUyMDFkMCwgMHg4ZWUyMDFjYywgMHgyNDQyZmZmZiwgCi0weGFlZTIwMWNjLCAweDhlZTIwMWNjLCAweDhlZTIwMWQ4LCAweDI0NDJmZmZmLCAKLTB4YWVlMjAxZDgsIDB4ODAwNDA1NywgMHg4ZWUyMDFkOCwgMHg4ZjQyMDI0MCwgCi0weDEwNDAwMGU1LCAweDAsIDB4OGVlMjBlMWMsIDB4MjQ0MjAwMDEsIAotMHg4MDA0MDU3LCAweGFlZTIwZTFjLCAweDk1ODIwMDFlLCAweGFkODIwMDFjLCAKLTB4OGY0MjAyNDAsIDB4MTA0MDAwNzIsIDB4MCwgMHg4ZWUyMGUxYywgCi0weDI0NDIwMDAxLCAweGFlZTIwZTFjLCAweDhmNDMwMjQwLCAweDQzMTAyYiwgCi0weDE0NDAwMGQ1LCAweDAsIDB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIAotMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsIAotMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAweDhmODIwMTI0LCAKLTB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgMHg4MDIxLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwM2ZkYSwgMHg4ZWUyMDFhNCwgCi0weDhlZTI3MjRjLCAweGFjNjIwMDFjLCAweDhlZTQwNGE4LCAweDhlZTUwNGFjLCAKLTB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsIAotMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgCi0weDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwMzQsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODIwMDAwLCAweDE0NTUwMDFmLCAKLTB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgCi0weDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIAotMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDU0MDAwNywgCi0weDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIAotMHgwLCAweDgwMDNmYzYsIDB4MCwgMHgxNDYwMDAwNSwgCi0weDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIAotMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMSwgCi0weGFjODAwMDAwLCAweDgwMDNmZGEsIDB4MCwgMHg4ZWUyNGUzMCwgCi0weDI0NDIwMDAxLCAweDUwNTQwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgCi0weDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDEsIDB4YWM5NTAwMDAsIAotMHhhYzgyMDAwNCwgMHg1NjAwMDAwYiwgMHgyNDEwMDAwMSwgMHg4ZWUyNzI0YywgCi0weDNjMDQwMDAxLCAweDI0ODQ1OGE4LCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLCAKLTB4OGVlNjcyNGMsIDB4OGY0NzAyODAsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgCi0weDM0YTVmMDA4LCAweDU2MDAwMDAxLCAweGFlZTAwZTFjLCAweDhlZTIwMTg4LCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxODgsIDB4ODAwNDA1MCwgMHg4ZWUyMDE4OCwgCi0weDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwgCi0weDUwNDAwMDAxLCAweDI3NjYzMDAwLCAweDhmODIwMTI4LCAweDEwYzIwMDA0LCAKLTB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLCAKLTB4OGVlMjAxYTQsIDB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgCi0weDgwMDQwNDQsIDB4OGVlMjAxYTQsIDB4OGVlMjcyNGMsIDB4YWM2MjAwMWMsIAotMHg4ZWU0MDRhOCwgMHg4ZWU1MDRhYywgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgCi0weDI0MDIwMDA4LCAweGE0NjIwMDBlLCAweDI0MDIwMDExLCAweGFjNjIwMDE4LCAKLTB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIAotMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzNCwgMHgyNDEwMDAwMSwgCi0weDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIAotMHg4YzgyMDAwMCwgMHgxNDU1MDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAKLTB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwgMHg4YzgyMDAwNCwgCi0weDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4MTA1NDAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgCi0weDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIDB4ODAwNDAzMCwgCi0weDAsIDB4MTQ2MDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAKLTB4MmM0MjAwMTEsIDB4NTA0MDAwMTEsIDB4YWM4MDAwMDAsIDB4ODAwNDA0NCwgCi0weDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4NTA1NDAwMDMsIAotMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAKLTB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgCi0weDI0MDIwMDAxLCAweGFjOTUwMDAwLCAweGFjODIwMDA0LCAweDE2MDAwMDBiLCAKLTB4MCwgMHg4ZWUyNzI0YywgMHgzYzA0MDAwMSwgMHgyNDg0NThhOCwgCi0weGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhlZTY3MjRjLCAweDhmNDcwMjgwLCAKLTB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwOCwgMHg4ZWUyMDE3NCwgCi0weDI0NDIwMDAxLCAweGFlZTIwMTc0LCAweDgwMDQwNTcsIDB4OGVlMjAxNzQsIAotMHgyNDAyMDAwMSwgMHhhZWUyNGUyNCwgMHg4ZjgzMDEyOCwgMHg4ZjgyMDEyNCwgCi0weDE0NjJmZDU4LCAweDAsIDB4OGZiZjAwMzAsIDB4OGZiNTAwMmMsIAotMHg4ZmI0MDAyOCwgMHg4ZmIzMDAyNCwgMHg4ZmIyMDAyMCwgMHg4ZmIxMDAxYywgCi0weDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMzgsIDB4MjdiZGZmZTgsIAotMHgyNzg0MDIwOCwgMHgyNzQ1MDIwMCwgMHgyNDA2MDAwOCwgMHhhZmJmMDAxNCwgCi0weGMwMDI0OWEsIDB4YWZiMDAwMTAsIDB4MjAyMSwgMHgyNDEwMDAwMSwgCi0weDI0MDIyNDFmLCAweGFmOTAwMjEwLCAweGFmOTAwMjAwLCAweGFmODAwMjA0LCAKLTB4YWY4MjAyMTQsIDB4OGY0NjAyNDgsIDB4MjQwMzAwMDQsIDB4M2MwMjAwNDAsIAotMHgzYzAxMDAwMSwgMHhhYzIzNWNjNCwgMHgzYzAxMDAwMSwgMHhhYzIzNWNjOCwgCi0weDNjMDEwMDAxLCAweGFjMjA1ZDljLCAweDNjMDEwMDAxLCAweGFjMjI1Y2MwLCAKLTB4M2MwMTAwMDEsIDB4YWMyMzVjYzgsIDB4YzAwNTEwOCwgMHgyNDA1MDAwNCwgCi0weGMwMDQ4MjIsIDB4MCwgMHg4ZWUyMDAwMCwgMHgzYzAzZmVmZiwgCi0weDM0NjNmZmZkLCAweDQzMTAyNCwgMHhhZWUyMDAwMCwgMHgzYzAyM2MwMCwgCi0weGFmODIwMjFjLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzMwODNhYywgCi0weDhmYmYwMDE0LCAweDhmYjAwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMTgsIAotMHgyN2JkZmZlMCwgMHgzYzA1MDAwOCwgMHgzNGE1MDQwMCwgMHhhZmJmMDAxOCwgCi0weGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMjAwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDU5ZjAsIDB4YzAwMjQwMywgMHgzODIxLCAweDhlZTIwMjgwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAyODAsIDB4OGVlMjAyODAsIDB4OGY4MzAyMDAsIAotMHgzYzAyM2YwMCwgMHg2MjE4MjQsIDB4OGZiZjAwMTgsIDB4M2MwMjA0MDAsIAotMHgzZTAwMDA4LCAweDI3YmQwMDIwLCAweDI3YmRmZmQ4LCAweGFmYmYwMDIwLCAKLTB4YWZiMTAwMWMsIDB4YWZiMDAwMTgsIDB4OGY5MDAyMjAsIDB4OGVlMjAyMTQsIAotMHgzODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMjE0LCAweDhlZTIwMjE0LCAKLTB4M2MwMjAzMDAsIDB4MjAyMTAyNCwgMHgxMDQwMDAyNywgMHgzYzExMDQwMCwgCi0weGMwMDQyOWIsIDB4MCwgMHgzYzAyMDEwMCwgMHgyMDIxMDI0LCAKLTB4MTA0MDAwMDcsIDB4MCwgMHg4ZWUyMDIxOCwgMHgyNDQyMDAwMSwgCi0weGFlZTIwMjE4LCAweDhlZTIwMjE4LCAweDgwMDQwYzYsIDB4M2MwM2ZkZmYsIAotMHg4ZWUyMDIxYywgMHgyNDQyMDAwMSwgMHhhZWUyMDIxYywgMHg4ZWUyMDIxYywgCi0weDNjMDNmZGZmLCAweDM0NjNmZmZmLCAweDNjMDgwOGZmLCAweDM1MDhmZmZmLCAKLTB4OGVlMjAwMDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDU5ZmMsIDB4M2MwNTAwMDgsIAotMHgyMDAzMDIxLCAweDQzMTAyNCwgMHhhZWUyMDAwMCwgMHg4ZjgyMDIyMCwgCi0weDM4MjEsIDB4M2MwMzAzMDAsIDB4NDgxMDI0LCAweDQzMTAyNSwgCi0weGFmODIwMjIwLCAweGFmYTAwMDEwLCAweGMwMDI0MDMsIDB4YWZhMDAwMTQsIAotMHg4MDA0Mjk2LCAweDAsIDB4MjExMTAyNCwgMHgxMDQwMDAxZiwgCi0weDNjMDI0MDAwLCAweDhmODMwMjI0LCAweDI0MDIxNDAyLCAweDE0NjIwMDBiLCAKLTB4M2MwM2ZkZmYsIDB4M2MwNDAwMDEsIDB4MjQ4NDVhMDgsIDB4M2MwNTAwMDgsIAotMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4Zjg2MDIyNCwgMHgzNGE1ZmZmZiwgCi0weGMwMDI0MDMsIDB4MzgyMSwgMHgzYzAzZmRmZiwgMHg4ZWUyMDAwMCwgCi0weDM0NjNmZmZmLCAweDIwMDIwMjEsIDB4NDMxMDI0LCAweGMwMDRlNTQsIAotMHhhZWUyMDAwMCwgMHg4ZWUyMDIyMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDIyMCwgCi0weDhlZTIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLCAKLTB4NDMxMDI0LCAweDgwMDQyOTUsIDB4NTExMDI1LCAweDIwMjEwMjQsIAotMHgxMDQwMDE0MiwgMHgwLCAweDhlZTIwMjJjLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAyMmMsIDB4OGVlMjAyMmMsIDB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIAotMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIAotMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHg4MDA0MTBlLCAweDI0NjMwMDAyLCAKLTB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAzLCAweDE0NDBmZmZjLCAKLTB4MCwgMHg4Zjg2MDBlMCwgMHg4Zjg0MDBlNCwgMHgzMGMyMDAwNywgCi0weDEwNDAwMDEyLCAweDAsIDB4OGY4MzAwZTQsIDB4MjQwMmZmZjgsIAotMHhjMjEwMjQsIDB4MTA0MzAwMGQsIDB4MCwgMHg4ZjgyMDA1NCwgCi0weDhmODMwMGUwLCAweDE0YzMwMDA5LCAweDI0NDQwMDUwLCAweDhmODIwMDU0LCAKLTB4ODIxMDIzLCAweDJjNDIwMDUxLCAweDEwNDAwMDA0LCAweDAsIAotMHg4ZjgyMDBlMCwgMHgxMGMyZmZmOSwgMHgwLCAweDhmODIwMjIwLCAKLTB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmQsIDB4NDMxMDI0LCAweGFmODIwMjIwLCAKLTB4OGY4NjAwZTAsIDB4MzBjMjAwMDcsIDB4MTA0MDAwMDMsIDB4MjQwMmZmZjgsIAotMHhjMjMwMjQsIDB4YWY4NjAwZTAsIDB4OGY4MzAwYzQsIDB4M2MwMjAwMWYsIAotMHgzNDQyZmZmZiwgMHgyNDY4MDAwOCwgMHg0ODEwMmIsIDB4MTA0MDAwMDMsIAotMHgzYzAyZmZmNSwgMHgzNDQyMTAwMCwgMHgxMDI0MDIxLCAweDhmOGIwMGM4LCAKLTB4OGY4NTAxMjAsIDB4OGY4NDAxMjQsIDB4ODAwNDE0NSwgMHg2MDIxLCAKLTB4Mjc2MjM4MDAsIDB4ODIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjQzMDAwLCAKLTB4MTBhNDAwMTAsIDB4MzE4MjAwZmYsIDB4OGM4MjAwMTgsIDB4Mzg0MzAwMDcsIAotMHgyYzYzMDAwMSwgMHgzODQyMDAwYiwgMHgyYzQyMDAwMSwgMHg2MjE4MjUsIAotMHg1MDYwZmZmMywgMHgyNDg0MDAyMCwgMHg4ZWUyMDI0MCwgMHgyNDBjMDAwMSwgCi0weDI0NDIwMDAxLCAweGFlZTIwMjQwLCAweDhlZTIwMjQwLCAweDhjOGIwMDA4LCAKLTB4MzE4MjAwZmYsIDB4MTQ0MDAwNjUsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg5MDQyODNjMCwgMHgxNDQwMDA2MCwgMHgwLCAKLTB4OGY4NDAwZTQsIDB4YzQxMDIzLCAweDIxOGMzLCAweDQ2MjAwMDEsIAotMHgyNDYzMDIwMCwgMHg4Zjg5MDBjNCwgMHgxMDYwMDAwNSwgMHgyNDAyMDAwMSwgCi0weDEwNjIwMDA5LCAweDAsIDB4ODAwNDE4NywgMHgwLCAKLTB4OGVlMjAyMzAsIDB4MTIwNTgyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDIzMCwgCi0weDgwMDQxYmMsIDB4OGVlMjAyMzAsIDB4OGVlMjAyMzQsIDB4M2MwNTAwMGEsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDIzNCwgMHg4YzhiMDAwMCwgMHgzNGE1ZjAwMCwgCi0weDhlZTIwMjM0LCAweDEyYjE4MjMsIDB4YTMxMDJiLCAweDU0NDAwMDAxLCAKLTB4NjUxODIxLCAweDJjNjIyMzNmLCAweDE0NDAwMDQwLCAweDAsIAotMHg4ZjgyMDBlOCwgMHgyNDQyMDAwOCwgMHhhZjgyMDBlOCwgMHg4ZjgyMDBlOCwgCi0weDhmODIwMGU0LCAweDEyMDU4MjEsIDB4MjQ0MjAwMDgsIDB4YWY4MjAwZTQsIAotMHg4MDA0MWJjLCAweDhmODIwMGU0LCAweDhlZTIwMjM4LCAweDNjMDMwMDBhLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAyMzgsIDB4OGM4NDAwMDAsIDB4MzQ2M2YwMDAsIAotMHg4ZWUyMDIzOCwgMHg4ODM4MjMsIDB4NjcxMDJiLCAweDU0NDAwMDAxLCAKLTB4ZTMzODIxLCAweDNjMDIwMDAzLCAweDM0NDIwZDQwLCAweDQ3MTAyYiwgCi0weDEwNDAwMDAzLCAweDAsIDB4ODAwNDFiYywgMHg4MDU4MjEsIAotMHg4ZjgyMDBlNCwgMHgyNDQ0MDAwOCwgMHhhZjg0MDBlNCwgMHg4Zjg0MDBlNCwgCi0weDEwODYwMDE4LCAweDNjMDUwMDBhLCAweDM0YTVmMDAwLCAweDNjMGEwMDAzLCAKLTB4MzU0YTBkNDAsIDB4OGVlMjAwN2MsIDB4MjQ0MjAwMDEsIDB4YWVlMjAwN2MsIAotMHg4YzgzMDAwMCwgMHg4ZWUyMDA3YywgMHg2ODM4MjMsIDB4YTcxMDJiLCAKLTB4NTQ0MDAwMDEsIDB4ZTUzODIxLCAweDE0NzEwMmIsIDB4NTQ0MDAwMDcsIAotMHg2MDU4MjEsIDB4OGY4MjAwZTQsIDB4MjQ0NDAwMDgsIDB4YWY4NDAwZTQsIAotMHg4Zjg0MDBlNCwgMHgxNDg2ZmZlZiwgMHgwLCAweDE0ODYwMDA1LCAKLTB4MCwgMHgxMjA1ODIxLCAweGFmODYwMGU0LCAweDgwMDQxYmMsIAotMHhhZjg2MDBlOCwgMHhhZjg0MDBlNCwgMHhhZjg0MDBlOCwgMHg4ZjgyMDBjOCwgCi0weDNjMDMwMDBhLCAweDM0NjNmMDAwLCAweDQ4MzgyMywgMHg2NzEwMmIsIAotMHg1NDQwMDAwMSwgMHhlMzM4MjEsIDB4M2MwMjAwMDMsIDB4MzQ0MjBkM2YsIAotMHg0NzEwMmIsIDB4NTQ0MDAwMDcsIDB4NjAyMSwgMHgxNjgzODIzLCAKLTB4NjcxMDJiLCAweDU0NDAwMDAzLCAweGUzMzgyMSwgMHg4MDA0MWNmLCAKLTB4M2MwMjAwMDMsIDB4M2MwMjAwMDMsIDB4MzQ0MjBkM2YsIDB4NDcxMDJiLCAKLTB4MTQ0MDAwMTYsIDB4MzE4MjAwZmYsIDB4MTQ0MDAwMDYsIDB4MCwgCi0weDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNjMCwgMHgxMDQwMDAwZiwgCi0weDAsIDB4OGVlMjAyM2MsIDB4M2MwNGZkZmYsIDB4OGVlMzAwMDAsIAotMHgzNDg0ZmZmZiwgMHgyNDQyMDAwMSwgMHhhZWUyMDIzYywgMHg4ZWUyMDIzYywgCi0weDI0MDIwMDAxLCAweDY0MTgyNCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhMDIyODNiOCwgMHg4MDA0MjJjLCAweGFlZTMwMDAwLCAweGFmOGIwMGM4LCAKLTB4OGY4MzAwYzgsIDB4OGY4MjAwYzQsIDB4M2MwNDAwMGEsIDB4MzQ4NGYwMDAsIAotMHg2MjM4MjMsIDB4ODcxMDJiLCAweDU0NDAwMDAxLCAweGU0MzgyMSwgCi0weDNjMDIwMDAzLCAweDM0NDIwZDQwLCAweDQ3MTAyYiwgMHgyY2UzMDAwMSwgCi0weDQzMTAyNSwgMHgxMDQwMDAwOCwgMHgwLCAweDhmODIwMjIwLCAKLTB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweDNjMDM0MDAwLCAKLTB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmODYwMGUwLCAweDhmODQwMGU0LCAKLTB4MTBjNDAwMmEsIDB4MCwgMHg4ZWUyMDA3YywgMHgyNDQyMDAwMSwgCi0weGFlZTIwMDdjLCAweDhlZTIwMDdjLCAweDI0YzJmZmY4LCAweGFmODIwMGUwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjdlMzAsIDB4M2MwMzAwMDgsIDB4OGY4NjAwZTAsIAotMHg0MzEwMjQsIDB4MTA0MDAwMWQsIDB4MCwgMHgxMGM0MDAxYiwgCi0weDI0MGRmZmY4LCAweDNjMGEwMDBhLCAweDM1NGFmMDAwLCAweDNjMGMwMDgwLCAKLTB4MjQ4NTAwMDgsIDB4Mjc2MjI4MDAsIDB4NTBhMjAwMDEsIDB4Mjc2NTE4MDAsIAotMHg4Yzg4MDAwNCwgMHg4YzgyMDAwMCwgMHg4Y2E5MDAwMCwgMHgzMTAzZmZmZiwgCi0weDQzMTAyMSwgMHg0ZDEwMjQsIDB4MjQ0MzAwMTAsIDB4NmIxMDJiLCAKLTB4NTQ0MDAwMDEsIDB4NmExODIxLCAweDEyYjEwMmIsIDB4NTQ0MDAwMDEsIAotMHgxMmE0ODIxLCAweDEwNjkwMDAyLCAweDEwYzEwMjUsIDB4YWM4MjAwMDQsIAotMHhhMDIwMjEsIDB4MTRjNGZmZWIsIDB4MjQ4NTAwMDgsIDB4OGY4MjAyMjAsIAotMHgzYzAzMDhmZiwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjAwMDIsIAotMHhhZjgyMDIyMCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHg4MDA0MjM3LCAKLTB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAyLCAKLTB4MTQ0MGZmZmMsIDB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgCi0weDM0NjNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg2MDEwMDU1LCAKLTB4MCwgMHg4ZWUyMDIyOCwgMHgyNDQyMDAwMSwgMHhhZWUyMDIyOCwgCi0weDhlZTIwMjI4LCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLCAKLTB4NDMxMDI0LCAweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODMwMDU0LCAKLTB4OGY4MjAwNTQsIDB4ODAwNDI1MSwgMHgyNDYzMDAwMiwgMHg4ZjgyMDA1NCwgCi0weDYyMTAyMywgMHgyYzQyMDAwMywgMHgxNDQwZmZmYywgMHgwLCAKLTB4OGY4NjAwZTAsIDB4MzBjMjAwMDcsIDB4MTA0MDAwMTIsIDB4MCwgCi0weDhmODMwMGU0LCAweDI0MDJmZmY4LCAweGMyMTAyNCwgMHgxMDQzMDAwZCwgCi0weDAsIDB4OGY4MjAwNTQsIDB4OGY4MzAwZTAsIDB4MTRjMzAwMDksIAotMHgyNDQ0MDAzMiwgMHg4ZjgyMDA1NCwgMHg4MjEwMjMsIDB4MmM0MjAwMzMsIAotMHgxMDQwMDAwNCwgMHgwLCAweDhmODIwMGUwLCAweDEwYzJmZmY5LCAKLTB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgMHgzNDYzZmZmZCwgCi0weDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4Zjg2MDBlMCwgMHgzMGMyMDAwNywgCi0weDEwNDAwMDAzLCAweDI0MDJmZmY4LCAweGMyMzAyNCwgMHhhZjg2MDBlMCwgCi0weDI0MDMwMWY1LCAweDhmODIwMGU4LCAweDY3MzgyMywgMHg3MThjMCwgCi0weDQzMTAyMSwgMHhhZjgyMDBlOCwgMHg4ZjgyMDBlOCwgMHhhZjgyMDBlNCwgCi0weDhlZTIwMDdjLCAweDNjMDQwOGZmLCAweDM0ODRmZmZmLCAweDQ3MTAyMSwgCi0weGFlZTIwMDdjLCAweDhmODIwMjIwLCAweDNjMDM4MDAwLCAweDM0NjMwMDAyLCAKLTB4NDQxMDI0LCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDgwMDQyOGQsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIAotMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwgCi0weDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZiLCAweDQzMTAyNCwgCi0weGFmODIwMjIwLCAweDhmYmYwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzAyMDAwMSwgMHg4YzQyNWNkOCwgCi0weDI3YmRmZmQ4LCAweDEwNDAwMDEyLCAweGFmYmYwMDIwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVhMTQsIDB4M2MwNTAwMDgsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4YWMyMjgzYWMsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIAotMHg4Zjg2MDIyMCwgMHgzNGE1MDQ5OCwgMHgzYzAxMDAwMSwgMHhhYzIwNWNkOCwgCi0weDNjMDEwMDAxLCAweGFjMjI1Y2NjLCAweGMwMDI0MDMsIDB4MzgyMSwgCi0weDhmNDIwMjY4LCAweDNjMDM3ZmZmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgCi0weGFmNDIwMjY4LCAweDhlZTIwNGQwLCAweDhlZTQwNGQ0LCAweDI0MDNmZmZlLCAKLTB4NDMxMDI0LCAweDMwODQwMDAyLCAweDEwODAwMTFlLCAweGFlZTIwNGQwLCAKLTB4OGVlMjA0ZDQsIDB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGFlZTIwNGQ0LCAKLTB4OGY4MjAwNDQsIDB4M2MwMzA2MDAsIDB4MzQ2MzIwMDAsIDB4MzQ0MjAwMjAsIAotMHhhZjgyMDA0NCwgMHhhZmEzMDAxOCwgMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgCi0weDI0NDIwMDAxLCAweDMwNGEwMGZmLCAweDUxNDMwMGZlLCAweGFmYTAwMDEwLCAKLTB4OGVlMjA2MDgsIDB4MjEwYzAsIDB4NTcxMDIxLCAweDhmYTMwMDE4LCAKLTB4OGZhNDAwMWMsIDB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIDB4OGY4MzAwNTQsIAotMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAKLTB4MTA0MDAwNmEsIDB4NTgyMSwgMHgyNDE4MDAwOCwgMHgyNDBmMDAwZCwgCi0weDI0MGQwMDA3LCAweDI0MGMwMDQwLCAweDI0MGUwMDAxLCAweDhmODcwMTIwLCAKLTB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgCi0weDI3NjgzMDAwLCAweDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsIAotMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywgMHgxMDIxLCAweDhlZTIwMWE0LCAKLTB4MjgyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDA0MzNkLCAKLTB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLCAKLTB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsIDB4YTMyODIxLCAweGEzMzAyYiwgCi0weDgyMjAyMSwgMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIAotMHg4ZWUyMDYwOCwgMHhhNGY4MDAwZSwgMHhhY2VmMDAxOCwgMHhhY2VhMDAxYywgCi0weDIxMGMwLCAweDI0NDIwNjBjLCAweDJlMjEwMjEsIDB4YWNlMjAwMDgsIAotMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgCi0weDE0NDAwMDMzLCAweDI0MDUwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAKLTB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDRkMDAxZiwgCi0weDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIAotMHgwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAKLTB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0YzAwMDcsIAotMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAKLTB4MCwgMHg4MDA0MzJhLCAweDAsIDB4MTQ2MDAwMDUsIAotMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAKLTB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIAotMHhhYzgwMDAwMCwgMHg4MDA0MzNkLCAweDAsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHg1MDRjMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweGFjOGQwMDAwLCAweGFjOGUwMDA0LCAKLTB4NTRhMDAwMDYsIDB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywgCi0weDJjNDIwMDMzLCAweDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsIAotMHgyNDAyMDAwMSwgMHg1NDYyMDA3OSwgMHhhZmEwMDAxMCwgMHhhZWVhMDYwOCwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NjkwMDMyLCAweDEyMjEwMjMsIAotMHgyYzQyMDAzMywgMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGQwMDA4LCAKLTB4MjQwYzAwMTEsIDB4MjQwODAwMTIsIDB4MjQwNzAwNDAsIDB4MjQwYTAwMDEsIAotMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIAotMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgCi0weDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgCi0weDhlZTIwMWE0LCAweDI4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIAotMHg4MDA0M2E5LCAweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAKLTB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIAotMHhhNDZkMDAwZSwgMHhhYzZjMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgCi0weDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAKLTB4MTQ0MDAwMzMsIDB4MjQwNTAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIAotMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODIwMDAwLCAweDE0NDgwMDFmLCAKLTB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgCi0weDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIAotMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQ3MDAwNywgCi0weDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIAotMHgwLCAweDgwMDQzOTYsIDB4MCwgMHgxNDYwMDAwNSwgCi0weDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIAotMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgCi0weGFjODAwMDAwLCAweDgwMDQzYTksIDB4MCwgMHg4ZWUyNGUzMCwgCi0weDI0NDIwMDAxLCAweDUwNDcwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsIAotMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgCi0weDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4YWM4ODAwMDAsIDB4YWM4YTAwMDQsIAotMHg1NGEwMDAwNiwgMHgyNDBiMDAwMSwgMHg4ZjgyMDA1NCwgMHgxMjIxMDIzLCAKLTB4MmM0MjAwMzMsIDB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwgCi0weDI0MDIwMDAxLCAweDU0NjIwMDAzLCAweGFmYTAwMDEwLCAweDgwMDQzZDYsIAotMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1YTIwLCAweGFmYTAwMDE0LCAKLTB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgCi0weDM0YTVmMDExLCAweDgwMDQzZDYsIDB4MCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1YTJjLCAweGFmYTAwMDE0LCAweDhmODYwMTIwLCAweDhmODcwMTI0LCAKLTB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAxMCwgMHg4MDA0M2Q2LCAKLTB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NWEzOCwgMHhhZmEwMDAxNCwgCi0weDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIAotMHgzNGE1ZjAwZiwgMHg4ZWUyMDFhYywgMHgyNDQyMDAwMSwgMHhhZWUyMDFhYywgCi0weDhlZTIwMWFjLCAweDhlZTIwMTVjLCAweDI0NDIwMDAxLCAweGFlZTIwMTVjLCAKLTB4OGVlMjAxNWMsIDB4OGZiZjAwMjAsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgCi0weDNjMDIwMDAxLCAweDhjNDI1Y2Q4LCAweDI3YmRmZmUwLCAweDE0NDAwMDBkLCAKLTB4YWZiZjAwMTgsIDB4M2MwNDAwMDEsIDB4MjQ4NDVhNDQsIDB4M2MwNTAwMDgsIAotMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4Zjg2MDIyMCwgMHgzNGE1MDQ5OSwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1Y2Q4LCAweGMwMDI0MDMsIAotMHgzODIxLCAweDhlZTIwNGQwLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgCi0weDk0NjM4M2IyLCAweDM0NDIwMDAxLCAweDEwNjAwMDA3LCAweGFlZTIwNGQwLCAKLTB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAKLTB4MzQ0MjAwMDgsIDB4YWY4MjAyMjAsIDB4MjAyMSwgMHhjMDA1MmEyLCAKLTB4MjQwNTAwMDQsIDB4YWY0MjAyNjgsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDIwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgzYzEyMDAwMSwgCi0weDI2NTIxMjAwLCAweDNjMTQwMDAxLCAweDhlOTQ1YzUwLCAweDNjMTAwMDAxLCAKLTB4MjYxMDExMjAsIDB4M2MxNWMwMDAsIDB4MzZiNTAwNjAsIDB4OGU4YTAwMDAsIAotMHg4ZWIzMDAwMCwgMHgyNmE0MDBiLCAweDI0ODAwMGEsIDB4MjAwZjgyMSwgCi0weDAsIDB4ZCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDgwMDE0ZDYsIAotMHgwLCAweDgwMDE0ZDgsIDB4M2MwYTAwMDEsIDB4ODAwMTRkOCwgCi0weDNjMGEwMDAyLCAweDgwMDE0ZDgsIDB4MCwgMHg4MDAyNGE2LCAKLTB4MCwgMHg4MDAxNGQ4LCAweDNjMGEwMDAzLCAweDgwMDE0ZDgsIAotMHgzYzBhMDAwNCwgMHg4MDAyZjhjLCAweDAsIDB4ODAwMTRkOCwgCi0weDNjMGEwMDA1LCAweDgwMDNjZTgsIDB4MCwgMHg4MDAzYzY2LCAKLTB4MCwgMHg4MDAxNGQ4LCAweDNjMGEwMDA2LCAweDgwMDE0ZDgsIAotMHgzYzBhMDAwNywgMHg4MDAxNGQ4LCAweDAsIDB4ODAwMTRkOCwgCi0weDAsIDB4ODAwMTRkOCwgMHgwLCAweDgwMDJhNzUsIAotMHgwLCAweDgwMDE0ZDgsIDB4M2MwYTAwMGIsIDB4ODAwMTRkOCwgCi0weDNjMGEwMDBjLCAweDgwMDE0ZDgsIDB4M2MwYTAwMGQsIDB4ODAwMjM3YSwgCi0weDAsIDB4ODAwMjMzOSwgMHgwLCAweDgwMDE0ZDgsIAotMHgzYzBhMDAwZSwgMHg4MDAxYjNjLCAweDAsIDB4ODAwMjRhNCwgCi0weDAsIDB4ODAwMTRkOCwgMHgzYzBhMDAwZiwgMHg4MDA0MGE3LCAKLTB4MCwgMHg4MDA0MDkxLCAweDAsIDB4ODAwMTRkOCwgCi0weDNjMGEwMDEwLCAweDgwMDE0ZWUsIDB4MCwgMHg4MDAxNGQ4LCAKLTB4M2MwYTAwMTEsIDB4ODAwMTRkOCwgMHgzYzBhMDAxMiwgMHg4MDAxNGQ4LCAKLTB4M2MwYTAwMTMsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDNjMDMwMDAxLCAKLTB4MzQ2MzM4MDAsIDB4MjQwNTAwODAsIDB4MjQwNDAwMWYsIDB4MjQwNmZmZmYsIAotMHgyNDAyMDAwMSwgMHhhZjgwMDIxYywgMHhhZjgyMDIwMCwgMHhhZjgyMDIyMCwgCi0weDM2MzEwMjEsIDB4YWY4MjAwYzAsIDB4MzYzMTAyMSwgMHhhZjgyMDBjNCwgCi0weDM2MzEwMjEsIDB4YWY4MjAwYzgsIDB4Mjc2MjM4MDAsIDB4YWY4MjAwZDAsIAotMHgyNzYyMzgwMCwgMHhhZjgyMDBkNCwgMHgyNzYyMzgwMCwgMHhhZjgyMDBkOCwgCi0weDI3NjIxODAwLCAweGFmODIwMGUwLCAweDI3NjIxODAwLCAweGFmODIwMGU0LCAKLTB4Mjc2MjE4MDAsIDB4YWY4MjAwZTgsIDB4Mjc2MjEwMDAsIDB4YWY4MjAwZjAsIAotMHgyNzYyMTAwMCwgMHhhZjgyMDBmNCwgMHgyNzYyMTAwMCwgMHhhZjgyMDBmOCwgCi0weGFjYTAwMDAwLCAweDI0ODRmZmZmLCAweDE0ODZmZmZkLCAweDI0YTUwMDA0LCAKLTB4OGY4MzAwNDAsIDB4M2MwMmYwMDAsIDB4NjIxODI0LCAweDNjMDI1MDAwLCAKLTB4MTA2MjAwMGMsIDB4NDMxMDJiLCAweDE0NDAwMDA2LCAweDNjMDI2MDAwLCAKLTB4M2MwMjQwMDAsIDB4MTA2MjAwMDgsIDB4MjQwMjA4MDAsIDB4ODAwNDUzOSwgCi0weDAsIDB4MTA2MjAwMDQsIDB4MjQwMjA4MDAsIDB4ODAwNDUzOSwgCi0weDAsIDB4MjQwMjA3MDAsIDB4M2MwMTAwMDEsIDB4YWMyMjVjZGMsIAotMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjQsIAotMHhhZmIwMDAyMCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgzYzAxMDAwMSwgCi0weGFjMjA1Y2M0LCAweDgwMDQ1NDUsIDB4MjQ2MzAwNjQsIDB4OGY4MjAwNTQsIAotMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIDB4MCwgCi0weGMwMDRkNzEsIDB4MCwgMHgyNDA0MDAwMSwgMHgyODIxLCAKLTB4MjdhNjAwMTgsIDB4MzQwMjgwMDAsIDB4YzAwNDk4ZSwgMHhhN2EyMDAxOCwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDQ1NTYsIDB4MjQ2MzAwNjQsIAotMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0OTRjLCAweDI3YTYwMDE4LCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4ODAwNDU2MiwgMHgyNDYzMDA2NCwgCi0weDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDA2NSwgMHgxNDQwZmZmYywgCi0weDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweGMwMDQ5NGMsIDB4MjdhNjAwMTgsIAotMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHg4MDA0NTZlLCAweDI0NjMwMDY0LCAKLTB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLCAKLTB4MjQwNDAwMDEsIDB4M2MwNjAwMDEsIDB4MjRjNjVkYTAsIDB4YzAwNDk0YywgCi0weDI0MDUwMDAyLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDQ1N2IsIAotMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIAotMHgxNDQwZmZmYywgMHgyNDA0MDAwMSwgMHgyNDA1MDAwMywgMHgzYzEwMDAwMSwgCi0weDI2MTA1ZGEyLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgMHg5N2E2MDAxOCwgCi0weDNjMDcwMDAxLCAweDk0ZTc1ZGEwLCAweDNjMDQwMDAxLCAweDI0ODQ1YWIwLCAKLTB4YWZhMDAwMTQsIDB4OTYwMjAwMDAsIDB4M2MwNTAwMGQsIDB4MzRhNTAxMDAsIAotMHhjMDAyNDAzLCAweGFmYTIwMDEwLCAweDk3YTIwMDE4LCAweDEwNDAwMDRjLCAKLTB4MjQwMzYwNDAsIDB4OTYwMjAwMDAsIDB4MzA0MmZmZjAsIDB4MTQ0MzAwMGEsIAotMHgyNDAyMDAyMCwgMHgzYzAzMDAwMSwgMHg5NDYzNWRhMCwgMHg1NDYyMDAwOSwgCi0weDI0MDI3ODMwLCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAweGFjMjI1Y2M0LCAKLTB4ODAwNDVhYywgMHgyNDAyMDAwNSwgMHgzYzAzMDAwMSwgMHg5NDYzNWRhMCwgCi0weDI0MDI3ODMwLCAweDE0NjIwMDBmLCAweDI0MDMwMDEwLCAweDNjMDIwMDAxLCAKLTB4OTQ0MjVkYTIsIDB4MzA0MmZmZjAsIDB4MTQ0MzAwMGEsIDB4MjQwMjAwMDMsIAotMHgzYzAxMDAwMSwgMHhhYzIyNWNjNCwgMHgyNDAyMDAwNiwgMHgzYzAxMDAwMSwgCi0weGFjMjI1ZGIwLCAweDNjMDEwMDAxLCAweGFjMjI1ZGJjLCAweDgwMDQ1ZTYsIAotMHgzYzA5ZmZmMCwgMHgzYzAyMDAwMSwgMHg4YzQyNWNjNCwgMHgzYzAzMDAwMSwgCi0weDk0NjM1ZGEwLCAweDM0NDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1Y2M0LCAKLTB4MjQwMjAwMTUsIDB4MTQ2MjAwMGYsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDk0NDI1ZGEyLCAweDMwNDJmZmYwLCAweDM4NDNmNDIwLCAweDJjNjMwMDAxLCAKLTB4Mzg0MmY0MzAsIDB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDA1LCAKLTB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIDB4YWMyMjVkYmMsIDB4ODAwNDVlNiwgCi0weDNjMDlmZmYwLCAweDNjMDMwMDAxLCAweDk0NjM1ZGEwLCAweDI0MDI3ODEwLCAKLTB4MTQ2MjAwMGIsIDB4MjQwMjAwMDIsIDB4M2MwMjAwMDEsIDB4OTQ0MjVkYTIsIAotMHgzMDQyZmZmMCwgMHgxNDQwMDAwNiwgMHgyNDAyMDAwMiwgMHgyNDAyMDAwNCwgCi0weDNjMDEwMDAxLCAweGFjMjI1ZGJjLCAweDgwMDQ1ZTYsIDB4M2MwOWZmZjAsIAotMHgzYzAxMDAwMSwgMHhhYzIyNWRiYywgMHg4MDA0NWU2LCAweDNjMDlmZmYwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVjYzQsIDB4MjQwMzAwMDEsIDB4M2MwMTAwMDEsIAotMHhhYzIzNWRiYywgMHgzNDQyMDAwNCwgMHgzYzAxMDAwMSwgMHhhYzIyNWNjNCwgCi0weDNjMDlmZmYwLCAweDM1MjliZGMwLCAweDNjMDYwMDAxLCAweDhjYzY1Y2M0LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVhYjAsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIAotMHhhYzIyNWNjYywgMHg4ZjgyMDA1NCwgMHgzYzA3MDAwMSwgMHg4Y2U3NWRiYywgCi0weDNjMDMwMDAxLCAweDk0NjM1ZGEwLCAweDNjMDgwMDAxLCAweDk1MDg1ZGEyLCAKLTB4M2MwNTAwMGQsIDB4MzRhNTAxMDAsIDB4M2MwMTAwMDEsIDB4YWMyMDVjYzgsIAotMHg0OTEwMjEsIDB4M2MwMTAwMDEsIDB4YWMyMjVkYWMsIDB4YWZhMzAwMTAsIAotMHhjMDAyNDAzLCAweGFmYTgwMDE0LCAweDhmYmYwMDI0LCAweDhmYjAwMDIwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZlOCwgMHgzYzA1MDAwMSwgCi0weDhjYTU1Y2M4LCAweDI0MDYwMDA0LCAweDI0MDIwMDAxLCAweDE0YTIwMDE0LCAKLTB4YWZiZjAwMTAsIDB4M2MwMjAwMDEsIDB4OGM0MjdlM2MsIDB4MzA0MjgwMDAsIAotMHgxMDQwMDAwNSwgMHgzYzA0MDAwZiwgMHgzYzAzMDAwMSwgMHg4YzYzNWRiYywgCi0weDgwMDQ2MTcsIDB4MzQ4NDQyNDAsIDB4M2MwNDAwMDQsIDB4M2MwMzAwMDEsIAotMHg4YzYzNWRiYywgMHgzNDg0OTNlMCwgMHgyNDAyMDAwNSwgMHgxNDYyMDAxNiwgCi0weDAsIDB4M2MwNDAwM2QsIDB4ODAwNDYyZiwgMHgzNDg0MDkwMCwgCi0weDNjMDIwMDAxLCAweDhjNDI3ZTM4LCAweDMwNDI4MDAwLCAweDEwNDAwMDA1LCAKLTB4M2MwNDAwMWUsIDB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIDB4ODAwNDYyYSwgCi0weDM0ODQ4NDgwLCAweDNjMDQwMDBmLCAweDNjMDMwMDAxLCAweDhjNjM1ZGJjLCAKLTB4MzQ4NDQyNDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMDMsIDB4MCwgCi0weDNjMDQwMDdhLCAweDM0ODQxMjAwLCAweDNjMDIwMDAxLCAweDhjNDI1ZGFjLCAKLTB4OGY4MzAwNTQsIDB4NDQxMDIxLCAweDQzMTAyMywgMHg0NDEwMmIsIAotMHgxNDQwMDAzNywgMHgwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2QwLCAKLTB4MTQ0MDAwMzMsIDB4MCwgMHgzYzAxMDAwMSwgMHgxMGMwMDAyNSwgCi0weGFjMjA1Y2UwLCAweDNjMDkwMDAxLCAweDhkMjk1Y2M0LCAweDI0MDcwMDAxLCAKLTB4M2MwNDQwMDAsIDB4M2MwODAwMDEsIDB4MjUwODdlM2MsIDB4MjUwYWZmZmMsIAotMHg1Mjg0MiwgMHgxNGEwMDAwMiwgMHgyNGM2ZmZmZiwgMHgyNDA1MDAwOCwgCi0weGE5MTAyNCwgMHgxMDQwMDAxMCwgMHgwLCAweDE0YTcwMDA4LCAKLTB4MCwgMHg4ZDAyMDAwMCwgMHg0NDEwMjQsIDB4MTA0MDAwMGEsIAotMHgwLCAweDNjMDEwMDAxLCAweDgwMDQ2NWIsIDB4YWMyNTVjZTAsIAotMHg4ZDQyMDAwMCwgMHg0NDEwMjQsIDB4MTA0MDAwMDMsIDB4MCwgCi0weDNjMDEwMDAxLCAweGFjMjc1Y2UwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2UwLCAKLTB4NjE4MmIsIDB4MmM0MjAwMDEsIDB4NDMxMDI0LCAweDU0NDBmZmU1LCAKLTB4NTI4NDIsIDB4OGY4MjAwNTQsIDB4M2MwMzAwMDEsIDB4OGM2MzVjZTAsIAotMHgzYzAxMDAwMSwgMHhhYzIyNWRhYywgMHgxMDYwMDAyYSwgMHgyNDAyMDAwMSwgCi0weDNjMDEwMDAxLCAweGFjMjU1Y2M4LCAweDNjMDEwMDAxLCAweGFjMjI1Y2NjLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVjZTAsIDB4MTA0MDAwMjIsIDB4MCwgCi0weDNjMDIwMDAxLCAweDhjNDI1Y2NjLCAweDEwNDAwMDBhLCAweDI0MDIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4YWMyMDVjY2MsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAKLTB4YWMyMjgzYWMsIDB4M2MwMTAwMDEsIDB4YWMyMDVkNGMsIDB4M2MwMTAwMDEsIAotMHhhYzIyNWQwNCwgMHgzYzAzMDAwMSwgMHg3NzE4MjEsIDB4OGM2MzgzYWMsIAotMHgyNDAyMDAwOCwgMHgxMDYyMDAwNSwgMHgyNDAyMDAwMSwgMHhjMDA0Njk1LCAKLTB4MCwgMHg4MDA0NjkyLCAweDAsIDB4M2MwMzAwMDEsIAotMHg4YzYzNWNjOCwgMHgxMDYyMDAwNywgMHgyNDAyMDAwZSwgMHgzYzAzMDAwMSwgCi0weDhjNjM3ZGQwLCAweDEwNjIwMDAzLCAweDAsIDB4YzAwNGU1NCwgCi0weDhmODQwMjIwLCAweDhmYmYwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMTgsIAotMHgyN2JkZmZlMCwgMHgzYzAyZmRmZiwgMHhhZmJmMDAxOCwgMHg4ZWUzMDAwMCwgCi0weDNjMDUwMDAxLCAweDhjYTU1Y2M4LCAweDNjMDQwMDAxLCAweDhjODQ1Y2YwLCAKLTB4MzQ0MmZmZmYsIDB4NjIxODI0LCAweDE0YTQwMDA4LCAweGFlZTMwMDAwLCAKLTB4M2MwMzAwMDEsIDB4NzcxODIxLCAweDhjNjM4M2FjLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVjZjQsIDB4MTA2MjAwMDgsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg4YzQyODNhYywgMHgzYzAxMDAwMSwgMHhhYzI1NWNmMCwgCi0weDNjMDEwMDAxLCAweGFjMjI1Y2Y0LCAweDNjMDMwMDAxLCAweDhjNjM1Y2M4LCAKLTB4MjQwMjAwMDIsIDB4MTA2MjAxNjksIDB4MmM2MjAwMDMsIDB4MTA0MDAwMDUsIAotMHgyNDAyMDAwMSwgMHgxMDYyMDAwOCwgMHgwLCAweDgwMDQ4MWMsIAotMHgwLCAweDI0MDIwMDA0LCAweDEwNjIwMGIxLCAweDI0MDIwMDAxLCAKLTB4ODAwNDgxZCwgMHgwLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgCi0weDhjNDI4M2FjLCAweDI0NDNmZmZmLCAweDJjNjIwMDA4LCAweDEwNDAwMTVhLCAKLTB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDhjMjI1YWM4LCAKLTB4NDAwMDA4LCAweDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIAotMHgyNDAyMDAwNSwgMHgxNDYyMDAxNCwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVjZDQsIDB4MTA0MDAwMGEsIDB4MjQwMjAwMDMsIDB4YzAwNDgyMiwgCi0weDAsIDB4MjQwMjAwMDIsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAKLTB4YWMyMjgzYWMsIDB4M2MwMTAwMDEsIDB4ODAwNDZlMCwgMHhhYzIwNWNkNCwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNhYywgMHgzYzAxMDAwMSwgCi0weDgwMDQ4MWYsIDB4YWMyMDVjNjAsIDB4YzAwNDgyMiwgMHgwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVjZDQsIDB4M2MwMTAwMDEsIDB4YWMyMDVjNjAsIAotMHgxMDQwMDBkZCwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhYzIyODNhYywgMHgzYzAxMDAwMSwgMHg4MDA0ODFmLCAweGFjMjA1Y2Q0LCAKLTB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMDMsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNWQwMCwgMHhjMDA0OWNmLCAKLTB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNWQwMCwgMHg4MDA0NzhlLCAKLTB4MjQwMjAwMTEsIDB4M2MwNTAwMDEsIDB4OGNhNTVjYzgsIDB4M2MwNjAwMDEsIAotMHg4Y2M2N2UzYywgMHhjMDA1MTA4LCAweDIwMjEsIDB4MjQwMjAwMDUsIAotMHgzYzAxMDAwMSwgMHhhYzIwNWNkNCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHg4MDA0ODFmLCAweGFjMjI4M2FjLCAweDNjMDQwMDAxLCAweDI0ODQ1YWJjLCAKLTB4M2MwNTAwMGYsIDB4MzRhNTAxMDAsIDB4MzAyMSwgMHgzODIxLCAKLTB4YWZhMDAwMTAsIDB4YzAwMjQwMywgMHhhZmEwMDAxNCwgMHg4MDA0ODFmLCAKLTB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzZjcwMCwgMHg0MzEwMjUsIAotMHg4MDA0N2I3LCAweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMwMDA0LCAKLTB4NDMxMDI0LCAweDE0NDAwMGE5LCAweDI0MDIwMDA3LCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYTQsIDB4MjQ2M2Q4ZjAsIDB4NDMxMDIzLCAKLTB4MmM0MjI3MTAsIDB4MTQ0MDAwZjgsIDB4MjQwMjAwMDEsIDB4ODAwNDgxZCwgCi0weDAsIDB4M2MwNTAwMDEsIDB4OGNhNTVjYzgsIDB4YzAwNTJhMiwgCi0weDIwMjEsIDB4YzAwNTM4NiwgMHgyMDIxLCAweDNjMDMwMDAxLCAKLTB4OGM2MzdlMzQsIDB4NDYxMDBlYSwgMHgyNDAyMDAwMSwgMHgzYzAyMDAwOCwgCi0weDYyMTAyNCwgMHgxMDQwMDAwNiwgMHgwLCAweDhmODIwMjE0LCAKLTB4M2MwM2ZmZmYsIDB4NDMxMDI0LCAweDgwMDQ3NDEsIDB4MzQ0MjI1MWYsIAotMHg4ZjgyMDIxNCwgMHgzYzAzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjI0MWYsIAotMHhhZjgyMDIxNCwgMHg4ZWUyMDAwMCwgMHgzYzAzMDIwMCwgMHg0MzEwMjUsIAotMHhhZWUyMDAwMCwgMHg4ZjgyMDIyMCwgMHgyNDAzZmZmYiwgMHg0MzEwMjQsIAotMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwgCi0weDI0MDIwMDA4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNhYywgCi0weDhmODIwMjIwLCAweDNjMDMwMDA0LCAweDQzMTAyNCwgMHgxNDQwMDAwNSwgCi0weDAsIDB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAKLTB4YWY4MjAyMjAsIDB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIDB4MjQwMjAwMDUsIAotMHgxNDYyMDAwYSwgMHgwLCAweDNjMDIwMDAxLCAweDk0NDI1ZGEyLCAKLTB4MjQ0MjlmYmMsIDB4MmM0MjAwMDQsIDB4MTA0MDAwMDQsIDB4MjQwNDAwMTgsIAotMHgyNDA1MDAwMiwgMHhjMDA0ZDkzLCAweDI0MDYwMDIwLCAweGMwMDQzZGQsIAotMHgwLCAweDNjMDEwMDAxLCAweDgwMDQ4MWYsIDB4YWMyMDVkNTAsIAotMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYWMsIDB4MjQ0M2ZmZmYsIAotMHgyYzYyMDAwOCwgMHgxMDQwMDBhYywgMHgzMTA4MCwgMHgzYzAxMDAwMSwgCi0weDIyMDgyMSwgMHg4YzIyNWFlOCwgMHg0MDAwMDgsIDB4MCwgCi0weGMwMDQyOWIsIDB4MCwgMHgzYzAxMDAwMSwgMHhhYzIwNWNjYywgCi0weGFmODAwMjA0LCAweDNjMDEwMDAxLCAweGMwMDQ4MjIsIDB4YWMyMDdlMjAsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNWNlNCwgMHgyNDAyMDAwMiwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHg4MDA0ODFmLCAweGFjMjI4M2FjLCAKLTB4YzAwNDg5ZiwgMHgwLCAweDNjMDMwMDAxLCAweDhjNjM1Y2U0LCAKLTB4MjQwMjAwMDksIDB4MTQ2MjAwOTAsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4ODAwNDgxZiwgMHhhYzIyODNhYywgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZTM4LCAweDMwNDI0MDAwLCAweDEwNDAwMDA1LCAweDAsIAotMHg4ZjgyMDA0NCwgMHgzYzAzZmZmZiwgMHg4MDA0NzlmLCAweDM0NjM3ZmZmLCAKLTB4OGY4MjAwNDQsIDB4MjQwM2ZmN2YsIDB4NDMxMDI0LCAweGFmODIwMDQ0LCAKLTB4OGY4MzAwNTQsIDB4ODAwNDdiOSwgMHgyNDAyMDAwNCwgMHg4ZjgzMDA1NCwgCi0weDNjMDIwMDAxLCAweDhjNDI1ZGE0LCAweDI0NjNkOGYwLCAweDQzMTAyMywgCi0weDJjNDIyNzEwLCAweDE0NDAwMDc0LCAweDI0MDIwMDA1LCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweDgwMDQ4MWYsIDB4YWMyMjgzYWMsIDB4OGY4MjAyMjAsIAotMHgzYzAzZjcwMCwgMHg0MzEwMjUsIDB4YWY4MjAyMjAsIDB4YWY4MDAyMDQsIAotMHgzYzAxMDAwMSwgMHhhYzIwN2UyMCwgMHg4ZjgzMDA1NCwgMHgyNDAyMDAwNiwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNhYywgMHgzYzAxMDAwMSwgCi0weDgwMDQ4MWYsIDB4YWMyMzVkYTQsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWRhNCwgMHgyNDYzZmZmNiwgMHg0MzEwMjMsIDB4MmM0MjAwMGEsIAotMHgxNDQwMDA1OSwgMHgwLCAweDI0MDIwMDA3LCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweDgwMDQ4MWYsIDB4YWMyMjgzYWMsIDB4OGY4MjAyMjAsIAotMHgzYzA0ZjcwMCwgMHg0NDEwMjUsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIAotMHgzYzAzMDMwMCwgMHg0MzEwMjQsIDB4MTQ0MDAwMDUsIDB4MTgyMSwgCi0weDhmODIwMjIwLCAweDI0MDMwMDAxLCAweDQ0MTAyNSwgMHhhZjgyMDIyMCwgCi0weDEwNjAwMDQzLCAweDI0MDIwMDAxLCAweDhmODIwMjE0LCAweDNjMDNmZmZmLCAKLTB4M2MwNDAwMDEsIDB4OGM4NDVkOTgsIDB4NDMxMDI0LCAweDM0NDIyNTFmLCAKLTB4YWY4MjAyMTQsIDB4MjQwMjAwMDgsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAKLTB4MTA4MDAwMGIsIDB4YWMyMjgzYWMsIDB4M2MwMjAwMDEsIDB4OGM0MjVkNzQsIAotMHgxNDQwMDAwNywgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyN2RkMCwgCi0weGMwMDRlNTQsIDB4OGY4NDAyMjAsIDB4ODAwNDgwYywgMHgwLCAKLTB4OGY4MjAyMjAsIDB4M2MwMzAwMDgsIDB4NDMxMDI0LCAweDE0NDAwMDE3LCAKLTB4MjQwMjAwMGUsIDB4M2MwMTAwMDEsIDB4YWMyMjdkZDAsIDB4OGVlMjAwMDAsIAotMHgyMDIxLCAweDNjMDMwMjAwLCAweDQzMTAyNSwgMHhjMDA1Mzg2LCAKLTB4YWVlMjAwMDAsIDB4OGY4MjAyMjAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LCAKLTB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4MzQ0MjAwMDIsIDB4YzAwNDNkZCwgCi0weGFmODIwMjIwLCAweDNjMDUwMDAxLCAweDhjYTU1Y2M4LCAweGMwMDUyYTIsIAotMHgyMDIxLCAweDgwMDQ4MWYsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDhjNDI1ZDc0LCAweDEwNDAwMDEwLCAweDAsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWQ3MCwgMHgyNDQyZmZmZiwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ3MCwgCi0weDE0NDAwMDA5LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAweGFjMjA1ZDc0LCAKLTB4M2MwMTAwMDEsIDB4ODAwNDgxZiwgMHhhYzIyNWQ3MCwgMHgyNDAyMDAwMSwgCi0weDNjMDEwMDAxLCAweGFjMjI1Y2NjLCAweDhmYmYwMDE4LCAweDNlMDAwMDgsIAotMHgyN2JkMDAyMCwgMHg4ZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHg4ZjgyMDIyMCwgCi0weDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMjAwLCAweDNjMDYwMDAxLCAKLTB4OGNjNjVjYzgsIDB4MzQ0MjAwMDQsIDB4YWY4MjAyMDAsIDB4MjQwMjAwMDIsIAotMHgxMGMyMDAzYSwgMHgyY2MyMDAwMywgMHgxMDQwMDAwNSwgMHgyNDAyMDAwMSwgCi0weDEwYzIwMDA4LCAweDAsIDB4ODAwNDg2OCwgMHgwLCAKLTB4MjQwMjAwMDQsIDB4MTBjMjAwMTMsIDB4MjQwMjAwMDEsIDB4ODAwNDg2OCwgCi0weDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVjYjgsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWNjMCwgMHgzYzA0MDAwMSwgMHg4Yzg0NWNkYywgMHgzYzA1MDAwMSwgCi0weDhjYTU1Y2JjLCAweGFmODYwMjAwLCAweGFmODYwMjIwLCAweDM0NjMwMDIyLCAKLTB4NDQxMDI1LCAweDQ1MTAyNSwgMHgzNDQyMDAwMiwgMHg4MDA0ODY3LCAKLTB4YWY4MzAyMDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVkOTgsIDB4YWY4MjAyMDAsIAotMHgxMDYwMDAwOSwgMHhhZjgyMDIyMCwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ3NCwgCi0weDE0NDAwMDA1LCAweDNjMDMzZjAwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2IwLCAKLTB4ODAwNDg1YiwgMHgzNDYzMDBlMCwgMHgzYzAyMDAwMSwgMHg4YzQyNWNiMCwgCi0weDNjMDMzZjAwLCAweDM0NjMwMGUyLCAweDQzMTAyNSwgMHhhZjgyMDIwMCwgCi0weDNjMDMwMDAxLCAweDhjNjM1Y2I0LCAweDNjMDRmNzAwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVjYzAsIDB4M2MwNTAwMDEsIDB4OGNhNTVjZGMsIDB4NjQxODI1LCAKLTB4NDMxMDI1LCAweDQ1MTAyNSwgMHhhZjgyMDIyMCwgMHgzZTAwMDA4LCAKLTB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwMSwgMHg4YzYzNWNjOCwgCi0weDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDI0MDIwMDAxLCAweDEwNjIwMDBmLCAKLTB4MCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgyNDYzMDAwMiwgCi0weDYyMTAyMywgMHgyYzQyMDAwMywgMHgxMDQwMDAxMSwgMHgwLCAKLTB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAzLCAweDEwNDAwMDBjLCAKLTB4MCwgMHg4MDA0ODc5LCAweDAsIDB4OGY4MzAwNTQsIAotMHg4ZjgyMDA1NCwgMHg4MDA0ODg1LCAweDI0NjMwMDA3LCAweDhmODIwMDU0LCAKLTB4NjIxMDIzLCAweDJjNDIwMDA4LCAweDE0NDBmZmZjLCAweDAsIAotMHg4Zjg0MDBlMCwgMHgzMDgyMDAwNywgMHgxMDQwMDAwZCwgMHgwLCAKLTB4OGY4MjAwNTQsIDB4OGY4MzAwZTAsIDB4MTQ4MzAwMDksIDB4MjQ0NTAwMzIsIAotMHg4ZjgyMDA1NCwgMHhhMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTA0MDAwMDQsIAotMHgwLCAweDhmODIwMGUwLCAweDEwODJmZmY5LCAweDAsIAotMHg4ZjgyMDIyMCwgMHgyNDAzZmZmZCwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIAotMHgzZTAwMDA4LCAweDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVjZTQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNWNlOCwgMHg1MDYyMDAwNCwgMHgyNDYzZmZmZiwgCi0weDNjMDEwMDAxLCAweGFjMjM1Y2U4LCAweDI0NjNmZmZmLCAweDJjNjIwMDA5LCAKLTB4MTA0MDAwOWQsIDB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAKLTB4OGMyMjViMDgsIDB4NDAwMDA4LCAweDAsIDB4OGY4MjAwNDQsIAotMHgzNDQyODA4MCwgMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4MDA0OTM4LCAKLTB4MjQwMjAwMDIsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjVkYTgsIAotMHgyNDYzZDhmMCwgMHg0MzEwMjMsIDB4MmM0MjI3MTAsIDB4MTQ0MDAwOGEsIAotMHgyNDAyMDAwMywgMHg4MDA0OTQ1LCAweDAsIDB4OGY4MjAwNDQsIAotMHgzYzAzZmZmZiwgMHgzNDYzN2ZmZiwgMHg0MzEwMjQsIDB4YWY4MjAwNDQsIAotMHg4ZjgzMDA1NCwgMHg4MDA0OTM4LCAweDI0MDIwMDA0LCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYTgsIDB4MjQ2M2ZmZjYsIDB4NDMxMDIzLCAKLTB4MmM0MjAwMGEsIDB4MTQ0MDAwNzgsIDB4MjQwMjAwMDUsIDB4ODAwNDk0NSwgCi0weDAsIDB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAKLTB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LCAKLTB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4MzQ0MjAwMDIsIDB4YWY4MjAyMjAsIAotMHgzYzAyM2YwMCwgMHgzNDQyMDBlMCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIwMCwgCi0weDI0MDNmZmZkLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwgMHgyNDA0MDAwMSwgCi0weDM0MDVmZmZmLCAweGFmODQwMjA0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4ODAwNDhlYywgMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIAotMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMjI0LCAKLTB4NDIwNDAsIDB4YTQxMDJiLCAweDEwNDBmZmYyLCAweDAsIAotMHg4ZjgyMDIyMCwgMHgzYzAzZjcwMCwgMHg0MzEwMjUsIDB4YWY4MjAyMjAsIAotMHg4ZjgyMDIxNCwgMHgzYzAzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjI1MWYsIAotMHhhZjgyMDIxNCwgMHg4ZjgyMDIyMCwgMHgyNDAzZmZmYiwgMHg0MzEwMjQsIAotMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzYzA0ZjcwMCwgMHgzNDg0MDAwOCwgCi0weDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMzZjAwLCAKLTB4MzQ2MzAwZTIsIDB4NDQxMDI1LCAweGFmODIwMjIwLCAweGFmODMwMjAwLCAKLTB4OGY4NDAwZjAsIDB4Mjc2MjE3ZjgsIDB4MTQ4MjAwMDIsIDB4MjQ4NTAwMDgsIAotMHgyNzY1MTAwMCwgMHg4ZjgyMDBmNCwgMHgxMGEyMDAwNywgMHgzYzAzODAwMCwgCi0weDM0NjMwMDQwLCAweDNjMDIwMDAxLCAweDI0NDI1YzcwLCAweGFjODIwMDAwLCAKLTB4YWM4MzAwMDQsIDB4YWY4NTAwZjAsIDB4OGY4MzAwNTQsIDB4ODAwNDkzOCwgCi0weDI0MDIwMDA2LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI1ZGE4LCAKLTB4MjQ2M2ZmZjYsIDB4NDMxMDIzLCAweDJjNDIwMDBhLCAweDE0NDAwMDIyLCAKLTB4MjQwMjAwMDcsIDB4ODAwNDk0NSwgMHgwLCAweDhmODIwMGUwLCAKLTB4YWY4MjAwZTQsIDB4OGY4MjAwZTAsIDB4YWY4MjAwZTgsIDB4OGY4MjAyMjAsIAotMHgzNDQyMDAwNCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgyNDAzZmZmNywgCi0weDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDA0NCwgMHgzNDQyODA4MCwgCi0weGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDI0MDIwMDA4LCAweDNjMDEwMDAxLCAKLTB4YWMyMjVjZTQsIDB4M2MwMTAwMDEsIDB4ODAwNDk0NywgMHhhYzIzNWRhOCwgCi0weDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI1ZGE4LCAweDI0NjNkOGYwLCAKLTB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMDAzLCAweDI0MDIwMDA5LCAKLTB4M2MwMTAwMDEsIDB4YWMyMjVjZTQsIDB4M2UwMDAwOCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZDgsIAotMHhhZmIyMDAxOCwgMHg4MDkwMjEsIDB4YWZiMzAwMWMsIDB4YTA5ODIxLCAKLTB4YWZiMTAwMTQsIDB4YzA4ODIxLCAweGFmYjAwMDEwLCAweDgwMjEsIAotMHhhZmJmMDAyMCwgMHhhNjIwMDAwMCwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAKLTB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwgCi0weGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgyNDEwMDAxMCwgMHgyNTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgCi0weDI1MDEwMjQsIDB4MjQxMDAwMTAsIDB4MjcwMTAyNCwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgyNzAxMDI0LCAweGMwMDRkNzEsIDB4MzQxMDgwMDAsIAotMHhjMDA0ZDcxLCAweDAsIDB4YzAwNGQyYiwgMHgwLCAKLTB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAweDUwMTAyNSwgCi0weGE2MjIwMDAwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLCAKLTB4YzAwNGQ3MSwgMHgwLCAweDhmYmYwMDIwLCAweDhmYjMwMDFjLCAKLTB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDI4LCAweDI3YmRmZmQ4LCAweGFmYjEwMDE0LCAweDgwODgyMSwgCi0weGFmYjIwMDE4LCAweGEwOTAyMSwgMHhhZmIzMDAxYywgMHhjMDk4MjEsIAotMHhhZmIwMDAxMCwgMHg4MDIxLCAweGFmYmYwMDIwLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDIzMDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MjMwMTAyNCwgMHgyNDEwMDAxMCwgMHgyNTAxMDI0LCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDI1MDEwMjQsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwgMHgzNDEwODAwMCwgCi0weDk2NjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZjgsIAotMHgwLCAweGMwMDRkNzEsIDB4MCwgMHg4ZmJmMDAyMCwgCi0weDhmYjMwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzAzMDAwMSwgMHg4YzYzNWQwMCwgCi0weDNjMDIwMDAxLCAweDhjNDI1ZDQ4LCAweDI3YmRmZmQ4LCAweGFmYmYwMDIwLCAKLTB4YWZiMTAwMWMsIDB4MTA2MjAwMDMsIDB4YWZiMDAwMTgsIDB4M2MwMTAwMDEsIAotMHhhYzIzNWQ0OCwgMHgyNDYzZmZmZiwgMHgyYzYyMDAxMywgMHgxMDQwMDM0OSwgCi0weDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNWIzMCwgCi0weDQwMDAwOCwgMHgwLCAweGMwMDRkNzEsIDB4ODAyMSwgCi0weDM0MDI4MDAwLCAweGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgCi0weDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweGMwMDRkNGIsIAotMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywgMHgwLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsIAotMHg4MDA0ZDI0LCAweDI0MDIwMDAyLCAweDI3YjEwMDEwLCAweGE3YTAwMDEwLCAKLTB4ODAyMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAKLTB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDRiLCAKLTB4MjAyMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4MjQxMDAwMTAsIAotMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIAotMHgyNDEwMDAxMCwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmMsIDB4MCwgMHhjMDA0ZDcxLCAweDM0MTA4MDAwLCAKLTB4YzAwNGQ3MSwgMHgwLCAweGMwMDRkMmIsIDB4MCwgCi0weDUwNDAwMDA1LCAweDEwODA0MiwgMHg5NjIyMDAwMCwgMHg1MDEwMjUsIAotMHhhNjIyMDAwMCwgMHgxMDgwNDIsIDB4MTYwMGZmZjcsIDB4MCwgCi0weGMwMDRkNzEsIDB4MCwgMHg5N2EyMDAxMCwgMHgzMDQyODAwMCwgCi0weDE0NDAwMmRjLCAweDI0MDIwMDAzLCAweDgwMDRkMjQsIDB4MCwgCi0weDI0MDIxMjAwLCAweGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIAotMHhjMDA0ZDRiLCAweDIwMjEsIDB4MTA4MDQyLCAweDE2MDBmZmZjLCAKLTB4MCwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIAotMHgyMDIxLCAweDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkNzEsIAotMHgwLCAweDhmODMwMDU0LCAweDgwMDRkMTYsIDB4MjQwMjAwMDQsIAotMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWRiOCwgMHgyNDYzZmY5YywgCi0weDQzMTAyMywgMHgyYzQyMDA2NCwgMHgxNDQwMDI5ZSwgMHgyNDAyMDAwMiwgCi0weDNjMDMwMDAxLCAweDhjNjM1ZGJjLCAweDEwNjIwMjk3LCAweDJjNjIwMDAzLCAKLTB4MTQ0MDAyOTYsIDB4MjQwMjAwMTEsIDB4MjQwMjAwMDMsIDB4MTA2MjAwMDUsIAotMHgyNDAyMDAwNCwgMHgxMDYyMDI5MSwgMHgyNDAyMDAwZiwgMHg4MDA0ZDI0LCAKLTB4MjQwMjAwMTEsIDB4ODAwNGQyNCwgMHgyNDAyMDAwNSwgMHgyNDAyMDAxNCwgCi0weGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAKLTB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMTIsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTIsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwgMHgzNDEwODAwMCwgCi0weDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZjgsIAotMHgwLCAweGMwMDRkNzEsIDB4MCwgMHg4ZjgzMDA1NCwgCi0weDgwMDRkMTYsIDB4MjQwMjAwMDYsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWRiOCwgMHgyNDYzZmY5YywgMHg0MzEwMjMsIDB4MmM0MjAwNjQsIAotMHgxNDQwMDI1MCwgMHgyNDAyMDAwNywgMHg4MDA0ZDI0LCAweDAsIAotMHgyNDAyMDAwNiwgMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHg4MDIxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTMsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDEzLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsIAotMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDA4LCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAKLTB4MmM0MjAwNjQsIDB4MTQ0MDAyMGYsIDB4MjQwMjAwMDksIDB4ODAwNGQyNCwgCi0weDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwgCi0weGMwMDRkNzEsIDB4MzQxMDgwMDAsIDB4YzAwNGQ3MSwgMHgwLCAKLTB4YzAwNGQyYiwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkNzEsIDB4ODAyMSwgCi0weDk3YTIwMDEwLCAweDI3YjEwMDEwLCAweDM0NDIwMDAxLCAweGE3YTIwMDEwLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE4LCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsIAotMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDBhLCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAKLTB4MmM0MjAwNjQsIDB4MTQ0MDAxOWIsIDB4MjQwMjAwMGIsIDB4ODAwNGQyNCwgCi0weDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE3LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxNywgCi0weGMwMDRkNzEsIDB4MzQxMDgwMDAsIDB4YzAwNGQ3MSwgMHgwLCAKLTB4YzAwNGQyYiwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkNzEsIDB4ODAyMSwgCi0weDk3YTIwMDEwLCAweDI3YjEwMDEwLCAweDM0NDIwNzAwLCAweGE3YTIwMDEwLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTcsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE3LCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsIAotMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDBjLCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAKLTB4MmM0MjAwNjQsIDB4MTQ0MDAxMjcsIDB4MjQwMjAwMTIsIDB4ODAwNGQyNCwgCi0weDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE0LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxNCwgCi0weGMwMDRkNzEsIDB4MzQxMDgwMDAsIDB4YzAwNGQ3MSwgMHgwLCAKLTB4YzAwNGQyYiwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkNzEsIDB4ODAyMSwgCi0weDk3YTIwMDEwLCAweDI3YjEwMDEwLCAweDM0NDIwMDEwLCAweGE3YTIwMDEwLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTQsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE0LCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsIAotMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDEzLCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAKLTB4MmM0MjAwNjQsIDB4MTQ0MDAwYjMsIDB4MjQwMjAwMGQsIDB4ODAwNGQyNCwgCi0weDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgCi0weGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwgCi0weGMwMDRkNzEsIDB4MzQxMDgwMDAsIDB4YzAwNGQ3MSwgMHgwLCAKLTB4YzAwNGQyYiwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkNzEsIDB4ODAyMSwgCi0weDk3YTIwMDEwLCAweDI3YjEwMDEwLCAweDMwNDJmZmZlLCAweGE3YTIwMDEwLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE4LCAKLTB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsIAotMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDBlLCAweDI0MDIwODQwLCAKLTB4YTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4ODAyMSwgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIAotMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAxMywgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxMywgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweDM0MTA4MDAwLCAKLTB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmOCwgCi0weDAsIDB4YzAwNGQ3MSwgMHgwLCAweDhmODMwMDU0LCAKLTB4MjQwMjAwMTAsIDB4M2MwMTAwMDEsIDB4YWMyMjVkMDAsIDB4M2MwMTAwMDEsIAotMHg4MDA0ZDI2LCAweGFjMjM1ZGI4LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAKLTB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAweDJjNDIwMDY0LCAKLTB4MTQ0MDAwMDQsIDB4MCwgMHgyNDAyMDAxMSwgMHgzYzAxMDAwMSwgCi0weGFjMjI1ZDAwLCAweDhmYmYwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHg4Zjg1MDA0NCwgMHg4ZjgyMDA0NCwgCi0weDNjMDMwMDAxLCAweDQzMTAyNSwgMHgzYzAzMDAwOCwgMHhhZjgyMDA0NCwgCi0weDhmODQwMDU0LCAweDhmODIwMDU0LCAweGEzMjgyNCwgMHg4MDA0ZDM3LCAKLTB4MjQ4NDAwMDEsIDB4OGY4MjAwNTQsIDB4ODIxMDIzLCAweDJjNDIwMDAyLCAKLTB4MTQ0MGZmZmMsIDB4MCwgMHg4ZjgyMDA0NCwgMHgzYzAzZmZmZSwgCi0weDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDgwMDRkNDUsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIAotMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwgCi0weDNlMDAwMDgsIDB4YTAxMDIxLCAweDhmODMwMDQ0LCAweDNjMDJmZmYwLCAKLTB4MzQ0MmZmZmYsIDB4NDI0ODAsIDB4NjIxODI0LCAweDNjMDIwMDAyLCAKLTB4ODIyMDI1LCAweDY0MTgyNSwgMHhhZjgzMDA0NCwgMHg4ZjgyMDA0NCwgCi0weDNjMDNmZmZlLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDRkNWUsIDB4MjQ2MzAwMDEsIAotMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIAotMHgwLCAweDhmODIwMDQ0LCAweDNjMDMwMDAxLCAweDQzMTAyNSwgCi0weGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDRkNmIsIAotMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIAotMHgxNDQwZmZmYywgMHgwLCAweDNlMDAwMDgsIDB4MCwgCi0weDhmODIwMDQ0LCAweDNjMDNmZmYwLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgCi0weGFmODIwMDQ0LCAweDhmODIwMDQ0LCAweDNjMDMwMDAxLCAweDQzMTAyNSwgCi0weGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDRkN2YsIAotMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIAotMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMDQ0LCAweDNjMDNmZmZlLCAKLTB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweGFmODIwMDQ0LCAweDhmODMwMDU0LCAKLTB4OGY4MjAwNTQsIDB4ODAwNGQ4ZCwgMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgCi0weDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLCAKLTB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmM4LCAweGFmYjMwMDI0LCAKLTB4ODA5ODIxLCAweGFmYjUwMDJjLCAweGEwYTgyMSwgMHhhZmIyMDAyMCwgCi0weGMwOTAyMSwgMHgzMmEyZmZmZiwgMHhhZmJmMDAzMCwgMHhhZmI0MDAyOCwgCi0weGFmYjEwMDFjLCAweGFmYjAwMDE4LCAweDE0NDAwMDM0LCAweGE3YjIwMDEwLCAKLTB4MzI3MWZmZmYsIDB4MjdiMjAwMTAsIDB4ODAyMSwgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIAotMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgyMzAxMDI0LCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDIzMDEwMjQsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwgMHgzNDEwODAwMCwgCi0weDk2NDIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTIwMDAwNzUsIAotMHgwLCAweDgwMDRkYzksIDB4MCwgMHgzMjc0ZmZmZiwgCi0weDI3YjEwMDEwLCAweGE3YTAwMDEwLCAweDgwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAKLTB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4MjkwMTAyNCwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgyOTAxMDI0LCAweGMwMDRkNzEsIAotMHgzNDEwODAwMCwgMHhjMDA0ZDcxLCAweDAsIDB4YzAwNGQyYiwgCi0weDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAKLTB4NTAxMDI1LCAweGE2MjIwMDAwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgCi0weDAsIDB4YzAwNGQ3MSwgMHgwLCAweDMyYTVmZmZmLCAKLTB4MjQwMjAwMDEsIDB4NTRhMjAwMDQsIDB4MjQwMjAwMDIsIDB4OTdhMjAwMTAsIAotMHg4MDA0ZTE0LCAweDUyMTAyNSwgMHgxNGEyMDAwNiwgMHgzMjcxZmZmZiwgCi0weDk3YTIwMDEwLCAweDEyMTgyNywgMHg0MzEwMjQsIDB4YTdhMjAwMTAsIAotMHgzMjcxZmZmZiwgMHgyN2IyMDAxMCwgMHg4MDIxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwgCi0weDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgCi0weDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDIzMDEwMjQsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MjMwMTAyNCwgMHhjMDA0ZDRiLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweDM0MTA4MDAwLCAKLTB4OTY0MjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmOCwgCi0weDAsIDB4YzAwNGQ3MSwgMHgwLCAweDhmYmYwMDMwLCAKLTB4OGZiNTAwMmMsIDB4OGZiNDAwMjgsIDB4OGZiMzAwMjQsIDB4OGZiMjAwMjAsIAotMHg4ZmIxMDAxYywgMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDM4LCAKLTB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZTgsIAotMHhhZmJmMDAxMCwgMHgzYzAzMDAwMSwgMHg3NzE4MjEsIDB4OGM2MzgzYWMsIAotMHgyNDAyMDAwOCwgMHgxNDYyMDIyYywgMHg4MDMwMjEsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWQ5OCwgMHgxNDQwMDAzMywgMHgwLCAweDhmODUwMjI0LCAKLTB4MzhhMzAwMjAsIDB4MmM2MzAwMDEsIDB4MzhhMjAwMTAsIDB4MmM0MjAwMDEsIAotMHg2MjE4MjUsIDB4MTQ2MDAwMGQsIDB4MzhhMzAwMzAsIDB4MmM2MzAwMDEsIAotMHgzOGEyMDQwMCwgMHgyYzQyMDAwMSwgMHg2MjE4MjUsIDB4MTQ2MDAwMDcsIAotMHgzOGEzMDQwMiwgMHgyYzYzMDAwMSwgMHgzOGEyMDQwNCwgMHgyYzQyMDAwMSwgCi0weDYyMTgyNSwgMHgxMDYwMDAwNSwgMHgwLCAweGMwMDQyOWIsIAotMHgwLCAweDgwMDRlOGQsIDB4MjQwMjAwMGUsIDB4YzAwNDNkZCwgCi0weDAsIDB4M2MwNTAwMDEsIDB4OGNhNTVjYzgsIDB4YzAwNTJhMiwgCi0weDIwMjEsIDB4M2MwMzAwMDEsIDB4OGM2MzVjYzgsIDB4MjQwMjAwMDQsIAotMHgxNDYyMDAwNSwgMHgyNDAzZmZmYiwgMHgzYzAyMDAwMSwgMHg4YzQyNWNjNCwgCi0weDgwMDRlODksIDB4MjQwM2ZmZjcsIDB4M2MwMjAwMDEsIDB4OGM0MjVjYzQsIAotMHg0MzEwMjQsIDB4M2MwMTAwMDEsIDB4YWMyMjVjYzQsIDB4MjQwMjAwMGUsIAotMHgzYzAxMDAwMSwgMHhjMDA0MjliLCAweGFjMjI3ZGQwLCAweDgwMDUwODcsIAotMHgwLCAweDhmODIwMjIwLCAweDNjMDMwNDAwLCAweDQzMTAyNCwgCi0weDEwNDAwMDI3LCAweDI0MDNmZmJmLCAweDhmODUwMjI0LCAweDNjMDIwMDAxLCAKLTB4OGM0MjdkZGMsIDB4YTMyMDI0LCAweDQzMTAyNCwgMHgxNDgyMDAwYywgCi0weDAsIDB4M2MwMjAwMDEsIDB4OGM0MjdkZTAsIDB4MjQ0MjAwMDEsIAotMHgzYzAxMDAwMSwgMHhhYzIyN2RlMCwgMHgyYzQyMDAwMiwgMHgxNDQwMDAwOCwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDgwMDRlYWQsIDB4YWMyMjdlMDAsIAotMHgzYzAxMDAwMSwgMHhhYzIwN2RlMCwgMHgzYzAxMDAwMSwgMHhhYzIwN2UwMCwgCi0weDNjMDIwMDAxLCAweDhjNDI3ZTAwLCAweDEwNDAwMDA2LCAweDMwYTIwMDQwLCAKLTB4MTA0MDAwMDQsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4ODAwNGViOCwgCi0weGFjMjI3ZTA0LCAweDNjMDEwMDAxLCAweGFjMjA3ZTA0LCAweDNjMDEwMDAxLCAKLTB4YWMyNTdkZGMsIDB4M2MwMTAwMDEsIDB4ODAwNGVjOCwgMHhhYzIwN2UxMCwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI3ZTEwLCAweDNjMDEwMDAxLCAKLTB4YWMyMDdlMDAsIDB4M2MwMTAwMDEsIDB4YWMyMDdkZTAsIDB4M2MwMTAwMDEsIAotMHhhYzIwN2UwNCwgMHgzYzAxMDAwMSwgMHhhYzIwN2RkYywgMHgzYzAzMDAwMSwgCi0weDhjNjM3ZGQwLCAweDNjMDIwMDAxLCAweDhjNDI3ZGQ0LCAweDEwNjIwMDAzLCAKLTB4M2MwMjAyMDAsIDB4M2MwMTAwMDEsIDB4YWMyMzdkZDQsIDB4YzIxMDI0LCAKLTB4MTA0MDAwMDcsIDB4MjQ2M2ZmZmYsIDB4OGY4MjAyMjAsIDB4MjQwMzAwMDEsIAotMHgzYzAxMDAwMSwgMHhhYzIzNWNjYywgMHg4MDA1MDg1LCAweDNjMDNmNzAwLCAKLTB4MmM2MjAwMGUsIDB4MTA0MDAxYTgsIDB4MzEwODAsIDB4M2MwMTAwMDEsIAotMHgyMjA4MjEsIDB4OGMyMjViODAsIDB4NDAwMDA4LCAweDAsIAotMHgzYzAxMDAwMSwgMHhhYzIwN2UwMCwgMHgzYzAxMDAwMSwgMHhhYzIwN2RlMCwgCi0weDNjMDEwMDAxLCAweGFjMjA3ZGRjLCAweDNjMDEwMDAxLCAweGFjMjA3ZTA0LCAKLTB4M2MwMTAwMDEsIDB4YWMyMDdkZjgsIDB4M2MwMTAwMDEsIDB4YWMyMDdkZjAsIAotMHhjMDA0ODZhLCAweGFmODAwMjI0LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAKLTB4YWMyMjdkZDAsIDB4M2MwMjAwMDEsIDB4OGM0MjdlMTAsIDB4MTQ0MDAwNTYsIAotMHgzYzAzZmRmZiwgMHg4ZWUyMDAwMCwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIAotMHhjMDA0MjliLCAweGFlZTIwMDAwLCAweGFmODAwMjA0LCAweDhmODIwMjAwLCAKLTB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGFmODIwMjAwLCAweDNjMDEwMDAxLCAKLTB4YWMyMDdlMjAsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjdkZjgsIAotMHgyNDA0MDAwMSwgMHgzYzAxMDAwMSwgMHhhYzI0N2UwYywgMHgyNDQyMDAwMSwgCi0weDNjMDEwMDAxLCAweGFjMjI3ZGY4LCAweDJjNDIwMDA0LCAweDNjMDEwMDAxLCAKLTB4YWMyMzdkZjQsIDB4MTQ0MDAwMDYsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIAotMHhhYzI0NWNjYywgMHgzYzAxMDAwMSwgMHg4MDA1MDgzLCAweGFjMjA3ZGY4LCAKLTB4M2MwMTAwMDEsIDB4ODAwNTA4MywgMHhhYzIyN2RkMCwgMHg4ZjgzMDA1NCwgCi0weDNjMDIwMDAxLCAweDhjNDI3ZGY0LCAweDI0NjNkOGYwLCAweDQzMTAyMywgCi0weDJjNDIyNzEwLCAweDE0NDAwMDAzLCAweDI0MDIwMDA0LCAweDNjMDEwMDAxLCAKLTB4YWMyMjdkZDAsIDB4M2MwMjAwMDEsIDB4OGM0MjdlMTAsIDB4MTQ0MDAwMjYsIAotMHgzYzAzZmRmZiwgMHg4ZWUyMDAwMCwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIAotMHg4MDA1MDgzLCAweGFlZTIwMDAwLCAweDNjMDQwMDAxLCAweDhjODQ1ZDljLCAKLTB4M2MwMTAwMDEsIDB4YzAwNTA4YSwgMHhhYzIwN2RlOCwgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZTFjLCAweGFmODIwMjA0LCAweDNjMDIwMDAxLCAweDhjNDI3ZTEwLCAKLTB4MTQ0MDAwMTUsIDB4M2MwM2ZkZmYsIDB4OGVlMjAwMDAsIDB4MzQ2M2ZmZmYsIAotMHg0MzEwMjQsIDB4YWVlMjAwMDAsIDB4OGY4MjAyMDQsIDB4MzA0MjAwMzAsIAotMHgxNDQwMDEzYywgMHgyNDAyMDAwMiwgMHgzYzAzMDAwMSwgMHg4YzYzN2UxYywgCi0weDI0MDIwMDA1LCAweDNjMDEwMDAxLCAweGFjMjI3ZGQwLCAweDNjMDEwMDAxLCAKLTB4ODAwNTA4MywgMHhhYzIzN2UyMCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UxMCwgCi0weDEwNDAwMDEwLCAweDNjMDNmZGZmLCAweDNjMDIwMDAxLCAweDhjNDI1ZDZjLCAKLTB4MjQ0MjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjVkNmMsIDB4MmM0MjAwMDIsIAotMHgxNDQwMDEzMSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ3NCwgCi0weDNjMDEwMDAxLCAweGFjMjA1ZDZjLCAweDNjMDEwMDAxLCAweDgwMDUwODMsIAotMHhhYzIyNWNjYywgMHg4ZWUyMDAwMCwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIAotMHhhZWUyMDAwMCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UwMCwgMHgxMDQwMDEyMiwgCi0weDAsIDB4M2MwMjAwMDEsIDB4OGM0MjdkZGMsIDB4MTA0MDAxMWUsIAotMHgwLCAweDNjMDEwMDAxLCAweGFjMjI3ZTA4LCAweDI0MDIwMDAzLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjdkZTAsIDB4ODAwNTAyNCwgMHgyNDAyMDAwNiwgCi0weDNjMDEwMDAxLCAweGFjMjA3ZGU4LCAweDhmODIwMjA0LCAweDM0NDIwMDQwLCAKLTB4YWY4MjAyMDQsIDB4M2MwMjAwMDEsIDB4OGM0MjdlMjAsIDB4MjQwMzAwMDcsIAotMHgzYzAxMDAwMSwgMHhhYzIzN2RkMCwgMHgzNDQyMDA0MCwgMHgzYzAxMDAwMSwgCi0weGFjMjI3ZTIwLCAweDNjMDIwMDAxLCAweDhjNDI3ZTAwLCAweDEwNDAwMDA1LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyN2RkYywgMHgxMDQwMDBmOSwgCi0weDI0MDIwMDAyLCAweDNjMDUwMDAxLCAweDI0YTU3ZGUwLCAweDhjYTIwMDAwLCAKLTB4MmM0MjRlMjEsIDB4MTA0MDAwZjMsIDB4MjQwMjAwMDIsIDB4M2MwMjAwMDEsIAotMHg4YzQyN2UwNCwgMHgxMDQwMDBmOCwgMHgyNDA0ZmZiZiwgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZGRjLCAweDNjMDMwMDAxLCAweDhjNjM3ZTA4LCAweDQ0MTAyNCwgCi0weDY0MTgyNCwgMHgxMDQzMDAwNCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgCi0weDgwMDUwODMsIDB4YWMyMjdkZDAsIDB4MjQwMjAwMDMsIDB4YWNhMjAwMDAsIAotMHgyNDAyMDAwOCwgMHgzYzAxMDAwMSwgMHhhYzIyN2RkMCwgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZTBjLCAweDEwNDAwMDBjLCAweDI0MDIwMDAxLCAweDNjMDQwMDAxLCAKLTB4YzAwNTA5NywgMHg4Yzg0N2RkYywgMHgzYzAyMDAwMSwgMHg4YzQyN2UyOCwgCi0weDE0NDAwMDA1LCAweDI0MDIwMDAxLCAweDNjMDIwMDAxLCAweDhjNDI3ZTI0LCAKLTB4MTA0MDAwMDYsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjVjY2MsIAotMHgzYzAxMDAwMSwgMHg4MDA1MDgzLCAweGFjMjA3ZGY4LCAweDNjMDIwMDAxLCAKLTB4OGM0MjdkZjAsIDB4M2MwMzAwMDEsIDB4OGM2MzdkZGMsIDB4MmM0MjAwMDEsIAotMHgyMTBjMCwgMHgzMDYzMDAwOCwgMHgzYzAxMDAwMSwgMHhhYzIyN2RmMCwgCi0weDNjMDEwMDAxLCAweGFjMjM3ZGVjLCAweDhmODMwMDU0LCAweDI0MDIwMDA5LCAKLTB4M2MwMTAwMDEsIDB4YWMyMjdkZDAsIDB4M2MwMTAwMDEsIDB4ODAwNTA4MywgCi0weGFjMjM3ZGY0LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI3ZGY0LCAKLTB4MjQ2M2Q4ZjAsIDB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMGE4LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UwMCwgMHgxMDQwMDAwNSwgCi0weDAsIDB4M2MwMjAwMDEsIDB4OGM0MjdkZGMsIDB4MTA0MDAwYTksIAotMHgyNDAyMDAwMiwgMHgzYzAzMDAwMSwgMHgyNDYzN2RlMCwgMHg4YzYyMDAwMCwgCi0weDJjNDI0ZTIxLCAweDEwNDAwMGEzLCAweDI0MDIwMDAyLCAweDNjMDIwMDAxLCAKLTB4OGM0MjdlMGMsIDB4MTA0MDAwMGUsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZGRjLCAweDNjMDEwMDAxLCAweGFjMjA3ZTBjLCAweDMwNDIwMDgwLCAKLTB4MTA0MDAwMmYsIDB4MjQwMjAwMGMsIDB4OGY4MjAyMDQsIDB4MzA0MjAwODAsIAotMHgxNDQwMDAwYywgMHgyNDAyMDAwMywgMHg4MDA1MDExLCAweDI0MDIwMDBjLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjdkZGMsIDB4MzA0MjAwODAsIDB4MTQ0MDAwMDUsIAotMHgyNDAyMDAwMywgMHg4ZjgyMDIwNCwgMHgzMDQyMDA4MCwgMHgxMDQwMDAxZiwgCi0weDI0MDIwMDAzLCAweGFjNjIwMDAwLCAweDI0MDIwMDBhLCAweDNjMDEwMDAxLCAKLTB4YWMyMjdkZDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDdlMTgsIDB4OGM4MjAwMDAsIAotMHgzYzAzMDAwMSwgMHg4YzYzN2RmMCwgMHg0MzEwMjUsIDB4YWY4MjAyMDQsIAotMHg4YzgzMDAwMCwgMHgzYzA0MDAwMSwgMHg4Yzg0N2RmMCwgMHgyNDAyMDAwYiwgCi0weDNjMDEwMDAxLCAweGFjMjI3ZGQwLCAweDY0MTgyNSwgMHgzYzAxMDAwMSwgCi0weGFjMjM3ZTIwLCAweDNjMDUwMDAxLCAweDI0YTU3ZGUwLCAweDhjYTIwMDAwLCAKLTB4MmM0MjRlMjEsIDB4MTA0MDAwNmYsIDB4MjQwMjAwMDIsIDB4M2MwMjAwMDEsIAotMHg4YzQyN2UxMCwgMHgxMDQwMDAwNSwgMHgwLCAweDI0MDIwMDBjLCAKLTB4M2MwMTAwMDEsIDB4ODAwNTA4MywgMHhhYzIyN2RkMCwgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZTAwLCAweDEwNDAwMDZjLCAweDAsIDB4M2MwNDAwMDEsIAotMHg4Yzg0N2RkYywgMHgxMDgwMDA1ZSwgMHgzMDgyMDAwOCwgMHgzYzAzMDAwMSwgCi0weDhjNjM3ZGVjLCAweDEwNjIwMDY0LCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAKLTB4YWMyNDdlMDgsIDB4YWNhMjAwMDAsIDB4MjQwMjAwMDYsIDB4M2MwMTAwMDEsIAotMHg4MDA1MDgzLCAweGFjMjI3ZGQwLCAweDhmODIwMjAwLCAweDM0NDIwMDAyLCAKLTB4YWY4MjAyMDAsIDB4OGY4MzAwNTQsIDB4MjQwMjAwMGQsIDB4M2MwMTAwMDEsIAotMHhhYzIyN2RkMCwgMHgzYzAxMDAwMSwgMHhhYzIzN2RmNCwgMHg4ZjgzMDA1NCwgCi0weDNjMDIwMDAxLCAweDhjNDI3ZGY0LCAweDI0NjNkOGYwLCAweDQzMTAyMywgCi0weDJjNDIyNzEwLCAweDE0NDAwMDNhLCAweDAsIDB4M2MwMjAwMDEsIAotMHg4YzQyN2UxMCwgMHgxMDQwMDAyOSwgMHgyNDAyMDAwZSwgMHgzYzAzMDAwMSwgCi0weDhjNjM3ZTI0LCAweDNjMDEwMDAxLCAweDE0NjAwMDE1LCAweGFjMjI3ZGQwLCAKLTB4YzAwNDNkZCwgMHgwLCAweDNjMDUwMDAxLCAweDhjYTU1Y2M4LCAKLTB4YzAwNTJhMiwgMHgyMDIxLCAweDNjMDMwMDAxLCAweDhjNjM1Y2M4LCAKLTB4MjQwMjAwMDQsIDB4MTQ2MjAwMDUsIDB4MjQwM2ZmZmIsIDB4M2MwMjAwMDEsIAotMHg4YzQyNWNjNCwgMHg4MDA1MDUyLCAweDI0MDNmZmY3LCAweDNjMDIwMDAxLCAKLTB4OGM0MjVjYzQsIDB4NDMxMDI0LCAweDNjMDEwMDAxLCAweGFjMjI1Y2M0LCAKLTB4OGVlMjAwMDAsIDB4M2MwMzAyMDAsIDB4NDMxMDI1LCAweGFlZTIwMDAwLCAKLTB4OGY4MjAyMjQsIDB4M2MwMTAwMDEsIDB4YWMyMjdlMmMsIDB4OGY4MjAyMjAsIAotMHgyNDAzZmZmYiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIAotMHgzNDQyMDAwMiwgMHg4MDA1MDgzLCAweGFmODIwMjIwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjdlMDAsIDB4MTA0MDAwMDUsIDB4MCwgMHgzYzAyMDAwMSwgCi0weDhjNDI3ZGRjLCAweDEwNDAwMDBmLCAweDI0MDIwMDAyLCAweDNjMDIwMDAxLCAKLTB4OGM0MjdkZTAsIDB4MmM0MjRlMjEsIDB4MTA0MDAwMGEsIDB4MjQwMjAwMDIsIAotMHgzYzAyMDAwMSwgMHg4YzQyN2UwMCwgMHgxMDQwMDAwZiwgMHgwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjdkZGMsIDB4MTQ0MDAwMGIsIDB4MCwgCi0weDI0MDIwMDAyLCAweDNjMDEwMDAxLCAweDgwMDUwODMsIDB4YWMyMjdkZDAsIAotMHgzYzAyMDAwMSwgMHg4YzQyN2UwMCwgMHgxMDQwMDAwMywgMHgwLCAKLTB4YzAwNDI5YiwgMHgwLCAweDhmODIwMjIwLCAweDNjMDNmNzAwLCAKLTB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmYmYwMDEwLCAweDNlMDAwMDgsIAotMHgyN2JkMDAxOCwgMHgzYzAzMDAwMSwgMHgyNDYzN2UyOCwgMHg4YzYyMDAwMCwgCi0weDEwNDAwMDA1LCAweDM0NDIyMDAwLCAweDNjMDEwMDAxLCAweGFjMjI3ZTFjLCAKLTB4ODAwNTA5NSwgMHhhYzYwMDAwMCwgMHgzYzAxMDAwMSwgMHhhYzI0N2UxYywgCi0weDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZlMCwgMHgzMDgyMDAzMCwgCi0weGFmYmYwMDE4LCAweDNjMDEwMDAxLCAweGFjMjI3ZTI0LCAweDE0NDAwMDY3LCAKLTB4M2MwMmZmZmYsIDB4MzQ0MjFmMGUsIDB4ODIxMDI0LCAweDE0NDAwMDYxLCAKLTB4MjQwMjAwMzAsIDB4MzA4MjIwMDAsIDB4MTA0MDAwNWQsIDB4MzA4MzgwMDAsIAotMHgzMWEwMiwgMHgzMDgyMDAwMSwgMHgyMTIwMCwgMHgzYzA0MDAwMSwgCi0weDhjODQ1ZDljLCAweDYyMTgyNSwgMHgzMzFjMiwgMHgzYzAzMDAwMSwgCi0weDI0NjM1ZDc4LCAweDMwODI4MDAwLCAweDIxMjAyLCAweDMwODQwMDAxLCAKLTB4NDIyMDAsIDB4NDQxMDI1LCAweDIzOWMyLCAweDYxMDgwLCAKLTB4NDMxMDIxLCAweDQ3MTAyMSwgMHg5MDQzMDAwMCwgMHgyNDAyMDAwMSwgCi0weDEwNjIwMDI1LCAweDAsIDB4MTA2MDAwMDcsIDB4MjQwMjAwMDIsIAotMHgxMDYyMDAxMywgMHgyNDAyMDAwMywgMHgxMDYyMDAyYywgMHgzYzA1MDAwZiwgCi0weDgwMDUwZjksIDB4MCwgMHg4ZjgyMDIwMCwgMHgyNDAzZmVmZiwgCi0weDQzMTAyNCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHgzYzAzZmZmZSwgCi0weDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHgzYzAxMDAwMSwgCi0weGFjMjA3ZTQ0LCAweDNjMDEwMDAxLCAweDgwMDUxMDQsIDB4YWMyMDdlNGMsIAotMHg4ZjgyMDIwMCwgMHgzNDQyMDEwMCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgCi0weDNjMDNmZmZlLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgCi0weDI0MDIwMTAwLCAweDNjMDEwMDAxLCAweGFjMjI3ZTQ0LCAweDNjMDEwMDAxLCAKLTB4ODAwNTEwNCwgMHhhYzIwN2U0YywgMHg4ZjgyMDIwMCwgMHgyNDAzZmVmZiwgCi0weDQzMTAyNCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwMSwgCi0weDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgzYzAxMDAwMSwgMHhhYzIwN2U0NCwgCi0weDNjMDEwMDAxLCAweDgwMDUxMDQsIDB4YWMyMzdlNGMsIDB4OGY4MjAyMDAsIAotMHgzNDQyMDEwMCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwMSwgCi0weDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgyNDAyMDEwMCwgMHgzYzAxMDAwMSwgCi0weGFjMjI3ZTQ0LCAweDNjMDEwMDAxLCAweDgwMDUxMDQsIDB4YWMyMzdlNGMsIAotMHgzNGE1ZmZmZiwgMHgzYzA0MDAwMSwgMHgyNDg0NWJiOCwgMHhhZmEzMDAxMCwgCi0weGMwMDI0MDMsIDB4YWZhMDAwMTQsIDB4ODAwNTEwNCwgMHgwLCAKLTB4MjQwMjAwMzAsIDB4M2MwMTAwMDEsIDB4YWMyMjdlMjgsIDB4OGZiZjAwMTgsIAotMHgzZTAwMDA4LCAweDI3YmQwMDIwLCAweDAsIDB4MjdiZGZmYzgsIAotMHhhZmIyMDAyOCwgMHg4MDkwMjEsIDB4YWZiMzAwMmMsIDB4YTA5ODIxLCAKLTB4YWZiMDAwMjAsIDB4YzA4MDIxLCAweDNjMDQwMDAxLCAweDI0ODQ1YmQwLCAKLTB4M2MwNTAwMDksIDB4M2MwMjAwMDEsIDB4OGM0MjVjYzgsIDB4MzRhNTkwMDEsIAotMHgyNDAzMDIxLCAweDI2MDM4MjEsIDB4YWZiZjAwMzAsIDB4YWZiMTAwMjQsIAotMHhhN2EwMDAxYSwgMHhhZmIwMDAxNCwgMHhjMDAyNDAzLCAweGFmYTIwMDEwLCAKLTB4MjQwMjAwMDIsIDB4MTI2MjAwODMsIDB4MmU2MjAwMDMsIDB4MTA0MDAwMDUsIAotMHgyNDAyMDAwMSwgMHgxMjYyMDAwYSwgMHgwLCAweDgwMDUyOWIsIAotMHgwLCAweDI0MDIwMDA0LCAweDEyNjIwMGZhLCAweDI0MDIwMDA4LCAKLTB4MTI2MjAwZjksIDB4M2MwMmZmZWMsIDB4ODAwNTI5YiwgMHgwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVjYzQsIDB4MzA0MjAwMDIsIDB4MTQ0MDAwMDQsIAotMHgxMjg5NDAsIDB4M2MwMmZmZmIsIDB4MzQ0MmZmZmYsIDB4MjAyODAyNCwgCi0weDNjMDEwMDAxLCAweDMxMDgyMSwgMHhhYzMwN2UzYywgMHgzYzAyNDAwMCwgCi0weDIwMjEwMjQsIDB4MTA0MDAwNGUsIDB4MTAyM2MyLCAweDMwODQwMDMwLCAKLTB4MTAxMzgyLCAweDMwNDIwMDFjLCAweDNjMDMwMDAxLCAweDI0NjM1ZDA4LCAKLTB4NDMxMDIxLCAweDgyMzgyMSwgMHgzYzAyMDAyMCwgMHgyMDIxMDI0LCAKLTB4MTA0MDAwMDYsIDB4MjQwMjAxMDAsIDB4M2MwMTAwMDEsIDB4MzEwODIxLCAKLTB4YWMyMjdlNDAsIDB4ODAwNTE1MCwgMHgzYzAyMDA4MCwgMHgzYzAxMDAwMSwgCi0weDMxMDgyMSwgMHhhYzIwN2U0MCwgMHgzYzAyMDA4MCwgMHgyMDIxMDI0LCAKLTB4MTA0MDAwMDYsIDB4MTIxOTQwLCAweDNjMDIwMDAxLCAweDNjMDEwMDAxLCAKLTB4MjMwODIxLCAweDgwMDUxNWMsIDB4YWMyMjdlNDgsIDB4MTIxMTQwLCAKLTB4M2MwMTAwMDEsIDB4MjIwODIxLCAweGFjMjA3ZTQ4LCAweDk0ZTQwMDAwLCAKLTB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIDB4MjQwMjAwMDUsIDB4MTA2MjAwMTAsIAotMHhhN2E0MDAxOCwgMHgzMjAyNDAwMCwgMHgxMDQwMDAwMiwgMHgzNDgyNDAwMCwgCi0weGE3YTIwMDE4LCAweDI0MDQwMDAxLCAweDk0ZTIwMDAyLCAweDI0MDUwMDA0LCAKLTB4MjRlNjAwMDIsIDB4MzQ0MjAwMDEsIDB4YzAwNDk4ZSwgMHhhNGUyMDAwMiwgCi0weDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDk4ZSwgMHgyN2E2MDAxOCwgCi0weDNjMDIwMDAxLCAweDhjNDI1Y2M4LCAweDI0MTEwMDAxLCAweDNjMDEwMDAxLCAKLTB4YWMzMTVjZDQsIDB4MTQ1MzAwMDQsIDB4MzIwMjgwMDAsIDB4YzAwNDI5YiwgCi0weDAsIDB4MzIwMjgwMDAsIDB4MTA0MDAxMWYsIDB4MCwgCi0weGMwMDQyOWIsIDB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNWRiYywgCi0weDI0MDIwMDA1LCAweDEwNjIwMTE4LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAKLTB4YWMzMTVjY2MsIDB4M2MwMTAwMDEsIDB4ODAwNTI5YiwgMHhhYzIyNWNjOCwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDA0LCAweDI3YjAwMDFhLCAweGMwMDQ5OGUsIAotMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDk4ZSwgCi0weDIwMDMwMjEsIDB4M2MwMjAwMDEsIDB4NTExMDIxLCAweDhjNDI3ZTM0LCAKLTB4M2MwNDAwMDEsIDB4OGM4NDVjYzgsIDB4M2MwM2JmZmYsIDB4MzQ2M2ZmZmYsIAotMHgzYzAxMDAwMSwgMHhhYzMzNWNkNCwgMHg0MzEwMjQsIDB4M2MwMTAwMDEsIAotMHgzMTA4MjEsIDB4MTA5MzAwZmEsIDB4YWMyMjdlMzQsIDB4ODAwNTI5YiwgCi0weDAsIDB4M2MwMjIwMDAsIDB4MjAyMTAyNCwgMHgxMDQwMDAwNSwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1ZDk4LCAweDgwMDUxYWQsIAotMHgxMjg5NDAsIDB4M2MwMTAwMDEsIDB4YWMyMDVkOTgsIDB4MTI4OTQwLCAKLTB4M2MwMTAwMDEsIDB4MzEwODIxLCAweGFjMzA3ZTM4LCAweDNjMDI0MDAwLCAKLTB4MjAyMTAyNCwgMHgxNDQwMDAxNiwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVkOTgsIDB4MTA0MDAwMDgsIDB4MjQwNDAwMDQsIDB4MjQwNTAwMDEsIAotMHhjMDA0ZDkzLCAweDI0MDYyMDAwLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGFjMjI4M2FjLCAweDNjMDIwMDAxLCAweDUxMTAyMSwgCi0weDhjNDI3ZTMwLCAweDNjMDNiZmZmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgCi0weDNjMDEwMDAxLCAweDMxMDgyMSwgMHg4MDA1Mjk5LCAweGFjMjI3ZTMwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTA0MDAwMjgsIDB4M2MwMzAwYTAsIAotMHgyMDMxMDI0LCAweDU0NDMwMDBkLCAweDNjMDIwMDIwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjVkOWMsIDB4MjQwMzAxMDAsIDB4M2MwMTAwMDEsIDB4MzEwODIxLCAKLTB4YWMyMzdlNDQsIDB4M2MwMzAwMDEsIDB4M2MwMTAwMDEsIDB4MzEwODIxLCAKLTB4YWMyMzdlNGMsIDB4ODAwNTFmMCwgMHgzNDQyMDQwMCwgMHgyMDIxMDI0LCAKLTB4MTA0MDAwMDgsIDB4MjQwMzAxMDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOWMsIAotMHgzYzAxMDAwMSwgMHgzMTA4MjEsIDB4YWMyMzdlNDQsIDB4ODAwNTFmMCwgCi0weDM0NDIwODAwLCAweDNjMDIwMDgwLCAweDIwMjEwMjQsIDB4MTA0MDAwMmUsIAotMHgzYzAzMDAwMSwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ5YywgMHgzYzAxMDAwMSwgCi0weDMxMDgyMSwgMHhhYzIzN2U0YywgMHgzNDQyMGMwMCwgMHgzYzAxMDAwMSwgCi0weGFjMjI1ZDljLCAweDgwMDUyMTgsIDB4MjQwNDAwMDEsIDB4M2MwMjAwMjAsIAotMHgyMDIxMDI0LCAweDEwNDAwMDA2LCAweDI0MDIwMTAwLCAweDNjMDEwMDAxLCAKLTB4MzEwODIxLCAweGFjMjI3ZTQ0LCAweDgwMDUyMDEsIDB4M2MwMjAwODAsIAotMHgzYzAxMDAwMSwgMHgzMTA4MjEsIDB4YWMyMDdlNDQsIDB4M2MwMjAwODAsIAotMHgyMDIxMDI0LCAweDEwNDAwMDA3LCAweDEyMTk0MCwgMHgzYzAyMDAwMSwgCi0weDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIyN2U0YywgMHg4MDA1MjBmLCAKLTB4MjQwNDAwMDEsIDB4MTIxMTQwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weGFjMjA3ZTRjLCAweDI0MDQwMDAxLCAweDI4MjEsIDB4MjdiMDAwMWUsIAotMHhjMDA0OTRjLCAweDIwMDMwMjEsIDB4MjQwNDAwMDEsIDB4MjgyMSwgCi0weGMwMDQ5NGMsIDB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgCi0weDI3YjAwMDFjLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgCi0weDI0MDUwMDAxLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgMHg4MDA1Mjk5LCAKLTB4MCwgMHgzYzAyZmZlYywgMHgzNDQyZmZmZiwgMHgyMDI4MDI0LCAKLTB4M2MwMjAwMDgsIDB4MjAyODAyNSwgMHgxMjExNDAsIDB4M2MwMTAwMDEsIAotMHgyMjA4MjEsIDB4YWMzMDdlMzgsIDB4M2MwMjIwMDAsIDB4MjAyMTAyNCwgCi0weDEwNDAwMDA5LCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkNzQsIAotMHgxNDQwMDAwNSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ5OCwgCi0weDgwMDUyM2EsIDB4M2MwMjQwMDAsIDB4M2MwMTAwMDEsIDB4YWMyMDVkOTgsIAotMHgzYzAyNDAwMCwgMHgyMDIxMDI0LCAweDE0NDAwMDFlLCAweDAsIAotMHgzYzAyMDAwMSwgMHg4YzQyNWQ5OCwgMHgzYzAxMDAwMSwgMHhhYzIwNWNlMCwgCi0weDEwNDAwMDA3LCAweDI0MDIyMDIwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDljLCAKLTB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjI4M2FjLCAKLTB4M2MwNGJmZmYsIDB4MTIxOTQwLCAweDNjMDIwMDAxLCAweDQzMTAyMSwgCi0weDhjNDI3ZTMwLCAweDNjMDUwMDAxLCAweDhjYTU1Y2M4LCAweDM0ODRmZmZmLCAKLTB4NDQxMDI0LCAweDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIyN2UzMCwgCi0weDI0MDIwMDAxLCAweDEwYTIwMDQ0LCAweDAsIDB4ODAwNTI5OSwgCi0weDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTA0MDAwMWMsIAotMHgyNDAyMjAwMCwgMHgzYzAxMDAwMSwgMHhhYzIyNWQ5YywgMHgzYzAzMDBhMCwgCi0weDIwMzEwMjQsIDB4MTQ0MzAwMDUsIDB4MTIxMTQwLCAweDM0MDJhMDAwLCAKLTB4M2MwMTAwMDEsIDB4ODAwNTI5NCwgMHhhYzIyNWQ5YywgMHgzYzAzMDAwMSwgCi0weDYyMTgyMSwgMHg4YzYzN2UzOCwgMHgzYzAyMDAyMCwgMHg2MjEwMjQsIAotMHgxMDQwMDAwNCwgMHgyNDAyMjAwMSwgMHgzYzAxMDAwMSwgMHg4MDA1Mjk0LCAKLTB4YWMyMjVkOWMsIDB4M2MwMjAwODAsIDB4NjIxMDI0LCAweDEwNDAwMDFmLCAKLTB4MzQwMmEwMDEsIDB4M2MwMTAwMDEsIDB4ODAwNTI5NCwgMHhhYzIyNWQ5YywgCi0weDNjMDIwMDIwLCAweDIwMjEwMjQsIDB4MTA0MDAwMDcsIDB4MTIxOTQwLCAKLTB4MjQwMjAxMDAsIDB4M2MwMTAwMDEsIDB4MjMwODIxLCAweGFjMjI3ZTQ0LCAKLTB4ODAwNTI4OCwgMHgzYzAyMDA4MCwgMHgxMjExNDAsIDB4M2MwMTAwMDEsIAotMHgyMjA4MjEsIDB4YWMyMDdlNDQsIDB4M2MwMjAwODAsIDB4MjAyMTAyNCwgCi0weDEwNDAwMDA2LCAweDEyMTk0MCwgMHgzYzAyMDAwMSwgMHgzYzAxMDAwMSwgCi0weDIzMDgyMSwgMHg4MDA1Mjk0LCAweGFjMjI3ZTRjLCAweDEyMTE0MCwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzIwN2U0YywgMHgzYzAzMDAwMSwgCi0weDhjNjM1Y2M4LCAweDI0MDIwMDAxLCAweDEwNjIwMDAzLCAweDAsIAotMHhjMDA0MjliLCAweDAsIDB4OGZiZjAwMzAsIDB4OGZiMzAwMmMsIAotMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LCAKLTB4MjdiZDAwMzgsIDB4MjdiZGZmZDgsIDB4YWZiMjAwMjAsIDB4ODA5MDIxLCAKLTB4YWZiMTAwMWMsIDB4ODgyMSwgMHgyNDAyMDAwMiwgMHhhZmJmMDAyNCwgCi0weGFmYjAwMDE4LCAweGE3YTAwMDEyLCAweDEwYTIwMGQzLCAweGE3YTAwMDEwLCAKLTB4MmNhMjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDEsIDB4MTBhMjAwMGEsIAotMHgxMjgxNDAsIDB4ODAwNTM4MCwgMHgyMjAxMDIxLCAweDI0MDIwMDA0LCAKLTB4MTBhMjAwN2QsIDB4MjQwMjAwMDgsIDB4MTBhMjAwN2MsIDB4MTIyOTQwLCAKLTB4ODAwNTM4MCwgMHgyMjAxMDIxLCAweDNjMDMwMDAxLCAweDcwMTgyMSwgCi0weDhjNjM3ZTNjLCAweDNjMDI0MDAwLCAweDYyMTAyNCwgMHgxNDQwMDAwOSwgCi0weDI0MDQwMDAxLCAweDNjMDI3ZmZmLCAweDM0NDJmZmZmLCAweDYyODgyNCwgCi0weDNjMDEwMDAxLCAweDMwMDgyMSwgMHhhYzMxN2UzNCwgMHg4MDA1MzgwLCAKLTB4MjIwMTAyMSwgMHgyNDA1MDAwMSwgMHhjMDA0OTRjLCAweDI3YTYwMDEwLCAKLTB4MjQwNDAwMDEsIDB4MjQwNTAwMDEsIDB4YzAwNDk0YywgMHgyN2E2MDAxMCwgCi0weDk3YTIwMDEwLCAweDMwNDIwMDA0LCAweDEwNDAwMDM0LCAweDNjMTE0MDAwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjVkYmMsIDB4MjQ0M2ZmZmYsIDB4MmM2MjAwMDYsIAotMHgxMDQwMDAzNCwgMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIAotMHg4YzIyNWJlMCwgMHg0MDAwMDgsIDB4MCwgMHgyNDA0MDAwMSwgCi0weDI0MDUwMDExLCAweDI3YjAwMDEyLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDExLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgCi0weDk3YTUwMDEyLCAweDMwYTI0MDAwLCAweDEwNDAwMDAyLCAweDNjMDQwMDEwLCAKLTB4M2MwNDAwMDgsIDB4M2MwMzAwMDEsIDB4ODAwNTMwMSwgMHgzMGEyODAwMCwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDE0LCAweDI3YjAwMDEyLCAweGMwMDQ5NGMsIAotMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDE0LCAweGMwMDQ5NGMsIAotMHgyMDAzMDIxLCAweDk3YTUwMDEyLCAweDMwYTIxMDAwLCAweDEwNDAwMDAyLCAKLTB4M2MwNDAwMTAsIDB4M2MwNDAwMDgsIDB4M2MwMzAwMDEsIDB4MzBhMjA4MDAsIAotMHg1NDQwMDAwMSwgMHgzYzAzMDAwMiwgMHgzYzAyODAwMCwgMHgyMjIxMDI1LCAKLTB4NjQxODI1LCAweDgwMDUzMGUsIDB4NDM4ODI1LCAweDNjMTEwMDAxLCAKLTB4MjMwODgyMSwgMHg4ZTMxN2UzYywgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwgCi0weDIyMjg4MjQsIDB4M2MwMjAwMDEsIDB4OGM0MjVjZDgsIDB4MTA0MDAwMWQsIAotMHgxMjExNDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTA0MDAwMDIsIAotMHgzYzAyMjAwMCwgMHgyMjI4ODI1LCAweDEyMTE0MCwgMHgzYzAxMDAwMSwgCi0weDIyMDgyMSwgMHg4YzIyN2U0MCwgMHgxMDQwMDAwMywgMHgzYzAyMDAyMCwgCi0weDgwMDUzMjIsIDB4MjIyODgyNSwgMHgzYzAyZmZkZiwgMHgzNDQyZmZmZiwgCi0weDIyMjg4MjQsIDB4MTIxMTQwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weDhjMjI3ZTQ4LCAweDEwNDAwMDAzLCAweDNjMDIwMDgwLCAweDgwMDUzMmQsIAotMHgyMjI4ODI1LCAweDNjMDJmZjdmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsIAotMHgxMjExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweGFjMzE3ZTM0LCAKLTB4ODAwNTM4MCwgMHgyMjAxMDIxLCAweDEyMjk0MCwgMHgzYzAzMDAwMSwgCi0weDY1MTgyMSwgMHg4YzYzN2UzOCwgMHgzYzAyNDAwMCwgMHg2MjEwMjQsIAotMHgxNDQwMDAwOCwgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwgMHg2Mjg4MjQsIAotMHgzYzAxMDAwMSwgMHgyNTA4MjEsIDB4YWMzMTdlMzAsIDB4ODAwNTM4MCwgCi0weDIyMDEwMjEsIDB4M2MwMjAwMDEsIDB4OGM0MjVjZDgsIDB4MTA0MDAwMzMsIAotMHgzYzExYzAwYywgMHgzYzAyMDAwMSwgMHg4YzQyNWQ3NCwgMHgzYzA0YzAwYywgCi0weDM0ODQyMDAwLCAweDNjMDMwMDAxLCAweDhjNjM1ZDk4LCAweDIxMDJiLCAKLTB4MjEwMjMsIDB4NDQxMDI0LCAweDEwNjAwMDAzLCAweDUxODgyNSwgCi0weDNjMDIyMDAwLCAweDIyMjg4MjUsIDB4M2MwMjAwMDEsIDB4NDUxMDIxLCAKLTB4OGM0MjdlNDQsIDB4MTA0MDAwMDMsIDB4M2MwMjAwMjAsIDB4ODAwNTM1ZCwgCi0weDIyMjg4MjUsIDB4M2MwMmZmZGYsIDB4MzQ0MmZmZmYsIDB4MjIyODgyNCwgCi0weDEyMTE0MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjdlNGMsIAotMHgxMDQwMDAwMywgMHgzYzAyMDA4MCwgMHg4MDA1MzY4LCAweDIyMjg4MjUsIAotMHgzYzAyZmY3ZiwgMHgzNDQyZmZmZiwgMHgyMjI4ODI0LCAweDNjMDIwMDAxLCAKLTB4OGM0MjVkNjAsIDB4MTA0MDAwMDIsIDB4M2MwMjA4MDAsIDB4MjIyODgyNSwgCi0weDNjMDIwMDAxLCAweDhjNDI1ZDY0LCAweDEwNDAwMDAyLCAweDNjMDIwNDAwLCAKLTB4MjIyODgyNSwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ2OCwgMHgxMDQwMDAwNiwgCi0weDNjMDIwMTAwLCAweDgwMDUzN2IsIDB4MjIyODgyNSwgMHgzYzAyN2ZmZiwgCi0weDM0NDJmZmZmLCAweDYyODgyNCwgMHgxMjExNDAsIDB4M2MwMTAwMDEsIAotMHgyMjA4MjEsIDB4YWMzMTdlMzAsIDB4MjIwMTAyMSwgMHg4ZmJmMDAyNCwgCi0weDhmYjIwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAweDNlMDAwMDgsIAotMHgyN2JkMDAyOCwgMHgyN2JkZmZkOCwgMHhhZmI0MDAyMCwgMHg4MGEwMjEsIAotMHhhZmJmMDAyNCwgMHhhZmIzMDAxYywgMHhhZmIyMDAxOCwgMHhhZmIxMDAxNCwgCi0weGFmYjAwMDEwLCAweDhmOTAwMjAwLCAweDNjMDMwMDAxLCAweDhjNjM1Y2M4LCAKLTB4OGY5MzAyMjAsIDB4MjQwMjAwMDIsIDB4MTA2MjAwNjMsIDB4MmM2MjAwMDMsIAotMHgxMDQwMDAwNSwgMHgyNDAyMDAwMSwgMHgxMDYyMDAwYSwgMHgxNDE5NDAsIAotMHg4MDA1NDQ4LCAweDAsIDB4MjQwMjAwMDQsIDB4MTA2MjAwNWEsIAotMHgyNDAyMDAwOCwgMHgxMDYyMDA1OSwgMHgxNDkxNDAsIDB4ODAwNTQ0OCwgCi0weDAsIDB4M2MwNDAwMDEsIDB4ODMyMDIxLCAweDhjODQ3ZTNjLCAKLTB4M2MxMTAwMDEsIDB4MjIzODgyMSwgMHg4ZTMxN2UzNCwgMHgzYzAyNDAwMCwgCi0weDgyMTAyNCwgMHgxMDQwMDAzZSwgMHgzYzAyMDAwOCwgMHgyMjIxMDI0LCAKLTB4MTA0MDAwMjAsIDB4MzYxMDAwMDIsIDB4M2MwMjAwMDEsIDB4NDMxMDIxLCAKLTB4OGM0MjdlNDAsIDB4MTA0MDAwMDUsIDB4MzYxMDAwMjAsIDB4MzYxMDAxMDAsIAotMHgzYzAyMDAyMCwgMHg4MDA1M2JkLCAweDIyMjg4MjUsIDB4MjQwMmZlZmYsIAotMHgyMDI4MDI0LCAweDNjMDJmZmRmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsIAotMHgxNDExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDhjMjI3ZTQ4LCAKLTB4MTA0MDAwMDUsIDB4M2MwMjAwMDEsIDB4MjYyOTgyNSwgMHgzYzAyMDA4MCwgCi0weDgwMDUzZGMsIDB4MjIyODgyNSwgMHgzYzAyZmZmZSwgMHgzNDQyZmZmZiwgCi0weDI2Mjk4MjQsIDB4M2MwMmZmN2YsIDB4MzQ0MmZmZmYsIDB4ODAwNTNkYywgCi0weDIyMjg4MjQsIDB4MjQwMmZlZGYsIDB4MjAyODAyNCwgMHgzYzAyZmZmZSwgCi0weDM0NDJmZmZmLCAweDI2Mjk4MjQsIDB4M2MwMmZmNWYsIDB4MzQ0MmZmZmYsIAotMHgyMjI4ODI0LCAweDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIwN2U0MCwgCi0weDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIwN2U0OCwgMHhjMDA0ODZhLCAKLTB4MCwgMHhhZjkwMDIwMCwgMHhhZjkzMDIyMCwgMHg4ZjgyMDIyMCwgCi0weDI0MDNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgCi0weDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDgwMDUzZjMsIDB4MTQxMTQwLCAKLTB4OGY4MjAyMDAsIDB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGMwMDQ4NmEsIAotMHhhZjgyMDIwMCwgMHgzYzAyYmZmZiwgMHgzNDQyZmZmZiwgMHhjMDA0MjliLCAKLTB4MjIyODgyNCwgMHgxNDExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAKLTB4ODAwNTQ0OCwgMHhhYzMxN2UzNCwgMHgxNDkxNDAsIDB4M2MwNDAwMDEsIAotMHg5MjIwMjEsIDB4OGM4NDdlMzgsIDB4M2MxMTAwMDEsIDB4MjMyODgyMSwgCi0weDhlMzE3ZTMwLCAweDNjMDI0MDAwLCAweDgyMTAyNCwgMHgxNDQwMDAxMSwgCi0weDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTQ0MDAwMDYsIAotMHgzYzAyYmZmZiwgMHg4ZjgyMDIwMCwgMHgzNDQyMDAwMiwgMHhjMDA0ODZhLCAKLTB4YWY4MjAyMDAsIDB4M2MwMmJmZmYsIDB4MzQ0MmZmZmYsIDB4YzAwNDI5YiwgCi0weDIyMjg4MjQsIDB4M2MwMTAwMDEsIDB4MzIwODIxLCAweDgwMDU0NDgsIAotMHhhYzMxN2UzMCwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ5OCwgMHgxMDQwMDAwNSwgCi0weDNjMDIwMDIwLCAweDNjMDIwMDAxLCAweDhjNDI1ZDc0LCAweDEwNDAwMDJiLCAKLTB4M2MwMjAwMjAsIDB4ODIxMDI0LCAweDEwNDAwMDA3LCAweDM2MTAwMDIwLCAKLTB4MjQwMjAxMDAsIDB4M2MwMTAwMDEsIDB4MzIwODIxLCAweGFjMjI3ZTQ0LCAKLTB4ODAwNTQyOCwgMHgzNjEwMDEwMCwgMHgzYzAxMDAwMSwgMHgzMjA4MjEsIAotMHhhYzIwN2U0NCwgMHgyNDAyZmVmZiwgMHgyMDI4MDI0LCAweDNjMDIwMDgwLCAKLTB4ODIxMDI0LCAweDEwNDAwMDA3LCAweDE0MTk0MCwgMHgzYzAyMDAwMSwgCi0weDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIyN2U0YywgMHg4MDA1NDM5LCAKLTB4MjYyOTgyNSwgMHgxNDExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAKLTB4YWMyMDdlNGMsIDB4M2MwMmZmZmUsIDB4MzQ0MmZmZmYsIDB4MjYyOTgyNCwgCi0weGMwMDQ4NmEsIDB4MCwgMHhhZjkwMDIwMCwgMHhhZjkzMDIyMCwgCi0weDhmODIwMjIwLCAweDI0MDNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgCi0weDhmODIwMjIwLCAweDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDE0MTE0MCwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzMxN2UzMCwgMHg4ZmJmMDAyNCwgCi0weDhmYjQwMDIwLCAweDhmYjMwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LCAKKzB4MTAwMDAwMDMsCisweDAsIDB4ZCwgMHhkLCAweDNjMWQwMDAxLAorMHg4ZmJkNWM1NCwgMHgzYTBmMDIxLCAweDNjMTAwMDAwLCAweDI2MTA0MDAwLAorMHhjMDAxMDBjLCAweDAsIDB4ZCwgMHgyN2JkZmZkOCwKKzB4M2MxY2MwMDAsIDB4M2MxYjAwMTMsIDB4Mzc3YmQ4MDAsIDB4ZDAyMSwKKzB4M2MxNzAwMTMsIDB4MzZmNzU0MTgsIDB4MmUwMjAyMSwgMHgzNDA1ODNlOCwKKzB4YWZiZjAwMjQsIDB4YzAwMjQ4OCwgMHhhZmIwMDAyMCwgMHhjMDAyM2U4LAorMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1MWE0LCAweDI0MDUwMDAxLAorMHgyZTAzMDIxLCAweDM4MjEsIDB4M2MxMDAwMDEsIDB4MjYxMDdlNTAsCisweGFmYjAwMDEwLCAweGMwMDI0MDMsIDB4YWZiYjAwMTQsIDB4M2MwMjAwMGYsCisweDM0NDJmZmZmLCAweDIwMjEwMjQsIDB4MzYyMTAyYiwgMHgxMDQwMDAwOSwKKzB4MjQwNTAwMDMsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxYjAsIDB4MjAwMzAyMSwKKzB4MzYwMzgyMSwgMHgzYzAyMDAxMCwgMHhhZmEyMDAxMCwgMHhjMDAyNDAzLAorMHhhZmEwMDAxNCwgMHgyMDIxLCAweDM0MDVjMDAwLCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4YTAyMDgzYjAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLAorMHhhMDIwODNiMiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMDgzYjMsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIwODNiNCwgMHhhMmUwMDRkOCwKKzB4NDE4YzAsIDB4MjQ4NDAwMDEsIDB4NzcxMDIxLCAweGFjNDA3MjdjLAorMHg3NzEwMjEsIDB4YWM0MDcyODAsIDB4MmUzMTAyMSwgMHhhNDQ1NzI3YywKKzB4MmM4MjAwMjAsIDB4MTQ0MGZmZjcsIDB4NDE4YzAsIDB4MjAyMSwKKzB4MzQwNWMwMDAsIDB4NDE4YzAsIDB4MjQ4NDAwMDEsIDB4NzcxMDIxLAorMHhhYzQwNzM3YywgMHg3NzEwMjEsIDB4YWM0MDczODAsIDB4MmUzMTAyMSwKKzB4YTQ0NTczN2MsIDB4MmM4MjAwODAsIDB4NTQ0MGZmZjcsIDB4NDE4YzAsCisweGFmODAwMDU0LCAweGFmODAwMTFjLCAweDhmODIwMDQ0LCAweDM0NDIwMDQwLAorMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgMHgzNDQyMDAyMCwgMHhhZjgyMDA0NCwKKzB4OGY0MjAyMTgsIDB4MzA0MjAwMDIsIDB4MTA0MDAwMDksIDB4MCwKKzB4OGY0MjAyMjAsIDB4M2MwMzAwMDIsIDB4MzQ2MzAwMDQsIDB4NDMxMDI1LAorMHhhZWUyMDRjNCwgMHg4ZjQyMDIxYywgMHg4MDAxMDc0LCAweDM0NDIwMDA0LAorMHg4ZjQyMDIyMCwgMHgzYzAzMDAwMiwgMHgzNDYzMDAwNiwgMHg0MzEwMjUsCisweGFlZTIwNGM0LCAweDhmNDIwMjFjLCAweDM0NDIwMDA2LCAweGFlZTIwNGNjLAorMHg4ZjQyMDIxOCwgMHgzMDQyMDAxMCwgMHgxMDQwMDAwYSwgMHgwLAorMHg4ZjQyMDIxYywgMHgzNDQyMDAwNCwgMHhhZWUyMDRjOCwgMHg4ZjQyMDIyMCwKKzB4M2MwMzAwMGEsIDB4MzQ2MzAwMDQsIDB4NDMxMDI1LCAweDgwMDEwOGEsCisweGFlZTIwNGMwLCAweDhmNDIwMjIwLCAweDNjMDMwMDBhLCAweDM0NjMwMDA2LAorMHg0MzEwMjUsIDB4YWVlMjA0YzAsIDB4OGY0MjAyMWMsIDB4MzQ0MjAwMDYsCisweGFlZTIwNGM4LCAweDhmNDIwMjE4LCAweDMwNDIwMjAwLCAweDEwNDAwMDAzLAorMHgyNDAyMDAwMSwgMHg4MDAxMDkxLCAweGEyZTI3MjQ4LCAweGEyZTA3MjQ4LAorMHgyNDAyMDAwMSwgMHhhZjgyMDBhMCwgMHhhZjgyMDBiMCwgMHg4ZjgzMDA1NCwKKzB4OGY4MjAwNTQsIDB4ODAwMTA5OSwgMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwKKzB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLCAweDAsCisweGFmODAwMDQ0LCAweDhmNDIwMjA4LCAweDhmNDMwMjBjLCAweGFlZTIwMDEwLAorMHhhZWUzMDAxNCwgMHg4ZWU0MDAxMCwgMHg4ZWU1MDAxNCwgMHgyNmUyMDAzMCwKKzB4YWVlMjAwMjgsIDB4MjQwMjA0OTAsIDB4YWVlMjAwMTgsIDB4YWY4NDAwOTAsCisweGFmODUwMDk0LCAweDhlZTIwMDI4LCAweGFmODIwMGI0LCAweDk2ZTIwMDFhLAorMHhhZjgyMDA5YywgMHg4ZjgyMDBiMCwgMHg4ZWUzMDRjYywgMHg0MzEwMjUsCisweGFmODIwMGIwLCAweDhmODIwMGIwLCAweDMwNDIwMDA0LCAweDE0NDBmZmZkLAorMHgwLCAweDhlZTIwNDUwLCAweDhlZTMwNDU0LCAweGFlZTMwNGZjLAorMHg4ZWUyMDRmYywgMHgyNDQyZTAwMCwgMHgyYzQyMjAwMSwgMHgxNDQwMDAwZCwKKzB4MjZlNDAwMzAsIDB4OGVlMjA0NTAsIDB4OGVlMzA0NTQsIDB4M2MwNDAwMDEsCisweDI0ODQ1MWJjLCAweDNjMDUwMDAxLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LAorMHg4ZWU3MDRmYywgMHgzNGE1ZjAwMCwgMHhjMDAyNDAzLCAweDYwMzAyMSwKKzB4MjZlNDAwMzAsIDB4YzAwMjQ4OCwgMHgyNDA1MDQwMCwgMHgyNzQ0MDA4MCwKKzB4YzAwMjQ4OCwgMHgyNDA1MDA4MCwgMHgyNmU0Nzc3YywgMHhjMDAyNDg4LAorMHgyNDA1MDQwMCwgMHg4ZjQyMDI1YywgMHgyNmU0MDA5NCwgMHhhZWUyMDA2MCwKKzB4OGY0MjAyNjAsIDB4Mjc0NTAyMDAsIDB4MjQwNjAwMDgsIDB4YWVlMjAwNjgsCisweDI0MDIwMDA2LCAweGMwMDI0OWEsIDB4YWVlMjAwNjQsIDB4M2MwMjNiOWEsCisweDM0NDJjYTAwLCAweDIwMjEsIDB4MjQwMzAwMDIsIDB4YWVlMzAwNzQsCisweGFlZTMwMDcwLCAweGFlZTIwMDZjLCAweDI0MDIwM2U4LCAweGFlZTIwMTA0LAorMHgyNDAyMDAwMSwgMHhhZWUzMDEwMCwgMHhhZWUyMDEwYywgMHgzYzAzMDAwMSwKKzB4NjQxODIxLCAweDkwNjM1YzIwLCAweDJlNDEwMjEsIDB4MjQ4NDAwMDEsCisweGEwNDMwMDljLCAweDJjODIwMDBmLCAweDE0NDBmZmY4LCAweDAsCisweDhmODIwMDQwLCAweDJlNDE4MjEsIDB4MjQ4NDAwMDEsIDB4MjE3MDIsCisweDI0NDIwMDMwLCAweGEwNjIwMDljLCAweDJlNDEwMjEsIDB4YTA0MDAwOWMsCisweDk2ZTIwNDZhLCAweDMwNDIwMDAzLCAweDE0NDAwMDA5LCAweDAsCisweDk2ZTIwNDdhLCAweDMwNDIwMDAzLCAweDUwNDAwMTMxLCAweDNjMDMwODAwLAorMHg5NmUyMDQ2YSwgMHgzMDQyMDAwMywgMHgxMDQwMDAyYSwgMHgzYzAyMDcwMCwKKzB4OTZlMjA0N2EsIDB4MzA0MjAwMDMsIDB4MTA0MDAwMjYsIDB4M2MwMjA3MDAsCisweDk2ZTMwNDdhLCAweDk2ZTIwNDZhLCAweDE0NjIwMDIyLCAweDNjMDIwNzAwLAorMHg4ZWUyMDRjMCwgMHgyNDAzMDAwMSwgMHhhMmUzNGUyMCwgMHgzNDQyMGUwMCwKKzB4YWVlMjA0YzAsIDB4OGY0MjAyMTgsIDB4MzA0MjAxMDAsIDB4MTA0MDAwMDUsCisweDAsIDB4M2MwMjAwMDEsIDB4MjQ0MmUxNjgsIDB4ODAwMTExZCwKKzB4MjExMDAsIDB4M2MwMjAwMDEsIDB4MjQ0MmQzNWMsIDB4MjExMDAsCisweDIxMTgyLCAweDNjMDMwODAwLCAweDQzMTAyNSwgMHgzYzAxMDAwMSwKKzB4YWMyMjEyMzgsIDB4M2MwMjAwMDEsIDB4MjQ0MmY2ODAsIDB4MjExMDAsCisweDIxMTgyLCAweDNjMDMwODAwLCAweDQzMTAyNSwgMHgzYzAxMDAwMSwKKzB4YWMyMjEyNzgsIDB4OGVlMjAwMDAsIDB4MzQ0MjQwMDAsIDB4ODAwMTIzOCwKKzB4YWVlMjAwMDAsIDB4MzQ0MjMwMDAsIDB4YWZhMjAwMTgsIDB4OGVlMjA2MDgsCisweDhmNDMwMjI4LCAweDI0NDIwMDAxLCAweDMwNDkwMGZmLCAweDUxMjMwMGUyLAorMHhhZmEwMDAxMCwgMHg4ZWUyMDYwOCwgMHgyMTBjMCwgMHg1NzEwMjEsCisweDhmYTMwMDE4LCAweDhmYTQwMDFjLCAweGFjNDMwNjBjLCAweGFjNDQwNjEwLAorMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwgMHgyNGU4MDAyMCwgMHgxMDIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMTAyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywgMHgxMDIxLAorMHg4ZWUyMDFhNCwgMHgzMDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDAxMWEwLCAweDhlZTIwMWE0LCAweDhlZTQwNjA4LCAweDQyMGMwLAorMHg4MDE4MjEsIDB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsIDB4YTMyODIxLAorMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgMHhhY2U0MDAwMCwKKzB4YWNlNTAwMDQsIDB4OGVlMzA2MDgsIDB4MjQwMjAwMDgsIDB4YTRlMjAwMGUsCisweDI0MDIwMDBkLCAweGFjZTIwMDE4LCAweGFjZTkwMDFjLCAweDMxOGMwLAorMHgyNDYzMDYwYywgMHgyZTMxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LAorMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzNywKKzB4MjQwNjAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMDcsIDB4MTQ2MjAwMWYsCisweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsCisweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LAorMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywKKzB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwKKzB4MCwgMHg4MDAxMThhLCAweDAsIDB4MTRhMDAwMDUsCisweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsCisweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLAorMHhhYzgwMDAwMCwgMHg4MDAxMWEwLCAweDAsIDB4OGVlMjRlMzAsCisweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsCisweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA3LAorMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHg1NGMwMDAwYywKKzB4YWVlOTA2MDgsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxYzgsIDB4YWZhMDAwMTAsCisweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LAorMHhjMDAyNDAzLCAweDM0YTVmMDAwLCAweDgwMDEyMjMsIDB4MCwKKzB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLAorMHg4ZWUyMDFhNCwgMHgzMDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDAxMjA3LCAweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLAorMHg4ZWU0MDRhMCwgMHg4ZWU1MDRhNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwKKzB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsIDB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsCisweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLAorMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzNywgMHgyNDA2MDAwMSwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIDB4MCwKKzB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsCisweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LAorMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLAorMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLAorMHg4MDAxMWYxLCAweDAsIDB4MTRhMDAwMDUsIDB4MCwKKzB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsCisweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLAorMHg4MDAxMjA3LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQwMzAwNDAsCisweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDEyLCAweGFjODIwMDAwLAorMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNGMwMDAxYiwgMHgwLAorMHgzYzA0MDAwMSwgMHgyNDg0NTFkMCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwKKzB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywKKzB4MzRhNWYwMDEsIDB4OGVlMjAxYjAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYjAsCisweDgwMDEyMjMsIDB4OGVlMjAxYjAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxZGMsCisweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LAorMHhjMDAyNDAzLCAweDM0YTVmMDA1LCAweDhlZTIwMWFjLCAweDI0NDIwMDAxLAorMHhhZWUyMDFhYywgMHg4ZWUyMDFhYywgMHg4ZWUyMDE2MCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDUxZTgsIDB4MzQwNWYwMDEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxNjAsCisweDhlZTIwMTYwLCAweDMwMjEsIDB4MzgyMSwgMHhhZmEwMDAxMCwKKzB4YzAwMjQwMywgMHhhZmEwMDAxNCwgMHg4MDAxMjM4LCAweDAsCisweDNjMDIwMDAxLCAweDI0NDJmNWE4LCAweDIxMTAwLCAweDIxMTgyLAorMHg0MzEwMjUsIDB4M2MwMTAwMDEsIDB4YWMyMjEyNzgsIDB4OTZlMjA0NWEsCisweDMwNDIwMDAzLCAweDEwNDAwMDI1LCAweDNjMDUwZmZmLCAweDhlZTIwNGM4LAorMHgzNGE1ZmZmZiwgMHgzNDQyMGEwMCwgMHhhZWUyMDRjOCwgMHg4ZWUzMDRjOCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDUxZjQsIDB4MjQwMjAwMDEsIDB4YTJlMjA0ZWMsCisweGEyZTIwNGVkLCAweDNjMDIwMDAyLCAweDYyMTgyNSwgMHgzYzAyMDAwMSwKKzB4MjQ0MmEzOTAsIDB4NDUxMDI0LCAweDIxMDgyLCAweGFlZTMwNGM4LAorMHgzYzAzMDgwMCwgMHg0MzEwMjUsIDB4M2MwMTAwMDEsIDB4YWMyMjEyMjAsCisweDNjMDIwMDAxLCAweDI0NDJhZGQ0LCAweDQ1MTAyNCwgMHgyMTA4MiwKKzB4NDMxMDI1LCAweDNjMDEwMDAxLCAweGFjMjIxMjgwLCAweDk2ZTYwNDVhLAorMHgzODIxLCAweDI0MDUwMDExLCAweGFmYTAwMDEwLCAweGMwMDI0MDMsCisweGFmYTAwMDE0LCAweDgwMDEyNjgsIDB4MCwgMHgzYzAyMDAwMSwKKzB4MjQ0MmE5ZDQsIDB4MjExMDAsIDB4MjExODIsIDB4M2MwMzA4MDAsCisweDQzMTAyNSwgMHgzYzAxMDAwMSwgMHhhYzIyMTI4MCwgMHg5NmUyMDQ2YSwKKzB4MzA0MjAwMTAsIDB4MTQ0MDAwMDksIDB4MCwgMHg5NmUyMDQ3YSwKKzB4MzA0MjAwMTAsIDB4MTA0MDAxMTIsIDB4MCwgMHg5NmUyMDQ2YSwKKzB4MzA0MjAwMTAsIDB4MTA0MDAwMDUsIDB4M2MwMjA3MDAsIDB4OTZlMjA0N2EsCisweDMwNDIwMDEwLCAweDE0NDAwMTAyLCAweDNjMDIwNzAwLCAweDM0NDIzMDAwLAorMHhhZmEyMDAxOCwgMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgMHgyNDQyMDAwMSwKKzB4MzA0OTAwZmYsIDB4NTEyMzAwZTIsIDB4YWZhMDAwMTAsIDB4OGVlMjA2MDgsCisweDIxMGMwLCAweDU3MTAyMSwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywKKzB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIDB4OGY4NzAxMjAsIDB4Mjc2MjM4MDAsCisweDI0ZTgwMDIwLCAweDEwMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2ODMwMDAsCisweDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsIDB4OGY4MjAxMjQsCisweDE1MDIwMDA3LCAweDEwMjEsIDB4OGVlMjAxYTQsIDB4MzAyMSwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTJlYSwgMHg4ZWUyMDFhNCwKKzB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLCAweDhlZTQwNDMwLAorMHg4ZWU1MDQzNCwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwKKzB4ODYyMDIxLCAweGFjZTQwMDAwLCAweGFjZTUwMDA0LCAweDhlZTMwNjA4LAorMHgyNDAyMDAwOCwgMHhhNGUyMDAwZSwgMHgyNDAyMDAwZCwgMHhhY2UyMDAxOCwKKzB4YWNlOTAwMWMsIDB4MzE4YzAsIDB4MjQ2MzA2MGMsIDB4MmUzMTAyMSwKKzB4YWNlMjAwMDgsIDB4OGVlMjA0YzQsIDB4YWNlMjAwMTAsIDB4YWY4ODAxMjAsCisweDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MDYwMDAxLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLAorMHgyNDAyMDAwNywgMHgxNDYyMDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwKKzB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsCisweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMzQsCisweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMTJkNCwKKzB4MCwgMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LAorMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwKKzB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMTJlYSwKKzB4MCwgMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwKKzB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsCisweGFjODIwMDA0LCAweDU0YzAwMDBjLCAweGFlZTkwNjA4LCAweDNjMDQwMDAxLAorMHgyNDg0NTFjOCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwKKzB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwMCwKKzB4ODAwMTM2ZCwgMHgwLCAweDhmODMwMTIwLCAweDI3NjIzODAwLAorMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsCisweDhmODIwMTI4LCAweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsCisweDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsIDB4MzAyMSwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTM1MSwgMHg4ZWUyMDFhNCwKKzB4OGVlMjA2MDgsIDB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsCisweDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweDI0MDIwMDA4LCAweGE0NjIwMDBlLAorMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwKKzB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsCisweDE0NDAwMDM3LCAweDI0MDYwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDEyLAorMHgxNDYyMDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LAorMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwKKzB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsCisweDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsCisweDEwYTIwMDA1LCAweDAsIDB4ODAwMTMzYiwgMHgwLAorMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLAorMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwKKzB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMTM1MSwgMHgwLAorMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywKKzB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4MjQwMjAwMTIsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsCisweDE0YzAwMDFiLCAweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUxZDAsCisweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LAorMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDAxLCAweDhlZTIwMWIwLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFiMCwgMHg4MDAxMzZkLCAweDhlZTIwMWIwLAorMHgzYzA0MDAwMSwgMHgyNDg0NTFkYywgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwKKzB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwNSwKKzB4OGVlMjAxYWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsCisweDhlZTIwMTYwLCAweDNjMDQwMDAxLCAweDI0ODQ1MWU4LCAweDM0MDVmMDAyLAorMHgyNDQyMDAwMSwgMHhhZWUyMDE2MCwgMHg4ZWUyMDE2MCwgMHgzMDIxLAorMHgzODIxLCAweGFmYTAwMDEwLCAweGMwMDI0MDMsIDB4YWZhMDAwMTQsCisweDk2ZTYwNDdhLCAweDk2ZTcwNDZhLCAweDNjMDQwMDAxLCAweDI0ODQ1MjAwLAorMHgyNDA1MDAxMiwgMHhhZmEwMDAxMCwgMHhjMDAyNDAzLCAweGFmYTAwMDE0LAorMHhjMDA0NTAwLCAweDAsIDB4YzAwMjMxOCwgMHgwLAorMHgzYzA2MDAwMSwgMHgzNGM2MzgwMCwgMHhhZWUwMDYwOCwgMHhhZjQwMDIyOCwKKzB4YWY0MDAyMmMsIDB4OTZlMzA0NTgsIDB4OGVlNDAwMDAsIDB4M2MwNTEyZDgsCisweDM0YTVjMzU4LCAweDI3NjIzODAwLCAweGFlZTI3MjU4LCAweDI3NjIzODAwLAorMHhhZWUyNzI2MCwgMHgyNzYyMzgwMCwgMHhhZWUyNzI2NCwgMHgzNjYxMDIxLAorMHhhZWUyNzI3MCwgMHgyNDAyZmZmZiwgMHhhZWUwMDRkNCwgMHhhZWUwMDRlMCwKKzB4YWVlMDA0ZTQsIDB4YWVlMDA0ZjAsIDB4YTJlMDA0ZjQsIDB4YWVlMDBlMGMsCisweGFlZTAwZTE4LCAweGFlZTAwZTEwLCAweGFlZTAwZTE0LCAweGFlZTAwZTFjLAorMHhhZWUwNzI0YywgMHhhZWUwNTI0NCwgMHhhZWUwNTI0MCwgMHhhZWUwNTIzYywKKzB4YWVlMDcyNTAsIDB4YWVlMDcyNTQsIDB4YWVlMDcyNWMsIDB4YWVlMDcyNjgsCisweGFlZTAwNGQwLCAweDI0NjNmZmZmLCAweDg1MjAyNSwgMHhhZWUzMDRmOCwKKzB4YWVlNDAwMDAsIDB4YWY4MDAwNjAsIDB4YWY4MjAwNjQsIDB4M2MwMjAxMDAsCisweGFmYTIwMDE4LCAweDhlZTIwNjA4LCAweDhmNDMwMjI4LCAweDI0NDIwMDAxLAorMHgzMDQ5MDBmZiwgMHg1MTIzMDBlMiwgMHhhZmEwMDAxMCwgMHg4ZWUyMDYwOCwKKzB4MjEwYzAsIDB4NTcxMDIxLCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLAorMHhhYzQzMDYwYywgMHhhYzQ0MDYxMCwgMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwKKzB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwKKzB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4MTUwMjAwMDcsIDB4MTAyMSwgMHg4ZWUyMDFhNCwgMHgzMDIxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxNDIyLCAweDhlZTIwMWE0LAorMHg4ZWU0MDYwOCwgMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsCisweDhlZTUwNDM0LCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIDB4OGVlMzA2MDgsCisweDI0MDIwMDA4LCAweGE0ZTIwMDBlLCAweDI0MDIwMDBkLCAweGFjZTIwMDE4LAorMHhhY2U5MDAxYywgMHgzMThjMCwgMHgyNDYzMDYwYywgMHgyZTMxMDIxLAorMHhhY2UyMDAwOCwgMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwKKzB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQwNjAwMDEsIDB4OGVlMjRlMzAsCisweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsCisweDI0MDIwMDA3LCAweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsCisweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxNDBjLAorMHgwLCAweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxNDIyLAorMHgwLCAweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLAorMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHgyNDAyMDAwNywgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwKKzB4YWM4MjAwMDQsIDB4NTRjMDAwMGMsIDB4YWVlOTA2MDgsIDB4M2MwNDAwMDEsCisweDI0ODQ1MWM4LCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LAorMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDAwLAorMHg4MDAxNGE1LCAweDAsIDB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsCisweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwKKzB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgMHgzMDIxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxNDg5LCAweDhlZTIwMWE0LAorMHg4ZWUyMDYwOCwgMHhhYzYyMDAxYywgMHg4ZWU0MDRhMCwgMHg4ZWU1MDRhNCwKKzB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsCisweDI0MDIwMDExLCAweGFjNjIwMDE4LCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LAorMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwKKzB4MTQ0MDAwMzcsIDB4MjQwNjAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsCisweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsCisweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLAorMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwKKzB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwKKzB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxNDczLCAweDAsCisweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsCisweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLAorMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxNDg5LCAweDAsCisweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHgyNDAyMDAxMiwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwKKzB4MTRjMDAwMWIsIDB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTFkMCwKKzB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsCisweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMDEsIDB4OGVlMjAxYjAsCisweDI0NDIwMDAxLCAweGFlZTIwMWIwLCAweDgwMDE0YTUsIDB4OGVlMjAxYjAsCisweDNjMDQwMDAxLCAweDI0ODQ1MWRjLCAweGFmYTAwMDE0LCAweDhlZTYwNjA4LAorMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDA1LAorMHg4ZWUyMDFhYywgMHgyNDQyMDAwMSwgMHhhZWUyMDFhYywgMHg4ZWUyMDFhYywKKzB4OGVlMjAxNTQsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxNTQsIDB4YzAwMTRkYywKKzB4OGVlMjAxNTQsIDB4OGY4MjAwYTAsIDB4MzA0MjAwMDQsIDB4MTQ0MGZmZmQsCisweDAsIDB4OGY4MjAwNDAsIDB4MzA0MjAwMDEsIDB4MTQ0MDAwMDgsCisweDAsIDB4OGY0MzAxMDQsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMDQsCisweDAsIDB4OGY0MjAyNjQsIDB4MTA0MDAwMDYsIDB4MCwKKzB4OGVlMjAxN2MsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxN2MsIDB4ODAwMTRjNSwKKzB4OGVlMjAxN2MsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMDQsIDB4YWY4MjAwNDQsCisweDhlZTIwMTc4LCAweDI0NDIwMDAxLCAweGFlZTIwMTc4LCAweDhlZTIwMTc4LAorMHg4ZjgyMDBkOCwgMHg4ZjgzMDBkNCwgMHg0MzEwMjMsIDB4YWVlMjcyNmMsCisweDhlZTI3MjZjLCAweDFjNDAwMDAzLCAweDNjMDMwMDAxLCAweDQzMTAyMSwKKzB4YWVlMjcyNmMsIDB4YzAwNDA2NCwgMHgwLCAweGMwMDQ0NDAsCisweGFmODAwMjI4LCAweDhmYmYwMDI0LCAweDhmYjAwMDIwLCAweDNlMDAwMDgsCisweDI3YmQwMDI4LCAweDNlMDAwMDgsIDB4MCwgMHgzZTAwMDA4LAorMHgwLCAweDAsIDB4MCwgMHgyNDAyMDAyYywKKzB4YWY4MjAwNTAsIDB4YWVlMDcyNzQsIDB4OGY0MjAyMzgsIDB4YWVlMjcyNzgsCisweDhmODIwMDU0LCAweDI0NDIwMDY3LCAweGFmODIwMDU4LCAweGFlZTA3Yjg4LAorMHhhZWUwN2I4YywgMHhhZWUwN2I4NCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMjA4M2JjLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHgzZTAwMDA4LAorMHhhMDIwODNiOSwgMHgyN2JkZmZkOCwgMHhhZmJmMDAyNCwgMHhhZmIwMDAyMCwKKzB4OGY4MjAwNTQsIDB4M2MwMzAwMDEsIDB4OGM2MzVjZDgsIDB4MjQ0MjAwNjcsCisweDEwNjAwMDBkLCAweGFmODIwMDU4LCAweDNjMDIwMDAxLCAweDU3MTAyMSwKKzB4OTA0MjgzYjgsIDB4MTA0MDAwMDUsIDB4M2MwMzAyMDAsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHg4MDAxNTAzLCAweGEwMjA4M2I4LCAweDhlZTIwMDAwLAorMHg0MzEwMjUsIDB4YWVlMjAwMDAsIDB4OGY0MjAyMTgsIDB4MzA0MjAxMDAsCisweDEwNDAwMGM2LCAweDAsIDB4OGY4MjAwYjAsIDB4MzA0MjAwMDQsCisweDEwNDAwMGMyLCAweDAsIDB4M2MwMzAwMDEsIDB4NzcxODIxLAorMHg4YzYzODNkMCwgMHg4ZjgyMDEwNCwgMHgxNDYyMDBiNCwgMHgwLAorMHgzYzAzMDAwMSwgMHg3NzE4MjEsIDB4OGM2MzgzZDQsIDB4OGY4MjAwYjQsCisweDE0NjIwMGFlLCAweDAsIDB4OGY4MjAwYjAsIDB4M2MwMzAwODAsCisweDQzMTAyNCwgMHgxMDQwMDAwZCwgMHgwLCAweDhmODIwMTFjLAorMHgzNDQyMDAwMiwgMHhhZjgyMDExYywgMHg4ZjgyMDBiMCwgMHgyNDAzZmZmYiwKKzB4NDMxMDI0LCAweGFmODIwMGIwLCAweDhmODIwMTFjLCAweDI0MDNmZmZkLAorMHg0MzEwMjQsIDB4ODAwMTVjYywgMHhhZjgyMDExYywgMHgzYzAzMDAwMSwKKzB4NzcxODIxLCAweDhjNjM4M2QwLCAweDhmODIwMTA0LCAweDE0NjIwMDgyLAorMHgwLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgMHg4YzYzODNkNCwKKzB4OGY4MjAwYjQsIDB4MTQ2MjAwN2MsIDB4MCwgMHgzYzA3MDAwMSwKKzB4ZjczODIxLCAweDhjZTc4M2QwLCAweDhmODIwMGIwLCAweDNjMDQwMDAxLAorMHgyNDg0NTI3MCwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4Zjg2MDBiMCwKKzB4M2MwNTAwMDUsIDB4YzAwMjQwMywgMHgzNGE1MDkwMCwgMHg4ZjgyMDExYywKKzB4MzQ0MjAwMDIsIDB4YWY4MjAxMWMsIDB4OGY4MzAxMDQsIDB4OGY4MjAwYjAsCisweDM0NDIwMDAxLCAweGFmODIwMGIwLCAweGFmODMwMTA0LCAweDhmODMwMTIwLAorMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsCisweDI3NjYzMDAwLCAweDhmODIwMTI4LCAweDEwYzIwMDA0LCAweDAsCisweDhmODIwMTI0LCAweDE0YzIwMDA2LCAweDAsIDB4OGVlMjAxYTQsCisweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDE1YTAsIDB4OGVlMjAxYTQsCisweDhmNDQwMjA4LCAweDhmNDUwMjBjLCAweDI2ZTIwMDMwLCAweGFjNjIwMDA4LAorMHgyNDAyMDQwMCwgMHhhNDYyMDAwZSwgMHgyNDAyMDAwZiwgMHhhYzYyMDAxOCwKKzB4YWM2MDAwMWMsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsCisweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDM3LAorMHgwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LAorMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA3LCAweDE0NjIwMDFmLAorMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLAorMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwKKzB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsCisweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsCisweDAsIDB4ODAwMTU4YSwgMHgwLCAweDE0YTAwMDA1LAorMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LAorMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywKKzB4YWM4MDAwMDAsIDB4ODAwMTVhMCwgMHgwLCAweDhlZTI0ZTMwLAorMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgMHgxMDIxLAorMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwKKzB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAwNywKKzB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4OGY4MjAxMWMsCisweDI0MDNmZmZkLCAweDQzMTAyNCwgMHhhZjgyMDExYywgMHg4ZWUyMDFlNCwKKzB4M2MwNzAwMDEsIDB4ZjczODIxLCAweDhjZTc4M2QwLCAweDI0NDIwMDAxLAorMHhhZWUyMDFlNCwgMHg4ZWUyMDFlNCwgMHgzYzA0MDAwMSwgMHgyNDg0NTI3YywKKzB4ODAwMTViZCwgMHhhZmEwMDAxMCwgMHg4ZjgyMDEwNCwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGFjMjI4M2QwLCAweDhmODIwMGI0LCAweDNjMDcwMDAxLAorMHhmNzM4MjEsIDB4OGNlNzgzZDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyODQsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNkNCwgMHhhZmEwMDAxMCwKKzB4YWZhMDAwMTQsIDB4OGY4NjAwYjAsIDB4M2MwNTAwMDUsIDB4YzAwMjQwMywKKzB4MzRhNTA5MDAsIDB4ODAwMTVjYywgMHgwLCAweDhmODIwMTA0LAorMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjgzZDAsIDB4OGY4MjAwYjQsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNkNCwgMHg4ZWUyNzI3NCwKKzB4OTJlMzA0ZjQsIDB4MjQ0MjAwNjcsIDB4MTQ2MDAwMDYsIDB4YWVlMjcyNzQsCisweDhlZTI3Mjc0LCAweDhmNDMwMjM0LCAweDQzMTAyYiwgMHgxNDQwMDA3YiwKKzB4MCwgMHg4ZWUzMDRlNCwgMHg4ZWUyMDRmOCwgMHgxNDYyMDAwNCwKKzB4MCwgMHg5MmUyMDRmNCwgMHg1MDQwMDA3NCwgMHhhMmUwMDRmNCwKKzB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLAorMHg4ZWUyMDFhNCwgMHg4MDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDAxNjM3LCAweDhlZTIwMWE0LCAweDhlZTIwNGU0LCAweGFjNjIwMDFjLAorMHg4ZWU0MDRiMCwgMHg4ZWU1MDRiNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwKKzB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsIDB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsCisweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLAorMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzNywgMHgyNDEwMDAwMSwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIDB4MCwKKzB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsCisweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LAorMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLAorMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLAorMHg4MDAxNjIxLCAweDAsIDB4MTRhMDAwMDUsIDB4MCwKKzB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsCisweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLAorMHg4MDAxNjM3LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQwMzAwNDAsCisweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDEyLCAweGFjODIwMDAwLAorMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHg1NjAwMDAwYiwgMHgyNDEwMDAwMSwKKzB4OGVlMjA0ZTQsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyOGMsIDB4YWZhMDAwMTQsCisweGFmYTIwMDEwLCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LAorMHhjMDAyNDAzLCAweDM0YTVmMDA2LCAweDE2MDAwMDAzLCAweDI0MDIwMDAxLAorMHg4MDAxNjUwLCAweGEyZTIwNGY0LCAweDhlZTIwMTcwLCAweDI0NDIwMDAxLAorMHhhZWUyMDE3MCwgMHg4ZWUyMDE3MCwgMHg4ZWUyMDRlNCwgMHhhMmUwMDRmNCwKKzB4YWVlMDA0ZjAsIDB4YWVlMDcyNzQsIDB4YWVlMjA0ZjgsIDB4OGVlMjBlMWMsCisweDEwNDAwMDZkLCAweDAsIDB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsCisweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwKKzB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgMHg4MDIxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxNmFkLCAweDhlZTIwMWE0LAorMHg4ZWUyNzI0YywgMHhhYzYyMDAxYywgMHg4ZWU0MDRhOCwgMHg4ZWU1MDRhYywKKzB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsCisweDI0MDIwMDExLCAweGFjNjIwMDE4LCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LAorMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwKKzB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsCisweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsCisweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLAorMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwKKzB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwKKzB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxNjk3LCAweDAsCisweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsCisweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLAorMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxNmFkLCAweDAsCisweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHgyNDAyMDAxMiwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwKKzB4NTYwMDAwMGIsIDB4MjQxMDAwMDEsIDB4OGVlMjcyNGMsIDB4M2MwNDAwMDEsCisweDI0ODQ1Mjk4LCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhlZTY3MjRjLAorMHg4ZjQ3MDI4MCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLCAweDM0YTVmMDA4LAorMHg1NjAwMDAwMSwgMHhhZWUwMGUxYywgMHg4ZWUyMDE3NCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxNzQsIDB4OGVlMjAxNzQsIDB4OGVlMjRlMjQsIDB4MTA0MDAwMTksCisweDAsIDB4YWVlMDRlMjQsIDB4OGY4MjAwNDAsIDB4MzA0MjAwMDEsCisweDE0NDAwMDA4LCAweDAsIDB4OGY0MzAxMDQsIDB4MjQwMjAwMDEsCisweDEwNjIwMDA0LCAweDAsIDB4OGY0MjAyNjQsIDB4MTA0MDAwMDYsCisweDAsIDB4OGVlMjAxN2MsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxN2MsCisweDgwMDE2ZGEsIDB4OGVlMjAxN2MsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMDQsCisweGFmODIwMDQ0LCAweDhlZTIwMTc4LCAweDI0NDIwMDAxLCAweGFlZTIwMTc4LAorMHg4ZWUyMDE3OCwgMHg4ZWUyNzI3OCwgMHgyNDQyZmY5OSwgMHhhZWUyNzI3OCwKKzB4OGVlMjcyNzgsIDB4MWM0MDAyYWQsIDB4MCwgMHg4ZjQyMDIzOCwKKzB4MTA0MDAyYWEsIDB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI4M2UwLCAweDE0NDAwMmE1LCAweDAsIDB4OGY0MjAwODAsCisweGFlZTIwMDRjLCAweDhmNDIwMGMwLCAweGFlZTIwMDQ4LCAweDhmNDIwMDg0LAorMHhhZWUyMDAzOCwgMHg4ZjQyMDA4NCwgMHhhZWUyMDI0NCwgMHg4ZjQyMDA4OCwKKzB4YWVlMjAyNDgsIDB4OGY0MjAwOGMsIDB4YWVlMjAyNGMsIDB4OGY0MjAwOTAsCisweGFlZTIwMjUwLCAweDhmNDIwMDk0LCAweGFlZTIwMjU0LCAweDhmNDIwMDk4LAorMHhhZWUyMDI1OCwgMHg4ZjQyMDA5YywgMHhhZWUyMDI1YywgMHg4ZjQyMDBhMCwKKzB4YWVlMjAyNjAsIDB4OGY0MjAwYTQsIDB4YWVlMjAyNjQsIDB4OGY0MjAwYTgsCisweGFlZTIwMjY4LCAweDhmNDIwMGFjLCAweGFlZTIwMjZjLCAweDhmNDIwMGIwLAorMHhhZWUyMDI3MCwgMHg4ZjQyMDBiNCwgMHhhZWUyMDI3NCwgMHg4ZjQyMDBiOCwKKzB4YWVlMjAyNzgsIDB4OGY0MjAwYmMsIDB4MjQwNDAwMDEsIDB4YWVlMjAyN2MsCisweGFlZTAwMDNjLCAweDQxMDgwLCAweDU3MTAyMSwgMHg4ZWUzMDAzYywKKzB4OGM0MjAyNDQsIDB4MjQ4NDAwMDEsIDB4NjIxODIxLCAweDJjODIwMDBmLAorMHhhZWUzMDAzYywgMHgxNDQwZmZmOCwgMHg0MTA4MCwgMHg4ZjQyMDBjYywKKzB4YWVlMjAwNTAsIDB4OGY0MjAwZDAsIDB4YWVlMjAwNTQsIDB4OGY4MzAxMjAsCisweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwKKzB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwKKzB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwKKzB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxNzc1LAorMHg4ZWUyMDFhNCwgMHg4ZjQ0MDIwOCwgMHg4ZjQ1MDIwYywgMHgyNmUyMDAzMCwKKzB4YWM2MjAwMDgsIDB4MjQwMjA0MDAsIDB4YTQ2MjAwMGUsIDB4MjQwMjAwMGYsCisweGFjNjIwMDE4LCAweGFjNjAwMDFjLCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LAorMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwKKzB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsIDB4MjQwMjAwMDcsCisweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsCisweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLAorMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwgMHgyNDQyMDAwMSwKKzB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwKKzB4MTBhMjAwMDUsIDB4MCwgMHg4MDAxNzVmLCAweDAsCisweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsCisweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLAorMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAxNzc1LCAweDAsCisweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHgyNDAyMDAwNywgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwKKzB4MTIwMDAyMTIsIDB4M2MwMjA0MDAsIDB4YWZhMjAwMTgsIDB4M2MwMjAwMDEsCisweDU3MTAyMSwgMHg5MDQyODNiMCwgMHgxMDQwMDEwYiwgMHgwLAorMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgMHgyNDQyMDAwMSwgMHgzMDRhMDBmZiwKKzB4NTE0MzAwZmQsIDB4YWZhMDAwMTAsIDB4OGVlMjA2MDgsIDB4MjEwYzAsCisweDU3MTAyMSwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywgMHhhYzQzMDYwYywKKzB4YWM0NDA2MTAsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MjQ2OTAwMzIsCisweDEyMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTA0MDAwNmEsIDB4NTgyMSwKKzB4MjQxODAwMDgsIDB4MjQwZjAwMGQsIDB4MjQwZDAwMDcsIDB4MjQwYzAwNDAsCisweDI0MGUwMDAxLCAweDhmODcwMTIwLCAweDI3NjIzODAwLCAweDI0ZTgwMDIwLAorMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgzMDAwLCAweDhmODIwMTI4LAorMHgxMTAyMDAwNCwgMHgwLCAweDhmODIwMTI0LCAweDE1MDIwMDA3LAorMHgxMDIxLCAweDhlZTIwMWE0LCAweDgwMjEsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWE0LCAweDgwMDE3ZjMsIDB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsCisweDQyMGMwLCAweDgwMTgyMSwgMHg4ZWU0MDQzMCwgMHg4ZWU1MDQzNCwKKzB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLAorMHhhY2U0MDAwMCwgMHhhY2U1MDAwNCwgMHg4ZWUyMDYwOCwgMHhhNGY4MDAwZSwKKzB4YWNlZjAwMTgsIDB4YWNlYTAwMWMsIDB4MjEwYzAsIDB4MjQ0MjA2MGMsCisweDJlMjEwMjEsIDB4YWNlMjAwMDgsIDB4OGVlMjA0YzQsIDB4YWNlMjAwMTAsCisweGFmODgwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MTAwMDAxLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHg4YzgyMDAwMCwgMHgxNDRkMDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA0YzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAxN2UwLAorMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAxN2YzLAorMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNGMwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHhhYzhkMDAwMCwgMHhhYzhlMDAwNCwgMHg1NjAwMDAwNiwgMHgyNDBiMDAwMSwKKzB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgMHgxNDQwZmY5ZCwKKzB4MCwgMHgzMTYzMDBmZiwgMHgyNDAyMDAwMSwgMHgxNDYyMDA3NywKKzB4M2MwNTAwMDksIDB4YWVlYTA2MDgsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsCisweDI0NjkwMDMyLCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTA0MDAwNjEsCisweDU4MjEsIDB4MjQwZDAwMDgsIDB4MjQwYzAwMTEsIDB4MjQwODAwMTIsCisweDI0MDcwMDQwLCAweDI0MGEwMDAxLCAweDhmODMwMTIwLCAweDI3NjIzODAwLAorMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsCisweDhmODIwMTI4LCAweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsCisweDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsIDB4ODAyMSwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTg1ZiwgMHg4ZWUyMDFhNCwKKzB4OGVlMjA2MDgsIDB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsCisweDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweGE0NmQwMDBlLCAweGFjNmMwMDE4LAorMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwKKzB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzMsIDB4MjQxMDAwMDEsCisweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsCisweDhjODIwMDAwLCAweDE0NDgwMDFmLCAweDAsIDB4OGVlMzRlMzAsCisweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDAsIDB4OGM4MjAwMDQsCisweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLAorMHgyNDQyMDAwMSwgMHgxMDQ3MDAwNywgMHgwLCAweDhlZTI0ZTM0LAorMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLCAweDgwMDE4NGMsCisweDAsIDB4MTQ2MDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwKKzB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsCisweDJjNDIwMDExLCAweDUwNDAwMDEwLCAweGFjODAwMDAwLCAweDgwMDE4NWYsCisweDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4NTA0NzAwMDMsCisweDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsCisweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsCisweGFjODgwMDAwLCAweGFjOGEwMDA0LCAweDU2MDAwMDA2LCAweDI0MGIwMDAxLAorMHg4ZjgyMDA1NCwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDE0NDBmZmE2LAorMHgwLCAweDMxNjMwMGZmLCAweDI0MDIwMDAxLCAweDE0NjIwMDAzLAorMHgzYzA1MDAwOSwgMHg4MDAxOTdjLCAweDI0MTAwMDAxLCAweDNjMDQwMDAxLAorMHgyNDg0NTJhNCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwKKzB4OGY4NzAxMjQsIDB4ODAwMTg3YiwgMHgzNGE1ZjAxMSwgMHgzYzA0MDAwMSwKKzB4MjQ4NDUyYjAsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsCisweDhmODcwMTI0LCAweDM0YTVmMDEwLCAweGMwMDI0MDMsIDB4ODAyMSwKKzB4ODAwMTk3YywgMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1MmJjLAorMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwKKzB4ODAwMTk3NSwgMHgzNGE1ZjAwZiwgMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwKKzB4MjQ0MjAwMDEsIDB4MzA0OTAwZmYsIDB4NTEyMzAwZTIsIDB4YWZhMDAwMTAsCisweDhlZTIwNjA4LCAweDIxMGMwLCAweDU3MTAyMSwgMHg4ZmEzMDAxOCwKKzB4OGZhNDAwMWMsIDB4YWM0MzA2MGMsIDB4YWM0NDA2MTAsIDB4OGY4NzAxMjAsCisweDI3NjIzODAwLCAweDI0ZTgwMDIwLCAweDEwMjEwMmIsIDB4NTA0MDAwMDEsCisweDI3NjgzMDAwLCAweDhmODIwMTI4LCAweDExMDIwMDA0LCAweDAsCisweDhmODIwMTI0LCAweDE1MDIwMDA3LCAweDEwMjEsIDB4OGVlMjAxYTQsCisweDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMThmNywKKzB4OGVlMjAxYTQsIDB4OGVlNDA2MDgsIDB4NDIwYzAsIDB4ODAxODIxLAorMHg4ZWU0MDQzMCwgMHg4ZWU1MDQzNCwgMHhhMzI4MjEsIDB4YTMzMDJiLAorMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFjZTQwMDAwLCAweGFjZTUwMDA0LAorMHg4ZWUzMDYwOCwgMHgyNDAyMDAwOCwgMHhhNGUyMDAwZSwgMHgyNDAyMDAwZCwKKzB4YWNlMjAwMTgsIDB4YWNlOTAwMWMsIDB4MzE4YzAsIDB4MjQ2MzA2MGMsCisweDJlMzEwMjEsIDB4YWNlMjAwMDgsIDB4OGVlMjA0YzQsIDB4YWNlMjAwMTAsCisweGFmODgwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MTAwMDAxLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHg4YzgzMDAwMCwgMHgyNDAyMDAwNywgMHgxNDYyMDAxZiwgMHgwLAorMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwKKzB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsCisweDhlZTU0ZTMwLCAweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsCisweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsCisweDgwMDE4ZTEsIDB4MCwgMHgxNGEwMDAwNSwgMHgwLAorMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwKKzB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsCisweDgwMDE4ZjcsIDB4MCwgMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwKKzB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsCisweDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDU2MDAwMDBjLCAweGFlZTkwNjA4LAorMHgzYzA0MDAwMSwgMHgyNDg0NTJjOCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwKKzB4OGVlNjA2MDgsIDB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywKKzB4MzRhNWYwMDAsIDB4ODAwMTk3YywgMHgwLCAweDhmODMwMTIwLAorMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsCisweDI3NjYzMDAwLCAweDhmODIwMTI4LCAweDEwYzIwMDA0LCAweDAsCisweDhmODIwMTI0LCAweDE0YzIwMDA3LCAweDAsIDB4OGVlMjAxYTQsCisweDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsIDB4ODAwMTk1ZSwKKzB4OGVlMjAxYTQsIDB4OGVlMjA2MDgsIDB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsCisweDhlZTUwNGE0LCAweDI0NjIwMDFjLCAweGFjNjIwMDA4LCAweDI0MDIwMDA4LAorMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwKKzB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsCisweDkyZTI0ZTIwLCAweDE0NDAwMDM3LCAweDI0MTAwMDAxLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLAorMHgyNDAyMDAxMiwgMHgxNDYyMDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwKKzB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsCisweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMzQsCisweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMTk0OCwKKzB4MCwgMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LAorMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwKKzB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMTk1ZSwKKzB4MCwgMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwKKzB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4MjQwMjAwMTIsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsCisweGFjODIwMDA0LCAweDU2MDAwMDFkLCAweDI0MTAwMDAxLCAweDNjMDQwMDAxLAorMHgyNDg0NTJkMCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwKKzB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwMSwKKzB4OGVlMjAxYjAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYjAsIDB4ODAwMTk3YywKKzB4OGVlMjAxYjAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUyZGMsIDB4YWZhMDAwMTQsCisweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LCAweDM0YTVmMDA1LAorMHhjMDAyNDAzLCAweDAsIDB4OGVlMjAxYWMsIDB4ODAyMSwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4MTIwMDAwMGMsCisweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwODNiMCwKKzB4OGY0MjAyMzgsIDB4OGVlMzAxNTgsIDB4MjQ2MzAwMDEsIDB4YWVlMzAxNTgsCisweDhlZTMwMTU4LCAweDgwMDE5OGMsIDB4YWVlMjcyNzgsIDB4MjQwMjAwMDEsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyODNiMCwgMHgzYzAyMDAwMSwKKzB4OGM0MjVjZDgsIDB4MTA0MDAxODcsIDB4MCwgMHg4ZWUyN2I4NCwKKzB4MjQ0MzAwMDEsIDB4Mjg0MjAwYzksIDB4MTQ0MDAxYTQsIDB4YWVlMzdiODQsCisweDhlZTIwNGQ0LCAweDMwNDIwMDAyLCAweDE0NDAwMTE5LCAweGFlZTA3Yjg0LAorMHg4ZWUyMDRkNCwgMHgzYzAzMDYwMCwgMHgzNDYzMTAwMCwgMHgzNDQyMDAwMiwKKzB4YWVlMjA0ZDQsIDB4YWZhMzAwMTgsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsCisweDI0NDIwMDAxLCAweDMwNGEwMGZmLCAweDUxNDMwMGZkLCAweGFmYTAwMDEwLAorMHg4ZWUyMDYwOCwgMHgyMTBjMCwgMHg1NzEwMjEsIDB4OGZhMzAwMTgsCisweDhmYTQwMDFjLCAweGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLAorMHgxMDQwMDA2YSwgMHg1ODIxLCAweDI0MTgwMDA4LCAweDI0MGYwMDBkLAorMHgyNDBkMDAwNywgMHgyNDBjMDA0MCwgMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwKKzB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwKKzB4Mjc2ODMwMDAsIDB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIDB4MCwKKzB4OGY4MjAxMjQsIDB4MTUwMjAwMDcsIDB4MTAyMSwgMHg4ZWUyMDFhNCwKKzB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxYTE1LAorMHg4ZWUyMDFhNCwgMHg4ZWU0MDYwOCwgMHg0MjBjMCwgMHg4MDE4MjEsCisweDhlZTQwNDMwLCAweDhlZTUwNDM0LCAweGEzMjgyMSwgMHhhMzMwMmIsCisweDgyMjAyMSwgMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsCisweDhlZTIwNjA4LCAweGE0ZjgwMDBlLCAweGFjZWYwMDE4LCAweGFjZWEwMDFjLAorMHgyMTBjMCwgMHgyNDQyMDYwYywgMHgyZTIxMDIxLCAweGFjZTIwMDA4LAorMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwKKzB4MTQ0MDAwMzMsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsCisweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsCisweDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsCisweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNGMwMDA3LAorMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LAorMHgwLCAweDgwMDFhMDIsIDB4MCwgMHgxNDYwMDAwNSwKKzB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwKKzB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsCisweGFjODAwMDAwLCAweDgwMDFhMTUsIDB4MCwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4NTA0YzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4YWM4ZDAwMDAsIDB4YWM4ZTAwMDQsCisweDU2MDAwMDA2LCAweDI0MGIwMDAxLCAweDhmODIwMDU0LCAweDEyMjEwMjMsCisweDJjNDIwMDMzLCAweDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsCisweDI0MDIwMDAxLCAweDU0NjIwMDc4LCAweGFmYTAwMDEwLCAweGFlZWEwNjA4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLAorMHgyYzQyMDAzMywgMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGQwMDA4LAorMHgyNDBjMDAxMSwgMHgyNDA4MDAxMiwgMHgyNDA3MDA0MCwgMHgyNDBhMDAwMSwKKzB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLAorMHg4ZWUyMDFhNCwgMHg4MDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDAxYTgxLCAweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLAorMHg4ZWU0MDRhMCwgMHg4ZWU1MDRhNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwKKzB4YTQ2ZDAwMGUsIDB4YWM2YzAwMTgsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsCisweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLAorMHgxNDQwMDAzMywgMHgyNDEwMDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwKKzB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDQ4MDAxZiwKKzB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwKKzB4MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwKKzB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0NzAwMDcsCisweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsCisweDAsIDB4ODAwMWE2ZSwgMHgwLCAweDE0NjAwMDA1LAorMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LAorMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwKKzB4YWM4MDAwMDAsIDB4ODAwMWE4MSwgMHgwLCAweDhlZTI0ZTMwLAorMHgyNDQyMDAwMSwgMHg1MDQ3MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLAorMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwKKzB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHhhYzg4MDAwMCwgMHhhYzhhMDAwNCwKKzB4NTYwMDAwMDYsIDB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywKKzB4MmM0MjAwMzMsIDB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwKKzB4MjQwMjAwMDEsIDB4MTA2MjAwMjIsIDB4MCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDUyYTQsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsCisweDhmODcwMTI0LCAweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMTEsCisweDgwMDFhYWQsIDB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTJiMCwKKzB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksCisweGMwMDI0MDMsIDB4MzRhNWYwMTAsIDB4ODAwMWFhZCwgMHgwLAorMHgzYzA0MDAwMSwgMHgyNDg0NTJiYywgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwKKzB4OGY0NzAyMjgsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwZiwKKzB4OGVlMjAxYWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsCisweDhlZTIwMTVjLCAweDI0NDIwMDAxLCAweGFlZTIwMTVjLCAweDhlZTIwMTVjLAorMHg4ZWUyMDRkNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDA1NSwgMHgwLAorMHg4ZjQyMDIxOCwgMHgzMDQyMDA4MCwgMHgxMDQwMDAyOSwgMHgwLAorMHg4ZjgyMDA0NCwgMHgzNDQyMDA0MCwgMHhhZjgyMDA0NCwgMHg4ZWUyN2I3YywKKzB4NDAyODIxLCAweDhlZTIwMGMwLCAweDhlZTMwMGM0LCAweDI0MDYwMDAwLAorMHgyNDA3ZmZmZiwgMHgyMDIxLCAweDQ2MTAyNCwgMHgxNDQ0MDAwZCwKKzB4NjcxODI0LCAweDE0NjUwMDBiLCAweDAsIDB4OGVlMjdiODAsCisweDQwMjgyMSwgMHg4ZWUyMDBlMCwgMHg4ZWUzMDBlNCwgMHgyMDIxLAorMHg0NjEwMjQsIDB4MTQ0NDAwMDMsIDB4NjcxODI0LCAweDEwNjUwMDBiLAorMHgwLCAweDhlZTIwMGMwLCAweDhlZTMwMGM0LCAweDhlZTQwMGUwLAorMHg4ZWU1MDBlNCwgMHhhZWUzN2I3YywgMHhhZWU1N2I4MCwgMHg4ZjgyMDA0NCwKKzB4Mzg0MjAwMjAsIDB4ODAwMWIzOCwgMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwKKzB4MjQwM2ZmZGYsIDB4NDMxMDI0LCAweDgwMDFiMzgsIDB4YWY4MjAwNDQsCisweDhmODIwMDQ0LCAweDI0MDNmZmRmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwKKzB4OGVlMjdiN2MsIDB4NDAyODIxLCAweDhlZTIwMGMwLCAweDhlZTMwMGM0LAorMHgyNDA2MDAwMCwgMHgyNDA3ZmZmZiwgMHgyMDIxLCAweDQ2MTAyNCwKKzB4MTQ0NDAwMGQsIDB4NjcxODI0LCAweDE0NjUwMDBiLCAweDAsCisweDhlZTI3YjgwLCAweDQwMjgyMSwgMHg4ZWUyMDBlMCwgMHg4ZWUzMDBlNCwKKzB4MjAyMSwgMHg0NjEwMjQsIDB4MTQ0NDAwMDMsIDB4NjcxODI0LAorMHgxMDY1MDAwYiwgMHgwLCAweDhlZTIwMGMwLCAweDhlZTMwMGM0LAorMHg4ZWU0MDBlMCwgMHg4ZWU1MDBlNCwgMHhhZWUzN2I3YywgMHhhZWU1N2I4MCwKKzB4OGY4MjAwNDQsIDB4Mzg0MjAwNDAsIDB4ODAwMWIzOCwgMHhhZjgyMDA0NCwKKzB4OGY4MjAwNDQsIDB4MzQ0MjAwNDAsIDB4ODAwMWIzOCwgMHhhZjgyMDA0NCwKKzB4OGY4MjAwNDQsIDB4MzQ0MjAwNDAsIDB4YWY4MjAwNDQsIDB4OGVlMjdiOGMsCisweDI0NDMwMDAxLCAweDI4NDIwMDE1LCAweDE0NDAwMDI4LCAweGFlZTM3YjhjLAorMHg4ZjgyMDA0NCwgMHgzODQyMDAyMCwgMHhhZjgyMDA0NCwgMHg4MDAxYjM4LAorMHhhZWUwN2I4YywgMHg4ZWUyMDRkNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAxMSwKKzB4MCwgMHg4ZjQyMDIxOCwgMHgzMDQyMDA4MCwgMHgxMDQwMDAwOSwKKzB4MCwgMHg4ZjgyMDA0NCwgMHgzNDQyMDAyMCwgMHhhZjgyMDA0NCwKKzB4OGY4MjAwNDQsIDB4MjQwM2ZmYmYsIDB4NDMxMDI0LCAweDgwMDFiMzYsCisweGFmODIwMDQ0LCAweDhmODIwMDQ0LCAweDM0NDIwMDYwLCAweDgwMDFiMzYsCisweGFmODIwMDQ0LCAweDhmODIwMDQ0LCAweDM0NDIwMDQwLCAweGFmODIwMDQ0LAorMHg4ZWUyN2I4OCwgMHgyNDQzMDAwMSwgMHgyODQyMTM4OSwgMHgxNDQwMDAwNSwKKzB4YWVlMzdiODgsIDB4OGY4MjAwNDQsIDB4Mzg0MjAwMjAsIDB4YWY4MjAwNDQsCisweGFlZTA3Yjg4LCAweGMwMDQ2MDMsIDB4MCwgMHg4ZmJmMDAyNCwKKzB4OGZiMDAwMjAsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZiOCwKKzB4YWZiZjAwNDQsIDB4YWZiNjAwNDAsIDB4YWZiNTAwM2MsIDB4YWZiNDAwMzgsCisweGFmYjMwMDM0LCAweGFmYjIwMDMwLCAweGFmYjEwMDJjLCAweGFmYjAwMDI4LAorMHg4Zjk2MDA2NCwgMHgzMmMyMDAwNCwgMHgxMDQwMDAwYywgMHgyNDAyMDAwNCwKKzB4YWY4MjAwNjQsIDB4OGY0MjAxMTQsIDB4YWVlMjA0ZTAsIDB4OGY4MjAwNjAsCisweDM0NDIwMDA4LCAweGFmODIwMDYwLCAweDhlZTIwMTZjLCAweDI0NDIwMDAxLAorMHhhZWUyMDE2YywgMHg4MDAyMmY0LCAweDhlZTIwMTZjLCAweDMyYzIwMDAxLAorMHgxMDQwMDAwNCwgMHgyNDAyMDAwMSwgMHhhZjgyMDA2NCwgMHg4MDAyMmY0LAorMHgwLCAweDMyYzIwMDAyLCAweDE0NDAwMDBjLCAweDNjMDUwMDAzLAorMHgzYzA0MDAwMSwgMHgyNDg0NTM1NCwgMHgzNGE1MDAwMSwgMHgyYzAzMDIxLAorMHgzODIxLCAweGFmYTAwMDEwLCAweGMwMDI0MDMsIDB4YWZhMDAwMTQsCisweDI0MDJmZmY4LCAweDgwMDIyZjQsIDB4YWY4MjAwNjQsIDB4OGY0MzAyMmMsCisweDhmNDIwMTBjLCAweDUwNjIwMDBjLCAweGFmYTAwMDEwLCAweDhmNDIwMjJjLAorMHgyMTA4MCwgMHg1YTEwMjEsIDB4OGM0MjAzMDAsIDB4YWZhMjAwMjAsCisweDhmNDIwMjJjLCAweDI0MDcwMDAxLCAweDI0NDIwMDAxLCAweDMwNDIwMDNmLAorMHg4MDAxYjgwLCAweGFmNDIwMjJjLCAweDNjMDQwMDAxLCAweDI0ODQ1MzYwLAorMHhhZmEwMDAxNCwgMHg4ZjQ2MDIyYywgMHg4ZjQ3MDEwYywgMHgzYzA1MDAwMywKKzB4YzAwMjQwMywgMHgzNGE1ZjAxZiwgMHgzODIxLCAweDE0ZTAwMDAzLAorMHgwLCAweDgwMDIyZWQsIDB4YWY5NjAwNjQsIDB4OTNhMjAwMjAsCisweDI0NDNmZmZmLCAweDJjNjIwMDExLCAweDEwNDAwNjU4LCAweDMxMDgwLAorMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjU0MTgsIDB4NDAwMDA4LAorMHgwLCAweDhmYTIwMDIwLCAweDMwNDIwZmZmLCAweGFlZTIwZTBjLAorMHg4ZjgyMDA2MCwgMHgzNDQyMDIwMCwgMHhhZjgyMDA2MCwgMHg4ZWUyMDExOCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxMTgsIDB4ODAwMjJlOCwgMHg4ZWUyMDExOCwKKzB4OGZhMjAwMjAsIDB4MjQwMzAwMDEsIDB4M2MwMTAwMDEsIDB4MzcwODIxLAorMHhhMDIzODNiMSwgMHgzMDQyMGZmZiwgMHhhZWUyNTIzOCwgMHg4ZjgyMDA2MCwKKzB4MzQ0MjAxMDAsIDB4YWY4MjAwNjAsIDB4OGVlMjAxNDQsIDB4MjQ0MjAwMDEsCisweGFlZTIwMTQ0LCAweDgwMDIyZTgsIDB4OGVlMjAxNDQsIDB4OGZhMjAwMjAsCisweDIxMjAwLCAweDIyNTAyLCAweDI0MDIwMDAxLCAweDEwODIwMDA1LAorMHgyNDAyMDAwMiwgMHgxMDgyMDAwOSwgMHgyNDAyZmZmZSwgMHg4MDAxYmM5LAorMHhhZmEwMDAxMCwgMHg4ZWUyMDRkNCwgMHhhZWU0MDA3MCwgMHhhZWU0MDA3NCwKKzB4MzQ0MjAwMDEsIDB4ODAwMWJiZCwgMHhhZWUyMDRkNCwgMHg4ZWUzMDRkNCwKKzB4YWVlNDAwNzAsIDB4YWVlNDAwNzQsIDB4NjIxODI0LCAweGFlZTMwNGQ0LAorMHg4Zjg0MDA1NCwgMHg0MTQ0MiwgMHg0MWM4MiwgMHg0MzEwMjEsCisweDQxY2MyLCAweDQzMTAyMywgMHg0MWQwMiwgMHg0MzEwMjEsCisweDQxZDQyLCAweDQzMTAyMywgMHg4MDAxYmQwLCAweGFlZTIwMDc4LAorMHgzYzA0MDAwMSwgMHgyNDg0NTM2YywgMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwKKzB4M2MwNTAwMDMsIDB4YzAwMjQwMywgMHgzNGE1MDAwNCwgMHg4ZWUyMDExMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxMTAsIDB4ODAwMjJlOCwgMHg4ZWUyMDExMCwKKzB4Mjc0NDAyMTIsIDB4YzAwMjJmZSwgMHgyNDA1MDAwNiwgMHgzMDQ5MDAxZiwKKzB4OTIwYzAsIDB4MmU0MTAyMSwgMHg5NDQyNzI3YywgMHgzMDQyNDAwMCwKKzB4MTA0MDAwMGEsIDB4OTcxMDIxLCAweDk3NDMwMjEyLCAweGE0NDM3MjdlLAorMHg4ZjQzMDIxNCwgMHg5NzEwMjEsIDB4YWM0MzcyODAsIDB4MmU0MTgyMSwKKzB4MzQwMjgwMDAsIDB4ODAwMWM3OSwgMHhhNDYyNzI3YywgMHg5NDQzNzI3ZSwKKzB4OTc0MjAyMTIsIDB4MTQ2MjAwMDYsIDB4MmU0MTAyMSwgMHg5NzEwMjEsCisweDhjNDM3MjgwLCAweDhmNDIwMjE0LCAweDEwNjIwMDlmLCAweDJlNDEwMjEsCisweDk0NDI3MjdjLCAweDMwNDI4MDAwLCAweDEwNDAwMDJhLCAweDI0MDZmZmZmLAorMHgyMDIxLCAweDQxMGMwLCAweDJlMjEwMjEsIDB4OTQ0MjczN2MsCisweDMwNDI0MDAwLCAweDU0NDAwMDA1LCAweDgwMzAyMSwgMHgyNDg0MDAwMSwKKzB4MmM4MjAwODAsIDB4MTQ0MGZmZjgsIDB4NDEwYzAsIDB4NGMxMDAxMCwKKzB4NjE4YzAsIDB4NjEwYzAsIDB4NTcxODIxLCAweDhjNjM3MzdjLAorMHg1NzEwMjEsIDB4YWZhMzAwMTAsIDB4OGM0MjczODAsIDB4M2MwNDAwMDEsCisweDI0ODQ1Mzc4LCAweGFmYTIwMDE0LCAweDhmNDcwMjE0LCAweDNjMDUwMDAzLAorMHhjMDAyNDAzLCAweDM0YTUwMDEzLCAweDgwMDFjOTAsIDB4M2MwMjA4MDAsCisweDk3NDQwMjEyLCAweDc3MTAyMSwgMHhhNDQ0NzM3ZSwgMHg4ZjQ0MDIxNCwKKzB4NzcxMDIxLCAweDJlMzE4MjEsIDB4YWM0NDczODAsIDB4MzQwMjgwMDAsCisweGE0NjI3MzdjLCAweDkxMGMwLCAweDJlMjEwMjEsIDB4ODAwMWM3OSwKKzB4YTQ0NjcyN2MsIDB4MmU0MTAyMSwgMHg5NDQ1NzI3YywgMHg4MDAxYzJlLAorMHg1MTBjMCwgMHg5NDQzNzM3ZSwgMHg5NzQyMDIxMiwgMHgxNDYyMDAwNiwKKzB4NTEwYzAsIDB4OTcxMDIxLCAweDhjNDM3MzgwLCAweDhmNDIwMjE0LAorMHgxMDYyMDA2NSwgMHg1MTBjMCwgMHgyZTIxMDIxLCAweDk0NDU3MzdjLAorMHg1MTBjMCwgMHgyZTIxMDIxLCAweDk0NDI3MzdjLCAweDMwNDI4MDAwLAorMHgxMDQwZmZmMCwgMHg5NzEwMjEsIDB4NTIwYzAsIDB4OTcxMDIxLAorMHg5NDQzNzM3ZSwgMHg5NzQyMDIxMiwgMHgxNDYyMDAwNiwgMHgyNDA2ZmZmZiwKKzB4OTcxMDIxLCAweDhjNDM3MzgwLCAweDhmNDIwMjE0LCAweDEwNjIwMDUzLAorMHgzYzAyMDgwMCwgMHgyMDIxLCAweDQxMGMwLCAweDJlMjEwMjEsCisweDk0NDI3MzdjLCAweDMwNDI0MDAwLCAweDU0NDAwMDA1LCAweDgwMzAyMSwKKzB4MjQ4NDAwMDEsIDB4MmM4MjAwODAsIDB4MTQ0MGZmZjgsIDB4NDEwYzAsCisweDRjMTAwMjMsIDB4NjE4YzAsIDB4OTEwYzAsIDB4NTcxODIxLAorMHg4YzYzNzI3YywgMHg1NzEwMjEsIDB4YWZhMzAwMTAsIDB4OGM0MjcyODAsCisweDNjMDQwMDAxLCAweDI0ODQ1Mzg0LCAweGFmYTIwMDE0LCAweDhmNDcwMjE0LAorMHgzYzA1MDAwMywgMHhjMDAyNDAzLCAweDM0YTVmMDE3LCAweDgwMDFjOTAsCisweDNjMDIwODAwLCAweDhmNDMwMjEwLCAweGI3MTAyMSwgMHhhYzQzNzc3YywKKzB4OGY0MzAyMTQsIDB4YjcxMDIxLCAweGFjNDM3NzgwLCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4MjQ0MjAwMDEsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhYzIyODNiNCwgMHgzYzAzMDAwMSwgMHg3NzE4MjEsCisweDhjNjM4M2I0LCAweDJlNTEwMjEsIDB4ODAwMWM4MiwgMHhhNDQzNzc3YywKKzB4OTc0NDAyMTIsIDB4NzcxMDIxLCAweGE0NDQ3MzdlLCAweDhmNDQwMjE0LAorMHg3NzEwMjEsIDB4MmUzMTgyMSwgMHhhYzQ0NzM4MCwgMHgzNDAyODAwMCwKKzB4YTQ2MjczN2MsIDB4NTEwYzAsIDB4MmUyMTAyMSwgMHhhNDQ2NzM3YywKKzB4MjAyMSwgMHg0MjhjMCwgMHgyZTUxMDIxLCAweDk0NDI3NzdjLAorMHgxMDQwZmZkYywgMHgyNDg0MDAwMSwgMHgyYzgyMDA4MCwgMHg1NDQwZmZmYSwKKzB4NDI4YzAsIDB4OTJlMjA0ZDgsIDB4MTA0MDAwMDYsIDB4MjQwMjAwMDEsCisweDhlZTMwNGRjLCAweDEyMjEwMDQsIDB4NjIxODI1LCAweDgwMDFjOGYsCisweGFlZTMwNGRjLCAweDhmODMwMjI4LCAweDI0MDIwMDAxLCAweDEyMjEwMDQsCisweDYyMTgyNSwgMHhhZjgzMDIyOCwgMHgzYzAyMDgwMCwgMHgzNDQyMTAwMCwKKzB4YWZhMjAwMTgsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIDB4MjQ0MjAwMDEsCisweDMwNGEwMGZmLCAweDUxNDMwMGZkLCAweGFmYTAwMDEwLCAweDhlZTIwNjA4LAorMHgyMTBjMCwgMHg1NzEwMjEsIDB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsCisweGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LAorMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDEwNDAwMDZhLAorMHg1ODIxLCAweDI0MTAwMDA4LCAweDI0MGYwMDBkLCAweDI0MGQwMDA3LAorMHgyNDBjMDA0MCwgMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwKKzB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwKKzB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4MTUwMjAwMDcsIDB4MTAyMSwgMHg4ZWUyMDFhNCwgMHgzODIxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAxZDA4LCAweDhlZTIwMWE0LAorMHg4ZWU0MDYwOCwgMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsCisweDhlZTUwNDM0LCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIDB4OGVlMjA2MDgsCisweGE0ZjAwMDBlLCAweGFjZWYwMDE4LCAweGFjZWEwMDFjLCAweDIxMGMwLAorMHgyNDQyMDYwYywgMHgyZTIxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LAorMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywKKzB4MjQwNzAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsIDB4MCwKKzB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwKKzB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsCisweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNGMwMDA3LCAweDAsCisweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsCisweDgwMDFjZjUsIDB4MCwgMHgxNDYwMDAwNSwgMHgwLAorMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwKKzB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsCisweDgwMDFkMDgsIDB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwKKzB4NTA0YzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4YWM4ZDAwMDAsIDB4YWM4ZTAwMDQsIDB4NTRlMDAwMDYsCisweDI0MGIwMDAxLCAweDhmODIwMDU0LCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsCisweDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsIDB4MjQwMjAwMDEsCisweDU0NjIwMDc4LCAweGFmYTAwMDEwLCAweGFlZWEwNjA4LCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLAorMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGUwMDA4LCAweDI0MGQwMDExLAorMHgyNDBhMDAxMiwgMHgyNDA4MDA0MCwgMHgyNDBjMDAwMSwgMHg4ZjgzMDEyMCwKKzB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLAorMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLAorMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLCAweDhlZTIwMWE0LAorMHgzODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDFkNzQsCisweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAweDhlZTQwNGEwLAorMHg4ZWU1MDRhNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgMHhhNDZlMDAwZSwKKzB4YWM2ZDAwMTgsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsCisweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLAorMHgyNDA3MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDRhMDAxZiwgMHgwLAorMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLAorMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwKKzB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0ODAwMDcsIDB4MCwKKzB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwKKzB4ODAwMWQ2MSwgMHgwLCAweDE0NjAwMDA1LCAweDAsCisweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LAorMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwKKzB4ODAwMWQ3NCwgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHg1MDQ4MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHhhYzhhMDAwMCwgMHhhYzhjMDAwNCwgMHg1NGUwMDAwNiwKKzB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywKKzB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwgMHgyNDAyMDAwMSwKKzB4MTA2MjAwMjIsIDB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTM5MCwKKzB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsCisweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMTEsIDB4ODAwMWRhMCwKKzB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTM5YywgMHhhZmEwMDAxNCwKKzB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywKKzB4MzRhNWYwMTAsIDB4ODAwMWRhMCwgMHgwLCAweDNjMDQwMDAxLAorMHgyNDg0NTNhOCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwKKzB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwZiwgMHg4ZWUyMDFhYywKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4OGVlMjAxMjQsCisweDI0NDIwMDAxLCAweGFlZTIwMTI0LCAweDgwMDFmOTcsIDB4OGVlMjAxMjQsCisweDI3NDQwMjEyLCAweGMwMDIyZmUsIDB4MjQwNTAwMDYsIDB4MzA0OTAwMWYsCisweDkyOGMwLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjgwMDAsCisweDEwNDAwMDJmLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjQwMDAsCisweDE0NDAwMDFjLCAweGI3MTAyMSwgMHg5NDQzNzI3ZSwgMHg5NzQyMDIxMiwKKzB4MTQ2MjAwMTgsIDB4YjcxMDIxLCAweDhjNDM3MjgwLCAweDhmNDIwMjE0LAorMHg1NDYyMDAxNiwgMHhhZmEyMDAxMCwgMHg5MmUyMDRkOCwgMHgxMDQwMDAwNywKKzB4MjQwMjAwMDEsIDB4OGVlMzA0ZGMsIDB4MTIyMTAwNCwgMHgyMTAyNywKKzB4NjIxODI0LCAweDgwMDFkYzksIDB4YWVlMzA0ZGMsIDB4OGY4MzAyMjgsCisweDEyMjEwMDQsIDB4MjEwMjcsIDB4NjIxODI0LCAweGFmODMwMjI4LAorMHg5MTBjMCwgMHgyZTIxODIxLCAweDM0MDJjMDAwLCAweDgwMDFlNGUsCisweGE0NjI3MjdjLCAweDhmNDIwMjE0LCAweGFmYTIwMDEwLCAweDkxMGMwLAorMHg1NzEwMjEsIDB4OGM0MjcyN2MsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzYjQsCisweDNjMDUwMDAzLCAweGFmYTIwMDE0LCAweDhmNDcwMjEwLCAweDM0YTVmMDFjLAorMHhjMDAyNDAzLCAweDEyMDMwMjEsIDB4ODAwMWU4MywgMHgzYzAyMDgwMCwKKzB4YjcxMDIxLCAweDk0NDM3MjdlLCAweDk3NDIwMjEyLCAweDE0NjIwMDE5LAorMHg5MThjMCwgMHhiNzEwMjEsIDB4OGM0MzcyODAsIDB4OGY0MjAyMTQsCisweDE0NjIwMDE0LCAweDkxOGMwLCAweDJlNTEwMjEsIDB4OTQ0NzcyN2MsCisweDcyMGMwLCAweDk3MTAyMSwgMHg5NDQzNzM3ZSwgMHhiNzEwMjEsCisweGE0NDM3MjdlLCAweDk3MTAyMSwgMHg4YzQzNzM4MCwgMHhiNzEwMjEsCisweGFjNDM3MjgwLCAweDJlNDEwMjEsIDB4OTQ0MzczN2MsIDB4MmU1MTAyMSwKKzB4YTQ0MzcyN2MsIDB4MmU0MTgyMSwgMHgzNDAyYzAwMCwgMHg4MDAxZTRlLAorMHhhNDYyNzM3YywgMHgyZTMxMDIxLCAweDk0NDc3MjdjLCAweDMwMjEsCisweDcyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MjczN2MsIDB4NDAyMSwKKzB4MzA0MjgwMDAsIDB4MTQ0MDAwMjUsIDB4ZTAyODIxLCAweDYwNTAyMSwKKzB4MzQwYmMwMDAsIDB4OTcxMDIxLCAweDk0NDM3MzdlLCAweDk3NDIwMjEyLAorMHg1NDYyMDAxNSwgMHhlMDI4MjEsIDB4OTcxMDIxLCAweDhjNDM3MzgwLAorMHg4ZjQyMDIxNCwgMHg1NDYyMDAxMCwgMHhlMDI4MjEsIDB4MTEwMDAwMDYsCisweDJlNDEwMjEsIDB4OTQ0MzczN2MsIDB4NTEwYzAsIDB4MmUyMTAyMSwKKzB4ODAwMWUxYSwgMHhhNDQzNzM3YywgMHg5NDQzNzM3YywgMHgyZWExMDIxLAorMHhhNDQzNzI3YywgMHg3MTBjMCwgMHgyZTIxMDIxLCAweGE0NGI3MzdjLAorMHg4MDAxZTI4LCAweDI0MDYwMDAxLCAweDUxMGMwLCAweDJlMjEwMjEsCisweDk0NDc3MzdjLCAweDcyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MjczN2MsCisweDMwNDI4MDAwLCAweDEwNDBmZmRmLCAweDI1MDgwMDAxLCAweDMwYzIwMGZmLAorMHgxNDQwMDAyNSwgMHgyMDIxLCAweDcyMGMwLCAweDk3MTAyMSwKKzB4OTQ0MzczN2UsIDB4OTc0MjAyMTIsIDB4MTQ2MjAwMGYsIDB4OTEwYzAsCisweDk3MTAyMSwgMHg4YzQzNzM4MCwgMHg4ZjQyMDIxNCwgMHgxNDYyMDAwYSwKKzB4OTEwYzAsIDB4MmU0MTgyMSwgMHgzNDAyYzAwMCwgMHgxNTAwMDAxNSwKKzB4YTQ2MjczN2MsIDB4OTEwYzAsIDB4MmUyMTgyMSwgMHgzNDAyODAwMCwKKzB4ODAwMWU0ZSwgMHhhNDYyNzI3YywgMHg1NzEwMjEsIDB4OGM0MjcyN2MsCisweDNjMDQwMDAxLCAweDI0ODQ1M2MwLCAweDNjMDUwMDAzLCAweGFmYTIwMDEwLAorMHg3MTBjMCwgMHg1NzEwMjEsIDB4OGM0MjczN2MsIDB4MzRhNTAwMWUsCisweDEyMDMwMjEsIDB4YzAwMjQwMywgMHhhZmEyMDAxNCwgMHg4MDAxZTgzLAorMHgzYzAyMDgwMCwgMHgyMDIxLCAweDQyOGMwLCAweGI3MTAyMSwKKzB4OTQ0Mzc3N2UsIDB4OTc0MjAyMTIsIDB4NTQ2MjAwMmIsIDB4MjQ4NDAwMDEsCisweGI3MTAyMSwgMHg4YzQzNzc4MCwgMHg4ZjQyMDIxNCwgMHg1NDYyMDAyNiwKKzB4MjQ4NDAwMDEsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LAorMHgyNDQyZmZmZiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjgzYjQsCisweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgMHg4MDkwMjEsCisweDI0MjEwMmIsIDB4MTA0MDAwMGUsIDB4MjRiMTc3N2MsIDB4MjRiMDc3ODQsCisweDJmMDIwMjEsIDB4MmYxMjgyMSwgMHhjMDAyNDkwLCAweDI0MDYwMDA4LAorMHgyNjMxMDAwOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYjQsCisweDI2NTIwMDAxLCAweDI0MjEwMmIsIDB4MTQ0MGZmZjUsIDB4MjYxMDAwMDgsCisweDNjMDQwMDAxLCAweDk3MjAyMSwgMHg4Yzg0ODNiNCwgMHgyNDA1MDAwOCwKKzB4NDIwYzAsIDB4MjQ4NDc3N2MsIDB4YzAwMjQ4OCwgMHgyZTQyMDIxLAorMHg4MDAxZTgzLCAweDNjMDIwODAwLCAweDJjODIwMDgwLCAweDE0NDBmZmNmLAorMHg0MjhjMCwgMHgzYzAyMDgwMCwgMHgzNDQyMjAwMCwgMHhhZmEyMDAxOCwKKzB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIDB4MjQ0MjAwMDEsIDB4MzA0YTAwZmYsCisweDUxNDMwMGZkLCAweGFmYTAwMDEwLCAweDhlZTIwNjA4LCAweDIxMGMwLAorMHg1NzEwMjEsIDB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsIDB4YWM0MzA2MGMsCisweGFjNDQwNjEwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NjkwMDMyLAorMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDEwNDAwMDZhLCAweDU4MjEsCisweDI0MTAwMDA4LCAweDI0MGYwMDBkLCAweDI0MGQwMDA3LCAweDI0MGMwMDQwLAorMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwgMHgyNGU4MDAyMCwKKzB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwgMHg4ZjgyMDEyOCwKKzB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwgMHgxNTAyMDAwNywKKzB4MTAyMSwgMHg4ZWUyMDFhNCwgMHgzODIxLCAweDI0NDIwMDAxLAorMHhhZWUyMDFhNCwgMHg4MDAxZWZiLCAweDhlZTIwMWE0LCAweDhlZTQwNjA4LAorMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsIDB4OGVlNTA0MzQsCisweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwKKzB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIDB4OGVlMjA2MDgsIDB4YTRmMDAwMGUsCisweGFjZWYwMDE4LCAweGFjZWEwMDFjLCAweDIxMGMwLCAweDI0NDIwNjBjLAorMHgyZTIxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LCAweGFjZTIwMDEwLAorMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgMHgyNDA3MDAwMSwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwKKzB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwgMHg4YzgyMDAwNCwKKzB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsCisweDI0NDIwMDAxLCAweDEwNGMwMDA3LCAweDAsIDB4OGVlMjRlMzQsCisweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsIDB4ODAwMWVlOCwKKzB4MCwgMHgxNDYwMDAwNSwgMHgwLCAweDhmODIwMTI4LAorMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwKKzB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIDB4ODAwMWVmYiwKKzB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHg1MDRjMDAwMywKKzB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4YWM4ZDAwMDAsIDB4YWM4ZTAwMDQsIDB4NTRlMDAwMDYsIDB4MjQwYjAwMDEsCisweDhmODIwMDU0LCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsIDB4MTQ0MGZmOWQsCisweDAsIDB4MzE2MzAwZmYsIDB4MjQwMjAwMDEsIDB4NTQ2MjAwNzgsCisweGFmYTAwMDEwLCAweGFlZWEwNjA4LCAweDhmODMwMDU0LCAweDhmODIwMDU0LAorMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDEwNDAwMDYxLAorMHg1ODIxLCAweDI0MGUwMDA4LCAweDI0MGQwMDExLCAweDI0MGEwMDEyLAorMHgyNDA4MDA0MCwgMHgyNDBjMDAwMSwgMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwKKzB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjYzMDAwLAorMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLCAweDhmODIwMTI0LAorMHgxNGMyMDAwNywgMHgwLCAweDhlZTIwMWE0LCAweDM4MjEsCisweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDFmNjcsIDB4OGVlMjAxYTQsCisweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAweDhlZTQwNGEwLCAweDhlZTUwNGE0LAorMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgMHhhNDZlMDAwZSwgMHhhYzZkMDAxOCwKKzB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsCisweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MDcwMDAxLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHg4YzgyMDAwMCwgMHgxNDRhMDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA0ODAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAxZjU0LAorMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAxZjY3LAorMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNDgwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHhhYzhhMDAwMCwgMHhhYzhjMDAwNCwgMHg1NGUwMDAwNiwgMHgyNDBiMDAwMSwKKzB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywgMHgxNDQwZmZhNiwKKzB4MCwgMHgzMTYzMDBmZiwgMHgyNDAyMDAwMSwgMHgxMDYyMDAyMiwKKzB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTM5MCwgMHhhZmEwMDAxMCwKKzB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksCisweGMwMDI0MDMsIDB4MzRhNWYwMTEsIDB4ODAwMWY5MywgMHgwLAorMHgzYzA0MDAwMSwgMHgyNDg0NTM5YywgMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwKKzB4OGY4NzAxMjQsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAxMCwKKzB4ODAwMWY5MywgMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1M2E4LAorMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwKKzB4YzAwMjQwMywgMHgzNGE1ZjAwZiwgMHg4ZWUyMDFhYywgMHgyNDQyMDAwMSwKKzB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4OGVlMjAxMjgsIDB4MjQ0MjAwMDEsCisweGFlZTIwMTI4LCAweDhlZTIwMTI4LCAweDhlZTIwMTY0LCAweDI0NDIwMDAxLAorMHhhZWUyMDE2NCwgMHg4MDAyMmU4LCAweDhlZTIwMTY0LCAweDhmYTIwMDIwLAorMHgyMTIwMCwgMHgyMWQwMiwgMHgyNDAyMDAwMSwgMHgxMDYyMDAwNSwKKzB4MjQwMjAwMDIsIDB4MTA2MjAwMGQsIDB4MCwgMHg4MDAxZmI3LAorMHhhZmEwMDAxMCwgMHg5MmUyMDRkOCwgMHgxNDQwMDAwNiwgMHgyNDAyMDAwMSwKKzB4OGY4MjAyMjgsIDB4YWVlMjA0ZGMsIDB4MjQwMmZmZmYsIDB4YWY4MjAyMjgsCisweDI0MDIwMDAxLCAweDgwMDFmYmUsIDB4YTJlMjA0ZDgsIDB4OTJlMjA0ZDgsCisweDUwNDAwMDBjLCAweGEyZTAwNGQ4LCAweDhlZTIwNGRjLCAweGFmODIwMjI4LAorMHg4MDAxZmJlLCAweGEyZTAwNGQ4LCAweDNjMDQwMDAxLCAweDI0ODQ1M2M4LAorMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwgMHgzYzA1MDAwMywgMHhjMDAyNDAzLAorMHgzNGE1ZjAwOSwgMHg4ZWUyMDEzYywgMHgyNDQyMDAwMSwgMHhhZWUyMDEzYywKKzB4ODAwMjJlOCwgMHg4ZWUyMDEzYywgMHg4ZmEyMDAyMCwgMHgyMTIwMCwKKzB4MjI1MDIsIDB4MjQwMjAwMDEsIDB4MTA4MjAwMDUsIDB4MjQwMjAwMDIsCisweDEwODIwMDBmLCAweDAsIDB4ODAwMWZlMywgMHhhZmEwMDAxMCwKKzB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHgzNDQyMDAwOCwgMHhhZjgyMDIyMCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGEwMjI4M2IyLCAweDgwMDFmZWEsIDB4YWVlNDAxMDgsCisweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmY3LCAweDQzMTAyNCwKKzB4YWY4MjAyMjAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2IyLAorMHg4MDAxZmVhLCAweGFlZTQwMTA4LCAweDNjMDQwMDAxLCAweDI0ODQ1M2Q0LAorMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwgMHgzYzA1MDAwMywgMHhjMDAyNDAzLAorMHgzNGE1ZjAwYSwgMHg4ZWUyMDEyYywgMHgyNDQyMDAwMSwgMHhhZWUyMDEyYywKKzB4ODAwMjJlOCwgMHg4ZWUyMDEyYywgMHg4ZmEyMDAyMCwgMHgyMTIwMCwKKzB4MjFkMDIsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMDUsIDB4MjQwMjAwMDIsCisweDEwNjIwMDBlLCAweDAsIDB4ODAwMjAxMSwgMHhhZmEwMDAxMCwKKzB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHgzNDQyMDAwOCwgMHhhZjgyMDIyMCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweDgwMDIwMTgsIDB4YTAyMjgzYjMsIDB4M2MwMjAwMDEsCisweDU3MTAyMSwgMHg5MDQyODNiMiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweDE0NDAwMDBlLCAweGEwMjA4M2IzLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLAorMHgzNDYzZmZmNywgMHg0MzEwMjQsIDB4ODAwMjAxOCwgMHhhZjgyMDIyMCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDUzZTAsIDB4YWZhMDAwMTQsIDB4OGZhNjAwMjAsCisweDNjMDUwMDAzLCAweGMwMDI0MDMsIDB4MzRhNWYwMGIsIDB4OGVlMjAxMTQsCisweDI0NDIwMDAxLCAweGFlZTIwMTE0LCAweDgwMDIyZTgsIDB4OGVlMjAxMTQsCisweDI3ODQwMjA4LCAweDI3NDUwMjAwLCAweGMwMDI0OWEsIDB4MjQwNjAwMDgsCisweDI2ZTQwMDk0LCAweDI3NDUwMjAwLCAweGMwMDI0OWEsIDB4MjQwNjAwMDgsCisweDhlZTIwMTM0LCAweDI0NDIwMDAxLCAweGFlZTIwMTM0LCAweDgwMDIyZTgsCisweDhlZTIwMTM0LCAweDhmNDYwMjQ4LCAweDIwMjEsIDB4YzAwNTEwOCwKKzB4MjQwNTAwMDQsIDB4OGVlMjAxMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxMzAsCisweDgwMDIyZTgsIDB4OGVlMjAxMzAsIDB4OGVmMzAxY2MsIDB4OGVmNDAxZDAsCisweDhlZjUwMWQ4LCAweDhlZTIwMTQwLCAweDI2ZTQwMDMwLCAweDI0NDIwMDAxLAorMHhhZWUyMDE0MCwgMHg4ZWYwMDE0MCwgMHg4ZWYxMDA3NCwgMHg4ZWYyMDA3MCwKKzB4YzAwMjQ4OCwgMHgyNDA1MDQwMCwgMHhhZWYzMDFjYywgMHhhZWY0MDFkMCwKKzB4YWVmNTAxZDgsIDB4YWVmMDAxNDAsIDB4YWVmMTAwNzQsIDB4YWVmMjAwNzAsCisweDhmNDIwMjVjLCAweDI2ZTQwMDk0LCAweGFlZTIwMDYwLCAweDhmNDIwMjYwLAorMHgyNzQ1MDIwMCwgMHgyNDA2MDAwOCwgMHhhZWUyMDA2OCwgMHgyNDAyMDAwNiwKKzB4YzAwMjQ5YSwgMHhhZWUyMDA2NCwgMHgzYzAyM2I5YSwgMHgzNDQyY2EwMCwKKzB4YWVlMjAwNmMsIDB4MjQwMjAzZTgsIDB4MjQwNDAwMDIsIDB4MjQwMzAwMDEsCisweGFlZTIwMTA0LCAweGFlZTQwMTAwLCAweGFlZTMwMTBjLCAweDhmODIwMjIwLAorMHgzMDQyMDAwOCwgMHgxMDQwMDAwNCwgMHgwLCAweGFlZTMwMTA4LAorMHg4MDAyMDYxLCAweDIwMjEsIDB4YWVlNDAxMDgsIDB4MjAyMSwKKzB4M2MwMzAwMDEsIDB4NjQxODIxLCAweDkwNjM1YzMwLCAweDJlNDEwMjEsCisweDI0ODQwMDAxLCAweGEwNDMwMDljLCAweDJjODIwMDBmLCAweDE0NDBmZmY4LAorMHgwLCAweDhmODIwMDQwLCAweDJlNDE4MjEsIDB4MjQ4NDAwMDEsCisweDIxNzAyLCAweDI0NDIwMDMwLCAweGEwNjIwMDljLCAweDJlNDEwMjEsCisweDgwMDIyZTgsIDB4YTA0MDAwOWMsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhMDIyODNlMCwgMHgyNDBiMDQwMCwgMHgyNDA4MDAxNCwKKzB4MjQwYTAwNDAsIDB4MjQwOTAwMDEsIDB4OGY4MzAxMDAsIDB4Mjc2MjMwMDAsCisweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MjgwMCwKKzB4OGY4MjAxMDgsIDB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEwNCwKKzB4MTRjMjAwMDcsIDB4MjZlMjAwMzAsIDB4OGVlMjAxYTgsIDB4MzgyMSwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIDB4ODAwMjBhOCwgMHg4ZWUyMDFhOCwKKzB4OGVlNDA0YjgsIDB4OGVlNTA0YmMsIDB4YWM2MjAwMDgsIDB4YTQ2YjAwMGUsCisweGFjNjgwMDE4LCAweGFjNjAwMDFjLCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LAorMHg4ZWUyMDRjYywgMHhhYzYyMDAxMCwgMHhhZjg2MDEwMCwgMHg5MmUyMDRlYywKKzB4MTQ0MDAwMGUsIDB4MjQwNzAwMDEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsCisweDUwNGEwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsCisweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LAorMHgyZTIxMDIxLCAweGFjNDgwMDAwLCAweGFjNDkwMDA0LCAweDEwZTBmZmQyLAorMHgwLCAweDgwMDIyZTgsIDB4MCwgMHgzYzAyMDkwMCwKKzB4YWVlMDUyMzgsIDB4YWVlMDUyM2MsIDB4YWVlMDUyNDAsIDB4YWVlMDUyNDQsCisweGFlZTAwMWQwLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwODNiMSwKKzB4YWZhMjAwMTgsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsIDB4MjQ0MjAwMDEsCisweDMwNGEwMGZmLCAweDUxNDMwMGZkLCAweGFmYTAwMDEwLCAweDhlZTIwNjA4LAorMHgyMTBjMCwgMHg1NzEwMjEsIDB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsCisweGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LAorMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLCAweDEwNDAwMDZhLAorMHg1ODIxLCAweDI0MTAwMDA4LCAweDI0MGYwMDBkLCAweDI0MGQwMDA3LAorMHgyNDBjMDA0MCwgMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwgMHgyNzYyMzgwMCwKKzB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY4MzAwMCwKKzB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4MTUwMjAwMDcsIDB4MTAyMSwgMHg4ZWUyMDFhNCwgMHgzODIxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAyMTJjLCAweDhlZTIwMWE0LAorMHg4ZWU0MDYwOCwgMHg0MjBjMCwgMHg4MDE4MjEsIDB4OGVlNDA0MzAsCisweDhlZTUwNDM0LCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsIDB4OGVlMjA2MDgsCisweGE0ZjAwMDBlLCAweGFjZWYwMDE4LCAweGFjZWEwMDFjLCAweDIxMGMwLAorMHgyNDQyMDYwYywgMHgyZTIxMDIxLCAweGFjZTIwMDA4LCAweDhlZTIwNGM0LAorMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywKKzB4MjQwNzAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsIDB4MCwKKzB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MCwKKzB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsCisweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNGMwMDA3LCAweDAsCisweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LCAweDAsCisweDgwMDIxMTksIDB4MCwgMHgxNDYwMDAwNSwgMHgwLAorMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwKKzB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsCisweDgwMDIxMmMsIDB4MCwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwKKzB4NTA0YzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsCisweDJlMjIwMjEsIDB4YWM4ZDAwMDAsIDB4YWM4ZTAwMDQsIDB4NTRlMDAwMDYsCisweDI0MGIwMDAxLCAweDhmODIwMDU0LCAweDEyMjEwMjMsIDB4MmM0MjAwMzMsCisweDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsIDB4MjQwMjAwMDEsCisweDU0NjIwMDc4LCAweGFmYTAwMDEwLCAweGFlZWEwNjA4LCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLAorMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGUwMDA4LCAweDI0MGQwMDExLAorMHgyNDBhMDAxMiwgMHgyNDA4MDA0MCwgMHgyNDBjMDAwMSwgMHg4ZjgzMDEyMCwKKzB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLAorMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLAorMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLCAweDhlZTIwMWE0LAorMHgzODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDIxOTgsCisweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLCAweDhlZTQwNGEwLAorMHg4ZWU1MDRhNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgMHhhNDZlMDAwZSwKKzB4YWM2ZDAwMTgsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsCisweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLAorMHgyNDA3MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDRhMDAxZiwgMHgwLAorMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLAorMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwKKzB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0ODAwMDcsIDB4MCwKKzB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwKKzB4ODAwMjE4NSwgMHgwLCAweDE0NjAwMDA1LCAweDAsCisweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LAorMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwKKzB4ODAwMjE5OCwgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHg1MDQ4MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHhhYzhhMDAwMCwgMHhhYzhjMDAwNCwgMHg1NGUwMDAwNiwKKzB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywgMHgyYzQyMDAzMywKKzB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwgMHgyNDAyMDAwMSwKKzB4MTA2MjAwMjIsIDB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTM5MCwKKzB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsCisweDNjMDUwMDA5LCAweGMwMDI0MDMsIDB4MzRhNWYwMTEsIDB4ODAwMjFjNCwKKzB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NTM5YywgMHhhZmEwMDAxNCwKKzB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywKKzB4MzRhNWYwMTAsIDB4ODAwMjFjNCwgMHgwLCAweDNjMDQwMDAxLAorMHgyNDg0NTNhOCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwKKzB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwZiwgMHg4ZWUyMDFhYywKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4OGVlMjAxMjAsCisweDI0NDIwMDAxLCAweGFlZTIwMTIwLCAweDhlZTIwMTIwLCAweDhlZTIwMTY4LAorMHgyNDQyMDAwMSwgMHhhZWUyMDE2OCwgMHg4MDAyMmU4LCAweDhlZTIwMTY4LAorMHg4ZjQyMDI1YywgMHgyNmU0MDA5NCwgMHhhZWUyMDA2MCwgMHg4ZjQyMDI2MCwKKzB4Mjc0NTAyMDAsIDB4MjQwNjAwMDgsIDB4YzAwMjQ5YSwgMHhhZWUyMDA2OCwKKzB4OGY4MjAyMjAsIDB4MzA0MjAwMDgsIDB4MTQ0MDAwMDIsIDB4MjQwMjAwMDEsCisweDI0MDIwMDAyLCAweGFlZTIwMTA4LCAweDhlZTIwMTFjLCAweDI0NDIwMDAxLAorMHhhZWUyMDExYywgMHg4MDAyMmU4LCAweDhlZTIwMTFjLCAweDNjMDQwMDAxLAorMHgyNDg0NTNlYywgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZmE2MDAyMCwKKzB4M2MwNTAwMDMsIDB4YzAwMjQwMywgMHgzNGE1ZjAwZiwgMHg5M2EyMDAyMCwKKzB4M2MwMzA3MDAsIDB4MzQ2MzEwMDAsIDB4NDMxMDI1LCAweGFmYTIwMDE4LAorMHg4ZWUyMDYwOCwgMHg4ZjQzMDIyOCwgMHgyNDQyMDAwMSwgMHgzMDQ5MDBmZiwKKzB4NTEyMzAwZTIsIDB4YWZhMDAwMTAsIDB4OGVlMjA2MDgsIDB4MjEwYzAsCisweDU3MTAyMSwgMHg4ZmEzMDAxOCwgMHg4ZmE0MDAxYywgMHhhYzQzMDYwYywKKzB4YWM0NDA2MTAsIDB4OGY4NzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsCisweDEwMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2ODMwMDAsIDB4OGY4MjAxMjgsCisweDExMDIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTUwMjAwMDcsCisweDEwMjEsIDB4OGVlMjAxYTQsIDB4MzgyMSwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxYTQsIDB4ODAwMjI1ZCwgMHg4ZWUyMDFhNCwgMHg4ZWU0MDYwOCwKKzB4NDIwYzAsIDB4ODAxODIxLCAweDhlZTQwNDMwLCAweDhlZTUwNDM0LAorMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgMHg4NjIwMjEsCisweGFjZTQwMDAwLCAweGFjZTUwMDA0LCAweDhlZTMwNjA4LCAweDI0MDIwMDA4LAorMHhhNGUyMDAwZSwgMHgyNDAyMDAwZCwgMHhhY2UyMDAxOCwgMHhhY2U5MDAxYywKKzB4MzE4YzAsIDB4MjQ2MzA2MGMsIDB4MmUzMTAyMSwgMHhhY2UyMDAwOCwKKzB4OGVlMjA0YzQsIDB4YWNlMjAwMTAsIDB4YWY4ODAxMjAsIDB4OTJlMjRlMjAsCisweDE0NDAwMDM3LCAweDI0MDcwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA3LAorMHgxNDYyMDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LAorMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwKKzB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsCisweDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsCisweDEwYTIwMDA1LCAweDAsIDB4ODAwMjI0NywgMHgwLAorMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLAorMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwKKzB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMjI1ZCwgMHgwLAorMHg4ZWUyNGUzMCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywKKzB4MTAyMSwgMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4MjQwMjAwMDcsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsCisweDU0ZTAwMDBjLCAweGFlZTkwNjA4LCAweDNjMDQwMDAxLCAweDI0ODQ1M2Y0LAorMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwKKzB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwMCwgMHg4MDAyMmUwLAorMHgwLCAweDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLAorMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsCisweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsCisweDAsIDB4OGVlMjAxYTQsIDB4MzgyMSwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxYTQsIDB4ODAwMjJjNCwgMHg4ZWUyMDFhNCwgMHg4ZWUyMDYwOCwKKzB4YWM2MjAwMWMsIDB4OGVlNDA0YTAsIDB4OGVlNTA0YTQsIDB4MjQ2MjAwMWMsCisweGFjNjIwMDA4LCAweDI0MDIwMDA4LCAweGE0NjIwMDBlLCAweDI0MDIwMDExLAorMHhhYzYyMDAxOCwgMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwKKzB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsCisweDI0MDcwMDAxLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LAorMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDEyLCAweDE0NjIwMDFmLAorMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLAorMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwKKzB4OGVlMjRlMzQsIDB4OGVlNTRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsCisweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsCisweDAsIDB4ODAwMjJhZSwgMHgwLCAweDE0YTAwMDA1LAorMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LAorMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywKKzB4YWM4MDAwMDAsIDB4ODAwMjJjNCwgMHgwLCAweDhlZTI0ZTMwLAorMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgMHgxMDIxLAorMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwKKzB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAxMiwKKzB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4MTRlMDAwMWIsCisweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDUzZmMsIDB4YWZhMDAwMTAsCisweGFmYTAwMDE0LCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LAorMHhjMDAyNDAzLCAweDM0YTVmMDAxLCAweDhlZTIwMWIwLCAweDI0NDIwMDAxLAorMHhhZWUyMDFiMCwgMHg4MDAyMmUwLCAweDhlZTIwMWIwLCAweDNjMDQwMDAxLAorMHgyNDg0NTQwOCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwKKzB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwNSwgMHg4ZWUyMDFhYywKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYWMsIDB4OGVlMjAxYWMsIDB4OGVlMjAxNTAsCisweDI0NDIwMDAxLCAweGFlZTIwMTUwLCAweDhlZTIwMTUwLCAweDhlZTIwMTYwLAorMHgyNDQyMDAwMSwgMHhhZWUyMDE2MCwgMHg4ZWUyMDE2MCwgMHg4ZjQzMDIyYywKKzB4OGY0MjAxMGMsIDB4MTQ2MjAwMDksIDB4MjQwMjAwMDIsIDB4YWY4MjAwNjQsCisweDhmODIwMDY0LCAweDE0NDAwMDA1LCAweDAsIDB4OGY0MzAyMmMsCisweDhmNDIwMTBjLCAweDE0NjJmODc1LCAweDAsIDB4OGZiZjAwNDQsCisweDhmYjYwMDQwLCAweDhmYjUwMDNjLCAweDhmYjQwMDM4LCAweDhmYjMwMDM0LAorMHg4ZmIyMDAzMCwgMHg4ZmIxMDAyYywgMHg4ZmIwMDAyOCwgMHgzZTAwMDA4LAorMHgyN2JkMDA0OCwgMHgyN2JkZmZmOCwgMHgyNDA4ZmZmZiwgMHgxMGEwMDAxNCwKKzB4NDgyMSwgMHgzYzBhZWRiOCwgMHgzNTRhODMyMCwgMHg5MDg3MDAwMCwKKzB4MjQ4NDAwMDEsIDB4MzAyMSwgMHgxMDcxMDI2LCAweDMwNDIwMDAxLAorMHgxMDQwMDAwMiwgMHg4MTg0MiwgMHg2YTE4MjYsIDB4NjA0MDIxLAorMHgyNGM2MDAwMSwgMHgyY2MyMDAwOCwgMHgxNDQwZmZmNywgMHg3Mzg0MiwKKzB4MjUyOTAwMDEsIDB4MTI1MTAyYiwgMHgxNDQwZmZmMCwgMHgwLAorMHgxMDAxMDIxLCAweDNlMDAwMDgsIDB4MjdiZDAwMDgsIDB4MjdiZGZmZTgsCisweDI3NjQyODAwLCAweGFmYmYwMDEwLCAweGMwMDI0ODgsIDB4MjQwNTEwMDAsCisweDI0MDIwMDIxLCAweGFmODAwMTAwLCAweGFmODAwMTA0LCAweGFmODAwMTA4LAorMHhhZjgwMDExMCwgMHhhZjgwMDExNCwgMHhhZjgwMDExOCwgMHhhZjgwMDEyMCwKKzB4YWY4MDAxMjQsIDB4YWY4MDAxMjgsIDB4YWY4MDAxMzAsIDB4YWY4MDAxMzQsCisweGFmODAwMTM4LCAweGFlZTA0ZTI4LCAweGFlZTA0ZTJjLCAweGFlZTA0ZTMwLAorMHhhZWUwNGUzNCwgMHhhZjgyMDExYywgMHg4ZjQyMDIxOCwgMHgzMDQyMDA0MCwKKzB4MTA0MDAwMDQsIDB4MCwgMHg4ZjgyMDExYywgMHgzNDQyMDAwNCwKKzB4YWY4MjAxMWMsIDB4OGZiZjAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAxOCwKKzB4MjdiZGZmZTAsIDB4YWZiZjAwMTgsIDB4OGY4MjAxMDQsIDB4YWZhMjAwMTAsCisweDhmODIwMTAwLCAweDNjMDUwMDAyLCAweGFmYTIwMDE0LCAweDhmODYwMGIwLAorMHg4Zjg3MDExYywgMHgzYzA0MDAwMSwgMHgyNDg0NTRjMCwgMHhjMDAyNDAzLAorMHgzNGE1ZjAwMCwgMHg4ZjgzMDBiMCwgMHgzYzAyN2YwMCwgMHg2MjE4MjQsCisweDNjMDIwNDAwLCAweDEwNjIwMDI5LCAweDQzMTAyYiwgMHgxNDQwMDAwOCwKKzB4M2MwMjIwMDAsIDB4M2MwMjAxMDAsIDB4MTA2MjAwMjQsIDB4M2MwMjAyMDAsCisweDEwNjIwMDExLCAweDAsIDB4ODAwMjM3NCwgMHgwLAorMHgxMDYyMDAwOCwgMHgzYzAyNDAwMCwgMHgxNDYyMDAxYywgMHgwLAorMHg4ZWUyMDE5MCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE5MCwgMHg4MDAyMzc0LAorMHg4ZWUyMDE5MCwgMHg4ZWUyMDE4YywgMHgyNDQyMDAwMSwgMHhhZWUyMDE4YywKKzB4ODAwMjM3NCwgMHg4ZWUyMDE4YywgMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwKKzB4YWY4MjAxMWMsIDB4OGY4MzAxMDQsIDB4OGY4MjAwYjAsIDB4MzQ0MjAwMDEsCisweGFmODIwMGIwLCAweGFmODMwMTA0LCAweDhmODIwMTFjLCAweDI0MDNmZmZkLAorMHg0MzEwMjQsIDB4YWY4MjAxMWMsIDB4OGVlMjAxYTAsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWEwLCAweDgwMDIzNzcsIDB4OGVlMjAxYTAsIDB4OGY4MjAwYjAsCisweDM0NDIwMDAxLCAweGFmODIwMGIwLCAweDhmYmYwMDE4LCAweDNlMDAwMDgsCisweDI3YmQwMDIwLCAweDI3YmRmZmUwLCAweGFmYmYwMDFjLCAweGFmYjAwMDE4LAorMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA1MDAwMSwKKzB4YWZhMjAwMTQsIDB4OGY4NjAwYTAsIDB4OGY4NzAxMWMsIDB4M2MwNDAwMDEsCisweDI0ODQ1NGNjLCAweGMwMDI0MDMsIDB4MzRhNWYwMDAsIDB4OGY4MzAwYTAsCisweDNjMDI3ZjAwLCAweDYyMTgyNCwgMHgzYzAyMDQwMCwgMHgxMDYyMDA1MywKKzB4ODAyMSwgMHg0MzEwMmIsIDB4MTQ0MDAwMDgsIDB4M2MwNDIwMDAsCisweDNjMDIwMTAwLCAweDEwNjIwMDRkLCAweDNjMDIwMjAwLCAweDEwNjIwMDNhLAorMHgwLCAweDgwMDIzZTAsIDB4MCwgMHgxMDY0MDAwMywKKzB4M2MwMjQwMDAsIDB4MTQ2MjAwNDUsIDB4MCwgMHg4ZjgyMDBhMCwKKzB4NDQxMDI0LCAweDEwNDAwMDA2LCAweDAsIDB4OGVlMjAxOTQsCisweDI0NDIwMDAxLCAweGFlZTIwMTk0LCAweDgwMDIzYTksIDB4OGVlMjAxOTQsCisweDhlZTIwMTk4LCAweDI0NDIwMDAxLCAweGFlZTIwMTk4LCAweDhlZTIwMTk4LAorMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwgMHhhZjgyMDExYywgMHg4ZjgyMDExYywKKzB4MzA0MjAyMDAsIDB4MTA0MDAwMWIsIDB4MCwgMHg4ZjgzMDBhMCwKKzB4OGY4NDAxMjQsIDB4OGY4MjAwYWMsIDB4MTQ0MDAwMDcsIDB4MjQwMjAwMDEsCisweDNjMDIwMDAxLCAweDM0NDJmMDAwLCAweDYyMTAyNCwgMHg1MDQwMDAwMSwKKzB4MjQxMDAwMDEsIDB4MjQwMjAwMDEsIDB4MTIwMDAwMGQsIDB4YWY4MjAwYTAsCisweDhmODIwMTI0LCAweDI0NDJmZmUwLCAweGFmODIwMTI0LCAweDhmODIwMTI0LAorMHg4ZjgyMDEyNCwgMHgyNzYzMzAwMCwgMHg0MzEwMmIsIDB4MTA0MDAwMDUsCisweDI3NjIzN2UwLCAweGFmODIwMTI0LCAweDgwMDIzY2EsIDB4MCwKKzB4YWY4NDAxMjQsIDB4OGY4MjAxMWMsIDB4MjQwM2ZmZmQsIDB4NDMxMDI0LAorMHg4MDAyM2UzLCAweGFmODIwMTFjLCAweDhmODIwMTFjLCAweDM0NDIwMDAyLAorMHhhZjgyMDExYywgMHg4ZjgzMDEyNCwgMHg4ZjgyMDBhMCwgMHgzNDQyMDAwMSwKKzB4YWY4MjAwYTAsIDB4YWY4MzAxMjQsIDB4OGY4MjAxMWMsIDB4MjQwM2ZmZmQsCisweDQzMTAyNCwgMHhhZjgyMDExYywgMHg4ZWUyMDE5YywgMHgyNDQyMDAwMSwKKzB4YWVlMjAxOWMsIDB4ODAwMjNlMywgMHg4ZWUyMDE5YywgMHg4ZjgyMDBhMCwKKzB4MzQ0MjAwMDEsIDB4YWY4MjAwYTAsIDB4OGZiZjAwMWMsIDB4OGZiMDAwMTgsCisweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjVjNTgsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsIDB4MTQ0MDAwMTIsCisweGFmYjAwMDEwLCAweDNjMTAwMDAxLCAweDI2MTA1ZGQwLCAweDIwMDIwMjEsCisweGMwMDI0ODgsIDB4MjQwNTIwMDAsIDB4MjYwMjFmZTAsIDB4M2MwMTAwMDEsCisweGFjMjI1ZDk0LCAweDNjMDEwMDAxLCAweGFjMjI1ZDkwLCAweGFmNDIwMjUwLAorMHgyNDAyMjAwMCwgMHhhZjUwMDI1NCwgMHhhZjQyMDI1OCwgMHgyNDAyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyMjVjNTgsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsCisweDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMzAwMDEsIDB4OGM2MzVkOTQsCisweDhjODIwMDAwLCAweDhmYTgwMDEwLCAweDhmYTkwMDE0LCAweGFjNjIwMDAwLAorMHgzYzAyMDAwMSwgMHg4YzQyNWQ5NCwgMHg4YzgzMDAwNCwgMHhhYzQzMDAwNCwKKzB4YWM0NTAwMDgsIDB4OGY4NDAwNTQsIDB4MjQ0M2ZmZTAsIDB4YWM0NjAwMTAsCisweGFjNDcwMDE0LCAweGFjNDgwMDE4LCAweGFjNDkwMDFjLCAweDNjMDEwMDAxLAorMHhhYzIzNWQ5NCwgMHhhYzQ0MDAwYywgMHgzYzAyMDAwMSwgMHgyNDQyNWRkMCwKKzB4NjIxODJiLCAweDEwNjAwMDA1LCAweDAsIDB4M2MwMjAwMDEsCisweDhjNDI1ZDkwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDk0LCAweDNjMDMwMDAxLAorMHg4YzYzNWQ5NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWM0MCwgMHhhYzYyMDAwMCwKKzB4M2MwMzAwMDEsIDB4OGM2MzVkOTQsIDB4M2MwMjAwMDEsIDB4OGM0MjVjNDAsCisweGFjNjIwMDA0LCAweDNlMDAwMDgsIDB4YWY0MzAyNTAsIDB4M2MwMzAwMDEsCisweDhjNjM1ZDk0LCAweDNjMDIwMDAxLCAweDhjNDI1YzQwLCAweDI3YmRmZmQwLAorMHhhZmI0MDAyMCwgMHg4ZmI0MDA0MCwgMHhhZmIwMDAxMCwgMHg4MDgwMjEsCisweGFmYjUwMDI0LCAweDhmYjUwMDQ0LCAweDhmYTQwMDQ4LCAweGFmYjEwMDE0LAorMHhhMDg4MjEsIDB4YWZiZjAwMjgsIDB4YWZiMzAwMWMsIDB4YWZiMjAwMTgsCisweGFjNjIwMDAwLCAweDNjMDUwMDAxLCAweDhjYTU1ZDk0LCAweDNjMDIwMDAxLAorMHg4YzQyNWM0MCwgMHhjMDkwMjEsIDB4ZTA5ODIxLCAweDEwODAwMDA2LAorMHhhY2EyMDAwNCwgMHgyNGE1MDAwOCwgMHhjMDAyNDkwLCAweDI0MDYwMDE4LAorMHg4MDAyNDRlLCAweDAsIDB4MjRhNDAwMDgsIDB4YzAwMjQ4OCwKKzB4MjQwNTAwMTgsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOTQsIDB4M2MwNTAwMDEsCisweDI0YTU1ZGQwLCAweDI0NDJmZmUwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDk0LAorMHg0NTEwMmIsIDB4MTA0MDAwMDUsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjVkOTAsIDB4M2MwMTAwMDEsIDB4YWMyMjVkOTQsIDB4M2MwMzAwMDEsCisweDhjNjM1ZDk0LCAweDhlMDIwMDAwLCAweGFjNjIwMDAwLCAweDNjMDMwMDAxLAorMHg4YzYzNWQ5NCwgMHg4ZTAyMDAwNCwgMHhhYzYyMDAwNCwgMHhhYzcxMDAwOCwKKzB4OGY4NDAwNTQsIDB4MjQ2MmZmZTAsIDB4M2MwMTAwMDEsIDB4YWMyMjVkOTQsCisweDQ1MTAyYiwgMHhhYzcyMDAxMCwgMHhhYzczMDAxNCwgMHhhYzc0MDAxOCwKKzB4YWM3NTAwMWMsIDB4MTA0MDAwMDUsIDB4YWM2NDAwMGMsIDB4M2MwMjAwMDEsCisweDhjNDI1ZDkwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDk0LCAweDNjMDMwMDAxLAorMHg4YzYzNWQ5NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWM0MCwgMHhhYzYyMDAwMCwKKzB4M2MwMzAwMDEsIDB4OGM2MzVkOTQsIDB4M2MwMjAwMDEsIDB4OGM0MjVjNDAsCisweGFjNjIwMDA0LCAweGFmNDMwMjUwLCAweDhmYmYwMDI4LCAweDhmYjUwMDI0LAorMHg4ZmI0MDAyMCwgMHg4ZmIzMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwKKzB4OGZiMDAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAzMCwgMHgxMGEwMDAwNSwKKzB4MCwgMHhhYzgwMDAwMCwgMHgyNGE1ZmZmYywgMHgxNGEwZmZmZCwKKzB4MjQ4NDAwMDQsIDB4M2UwMDAwOCwgMHgwLCAweDEwYzAwMDA3LAorMHgwLCAweDhjODIwMDAwLCAweDI0ODQwMDA0LCAweDI0YzZmZmZjLAorMHhhY2EyMDAwMCwgMHgxNGMwZmZmYiwgMHgyNGE1MDAwNCwgMHgzZTAwMDA4LAorMHgwLCAweDEwYzAwMDA3LCAweDAsIDB4OGNhMjAwMDAsCisweDI0YTUwMDA0LCAweDI0YzZmZmZjLCAweGFjODIwMDAwLCAweDE0YzBmZmZiLAorMHgyNDg0MDAwNCwgMHgzZTAwMDA4LCAweDAsIDB4M2UwMDAwOCwKKzB4MCwgMHgyN2JkZmZkOCwgMHhhZmJmMDAyMCwgMHg4ZWUzMDRlNCwKKzB4OGVlMjA0ZTAsIDB4MTA2MjA0MzYsIDB4MCwgMHg4ZWUyMDRlNCwKKzB4OGVlMzA0ZmMsIDB4MjExMDAsIDB4NjI2MDIxLCAweDk1ODcwMDA4LAorMHg4ZDhhMDAwMCwgMHg4ZDhiMDAwNCwgMHg5NThkMDAwYSwgMHg4ZWUyNzI1YywKKzB4OGVlMzcyNmMsIDB4MzBlNGZmZmYsIDB4NDQxMDIxLCAweDYyMTgyYiwKKzB4MTA2MDAwMTUsIDB4MzFhMjAwMDQsIDB4OGY4MjAwZDgsIDB4OGVlMzcyNTgsCisweDQzMTAyMywgMHhhZWUyNzI2YywgMHg4ZWUyNzI2YywgMHgxYzQwMDAwMywKKzB4M2MwMzAwMDEsIDB4NDMxMDIxLCAweGFlZTI3MjZjLCAweDhlZTI3MjVjLAorMHg4ZWUzNzI2YywgMHg0NDEwMjEsIDB4NjIxODJiLCAweDEwNjAwMDA2LAorMHgzMWEyMDAwNCwgMHg4ZWUyMDFiOCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFiOCwKKzB4ODAwMjhlMSwgMHg4ZWUyMDFiOCwgMHgxMDQwMDI0MCwgMHgzMWEyMDIwMCwKKzB4MTA0MDAxNGQsIDB4NDgyMSwgMHg5NmUyMDQ1YSwgMHgzMDQyMDAxMCwKKzB4MTA0MDAxNDksIDB4MCwgMHg4Zjg0MDEwMCwgMHgyNzYyMzAwMCwKKzB4MjQ4NTAwMjAsIDB4YTIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjUyODAwLAorMHg4ZjgyMDEwOCwgMHgxMGEyMDAwNCwgMHgwLCAweDhmODIwMTA0LAorMHgxNGEyMDAwNiwgMHgyNDAyMDAwYywgMHg4ZWUyMDFhOCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxYTgsIDB4ODAwMjUyYywgMHg4ZWUyMDFhOCwgMHhhYzhhMDAwMCwKKzB4YWM4YjAwMDQsIDB4OGVlMzcyNjQsIDB4MjQwNjAwMDUsIDB4YTQ4MjAwMGUsCisweGFjODYwMDE4LCAweGFjODMwMDA4LCAweDhlZTIwNGU0LCAweGFjODIwMDFjLAorMHg4ZWUyMDRjOCwgMHhhYzgyMDAxMCwgMHhhZjg1MDEwMCwgMHg5MmUyMDRlYywKKzB4MTQ0MDAwMzYsIDB4MjQwOTAwMDEsIDB4OGVlMjRlMjgsIDB4MjEwYzAsCisweDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0NjAwMWYsCisweDAsIDB4OGVlMzRlMjgsIDB4OGVlMjRlMmMsIDB4MTA2MjAwMWIsCisweDI0MDMwMDQwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LAorMHg4ZWUyNGUyYywgMHg4ZWU1NGUyOCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywKKzB4MCwgMHg4ZWUyNGUyYywgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwKKzB4MCwgMHg4MDAyNTE2LCAweDAsIDB4MTRhMDAwMDUsCisweDAsIDB4OGY4MjAxMDgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsCisweDhmODIwMTA4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLAorMHhhYzgwMDAwMCwgMHg4MDAyNTJjLCAweDAsIDB4OGVlMjRlMjgsCisweDI0MDMwMDQwLCAweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsCisweDhlZTI0ZTI4LCAweDI0NDIwMDAxLCAweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LAorMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA1LAorMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNTIwMDAwYSwKKzB4M2MwNDAwMDEsIDB4YWZhYjAwMTAsIDB4OGVlMjcyNjQsIDB4M2MwNDAwMDEsCisweDI0ODQ1NzMwLCAweDNjMDUwMDA0LCAweGFmYTIwMDE0LCAweDhlZTYwNGU0LAorMHg4MDAyOGJlLCAweDM0YTVmMTE0LCAweDhlZTI3MjY0LCAweDM0ODQzODAwLAorMHgzNjQxODIxLCAweDI0NDIwMDEwLCAweDQzMTAyYiwgMHgxNDQwMDA3MywKKzB4MCwgMHg4ZWUyNzI2NCwgMHgyNDQ4MDAxMCwgMHgzNjQxMDIxLAorMHgxMDIxMDJiLCAweDE0NDAwMDAyLCAweDNjMDJmZmZmLCAweDEwMjQwMjEsCisweDhmODUwMTAwLCAweDI3NjIzMDAwLCAweDI0YTYwMDIwLCAweGMyMTAyYiwKKzB4NTA0MDAwMDEsIDB4Mjc2NjI4MDAsIDB4OGY4MjAxMDgsIDB4MTBjMjAwMDQsCisweDAsIDB4OGY4MjAxMDQsIDB4MTRjMjAwMDcsIDB4MjU2MzAwMGMsCisweDhlZTIwMWE4LCAweDQ4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsCisweDgwMDI1YTAsIDB4OGVlMjAxYTgsIDB4MmM2NDAwMGMsIDB4MTQ0MTAyMSwKKzB4YWNhMjAwMDAsIDB4YWNhMzAwMDQsIDB4MjRlMmZmZjQsIDB4YTRhMjAwMGUsCisweDI0MDIwMDA2LCAweGFjYTgwMDA4LCAweGFjYTIwMDE4LCAweDhlZTIwNGU0LAorMHhhY2EyMDAxYywgMHg4ZWUyMDRjOCwgMHgzYzAzMDAwMiwgMHg0MzEwMjUsCisweGFjYTIwMDEwLCAweGFmODYwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM3LAorMHgyNDA5MDAwMSwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwKKzB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgMHgyNDAyMDAwNSwgMHgxNDYyMDAxZiwKKzB4MCwgMHg4ZWUzNGUyOCwgMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwKKzB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsCisweDhlZTI0ZTJjLCAweDhlZTU0ZTI4LCAweDI0NDIwMDAxLCAweDEwNDMwMDA3LAorMHgwLCAweDhlZTI0ZTJjLCAweDI0NDIwMDAxLCAweDEwYTIwMDA1LAorMHgwLCAweDgwMDI1OGEsIDB4MCwgMHgxNGEwMDAwNSwKKzB4MCwgMHg4ZjgyMDEwOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwKKzB4OGY4MjAxMDgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsCisweGFjODAwMDAwLCAweDgwMDI1YTAsIDB4MCwgMHg4ZWUyNGUyOCwKKzB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwKKzB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsCisweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDUsCisweGFjODIwMDAwLCAweDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDE1MjAwMDBhLAorMHgyNTA4ZmZmYywgMHhhZmFiMDAxMCwgMHg4ZWUyNzI2NCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDU3MzAsIDB4M2MwNTAwMDQsIDB4YWZhMjAwMTQsIDB4OGVlNjA0ZTQsCisweDgwMDI4YmUsIDB4MzRhNWYxMjUsIDB4MzQwMjgxMDAsIDB4YTUwMjAwMDAsCisweDk1ODIwMDBlLCAweDgwMDI2MWQsIDB4YTUwMjAwMDIsIDB4OGY4NTAxMDAsCisweDI3NjIzMDAwLCAweDI0YTYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwKKzB4Mjc2NjI4MDAsIDB4OGY4MjAxMDgsIDB4MTBjMjAwMDQsIDB4MCwKKzB4OGY4MjAxMDQsIDB4MTRjMjAwMDcsIDB4MjU2MzAwMGMsIDB4OGVlMjAxYTgsCisweDQ4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIDB4ODAwMjYwZCwKKzB4OGVlMjAxYTgsIDB4MmM2NDAwMGMsIDB4MTQ0MTAyMSwgMHhhY2EyMDAwMCwKKzB4YWNhMzAwMDQsIDB4OGVlMzcyNjQsIDB4MjRlMmZmZjQsIDB4YTRhMjAwMGUsCisweDI0MDIwMDA2LCAweGFjYTIwMDE4LCAweDI0NjMwMDEwLCAweGFjYTMwMDA4LAorMHg4ZWUyMDRlNCwgMHhhY2EyMDAxYywgMHg4ZWUyMDRjOCwgMHgzYzAzMDAwMiwKKzB4NDMxMDI1LCAweGFjYTIwMDEwLCAweGFmODYwMTAwLCAweDkyZTIwNGVjLAorMHgxNDQwMDAzNywgMHgyNDA5MDAwMSwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwKKzB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgMHg4YzgzMDAwMCwgMHgyNDAyMDAwNSwKKzB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUyOCwgMHg4ZWUyNGUyYywKKzB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsCisweGFjODIwMDA0LCAweDhlZTI0ZTJjLCAweDhlZTU0ZTI4LCAweDI0NDIwMDAxLAorMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTJjLCAweDI0NDIwMDAxLAorMHgxMGEyMDAwNSwgMHgwLCAweDgwMDI1ZjcsIDB4MCwKKzB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEwOCwgMHgyNDQyMDAyMCwKKzB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsCisweDUwNDAwMDEzLCAweGFjODAwMDAwLCAweDgwMDI2MGQsIDB4MCwKKzB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsCisweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsCisweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsCisweDI0MDIwMDA1LCAweGFjODIwMDAwLCAweDI0MDIwMDAxLCAweGFjODIwMDA0LAorMHgxNTIwMDAwYSwgMHgzNDAyODEwMCwgMHhhZmFiMDAxMCwgMHg4ZWUyNzI2NCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDU3MzAsIDB4M2MwNTAwMDQsIDB4YWZhMjAwMTQsCisweDhlZTYwNGU0LCAweDgwMDI4YmUsIDB4MzRhNWYwMTUsIDB4OGVlMzcyNjQsCisweGE0NjIwMDBjLCAweDhlZTM3MjY0LCAweDk1ODIwMDBlLCAweGE0NjIwMDBlLAorMHg4MDAyNjgxLCAweDI0ZTcwMDA0LCAweDhmODQwMTAwLCAweDI3NjIzMDAwLAorMHgyNDg1MDAyMCwgMHhhMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NTI4MDAsCisweDhmODIwMTA4LCAweDEwYTIwMDA0LCAweDAsIDB4OGY4MjAxMDQsCisweDE0YTIwMDA3LCAweDI0MDIwMDA2LCAweDhlZTIwMWE4LCAweDQ4MjEsCisweDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDI2NzcsIDB4OGVlMjAxYTgsCisweGFjOGEwMDAwLCAweGFjOGIwMDA0LCAweDhlZTM3MjY0LCAweGE0ODcwMDBlLAorMHhhYzgyMDAxOCwgMHhhYzgzMDAwOCwgMHg4ZWUyMDRlNCwgMHhhYzgyMDAxYywKKzB4OGVlMjA0YzgsIDB4M2MwMzAwMDIsIDB4NDMxMDI1LCAweGFjODIwMDEwLAorMHhhZjg1MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDAzNywgMHgyNDA5MDAwMSwKKzB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwKKzB4OGM4MzAwMDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMWYsIDB4MCwKKzB4OGVlMzRlMjgsIDB4OGVlMjRlMmMsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsCisweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTJjLAorMHg4ZWU1NGUyOCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLAorMHg4ZWUyNGUyYywgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLAorMHg4MDAyNjYxLCAweDAsIDB4MTRhMDAwMDUsIDB4MCwKKzB4OGY4MjAxMDgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsCisweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLAorMHg4MDAyNjc3LCAweDAsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsCisweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsCisweDI0NDIwMDAxLCAweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLAorMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAweGFjODIwMDAwLAorMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNTIwMDAwOSwgMHgzYzA1MDAwNCwKKzB4YWZhYjAwMTAsIDB4OGVlMjcyNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU3MzAsCisweGFmYTIwMDE0LCAweDhlZTYwNGU0LCAweDgwMDI4YmUsIDB4MzRhNWYwMDQsCisweDhlZTI3MjVjLCAweDMwZTdmZmZmLCAweDQ3MTAyMSwgMHhhZWUyNzI1YywKKzB4OGVlMjA0ZTQsIDB4OGVlMzA0ZmMsIDB4OGVlNDcyNTgsIDB4MjExMDAsCisweDQzMTAyMSwgMHhhYzQ0MDAwYywgMHg4ZWUyNzI1OCwgMHhhZmEyMDAxOCwKKzB4OGVlMzcyNWMsIDB4YWZhMzAwMWMsIDB4OGVlMjcyNWMsIDB4MmM0MjAwM2MsCisweDEwNDAwMDA0LCAweDI0NjIwMDAxLCAweDI0MDNmZmZlLCAweDQzMTAyNCwKKzB4YWZhMjAwMWMsIDB4OGVlMjcyNjQsIDB4M2MwNjAwMDEsIDB4MzRjNjM4MDAsCisweDhlZTM3MjVjLCAweDI0MDVmZmY4LCAweDQ3MTAyMSwgMHgyNDQyMDAwNywKKzB4NDUxMDI0LCAweDI0NjMwMDA3LCAweGFlZTI3MjU4LCAweDhlZTI3MjZjLAorMHg4ZWU0NzI1OCwgMHg2NTE4MjQsIDB4NDMxMDIzLCAweGFlZTI3MjZjLAorMHgzNjYxMDIxLCAweDgyMjAyYiwgMHgxNDgwMDAwNCwgMHgzYzAzZmZmZiwKKzB4OGVlMjcyNTgsIDB4NDMxMDIxLCAweGFlZTI3MjU4LCAweDhlZTI3MjU4LAorMHhhZWUyNzI2NCwgMHg4ZjgyMDBmMCwgMHgyNDQ3MDAwOCwgMHgyNzYyMTgwMCwKKzB4ZTIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjcxMDAwLCAweDhmODIwMGY0LAorMHgxNGUyMDAwNywgMHgwLCAweDhlZTIwMWI0LCAweDQ4MjEsCisweDI0NDIwMDAxLCAweGFlZTIwMWI0LCAweDgwMDI2YzQsIDB4OGVlMjAxYjQsCisweDhmODIwMGYwLCAweDI0MDkwMDAxLCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLAorMHhhYzQzMDAwMCwgMHhhYzQ0MDAwNCwgMHhhZjg3MDBmMCwgMHgxNTIwMDAxMiwKKzB4ZDExNDIsIDB4OGY4MjAwZjAsIDB4YWZhMjAwMTAsIDB4OGY4MjAwZjQsCisweDNjMDQwMDAxLCAweDI0ODQ1NzNjLCAweGFmYTIwMDE0LCAweDhmYTYwMDE4LAorMHg4ZmE3MDAxYywgMHgzYzA1MDAwNCwgMHhjMDAyNDAzLCAweDM0YTVmMDA1LAorMHg4ZWUyMDA4OCwgMHgyNDQyMDAwMSwgMHhhZWUyMDA4OCwgMHg4ZWUyMDA4OCwKKzB4ODAwMjhkMywgMHhhZWUwNzI1YywgMHgzMDQzMDAwMywgMHgyNDAyMDAwMiwKKzB4MTA2MjAwMTYsIDB4Mjg2MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDEsCisweDEwNjIwMDA4LCAweDAsIDB4ODAwMjcwMywgMHgwLAorMHgyNDAyMDAwMywgMHgxMDYyMDAxNywgMHgwLCAweDgwMDI3MDMsCisweDAsIDB4OGVlMjAwZTgsIDB4OGVlMzAwZWMsIDB4MjQ2MzAwMDEsCisweDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZWUyMDBlOCwgMHhhZWUzMDBlYywKKzB4OGVlMjAwZTgsIDB4ODAwMjcwMywgMHg4ZWUzMDBlYywgMHg4ZWUyMDBmMCwKKzB4OGVlMzAwZjQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLAorMHhhZWUyMDBmMCwgMHhhZWUzMDBmNCwgMHg4ZWUyMDBmMCwgMHg4MDAyNzAzLAorMHg4ZWUzMDBmNCwgMHg4ZWUyMDBmOCwgMHg4ZWUzMDBmYywgMHgyNDYzMDAwMSwKKzB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGY4LCAweGFlZTMwMGZjLAorMHg4ZWUyMDBmOCwgMHg4ZWUzMDBmYywgMHg4ZWUyNzI1YywgMHg4ZWU0MDBlMCwKKzB4OGVlNTAwZTQsIDB4NDAxODIxLCAweDEwMjEsIDB4YTMyODIxLAorMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgMHhhZWU0MDBlMCwKKzB4YWVlNTAwZTQsIDB4ODAwMjhkMywgMHhhZWUwNzI1YywgMHgzMGUyZmZmZiwKKzB4MTA0MDAxYzEsIDB4MzFhMjAyMDAsIDB4MTA0MDAxNGQsIDB4NDgyMSwKKzB4OTZlMjA0NWEsIDB4MzA0MjAwMTAsIDB4MTA0MDAxNDksIDB4MCwKKzB4OGY4NDAxMDAsIDB4Mjc2MjMwMDAsIDB4MjQ4NTAwMjAsIDB4YTIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY1MjgwMCwgMHg4ZjgyMDEwOCwgMHgxMGEyMDAwNCwKKzB4MCwgMHg4ZjgyMDEwNCwgMHgxNGEyMDAwNiwgMHgyNDAyMDAwYywKKzB4OGVlMjAxYTgsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsIDB4ODAwMjc2ZSwKKzB4OGVlMjAxYTgsIDB4YWM4YTAwMDAsIDB4YWM4YjAwMDQsIDB4OGVlMzcyNjQsCisweDI0MDYwMDA1LCAweGE0ODIwMDBlLCAweGFjODYwMDE4LCAweGFjODMwMDA4LAorMHg4ZWUyMDRlNCwgMHhhYzgyMDAxYywgMHg4ZWUyMDRjOCwgMHhhYzgyMDAxMCwKKzB4YWY4NTAxMDAsIDB4OTJlMjA0ZWMsIDB4MTQ0MDAwMzYsIDB4MjQwOTAwMDEsCisweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsCisweDhjODIwMDAwLCAweDE0NDYwMDFmLCAweDAsIDB4OGVlMzRlMjgsCisweDhlZTI0ZTJjLCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUyYywgMHg4ZWU1NGUyOCwKKzB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUyYywKKzB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAyNzU4LAorMHgwLCAweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMDgsCisweDI0NDIwMDIwLCAweGFmODIwMTA4LCAweDhmODIwMTA4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyNzZlLAorMHgwLCAweDhlZTI0ZTI4LCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLAorMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTI4LCAweDI0NDIwMDAxLAorMHhhZWUyNGUyOCwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwKKzB4MmUyMjAyMSwgMHgyNDAyMDAwNSwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwKKzB4YWM4MjAwMDQsIDB4MTUyMDAwMGEsIDB4M2MwNDAwMDEsIDB4YWZhYjAwMTAsCisweDhlZTI3MjY0LCAweDNjMDQwMDAxLCAweDI0ODQ1NzMwLCAweDNjMDUwMDA0LAorMHhhZmEyMDAxNCwgMHg4ZWU2MDRlNCwgMHg4MDAyOGJlLCAweDM0YTVmMDE0LAorMHg4ZWUyNzI2NCwgMHgzNDg0MzgwMCwgMHgzNjQxODIxLCAweDI0NDIwMDEwLAorMHg0MzEwMmIsIDB4MTQ0MDAwNzMsIDB4MCwgMHg4ZWUyNzI2NCwKKzB4MjQ0ODAwMTAsIDB4MzY0MTAyMSwgMHgxMDIxMDJiLCAweDE0NDAwMDAyLAorMHgzYzAyZmZmZiwgMHgxMDI0MDIxLCAweDhmODUwMTAwLCAweDI3NjIzMDAwLAorMHgyNGE2MDAyMCwgMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjI4MDAsCisweDhmODIwMTA4LCAweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMDQsCisweDE0YzIwMDA3LCAweDI1NjMwMDBjLCAweDhlZTIwMWE4LCAweDQ4MjEsCisweDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDI3ZTIsIDB4OGVlMjAxYTgsCisweDJjNjQwMDBjLCAweDE0NDEwMjEsIDB4YWNhMjAwMDAsIDB4YWNhMzAwMDQsCisweDI0ZTJmZmY0LCAweGE0YTIwMDBlLCAweDI0MDIwMDA2LCAweGFjYTgwMDA4LAorMHhhY2EyMDAxOCwgMHg4ZWUyMDRlNCwgMHhhY2EyMDAxYywgMHg4ZWUyMDRjOCwKKzB4M2MwMzAwMDIsIDB4NDMxMDI1LCAweGFjYTIwMDEwLCAweGFmODYwMTAwLAorMHg5MmUyMDRlYywgMHgxNDQwMDAzNywgMHgyNDA5MDAwMSwgMHg4ZWUyNGUyOCwKKzB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgMHg4YzgzMDAwMCwKKzB4MjQwMjAwMDUsIDB4MTQ2MjAwMWYsIDB4MCwgMHg4ZWUzNGUyOCwKKzB4OGVlMjRlMmMsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsIDB4OGM4MjAwMDQsCisweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTJjLCAweDhlZTU0ZTI4LAorMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLCAweDhlZTI0ZTJjLAorMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLCAweDgwMDI3Y2MsCisweDAsIDB4MTRhMDAwMDUsIDB4MCwgMHg4ZjgyMDEwOCwKKzB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIDB4OGM4MjAwMDQsCisweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLCAweDgwMDI3ZTIsCisweDAsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsCisweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsCisweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LAorMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAweGFjODIwMDAwLCAweDI0MDIwMDAxLAorMHhhYzgyMDAwNCwgMHgxNTIwMDAwYSwgMHgyNTA4ZmZmYywgMHhhZmFiMDAxMCwKKzB4OGVlMjcyNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU3MzAsIDB4M2MwNTAwMDQsCisweGFmYTIwMDE0LCAweDhlZTYwNGU0LCAweDgwMDI4YmUsIDB4MzRhNWYwMTUsCisweDM0MDI4MTAwLCAweGE1MDIwMDAwLCAweDk1ODIwMDBlLCAweDgwMDI4NWYsCisweGE1MDIwMDAyLCAweDhmODUwMTAwLCAweDI3NjIzMDAwLCAweDI0YTYwMDIwLAorMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjI4MDAsIDB4OGY4MjAxMDgsCisweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMDQsIDB4MTRjMjAwMDcsCisweDI1NjMwMDBjLCAweDhlZTIwMWE4LCAweDQ4MjEsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWE4LCAweDgwMDI4NGYsIDB4OGVlMjAxYTgsIDB4MmM2NDAwMGMsCisweDE0NDEwMjEsIDB4YWNhMjAwMDAsIDB4YWNhMzAwMDQsIDB4OGVlMzcyNjQsCisweDI0ZTJmZmY0LCAweGE0YTIwMDBlLCAweDI0MDIwMDA2LCAweGFjYTIwMDE4LAorMHgyNDYzMDAxMCwgMHhhY2EzMDAwOCwgMHg4ZWUyMDRlNCwgMHhhY2EyMDAxYywKKzB4OGVlMjA0YzgsIDB4M2MwMzAwMDIsIDB4NDMxMDI1LCAweGFjYTIwMDEwLAorMHhhZjg2MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDAzNywgMHgyNDA5MDAwMSwKKzB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwKKzB4OGM4MzAwMDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMWYsIDB4MCwKKzB4OGVlMzRlMjgsIDB4OGVlMjRlMmMsIDB4MTA2MjAwMWIsIDB4MjQwMzAwNDAsCisweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTJjLAorMHg4ZWU1NGUyOCwgMHgyNDQyMDAwMSwgMHgxMDQzMDAwNywgMHgwLAorMHg4ZWUyNGUyYywgMHgyNDQyMDAwMSwgMHgxMGEyMDAwNSwgMHgwLAorMHg4MDAyODM5LCAweDAsIDB4MTRhMDAwMDUsIDB4MCwKKzB4OGY4MjAxMDgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsCisweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLAorMHg4MDAyODRmLCAweDAsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsCisweDI0NDIwMDAxLCAweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsCisweDI0NDIwMDAxLCAweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLAorMHgyNDQyNGUzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA1LCAweGFjODIwMDAwLAorMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNTIwMDAwYSwgMHgzNDAyODEwMCwKKzB4YWZhYjAwMTAsIDB4OGVlMjcyNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU3MzAsCisweDNjMDUwMDA0LCAweGFmYTIwMDE0LCAweDhlZTYwNGU0LCAweDgwMDI4YmUsCisweDM0YTVmMDE2LCAweDhlZTM3MjY0LCAweGE0NjIwMDBjLCAweDhlZTM3MjY0LAorMHg5NTgyMDAwZSwgMHhhNDYyMDAwZSwgMHg4MDAyOGMyLCAweDI0ZTcwMDA0LAorMHg4ZjgzMDEwMCwgMHgyNzYyMzAwMCwgMHgyNDY0MDAyMCwgMHg4MjEwMmIsCisweDUwNDAwMDAxLCAweDI3NjQyODAwLCAweDhmODIwMTA4LCAweDEwODIwMDA0LAorMHgwLCAweDhmODIwMTA0LCAweDE0ODIwMDA3LCAweDI0MDUwMDA1LAorMHg4ZWUyMDFhOCwgMHg0ODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE4LAorMHg4MDAyOGI2LCAweDhlZTIwMWE4LCAweGFjNmEwMDAwLCAweGFjNmIwMDA0LAorMHg4ZWUyNzI2NCwgMHhhNDY3MDAwZSwgMHhhYzY1MDAxOCwgMHhhYzYyMDAwOCwKKzB4OGVlMjA0ZTQsIDB4YWM2MjAwMWMsIDB4OGVlMjA0YzgsIDB4YWM2MjAwMTAsCisweGFmODQwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM2LCAweDI0MDkwMDAxLAorMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLAorMHg4YzgyMDAwMCwgMHgxNDQ1MDAxZiwgMHgwLCAweDhlZTM0ZTI4LAorMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwgMHg4YzgyMDAwNCwKKzB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMmMsIDB4OGVlNTRlMjgsCisweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsIDB4OGVlMjRlMmMsCisweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsIDB4ODAwMjhhMCwKKzB4MCwgMHgxNGEwMDAwNSwgMHgwLCAweDhmODIwMTA4LAorMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwgMHg4YzgyMDAwNCwKKzB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsIDB4ODAwMjhiNiwKKzB4MCwgMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwKKzB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwgMHgyNDQyMDAwMSwKKzB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIDB4MjEwYzAsIDB4MjQ0MjRlMzgsCisweDJlMjIwMjEsIDB4MjQwMjAwMDUsIDB4YWM4MjAwMDAsIDB4MjQwMjAwMDEsCisweGFjODIwMDA0LCAweDE1MjAwMDBiLCAweDNjMDUwMDA0LCAweDNjMDQwMDAxLAorMHgyNDg0NTc0OCwgMHhhZmFiMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZWU2MDRlNCwKKzB4MzRhNWYwMTcsIDB4YzAwMjQwMywgMHgzMGU3ZmZmZiwgMHg4MDAyOGUxLAorMHgwLCAweDhlZTI3MjY0LCAweDNjMDUwMDAxLCAweDMwZTRmZmZmLAorMHg0NDEwMjEsIDB4YWVlMjcyNjQsIDB4OGVlMjcyNWMsIDB4OGVlMzcyNjQsCisweDM0YTUzODAwLCAweDQ0MTAyMSwgMHhhZWUyNzI1YywgMHgzNjUxMDIxLAorMHg2MjE4MmIsIDB4MTQ2MDAwMDQsIDB4M2MwM2ZmZmYsIDB4OGVlMjcyNjQsCisweDQzMTAyMSwgMHhhZWUyNzI2NCwgMHg4ZWUzMDRlNCwgMHg5NmUyMDQ1OCwKKzB4MjQ2MzAwMDEsIDB4MjQ0MmZmZmYsIDB4NjIxODI0LCAweGFlZTMwNGU0LAorMHg4ZWUzMDRlNCwgMHg4ZWUyMDRlMCwgMHgxNDYyMDAwNSwgMHgwLAorMHg4ZjgyMDA2MCwgMHgyNDAzZmZmNywgMHg0MzEwMjQsIDB4YWY4MjAwNjAsCisweDhmYmYwMDIwLCAweDNlMDAwMDgsIDB4MjdiZDAwMjgsIDB4MjdiZGZmZTAsCisweGFmYmYwMDE4LCAweDhlZTMwNGU4LCAweDhlZTIwNGUwLCAweDEwNjIwMTg5LAorMHgwLCAweDhlZTIwNGU4LCAweDhlZTMwNGZjLCAweDIxMTAwLAorMHg2MjE4MjEsIDB4OTQ2NzAwMDgsIDB4OTJlMjA0ZWQsIDB4OGM2ODAwMDAsCisweDhjNjkwMDA0LCAweDEwNDAwMDIzLCAweDk0NmEwMDBhLCAweDhlZTIwNGM4LAorMHgzNDQ2MDQwMCwgMHgzMTQyMDIwMCwgMHgxMDQwMDAxZiwgMHgwLAorMHg5NmUyMDQ1YSwgMHgzMDQyMDAxMCwgMHgxMDQwMDAxYiwgMHgzYzAyODAwMCwKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjI4M2Q4LCAweDhlZTI3MjY0LAorMHg5NDY0MDAwZSwgMHgzYzA1MDAwMSwgMHgzNGE1MzgwMCwgMHgyNDQyMDAwNCwKKzB4YWVlMjcyNjQsIDB4OGVlMzcyNjQsIDB4NDI0MDAsIDB4MzY1MTAyMSwKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjQ4M2RjLCAweDYyMTgyYiwKKzB4MTQ2MDAwMDUsIDB4MjRlNzAwMDQsIDB4OGVlMjcyNjQsIDB4M2MwM2ZmZmYsCisweDQzMTAyMSwgMHhhZWUyNzI2NCwgMHg4ZWUyNzI2NCwgMHg4MDAyOTE3LAorMHhhZWUyNzI1OCwgMHg4ZWU2MDRjOCwgMHg4ZWUyNzI2YywgMHgzMGU0ZmZmZiwKKzB4NDQxMDJhLCAweDEwNDAwMDE1LCAweDAsIDB4OGY4MjAwZDgsCisweDhlZTM3MjU4LCAweDQzMTAyMywgMHhhZWUyNzI2YywgMHg4ZWUyNzI2YywKKzB4MWM0MDAwMDcsIDB4NDQxMDJhLCAweDhlZTI3MjZjLCAweDNjMDMwMDAxLAorMHg0MzEwMjEsIDB4YWVlMjcyNmMsIDB4OGVlMjcyNmMsIDB4NDQxMDJhLAorMHgxMDQwMDAwNiwgMHgwLCAweDhlZTIwMWI4LCAweDI0NDIwMDAxLAorMHhhZWUyMDFiOCwgMHg4MDAyYTcyLCAweDhlZTIwMWI4LCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OGM0MjgzZDgsIDB4NTQ0MDAwMDEsIDB4MjRlN2ZmZmMsCisweDMxNDIwMDA0LCAweDEwNDAwMGI5LCAweDMwZTJmZmZmLCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OGM0MjgzZDgsIDB4MTA0MDAwMmYsIDB4NTAyMSwKKzB4OGY4NDAxMDAsIDB4Mjc2MjMwMDAsIDB4MjQ4NTAwMjAsIDB4YTIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY1MjgwMCwgMHg4ZjgyMDEwOCwgMHgxMGEyMDAzMiwKKzB4MCwgMHg4ZjgyMDEwNCwgMHgxMGEyMDAyZiwgMHgyNDAyMDAxNSwKKzB4YWM4ODAwMDAsIDB4YWM4OTAwMDQsIDB4OGVlMzcyNjQsIDB4YTQ4NzAwMGUsCisweGFjODIwMDE4LCAweGFjODMwMDA4LCAweDhlZTIwNGU4LCAweDNjMDMwMDAxLAorMHg3NzE4MjEsIDB4OGM2MzgzZGMsIDB4YWM4NjAwMTAsIDB4NDMxMDI1LAorMHhhYzgyMDAxYywgMHhhZjg1MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDA2NiwKKzB4MjQwYTAwMDEsIDB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsCisweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsCisweGFlZTI0ZTI4LCAweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LAorMHgyZTIxODIxLCAweDI0MDIwMDE1LCAweGFjNjIwMDAwLCAweDI0MDIwMDAxLAorMHg4MDAyOWJmLCAweGFjNjIwMDA0LCAweDhmODQwMTAwLCAweDI3NjIzMDAwLAorMHgyNDg1MDAyMCwgMHhhMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NTI4MDAsCisweDhmODIwMTA4LCAweDEwYTIwMDA0LCAweDAsIDB4OGY4MjAxMDQsCisweDE0YTIwMDA2LCAweDI0MDIwMDA2LCAweDhlZTIwMWE4LCAweDI0NDIwMDAxLAorMHhhZWUyMDFhOCwgMHg4MDAyOWJmLCAweDhlZTIwMWE4LCAweGFjODgwMDAwLAorMHhhYzg5MDAwNCwgMHg4ZWUzNzI2NCwgMHhhNDg3MDAwZSwgMHhhYzgyMDAxOCwKKzB4YWM4MzAwMDgsIDB4OGVlMjA0ZTgsIDB4YWM4NjAwMTAsIDB4YWM4MjAwMWMsCisweGFmODUwMTAwLCAweDkyZTIwNGVjLCAweDE0NDAwMDM3LCAweDI0MGEwMDAxLAorMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwgMHgyZTIyMDIxLAorMHg4YzgzMDAwMCwgMHgyNDAyMDAwNSwgMHgxNDYyMDAxZiwgMHgwLAorMHg4ZWUzNGUyOCwgMHg4ZWUyNGUyYywgMHgxMDYyMDAxYiwgMHgyNDAzMDA0MCwKKzB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsIDB4OGVlMjRlMmMsCisweDhlZTU0ZTI4LCAweDI0NDIwMDAxLCAweDEwNDMwMDA3LCAweDAsCisweDhlZTI0ZTJjLCAweDI0NDIwMDAxLCAweDEwYTIwMDA1LCAweDAsCisweDgwMDI5YTksIDB4MCwgMHgxNGEwMDAwNSwgMHgwLAorMHg4ZjgyMDEwOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwKKzB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTMsIDB4YWM4MDAwMDAsCisweDgwMDI5YmYsIDB4MCwgMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwKKzB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIDB4MjEwYzAsCisweDI0NDI0ZTM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDUsIDB4YWM4MjAwMDAsCisweDI0MDIwMDAxLCAweGFjODIwMDA0LCAweDE1NDAwMDBhLCAweDI0MDIwMDAxLAorMHhhZmE5MDAxMCwgMHg4ZWUyNzI2NCwgMHgzYzA0MDAwMSwgMHgyNDg0NTczMCwKKzB4M2MwNTAwMDQsIDB4YWZhMjAwMTQsIDB4OGVlNjA0ZTQsIDB4ODAwMmE0ZiwKKzB4MzRhNWYyMDQsIDB4YTJlMjA0ZWQsIDB4OGVlMjA0ZTgsIDB4OGVlMzA0ZmMsCisweDhlZTQ3MjU4LCAweDNjMDYwMDAxLCAweDM0YzYzODAwLCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4YWMyMDgzZDgsIDB4M2MwMTAwMDEsIDB4MzcwODIxLAorMHhhYzIwODNkYywgMHgyMTEwMCwgMHg0MzEwMjEsIDB4YWM0NDAwMGMsCisweDhlZTI3MjY0LCAweDI0MDVmZmY4LCAweDMwZTNmZmZmLCAweDQzMTAyMSwKKzB4MjQ0MjAwMDcsIDB4NDUxMDI0LCAweDI0NjMwMDA3LCAweGFlZTI3MjU4LAorMHg4ZWUyNzI2YywgMHg4ZWU0NzI1OCwgMHg2NTE4MjQsIDB4NDMxMDIzLAorMHhhZWUyNzI2YywgMHgzNjYxMDIxLCAweDgyMjAyYiwgMHgxNDgwMDAwNCwKKzB4M2MwM2ZmZmYsIDB4OGVlMjcyNTgsIDB4NDMxMDIxLCAweGFlZTI3MjU4LAorMHg4ZWUyNzI1OCwgMHg4MDAyYTY0LCAweGFlZTI3MjY0LCAweDEwNDAwMDczLAorMHgwLCAweDhmODMwMTAwLCAweDI3NjIzMDAwLCAweDI0NjQwMDIwLAorMHg4MjEwMmIsIDB4MTQ0MDAwMDIsIDB4NTAyMSwgMHgyNzY0MjgwMCwKKzB4OGY4MjAxMDgsIDB4MTA4MjAwMDQsIDB4MCwgMHg4ZjgyMDEwNCwKKzB4MTQ4MjAwMDYsIDB4MjQwNTAwMDUsIDB4OGVlMjAxYTgsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWE4LCAweDgwMDJhNDYsIDB4OGVlMjAxYTgsIDB4YWM2ODAwMDAsCisweGFjNjkwMDA0LCAweDhlZTI3MjY0LCAweGE0NjcwMDBlLCAweGFjNjUwMDE4LAorMHhhYzYyMDAwOCwgMHg4ZWUyMDRlOCwgMHhhYzY2MDAxMCwgMHhhYzYyMDAxYywKKzB4YWY4NDAxMDAsIDB4OTJlMjA0ZWMsIDB4MTQ0MDAwMzYsIDB4MjQwYTAwMDEsCisweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjIwMjEsCisweDhjODIwMDAwLCAweDE0NDUwMDFmLCAweDAsIDB4OGVlMzRlMjgsCisweDhlZTI0ZTJjLCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUyYywgMHg4ZWU1NGUyOCwKKzB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUyYywKKzB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAyYTMwLAorMHgwLCAweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMDgsCisweDI0NDIwMDIwLCAweGFmODIwMTA4LCAweDhmODIwMTA4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyYTQ2LAorMHgwLCAweDhlZTI0ZTI4LCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLAorMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTI4LCAweDI0NDIwMDAxLAorMHhhZWUyNGUyOCwgMHg4ZWUyNGUyOCwgMHgyMTBjMCwgMHgyNDQyNGUzOCwKKzB4MmUyMjAyMSwgMHgyNDAyMDAwNSwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwKKzB4YWM4MjAwMDQsIDB4MTU0MDAwMGMsIDB4MzBlNWZmZmYsIDB4M2MwNDAwMDEsCisweDI0ODQ1NzQ4LCAweDNjMDUwMDA0LCAweGFmYTkwMDEwLCAweGFmYTAwMDE0LAorMHg4ZWU2MDRlNCwgMHgzNGE1ZjIzNywgMHhjMDAyNDAzLCAweDMwZTdmZmZmLAorMHg4MDAyYTcyLCAweDAsIDB4OGVlMjcyNjQsIDB4NDUxMDIxLAorMHhhZWUyNzI2NCwgMHg4ZWUyNzI2YywgMHg4ZWUzNzI2NCwgMHgzYzA0MDAwMSwKKzB4MzQ4NDM4MDAsIDB4YTJlMDA0ZWQsIDB4NDUxMDIzLCAweGFlZTI3MjZjLAorMHgzNjQxMDIxLCAweDYyMTgyYiwgMHgxNDYwMDAwNCwgMHgzYzAzZmZmZiwKKzB4OGVlMjcyNjQsIDB4NDMxMDIxLCAweGFlZTI3MjY0LCAweDhlZTMwNGU4LAorMHg5NmUyMDQ1OCwgMHgyNDYzMDAwMSwgMHgyNDQyZmZmZiwgMHg2MjE4MjQsCisweGFlZTMwNGU4LCAweDhlZTMwNGU4LCAweDhlZTIwNGUwLCAweDE0NjIwMDA1LAorMHgwLCAweDhmODIwMDYwLCAweDI0MDNmZmY3LCAweDQzMTAyNCwKKzB4YWY4MjAwNjAsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyMCwKKzB4MjdiZGZmZTAsIDB4YWZiZjAwMWMsIDB4YWZiMDAwMTgsIDB4OGY4MjAxMDAsCisweDhlZTM0ZTJjLCAweDhmODIwMTA0LCAweDhmODUwMTA4LCAweDI0MDIwMDQwLAorMHgyNDYzMDAwMSwgMHg1MDYyMDAwMywgMHgxMDIxLCAweDhlZTI0ZTJjLAorMHgyNDQyMDAwMSwgMHhhZWUyNGUyYywgMHg4ZWUyNGUyYywgMHg4ZWUzNGUyYywKKzB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgMHg4ZWUyNGUyOCwKKzB4OGM4NzAwMDQsIDB4MTQ2MjAwMDcsIDB4YTAzMDIxLCAweDhmODIwMTA4LAorMHgyNDQyMDAyMCwgMHhhZjgyMDEwOCwgMHg4ZjgyMDEwOCwgMHg4MDAyYWEyLAorMHhhYzgwMDAwMCwgMHg4ZWUyNGUyYywgMHgyNDAzMDA0MCwgMHgyNDQyMDAwMSwKKzB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyYywgMHgyNDQyMDAwMSwKKzB4MjEwYzAsIDB4MjQ0MjRlMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwNCwKKzB4OGY4MzAxMDgsIDB4MjExNDAsIDB4NjIxODIxLCAweGFmODMwMTA4LAorMHhhYzgwMDAwMCwgMHg4Y2MyMDAxOCwgMHgyNDQzZmZmZSwgMHgyYzYyMDAxMywKKzB4MTA0MDAwYzEsIDB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLAorMHg4YzIyNTc3MCwgMHg0MDAwMDgsIDB4MCwgMHg4ZWUyMDRmMCwKKzB4NDcxMDIxLCAweGFlZTIwNGYwLCAweDhlZTIwNGYwLCAweDhmNDMwMjNjLAorMHg0MzEwMmIsIDB4MTQ0MDAwYmUsIDB4MCwgMHg4ZWUzMDRlNCwKKzB4OGVlMjA0ZjgsIDB4NTA2MjAwYmEsIDB4YTJlMDA0ZjQsIDB4OGY4MzAxMjAsCisweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwKKzB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwKKzB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwKKzB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAyYjEyLAorMHg4ZWUyMDFhNCwgMHg4ZWUyMDRlNCwgMHhhYzYyMDAxYywgMHg4ZWU0MDRiMCwKKzB4OGVlNTA0YjQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsCisweGE0NjIwMDBlLCAweDI0MDIwMDExLCAweGFjNjIwMDE4LCAweGFjNjQwMDAwLAorMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwKKzB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsCisweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsCisweDI0MDIwMDEyLCAweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsCisweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MDMwMDQwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWU1NGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA0MzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwgMHg4MDAyYWZjLAorMHgwLCAweDE0YTAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyYjEyLAorMHgwLCAweDhlZTI0ZTMwLCAweDI0MDMwMDQwLCAweDI0NDIwMDAxLAorMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHgyNDAyMDAxMiwgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwKKzB4YWM4MjAwMDQsIDB4NTYwMDAwMGIsIDB4MjQxMDAwMDEsIDB4OGVlMjA0ZTQsCisweDNjMDQwMDAxLCAweDI0ODQ1NzU0LCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLAorMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLAorMHgzNGE1ZjAwNiwgMHgxNjAwMDAwMywgMHgyNDAyMDAwMSwgMHg4MDAyYjcxLAorMHhhMmUyMDRmNCwgMHg4ZWUyMDE3MCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE3MCwKKzB4OGVlMjAxNzAsIDB4OGVlMjA0ZTQsIDB4YTJlMDA0ZjQsIDB4YWVlMDA0ZjAsCisweGFlZTIwNGY4LCAweDhmNDIwMjNjLCAweDUwNDAwMDQ1LCAweGFlZTA3Mjc0LAorMHg4ZWUyMDE4NCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE4NCwgMHg4ZWUyMDE4NCwKKzB4ODAwMmI3MSwgMHhhZWUwNzI3NCwgMHg4ZWUyMDUwNCwgMHgyNDAzMDA0MCwKKzB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyMDUwNCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjA1MDQsIDB4OGVlMjA1MDQsIDB4OGNjMzAwMTgsCisweDIxMDgwLCAweDU3MTAyMSwgMHg4YzQ0MDUwOCwgMHgyNDAyMDAwMywKKzB4MTQ2MjAwMGYsIDB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI4M2IxLCAweDEwNDAwMDE0LCAweDAsIDB4OGVlMjAxZDAsCisweDhlZTM1MjQwLCAweDQ0MTAyMSwgMHhhZWUyMDFkMCwgMHg4ZWUyMDFkOCwKKzB4NjQxODIxLCAweDMwNjMwMGZmLCAweDgwMDJiNTksIDB4YWVlMzUyNDAsCisweDhlZTIwMWNjLCAweDhlZTMwZTEwLCAweDQ0MTAyMSwgMHhhZWUyMDFjYywKKzB4OGVlMjAxZDgsIDB4NjQxODIxLCAweDMwNjMwMWZmLCAweGFlZTMwZTEwLAorMHg0NDEwMjEsIDB4YWVlMjAxZDgsIDB4OGVlMjAwMDAsIDB4MzQ0MjAwNDAsCisweDgwMDJiNzEsIDB4YWVlMjAwMDAsIDB4OGVlMjAxNGMsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhMDIwODNlMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE0YywKKzB4ODAwMmI3MSwgMHg4ZWUyMDE0YywgMHg5NGM3MDAwZSwgMHg4Y2MyMDAxYywKKzB4M2MwNDAwMDEsIDB4MjQ4NDU3NjAsIDB4YWZhNjAwMTQsIDB4YWZhMjAwMTAsCisweDhjYzYwMDE4LCAweDNjMDUwMDA4LCAweGMwMDI0MDMsIDB4MzRhNTA5MTAsCisweDhmYmYwMDFjLCAweDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsCisweDI3YmRmZjk4LCAweGFmYmYwMDYwLCAweGFmYmUwMDVjLCAweGFmYjYwMDU4LAorMHhhZmI1MDA1NCwgMHhhZmI0MDA1MCwgMHhhZmIzMDA0YywgMHhhZmIyMDA0OCwKKzB4YWZiMTAwNDQsIDB4YWZiMDAwNDAsIDB4OGY4MzAxMDgsIDB4OGY4MjAxMDQsCisweGFmYTAwMDI0LCAweDEwNjIwM2U3LCAweGFmYTAwMDJjLCAweDNjMWUwMDAxLAorMHgzN2RlMzgwMCwgMHgzYzBiZmZmZiwgMHg4ZjkzMDEwOCwgMHg4ZTYyMDAxOCwKKzB4OGY4MzAxMDQsIDB4MjQ0M2ZmZmUsIDB4MmM2MjAwMTQsIDB4MTA0MDAzY2YsCisweDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNTdjMCwKKzB4NDAwMDA4LCAweDAsIDB4OTY2MzAwMGUsIDB4OGVlMjcyNWMsCisweDhlZTQwNGYwLCAweDQzMTAyMSwgMHhhZWUyNzI1YywgMHg4ZTYzMDAxYywKKzB4OTZlMjA0NTgsIDB4MjQ4NDAwMDEsIDB4YWVlNDA0ZjAsIDB4MjQ2MzAwMDEsCisweDI0NDJmZmZmLCAweDYyMTgyNCwgMHhhZWUzMDRlNCwgMHg4ZjQyMDIzYywKKzB4ODIyMDJiLCAweDE0ODAwM2I5LCAweDAsIDB4OGY4MzAxMjAsCisweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwKKzB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwKKzB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwKKzB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAyYmZlLAorMHg4ZWUyMDFhNCwgMHg4ZWUyMDRlNCwgMHhhYzYyMDAxYywgMHg4ZWU0MDRiMCwKKzB4OGVlNTA0YjQsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsCisweGE0NjIwMDBlLCAweDI0MDIwMDExLCAweGFjNjIwMDE4LCAweGFjNjQwMDAwLAorMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwKKzB4OTJlMjRlMjAsIDB4MTQ0MDAwMzcsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsCisweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MzAwMDAsCisweDI0MDIwMDEyLCAweDE0NjIwMDFmLCAweDAsIDB4OGVlMzRlMzAsCisweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDI0MGMwMDQwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA0YzAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAyYmU4LAorMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwgMHg4MDAyYmZlLAorMHgwLCAweDhlZTI0ZTMwLCAweDI0MGMwMDQwLCAweDI0NDIwMDAxLAorMHg1MDRjMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHgyNDAyMDAxMiwgMHgyNDBjMDAwMSwgMHhhYzgyMDAwMCwKKzB4YWM4YzAwMDQsIDB4NTYwMDAwMGQsIDB4MjQxMDAwMDEsIDB4OGVlMjA0ZTQsCisweDNjMDQwMDAxLCAweDI0ODQ1NzU0LCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLAorMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHgzNGE1ZjAwNiwKKzB4YzAwMjQwMywgMHhhZmFiMDAzOCwgMHg4ZmFiMDAzOCwgMHgxMjAwMDMwYSwKKzB4MjQwYzAwMDEsIDB4ODAwMmYxOSwgMHgwLCAweDk2NmMwMDFjLAorMHhhZmFjMDAyYywgMHg5NjYyMDAxZSwgMHgzYzBjODAwMCwgMHhhZmFjMDAyNCwKKzB4YWU2MjAwMWMsIDB4OGU3NTAwMWMsIDB4OGVlMjA0ZmMsIDB4OGVlNDA0ZmMsCisweDE1MTkwMCwgMHg2MjEwMjEsIDB4OGM1MjAwMGMsIDB4OTJlMjdiOTgsCisweDY0MTgyMSwgMHg5NDc2MDAwYSwgMHgxNDQwMDAwMywgMHgzMmMyMDAwMiwKKzB4YWVmMjdiYTQsIDB4YWVmNTdiOWMsIDB4MTA0MDAwNGIsIDB4ODAyMSwKKzB4OTZlMjA0NWEsIDB4MzA0MjAwMDIsIDB4MTA0MDAwNDcsIDB4MCwKKzB4OGU2MzAwMWMsIDB4OGVlMjA0ZmMsIDB4MzIxMDAsIDB4ODIxMDIxLAorMHg4YzQyMDAwYywgMHgzN2UxODIxLCAweDI0NDIwMDIyLCAweDQzMTAyYiwKKzB4MTQ0MDAwMGEsIDB4MjQwNTAwMTQsIDB4OGVlMjA0ZmMsIDB4ODIxMDIxLAorMHg4YzQ0MDAwYywgMHhhZmFiMDAzOCwgMHhjMDAyZjc1LCAweDI0ODQwMDBlLAorMHg4ZmFiMDAzOCwgMHg4MDAyYzUyLCAweDMwNTBmZmZmLCAweDhlZTIwNGZjLAorMHg4MjEwMjEsIDB4OGM0MjAwMGMsIDB4OTQ1MDAwMGUsIDB4OTQ0MzAwMTAsCisweDk0NDQwMDEyLCAweDk0NDUwMDE0LCAweDIwMzgwMjEsIDB4MjA0ODAyMSwKKzB4MjA1ODAyMSwgMHg5NDQzMDAxNiwgMHg5NDQ0MDAxOCwgMHg5NDQ1MDAxYSwKKzB4MjAzODAyMSwgMHgyMDQ4MDIxLCAweDIwNTgwMjEsIDB4OTQ0MzAwMWMsCisweDk0NDQwMDFlLCAweDk0NDIwMDIwLCAweDIwMzgwMjEsIDB4MjA0ODAyMSwKKzB4MjAyODAyMSwgMHgxMDFjMDIsIDB4MzIwMmZmZmYsIDB4NjI4MDIxLAorMHg4ZTYzMDAxYywgMHg4ZWUyMDRmYywgMHgxMDI0MDIsIDB4MzI5MDAsCisweGEyMTAyMSwgMHg4YzQzMDAwYywgMHgzMjAyZmZmZiwgMHg4MjgwMjEsCisweDM3ZTEwMjEsIDB4MjQ2MzAwMTgsIDB4NjIxODJiLCAweDE0NjAwMDA5LAorMHgwLCAweDhlZTIwNGZjLCAweGEyMTAyMSwgMHg4YzQzMDAwYywKKzB4MTAxMDI3LCAweDNjMDFmZmZmLCAweDIzMDgyMSwgMHg4MDAyYzZmLAorMHhhNDIyMDAxOCwgMHg4ZWUyMDRmYywgMHhhMjEwMjEsIDB4OGM0MzAwMGMsCisweDEwMTAyNywgMHhhNDYyMDAxOCwgMHg5NmUyMDQ1YSwgMHg4ODIxLAorMHgzMDQyMDAwOCwgMHgxNDQwMDA2MywgMHhhMDIxLCAweDhlNjMwMDFjLAorMHg4ZWUyMDRmYywgMHgzMzEwMCwgMHhjMjEwMjEsIDB4OGM0MjAwMGMsCisweDM3ZTE4MjEsIDB4MjQ0MjAwMjIsIDB4NDMxMDJiLCAweDE0NDAwMDM1LAorMHgwLCAweDhlZTIwNGZjLCAweGMyMTAyMSwgMHg4YzQyMDAwYywKKzB4MjQ0NzAwMTAsIDB4MzdlMTAyMSwgMHhlMjEwMmIsIDB4NTA0MDAwMDEsCisweGViMzgyMSwgMHg4ZWUyMDRmYywgMHg5NGYxMDAwMCwgMHhjMjEwMjEsCisweDhjNDIwMDBjLCAweDI0NDcwMDE2LCAweDM3ZTEwMjEsIDB4ZTIxMDJiLAorMHgxNDQwMDAwMiwgMHgyNjM0ZmZlYywgMHhlYjM4MjEsIDB4OGVlMjA0ZmMsCisweDkwZTMwMDAxLCAweGMyMTAyMSwgMHg4YzQyMDAwYywgMHgyNDQ3MDAxYSwKKzB4MzdlMTAyMSwgMHhlMjEwMmIsIDB4MTQ0MDAwMDIsIDB4MjgzODgyMSwKKzB4ZWIzODIxLCAweDk0ZTIwMDAwLCAweDI0ZTcwMDAyLCAweDIyMjg4MjEsCisweDM3ZTEwMjEsIDB4ZTIxMDJiLCAweDUwNDAwMDAxLCAweGViMzgyMSwKKzB4OTRlMjAwMDAsIDB4MjRlNzAwMDIsIDB4MjIyODgyMSwgMHgzN2UxMDIxLAorMHhlMjEwMmIsIDB4NTA0MDAwMDEsIDB4ZWIzODIxLCAweDk0ZTIwMDAwLAorMHgyNGU3MDAwMiwgMHgyMjI4ODIxLCAweDM3ZTEwMjEsIDB4ZTIxMDJiLAorMHg1MDQwMDAwMSwgMHhlYjM4MjEsIDB4OTRlMjAwMDAsIDB4ODAwMmNkMCwKKzB4MjIyODgyMSwgMHg4ZWUyMDRmYywgMHhjMjEwMjEsIDB4OGM0MzAwMGMsCisweDhlZTIwNGZjLCAweDk0NzEwMDEwLCAweDhlZTMwNGZjLCAweGMyMTAyMSwKKzB4OGM0NDAwMGMsIDB4YzMxODIxLCAweDhjNjIwMDBjLCAweDI2MzRmZmVjLAorMHg5MDg0MDAxNywgMHg4ZWUzMDRmYywgMHg5NDQyMDAxYSwgMHgyODQ4ODIxLAorMHhjMzE4MjEsIDB4OGM2NTAwMGMsIDB4OGVlMzA0ZmMsIDB4MjIyODgyMSwKKzB4OGVlMjA0ZmMsIDB4YzMxODIxLCAweGMyMTAyMSwgMHg4YzQ0MDAwYywKKzB4OGM2MjAwMGMsIDB4OTRhMzAwMWMsIDB4OTQ4NDAwMWUsIDB4OTQ0MjAwMjAsCisweDIyMzg4MjEsIDB4MjI0ODgyMSwgMHgyMjI4ODIxLCAweDExMWMwMiwKKzB4MzIyMmZmZmYsIDB4NjI4ODIxLCAweDExMWMwMiwgMHgzMjIyZmZmZiwKKzB4NjI4ODIxLCAweDMyYzIwMDAxLCAweDEwNDAwMGIyLCAweDAsCisweDk2ZTIwNDVhLCAweDMwNDIwMDAxLCAweDEwNDAwMGFlLCAweDMyYzIwMDgwLAorMHgxMDQwMDAwOCwgMHgwLCAweDkyZTI3Yjk4LCAweDE0NDAwMDA1LAorMHgwLCAweDI0MGMwMDAxLCAweGEyZWM3Yjk4LCAweGFlZjU3YjljLAorMHhhZWYyN2JhNCwgMHg4ZWUzMDRmYywgMHgxNTExMDAsIDB4NDMxMDIxLAorMHg4YzQ3MDAwYywgMHgzN2UxODIxLCAweDI0ZTIwMDBlLCAweDQzMTAyYiwKKzB4MTQ0MDAwMDgsIDB4ZTAyMDIxLCAweDI0MDUwMDBlLCAweGMwMDJmNzUsCisweGFmYWIwMDM4LCAweDMwNDJmZmZmLCAweDhmYWIwMDM4LCAweDgwMDJkMDksCisweDIwMjgwMjEsIDB4OTRlNjAwMDAsIDB4MjRlNzAwMDIsIDB4OTRlNTAwMDAsCisweDI0ZTcwMDAyLCAweDk0ZTMwMDAwLCAweDI0ZTcwMDAyLCAweDk0ZTIwMDAwLAorMHgyNGU3MDAwMiwgMHg5NGU0MDAwMCwgMHgyNGU3MDAwMiwgMHgyMDY4MDIxLAorMHgyMDU4MDIxLCAweDIwMzgwMjEsIDB4MjAyODAyMSwgMHg5NGUyMDAwMCwKKzB4OTRlMzAwMDIsIDB4MjA0ODAyMSwgMHgyMDI4MDIxLCAweDIwMzgwMjEsCisweDEwMWMwMiwgMHgzMjAyZmZmZiwgMHg2MjgwMjEsIDB4MTAxYzAyLAorMHgzMjAyZmZmZiwgMHg4ZWU0N2I5YywgMHg2MjgwMjEsIDB4MTQ5NTAwMDQsCisweDMyMDVmZmZmLCAweDk2NjIwMDE2LCAweDgwMDJkMTcsIDB4NTEyMDIxLAorMHg5NjYyMDAxNiwgMHg1NDIwMjEsIDB4NDE0MDIsIDB4MzA4M2ZmZmYsCisweDQzMjAyMSwgMHg4NTIwMjMsIDB4NDE0MDIsIDB4ODIyMDIxLAorMHgzMDg0ZmZmZiwgMHg1MDgwMDAwMSwgMHgzNDA0ZmZmZiwgMHg4ZWUyN2JhNCwKKzB4MjQ0MzAwMTcsIDB4MzdlMTAyMSwgMHg2MjEwMmIsIDB4NTA0MDAwMDEsCisweDZiMTgyMSwgMHg5MDYzMDAwMCwgMHgyNDAyMDAxMSwgMHgxNDYyMDAzMSwKKzB4MjQwMjAwMDYsIDB4OGVlMjdiYTQsIDB4MzdlMTgyMSwgMHgyNDQyMDAyOCwKKzB4NDMxMDJiLCAweDE0NDAwMDE4LCAweDAsIDB4OGVlMjdiOWMsCisweDEyYTIwMDBhLCAweDMyYzIwMTAwLCAweDhlZTI3YmE0LCAweDNjMDFmZmZmLAorMHgyMjA4MjEsIDB4OTQyMjAwMjgsIDB4ODIyMDIxLCAweDQxYzAyLAorMHgzMDgyZmZmZiwgMHg2MjIwMjEsIDB4MzJjMjAxMDAsIDB4MTQ0MDAwMDQsCisweDQxMDI3LCAweDkyZTI3Yjk4LCAweDE0NDAwMDAyLCAweDQxMDI3LAorMHgzMDQ0ZmZmZiwgMHg4ZWUyN2JhNCwgMHgzYzAxZmZmZiwgMHgyMjA4MjEsCisweDgwMDJkOGEsIDB4YTQyNDAwMjgsIDB4OGVlMjdiOWMsIDB4MTJhMjAwMDgsCisweDMyYzIwMTAwLCAweDhlZTI3YmE0LCAweDk0NDIwMDI4LCAweDgyMjAyMSwKKzB4NDFjMDIsIDB4MzA4MmZmZmYsIDB4NjIyMDIxLCAweDMyYzIwMTAwLAorMHgxNDQwMDAwNCwgMHg0MTAyNywgMHg5MmUyN2I5OCwgMHgxNDQwMDAwMiwKKzB4NDEwMjcsIDB4MzA0NGZmZmYsIDB4OGVlMjdiYTQsIDB4ODAwMmQ4YSwKKzB4YTQ0NDAwMjgsIDB4MTQ2MjAwMmYsIDB4MzdlMTgyMSwgMHg4ZWUyN2JhNCwKKzB4MjQ0MjAwMzIsIDB4NDMxMDJiLCAweDE0NDAwMDE4LCAweDAsCisweDhlZTI3YjljLCAweDEyYTIwMDBhLCAweDMyYzIwMTAwLCAweDhlZTI3YmE0LAorMHgzYzAxZmZmZiwgMHgyMjA4MjEsIDB4OTQyMjAwMzIsIDB4ODIyMDIxLAorMHg0MWMwMiwgMHgzMDgyZmZmZiwgMHg2MjIwMjEsIDB4MzJjMjAxMDAsCisweDE0NDAwMDA0LCAweDQxMDI3LCAweDkyZTI3Yjk4LCAweDE0NDAwMDAyLAorMHg0MTAyNywgMHgzMDQ0ZmZmZiwgMHg4ZWUyN2JhNCwgMHgzYzAxZmZmZiwKKzB4MjIwODIxLCAweDgwMDJkOGEsIDB4YTQyNDAwMzIsIDB4OGVlMjdiOWMsCisweDEyYTIwMDA4LCAweDMyYzIwMTAwLCAweDhlZTI3YmE0LCAweDk0NDIwMDMyLAorMHg4MjIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsIDB4NjIyMDIxLAorMHgzMmMyMDEwMCwgMHgxNDQwMDAwNCwgMHg0MTAyNywgMHg5MmUyN2I5OCwKKzB4MTQ0MDAwMDIsIDB4NDEwMjcsIDB4MzA0NGZmZmYsIDB4OGVlMjdiYTQsCisweGE0NDQwMDMyLCAweDhmYWMwMDI0LCAweDExODAwMDJjLCAweDM3ZTE4MjEsCisweDhlNDIwMDAwLCAweGFlNDJmZmZjLCAweDI2NDIwMDBhLCAweDQzMTAyYiwKKzB4MTQ0MDAwMWIsIDB4MzQwMzgxMDAsIDB4MjY0MzAwMDQsIDB4MzdlMTAyMSwKKzB4NjIxMDJiLCAweDE0NDAwMDAzLCAweDYwMjAyMSwgMHg2YjE4MjEsCisweDYwMjAyMSwgMHg4YzYyMDAwMCwgMHgyNDYzMDAwNCwgMHhhZTQyMDAwMCwKKzB4MzdlMTAyMSwgMHg2MjEwMmIsIDB4NTA0MDAwMDEsIDB4NmIxODIxLAorMHg4YzYyMDAwMCwgMHhhYzgyMDAwMCwgMHgzNDAyODEwMCwgMHhhNDYyMDAwMCwKKzB4MjQ2MzAwMDIsIDB4MzdlMTAyMSwgMHg2MjEwMmIsIDB4NTA0MDAwMDEsCisweDZiMTgyMSwgMHg5N2FjMDAyZSwgMHg4MDAyZGI0LCAweGE0NmMwMDAwLAorMHg4ZTQyMDAwNCwgMHg4ZTQ0MDAwOCwgMHhhNjQzMDAwOCwgMHg5N2FjMDAyZSwKKzB4YTY0YzAwMGEsIDB4YWU0MjAwMDAsIDB4YWU0NDAwMDQsIDB4OTY2MjAwMGUsCisweDI2NTJmZmZjLCAweDI0NDIwMDA0LCAweGE2NjIwMDBlLCAweDk2NjIwMDBlLAorMHg4ZWUzNzI1YywgMHg2MjE4MjEsIDB4YWVlMzcyNWMsIDB4YWZiMjAwMTgsCisweDhlZTM3MjVjLCAweGFmYTMwMDFjLCAweDhlZTI3MjVjLCAweDJjNDIwMDNjLAorMHgxMDQwMDAwNCwgMHgyNDYyMDAwMSwgMHgyNDAzZmZmZSwgMHg0MzEwMjQsCisweGFmYTIwMDFjLCAweDMyYzIwMDgwLCAweDEwNDAwMDBjLCAweDMyYzIwMTAwLAorMHg4ZWUyN2JhOCwgMHgyNDQzMDAwMSwgMHgyMTBjMCwgMHg1NzEwMjEsCisweGFlZTM3YmE4LCAweDhmYTMwMDE4LCAweDhmYTQwMDFjLCAweGFjNDM3YmFjLAorMHhhYzQ0N2JiMCwgMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAweDEwNDAwMDcyLAorMHgwLCAweDhlZTI3YmE4LCAweDI0NDMwMDAxLCAweDIxMGMwLAorMHg1NzEwMjEsIDB4YWVlMzdiYTgsIDB4OGZhMzAwMTgsIDB4OGZhNDAwMWMsCisweGFjNDM3YmFjLCAweGFjNDQ3YmIwLCAweDhlZTI3YmE4LCAweDEwNDAwMDYzLAorMHg0ODIxLCAweDUwMjEsIDB4OGY4MjAwZjAsIDB4MjQ0ODAwMDgsCisweDI3NjIxODAwLCAweDEwMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2ODEwMDAsCisweDhmODIwMGY0LCAweDE1MDIwMDA3LCAweDAsIDB4OGVlMjAxYjQsCisweDgwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYjQsIDB4ODAwMmRmYSwKKzB4OGVlMjAxYjQsIDB4OGY4MzAwZjAsIDB4MjQxMDAwMDEsIDB4MTU3MTAyMSwKKzB4OGM0NDdiYWMsIDB4OGM0NTdiYjAsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsCisweGFmODgwMGYwLCAweDE2MDAwMDA2LCAweDJlYTEwMjEsIDB4OGVlMjAwODgsCisweDI0NDIwMDAxLCAweGFlZTIwMDg4LCAweDgwMDJlM2YsIDB4OGVlMjAwODgsCisweDhjNDI3YmIwLCAweDhlZTQwMGUwLCAweDhlZTUwMGU0LCAweDhlZTY3YjljLAorMHg0MDE4MjEsIDB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzODJiLAorMHg4MjIwMjEsIDB4ODcyMDIxLCAweDhlZTIwNGZjLCAweGM5MzAyMSwKKzB4NjMxMDAsIDB4YWVlNDAwZTAsIDB4YWVlNTAwZTQsIDB4YzIzMDIxLAorMHg5NGMyMDAwYSwgMHgyNDBjMDAwMiwgMHgyMTE0MiwgMHgzMDQzMDAwMywKKzB4MTA2YzAwMTYsIDB4Mjg2MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwYzAwMDEsCisweDEwNmMwMDA4LCAweDAsIDB4ODAwMmUzZiwgMHgwLAorMHgyNDBjMDAwMywgMHgxMDZjMDAxNywgMHgwLCAweDgwMDJlM2YsCisweDAsIDB4OGVlMjAwZTgsIDB4OGVlMzAwZWMsIDB4MjQ2MzAwMDEsCisweDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZWUyMDBlOCwgMHhhZWUzMDBlYywKKzB4OGVlMjAwZTgsIDB4ODAwMmUzZiwgMHg4ZWUzMDBlYywgMHg4ZWUyMDBmMCwKKzB4OGVlMzAwZjQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLAorMHhhZWUyMDBmMCwgMHhhZWUzMDBmNCwgMHg4ZWUyMDBmMCwgMHg4MDAyZTNmLAorMHg4ZWUzMDBmNCwgMHg4ZWUyMDBmOCwgMHg4ZWUzMDBmYywgMHgyNDYzMDAwMSwKKzB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGY4LCAweGFlZTMwMGZjLAorMHg4ZWUyMDBmOCwgMHg4ZWUzMDBmYywgMHg4ZWUyN2JhOCwgMHgyNTI5MDAwMSwKKzB4MTIyMTAyYiwgMHgxNDQwZmZhMCwgMHgyNTRhMDAwOCwgMHhhMmUwN2I5OCwKKzB4ODAwMmU5ZiwgMHhhZWUwN2JhOCwgMHg4ZjgyMDBmMCwgMHgyNDQ3MDAwOCwKKzB4Mjc2MjE4MDAsIDB4ZTIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjcxMDAwLAorMHg4ZjgyMDBmNCwgMHgxNGUyMDAwNywgMHgwLCAweDhlZTIwMWI0LAorMHg4MDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWI0LCAweDgwMDJlNWQsCisweDhlZTIwMWI0LCAweDhmODIwMGYwLCAweDI0MTAwMDAxLCAweDhmYTMwMDE4LAorMHg4ZmE0MDAxYywgMHhhYzQzMDAwMCwgMHhhYzQ0MDAwNCwgMHhhZjg3MDBmMCwKKzB4MTYwMDAwMDcsIDB4MCwgMHg4ZWUyMDA4OCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAwODgsIDB4OGVlMjAwODgsIDB4ODAwMmVhMCwgMHhhZWUwNzI1YywKKzB4OGVlMjcyNWMsIDB4OGVlNDAwZTAsIDB4OGVlNTAwZTQsIDB4MjQwYzAwMDIsCisweDQwMTgyMSwgMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsCisweDgyMjAyMSwgMHg4NjIwMjEsIDB4MTYxMTQyLCAweDMwNDMwMDAzLAorMHhhZWU0MDBlMCwgMHhhZWU1MDBlNCwgMHgxMDZjMDAxNywgMHgyYzYyMDAwMywKKzB4MTA0MDAwMDUsIDB4MjQwYzAwMDEsIDB4MTA2YzAwMDgsIDB4MCwKKzB4ODAwMmVhMCwgMHhhZWUwNzI1YywgMHgyNDBjMDAwMywgMHgxMDZjMDAxOSwKKzB4MCwgMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAweDhlZTIwMGU4LAorMHg4ZWUzMDBlYywgMHgyNDYzMDAwMSwgMHgyYzY0MDAwMSwgMHg0NDEwMjEsCisweGFlZTIwMGU4LCAweGFlZTMwMGVjLCAweDhlZTIwMGU4LCAweDhlZTMwMGVjLAorMHg4MDAyZWEwLCAweGFlZTA3MjVjLCAweDhlZTIwMGYwLCAweDhlZTMwMGY0LAorMHgyNDYzMDAwMSwgMHgyYzY0MDAwMSwgMHg0NDEwMjEsIDB4YWVlMjAwZjAsCisweGFlZTMwMGY0LCAweDhlZTIwMGYwLCAweDhlZTMwMGY0LCAweDgwMDJlYTAsCisweGFlZTA3MjVjLCAweDhlZTIwMGY4LCAweDhlZTMwMGZjLCAweDI0NjMwMDAxLAorMHgyYzY0MDAwMSwgMHg0NDEwMjEsIDB4YWVlMjAwZjgsIDB4YWVlMzAwZmMsCisweDhlZTIwMGY4LCAweDhlZTMwMGZjLCAweGFlZTA3MjVjLCAweDhlNjIwMDFjLAorMHg5NmUzMDQ1OCwgMHg4ZWU0MDRmMCwgMHgyNDQyMDAwMSwgMHgyNDYzZmZmZiwKKzB4NDMxMDI0LCAweDI0ODQwMDAxLCAweGFlZTIwNGU0LCAweGFlZTQwNGYwLAorMHg4ZjQyMDIzYywgMHg4MjIwMmIsIDB4MTQ4MDAwYjAsIDB4MCwKKzB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLAorMHg4ZWUyMDFhNCwgMHg4MDIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDAyZjA3LCAweDhlZTIwMWE0LCAweDhlZTIwNGU0LCAweGFjNjIwMDFjLAorMHg4ZWU0MDRiMCwgMHg4ZWU1MDRiNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwKKzB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsIDB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsCisweGFjNjQwMDAwLCAweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLAorMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwgMHgxNDQwMDAzNywgMHgyNDEwMDAwMSwKKzB4OGVlMjRlMzAsIDB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwKKzB4OGM4MzAwMDAsIDB4MjQwMjAwMTIsIDB4MTQ2MjAwMWYsIDB4MCwKKzB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsIDB4MjQwYzAwNDAsCisweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LAorMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDRjMDAwNywgMHgwLAorMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLAorMHg4MDAyZWYxLCAweDAsIDB4MTQ2MDAwMDUsIDB4MCwKKzB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsCisweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEzLCAweGFjODAwMDAwLAorMHg4MDAyZjA3LCAweDAsIDB4OGVlMjRlMzAsIDB4MjQwYzAwNDAsCisweDI0NDIwMDAxLCAweDUwNGMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDEyLCAweDI0MGMwMDAxLAorMHhhYzgyMDAwMCwgMHhhYzhjMDAwNCwgMHg1NjAwMDAwZCwgMHgyNDEwMDAwMSwKKzB4OGVlMjA0ZTQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU3NTQsIDB4YWZhMDAwMTQsCisweGFmYTIwMDEwLCAweDhlZTYwNjA4LCAweDhmNDcwMjI4LCAweDNjMDUwMDA5LAorMHgzNGE1ZjAwNiwgMHhjMDAyNDAzLCAweGFmYWIwMDM4LCAweDhmYWIwMDM4LAorMHgxNjAwMDAwMywgMHgyNDBjMDAwMSwgMHg4MDAyZjVjLCAweGEyZWMwNGY0LAorMHg4ZWUyMDE3MCwgMHgyNDQyMDAwMSwgMHhhZWUyMDE3MCwgMHg4ZWUyMDE3MCwKKzB4OGVlMjA0ZTQsIDB4YTJlMDA0ZjQsIDB4YWVlMDA0ZjAsIDB4YWVlMDcyNzQsCisweGFlZTIwNGY4LCAweDhmNDIwMjNjLCAweDEwNDAwMDM4LCAweDAsCisweDhlZTIwMTg0LCAweDI0NDIwMDAxLCAweGFlZTIwMTg0LCAweDgwMDJmNWMsCisweDhlZTIwMTg0LCAweDhlZTIwNTA0LCAweDI0MGMwMDQwLCAweDI0NDIwMDAxLAorMHg1MDRjMDAwMywgMHgxMDIxLCAweDhlZTIwNTA0LCAweDI0NDIwMDAxLAorMHhhZWUyMDUwNCwgMHg4ZWUyMDUwNCwgMHg4ZTYzMDAxOCwgMHgyNDBjMDAwMywKKzB4MjEwODAsIDB4NTcxMDIxLCAweDE0NmMwMDBmLCAweDhjNDQwNTA4LAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjgzYjEsIDB4MTA0MDAwMTQsCisweDAsIDB4OGVlMjAxZDAsIDB4OGVlMzUyNDAsIDB4NDQxMDIxLAorMHhhZWUyMDFkMCwgMHg4ZWUyMDFkOCwgMHg2NDE4MjEsIDB4MzA2MzAwZmYsCisweDgwMDJmNGYsIDB4YWVlMzUyNDAsIDB4OGVlMjAxY2MsIDB4OGVlMzBlMTAsCisweDQ0MTAyMSwgMHhhZWUyMDFjYywgMHg4ZWUyMDFkOCwgMHg2NDE4MjEsCisweDMwNjMwMWZmLCAweGFlZTMwZTEwLCAweDQ0MTAyMSwgMHhhZWUyMDFkOCwKKzB4OGVlMjAwMDAsIDB4MzQ0MjAwNDAsIDB4ODAwMmY1YywgMHhhZWUyMDAwMCwKKzB4OGVlMjAxNGMsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2UwLAorMHgyNDQyMDAwMSwgMHhhZWUyMDE0YywgMHg4ZWUyMDE0YywgMHg4ZjgyMDEwOCwKKzB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIDB4OGY4MjAxMDgsCisweDI3NjMzMDAwLCAweDQzMTAyYiwgMHgxNDQwMDAwMiwgMHgyNzYyMjgwMCwKKzB4YWY4MjAxMDgsIDB4OGY4MzAxMDgsIDB4OGY4MjAxMDQsIDB4MTQ2MmZjMWUsCisweDAsIDB4OGZiZjAwNjAsIDB4OGZiZTAwNWMsIDB4OGZiNjAwNTgsCisweDhmYjUwMDU0LCAweDhmYjQwMDUwLCAweDhmYjMwMDRjLCAweDhmYjIwMDQ4LAorMHg4ZmIxMDA0NCwgMHg4ZmIwMDA0MCwgMHgzZTAwMDA4LCAweDI3YmQwMDY4LAorMHg1Mjg0MywgMHgxMGEwMDAwZCwgMHgzMDIxLCAweDNjMDMwMDAxLAorMHgzNDYzMzgwMCwgMHgzYzA3ZmZmZiwgMHgzNjMxMDIxLCAweDgyMTAyYiwKKzB4NTA0MDAwMDEsIDB4ODcyMDIxLCAweDk0ODIwMDAwLCAweDI0ODQwMDAyLAorMHgyNGE1ZmZmZiwgMHgxNGEwZmZmOCwgMHhjMjMwMjEsIDB4NjFjMDIsCisweDMwYzJmZmZmLCAweDYyMzAyMSwgMHg2MWMwMiwgMHgzMGMyZmZmZiwKKzB4NjIzMDIxLCAweDNlMDAwMDgsIDB4MzBjMmZmZmYsIDB4MjdiZGZmODgsCisweDI0MGYwMDAxLCAweGFmYmYwMDcwLCAweGFmYmUwMDZjLCAweGFmYjYwMDY4LAorMHhhZmI1MDA2NCwgMHhhZmI0MDA2MCwgMHhhZmIzMDA1YywgMHhhZmIyMDA1OCwKKzB4YWZiMTAwNTQsIDB4YWZiMDAwNTAsIDB4YTNhMDAwMjcsIDB4YWZhZjAwMmMsCisweDhlZTIwNGQ0LCAweDgwMjEsIDB4MzA0MjAwMDEsIDB4MTQ0MDAwMmEsCisweGEzYTAwMDM3LCAweDhmODcwMGUwLCAweDhmODgwMGM0LCAweDhmODIwMGU4LAorMHhlMjIwMjMsIDB4MmM4MjEwMDAsIDB4NTA0MDAwMDEsIDB4MjQ4NDEwMDAsCisweDQyMGMyLCAweDgwMTgyMSwgMHg4ZWU0MDBjOCwgMHg4ZWU1MDBjYywKKzB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwKKzB4ODYyMDIxLCAweGFlZTQwMGM4LCAweGFlZTUwMGNjLCAweDhmODMwMGM4LAorMHgzYzAyMDAwYSwgMHgzNDQyZWZmZiwgMHgxMDMyMDIzLCAweDQ0MTAyYiwKKzB4MTA0MDAwMDMsIDB4M2MwMjAwMGEsIDB4MzQ0MmYwMDAsIDB4ODIyMDIxLAorMHg4MDE4MjEsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4MTAyMSwKKzB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLAorMHhhZWU0MDBjMCwgMHhhZWU1MDBjNCwgMHhhZjg4MDBjOCwgMHhhZjg3MDBlNCwKKzB4ODAwMzRjYywgMHhhZjg3MDBlOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI4M2MwLCAweDEwNDAwMDBiLCAweDAsIDB4M2MxNDAwMDEsCisweDI5N2EwMjEsIDB4OGU5NDgzYzQsIDB4M2MxMzAwMDEsIDB4Mjc3OTgyMSwKKzB4OGU3MzgzYzgsIDB4M2MxMjAwMDEsIDB4MjU3OTAyMSwgMHg4MDAzMTkzLAorMHg4ZTUyODNjYywgMHg4ZjgzMDBlMCwgMHg4ZjgyMDBlNCwgMHgxMDQzMDAwNywKKzB4ODgyMSwgMHg4ZjgyMDBlNCwgMHgyNDExMDAwMSwgMHg4YzQzMDAwMCwKKzB4OGM0NDAwMDQsIDB4YWZhMzAwMTgsIDB4YWZhNDAwMWMsIDB4MTYyMDAwMGUsCisweDNjMDJmZmZmLCAweDhmODIwMGM0LCAweGFmYTIwMDEwLCAweDhmODIwMGM4LAorMHgzYzA0MDAwMSwgMHgyNDg0NTg3MCwgMHhhZmEyMDAxNCwgMHg4Zjg2MDBlMCwKKzB4OGY4NzAwZTQsIDB4M2MwNTAwMDYsIDB4YzAwMjQwMywgMHgzNGE1ZjAwMCwKKzB4ODAwMzRjYywgMHgwLCAweDhmYTMwMDFjLCAweDhmYjIwMDE4LAorMHgzMDc0ZmZmZiwgMHgyNjk0ZmZmYywgMHg2MjEwMjQsIDB4MTA0MDAwNTgsCisweDI0MDk4MjEsIDB4M2MwMjAwODAsIDB4NjIxMDI0LCAweDEwNDAwMDBhLAorMHgzYzA0MDA0MCwgMHg4ZWUyMDA3YywgMHgyNDQyMDAwMSwgMHhhZWUyMDA3YywKKzB4OGVlMjAwN2MsIDB4OGVlMjAxZmMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZmMsCisweDgwMDM0YzYsIDB4OGVlMjAxZmMsIDB4M2MwNjAwMDQsIDB4M2MwYjAwMDEsCisweDNjMGEwMDAyLCAweDNjMDUwMDEwLCAweDNjMDkwMDA4LCAweDhlZTIwMDgwLAorMHgzYzA4MDAyMCwgMHgzNDA3ODAwMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDA4MCwKKzB4OGVlMjAwODAsIDB4OGZhMjAwMWMsIDB4NDQxODI0LCAweDEwNjYwMDIxLAorMHhjMzEwMmIsIDB4MTQ0MDAwMDcsIDB4MCwgMHgxMDZiMDAxMSwKKzB4MCwgMHgxMDZhMDAxNSwgMHgwLCAweDgwMDMwNDksCisweDQyMDQyLCAweDEwNjUwMDIzLCAweGEzMTAyYiwgMHgxNDQwMDAwNSwKKzB4MCwgMHgxMDY5MDAxOSwgMHgwLCAweDgwMDMwNDksCisweDQyMDQyLCAweDEwNjgwMDIxLCAweDAsIDB4ODAwMzA0OSwKKzB4NDIwNDIsIDB4OGVlMjAwMzQsIDB4MjQ0MjAwMDEsIDB4YWVlMjAwMzQsCisweDhlZTIwMDM0LCAweDgwMDMwNDksIDB4NDIwNDIsIDB4OGVlMjAxZWMsCisweDI0NDIwMDAxLCAweGFlZTIwMWVjLCAweDhlZTIwMWVjLCAweDgwMDMwNDksCisweDQyMDQyLCAweDhlZTIwMWYwLCAweDI0NDIwMDAxLCAweGFlZTIwMWYwLAorMHg4ZWUyMDFmMCwgMHg4MDAzMDQ5LCAweDQyMDQyLCAweDhlZTIwMWY0LAorMHgyNDQyMDAwMSwgMHhhZWUyMDFmNCwgMHg4ZWUyMDFmNCwgMHg4MDAzMDQ5LAorMHg0MjA0MiwgMHg4ZWUyMDAzMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDAzMCwKKzB4OGVlMjAwMzAsIDB4ODAwMzA0OSwgMHg0MjA0MiwgMHg4ZWUyMDFmOCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxZjgsIDB4OGVlMjAxZjgsIDB4NDIwNDIsCisweDEwODcwNDdjLCAweDAsIDB4ODAwMzAwZSwgMHgwLAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjgzYjIsIDB4MTQ0MDAwODQsCisweDI0MDIwMDAxLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgMHg5MDYzODNiMywKKzB4MTQ2MjAwN2YsIDB4M2MwMjAxMDAsIDB4OGU0MzAwMDAsIDB4NjIxMDI0LAorMHgxMDQwMDA2ZiwgMHgyNDAyZmZmZiwgMHgxNDYyMDAwNSwgMHgyNDEwMDAwMSwKKzB4OTY0MzAwMDQsIDB4MzQwMmZmZmYsIDB4MTA2MjAwNzUsIDB4MCwKKzB4OTJlMjA0ZDgsIDB4MTQ0MDAwNzIsIDB4MCwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDhjNDI4M2I0LCAweDI4NDIwMDA1LCAweDEwNDAwMDIwLAorMHgzODIxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwKKzB4MTg0MDAwMTYsIDB4MjgyMSwgMHg5NjY2MDAwMCwgMHg1MjBjMCwKKzB4OTcxMDIxLCAweDk0NDI3NzdlLCAweDE0NDYwMDA5LCAweDk3MTAyMSwKKzB4OTQ0Mzc3ODAsIDB4OTY2MjAwMDIsIDB4MTQ2MjAwMDUsIDB4OTcxMDIxLAorMHg5NDQzNzc4MiwgMHg5NjYyMDAwNCwgMHg1MDYyMDAwOCwgMHgyNDA3MDAwMSwKKzB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LCAweDI0YTUwMDAxLAorMHhhMjEwMmEsIDB4NTQ0MGZmZWUsIDB4NTIwYzAsIDB4MzBlMjAwZmYsCisweDEwNDAwNDQwLCAweDAsIDB4ODAwMzBkNSwgMHgwLAorMHgyNDAyMDIxLCAweGMwMDIyZmUsIDB4MjQwNTAwMDYsIDB4MzA0NDAwMWYsCisweDQyOGMwLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjQwMDAsCisweDE0NDAwNDM0LCAweGI3MTAyMSwgMHg5NDQzNzI3ZSwgMHg5NjYyMDAwMCwKKzB4MTQ2MjAwMGIsIDB4NDE4YzAsIDB4YjcxMDIxLCAweDk0NDM3MjgwLAorMHg5NjYyMDAwMiwgMHgxNDYyMDAwNiwgMHg0MThjMCwgMHhiNzEwMjEsCisweDk0NDM3MjgyLCAweDk2NjIwMDA0LCAweDEwNjIwMDM1LCAweDQxOGMwLAorMHgyZTMxMDIxLCAweDk0NDI3MjdjLCAweDMwNDI4MDAwLCAweDE0NDAwNDIxLAorMHgyZTMxMDIxLCAweDk0NGI3MjdjLCAweDk2NjcwMDAwLCAweGIyOGMwLAorMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4ODAwMzBiNywgMHgzMDIxLAorMHg0MjBjMCwgMHgyZTQxMDIxLCAweDk0NDM3MzdjLCAweDJlNDEwMjEsCisweDk0NGI3MzdjLCAweDMwNjM4MDAwLCAweDE0NjAwMDEwLCAweGIyOGMwLAorMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4MTQ0N2ZmZjUsIDB4MTYwMjAyMSwKKzB4YjcxMDIxLCAweDk0NDM3MzgwLCAweDk2NjIwMDAyLCAweDU0NjJmZmYxLAorMHg0MjBjMCwgMHhiNzEwMjEsIDB4OTQ0MzczODIsIDB4OTY2MjAwMDQsCisweDU0NjJmZmVjLCAweDQyMGMwLCAweDI0MDYwMDAxLCAweDMwYzIwMGZmLAorMHgxMDQwMDQwMCwgMHgwLCAweDgwMDMwZDUsIDB4MCwKKzB4OTc0MzAyMDIsIDB4OTY0MjAwMDAsIDB4MTQ2MjAzZmEsIDB4MCwKKzB4OTc0MzAyMDQsIDB4OTY0MjAwMDIsIDB4MTQ2MjAzZjYsIDB4MCwKKzB4OTc0MzAyMDYsIDB4OTY0MjAwMDQsIDB4MTQ2MjAzZjIsIDB4MCwKKzB4OTI0MjAwMDAsIDB4M2EwMzAwMDEsIDB4MzA0MjAwMDEsIDB4NDMxMDI0LAorMHgxMDQwMDA3NCwgMHgyNDAyZmZmZiwgMHg4ZTYzMDAwMCwgMHgxNDYyMDAwNCwKKzB4MzQwMmZmZmYsIDB4OTY2MzAwMDQsIDB4MTA2MjAwNmYsIDB4MjQwZjAwMDIsCisweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMiwgMHgxNDQwMDA2YSwKKzB4MjQwZjAwMDMsIDB4OTJlMjA0ZDgsIDB4NTQ0MDAwNjgsIDB4YWZhZjAwMmMsCisweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgMHgyODQyMDAwNSwKKzB4MTA0MDAwMjAsIDB4MzgyMSwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDhjNDI4M2I0LCAweDE4NDAwMDE2LCAweDI4MjEsIDB4OTY2NjAwMDAsCisweDUyMGMwLCAweDk3MTAyMSwgMHg5NDQyNzc3ZSwgMHgxNDQ2MDAwOSwKKzB4OTcxMDIxLCAweDk0NDM3NzgwLCAweDk2NjIwMDAyLCAweDE0NjIwMDA1LAorMHg5NzEwMjEsIDB4OTQ0Mzc3ODIsIDB4OTY2MjAwMDQsIDB4NTA2MjAwMDgsCisweDI0MDcwMDAxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwKKzB4MjRhNTAwMDEsIDB4YTIxMDJhLCAweDU0NDBmZmVlLCAweDUyMGMwLAorMHgzMGUyMDBmZiwgMHgxNDQwMDA0NCwgMHgyNDBmMDAwMywgMHg4MDAzNGM2LAorMHgwLCAweDI0MDIwMjEsIDB4YzAwMjJmZSwgMHgyNDA1MDAwNiwKKzB4MzA0NDAwMWYsIDB4NDI4YzAsIDB4MmU1MTAyMSwgMHg5NDQyNzI3YywKKzB4MzA0MjQwMDAsIDB4MTQ0MDAzYWYsIDB4YjcxMDIxLCAweDk0NDM3MjdlLAorMHg5NjYyMDAwMCwgMHgxNDYyMDAwYiwgMHg0MThjMCwgMHhiNzEwMjEsCisweDk0NDM3MjgwLCAweDk2NjIwMDAyLCAweDE0NjIwMDA2LCAweDQxOGMwLAorMHhiNzEwMjEsIDB4OTQ0MzcyODIsIDB4OTY2MjAwMDQsIDB4MTA2MjAwMjcsCisweDQxOGMwLCAweDJlMzEwMjEsIDB4OTQ0MjcyN2MsIDB4MzA0MjgwMDAsCisweDE0NDAwMzljLCAweDJlMzEwMjEsIDB4OTQ0YjcyN2MsIDB4OTY2NzAwMDAsCisweGIyOGMwLCAweGI3MTAyMSwgMHg5NDQyNzM3ZSwgMHg4MDAzMTNjLAorMHgzMDIxLCAweDQyMGMwLCAweDJlNDEwMjEsIDB4OTQ0MzczN2MsCisweDJlNDEwMjEsIDB4OTQ0YjczN2MsIDB4MzA2MzgwMDAsIDB4MTQ2MDAwMTAsCisweGIyOGMwLCAweGI3MTAyMSwgMHg5NDQyNzM3ZSwgMHgxNDQ3ZmZmNSwKKzB4MTYwMjAyMSwgMHhiNzEwMjEsIDB4OTQ0MzczODAsIDB4OTY2MjAwMDIsCisweDU0NjJmZmYxLCAweDQyMGMwLCAweGI3MTAyMSwgMHg5NDQzNzM4MiwKKzB4OTY2MjAwMDQsIDB4NTQ2MmZmZWMsIDB4NDIwYzAsIDB4MjQwNjAwMDEsCisweDMwYzIwMGZmLCAweDEwNDAwMzdiLCAweDAsIDB4ODAwMzE0ZiwKKzB4MjQwZjAwMDMsIDB4MjQwZjAwMDEsIDB4YWZhZjAwMmMsIDB4OGY0MjAyNjAsCisweDU0MTAyYiwgMHgxMDQwMDAzYSwgMHgwLCAweDhmODMwMGU0LAorMHg4ZjgyMDBlMCwgMHgxMDYyMDAwMywgMHgyNDYzMDAwOCwgMHhhZjgzMDBlNCwKKzB4YWY4MzAwZTgsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4MjgwMTgyMSwKKzB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwKKzB4ODYyMDIxLCAweGFlZTQwMGMwLCAweGFlZTUwMGM0LCAweDhlZTIwMDU4LAorMHgyNDQyMDAwMSwgMHhhZWUyMDA1OCwgMHg4ZWUyMDA1OCwgMHg4ZWUyMDA3YywKKzB4MjQ0MjAwMDEsIDB4YWVlMjAwN2MsIDB4OGVlMjAwN2MsIDB4OGY4MjAwZTAsCisweGFmYTIwMDEwLCAweDhmODIwMGU0LCAweDNjMDQwMDAxLCAweDI0ODQ1ODc4LAorMHhhZmEyMDAxNCwgMHg4ZmE2MDAxOCwgMHg4ZmE3MDAxYywgMHgzYzA1MDAwNiwKKzB4YzAwMjQwMywgMHgzNGE1ZjAwMywgMHg4MDAzNGNjLCAweDAsCisweDhlZTI1MjQwLCAweGFmYTIwMDEwLCAweDhlZTI1MjQ0LCAweDNjMDQwMDAxLAorMHgyNDg0NTg4NCwgMHhhZmEyMDAxNCwgMHg4ZWU2MGUxMCwgMHg4ZWU3MGUxOCwKKzB4M2MwNTAwMDYsIDB4YzAwMjQwMywgMHgzNGE1ZjAwMiwgMHg4ZWUyMDFjMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYzAsIDB4OGVlMjAwMDAsIDB4OGVlMzAxYzAsCisweDI0MDNmZmJmLCAweDQzMTAyNCwgMHg4MDAzNDcwLCAweGFlZTIwMDAwLAorMHg5NmUyMDQ2OCwgMHg1NDEwMmIsIDB4MTA0MDAwMDMsIDB4MCwKKzB4MjQwZjAwMDEsIDB4YTNhZjAwMjcsIDB4MTI4MDAzMDEsIDB4MjQxNjAwMDcsCisweDI0MTUwMDQwLCAweDI0MWUwMDAxLCAweDI0MGUwMDEyLCAweDhlZTI3MjRjLAorMHg4ZjQzMDI4MCwgMHgyNDQyMDAwMSwgMHgzMDQyMDdmZiwgMHgxMDYyMDJkMywKKzB4MCwgMHg5M2EyMDAyNywgMHgxMDQwMDAxNCwgMHgwLAorMHg4ZWUzNTI0MCwgMHg4ZWUyNTI0NCwgMHgxMDYyMDAwOSwgMHgyNmVkNTI0NCwKKzB4OGVlNjUyNDQsIDB4OGVlMzUyNDQsIDB4MjExNDAsIDB4MjQ0MjUyNDgsCisweDJlMjgwMjEsIDB4MjQ2MzAwMDEsIDB4ODAwMzFiZiwgMHgzMDZiMDBmZiwKKzB4OTJlMjcyNDgsIDB4MTQ0MGZmY2EsIDB4MCwgMHg4ZWUyMDFlMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxZTAsIDB4OGVlMjAxZTAsIDB4OGVlMzBlMTAsCisweDhlZTIwZTE4LCAweDEwNjJmZmMyLCAweDI2ZWQwZTE4LCAweDhlZTYwZTE4LAorMHg4ZWUzMGUxOCwgMHgyMTE0MCwgMHgyNDQyMGUyMCwgMHgyZTI4MDIxLAorMHgyNDYzMDAwMSwgMHgzMDZiMDFmZiwgMHg5NmUyMDQ2YSwgMHgzMDQyMDAxMCwKKzB4MTA0MDAwMTksIDB4MCwgMHg5NjQyMDAwYywgMHgzNDBmODEwMCwKKzB4MTQ0ZjAwMTUsIDB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI4M2MwLCAweDE0NDAwMDEwLCAweDAsIDB4OTY0MjAwMGUsCisweGE2MDIwMDE2LCAweDhlNDIwMDA4LCAweDhlNDMwMDA0LCAweDhlNDQwMDAwLAorMHgyNjk0ZmZmYywgMHhhZTQyMDAwYywgMHhhZTQzMDAwOCwgMHhhZTQ0MDAwNCwKKzB4OTYwMjAwMGUsIDB4MjY3MzAwMDQsIDB4MjQwZjAwMDEsIDB4YTNhZjAwMzcsCisweDM0NDIwMjAwLCAweGE2MDIwMDBlLCAweDhlMDIwMDAwLCAweDhlMDMwMDA0LAorMHgzYzA0MDAwMSwgMHgzNDg0MzgwMCwgMHgzMDZhMDAwNywgMHgyNmE5ODIzLAorMHgzNjQxMDIxLCAweDI2MjEwMmIsIDB4MTA0MDAwMDUsIDB4MjhhYTAyMSwKKzB4MjY0MTAyMywgMHgzNjIxODIzLCAweDNjMDIwMDIwLCAweDQzOTgyMywKKzB4MjY4MjAwMDcsIDB4MjQwNGZmZjgsIDB4OTYwMzAwMGEsIDB4NDQ2MDI0LAorMHg2YTE4MjEsIDB4NmMxMDJiLCAweDEwNDAwMDAyLCAweDE4MDM4MjEsCisweDYwMzgyMSwgMHhhZTEzMDAxOCwgMHg4Zjg4MDEyMCwgMHgyNGUyMDAwNywKKzB4NDQzODI0LCAweDI3NjIzODAwLCAweDI1MDkwMDIwLCAweDEyMjEwMmIsCisweDUwNDAwMDAxLCAweDI3NjkzMDAwLCAweDhmODIwMTI4LCAweDExMjIwMDA0LAorMHgwLCAweDhmODIwMTI0LCAweDE1MjIwMDA3LCAweDE0MDE4MjEsCisweDhlZTIwMWE0LCAweDg4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsCisweDgwMDMyNGMsIDB4OGVlMjAxYTQsIDB4OGUwNDAwMDAsIDB4OGUwNTAwMDQsCisweDEwMjEsIDB4YWQxMzAwMDgsIDB4YTUwNzAwMGUsIDB4YWQxNjAwMTgsCisweGFkMDYwMDFjLCAweGEzMzAyYiwgMHhhMzI4MjMsIDB4ODIyMDIzLAorMHg4NjIwMjMsIDB4YWQwNDAwMDAsIDB4YWQwNTAwMDQsIDB4OGVlMjA0YzAsCisweGFkMDIwMDEwLCAweGFmODkwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLAorMHgyNDExMDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDU2MDAxZiwgMHgwLAorMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLAorMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwKKzB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA1NTAwMDcsIDB4MCwKKzB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwKKzB4ODAwMzIzOSwgMHgwLCAweDE0NjAwMDA1LCAweDAsCisweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LAorMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwKKzB4ODAwMzI0YywgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHg1MDU1MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHhhYzk2MDAwMCwgMHhhYzllMDAwNCwgMHgxNjIwMDAxOCwKKzB4M2MwNTAwMDYsIDB4OGUwMjAwMTgsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4OTAsCisweGFmYTIwMDEwLCAweDhlMDIwMDAwLCAweDhlMDMwMDA0LCAweDM0YTVmMDA5LAorMHgyMDAzMDIxLCAweGMwMDI0MDMsIDB4YWZhMzAwMTQsIDB4OTNhMjAwMzcsCisweDEwNDAwMjE2LCAweDM0MGY4MTAwLCAweDhlNDIwMDA0LCAweDhlNDMwMDA4LAorMHg4ZTQ0MDAwYywgMHhhNjRmMDAwYywgMHhhZTQyMDAwMCwgMHhhZTQzMDAwNCwKKzB4YWU0NDAwMDgsIDB4OTYwMjAwMTYsIDB4ODAwMzQ3MCwgMHhhNjQyMDAwZSwKKzB4MTRlYzAxNjgsIDB4MjhhMTgyMywgMHg5NjBjMDAwYSwgMHg5NjAzMDAwZSwKKzB4MjhhMTAyMywgMHhhNjAyMDAwYSwgMHgzNDYyMDAwNCwgMHhhNjAyMDAwZSwKKzB4OGY4ODAxMjAsIDB4Mjc2MjM4MDAsIDB4MjUwOTAwMjAsIDB4MTIyMTAyYiwKKzB4MTQ0MDAwMDIsIDB4MzA2YWZmZmYsIDB4Mjc2OTMwMDAsIDB4OGY4MjAxMjgsCisweDExMjIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTUyMjAwMDcsCisweDI0MDQwMDIwLCAweDhlZTIwMWE0LCAweDg4MjEsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWE0LCAweDgwMDMyY2EsIDB4OGVlMjAxYTQsIDB4OGVlNTcyNGMsCisweDhlZTYwNDkwLCAweDhlZTcwNDk0LCAweGE1MDQwMDBlLCAweDI0MDQwMDA0LAorMHhhZDEwMDAwOCwgMHhhZDA0MDAxOCwgMHg1Mjk0MCwgMHhhMDE4MjEsCisweDEwMjEsIDB4ZTMzODIxLCAweGUzMjAyYiwgMHhjMjMwMjEsCisweGM0MzAyMSwgMHhhZDA2MDAwMCwgMHhhZDA3MDAwNCwgMHg4ZWUyNzI0YywKKzB4YWQwMjAwMWMsIDB4OGVlMjA0YzQsIDB4YWQwMjAwMTAsIDB4YWY4OTAxMjAsCisweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MTEwMDAxLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODIwMDAwLAorMHgxNDU2MDAxZiwgMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LAorMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLAorMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwKKzB4MTA1NTAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwKKzB4MTA2MjAwMDUsIDB4MCwgMHg4MDAzMmI3LCAweDAsCisweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsCisweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLAorMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAzMmNhLCAweDAsCisweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNTUwMDAzLCAweDEwMjEsCisweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweGFjOTYwMDAwLAorMHhhYzllMDAwNCwgMHgxNjIwMDAwZCwgMHgwLCAweGE2MGMwMDBhLAorMHhhNjBhMDAwZSwgMHg4ZjgyMDEwMCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEwNCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDU4OWMsIDB4M2MwNTAwMDYsIDB4YWZhMjAwMTQsCisweDhlZTY3MjRjLCAweDgwMDM0M2IsIDB4MzRhNWYwMGIsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhMDIwODNjMCwgMHhhZGFiMDAwMCwgMHg4ZWUyMDFkOCwKKzB4OGVlMzcyNGMsIDB4MjQ0MmZmZmYsIDB4YWVlMjAxZDgsIDB4OGVlMjAxZDgsCisweDI0NjMwMDAxLCAweDMwNjMwN2ZmLCAweDI2ZTI1MjQ0LCAweDE1YTIwMDA2LAorMHhhZWUzNzI0YywgMHg4ZWUyMDFkMCwgMHgyNDQyZmZmZiwgMHhhZWUyMDFkMCwKKzB4ODAwMzJlZiwgMHg4ZWUyMDFkMCwgMHg4ZWUyMDFjYywgMHgyNDQyZmZmZiwKKzB4YWVlMjAxY2MsIDB4OGVlMjAxY2MsIDB4OGY0MjAyNDAsIDB4MTA0MDAwNzMsCisweDAsIDB4OGVlMjBlMWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjBlMWMsCisweDhmNDMwMjQwLCAweDQzMTAyYiwgMHgxNDQwMDE3NiwgMHhhMDIxLAorMHg4ZjgzMDEyMCwgMHgyNzYyMzgwMCwgMHgyNDY2MDAyMCwgMHhjMjEwMmIsCisweDUwNDAwMDAxLCAweDI3NjYzMDAwLCAweDhmODIwMTI4LCAweDEwYzIwMDA0LAorMHgwLCAweDhmODIwMTI0LCAweDE0YzIwMDA3LCAweDAsCisweDhlZTIwMWE0LCAweDg4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTQsCisweDgwMDMzNGYsIDB4OGVlMjAxYTQsIDB4OGVlMjcyNGMsIDB4YWM2MjAwMWMsCisweDhlZTQwNGE4LCAweDhlZTUwNGFjLCAweDI0NjIwMDFjLCAweGFjNjIwMDA4LAorMHgyNDAyMDAwOCwgMHhhNDYyMDAwZSwgMHgyNDAyMDAxMSwgMHhhYzYyMDAxOCwKKzB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIDB4OGVlMjA0YzQsIDB4YWM2MjAwMTAsCisweGFmODYwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MTEwMDAxLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHg4YzgyMDAwMCwgMHgxNDRlMDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA1NTAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAzMzNjLAorMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAzMzRmLAorMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNTUwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHhhYzhlMDAwMCwgMHhhYzllMDAwNCwgMHg1NjIwMDAwZCwgMHgyNDExMDAwMSwKKzB4OGVlMjcyNGMsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4YTgsIDB4YWZhMDAwMTQsCisweGFmYTIwMDEwLCAweDhlZTY3MjRjLCAweDhmNDcwMjgwLCAweDNjMDUwMDA5LAorMHgzNGE1ZjAwOCwgMHhjMDAyNDAzLCAweGFmYWUwMDQ4LCAweDhmYWUwMDQ4LAorMHg1NjIwMDAwMSwgMHhhZWUwMGUxYywgMHg4ZWUyMDE4OCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxODgsIDB4ODAwMzNjOCwgMHg4ZWUyMDE4OCwgMHg4ZjgzMDEyMCwKKzB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLCAweDUwNDAwMDAxLAorMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwgMHgwLAorMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLCAweDhlZTIwMWE0LAorMHg4ODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDMzYmEsCisweDhlZTIwMWE0LCAweDhlZTI3MjRjLCAweGFjNjIwMDFjLCAweDhlZTQwNGE4LAorMHg4ZWU1MDRhYywgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwgMHgyNDAyMDAwOCwKKzB4YTQ2MjAwMGUsIDB4MjQwMjAwMTEsIDB4YWM2MjAwMTgsIDB4YWM2NDAwMDAsCisweGFjNjUwMDA0LCAweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLAorMHg5MmUyNGUyMCwgMHgxNDQwMDAzMywgMHgyNDExMDAwMSwgMHg4ZWUyNGUzMCwKKzB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwMCwKKzB4MTQ0ZTAwMWYsIDB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwKKzB4MTA2MjAwMWIsIDB4MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwKKzB4YWM4MjAwMDQsIDB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsCisweDEwNTUwMDA3LCAweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsCisweDEwNjIwMDA1LCAweDAsIDB4ODAwMzNhNywgMHgwLAorMHgxNDYwMDAwNSwgMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLAorMHhhZjgyMDEyOCwgMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwKKzB4NTA0MDAwMTAsIDB4YWM4MDAwMDAsIDB4ODAwMzNiYSwgMHgwLAorMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHg1MDU1MDAwMywgMHgxMDIxLAorMHg4ZWUyNGUzMCwgMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwKKzB4MjEwYzAsIDB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHhhYzhlMDAwMCwKKzB4YWM5ZTAwMDQsIDB4MTYyMDAwMGQsIDB4MCwgMHg4ZWUyNzI0YywKKzB4M2MwNDAwMDEsIDB4MjQ4NDU4YTgsIDB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsCisweDhlZTY3MjRjLCAweDhmNDcwMjgwLCAweDNjMDUwMDA5LCAweDM0YTVmMDA4LAorMHhjMDAyNDAzLCAweGFmYWUwMDQ4LCAweDhmYWUwMDQ4LCAweDhlZTIwMTc0LAorMHgyNDQyMDAwMSwgMHhhZWUyMDE3NCwgMHg4ZWUyMDE3NCwgMHg4MDAzNDZlLAorMHhhMDIxLCAweDk2MGMwMDBhLCAweDE4MzEwMmIsIDB4NTQ0MDAwMDEsCisweDE4MDE4MjEsIDB4YTYwMzAwMGEsIDB4OGY4ODAxMjAsIDB4Mjc2MjM4MDAsCisweDI1MDkwMDIwLCAweDEyMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2OTMwMDAsCisweDhmODIwMTI4LCAweDExMjIwMDA0LCAweDAsIDB4OGY4MjAxMjQsCisweDE1MjIwMDA3LCAweDI0MDQwMDIwLCAweDhlZTIwMWE0LCAweDg4MjEsCisweDI0NDIwMDAxLCAweGFlZTIwMWE0LCAweDgwMDM0MmYsIDB4OGVlMjAxYTQsCisweDhlZTU3MjRjLCAweDhlZTYwNDkwLCAweDhlZTcwNDk0LCAweGE1MDQwMDBlLAorMHgyNDA0MDAwNCwgMHhhZDEwMDAwOCwgMHhhZDA0MDAxOCwgMHg1Mjk0MCwKKzB4YTAxODIxLCAweDEwMjEsIDB4ZTMzODIxLCAweGUzMjAyYiwKKzB4YzIzMDIxLCAweGM0MzAyMSwgMHhhZDA2MDAwMCwgMHhhZDA3MDAwNCwKKzB4OGVlMjcyNGMsIDB4YWQwMjAwMWMsIDB4OGVlMjA0YzQsIDB4YWQwMjAwMTAsCisweGFmODkwMTIwLCAweDkyZTI0ZTIwLCAweDE0NDAwMDMzLCAweDI0MTEwMDAxLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHg4YzgyMDAwMCwgMHgxNDU2MDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA1NTAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAzNDFjLAorMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwgMHhhYzgwMDAwMCwgMHg4MDAzNDJmLAorMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNTUwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHhhYzk2MDAwMCwgMHhhYzllMDAwNCwgMHgxNjIwMDAxZCwgMHgwLAorMHhhNjBjMDAwYSwgMHg4ZjgyMDEwMCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEwNCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDU4OWMsIDB4M2MwNTAwMDYsIDB4YWZhMjAwMTQsCisweDhlZTY3MjRjLCAweDM0YTVmMDBkLCAweGMwMDI0MDMsIDB4MjAwMzgyMSwKKzB4OTNhMjAwMzcsIDB4MTA0MDAwMzEsIDB4MzQwZjgxMDAsIDB4OGU0MjAwMDQsCisweDhlNDMwMDA4LCAweDhlNDQwMDBjLCAweGE2NGYwMDBjLCAweGFlNDIwMDAwLAorMHhhZTQzMDAwNCwgMHhhZTQ0MDAwOCwgMHg5NjAyMDAxNiwgMHhhNjQyMDAwZSwKKzB4OTYwMjAwMGUsIDB4MzA0MmZkZmYsIDB4ODAwMzQ3MCwgMHhhNjAyMDAwZSwKKzB4OGVlMjAxZDgsIDB4MjQ0MmZmZmYsIDB4YWVlMjAxZDgsIDB4OGVlMjAxZDgsCisweDhlZTIwMWNjLCAweDNjMDQwMDFmLCAweDNjMDEwMDAxLCAweDM3MDgyMSwKKzB4YTAzZTgzYzAsIDB4MjQ0MmZmZmYsIDB4YWVlMjAxY2MsIDB4OTYwMzAwMGEsCisweDM0ODRmZmZmLCAweDhlZTIwMWNjLCAweDZhMTgyMSwgMHgyNjM5ODIxLAorMHg5MzIwMmIsIDB4MTA4MDAwMDMsIDB4M2MwMmZmZjUsIDB4MzQ0MjEwMDAsCisweDI2Mjk4MjEsIDB4YWRhYjAwMDAsIDB4OGVlMjcyNGMsIDB4MjQ0MjAwMDEsCisweDMwNDIwN2ZmLCAweGFlZTI3MjRjLCAweDhmNDIwMjQwLCAweDEwNDAwMDA0LAorMHgyODNhMDIzLCAweDhlZTIwZTFjLCAweDI0NDIwMDAxLCAweGFlZTIwZTFjLAorMHhhM2EwMDAyNywgMHgxNjgwZmQyOSwgMHgwLCAweDEyODAwMDI0LAorMHgwLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzM0ODNjNCwKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMzM4M2M4LCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4YWMzMjgzY2MsIDB4OTNhMjAwMzcsIDB4MTA0MDAwMDgsCisweDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2NjLAorMHgyNDQyMDAwNCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjgzY2MsCisweDhlZTI3MjRjLCAweDhmNDMwMjgwLCAweDI0NDIwMDAxLCAweDMwNDIwN2ZmLAorMHgxNDYyMDAwNiwgMHgwLCAweDhlZTIwMWM0LCAweDI0NDIwMDAxLAorMHhhZWUyMDFjNCwgMHg4MDAzNGNjLCAweDhlZTIwMWM0LCAweDhlZTIwMWJjLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFiYywgMHg4MDAzNGNjLCAweDhlZTIwMWJjLAorMHg5N2E0MDAxZSwgMHgyNDg0ZmZmYywgMHg4MDE4MjEsIDB4OGVlNDAwYzAsCisweDhlZTUwMGM0LCAweDEwMjEsIDB4YTMyODIxLCAweGEzMzAyYiwKKzB4ODIyMDIxLCAweDg2MjAyMSwgMHhhZWU0MDBjMCwgMHhhZWU1MDBjNCwKKzB4OGZhZjAwMmMsIDB4MjQwMjAwMDIsIDB4MTFlMjAwMGYsIDB4MjllMjAwMDMsCisweDE0NDAwMDE3LCAweDI0MDIwMDAzLCAweDE1ZTIwMDE1LCAweDAsCisweDhlZTIwMGQwLCAweDhlZTMwMGQ0LCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLAorMHg0NDEwMjEsIDB4YWVlMjAwZDAsIDB4YWVlMzAwZDQsIDB4OGVlMjAwZDAsCisweDgwMDM0YzYsIDB4OGVlMzAwZDQsIDB4OGVlMjAwZDgsIDB4OGVlMzAwZGMsCisweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZWUyMDBkOCwKKzB4YWVlMzAwZGMsIDB4OGVlMjAwZDgsIDB4ODAwMzRjNiwgMHg4ZWUzMDBkYywKKzB4OGVlMjAwYzgsIDB4OGVlMzAwY2MsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsCisweDQ0MTAyMSwgMHhhZWUyMDBjOCwgMHhhZWUzMDBjYywgMHg4ZWUyMDBjOCwKKzB4OGVlMzAwY2MsIDB4OGY4MzAwZTQsIDB4OGY4MjAwZTAsIDB4MTA2MjAwMDMsCisweDI0NjMwMDA4LCAweGFmODMwMGU0LCAweGFmODMwMGU4LCAweDhmYmYwMDcwLAorMHg4ZmJlMDA2YywgMHg4ZmI2MDA2OCwgMHg4ZmI1MDA2NCwgMHg4ZmI0MDA2MCwKKzB4OGZiMzAwNWMsIDB4OGZiMjAwNTgsIDB4OGZiMTAwNTQsIDB4OGZiMDAwNTAsCisweDNlMDAwMDgsIDB4MjdiZDAwNzgsIDB4MjdiZGZmYjAsIDB4YWZiNTAwNDQsCisweGE4MjEsIDB4YWZiMDAwMzAsIDB4ODAyMSwgMHhhZmJmMDA0YywKKzB4YWZiNjAwNDgsIDB4YWZiNDAwNDAsIDB4YWZiMzAwM2MsIDB4YWZiMjAwMzgsCisweGFmYjEwMDM0LCAweDhlZTIwNGQ0LCAweDI0MTQwMDAxLCAweDMwNDIwMDAxLAorMHgxNDQwMDAyYSwgMHhiMDIxLCAweDhmODcwMGUwLCAweDhmODgwMGM0LAorMHg4ZjgyMDBlOCwgMHhlMjIwMjMsIDB4MmM4MjEwMDAsIDB4NTA0MDAwMDEsCisweDI0ODQxMDAwLCAweDQyMGMyLCAweDgwMTgyMSwgMHg4ZWU0MDBjOCwKKzB4OGVlNTAwY2MsIDB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLAorMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFlZTQwMGM4LCAweGFlZTUwMGNjLAorMHg4ZjgzMDBjOCwgMHgzYzAyMDAwYSwgMHgzNDQyZWZmZiwgMHgxMDMyMDIzLAorMHg0NDEwMmIsIDB4MTA0MDAwMDMsIDB4M2MwMjAwMGEsIDB4MzQ0MmYwMDAsCisweDgyMjAyMSwgMHg4MDE4MjEsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsCisweDEwMjEsIDB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsCisweDg2MjAyMSwgMHhhZWU0MDBjMCwgMHhhZWU1MDBjNCwgMHhhZjg4MDBjOCwKKzB4YWY4NzAwZTQsIDB4ODAwMzg1MCwgMHhhZjg3MDBlOCwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDkwNDI4M2MwLCAweDEwNDAwMDBiLCAweDAsCisweDNjMTMwMDAxLCAweDI3Nzk4MjEsIDB4OGU3MzgzYzQsIDB4M2MxMTAwMDEsCisweDIzNzg4MjEsIDB4OGUzMTgzYzgsIDB4M2MxMjAwMDEsIDB4MjU3OTAyMSwKKzB4ODAwMzZlOCwgMHg4ZTUyODNjYywgMHg4ZjgzMDBlMCwgMHg4ZjgyMDBlNCwKKzB4MTA0MzAwMDcsIDB4NDgyMSwgMHg4ZjgyMDBlNCwgMHgyNDA5MDAwMSwKKzB4OGM0MzAwMDAsIDB4OGM0NDAwMDQsIDB4YWZhMzAwMTgsIDB4YWZhNDAwMWMsCisweDE1MjAwMDBlLCAweDNjMDJmZmZmLCAweDhmODIwMGM0LCAweGFmYTIwMDEwLAorMHg4ZjgyMDBjOCwgMHgzYzA0MDAwMSwgMHgyNDg0NTg3MCwgMHhhZmEyMDAxNCwKKzB4OGY4NjAwZTAsIDB4OGY4NzAwZTQsIDB4M2MwNTAwMDYsIDB4YzAwMjQwMywKKzB4MzRhNWYwMDAsIDB4ODAwMzg1MCwgMHgwLCAweDhmYTMwMDFjLAorMHg4ZmIyMDAxOCwgMHgzMDczZmZmZiwgMHgyNjczZmZmYywgMHg2MjEwMjQsCisweDEwNDAwMDU4LCAweDI0MDg4MjEsIDB4M2MwMjAwODAsIDB4NjIxMDI0LAorMHgxMDQwMDAwYSwgMHgzYzA0MDA0MCwgMHg4ZWUyMDA3YywgMHgyNDQyMDAwMSwKKzB4YWVlMjAwN2MsIDB4OGVlMjAwN2MsIDB4OGVlMjAxZmMsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWZjLCAweDgwMDM4NGEsIDB4OGVlMjAxZmMsIDB4M2MwNjAwMDQsCisweDNjMGIwMDAxLCAweDNjMGEwMDAyLCAweDNjMDUwMDEwLCAweDNjMDkwMDA4LAorMHg4ZWUyMDA4MCwgMHgzYzA4MDAyMCwgMHgzNDA3ODAwMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAwODAsIDB4OGVlMjAwODAsIDB4OGZhMjAwMWMsIDB4NDQxODI0LAorMHgxMDY2MDAyMSwgMHhjMzEwMmIsIDB4MTQ0MDAwMDcsIDB4MCwKKzB4MTA2YjAwMTEsIDB4MCwgMHgxMDZhMDAxNSwgMHgwLAorMHg4MDAzNTkyLCAweDQyMDQyLCAweDEwNjUwMDIzLCAweGEzMTAyYiwKKzB4MTQ0MDAwMDUsIDB4MCwgMHgxMDY5MDAxOSwgMHgwLAorMHg4MDAzNTkyLCAweDQyMDQyLCAweDEwNjgwMDIxLCAweDAsCisweDgwMDM1OTIsIDB4NDIwNDIsIDB4OGVlMjAwMzQsIDB4MjQ0MjAwMDEsCisweGFlZTIwMDM0LCAweDhlZTIwMDM0LCAweDgwMDM1OTIsIDB4NDIwNDIsCisweDhlZTIwMWVjLCAweDI0NDIwMDAxLCAweGFlZTIwMWVjLCAweDhlZTIwMWVjLAorMHg4MDAzNTkyLCAweDQyMDQyLCAweDhlZTIwMWYwLCAweDI0NDIwMDAxLAorMHhhZWUyMDFmMCwgMHg4ZWUyMDFmMCwgMHg4MDAzNTkyLCAweDQyMDQyLAorMHg4ZWUyMDFmNCwgMHgyNDQyMDAwMSwgMHhhZWUyMDFmNCwgMHg4ZWUyMDFmNCwKKzB4ODAwMzU5MiwgMHg0MjA0MiwgMHg4ZWUyMDAzMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAwMzAsIDB4OGVlMjAwMzAsIDB4ODAwMzU5MiwgMHg0MjA0MiwKKzB4OGVlMjAxZjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZjgsIDB4OGVlMjAxZjgsCisweDQyMDQyLCAweDEwODcwMmI3LCAweDAsIDB4ODAwMzU1NywKKzB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjgzYjIsCisweDE0NDAwMDg0LCAweDI0MDIwMDAxLCAweDNjMDMwMDAxLCAweDc3MTgyMSwKKzB4OTA2MzgzYjMsIDB4MTQ2MjAwN2YsIDB4M2MwMjAxMDAsIDB4OGU0MzAwMDAsCisweDYyMTAyNCwgMHgxMDQwMDA2ZiwgMHgyNDAyZmZmZiwgMHgxNDYyMDAwNSwKKzB4MjQxMDAwMDEsIDB4OTY0MzAwMDQsIDB4MzQwMmZmZmYsIDB4MTA2MjAwNzUsCisweDAsIDB4OTJlMjA0ZDgsIDB4MTQ0MDAwNzIsIDB4MCwKKzB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LCAweDI4NDIwMDA1LAorMHgxMDQwMDAyMCwgMHgzODIxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwKKzB4OGM0MjgzYjQsIDB4MTg0MDAwMTYsIDB4MjgyMSwgMHg5NjI2MDAwMCwKKzB4NTIwYzAsIDB4OTcxMDIxLCAweDk0NDI3NzdlLCAweDE0NDYwMDA5LAorMHg5NzEwMjEsIDB4OTQ0Mzc3ODAsIDB4OTYyMjAwMDIsIDB4MTQ2MjAwMDUsCisweDk3MTAyMSwgMHg5NDQzNzc4MiwgMHg5NjIyMDAwNCwgMHg1MDYyMDAwOCwKKzB4MjQwNzAwMDEsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LAorMHgyNGE1MDAwMSwgMHhhMjEwMmEsIDB4NTQ0MGZmZWUsIDB4NTIwYzAsCisweDMwZTIwMGZmLCAweDEwNDAwMjdiLCAweDAsIDB4ODAwMzYxZSwKKzB4MCwgMHgyNDAyMDIxLCAweGMwMDIyZmUsIDB4MjQwNTAwMDYsCisweDMwNDQwMDFmLCAweDQyOGMwLCAweDJlNTEwMjEsIDB4OTQ0MjcyN2MsCisweDMwNDI0MDAwLCAweDE0NDAwMjZmLCAweGI3MTAyMSwgMHg5NDQzNzI3ZSwKKzB4OTYyMjAwMDAsIDB4MTQ2MjAwMGIsIDB4NDE4YzAsIDB4YjcxMDIxLAorMHg5NDQzNzI4MCwgMHg5NjIyMDAwMiwgMHgxNDYyMDAwNiwgMHg0MThjMCwKKzB4YjcxMDIxLCAweDk0NDM3MjgyLCAweDk2MjIwMDA0LCAweDEwNjIwMDM1LAorMHg0MThjMCwgMHgyZTMxMDIxLCAweDk0NDI3MjdjLCAweDMwNDI4MDAwLAorMHgxNDQwMDI1YywgMHgyZTMxMDIxLCAweDk0NDg3MjdjLCAweDk2MjcwMDAwLAorMHg4MjhjMCwgMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4ODAwMzYwMCwKKzB4MzAyMSwgMHg0MjBjMCwgMHgyZTQxMDIxLCAweDk0NDM3MzdjLAorMHgyZTQxMDIxLCAweDk0NDg3MzdjLCAweDMwNjM4MDAwLCAweDE0NjAwMDEwLAorMHg4MjhjMCwgMHhiNzEwMjEsIDB4OTQ0MjczN2UsIDB4MTQ0N2ZmZjUsCisweDEwMDIwMjEsIDB4YjcxMDIxLCAweDk0NDM3MzgwLCAweDk2MjIwMDAyLAorMHg1NDYyZmZmMSwgMHg0MjBjMCwgMHhiNzEwMjEsIDB4OTQ0MzczODIsCisweDk2MjIwMDA0LCAweDU0NjJmZmVjLCAweDQyMGMwLCAweDI0MDYwMDAxLAorMHgzMGMyMDBmZiwgMHgxMDQwMDIzYiwgMHgwLCAweDgwMDM2MWUsCisweDAsIDB4OTc0MzAyMDIsIDB4OTY0MjAwMDAsIDB4MTQ2MjAyMzUsCisweDAsIDB4OTc0MzAyMDQsIDB4OTY0MjAwMDIsIDB4MTQ2MjAyMzEsCisweDAsIDB4OTc0MzAyMDYsIDB4OTY0MjAwMDQsIDB4MTQ2MjAyMmQsCisweDAsIDB4OTI0MjAwMDAsIDB4M2EwMzAwMDEsIDB4MzA0MjAwMDEsCisweDQzMTAyNCwgMHgxMDQwMDA3NCwgMHgyNDAyZmZmZiwgMHg4ZTIzMDAwMCwKKzB4MTQ2MjAwMDQsIDB4MzQwMmZmZmYsIDB4OTYyMzAwMDQsIDB4MTA2MjAwNmYsCisweDI0MTQwMDAyLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNiMiwKKzB4MTQ0MDAwNmEsIDB4MjQxNDAwMDMsIDB4OTJlMjA0ZDgsIDB4MTQ0MDAwNjcsCisweDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDhjNDI4M2I0LAorMHgyODQyMDAwNSwgMHgxMDQwMDAyMCwgMHgzODIxLCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OGM0MjgzYjQsIDB4MTg0MDAwMTYsIDB4MjgyMSwKKzB4OTYyNjAwMDAsIDB4NTIwYzAsIDB4OTcxMDIxLCAweDk0NDI3NzdlLAorMHgxNDQ2MDAwOSwgMHg5NzEwMjEsIDB4OTQ0Mzc3ODAsIDB4OTYyMjAwMDIsCisweDE0NjIwMDA1LCAweDk3MTAyMSwgMHg5NDQzNzc4MiwgMHg5NjIyMDAwNCwKKzB4NTA2MjAwMDgsIDB4MjQwNzAwMDEsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg4YzQyODNiNCwgMHgyNGE1MDAwMSwgMHhhMjEwMmEsIDB4NTQ0MGZmZWUsCisweDUyMGMwLCAweDMwZTIwMGZmLCAweDE0NDAwMDQ0LCAweDI0MTQwMDAzLAorMHg4MDAzODRhLCAweDAsIDB4MjQwMjAyMSwgMHhjMDAyMmZlLAorMHgyNDA1MDAwNiwgMHgzMDQ0MDAxZiwgMHg0MjhjMCwgMHgyZTUxMDIxLAorMHg5NDQyNzI3YywgMHgzMDQyNDAwMCwgMHgxNDQwMDFlYSwgMHhiNzEwMjEsCisweDk0NDM3MjdlLCAweDk2MjIwMDAwLCAweDE0NjIwMDBiLCAweDQxOGMwLAorMHhiNzEwMjEsIDB4OTQ0MzcyODAsIDB4OTYyMjAwMDIsIDB4MTQ2MjAwMDYsCisweDQxOGMwLCAweGI3MTAyMSwgMHg5NDQzNzI4MiwgMHg5NjIyMDAwNCwKKzB4MTA2MjAwMjcsIDB4NDE4YzAsIDB4MmUzMTAyMSwgMHg5NDQyNzI3YywKKzB4MzA0MjgwMDAsIDB4MTQ0MDAxZDcsIDB4MmUzMTAyMSwgMHg5NDQ4NzI3YywKKzB4OTYyNzAwMDAsIDB4ODI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLAorMHg4MDAzNjg1LCAweDMwMjEsIDB4NDIwYzAsIDB4MmU0MTAyMSwKKzB4OTQ0MzczN2MsIDB4MmU0MTAyMSwgMHg5NDQ4NzM3YywgMHgzMDYzODAwMCwKKzB4MTQ2MDAwMTAsIDB4ODI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLAorMHgxNDQ3ZmZmNSwgMHgxMDAyMDIxLCAweGI3MTAyMSwgMHg5NDQzNzM4MCwKKzB4OTYyMjAwMDIsIDB4NTQ2MmZmZjEsIDB4NDIwYzAsIDB4YjcxMDIxLAorMHg5NDQzNzM4MiwgMHg5NjIyMDAwNCwgMHg1NDYyZmZlYywgMHg0MjBjMCwKKzB4MjQwNjAwMDEsIDB4MzBjMjAwZmYsIDB4MTA0MDAxYjYsIDB4MCwKKzB4ODAwMzY5OCwgMHgyNDE0MDAwMywgMHgyNDE0MDAwMSwgMHg4ZjQyMDI2MCwKKzB4NTMxMDJiLCAweDEwNDAwMDQ5LCAweDAsIDB4OGY4MzAwZTQsCisweDhmODIwMGUwLCAweDEwNjIwMDAzLCAweDI0NjMwMDA4LCAweGFmODMwMGU0LAorMHhhZjgzMDBlOCwgMHg4ZWU0MDBjMCwgMHg4ZWU1MDBjNCwgMHgyNjAxODIxLAorMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWVlNDAwYzAsIDB4YWVlNTAwYzQsIDB4OGVlMjAwNTgsCisweDI0NDIwMDAxLCAweGFlZTIwMDU4LCAweDhlZTIwMDU4LCAweDhlZTIwMDdjLAorMHgyNDQyMDAwMSwgMHhhZWUyMDA3YywgMHg4ZWUyMDA3YywgMHg4ZjgyMDBlMCwKKzB4YWZhMjAwMTAsIDB4OGY4MjAwZTQsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4NzgsCisweGFmYTIwMDE0LCAweDhmYTYwMDE4LCAweDhmYTcwMDFjLCAweDNjMDUwMDA2LAorMHhjMDAyNDAzLCAweDM0YTVmMDAzLCAweDgwMDM4NTAsIDB4MCwKKzB4OGVlMjUyNDAsIDB4YWZhMjAwMTAsIDB4OGVlMjUyNDQsIDB4M2MwNDAwMDEsCisweDI0ODQ1ODg0LCAweGFmYTIwMDE0LCAweDhlZTYwZTEwLCAweDhlZTcwZTE4LAorMHhjMDAyNDAzLCAweDM0YTVmMDAyLCAweDhlZTIwMWMwLCAweDI0NDIwMDAxLAorMHhhZWUyMDFjMCwgMHg4ZWUyMDAwMCwgMHg4ZWUzMDFjMCwgMHgyNDAzZmZiZiwKKzB4NDMxMDI0LCAweDgwMDM3ZjgsIDB4YWVlMjAwMDAsIDB4OGVlMjUyNDAsCisweGFmYTIwMDEwLCAweDhlZTI1MjQ0LCAweDNjMDQwMDAxLCAweDI0ODQ1ODg0LAorMHhhZmEyMDAxNCwgMHg4ZWU2MGUxMCwgMHg4ZWU3MGUxOCwgMHgzYzA1MDAwNiwKKzB4YzAwMjQwMywgMHgzNGE1ZjAwMiwgMHg4ZWUyMDFjMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxYzAsIDB4ODAwMzdmOCwgMHg4ZWUyMDFjMCwgMHg5NmUyMDQ2OCwKKzB4NTMxMDJiLCAweDU0NDAwMDAxLCAweDNjMTU4MDAwLCAweDEyNjAwMTMxLAorMHgzYzBjMDAxZiwgMHgzNThjZmZmZiwgMHg4ZWUyNzI0YywgMHg4ZjQzMDI4MCwKKzB4MjQ0MjAwMDEsIDB4MzA0MjA3ZmYsIDB4MTA2MjAxMDgsIDB4MCwKKzB4MTJhMDAwMTQsIDB4MCwgMHg4ZWUzNTI0MCwgMHg4ZWUyNTI0NCwKKzB4MTA2MjAwMDksIDB4MjZlZTUyNDQsIDB4OGVlYjUyNDQsIDB4OGVlMzUyNDQsCisweDIxMTQwLCAweDI0NDI1MjQ4LCAweDJlMjgwMjEsIDB4MjQ2MzAwMDEsCisweDgwMDM3MTIsIDB4MzA2ODAwZmYsIDB4OTJlMjcyNDgsIDB4MTQ0MGZmYzAsCisweDNjMDUwMDA2LCAweDhlZTIwMWUwLCAweDI0NDIwMDAxLCAweGFlZTIwMWUwLAorMHg4ZWUyMDFlMCwgMHg4ZWUzMGUxMCwgMHg4ZWUyMGUxOCwgMHgxMDYyZmZjYiwKKzB4MjZlZTBlMTgsIDB4OGVlYjBlMTgsIDB4YTgyMSwgMHg4ZWUzMGUxOCwKKzB4MjExNDAsIDB4MjQ0MjBlMjAsIDB4MmUyODAyMSwgMHgyNDYzMDAwMSwKKzB4MzA2ODAxZmYsIDB4OTZlMjA0NmEsIDB4MzA0MjAwMTAsIDB4MTA0MDAwMTcsCisweDM0MDI4MTAwLCAweDk2NDMwMDBjLCAweDE0NjIwMDE0LCAweDAsCisweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyODNjMCwgMHgxNDQwMDAwZiwKKzB4MCwgMHg5NjQyMDAwZSwgMHhhNjAyMDAxNiwgMHg4ZTQyMDAwOCwKKzB4OGU0MzAwMDQsIDB4OGU0NDAwMDAsIDB4MjY3M2ZmZmMsIDB4YWU0MjAwMGMsCisweGFlNDMwMDA4LCAweGFlNDQwMDA0LCAweDk2MDIwMDBlLCAweDI2MzEwMDA0LAorMHgyNDE2MDAwMSwgMHgzNDQyMDIwMCwgMHhhNjAyMDAwZSwgMHg5NjAzMDAwYSwKKzB4MjYwNTAyMSwgMHg3MzEwMmIsIDB4MTA0MDAwMDIsIDB4MjYwNjgyMSwKKzB4NjA1MDIxLCAweDJkNDIwMDNkLCAweDEwNDAwMDJhLCAweDM4MjEsCisweDk2MjMwMDBjLCAweDI0MDIwODAwLCAweDU0NjIwMDI3LCAweGFlMTEwMDE4LAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjgzYzAsIDB4NTQ0MDAwMjIsCisweGFlMTEwMDE4LCAweDI2MjIwMDE3LCAweDE4MjEwMmIsIDB4MTA0MDAwMTMsCisweDAsIDB4M2MwMmZmZjUsIDB4NTExMDIxLCAweDkwNDIxMDE3LAorMHgzODQzMDAwNiwgMHgyYzYzMDAwMSwgMHgzODQyMDAxMSwgMHgyYzQyMDAwMSwKKzB4NjIxODI1LCAweDEwNjAwMDEzLCAweDI2MjIwMDEwLCAweDE4MjEwMmIsCisweDEwNDAwMDBlLCAweDAsIDB4M2MwN2ZmZjUsIDB4ZjEzODIxLAorMHg5NGU3MTAxMCwgMHg4MDAzNzVlLCAweDI0ZTcwMDBlLCAweDkyMjIwMDE3LAorMHgzODQzMDAwNiwgMHgyYzYzMDAwMSwgMHgzODQyMDAxMSwgMHgyYzQyMDAwMSwKKzB4NjIxODI1LCAweDUwNjAwMDA0LCAweGFlMTEwMDE4LCAweDk2MjcwMDEwLAorMHgyNGU3MDAwZSwgMHhhZTExMDAxOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI4M2MwLCAweDIxMDJiLCAweDE0ZTAwMDAyLCAweDI0ZWMwLAorMHgxNDAzODIxLCAweDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLAorMHhjMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsCisweDEwYzIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsCisweDI0MDIwMDBiLCAweDhlZTIwMWE0LCAweDQ4MjEsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWE0LCAweDgwMDM3YmYsIDB4OGVlMjAxYTQsIDB4OGUwNDAwMDAsCisweDhlMDUwMDA0LCAweGFjNjIwMDE4LCAweDE3NTEwMjUsIDB4NDkxMDI1LAorMHhhYzcxMDAwOCwgMHhhNDY3MDAwZSwgMHhhYzYyMDAxYywgMHhhYzY0MDAwMCwKKzB4YWM2NTAwMDQsIDB4OGVlMjA0YzAsIDB4YWM2MjAwMTAsIDB4YWY4NjAxMjAsCisweDkyZTI0ZTIwLCAweDE0NDAwMDM4LCAweDI0MDkwMDAxLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLAorMHgyNDAyMDAwNywgMHgxNDYyMDAyMCwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYywgMHgwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUzNGUzNCwgMHg4ZWU1NGUzMCwKKzB4MjQwMjAwNDAsIDB4MjQ2MzAwMDEsIDB4MTA2MjAwMDcsIDB4MCwKKzB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTBhMjAwMDUsIDB4MCwKKzB4ODAwMzdhOSwgMHgwLCAweDE0YTAwMDA1LCAweDAsCisweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LAorMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMywgMHhhYzgwMDAwMCwKKzB4ODAwMzdiZiwgMHgwLCAweDhlZTI0ZTMwLCAweDI0MDMwMDQwLAorMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLAorMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwKKzB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHgyNDAyMDAwNywgMHhhYzgyMDAwMCwKKzB4MjQwMjAwMDEsIDB4YWM4MjAwMDQsIDB4MTUyMDAwMTgsIDB4M2MwNTAwMDYsCisweDhlMDIwMDE4LCAweDNjMDQwMDAxLCAweDI0ODQ1ODkwLCAweGFmYTIwMDEwLAorMHg4ZTAyMDAwMCwgMHg4ZTAzMDAwNCwgMHgzNGE1ZjAwOSwgMHgyMDAzMDIxLAorMHhjMDAyNDAzLCAweGFmYTMwMDE0LCAweDMyYzIwMGZmLCAweDEwNDAwMDJiLAorMHgzNDAyODEwMCwgMHg4ZTQzMDAwNCwgMHg4ZTQ0MDAwOCwgMHg4ZTQ1MDAwYywKKzB4YTY0MjAwMGMsIDB4YWU0MzAwMDAsIDB4YWU0NDAwMDQsIDB4YWU0NTAwMDgsCisweDk2MDIwMDE2LCAweDgwMDM3ZjgsIDB4YTY0MjAwMGUsIDB4MTU0ZDAwMGEsCisweDAsIDB4OTYwMjAwMGUsIDB4YTYxMzAwMGEsIDB4MzQ0MjAwMDQsCisweGE2MDIwMDBlLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwODNjMCwKKzB4ODAwMzdmNiwgMHg5ODIxLCAweDk2MDQwMDBhLCAweDkzMTAyYiwKKzB4MTA0MDAwMDIsIDB4MjYwMTgyMSwgMHg4MDE4MjEsIDB4MjQwMjAwMDEsCisweGE2MDMwMDBhLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyODNjMCwKKzB4OTYwNDAwMGEsIDB4MjI0ODgyMSwgMHgxOTExMDJiLCAweDEwNDAwMDAzLAorMHgzYzAyZmZmNSwgMHgzNDQyMTAwMCwgMHgyMjI4ODIxLCAweDI2NDk4MjMsCisweGE4MjEsIDB4MTY2MGZlZjQsIDB4YWRjODAwMDAsIDB4MTI2MDAwMjEsCisweDMyYzIwMGZmLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzMzODNjNCwKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMzE4M2M4LCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4MTA0MDAwMDgsIDB4YWMzMjgzY2MsIDB4M2MwMjAwMDEsCisweDU3MTAyMSwgMHg4YzQyODNjYywgMHgyNDQyMDAwNCwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGFjMjI4M2NjLCAweDhlZTI3MjRjLCAweDhmNDMwMjgwLAorMHgyNDQyMDAwMSwgMHgxNDYyMDAwNiwgMHgwLCAweDhlZTIwMWM0LAorMHgyNDQyMDAwMSwgMHhhZWUyMDFjNCwgMHg4MDAzODUwLCAweDhlZTIwMWM0LAorMHg4ZWUyMDFiYywgMHgyNDQyMDAwMSwgMHhhZWUyMDFiYywgMHg4MDAzODUwLAorMHg4ZWUyMDFiYywgMHg5N2E0MDAxZSwgMHgyNDg0ZmZmYywgMHg4MDE4MjEsCisweDhlZTQwMGMwLCAweDhlZTUwMGM0LCAweDEwMjEsIDB4YTMyODIxLAorMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgMHgyNDAyMDAwMiwKKzB4YWVlNDAwYzAsIDB4YWVlNTAwYzQsIDB4MTI4MjAwMGYsIDB4MmE4MjAwMDMsCisweDE0NDAwMDE3LCAweDI0MDIwMDAzLCAweDE2ODIwMDE1LCAweDAsCisweDhlZTIwMGQwLCAweDhlZTMwMGQ0LCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLAorMHg0NDEwMjEsIDB4YWVlMjAwZDAsIDB4YWVlMzAwZDQsIDB4OGVlMjAwZDAsCisweDgwMDM4NGEsIDB4OGVlMzAwZDQsIDB4OGVlMjAwZDgsIDB4OGVlMzAwZGMsCisweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZWUyMDBkOCwKKzB4YWVlMzAwZGMsIDB4OGVlMjAwZDgsIDB4ODAwMzg0YSwgMHg4ZWUzMDBkYywKKzB4OGVlMjAwYzgsIDB4OGVlMzAwY2MsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsCisweDQ0MTAyMSwgMHhhZWUyMDBjOCwgMHhhZWUzMDBjYywgMHg4ZWUyMDBjOCwKKzB4OGVlMzAwY2MsIDB4OGY4MzAwZTQsIDB4OGY4MjAwZTAsIDB4MTA2MjAwMDMsCisweDI0NjMwMDA4LCAweGFmODMwMGU0LCAweGFmODMwMGU4LCAweDhmYmYwMDRjLAorMHg4ZmI2MDA0OCwgMHg4ZmI1MDA0NCwgMHg4ZmI0MDA0MCwgMHg4ZmIzMDAzYywKKzB4OGZiMjAwMzgsIDB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwNTAsIDB4MjdiZGZmOTAsIDB4YWZiNjAwNjAsIDB4YjAyMSwKKzB4YWZiZjAwNjgsIDB4YWZiZTAwNjQsIDB4YWZiNTAwNWMsIDB4YWZiNDAwNTgsCisweGFmYjMwMDU0LCAweGFmYjIwMDUwLCAweGFmYjEwMDRjLCAweGFmYjAwMDQ4LAorMHg4ZWUyMDRkNCwgMHg4ODIxLCAweDI0MTUwMDAxLCAweDMwNDIwMDAxLAorMHgxNDQwMDAyYSwgMHhhM2EwMDAyZiwgMHg4Zjg3MDBlMCwgMHg4Zjg4MDBjNCwKKzB4OGY4MjAwZTgsIDB4ZTIyMDIzLCAweDJjODIxMDAwLCAweDUwNDAwMDAxLAorMHgyNDg0MTAwMCwgMHg0MjBjMiwgMHg4MDE4MjEsIDB4OGVlNDAwYzgsCisweDhlZTUwMGNjLCAweDEwMjEsIDB4YTMyODIxLCAweGEzMzAyYiwKKzB4ODIyMDIxLCAweDg2MjAyMSwgMHhhZWU0MDBjOCwgMHhhZWU1MDBjYywKKzB4OGY4MzAwYzgsIDB4M2MwMjAwMGEsIDB4MzQ0MmVmZmYsIDB4MTAzMjAyMywKKzB4NDQxMDJiLCAweDEwNDAwMDAzLCAweDNjMDIwMDBhLCAweDM0NDJmMDAwLAorMHg4MjIwMjEsIDB4ODAxODIxLCAweDhlZTQwMGMwLCAweDhlZTUwMGM0LAorMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWVlNDAwYzAsIDB4YWVlNTAwYzQsIDB4YWY4ODAwYzgsCisweGFmODcwMGU0LCAweDgwMDNjNWIsIDB4YWY4NzAwZTgsIDB4M2MwMjAwMDEsCisweDU3MTAyMSwgMHg5MDQyODNjMCwgMHgxMDQwMDAwYiwgMHgwLAorMHgzYzEzMDAwMSwgMHgyNzc5ODIxLCAweDhlNzM4M2M0LCAweDNjMTAwMDAxLAorMHgyMTc4MDIxLCAweDhlMTA4M2M4LCAweDNjMTIwMDAxLCAweDI1NzkwMjEsCisweDgwMDNhNTksIDB4OGU1MjgzY2MsIDB4OGY4MzAwZTAsIDB4OGY4MjAwZTQsCisweDEwNDMwMDA3LCAweDM4MjEsIDB4OGY4MjAwZTQsIDB4MjQwNzAwMDEsCisweDhjNDMwMDAwLCAweDhjNDQwMDA0LCAweGFmYTMwMDE4LCAweGFmYTQwMDFjLAorMHgxNGUwMDAwZSwgMHgzYzAyZmZmZiwgMHg4ZjgyMDBjNCwgMHhhZmEyMDAxMCwKKzB4OGY4MjAwYzgsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4YjQsIDB4YWZhMjAwMTQsCisweDhmODYwMGUwLCAweDhmODcwMGU0LCAweDNjMDUwMDA2LCAweGMwMDI0MDMsCisweDM0YTVmMjAwLCAweDgwMDNjNWIsIDB4MCwgMHg4ZmEzMDAxYywKKzB4OGZiMjAwMTgsIDB4MzA3M2ZmZmYsIDB4MjY3M2ZmZmMsIDB4NjIxMDI0LAorMHgxMDQwMDA1OCwgMHgyNDA4MDIxLCAweDNjMDIwMDgwLCAweDYyMTAyNCwKKzB4MTA0MDAwMGEsIDB4M2MwNDAwNDAsIDB4OGVlMjAwN2MsIDB4MjQ0MjAwMDEsCisweGFlZTIwMDdjLCAweDhlZTIwMDdjLCAweDhlZTIwMWZjLCAweDI0NDIwMDAxLAorMHhhZWUyMDFmYywgMHg4MDAzYzU1LCAweDhlZTIwMWZjLCAweDNjMDYwMDA0LAorMHgzYzBiMDAwMSwgMHgzYzBhMDAwMiwgMHgzYzA1MDAxMCwgMHgzYzA5MDAwOCwKKzB4OGVlMjAwODAsIDB4M2MwODAwMjAsIDB4MzQwNzgwMDAsIDB4MjQ0MjAwMDEsCisweGFlZTIwMDgwLCAweDhlZTIwMDgwLCAweDhmYTIwMDFjLCAweDQ0MTgyNCwKKzB4MTA2NjAwMjEsIDB4YzMxMDJiLCAweDE0NDAwMDA3LCAweDAsCisweDEwNmIwMDExLCAweDAsIDB4MTA2YTAwMTUsIDB4MCwKKzB4ODAwMzkxNiwgMHg0MjA0MiwgMHgxMDY1MDAyMywgMHhhMzEwMmIsCisweDE0NDAwMDA1LCAweDAsIDB4MTA2OTAwMTksIDB4MCwKKzB4ODAwMzkxNiwgMHg0MjA0MiwgMHgxMDY4MDAyMSwgMHgwLAorMHg4MDAzOTE2LCAweDQyMDQyLCAweDhlZTIwMDM0LCAweDI0NDIwMDAxLAorMHhhZWUyMDAzNCwgMHg4ZWUyMDAzNCwgMHg4MDAzOTE2LCAweDQyMDQyLAorMHg4ZWUyMDFlYywgMHgyNDQyMDAwMSwgMHhhZWUyMDFlYywgMHg4ZWUyMDFlYywKKzB4ODAwMzkxNiwgMHg0MjA0MiwgMHg4ZWUyMDFmMCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAxZjAsIDB4OGVlMjAxZjAsIDB4ODAwMzkxNiwgMHg0MjA0MiwKKzB4OGVlMjAxZjQsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxZjQsIDB4OGVlMjAxZjQsCisweDgwMDM5MTYsIDB4NDIwNDIsIDB4OGVlMjAwMzAsIDB4MjQ0MjAwMDEsCisweGFlZTIwMDMwLCAweDhlZTIwMDMwLCAweDgwMDM5MTYsIDB4NDIwNDIsCisweDhlZTIwMWY4LCAweDI0NDIwMDAxLCAweGFlZTIwMWY4LCAweDhlZTIwMWY4LAorMHg0MjA0MiwgMHgxMDg3MDMzZSwgMHgwLCAweDgwMDM4ZGIsCisweDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDkwNDI4M2IyLAorMHgxNDQwMDA4NCwgMHgyNDAyMDAwMSwgMHgzYzAzMDAwMSwgMHg3NzE4MjEsCisweDkwNjM4M2IzLCAweDE0NjIwMDdmLCAweDNjMDIwMTAwLCAweDhlNDMwMDAwLAorMHg2MjEwMjQsIDB4MTA0MDAwNmYsIDB4MjQwMmZmZmYsIDB4MTQ2MjAwMDUsCisweDI0MTEwMDAxLCAweDk2NDMwMDA0LCAweDM0MDJmZmZmLCAweDEwNjIwMDc1LAorMHgwLCAweDkyZTIwNGQ4LCAweDE0NDAwMDcyLCAweDAsCisweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwgMHgyODQyMDAwNSwKKzB4MTA0MDAwMjAsIDB4MzgyMSwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDhjNDI4M2I0LCAweDE4NDAwMDE2LCAweDI4MjEsIDB4OTYwNjAwMDAsCisweDUyMGMwLCAweDk3MTAyMSwgMHg5NDQyNzc3ZSwgMHgxNDQ2MDAwOSwKKzB4OTcxMDIxLCAweDk0NDM3NzgwLCAweDk2MDIwMDAyLCAweDE0NjIwMDA1LAorMHg5NzEwMjEsIDB4OTQ0Mzc3ODIsIDB4OTYwMjAwMDQsIDB4NTA2MjAwMDgsCisweDI0MDcwMDAxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwKKzB4MjRhNTAwMDEsIDB4YTIxMDJhLCAweDU0NDBmZmVlLCAweDUyMGMwLAorMHgzMGUyMDBmZiwgMHgxMDQwMDMwMiwgMHgwLCAweDgwMDM5YTIsCisweDAsIDB4MjQwMjAyMSwgMHhjMDAyMmZlLCAweDI0MDUwMDA2LAorMHgzMDQ0MDAxZiwgMHg0MjhjMCwgMHgyZTUxMDIxLCAweDk0NDI3MjdjLAorMHgzMDQyNDAwMCwgMHgxNDQwMDJmNiwgMHhiNzEwMjEsIDB4OTQ0MzcyN2UsCisweDk2MDIwMDAwLCAweDE0NjIwMDBiLCAweDQxOGMwLCAweGI3MTAyMSwKKzB4OTQ0MzcyODAsIDB4OTYwMjAwMDIsIDB4MTQ2MjAwMDYsIDB4NDE4YzAsCisweGI3MTAyMSwgMHg5NDQzNzI4MiwgMHg5NjAyMDAwNCwgMHgxMDYyMDAzNSwKKzB4NDE4YzAsIDB4MmUzMTAyMSwgMHg5NDQyNzI3YywgMHgzMDQyODAwMCwKKzB4MTQ0MDAyZTMsIDB4MmUzMTAyMSwgMHg5NDRkNzI3YywgMHg5NjA3MDAwMCwKKzB4ZDI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLCAweDgwMDM5ODQsCisweDMwMjEsIDB4NDIwYzAsIDB4MmU0MTAyMSwgMHg5NDQzNzM3YywKKzB4MmU0MTAyMSwgMHg5NDRkNzM3YywgMHgzMDYzODAwMCwgMHgxNDYwMDAxMCwKKzB4ZDI4YzAsIDB4YjcxMDIxLCAweDk0NDI3MzdlLCAweDE0NDdmZmY1LAorMHgxYTAyMDIxLCAweGI3MTAyMSwgMHg5NDQzNzM4MCwgMHg5NjAyMDAwMiwKKzB4NTQ2MmZmZjEsIDB4NDIwYzAsIDB4YjcxMDIxLCAweDk0NDM3MzgyLAorMHg5NjAyMDAwNCwgMHg1NDYyZmZlYywgMHg0MjBjMCwgMHgyNDA2MDAwMSwKKzB4MzBjMjAwZmYsIDB4MTA0MDAyYzIsIDB4MCwgMHg4MDAzOWEyLAorMHgwLCAweDk3NDMwMjAyLCAweDk2NDIwMDAwLCAweDE0NjIwMmJjLAorMHgwLCAweDk3NDMwMjA0LCAweDk2NDIwMDAyLCAweDE0NjIwMmI4LAorMHgwLCAweDk3NDMwMjA2LCAweDk2NDIwMDA0LCAweDE0NjIwMmI0LAorMHgwLCAweDkyNDIwMDAwLCAweDNhMjMwMDAxLCAweDMwNDIwMDAxLAorMHg0MzEwMjQsIDB4MTA0MDAwNzQsIDB4MjQwMmZmZmYsIDB4OGUwMzAwMDAsCisweDE0NjIwMDA0LCAweDM0MDJmZmZmLCAweDk2MDMwMDA0LCAweDEwNjIwMDZmLAorMHgyNDE1MDAwMiwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjgzYjIsCisweDE0NDAwMDZhLCAweDI0MTUwMDAzLCAweDkyZTIwNGQ4LCAweDE0NDAwMDY3LAorMHgwLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyODNiNCwKKzB4Mjg0MjAwMDUsIDB4MTA0MDAwMjAsIDB4MzgyMSwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDhjNDI4M2I0LCAweDE4NDAwMDE2LCAweDI4MjEsCisweDk2MDYwMDAwLCAweDUyMGMwLCAweDk3MTAyMSwgMHg5NDQyNzc3ZSwKKzB4MTQ0NjAwMDksIDB4OTcxMDIxLCAweDk0NDM3NzgwLCAweDk2MDIwMDAyLAorMHgxNDYyMDAwNSwgMHg5NzEwMjEsIDB4OTQ0Mzc3ODIsIDB4OTYwMjAwMDQsCisweDUwNjIwMDA4LCAweDI0MDcwMDAxLCAweDNjMDIwMDAxLCAweDU3MTAyMSwKKzB4OGM0MjgzYjQsIDB4MjRhNTAwMDEsIDB4YTIxMDJhLCAweDU0NDBmZmVlLAorMHg1MjBjMCwgMHgzMGUyMDBmZiwgMHgxNDQwMDA0NCwgMHgyNDE1MDAwMywKKzB4ODAwM2M1NSwgMHgwLCAweDI0MDIwMjEsIDB4YzAwMjJmZSwKKzB4MjQwNTAwMDYsIDB4MzA0NDAwMWYsIDB4NDI4YzAsIDB4MmU1MTAyMSwKKzB4OTQ0MjcyN2MsIDB4MzA0MjQwMDAsIDB4MTQ0MDAyNzEsIDB4YjcxMDIxLAorMHg5NDQzNzI3ZSwgMHg5NjAyMDAwMCwgMHgxNDYyMDAwYiwgMHg0MThjMCwKKzB4YjcxMDIxLCAweDk0NDM3MjgwLCAweDk2MDIwMDAyLCAweDE0NjIwMDA2LAorMHg0MThjMCwgMHhiNzEwMjEsIDB4OTQ0MzcyODIsIDB4OTYwMjAwMDQsCisweDEwNjIwMDI3LCAweDQxOGMwLCAweDJlMzEwMjEsIDB4OTQ0MjcyN2MsCisweDMwNDI4MDAwLCAweDE0NDAwMjVlLCAweDJlMzEwMjEsIDB4OTQ0ZDcyN2MsCisweDk2MDcwMDAwLCAweGQyOGMwLCAweGI3MTAyMSwgMHg5NDQyNzM3ZSwKKzB4ODAwM2EwOSwgMHgzMDIxLCAweDQyMGMwLCAweDJlNDEwMjEsCisweDk0NDM3MzdjLCAweDJlNDEwMjEsIDB4OTQ0ZDczN2MsIDB4MzA2MzgwMDAsCisweDE0NjAwMDEwLCAweGQyOGMwLCAweGI3MTAyMSwgMHg5NDQyNzM3ZSwKKzB4MTQ0N2ZmZjUsIDB4MWEwMjAyMSwgMHhiNzEwMjEsIDB4OTQ0MzczODAsCisweDk2MDIwMDAyLCAweDU0NjJmZmYxLCAweDQyMGMwLCAweGI3MTAyMSwKKzB4OTQ0MzczODIsIDB4OTYwMjAwMDQsIDB4NTQ2MmZmZWMsIDB4NDIwYzAsCisweDI0MDYwMDAxLCAweDMwYzIwMGZmLCAweDEwNDAwMjNkLCAweDAsCisweDgwMDNhMWMsIDB4MjQxNTAwMDMsIDB4MjQxNTAwMDEsIDB4OGY0MjAyNjAsCisweDUzMTAyYiwgMHgxMDQwMDAzNiwgMHgwLCAweDhmODMwMGU0LAorMHg4ZjgyMDBlMCwgMHgxMDYyMDAwMywgMHgyNDYzMDAwOCwgMHhhZjgzMDBlNCwKKzB4YWY4MzAwZTgsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4MjYwMTgyMSwKKzB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwKKzB4ODYyMDIxLCAweGFlZTQwMGMwLCAweGFlZTUwMGM0LCAweDhlZTIwMDU4LAorMHgyNDQyMDAwMSwgMHhhZWUyMDA1OCwgMHg4ZWUyMDA1OCwgMHg4ZWUyMDA3YywKKzB4MjQ0MjAwMDEsIDB4YWVlMjAwN2MsIDB4OGVlMjAwN2MsIDB4OGY4MjAwZTAsCisweGFmYTIwMDEwLCAweDhmODIwMGU0LCAweDNjMDQwMDAxLCAweDI0ODQ1OGMwLAorMHhhZmEyMDAxNCwgMHg4ZmE2MDAxOCwgMHg4ZmE3MDAxYywgMHgzYzA1MDAwNiwKKzB4YzAwMjQwMywgMHgzNGE1ZjIwMywgMHg4MDAzYzViLCAweDAsCisweDhlZTI1MjQwLCAweGFmYTIwMDEwLCAweDhlZTI1MjQ0LCAweDNjMDQwMDAxLAorMHgyNDg0NThjYywgMHhhZmEyMDAxNCwgMHg4ZWU2MGUxMCwgMHg4ZWU3MGUxOCwKKzB4M2MwNTAwMDYsIDB4YzAwMjQwMywgMHgzNGE1ZjIwMiwgMHg4ZWUyMDFjMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxYzAsIDB4ODAwM2MwMiwgMHg4ZWUyMDFjMCwKKzB4OTZlMjA0NjgsIDB4NTMxMDJiLCAweDU0NDAwMDAxLCAweDNjMTY4MDAwLAorMHgxMjYwMDFjYiwgMHgzYzBlMDAxZiwgMHgzNWNlZmZmZiwgMHgzYzBmZmZmNSwKKzB4MzVlZjEwMDAsIDB4MjQxZTAwNDAsIDB4OGVlMjcyNGMsIDB4OGY0MzAyODAsCisweDI0NDIwMDAxLCAweDMwNDIwN2ZmLCAweDEwNjIwMTllLCAweDAsCisweDEyYzAwMDEyLCAweDAsIDB4OGVlMzUyNDAsIDB4OGVlMjUyNDQsCisweDEwNjIwMDBhLCAweDI2Zjg1MjQ0LCAweDhlZjQ1MjQ0LCAweGFmYjgwMDI0LAorMHg4ZWUzNTI0NCwgMHgyMTE0MCwgMHgyNDQyNTI0OCwgMHgyZTI4ODIxLAorMHgyNDYzMDAwMSwgMHg4MDAzYTg1LCAweDMwNmQwMGZmLCAweDhlZTIwMWUwLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFlMCwgMHg4ZWUyMDFlMCwgMHg4ZWUzMGUxMCwKKzB4OGVlMjBlMTgsIDB4MTA2MmZmY2EsIDB4MjZmODBlMTgsIDB4OGVmNDBlMTgsCisweGIwMjEsIDB4YWZiODAwMjQsIDB4OGVlMzBlMTgsIDB4MjExNDAsCisweDI0NDIwZTIwLCAweDJlMjg4MjEsIDB4MjQ2MzAwMDEsIDB4MzA2ZDAxZmYsCisweDk2ZTIwNDZhLCAweDMwNDIwMDEwLCAweDEwNDAwMDE4LCAweDM0MDI4MTAwLAorMHg5NjQzMDAwYywgMHgxNDYyMDAxNSwgMHgwLCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OTA0MjgzYzAsIDB4MTQ0MDAwMTAsIDB4MCwKKzB4OTY0MjAwMGUsIDB4YTYyMjAwMTYsIDB4OGU0MjAwMDgsIDB4OGU0MzAwMDQsCisweDhlNDQwMDAwLCAweDI2NzNmZmZjLCAweGFlNDIwMDBjLCAweGFlNDMwMDA4LAorMHhhZTQ0MDAwNCwgMHg5NjIyMDAwZSwgMHgyNjEwMDAwNCwgMHgyNDE4MDAwMSwKKzB4YTNiODAwMmYsIDB4MzQ0MjAyMDAsIDB4YTYyMjAwMGUsIDB4OGUyMjAwMDAsCisweDhlMjMwMDA0LCAweDNjMDQwMDAxLCAweDM0ODQzODAwLCAweDIwMDMwMjEsCisweDMwNmEwMDA3LCAweDIwYTgwMjMsIDB4MzY0MTAyMSwgMHgyMDIxMDJiLAorMHgxMDQwMDAwNSwgMHgyNmE5ODIxLCAweDIwNDEwMjMsIDB4MzYyMTgyMywKKzB4M2MwMjAwMjAsIDB4NDM4MDIzLCAweDI2NjIwMDA3LCAweDk2MjMwMDBhLAorMHgyNDE4ZmZmOCwgMHg1OGM4MjQsIDB4NmExODIxLCAweDc5MTAyYiwKKzB4MTA0MDAwMDIsIDB4MzIwNjAyMSwgMHg2MDYwMjEsIDB4MTgwMTgyMSwKKzB4MjQ2MjAwMDcsIDB4MjQxOGZmZjgsIDB4NTg2MDI0LCAweDI2YzEwMmIsCisweDE0NDAwMDA0LCAweDE5MzI4MjMsIDB4MTgzMjgyMywgMHg4MDAzYWMzLAorMHhjMzEwMjEsIDB4ZDMxMDIxLCAweDRhMjAyMywgMHgxYzQxMDJiLAorMHg1NDQwMDAwMSwgMHg4ZjIwMjEsIDB4MjU0MjAwNDAsIDB4NGMxMDJiLAorMHgxNDQwMDAzNSwgMHg1ODIxLCAweDk0YzMwMDBjLCAweDI0MDIwODAwLAorMHg1NDYyMDAzMiwgMHhhZTI2MDAxOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI4M2MwLCAweDU0NDAwMDJkLCAweGFlMjYwMDE4LCAweDI0YzIwMDE3LAorMHgxYzIxMDJiLCAweDEwNDAwMDEzLCAweDAsIDB4M2MwMmZmZjUsCisweDQ2MTAyMSwgMHg5MDQyMTAxNywgMHgzODQzMDAwNiwgMHgyYzYzMDAwMSwKKzB4Mzg0MjAwMTEsIDB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDE0LAorMHgyNGMyMDAxMCwgMHgxYzIxMDJiLCAweDEwNDAwMDBlLCAweDAsCisweDNjMGJmZmY1LCAweDE2NjU4MjEsIDB4OTU2YjEwMTAsIDB4ODAwM2FmNCwKKzB4MjU2MjAwMGUsIDB4OTBjMjAwMTcsIDB4Mzg0MzAwMDYsIDB4MmM2MzAwMDEsCisweDM4NDIwMDExLCAweDJjNDIwMDAxLCAweDYyMTgyNSwgMHgxMDYwMDAwNSwKKzB4MTYwMTgyMSwgMHg5NGNiMDAxMCwgMHgyNTYyMDAwZSwgMHg0YTU4MjEsCisweDE2MDE4MjEsIDB4MjQ2MjAwMDcsIDB4MjQxOGZmZjgsIDB4NTg1ODI0LAorMHhjMzEwMjEsIDB4NGEyMDIzLCAweDFjNDEwMmIsIDB4MTA0MDAwMDIsCisweDE2MzI4MjMsIDB4OGYyMDIxLCAweGFlMjYwMDE4LCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OTA0MjgzYzAsIDB4MjEwMmIsIDB4MjE2YzAsCisweDE1NjAwMDAyLCAweGFmYTIwMDQ0LCAweDE4MDU4MjEsIDB4MzA4MjAwMDEsCisweDEwNDAwMDA3LCAweDQwMjEsIDB4OTA4ODAwMDAsIDB4MjQ4NDAwMDEsCisweDFjNDEwMmIsIDB4MTA0MDAwMDIsIDB4MjRhNWZmZmYsIDB4OGYyMDIxLAorMHg1MGEwMDAxMiwgMHg4MWMwMiwgMHgyY2EyMDAwMiwgMHg1NDQwMDAwOSwKKzB4MjRhNWZmZmYsIDB4OTQ4MjAwMDAsIDB4MjQ4NDAwMDIsIDB4MTAyNDAyMSwKKzB4MWM0MTAyYiwgMHgxMDQwMDAwNiwgMHgyNGE1ZmZmZSwgMHg4MDAzYjIxLAorMHg4ZjIwMjEsIDB4OTA4MjAwMDAsIDB4MjEyMDAsIDB4MTAyNDAyMSwKKzB4MTRhMGZmZjIsIDB4MmNhMjAwMDIsIDB4ODFjMDIsIDB4MzEwMmZmZmYsCisweDYyNDAyMSwgMHgzMTA4ZmZmZiwgMHgxNDAyODIxLCAweDExNDAwMDExLAorMHgyMDAyMDIxLCAweDJjYTIwMDAyLCAweDU0NDAwMDA5LCAweDI0YTVmZmZmLAorMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHgxMDI0MDIxLCAweDFjNDEwMmIsCisweDEwNDAwMDA2LCAweDI0YTVmZmZlLCAweDgwMDNiMzgsIDB4OGYyMDIxLAorMHg5MDgyMDAwMCwgMHgyMTIwMCwgMHgxMDI0MDIxLCAweDE0YTBmZmYyLAorMHgyY2EyMDAwMiwgMHg4MWMwMiwgMHgzMTAyZmZmZiwgMHg2MjQwMjEsCisweDgxYzAyLCAweDMxMDJmZmZmLCAweDhmODkwMTIwLCAweDYyNDAyMSwKKzB4Mjc2MjM4MDAsIDB4MjUyMzAwMjAsIDB4NjIxMDJiLCAweDE0NDAwMDAyLAorMHgzMTA4ZmZmZiwgMHgyNzYzMzAwMCwgMHg4ZjgyMDEyOCwgMHgxMDYyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNDYyMDAwNywgMHgxNDAyODIxLAorMHg4ZWUyMDFhNCwgMHgzODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDAzYmM5LCAweDhlZTIwMWE0LCAweDhlMjYwMDAwLCAweDhlMjcwMDA0LAorMHg4MTQwMCwgMHgzNDQ4MDAwYiwgMHhhZDMwMDAwOCwgMHhhNTJiMDAwZSwKKzB4YWQyODAwMTgsIDB4OGZiODAwNDQsIDB4MjAyMSwgMHgyOTYxMDI1LAorMHg1ODEwMjUsIDB4YWQyMjAwMWMsIDB4ZTUxMDJiLCAweGU1MzgyMywKKzB4YzQzMDIzLCAweGMyMzAyMywgMHhhZDI2MDAwMCwgMHhhZDI3MDAwNCwKKzB4OGVlMjA0YzAsIDB4YWQyMjAwMTAsIDB4YWY4MzAxMjAsIDB4OTJlMjRlMjAsCisweDE0NDAwMDVmLCAweDI0MDcwMDAxLCAweDI1MDJmZmVlLCAweDJjNDIwMDAyLAorMHgxNDQwMDAwMywgMHgyNDAyMDAxMSwgMHgxNTAyMDAyNCwgMHgwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHg4YzgzMDAwMCwgMHgyNDAyMDAxMiwgMHgxNDYyMDAwZiwgMHgwLAorMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAwYiwgMHgwLAorMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwKKzB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA1ZTAwMmEsIDB4MCwKKzB4ODAwM2JhOCwgMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHg1MDVlMDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLAorMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwKKzB4MmUyMjAyMSwgMHg4MDAzYmM2LCAweDI0MDIwMDEyLCAweDhlZTI0ZTMwLAorMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODMwMDAwLAorMHgyNDAyMDAwNywgMHgxNDYyMDAxZiwgMHgwLCAweDhlZTM0ZTMwLAorMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwgMHgwLCAweDhjODIwMDA0LAorMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwgMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwKKzB4MjQ0MjAwMDEsIDB4MTA1ZTAwMDcsIDB4MCwgMHg4ZWUyNGUzNCwKKzB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsIDB4MCwgMHg4MDAzYmI0LAorMHgwLCAweDE0NjAwMDA1LCAweDAsIDB4OGY4MjAxMjgsCisweDI0NDIwMDIwLCAweGFmODIwMTI4LCAweDhmODIwMTI4LCAweDhjODIwMDA0LAorMHgyYzQyMDAxMSwgMHg1MDQwMDAxMiwgMHhhYzgwMDAwMCwgMHg4MDAzYmM5LAorMHgwLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweDUwNWUwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTMwLCAweDI0NDIwMDAxLCAweGFlZTI0ZTMwLAorMHg4ZWUyNGUzMCwgMHgyMTBjMCwgMHgyNDQyNTAzOCwgMHgyZTIyMDIxLAorMHgyNDAyMDAwNywgMHhhYzgyMDAwMCwgMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwKKzB4MTRlMDAwMTksIDB4M2MwNTAwMDYsIDB4M2MwNDAwMDEsIDB4MjQ4NDU4OTAsCisweDhlMjIwMDE4LCAweDM0YTVmMjA5LCAweGFmYTIwMDEwLCAweDhlMjIwMDAwLAorMHg4ZTIzMDAwNCwgMHgyMjAzMDIxLCAweDE2MDM4MjEsIDB4YzAwMjQwMywKKzB4YWZhMzAwMTQsIDB4OTNhMjAwMmYsIDB4MTA0MDAwMmEsIDB4MzQwMjgxMDAsCisweDhlNDMwMDA0LCAweDhlNDQwMDA4LCAweDhlNDUwMDBjLCAweGE2NDIwMDBjLAorMHhhZTQzMDAwMCwgMHhhZTQ0MDAwNCwgMHhhZTQ1MDAwOCwgMHg5NjIyMDAxNiwKKzB4ODAwM2MwMiwgMHhhNjQyMDAwZSwgMHgxNTk5MDAwYSwgMHgyNmExODIzLAorMHg5NjIyMDAwZSwgMHhhNjIzMDAwYSwgMHgzNDQyMDAwNCwgMHhhNjIyMDAwZSwKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA4M2MwLCAweDgwMDNiZmYsCisweDk4MjEsIDB4OTYyNDAwMGEsIDB4ODMxMDJiLCAweDU0NDAwMDAxLAorMHg4MDE4MjEsIDB4MjQwMjAwMDEsIDB4YTYyMzAwMGEsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhMDIyODNjMCwgMHg5NjIyMDAwYSwgMHg0YTE4MjEsCisweDIwMzgwMjEsIDB4MWQwMTAyYiwgMHg1NDQwMDAwMSwgMHgyMGY4MDIxLAorMHgyNjM5ODIzLCAweGIwMjEsIDB4OGZiODAwMjQsIDB4MTY2MGZlNWUsCisweGFmMGQwMDAwLCAweDEyNjAwMDIyLCAweDAsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhYzMzODNjNCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMzA4M2M4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzMyODNjYywKKzB4OTNhMjAwMmYsIDB4MTA0MDAwMDgsIDB4MCwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDhjNDI4M2NjLCAweDI0NDIwMDA0LCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4YWMyMjgzY2MsIDB4OGY0MzAyODAsIDB4OGVlMjcyNGMsCisweDE0NjIwMDA2LCAweDAsIDB4OGVlMjAxYzQsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWM0LCAweDgwMDNjNWIsIDB4OGVlMjAxYzQsIDB4OGVlMjAxYmMsCisweDI0NDIwMDAxLCAweGFlZTIwMWJjLCAweDgwMDNjNWIsIDB4OGVlMjAxYmMsCisweDk3YTQwMDFlLCAweDI0ODRmZmZjLCAweDgwMTgyMSwgMHg4ZWU0MDBjMCwKKzB4OGVlNTAwYzQsIDB4MTAyMSwgMHhhMzI4MjEsIDB4YTMzMDJiLAorMHg4MjIwMjEsIDB4ODYyMDIxLCAweDI0MDIwMDAyLCAweGFlZTQwMGMwLAorMHhhZWU1MDBjNCwgMHgxMmEyMDAwZiwgMHgyYWEyMDAwMywgMHgxNDQwMDAxNywKKzB4MjQwMjAwMDMsIDB4MTZhMjAwMTUsIDB4MCwgMHg4ZWUyMDBkMCwKKzB4OGVlMzAwZDQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLAorMHhhZWUyMDBkMCwgMHhhZWUzMDBkNCwgMHg4ZWUyMDBkMCwgMHg4MDAzYzU1LAorMHg4ZWUzMDBkNCwgMHg4ZWUyMDBkOCwgMHg4ZWUzMDBkYywgMHgyNDYzMDAwMSwKKzB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFlZTIwMGQ4LCAweGFlZTMwMGRjLAorMHg4ZWUyMDBkOCwgMHg4MDAzYzU1LCAweDhlZTMwMGRjLCAweDhlZTIwMGM4LAorMHg4ZWUzMDBjYywgMHgyNDYzMDAwMSwgMHgyYzY0MDAwMSwgMHg0NDEwMjEsCisweGFlZTIwMGM4LCAweGFlZTMwMGNjLCAweDhlZTIwMGM4LCAweDhlZTMwMGNjLAorMHg4ZjgzMDBlNCwgMHg4ZjgyMDBlMCwgMHgxMDYyMDAwMywgMHgyNDYzMDAwOCwKKzB4YWY4MzAwZTQsIDB4YWY4MzAwZTgsIDB4OGZiZjAwNjgsIDB4OGZiZTAwNjQsCisweDhmYjYwMDYwLCAweDhmYjUwMDVjLCAweDhmYjQwMDU4LCAweDhmYjMwMDU0LAorMHg4ZmIyMDA1MCwgMHg4ZmIxMDA0YywgMHg4ZmIwMDA0OCwgMHgzZTAwMDA4LAorMHgyN2JkMDA3MCwgMHgyN2JkZmZlMCwgMHhhZmJmMDAxOCwgMHg4ZWUzMGUxNCwKKzB4OGVlMjBlMGMsIDB4MTA2MjAwNzQsIDB4MCwgMHg4ZWUzMGUwYywKKzB4OGVlMjBlMTQsIDB4NjIyMDIzLCAweDQ4MjAwMDEsIDB4MjQ4NDAyMDAsCisweDhlZTMwZTE4LCAweDhlZTIwZTE0LCAweDQzMTAyYiwgMHgxNDQwMDAwNCwKKzB4MjQwMjAyMDAsIDB4OGVlMzBlMTQsIDB4ODAwM2M3ZCwgMHg0MzE4MjMsCisweDhlZTIwZTE4LCAweDhlZTMwZTE0LCAweDQzMTAyMywgMHgyNDQzZmZmZiwKKzB4ODA0ODIxLCAweDY5MTAyYSwgMHg1NDQwMDAwMSwgMHg2MDQ4MjEsCisweDhmODcwMTAwLCAweDI3NjIzMDAwLCAweDI0ZTgwMDIwLCAweDEwMjEwMmIsCisweDUwNDAwMDAxLCAweDI3NjgyODAwLCAweDhmODIwMTA4LCAweDExMDIwMDA0LAorMHgwLCAweDhmODIwMTA0LCAweDE1MDIwMDA3LCAweDEwMjEsCisweDhlZTIwMWE4LCAweDIwMjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxYTgsCisweDgwMDNjYmYsIDB4OGVlMjAxYTgsIDB4OGVlNDBlMTQsIDB4NDIxNDAsCisweDgwMTgyMSwgMHg4ZWU0MDQ2MCwgMHg4ZWU1MDQ2NCwgMHhhMzI4MjEsCisweGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFjZTQwMDAwLAorMHhhY2U1MDAwNCwgMHg4ZWUzMGUxNCwgMHg5MTE0MCwgMHhhNGUyMDAwZSwKKzB4MjQwMjAwMDIsIDB4YWNlMjAwMTgsIDB4MzE5NDAsIDB4MjQ2MzBlMjAsCisweDJlMzEwMjEsIDB4YWNlMjAwMDgsIDB4OGVlMjBlMTQsIDB4YWNlMjAwMWMsCisweDhlZTIwNGNjLCAweGFjZTIwMDEwLCAweGFmODgwMTAwLCAweDkyZTIwNGVjLAorMHgxNDQwMDAxMSwgMHgyNDA0MDAwMSwgMHg4ZWUyNGUyOCwgMHgyNDAzMDA0MCwKKzB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUyOCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsIDB4OGVlMjRlMjgsIDB4MjEwYzAsCisweDI0NDI0ZTM4LCAweDJlMjE4MjEsIDB4MjQwMjAwMDIsIDB4YWM2MjAwMDAsCisweDI0MDIwMDAxLCAweGFjNjIwMDA0LCAweDE0ODAwMDBlLCAweDI0MDMwMDQwLAorMHg4ZWUyMGUxNCwgMHhhZmEyMDAxMCwgMHg4ZWUyMGUxOCwgMHgzYzA1MDAwNywKKzB4YWZhMjAwMTQsIDB4OGVlNjBlMGMsIDB4OGVlNzBlMTAsIDB4M2MwNDAwMDEsCisweDI0ODQ1OGQ0LCAweGMwMDI0MDMsIDB4MzRhNWYwMDEsIDB4ODAwM2NkZCwKKzB4MCwgMHg4ZWUyMDUwMCwgMHgyNDQyMDAwMSwgMHg1MDQzMDAwMywKKzB4MTAyMSwgMHg4ZWUyMDUwMCwgMHgyNDQyMDAwMSwgMHhhZWUyMDUwMCwKKzB4OGVlMjA1MDAsIDB4MjEwODAsIDB4NTcxMDIxLCAweGFjNDkwNTA4LAorMHg4ZWUyMGUxNCwgMHg0OTEwMjEsIDB4MzA0MjAxZmYsIDB4YWVlMjBlMTQsCisweDhlZTMwZTE0LCAweDhlZTIwZTBjLCAweDE0NjIwMDA1LCAweDAsCisweDhmODIwMDYwLCAweDI0MDNmZGZmLCAweDQzMTAyNCwgMHhhZjgyMDA2MCwKKzB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlMCwKKzB4YWZiZjAwMTgsIDB4OGVlMzUyM2MsIDB4OGVlMjUyMzgsIDB4MTA2MjAwNzQsCisweDAsIDB4OGVlMzUyMzgsIDB4OGVlMjUyM2MsIDB4NjIyMDIzLAorMHg0ODIwMDAxLCAweDI0ODQwMTAwLCAweDhlZTM1MjQ0LCAweDhlZTI1MjNjLAorMHg0MzEwMmIsIDB4MTQ0MDAwMDQsIDB4MjQwMjAxMDAsIDB4OGVlMzUyM2MsCisweDgwMDNjZmYsIDB4NDMxODIzLCAweDhlZTI1MjQ0LCAweDhlZTM1MjNjLAorMHg0MzEwMjMsIDB4MjQ0M2ZmZmYsIDB4ODA0ODIxLCAweDY5MTAyYSwKKzB4NTQ0MDAwMDEsIDB4NjA0ODIxLCAweDhmODcwMTAwLCAweDI3NjIzMDAwLAorMHgyNGU4MDAyMCwgMHgxMDIxMDJiLCAweDUwNDAwMDAxLCAweDI3NjgyODAwLAorMHg4ZjgyMDEwOCwgMHgxMTAyMDAwNCwgMHgwLCAweDhmODIwMTA0LAorMHgxNTAyMDAwNywgMHgxMDIxLCAweDhlZTIwMWE4LCAweDIwMjEsCisweDI0NDIwMDAxLCAweGFlZTIwMWE4LCAweDgwMDNkNDEsIDB4OGVlMjAxYTgsCisweDhlZTQ1MjNjLCAweDQyMTQwLCAweDgwMTgyMSwgMHg4ZWU0MDQ3MCwKKzB4OGVlNTA0NzQsIDB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsCisweDg2MjAyMSwgMHhhY2U0MDAwMCwgMHhhY2U1MDAwNCwgMHg4ZWUzNTIzYywKKzB4OTExNDAsIDB4YTRlMjAwMGUsIDB4MjQwMjAwMDMsIDB4YWNlMjAwMTgsCisweDMxOTQwLCAweDI0NjM1MjQ4LCAweDJlMzEwMjEsIDB4YWNlMjAwMDgsCisweDhlZTI1MjNjLCAweGFjZTIwMDFjLCAweDhlZTIwNGNjLCAweGFjZTIwMDEwLAorMHhhZjg4MDEwMCwgMHg5MmUyMDRlYywgMHgxNDQwMDAxMSwgMHgyNDA0MDAwMSwKKzB4OGVlMjRlMjgsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsCisweDEwMjEsIDB4OGVlMjRlMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMjgsCisweDhlZTI0ZTI4LCAweDIxMGMwLCAweDI0NDI0ZTM4LCAweDJlMjE4MjEsCisweDI0MDIwMDAzLCAweGFjNjIwMDAwLCAweDI0MDIwMDAxLCAweGFjNjIwMDA0LAorMHgxNDgwMDAwZSwgMHgyNDAzMDA0MCwgMHg4ZWUyNTIzYywgMHhhZmEyMDAxMCwKKzB4OGVlMjUyNDQsIDB4M2MwNTAwMDcsIDB4YWZhMjAwMTQsIDB4OGVlNjUyMzgsCisweDhlZTc1MjQwLCAweDNjMDQwMDAxLCAweDI0ODQ1OGUwLCAweGMwMDI0MDMsCisweDM0YTVmMDEwLCAweDgwMDNkNWYsIDB4MCwgMHg4ZWUyMDUwMCwKKzB4MjQ0MjAwMDEsIDB4NTA0MzAwMDMsIDB4MTAyMSwgMHg4ZWUyMDUwMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjA1MDAsIDB4OGVlMjA1MDAsIDB4MjEwODAsCisweDU3MTAyMSwgMHhhYzQ5MDUwOCwgMHg4ZWUyNTIzYywgMHg0OTEwMjEsCisweDMwNDIwMGZmLCAweGFlZTI1MjNjLCAweDhlZTM1MjNjLCAweDhlZTI1MjM4LAorMHgxNDYyMDAwNSwgMHgwLCAweDhmODIwMDYwLCAweDI0MDNmZWZmLAorMHg0MzEwMjQsIDB4YWY4MjAwNjAsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMjAsIDB4OGY4MjAxMjAsIDB4OGVlMzRlMzQsIDB4OGY4MjAxMjQsCisweDhmODYwMTI4LCAweDI0MDIwMDQwLCAweDI0NjMwMDAxLCAweDUwNjIwMDAzLAorMHgxMDIxLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweGFlZTI0ZTM0LAorMHg4ZWUyNGUzNCwgMHg4ZWU0NGUzNCwgMHg4ZWUzNGUzMCwgMHgyMTBjMCwKKzB4MjQ0MjUwMzgsIDB4MTQ4MzAwMDcsIDB4MmUyMjgyMSwgMHg4ZjgyMDEyOCwKKzB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4ODAwM2Q5MiwKKzB4YWNhMDAwMDAsIDB4OGVlMjRlMzQsIDB4MjQwMzAwNDAsIDB4MjQ0MjAwMDEsCisweDUwNDMwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsCisweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjI4MjEsIDB4OGNhMjAwMDQsCisweDhmODMwMTI4LCAweDIxMTQwLCAweDYyMTgyMSwgMHhhZjgzMDEyOCwKKzB4YWNhMDAwMDAsIDB4OGNjMjAwMTgsIDB4MjQ0M2ZmZmUsIDB4MmM2MjAwMTIsCisweDEwNDAwMDA4LCAweDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwKKzB4OGMyMjU4ZjAsIDB4NDAwMDA4LCAweDAsIDB4MjQwMjAwMDEsCisweGFlZTI0ZTI0LCAweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZjOCwKKzB4YWZiZjAwMzAsIDB4YWZiNTAwMmMsIDB4YWZiNDAwMjgsIDB4YWZiMzAwMjQsCisweGFmYjIwMDIwLCAweGFmYjEwMDFjLCAweGFmYjAwMDE4LCAweDhmODMwMTI4LAorMHg4ZjgyMDEyNCwgMHgxMDYyMDJiMCwgMHg5ODIxLCAweDNjMTEwMDFmLAorMHgzNjMxZmZmZiwgMHgzYzEyZmZmNSwgMHgzNjUyMTAwMCwgMHgyNDE1MDAxMiwKKzB4MjQxNDAwNDAsIDB4OGY4YzAxMjgsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsCisweGFmODIwMTI4LCAweDkxODIwMDFiLCAweDhmODMwMTI4LCAweDI0NDNmZmZlLAorMHgyYzYyMDAxMiwgMHgxMDQwMDI5YywgMHgzMTA4MCwgMHgzYzAxMDAwMSwKKzB4MjIwODIxLCAweDhjMjI1OTQ4LCAweDQwMDAwOCwgMHgwLAorMHg4ZjQyMDIxOCwgMHgzMDQyMDEwMCwgMHgxMDQwMDAwNywgMHgwLAorMHg5NTgzMDAxNiwgMHg5NTgyMDAxOCwgMHg2MjE4MjMsIDB4MzE0MDIsCisweDQzMTAyMSwgMHhhNTgyMDAxNiwgMHg4ZDgyMDAxYywgMHgzYzAzODAwMCwKKzB4MzA0NGZmZmYsIDB4NDM2ODI0LCAweDNjMDMwODAwLCAweDQzMTgyNCwKKzB4MTFhMDAwMDQsIDB4YWQ4NDAwMWMsIDB4NDExNDAsIDB4ODAwM2RkOCwKKzB4MjQ0MjUyNDgsIDB4NDExNDAsIDB4MjQ0MjBlMjAsIDB4MmUyNTgyMSwKKzB4OTU2MjAwMGUsIDB4MzA0MmZmZmMsIDB4MTA2MDAwMDQsIDB4YTU2MjAwMGUsCisweDk1ODQwMDE2LCAweDgwMDNlYzAsIDB4MCwgMHg4ZDY5MDAxOCwKKzB4NDAyMSwgMHg5NTJhMDAwMCwgMHgyNTI5MDAwMiwgMHg5NTI3MDAwMCwKKzB4MjUyOTAwMDIsIDB4OTUyNjAwMDAsIDB4MjUyOTAwMDIsIDB4OTUyNTAwMDAsCisweDI1MjkwMDAyLCAweDk1MjQwMDAwLCAweDI1MjkwMDAyLCAweDk1MjMwMDAwLAorMHgyNTI5MDAwMiwgMHg5NTIyMDAwMCwgMHgyNTI5MDAwMiwgMHgxNDc1MDIxLAorMHgxNDY1MDIxLCAweDE0NTUwMjEsIDB4MTQ0NTAyMSwgMHgxNDM1MDIxLAorMHgxNDI1MDIxLCAweGExYzAyLCAweDMxNDJmZmZmLCAweDYyNTAyMSwKKzB4YTFjMDIsIDB4MzE0MmZmZmYsIDB4NjI1MDIxLCAweDk2ZTIwNDZhLAorMHgzMTRlZmZmZiwgMHgzMDQyMDAwMiwgMHgxMDQwMDA0NCwgMHg1MDIxLAorMHgyNTIyMDAxNCwgMHgyMjIxMDJiLCAweDEwNDAwMDE0LCAweDEyMDE4MjEsCisweDI0MDUwMDBhLCAweDIwMjEsIDB4MjIzMTAyYiwgMHg1NDQwMDAwMSwKKzB4NzIxODIxLCAweDk0NjIwMDAwLCAweDI0NjMwMDAyLCAweDI0YTVmZmZmLAorMHgxNGEwZmZmOSwgMHg4MjIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsCisweDYyMjAyMSwgMHg0MTQwMiwgMHgzMDgzZmZmZiwgMHg0MzEwMjEsCisweDMwNDJmZmZmLCAweDgwMDNlMzMsIDB4MTQyNTAyMSwgMHg5NTJhMDAwMCwKKzB4MjUyOTAwMDIsIDB4OTUyODAwMDAsIDB4MjUyOTAwMDIsIDB4OTUyNzAwMDAsCisweDI1MjkwMDAyLCAweDk1MjYwMDAwLCAweDI1MjkwMDAyLCAweDk1MjUwMDAwLAorMHgyNTI5MDAwMiwgMHg5NTIzMDAwMCwgMHgyNTI5MDAwMiwgMHg5NTIyMDAwMCwKKzB4MjUyOTAwMDIsIDB4OTUyNDAwMDAsIDB4MjUyOTAwMDIsIDB4MTQ4NTAyMSwKKzB4MTQ3NTAyMSwgMHgxNDY1MDIxLCAweDE0NTUwMjEsIDB4MTQzNTAyMSwKKzB4MTQyNTAyMSwgMHg5NTIyMDAwMCwgMHg5NTIzMDAwMiwgMHgxNDQ1MDIxLAorMHgxNDI1MDIxLCAweDE0MzUwMjEsIDB4YTFjMDIsIDB4MzE0MmZmZmYsCisweDYyNTAyMSwgMHhhMWMwMiwgMHgzMTQyZmZmZiwgMHg2MjUwMjEsCisweDMxNDhmZmZmLCAweDUxMDAwMDAxLCAweDM0MDhmZmZmLCAweDhkNjIwMDE4LAorMHg5NDQzMDAwYywgMHgyNDAyMDgwMCwgMHg1NDYyMDAwNSwgMHhhNTY4MDAxMCwKKzB4OTU2MjAwMGUsIDB4MzQ0MjAwMDIsIDB4YTU2MjAwMGUsIDB4YTU2ODAwMTAsCisweDk2ZTIwNDZhLCAweDI4MjEsIDB4MzA0MjAwMDgsIDB4MTQ0MDAwNTYsCisweDMwMjEsIDB4OGQ2MzAwMTgsIDB4MjQ2MjAwMjQsIDB4MjIyMTAyYiwKKzB4MTA0MDAwMzQsIDB4MjQ2OTAwMTAsIDB4MjI5MTAyYiwgMHg1NDQwMDAwMSwKKzB4MTMyNDgyMSwgMHg5NTI1MDAwMCwgMHgyNDY5MDAxNCwgMHgyMjkxMDJiLAorMHgxMDQwMDAwMiwgMHgyNGE1ZmZlYywgMHgxMzI0ODIxLCAweDk1MjIwMDAwLAorMHgzMDQyMGZmZiwgMHgxNDQwMDAwMywgMHgyNTI5MDAwMiwgMHg4MDAzZTYwLAorMHgyNDEzMDAwMSwgMHg5ODIxLCAweGEwMzAyMSwgMHgyMjkxMDJiLAorMHg1NDQwMDAwMSwgMHgxMzI0ODIxLCAweDkxMjIwMDAxLCAweDI1MjkwMDAyLAorMHhhMjI4MjEsIDB4MjI5MTAyYiwgMHg1NDQwMDAwMSwgMHgxMzI0ODIxLAorMHgyNTI5MDAwMiwgMHgyMjkxMDJiLCAweDU0NDAwMDAxLCAweDEzMjQ4MjEsCisweDk1MjIwMDAwLCAweDI1MjkwMDAyLCAweGEyMjgyMSwgMHgyMjkxMDJiLAorMHg1NDQwMDAwMSwgMHgxMzI0ODIxLCAweDk1MjIwMDAwLCAweDI1MjkwMDAyLAorMHhhMjI4MjEsIDB4MjI5MTAyYiwgMHg1NDQwMDAwMSwgMHgxMzI0ODIxLAorMHg5NTIyMDAwMCwgMHgyNTI5MDAwMiwgMHhhMjI4MjEsIDB4MjI5MTAyYiwKKzB4NTQ0MDAwMDEsIDB4MTMyNDgyMSwgMHg5NTIyMDAwMCwgMHg4MDAzZTk5LAorMHhhMjI4MjEsIDB4OTQ2NTAwMTAsIDB4OTQ2MjAwMTQsIDB4MjQ2OTAwMTYsCisweDMwNDIwZmZmLCAweDE0NDAwMDAzLCAweDI0YTVmZmVjLCAweDgwMDNlOGMsCisweDI0MTMwMDAxLCAweDk4MjEsIDB4YTAzMDIxLCAweDkxMjMwMDAxLAorMHgyNTI5MDAwNCwgMHg5NTIyMDAwMCwgMHgyNTI5MDAwMiwgMHg5NTI0MDAwMCwKKzB4MjUyOTAwMDIsIDB4YTMyODIxLCAweGEyMjgyMSwgMHg5NTIyMDAwMCwKKzB4OTUyMzAwMDIsIDB4YTQyODIxLCAweGEyMjgyMSwgMHhhMzI4MjEsCisweDUxYzAyLCAweDMwYTJmZmZmLCAweDYyMjgyMSwgMHg1MWMwMiwKKzB4MzBhMmZmZmYsIDB4NjIyODIxLCAweDk2ZTIwNDZhLCAweDMwNDIwMDAxLAorMHgxMDQwMDAxZSwgMHgyMDIxLCAweDk1ODIwMDE2LCAweDRlMjAyMywKKzB4NDE0MDIsIDB4ODIyMDIxLCAweDMyNjIwMGZmLCAweDUwNDAwMDAyLAorMHg4NjIwMjEsIDB4ODUyMDIxLCAweDQxNDAyLCAweDgyMjAyMSwKKzB4MzA4NGZmZmYsIDB4NTA4MDAwMDEsIDB4MzQwNGZmZmYsIDB4OGQ2MjAwMTgsCisweDI0NDMwMDE3LCAweDIyMzEwMmIsIDB4NTQ0MDAwMDEsIDB4NzIxODIxLAorMHg5MDYyMDAwMCwgMHgzODQzMDAxMSwgMHgyYzYzMDAwMSwgMHgzODQyMDAwNiwKKzB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDA0LCAweDAsCisweDk1NjIwMDBlLCAweDM0NDIwMDAxLCAweGE1NjIwMDBlLCAweDk1NjIwMDBlLAorMHgyNDBhMDAwMiwgMHgzMDQyMDAwNCwgMHgxMDQwMDAwMiwgMHhhNTY0MDAxMiwKKzB4MjQwYTAwMDQsIDB4OGY4ODAxMjAsIDB4Mjc2MjM4MDAsIDB4MjUwOTAwMjAsCisweDEyMjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2OTMwMDAsIDB4OGY4MjAxMjgsCisweDExMjIwMDA0LCAweDAsIDB4OGY4MjAxMjQsIDB4MTUyMjAwMDcsCisweDI0MDQwMDIwLCAweDhlZTIwMWE0LCAweDgwMjEsIDB4MjQ0MjAwMDEsCisweGFlZTIwMWE0LCAweDgwMDNmNGYsIDB4OGVlMjAxYTQsIDB4OGVlNTcyNGMsCisweDhlZTYwNDkwLCAweDhlZTcwNDk0LCAweGFkMGIwMDA4LCAweGE1MDQwMDBlLAorMHhhZDBhMDAxOCwgMHg1Mjk0MCwgMHhhMDE4MjEsIDB4MTAyMSwKKzB4ZTMzODIxLCAweGUzMjAyYiwgMHhjMjMwMjEsIDB4YzQzMDIxLAorMHhhZDA2MDAwMCwgMHhhZDA3MDAwNCwgMHg4ZWUyNzI0YywgMHg0ZDEwMjUsCisweGFkMDIwMDFjLCAweDhlZTIwNGM0LCAweGFkMDIwMDEwLCAweGFmODkwMTIwLAorMHg5MmUyNGUyMCwgMHgxNDQwMDA2MCwgMHgyNDEwMDAwMSwgMHgyNTQzZmZlZSwKKzB4MmM2MzAwMDIsIDB4Mzk0MjAwMTEsIDB4MmM0MjAwMDEsIDB4NjIxODI1LAorMHgxMDYwMDAyNCwgMHgwLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDhjODIwMDAwLCAweDE0NTUwMDBmLAorMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDBiLAorMHgwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LAorMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDU0MDAyYiwKKzB4MCwgMHg4MDAzZjJlLCAweDAsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweDUwNTQwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDAxLCAweDgwMDNmNGUsCisweGFjOTUwMDAwLCAweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LAorMHgyZTIyMDIxLCAweDhjODMwMDAwLCAweDI0MDIwMDA3LCAweDE0NjIwMDFmLAorMHgwLCAweDhlZTM0ZTMwLCAweDhlZTI0ZTM0LCAweDEwNjIwMDFiLAorMHgwLCAweDhjODIwMDA0LCAweDI0NDIwMDAxLCAweGFjODIwMDA0LAorMHg4ZWUyNGUzNCwgMHg4ZWUzNGUzMCwgMHgyNDQyMDAwMSwgMHgxMDU0MDAwNywKKzB4MCwgMHg4ZWUyNGUzNCwgMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwKKzB4MCwgMHg4MDAzZjNhLCAweDAsIDB4MTQ2MDAwMDUsCisweDAsIDB4OGY4MjAxMjgsIDB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsCisweDhmODIwMTI4LCAweDhjODIwMDA0LCAweDJjNDIwMDExLCAweDUwNDAwMDEyLAorMHhhYzgwMDAwMCwgMHg4MDAzZjRmLCAweDAsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweDUwNTQwMDAzLCAweDEwMjEsIDB4OGVlMjRlMzAsCisweDI0NDIwMDAxLCAweGFlZTI0ZTMwLCAweDhlZTI0ZTMwLCAweDIxMGMwLAorMHgyNDQyNTAzOCwgMHgyZTIyMDIxLCAweDI0MDIwMDA3LCAweGFjODIwMDAwLAorMHgyNDAyMDAwMSwgMHhhYzgyMDAwNCwgMHgxNjAwMDAwZCwgMHgwLAorMHg4ZjgyMDEyMCwgMHgzYzA0MDAwMSwgMHgyNDg0NTkzOCwgMHhhZmEwMDAxNCwKKzB4YWZhMjAwMTAsIDB4OGQ4NjAwMWMsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDgsCisweGMwMDI0MDMsIDB4MzRhNTAwMDEsIDB4ODAwNDA1NywgMHgwLAorMHg4ZWUyNzI0YywgMHgyNDQyMDAwMSwgMHgzMDQyMDdmZiwgMHgxMWEwMDAwNiwKKzB4YWVlMjcyNGMsIDB4OGVlMjAxZDAsIDB4MjQ0MmZmZmYsIDB4YWVlMjAxZDAsCisweDgwMDNmNmIsIDB4OGVlMjAxZDAsIDB4OGVlMjAxY2MsIDB4MjQ0MmZmZmYsCisweGFlZTIwMWNjLCAweDhlZTIwMWNjLCAweDhlZTIwMWQ4LCAweDI0NDJmZmZmLAorMHhhZWUyMDFkOCwgMHg4MDA0MDU3LCAweDhlZTIwMWQ4LCAweDhmNDIwMjQwLAorMHgxMDQwMDBlNSwgMHgwLCAweDhlZTIwZTFjLCAweDI0NDIwMDAxLAorMHg4MDA0MDU3LCAweGFlZTIwZTFjLCAweDk1ODIwMDFlLCAweGFkODIwMDFjLAorMHg4ZjQyMDI0MCwgMHgxMDQwMDA3MiwgMHgwLCAweDhlZTIwZTFjLAorMHgyNDQyMDAwMSwgMHhhZWUyMGUxYywgMHg4ZjQzMDI0MCwgMHg0MzEwMmIsCisweDE0NDAwMGQ1LCAweDAsIDB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsCisweDI0NjYwMDIwLCAweGMyMTAyYiwgMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwKKzB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4MTRjMjAwMDcsIDB4MCwgMHg4ZWUyMDFhNCwgMHg4MDIxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDAzZmRhLCAweDhlZTIwMWE0LAorMHg4ZWUyNzI0YywgMHhhYzYyMDAxYywgMHg4ZWU0MDRhOCwgMHg4ZWU1MDRhYywKKzB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsIDB4MjQwMjAwMDgsIDB4YTQ2MjAwMGUsCisweDI0MDIwMDExLCAweGFjNjIwMDE4LCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LAorMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwgMHhhZjg2MDEyMCwgMHg5MmUyNGUyMCwKKzB4MTQ0MDAwMzQsIDB4MjQxMDAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ1NTAwMWYsCisweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsCisweDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsCisweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNTQwMDA3LAorMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LAorMHgwLCAweDgwMDNmYzYsIDB4MCwgMHgxNDYwMDAwNSwKKzB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwKKzB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTEsCisweGFjODAwMDAwLCAweDgwMDNmZGEsIDB4MCwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4NTA1NDAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4MjQwMjAwMDEsIDB4YWM5NTAwMDAsCisweGFjODIwMDA0LCAweDU2MDAwMDBiLCAweDI0MTAwMDAxLCAweDhlZTI3MjRjLAorMHgzYzA0MDAwMSwgMHgyNDg0NThhOCwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwKKzB4OGVlNjcyNGMsIDB4OGY0NzAyODAsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywKKzB4MzRhNWYwMDgsIDB4NTYwMDAwMDEsIDB4YWVlMDBlMWMsIDB4OGVlMjAxODgsCisweDI0NDIwMDAxLCAweGFlZTIwMTg4LCAweDgwMDQwNTAsIDB4OGVlMjAxODgsCisweDhmODMwMTIwLCAweDI3NjIzODAwLCAweDI0NjYwMDIwLCAweGMyMTAyYiwKKzB4NTA0MDAwMDEsIDB4Mjc2NjMwMDAsIDB4OGY4MjAxMjgsIDB4MTBjMjAwMDQsCisweDAsIDB4OGY4MjAxMjQsIDB4MTRjMjAwMDcsIDB4MCwKKzB4OGVlMjAxYTQsIDB4ODAyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwKKzB4ODAwNDA0NCwgMHg4ZWUyMDFhNCwgMHg4ZWUyNzI0YywgMHhhYzYyMDAxYywKKzB4OGVlNDA0YTgsIDB4OGVlNTA0YWMsIDB4MjQ2MjAwMWMsIDB4YWM2MjAwMDgsCisweDI0MDIwMDA4LCAweGE0NjIwMDBlLCAweDI0MDIwMDExLCAweGFjNjIwMDE4LAorMHhhYzY0MDAwMCwgMHhhYzY1MDAwNCwgMHg4ZWUyMDRjNCwgMHhhYzYyMDAxMCwKKzB4YWY4NjAxMjAsIDB4OTJlMjRlMjAsIDB4MTQ0MDAwMzQsIDB4MjQxMDAwMDEsCisweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsCisweDhjODIwMDAwLCAweDE0NTUwMDFmLCAweDAsIDB4OGVlMzRlMzAsCisweDhlZTI0ZTM0LCAweDEwNjIwMDFiLCAweDAsIDB4OGM4MjAwMDQsCisweDI0NDIwMDAxLCAweGFjODIwMDA0LCAweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLAorMHgyNDQyMDAwMSwgMHgxMDU0MDAwNywgMHgwLCAweDhlZTI0ZTM0LAorMHgyNDQyMDAwMSwgMHgxMDYyMDAwNSwgMHgwLCAweDgwMDQwMzAsCisweDAsIDB4MTQ2MDAwMDUsIDB4MCwgMHg4ZjgyMDEyOCwKKzB4MjQ0MjAwMjAsIDB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsCisweDJjNDIwMDExLCAweDUwNDAwMDExLCAweGFjODAwMDAwLCAweDgwMDQwNDQsCisweDAsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4NTA1NDAwMDMsCisweDEwMjEsIDB4OGVlMjRlMzAsIDB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsCisweDhlZTI0ZTMwLCAweDIxMGMwLCAweDI0NDI1MDM4LCAweDJlMjIwMjEsCisweDI0MDIwMDAxLCAweGFjOTUwMDAwLCAweGFjODIwMDA0LCAweDE2MDAwMDBiLAorMHgwLCAweDhlZTI3MjRjLCAweDNjMDQwMDAxLCAweDI0ODQ1OGE4LAorMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZWU2NzI0YywgMHg4ZjQ3MDI4MCwKKzB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAwOCwgMHg4ZWUyMDE3NCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjAxNzQsIDB4ODAwNDA1NywgMHg4ZWUyMDE3NCwKKzB4MjQwMjAwMDEsIDB4YWVlMjRlMjQsIDB4OGY4MzAxMjgsIDB4OGY4MjAxMjQsCisweDE0NjJmZDU4LCAweDAsIDB4OGZiZjAwMzAsIDB4OGZiNTAwMmMsCisweDhmYjQwMDI4LCAweDhmYjMwMDI0LCAweDhmYjIwMDIwLCAweDhmYjEwMDFjLAorMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDM4LCAweDI3YmRmZmU4LAorMHgyNzg0MDIwOCwgMHgyNzQ1MDIwMCwgMHgyNDA2MDAwOCwgMHhhZmJmMDAxNCwKKzB4YzAwMjQ5YSwgMHhhZmIwMDAxMCwgMHgyMDIxLCAweDI0MTAwMDAxLAorMHgyNDAyMjQxZiwgMHhhZjkwMDIxMCwgMHhhZjkwMDIwMCwgMHhhZjgwMDIwNCwKKzB4YWY4MjAyMTQsIDB4OGY0NjAyNDgsIDB4MjQwMzAwMDQsIDB4M2MwMjAwNDAsCisweDNjMDEwMDAxLCAweGFjMjM1Y2M0LCAweDNjMDEwMDAxLCAweGFjMjM1Y2M4LAorMHgzYzAxMDAwMSwgMHhhYzIwNWQ5YywgMHgzYzAxMDAwMSwgMHhhYzIyNWNjMCwKKzB4M2MwMTAwMDEsIDB4YWMyMzVjYzgsIDB4YzAwNTEwOCwgMHgyNDA1MDAwNCwKKzB4YzAwNDgyMiwgMHgwLCAweDhlZTIwMDAwLCAweDNjMDNmZWZmLAorMHgzNDYzZmZmZCwgMHg0MzEwMjQsIDB4YWVlMjAwMDAsIDB4M2MwMjNjMDAsCisweGFmODIwMjFjLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzMwODNhYywKKzB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAxOCwKKzB4MjdiZGZmZTAsIDB4M2MwNTAwMDgsIDB4MzRhNTA0MDAsIDB4YWZiZjAwMTgsCisweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMjAwLCAweDNjMDQwMDAxLAorMHgyNDg0NTlmMCwgMHhjMDAyNDAzLCAweDM4MjEsIDB4OGVlMjAyODAsCisweDI0NDIwMDAxLCAweGFlZTIwMjgwLCAweDhlZTIwMjgwLCAweDhmODMwMjAwLAorMHgzYzAyM2YwMCwgMHg2MjE4MjQsIDB4OGZiZjAwMTgsIDB4M2MwMjA0MDAsCisweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjAsCisweGFmYjEwMDFjLCAweGFmYjAwMDE4LCAweDhmOTAwMjIwLCAweDhlZTIwMjE0LAorMHgzODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMjE0LCAweDhlZTIwMjE0LAorMHgzYzAyMDMwMCwgMHgyMDIxMDI0LCAweDEwNDAwMDI3LCAweDNjMTEwNDAwLAorMHhjMDA0MjliLCAweDAsIDB4M2MwMjAxMDAsIDB4MjAyMTAyNCwKKzB4MTA0MDAwMDcsIDB4MCwgMHg4ZWUyMDIxOCwgMHgyNDQyMDAwMSwKKzB4YWVlMjAyMTgsIDB4OGVlMjAyMTgsIDB4ODAwNDBjNiwgMHgzYzAzZmRmZiwKKzB4OGVlMjAyMWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAyMWMsIDB4OGVlMjAyMWMsCisweDNjMDNmZGZmLCAweDM0NjNmZmZmLCAweDNjMDgwOGZmLCAweDM1MDhmZmZmLAorMHg4ZWUyMDAwMCwgMHgzYzA0MDAwMSwgMHgyNDg0NTlmYywgMHgzYzA1MDAwOCwKKzB4MjAwMzAyMSwgMHg0MzEwMjQsIDB4YWVlMjAwMDAsIDB4OGY4MjAyMjAsCisweDM4MjEsIDB4M2MwMzAzMDAsIDB4NDgxMDI0LCAweDQzMTAyNSwKKzB4YWY4MjAyMjAsIDB4YWZhMDAwMTAsIDB4YzAwMjQwMywgMHhhZmEwMDAxNCwKKzB4ODAwNDI5NiwgMHgwLCAweDIxMTEwMjQsIDB4MTA0MDAwMWYsCisweDNjMDI0MDAwLCAweDhmODMwMjI0LCAweDI0MDIxNDAyLCAweDE0NjIwMDBiLAorMHgzYzAzZmRmZiwgMHgzYzA0MDAwMSwgMHgyNDg0NWEwOCwgMHgzYzA1MDAwOCwKKzB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAyMjQsIDB4MzRhNWZmZmYsCisweGMwMDI0MDMsIDB4MzgyMSwgMHgzYzAzZmRmZiwgMHg4ZWUyMDAwMCwKKzB4MzQ2M2ZmZmYsIDB4MjAwMjAyMSwgMHg0MzEwMjQsIDB4YzAwNGU1NCwKKzB4YWVlMjAwMDAsIDB4OGVlMjAyMjAsIDB4MjQ0MjAwMDEsIDB4YWVlMjAyMjAsCisweDhlZTIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLAorMHg0MzEwMjQsIDB4ODAwNDI5NSwgMHg1MTEwMjUsIDB4MjAyMTAyNCwKKzB4MTA0MDAxNDIsIDB4MCwgMHg4ZWUyMDIyYywgMHgyNDQyMDAwMSwKKzB4YWVlMjAyMmMsIDB4OGVlMjAyMmMsIDB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsCisweDM0NjNmZmZmLCAweDQzMTAyNCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIyMCwKKzB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4ODAwNDEwZSwgMHgyNDYzMDAwMiwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAzLCAweDE0NDBmZmZjLAorMHgwLCAweDhmODYwMGUwLCAweDhmODQwMGU0LCAweDMwYzIwMDA3LAorMHgxMDQwMDAxMiwgMHgwLCAweDhmODMwMGU0LCAweDI0MDJmZmY4LAorMHhjMjEwMjQsIDB4MTA0MzAwMGQsIDB4MCwgMHg4ZjgyMDA1NCwKKzB4OGY4MzAwZTAsIDB4MTRjMzAwMDksIDB4MjQ0NDAwNTAsIDB4OGY4MjAwNTQsCisweDgyMTAyMywgMHgyYzQyMDA1MSwgMHgxMDQwMDAwNCwgMHgwLAorMHg4ZjgyMDBlMCwgMHgxMGMyZmZmOSwgMHgwLCAweDhmODIwMjIwLAorMHgzYzAzMDhmZiwgMHgzNDYzZmZmZCwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsCisweDhmODYwMGUwLCAweDMwYzIwMDA3LCAweDEwNDAwMDAzLCAweDI0MDJmZmY4LAorMHhjMjMwMjQsIDB4YWY4NjAwZTAsIDB4OGY4MzAwYzQsIDB4M2MwMjAwMWYsCisweDM0NDJmZmZmLCAweDI0NjgwMDA4LCAweDQ4MTAyYiwgMHgxMDQwMDAwMywKKzB4M2MwMmZmZjUsIDB4MzQ0MjEwMDAsIDB4MTAyNDAyMSwgMHg4ZjhiMDBjOCwKKzB4OGY4NTAxMjAsIDB4OGY4NDAxMjQsIDB4ODAwNDE0NSwgMHg2MDIxLAorMHgyNzYyMzgwMCwgMHg4MjEwMmIsIDB4NTA0MDAwMDEsIDB4Mjc2NDMwMDAsCisweDEwYTQwMDEwLCAweDMxODIwMGZmLCAweDhjODIwMDE4LCAweDM4NDMwMDA3LAorMHgyYzYzMDAwMSwgMHgzODQyMDAwYiwgMHgyYzQyMDAwMSwgMHg2MjE4MjUsCisweDUwNjBmZmYzLCAweDI0ODQwMDIwLCAweDhlZTIwMjQwLCAweDI0MGMwMDAxLAorMHgyNDQyMDAwMSwgMHhhZWUyMDI0MCwgMHg4ZWUyMDI0MCwgMHg4YzhiMDAwOCwKKzB4MzE4MjAwZmYsIDB4MTQ0MDAwNjUsIDB4MCwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDkwNDI4M2MwLCAweDE0NDAwMDYwLCAweDAsCisweDhmODQwMGU0LCAweGM0MTAyMywgMHgyMThjMywgMHg0NjIwMDAxLAorMHgyNDYzMDIwMCwgMHg4Zjg5MDBjNCwgMHgxMDYwMDAwNSwgMHgyNDAyMDAwMSwKKzB4MTA2MjAwMDksIDB4MCwgMHg4MDA0MTg3LCAweDAsCisweDhlZTIwMjMwLCAweDEyMDU4MjEsIDB4MjQ0MjAwMDEsIDB4YWVlMjAyMzAsCisweDgwMDQxYmMsIDB4OGVlMjAyMzAsIDB4OGVlMjAyMzQsIDB4M2MwNTAwMGEsCisweDI0NDIwMDAxLCAweGFlZTIwMjM0LCAweDhjOGIwMDAwLCAweDM0YTVmMDAwLAorMHg4ZWUyMDIzNCwgMHgxMmIxODIzLCAweGEzMTAyYiwgMHg1NDQwMDAwMSwKKzB4NjUxODIxLCAweDJjNjIyMzNmLCAweDE0NDAwMDQwLCAweDAsCisweDhmODIwMGU4LCAweDI0NDIwMDA4LCAweGFmODIwMGU4LCAweDhmODIwMGU4LAorMHg4ZjgyMDBlNCwgMHgxMjA1ODIxLCAweDI0NDIwMDA4LCAweGFmODIwMGU0LAorMHg4MDA0MWJjLCAweDhmODIwMGU0LCAweDhlZTIwMjM4LCAweDNjMDMwMDBhLAorMHgyNDQyMDAwMSwgMHhhZWUyMDIzOCwgMHg4Yzg0MDAwMCwgMHgzNDYzZjAwMCwKKzB4OGVlMjAyMzgsIDB4ODgzODIzLCAweDY3MTAyYiwgMHg1NDQwMDAwMSwKKzB4ZTMzODIxLCAweDNjMDIwMDAzLCAweDM0NDIwZDQwLCAweDQ3MTAyYiwKKzB4MTA0MDAwMDMsIDB4MCwgMHg4MDA0MWJjLCAweDgwNTgyMSwKKzB4OGY4MjAwZTQsIDB4MjQ0NDAwMDgsIDB4YWY4NDAwZTQsIDB4OGY4NDAwZTQsCisweDEwODYwMDE4LCAweDNjMDUwMDBhLCAweDM0YTVmMDAwLCAweDNjMGEwMDAzLAorMHgzNTRhMGQ0MCwgMHg4ZWUyMDA3YywgMHgyNDQyMDAwMSwgMHhhZWUyMDA3YywKKzB4OGM4MzAwMDAsIDB4OGVlMjAwN2MsIDB4NjgzODIzLCAweGE3MTAyYiwKKzB4NTQ0MDAwMDEsIDB4ZTUzODIxLCAweDE0NzEwMmIsIDB4NTQ0MDAwMDcsCisweDYwNTgyMSwgMHg4ZjgyMDBlNCwgMHgyNDQ0MDAwOCwgMHhhZjg0MDBlNCwKKzB4OGY4NDAwZTQsIDB4MTQ4NmZmZWYsIDB4MCwgMHgxNDg2MDAwNSwKKzB4MCwgMHgxMjA1ODIxLCAweGFmODYwMGU0LCAweDgwMDQxYmMsCisweGFmODYwMGU4LCAweGFmODQwMGU0LCAweGFmODQwMGU4LCAweDhmODIwMGM4LAorMHgzYzAzMDAwYSwgMHgzNDYzZjAwMCwgMHg0ODM4MjMsIDB4NjcxMDJiLAorMHg1NDQwMDAwMSwgMHhlMzM4MjEsIDB4M2MwMjAwMDMsIDB4MzQ0MjBkM2YsCisweDQ3MTAyYiwgMHg1NDQwMDAwNywgMHg2MDIxLCAweDE2ODM4MjMsCisweDY3MTAyYiwgMHg1NDQwMDAwMywgMHhlMzM4MjEsIDB4ODAwNDFjZiwKKzB4M2MwMjAwMDMsIDB4M2MwMjAwMDMsIDB4MzQ0MjBkM2YsIDB4NDcxMDJiLAorMHgxNDQwMDAxNiwgMHgzMTgyMDBmZiwgMHgxNDQwMDAwNiwgMHgwLAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjgzYzAsIDB4MTA0MDAwMGYsCisweDAsIDB4OGVlMjAyM2MsIDB4M2MwNGZkZmYsIDB4OGVlMzAwMDAsCisweDM0ODRmZmZmLCAweDI0NDIwMDAxLCAweGFlZTIwMjNjLCAweDhlZTIwMjNjLAorMHgyNDAyMDAwMSwgMHg2NDE4MjQsIDB4M2MwMTAwMDEsIDB4MzcwODIxLAorMHhhMDIyODNiOCwgMHg4MDA0MjJjLCAweGFlZTMwMDAwLCAweGFmOGIwMGM4LAorMHg4ZjgzMDBjOCwgMHg4ZjgyMDBjNCwgMHgzYzA0MDAwYSwgMHgzNDg0ZjAwMCwKKzB4NjIzODIzLCAweDg3MTAyYiwgMHg1NDQwMDAwMSwgMHhlNDM4MjEsCisweDNjMDIwMDAzLCAweDM0NDIwZDQwLCAweDQ3MTAyYiwgMHgyY2UzMDAwMSwKKzB4NDMxMDI1LCAweDEwNDAwMDA4LCAweDAsIDB4OGY4MjAyMjAsCisweDNjMDMwOGZmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHgzYzAzNDAwMCwKKzB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmODYwMGUwLCAweDhmODQwMGU0LAorMHgxMGM0MDAyYSwgMHgwLCAweDhlZTIwMDdjLCAweDI0NDIwMDAxLAorMHhhZWUyMDA3YywgMHg4ZWUyMDA3YywgMHgyNGMyZmZmOCwgMHhhZjgyMDBlMCwKKzB4M2MwMjAwMDEsIDB4OGM0MjdlMzAsIDB4M2MwMzAwMDgsIDB4OGY4NjAwZTAsCisweDQzMTAyNCwgMHgxMDQwMDAxZCwgMHgwLCAweDEwYzQwMDFiLAorMHgyNDBkZmZmOCwgMHgzYzBhMDAwYSwgMHgzNTRhZjAwMCwgMHgzYzBjMDA4MCwKKzB4MjQ4NTAwMDgsIDB4Mjc2MjI4MDAsIDB4NTBhMjAwMDEsIDB4Mjc2NTE4MDAsCisweDhjODgwMDA0LCAweDhjODIwMDAwLCAweDhjYTkwMDAwLCAweDMxMDNmZmZmLAorMHg0MzEwMjEsIDB4NGQxMDI0LCAweDI0NDMwMDEwLCAweDZiMTAyYiwKKzB4NTQ0MDAwMDEsIDB4NmExODIxLCAweDEyYjEwMmIsIDB4NTQ0MDAwMDEsCisweDEyYTQ4MjEsIDB4MTA2OTAwMDIsIDB4MTBjMTAyNSwgMHhhYzgyMDAwNCwKKzB4YTAyMDIxLCAweDE0YzRmZmViLCAweDI0ODUwMDA4LCAweDhmODIwMjIwLAorMHgzYzAzMDhmZiwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjAwMDIsCisweGFmODIwMjIwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDQyMzcsCisweDI0NjMwMDAxLCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwKKzB4MTQ0MGZmZmMsIDB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwKKzB4MzQ2M2ZmZmIsIDB4NDMxMDI0LCAweGFmODIwMjIwLCAweDYwMTAwNTUsCisweDAsIDB4OGVlMjAyMjgsIDB4MjQ0MjAwMDEsIDB4YWVlMjAyMjgsCisweDhlZTIwMjI4LCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLAorMHg0MzEwMjQsIDB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIDB4OGY4MzAwNTQsCisweDhmODIwMDU0LCAweDgwMDQyNTEsIDB4MjQ2MzAwMDIsIDB4OGY4MjAwNTQsCisweDYyMTAyMywgMHgyYzQyMDAwMywgMHgxNDQwZmZmYywgMHgwLAorMHg4Zjg2MDBlMCwgMHgzMGMyMDAwNywgMHgxMDQwMDAxMiwgMHgwLAorMHg4ZjgzMDBlNCwgMHgyNDAyZmZmOCwgMHhjMjEwMjQsIDB4MTA0MzAwMGQsCisweDAsIDB4OGY4MjAwNTQsIDB4OGY4MzAwZTAsIDB4MTRjMzAwMDksCisweDI0NDQwMDMyLCAweDhmODIwMDU0LCAweDgyMTAyMywgMHgyYzQyMDAzMywKKzB4MTA0MDAwMDQsIDB4MCwgMHg4ZjgyMDBlMCwgMHgxMGMyZmZmOSwKKzB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgMHgzNDYzZmZmZCwKKzB4NDMxMDI0LCAweGFmODIwMjIwLCAweDhmODYwMGUwLCAweDMwYzIwMDA3LAorMHgxMDQwMDAwMywgMHgyNDAyZmZmOCwgMHhjMjMwMjQsIDB4YWY4NjAwZTAsCisweDI0MDMwMWY1LCAweDhmODIwMGU4LCAweDY3MzgyMywgMHg3MThjMCwKKzB4NDMxMDIxLCAweGFmODIwMGU4LCAweDhmODIwMGU4LCAweGFmODIwMGU0LAorMHg4ZWUyMDA3YywgMHgzYzA0MDhmZiwgMHgzNDg0ZmZmZiwgMHg0NzEwMjEsCisweGFlZTIwMDdjLCAweDhmODIwMjIwLCAweDNjMDM4MDAwLCAweDM0NjMwMDAyLAorMHg0NDEwMjQsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHg4MDA0MjhkLCAweDI0NjMwMDAxLCAweDhmODIwMDU0LAorMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwKKzB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmIsIDB4NDMxMDI0LAorMHhhZjgyMDIyMCwgMHg4ZmJmMDAyMCwgMHg4ZmIxMDAxYywgMHg4ZmIwMDAxOCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzAyMDAwMSwgMHg4YzQyNWNkOCwKKzB4MjdiZGZmZDgsIDB4MTA0MDAwMTIsIDB4YWZiZjAwMjAsIDB4M2MwNDAwMDEsCisweDI0ODQ1YTE0LCAweDNjMDUwMDA4LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4YWMyMjgzYWMsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsCisweDhmODYwMjIwLCAweDM0YTUwNDk4LCAweDNjMDEwMDAxLCAweGFjMjA1Y2Q4LAorMHgzYzAxMDAwMSwgMHhhYzIyNWNjYywgMHhjMDAyNDAzLCAweDM4MjEsCisweDhmNDIwMjY4LCAweDNjMDM3ZmZmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwKKzB4YWY0MjAyNjgsIDB4OGVlMjA0ZDAsIDB4OGVlNDA0ZDQsIDB4MjQwM2ZmZmUsCisweDQzMTAyNCwgMHgzMDg0MDAwMiwgMHgxMDgwMDExZSwgMHhhZWUyMDRkMCwKKzB4OGVlMjA0ZDQsIDB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGFlZTIwNGQ0LAorMHg4ZjgyMDA0NCwgMHgzYzAzMDYwMCwgMHgzNDYzMjAwMCwgMHgzNDQyMDAyMCwKKzB4YWY4MjAwNDQsIDB4YWZhMzAwMTgsIDB4OGVlMjA2MDgsIDB4OGY0MzAyMjgsCisweDI0NDIwMDAxLCAweDMwNGEwMGZmLCAweDUxNDMwMGZlLCAweGFmYTAwMDEwLAorMHg4ZWUyMDYwOCwgMHgyMTBjMCwgMHg1NzEwMjEsIDB4OGZhMzAwMTgsCisweDhmYTQwMDFjLCAweGFjNDMwNjBjLCAweGFjNDQwNjEwLCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLCAweDJjNDIwMDMzLAorMHgxMDQwMDA2YSwgMHg1ODIxLCAweDI0MTgwMDA4LCAweDI0MGYwMDBkLAorMHgyNDBkMDAwNywgMHgyNDBjMDA0MCwgMHgyNDBlMDAwMSwgMHg4Zjg3MDEyMCwKKzB4Mjc2MjM4MDAsIDB4MjRlODAwMjAsIDB4MTAyMTAyYiwgMHg1MDQwMDAwMSwKKzB4Mjc2ODMwMDAsIDB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIDB4MCwKKzB4OGY4MjAxMjQsIDB4MTUwMjAwMDcsIDB4MTAyMSwgMHg4ZWUyMDFhNCwKKzB4MjgyMSwgMHgyNDQyMDAwMSwgMHhhZWUyMDFhNCwgMHg4MDA0MzNkLAorMHg4ZWUyMDFhNCwgMHg4ZWU0MDYwOCwgMHg0MjBjMCwgMHg4MDE4MjEsCisweDhlZTQwNDMwLCAweDhlZTUwNDM0LCAweGEzMjgyMSwgMHhhMzMwMmIsCisweDgyMjAyMSwgMHg4NjIwMjEsIDB4YWNlNDAwMDAsIDB4YWNlNTAwMDQsCisweDhlZTIwNjA4LCAweGE0ZjgwMDBlLCAweGFjZWYwMDE4LCAweGFjZWEwMDFjLAorMHgyMTBjMCwgMHgyNDQyMDYwYywgMHgyZTIxMDIxLCAweGFjZTIwMDA4LAorMHg4ZWUyMDRjNCwgMHhhY2UyMDAxMCwgMHhhZjg4MDEyMCwgMHg5MmUyNGUyMCwKKzB4MTQ0MDAwMzMsIDB4MjQwNTAwMDEsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4OGM4MjAwMDAsIDB4MTQ0ZDAwMWYsCisweDAsIDB4OGVlMzRlMzAsIDB4OGVlMjRlMzQsIDB4MTA2MjAwMWIsCisweDAsIDB4OGM4MjAwMDQsIDB4MjQ0MjAwMDEsIDB4YWM4MjAwMDQsCisweDhlZTI0ZTM0LCAweDhlZTM0ZTMwLCAweDI0NDIwMDAxLCAweDEwNGMwMDA3LAorMHgwLCAweDhlZTI0ZTM0LCAweDI0NDIwMDAxLCAweDEwNjIwMDA1LAorMHgwLCAweDgwMDQzMmEsIDB4MCwgMHgxNDYwMDAwNSwKKzB4MCwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwgMHhhZjgyMDEyOCwKKzB4OGY4MjAxMjgsIDB4OGM4MjAwMDQsIDB4MmM0MjAwMTEsIDB4NTA0MDAwMTAsCisweGFjODAwMDAwLCAweDgwMDQzM2QsIDB4MCwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4NTA0YzAwMDMsIDB4MTAyMSwgMHg4ZWUyNGUzMCwKKzB4MjQ0MjAwMDEsIDB4YWVlMjRlMzAsIDB4OGVlMjRlMzAsIDB4MjEwYzAsCisweDI0NDI1MDM4LCAweDJlMjIwMjEsIDB4YWM4ZDAwMDAsIDB4YWM4ZTAwMDQsCisweDU0YTAwMDA2LCAweDI0MGIwMDAxLCAweDhmODIwMDU0LCAweDEyMjEwMjMsCisweDJjNDIwMDMzLCAweDE0NDBmZjlkLCAweDAsIDB4MzE2MzAwZmYsCisweDI0MDIwMDAxLCAweDU0NjIwMDc5LCAweGFmYTAwMDEwLCAweGFlZWEwNjA4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgyNDY5MDAzMiwgMHgxMjIxMDIzLAorMHgyYzQyMDAzMywgMHgxMDQwMDA2MSwgMHg1ODIxLCAweDI0MGQwMDA4LAorMHgyNDBjMDAxMSwgMHgyNDA4MDAxMiwgMHgyNDA3MDA0MCwgMHgyNDBhMDAwMSwKKzB4OGY4MzAxMjAsIDB4Mjc2MjM4MDAsIDB4MjQ2NjAwMjAsIDB4YzIxMDJiLAorMHg1MDQwMDAwMSwgMHgyNzY2MzAwMCwgMHg4ZjgyMDEyOCwgMHgxMGMyMDAwNCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHgxNGMyMDAwNywgMHgwLAorMHg4ZWUyMDFhNCwgMHgyODIxLCAweDI0NDIwMDAxLCAweGFlZTIwMWE0LAorMHg4MDA0M2E5LCAweDhlZTIwMWE0LCAweDhlZTIwNjA4LCAweGFjNjIwMDFjLAorMHg4ZWU0MDRhMCwgMHg4ZWU1MDRhNCwgMHgyNDYyMDAxYywgMHhhYzYyMDAwOCwKKzB4YTQ2ZDAwMGUsIDB4YWM2YzAwMTgsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsCisweDhlZTIwNGM0LCAweGFjNjIwMDEwLCAweGFmODYwMTIwLCAweDkyZTI0ZTIwLAorMHgxNDQwMDAzMywgMHgyNDA1MDAwMSwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwKKzB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHg4YzgyMDAwMCwgMHgxNDQ4MDAxZiwKKzB4MCwgMHg4ZWUzNGUzMCwgMHg4ZWUyNGUzNCwgMHgxMDYyMDAxYiwKKzB4MCwgMHg4YzgyMDAwNCwgMHgyNDQyMDAwMSwgMHhhYzgyMDAwNCwKKzB4OGVlMjRlMzQsIDB4OGVlMzRlMzAsIDB4MjQ0MjAwMDEsIDB4MTA0NzAwMDcsCisweDAsIDB4OGVlMjRlMzQsIDB4MjQ0MjAwMDEsIDB4MTA2MjAwMDUsCisweDAsIDB4ODAwNDM5NiwgMHgwLCAweDE0NjAwMDA1LAorMHgwLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAweGFmODIwMTI4LAorMHg4ZjgyMDEyOCwgMHg4YzgyMDAwNCwgMHgyYzQyMDAxMSwgMHg1MDQwMDAxMCwKKzB4YWM4MDAwMDAsIDB4ODAwNDNhOSwgMHgwLCAweDhlZTI0ZTMwLAorMHgyNDQyMDAwMSwgMHg1MDQ3MDAwMywgMHgxMDIxLCAweDhlZTI0ZTMwLAorMHgyNDQyMDAwMSwgMHhhZWUyNGUzMCwgMHg4ZWUyNGUzMCwgMHgyMTBjMCwKKzB4MjQ0MjUwMzgsIDB4MmUyMjAyMSwgMHhhYzg4MDAwMCwgMHhhYzhhMDAwNCwKKzB4NTRhMDAwMDYsIDB4MjQwYjAwMDEsIDB4OGY4MjAwNTQsIDB4MTIyMTAyMywKKzB4MmM0MjAwMzMsIDB4MTQ0MGZmYTYsIDB4MCwgMHgzMTYzMDBmZiwKKzB4MjQwMjAwMDEsIDB4NTQ2MjAwMDMsIDB4YWZhMDAwMTAsIDB4ODAwNDNkNiwKKzB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NWEyMCwgMHhhZmEwMDAxNCwKKzB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDksIDB4YzAwMjQwMywKKzB4MzRhNWYwMTEsIDB4ODAwNDNkNiwgMHgwLCAweDNjMDQwMDAxLAorMHgyNDg0NWEyYywgMHhhZmEwMDAxNCwgMHg4Zjg2MDEyMCwgMHg4Zjg3MDEyNCwKKzB4M2MwNTAwMDksIDB4YzAwMjQwMywgMHgzNGE1ZjAxMCwgMHg4MDA0M2Q2LAorMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ1YTM4LCAweGFmYTAwMDE0LAorMHg4ZWU2MDYwOCwgMHg4ZjQ3MDIyOCwgMHgzYzA1MDAwOSwgMHhjMDAyNDAzLAorMHgzNGE1ZjAwZiwgMHg4ZWUyMDFhYywgMHgyNDQyMDAwMSwgMHhhZWUyMDFhYywKKzB4OGVlMjAxYWMsIDB4OGVlMjAxNWMsIDB4MjQ0MjAwMDEsIDB4YWVlMjAxNWMsCisweDhlZTIwMTVjLCAweDhmYmYwMDIwLCAweDNlMDAwMDgsIDB4MjdiZDAwMjgsCisweDNjMDIwMDAxLCAweDhjNDI1Y2Q4LCAweDI3YmRmZmUwLCAweDE0NDAwMDBkLAorMHhhZmJmMDAxOCwgMHgzYzA0MDAwMSwgMHgyNDg0NWE0NCwgMHgzYzA1MDAwOCwKKzB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAyMjAsIDB4MzRhNTA0OTksCisweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1Y2Q4LCAweGMwMDI0MDMsCisweDM4MjEsIDB4OGVlMjA0ZDAsIDB4M2MwMzAwMDEsIDB4NzcxODIxLAorMHg5NDYzODNiMiwgMHgzNDQyMDAwMSwgMHgxMDYwMDAwNywgMHhhZWUyMDRkMCwKKzB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHgzNDQyMDAwOCwgMHhhZjgyMDIyMCwgMHgyMDIxLCAweGMwMDUyYTIsCisweDI0MDUwMDA0LCAweGFmNDIwMjY4LCAweDhmYmYwMDE4LCAweDNlMDAwMDgsCisweDI3YmQwMDIwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgzYzEyMDAwMSwKKzB4MjY1MjEyMDAsIDB4M2MxNDAwMDEsIDB4OGU5NDVjNTAsIDB4M2MxMDAwMDEsCisweDI2MTAxMTIwLCAweDNjMTVjMDAwLCAweDM2YjUwMDYwLCAweDhlOGEwMDAwLAorMHg4ZWIzMDAwMCwgMHgyNmE0MDBiLCAweDI0ODAwMGEsIDB4MjAwZjgyMSwKKzB4MCwgMHhkLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4ODAwMTRkNiwKKzB4MCwgMHg4MDAxNGQ4LCAweDNjMGEwMDAxLCAweDgwMDE0ZDgsCisweDNjMGEwMDAyLCAweDgwMDE0ZDgsIDB4MCwgMHg4MDAyNGE2LAorMHgwLCAweDgwMDE0ZDgsIDB4M2MwYTAwMDMsIDB4ODAwMTRkOCwKKzB4M2MwYTAwMDQsIDB4ODAwMmY4YywgMHgwLCAweDgwMDE0ZDgsCisweDNjMGEwMDA1LCAweDgwMDNjZTgsIDB4MCwgMHg4MDAzYzY2LAorMHgwLCAweDgwMDE0ZDgsIDB4M2MwYTAwMDYsIDB4ODAwMTRkOCwKKzB4M2MwYTAwMDcsIDB4ODAwMTRkOCwgMHgwLCAweDgwMDE0ZDgsCisweDAsIDB4ODAwMTRkOCwgMHgwLCAweDgwMDJhNzUsCisweDAsIDB4ODAwMTRkOCwgMHgzYzBhMDAwYiwgMHg4MDAxNGQ4LAorMHgzYzBhMDAwYywgMHg4MDAxNGQ4LCAweDNjMGEwMDBkLCAweDgwMDIzN2EsCisweDAsIDB4ODAwMjMzOSwgMHgwLCAweDgwMDE0ZDgsCisweDNjMGEwMDBlLCAweDgwMDFiM2MsIDB4MCwgMHg4MDAyNGE0LAorMHgwLCAweDgwMDE0ZDgsIDB4M2MwYTAwMGYsIDB4ODAwNDBhNywKKzB4MCwgMHg4MDA0MDkxLCAweDAsIDB4ODAwMTRkOCwKKzB4M2MwYTAwMTAsIDB4ODAwMTRlZSwgMHgwLCAweDgwMDE0ZDgsCisweDNjMGEwMDExLCAweDgwMDE0ZDgsIDB4M2MwYTAwMTIsIDB4ODAwMTRkOCwKKzB4M2MwYTAwMTMsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDNjMDMwMDAxLAorMHgzNDYzMzgwMCwgMHgyNDA1MDA4MCwgMHgyNDA0MDAxZiwgMHgyNDA2ZmZmZiwKKzB4MjQwMjAwMDEsIDB4YWY4MDAyMWMsIDB4YWY4MjAyMDAsIDB4YWY4MjAyMjAsCisweDM2MzEwMjEsIDB4YWY4MjAwYzAsIDB4MzYzMTAyMSwgMHhhZjgyMDBjNCwKKzB4MzYzMTAyMSwgMHhhZjgyMDBjOCwgMHgyNzYyMzgwMCwgMHhhZjgyMDBkMCwKKzB4Mjc2MjM4MDAsIDB4YWY4MjAwZDQsIDB4Mjc2MjM4MDAsIDB4YWY4MjAwZDgsCisweDI3NjIxODAwLCAweGFmODIwMGUwLCAweDI3NjIxODAwLCAweGFmODIwMGU0LAorMHgyNzYyMTgwMCwgMHhhZjgyMDBlOCwgMHgyNzYyMTAwMCwgMHhhZjgyMDBmMCwKKzB4Mjc2MjEwMDAsIDB4YWY4MjAwZjQsIDB4Mjc2MjEwMDAsIDB4YWY4MjAwZjgsCisweGFjYTAwMDAwLCAweDI0ODRmZmZmLCAweDE0ODZmZmZkLCAweDI0YTUwMDA0LAorMHg4ZjgzMDA0MCwgMHgzYzAyZjAwMCwgMHg2MjE4MjQsIDB4M2MwMjUwMDAsCisweDEwNjIwMDBjLCAweDQzMTAyYiwgMHgxNDQwMDAwNiwgMHgzYzAyNjAwMCwKKzB4M2MwMjQwMDAsIDB4MTA2MjAwMDgsIDB4MjQwMjA4MDAsIDB4ODAwNDUzOSwKKzB4MCwgMHgxMDYyMDAwNCwgMHgyNDAyMDgwMCwgMHg4MDA0NTM5LAorMHgwLCAweDI0MDIwNzAwLCAweDNjMDEwMDAxLCAweGFjMjI1Y2RjLAorMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjQsCisweGFmYjAwMDIwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDNjMDEwMDAxLAorMHhhYzIwNWNjNCwgMHg4MDA0NTQ1LCAweDI0NjMwMDY0LCAweDhmODIwMDU0LAorMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIDB4MCwKKzB4YzAwNGQ3MSwgMHgwLCAweDI0MDQwMDAxLCAweDI4MjEsCisweDI3YTYwMDE4LCAweDM0MDI4MDAwLCAweGMwMDQ5OGUsIDB4YTdhMjAwMTgsCisweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDQ1NTYsIDB4MjQ2MzAwNjQsCisweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDA2NSwgMHgxNDQwZmZmYywKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMDEsIDB4YzAwNDk0YywgMHgyN2E2MDAxOCwKKzB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4ODAwNDU2MiwgMHgyNDYzMDA2NCwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0OTRjLCAweDI3YTYwMDE4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHg4MDA0NTZlLCAweDI0NjMwMDY0LAorMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsCisweDI0MDQwMDAxLCAweDNjMDYwMDAxLCAweDI0YzY1ZGEwLCAweGMwMDQ5NGMsCisweDI0MDUwMDAyLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDQ1N2IsCisweDI0NjMwMDY0LCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDA2NSwKKzB4MTQ0MGZmZmMsIDB4MjQwNDAwMDEsIDB4MjQwNTAwMDMsIDB4M2MxMDAwMDEsCisweDI2MTA1ZGEyLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgMHg5N2E2MDAxOCwKKzB4M2MwNzAwMDEsIDB4OTRlNzVkYTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVhYjAsCisweGFmYTAwMDE0LCAweDk2MDIwMDAwLCAweDNjMDUwMDBkLCAweDM0YTUwMTAwLAorMHhjMDAyNDAzLCAweGFmYTIwMDEwLCAweDk3YTIwMDE4LCAweDEwNDAwMDRjLAorMHgyNDAzNjA0MCwgMHg5NjAyMDAwMCwgMHgzMDQyZmZmMCwgMHgxNDQzMDAwYSwKKzB4MjQwMjAwMjAsIDB4M2MwMzAwMDEsIDB4OTQ2MzVkYTAsIDB4NTQ2MjAwMDksCisweDI0MDI3ODMwLCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAweGFjMjI1Y2M0LAorMHg4MDA0NWFjLCAweDI0MDIwMDA1LCAweDNjMDMwMDAxLCAweDk0NjM1ZGEwLAorMHgyNDAyNzgzMCwgMHgxNDYyMDAwZiwgMHgyNDAzMDAxMCwgMHgzYzAyMDAwMSwKKzB4OTQ0MjVkYTIsIDB4MzA0MmZmZjAsIDB4MTQ0MzAwMGEsIDB4MjQwMjAwMDMsCisweDNjMDEwMDAxLCAweGFjMjI1Y2M0LCAweDI0MDIwMDA2LCAweDNjMDEwMDAxLAorMHhhYzIyNWRiMCwgMHgzYzAxMDAwMSwgMHhhYzIyNWRiYywgMHg4MDA0NWU2LAorMHgzYzA5ZmZmMCwgMHgzYzAyMDAwMSwgMHg4YzQyNWNjNCwgMHgzYzAzMDAwMSwKKzB4OTQ2MzVkYTAsIDB4MzQ0MjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjVjYzQsCisweDI0MDIwMDE1LCAweDE0NjIwMDBmLCAweDAsIDB4M2MwMjAwMDEsCisweDk0NDI1ZGEyLCAweDMwNDJmZmYwLCAweDM4NDNmNDIwLCAweDJjNjMwMDAxLAorMHgzODQyZjQzMCwgMHgyYzQyMDAwMSwgMHg2MjE4MjUsIDB4MTA2MDAwMDUsCisweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAweGFjMjI1ZGJjLCAweDgwMDQ1ZTYsCisweDNjMDlmZmYwLCAweDNjMDMwMDAxLCAweDk0NjM1ZGEwLCAweDI0MDI3ODEwLAorMHgxNDYyMDAwYiwgMHgyNDAyMDAwMiwgMHgzYzAyMDAwMSwgMHg5NDQyNWRhMiwKKzB4MzA0MmZmZjAsIDB4MTQ0MDAwMDYsIDB4MjQwMjAwMDIsIDB4MjQwMjAwMDQsCisweDNjMDEwMDAxLCAweGFjMjI1ZGJjLCAweDgwMDQ1ZTYsIDB4M2MwOWZmZjAsCisweDNjMDEwMDAxLCAweGFjMjI1ZGJjLCAweDgwMDQ1ZTYsIDB4M2MwOWZmZjAsCisweDNjMDIwMDAxLCAweDhjNDI1Y2M0LCAweDI0MDMwMDAxLCAweDNjMDEwMDAxLAorMHhhYzIzNWRiYywgMHgzNDQyMDAwNCwgMHgzYzAxMDAwMSwgMHhhYzIyNWNjNCwKKzB4M2MwOWZmZjAsIDB4MzUyOWJkYzAsIDB4M2MwNjAwMDEsIDB4OGNjNjVjYzQsCisweDNjMDQwMDAxLCAweDI0ODQ1YWIwLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLAorMHhhYzIyNWNjYywgMHg4ZjgyMDA1NCwgMHgzYzA3MDAwMSwgMHg4Y2U3NWRiYywKKzB4M2MwMzAwMDEsIDB4OTQ2MzVkYTAsIDB4M2MwODAwMDEsIDB4OTUwODVkYTIsCisweDNjMDUwMDBkLCAweDM0YTUwMTAwLCAweDNjMDEwMDAxLCAweGFjMjA1Y2M4LAorMHg0OTEwMjEsIDB4M2MwMTAwMDEsIDB4YWMyMjVkYWMsIDB4YWZhMzAwMTAsCisweGMwMDI0MDMsIDB4YWZhODAwMTQsIDB4OGZiZjAwMjQsIDB4OGZiMDAwMjAsCisweDNlMDAwMDgsIDB4MjdiZDAwMjgsIDB4MjdiZGZmZTgsIDB4M2MwNTAwMDEsCisweDhjYTU1Y2M4LCAweDI0MDYwMDA0LCAweDI0MDIwMDAxLCAweDE0YTIwMDE0LAorMHhhZmJmMDAxMCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UzYywgMHgzMDQyODAwMCwKKzB4MTA0MDAwMDUsIDB4M2MwNDAwMGYsIDB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsCisweDgwMDQ2MTcsIDB4MzQ4NDQyNDAsIDB4M2MwNDAwMDQsIDB4M2MwMzAwMDEsCisweDhjNjM1ZGJjLCAweDM0ODQ5M2UwLCAweDI0MDIwMDA1LCAweDE0NjIwMDE2LAorMHgwLCAweDNjMDQwMDNkLCAweDgwMDQ2MmYsIDB4MzQ4NDA5MDAsCisweDNjMDIwMDAxLCAweDhjNDI3ZTM4LCAweDMwNDI4MDAwLCAweDEwNDAwMDA1LAorMHgzYzA0MDAxZSwgMHgzYzAzMDAwMSwgMHg4YzYzNWRiYywgMHg4MDA0NjJhLAorMHgzNDg0ODQ4MCwgMHgzYzA0MDAwZiwgMHgzYzAzMDAwMSwgMHg4YzYzNWRiYywKKzB4MzQ4NDQyNDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMDMsIDB4MCwKKzB4M2MwNDAwN2EsIDB4MzQ4NDEyMDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkYWMsCisweDhmODMwMDU0LCAweDQ0MTAyMSwgMHg0MzEwMjMsIDB4NDQxMDJiLAorMHgxNDQwMDAzNywgMHgwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2QwLAorMHgxNDQwMDAzMywgMHgwLCAweDNjMDEwMDAxLCAweDEwYzAwMDI1LAorMHhhYzIwNWNlMCwgMHgzYzA5MDAwMSwgMHg4ZDI5NWNjNCwgMHgyNDA3MDAwMSwKKzB4M2MwNDQwMDAsIDB4M2MwODAwMDEsIDB4MjUwODdlM2MsIDB4MjUwYWZmZmMsCisweDUyODQyLCAweDE0YTAwMDAyLCAweDI0YzZmZmZmLCAweDI0MDUwMDA4LAorMHhhOTEwMjQsIDB4MTA0MDAwMTAsIDB4MCwgMHgxNGE3MDAwOCwKKzB4MCwgMHg4ZDAyMDAwMCwgMHg0NDEwMjQsIDB4MTA0MDAwMGEsCisweDAsIDB4M2MwMTAwMDEsIDB4ODAwNDY1YiwgMHhhYzI1NWNlMCwKKzB4OGQ0MjAwMDAsIDB4NDQxMDI0LCAweDEwNDAwMDAzLCAweDAsCisweDNjMDEwMDAxLCAweGFjMjc1Y2UwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2UwLAorMHg2MTgyYiwgMHgyYzQyMDAwMSwgMHg0MzEwMjQsIDB4NTQ0MGZmZTUsCisweDUyODQyLCAweDhmODIwMDU0LCAweDNjMDMwMDAxLCAweDhjNjM1Y2UwLAorMHgzYzAxMDAwMSwgMHhhYzIyNWRhYywgMHgxMDYwMDAyYSwgMHgyNDAyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyNTVjYzgsIDB4M2MwMTAwMDEsIDB4YWMyMjVjY2MsCisweDNjMDIwMDAxLCAweDhjNDI1Y2UwLCAweDEwNDAwMDIyLCAweDAsCisweDNjMDIwMDAxLCAweDhjNDI1Y2NjLCAweDEwNDAwMDBhLCAweDI0MDIwMDAxLAorMHgzYzAxMDAwMSwgMHhhYzIwNWNjYywgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMjI4M2FjLCAweDNjMDEwMDAxLCAweGFjMjA1ZDRjLCAweDNjMDEwMDAxLAorMHhhYzIyNWQwNCwgMHgzYzAzMDAwMSwgMHg3NzE4MjEsIDB4OGM2MzgzYWMsCisweDI0MDIwMDA4LCAweDEwNjIwMDA1LCAweDI0MDIwMDAxLCAweGMwMDQ2OTUsCisweDAsIDB4ODAwNDY5MiwgMHgwLCAweDNjMDMwMDAxLAorMHg4YzYzNWNjOCwgMHgxMDYyMDAwNywgMHgyNDAyMDAwZSwgMHgzYzAzMDAwMSwKKzB4OGM2MzdkZDAsIDB4MTA2MjAwMDMsIDB4MCwgMHhjMDA0ZTU0LAorMHg4Zjg0MDIyMCwgMHg4ZmJmMDAxMCwgMHgzZTAwMDA4LCAweDI3YmQwMDE4LAorMHgyN2JkZmZlMCwgMHgzYzAyZmRmZiwgMHhhZmJmMDAxOCwgMHg4ZWUzMDAwMCwKKzB4M2MwNTAwMDEsIDB4OGNhNTVjYzgsIDB4M2MwNDAwMDEsIDB4OGM4NDVjZjAsCisweDM0NDJmZmZmLCAweDYyMTgyNCwgMHgxNGE0MDAwOCwgMHhhZWUzMDAwMCwKKzB4M2MwMzAwMDEsIDB4NzcxODIxLCAweDhjNjM4M2FjLCAweDNjMDIwMDAxLAorMHg4YzQyNWNmNCwgMHgxMDYyMDAwOCwgMHgwLCAweDNjMDIwMDAxLAorMHg1NzEwMjEsIDB4OGM0MjgzYWMsIDB4M2MwMTAwMDEsIDB4YWMyNTVjZjAsCisweDNjMDEwMDAxLCAweGFjMjI1Y2Y0LCAweDNjMDMwMDAxLCAweDhjNjM1Y2M4LAorMHgyNDAyMDAwMiwgMHgxMDYyMDE2OSwgMHgyYzYyMDAwMywgMHgxMDQwMDAwNSwKKzB4MjQwMjAwMDEsIDB4MTA2MjAwMDgsIDB4MCwgMHg4MDA0ODFjLAorMHgwLCAweDI0MDIwMDA0LCAweDEwNjIwMGIxLCAweDI0MDIwMDAxLAorMHg4MDA0ODFkLCAweDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg4YzQyODNhYywgMHgyNDQzZmZmZiwgMHgyYzYyMDAwOCwgMHgxMDQwMDE1YSwKKzB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDhjMjI1YWM4LAorMHg0MDAwMDgsIDB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNWRiYywKKzB4MjQwMjAwMDUsIDB4MTQ2MjAwMTQsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjVjZDQsIDB4MTA0MDAwMGEsIDB4MjQwMjAwMDMsIDB4YzAwNDgyMiwKKzB4MCwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMjI4M2FjLCAweDNjMDEwMDAxLCAweDgwMDQ2ZTAsIDB4YWMyMDVjZDQsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyODNhYywgMHgzYzAxMDAwMSwKKzB4ODAwNDgxZiwgMHhhYzIwNWM2MCwgMHhjMDA0ODIyLCAweDAsCisweDNjMDIwMDAxLCAweDhjNDI1Y2Q0LCAweDNjMDEwMDAxLCAweGFjMjA1YzYwLAorMHgxMDQwMDBkZCwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMjI4M2FjLCAweDNjMDEwMDAxLCAweDgwMDQ4MWYsIDB4YWMyMDVjZDQsCisweDNjMDMwMDAxLCAweDhjNjM1ZGJjLCAweDI0MDIwMDA1LCAweDE0NjIwMDAzLAorMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNWQwMCwgMHhjMDA0OWNmLAorMHgwLCAweDNjMDMwMDAxLCAweDhjNjM1ZDAwLCAweDgwMDQ3OGUsCisweDI0MDIwMDExLCAweDNjMDUwMDAxLCAweDhjYTU1Y2M4LCAweDNjMDYwMDAxLAorMHg4Y2M2N2UzYywgMHhjMDA1MTA4LCAweDIwMjEsIDB4MjQwMjAwMDUsCisweDNjMDEwMDAxLCAweGFjMjA1Y2Q0LCAweDNjMDEwMDAxLCAweDM3MDgyMSwKKzB4ODAwNDgxZiwgMHhhYzIyODNhYywgMHgzYzA0MDAwMSwgMHgyNDg0NWFiYywKKzB4M2MwNTAwMGYsIDB4MzRhNTAxMDAsIDB4MzAyMSwgMHgzODIxLAorMHhhZmEwMDAxMCwgMHhjMDAyNDAzLCAweGFmYTAwMDE0LCAweDgwMDQ4MWYsCisweDAsIDB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LAorMHg4MDA0N2I3LCAweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMwMDA0LAorMHg0MzEwMjQsIDB4MTQ0MDAwYTksIDB4MjQwMjAwMDcsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI1ZGE0LCAweDI0NjNkOGYwLCAweDQzMTAyMywKKzB4MmM0MjI3MTAsIDB4MTQ0MDAwZjgsIDB4MjQwMjAwMDEsIDB4ODAwNDgxZCwKKzB4MCwgMHgzYzA1MDAwMSwgMHg4Y2E1NWNjOCwgMHhjMDA1MmEyLAorMHgyMDIxLCAweGMwMDUzODYsIDB4MjAyMSwgMHgzYzAzMDAwMSwKKzB4OGM2MzdlMzQsIDB4NDYxMDBlYSwgMHgyNDAyMDAwMSwgMHgzYzAyMDAwOCwKKzB4NjIxMDI0LCAweDEwNDAwMDA2LCAweDAsIDB4OGY4MjAyMTQsCisweDNjMDNmZmZmLCAweDQzMTAyNCwgMHg4MDA0NzQxLCAweDM0NDIyNTFmLAorMHg4ZjgyMDIxNCwgMHgzYzAzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjI0MWYsCisweGFmODIwMjE0LCAweDhlZTIwMDAwLCAweDNjMDMwMjAwLCAweDQzMTAyNSwKKzB4YWVlMjAwMDAsIDB4OGY4MjAyMjAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LAorMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwKKzB4MjQwMjAwMDgsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjI4M2FjLAorMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsIDB4MTQ0MDAwMDUsCisweDAsIDB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LAorMHhhZjgyMDIyMCwgMHgzYzAzMDAwMSwgMHg4YzYzNWRiYywgMHgyNDAyMDAwNSwKKzB4MTQ2MjAwMGEsIDB4MCwgMHgzYzAyMDAwMSwgMHg5NDQyNWRhMiwKKzB4MjQ0MjlmYmMsIDB4MmM0MjAwMDQsIDB4MTA0MDAwMDQsIDB4MjQwNDAwMTgsCisweDI0MDUwMDAyLCAweGMwMDRkOTMsIDB4MjQwNjAwMjAsIDB4YzAwNDNkZCwKKzB4MCwgMHgzYzAxMDAwMSwgMHg4MDA0ODFmLCAweGFjMjA1ZDUwLAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjgzYWMsIDB4MjQ0M2ZmZmYsCisweDJjNjIwMDA4LCAweDEwNDAwMGFjLCAweDMxMDgwLCAweDNjMDEwMDAxLAorMHgyMjA4MjEsIDB4OGMyMjVhZTgsIDB4NDAwMDA4LCAweDAsCisweGMwMDQyOWIsIDB4MCwgMHgzYzAxMDAwMSwgMHhhYzIwNWNjYywKKzB4YWY4MDAyMDQsIDB4M2MwMTAwMDEsIDB4YzAwNDgyMiwgMHhhYzIwN2UyMCwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjVjZTQsIDB4MjQwMjAwMDIsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHg4MDA0ODFmLCAweGFjMjI4M2FjLAorMHhjMDA0ODlmLCAweDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVjZTQsCisweDI0MDIwMDA5LCAweDE0NjIwMDkwLCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4ODAwNDgxZiwgMHhhYzIyODNhYywgMHgzYzAyMDAwMSwKKzB4OGM0MjdlMzgsIDB4MzA0MjQwMDAsIDB4MTA0MDAwMDUsIDB4MCwKKzB4OGY4MjAwNDQsIDB4M2MwM2ZmZmYsIDB4ODAwNDc5ZiwgMHgzNDYzN2ZmZiwKKzB4OGY4MjAwNDQsIDB4MjQwM2ZmN2YsIDB4NDMxMDI0LCAweGFmODIwMDQ0LAorMHg4ZjgzMDA1NCwgMHg4MDA0N2I5LCAweDI0MDIwMDA0LCAweDhmODMwMDU0LAorMHgzYzAyMDAwMSwgMHg4YzQyNWRhNCwgMHgyNDYzZDhmMCwgMHg0MzEwMjMsCisweDJjNDIyNzEwLCAweDE0NDAwMDc0LCAweDI0MDIwMDA1LCAweDNjMDEwMDAxLAorMHgzNzA4MjEsIDB4ODAwNDgxZiwgMHhhYzIyODNhYywgMHg4ZjgyMDIyMCwKKzB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAweGFmODAwMjA0LAorMHgzYzAxMDAwMSwgMHhhYzIwN2UyMCwgMHg4ZjgzMDA1NCwgMHgyNDAyMDAwNiwKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjI4M2FjLCAweDNjMDEwMDAxLAorMHg4MDA0ODFmLCAweGFjMjM1ZGE0LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLAorMHg4YzQyNWRhNCwgMHgyNDYzZmZmNiwgMHg0MzEwMjMsIDB4MmM0MjAwMGEsCisweDE0NDAwMDU5LCAweDAsIDB4MjQwMjAwMDcsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHg4MDA0ODFmLCAweGFjMjI4M2FjLCAweDhmODIwMjIwLAorMHgzYzA0ZjcwMCwgMHg0NDEwMjUsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsCisweDNjMDMwMzAwLCAweDQzMTAyNCwgMHgxNDQwMDAwNSwgMHgxODIxLAorMHg4ZjgyMDIyMCwgMHgyNDAzMDAwMSwgMHg0NDEwMjUsIDB4YWY4MjAyMjAsCisweDEwNjAwMDQzLCAweDI0MDIwMDAxLCAweDhmODIwMjE0LCAweDNjMDNmZmZmLAorMHgzYzA0MDAwMSwgMHg4Yzg0NWQ5OCwgMHg0MzEwMjQsIDB4MzQ0MjI1MWYsCisweGFmODIwMjE0LCAweDI0MDIwMDA4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwKKzB4MTA4MDAwMGIsIDB4YWMyMjgzYWMsIDB4M2MwMjAwMDEsIDB4OGM0MjVkNzQsCisweDE0NDAwMDA3LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI3ZGQwLAorMHhjMDA0ZTU0LCAweDhmODQwMjIwLCAweDgwMDQ4MGMsIDB4MCwKKzB4OGY4MjAyMjAsIDB4M2MwMzAwMDgsIDB4NDMxMDI0LCAweDE0NDAwMDE3LAorMHgyNDAyMDAwZSwgMHgzYzAxMDAwMSwgMHhhYzIyN2RkMCwgMHg4ZWUyMDAwMCwKKzB4MjAyMSwgMHgzYzAzMDIwMCwgMHg0MzEwMjUsIDB4YzAwNTM4NiwKKzB4YWVlMjAwMDAsIDB4OGY4MjAyMjAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LAorMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhjMDA0M2RkLAorMHhhZjgyMDIyMCwgMHgzYzA1MDAwMSwgMHg4Y2E1NWNjOCwgMHhjMDA1MmEyLAorMHgyMDIxLCAweDgwMDQ4MWYsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjVkNzQsIDB4MTA0MDAwMTAsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjVkNzAsIDB4MjQ0MmZmZmYsIDB4M2MwMTAwMDEsIDB4YWMyMjVkNzAsCisweDE0NDAwMDA5LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAweGFjMjA1ZDc0LAorMHgzYzAxMDAwMSwgMHg4MDA0ODFmLCAweGFjMjI1ZDcwLCAweDI0MDIwMDAxLAorMHgzYzAxMDAwMSwgMHhhYzIyNWNjYywgMHg4ZmJmMDAxOCwgMHgzZTAwMDA4LAorMHgyN2JkMDAyMCwgMHg4ZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHg4ZjgyMDIyMCwKKzB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMDAsIDB4M2MwNjAwMDEsCisweDhjYzY1Y2M4LCAweDM0NDIwMDA0LCAweGFmODIwMjAwLCAweDI0MDIwMDAyLAorMHgxMGMyMDAzYSwgMHgyY2MyMDAwMywgMHgxMDQwMDAwNSwgMHgyNDAyMDAwMSwKKzB4MTBjMjAwMDgsIDB4MCwgMHg4MDA0ODY4LCAweDAsCisweDI0MDIwMDA0LCAweDEwYzIwMDEzLCAweDI0MDIwMDAxLCAweDgwMDQ4NjgsCisweDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVjYjgsIDB4M2MwMjAwMDEsCisweDhjNDI1Y2MwLCAweDNjMDQwMDAxLCAweDhjODQ1Y2RjLCAweDNjMDUwMDAxLAorMHg4Y2E1NWNiYywgMHhhZjg2MDIwMCwgMHhhZjg2MDIyMCwgMHgzNDYzMDAyMiwKKzB4NDQxMDI1LCAweDQ1MTAyNSwgMHgzNDQyMDAwMiwgMHg4MDA0ODY3LAorMHhhZjgzMDIwMCwgMHgzYzAzMDAwMSwgMHg4YzYzNWQ5OCwgMHhhZjgyMDIwMCwKKzB4MTA2MDAwMDksIDB4YWY4MjAyMjAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkNzQsCisweDE0NDAwMDA1LCAweDNjMDMzZjAwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2IwLAorMHg4MDA0ODViLCAweDM0NjMwMGUwLCAweDNjMDIwMDAxLCAweDhjNDI1Y2IwLAorMHgzYzAzM2YwMCwgMHgzNDYzMDBlMiwgMHg0MzEwMjUsIDB4YWY4MjAyMDAsCisweDNjMDMwMDAxLCAweDhjNjM1Y2I0LCAweDNjMDRmNzAwLCAweDNjMDIwMDAxLAorMHg4YzQyNWNjMCwgMHgzYzA1MDAwMSwgMHg4Y2E1NWNkYywgMHg2NDE4MjUsCisweDQzMTAyNSwgMHg0NTEwMjUsIDB4YWY4MjAyMjAsIDB4M2UwMDAwOCwKKzB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwMSwgMHg4YzYzNWNjOCwKKzB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMGYsCisweDAsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MjQ2MzAwMDIsCisweDYyMTAyMywgMHgyYzQyMDAwMywgMHgxMDQwMDAxMSwgMHgwLAorMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDMsIDB4MTA0MDAwMGMsCisweDAsIDB4ODAwNDg3OSwgMHgwLCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHg4MDA0ODg1LCAweDI0NjMwMDA3LCAweDhmODIwMDU0LAorMHg2MjEwMjMsIDB4MmM0MjAwMDgsIDB4MTQ0MGZmZmMsIDB4MCwKKzB4OGY4NDAwZTAsIDB4MzA4MjAwMDcsIDB4MTA0MDAwMGQsIDB4MCwKKzB4OGY4MjAwNTQsIDB4OGY4MzAwZTAsIDB4MTQ4MzAwMDksIDB4MjQ0NTAwMzIsCisweDhmODIwMDU0LCAweGEyMTAyMywgMHgyYzQyMDAzMywgMHgxMDQwMDAwNCwKKzB4MCwgMHg4ZjgyMDBlMCwgMHgxMDgyZmZmOSwgMHgwLAorMHg4ZjgyMDIyMCwgMHgyNDAzZmZmZCwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsCisweDNlMDAwMDgsIDB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNWNlNCwKKzB4M2MwMjAwMDEsIDB4OGM0MjVjZTgsIDB4NTA2MjAwMDQsIDB4MjQ2M2ZmZmYsCisweDNjMDEwMDAxLCAweGFjMjM1Y2U4LCAweDI0NjNmZmZmLCAweDJjNjIwMDA5LAorMHgxMDQwMDA5ZCwgMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsCisweDhjMjI1YjA4LCAweDQwMDAwOCwgMHgwLCAweDhmODIwMDQ0LAorMHgzNDQyODA4MCwgMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4MDA0OTM4LAorMHgyNDAyMDAwMiwgMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWRhOCwKKzB4MjQ2M2Q4ZjAsIDB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMDhhLAorMHgyNDAyMDAwMywgMHg4MDA0OTQ1LCAweDAsIDB4OGY4MjAwNDQsCisweDNjMDNmZmZmLCAweDM0NjM3ZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwKKzB4OGY4MzAwNTQsIDB4ODAwNDkzOCwgMHgyNDAyMDAwNCwgMHg4ZjgzMDA1NCwKKzB4M2MwMjAwMDEsIDB4OGM0MjVkYTgsIDB4MjQ2M2ZmZjYsIDB4NDMxMDIzLAorMHgyYzQyMDAwYSwgMHgxNDQwMDA3OCwgMHgyNDAyMDAwNSwgMHg4MDA0OTQ1LAorMHgwLCAweDhmODIwMjIwLCAweDNjMDNmNzAwLCAweDQzMTAyNSwKKzB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LAorMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwKKzB4M2MwMjNmMDAsIDB4MzQ0MjAwZTAsIDB4YWY4MjAyMDAsIDB4OGY4MjAyMDAsCisweDI0MDNmZmZkLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwgMHgyNDA0MDAwMSwKKzB4MzQwNWZmZmYsIDB4YWY4NDAyMDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsCisweDgwMDQ4ZWMsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLAorMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMjI0LAorMHg0MjA0MCwgMHhhNDEwMmIsIDB4MTA0MGZmZjIsIDB4MCwKKzB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAweGFmODIwMjIwLAorMHg4ZjgyMDIxNCwgMHgzYzAzZmZmZiwgMHg0MzEwMjQsIDB4MzQ0MjI1MWYsCisweGFmODIwMjE0LCAweDhmODIwMjIwLCAweDI0MDNmZmZiLCAweDQzMTAyNCwKKzB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4M2MwNGY3MDAsIDB4MzQ4NDAwMDgsCisweDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMzZjAwLAorMHgzNDYzMDBlMiwgMHg0NDEwMjUsIDB4YWY4MjAyMjAsIDB4YWY4MzAyMDAsCisweDhmODQwMGYwLCAweDI3NjIxN2Y4LCAweDE0ODIwMDAyLCAweDI0ODUwMDA4LAorMHgyNzY1MTAwMCwgMHg4ZjgyMDBmNCwgMHgxMGEyMDAwNywgMHgzYzAzODAwMCwKKzB4MzQ2MzAwNDAsIDB4M2MwMjAwMDEsIDB4MjQ0MjVjNzAsIDB4YWM4MjAwMDAsCisweGFjODMwMDA0LCAweGFmODUwMGYwLCAweDhmODMwMDU0LCAweDgwMDQ5MzgsCisweDI0MDIwMDA2LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI1ZGE4LAorMHgyNDYzZmZmNiwgMHg0MzEwMjMsIDB4MmM0MjAwMGEsIDB4MTQ0MDAwMjIsCisweDI0MDIwMDA3LCAweDgwMDQ5NDUsIDB4MCwgMHg4ZjgyMDBlMCwKKzB4YWY4MjAwZTQsIDB4OGY4MjAwZTAsIDB4YWY4MjAwZTgsIDB4OGY4MjAyMjAsCisweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDI0MDNmZmY3LAorMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4OGY4MjAwNDQsIDB4MzQ0MjgwODAsCisweGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDI0MDIwMDA4LCAweDNjMDEwMDAxLAorMHhhYzIyNWNlNCwgMHgzYzAxMDAwMSwgMHg4MDA0OTQ3LCAweGFjMjM1ZGE4LAorMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyNWRhOCwgMHgyNDYzZDhmMCwKKzB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMDAzLCAweDI0MDIwMDA5LAorMHgzYzAxMDAwMSwgMHhhYzIyNWNlNCwgMHgzZTAwMDA4LCAweDAsCisweDAsIDB4MCwgMHgwLCAweDI3YmRmZmQ4LAorMHhhZmIyMDAxOCwgMHg4MDkwMjEsIDB4YWZiMzAwMWMsIDB4YTA5ODIxLAorMHhhZmIxMDAxNCwgMHhjMDg4MjEsIDB4YWZiMDAwMTAsIDB4ODAyMSwKKzB4YWZiZjAwMjAsIDB4YTYyMDAwMDAsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwKKzB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwKKzB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsIDB4MjQwNDAwMDEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHgyNDEwMDAxMCwgMHgyNTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLAorMHgyNTAxMDI0LCAweDI0MTAwMDEwLCAweDI3MDEwMjQsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDI3MDEwMjQsIDB4YzAwNGQ3MSwgMHgzNDEwODAwMCwKKzB4YzAwNGQ3MSwgMHgwLCAweGMwMDRkMmIsIDB4MCwKKzB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAweDUwMTAyNSwKKzB4YTYyMjAwMDAsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsCisweGMwMDRkNzEsIDB4MCwgMHg4ZmJmMDAyMCwgMHg4ZmIzMDAxYywKKzB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMjgsIDB4MjdiZGZmZDgsIDB4YWZiMTAwMTQsIDB4ODA4ODIxLAorMHhhZmIyMDAxOCwgMHhhMDkwMjEsIDB4YWZiMzAwMWMsIDB4YzA5ODIxLAorMHhhZmIwMDAxMCwgMHg4MDIxLCAweGFmYmYwMDIwLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MjMwMTAyNCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MjMwMTAyNCwgMHgyNDEwMDAxMCwgMHgyNTAxMDI0LAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgyNTAxMDI0LCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwgMHgzNDEwODAwMCwKKzB4OTY2MjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmY4LAorMHgwLCAweGMwMDRkNzEsIDB4MCwgMHg4ZmJmMDAyMCwKKzB4OGZiMzAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsCisweDNlMDAwMDgsIDB4MjdiZDAwMjgsIDB4M2MwMzAwMDEsIDB4OGM2MzVkMDAsCisweDNjMDIwMDAxLCAweDhjNDI1ZDQ4LCAweDI3YmRmZmQ4LCAweGFmYmYwMDIwLAorMHhhZmIxMDAxYywgMHgxMDYyMDAwMywgMHhhZmIwMDAxOCwgMHgzYzAxMDAwMSwKKzB4YWMyMzVkNDgsIDB4MjQ2M2ZmZmYsIDB4MmM2MjAwMTMsIDB4MTA0MDAzNDksCisweDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNWIzMCwKKzB4NDAwMDA4LCAweDAsIDB4YzAwNGQ3MSwgMHg4MDIxLAorMHgzNDAyODAwMCwgMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwKKzB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLAorMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHhjMDA0ZDRiLAorMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywgMHgwLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkNzEsIDB4MCwKKzB4ODAwNGQyNCwgMHgyNDAyMDAwMiwgMHgyN2IxMDAxMCwgMHhhN2EwMDAxMCwKKzB4ODAyMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLAorMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsCisweDIwMjEsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLAorMHgyNDEwMDAxMCwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4MTA4MDQyLAorMHgxNjAwZmZmYywgMHgwLCAweGMwMDRkNzEsIDB4MzQxMDgwMDAsCisweGMwMDRkNzEsIDB4MCwgMHhjMDA0ZDJiLCAweDAsCisweDUwNDAwMDA1LCAweDEwODA0MiwgMHg5NjIyMDAwMCwgMHg1MDEwMjUsCisweGE2MjIwMDAwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLAorMHhjMDA0ZDcxLCAweDAsIDB4OTdhMjAwMTAsIDB4MzA0MjgwMDAsCisweDE0NDAwMmRjLCAweDI0MDIwMDAzLCAweDgwMDRkMjQsIDB4MCwKKzB4MjQwMjEyMDAsIDB4YTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4YzAwNGQ0YiwgMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywKKzB4MCwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDIwMjEsIDB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkNzEsCisweDAsIDB4OGY4MzAwNTQsIDB4ODAwNGQxNiwgMHgyNDAyMDAwNCwKKzB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsCisweDQzMTAyMywgMHgyYzQyMDA2NCwgMHgxNDQwMDI5ZSwgMHgyNDAyMDAwMiwKKzB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIDB4MTA2MjAyOTcsIDB4MmM2MjAwMDMsCisweDE0NDAwMjk2LCAweDI0MDIwMDExLCAweDI0MDIwMDAzLCAweDEwNjIwMDA1LAorMHgyNDAyMDAwNCwgMHgxMDYyMDI5MSwgMHgyNDAyMDAwZiwgMHg4MDA0ZDI0LAorMHgyNDAyMDAxMSwgMHg4MDA0ZDI0LCAweDI0MDIwMDA1LCAweDI0MDIwMDE0LAorMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHg4MDIxLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDEyLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxMiwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4MzQxMDgwMDAsCisweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmOCwKKzB4MCwgMHhjMDA0ZDcxLCAweDAsIDB4OGY4MzAwNTQsCisweDgwMDRkMTYsIDB4MjQwMjAwMDYsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsCisweDhjNDI1ZGI4LCAweDI0NjNmZjljLCAweDQzMTAyMywgMHgyYzQyMDA2NCwKKzB4MTQ0MDAyNTAsIDB4MjQwMjAwMDcsIDB4ODAwNGQyNCwgMHgwLAorMHgyNDAyMDAwNiwgMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHg4MDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLAorMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLAorMHgzMjAyMDAxMywgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLAorMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxMywKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsCisweDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwKKzB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsCisweDhmODMwMDU0LCAweDgwMDRkMTYsIDB4MjQwMjAwMDgsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI1ZGI4LCAweDI0NjNmZjljLCAweDQzMTAyMywKKzB4MmM0MjAwNjQsIDB4MTQ0MDAyMGYsIDB4MjQwMjAwMDksIDB4ODAwNGQyNCwKKzB4MCwgMHgyN2IxMDAxMCwgMHhhN2EwMDAxMCwgMHg4MDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLAorMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLAorMHhjMDA0ZDRiLCAweDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLAorMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLAorMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwKKzB4YzAwNGQ3MSwgMHgzNDEwODAwMCwgMHhjMDA0ZDcxLCAweDAsCisweGMwMDRkMmIsIDB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsCisweDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsCisweDE2MDBmZmY3LCAweDAsIDB4YzAwNGQ3MSwgMHg4MDIxLAorMHg5N2EyMDAxMCwgMHgyN2IxMDAxMCwgMHgzNDQyMDAwMSwgMHhhN2EyMDAxMCwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmY4LCAweDAsIDB4YzAwNGQ3MSwgMHgwLAorMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDBhLCAweDhmODMwMDU0LAorMHgzYzAyMDAwMSwgMHg4YzQyNWRiOCwgMHgyNDYzZmY5YywgMHg0MzEwMjMsCisweDJjNDIwMDY0LCAweDE0NDAwMTliLCAweDI0MDIwMDBiLCAweDgwMDRkMjQsCisweDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ0YiwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTcsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTcsCisweGMwMDRkNzEsIDB4MzQxMDgwMDAsIDB4YzAwNGQ3MSwgMHgwLAorMHhjMDA0ZDJiLCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLAorMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLAorMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkNzEsIDB4ODAyMSwKKzB4OTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4MzQ0MjA3MDAsIDB4YTdhMjAwMTAsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDE3LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE3LAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkNzEsIDB4MCwKKzB4OGY4MzAwNTQsIDB4ODAwNGQxNiwgMHgyNDAyMDAwYywgMHg4ZjgzMDA1NCwKKzB4M2MwMjAwMDEsIDB4OGM0MjVkYjgsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLAorMHgyYzQyMDA2NCwgMHgxNDQwMDEyNywgMHgyNDAyMDAxMiwgMHg4MDA0ZDI0LAorMHgwLCAweDI3YjEwMDEwLCAweGE3YTAwMDEwLCAweDgwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsIDB4MjQwNDAwMDEsCisweGMwMDRkNGIsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDE0LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNGIsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE0LAorMHhjMDA0ZDcxLCAweDM0MTA4MDAwLCAweGMwMDRkNzEsIDB4MCwKKzB4YzAwNGQyYiwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwKKzB4OTYyMjAwMDAsIDB4NTAxMDI1LCAweGE2MjIwMDAwLCAweDEwODA0MiwKKzB4MTYwMGZmZjcsIDB4MCwgMHhjMDA0ZDcxLCAweDgwMjEsCisweDk3YTIwMDEwLCAweDI3YjEwMDEwLCAweDM0NDIwMDEwLCAweGE3YTIwMDEwLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLAorMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLAorMHgzMjAyMDAxNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLAorMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxNCwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsCisweDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwKKzB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZDcxLCAweDAsCisweDhmODMwMDU0LCAweDgwMDRkMTYsIDB4MjQwMjAwMTMsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI1ZGI4LCAweDI0NjNmZjljLCAweDQzMTAyMywKKzB4MmM0MjAwNjQsIDB4MTQ0MDAwYjMsIDB4MjQwMjAwMGQsIDB4ODAwNGQyNCwKKzB4MCwgMHgyN2IxMDAxMCwgMHhhN2EwMDAxMCwgMHg4MDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLAorMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLAorMHhjMDA0ZDRiLCAweDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLAorMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLAorMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwKKzB4YzAwNGQ3MSwgMHgzNDEwODAwMCwgMHhjMDA0ZDcxLCAweDAsCisweGMwMDRkMmIsIDB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsCisweDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsCisweDE2MDBmZmY3LCAweDAsIDB4YzAwNGQ3MSwgMHg4MDIxLAorMHg5N2EyMDAxMCwgMHgyN2IxMDAxMCwgMHgzMDQyZmZmZSwgMHhhN2EyMDAxMCwKKzB4YzAwNGQ0YiwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDRiLCAweDIwMjEsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsCisweGMwMDRkNGIsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLAorMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmY4LCAweDAsIDB4YzAwNGQ3MSwgMHgwLAorMHg4ZjgzMDA1NCwgMHg4MDA0ZDE2LCAweDI0MDIwMDBlLCAweDI0MDIwODQwLAorMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHg4MDIxLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDEzLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxMywgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4MzQxMDgwMDAsCisweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDEwODA0MiwgMHgxNjAwZmZmOCwKKzB4MCwgMHhjMDA0ZDcxLCAweDAsIDB4OGY4MzAwNTQsCisweDI0MDIwMDEwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDAwLCAweDNjMDEwMDAxLAorMHg4MDA0ZDI2LCAweGFjMjM1ZGI4LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLAorMHg4YzQyNWRiOCwgMHgyNDYzZmY5YywgMHg0MzEwMjMsIDB4MmM0MjAwNjQsCisweDE0NDAwMDA0LCAweDAsIDB4MjQwMjAwMTEsIDB4M2MwMTAwMDEsCisweGFjMjI1ZDAwLCAweDhmYmYwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LAorMHgzZTAwMDA4LCAweDI3YmQwMDI4LCAweDhmODUwMDQ0LCAweDhmODIwMDQ0LAorMHgzYzAzMDAwMSwgMHg0MzEwMjUsIDB4M2MwMzAwMDgsIDB4YWY4MjAwNDQsCisweDhmODQwMDU0LCAweDhmODIwMDU0LCAweGEzMjgyNCwgMHg4MDA0ZDM3LAorMHgyNDg0MDAwMSwgMHg4ZjgyMDA1NCwgMHg4MjEwMjMsIDB4MmM0MjAwMDIsCisweDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsIDB4M2MwM2ZmZmUsCisweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwKKzB4OGY4MjAwNTQsIDB4ODAwNGQ0NSwgMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwKKzB4NjIxMDIzLCAweDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsCisweDNlMDAwMDgsIDB4YTAxMDIxLCAweDhmODMwMDQ0LCAweDNjMDJmZmYwLAorMHgzNDQyZmZmZiwgMHg0MjQ4MCwgMHg2MjE4MjQsIDB4M2MwMjAwMDIsCisweDgyMjAyNSwgMHg2NDE4MjUsIDB4YWY4MzAwNDQsIDB4OGY4MjAwNDQsCisweDNjMDNmZmZlLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwKKzB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4ODAwNGQ1ZSwgMHgyNDYzMDAwMSwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAyLCAweDE0NDBmZmZjLAorMHgwLCAweDhmODIwMDQ0LCAweDNjMDMwMDAxLCAweDQzMTAyNSwKKzB4YWY4MjAwNDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4ODAwNGQ2YiwKKzB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAyLAorMHgxNDQwZmZmYywgMHgwLCAweDNlMDAwMDgsIDB4MCwKKzB4OGY4MjAwNDQsIDB4M2MwM2ZmZjAsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgMHgzYzAzMDAwMSwgMHg0MzEwMjUsCisweGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDgwMDRkN2YsCisweDI0NjMwMDAxLCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwKKzB4MTQ0MGZmZmMsIDB4MCwgMHg4ZjgyMDA0NCwgMHgzYzAzZmZmZSwKKzB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweGFmODIwMDQ0LCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHg4MDA0ZDhkLCAweDI0NjMwMDAxLCAweDhmODIwMDU0LAorMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwKKzB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmM4LCAweGFmYjMwMDI0LAorMHg4MDk4MjEsIDB4YWZiNTAwMmMsIDB4YTBhODIxLCAweGFmYjIwMDIwLAorMHhjMDkwMjEsIDB4MzJhMmZmZmYsIDB4YWZiZjAwMzAsIDB4YWZiNDAwMjgsCisweGFmYjEwMDFjLCAweGFmYjAwMDE4LCAweDE0NDAwMDM0LCAweGE3YjIwMDEwLAorMHgzMjcxZmZmZiwgMHgyN2IyMDAxMCwgMHg4MDIxLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDIzMDEwMjQsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDIzMDEwMjQsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweDM0MTA4MDAwLAorMHg5NjQyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIDB4MjAyMSwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTIwMDAwNzUsCisweDAsIDB4ODAwNGRjOSwgMHgwLCAweDMyNzRmZmZmLAorMHgyN2IxMDAxMCwgMHhhN2EwMDAxMCwgMHg4MDIxLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDI0MDQwMDAxLCAweGMwMDRkNGIsCisweDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDI5MDEwMjQsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDI5MDEwMjQsIDB4YzAwNGQ3MSwKKzB4MzQxMDgwMDAsIDB4YzAwNGQ3MSwgMHgwLCAweGMwMDRkMmIsCisweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLAorMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLCAweDE2MDBmZmY3LAorMHgwLCAweGMwMDRkNzEsIDB4MCwgMHgzMmE1ZmZmZiwKKzB4MjQwMjAwMDEsIDB4NTRhMjAwMDQsIDB4MjQwMjAwMDIsIDB4OTdhMjAwMTAsCisweDgwMDRlMTQsIDB4NTIxMDI1LCAweDE0YTIwMDA2LCAweDMyNzFmZmZmLAorMHg5N2EyMDAxMCwgMHgxMjE4MjcsIDB4NDMxMDI0LCAweGE3YTIwMDEwLAorMHgzMjcxZmZmZiwgMHgyN2IyMDAxMCwgMHg4MDIxLCAweGMwMDRkNGIsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNGIsIDB4MjAyMSwgMHhjMDA0ZDRiLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDRiLCAweDIwMjEsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDIzMDEwMjQsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDIzMDEwMjQsIDB4YzAwNGQ0YiwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgyMDIxLCAweDM0MTA4MDAwLAorMHg5NjQyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIDB4MjAyMSwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ0YiwgMHgxMDgwNDIsIDB4MTYwMGZmZjgsCisweDAsIDB4YzAwNGQ3MSwgMHgwLCAweDhmYmYwMDMwLAorMHg4ZmI1MDAyYywgMHg4ZmI0MDAyOCwgMHg4ZmIzMDAyNCwgMHg4ZmIyMDAyMCwKKzB4OGZiMTAwMWMsIDB4OGZiMDAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAzOCwKKzB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZTgsCisweGFmYmYwMDEwLCAweDNjMDMwMDAxLCAweDc3MTgyMSwgMHg4YzYzODNhYywKKzB4MjQwMjAwMDgsIDB4MTQ2MjAyMmMsIDB4ODAzMDIxLCAweDNjMDIwMDAxLAorMHg4YzQyNWQ5OCwgMHgxNDQwMDAzMywgMHgwLCAweDhmODUwMjI0LAorMHgzOGEzMDAyMCwgMHgyYzYzMDAwMSwgMHgzOGEyMDAxMCwgMHgyYzQyMDAwMSwKKzB4NjIxODI1LCAweDE0NjAwMDBkLCAweDM4YTMwMDMwLCAweDJjNjMwMDAxLAorMHgzOGEyMDQwMCwgMHgyYzQyMDAwMSwgMHg2MjE4MjUsIDB4MTQ2MDAwMDcsCisweDM4YTMwNDAyLCAweDJjNjMwMDAxLCAweDM4YTIwNDA0LCAweDJjNDIwMDAxLAorMHg2MjE4MjUsIDB4MTA2MDAwMDUsIDB4MCwgMHhjMDA0MjliLAorMHgwLCAweDgwMDRlOGQsIDB4MjQwMjAwMGUsIDB4YzAwNDNkZCwKKzB4MCwgMHgzYzA1MDAwMSwgMHg4Y2E1NWNjOCwgMHhjMDA1MmEyLAorMHgyMDIxLCAweDNjMDMwMDAxLCAweDhjNjM1Y2M4LCAweDI0MDIwMDA0LAorMHgxNDYyMDAwNSwgMHgyNDAzZmZmYiwgMHgzYzAyMDAwMSwgMHg4YzQyNWNjNCwKKzB4ODAwNGU4OSwgMHgyNDAzZmZmNywgMHgzYzAyMDAwMSwgMHg4YzQyNWNjNCwKKzB4NDMxMDI0LCAweDNjMDEwMDAxLCAweGFjMjI1Y2M0LCAweDI0MDIwMDBlLAorMHgzYzAxMDAwMSwgMHhjMDA0MjliLCAweGFjMjI3ZGQwLCAweDgwMDUwODcsCisweDAsIDB4OGY4MjAyMjAsIDB4M2MwMzA0MDAsIDB4NDMxMDI0LAorMHgxMDQwMDAyNywgMHgyNDAzZmZiZiwgMHg4Zjg1MDIyNCwgMHgzYzAyMDAwMSwKKzB4OGM0MjdkZGMsIDB4YTMyMDI0LCAweDQzMTAyNCwgMHgxNDgyMDAwYywKKzB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyN2RlMCwgMHgyNDQyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyMjdkZTAsIDB4MmM0MjAwMDIsIDB4MTQ0MDAwMDgsCisweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDgwMDRlYWQsIDB4YWMyMjdlMDAsCisweDNjMDEwMDAxLCAweGFjMjA3ZGUwLCAweDNjMDEwMDAxLCAweGFjMjA3ZTAwLAorMHgzYzAyMDAwMSwgMHg4YzQyN2UwMCwgMHgxMDQwMDAwNiwgMHgzMGEyMDA0MCwKKzB4MTA0MDAwMDQsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4ODAwNGViOCwKKzB4YWMyMjdlMDQsIDB4M2MwMTAwMDEsIDB4YWMyMDdlMDQsIDB4M2MwMTAwMDEsCisweGFjMjU3ZGRjLCAweDNjMDEwMDAxLCAweDgwMDRlYzgsIDB4YWMyMDdlMTAsCisweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI3ZTEwLCAweDNjMDEwMDAxLAorMHhhYzIwN2UwMCwgMHgzYzAxMDAwMSwgMHhhYzIwN2RlMCwgMHgzYzAxMDAwMSwKKzB4YWMyMDdlMDQsIDB4M2MwMTAwMDEsIDB4YWMyMDdkZGMsIDB4M2MwMzAwMDEsCisweDhjNjM3ZGQwLCAweDNjMDIwMDAxLCAweDhjNDI3ZGQ0LCAweDEwNjIwMDAzLAorMHgzYzAyMDIwMCwgMHgzYzAxMDAwMSwgMHhhYzIzN2RkNCwgMHhjMjEwMjQsCisweDEwNDAwMDA3LCAweDI0NjNmZmZmLCAweDhmODIwMjIwLCAweDI0MDMwMDAxLAorMHgzYzAxMDAwMSwgMHhhYzIzNWNjYywgMHg4MDA1MDg1LCAweDNjMDNmNzAwLAorMHgyYzYyMDAwZSwgMHgxMDQwMDFhOCwgMHgzMTA4MCwgMHgzYzAxMDAwMSwKKzB4MjIwODIxLCAweDhjMjI1YjgwLCAweDQwMDAwOCwgMHgwLAorMHgzYzAxMDAwMSwgMHhhYzIwN2UwMCwgMHgzYzAxMDAwMSwgMHhhYzIwN2RlMCwKKzB4M2MwMTAwMDEsIDB4YWMyMDdkZGMsIDB4M2MwMTAwMDEsIDB4YWMyMDdlMDQsCisweDNjMDEwMDAxLCAweGFjMjA3ZGY4LCAweDNjMDEwMDAxLCAweGFjMjA3ZGYwLAorMHhjMDA0ODZhLCAweGFmODAwMjI0LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLAorMHhhYzIyN2RkMCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UxMCwgMHgxNDQwMDA1NiwKKzB4M2MwM2ZkZmYsIDB4OGVlMjAwMDAsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHhjMDA0MjliLCAweGFlZTIwMDAwLCAweGFmODAwMjA0LCAweDhmODIwMjAwLAorMHgyNDAzZmZmZCwgMHg0MzEwMjQsIDB4YWY4MjAyMDAsIDB4M2MwMTAwMDEsCisweGFjMjA3ZTIwLCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI3ZGY4LAorMHgyNDA0MDAwMSwgMHgzYzAxMDAwMSwgMHhhYzI0N2UwYywgMHgyNDQyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyMjdkZjgsIDB4MmM0MjAwMDQsIDB4M2MwMTAwMDEsCisweGFjMjM3ZGY0LCAweDE0NDAwMDA2LCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLAorMHhhYzI0NWNjYywgMHgzYzAxMDAwMSwgMHg4MDA1MDgzLCAweGFjMjA3ZGY4LAorMHgzYzAxMDAwMSwgMHg4MDA1MDgzLCAweGFjMjI3ZGQwLCAweDhmODMwMDU0LAorMHgzYzAyMDAwMSwgMHg4YzQyN2RmNCwgMHgyNDYzZDhmMCwgMHg0MzEwMjMsCisweDJjNDIyNzEwLCAweDE0NDAwMDAzLCAweDI0MDIwMDA0LCAweDNjMDEwMDAxLAorMHhhYzIyN2RkMCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UxMCwgMHgxNDQwMDAyNiwKKzB4M2MwM2ZkZmYsIDB4OGVlMjAwMDAsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHg4MDA1MDgzLCAweGFlZTIwMDAwLCAweDNjMDQwMDAxLCAweDhjODQ1ZDljLAorMHgzYzAxMDAwMSwgMHhjMDA1MDhhLCAweGFjMjA3ZGU4LCAweDNjMDIwMDAxLAorMHg4YzQyN2UxYywgMHhhZjgyMDIwNCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UxMCwKKzB4MTQ0MDAwMTUsIDB4M2MwM2ZkZmYsIDB4OGVlMjAwMDAsIDB4MzQ2M2ZmZmYsCisweDQzMTAyNCwgMHhhZWUyMDAwMCwgMHg4ZjgyMDIwNCwgMHgzMDQyMDAzMCwKKzB4MTQ0MDAxM2MsIDB4MjQwMjAwMDIsIDB4M2MwMzAwMDEsIDB4OGM2MzdlMWMsCisweDI0MDIwMDA1LCAweDNjMDEwMDAxLCAweGFjMjI3ZGQwLCAweDNjMDEwMDAxLAorMHg4MDA1MDgzLCAweGFjMjM3ZTIwLCAweDNjMDIwMDAxLCAweDhjNDI3ZTEwLAorMHgxMDQwMDAxMCwgMHgzYzAzZmRmZiwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ2YywKKzB4MjQ0MjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjVkNmMsIDB4MmM0MjAwMDIsCisweDE0NDAwMTMxLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1ZDc0LAorMHgzYzAxMDAwMSwgMHhhYzIwNWQ2YywgMHgzYzAxMDAwMSwgMHg4MDA1MDgzLAorMHhhYzIyNWNjYywgMHg4ZWUyMDAwMCwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsCisweGFlZTIwMDAwLCAweDNjMDIwMDAxLCAweDhjNDI3ZTAwLCAweDEwNDAwMTIyLAorMHgwLCAweDNjMDIwMDAxLCAweDhjNDI3ZGRjLCAweDEwNDAwMTFlLAorMHgwLCAweDNjMDEwMDAxLCAweGFjMjI3ZTA4LCAweDI0MDIwMDAzLAorMHgzYzAxMDAwMSwgMHhhYzIyN2RlMCwgMHg4MDA1MDI0LCAweDI0MDIwMDA2LAorMHgzYzAxMDAwMSwgMHhhYzIwN2RlOCwgMHg4ZjgyMDIwNCwgMHgzNDQyMDA0MCwKKzB4YWY4MjAyMDQsIDB4M2MwMjAwMDEsIDB4OGM0MjdlMjAsIDB4MjQwMzAwMDcsCisweDNjMDEwMDAxLCAweGFjMjM3ZGQwLCAweDM0NDIwMDQwLCAweDNjMDEwMDAxLAorMHhhYzIyN2UyMCwgMHgzYzAyMDAwMSwgMHg4YzQyN2UwMCwgMHgxMDQwMDAwNSwKKzB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyN2RkYywgMHgxMDQwMDBmOSwKKzB4MjQwMjAwMDIsIDB4M2MwNTAwMDEsIDB4MjRhNTdkZTAsIDB4OGNhMjAwMDAsCisweDJjNDI0ZTIxLCAweDEwNDAwMGYzLCAweDI0MDIwMDAyLCAweDNjMDIwMDAxLAorMHg4YzQyN2UwNCwgMHgxMDQwMDBmOCwgMHgyNDA0ZmZiZiwgMHgzYzAyMDAwMSwKKzB4OGM0MjdkZGMsIDB4M2MwMzAwMDEsIDB4OGM2MzdlMDgsIDB4NDQxMDI0LAorMHg2NDE4MjQsIDB4MTA0MzAwMDQsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsCisweDgwMDUwODMsIDB4YWMyMjdkZDAsIDB4MjQwMjAwMDMsIDB4YWNhMjAwMDAsCisweDI0MDIwMDA4LCAweDNjMDEwMDAxLCAweGFjMjI3ZGQwLCAweDNjMDIwMDAxLAorMHg4YzQyN2UwYywgMHgxMDQwMDAwYywgMHgyNDAyMDAwMSwgMHgzYzA0MDAwMSwKKzB4YzAwNTA5NywgMHg4Yzg0N2RkYywgMHgzYzAyMDAwMSwgMHg4YzQyN2UyOCwKKzB4MTQ0MDAwMDUsIDB4MjQwMjAwMDEsIDB4M2MwMjAwMDEsIDB4OGM0MjdlMjQsCisweDEwNDAwMDA2LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1Y2NjLAorMHgzYzAxMDAwMSwgMHg4MDA1MDgzLCAweGFjMjA3ZGY4LCAweDNjMDIwMDAxLAorMHg4YzQyN2RmMCwgMHgzYzAzMDAwMSwgMHg4YzYzN2RkYywgMHgyYzQyMDAwMSwKKzB4MjEwYzAsIDB4MzA2MzAwMDgsIDB4M2MwMTAwMDEsIDB4YWMyMjdkZjAsCisweDNjMDEwMDAxLCAweGFjMjM3ZGVjLCAweDhmODMwMDU0LCAweDI0MDIwMDA5LAorMHgzYzAxMDAwMSwgMHhhYzIyN2RkMCwgMHgzYzAxMDAwMSwgMHg4MDA1MDgzLAorMHhhYzIzN2RmNCwgMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyN2RmNCwKKzB4MjQ2M2Q4ZjAsIDB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMGE4LAorMHgwLCAweDNjMDIwMDAxLCAweDhjNDI3ZTAwLCAweDEwNDAwMDA1LAorMHgwLCAweDNjMDIwMDAxLCAweDhjNDI3ZGRjLCAweDEwNDAwMGE5LAorMHgyNDAyMDAwMiwgMHgzYzAzMDAwMSwgMHgyNDYzN2RlMCwgMHg4YzYyMDAwMCwKKzB4MmM0MjRlMjEsIDB4MTA0MDAwYTMsIDB4MjQwMjAwMDIsIDB4M2MwMjAwMDEsCisweDhjNDI3ZTBjLCAweDEwNDAwMDBlLCAweDAsIDB4M2MwMjAwMDEsCisweDhjNDI3ZGRjLCAweDNjMDEwMDAxLCAweGFjMjA3ZTBjLCAweDMwNDIwMDgwLAorMHgxMDQwMDAyZiwgMHgyNDAyMDAwYywgMHg4ZjgyMDIwNCwgMHgzMDQyMDA4MCwKKzB4MTQ0MDAwMGMsIDB4MjQwMjAwMDMsIDB4ODAwNTAxMSwgMHgyNDAyMDAwYywKKzB4M2MwMjAwMDEsIDB4OGM0MjdkZGMsIDB4MzA0MjAwODAsIDB4MTQ0MDAwMDUsCisweDI0MDIwMDAzLCAweDhmODIwMjA0LCAweDMwNDIwMDgwLCAweDEwNDAwMDFmLAorMHgyNDAyMDAwMywgMHhhYzYyMDAwMCwgMHgyNDAyMDAwYSwgMHgzYzAxMDAwMSwKKzB4YWMyMjdkZDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDdlMTgsIDB4OGM4MjAwMDAsCisweDNjMDMwMDAxLCAweDhjNjM3ZGYwLCAweDQzMTAyNSwgMHhhZjgyMDIwNCwKKzB4OGM4MzAwMDAsIDB4M2MwNDAwMDEsIDB4OGM4NDdkZjAsIDB4MjQwMjAwMGIsCisweDNjMDEwMDAxLCAweGFjMjI3ZGQwLCAweDY0MTgyNSwgMHgzYzAxMDAwMSwKKzB4YWMyMzdlMjAsIDB4M2MwNTAwMDEsIDB4MjRhNTdkZTAsIDB4OGNhMjAwMDAsCisweDJjNDI0ZTIxLCAweDEwNDAwMDZmLCAweDI0MDIwMDAyLCAweDNjMDIwMDAxLAorMHg4YzQyN2UxMCwgMHgxMDQwMDAwNSwgMHgwLCAweDI0MDIwMDBjLAorMHgzYzAxMDAwMSwgMHg4MDA1MDgzLCAweGFjMjI3ZGQwLCAweDNjMDIwMDAxLAorMHg4YzQyN2UwMCwgMHgxMDQwMDA2YywgMHgwLCAweDNjMDQwMDAxLAorMHg4Yzg0N2RkYywgMHgxMDgwMDA1ZSwgMHgzMDgyMDAwOCwgMHgzYzAzMDAwMSwKKzB4OGM2MzdkZWMsIDB4MTA2MjAwNjQsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsCisweGFjMjQ3ZTA4LCAweGFjYTIwMDAwLCAweDI0MDIwMDA2LCAweDNjMDEwMDAxLAorMHg4MDA1MDgzLCAweGFjMjI3ZGQwLCAweDhmODIwMjAwLCAweDM0NDIwMDAyLAorMHhhZjgyMDIwMCwgMHg4ZjgzMDA1NCwgMHgyNDAyMDAwZCwgMHgzYzAxMDAwMSwKKzB4YWMyMjdkZDAsIDB4M2MwMTAwMDEsIDB4YWMyMzdkZjQsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI3ZGY0LCAweDI0NjNkOGYwLCAweDQzMTAyMywKKzB4MmM0MjI3MTAsIDB4MTQ0MDAwM2EsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjdlMTAsIDB4MTA0MDAwMjksIDB4MjQwMjAwMGUsIDB4M2MwMzAwMDEsCisweDhjNjM3ZTI0LCAweDNjMDEwMDAxLCAweDE0NjAwMDE1LCAweGFjMjI3ZGQwLAorMHhjMDA0M2RkLCAweDAsIDB4M2MwNTAwMDEsIDB4OGNhNTVjYzgsCisweGMwMDUyYTIsIDB4MjAyMSwgMHgzYzAzMDAwMSwgMHg4YzYzNWNjOCwKKzB4MjQwMjAwMDQsIDB4MTQ2MjAwMDUsIDB4MjQwM2ZmZmIsIDB4M2MwMjAwMDEsCisweDhjNDI1Y2M0LCAweDgwMDUwNTIsIDB4MjQwM2ZmZjcsIDB4M2MwMjAwMDEsCisweDhjNDI1Y2M0LCAweDQzMTAyNCwgMHgzYzAxMDAwMSwgMHhhYzIyNWNjNCwKKzB4OGVlMjAwMDAsIDB4M2MwMzAyMDAsIDB4NDMxMDI1LCAweGFlZTIwMDAwLAorMHg4ZjgyMDIyNCwgMHgzYzAxMDAwMSwgMHhhYzIyN2UyYywgMHg4ZjgyMDIyMCwKKzB4MjQwM2ZmZmIsIDB4NDMxMDI0LCAweGFmODIwMjIwLCAweDhmODIwMjIwLAorMHgzNDQyMDAwMiwgMHg4MDA1MDgzLCAweGFmODIwMjIwLCAweDNjMDIwMDAxLAorMHg4YzQyN2UwMCwgMHgxMDQwMDAwNSwgMHgwLCAweDNjMDIwMDAxLAorMHg4YzQyN2RkYywgMHgxMDQwMDAwZiwgMHgyNDAyMDAwMiwgMHgzYzAyMDAwMSwKKzB4OGM0MjdkZTAsIDB4MmM0MjRlMjEsIDB4MTA0MDAwMGEsIDB4MjQwMjAwMDIsCisweDNjMDIwMDAxLCAweDhjNDI3ZTAwLCAweDEwNDAwMDBmLCAweDAsCisweDNjMDIwMDAxLCAweDhjNDI3ZGRjLCAweDE0NDAwMDBiLCAweDAsCisweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAweDgwMDUwODMsIDB4YWMyMjdkZDAsCisweDNjMDIwMDAxLCAweDhjNDI3ZTAwLCAweDEwNDAwMDAzLCAweDAsCisweGMwMDQyOWIsIDB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzZjcwMCwKKzB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmYmYwMDEwLCAweDNlMDAwMDgsCisweDI3YmQwMDE4LCAweDNjMDMwMDAxLCAweDI0NjM3ZTI4LCAweDhjNjIwMDAwLAorMHgxMDQwMDAwNSwgMHgzNDQyMjAwMCwgMHgzYzAxMDAwMSwgMHhhYzIyN2UxYywKKzB4ODAwNTA5NSwgMHhhYzYwMDAwMCwgMHgzYzAxMDAwMSwgMHhhYzI0N2UxYywKKzB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmUwLCAweDMwODIwMDMwLAorMHhhZmJmMDAxOCwgMHgzYzAxMDAwMSwgMHhhYzIyN2UyNCwgMHgxNDQwMDA2NywKKzB4M2MwMmZmZmYsIDB4MzQ0MjFmMGUsIDB4ODIxMDI0LCAweDE0NDAwMDYxLAorMHgyNDAyMDAzMCwgMHgzMDgyMjAwMCwgMHgxMDQwMDA1ZCwgMHgzMDgzODAwMCwKKzB4MzFhMDIsIDB4MzA4MjAwMDEsIDB4MjEyMDAsIDB4M2MwNDAwMDEsCisweDhjODQ1ZDljLCAweDYyMTgyNSwgMHgzMzFjMiwgMHgzYzAzMDAwMSwKKzB4MjQ2MzVkNzgsIDB4MzA4MjgwMDAsIDB4MjEyMDIsIDB4MzA4NDAwMDEsCisweDQyMjAwLCAweDQ0MTAyNSwgMHgyMzljMiwgMHg2MTA4MCwKKzB4NDMxMDIxLCAweDQ3MTAyMSwgMHg5MDQzMDAwMCwgMHgyNDAyMDAwMSwKKzB4MTA2MjAwMjUsIDB4MCwgMHgxMDYwMDAwNywgMHgyNDAyMDAwMiwKKzB4MTA2MjAwMTMsIDB4MjQwMjAwMDMsIDB4MTA2MjAwMmMsIDB4M2MwNTAwMGYsCisweDgwMDUwZjksIDB4MCwgMHg4ZjgyMDIwMCwgMHgyNDAzZmVmZiwKKzB4NDMxMDI0LCAweGFmODIwMjAwLCAweDhmODIwMjIwLCAweDNjMDNmZmZlLAorMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4M2MwMTAwMDEsCisweGFjMjA3ZTQ0LCAweDNjMDEwMDAxLCAweDgwMDUxMDQsIDB4YWMyMDdlNGMsCisweDhmODIwMjAwLCAweDM0NDIwMTAwLCAweGFmODIwMjAwLCAweDhmODIwMjIwLAorMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsCisweDI0MDIwMTAwLCAweDNjMDEwMDAxLCAweGFjMjI3ZTQ0LCAweDNjMDEwMDAxLAorMHg4MDA1MTA0LCAweGFjMjA3ZTRjLCAweDhmODIwMjAwLCAweDI0MDNmZWZmLAorMHg0MzEwMjQsIDB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsIDB4M2MwMzAwMDEsCisweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgzYzAxMDAwMSwgMHhhYzIwN2U0NCwKKzB4M2MwMTAwMDEsIDB4ODAwNTEwNCwgMHhhYzIzN2U0YywgMHg4ZjgyMDIwMCwKKzB4MzQ0MjAxMDAsIDB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsIDB4M2MwMzAwMDEsCisweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgyNDAyMDEwMCwgMHgzYzAxMDAwMSwKKzB4YWMyMjdlNDQsIDB4M2MwMTAwMDEsIDB4ODAwNTEwNCwgMHhhYzIzN2U0YywKKzB4MzRhNWZmZmYsIDB4M2MwNDAwMDEsIDB4MjQ4NDViYjgsIDB4YWZhMzAwMTAsCisweGMwMDI0MDMsIDB4YWZhMDAwMTQsIDB4ODAwNTEwNCwgMHgwLAorMHgyNDAyMDAzMCwgMHgzYzAxMDAwMSwgMHhhYzIyN2UyOCwgMHg4ZmJmMDAxOCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgwLCAweDI3YmRmZmM4LAorMHhhZmIyMDAyOCwgMHg4MDkwMjEsIDB4YWZiMzAwMmMsIDB4YTA5ODIxLAorMHhhZmIwMDAyMCwgMHhjMDgwMjEsIDB4M2MwNDAwMDEsIDB4MjQ4NDViZDAsCisweDNjMDUwMDA5LCAweDNjMDIwMDAxLCAweDhjNDI1Y2M4LCAweDM0YTU5MDAxLAorMHgyNDAzMDIxLCAweDI2MDM4MjEsIDB4YWZiZjAwMzAsIDB4YWZiMTAwMjQsCisweGE3YTAwMDFhLCAweGFmYjAwMDE0LCAweGMwMDI0MDMsIDB4YWZhMjAwMTAsCisweDI0MDIwMDAyLCAweDEyNjIwMDgzLCAweDJlNjIwMDAzLCAweDEwNDAwMDA1LAorMHgyNDAyMDAwMSwgMHgxMjYyMDAwYSwgMHgwLCAweDgwMDUyOWIsCisweDAsIDB4MjQwMjAwMDQsIDB4MTI2MjAwZmEsIDB4MjQwMjAwMDgsCisweDEyNjIwMGY5LCAweDNjMDJmZmVjLCAweDgwMDUyOWIsIDB4MCwKKzB4M2MwMjAwMDEsIDB4OGM0MjVjYzQsIDB4MzA0MjAwMDIsIDB4MTQ0MDAwMDQsCisweDEyODk0MCwgMHgzYzAyZmZmYiwgMHgzNDQyZmZmZiwgMHgyMDI4MDI0LAorMHgzYzAxMDAwMSwgMHgzMTA4MjEsIDB4YWMzMDdlM2MsIDB4M2MwMjQwMDAsCisweDIwMjEwMjQsIDB4MTA0MDAwNGUsIDB4MTAyM2MyLCAweDMwODQwMDMwLAorMHgxMDEzODIsIDB4MzA0MjAwMWMsIDB4M2MwMzAwMDEsIDB4MjQ2MzVkMDgsCisweDQzMTAyMSwgMHg4MjM4MjEsIDB4M2MwMjAwMjAsIDB4MjAyMTAyNCwKKzB4MTA0MDAwMDYsIDB4MjQwMjAxMDAsIDB4M2MwMTAwMDEsIDB4MzEwODIxLAorMHhhYzIyN2U0MCwgMHg4MDA1MTUwLCAweDNjMDIwMDgwLCAweDNjMDEwMDAxLAorMHgzMTA4MjEsIDB4YWMyMDdlNDAsIDB4M2MwMjAwODAsIDB4MjAyMTAyNCwKKzB4MTA0MDAwMDYsIDB4MTIxOTQwLCAweDNjMDIwMDAxLCAweDNjMDEwMDAxLAorMHgyMzA4MjEsIDB4ODAwNTE1YywgMHhhYzIyN2U0OCwgMHgxMjExNDAsCisweDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzIwN2U0OCwgMHg5NGU0MDAwMCwKKzB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsIDB4MjQwMjAwMDUsIDB4MTA2MjAwMTAsCisweGE3YTQwMDE4LCAweDMyMDI0MDAwLCAweDEwNDAwMDAyLCAweDM0ODI0MDAwLAorMHhhN2EyMDAxOCwgMHgyNDA0MDAwMSwgMHg5NGUyMDAwMiwgMHgyNDA1MDAwNCwKKzB4MjRlNjAwMDIsIDB4MzQ0MjAwMDEsIDB4YzAwNDk4ZSwgMHhhNGUyMDAwMiwKKzB4MjQwNDAwMDEsIDB4MjgyMSwgMHhjMDA0OThlLCAweDI3YTYwMDE4LAorMHgzYzAyMDAwMSwgMHg4YzQyNWNjOCwgMHgyNDExMDAwMSwgMHgzYzAxMDAwMSwKKzB4YWMzMTVjZDQsIDB4MTQ1MzAwMDQsIDB4MzIwMjgwMDAsIDB4YzAwNDI5YiwKKzB4MCwgMHgzMjAyODAwMCwgMHgxMDQwMDExZiwgMHgwLAorMHhjMDA0MjliLCAweDAsIDB4M2MwMzAwMDEsIDB4OGM2MzVkYmMsCisweDI0MDIwMDA1LCAweDEwNjIwMTE4LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLAorMHhhYzMxNWNjYywgMHgzYzAxMDAwMSwgMHg4MDA1MjliLCAweGFjMjI1Y2M4LAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwNCwgMHgyN2IwMDAxYSwgMHhjMDA0OThlLAorMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDk4ZSwKKzB4MjAwMzAyMSwgMHgzYzAyMDAwMSwgMHg1MTEwMjEsIDB4OGM0MjdlMzQsCisweDNjMDQwMDAxLCAweDhjODQ1Y2M4LCAweDNjMDNiZmZmLCAweDM0NjNmZmZmLAorMHgzYzAxMDAwMSwgMHhhYzMzNWNkNCwgMHg0MzEwMjQsIDB4M2MwMTAwMDEsCisweDMxMDgyMSwgMHgxMDkzMDBmYSwgMHhhYzIyN2UzNCwgMHg4MDA1MjliLAorMHgwLCAweDNjMDIyMDAwLCAweDIwMjEwMjQsIDB4MTA0MDAwMDUsCisweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI1ZDk4LCAweDgwMDUxYWQsCisweDEyODk0MCwgMHgzYzAxMDAwMSwgMHhhYzIwNWQ5OCwgMHgxMjg5NDAsCisweDNjMDEwMDAxLCAweDMxMDgyMSwgMHhhYzMwN2UzOCwgMHgzYzAyNDAwMCwKKzB4MjAyMTAyNCwgMHgxNDQwMDAxNiwgMHgwLCAweDNjMDIwMDAxLAorMHg4YzQyNWQ5OCwgMHgxMDQwMDAwOCwgMHgyNDA0MDAwNCwgMHgyNDA1MDAwMSwKKzB4YzAwNGQ5MywgMHgyNDA2MjAwMCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGFjMjI4M2FjLCAweDNjMDIwMDAxLCAweDUxMTAyMSwKKzB4OGM0MjdlMzAsIDB4M2MwM2JmZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHgzYzAxMDAwMSwgMHgzMTA4MjEsIDB4ODAwNTI5OSwgMHhhYzIyN2UzMCwKKzB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTA0MDAwMjgsIDB4M2MwMzAwYTAsCisweDIwMzEwMjQsIDB4NTQ0MzAwMGQsIDB4M2MwMjAwMjAsIDB4M2MwMjAwMDEsCisweDhjNDI1ZDljLCAweDI0MDMwMTAwLCAweDNjMDEwMDAxLCAweDMxMDgyMSwKKzB4YWMyMzdlNDQsIDB4M2MwMzAwMDEsIDB4M2MwMTAwMDEsIDB4MzEwODIxLAorMHhhYzIzN2U0YywgMHg4MDA1MWYwLCAweDM0NDIwNDAwLCAweDIwMjEwMjQsCisweDEwNDAwMDA4LCAweDI0MDMwMTAwLCAweDNjMDIwMDAxLCAweDhjNDI1ZDljLAorMHgzYzAxMDAwMSwgMHgzMTA4MjEsIDB4YWMyMzdlNDQsIDB4ODAwNTFmMCwKKzB4MzQ0MjA4MDAsIDB4M2MwMjAwODAsIDB4MjAyMTAyNCwgMHgxMDQwMDAyZSwKKzB4M2MwMzAwMDEsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOWMsIDB4M2MwMTAwMDEsCisweDMxMDgyMSwgMHhhYzIzN2U0YywgMHgzNDQyMGMwMCwgMHgzYzAxMDAwMSwKKzB4YWMyMjVkOWMsIDB4ODAwNTIxOCwgMHgyNDA0MDAwMSwgMHgzYzAyMDAyMCwKKzB4MjAyMTAyNCwgMHgxMDQwMDAwNiwgMHgyNDAyMDEwMCwgMHgzYzAxMDAwMSwKKzB4MzEwODIxLCAweGFjMjI3ZTQ0LCAweDgwMDUyMDEsIDB4M2MwMjAwODAsCisweDNjMDEwMDAxLCAweDMxMDgyMSwgMHhhYzIwN2U0NCwgMHgzYzAyMDA4MCwKKzB4MjAyMTAyNCwgMHgxMDQwMDAwNywgMHgxMjE5NDAsIDB4M2MwMjAwMDEsCisweDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIyN2U0YywgMHg4MDA1MjBmLAorMHgyNDA0MDAwMSwgMHgxMjExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLAorMHhhYzIwN2U0YywgMHgyNDA0MDAwMSwgMHgyODIxLCAweDI3YjAwMDFlLAorMHhjMDA0OTRjLCAweDIwMDMwMjEsIDB4MjQwNDAwMDEsIDB4MjgyMSwKKzB4YzAwNDk0YywgMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDAxLAorMHgyN2IwMDAxYywgMHhjMDA0OTRjLCAweDIwMDMwMjEsIDB4MjQwNDAwMDEsCisweDI0MDUwMDAxLCAweGMwMDQ5NGMsIDB4MjAwMzAyMSwgMHg4MDA1Mjk5LAorMHgwLCAweDNjMDJmZmVjLCAweDM0NDJmZmZmLCAweDIwMjgwMjQsCisweDNjMDIwMDA4LCAweDIwMjgwMjUsIDB4MTIxMTQwLCAweDNjMDEwMDAxLAorMHgyMjA4MjEsIDB4YWMzMDdlMzgsIDB4M2MwMjIwMDAsIDB4MjAyMTAyNCwKKzB4MTA0MDAwMDksIDB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ3NCwKKzB4MTQ0MDAwMDUsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjVkOTgsCisweDgwMDUyM2EsIDB4M2MwMjQwMDAsIDB4M2MwMTAwMDEsIDB4YWMyMDVkOTgsCisweDNjMDI0MDAwLCAweDIwMjEwMjQsIDB4MTQ0MDAwMWUsIDB4MCwKKzB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4M2MwMTAwMDEsIDB4YWMyMDVjZTAsCisweDEwNDAwMDA3LCAweDI0MDIyMDIwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDljLAorMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjgzYWMsCisweDNjMDRiZmZmLCAweDEyMTk0MCwgMHgzYzAyMDAwMSwgMHg0MzEwMjEsCisweDhjNDI3ZTMwLCAweDNjMDUwMDAxLCAweDhjYTU1Y2M4LCAweDM0ODRmZmZmLAorMHg0NDEwMjQsIDB4M2MwMTAwMDEsIDB4MjMwODIxLCAweGFjMjI3ZTMwLAorMHgyNDAyMDAwMSwgMHgxMGEyMDA0NCwgMHgwLCAweDgwMDUyOTksCisweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTA0MDAwMWMsCisweDI0MDIyMDAwLCAweDNjMDEwMDAxLCAweGFjMjI1ZDljLCAweDNjMDMwMGEwLAorMHgyMDMxMDI0LCAweDE0NDMwMDA1LCAweDEyMTE0MCwgMHgzNDAyYTAwMCwKKzB4M2MwMTAwMDEsIDB4ODAwNTI5NCwgMHhhYzIyNWQ5YywgMHgzYzAzMDAwMSwKKzB4NjIxODIxLCAweDhjNjM3ZTM4LCAweDNjMDIwMDIwLCAweDYyMTAyNCwKKzB4MTA0MDAwMDQsIDB4MjQwMjIwMDEsIDB4M2MwMTAwMDEsIDB4ODAwNTI5NCwKKzB4YWMyMjVkOWMsIDB4M2MwMjAwODAsIDB4NjIxMDI0LCAweDEwNDAwMDFmLAorMHgzNDAyYTAwMSwgMHgzYzAxMDAwMSwgMHg4MDA1Mjk0LCAweGFjMjI1ZDljLAorMHgzYzAyMDAyMCwgMHgyMDIxMDI0LCAweDEwNDAwMDA3LCAweDEyMTk0MCwKKzB4MjQwMjAxMDAsIDB4M2MwMTAwMDEsIDB4MjMwODIxLCAweGFjMjI3ZTQ0LAorMHg4MDA1Mjg4LCAweDNjMDIwMDgwLCAweDEyMTE0MCwgMHgzYzAxMDAwMSwKKzB4MjIwODIxLCAweGFjMjA3ZTQ0LCAweDNjMDIwMDgwLCAweDIwMjEwMjQsCisweDEwNDAwMDA2LCAweDEyMTk0MCwgMHgzYzAyMDAwMSwgMHgzYzAxMDAwMSwKKzB4MjMwODIxLCAweDgwMDUyOTQsIDB4YWMyMjdlNGMsIDB4MTIxMTQwLAorMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4YWMyMDdlNGMsIDB4M2MwMzAwMDEsCisweDhjNjM1Y2M4LCAweDI0MDIwMDAxLCAweDEwNjIwMDAzLCAweDAsCisweGMwMDQyOWIsIDB4MCwgMHg4ZmJmMDAzMCwgMHg4ZmIzMDAyYywKKzB4OGZiMjAwMjgsIDB4OGZiMTAwMjQsIDB4OGZiMDAwMjAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMzgsIDB4MjdiZGZmZDgsIDB4YWZiMjAwMjAsIDB4ODA5MDIxLAorMHhhZmIxMDAxYywgMHg4ODIxLCAweDI0MDIwMDAyLCAweGFmYmYwMDI0LAorMHhhZmIwMDAxOCwgMHhhN2EwMDAxMiwgMHgxMGEyMDBkMywgMHhhN2EwMDAxMCwKKzB4MmNhMjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDEsIDB4MTBhMjAwMGEsCisweDEyODE0MCwgMHg4MDA1MzgwLCAweDIyMDEwMjEsIDB4MjQwMjAwMDQsCisweDEwYTIwMDdkLCAweDI0MDIwMDA4LCAweDEwYTIwMDdjLCAweDEyMjk0MCwKKzB4ODAwNTM4MCwgMHgyMjAxMDIxLCAweDNjMDMwMDAxLCAweDcwMTgyMSwKKzB4OGM2MzdlM2MsIDB4M2MwMjQwMDAsIDB4NjIxMDI0LCAweDE0NDAwMDA5LAorMHgyNDA0MDAwMSwgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwgMHg2Mjg4MjQsCisweDNjMDEwMDAxLCAweDMwMDgyMSwgMHhhYzMxN2UzNCwgMHg4MDA1MzgwLAorMHgyMjAxMDIxLCAweDI0MDUwMDAxLCAweGMwMDQ5NGMsIDB4MjdhNjAwMTAsCisweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweGMwMDQ5NGMsIDB4MjdhNjAwMTAsCisweDk3YTIwMDEwLCAweDMwNDIwMDA0LCAweDEwNDAwMDM0LCAweDNjMTE0MDAwLAorMHgzYzAyMDAwMSwgMHg4YzQyNWRiYywgMHgyNDQzZmZmZiwgMHgyYzYyMDAwNiwKKzB4MTA0MDAwMzQsIDB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLAorMHg4YzIyNWJlMCwgMHg0MDAwMDgsIDB4MCwgMHgyNDA0MDAwMSwKKzB4MjQwNTAwMTEsIDB4MjdiMDAwMTIsIDB4YzAwNDk0YywgMHgyMDAzMDIxLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAxMSwgMHhjMDA0OTRjLCAweDIwMDMwMjEsCisweDk3YTUwMDEyLCAweDMwYTI0MDAwLCAweDEwNDAwMDAyLCAweDNjMDQwMDEwLAorMHgzYzA0MDAwOCwgMHgzYzAzMDAwMSwgMHg4MDA1MzAxLCAweDMwYTI4MDAwLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAxNCwgMHgyN2IwMDAxMiwgMHhjMDA0OTRjLAorMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDE0LCAweGMwMDQ5NGMsCisweDIwMDMwMjEsIDB4OTdhNTAwMTIsIDB4MzBhMjEwMDAsIDB4MTA0MDAwMDIsCisweDNjMDQwMDEwLCAweDNjMDQwMDA4LCAweDNjMDMwMDAxLCAweDMwYTIwODAwLAorMHg1NDQwMDAwMSwgMHgzYzAzMDAwMiwgMHgzYzAyODAwMCwgMHgyMjIxMDI1LAorMHg2NDE4MjUsIDB4ODAwNTMwZSwgMHg0Mzg4MjUsIDB4M2MxMTAwMDEsCisweDIzMDg4MjEsIDB4OGUzMTdlM2MsIDB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsCisweDIyMjg4MjQsIDB4M2MwMjAwMDEsIDB4OGM0MjVjZDgsIDB4MTA0MDAwMWQsCisweDEyMTE0MCwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ5OCwgMHgxMDQwMDAwMiwKKzB4M2MwMjIwMDAsIDB4MjIyODgyNSwgMHgxMjExNDAsIDB4M2MwMTAwMDEsCisweDIyMDgyMSwgMHg4YzIyN2U0MCwgMHgxMDQwMDAwMywgMHgzYzAyMDAyMCwKKzB4ODAwNTMyMiwgMHgyMjI4ODI1LCAweDNjMDJmZmRmLCAweDM0NDJmZmZmLAorMHgyMjI4ODI0LCAweDEyMTE0MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsCisweDhjMjI3ZTQ4LCAweDEwNDAwMDAzLCAweDNjMDIwMDgwLCAweDgwMDUzMmQsCisweDIyMjg4MjUsIDB4M2MwMmZmN2YsIDB4MzQ0MmZmZmYsIDB4MjIyODgyNCwKKzB4MTIxMTQwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzMxN2UzNCwKKzB4ODAwNTM4MCwgMHgyMjAxMDIxLCAweDEyMjk0MCwgMHgzYzAzMDAwMSwKKzB4NjUxODIxLCAweDhjNjM3ZTM4LCAweDNjMDI0MDAwLCAweDYyMTAyNCwKKzB4MTQ0MDAwMDgsIDB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsIDB4NjI4ODI0LAorMHgzYzAxMDAwMSwgMHgyNTA4MjEsIDB4YWMzMTdlMzAsIDB4ODAwNTM4MCwKKzB4MjIwMTAyMSwgMHgzYzAyMDAwMSwgMHg4YzQyNWNkOCwgMHgxMDQwMDAzMywKKzB4M2MxMWMwMGMsIDB4M2MwMjAwMDEsIDB4OGM0MjVkNzQsIDB4M2MwNGMwMGMsCisweDM0ODQyMDAwLCAweDNjMDMwMDAxLCAweDhjNjM1ZDk4LCAweDIxMDJiLAorMHgyMTAyMywgMHg0NDEwMjQsIDB4MTA2MDAwMDMsIDB4NTE4ODI1LAorMHgzYzAyMjAwMCwgMHgyMjI4ODI1LCAweDNjMDIwMDAxLCAweDQ1MTAyMSwKKzB4OGM0MjdlNDQsIDB4MTA0MDAwMDMsIDB4M2MwMjAwMjAsIDB4ODAwNTM1ZCwKKzB4MjIyODgyNSwgMHgzYzAyZmZkZiwgMHgzNDQyZmZmZiwgMHgyMjI4ODI0LAorMHgxMjExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDhjMjI3ZTRjLAorMHgxMDQwMDAwMywgMHgzYzAyMDA4MCwgMHg4MDA1MzY4LCAweDIyMjg4MjUsCisweDNjMDJmZjdmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsIDB4M2MwMjAwMDEsCisweDhjNDI1ZDYwLCAweDEwNDAwMDAyLCAweDNjMDIwODAwLCAweDIyMjg4MjUsCisweDNjMDIwMDAxLCAweDhjNDI1ZDY0LCAweDEwNDAwMDAyLCAweDNjMDIwNDAwLAorMHgyMjI4ODI1LCAweDNjMDIwMDAxLCAweDhjNDI1ZDY4LCAweDEwNDAwMDA2LAorMHgzYzAyMDEwMCwgMHg4MDA1MzdiLCAweDIyMjg4MjUsIDB4M2MwMjdmZmYsCisweDM0NDJmZmZmLCAweDYyODgyNCwgMHgxMjExNDAsIDB4M2MwMTAwMDEsCisweDIyMDgyMSwgMHhhYzMxN2UzMCwgMHgyMjAxMDIxLCAweDhmYmYwMDI0LAorMHg4ZmIyMDAyMCwgMHg4ZmIxMDAxYywgMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LAorMHgyN2JkMDAyOCwgMHgyN2JkZmZkOCwgMHhhZmI0MDAyMCwgMHg4MGEwMjEsCisweGFmYmYwMDI0LCAweGFmYjMwMDFjLCAweGFmYjIwMDE4LCAweGFmYjEwMDE0LAorMHhhZmIwMDAxMCwgMHg4ZjkwMDIwMCwgMHgzYzAzMDAwMSwgMHg4YzYzNWNjOCwKKzB4OGY5MzAyMjAsIDB4MjQwMjAwMDIsIDB4MTA2MjAwNjMsIDB4MmM2MjAwMDMsCisweDEwNDAwMDA1LCAweDI0MDIwMDAxLCAweDEwNjIwMDBhLCAweDE0MTk0MCwKKzB4ODAwNTQ0OCwgMHgwLCAweDI0MDIwMDA0LCAweDEwNjIwMDVhLAorMHgyNDAyMDAwOCwgMHgxMDYyMDA1OSwgMHgxNDkxNDAsIDB4ODAwNTQ0OCwKKzB4MCwgMHgzYzA0MDAwMSwgMHg4MzIwMjEsIDB4OGM4NDdlM2MsCisweDNjMTEwMDAxLCAweDIyMzg4MjEsIDB4OGUzMTdlMzQsIDB4M2MwMjQwMDAsCisweDgyMTAyNCwgMHgxMDQwMDAzZSwgMHgzYzAyMDAwOCwgMHgyMjIxMDI0LAorMHgxMDQwMDAyMCwgMHgzNjEwMDAwMiwgMHgzYzAyMDAwMSwgMHg0MzEwMjEsCisweDhjNDI3ZTQwLCAweDEwNDAwMDA1LCAweDM2MTAwMDIwLCAweDM2MTAwMTAwLAorMHgzYzAyMDAyMCwgMHg4MDA1M2JkLCAweDIyMjg4MjUsIDB4MjQwMmZlZmYsCisweDIwMjgwMjQsIDB4M2MwMmZmZGYsIDB4MzQ0MmZmZmYsIDB4MjIyODgyNCwKKzB4MTQxMTQwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyN2U0OCwKKzB4MTA0MDAwMDUsIDB4M2MwMjAwMDEsIDB4MjYyOTgyNSwgMHgzYzAyMDA4MCwKKzB4ODAwNTNkYywgMHgyMjI4ODI1LCAweDNjMDJmZmZlLCAweDM0NDJmZmZmLAorMHgyNjI5ODI0LCAweDNjMDJmZjdmLCAweDM0NDJmZmZmLCAweDgwMDUzZGMsCisweDIyMjg4MjQsIDB4MjQwMmZlZGYsIDB4MjAyODAyNCwgMHgzYzAyZmZmZSwKKzB4MzQ0MmZmZmYsIDB4MjYyOTgyNCwgMHgzYzAyZmY1ZiwgMHgzNDQyZmZmZiwKKzB4MjIyODgyNCwgMHgzYzAxMDAwMSwgMHgyMzA4MjEsIDB4YWMyMDdlNDAsCisweDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIwN2U0OCwgMHhjMDA0ODZhLAorMHgwLCAweGFmOTAwMjAwLCAweGFmOTMwMjIwLCAweDhmODIwMjIwLAorMHgyNDAzZmZmYiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsCisweDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDgwMDUzZjMsIDB4MTQxMTQwLAorMHg4ZjgyMDIwMCwgMHgyNDAzZmZmZCwgMHg0MzEwMjQsIDB4YzAwNDg2YSwKKzB4YWY4MjAyMDAsIDB4M2MwMmJmZmYsIDB4MzQ0MmZmZmYsIDB4YzAwNDI5YiwKKzB4MjIyODgyNCwgMHgxNDExNDAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLAorMHg4MDA1NDQ4LCAweGFjMzE3ZTM0LCAweDE0OTE0MCwgMHgzYzA0MDAwMSwKKzB4OTIyMDIxLCAweDhjODQ3ZTM4LCAweDNjMTEwMDAxLCAweDIzMjg4MjEsCisweDhlMzE3ZTMwLCAweDNjMDI0MDAwLCAweDgyMTAyNCwgMHgxNDQwMDAxMSwKKzB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNWQ5OCwgMHgxNDQwMDAwNiwKKzB4M2MwMmJmZmYsIDB4OGY4MjAyMDAsIDB4MzQ0MjAwMDIsIDB4YzAwNDg2YSwKKzB4YWY4MjAyMDAsIDB4M2MwMmJmZmYsIDB4MzQ0MmZmZmYsIDB4YzAwNDI5YiwKKzB4MjIyODgyNCwgMHgzYzAxMDAwMSwgMHgzMjA4MjEsIDB4ODAwNTQ0OCwKKzB4YWMzMTdlMzAsIDB4M2MwMjAwMDEsIDB4OGM0MjVkOTgsIDB4MTA0MDAwMDUsCisweDNjMDIwMDIwLCAweDNjMDIwMDAxLCAweDhjNDI1ZDc0LCAweDEwNDAwMDJiLAorMHgzYzAyMDAyMCwgMHg4MjEwMjQsIDB4MTA0MDAwMDcsIDB4MzYxMDAwMjAsCisweDI0MDIwMTAwLCAweDNjMDEwMDAxLCAweDMyMDgyMSwgMHhhYzIyN2U0NCwKKzB4ODAwNTQyOCwgMHgzNjEwMDEwMCwgMHgzYzAxMDAwMSwgMHgzMjA4MjEsCisweGFjMjA3ZTQ0LCAweDI0MDJmZWZmLCAweDIwMjgwMjQsIDB4M2MwMjAwODAsCisweDgyMTAyNCwgMHgxMDQwMDAwNywgMHgxNDE5NDAsIDB4M2MwMjAwMDEsCisweDNjMDEwMDAxLCAweDIzMDgyMSwgMHhhYzIyN2U0YywgMHg4MDA1NDM5LAorMHgyNjI5ODI1LCAweDE0MTE0MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsCisweGFjMjA3ZTRjLCAweDNjMDJmZmZlLCAweDM0NDJmZmZmLCAweDI2Mjk4MjQsCisweGMwMDQ4NmEsIDB4MCwgMHhhZjkwMDIwMCwgMHhhZjkzMDIyMCwKKzB4OGY4MjAyMjAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LCAweGFmODIwMjIwLAorMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwgMHgxNDExNDAsCisweDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzMxN2UzMCwgMHg4ZmJmMDAyNCwKKzB4OGZiNDAwMjAsIDB4OGZiMzAwMWMsIDB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsCiAweDhmYjAwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMjgsIDB4MCB9Owogc3RhdGljIHUzMiB0aWdvbkZ3Um9kYXRhWyhNQVhfUk9EQVRBX0xFTi80KSArIDFdIF9fZGV2aW5pdGRhdGEgPSB7Ci0weDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNjY3NzZkLCAweDYxNjk2ZTJlLCAweDYzMmM3NjIwLCAweDMxMmUzMTJlLCAKLTB4MzIyZTMxMzEsIDB4MjAzMTM5MzksIDB4MzgyZjMwMzQsIDB4MmYzMjM3MjAsIAotMHgzMjMyM2EzMSwgMHgzMzNhMzQzMiwgMHgyMDczNjg3NSwgMHg2MTZlNjcyMCwgCi0weDQ1Nzg3MDIwLCAweDI0MDAwMDAwLCAweDc0Njg2NTVmLCAweDQ0NDE1NzRlLCAKLTB4MCwgMHg1MzU0NDE0MywgMHg0YjVmMzEyMCwgMHgwLCAKLTB4NDI2MTY0NTMsIDB4NmU2NDUyNmUsIDB4NjcwMDAwMDAsIDB4M2Y0NTZlNzEsIAotMHg0NTc2NzQwMCwgMHgzZjZlNmY1MSwgMHg2NDQ1NzY1MCwgMHgwLCAKLTB4NjU3NjUyNmUsIDB4Njc0Njc1NmMsIDB4NmMwMDAwMDAsIDB4NDk2YzZjNDMsIAotMHg2ZjZlNjY1MiwgMHg3ODAwMDAwMCwgMHg1MzY1NmU2NCwgMHg0MzZiNTM3NSwgCi0weDZkMDAwMDAwLCAweDUyNjU2Mzc2LCAweDU2NmM2MTZlLCAweDAsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNzQ2OTZkLCAweDY1NzIyZTYzLCAweDJjNzYyMDMxLCAweDJlMzEyZTMyLCAKLTB4MmUzODIwMzEsIDB4MzkzOTM4MmYsIDB4MzAzNzJmMzMsIDB4MzEyMDMxMzcsIAotMHgzYTM1MzgzYSwgMHgzNDM1MjA3MywgMHg2ODc1NjE2ZSwgMHg2NzIwNDU3OCwgCi0weDcwMjAyNDAwLCAweDU0MmQ0NDZkLCAweDYxNTI2NDMxLCAweDAsIAotMHg1NDJkNDQ2ZCwgMHg2MTQyNDIwMCwgMHg1NDJkNDQ2ZCwgMHg2MTMyMDAwMCwgCi0weDNmNmU2ZjUxLCAweDY0NTQ3ODQ1LCAweDAsIDB4M2Y2ZTZmNTEsIAotMHg2NDUyNzg0NSwgMHgwLCAweDY1NmU3MTRkLCAweDQ1NzY1MDQ2LCAKLTB4NjE2OTZjMDAsIDB4NjU2ZTcxNGQsIDB4NDU3NjQ2NjEsIDB4Njk2YzAwMDAsIAotMHg2NjYxNjk2YywgMHg0NTZlNDU0ZCwgMHgwLCAweDNmNDU2ZTcxLCAKLTB4NDU3Njc0MDAsIDB4M2Y2ZTZmNTEsIDB4NjQ0NTc2NTAsIDB4MCwgCi0weDY1NzY1MjZlLCAweDY3NDY3NTZjLCAweDZjMDAwMDAwLCAweDAsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNjM2ZjZkLCAweDZkNjE2ZTY0LCAweDJlNjMyYzc2LCAweDIwMzEyZTMxLCAKLTB4MmUzMjJlMzEsIDB4MzAyMDMxMzksIDB4MzkzODJmMzEsIDB4MzEyZjMxMzgsIAotMHgyMDMxMzczYSwgMHgzMTMxM2EzMSwgMHgzODIwNzM2OCwgMHg3NTYxNmU2NywgCi0weDIwNDU3ODcwLCAweDIwMjQwMDAwLCAweDNmNGQ2MjZmLCAweDc4NDU3Njc0LCAKLTB4MCwgMHg0ZTRmNjM2ZiwgMHg2ZDYxNmU2NCwgMHgwLCAKLTB4Njg3Mzc0NjUsIDB4NWY0NTUyNTIsIDB4MCwgMHg0MTJkNDU3MiwgCi0weDcyNDI3NTYzLCAweDAsIDB4NDU1MjUyNGYsIDB4NTIyZDQxNjQsIAotMHg2NDAwMDAwMCwgMHg2NTZlNzE0ZCwgMHg0NTc2NTA0NiwgMHg2MTY5NmMwMCwgCi0weDY1NmU3MTRkLCAweDQ1NzY0NjYxLCAweDY5NmMwMDAwLCAweDY2NjE2OTZjLCAKLTB4NDU2ZTQ1NGQsIDB4MCwgMHg0NDJkNDU3MiwgMHg3MjRjNjE3MywgCi0weDc0MDAwMDAwLCAweDQ0MmQ0NTcyLCAweDcyMzIwMDAwLCAweDZkNDM3Mzc0LCAKLTB4NGQ2NDQ1NTIsIDB4NTIwMDAwMDAsIDB4NzA3MjZmNmQsIDB4NGQ2NDQ1NTIsIAotMHg1MjAwMDAwMCwgMHg0NjY5NmM3NCwgMHg0ZDY0NDU1MiwgMHg1MjAwMDAwMCwgCi0weDYzNmQ2NDVmLCAweDQ1NTI1MjAwLCAweDNmNDU2ZTcxLCAweDQ1NzY3NDAwLCAKLTB4M2Y2ZTZmNTEsIDB4NjQ0NTc2NTAsIDB4MCwgMHg2NTc2NTI2ZSwgCi0weDY3NDY3NTZjLCAweDZjMDAwMDAwLCAweDAsIDB4NmVhMCwgCi0weDdmYmMsIDB4NmUzOCwgMHg4NzM0LCAweDgyYjAsIAotMHg4NzgwLCAweDg3ODAsIDB4NmY1NCwgMHg3Njk0LCAKLTB4N2YwYywgMHg4MGE4LCAweDgwNzQsIDB4ODc4MCwgCi0weDdlNzAsIDB4ODBjYywgMHg2ZTY0LCAweDgxY2MsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNjQ2ZDYxLCAweDJlNjMyYzc2LCAweDIwMzEyZTMxLCAweDJlMzIyZTMzLCAKLTB4MjAzMTM5MzksIDB4MzgyZjMwMzQsIDB4MmYzMjM3MjAsIDB4MzIzMjNhMzEsIAotMHgzMzNhMzQzMSwgMHgyMDczNjg3NSwgMHg2MTZlNjcyMCwgMHg0NTc4NzAyMCwgCi0weDI0MDAwMDAwLCAweDY0NmQ2MTcyLCAweDY0NDE1NDRlLCAweDAsIAotMHg2NDZkNjE3NywgMHg3MjQxNTQ0ZSwgMHgwLCAweDAsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNzQ3MjYxLCAweDYzNjUyZTYzLCAweDJjNzYyMDMxLCAweDJlMzEyZTMyLCAKLTB4MmUzMjIwMzEsIDB4MzkzOTM4MmYsIDB4MzAzNDJmMzIsIDB4MzcyMDMyMzIsIAotMHgzYTMxMzMzYSwgMHgzNTMwMjA3MywgMHg2ODc1NjE2ZSwgMHg2NzIwNDU3OCwgCi0weDcwMjAyNDAwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNjQ2MTc0LCAweDYxMmU2MzJjLCAweDc2MjAzMTJlLCAweDMxMmUzMjJlLCAKLTB4MzIyMDMxMzksIDB4MzkzODJmMzAsIDB4MzQyZjMyMzcsIDB4MjAzMjMyM2EsIAotMHgzMTMzM2EzNCwgMHgzMDIwNzM2OCwgMHg3NTYxNmU2NywgMHgyMDQ1Nzg3MCwgCi0weDIwMjQwMDAwLCAweDQ2NTc1ZjU2LCAweDQ1NTI1MzQ5LCAweDRmNGUzYTIwLCAKLTB4MjMzMTIwNDYsIDB4NzI2OTIwNDEsIDB4NzA3MjIwMzcsIDB4MjAzMTM3M2EsIAotMHgzNTM1M2EzNCwgMHgzODIwNTA0NCwgMHg1NDIwMzIzMCwgMHgzMDMwMDAwMCwgCi0weDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAweDRjNDU1ZjU0LCAweDQ5NGQ0NTNhLCAKLTB4MjAzMTM3M2EsIDB4MzUzNTNhMzQsIDB4MzgwMDAwMDAsIDB4NDY1NzVmNDMsIAotMHg0ZjRkNTA0OSwgMHg0YzQ1NWY0MiwgMHg1OTNhMjA2NCwgMHg2NTc2NzI2MywgCi0weDczMDAwMDAwLCAweDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAweDRjNDU1ZjQ4LCAKLTB4NGY1MzU0M2EsIDB4MjA2MzZmNmQsIDB4NzA3NTc0NjUsIDB4MCwgCi0weDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAweDRjNDU1ZjQ0LCAweDRmNGQ0MTQ5LCAKLTB4NGUzYTIwNjUsIDB4NmU2NzJlNjEsIDB4NjM3NDY1NmYsIDB4NmUyZTYzNmYsIAotMHg2ZDAwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgMHg0YzQ1NTIzYSwgCi0weDIwNjc2MzYzLCAweDIwNzY2NTcyLCAweDczNjk2ZjZlLCAweDIwMzIyZTM3LCAKLTB4MmUzMjAwMDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNmQ2NTZkLCAweDJlNjMyYzc2LCAweDIwMzEyZTMxLCAweDJlMzIyZTMyLCAKLTB4MjAzMTM5MzksIDB4MzgyZjMwMzQsIDB4MmYzMjM3MjAsIDB4MzIzMjNhMzEsIAotMHgzMzNhMzQzNCwgMHgyMDczNjg3NSwgMHg2MTZlNjcyMCwgMHg0NTc4NzAyMCwgCi0weDI0MDAwMDAwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNzM2NTZlLCAweDY0MmU2MzJjLCAweDc2MjAzMTJlLCAweDMxMmUzMjJlLCAKLTB4MzEzMTIwMzEsIDB4MzkzOTM4MmYsIDB4MzEzMjJmMzIsIDB4MzIyMDMxMzcsIAotMHgzYTMxMzczYSwgMHgzNTM1MjA3MywgMHg2ODc1NjE2ZSwgMHg2NzIwNDU3OCwgCi0weDcwMjAyNDAwLCAweDczNmU2NDY0LCAweDY1NGU2ZjUxLCAweDIwMDAwMDAwLCAKLTB4NmU2ZjQ1NGUsIDB4NTE1ZjU0NTgsIDB4MCwgMHg3MzZlNjQ2NCwgCi0weDc0NGU2ZjUxLCAweDIwMDAwMDAwLCAweDNmNmU2ZjUxLCAweDY0NTQ3ODQ1LCAKLTB4MCwgMHg3NTZlNmI3MiwgMHg2NDc0Nzk3MCwgMHg2NTAwMDAwMCwgCi0weDAsIDB4YWNjYywgMHhhY2NjLCAweGFkOWMsIAotMHhhYWIwLCAweGFhYjAsIDB4YWQ5YywgMHhhZDljLCAKLTB4YWQ5YywgMHhhZDljLCAweGFkOWMsIDB4YWQ5YywgCi0weGFkOWMsIDB4YWQ5YywgMHhhZDljLCAweGFkOWMsIAotMHhhZDljLCAweGFkOWMsIDB4YWQ5YywgMHhhZDdjLCAKLTB4MCwgMHhiY2E4LCAweGJjYTgsIDB4YmQ3MCwgCi0weGFlNGMsIDB4YjA1OCwgMHhiZDcwLCAweGJkNzAsIAotMHhiZDcwLCAweGJkNzAsIDB4YmQ3MCwgMHhiZDcwLCAKLTB4YmQ3MCwgMHhiZDcwLCAweGJkNzAsIDB4YmQ3MCwgCi0weGJkNzAsIDB4YmQ3MCwgMHhiZDcwLCAweGJkNTQsIAotMHhiMDQwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwgCi0weDJmNzI2NTYzLCAweDc2MmU2MzJjLCAweDc2MjAzMTJlLCAweDMxMmUzMjJlLCAKLTB4MzEzOTIwMzEsIDB4MzkzOTM4MmYsIDB4MzAzNzJmMzIsIDB4MzQyMDMyMzEsIAotMHgzYTMzMzAzYSwgMHgzMDM1MjA3MywgMHg2ODc1NjE2ZSwgMHg2NzIwNDU3OCwgCi0weDcwMjAyNDAwLCAweDcwNmI1Mjc4LCAweDQ1NTI1MjAwLCAweDY2NzI2ZDMyLCAKLTB4NGM2MTcyNjcsIDB4NjUwMDAwMDAsIDB4NzI3ODRlNmYsIDB4NTI3ODQyNjQsIAotMHgwLCAweDcyNzg1MTQ0LCAweDZkNjE0NDQ2LCAweDAsIAotMHg3Mjc4NTE0NCwgMHg2ZDYxNDI0NiwgMHgwLCAweDNmNmU2ZjUxLCAKLTB4NjQ1Mjc4NDUsIDB4MCwgMHg3MDZiNTI3OCwgMHg0NTUyNTI3MywgCi0weDAsIDB4NjY3MjZkMzIsIDB4NGM3MjY3NTMsIDB4MCwgCi0weDcyNzg0ZTZmLCAweDQyNjQ1MzAwLCAweDNmNzI0MjY0LCAweDQ0NmQ2MTQ2LCAKLTB4MCwgMHgzZjcyNGE0MiwgMHg2NDQ0NmQ0NiwgMHgwLCAKLTB4MCwgMHhmNjc4LCAweGY2NzgsIDB4ZjY3OCwgCi0weGY2NzgsIDB4ZjY3OCwgMHhmNjc4LCAweGY2NzgsIAotMHhmNjc4LCAweGY2NzgsIDB4ZjY3OCwgMHhmNjc4LCAKLTB4ZjY3OCwgMHhmNjc4LCAweGY2NzgsIDB4ZjY3OCwgCi0weGY2NzAsIDB4ZjY3MCwgMHhmNjcwLCAweDU3MmQ0NDRkLCAKLTB4NDE0NTZlNDYsIDB4MCwgMHgwLCAweGZkYzAsIAotMHgxMDE1YywgMHhmZGRjLCAweDEwMTVjLCAweDEwMTVjLCAKLTB4MTAxNWMsIDB4MTAxNWMsIDB4MTAxNWMsIDB4MTAxNWMsIAotMHhmNzA0LCAweDEwMTVjLCAweDEwMTVjLCAweDEwMTVjLCAKLTB4MTAxNWMsIDB4MTAxNWMsIDB4MTAxNTQsIDB4MTAxNTQsIAotMHgxMDE1NCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzcyZjYzNmYsIDB4NmQ2ZDZmNmUsIAotMHgyZjZkNjE2MywgMHgyZTYzMmM3NiwgMHgyMDMxMmUzMSwgMHgyZTMyMmUzMSwgCi0weDMyMjAzMTM5LCAweDM5MzgyZjMwLCAweDM0MmYzMjM3LCAweDIwMzIzMjNhLCAKLTB4MzEzMzNhMzQsIDB4MzIyMDczNjgsIDB4NzU2MTZlNjcsIDB4MjA0NTc4NzAsIAotMHgyMDI0MDAwMCwgMHg2ZDYxNjM3NCwgMHg3ODQxNTQ0ZSwgMHgwLCAKLTB4NGU3NDUzNzksIDB4NmUyNjRjNmIsIDB4MCwgMHg3MjY1NmQ2MSwgCi0weDczNzM3Mjc0LCAweDAsIDB4NmM2OTZlNmIsIDB4NDQ0ZjU3NGUsIAotMHgwLCAweDY1NmU3MTRkLCAweDQ1NzY1MDQ2LCAweDYxNjk2YzAwLCAKLTB4NjU2ZTcxNGQsIDB4NDU3NjQ2NjEsIDB4Njk2YzAwMDAsIDB4NjY2MTY5NmMsIAotMHg0NTZlNDU0ZCwgMHgwLCAweDZjNjk2ZTZiLCAweDU1NTAwMDAwLCAKLTB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzcyZjYzNmYsIDB4NmQ2ZDZmNmUsIAotMHgyZjYzNmI3MywgMHg3NTZkMmU2MywgMHgyYzc2MjAzMSwgMHgyZTMxMmUzMiwgCi0weDJlMzIyMDMxLCAweDM5MzkzODJmLCAweDMwMzQyZjMyLCAweDM3MjAzMjMyLCAKLTB4M2EzMTMzM2EsIDB4MzMzOTIwNzMsIDB4Njg3NTYxNmUsIDB4NjcyMDQ1NzgsIAotMHg3MDIwMjQwMCwgMHg1MDcyNmY2MiwgMHg2NTUwNjg3OSwgMHgwLCAKLTB4NmM2ZTZiNDEsIDB4NTM1MzUyNTQsIDB4MCwgMHgxMWIyYywgCi0weDExYmM0LCAweDExYmY4LCAweDExYzJjLCAweDExYzU4LCAKLTB4MTFjNmMsIDB4MTFjYTgsIDB4MTIwN2MsIDB4MTFkZTQsIAotMHgxMWUyNCwgMHgxMWU1MCwgMHgxMWU5MCwgMHgxMWVjMCwgCi0weDExZWZjLCAweDExZjMwLCAweDEyMDdjLCAweDEyMmMwLCAKLTB4MTIyZDgsIDB4MTIzMDAsIDB4MTIzMjAsIDB4MTIzNDgsIAotMHgxMjQ3OCwgMHgxMjRhMCwgMHgxMjRmNCwgMHgxMjUxYywgCi0weDAsIDB4MTI3OGMsIDB4MTI4NWMsIDB4MTI5MzQsIAotMHgxMmEwNCwgMHgxMmE2MCwgMHgxMmIzYywgMHgxMmI2NCwgCi0weDEyYzQwLCAweDEyYzY4LCAweDEyZTEwLCAweDEyZTM4LCAKLTB4MTJmZTAsIDB4MTMxZDgsIDB4MTM0NmMsIDB4MTMzODAsIAotMHgxMzQ2YywgMHgxMzQ5OCwgMHgxMzAwOCwgMHgxMzFiMCwgCi0weDAsIDB4MTNiODQsIDB4MTNiYzgsIDB4MTNjNjAsIAotMHgxM2NhYywgMHgxM2QxYywgMHgxM2RiNCwgMHgxM2RlOCwgCi0weDEzZTcwLCAweDEzZjA4LCAweDEzZmQ4LCAweDE0MDE4LCAKLTB4MTQwOWMsIDB4MTQwYzAsIDB4MTQxZjQsIDB4NjQ2ZjQyNjEsIAotMHg3MzY1NTA2NywgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4NzM3NDZkNjEsIDB4NjM0YzRlNGIsIDB4MCwgCi0weDAsIDB4MTRjMzgsIDB4MTRjMzgsIDB4MTRiODAsIAotMHgxNGJjNCwgMHgxNGMzOCwgMHgxNGMzOCwgMHgwLCAKKzB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwKKzB4MmY2Njc3NmQsIDB4NjE2OTZlMmUsIDB4NjMyYzc2MjAsIDB4MzEyZTMxMmUsCisweDMyMmUzMTMxLCAweDIwMzEzOTM5LCAweDM4MmYzMDM0LCAweDJmMzIzNzIwLAorMHgzMjMyM2EzMSwgMHgzMzNhMzQzMiwgMHgyMDczNjg3NSwgMHg2MTZlNjcyMCwKKzB4NDU3ODcwMjAsIDB4MjQwMDAwMDAsIDB4NzQ2ODY1NWYsIDB4NDQ0MTU3NGUsCisweDAsIDB4NTM1NDQxNDMsIDB4NGI1ZjMxMjAsIDB4MCwKKzB4NDI2MTY0NTMsIDB4NmU2NDUyNmUsIDB4NjcwMDAwMDAsIDB4M2Y0NTZlNzEsCisweDQ1NzY3NDAwLCAweDNmNmU2ZjUxLCAweDY0NDU3NjUwLCAweDAsCisweDY1NzY1MjZlLCAweDY3NDY3NTZjLCAweDZjMDAwMDAwLCAweDQ5NmM2YzQzLAorMHg2ZjZlNjY1MiwgMHg3ODAwMDAwMCwgMHg1MzY1NmU2NCwgMHg0MzZiNTM3NSwKKzB4NmQwMDAwMDAsIDB4NTI2NTYzNzYsIDB4NTY2YzYxNmUsIDB4MCwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MmY2MzZmLCAweDZkNmQ2ZjZlLAorMHgyZjc0Njk2ZCwgMHg2NTcyMmU2MywgMHgyYzc2MjAzMSwgMHgyZTMxMmUzMiwKKzB4MmUzODIwMzEsIDB4MzkzOTM4MmYsIDB4MzAzNzJmMzMsIDB4MzEyMDMxMzcsCisweDNhMzUzODNhLCAweDM0MzUyMDczLCAweDY4NzU2MTZlLCAweDY3MjA0NTc4LAorMHg3MDIwMjQwMCwgMHg1NDJkNDQ2ZCwgMHg2MTUyNjQzMSwgMHgwLAorMHg1NDJkNDQ2ZCwgMHg2MTQyNDIwMCwgMHg1NDJkNDQ2ZCwgMHg2MTMyMDAwMCwKKzB4M2Y2ZTZmNTEsIDB4NjQ1NDc4NDUsIDB4MCwgMHgzZjZlNmY1MSwKKzB4NjQ1Mjc4NDUsIDB4MCwgMHg2NTZlNzE0ZCwgMHg0NTc2NTA0NiwKKzB4NjE2OTZjMDAsIDB4NjU2ZTcxNGQsIDB4NDU3NjQ2NjEsIDB4Njk2YzAwMDAsCisweDY2NjE2OTZjLCAweDQ1NmU0NTRkLCAweDAsIDB4M2Y0NTZlNzEsCisweDQ1NzY3NDAwLCAweDNmNmU2ZjUxLCAweDY0NDU3NjUwLCAweDAsCisweDY1NzY1MjZlLCAweDY3NDY3NTZjLCAweDZjMDAwMDAwLCAweDAsCisweDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwKKzB4MmY2MzZmNmQsIDB4NmQ2MTZlNjQsIDB4MmU2MzJjNzYsIDB4MjAzMTJlMzEsCisweDJlMzIyZTMxLCAweDMwMjAzMTM5LCAweDM5MzgyZjMxLCAweDMxMmYzMTM4LAorMHgyMDMxMzczYSwgMHgzMTMxM2EzMSwgMHgzODIwNzM2OCwgMHg3NTYxNmU2NywKKzB4MjA0NTc4NzAsIDB4MjAyNDAwMDAsIDB4M2Y0ZDYyNmYsIDB4Nzg0NTc2NzQsCisweDAsIDB4NGU0ZjYzNmYsIDB4NmQ2MTZlNjQsIDB4MCwKKzB4Njg3Mzc0NjUsIDB4NWY0NTUyNTIsIDB4MCwgMHg0MTJkNDU3MiwKKzB4NzI0Mjc1NjMsIDB4MCwgMHg0NTUyNTI0ZiwgMHg1MjJkNDE2NCwKKzB4NjQwMDAwMDAsIDB4NjU2ZTcxNGQsIDB4NDU3NjUwNDYsIDB4NjE2OTZjMDAsCisweDY1NmU3MTRkLCAweDQ1NzY0NjYxLCAweDY5NmMwMDAwLCAweDY2NjE2OTZjLAorMHg0NTZlNDU0ZCwgMHgwLCAweDQ0MmQ0NTcyLCAweDcyNGM2MTczLAorMHg3NDAwMDAwMCwgMHg0NDJkNDU3MiwgMHg3MjMyMDAwMCwgMHg2ZDQzNzM3NCwKKzB4NGQ2NDQ1NTIsIDB4NTIwMDAwMDAsIDB4NzA3MjZmNmQsIDB4NGQ2NDQ1NTIsCisweDUyMDAwMDAwLCAweDQ2Njk2Yzc0LCAweDRkNjQ0NTUyLCAweDUyMDAwMDAwLAorMHg2MzZkNjQ1ZiwgMHg0NTUyNTIwMCwgMHgzZjQ1NmU3MSwgMHg0NTc2NzQwMCwKKzB4M2Y2ZTZmNTEsIDB4NjQ0NTc2NTAsIDB4MCwgMHg2NTc2NTI2ZSwKKzB4Njc0Njc1NmMsIDB4NmMwMDAwMDAsIDB4MCwgMHg2ZWEwLAorMHg3ZmJjLCAweDZlMzgsIDB4ODczNCwgMHg4MmIwLAorMHg4NzgwLCAweDg3ODAsIDB4NmY1NCwgMHg3Njk0LAorMHg3ZjBjLCAweDgwYTgsIDB4ODA3NCwgMHg4NzgwLAorMHg3ZTcwLCAweDgwY2MsIDB4NmU2NCwgMHg4MWNjLAorMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLAorMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwKKzB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzcyZjYzNmYsIDB4NmQ2ZDZmNmUsCisweDJmNjQ2ZDYxLCAweDJlNjMyYzc2LCAweDIwMzEyZTMxLCAweDJlMzIyZTMzLAorMHgyMDMxMzkzOSwgMHgzODJmMzAzNCwgMHgyZjMyMzcyMCwgMHgzMjMyM2EzMSwKKzB4MzMzYTM0MzEsIDB4MjA3MzY4NzUsIDB4NjE2ZTY3MjAsIDB4NDU3ODcwMjAsCisweDI0MDAwMDAwLCAweDY0NmQ2MTcyLCAweDY0NDE1NDRlLCAweDAsCisweDY0NmQ2MTc3LCAweDcyNDE1NDRlLCAweDAsIDB4MCwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MmY2MzZmLCAweDZkNmQ2ZjZlLAorMHgyZjc0NzI2MSwgMHg2MzY1MmU2MywgMHgyYzc2MjAzMSwgMHgyZTMxMmUzMiwKKzB4MmUzMjIwMzEsIDB4MzkzOTM4MmYsIDB4MzAzNDJmMzIsIDB4MzcyMDMyMzIsCisweDNhMzEzMzNhLCAweDM1MzAyMDczLCAweDY4NzU2MTZlLCAweDY3MjA0NTc4LAorMHg3MDIwMjQwMCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MmY2MzZmLCAweDZkNmQ2ZjZlLAorMHgyZjY0NjE3NCwgMHg2MTJlNjMyYywgMHg3NjIwMzEyZSwgMHgzMTJlMzIyZSwKKzB4MzIyMDMxMzksIDB4MzkzODJmMzAsIDB4MzQyZjMyMzcsIDB4MjAzMjMyM2EsCisweDMxMzMzYTM0LCAweDMwMjA3MzY4LCAweDc1NjE2ZTY3LCAweDIwNDU3ODcwLAorMHgyMDI0MDAwMCwgMHg0NjU3NWY1NiwgMHg0NTUyNTM0OSwgMHg0ZjRlM2EyMCwKKzB4MjMzMTIwNDYsIDB4NzI2OTIwNDEsIDB4NzA3MjIwMzcsIDB4MjAzMTM3M2EsCisweDM1MzUzYTM0LCAweDM4MjA1MDQ0LCAweDU0MjAzMjMwLCAweDMwMzAwMDAwLAorMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgMHg0YzQ1NWY1NCwgMHg0OTRkNDUzYSwKKzB4MjAzMTM3M2EsIDB4MzUzNTNhMzQsIDB4MzgwMDAwMDAsIDB4NDY1NzVmNDMsCisweDRmNGQ1MDQ5LCAweDRjNDU1ZjQyLCAweDU5M2EyMDY0LCAweDY1NzY3MjYzLAorMHg3MzAwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgMHg0YzQ1NWY0OCwKKzB4NGY1MzU0M2EsIDB4MjA2MzZmNmQsIDB4NzA3NTc0NjUsIDB4MCwKKzB4NDY1NzVmNDMsIDB4NGY0ZDUwNDksIDB4NGM0NTVmNDQsIDB4NGY0ZDQxNDksCisweDRlM2EyMDY1LCAweDZlNjcyZTYxLCAweDYzNzQ2NTZmLCAweDZlMmU2MzZmLAorMHg2ZDAwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgMHg0YzQ1NTIzYSwKKzB4MjA2NzYzNjMsIDB4MjA3NjY1NzIsIDB4NzM2OTZmNmUsIDB4MjAzMjJlMzcsCisweDJlMzIwMDAwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLAorMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwKKzB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzcyZjYzNmYsIDB4NmQ2ZDZmNmUsCisweDJmNmQ2NTZkLCAweDJlNjMyYzc2LCAweDIwMzEyZTMxLCAweDJlMzIyZTMyLAorMHgyMDMxMzkzOSwgMHgzODJmMzAzNCwgMHgyZjMyMzcyMCwgMHgzMjMyM2EzMSwKKzB4MzMzYTM0MzQsIDB4MjA3MzY4NzUsIDB4NjE2ZTY3MjAsIDB4NDU3ODcwMjAsCisweDI0MDAwMDAwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLAorMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwKKzB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzcyZjYzNmYsIDB4NmQ2ZDZmNmUsCisweDJmNzM2NTZlLCAweDY0MmU2MzJjLCAweDc2MjAzMTJlLCAweDMxMmUzMjJlLAorMHgzMTMxMjAzMSwgMHgzOTM5MzgyZiwgMHgzMTMyMmYzMiwgMHgzMjIwMzEzNywKKzB4M2EzMTM3M2EsIDB4MzUzNTIwNzMsIDB4Njg3NTYxNmUsIDB4NjcyMDQ1NzgsCisweDcwMjAyNDAwLCAweDczNmU2NDY0LCAweDY1NGU2ZjUxLCAweDIwMDAwMDAwLAorMHg2ZTZmNDU0ZSwgMHg1MTVmNTQ1OCwgMHgwLCAweDczNmU2NDY0LAorMHg3NDRlNmY1MSwgMHgyMDAwMDAwMCwgMHgzZjZlNmY1MSwgMHg2NDU0Nzg0NSwKKzB4MCwgMHg3NTZlNmI3MiwgMHg2NDc0Nzk3MCwgMHg2NTAwMDAwMCwKKzB4MCwgMHhhY2NjLCAweGFjY2MsIDB4YWQ5YywKKzB4YWFiMCwgMHhhYWIwLCAweGFkOWMsIDB4YWQ5YywKKzB4YWQ5YywgMHhhZDljLCAweGFkOWMsIDB4YWQ5YywKKzB4YWQ5YywgMHhhZDljLCAweGFkOWMsIDB4YWQ5YywKKzB4YWQ5YywgMHhhZDljLCAweGFkOWMsIDB4YWQ3YywKKzB4MCwgMHhiY2E4LCAweGJjYTgsIDB4YmQ3MCwKKzB4YWU0YywgMHhiMDU4LCAweGJkNzAsIDB4YmQ3MCwKKzB4YmQ3MCwgMHhiZDcwLCAweGJkNzAsIDB4YmQ3MCwKKzB4YmQ3MCwgMHhiZDcwLCAweGJkNzAsIDB4YmQ3MCwKKzB4YmQ3MCwgMHhiZDcwLCAweGJkNzAsIDB4YmQ1NCwKKzB4YjA0MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MmY2MzZmLCAweDZkNmQ2ZjZlLAorMHgyZjcyNjU2MywgMHg3NjJlNjMyYywgMHg3NjIwMzEyZSwgMHgzMTJlMzIyZSwKKzB4MzEzOTIwMzEsIDB4MzkzOTM4MmYsIDB4MzAzNzJmMzIsIDB4MzQyMDMyMzEsCisweDNhMzMzMDNhLCAweDMwMzUyMDczLCAweDY4NzU2MTZlLCAweDY3MjA0NTc4LAorMHg3MDIwMjQwMCwgMHg3MDZiNTI3OCwgMHg0NTUyNTIwMCwgMHg2NjcyNmQzMiwKKzB4NGM2MTcyNjcsIDB4NjUwMDAwMDAsIDB4NzI3ODRlNmYsIDB4NTI3ODQyNjQsCisweDAsIDB4NzI3ODUxNDQsIDB4NmQ2MTQ0NDYsIDB4MCwKKzB4NzI3ODUxNDQsIDB4NmQ2MTQyNDYsIDB4MCwgMHgzZjZlNmY1MSwKKzB4NjQ1Mjc4NDUsIDB4MCwgMHg3MDZiNTI3OCwgMHg0NTUyNTI3MywKKzB4MCwgMHg2NjcyNmQzMiwgMHg0YzcyNjc1MywgMHgwLAorMHg3Mjc4NGU2ZiwgMHg0MjY0NTMwMCwgMHgzZjcyNDI2NCwgMHg0NDZkNjE0NiwKKzB4MCwgMHgzZjcyNGE0MiwgMHg2NDQ0NmQ0NiwgMHgwLAorMHgwLCAweGY2NzgsIDB4ZjY3OCwgMHhmNjc4LAorMHhmNjc4LCAweGY2NzgsIDB4ZjY3OCwgMHhmNjc4LAorMHhmNjc4LCAweGY2NzgsIDB4ZjY3OCwgMHhmNjc4LAorMHhmNjc4LCAweGY2NzgsIDB4ZjY3OCwgMHhmNjc4LAorMHhmNjcwLCAweGY2NzAsIDB4ZjY3MCwgMHg1NzJkNDQ0ZCwKKzB4NDE0NTZlNDYsIDB4MCwgMHgwLCAweGZkYzAsCisweDEwMTVjLCAweGZkZGMsIDB4MTAxNWMsIDB4MTAxNWMsCisweDEwMTVjLCAweDEwMTVjLCAweDEwMTVjLCAweDEwMTVjLAorMHhmNzA0LCAweDEwMTVjLCAweDEwMTVjLCAweDEwMTVjLAorMHgxMDE1YywgMHgxMDE1YywgMHgxMDE1NCwgMHgxMDE1NCwKKzB4MTAxNTQsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwKKzB4MmY2ZDYxNjMsIDB4MmU2MzJjNzYsIDB4MjAzMTJlMzEsIDB4MmUzMjJlMzEsCisweDMyMjAzMTM5LCAweDM5MzgyZjMwLCAweDM0MmYzMjM3LCAweDIwMzIzMjNhLAorMHgzMTMzM2EzNCwgMHgzMjIwNzM2OCwgMHg3NTYxNmU2NywgMHgyMDQ1Nzg3MCwKKzB4MjAyNDAwMDAsIDB4NmQ2MTYzNzQsIDB4Nzg0MTU0NGUsIDB4MCwKKzB4NGU3NDUzNzksIDB4NmUyNjRjNmIsIDB4MCwgMHg3MjY1NmQ2MSwKKzB4NzM3MzcyNzQsIDB4MCwgMHg2YzY5NmU2YiwgMHg0NDRmNTc0ZSwKKzB4MCwgMHg2NTZlNzE0ZCwgMHg0NTc2NTA0NiwgMHg2MTY5NmMwMCwKKzB4NjU2ZTcxNGQsIDB4NDU3NjQ2NjEsIDB4Njk2YzAwMDAsIDB4NjY2MTY5NmMsCisweDQ1NmU0NTRkLCAweDAsIDB4NmM2OTZlNmIsIDB4NTU1MDAwMDAsCisweDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzJmNjM2ZiwgMHg2ZDZkNmY2ZSwKKzB4MmY2MzZiNzMsIDB4NzU2ZDJlNjMsIDB4MmM3NjIwMzEsIDB4MmUzMTJlMzIsCisweDJlMzIyMDMxLCAweDM5MzkzODJmLCAweDMwMzQyZjMyLCAweDM3MjAzMjMyLAorMHgzYTMxMzMzYSwgMHgzMzM5MjA3MywgMHg2ODc1NjE2ZSwgMHg2NzIwNDU3OCwKKzB4NzAyMDI0MDAsIDB4NTA3MjZmNjIsIDB4NjU1MDY4NzksIDB4MCwKKzB4NmM2ZTZiNDEsIDB4NTM1MzUyNTQsIDB4MCwgMHgxMWIyYywKKzB4MTFiYzQsIDB4MTFiZjgsIDB4MTFjMmMsIDB4MTFjNTgsCisweDExYzZjLCAweDExY2E4LCAweDEyMDdjLCAweDExZGU0LAorMHgxMWUyNCwgMHgxMWU1MCwgMHgxMWU5MCwgMHgxMWVjMCwKKzB4MTFlZmMsIDB4MTFmMzAsIDB4MTIwN2MsIDB4MTIyYzAsCisweDEyMmQ4LCAweDEyMzAwLCAweDEyMzIwLCAweDEyMzQ4LAorMHgxMjQ3OCwgMHgxMjRhMCwgMHgxMjRmNCwgMHgxMjUxYywKKzB4MCwgMHgxMjc4YywgMHgxMjg1YywgMHgxMjkzNCwKKzB4MTJhMDQsIDB4MTJhNjAsIDB4MTJiM2MsIDB4MTJiNjQsCisweDEyYzQwLCAweDEyYzY4LCAweDEyZTEwLCAweDEyZTM4LAorMHgxMmZlMCwgMHgxMzFkOCwgMHgxMzQ2YywgMHgxMzM4MCwKKzB4MTM0NmMsIDB4MTM0OTgsIDB4MTMwMDgsIDB4MTMxYjAsCisweDAsIDB4MTNiODQsIDB4MTNiYzgsIDB4MTNjNjAsCisweDEzY2FjLCAweDEzZDFjLCAweDEzZGI0LCAweDEzZGU4LAorMHgxM2U3MCwgMHgxM2YwOCwgMHgxM2ZkOCwgMHgxNDAxOCwKKzB4MTQwOWMsIDB4MTQwYzAsIDB4MTQxZjQsIDB4NjQ2ZjQyNjEsCisweDczNjU1MDY3LCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDczNzQ2ZDYxLCAweDYzNGM0ZTRiLCAweDAsCisweDAsIDB4MTRjMzgsIDB4MTRjMzgsIDB4MTRiODAsCisweDE0YmM0LCAweDE0YzM4LCAweDE0YzM4LCAweDAsCiAweDAsIDB4MCB9Owogc3RhdGljIHUzMiB0aWdvbkZ3RGF0YVsoTUFYX0RBVEFfTEVOLzQpICsgMV0gX19kZXZpbml0ZGF0YSA9IHsKLTB4NDE2Yzc0NjUsIAotMHg2ZjZlMjA0MSwgMHg2MzY1NGU0OSwgMHg0MzIwNTYwMCwgMHg0MTZjNzQ2NSwgCi0weDZmNmUyMDQxLCAweDYzNjU0ZTQ5LCAweDQzMjA1NjAwLCAweDQyNDI0MjQyLCAKLTB4MCwgMHgwLCAweDAsIDB4MTM1NDE4LCAKLTB4MTNlN2ZjLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4NjBjZjAwLCAKLTB4NjAsIDB4Y2YwMDAwMDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgzLCAweDAsIAotMHgxLCAweDAsIDB4MCwgMHgwLCAKLTB4MSwgMHgwLCAweDEsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDEsIAotMHgxLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDEwMDAwMDAsIDB4MjEwMDAwMDAsIAotMHgxMjAwMDE0MCwgMHgwLCAweDAsIDB4MjAwMDAwMDAsIAotMHgxMjAwMDBhMCwgMHgwLCAweDEyMDAwMDYwLCAweDEyMDAwMTgwLCAKLTB4MTIwMDAxZTAsIDB4MCwgMHgwLCAweDAsIAotMHgxLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MiwgCi0weDAsIDB4MCwgMHgzMDAwMSwgMHgxLCAKKzB4NDE2Yzc0NjUsCisweDZmNmUyMDQxLCAweDYzNjU0ZTQ5LCAweDQzMjA1NjAwLCAweDQxNmM3NDY1LAorMHg2ZjZlMjA0MSwgMHg2MzY1NGU0OSwgMHg0MzIwNTYwMCwgMHg0MjQyNDI0MiwKKzB4MCwgMHgwLCAweDAsIDB4MTM1NDE4LAorMHgxM2U3ZmMsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDYwY2YwMCwKKzB4NjAsIDB4Y2YwMDAwMDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MywgMHgwLAorMHgxLCAweDAsIDB4MCwgMHgwLAorMHgxLCAweDAsIDB4MSwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgxLAorMHgxLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MTAwMDAwMCwgMHgyMTAwMDAwMCwKKzB4MTIwMDAxNDAsIDB4MCwgMHgwLCAweDIwMDAwMDAwLAorMHgxMjAwMDBhMCwgMHgwLCAweDEyMDAwMDYwLCAweDEyMDAwMTgwLAorMHgxMjAwMDFlMCwgMHgwLCAweDAsIDB4MCwKKzB4MSwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MiwKKzB4MCwgMHgwLCAweDMwMDAxLCAweDEsCiAweDMwMjAxLCAweDAsIDB4MCwgMHgwIH07CiAjZW5kaWYKIC8qIEdlbmVyYXRlZCBieSBnZW5mdy5jICovCkBAIC00NjEyLDQ4NDUgKzQ2MTIsNDg0NSBAQAogI2RlZmluZSB0aWdvbjJGd0Jzc0FkZHIgMHgwMDAxNmY1MAogI2RlZmluZSB0aWdvbjJGd0Jzc0xlbiAweDIwYzAKIHN0YXRpYyB1MzIgdGlnb24yRndUZXh0WyhNQVhfVEVYVF9MRU4vNCkgKyAxXSBfX2RldmluaXRkYXRhID0gewotMHgwLCAKLTB4MTAwMDAwMDMsIDB4MCwgMHhkLCAweGQsIAotMHgzYzFkMDAwMSwgMHg4ZmJkNmQyMCwgMHgzYTBmMDIxLCAweDNjMTAwMDAwLCAKLTB4MjYxMDQwMDAsIDB4YzAwMTBjMCwgMHgwLCAweGQsIAotMHgzYzFkMDAwMSwgMHg4ZmJkNmQyNCwgMHgzYTBmMDIxLCAweDNjMTAwMDAwLCAKLTB4MjYxMDQwMDAsIDB4YzAwMTdlMCwgMHgwLCAweGQsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MjAwMDAwOCwgCi0weDAsIDB4ODAwMTcyZiwgMHgzYzBhMDAwMSwgMHg4MDAxNzJmLCAKLTB4M2MwYTAwMDIsIDB4ODAwMTcyZiwgMHgwLCAweDgwMDJjYWMsIAotMHgwLCAweDgwMDJjNGYsIDB4MCwgMHg4MDAxNzJmLCAKLTB4M2MwYTAwMDQsIDB4ODAwMzI4YSwgMHgwLCAweDgwMDFhNTIsIAotMHgwLCAweDgwMDM5NGQsIDB4MCwgMHg4MDAzOGY0LCAKLTB4MCwgMHg4MDAxNzJmLCAweDNjMGEwMDA2LCAweDgwMDM5YmIsIAotMHgzYzBhMDAwNywgMHg4MDAxNzJmLCAweDNjMGEwMDA4LCAweDgwMDE3MmYsIAotMHgzYzBhMDAwOSwgMHg4MDAzYTEzLCAweDAsIDB4ODAwMmVhNiwgCi0weDAsIDB4ODAwMTcyZiwgMHgzYzBhMDAwYiwgMHg4MDAxNzJmLCAKLTB4M2MwYTAwMGMsIDB4ODAwMTcyZiwgMHgzYzBhMDAwZCwgMHg4MDAyOGZiLCAKLTB4MCwgMHg4MDAyODkwLCAweDAsIDB4ODAwMTcyZiwgCi0weDNjMGEwMDBlLCAweDgwMDIwOGMsIDB4MCwgMHg4MDAxOTY0LCAKLTB4MCwgMHg4MDAxYTA0LCAweDAsIDB4ODAwM2NhNiwgCi0weDAsIDB4ODAwM2M5NCwgMHgwLCAweDgwMDE3MmYsIAotMHgwLCAweDgwMDE5MWEsIDB4MCwgMHg4MDAxNzJmLCAKLTB4MCwgMHg4MDAxNzJmLCAweDNjMGEwMDEzLCAweDgwMDE3MmYsIAotMHgzYzBhMDAxNCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZTAsIAotMHgzYzFjYzAwMCwgMHhhZmJmMDAxYywgMHhhZmIwMDAxOCwgMHg4ZjgyMDE0MCwgCi0weDI0MDMwMDAzLCAweGFmODMwMGVjLCAweDM0NDIwMDA0LCAweGMwMDJiMjAsIAotMHhhZjgyMDE0MCwgMHgzYzAxMDBjMCwgMHhjMDAxNzYzLCAweGFjMjAzZmZjLCAKLTB4NDAxODIxLCAweDNjMDIwMDEwLCAweDNjMDEwMDAxLCAweGFjMjM2ZTljLCAKLTB4MTA2MjAwMTEsIDB4NDMxMDJiLCAweDE0NDAwMDAyLCAweDNjMDIwMDIwLCAKLTB4M2MwMjAwMDgsIDB4MTA2MjAwMGMsIDB4MjQwNTAxMDAsIDB4M2MwNjAwMDEsIAotMHg4Y2M2NmU5YywgMHgzYzA0MDAwMSwgMHgyNDg0NWM3NCwgMHgzODIxLCAKLTB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHgzYzAyMDAyMCwgCi0weDNjMDEwMDAxLCAweGFjMjI2ZTljLCAweDI0MDIwMDA4LCAweDNjMDEwMDAxLCAKLTB4YWMyMjZlYjQsIDB4MjQwMjAwMWYsIDB4M2MwMTAwMDEsIDB4YWMyMjZlYzQsIAotMHgyNDAyMDAxNiwgMHgzYzAxMDAwMSwgMHhhYzIyNmU5OCwgMHgzYzA1ZmZmZSwgCi0weDM0YTU2ZjA4LCAweDNjMDIwMDAxLCAweDhjNDI2ZTljLCAweDNjMDMwMDAyLCAKLTB4MjQ2MzkwMTAsIDB4M2MwNDAwMDEsIDB4OGM4NDZjYzQsIDB4NDMxMDIzLCAKLTB4MTQ4MDAwMDIsIDB4NDU4MDIxLCAweDI2MTBmYTM4LCAweDI0MDJmMDAwLCAKLTB4MjAyODAyNCwgMHhjMDAxNzg1LCAweDIwMDIwMjEsIDB4MjAyMjgyMywgCi0weDNjMDQwMDIwLCAweDgyMTgyMywgMHg2NTE4MjMsIDB4MjQ3YmIwMDAsIAotMHgzYzAzZmZmZSwgMHgzNDYzYmYwOCwgMHgzNjNiODIxLCAweDNjMDYwMGJmLCAKLTB4MzRjNmYwMDAsIDB4M2MwNzAwMDEsIDB4OGNlNzZjYzAsIDB4M2MwMzAwYmYsIAotMHgzNDYzZTAwMCwgMHg4NTIwMjMsIDB4M2MwMTAwMDEsIDB4YWMyNDZlYTgsIAotMHg4MjIwMjMsIDB4M2MwMTAwMDEsIDB4YWMyNTZlOTAsIDB4NTI4NDIsIAotMHgzYzAxMDAwMSwgMHhhYzIyNmU4NCwgMHgyNzYyMGZmYywgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZDIwLCAweDI3NjIxZmZjLCAweGRiMzAyMywgMHg3YjE4MjMsIAotMHgzYzAxMDAwMSwgMHhhYzI0NmU4OCwgMHgzYzAxMDAwMSwgMHhhYzI1NmVhYywgCi0weDNjMDEwMDAxLCAweGFjMjI2ZDI0LCAweGFmODYwMTUwLCAweDEwZTAwMDExLCAKLTB4YWY4MzAyNTAsIDB4M2MxZDAwMDEsIDB4OGZiZDZjY2MsIDB4M2EwZjAyMSwgCi0weGMwMDE3NDksIDB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmNkMCwgCi0weDNjMDMwMDAxLCAweDhjNjM2Y2Q0LCAweDI0NDJmZTAwLCAweDI0NjMwMjAwLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZjZDAsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMDQsIAotMHhhYzIzNmNkNCwgMHgzYzFkMDAwMSwgMHg4ZmJkNmQyMCwgMHgzYTBmMDIxLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZjYzQsIDB4MTA0MDAwMGQsIDB4MjZmYWZhMzgsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmNkMCwgMHgzYzAzMDAwMSwgMHg4YzYzNmNkNCwgCi0weDNjMWEwMDAxLCAweDhmNWE2Y2Q0LCAweDI0NDJmYTM4LCAweDI0NjMwNWM4LCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZjZDAsIDB4M2MwMTAwMDEsIDB4YWMyMzZjZDQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmNjOCwgMHgxNDQwMDAwMywgMHgwLCAKLTB4M2MwMTAwMDEsIDB4YWMyMDZjZDAsIDB4YzAwMTE1MSwgMHgwLCAKLTB4OGZiZjAwMWMsIDB4OGZiMDAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyMCwgCi0weDNjMDIwMDAxLCAweDhjNDI2Y2QwLCAweDNjMDMwMDAxLCAweDhjNjM2Y2Q0LCAKLTB4MjdiZGZmOTgsIDB4YWZiMDAwNDgsIDB4M2MxMDAwMDEsIDB4OGUxMDY2YjgsIAotMHhhZmIyMDA1MCwgMHgzYzEyMDAwMCwgMHgyNjUyNDEwMCwgMHhhZmJmMDA2MCwgCi0weGFmYmUwMDVjLCAweGFmYjUwMDU4LCAweGFmYjMwMDU0LCAweGFmYjEwMDRjLCAKLTB4YWZhMjAwMzQsIDB4YWZhMzAwMzAsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIAotMHg4Zjg2MDA0MCwgMHgzYzA0MDAwMSwgMHgyNDg0NWM4MCwgMHgyNDA1MDIwMCwgCi0weDNjMDEwMDAxLCAweGFjMzI2ZTgwLCAweGMwMDJiM2IsIDB4MjAwMzgyMSwgCi0weDhmODMwMDQwLCAweDNjMDJmMDAwLCAweDYyMTgyNCwgMHgzYzAyNjAwMCwgCi0weDEwNjIwMDBiLCAweGEzYTAwMDNmLCAweDI0MGUwMDAxLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVjODgsIDB4YTNhZTAwM2YsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIAotMHg4Zjg2MDA0MCwgMHgyNDA1MDMwMCwgMHhjMDAyYjNiLCAweDIwMDM4MjEsIAotMHg4ZjgyMDI0MCwgMHgzYzAzMDAwMSwgMHg0MzEwMjUsIDB4YWY4MjAyNDAsIAotMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxNDQwMDAwNSwgMHgwLCAKLTB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MDAwMDQsIDB4MCwgCi0weGFmODAwMDQ4LCAweDEwMDAwMDAzLCAweDJlMDIwMjEsIDB4YWY4MDAwNGMsIAotMHgyZTAyMDIxLCAweDNjMDUwMDAxLCAweGMwMDJiYTgsIDB4MzRhNTQwZjgsIAotMHgzNDAyMDIxLCAweGMwMDJiYTgsIDB4MjQwNTA1YzgsIDB4M2MwMjAwMDEsIAotMHg4YzQyNmVhOCwgMHgzYzBkMDAwMSwgMHg4ZGFkNmU4OCwgMHgzYzAzMDAwMSwgCi0weDhjNjM2ZTg0LCAweDNjMDgwMDAxLCAweDhkMDg2ZTkwLCAweDNjMDkwMDAxLCAKLTB4OGQyOTZlYWMsIDB4M2MwYTAwMDEsIDB4OGQ0YTZlYjQsIDB4M2MwYjAwMDEsIAotMHg4ZDZiNmVjNCwgMHgzYzBjMDAwMSwgMHg4ZDhjNmU5OCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1Yzk0LCAweDI0MDUwNDAwLCAweGFmNDIwMTNjLCAweDhmNDIwMTNjLCAKLTB4MjQwNjAwMDEsIDB4MjQwNzAwMDEsIDB4YWY0MDAwMDAsIDB4YWY0ZDAxMzgsIAotMHhhZjQzMDE0NCwgMHhhZjQ4MDE0OCwgMHhhZjQ5MDE0YywgMHhhZjRhMDE1MCwgCi0weGFmNGIwMTU0LCAweGFmNGMwMTU4LCAweDI0NDJmZjgwLCAweGFmNDIwMTQwLCAKLTB4MjQwMjAwMDEsIDB4YWZhMjAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgCi0weDhmNDIwMTM4LCAweGFmYTIwMDEwLCAweDhmNDIwMTNjLCAweGFmYTIwMDE0LCAKLTB4OGY0NjAxNDQsIDB4OGY0NzAxNDgsIDB4M2MwNDAwMDEsIDB4MjQ4NDVjYTAsIAotMHhjMDAyYjNiLCAweDI0MDUwNTAwLCAweGFmYjcwMDEwLCAweGFmYmEwMDE0LCAKLTB4OGY0NjAxNGMsIDB4OGY0NzAxNTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVjYWMsIAotMHhjMDAyYjNiLCAweDI0MDUwNjAwLCAweDNjMDIwMDAxLCAweDhjNDI2ZTljLCAKLTB4MzYwMzgyMSwgMHgzYzA2MDAwMiwgMHgyNGM2OTAxMCwgMHgyNDQ4ZmZmZiwgCi0weDEwNjE4MjQsIDB4ZTgxMDI0LCAweDQzMTAyYiwgMHgxMDQwMDAwNiwgCi0weDI0MDUwOTAwLCAweDNjMDQwMDAxLCAweDI0ODQ1Y2I4LCAweGFmYTgwMDEwLCAKLTB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHg4ZjgyMDAwYywgMHhhZmEyMDAxMCwgCi0weDhmODIwMDNjLCAweGFmYTIwMDE0LCAweDhmODYwMDAwLCAweDhmODcwMDA0LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVjYzQsIDB4YzAwMmIzYiwgMHgyNDA1MTAwMCwgCi0weDhjMDIwMjIwLCAweDhjMDMwMjI0LCAweDhjMDYwMjE4LCAweDhjMDcwMjFjLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVjY2MsIDB4MjQwNTExMDAsIDB4YWZhMjAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTMwMDE0LCAweGFmODAwMDU0LCAweGFmODAwMTFjLCAKLTB4OGMwMjAyMTgsIDB4MzA0MjAwMDIsIDB4MTA0MDAwMDksIDB4MCwgCi0weDhjMDIwMjIwLCAweDNjMDMwMDAyLCAweDM0NjMwMDA0LCAweDQzMTAyNSwgCi0weGFmNDIwMDBjLCAweDhjMDIwMjFjLCAweDEwMDAwMDA4LCAweDM0NDIwMDA0LCAKLTB4OGMwMjAyMjAsIDB4M2MwMzAwMDIsIDB4MzQ2MzAwMDYsIDB4NDMxMDI1LCAKLTB4YWY0MjAwMGMsIDB4OGMwMjAyMWMsIDB4MzQ0MjAwMDYsIDB4YWY0MjAwMTQsIAotMHg4YzAyMDIxOCwgMHgzMDQyMDAxMCwgMHgxMDQwMDAwYSwgMHgwLCAKLTB4OGMwMjAyMWMsIDB4MzQ0MjAwMDQsIDB4YWY0MjAwMTAsIDB4OGMwMjAyMjAsIAotMHgzYzAzMDAwYSwgMHgzNDYzMDAwNCwgMHg0MzEwMjUsIDB4MTAwMDAwMDksIAotMHhhZjQyMDAwOCwgMHg4YzAyMDIyMCwgMHgzYzAzMDAwYSwgMHgzNDYzMDAwNiwgCi0weDQzMTAyNSwgMHhhZjQyMDAwOCwgMHg4YzAyMDIxYywgMHgzNDQyMDAwNiwgCi0weGFmNDIwMDEwLCAweDI0MDIwMDAxLCAweGFmODIwMGEwLCAweGFmODIwMGIwLCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4YWY4MDAwZDAsIDB4YWY4MDAwYzAsIAotMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIAotMHgyYzQyMDA2NSwgMHgxNDQwZmZmYywgMHgwLCAweDhjMDQwMjA4LCAKLTB4OGMwNTAyMGMsIDB4MjZlMjAwMjgsIDB4YWVlMjAwMjAsIDB4MjQwMjA0OTAsIAotMHhhZWUyMDAxMCwgMHhhZWU0MDAwOCwgMHhhZWU1MDAwYywgMHgyNmU0MDAwOCwgCi0weDhjODIwMDAwLCAweDhjODMwMDA0LCAweGFmODIwMDkwLCAweGFmODMwMDk0LCAKLTB4OGM4MjAwMTgsIDB4YWY4MjAwYjQsIDB4OTQ4MjAwMGEsIDB4YWY4MjAwOWMsIAotMHg4ZjQyMDAxNCwgMHhhZjgyMDBiMCwgMHg4ZjgyMDBiMCwgMHgzMDQyMDAwNCwgCi0weDE0NDBmZmZkLCAweDAsIDB4OGY4MjAwYjAsIDB4M2MwM2VmMDAsIAotMHg0MzEwMjQsIDB4MTA0MDAwMjEsIDB4MCwgMHg4ZjgyMDBiNCwgCi0weGFmYTIwMDEwLCAweDhmODIwMDkwLCAweDhmODMwMDk0LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVjZDQsIDB4YWZhMzAwMTQsIDB4OGY4NjAwYjAsIDB4OGY4NzAwOWMsIAotMHgzYzA1MDAwMSwgMHhjMDAyYjNiLCAweDM0YTUyMDBkLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVjZTAsIDB4MjQwMjAzYzAsIDB4YWZhMjAwMTAsIDB4YWZhMDAwMTQsIAotMHg4Zjg2MDE0NCwgMHgzYzA3MDAwMSwgMHgyNGU3NWNlOCwgMHhjMDAyYjNiLCAKLTB4MzQwNWRlYWQsIDB4OGY4MjAxMWMsIDB4MzQ0MjAwMDIsIDB4YWY4MjAxMWMsIAotMHg4ZjgyMDIyMCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDE0MCwgCi0weDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDE0MCwgMHg5NmUyMDQ3MiwgCi0weDk2ZTYwNDUyLCAweDk2ZTcwNDYyLCAweGFmYTIwMDEwLCAweDk2ZTIwNDgyLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVkMTQsIDB4MjQwNTEyMDAsIDB4YzAwMmIzYiwgCi0weGFmYTIwMDE0LCAweDk2ZjAwNDUyLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAKLTB4YjAyMSwgMHgyNDE2MDAwMSwgMHgzMjAyMDAwMiwgMHg1NDQwMDAwMSwgCi0weDM2ZDYwMDAyLCAweDMyMDIwMDA4LCAweDU0NDAwMDAxLCAweDM2ZDYwMDA0LCAKLTB4MzIwMjAwMTAsIDB4NTQ0MDAwMDEsIDB4MzZkNjAwMDgsIDB4MzIwMjAwMjAsIAotMHg1NDQwMDAwMSwgMHgzNmQ2MDAxMCwgMHgzMjAyMDA0MCwgMHg1NDQwMDAwMSwgCi0weDM2ZDYwMDIwLCAweDMyMDIwMDgwLCAweDU0NDAwMDAxLCAweDM2ZDYwMDQwLCAKLTB4OTZlNjA0ODIsIDB4MzBjMjAyMDAsIDB4NTQ0MDAwMDEsIDB4MzZkNjQwMDAsIAotMHg5NmUzMDQ3MiwgMHgzMDYyMDIwMCwgMHgxMDQwMDAwMywgMHgzMDYyMDEwMCwgCi0weDEwMDAwMDAzLCAweDM2ZDYyMDAwLCAweDU0NDAwMDAxLCAweDM2ZDYxMDAwLCAKLTB4OTZmMDA0NjIsIDB4MzJjMjQwMDAsIDB4MTQ0MDAwMDQsIDB4MzIwNzAwOWIsIAotMHgzMGMyMDA5YiwgMHgxNGUyMDAwNywgMHgyNDBlMDAwMSwgMHgzMmMyMjAwMCwgCi0weDE0NDAwMDBkLCAweDMyMDIwMDAxLCAweDMwNjIwMDliLCAweDEwZTIwMDA5LCAKLTB4MjQwZTAwMDEsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkMjAsIDB4MjQwNTEzMDAsIAotMHgyMDAzODIxLCAweGEzYWUwMDNmLCAweGFmYTMwMDEwLCAweGMwMDJiM2IsIAotMHhhZmEwMDAxNCwgMHgzMjAyMDAwMSwgMHg1NDQwMDAwMSwgMHgzNmQ2MDA4MCwgCi0weDMyMDIwMDAyLCAweDU0NDAwMDAxLCAweDM2ZDYwMTAwLCAweDMyMDIwMDA4LCAKLTB4NTQ0MDAwMDEsIDB4MzZkNjAyMDAsIDB4MzIwMjAwMTAsIDB4NTQ0MDAwMDEsIAotMHgzNmQ2MDQwMCwgMHgzMjAyMDA4MCwgMHg1NDQwMDAwMSwgMHgzNmQ2MDgwMCwgCi0weDhjMDIwMjE4LCAweDMwNDIwMjAwLCAweDEwNDAwMDAyLCAweDNjMDIwMDA4LCAKLTB4MmMyYjAyNSwgMHg4YzAyMDIxOCwgMHgzMDQyMDgwMCwgMHgxMDQwMDAwMiwgCi0weDNjMDIwMDgwLCAweDJjMmIwMjUsIDB4OGMwMjAyMTgsIDB4MzA0MjA0MDAsIAotMHgxMDQwMDAwMiwgMHgzYzAyMDEwMCwgMHgyYzJiMDI1LCAweDhjMDIwMjE4LCAKLTB4MzA0MjAxMDAsIDB4MTA0MDAwMDIsIDB4M2MwMjAyMDAsIDB4MmMyYjAyNSwgCi0weDhjMDIwMjE4LCAweDMwNDIwMDgwLCAweDEwNDAwMDAyLCAweDNjMDIwNDAwLCAKLTB4MmMyYjAyNSwgMHg4YzAyMDIxOCwgMHgzMDQyMjAwMCwgMHgxMDQwMDAwMiwgCi0weDNjMDIwMDEwLCAweDJjMmIwMjUsIDB4OGMwMjAyMTgsIDB4MzA0MjQwMDAsIAotMHgxMDQwMDAwMiwgMHgzYzAyMDAyMCwgMHgyYzJiMDI1LCAweDhjMDIwMjE4LCAKLTB4MzA0MjEwMDAsIDB4MTA0MDAwMDIsIDB4M2MwMjAwNDAsIDB4MmMyYjAyNSwgCi0weDhlZTIwNDk4LCAweDhlZTMwNDljLCAweGFmNDIwMTYwLCAweGFmNDMwMTY0LCAKLTB4OGVlMjA0YTAsIDB4OGVlMzA0YTQsIDB4YWY0MjAxNjgsIDB4YWY0MzAxNmMsIAotMHg4ZWUyMDRhOCwgMHg4ZWUzMDRhYywgMHhhZjQyMDE3MCwgMHhhZjQzMDE3NCwgCi0weDhlZTIwNDI4LCAweDhlZTMwNDJjLCAweGFmNDIwMTc4LCAweGFmNDMwMTdjLCAKLTB4OGVlMjA0NDgsIDB4OGVlMzA0NGMsIDB4YWY0MjAxODAsIDB4YWY0MzAxODQsIAotMHg4ZWUyMDQ1OCwgMHg4ZWUzMDQ1YywgMHhhZjQyMDE4OCwgMHhhZjQzMDE4YywgCi0weDhlZTIwNDY4LCAweDhlZTMwNDZjLCAweGFmNDIwMTkwLCAweGFmNDMwMTk0LCAKLTB4OGVlMjA0NzgsIDB4OGVlMzA0N2MsIDB4YWY0MjAxOTgsIDB4YWY0MzAxOWMsIAotMHg4ZWUyMDQ4OCwgMHg4ZWUzMDQ4YywgMHhhZjQyMDFhMCwgMHhhZjQzMDFhNCwgCi0weDhlZTIwNGIwLCAweDhlZTMwNGI0LCAweDI0MDQwMDgwLCAweGFmNDIwMWE4LCAKLTB4YWY0MzAxYWMsIDB4YzAwMmJhOCwgMHgyNDA1MDA4MCwgMHg4YzAyMDI1YywgCi0weDI3NDQwMjI0LCAweGFmNDIwMWYwLCAweDhjMDIwMjYwLCAweDI0MDUwMjAwLCAKLTB4MjQwNjAwMDgsIDB4YzAwMmJiZiwgMHhhZjQyMDFmOCwgMHgzYzA0M2I5YSwgCi0weDM0ODRjYTAwLCAweDM4MjEsIDB4MjQwMjAwMDYsIDB4MjQwMzAwMDIsIAotMHhhZjQyMDFmNCwgMHgyNDAyMDNlOCwgMHhhZjQzMDIwNCwgMHhhZjQzMDIwMCwgCi0weGFmNDQwMWZjLCAweGFmNDIwMjk0LCAweDI0MDIwMDAxLCAweGFmNDMwMjkwLCAKLTB4YWY0MjAyOWMsIDB4M2MwMzAwMDEsIDB4NjcxODIxLCAweDkwNjM2Y2Q4LCAKLTB4MzQ3MTAyMSwgMHgyNGU3MDAwMSwgMHhhMDQzMDIyYywgMHgyY2UyMDAwZiwgCi0weDE0NDBmZmY4LCAweDM0NzE4MjEsIDB4MjRlNzAwMDEsIDB4M2MwODAwMDEsIAotMHgzNTA4NDBmOCwgMHg4ZjgyMDA0MCwgMHgzYzA0MDAwMSwgMHgyNDg0NWQyYywgCi0weDI0MDUxNDAwLCAweDIxNzAyLCAweDI0NDIwMDMwLCAweGEwNjIwMjJjLCAKLTB4MzQ3MTAyMSwgMHhhMDQwMDIyYywgMHg4YzA3MDIxOCwgMHgyYzAzMDIxLCAKLTB4MjQwMjA1YzgsIDB4YWZhMjAwMTAsIDB4YzAwMmIzYiwgMHhhZmE4MDAxNCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1ZDM4LCAweDNjMDUwMDAwLCAweDI0YTU1YzgwLCAKLTB4MjQwNjAwMTAsIDB4MjdiMTAwMzAsIDB4MjIwMzgyMSwgMHgyN2IzMDAzNCwgCi0weGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4M2MwMzAwMDEsIDB4OGM2MzZjYzgsIAotMHgxMDYwMDAwYSwgMHg0MDgwMjEsIDB4OGZhMzAwMzAsIDB4MjQwNWZmMDAsIAotMHg4ZmEyMDAzNCwgMHgyNDY0MDBmZiwgMHg4NTIwMjQsIDB4ODMxODIzLCAKLTB4NDMxMDIzLCAweGFmYTIwMDM0LCAweGFmYTQwMDMwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVkNDQsIDB4M2MwNTAwMDAsIDB4MjRhNTQxMDAsIDB4MjQwNjAxMDgsIAotMHgyMjAzODIxLCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4NDA5MDIxLCAKLTB4MzJjMjAwMDMsIDB4M2MwMTAwMDEsIDB4YWMzMjZlODAsIDB4MTA0MDAwNDUsIAotMHgyMjAzODIxLCAweDhmODIwMDUwLCAweDNjMDMwMDEwLCAweDQzMTAyNCwgCi0weDEwNDAwMDE2LCAweDAsIDB4OGMwMjAyMTgsIDB4MzA0MjAwNDAsIAotMHgxMDQwMDAwZiwgMHgyNDAyMDAwMSwgMHg4ZjgyMDA1MCwgMHg4YzAzMDIxOCwgCi0weDI0MGUwMDAxLCAweDNjMDQwMDAxLCAweDI0ODQ1ZDUwLCAweGEzYWUwMDNmLCAKLTB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIDB4OGY4NzAwNDAsIDB4MjQwNTE1MDAsIAotMHhjMDAyYjNiLCAweDJjMDMwMjEsIDB4MTAwMDAwMDQsIDB4MCwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyNDBmNCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1ZDVjLCAweDNjMDUwMDAxLCAweDI0YTU1YjQwLCAweDNjMDYwMDAxLCAKLTB4MjRjNjViYWMsIDB4YzUzMDIzLCAweDhmNDIwMDEwLCAweDI3YjMwMDMwLCAKLTB4MjYwMzgyMSwgMHgyN2IxMDAzNCwgMHgzNDQyMGEwMCwgMHhhZjQyMDAxMCwgCi0weGMwMDE3YTMsIDB4YWZiMTAwMTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkNzAsIAotMHgzYzA1MDAwMSwgMHgyNGE1YjcxNCwgMHgzYzA2MDAwMSwgMHgyNGM2YmE5MCwgCi0weGM1MzAyMywgMHgyNjAzODIxLCAweGFmNDIwMTA4LCAweGMwMDE3YTMsIAotMHhhZmIxMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWQ4YywgMHgzYzA1MDAwMSwgCi0weDI0YTViZTU4LCAweDNjMDYwMDAxLCAweDI0YzZjOTAwLCAweGM1MzAyMywgCi0weDI2MDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlZjQsIDB4YzAwMTdhMywgCi0weGFmYjEwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZGE0LCAweDEwMDAwMDI0LCAKLTB4MjQwNTE2MDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkYWMsIDB4M2MwNTAwMDEsIAotMHgyNGE1YTEwYywgMHgzYzA2MDAwMSwgMHgyNGM2YTIzOCwgMHhjNTMwMjMsIAotMHhjMDAxN2EzLCAweGFmYjMwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZGJjLCAKLTB4M2MwNTAwMDEsIDB4MjRhNWIyYjAsIDB4M2MwNjAwMDEsIDB4MjRjNmI3MGMsIAotMHhjNTMwMjMsIDB4MjIwMzgyMSwgMHhhZjQyMDEwOCwgMHhjMDAxN2EzLCAKLTB4YWZiMzAwMTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkZDAsIDB4M2MwNTAwMDEsIAotMHgyNGE1YmE5OCwgMHgzYzA2MDAwMSwgMHgyNGM2YmU1MCwgMHhjNTMwMjMsIAotMHgyMjAzODIxLCAweDNjMDEwMDAxLCAweGFjMjI2ZWY0LCAweGMwMDE3YTMsIAotMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWRlNCwgMHgyNDA1MTY1MCwgCi0weDJjMDMwMjEsIDB4MzgyMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmVmOCwgCi0weGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4MzJjMjAwMjAsIAotMHgxMDQwMDAyMSwgMHgyN2E3MDAzMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWRmMCwgCi0weDNjMDUwMDAxLCAweDI0YTViMTNjLCAweDNjMDYwMDAxLCAweDI0YzZiMmE4LCAKLTB4YzUzMDIzLCAweDI0MDIyMDAwLCAweGFmNDIwMDFjLCAweDI3YTIwMDM0LCAKLTB4YzAwMTdhMywgMHhhZmEyMDAxMCwgMHgyMTkwMCwgMHgzMTk4MiwgCi0weDNjMDQwODAwLCAweDY0MTgyNSwgMHhhZTQzMDAyOCwgMHgyNDAzMDAxMCwgCi0weGFmNDMwMDNjLCAweDk2ZTMwNDUwLCAweGFmNDMwMDQwLCAweDhmNDMwMDQwLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVlMDQsIDB4YWZhMDAwMTQsIDB4YWZhMzAwMTAsIAotMHg4ZjQ3MDAxYywgMHgyNDA1MTY2MCwgMHgzYzAxMDAwMSwgMHhhYzIyNmVmMCwgCi0weDEwMDAwMDI1LCAweDMyYzYwMDIwLCAweDhlZTIwNDQ4LCAweDhlZTMwNDRjLCAKLTB4YWY0MzAwMWMsIDB4OGY0MjAwMWMsIDB4MjQ0MmUwMDAsIDB4MmM0MjIwMDEsIAotMHgxNDQwMDAwYSwgMHgyNDBlMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NWUxMCwgCi0weGEzYWUwMDNmLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmNDYwMDFjLCAKLTB4MjQwNTE3MDAsIDB4YzAwMmIzYiwgMHgzODIxLCAweDNjMDIwMDAwLCAKLTB4MjQ0MjVjYmMsIDB4MjExMDAsIDB4MjExODIsIDB4M2MwMzA4MDAsIAotMHg0MzEwMjUsIDB4YWU0MjAwMjgsIDB4MjQwMjAwMDgsIDB4YWY0MjAwM2MsIAotMHg5NmUyMDQ1MCwgMHhhZjQyMDA0MCwgMHg4ZjQyMDA0MCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1ZTFjLCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhmNDcwMDFjLCAKLTB4MjQwNTE4MDAsIDB4MzJjNjAwMjAsIDB4YzAwMmIzYiwgMHgwLCAKLTB4M2MwNTBmZmYsIDB4M2MwMzAwMDEsIDB4OGM2MzZlZjQsIDB4MzRhNWZmZmYsIAotMHgyNDAzMDIxLCAweDNjMDIwMDAxLCAweDhjNDI2ZWY4LCAweDNjMDQwODAwLCAKLTB4NjUxODI0LCAweDMxODgyLCAweDY0MTgyNSwgMHg0NTEwMjQsIAotMHgyMTA4MiwgMHg0NDEwMjUsIDB4YWNjMjAwODAsIDB4MzJjMjAxODAsIAotMHgxMDQwMDA1NiwgMHhhY2MzMDAyMCwgMHg4ZjgyMDA1YywgMHgzYzAzMDA4MCwgCi0weDQzMTAyNCwgMHgxMDQwMDAwZCwgMHgwLCAweDhmODIwMDUwLCAKLTB4YWZhMjAwMTAsIDB4OGY4MjAwNWMsIDB4MjQwZTAwMDEsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWUyOCwgMHhhM2FlMDAzZiwgMHhhZmEyMDAxNCwgMHg4Zjg3MDA0MCwgCi0weDI0MDUxOTAwLCAweGMwMDJiM2IsIDB4MmMwMzAyMSwgMHg4ZjgyMDA1MCwgCi0weDNjMDMwMDEwLCAweDQzMTAyNCwgMHgxMDQwMDAxNiwgMHgwLCAKLTB4OGMwMjAyMTgsIDB4MzA0MjAwNDAsIDB4MTA0MDAwMGYsIDB4MjQwMjAwMDEsIAotMHg4ZjgyMDA1MCwgMHg4YzAzMDIxOCwgMHgyNDBlMDAwMSwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1ZDUwLCAweGEzYWUwMDNmLCAweGFmYTIwMDEwLCAweGFmYTMwMDE0LCAKLTB4OGY4NzAwNDAsIDB4MjQwNTIwMDAsIDB4YzAwMmIzYiwgMHgyYzAzMDIxLCAKLTB4MTAwMDAwMDQsIDB4MCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhMDIyNDBmNCwgMHgzYzA0MDAwMSwgMHgyNDg0NWUzNCwgMHgzYzA1MDAwMSwgCi0weDI0YTU1YWMwLCAweDNjMDYwMDAxLCAweDI0YzY1YjM4LCAweGM1MzAyMywgCi0weDhmNDIwMDA4LCAweDI3YjMwMDMwLCAweDI2MDM4MjEsIDB4MjdiMTAwMzQsIAotMHgzNDQyMGUwMCwgMHhhZjQyMDAwOCwgMHhjMDAxN2EzLCAweGFmYjEwMDEwLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVlNGMsIDB4M2MwNTAwMDEsIDB4MjRhNWQ4YjQsIAotMHgzYzA2MDAwMSwgMHgyNGM2ZTNjOCwgMHhjNTMwMjMsIDB4MjYwMzgyMSwgCi0weGFmNDIwMTBjLCAweGMwMDE3YTMsIDB4YWZiMTAwMTAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWU2NCwgMHgzYzA1MDAwMSwgMHgyNGE1ZTlhYywgMHgzYzA2MDAwMSwgCi0weDI0YzZmMGYwLCAweGM1MzAyMywgMHgyNjAzODIxLCAweDNjMDEwMDAxLCAKLTB4YWMyMjZmMDQsIDB4YzAwMTdhMywgMHhhZmIxMDAxMCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1ZTdjLCAweDEwMDAwMDI3LCAweDI0MDUyMTAwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVlODQsIDB4M2MwNTAwMDEsIDB4MjRhNTlmYzgsIDB4M2MwNjAwMDEsIAotMHgyNGM2YTEwNCwgMHhjNTMwMjMsIDB4MjdiMTAwMzAsIDB4MjIwMzgyMSwgCi0weDI3YjMwMDM0LCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWU5NCwgMHgzYzA1MDAwMSwgMHgyNGE1Y2FkNCwgMHgzYzA2MDAwMSwgCi0weDI0YzZkOGFjLCAweGM1MzAyMywgMHgyMjAzODIxLCAweGFmNDIwMTBjLCAKLTB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWVhNCwgCi0weDNjMDUwMDAxLCAweDI0YTVlODRjLCAweDNjMDYwMDAxLCAweDI0YzZlOWE0LCAKLTB4YzUzMDIzLCAweDIyMDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZmMDQsIAotMHhjMDAxN2EzLCAweGFmYjMwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZWI4LCAKLTB4MjQwNTIxNTAsIDB4MmMwMzAyMSwgMHgzODIxLCAweDNjMDEwMDAxLCAKLTB4YWMyMjZmMTAsIDB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgCi0weDNjMTEwZmZmLCAweDNjMDMwMDAxLCAweDhjNjM2ZjA0LCAweDM2MzFmZmZmLCAKLTB4MjQwOTgyMSwgMHgzYzAyMDAwMSwgMHg4YzQyNmYxMCwgMHgzYzBlMDgwMCwgCi0weDcxMTgyNCwgMHgzMTg4MiwgMHg2ZTE4MjUsIDB4NTExMDI0LCAKLTB4MjEwODIsIDB4NGUxMDI1LCAweGFlNjMwMDM4LCAweGFlNjIwMDc4LCAKLTB4OGMwMjAyMTgsIDB4MzA0MjAwNDAsIDB4MTQ0MDAwMDQsIDB4MjQwMjAwMDEsIAotMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMjQwZjQsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWVjNCwgMHgzYzA1MDAwMSwgMHgyNGE1ZTNkMCwgMHgzYzA2MDAwMSwgCi0weDI0YzZlNTJjLCAweGM1MzAyMywgMHgyN2JlMDAzMCwgMHgzYzAzODIxLCAKLTB4MjdiNTAwMzQsIDB4YzAwMTdhMywgMHhhZmI1MDAxMCwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZWZjLCAweDUxMTAyNCwgMHgyMTA4MiwgMHgzYzBlMDgwMCwgCi0weDRlMTAyNSwgMHhhZTYyMDA1MCwgMHgzMmMyMjAwMCwgMHgxMDQwMDAwNiwgCi0weDNjMDM4MjEsIDB4M2MwMjAwMDAsIDB4MjQ0MjVjYmMsIDB4MjIyMTAyNCwgCi0weDEwMDAwMDBmLCAweDIxMDgyLCAweDNjMDQwMDAxLCAweDI0ODQ1ZWQ4LCAKLTB4M2MwNTAwMDEsIDB4MjRhNWU1MzQsIDB4M2MwNjAwMDEsIDB4MjRjNmU2ZTQsIAotMHhjNTMwMjMsIDB4YzAwMTdhMywgMHhhZmI1MDAxMCwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZjE0LCAweDUxMTAyNCwgMHgyMTA4MiwgMHgzYzBlMDgwMCwgCi0weDRlMTAyNSwgMHhhZTYyMDA0OCwgMHgzMmMyNDAwMCwgMHgxMDQwMDAwNSwgCi0weDI3YTcwMDMwLCAweDNjMDIwMDAwLCAweDI0NDI1Y2JjLCAweDEwMDAwMDBlLCAKLTB4MjExMDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVlZjAsIDB4M2MwNTAwMDEsIAotMHgyNGE1ZTZlYywgMHgzYzA2MDAwMSwgMHgyNGM2ZTg0NCwgMHhjNTMwMjMsIAotMHgyN2EyMDAzNCwgMHhjMDAxN2EzLCAweGFmYTIwMDEwLCAweDNjMDEwMDAxLCAKLTB4YWMyMjZmMDgsIDB4MjExMDAsIDB4MjExODIsIDB4M2MwMzA4MDAsIAotMHg0MzEwMjUsIDB4YWU0MjAwNjAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmMDgsIAotMHgzYzA1MDAwMSwgMHgyNGE1ODIzMCwgMHgzYzA2MDAwMSwgMHgyNGM2ODY1MCwgCi0weGM1MzAyMywgMHgyN2IxMDAzMCwgMHgyMjAzODIxLCAweDI3YjMwMDM0LCAKLTB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHgzYzBlMGZmZiwgMHgzNWNlZmZmZiwgCi0weDNjMDQwMDAxLCAweDI0ODQ1ZjE0LCAweDNjMDUwMDAwLCAweDI0YTU2NDY4LCAKLTB4M2MwNjAwMDAsIDB4MjRjNjY1ODgsIDB4YzUzMDIzLCAweDIyMDM4MjEsIAotMHgyNDBmMDIxLCAweDNjMDEwMDAxLCAweGFjMjI2ZWRjLCAweDRlMTAyNCwgCi0weDIxMDgyLCAweDNjMTUwODAwLCAweDU1MTAyNSwgMHhhZmFlMDA0NCwgCi0weGFmYzIwMGI4LCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWYyMCwgMHgzYzA1MDAwMCwgMHgyNGE1NjU5MCwgMHgzYzA2MDAwMCwgCi0weDI0YzY2ODA4LCAweDhmYWUwMDQ0LCAweGM1MzAyMywgMHgyMjAzODIxLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZlZDAsIDB4NGUxMDI0LCAweDIxMDgyLCAKLTB4NTUxMDI1LCAweGFmYzIwMGU4LCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsIAotMHgzYzA0MDAwMSwgMHgyNDg0NWYzOCwgMHgzYzA1MDAwMCwgMHgyNGE1NjgxMCwgCi0weDNjMDYwMDAwLCAweDI0YzY2OTQwLCAweDhmYWUwMDQ0LCAweGM1MzAyMywgCi0weDIyMDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlYzgsIDB4NGUxMDI0LCAKLTB4MjEwODIsIDB4NTUxMDI1LCAweGFmYzIwMGMwLCAweGMwMDE3YTMsIAotMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWY1MCwgMHgzYzA1MDAwMSwgCi0weDI0YTVmYWQwLCAweDNjMDYwMDAxLCAweDI0YzZmYmE4LCAweDhmYWUwMDQ0LCAKLTB4YzUzMDIzLCAweDIyMDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlZDQsIAotMHg0ZTEwMjQsIDB4MjEwODIsIDB4NTUxMDI1LCAweGFmYzIwMGM4LCAKLTB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWY1YywgCi0weDNjMDUwMDAxLCAweDI0YTVjOTNjLCAweDNjMDYwMDAxLCAweDI0YzZjYTIwLCAKLTB4YzUzMDIzLCAweDIyMDM4MjEsIDB4YWY0MjAxMTAsIDB4YzAwMTdhMywgCi0weGFmYjMwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZjZjLCAweDNjMDUwMDAxLCAKLTB4MjRhNWM5MTAsIDB4M2MwNjAwMDEsIDB4MjRjNmM5MzQsIDB4YzUzMDIzLCAKLTB4MjIwMzgyMSwgMHhhZjQyMDEyNCwgMHhjMDAxN2EzLCAweGFmYjMwMDEwLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDVmN2MsIDB4M2MwNTAwMDEsIDB4MjRhNTVhODAsIAotMHgzYzA2MDAwMSwgMHgyNGM2NWFhYywgMHhjNTMwMjMsIDB4MjIwMzgyMSwgCi0weGFmNDIwMTIwLCAweGFmNDIwMTE0LCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsIAotMHgzYzA0MDAwMSwgMHgyNDg0NWY4OCwgMHgzYzA1MDAwMSwgMHgyNGE1ZjI5OCwgCi0weDNjMDYwMDAxLCAweDI0YzZmNmI0LCAweGM1MzAyMywgMHgyMjAzODIxLCAKLTB4YWY0MjAxMTgsIDB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHg4ZmFlMDA0NCwgCi0weDNjMDEwMDAxLCAweGFjMjI2ZjE4LCAweDRlMTAyNCwgMHgyMTA4MiwgCi0weDU1MTAyNSwgMHhjMDAzZmMzLCAweGFmYzIwMGQwLCAweGMwMDNjNDAsIAotMHgwLCAweGMwMDI3YTgsIDB4MCwgMHhhYzAwMDIyOCwgCi0weGFjMDAwMjJjLCAweDk2ZTIwNDUwLCAweDI0NDJmZmZmLCAweGFmNDIwMDM4LCAKLTB4OTZlMjA0NjAsIDB4YWY0MjAwODAsIDB4MzJjMjQwMDAsIDB4MTQ0MDAwMDMsIAotMHgwLCAweDk2ZTIwNDgwLCAweGFmNDIwMDg0LCAweDk2ZTcwNDkwLCAKLTB4NTBlMDAwMDEsIDB4MjQwNzA4MDAsIDB4MjRlMmZmZmYsIDB4YWY0MjAwODgsIAotMHhhZjQyMDA3YywgMHgyNDAyMDgwMCwgMHgxMGUyMDAwZiwgMHgzMmMyNDAwMCwgCi0weDEwNDAwMDAzLCAweDI0MDIwNDAwLCAweDEwZTIwMDBiLCAweDAsIAotMHgyNDBlMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NWY5OCwgMHhhM2FlMDAzZiwgCi0weDk2ZTYwNDkwLCAweDI0MDUyMTcwLCAweDJjMDM4MjEsIDB4YWZhMDAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmNDMwMTM4LCAweDhmNDQwMTM4LCAKLTB4MjQwMjAwMDEsIDB4YTM0MjA1YzIsIDB4YWY0MzAwOTQsIDB4YWY0NDAwOTgsIAotMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZjQ2MDA4MCwgMHg4ZjQ3MDA4NCwgCi0weDNjMDQwMDAxLCAweDI0ODQ1ZmE0LCAweGMwMDJiM2IsIDB4MjQwNTIyMDAsIAotMHhjMDAyNGE0LCAweDNjMTEwODAwLCAweDNjMTQzM2Q4LCAweDM2OTRjYjU4LCAKLTB4M2MwMjA4MDAsIDB4MzQ0MjAwODAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmYjAsIAotMHgzYzA1MDAwMCwgMHgyNGE1NWQwMCwgMHgzYzA2MDAwMCwgMHgyNGM2NWQxYywgCi0weGM1MzAyMywgMHgyN2E3MDAzMCwgMHhhZjgyMDA2MCwgMHgyNDAyZmZmZiwgCi0weGFmODIwMDY0LCAweDI3YTIwMDM0LCAweGMwMDE3YTMsIDB4YWZhMjAwMTAsIAotMHgzYzAxMDAwMSwgMHhhYzIyNmViOCwgMHgyMTEwMCwgMHgyMTE4MiwgCi0weDUxMTAyNSwgMHhjMDAxOGZjLCAweGFlNDIwMDAwLCAweDhmODIwMjQwLCAKLTB4M2MwMzAwMDEsIDB4NDMxMDI1LCAweGFmODIwMjQwLCAweDNjMDIwMDAwLCAKLTB4MjQ0MjQwMzQsIDB4YWY4MjAyNDQsIDB4YWY4MDAyNDAsIDB4OGY4MjAwNjAsIAotMHg1MTEwMjQsIDB4MTQ0MDAwMDUsIDB4M2MwMzA4MDAsIDB4OGY4MjAwNjAsIAotMHg0MzEwMjQsIDB4MTA0MGZmZmQsIDB4MCwgMHhjMDAzYzRkLCAKLTB4ODgyMSwgMHgzYzAyMDEwMCwgMHhhZmEyMDAyMCwgMHg4ZjUzMDAxOCwgCi0weDI0MDIwMGZmLCAweDU2NjIwMDAxLCAweDI2NzEwMDAxLCAweDhjMDIwMjI4LCAKLTB4MTYyMjAwMGUsIDB4MTMzMGMwLCAweDhmNDIwMzNjLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIDB4OGMwMjAyMjgsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWMyNCwgMHgzYzA1MDAwOSwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgCi0weDhmYTYwMDIwLCAweDEwMDAwMDNmLCAweDM0YTUwMTAwLCAweGQ3MTAyMSwgCi0weDhmYTMwMDIwLCAweDhmYTQwMDI0LCAweGFjNDMwNGMwLCAweGFjNDQwNGM0LCAKLTB4YzAxODIxLCAweDhmNDQwMTc4LCAweDhmNDUwMTdjLCAweDEwMjEsIAotMHgyNDA3MDAwNCwgMHhhZmE3MDAxMCwgMHhhZmIxMDAxNCwgMHg4ZjQ4MDAwYywgCi0weDI0YzYwNGMwLCAweDJlNjMwMjEsIDB4YWZhODAwMTgsIDB4OGY0ODAxMGMsIAotMHgyNDA3MDAwOCwgMHhhMzI4MjEsIDB4YTM0ODJiLCAweDgyMjAyMSwgCi0weDEwMGY4MDksIDB4ODkyMDIxLCAweDE0NDAwMDBiLCAweDI0MDcwMDA4LCAKLTB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWMyYywgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgMHg4ZmE2MDAyMCwgCi0weDEwMDAwMDFjLCAweDM0YTUwMjAwLCAweDhmNDQwMTYwLCAweDhmNDUwMTY0LCAKLTB4OGY0MzAwMGMsIDB4YWY1MTAwMTgsIDB4OGY4NjAxMjAsIDB4MjQwMjAwMTAsIAotMHhhZmEyMDAxMCwgMHhhZmIxMDAxNCwgMHhhZmEzMDAxOCwgMHg4ZjQyMDEwYywgCi0weDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwMDAxMCwgMHgwLCAKLTB4OGY0MjAzNDAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNDAsIDB4OGY0MjAzNDAsIAotMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ1YzM0LCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhmYTYwMDIwLCAKLTB4MzRhNTAzMDAsIDB4YzAwMmIzYiwgMHgyNjAzODIxLCAweDhmNDIwMmU0LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyZTQsIDB4OGY0MjAyZTQsIDB4OTNhMjAwM2YsIAotMHgxMDQwMDA2OSwgMHgzYzAyMDcwMCwgMHgzNDQyMzAwMCwgMHhhZmEyMDAyOCwgCi0weDhmNTMwMDE4LCAweDI0MDIwMGZmLCAweDEyNjIwMDAyLCAweDg4MjEsIAotMHgyNjcxMDAwMSwgMHg4YzAyMDIyOCwgMHgxNjIyMDAwZSwgMHgxMzMwYzAsIAotMHg4ZjQyMDMzYywgMHgyNDQyMDAwMSwgMHhhZjQyMDMzYywgMHg4ZjQyMDMzYywgCi0weDhjMDIwMjI4LCAweDNjMDQwMDAxLCAweDI0ODQ1YzI0LCAweDNjMDUwMDA5LCAKLTB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsIDB4OGZhNjAwMjgsIDB4MTAwMDAwM2YsIAotMHgzNGE1MDEwMCwgMHhkNzEwMjEsIDB4OGZhMzAwMjgsIDB4OGZhNDAwMmMsIAotMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgMHhjMDE4MjEsIDB4OGY0NDAxNzgsIAotMHg4ZjQ1MDE3YywgMHgxMDIxLCAweDI0MDcwMDA0LCAweGFmYTcwMDEwLCAKLTB4YWZiMTAwMTQsIDB4OGY0ODAwMGMsIDB4MjRjNjA0YzAsIDB4MmU2MzAyMSwgCi0weGFmYTgwMDE4LCAweDhmNDgwMTBjLCAweDI0MDcwMDA4LCAweGEzMjgyMSwgCi0weGEzNDgyYiwgMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsIAotMHgxNDQwMDAwYiwgMHgyNDA3MDAwOCwgMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwgCi0weDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ1YzJjLCAweDNjMDUwMDA5LCAKLTB4YWZhMjAwMTQsIDB4OGZhNjAwMjgsIDB4MTAwMDAwMWMsIDB4MzRhNTAyMDAsIAotMHg4ZjQ0MDE2MCwgMHg4ZjQ1MDE2NCwgMHg4ZjQzMDAwYywgMHhhZjUxMDAxOCwgCi0weDhmODYwMTIwLCAweDI0MDIwMDEwLCAweGFmYTIwMDEwLCAweGFmYjEwMDE0LCAKLTB4YWZhMzAwMTgsIDB4OGY0MjAxMGMsIDB4NDBmODA5LCAweDI0YzYwMDFjLCAKLTB4MTQ0MDAwMTAsIDB4MCwgMHg4ZjQyMDM0MCwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMzQwLCAweDhmNDIwMzQwLCAweDhmODIwMTIwLCAweGFmYTIwMDEwLCAKLTB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDVjMzQsIDB4M2MwNTAwMDksIAotMHhhZmEyMDAxNCwgMHg4ZmE2MDAyOCwgMHgzNGE1MDMwMCwgMHhjMDAyYjNiLCAKLTB4MjYwMzgyMSwgMHg4ZjQyMDJmMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDJmMCwgCi0weDhmNDIwMmYwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZmMwLCAweGFmYTAwMDEwLCAKLTB4YWZhMDAwMTQsIDB4OGZhNjAwMjgsIDB4MjQwNTIzMDAsIDB4YzAwMmIzYiwgCi0weDM4MjEsIDB4MTAwMDAwMDQsIDB4MCwgMHg4YzAyMDI2NCwgCi0weDEwNDAwMDA1LCAweDAsIDB4OGY4MjAwYTAsIDB4MzA0MjAwMDQsIAotMHgxNDQwZmZmYSwgMHgwLCAweDhmODIwMDQ0LCAweDM0NDIwMDA0LCAKLTB4YWY4MjAwNDQsIDB4OGY0MjAzMDgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIAotMHg4ZjQyMDMwOCwgMHg4ZjgyMDBkOCwgMHg4ZjgzMDBkNCwgMHg0MzEwMjMsIAotMHgyNDQyZmY4MCwgMHhhZjQyMDA5MCwgMHg4ZjQyMDA5MCwgMHgyODQyZmY4MSwgCi0weDEwNDAwMDA2LCAweDI0MDIwMDAxLCAweDhmNDIwMDkwLCAweDhmNDMwMTQ0LCAKLTB4NDMxMDIxLCAweGFmNDIwMDkwLCAweDI0MDIwMDAxLCAweGFmNDIwMDhjLCAKLTB4MzJjMjAwMDgsIDB4MTA0MDAwMDYsIDB4MCwgMHg4ZjgyMDIxNCwgCi0weDNjMDM4MTAwLCAweDMwNDJmZmZmLCAweDQzMTAyNSwgMHhhZjgyMDIxNCwgCi0weDNjMDMwMDAxLCAweDhjNjM2ZDk0LCAweDMwNjIwMDAyLCAweDEwNDAwMDA5LCAKLTB4MzA2MjAwMDEsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmY2MsIDB4M2MwNTAwMDAsIAotMHgyNGE1NmQ1MCwgMHgzYzA2MDAwMCwgMHgyNGM2NzFjOCwgMHgxMDAwMDAxMiwgCi0weGM1MzAyMywgMHgxMDQwMDAwOSwgMHgwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDVmZGMsIDB4M2MwNTAwMDAsIDB4MjRhNTcxZDAsIDB4M2MwNjAwMDAsIAotMHgyNGM2NzY3OCwgMHgxMDAwMDAwOCwgMHhjNTMwMjMsIDB4M2MwNDAwMDEsIAotMHgyNDg0NWZlYywgMHgzYzA1MDAwMCwgMHgyNGE1Njk0OCwgMHgzYzA2MDAwMCwgCi0weDI0YzY2ZDQ4LCAweGM1MzAyMywgMHgyN2E3MDAzMCwgMHgyN2EyMDAzNCwgCi0weGMwMDE3YTMsIDB4YWZhMjAwMTAsIDB4M2MwMTAwMDEsIDB4YWMyMjZlY2MsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmVjYywgMHgzYzAzMDgwMCwgMHgyMTEwMCwgCi0weDIxMTgyLCAweDQzMTAyNSwgMHhhZTQyMDA0MCwgMHg4ZjgyMDBhMCwgCi0weGFmYTIwMDEwLCAweDhmODIwMGIwLCAweGFmYTIwMDE0LCAweDhmODYwMDVjLCAKLTB4OGY4NzAxMWMsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmZmMsIDB4M2MwMTAwMDEsIAotMHhhYzM2NmVhNCwgMHgzYzAxMDAwMSwgMHhhYzIwNmU5NCwgMHgzYzAxMDAwMSwgCi0weGFjM2M2ZThjLCAweDNjMDEwMDAxLCAweGFjM2I2ZWJjLCAweDNjMDEwMDAxLCAKLTB4YWMzNzZlYzAsIDB4M2MwMTAwMDEsIDB4YWMzYTZlYTAsIDB4YzAwMmIzYiwgCi0weDI0MDUyNDAwLCAweDhmODIwMjAwLCAweGFmYTIwMDEwLCAweDhmODIwMjIwLCAKLTB4YWZhMjAwMTQsIDB4OGY4NjAwNDQsIDB4OGY4NzAwNTAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjAwOCwgMHhjMDAyYjNiLCAweDI0MDUyNTAwLCAweDhmODMwMDYwLCAKLTB4NzQxMDBiLCAweDI0MjAwMGEsIDB4MjAwZjgyMSwgMHgwLCAKLTB4ZCwgMHg4ZmJmMDA2MCwgMHg4ZmJlMDA1YywgMHg4ZmI1MDA1OCwgCi0weDhmYjMwMDU0LCAweDhmYjIwMDUwLCAweDhmYjEwMDRjLCAweDhmYjAwMDQ4LCAKLTB4M2UwMDAwOCwgMHgyN2JkMDA2OCwgMHgyN2JkZmZlMCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2MDE0LCAweDI0MDUyNjAwLCAweDMwMjEsIDB4MzgyMSwgCi0weGFmYmYwMDE4LCAweGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsIAotMHg4ZmJmMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDIwLCAweDNlMDAwMDgsIAotMHgwLCAweDNlMDAwMDgsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDNlMDAwMDgsIDB4MCwgMHgzZTAwMDA4LCAweDAsIAotMHgyN2JkZmRlMCwgMHgyN2E1MDAxOCwgMHgzYzA0ZGVhZCwgMHgzNDg0YmVlZiwgCi0weGFmYmYwMjE4LCAweDhmODIwMTUwLCAweDNjMDMwMDFmLCAweDM0NjNmZmZmLCAKLTB4YWZhNDAwMTgsIDB4YTIyODIzLCAweGEzMjgyNCwgMHg4Y2EyMDAwMCwgCi0weDEwNDQwMDBhLCAweDAsIDB4YWZhNTAwMTAsIDB4OGNhMjAwMDAsIAotMHhhZmEyMDAxNCwgMHg4Zjg2MDE1MCwgMHg4Zjg3MDI1MCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2MDFjLCAweGMwMDJiM2IsIDB4MjQwNTI3MDAsIDB4OGZiZjAyMTgsIAotMHgzZTAwMDA4LCAweDI3YmQwMjIwLCAweDI3YmRmZmUwLCAweDNjMDZhYmJhLCAKLTB4MzRjNmJhYmUsIDB4YWZiMDAwMTgsIDB4M2MxMDAwMDQsIDB4M2MwNzAwN2YsIAotMHgzNGU3ZmZmZiwgMHhhZmJmMDAxYywgMHgxMDI4NDAsIDB4OGUwNDAwMDAsIAotMHg4Y2EzMDAwMCwgMHhhY2EwMDAwMCwgMHhhZTA2MDAwMCwgMHg4Y2EyMDAwMCwgCi0weGFjYTMwMDAwLCAweDEwNDYwMDA1LCAweGFlMDQwMDAwLCAweGEwODAyMSwgCi0weGYwMTAyYiwgMHgxMDQwZmZmNSwgMHgxMDI4NDAsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjAyOCwgMHgyNDA1MjgwMCwgMHgyMDAzMDIxLCAweDM4MjEsIAotMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDIwMDEwMjEsIAotMHg4ZmJmMDAxYywgMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDIwLCAKLTB4OGMwMjAyMjQsIDB4MzA0NzAwM2YsIDB4MTBlMDAwMTAsIDB4ODAzMDIxLCAKLTB4MjgyMSwgMHgyNDAzMDAyMCwgMHhlMzEwMjQsIDB4MTA0MDAwMDIsIAotMHg2MzA0MiwgMHhhNjI4MjEsIDB4MzE4NDIsIDB4MTQ2MGZmZmIsIAotMHhlMzEwMjQsIDB4MjQwMmYwMDAsIDB4YTIyODI0LCAweDM0MDJmZmZmLCAKLTB4NDUxMDJiLCAweDE0NDAwMDAzLCAweDNjMDIwMDAxLCAweDEwMDAwMDA4LCAKLTB4M2MwMjAwMDEsIDB4MzQ0MmZmZmYsIDB4ODUxODIzLCAweDQzMTAyYiwgCi0weDE0NDAwMDAzLCAweGEwMTAyMSwgMHgzYzAyZmZmZSwgMHg4MjEwMjEsIAotMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDAsIDB4YWZiNTAwMjgsIAotMHg4ZmI1MDA0MCwgMHhhZmIyMDAyMCwgMHhhMDkwMjEsIDB4YWZiMTAwMWMsIAotMHgyNGM2MDAwMywgMHhhZmJmMDAyYywgMHhhZmIzMDAyNCwgMHhhZmIwMDAxOCwgCi0weDhlYTIwMDAwLCAweDI0MDNmZmZjLCAweGMzODAyNCwgMHg1MDEwMmIsIAotMHgxNDQwMDAxYiwgMHhlMDg4MjEsIDB4OGUzMzAwMDAsIDB4YWZiMDAwMTAsIAotMHg4ZWEyMDAwMCwgMHhhZmEyMDAxNCwgMHg4ZTI3MDAwMCwgMHgyNDA1MzAwMCwgCi0weGMwMDJiM2IsIDB4MjQwMzAyMSwgMHg4ZTIzMDAwMCwgMHg3MDIwMjEsIAotMHg2NDEwMmIsIDB4MTA0MDAwMDcsIDB4MjQwMjgyMSwgMHg4Y2EyMDAwMCwgCi0weGFjNjIwMDAwLCAweDI0NjMwMDA0LCAweDY0MTAyYiwgMHgxNDQwZmZmYiwgCi0weDI0YTUwMDA0LCAweDhlYTIwMDAwLCAweDUwMTAyMywgMHhhZWEyMDAwMCwgCi0weDhlMjIwMDAwLCAweDUwMTAyMSwgMHgxMDAwMDAwYiwgMHhhZTIyMDAwMCwgCi0weDI0MDIwMDJkLCAweGEwODIwMDAwLCAweGFmYjAwMDEwLCAweDhlYTIwMDAwLCAKLTB4MjQwOTgyMSwgMHhhZmEyMDAxNCwgMHg4ZTI3MDAwMCwgMHgyNDA1MzEwMCwgCi0weGMwMDJiM2IsIDB4MjYwMzAyMSwgMHgyNjAxMDIxLCAweDhmYmYwMDJjLCAKLTB4OGZiNTAwMjgsIDB4OGZiMzAwMjQsIDB4OGZiMjAwMjAsIDB4OGZiMTAwMWMsIAotMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDMwLCAweDI3YmRmZmU4LCAKLTB4M2MxY2MwMDAsIDB4M2MwNWZmZmUsIDB4M2MwMzAwMDEsIDB4OGM2MzZlODQsIAotMHgzYzA0MDAwMSwgMHg4Yzg0NmU5MCwgMHgzNGE1YmYwOCwgMHgyNDAyMWZmYywgCi0weDNjMDEwMDAxLCAweGFjMjI2Y2QwLCAweDNjMDIwMGMwLCAweDNjMDEwMDAxLCAKLTB4YWMyMjZjZDQsIDB4M2MwMjAwMjAsIDB4YWZiZjAwMTAsIDB4M2MwMTAwYzAsIAotMHhhYzIwMWZmYywgMHg0MzEwMjMsIDB4NDQxMDIzLCAweDI0NWJiMDAwLCAKLTB4MzY1YjgyMSwgMHgzYzFkMDAwMSwgMHg4ZmJkNmNjYywgMHgzYTBmMDIxLCAKLTB4M2MwNDAwYzAsIDB4MzQ4NDAyMDAsIDB4M2MxYTAwYzAsIDB4M2MwMzAwYzAsIAotMHgzNDYzMDdjOCwgMHgyNDAyMWRmYywgMHgzYzAxMDAwMSwgMHhhYzIyNmNkMCwgCi0weDI0MDIxODM0LCAweDNjMDEwMDAxLCAweGFjMjQ2Y2Q0LCAweDNjMDEwMDAxLCAKLTB4YWMyMjZjZDAsIDB4M2MwMTAwMDEsIDB4YWMyMzZjZDQsIDB4YzAwMTgwZCwgCi0weDM3NWEwMjAwLCAweDhmYmYwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMTgsIAotMHgyN2JkZmZjOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjAzNCwgMHgyNDA1MzIwMCwgCi0weDNjMDIwMDAxLCAweDhjNDI2Y2QwLCAweDNjMDMwMDAxLCAweDhjNjM2Y2Q0LCAKLTB4MzAyMSwgMHgzNjAzODIxLCAweGFmYmYwMDMwLCAweGFmYjMwMDJjLCAKLTB4YWZiMjAwMjgsIDB4YWZiMTAwMjQsIDB4YWZiMDAwMjAsIDB4YWZhMjAwMWMsIAotMHhhZmEzMDAxOCwgMHhhZmI3MDAxMCwgMHhjMDAyYjNiLCAweGFmYmEwMDE0LCAKLTB4YzAwMTkxNiwgMHgwLCAweDhmODIwMjQwLCAweDM0NDIwMDA0LCAKLTB4YWY4MjAyNDAsIDB4MjQwMjAwMDEsIDB4YWY0MjAwMDAsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OTA0MjQwZjQsIDB4MTA0MDAwOTIsIDB4MjQwM2ZmZmMsIAotMHgzYzEwMDAwMSwgMHgyNjEwYWM3MywgMHgzYzEyMDAwMSwgMHgyNjUyYTg0YywgCi0weDIxMjEwMjMsIDB4NDM4MDI0LCAweDhmYTMwMDFjLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYwNDAsIDB4NzAxMDJiLCAweDE0NDAwMDFhLCAweDI3YjMwMDE4LCAKLTB4OGZiMTAwMTgsIDB4MjQwNTMwMDAsIDB4MjQwMzAyMSwgMHhhZmIwMDAxMCwgCi0weGFmYTMwMDE0LCAweGMwMDJiM2IsIDB4MjIwMzgyMSwgMHg4ZmEzMDAxOCwgCi0weDcwMjAyMSwgMHg2NDEwMmIsIDB4MTA0MDAwMDcsIDB4MjQwMzAyMSwgCi0weDhjYzIwMDAwLCAweGFjNjIwMDAwLCAweDI0NjMwMDA0LCAweDY0MTAyYiwgCi0weDE0NDBmZmZiLCAweDI0YzYwMDA0LCAweDhmYTIwMDFjLCAweDUwMTAyMywgCi0weGFmYTIwMDFjLCAweDhlNjIwMDAwLCAweDUwMTAyMSwgMHgxMDAwMDAwYSwgCi0weGFlNjIwMDAwLCAweDI0MDg4MjEsIDB4MjQwNTMxMDAsIDB4YWZiMDAwMTAsIAotMHhhZmEzMDAxNCwgMHg4ZmE3MDAxOCwgMHgyMjAzMDIxLCAweDI0MDIwMDJkLCAKLTB4YzAwMmIzYiwgMHhhMDgyMDAwMCwgMHgyNDA3MDAyMCwgMHg4ZmEzMDAxYywgCi0weDNjMDQwMDAxLCAweDI0ODQ2MDVjLCAweDI0MTIwMDIwLCAweDNjMDEwMDAxLCAKLTB4YWMzMTZlYjAsIDB4MmM2MjAwMjAsIDB4MTQ0MDAwMWQsIDB4MjdiMTAwMTgsIAotMHg4ZmIwMDAxOCwgMHgyNDA1MzAwMCwgMHgzYzA2MDAwMSwgMHgyNGM2NmY1MCwgCi0weGFmYTcwMDEwLCAweGFmYTMwMDE0LCAweGMwMDJiM2IsIDB4MjAwMzgyMSwgCi0weDhmYTMwMDE4LCAweDNjMDQwMDAxLCAweDI0ODQ2ZjUwLCAweDI0NjUwMDIwLCAKLTB4NjUxMDJiLCAweDEwNDAwMDA3LCAweDAsIDB4OGM4MjAwMDAsIAotMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgMHg2NTEwMmIsIDB4MTQ0MGZmZmIsIAotMHgyNDg0MDAwNCwgMHg4ZmEyMDAxYywgMHg1MjEwMjMsIDB4YWZhMjAwMWMsIAotMHg4ZTIyMDAwMCwgMHg1MjEwMjEsIDB4MTAwMDAwMGIsIDB4YWUyMjAwMDAsIAotMHgzYzEwMDAwMSwgMHgyNjEwNmY1MCwgMHgyNDA1MzEwMCwgMHhhZmE3MDAxMCwgCi0weGFmYTMwMDE0LCAweDhmYTcwMDE4LCAweDIwMDMwMjEsIDB4MjQwMjAwMmQsIAotMHhjMDAyYjNiLCAweGEwODIwMDAwLCAweDI0MDcwMDIwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYwNzAsIDB4OGZhMzAwMWMsIDB4MjQxMjAwMjAsIDB4M2MwMTAwMDEsIAotMHhhYzMwNmVlNCwgMHgyYzYyMDAyMCwgMHgxNDQwMDAxZCwgMHgyN2IxMDAxOCwgCi0weDhmYjAwMDE4LCAweDI0MDUzMDAwLCAweDNjMDYwMDAxLCAweDI0YzY2ZjcwLCAKLTB4YWZhNzAwMTAsIDB4YWZhMzAwMTQsIDB4YzAwMmIzYiwgMHgyMDAzODIxLCAKLTB4OGZhMzAwMTgsIDB4M2MwNDAwMDEsIDB4MjQ4NDZmNzAsIDB4MjQ2NTAwMjAsIAotMHg2NTEwMmIsIDB4MTA0MDAwMDcsIDB4MCwgMHg4YzgyMDAwMCwgCi0weGFjNjIwMDAwLCAweDI0NjMwMDA0LCAweDY1MTAyYiwgMHgxNDQwZmZmYiwgCi0weDI0ODQwMDA0LCAweDhmYTIwMDFjLCAweDUyMTAyMywgMHhhZmEyMDAxYywgCi0weDhlMjIwMDAwLCAweDUyMTAyMSwgMHgxMDAwMDAwYiwgMHhhZTIyMDAwMCwgCi0weDNjMTAwMDAxLCAweDI2MTA2ZjcwLCAweDI0MDUzMTAwLCAweGFmYTcwMDEwLCAKLTB4YWZhMzAwMTQsIDB4OGZhNzAwMTgsIDB4MjAwMzAyMSwgMHgyNDAyMDAyZCwgCi0weGMwMDJiM2IsIDB4YTA4MjAwMDAsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMzEsIAotMHhhYzMwNmVlMCwgMHgzYzEwMDAwMSwgMHgyNjEwODIxZiwgMHgzYzEyMDAwMSwgCi0weDI2NTI4MDljLCAweDIxMjEwMjMsIDB4NDM4MDI0LCAweDhmYTMwMDFjLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDYwODQsIDB4NzAxMDJiLCAweDE0NDAwMDFhLCAKLTB4MjdiMzAwMTgsIDB4OGZiMTAwMTgsIDB4MjQwNTMwMDAsIDB4MjQwMzAyMSwgCi0weGFmYjAwMDEwLCAweGFmYTMwMDE0LCAweGMwMDJiM2IsIDB4MjIwMzgyMSwgCi0weDhmYTMwMDE4LCAweDcwMjAyMSwgMHg2NDEwMmIsIDB4MTA0MDAwMDcsIAotMHgyNDAzMDIxLCAweDhjYzIwMDAwLCAweGFjNjIwMDAwLCAweDI0NjMwMDA0LCAKLTB4NjQxMDJiLCAweDE0NDBmZmZiLCAweDI0YzYwMDA0LCAweDhmYTIwMDFjLCAKLTB4NTAxMDIzLCAweGFmYTIwMDFjLCAweDhlNjIwMDAwLCAweDUwMTAyMSwgCi0weDEwMDAwMDBhLCAweGFlNjIwMDAwLCAweDI0MDg4MjEsIDB4MjQwNTMxMDAsIAotMHhhZmIwMDAxMCwgMHhhZmEzMDAxNCwgMHg4ZmE3MDAxOCwgMHgyMjAzMDIxLCAKLTB4MjQwMjAwMmQsIDB4YzAwMmIzYiwgMHhhMDgyMDAwMCwgMHgzYzAxMDAwMSwgCi0weGFjMzE2ZWIwLCAweDNjMDMwMDAxLCAweDhjNjM2ZWIwLCAweDI0MDIwNDAwLCAKLTB4NjBmODA5LCAweGFmODIwMDcwLCAweDhmYmYwMDMwLCAweDhmYjMwMDJjLCAKLTB4OGZiMjAwMjgsIDB4OGZiMTAwMjQsIDB4OGZiMDAwMjAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDM4LCAweDAsIDB4MCwgMHg4ZjgyMDA0MCwgCi0weDNjMDNmMDAwLCAweDQzMTAyNCwgMHgzYzAzNjAwMCwgMHgxNDQzMDAwNiwgCi0weDAsIDB4OGY4MjAwNTAsIDB4MjQwM2ZmODAsIDB4NDMxMDI0LCAKLTB4MzQ0MjAwNTUsIDB4YWY4MjAwNTAsIDB4OGY4MjAwNTQsIDB4MjQ0MjAzZTgsIAotMHhhZjgyMDA1OCwgMHgyNDAyMDFmNCwgMHhhZjQyMDBlMCwgMHgyNDAyMDAwNCwgCi0weGFmNDIwMGU4LCAweDI0MDIwMDAyLCAweGFmNDAwMWIwLCAweGFmNDAwMGU0LCAKLTB4YWY0MjAwZGMsIDB4YWY0MDAwZDgsIDB4YWY0MDAwZDQsIDB4M2UwMDAwOCwgCi0weGFmNDAwMGQwLCAweDhmODIwMDU0LCAweDI0NDIwMDA1LCAweDNlMDAwMDgsIAotMHhhZjgyMDA3OCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxMCwgMHg4ZjgyMDA1NCwgCi0weDI0NDIwM2U4LCAweGFmODIwMDU4LCAweDNjMDIwODAwLCAweDJjMjEwMjQsIAotMHgxMDQwMDAwNCwgMHgzYzAyZjdmZiwgMHgzNDQyZmZmZiwgMHgyYzJiMDI0LCAKLTB4MzY5NDAwNDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYTgsIDB4MTA0MDAwMTcsIAotMHgzYzAyMDIwMCwgMHgzYzAzMDAwMSwgMHg4YzYzNmYxYywgMHgxMDYwMDAxNiwgCi0weDI4MmEwMjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4MTQ0MDAwMTIsIAotMHgzYzAyMDIwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmQ5NCwgMHgzMDQyMDAwMywgCi0weDE0NDAwMDBkLCAweDNjMDIwMjAwLCAweDhmODMwMjI0LCAweDNjMDIwMDAyLCAKLTB4OGM0MjhmZWMsIDB4MTA2MjAwMDgsIDB4M2MwMjAyMDAsIDB4YzAwM2RhZiwgCi0weDAsIDB4MTAwMDAwMDQsIDB4M2MwMjAyMDAsIDB4YzAwNDE5NiwgCi0weDAsIDB4M2MwMjAyMDAsIDB4MmMyMTAyNCwgMHgxMDQwMDAwMywgCi0weDAsIDB4YzAwMWY0YiwgMHgwLCAweDhmNDIwMGQ4LCAKLTB4OGY0MzAwZGMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAwZDgsIDB4NDMxMDJiLCAKLTB4MTQ0MDAwMDMsIDB4MCwgMHhhZjQwMDBkOCwgMHgzNjk0MDA4MCwgCi0weDhjMDMwMjM4LCAweDEwNjAwMDBjLCAweDAsIDB4OGY0MjAxYjAsIAotMHgyNDQyMDNlOCwgMHhhZjQyMDFiMCwgMHg0MzEwMmIsIDB4MTQ0MDAwMDYsIAotMHgwLCAweDkzNDIwNWM1LCAweDE0NDAwMDAzLCAweDAsIAotMHhjMDAxZGEwLCAweDAsIDB4OGZiZjAwMTAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDE4LCAweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZkOCwgCi0weGFmYmYwMDIwLCAweDhmNDMwMDJjLCAweDhmNDIwMDM4LCAweDEwNjIwMDU5LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjQwZjAsIAotMHgxMDQwMDAyNiwgMHgyNDA3MDAwOCwgMHg4ZjQ0MDE3MCwgMHg4ZjQ1MDE3NCwgCi0weDhmNDgwMDBjLCAweDhmODYwMTIwLCAweDI0MDIwMDIwLCAweGFmYTIwMDEwLCAKLTB4YWZhMzAwMTQsIDB4YWZhODAwMTgsIDB4OGY0MjAxMGMsIDB4NDBmODA5LCAKLTB4MjRjNjAwMWMsIDB4MTQ0MDAwMTEsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIAotMHgzNzA4MjEsIDB4YTAyMjQwZjAsIDB4OGY4MjAxMjQsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDEyOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjEyOCwgMHhhZmEyMDAxNCwgCi0weDhmNDYwMDJjLCAweDhmODcwMTIwLCAweDNjMDUwMDA5LCAweGMwMDJiM2IsIAotMHgzNGE1MDkwMCwgMHgxMDAwMDA1YywgMHgwLCAweDhmNDIwMzAwLCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzMDAsIDB4OGY0MjAzMDAsIDB4OGY0MjAwMmMsIAotMHhhMzQwMDVjMSwgMHgxMDAwMDAyNywgMHhhZjQyMDAzOCwgMHg4ZjQ0MDE3MCwgCi0weDhmNDUwMTc0LCAweDhmNDMwMDJjLCAweDhmNDgwMDBjLCAweDhmODYwMTIwLCAKLTB4MjQwMjAwODAsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIDB4YWZhODAwMTgsIAotMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsIDB4MTQ0MDAwMTEsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMjQwZjEsIAotMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyOCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2MTM0LCAweGFmYTIwMDE0LCAweDhmNDYwMDJjLCAweDhmODcwMTIwLCAKLTB4M2MwNTAwMDksIDB4YzAwMmIzYiwgMHgzNGE1MTEwMCwgMHgxMDAwMDAzNiwgCi0weDAsIDB4OGY0MjAzMDAsIDB4OGY0MzAwMmMsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDMwMCwgMHg4ZjQyMDMwMCwgMHgyNDAyMDAwMSwgMHhhMzQyMDVjMSwgCi0weGFmNDMwMDM4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMSwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMCwgMHgxMDAwMDAyNiwgCi0weGFmNDAwMDM0LCAweDkzNDIwNWMxLCAweDEwNDAwMDFkLCAweDAsIAotMHhhMzQwMDVjMSwgMHg4ZjgyMDA0MCwgMHgzMDQyMDAwMSwgMHgxNDQwMDAwOCwgCi0weDIwMjEsIDB4OGMwMzAxMDQsIDB4MjQwMjAwMDEsIDB4NTA2MjAwMDUsIAotMHgyNDA0MDAwMSwgMHg4YzAyMDI2NCwgMHgxMDQwMDAwMywgMHg4MDEwMjEsIAotMHgyNDA0MDAwMSwgMHg4MDEwMjEsIDB4MTA0MDAwMDYsIDB4MCwgCi0weDhmNDIwMzBjLCAweDI0NDIwMDAxLCAweGFmNDIwMzBjLCAweDEwMDAwMDA4LCAKLTB4OGY0MjAzMGMsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMDQsIDB4YWY4MjAwNDQsIAotMHg4ZjQyMDMwOCwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMCwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhMDIwNDBmMSwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwNywgCi0weDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsIAotMHgwLCAweDEwMDAwMDA1LCAweDAsIDB4YWY4MDAwNDgsIAotMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAweDhmODIwMDYwLCAKLTB4M2MwM2ZmN2YsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweGFmODIwMDYwLCAKLTB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsIDB4MCwgMHgxMDAwMDAwMiwgCi0weGFmODAwMDRjLCAweGFmODAwMDQ4LCAweDhmYmYwMDIwLCAweDNlMDAwMDgsIAotMHgyN2JkMDAyOCwgMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsIAotMHhhZmJmMDAyMCwgMHg4ZjQzMDA0NCwgMHg4ZjQyMDA3YywgMHgxMDYyMDAyOSwgCi0weDI0MDcwMDA4LCAweDhmNDQwMTY4LCAweDhmNDUwMTZjLCAweDhmNDgwMDBjLCAKLTB4OGY4NjAxMjAsIDB4MjQwMjAwNDAsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIAotMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsIAotMHgxNDQwMDAxMSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhMDIyNDBmMiwgMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyOCwgCi0weDNjMDQwMDAxLCAweDI0ODQ2MTNjLCAweGFmYTIwMDE0LCAweDhmNDYwMDQ0LCAKLTB4OGY4NzAxMjAsIDB4M2MwNTAwMDksIDB4YzAwMmIzYiwgMHgzNGE1MTMwMCwgCi0weDEwMDAwMDBmLCAweDAsIDB4OGY0MjAzMDQsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDMwNCwgMHg4ZjQyMDMwNCwgMHg4ZjQyMDA0NCwgMHhhZjQyMDA3YywgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMiwgMHgxMDAwMDAwNCwgCi0weGFmNDAwMDc4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMiwgCi0weDhmNDIwMDAwLCAweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIAotMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAKLTB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgCi0weDAsIDB4OGY4MjAwNjAsIDB4M2MwM2ZlZmYsIDB4MzQ2M2ZmZmYsIAotMHg0MzEwMjQsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsIAotMHgwLCAweDEwMDAwMDAyLCAweGFmODAwMDRjLCAweGFmODAwMDQ4LCAKLTB4OGZiZjAwMjAsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzZTAwMDA4LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhOCwgMHgyN2JkZmZhOCwgCi0weGFmYmYwMDUwLCAweGFmYmUwMDRjLCAweGFmYjUwMDQ4LCAweGFmYjMwMDQ0LCAKLTB4YWZiMjAwNDAsIDB4YWZiMTAwM2MsIDB4YWZiMDAwMzgsIDB4MTA0MDAwZDUsIAotMHg4ZjkwMDA0NCwgMHg4ZjQyMDBkMCwgMHgyNDQzMDAwMSwgMHgyODQyMDAwYiwgCi0weDE0NDAwMGU0LCAweGFmNDMwMGQwLCAweDhmNDIwMDA0LCAweDMwNDIwMDAyLCAKLTB4MTQ0MDAwOWMsIDB4YWY0MDAwZDAsIDB4OGY0MjAwMDQsIDB4M2MwMzAwMDEsIAotMHg4YzYzNmQ5OCwgMHgzNDQyMDAwMiwgMHhhZjQyMDAwNCwgMHgyNDAyMDAwMSwgCi0weDE0NjIwMDAzLCAweDNjMDIwNjAwLCAweDEwMDAwMDAyLCAweDM0NDIzMDAwLCAKLTB4MzQ0MjEwMDAsIDB4YWZhMjAwMjAsIDB4OGY0YTAwMTgsIDB4YWZhYTAwMzQsIAotMHgyN2FhMDAyMCwgMHhhZmFhMDAyYywgMHg4ZmFhMDAzNCwgMHgyNDAyMDBmZiwgCi0weDExNDIwMDAyLCAweDE4MjEsIDB4MjU0MzAwMDEsIDB4OGMwMjAyMjgsIAotMHg2MDk4MjEsIDB4MTY2MjAwMGUsIDB4M2MwNTAwMDksIDB4OGY0MjAzM2MsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDMzYywgMHg4ZjQyMDMzYywgMHg4YzAyMDIyOCwgCi0weDhmYTcwMDM0LCAweDNjMDQwMDAxLCAweDI0ODQ2MTBjLCAweGFmYTAwMDE0LCAKLTB4YWZhMjAwMTAsIDB4OGZhNjAwMjAsIDB4MTAwMDAwNzAsIDB4MzRhNTA1MDAsIAotMHg4ZmFhMDAzNCwgMHhhMzhjMCwgMHhmNzEwMjEsIDB4OGZhMzAwMjAsIAotMHg4ZmE0MDAyNCwgMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDI0NzEwM2U4LCAweDIyMjEwMjMsIDB4MmM0MjAzZTksIAotMHgxMDQwMDAxYiwgMHhhODIxLCAweGUwOTAyMSwgMHgyNjVlMDRjMCwgCi0weDhmNDQwMTc4LCAweDhmNDUwMTdjLCAweDI0MDE4MjEsIDB4MjQwYTAwMDQsIAotMHhhZmFhMDAxMCwgMHhhZmIzMDAxNCwgMHg4ZjQ4MDAwYywgMHgxMDIxLCAKLTB4MmZlMzAyMSwgMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgyNDA3MDAwOCwgCi0weGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLCAweDEwMGY4MDksIAotMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIDB4MjQxNTAwMDEsIDB4OGY4MjAwNTQsIAotMHgyMjIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmU5LCAweDAsIAotMHgzMmEyMDBmZiwgMHg1NDQwMDAxOCwgMHhhZjUzMDAxOCwgMHg4ZjQyMDM3OCwgCi0weDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LCAweDhmODIwMTIwLCAKLTB4OGZhYTAwMmMsIDB4OGZhNzAwMzQsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjExOCwgMHhhZmEyMDAxNCwgMHg4ZDQ2MDAwMCwgCi0weDNjMDUwMDA5LCAweDEwMDAwMDM1LCAweDM0YTUwNjAwLCAweDhmNDIwMzA4LCAKLTB4MjQxNTAwMDEsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsIAotMHgxMDAwMDAxZSwgMHgzMmEyMDBmZiwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgCi0weDI0NzEwM2U4LCAweDIyMjEwMjMsIDB4MmM0MjAzZTksIDB4MTA0MDAwMTYsIAotMHhhODIxLCAweDNjMWUwMDIwLCAweDI0MTIwMDEwLCAweDhmNDIwMDBjLCAKLTB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY4NjAxMjAsIDB4YWZiMjAwMTAsIAotMHhhZmIzMDAxNCwgMHg1ZTEwMjUsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIAotMHgyNDA3MDAwOCwgMHg0MGY4MDksIDB4MjRjNjAwMWMsIDB4MTQ0MGZmZTMsIAotMHgwLCAweDhmODIwMDU0LCAweDIyMjEwMjMsIDB4MmM0MjAzZTksIAotMHgxNDQwZmZlZSwgMHgwLCAweDMyYTIwMGZmLCAweDE0NDAwMDExLCAKLTB4M2MwNTAwMDksIDB4OGY0MjAzNzgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIAotMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywgMHg4ZmE3MDAzNCwgCi0weGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2MTIwLCAKLTB4YWZhMjAwMTQsIDB4OGQ0NjAwMDAsIDB4MzRhNTA3MDAsIDB4YzAwMmIzYiwgCi0weDAsIDB4OGY0MjAyZWMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZWMsIAotMHg4ZjQyMDJlYywgMHg4ZjQyMDAwNCwgMHgzMDQyMDAwMSwgMHg1MDQwMDAyOSwgCi0weDM2MTAwMDQwLCAweDNjMDIwNDAwLCAweDJjMjEwMjQsIDB4MTA0MDAwMTMsIAotMHgyNDA0ZmZkZiwgMHg4ZjQyMDI1MCwgMHg4ZjQzMDI1NCwgMHg4ZjQ0MDFiNCwgCi0weDE0NjQwMDA2LCAweDM2MTAwMDQwLCAweDhmNDIwMjcwLCAweDhmNDMwMjc0LCAKLTB4OGY0NDAxYjgsIDB4MTA2NDAwMDcsIDB4MjQwMmZmZGYsIDB4OGY0MjAyNTAsIAotMHg4ZjQzMDI1NCwgMHg4ZjQ0MDI3MCwgMHg4ZjQ1MDI3NCwgMHgxMDAwMDAxMiwgCi0weDNhMTAwMDIwLCAweDEwMDAwMDJiLCAweDIwMjgwMjQsIDB4OGY0MjAyNTAsIAotMHg4ZjQzMDI1NCwgMHg4ZjQ1MDFiNCwgMHgxNDY1MDAwNiwgMHgyMDQ4MDI0LCAKLTB4OGY0MjAyNzAsIDB4OGY0MzAyNzQsIDB4OGY0NDAxYjgsIDB4NTA2NDAwMjEsIAotMHgzNjEwMDA0MCwgMHg4ZjQyMDI1MCwgMHg4ZjQzMDI1NCwgMHg4ZjQ0MDI3MCwgCi0weDhmNDUwMjc0LCAweDNhMTAwMDQwLCAweGFmNDMwMWI0LCAweDEwMDAwMDE5LCAKLTB4YWY0NTAxYjgsIDB4OGY0MjAwZDQsIDB4MjQ0MzAwMDEsIDB4MTAwMDAwMTEsIAotMHgyODQyMDAzMywgMHg4ZjQyMDAwNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAwOSwgCi0weDNjMDIwNDAwLCAweDJjMjEwMjQsIDB4MTA0MDAwMDQsIDB4MjQwMmZmZGYsIAotMHgyMDI4MDI0LCAweDEwMDAwMDBiLCAweDM2MTAwMDQwLCAweDEwMDAwMDA5LCAKLTB4MzYxMDAwNjAsIDB4OGY0MjAwZDQsIDB4MzYxMDAwNDAsIDB4MjQ0MzAwMDEsIAotMHgyODQyMDFmNSwgMHgxNDQwMDAwMywgMHhhZjQzMDBkNCwgMHhhZjQwMDBkNCwgCi0weDNhMTAwMDIwLCAweGFmOTAwMDQ0LCAweDI0MDJmZjdmLCAweDI4MmEwMjQsIAotMHg4ZmJmMDA1MCwgMHg4ZmJlMDA0YywgMHg4ZmI1MDA0OCwgMHg4ZmIzMDA0NCwgCi0weDhmYjIwMDQwLCAweDhmYjEwMDNjLCAweDhmYjAwMDM4LCAweDNlMDAwMDgsIAotMHgyN2JkMDA1OCwgMHgzZTAwMDA4LCAweDAsIDB4M2MwMjAwMDEsIAotMHg4YzQyNmRhOCwgMHgyN2JkZmZiMCwgMHhhZmJmMDA0OCwgMHhhZmJlMDA0NCwgCi0weGFmYjUwMDQwLCAweGFmYjMwMDNjLCAweGFmYjIwMDM4LCAweGFmYjEwMDM0LCAKLTB4MTA0MDAwYzcsIDB4YWZiMDAwMzAsIDB4OGY0MjAwZDAsIDB4MjQ0MzAwMDEsIAotMHgyODQyMDAwYiwgMHgxNDQwMDBkYSwgMHhhZjQzMDBkMCwgMHg4ZjQyMDAwNCwgCi0weDMwNDIwMDAyLCAweDE0NDAwMDk3LCAweGFmNDAwMGQwLCAweDhmNDIwMDA0LCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MzQ0MjAwMDIsIDB4YWY0MjAwMDQsIAotMHgyNDAyMDAwMSwgMHgxNDYyMDAwMywgMHgzYzAyMDYwMCwgMHgxMDAwMDAwMiwgCi0weDM0NDIzMDAwLCAweDM0NDIxMDAwLCAweGFmYTIwMDIwLCAweDE4MjEsIAotMHg4ZjVlMDAxOCwgMHgyN2FhMDAyMCwgMHgyNDAyMDBmZiwgMHgxM2MyMDAwMiwgCi0weGFmYWEwMDJjLCAweDI3YzMwMDAxLCAweDhjMDIwMjI4LCAweDYwOTAyMSwgCi0weDE2NDIwMDBlLCAweDFlMzhjMCwgMHg4ZjQyMDMzYywgMHgyNDQyMDAwMSwgCi0weGFmNDIwMzNjLCAweDhmNDIwMzNjLCAweDhjMDIwMjI4LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYxMGMsIDB4M2MwNTAwMDksIDB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsIAotMHg4ZmE2MDAyMCwgMHgxMDAwMDA2ZCwgMHgzNGE1MDUwMCwgMHhmNzEwMjEsIAotMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsIAotMHgyYzQyMDNlOSwgMHgxMDQwMDAxYiwgMHg5ODIxLCAweGUwODgyMSwgCi0weDI2MzUwNGMwLCAweDhmNDQwMTc4LCAweDhmNDUwMTdjLCAweDIyMDE4MjEsIAotMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwgMHhhZmIyMDAxNCwgMHg4ZjQ4MDAwYywgCi0weDEwMjEsIDB4MmY1MzAyMSwgMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgCi0weDI0MDcwMDA4LCAweGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLCAKLTB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIDB4MjQxMzAwMDEsIAotMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmU5LCAKLTB4MCwgMHgzMjYyMDBmZiwgMHg1NDQwMDAxNywgMHhhZjUyMDAxOCwgCi0weDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LCAKLTB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjExOCwgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgCi0weDhkNDYwMDAwLCAweDEwMDAwMDM1LCAweDM0YTUwNjAwLCAweDhmNDIwMzA4LCAKLTB4MjQxMzAwMDEsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsIAotMHgxMDAwMDAxZSwgMHgzMjYyMDBmZiwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgCi0weDI0NzAwM2U4LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTA0MDAwMTYsIAotMHg5ODIxLCAweDNjMTUwMDIwLCAweDI0MTEwMDEwLCAweDhmNDIwMDBjLCAKLTB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY4NjAxMjAsIDB4YWZiMTAwMTAsIAotMHhhZmIyMDAxNCwgMHg1NTEwMjUsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIAotMHgyNDA3MDAwOCwgMHg0MGY4MDksIDB4MjRjNjAwMWMsIDB4MTQ0MGZmZTMsIAotMHgwLCAweDhmODIwMDU0LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIAotMHgxNDQwZmZlZSwgMHgwLCAweDMyNjIwMGZmLCAweDE0NDAwMDExLCAKLTB4MCwgMHg4ZjQyMDM3OCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM3OCwgCi0weDhmNDIwMzc4LCAweDhmODIwMTIwLCAweDhmYWEwMDJjLCAweGFmYTIwMDEwLCAKLTB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxMjAsIDB4M2MwNTAwMDksIAotMHhhZmEyMDAxNCwgMHg4ZDQ2MDAwMCwgMHgzNGE1MDcwMCwgMHhjMDAyYjNiLCAKLTB4M2MwMzgyMSwgMHg4ZjQyMDJlYywgMHgyNDQyMDAwMSwgMHhhZjQyMDJlYywgCi0weDhmNDIwMmVjLCAweDhmNDIwMDA0LCAweDMwNDIwMDAxLCAweDEwNDAwMDE4LCAKLTB4MjQwNDAwMDEsIDB4OGY0MjAyNTAsIDB4OGY0MzAyNTQsIDB4OGY0NTAxYjQsIAotMHgzYzAxMDAwMSwgMHgxNDY1MDAwNiwgMHhhMDI0NmNmMSwgMHg4ZjQyMDI3MCwgCi0weDhmNDMwMjc0LCAweDhmNDQwMWI4LCAweDEwNjQwMDIxLCAweDAsIAotMHg4ZjQyMDI1MCwgMHg4ZjQzMDI1NCwgMHgzYzA0MDAwMSwgMHg5MDg0NmNmMCwgCi0weDhmNDYwMjcwLCAweDhmNDcwMjc0LCAweDM4ODQwMDAxLCAweGFmNDMwMWI0LCAKLTB4YWY0NzAxYjgsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMjUsIDB4YTAyNDZjZjAsIAotMHg4ZjQyMDBkNCwgMHgzYzAxMDAwMSwgMHhhMDIwNmNmMCwgMHgyNDQzMDAwMSwgCi0weDI4NDIwMDMzLCAweDE0NDAwMDFlLCAweGFmNDMwMGQ0LCAweDNjMDIwMDAxLCAKLTB4OTA0MjZjZjEsIDB4YWY0MDAwZDQsIDB4MTAwMDAwMTcsIDB4Mzg0MjAwMDEsIAotMHg4ZjQyMDAwNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAwOCwgMHgwLCAKLTB4YzAwNTY1YSwgMHgyMDIxLCAweDNjMDEwMDAxLCAweGEwMjA2Y2YxLCAKLTB4M2MwMTAwMDEsIDB4MTAwMDAwMGUsIDB4YTAyMDZjZjAsIDB4OGY0MjAwZDQsIAotMHgzYzAxMDAwMSwgMHhhMDIwNmNmMCwgMHgyNDQzMDAwMSwgMHgyODQyMDFmNSwgCi0weDE0NDAwMDA3LCAweGFmNDMwMGQ0LCAweDNjMDIwMDAxLCAweDkwNDI2Y2YxLCAKLTB4YWY0MDAwZDQsIDB4NDIxMDI2LCAweDNjMDEwMDAxLCAweGEwMjI2Y2YxLCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MjQwMjAwMDIsIDB4MTQ2MjAwMGMsIAotMHgzYzAzMDAwMiwgMHgzYzAzMDAwMSwgMHg5MDYzNmNmMSwgMHgyNDAyMDAwMSwgCi0weDU0NjIwMDFmLCAweDIwMjEsIDB4M2MwMjAwMDEsIDB4OTA0MjZjZjAsIAotMHgxNDQzMDAxYiwgMHgyNDA0MDAwNSwgMHgxMDAwMDAxOSwgMHgyNDA0MDAwNiwgCi0weDNjMDIwMDAyLCAweDhjNDI4ZmY0LCAweDQzMTAyNCwgMHgxMDQwMDAwYiwgCi0weDI0MDIwMDAxLCAweDNjMDMwMDAxLCAweDkwNjM2Y2YxLCAweDU0NjIwMDEwLCAKLTB4MjAyMSwgMHgzYzAyMDAwMSwgMHg5MDQyNmNmMCwgMHgxNDQzMDAwYywgCi0weDI0MDQwMDAzLCAweDEwMDAwMDBhLCAweDI0MDQwMDA0LCAweDNjMDMwMDAxLCAKLTB4OTA2MzZjZjEsIDB4MTQ2MjAwMDYsIDB4MjAyMSwgMHgzYzAyMDAwMSwgCi0weDkwNDI2Y2YwLCAweDI0MDQwMDAxLCAweDUwNDQwMDAxLCAweDI0MDQwMDAyLCAKLTB4YzAwNTY1YSwgMHgwLCAweDI0MDJmZjdmLCAweDI4MmEwMjQsIAotMHg4ZmJmMDA0OCwgMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgMHg4ZmIzMDAzYywgCi0weDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLCAweDNlMDAwMDgsIAotMHgyN2JkMDA1MCwgMHgzZTAwMDA4LCAweDAsIDB4M2MwMjAwMDEsIAotMHg4YzQyNmRhOCwgMHgyN2JkZmZiMCwgMHhhZmJmMDA0OCwgMHhhZmJlMDA0NCwgCi0weGFmYjUwMDQwLCAweGFmYjMwMDNjLCAweGFmYjIwMDM4LCAweGFmYjEwMDM0LCAKLTB4MTA0MDAwZGUsIDB4YWZiMDAwMzAsIDB4OGY0MjAwZDAsIDB4M2MwNDAwMDEsIAotMHg4Yzg0NmQ5OCwgMHgyNDQzMDAwMSwgMHgyODQyMDAwYiwgMHhhZjQ0MDBlOCwgCi0weDE0NDAwMGZlLCAweGFmNDMwMGQwLCAweDhmNDIwMDA0LCAweDMwNDIwMDAyLCAKLTB4MTQ0MDAwOTUsIDB4YWY0MDAwZDAsIDB4OGY0MjAwMDQsIDB4MzQ0MjAwMDIsIAotMHhhZjQyMDAwNCwgMHgyNDAyMDAwMSwgMHgxNDgyMDAwMywgMHgzYzAyMDYwMCwgCi0weDEwMDAwMDAyLCAweDM0NDIzMDAwLCAweDM0NDIxMDAwLCAweGFmYTIwMDIwLCAKLTB4MTgyMSwgMHg4ZjVlMDAxOCwgMHgyN2FhMDAyMCwgMHgyNDAyMDBmZiwgCi0weDEzYzIwMDAyLCAweGFmYWEwMDJjLCAweDI3YzMwMDAxLCAweDhjMDIwMjI4LCAKLTB4NjA5MDIxLCAweDE2NDIwMDBlLCAweDFlMzhjMCwgMHg4ZjQyMDMzYywgCi0weDI0NDIwMDAxLCAweGFmNDIwMzNjLCAweDhmNDIwMzNjLCAweDhjMDIwMjI4LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDYxMGMsIDB4M2MwNTAwMDksIDB4YWZhMDAwMTQsIAotMHhhZmEyMDAxMCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDA2ZCwgMHgzNGE1MDUwMCwgCi0weGY3MTAyMSwgMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDRjMCwgCi0weGFjNDQwNGM0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAKLTB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxMDQwMDAxYiwgMHg5ODIxLCAKLTB4ZTA4ODIxLCAweDI2MzUwNGMwLCAweDhmNDQwMTc4LCAweDhmNDUwMTdjLCAKLTB4MjIwMTgyMSwgMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwgMHhhZmIyMDAxNCwgCi0weDhmNDgwMDBjLCAweDEwMjEsIDB4MmY1MzAyMSwgMHhhZmE4MDAxOCwgCi0weDhmNDgwMTBjLCAweDI0MDcwMDA4LCAweGEzMjgyMSwgMHhhMzQ4MmIsIAotMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIAotMHgyNDEzMDAwMSwgMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAKLTB4MTQ0MGZmZTksIDB4MCwgMHgzMjYyMDBmZiwgMHg1NDQwMDAxNywgCi0weGFmNTIwMDE4LCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAKLTB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjExOCwgMHgzYzA1MDAwOSwgCi0weGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDEwMDAwMDM1LCAweDM0YTUwNjAwLCAKLTB4OGY0MjAzMDgsIDB4MjQxMzAwMDEsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIAotMHg4ZjQyMDMwOCwgMHgxMDAwMDAxZSwgMHgzMjYyMDBmZiwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIAotMHgxMDQwMDAxNiwgMHg5ODIxLCAweDNjMTUwMDIwLCAweDI0MTEwMDEwLCAKLTB4OGY0MjAwMGMsIDB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY4NjAxMjAsIAotMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwgMHg1NTEwMjUsIDB4YWZhMjAwMTgsIAotMHg4ZjQyMDEwYywgMHgyNDA3MDAwOCwgMHg0MGY4MDksIDB4MjRjNjAwMWMsIAotMHgxNDQwZmZlMywgMHgwLCAweDhmODIwMDU0LCAweDIwMjEwMjMsIAotMHgyYzQyMDNlOSwgMHgxNDQwZmZlZSwgMHgwLCAweDMyNjIwMGZmLCAKLTB4MTQ0MDAwMTEsIDB4MCwgMHg4ZjQyMDM3OCwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMzc4LCAweDhmNDIwMzc4LCAweDhmODIwMTIwLCAweDhmYWEwMDJjLCAKLTB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxMjAsIAotMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgMHg4ZDQ2MDAwMCwgMHgzNGE1MDcwMCwgCi0weGMwMDJiM2IsIDB4M2MwMzgyMSwgMHg4ZjQyMDJlYywgMHgyNDQyMDAwMSwgCi0weGFmNDIwMmVjLCAweDhmNDIwMmVjLCAweDhmNDIwMDA0LCAweDMwNDIwMDAxLCAKLTB4MTA0MDAwMzMsIDB4M2MwMjA0MDAsIDB4MmMyMTAyNCwgMHgxMDQwMDAxNywgCi0weDAsIDB4OTM0MjA1YzAsIDB4OGY0NDAyNTAsIDB4OGY0NTAyNTQsIAotMHg4ZjQzMDFiNCwgMHgzNDQyMDAyMCwgMHgxNGEzMDAwNiwgMHhhMzQyMDVjMCwgCi0weDhmNDIwMjcwLCAweDhmNDMwMjc0LCAweDhmNDQwMWI4LCAweDEwNjQwMDA4LCAKLTB4MCwgMHg4ZjQyMDI1MCwgMHg4ZjQzMDI1NCwgMHg5MzQ0MDVjMCwgCi0weDhmNDYwMjcwLCAweDhmNDcwMjc0LCAweDEwMDAwMDE2LCAweDM4ODQwMDQwLCAKLTB4OTM0MjA1YzAsIDB4MTAwMDAwNDgsIDB4MzA0MjAwYmYsIDB4OTM0MjA1YzAsIAotMHg4ZjQ0MDI1MCwgMHg4ZjQ1MDI1NCwgMHg4ZjQzMDFiNCwgMHgzMDQyMDBiZiwgCi0weDE0YTMwMDA2LCAweGEzNDIwNWMwLCAweDhmNDIwMjcwLCAweDhmNDMwMjc0LCAKLTB4OGY0NDAxYjgsIDB4MTA2NDAwMGIsIDB4MCwgMHg4ZjQyMDI1MCwgCi0weDhmNDMwMjU0LCAweDkzNDQwNWMwLCAweDhmNDYwMjcwLCAweDhmNDcwMjc0LCAKLTB4Mzg4NDAwMjAsIDB4YWY0MzAxYjQsIDB4YWY0NzAxYjgsIDB4MTAwMDAwMzMsIAotMHhhMzQ0MDVjMCwgMHg5MzQyMDVjMCwgMHgxMDAwMDAyZiwgMHgzNDQyMDAyMCwgCi0weDkzNDIwNWMwLCAweDhmNDMwMGQ0LCAweDM0NDIwMDIwLCAweGEzNDIwNWMwLCAKLTB4MjQ2MjAwMDEsIDB4MTAwMDAwMjMsIDB4Mjg2MzAwMzMsIDB4OGY0MjAwZTQsIAotMHg4ZjQzMDBlMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDBlNCwgMHg0MzEwMmEsIAotMHgxNDQwMDAwNiwgMHgyNDAzMDAwMSwgMHg4ZjQyMDBlOCwgMHgxNDQzMDAwMiwgCi0weGFmNDAwMGU0LCAweDI0MDMwMDA0LCAweGFmNDMwMGU4LCAweDhmNDIwMDA0LCAKLTB4MzA0MjAwMDEsIDB4MTA0MDAwMGQsIDB4M2MwMjA0MDAsIDB4MmMyMTAyNCwgCi0weDEwNDAwMDA3LCAweDAsIDB4OTM0MjA1YzAsIDB4MzQ0MjAwNDAsIAotMHhhMzQyMDVjMCwgMHg5MzQyMDVjMCwgMHgxMDAwMDAwZiwgMHgzMDQyMDBkZiwgCi0weDkzNDIwNWMwLCAweDEwMDAwMDBjLCAweDM0NDIwMDYwLCAweDkzNDIwNWMwLCAKLTB4OGY0MzAwZDQsIDB4MzQ0MjAwMjAsIDB4YTM0MjA1YzAsIDB4MjQ2MjAwMDEsIAotMHgyODYzMDBmYiwgMHgxNDYwMDAwNSwgMHhhZjQyMDBkNCwgMHg5MzQyMDVjMCwgCi0weGFmNDAwMGQ0LCAweDM4NDIwMDQwLCAweGEzNDIwNWMwLCAweDkzNDIwNWMwLCAKLTB4OGY0MzAwZTgsIDB4MzA0MjAwN2YsIDB4YTM0MjA1YzAsIDB4MjQwMjAwMDEsIAotMHgxNDYyMDAwNSwgMHgwLCAweDkzNDQwNWMwLCAweDQyMTAyLCAKLTB4MTAwMDAwMDMsIDB4MzQ4NDAwZjAsIDB4OTM0NDA1YzAsIDB4MzQ4NDAwMGYsIAotMHhjMDA1NjQwLCAweDAsIDB4MjQwMmZmN2YsIDB4MjgyYTAyNCwgCi0weDhmYmYwMDQ4LCAweDhmYmUwMDQ0LCAweDhmYjUwMDQwLCAweDhmYjMwMDNjLCAKLTB4OGZiMjAwMzgsIDB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDUwLCAweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZiMCwgCi0weDI3NDQwMWMwLCAweDI2ZTMwMDI4LCAweDI0NjUwNDAwLCAweDY1MTAyYiwgCi0weGFmYmYwMDQ4LCAweGFmYmUwMDQ0LCAweGFmYjUwMDQwLCAweGFmYjMwMDNjLCAKLTB4YWZiMjAwMzgsIDB4YWZiMTAwMzQsIDB4MTA0MDAwMDcsIDB4YWZiMDAwMzAsIAotMHg4YzgyMDAwMCwgMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgMHg2NTEwMmIsIAotMHgxNDQwZmZmYiwgMHgyNDg0MDAwNCwgMHg4YzAyMDA4MCwgMHhhZWUyMDA0NCwgCi0weDhjMDIwMGMwLCAweGFlZTIwMDQwLCAweDhjMDIwMDg0LCAweGFlZTIwMDMwLCAKLTB4OGMwMjAwODQsIDB4YWVlMjAyM2MsIDB4OGMwMjAwODgsIDB4YWVlMjAyNDAsIAotMHg4YzAyMDA4YywgMHhhZWUyMDI0NCwgMHg4YzAyMDA5MCwgMHhhZWUyMDI0OCwgCi0weDhjMDIwMDk0LCAweGFlZTIwMjRjLCAweDhjMDIwMDk4LCAweGFlZTIwMjUwLCAKLTB4OGMwMjAwOWMsIDB4YWVlMjAyNTQsIDB4OGMwMjAwYTAsIDB4YWVlMjAyNTgsIAotMHg4YzAyMDBhNCwgMHhhZWUyMDI1YywgMHg4YzAyMDBhOCwgMHhhZWUyMDI2MCwgCi0weDhjMDIwMGFjLCAweGFlZTIwMjY0LCAweDhjMDIwMGIwLCAweGFlZTIwMjY4LCAKLTB4OGMwMjAwYjQsIDB4YWVlMjAyNmMsIDB4OGMwMjAwYjgsIDB4YWVlMjAyNzAsIAotMHg4YzAyMDBiYywgMHgyNDA0MDAwMSwgMHhhZWUyMDI3NCwgMHhhZWUwMDAzNCwgCi0weDQxMDgwLCAweDU3MTAyMSwgMHg4ZWUzMDAzNCwgMHg4YzQyMDIzYywgCi0weDI0ODQwMDAxLCAweDYyMTgyMSwgMHgyYzgyMDAwZiwgMHhhZWUzMDAzNCwgCi0weDE0NDBmZmY4LCAweDQxMDgwLCAweDhjMDIwMGNjLCAweGFlZTIwMDQ4LCAKLTB4OGMwMjAwZDAsIDB4YWVlMjAwNGMsIDB4OGMwMjAwZTAsIDB4YWVlMjAxZjgsIAotMHg4YzAyMDBlNCwgMHhhZWUyMDFmYywgMHg4YzAyMDBlOCwgMHhhZWUyMDIwMCwgCi0weDhjMDIwMGVjLCAweGFlZTIwMjA0LCAweDhjMDIwMGYwLCAweGFlZTIwMjA4LCAKLTB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4OGMwMjAwZmMsIDB4NDUxMDJiLCAKLTB4MTA0MDAwMGIsIDB4MCwgMHg4ZWUyMDBjMCwgMHg4ZWUzMDBjNCwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDAwLCAweDY1MTgyMSwgMHg2NTMwMmIsIAotMHg0NDEwMjEsIDB4NDYxMDIxLCAweGFlZTIwMGMwLCAweGFlZTMwMGM0LCAKLTB4OGMwMjAwZmMsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4MjQwOGZmZmYsIAotMHgyNDA5MDAwMCwgMHg0MDE4MjEsIDB4MTAyMSwgMHg4ODIwMjQsIAotMHhhOTI4MjQsIDB4ODIyMDI1LCAweGEzMjgyNSwgMHhhZWU0MDBjMCwgCi0weGFlZTUwMGM0LCAweDhlZTQwMGQwLCAweDhlZTUwMGQ0LCAweDhjMDIwMGY0LCAKLTB4NDUxMDJiLCAweDEwNDAwMDBiLCAweDAsIDB4OGVlMjAwZDAsIAotMHg4ZWUzMDBkNCwgMHgyNDA0MDAwMSwgMHgyNDA1MDAwMCwgMHg2NTE4MjEsIAotMHg2NTMwMmIsIDB4NDQxMDIxLCAweDQ2MTAyMSwgMHhhZWUyMDBkMCwgCi0weGFlZTMwMGQ0LCAweDhjMDIwMGY0LCAweDhlZTQwMGQwLCAweDhlZTUwMGQ0LCAKLTB4NDAxODIxLCAweDEwMjEsIDB4ODgyMDI0LCAweGE5MjgyNCwgCi0weDgyMjAyNSwgMHhhMzI4MjUsIDB4YWVlNDAwZDAsIDB4YWVlNTAwZDQsIAotMHg4ZWU0MDBjOCwgMHg4ZWU1MDBjYywgMHg4YzAyMDBmOCwgMHg0NTEwMmIsIAotMHgxMDQwMDAwYiwgMHgwLCAweDhlZTIwMGM4LCAweDhlZTMwMGNjLCAKLTB4MjQwNDAwMDEsIDB4MjQwNTAwMDAsIDB4NjUxODIxLCAweDY1MzAyYiwgCi0weDQ0MTAyMSwgMHg0NjEwMjEsIDB4YWVlMjAwYzgsIDB4YWVlMzAwY2MsIAotMHg4YzAyMDBmOCwgMHg4ZWU0MDBjOCwgMHg4ZWU1MDBjYywgMHg0MDE4MjEsIAotMHgxMDIxLCAweDg4MjAyNCwgMHhhOTI4MjQsIDB4ODIyMDI1LCAKLTB4YTMyODI1LCAweDI0MDIwMDA4LCAweGFlZTQwMGM4LCAweGFlZTUwMGNjLCAKLTB4YWZhMjAwMTAsIDB4YWZhMDAwMTQsIDB4OGY0MjAwMGMsIDB4OGMwNDAyMDgsIAotMHg4YzA1MDIwYywgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHgyNmU2MDAyOCwgCi0weDQwZjgwOSwgMHgyNDA3MDQwMCwgMHgxMDQwMDBmMCwgMHgzYzAyMDQwMCwgCi0weGFmYTIwMDIwLCAweDkzNDIwNWM2LCAweDEwNDAwMDg5LCAweDE4MjEsIAotMHg4ZjVlMDAxOCwgMHgyN2FhMDAyMCwgMHgyNDAyMDBmZiwgMHgxM2MyMDAwMiwgCi0weGFmYWEwMDJjLCAweDI3YzMwMDAxLCAweDhjMDIwMjI4LCAweDYwOTAyMSwgCi0weDE2NDIwMDBlLCAweDFlMzhjMCwgMHg4ZjQyMDMzYywgMHgyNDQyMDAwMSwgCi0weGFmNDIwMzNjLCAweDhmNDIwMzNjLCAweDhjMDIwMjI4LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYxMGMsIDB4M2MwNTAwMDksIDB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsIAotMHg4ZmE2MDAyMCwgMHgxMDAwMDA2YiwgMHgzNGE1MDUwMCwgMHhmNzEwMjEsIAotMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsIAotMHgyYzQyMDNlOSwgMHgxMDQwMDAxYiwgMHg5ODIxLCAweGUwODgyMSwgCi0weDI2MzUwNGMwLCAweDhmNDQwMTc4LCAweDhmNDUwMTdjLCAweDIyMDE4MjEsIAotMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwgMHhhZmIyMDAxNCwgMHg4ZjQ4MDAwYywgCi0weDEwMjEsIDB4MmY1MzAyMSwgMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgCi0weDI0MDcwMDA4LCAweGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLCAKLTB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIDB4MjQxMzAwMDEsIAotMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmU5LCAKLTB4MCwgMHgzMjYyMDBmZiwgMHg1NDQwMDAxNywgMHhhZjUyMDAxOCwgCi0weDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LCAKLTB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjExOCwgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgCi0weDhkNDYwMDAwLCAweDEwMDAwMDMzLCAweDM0YTUwNjAwLCAweDhmNDIwMzA4LCAKLTB4MjQxMzAwMDEsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsIAotMHgxMDAwMDAxYywgMHgzMjYyMDBmZiwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgCi0weDI0NzAwM2U4LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTA0MDAwMTQsIAotMHg5ODIxLCAweDI0MTEwMDEwLCAweDhmNDIwMDBjLCAweDhmNDQwMTYwLCAKLTB4OGY0NTAxNjQsIDB4OGY4NjAxMjAsIDB4YWZiMTAwMTAsIDB4YWZiMjAwMTQsIAotMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHgyNDA3MDAwOCwgMHg0MGY4MDksIAotMHgyNGM2MDAxYywgMHgxNDQwZmZlNSwgMHgwLCAweDhmODIwMDU0LCAKLTB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxNDQwZmZlZiwgMHgwLCAKLTB4MzI2MjAwZmYsIDB4NTQ0MDAwMTIsIDB4MjQwMjAwMDEsIDB4OGY0MjAzNzgsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDM3OCwgMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgCi0weDhmYWEwMDJjLCAweGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYxMjAsIDB4M2MwNTAwMDksIDB4YWZhMjAwMTQsIDB4OGQ0NjAwMDAsIAotMHgzNGE1MDcwMCwgMHhjMDAyYjNiLCAweDNjMDM4MjEsIDB4MTAyMSwgCi0weDE0NDAwMDViLCAweDI0MDIwMDAxLCAweDEwMDAwMDY1LCAweDAsIAotMHg4ZjUxMDAxOCwgMHgyNDAyMDBmZiwgMHgxMjIyMDAwMiwgMHg4MDIxLCAKLTB4MjYzMDAwMDEsIDB4OGMwMjAyMjgsIDB4MTYwMjAwMGUsIDB4MTEzMGMwLCAKLTB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIAotMHg4YzAyMDIyOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjBmNCwgMHgzYzA1MDAwOSwgCi0weGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhmYTYwMDIwLCAweDEwMDAwMDNmLCAKLTB4MzRhNTAxMDAsIDB4ZDcxMDIxLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LCAKLTB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsIDB4YzAxODIxLCAweDhmNDQwMTc4LCAKLTB4OGY0NTAxN2MsIDB4MTAyMSwgMHgyNDA3MDAwNCwgMHhhZmE3MDAxMCwgCi0weGFmYjAwMDE0LCAweDhmNDgwMDBjLCAweDI0YzYwNGMwLCAweDJlNjMwMjEsIAotMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgyNDA3MDAwOCwgMHhhMzI4MjEsIAotMHhhMzQ4MmIsIDB4ODIyMDIxLCAweDEwMGY4MDksIDB4ODkyMDIxLCAKLTB4MTQ0MDAwMGIsIDB4MjQwNzAwMDgsIDB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjBmYywgMHgzYzA1MDAwOSwgCi0weGFmYTIwMDE0LCAweDhmYTYwMDIwLCAweDEwMDAwMDFjLCAweDM0YTUwMjAwLCAKLTB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY0MzAwMGMsIDB4YWY1MDAwMTgsIAotMHg4Zjg2MDEyMCwgMHgyNDAyMDAxMCwgMHhhZmEyMDAxMCwgMHhhZmIwMDAxNCwgCi0weGFmYTMwMDE4LCAweDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgCi0weDU0NDAwMDExLCAweDI0MDIwMDAxLCAweDhmNDIwMzQwLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzNDAsIDB4OGY0MjAzNDAsIDB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjEwNCwgMHgzYzA1MDAwOSwgCi0weGFmYTIwMDE0LCAweDhmYTYwMDIwLCAweDM0YTUwMzAwLCAweGMwMDJiM2IsIAotMHgyMjAzODIxLCAweDEwMjEsIDB4MTA0MDAwMGQsIDB4MjQwMjAwMDEsIAotMHg4ZjQyMDJlOCwgMHhhMzQwMDVjNiwgMHhhZjQwMDFiMCwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMmU4LCAweDhmNDIwMmU4LCAweDhlZTIwMTUwLCAweDI0NDIwMDAxLCAKLTB4YWVlMjAxNTAsIDB4MTAwMDAwMDMsIDB4OGVlMjAxNTAsIDB4MjQwMjAwMDEsIAotMHhhMzQyMDVjNiwgMHg4ZmJmMDA0OCwgMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgCi0weDhmYjMwMDNjLCAweDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDA1MCwgMHgyN2JkZmZkOCwgMHhhZmJmMDAyMCwgCi0weDhmODIwMGIwLCAweDMwNDIwMDA0LCAweDEwNDAwMDY4LCAweDAsIAotMHg4ZjQzMDEyOCwgMHg4ZjgyMDEwNCwgMHgxNDYyMDAwNSwgMHgwLCAKLTB4OGY0MzAxMzAsIDB4OGY4MjAwYjQsIDB4MTA2MjAwMDYsIDB4MCwgCi0weDhmODIwMTA0LCAweGFmNDIwMTI4LCAweDhmODIwMGI0LCAweDEwMDAwMDViLCAKLTB4YWY0MjAxMzAsIDB4OGY4MjAwYjAsIDB4M2MwMzAwODAsIDB4NDMxMDI0LCAKLTB4MTA0MDAwMGQsIDB4MCwgMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwgCi0weGFmODIwMTFjLCAweDhmODIwMGIwLCAweDI0MDNmZmZiLCAweDQzMTAyNCwgCi0weGFmODIwMGIwLCAweDhmODIwMTFjLCAweDI0MDNmZmZkLCAweDQzMTAyNCwgCi0weDEwMDAwMDRhLCAweGFmODIwMTFjLCAweDhmNDMwMTI4LCAweDhmODIwMTA0LCAKLTB4MTQ2MjAwMDUsIDB4MCwgMHg4ZjQzMDEzMCwgMHg4ZjgyMDBiNCwgCi0weDEwNjIwMDEwLCAweDAsIDB4OGY4MjAxMDQsIDB4YWY0MjAxMjgsIAotMHg4ZjgyMDBiNCwgMHg4ZjQzMDEyOCwgMHhhZjQyMDEzMCwgMHhhZmEzMDAxMCwgCi0weDhmNDIwMTMwLCAweDNjMDQwMDAxLCAweDI0ODQ2MTQ0LCAweGFmYTIwMDE0LCAKLTB4OGY4NjAxMWMsIDB4OGY4NzAwYjAsIDB4M2MwNTAwMDUsIDB4MTAwMDAwMzEsIAotMHgzNGE1MDkwMCwgMHg4ZjQyMDEyOCwgMHhhZmEyMDAxMCwgMHg4ZjQyMDEzMCwgCi0weDNjMDQwMDAxLCAweDI0ODQ2MTUwLCAweGFmYTIwMDE0LCAweDhmODYwMTFjLCAKLTB4OGY4NzAwYjAsIDB4M2MwNTAwMDUsIDB4YzAwMmIzYiwgMHgzNGE1MTAwMCwgCi0weDhmODIwMTFjLCAweDM0NDIwMDAyLCAweGFmODIwMTFjLCAweDhmODMwMTA0LCAKLTB4OGY4MjAwYjAsIDB4MzQ0MjAwMDEsIDB4YWY4MjAwYjAsIDB4MjQwMjAwMDgsIAotMHhhZjgzMDEwNCwgMHhhZmEyMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZjQyMDAwYywgCi0weDhjMDQwMjA4LCAweDhjMDUwMjBjLCAweGFmYTIwMDE4LCAweDhmNDIwMTBjLCAKLTB4MjZlNjAwMjgsIDB4NDBmODA5LCAweDI0MDcwNDAwLCAweDhmODIwMTFjLCAKLTB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGFmODIwMTFjLCAweDhlZTIwMWRjLCAKLTB4MjQ0MjAwMDEsIDB4YWVlMjAxZGMsIDB4OGVlMjAxZGMsIDB4OGY0MjAxMjgsIAotMHhhZmEyMDAxMCwgMHg4ZjQyMDEzMCwgMHgzYzA0MDAwMSwgMHgyNDg0NjE1YywgCi0weGFmYTIwMDE0LCAweDhmODYwMTFjLCAweDhmODcwMGIwLCAweDNjMDUwMDA1LCAKLTB4MzRhNTExMDAsIDB4YzAwMmIzYiwgMHgwLCAweDhmODIwMGEwLCAKLTB4MzA0MjAwMDQsIDB4MTA0MDAwNjksIDB4MCwgMHg4ZjQzMDEyYywgCi0weDhmODIwMTI0LCAweDE0NjIwMDA1LCAweDAsIDB4OGY0MzAxMzQsIAotMHg4ZjgyMDBhNCwgMHgxMDYyMDAwNiwgMHgwLCAweDhmODIwMTI0LCAKLTB4YWY0MjAxMmMsIDB4OGY4MjAwYTQsIDB4MTAwMDAwNWMsIDB4YWY0MjAxMzQsIAotMHg4ZjgyMDBhMCwgMHgzYzAzMDA4MCwgMHg0MzEwMjQsIDB4MTA0MDAwMGQsIAotMHgwLCAweDhmODIwMTFjLCAweDM0NDIwMDAyLCAweGFmODIwMTFjLCAKLTB4OGY4MjAwYTAsIDB4MjQwM2ZmZmIsIDB4NDMxMDI0LCAweGFmODIwMGEwLCAKLTB4OGY4MjAxMWMsIDB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweDEwMDAwMDRiLCAKLTB4YWY4MjAxMWMsIDB4OGY0MzAxMmMsIDB4OGY4MjAxMjQsIDB4MTQ2MjAwMDUsIAotMHgwLCAweDhmNDMwMTM0LCAweDhmODIwMGE0LCAweDEwNjIwMDEwLCAKLTB4MCwgMHg4ZjgyMDEyNCwgMHhhZjQyMDEyYywgMHg4ZjgyMDBhNCwgCi0weDhmNDMwMTJjLCAweGFmNDIwMTM0LCAweGFmYTMwMDEwLCAweDhmNDIwMTM0LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDYxNjgsIDB4YWZhMjAwMTQsIDB4OGY4NjAxMWMsIAotMHg4Zjg3MDBhMCwgMHgzYzA1MDAwNSwgMHgxMDAwMDAzMiwgMHgzNGE1MTIwMCwgCi0weDhmNDIwMTJjLCAweGFmYTIwMDEwLCAweDhmNDIwMTM0LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYxNzQsIDB4YWZhMjAwMTQsIDB4OGY4NjAxMWMsIDB4OGY4NzAwYTAsIAotMHgzYzA1MDAwNSwgMHhjMDAyYjNiLCAweDM0YTUxMzAwLCAweDhmODIwMTFjLCAKLTB4MzQ0MjAwMDIsIDB4YWY4MjAxMWMsIDB4OGY4MzAxMjQsIDB4OGY4MjAwYTAsIAotMHgzNDQyMDAwMSwgMHhhZjgyMDBhMCwgMHgyNDAyMDA4MCwgMHhhZjgzMDEyNCwgCi0weGFmYTIwMDEwLCAweGFmYTAwMDE0LCAweDhmNDIwMDE0LCAweDhjMDQwMjA4LCAKLTB4OGMwNTAyMGMsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMDgsIDB4M2MwNjAwMDEsIAotMHgyNGM2NmVkOCwgMHg0MGY4MDksIDB4MjQwNzAwMDQsIDB4OGY4MjAxMWMsIAotMHgyNDAzZmZmZCwgMHg0MzEwMjQsIDB4YWY4MjAxMWMsIDB4OGVlMjAxZGMsIAotMHgyNDQyMDAwMSwgMHhhZWUyMDFkYywgMHg4ZWUyMDFkYywgMHg4ZjQyMDEyYywgCi0weGFmYTIwMDEwLCAweDhmNDIwMTM0LCAweDNjMDQwMDAxLCAweDI0ODQ2MTgwLCAKLTB4YWZhMjAwMTQsIDB4OGY4NjAxMWMsIDB4OGY4NzAwYTAsIDB4M2MwNTAwMDUsIAotMHgzNGE1MTQwMCwgMHhjMDAyYjNiLCAweDAsIDB4OGZiZjAwMjAsIAotMHgzZTAwMDA4LCAweDI3YmQwMDI4LCAweDNjMDgxMDAwLCAweDI0MDcwMDAxLCAKLTB4M2MwNjAwODAsIDB4M2MwNTAxMDAsIDB4OGY4MjAwNzAsIDB4NDgxMDI0LCAKLTB4MTA0MGZmZmQsIDB4MCwgMHg4ZjgyMDA1NCwgMHgyNDQyMDAwNSwgCi0weGFmODIwMDc4LCAweDhjMDQwMjM0LCAweDEwODAwMDE2LCAweDE4MjEsIAotMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjQwZTgsIDB4MjQ0MjAwMDUsIAotMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjQwZTgsIDB4M2MwMjAwMDEsIAotMHg1NzEwMjEsIDB4OGM0MjQwZTgsIDB4NDQxMDJiLCAweDE0NDAwMDA5LCAKLTB4MCwgMHgzYzAzMDA4MCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhYzIwNDBlOCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4MTAwMDAwMGIsIAotMHhhMDI3NDBmMCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjQwZjAsIAotMHg1NDQwMDAwNiwgMHg2NjE4MjUsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAKLTB4OTA0MjQwZjEsIDB4NTQ0MDAwMDEsIDB4NjYxODI1LCAweDhjMDQwMjMwLCAKLTB4MTA4MDAwMTMsIDB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyNDBlYywgMHgyNDQyMDAwNSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhYzIyNDBlYywgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjQwZWMsIAotMHg0NDEwMmIsIDB4MTQ0MDAwMDYsIDB4MCwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhYzIwNDBlYywgMHgxMDAwMDAwNiwgMHg2NTE4MjUsIAotMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjQwZjIsIDB4NTQ0MDAwMDEsIAotMHg2NTE4MjUsIDB4MTA2MGZmYmMsIDB4MCwgMHg4ZjQyMDAwMCwgCi0weDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIAotMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAweDAsIAotMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAKLTB4OGY4MjAwNjAsIDB4NDMxMDI1LCAweGFmODIwMDYwLCAweDhmNDIwMDAwLCAKLTB4MTA0MDAwMDMsIDB4MCwgMHgxMDAwZmZhNywgMHhhZjgwMDA0YywgCi0weDEwMDBmZmE1LCAweGFmODAwMDQ4LCAweDNlMDAwMDgsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDI3YmRmZmUwLCAKLTB4YWZiZjAwMTgsIDB4OGY4NjAwNjQsIDB4MzBjMjAwMDQsIDB4MTA0MDAwMjUsIAotMHgyNDA0MDAwNCwgMHg4YzAyMDExNCwgMHhhZjQyMDAyMCwgMHhhZjg0MDA2NCwgCi0weDhmNDIwMmZjLCAweDI0NDIwMDAxLCAweGFmNDIwMmZjLCAweDhmNDIwMmZjLCAKLTB4OGY4MjAwNjQsIDB4MzA0MjAwMDQsIDB4MTQ0MDAwMDUsIDB4MCwgCi0weDhjMDMwMTE0LCAweDhmNDIwMDIwLCAweDE0NjJmZmYyLCAweDAsIAotMHg4ZjQyMDAwMCwgMHgxMDQwMDAwNywgMHg4ZjQzMDAzYywgMHhhZjgwMDA0YywgCi0weDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsIAotMHgwLCAweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAweDEwNDBmZmZkLCAKLTB4MCwgMHg4ZjgyMDA2MCwgMHg0MzEwMjUsIDB4YWY4MjAwNjAsIAotMHg4ZjQyMDAwMCwgMHgxMDQwMDA3MywgMHgwLCAweDEwMDAwMDZmLCAKLTB4MCwgMHgzMGMyMDAwOCwgMHgxMDQwMDAyMCwgMHgyNDA0MDAwOCwgCi0weDhjMDIwMTFjLCAweGFmNDIwMDQ4LCAweGFmODQwMDY0LCAweDhmNDIwMmE4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyYTgsIDB4OGY0MjAyYTgsIDB4OGY4MjAwNjQsIAotMHgzMDQyMDAwOCwgMHgxNDQwMDAwNSwgMHgwLCAweDhjMDMwMTFjLCAKLTB4OGY0MjAwNDgsIDB4MTQ2MmZmZjIsIDB4MCwgMHg4ZjQyMDAwMCwgCi0weDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIAotMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAweDAsIAotMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAKLTB4OGY4MjAwNjAsIDB4MTAwMGZmZDksIDB4MzQ0MjAyMDAsIDB4MzBjMjAwMjAsIAotMHgxMDQwMDAyMywgMHgyNDA0MDAyMCwgMHg4YzAyMDEyYywgMHhhZjQyMDA2OCwgCi0weGFmODQwMDY0LCAweDhmNDIwMmQ4LCAweDI0NDIwMDAxLCAweGFmNDIwMmQ4LCAKLTB4OGY0MjAyZDgsIDB4OGY4MjAwNjQsIDB4MzA0MjAwMjAsIDB4MTQ0MDAwMDUsIAotMHgzMmMyNDAwMCwgMHg4YzAzMDEyYywgMHg4ZjQyMDA2OCwgMHgxNDYyZmZmMiwgCi0weDMyYzI0MDAwLCAweDE0NDAwMDAyLCAweDNjMDIwMDAxLCAweDJjMmIwMjUsIAotMHg4ZjQyMDAwMCwgMHgxMDQwMDAwNywgMHgwLCAweGFmODAwMDRjLCAKLTB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsIDB4MCwgMHgxMDAwMDAwNSwgCi0weDAsIDB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsIAotMHgwLCAweDhmODIwMDYwLCAweDEwMDBmZmI0LCAweDM0NDIwODAwLCAKLTB4MzBjMjAwMTAsIDB4MTA0MDAwMjksIDB4MjQwNDAwMTAsIDB4OGMwMjAxMjQsIAotMHhhZjQyMDA1OCwgMHhhZjg0MDA2NCwgMHg4ZjQyMDJkNCwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMmQ0LCAweDhmNDIwMmQ0LCAweDhmODIwMDY0LCAweDMwNDIwMDEwLCAKLTB4MTQ0MDAwMDUsIDB4MzJjMjIwMDAsIDB4OGMwMzAxMjQsIDB4OGY0MjAwNTgsIAotMHgxNDYyZmZmMiwgMHgzMmMyMjAwMCwgMHg1MDQwMDAwMSwgMHgzNmQ2ODAwMCwgCi0weDhmNDIwMDAwLCAweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIAotMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAKLTB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgCi0weDAsIDB4OGY4MjAwNjAsIDB4MzQ0MjAxMDAsIDB4YWY4MjAwNjAsIAotMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAweDEwMDAwMDZjLCAKLTB4YWY4MDAwNGMsIDB4MTAwMDAwNmEsIDB4YWY4MDAwNDgsIDB4MzBjMjAwMDEsIAotMHgxMDQwMDAwNCwgMHgyNDAyMDAwMSwgMHhhZjgyMDA2NCwgMHgxMDAwMDA2NCwgCi0weDAsIDB4MzBjMjAwMDIsIDB4MTQ0MDAwMGIsIDB4M2MwNTAwMDMsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjI0NCwgMHgzNGE1MDUwMCwgMHgzODIxLCAKLTB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHgyNDAyZmZjMCwgCi0weDEwMDAwMDU3LCAweGFmODIwMDY0LCAweDhjMDUwMjJjLCAweDhjMDIwMTBjLCAKLTB4MTBhMjAwNDgsIDB4NTEwODAsIDB4OGM0NjAzMDAsIDB4MjRhMjAwMDEsIAotMHgzMDQ1MDAzZiwgMHgyNDAyMDAwMywgMHhhYzA1MDIyYywgMHg2MWUwMiwgCi0weDEwNjIwMDA1LCAweDI0MDIwMDEwLCAweDEwNjIwMDFkLCAweDMwYzIwZmZmLCAKLTB4MTAwMDAwMzksIDB4MCwgMHg4ZjQzMDJhOCwgMHg4ZjQ0MDAwMCwgCi0weDMwYzIwZmZmLCAweGFmNDIwMDQ4LCAweDI0NjMwMDAxLCAweGFmNDMwMmE4LCAKLTB4MTA4MDAwMDcsIDB4OGY0MjAyYTgsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIAotMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAweDAsIAotMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAKLTB4OGY4MjAwNjAsIDB4MzQ0MjAyMDAsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsIAotMHgxMDQwMDAxZiwgMHgwLCAweDEwMDAwMDFiLCAweDAsIAotMHhhZjQyMDA1OCwgMHgzMmMyMjAwMCwgMHg1MDQwMDAwMSwgMHgzNmQ2ODAwMCwgCi0weDhmNDIwMmQ0LCAweDhmNDMwMDAwLCAweDI0NDIwMDAxLCAweGFmNDIwMmQ0LCAKLTB4MTA2MDAwMDcsIDB4OGY0MjAyZDQsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIAotMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAweDAsIAotMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAKLTB4OGY4MjAwNjAsIDB4MzQ0MjAxMDAsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsIAotMHgxMDQwMDAwMywgMHgwLCAweDEwMDAwMDA2LCAweGFmODAwMDRjLCAKLTB4MTAwMDAwMDQsIDB4YWY4MDAwNDgsIDB4YzAwMjE5NiwgMHhjMDIwMjEsIAotMHg0MDI4MjEsIDB4OGMwMjAxMGMsIDB4MTRhMjAwMDIsIDB4MjQwMjAwMDIsIAotMHhhZjgyMDA2NCwgMHg4ZjgyMDA2NCwgMHgzMDQyMDAwMiwgMHgxNDQwMDAwNCwgCi0weDAsIDB4OGMwMjAxMGMsIDB4MTRhMmZmYWMsIDB4MCwgCi0weDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4M2UwMDAwOCwgCi0weDAsIDB4MjdiZGZmYTAsIDB4YWZiMDAwNDAsIDB4ODA4MDIxLCAKLTB4MTAxNjAyLCAweDI0NDJmZmZmLCAweDMwNDMwMGZmLCAweDJjNjIwMDEzLCAKLTB4YWZiZjAwNTgsIDB4YWZiZTAwNTQsIDB4YWZiNTAwNTAsIDB4YWZiMzAwNGMsIAotMHhhZmIyMDA0OCwgMHhhZmIxMDA0NCwgMHgxMDQwMDFmMywgMHhhZmE1MDAzNCwgCi0weDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNjI4OCwgCi0weDQwMDAwOCwgMHgwLCAweDEwMTMwMiwgMHgzMDQ0MGZmZiwgCi0weDI0MDIwMDAxLCAweDEwODIwMDA1LCAweDI0MDIwMDAyLCAweDEwODIwMDBjLCAKLTB4MjQwMmZmZmUsIDB4MTAwMDAwMjQsIDB4M2MwNTAwMDMsIDB4OGY0MzAwMDQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmYwNCwgMHhhZjQ0MDIwMCwgMHhhZjQ0MDIwNCwgCi0weDNjMDQwMDAxLCAweDhjODQ2ZTgwLCAweDEwMDAwMDA5LCAweDM0NjMwMDAxLCAKLTB4OGY0MzAwMDQsIDB4YWY0NDAyMDAsIDB4YWY0NDAyMDQsIDB4M2MwNDAwMDEsIAotMHg4Yzg0NmU4MCwgMHg2MjE4MjQsIDB4M2MwMjAwMDEsIDB4MjQ0MmNhMjgsIAotMHgyMTEwMCwgMHgyMTE4MiwgMHhhZjQzMDAwNCwgMHgzYzAzMDgwMCwgCi0weDQzMTAyNSwgMHhhYzgyMDAzOCwgMHg4Zjg0MDA1NCwgMHg0MTQ0MiwgCi0weDQxYzgyLCAweDQzMTAyMSwgMHg0MWNjMiwgMHg0MzEwMjMsIAotMHg0MWQwMiwgMHg0MzEwMjEsIDB4NDFkNDIsIDB4NDMxMDIzLCAKLTB4MTAwMDAwMDksIDB4YWY0MjAyMDgsIDB4M2MwNDAwMDEsIDB4MjQ4NDYyNTAsIAotMHgzNGE1MTAwMCwgMHgyMDAzMDIxLCAweDM4MjEsIDB4YWZhMDAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmNDIwMmEwLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAyYTAsIDB4MTAwMDAyMWYsIDB4OGY0MjAyYTAsIDB4MjdiMDAwMjgsIAotMHgyMDAyMDIxLCAweDI0MDUwMjEwLCAweGMwMDJiYmYsIDB4MjQwNjAwMDgsIAotMHhjMDAyNTE4LCAweDIwMDIwMjEsIDB4MTAwMDAyMTYsIDB4MCwgCi0weDhmYWEwMDM0LCAweDI3YTQwMDI4LCAweGExODgwLCAweDI1NDIwMDAxLCAKLTB4MzA0MjAwM2YsIDB4YWZhMjAwMzQsIDB4OGM2NTAzMDAsIDB4OGZhYTAwMzQsIAotMHgyMTA4MCwgMHg4YzQzMDMwMCwgMHgyNTQyMDAwMSwgMHgzMDQyMDAzZiwgCi0weGFmYTIwMDM0LCAweGFjMDIwMjJjLCAweGFmYTUwMDI4LCAweGMwMDI1MTgsIAotMHhhZmEzMDAyYywgMHgxMDAwMDIwMywgMHgwLCAweDI3YjAwMDI4LCAKLTB4MjAwMjAyMSwgMHgyNDA1MDIxMCwgMHhjMDAyYmJmLCAweDI0MDYwMDA4LCAKLTB4YzAwMjY1NywgMHgyMDAyMDIxLCAweDEwMDAwMWZhLCAweDAsIAotMHg4ZmFhMDAzNCwgMHgyN2E0MDAyOCwgMHhhMTg4MCwgMHgyNTQyMDAwMSwgCi0weDMwNDIwMDNmLCAweGFmYTIwMDM0LCAweDhjNjUwMzAwLCAweDhmYWEwMDM0LCAKLTB4MjEwODAsIDB4OGM0MzAzMDAsIDB4MjU0MjAwMDEsIDB4MzA0MjAwM2YsIAotMHhhZmEyMDAzNCwgMHhhYzAyMDIyYywgMHhhZmE1MDAyOCwgMHhjMDAyNjU3LCAKLTB4YWZhMzAwMmMsIDB4MTAwMDAxZTcsIDB4MCwgMHgxMDEzMDIsIAotMHgzMDQzMGZmZiwgMHgyNDAyMDAwMSwgMHgxMDYyMDAwNSwgMHgyNDAyMDAwMiwgCi0weDEwNjIwMDFlLCAweDNjMDIwMDAyLCAweDEwMDAwMDMzLCAweDNjMDUwMDAzLCAKLTB4M2MwMzAwMDIsIDB4MmMzMTAyNCwgMHg1NDQwMDAzNywgMHgyYzNiMDI1LCAKLTB4OGY4MjAyMjgsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjIzOGQ4LCAKLTB4OGY4MjAyMmMsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjIzOGRjLCAKLTB4OGY4MjAyMzAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjIzOGUwLCAKLTB4OGY4MjAyMzQsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjIzOGU0LCAKLTB4MjQwMmZmZmYsIDB4YWY4MjAyMjgsIDB4YWY4MjAyMmMsIDB4YWY4MjAyMzAsIAotMHhhZjgyMDIzNCwgMHgxMDAwMDAyMCwgMHgyYzNiMDI1LCAweDJjMjEwMjQsIAotMHgxMDQwMDAxMiwgMHgzYzAyZmZmZCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyMzhkOCwgMHhhZjgyMDIyOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyMzhkYywgMHhhZjgyMDIyYywgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyMzhlMCwgMHhhZjgyMDIzMCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg4YzQyMzhlNCwgMHhhZjgyMDIzNCwgMHgzYzAyZmZmZCwgMHgzNDQyZmZmZiwgCi0weDEwMDAwMDA5LCAweDJjMmIwMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYyNWMsIAotMHgzNGE1MTEwMCwgMHgyMDAzMDIxLCAweDM4MjEsIDB4YWZhMDAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmNDIwMmNjLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAyY2MsIDB4MTAwMDAxOWYsIDB4OGY0MjAyY2MsIDB4MTAxMzAyLCAKLTB4MzA0NTBmZmYsIDB4MjQwMjAwMDEsIDB4MTBhMjAwMDUsIDB4MjQwMjAwMDIsIAotMHgxMGEyMDAwZCwgMHgzYzA0MDhmZiwgMHgxMDAwMDAxNCwgMHgzYzA1MDAwMywgCi0weDNjMDIwOGZmLCAweDM0NDJmZmZmLCAweDhmODMwMjIwLCAweDNjMDQwMDA0LCAKLTB4MmM0YjAyNSwgMHg2MjE4MjQsIDB4MzQ2MzAwMDgsIDB4YWY4MzAyMjAsIAotMHgxMDAwMDAxMiwgMHhhZjQ1MDI5OCwgMHgzNDg0ZmZmNywgMHgzYzAzZmZmYiwgCi0weDhmODIwMjIwLCAweDM0NjNmZmZmLCAweDJjM2IwMjQsIDB4NDQxMDI0LCAKLTB4YWY4MjAyMjAsIDB4MTAwMDAwMDksIDB4YWY0NTAyOTgsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjI2OCwgMHgzNGE1MTIwMCwgMHgyMDAzMDIxLCAweDM4MjEsIAotMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmNDIwMmJjLCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyYmMsIDB4MTAwMDAxNzYsIDB4OGY0MjAyYmMsIAotMHgyNzg0MDIwOCwgMHgyNDA1MDIwMCwgMHhjMDAyYmJmLCAweDI0MDYwMDA4LCAKLTB4Mjc0NDAyMjQsIDB4MjQwNTAyMDAsIDB4YzAwMmJiZiwgMHgyNDA2MDAwOCwgCi0weDhmNDIwMmM0LCAweDI0NDIwMDAxLCAweGFmNDIwMmM0LCAweDEwMDAwMTY5LCAKLTB4OGY0MjAyYzQsIDB4MTAxMzAyLCAweDMwNDMwZmZmLCAweDI0MDIwMDAxLCAKLTB4MTA2MjAwMTEsIDB4Mjg2MjAwMDIsIDB4NTA0MDAwMDUsIDB4MjQwMjAwMDIsIAotMHgxMDYwMDAwNywgMHgwLCAweDEwMDAwMDE3LCAweDAsIAotMHgxMDYyMDAwZiwgMHgwLCAweDEwMDAwMDEzLCAweDAsIAotMHg4YzA2MDI0OCwgMHgyMDIxLCAweGMwMDUxMDQsIDB4MjQwNTAwMDQsIAotMHgxMDAwMDAwNywgMHgwLCAweDhjMDYwMjQ4LCAweDIwMjEsIAotMHhjMDA1MTA0LCAweDI0MDUwMDA0LCAweDEwMDAwMDEwLCAweDAsIAotMHg4YzA2MDI0YywgMHgyMDIxLCAweGMwMDUxMDQsIDB4MjQwNTAwMDEsIAotMHgxMDAwMDAwYSwgMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ2Mjc0LCAKLTB4M2MwNTAwMDMsIDB4MzRhNTEzMDAsIDB4MjAwMzAyMSwgMHgzODIxLCAKLTB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHg4ZjQyMDJjMCwgCi0weDI0NDIwMDAxLCAweGFmNDIwMmMwLCAweDEwMDAwMTNhLCAweDhmNDIwMmMwLCAKLTB4YzAwMjQyNiwgMHgwLCAweDEwMDAwMTM2LCAweDAsIAotMHgyNDAyMDAwMSwgMHhhMzQyMDVjNSwgMHgyNDEwMDEwMCwgMHg4ZjQ0MDFhOCwgCi0weDhmNDUwMWFjLCAweGFmYjAwMDEwLCAweGFmYTAwMDE0LCAweDhmNDIwMDE0LCAKLTB4YWZhMjAwMTgsIDB4OGY0MjAxMDgsIDB4MjZlNjAwMjgsIDB4NDBmODA5LCAKLTB4MjQwNzA0MDAsIDB4MTA0MGZmZjUsIDB4MCwgMHgxMDAwMDEyNSwgCi0weDAsIDB4M2MwM2ZmZmYsIDB4MzQ2MzdmZmYsIDB4OGY0MjAzNjgsIAotMHg4ZjQ0MDM2MCwgMHgyYzNiMDI0LCAweDE4MjEsIDB4YWY0MDAwNTgsIAotMHhhZjQwMDA1YywgMHhhZjQwMDA2MCwgMHhhZjQwMDA2NCwgMHg0NDEwMjMsIAotMHhhZjQyMDM2OCwgMHgzYzAyMDkwMCwgMHhhZjQwMDM2MCwgMHhhZmEyMDAyMCwgCi0weDhmNWUwMDE4LCAweDI3YWEwMDIwLCAweDI0MDIwMGZmLCAweDEzYzIwMDAyLCAKLTB4YWZhYTAwM2MsIDB4MjdjMzAwMDEsIDB4OGMwMjAyMjgsIDB4NjA5MDIxLCAKLTB4MTY0MjAwMGUsIDB4MWUzOGMwLCAweDhmNDIwMzNjLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIDB4OGMwMjAyMjgsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjIwYywgMHgzYzA1MDAwOSwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgCi0weDhmYTYwMDIwLCAweDEwMDAwMDZiLCAweDM0YTUwNTAwLCAweGY3MTAyMSwgCi0weDhmYTMwMDIwLCAweDhmYTQwMDI0LCAweGFjNDMwNGMwLCAweGFjNDQwNGM0LCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgCi0weDJjNDIwM2U5LCAweDEwNDAwMDFiLCAweDk4MjEsIDB4ZTA4ODIxLCAKLTB4MjYzNTA0YzAsIDB4OGY0NDAxNzgsIDB4OGY0NTAxN2MsIDB4MjIwMTgyMSwgCi0weDI0MGEwMDA0LCAweGFmYWEwMDEwLCAweGFmYjIwMDE0LCAweDhmNDgwMDBjLCAKLTB4MTAyMSwgMHgyZjUzMDIxLCAweGFmYTgwMDE4LCAweDhmNDgwMTBjLCAKLTB4MjQwNzAwMDgsIDB4YTMyODIxLCAweGEzNDgyYiwgMHg4MjIwMjEsIAotMHgxMDBmODA5LCAweDg5MjAyMSwgMHg1NDQwMDAwNiwgMHgyNDEzMDAwMSwgCi0weDhmODIwMDU0LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTQ0MGZmZTksIAotMHgwLCAweDMyNjIwMGZmLCAweDU0NDAwMDE3LCAweGFmNTIwMDE4LCAKLTB4OGY0MjAzNzgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIAotMHg4ZjgyMDEyMCwgMHg4ZmFhMDAzYywgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgCi0weDNjMDQwMDAxLCAweDI0ODQ2MjE4LCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAKLTB4OGQ0NjAwMDAsIDB4MTAwMDAwMzMsIDB4MzRhNTA2MDAsIDB4OGY0MjAzMDgsIAotMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwgCi0weDEwMDAwMDFjLCAweDMyNjIwMGZmLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxMDQwMDAxNCwgCi0weDk4MjEsIDB4MjQxMTAwMTAsIDB4OGY0MjAwMGMsIDB4OGY0NDAxNjAsIAotMHg4ZjQ1MDE2NCwgMHg4Zjg2MDEyMCwgMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwgCi0weGFmYTIwMDE4LCAweDhmNDIwMTBjLCAweDI0MDcwMDA4LCAweDQwZjgwOSwgCi0weDI0YzYwMDFjLCAweDE0NDBmZmU1LCAweDAsIDB4OGY4MjAwNTQsIAotMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmVmLCAweDAsIAotMHgzMjYyMDBmZiwgMHgxNDQwMDAxMSwgMHgwLCAweDhmNDIwMzc4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIAotMHg4ZmFhMDAzYywgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2MjIwLCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAKLTB4MzRhNTA3MDAsIDB4YzAwMmIzYiwgMHgzYzAzODIxLCAweDhmNDIwMmIwLCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyYjAsIDB4OGY0MjAyYjAsIDB4OGY0MjAyZjgsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDJmOCwgMHgxMDAwMDA4YSwgMHg4ZjQyMDJmOCwgCi0weDhjMDIwMjVjLCAweDI3NDQwMjI0LCAweGFmNDIwMWYwLCAweDhjMDIwMjYwLCAKLTB4MjQwNTAyMDAsIDB4MjQwNjAwMDgsIDB4YzAwMmJiZiwgMHhhZjQyMDFmOCwgCi0weDhmODIwMjIwLCAweDMwNDIwMDA4LCAweDE0NDAwMDAyLCAweDI0MDIwMDAxLCAKLTB4MjQwMjAwMDIsIDB4YWY0MjAyOTgsIDB4OGY0MjAyYWMsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDJhYywgMHgxMDAwMDA3NywgMHg4ZjQyMDJhYywgMHgzYzAyMDBmZiwgCi0weDM0NDJmZmZmLCAweDIwMjE4MjQsIDB4MzJjMjAxODAsIDB4MTQ0MDAwMDYsIAotMHgzNDAyZmZmYiwgMHg0MzEwMmIsIDB4MTQ0MDAwMDMsIDB4MCwgCi0weDEwMDAwMDZjLCAweGFmNDMwMGJjLCAweDNjMDQwMDAxLCAweDI0ODQ2MjgwLCAKLTB4M2MwNTAwMDMsIDB4MzRhNTE1MDAsIDB4MjAwMzAyMSwgMHgzODIxLCAKLTB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHgzYzAyMDcwMCwgCi0weDM0NDIxMDAwLCAweDEwMWUwMiwgMHg2MjE4MjUsIDB4YWZhMzAwMjAsIAotMHg4ZjUxMDAxOCwgMHgyNDAyMDBmZiwgMHgxMjIyMDAwMiwgMHg4MDIxLCAKLTB4MjYzMDAwMDEsIDB4OGMwMjAyMjgsIDB4MTYwMjAwMGUsIDB4MTEzMGMwLCAKLTB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIAotMHg4YzAyMDIyOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjFmNCwgMHgzYzA1MDAwOSwgCi0weGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhmYTYwMDIwLCAweDEwMDAwMDNmLCAKLTB4MzRhNTAxMDAsIDB4ZDcxMDIxLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LCAKLTB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsIDB4YzAxODIxLCAweDhmNDQwMTc4LCAKLTB4OGY0NTAxN2MsIDB4MTAyMSwgMHgyNDA3MDAwNCwgMHhhZmE3MDAxMCwgCi0weGFmYjAwMDE0LCAweDhmNDgwMDBjLCAweDI0YzYwNGMwLCAweDJlNjMwMjEsIAotMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgyNDA3MDAwOCwgMHhhMzI4MjEsIAotMHhhMzQ4MmIsIDB4ODIyMDIxLCAweDEwMGY4MDksIDB4ODkyMDIxLCAKLTB4MTQ0MDAwMGIsIDB4MjQwNzAwMDgsIDB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjFmYywgMHgzYzA1MDAwOSwgCi0weGFmYTIwMDE0LCAweDhmYTYwMDIwLCAweDEwMDAwMDFjLCAweDM0YTUwMjAwLCAKLTB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY0MzAwMGMsIDB4YWY1MDAwMTgsIAotMHg4Zjg2MDEyMCwgMHgyNDAyMDAxMCwgMHhhZmEyMDAxMCwgMHhhZmIwMDAxNCwgCi0weGFmYTMwMDE4LCAweDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgCi0weDE0NDAwMDEwLCAweDAsIDB4OGY0MjAzNDAsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDM0MCwgMHg4ZjQyMDM0MCwgMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwgCi0weDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2MjA0LCAweDNjMDUwMDA5LCAKLTB4YWZhMjAwMTQsIDB4OGZhNjAwMjAsIDB4MzRhNTAzMDAsIDB4YzAwMmIzYiwgCi0weDIyMDM4MjEsIDB4OGY0MjAyZTAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZTAsIAotMHg4ZjQyMDJlMCwgMHg4ZjQyMDJmMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDJmMCwgCi0weDhmNDIwMmYwLCAweDhmYTIwMDM0LCAweDhmYmYwMDU4LCAweDhmYmUwMDU0LCAKLTB4OGZiNTAwNTAsIDB4OGZiMzAwNGMsIDB4OGZiMjAwNDgsIDB4OGZiMTAwNDQsIAotMHg4ZmIwMDA0MCwgMHgzZTAwMDA4LCAweDI3YmQwMDYwLCAweDI3YmRmZmY4LCAKLTB4MjQwOGZmZmYsIDB4MTBhMDAwMTQsIDB4NDgyMSwgMHgzYzBhZWRiOCwgCi0weDM1NGE4MzIwLCAweDkwODcwMDAwLCAweDI0ODQwMDAxLCAweDMwMjEsIAotMHgxMDcxMDI2LCAweDMwNDIwMDAxLCAweDEwNDAwMDAyLCAweDgxODQyLCAKLTB4NmExODI2LCAweDYwNDAyMSwgMHgyNGM2MDAwMSwgMHgyY2MyMDAwOCwgCi0weDE0NDBmZmY3LCAweDczODQyLCAweDI1MjkwMDAxLCAweDEyNTEwMmIsIAotMHgxNDQwZmZmMCwgMHgwLCAweDEwMDEwMjEsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDA4LCAweDI3YmRmZmIwLCAweGFmYmYwMDQ4LCAweGFmYmUwMDQ0LCAKLTB4YWZiNTAwNDAsIDB4YWZiMzAwM2MsIDB4YWZiMjAwMzgsIDB4YWZiMTAwMzQsIAotMHhhZmIwMDAzMCwgMHg4Zjg3MDIyMCwgMHhhZmE3MDAyNCwgMHg4Zjg3MDIwMCwgCi0weGFmYTcwMDJjLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLCAKLTB4NDMxMDI0LCAweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMjAwLCAKLTB4M2MwM2MwZmYsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweDM0NDIwMDA0LCAKLTB4YWY4MjAyMDAsIDB4OGY1MzAzNTgsIDB4OGY1NTAzNWMsIDB4OGY1ZTAzNjAsIAotMHg4ZjQ3MDM2NCwgMHhhZmE3MDAxNCwgMHg4ZjQ3MDM2OCwgMHhhZmE3MDAxYywgCi0weDhmNDIwMmQwLCAweDI3NDQwMWMwLCAweDI0NDIwMDAxLCAweGFmNDIwMmQwLCAKLTB4OGY1MDAyZDAsIDB4OGY1MTAyMDQsIDB4OGY1MjAyMDAsIDB4YzAwMmJhOCwgCi0weDI0MDUwNDAwLCAweGFmNTMwMzU4LCAweGFmNTUwMzVjLCAweGFmNWUwMzYwLCAKLTB4OGZhNzAwMTQsIDB4YWY0NzAzNjQsIDB4OGZhNzAwMWMsIDB4YWY0NzAzNjgsIAotMHhhZjUwMDJkMCwgMHhhZjUxMDIwNCwgMHhhZjUyMDIwMCwgMHg4YzAyMDI1YywgCi0weDI3NDQwMjI0LCAweGFmNDIwMWYwLCAweDhjMDIwMjYwLCAweDI0MDUwMjAwLCAKLTB4MjQwNjAwMDgsIDB4YWY0MjAxZjgsIDB4MjQwMjAwMDYsIDB4YzAwMmJiZiwgCi0weGFmNDIwMWY0LCAweDNjMDIzYjlhLCAweDM0NDJjYTAwLCAweGFmNDIwMWZjLCAKLTB4MjQwMjAzZTgsIDB4MjQwNDAwMDIsIDB4MjQwMzAwMDEsIDB4YWY0MjAyOTQsIAotMHhhZjQ0MDI5MCwgMHhhZjQzMDI5YywgMHg4ZjgyMDIyMCwgMHgzMDQyMDAwOCwgCi0weDEwNDAwMDA0LCAweDAsIDB4YWY0MzAyOTgsIDB4MTAwMDAwMDMsIAotMHgzMDIxLCAweGFmNDQwMjk4LCAweDMwMjEsIDB4M2MwMzAwMDEsIAotMHg2NjE4MjEsIDB4OTA2MzZkMDAsIDB4MzQ2MTAyMSwgMHgyNGM2MDAwMSwgCi0weGEwNDMwMjJjLCAweDJjYzIwMDBmLCAweDE0NDBmZmY4LCAweDM0NjE4MjEsIAotMHgyNGM2MDAwMSwgMHg4ZjgyMDA0MCwgMHgyNDA0MDA4MCwgMHgyNDA1MDA4MCwgCi0weDIxNzAyLCAweDI0NDIwMDMwLCAweGEwNjIwMjJjLCAweDM0NjEwMjEsIAotMHhjMDAyYmE4LCAweGEwNDAwMjJjLCAweDhmYTcwMDI0LCAweDMwZTIwMDA0LCAKLTB4MTQ0MDAwMDYsIDB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgCi0weDM0NjNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4ZmE3MDAyYywgCi0weDMwZTIwMDA0LCAweDE0NDAwMDA2LCAweDAsIDB4OGY4MjAyMDAsIAotMHgzYzAzYzBmZiwgMHgzNDYzZmZmYiwgMHg0MzEwMjQsIDB4YWY4MjAyMDAsIAotMHg4ZmJmMDA0OCwgMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgMHg4ZmIzMDAzYywgCi0weDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLCAweDNlMDAwMDgsIAotMHgyN2JkMDA1MCwgMHgwLCAweDAsIDB4YWY0MDAxMDQsIAotMHgyNDA0MDAwMSwgMHg0MTBjMCwgMHgyZTIxODIxLCAweDI0ODIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4MjMwODIxLCAweGE0MjIzNGQwLCAweDQwMjAyMSwgCi0weDJjODIwMDgwLCAweDE0NDBmZmY4LCAweDQxMGMwLCAweDI0MDIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGE0MjAzOGQwLCAweGFmNDIwMTAwLCAKLTB4YWY4MDAyMjgsIDB4YWY4MDAyMmMsIDB4YWY4MDAyMzAsIDB4YWY4MDAyMzQsIAotMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsIAotMHhhZmIwMDAxMCwgMHg4ZjQyMDEwNCwgMHgyODQyMDAwNSwgMHgxMDQwMDAyNiwgCi0weDgwODAyMSwgMHgzYzAyMDAwMSwgMHg4ZjQzMDEwNCwgMHgzNDQyMzBkMCwgCi0weDJlMjIwMjEsIDB4MzE4YzAsIDB4NjIxODIxLCAweDJlMzE4MjEsIAotMHg4MzEwMmIsIDB4MTA0MDAwMTUsIDB4MTAyMSwgMHg5NjA3MDAwMCwgCi0weDI0ODQwMDA2LCAweDI0NjYwMDA2LCAweDk0ODJmZmZjLCAweDE0NDcwMDA5LCAKLTB4MjgyMSwgMHg5NDgzZmZmZSwgMHg5NjAyMDAwMiwgMHgxNDYyMDAwNiwgCi0weGEwMTAyMSwgMHg5NDgyMDAwMCwgMHg5NjAzMDAwNCwgMHg0MzEwMjYsIAotMHgyYzQ1MDAwMSwgMHhhMDEwMjEsIDB4MTQ0MDAwMDksIDB4MjQ4NDAwMDgsIAotMHg4NjEwMmIsIDB4MTQ0MGZmZjAsIDB4MTAyMSwgMHgzMDQyMDBmZiwgCi0weDE0NDAwMDMwLCAweDI0MDIwMDAxLCAweDEwMDAwMDJlLCAweDEwMjEsIAotMHgxMDAwZmZmYSwgMHgyNDAyMDAwMSwgMHgyMDAyMDIxLCAweGMwMDI0MGMsIAotMHgyNDA1MDAwNiwgMHgzMDQyMDA3ZiwgMHgyMThjMCwgMHgyZTMxMDIxLCAKLTB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDk0MjIzMGQwLCAweDEwNDBmZmYyLCAKLTB4MmUzMTAyMSwgMHgzYzA2MDAwMSwgMHhjMjMwMjEsIDB4OTRjNjMwZDAsIAotMHgxMGMwZmZlZCwgMHgzYzA4MDAwMSwgMHgzNTA4MzRkMiwgMHg5NjA3MDAwMCwgCi0weDYxMGMwLCAweDU3MjAyMSwgMHg4ODIwMjEsIDB4OTQ4MjAwMDAsIAotMHgxNDQ3MDAwOSwgMHgyODIxLCAweDk0ODMwMDAyLCAweDk2MDIwMDAyLCAKLTB4MTQ2MjAwMDYsIDB4YTAxMDIxLCAweDk0ODIwMDA0LCAweDk2MDMwMDA0LCAKLTB4NDMxMDI2LCAweDJjNDUwMDAxLCAweGEwMTAyMSwgMHgxNDQwMDAwNywgCi0weDYxMGMwLCAweDJlMjEwMjEsIDB4M2MwNjAwMDEsIDB4YzIzMDIxLCAKLTB4OTRjNjM0ZDAsIDB4MTRjMGZmZWIsIDB4NjEwYzAsIDB4MTBjMGZmZDIsIAotMHgyNDAyMDAwMSwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgMHgzZTAwMDA4LCAKLTB4MjdiZDAwMTgsIDB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmIwLCAKLTB4ODAxMDIxLCAweGFmYjAwMDMwLCAweDI0NTAwMDAyLCAweDIwMDIwMjEsIAotMHgyNDA1MDAwNiwgMHhhZmIxMDAzNCwgMHg0MDg4MjEsIDB4YWZiZjAwNDgsIAotMHhhZmJlMDA0NCwgMHhhZmI1MDA0MCwgMHhhZmIzMDAzYywgMHhjMDAyNDBjLCAKLTB4YWZiMjAwMzgsIDB4MzA0NzAwN2YsIDB4NzEwYzAsIDB4MmUyMTAyMSwgCi0weDNjMDUwMDAxLCAweGEyMjgyMSwgMHg5NGE1MzBkMCwgMHg1MGEwMDAxYywgCi0weGEwMzAyMSwgMHgzYzA5MDAwMSwgMHgzNTI5MzRkMiwgMHg5NjI4MDAwMiwgCi0weDUxMGMwLCAweDU3MjAyMSwgMHg4OTIwMjEsIDB4OTQ4MjAwMDAsIAotMHgxNDQ4MDAwOSwgMHgzMDIxLCAweDk0ODMwMDAyLCAweDk2MDIwMDAyLCAKLTB4MTQ2MjAwMDYsIDB4YzAxMDIxLCAweDk0ODIwMDA0LCAweDk2MDMwMDA0LCAKLTB4NDMxMDI2LCAweDJjNDYwMDAxLCAweGMwMTAyMSwgMHgxNDQwMDAwNywgCi0weDUxMGMwLCAweDJlMjEwMjEsIDB4M2MwNTAwMDEsIDB4YTIyODIxLCAKLTB4OTRhNTM0ZDAsIDB4MTRhMGZmZWIsIDB4NTEwYzAsIDB4YTAzMDIxLCAKLTB4MTBjMDAwMTQsIDB4NjEwYzAsIDB4NTcxODIxLCAweDNjMDEwMDAxLCAKLTB4MjMwODIxLCAweDhjMjMzNGQwLCAweDU3MTAyMSwgMHhhZmEzMDAxMCwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyMzRkNCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2Mzk0LCAweGFmYTIwMDE0LCAweDhlMjYwMDAwLCAweDhlMjcwMDA0LCAKLTB4M2MwNTAwMDQsIDB4YzAwMmIzYiwgMHgzNGE1MDQwMCwgMHgxMDAwMDA2MywgCi0weDNjMDIwODAwLCAweDhmNDUwMTAwLCAweDEwYTAwMDA2LCAweDUxMGMwLCAKLTB4MmUyMTAyMSwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OTQyMjM0ZDAsIAotMHhhZjQyMDEwMCwgMHhhMDMwMjEsIDB4MTRjMDAwMTEsIDB4NjI4YzAsIAotMHg3MTBjMCwgMHgyZTIxMDIxLCAweGFmYTcwMDEwLCAweDNjMDEwMDAxLCAKLTB4MjIwODIxLCAweDk0MjIzMGQwLCAweDNjMDQwMDAxLCAweDI0ODQ2M2EwLCAKLTB4YWZhMjAwMTQsIDB4OGUyNjAwMDAsIDB4OGUyNzAwMDQsIDB4M2MwNTAwMDQsIAotMHhjMDAyYjNiLCAweDM0YTUwNTAwLCAweDEwMDAwMDQ4LCAweDNjMDIwODAwLCAKLTB4YjcxODIxLCAweDNjMDIwMDAxLCAweDk2MDQwMDAwLCAweDM0NDIzNGQyLCAKLTB4NjIxODIxLCAweGE0NjQwMDAwLCAweDhlMDIwMDAyLCAweDcyMGMwLCAKLTB4YWM2MjAwMDIsIDB4MmU0MTAyMSwgMHgzYzAzMDAwMSwgMHg2MjE4MjEsIAotMHg5NDYzMzBkMCwgMHgyZTUxMDIxLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weGE0MjMzNGQwLCAweDJlNDEwMjEsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAKLTB4YTQyNjMwZDAsIDB4OGY0MjAxMDQsIDB4MjQ0MjAwMDEsIDB4Mjg0MjAwODAsIAotMHgxMDQwMDAwZiwgMHgzYzAyMDAwMiwgMHg4ZjQyMDEwNCwgMHgzYzA0MDAwMSwgCi0weDM0ODQzMGQyLCAweDk2MDMwMDAwLCAweDIxMGMwLCAweDU3MTAyMSwgCi0weDQ0MTAyMSwgMHhhNDQzMDAwMCwgMHg4ZTAzMDAwMiwgMHhhYzQzMDAwMiwgCi0weDhmNDIwMTA0LCAweDI0NDIwMDAxLCAweGFmNDIwMTA0LCAweDNjMDIwMDAyLCAKLTB4MmMyMTAyNCwgMHgxMDQwMDAxMSwgMHg3MjE0MiwgMHgzYzAzMDAwMSwgCi0weDM0NjMzOGQ4LCAweDI0MDIwMDAzLCAweDQ0MTAyMywgMHgyMTA4MCwgCi0weDU3MjAyMSwgMHg4MzIwMjEsIDB4NTcxMDIxLCAweDQzMTAyMSwgCi0weDMwZTUwMDFmLCAweDhjNDMwMDAwLCAweDI0MDIwMDAxLCAweGEyMTAwNCwgCi0weDYyMTgyNSwgMHgxMDAwMDAwYywgMHhhYzgzMDAwMCwgMHgyNDAyMDAwMywgCi0weDQ0MTAyMywgMHgyMTA4MCwgMHg1YzI4MjEsIDB4NWMxMDIxLCAKLTB4MzBlNDAwMWYsIDB4OGM0MzAyMjgsIDB4MjQwMjAwMDEsIDB4ODIxMDA0LCAKLTB4NjIxODI1LCAweGFjYTMwMjI4LCAweDNjMDIwODAwLCAweDM0NDIxMDAwLCAKLTB4MTgyMSwgMHhhZmEyMDAyMCwgMHg4ZjVlMDAxOCwgMHgyN2FhMDAyMCwgCi0weDI0MDIwMGZmLCAweDEzYzIwMDAyLCAweGFmYWEwMDJjLCAweDI3YzMwMDAxLCAKLTB4OGMwMjAyMjgsIDB4NjA5MDIxLCAweDE2NDIwMDBlLCAweDFlMzhjMCwgCi0weDhmNDIwMzNjLCAweDI0NDIwMDAxLCAweGFmNDIwMzNjLCAweDhmNDIwMzNjLCAKLTB4OGMwMjAyMjgsIDB4M2MwNDAwMDEsIDB4MjQ4NDYzNWMsIDB4M2MwNTAwMDksIAotMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDA2YiwgCi0weDM0YTUwNTAwLCAweGY3MTAyMSwgMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgCi0weGFjNDMwNGMwLCAweGFjNDQwNGM0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxMDQwMDAxYiwgCi0weDk4MjEsIDB4ZTA4ODIxLCAweDI2MzUwNGMwLCAweDhmNDQwMTc4LCAKLTB4OGY0NTAxN2MsIDB4MjIwMTgyMSwgMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwgCi0weGFmYjIwMDE0LCAweDhmNDgwMDBjLCAweDEwMjEsIDB4MmY1MzAyMSwgCi0weGFmYTgwMDE4LCAweDhmNDgwMTBjLCAweDI0MDcwMDA4LCAweGEzMjgyMSwgCi0weGEzNDgyYiwgMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsIAotMHg1NDQwMDAwNiwgMHgyNDEzMDAwMSwgMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAKLTB4MmM0MjAzZTksIDB4MTQ0MGZmZTksIDB4MCwgMHgzMjYyMDBmZiwgCi0weDU0NDAwMDE3LCAweGFmNTIwMDE4LCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsIAotMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjM2OCwgCi0weDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDEwMDAwMDMzLCAKLTB4MzRhNTA2MDAsIDB4OGY0MjAzMDgsIDB4MjQxMzAwMDEsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwgMHgxMDAwMDAxYywgMHgzMjYyMDBmZiwgCi0weDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsIAotMHgyYzQyMDNlOSwgMHgxMDQwMDAxNCwgMHg5ODIxLCAweDI0MTEwMDEwLCAKLTB4OGY0MjAwMGMsIDB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY4NjAxMjAsIAotMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgCi0weDI0MDcwMDA4LCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwZmZlNSwgCi0weDAsIDB4OGY4MjAwNTQsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgCi0weDE0NDBmZmVmLCAweDAsIDB4MzI2MjAwZmYsIDB4MTQ0MDAwMTEsIAotMHgwLCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAKLTB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjM3MCwgMHgzYzA1MDAwOSwgCi0weGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDM0YTUwNzAwLCAweGMwMDJiM2IsIAotMHgzYzAzODIxLCAweDhmNDIwMmI0LCAweDI0NDIwMDAxLCAweGFmNDIwMmI0LCAKLTB4OGY0MjAyYjQsIDB4OGY0MjAyZjQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZjQsIAotMHg4ZjQyMDJmNCwgMHg4ZmJmMDA0OCwgMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgCi0weDhmYjMwMDNjLCAweDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDA1MCwgMHgyN2JkZmZhMCwgMHg4MDEwMjEsIAotMHhhZmIwMDA0MCwgMHgyNDUwMDAwMiwgMHgyMDAyMDIxLCAweDI0MDUwMDA2LCAKLTB4YWZiMTAwNDQsIDB4NDA4ODIxLCAweGFmYmYwMDU4LCAweGFmYmUwMDU0LCAKLTB4YWZiNTAwNTAsIDB4YWZiMzAwNGMsIDB4YzAwMjQwYywgMHhhZmIyMDA0OCwgCi0weDMwNDgwMDdmLCAweDgxMGMwLCAweDJlMjEwMjEsIDB4M2MwNjAwMDEsIAotMHhjMjMwMjEsIDB4OTRjNjMwZDAsIDB4MTBjMDAwMWMsIDB4MzgyMSwgCi0weDNjMGEwMDAxLCAweDM1NGEzNGQyLCAweDk2MjkwMDAyLCAweDYxMGMwLCAKLTB4NTcyMDIxLCAweDhhMjAyMSwgMHg5NDgyMDAwMCwgMHgxNDQ5MDAwOSwgCi0weDI4MjEsIDB4OTQ4MzAwMDIsIDB4OTYwMjAwMDIsIDB4MTQ2MjAwMDYsIAotMHhhMDEwMjEsIDB4OTQ4MjAwMDQsIDB4OTYwMzAwMDQsIDB4NDMxMDI2LCAKLTB4MmM0NTAwMDEsIDB4YTAxMDIxLCAweDE0NDAwMDA4LCAweDYxMGMwLCAKLTB4YzAzODIxLCAweDJlMjEwMjEsIDB4M2MwNjAwMDEsIDB4YzIzMDIxLCAKLTB4OTRjNjM0ZDAsIDB4MTRjMGZmZWEsIDB4NjEwYzAsIDB4MTRjMDAwMTEsIAotMHhhZmE3MDAyOCwgMHg4MTBjMCwgMHgyZTIxMDIxLCAweGFmYTgwMDEwLCAKLTB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDk0MjIzMGQwLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDYzYWMsIDB4YWZhMjAwMTQsIDB4OGUyNjAwMDAsIDB4OGUyNzAwMDQsIAotMHgzYzA1MDAwNCwgMHhjMDAyYjNiLCAweDM0YTUwOTAwLCAweDEwMDAwMDc1LCAKLTB4M2MwMjA4MDAsIDB4MTBlMDAwMGMsIDB4NjEwYzAsIDB4MmUyMTAyMSwgCi0weDNjMDMwMDAxLCAweDYyMTgyMSwgMHg5NDYzMzRkMCwgMHg3MTBjMCwgCi0weDJlMjEwMjEsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweGE0MjMzNGQwLCAKLTB4MTAwMDAwMGIsIDB4M2MwNDAwMDEsIDB4MmUyMTAyMSwgMHgzYzAzMDAwMSwgCi0weDYyMTgyMSwgMHg5NDYzMzRkMCwgMHg4MTBjMCwgMHgyZTIxMDIxLCAKLTB4M2MwMTAwMDEsIDB4MjIwODIxLCAweGE0MjMzMGQwLCAweDNjMDQwMDAxLCAKLTB4MzQ4NDMwZDAsIDB4OGY0MzAxMDAsIDB4NjEwYzAsIDB4MmUyMTAyMSwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhNDIzMzRkMCwgMHg4ZjQyMDEwNCwgCi0weDJlNDM4MjEsIDB4MjgyMSwgMHgxODQwMDAyOSwgMHhhZjQ2MDEwMCwgCi0weDI0ZTYwMDA2LCAweDk0YzNmZmZjLCAweDk2MDIwMDAwLCAweDE0NjIwMDA5LCAKLTB4MjAyMSwgMHg5NGMzZmZmZSwgMHg5NjAyMDAwMiwgMHgxNDYyMDAwNiwgCi0weDgwMTAyMSwgMHg5NGMyMDAwMCwgMHg5NjAzMDAwNCwgMHg0MzEwMjYsIAotMHgyYzQ0MDAwMSwgMHg4MDEwMjEsIDB4NTA0MDAwMTQsIDB4MjRhNTAwMDEsIAotMHg4ZjQyMDEwNCwgMHgyNDQyZmZmZiwgMHhhMjEwMmEsIDB4MTA0MDAwMGIsIAotMHgyNGU0MDAwNCwgMHg5NDgyMDAwNiwgMHg4YzgzMDAwOCwgMHhhNDgyZmZmZSwgCi0weGFjODMwMDAwLCAweDhmNDIwMTA0LCAweDI0YTUwMDAxLCAweDI0NDJmZmZmLCAKLTB4YTIxMDJhLCAweDE0NDBmZmY3LCAweDI0ODQwMDA4LCAweDhmNDIwMTA0LCAKLTB4MjQ0MmZmZmYsIDB4MTAwMDAwMDYsIDB4YWY0MjAxMDQsIDB4OGY0MjAxMDQsIAotMHgyNGM2MDAwOCwgMHhhMjEwMmEsIDB4MTQ0MGZmZGEsIDB4MjRlNzAwMDgsIAotMHg4MTBjMCwgMHgyZTIxMDIxLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weDk0MjIzMGQwLCAweDE0NDAwMDIzLCAweDNjMDIwODAwLCAweDNjMDIwMDAyLCAKLTB4MmMyMTAyNCwgMHgxMDQwMDAxMiwgMHg4MjE0MiwgMHgzYzAzMDAwMSwgCi0weDM0NjMzOGQ4LCAweDI0MDIwMDAzLCAweDQ0MTAyMywgMHgyMTA4MCwgCi0weDU3MjAyMSwgMHg4MzIwMjEsIDB4NTcxMDIxLCAweDQzMTAyMSwgCi0weDMxMDUwMDFmLCAweDI0MDMwMDAxLCAweDhjNDIwMDAwLCAweGEzMTgwNCwgCi0weDMxODI3LCAweDQzMTAyNCwgMHgxMDAwMDAwZCwgMHhhYzgyMDAwMCwgCi0weDI0MDIwMDAzLCAweDQ0MTAyMywgMHgyMTA4MCwgMHg1YzI4MjEsIAotMHg1YzEwMjEsIDB4MzEwNDAwMWYsIDB4MjQwMzAwMDEsIDB4OGM0MjAyMjgsIAotMHg4MzE4MDQsIDB4MzE4MjcsIDB4NDMxMDI0LCAweGFjYTIwMjI4LCAKLTB4M2MwMjA4MDAsIDB4MzQ0MjIwMDAsIDB4MTgyMSwgMHhhZmEyMDAyMCwgCi0weDhmNWUwMDE4LCAweDI3YWIwMDIwLCAweDI0MDIwMGZmLCAweDEzYzIwMDAyLCAKLTB4YWZhYjAwMzQsIDB4MjdjMzAwMDEsIDB4OGMwMjAyMjgsIDB4NjA5MDIxLCAKLTB4MTY0MjAwMGUsIDB4MWUzOGMwLCAweDhmNDIwMzNjLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIDB4OGMwMjAyMjgsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjM1YywgMHgzYzA1MDAwOSwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgCi0weDhmYTYwMDIwLCAweDEwMDAwMDZiLCAweDM0YTUwNTAwLCAweGY3MTAyMSwgCi0weDhmYTMwMDIwLCAweDhmYTQwMDI0LCAweGFjNDMwNGMwLCAweGFjNDQwNGM0LCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgCi0weDJjNDIwM2U5LCAweDEwNDAwMDFiLCAweDk4MjEsIDB4ZTA4ODIxLCAKLTB4MjYzNTA0YzAsIDB4OGY0NDAxNzgsIDB4OGY0NTAxN2MsIDB4MjIwMTgyMSwgCi0weDI0MGIwMDA0LCAweGFmYWIwMDEwLCAweGFmYjIwMDE0LCAweDhmNDgwMDBjLCAKLTB4MTAyMSwgMHgyZjUzMDIxLCAweGFmYTgwMDE4LCAweDhmNDgwMTBjLCAKLTB4MjQwNzAwMDgsIDB4YTMyODIxLCAweGEzNDgyYiwgMHg4MjIwMjEsIAotMHgxMDBmODA5LCAweDg5MjAyMSwgMHg1NDQwMDAwNiwgMHgyNDEzMDAwMSwgCi0weDhmODIwMDU0LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTQ0MGZmZTksIAotMHgwLCAweDMyNjIwMGZmLCAweDU0NDAwMDE3LCAweGFmNTIwMDE4LCAKLTB4OGY0MjAzNzgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIAotMHg4ZjgyMDEyMCwgMHg4ZmFiMDAzNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgCi0weDNjMDQwMDAxLCAweDI0ODQ2MzY4LCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAKLTB4OGQ2NjAwMDAsIDB4MTAwMDAwMzMsIDB4MzRhNTA2MDAsIDB4OGY0MjAzMDgsIAotMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwgCi0weDEwMDAwMDFjLCAweDMyNjIwMGZmLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxMDQwMDAxNCwgCi0weDk4MjEsIDB4MjQxMTAwMTAsIDB4OGY0MjAwMGMsIDB4OGY0NDAxNjAsIAotMHg4ZjQ1MDE2NCwgMHg4Zjg2MDEyMCwgMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwgCi0weGFmYTIwMDE4LCAweDhmNDIwMTBjLCAweDI0MDcwMDA4LCAweDQwZjgwOSwgCi0weDI0YzYwMDFjLCAweDE0NDBmZmU1LCAweDAsIDB4OGY4MjAwNTQsIAotMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmVmLCAweDAsIAotMHgzMjYyMDBmZiwgMHgxNDQwMDAxMSwgMHgwLCAweDhmNDIwMzc4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIAotMHg4ZmFiMDAzNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2MzcwLCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNjYwMDAwLCAKLTB4MzRhNTA3MDAsIDB4YzAwMmIzYiwgMHgzYzAzODIxLCAweDhmNDIwMmI4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyYjgsIDB4OGY0MjAyYjgsIDB4OGY0MjAyZjQsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDJmNCwgMHg4ZjQyMDJmNCwgMHg4ZmJmMDA1OCwgCi0weDhmYmUwMDU0LCAweDhmYjUwMDUwLCAweDhmYjMwMDRjLCAweDhmYjIwMDQ4LCAKLTB4OGZiMTAwNDQsIDB4OGZiMDAwNDAsIDB4M2UwMDAwOCwgMHgyN2JkMDA2MCwgCi0weDAsIDB4MCwgMHgwLCAweDI3YmRmZmUwLCAKLTB4Mjc2NDQwMDAsIDB4YWZiZjAwMTgsIDB4YzAwMmJhOCwgMHgyNDA1MTAwMCwgCi0weDNjMDMwMDAxLCAweDM0NjMyY2MwLCAweDNjMDQwMDAxLCAweDM0ODQyZWM4LCAKLTB4MjQwMjAwMjAsIDB4YWY4MjAxMWMsIDB4MmUzMTAyMSwgMHhhZjgwMDEwMCwgCi0weGFmODAwMTA0LCAweGFmODAwMTA4LCAweGFmODAwMTEwLCAweGFmODAwMTE0LCAKLTB4YWY4MDAxMTgsIDB4YWY4MDAxMjAsIDB4YWY4MDAxMjQsIDB4YWY4MDAxMjgsIAotMHhhZjgwMDEzMCwgMHhhZjgwMDEzNCwgMHhhZjgwMDEzOCwgMHhhZjQyMDBlYywgCi0weDJlMzEwMjEsIDB4YWY0MjAwZjAsIDB4MmU0MTAyMSwgMHhhZjQyMDBmNCwgCi0weDJlNDEwMjEsIDB4YWY0MjAwZjgsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAKLTB4OTA0MjQwZjQsIDB4MTQ0MDAwMWMsIDB4M2MwNTAwMDEsIDB4OGY4MjAxMWMsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjQ3MCwgMHgzYzA1MDAwMSwgMHgzNDQyMDAwMSwgCi0weGFmODIwMTFjLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMTFjLCAKLTB4MzRhNTAxMDAsIDB4YzAwMmIzYiwgMHgzODIxLCAweDhjMDIwMjE4LCAKLTB4MzA0MjAwNDAsIDB4MTA0MDAwMTQsIDB4MCwgMHg4ZjgyMDExYywgCi0weDNjMDQwMDAxLCAweDI0ODQ2NDdjLCAweDNjMDUwMDAxLCAweDM0NDIwMDA0LCAKLTB4YWY4MjAxMWMsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMWMsIAotMHgxMDAwMDAwNywgMHgzNGE1MDIwMCwgMHgzYzA0MDAwMSwgMHgyNDg0NjQ4NCwgCi0weGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMTFjLCAweDM0YTUwMzAwLCAKLTB4YzAwMmIzYiwgMHgzODIxLCAweDhmYmYwMDE4LCAweDNlMDAwMDgsIAotMHgyN2JkMDAyMCwgMHg4ZmE5MDAxMCwgMHg4ZjgzMDEyYywgMHg4ZmFhMDAxNCwgCi0weDhmYWIwMDE4LCAweDEwNjAwMDBhLCAweDI3NjI0ZmUwLCAweDE0NjIwMDAyLCAKLTB4MjQ2ODAwMjAsIDB4Mjc2ODQ4MDAsIDB4OGY4MjAxMjgsIDB4MTEwMjAwMDQsIAotMHgwLCAweDhmODIwMTI0LCAweDE1MDIwMDA3LCAweDAsIAotMHg4ZjQzMDMzNCwgMHgxMDIxLCAweDI0NjMwMDAxLCAweGFmNDMwMzM0LCAKLTB4MTAwMDAwMzksIDB4OGY0MzAzMzQsIDB4YWM2NDAwMDAsIDB4YWM2NTAwMDQsIAotMHhhYzY2MDAwOCwgMHhhNDY3MDAwZSwgMHhhYzY5MDAxOCwgMHhhYzZhMDAxYywgCi0weGFjNmIwMDEwLCAweGFjNjIwMDE0LCAweGFmODgwMTIwLCAweDhmNDIwMGZjLCAKLTB4OGY0NDAwZjQsIDB4MjQ0MmZmZmYsIDB4YWY0MjAwZmMsIDB4OGM4MjAwMDAsIAotMHgxMDQ5MDAwNSwgMHgzMDQyZmY4ZiwgMHgxMDQwMDAxOSwgMHgzMTIyZmY4ZiwgCi0weDEwNDAwMDE4LCAweDNjMDIwMDAxLCAweDhjODMwMDA0LCAweDJjNjIwMDEwLCAKLTB4MTA0MDAwMTMsIDB4M2MwMjAwMDEsIDB4MjQ2MzAwMDEsIDB4YWM4MzAwMDQsIAotMHg4ZjQzMDBmOCwgMHgzNDQyMzBjOCwgMHgyZTIxMDIxLCAweDU0NjIwMDA0LCAKLTB4MjQ2MjAwMDgsIDB4M2MwMjAwMDEsIDB4MzQ0MjJlYzgsIDB4MmUyMTAyMSwgCi0weDE0NDQwMDE1LCAweDI0MDIwMDAxLCAweDhmODIwMTI4LCAweDI0NDIwMDIwLCAKLTB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4MTAwMDAwMGYsIDB4MjQwMjAwMDEsIAotMHgzYzAyMDAwMSwgMHgzNDQyMzBjOCwgMHgyZTIxMDIxLCAweDU0ODIwMDA0LCAKLTB4MjQ4MjAwMDgsIDB4M2MwMjAwMDEsIDB4MzQ0MjJlYzgsIDB4MmUyMTAyMSwgCi0weDQwMjAyMSwgMHgyNDAyMDAwMSwgMHhhZjQ0MDBmNCwgMHhhYzg5MDAwMCwgCi0weGFjODIwMDA0LCAweDI0MDIwMDAxLCAweDNlMDAwMDgsIDB4MCwgCi0weDNlMDAwMDgsIDB4MCwgMHg4ZmE5MDAxMCwgMHg4ZjgzMDEwYywgCi0weDhmYWEwMDE0LCAweDhmYWIwMDE4LCAweDEwNjAwMDBhLCAweDI3NjI0N2UwLCAKLTB4MTQ2MjAwMDIsIDB4MjQ2ODAwMjAsIDB4Mjc2ODQwMDAsIDB4OGY4MjAxMDgsIAotMHgxMTAyMDAwNCwgMHgwLCAweDhmODIwMTA0LCAweDE1MDIwMDA3LCAKLTB4MCwgMHg4ZjQzMDMzOCwgMHgxMDIxLCAweDI0NjMwMDAxLCAKLTB4YWY0MzAzMzgsIDB4MTAwMDAwMzUsIDB4OGY0MzAzMzgsIDB4YWM2NDAwMDAsIAotMHhhYzY1MDAwNCwgMHhhYzY2MDAwOCwgMHhhNDY3MDAwZSwgMHhhYzY5MDAxOCwgCi0weGFjNmEwMDFjLCAweGFjNmIwMDEwLCAweGFjNjIwMDE0LCAweGFmODgwMTAwLCAKLTB4OGY0NDAwZWMsIDB4OGM4MjAwMDAsIDB4MzA0MjAwMDYsIDB4MTA0MDAwMTksIAotMHgzMTIyMDAwNiwgMHgxMDQwMDAxOCwgMHgzYzAyMDAwMSwgMHg4YzgzMDAwNCwgCi0weDJjNjIwMDEwLCAweDEwNDAwMDEzLCAweDNjMDIwMDAxLCAweDI0NjMwMDAxLCAKLTB4YWM4MzAwMDQsIDB4OGY0MzAwZjAsIDB4MzQ0MjJlYzAsIDB4MmUyMTAyMSwgCi0weDU0NjIwMDA0LCAweDI0NjIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyY2MwLCAKLTB4MmUyMTAyMSwgMHgxNDQ0MDAxNSwgMHgyNDAyMDAwMSwgMHg4ZjgyMDEwOCwgCi0weDI0NDIwMDIwLCAweGFmODIwMTA4LCAweDhmODIwMTA4LCAweDEwMDAwMDBmLCAKLTB4MjQwMjAwMDEsIDB4M2MwMjAwMDEsIDB4MzQ0MjJlYzAsIDB4MmUyMTAyMSwgCi0weDU0ODIwMDA0LCAweDI0ODIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyY2MwLCAKLTB4MmUyMTAyMSwgMHg0MDIwMjEsIDB4MjQwMjAwMDEsIDB4YWY0NDAwZWMsIAotMHhhYzg5MDAwMCwgMHhhYzgyMDAwNCwgMHgyNDAyMDAwMSwgMHgzZTAwMDA4LCAKLTB4MCwgMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjQ4YywgMHgzYzA1MDAwMSwgMHhhZmJmMDAyNCwgCi0weGFmYjIwMDIwLCAweGFmYjEwMDFjLCAweGFmYjAwMDE4LCAweDhmOTAwMTA0LCAKLTB4OGY5MTAwYjAsIDB4OGY5MjAxMWMsIDB4MzRhNTI1MDAsIDB4OGY4MjAxMDAsIAotMHgyNDAzMDIxLCAweDIyMDM4MjEsIDB4YWZhMjAwMTAsIDB4YzAwMmIzYiwgCi0weGFmYjAwMDE0LCAweDhlMDIwMDA4LCAweGFmYTIwMDEwLCAweDhlMDIwMDBjLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDY0OTgsIDB4YWZhMjAwMTQsIDB4OGUwNjAwMDAsIAotMHg4ZTA3MDAwNCwgMHgzYzA1MDAwMSwgMHhjMDAyYjNiLCAweDM0YTUyNTEwLCAKLTB4OGUwMjAwMTgsIDB4YWZhMjAwMTAsIDB4OGUwMjAwMWMsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjRhNCwgMHhhZmEyMDAxNCwgMHg4ZTA2MDAxMCwgMHg4ZTA3MDAxNCwgCi0weDNjMDUwMDAxLCAweGMwMDJiM2IsIDB4MzRhNTI1MjAsIDB4M2MwMjdmMDAsIAotMHgyMjIxMDI0LCAweDNjMDMwODAwLCAweDU0NDMwMDE2LCAweDNjMDMwMjAwLCAKLTB4OGY4MjAwOWMsIDB4MzA0MmZmZmYsIDB4MTQ0MDAwMTIsIDB4M2MwMzAyMDAsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjRiMCwgMHgzYzA1MDAwMiwgMHgzNGE1ZjAzMCwgCi0weDMwMjEsIDB4MzgyMSwgMHgzNjQyMDAwMiwgMHhhZjgyMDExYywgCi0weDM2MjIwMDAxLCAweGFmODIwMGIwLCAweGFmOTAwMTA0LCAweGFmOTIwMTFjLCAKLTB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHgxMDAwMDAyNCwgCi0weDAsIDB4MmMzMTAyNCwgMHgxMDQwMDAwZCwgMHgyMjMxMDI0LCAKLTB4MTA0MDAwMGIsIDB4MzY0MjAwMDIsIDB4YWY4MjAxMWMsIDB4MzYyMjAwMDEsIAotMHhhZjgyMDBiMCwgMHhhZjkwMDEwNCwgMHhhZjkyMDExYywgMHg4ZjQyMDMzMCwgCi0weDI0NDIwMDAxLCAweGFmNDIwMzMwLCAweDEwMDAwMDE1LCAweDhmNDIwMzMwLCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDY0YjgsIDB4MjQwMjAyYTksIDB4YWZhMjAwMTAsIAotMHhhZmEwMDAxNCwgMHg4Zjg2MDE0NCwgMHgzYzA3MDAwMSwgMHgyNGU3NjRjMCwgCi0weGMwMDJiM2IsIDB4MzQwNWRlYWQsIDB4OGY4MjAxMWMsIDB4MzQ0MjAwMDIsIAotMHhhZjgyMDExYywgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIyMCwgCi0weDhmODIwMTQwLCAweDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDE0MCwgCi0weDhmYmYwMDI0LCAweDhmYjIwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZkOCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2NGU4LCAweDNjMDUwMDAxLCAweGFmYmYwMDI0LCAweGFmYjIwMDIwLCAKLTB4YWZiMTAwMWMsIDB4YWZiMDAwMTgsIDB4OGY5MDAxMjQsIDB4OGY5MTAwYTAsIAotMHg4ZjkyMDExYywgMHgzNGE1MjYwMCwgMHg4ZjgyMDEyMCwgMHgyNDAzMDIxLCAKLTB4MjIwMzgyMSwgMHhhZmEyMDAxMCwgMHhjMDAyYjNiLCAweGFmYjAwMDE0LCAKLTB4OGUwMjAwMDgsIDB4YWZhMjAwMTAsIDB4OGUwMjAwMGMsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjRmNCwgMHhhZmEyMDAxNCwgMHg4ZTA2MDAwMCwgMHg4ZTA3MDAwNCwgCi0weDNjMDUwMDAxLCAweGMwMDJiM2IsIDB4MzRhNTI2MTAsIDB4OGUwMjAwMTgsIAotMHhhZmEyMDAxMCwgMHg4ZTAyMDAxYywgMHgzYzA0MDAwMSwgMHgyNDg0NjUwMCwgCi0weGFmYTIwMDE0LCAweDhlMDYwMDEwLCAweDhlMDcwMDE0LCAweDNjMDUwMDAxLCAKLTB4YzAwMmIzYiwgMHgzNGE1MjYyMCwgMHgzYzAyN2YwMCwgMHgyMjIxMDI0LCAKLTB4M2MwMzA4MDAsIDB4NTQ0MzAwMTYsIDB4M2MwMzAyMDAsIDB4OGY4MjAwYWMsIAotMHgzMDQyZmZmZiwgMHgxNDQwMDAxMiwgMHgzYzAzMDIwMCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2NTBjLCAweDNjMDUwMDAxLCAweDM0YTVmMDMwLCAweDMwMjEsIAotMHgzODIxLCAweDM2NDIwMDAyLCAweGFmODIwMTFjLCAweDM2MjIwMDAxLCAKLTB4YWY4MjAwYTAsIDB4YWY5MDAxMjQsIDB4YWY5MjAxMWMsIDB4YWZhMDAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDEwMDAwMDI0LCAweDAsIAotMHgyYzMxMDI0LCAweDEwNDAwMDBkLCAweDIyMzEwMjQsIDB4MTA0MDAwMGIsIAotMHgzNjQyMDAwMiwgMHhhZjgyMDExYywgMHgzNjIyMDAwMSwgMHhhZjgyMDBhMCwgCi0weGFmOTAwMTI0LCAweGFmOTIwMTFjLCAweDhmNDIwMzJjLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzMmMsIDB4MTAwMDAwMTUsIDB4OGY0MjAzMmMsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjRiOCwgMHgyNDAyMDJlMiwgMHhhZmEyMDAxMCwgMHhhZmEwMDAxNCwgCi0weDhmODYwMTQ0LCAweDNjMDcwMDAxLCAweDI0ZTc2NGMwLCAweGMwMDJiM2IsIAotMHgzNDA1ZGVhZCwgMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwgMHhhZjgyMDExYywgCi0weDhmODIwMjIwLCAweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMTQwLCAKLTB4M2MwMzAwMDEsIDB4NDMxMDI1LCAweGFmODIwMTQwLCAweDhmYmYwMDI0LCAKLTB4OGZiMjAwMjAsIDB4OGZiMTAwMWMsIDB4OGZiMDAwMTgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDI4LCAweDYwMjEsIDB4NTAyMSwgMHgzMDIxLCAKLTB4MjgyMSwgMHg2ODIxLCAweDQ4MjEsIDB4NzgyMSwgCi0weDcwMjEsIDB4OGY4ODAxMjQsIDB4OGY4NzAxMDQsIDB4MTU4MDAwMmUsIAotMHg4ZjhiMDExYywgMHgxMWEwMDAxNCwgMHgzMTYyMDgwMCwgMHg4ZjgyMDEyMCwgCi0weDEwNDYwMDI5LCAweDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsIAotMHg4Y2MyMDAwMCwgMHg4Y2MzMDAwNCwgMHhhYzgyMDAwMCwgMHhhYzgzMDAwNCwgCi0weDhjYzIwMDA4LCAweGFjODIwMDA4LCAweDk0YzIwMDBlLCAweGE0ODIwMDBlLCAKLTB4OGNjMjAwMTAsIDB4MjQwYzAwMDEsIDB4YWM4MjAwMTAsIDB4OGNjMjAwMTQsIAotMHgxMDAwMDAxMiwgMHgyNGM2MDAyMCwgMHgxMDQwMDAxNywgMHgwLCAKLTB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsIDB4OGQwMjAwMDAsIDB4OGQwMzAwMDQsIAotMHhhYzgyMDAwMCwgMHhhYzgzMDAwNCwgMHg4ZDAyMDAwOCwgMHhhYzgyMDAwOCwgCi0weDk1MDIwMDBlLCAweGE0ODIwMDBlLCAweDhkMDIwMDEwLCAweDI1MDYwMDIwLCAKLTB4YWM4MjAwMTAsIDB4OGQwMjAwMTQsIDB4MjQwYzAwMDEsIDB4YzAxODIxLCAKLTB4YWM4MjAwMTQsIDB4Mjc2MjRmZTAsIDB4NDMxMDJiLCAweDU0NDAwMDAxLCAKLTB4Mjc2MzQ4MDAsIDB4NjAzMDIxLCAweDE1NDAwMDJmLCAweDMxNjIwMTAwLCAKLTB4MTEyMDAwMTQsIDB4MzE2MjgwMDAsIDB4OGY4MjAxMDAsIDB4MTA0NTAwMmEsIAotMHgzMTYyMDEwMCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmVlMCwgMHg4Y2EyMDAwMCwgCi0weDhjYTMwMDA0LCAweGFjODIwMDAwLCAweGFjODMwMDA0LCAweDhjYTIwMDA4LCAKLTB4YWM4MjAwMDgsIDB4OTRhMjAwMGUsIDB4YTQ4MjAwMGUsIDB4OGNhMjAwMTAsIAotMHgyNDBhMDAwMSwgMHhhYzgyMDAxMCwgMHg4Y2EyMDAxNCwgMHgxMDAwMDAxMiwgCi0weDI0YTUwMDIwLCAweDEwNDAwMDE4LCAweDMxNjIwMTAwLCAweDNjMDQwMDAxLCAKLTB4OGM4NDZlZTAsIDB4OGNlMjAwMDAsIDB4OGNlMzAwMDQsIDB4YWM4MjAwMDAsIAotMHhhYzgzMDAwNCwgMHg4Y2UyMDAwOCwgMHhhYzgyMDAwOCwgMHg5NGUyMDAwZSwgCi0weGE0ODIwMDBlLCAweDhjZTIwMDEwLCAweDI0ZTUwMDIwLCAweGFjODIwMDEwLCAKLTB4OGNlMjAwMTQsIDB4MjQwYTAwMDEsIDB4YTAxODIxLCAweGFjODIwMDE0LCAKLTB4Mjc2MjQ3ZTAsIDB4NDMxMDJiLCAweDU0NDAwMDAxLCAweDI3NjM0MDAwLCAKLTB4NjAyODIxLCAweDMxNjIwMTAwLCAweDU0NDAwMDFkLCAweDMxNjIxMDAwLCAKLTB4MTFhMDAwMDksIDB4MzFhMjA4MDAsIDB4MTA0MDAwMDQsIDB4MjUwMjAwMjAsIAotMHg4ZjgyMDBhOCwgMHhhNWUyMDAwMCwgMHgyNTAyMDAyMCwgMHhhZjgyMDEyNCwgCi0weDhmODgwMTI0LCAweDY4MjEsIDB4MTE4MDAwMTEsIDB4MzE2MjEwMDAsIAotMHgzYzA0MDAwMSwgMHg4Yzg0NmVlNCwgMHg4YzgyMDAwMCwgMHg4YzgzMDAwNCwgCi0weGFmODIwMDgwLCAweGFmODMwMDg0LCAweDhjODIwMDA4LCAweGFmODIwMGE0LCAKLTB4OTQ4MjAwMGUsIDB4YWY4MjAwYWMsIDB4OGM4MjAwMTAsIDB4NjAyMSwgCi0weGFmODIwMGEwLCAweDhjOGQwMDEwLCAweDhjOGYwMDE0LCAweDMxNjIxMDAwLCAKLTB4MTQ0MGZmODIsIDB4MCwgMHgxMTIwMDAwZiwgMHgzMTIyMDgwMCwgCi0weDEwNDAwMDA0LCAweDNjMDIwMDAyLCAweDhmODIwMGI4LCAweGE1YzIwMDAwLCAKLTB4M2MwMjAwMDIsIDB4MTIyMTAyNCwgMHgxMDQwMDAwNCwgMHgyNGUyMDAyMCwgCi0weDhmODIwMGI0LCAweGFmODIwMGQ0LCAweDI0ZTIwMDIwLCAweGFmODIwMTA0LCAKLTB4OGY4NzAxMDQsIDB4NDgyMSwgMHgxMTQwZmY3MCwgMHgwLCAKLTB4M2MwNDAwMDEsIDB4OGM4NDZlZTAsIDB4OGM4MjAwMDAsIDB4OGM4MzAwMDQsIAotMHhhZjgyMDA5MCwgMHhhZjgzMDA5NCwgMHg4YzgyMDAwOCwgMHhhZjgyMDBiNCwgCi0weDk0ODIwMDBlLCAweGFmODIwMDljLCAweDhjODIwMDEwLCAweDUwMjEsIAotMHhhZjgyMDBiMCwgMHg4Yzg5MDAxMCwgMHgxMDAwZmY2MCwgMHg4YzhlMDAxNCwgCi0weDNlMDAwMDgsIDB4MCwgMHg2MDIxLCAweDU4MjEsIAotMHgzMDIxLCAweDI4MjEsIDB4NjgyMSwgMHg1MDIxLCAKLTB4NzgyMSwgMHg3MDIxLCAweDhmODgwMTI0LCAweDhmODcwMTA0LCAKLTB4M2MxODAxMDAsIDB4MTU4MDAwMmUsIDB4OGY4OTAxMWMsIDB4MTFhMDAwMTQsIAotMHgzMTIyMDgwMCwgMHg4ZjgyMDEyMCwgMHgxMDQ2MDAyOSwgMHgwLCAKLTB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsIDB4OGNjMjAwMDAsIDB4OGNjMzAwMDQsIAotMHhhYzgyMDAwMCwgMHhhYzgzMDAwNCwgMHg4Y2MyMDAwOCwgMHhhYzgyMDAwOCwgCi0weDk0YzIwMDBlLCAweGE0ODIwMDBlLCAweDhjYzIwMDEwLCAweDI0MGMwMDAxLCAKLTB4YWM4MjAwMTAsIDB4OGNjMjAwMTQsIDB4MTAwMDAwMTIsIDB4MjRjNjAwMjAsIAotMHgxMDQwMDAxNywgMHgwLCAweDNjMDQwMDAxLCAweDhjODQ2ZWU0LCAKLTB4OGQwMjAwMDAsIDB4OGQwMzAwMDQsIDB4YWM4MjAwMDAsIDB4YWM4MzAwMDQsIAotMHg4ZDAyMDAwOCwgMHhhYzgyMDAwOCwgMHg5NTAyMDAwZSwgMHhhNDgyMDAwZSwgCi0weDhkMDIwMDEwLCAweDI1MDYwMDIwLCAweGFjODIwMDEwLCAweDhkMDIwMDE0LCAKLTB4MjQwYzAwMDEsIDB4YzAxODIxLCAweGFjODIwMDE0LCAweDI3NjI0ZmUwLCAKLTB4NDMxMDJiLCAweDU0NDAwMDAxLCAweDI3NjM0ODAwLCAweDYwMzAyMSwgCi0weDE1NjAwMDJmLCAweDMxMjIwMTAwLCAweDExNDAwMDE0LCAweDMxMjI4MDAwLCAKLTB4OGY4MjAxMDAsIDB4MTA0NTAwMmEsIDB4MzEyMjAxMDAsIDB4M2MwNDAwMDEsIAotMHg4Yzg0NmVlMCwgMHg4Y2EyMDAwMCwgMHg4Y2EzMDAwNCwgMHhhYzgyMDAwMCwgCi0weGFjODMwMDA0LCAweDhjYTIwMDA4LCAweGFjODIwMDA4LCAweDk0YTIwMDBlLCAKLTB4YTQ4MjAwMGUsIDB4OGNhMjAwMTAsIDB4MjQwYjAwMDEsIDB4YWM4MjAwMTAsIAotMHg4Y2EyMDAxNCwgMHgxMDAwMDAxMiwgMHgyNGE1MDAyMCwgMHgxMDQwMDAxOCwgCi0weDMxMjIwMTAwLCAweDNjMDQwMDAxLCAweDhjODQ2ZWUwLCAweDhjZTIwMDAwLCAKLTB4OGNlMzAwMDQsIDB4YWM4MjAwMDAsIDB4YWM4MzAwMDQsIDB4OGNlMjAwMDgsIAotMHhhYzgyMDAwOCwgMHg5NGUyMDAwZSwgMHhhNDgyMDAwZSwgMHg4Y2UyMDAxMCwgCi0weDI0ZTUwMDIwLCAweGFjODIwMDEwLCAweDhjZTIwMDE0LCAweDI0MGIwMDAxLCAKLTB4YTAxODIxLCAweGFjODIwMDE0LCAweDI3NjI0N2UwLCAweDQzMTAyYiwgCi0weDU0NDAwMDAxLCAweDI3NjM0MDAwLCAweDYwMjgyMSwgMHgzMTIyMDEwMCwgCi0weDU0NDAwMDFkLCAweDMxMjIxMDAwLCAweDExYTAwMDA5LCAweDMxYTIwODAwLCAKLTB4MTA0MDAwMDQsIDB4MjUwMjAwMjAsIDB4OGY4MjAwYTgsIDB4YTVlMjAwMDAsIAotMHgyNTAyMDAyMCwgMHhhZjgyMDEyNCwgMHg4Zjg4MDEyNCwgMHg2ODIxLCAKLTB4MTE4MDAwMTEsIDB4MzEyMjEwMDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsIAotMHg4YzgyMDAwMCwgMHg4YzgzMDAwNCwgMHhhZjgyMDA4MCwgMHhhZjgzMDA4NCwgCi0weDhjODIwMDA4LCAweGFmODIwMGE0LCAweDk0ODIwMDBlLCAweGFmODIwMGFjLCAKLTB4OGM4MjAwMTAsIDB4NjAyMSwgMHhhZjgyMDBhMCwgMHg4YzhkMDAxMCwgCi0weDhjOGYwMDE0LCAweDMxMjIxMDAwLCAweDE0NDAwMDIyLCAweDAsIAotMHgxMTQwMDAwZiwgMHgzMTQyMDgwMCwgMHgxMDQwMDAwNCwgMHgzYzAyMDAwMiwgCi0weDhmODIwMGI4LCAweGE1YzIwMDAwLCAweDNjMDIwMDAyLCAweDE0MjEwMjQsIAotMHgxMDQwMDAwNCwgMHgyNGUyMDAyMCwgMHg4ZjgyMDBiNCwgMHhhZjgyMDBkNCwgCi0weDI0ZTIwMDIwLCAweGFmODIwMTA0LCAweDhmODcwMTA0LCAweDUwMjEsIAotMHgxMTYwMDAxMCwgMHgwLCAweDNjMDQwMDAxLCAweDhjODQ2ZWUwLCAKLTB4OGM4MjAwMDAsIDB4OGM4MzAwMDQsIDB4YWY4MjAwOTAsIDB4YWY4MzAwOTQsIAotMHg4YzgyMDAwOCwgMHhhZjgyMDBiNCwgMHg5NDgyMDAwZSwgMHhhZjgyMDA5YywgCi0weDhjODIwMDEwLCAweDU4MjEsIDB4YWY4MjAwYjAsIDB4OGM4YTAwMTAsIAotMHg4YzhlMDAxNCwgMHg4ZjgyMDA3MCwgMHgzYzAzMTAwMCwgMHg0MzEwMjQsIAotMHgxMDQwZmY1YywgMHgwLCAweDhmODIwMDU0LCAweDI0NDIwMDA1LCAKLTB4YWY4MjAwNzgsIDB4OGMwNDAyMzQsIDB4MTA4MDAwMTYsIDB4MTgyMSwgCi0weDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyNDBlOCwgMHgyNDQyMDAwNSwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyNDBlOCwgMHgzYzAyMDAwMSwgCi0weDU3MTAyMSwgMHg4YzQyNDBlOCwgMHg0NDEwMmIsIDB4MTQ0MDAwMDksIAotMHgyNDAyMDAwMSwgMHgzYzAzMDA4MCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhYzIwNDBlOCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4MTAwMDAwMGMsIAotMHhhMDIyNDBmMCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjQwZjAsIAotMHgxNDQwMDAwNiwgMHgzYzAyMDA4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIAotMHg5MDQyNDBmMSwgMHgxMDQwMDAwMiwgMHgzYzAyMDA4MCwgMHg2MjE4MjUsIAotMHg4YzA0MDIzMCwgMHgxMDgwMDAxMywgMHgwLCAweDNjMDIwMDAxLCAKLTB4NTcxMDIxLCAweDhjNDI0MGVjLCAweDI0NDIwMDA1LCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGFjMjI0MGVjLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgCi0weDhjNDI0MGVjLCAweDQ0MTAyYiwgMHgxNDQwMDAwNiwgMHgwLCAKLTB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjA0MGVjLCAweDEwMDAwMDA2LCAKLTB4NzgxODI1LCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyNDBmMiwgCi0weDU0NDAwMDAxLCAweDc4MTgyNSwgMHgxMDYwZmYxYSwgMHgwLCAKLTB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIDB4MCwgMHhhZjgwMDA0YywgCi0weDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsIAotMHgwLCAweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAweDEwNDBmZmZkLCAKLTB4MCwgMHg4ZjgyMDA2MCwgMHg0MzEwMjUsIDB4YWY4MjAwNjAsIAotMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAweDEwMDBmZjA1LCAKLTB4YWY4MDAwNGMsIDB4MTAwMGZmMDMsIDB4YWY4MDAwNDgsIDB4M2UwMDAwOCwgCi0weDAsIDB4MCwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjZkMjgsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsIDB4MTQ0MDAwMTIsIAotMHhhZmIwMDAxMCwgMHgzYzEwMDAwMSwgMHgyNjEwNmY5MCwgMHgyMDAyMDIxLCAKLTB4YzAwMmJhOCwgMHgyNDA1MjAwMCwgMHgyNjAyMWZlMCwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZWVjLCAweDNjMDEwMDAxLCAweGFjMjI2ZWU4LCAweGFjMDIwMjUwLCAKLTB4MjQwMjIwMDAsIDB4YWMxMDAyNTQsIDB4YWMwMjAyNTgsIDB4MjQwMjAwMDEsIAotMHgzYzAxMDAwMSwgMHhhYzIyNmQyOCwgMHg4ZmJmMDAxNCwgMHg4ZmIwMDAxMCwgCi0weDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwOTAwMDEsIDB4OGQyOTZlZWMsIAotMHg4YzgyMDAwMCwgMHg4ZmEzMDAxMCwgMHg4ZmE4MDAxNCwgMHhhZDIyMDAwMCwgCi0weDhjODIwMDA0LCAweGFkMjUwMDA4LCAweGFkMjIwMDA0LCAweDhmODIwMDU0LCAKLTB4YWQyNjAwMTAsIDB4YWQyNzAwMTQsIDB4YWQyMzAwMTgsIDB4YWQyODAwMWMsIAotMHhhZDIyMDAwYywgMHgyNTI5ZmZlMCwgMHgzYzAyMDAwMSwgMHgyNDQyNmY5MCwgCi0weDEyMjEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgMHgzYzA5MDAwMSwgCi0weDhkMjk2ZWU4LCAweDNjMDIwMDAxLCAweDhjNDI2ZDEwLCAweGFkMjIwMDAwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZkMTAsIDB4M2MwMTAwMDEsIDB4YWMyOTZlZWMsIAotMHhhZDIyMDAwNCwgMHhhYzA5MDI1MCwgMHgzZTAwMDA4LCAweDAsIAotMHgyN2JkZmZkMCwgMHhhZmIwMDAxMCwgMHgzYzEwMDAwMSwgMHg4ZTEwNmVlYywgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDEwLCAweGFmYjEwMDE0LCAweDgwODgyMSwgCi0weGFmYmUwMDI0LCAweDhmYmUwMDQwLCAweDhmYTQwMDQ4LCAweGFmYjIwMDE4LCAKLTB4YTA5MDIxLCAweGFmYmYwMDI4LCAweGFmYjUwMDIwLCAweGFmYjMwMDFjLCAKLTB4YWUwMjAwMDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkMTAsIDB4YzA5ODIxLCAKLTB4ZTBhODIxLCAweDEwODAwMDA2LCAweGFlMDIwMDA0LCAweDI2MDUwMDA4LCAKLTB4YzAwMmJiMywgMHgyNDA2MDAxOCwgMHgxMDAwMDAwNSwgMHgyNjEwZmZlMCwgCi0weDI2MDQwMDA4LCAweGMwMDJiYTgsIDB4MjQwNTAwMTgsIDB4MjYxMGZmZTAsIAotMHgzYzAzMDAwMSwgMHgyNDYzNmY5MCwgMHgyMDMxMDJiLCAweDEwNDAwMDAzLCAKLTB4MCwgMHgzYzEwMDAwMSwgMHg4ZTEwNmVlOCwgMHg4ZTIyMDAwMCwgCi0weGFlMDIwMDAwLCAweDhlMjIwMDA0LCAweGFlMTIwMDA4LCAweGFlMDIwMDA0LCAKLTB4OGY4MjAwNTQsIDB4YWUxMzAwMTAsIDB4YWUxNTAwMTQsIDB4YWUxZTAwMTgsIAotMHg4ZmE4MDA0NCwgMHhhZTA4MDAxYywgMHhhZTAyMDAwYywgMHgyNjEwZmZlMCwgCi0weDIwMzEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgMHgzYzEwMDAwMSwgCi0weDhlMTA2ZWU4LCAweDNjMDIwMDAxLCAweDhjNDI2ZDEwLCAweGFlMDIwMDAwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZkMTAsIDB4M2MwMTAwMDEsIDB4YWMzMDZlZWMsIAotMHhhZTAyMDAwNCwgMHhhYzEwMDI1MCwgMHg4ZmJmMDAyOCwgMHg4ZmJlMDAyNCwgCi0weDhmYjUwMDIwLCAweDhmYjMwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LCAKLTB4OGZiMDAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAzMCwgMHg4NTE4MjEsIAotMHg4MzEwMmIsIDB4MTA0MDAwMDYsIDB4MCwgMHhhYzgwMDAwMCwgCi0weDI0ODQwMDA0LCAweDgzMTAyYiwgMHg1NDQwZmZmZCwgMHhhYzgwMDAwMCwgCi0weDNlMDAwMDgsIDB4MCwgMHhhNjE4MjEsIDB4YTMxMDJiLCAKLTB4MTA0MDAwMDcsIDB4MCwgMHg4YzgyMDAwMCwgMHhhY2EyMDAwMCwgCi0weDI0YTUwMDA0LCAweGEzMTAyYiwgMHgxNDQwZmZmYiwgMHgyNDg0MDAwNCwgCi0weDNlMDAwMDgsIDB4MCwgMHg4NjE4MjEsIDB4ODMxMDJiLCAKLTB4MTA0MDAwMDcsIDB4MCwgMHg4Y2EyMDAwMCwgMHhhYzgyMDAwMCwgCi0weDI0ODQwMDA0LCAweDgzMTAyYiwgMHgxNDQwZmZmYiwgMHgyNGE1MDAwNCwgCi0weDNlMDAwMDgsIDB4MCwgMHg2MzA4MCwgMHg4NjE4MjEsIAotMHg4MzEwMmIsIDB4MTA0MDAwMDYsIDB4MCwgMHhhYzg1MDAwMCwgCi0weDI0ODQwMDA0LCAweDgzMTAyYiwgMHg1NDQwZmZmZCwgMHhhYzg1MDAwMCwgCi0weDNlMDAwMDgsIDB4MCwgMHgwLCAweDI2ZTUwMDI4LCAKLTB4YTAzMDIxLCAweDI3NDMwMWMwLCAweDhmNGQwMzU4LCAweDhmNDcwMzVjLCAKLTB4OGY0ODAzNjAsIDB4OGY0OTAzNjQsIDB4OGY0YTAzNjgsIDB4OGY0YjAyMDQsIAotMHg4ZjRjMDIwMCwgMHgyNDY0MDQwMCwgMHg2NDEwMmIsIDB4MTA0MDAwMDgsIAotMHgzYzAyMDhmZiwgMHg4Y2MyMDAwMCwgMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgCi0weDY0MTAyYiwgMHgxNDQwZmZmYiwgMHgyNGM2MDAwNCwgMHgzYzAyMDhmZiwgCi0weDM0NDJmZmZmLCAweDNjMDNjMGZmLCAweGFmNGQwMzU4LCAweGFmNDcwMzVjLCAKLTB4YWY0ODAzNjAsIDB4YWY0OTAzNjQsIDB4YWY0YTAzNjgsIDB4YWY0YjAyMDQsIAotMHhhZjRjMDIwMCwgMHg4Zjg0MDIyMCwgMHgzNDYzZmZmZiwgMHg4Zjg2MDIwMCwgCi0weDgyMTAyNCwgMHgzNDQyMDAwNCwgMHhjMzE4MjQsIDB4MzQ2MzAwMDQsIAotMHhhZjgyMDIyMCwgMHhhZjgzMDIwMCwgMHg4Y2EyMDIxNCwgMHhhYzAyMDA4NCwgCi0weDhjYTIwMjE4LCAweGFjMDIwMDg4LCAweDhjYTIwMjFjLCAweGFjMDIwMDhjLCAKLTB4OGNhMjAyMjAsIDB4YWMwMjAwOTAsIDB4OGNhMjAyMjQsIDB4YWMwMjAwOTQsIAotMHg4Y2EyMDIyOCwgMHhhYzAyMDA5OCwgMHg4Y2EyMDIyYywgMHhhYzAyMDA5YywgCi0weDhjYTIwMjMwLCAweGFjMDIwMGEwLCAweDhjYTIwMjM0LCAweGFjMDIwMGE0LCAKLTB4OGNhMjAyMzgsIDB4YWMwMjAwYTgsIDB4OGNhMjAyM2MsIDB4YWMwMjAwYWMsIAotMHg4Y2EyMDI0MCwgMHhhYzAyMDBiMCwgMHg4Y2EyMDI0NCwgMHhhYzAyMDBiNCwgCi0weDhjYTIwMjQ4LCAweGFjMDIwMGI4LCAweDhjYTIwMjRjLCAweGFjMDIwMGJjLCAKLTB4OGNhMjAwMWMsIDB4YWMwMjAwODAsIDB4OGNhMjAwMTgsIDB4YWMwMjAwYzAsIAotMHg4Y2EyMDAyMCwgMHhhYzAyMDBjYywgMHg4Y2EyMDAyNCwgMHhhYzAyMDBkMCwgCi0weDhjYTIwMWQwLCAweGFjMDIwMGUwLCAweDhjYTIwMWQ0LCAweGFjMDIwMGU0LCAKLTB4OGNhMjAxZDgsIDB4YWMwMjAwZTgsIDB4OGNhMjAxZGMsIDB4YWMwMjAwZWMsIAotMHg4Y2EyMDFlMCwgMHhhYzAyMDBmMCwgMHg4Y2EyMDA5OCwgMHg4Y2EzMDA5YywgCi0weGFjMDMwMGZjLCAweDhjYTIwMGE4LCAweDhjYTMwMGFjLCAweGFjMDMwMGY0LCAKLTB4OGNhMjAwYTAsIDB4OGNhMzAwYTQsIDB4MzA4NDAwMDQsIDB4YWMwMzAwZjgsIAotMHgxNDgwMDAwNywgMHgzMGMyMDAwNCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgCi0weDM0NjNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHgzMGMyMDAwNCwgCi0weDE0NDAwMDA2LCAweDAsIDB4OGY4MjAyMDAsIDB4M2MwM2MwZmYsIAotMHgzNDYzZmZmYiwgMHg0MzEwMjQsIDB4YWY4MjAyMDAsIDB4OGY0MjAyZGMsIAotMHhhMzQwMDVjNSwgMHgyNDQyMDAwMSwgMHhhZjQyMDJkYywgMHg4ZjQyMDJkYywgCi0weDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZkOCwgMHhhZmJmMDAyNCwgCi0weGFmYjAwMDIwLCAweDhmNDMwMDI0LCAweDhmNDIwMDIwLCAweDEwNjIwMDM4LCAKLTB4MCwgMHg4ZjQzMDAyMCwgMHg4ZjQyMDAyNCwgMHg2MjIwMjMsIAotMHg0ODEwMDAzLCAweDAsIDB4OGY0MjAwNDAsIDB4ODIyMDIxLCAKLTB4OGY0MzAwMzAsIDB4OGY0MjAwMjQsIDB4NDMxMDJiLCAweDE0NDAwMDA1LCAKLTB4MCwgMHg4ZjQzMDA0MCwgMHg4ZjQyMDAyNCwgMHgxMDAwMDAwNSwgCi0weDYyMTAyMywgMHg4ZjQyMDAzMCwgMHg4ZjQzMDAyNCwgMHg0MzEwMjMsIAotMHgyNDQyZmZmZiwgMHg0MDYwMjEsIDB4OGMxMDJhLCAweDU0NDAwMDAxLCAKLTB4ODA2MDIxLCAweDhmNGEwMDI0LCAweDhmNDkwMDQwLCAweDhmNDgwMDI0LCAKLTB4OGY0NDAxODAsIDB4OGY0NTAxODQsIDB4OGY0NjAwMjQsIDB4OGY0YjAwMWMsIAotMHgyNDA3MDAwMSwgMHhhZmE3MDAxMCwgMHg4NDEwMCwgMHgxMDAxODIxLCAKLTB4MTRjNTAyMSwgMHgyNTI5ZmZmZiwgMHgxNDk4MDI0LCAweGFmYjAwMDE0LCAKLTB4OGY0NzAwMTQsIDB4MTAyMSwgMHg2MzEwMCwgMHhhZmE3MDAxOCwgCi0weGEzMjgyMSwgMHhhMzM4MmIsIDB4ODIyMDIxLCAweDg3MjAyMSwgCi0weDhmNDIwMTA4LCAweDE2NjMwMjEsIDB4NDBmODA5LCAweGMzOTAwLCAKLTB4NTQ0MDAwMDEsIDB4YWY1MDAwMjQsIDB4OGY0MzAwMjQsIDB4OGY0MjAwMjAsIAotMHgxNDYyMDAxOCwgMHgwLCAweDhmNDIwMDAwLCAweDEwNDAwMDA3LCAKLTB4MCwgMHhhZjgwMDA0YywgMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwgCi0weDAsIDB4MTAwMDAwMDUsIDB4MCwgMHhhZjgwMDA0OCwgCi0weDhmODIwMDQ4LCAweDEwNDBmZmZkLCAweDAsIDB4OGY4MjAwNjAsIAotMHgyNDAzZmZlZiwgMHg0MzEwMjQsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsIAotMHgxMDQwMDAwMywgMHgwLCAweDEwMDAwMDAyLCAweGFmODAwMDRjLCAKLTB4YWY4MDAwNDgsIDB4OGZiZjAwMjQsIDB4OGZiMDAwMjAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDI4LCAweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZjMCwgCi0weDMyYzIwMDIwLCAweGFmYmYwMDM4LCAweGFmYjMwMDM0LCAweGFmYjIwMDMwLCAKLTB4YWZiMTAwMmMsIDB4MTA0MDAwMDQsIDB4YWZiMDAwMjgsIDB4OGY1MzAwMjgsIAotMHgxMDAwMDAwMiwgMHgwLCAweDhmNTMwMDIwLCAweDhmNDIwMDMwLCAKLTB4MTA1MzAwZWIsIDB4MjExMDAsIDB4OGY0MzAwMWMsIDB4NjI4MDIxLCAKLTB4OGUwNDAwMDAsIDB4OGUwNTAwMDQsIDB4OTYxMjAwMDgsIDB4OGY0MjAwOTAsIAotMHg5NjExMDAwYSwgMHgzMjQ2ZmZmZiwgMHg0NjEwMmEsIDB4MTA0MDAwMTcsIAotMHgwLCAweDhmODIwMGQ4LCAweDhmNDMwMDk4LCAweDQzMTAyMywgCi0weDI0NDJkY2JlLCAweGFmNDIwMDkwLCAweDhmNDIwMDkwLCAweDI4NDJkY2JmLCAKLTB4MTA0MDAwMDUsIDB4MCwgMHg4ZjQyMDA5MCwgMHg4ZjQzMDE0NCwgCi0weDQzMTAyMSwgMHhhZjQyMDA5MCwgMHg4ZjQyMDA5MCwgMHg0NjEwMmEsIAotMHgxMDQwMDAwNiwgMHgwLCAweDhmNDIwMzQ4LCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzNDgsIDB4MTAwMDAwZTEsIDB4OGY0MjAzNDgsIDB4OGY4MjAwZmMsIAotMHgxNDQwMDAwNiwgMHgwLCAweDhmNDIwMzQ0LCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzNDQsIDB4MTAwMDAwZDksIDB4OGY0MjAzNDQsIDB4OTM0MjA1YzIsIAotMHgxMDQwMDAwYiwgMHgzMmMyMDAwOCwgMHgxMDQwMDAwOCwgMHgzMjIyMDIwMCwgCi0weDEwNDAwMDA2LCAweDNjMDM0MDAwLCAweDk2MDIwMDBlLCAweGFmNDMwMGFjLCAKLTB4MjE0MDAsIDB4MTAwMDAwMDIsIDB4YWY0MjAwYjAsIDB4YWY0MDAwYWMsIAotMHgzMjIyMDAwNCwgMHgxMDQwMDA3ZiwgMHgzMjIyMDgwMCwgMHgxMDQwMDAwMywgCi0weDMyNDdmZmZmLCAweDEwMDAwMDAyLCAweDI0MDIwMDIwLCAweDI0MDIwMDA0LCAKLTB4YWZhMjAwMTAsIDB4OGY0MjAwMzAsIDB4YWZhMjAwMTQsIDB4OGY0MjAwMTAsIAotMHgzYzAzMDAwMiwgMHg0MzEwMjUsIDB4YWZhMjAwMTgsIDB4OGY0NjAwOTgsIAotMHg4ZjQyMDEwOCwgMHg0MGY4MDksIDB4MCwgMHgxMDQwMDBiNywgCi0weDAsIDB4OGY0MjAwOWMsIDB4OGY0MzAwOTQsIDB4MjQyMTAyMSwgCi0weGFmNDIwMDljLCAweGFlMDMwMDBjLCAweDhmNDIwMGFjLCAweDEwNDAwMDA4LCAKLTB4M2MwMzQwMDAsIDB4OGY0MjAwOTQsIDB4NDMxMDI1LCAweGFmYTIwMDIwLCAKLTB4OGY0MjAwOWMsIDB4OGY0MzAwYjAsIDB4MTAwMDAwMDQsIDB4NDMxMDI1LCAKLTB4OGY0MjAwOTQsIDB4YWZhMjAwMjAsIDB4OGY0MjAwOWMsIDB4YWZhMjAwMjQsIAotMHg4ZjgyMDBmYywgMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDAwMCwgCi0weGFjNDQwMDA0LCAweDI0NDIwMDA4LCAweGFmODIwMGYwLCAweDhmNDIwMDljLCAKLTB4OGY0NDAyNzAsIDB4OGY0NTAyNzQsIDB4NDAxODIxLCAweDEwMjEsIAotMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgMHg4NjIwMjEsIAotMHgzMjIzMDA2MCwgMHgyNDAyMDA0MCwgMHhhZjQ0MDI3MCwgMHhhZjQ1MDI3NCwgCi0weDEwNjIwMDE3LCAweDJjNjIwMDQxLCAweDEwNDAwMDA1LCAweDI0MDIwMDIwLCAKLTB4MTA2MjAwMDgsIDB4MjQwMjAwMDEsIDB4MTAwMDAwMjYsIDB4MCwgCi0weDI0MDIwMDYwLCAweDEwNjIwMDE5LCAweDI0MDIwMDAxLCAweDEwMDAwMDIxLCAKLTB4MCwgMHg4ZjQyMDI3OCwgMHg4ZjQzMDI3YywgMHgyNDYzMDAwMSwgCi0weDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZjQyMDI3OCwgMHhhZjQzMDI3YywgCi0weDhmNDIwMjc4LCAweDhmNDMwMjdjLCAweDEwMDAwMDE2LCAweDI0MDIwMDAxLCAKLTB4OGY0MjAyODAsIDB4OGY0MzAyODQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIAotMHg0NDEwMjEsIDB4YWY0MjAyODAsIDB4YWY0MzAyODQsIDB4OGY0MjAyODAsIAotMHg4ZjQzMDI4NCwgMHgxMDAwMDAwYiwgMHgyNDAyMDAwMSwgMHg4ZjQyMDI4OCwgCi0weDhmNDMwMjhjLCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLCAweDQ0MTAyMSwgCi0weGFmNDIwMjg4LCAweGFmNDMwMjhjLCAweDhmNDIwMjg4LCAweDhmNDMwMjhjLCAKLTB4MjQwMjAwMDEsIDB4YTM0MjA1YzIsIDB4OGY0MjAwOTgsIDB4MzI0NGZmZmYsIAotMHgyNDA2ZmZmOCwgMHg4ZjQ1MDEzYywgMHg0NDEwMjEsIDB4MjQ0MjAwMDcsIAotMHg0NjEwMjQsIDB4MjQ4NDAwMDcsIDB4YWY0MjAwOTQsIDB4OGY0MjAwOTAsIAotMHg4ZjQzMDA5NCwgMHg4NjIwMjQsIDB4NDQxMDIzLCAweDY1MTgyYiwgCi0weDE0NjAwMDA1LCAweGFmNDIwMDkwLCAweDhmNDIwMDk0LCAweDhmNDMwMTQ0LCAKLTB4NDMxMDIzLCAweGFmNDIwMDk0LCAweDhmNDIwMDk0LCAweDEwMDAwMDIzLCAKLTB4YWY0MDAwOWMsIDB4MzI0N2ZmZmYsIDB4NTBlMDAwMjIsIDB4MzJjMjAwMjAsIAotMHgxNDQwMDAwMiwgMHgyNDAyMDAxMCwgMHgyNDAyMDAwMiwgMHhhZmEyMDAxMCwgCi0weDhmNDIwMDMwLCAweGFmYTIwMDE0LCAweDhmNDIwMDEwLCAweGFmYTIwMDE4LCAKLTB4OGY0NjAwOTgsIDB4OGY0MjAxMDgsIDB4NDBmODA5LCAweDAsIAotMHgxMDQwMDAzYSwgMHgzMjQ1ZmZmZiwgMHg4ZjQyMDA5OCwgMHg4ZjQzMDA5MCwgCi0weDhmNDYwMTNjLCAweDQ1MTAyMSwgMHhhZjQyMDA5OCwgMHg4ZjQyMDA5YywgCi0weDhmNDQwMDk4LCAweGEzNDAwNWMyLCAweDY1MTgyMywgMHhhZjQzMDA5MCwgCi0weDQ1MTAyMSwgMHg4NjIwMmIsIDB4MTQ4MDAwMDUsIDB4YWY0MjAwOWMsIAotMHg4ZjQyMDA5OCwgMHg4ZjQzMDE0NCwgMHg0MzEwMjMsIDB4YWY0MjAwOTgsIAotMHgzMmMyMDAyMCwgMHgxMDQwMDAwNSwgMHgwLCAweDhmNDIwMzU4LCAKLTB4MjQ0MmZmZmYsIDB4YWY0MjAzNTgsIDB4OGY0MjAzNTgsIDB4OGY0MjAwMzAsIAotMHg4ZjQzMDA0MCwgMHgyNDQyMDAwMSwgMHgyNDYzZmZmZiwgMHg0MzEwMjQsIAotMHhhZjQyMDAzMCwgMHg4ZjQyMDAzMCwgMHgxNDUzMDAxOCwgMHgwLCAKLTB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIDB4MCwgMHhhZjgwMDA0YywgCi0weDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsIAotMHgwLCAweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAweDEwNDBmZmZkLCAKLTB4MCwgMHg4ZjgyMDA2MCwgMHgyNDAzZmZmNywgMHg0MzEwMjQsIAotMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAKLTB4MTAwMDAwMDIsIDB4YWY4MDAwNGMsIDB4YWY4MDAwNDgsIDB4OGZiZjAwMzgsIAotMHg4ZmIzMDAzNCwgMHg4ZmIyMDAzMCwgMHg4ZmIxMDAyYywgMHg4ZmIwMDAyOCwgCi0weDNlMDAwMDgsIDB4MjdiZDAwNDAsIDB4M2UwMDAwOCwgMHgwLCAKLTB4MjdiZGZmZDAsIDB4MzJjMjAwMjAsIDB4YWZiZjAwMmMsIDB4YWZiMjAwMjgsIAotMHhhZmIxMDAyNCwgMHgxMDQwMDAwNCwgMHhhZmIwMDAyMCwgMHg4ZjUyMDAyOCwgCi0weDEwMDAwMDAyLCAweDAsIDB4OGY1MjAwMjAsIDB4OGY0MjAwMzAsIAotMHgxMDUyMDBiNSwgMHgyMTEwMCwgMHg4ZjQzMDAxYywgMHg2MjgwMjEsIAotMHg4ZTA0MDAwMCwgMHg4ZTA1MDAwNCwgMHg5NjExMDAwOCwgMHg4ZjQyMDA5MCwgCi0weDk2MDcwMDBhLCAweDMyMjZmZmZmLCAweDQ2MTAyYSwgMHgxMDQwMDAxNywgCi0weDAsIDB4OGY4MjAwZDgsIDB4OGY0MzAwOTgsIDB4NDMxMDIzLCAKLTB4MjQ0MmRjNDYsIDB4YWY0MjAwOTAsIDB4OGY0MjAwOTAsIDB4Mjg0MmRjNDcsIAotMHgxMDQwMDAwNSwgMHgwLCAweDhmNDIwMDkwLCAweDhmNDMwMTQ0LCAKLTB4NDMxMDIxLCAweGFmNDIwMDkwLCAweDhmNDIwMDkwLCAweDQ2MTAyYSwgCi0weDEwNDAwMDA2LCAweDAsIDB4OGY0MjAzNDgsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDM0OCwgMHgxMDAwMDBhYiwgMHg4ZjQyMDM0OCwgMHg4Zjg2MDBmYywgCi0weDEwYzAwMDBjLCAweDAsIDB4OGY4MjAwZjQsIDB4MjQwM2ZmZjgsIAotMHg0MzEwMjQsIDB4NDYxMDIzLCAweDIxOGMzLCAweDU4NjAwMDAxLCAKLTB4MjQ2MzAxMDAsIDB4OGY0MjAwOGMsIDB4NDMxMDJiLCAweDE0NDAwMDA2LCAKLTB4NzEyYzIsIDB4OGY0MjAzNDQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNDQsIAotMHgxMDAwMDA5OCwgMHg4ZjQyMDM0NCwgMHg5MzQzMDVjMiwgMHgxMDYwMDAwZiwgCi0weDMwNDYwMDAxLCAweDhmNDIwMDEwLCAweDM0NDgwNDAwLCAweDMyYzIwMDA4LCAKLTB4MTA0MDAwMDgsIDB4MzBlMjAyMDAsIDB4MTA0MDAwMDYsIDB4M2MwMzQwMDAsIAotMHg5NjAyMDAwZSwgMHhhZjQzMDBhYywgMHgyMTQwMCwgMHgxMDAwMDAwNCwgCi0weGFmNDIwMGIwLCAweDEwMDAwMDAyLCAweGFmNDAwMGFjLCAweDhmNDgwMDEwLCAKLTB4MzBlMjAwMDQsIDB4MTA0MDAwNDUsIDB4MzIyN2ZmZmYsIDB4OGY0OTAwYWMsIAotMHgxMTIwMDAwNSwgMHgzMGMyMDBmZiwgMHgxNDQwMDAwNiwgMHgyNDAyMDA0MCwgCi0weDEwMDAwMDA0LCAweDI0MDIwMDA4LCAweDE0NDAwMDAyLCAweDI0MDIwMDIwLCAKLTB4MjQwMjAwMDQsIDB4YWZhMjAwMTAsIDB4OGY0MzAwMzAsIDB4MTEyMDAwMDQsIAotMHhhZmEzMDAxNCwgMHg4ZjQyMDBiMCwgMHg2MjEwMjUsIDB4YWZhMjAwMTQsIAotMHgzYzAyMDAwMiwgMHgxMDIxMDI1LCAweGFmYTIwMDE4LCAweDhmNDYwMDk4LCAKLTB4OGY0MjAxMDgsIDB4NDBmODA5LCAweDAsIDB4MTA0MDAwNjksIAotMHgzMjI0ZmZmZiwgMHg4ZjQyMDA4YywgMHg4ZjQzMDA5NCwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMDhjLCAweDI0MDIwMDAxLCAweGFlMDMwMDBjLCAweGEzNDIwNWMyLCAKLTB4OGY0MjAwOTgsIDB4MjQwNmZmZjgsIDB4OGY0NTAxM2MsIDB4NDQxMDIxLCAKLTB4MjQ0MjAwMDcsIDB4NDYxMDI0LCAweDI0ODQwMDA3LCAweGFmNDIwMDk0LCAKLTB4OGY0MjAwOTAsIDB4OGY0MzAwOTQsIDB4ODYyMDI0LCAweDQ0MTAyMywgCi0weDY1MTgyYiwgMHgxNDYwMDAwNSwgMHhhZjQyMDA5MCwgMHg4ZjQyMDA5NCwgCi0weDhmNDMwMTQ0LCAweDQzMTAyMywgMHhhZjQyMDA5NCwgMHg4ZjQzMDA5NCwgCi0weDhmNDIwMTQwLCAweDQzMTAyYiwgMHgxMDQwMDAwOSwgMHgwLCAKLTB4OGY0MzAxM2MsIDB4OGY0NDAwOTQsIDB4OGY0MjAwOTAsIDB4OGY0NTAxMzgsIAotMHg2NDE4MjMsIDB4NDMxMDIzLCAweGFmNDIwMDkwLCAweGFmNDUwMDk0LCAKLTB4OGY0MjAwOTQsIDB4MTAwMDAwMWYsIDB4YWY0MjAwOTgsIDB4MTBlMDAwMWQsIAotMHgzMGMyMDBmZiwgMHgxNDQwMDAwMiwgMHgyNDAyMDAxMCwgMHgyNDAyMDAwMiwgCi0weGFmYTIwMDEwLCAweDhmNDIwMDMwLCAweGFmYTgwMDE4LCAweGFmYTIwMDE0LCAKLTB4OGY0NjAwOTgsIDB4OGY0MjAxMDgsIDB4NDBmODA5LCAweDAsIAotMHgxMDQwMDAzMCwgMHgzMjI1ZmZmZiwgMHg4ZjQyMDA5OCwgMHg4ZjQ0MDEzYywgCi0weDQ1MTAyMSwgMHhhZjQyMDA5OCwgMHg4ZjQyMDA5MCwgMHg4ZjQzMDA5OCwgCi0weGEzNDAwNWMyLCAweDQ1MTAyMywgMHg2NDE4MmIsIDB4MTQ2MDAwMDUsIAotMHhhZjQyMDA5MCwgMHg4ZjQyMDA5OCwgMHg4ZjQzMDE0NCwgMHg0MzEwMjMsIAotMHhhZjQyMDA5OCwgMHg4ZjQyMDAzMCwgMHg4ZjQzMDA0MCwgMHgyNDQyMDAwMSwgCi0weDI0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjQyMDAzMCwgMHg4ZjQyMDAzMCwgCi0weDE0NTIwMDE4LCAweDAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIAotMHgwLCAweGFmODAwMDRjLCAweDhmODIwMDRjLCAweDEwNDBmZmZkLCAKLTB4MCwgMHgxMDAwMDAwNSwgMHgwLCAweGFmODAwMDQ4LCAKLTB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsIDB4MCwgMHg4ZjgyMDA2MCwgCi0weDI0MDNmZmY3LCAweDQzMTAyNCwgMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgCi0weDEwNDAwMDAzLCAweDAsIDB4MTAwMDAwMDIsIDB4YWY4MDAwNGMsIAotMHhhZjgwMDA0OCwgMHg4ZmJmMDAyYywgMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgCi0weDhmYjAwMDIwLCAweDNlMDAwMDgsIDB4MjdiZDAwMzAsIDB4M2UwMDAwOCwgCi0weDAsIDB4MjdiZGZmZDgsIDB4M2MwMjAwMDEsIDB4MzQ0MjJlYzAsIAotMHhhZmJmMDAyMCwgMHg4ZjQzMDBmMCwgMHg4Zjg0MDEwOCwgMHgyZTIxMDIxLCAKLTB4NTQ2MjAwMDQsIDB4MjQ2MjAwMDgsIDB4M2MwMjAwMDEsIDB4MzQ0MjJjYzAsIAotMHgyZTIxMDIxLCAweDQwMTgyMSwgMHhhZjQzMDBmMCwgMHhhYzYwMDAwMCwgCi0weDhmNDIwMGVjLCAweDhjNjYwMDA0LCAweDE0NjIwMDA0LCAweDNjMDIwMDAxLCAKLTB4MjQ4MjAwMjAsIDB4MTAwMDAwMGYsIDB4YWY4MjAxMDgsIDB4OGY0MzAwZjAsIAotMHgzNDQyMmVjMCwgMHgyZTIxMDIxLCAweDU0NjIwMDA0LCAweDI0NjIwMDA4LCAKLTB4M2MwMjAwMDEsIDB4MzQ0MjJjYzAsIDB4MmUyMTAyMSwgMHg0MDE4MjEsIAotMHg4YzYyMDAwNCwgMHgyMTE0MCwgMHg4MjEwMjEsIDB4YWY4MjAxMDgsIAotMHhhYzYwMDAwMCwgMHg4Yzg1MDAxOCwgMHgzMGEyMDAzNiwgMHgxMDQwMDA2YywgCi0weDMwYTIwMDAxLCAweDhjODIwMDFjLCAweDhmNDMwMDQwLCAweDhmNDQwMDM0LCAKLTB4MjQ0MjAwMDEsIDB4MjQ2M2ZmZmYsIDB4NDMxMDI0LCAweDg2MjAyMSwgCi0weGFmNDIwMDJjLCAweDMwYTIwMDMwLCAweDE0NDAwMDA2LCAweGFmNDQwMDM0LCAKLTB4OGY0MjAwMzQsIDB4OGMwMzAyM2MsIDB4NDMxMDJiLCAweDE0NDAwMGI0LCAKLTB4MCwgMHgzMmMyMDAxMCwgMHgxMDQwMDAyOCwgMHgyNDA3MDAwOCwgCi0weDhmNDQwMTcwLCAweDhmNDUwMTc0LCAweDhmNDMwMDJjLCAweDhmNDgwMDBjLCAKLTB4OGY4NjAxMjAsIDB4MjQwMjAwODAsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIAotMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsIAotMHgxNDQwMDAxMSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIAotMHhhMDIyNDBmMSwgMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyOCwgCi0weDNjMDQwMDAxLCAweDI0ODQ2N2M0LCAweGFmYTIwMDE0LCAweDhmNDYwMDJjLCAKLTB4OGY4NzAxMjAsIDB4M2MwNTAwMDksIDB4YzAwMmIzYiwgMHgzNGE1MTEwMCwgCi0weDEwMDAwMDM2LCAweDAsIDB4OGY0MjAzMDAsIDB4OGY0MzAwMmMsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDMwMCwgMHg4ZjQyMDMwMCwgMHgyNDAyMDAwMSwgCi0weGEzNDIwNWMxLCAweDEwMDAwMDI2LCAweGFmNDMwMDM4LCAweDhmNDQwMTcwLCAKLTB4OGY0NTAxNzQsIDB4OGY0MzAwMmMsIDB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIAotMHgyNDAyMDAyMCwgMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgMHhhZmE4MDAxOCwgCi0weDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyNDBmMCwgCi0weDhmODIwMTI0LCAweGFmYTIwMDEwLCAweDhmODIwMTI4LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDY3YjgsIDB4YWZhMjAwMTQsIDB4OGY0NjAwMmMsIDB4OGY4NzAxMjAsIAotMHgzYzA1MDAwOSwgMHhjMDAyYjNiLCAweDM0YTUwOTAwLCAweDEwMDAwMDBmLCAKLTB4MCwgMHg4ZjQyMDMwMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwMCwgCi0weDhmNDIwMzAwLCAweDhmNDIwMDJjLCAweGEzNDAwNWMxLCAweGFmNDIwMDM4LCAKLTB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA0MGYxLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGEwMjA0MGYwLCAweGFmNDAwMDM0LCAweDhmNDIwMzE0LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzMTQsIDB4MTAwMDAwNTksIDB4OGY0MjAzMTQsIAotMHgxMDQwMDAyMiwgMHgzMGEyNzAwMCwgMHg4Yzg1MDAxYywgMHg4ZjQyMDAyOCwgCi0weGEyMjAyMywgMHg0ODEwMDAzLCAweDAsIDB4OGY0MjAwNDAsIAotMHg4MjIwMjEsIDB4OGY0MjAzNTgsIDB4OGY0MzAwMDAsIDB4YWY0NTAwMjgsIAotMHg0NDEwMjEsIDB4MTA2MDAwMDcsIDB4YWY0MjAzNTgsIDB4YWY4MDAwNGMsIAotMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAKLTB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgCi0weDAsIDB4OGY4MjAwNjAsIDB4MzQ0MjAwMDgsIDB4YWY4MjAwNjAsIAotMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAweDEwMDAwMDM4LCAKLTB4YWY4MDAwNGMsIDB4MTAwMDAwMzYsIDB4YWY4MDAwNDgsIDB4MTA0MDAwMmYsIAotMHgzMGEyMTAwMCwgMHgxMDQwMDAwYywgMHgzMGEyNDAwMCwgMHg4YzgzMDAxYywgCi0weDhmNDIwMDUwLCAweDYyMjAyMywgMHg0ODIwMDAxLCAweDI0ODQwMjAwLCAKLTB4OGY0MjAzNWMsIDB4NDQxMDIxLCAweGFmNDIwMzVjLCAweDhmNDIwMzY4LCAKLTB4MTAwMDAwMWEsIDB4YWY0MzAwNTAsIDB4MTA0MDAwMGMsIDB4MzJjMjgwMDAsIAotMHg4YzgzMDAxYywgMHg4ZjQyMDA3MCwgMHg2MjIwMjMsIDB4NDgyMDAwMSwgCi0weDI0ODQwNDAwLCAweDhmNDIwMzY0LCAweDQ0MTAyMSwgMHhhZjQyMDM2NCwgCi0weDhmNDIwMzY4LCAweDEwMDAwMDBkLCAweGFmNDMwMDcwLCAweDEwNDAwMDBlLCAKLTB4M2MwMjA4MDAsIDB4OGM4MzAwMWMsIDB4OGY0MjAwNjAsIDB4NjIyMDIzLCAKLTB4NDgyMDAwMSwgMHgyNDg0MDEwMCwgMHg4ZjQyMDM2MCwgMHg0NDEwMjEsIAotMHhhZjQyMDM2MCwgMHg4ZjQyMDM2OCwgMHhhZjQzMDA2MCwgMHg0NDEwMjEsIAotMHhhZjQyMDM2OCwgMHgzYzAyMDgwMCwgMHgyYzIxMDI0LCAweDUwNDAwMDA4LCAKLTB4MzY5NDAwNDAsIDB4MTAwMDAwMDYsIDB4MCwgMHgzMGEyMDEwMCwgCi0weDEwNDAwMDAzLCAweDAsIDB4YzAwMmJkOCwgMHgwLCAKLTB4OGZiZjAwMjAsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzZTAwMDA4LCAKLTB4MCwgMHgyN2JkZmZhOCwgMHhhZmJmMDA1MCwgMHhhZmJlMDA0YywgCi0weGFmYjUwMDQ4LCAweGFmYjMwMDQ0LCAweGFmYjIwMDQwLCAweGFmYjEwMDNjLCAKLTB4YWZiMDAwMzgsIDB4OGY5MTAxMDgsIDB4MjYyMjAwMjAsIDB4YWY4MjAxMDgsIAotMHg4ZTMyMDAxOCwgMHhhODIxLCAweDMyNDIwMDI0LCAweDEwNDAwMWJhLCAKLTB4ZjAyMSwgMHg4ZTI2MDAxYywgMHg4ZjQzMDAxYywgMHg2MTEwMCwgCi0weDYyMTgyMSwgMHg4YzcwMDAwYywgMHg5NjA0MDAwYywgMHg5NjJkMDAxNiwgCi0weDk0NzMwMDBhLCAweDJjODMwNWRkLCAweDM4ODI4ODcwLCAweDJjNDIwMDAxLCAKLTB4NjIxODI1LCAweDEwNjAwMDE1LCAweDI4MjEsIDB4MzJjMjAwNDAsIAotMHgxMDQwMDAxNSwgMHgyNDAyMDgwMCwgMHg5NjAzMDAxNCwgMHgxNDYyMDAxMiwgCi0weDM0MDJhYWFhLCAweDk2MDMwMDBlLCAweDE0NjIwMDA3LCAweDIwMjEsIAotMHg5NjAzMDAxMCwgMHgyNDAyMDMwMCwgMHgxNDYyMDAwNCwgMHg4MDEwMjEsIAotMHg5NjAyMDAxMiwgMHgyYzQ0MDAwMSwgMHg4MDEwMjEsIDB4NTQ0MDAwMDYsIAotMHgyNDA1MDAxNiwgMHgxMDAwMDAwNCwgMHgwLCAweDI0MDIwODAwLCAKLTB4NTA4MjAwMDEsIDB4MjQwNTAwMGUsIDB4OTM0MjA1YzMsIDB4MTQ0MDAwMDgsIAotMHg1ODIxLCAweDI0MGIwMDAxLCAweDMyNjIwMTgwLCAweGFmNDUwMGE4LCAKLTB4YWY1MDAwYTAsIDB4MTA0MDAwMDIsIDB4YWY0NjAwYTQsIDB4YTM0YjA1YzMsIAotMHgxMGEwMDA4NSwgMHgyMDU0MDIxLCAweDkxMDIwMDAwLCAweDM4MjEsIAotMHgzMDQyMDAwZiwgMHgyNTA4MCwgMHgzMmMyMDAwMiwgMHgxMDQwMDAxMiwgCi0weDEwYTE4MjEsIDB4MzI2MjAwMDIsIDB4MTA0MDAwMTAsIDB4MzJjMjAwMDEsIAotMHgxMDAyMDIxLCAweDk0ODIwMDAwLCAweDI0ODQwMDAyLCAweGUyMzgyMSwgCi0weDgzMTAyYiwgMHgxNDQwZmZmYiwgMHgzMGUyZmZmZiwgMHg3MWMwMiwgCi0weDYyMzgyMSwgMHg3MWMwMiwgMHgzMGUyZmZmZiwgMHg2MjM4MjEsIAotMHg3MTAyNywgMHhhNTAyMDAwYSwgMHgzMmMyMDAwMSwgMHgxMDQwMDA2YSwgCi0weDMyNjIwMDAxLCAweDEwNDAwMDY4LCAweDAsIDB4OGY0MjAwYTgsIAotMHgxMDQwMDA2NSwgMHgwLCAweDhmNDIwMGEwLCAweDhmNDMwMGE4LCAKLTB4NDMxMDIxLCAweDkwNGMwMDA5LCAweDMxODkwMGZmLCAweDM5MjMwMDA2LCAKLTB4MzE4MmIsIDB4MzkyMjAwMTEsIDB4MjEwMmIsIDB4NjIxODI0LCAKLTB4MTA2MDAwMGMsIDB4M2MwNTAwMDYsIDB4OGY0MjAwYTQsIDB4M2MwNDAwMDEsIAotMHgyNDg0NjdkNCwgMHhhZmEyMDAxMCwgMHg4ZjQyMDBhMCwgMHgzNGE1NDYwMCwgCi0weDEyMDM4MjEsIDB4YzAwMmIzYiwgMHhhZmEyMDAxNCwgMHgxMDAwMDA0ZSwgCi0weDAsIDB4MzJjMjAwMDQsIDB4MTQ0MDAwMTMsIDB4MjgyMSwgCi0weDMxNjIwMGZmLCAweDE0NDAwMDA0LCAweDAsIDB4OTUwMjAwMDIsIAotMHgxMDAwMDAwZCwgMHg0YTI4MjMsIDB4OTUwNTAwMGMsIDB4OTUwMjAwMGUsIAotMHg5NTAzMDAxMCwgMHhhMjI4MjEsIDB4YTMyODIxLCAweDk1MDMwMDEyLCAKLTB4OTEwNDAwMDksIDB4OTUwMjAwMDIsIDB4YTMyODIxLCAweGE0MjgyMSwgCi0weDRhMTAyMywgMHhhMjI4MjEsIDB4MjAwMjAyMSwgMHg5NDgyMDAwMCwgCi0weDI0ODQwMDAyLCAweGUyMzgyMSwgMHg4ODEwMmIsIDB4MTQ0MGZmZmIsIAotMHg3MWMwMiwgMHgzMGUyZmZmZiwgMHg2MjM4MjEsIDB4NzFjMDIsIAotMHgzMGUyZmZmZiwgMHg2MjM4MjEsIDB4MWE1MjgyMSwgMHg1MWMwMiwgCi0weDMwYTJmZmZmLCAweDYyMjgyMSwgMHg1MWMwMiwgMHgzMGEyZmZmZiwgCi0weDYyMjgyMSwgMHhhNzI4MjMsIDB4NTE0MDIsIDB4YTIyODIxLCAKLTB4MzBhNWZmZmYsIDB4NTBhMDAwMDEsIDB4MzQwNWZmZmYsIDB4MzE2MjAwZmYsIAotMHgxNDQwMDAwOCwgMHgzMTgzMDBmZiwgMHg4ZjQzMDBhMCwgMHg4ZjQyMDBhOCwgCi0weDYyNDAyMSwgMHg5MTAyMDAwMCwgMHgzMDQyMDAwZiwgMHgyNTA4MCwgCi0weDMxODMwMGZmLCAweDI0MDIwMDA2LCAweDE0NjIwMDAzLCAweDEwYTEwMjEsIAotMHgxMDAwMDAwMiwgMHgyNDQ0MDAxMCwgMHgyNDQ0MDAwNiwgMHgzMTYyMDBmZiwgCi0weDE0NDAwMDA2LCAweDAsIDB4OTQ4MjAwMDAsIDB4YTIyODIxLCAKLTB4NTFjMDIsIDB4MzBhMmZmZmYsIDB4NjIyODIxLCAweDkzNDIwNWMzLCAKLTB4MTA0MDAwMDMsIDB4MzI2MjAxMDAsIDB4NTA0MDAwMDMsIDB4YTQ4NTAwMDAsIAotMHg1MjgyNywgMHhhNDg1MDAwMCwgMHg5NjIyMDAwZSwgMHg4ZjQzMDA5YywgCi0weDYyMTgyMSwgMHgzMmEyMDBmZiwgMHgxMDQwMDAwNywgMHhhZjQzMDA5YywgCi0weDNjMDI0MDAwLCAweDIwMjEwMjUsIDB4YWZhMjAwMjAsIDB4OGY0MjAwOWMsIAotMHgxMDAwMDAwMywgMHg1ZTEwMjUsIDB4YWZiMDAwMjAsIDB4OGY0MjAwOWMsIAotMHhhZmEyMDAyNCwgMHgzMjYyMDA4MCwgMHgxMDQwMDAxMCwgMHgzMjYyMDEwMCwgCi0weDhmNDIwMGI0LCAweDI0NDMwMDAxLCAweDIxMGMwLCAweDU3MTAyMSwgCi0weGFmNDMwMGI0LCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LCAweDNjMDEwMDAxLCAKLTB4MjIwODIxLCAweGFjMjMzOGU4LCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weGFjMjQzOGVjLCAweDEwMDAwMGE1LCAweDMyYzIwMDIwLCAweDEwNDAwMDY0LCAKLTB4MCwgMHg4ZjQyMDBiNCwgMHgyNDQzMDAwMSwgMHgyMTBjMCwgCi0weDU3MTAyMSwgMHhhZjQzMDBiNCwgMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzIzMzhlOCwgMHgzYzAxMDAwMSwgCi0weDIyMDgyMSwgMHhhYzI0MzhlYywgMHg4ZjQyMDBiNCwgMHgxMDQwMDA1MSwgCi0weDM4MjEsIDB4M2MwOTAwMDEsIDB4MzUyOTM4ZTgsIDB4M2MwODAwMWYsIAotMHgzNTA4ZmZmZiwgMHgyNDBiZmZmZiwgMHgzNDBhZmZmZiwgMHg3MTBjMCwgCi0weDU3MTAyMSwgMHg0OTEwMjEsIDB4OGM0MzAwMDAsIDB4OGM0NDAwMDQsIAotMHhhZmEzMDAyOCwgMHhhZmE0MDAyYywgMHg4ZjgyMDBmYywgMHg4ZmEzMDAyOCwgCi0weDhmYTQwMDJjLCAweGFjNDMwMDAwLCAweGFjNDQwMDA0LCAweDI0NDIwMDA4LCAKLTB4YWY4MjAwZjAsIDB4OGY0MjAwOGMsIDB4MjQ0MmZmZmYsIDB4YWY0MjAwOGMsIAotMHg5N2EyMDAyZSwgMHg4ZjQ0MDI3MCwgMHg4ZjQ1MDI3NCwgMHg0MDE4MjEsIAotMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLCAKLTB4ODYyMDIxLCAweGFmNDQwMjcwLCAweGFmNDUwMjc0LCAweDhmYTIwMDI4LCAKLTB4NDgxMDI0LCAweDkwNDMwMDAwLCAweDMwNjMwMDAxLCAweDE0NjAwMDBiLCAKLTB4NDAyMDIxLCAweDhmNDIwMjc4LCAweDhmNDMwMjdjLCAweDI0NjMwMDAxLCAKLTB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFmNDIwMjc4LCAweGFmNDMwMjdjLCAKLTB4OGY0MjAyNzgsIDB4MTAwMDAwMWEsIDB4OGY0MzAyN2MsIDB4OGM4MjAwMDAsIAotMHgxNDRiMDAwZSwgMHgwLCAweDk0ODIwMDA0LCAweDE0NGEwMDBiLCAKLTB4MCwgMHg4ZjQyMDI4OCwgMHg4ZjQzMDI4YywgMHgyNDYzMDAwMSwgCi0weDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZjQyMDI4OCwgMHhhZjQzMDI4YywgCi0weDhmNDIwMjg4LCAweDEwMDAwMDBhLCAweDhmNDMwMjhjLCAweDhmNDIwMjgwLCAKLTB4OGY0MzAyODQsIDB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAKLTB4YWY0MjAyODAsIDB4YWY0MzAyODQsIDB4OGY0MjAyODAsIDB4OGY0MzAyODQsIAotMHg4ZjQyMDBiNCwgMHgyNGU3MDAwMSwgMHhlMjEwMmIsIDB4MTQ0MGZmYjgsIAotMHg3MTBjMCwgMHhhMzQwMDVjMywgMHgxMDAwMDAzZiwgMHhhZjQwMDBiNCwgCi0weDhmODIwMGZjLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LCAweGFjNDMwMDAwLCAKLTB4YWM0NDAwMDQsIDB4MjQ0MjAwMDgsIDB4YWY4MjAwZjAsIDB4OGY0MjAwOWMsIAotMHg4ZjQ2MDA4YywgMHg4ZjQ0MDI3MCwgMHg4ZjQ1MDI3NCwgMHg0MDE4MjEsIAotMHgxMDIxLCAweDI0YzZmZmZmLCAweGFmNDYwMDhjLCAweGEzMjgyMSwgCi0weGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFmNDQwMjcwLCAKLTB4YWY0NTAyNzQsIDB4OTIwMjAwMDAsIDB4MzA0MjAwMDEsIDB4MTQ0MDAwMGMsIAotMHgyNDAyZmZmZiwgMHg4ZjQyMDI3OCwgMHg4ZjQzMDI3YywgMHgyNDYzMDAwMSwgCi0weDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZjQyMDI3OCwgMHhhZjQzMDI3YywgCi0weDhmNDIwMjc4LCAweDhmNDMwMjdjLCAweDEwMDAwMDFjLCAweDMyYzIwMDIwLCAKLTB4OGUwMzAwMDAsIDB4MTQ2MjAwMGYsIDB4MzQwMmZmZmYsIDB4OTYwMzAwMDQsIAotMHgxNDYyMDAwYywgMHgwLCAweDhmNDIwMjg4LCAweDhmNDMwMjhjLCAKLTB4MjQ2MzAwMDEsIDB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFmNDIwMjg4LCAKLTB4YWY0MzAyOGMsIDB4OGY0MjAyODgsIDB4OGY0MzAyOGMsIDB4MTAwMDAwMGIsIAotMHgzMmMyMDAyMCwgMHg4ZjQyMDI4MCwgMHg4ZjQzMDI4NCwgMHgyNDYzMDAwMSwgCi0weDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZjQyMDI4MCwgMHhhZjQzMDI4NCwgCi0weDhmNDIwMjgwLCAweDhmNDMwMjg0LCAweDMyYzIwMDIwLCAweDEwNDAwMDA1LCAKLTB4YWY0MDAwOWMsIDB4OGY0MjAzNTgsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNTgsIAotMHg4ZjQyMDM1OCwgMHg4ZTIyMDAxYywgMHg4ZjQzMDA0MCwgMHgyNDQyMDAwMSwgCi0weDI0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjQyMDAyYywgMHgzMjQyMDA2MCwgCi0weDE0NDAwMDA4LCAweDMyYzIwMDEwLCAweDhmNDIwMDM0LCAweDI0NDIwMDAxLCAKLTB4YWY0MjAwMzQsIDB4OGMwMzAyM2MsIDB4NDMxMDJiLCAweDE0NDAwMTAyLCAKLTB4MzJjMjAwMTAsIDB4MTA0MDAwMTgsIDB4MjQwNzAwMDgsIDB4OGY0NDAxNzAsIAotMHg4ZjQ1MDE3NCwgMHg4ZjQzMDAyYywgMHg4ZjQ4MDAwYywgMHg4Zjg2MDEyMCwgCi0weDI0MDIwMDgwLCAweGFmYTIwMDEwLCAweGFmYTMwMDE0LCAweGFmYTgwMDE4LCAKLTB4OGY0MjAxMGMsIDB4NDBmODA5LCAweDI0YzYwMDFjLCAweDEwNDAwMDQ3LCAKLTB4MjQwMjAwMDEsIDB4OGY0MjAzMDAsIDB4OGY0MzAwMmMsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDMwMCwgMHg4ZjQyMDMwMCwgMHgyNDAyMDAwMSwgMHhhMzQyMDVjMSwgCi0weDEwMDAwMDdjLCAweGFmNDMwMDM4LCAweDhmNDQwMTcwLCAweDhmNDUwMTc0LCAKLTB4OGY0MzAwMmMsIDB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIDB4MjQwMjAwMjAsIAotMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgCi0weDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxMDQwMDA1NywgMHgyNDAyMDAwMSwgCi0weDEwMDAwMDY1LCAweDAsIDB4MzI0MjAwMTIsIDB4MTA0MDAwNzUsIAotMHgzMjQyMDAwMSwgMHg5NjIyMDAwZSwgMHg4ZjQzMDA5YywgMHg2MjE4MjEsIAotMHgzMmMyMDAyMCwgMHgxMDQwMDAwNSwgMHhhZjQzMDA5YywgMHg4ZjQyMDM1OCwgCi0weDI0NDJmZmZmLCAweGFmNDIwMzU4LCAweDhmNDIwMzU4LCAweDhlMjIwMDFjLCAKLTB4OGY0MzAwNDAsIDB4MjQ0MjAwMDEsIDB4MjQ2M2ZmZmYsIDB4NDMxMDI0LCAKLTB4YWY0MjAwMmMsIDB4MzI0MjAwMTAsIDB4MTQ0MDAwMDgsIDB4MzJjMjAwMTAsIAotMHg4ZjQyMDAzNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDAzNCwgMHg4YzAzMDIzYywgCi0weDQzMTAyYiwgMHgxNDQwMDBiYywgMHgzMmMyMDAxMCwgMHgxMDQwMDAyOCwgCi0weDI0MDcwMDA4LCAweDhmNDQwMTcwLCAweDhmNDUwMTc0LCAweDhmNDMwMDJjLCAKLTB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIDB4MjQwMjAwODAsIDB4YWZhMjAwMTAsIAotMHhhZmEzMDAxNCwgMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIAotMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgCi0weDM3MDgyMSwgMHhhMDIyNDBmMSwgMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwgCi0weDhmODIwMTI4LCAweDNjMDQwMDAxLCAweDI0ODQ2N2M0LCAweGFmYTIwMDE0LCAKLTB4OGY0NjAwMmMsIDB4OGY4NzAxMjAsIDB4M2MwNTAwMDksIDB4YzAwMmIzYiwgCi0weDM0YTUxMTAwLCAweDEwMDAwMDM2LCAweDAsIDB4OGY0MjAzMDAsIAotMHg4ZjQzMDAyYywgMHgyNDQyMDAwMSwgMHhhZjQyMDMwMCwgMHg4ZjQyMDMwMCwgCi0weDI0MDIwMDAxLCAweGEzNDIwNWMxLCAweDEwMDAwMDI2LCAweGFmNDMwMDM4LCAKLTB4OGY0NDAxNzAsIDB4OGY0NTAxNzQsIDB4OGY0MzAwMmMsIDB4OGY0ODAwMGMsIAotMHg4Zjg2MDEyMCwgMHgyNDAyMDAyMCwgMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgCi0weGFmYTgwMDE4LCAweDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgCi0weDE0NDAwMDExLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgCi0weGEwMjI0MGYwLCAweDhmODIwMTI0LCAweGFmYTIwMDEwLCAweDhmODIwMTI4LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDY3YjgsIDB4YWZhMjAwMTQsIDB4OGY0NjAwMmMsIAotMHg4Zjg3MDEyMCwgMHgzYzA1MDAwOSwgMHhjMDAyYjNiLCAweDM0YTUwOTAwLCAKLTB4MTAwMDAwMGYsIDB4MCwgMHg4ZjQyMDMwMCwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMzAwLCAweDhmNDIwMzAwLCAweDhmNDIwMDJjLCAweGEzNDAwNWMxLCAKLTB4YWY0MjAwMzgsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA0MGYxLCAKLTB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA0MGYwLCAweGFmNDAwMDM0LCAKLTB4OGY0MjAzMTQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMTQsIDB4MTAwMDAwNjIsIAotMHg4ZjQyMDMxNCwgMHgxMDQwMDAyMiwgMHgzMjQyNzAwMCwgMHg4ZTI1MDAxYywgCi0weDhmNDIwMDI4LCAweGEyMjAyMywgMHg0ODEwMDAzLCAweDAsIAotMHg4ZjQyMDA0MCwgMHg4MjIwMjEsIDB4OGY0MjAzNTgsIDB4OGY0MzAwMDAsIAotMHhhZjQ1MDAyOCwgMHg0NDEwMjEsIDB4MTA2MDAwMDcsIDB4YWY0MjAzNTgsIAotMHhhZjgwMDA0YywgMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwgMHgwLCAKLTB4MTAwMDAwMDUsIDB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgCi0weDEwNDBmZmZkLCAweDAsIDB4OGY4MjAwNjAsIDB4MzQ0MjAwMDgsIAotMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAKLTB4MTAwMDAwNDEsIDB4YWY4MDAwNGMsIDB4MTAwMDAwM2YsIDB4YWY4MDAwNDgsIAotMHgxMDQwMDAyZiwgMHgzMjQyMTAwMCwgMHgxMDQwMDAwYywgMHgzMjQyNDAwMCwgCi0weDhlMjMwMDFjLCAweDhmNDIwMDUwLCAweDYyMjAyMywgMHg0ODIwMDAxLCAKLTB4MjQ4NDAyMDAsIDB4OGY0MjAzNWMsIDB4NDQxMDIxLCAweGFmNDIwMzVjLCAKLTB4OGY0MjAzNjgsIDB4MTAwMDAwMWEsIDB4YWY0MzAwNTAsIDB4MTA0MDAwMGMsIAotMHgzMmMyODAwMCwgMHg4ZTIzMDAxYywgMHg4ZjQyMDA3MCwgMHg2MjIwMjMsIAotMHg0ODIwMDAxLCAweDI0ODQwNDAwLCAweDhmNDIwMzY0LCAweDQ0MTAyMSwgCi0weGFmNDIwMzY0LCAweDhmNDIwMzY4LCAweDEwMDAwMDBkLCAweGFmNDMwMDcwLCAKLTB4MTA0MDAwMGUsIDB4M2MwMjA4MDAsIDB4OGUyMzAwMWMsIDB4OGY0MjAwNjAsIAotMHg2MjIwMjMsIDB4NDgyMDAwMSwgMHgyNDg0MDEwMCwgMHg4ZjQyMDM2MCwgCi0weDQ0MTAyMSwgMHhhZjQyMDM2MCwgMHg4ZjQyMDM2OCwgMHhhZjQzMDA2MCwgCi0weDQ0MTAyMSwgMHhhZjQyMDM2OCwgMHgzYzAyMDgwMCwgMHgyYzIxMDI0LCAKLTB4NTA0MDAwMTEsIDB4MzY5NDAwNDAsIDB4MTAwMDAwMGYsIDB4MCwgCi0weDMyNDIwMDQ4LCAweDEwNDAwMDA3LCAweDI0MTUwMDAxLCAweDhlMjIwMDFjLCAKLTB4M2MwM2ZmZmYsIDB4NDNmMDI0LCAweDMwNDJmZmZmLCAweDEwMDBmZDc1LCAKLTB4YWUyMjAwMWMsIDB4MzI0MjAxMDAsIDB4MTA0MDAwMDMsIDB4MCwgCi0weGMwMDJiZDgsIDB4MCwgMHg4ZmJmMDA1MCwgMHg4ZmJlMDA0YywgCi0weDhmYjUwMDQ4LCAweDhmYjMwMDQ0LCAweDhmYjIwMDQwLCAweDhmYjEwMDNjLCAKLTB4OGZiMDAwMzgsIDB4M2UwMDAwOCwgMHgyN2JkMDA1OCwgMHgzZTAwMDA4LCAKLTB4MCwgMHgwLCAweDAsIDB4OGY4MzAwZTQsIAotMHg4ZjgyMDBlMCwgMHgyNDA0ZmZmOCwgMHg0NDEwMjQsIDB4NjIxMDI2LCAKLTB4MjEwMmIsIDB4MjEwMjMsIDB4M2UwMDAwOCwgMHg2MjEwMjQsIAotMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZTAsIDB4YWZiZjAwMWMsIAotMHhhZmIwMDAxOCwgMHg4Zjg2MDBjNCwgMHg4Zjg0MDBlMCwgMHg4Zjg1MDBlNCwgCi0weDI0MDJmZmY4LCAweDgyMTgyNCwgMHgxMGEzMDAwOSwgMHgyNzYyM2ZmOCwgCi0weDE0YTIwMDAyLCAweDI0YTIwMDA4LCAweDI3NjIzMDAwLCAweDQwODAyMSwgCi0weDE2MDMwMDA1LCAweDMwODIwMDA0LCAweDEwNDAwMDA0LCAweGMwMjAyMSwgCi0weDEwMDAwMDIyLCAweDEwMjEsIDB4OGUwNDAwMDAsIDB4OGY0MjAxMWMsIAotMHgxNGEyMDAwMywgMHgwLCAweDhmNDIwMTIwLCAweGFmNDIwMTE0LCAKLTB4OGNhMzAwMDAsIDB4OGY0MjAxNDgsIDB4ODMxODIzLCAweDQzMTAyYiwgCi0weDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsIDB4NjIxODIxLCAKLTB4OTRhMjAwMDYsIDB4MjQ0MjAwNTAsIDB4NjIxMDJiLCAweDE0NDAwMDBmLCAKLTB4YTAxMDIxLCAweGFmYTQwMDEwLCAweGFmYTMwMDE0LCAweDhjYTYwMDAwLCAKLTB4OGNhNzAwMDQsIDB4M2MwNDAwMDEsIDB4YzAwMmIzYiwgMHgyNDg0Njg5NCwgCi0weDhmNDIwMjBjLCAweDI0NDIwMDAxLCAweGFmNDIwMjBjLCAweDhmNDIwMjBjLCAKLTB4MTAyMSwgMHhhZjkwMDBlOCwgMHhhZjkwMDBlNCwgMHg4ZmJmMDAxYywgCi0weDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4M2UwMDAwOCwgCi0weDAsIDB4OGY4NDAwZTAsIDB4OGY4ODAwYzQsIDB4OGY4MzAwZTgsIAotMHgyNDAyZmZmOCwgMHg4MjM4MjQsIDB4ZTMyMDIzLCAweDJjODIxMDAwLCAKLTB4NTA0MDAwMDEsIDB4MjQ4NDEwMDAsIDB4NDIwYzIsIDB4ODAxODIxLCAKLTB4OGY0NDAyNTgsIDB4OGY0NTAyNWMsIDB4MTAyMSwgMHhhMzI4MjEsIAotMHhhMzMwMmIsIDB4ODIyMDIxLCAweDg2MjAyMSwgMHhhZjQ0MDI1OCwgCi0weGFmNDUwMjVjLCAweDhmODMwMGM4LCAweDhmNDIwMTQ4LCAweDEwMzIwMjMsIAotMHg4MjEwMmIsIDB4MTQ0MDAwMDQsIDB4ODAxODIxLCAweDhmNDIwMTQ4LCAKLTB4ODIyMDIxLCAweDgwMTgyMSwgMHg4ZjQ0MDI1MCwgMHg4ZjQ1MDI1NCwgCi0weDEwMjEsIDB4YTMyODIxLCAweGEzMzAyYiwgMHg4MjIwMjEsIAotMHg4NjIwMjEsIDB4YWY0NDAyNTAsIDB4YWY0NTAyNTQsIDB4YWY4ODAwYzgsIAotMHhhZjg3MDBlNCwgMHhhZjg3MDBlOCwgMHgzZTAwMDA4LCAweDAsIAotMHgyN2JkZmYzMCwgMHgyNDBhMDAwMSwgMHhhZmJmMDBjOCwgMHhhZmJlMDBjNCwgCi0weGFmYjUwMGMwLCAweGFmYjMwMGJjLCAweGFmYjIwMGI4LCAweGFmYjEwMGI0LCAKLTB4YWZiMDAwYjAsIDB4YTNhMDAwOTcsIDB4YWZhMDAwNDQsIDB4YWZhYTAwNWMsIAotMHg5MzQyMDVjNCwgMHhhN2EwMDA4ZSwgMHgxMDQwMDAwYSwgMHhhN2EwMDA4NiwgCi0weDhmNGIwMGM0LCAweGFmYWIwMDY0LCAweDhmNGEwMGMwLCAweGFmYWEwMDZjLCAKLTB4OGY0YjAwY2MsIDB4YWZhYjAwNzQsIDB4OGY0YTAwYzgsIDB4MTAwMDAxMjksIAotMHhhZmFhMDA3YywgMHg4ZjQyMDExNCwgMHg0MGY4MDksIDB4MCwgCi0weDQwMzAyMSwgMHgxMGMwMDM0ZiwgMHgwLCAweDhjYzIwMDAwLCAKLTB4OGNjMzAwMDQsIDB4YWZhMjAwMjAsIDB4YWZhMzAwMjQsIDB4OGZhYjAwMjQsIAotMHg4ZmFhMDAyMCwgMHgzMTYyZmZmZiwgMHgyNDQyZmZmYywgMHhhZmEyMDA2YywgCi0weDNjMDIwMDA2LCAweDJjMjEwMjQsIDB4YWZhYjAwN2MsIDB4MTQ0MDAwMTUsIAotMHhhZmFhMDA2NCwgMHg5MTQyMDAwMCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAxMSwgCi0weDI0MDJmZmZmLCAweDhkNDMwMDAwLCAweDE0NjIwMDA0LCAweDM0MDJmZmZmLCAKLTB4OTU0MzAwMDQsIDB4MTA2MjAwMGIsIDB4MCwgMHhjMDAyNGJiLCAKLTB4OGZhNDAwNjQsIDB4MzA0MjAwZmYsIDB4MTQ0MDAwMDYsIDB4MCwgCi0weDhmNDIwMTE4LCAweDQwZjgwOSwgMHgwLCAweDEwMDAwMzJkLCAKLTB4MCwgMHg4ZmEyMDAyNCwgMHgzYzAzZmZiZiwgMHgzNDYzZmZmZiwgCi0weDQzMTAyNCwgMHgzYzAzZmZmZiwgMHg0MzE4MjQsIDB4MTQ2MDAwMDMsIAotMHhhZmEyMDAyNCwgMHgxMDAwMDA0MCwgMHgxODIxLCAweDNjMDIwMDgwLCAKLTB4NjIxMDI0LCAweDEwNDAwMDA3LCAweDAsIDB4OGY0MjAzOGMsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDM4YywgMHg4ZjQyMDM4YywgMHgxMDAwMDAzNiwgCi0weDI0MDMwMDAxLCAweDhmNDIwMjEwLCAweDI0NDIwMDAxLCAweGFmNDIwMjEwLCAKLTB4OGY0MjAyMTAsIDB4M2MwMjAwMDEsIDB4NjIxMDI0LCAweDEwNDAwMDA2LCAKLTB4M2MwMjAwMDIsIDB4OGY0MjAxYzQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAxYzQsIAotMHg4ZjQyMDFjNCwgMHgzYzAyMDAwMiwgMHg2MjEwMjQsIDB4MTA0MDAwMDYsIAotMHgzYzAyMDAwNCwgMHg4ZjQyMDM3YywgMHgyNDQyMDAwMSwgMHhhZjQyMDM3YywgCi0weDhmNDIwMzdjLCAweDNjMDIwMDA0LCAweDYyMTAyNCwgMHgxMDQwMDAwNiwgCi0weDNjMDIwMDA4LCAweDhmNDIwMzgwLCAweDI0NDIwMDAxLCAweGFmNDIwMzgwLCAKLTB4OGY0MjAzODAsIDB4M2MwMjAwMDgsIDB4NjIxMDI0LCAweDEwNDAwMDA2LCAKLTB4M2MwMjAwMTAsIDB4OGY0MjAzODQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzODQsIAotMHg4ZjQyMDM4NCwgMHgzYzAyMDAxMCwgMHg2MjEwMjQsIDB4MTA0MDAwMDYsIAotMHgzYzAyMDAyMCwgMHg4ZjQyMDFjMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDFjMCwgCi0weDhmNDIwMWMwLCAweDNjMDIwMDIwLCAweDYyMTAyNCwgMHgxMDQwMDAwNiwgCi0weDI0MDMwMDAxLCAweDhmNDIwMzg4LCAweDI0NDIwMDAxLCAweGFmNDIwMzg4LCAKLTB4OGY0MjAzODgsIDB4MjQwMzAwMDEsIDB4OGMwMjAyNjAsIDB4OGZhYjAwNmMsIAotMHg0YjEwMmIsIDB4MTA0MDAwMTQsIDB4MzA3MDAwZmYsIDB4OGY0MjAxZTgsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDFlOCwgMHg4ZjQyMDFlOCwgMHg4ZmFhMDA3YywgCi0weDhmODIwMGUwLCAweDM1NGEwMTAwLCAweGFmYWEwMDdjLCAweGFmYTIwMDEwLCAKLTB4OGY4MjAwZTQsIDB4MjQxMDAwMDEsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4YTAsIAotMHhhZmEyMDAxNCwgMHg4ZmE2MDAyMCwgMHg4ZmE3MDAyNCwgMHgzYzA1MDAwNywgCi0weGMwMDJiM2IsIDB4MzRhNTA4MDAsIDB4MTIwMDAwMTAsIDB4M2MwMjAwODAsIAotMHgyYzIxMDI0LCAweDE0NDAwMDBlLCAweDMyYzIwNDAwLCAweDhmYWIwMDdjLCAKLTB4M2MwMjAwODAsIDB4MzQ0MjAxMDAsIDB4MTYyMTAyNCwgMHgxMDQwMDAwNSwgCi0weDAsIDB4OGY0MjAyMGMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyMGMsIAotMHg4ZjQyMDIwYywgMHgxMDAwMDJiMCwgMHg4ZmEzMDA2YywgMHgzMmMyMDQwMCwgCi0weDEwNDAwMDE1LCAweDM0MDI4MTAwLCAweDhmYWEwMDY0LCAweDk1NDMwMDBjLCAKLTB4MTQ2MjAwMTIsIDB4M2MwMjAxMDAsIDB4MjQwYjAyMDAsIDB4YTdhYjAwOGUsIAotMHg5NTQyMDAwZSwgMHg4ZDQzMDAwOCwgMHg4ZDQ0MDAwNCwgMHg4ZDQ1MDAwMCwgCi0weDhmYWEwMDZjLCAweDhmYWIwMDY0LCAweDI1NGFmZmZjLCAweGFmYWEwMDZjLCAKLTB4YTdhMjAwODYsIDB4YWQ2MzAwMGMsIDB4YWQ2NDAwMDgsIDB4YWQ2NTAwMDQsIAotMHgyNTZiMDAwNCwgMHhhZmFiMDA2NCwgMHgzYzAyMDEwMCwgMHgyYzIxMDI0LCAKLTB4MTA0MDAwMDQsIDB4MCwgMHg4ZmFhMDA2YywgMHgyNTRhMDAwNCwgCi0weGFmYWEwMDZjLCAweDhmNDIwMGJjLCAweDUwNDAwMDBhLCAweGFmYTAwMDc0LCAKLTB4OGZhYjAwNmMsIDB4NGIxMDJiLCAweDUwNDAwMDA2LCAweGFmYTAwMDc0LCAKLTB4OGY0MjAwYmMsIDB4MTYyMTAyMywgMHhhZmEyMDA3NCwgMHg4ZjRhMDBiYywgCi0weGFmYWEwMDZjLCAweDhmNDIwMDgwLCAweDhmYWIwMDZjLCAweDRiMTAyYiwgCi0weDEwNDAwMDU2LCAweDMyYzI4MDAwLCAweDEwNDAwMDVlLCAweDI0MGEwMDAzLCAKLTB4MzJjMjEwMDAsIDB4MTA0MDAwNWIsIDB4YWZhYTAwNWMsIDB4MTAwMDAwNTgsIAotMHgyNDBiMDAwNCwgMHg4ZjQyMDM1MCwgMHgyNDAzZmZiZiwgMHgyODNhMDI0LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzNTAsIDB4MTAwMDAyNGYsIDB4OGY0MjAzNTAsIAotMHgyYzJiMDI1LCAweDI0MDJmZmJmLCAweDI4MmEwMjQsIDB4OGY4MzAxMjgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjhkMCwgMHgyNjYyMDAwMSwgMHhhZmEyMDAxNCwgCi0weGFmYTMwMDEwLCAweDhmODYwMTIwLCAweDhmODcwMTI0LCAweDNjMDUwMDA3LCAKLTB4YzAwMmIzYiwgMHgzNGE1MjI1MCwgMHgxMDAwMDIzZiwgMHgwLCAKLTB4MmMyYjAyNSwgMHgyNDAyZmZiZiwgMHgyODJhMDI0LCAweDhmODMwMTI4LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDY4ZDAsIDB4MjQwMjAwMDIsIDB4YWZhMjAwMTQsIAotMHhhZmEzMDAxMCwgMHg4Zjg2MDEyMCwgMHg4Zjg3MDEyNCwgMHgzYzA1MDAwNywgCi0weGMwMDJiM2IsIDB4MzRhNTI0NTAsIDB4MTAwMDAyMmYsIDB4MCwgCi0weDhlYTIwMDAwLCAweDhlYTMwMDA0LCAweDNjMDQwMDAxLCAweDI0ODQ2OGU4LCAKLTB4YWZiMDAwMTAsIDB4YWZiZTAwMTQsIDB4OGVhNzAwMTgsIDB4MzRhNTI4MDAsIAotMHhjMDAyYjNiLCAweDYwMzAyMSwgMHgxMDAwMDIyMywgMHgwLCAKLTB4YTZiMTAwMGEsIDB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4ZjAsIAotMHhhZmJlMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZjQ2MDA0NCwgMHg4Zjg3MDEyMCwgCi0weDNjMDUwMDA3LCAweGMwMDJiM2IsIDB4MzRhNTMwMDAsIDB4MTAwMDAyMTYsIAotMHgwLCAweGE2YjEwMDBhLCAweGE2YjIwMDBlLCAweDhmODIwMTI0LCAKLTB4M2MwNDAwMDEsIDB4MjQ4NDY4ZmMsIDB4YWZiZTAwMTQsIDB4YWZhMjAwMTAsIAotMHg4ZjQ2MDA0NCwgMHg4Zjg3MDEyMCwgMHgzYzA1MDAwNywgMHhjMDAyYjNiLCAKLTB4MzRhNTMyMDAsIDB4MTAwMDAyMDgsIDB4MCwgMHg4ZjQyMDA4NCwgCi0weDhmYWEwMDZjLCAweDRhMTAyYiwgMHgxNDQwMDAwNywgMHgzYzAyMDAwMSwgCi0weDJjMjEwMjQsIDB4MTA0MDAwMDQsIDB4MCwgMHgyNDBiMDAwMiwgCi0weGFmYWIwMDVjLCAweDhmYWEwMDZjLCAweDExNDAwMjFiLCAweDI3YWIwMDIwLCAKLTB4YWZhYjAwYTQsIDB4M2MwYTAwMWYsIDB4MzU0YWZmZmYsIDB4YWZhYTAwOWMsIAotMHg4ZmFiMDA1YywgMHgyNDBhMDAwMSwgMHg1NTZhMDAyMSwgMHgyNDBhMDAwMiwgCi0weDhmNDMwMDU0LCAweDhmNDIwMDUwLCAweDEwNjIwMDBiLCAweDI3NGIwMDU0LCAKLTB4OGY1ZTAwNTQsIDB4MzQwM2VjYzAsIDB4YWZhYjAwNGMsIDB4MjdjMjAwMDEsIAotMHgzMDQyMDFmZiwgMHhhZmEyMDA1NCwgMHgxZTExNDAsIDB4NDMxMDIxLCAKLTB4MTAwMDAwNmIsIDB4MmUyYTgyMSwgMHg4ZjQyMDA0NCwgMHg4ZmFhMDA2YywgCi0weDNjMDQwMDAxLCAweDI0ODQ2OGFjLCAweGFmYWEwMDE0LCAweGFmYTIwMDEwLCAKLTB4OGY0NjAwNTQsIDB4OGY0NzAwNTAsIDB4M2MwNTAwMDcsIDB4YzAwMmIzYiwgCi0weDM0YTUxMzAwLCAweDhmNDMwMzUwLCAweDI0MDJmZmJmLCAweDI4MmEwMjQsIAotMHgyNDYzMDAwMSwgMHhhZjQzMDM1MCwgMHgxMDAwMDFkMywgMHg4ZjQyMDM1MCwgCi0weDE1NmEwMDFkLCAweDAsIDB4OGY0MzAwNzQsIDB4OGY0MjAwNzAsIAotMHgxMDYyMDAwYSwgMHgyNzRiMDA3NCwgMHg4ZjVlMDA3NCwgMHhhZmFiMDA0YywgCi0weDI3YzIwMDAxLCAweDMwNDIwM2ZmLCAweGFmYTIwMDU0LCAweDFlMTE0MCwgCi0weDI0NDI2Y2MwLCAweDEwMDAwMDRhLCAweDJlMmE4MjEsIDB4OGY0MjAwNDQsIAotMHg4ZmFhMDA2YywgMHgzYzA0MDAwMSwgMHgyNDg0NjhiOCwgMHgzYzA1MDAwNywgCi0weGFmYWEwMDE0LCAweGFmYTIwMDEwLCAweDhmNDYwMDc0LCAweDhmNDcwMDcwLCAKLTB4MzRhNTE1MDAsIDB4MjQwYjAwMDEsIDB4YzAwMmIzYiwgMHhhZmFiMDA1YywgCi0weDEwMDBmZmMzLCAweDAsIDB4OGY0MzAwNjQsIDB4OGY0MjAwNjAsIAotMHgxMDYyMDAxYSwgMHgyNzRhMDA2NCwgMHg4ZjVlMDA2NCwgMHg4ZmFiMDA1YywgCi0weGFmYWEwMDRjLCAweDI3YzIwMDAxLCAweDMwNDIwMGZmLCAweGFmYTIwMDU0LCAKLTB4MjQwMjAwMDQsIDB4MTU2MjAwMGUsIDB4MWUxMTQwLCAweDFlMTE4MCwgCi0weDI0NDIwY2MwLCAweDJlMjEwMjEsIDB4YWZhMjAwNDQsIDB4OTQ0MjAwMmEsIAotMHg4ZmFhMDA0NCwgMHg4ZmFiMDA2YywgMHg0YjEwMmIsIDB4MTA0MDAwMjQsIAotMHgyNTU1MDAyMCwgMHgyNDBhMDAwMSwgMHgxMDAwMDAyMSwgMHhhM2FhMDA5NywgCi0weDI0NDI0Y2MwLCAweDEwMDAwMDFlLCAweDJlMmE4MjEsIDB4OGY0MjAwNDQsIAotMHg4ZmFiMDA2YywgMHgzYzA0MDAwMSwgMHgyNDg0NjhjNCwgMHhhZmFiMDAxNCwgCi0weGFmYTIwMDEwLCAweDhmNDYwMDY0LCAweDhmNDcwMDYwLCAweDNjMDUwMDA3LCAKLTB4YzAwMmIzYiwgMHgzNGE1MTgwMCwgMHgzYzAyMDAwOCwgMHgyYzIxMDI0LCAKLTB4MTQ0MGZmMzQsIDB4MCwgMHg4ZjQyMDM3MCwgMHgyNDBhMDAwMSwgCi0weGFmYWEwMDVjLCAweDI0NDIwMDAxLCAweGFmNDIwMzcwLCAweDEwMDBmZjkwLCAKLTB4OGY0MjAzNzAsIDB4MjdhMzAwMzYsIDB4MTMxMDQwLCAweDYyMTgyMSwgCi0weDk0NjIwMDAwLCAweDQ0MTAyMSwgMHgxMDAwMDAyMCwgMHhhNDYyMDAwMCwgCi0weDhmYWIwMDY0LCAweGFlYWIwMDE4LCAweDkzYTIwMDk3LCAweDEwNDAwMDcyLCAKLTB4OTgyMSwgMHg4ZmFhMDA0NCwgMHg4ZmE0MDA2YywgMHg4ZmEzMDBhNCwgCi0weDI1NDIwMDIwLCAweGFmYTIwMDI4LCAweDI1NDIwMDA4LCAweGFmYTIwMDMwLCAKLTB4MjU0MjAwMTAsIDB4YWZhYTAwMmMsIDB4YWZhMjAwMzQsIDB4OTU0MjAwMmEsIAotMHhhN2EyMDAzOCwgMHg5NTQyMDAxOCwgMHhhN2EyMDAzYSwgMHg5NTQyMDAxYSwgCi0weGE3YTIwMDNjLCAweDk1NDIwMDFjLCAweGE3YTIwMDNlLCAweDk0NjIwMDE4LCAKLTB4MjQ2MzAwMDIsIDB4ODIyMDIzLCAweDE4ODBmZmRlLCAweDI2NzMwMDAxLCAKLTB4MmU2MjAwMDQsIDB4MTQ0MGZmZjksIDB4MCwgMHg4ZjQyMDBmYywgCi0weDI2NjUwMDAxLCAweGEyMTAyYSwgMHgxNDQwMDAyYiwgMHgyNDAzMDAwMSwgCi0weDhmODMwMTJjLCAweDEwNjAwMDIzLCAweDAsIDB4OGY4MjAxMjQsIAotMHg0MzEwMjMsIDB4MjIxNDMsIDB4NTg4MDAwMDEsIDB4MjQ4NDAwNDAsIAotMHg4ZjgyMDEyOCwgMHg0MzEwMjMsIDB4MjE5NDMsIDB4NTg2MDAwMDEsIAotMHgyNDYzMDA0MCwgMHg2NDEwMmEsIDB4NTQ0MDAwMDEsIDB4NjAyMDIxLCAKLTB4YWY0NDAwZmMsIDB4OGY0MjAwZmMsIDB4YTIxMDJhLCAweDEwNDAwMDExLCAKLTB4MjQwMzAwMDEsIDB4MTAwMDAwMTUsIDB4MzA2MjAwZmYsIDB4OGZhYjAwNjQsIAotMHg5NjA3MDAxOCwgMHhhZmFiMDAxMCwgMHg4ZTIyMDAwOCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2OGRjLCAweDhjNDMwMDA0LCAweDhjNDIwMDAwLCAweDM0YTUyNDAwLCAKLTB4MjQwMzAyMSwgMHhjMDAyYjNiLCAweGFmYTMwMDE0LCAweDEwMDAwMDJiLCAKLTB4MCwgMHg4ZjQyMDMzNCwgMHgxODIxLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzMzQsIDB4OGY0MjAzMzQsIDB4MzA2MjAwZmYsIDB4NTA0MGZlZGMsIAotMHgzYzAyMDgwMCwgMHgxMjYwMDAyMSwgMHg5MDIxLCAweDhmYjEwMGE0LCAKLTB4MjIwODAyMSwgMHg4ZTIyMDAwOCwgMHg5NjA3MDAxOCwgMHg4ZmE2MDA2NCwgCi0weDhjNDQwMDAwLCAweDhjNDUwMDA0LCAweDI0MGEwMDAxLCAweGFmYWEwMDEwLCAKLTB4YWZiZTAwMTQsIDB4OGY0MjAwMDgsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIAotMHg0MGY4MDksIDB4MCwgMHgxMDQwZmZkOCwgMHgzYzA1MDAwNywgCi0weDk2MDIwMDE4LCAweDhmYWIwMDY0LCAweDhmYWEwMDljLCAweDE2MjU4MjEsIAotMHgxNGIxMDJiLCAweDEwNDAwMDA0LCAweGFmYWIwMDY0LCAweDhmNDIwMTQ4LCAKLTB4MTYyNTgyMywgMHhhZmFiMDA2NCwgMHgyNjEwMDAwMiwgMHgyNjUyMDAwMSwgCi0weDI1MzEwMmIsIDB4MTQ0MGZmZTMsIDB4MjYzMTAwMDQsIDB4OGZiMDAwNmMsIAotMHgxMDAwMDAzNiwgMHg5N2IxMDAzOCwgMHg4ZjQyMDBmYywgMHgyNDA1MDAwMiwgCi0weGEyMTAyYSwgMHgxNDQwMDAxYiwgMHgyNDAzMDAwMSwgMHg4ZjgzMDEyYywgCi0weDEwNjAwMDEzLCAweDAsIDB4OGY4MjAxMjQsIDB4NDMxMDIzLCAKLTB4MjIxNDMsIDB4NTg4MDAwMDEsIDB4MjQ4NDAwNDAsIDB4OGY4MjAxMjgsIAotMHg0MzEwMjMsIDB4MjE5NDMsIDB4NTg2MDAwMDEsIDB4MjQ2MzAwNDAsIAotMHg2NDEwMmEsIDB4NTQ0MDAwMDEsIDB4NjAyMDIxLCAweGFmNDQwMGZjLCAKLTB4OGY0MjAwZmMsIDB4YTIxMDJhLCAweDE0NDAwMDA2LCAweDI0MDMwMDAxLCAKLTB4OGY0MjAzMzQsIDB4MTgyMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMzNCwgCi0weDhmNDIwMzM0LCAweDMwNjIwMGZmLCAweDEwNDBmZWE1LCAweDNjMDIwODAwLCAKLTB4OTZiMTAwMGEsIDB4OGZiMDAwNmMsIDB4MzIyM2ZmZmYsIDB4NzAxMDJiLCAKLTB4NTQ0MDAwMDEsIDB4NjA4MDIxLCAweDhlYTQwMDAwLCAweDhlYTUwMDA0LCAKLTB4MjQwYjAwMDEsIDB4YWZhYjAwMTAsIDB4YWZiZTAwMTQsIDB4OGY0MjAwMDgsIAotMHg4ZmE2MDA2NCwgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIAotMHgyMDAzODIxLCAweDEwNDBmZWEyLCAweDNjMDUwMDA3LCAweDk2YTMwMDBlLCAKLTB4OTdhYTAwOGUsIDB4MTE0MDAwMDcsIDB4NjA5MDIxLCAweDkzNDIwNWM0LCAKLTB4MTQ0MDAwMDQsIDB4MCwgMHg5N2FiMDA4NiwgMHg2YTE4MjUsIAotMHhhNmFiMDAxNiwgMHg4ZmFhMDA3YywgMHgzYzAyZmZmZiwgMHgxNDIxMDI0LCAKLTB4MTA0MDAwMDMsIDB4YTE0MDIsIDB4MzQ2MzA0MDAsIDB4YTZhMjAwMTQsIAotMHg4ZmFiMDA2YywgMHg1NjBiMDA3MiwgMHhhNmEzMDAwZSwgMHgzNDYyMDAwNCwgCi0weGE2YTIwMDBlLCAweDhmYWEwMDc0LCAweDE2YTEwMjEsIDB4YTZhMjAwMGEsIAotMHg4ZjQzMDA0NCwgMHg4ZjQ0MDFhMCwgMHg4ZjQ1MDFhNCwgMHgzNDAyODAwMCwgCi0weGFmYTIwMDEwLCAweDhmNDIwMDQ0LCAweDJhMDMwMjEsIDB4MjQwNzAwMjAsIAotMHhhZmEyMDAxNCwgMHg4ZjQyMDAwYywgMHgzMTk0MCwgMHg2MDQ4MjEsIAotMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHg0MDIxLCAweGE5MjgyMSwgCi0weGE5MTgyYiwgMHg4ODIwMjEsIDB4NDBmODA5LCAweDgzMjAyMSwgCi0weDUwNDBmZTdmLCAweGE2YjIwMDBlLCAweDhmNDIwMzY4LCAweGFmYTAwMDZjLCAKLTB4YTM0MDA1YzQsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNjgsIDB4OGZhYjAwNWMsIAotMHgyNDBhMDAwMSwgMHg4ZjQyMDM2OCwgMHgxNTZhMDAwNiwgMHgyNDBhMDAwMiwgCi0weDhmNDIwMzVjLCAweDI0NDJmZmZmLCAweGFmNDIwMzVjLCAweDEwMDAwMDBjLCAKLTB4OGY0MjAzNWMsIDB4MTU2YTAwMDYsIDB4MCwgMHg4ZjQyMDM2NCwgCi0weDI0NDJmZmZmLCAweGFmNDIwMzY0LCAweDEwMDAwMDA1LCAweDhmNDIwMzY0LCAKLTB4OGY0MjAzNjAsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNjAsIDB4OGY0MjAzNjAsIAotMHg4ZmFhMDA1NCwgMHg4ZmFiMDA0YywgMHhhZDZhMDAwMCwgMHg4ZjQyMDA0NCwgCi0weDhmNDQwMDg4LCAweDhmNDMwMDc4LCAweDI0NDIwMDAxLCAweDQ0MTAyNCwgCi0weDI0NjMwMDAxLCAweGFmNDIwMDQ0LCAweGFmNDMwMDc4LCAweDhjMDIwMjQwLCAKLTB4NjIxODJiLCAweDE0NjAwMDc1LCAweDI0MDcwMDA4LCAweDhmNDQwMTY4LCAKLTB4OGY0NTAxNmMsIDB4OGY0MzAwNDQsIDB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIAotMHgyNDAyMDA0MCwgMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgMHhhZmE4MDAxOCwgCi0weDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwgCi0weDI0MGIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDJiNDBmMiwgCi0weDhmODIwMTI0LCAweGFmYTIwMDEwLCAweDhmODIwMTI4LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDY4OGMsIDB4YWZhMjAwMTQsIDB4OGY0NjAwNDQsIDB4OGY4NzAxMjAsIAotMHgzYzA1MDAwOSwgMHhjMDAyYjNiLCAweDM0YTUxMzAwLCAweDEwMDAwMDBiLCAKLTB4MCwgMHg4ZjQyMDMwNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwNCwgCi0weDhmNDIwMzA0LCAweDhmNDIwMDQ0LCAweGFmNDIwMDdjLCAweDNjMDEwMDAxLCAKLTB4MzcwODIxLCAweGEwMjA0MGYyLCAweGFmNDAwMDc4LCAweDhmNDIwMzE4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzMTgsIDB4MTAwMDAwNDgsIDB4OGY0MjAzMTgsIAotMHhhNmIwMDAwYSwgMHg4ZjQzMDA0NCwgMHg4ZjQ0MDFhMCwgMHg4ZjQ1MDFhNCwgCi0weDM0MDI4MDAwLCAweGFmYTIwMDEwLCAweDhmNDIwMDQ0LCAweDJhMDMwMjEsIAotMHgyNDA3MDAyMCwgMHhhZmEyMDAxNCwgMHg4ZjQyMDAwYywgMHgzMTk0MCwgCi0weDYwNDgyMSwgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHg0MDIxLCAKLTB4YTkyODIxLCAweGE5MTgyYiwgMHg4ODIwMjEsIDB4NDBmODA5LCAKLTB4ODMyMDIxLCAweDEwNDBmZTFmLCAweDI0MGEwMDAxLCAweGEzNGEwNWM0LCAKLTB4OGZhYjAwNmMsIDB4OGZhYTAwNjQsIDB4MTcwNTgyMywgMHhhZmFiMDA2YywgCi0weDhmYWIwMDljLCAweDE1MDUwMjEsIDB4MTZhMTAyYiwgMHgxMDQwMDAwNCwgCi0weGFmYWEwMDY0LCAweDhmNDIwMTQ4LCAweDE0MjUwMjMsIDB4YWZhYTAwNjQsIAotMHg4ZjQyMDM2OCwgMHgyNDQyZmZmZiwgMHhhZjQyMDM2OCwgMHg4ZmFhMDA1YywgCi0weDI0MGIwMDAxLCAweDhmNDIwMzY4LCAweDE1NGIwMDA2LCAweDI0MGIwMDAyLCAKLTB4OGY0MjAzNWMsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNWMsIDB4MTAwMDAwMGMsIAotMHg4ZjQyMDM1YywgMHgxMTRiMDAwNiwgMHgwLCAweDhmNDIwMzYwLCAKLTB4MjQ0MmZmZmYsIDB4YWY0MjAzNjAsIDB4MTAwMDAwMDUsIDB4OGY0MjAzNjAsIAotMHg4ZjQyMDM2NCwgMHgyNDQyZmZmZiwgMHhhZjQyMDM2NCwgMHg4ZjQyMDM2NCwgCi0weDhmYWIwMDU0LCAweDhmYWEwMDRjLCAweGFkNGIwMDAwLCAweDhmNDIwMDQ0LCAKLTB4OGY0NDAwODgsIDB4OGY0MzAwNzgsIDB4MjQ0MjAwMDEsIDB4NDQxMDI0LCAKLTB4MjQ2MzAwMDEsIDB4YWY0MjAwNDQsIDB4YWY0MzAwNzgsIDB4OGZhYTAwNmMsIAotMHgxNTQwZmUwYiwgMHgwLCAweDhmYWIwMDZjLCAweDExNjAwMDFlLCAKLTB4MCwgMHg5MzQyMDVjNCwgMHgxMDQwMDAwOSwgMHgwLCAKLTB4OGZhYTAwNjQsIDB4YWY0YTAwYzQsIDB4YWY0YjAwYzAsIDB4OGZhYjAwN2MsIAotMHhhZjRiMDBjOCwgMHg4ZmFhMDA3NCwgMHgxMDAwMDAwZSwgMHhhZjRhMDBjYywgCi0weDk3YWIwMDhlLCAweDExNjAwMDBiLCAweDM0MDM4MTAwLCAweDhmYTIwMDIwLCAKLTB4OGM0NjAwMGMsIDB4YTQ0MzAwMGMsIDB4OTdhYTAwODYsIDB4OGM0NDAwMDQsIAotMHg4YzQ1MDAwOCwgMHhhNDRhMDAwZSwgMHhhYzQ0MDAwMCwgMHhhYzQ1MDAwNCwgCi0weGFjNDYwMDA4LCAweDhmNDIwMzRjLCAweDI0NDIwMDAxLCAweGFmNDIwMzRjLCAKLTB4MTAwMDAwMTAsIDB4OGY0MjAzNGMsIDB4OGZhYjAwN2MsIDB4MzE2NGZmZmYsIAotMHgyNDg0ZmZmYywgMHg4MDE4MjEsIDB4OGY0NDAyNTAsIDB4OGY0NTAyNTQsIAotMHg4ZjQ2MDExOCwgMHgxMDIxLCAweGEzMjgyMSwgMHhhMzM4MmIsIAotMHg4MjIwMjEsIDB4ODcyMDIxLCAweGFmNDQwMjUwLCAweGMwZjgwOSwgCi0weGFmNDUwMjU0LCAweDhmYmYwMGM4LCAweDhmYmUwMGM0LCAweDhmYjUwMGMwLCAKLTB4OGZiMzAwYmMsIDB4OGZiMjAwYjgsIDB4OGZiMTAwYjQsIDB4OGZiMDAwYjAsIAotMHgzZTAwMDA4LCAweDI3YmQwMGQwLCAweDNlMDAwMDgsIDB4MCwgCi0weDI3YmRmZjM4LCAweDI0MGIwMDAxLCAweGFmYmYwMGMwLCAweGFmYmUwMGJjLCAKLTB4YWZiNTAwYjgsIDB4YWZiMzAwYjQsIDB4YWZiMjAwYjAsIDB4YWZiMTAwYWMsIAotMHhhZmIwMDBhOCwgMHhhM2EwMDA4NywgMHhhZmEwMDA0NCwgMHhhZmFiMDA1YywgCi0weDkzNDIwNWM0LCAweGE3YTAwMDc2LCAweDEwNDAwMDA3LCAweGE3YTAwMDdlLCAKLTB4OGY0YzAwYzAsIDB4YWZhYzAwNjQsIDB4OGY0YjAwYzgsIDB4OGY1ZTAwYzQsIAotMHgxMDAwMDEzMCwgMHhhZmFiMDA2YywgMHg4ZjQyMDExNCwgMHg0MGY4MDksIAotMHgwLCAweDQwMzAyMSwgMHgxMGMwMDJhMSwgMHgwLCAKLTB4OGNjMjAwMDAsIDB4OGNjMzAwMDQsIDB4YWZhMjAwMjAsIDB4YWZhMzAwMjQsIAotMHg4ZmFjMDAyNCwgMHg4ZmJlMDAyMCwgMHgzMTgyZmZmZiwgMHgyNDQyZmZmYywgCi0weGFmYTIwMDY0LCAweDNjMDIwMDA2LCAweDJjMjEwMjQsIDB4MTQ0MDAwMTUsIAotMHhhZmFjMDA2YywgMHg5M2MyMDAwMCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAxMSwgCi0weDI0MDJmZmZmLCAweDhmYzMwMDAwLCAweDE0NjIwMDA0LCAweDM0MDJmZmZmLCAKLTB4OTdjMzAwMDQsIDB4MTA2MjAwMGIsIDB4MCwgMHhjMDAyNGJiLCAKLTB4M2MwMjAyMSwgMHgzMDQyMDBmZiwgMHgxNDQwMDAwNiwgMHgwLCAKLTB4OGY0MjAxMTgsIDB4NDBmODA5LCAweDAsIDB4MTAwMDAyODAsIAotMHgwLCAweDhmYTIwMDI0LCAweDNjMDNmZmJmLCAweDM0NjNmZmZmLCAKLTB4NDMxMDI0LCAweDNjMDNmZmZmLCAweDQzMTgyNCwgMHgxNDYwMDAwMywgCi0weGFmYTIwMDI0LCAweDEwMDAwMDQwLCAweDgwMjEsIDB4M2MwMjAwODAsIAotMHg2MjEwMjQsIDB4MTA0MDAwMDcsIDB4MCwgMHg4ZjQyMDM4YywgCi0weDI0NDIwMDAxLCAweGFmNDIwMzhjLCAweDhmNDIwMzhjLCAweDEwMDAwMDM2LCAKLTB4MjQxMDAwMDEsIDB4OGY0MjAyMTAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyMTAsIAotMHg4ZjQyMDIxMCwgMHgzYzAyMDAwMSwgMHg2MjEwMjQsIDB4MTA0MDAwMDYsIAotMHgzYzAyMDAwMiwgMHg4ZjQyMDFjNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDFjNCwgCi0weDhmNDIwMWM0LCAweDNjMDIwMDAyLCAweDYyMTAyNCwgMHgxMDQwMDAwNiwgCi0weDNjMDIwMDA0LCAweDhmNDIwMzdjLCAweDI0NDIwMDAxLCAweGFmNDIwMzdjLCAKLTB4OGY0MjAzN2MsIDB4M2MwMjAwMDQsIDB4NjIxMDI0LCAweDEwNDAwMDA2LCAKLTB4M2MwMjAwMDgsIDB4OGY0MjAzODAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzODAsIAotMHg4ZjQyMDM4MCwgMHgzYzAyMDAwOCwgMHg2MjEwMjQsIDB4MTA0MDAwMDYsIAotMHgzYzAyMDAxMCwgMHg4ZjQyMDM4NCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4NCwgCi0weDhmNDIwMzg0LCAweDNjMDIwMDEwLCAweDYyMTAyNCwgMHgxMDQwMDAwNiwgCi0weDNjMDIwMDIwLCAweDhmNDIwMWMwLCAweDI0NDIwMDAxLCAweGFmNDIwMWMwLCAKLTB4OGY0MjAxYzAsIDB4M2MwMjAwMjAsIDB4NjIxMDI0LCAweDEwNDAwMDA2LCAKLTB4MjQxMDAwMDEsIDB4OGY0MjAzODgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzODgsIAotMHg4ZjQyMDM4OCwgMHgyNDEwMDAwMSwgMHg4YzAyMDI2MCwgMHg4ZmFiMDA2NCwgCi0weDRiMTAyYiwgMHgxMDQwMDAxNSwgMHgzMjAyMDBmZiwgMHg4ZjQyMDFlOCwgCi0weDI0NDIwMDAxLCAweGFmNDIwMWU4LCAweDhmNDIwMWU4LCAweDhmYWMwMDZjLCAKLTB4OGY4MjAwZTAsIDB4MzU4YzAxMDAsIDB4YWZhYzAwNmMsIDB4YWZhMjAwMTAsIAotMHg4ZjgyMDBlNCwgMHgyNDEwMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NjhhMCwgCi0weGFmYTIwMDE0LCAweDhmYTYwMDIwLCAweDhmYTcwMDI0LCAweDNjMDUwMDA3LCAKLTB4YzAwMmIzYiwgMHgzNGE1MzYwMCwgMHgzMjAyMDBmZiwgMHgxMDQwMDAxMCwgCi0weDNjMDIwMDgwLCAweDJjMjEwMjQsIDB4MTQ0MDAwMGUsIDB4MzJjMjA0MDAsIAotMHg4ZmFiMDA2YywgMHgzYzAyMDA4MCwgMHgzNDQyMDEwMCwgMHgxNjIxMDI0LCAKLTB4MTA0MDAwMDUsIDB4MCwgMHg4ZjQyMDIwYywgMHgyNDQyMDAwMSwgCi0weGFmNDIwMjBjLCAweDhmNDIwMjBjLCAweDEwMDAwMjAyLCAweDhmYTMwMDY0LCAKLTB4MzJjMjA0MDAsIDB4MTA0MDAwMTIsIDB4MzQwMjgxMDAsIDB4OTdjMzAwMGMsIAotMHgxNDYyMDAwZiwgMHgwLCAweDI0MGMwMjAwLCAweGE3YWMwMDc2LCAKLTB4OTdjMjAwMGUsIDB4OGZjMzAwMDgsIDB4OGZjNDAwMDQsIDB4OGZhYjAwNjQsIAotMHg4ZmM1MDAwMCwgMHgyNTZiZmZmYywgMHhhZmFiMDA2NCwgMHhhN2EyMDA3ZSwgCi0weGFmYzMwMDBjLCAweGFmYzQwMDA4LCAweGFmYzUwMDA0LCAweDI3ZGUwMDA0LCAKLTB4OGZhNzAwNjQsIDB4MzIwMjAwZmYsIDB4MTQ0MDAwMzQsIDB4M2MwMjAxMDAsIAotMHg5N2M0MDAwYywgMHgyYzgzMDVkZCwgMHgzODgyODg3MCwgMHgyYzQyMDAwMSwgCi0weDYyMTgyNSwgMHgxMDYwMDAxNSwgMHgyODIxLCAweDMyYzIwODAwLCAKLTB4MTA0MDAwMTUsIDB4MjQwMjA4MDAsIDB4OTdjMzAwMTQsIDB4MTQ2MjAwMTIsIAotMHgzNDAyYWFhYSwgMHg5N2MzMDAwZSwgMHgxNDYyMDAwNywgMHgyMDIxLCAKLTB4OTdjMzAwMTAsIDB4MjQwMjAzMDAsIDB4MTQ2MjAwMDQsIDB4ODAxMDIxLCAKLTB4OTdjMjAwMTIsIDB4MmM0NDAwMDEsIDB4ODAxMDIxLCAweDU0NDAwMDA2LCAKLTB4MjQwNTAwMTYsIDB4MTAwMDAwMDQsIDB4MCwgMHgyNDAyMDgwMCwgCi0weDUwODIwMDAxLCAweDI0MDUwMDBlLCAweDEwYTAwMDEzLCAweDNjNTIwMjEsIAotMHgyNDgzMDAwOSwgMHgzYzAyMDAxZiwgMHgzNDQyZmZmZiwgMHg0MzEwMmIsIAotMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LCAweDYyMTgyMywgCi0weDkwNjIwMDAwLCAweDM4NDMwMDA2LCAweDJjNjMwMDAxLCAweDM4NDIwMDExLCAKLTB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDA0LCAweDNjMDIwMTAwLCAKLTB4OTQ4MjAwMDIsIDB4NDUzODIxLCAweDNjMDIwMTAwLCAweDJjMjEwMjQsIAotMHg1MDQwMDAwZSwgMHhhZmE3MDA2NCwgMHg4ZmFjMDA2NCwgMHgxMGVjMDAwOCwgCi0weDNjMDUwMDA3LCAweDNjMDQwMDAxLCAweDI0ODQ2OTA4LCAweDhmYTYwMDY0LCAKLTB4MzRhNTQwMDAsIDB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgCi0weDhmYWIwMDY0LCAweDI1NmIwMDA0LCAweGFmYWIwMDY0LCAweDhmNDIwMDgwLCAKLTB4OGZhYzAwNjQsIDB4NGMxMDJiLCAweDEwNDAwMDJjLCAweDMyYzI4MDAwLCAKLTB4MTA0MDAwMzQsIDB4MjQwYjAwMDMsIDB4MzJjMjEwMDAsIDB4MTA0MDAwMzEsIAotMHhhZmFiMDA1YywgMHgxMDAwMDAyZSwgMHgyNDBjMDAwNCwgMHg4ZjQyMDM1MCwgCi0weDI0MDNmZmJmLCAweDI4M2EwMjQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNTAsIAotMHgxMDAwMDE3MywgMHg4ZjQyMDM1MCwgMHgzYzAyMDgwMCwgMHgyYzJiMDI1LCAKLTB4MjQwMmZmYmYsIDB4MjgyYTAyNCwgMHg4ZjgzMDEyOCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2OGQwLCAweDI2NjIwMDAxLCAweGFmYTIwMDE0LCAweGFmYTMwMDEwLCAKLTB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDcsIDB4YzAwMmIzYiwgCi0weDM0YTU1MzAwLCAweDEwMDAwMTYyLCAweDAsIDB4OGVhMjAwMDAsIAotMHg4ZWEzMDAwNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjhlOCwgMHhhZmIwMDAxMCwgCi0weGFmYjEwMDE0LCAweDhlYTcwMDE4LCAweDM0YTU1OTAwLCAweGMwMDJiM2IsIAotMHg2MDMwMjEsIDB4MTAwMDAxNTYsIDB4MCwgMHg4ZjQyMDA4NCwgCi0weDhmYWIwMDY0LCAweDRiMTAyYiwgMHgxNDQwMDAwNywgMHgzYzAyMDAwMSwgCi0weDJjMjEwMjQsIDB4MTA0MDAwMDQsIDB4MCwgMHgyNDBjMDAwMiwgCi0weGFmYWMwMDVjLCAweDhmYWIwMDY0LCAweDExNjAwMTY2LCAweDI3YWMwMDIwLCAKLTB4YWZhYzAwOGMsIDB4OGZhYjAwNWMsIDB4MjQwYzAwMDEsIDB4NTU2YzAwMjEsIAotMHgyNDBjMDAwMiwgMHg4ZjQzMDA1NCwgMHg4ZjQyMDA1MCwgMHgxMDYyMDAwYiwgCi0weDI3NGIwMDU0LCAweDhmNTEwMDU0LCAweDM0MDNlY2MwLCAweGFmYWIwMDRjLCAKLTB4MjYyMjAwMDEsIDB4MzA0MjAxZmYsIDB4YWZhMjAwNTQsIDB4MTExMTQwLCAKLTB4NDMxMDIxLCAweDEwMDAwMDZiLCAweDJlMmE4MjEsIDB4OGY0MjAwNDQsIAotMHg4ZmFjMDA2NCwgMHgzYzA0MDAwMSwgMHgyNDg0NjhhYywgMHhhZmFjMDAxNCwgCi0weGFmYTIwMDEwLCAweDhmNDYwMDU0LCAweDhmNDcwMDUwLCAweDNjMDUwMDA3LCAKLTB4YzAwMmIzYiwgMHgzNGE1NDMwMCwgMHg4ZjQzMDM1MCwgMHgyNDAyZmZiZiwgCi0weDI4MmEwMjQsIDB4MjQ2MzAwMDEsIDB4YWY0MzAzNTAsIDB4MTAwMDAxMjQsIAotMHg4ZjQyMDM1MCwgMHgxNTZjMDAxZCwgMHgwLCAweDhmNDMwMDc0LCAKLTB4OGY0MjAwNzAsIDB4MTA2MjAwMGEsIDB4Mjc0YjAwNzQsIDB4OGY1MTAwNzQsIAotMHhhZmFiMDA0YywgMHgyNjIyMDAwMSwgMHgzMDQyMDNmZiwgMHhhZmEyMDA1NCwgCi0weDExMTE0MCwgMHgyNDQyNmNjMCwgMHgxMDAwMDA0YSwgMHgyZTJhODIxLCAKLTB4OGY0MjAwNDQsIDB4OGZhYzAwNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4YjgsIAotMHgzYzA1MDAwNywgMHhhZmFjMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZjQ2MDA3NCwgCi0weDhmNDcwMDcwLCAweDM0YTU0NTAwLCAweDI0MGIwMDAxLCAweGMwMDJiM2IsIAotMHhhZmFiMDA1YywgMHgxMDAwZmZjMywgMHgwLCAweDhmNDMwMDY0LCAKLTB4OGY0MjAwNjAsIDB4MTA2MjAwMWEsIDB4Mjc0YzAwNjQsIDB4OGY1MTAwNjQsIAotMHg4ZmFiMDA1YywgMHhhZmFjMDA0YywgMHgyNjIyMDAwMSwgMHgzMDQyMDBmZiwgCi0weGFmYTIwMDU0LCAweDI0MDIwMDA0LCAweDE1NjIwMDBlLCAweDExMTE0MCwgCi0weDExMTE4MCwgMHgyNDQyMGNjMCwgMHgyZTIxMDIxLCAweGFmYTIwMDQ0LCAKLTB4OTQ0MjAwMmEsIDB4OGZhYzAwNDQsIDB4OGZhYjAwNjQsIDB4NGIxMDJiLCAKLTB4MTA0MDAwMjQsIDB4MjU5NTAwMjAsIDB4MjQwYzAwMDEsIDB4MTAwMDAwMjEsIAotMHhhM2FjMDA4NywgMHgyNDQyNGNjMCwgMHgxMDAwMDAxZSwgMHgyZTJhODIxLCAKLTB4OGY0MjAwNDQsIDB4OGZhYjAwNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4YzQsIAotMHhhZmFiMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZjQ2MDA2NCwgMHg4ZjQ3MDA2MCwgCi0weDNjMDUwMDA3LCAweGMwMDJiM2IsIDB4MzRhNTQ4MDAsIDB4M2MwMjAwMDgsIAotMHgyYzIxMDI0LCAweDE0NDBmZjYxLCAweDAsIDB4OGY0MjAzNzAsIAotMHgyNDBjMDAwMSwgMHhhZmFjMDA1YywgMHgyNDQyMDAwMSwgMHhhZjQyMDM3MCwgCi0weDEwMDBmZjkwLCAweDhmNDIwMzcwLCAweDI3YTMwMDM2LCAweDEzMTA0MCwgCi0weDYyMTgyMSwgMHg5NDYyMDAwMCwgMHg0NDEwMjEsIDB4MTAwMDAwMWYsIAotMHhhNDYyMDAwMCwgMHhhZWJlMDAxOCwgMHg5M2EyMDA4NywgMHgxMDQwMDA4NCwgCi0weDk4MjEsIDB4OGZhYjAwNDQsIDB4OGZhNDAwNjQsIDB4OGZhMzAwOGMsIAotMHgyNTYyMDAyMCwgMHhhZmEyMDAyOCwgMHgyNTYyMDAwOCwgMHhhZmEyMDAzMCwgCi0weDI1NjIwMDEwLCAweGFmYWIwMDJjLCAweGFmYTIwMDM0LCAweDk1NjIwMDJhLCAKLTB4YTdhMjAwMzgsIDB4OTU2MjAwMTgsIDB4YTdhMjAwM2EsIDB4OTU2MjAwMWEsIAotMHhhN2EyMDAzYywgMHg5NTYyMDAxYywgMHhhN2EyMDAzZSwgMHg5NDYyMDAxOCwgCi0weDI0NjMwMDAyLCAweDgyMjAyMywgMHgxODgwZmZkZiwgMHgyNjczMDAwMSwgCi0weDJlNjIwMDA0LCAweDE0NDBmZmY5LCAweDAsIDB4OGY0MjAwZmMsIAotMHgyNjIxMDJhLCAweDE0NDAwMDMwLCAweDI0MDMwMDAxLCAweDhmODMwMTJjLCAKLTB4MTA2MDAwMjgsIDB4MCwgMHg4ZjgyMDEyNCwgMHg0MzEwMjMsIAotMHgyMjE0MywgMHg1ODgwMDAwMSwgMHgyNDg0MDA0MCwgMHg4ZjgyMDEyOCwgCi0weDQzMTAyMywgMHgyMTk0MywgMHg1ODYwMDAwMSwgMHgyNDYzMDA0MCwgCi0weDY0MTAyYSwgMHg1NDQwMDAwMSwgMHg2MDIwMjEsIDB4YWY0NDAwZmMsIAotMHg4ZjQyMDBmYywgMHgyNjIxMDJhLCAweDEwNDAwMDE2LCAweDI0MDMwMDAxLCAKLTB4MTAwMDAwMWEsIDB4MzA2MjAwZmYsIDB4OGZhYzAwOGMsIDB4MTAxMDQwLCAKLTB4NGMxMDIxLCAweDk0NDcwMDE4LCAweDEwMTA4MCwgMHg0YzEwMjEsIAotMHhhZmJlMDAxMCwgMHg4YzQyMDAwOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjhkYywgCi0weDNjMDUwMDA3LCAweDhjNDMwMDA0LCAweDhjNDIwMDAwLCAweDM0YTU1NTAwLCAKLTB4MjAwMzAyMSwgMHhjMDAyYjNiLCAweGFmYTMwMDE0LCAweDEwMDAwMDM5LCAKLTB4MCwgMHg4ZjQyMDMzNCwgMHgxODIxLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzMzQsIDB4OGY0MjAzMzQsIDB4MzA2MjAwZmYsIDB4MTA0MGZmMDYsIAotMHg4MDIxLCAweDhmNDMwMDA4LCAweDI0MDJmYmZmLCAweDEyNjAwMDJkLCAKLTB4NjI1MDI0LCAweDNjMGI0MDAwLCAweDIyYjQwMjUsIDB4OGZiMTAwOGMsIAotMHgyNjY5ZmZmZiwgMHgyMjA5MDIxLCAweDhlNDIwMDA4LCAweDk2MjcwMDE4LCAKLTB4OGM0NDAwMDAsIDB4OGM0NTAwMDQsIDB4NTYwOTAwMDQsIDB4MjQwYjAwMDEsIAotMHgyNDBjMDAwMiwgMHgxMDAwMDAwMiwgMHhhZmFjMDAxMCwgMHhhZmFiMDAxMCwgCi0weDE2MDAwMDA0LCAweGFmYTgwMDE0LCAweDhmNDIwMDA4LCAweDEwMDAwMDAyLCAKLTB4YWZhMjAwMTgsIDB4YWZhYTAwMTgsIDB4OGY0MjAxMGMsIDB4M2MwMzAyMSwgCi0weGFmYTgwMDk4LCAweGFmYTkwMDljLCAweDQwZjgwOSwgMHhhZmFhMDBhMCwgCi0weDhmYTgwMDk4LCAweDhmYTkwMDljLCAweDhmYWEwMGEwLCAweDEwNDBmZmMyLCAKLTB4M2MwMjAwMWYsIDB4OTYyMzAwMTgsIDB4MzQ0MmZmZmYsIDB4M2MzZjAyMSwgCi0weDVlMTAyYiwgMHgxMDQwMDAwMywgMHgyNjMxMDAwMiwgMHg4ZjQyMDE0OCwgCi0weDNjMmYwMjMsIDB4MjYxMDAwMDEsIDB4MjEzMTAyYiwgMHgxNDQwZmZkYSwgCi0weDI2NTIwMDA0LCAweDhmYjAwMDY0LCAweDEwMDAwMDFhLCAweDAsIAotMHg5NmEzMDAwYSwgMHg4ZmIwMDA2NCwgMHg3MDEwMmIsIDB4NTQ0MDAwMDEsIAotMHg2MDgwMjEsIDB4OGVhNDAwMDAsIDB4OGVhNTAwMDQsIDB4OGZhYjAwNWMsIAotMHgyNDBjMDAwMiwgMHhhZmFjMDAxMCwgMHg5MzQzMDVjNCwgMHhiMTcwMCwgCi0weDEwNjAwMDAzLCAweDIyMjMwMjUsIDB4M2MwMjA4MDAsIDB4YzIzMDI1LCAKLTB4YWZhNjAwMTQsIDB4OGY0MjAwMDgsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIAotMHgzYzAzMDIxLCAweDQwZjgwOSwgMHgyMDAzODIxLCAweDEwNDBmZWNiLCAKLTB4M2MwNTAwMDcsIDB4OTdhYzAwNzYsIDB4MTE4MDAwMDcsIDB4OTZhMzAwMGUsIAotMHg5MzQyMDVjNCwgMHgxNDQwMDAwNCwgMHgwLCAweDk3YWIwMDdlLCAKLTB4NmMxODI1LCAweGE2YWIwMDE2LCAweDhmYWMwMDZjLCAweDNjMDJmZmZmLCAKLTB4MTgyMTAyNCwgMHgxMDQwMDAwMywgMHhjMTQwMiwgMHgzNDYzMDQwMCwgCi0weGE2YTIwMDE0LCAweGE2YjAwMDBhLCAweDhmYWIwMDY0LCAweDU2MGIwMDA2LCAKLTB4M2QwZjAyMSwgMHgzNDYyMDAwNCwgMHhhZmEwMDA2NCwgMHhhNmEyMDAwZSwgCi0weDEwMDAwMDBkLCAweGEzNDAwNWM0LCAweDhmYWMwMDY0LCAweDNjMDIwMDFmLCAKLTB4MzQ0MmZmZmYsIDB4NWUxMDJiLCAweDE5MDYwMjMsIDB4YWZhYzAwNjQsIAotMHhhNmEzMDAwZSwgMHgyNDBiMDAwMSwgMHgxMDQwMDAwMywgMHhhMzRiMDVjNCwgCi0weDhmNDIwMTQ4LCAweDNjMmYwMjMsIDB4OGZhYjAwNTQsIDB4OGZhYzAwNGMsIAotMHhhZDhiMDAwMCwgMHg4ZmFjMDA2NCwgMHgxNTgwZmViYSwgMHgwLCAKLTB4OGZhYjAwNjQsIDB4MTE2MDAwMWIsIDB4MCwgMHg5MzQyMDVjNCwgCi0weDEwNDAwMDA2LCAweDAsIDB4YWY1ZTAwYzQsIDB4YWY0YjAwYzAsIAotMHg4ZmFjMDA2YywgMHgxMDAwMDAwZSwgMHhhZjRjMDBjOCwgMHg5N2FiMDA3NiwgCi0weDExNjAwMDBiLCAweDM0MDM4MTAwLCAweDhmYTIwMDIwLCAweDhjNDYwMDBjLCAKLTB4YTQ0MzAwMGMsIDB4OTdhYzAwN2UsIDB4OGM0NDAwMDQsIDB4OGM0NTAwMDgsIAotMHhhNDRjMDAwZSwgMHhhYzQ0MDAwMCwgMHhhYzQ1MDAwNCwgMHhhYzQ2MDAwOCwgCi0weDhmNDIwMzRjLCAweDI0NDIwMDAxLCAweGFmNDIwMzRjLCAweDEwMDAwMDEwLCAKLTB4OGY0MjAzNGMsIDB4OGZhYjAwNmMsIDB4MzE2NGZmZmYsIDB4MjQ4NGZmZmMsIAotMHg4MDE4MjEsIDB4OGY0NDAyNTAsIDB4OGY0NTAyNTQsIDB4OGY0NjAxMTgsIAotMHgxMDIxLCAweGEzMjgyMSwgMHhhMzM4MmIsIDB4ODIyMDIxLCAKLTB4ODcyMDIxLCAweGFmNDQwMjUwLCAweGMwZjgwOSwgMHhhZjQ1MDI1NCwgCi0weDhmYmYwMGMwLCAweDhmYmUwMGJjLCAweDhmYjUwMGI4LCAweDhmYjMwMGI0LCAKLTB4OGZiMjAwYjAsIDB4OGZiMTAwYWMsIDB4OGZiMDAwYTgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMGM4LCAweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZkOCwgCi0weGFmYmYwMDI0LCAweGFmYjAwMDIwLCAweDhmNDMwMDRjLCAweDhmNDIwMDQ4LCAKLTB4MTA2MjAwMzQsIDB4MCwgMHg4ZjQzMDA0OCwgMHg4ZjQyMDA0YywgCi0weDYyMjAyMywgMHg0ODIwMDAxLCAweDI0ODQwMjAwLCAweDhmNDMwMDU0LCAKLTB4OGY0MjAwNGMsIDB4NDMxMDJiLCAweDE0NDAwMDA0LCAweDI0MDIwMjAwLCAKLTB4OGY0MzAwNGMsIDB4MTAwMDAwMDUsIDB4NDMxMDIzLCAweDhmNDIwMDU0LCAKLTB4OGY0MzAwNGMsIDB4NDMxMDIzLCAweDI0NDJmZmZmLCAweDQwNTAyMSwgCi0weDhhMTAyYSwgMHg1NDQwMDAwMSwgMHg4MDUwMjEsIDB4OGY0OTAwNGMsIAotMHg4ZjQ4MDA0YywgMHg4ZjQ0MDE4OCwgMHg4ZjQ1MDE4YywgMHg4ZjQ2MDA0YywgCi0weDI0MDcxMDAwLCAweGFmYTcwMDEwLCAweDg0MTQwLCAweDEwMDE4MjEsIAotMHgxMmE0ODIxLCAweDMxMzAwMWZmLCAweGFmYjAwMDE0LCAweDhmNDcwMDE0LCAKLTB4MTAyMSwgMHg2MzE0MCwgMHhhZmE3MDAxOCwgMHhhMzI4MjEsIAotMHhhMzM4MmIsIDB4ODIyMDIxLCAweDg3MjAyMSwgMHgzNDAyZWNjMCwgCi0weGMyMzAyMSwgMHg4ZjQyMDEwOCwgMHgyZTYzMDIxLCAweDQwZjgwOSwgCi0weGEzOTQwLCAweDU0NDAwMDAxLCAweGFmNTAwMDRjLCAweDhmNDMwMDRjLCAKLTB4OGY0MjAwNDgsIDB4MTQ2MjAwMTgsIDB4MCwgMHg4ZjQyMDAwMCwgCi0weDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIAotMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAweDAsIAotMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAKLTB4OGY4MjAwNjAsIDB4MjQwM2ZkZmYsIDB4NDMxMDI0LCAweGFmODIwMDYwLCAKLTB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsIDB4MCwgMHgxMDAwMDAwMiwgCi0weGFmODAwMDRjLCAweGFmODAwMDQ4LCAweDhmYmYwMDI0LCAweDhmYjAwMDIwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzZTAwMDA4LCAweDAsIAotMHgyN2JkZmZkOCwgMHhhZmJmMDAyNCwgMHhhZmIwMDAyMCwgMHg4ZjQzMDA1YywgCi0weDhmNDIwMDU4LCAweDEwNjIwMDQ5LCAweDAsIDB4OGY0MzAwNTgsIAotMHg4ZjQyMDA1YywgMHg2MjIwMjMsIDB4NDgyMDAwMSwgMHgyNDg0MDEwMCwgCi0weDhmNDMwMDY0LCAweDhmNDIwMDVjLCAweDQzMTAyYiwgMHgxNDQwMDAwNCwgCi0weDI0MDIwMTAwLCAweDhmNDMwMDVjLCAweDEwMDAwMDA1LCAweDQzMTAyMywgCi0weDhmNDIwMDY0LCAweDhmNDMwMDVjLCAweDQzMTAyMywgMHgyNDQyZmZmZiwgCi0weDQwMzgyMSwgMHg4NzEwMmEsIDB4NTQ0MDAwMDEsIDB4ODAzODIxLCAKLTB4OGY0MjAwNWMsIDB4NDcxMDIxLCAweDMwNTAwMGZmLCAweDMyYzIxMDAwLCAKLTB4MTA0MDAwMTUsIDB4MjQwODIwMDAsIDB4OGY0OTAwNWMsIDB4OGY0NDAxOTAsIAotMHg4ZjQ1MDE5NCwgMHg4ZjQ2MDA1YywgMHg3Mzk4MCwgMHhhZmE4MDAxMCwgCi0weGFmYjAwMDE0LCAweDhmNDgwMDE0LCAweDk0OTgwLCAweDEyMDE4MjEsIAotMHgxMDIxLCAweGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLCAKLTB4ODkyMDIxLCAweDYzMTgwLCAweGFmYTgwMDE4LCAweDhmNDIwMTA4LCAKLTB4MTAwMDAwMTQsIDB4MjRjNjBjYzAsIDB4OGY0OTAwNWMsIDB4OGY0NDAxOTAsIAotMHg4ZjQ1MDE5NCwgMHg4ZjQ2MDA1YywgMHg3Mzk0MCwgMHhhZmE4MDAxMCwgCi0weGFmYjAwMDE0LCAweDhmNDgwMDE0LCAweDk0OTQwLCAweDEyMDE4MjEsIAotMHgxMDIxLCAweGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLCAKLTB4ODkyMDIxLCAweDYzMTQwLCAweGFmYTgwMDE4LCAweDhmNDIwMTA4LCAKLTB4MjRjNjRjYzAsIDB4NDBmODA5LCAweDJlNjMwMjEsIDB4NTQ0MDAwMDEsIAotMHhhZjUwMDA1YywgMHg4ZjQzMDA1YywgMHg4ZjQyMDA1OCwgMHgxNDYyMDAxOCwgCi0weDAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIDB4MCwgCi0weGFmODAwMDRjLCAweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIAotMHgxMDAwMDAwNSwgMHgwLCAweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAKLTB4MTA0MGZmZmQsIDB4MCwgMHg4ZjgyMDA2MCwgMHgyNDAzZmVmZiwgCi0weDQzMTAyNCwgMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgCi0weDAsIDB4MTAwMDAwMDIsIDB4YWY4MDAwNGMsIDB4YWY4MDAwNDgsIAotMHg4ZmJmMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LCAweDI3YmQwMDI4LCAKLTB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmQ4LCAweGFmYmYwMDI0LCAKLTB4YWZiMDAwMjAsIDB4OGY0MzAwNmMsIDB4OGY0MjAwNjgsIDB4MTA2MjAwMzMsIAotMHgwLCAweDhmNDMwMDY4LCAweDhmNDIwMDZjLCAweDYyMjAyMywgCi0weDQ4MjAwMDEsIDB4MjQ4NDA0MDAsIDB4OGY0MzAwNzQsIDB4OGY0MjAwNmMsIAotMHg0MzEwMmIsIDB4MTQ0MDAwMDQsIDB4MjQwMjA0MDAsIDB4OGY0MzAwNmMsIAotMHgxMDAwMDAwNSwgMHg0MzEwMjMsIDB4OGY0MjAwNzQsIDB4OGY0MzAwNmMsIAotMHg0MzEwMjMsIDB4MjQ0MmZmZmYsIDB4NDA1MDIxLCAweDhhMTAyYSwgCi0weDU0NDAwMDAxLCAweDgwNTAyMSwgMHg4ZjQ5MDA2YywgMHg4ZjQ4MDA2YywgCi0weDhmNDQwMTk4LCAweDhmNDUwMTljLCAweDhmNDYwMDZjLCAweDI0MDc0MDAwLCAKLTB4YWZhNzAwMTAsIDB4ODQxNDAsIDB4MTAwMTgyMSwgMHgxMmE0ODIxLCAKLTB4MzEzMDAzZmYsIDB4YWZiMDAwMTQsIDB4OGY0NzAwMTQsIDB4MTAyMSwgCi0weDYzMTQwLCAweDI0YzY2Y2MwLCAweGFmYTcwMDE4LCAweGEzMjgyMSwgCi0weGEzMzgyYiwgMHg4MjIwMjEsIDB4ODcyMDIxLCAweDhmNDIwMTA4LCAKLTB4MmU2MzAyMSwgMHg0MGY4MDksIDB4YTM5NDAsIDB4NTQ0MDAwMDEsIAotMHhhZjUwMDA2YywgMHg4ZjQzMDA2YywgMHg4ZjQyMDA2OCwgMHgxNDYyMDAxOCwgCi0weDAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIDB4MCwgCi0weGFmODAwMDRjLCAweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIAotMHgxMDAwMDAwNSwgMHgwLCAweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAKLTB4MTA0MGZmZmQsIDB4MCwgMHg4ZjgyMDA2MCwgMHgyNDAzZjdmZiwgCi0weDQzMTAyNCwgMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgCi0weDAsIDB4MTAwMDAwMDIsIDB4YWY4MDAwNGMsIDB4YWY4MDAwNDgsIAotMHg4ZmJmMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LCAweDI3YmQwMDI4LCAKLTB4M2UwMDAwOCwgMHgwLCAweDhmNDIwMGZjLCAweDNjMDMwMDAxLCAKLTB4OGY0NDAwZjgsIDB4MzQ2MzMwYzgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAwZmMsIAotMHg4Zjg1MDEyOCwgMHgyZTMxMDIxLCAweDU0ODIwMDA0LCAweDI0ODIwMDA4LCAKLTB4M2MwMjAwMDEsIDB4MzQ0MjJlYzgsIDB4MmUyMTAyMSwgMHg0MDE4MjEsIAotMHhhZjQzMDBmOCwgMHhhYzYwMDAwMCwgMHg4ZjQyMDBmNCwgMHgxNDYyMDAwNCwgCi0weDNjMDIwMDAxLCAweDI0YTIwMDIwLCAweDEwMDAwMDBmLCAweGFmODIwMTI4LCAKLTB4OGY0MzAwZjgsIDB4MzQ0MjMwYzgsIDB4MmUyMTAyMSwgMHg1NDYyMDAwNCwgCi0weDI0NjIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyZWM4LCAweDJlMjEwMjEsIAotMHg0MDE4MjEsIDB4OGM2MjAwMDQsIDB4MjExNDAsIDB4YTIxMDIxLCAKLTB4YWY4MjAxMjgsIDB4YWM2MDAwMDAsIDB4OGNhMzAwMTgsIDB4MzA2MjAwNzAsIAotMHgxMDQwMDAyZCwgMHgzMDYyMDAyMCwgMHgxMDQwMDAwNCwgMHgzYzAyMDAxMCwgCi0weDJjMjEwMjQsIDB4MTA0MDAwMGQsIDB4MCwgMHgzMDYyMDA0MCwgCi0weDEwNDAwMDA0LCAweDNjMDIwMDIwLCAweDJjMjEwMjQsIDB4MTA0MDAwMDcsIAotMHgwLCAweDMwNjIwMDEwLCAweDEwNDAwMDFmLCAweDNjMDIwMDQwLCAKLTB4MmMyMTAyNCwgMHgxNDQwMDAxYywgMHgwLCAweDhmODIwMDQwLCAKLTB4MzA0MjAwMDEsIDB4MTQ0MDAwMDgsIDB4MjAyMSwgMHg4YzAzMDEwNCwgCi0weDI0MDIwMDAxLCAweDUwNjIwMDA1LCAweDI0MDQwMDAxLCAweDhjMDIwMjY0LCAKLTB4MTA0MDAwMDMsIDB4ODAxMDIxLCAweDI0MDQwMDAxLCAweDgwMTAyMSwgCi0weDEwNDAwMDA2LCAweDAsIDB4OGY0MjAzMGMsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDMwYywgMHgxMDAwMDAwOCwgMHg4ZjQyMDMwYywgMHg4ZjgyMDA0NCwgCi0weDM0NDIwMDA0LCAweGFmODIwMDQ0LCAweDhmNDIwMzA4LCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsIDB4M2UwMDAwOCwgMHgwLCAKLTB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZjk4LCAweGFmYmYwMDYwLCAKLTB4YWZiZTAwNWMsIDB4YWZiNTAwNTgsIDB4YWZiMzAwNTQsIDB4YWZiMjAwNTAsIAotMHhhZmIxMDA0YywgMHhhZmIwMDA0OCwgMHg4ZjQyMDBmYywgMHgyNDQyMDAwMSwgCi0weGFmNDIwMGZjLCAweDhmODgwMTI4LCAweDI1MDIwMDIwLCAweGFmODIwMTI4LCAKLTB4OGQwMzAwMTgsIDB4MzA2MjAwNzAsIDB4MTA0MDAwMmUsIDB4MzA2MjAwMjAsIAotMHgxMDQwMDAwNCwgMHgzYzAyMDAxMCwgMHgyYzIxMDI0LCAweDEwNDAwMDBkLCAKLTB4MCwgMHgzMDYyMDA0MCwgMHgxMDQwMDAwNCwgMHgzYzAyMDAyMCwgCi0weDJjMjEwMjQsIDB4MTA0MDAwMDcsIDB4MCwgMHgzMDYyMDAxMCwgCi0weDEwNDAwMWE5LCAweDNjMDIwMDQwLCAweDJjMjEwMjQsIDB4MTQ0MDAxYTYsIAotMHgwLCAweDhmODIwMDQwLCAweDMwNDIwMDAxLCAweDE0NDAwMDA4LCAKLTB4MjAyMSwgMHg4YzAzMDEwNCwgMHgyNDAyMDAwMSwgMHg1MDYyMDAwNSwgCi0weDI0MDQwMDAxLCAweDhjMDIwMjY0LCAweDEwNDAwMDAzLCAweDgwMTAyMSwgCi0weDI0MDQwMDAxLCAweDgwMTAyMSwgMHgxMDQwMDAwNiwgMHgwLCAKLTB4OGY0MjAzMGMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMGMsIDB4MTAwMDAxOTIsIAotMHg4ZjQyMDMwYywgMHg4ZjgyMDA0NCwgMHgzNDQyMDAwNCwgMHhhZjgyMDA0NCwgCi0weDhmNDIwMzA4LCAweDI0NDIwMDAxLCAweGFmNDIwMzA4LCAweDEwMDAwMThhLCAKLTB4OGY0MjAzMDgsIDB4MzA2MjAwMDIsIDB4MTA0MDAxNGIsIDB4M2MwMjA4MDAsIAotMHg4ZDFlMDAxYywgMHgxZTU3MDIsIDB4YWZhYTAwMzQsIDB4OTUwYTAwMTYsIAotMHgzYzIyMDI0LCAweGFmYWEwMDI0LCAweDhmYWEwMDM0LCAweDI0MDIwMDAxLCAKLTB4MTU0MjAwMDYsIDB4MzNkZWZmZmYsIDB4MWUxMTQwLCAweDM0MDNlY2MwLCAKLTB4NDMxMDIxLCAweDEwMDAwMDEwLCAweDJlMmE4MjEsIDB4MjQwMjAwMDIsIAotMHgxNTQyMDAwNSwgMHgyNDAyMDAwMywgMHgxZTExNDAsIDB4MjQ0MjZjYzAsIAotMHgxMDAwMDAwOSwgMHgyZTJhODIxLCAweDE1NDIwMDA1LCAweDFlMTE4MCwgCi0weDFlMTE0MCwgMHgyNDQyNGNjMCwgMHgxMDAwMDAwMywgMHgyZTJhODIxLCAKLTB4NTcxMDIxLCAweDI0NTUwY2UwLCAweDk2YTIwMDBlLCAweDMwNGFmZmZjLCAKLTB4MzA0MjA0MDAsIDB4MTA0MDAwMDMsIDB4YWZhYTAwMmMsIDB4MTAwMDAwZTEsIAotMHg4ODIxLCAweDEwODAwMDA0LCAweDg4MjEsIDB4OTdiMTAwMjYsIAotMHgxMDAwMDBkZCwgMHhhNmIxMDAxMiwgMHg4ZWIzMDAxOCwgMHg5NjZhMDAwYywgCi0weGE3YWEwMDNlLCAweDk3YTUwMDNlLCAweDJjYTMwNWRkLCAweDM4YTI4ODcwLCAKLTB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDE1LCAweDIwMjEsIAotMHgzMmMyMDgwMCwgMHgxMDQwMDAxNSwgMHgyNDAyMDgwMCwgMHg5NjYzMDAxNCwgCi0weDE0NjIwMDEyLCAweDM0MDJhYWFhLCAweDk2NjMwMDBlLCAweDE0NjIwMDA3LCAKLTB4MjgyMSwgMHg5NjYzMDAxMCwgMHgyNDAyMDMwMCwgMHgxNDYyMDAwNCwgCi0weGEwMTAyMSwgMHg5NjYyMDAxMiwgMHgyYzQ1MDAwMSwgMHhhMDEwMjEsIAotMHg1NDQwMDAwNiwgMHgyNDA0MDAxNiwgMHgxMDAwMDAwNCwgMHgwLCAKLTB4MjQwMjA4MDAsIDB4NTBhMjAwMDEsIDB4MjQwNDAwMGUsIDB4MTA4MDAwYjksIAotMHgyNjQ5MDIxLCAweDkyNDIwMDAwLCAweDMwNDIwMDBmLCAweDI4MDgwLCAKLTB4MzJjMjAxMDAsIDB4MTA0MDAwMjAsIDB4MjUwMTgyMSwgMHgzYzAyMDAyMCwgCi0weDQzMTAyYiwgMHgxNDQwMDAwZSwgMHgyNDAyMDIxLCAweDI4MjEsIAotMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHhhMjI4MjEsIDB4ODMxMDJiLCAKLTB4MTQ0MGZmZmIsIDB4MzBhMmZmZmYsIDB4NTFjMDIsIDB4NjIyODIxLCAKLTB4NTFjMDIsIDB4MzBhMmZmZmYsIDB4MTAwMDAwMDksIDB4NjIyODIxLCAKLTB4OGY0NzAxNDgsIDB4OGY0MjAxMTAsIDB4MTAyODQyLCAweDNjMDYwMDIwLCAKLTB4NDBmODA5LCAweGFmYTgwMDQwLCAweDMwNDVmZmZmLCAweDhmYTgwMDQwLCAKLTB4NTBhMDAwMDEsIDB4MzQwNWZmZmYsIDB4OGZhYTAwMmMsIDB4MzU0YTAwMDIsIAotMHgxMDAwMDAwMiwgMHhhZmFhMDAyYywgMHgyODIxLCAweDMyYzIwMDgwLCAKLTB4MTA0MDAwOTAsIDB4YTZhNTAwMTAsIDB4MjY0MzAwMDksIDB4M2MwMjAwMWYsIAotMHgzNDQyZmZmZiwgMHg0MzEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgCi0weDhmNDIwMTQ4LCAweDYyMTgyMywgMHg5MDY2MDAwMCwgMHgzMGMyMDBmZiwgCi0weDM4NDMwMDA2LCAweDJjNjMwMDAxLCAweDM4NDIwMDExLCAweDJjNDIwMDAxLCAKLTB4NjIxODI1LCAweDEwNjAwMDdmLCAweDI0MDIwODAwLCAweDg4MjEsIAotMHg5N2EzMDAzZSwgMHgxNDYyMDAwZiwgMHgyNjAyMDIxLCAweDk2NzEwMDAwLCAKLTB4OTY2MjAwMDIsIDB4OTY2MzAwMDQsIDB4OTY2NDAwMDYsIDB4MjIyODgyMSwgCi0weDIyMzg4MjEsIDB4MjI0ODgyMSwgMHg5NjYyMDAwOCwgMHg5NjYzMDAwYSwgCi0weDk2NjQwMDBjLCAweDIyMjg4MjEsIDB4MjIzODgyMSwgMHgxMDAwMDAwNywgCi0weDIyNDg4MjEsIDB4OTQ4MjAwMDAsIDB4MjQ4NDAwMDIsIDB4MjIyODgyMSwgCi0weDkyMTAyYiwgMHgxNDQwZmZmYiwgMHgwLCAweDExMWMwMiwgCi0weDMyMjJmZmZmLCAweDYyODgyMSwgMHgxMTFjMDIsIDB4MzIyMmZmZmYsIAotMHg2Mjg4MjEsIDB4MzJjMjAyMDAsIDB4MTA0MDAwMDMsIDB4MjY0NDAwMDYsIAotMHgxMDAwMDAzZSwgMHg4MDIxLCAweDNjMDUwMDFmLCAweDM0YTVmZmZmLCAKLTB4YTQxMDJiLCAweDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsIAotMHg4MjIwMjMsIDB4OTQ4MjAwMDAsIDB4MzA0MjFmZmYsIDB4MTA0MDAwMDQsIAotMHgyNjQ0MDAwYywgMHg5NjQyMDAwMiwgMHgxMDAwMDAzMCwgMHg1MDgwMjMsIAotMHg5NjQyMDAwMiwgMHgyNjQzMDAxNCwgMHg1MDgwMjMsIDB4M2MwMjAwMjAsIAotMHg0MzEwMmIsIDB4MTQ0MDAwMGEsIDB4ZDA4MDIxLCAweDk2NDIwMDBjLCAKLTB4MjAyODAyMSwgMHg5NjQyMDAwZSwgMHg5NjQzMDAxMCwgMHg5NjQ0MDAxMiwgCi0weDIwMjgwMjEsIDB4MjAzODAyMSwgMHgxMDAwMDAyMCwgMHgyMDQ4MDIxLCAKLTB4YTQxMDJiLCAweDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsIAotMHg4MjIwMjMsIDB4OTQ4MjAwMDAsIDB4MjQ4NDAwMDIsIDB4MjAyODAyMSwgCi0weGE0MTAyYiwgMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LCAKLTB4ODIyMDIzLCAweDk0ODIwMDAwLCAweDI0ODQwMDAyLCAweDIwMjgwMjEsIAotMHhhNDEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgMHg4ZjQyMDE0OCwgCi0weDgyMjAyMywgMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHgyMDI4MDIxLCAKLTB4YTQxMDJiLCAweDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsIAotMHg4MjIwMjMsIDB4OTQ4MjAwMDAsIDB4MjAyODAyMSwgMHgzYzAyMDEwMCwgCi0weDJjMjEwMjQsIDB4MTA0MDAwMGUsIDB4MCwgMHg4ZmFhMDAyYywgCi0weDMxNDIwMDA0LCAweDEwNDAwMDBhLCAweDAsIDB4OTUwNDAwMGUsIAotMHgyNjQyMDIxLCAweGMwMDNlZWMsIDB4MjQ4NGZmZmMsIDB4MzA0MmZmZmYsIAotMHgyMjI4ODIxLCAweDExMWMwMiwgMHgzMjIyZmZmZiwgMHg2Mjg4MjEsIAotMHg4ZmFhMDAyNCwgMHgxNTE4ODIzLCAweDExMTQwMiwgMHgyMjI4ODIxLCAKLTB4MjMwODgyMSwgMHgxMTE0MDIsIDB4MjIyODgyMSwgMHgzMjMxZmZmZiwgCi0weDUyMjAwMDAxLCAweDM0MTFmZmZmLCAweDhmYWEwMDJjLCAweDM1NGEwMDAxLCAKLTB4YWZhYTAwMmMsIDB4YTZiMTAwMTIsIDB4OTdhYTAwMmUsIDB4YTZhYTAwMGUsIAotMHg4ZmFhMDAyYywgMHgzMTQyMDAwNCwgMHgxMDQwMDAwMiwgMHgyNDA5MTAwMCwgCi0weDM0MDk4MDAwLCAweDhmNDgwMDQ0LCAweDhmNDQwMWEwLCAweDhmNDUwMWE0LCAKLTB4YWZhOTAwMTAsIDB4OGY0OTAwNDQsIDB4ODQxNDAsIDB4MTAwMTgyMSwgCi0weGFmYTkwMDE0LCAweDhmNDgwMDBjLCAweDJhMDMwMjEsIDB4MjQwNzAwMjAsIAotMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgxMDIxLCAweGEzMjgyMSwgCi0weGEzNDgyYiwgMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsIAotMHgxNDQwMDAwYiwgMHgwLCAweDhmODIwMTI4LCAweDNjMDQwMDAxLCAKLTB4MjQ4NDY5MTQsIDB4YWZiZTAwMTQsIDB4YWZhMjAwMTAsIDB4OGY4NjAxMjQsIAotMHg4Zjg3MDEyMCwgMHgzYzA1MDAwNywgMHhjMDAyYjNiLCAweDM0YTU5OTIwLCAKLTB4OGY0MjAzNjgsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNjgsIDB4OGY0MjAwNDQsIAotMHg4ZjQzMDA4OCwgMHgyNDQyMDAwMSwgMHg0MzEwMjQsIDB4YWY0MjAwNDQsIAotMHg4ZmFhMDAzNCwgMHg4ZjQ0MDM2OCwgMHgyNDAyMDAwMSwgMHgxNTQyMDAwNiwgCi0weDI0MDIwMDAyLCAweDhmNDIwMzVjLCAweDI0NDJmZmZmLCAweGFmNDIwMzVjLCAKLTB4MTAwMDAwNDksIDB4OGY0MjAzNWMsIDB4MTU0MjAwMDYsIDB4MCwgCi0weDhmNDIwMzY0LCAweDI0NDJmZmZmLCAweGFmNDIwMzY0LCAweDEwMDAwMDQyLCAKLTB4OGY0MjAzNjQsIDB4OGY0MjAzNjAsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNjAsIAotMHgxMDAwMDAzZCwgMHg4ZjQyMDM2MCwgMHgzMDYyMTAwMCwgMHgxMDQwMDAwNSwgCi0weDMwNjI4MDAwLCAweDhmNDIwMDc4LCAweDI0NDIwMDAxLCAweDEwMDAwMDM2LCAKLTB4YWY0MjAwNzgsIDB4MTA0MDAwMzQsIDB4MCwgMHg4ZjQyMDA3OCwgCi0weDI0NDIwMDAxLCAweGFmNDIwMDc4LCAweDhjMDMwMjQwLCAweDQzMTAyYiwgCi0weDE0NDAwMDJkLCAweDI0MDcwMDA4LCAweDhmNDQwMTY4LCAweDhmNDUwMTZjLCAKLTB4OGY0MzAwNDQsIDB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIDB4MjQwMjAwNDAsIAotMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgCi0weDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwgMHgyNDAyMDAwMSwgCi0weDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyNDBmMiwgMHg4ZjgyMDEyNCwgCi0weGFmYTIwMDEwLCAweDhmODIwMTI4LCAweDNjMDQwMDAxLCAweDI0ODQ2ODhjLCAKLTB4YWZhMjAwMTQsIDB4OGY0NjAwNDQsIDB4OGY4NzAxMjAsIDB4M2MwNTAwMDksIAotMHhjMDAyYjNiLCAweDM0YTUxMzAwLCAweDEwMDAwMDBiLCAweDAsIAotMHg4ZjQyMDMwNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwNCwgMHg4ZjQyMDMwNCwgCi0weDhmNDIwMDQ0LCAweGFmNDIwMDdjLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgCi0weGEwMjA0MGYyLCAweGFmNDAwMDc4LCAweDhmNDIwMzE4LCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzMTgsIDB4OGY0MjAzMTgsIDB4OGZiZjAwNjAsIDB4OGZiZTAwNWMsIAotMHg4ZmI1MDA1OCwgMHg4ZmIzMDA1NCwgMHg4ZmIyMDA1MCwgMHg4ZmIxMDA0YywgCi0weDhmYjAwMDQ4LCAweDNlMDAwMDgsIDB4MjdiZDAwNjgsIDB4M2UwMDAwOCwgCi0weDAsIDB4MCwgMHgwLCAweDhmNDIwMTNjLCAKLTB4YWY4MjAwYzAsIDB4OGY0MjAxM2MsIDB4YWY4MjAwYzQsIDB4OGY0MjAxM2MsIAotMHhhZjgyMDBjOCwgMHg4ZjQyMDEzOCwgMHhhZjgyMDBkMCwgMHg4ZjQyMDEzOCwgCi0weGFmODIwMGQ0LCAweDhmNDIwMTM4LCAweDNlMDAwMDgsIDB4YWY4MjAwZDgsIAotMHgyN2JkZmZlMCwgMHgyNzg0MDIwOCwgMHgyNDA1MDIwMCwgMHhhZmJmMDAxOCwgCi0weGMwMDJiYmYsIDB4MjQwNjAwMDgsIDB4OGMwMjAyMDQsIDB4YzAwNDAxMiwgCi0weGFmODIwMjEwLCAweDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAweDMwNDIwMDAyLCAKLTB4MTA0MDAwMGUsIDB4MjAyMSwgMHg4YzA2MDI0OCwgMHgyNDAyMDAwMiwgCi0weDNjMDEwMDAxLCAweGFjMjI2ZDk4LCAweGMwMDUxMDQsIDB4MjQwNTAwMDIsIAotMHgyMDIxLCAweDhjMDYwMjQ4LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAKLTB4YWMyMjZkOTgsIDB4MTAwMDAwMTEsIDB4MjQwNTAwMDEsIDB4OGMwNjAyNDgsIAotMHgyNDAyMDAwNCwgMHgzYzAxMDAwMSwgMHhhYzIyNmQ5OCwgMHhjMDA1MTA0LCAKLTB4MjQwNTAwMDQsIDB4M2MwMjAwMDEsIDB4OGM0MjZkOTQsIDB4MzA0MjAwMDEsIAotMHgxMDQwMDAwOCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmQ5OCwgCi0weDIwMjEsIDB4MjQwNTAwMDEsIDB4M2MwNjYwMWIsIDB4YzAwNTEwNCwgCi0weDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDY5ZDAsIDB4OGY0MjAxNTAsIAotMHg4ZjQzMDE1NCwgMHgzYzA1MDAwOCwgMHg4ZjQ2MDE1OCwgMHgyMTY0MCwgCi0weDMxOTQwLCAweDM0NjMwNDAzLCAweDQzMTAyNSwgMHg2MzNjMCwgCi0weDQ2MTAyNSwgMHhhZjgyMDIxYywgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgCi0weDhmODYwMjFjLCAweDM0YTUwMjAwLCAweGMwMDJiM2IsIDB4MzgyMSwgCi0weDNjMDEwMDAxLCAweGFjMjA2ZDkwLCAweDNjMDEwMDAxLCAweGFjMjA2ZGE4LCAKLTB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlMCwgCi0weDNjMDUwMDA4LCAweDM0YTUwMzAwLCAweGFmYmYwMDE4LCAweGFmYTAwMDEwLCAKLTB4YWZhMDAwMTQsIDB4OGY4NjAyMDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDY5ZGMsIAotMHhjMDAyYjNiLCAweDM4MjEsIDB4OGY0MjA0MTAsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDQxMCwgMHg4ZjQyMDQxMCwgMHg4ZmJmMDAxOCwgMHgzZTAwMDA4LCAKLTB4MjdiZDAwMjAsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjAsIDB4YWZiMTAwMWMsIAotMHhhZmIwMDAxOCwgMHg4ZjQyMDNhNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDNhNCwgCi0weDhmNDIwM2E0LCAweDhmOTAwMjIwLCAweDhmODIwMGUwLCAweGFmYTIwMDEwLCAKLTB4OGY4MjAwZTQsIDB4YWZhMjAwMTQsIDB4OGY4NjAwYzQsIDB4OGY4NzAwYzgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjllOCwgMHhjMDAyYjNiLCAweDIwMDI4MjEsIAotMHgzYzA0NDAwMCwgMHgyMDQxMDI0LCAweDUwNDAwMGI0LCAweDNjMDQwMTAwLCAKLTB4OGY0MjAzYmMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzYmMsIDB4OGY0MjAzYmMsIAotMHg4Zjg3MDBjNCwgMHg4ZjgzMDBjOCwgMHg4ZjQyMDE0OCwgMHg2NzE4MjMsIAotMHg0MzEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgMHg4ZjQyMDE0OCwgCi0weDYyMTgyMSwgMHgxMDYwMDAwNSwgMHgwLCAweDhmNDIwMTRjLCAKLTB4NDMxMDJiLCAweDEwNDAwMDBiLCAweDAsIDB4OGY4MjAwZTAsIAotMHg4ZjQzMDEyNCwgMHhhZjQyMDExYywgMHhhZjQzMDExNCwgMHg4ZjgyMDIyMCwgCi0weDNjMDMwOGZmLCAweDM0NjNmZmZiLCAweDQzMTAyNCwgMHgxMDAwMDBjZSwgCi0weDQ0MTAyNSwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgMHgzNDYzZmZmZiwgCi0weDQzMTAyNCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDBlMCwgCi0weDhmNDMwMTI0LCAweGFmNDIwMTFjLCAweGFmNDMwMTE0LCAweDhmODYwMGM4LCAKLTB4OGY4NDAxMjAsIDB4OGY4MzAxMjQsIDB4MTAwMDAwMDUsIDB4MjgyMSwgCi0weDE0NjIwMDAyLCAweDI0NjIwMDIwLCAweDI3NjI0ODAwLCAweDQwMTgyMSwgCi0weDEwNjQwMDBjLCAweDMwYTIwMGZmLCAweDhjNjIwMDE4LCAweDMwNDIwMDAzLCAKLTB4MTA0MGZmZjcsIDB4Mjc2MjRmZTAsIDB4OGY0MjAzZDAsIDB4MjQwNTAwMDEsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDNkMCwgMHg4ZjQyMDNkMCwgMHg4YzY2MDAwOCwgCi0weDMwYTIwMGZmLCAweDE0NDAwMDU4LCAweDAsIDB4OTM0MjA1YzQsIAotMHgxNDQwMDA1NSwgMHgwLCAweDhmODcwMGM0LCAweDhmODgwMGUwLCAKLTB4OGY4NDAwZTQsIDB4MjQwMmZmZjgsIDB4MTAyNDAyNCwgMHgxMDQxMDIzLCAKLTB4MjE4YzMsIDB4NDYyMDAwMSwgMHgyNDYzMDIwMCwgMHgxMDYwMDAwNSwgCi0weDI0MDIwMDAxLCAweDEwNjIwMDA5LCAweDAsIDB4MTAwMDAwMWYsIAotMHgwLCAweDhmNDIwM2MwLCAweGUwMzAyMSwgMHgyNDQyMDAwMSwgCi0weGFmNDIwM2MwLCAweDEwMDAwMDQwLCAweDhmNDIwM2MwLCAweDhmNDIwM2M0LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzYzQsIDB4OGM4NjAwMDAsIDB4OGY0MjAxNDgsIAotMHg4ZjQzMDNjNCwgMHhlNjE4MjMsIDB4NDMxMDJiLCAweDEwNDAwMDA0LCAKLTB4MmM2MjIzM2YsIDB4OGY0MjAxNDgsIDB4NjIxODIxLCAweDJjNjIyMzNmLCAKLTB4MTQ0MDAwMzEsIDB4MCwgMHg4ZjQyMDIwYywgMHgyNDQyMDAwMSwgCi0weGFmNDIwMjBjLCAweDhmNDIwMjBjLCAweGUwMzAyMSwgMHgyNDgyMDAwOCwgCi0weGFmODIwMGU0LCAweDEwMDAwMDI4LCAweGFmODIwMGU4LCAweDhmNDIwM2M4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzYzgsIDB4OGY0MjAzYzgsIDB4OGM4NTAwMDAsIAotMHg4ZjQyMDE0OCwgMHhhNzE4MjMsIDB4NDMxMDJiLCAweDEwNDAwMDAzLCAKLTB4MCwgMHg4ZjQyMDE0OCwgMHg2MjE4MjEsIDB4OGY0MjAxNGMsIAotMHg0MzEwMmIsIDB4NTQ0MDAwMGEsIDB4YTAzMDIxLCAweDhmNDIwMjBjLCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyMGMsIDB4OGY0MjAyMGMsIDB4MjQ4MjAwMDgsIAotMHhhZjgyMDBlNCwgMHg4Zjg0MDBlNCwgMHgxNDg4ZmZlYywgMHhhZjg0MDBlOCwgCi0weDE0ODgwMDBkLCAweDI3NjIzMDAwLCAweDE0ODIwMDAyLCAweDI0ODJmZmY4LCAKLTB4Mjc2MjNmZjgsIDB4OTQ0MzAwMDYsIDB4M2MwMjAwMWYsIDB4MzQ0MmZmZmYsIAotMHhjMzMwMjEsIDB4NDYxMDJiLCAweDEwNDAwMDAzLCAweDAsIAotMHg4ZjQyMDE0OCwgMHhjMjMwMjMsIDB4YWY4NjAwYzgsIDB4OGY4MzAwYzQsIAotMHg4ZjQyMDE0OCwgMHhjMzE4MjMsIDB4NDMxMDJiLCAweDEwNDAwMDAzLCAKLTB4MCwgMHg4ZjQyMDE0OCwgMHg2MjE4MjEsIDB4MTA2MDAwMDUsIAotMHgwLCAweDhmNDIwMTRjLCAweDQzMTAyYiwgMHg1MDQwMDAwOCwgCi0weDNjMDJmZGZmLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZiLCAKLTB4NDMxMDI0LCAweDNjMDM0MDAwLCAweDEwMDAwMDNmLCAweDQzMTAyNSwgCi0weDhmNDMwM2NjLCAweDM0NDJmZmZmLCAweDI4MmEwMjQsIDB4MjQ2MzAwMDEsIAotMHhhZjQzMDNjYywgMHgxMDAwMDAzOSwgMHg4ZjQyMDNjYywgMHgyMDQxMDI0LCAKLTB4MTA0MDAwMGUsIDB4M2MxMTAyMDAsIDB4OGY0MjAzYTgsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDNhOCwgMHg4ZjQyMDNhOCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgCi0weDM0NjNmZmZmLCAweDQzMTAyNCwgMHg0NDEwMjUsIDB4YzAwM2RhZiwgCi0weGFmODIwMjIwLCAweDEwMDAwMDI5LCAweDAsIDB4MjExMTAyNCwgCi0weDUwNDAwMDA4LCAweDNjMTEwNDAwLCAweDhmNDIwM2FjLCAweDI0NDIwMDAxLCAKLTB4YWY0MjAzYWMsIDB4YzAwM2RhZiwgMHg4ZjQyMDNhYywgMHgxMDAwMDAxOSwgCi0weDAsIDB4MjExMTAyNCwgMHgxMDQwMDAxYywgMHgwLCAKLTB4OGY4MzAyMjQsIDB4MjQwMjE0MDIsIDB4MTQ2MjAwMDksIDB4M2MwNTAwMDgsIAotMHgzYzA0MDAwMSwgMHgyNDg0NjlmNCwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgCi0weDhmODYwMjI0LCAweDM0YTUwNTAwLCAweGMwMDJiM2IsIDB4MzgyMSwgCi0weDhmNDIwM2IwLCAweDI0NDIwMDAxLCAweGFmNDIwM2IwLCAweDhmNDIwM2IwLCAKLTB4OGY4MjAyMjAsIDB4MjAwMjAyMSwgMHgzNDQyMDAwMiwgMHhjMDA0ZTljLCAKLTB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmYsIAotMHg0MzEwMjQsIDB4NTExMDI1LCAweGFmODIwMjIwLCAweDhmYmYwMDIwLCAKLTB4OGZiMTAwMWMsIDB4OGZiMDAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgCi0weDNlMDAwMDgsIDB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhOCwgCi0weDI3YmRmZmIwLCAweGFmYmYwMDQ4LCAweGFmYmUwMDQ0LCAweGFmYjUwMDQwLCAKLTB4YWZiMzAwM2MsIDB4YWZiMjAwMzgsIDB4YWZiMTAwMzQsIDB4MTA0MDAwMGYsIAotMHhhZmIwMDAzMCwgMHgzYzA0MDAwMSwgMHgyNDg0NmEwMCwgMHgzYzA1MDAwOCwgCi0weGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMjIwLCAweDM0YTUwNjAwLCAKLTB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMDZkYTgsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmQ5YywgMHhjMDAyYjNiLCAweDM4MjEsIDB4M2MwMzdmZmYsIAotMHg4YzAyMDI2OCwgMHgzNDYzZmZmZiwgMHgzYzA0ZmRmZiwgMHg0MzEwMjQsIAotMHhhYzAyMDI2OCwgMHg4ZjQyMDAwNCwgMHgzNDg0ZmZmZiwgMHgzMDQyMDAwMiwgCi0weDEwNDAwMDkyLCAweDI4NGEwMjQsIDB4M2MwNDA2MDAsIDB4MzQ4NDIwMDAsIAotMHg4ZjQyMDAwNCwgMHgyODIxLCAweDI0MDNmZmZkLCAweDQzMTAyNCwgCi0weGFmNDIwMDA0LCAweGFmYTQwMDIwLCAweDhmNWUwMDE4LCAweDI3YWEwMDIwLCAKLTB4MjQwMjAwZmYsIDB4MTNjMjAwMDIsIDB4YWZhYTAwMmMsIDB4MjdjNTAwMDEsIAotMHg4YzAyMDIyOCwgMHhhMDkwMjEsIDB4MTY0MjAwMGUsIDB4MWUzOGMwLCAKLTB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIAotMHg4YzAyMDIyOCwgMHgzYzA0MDAwMSwgMHgyNDg0Njk5OCwgMHgzYzA1MDAwOSwgCi0weGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhmYTYwMDIwLCAweDEwMDAwMDZkLCAKLTB4MzRhNTA1MDAsIDB4ZjcxMDIxLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LCAKLTB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIAotMHgyNDcwMDNlOCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDEwNDAwMDFiLCAKLTB4OTgyMSwgMHhlMDg4MjEsIDB4MjYzNTA0YzAsIDB4OGY0NDAxNzgsIAotMHg4ZjQ1MDE3YywgMHgyMjAxODIxLCAweDI0MGEwMDA0LCAweGFmYWEwMDEwLCAKLTB4YWZiMjAwMTQsIDB4OGY0ODAwMGMsIDB4MTAyMSwgMHgyZjUzMDIxLCAKLTB4YWZhODAwMTgsIDB4OGY0ODAxMGMsIDB4MjQwNzAwMDgsIDB4YTMyODIxLCAKLTB4YTM0ODJiLCAweDgyMjAyMSwgMHgxMDBmODA5LCAweDg5MjAyMSwgCi0weDU0NDAwMDA2LCAweDI0MTMwMDAxLCAweDhmODIwMDU0LCAweDIwMjEwMjMsIAotMHgyYzQyMDNlOSwgMHgxNDQwZmZlOSwgMHgwLCAweDMyNjIwMGZmLCAKLTB4NTQ0MDAwMTcsIDB4YWY1MjAwMTgsIDB4OGY0MjAzNzgsIDB4MjQ0MjAwMDEsIAotMHhhZjQyMDM3OCwgMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywgCi0weGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2OWE0LCAKLTB4M2MwNTAwMDksIDB4YWZhMjAwMTQsIDB4OGQ0NjAwMDAsIDB4MTAwMDAwMzUsIAotMHgzNGE1MDYwMCwgMHg4ZjQyMDMwOCwgMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwgCi0weGFmNDIwMzA4LCAweDhmNDIwMzA4LCAweDEwMDAwMDFlLCAweDMyNjIwMGZmLCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgCi0weDJjNDIwM2U5LCAweDEwNDAwMDE2LCAweDk4MjEsIDB4M2MxNTAwMjAsIAotMHgyNDExMDAxMCwgMHg4ZjQyMDAwYywgMHg4ZjQ0MDE2MCwgMHg4ZjQ1MDE2NCwgCi0weDhmODYwMTIwLCAweGFmYjEwMDEwLCAweGFmYjIwMDE0LCAweDU1MTAyNSwgCi0weGFmYTIwMDE4LCAweDhmNDIwMTBjLCAweDI0MDcwMDA4LCAweDQwZjgwOSwgCi0weDI0YzYwMDFjLCAweDE0NDBmZmUzLCAweDAsIDB4OGY4MjAwNTQsIAotMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmVlLCAweDAsIAotMHgzMjYyMDBmZiwgMHgxNDQwMDAxMSwgMHgwLCAweDhmNDIwMzc4LCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIAotMHg4ZmFhMDAyYywgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgCi0weDI0ODQ2OWFjLCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAKLTB4MzRhNTA3MDAsIDB4YzAwMmIzYiwgMHgzYzAzODIxLCAweDhmNDIwMmVjLCAKLTB4MjQ0MjAwMDEsIDB4YWY0MjAyZWMsIDB4OGY0MjAyZWMsIDB4OGZiZjAwNDgsIAotMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgMHg4ZmIzMDAzYywgMHg4ZmIyMDAzOCwgCi0weDhmYjEwMDM0LCAweDhmYjAwMDMwLCAweDNlMDAwMDgsIDB4MjdiZDAwNTAsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmRhOCwgMHgyN2JkZmZlMCwgMHgxNDQwMDAwZCwgCi0weGFmYmYwMDE4LCAweDNjMDQwMDAxLCAweDI0ODQ2YTBjLCAweDNjMDUwMDA4LCAKLTB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAyMjAsIDB4MzRhNTA3MDAsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmRhOCwgMHhjMDAyYjNiLCAKLTB4MzgyMSwgMHgzYzAyMDAwNCwgMHgyYzIxMDI0LCAweDEwNDAwMDA3LCAKLTB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgMHgzNDYzZmZmZiwgCi0weDQzMTAyNCwgMHgzNDQyMDAwOCwgMHhhZjgyMDIyMCwgMHgzYzA1MDAwMSwgCi0weDhjYTU2ZDk4LCAweDI0MDIwMDAxLCAweDE0YTIwMDA3LCAweDIwMjEsIAotMHhjMDA1MjliLCAweDI0MDUwMDAxLCAweGFjMDIwMjZjLCAweDhjMDMwMjZjLCAKLTB4MTAwMDAwMDYsIDB4M2MwMjAwMDcsIDB4YzAwNTI5YiwgMHgyMDIxLCAKLTB4YWMwMjAyNjgsIDB4OGMwMzAyNjgsIDB4M2MwMjAwMDcsIDB4NjIxODI0LCAKLTB4M2MwMjAwMDIsIDB4NTA2MjAwMGQsIDB4M2MwMjA1ZjUsIDB4NDMxMDJiLCAKLTB4MTQ0MDAwMDYsIDB4M2MwMjAwMDQsIDB4M2MwMjAwMDEsIDB4MTA2MjAwMDksIAotMHgzYzAyMDA5OCwgMHgxMDAwMDAwYiwgMHgwLCAweDE0NjIwMDA5LCAKLTB4M2MwMjNiOWEsIDB4MTAwMDAwMDQsIDB4MzQ0MmNhMDAsIDB4MTAwMDAwMDIsIAotMHgzNDQyZTEwMCwgMHgzNDQyOTY4MCwgMHhhZjQyMDFmYywgMHg4ZjQyMDFmYywgCi0weGFlZTIwMDY0LCAweDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIAotMHgwLCAweDAsIDB4MCwgMHg4NjEwMmIsIAotMHg1MDQwMDAwMSwgMHg4NzIwMjMsIDB4YzQxMDIzLCAweDI0ODQzLCAKLTB4MTI1MTAyYiwgMHgxMDQwMDAxYiwgMHg5MTA0MCwgMHg4MjQwMjEsIAotMHg4ODEwMmIsIDB4MTA0MDAwMDcsIDB4MTgyMSwgMHg5NDgyMDAwMCwgCi0weDI0ODQwMDAyLCAweDYyMTgyMSwgMHg4ODEwMmIsIDB4MTQ0MGZmZmIsIAotMHgwLCAweDYwMjAyMSwgMHhjNzMwMjMsIDB4YTkxMDIzLCAKLTB4MjEwNDAsIDB4YzIyODIxLCAweGM1MTAyYiwgMHgxMDQwMDAwNywgCi0weDE4MjEsIDB4OTRjMjAwMDAsIDB4MjRjNjAwMDIsIDB4NjIxODIxLCAKLTB4YzUxMDJiLCAweDE0NDBmZmZiLCAweDAsIDB4MTAwMDAwMGQsIAotMHg4MzIwMjEsIDB4NTEwNDAsIDB4ODIyODIxLCAweDg1MTAyYiwgCi0weDEwNDAwMDA3LCAweDE4MjEsIDB4OTQ4MjAwMDAsIDB4MjQ4NDAwMDIsIAotMHg2MjE4MjEsIDB4ODUxMDJiLCAweDE0NDBmZmZiLCAweDAsIAotMHg2MDIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsIDB4NjIyMDIxLCAKLTB4NDFjMDIsIDB4MzA4MmZmZmYsIDB4NjIyMDIxLCAweDNlMDAwMDgsIAotMHgzMDgyZmZmZiwgMHgzZTAwMDA4LCAweDAsIDB4ODAyODIxLCAKLTB4MzBhMjAwMDEsIDB4MTA0MDAwMmIsIDB4M2MwMzAwMWYsIDB4MzQ2M2ZmZmYsIAotMHgyNGEyMDAwNCwgMHg2MjEwMmIsIDB4NTQ0MDAwMDcsIDB4NjUxMDJiLCAKLTB4OTBhMjAwMDEsIDB4OTBhNDAwMDMsIDB4OTBhMzAwMDAsIDB4OTBhNTAwMDIsIAotMHgxMDAwMDAyYSwgMHg0NDEwMjEsIDB4MTA0MDAwMDMsIDB4MCwgCi0weDhmNDIwMTQ4LCAweGEyMjgyMywgMHg5MGE0MDAwMCwgMHgyNGE1MDAwMSwgCi0weDY1MTAyYiwgMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LCAKLTB4YTIyODIzLCAweDkwYTIwMDAwLCAweDI0YTUwMDAxLCAweDIxMjAwLCAKLTB4ODIyMDIxLCAweDY1MTAyYiwgMHgxMDQwMDAwMywgMHgwLCAKLTB4OGY0MjAxNDgsIDB4YTIyODIzLCAweDkwYTIwMDAwLCAweDI0YTUwMDAxLCAKLTB4ODIyMDIxLCAweDY1MTAyYiwgMHgxMDQwMDAwMywgMHgwLCAKLTB4OGY0MjAxNDgsIDB4YTIyODIzLCAweDkwYTIwMDAwLCAweDEwMDAwMDJkLCAKLTB4MjEyMDAsIDB4MzQ2M2ZmZmYsIDB4MjRhMjAwMDQsIDB4NjIxMDJiLCAKLTB4NTQ0MDAwMGEsIDB4NjUxMDJiLCAweDkwYTIwMDAwLCAweDkwYTQwMDAyLCAKLTB4OTBhMzAwMDEsIDB4OTBhNTAwMDMsIDB4NDQxMDIxLCAweDIxMjAwLCAKLTB4NjUxODIxLCAweDEwMDAwMDIwLCAweDQzMjAyMSwgMHgxMDQwMDAwMywgCi0weDAsIDB4OGY0MjAxNDgsIDB4YTIyODIzLCAweDkwYTIwMDAwLCAKLTB4MjRhNTAwMDEsIDB4MjIyMDAsIDB4NjUxMDJiLCAweDEwNDAwMDAzLCAKLTB4MCwgMHg4ZjQyMDE0OCwgMHhhMjI4MjMsIDB4OTBhMjAwMDAsIAotMHgyNGE1MDAwMSwgMHg4MjIwMjEsIDB4NjUxMDJiLCAweDEwNDAwMDAzLCAKLTB4MCwgMHg4ZjQyMDE0OCwgMHhhMjI4MjMsIDB4OTBhMjAwMDAsIAotMHgyNGE1MDAwMSwgMHgyMTIwMCwgMHg4MjIwMjEsIDB4NjUxMDJiLCAKLTB4MTA0MDAwMDMsIDB4MCwgMHg4ZjQyMDE0OCwgMHhhMjI4MjMsIAotMHg5MGEyMDAwMCwgMHg4MjIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsIAotMHg2MjIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsIDB4NjIyMDIxLCAKLTB4M2UwMDAwOCwgMHgzMDgyZmZmZiwgMHgwLCAweDhmODIwMjIwLCAKLTB4MzQ0MjAwMDIsIDB4YWY4MjAyMjAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmZjgsIAotMHgzMDQyNDAwMCwgMHgxMDQwMDA1NCwgMHgyNDA0MDAwMSwgMHg4ZjgyMDIwMCwgCi0weDI0MDY3ZmZmLCAweDhmODMwMjAwLCAweDMwNDUwMDAyLCAweDI0MDJmZmZkLCAKLTB4NjIxODI0LCAweGFmODMwMjAwLCAweGFmODQwMjA0LCAweDhmODMwMDU0LCAKLTB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIAotMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwgCi0weDhmODIwMjI0LCAweDE0NDQwMDRkLCAweDQyMDQwLCAweGM0MTAyYiwgCi0weDEwNDBmZmYxLCAweDAsIDB4OGY4MjAyMDAsIDB4NDUxMDI1LCAKLTB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsIDB4MzQ0MjgwMDAsIDB4YWY4MjAyMjAsIAotMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDAwMSwgCi0weDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgCi0weDAsIDB4OGY4MjAyMjAsIDB4M2MwMzAwMDQsIDB4NDMxMDI0LCAKLTB4MTQ0MDAwMGYsIDB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzZmZmZiwgCi0weDM0NjM3ZmZmLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDEwMDAwMDAyLCAweDI0NjMwMDAxLCAweDhmODIwMDU0LCAKLTB4NjIxMDIzLCAweDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsIAotMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsIDB4MTQ0MDAwMGQsIAotMHgwLCAweDhmODIwMjIwLCAweDM0NDI4MDAwLCAweGFmODIwMjIwLCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIAotMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIAotMHgwLCAweDhmODIwMjIwLCAweDNjMDMwMDA0LCAweDQzMTAyNCwgCi0weDEwNDAwMDFiLCAweDEwMjEsIDB4OGY4MzAyMjAsIDB4MjQwMjAwMDEsIAotMHgxMDAwMDAxNSwgMHgzYzA0ZjcwMCwgMHg4ZjgyMDIyMCwgMHgzYzA0ZjcwMCwgCi0weDQ0MTAyNSwgMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgyNDAzZmZmZCwgCi0weDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDMwMCwgCi0weDQzMTAyNCwgMHgxNDQwMDAwMywgMHgwLCAweDEwMDAwMDA4LCAKLTB4MTAyMSwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwgCi0weDhmODMwMjIwLCAweDI0MDIwMDAxLCAweDY0MTgyNSwgMHhhZjgzMDIyMCwgCi0weDNlMDAwMDgsIDB4MCwgMHgyMDIxLCAweDNjMDUwMTAwLCAKLTB4MjQwMjAwMDEsIDB4YWY4MDAyMWMsIDB4YWY4MjAyMDAsIDB4YWY4MjAyMjAsIAotMHgyNzYyNTAwMCwgMHhhZjgyMDBjMCwgMHgyNzYyNTAwMCwgMHhhZjgyMDBjNCwgCi0weDI3NjI1MDAwLCAweGFmODIwMGM4LCAweDI3NjI1MDAwLCAweGFmODIwMGQwLCAKLTB4Mjc2MjUwMDAsIDB4YWY4MjAwZDQsIDB4Mjc2MjUwMDAsIDB4YWY4MjAwZDgsIAotMHgyNzYyMzAwMCwgMHhhZjgyMDBlMCwgMHgyNzYyMzAwMCwgMHhhZjgyMDBlNCwgCi0weDI3NjIzMDAwLCAweGFmODIwMGU4LCAweDI3NjIyODAwLCAweGFmODIwMGYwLCAKLTB4Mjc2MjI4MDAsIDB4YWY4MjAwZjQsIDB4Mjc2MjI4MDAsIDB4YWY4MjAwZjgsIAotMHg0MThjMCwgMHgyNDg0MDAwMSwgMHgzNjMxMDIxLCAweGFjNDUzMDA0LCAKLTB4MzYzMTAyMSwgMHhhYzQwMzAwMCwgMHgyODgyMDIwMCwgMHgxNDQwZmZmOSwgCi0weDQxOGMwLCAweDIwMjEsIDB4NDE4YzAsIDB4MjQ4NDAwMDEsIAotMHgzNjMxMDIxLCAweGFjNDAyODA0LCAweDM2MzEwMjEsIDB4YWM0MDI4MDAsIAotMHgyODgyMDEwMCwgMHgxNDQwZmZmOSwgMHg0MThjMCwgMHhhZjgwMDIzYywgCi0weDI0MDMwMDgwLCAweDI0MDQwMTAwLCAweGFjNjAwMDAwLCAweDI0NjMwMDA0LCAKLTB4NjQxMDJiLCAweDU0NDBmZmZkLCAweGFjNjAwMDAwLCAweDhmODMwMDQwLCAKLTB4M2MwMmYwMDAsIDB4NjIxODI0LCAweDNjMDI1MDAwLCAweDEwNjIwMDBjLCAKLTB4NDMxMDJiLCAweDE0NDAwMDA2LCAweDNjMDI2MDAwLCAweDNjMDI0MDAwLCAKLTB4MTA2MjAwMDgsIDB4MjQwMjA4MDAsIDB4MTAwMDAwMDgsIDB4MCwgCi0weDEwNjIwMDA0LCAweDI0MDIwODAwLCAweDEwMDAwMDA0LCAweDAsIAotMHgyNDAyMDcwMCwgMHgzYzAxMDAwMSwgMHhhYzIyNmRhYywgMHgzZTAwMDA4LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRiYywgMHgyN2JkZmZkMCwgCi0weGFmYmYwMDJjLCAweGFmYjIwMDI4LCAweGFmYjEwMDI0LCAweGFmYjAwMDIwLCAKLTB4M2MwMTAwMDEsIDB4MTA0MDAwMDUsIDB4YWMyMDZkOTQsIDB4YzAwNGQ5ZSwgCi0weDAsIDB4M2MwMTAwMDEsIDB4YWMyMDZkYmMsIDB4OGY4MzAwNTQsIAotMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwgCi0weDYyMTAyMywgMHgyYzQyMDA2NSwgMHgxNDQwZmZmYywgMHgwLCAKLTB4YzAwNGRiOSwgMHgwLCAweDI0MDQwMDAxLCAweDI4MjEsIAotMHgyN2E2MDAxOCwgMHgzNDAyODAwMCwgMHhjMDA0NWJlLCAweGE3YTIwMDE4LCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwNjQsIAotMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwNjQsIAotMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LCAKLTB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwNjQsIAotMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIAotMHgyNDA0MDAwMSwgMHgzYzA2MDAwMSwgMHgyNGM2NmYyNCwgMHhjMDA0NTdjLCAKLTB4MjQwNTAwMDIsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIAotMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwNjUsIAotMHgxNDQwZmZmYywgMHgyNDA0MDAwMSwgMHgyNDA1MDAwMywgMHgzYzEwMDAwMSwgCi0weDI2MTA2ZjI2LCAweGMwMDQ1N2MsIDB4MjAwMzAyMSwgMHg5N2E2MDAxOCwgCi0weDNjMDcwMDAxLCAweDk0ZTc2ZjI0LCAweDNjMDQwMDAxLCAweDI0ODQ2YWUwLCAKLTB4YWZhMDAwMTQsIDB4OTYwMjAwMDAsIDB4M2MwNTAwMGQsIDB4MzRhNTAxMDAsIAotMHhjMDAyYjNiLCAweGFmYTIwMDEwLCAweDk3YTIwMDE4LCAweDEwNDAwMDRkLCAKLTB4MjQwMzYwNDAsIDB4OTYwMjAwMDAsIDB4MzA0MmZmZjAsIDB4MTQ0MzAwMGMsIAotMHgyNDAyMDAyMCwgMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgxNDYyMDAwYiwgCi0weDI0MDI3ODMwLCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk0LCAKLTB4MjQwMjAwMDUsIDB4M2MwMTAwMDEsIDB4MTAwMDAwM2YsIDB4YWMyMjZmMzQsIAotMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgyNDAyNzgzMCwgMHgxNDYyMDAwYywgCi0weDI0MDMwMDEwLCAweDNjMDIwMDAxLCAweDk0NDI2ZjI2LCAweDMwNDJmZmYwLCAKLTB4MTQ0MzAwMDcsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTQsIAotMHgyNDAyMDAwNiwgMHgzYzAxMDAwMSwgMHgxMDAwMDAyZiwgMHhhYzIyNmYzNCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAweDNjMDMwMDAxLCAweDk0NjM2ZjI0LCAKLTB4MzQ0MjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTQsIDB4MjQwMjAwMTUsIAotMHgxNDYyMDAwYiwgMHgwLCAweDNjMDIwMDAxLCAweDk0NDI2ZjI2LCAKLTB4MzA0MmZmZjAsIDB4Mzg0M2Y0MjAsIDB4MmM2MzAwMDEsIDB4Mzg0MmY0MzAsIAotMHgyYzQyMDAwMSwgMHg2MjE4MjUsIDB4MTQ2MDAwMWIsIDB4MjQwMjAwMDMsIAotMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgyNDAyNzgxMCwgMHgxNDYyMDAxNiwgCi0weDI0MDIwMDAyLCAweDNjMDIwMDAxLCAweDk0NDI2ZjI2LCAweDMwNDJmZmYwLCAKLTB4MTQ0MDAwMTEsIDB4MjQwMjAwMDIsIDB4MTAwMDAwMGYsIDB4MjQwMjAwMDQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmQ5NCwgMHgzNDQyMDAwOCwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZDk0LCAweDEwMDAwMDVlLCAweDI0MDIwMDA0LCAweDNjMDIwMDAxLCAKLTB4OGM0MjZkOTQsIDB4MzQ0MjAwMDQsIDB4M2MwMTAwMDEsIDB4MTAwMDAwYWYsIAotMHhhYzIyNmQ5NCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmY0MCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAweDMwNDIwMDAyLCAweDE0NDAwMGIyLCAKLTB4M2MwOWZmZjAsIDB4MjQwMjBlMDAsIDB4YWY4MjAyMzgsIDB4OGY4NDAwNTQsIAotMHg4ZjgyMDA1NCwgMHgyNDAzMDAwOCwgMHgzYzAxMDAwMSwgMHhhYzIzNmQ5OCwgCi0weDEwMDAwMDAyLCAweDI0ODQwMWY0LCAweDhmODIwMDU0LCAweDgyMTAyMywgCi0weDJjNDIwMWY1LCAweDE0NDBmZmZjLCAweDNjMDIwMGM4LCAweDM0NDIwMWZiLCAKLTB4YWY4MjAyMzgsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIAotMHgyNDYzMDFmNCwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAxZjUsIAotMHgxNDQwZmZmYywgMHg4MDIxLCAweDI0MTIwMDAxLCAweDI0MTEwMDA5LCAKLTB4YzAwNDQ4MiwgMHgwLCAweDNjMDEwMDAxLCAweGFjMzI2ZGI0LCAKLTB4YzAwNDU0NywgMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZGI0LCAKLTB4MTQ1MWZmZmIsIDB4M2MwMjAwYzgsIDB4MzQ0MjAxZjYsIDB4YWY4MjAyMzgsIAotMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDAwYSwgCi0weDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwYiwgMHgxNDQwZmZmYywgCi0weDAsIDB4OGY4MjAyMjAsIDB4MjQwNDAwMDEsIDB4MzQ0MjAwMDIsIAotMHhhZjgyMDIyMCwgMHg4ZjgzMDIwMCwgMHgyNDA1N2ZmZiwgMHgyNDAyZmZmZCwgCi0weDYyMTgyNCwgMHhhZjgzMDIwMCwgMHhhZjg0MDIwNCwgMHg4ZjgzMDA1NCwgCi0weDhmODIwMDU0LCAweDEwMDAwMDAyLCAweDI0NjMwMDAxLCAweDhmODIwMDU0LCAKLTB4NjIxMDIzLCAweDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsIAotMHg4ZjgyMDIyNCwgMHgxNDQ0MDAwNSwgMHgzNDAyODAwMCwgMHg0MjA0MCwgCi0weGE0MTAyYiwgMHgxMDQwZmZmMCwgMHgzNDAyODAwMCwgMHgxMDgyZmZhMCwgCi0weDI2MTAwMDAxLCAweDJlMDIwMDE0LCAweDE0NDBmZmNkLCAweDI0MDIwMDA0LCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZkOTgsIDB4ODAyMSwgMHgyNDEyMDAwOSwgCi0weDNjMTFmZmZmLCAweDM2MzEzZjdmLCAweGMwMDQ0ODIsIDB4MCwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZGI0LCAweGMwMDQ1NDcsIAotMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZGI0LCAweDE0NTJmZmZiLCAKLTB4MCwgMHg4ZjgyMDA0NCwgMHg1MTEwMjQsIDB4MzQ0MjUwODAsIAotMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgCi0weDI0NjMwMDBhLCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwYiwgCi0weDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsIDB4NTExMDI0LCAKLTB4MzQ0MmYwODAsIDB4YWY4MjAwNDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIAotMHgxMDAwMDAwMiwgMHgyNDYzMDAwYSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIAotMHgyYzQyMDAwYiwgMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMjIwLCAKLTB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmODMwMDU0LCAKLTB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwNjQsIDB4OGY4MjAwNTQsIAotMHg2MjEwMjMsIDB4MmM0MjAwNjUsIDB4MTQ0MGZmZmMsIDB4MCwgCi0weDhmODIwMjIwLCAweDI0MDQwMDAxLCAweDM0NDIwMDAyLCAweGFmODIwMjIwLCAKLTB4OGY4MzAyMDAsIDB4MjQwNTdmZmYsIDB4MjQwMmZmZmQsIDB4NjIxODI0LCAKLTB4YWY4MzAyMDAsIDB4YWY4NDAyMDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIAotMHgxMDAwMDAwMiwgMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIAotMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMjI0LCAKLTB4MTQ0NDAwMDUsIDB4MzQwMjgwMDAsIDB4NDIwNDAsIDB4YTQxMDJiLCAKLTB4MTA0MGZmZjAsIDB4MzQwMjgwMDAsIDB4MTA4MmZmNTAsIDB4MjYxMDAwMDEsIAotMHgyZTAyMDA2NCwgMHgxNDQwZmZiMCwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjZkOTQsIDB4MzA0MjAwMDQsIDB4MTQ0MDAwMDcsIDB4M2MwOWZmZjAsIAotMHg4ZjgyMDA0NCwgMHgzYzAzZmZmZiwgMHgzNDYzM2Y3ZiwgMHg0MzEwMjQsIAotMHhhZjgyMDA0NCwgMHgzYzA5ZmZmMCwgMHgzNTI5YmRjMCwgMHgzYzA2MDAwMSwgCi0weDhjYzY2ZDk0LCAweDNjMDQwMDAxLCAweDI0ODQ2YWUwLCAweDI0MDIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZkOWMsIDB4OGY4MjAwNTQsIDB4M2MwNzAwMDEsIAotMHg4Y2U3NmY0MCwgMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgzYzA4MDAwMSwgCi0weDk1MDg2ZjI2LCAweDNjMDUwMDBkLCAweDM0YTUwMTAwLCAweDNjMDEwMDAxLCAKLTB4YWMyMDZkOTgsIDB4NDkxMDIxLCAweDNjMDEwMDAxLCAweGFjMjI2ZjMwLCAKLTB4YWZhMzAwMTAsIDB4YzAwMmIzYiwgMHhhZmE4MDAxNCwgMHg4ZmJmMDAyYywgCi0weDhmYjIwMDI4LCAweDhmYjEwMDI0LCAweDhmYjAwMDIwLCAweDNlMDAwMDgsIAotMHgyN2JkMDAzMCwgMHgyN2JkZmZlOCwgMHgzYzA1MDAwMSwgMHg4Y2E1NmQ5OCwgCi0weDI0MDYwMDA0LCAweDI0MDIwMDAxLCAweDE0YTIwMDE0LCAweGFmYmYwMDEwLCAKLTB4M2MwMjAwMDIsIDB4OGM0MjhmZmMsIDB4MzA0MjgwMDAsIDB4MTA0MDAwMDUsIAotMHgzYzA0MDAwZiwgMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgxMDAwMDAwNSwgCi0weDM0ODQ0MjQwLCAweDNjMDQwMDA0LCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAKLTB4MzQ4NDkzZTAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMTYsIDB4MCwgCi0weDNjMDQwMDNkLCAweDEwMDAwMDEzLCAweDM0ODQwOTAwLCAweDNjMDIwMDAyLCAKLTB4OGM0MjhmZjgsIDB4MzA0MjgwMDAsIDB4MTA0MDAwMDUsIDB4M2MwNDAwMWUsIAotMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgxMDAwMDAwNSwgMHgzNDg0ODQ4MCwgCi0weDNjMDQwMDBmLCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAweDM0ODQ0MjQwLCAKLTB4MjQwMjAwMDUsIDB4MTQ2MjAwMDMsIDB4MCwgMHgzYzA0MDA3YSwgCi0weDM0ODQxMjAwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjMwLCAweDhmODMwMDU0LCAKLTB4NDQxMDIxLCAweDQzMTAyMywgMHg0NDEwMmIsIDB4MTQ0MDAwNGMsIAotMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZGEwLCAweDE0NDAwMDQ4LCAKLTB4MCwgMHgzYzAxMDAwMSwgMHgxMGMwMDAyNSwgMHhhYzIwNmRiMCwgCi0weDNjMDkwMDAxLCAweDhkMjk2ZDk0LCAweDI0MDcwMDAxLCAweDNjMDQ0MDAwLCAKLTB4M2MwODAwMDIsIDB4MjUwODhmZmMsIDB4MjUwYWZmZmMsIDB4NTI4NDIsIAotMHgxNGEwMDAwMiwgMHgyNGM2ZmZmZiwgMHgyNDA1MDAwOCwgMHhhOTEwMjQsIAotMHgxMDQwMDAxMCwgMHgwLCAweDE0YTcwMDA4LCAweDAsIAotMHg4ZDAyMDAwMCwgMHg0NDEwMjQsIDB4MTA0MDAwMGEsIDB4MCwgCi0weDNjMDEwMDAxLCAweDEwMDAwMDA3LCAweGFjMjU2ZGIwLCAweDhkNDIwMDAwLCAKLTB4NDQxMDI0LCAweDEwNDAwMDAzLCAweDAsIDB4M2MwMTAwMDEsIAotMHhhYzI3NmRiMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRiMCwgMHg2MTgyYiwgCi0weDJjNDIwMDAxLCAweDQzMTAyNCwgMHg1NDQwZmZlNSwgMHg1Mjg0MiwgCi0weDhmODIwMDU0LCAweDNjMDMwMDAxLCAweDhjNjM2ZGIwLCAweDNjMDEwMDAxLCAKLTB4YWMyMjZmMzAsIDB4MTA2MDAwM2IsIDB4MjQwMjAwMDUsIDB4M2MwMzAwMDEsIAotMHg4YzYzNmY0MCwgMHgzYzAxMDAwMSwgMHhhYzI1NmQ5OCwgMHgxNDYyMDAxMiwgCi0weDI0MDIwMDAxLCAweDNjMDIwMDAyLCAweDhjNDI4ZmY4LCAweDNjMDMyMDAwLCAKLTB4MzQ2MzUwMDAsIDB4NDMxMDI0LCAweDE0NDAwMDA2LCAweDI0MDIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4YWMyMDZmMWMsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTgsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmUyNCwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZGE0LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZDljLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZkYjAsIDB4MTA0MDAwMWUsIDB4MCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDljLCAweDEwNDAwMDA4LCAweDI0MDIwMDAxLCAKLTB4M2MwMTAwMDEsIDB4YWMyMDZkOWMsIDB4YWVlMjA0YjgsIDB4M2MwMTAwMDEsIAotMHhhYzIwNmUxYywgMHgzYzAxMDAwMSwgMHhhYzIyNmRkNCwgMHg4ZWUzMDRiOCwgCi0weDI0MDIwMDA4LCAweDEwNjIwMDA1LCAweDI0MDIwMDAxLCAweGMwMDQyMzksIAotMHgwLCAweDEwMDAwMDBiLCAweDAsIDB4M2MwMzAwMDEsIAotMHg4YzYzNmQ5OCwgMHgxMDYyMDAwNywgMHgyNDAyMDAwZSwgMHgzYzAzMDAwMiwgCi0weDhjNjM4ZjkwLCAweDEwNjIwMDAzLCAweDAsIDB4YzAwNGU5YywgCi0weDhmODQwMjIwLCAweDhmYmYwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMTgsIAotMHgyN2JkZmZlMCwgMHgzYzAzZmRmZiwgMHgzYzA0MDAwMSwgMHg4Yzg0NmQ5OCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZGMwLCAweDM0NjNmZmZmLCAweDI4M2EwMjQsIAotMHgxNDgyMDAwNiwgMHhhZmJmMDAxOCwgMHg4ZWUzMDRiOCwgMHgzYzAyMDAwMSwgCi0weDhjNDI2ZGM0LCAweDEwNjIwMDA2LCAweDAsIDB4OGVlMjA0YjgsIAotMHgzYzAxMDAwMSwgMHhhYzI0NmRjMCwgMHgzYzAxMDAwMSwgMHhhYzIyNmRjNCwgCi0weDNjMDMwMDAxLCAweDhjNjM2ZDk4LCAweDI0MDIwMDAyLCAweDEwNjIwMTljLCAKLTB4MmM2MjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMGEsIAotMHgwLCAweDEwMDAwMjI2LCAweDAsIDB4MjQwMjAwMDQsIAotMHgxMDYyMDBiNiwgMHgyNDAyMDAwOCwgMHgxMDYyMDEwYSwgMHgyNDAyMDAwMSwgCi0weDEwMDAwMjFmLCAweDAsIDB4OGVlMjA0YjgsIDB4MjQ0M2ZmZmYsIAotMHgyYzYyMDAwOCwgMHgxMDQwMDIxYywgMHgzMTA4MCwgMHgzYzAxMDAwMSwgCi0weDIyMDgyMSwgMHg4YzIyNmFmOCwgMHg0MDAwMDgsIDB4MCwgCi0weDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAweDI0MDIwMDA1LCAweDE0NjIwMDEwLCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhNCwgMHgxMDQwMDAwOCwgCi0weDI0MDIwMDAzLCAweGMwMDQ0ODIsIDB4MCwgMHgyNDAyMDAwMiwgCi0weGFlZTIwNGI4LCAweDNjMDEwMDAxLCAweDEwMDAwMDAyLCAweGFjMjA2ZGE0LCAKLTB4YWVlMjA0YjgsIDB4M2MwMTAwMDEsIDB4MTAwMDAyMDMsIDB4YWMyMDZkMzAsIAotMHhjMDA0NDgyLCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYTQsIAotMHgzYzAxMDAwMSwgMHhhYzIwNmQzMCwgMHgxNDQwMDE3YSwgMHgyNDAyMDAwMiwgCi0weDEwMDAwMTlkLCAweDI0MDIwMDA3LCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAKLTB4MjQwMjAwMDUsIDB4MTQ2MjAwMDMsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmRkMCwgMHhjMDA0NWZmLCAweDAsIDB4M2MwMzAwMDEsIAotMHg4YzYzNmRkMCwgMHgxMDAwMDE3NCwgMHgyNDAyMDAxMSwgMHgzYzA1MDAwMSwgCi0weDhjYTU2ZDk4LCAweDNjMDYwMDAyLCAweDhjYzY4ZmZjLCAweGMwMDUxMDQsIAotMHgyMDIxLCAweDI0MDIwMDA1LCAweDNjMDEwMDAxLCAweGFjMjA2ZGE0LCAKLTB4MTAwMDAxZTEsIDB4YWVlMjA0YjgsIDB4M2MwNDAwMDEsIDB4MjQ4NDZhZWMsIAotMHgzYzA1MDAwZiwgMHgzNGE1MDEwMCwgMHgzMDIxLCAweDM4MjEsIAotMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDEwMDAwMWQ2LCAKLTB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsIAotMHgxNDQwMDE3NSwgMHgyNDAyMDAwNywgMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgCi0weDhjNDI2ZjI4LCAweDI0NjNkOGYwLCAweDQzMTAyMywgMHgyYzQyMjcxMCwgCi0weDE0NDAwMDAzLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZDljLCAKLTB4M2MwMjAwMDIsIDB4OGM0MjhmZmMsIDB4MzA0MjUwMDAsIDB4MTA0MDAxYzIsIAotMHgwLCAweDhmODIwMjIwLCAweDMwNDI4MDAwLCAweDEwNDAwMTdkLCAKLTB4MCwgMHgxMDAwMDE3NSwgMHgwLCAweDNjMDUwMDAxLCAKLTB4OGNhNTZkOTgsIDB4YzAwNTI5YiwgMHgyMDIxLCAweGMwMDU1MWIsIAotMHgyMDIxLCAweDNjMDMwMDAyLCAweDhjNjM4ZmY0LCAweDQ2MTAxYjAsIAotMHgyNDAyMDAwMSwgMHgzYzAyMDAwOCwgMHg2MjEwMjQsIDB4MTA0MDAwMDYsIAotMHgwLCAweDhmODIwMjE0LCAweDNjMDNmZmZmLCAweDQzMTAyNCwgCi0weDEwMDAwMDA1LCAweDM0NDIyNTFmLCAweDhmODIwMjE0LCAweDNjMDNmZmZmLCAKLTB4NDMxMDI0LCAweDM0NDIyNDFmLCAweGFmODIwMjE0LCAweDhmODIwMjIwLCAKLTB4M2MwMzAyMDAsIDB4MzQ0MjAwMDIsIDB4YWY4MjAyMjAsIDB4MjQwMjAwMDgsIAotMHhhZWUyMDRiOCwgMHg4ZjgyMDIyMCwgMHgyODNhMDI1LCAweDNjMDMwMDA0LCAKLTB4NDMxMDI0LCAweDE0NDAwMDE2LCAweDAsIDB4M2MwMjAwMDIsIAotMHg4YzQyOGZmYywgMHgzMDQyNTAwMCwgMHgxMDQwMDAwZCwgMHgwLCAKLTB4OGY4MjAyMjAsIDB4MzA0MjgwMDAsIDB4MTA0MDAwMDYsIDB4MCwgCi0weDhmODIwMjIwLCAweDNjMDNmZmZmLCAweDM0NjM3ZmZmLCAweDEwMDAwMDAzLCAKLTB4NDMxMDI0LCAweDhmODIwMjIwLCAweDM0NDI4MDAwLCAweGFmODIwMjIwLCAKLTB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZmNDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMGEsIAotMHgwLCAweDNjMDIwMDAxLCAweDk0NDI2ZjI2LCAweDI0NDI5ZmJjLCAKLTB4MmM0MjAwMDQsIDB4MTA0MDAwMDQsIDB4MjQwNDAwMTgsIDB4MjQwNTAwMDIsIAotMHhjMDA0ZGRiLCAweDI0MDYwMDIwLCAweGMwMDNlNmQsIDB4MCwgCi0weDNjMDEwMDAxLCAweDEwMDAwMTcwLCAweGFjMjA2ZTIwLCAweDhlZTIwNGI4LCAKLTB4MjQ0M2ZmZmYsIDB4MmM2MjAwMDgsIDB4MTA0MDAxNmIsIDB4MzEwODAsIAotMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjZiMTgsIDB4NDAwMDA4LCAKLTB4MCwgMHhjMDA0NTQ3LCAweDAsIDB4M2MwMzAwMDEsIAotMHg4YzYzNmRiNCwgMHgxMDAwMDBlOCwgMHgyNDAyMDAwOSwgMHgzYzAyMDAwMiwgCi0weDhjNDI4ZmY4LCAweDMwNDI0MDAwLCAweDEwNDAwMDA0LCAweDAsIAotMHg4ZjgyMDA0NCwgMHgxMDAwMDAwNiwgMHgzNDQyZjA4MCwgMHg4ZjgyMDA0NCwgCi0weDNjMDNmZmZmLCAweDM0NjMzZjdmLCAweDQzMTAyNCwgMHgzNDQyYTA4MCwgCi0weGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDEwMDAwMGVhLCAweDI0MDIwMDA0LCAKLTB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMjgsIDB4MjQ2M2Q4ZjAsIAotMHg0MzEwMjMsIDB4MmM0MjI3MTAsIDB4MTQ0MDAxNDcsIDB4MjQwMjAwMDUsIAotMHgxMDAwMDBkOCwgMHgwLCAweDhmODIwMjIwLCAweDNjMDNmNzAwLCAKLTB4NDMxMDI1LCAweGFmODIwMjIwLCAweGFmODAwMjA0LCAweDNjMDEwMDAyLCAKLTB4MTAwMDAwZDYsIDB4YWMyMDhmZTAsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIAotMHg4YzQyNmYyOCwgMHgyNDYzZmZmNiwgMHg0MzEwMjMsIDB4MmM0MjAwMGEsIAotMHgxNDQwMDEzNSwgMHgyNDAyMDAwNywgMHgxMDAwMDBkNywgMHgwLCAKLTB4YzAwM2Y1MCwgMHgwLCAweDEwNDAwMTJkLCAweDI0MDIwMDAxLCAKLTB4OGY4MjAyMTQsIDB4M2MwM2ZmZmYsIDB4M2MwNDAwMDEsIDB4OGM4NDZmMWMsIAotMHg0MzEwMjQsIDB4MzQ0MjI1MWYsIDB4YWY4MjAyMTQsIDB4MjQwMjAwMDgsIAotMHgxMDgwMDAwNSwgMHhhZWUyMDRiOCwgMHgzYzAyMDAwMSwgMHg4YzQyNmU0NCwgCi0weDEwNDAwMDY0LCAweDI0MDIwMDAxLCAweDhmODIwMjIwLCAweDNjMDMwMDA4LCAKLTB4NDMxMDI0LCAweDEwNDAwMDZhLCAweDNjMDIwMjAwLCAweDEwMDAwMDc4LCAKLTB4MCwgMHg4ZWUyMDRiOCwgMHgyNDQzZmZmZiwgMHgyYzYyMDAwNywgCi0weDEwNDAwMTE1LCAweDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgCi0weDhjMjI2YjM4LCAweDQwMDAwOCwgMHgwLCAweGMwMDNkYWYsIAotMHgwLCAweDNjMDEwMDAxLCAweGFjMjA2ZDljLCAweGFmODAwMjA0LCAKLTB4M2MwMTAwMDIsIDB4YzAwNDQ4MiwgMHhhYzIwOGZlMCwgMHgyNDAyMDAwMSwgCi0weDNjMDEwMDAxLCAweGFjMjI2ZGI0LCAweDI0MDIwMDAyLCAweDEwMDAwMTAyLCAKLTB4YWVlMjA0YjgsIDB4YzAwNDU0NywgMHgwLCAweDNjMDMwMDAxLCAKLTB4OGM2MzZkYjQsIDB4MTAwMDAwODQsIDB4MjQwMjAwMDksIDB4M2MwMjAwMDIsIAotMHg4YzQyOGZmOCwgMHgzMDQyNDAwMCwgMHgxMDQwMDAwMywgMHgzYzAyMDBjOCwgCi0weDEwMDAwMDAyLCAweDM0NDIwMWY2LCAweDM0NDIwMWZlLCAweGFmODIwMjM4LCAKLTB4OGY4MzAwNTQsIDB4MTAwMDAwOGIsIDB4MjQwMjAwMDQsIDB4OGY4MzAwNTQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmYyOCwgMHgyNDYzZDhmMCwgMHg0MzEwMjMsIAotMHgyYzQyMjcxMCwgMHgxNDQwMDBlOCwgMHgyNDAyMDAwNSwgMHgxMDAwMDA3OSwgCi0weDAsIDB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAKLTB4YWY4MjAyMjAsIDB4YWY4MDAyMDQsIDB4M2MwMTAwMDIsIDB4MTAwMDAwNzcsIAotMHhhYzIwOGZlMCwgMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYyOCwgCi0weDI0NjNmZmY2LCAweDQzMTAyMywgMHgyYzQyMDAwYSwgMHgxNDQwMDBkNiwgCi0weDI0MDIwMDA3LCAweDEwMDAwMDc4LCAweDAsIDB4YzAwM2Y1MCwgCi0weDAsIDB4MTA0MDAwY2UsIDB4MjQwMjAwMDEsIDB4OGY4MjAyMTQsIAotMHgzYzAzZmZmZiwgMHgzYzA0MDAwMSwgMHg4Yzg0NmYxYywgMHg0MzEwMjQsIAotMHgzNDQyMjUxZiwgMHhhZjgyMDIxNCwgMHgyNDAyMDAwOCwgMHgxMDgwMDAwZiwgCi0weGFlZTIwNGI4LCAweDNjMDIwMDAxLCAweDhjNDI2ZTQ0LCAweDE0NDAwMDBiLCAKLTB4MCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwgCi0weDI0MDIwMDAxLCAweDNjMDEwMDAyLCAweGFjMjI4ZjkwLCAweGMwMDRlOWMsIAotMHg4Zjg0MDIyMCwgMHgxMDAwMDAxNiwgMHgwLCAweDhmODIwMjIwLCAKLTB4M2MwMzAwMDgsIDB4NDMxMDI0LCAweDE0NDAwMDExLCAweDNjMDIwMjAwLCAKLTB4MjgyYTAyNSwgMHgyNDAyMDAwZSwgMHgzYzAxMDAwMiwgMHhhYzIyOGY5MCwgCi0weGMwMDU1MWIsIDB4MjAyMSwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgCi0weGMwMDNlNmQsIDB4YWY4MjAyMjAsIDB4M2MwNTAwMDEsIDB4OGNhNTZkOTgsIAotMHhjMDA1MjliLCAweDIwMjEsIDB4MTAwMDAwYTMsIDB4MCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZTQ0LCAweDEwNDAwMDlmLCAweDAsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmU0MCwgMHgyNDQyZmZmZiwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZTQwLCAweDE0NDAwMDk4LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAKLTB4YWMyMDZlNDQsIDB4M2MwMTAwMDEsIDB4MTAwMDAwOTMsIDB4YWMyMjZlNDAsIAotMHg4ZWUyMDRiOCwgMHgyNDQzZmZmZiwgMHgyYzYyMDAwNywgMHgxMDQwMDA4ZSwgCi0weDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNmI1OCwgCi0weDQwMDAwOCwgMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZGE0LCAKLTB4MTA0MDAwMTgsIDB4MjQwMjAwMDUsIDB4YzAwNDQ4MiwgMHgwLCAKLTB4MjQwMjAwMDIsIDB4YWVlMjA0YjgsIDB4M2MwMTAwMDEsIDB4MTAwMDAwN2UsIAotMHhhYzIwNmRhNCwgMHhjMDA0OTYzLCAweDAsIDB4M2MwMzAwMDEsIAotMHg4YzYzNmRkNCwgMHgyNDAyMDAwNiwgMHgxNDYyMDA3NywgMHgyNDAyMDAwMywgCi0weDEwMDAwMDc1LCAweGFlZTIwNGI4LCAweDNjMDUwMDAxLCAweDhjYTU2ZDk4LCAKLTB4M2MwNjAwMDIsIDB4OGNjNjhmZjgsIDB4YzAwNTEwNCwgMHgyMDIxLCAKLTB4MjQwMjAwMDUsIDB4MTAwMDAwNmMsIDB4YWVlMjA0YjgsIDB4OGY4MjAyMjAsIAotMHgzYzAzZjcwMCwgMHg0MzEwMjUsIDB4YWY4MjAyMjAsIDB4OGY4MzAwNTQsIAotMHgyNDAyMDAwNiwgMHhhZWUyMDRiOCwgMHgzYzAxMDAwMSwgMHgxMDAwMDA2MiwgCi0weGFjMjM2ZjI4LCAweDhmODIwMjIwLCAweDNjMDMwMDA0LCAweDQzMTAyNCwgCi0weDEwNDAwMDAzLCAweDI0MDIwMDA3LCAweDEwMDAwMDViLCAweGFlZTIwNGI4LCAKLTB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMjgsIDB4MjQ2M2Q4ZjAsIAotMHg0MzEwMjMsIDB4MmM0MjI3MTAsIDB4MTQ0MDAwMDMsIDB4MjQwMjAwMDEsIAotMHgzYzAxMDAwMSwgMHhhYzIyNmQ5YywgMHgzYzAyMDAwMiwgMHg4YzQyOGZmOCwgCi0weDMwNDI1MDAwLCAweDEwNDAwMDRjLCAweDAsIDB4OGY4MjAyMjAsIAotMHgzMDQyODAwMCwgMHgxMDQwMDAwNywgMHgwLCAweDhmODIwMjIwLCAKLTB4M2MwM2ZmZmYsIDB4MzQ2MzdmZmYsIDB4NDMxMDI0LCAweDEwMDAwMDQyLCAKLTB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4MzQ0MjgwMDAsIDB4MTAwMDAwM2UsIAotMHhhZjgyMDIyMCwgMHgzYzA1MDAwMSwgMHg4Y2E1NmQ5OCwgMHhjMDA1MjliLCAKLTB4MjAyMSwgMHhjMDA1NTFiLCAweDIwMjEsIDB4M2MwMjAwMDIsIAotMHg4YzQyOGZmMCwgMHg0NDEwMDMyLCAweDI0MDIwMDAxLCAweDhmODIwMjE0LCAKLTB4M2MwM2ZmZmYsIDB4NDMxMDI0LCAweDM0NDIyNTFmLCAweGFmODIwMjE0LCAKLTB4MjQwMjAwMDgsIDB4YWVlMjA0YjgsIDB4OGY4MjAyMjAsIDB4MzQ0MjAwMDIsIAotMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsIAotMHgxNDQwMDAxNiwgMHgwLCAweDNjMDIwMDAyLCAweDhjNDI4ZmY4LCAKLTB4MzA0MjUwMDAsIDB4MTA0MDAwMGQsIDB4MCwgMHg4ZjgyMDIyMCwgCi0weDMwNDI4MDAwLCAweDEwNDAwMDA2LCAweDAsIDB4OGY4MjAyMjAsIAotMHgzYzAzZmZmZiwgMHgzNDYzN2ZmZiwgMHgxMDAwMDAwMywgMHg0MzEwMjQsIAotMHg4ZjgyMDIyMCwgMHgzNDQyODAwMCwgMHhhZjgyMDIyMCwgMHg4ZjgyMDIyMCwgCi0weDNjMDNmNzAwLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgzYzAyMDAwMSwgCi0weDk0NDI2ZjI2LCAweDI0NDI5ZmJjLCAweDJjNDIwMDA0LCAweDEwNDAwMDA0LCAKLTB4MjQwNDAwMTgsIDB4MjQwNTAwMDIsIDB4YzAwNGRkYiwgMHgyNDA2MDAyMCwgCi0weGMwMDNlNmQsIDB4MCwgMHgxMDAwMDAwMywgMHgwLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZkOWMsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDIwLCAweDhmODIwMjAwLCAweDhmODIwMjIwLCAweDhmODIwMjIwLCAKLTB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMDAsIDB4M2MwNTAwMDEsIAotMHg4Y2E1NmQ5OCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIwMCwgMHgyNDAyMDAwMiwgCi0weDEwYTIwMDRiLCAweDJjYTIwMDAzLCAweDEwNDAwMDA1LCAweDI0MDIwMDAxLCAKLTB4MTBhMjAwMGEsIDB4MCwgMHgxMDAwMDBiMSwgMHgwLCAKLTB4MjQwMjAwMDQsIDB4MTBhMjAwNzIsIDB4MjQwMjAwMDgsIDB4MTBhMjAwODUsIAotMHgzYzAyZjBmZiwgMHgxMDAwMDBhYSwgMHgwLCAweDhmODMwMDUwLCAKLTB4M2MwMmYwZmYsIDB4MzQ0MmZmZmYsIDB4M2MwNDAwMDEsIDB4OGM4NDZmNDAsIAotMHg2MjE4MjQsIDB4M2MwMjA3MDAsIDB4NjIxODI1LCAweDI0MDIwZTAwLCAKLTB4MjQ4NGZmZmIsIDB4MmM4NDAwMDIsIDB4YWY4MzAwNTAsIDB4YWY4NTAyMDAsIAotMHhhZjg1MDIyMCwgMHgxNDgwMDAwNiwgMHhhZjgyMDIzOCwgMHg4ZjgyMDA0NCwgCi0weDNjMDNmZmZmLCAweDM0NjMzZjdmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwgCi0weDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAweDI0MDIwMDA1LCAweDE0NjIwMDA0LCAKLTB4MCwgMHg4ZjgyMDA0NCwgMHgzNDQyNTAwMCwgMHhhZjgyMDA0NCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDg4LCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAKLTB4MzQ0MjAwMjIsIDB4MjQ2M2ZmZmMsIDB4MmM2MzAwMDIsIDB4MTQ2MDAwMGMsIAotMHhhZjgyMDIwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhYywgMHgzYzAzMDAwMSwgCi0weDhjNjM2ZDkwLCAweDNjMDQwMDAxLCAweDhjODQ2ZDhjLCAweDM0NDI4MDAwLCAKLTB4NjIxODI1LCAweDY0MTgyNSwgMHgxMDAwMDAwYSwgMHgzNDYyMDAwMiwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDkwLCAweDNjMDMwMDAxLCAweDhjNjM2ZGFjLCAKLTB4M2MwNDAwMDEsIDB4OGM4NDZkOGMsIDB4NDMxMDI1LCAweDQ0MTAyNSwgCi0weDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDEwMDAwMDJmLCAweDI0MDIwMDAxLCAKLTB4MjQwMjBlMDEsIDB4YWY4MjAyMzgsIDB4OGY4MzAwNTAsIDB4M2MwMmYwZmYsIAotMHgzNDQyZmZmZiwgMHgzYzA0MDAwMSwgMHg4Yzg0NmYxYywgMHg2MjE4MjQsIAotMHgzYzAyMGQwMCwgMHg2MjE4MjUsIDB4MjQwMjAwMDEsIDB4YWY4MzAwNTAsIAotMHhhZjgyMDIwMCwgMHhhZjgyMDIyMCwgMHgxMDgwMDAwNSwgMHgzYzAzM2YwMCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDgwLCAweDEwMDAwMDA0LCAweDM0NjMwMDcwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZkODAsIDB4MzQ2MzAwNzIsIDB4NDMxMDI1LCAKLTB4YWY4MjAyMDAsIDB4M2MwMzAwMDEsIDB4OGM2MzZkODQsIDB4M2MwMmY3MDAsIAotMHg2MjE4MjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZkOTAsIDB4M2MwNDAwMDEsIAotMHg4Yzg0NmRhYywgMHgzYzA1MDAwMSwgMHg4Y2E1NmY0MCwgMHg0MzEwMjUsIAotMHg0NDEwMjUsIDB4YWY4MjAyMjAsIDB4MjQwMjAwMDUsIDB4MTRhMjAwMDYsIAotMHgyNDAyMDAwMSwgMHg4ZjgyMDA0NCwgMHgyNDAzYWZmZiwgMHg0MzEwMjQsIAotMHhhZjgyMDA0NCwgMHgyNDAyMDAwMSwgMHgxMDAwMDAzZCwgMHhhZjgyMDIzOCwgCi0weDhmODMwMDUwLCAweDNjMDJmMGZmLCAweDM0NDJmZmZmLCAweDNjMDQwMDAxLCAKLTB4OGM4NDZmMWMsIDB4NjIxODI0LCAweDNjMDIwYTAwLCAweDYyMTgyNSwgCi0weDI0MDIwMDAxLCAweGFmODMwMDUwLCAweGFmODIwMjAwLCAweDEwODAwMDFlLCAKLTB4YWY4MjAyMjAsIDB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4MTQ0MDAwMWEsIAotMHgzYzAzM2YwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmQ4MCwgMHgxMDAwMDAxYSwgCi0weDM0NjMwMGUwLCAweDhmODMwMDUwLCAweDNjMDQwMDAxLCAweDhjODQ2ZjFjLCAKLTB4MzQ0MmZmZmYsIDB4NjIxODI0LCAweDEwODAwMDBmLCAweGFmODMwMDUwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4MTQ0MDAwMGIsIDB4M2MwNDNmMDAsIAotMHgzYzAzMDAwMSwgMHg4YzYzNmQ4MCwgMHgzNDg0MDBlMCwgMHgyNDAyMDAwMSwgCi0weGFmODIwMjAwLCAweGFmODIwMjIwLCAweDY0MTgyNSwgMHhhZjgzMDIwMCwgCi0weDEwMDAwMDA4LCAweDNjMDVmNzAwLCAweDNjMDIwMDAxLCAweDhjNDI2ZDgwLCAKLTB4M2MwMzNmMDAsIDB4MzQ2MzAwZTIsIDB4NDMxMDI1LCAweGFmODIwMjAwLCAKLTB4M2MwNWY3MDAsIDB4MzRhNTgwMDAsIDB4M2MwMzAwMDEsIDB4OGM2MzZkODQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmQ5MCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmRhYywgCi0weDY1MTgyNSwgMHg0MzEwMjUsIDB4NDQxMDI1LCAweGFmODIwMjIwLCAKLTB4M2UwMDAwOCwgMHgwLCAweDNjMDMwMDAxLCAweDhjNjM2ZGI0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZkYjgsIDB4MTA2MjAwMDMsIDB4MjQwMjAwMDIsIAotMHgzYzAxMDAwMSwgMHhhYzIzNmRiOCwgMHgxMDYyMDAxZCwgMHgyYzYyMDAwMywgCi0weDEwNDAwMDI1LCAweDI0MDIwMDAxLCAweDE0NjIwMDIzLCAweDI0MDIwMDA0LCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MTA2MjAwMDYsIDB4MjQwMjAwMDgsIAotMHgxNDYyMDAwYywgMHgzYzAyMDBjOCwgMHgzNDQyMDFmYiwgMHgxMDAwMDAwOSwgCi0weGFmODIwMjM4LCAweDI0MDIwZTAxLCAweGFmODIwMjM4LCAweDhmODIwMDQ0LCAKLTB4M2MwM2ZmZmYsIDB4MzQ2MzNmN2YsIDB4NDMxMDI0LCAweDM0NDIwMDgwLCAKLTB4YWY4MjAwNDQsIDB4OGY4MzAwNTQsIDB4MjQwMjAwMDIsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmRiNCwgMHgzYzAxMDAwMSwgMHgxMDAwMDAwYiwgMHhhYzIzNmYyYywgCi0weDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI2ZjJjLCAweDI0NjNkOGYwLCAKLTB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMDAzLCAweDI0MDIwMDA5LCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZkYjQsIDB4M2UwMDAwOCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZDgsIAotMHhhZmIyMDAxOCwgMHg4MDkwMjEsIDB4YWZiMzAwMWMsIDB4YTA5ODIxLCAKLTB4YWZiMTAwMTQsIDB4YzA4ODIxLCAweGFmYjAwMDEwLCAweDgwMjEsIAotMHhhZmJmMDAyMCwgMHhhNjIwMDAwMCwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwgCi0weGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHgyNDEwMDAxMCwgMHgyNTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgCi0weDI1MDEwMjQsIDB4MjQxMDAwMTAsIDB4MjcwMTAyNCwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgyNzAxMDI0LCAweGMwMDRkYjksIDB4MzQxMDgwMDAsIAotMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwgMHgwLCAKLTB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAweDUwMTAyNSwgCi0weGE2MjIwMDAwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLCAKLTB4YzAwNGRiOSwgMHgwLCAweDhmYmYwMDIwLCAweDhmYjMwMDFjLCAKLTB4OGZiMjAwMTgsIDB4OGZiMTAwMTQsIDB4OGZiMDAwMTAsIDB4M2UwMDAwOCwgCi0weDI3YmQwMDI4LCAweDI3YmRmZmQ4LCAweGFmYjEwMDE0LCAweDgwODgyMSwgCi0weGFmYjIwMDE4LCAweGEwOTAyMSwgMHhhZmIzMDAxYywgMHhjMDk4MjEsIAotMHhhZmIwMDAxMCwgMHg4MDIxLCAweGFmYmYwMDIwLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDIzMDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MjMwMTAyNCwgMHgyNDEwMDAxMCwgMHgyNTAxMDI0LCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDI1MDEwMjQsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgzNDEwODAwMCwgCi0weDk2NjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZjgsIAotMHgwLCAweGMwMDRkYjksIDB4MCwgMHg4ZmJmMDAyMCwgCi0weDhmYjMwMDFjLCAweDhmYjIwMDE4LCAweDhmYjEwMDE0LCAweDhmYjAwMDEwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmRkMCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZTE4LCAweDI3YmRmZmQ4LCAweGFmYmYwMDIwLCAKLTB4YWZiMTAwMWMsIDB4MTA4MjAwMDMsIDB4YWZiMDAwMTgsIDB4M2MwMTAwMDEsIAotMHhhYzI0NmUxOCwgMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgyNDAyMDAwNSwgCi0weDE0NjIwMDA1LCAweDI0ODNmZmZmLCAweGMwMDQ5NjMsIDB4MCwgCi0weDEwMDAwMzRjLCAweDAsIDB4MmM2MjAwMTMsIDB4MTA0MDAzNDksIAotMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjZiODAsIAotMHg0MDAwMDgsIDB4MCwgMHhjMDA0ZGI5LCAweDgwMjEsIAotMHgzNDAyODAwMCwgMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIAotMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHhjMDA0ZDc4LCAKLTB4MjAyMSwgMHgxMDgwNDIsIDB4MTYwMGZmZmMsIDB4MCwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgCi0weDE2MDBmZmY4LCAweDAsIDB4YzAwNGRiOSwgMHgwLCAKLTB4MTAwMDAzMGUsIDB4MjQwMjAwMDIsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIAotMHg4MDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIAotMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIAotMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgCi0weDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYywgMHgwLCAweGMwMDRkYjksIDB4MzQxMDgwMDAsIAotMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwgMHgwLCAKLTB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAweDUwMTAyNSwgCi0weGE2MjIwMDAwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLCAKLTB4YzAwNGRiOSwgMHgwLCAweDk3YTIwMDEwLCAweDMwNDI4MDAwLCAKLTB4MTQ0MDAyZGMsIDB4MjQwMjAwMDMsIDB4MTAwMDAyZDgsIDB4MCwgCi0weDI0MDIxMjAwLCAweGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIAotMHhjMDA0ZDc4LCAweDIwMjEsIDB4MTA4MDQyLCAweDE2MDBmZmZjLCAKLTB4MCwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgyMDIxLCAweDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIAotMHgwLCAweDhmODMwMDU0LCAweDEwMDAwMjk2LCAweDI0MDIwMDA0LCAKLTB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjZmM2MsIDB4MjQ2M2ZmOWMsIAotMHg0MzEwMjMsIDB4MmM0MjAwNjQsIDB4MTQ0MDAyOWUsIDB4MjQwMjAwMDIsIAotMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgxMDYyMDI5NywgMHgyYzYyMDAwMywgCi0weDE0NDAwMjk2LCAweDI0MDIwMDExLCAweDI0MDIwMDAzLCAweDEwNjIwMDA1LCAKLTB4MjQwMjAwMDQsIDB4MTA2MjAyOTEsIDB4MjQwMjAwMGYsIDB4MTAwMDAyOGYsIAotMHgyNDAyMDAxMSwgMHgxMDAwMDI4ZCwgMHgyNDAyMDAwNSwgMHgyNDAyMDAxNCwgCi0weGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAKLTB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMTIsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTIsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgzNDEwODAwMCwgCi0weDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZjgsIAotMHgwLCAweGMwMDRkYjksIDB4MCwgMHg4ZjgzMDA1NCwgCi0weDEwMDAwMjQ4LCAweDI0MDIwMDA2LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAKLTB4OGM0MjZmM2MsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAweDJjNDIwMDY0LCAKLTB4MTQ0MDAyNTAsIDB4MjQwMjAwMDcsIDB4MTAwMDAyNGMsIDB4MCwgCi0weDI0MDIwMDA2LCAweGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIAotMHgzMjAyMDAxMywgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTMsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwgCi0weDhmODMwMDU0LCAweDEwMDAwMjA3LCAweDI0MDIwMDA4LCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZmM2MsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAKLTB4MmM0MjAwNjQsIDB4MTQ0MDAyMGYsIDB4MjQwMjAwMDksIDB4MTAwMDAyMGIsIAotMHgwLCAweDI3YjEwMDEwLCAweGE3YTAwMDEwLCAweDgwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIAotMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsIAotMHhjMDA0ZGI5LCAweDM0MTA4MDAwLCAweGMwMDRkYjksIDB4MCwgCi0weGMwMDRkNTgsIDB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsIAotMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjcsIDB4MCwgMHhjMDA0ZGI5LCAweDgwMjEsIAotMHg5N2EyMDAxMCwgMHgyN2IxMDAxMCwgMHgzNDQyMDAwMSwgMHhhN2EyMDAxMCwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgCi0weDE2MDBmZmY4LCAweDAsIDB4YzAwNGRiOSwgMHgwLCAKLTB4OGY4MzAwNTQsIDB4MTAwMDAxOTMsIDB4MjQwMjAwMGEsIDB4OGY4MzAwNTQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmYzYywgMHgyNDYzZmY5YywgMHg0MzEwMjMsIAotMHgyYzQyMDA2NCwgMHgxNDQwMDE5YiwgMHgyNDAyMDAwYiwgMHgxMDAwMDE5NywgCi0weDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE3LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxNywgCi0weGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLCAKLTB4YzAwNGQ1OCwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwgCi0weDk3YTIwMDEwLCAweDI3YjEwMDEwLCAweDM0NDIwNzAwLCAweGE3YTIwMDEwLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTcsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE3LCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHgzNDEwODAwMCwgMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZGI5LCAweDAsIAotMHg4ZjgzMDA1NCwgMHgxMDAwMDExZiwgMHgyNDAyMDAwYywgMHg4ZjgzMDA1NCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZjNjLCAweDI0NjNmZjljLCAweDQzMTAyMywgCi0weDJjNDIwMDY0LCAweDE0NDAwMTI3LCAweDI0MDIwMDEyLCAweDEwMDAwMTIzLCAKLTB4MCwgMHgyN2IxMDAxMCwgMHhhN2EwMDAxMCwgMHg4MDIxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMTQsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE0LCAKLTB4YzAwNGRiOSwgMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAweDAsIAotMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAKLTB4OTYyMjAwMDAsIDB4NTAxMDI1LCAweGE2MjIwMDAwLCAweDEwODA0MiwgCi0weDE2MDBmZmY3LCAweDAsIDB4YzAwNGRiOSwgMHg4MDIxLCAKLTB4OTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4MzQ0MjAwMTAsIDB4YTdhMjAwMTAsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIAotMHgzMjAyMDAxNCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTQsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwgCi0weDhmODMwMDU0LCAweDEwMDAwMGFiLCAweDI0MDIwMDEzLCAweDhmODMwMDU0LCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZmM2MsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAKLTB4MmM0MjAwNjQsIDB4MTQ0MDAwYjMsIDB4MjQwMjAwMGQsIDB4MTAwMDAwYWYsIAotMHgwLCAweDI3YjEwMDEwLCAweGE3YTAwMDEwLCAweDgwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIAotMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsIAotMHhjMDA0ZGI5LCAweDM0MTA4MDAwLCAweGMwMDRkYjksIDB4MCwgCi0weGMwMDRkNTgsIDB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsIAotMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZjcsIDB4MCwgMHhjMDA0ZGI5LCAweDgwMjEsIAotMHg5N2EyMDAxMCwgMHgyN2IxMDAxMCwgMHgzMDQyZmZmZSwgMHhhN2EyMDAxMCwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgCi0weDE2MDBmZmY4LCAweDAsIDB4YzAwNGRiOSwgMHgwLCAKLTB4OGY4MzAwNTQsIDB4MTAwMDAwMzcsIDB4MjQwMjAwMGUsIDB4MjQwMjA4NDAsIAotMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHg4MDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgCi0weDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDEzLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDEzLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MzQxMDgwMDAsIAotMHg5NjIyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIDB4MjAyMSwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmY4LCAKLTB4MCwgMHhjMDA0ZGI5LCAweDAsIDB4OGY4MzAwNTQsIAotMHgyNDAyMDAxMCwgMHgzYzAxMDAwMSwgMHhhYzIyNmRkMCwgMHgzYzAxMDAwMSwgCi0weDEwMDAwMDBjLCAweGFjMjM2ZjNjLCAweDhmODMwMDU0LCAweDNjMDIwMDAxLCAKLTB4OGM0MjZmM2MsIDB4MjQ2M2ZmOWMsIDB4NDMxMDIzLCAweDJjNDIwMDY0LCAKLTB4MTQ0MDAwMDQsIDB4MCwgMHgyNDAyMDAxMSwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZGQwLCAweDhmYmYwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzAzMDAwMSwgMHg4YzYzNmQ5OCwgCi0weDI3YmRmZmM4LCAweDI0MDIwMDAyLCAweGFmYmYwMDM0LCAweGFmYjIwMDMwLCAKLTB4YWZiMTAwMmMsIDB4MTQ2MjAwMDQsIDB4YWZiMDAwMjgsIDB4M2MxMjAwMDIsIAotMHgxMDAwMDAwMywgMHg4ZTUyOGZmOCwgMHgzYzEyMDAwMiwgMHg4ZTUyOGZmYywgCi0weDNjMDMwMDAxLCAweDhjNjM2ZGQ0LCAweDNjMDIwMDAxLCAweDhjNDI2ZTFjLCAKLTB4NTA2MjAwMDQsIDB4MjQ2M2ZmZmYsIDB4M2MwMTAwMDEsIDB4YWMyMzZlMWMsIAotMHgyNDYzZmZmZiwgMHgyYzYyMDAwNiwgMHgxMDQwMDM3NywgMHgzMTA4MCwgCi0weDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNmJkOCwgMHg0MDAwMDgsIAotMHgwLCAweDIwMjEsIDB4MjgyMSwgMHhjMDA0ZGRiLCAKLTB4MzQwNjgwMDAsIDB4MjQwNDAwMTAsIDB4MjQwNTAwMDIsIDB4MjQwNjAwMDIsIAotMHgyNDAyMDAwMiwgMHhjMDA0ZGRiLCAweGE3YTIwMDE4LCAweDI0MDIwMDAyLCAKLTB4M2MwMTAwMDEsIDB4MTAwMDAzNjQsIDB4YWMyMjZkZDQsIDB4MjdiMTAwMTgsIAotMHhhN2EwMDAxOCwgMHg4MDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAKLTB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgCi0weDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDEwODA0MiwgMHgxNjAwZmZmYywgMHgwLCAweGMwMDRkYjksIAotMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwgCi0weDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAKLTB4NTAxMDI1LCAweGE2MjIwMDAwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgCi0weDAsIDB4YzAwNGRiOSwgMHgwLCAweDk3YTIwMDE4LCAKLTB4MzA0MjgwMDAsIDB4MTQ0MDAwMDQsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmRkNCwgMHgyNDAyMDAwMywgMHgzYzAxMDAwMSwgMHgxMDAwMDMyYSwgCi0weGFjMjI2ZGQ0LCAweDI0MDQwMDEwLCAweDI0MDUwMDAyLCAweDI0MDYwMDAyLCAKLTB4MjQwMjAwMDIsIDB4YzAwNGRkYiwgMHhhN2EyMDAxOCwgMHgzYzAzMDAwMSwgCi0weDhjNjM2ZTIwLCAweDI0MDIwMDAxLCAweDE0NjIwMWUxLCAweDgwMjEsIAotMHgyN2IxMDAxOCwgMHhhN2EwMDAxOCwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwgCi0weGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIAotMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwgMHhjMDA0ZGI5LCAweDM0MTA4MDAwLCAKLTB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwgCi0weDUwNDAwMDA1LCAweDEwODA0MiwgMHg5NjIyMDAwMCwgMHg1MDEwMjUsIAotMHhhNjIyMDAwMCwgMHgxMDgwNDIsIDB4MTYwMGZmZjcsIDB4MCwgCi0weGMwMDRkYjksIDB4ODAyMSwgMHgyN2IxMDAxOCwgMHhhN2EwMDAxOCwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIAotMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxOCwgCi0weGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLCAKLTB4YzAwNGQ1OCwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk2MjIwMDAwLCAweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwgCi0weDI0MDQwMDE4LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDQwNCwgCi0weGE3YTAwMDFhLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIAotMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIAotMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwgCi0weDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgCi0weDI0MTAwMDEwLCAweDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgCi0weDMyMDIwMDE4LCAweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgCi0weDAsIDB4YzAwNGQ1OCwgMHgwLCAweDUwNDAwMDA1LCAKLTB4MTA4MDQyLCAweDk3YTIwMDFhLCAweDUwMTAyNSwgMHhhN2EyMDAxYSwgCi0weDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIAotMHg4MDIxLCAweGE3YTAwMDFhLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAKLTB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwgCi0weDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDE4LCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgCi0weDE2MDBmZmZhLCAweDMyMDIwMDE4LCAweGMwMDRkYjksIDB4MzQxMDgwMDAsIAotMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwgMHgwLCAKLTB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk3YTIwMDFhLCAweDUwMTAyNSwgCi0weGE3YTIwMDFhLCAweDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLCAKLTB4YzAwNGRiOSwgMHg4MDIxLCAweGE3YTAwMDFjLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgyMDIxLCAweDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDEwODA0MiwgMHgxNjAwZmZmYywgMHgwLCAweDI0MTAwMDEwLCAKLTB4MzIwMjAwMWUsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDFlLCAKLTB4YzAwNGRiOSwgMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAweDAsIAotMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAKLTB4OTdhMjAwMWMsIDB4NTAxMDI1LCAweGE3YTIwMDFjLCAweDEwODA0MiwgCi0weDE2MDBmZmY3LCAweDAsIDB4YzAwNGRiOSwgMHg4MDIxLCAKLTB4YTdhMDAwMWMsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgCi0weDJlMDIwMDIwLCAweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgCi0weDIwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAKLTB4YzAwNGQ3OCwgMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywgCi0weDAsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMWUsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MzIwMjAwMWUsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwgCi0weGMwMDRkYjksIDB4MCwgMHhjMDA0ZDU4LCAweDAsIAotMHg1MDQwMDAwNSwgMHgxMDgwNDIsIDB4OTdhMjAwMWMsIDB4NTAxMDI1LCAKLTB4YTdhMjAwMWMsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsIAotMHhjMDA0ZGI5LCAweDgwMjEsIDB4MjQwMjAwMDIsIDB4YTdhMjAwMWUsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAKLTB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4YzAwNGQ3OCwgCi0weDIwMjEsIDB4MTA4MDQyLCAweDE2MDBmZmZjLCAweDAsIAotMHgyNDEwMDAxMCwgMHgzMjAyMDAxZSwgMHgxMDQwMDAwMiwgMHgyMDIxLCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIAotMHgzMjAyMDAxZSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgyMDIxLCAweDM0MTA4MDAwLCAweDk3YTIwMDFlLCAweDUwMTAyNCwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIAotMHg4MDIxLCAweGE3YTAwMDIwLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAKLTB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYywgMHgwLCAweDI0MTAwMDEwLCAweDMyMDIwMDFlLCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDFlLCAweGMwMDRkYjksIAotMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwgCi0weDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk3YTIwMDIwLCAKLTB4NTAxMDI1LCAweGE3YTIwMDIwLCAweDEwODA0MiwgMHgxNjAwZmZmNywgCi0weDAsIDB4YzAwNGRiOSwgMHg4MDIxLCAweGE3YTAwMDIwLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgCi0weDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAKLTB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweGMwMDRkNzgsIAotMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywgMHgwLCAKLTB4MjQxMDAwMTAsIDB4MzIwMjAwMWUsIDB4MTA0MDAwMDIsIDB4MjAyMSwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAKLTB4MzIwMjAwMWUsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAKLTB4MCwgMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIAotMHgxMDgwNDIsIDB4OTdhMjAwMjAsIDB4NTAxMDI1LCAweGE3YTIwMDIwLCAKLTB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsIDB4YzAwNGRiOSwgCi0weDgwMjEsIDB4YTdhMDAwMjIsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgCi0weDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAweDAsIAotMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgCi0weGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAKLTB4MjQxMDAwMTAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweDEwODA0MiwgCi0weDE2MDBmZmZjLCAweDAsIDB4MjQxMDAwMTAsIDB4YzAwNGQ3OCwgCi0weDIwMjEsIDB4MTA4MDQyLCAweDE2MDBmZmZjLCAweDAsIAotMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgCi0weDM0MTA4MDAwLCAweDk3YTIwMDIyLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwgCi0weDI0MDQwMDE4LCAweDI0MDUwMDAyLCAweGMwMDRkZGIsIDB4MjQwNjAwMDQsIAotMHgzYzEwMDAwMSwgMHg4ZTEwNmUyNCwgMHgyNDAyMDAwMSwgMHgxNjAyMDExZCwgCi0weDAsIDB4M2MwMjAwMDEsIDB4OTQ0MjZmMjYsIDB4M2MwMTAwMDEsIAotMHhhYzIwNmUyNCwgMHgyNDQyOWZiYywgMHgyYzQyMDAwNCwgMHgxMDQwMDAwYywgCi0weDI0MDQwMDA5LCAweDI0MDUwMDAxLCAweGMwMDRkZGIsIDB4MjQwNjA0MDAsIAotMHgyNDA0MDAxOCwgMHgyNDA1MDAwMSwgMHhjMDA0ZGRiLCAweDI0MDYwMDIwLCAKLTB4MjQwNDAwMTgsIDB4MjQwNTAwMDEsIDB4YzAwNGRkYiwgMHgyNDA2MjAwMCwgCi0weDNjMDI0MDAwLCAweDI0MjEwMjQsIDB4MTA0MDAxMjMsIDB4M2MwMjIwMDAsIAotMHgyNDIxMDI0LCAweDEwNDAwMDA0LCAweDAsIDB4M2MwMTAwMDEsIAotMHgxMDAwMDAwMywgMHhhYzMwNmYxYywgMHgzYzAxMDAwMSwgMHhhYzIwNmYxYywgCi0weDNjMDMwMDAxLCAweDhjNjM2ZjM0LCAweDI0MDIwMDA1LCAweDE0NjIwMGY5LCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYxYywgMHgxMDQwMDA2NywgCi0weDNjMDIwMDA0LCAweDI0MjEwMjQsIDB4MTA0MDAwMTEsIDB4YTdhMDAwMTgsIAotMHgzYzAyMDAwOCwgMHgyNDIxMDI0LCAweDEwNDAwMDAyLCAweDI0MDIwMjAwLCAKLTB4YTdhMjAwMTgsIDB4M2MwMjAwMTAsIDB4MjQyMTAyNCwgMHgxMDQwMDAwNCwgCi0weDAsIDB4OTdhMjAwMTgsIDB4MzQ0MjAxMDAsIDB4YTdhMjAwMTgsIAotMHg5N2E2MDAxOCwgMHgyNDA0MDAwOSwgMHgxMDAwMDAwNCwgMHgyODIxLCAKLTB4MjQwNDAwMDksIDB4MjgyMSwgMHgzMDIxLCAweGMwMDRkZGIsIAotMHgwLCAweDI0MDIwMDAxLCAweGE3YTIwMDFhLCAweDNjMDIwMDA4LCAKLTB4MjQyMTAyNCwgMHgxMDQwMDAwYywgMHgzYzAyMDAwMiwgMHgyNDIxMDI0LCAKLTB4MTA0MDAwMDIsIDB4MjQwMjAxMDEsIDB4YTdhMjAwMWEsIDB4M2MwMjAwMDEsIAotMHgyNDIxMDI0LCAweDEwNDAwMDA1LCAweDNjMDIwMDEwLCAweDk3YTIwMDFhLCAKLTB4MzQ0MjAwNDAsIDB4YTdhMjAwMWEsIDB4M2MwMjAwMTAsIDB4MjQyMTAyNCwgCi0weDEwNDAwMDBlLCAweDNjMDIwMDAyLCAweDI0MjEwMjQsIDB4MTA0MDAwMDUsIAotMHgzYzAyMDAwMSwgMHg5N2EyMDAxYSwgMHgzNDQyMDA4MCwgMHhhN2EyMDAxYSwgCi0weDNjMDIwMDAxLCAweDI0MjEwMjQsIDB4MTA0MDAwMDUsIDB4M2MwMzAwYTAsIAotMHg5N2EyMDAxYSwgMHgzNDQyMDAyMCwgMHhhN2EyMDAxYSwgMHgzYzAzMDBhMCwgCi0weDI0MzEwMjQsIDB4NTQ0MzAwMDQsIDB4M2MwMjAwMjAsIDB4OTdhMjAwMWEsIAotMHgxMDAwMDAwYywgMHgzNDQyMDQwMCwgMHgyNDIxMDI0LCAweDUwNDAwMDA0LCAKLTB4M2MwMjAwODAsIDB4OTdhMjAwMWEsIDB4MTAwMDAwMDYsIDB4MzQ0MjA4MDAsIAotMHgyNDIxMDI0LCAweDEwNDAwMDA0LCAweDAsIDB4OTdhMjAwMWEsIAotMHgzNDQyMGMwMCwgMHhhN2EyMDAxYSwgMHg5N2E2MDAxYSwgMHgyNDA0MDAwNCwgCi0weGMwMDRkZGIsIDB4MjgyMSwgMHgzYzAyMDAwNCwgMHgyNDIxMDI0LCAKLTB4MTA0MDAwMDQsIDB4YTdhMDAwMWMsIDB4MzI0MjUwMDAsIDB4MTQ0MDAwMDQsIAotMHgwLCAweDMyNDI0MDAwLCAweDEwNDAwMDA1LCAweDIwMjEsIAotMHhjMDA0Y2Y5LCAweDI0MDIwMjEsIDB4MTAwMDAwOTYsIDB4MCwgCi0weDk3YTYwMDFjLCAweDI4MjEsIDB4MzRjNjEyMDAsIDB4YzAwNGRkYiwgCi0weGE3YTYwMDFjLCAweDEwMDAwMDhmLCAweDAsIDB4MjQyMTAyNCwgCi0weDEwNDAwMDA0LCAweGE3YTAwMDE4LCAweDMyNDI1MDAwLCAweDE0NDAwMDA0LCAKLTB4MCwgMHgzMjQyNDAwMCwgMHgxMDQwMDAwNSwgMHgzYzAyMDAxMCwgCi0weGMwMDRjZjksIDB4MjQwMjAyMSwgMHgxMDAwMDAxOSwgMHhhN2EwMDAxYSwgCi0weDI0MjEwMjQsIDB4MTA0MDAwMDQsIDB4MCwgMHg5N2EyMDAxOCwgCi0weDEwMDAwMDA0LCAweGE3YTIwMDE4LCAweDk3YTIwMDE4LCAweDM0NDIwMTAwLCAKLTB4YTdhMjAwMTgsIDB4M2MwMjAwMDEsIDB4MjQyMTAyNCwgMHgxMDQwMDAwNCwgCi0weDAsIDB4OTdhMjAwMTgsIDB4MTAwMDAwMDQsIDB4YTdhMjAwMTgsIAotMHg5N2EyMDAxOCwgMHgzNDQyMjAwMCwgMHhhN2EyMDAxOCwgMHg5N2E2MDAxOCwgCi0weDIwMjEsIDB4YzAwNGRkYiwgMHgyODIxLCAweGE3YTAwMDFhLCAKLTB4ODAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAKLTB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAKLTB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MjQxMDAwMTAsIAotMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAKLTB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIAotMHgyNDEwMDAxMCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmMsIDB4MCwgMHhjMDA0ZGI5LCAweDM0MTA4MDAwLCAKLTB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwgCi0weDUwNDAwMDA1LCAweDEwODA0MiwgMHg5N2EyMDAxYSwgMHg1MDEwMjUsIAotMHhhN2EyMDAxYSwgMHgxMDgwNDIsIDB4MTYwMGZmZjcsIDB4MCwgCi0weGMwMDRkYjksIDB4ODAyMSwgMHhhN2EwMDAxYSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIAotMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHhjMDA0ZDc4LCAKLTB4MjAyMSwgMHgxMDgwNDIsIDB4MTYwMGZmZmMsIDB4MCwgCi0weGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLCAKLTB4YzAwNGQ1OCwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwgCi0weDk3YTIwMDFhLCAweDUwMTAyNSwgMHhhN2EyMDAxYSwgMHgxMDgwNDIsIAotMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4MCwgCi0weDNjMDQwMDAxLCAweDI0ODQ2YmNjLCAweDk3YTYwMDE4LCAweDk3YTcwMDFhLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZkOTgsIDB4M2MwMzAwMDEsIDB4OGM2MzZmMWMsIAotMHgzYzA1MDAwZCwgMHgzNGE1MDIwNSwgMHhhZmEyMDAxMCwgMHhjMDAyYjNiLCAKLTB4YWZhMzAwMTQsIDB4OGY4MzAwNTQsIDB4MjQwMjAwMDQsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmRkNCwgMHgzYzAxMDAwMSwgMHgxMDAwMDAxNywgMHhhYzIzNmYzOCwgCi0weDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI2ZjM4LCAweDI0NjNmZjljLCAKLTB4NDMxMDIzLCAweDJjNDIwMDY0LCAweDE0NDAwMDBmLCAweDAsIAotMHg4ZjgyMDIyMCwgMHgyNDAzMDAwNSwgMHgzYzAxMDAwMSwgMHhhYzIzNmRkNCwgCi0weDNjMDNmNzAwLCAweDQzMTAyNSwgMHgxMDAwMDAwNywgMHhhZjgyMDIyMCwgCi0weDI0MDIwMDA2LCAweDNjMDEwMDAxLCAweGFjMjI2ZGQ0LCAweDI0MDIwMDExLCAKLTB4M2MwMTAwMDEsIDB4YWMyMjZkZDAsIDB4OGZiZjAwMzQsIDB4OGZiMjAwMzAsIAotMHg4ZmIxMDAyYywgMHg4ZmIwMDAyOCwgMHgzZTAwMDA4LCAweDI3YmQwMDM4LCAKLTB4MjdiZGZmZDgsIDB4YWZiMDAwMTgsIDB4ODA4MDIxLCAweGFmYjEwMDFjLCAKLTB4ODgyMSwgMHgzMjAyNDAwMCwgMHgxMDQwMDAxMywgMHhhZmJmMDAyMCwgCi0weDNjMDIwMDEwLCAweDIwMjEwMjQsIDB4MmM0MjAwMDEsIDB4MjEwMjMsIAotMHgzMDQzNDEwMCwgMHgzYzAyMDAwMSwgMHgyMDIxMDI0LCAweDE0NDAwMDA2LCAKLTB4MzQ3MTQwMDAsIDB4M2MwMjAwMDIsIDB4MjAyMTAyNCwgMHgxNDQwMDAwMiwgCi0weDM0NzE2MDAwLCAweDM0NzE0MDQwLCAweDIwMjEsIDB4MjgyMSwgCi0weDEwMDAwMDM2LCAweDIyMDMwMjEsIDB4MzIwMjEwMDAsIDB4MTA0MDAwMzUsIAotMHgyMDIxLCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDA0MCwgCi0weDI0MDQwMDE4LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MGMwMCwgCi0weDI0MDQwMDE3LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDQwMCwgCi0weDI0MDQwMDE2LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDAwNiwgCi0weDI0MDQwMDE3LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MjUwMCwgCi0weDI0MDQwMDE2LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDAwNiwgCi0weDI0MDQwMDE3LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2NDYwMCwgCi0weDI0MDQwMDE2LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDAwNiwgCi0weDI0MDQwMDE3LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2NjcwMCwgCi0weDI0MDQwMDE2LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDAwNiwgCi0weDI0MDQwMDFmLCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDAxMCwgCi0weDI0MDQwMDA5LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MTUwMCwgCi0weDI0MDQwMDA5LCAweDI4MjEsIDB4MjQwNjFkMDAsIDB4YzAwNGRkYiwgCi0weDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDZiZjAsIDB4M2MwNTAwMGUsIAotMHgzNGE1MDEwMCwgMHgyMDAzMDIxLCAweDIyMDM4MjEsIDB4YWZhMDAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmYmYwMDIwLCAweDhmYjEwMDFjLCAKLTB4OGZiMDAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHg4Zjg1MDA0NCwgCi0weDhmODIwMDQ0LCAweDNjMDMwMDAxLCAweDQzMTAyNSwgMHgzYzAzMDAwOCwgCi0weGFmODIwMDQ0LCAweDhmODQwMDU0LCAweDhmODIwMDU0LCAweGEzMjgyNCwgCi0weDEwMDAwMDAyLCAweDI0ODQwMDAxLCAweDhmODIwMDU0LCAweDgyMTAyMywgCi0weDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsIAotMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4YWY4MjAwNDQsIAotMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDAwMSwgCi0weDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgCi0weDAsIDB4M2UwMDAwOCwgMHhhMDEwMjEsIDB4OGY4MzAwNDQsIAotMHgzYzAyZmZmMCwgMHgzNDQyZmZmZiwgMHg0MjQ4MCwgMHg2MjE4MjQsIAotMHgzYzAyMDAwMiwgMHg4MjIwMjUsIDB4NjQxODI1LCAweGFmODMwMDQ0LCAKLTB4OGY4MjAwNDQsIDB4M2MwM2ZmZmUsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAKLTB4YWY4MjAwNDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIAotMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIAotMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMDQ0LCAweDNjMDMwMDAxLCAKLTB4NDMxMDI1LCAweGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAKLTB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAKLTB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwgMHgzZTAwMDA4LCAKLTB4MCwgMHg4ZjgyMDA0NCwgMHgyNDAzZmY3ZiwgMHg0MzEwMjQsIAotMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgCi0weDI0NjMwMDAxLCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwgCi0weDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwODAsIAotMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgCi0weDI0NjMwMDAxLCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwgCi0weDE0NDBmZmZjLCAweDAsIDB4M2UwMDAwOCwgMHgwLCAKLTB4OGY4MjAwNDQsIDB4M2MwM2ZmZjAsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAKLTB4YWY4MjAwNDQsIDB4OGY4MjAwNDQsIDB4M2MwMzAwMDEsIDB4NDMxMDI1LCAKLTB4YWY4MjAwNDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIAotMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIAotMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMDQ0LCAweDNjMDNmZmZlLCAKLTB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweGFmODIwMDQ0LCAweDhmODMwMDU0LCAKLTB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIAotMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsIDB4MCwgCi0weDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZjOCwgMHhhZmIzMDAyNCwgCi0weDgwOTgyMSwgMHhhZmJlMDAyYywgMHhhMGYwMjEsIDB4YWZiMjAwMjAsIAotMHhjMDkwMjEsIDB4MzNjMmZmZmYsIDB4YWZiZjAwMzAsIDB4YWZiNTAwMjgsIAotMHhhZmIxMDAxYywgMHhhZmIwMDAxOCwgMHgxNDQwMDAzNCwgMHhhN2IyMDAxMCwgCi0weDMyNzFmZmZmLCAweDI3YjIwMDEwLCAweDgwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAKLTB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsIAotMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAKLTB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4MjMwMTAyNCwgCi0weDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgCi0weDEwODA0MiwgMHgxNjAwZmZmYSwgMHgyMzAxMDI0LCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MzQxMDgwMDAsIAotMHg5NjQyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIDB4MjAyMSwgCi0weDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDEyMDAwMDc1LCAKLTB4MCwgMHgxMDAwZmZmNiwgMHgwLCAweDMyNzVmZmZmLCAKLTB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIAotMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MjAyMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgCi0weDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIAotMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgyYjAxMDI0LCAKLTB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAKLTB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDJiMDEwMjQsIDB4YzAwNGRiOSwgCi0weDM0MTA4MDAwLCAweGMwMDRkYjksIDB4MCwgMHhjMDA0ZDU4LCAKLTB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsIDB4OTYyMjAwMDAsIAotMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAKLTB4MCwgMHhjMDA0ZGI5LCAweDAsIDB4MzNjNWZmZmYsIAotMHgyNDAyMDAwMSwgMHg1NGEyMDAwNCwgMHgyNDAyMDAwMiwgMHg5N2EyMDAxMCwgCi0weDEwMDAwMDA2LCAweDUyMTAyNSwgMHgxNGEyMDAwNiwgMHgzMjcxZmZmZiwgCi0weDk3YTIwMDEwLCAweDEyMTgyNywgMHg0MzEwMjQsIDB4YTdhMjAwMTAsIAotMHgzMjcxZmZmZiwgMHgyN2IyMDAxMCwgMHg4MDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgCi0weDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgCi0weDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAKLTB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgCi0weDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDIzMDEwMjQsIAotMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIAotMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MjMwMTAyNCwgMHhjMDA0ZDc4LCAKLTB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweDM0MTA4MDAwLCAKLTB4OTY0MjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsIAotMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmOCwgCi0weDAsIDB4YzAwNGRiOSwgMHgwLCAweDhmYmYwMDMwLCAKLTB4OGZiZTAwMmMsIDB4OGZiNTAwMjgsIDB4OGZiMzAwMjQsIDB4OGZiMjAwMjAsIAotMHg4ZmIxMDAxYywgMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDM4LCAKLTB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZTgsIAotMHhhZmJmMDAxMCwgMHg4ZWUzMDRiOCwgMHgyNDAyMDAwOCwgMHgxNDYyMDFlMCwgCi0weDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMWMsIDB4MTQ0MDAwMDUsIAotMHgwLCAweGMwMDNkYWYsIDB4OGY4NDAyMjQsIDB4MTAwMDAxZDgsIAotMHgwLCAweDhmODIwMjIwLCAweDNjMDMwMDA4LCAweDQzMTAyNCwgCi0weDEwNDAwMDI2LCAweDI0MDIwMDAxLCAweDhmODQwMjI0LCAweDhmODIwMjIwLCAKLTB4M2MwMzA0MDAsIDB4NDMxMDI0LCAweDEwNDAwMDA2LCAweDAsIAotMHgzYzAxMDAwMiwgMHhhYzIwOGZhMCwgMHgzYzAxMDAwMiwgMHgxMDAwMDAwYiwgCi0weGFjMjA4ZmMwLCAweDNjMDMwMDAyLCAweDI0NjM4ZmEwLCAweDhjNjIwMDAwLCAKLTB4MjQ0MjAwMDEsIDB4YWM2MjAwMDAsIDB4MmM0MjAwMDIsIDB4MTQ0MDAwMDMsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMiwgMHhhYzIyOGZjMCwgMHgzYzAyMDAwMiwgCi0weDhjNDI4ZmMwLCAweDEwNDAwMDA2LCAweDMwODIwMDQwLCAweDEwNDAwMDA0LCAKLTB4MjQwMjAwMDEsIDB4M2MwMTAwMDIsIDB4MTAwMDAwMDMsIDB4YWMyMjhmYzQsIAotMHgzYzAxMDAwMiwgMHhhYzIwOGZjNCwgMHgzYzAxMDAwMiwgMHhhYzI0OGY5YywgCi0weDNjMDEwMDAyLCAweDEwMDAwMDBiLCAweGFjMjA4ZmQwLCAweDNjMDEwMDAyLCAKLTB4YWMyMjhmZDAsIDB4M2MwMTAwMDIsIDB4YWMyMDhmYzAsIDB4M2MwMTAwMDIsIAotMHhhYzIwOGZhMCwgMHgzYzAxMDAwMiwgMHhhYzIwOGZjNCwgMHgzYzAxMDAwMiwgCi0weGFjMjA4ZjljLCAweDNjMDMwMDAyLCAweDhjNjM4ZjkwLCAweDNjMDIwMDAyLCAKLTB4OGM0MjhmOTQsIDB4NTA2MjAwMDQsIDB4MjQ2M2ZmZmYsIDB4M2MwMTAwMDIsIAotMHhhYzIzOGY5NCwgMHgyNDYzZmZmZiwgMHgyYzYyMDAwZSwgMHgxMDQwMDE5NCwgCi0weDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNmMwMCwgCi0weDQwMDAwOCwgMHgwLCAweDI0MDIwMDAyLCAweDNjMDEwMDAyLCAKLTB4YWMyMDhmYzAsIDB4M2MwMTAwMDIsIDB4YWMyMDhmYTAsIDB4M2MwMTAwMDIsIAotMHhhYzIwOGY5YywgMHgzYzAxMDAwMiwgMHhhYzIwOGZjNCwgMHgzYzAxMDAwMiwgCi0weGFjMjA4ZmI4LCAweDNjMDEwMDAyLCAweGFjMjA4ZmIwLCAweGFmODAwMjI0LCAKLTB4M2MwMTAwMDIsIDB4YWMyMjhmOTAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmZDAsIAotMHgxNDQwMDA0ZiwgMHgzYzAyZmRmZiwgMHgzNDQyZmZmZiwgMHhjMDAzZGFmLCAKLTB4MjgyYTAyNCwgMHhhZjgwMDIwNCwgMHg4ZjgyMDIwMCwgMHgyNDAzZmZmZCwgCi0weDQzMTAyNCwgMHhhZjgyMDIwMCwgMHgzYzAxMDAwMiwgMHhhYzIwOGZlMCwgCi0weDhmODMwMDU0LCAweDNjMDIwMDAyLCAweDhjNDI4ZmI4LCAweDI0MDQwMDAxLCAKLTB4M2MwMTAwMDIsIDB4YWMyNDhmY2MsIDB4MjQ0MjAwMDEsIDB4M2MwMTAwMDIsIAotMHhhYzIyOGZiOCwgMHgyYzQyMDAwNCwgMHgzYzAxMDAwMiwgMHhhYzIzOGZiNCwgCi0weDE0NDAwMDA2LCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAweGFjMjQ2ZDljLCAKLTB4M2MwMTAwMDIsIDB4MTAwMDAxNWUsIDB4YWMyMDhmYjgsIDB4M2MwMTAwMDIsIAotMHgxMDAwMDE1YiwgMHhhYzIyOGY5MCwgMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMiwgCi0weDhjNDI4ZmI0LCAweDI0NjNkOGYwLCAweDQzMTAyMywgMHgyYzQyMjcxMCwgCi0weDE0NDAwMDAzLCAweDI0MDIwMDA0LCAweDNjMDEwMDAyLCAweGFjMjI4ZjkwLCAKLTB4M2MwMjAwMDIsIDB4OGM0MjhmZDAsIDB4MTQ0MDAwMjEsIDB4M2MwMmZkZmYsIAotMHgzNDQyZmZmZiwgMHgxMDAwMDE0YSwgMHgyODJhMDI0LCAweDNjMDQwMDAxLCAKLTB4OGM4NDZmMjAsIDB4M2MwMTAwMDIsIDB4YzAwNTA4NCwgMHhhYzIwOGZhOCwgCi0weDNjMDIwMDAyLCAweDhjNDI4ZmRjLCAweGFmODIwMjA0LCAweDNjMDIwMDAyLCAKLTB4OGM0MjhmZDAsIDB4MTQ0MDAwMTIsIDB4M2MwM2ZkZmYsIDB4OGY4MjAyMDQsIAotMHgzNDYzZmZmZiwgMHgzMDQyMDAzMCwgMHgxNDQwMDEyZiwgMHgyODNhMDI0LCAKLTB4M2MwMzAwMDIsIDB4OGM2MzhmZGMsIDB4MjQwMjAwMDUsIDB4M2MwMTAwMDIsIAotMHhhYzIyOGY5MCwgMHgzYzAxMDAwMiwgMHgxMDAwMDEzMSwgMHhhYzIzOGZlMCwgCi0weDNjMDIwMDAyLCAweDhjNDI4ZmQwLCAweDEwNDAwMDEwLCAweDNjMDJmZGZmLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZlM2MsIDB4MjQ0MjAwMDEsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmUzYywgMHgyYzQyMDAwMiwgMHgxNDQwMDEyNSwgMHgyNDAyMDAwMSwgCi0weDNjMDEwMDAxLCAweGFjMjI2ZTQ0LCAweDNjMDEwMDAxLCAweGFjMjA2ZTNjLCAKLTB4M2MwMTAwMDEsIDB4MTAwMDAxMWUsIDB4YWMyMjZkOWMsIDB4M2MwMzAwMDIsIAotMHg4YzYzOGZjMCwgMHgzNDQyZmZmZiwgMHgxMDYwMDExOSwgMHgyODJhMDI0LCAKLTB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsIDB4MTA0MDAxMTUsIDB4MCwgCi0weDNjMDEwMDAyLCAweGFjMjI4ZmM4LCAweDI0MDIwMDAzLCAweDNjMDEwMDAyLCAKLTB4YWMyMjhmYTAsIDB4MTAwMDAwYjgsIDB4MjQwMjAwMDYsIDB4M2MwMTAwMDIsIAotMHhhYzIwOGZhOCwgMHg4ZjgyMDIwNCwgMHgzNDQyMDA0MCwgMHhhZjgyMDIwNCwgCi0weDNjMDIwMDAyLCAweDhjNDI4ZmUwLCAweDI0MDMwMDA3LCAweDNjMDEwMDAyLCAKLTB4YWMyMzhmOTAsIDB4MzQ0MjAwNDAsIDB4M2MwMTAwMDIsIDB4YWMyMjhmZTAsIAotMHgzYzAyMDAwMiwgMHg4YzQyOGZjMCwgMHgxMDQwMDAwNSwgMHgwLCAKLTB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsIDB4MTA0MDAwZjAsIDB4MjQwMjAwMDIsIAotMHgzYzA1MDAwMiwgMHgyNGE1OGZhMCwgMHg4Y2EyMDAwMCwgMHgyYzQyNGUyMSwgCi0weDEwNDAwMGVhLCAweDI0MDIwMDAyLCAweDNjMDIwMDAyLCAweDhjNDI4ZmM0LCAKLTB4MTA0MDAwZWYsIDB4MjQwNGZmYmYsIDB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsIAotMHgzYzAzMDAwMiwgMHg4YzYzOGZjOCwgMHg0NDEwMjQsIDB4NjQxODI0LCAKLTB4MTA0MzAwMDQsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDIsIDB4MTAwMDAwZTQsIAotMHhhYzIyOGY5MCwgMHgyNDAyMDAwMywgMHhhY2EyMDAwMCwgMHgyNDAyMDAwOCwgCi0weDNjMDEwMDAyLCAweGFjMjI4ZjkwLCAweDNjMDIwMDAyLCAweDhjNDI4ZmNjLCAKLTB4MTA0MDAwMGMsIDB4MjQwMjAwMDEsIDB4M2MwNDAwMDIsIDB4YzAwNTA5MSwgCi0weDhjODQ4ZjljLCAweDNjMDIwMDAyLCAweDhjNDI4ZmU4LCAweDE0NDAwMDA1LCAKLTB4MjQwMjAwMDEsIDB4M2MwMjAwMDIsIDB4OGM0MjhmZTQsIDB4MTA0MDAwMDYsIAotMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmQ5YywgMHgzYzAxMDAwMiwgCi0weDEwMDAwMGNiLCAweGFjMjA4ZmI4LCAweDNjMDIwMDAyLCAweDhjNDI4ZmIwLCAKLTB4M2MwMzAwMDIsIDB4OGM2MzhmOWMsIDB4MmM0MjAwMDEsIDB4MjEwYzAsIAotMHgzMDYzMDAwOCwgMHgzYzAxMDAwMiwgMHhhYzIyOGZiMCwgMHgzYzAxMDAwMiwgCi0weGFjMjM4ZmFjLCAweDhmODMwMDU0LCAweDI0MDIwMDA5LCAweDNjMDEwMDAyLCAKLTB4YWMyMjhmOTAsIDB4M2MwMTAwMDIsIDB4MTAwMDAwYjksIDB4YWMyMzhmYjQsIAotMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMiwgMHg4YzQyOGZiNCwgMHgyNDYzZDhmMCwgCi0weDQzMTAyMywgMHgyYzQyMjcxMCwgMHgxNDQwMDA5ZiwgMHgwLCAKLTB4M2MwMjAwMDIsIDB4OGM0MjhmYzAsIDB4MTA0MDAwMDUsIDB4MCwgCi0weDNjMDIwMDAyLCAweDhjNDI4ZjljLCAweDEwNDAwMGEwLCAweDI0MDIwMDAyLCAKLTB4M2MwMzAwMDIsIDB4MjQ2MzhmYTAsIDB4OGM2MjAwMDAsIDB4MmM0MjRlMjEsIAotMHgxMDQwMDA5YSwgMHgyNDAyMDAwMiwgMHgzYzAyMDAwMiwgMHg4YzQyOGZjYywgCi0weDEwNDAwMDBlLCAweDAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsIAotMHgzYzAxMDAwMiwgMHhhYzIwOGZjYywgMHgzMDQyMDA4MCwgMHgxMDQwMDAyZiwgCi0weDI0MDIwMDBjLCAweDhmODIwMjA0LCAweDMwNDIwMDgwLCAweDE0NDAwMDBjLCAKLTB4MjQwMjAwMDMsIDB4MTAwMDAwMjksIDB4MjQwMjAwMGMsIDB4M2MwMjAwMDIsIAotMHg4YzQyOGY5YywgMHgzMDQyMDA4MCwgMHgxNDQwMDAwNSwgMHgyNDAyMDAwMywgCi0weDhmODIwMjA0LCAweDMwNDIwMDgwLCAweDEwNDAwMDFmLCAweDI0MDIwMDAzLCAKLTB4YWM2MjAwMDAsIDB4MjQwMjAwMGEsIDB4M2MwMTAwMDIsIDB4YWMyMjhmOTAsIAotMHgzYzA0MDAwMiwgMHgyNDg0OGZkOCwgMHg4YzgyMDAwMCwgMHgzYzAzMDAwMiwgCi0weDhjNjM4ZmIwLCAweDQzMTAyNSwgMHhhZjgyMDIwNCwgMHg4YzgzMDAwMCwgCi0weDNjMDQwMDAyLCAweDhjODQ4ZmIwLCAweDI0MDIwMDBiLCAweDNjMDEwMDAyLCAKLTB4YWMyMjhmOTAsIDB4NjQxODI1LCAweDNjMDEwMDAyLCAweGFjMjM4ZmUwLCAKLTB4M2MwNTAwMDIsIDB4MjRhNThmYTAsIDB4OGNhMjAwMDAsIDB4MmM0MjRlMjEsIAotMHgxMDQwMDA2NiwgMHgyNDAyMDAwMiwgMHgzYzAyMDAwMiwgMHg4YzQyOGZkMCwgCi0weDEwNDAwMDA1LCAweDAsIDB4MjQwMjAwMGMsIDB4M2MwMTAwMDIsIAotMHgxMDAwMDA2NywgMHhhYzIyOGY5MCwgMHgzYzAyMDAwMiwgMHg4YzQyOGZjMCwgCi0weDEwNDAwMDYzLCAweDAsIDB4M2MwNDAwMDIsIDB4OGM4NDhmOWMsIAotMHgxMDgwMDA1NSwgMHgzMDgyMDAwOCwgMHgzYzAzMDAwMiwgMHg4YzYzOGZhYywgCi0weDEwNjIwMDViLCAweDI0MDIwMDAzLCAweDNjMDEwMDAyLCAweGFjMjQ4ZmM4LCAKLTB4YWNhMjAwMDAsIDB4MjQwMjAwMDYsIDB4M2MwMTAwMDIsIDB4MTAwMDAwNTQsIAotMHhhYzIyOGY5MCwgMHg4ZjgyMDIwMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIwMCwgCi0weDhmODMwMDU0LCAweDI0MDIwMDBkLCAweDNjMDEwMDAyLCAweGFjMjI4ZjkwLCAKLTB4M2MwMTAwMDIsIDB4YWMyMzhmYjQsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDIsIAotMHg4YzQyOGZiNCwgMHgyNDYzZDhmMCwgMHg0MzEwMjMsIDB4MmM0MjI3MTAsIAotMHgxNDQwMDAzMSwgMHgwLCAweDNjMDIwMDAyLCAweDhjNDI4ZmQwLCAKLTB4MTA0MDAwMjAsIDB4MjQwMjAwMGUsIDB4M2MwMzAwMDIsIDB4OGM2MzhmZTQsIAotMHgzYzAxMDAwMiwgMHgxNDYwMDAxNSwgMHhhYzIyOGY5MCwgMHhjMDAzZTZkLCAKLTB4MCwgMHgzYzA1MDAwMSwgMHg4Y2E1NmQ5OCwgMHhjMDA1MjliLCAKLTB4MjAyMSwgMHgzYzAzMDAwMSwgMHg4YzYzNmQ5OCwgMHgyNDAyMDAwNCwgCi0weDE0NjIwMDA1LCAweDI0MDNmZmZiLCAweDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAKLTB4MTAwMDAwMDMsIDB4MjQwM2ZmZjcsIDB4M2MwMjAwMDEsIDB4OGM0MjZkOTQsIAotMHg0MzEwMjQsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTQsIDB4OGY4MzAyMjQsIAotMHgzYzAyMDIwMCwgMHgzYzAxMDAwMiwgMHhhYzIzOGZlYywgMHgxMDAwMDAyMCwgCi0weDI4MmEwMjUsIDB4M2MwMjAwMDIsIDB4OGM0MjhmYzAsIDB4MTA0MDAwMDUsIAotMHgwLCAweDNjMDIwMDAyLCAweDhjNDI4ZjljLCAweDEwNDAwMDBmLCAKLTB4MjQwMjAwMDIsIDB4M2MwMjAwMDIsIDB4OGM0MjhmYTAsIDB4MmM0MjRlMjEsIAotMHgxMDQwMDAwYSwgMHgyNDAyMDAwMiwgMHgzYzAyMDAwMiwgMHg4YzQyOGZjMCwgCi0weDEwNDAwMDBmLCAweDAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsIAotMHgxNDQwMDAwYiwgMHgwLCAweDI0MDIwMDAyLCAweDNjMDEwMDAyLCAKLTB4MTAwMDAwMDcsIDB4YWMyMjhmOTAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmYzAsIAotMHgxMDQwMDAwMywgMHgwLCAweGMwMDNkYWYsIDB4MCwgCi0weDhmODIwMjIwLCAweDNjMDNmNzAwLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgCi0weDhmYmYwMDEwLCAweDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwMzAwMDIsIAotMHgyNDYzOGZlOCwgMHg4YzYyMDAwMCwgMHgxMDQwMDAwNSwgMHgzNDQyMjAwMCwgCi0weDNjMDEwMDAyLCAweGFjMjI4ZmRjLCAweDEwMDAwMDAzLCAweGFjNjAwMDAwLCAKLTB4M2MwMTAwMDIsIDB4YWMyNDhmZGMsIDB4M2UwMDAwOCwgMHgwLCAKLTB4MjdiZGZmZTAsIDB4MzA4MjAwMzAsIDB4YWZiZjAwMTgsIDB4M2MwMTAwMDIsIAotMHhhYzIyOGZlNCwgMHgxNDQwMDA2NywgMHgzYzAyZmZmZiwgMHgzNDQyMWYwZSwgCi0weDgyMTAyNCwgMHgxNDQwMDA2MSwgMHgyNDAyMDAzMCwgMHgzMDgyMjAwMCwgCi0weDEwNDAwMDVkLCAweDMwODM4MDAwLCAweDMxYTAyLCAweDMwODIwMDAxLCAKLTB4MjEyMDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZmMjAsIDB4NjIxODI1LCAKLTB4MzMxYzIsIDB4M2MwMzAwMDEsIDB4MjQ2MzZlNDgsIDB4MzA4MjgwMDAsIAotMHgyMTIwMiwgMHgzMDg0MDAwMSwgMHg0MjIwMCwgMHg0NDEwMjUsIAotMHgyMzljMiwgMHg2MTA4MCwgMHg0MzEwMjEsIDB4NDcxMDIxLCAKLTB4OTA0MzAwMDAsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMjUsIDB4MCwgCi0weDEwNjAwMDA3LCAweDI0MDIwMDAyLCAweDEwNjIwMDEzLCAweDI0MDIwMDAzLCAKLTB4MTA2MjAwMmMsIDB4M2MwNTAwMGYsIDB4MTAwMDAwMzcsIDB4MCwgCi0weDhmODIwMjAwLCAweDI0MDNmZWZmLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwgCi0weDhmODIwMjIwLCAweDNjMDNmZmZlLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgCi0weGFmODIwMjIwLCAweDNjMDEwMDAyLCAweGFjMjA5MDA0LCAweDNjMDEwMDAyLCAKLTB4MTAwMDAwMzQsIDB4YWMyMDkwMGMsIDB4OGY4MjAyMDAsIDB4MzQ0MjAxMDAsIAotMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgCi0weDQzMTAyNCwgMHhhZjgyMDIyMCwgMHgyNDAyMDEwMCwgMHgzYzAxMDAwMiwgCi0weGFjMjI5MDA0LCAweDNjMDEwMDAyLCAweDEwMDAwMDI2LCAweGFjMjA5MDBjLCAKLTB4OGY4MjAyMDAsIDB4MjQwM2ZlZmYsIDB4NDMxMDI0LCAweGFmODIwMjAwLCAKLTB4OGY4MjAyMjAsIDB4M2MwMzAwMDEsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAKLTB4M2MwMTAwMDIsIDB4YWMyMDkwMDQsIDB4M2MwMTAwMDIsIDB4MTAwMDAwMTksIAotMHhhYzIzOTAwYywgMHg4ZjgyMDIwMCwgMHgzNDQyMDEwMCwgMHhhZjgyMDIwMCwgCi0weDhmODIwMjIwLCAweDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgCi0weDI0MDIwMTAwLCAweDNjMDEwMDAyLCAweGFjMjI5MDA0LCAweDNjMDEwMDAyLCAKLTB4MTAwMDAwMGMsIDB4YWMyMzkwMGMsIDB4MzRhNWZmZmYsIDB4M2MwNDAwMDEsIAotMHgyNDg0NmMzOCwgMHhhZmEzMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAKLTB4MTAwMDAwMDQsIDB4MCwgMHgyNDAyMDAzMCwgMHgzYzAxMDAwMiwgCi0weGFjMjI4ZmU4LCAweDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIAotMHgwLCAweDAsIDB4MCwgMHgyN2JkZmZjOCwgCi0weGFmYjIwMDI4LCAweDgwOTAyMSwgMHhhZmIzMDAyYywgMHhhMDk4MjEsIAotMHhhZmIwMDAyMCwgMHhjMDgwMjEsIDB4M2MwNDAwMDEsIDB4MjQ4NDZjNTAsIAotMHgzYzA1MDAwOSwgMHgzYzAyMDAwMSwgMHg4YzQyNmQ5OCwgMHgzNGE1OTAwMSwgCi0weDI0MDMwMjEsIDB4MjYwMzgyMSwgMHhhZmJmMDAzMCwgMHhhZmIxMDAyNCwgCi0weGE3YTAwMDFhLCAweGFmYjAwMDE0LCAweGMwMDJiM2IsIDB4YWZhMjAwMTAsIAotMHgyNDAyMDAwMiwgMHgxMjYyMDA4MywgMHgyZTYyMDAwMywgMHgxMDQwMDAwNSwgCi0weDI0MDIwMDAxLCAweDEyNjIwMDBhLCAweDAsIDB4MTAwMDAxNzMsIAotMHgwLCAweDI0MDIwMDA0LCAweDEyNjIwMGY4LCAweDI0MDIwMDA4LCAKLTB4MTI2MjAwZjcsIDB4M2MwMmZmZWMsIDB4MTAwMDAxNmMsIDB4MCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAweDMwNDIwMDAyLCAweDE0NDAwMDA0LCAKLTB4MTI4OTQwLCAweDNjMDJmZmZiLCAweDM0NDJmZmZmLCAweDIwMjgwMjQsIAotMHgzYzAxMDAwMiwgMHgzMTA4MjEsIDB4YWMzMDhmZmMsIDB4M2MwMjQwMDAsIAotMHgyMDIxMDI0LCAweDEwNDAwMDRlLCAweDEwMjNjMiwgMHgzMDg0MDAzMCwgCi0weDEwMTM4MiwgMHgzMDQyMDAxYywgMHgzYzAzMDAwMSwgMHgyNDYzNmRkOCwgCi0weDQzMTAyMSwgMHg4MjM4MjEsIDB4M2MwMjAwMjAsIDB4MjAyMTAyNCwgCi0weDEwNDAwMDA2LCAweDI0MDIwMTAwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgCi0weGFjMjI5MDAwLCAweDEwMDAwMDA1LCAweDNjMDIwMDgwLCAweDNjMDEwMDAyLCAKLTB4MzEwODIxLCAweGFjMjA5MDAwLCAweDNjMDIwMDgwLCAweDIwMjEwMjQsIAotMHgxMDQwMDAwNiwgMHgxMjE5NDAsIDB4M2MwMjAwMDEsIDB4M2MwMTAwMDIsIAotMHgyMzA4MjEsIDB4MTAwMDAwMDUsIDB4YWMyMjkwMDgsIDB4MTIxMTQwLCAKLTB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDA4LCAweDk0ZTQwMDAwLCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZmNDAsIDB4MjQwMjAwMDUsIDB4MTA2MjAwMTAsIAotMHhhN2E0MDAxOCwgMHgzMjAyNDAwMCwgMHgxMDQwMDAwMiwgMHgzNDgyNDAwMCwgCi0weGE3YTIwMDE4LCAweDI0MDQwMDAxLCAweDk0ZTIwMDAyLCAweDI0MDUwMDA0LCAKLTB4MjRlNjAwMDIsIDB4MzQ0MjAwMDEsIDB4YzAwNDViZSwgMHhhNGUyMDAwMiwgCi0weDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDViZSwgMHgyN2E2MDAxOCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZDk4LCAweDI0MTEwMDAxLCAweDNjMDEwMDAxLCAKLTB4YWMzMTZkYTQsIDB4MTQ1MzAwMDQsIDB4MzIwMjgwMDAsIDB4YzAwM2RhZiwgCi0weDAsIDB4MzIwMjgwMDAsIDB4MTA0MDAxMWMsIDB4MCwgCi0weGMwMDNkYWYsIDB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgCi0weDI0MDIwMDA1LCAweDEwNjIwMTE1LCAweDI0MDIwMDAyLCAweDNjMDEwMDAxLCAKLTB4YWMzMTZkOWMsIDB4M2MwMTAwMDEsIDB4MTAwMDAxMTAsIDB4YWMyMjZkOTgsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwNCwgMHgyN2IwMDAxYSwgMHhjMDA0NWJlLCAKLTB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyODIxLCAweGMwMDQ1YmUsIAotMHgyMDAzMDIxLCAweDNjMDIwMDAyLCAweDUxMTAyMSwgMHg4YzQyOGZmNCwgCi0weDNjMDQwMDAxLCAweDhjODQ2ZDk4LCAweDNjMDNiZmZmLCAweDM0NjNmZmZmLCAKLTB4M2MwMTAwMDEsIDB4YWMzMzZkYTQsIDB4NDMxMDI0LCAweDNjMDEwMDAyLCAKLTB4MzEwODIxLCAweDEwOTMwMGY3LCAweGFjMjI4ZmY0LCAweDEwMDAwMGY3LCAKLTB4MCwgMHgzYzAyMjAwMCwgMHgyMDIxMDI0LCAweDEwNDAwMDA1LCAKLTB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZmMWMsIDB4MTAwMDAwMDQsIAotMHgxMjg5NDAsIDB4M2MwMTAwMDEsIDB4YWMyMDZmMWMsIDB4MTI4OTQwLCAKLTB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMzA4ZmY4LCAweDNjMDI0MDAwLCAKLTB4MjAyMTAyNCwgMHgxNDQwMDAxNCwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjZmMWMsIDB4MTA0MDAwMDYsIDB4MjQwNDAwMDQsIDB4MjQwNTAwMDEsIAotMHhjMDA0ZGRiLCAweDI0MDYyMDAwLCAweDI0MDIwMDAxLCAweGFlZTIwNGI4LCAKLTB4M2MwMjAwMDIsIDB4NTExMDIxLCAweDhjNDI4ZmYwLCAweDNjMDNiZmZmLCAKLTB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweDNjMDEwMDAyLCAweDMxMDgyMSwgCi0weDEwMDAwMGQwLCAweGFjMjI4ZmYwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjFjLCAKLTB4MTA0MDAwMjgsIDB4M2MwMzAwYTAsIDB4MjAzMTAyNCwgMHg1NDQzMDAwZCwgCi0weDNjMDIwMDIwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjIwLCAweDI0MDMwMTAwLCAKLTB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMjM5MDA0LCAweDNjMDMwMDAxLCAKLTB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMjM5MDBjLCAweDEwMDAwMDE1LCAKLTB4MzQ0MjA0MDAsIDB4MjAyMTAyNCwgMHgxMDQwMDAwOCwgMHgyNDAzMDEwMCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZjIwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgCi0weGFjMjM5MDA0LCAweDEwMDAwMDBiLCAweDM0NDIwODAwLCAweDNjMDIwMDgwLCAKLTB4MjAyMTAyNCwgMHgxMDQwMDAyZSwgMHgzYzAzMDAwMSwgMHgzYzAyMDAwMSwgCi0weDhjNDI2ZjIwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgMHhhYzIzOTAwYywgCi0weDM0NDIwYzAwLCAweDNjMDEwMDAxLCAweGFjMjI2ZjIwLCAweDEwMDAwMDI1LCAKLTB4MjQwNDAwMDEsIDB4M2MwMjAwMjAsIDB4MjAyMTAyNCwgMHgxMDQwMDAwNiwgCi0weDI0MDIwMTAwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgMHhhYzIyOTAwNCwgCi0weDEwMDAwMDA1LCAweDNjMDIwMDgwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgCi0weGFjMjA5MDA0LCAweDNjMDIwMDgwLCAweDIwMjEwMjQsIDB4MTA0MDAwMDcsIAotMHgxMjE5NDAsIDB4M2MwMjAwMDEsIDB4M2MwMTAwMDIsIDB4MjMwODIxLCAKLTB4YWMyMjkwMGMsIDB4MTAwMDAwMDYsIDB4MjQwNDAwMDEsIDB4MTIxMTQwLCAKLTB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDBjLCAweDI0MDQwMDAxLCAKLTB4MjgyMSwgMHgyN2IwMDAxZSwgMHhjMDA0NTdjLCAweDIwMDMwMjEsIAotMHgyNDA0MDAwMSwgMHgyODIxLCAweGMwMDQ1N2MsIDB4MjAwMzAyMSwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweDI3YjAwMDFjLCAweGMwMDQ1N2MsIAotMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweGMwMDQ1N2MsIAotMHgyMDAzMDIxLCAweDEwMDAwMDc3LCAweDAsIDB4M2MwMmZmZWMsIAotMHgzNDQyZmZmZiwgMHgyMDI4MDI0LCAweDNjMDIwMDA4LCAweDIwMjgwMjUsIAotMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMzA4ZmY4LCAKLTB4M2MwMjIwMDAsIDB4MjAyMTAyNCwgMHgxMDQwMDAwOSwgMHgwLCAKLTB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4MTQ0MDAwMDUsIDB4MjQwMjAwMDEsIAotMHgzYzAxMDAwMSwgMHhhYzIyNmYxYywgMHgxMDAwMDAwNCwgMHgzYzAyNDAwMCwgCi0weDNjMDEwMDAxLCAweGFjMjA2ZjFjLCAweDNjMDI0MDAwLCAweDIwMjEwMjQsIAotMHgxNDQwMDAxZCwgMHgyNDAyMGUwMSwgMHgzYzAzMDAwMSwgMHg4YzYzNmYxYywgCi0weGFmODIwMjM4LCAweDNjMDEwMDAxLCAweGFjMjA2ZGIwLCAweDEwNjAwMDA1LCAKLTB4MjQwMjIwMjAsIDB4M2MwMTAwMDEsIDB4YWMyMjZmMjAsIDB4MjQwMjAwMDEsIAotMHhhZWUyMDRiOCwgMHgzYzA0YmZmZiwgMHgxMjE5NDAsIDB4M2MwMjAwMDIsIAotMHg0MzEwMjEsIDB4OGM0MjhmZjAsIDB4M2MwNTAwMDEsIDB4OGNhNTZkOTgsIAotMHgzNDg0ZmZmZiwgMHg0NDEwMjQsIDB4M2MwMTAwMDIsIDB4MjMwODIxLCAKLTB4YWMyMjhmZjAsIDB4MjQwMjAwMDEsIDB4MTBhMjAwNDQsIDB4MCwgCi0weDEwMDAwMDQwLCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMWMsIAotMHgxMDQwMDAxYywgMHgyNDAyMjAwMCwgMHgzYzAxMDAwMSwgMHhhYzIyNmYyMCwgCi0weDNjMDMwMGEwLCAweDIwMzEwMjQsIDB4MTQ0MzAwMDUsIDB4MTIxMTQwLCAKLTB4MzQwMmEwMDAsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMmQsIDB4YWMyMjZmMjAsIAotMHgzYzAzMDAwMiwgMHg2MjE4MjEsIDB4OGM2MzhmZjgsIDB4M2MwMjAwMjAsIAotMHg2MjEwMjQsIDB4MTA0MDAwMDQsIDB4MjQwMjIwMDEsIDB4M2MwMTAwMDEsIAotMHgxMDAwMDAyMywgMHhhYzIyNmYyMCwgMHgzYzAyMDA4MCwgMHg2MjEwMjQsIAotMHgxMDQwMDAxZiwgMHgzNDAyYTAwMSwgMHgzYzAxMDAwMSwgMHgxMDAwMDAxYywgCi0weGFjMjI2ZjIwLCAweDNjMDIwMDIwLCAweDIwMjEwMjQsIDB4MTA0MDAwMDcsIAotMHgxMjE5NDAsIDB4MjQwMjAxMDAsIDB4M2MwMTAwMDIsIDB4MjMwODIxLCAKLTB4YWMyMjkwMDQsIDB4MTAwMDAwMDYsIDB4M2MwMjAwODAsIDB4MTIxMTQwLCAKLTB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDA0LCAweDNjMDIwMDgwLCAKLTB4MjAyMTAyNCwgMHgxMDQwMDAwNiwgMHgxMjE5NDAsIDB4M2MwMjAwMDEsIAotMHgzYzAxMDAwMiwgMHgyMzA4MjEsIDB4MTAwMDAwMDUsIDB4YWMyMjkwMGMsIAotMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDBjLCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMDMsIAotMHgwLCAweGMwMDNkYWYsIDB4MCwgMHg4ZmJmMDAzMCwgCi0weDhmYjMwMDJjLCAweDhmYjIwMDI4LCAweDhmYjEwMDI0LCAweDhmYjAwMDIwLCAKLTB4M2UwMDAwOCwgMHgyN2JkMDAzOCwgMHgyN2JkZmZiMCwgMHhhZmIzMDAzYywgCi0weDk4MjEsIDB4YWZiNTAwNDAsIDB4YTgyMSwgMHhhZmIxMDAzNCwgCi0weDg4MjEsIDB4MjQwMjAwMDIsIDB4YWZiZjAwNDgsIDB4YWZiZTAwNDQsIAotMHhhZmIyMDAzOCwgMHhhZmIwMDAzMCwgMHhhZmE0MDAyYywgMHhhN2EwMDAxYSwgCi0weGE3YTAwMDE4LCAweGE3YTAwMDIwLCAweGE3YTAwMDFlLCAweGE3YTAwMDIyLCAKLTB4MTBhMjAxMzAsIDB4YTdhMDAwMWMsIDB4MmNhMjAwMDMsIDB4MTA0MDAwMDUsIAotMHgyNDAyMDAwMSwgMHgxMGEyMDAwYSwgMHgzYzAyNDAwMCwgMHgxMDAwMDI1ZCwgCi0weDIyMDEwMjEsIDB4MjQwMjAwMDQsIDB4MTBhMjAyMGEsIDB4MjQwMjAwMDgsIAotMHgxMGEyMDIwOCwgMHgyMjAxMDIxLCAweDEwMDAwMjU2LCAweDAsIAotMHg4ZmE4MDAyYywgMHg4ODE0MCwgMHgzYzAzMDAwMiwgMHg3MDE4MjEsIAotMHg4YzYzOGZmYywgMHg2MjEwMjQsIDB4MTQ0MDAwMDksIDB4MjQwNDAwMDEsIAotMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwgMHg2Mjg4MjQsIDB4M2MwMTAwMDIsIAotMHgzMDA4MjEsIDB4YWMzMThmZjQsIDB4MTAwMDAyNDYsIDB4MjIwMTAyMSwgCi0weDI0MDUwMDAxLCAweGMwMDQ1N2MsIDB4MjdhNjAwMTgsIDB4MjQwNDAwMDEsIAotMHgyNDA1MDAwMSwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LCAweDk3YTIwMDE4LCAKLTB4MzA0MjAwMDQsIDB4MTA0MDAwZDksIDB4M2MxMTQwMDAsIDB4M2MwMjAwMDEsIAotMHg4YzQyNmY0MCwgMHgyNDQzZmZmZiwgMHgyYzYyMDAwNiwgMHgxMDQwMDBkOSwgCi0weDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyNmM2OCwgCi0weDQwMDAwOCwgMHgwLCAweDI0MDQwMDAxLCAweDI0MDUwMDExLCAKLTB4MjdiMDAwMWEsIDB4YzAwNDU3YywgMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAKLTB4MjQwNTAwMTEsIDB4YzAwNDU3YywgMHgyMDAzMDIxLCAweDk3YTMwMDFhLCAKLTB4MzA2MjQwMDAsIDB4MTA0MDAwMDIsIDB4M2MxNTAwMTAsIDB4M2MxNTAwMDgsIAotMHgzMDYyODAwMCwgMHgxMDQwMDBhYSwgMHgzYzEzMDAwMSwgMHgxMDAwMDBhOCwgCi0weDNjMTMwMDAyLCAweDI0MDQwMDAxLCAweDI0MDUwMDE0LCAweDI3YjAwMDFhLCAKLTB4YzAwNDU3YywgMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDE0LCAKLTB4YzAwNDU3YywgMHgyMDAzMDIxLCAweDk3YTMwMDFhLCAweDMwNjIxMDAwLCAKLTB4MTA0MDAwMDIsIDB4M2MxNTAwMTAsIDB4M2MxNTAwMDgsIDB4MzA2MjA4MDAsIAotMHgxMDQwMDA5NywgMHgzYzEzMDAwMSwgMHgxMDAwMDA5NSwgMHgzYzEzMDAwMiwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDE5LCAweDI3YjAwMDFjLCAweGMwMDQ1N2MsIAotMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDE5LCAweGMwMDQ1N2MsIAotMHgyMDAzMDIxLCAweDk3YTIwMDFjLCAweDMwNDMwNzAwLCAweDI0MDIwNDAwLCAKLTB4MTA2MjAwMjcsIDB4Mjg2MjA0MDEsIDB4MTA0MDAwMGUsIDB4MjQwMjAyMDAsIAotMHgxMDYyMDAxZiwgMHgyODYyMDIwMSwgMHgxMDQwMDAwNSwgMHgyNDAyMDEwMCwgCi0weDUwNjIwMDFlLCAweDNjMTMwMDAxLCAweDEwMDAwMDFlLCAweDI0MDQwMDAxLCAKLTB4MjQwMjAzMDAsIDB4NTA2MjAwMTksIDB4M2MxMzAwMDIsIDB4MTAwMDAwMTksIAotMHgyNDA0MDAwMSwgMHgyNDAyMDYwMCwgMHgxMDYyMDAwZCwgMHgyODYyMDYwMSwgCi0weDEwNDAwMDA1LCAweDI0MDIwNTAwLCAweDUwNjIwMDBiLCAweDNjMTMwMDAyLCAKLTB4MTAwMDAwMTAsIDB4MjQwNDAwMDEsIDB4MjQwMjA3MDAsIDB4MTQ2MjAwMGQsIAotMHgyNDA0MDAwMSwgMHgzYzEzMDAwNCwgMHgxMDAwMDAwYSwgMHgzYzE1MDAwOCwgCi0weDEwMDAwMDA2LCAweDNjMTMwMDA0LCAweDEwMDAwMDA1LCAweDNjMTUwMDA4LCAKLTB4M2MxMzAwMDEsIDB4MTAwMDAwMDIsIDB4M2MxNTAwMDgsIDB4M2MxNTAwMTAsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAxOCwgMHgyN2IwMDAxZSwgMHhjMDA0NTdjLCAKLTB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAxOCwgMHhjMDA0NTdjLCAKLTB4MjAwMzAyMSwgMHg4ZmE4MDAyYywgMHg5N2E3MDAxZSwgMHg4MTE0MCwgCi0weDNjMDYwMDAyLCAweGMyMzAyMSwgMHg4Y2M2OGZmNCwgMHg5N2EyMDAyMiwgCi0weDNjMTAwMDAxLCAweDI2MTA2YzVjLCAweDIwMDIwMjEsIDB4YWZhMjAwMTAsIAotMHg5N2EyMDAxYywgMHgzYzA1MDAwYywgMHgzNGE1MDMwMywgMHhjMDAyYjNiLCAKLTB4YWZhMjAwMTQsIDB4M2MwMjAwMDQsIDB4MTY2MjAwMTAsIDB4M2MwMjAwMDEsIAotMHg4Zjg0MDA1NCwgMHgyNDAzMDAwMSwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMSwgCi0weGFjMjM2ZDljLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk4LCAweDNjMDEwMDAxLCAKLTB4YWMyMzZkYTQsIDB4M2MwMTAwMDEsIDB4YWMyMzZlMjQsIDB4M2MwMTAwMDEsIAotMHhhYzI0NmYzMCwgMHgxMDAwMDA0ZiwgMHgyYjM4ODI1LCAweDE2NjIwMDM5LCAKLTB4M2MwMjgwMDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZlMjAsIDB4MTQ0MDAwMWUsIAotMHgyNDA0MDAxOCwgMHgyMDIxLCAweDI4MjEsIDB4YzAwNGRkYiwgCi0weDM0MDY4MDAwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDJiMzg4MjUsIAotMHgxMDAwMDAwMiwgMHgyNDYzMDAzMiwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIAotMHgyYzQyMDAzMywgMHgxNDQwZmZmYywgMHgwLCAweDhmODMwMDU0LCAKLTB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlMjAsIDB4M2MwMTAwMDEsIAotMHhhYzIyNmQ5YywgMHgzYzAxMDAwMSwgMHhhYzIyNmQ5OCwgMHgzYzAxMDAwMSwgCi0weGFjMjI2ZGE0LCAweDNjMDEwMDAxLCAweGFjMjI2ZTI0LCAweDNjMDEwMDAxLCAKLTB4MTAwMDAwMmMsIDB4YWMyMzZmMzAsIDB4MjgyMSwgMHhjMDA0ZGRiLCAKLTB4MjQwNjA0MDQsIDB4MjAyMSwgMHgyNDA1MDAxZSwgMHgyN2E2MDAxOCwgCi0weDI0MDIwMDAyLCAweGMwMDQ1YmUsIDB4YTdhMjAwMTgsIDB4MjAyMSwgCi0weDI4MjEsIDB4MjdhNjAwMTgsIDB4YzAwNDViZSwgMHhhN2EwMDAxOCwgCi0weDI0MDQwMDE4LCAweDI0MDUwMDAyLCAweGMwMDRkZGIsIDB4MjQwNjAwMDQsIAotMHgzYzAyODAwMCwgMHgyMjIxMDI1LCAweDJiMzE4MjUsIDB4MTAwMDAwMTUsIAotMHg0Mzg4MjUsIDB4MjIyMTAyNSwgMHgyNzUxODI1LCAweDQzODgyNSwgCi0weDIwMDIwMjEsIDB4OTdhNjAwMWMsIDB4M2MwNzAwMDEsIDB4OGNlNzZkOTgsIAotMHgzYzA1MDAwYywgMHgzNGE1MDMyNiwgMHhhZmIzMDAxMCwgMHhjMDAyYjNiLCAKLTB4YWZiMTAwMTQsIDB4MTAwMDAwMDcsIDB4MCwgMHgzYzExMDAwMiwgCi0weDIzMDg4MjEsIDB4OGUzMThmZmMsIDB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsIAotMHgyMjI4ODI0LCAweDNjMDIwMDAxLCAweDhjNDI2ZGE4LCAweDEwNDAwMDFlLCAKLTB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYxYywgMHgxMDQwMDAwMiwgCi0weDNjMDIyMDAwLCAweDIyMjg4MjUsIDB4OGZhODAwMmMsIDB4ODExNDAsIAotMHgzYzAxMDAwMiwgMHgyMjA4MjEsIDB4OGMyMjkwMDAsIDB4MTA0MDAwMDMsIAotMHgzYzAyMDAyMCwgMHgxMDAwMDAwNSwgMHgyMjI4ODI1LCAweDNjMDJmZmRmLCAKLTB4MzQ0MmZmZmYsIDB4MjIyODgyNCwgMHg4ZmE4MDAyYywgMHg4MTE0MCwgCi0weDNjMDEwMDAyLCAweDIyMDgyMSwgMHg4YzIyOTAwOCwgMHgxMDQwMDAwMywgCi0weDNjMDIwMDgwLCAweDEwMDAwMDA0LCAweDIyMjg4MjUsIDB4M2MwMmZmN2YsIAotMHgzNDQyZmZmZiwgMHgyMjI4ODI0LCAweDhmYTgwMDJjLCAweDgxMTQwLCAKLTB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMzE4ZmY0LCAweDEwMDAwMTM1LCAKLTB4MjIwMTAyMSwgMHg4ZmE4MDAyYywgMHg4ZjE0MCwgMHgzYzAzMDAwMiwgCi0weDdlMTgyMSwgMHg4YzYzOGZmOCwgMHgzYzAyNDAwMCwgMHg2MjEwMjQsIAotMHgxNDQwMDAwOSwgMHgyNDA0MDAwMSwgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwgCi0weDYyODgyNCwgMHgzYzAxMDAwMiwgMHgzZTA4MjEsIDB4YWMzMThmZjAsIAotMHgxMDAwMDEyNCwgMHgyMjAxMDIxLCAweDI4MjEsIDB4YzAwNDU3YywgCi0weDI3YTYwMDE4LCAweDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDU3YywgCi0weDI3YTYwMDE4LCAweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweDI3YjIwMDIwLCAKLTB4YzAwNDU3YywgMHgyNDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAKLTB4YzAwNDU3YywgMHgyNDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDA0LCAKLTB4MjdiMTAwMWUsIDB4YzAwNDU3YywgMHgyMjAzMDIxLCAweDI0MDQwMDAxLCAKLTB4MjQwNTAwMDQsIDB4YzAwNDU3YywgMHgyMjAzMDIxLCAweDI0MDQwMDAxLCAKLTB4MjQwNTAwMDUsIDB4MjdiMDAwMjIsIDB4YzAwNDU3YywgMHgyMDAzMDIxLCAKLTB4MjQwNDAwMDEsIDB4MjQwNTAwMDUsIDB4YzAwNDU3YywgMHgyMDAzMDIxLCAKLTB4MjQwNDAwMDEsIDB4MjQwNTAwMTAsIDB4YzAwNDU3YywgMHgyN2E2MDAxOCwgCi0weDI0MDQwMDAxLCAweDI0MDUwMDEwLCAweGMwMDQ1N2MsIDB4MjdhNjAwMTgsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwYSwgMHhjMDA0NTdjLCAweDI0MDMwMjEsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwYSwgMHhjMDA0NTdjLCAweDI0MDMwMjEsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAxOCwgMHhjMDA0NTdjLCAweDIyMDMwMjEsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAxOCwgMHhjMDA0NTdjLCAweDIyMDMwMjEsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LCAKLTB4MjQwNDAwMDEsIDB4MjQwNTAwMDEsIDB4YzAwNDU3YywgMHgyN2E2MDAxOCwgCi0weDk3YTIwMDE4LCAweDMwNDIwMDA0LCAweDEwNDAwMDY2LCAweDNjMTE0MDAwLCAKLTB4M2MwMzAwMDEsIDB4OGM2MzZmMzQsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwNjcsIAotMHgyNDA0MDAwMSwgMHgyNDA1MDAxOSwgMHgyN2IwMDAxYywgMHhjMDA0NTdjLCAKLTB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAxOSwgMHhjMDA0NTdjLCAKLTB4MjAwMzAyMSwgMHg5N2EyMDAxYywgMHgzMDQzMDcwMCwgMHgyNDAyMDQwMCwgCi0weDEwNjIwMDI3LCAweDI4NjIwNDAxLCAweDEwNDAwMDBlLCAweDI0MDIwMjAwLCAKLTB4MTA2MjAwMWYsIDB4Mjg2MjAyMDEsIDB4MTA0MDAwMDUsIDB4MjQwMjAxMDAsIAotMHg1MDYyMDAxZSwgMHgzYzEzMDAwMSwgMHgxMDAwMDAxZSwgMHgzYzAyMDAwNCwgCi0weDI0MDIwMzAwLCAweDUwNjIwMDE5LCAweDNjMTMwMDAyLCAweDEwMDAwMDE5LCAKLTB4M2MwMjAwMDQsIDB4MjQwMjA2MDAsIDB4MTA2MjAwMGQsIDB4Mjg2MjA2MDEsIAotMHgxMDQwMDAwNSwgMHgyNDAyMDUwMCwgMHg1MDYyMDAwYiwgMHgzYzEzMDAwMiwgCi0weDEwMDAwMDEwLCAweDNjMDIwMDA0LCAweDI0MDIwNzAwLCAweDE0NjIwMDBkLCAKLTB4M2MwMjAwMDQsIDB4M2MxMzAwMDQsIDB4MTAwMDAwMGEsIDB4M2MxNTAwMDgsIAotMHgxMDAwMDAwNiwgMHgzYzEzMDAwNCwgMHgxMDAwMDAwNSwgMHgzYzE1MDAwOCwgCi0weDNjMTMwMDAxLCAweDEwMDAwMDAyLCAweDNjMTUwMDA4LCAweDNjMTUwMDEwLCAKLTB4M2MwMjAwMDQsIDB4MTI2MjAwMTcsIDB4M2MwMjgwMDAsIDB4OGY4MjAwNTQsIAotMHgyNDEwMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzMwNmQ5YywgMHgzYzAxMDAwMSwgCi0weGFjMzA2ZDk4LCAweDNjMDEwMDAxLCAweGFjMzA2ZGE0LCAweDNjMDEwMDAxLCAKLTB4YWMzMDZlMjQsIDB4M2MwMTAwMDEsIDB4YWMyMjZmMzAsIDB4M2MwMjAwMDEsIAotMHgxNjYyMDAyMiwgMHgyNzU4ODI1LCAweDIwMjEsIDB4MjgyMSwgCi0weGMwMDRkZGIsIDB4MzQwNjgwMDAsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMWIsIAotMHhhYzMwNmUyMCwgMHgyMjIxMDI1LCAweDJiMzE4MjUsIDB4NDM4ODI1LCAKLTB4OTdhNjAwMWMsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMWMsIDB4M2MwNzAwMDEsIAotMHg4Y2U3NmQ5OCwgMHgzYzA0MDAwMSwgMHgyNDg0NmM1YywgMHhhZmEyMDAxMCwgCi0weDk3YTIwMDFlLCAweDNjMDUwMDBjLCAweDM0YTUwMzIzLCAweDNjMDEwMDAxLCAKLTB4YWMyMDZlMjAsIDB4YzAwMmIzYiwgMHhhZmEyMDAxNCwgMHgxMDAwMDAwNywgCi0weDAsIDB4M2MxMTAwMDIsIDB4MjNlODgyMSwgMHg4ZTMxOGZmMCwgCi0weDNjMDI3ZmZmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsIDB4M2MwMjAwMDEsIAotMHg4YzQyNmRhOCwgMHgxMDQwMDA2OSwgMHgwLCAweDNjMDIwMDAxLCAKLTB4OGM0MjZmMWMsIDB4MTA0MDAwMDIsIDB4M2MwMjIwMDAsIDB4MjIyODgyNSwgCi0weDhmYTgwMDJjLCAweDgxMTQwLCAweDNjMDEwMDAyLCAweDIyMDgyMSwgCi0weDhjMjI5MDA0LCAweDEwNDAwMDAzLCAweDNjMDIwMDIwLCAweDEwMDAwMDA1LCAKLTB4MjIyODgyNSwgMHgzYzAyZmZkZiwgMHgzNDQyZmZmZiwgMHgyMjI4ODI0LCAKLTB4OGZhODAwMmMsIDB4ODExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAKLTB4OGMyMjkwMGMsIDB4MTA0MDAwMDMsIDB4M2MwMjAwODAsIDB4MTAwMDAwNGYsIAotMHgyMjI4ODI1LCAweDNjMDJmZjdmLCAweDM0NDJmZmZmLCAweDEwMDAwMDRiLCAKLTB4MjIyODgyNCwgMHg4ZmE4MDAyYywgMHg4Mjk0MCwgMHgzYzAzMDAwMiwgCi0weDY1MTgyMSwgMHg4YzYzOGZmOCwgMHgzYzAyNDAwMCwgMHg2MjEwMjQsIAotMHgxNDQwMDAwOCwgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwgMHg2Mjg4MjQsIAotMHgzYzAxMDAwMiwgMHgyNTA4MjEsIDB4YWMzMThmZjAsIDB4MTAwMDAwNDEsIAotMHgyMjAxMDIxLCAweDNjMDIwMDAxLCAweDhjNDI2ZGE4LCAweDEwNDAwMDM0LCAKLTB4M2MxMWMwMGMsIDB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4M2MwNGMwMGMsIAotMHgzNDg0MjAwMCwgMHgzYzAzMDAwMSwgMHg4YzYzNmYxYywgMHgyMTAyYiwgCi0weDIxMDIzLCAweDQ0MTAyNCwgMHgxMDYwMDAwMywgMHg1MTg4MjUsIAotMHgzYzAyMjAwMCwgMHgyMjI4ODI1LCAweDNjMDIwMDAyLCAweDQ1MTAyMSwgCi0weDhjNDI5MDA0LCAweDEwNDAwMDAzLCAweDNjMDIwMDIwLCAweDEwMDAwMDA0LCAKLTB4MjIyODgyNSwgMHgzYzAyZmZkZiwgMHgzNDQyZmZmZiwgMHgyMjI4ODI0LCAKLTB4OGZhODAwMmMsIDB4ODExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAKLTB4OGMyMjkwMGMsIDB4MTA0MDAwMDMsIDB4M2MwMjAwODAsIDB4MTAwMDAwMDQsIAotMHgyMjI4ODI1LCAweDNjMDJmZjdmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmUzMCwgMHgxMDQwMDAwMiwgMHgzYzAyMDgwMCwgCi0weDIyMjg4MjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZlMzQsIDB4MTA0MDAwMDIsIAotMHgzYzAyMDQwMCwgMHgyMjI4ODI1LCAweDNjMDIwMDAxLCAweDhjNDI2ZTM4LCAKLTB4MTA0MDAwMDYsIDB4M2MwMjAxMDAsIDB4MTAwMDAwMDQsIDB4MjIyODgyNSwgCi0weDNjMDI3ZmZmLCAweDM0NDJmZmZmLCAweDYyODgyNCwgMHg4ZmE4MDAyYywgCi0weDgxMTQwLCAweDNjMDEwMDAyLCAweDIyMDgyMSwgMHhhYzMxOGZmMCwgCi0weDIyMDEwMjEsIDB4OGZiZjAwNDgsIDB4OGZiZTAwNDQsIDB4OGZiNTAwNDAsIAotMHg4ZmIzMDAzYywgMHg4ZmIyMDAzOCwgMHg4ZmIxMDAzNCwgMHg4ZmIwMDAzMCwgCi0weDNlMDAwMDgsIDB4MjdiZDAwNTAsIDB4MjdiZGZmZDAsIDB4YWZiMjAwMjgsIAotMHg4MDkwMjEsIDB4YWZiZjAwMmMsIDB4YWZiMTAwMjQsIDB4YWZiMDAwMjAsIAotMHg4Zjg0MDIwMCwgMHgzYzEwMDAwMSwgMHg4ZTEwNmQ5OCwgMHg4Zjg2MDIyMCwgCi0weDI0MDIwMDAyLCAweDEyMDIwMDVjLCAweDJlMDIwMDAzLCAweDEwNDAwMDA1LCAKLTB4MjQwMjAwMDEsIDB4MTIwMjAwMGEsIDB4MTIxOTQwLCAweDEwMDAwMTBjLCAKLTB4MCwgMHgyNDAyMDAwNCwgMHgxMjAyMDBiZiwgMHgyNDAyMDAwOCwgCi0weDEyMDIwMGJlLCAweDEyODk0MCwgMHgxMDAwMDEwNSwgMHgwLCAKLTB4M2MwNTAwMDIsIDB4YTMyODIxLCAweDhjYTU4ZmZjLCAweDNjMTAwMDAyLCAKLTB4MjAzODAyMSwgMHg4ZTEwOGZmNCwgMHgzYzAyNDAwMCwgMHhhMjEwMjQsIAotMHgxMDQwMDAzOCwgMHgzYzAyMDAwOCwgMHgyMDIxMDI0LCAweDEwNDAwMDIwLCAKLTB4MzQ4NDAwMDIsIDB4M2MwMjAwMDIsIDB4NDMxMDIxLCAweDhjNDI5MDAwLCAKLTB4MTA0MDAwMDUsIDB4MzQ4NDAwMjAsIDB4MzQ4NDAxMDAsIDB4M2MwMjAwMjAsIAotMHgxMDAwMDAwNiwgMHgyMDI4MDI1LCAweDI0MDJmZWZmLCAweDgyMjAyNCwgCi0weDNjMDJmZmRmLCAweDM0NDJmZmZmLCAweDIwMjgwMjQsIDB4MTIxMTQwLCAKLTB4M2MwMTAwMDIsIDB4MjIwODIxLCAweDhjMjI5MDA4LCAweDEwNDAwMDA1LCAKLTB4M2MwMjAwMDEsIDB4YzIzMDI1LCAweDNjMDIwMDgwLCAweDEwMDAwMDE2LCAKLTB4MjAyODAyNSwgMHgzYzAyZmZmZSwgMHgzNDQyZmZmZiwgMHhjMjMwMjQsIAotMHgzYzAyZmY3ZiwgMHgzNDQyZmZmZiwgMHgxMDAwMDAwZiwgMHgyMDI4MDI0LCAKLTB4MjQwMmZlZGYsIDB4ODIyMDI0LCAweDNjMDJmZmZlLCAweDM0NDJmZmZmLCAKLTB4YzIzMDI0LCAweDNjMDJmZjVmLCAweDM0NDJmZmZmLCAweDIwMjgwMjQsIAotMHgzYzAxMDAwMiwgMHgyMzA4MjEsIDB4YWMyMDkwMDAsIDB4M2MwMTAwMDIsIAotMHgyMzA4MjEsIDB4YWMyMDkwMDgsIDB4YWY4NDAyMDAsIDB4YWY4NjAyMjAsIAotMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwgMHgxMDAwMDAwYSwgCi0weDEyMTE0MCwgMHgzYzAyYmZmZiwgMHgzNDQyZmZmZiwgMHg4ZjgzMDIwMCwgCi0weDIwMjgwMjQsIDB4MjQwMmZmZmQsIDB4NjIxODI0LCAweGMwMDNkYWYsIAotMHhhZjgzMDIwMCwgMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAKLTB4MTAwMDAwYjcsIDB4YWMzMDhmZjQsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMWMsIAotMHgxMDQwMDA2OSwgMHgyNDA1MDAwNCwgMHgyNDA0MDAwMSwgMHhjMDA0NTdjLCAKLTB4MjdhNjAwMTgsIDB4MjQwNDAwMDEsIDB4MjQwNTAwMDUsIDB4YzAwNDU3YywgCi0weDI3YTYwMDFhLCAweDk3YTMwMDE4LCAweDk3YTIwMDFhLCAweDNjMDQwMDAxLCAKLTB4MjQ4NDZlNDgsIDB4MzA2MzBjMDAsIDB4MzFhODIsIDB4MzA0MjBjMDAsIAotMHgyMTI4MiwgMHhhN2EyMDAxYSwgMHgyMTA4MCwgMHg0NDEwMjEsIAotMHg0MzEwMjEsIDB4YTdhMzAwMTgsIDB4OTA0ODAwMDAsIDB4MjQwMjAwMDEsIAotMHgzMTAzZmZmZiwgMHgxMDYyMDAyOSwgMHgyODYyMDAwMiwgMHgxMDQwMDAwNSwgCi0weDAsIDB4MTA2MDAwMDksIDB4MCwgMHgxMDAwMDAzZCwgCi0weDAsIDB4MTA3MDAwMTMsIDB4MjQwMjAwMDMsIDB4MTA2MjAwMmMsIAotMHgwLCAweDEwMDAwMDM3LCAweDAsIDB4OGY4MjAyMDAsIAotMHgyNDAzZmVmZiwgMHg0MzEwMjQsIDB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsIAotMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIAotMHgzYzAxMDAwMiwgMHhhYzIwOTAwNCwgMHgzYzAxMDAwMiwgMHgxMDAwMDAzMiwgCi0weGFjMjA5MDBjLCAweDhmODIwMjAwLCAweDM0NDIwMTAwLCAweGFmODIwMjAwLCAKLTB4OGY4MjAyMjAsIDB4M2MwM2ZmZmUsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAKLTB4YWY4MjAyMjAsIDB4MjQwMjAxMDAsIDB4M2MwMTAwMDIsIDB4YWMyMjkwMDQsIAotMHgzYzAxMDAwMiwgMHgxMDAwMDAyNCwgMHhhYzIwOTAwYywgMHg4ZjgyMDIwMCwgCi0weDI0MDNmZWZmLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgCi0weDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgzYzAxMDAwMiwgCi0weGFjMjA5MDA0LCAweDNjMDEwMDAyLCAweDEwMDAwMDE3LCAweGFjMjM5MDBjLCAKLTB4OGY4MjAyMDAsIDB4MzQ0MjAxMDAsIDB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsIAotMHgzYzAzMDAwMSwgMHg0MzEwMjUsIDB4YWY4MjAyMjAsIDB4MjQwMjAxMDAsIAotMHgzYzAxMDAwMiwgMHhhYzIyOTAwNCwgMHgzYzAxMDAwMiwgMHgxMDAwMDAwYSwgCi0weGFjMjM5MDBjLCAweDNjMDQwMDAxLCAweDI0ODQ2YzgwLCAweDk3YTYwMDFhLCAKLTB4OTdhNzAwMTgsIDB4M2MwNTAwMDEsIDB4MzRhNWZmZmYsIDB4YWZhODAwMTAsIAotMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmODIwMjAwLCAweDM0NDIwMDAyLCAKLTB4MTAwMDAwNGIsIDB4YWY4MjAyMDAsIDB4MTI4OTQwLCAweDNjMDUwMDAyLCAKLTB4YjEyODIxLCAweDhjYTU4ZmY4LCAweDNjMTAwMDAyLCAweDIxMTgwMjEsIAotMHg4ZTEwOGZmMCwgMHgzYzAyNDAwMCwgMHhhMjEwMjQsIDB4MTQ0MDAwMTAsIAotMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjFjLCAweDE0NDAwMDA1LCAKLTB4M2MwMmJmZmYsIDB4OGY4MjAyMDAsIDB4MzQ0MjAwMDIsIDB4YWY4MjAyMDAsIAotMHgzYzAyYmZmZiwgMHgzNDQyZmZmZiwgMHhjMDAzZGFmLCAweDIwMjgwMjQsIAotMHgzYzAxMDAwMiwgMHgzMTA4MjEsIDB4MTAwMDAwMzEsIDB4YWMzMDhmZjAsIAotMHgzYzAyMDAwMSwgMHg4YzQyNmYxYywgMHgxMDQwMDAwNSwgMHgzYzAyMDAyMCwgCi0weDNjMDIwMDAxLCAweDhjNDI2ZTQ0LCAweDEwNDAwMDI1LCAweDNjMDIwMDIwLCAKLTB4YTIxMDI0LCAweDEwNDAwMDA3LCAweDM0ODQwMDIwLCAweDI0MDIwMTAwLCAKLTB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMjI5MDA0LCAweDEwMDAwMDA2LCAKLTB4MzQ4NDAxMDAsIDB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMjA5MDA0LCAKLTB4MjQwMmZlZmYsIDB4ODIyMDI0LCAweDNjMDIwMDgwLCAweGEyMTAyNCwgCi0weDEwNDAwMDA3LCAweDEyMTk0MCwgMHgzYzAyMDAwMSwgMHgzYzAxMDAwMiwgCi0weDIzMDgyMSwgMHhhYzIyOTAwYywgMHgxMDAwMDAwOCwgMHhjMjMwMjUsIAotMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDBjLCAKLTB4M2MwMmZmZmUsIDB4MzQ0MmZmZmYsIDB4YzIzMDI0LCAweGFmODQwMjAwLCAKLTB4YWY4NjAyMjAsIDB4OGY4MjAyMjAsIDB4MzQ0MjAwMDIsIDB4YWY4MjAyMjAsIAotMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMzA4ZmYwLCAKLTB4OGZiZjAwMmMsIDB4OGZiMjAwMjgsIDB4OGZiMTAwMjQsIDB4OGZiMDAwMjAsIAotMHgzZTAwMDA4LCAweDI3YmQwMDMwLCAweDAsIDB4MTgyMSwgCi0weDMwODQwMGZmLCAweDI0MDVmZmRmLCAweDI0MDZmZmJmLCAweDY0MTAwNywgCi0weDMwNDIwMDAxLCAweDEwNDAwMDA0LCAweDAsIDB4OGY4MjAwNDQsIAotMHgxMDAwMDAwMywgMHgzNDQyMDA0MCwgMHg4ZjgyMDA0NCwgMHg0NjEwMjQsIAotMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgMHgzNDQyMDAyMCwgMHhhZjgyMDA0NCwgCi0weDhmODIwMDQ0LCAweDQ1MTAyNCwgMHhhZjgyMDA0NCwgMHgyNDYzMDAwMSwgCi0weDI4NjIwMDA4LCAweDU0NDBmZmVlLCAweDY0MTAwNywgMHgzZTAwMDA4LCAKLTB4MCwgMHgyYzgyMDAwOCwgMHgxMDQwMDAxYiwgMHgwLCAKLTB4MjQwNWZmZGYsIDB4MjQwNmZmYmYsIDB4NDE4ODAsIDB4M2MwMjAwMDEsIAotMHgyNDQyNmU2MCwgMHg2MjE4MjEsIDB4MjQ2NDAwMDQsIDB4OTA2MjAwMDAsIAotMHgxMDQwMDAwNCwgMHgwLCAweDhmODIwMDQ0LCAweDEwMDAwMDAzLCAKLTB4MzQ0MjAwNDAsIDB4OGY4MjAwNDQsIDB4NDYxMDI0LCAweGFmODIwMDQ0LCAKLTB4OGY4MjAwNDQsIDB4MzQ0MjAwMjAsIDB4YWY4MjAwNDQsIDB4OGY4MjAwNDQsIAotMHg0NTEwMjQsIDB4YWY4MjAwNDQsIDB4MjQ2MzAwMDEsIDB4NjQxMDJiLCAKLTB4MTQ0MGZmZWUsIDB4MCwgMHgzZTAwMDA4LCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHg4Zjg0MDBjNCwgCi0weDhmODYwMGUwLCAweDhmODcwMGU0LCAweDI0MDJmZmY4LCAweGMyMjgyNCwgCi0weDEwZTUwMDFhLCAweDI3NjIzZmY4LCAweDE0ZTIwMDAyLCAweDI0ZTgwMDA4LCAKLTB4Mjc2ODMwMDAsIDB4NTUwNTAwMDQsIDB4OGQwYTAwMDAsIDB4MzBjMjAwMDQsIAotMHgxNDQwMDAxMiwgMHg4MDUwMjEsIDB4OGNlOTAwMDAsIDB4OGY0MjAxM2MsIAotMHgxNDk0ODIzLCAweDQ5MTgyYiwgMHg5NGViMDAwNiwgMHgxMDYwMDAwMiwgCi0weDI1NjMwMDUwLCAweDQ5NDgyMSwgMHgxMjMxODJiLCAweDUwNDAwMDAzLCAKLTB4OGY0MjAxZmMsIDB4M2UwMDAwOCwgMHhlMDEwMjEsIDB4YWY4ODAwZTgsIAotMHgyNDQyMDAwMSwgMHhhZjQyMDFmYywgMHhhZjg4MDBlNCwgMHgzZTAwMDA4LCAKLTB4MTAyMSwgMHgzZTAwMDA4LCAweDAsIDB4OGY4MzAwZTQsIAotMHgyNzYyM2ZmOCwgMHgxMDYyMDAwNCwgMHgyNDYyMDAwOCwgMHhhZjgyMDBlOCwgCi0weDNlMDAwMDgsIDB4YWY4MjAwZTQsIDB4Mjc2MjMwMDAsIDB4YWY4MjAwZTgsIAotMHgzZTAwMDA4LCAweGFmODIwMGU0LCAweDNlMDAwMDgsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDhmODgwMTIwLCAKLTB4Mjc2MjRmZTAsIDB4OGY4MzAxMjgsIDB4MTUwMjAwMDIsIDB4MjUwOTAwMjAsIAotMHgyNzY5NDgwMCwgMHgxMTIzMDAxMiwgMHg4ZmEyMDAxMCwgMHhhZDA0MDAwMCwgCi0weGFkMDUwMDA0LCAweGFkMDYwMDA4LCAweGE1MDcwMDBlLCAweDhmYTMwMDE0LCAKLTB4YWQwMjAwMTgsIDB4OGZhMjAwMTgsIDB4YWQwMzAwMWMsIDB4MjUwMzAwMTYsIAotMHhhZDAyMDAxMCwgMHhhZDAzMDAxNCwgMHhhZjg5MDEyMCwgMHg4ZjQzMDBmYywgCi0weDI0MDIwMDAxLCAweDI0NjNmZmZmLCAweDNlMDAwMDgsIDB4YWY0MzAwZmMsIAotMHg4ZjQzMDMyNCwgMHgxMDIxLCAweDI0NjMwMDAxLCAweDNlMDAwMDgsIAotMHhhZjQzMDMyNCwgMHgzZTAwMDA4LCAweDAsIDB4OGY4ODAxMDAsIAotMHgyNzYyNDdlMCwgMHg4ZjgzMDEwOCwgMHgxNTAyMDAwMiwgMHgyNTA5MDAyMCwgCi0weDI3Njk0MDAwLCAweDExMjMwMDBmLCAweDhmYTIwMDEwLCAweGFkMDQwMDAwLCAKLTB4YWQwNTAwMDQsIDB4YWQwNjAwMDgsIDB4YTUwNzAwMGUsIDB4OGZhMzAwMTQsIAotMHhhZDAyMDAxOCwgMHg4ZmEyMDAxOCwgMHhhZDAzMDAxYywgMHgyNTAzMDAxNiwgCi0weGFkMDIwMDEwLCAweGFkMDMwMDE0LCAweGFmODkwMTAwLCAweDNlMDAwMDgsIAotMHgyNDAyMDAwMSwgMHg4ZjQzMDMyOCwgMHgxMDIxLCAweDI0NjMwMDAxLCAKLTB4M2UwMDAwOCwgMHhhZjQzMDMyOCwgMHgzZTAwMDA4LCAweDAsIAorMHgwLAorMHgxMDAwMDAwMywgMHgwLCAweGQsIDB4ZCwKKzB4M2MxZDAwMDEsIDB4OGZiZDZkMjAsIDB4M2EwZjAyMSwgMHgzYzEwMDAwMCwKKzB4MjYxMDQwMDAsIDB4YzAwMTBjMCwgMHgwLCAweGQsCisweDNjMWQwMDAxLCAweDhmYmQ2ZDI0LCAweDNhMGYwMjEsIDB4M2MxMDAwMDAsCisweDI2MTA0MDAwLCAweGMwMDE3ZTAsIDB4MCwgMHhkLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgyMDAwMDA4LAorMHgwLCAweDgwMDE3MmYsIDB4M2MwYTAwMDEsIDB4ODAwMTcyZiwKKzB4M2MwYTAwMDIsIDB4ODAwMTcyZiwgMHgwLCAweDgwMDJjYWMsCisweDAsIDB4ODAwMmM0ZiwgMHgwLCAweDgwMDE3MmYsCisweDNjMGEwMDA0LCAweDgwMDMyOGEsIDB4MCwgMHg4MDAxYTUyLAorMHgwLCAweDgwMDM5NGQsIDB4MCwgMHg4MDAzOGY0LAorMHgwLCAweDgwMDE3MmYsIDB4M2MwYTAwMDYsIDB4ODAwMzliYiwKKzB4M2MwYTAwMDcsIDB4ODAwMTcyZiwgMHgzYzBhMDAwOCwgMHg4MDAxNzJmLAorMHgzYzBhMDAwOSwgMHg4MDAzYTEzLCAweDAsIDB4ODAwMmVhNiwKKzB4MCwgMHg4MDAxNzJmLCAweDNjMGEwMDBiLCAweDgwMDE3MmYsCisweDNjMGEwMDBjLCAweDgwMDE3MmYsIDB4M2MwYTAwMGQsIDB4ODAwMjhmYiwKKzB4MCwgMHg4MDAyODkwLCAweDAsIDB4ODAwMTcyZiwKKzB4M2MwYTAwMGUsIDB4ODAwMjA4YywgMHgwLCAweDgwMDE5NjQsCisweDAsIDB4ODAwMWEwNCwgMHgwLCAweDgwMDNjYTYsCisweDAsIDB4ODAwM2M5NCwgMHgwLCAweDgwMDE3MmYsCisweDAsIDB4ODAwMTkxYSwgMHgwLCAweDgwMDE3MmYsCisweDAsIDB4ODAwMTcyZiwgMHgzYzBhMDAxMywgMHg4MDAxNzJmLAorMHgzYzBhMDAxNCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZTAsCisweDNjMWNjMDAwLCAweGFmYmYwMDFjLCAweGFmYjAwMDE4LCAweDhmODIwMTQwLAorMHgyNDAzMDAwMywgMHhhZjgzMDBlYywgMHgzNDQyMDAwNCwgMHhjMDAyYjIwLAorMHhhZjgyMDE0MCwgMHgzYzAxMDBjMCwgMHhjMDAxNzYzLCAweGFjMjAzZmZjLAorMHg0MDE4MjEsIDB4M2MwMjAwMTAsIDB4M2MwMTAwMDEsIDB4YWMyMzZlOWMsCisweDEwNjIwMDExLCAweDQzMTAyYiwgMHgxNDQwMDAwMiwgMHgzYzAyMDAyMCwKKzB4M2MwMjAwMDgsIDB4MTA2MjAwMGMsIDB4MjQwNTAxMDAsIDB4M2MwNjAwMDEsCisweDhjYzY2ZTljLCAweDNjMDQwMDAxLCAweDI0ODQ1Yzc0LCAweDM4MjEsCisweGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4M2MwMjAwMjAsCisweDNjMDEwMDAxLCAweGFjMjI2ZTljLCAweDI0MDIwMDA4LCAweDNjMDEwMDAxLAorMHhhYzIyNmViNCwgMHgyNDAyMDAxZiwgMHgzYzAxMDAwMSwgMHhhYzIyNmVjNCwKKzB4MjQwMjAwMTYsIDB4M2MwMTAwMDEsIDB4YWMyMjZlOTgsIDB4M2MwNWZmZmUsCisweDM0YTU2ZjA4LCAweDNjMDIwMDAxLCAweDhjNDI2ZTljLCAweDNjMDMwMDAyLAorMHgyNDYzOTAxMCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmNjNCwgMHg0MzEwMjMsCisweDE0ODAwMDAyLCAweDQ1ODAyMSwgMHgyNjEwZmEzOCwgMHgyNDAyZjAwMCwKKzB4MjAyODAyNCwgMHhjMDAxNzg1LCAweDIwMDIwMjEsIDB4MjAyMjgyMywKKzB4M2MwNDAwMjAsIDB4ODIxODIzLCAweDY1MTgyMywgMHgyNDdiYjAwMCwKKzB4M2MwM2ZmZmUsIDB4MzQ2M2JmMDgsIDB4MzYzYjgyMSwgMHgzYzA2MDBiZiwKKzB4MzRjNmYwMDAsIDB4M2MwNzAwMDEsIDB4OGNlNzZjYzAsIDB4M2MwMzAwYmYsCisweDM0NjNlMDAwLCAweDg1MjAyMywgMHgzYzAxMDAwMSwgMHhhYzI0NmVhOCwKKzB4ODIyMDIzLCAweDNjMDEwMDAxLCAweGFjMjU2ZTkwLCAweDUyODQyLAorMHgzYzAxMDAwMSwgMHhhYzIyNmU4NCwgMHgyNzYyMGZmYywgMHgzYzAxMDAwMSwKKzB4YWMyMjZkMjAsIDB4Mjc2MjFmZmMsIDB4ZGIzMDIzLCAweDdiMTgyMywKKzB4M2MwMTAwMDEsIDB4YWMyNDZlODgsIDB4M2MwMTAwMDEsIDB4YWMyNTZlYWMsCisweDNjMDEwMDAxLCAweGFjMjI2ZDI0LCAweGFmODYwMTUwLCAweDEwZTAwMDExLAorMHhhZjgzMDI1MCwgMHgzYzFkMDAwMSwgMHg4ZmJkNmNjYywgMHgzYTBmMDIxLAorMHhjMDAxNzQ5LCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZjZDAsCisweDNjMDMwMDAxLCAweDhjNjM2Y2Q0LCAweDI0NDJmZTAwLCAweDI0NjMwMjAwLAorMHgzYzAxMDAwMSwgMHhhYzIyNmNkMCwgMHgzYzAxMDAwMSwgMHgxMDAwMDAwNCwKKzB4YWMyMzZjZDQsIDB4M2MxZDAwMDEsIDB4OGZiZDZkMjAsIDB4M2EwZjAyMSwKKzB4M2MwMjAwMDEsIDB4OGM0MjZjYzQsIDB4MTA0MDAwMGQsIDB4MjZmYWZhMzgsCisweDNjMDIwMDAxLCAweDhjNDI2Y2QwLCAweDNjMDMwMDAxLCAweDhjNjM2Y2Q0LAorMHgzYzFhMDAwMSwgMHg4ZjVhNmNkNCwgMHgyNDQyZmEzOCwgMHgyNDYzMDVjOCwKKzB4M2MwMTAwMDEsIDB4YWMyMjZjZDAsIDB4M2MwMTAwMDEsIDB4YWMyMzZjZDQsCisweDNjMDIwMDAxLCAweDhjNDI2Y2M4LCAweDE0NDAwMDAzLCAweDAsCisweDNjMDEwMDAxLCAweGFjMjA2Y2QwLCAweGMwMDExNTEsIDB4MCwKKzB4OGZiZjAwMWMsIDB4OGZiMDAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyMCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZjZDAsIDB4M2MwMzAwMDEsIDB4OGM2MzZjZDQsCisweDI3YmRmZjk4LCAweGFmYjAwMDQ4LCAweDNjMTAwMDAxLCAweDhlMTA2NmI4LAorMHhhZmIyMDA1MCwgMHgzYzEyMDAwMCwgMHgyNjUyNDEwMCwgMHhhZmJmMDA2MCwKKzB4YWZiZTAwNWMsIDB4YWZiNTAwNTgsIDB4YWZiMzAwNTQsIDB4YWZiMTAwNGMsCisweGFmYTIwMDM0LCAweGFmYTMwMDMwLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LAorMHg4Zjg2MDA0MCwgMHgzYzA0MDAwMSwgMHgyNDg0NWM4MCwgMHgyNDA1MDIwMCwKKzB4M2MwMTAwMDEsIDB4YWMzMjZlODAsIDB4YzAwMmIzYiwgMHgyMDAzODIxLAorMHg4ZjgzMDA0MCwgMHgzYzAyZjAwMCwgMHg2MjE4MjQsIDB4M2MwMjYwMDAsCisweDEwNjIwMDBiLCAweGEzYTAwMDNmLCAweDI0MGUwMDAxLCAweDNjMDQwMDAxLAorMHgyNDg0NWM4OCwgMHhhM2FlMDAzZiwgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwKKzB4OGY4NjAwNDAsIDB4MjQwNTAzMDAsIDB4YzAwMmIzYiwgMHgyMDAzODIxLAorMHg4ZjgyMDI0MCwgMHgzYzAzMDAwMSwgMHg0MzEwMjUsIDB4YWY4MjAyNDAsCisweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAweDE0NDAwMDA1LCAweDAsCisweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAweDEwNDAwMDA0LCAweDAsCisweGFmODAwMDQ4LCAweDEwMDAwMDAzLCAweDJlMDIwMjEsIDB4YWY4MDAwNGMsCisweDJlMDIwMjEsIDB4M2MwNTAwMDEsIDB4YzAwMmJhOCwgMHgzNGE1NDBmOCwKKzB4MzQwMjAyMSwgMHhjMDAyYmE4LCAweDI0MDUwNWM4LCAweDNjMDIwMDAxLAorMHg4YzQyNmVhOCwgMHgzYzBkMDAwMSwgMHg4ZGFkNmU4OCwgMHgzYzAzMDAwMSwKKzB4OGM2MzZlODQsIDB4M2MwODAwMDEsIDB4OGQwODZlOTAsIDB4M2MwOTAwMDEsCisweDhkMjk2ZWFjLCAweDNjMGEwMDAxLCAweDhkNGE2ZWI0LCAweDNjMGIwMDAxLAorMHg4ZDZiNmVjNCwgMHgzYzBjMDAwMSwgMHg4ZDhjNmU5OCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVjOTQsIDB4MjQwNTA0MDAsIDB4YWY0MjAxM2MsIDB4OGY0MjAxM2MsCisweDI0MDYwMDAxLCAweDI0MDcwMDAxLCAweGFmNDAwMDAwLCAweGFmNGQwMTM4LAorMHhhZjQzMDE0NCwgMHhhZjQ4MDE0OCwgMHhhZjQ5MDE0YywgMHhhZjRhMDE1MCwKKzB4YWY0YjAxNTQsIDB4YWY0YzAxNTgsIDB4MjQ0MmZmODAsIDB4YWY0MjAxNDAsCisweDI0MDIwMDAxLCAweGFmYTIwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsCisweDhmNDIwMTM4LCAweGFmYTIwMDEwLCAweDhmNDIwMTNjLCAweGFmYTIwMDE0LAorMHg4ZjQ2MDE0NCwgMHg4ZjQ3MDE0OCwgMHgzYzA0MDAwMSwgMHgyNDg0NWNhMCwKKzB4YzAwMmIzYiwgMHgyNDA1MDUwMCwgMHhhZmI3MDAxMCwgMHhhZmJhMDAxNCwKKzB4OGY0NjAxNGMsIDB4OGY0NzAxNTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVjYWMsCisweGMwMDJiM2IsIDB4MjQwNTA2MDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZlOWMsCisweDM2MDM4MjEsIDB4M2MwNjAwMDIsIDB4MjRjNjkwMTAsIDB4MjQ0OGZmZmYsCisweDEwNjE4MjQsIDB4ZTgxMDI0LCAweDQzMTAyYiwgMHgxMDQwMDAwNiwKKzB4MjQwNTA5MDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVjYjgsIDB4YWZhODAwMTAsCisweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4OGY4MjAwMGMsIDB4YWZhMjAwMTAsCisweDhmODIwMDNjLCAweGFmYTIwMDE0LCAweDhmODYwMDAwLCAweDhmODcwMDA0LAorMHgzYzA0MDAwMSwgMHgyNDg0NWNjNCwgMHhjMDAyYjNiLCAweDI0MDUxMDAwLAorMHg4YzAyMDIyMCwgMHg4YzAzMDIyNCwgMHg4YzA2MDIxOCwgMHg4YzA3MDIxYywKKzB4M2MwNDAwMDEsIDB4MjQ4NDVjY2MsIDB4MjQwNTExMDAsIDB4YWZhMjAwMTAsCisweGMwMDJiM2IsIDB4YWZhMzAwMTQsIDB4YWY4MDAwNTQsIDB4YWY4MDAxMWMsCisweDhjMDIwMjE4LCAweDMwNDIwMDAyLCAweDEwNDAwMDA5LCAweDAsCisweDhjMDIwMjIwLCAweDNjMDMwMDAyLCAweDM0NjMwMDA0LCAweDQzMTAyNSwKKzB4YWY0MjAwMGMsIDB4OGMwMjAyMWMsIDB4MTAwMDAwMDgsIDB4MzQ0MjAwMDQsCisweDhjMDIwMjIwLCAweDNjMDMwMDAyLCAweDM0NjMwMDA2LCAweDQzMTAyNSwKKzB4YWY0MjAwMGMsIDB4OGMwMjAyMWMsIDB4MzQ0MjAwMDYsIDB4YWY0MjAwMTQsCisweDhjMDIwMjE4LCAweDMwNDIwMDEwLCAweDEwNDAwMDBhLCAweDAsCisweDhjMDIwMjFjLCAweDM0NDIwMDA0LCAweGFmNDIwMDEwLCAweDhjMDIwMjIwLAorMHgzYzAzMDAwYSwgMHgzNDYzMDAwNCwgMHg0MzEwMjUsIDB4MTAwMDAwMDksCisweGFmNDIwMDA4LCAweDhjMDIwMjIwLCAweDNjMDMwMDBhLCAweDM0NjMwMDA2LAorMHg0MzEwMjUsIDB4YWY0MjAwMDgsIDB4OGMwMjAyMWMsIDB4MzQ0MjAwMDYsCisweGFmNDIwMDEwLCAweDI0MDIwMDAxLCAweGFmODIwMGEwLCAweGFmODIwMGIwLAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHhhZjgwMDBkMCwgMHhhZjgwMDBjMCwKKzB4MTAwMDAwMDIsIDB4MjQ2MzAwNjQsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLAorMHgyYzQyMDA2NSwgMHgxNDQwZmZmYywgMHgwLCAweDhjMDQwMjA4LAorMHg4YzA1MDIwYywgMHgyNmUyMDAyOCwgMHhhZWUyMDAyMCwgMHgyNDAyMDQ5MCwKKzB4YWVlMjAwMTAsIDB4YWVlNDAwMDgsIDB4YWVlNTAwMGMsIDB4MjZlNDAwMDgsCisweDhjODIwMDAwLCAweDhjODMwMDA0LCAweGFmODIwMDkwLCAweGFmODMwMDk0LAorMHg4YzgyMDAxOCwgMHhhZjgyMDBiNCwgMHg5NDgyMDAwYSwgMHhhZjgyMDA5YywKKzB4OGY0MjAwMTQsIDB4YWY4MjAwYjAsIDB4OGY4MjAwYjAsIDB4MzA0MjAwMDQsCisweDE0NDBmZmZkLCAweDAsIDB4OGY4MjAwYjAsIDB4M2MwM2VmMDAsCisweDQzMTAyNCwgMHgxMDQwMDAyMSwgMHgwLCAweDhmODIwMGI0LAorMHhhZmEyMDAxMCwgMHg4ZjgyMDA5MCwgMHg4ZjgzMDA5NCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVjZDQsIDB4YWZhMzAwMTQsIDB4OGY4NjAwYjAsIDB4OGY4NzAwOWMsCisweDNjMDUwMDAxLCAweGMwMDJiM2IsIDB4MzRhNTIwMGQsIDB4M2MwNDAwMDEsCisweDI0ODQ1Y2UwLCAweDI0MDIwM2MwLCAweGFmYTIwMDEwLCAweGFmYTAwMDE0LAorMHg4Zjg2MDE0NCwgMHgzYzA3MDAwMSwgMHgyNGU3NWNlOCwgMHhjMDAyYjNiLAorMHgzNDA1ZGVhZCwgMHg4ZjgyMDExYywgMHgzNDQyMDAwMiwgMHhhZjgyMDExYywKKzB4OGY4MjAyMjAsIDB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIDB4OGY4MjAxNDAsCisweDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDE0MCwgMHg5NmUyMDQ3MiwKKzB4OTZlNjA0NTIsIDB4OTZlNzA0NjIsIDB4YWZhMjAwMTAsIDB4OTZlMjA0ODIsCisweDNjMDQwMDAxLCAweDI0ODQ1ZDE0LCAweDI0MDUxMjAwLCAweGMwMDJiM2IsCisweGFmYTIwMDE0LCAweDk2ZjAwNDUyLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLAorMHhiMDIxLCAweDI0MTYwMDAxLCAweDMyMDIwMDAyLCAweDU0NDAwMDAxLAorMHgzNmQ2MDAwMiwgMHgzMjAyMDAwOCwgMHg1NDQwMDAwMSwgMHgzNmQ2MDAwNCwKKzB4MzIwMjAwMTAsIDB4NTQ0MDAwMDEsIDB4MzZkNjAwMDgsIDB4MzIwMjAwMjAsCisweDU0NDAwMDAxLCAweDM2ZDYwMDEwLCAweDMyMDIwMDQwLCAweDU0NDAwMDAxLAorMHgzNmQ2MDAyMCwgMHgzMjAyMDA4MCwgMHg1NDQwMDAwMSwgMHgzNmQ2MDA0MCwKKzB4OTZlNjA0ODIsIDB4MzBjMjAyMDAsIDB4NTQ0MDAwMDEsIDB4MzZkNjQwMDAsCisweDk2ZTMwNDcyLCAweDMwNjIwMjAwLCAweDEwNDAwMDAzLCAweDMwNjIwMTAwLAorMHgxMDAwMDAwMywgMHgzNmQ2MjAwMCwgMHg1NDQwMDAwMSwgMHgzNmQ2MTAwMCwKKzB4OTZmMDA0NjIsIDB4MzJjMjQwMDAsIDB4MTQ0MDAwMDQsIDB4MzIwNzAwOWIsCisweDMwYzIwMDliLCAweDE0ZTIwMDA3LCAweDI0MGUwMDAxLCAweDMyYzIyMDAwLAorMHgxNDQwMDAwZCwgMHgzMjAyMDAwMSwgMHgzMDYyMDA5YiwgMHgxMGUyMDAwOSwKKzB4MjQwZTAwMDEsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkMjAsIDB4MjQwNTEzMDAsCisweDIwMDM4MjEsIDB4YTNhZTAwM2YsIDB4YWZhMzAwMTAsIDB4YzAwMmIzYiwKKzB4YWZhMDAwMTQsIDB4MzIwMjAwMDEsIDB4NTQ0MDAwMDEsIDB4MzZkNjAwODAsCisweDMyMDIwMDAyLCAweDU0NDAwMDAxLCAweDM2ZDYwMTAwLCAweDMyMDIwMDA4LAorMHg1NDQwMDAwMSwgMHgzNmQ2MDIwMCwgMHgzMjAyMDAxMCwgMHg1NDQwMDAwMSwKKzB4MzZkNjA0MDAsIDB4MzIwMjAwODAsIDB4NTQ0MDAwMDEsIDB4MzZkNjA4MDAsCisweDhjMDIwMjE4LCAweDMwNDIwMjAwLCAweDEwNDAwMDAyLCAweDNjMDIwMDA4LAorMHgyYzJiMDI1LCAweDhjMDIwMjE4LCAweDMwNDIwODAwLCAweDEwNDAwMDAyLAorMHgzYzAyMDA4MCwgMHgyYzJiMDI1LCAweDhjMDIwMjE4LCAweDMwNDIwNDAwLAorMHgxMDQwMDAwMiwgMHgzYzAyMDEwMCwgMHgyYzJiMDI1LCAweDhjMDIwMjE4LAorMHgzMDQyMDEwMCwgMHgxMDQwMDAwMiwgMHgzYzAyMDIwMCwgMHgyYzJiMDI1LAorMHg4YzAyMDIxOCwgMHgzMDQyMDA4MCwgMHgxMDQwMDAwMiwgMHgzYzAyMDQwMCwKKzB4MmMyYjAyNSwgMHg4YzAyMDIxOCwgMHgzMDQyMjAwMCwgMHgxMDQwMDAwMiwKKzB4M2MwMjAwMTAsIDB4MmMyYjAyNSwgMHg4YzAyMDIxOCwgMHgzMDQyNDAwMCwKKzB4MTA0MDAwMDIsIDB4M2MwMjAwMjAsIDB4MmMyYjAyNSwgMHg4YzAyMDIxOCwKKzB4MzA0MjEwMDAsIDB4MTA0MDAwMDIsIDB4M2MwMjAwNDAsIDB4MmMyYjAyNSwKKzB4OGVlMjA0OTgsIDB4OGVlMzA0OWMsIDB4YWY0MjAxNjAsIDB4YWY0MzAxNjQsCisweDhlZTIwNGEwLCAweDhlZTMwNGE0LCAweGFmNDIwMTY4LCAweGFmNDMwMTZjLAorMHg4ZWUyMDRhOCwgMHg4ZWUzMDRhYywgMHhhZjQyMDE3MCwgMHhhZjQzMDE3NCwKKzB4OGVlMjA0MjgsIDB4OGVlMzA0MmMsIDB4YWY0MjAxNzgsIDB4YWY0MzAxN2MsCisweDhlZTIwNDQ4LCAweDhlZTMwNDRjLCAweGFmNDIwMTgwLCAweGFmNDMwMTg0LAorMHg4ZWUyMDQ1OCwgMHg4ZWUzMDQ1YywgMHhhZjQyMDE4OCwgMHhhZjQzMDE4YywKKzB4OGVlMjA0NjgsIDB4OGVlMzA0NmMsIDB4YWY0MjAxOTAsIDB4YWY0MzAxOTQsCisweDhlZTIwNDc4LCAweDhlZTMwNDdjLCAweGFmNDIwMTk4LCAweGFmNDMwMTljLAorMHg4ZWUyMDQ4OCwgMHg4ZWUzMDQ4YywgMHhhZjQyMDFhMCwgMHhhZjQzMDFhNCwKKzB4OGVlMjA0YjAsIDB4OGVlMzA0YjQsIDB4MjQwNDAwODAsIDB4YWY0MjAxYTgsCisweGFmNDMwMWFjLCAweGMwMDJiYTgsIDB4MjQwNTAwODAsIDB4OGMwMjAyNWMsCisweDI3NDQwMjI0LCAweGFmNDIwMWYwLCAweDhjMDIwMjYwLCAweDI0MDUwMjAwLAorMHgyNDA2MDAwOCwgMHhjMDAyYmJmLCAweGFmNDIwMWY4LCAweDNjMDQzYjlhLAorMHgzNDg0Y2EwMCwgMHgzODIxLCAweDI0MDIwMDA2LCAweDI0MDMwMDAyLAorMHhhZjQyMDFmNCwgMHgyNDAyMDNlOCwgMHhhZjQzMDIwNCwgMHhhZjQzMDIwMCwKKzB4YWY0NDAxZmMsIDB4YWY0MjAyOTQsIDB4MjQwMjAwMDEsIDB4YWY0MzAyOTAsCisweGFmNDIwMjljLCAweDNjMDMwMDAxLCAweDY3MTgyMSwgMHg5MDYzNmNkOCwKKzB4MzQ3MTAyMSwgMHgyNGU3MDAwMSwgMHhhMDQzMDIyYywgMHgyY2UyMDAwZiwKKzB4MTQ0MGZmZjgsIDB4MzQ3MTgyMSwgMHgyNGU3MDAwMSwgMHgzYzA4MDAwMSwKKzB4MzUwODQwZjgsIDB4OGY4MjAwNDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkMmMsCisweDI0MDUxNDAwLCAweDIxNzAyLCAweDI0NDIwMDMwLCAweGEwNjIwMjJjLAorMHgzNDcxMDIxLCAweGEwNDAwMjJjLCAweDhjMDcwMjE4LCAweDJjMDMwMjEsCisweDI0MDIwNWM4LCAweGFmYTIwMDEwLCAweGMwMDJiM2IsIDB4YWZhODAwMTQsCisweDNjMDQwMDAxLCAweDI0ODQ1ZDM4LCAweDNjMDUwMDAwLCAweDI0YTU1YzgwLAorMHgyNDA2MDAxMCwgMHgyN2IxMDAzMCwgMHgyMjAzODIxLCAweDI3YjMwMDM0LAorMHhjMDAxN2EzLCAweGFmYjMwMDEwLCAweDNjMDMwMDAxLCAweDhjNjM2Y2M4LAorMHgxMDYwMDAwYSwgMHg0MDgwMjEsIDB4OGZhMzAwMzAsIDB4MjQwNWZmMDAsCisweDhmYTIwMDM0LCAweDI0NjQwMGZmLCAweDg1MjAyNCwgMHg4MzE4MjMsCisweDQzMTAyMywgMHhhZmEyMDAzNCwgMHhhZmE0MDAzMCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVkNDQsIDB4M2MwNTAwMDAsIDB4MjRhNTQxMDAsIDB4MjQwNjAxMDgsCisweDIyMDM4MjEsIDB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHg0MDkwMjEsCisweDMyYzIwMDAzLCAweDNjMDEwMDAxLCAweGFjMzI2ZTgwLCAweDEwNDAwMDQ1LAorMHgyMjAzODIxLCAweDhmODIwMDUwLCAweDNjMDMwMDEwLCAweDQzMTAyNCwKKzB4MTA0MDAwMTYsIDB4MCwgMHg4YzAyMDIxOCwgMHgzMDQyMDA0MCwKKzB4MTA0MDAwMGYsIDB4MjQwMjAwMDEsIDB4OGY4MjAwNTAsIDB4OGMwMzAyMTgsCisweDI0MGUwMDAxLCAweDNjMDQwMDAxLCAweDI0ODQ1ZDUwLCAweGEzYWUwMDNmLAorMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgMHg4Zjg3MDA0MCwgMHgyNDA1MTUwMCwKKzB4YzAwMmIzYiwgMHgyYzAzMDIxLCAweDEwMDAwMDA0LCAweDAsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyNDBmNCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVkNWMsIDB4M2MwNTAwMDEsIDB4MjRhNTViNDAsIDB4M2MwNjAwMDEsCisweDI0YzY1YmFjLCAweGM1MzAyMywgMHg4ZjQyMDAxMCwgMHgyN2IzMDAzMCwKKzB4MjYwMzgyMSwgMHgyN2IxMDAzNCwgMHgzNDQyMGEwMCwgMHhhZjQyMDAxMCwKKzB4YzAwMTdhMywgMHhhZmIxMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWQ3MCwKKzB4M2MwNTAwMDEsIDB4MjRhNWI3MTQsIDB4M2MwNjAwMDEsIDB4MjRjNmJhOTAsCisweGM1MzAyMywgMHgyNjAzODIxLCAweGFmNDIwMTA4LCAweGMwMDE3YTMsCisweGFmYjEwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZDhjLCAweDNjMDUwMDAxLAorMHgyNGE1YmU1OCwgMHgzYzA2MDAwMSwgMHgyNGM2YzkwMCwgMHhjNTMwMjMsCisweDI2MDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlZjQsIDB4YzAwMTdhMywKKzB4YWZiMTAwMTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkYTQsIDB4MTAwMDAwMjQsCisweDI0MDUxNjAwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZGFjLCAweDNjMDUwMDAxLAorMHgyNGE1YTEwYywgMHgzYzA2MDAwMSwgMHgyNGM2YTIzOCwgMHhjNTMwMjMsCisweGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVkYmMsCisweDNjMDUwMDAxLCAweDI0YTViMmIwLCAweDNjMDYwMDAxLCAweDI0YzZiNzBjLAorMHhjNTMwMjMsIDB4MjIwMzgyMSwgMHhhZjQyMDEwOCwgMHhjMDAxN2EzLAorMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWRkMCwgMHgzYzA1MDAwMSwKKzB4MjRhNWJhOTgsIDB4M2MwNjAwMDEsIDB4MjRjNmJlNTAsIDB4YzUzMDIzLAorMHgyMjAzODIxLCAweDNjMDEwMDAxLCAweGFjMjI2ZWY0LCAweGMwMDE3YTMsCisweGFmYjMwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZGU0LCAweDI0MDUxNjUwLAorMHgyYzAzMDIxLCAweDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlZjgsCisweGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4MzJjMjAwMjAsCisweDEwNDAwMDIxLCAweDI3YTcwMDMwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZGYwLAorMHgzYzA1MDAwMSwgMHgyNGE1YjEzYywgMHgzYzA2MDAwMSwgMHgyNGM2YjJhOCwKKzB4YzUzMDIzLCAweDI0MDIyMDAwLCAweGFmNDIwMDFjLCAweDI3YTIwMDM0LAorMHhjMDAxN2EzLCAweGFmYTIwMDEwLCAweDIxOTAwLCAweDMxOTgyLAorMHgzYzA0MDgwMCwgMHg2NDE4MjUsIDB4YWU0MzAwMjgsIDB4MjQwMzAwMTAsCisweGFmNDMwMDNjLCAweDk2ZTMwNDUwLCAweGFmNDMwMDQwLCAweDhmNDMwMDQwLAorMHgzYzA0MDAwMSwgMHgyNDg0NWUwNCwgMHhhZmEwMDAxNCwgMHhhZmEzMDAxMCwKKzB4OGY0NzAwMWMsIDB4MjQwNTE2NjAsIDB4M2MwMTAwMDEsIDB4YWMyMjZlZjAsCisweDEwMDAwMDI1LCAweDMyYzYwMDIwLCAweDhlZTIwNDQ4LCAweDhlZTMwNDRjLAorMHhhZjQzMDAxYywgMHg4ZjQyMDAxYywgMHgyNDQyZTAwMCwgMHgyYzQyMjAwMSwKKzB4MTQ0MDAwMGEsIDB4MjQwZTAwMDEsIDB4M2MwNDAwMDEsIDB4MjQ4NDVlMTAsCisweGEzYWUwMDNmLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmNDYwMDFjLAorMHgyNDA1MTcwMCwgMHhjMDAyYjNiLCAweDM4MjEsIDB4M2MwMjAwMDAsCisweDI0NDI1Y2JjLCAweDIxMTAwLCAweDIxMTgyLCAweDNjMDMwODAwLAorMHg0MzEwMjUsIDB4YWU0MjAwMjgsIDB4MjQwMjAwMDgsIDB4YWY0MjAwM2MsCisweDk2ZTIwNDUwLCAweGFmNDIwMDQwLCAweDhmNDIwMDQwLCAweDNjMDQwMDAxLAorMHgyNDg0NWUxYywgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZjQ3MDAxYywKKzB4MjQwNTE4MDAsIDB4MzJjNjAwMjAsIDB4YzAwMmIzYiwgMHgwLAorMHgzYzA1MGZmZiwgMHgzYzAzMDAwMSwgMHg4YzYzNmVmNCwgMHgzNGE1ZmZmZiwKKzB4MjQwMzAyMSwgMHgzYzAyMDAwMSwgMHg4YzQyNmVmOCwgMHgzYzA0MDgwMCwKKzB4NjUxODI0LCAweDMxODgyLCAweDY0MTgyNSwgMHg0NTEwMjQsCisweDIxMDgyLCAweDQ0MTAyNSwgMHhhY2MyMDA4MCwgMHgzMmMyMDE4MCwKKzB4MTA0MDAwNTYsIDB4YWNjMzAwMjAsIDB4OGY4MjAwNWMsIDB4M2MwMzAwODAsCisweDQzMTAyNCwgMHgxMDQwMDAwZCwgMHgwLCAweDhmODIwMDUwLAorMHhhZmEyMDAxMCwgMHg4ZjgyMDA1YywgMHgyNDBlMDAwMSwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVlMjgsIDB4YTNhZTAwM2YsIDB4YWZhMjAwMTQsIDB4OGY4NzAwNDAsCisweDI0MDUxOTAwLCAweGMwMDJiM2IsIDB4MmMwMzAyMSwgMHg4ZjgyMDA1MCwKKzB4M2MwMzAwMTAsIDB4NDMxMDI0LCAweDEwNDAwMDE2LCAweDAsCisweDhjMDIwMjE4LCAweDMwNDIwMDQwLCAweDEwNDAwMDBmLCAweDI0MDIwMDAxLAorMHg4ZjgyMDA1MCwgMHg4YzAzMDIxOCwgMHgyNDBlMDAwMSwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVkNTAsIDB4YTNhZTAwM2YsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsCisweDhmODcwMDQwLCAweDI0MDUyMDAwLCAweGMwMDJiM2IsIDB4MmMwMzAyMSwKKzB4MTAwMDAwMDQsIDB4MCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGEwMjI0MGY0LCAweDNjMDQwMDAxLCAweDI0ODQ1ZTM0LCAweDNjMDUwMDAxLAorMHgyNGE1NWFjMCwgMHgzYzA2MDAwMSwgMHgyNGM2NWIzOCwgMHhjNTMwMjMsCisweDhmNDIwMDA4LCAweDI3YjMwMDMwLCAweDI2MDM4MjEsIDB4MjdiMTAwMzQsCisweDM0NDIwZTAwLCAweGFmNDIwMDA4LCAweGMwMDE3YTMsIDB4YWZiMTAwMTAsCisweDNjMDQwMDAxLCAweDI0ODQ1ZTRjLCAweDNjMDUwMDAxLCAweDI0YTVkOGI0LAorMHgzYzA2MDAwMSwgMHgyNGM2ZTNjOCwgMHhjNTMwMjMsIDB4MjYwMzgyMSwKKzB4YWY0MjAxMGMsIDB4YzAwMTdhMywgMHhhZmIxMDAxMCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVlNjQsIDB4M2MwNTAwMDEsIDB4MjRhNWU5YWMsIDB4M2MwNjAwMDEsCisweDI0YzZmMGYwLCAweGM1MzAyMywgMHgyNjAzODIxLCAweDNjMDEwMDAxLAorMHhhYzIyNmYwNCwgMHhjMDAxN2EzLCAweGFmYjEwMDEwLCAweDNjMDQwMDAxLAorMHgyNDg0NWU3YywgMHgxMDAwMDAyNywgMHgyNDA1MjEwMCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVlODQsIDB4M2MwNTAwMDEsIDB4MjRhNTlmYzgsIDB4M2MwNjAwMDEsCisweDI0YzZhMTA0LCAweGM1MzAyMywgMHgyN2IxMDAzMCwgMHgyMjAzODIxLAorMHgyN2IzMDAzNCwgMHhjMDAxN2EzLCAweGFmYjMwMDEwLCAweDNjMDQwMDAxLAorMHgyNDg0NWU5NCwgMHgzYzA1MDAwMSwgMHgyNGE1Y2FkNCwgMHgzYzA2MDAwMSwKKzB4MjRjNmQ4YWMsIDB4YzUzMDIzLCAweDIyMDM4MjEsIDB4YWY0MjAxMGMsCisweGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVlYTQsCisweDNjMDUwMDAxLCAweDI0YTVlODRjLCAweDNjMDYwMDAxLCAweDI0YzZlOWE0LAorMHhjNTMwMjMsIDB4MjIwMzgyMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmYwNCwKKzB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWViOCwKKzB4MjQwNTIxNTAsIDB4MmMwMzAyMSwgMHgzODIxLCAweDNjMDEwMDAxLAorMHhhYzIyNmYxMCwgMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LAorMHgzYzExMGZmZiwgMHgzYzAzMDAwMSwgMHg4YzYzNmYwNCwgMHgzNjMxZmZmZiwKKzB4MjQwOTgyMSwgMHgzYzAyMDAwMSwgMHg4YzQyNmYxMCwgMHgzYzBlMDgwMCwKKzB4NzExODI0LCAweDMxODgyLCAweDZlMTgyNSwgMHg1MTEwMjQsCisweDIxMDgyLCAweDRlMTAyNSwgMHhhZTYzMDAzOCwgMHhhZTYyMDA3OCwKKzB4OGMwMjAyMTgsIDB4MzA0MjAwNDAsIDB4MTQ0MDAwMDQsIDB4MjQwMjAwMDEsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIyNDBmNCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVlYzQsIDB4M2MwNTAwMDEsIDB4MjRhNWUzZDAsIDB4M2MwNjAwMDEsCisweDI0YzZlNTJjLCAweGM1MzAyMywgMHgyN2JlMDAzMCwgMHgzYzAzODIxLAorMHgyN2I1MDAzNCwgMHhjMDAxN2EzLCAweGFmYjUwMDEwLCAweDNjMDEwMDAxLAorMHhhYzIyNmVmYywgMHg1MTEwMjQsIDB4MjEwODIsIDB4M2MwZTA4MDAsCisweDRlMTAyNSwgMHhhZTYyMDA1MCwgMHgzMmMyMjAwMCwgMHgxMDQwMDAwNiwKKzB4M2MwMzgyMSwgMHgzYzAyMDAwMCwgMHgyNDQyNWNiYywgMHgyMjIxMDI0LAorMHgxMDAwMDAwZiwgMHgyMTA4MiwgMHgzYzA0MDAwMSwgMHgyNDg0NWVkOCwKKzB4M2MwNTAwMDEsIDB4MjRhNWU1MzQsIDB4M2MwNjAwMDEsIDB4MjRjNmU2ZTQsCisweGM1MzAyMywgMHhjMDAxN2EzLCAweGFmYjUwMDEwLCAweDNjMDEwMDAxLAorMHhhYzIyNmYxNCwgMHg1MTEwMjQsIDB4MjEwODIsIDB4M2MwZTA4MDAsCisweDRlMTAyNSwgMHhhZTYyMDA0OCwgMHgzMmMyNDAwMCwgMHgxMDQwMDAwNSwKKzB4MjdhNzAwMzAsIDB4M2MwMjAwMDAsIDB4MjQ0MjVjYmMsIDB4MTAwMDAwMGUsCisweDIxMTAwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZWYwLCAweDNjMDUwMDAxLAorMHgyNGE1ZTZlYywgMHgzYzA2MDAwMSwgMHgyNGM2ZTg0NCwgMHhjNTMwMjMsCisweDI3YTIwMDM0LCAweGMwMDE3YTMsIDB4YWZhMjAwMTAsIDB4M2MwMTAwMDEsCisweGFjMjI2ZjA4LCAweDIxMTAwLCAweDIxMTgyLCAweDNjMDMwODAwLAorMHg0MzEwMjUsIDB4YWU0MjAwNjAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmMDgsCisweDNjMDUwMDAxLCAweDI0YTU4MjMwLCAweDNjMDYwMDAxLCAweDI0YzY4NjUwLAorMHhjNTMwMjMsIDB4MjdiMTAwMzAsIDB4MjIwMzgyMSwgMHgyN2IzMDAzNCwKKzB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHgzYzBlMGZmZiwgMHgzNWNlZmZmZiwKKzB4M2MwNDAwMDEsIDB4MjQ4NDVmMTQsIDB4M2MwNTAwMDAsIDB4MjRhNTY0NjgsCisweDNjMDYwMDAwLCAweDI0YzY2NTg4LCAweGM1MzAyMywgMHgyMjAzODIxLAorMHgyNDBmMDIxLCAweDNjMDEwMDAxLCAweGFjMjI2ZWRjLCAweDRlMTAyNCwKKzB4MjEwODIsIDB4M2MxNTA4MDAsIDB4NTUxMDI1LCAweGFmYWUwMDQ0LAorMHhhZmMyMDBiOCwgMHhjMDAxN2EzLCAweGFmYjMwMDEwLCAweDNjMDQwMDAxLAorMHgyNDg0NWYyMCwgMHgzYzA1MDAwMCwgMHgyNGE1NjU5MCwgMHgzYzA2MDAwMCwKKzB4MjRjNjY4MDgsIDB4OGZhZTAwNDQsIDB4YzUzMDIzLCAweDIyMDM4MjEsCisweDNjMDEwMDAxLCAweGFjMjI2ZWQwLCAweDRlMTAyNCwgMHgyMTA4MiwKKzB4NTUxMDI1LCAweGFmYzIwMGU4LCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsCisweDNjMDQwMDAxLCAweDI0ODQ1ZjM4LCAweDNjMDUwMDAwLCAweDI0YTU2ODEwLAorMHgzYzA2MDAwMCwgMHgyNGM2Njk0MCwgMHg4ZmFlMDA0NCwgMHhjNTMwMjMsCisweDIyMDM4MjEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlYzgsIDB4NGUxMDI0LAorMHgyMTA4MiwgMHg1NTEwMjUsIDB4YWZjMjAwYzAsIDB4YzAwMTdhMywKKzB4YWZiMzAwMTAsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmNTAsIDB4M2MwNTAwMDEsCisweDI0YTVmYWQwLCAweDNjMDYwMDAxLCAweDI0YzZmYmE4LCAweDhmYWUwMDQ0LAorMHhjNTMwMjMsIDB4MjIwMzgyMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmVkNCwKKzB4NGUxMDI0LCAweDIxMDgyLCAweDU1MTAyNSwgMHhhZmMyMDBjOCwKKzB4YzAwMTdhMywgMHhhZmIzMDAxMCwgMHgzYzA0MDAwMSwgMHgyNDg0NWY1YywKKzB4M2MwNTAwMDEsIDB4MjRhNWM5M2MsIDB4M2MwNjAwMDEsIDB4MjRjNmNhMjAsCisweGM1MzAyMywgMHgyMjAzODIxLCAweGFmNDIwMTEwLCAweGMwMDE3YTMsCisweGFmYjMwMDEwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZjZjLCAweDNjMDUwMDAxLAorMHgyNGE1YzkxMCwgMHgzYzA2MDAwMSwgMHgyNGM2YzkzNCwgMHhjNTMwMjMsCisweDIyMDM4MjEsIDB4YWY0MjAxMjQsIDB4YzAwMTdhMywgMHhhZmIzMDAxMCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDVmN2MsIDB4M2MwNTAwMDEsIDB4MjRhNTVhODAsCisweDNjMDYwMDAxLCAweDI0YzY1YWFjLCAweGM1MzAyMywgMHgyMjAzODIxLAorMHhhZjQyMDEyMCwgMHhhZjQyMDExNCwgMHhjMDAxN2EzLCAweGFmYjMwMDEwLAorMHgzYzA0MDAwMSwgMHgyNDg0NWY4OCwgMHgzYzA1MDAwMSwgMHgyNGE1ZjI5OCwKKzB4M2MwNjAwMDEsIDB4MjRjNmY2YjQsIDB4YzUzMDIzLCAweDIyMDM4MjEsCisweGFmNDIwMTE4LCAweGMwMDE3YTMsIDB4YWZiMzAwMTAsIDB4OGZhZTAwNDQsCisweDNjMDEwMDAxLCAweGFjMjI2ZjE4LCAweDRlMTAyNCwgMHgyMTA4MiwKKzB4NTUxMDI1LCAweGMwMDNmYzMsIDB4YWZjMjAwZDAsIDB4YzAwM2M0MCwKKzB4MCwgMHhjMDAyN2E4LCAweDAsIDB4YWMwMDAyMjgsCisweGFjMDAwMjJjLCAweDk2ZTIwNDUwLCAweDI0NDJmZmZmLCAweGFmNDIwMDM4LAorMHg5NmUyMDQ2MCwgMHhhZjQyMDA4MCwgMHgzMmMyNDAwMCwgMHgxNDQwMDAwMywKKzB4MCwgMHg5NmUyMDQ4MCwgMHhhZjQyMDA4NCwgMHg5NmU3MDQ5MCwKKzB4NTBlMDAwMDEsIDB4MjQwNzA4MDAsIDB4MjRlMmZmZmYsIDB4YWY0MjAwODgsCisweGFmNDIwMDdjLCAweDI0MDIwODAwLCAweDEwZTIwMDBmLCAweDMyYzI0MDAwLAorMHgxMDQwMDAwMywgMHgyNDAyMDQwMCwgMHgxMGUyMDAwYiwgMHgwLAorMHgyNDBlMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NWY5OCwgMHhhM2FlMDAzZiwKKzB4OTZlNjA0OTAsIDB4MjQwNTIxNzAsIDB4MmMwMzgyMSwgMHhhZmEwMDAxMCwKKzB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHg4ZjQzMDEzOCwgMHg4ZjQ0MDEzOCwKKzB4MjQwMjAwMDEsIDB4YTM0MjA1YzIsIDB4YWY0MzAwOTQsIDB4YWY0NDAwOTgsCisweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmNDYwMDgwLCAweDhmNDcwMDg0LAorMHgzYzA0MDAwMSwgMHgyNDg0NWZhNCwgMHhjMDAyYjNiLCAweDI0MDUyMjAwLAorMHhjMDAyNGE0LCAweDNjMTEwODAwLCAweDNjMTQzM2Q4LCAweDM2OTRjYjU4LAorMHgzYzAyMDgwMCwgMHgzNDQyMDA4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NWZiMCwKKzB4M2MwNTAwMDAsIDB4MjRhNTVkMDAsIDB4M2MwNjAwMDAsIDB4MjRjNjVkMWMsCisweGM1MzAyMywgMHgyN2E3MDAzMCwgMHhhZjgyMDA2MCwgMHgyNDAyZmZmZiwKKzB4YWY4MjAwNjQsIDB4MjdhMjAwMzQsIDB4YzAwMTdhMywgMHhhZmEyMDAxMCwKKzB4M2MwMTAwMDEsIDB4YWMyMjZlYjgsIDB4MjExMDAsIDB4MjExODIsCisweDUxMTAyNSwgMHhjMDAxOGZjLCAweGFlNDIwMDAwLCAweDhmODIwMjQwLAorMHgzYzAzMDAwMSwgMHg0MzEwMjUsIDB4YWY4MjAyNDAsIDB4M2MwMjAwMDAsCisweDI0NDI0MDM0LCAweGFmODIwMjQ0LCAweGFmODAwMjQwLCAweDhmODIwMDYwLAorMHg1MTEwMjQsIDB4MTQ0MDAwMDUsIDB4M2MwMzA4MDAsIDB4OGY4MjAwNjAsCisweDQzMTAyNCwgMHgxMDQwZmZmZCwgMHgwLCAweGMwMDNjNGQsCisweDg4MjEsIDB4M2MwMjAxMDAsIDB4YWZhMjAwMjAsIDB4OGY1MzAwMTgsCisweDI0MDIwMGZmLCAweDU2NjIwMDAxLCAweDI2NzEwMDAxLCAweDhjMDIwMjI4LAorMHgxNjIyMDAwZSwgMHgxMzMwYzAsIDB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzNjLCAweDhmNDIwMzNjLCAweDhjMDIwMjI4LCAweDNjMDQwMDAxLAorMHgyNDg0NWMyNCwgMHgzYzA1MDAwOSwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwKKzB4OGZhNjAwMjAsIDB4MTAwMDAwM2YsIDB4MzRhNTAxMDAsIDB4ZDcxMDIxLAorMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwKKzB4YzAxODIxLCAweDhmNDQwMTc4LCAweDhmNDUwMTdjLCAweDEwMjEsCisweDI0MDcwMDA0LCAweGFmYTcwMDEwLCAweGFmYjEwMDE0LCAweDhmNDgwMDBjLAorMHgyNGM2MDRjMCwgMHgyZTYzMDIxLCAweGFmYTgwMDE4LCAweDhmNDgwMTBjLAorMHgyNDA3MDAwOCwgMHhhMzI4MjEsIDB4YTM0ODJiLCAweDgyMjAyMSwKKzB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4MTQ0MDAwMGIsIDB4MjQwNzAwMDgsCisweDhmODIwMTIwLCAweGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLAorMHgyNDg0NWMyYywgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgMHg4ZmE2MDAyMCwKKzB4MTAwMDAwMWMsIDB4MzRhNTAyMDAsIDB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsCisweDhmNDMwMDBjLCAweGFmNTEwMDE4LCAweDhmODYwMTIwLCAweDI0MDIwMDEwLAorMHhhZmEyMDAxMCwgMHhhZmIxMDAxNCwgMHhhZmEzMDAxOCwgMHg4ZjQyMDEwYywKKzB4NDBmODA5LCAweDI0YzYwMDFjLCAweDE0NDAwMDEwLCAweDAsCisweDhmNDIwMzQwLCAweDI0NDIwMDAxLCAweGFmNDIwMzQwLCAweDhmNDIwMzQwLAorMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDVjMzQsIDB4M2MwNTAwMDksIDB4YWZhMjAwMTQsIDB4OGZhNjAwMjAsCisweDM0YTUwMzAwLCAweGMwMDJiM2IsIDB4MjYwMzgyMSwgMHg4ZjQyMDJlNCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAyZTQsIDB4OGY0MjAyZTQsIDB4OTNhMjAwM2YsCisweDEwNDAwMDY5LCAweDNjMDIwNzAwLCAweDM0NDIzMDAwLCAweGFmYTIwMDI4LAorMHg4ZjUzMDAxOCwgMHgyNDAyMDBmZiwgMHgxMjYyMDAwMiwgMHg4ODIxLAorMHgyNjcxMDAwMSwgMHg4YzAyMDIyOCwgMHgxNjIyMDAwZSwgMHgxMzMwYzAsCisweDhmNDIwMzNjLCAweDI0NDIwMDAxLCAweGFmNDIwMzNjLCAweDhmNDIwMzNjLAorMHg4YzAyMDIyOCwgMHgzYzA0MDAwMSwgMHgyNDg0NWMyNCwgMHgzYzA1MDAwOSwKKzB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsIDB4OGZhNjAwMjgsIDB4MTAwMDAwM2YsCisweDM0YTUwMTAwLCAweGQ3MTAyMSwgMHg4ZmEzMDAyOCwgMHg4ZmE0MDAyYywKKzB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsIDB4YzAxODIxLCAweDhmNDQwMTc4LAorMHg4ZjQ1MDE3YywgMHgxMDIxLCAweDI0MDcwMDA0LCAweGFmYTcwMDEwLAorMHhhZmIxMDAxNCwgMHg4ZjQ4MDAwYywgMHgyNGM2MDRjMCwgMHgyZTYzMDIxLAorMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgyNDA3MDAwOCwgMHhhMzI4MjEsCisweGEzNDgyYiwgMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsCisweDE0NDAwMDBiLCAweDI0MDcwMDA4LCAweDhmODIwMTIwLCAweGFmYTIwMDEwLAorMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NWMyYywgMHgzYzA1MDAwOSwKKzB4YWZhMjAwMTQsIDB4OGZhNjAwMjgsIDB4MTAwMDAwMWMsIDB4MzRhNTAyMDAsCisweDhmNDQwMTYwLCAweDhmNDUwMTY0LCAweDhmNDMwMDBjLCAweGFmNTEwMDE4LAorMHg4Zjg2MDEyMCwgMHgyNDAyMDAxMCwgMHhhZmEyMDAxMCwgMHhhZmIxMDAxNCwKKzB4YWZhMzAwMTgsIDB4OGY0MjAxMGMsIDB4NDBmODA5LCAweDI0YzYwMDFjLAorMHgxNDQwMDAxMCwgMHgwLCAweDhmNDIwMzQwLCAweDI0NDIwMDAxLAorMHhhZjQyMDM0MCwgMHg4ZjQyMDM0MCwgMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwKKzB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDVjMzQsIDB4M2MwNTAwMDksCisweGFmYTIwMDE0LCAweDhmYTYwMDI4LCAweDM0YTUwMzAwLCAweGMwMDJiM2IsCisweDI2MDM4MjEsIDB4OGY0MjAyZjAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZjAsCisweDhmNDIwMmYwLCAweDNjMDQwMDAxLCAweDI0ODQ1ZmMwLCAweGFmYTAwMDEwLAorMHhhZmEwMDAxNCwgMHg4ZmE2MDAyOCwgMHgyNDA1MjMwMCwgMHhjMDAyYjNiLAorMHgzODIxLCAweDEwMDAwMDA0LCAweDAsIDB4OGMwMjAyNjQsCisweDEwNDAwMDA1LCAweDAsIDB4OGY4MjAwYTAsIDB4MzA0MjAwMDQsCisweDE0NDBmZmZhLCAweDAsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMDQsCisweGFmODIwMDQ0LCAweDhmNDIwMzA4LCAweDI0NDIwMDAxLCAweGFmNDIwMzA4LAorMHg4ZjQyMDMwOCwgMHg4ZjgyMDBkOCwgMHg4ZjgzMDBkNCwgMHg0MzEwMjMsCisweDI0NDJmZjgwLCAweGFmNDIwMDkwLCAweDhmNDIwMDkwLCAweDI4NDJmZjgxLAorMHgxMDQwMDAwNiwgMHgyNDAyMDAwMSwgMHg4ZjQyMDA5MCwgMHg4ZjQzMDE0NCwKKzB4NDMxMDIxLCAweGFmNDIwMDkwLCAweDI0MDIwMDAxLCAweGFmNDIwMDhjLAorMHgzMmMyMDAwOCwgMHgxMDQwMDAwNiwgMHgwLCAweDhmODIwMjE0LAorMHgzYzAzODEwMCwgMHgzMDQyZmZmZiwgMHg0MzEwMjUsIDB4YWY4MjAyMTQsCisweDNjMDMwMDAxLCAweDhjNjM2ZDk0LCAweDMwNjIwMDAyLCAweDEwNDAwMDA5LAorMHgzMDYyMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NWZjYywgMHgzYzA1MDAwMCwKKzB4MjRhNTZkNTAsIDB4M2MwNjAwMDAsIDB4MjRjNjcxYzgsIDB4MTAwMDAwMTIsCisweGM1MzAyMywgMHgxMDQwMDAwOSwgMHgwLCAweDNjMDQwMDAxLAorMHgyNDg0NWZkYywgMHgzYzA1MDAwMCwgMHgyNGE1NzFkMCwgMHgzYzA2MDAwMCwKKzB4MjRjNjc2NzgsIDB4MTAwMDAwMDgsIDB4YzUzMDIzLCAweDNjMDQwMDAxLAorMHgyNDg0NWZlYywgMHgzYzA1MDAwMCwgMHgyNGE1Njk0OCwgMHgzYzA2MDAwMCwKKzB4MjRjNjZkNDgsIDB4YzUzMDIzLCAweDI3YTcwMDMwLCAweDI3YTIwMDM0LAorMHhjMDAxN2EzLCAweGFmYTIwMDEwLCAweDNjMDEwMDAxLCAweGFjMjI2ZWNjLAorMHgzYzAyMDAwMSwgMHg4YzQyNmVjYywgMHgzYzAzMDgwMCwgMHgyMTEwMCwKKzB4MjExODIsIDB4NDMxMDI1LCAweGFlNDIwMDQwLCAweDhmODIwMGEwLAorMHhhZmEyMDAxMCwgMHg4ZjgyMDBiMCwgMHhhZmEyMDAxNCwgMHg4Zjg2MDA1YywKKzB4OGY4NzAxMWMsIDB4M2MwNDAwMDEsIDB4MjQ4NDVmZmMsIDB4M2MwMTAwMDEsCisweGFjMzY2ZWE0LCAweDNjMDEwMDAxLCAweGFjMjA2ZTk0LCAweDNjMDEwMDAxLAorMHhhYzNjNmU4YywgMHgzYzAxMDAwMSwgMHhhYzNiNmViYywgMHgzYzAxMDAwMSwKKzB4YWMzNzZlYzAsIDB4M2MwMTAwMDEsIDB4YWMzYTZlYTAsIDB4YzAwMmIzYiwKKzB4MjQwNTI0MDAsIDB4OGY4MjAyMDAsIDB4YWZhMjAwMTAsIDB4OGY4MjAyMjAsCisweGFmYTIwMDE0LCAweDhmODYwMDQ0LCAweDhmODcwMDUwLCAweDNjMDQwMDAxLAorMHgyNDg0NjAwOCwgMHhjMDAyYjNiLCAweDI0MDUyNTAwLCAweDhmODMwMDYwLAorMHg3NDEwMGIsIDB4MjQyMDAwYSwgMHgyMDBmODIxLCAweDAsCisweGQsIDB4OGZiZjAwNjAsIDB4OGZiZTAwNWMsIDB4OGZiNTAwNTgsCisweDhmYjMwMDU0LCAweDhmYjIwMDUwLCAweDhmYjEwMDRjLCAweDhmYjAwMDQ4LAorMHgzZTAwMDA4LCAweDI3YmQwMDY4LCAweDI3YmRmZmUwLCAweDNjMDQwMDAxLAorMHgyNDg0NjAxNCwgMHgyNDA1MjYwMCwgMHgzMDIxLCAweDM4MjEsCisweGFmYmYwMDE4LCAweGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsCisweDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4M2UwMDAwOCwKKzB4MCwgMHgzZTAwMDA4LCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MCwKKzB4M2UwMDAwOCwgMHgwLCAweDNlMDAwMDgsIDB4MCwKKzB4MjdiZGZkZTAsIDB4MjdhNTAwMTgsIDB4M2MwNGRlYWQsIDB4MzQ4NGJlZWYsCisweGFmYmYwMjE4LCAweDhmODIwMTUwLCAweDNjMDMwMDFmLCAweDM0NjNmZmZmLAorMHhhZmE0MDAxOCwgMHhhMjI4MjMsIDB4YTMyODI0LCAweDhjYTIwMDAwLAorMHgxMDQ0MDAwYSwgMHgwLCAweGFmYTUwMDEwLCAweDhjYTIwMDAwLAorMHhhZmEyMDAxNCwgMHg4Zjg2MDE1MCwgMHg4Zjg3MDI1MCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYwMWMsIDB4YzAwMmIzYiwgMHgyNDA1MjcwMCwgMHg4ZmJmMDIxOCwKKzB4M2UwMDAwOCwgMHgyN2JkMDIyMCwgMHgyN2JkZmZlMCwgMHgzYzA2YWJiYSwKKzB4MzRjNmJhYmUsIDB4YWZiMDAwMTgsIDB4M2MxMDAwMDQsIDB4M2MwNzAwN2YsCisweDM0ZTdmZmZmLCAweGFmYmYwMDFjLCAweDEwMjg0MCwgMHg4ZTA0MDAwMCwKKzB4OGNhMzAwMDAsIDB4YWNhMDAwMDAsIDB4YWUwNjAwMDAsIDB4OGNhMjAwMDAsCisweGFjYTMwMDAwLCAweDEwNDYwMDA1LCAweGFlMDQwMDAwLCAweGEwODAyMSwKKzB4ZjAxMDJiLCAweDEwNDBmZmY1LCAweDEwMjg0MCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYwMjgsIDB4MjQwNTI4MDAsIDB4MjAwMzAyMSwgMHgzODIxLAorMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDIwMDEwMjEsCisweDhmYmYwMDFjLCAweDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsCisweDhjMDIwMjI0LCAweDMwNDcwMDNmLCAweDEwZTAwMDEwLCAweDgwMzAyMSwKKzB4MjgyMSwgMHgyNDAzMDAyMCwgMHhlMzEwMjQsIDB4MTA0MDAwMDIsCisweDYzMDQyLCAweGE2MjgyMSwgMHgzMTg0MiwgMHgxNDYwZmZmYiwKKzB4ZTMxMDI0LCAweDI0MDJmMDAwLCAweGEyMjgyNCwgMHgzNDAyZmZmZiwKKzB4NDUxMDJiLCAweDE0NDAwMDAzLCAweDNjMDIwMDAxLCAweDEwMDAwMDA4LAorMHgzYzAyMDAwMSwgMHgzNDQyZmZmZiwgMHg4NTE4MjMsIDB4NDMxMDJiLAorMHgxNDQwMDAwMywgMHhhMDEwMjEsIDB4M2MwMmZmZmUsIDB4ODIxMDIxLAorMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDAsIDB4YWZiNTAwMjgsCisweDhmYjUwMDQwLCAweGFmYjIwMDIwLCAweGEwOTAyMSwgMHhhZmIxMDAxYywKKzB4MjRjNjAwMDMsIDB4YWZiZjAwMmMsIDB4YWZiMzAwMjQsIDB4YWZiMDAwMTgsCisweDhlYTIwMDAwLCAweDI0MDNmZmZjLCAweGMzODAyNCwgMHg1MDEwMmIsCisweDE0NDAwMDFiLCAweGUwODgyMSwgMHg4ZTMzMDAwMCwgMHhhZmIwMDAxMCwKKzB4OGVhMjAwMDAsIDB4YWZhMjAwMTQsIDB4OGUyNzAwMDAsIDB4MjQwNTMwMDAsCisweGMwMDJiM2IsIDB4MjQwMzAyMSwgMHg4ZTIzMDAwMCwgMHg3MDIwMjEsCisweDY0MTAyYiwgMHgxMDQwMDAwNywgMHgyNDAyODIxLCAweDhjYTIwMDAwLAorMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgMHg2NDEwMmIsIDB4MTQ0MGZmZmIsCisweDI0YTUwMDA0LCAweDhlYTIwMDAwLCAweDUwMTAyMywgMHhhZWEyMDAwMCwKKzB4OGUyMjAwMDAsIDB4NTAxMDIxLCAweDEwMDAwMDBiLCAweGFlMjIwMDAwLAorMHgyNDAyMDAyZCwgMHhhMDgyMDAwMCwgMHhhZmIwMDAxMCwgMHg4ZWEyMDAwMCwKKzB4MjQwOTgyMSwgMHhhZmEyMDAxNCwgMHg4ZTI3MDAwMCwgMHgyNDA1MzEwMCwKKzB4YzAwMmIzYiwgMHgyNjAzMDIxLCAweDI2MDEwMjEsIDB4OGZiZjAwMmMsCisweDhmYjUwMDI4LCAweDhmYjMwMDI0LCAweDhmYjIwMDIwLCAweDhmYjEwMDFjLAorMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDMwLCAweDI3YmRmZmU4LAorMHgzYzFjYzAwMCwgMHgzYzA1ZmZmZSwgMHgzYzAzMDAwMSwgMHg4YzYzNmU4NCwKKzB4M2MwNDAwMDEsIDB4OGM4NDZlOTAsIDB4MzRhNWJmMDgsIDB4MjQwMjFmZmMsCisweDNjMDEwMDAxLCAweGFjMjI2Y2QwLCAweDNjMDIwMGMwLCAweDNjMDEwMDAxLAorMHhhYzIyNmNkNCwgMHgzYzAyMDAyMCwgMHhhZmJmMDAxMCwgMHgzYzAxMDBjMCwKKzB4YWMyMDFmZmMsIDB4NDMxMDIzLCAweDQ0MTAyMywgMHgyNDViYjAwMCwKKzB4MzY1YjgyMSwgMHgzYzFkMDAwMSwgMHg4ZmJkNmNjYywgMHgzYTBmMDIxLAorMHgzYzA0MDBjMCwgMHgzNDg0MDIwMCwgMHgzYzFhMDBjMCwgMHgzYzAzMDBjMCwKKzB4MzQ2MzA3YzgsIDB4MjQwMjFkZmMsIDB4M2MwMTAwMDEsIDB4YWMyMjZjZDAsCisweDI0MDIxODM0LCAweDNjMDEwMDAxLCAweGFjMjQ2Y2Q0LCAweDNjMDEwMDAxLAorMHhhYzIyNmNkMCwgMHgzYzAxMDAwMSwgMHhhYzIzNmNkNCwgMHhjMDAxODBkLAorMHgzNzVhMDIwMCwgMHg4ZmJmMDAxMCwgMHgzZTAwMDA4LCAweDI3YmQwMDE4LAorMHgyN2JkZmZjOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjAzNCwgMHgyNDA1MzIwMCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZjZDAsIDB4M2MwMzAwMDEsIDB4OGM2MzZjZDQsCisweDMwMjEsIDB4MzYwMzgyMSwgMHhhZmJmMDAzMCwgMHhhZmIzMDAyYywKKzB4YWZiMjAwMjgsIDB4YWZiMTAwMjQsIDB4YWZiMDAwMjAsIDB4YWZhMjAwMWMsCisweGFmYTMwMDE4LCAweGFmYjcwMDEwLCAweGMwMDJiM2IsIDB4YWZiYTAwMTQsCisweGMwMDE5MTYsIDB4MCwgMHg4ZjgyMDI0MCwgMHgzNDQyMDAwNCwKKzB4YWY4MjAyNDAsIDB4MjQwMjAwMDEsIDB4YWY0MjAwMDAsIDB4M2MwMjAwMDEsCisweDU3MTAyMSwgMHg5MDQyNDBmNCwgMHgxMDQwMDA5MiwgMHgyNDAzZmZmYywKKzB4M2MxMDAwMDEsIDB4MjYxMGFjNzMsIDB4M2MxMjAwMDEsIDB4MjY1MmE4NGMsCisweDIxMjEwMjMsIDB4NDM4MDI0LCAweDhmYTMwMDFjLCAweDNjMDQwMDAxLAorMHgyNDg0NjA0MCwgMHg3MDEwMmIsIDB4MTQ0MDAwMWEsIDB4MjdiMzAwMTgsCisweDhmYjEwMDE4LCAweDI0MDUzMDAwLCAweDI0MDMwMjEsIDB4YWZiMDAwMTAsCisweGFmYTMwMDE0LCAweGMwMDJiM2IsIDB4MjIwMzgyMSwgMHg4ZmEzMDAxOCwKKzB4NzAyMDIxLCAweDY0MTAyYiwgMHgxMDQwMDAwNywgMHgyNDAzMDIxLAorMHg4Y2MyMDAwMCwgMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgMHg2NDEwMmIsCisweDE0NDBmZmZiLCAweDI0YzYwMDA0LCAweDhmYTIwMDFjLCAweDUwMTAyMywKKzB4YWZhMjAwMWMsIDB4OGU2MjAwMDAsIDB4NTAxMDIxLCAweDEwMDAwMDBhLAorMHhhZTYyMDAwMCwgMHgyNDA4ODIxLCAweDI0MDUzMTAwLCAweGFmYjAwMDEwLAorMHhhZmEzMDAxNCwgMHg4ZmE3MDAxOCwgMHgyMjAzMDIxLCAweDI0MDIwMDJkLAorMHhjMDAyYjNiLCAweGEwODIwMDAwLCAweDI0MDcwMDIwLCAweDhmYTMwMDFjLAorMHgzYzA0MDAwMSwgMHgyNDg0NjA1YywgMHgyNDEyMDAyMCwgMHgzYzAxMDAwMSwKKzB4YWMzMTZlYjAsIDB4MmM2MjAwMjAsIDB4MTQ0MDAwMWQsIDB4MjdiMTAwMTgsCisweDhmYjAwMDE4LCAweDI0MDUzMDAwLCAweDNjMDYwMDAxLCAweDI0YzY2ZjUwLAorMHhhZmE3MDAxMCwgMHhhZmEzMDAxNCwgMHhjMDAyYjNiLCAweDIwMDM4MjEsCisweDhmYTMwMDE4LCAweDNjMDQwMDAxLCAweDI0ODQ2ZjUwLCAweDI0NjUwMDIwLAorMHg2NTEwMmIsIDB4MTA0MDAwMDcsIDB4MCwgMHg4YzgyMDAwMCwKKzB4YWM2MjAwMDAsIDB4MjQ2MzAwMDQsIDB4NjUxMDJiLCAweDE0NDBmZmZiLAorMHgyNDg0MDAwNCwgMHg4ZmEyMDAxYywgMHg1MjEwMjMsIDB4YWZhMjAwMWMsCisweDhlMjIwMDAwLCAweDUyMTAyMSwgMHgxMDAwMDAwYiwgMHhhZTIyMDAwMCwKKzB4M2MxMDAwMDEsIDB4MjYxMDZmNTAsIDB4MjQwNTMxMDAsIDB4YWZhNzAwMTAsCisweGFmYTMwMDE0LCAweDhmYTcwMDE4LCAweDIwMDMwMjEsIDB4MjQwMjAwMmQsCisweGMwMDJiM2IsIDB4YTA4MjAwMDAsIDB4MjQwNzAwMjAsIDB4M2MwNDAwMDEsCisweDI0ODQ2MDcwLCAweDhmYTMwMDFjLCAweDI0MTIwMDIwLCAweDNjMDEwMDAxLAorMHhhYzMwNmVlNCwgMHgyYzYyMDAyMCwgMHgxNDQwMDAxZCwgMHgyN2IxMDAxOCwKKzB4OGZiMDAwMTgsIDB4MjQwNTMwMDAsIDB4M2MwNjAwMDEsIDB4MjRjNjZmNzAsCisweGFmYTcwMDEwLCAweGFmYTMwMDE0LCAweGMwMDJiM2IsIDB4MjAwMzgyMSwKKzB4OGZhMzAwMTgsIDB4M2MwNDAwMDEsIDB4MjQ4NDZmNzAsIDB4MjQ2NTAwMjAsCisweDY1MTAyYiwgMHgxMDQwMDAwNywgMHgwLCAweDhjODIwMDAwLAorMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgMHg2NTEwMmIsIDB4MTQ0MGZmZmIsCisweDI0ODQwMDA0LCAweDhmYTIwMDFjLCAweDUyMTAyMywgMHhhZmEyMDAxYywKKzB4OGUyMjAwMDAsIDB4NTIxMDIxLCAweDEwMDAwMDBiLCAweGFlMjIwMDAwLAorMHgzYzEwMDAwMSwgMHgyNjEwNmY3MCwgMHgyNDA1MzEwMCwgMHhhZmE3MDAxMCwKKzB4YWZhMzAwMTQsIDB4OGZhNzAwMTgsIDB4MjAwMzAyMSwgMHgyNDAyMDAyZCwKKzB4YzAwMmIzYiwgMHhhMDgyMDAwMCwgMHgzYzAxMDAwMSwgMHgxMDAwMDAzMSwKKzB4YWMzMDZlZTAsIDB4M2MxMDAwMDEsIDB4MjYxMDgyMWYsIDB4M2MxMjAwMDEsCisweDI2NTI4MDljLCAweDIxMjEwMjMsIDB4NDM4MDI0LCAweDhmYTMwMDFjLAorMHgzYzA0MDAwMSwgMHgyNDg0NjA4NCwgMHg3MDEwMmIsIDB4MTQ0MDAwMWEsCisweDI3YjMwMDE4LCAweDhmYjEwMDE4LCAweDI0MDUzMDAwLCAweDI0MDMwMjEsCisweGFmYjAwMDEwLCAweGFmYTMwMDE0LCAweGMwMDJiM2IsIDB4MjIwMzgyMSwKKzB4OGZhMzAwMTgsIDB4NzAyMDIxLCAweDY0MTAyYiwgMHgxMDQwMDAwNywKKzB4MjQwMzAyMSwgMHg4Y2MyMDAwMCwgMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwKKzB4NjQxMDJiLCAweDE0NDBmZmZiLCAweDI0YzYwMDA0LCAweDhmYTIwMDFjLAorMHg1MDEwMjMsIDB4YWZhMjAwMWMsIDB4OGU2MjAwMDAsIDB4NTAxMDIxLAorMHgxMDAwMDAwYSwgMHhhZTYyMDAwMCwgMHgyNDA4ODIxLCAweDI0MDUzMTAwLAorMHhhZmIwMDAxMCwgMHhhZmEzMDAxNCwgMHg4ZmE3MDAxOCwgMHgyMjAzMDIxLAorMHgyNDAyMDAyZCwgMHhjMDAyYjNiLCAweGEwODIwMDAwLCAweDNjMDEwMDAxLAorMHhhYzMxNmViMCwgMHgzYzAzMDAwMSwgMHg4YzYzNmViMCwgMHgyNDAyMDQwMCwKKzB4NjBmODA5LCAweGFmODIwMDcwLCAweDhmYmYwMDMwLCAweDhmYjMwMDJjLAorMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LAorMHgyN2JkMDAzOCwgMHgwLCAweDAsIDB4OGY4MjAwNDAsCisweDNjMDNmMDAwLCAweDQzMTAyNCwgMHgzYzAzNjAwMCwgMHgxNDQzMDAwNiwKKzB4MCwgMHg4ZjgyMDA1MCwgMHgyNDAzZmY4MCwgMHg0MzEwMjQsCisweDM0NDIwMDU1LCAweGFmODIwMDUwLCAweDhmODIwMDU0LCAweDI0NDIwM2U4LAorMHhhZjgyMDA1OCwgMHgyNDAyMDFmNCwgMHhhZjQyMDBlMCwgMHgyNDAyMDAwNCwKKzB4YWY0MjAwZTgsIDB4MjQwMjAwMDIsIDB4YWY0MDAxYjAsIDB4YWY0MDAwZTQsCisweGFmNDIwMGRjLCAweGFmNDAwMGQ4LCAweGFmNDAwMGQ0LCAweDNlMDAwMDgsCisweGFmNDAwMGQwLCAweDhmODIwMDU0LCAweDI0NDIwMDA1LCAweDNlMDAwMDgsCisweGFmODIwMDc4LCAweDI3YmRmZmU4LCAweGFmYmYwMDEwLCAweDhmODIwMDU0LAorMHgyNDQyMDNlOCwgMHhhZjgyMDA1OCwgMHgzYzAyMDgwMCwgMHgyYzIxMDI0LAorMHgxMDQwMDAwNCwgMHgzYzAyZjdmZiwgMHgzNDQyZmZmZiwgMHgyYzJiMDI0LAorMHgzNjk0MDA0MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhOCwgMHgxMDQwMDAxNywKKzB4M2MwMjAyMDAsIDB4M2MwMzAwMDEsIDB4OGM2MzZmMWMsIDB4MTA2MDAwMTYsCisweDI4MmEwMjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4MTQ0MDAwMTIsCisweDNjMDIwMjAwLCAweDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAweDMwNDIwMDAzLAorMHgxNDQwMDAwZCwgMHgzYzAyMDIwMCwgMHg4ZjgzMDIyNCwgMHgzYzAyMDAwMiwKKzB4OGM0MjhmZWMsIDB4MTA2MjAwMDgsIDB4M2MwMjAyMDAsIDB4YzAwM2RhZiwKKzB4MCwgMHgxMDAwMDAwNCwgMHgzYzAyMDIwMCwgMHhjMDA0MTk2LAorMHgwLCAweDNjMDIwMjAwLCAweDJjMjEwMjQsIDB4MTA0MDAwMDMsCisweDAsIDB4YzAwMWY0YiwgMHgwLCAweDhmNDIwMGQ4LAorMHg4ZjQzMDBkYywgMHgyNDQyMDAwMSwgMHhhZjQyMDBkOCwgMHg0MzEwMmIsCisweDE0NDAwMDAzLCAweDAsIDB4YWY0MDAwZDgsIDB4MzY5NDAwODAsCisweDhjMDMwMjM4LCAweDEwNjAwMDBjLCAweDAsIDB4OGY0MjAxYjAsCisweDI0NDIwM2U4LCAweGFmNDIwMWIwLCAweDQzMTAyYiwgMHgxNDQwMDAwNiwKKzB4MCwgMHg5MzQyMDVjNSwgMHgxNDQwMDAwMywgMHgwLAorMHhjMDAxZGEwLCAweDAsIDB4OGZiZjAwMTAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMTgsIDB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmQ4LAorMHhhZmJmMDAyMCwgMHg4ZjQzMDAyYywgMHg4ZjQyMDAzOCwgMHgxMDYyMDA1OSwKKzB4MCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OTA0MjQwZjAsCisweDEwNDAwMDI2LCAweDI0MDcwMDA4LCAweDhmNDQwMTcwLCAweDhmNDUwMTc0LAorMHg4ZjQ4MDAwYywgMHg4Zjg2MDEyMCwgMHgyNDAyMDAyMCwgMHhhZmEyMDAxMCwKKzB4YWZhMzAwMTQsIDB4YWZhODAwMTgsIDB4OGY0MjAxMGMsIDB4NDBmODA5LAorMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGEwMjI0MGYwLCAweDhmODIwMTI0LCAweGFmYTIwMDEwLAorMHg4ZjgyMDEyOCwgMHgzYzA0MDAwMSwgMHgyNDg0NjEyOCwgMHhhZmEyMDAxNCwKKzB4OGY0NjAwMmMsIDB4OGY4NzAxMjAsIDB4M2MwNTAwMDksIDB4YzAwMmIzYiwKKzB4MzRhNTA5MDAsIDB4MTAwMDAwNWMsIDB4MCwgMHg4ZjQyMDMwMCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzMDAsIDB4OGY0MjAzMDAsIDB4OGY0MjAwMmMsCisweGEzNDAwNWMxLCAweDEwMDAwMDI3LCAweGFmNDIwMDM4LCAweDhmNDQwMTcwLAorMHg4ZjQ1MDE3NCwgMHg4ZjQzMDAyYywgMHg4ZjQ4MDAwYywgMHg4Zjg2MDEyMCwKKzB4MjQwMjAwODAsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIDB4YWZhODAwMTgsCisweDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjI0MGYxLAorMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyOCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYxMzQsIDB4YWZhMjAwMTQsIDB4OGY0NjAwMmMsIDB4OGY4NzAxMjAsCisweDNjMDUwMDA5LCAweGMwMDJiM2IsIDB4MzRhNTExMDAsIDB4MTAwMDAwMzYsCisweDAsIDB4OGY0MjAzMDAsIDB4OGY0MzAwMmMsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzAwLCAweDhmNDIwMzAwLCAweDI0MDIwMDAxLCAweGEzNDIwNWMxLAorMHhhZjQzMDAzOCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMDQwZjEsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMCwgMHgxMDAwMDAyNiwKKzB4YWY0MDAwMzQsIDB4OTM0MjA1YzEsIDB4MTA0MDAwMWQsIDB4MCwKKzB4YTM0MDA1YzEsIDB4OGY4MjAwNDAsIDB4MzA0MjAwMDEsIDB4MTQ0MDAwMDgsCisweDIwMjEsIDB4OGMwMzAxMDQsIDB4MjQwMjAwMDEsIDB4NTA2MjAwMDUsCisweDI0MDQwMDAxLCAweDhjMDIwMjY0LCAweDEwNDAwMDAzLCAweDgwMTAyMSwKKzB4MjQwNDAwMDEsIDB4ODAxMDIxLCAweDEwNDAwMDA2LCAweDAsCisweDhmNDIwMzBjLCAweDI0NDIwMDAxLCAweGFmNDIwMzBjLCAweDEwMDAwMDA4LAorMHg4ZjQyMDMwYywgMHg4ZjgyMDA0NCwgMHgzNDQyMDAwNCwgMHhhZjgyMDA0NCwKKzB4OGY0MjAzMDgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDIwNDBmMCwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGEwMjA0MGYxLCAweDhmNDIwMDAwLCAweDEwNDAwMDA3LAorMHgwLCAweGFmODAwMDRjLCAweDhmODIwMDRjLCAweDEwNDBmZmZkLAorMHgwLCAweDEwMDAwMDA1LCAweDAsIDB4YWY4MDAwNDgsCisweDhmODIwMDQ4LCAweDEwNDBmZmZkLCAweDAsIDB4OGY4MjAwNjAsCisweDNjMDNmZjdmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA2MCwKKzB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsIDB4MCwgMHgxMDAwMDAwMiwKKzB4YWY4MDAwNGMsIDB4YWY4MDAwNDgsIDB4OGZiZjAwMjAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMjgsIDB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmQ4LAorMHhhZmJmMDAyMCwgMHg4ZjQzMDA0NCwgMHg4ZjQyMDA3YywgMHgxMDYyMDAyOSwKKzB4MjQwNzAwMDgsIDB4OGY0NDAxNjgsIDB4OGY0NTAxNmMsIDB4OGY0ODAwMGMsCisweDhmODYwMTIwLCAweDI0MDIwMDQwLCAweGFmYTIwMDEwLCAweGFmYTMwMDE0LAorMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsCisweDE0NDAwMDExLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwKKzB4YTAyMjQwZjIsIDB4OGY4MjAxMjQsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjgsCisweDNjMDQwMDAxLCAweDI0ODQ2MTNjLCAweGFmYTIwMDE0LCAweDhmNDYwMDQ0LAorMHg4Zjg3MDEyMCwgMHgzYzA1MDAwOSwgMHhjMDAyYjNiLCAweDM0YTUxMzAwLAorMHgxMDAwMDAwZiwgMHgwLCAweDhmNDIwMzA0LCAweDI0NDIwMDAxLAorMHhhZjQyMDMwNCwgMHg4ZjQyMDMwNCwgMHg4ZjQyMDA0NCwgMHhhZjQyMDA3YywKKzB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA0MGYyLCAweDEwMDAwMDA0LAorMHhhZjQwMDA3OCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMDQwZjIsCisweDhmNDIwMDAwLCAweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsCisweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsCisweDAsIDB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsCisweDAsIDB4OGY4MjAwNjAsIDB4M2MwM2ZlZmYsIDB4MzQ2M2ZmZmYsCisweDQzMTAyNCwgMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywKKzB4MCwgMHgxMDAwMDAwMiwgMHhhZjgwMDA0YywgMHhhZjgwMDA0OCwKKzB4OGZiZjAwMjAsIDB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzZTAwMDA4LAorMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZGE4LCAweDI3YmRmZmE4LAorMHhhZmJmMDA1MCwgMHhhZmJlMDA0YywgMHhhZmI1MDA0OCwgMHhhZmIzMDA0NCwKKzB4YWZiMjAwNDAsIDB4YWZiMTAwM2MsIDB4YWZiMDAwMzgsIDB4MTA0MDAwZDUsCisweDhmOTAwMDQ0LCAweDhmNDIwMGQwLCAweDI0NDMwMDAxLCAweDI4NDIwMDBiLAorMHgxNDQwMDBlNCwgMHhhZjQzMDBkMCwgMHg4ZjQyMDAwNCwgMHgzMDQyMDAwMiwKKzB4MTQ0MDAwOWMsIDB4YWY0MDAwZDAsIDB4OGY0MjAwMDQsIDB4M2MwMzAwMDEsCisweDhjNjM2ZDk4LCAweDM0NDIwMDAyLCAweGFmNDIwMDA0LCAweDI0MDIwMDAxLAorMHgxNDYyMDAwMywgMHgzYzAyMDYwMCwgMHgxMDAwMDAwMiwgMHgzNDQyMzAwMCwKKzB4MzQ0MjEwMDAsIDB4YWZhMjAwMjAsIDB4OGY0YTAwMTgsIDB4YWZhYTAwMzQsCisweDI3YWEwMDIwLCAweGFmYWEwMDJjLCAweDhmYWEwMDM0LCAweDI0MDIwMGZmLAorMHgxMTQyMDAwMiwgMHgxODIxLCAweDI1NDMwMDAxLCAweDhjMDIwMjI4LAorMHg2MDk4MjEsIDB4MTY2MjAwMGUsIDB4M2MwNTAwMDksIDB4OGY0MjAzM2MsCisweDI0NDIwMDAxLCAweGFmNDIwMzNjLCAweDhmNDIwMzNjLCAweDhjMDIwMjI4LAorMHg4ZmE3MDAzNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjEwYywgMHhhZmEwMDAxNCwKKzB4YWZhMjAwMTAsIDB4OGZhNjAwMjAsIDB4MTAwMDAwNzAsIDB4MzRhNTA1MDAsCisweDhmYWEwMDM0LCAweGEzOGMwLCAweGY3MTAyMSwgMHg4ZmEzMDAyMCwKKzB4OGZhNDAwMjQsIDB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsIDB4OGY4MzAwNTQsCisweDhmODIwMDU0LCAweDI0NzEwM2U4LCAweDIyMjEwMjMsIDB4MmM0MjAzZTksCisweDEwNDAwMDFiLCAweGE4MjEsIDB4ZTA5MDIxLCAweDI2NWUwNGMwLAorMHg4ZjQ0MDE3OCwgMHg4ZjQ1MDE3YywgMHgyNDAxODIxLCAweDI0MGEwMDA0LAorMHhhZmFhMDAxMCwgMHhhZmIzMDAxNCwgMHg4ZjQ4MDAwYywgMHgxMDIxLAorMHgyZmUzMDIxLCAweGFmYTgwMDE4LCAweDhmNDgwMTBjLCAweDI0MDcwMDA4LAorMHhhMzI4MjEsIDB4YTM0ODJiLCAweDgyMjAyMSwgMHgxMDBmODA5LAorMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIDB4MjQxNTAwMDEsIDB4OGY4MjAwNTQsCisweDIyMjEwMjMsIDB4MmM0MjAzZTksIDB4MTQ0MGZmZTksIDB4MCwKKzB4MzJhMjAwZmYsIDB4NTQ0MDAwMTgsIDB4YWY1MzAwMTgsIDB4OGY0MjAzNzgsCisweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LCAweDhmODIwMTIwLAorMHg4ZmFhMDAyYywgMHg4ZmE3MDAzNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDYxMTgsIDB4YWZhMjAwMTQsIDB4OGQ0NjAwMDAsCisweDNjMDUwMDA5LCAweDEwMDAwMDM1LCAweDM0YTUwNjAwLCAweDhmNDIwMzA4LAorMHgyNDE1MDAwMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwKKzB4MTAwMDAwMWUsIDB4MzJhMjAwZmYsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsCisweDI0NzEwM2U4LCAweDIyMjEwMjMsIDB4MmM0MjAzZTksIDB4MTA0MDAwMTYsCisweGE4MjEsIDB4M2MxZTAwMjAsIDB4MjQxMjAwMTAsIDB4OGY0MjAwMGMsCisweDhmNDQwMTYwLCAweDhmNDUwMTY0LCAweDhmODYwMTIwLCAweGFmYjIwMDEwLAorMHhhZmIzMDAxNCwgMHg1ZTEwMjUsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsCisweDI0MDcwMDA4LCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwZmZlMywKKzB4MCwgMHg4ZjgyMDA1NCwgMHgyMjIxMDIzLCAweDJjNDIwM2U5LAorMHgxNDQwZmZlZSwgMHgwLCAweDMyYTIwMGZmLCAweDE0NDAwMDExLAorMHgzYzA1MDAwOSwgMHg4ZjQyMDM3OCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM3OCwKKzB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsIDB4OGZhNzAwMzQsCisweGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2MTIwLAorMHhhZmEyMDAxNCwgMHg4ZDQ2MDAwMCwgMHgzNGE1MDcwMCwgMHhjMDAyYjNiLAorMHgwLCAweDhmNDIwMmVjLCAweDI0NDIwMDAxLCAweGFmNDIwMmVjLAorMHg4ZjQyMDJlYywgMHg4ZjQyMDAwNCwgMHgzMDQyMDAwMSwgMHg1MDQwMDAyOSwKKzB4MzYxMDAwNDAsIDB4M2MwMjA0MDAsIDB4MmMyMTAyNCwgMHgxMDQwMDAxMywKKzB4MjQwNGZmZGYsIDB4OGY0MjAyNTAsIDB4OGY0MzAyNTQsIDB4OGY0NDAxYjQsCisweDE0NjQwMDA2LCAweDM2MTAwMDQwLCAweDhmNDIwMjcwLCAweDhmNDMwMjc0LAorMHg4ZjQ0MDFiOCwgMHgxMDY0MDAwNywgMHgyNDAyZmZkZiwgMHg4ZjQyMDI1MCwKKzB4OGY0MzAyNTQsIDB4OGY0NDAyNzAsIDB4OGY0NTAyNzQsIDB4MTAwMDAwMTIsCisweDNhMTAwMDIwLCAweDEwMDAwMDJiLCAweDIwMjgwMjQsIDB4OGY0MjAyNTAsCisweDhmNDMwMjU0LCAweDhmNDUwMWI0LCAweDE0NjUwMDA2LCAweDIwNDgwMjQsCisweDhmNDIwMjcwLCAweDhmNDMwMjc0LCAweDhmNDQwMWI4LCAweDUwNjQwMDIxLAorMHgzNjEwMDA0MCwgMHg4ZjQyMDI1MCwgMHg4ZjQzMDI1NCwgMHg4ZjQ0MDI3MCwKKzB4OGY0NTAyNzQsIDB4M2ExMDAwNDAsIDB4YWY0MzAxYjQsIDB4MTAwMDAwMTksCisweGFmNDUwMWI4LCAweDhmNDIwMGQ0LCAweDI0NDMwMDAxLCAweDEwMDAwMDExLAorMHgyODQyMDAzMywgMHg4ZjQyMDAwNCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAwOSwKKzB4M2MwMjA0MDAsIDB4MmMyMTAyNCwgMHgxMDQwMDAwNCwgMHgyNDAyZmZkZiwKKzB4MjAyODAyNCwgMHgxMDAwMDAwYiwgMHgzNjEwMDA0MCwgMHgxMDAwMDAwOSwKKzB4MzYxMDAwNjAsIDB4OGY0MjAwZDQsIDB4MzYxMDAwNDAsIDB4MjQ0MzAwMDEsCisweDI4NDIwMWY1LCAweDE0NDAwMDAzLCAweGFmNDMwMGQ0LCAweGFmNDAwMGQ0LAorMHgzYTEwMDAyMCwgMHhhZjkwMDA0NCwgMHgyNDAyZmY3ZiwgMHgyODJhMDI0LAorMHg4ZmJmMDA1MCwgMHg4ZmJlMDA0YywgMHg4ZmI1MDA0OCwgMHg4ZmIzMDA0NCwKKzB4OGZiMjAwNDAsIDB4OGZiMTAwM2MsIDB4OGZiMDAwMzgsIDB4M2UwMDAwOCwKKzB4MjdiZDAwNTgsIDB4M2UwMDAwOCwgMHgwLCAweDNjMDIwMDAxLAorMHg4YzQyNmRhOCwgMHgyN2JkZmZiMCwgMHhhZmJmMDA0OCwgMHhhZmJlMDA0NCwKKzB4YWZiNTAwNDAsIDB4YWZiMzAwM2MsIDB4YWZiMjAwMzgsIDB4YWZiMTAwMzQsCisweDEwNDAwMGM3LCAweGFmYjAwMDMwLCAweDhmNDIwMGQwLCAweDI0NDMwMDAxLAorMHgyODQyMDAwYiwgMHgxNDQwMDBkYSwgMHhhZjQzMDBkMCwgMHg4ZjQyMDAwNCwKKzB4MzA0MjAwMDIsIDB4MTQ0MDAwOTcsIDB4YWY0MDAwZDAsIDB4OGY0MjAwMDQsCisweDNjMDMwMDAxLCAweDhjNjM2ZDk4LCAweDM0NDIwMDAyLCAweGFmNDIwMDA0LAorMHgyNDAyMDAwMSwgMHgxNDYyMDAwMywgMHgzYzAyMDYwMCwgMHgxMDAwMDAwMiwKKzB4MzQ0MjMwMDAsIDB4MzQ0MjEwMDAsIDB4YWZhMjAwMjAsIDB4MTgyMSwKKzB4OGY1ZTAwMTgsIDB4MjdhYTAwMjAsIDB4MjQwMjAwZmYsIDB4MTNjMjAwMDIsCisweGFmYWEwMDJjLCAweDI3YzMwMDAxLCAweDhjMDIwMjI4LCAweDYwOTAyMSwKKzB4MTY0MjAwMGUsIDB4MWUzOGMwLCAweDhmNDIwMzNjLCAweDI0NDIwMDAxLAorMHhhZjQyMDMzYywgMHg4ZjQyMDMzYywgMHg4YzAyMDIyOCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYxMGMsIDB4M2MwNTAwMDksIDB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsCisweDhmYTYwMDIwLCAweDEwMDAwMDZkLCAweDM0YTUwNTAwLCAweGY3MTAyMSwKKzB4OGZhMzAwMjAsIDB4OGZhNDAwMjQsIDB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsCisweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsCisweDJjNDIwM2U5LCAweDEwNDAwMDFiLCAweDk4MjEsIDB4ZTA4ODIxLAorMHgyNjM1MDRjMCwgMHg4ZjQ0MDE3OCwgMHg4ZjQ1MDE3YywgMHgyMjAxODIxLAorMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwgMHhhZmIyMDAxNCwgMHg4ZjQ4MDAwYywKKzB4MTAyMSwgMHgyZjUzMDIxLCAweGFmYTgwMDE4LCAweDhmNDgwMTBjLAorMHgyNDA3MDAwOCwgMHhhMzI4MjEsIDB4YTM0ODJiLCAweDgyMjAyMSwKKzB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIDB4MjQxMzAwMDEsCisweDhmODIwMDU0LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTQ0MGZmZTksCisweDAsIDB4MzI2MjAwZmYsIDB4NTQ0MDAwMTcsIDB4YWY1MjAwMTgsCisweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LAorMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDYxMTgsIDB4M2MwNTAwMDksIDB4YWZhMjAwMTQsCisweDhkNDYwMDAwLCAweDEwMDAwMDM1LCAweDM0YTUwNjAwLCAweDhmNDIwMzA4LAorMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwKKzB4MTAwMDAwMWUsIDB4MzI2MjAwZmYsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsCisweDI0NzAwM2U4LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTA0MDAwMTYsCisweDk4MjEsIDB4M2MxNTAwMjAsIDB4MjQxMTAwMTAsIDB4OGY0MjAwMGMsCisweDhmNDQwMTYwLCAweDhmNDUwMTY0LCAweDhmODYwMTIwLCAweGFmYjEwMDEwLAorMHhhZmIyMDAxNCwgMHg1NTEwMjUsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsCisweDI0MDcwMDA4LCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwZmZlMywKKzB4MCwgMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LAorMHgxNDQwZmZlZSwgMHgwLCAweDMyNjIwMGZmLCAweDE0NDAwMDExLAorMHgwLCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LAorMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywgMHhhZmEyMDAxMCwKKzB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxMjAsIDB4M2MwNTAwMDksCisweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDM0YTUwNzAwLCAweGMwMDJiM2IsCisweDNjMDM4MjEsIDB4OGY0MjAyZWMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZWMsCisweDhmNDIwMmVjLCAweDhmNDIwMDA0LCAweDMwNDIwMDAxLCAweDEwNDAwMDE4LAorMHgyNDA0MDAwMSwgMHg4ZjQyMDI1MCwgMHg4ZjQzMDI1NCwgMHg4ZjQ1MDFiNCwKKzB4M2MwMTAwMDEsIDB4MTQ2NTAwMDYsIDB4YTAyNDZjZjEsIDB4OGY0MjAyNzAsCisweDhmNDMwMjc0LCAweDhmNDQwMWI4LCAweDEwNjQwMDIxLCAweDAsCisweDhmNDIwMjUwLCAweDhmNDMwMjU0LCAweDNjMDQwMDAxLCAweDkwODQ2Y2YwLAorMHg4ZjQ2MDI3MCwgMHg4ZjQ3MDI3NCwgMHgzODg0MDAwMSwgMHhhZjQzMDFiNCwKKzB4YWY0NzAxYjgsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMjUsIDB4YTAyNDZjZjAsCisweDhmNDIwMGQ0LCAweDNjMDEwMDAxLCAweGEwMjA2Y2YwLCAweDI0NDMwMDAxLAorMHgyODQyMDAzMywgMHgxNDQwMDAxZSwgMHhhZjQzMDBkNCwgMHgzYzAyMDAwMSwKKzB4OTA0MjZjZjEsIDB4YWY0MDAwZDQsIDB4MTAwMDAwMTcsIDB4Mzg0MjAwMDEsCisweDhmNDIwMDA0LCAweDMwNDIwMDAxLCAweDEwNDAwMDA4LCAweDAsCisweGMwMDU2NWEsIDB4MjAyMSwgMHgzYzAxMDAwMSwgMHhhMDIwNmNmMSwKKzB4M2MwMTAwMDEsIDB4MTAwMDAwMGUsIDB4YTAyMDZjZjAsIDB4OGY0MjAwZDQsCisweDNjMDEwMDAxLCAweGEwMjA2Y2YwLCAweDI0NDMwMDAxLCAweDI4NDIwMWY1LAorMHgxNDQwMDAwNywgMHhhZjQzMDBkNCwgMHgzYzAyMDAwMSwgMHg5MDQyNmNmMSwKKzB4YWY0MDAwZDQsIDB4NDIxMDI2LCAweDNjMDEwMDAxLCAweGEwMjI2Y2YxLAorMHgzYzAzMDAwMSwgMHg4YzYzNmQ5OCwgMHgyNDAyMDAwMiwgMHgxNDYyMDAwYywKKzB4M2MwMzAwMDIsIDB4M2MwMzAwMDEsIDB4OTA2MzZjZjEsIDB4MjQwMjAwMDEsCisweDU0NjIwMDFmLCAweDIwMjEsIDB4M2MwMjAwMDEsIDB4OTA0MjZjZjAsCisweDE0NDMwMDFiLCAweDI0MDQwMDA1LCAweDEwMDAwMDE5LCAweDI0MDQwMDA2LAorMHgzYzAyMDAwMiwgMHg4YzQyOGZmNCwgMHg0MzEwMjQsIDB4MTA0MDAwMGIsCisweDI0MDIwMDAxLCAweDNjMDMwMDAxLCAweDkwNjM2Y2YxLCAweDU0NjIwMDEwLAorMHgyMDIxLCAweDNjMDIwMDAxLCAweDkwNDI2Y2YwLCAweDE0NDMwMDBjLAorMHgyNDA0MDAwMywgMHgxMDAwMDAwYSwgMHgyNDA0MDAwNCwgMHgzYzAzMDAwMSwKKzB4OTA2MzZjZjEsIDB4MTQ2MjAwMDYsIDB4MjAyMSwgMHgzYzAyMDAwMSwKKzB4OTA0MjZjZjAsIDB4MjQwNDAwMDEsIDB4NTA0NDAwMDEsIDB4MjQwNDAwMDIsCisweGMwMDU2NWEsIDB4MCwgMHgyNDAyZmY3ZiwgMHgyODJhMDI0LAorMHg4ZmJmMDA0OCwgMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgMHg4ZmIzMDAzYywKKzB4OGZiMjAwMzgsIDB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwNTAsIDB4M2UwMDAwOCwgMHgwLCAweDNjMDIwMDAxLAorMHg4YzQyNmRhOCwgMHgyN2JkZmZiMCwgMHhhZmJmMDA0OCwgMHhhZmJlMDA0NCwKKzB4YWZiNTAwNDAsIDB4YWZiMzAwM2MsIDB4YWZiMjAwMzgsIDB4YWZiMTAwMzQsCisweDEwNDAwMGRlLCAweGFmYjAwMDMwLCAweDhmNDIwMGQwLCAweDNjMDQwMDAxLAorMHg4Yzg0NmQ5OCwgMHgyNDQzMDAwMSwgMHgyODQyMDAwYiwgMHhhZjQ0MDBlOCwKKzB4MTQ0MDAwZmUsIDB4YWY0MzAwZDAsIDB4OGY0MjAwMDQsIDB4MzA0MjAwMDIsCisweDE0NDAwMDk1LCAweGFmNDAwMGQwLCAweDhmNDIwMDA0LCAweDM0NDIwMDAyLAorMHhhZjQyMDAwNCwgMHgyNDAyMDAwMSwgMHgxNDgyMDAwMywgMHgzYzAyMDYwMCwKKzB4MTAwMDAwMDIsIDB4MzQ0MjMwMDAsIDB4MzQ0MjEwMDAsIDB4YWZhMjAwMjAsCisweDE4MjEsIDB4OGY1ZTAwMTgsIDB4MjdhYTAwMjAsIDB4MjQwMjAwZmYsCisweDEzYzIwMDAyLCAweGFmYWEwMDJjLCAweDI3YzMwMDAxLCAweDhjMDIwMjI4LAorMHg2MDkwMjEsIDB4MTY0MjAwMGUsIDB4MWUzOGMwLCAweDhmNDIwMzNjLAorMHgyNDQyMDAwMSwgMHhhZjQyMDMzYywgMHg4ZjQyMDMzYywgMHg4YzAyMDIyOCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDYxMGMsIDB4M2MwNTAwMDksIDB4YWZhMDAwMTQsCisweGFmYTIwMDEwLCAweDhmYTYwMDIwLCAweDEwMDAwMDZkLCAweDM0YTUwNTAwLAorMHhmNzEwMjEsIDB4OGZhMzAwMjAsIDB4OGZhNDAwMjQsIDB4YWM0MzA0YzAsCisweGFjNDQwNGM0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LAorMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDEwNDAwMDFiLCAweDk4MjEsCisweGUwODgyMSwgMHgyNjM1MDRjMCwgMHg4ZjQ0MDE3OCwgMHg4ZjQ1MDE3YywKKzB4MjIwMTgyMSwgMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwgMHhhZmIyMDAxNCwKKzB4OGY0ODAwMGMsIDB4MTAyMSwgMHgyZjUzMDIxLCAweGFmYTgwMDE4LAorMHg4ZjQ4MDEwYywgMHgyNDA3MDAwOCwgMHhhMzI4MjEsIDB4YTM0ODJiLAorMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4NTQ0MDAwMDYsCisweDI0MTMwMDAxLCAweDhmODIwMDU0LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksCisweDE0NDBmZmU5LCAweDAsIDB4MzI2MjAwZmYsIDB4NTQ0MDAwMTcsCisweGFmNTIwMDE4LCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LAorMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywgMHhhZmEyMDAxMCwKKzB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxMTgsIDB4M2MwNTAwMDksCisweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDEwMDAwMDM1LCAweDM0YTUwNjAwLAorMHg4ZjQyMDMwOCwgMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwKKzB4OGY0MjAzMDgsIDB4MTAwMDAwMWUsIDB4MzI2MjAwZmYsIDB4OGY4MzAwNTQsCisweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksCisweDEwNDAwMDE2LCAweDk4MjEsIDB4M2MxNTAwMjAsIDB4MjQxMTAwMTAsCisweDhmNDIwMDBjLCAweDhmNDQwMTYwLCAweDhmNDUwMTY0LCAweDhmODYwMTIwLAorMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwgMHg1NTEwMjUsIDB4YWZhMjAwMTgsCisweDhmNDIwMTBjLCAweDI0MDcwMDA4LCAweDQwZjgwOSwgMHgyNGM2MDAxYywKKzB4MTQ0MGZmZTMsIDB4MCwgMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLAorMHgyYzQyMDNlOSwgMHgxNDQwZmZlZSwgMHgwLCAweDMyNjIwMGZmLAorMHgxNDQwMDAxMSwgMHgwLCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLAorMHhhZjQyMDM3OCwgMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywKKzB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxMjAsCisweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDM0YTUwNzAwLAorMHhjMDAyYjNiLCAweDNjMDM4MjEsIDB4OGY0MjAyZWMsIDB4MjQ0MjAwMDEsCisweGFmNDIwMmVjLCAweDhmNDIwMmVjLCAweDhmNDIwMDA0LCAweDMwNDIwMDAxLAorMHgxMDQwMDAzMywgMHgzYzAyMDQwMCwgMHgyYzIxMDI0LCAweDEwNDAwMDE3LAorMHgwLCAweDkzNDIwNWMwLCAweDhmNDQwMjUwLCAweDhmNDUwMjU0LAorMHg4ZjQzMDFiNCwgMHgzNDQyMDAyMCwgMHgxNGEzMDAwNiwgMHhhMzQyMDVjMCwKKzB4OGY0MjAyNzAsIDB4OGY0MzAyNzQsIDB4OGY0NDAxYjgsIDB4MTA2NDAwMDgsCisweDAsIDB4OGY0MjAyNTAsIDB4OGY0MzAyNTQsIDB4OTM0NDA1YzAsCisweDhmNDYwMjcwLCAweDhmNDcwMjc0LCAweDEwMDAwMDE2LCAweDM4ODQwMDQwLAorMHg5MzQyMDVjMCwgMHgxMDAwMDA0OCwgMHgzMDQyMDBiZiwgMHg5MzQyMDVjMCwKKzB4OGY0NDAyNTAsIDB4OGY0NTAyNTQsIDB4OGY0MzAxYjQsIDB4MzA0MjAwYmYsCisweDE0YTMwMDA2LCAweGEzNDIwNWMwLCAweDhmNDIwMjcwLCAweDhmNDMwMjc0LAorMHg4ZjQ0MDFiOCwgMHgxMDY0MDAwYiwgMHgwLCAweDhmNDIwMjUwLAorMHg4ZjQzMDI1NCwgMHg5MzQ0MDVjMCwgMHg4ZjQ2MDI3MCwgMHg4ZjQ3MDI3NCwKKzB4Mzg4NDAwMjAsIDB4YWY0MzAxYjQsIDB4YWY0NzAxYjgsIDB4MTAwMDAwMzMsCisweGEzNDQwNWMwLCAweDkzNDIwNWMwLCAweDEwMDAwMDJmLCAweDM0NDIwMDIwLAorMHg5MzQyMDVjMCwgMHg4ZjQzMDBkNCwgMHgzNDQyMDAyMCwgMHhhMzQyMDVjMCwKKzB4MjQ2MjAwMDEsIDB4MTAwMDAwMjMsIDB4Mjg2MzAwMzMsIDB4OGY0MjAwZTQsCisweDhmNDMwMGUwLCAweDI0NDIwMDAxLCAweGFmNDIwMGU0LCAweDQzMTAyYSwKKzB4MTQ0MDAwMDYsIDB4MjQwMzAwMDEsIDB4OGY0MjAwZTgsIDB4MTQ0MzAwMDIsCisweGFmNDAwMGU0LCAweDI0MDMwMDA0LCAweGFmNDMwMGU4LCAweDhmNDIwMDA0LAorMHgzMDQyMDAwMSwgMHgxMDQwMDAwZCwgMHgzYzAyMDQwMCwgMHgyYzIxMDI0LAorMHgxMDQwMDAwNywgMHgwLCAweDkzNDIwNWMwLCAweDM0NDIwMDQwLAorMHhhMzQyMDVjMCwgMHg5MzQyMDVjMCwgMHgxMDAwMDAwZiwgMHgzMDQyMDBkZiwKKzB4OTM0MjA1YzAsIDB4MTAwMDAwMGMsIDB4MzQ0MjAwNjAsIDB4OTM0MjA1YzAsCisweDhmNDMwMGQ0LCAweDM0NDIwMDIwLCAweGEzNDIwNWMwLCAweDI0NjIwMDAxLAorMHgyODYzMDBmYiwgMHgxNDYwMDAwNSwgMHhhZjQyMDBkNCwgMHg5MzQyMDVjMCwKKzB4YWY0MDAwZDQsIDB4Mzg0MjAwNDAsIDB4YTM0MjA1YzAsIDB4OTM0MjA1YzAsCisweDhmNDMwMGU4LCAweDMwNDIwMDdmLCAweGEzNDIwNWMwLCAweDI0MDIwMDAxLAorMHgxNDYyMDAwNSwgMHgwLCAweDkzNDQwNWMwLCAweDQyMTAyLAorMHgxMDAwMDAwMywgMHgzNDg0MDBmMCwgMHg5MzQ0MDVjMCwgMHgzNDg0MDAwZiwKKzB4YzAwNTY0MCwgMHgwLCAweDI0MDJmZjdmLCAweDI4MmEwMjQsCisweDhmYmYwMDQ4LCAweDhmYmUwMDQ0LCAweDhmYjUwMDQwLCAweDhmYjMwMDNjLAorMHg4ZmIyMDAzOCwgMHg4ZmIxMDAzNCwgMHg4ZmIwMDAzMCwgMHgzZTAwMDA4LAorMHgyN2JkMDA1MCwgMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmYjAsCisweDI3NDQwMWMwLCAweDI2ZTMwMDI4LCAweDI0NjUwNDAwLCAweDY1MTAyYiwKKzB4YWZiZjAwNDgsIDB4YWZiZTAwNDQsIDB4YWZiNTAwNDAsIDB4YWZiMzAwM2MsCisweGFmYjIwMDM4LCAweGFmYjEwMDM0LCAweDEwNDAwMDA3LCAweGFmYjAwMDMwLAorMHg4YzgyMDAwMCwgMHhhYzYyMDAwMCwgMHgyNDYzMDAwNCwgMHg2NTEwMmIsCisweDE0NDBmZmZiLCAweDI0ODQwMDA0LCAweDhjMDIwMDgwLCAweGFlZTIwMDQ0LAorMHg4YzAyMDBjMCwgMHhhZWUyMDA0MCwgMHg4YzAyMDA4NCwgMHhhZWUyMDAzMCwKKzB4OGMwMjAwODQsIDB4YWVlMjAyM2MsIDB4OGMwMjAwODgsIDB4YWVlMjAyNDAsCisweDhjMDIwMDhjLCAweGFlZTIwMjQ0LCAweDhjMDIwMDkwLCAweGFlZTIwMjQ4LAorMHg4YzAyMDA5NCwgMHhhZWUyMDI0YywgMHg4YzAyMDA5OCwgMHhhZWUyMDI1MCwKKzB4OGMwMjAwOWMsIDB4YWVlMjAyNTQsIDB4OGMwMjAwYTAsIDB4YWVlMjAyNTgsCisweDhjMDIwMGE0LCAweGFlZTIwMjVjLCAweDhjMDIwMGE4LCAweGFlZTIwMjYwLAorMHg4YzAyMDBhYywgMHhhZWUyMDI2NCwgMHg4YzAyMDBiMCwgMHhhZWUyMDI2OCwKKzB4OGMwMjAwYjQsIDB4YWVlMjAyNmMsIDB4OGMwMjAwYjgsIDB4YWVlMjAyNzAsCisweDhjMDIwMGJjLCAweDI0MDQwMDAxLCAweGFlZTIwMjc0LCAweGFlZTAwMDM0LAorMHg0MTA4MCwgMHg1NzEwMjEsIDB4OGVlMzAwMzQsIDB4OGM0MjAyM2MsCisweDI0ODQwMDAxLCAweDYyMTgyMSwgMHgyYzgyMDAwZiwgMHhhZWUzMDAzNCwKKzB4MTQ0MGZmZjgsIDB4NDEwODAsIDB4OGMwMjAwY2MsIDB4YWVlMjAwNDgsCisweDhjMDIwMGQwLCAweGFlZTIwMDRjLCAweDhjMDIwMGUwLCAweGFlZTIwMWY4LAorMHg4YzAyMDBlNCwgMHhhZWUyMDFmYywgMHg4YzAyMDBlOCwgMHhhZWUyMDIwMCwKKzB4OGMwMjAwZWMsIDB4YWVlMjAyMDQsIDB4OGMwMjAwZjAsIDB4YWVlMjAyMDgsCisweDhlZTQwMGMwLCAweDhlZTUwMGM0LCAweDhjMDIwMGZjLCAweDQ1MTAyYiwKKzB4MTA0MDAwMGIsIDB4MCwgMHg4ZWUyMDBjMCwgMHg4ZWUzMDBjNCwKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMDAsIDB4NjUxODIxLCAweDY1MzAyYiwKKzB4NDQxMDIxLCAweDQ2MTAyMSwgMHhhZWUyMDBjMCwgMHhhZWUzMDBjNCwKKzB4OGMwMjAwZmMsIDB4OGVlNDAwYzAsIDB4OGVlNTAwYzQsIDB4MjQwOGZmZmYsCisweDI0MDkwMDAwLCAweDQwMTgyMSwgMHgxMDIxLCAweDg4MjAyNCwKKzB4YTkyODI0LCAweDgyMjAyNSwgMHhhMzI4MjUsIDB4YWVlNDAwYzAsCisweGFlZTUwMGM0LCAweDhlZTQwMGQwLCAweDhlZTUwMGQ0LCAweDhjMDIwMGY0LAorMHg0NTEwMmIsIDB4MTA0MDAwMGIsIDB4MCwgMHg4ZWUyMDBkMCwKKzB4OGVlMzAwZDQsIDB4MjQwNDAwMDEsIDB4MjQwNTAwMDAsIDB4NjUxODIxLAorMHg2NTMwMmIsIDB4NDQxMDIxLCAweDQ2MTAyMSwgMHhhZWUyMDBkMCwKKzB4YWVlMzAwZDQsIDB4OGMwMjAwZjQsIDB4OGVlNDAwZDAsIDB4OGVlNTAwZDQsCisweDQwMTgyMSwgMHgxMDIxLCAweDg4MjAyNCwgMHhhOTI4MjQsCisweDgyMjAyNSwgMHhhMzI4MjUsIDB4YWVlNDAwZDAsIDB4YWVlNTAwZDQsCisweDhlZTQwMGM4LCAweDhlZTUwMGNjLCAweDhjMDIwMGY4LCAweDQ1MTAyYiwKKzB4MTA0MDAwMGIsIDB4MCwgMHg4ZWUyMDBjOCwgMHg4ZWUzMDBjYywKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMDAsIDB4NjUxODIxLCAweDY1MzAyYiwKKzB4NDQxMDIxLCAweDQ2MTAyMSwgMHhhZWUyMDBjOCwgMHhhZWUzMDBjYywKKzB4OGMwMjAwZjgsIDB4OGVlNDAwYzgsIDB4OGVlNTAwY2MsIDB4NDAxODIxLAorMHgxMDIxLCAweDg4MjAyNCwgMHhhOTI4MjQsIDB4ODIyMDI1LAorMHhhMzI4MjUsIDB4MjQwMjAwMDgsIDB4YWVlNDAwYzgsIDB4YWVlNTAwY2MsCisweGFmYTIwMDEwLCAweGFmYTAwMDE0LCAweDhmNDIwMDBjLCAweDhjMDQwMjA4LAorMHg4YzA1MDIwYywgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHgyNmU2MDAyOCwKKzB4NDBmODA5LCAweDI0MDcwNDAwLCAweDEwNDAwMGYwLCAweDNjMDIwNDAwLAorMHhhZmEyMDAyMCwgMHg5MzQyMDVjNiwgMHgxMDQwMDA4OSwgMHgxODIxLAorMHg4ZjVlMDAxOCwgMHgyN2FhMDAyMCwgMHgyNDAyMDBmZiwgMHgxM2MyMDAwMiwKKzB4YWZhYTAwMmMsIDB4MjdjMzAwMDEsIDB4OGMwMjAyMjgsIDB4NjA5MDIxLAorMHgxNjQyMDAwZSwgMHgxZTM4YzAsIDB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzNjLCAweDhmNDIwMzNjLCAweDhjMDIwMjI4LCAweDNjMDQwMDAxLAorMHgyNDg0NjEwYywgMHgzYzA1MDAwOSwgMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwKKzB4OGZhNjAwMjAsIDB4MTAwMDAwNmIsIDB4MzRhNTA1MDAsIDB4ZjcxMDIxLAorMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwKKzB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MjQ3MDAzZTgsIDB4MjAyMTAyMywKKzB4MmM0MjAzZTksIDB4MTA0MDAwMWIsIDB4OTgyMSwgMHhlMDg4MjEsCisweDI2MzUwNGMwLCAweDhmNDQwMTc4LCAweDhmNDUwMTdjLCAweDIyMDE4MjEsCisweDI0MGEwMDA0LCAweGFmYWEwMDEwLCAweGFmYjIwMDE0LCAweDhmNDgwMDBjLAorMHgxMDIxLCAweDJmNTMwMjEsIDB4YWZhODAwMTgsIDB4OGY0ODAxMGMsCisweDI0MDcwMDA4LCAweGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLAorMHgxMDBmODA5LCAweDg5MjAyMSwgMHg1NDQwMDAwNiwgMHgyNDEzMDAwMSwKKzB4OGY4MjAwNTQsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxNDQwZmZlOSwKKzB4MCwgMHgzMjYyMDBmZiwgMHg1NDQwMDAxNywgMHhhZjUyMDAxOCwKKzB4OGY0MjAzNzgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsCisweDhmODIwMTIwLCAweDhmYWEwMDJjLCAweGFmYTIwMDEwLCAweDhmODIwMTI0LAorMHgzYzA0MDAwMSwgMHgyNDg0NjExOCwgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwKKzB4OGQ0NjAwMDAsIDB4MTAwMDAwMzMsIDB4MzRhNTA2MDAsIDB4OGY0MjAzMDgsCisweDI0MTMwMDAxLCAweDI0NDIwMDAxLCAweGFmNDIwMzA4LCAweDhmNDIwMzA4LAorMHgxMDAwMDAxYywgMHgzMjYyMDBmZiwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwKKzB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxMDQwMDAxNCwKKzB4OTgyMSwgMHgyNDExMDAxMCwgMHg4ZjQyMDAwYywgMHg4ZjQ0MDE2MCwKKzB4OGY0NTAxNjQsIDB4OGY4NjAxMjAsIDB4YWZiMTAwMTAsIDB4YWZiMjAwMTQsCisweGFmYTIwMDE4LCAweDhmNDIwMTBjLCAweDI0MDcwMDA4LCAweDQwZjgwOSwKKzB4MjRjNjAwMWMsIDB4MTQ0MGZmZTUsIDB4MCwgMHg4ZjgyMDA1NCwKKzB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxNDQwZmZlZiwgMHgwLAorMHgzMjYyMDBmZiwgMHg1NDQwMDAxMiwgMHgyNDAyMDAwMSwgMHg4ZjQyMDM3OCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsCisweDhmYWEwMDJjLCAweGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLAorMHgyNDg0NjEyMCwgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgMHg4ZDQ2MDAwMCwKKzB4MzRhNTA3MDAsIDB4YzAwMmIzYiwgMHgzYzAzODIxLCAweDEwMjEsCisweDE0NDAwMDViLCAweDI0MDIwMDAxLCAweDEwMDAwMDY1LCAweDAsCisweDhmNTEwMDE4LCAweDI0MDIwMGZmLCAweDEyMjIwMDAyLCAweDgwMjEsCisweDI2MzAwMDAxLCAweDhjMDIwMjI4LCAweDE2MDIwMDBlLCAweDExMzBjMCwKKzB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsCisweDhjMDIwMjI4LCAweDNjMDQwMDAxLCAweDI0ODQ2MGY0LCAweDNjMDUwMDA5LAorMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDAzZiwKKzB4MzRhNTAxMDAsIDB4ZDcxMDIxLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LAorMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgMHhjMDE4MjEsIDB4OGY0NDAxNzgsCisweDhmNDUwMTdjLCAweDEwMjEsIDB4MjQwNzAwMDQsIDB4YWZhNzAwMTAsCisweGFmYjAwMDE0LCAweDhmNDgwMDBjLCAweDI0YzYwNGMwLCAweDJlNjMwMjEsCisweGFmYTgwMDE4LCAweDhmNDgwMTBjLCAweDI0MDcwMDA4LCAweGEzMjgyMSwKKzB4YTM0ODJiLCAweDgyMjAyMSwgMHgxMDBmODA5LCAweDg5MjAyMSwKKzB4MTQ0MDAwMGIsIDB4MjQwNzAwMDgsIDB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsCisweDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2MGZjLCAweDNjMDUwMDA5LAorMHhhZmEyMDAxNCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDAxYywgMHgzNGE1MDIwMCwKKzB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY0MzAwMGMsIDB4YWY1MDAwMTgsCisweDhmODYwMTIwLCAweDI0MDIwMDEwLCAweGFmYTIwMDEwLCAweGFmYjAwMDE0LAorMHhhZmEzMDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsCisweDU0NDAwMDExLCAweDI0MDIwMDAxLCAweDhmNDIwMzQwLCAweDI0NDIwMDAxLAorMHhhZjQyMDM0MCwgMHg4ZjQyMDM0MCwgMHg4ZjgyMDEyMCwgMHhhZmEyMDAxMCwKKzB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxMDQsIDB4M2MwNTAwMDksCisweGFmYTIwMDE0LCAweDhmYTYwMDIwLCAweDM0YTUwMzAwLCAweGMwMDJiM2IsCisweDIyMDM4MjEsIDB4MTAyMSwgMHgxMDQwMDAwZCwgMHgyNDAyMDAwMSwKKzB4OGY0MjAyZTgsIDB4YTM0MDA1YzYsIDB4YWY0MDAxYjAsIDB4MjQ0MjAwMDEsCisweGFmNDIwMmU4LCAweDhmNDIwMmU4LCAweDhlZTIwMTUwLCAweDI0NDIwMDAxLAorMHhhZWUyMDE1MCwgMHgxMDAwMDAwMywgMHg4ZWUyMDE1MCwgMHgyNDAyMDAwMSwKKzB4YTM0MjA1YzYsIDB4OGZiZjAwNDgsIDB4OGZiZTAwNDQsIDB4OGZiNTAwNDAsCisweDhmYjMwMDNjLCAweDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLAorMHgzZTAwMDA4LCAweDI3YmQwMDUwLCAweDI3YmRmZmQ4LCAweGFmYmYwMDIwLAorMHg4ZjgyMDBiMCwgMHgzMDQyMDAwNCwgMHgxMDQwMDA2OCwgMHgwLAorMHg4ZjQzMDEyOCwgMHg4ZjgyMDEwNCwgMHgxNDYyMDAwNSwgMHgwLAorMHg4ZjQzMDEzMCwgMHg4ZjgyMDBiNCwgMHgxMDYyMDAwNiwgMHgwLAorMHg4ZjgyMDEwNCwgMHhhZjQyMDEyOCwgMHg4ZjgyMDBiNCwgMHgxMDAwMDA1YiwKKzB4YWY0MjAxMzAsIDB4OGY4MjAwYjAsIDB4M2MwMzAwODAsIDB4NDMxMDI0LAorMHgxMDQwMDAwZCwgMHgwLCAweDhmODIwMTFjLCAweDM0NDIwMDAyLAorMHhhZjgyMDExYywgMHg4ZjgyMDBiMCwgMHgyNDAzZmZmYiwgMHg0MzEwMjQsCisweGFmODIwMGIwLCAweDhmODIwMTFjLCAweDI0MDNmZmZkLCAweDQzMTAyNCwKKzB4MTAwMDAwNGEsIDB4YWY4MjAxMWMsIDB4OGY0MzAxMjgsIDB4OGY4MjAxMDQsCisweDE0NjIwMDA1LCAweDAsIDB4OGY0MzAxMzAsIDB4OGY4MjAwYjQsCisweDEwNjIwMDEwLCAweDAsIDB4OGY4MjAxMDQsIDB4YWY0MjAxMjgsCisweDhmODIwMGI0LCAweDhmNDMwMTI4LCAweGFmNDIwMTMwLCAweGFmYTMwMDEwLAorMHg4ZjQyMDEzMCwgMHgzYzA0MDAwMSwgMHgyNDg0NjE0NCwgMHhhZmEyMDAxNCwKKzB4OGY4NjAxMWMsIDB4OGY4NzAwYjAsIDB4M2MwNTAwMDUsIDB4MTAwMDAwMzEsCisweDM0YTUwOTAwLCAweDhmNDIwMTI4LCAweGFmYTIwMDEwLCAweDhmNDIwMTMwLAorMHgzYzA0MDAwMSwgMHgyNDg0NjE1MCwgMHhhZmEyMDAxNCwgMHg4Zjg2MDExYywKKzB4OGY4NzAwYjAsIDB4M2MwNTAwMDUsIDB4YzAwMmIzYiwgMHgzNGE1MTAwMCwKKzB4OGY4MjAxMWMsIDB4MzQ0MjAwMDIsIDB4YWY4MjAxMWMsIDB4OGY4MzAxMDQsCisweDhmODIwMGIwLCAweDM0NDIwMDAxLCAweGFmODIwMGIwLCAweDI0MDIwMDA4LAorMHhhZjgzMDEwNCwgMHhhZmEyMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZjQyMDAwYywKKzB4OGMwNDAyMDgsIDB4OGMwNTAyMGMsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsCisweDI2ZTYwMDI4LCAweDQwZjgwOSwgMHgyNDA3MDQwMCwgMHg4ZjgyMDExYywKKzB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweGFmODIwMTFjLCAweDhlZTIwMWRjLAorMHgyNDQyMDAwMSwgMHhhZWUyMDFkYywgMHg4ZWUyMDFkYywgMHg4ZjQyMDEyOCwKKzB4YWZhMjAwMTAsIDB4OGY0MjAxMzAsIDB4M2MwNDAwMDEsIDB4MjQ4NDYxNWMsCisweGFmYTIwMDE0LCAweDhmODYwMTFjLCAweDhmODcwMGIwLCAweDNjMDUwMDA1LAorMHgzNGE1MTEwMCwgMHhjMDAyYjNiLCAweDAsIDB4OGY4MjAwYTAsCisweDMwNDIwMDA0LCAweDEwNDAwMDY5LCAweDAsIDB4OGY0MzAxMmMsCisweDhmODIwMTI0LCAweDE0NjIwMDA1LCAweDAsIDB4OGY0MzAxMzQsCisweDhmODIwMGE0LCAweDEwNjIwMDA2LCAweDAsIDB4OGY4MjAxMjQsCisweGFmNDIwMTJjLCAweDhmODIwMGE0LCAweDEwMDAwMDVjLCAweGFmNDIwMTM0LAorMHg4ZjgyMDBhMCwgMHgzYzAzMDA4MCwgMHg0MzEwMjQsIDB4MTA0MDAwMGQsCisweDAsIDB4OGY4MjAxMWMsIDB4MzQ0MjAwMDIsIDB4YWY4MjAxMWMsCisweDhmODIwMGEwLCAweDI0MDNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDBhMCwKKzB4OGY4MjAxMWMsIDB4MjQwM2ZmZmQsIDB4NDMxMDI0LCAweDEwMDAwMDRiLAorMHhhZjgyMDExYywgMHg4ZjQzMDEyYywgMHg4ZjgyMDEyNCwgMHgxNDYyMDAwNSwKKzB4MCwgMHg4ZjQzMDEzNCwgMHg4ZjgyMDBhNCwgMHgxMDYyMDAxMCwKKzB4MCwgMHg4ZjgyMDEyNCwgMHhhZjQyMDEyYywgMHg4ZjgyMDBhNCwKKzB4OGY0MzAxMmMsIDB4YWY0MjAxMzQsIDB4YWZhMzAwMTAsIDB4OGY0MjAxMzQsCisweDNjMDQwMDAxLCAweDI0ODQ2MTY4LCAweGFmYTIwMDE0LCAweDhmODYwMTFjLAorMHg4Zjg3MDBhMCwgMHgzYzA1MDAwNSwgMHgxMDAwMDAzMiwgMHgzNGE1MTIwMCwKKzB4OGY0MjAxMmMsIDB4YWZhMjAwMTAsIDB4OGY0MjAxMzQsIDB4M2MwNDAwMDEsCisweDI0ODQ2MTc0LCAweGFmYTIwMDE0LCAweDhmODYwMTFjLCAweDhmODcwMGEwLAorMHgzYzA1MDAwNSwgMHhjMDAyYjNiLCAweDM0YTUxMzAwLCAweDhmODIwMTFjLAorMHgzNDQyMDAwMiwgMHhhZjgyMDExYywgMHg4ZjgzMDEyNCwgMHg4ZjgyMDBhMCwKKzB4MzQ0MjAwMDEsIDB4YWY4MjAwYTAsIDB4MjQwMjAwODAsIDB4YWY4MzAxMjQsCisweGFmYTIwMDEwLCAweGFmYTAwMDE0LCAweDhmNDIwMDE0LCAweDhjMDQwMjA4LAorMHg4YzA1MDIwYywgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwOCwgMHgzYzA2MDAwMSwKKzB4MjRjNjZlZDgsIDB4NDBmODA5LCAweDI0MDcwMDA0LCAweDhmODIwMTFjLAorMHgyNDAzZmZmZCwgMHg0MzEwMjQsIDB4YWY4MjAxMWMsIDB4OGVlMjAxZGMsCisweDI0NDIwMDAxLCAweGFlZTIwMWRjLCAweDhlZTIwMWRjLCAweDhmNDIwMTJjLAorMHhhZmEyMDAxMCwgMHg4ZjQyMDEzNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjE4MCwKKzB4YWZhMjAwMTQsIDB4OGY4NjAxMWMsIDB4OGY4NzAwYTAsIDB4M2MwNTAwMDUsCisweDM0YTUxNDAwLCAweGMwMDJiM2IsIDB4MCwgMHg4ZmJmMDAyMCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzA4MTAwMCwgMHgyNDA3MDAwMSwKKzB4M2MwNjAwODAsIDB4M2MwNTAxMDAsIDB4OGY4MjAwNzAsIDB4NDgxMDI0LAorMHgxMDQwZmZmZCwgMHgwLCAweDhmODIwMDU0LCAweDI0NDIwMDA1LAorMHhhZjgyMDA3OCwgMHg4YzA0MDIzNCwgMHgxMDgwMDAxNiwgMHgxODIxLAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjQwZTgsIDB4MjQ0MjAwMDUsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyNDBlOCwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDhjNDI0MGU4LCAweDQ0MTAyYiwgMHgxNDQwMDAwOSwKKzB4MCwgMHgzYzAzMDA4MCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMjA0MGU4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHgxMDAwMDAwYiwKKzB4YTAyNzQwZjAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLCAweDkwNDI0MGYwLAorMHg1NDQwMDAwNiwgMHg2NjE4MjUsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg5MDQyNDBmMSwgMHg1NDQwMDAwMSwgMHg2NjE4MjUsIDB4OGMwNDAyMzAsCisweDEwODAwMDEzLCAweDAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg4YzQyNDBlYywgMHgyNDQyMDAwNSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGFjMjI0MGVjLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg4YzQyNDBlYywKKzB4NDQxMDJiLCAweDE0NDAwMDA2LCAweDAsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhYzIwNDBlYywgMHgxMDAwMDAwNiwgMHg2NTE4MjUsCisweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyNDBmMiwgMHg1NDQwMDAwMSwKKzB4NjUxODI1LCAweDEwNjBmZmJjLCAweDAsIDB4OGY0MjAwMDAsCisweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsCisweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsIDB4MCwKKzB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsIDB4MCwKKzB4OGY4MjAwNjAsIDB4NDMxMDI1LCAweGFmODIwMDYwLCAweDhmNDIwMDAwLAorMHgxMDQwMDAwMywgMHgwLCAweDEwMDBmZmE3LCAweGFmODAwMDRjLAorMHgxMDAwZmZhNSwgMHhhZjgwMDA0OCwgMHgzZTAwMDA4LCAweDAsCisweDAsIDB4MCwgMHgwLCAweDI3YmRmZmUwLAorMHhhZmJmMDAxOCwgMHg4Zjg2MDA2NCwgMHgzMGMyMDAwNCwgMHgxMDQwMDAyNSwKKzB4MjQwNDAwMDQsIDB4OGMwMjAxMTQsIDB4YWY0MjAwMjAsIDB4YWY4NDAwNjQsCisweDhmNDIwMmZjLCAweDI0NDIwMDAxLCAweGFmNDIwMmZjLCAweDhmNDIwMmZjLAorMHg4ZjgyMDA2NCwgMHgzMDQyMDAwNCwgMHgxNDQwMDAwNSwgMHgwLAorMHg4YzAzMDExNCwgMHg4ZjQyMDAyMCwgMHgxNDYyZmZmMiwgMHgwLAorMHg4ZjQyMDAwMCwgMHgxMDQwMDAwNywgMHg4ZjQzMDAzYywgMHhhZjgwMDA0YywKKzB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsIDB4MCwgMHgxMDAwMDAwNSwKKzB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwKKzB4MCwgMHg4ZjgyMDA2MCwgMHg0MzEwMjUsIDB4YWY4MjAwNjAsCisweDhmNDIwMDAwLCAweDEwNDAwMDczLCAweDAsIDB4MTAwMDAwNmYsCisweDAsIDB4MzBjMjAwMDgsIDB4MTA0MDAwMjAsIDB4MjQwNDAwMDgsCisweDhjMDIwMTFjLCAweGFmNDIwMDQ4LCAweGFmODQwMDY0LCAweDhmNDIwMmE4LAorMHgyNDQyMDAwMSwgMHhhZjQyMDJhOCwgMHg4ZjQyMDJhOCwgMHg4ZjgyMDA2NCwKKzB4MzA0MjAwMDgsIDB4MTQ0MDAwMDUsIDB4MCwgMHg4YzAzMDExYywKKzB4OGY0MjAwNDgsIDB4MTQ2MmZmZjIsIDB4MCwgMHg4ZjQyMDAwMCwKKzB4MTA0MDAwMDcsIDB4MCwgMHhhZjgwMDA0YywgMHg4ZjgyMDA0YywKKzB4MTA0MGZmZmQsIDB4MCwgMHgxMDAwMDAwNSwgMHgwLAorMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLAorMHg4ZjgyMDA2MCwgMHgxMDAwZmZkOSwgMHgzNDQyMDIwMCwgMHgzMGMyMDAyMCwKKzB4MTA0MDAwMjMsIDB4MjQwNDAwMjAsIDB4OGMwMjAxMmMsIDB4YWY0MjAwNjgsCisweGFmODQwMDY0LCAweDhmNDIwMmQ4LCAweDI0NDIwMDAxLCAweGFmNDIwMmQ4LAorMHg4ZjQyMDJkOCwgMHg4ZjgyMDA2NCwgMHgzMDQyMDAyMCwgMHgxNDQwMDAwNSwKKzB4MzJjMjQwMDAsIDB4OGMwMzAxMmMsIDB4OGY0MjAwNjgsIDB4MTQ2MmZmZjIsCisweDMyYzI0MDAwLCAweDE0NDAwMDAyLCAweDNjMDIwMDAxLCAweDJjMmIwMjUsCisweDhmNDIwMDAwLCAweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsCisweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsCisweDAsIDB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsCisweDAsIDB4OGY4MjAwNjAsIDB4MTAwMGZmYjQsIDB4MzQ0MjA4MDAsCisweDMwYzIwMDEwLCAweDEwNDAwMDI5LCAweDI0MDQwMDEwLCAweDhjMDIwMTI0LAorMHhhZjQyMDA1OCwgMHhhZjg0MDA2NCwgMHg4ZjQyMDJkNCwgMHgyNDQyMDAwMSwKKzB4YWY0MjAyZDQsIDB4OGY0MjAyZDQsIDB4OGY4MjAwNjQsIDB4MzA0MjAwMTAsCisweDE0NDAwMDA1LCAweDMyYzIyMDAwLCAweDhjMDMwMTI0LCAweDhmNDIwMDU4LAorMHgxNDYyZmZmMiwgMHgzMmMyMjAwMCwgMHg1MDQwMDAwMSwgMHgzNmQ2ODAwMCwKKzB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIDB4MCwgMHhhZjgwMDA0YywKKzB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsIDB4MCwgMHgxMDAwMDAwNSwKKzB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwKKzB4MCwgMHg4ZjgyMDA2MCwgMHgzNDQyMDEwMCwgMHhhZjgyMDA2MCwKKzB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsIDB4MCwgMHgxMDAwMDA2YywKKzB4YWY4MDAwNGMsIDB4MTAwMDAwNmEsIDB4YWY4MDAwNDgsIDB4MzBjMjAwMDEsCisweDEwNDAwMDA0LCAweDI0MDIwMDAxLCAweGFmODIwMDY0LCAweDEwMDAwMDY0LAorMHgwLCAweDMwYzIwMDAyLCAweDE0NDAwMDBiLCAweDNjMDUwMDAzLAorMHgzYzA0MDAwMSwgMHgyNDg0NjI0NCwgMHgzNGE1MDUwMCwgMHgzODIxLAorMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDI0MDJmZmMwLAorMHgxMDAwMDA1NywgMHhhZjgyMDA2NCwgMHg4YzA1MDIyYywgMHg4YzAyMDEwYywKKzB4MTBhMjAwNDgsIDB4NTEwODAsIDB4OGM0NjAzMDAsIDB4MjRhMjAwMDEsCisweDMwNDUwMDNmLCAweDI0MDIwMDAzLCAweGFjMDUwMjJjLCAweDYxZTAyLAorMHgxMDYyMDAwNSwgMHgyNDAyMDAxMCwgMHgxMDYyMDAxZCwgMHgzMGMyMGZmZiwKKzB4MTAwMDAwMzksIDB4MCwgMHg4ZjQzMDJhOCwgMHg4ZjQ0MDAwMCwKKzB4MzBjMjBmZmYsIDB4YWY0MjAwNDgsIDB4MjQ2MzAwMDEsIDB4YWY0MzAyYTgsCisweDEwODAwMDA3LCAweDhmNDIwMmE4LCAweGFmODAwMDRjLCAweDhmODIwMDRjLAorMHgxMDQwZmZmZCwgMHgwLCAweDEwMDAwMDA1LCAweDAsCisweGFmODAwMDQ4LCAweDhmODIwMDQ4LCAweDEwNDBmZmZkLCAweDAsCisweDhmODIwMDYwLCAweDM0NDIwMjAwLCAweGFmODIwMDYwLCAweDhmNDIwMDAwLAorMHgxMDQwMDAxZiwgMHgwLCAweDEwMDAwMDFiLCAweDAsCisweGFmNDIwMDU4LCAweDMyYzIyMDAwLCAweDUwNDAwMDAxLCAweDM2ZDY4MDAwLAorMHg4ZjQyMDJkNCwgMHg4ZjQzMDAwMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDJkNCwKKzB4MTA2MDAwMDcsIDB4OGY0MjAyZDQsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsCisweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsIDB4MCwKKzB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsIDB4MCwKKzB4OGY4MjAwNjAsIDB4MzQ0MjAxMDAsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsCisweDEwNDAwMDAzLCAweDAsIDB4MTAwMDAwMDYsIDB4YWY4MDAwNGMsCisweDEwMDAwMDA0LCAweGFmODAwMDQ4LCAweGMwMDIxOTYsIDB4YzAyMDIxLAorMHg0MDI4MjEsIDB4OGMwMjAxMGMsIDB4MTRhMjAwMDIsIDB4MjQwMjAwMDIsCisweGFmODIwMDY0LCAweDhmODIwMDY0LCAweDMwNDIwMDAyLCAweDE0NDAwMDA0LAorMHgwLCAweDhjMDIwMTBjLCAweDE0YTJmZmFjLCAweDAsCisweDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsIDB4M2UwMDAwOCwKKzB4MCwgMHgyN2JkZmZhMCwgMHhhZmIwMDA0MCwgMHg4MDgwMjEsCisweDEwMTYwMiwgMHgyNDQyZmZmZiwgMHgzMDQzMDBmZiwgMHgyYzYyMDAxMywKKzB4YWZiZjAwNTgsIDB4YWZiZTAwNTQsIDB4YWZiNTAwNTAsIDB4YWZiMzAwNGMsCisweGFmYjIwMDQ4LCAweGFmYjEwMDQ0LCAweDEwNDAwMWYzLCAweGFmYTUwMDM0LAorMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjYyODgsCisweDQwMDAwOCwgMHgwLCAweDEwMTMwMiwgMHgzMDQ0MGZmZiwKKzB4MjQwMjAwMDEsIDB4MTA4MjAwMDUsIDB4MjQwMjAwMDIsIDB4MTA4MjAwMGMsCisweDI0MDJmZmZlLCAweDEwMDAwMDI0LCAweDNjMDUwMDAzLCAweDhmNDMwMDA0LAorMHgzYzAyMDAwMSwgMHg4YzQyNmYwNCwgMHhhZjQ0MDIwMCwgMHhhZjQ0MDIwNCwKKzB4M2MwNDAwMDEsIDB4OGM4NDZlODAsIDB4MTAwMDAwMDksIDB4MzQ2MzAwMDEsCisweDhmNDMwMDA0LCAweGFmNDQwMjAwLCAweGFmNDQwMjA0LCAweDNjMDQwMDAxLAorMHg4Yzg0NmU4MCwgMHg2MjE4MjQsIDB4M2MwMjAwMDEsIDB4MjQ0MmNhMjgsCisweDIxMTAwLCAweDIxMTgyLCAweGFmNDMwMDA0LCAweDNjMDMwODAwLAorMHg0MzEwMjUsIDB4YWM4MjAwMzgsIDB4OGY4NDAwNTQsIDB4NDE0NDIsCisweDQxYzgyLCAweDQzMTAyMSwgMHg0MWNjMiwgMHg0MzEwMjMsCisweDQxZDAyLCAweDQzMTAyMSwgMHg0MWQ0MiwgMHg0MzEwMjMsCisweDEwMDAwMDA5LCAweGFmNDIwMjA4LCAweDNjMDQwMDAxLCAweDI0ODQ2MjUwLAorMHgzNGE1MTAwMCwgMHgyMDAzMDIxLCAweDM4MjEsIDB4YWZhMDAwMTAsCisweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4OGY0MjAyYTAsIDB4MjQ0MjAwMDEsCisweGFmNDIwMmEwLCAweDEwMDAwMjFmLCAweDhmNDIwMmEwLCAweDI3YjAwMDI4LAorMHgyMDAyMDIxLCAweDI0MDUwMjEwLCAweGMwMDJiYmYsIDB4MjQwNjAwMDgsCisweGMwMDI1MTgsIDB4MjAwMjAyMSwgMHgxMDAwMDIxNiwgMHgwLAorMHg4ZmFhMDAzNCwgMHgyN2E0MDAyOCwgMHhhMTg4MCwgMHgyNTQyMDAwMSwKKzB4MzA0MjAwM2YsIDB4YWZhMjAwMzQsIDB4OGM2NTAzMDAsIDB4OGZhYTAwMzQsCisweDIxMDgwLCAweDhjNDMwMzAwLCAweDI1NDIwMDAxLCAweDMwNDIwMDNmLAorMHhhZmEyMDAzNCwgMHhhYzAyMDIyYywgMHhhZmE1MDAyOCwgMHhjMDAyNTE4LAorMHhhZmEzMDAyYywgMHgxMDAwMDIwMywgMHgwLCAweDI3YjAwMDI4LAorMHgyMDAyMDIxLCAweDI0MDUwMjEwLCAweGMwMDJiYmYsIDB4MjQwNjAwMDgsCisweGMwMDI2NTcsIDB4MjAwMjAyMSwgMHgxMDAwMDFmYSwgMHgwLAorMHg4ZmFhMDAzNCwgMHgyN2E0MDAyOCwgMHhhMTg4MCwgMHgyNTQyMDAwMSwKKzB4MzA0MjAwM2YsIDB4YWZhMjAwMzQsIDB4OGM2NTAzMDAsIDB4OGZhYTAwMzQsCisweDIxMDgwLCAweDhjNDMwMzAwLCAweDI1NDIwMDAxLCAweDMwNDIwMDNmLAorMHhhZmEyMDAzNCwgMHhhYzAyMDIyYywgMHhhZmE1MDAyOCwgMHhjMDAyNjU3LAorMHhhZmEzMDAyYywgMHgxMDAwMDFlNywgMHgwLCAweDEwMTMwMiwKKzB4MzA0MzBmZmYsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMDUsIDB4MjQwMjAwMDIsCisweDEwNjIwMDFlLCAweDNjMDIwMDAyLCAweDEwMDAwMDMzLCAweDNjMDUwMDAzLAorMHgzYzAzMDAwMiwgMHgyYzMxMDI0LCAweDU0NDAwMDM3LCAweDJjM2IwMjUsCisweDhmODIwMjI4LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyMzhkOCwKKzB4OGY4MjAyMmMsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGFjMjIzOGRjLAorMHg4ZjgyMDIzMCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YWMyMjM4ZTAsCisweDhmODIwMjM0LCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyMzhlNCwKKzB4MjQwMmZmZmYsIDB4YWY4MjAyMjgsIDB4YWY4MjAyMmMsIDB4YWY4MjAyMzAsCisweGFmODIwMjM0LCAweDEwMDAwMDIwLCAweDJjM2IwMjUsIDB4MmMyMTAyNCwKKzB4MTA0MDAwMTIsIDB4M2MwMmZmZmQsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg4YzQyMzhkOCwgMHhhZjgyMDIyOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDhjNDIzOGRjLCAweGFmODIwMjJjLCAweDNjMDIwMDAxLCAweDU3MTAyMSwKKzB4OGM0MjM4ZTAsIDB4YWY4MjAyMzAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg4YzQyMzhlNCwgMHhhZjgyMDIzNCwgMHgzYzAyZmZmZCwgMHgzNDQyZmZmZiwKKzB4MTAwMDAwMDksIDB4MmMyYjAyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjI1YywKKzB4MzRhNTExMDAsIDB4MjAwMzAyMSwgMHgzODIxLCAweGFmYTAwMDEwLAorMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmNDIwMmNjLCAweDI0NDIwMDAxLAorMHhhZjQyMDJjYywgMHgxMDAwMDE5ZiwgMHg4ZjQyMDJjYywgMHgxMDEzMDIsCisweDMwNDUwZmZmLCAweDI0MDIwMDAxLCAweDEwYTIwMDA1LCAweDI0MDIwMDAyLAorMHgxMGEyMDAwZCwgMHgzYzA0MDhmZiwgMHgxMDAwMDAxNCwgMHgzYzA1MDAwMywKKzB4M2MwMjA4ZmYsIDB4MzQ0MmZmZmYsIDB4OGY4MzAyMjAsIDB4M2MwNDAwMDQsCisweDJjNGIwMjUsIDB4NjIxODI0LCAweDM0NjMwMDA4LCAweGFmODMwMjIwLAorMHgxMDAwMDAxMiwgMHhhZjQ1MDI5OCwgMHgzNDg0ZmZmNywgMHgzYzAzZmZmYiwKKzB4OGY4MjAyMjAsIDB4MzQ2M2ZmZmYsIDB4MmMzYjAyNCwgMHg0NDEwMjQsCisweGFmODIwMjIwLCAweDEwMDAwMDA5LCAweGFmNDUwMjk4LCAweDNjMDQwMDAxLAorMHgyNDg0NjI2OCwgMHgzNGE1MTIwMCwgMHgyMDAzMDIxLCAweDM4MjEsCisweGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4OGY0MjAyYmMsCisweDI0NDIwMDAxLCAweGFmNDIwMmJjLCAweDEwMDAwMTc2LCAweDhmNDIwMmJjLAorMHgyNzg0MDIwOCwgMHgyNDA1MDIwMCwgMHhjMDAyYmJmLCAweDI0MDYwMDA4LAorMHgyNzQ0MDIyNCwgMHgyNDA1MDIwMCwgMHhjMDAyYmJmLCAweDI0MDYwMDA4LAorMHg4ZjQyMDJjNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDJjNCwgMHgxMDAwMDE2OSwKKzB4OGY0MjAyYzQsIDB4MTAxMzAyLCAweDMwNDMwZmZmLCAweDI0MDIwMDAxLAorMHgxMDYyMDAxMSwgMHgyODYyMDAwMiwgMHg1MDQwMDAwNSwgMHgyNDAyMDAwMiwKKzB4MTA2MDAwMDcsIDB4MCwgMHgxMDAwMDAxNywgMHgwLAorMHgxMDYyMDAwZiwgMHgwLCAweDEwMDAwMDEzLCAweDAsCisweDhjMDYwMjQ4LCAweDIwMjEsIDB4YzAwNTEwNCwgMHgyNDA1MDAwNCwKKzB4MTAwMDAwMDcsIDB4MCwgMHg4YzA2MDI0OCwgMHgyMDIxLAorMHhjMDA1MTA0LCAweDI0MDUwMDA0LCAweDEwMDAwMDEwLCAweDAsCisweDhjMDYwMjRjLCAweDIwMjEsIDB4YzAwNTEwNCwgMHgyNDA1MDAwMSwKKzB4MTAwMDAwMGEsIDB4MCwgMHgzYzA0MDAwMSwgMHgyNDg0NjI3NCwKKzB4M2MwNTAwMDMsIDB4MzRhNTEzMDAsIDB4MjAwMzAyMSwgMHgzODIxLAorMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDhmNDIwMmMwLAorMHgyNDQyMDAwMSwgMHhhZjQyMDJjMCwgMHgxMDAwMDEzYSwgMHg4ZjQyMDJjMCwKKzB4YzAwMjQyNiwgMHgwLCAweDEwMDAwMTM2LCAweDAsCisweDI0MDIwMDAxLCAweGEzNDIwNWM1LCAweDI0MTAwMTAwLCAweDhmNDQwMWE4LAorMHg4ZjQ1MDFhYywgMHhhZmIwMDAxMCwgMHhhZmEwMDAxNCwgMHg4ZjQyMDAxNCwKKzB4YWZhMjAwMTgsIDB4OGY0MjAxMDgsIDB4MjZlNjAwMjgsIDB4NDBmODA5LAorMHgyNDA3MDQwMCwgMHgxMDQwZmZmNSwgMHgwLCAweDEwMDAwMTI1LAorMHgwLCAweDNjMDNmZmZmLCAweDM0NjM3ZmZmLCAweDhmNDIwMzY4LAorMHg4ZjQ0MDM2MCwgMHgyYzNiMDI0LCAweDE4MjEsIDB4YWY0MDAwNTgsCisweGFmNDAwMDVjLCAweGFmNDAwMDYwLCAweGFmNDAwMDY0LCAweDQ0MTAyMywKKzB4YWY0MjAzNjgsIDB4M2MwMjA5MDAsIDB4YWY0MDAzNjAsIDB4YWZhMjAwMjAsCisweDhmNWUwMDE4LCAweDI3YWEwMDIwLCAweDI0MDIwMGZmLCAweDEzYzIwMDAyLAorMHhhZmFhMDAzYywgMHgyN2MzMDAwMSwgMHg4YzAyMDIyOCwgMHg2MDkwMjEsCisweDE2NDIwMDBlLCAweDFlMzhjMCwgMHg4ZjQyMDMzYywgMHgyNDQyMDAwMSwKKzB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsIDB4OGMwMjAyMjgsIDB4M2MwNDAwMDEsCisweDI0ODQ2MjBjLCAweDNjMDUwMDA5LCAweGFmYTAwMDE0LCAweGFmYTIwMDEwLAorMHg4ZmE2MDAyMCwgMHgxMDAwMDA2YiwgMHgzNGE1MDUwMCwgMHhmNzEwMjEsCisweDhmYTMwMDIwLCAweDhmYTQwMDI0LCAweGFjNDMwNGMwLCAweGFjNDQwNGM0LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgyNDcwMDNlOCwgMHgyMDIxMDIzLAorMHgyYzQyMDNlOSwgMHgxMDQwMDAxYiwgMHg5ODIxLCAweGUwODgyMSwKKzB4MjYzNTA0YzAsIDB4OGY0NDAxNzgsIDB4OGY0NTAxN2MsIDB4MjIwMTgyMSwKKzB4MjQwYTAwMDQsIDB4YWZhYTAwMTAsIDB4YWZiMjAwMTQsIDB4OGY0ODAwMGMsCisweDEwMjEsIDB4MmY1MzAyMSwgMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywKKzB4MjQwNzAwMDgsIDB4YTMyODIxLCAweGEzNDgyYiwgMHg4MjIwMjEsCisweDEwMGY4MDksIDB4ODkyMDIxLCAweDU0NDAwMDA2LCAweDI0MTMwMDAxLAorMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmU5LAorMHgwLCAweDMyNjIwMGZmLCAweDU0NDAwMDE3LCAweGFmNTIwMDE4LAorMHg4ZjQyMDM3OCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM3OCwgMHg4ZjQyMDM3OCwKKzB4OGY4MjAxMjAsIDB4OGZhYTAwM2MsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsCisweDNjMDQwMDAxLCAweDI0ODQ2MjE4LCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LAorMHg4ZDQ2MDAwMCwgMHgxMDAwMDAzMywgMHgzNGE1MDYwMCwgMHg4ZjQyMDMwOCwKKzB4MjQxMzAwMDEsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsCisweDEwMDAwMDFjLCAweDMyNjIwMGZmLCAweDhmODMwMDU0LCAweDhmODIwMDU0LAorMHgyNDcwMDNlOCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDEwNDAwMDE0LAorMHg5ODIxLCAweDI0MTEwMDEwLCAweDhmNDIwMDBjLCAweDhmNDQwMTYwLAorMHg4ZjQ1MDE2NCwgMHg4Zjg2MDEyMCwgMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwKKzB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIDB4MjQwNzAwMDgsIDB4NDBmODA5LAorMHgyNGM2MDAxYywgMHgxNDQwZmZlNSwgMHgwLCAweDhmODIwMDU0LAorMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDE0NDBmZmVmLCAweDAsCisweDMyNjIwMGZmLCAweDE0NDAwMDExLCAweDAsIDB4OGY0MjAzNzgsCisweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LCAweDhmODIwMTIwLAorMHg4ZmFhMDAzYywgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYyMjAsIDB4M2MwNTAwMDksIDB4YWZhMjAwMTQsIDB4OGQ0NjAwMDAsCisweDM0YTUwNzAwLCAweGMwMDJiM2IsIDB4M2MwMzgyMSwgMHg4ZjQyMDJiMCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAyYjAsIDB4OGY0MjAyYjAsIDB4OGY0MjAyZjgsCisweDI0NDIwMDAxLCAweGFmNDIwMmY4LCAweDEwMDAwMDhhLCAweDhmNDIwMmY4LAorMHg4YzAyMDI1YywgMHgyNzQ0MDIyNCwgMHhhZjQyMDFmMCwgMHg4YzAyMDI2MCwKKzB4MjQwNTAyMDAsIDB4MjQwNjAwMDgsIDB4YzAwMmJiZiwgMHhhZjQyMDFmOCwKKzB4OGY4MjAyMjAsIDB4MzA0MjAwMDgsIDB4MTQ0MDAwMDIsIDB4MjQwMjAwMDEsCisweDI0MDIwMDAyLCAweGFmNDIwMjk4LCAweDhmNDIwMmFjLCAweDI0NDIwMDAxLAorMHhhZjQyMDJhYywgMHgxMDAwMDA3NywgMHg4ZjQyMDJhYywgMHgzYzAyMDBmZiwKKzB4MzQ0MmZmZmYsIDB4MjAyMTgyNCwgMHgzMmMyMDE4MCwgMHgxNDQwMDAwNiwKKzB4MzQwMmZmZmIsIDB4NDMxMDJiLCAweDE0NDAwMDAzLCAweDAsCisweDEwMDAwMDZjLCAweGFmNDMwMGJjLCAweDNjMDQwMDAxLCAweDI0ODQ2MjgwLAorMHgzYzA1MDAwMywgMHgzNGE1MTUwMCwgMHgyMDAzMDIxLCAweDM4MjEsCisweGFmYTAwMDEwLCAweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4M2MwMjA3MDAsCisweDM0NDIxMDAwLCAweDEwMWUwMiwgMHg2MjE4MjUsIDB4YWZhMzAwMjAsCisweDhmNTEwMDE4LCAweDI0MDIwMGZmLCAweDEyMjIwMDAyLCAweDgwMjEsCisweDI2MzAwMDAxLCAweDhjMDIwMjI4LCAweDE2MDIwMDBlLCAweDExMzBjMCwKKzB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsCisweDhjMDIwMjI4LCAweDNjMDQwMDAxLCAweDI0ODQ2MWY0LCAweDNjMDUwMDA5LAorMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDAzZiwKKzB4MzRhNTAxMDAsIDB4ZDcxMDIxLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LAorMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgMHhjMDE4MjEsIDB4OGY0NDAxNzgsCisweDhmNDUwMTdjLCAweDEwMjEsIDB4MjQwNzAwMDQsIDB4YWZhNzAwMTAsCisweGFmYjAwMDE0LCAweDhmNDgwMDBjLCAweDI0YzYwNGMwLCAweDJlNjMwMjEsCisweGFmYTgwMDE4LCAweDhmNDgwMTBjLCAweDI0MDcwMDA4LCAweGEzMjgyMSwKKzB4YTM0ODJiLCAweDgyMjAyMSwgMHgxMDBmODA5LCAweDg5MjAyMSwKKzB4MTQ0MDAwMGIsIDB4MjQwNzAwMDgsIDB4OGY4MjAxMjAsIDB4YWZhMjAwMTAsCisweDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2MWZjLCAweDNjMDUwMDA5LAorMHhhZmEyMDAxNCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDAxYywgMHgzNGE1MDIwMCwKKzB4OGY0NDAxNjAsIDB4OGY0NTAxNjQsIDB4OGY0MzAwMGMsIDB4YWY1MDAwMTgsCisweDhmODYwMTIwLCAweDI0MDIwMDEwLCAweGFmYTIwMDEwLCAweGFmYjAwMDE0LAorMHhhZmEzMDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsCisweDE0NDAwMDEwLCAweDAsIDB4OGY0MjAzNDAsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzQwLCAweDhmNDIwMzQwLCAweDhmODIwMTIwLCAweGFmYTIwMDEwLAorMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjIwNCwgMHgzYzA1MDAwOSwKKzB4YWZhMjAwMTQsIDB4OGZhNjAwMjAsIDB4MzRhNTAzMDAsIDB4YzAwMmIzYiwKKzB4MjIwMzgyMSwgMHg4ZjQyMDJlMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDJlMCwKKzB4OGY0MjAyZTAsIDB4OGY0MjAyZjAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZjAsCisweDhmNDIwMmYwLCAweDhmYTIwMDM0LCAweDhmYmYwMDU4LCAweDhmYmUwMDU0LAorMHg4ZmI1MDA1MCwgMHg4ZmIzMDA0YywgMHg4ZmIyMDA0OCwgMHg4ZmIxMDA0NCwKKzB4OGZiMDAwNDAsIDB4M2UwMDAwOCwgMHgyN2JkMDA2MCwgMHgyN2JkZmZmOCwKKzB4MjQwOGZmZmYsIDB4MTBhMDAwMTQsIDB4NDgyMSwgMHgzYzBhZWRiOCwKKzB4MzU0YTgzMjAsIDB4OTA4NzAwMDAsIDB4MjQ4NDAwMDEsIDB4MzAyMSwKKzB4MTA3MTAyNiwgMHgzMDQyMDAwMSwgMHgxMDQwMDAwMiwgMHg4MTg0MiwKKzB4NmExODI2LCAweDYwNDAyMSwgMHgyNGM2MDAwMSwgMHgyY2MyMDAwOCwKKzB4MTQ0MGZmZjcsIDB4NzM4NDIsIDB4MjUyOTAwMDEsIDB4MTI1MTAyYiwKKzB4MTQ0MGZmZjAsIDB4MCwgMHgxMDAxMDIxLCAweDNlMDAwMDgsCisweDI3YmQwMDA4LCAweDI3YmRmZmIwLCAweGFmYmYwMDQ4LCAweGFmYmUwMDQ0LAorMHhhZmI1MDA0MCwgMHhhZmIzMDAzYywgMHhhZmIyMDAzOCwgMHhhZmIxMDAzNCwKKzB4YWZiMDAwMzAsIDB4OGY4NzAyMjAsIDB4YWZhNzAwMjQsIDB4OGY4NzAyMDAsCisweGFmYTcwMDJjLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLAorMHg0MzEwMjQsIDB4MzQ0MjAwMDQsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMDAsCisweDNjMDNjMGZmLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHgzNDQyMDAwNCwKKzB4YWY4MjAyMDAsIDB4OGY1MzAzNTgsIDB4OGY1NTAzNWMsIDB4OGY1ZTAzNjAsCisweDhmNDcwMzY0LCAweGFmYTcwMDE0LCAweDhmNDcwMzY4LCAweGFmYTcwMDFjLAorMHg4ZjQyMDJkMCwgMHgyNzQ0MDFjMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDJkMCwKKzB4OGY1MDAyZDAsIDB4OGY1MTAyMDQsIDB4OGY1MjAyMDAsIDB4YzAwMmJhOCwKKzB4MjQwNTA0MDAsIDB4YWY1MzAzNTgsIDB4YWY1NTAzNWMsIDB4YWY1ZTAzNjAsCisweDhmYTcwMDE0LCAweGFmNDcwMzY0LCAweDhmYTcwMDFjLCAweGFmNDcwMzY4LAorMHhhZjUwMDJkMCwgMHhhZjUxMDIwNCwgMHhhZjUyMDIwMCwgMHg4YzAyMDI1YywKKzB4Mjc0NDAyMjQsIDB4YWY0MjAxZjAsIDB4OGMwMjAyNjAsIDB4MjQwNTAyMDAsCisweDI0MDYwMDA4LCAweGFmNDIwMWY4LCAweDI0MDIwMDA2LCAweGMwMDJiYmYsCisweGFmNDIwMWY0LCAweDNjMDIzYjlhLCAweDM0NDJjYTAwLCAweGFmNDIwMWZjLAorMHgyNDAyMDNlOCwgMHgyNDA0MDAwMiwgMHgyNDAzMDAwMSwgMHhhZjQyMDI5NCwKKzB4YWY0NDAyOTAsIDB4YWY0MzAyOWMsIDB4OGY4MjAyMjAsIDB4MzA0MjAwMDgsCisweDEwNDAwMDA0LCAweDAsIDB4YWY0MzAyOTgsIDB4MTAwMDAwMDMsCisweDMwMjEsIDB4YWY0NDAyOTgsIDB4MzAyMSwgMHgzYzAzMDAwMSwKKzB4NjYxODIxLCAweDkwNjM2ZDAwLCAweDM0NjEwMjEsIDB4MjRjNjAwMDEsCisweGEwNDMwMjJjLCAweDJjYzIwMDBmLCAweDE0NDBmZmY4LCAweDM0NjE4MjEsCisweDI0YzYwMDAxLCAweDhmODIwMDQwLCAweDI0MDQwMDgwLCAweDI0MDUwMDgwLAorMHgyMTcwMiwgMHgyNDQyMDAzMCwgMHhhMDYyMDIyYywgMHgzNDYxMDIxLAorMHhjMDAyYmE4LCAweGEwNDAwMjJjLCAweDhmYTcwMDI0LCAweDMwZTIwMDA0LAorMHgxNDQwMDAwNiwgMHgwLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLAorMHgzNDYzZmZmYiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4OGZhNzAwMmMsCisweDMwZTIwMDA0LCAweDE0NDAwMDA2LCAweDAsIDB4OGY4MjAyMDAsCisweDNjMDNjMGZmLCAweDM0NjNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwKKzB4OGZiZjAwNDgsIDB4OGZiZTAwNDQsIDB4OGZiNTAwNDAsIDB4OGZiMzAwM2MsCisweDhmYjIwMDM4LCAweDhmYjEwMDM0LCAweDhmYjAwMDMwLCAweDNlMDAwMDgsCisweDI3YmQwMDUwLCAweDAsIDB4MCwgMHhhZjQwMDEwNCwKKzB4MjQwNDAwMDEsIDB4NDEwYzAsIDB4MmUyMTgyMSwgMHgyNDgyMDAwMSwKKzB4M2MwMTAwMDEsIDB4MjMwODIxLCAweGE0MjIzNGQwLCAweDQwMjAyMSwKKzB4MmM4MjAwODAsIDB4MTQ0MGZmZjgsIDB4NDEwYzAsIDB4MjQwMjAwMDEsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhNDIwMzhkMCwgMHhhZjQyMDEwMCwKKzB4YWY4MDAyMjgsIDB4YWY4MDAyMmMsIDB4YWY4MDAyMzAsIDB4YWY4MDAyMzQsCisweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZlOCwgMHhhZmJmMDAxNCwKKzB4YWZiMDAwMTAsIDB4OGY0MjAxMDQsIDB4Mjg0MjAwMDUsIDB4MTA0MDAwMjYsCisweDgwODAyMSwgMHgzYzAyMDAwMSwgMHg4ZjQzMDEwNCwgMHgzNDQyMzBkMCwKKzB4MmUyMjAyMSwgMHgzMThjMCwgMHg2MjE4MjEsIDB4MmUzMTgyMSwKKzB4ODMxMDJiLCAweDEwNDAwMDE1LCAweDEwMjEsIDB4OTYwNzAwMDAsCisweDI0ODQwMDA2LCAweDI0NjYwMDA2LCAweDk0ODJmZmZjLCAweDE0NDcwMDA5LAorMHgyODIxLCAweDk0ODNmZmZlLCAweDk2MDIwMDAyLCAweDE0NjIwMDA2LAorMHhhMDEwMjEsIDB4OTQ4MjAwMDAsIDB4OTYwMzAwMDQsIDB4NDMxMDI2LAorMHgyYzQ1MDAwMSwgMHhhMDEwMjEsIDB4MTQ0MDAwMDksIDB4MjQ4NDAwMDgsCisweDg2MTAyYiwgMHgxNDQwZmZmMCwgMHgxMDIxLCAweDMwNDIwMGZmLAorMHgxNDQwMDAzMCwgMHgyNDAyMDAwMSwgMHgxMDAwMDAyZSwgMHgxMDIxLAorMHgxMDAwZmZmYSwgMHgyNDAyMDAwMSwgMHgyMDAyMDIxLCAweGMwMDI0MGMsCisweDI0MDUwMDA2LCAweDMwNDIwMDdmLCAweDIxOGMwLCAweDJlMzEwMjEsCisweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg5NDIyMzBkMCwgMHgxMDQwZmZmMiwKKzB4MmUzMTAyMSwgMHgzYzA2MDAwMSwgMHhjMjMwMjEsIDB4OTRjNjMwZDAsCisweDEwYzBmZmVkLCAweDNjMDgwMDAxLCAweDM1MDgzNGQyLCAweDk2MDcwMDAwLAorMHg2MTBjMCwgMHg1NzIwMjEsIDB4ODgyMDIxLCAweDk0ODIwMDAwLAorMHgxNDQ3MDAwOSwgMHgyODIxLCAweDk0ODMwMDAyLCAweDk2MDIwMDAyLAorMHgxNDYyMDAwNiwgMHhhMDEwMjEsIDB4OTQ4MjAwMDQsIDB4OTYwMzAwMDQsCisweDQzMTAyNiwgMHgyYzQ1MDAwMSwgMHhhMDEwMjEsIDB4MTQ0MDAwMDcsCisweDYxMGMwLCAweDJlMjEwMjEsIDB4M2MwNjAwMDEsIDB4YzIzMDIxLAorMHg5NGM2MzRkMCwgMHgxNGMwZmZlYiwgMHg2MTBjMCwgMHgxMGMwZmZkMiwKKzB4MjQwMjAwMDEsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMTgsIDB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZmIwLAorMHg4MDEwMjEsIDB4YWZiMDAwMzAsIDB4MjQ1MDAwMDIsIDB4MjAwMjAyMSwKKzB4MjQwNTAwMDYsIDB4YWZiMTAwMzQsIDB4NDA4ODIxLCAweGFmYmYwMDQ4LAorMHhhZmJlMDA0NCwgMHhhZmI1MDA0MCwgMHhhZmIzMDAzYywgMHhjMDAyNDBjLAorMHhhZmIyMDAzOCwgMHgzMDQ3MDA3ZiwgMHg3MTBjMCwgMHgyZTIxMDIxLAorMHgzYzA1MDAwMSwgMHhhMjI4MjEsIDB4OTRhNTMwZDAsIDB4NTBhMDAwMWMsCisweGEwMzAyMSwgMHgzYzA5MDAwMSwgMHgzNTI5MzRkMiwgMHg5NjI4MDAwMiwKKzB4NTEwYzAsIDB4NTcyMDIxLCAweDg5MjAyMSwgMHg5NDgyMDAwMCwKKzB4MTQ0ODAwMDksIDB4MzAyMSwgMHg5NDgzMDAwMiwgMHg5NjAyMDAwMiwKKzB4MTQ2MjAwMDYsIDB4YzAxMDIxLCAweDk0ODIwMDA0LCAweDk2MDMwMDA0LAorMHg0MzEwMjYsIDB4MmM0NjAwMDEsIDB4YzAxMDIxLCAweDE0NDAwMDA3LAorMHg1MTBjMCwgMHgyZTIxMDIxLCAweDNjMDUwMDAxLCAweGEyMjgyMSwKKzB4OTRhNTM0ZDAsIDB4MTRhMGZmZWIsIDB4NTEwYzAsIDB4YTAzMDIxLAorMHgxMGMwMDAxNCwgMHg2MTBjMCwgMHg1NzE4MjEsIDB4M2MwMTAwMDEsCisweDIzMDgyMSwgMHg4YzIzMzRkMCwgMHg1NzEwMjEsIDB4YWZhMzAwMTAsCisweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg4YzIyMzRkNCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYzOTQsIDB4YWZhMjAwMTQsIDB4OGUyNjAwMDAsIDB4OGUyNzAwMDQsCisweDNjMDUwMDA0LCAweGMwMDJiM2IsIDB4MzRhNTA0MDAsIDB4MTAwMDAwNjMsCisweDNjMDIwODAwLCAweDhmNDUwMTAwLCAweDEwYTAwMDA2LCAweDUxMGMwLAorMHgyZTIxMDIxLCAweDNjMDEwMDAxLCAweDIyMDgyMSwgMHg5NDIyMzRkMCwKKzB4YWY0MjAxMDAsIDB4YTAzMDIxLCAweDE0YzAwMDExLCAweDYyOGMwLAorMHg3MTBjMCwgMHgyZTIxMDIxLCAweGFmYTcwMDEwLCAweDNjMDEwMDAxLAorMHgyMjA4MjEsIDB4OTQyMjMwZDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDYzYTAsCisweGFmYTIwMDE0LCAweDhlMjYwMDAwLCAweDhlMjcwMDA0LCAweDNjMDUwMDA0LAorMHhjMDAyYjNiLCAweDM0YTUwNTAwLCAweDEwMDAwMDQ4LCAweDNjMDIwODAwLAorMHhiNzE4MjEsIDB4M2MwMjAwMDEsIDB4OTYwNDAwMDAsIDB4MzQ0MjM0ZDIsCisweDYyMTgyMSwgMHhhNDY0MDAwMCwgMHg4ZTAyMDAwMiwgMHg3MjBjMCwKKzB4YWM2MjAwMDIsIDB4MmU0MTAyMSwgMHgzYzAzMDAwMSwgMHg2MjE4MjEsCisweDk0NjMzMGQwLCAweDJlNTEwMjEsIDB4M2MwMTAwMDEsIDB4MjIwODIxLAorMHhhNDIzMzRkMCwgMHgyZTQxMDIxLCAweDNjMDEwMDAxLCAweDIyMDgyMSwKKzB4YTQyNjMwZDAsIDB4OGY0MjAxMDQsIDB4MjQ0MjAwMDEsIDB4Mjg0MjAwODAsCisweDEwNDAwMDBmLCAweDNjMDIwMDAyLCAweDhmNDIwMTA0LCAweDNjMDQwMDAxLAorMHgzNDg0MzBkMiwgMHg5NjAzMDAwMCwgMHgyMTBjMCwgMHg1NzEwMjEsCisweDQ0MTAyMSwgMHhhNDQzMDAwMCwgMHg4ZTAzMDAwMiwgMHhhYzQzMDAwMiwKKzB4OGY0MjAxMDQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAxMDQsIDB4M2MwMjAwMDIsCisweDJjMjEwMjQsIDB4MTA0MDAwMTEsIDB4NzIxNDIsIDB4M2MwMzAwMDEsCisweDM0NjMzOGQ4LCAweDI0MDIwMDAzLCAweDQ0MTAyMywgMHgyMTA4MCwKKzB4NTcyMDIxLCAweDgzMjAyMSwgMHg1NzEwMjEsIDB4NDMxMDIxLAorMHgzMGU1MDAxZiwgMHg4YzQzMDAwMCwgMHgyNDAyMDAwMSwgMHhhMjEwMDQsCisweDYyMTgyNSwgMHgxMDAwMDAwYywgMHhhYzgzMDAwMCwgMHgyNDAyMDAwMywKKzB4NDQxMDIzLCAweDIxMDgwLCAweDVjMjgyMSwgMHg1YzEwMjEsCisweDMwZTQwMDFmLCAweDhjNDMwMjI4LCAweDI0MDIwMDAxLCAweDgyMTAwNCwKKzB4NjIxODI1LCAweGFjYTMwMjI4LCAweDNjMDIwODAwLCAweDM0NDIxMDAwLAorMHgxODIxLCAweGFmYTIwMDIwLCAweDhmNWUwMDE4LCAweDI3YWEwMDIwLAorMHgyNDAyMDBmZiwgMHgxM2MyMDAwMiwgMHhhZmFhMDAyYywgMHgyN2MzMDAwMSwKKzB4OGMwMjAyMjgsIDB4NjA5MDIxLCAweDE2NDIwMDBlLCAweDFlMzhjMCwKKzB4OGY0MjAzM2MsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzM2MsIDB4OGY0MjAzM2MsCisweDhjMDIwMjI4LCAweDNjMDQwMDAxLCAweDI0ODQ2MzVjLCAweDNjMDUwMDA5LAorMHhhZmEwMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZmE2MDAyMCwgMHgxMDAwMDA2YiwKKzB4MzRhNTA1MDAsIDB4ZjcxMDIxLCAweDhmYTMwMDIwLCAweDhmYTQwMDI0LAorMHhhYzQzMDRjMCwgMHhhYzQ0MDRjNCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwKKzB4MjQ3MDAzZTgsIDB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxMDQwMDAxYiwKKzB4OTgyMSwgMHhlMDg4MjEsIDB4MjYzNTA0YzAsIDB4OGY0NDAxNzgsCisweDhmNDUwMTdjLCAweDIyMDE4MjEsIDB4MjQwYTAwMDQsIDB4YWZhYTAwMTAsCisweGFmYjIwMDE0LCAweDhmNDgwMDBjLCAweDEwMjEsIDB4MmY1MzAyMSwKKzB4YWZhODAwMTgsIDB4OGY0ODAxMGMsIDB4MjQwNzAwMDgsIDB4YTMyODIxLAorMHhhMzQ4MmIsIDB4ODIyMDIxLCAweDEwMGY4MDksIDB4ODkyMDIxLAorMHg1NDQwMDAwNiwgMHgyNDEzMDAwMSwgMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLAorMHgyYzQyMDNlOSwgMHgxNDQwZmZlOSwgMHgwLCAweDMyNjIwMGZmLAorMHg1NDQwMDAxNywgMHhhZjUyMDAxOCwgMHg4ZjQyMDM3OCwgMHgyNDQyMDAwMSwKKzB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsIDB4OGZhYTAwMmMsCisweGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLCAweDI0ODQ2MzY4LAorMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgMHg4ZDQ2MDAwMCwgMHgxMDAwMDAzMywKKzB4MzRhNTA2MDAsIDB4OGY0MjAzMDgsIDB4MjQxMzAwMDEsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzA4LCAweDhmNDIwMzA4LCAweDEwMDAwMDFjLCAweDMyNjIwMGZmLAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgyNDcwMDNlOCwgMHgyMDIxMDIzLAorMHgyYzQyMDNlOSwgMHgxMDQwMDAxNCwgMHg5ODIxLCAweDI0MTEwMDEwLAorMHg4ZjQyMDAwYywgMHg4ZjQ0MDE2MCwgMHg4ZjQ1MDE2NCwgMHg4Zjg2MDEyMCwKKzB4YWZiMTAwMTAsIDB4YWZiMjAwMTQsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsCisweDI0MDcwMDA4LCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwZmZlNSwKKzB4MCwgMHg4ZjgyMDA1NCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LAorMHgxNDQwZmZlZiwgMHgwLCAweDMyNjIwMGZmLCAweDE0NDAwMDExLAorMHgwLCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LAorMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywgMHhhZmEyMDAxMCwKKzB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDYzNzAsIDB4M2MwNTAwMDksCisweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDM0YTUwNzAwLCAweGMwMDJiM2IsCisweDNjMDM4MjEsIDB4OGY0MjAyYjQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyYjQsCisweDhmNDIwMmI0LCAweDhmNDIwMmY0LCAweDI0NDIwMDAxLCAweGFmNDIwMmY0LAorMHg4ZjQyMDJmNCwgMHg4ZmJmMDA0OCwgMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwKKzB4OGZiMzAwM2MsIDB4OGZiMjAwMzgsIDB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsCisweDNlMDAwMDgsIDB4MjdiZDAwNTAsIDB4MjdiZGZmYTAsIDB4ODAxMDIxLAorMHhhZmIwMDA0MCwgMHgyNDUwMDAwMiwgMHgyMDAyMDIxLCAweDI0MDUwMDA2LAorMHhhZmIxMDA0NCwgMHg0MDg4MjEsIDB4YWZiZjAwNTgsIDB4YWZiZTAwNTQsCisweGFmYjUwMDUwLCAweGFmYjMwMDRjLCAweGMwMDI0MGMsIDB4YWZiMjAwNDgsCisweDMwNDgwMDdmLCAweDgxMGMwLCAweDJlMjEwMjEsIDB4M2MwNjAwMDEsCisweGMyMzAyMSwgMHg5NGM2MzBkMCwgMHgxMGMwMDAxYywgMHgzODIxLAorMHgzYzBhMDAwMSwgMHgzNTRhMzRkMiwgMHg5NjI5MDAwMiwgMHg2MTBjMCwKKzB4NTcyMDIxLCAweDhhMjAyMSwgMHg5NDgyMDAwMCwgMHgxNDQ5MDAwOSwKKzB4MjgyMSwgMHg5NDgzMDAwMiwgMHg5NjAyMDAwMiwgMHgxNDYyMDAwNiwKKzB4YTAxMDIxLCAweDk0ODIwMDA0LCAweDk2MDMwMDA0LCAweDQzMTAyNiwKKzB4MmM0NTAwMDEsIDB4YTAxMDIxLCAweDE0NDAwMDA4LCAweDYxMGMwLAorMHhjMDM4MjEsIDB4MmUyMTAyMSwgMHgzYzA2MDAwMSwgMHhjMjMwMjEsCisweDk0YzYzNGQwLCAweDE0YzBmZmVhLCAweDYxMGMwLCAweDE0YzAwMDExLAorMHhhZmE3MDAyOCwgMHg4MTBjMCwgMHgyZTIxMDIxLCAweGFmYTgwMDEwLAorMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OTQyMjMwZDAsIDB4M2MwNDAwMDEsCisweDI0ODQ2M2FjLCAweGFmYTIwMDE0LCAweDhlMjYwMDAwLCAweDhlMjcwMDA0LAorMHgzYzA1MDAwNCwgMHhjMDAyYjNiLCAweDM0YTUwOTAwLCAweDEwMDAwMDc1LAorMHgzYzAyMDgwMCwgMHgxMGUwMDAwYywgMHg2MTBjMCwgMHgyZTIxMDIxLAorMHgzYzAzMDAwMSwgMHg2MjE4MjEsIDB4OTQ2MzM0ZDAsIDB4NzEwYzAsCisweDJlMjEwMjEsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweGE0MjMzNGQwLAorMHgxMDAwMDAwYiwgMHgzYzA0MDAwMSwgMHgyZTIxMDIxLCAweDNjMDMwMDAxLAorMHg2MjE4MjEsIDB4OTQ2MzM0ZDAsIDB4ODEwYzAsIDB4MmUyMTAyMSwKKzB4M2MwMTAwMDEsIDB4MjIwODIxLCAweGE0MjMzMGQwLCAweDNjMDQwMDAxLAorMHgzNDg0MzBkMCwgMHg4ZjQzMDEwMCwgMHg2MTBjMCwgMHgyZTIxMDIxLAorMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4YTQyMzM0ZDAsIDB4OGY0MjAxMDQsCisweDJlNDM4MjEsIDB4MjgyMSwgMHgxODQwMDAyOSwgMHhhZjQ2MDEwMCwKKzB4MjRlNjAwMDYsIDB4OTRjM2ZmZmMsIDB4OTYwMjAwMDAsIDB4MTQ2MjAwMDksCisweDIwMjEsIDB4OTRjM2ZmZmUsIDB4OTYwMjAwMDIsIDB4MTQ2MjAwMDYsCisweDgwMTAyMSwgMHg5NGMyMDAwMCwgMHg5NjAzMDAwNCwgMHg0MzEwMjYsCisweDJjNDQwMDAxLCAweDgwMTAyMSwgMHg1MDQwMDAxNCwgMHgyNGE1MDAwMSwKKzB4OGY0MjAxMDQsIDB4MjQ0MmZmZmYsIDB4YTIxMDJhLCAweDEwNDAwMDBiLAorMHgyNGU0MDAwNCwgMHg5NDgyMDAwNiwgMHg4YzgzMDAwOCwgMHhhNDgyZmZmZSwKKzB4YWM4MzAwMDAsIDB4OGY0MjAxMDQsIDB4MjRhNTAwMDEsIDB4MjQ0MmZmZmYsCisweGEyMTAyYSwgMHgxNDQwZmZmNywgMHgyNDg0MDAwOCwgMHg4ZjQyMDEwNCwKKzB4MjQ0MmZmZmYsIDB4MTAwMDAwMDYsIDB4YWY0MjAxMDQsIDB4OGY0MjAxMDQsCisweDI0YzYwMDA4LCAweGEyMTAyYSwgMHgxNDQwZmZkYSwgMHgyNGU3MDAwOCwKKzB4ODEwYzAsIDB4MmUyMTAyMSwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsCisweDk0MjIzMGQwLCAweDE0NDAwMDIzLCAweDNjMDIwODAwLCAweDNjMDIwMDAyLAorMHgyYzIxMDI0LCAweDEwNDAwMDEyLCAweDgyMTQyLCAweDNjMDMwMDAxLAorMHgzNDYzMzhkOCwgMHgyNDAyMDAwMywgMHg0NDEwMjMsIDB4MjEwODAsCisweDU3MjAyMSwgMHg4MzIwMjEsIDB4NTcxMDIxLCAweDQzMTAyMSwKKzB4MzEwNTAwMWYsIDB4MjQwMzAwMDEsIDB4OGM0MjAwMDAsIDB4YTMxODA0LAorMHgzMTgyNywgMHg0MzEwMjQsIDB4MTAwMDAwMGQsIDB4YWM4MjAwMDAsCisweDI0MDIwMDAzLCAweDQ0MTAyMywgMHgyMTA4MCwgMHg1YzI4MjEsCisweDVjMTAyMSwgMHgzMTA0MDAxZiwgMHgyNDAzMDAwMSwgMHg4YzQyMDIyOCwKKzB4ODMxODA0LCAweDMxODI3LCAweDQzMTAyNCwgMHhhY2EyMDIyOCwKKzB4M2MwMjA4MDAsIDB4MzQ0MjIwMDAsIDB4MTgyMSwgMHhhZmEyMDAyMCwKKzB4OGY1ZTAwMTgsIDB4MjdhYjAwMjAsIDB4MjQwMjAwZmYsIDB4MTNjMjAwMDIsCisweGFmYWIwMDM0LCAweDI3YzMwMDAxLCAweDhjMDIwMjI4LCAweDYwOTAyMSwKKzB4MTY0MjAwMGUsIDB4MWUzOGMwLCAweDhmNDIwMzNjLCAweDI0NDIwMDAxLAorMHhhZjQyMDMzYywgMHg4ZjQyMDMzYywgMHg4YzAyMDIyOCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDYzNWMsIDB4M2MwNTAwMDksIDB4YWZhMDAwMTQsIDB4YWZhMjAwMTAsCisweDhmYTYwMDIwLCAweDEwMDAwMDZiLCAweDM0YTUwNTAwLCAweGY3MTAyMSwKKzB4OGZhMzAwMjAsIDB4OGZhNDAwMjQsIDB4YWM0MzA0YzAsIDB4YWM0NDA0YzQsCisweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsCisweDJjNDIwM2U5LCAweDEwNDAwMDFiLCAweDk4MjEsIDB4ZTA4ODIxLAorMHgyNjM1MDRjMCwgMHg4ZjQ0MDE3OCwgMHg4ZjQ1MDE3YywgMHgyMjAxODIxLAorMHgyNDBiMDAwNCwgMHhhZmFiMDAxMCwgMHhhZmIyMDAxNCwgMHg4ZjQ4MDAwYywKKzB4MTAyMSwgMHgyZjUzMDIxLCAweGFmYTgwMDE4LCAweDhmNDgwMTBjLAorMHgyNDA3MDAwOCwgMHhhMzI4MjEsIDB4YTM0ODJiLCAweDgyMjAyMSwKKzB4MTAwZjgwOSwgMHg4OTIwMjEsIDB4NTQ0MDAwMDYsIDB4MjQxMzAwMDEsCisweDhmODIwMDU0LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTQ0MGZmZTksCisweDAsIDB4MzI2MjAwZmYsIDB4NTQ0MDAwMTcsIDB4YWY1MjAwMTgsCisweDhmNDIwMzc4LCAweDI0NDIwMDAxLCAweGFmNDIwMzc4LCAweDhmNDIwMzc4LAorMHg4ZjgyMDEyMCwgMHg4ZmFiMDAzNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyNCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDYzNjgsIDB4M2MwNTAwMDksIDB4YWZhMjAwMTQsCisweDhkNjYwMDAwLCAweDEwMDAwMDMzLCAweDM0YTUwNjAwLCAweDhmNDIwMzA4LAorMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwOCwgMHg4ZjQyMDMwOCwKKzB4MTAwMDAwMWMsIDB4MzI2MjAwZmYsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsCisweDI0NzAwM2U4LCAweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTA0MDAwMTQsCisweDk4MjEsIDB4MjQxMTAwMTAsIDB4OGY0MjAwMGMsIDB4OGY0NDAxNjAsCisweDhmNDUwMTY0LCAweDhmODYwMTIwLCAweGFmYjEwMDEwLCAweGFmYjIwMDE0LAorMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHgyNDA3MDAwOCwgMHg0MGY4MDksCisweDI0YzYwMDFjLCAweDE0NDBmZmU1LCAweDAsIDB4OGY4MjAwNTQsCisweDIwMjEwMjMsIDB4MmM0MjAzZTksIDB4MTQ0MGZmZWYsIDB4MCwKKzB4MzI2MjAwZmYsIDB4MTQ0MDAwMTEsIDB4MCwgMHg4ZjQyMDM3OCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzNzgsIDB4OGY0MjAzNzgsIDB4OGY4MjAxMjAsCisweDhmYWIwMDM0LCAweGFmYTIwMDEwLCAweDhmODIwMTI0LCAweDNjMDQwMDAxLAorMHgyNDg0NjM3MCwgMHgzYzA1MDAwOSwgMHhhZmEyMDAxNCwgMHg4ZDY2MDAwMCwKKzB4MzRhNTA3MDAsIDB4YzAwMmIzYiwgMHgzYzAzODIxLCAweDhmNDIwMmI4LAorMHgyNDQyMDAwMSwgMHhhZjQyMDJiOCwgMHg4ZjQyMDJiOCwgMHg4ZjQyMDJmNCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAyZjQsIDB4OGY0MjAyZjQsIDB4OGZiZjAwNTgsCisweDhmYmUwMDU0LCAweDhmYjUwMDUwLCAweDhmYjMwMDRjLCAweDhmYjIwMDQ4LAorMHg4ZmIxMDA0NCwgMHg4ZmIwMDA0MCwgMHgzZTAwMDA4LCAweDI3YmQwMDYwLAorMHgwLCAweDAsIDB4MCwgMHgyN2JkZmZlMCwKKzB4Mjc2NDQwMDAsIDB4YWZiZjAwMTgsIDB4YzAwMmJhOCwgMHgyNDA1MTAwMCwKKzB4M2MwMzAwMDEsIDB4MzQ2MzJjYzAsIDB4M2MwNDAwMDEsIDB4MzQ4NDJlYzgsCisweDI0MDIwMDIwLCAweGFmODIwMTFjLCAweDJlMzEwMjEsIDB4YWY4MDAxMDAsCisweGFmODAwMTA0LCAweGFmODAwMTA4LCAweGFmODAwMTEwLCAweGFmODAwMTE0LAorMHhhZjgwMDExOCwgMHhhZjgwMDEyMCwgMHhhZjgwMDEyNCwgMHhhZjgwMDEyOCwKKzB4YWY4MDAxMzAsIDB4YWY4MDAxMzQsIDB4YWY4MDAxMzgsIDB4YWY0MjAwZWMsCisweDJlMzEwMjEsIDB4YWY0MjAwZjAsIDB4MmU0MTAyMSwgMHhhZjQyMDBmNCwKKzB4MmU0MTAyMSwgMHhhZjQyMDBmOCwgMHgzYzAyMDAwMSwgMHg1NzEwMjEsCisweDkwNDI0MGY0LCAweDE0NDAwMDFjLCAweDNjMDUwMDAxLCAweDhmODIwMTFjLAorMHgzYzA0MDAwMSwgMHgyNDg0NjQ3MCwgMHgzYzA1MDAwMSwgMHgzNDQyMDAwMSwKKzB4YWY4MjAxMWMsIDB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMWMsCisweDM0YTUwMTAwLCAweGMwMDJiM2IsIDB4MzgyMSwgMHg4YzAyMDIxOCwKKzB4MzA0MjAwNDAsIDB4MTA0MDAwMTQsIDB4MCwgMHg4ZjgyMDExYywKKzB4M2MwNDAwMDEsIDB4MjQ4NDY0N2MsIDB4M2MwNTAwMDEsIDB4MzQ0MjAwMDQsCisweGFmODIwMTFjLCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMTFjLAorMHgxMDAwMDAwNywgMHgzNGE1MDIwMCwgMHgzYzA0MDAwMSwgMHgyNDg0NjQ4NCwKKzB4YWZhMDAwMTAsIDB4YWZhMDAwMTQsIDB4OGY4NjAxMWMsIDB4MzRhNTAzMDAsCisweGMwMDJiM2IsIDB4MzgyMSwgMHg4ZmJmMDAxOCwgMHgzZTAwMDA4LAorMHgyN2JkMDAyMCwgMHg4ZmE5MDAxMCwgMHg4ZjgzMDEyYywgMHg4ZmFhMDAxNCwKKzB4OGZhYjAwMTgsIDB4MTA2MDAwMGEsIDB4Mjc2MjRmZTAsIDB4MTQ2MjAwMDIsCisweDI0NjgwMDIwLCAweDI3Njg0ODAwLCAweDhmODIwMTI4LCAweDExMDIwMDA0LAorMHgwLCAweDhmODIwMTI0LCAweDE1MDIwMDA3LCAweDAsCisweDhmNDMwMzM0LCAweDEwMjEsIDB4MjQ2MzAwMDEsIDB4YWY0MzAzMzQsCisweDEwMDAwMDM5LCAweDhmNDMwMzM0LCAweGFjNjQwMDAwLCAweGFjNjUwMDA0LAorMHhhYzY2MDAwOCwgMHhhNDY3MDAwZSwgMHhhYzY5MDAxOCwgMHhhYzZhMDAxYywKKzB4YWM2YjAwMTAsIDB4YWM2MjAwMTQsIDB4YWY4ODAxMjAsIDB4OGY0MjAwZmMsCisweDhmNDQwMGY0LCAweDI0NDJmZmZmLCAweGFmNDIwMGZjLCAweDhjODIwMDAwLAorMHgxMDQ5MDAwNSwgMHgzMDQyZmY4ZiwgMHgxMDQwMDAxOSwgMHgzMTIyZmY4ZiwKKzB4MTA0MDAwMTgsIDB4M2MwMjAwMDEsIDB4OGM4MzAwMDQsIDB4MmM2MjAwMTAsCisweDEwNDAwMDEzLCAweDNjMDIwMDAxLCAweDI0NjMwMDAxLCAweGFjODMwMDA0LAorMHg4ZjQzMDBmOCwgMHgzNDQyMzBjOCwgMHgyZTIxMDIxLCAweDU0NjIwMDA0LAorMHgyNDYyMDAwOCwgMHgzYzAyMDAwMSwgMHgzNDQyMmVjOCwgMHgyZTIxMDIxLAorMHgxNDQ0MDAxNSwgMHgyNDAyMDAwMSwgMHg4ZjgyMDEyOCwgMHgyNDQyMDAyMCwKKzB4YWY4MjAxMjgsIDB4OGY4MjAxMjgsIDB4MTAwMDAwMGYsIDB4MjQwMjAwMDEsCisweDNjMDIwMDAxLCAweDM0NDIzMGM4LCAweDJlMjEwMjEsIDB4NTQ4MjAwMDQsCisweDI0ODIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyZWM4LCAweDJlMjEwMjEsCisweDQwMjAyMSwgMHgyNDAyMDAwMSwgMHhhZjQ0MDBmNCwgMHhhYzg5MDAwMCwKKzB4YWM4MjAwMDQsIDB4MjQwMjAwMDEsIDB4M2UwMDAwOCwgMHgwLAorMHgzZTAwMDA4LCAweDAsIDB4OGZhOTAwMTAsIDB4OGY4MzAxMGMsCisweDhmYWEwMDE0LCAweDhmYWIwMDE4LCAweDEwNjAwMDBhLCAweDI3NjI0N2UwLAorMHgxNDYyMDAwMiwgMHgyNDY4MDAyMCwgMHgyNzY4NDAwMCwgMHg4ZjgyMDEwOCwKKzB4MTEwMjAwMDQsIDB4MCwgMHg4ZjgyMDEwNCwgMHgxNTAyMDAwNywKKzB4MCwgMHg4ZjQzMDMzOCwgMHgxMDIxLCAweDI0NjMwMDAxLAorMHhhZjQzMDMzOCwgMHgxMDAwMDAzNSwgMHg4ZjQzMDMzOCwgMHhhYzY0MDAwMCwKKzB4YWM2NTAwMDQsIDB4YWM2NjAwMDgsIDB4YTQ2NzAwMGUsIDB4YWM2OTAwMTgsCisweGFjNmEwMDFjLCAweGFjNmIwMDEwLCAweGFjNjIwMDE0LCAweGFmODgwMTAwLAorMHg4ZjQ0MDBlYywgMHg4YzgyMDAwMCwgMHgzMDQyMDAwNiwgMHgxMDQwMDAxOSwKKzB4MzEyMjAwMDYsIDB4MTA0MDAwMTgsIDB4M2MwMjAwMDEsIDB4OGM4MzAwMDQsCisweDJjNjIwMDEwLCAweDEwNDAwMDEzLCAweDNjMDIwMDAxLCAweDI0NjMwMDAxLAorMHhhYzgzMDAwNCwgMHg4ZjQzMDBmMCwgMHgzNDQyMmVjMCwgMHgyZTIxMDIxLAorMHg1NDYyMDAwNCwgMHgyNDYyMDAwOCwgMHgzYzAyMDAwMSwgMHgzNDQyMmNjMCwKKzB4MmUyMTAyMSwgMHgxNDQ0MDAxNSwgMHgyNDAyMDAwMSwgMHg4ZjgyMDEwOCwKKzB4MjQ0MjAwMjAsIDB4YWY4MjAxMDgsIDB4OGY4MjAxMDgsIDB4MTAwMDAwMGYsCisweDI0MDIwMDAxLCAweDNjMDIwMDAxLCAweDM0NDIyZWMwLCAweDJlMjEwMjEsCisweDU0ODIwMDA0LCAweDI0ODIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyY2MwLAorMHgyZTIxMDIxLCAweDQwMjAyMSwgMHgyNDAyMDAwMSwgMHhhZjQ0MDBlYywKKzB4YWM4OTAwMDAsIDB4YWM4MjAwMDQsIDB4MjQwMjAwMDEsIDB4M2UwMDAwOCwKKzB4MCwgMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsCisweDNjMDQwMDAxLCAweDI0ODQ2NDhjLCAweDNjMDUwMDAxLCAweGFmYmYwMDI0LAorMHhhZmIyMDAyMCwgMHhhZmIxMDAxYywgMHhhZmIwMDAxOCwgMHg4ZjkwMDEwNCwKKzB4OGY5MTAwYjAsIDB4OGY5MjAxMWMsIDB4MzRhNTI1MDAsIDB4OGY4MjAxMDAsCisweDI0MDMwMjEsIDB4MjIwMzgyMSwgMHhhZmEyMDAxMCwgMHhjMDAyYjNiLAorMHhhZmIwMDAxNCwgMHg4ZTAyMDAwOCwgMHhhZmEyMDAxMCwgMHg4ZTAyMDAwYywKKzB4M2MwNDAwMDEsIDB4MjQ4NDY0OTgsIDB4YWZhMjAwMTQsIDB4OGUwNjAwMDAsCisweDhlMDcwMDA0LCAweDNjMDUwMDAxLCAweGMwMDJiM2IsIDB4MzRhNTI1MTAsCisweDhlMDIwMDE4LCAweGFmYTIwMDEwLCAweDhlMDIwMDFjLCAweDNjMDQwMDAxLAorMHgyNDg0NjRhNCwgMHhhZmEyMDAxNCwgMHg4ZTA2MDAxMCwgMHg4ZTA3MDAxNCwKKzB4M2MwNTAwMDEsIDB4YzAwMmIzYiwgMHgzNGE1MjUyMCwgMHgzYzAyN2YwMCwKKzB4MjIyMTAyNCwgMHgzYzAzMDgwMCwgMHg1NDQzMDAxNiwgMHgzYzAzMDIwMCwKKzB4OGY4MjAwOWMsIDB4MzA0MmZmZmYsIDB4MTQ0MDAwMTIsIDB4M2MwMzAyMDAsCisweDNjMDQwMDAxLCAweDI0ODQ2NGIwLCAweDNjMDUwMDAyLCAweDM0YTVmMDMwLAorMHgzMDIxLCAweDM4MjEsIDB4MzY0MjAwMDIsIDB4YWY4MjAxMWMsCisweDM2MjIwMDAxLCAweGFmODIwMGIwLCAweGFmOTAwMTA0LCAweGFmOTIwMTFjLAorMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LCAweDEwMDAwMDI0LAorMHgwLCAweDJjMzEwMjQsIDB4MTA0MDAwMGQsIDB4MjIzMTAyNCwKKzB4MTA0MDAwMGIsIDB4MzY0MjAwMDIsIDB4YWY4MjAxMWMsIDB4MzYyMjAwMDEsCisweGFmODIwMGIwLCAweGFmOTAwMTA0LCAweGFmOTIwMTFjLCAweDhmNDIwMzMwLAorMHgyNDQyMDAwMSwgMHhhZjQyMDMzMCwgMHgxMDAwMDAxNSwgMHg4ZjQyMDMzMCwKKzB4M2MwNDAwMDEsIDB4MjQ4NDY0YjgsIDB4MjQwMjAyYTksIDB4YWZhMjAwMTAsCisweGFmYTAwMDE0LCAweDhmODYwMTQ0LCAweDNjMDcwMDAxLCAweDI0ZTc2NGMwLAorMHhjMDAyYjNiLCAweDM0MDVkZWFkLCAweDhmODIwMTFjLCAweDM0NDIwMDAyLAorMHhhZjgyMDExYywgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIyMCwKKzB4OGY4MjAxNDAsIDB4M2MwMzAwMDEsIDB4NDMxMDI1LCAweGFmODIwMTQwLAorMHg4ZmJmMDAyNCwgMHg4ZmIyMDAyMCwgMHg4ZmIxMDAxYywgMHg4ZmIwMDAxOCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgyN2JkZmZkOCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDY0ZTgsIDB4M2MwNTAwMDEsIDB4YWZiZjAwMjQsIDB4YWZiMjAwMjAsCisweGFmYjEwMDFjLCAweGFmYjAwMDE4LCAweDhmOTAwMTI0LCAweDhmOTEwMGEwLAorMHg4ZjkyMDExYywgMHgzNGE1MjYwMCwgMHg4ZjgyMDEyMCwgMHgyNDAzMDIxLAorMHgyMjAzODIxLCAweGFmYTIwMDEwLCAweGMwMDJiM2IsIDB4YWZiMDAwMTQsCisweDhlMDIwMDA4LCAweGFmYTIwMDEwLCAweDhlMDIwMDBjLCAweDNjMDQwMDAxLAorMHgyNDg0NjRmNCwgMHhhZmEyMDAxNCwgMHg4ZTA2MDAwMCwgMHg4ZTA3MDAwNCwKKzB4M2MwNTAwMDEsIDB4YzAwMmIzYiwgMHgzNGE1MjYxMCwgMHg4ZTAyMDAxOCwKKzB4YWZhMjAwMTAsIDB4OGUwMjAwMWMsIDB4M2MwNDAwMDEsIDB4MjQ4NDY1MDAsCisweGFmYTIwMDE0LCAweDhlMDYwMDEwLCAweDhlMDcwMDE0LCAweDNjMDUwMDAxLAorMHhjMDAyYjNiLCAweDM0YTUyNjIwLCAweDNjMDI3ZjAwLCAweDIyMjEwMjQsCisweDNjMDMwODAwLCAweDU0NDMwMDE2LCAweDNjMDMwMjAwLCAweDhmODIwMGFjLAorMHgzMDQyZmZmZiwgMHgxNDQwMDAxMiwgMHgzYzAzMDIwMCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDY1MGMsIDB4M2MwNTAwMDEsIDB4MzRhNWYwMzAsIDB4MzAyMSwKKzB4MzgyMSwgMHgzNjQyMDAwMiwgMHhhZjgyMDExYywgMHgzNjIyMDAwMSwKKzB4YWY4MjAwYTAsIDB4YWY5MDAxMjQsIDB4YWY5MjAxMWMsIDB4YWZhMDAwMTAsCisweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4MTAwMDAwMjQsIDB4MCwKKzB4MmMzMTAyNCwgMHgxMDQwMDAwZCwgMHgyMjMxMDI0LCAweDEwNDAwMDBiLAorMHgzNjQyMDAwMiwgMHhhZjgyMDExYywgMHgzNjIyMDAwMSwgMHhhZjgyMDBhMCwKKzB4YWY5MDAxMjQsIDB4YWY5MjAxMWMsIDB4OGY0MjAzMmMsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzJjLCAweDEwMDAwMDE1LCAweDhmNDIwMzJjLCAweDNjMDQwMDAxLAorMHgyNDg0NjRiOCwgMHgyNDAyMDJlMiwgMHhhZmEyMDAxMCwgMHhhZmEwMDAxNCwKKzB4OGY4NjAxNDQsIDB4M2MwNzAwMDEsIDB4MjRlNzY0YzAsIDB4YzAwMmIzYiwKKzB4MzQwNWRlYWQsIDB4OGY4MjAxMWMsIDB4MzQ0MjAwMDIsIDB4YWY4MjAxMWMsCisweDhmODIwMjIwLCAweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMTQwLAorMHgzYzAzMDAwMSwgMHg0MzEwMjUsIDB4YWY4MjAxNDAsIDB4OGZiZjAwMjQsCisweDhmYjIwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAweDNlMDAwMDgsCisweDI3YmQwMDI4LCAweDYwMjEsIDB4NTAyMSwgMHgzMDIxLAorMHgyODIxLCAweDY4MjEsIDB4NDgyMSwgMHg3ODIxLAorMHg3MDIxLCAweDhmODgwMTI0LCAweDhmODcwMTA0LCAweDE1ODAwMDJlLAorMHg4ZjhiMDExYywgMHgxMWEwMDAxNCwgMHgzMTYyMDgwMCwgMHg4ZjgyMDEyMCwKKzB4MTA0NjAwMjksIDB4MCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmVlNCwKKzB4OGNjMjAwMDAsIDB4OGNjMzAwMDQsIDB4YWM4MjAwMDAsIDB4YWM4MzAwMDQsCisweDhjYzIwMDA4LCAweGFjODIwMDA4LCAweDk0YzIwMDBlLCAweGE0ODIwMDBlLAorMHg4Y2MyMDAxMCwgMHgyNDBjMDAwMSwgMHhhYzgyMDAxMCwgMHg4Y2MyMDAxNCwKKzB4MTAwMDAwMTIsIDB4MjRjNjAwMjAsIDB4MTA0MDAwMTcsIDB4MCwKKzB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsIDB4OGQwMjAwMDAsIDB4OGQwMzAwMDQsCisweGFjODIwMDAwLCAweGFjODMwMDA0LCAweDhkMDIwMDA4LCAweGFjODIwMDA4LAorMHg5NTAyMDAwZSwgMHhhNDgyMDAwZSwgMHg4ZDAyMDAxMCwgMHgyNTA2MDAyMCwKKzB4YWM4MjAwMTAsIDB4OGQwMjAwMTQsIDB4MjQwYzAwMDEsIDB4YzAxODIxLAorMHhhYzgyMDAxNCwgMHgyNzYyNGZlMCwgMHg0MzEwMmIsIDB4NTQ0MDAwMDEsCisweDI3NjM0ODAwLCAweDYwMzAyMSwgMHgxNTQwMDAyZiwgMHgzMTYyMDEwMCwKKzB4MTEyMDAwMTQsIDB4MzE2MjgwMDAsIDB4OGY4MjAxMDAsIDB4MTA0NTAwMmEsCisweDMxNjIwMTAwLCAweDNjMDQwMDAxLCAweDhjODQ2ZWUwLCAweDhjYTIwMDAwLAorMHg4Y2EzMDAwNCwgMHhhYzgyMDAwMCwgMHhhYzgzMDAwNCwgMHg4Y2EyMDAwOCwKKzB4YWM4MjAwMDgsIDB4OTRhMjAwMGUsIDB4YTQ4MjAwMGUsIDB4OGNhMjAwMTAsCisweDI0MGEwMDAxLCAweGFjODIwMDEwLCAweDhjYTIwMDE0LCAweDEwMDAwMDEyLAorMHgyNGE1MDAyMCwgMHgxMDQwMDAxOCwgMHgzMTYyMDEwMCwgMHgzYzA0MDAwMSwKKzB4OGM4NDZlZTAsIDB4OGNlMjAwMDAsIDB4OGNlMzAwMDQsIDB4YWM4MjAwMDAsCisweGFjODMwMDA0LCAweDhjZTIwMDA4LCAweGFjODIwMDA4LCAweDk0ZTIwMDBlLAorMHhhNDgyMDAwZSwgMHg4Y2UyMDAxMCwgMHgyNGU1MDAyMCwgMHhhYzgyMDAxMCwKKzB4OGNlMjAwMTQsIDB4MjQwYTAwMDEsIDB4YTAxODIxLCAweGFjODIwMDE0LAorMHgyNzYyNDdlMCwgMHg0MzEwMmIsIDB4NTQ0MDAwMDEsIDB4Mjc2MzQwMDAsCisweDYwMjgyMSwgMHgzMTYyMDEwMCwgMHg1NDQwMDAxZCwgMHgzMTYyMTAwMCwKKzB4MTFhMDAwMDksIDB4MzFhMjA4MDAsIDB4MTA0MDAwMDQsIDB4MjUwMjAwMjAsCisweDhmODIwMGE4LCAweGE1ZTIwMDAwLCAweDI1MDIwMDIwLCAweGFmODIwMTI0LAorMHg4Zjg4MDEyNCwgMHg2ODIxLCAweDExODAwMDExLCAweDMxNjIxMDAwLAorMHgzYzA0MDAwMSwgMHg4Yzg0NmVlNCwgMHg4YzgyMDAwMCwgMHg4YzgzMDAwNCwKKzB4YWY4MjAwODAsIDB4YWY4MzAwODQsIDB4OGM4MjAwMDgsIDB4YWY4MjAwYTQsCisweDk0ODIwMDBlLCAweGFmODIwMGFjLCAweDhjODIwMDEwLCAweDYwMjEsCisweGFmODIwMGEwLCAweDhjOGQwMDEwLCAweDhjOGYwMDE0LCAweDMxNjIxMDAwLAorMHgxNDQwZmY4MiwgMHgwLCAweDExMjAwMDBmLCAweDMxMjIwODAwLAorMHgxMDQwMDAwNCwgMHgzYzAyMDAwMiwgMHg4ZjgyMDBiOCwgMHhhNWMyMDAwMCwKKzB4M2MwMjAwMDIsIDB4MTIyMTAyNCwgMHgxMDQwMDAwNCwgMHgyNGUyMDAyMCwKKzB4OGY4MjAwYjQsIDB4YWY4MjAwZDQsIDB4MjRlMjAwMjAsIDB4YWY4MjAxMDQsCisweDhmODcwMTA0LCAweDQ4MjEsIDB4MTE0MGZmNzAsIDB4MCwKKzB4M2MwNDAwMDEsIDB4OGM4NDZlZTAsIDB4OGM4MjAwMDAsIDB4OGM4MzAwMDQsCisweGFmODIwMDkwLCAweGFmODMwMDk0LCAweDhjODIwMDA4LCAweGFmODIwMGI0LAorMHg5NDgyMDAwZSwgMHhhZjgyMDA5YywgMHg4YzgyMDAxMCwgMHg1MDIxLAorMHhhZjgyMDBiMCwgMHg4Yzg5MDAxMCwgMHgxMDAwZmY2MCwgMHg4YzhlMDAxNCwKKzB4M2UwMDAwOCwgMHgwLCAweDYwMjEsIDB4NTgyMSwKKzB4MzAyMSwgMHgyODIxLCAweDY4MjEsIDB4NTAyMSwKKzB4NzgyMSwgMHg3MDIxLCAweDhmODgwMTI0LCAweDhmODcwMTA0LAorMHgzYzE4MDEwMCwgMHgxNTgwMDAyZSwgMHg4Zjg5MDExYywgMHgxMWEwMDAxNCwKKzB4MzEyMjA4MDAsIDB4OGY4MjAxMjAsIDB4MTA0NjAwMjksIDB4MCwKKzB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsIDB4OGNjMjAwMDAsIDB4OGNjMzAwMDQsCisweGFjODIwMDAwLCAweGFjODMwMDA0LCAweDhjYzIwMDA4LCAweGFjODIwMDA4LAorMHg5NGMyMDAwZSwgMHhhNDgyMDAwZSwgMHg4Y2MyMDAxMCwgMHgyNDBjMDAwMSwKKzB4YWM4MjAwMTAsIDB4OGNjMjAwMTQsIDB4MTAwMDAwMTIsIDB4MjRjNjAwMjAsCisweDEwNDAwMDE3LCAweDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZlZTQsCisweDhkMDIwMDAwLCAweDhkMDMwMDA0LCAweGFjODIwMDAwLCAweGFjODMwMDA0LAorMHg4ZDAyMDAwOCwgMHhhYzgyMDAwOCwgMHg5NTAyMDAwZSwgMHhhNDgyMDAwZSwKKzB4OGQwMjAwMTAsIDB4MjUwNjAwMjAsIDB4YWM4MjAwMTAsIDB4OGQwMjAwMTQsCisweDI0MGMwMDAxLCAweGMwMTgyMSwgMHhhYzgyMDAxNCwgMHgyNzYyNGZlMCwKKzB4NDMxMDJiLCAweDU0NDAwMDAxLCAweDI3NjM0ODAwLCAweDYwMzAyMSwKKzB4MTU2MDAwMmYsIDB4MzEyMjAxMDAsIDB4MTE0MDAwMTQsIDB4MzEyMjgwMDAsCisweDhmODIwMTAwLCAweDEwNDUwMDJhLCAweDMxMjIwMTAwLCAweDNjMDQwMDAxLAorMHg4Yzg0NmVlMCwgMHg4Y2EyMDAwMCwgMHg4Y2EzMDAwNCwgMHhhYzgyMDAwMCwKKzB4YWM4MzAwMDQsIDB4OGNhMjAwMDgsIDB4YWM4MjAwMDgsIDB4OTRhMjAwMGUsCisweGE0ODIwMDBlLCAweDhjYTIwMDEwLCAweDI0MGIwMDAxLCAweGFjODIwMDEwLAorMHg4Y2EyMDAxNCwgMHgxMDAwMDAxMiwgMHgyNGE1MDAyMCwgMHgxMDQwMDAxOCwKKzB4MzEyMjAxMDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZlZTAsIDB4OGNlMjAwMDAsCisweDhjZTMwMDA0LCAweGFjODIwMDAwLCAweGFjODMwMDA0LCAweDhjZTIwMDA4LAorMHhhYzgyMDAwOCwgMHg5NGUyMDAwZSwgMHhhNDgyMDAwZSwgMHg4Y2UyMDAxMCwKKzB4MjRlNTAwMjAsIDB4YWM4MjAwMTAsIDB4OGNlMjAwMTQsIDB4MjQwYjAwMDEsCisweGEwMTgyMSwgMHhhYzgyMDAxNCwgMHgyNzYyNDdlMCwgMHg0MzEwMmIsCisweDU0NDAwMDAxLCAweDI3NjM0MDAwLCAweDYwMjgyMSwgMHgzMTIyMDEwMCwKKzB4NTQ0MDAwMWQsIDB4MzEyMjEwMDAsIDB4MTFhMDAwMDksIDB4MzFhMjA4MDAsCisweDEwNDAwMDA0LCAweDI1MDIwMDIwLCAweDhmODIwMGE4LCAweGE1ZTIwMDAwLAorMHgyNTAyMDAyMCwgMHhhZjgyMDEyNCwgMHg4Zjg4MDEyNCwgMHg2ODIxLAorMHgxMTgwMDAxMSwgMHgzMTIyMTAwMCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmVlNCwKKzB4OGM4MjAwMDAsIDB4OGM4MzAwMDQsIDB4YWY4MjAwODAsIDB4YWY4MzAwODQsCisweDhjODIwMDA4LCAweGFmODIwMGE0LCAweDk0ODIwMDBlLCAweGFmODIwMGFjLAorMHg4YzgyMDAxMCwgMHg2MDIxLCAweGFmODIwMGEwLCAweDhjOGQwMDEwLAorMHg4YzhmMDAxNCwgMHgzMTIyMTAwMCwgMHgxNDQwMDAyMiwgMHgwLAorMHgxMTQwMDAwZiwgMHgzMTQyMDgwMCwgMHgxMDQwMDAwNCwgMHgzYzAyMDAwMiwKKzB4OGY4MjAwYjgsIDB4YTVjMjAwMDAsIDB4M2MwMjAwMDIsIDB4MTQyMTAyNCwKKzB4MTA0MDAwMDQsIDB4MjRlMjAwMjAsIDB4OGY4MjAwYjQsIDB4YWY4MjAwZDQsCisweDI0ZTIwMDIwLCAweGFmODIwMTA0LCAweDhmODcwMTA0LCAweDUwMjEsCisweDExNjAwMDEwLCAweDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZlZTAsCisweDhjODIwMDAwLCAweDhjODMwMDA0LCAweGFmODIwMDkwLCAweGFmODMwMDk0LAorMHg4YzgyMDAwOCwgMHhhZjgyMDBiNCwgMHg5NDgyMDAwZSwgMHhhZjgyMDA5YywKKzB4OGM4MjAwMTAsIDB4NTgyMSwgMHhhZjgyMDBiMCwgMHg4YzhhMDAxMCwKKzB4OGM4ZTAwMTQsIDB4OGY4MjAwNzAsIDB4M2MwMzEwMDAsIDB4NDMxMDI0LAorMHgxMDQwZmY1YywgMHgwLCAweDhmODIwMDU0LCAweDI0NDIwMDA1LAorMHhhZjgyMDA3OCwgMHg4YzA0MDIzNCwgMHgxMDgwMDAxNiwgMHgxODIxLAorMHgzYzAyMDAwMSwgMHg1NzEwMjEsIDB4OGM0MjQwZTgsIDB4MjQ0MjAwMDUsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIyNDBlOCwgMHgzYzAyMDAwMSwKKzB4NTcxMDIxLCAweDhjNDI0MGU4LCAweDQ0MTAyYiwgMHgxNDQwMDAwOSwKKzB4MjQwMjAwMDEsIDB4M2MwMzAwODAsIDB4M2MwMTAwMDEsIDB4MzcwODIxLAorMHhhYzIwNDBlOCwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4MTAwMDAwMGMsCisweGEwMjI0MGYwLCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyNDBmMCwKKzB4MTQ0MDAwMDYsIDB4M2MwMjAwODAsIDB4M2MwMjAwMDEsIDB4NTcxMDIxLAorMHg5MDQyNDBmMSwgMHgxMDQwMDAwMiwgMHgzYzAyMDA4MCwgMHg2MjE4MjUsCisweDhjMDQwMjMwLCAweDEwODAwMDEzLCAweDAsIDB4M2MwMjAwMDEsCisweDU3MTAyMSwgMHg4YzQyNDBlYywgMHgyNDQyMDAwNSwgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGFjMjI0MGVjLCAweDNjMDIwMDAxLCAweDU3MTAyMSwKKzB4OGM0MjQwZWMsIDB4NDQxMDJiLCAweDE0NDAwMDA2LCAweDAsCisweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhYzIwNDBlYywgMHgxMDAwMDAwNiwKKzB4NzgxODI1LCAweDNjMDIwMDAxLCAweDU3MTAyMSwgMHg5MDQyNDBmMiwKKzB4NTQ0MDAwMDEsIDB4NzgxODI1LCAweDEwNjBmZjFhLCAweDAsCisweDhmNDIwMDAwLCAweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsCisweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsCisweDAsIDB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsCisweDAsIDB4OGY4MjAwNjAsIDB4NDMxMDI1LCAweGFmODIwMDYwLAorMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAweDEwMDBmZjA1LAorMHhhZjgwMDA0YywgMHgxMDAwZmYwMywgMHhhZjgwMDA0OCwgMHgzZTAwMDA4LAorMHgwLCAweDAsIDB4MCwgMHgzYzAyMDAwMSwKKzB4OGM0MjZkMjgsIDB4MjdiZGZmZTgsIDB4YWZiZjAwMTQsIDB4MTQ0MDAwMTIsCisweGFmYjAwMDEwLCAweDNjMTAwMDAxLCAweDI2MTA2ZjkwLCAweDIwMDIwMjEsCisweGMwMDJiYTgsIDB4MjQwNTIwMDAsIDB4MjYwMjFmZTAsIDB4M2MwMTAwMDEsCisweGFjMjI2ZWVjLCAweDNjMDEwMDAxLCAweGFjMjI2ZWU4LCAweGFjMDIwMjUwLAorMHgyNDAyMjAwMCwgMHhhYzEwMDI1NCwgMHhhYzAyMDI1OCwgMHgyNDAyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyMjZkMjgsIDB4OGZiZjAwMTQsIDB4OGZiMDAwMTAsCisweDNlMDAwMDgsIDB4MjdiZDAwMTgsIDB4M2MwOTAwMDEsIDB4OGQyOTZlZWMsCisweDhjODIwMDAwLCAweDhmYTMwMDEwLCAweDhmYTgwMDE0LCAweGFkMjIwMDAwLAorMHg4YzgyMDAwNCwgMHhhZDI1MDAwOCwgMHhhZDIyMDAwNCwgMHg4ZjgyMDA1NCwKKzB4YWQyNjAwMTAsIDB4YWQyNzAwMTQsIDB4YWQyMzAwMTgsIDB4YWQyODAwMWMsCisweGFkMjIwMDBjLCAweDI1MjlmZmUwLCAweDNjMDIwMDAxLCAweDI0NDI2ZjkwLAorMHgxMjIxMDJiLCAweDEwNDAwMDAzLCAweDAsIDB4M2MwOTAwMDEsCisweDhkMjk2ZWU4LCAweDNjMDIwMDAxLCAweDhjNDI2ZDEwLCAweGFkMjIwMDAwLAorMHgzYzAyMDAwMSwgMHg4YzQyNmQxMCwgMHgzYzAxMDAwMSwgMHhhYzI5NmVlYywKKzB4YWQyMjAwMDQsIDB4YWMwOTAyNTAsIDB4M2UwMDAwOCwgMHgwLAorMHgyN2JkZmZkMCwgMHhhZmIwMDAxMCwgMHgzYzEwMDAwMSwgMHg4ZTEwNmVlYywKKzB4M2MwMjAwMDEsIDB4OGM0MjZkMTAsIDB4YWZiMTAwMTQsIDB4ODA4ODIxLAorMHhhZmJlMDAyNCwgMHg4ZmJlMDA0MCwgMHg4ZmE0MDA0OCwgMHhhZmIyMDAxOCwKKzB4YTA5MDIxLCAweGFmYmYwMDI4LCAweGFmYjUwMDIwLCAweGFmYjMwMDFjLAorMHhhZTAyMDAwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmQxMCwgMHhjMDk4MjEsCisweGUwYTgyMSwgMHgxMDgwMDAwNiwgMHhhZTAyMDAwNCwgMHgyNjA1MDAwOCwKKzB4YzAwMmJiMywgMHgyNDA2MDAxOCwgMHgxMDAwMDAwNSwgMHgyNjEwZmZlMCwKKzB4MjYwNDAwMDgsIDB4YzAwMmJhOCwgMHgyNDA1MDAxOCwgMHgyNjEwZmZlMCwKKzB4M2MwMzAwMDEsIDB4MjQ2MzZmOTAsIDB4MjAzMTAyYiwgMHgxMDQwMDAwMywKKzB4MCwgMHgzYzEwMDAwMSwgMHg4ZTEwNmVlOCwgMHg4ZTIyMDAwMCwKKzB4YWUwMjAwMDAsIDB4OGUyMjAwMDQsIDB4YWUxMjAwMDgsIDB4YWUwMjAwMDQsCisweDhmODIwMDU0LCAweGFlMTMwMDEwLCAweGFlMTUwMDE0LCAweGFlMWUwMDE4LAorMHg4ZmE4MDA0NCwgMHhhZTA4MDAxYywgMHhhZTAyMDAwYywgMHgyNjEwZmZlMCwKKzB4MjAzMTAyYiwgMHgxMDQwMDAwMywgMHgwLCAweDNjMTAwMDAxLAorMHg4ZTEwNmVlOCwgMHgzYzAyMDAwMSwgMHg4YzQyNmQxMCwgMHhhZTAyMDAwMCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZkMTAsIDB4M2MwMTAwMDEsIDB4YWMzMDZlZWMsCisweGFlMDIwMDA0LCAweGFjMTAwMjUwLCAweDhmYmYwMDI4LCAweDhmYmUwMDI0LAorMHg4ZmI1MDAyMCwgMHg4ZmIzMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwKKzB4OGZiMDAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAzMCwgMHg4NTE4MjEsCisweDgzMTAyYiwgMHgxMDQwMDAwNiwgMHgwLCAweGFjODAwMDAwLAorMHgyNDg0MDAwNCwgMHg4MzEwMmIsIDB4NTQ0MGZmZmQsIDB4YWM4MDAwMDAsCisweDNlMDAwMDgsIDB4MCwgMHhhNjE4MjEsIDB4YTMxMDJiLAorMHgxMDQwMDAwNywgMHgwLCAweDhjODIwMDAwLCAweGFjYTIwMDAwLAorMHgyNGE1MDAwNCwgMHhhMzEwMmIsIDB4MTQ0MGZmZmIsIDB4MjQ4NDAwMDQsCisweDNlMDAwMDgsIDB4MCwgMHg4NjE4MjEsIDB4ODMxMDJiLAorMHgxMDQwMDAwNywgMHgwLCAweDhjYTIwMDAwLCAweGFjODIwMDAwLAorMHgyNDg0MDAwNCwgMHg4MzEwMmIsIDB4MTQ0MGZmZmIsIDB4MjRhNTAwMDQsCisweDNlMDAwMDgsIDB4MCwgMHg2MzA4MCwgMHg4NjE4MjEsCisweDgzMTAyYiwgMHgxMDQwMDAwNiwgMHgwLCAweGFjODUwMDAwLAorMHgyNDg0MDAwNCwgMHg4MzEwMmIsIDB4NTQ0MGZmZmQsIDB4YWM4NTAwMDAsCisweDNlMDAwMDgsIDB4MCwgMHgwLCAweDI2ZTUwMDI4LAorMHhhMDMwMjEsIDB4Mjc0MzAxYzAsIDB4OGY0ZDAzNTgsIDB4OGY0NzAzNWMsCisweDhmNDgwMzYwLCAweDhmNDkwMzY0LCAweDhmNGEwMzY4LCAweDhmNGIwMjA0LAorMHg4ZjRjMDIwMCwgMHgyNDY0MDQwMCwgMHg2NDEwMmIsIDB4MTA0MDAwMDgsCisweDNjMDIwOGZmLCAweDhjYzIwMDAwLCAweGFjNjIwMDAwLCAweDI0NjMwMDA0LAorMHg2NDEwMmIsIDB4MTQ0MGZmZmIsIDB4MjRjNjAwMDQsIDB4M2MwMjA4ZmYsCisweDM0NDJmZmZmLCAweDNjMDNjMGZmLCAweGFmNGQwMzU4LCAweGFmNDcwMzVjLAorMHhhZjQ4MDM2MCwgMHhhZjQ5MDM2NCwgMHhhZjRhMDM2OCwgMHhhZjRiMDIwNCwKKzB4YWY0YzAyMDAsIDB4OGY4NDAyMjAsIDB4MzQ2M2ZmZmYsIDB4OGY4NjAyMDAsCisweDgyMTAyNCwgMHgzNDQyMDAwNCwgMHhjMzE4MjQsIDB4MzQ2MzAwMDQsCisweGFmODIwMjIwLCAweGFmODMwMjAwLCAweDhjYTIwMjE0LCAweGFjMDIwMDg0LAorMHg4Y2EyMDIxOCwgMHhhYzAyMDA4OCwgMHg4Y2EyMDIxYywgMHhhYzAyMDA4YywKKzB4OGNhMjAyMjAsIDB4YWMwMjAwOTAsIDB4OGNhMjAyMjQsIDB4YWMwMjAwOTQsCisweDhjYTIwMjI4LCAweGFjMDIwMDk4LCAweDhjYTIwMjJjLCAweGFjMDIwMDljLAorMHg4Y2EyMDIzMCwgMHhhYzAyMDBhMCwgMHg4Y2EyMDIzNCwgMHhhYzAyMDBhNCwKKzB4OGNhMjAyMzgsIDB4YWMwMjAwYTgsIDB4OGNhMjAyM2MsIDB4YWMwMjAwYWMsCisweDhjYTIwMjQwLCAweGFjMDIwMGIwLCAweDhjYTIwMjQ0LCAweGFjMDIwMGI0LAorMHg4Y2EyMDI0OCwgMHhhYzAyMDBiOCwgMHg4Y2EyMDI0YywgMHhhYzAyMDBiYywKKzB4OGNhMjAwMWMsIDB4YWMwMjAwODAsIDB4OGNhMjAwMTgsIDB4YWMwMjAwYzAsCisweDhjYTIwMDIwLCAweGFjMDIwMGNjLCAweDhjYTIwMDI0LCAweGFjMDIwMGQwLAorMHg4Y2EyMDFkMCwgMHhhYzAyMDBlMCwgMHg4Y2EyMDFkNCwgMHhhYzAyMDBlNCwKKzB4OGNhMjAxZDgsIDB4YWMwMjAwZTgsIDB4OGNhMjAxZGMsIDB4YWMwMjAwZWMsCisweDhjYTIwMWUwLCAweGFjMDIwMGYwLCAweDhjYTIwMDk4LCAweDhjYTMwMDljLAorMHhhYzAzMDBmYywgMHg4Y2EyMDBhOCwgMHg4Y2EzMDBhYywgMHhhYzAzMDBmNCwKKzB4OGNhMjAwYTAsIDB4OGNhMzAwYTQsIDB4MzA4NDAwMDQsIDB4YWMwMzAwZjgsCisweDE0ODAwMDA3LCAweDMwYzIwMDA0LCAweDhmODIwMjIwLCAweDNjMDMwOGZmLAorMHgzNDYzZmZmYiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4MzBjMjAwMDQsCisweDE0NDAwMDA2LCAweDAsIDB4OGY4MjAyMDAsIDB4M2MwM2MwZmYsCisweDM0NjNmZmZiLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwgMHg4ZjQyMDJkYywKKzB4YTM0MDA1YzUsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyZGMsIDB4OGY0MjAyZGMsCisweDNlMDAwMDgsIDB4MCwgMHgyN2JkZmZkOCwgMHhhZmJmMDAyNCwKKzB4YWZiMDAwMjAsIDB4OGY0MzAwMjQsIDB4OGY0MjAwMjAsIDB4MTA2MjAwMzgsCisweDAsIDB4OGY0MzAwMjAsIDB4OGY0MjAwMjQsIDB4NjIyMDIzLAorMHg0ODEwMDAzLCAweDAsIDB4OGY0MjAwNDAsIDB4ODIyMDIxLAorMHg4ZjQzMDAzMCwgMHg4ZjQyMDAyNCwgMHg0MzEwMmIsIDB4MTQ0MDAwMDUsCisweDAsIDB4OGY0MzAwNDAsIDB4OGY0MjAwMjQsIDB4MTAwMDAwMDUsCisweDYyMTAyMywgMHg4ZjQyMDAzMCwgMHg4ZjQzMDAyNCwgMHg0MzEwMjMsCisweDI0NDJmZmZmLCAweDQwNjAyMSwgMHg4YzEwMmEsIDB4NTQ0MDAwMDEsCisweDgwNjAyMSwgMHg4ZjRhMDAyNCwgMHg4ZjQ5MDA0MCwgMHg4ZjQ4MDAyNCwKKzB4OGY0NDAxODAsIDB4OGY0NTAxODQsIDB4OGY0NjAwMjQsIDB4OGY0YjAwMWMsCisweDI0MDcwMDAxLCAweGFmYTcwMDEwLCAweDg0MTAwLCAweDEwMDE4MjEsCisweDE0YzUwMjEsIDB4MjUyOWZmZmYsIDB4MTQ5ODAyNCwgMHhhZmIwMDAxNCwKKzB4OGY0NzAwMTQsIDB4MTAyMSwgMHg2MzEwMCwgMHhhZmE3MDAxOCwKKzB4YTMyODIxLCAweGEzMzgyYiwgMHg4MjIwMjEsIDB4ODcyMDIxLAorMHg4ZjQyMDEwOCwgMHgxNjYzMDIxLCAweDQwZjgwOSwgMHhjMzkwMCwKKzB4NTQ0MDAwMDEsIDB4YWY1MDAwMjQsIDB4OGY0MzAwMjQsIDB4OGY0MjAwMjAsCisweDE0NjIwMDE4LCAweDAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsCisweDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsCisweDAsIDB4MTAwMDAwMDUsIDB4MCwgMHhhZjgwMDA0OCwKKzB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsIDB4MCwgMHg4ZjgyMDA2MCwKKzB4MjQwM2ZmZWYsIDB4NDMxMDI0LCAweGFmODIwMDYwLCAweDhmNDIwMDAwLAorMHgxMDQwMDAwMywgMHgwLCAweDEwMDAwMDAyLCAweGFmODAwMDRjLAorMHhhZjgwMDA0OCwgMHg4ZmJmMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LAorMHgyN2JkMDAyOCwgMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmYzAsCisweDMyYzIwMDIwLCAweGFmYmYwMDM4LCAweGFmYjMwMDM0LCAweGFmYjIwMDMwLAorMHhhZmIxMDAyYywgMHgxMDQwMDAwNCwgMHhhZmIwMDAyOCwgMHg4ZjUzMDAyOCwKKzB4MTAwMDAwMDIsIDB4MCwgMHg4ZjUzMDAyMCwgMHg4ZjQyMDAzMCwKKzB4MTA1MzAwZWIsIDB4MjExMDAsIDB4OGY0MzAwMWMsIDB4NjI4MDIxLAorMHg4ZTA0MDAwMCwgMHg4ZTA1MDAwNCwgMHg5NjEyMDAwOCwgMHg4ZjQyMDA5MCwKKzB4OTYxMTAwMGEsIDB4MzI0NmZmZmYsIDB4NDYxMDJhLCAweDEwNDAwMDE3LAorMHgwLCAweDhmODIwMGQ4LCAweDhmNDMwMDk4LCAweDQzMTAyMywKKzB4MjQ0MmRjYmUsIDB4YWY0MjAwOTAsIDB4OGY0MjAwOTAsIDB4Mjg0MmRjYmYsCisweDEwNDAwMDA1LCAweDAsIDB4OGY0MjAwOTAsIDB4OGY0MzAxNDQsCisweDQzMTAyMSwgMHhhZjQyMDA5MCwgMHg4ZjQyMDA5MCwgMHg0NjEwMmEsCisweDEwNDAwMDA2LCAweDAsIDB4OGY0MjAzNDgsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzQ4LCAweDEwMDAwMGUxLCAweDhmNDIwMzQ4LCAweDhmODIwMGZjLAorMHgxNDQwMDAwNiwgMHgwLCAweDhmNDIwMzQ0LCAweDI0NDIwMDAxLAorMHhhZjQyMDM0NCwgMHgxMDAwMDBkOSwgMHg4ZjQyMDM0NCwgMHg5MzQyMDVjMiwKKzB4MTA0MDAwMGIsIDB4MzJjMjAwMDgsIDB4MTA0MDAwMDgsIDB4MzIyMjAyMDAsCisweDEwNDAwMDA2LCAweDNjMDM0MDAwLCAweDk2MDIwMDBlLCAweGFmNDMwMGFjLAorMHgyMTQwMCwgMHgxMDAwMDAwMiwgMHhhZjQyMDBiMCwgMHhhZjQwMDBhYywKKzB4MzIyMjAwMDQsIDB4MTA0MDAwN2YsIDB4MzIyMjA4MDAsIDB4MTA0MDAwMDMsCisweDMyNDdmZmZmLCAweDEwMDAwMDAyLCAweDI0MDIwMDIwLCAweDI0MDIwMDA0LAorMHhhZmEyMDAxMCwgMHg4ZjQyMDAzMCwgMHhhZmEyMDAxNCwgMHg4ZjQyMDAxMCwKKzB4M2MwMzAwMDIsIDB4NDMxMDI1LCAweGFmYTIwMDE4LCAweDhmNDYwMDk4LAorMHg4ZjQyMDEwOCwgMHg0MGY4MDksIDB4MCwgMHgxMDQwMDBiNywKKzB4MCwgMHg4ZjQyMDA5YywgMHg4ZjQzMDA5NCwgMHgyNDIxMDIxLAorMHhhZjQyMDA5YywgMHhhZTAzMDAwYywgMHg4ZjQyMDBhYywgMHgxMDQwMDAwOCwKKzB4M2MwMzQwMDAsIDB4OGY0MjAwOTQsIDB4NDMxMDI1LCAweGFmYTIwMDIwLAorMHg4ZjQyMDA5YywgMHg4ZjQzMDBiMCwgMHgxMDAwMDAwNCwgMHg0MzEwMjUsCisweDhmNDIwMDk0LCAweGFmYTIwMDIwLCAweDhmNDIwMDljLCAweGFmYTIwMDI0LAorMHg4ZjgyMDBmYywgMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDAwMCwKKzB4YWM0NDAwMDQsIDB4MjQ0MjAwMDgsIDB4YWY4MjAwZjAsIDB4OGY0MjAwOWMsCisweDhmNDQwMjcwLCAweDhmNDUwMjc0LCAweDQwMTgyMSwgMHgxMDIxLAorMHhhMzI4MjEsIDB4YTMzMDJiLCAweDgyMjAyMSwgMHg4NjIwMjEsCisweDMyMjMwMDYwLCAweDI0MDIwMDQwLCAweGFmNDQwMjcwLCAweGFmNDUwMjc0LAorMHgxMDYyMDAxNywgMHgyYzYyMDA0MSwgMHgxMDQwMDAwNSwgMHgyNDAyMDAyMCwKKzB4MTA2MjAwMDgsIDB4MjQwMjAwMDEsIDB4MTAwMDAwMjYsIDB4MCwKKzB4MjQwMjAwNjAsIDB4MTA2MjAwMTksIDB4MjQwMjAwMDEsIDB4MTAwMDAwMjEsCisweDAsIDB4OGY0MjAyNzgsIDB4OGY0MzAyN2MsIDB4MjQ2MzAwMDEsCisweDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZjQyMDI3OCwgMHhhZjQzMDI3YywKKzB4OGY0MjAyNzgsIDB4OGY0MzAyN2MsIDB4MTAwMDAwMTYsIDB4MjQwMjAwMDEsCisweDhmNDIwMjgwLCAweDhmNDMwMjg0LCAweDI0NjMwMDAxLCAweDJjNjQwMDAxLAorMHg0NDEwMjEsIDB4YWY0MjAyODAsIDB4YWY0MzAyODQsIDB4OGY0MjAyODAsCisweDhmNDMwMjg0LCAweDEwMDAwMDBiLCAweDI0MDIwMDAxLCAweDhmNDIwMjg4LAorMHg4ZjQzMDI4YywgMHgyNDYzMDAwMSwgMHgyYzY0MDAwMSwgMHg0NDEwMjEsCisweGFmNDIwMjg4LCAweGFmNDMwMjhjLCAweDhmNDIwMjg4LCAweDhmNDMwMjhjLAorMHgyNDAyMDAwMSwgMHhhMzQyMDVjMiwgMHg4ZjQyMDA5OCwgMHgzMjQ0ZmZmZiwKKzB4MjQwNmZmZjgsIDB4OGY0NTAxM2MsIDB4NDQxMDIxLCAweDI0NDIwMDA3LAorMHg0NjEwMjQsIDB4MjQ4NDAwMDcsIDB4YWY0MjAwOTQsIDB4OGY0MjAwOTAsCisweDhmNDMwMDk0LCAweDg2MjAyNCwgMHg0NDEwMjMsIDB4NjUxODJiLAorMHgxNDYwMDAwNSwgMHhhZjQyMDA5MCwgMHg4ZjQyMDA5NCwgMHg4ZjQzMDE0NCwKKzB4NDMxMDIzLCAweGFmNDIwMDk0LCAweDhmNDIwMDk0LCAweDEwMDAwMDIzLAorMHhhZjQwMDA5YywgMHgzMjQ3ZmZmZiwgMHg1MGUwMDAyMiwgMHgzMmMyMDAyMCwKKzB4MTQ0MDAwMDIsIDB4MjQwMjAwMTAsIDB4MjQwMjAwMDIsIDB4YWZhMjAwMTAsCisweDhmNDIwMDMwLCAweGFmYTIwMDE0LCAweDhmNDIwMDEwLCAweGFmYTIwMDE4LAorMHg4ZjQ2MDA5OCwgMHg4ZjQyMDEwOCwgMHg0MGY4MDksIDB4MCwKKzB4MTA0MDAwM2EsIDB4MzI0NWZmZmYsIDB4OGY0MjAwOTgsIDB4OGY0MzAwOTAsCisweDhmNDYwMTNjLCAweDQ1MTAyMSwgMHhhZjQyMDA5OCwgMHg4ZjQyMDA5YywKKzB4OGY0NDAwOTgsIDB4YTM0MDA1YzIsIDB4NjUxODIzLCAweGFmNDMwMDkwLAorMHg0NTEwMjEsIDB4ODYyMDJiLCAweDE0ODAwMDA1LCAweGFmNDIwMDljLAorMHg4ZjQyMDA5OCwgMHg4ZjQzMDE0NCwgMHg0MzEwMjMsIDB4YWY0MjAwOTgsCisweDMyYzIwMDIwLCAweDEwNDAwMDA1LCAweDAsIDB4OGY0MjAzNTgsCisweDI0NDJmZmZmLCAweGFmNDIwMzU4LCAweDhmNDIwMzU4LCAweDhmNDIwMDMwLAorMHg4ZjQzMDA0MCwgMHgyNDQyMDAwMSwgMHgyNDYzZmZmZiwgMHg0MzEwMjQsCisweGFmNDIwMDMwLCAweDhmNDIwMDMwLCAweDE0NTMwMDE4LCAweDAsCisweDhmNDIwMDAwLCAweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsCisweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsCisweDAsIDB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsCisweDAsIDB4OGY4MjAwNjAsIDB4MjQwM2ZmZjcsIDB4NDMxMDI0LAorMHhhZjgyMDA2MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLAorMHgxMDAwMDAwMiwgMHhhZjgwMDA0YywgMHhhZjgwMDA0OCwgMHg4ZmJmMDAzOCwKKzB4OGZiMzAwMzQsIDB4OGZiMjAwMzAsIDB4OGZiMTAwMmMsIDB4OGZiMDAwMjgsCisweDNlMDAwMDgsIDB4MjdiZDAwNDAsIDB4M2UwMDAwOCwgMHgwLAorMHgyN2JkZmZkMCwgMHgzMmMyMDAyMCwgMHhhZmJmMDAyYywgMHhhZmIyMDAyOCwKKzB4YWZiMTAwMjQsIDB4MTA0MDAwMDQsIDB4YWZiMDAwMjAsIDB4OGY1MjAwMjgsCisweDEwMDAwMDAyLCAweDAsIDB4OGY1MjAwMjAsIDB4OGY0MjAwMzAsCisweDEwNTIwMGI1LCAweDIxMTAwLCAweDhmNDMwMDFjLCAweDYyODAyMSwKKzB4OGUwNDAwMDAsIDB4OGUwNTAwMDQsIDB4OTYxMTAwMDgsIDB4OGY0MjAwOTAsCisweDk2MDcwMDBhLCAweDMyMjZmZmZmLCAweDQ2MTAyYSwgMHgxMDQwMDAxNywKKzB4MCwgMHg4ZjgyMDBkOCwgMHg4ZjQzMDA5OCwgMHg0MzEwMjMsCisweDI0NDJkYzQ2LCAweGFmNDIwMDkwLCAweDhmNDIwMDkwLCAweDI4NDJkYzQ3LAorMHgxMDQwMDAwNSwgMHgwLCAweDhmNDIwMDkwLCAweDhmNDMwMTQ0LAorMHg0MzEwMjEsIDB4YWY0MjAwOTAsIDB4OGY0MjAwOTAsIDB4NDYxMDJhLAorMHgxMDQwMDAwNiwgMHgwLCAweDhmNDIwMzQ4LCAweDI0NDIwMDAxLAorMHhhZjQyMDM0OCwgMHgxMDAwMDBhYiwgMHg4ZjQyMDM0OCwgMHg4Zjg2MDBmYywKKzB4MTBjMDAwMGMsIDB4MCwgMHg4ZjgyMDBmNCwgMHgyNDAzZmZmOCwKKzB4NDMxMDI0LCAweDQ2MTAyMywgMHgyMThjMywgMHg1ODYwMDAwMSwKKzB4MjQ2MzAxMDAsIDB4OGY0MjAwOGMsIDB4NDMxMDJiLCAweDE0NDAwMDA2LAorMHg3MTJjMiwgMHg4ZjQyMDM0NCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM0NCwKKzB4MTAwMDAwOTgsIDB4OGY0MjAzNDQsIDB4OTM0MzA1YzIsIDB4MTA2MDAwMGYsCisweDMwNDYwMDAxLCAweDhmNDIwMDEwLCAweDM0NDgwNDAwLCAweDMyYzIwMDA4LAorMHgxMDQwMDAwOCwgMHgzMGUyMDIwMCwgMHgxMDQwMDAwNiwgMHgzYzAzNDAwMCwKKzB4OTYwMjAwMGUsIDB4YWY0MzAwYWMsIDB4MjE0MDAsIDB4MTAwMDAwMDQsCisweGFmNDIwMGIwLCAweDEwMDAwMDAyLCAweGFmNDAwMGFjLCAweDhmNDgwMDEwLAorMHgzMGUyMDAwNCwgMHgxMDQwMDA0NSwgMHgzMjI3ZmZmZiwgMHg4ZjQ5MDBhYywKKzB4MTEyMDAwMDUsIDB4MzBjMjAwZmYsIDB4MTQ0MDAwMDYsIDB4MjQwMjAwNDAsCisweDEwMDAwMDA0LCAweDI0MDIwMDA4LCAweDE0NDAwMDAyLCAweDI0MDIwMDIwLAorMHgyNDAyMDAwNCwgMHhhZmEyMDAxMCwgMHg4ZjQzMDAzMCwgMHgxMTIwMDAwNCwKKzB4YWZhMzAwMTQsIDB4OGY0MjAwYjAsIDB4NjIxMDI1LCAweGFmYTIwMDE0LAorMHgzYzAyMDAwMiwgMHgxMDIxMDI1LCAweGFmYTIwMDE4LCAweDhmNDYwMDk4LAorMHg4ZjQyMDEwOCwgMHg0MGY4MDksIDB4MCwgMHgxMDQwMDA2OSwKKzB4MzIyNGZmZmYsIDB4OGY0MjAwOGMsIDB4OGY0MzAwOTQsIDB4MjQ0MjAwMDEsCisweGFmNDIwMDhjLCAweDI0MDIwMDAxLCAweGFlMDMwMDBjLCAweGEzNDIwNWMyLAorMHg4ZjQyMDA5OCwgMHgyNDA2ZmZmOCwgMHg4ZjQ1MDEzYywgMHg0NDEwMjEsCisweDI0NDIwMDA3LCAweDQ2MTAyNCwgMHgyNDg0MDAwNywgMHhhZjQyMDA5NCwKKzB4OGY0MjAwOTAsIDB4OGY0MzAwOTQsIDB4ODYyMDI0LCAweDQ0MTAyMywKKzB4NjUxODJiLCAweDE0NjAwMDA1LCAweGFmNDIwMDkwLCAweDhmNDIwMDk0LAorMHg4ZjQzMDE0NCwgMHg0MzEwMjMsIDB4YWY0MjAwOTQsIDB4OGY0MzAwOTQsCisweDhmNDIwMTQwLCAweDQzMTAyYiwgMHgxMDQwMDAwOSwgMHgwLAorMHg4ZjQzMDEzYywgMHg4ZjQ0MDA5NCwgMHg4ZjQyMDA5MCwgMHg4ZjQ1MDEzOCwKKzB4NjQxODIzLCAweDQzMTAyMywgMHhhZjQyMDA5MCwgMHhhZjQ1MDA5NCwKKzB4OGY0MjAwOTQsIDB4MTAwMDAwMWYsIDB4YWY0MjAwOTgsIDB4MTBlMDAwMWQsCisweDMwYzIwMGZmLCAweDE0NDAwMDAyLCAweDI0MDIwMDEwLCAweDI0MDIwMDAyLAorMHhhZmEyMDAxMCwgMHg4ZjQyMDAzMCwgMHhhZmE4MDAxOCwgMHhhZmEyMDAxNCwKKzB4OGY0NjAwOTgsIDB4OGY0MjAxMDgsIDB4NDBmODA5LCAweDAsCisweDEwNDAwMDMwLCAweDMyMjVmZmZmLCAweDhmNDIwMDk4LCAweDhmNDQwMTNjLAorMHg0NTEwMjEsIDB4YWY0MjAwOTgsIDB4OGY0MjAwOTAsIDB4OGY0MzAwOTgsCisweGEzNDAwNWMyLCAweDQ1MTAyMywgMHg2NDE4MmIsIDB4MTQ2MDAwMDUsCisweGFmNDIwMDkwLCAweDhmNDIwMDk4LCAweDhmNDMwMTQ0LCAweDQzMTAyMywKKzB4YWY0MjAwOTgsIDB4OGY0MjAwMzAsIDB4OGY0MzAwNDAsIDB4MjQ0MjAwMDEsCisweDI0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjQyMDAzMCwgMHg4ZjQyMDAzMCwKKzB4MTQ1MjAwMTgsIDB4MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwNywKKzB4MCwgMHhhZjgwMDA0YywgMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwKKzB4MCwgMHgxMDAwMDAwNSwgMHgwLCAweGFmODAwMDQ4LAorMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwgMHgwLCAweDhmODIwMDYwLAorMHgyNDAzZmZmNywgMHg0MzEwMjQsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsCisweDEwNDAwMDAzLCAweDAsIDB4MTAwMDAwMDIsIDB4YWY4MDAwNGMsCisweGFmODAwMDQ4LCAweDhmYmYwMDJjLCAweDhmYjIwMDI4LCAweDhmYjEwMDI0LAorMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LCAweDI3YmQwMDMwLCAweDNlMDAwMDgsCisweDAsIDB4MjdiZGZmZDgsIDB4M2MwMjAwMDEsIDB4MzQ0MjJlYzAsCisweGFmYmYwMDIwLCAweDhmNDMwMGYwLCAweDhmODQwMTA4LCAweDJlMjEwMjEsCisweDU0NjIwMDA0LCAweDI0NjIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyY2MwLAorMHgyZTIxMDIxLCAweDQwMTgyMSwgMHhhZjQzMDBmMCwgMHhhYzYwMDAwMCwKKzB4OGY0MjAwZWMsIDB4OGM2NjAwMDQsIDB4MTQ2MjAwMDQsIDB4M2MwMjAwMDEsCisweDI0ODIwMDIwLCAweDEwMDAwMDBmLCAweGFmODIwMTA4LCAweDhmNDMwMGYwLAorMHgzNDQyMmVjMCwgMHgyZTIxMDIxLCAweDU0NjIwMDA0LCAweDI0NjIwMDA4LAorMHgzYzAyMDAwMSwgMHgzNDQyMmNjMCwgMHgyZTIxMDIxLCAweDQwMTgyMSwKKzB4OGM2MjAwMDQsIDB4MjExNDAsIDB4ODIxMDIxLCAweGFmODIwMTA4LAorMHhhYzYwMDAwMCwgMHg4Yzg1MDAxOCwgMHgzMGEyMDAzNiwgMHgxMDQwMDA2YywKKzB4MzBhMjAwMDEsIDB4OGM4MjAwMWMsIDB4OGY0MzAwNDAsIDB4OGY0NDAwMzQsCisweDI0NDIwMDAxLCAweDI0NjNmZmZmLCAweDQzMTAyNCwgMHg4NjIwMjEsCisweGFmNDIwMDJjLCAweDMwYTIwMDMwLCAweDE0NDAwMDA2LCAweGFmNDQwMDM0LAorMHg4ZjQyMDAzNCwgMHg4YzAzMDIzYywgMHg0MzEwMmIsIDB4MTQ0MDAwYjQsCisweDAsIDB4MzJjMjAwMTAsIDB4MTA0MDAwMjgsIDB4MjQwNzAwMDgsCisweDhmNDQwMTcwLCAweDhmNDUwMTc0LCAweDhmNDMwMDJjLCAweDhmNDgwMDBjLAorMHg4Zjg2MDEyMCwgMHgyNDAyMDA4MCwgMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwKKzB4YWZhODAwMTgsIDB4OGY0MjAxMGMsIDB4NDBmODA5LCAweDI0YzYwMDFjLAorMHgxNDQwMDAxMSwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHgzNzA4MjEsCisweGEwMjI0MGYxLCAweDhmODIwMTI0LCAweGFmYTIwMDEwLCAweDhmODIwMTI4LAorMHgzYzA0MDAwMSwgMHgyNDg0NjdjNCwgMHhhZmEyMDAxNCwgMHg4ZjQ2MDAyYywKKzB4OGY4NzAxMjAsIDB4M2MwNTAwMDksIDB4YzAwMmIzYiwgMHgzNGE1MTEwMCwKKzB4MTAwMDAwMzYsIDB4MCwgMHg4ZjQyMDMwMCwgMHg4ZjQzMDAyYywKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzMDAsIDB4OGY0MjAzMDAsIDB4MjQwMjAwMDEsCisweGEzNDIwNWMxLCAweDEwMDAwMDI2LCAweGFmNDMwMDM4LCAweDhmNDQwMTcwLAorMHg4ZjQ1MDE3NCwgMHg4ZjQzMDAyYywgMHg4ZjQ4MDAwYywgMHg4Zjg2MDEyMCwKKzB4MjQwMjAwMjAsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIDB4YWZhODAwMTgsCisweDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxNDQwMDAxMSwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjI0MGYwLAorMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwgMHg4ZjgyMDEyOCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDY3YjgsIDB4YWZhMjAwMTQsIDB4OGY0NjAwMmMsIDB4OGY4NzAxMjAsCisweDNjMDUwMDA5LCAweGMwMDJiM2IsIDB4MzRhNTA5MDAsIDB4MTAwMDAwMGYsCisweDAsIDB4OGY0MjAzMDAsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzMDAsCisweDhmNDIwMzAwLCAweDhmNDIwMDJjLCAweGEzNDAwNWMxLCAweGFmNDIwMDM4LAorMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMDQwZjEsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhMDIwNDBmMCwgMHhhZjQwMDAzNCwgMHg4ZjQyMDMxNCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzMTQsIDB4MTAwMDAwNTksIDB4OGY0MjAzMTQsCisweDEwNDAwMDIyLCAweDMwYTI3MDAwLCAweDhjODUwMDFjLCAweDhmNDIwMDI4LAorMHhhMjIwMjMsIDB4NDgxMDAwMywgMHgwLCAweDhmNDIwMDQwLAorMHg4MjIwMjEsIDB4OGY0MjAzNTgsIDB4OGY0MzAwMDAsIDB4YWY0NTAwMjgsCisweDQ0MTAyMSwgMHgxMDYwMDAwNywgMHhhZjQyMDM1OCwgMHhhZjgwMDA0YywKKzB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsIDB4MCwgMHgxMDAwMDAwNSwKKzB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwgMHgxMDQwZmZmZCwKKzB4MCwgMHg4ZjgyMDA2MCwgMHgzNDQyMDAwOCwgMHhhZjgyMDA2MCwKKzB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsIDB4MCwgMHgxMDAwMDAzOCwKKzB4YWY4MDAwNGMsIDB4MTAwMDAwMzYsIDB4YWY4MDAwNDgsIDB4MTA0MDAwMmYsCisweDMwYTIxMDAwLCAweDEwNDAwMDBjLCAweDMwYTI0MDAwLCAweDhjODMwMDFjLAorMHg4ZjQyMDA1MCwgMHg2MjIwMjMsIDB4NDgyMDAwMSwgMHgyNDg0MDIwMCwKKzB4OGY0MjAzNWMsIDB4NDQxMDIxLCAweGFmNDIwMzVjLCAweDhmNDIwMzY4LAorMHgxMDAwMDAxYSwgMHhhZjQzMDA1MCwgMHgxMDQwMDAwYywgMHgzMmMyODAwMCwKKzB4OGM4MzAwMWMsIDB4OGY0MjAwNzAsIDB4NjIyMDIzLCAweDQ4MjAwMDEsCisweDI0ODQwNDAwLCAweDhmNDIwMzY0LCAweDQ0MTAyMSwgMHhhZjQyMDM2NCwKKzB4OGY0MjAzNjgsIDB4MTAwMDAwMGQsIDB4YWY0MzAwNzAsIDB4MTA0MDAwMGUsCisweDNjMDIwODAwLCAweDhjODMwMDFjLCAweDhmNDIwMDYwLCAweDYyMjAyMywKKzB4NDgyMDAwMSwgMHgyNDg0MDEwMCwgMHg4ZjQyMDM2MCwgMHg0NDEwMjEsCisweGFmNDIwMzYwLCAweDhmNDIwMzY4LCAweGFmNDMwMDYwLCAweDQ0MTAyMSwKKzB4YWY0MjAzNjgsIDB4M2MwMjA4MDAsIDB4MmMyMTAyNCwgMHg1MDQwMDAwOCwKKzB4MzY5NDAwNDAsIDB4MTAwMDAwMDYsIDB4MCwgMHgzMGEyMDEwMCwKKzB4MTA0MDAwMDMsIDB4MCwgMHhjMDAyYmQ4LCAweDAsCisweDhmYmYwMDIwLCAweDNlMDAwMDgsIDB4MjdiZDAwMjgsIDB4M2UwMDAwOCwKKzB4MCwgMHgyN2JkZmZhOCwgMHhhZmJmMDA1MCwgMHhhZmJlMDA0YywKKzB4YWZiNTAwNDgsIDB4YWZiMzAwNDQsIDB4YWZiMjAwNDAsIDB4YWZiMTAwM2MsCisweGFmYjAwMDM4LCAweDhmOTEwMTA4LCAweDI2MjIwMDIwLCAweGFmODIwMTA4LAorMHg4ZTMyMDAxOCwgMHhhODIxLCAweDMyNDIwMDI0LCAweDEwNDAwMWJhLAorMHhmMDIxLCAweDhlMjYwMDFjLCAweDhmNDMwMDFjLCAweDYxMTAwLAorMHg2MjE4MjEsIDB4OGM3MDAwMGMsIDB4OTYwNDAwMGMsIDB4OTYyZDAwMTYsCisweDk0NzMwMDBhLCAweDJjODMwNWRkLCAweDM4ODI4ODcwLCAweDJjNDIwMDAxLAorMHg2MjE4MjUsIDB4MTA2MDAwMTUsIDB4MjgyMSwgMHgzMmMyMDA0MCwKKzB4MTA0MDAwMTUsIDB4MjQwMjA4MDAsIDB4OTYwMzAwMTQsIDB4MTQ2MjAwMTIsCisweDM0MDJhYWFhLCAweDk2MDMwMDBlLCAweDE0NjIwMDA3LCAweDIwMjEsCisweDk2MDMwMDEwLCAweDI0MDIwMzAwLCAweDE0NjIwMDA0LCAweDgwMTAyMSwKKzB4OTYwMjAwMTIsIDB4MmM0NDAwMDEsIDB4ODAxMDIxLCAweDU0NDAwMDA2LAorMHgyNDA1MDAxNiwgMHgxMDAwMDAwNCwgMHgwLCAweDI0MDIwODAwLAorMHg1MDgyMDAwMSwgMHgyNDA1MDAwZSwgMHg5MzQyMDVjMywgMHgxNDQwMDAwOCwKKzB4NTgyMSwgMHgyNDBiMDAwMSwgMHgzMjYyMDE4MCwgMHhhZjQ1MDBhOCwKKzB4YWY1MDAwYTAsIDB4MTA0MDAwMDIsIDB4YWY0NjAwYTQsIDB4YTM0YjA1YzMsCisweDEwYTAwMDg1LCAweDIwNTQwMjEsIDB4OTEwMjAwMDAsIDB4MzgyMSwKKzB4MzA0MjAwMGYsIDB4MjUwODAsIDB4MzJjMjAwMDIsIDB4MTA0MDAwMTIsCisweDEwYTE4MjEsIDB4MzI2MjAwMDIsIDB4MTA0MDAwMTAsIDB4MzJjMjAwMDEsCisweDEwMDIwMjEsIDB4OTQ4MjAwMDAsIDB4MjQ4NDAwMDIsIDB4ZTIzODIxLAorMHg4MzEwMmIsIDB4MTQ0MGZmZmIsIDB4MzBlMmZmZmYsIDB4NzFjMDIsCisweDYyMzgyMSwgMHg3MWMwMiwgMHgzMGUyZmZmZiwgMHg2MjM4MjEsCisweDcxMDI3LCAweGE1MDIwMDBhLCAweDMyYzIwMDAxLCAweDEwNDAwMDZhLAorMHgzMjYyMDAwMSwgMHgxMDQwMDA2OCwgMHgwLCAweDhmNDIwMGE4LAorMHgxMDQwMDA2NSwgMHgwLCAweDhmNDIwMGEwLCAweDhmNDMwMGE4LAorMHg0MzEwMjEsIDB4OTA0YzAwMDksIDB4MzE4OTAwZmYsIDB4MzkyMzAwMDYsCisweDMxODJiLCAweDM5MjIwMDExLCAweDIxMDJiLCAweDYyMTgyNCwKKzB4MTA2MDAwMGMsIDB4M2MwNTAwMDYsIDB4OGY0MjAwYTQsIDB4M2MwNDAwMDEsCisweDI0ODQ2N2Q0LCAweGFmYTIwMDEwLCAweDhmNDIwMGEwLCAweDM0YTU0NjAwLAorMHgxMjAzODIxLCAweGMwMDJiM2IsIDB4YWZhMjAwMTQsIDB4MTAwMDAwNGUsCisweDAsIDB4MzJjMjAwMDQsIDB4MTQ0MDAwMTMsIDB4MjgyMSwKKzB4MzE2MjAwZmYsIDB4MTQ0MDAwMDQsIDB4MCwgMHg5NTAyMDAwMiwKKzB4MTAwMDAwMGQsIDB4NGEyODIzLCAweDk1MDUwMDBjLCAweDk1MDIwMDBlLAorMHg5NTAzMDAxMCwgMHhhMjI4MjEsIDB4YTMyODIxLCAweDk1MDMwMDEyLAorMHg5MTA0MDAwOSwgMHg5NTAyMDAwMiwgMHhhMzI4MjEsIDB4YTQyODIxLAorMHg0YTEwMjMsIDB4YTIyODIxLCAweDIwMDIwMjEsIDB4OTQ4MjAwMDAsCisweDI0ODQwMDAyLCAweGUyMzgyMSwgMHg4ODEwMmIsIDB4MTQ0MGZmZmIsCisweDcxYzAyLCAweDMwZTJmZmZmLCAweDYyMzgyMSwgMHg3MWMwMiwKKzB4MzBlMmZmZmYsIDB4NjIzODIxLCAweDFhNTI4MjEsIDB4NTFjMDIsCisweDMwYTJmZmZmLCAweDYyMjgyMSwgMHg1MWMwMiwgMHgzMGEyZmZmZiwKKzB4NjIyODIxLCAweGE3MjgyMywgMHg1MTQwMiwgMHhhMjI4MjEsCisweDMwYTVmZmZmLCAweDUwYTAwMDAxLCAweDM0MDVmZmZmLCAweDMxNjIwMGZmLAorMHgxNDQwMDAwOCwgMHgzMTgzMDBmZiwgMHg4ZjQzMDBhMCwgMHg4ZjQyMDBhOCwKKzB4NjI0MDIxLCAweDkxMDIwMDAwLCAweDMwNDIwMDBmLCAweDI1MDgwLAorMHgzMTgzMDBmZiwgMHgyNDAyMDAwNiwgMHgxNDYyMDAwMywgMHgxMGExMDIxLAorMHgxMDAwMDAwMiwgMHgyNDQ0MDAxMCwgMHgyNDQ0MDAwNiwgMHgzMTYyMDBmZiwKKzB4MTQ0MDAwMDYsIDB4MCwgMHg5NDgyMDAwMCwgMHhhMjI4MjEsCisweDUxYzAyLCAweDMwYTJmZmZmLCAweDYyMjgyMSwgMHg5MzQyMDVjMywKKzB4MTA0MDAwMDMsIDB4MzI2MjAxMDAsIDB4NTA0MDAwMDMsIDB4YTQ4NTAwMDAsCisweDUyODI3LCAweGE0ODUwMDAwLCAweDk2MjIwMDBlLCAweDhmNDMwMDljLAorMHg2MjE4MjEsIDB4MzJhMjAwZmYsIDB4MTA0MDAwMDcsIDB4YWY0MzAwOWMsCisweDNjMDI0MDAwLCAweDIwMjEwMjUsIDB4YWZhMjAwMjAsIDB4OGY0MjAwOWMsCisweDEwMDAwMDAzLCAweDVlMTAyNSwgMHhhZmIwMDAyMCwgMHg4ZjQyMDA5YywKKzB4YWZhMjAwMjQsIDB4MzI2MjAwODAsIDB4MTA0MDAwMTAsIDB4MzI2MjAxMDAsCisweDhmNDIwMGI0LCAweDI0NDMwMDAxLCAweDIxMGMwLCAweDU3MTAyMSwKKzB4YWY0MzAwYjQsIDB4OGZhMzAwMjAsIDB4OGZhNDAwMjQsIDB4M2MwMTAwMDEsCisweDIyMDgyMSwgMHhhYzIzMzhlOCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsCisweGFjMjQzOGVjLCAweDEwMDAwMGE1LCAweDMyYzIwMDIwLCAweDEwNDAwMDY0LAorMHgwLCAweDhmNDIwMGI0LCAweDI0NDMwMDAxLCAweDIxMGMwLAorMHg1NzEwMjEsIDB4YWY0MzAwYjQsIDB4OGZhMzAwMjAsIDB4OGZhNDAwMjQsCisweDNjMDEwMDAxLCAweDIyMDgyMSwgMHhhYzIzMzhlOCwgMHgzYzAxMDAwMSwKKzB4MjIwODIxLCAweGFjMjQzOGVjLCAweDhmNDIwMGI0LCAweDEwNDAwMDUxLAorMHgzODIxLCAweDNjMDkwMDAxLCAweDM1MjkzOGU4LCAweDNjMDgwMDFmLAorMHgzNTA4ZmZmZiwgMHgyNDBiZmZmZiwgMHgzNDBhZmZmZiwgMHg3MTBjMCwKKzB4NTcxMDIxLCAweDQ5MTAyMSwgMHg4YzQzMDAwMCwgMHg4YzQ0MDAwNCwKKzB4YWZhMzAwMjgsIDB4YWZhNDAwMmMsIDB4OGY4MjAwZmMsIDB4OGZhMzAwMjgsCisweDhmYTQwMDJjLCAweGFjNDMwMDAwLCAweGFjNDQwMDA0LCAweDI0NDIwMDA4LAorMHhhZjgyMDBmMCwgMHg4ZjQyMDA4YywgMHgyNDQyZmZmZiwgMHhhZjQyMDA4YywKKzB4OTdhMjAwMmUsIDB4OGY0NDAyNzAsIDB4OGY0NTAyNzQsIDB4NDAxODIxLAorMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWY0NDAyNzAsIDB4YWY0NTAyNzQsIDB4OGZhMjAwMjgsCisweDQ4MTAyNCwgMHg5MDQzMDAwMCwgMHgzMDYzMDAwMSwgMHgxNDYwMDAwYiwKKzB4NDAyMDIxLCAweDhmNDIwMjc4LCAweDhmNDMwMjdjLCAweDI0NjMwMDAxLAorMHgyYzY0MDAwMSwgMHg0NDEwMjEsIDB4YWY0MjAyNzgsIDB4YWY0MzAyN2MsCisweDhmNDIwMjc4LCAweDEwMDAwMDFhLCAweDhmNDMwMjdjLCAweDhjODIwMDAwLAorMHgxNDRiMDAwZSwgMHgwLCAweDk0ODIwMDA0LCAweDE0NGEwMDBiLAorMHgwLCAweDhmNDIwMjg4LCAweDhmNDMwMjhjLCAweDI0NjMwMDAxLAorMHgyYzY0MDAwMSwgMHg0NDEwMjEsIDB4YWY0MjAyODgsIDB4YWY0MzAyOGMsCisweDhmNDIwMjg4LCAweDEwMDAwMDBhLCAweDhmNDMwMjhjLCAweDhmNDIwMjgwLAorMHg4ZjQzMDI4NCwgMHgyNDYzMDAwMSwgMHgyYzY0MDAwMSwgMHg0NDEwMjEsCisweGFmNDIwMjgwLCAweGFmNDMwMjg0LCAweDhmNDIwMjgwLCAweDhmNDMwMjg0LAorMHg4ZjQyMDBiNCwgMHgyNGU3MDAwMSwgMHhlMjEwMmIsIDB4MTQ0MGZmYjgsCisweDcxMGMwLCAweGEzNDAwNWMzLCAweDEwMDAwMDNmLCAweGFmNDAwMGI0LAorMHg4ZjgyMDBmYywgMHg4ZmEzMDAyMCwgMHg4ZmE0MDAyNCwgMHhhYzQzMDAwMCwKKzB4YWM0NDAwMDQsIDB4MjQ0MjAwMDgsIDB4YWY4MjAwZjAsIDB4OGY0MjAwOWMsCisweDhmNDYwMDhjLCAweDhmNDQwMjcwLCAweDhmNDUwMjc0LCAweDQwMTgyMSwKKzB4MTAyMSwgMHgyNGM2ZmZmZiwgMHhhZjQ2MDA4YywgMHhhMzI4MjEsCisweGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFmNDQwMjcwLAorMHhhZjQ1MDI3NCwgMHg5MjAyMDAwMCwgMHgzMDQyMDAwMSwgMHgxNDQwMDAwYywKKzB4MjQwMmZmZmYsIDB4OGY0MjAyNzgsIDB4OGY0MzAyN2MsIDB4MjQ2MzAwMDEsCisweDJjNjQwMDAxLCAweDQ0MTAyMSwgMHhhZjQyMDI3OCwgMHhhZjQzMDI3YywKKzB4OGY0MjAyNzgsIDB4OGY0MzAyN2MsIDB4MTAwMDAwMWMsIDB4MzJjMjAwMjAsCisweDhlMDMwMDAwLCAweDE0NjIwMDBmLCAweDM0MDJmZmZmLCAweDk2MDMwMDA0LAorMHgxNDYyMDAwYywgMHgwLCAweDhmNDIwMjg4LCAweDhmNDMwMjhjLAorMHgyNDYzMDAwMSwgMHgyYzY0MDAwMSwgMHg0NDEwMjEsIDB4YWY0MjAyODgsCisweGFmNDMwMjhjLCAweDhmNDIwMjg4LCAweDhmNDMwMjhjLCAweDEwMDAwMDBiLAorMHgzMmMyMDAyMCwgMHg4ZjQyMDI4MCwgMHg4ZjQzMDI4NCwgMHgyNDYzMDAwMSwKKzB4MmM2NDAwMDEsIDB4NDQxMDIxLCAweGFmNDIwMjgwLCAweGFmNDMwMjg0LAorMHg4ZjQyMDI4MCwgMHg4ZjQzMDI4NCwgMHgzMmMyMDAyMCwgMHgxMDQwMDAwNSwKKzB4YWY0MDAwOWMsIDB4OGY0MjAzNTgsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNTgsCisweDhmNDIwMzU4LCAweDhlMjIwMDFjLCAweDhmNDMwMDQwLCAweDI0NDIwMDAxLAorMHgyNDYzZmZmZiwgMHg0MzEwMjQsIDB4YWY0MjAwMmMsIDB4MzI0MjAwNjAsCisweDE0NDAwMDA4LCAweDMyYzIwMDEwLCAweDhmNDIwMDM0LCAweDI0NDIwMDAxLAorMHhhZjQyMDAzNCwgMHg4YzAzMDIzYywgMHg0MzEwMmIsIDB4MTQ0MDAxMDIsCisweDMyYzIwMDEwLCAweDEwNDAwMDE4LCAweDI0MDcwMDA4LCAweDhmNDQwMTcwLAorMHg4ZjQ1MDE3NCwgMHg4ZjQzMDAyYywgMHg4ZjQ4MDAwYywgMHg4Zjg2MDEyMCwKKzB4MjQwMjAwODAsIDB4YWZhMjAwMTAsIDB4YWZhMzAwMTQsIDB4YWZhODAwMTgsCisweDhmNDIwMTBjLCAweDQwZjgwOSwgMHgyNGM2MDAxYywgMHgxMDQwMDA0NywKKzB4MjQwMjAwMDEsIDB4OGY0MjAzMDAsIDB4OGY0MzAwMmMsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzAwLCAweDhmNDIwMzAwLCAweDI0MDIwMDAxLCAweGEzNDIwNWMxLAorMHgxMDAwMDA3YywgMHhhZjQzMDAzOCwgMHg4ZjQ0MDE3MCwgMHg4ZjQ1MDE3NCwKKzB4OGY0MzAwMmMsIDB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIDB4MjQwMjAwMjAsCisweGFmYTIwMDEwLCAweGFmYTMwMDE0LCAweGFmYTgwMDE4LCAweDhmNDIwMTBjLAorMHg0MGY4MDksIDB4MjRjNjAwMWMsIDB4MTA0MDAwNTcsIDB4MjQwMjAwMDEsCisweDEwMDAwMDY1LCAweDAsIDB4MzI0MjAwMTIsIDB4MTA0MDAwNzUsCisweDMyNDIwMDAxLCAweDk2MjIwMDBlLCAweDhmNDMwMDljLCAweDYyMTgyMSwKKzB4MzJjMjAwMjAsIDB4MTA0MDAwMDUsIDB4YWY0MzAwOWMsIDB4OGY0MjAzNTgsCisweDI0NDJmZmZmLCAweGFmNDIwMzU4LCAweDhmNDIwMzU4LCAweDhlMjIwMDFjLAorMHg4ZjQzMDA0MCwgMHgyNDQyMDAwMSwgMHgyNDYzZmZmZiwgMHg0MzEwMjQsCisweGFmNDIwMDJjLCAweDMyNDIwMDEwLCAweDE0NDAwMDA4LCAweDMyYzIwMDEwLAorMHg4ZjQyMDAzNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDAzNCwgMHg4YzAzMDIzYywKKzB4NDMxMDJiLCAweDE0NDAwMGJjLCAweDMyYzIwMDEwLCAweDEwNDAwMDI4LAorMHgyNDA3MDAwOCwgMHg4ZjQ0MDE3MCwgMHg4ZjQ1MDE3NCwgMHg4ZjQzMDAyYywKKzB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsIDB4MjQwMjAwODAsIDB4YWZhMjAwMTAsCisweGFmYTMwMDE0LCAweGFmYTgwMDE4LCAweDhmNDIwMTBjLCAweDQwZjgwOSwKKzB4MjRjNjAwMWMsIDB4MTQ0MDAwMTEsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsCisweDM3MDgyMSwgMHhhMDIyNDBmMSwgMHg4ZjgyMDEyNCwgMHhhZmEyMDAxMCwKKzB4OGY4MjAxMjgsIDB4M2MwNDAwMDEsIDB4MjQ4NDY3YzQsIDB4YWZhMjAwMTQsCisweDhmNDYwMDJjLCAweDhmODcwMTIwLCAweDNjMDUwMDA5LCAweGMwMDJiM2IsCisweDM0YTUxMTAwLCAweDEwMDAwMDM2LCAweDAsIDB4OGY0MjAzMDAsCisweDhmNDMwMDJjLCAweDI0NDIwMDAxLCAweGFmNDIwMzAwLCAweDhmNDIwMzAwLAorMHgyNDAyMDAwMSwgMHhhMzQyMDVjMSwgMHgxMDAwMDAyNiwgMHhhZjQzMDAzOCwKKzB4OGY0NDAxNzAsIDB4OGY0NTAxNzQsIDB4OGY0MzAwMmMsIDB4OGY0ODAwMGMsCisweDhmODYwMTIwLCAweDI0MDIwMDIwLCAweGFmYTIwMDEwLCAweGFmYTMwMDE0LAorMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsCisweDE0NDAwMDExLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwKKzB4YTAyMjQwZjAsIDB4OGY4MjAxMjQsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjgsCisweDNjMDQwMDAxLCAweDI0ODQ2N2I4LCAweGFmYTIwMDE0LCAweDhmNDYwMDJjLAorMHg4Zjg3MDEyMCwgMHgzYzA1MDAwOSwgMHhjMDAyYjNiLCAweDM0YTUwOTAwLAorMHgxMDAwMDAwZiwgMHgwLCAweDhmNDIwMzAwLCAweDI0NDIwMDAxLAorMHhhZjQyMDMwMCwgMHg4ZjQyMDMwMCwgMHg4ZjQyMDAyYywgMHhhMzQwMDVjMSwKKzB4YWY0MjAwMzgsIDB4M2MwMTAwMDEsIDB4MzcwODIxLCAweGEwMjA0MGYxLAorMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMDQwZjAsIDB4YWY0MDAwMzQsCisweDhmNDIwMzE0LCAweDI0NDIwMDAxLCAweGFmNDIwMzE0LCAweDEwMDAwMDYyLAorMHg4ZjQyMDMxNCwgMHgxMDQwMDAyMiwgMHgzMjQyNzAwMCwgMHg4ZTI1MDAxYywKKzB4OGY0MjAwMjgsIDB4YTIyMDIzLCAweDQ4MTAwMDMsIDB4MCwKKzB4OGY0MjAwNDAsIDB4ODIyMDIxLCAweDhmNDIwMzU4LCAweDhmNDMwMDAwLAorMHhhZjQ1MDAyOCwgMHg0NDEwMjEsIDB4MTA2MDAwMDcsIDB4YWY0MjAzNTgsCisweGFmODAwMDRjLCAweDhmODIwMDRjLCAweDEwNDBmZmZkLCAweDAsCisweDEwMDAwMDA1LCAweDAsIDB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsCisweDEwNDBmZmZkLCAweDAsIDB4OGY4MjAwNjAsIDB4MzQ0MjAwMDgsCisweGFmODIwMDYwLCAweDhmNDIwMDAwLCAweDEwNDAwMDAzLCAweDAsCisweDEwMDAwMDQxLCAweGFmODAwMDRjLCAweDEwMDAwMDNmLCAweGFmODAwMDQ4LAorMHgxMDQwMDAyZiwgMHgzMjQyMTAwMCwgMHgxMDQwMDAwYywgMHgzMjQyNDAwMCwKKzB4OGUyMzAwMWMsIDB4OGY0MjAwNTAsIDB4NjIyMDIzLCAweDQ4MjAwMDEsCisweDI0ODQwMjAwLCAweDhmNDIwMzVjLCAweDQ0MTAyMSwgMHhhZjQyMDM1YywKKzB4OGY0MjAzNjgsIDB4MTAwMDAwMWEsIDB4YWY0MzAwNTAsIDB4MTA0MDAwMGMsCisweDMyYzI4MDAwLCAweDhlMjMwMDFjLCAweDhmNDIwMDcwLCAweDYyMjAyMywKKzB4NDgyMDAwMSwgMHgyNDg0MDQwMCwgMHg4ZjQyMDM2NCwgMHg0NDEwMjEsCisweGFmNDIwMzY0LCAweDhmNDIwMzY4LCAweDEwMDAwMDBkLCAweGFmNDMwMDcwLAorMHgxMDQwMDAwZSwgMHgzYzAyMDgwMCwgMHg4ZTIzMDAxYywgMHg4ZjQyMDA2MCwKKzB4NjIyMDIzLCAweDQ4MjAwMDEsIDB4MjQ4NDAxMDAsIDB4OGY0MjAzNjAsCisweDQ0MTAyMSwgMHhhZjQyMDM2MCwgMHg4ZjQyMDM2OCwgMHhhZjQzMDA2MCwKKzB4NDQxMDIxLCAweGFmNDIwMzY4LCAweDNjMDIwODAwLCAweDJjMjEwMjQsCisweDUwNDAwMDExLCAweDM2OTQwMDQwLCAweDEwMDAwMDBmLCAweDAsCisweDMyNDIwMDQ4LCAweDEwNDAwMDA3LCAweDI0MTUwMDAxLCAweDhlMjIwMDFjLAorMHgzYzAzZmZmZiwgMHg0M2YwMjQsIDB4MzA0MmZmZmYsIDB4MTAwMGZkNzUsCisweGFlMjIwMDFjLCAweDMyNDIwMTAwLCAweDEwNDAwMDAzLCAweDAsCisweGMwMDJiZDgsIDB4MCwgMHg4ZmJmMDA1MCwgMHg4ZmJlMDA0YywKKzB4OGZiNTAwNDgsIDB4OGZiMzAwNDQsIDB4OGZiMjAwNDAsIDB4OGZiMTAwM2MsCisweDhmYjAwMDM4LCAweDNlMDAwMDgsIDB4MjdiZDAwNTgsIDB4M2UwMDAwOCwKKzB4MCwgMHgwLCAweDAsIDB4OGY4MzAwZTQsCisweDhmODIwMGUwLCAweDI0MDRmZmY4LCAweDQ0MTAyNCwgMHg2MjEwMjYsCisweDIxMDJiLCAweDIxMDIzLCAweDNlMDAwMDgsIDB4NjIxMDI0LAorMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZTAsIDB4YWZiZjAwMWMsCisweGFmYjAwMDE4LCAweDhmODYwMGM0LCAweDhmODQwMGUwLCAweDhmODUwMGU0LAorMHgyNDAyZmZmOCwgMHg4MjE4MjQsIDB4MTBhMzAwMDksIDB4Mjc2MjNmZjgsCisweDE0YTIwMDAyLCAweDI0YTIwMDA4LCAweDI3NjIzMDAwLCAweDQwODAyMSwKKzB4MTYwMzAwMDUsIDB4MzA4MjAwMDQsIDB4MTA0MDAwMDQsIDB4YzAyMDIxLAorMHgxMDAwMDAyMiwgMHgxMDIxLCAweDhlMDQwMDAwLCAweDhmNDIwMTFjLAorMHgxNGEyMDAwMywgMHgwLCAweDhmNDIwMTIwLCAweGFmNDIwMTE0LAorMHg4Y2EzMDAwMCwgMHg4ZjQyMDE0OCwgMHg4MzE4MjMsIDB4NDMxMDJiLAorMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LCAweDYyMTgyMSwKKzB4OTRhMjAwMDYsIDB4MjQ0MjAwNTAsIDB4NjIxMDJiLCAweDE0NDAwMDBmLAorMHhhMDEwMjEsIDB4YWZhNDAwMTAsIDB4YWZhMzAwMTQsIDB4OGNhNjAwMDAsCisweDhjYTcwMDA0LCAweDNjMDQwMDAxLCAweGMwMDJiM2IsIDB4MjQ4NDY4OTQsCisweDhmNDIwMjBjLCAweDI0NDIwMDAxLCAweGFmNDIwMjBjLCAweDhmNDIwMjBjLAorMHgxMDIxLCAweGFmOTAwMGU4LCAweGFmOTAwMGU0LCAweDhmYmYwMDFjLAorMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDIwLCAweDNlMDAwMDgsCisweDAsIDB4OGY4NDAwZTAsIDB4OGY4ODAwYzQsIDB4OGY4MzAwZTgsCisweDI0MDJmZmY4LCAweDgyMzgyNCwgMHhlMzIwMjMsIDB4MmM4MjEwMDAsCisweDUwNDAwMDAxLCAweDI0ODQxMDAwLCAweDQyMGMyLCAweDgwMTgyMSwKKzB4OGY0NDAyNTgsIDB4OGY0NTAyNWMsIDB4MTAyMSwgMHhhMzI4MjEsCisweGEzMzAyYiwgMHg4MjIwMjEsIDB4ODYyMDIxLCAweGFmNDQwMjU4LAorMHhhZjQ1MDI1YywgMHg4ZjgzMDBjOCwgMHg4ZjQyMDE0OCwgMHgxMDMyMDIzLAorMHg4MjEwMmIsIDB4MTQ0MDAwMDQsIDB4ODAxODIxLCAweDhmNDIwMTQ4LAorMHg4MjIwMjEsIDB4ODAxODIxLCAweDhmNDQwMjUwLCAweDhmNDUwMjU0LAorMHgxMDIxLCAweGEzMjgyMSwgMHhhMzMwMmIsIDB4ODIyMDIxLAorMHg4NjIwMjEsIDB4YWY0NDAyNTAsIDB4YWY0NTAyNTQsIDB4YWY4ODAwYzgsCisweGFmODcwMGU0LCAweGFmODcwMGU4LCAweDNlMDAwMDgsIDB4MCwKKzB4MjdiZGZmMzAsIDB4MjQwYTAwMDEsIDB4YWZiZjAwYzgsIDB4YWZiZTAwYzQsCisweGFmYjUwMGMwLCAweGFmYjMwMGJjLCAweGFmYjIwMGI4LCAweGFmYjEwMGI0LAorMHhhZmIwMDBiMCwgMHhhM2EwMDA5NywgMHhhZmEwMDA0NCwgMHhhZmFhMDA1YywKKzB4OTM0MjA1YzQsIDB4YTdhMDAwOGUsIDB4MTA0MDAwMGEsIDB4YTdhMDAwODYsCisweDhmNGIwMGM0LCAweGFmYWIwMDY0LCAweDhmNGEwMGMwLCAweGFmYWEwMDZjLAorMHg4ZjRiMDBjYywgMHhhZmFiMDA3NCwgMHg4ZjRhMDBjOCwgMHgxMDAwMDEyOSwKKzB4YWZhYTAwN2MsIDB4OGY0MjAxMTQsIDB4NDBmODA5LCAweDAsCisweDQwMzAyMSwgMHgxMGMwMDM0ZiwgMHgwLCAweDhjYzIwMDAwLAorMHg4Y2MzMDAwNCwgMHhhZmEyMDAyMCwgMHhhZmEzMDAyNCwgMHg4ZmFiMDAyNCwKKzB4OGZhYTAwMjAsIDB4MzE2MmZmZmYsIDB4MjQ0MmZmZmMsIDB4YWZhMjAwNmMsCisweDNjMDIwMDA2LCAweDJjMjEwMjQsIDB4YWZhYjAwN2MsIDB4MTQ0MDAwMTUsCisweGFmYWEwMDY0LCAweDkxNDIwMDAwLCAweDMwNDIwMDAxLCAweDEwNDAwMDExLAorMHgyNDAyZmZmZiwgMHg4ZDQzMDAwMCwgMHgxNDYyMDAwNCwgMHgzNDAyZmZmZiwKKzB4OTU0MzAwMDQsIDB4MTA2MjAwMGIsIDB4MCwgMHhjMDAyNGJiLAorMHg4ZmE0MDA2NCwgMHgzMDQyMDBmZiwgMHgxNDQwMDAwNiwgMHgwLAorMHg4ZjQyMDExOCwgMHg0MGY4MDksIDB4MCwgMHgxMDAwMDMyZCwKKzB4MCwgMHg4ZmEyMDAyNCwgMHgzYzAzZmZiZiwgMHgzNDYzZmZmZiwKKzB4NDMxMDI0LCAweDNjMDNmZmZmLCAweDQzMTgyNCwgMHgxNDYwMDAwMywKKzB4YWZhMjAwMjQsIDB4MTAwMDAwNDAsIDB4MTgyMSwgMHgzYzAyMDA4MCwKKzB4NjIxMDI0LCAweDEwNDAwMDA3LCAweDAsIDB4OGY0MjAzOGMsCisweDI0NDIwMDAxLCAweGFmNDIwMzhjLCAweDhmNDIwMzhjLCAweDEwMDAwMDM2LAorMHgyNDAzMDAwMSwgMHg4ZjQyMDIxMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDIxMCwKKzB4OGY0MjAyMTAsIDB4M2MwMjAwMDEsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAwMiwgMHg4ZjQyMDFjNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDFjNCwKKzB4OGY0MjAxYzQsIDB4M2MwMjAwMDIsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAwNCwgMHg4ZjQyMDM3YywgMHgyNDQyMDAwMSwgMHhhZjQyMDM3YywKKzB4OGY0MjAzN2MsIDB4M2MwMjAwMDQsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAwOCwgMHg4ZjQyMDM4MCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4MCwKKzB4OGY0MjAzODAsIDB4M2MwMjAwMDgsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAxMCwgMHg4ZjQyMDM4NCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4NCwKKzB4OGY0MjAzODQsIDB4M2MwMjAwMTAsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAyMCwgMHg4ZjQyMDFjMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDFjMCwKKzB4OGY0MjAxYzAsIDB4M2MwMjAwMjAsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgyNDAzMDAwMSwgMHg4ZjQyMDM4OCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4OCwKKzB4OGY0MjAzODgsIDB4MjQwMzAwMDEsIDB4OGMwMjAyNjAsIDB4OGZhYjAwNmMsCisweDRiMTAyYiwgMHgxMDQwMDAxNCwgMHgzMDcwMDBmZiwgMHg4ZjQyMDFlOCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAxZTgsIDB4OGY0MjAxZTgsIDB4OGZhYTAwN2MsCisweDhmODIwMGUwLCAweDM1NGEwMTAwLCAweGFmYWEwMDdjLCAweGFmYTIwMDEwLAorMHg4ZjgyMDBlNCwgMHgyNDEwMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NjhhMCwKKzB4YWZhMjAwMTQsIDB4OGZhNjAwMjAsIDB4OGZhNzAwMjQsIDB4M2MwNTAwMDcsCisweGMwMDJiM2IsIDB4MzRhNTA4MDAsIDB4MTIwMDAwMTAsIDB4M2MwMjAwODAsCisweDJjMjEwMjQsIDB4MTQ0MDAwMGUsIDB4MzJjMjA0MDAsIDB4OGZhYjAwN2MsCisweDNjMDIwMDgwLCAweDM0NDIwMTAwLCAweDE2MjEwMjQsIDB4MTA0MDAwMDUsCisweDAsIDB4OGY0MjAyMGMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAyMGMsCisweDhmNDIwMjBjLCAweDEwMDAwMmIwLCAweDhmYTMwMDZjLCAweDMyYzIwNDAwLAorMHgxMDQwMDAxNSwgMHgzNDAyODEwMCwgMHg4ZmFhMDA2NCwgMHg5NTQzMDAwYywKKzB4MTQ2MjAwMTIsIDB4M2MwMjAxMDAsIDB4MjQwYjAyMDAsIDB4YTdhYjAwOGUsCisweDk1NDIwMDBlLCAweDhkNDMwMDA4LCAweDhkNDQwMDA0LCAweDhkNDUwMDAwLAorMHg4ZmFhMDA2YywgMHg4ZmFiMDA2NCwgMHgyNTRhZmZmYywgMHhhZmFhMDA2YywKKzB4YTdhMjAwODYsIDB4YWQ2MzAwMGMsIDB4YWQ2NDAwMDgsIDB4YWQ2NTAwMDQsCisweDI1NmIwMDA0LCAweGFmYWIwMDY0LCAweDNjMDIwMTAwLCAweDJjMjEwMjQsCisweDEwNDAwMDA0LCAweDAsIDB4OGZhYTAwNmMsIDB4MjU0YTAwMDQsCisweGFmYWEwMDZjLCAweDhmNDIwMGJjLCAweDUwNDAwMDBhLCAweGFmYTAwMDc0LAorMHg4ZmFiMDA2YywgMHg0YjEwMmIsIDB4NTA0MDAwMDYsIDB4YWZhMDAwNzQsCisweDhmNDIwMGJjLCAweDE2MjEwMjMsIDB4YWZhMjAwNzQsIDB4OGY0YTAwYmMsCisweGFmYWEwMDZjLCAweDhmNDIwMDgwLCAweDhmYWIwMDZjLCAweDRiMTAyYiwKKzB4MTA0MDAwNTYsIDB4MzJjMjgwMDAsIDB4MTA0MDAwNWUsIDB4MjQwYTAwMDMsCisweDMyYzIxMDAwLCAweDEwNDAwMDViLCAweGFmYWEwMDVjLCAweDEwMDAwMDU4LAorMHgyNDBiMDAwNCwgMHg4ZjQyMDM1MCwgMHgyNDAzZmZiZiwgMHgyODNhMDI0LAorMHgyNDQyMDAwMSwgMHhhZjQyMDM1MCwgMHgxMDAwMDI0ZiwgMHg4ZjQyMDM1MCwKKzB4MmMyYjAyNSwgMHgyNDAyZmZiZiwgMHgyODJhMDI0LCAweDhmODMwMTI4LAorMHgzYzA0MDAwMSwgMHgyNDg0NjhkMCwgMHgyNjYyMDAwMSwgMHhhZmEyMDAxNCwKKzB4YWZhMzAwMTAsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDcsCisweGMwMDJiM2IsIDB4MzRhNTIyNTAsIDB4MTAwMDAyM2YsIDB4MCwKKzB4MmMyYjAyNSwgMHgyNDAyZmZiZiwgMHgyODJhMDI0LCAweDhmODMwMTI4LAorMHgzYzA0MDAwMSwgMHgyNDg0NjhkMCwgMHgyNDAyMDAwMiwgMHhhZmEyMDAxNCwKKzB4YWZhMzAwMTAsIDB4OGY4NjAxMjAsIDB4OGY4NzAxMjQsIDB4M2MwNTAwMDcsCisweGMwMDJiM2IsIDB4MzRhNTI0NTAsIDB4MTAwMDAyMmYsIDB4MCwKKzB4OGVhMjAwMDAsIDB4OGVhMzAwMDQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4ZTgsCisweGFmYjAwMDEwLCAweGFmYmUwMDE0LCAweDhlYTcwMDE4LCAweDM0YTUyODAwLAorMHhjMDAyYjNiLCAweDYwMzAyMSwgMHgxMDAwMDIyMywgMHgwLAorMHhhNmIxMDAwYSwgMHg4ZjgyMDEyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjhmMCwKKzB4YWZiZTAwMTQsIDB4YWZhMjAwMTAsIDB4OGY0NjAwNDQsIDB4OGY4NzAxMjAsCisweDNjMDUwMDA3LCAweGMwMDJiM2IsIDB4MzRhNTMwMDAsIDB4MTAwMDAyMTYsCisweDAsIDB4YTZiMTAwMGEsIDB4YTZiMjAwMGUsIDB4OGY4MjAxMjQsCisweDNjMDQwMDAxLCAweDI0ODQ2OGZjLCAweGFmYmUwMDE0LCAweGFmYTIwMDEwLAorMHg4ZjQ2MDA0NCwgMHg4Zjg3MDEyMCwgMHgzYzA1MDAwNywgMHhjMDAyYjNiLAorMHgzNGE1MzIwMCwgMHgxMDAwMDIwOCwgMHgwLCAweDhmNDIwMDg0LAorMHg4ZmFhMDA2YywgMHg0YTEwMmIsIDB4MTQ0MDAwMDcsIDB4M2MwMjAwMDEsCisweDJjMjEwMjQsIDB4MTA0MDAwMDQsIDB4MCwgMHgyNDBiMDAwMiwKKzB4YWZhYjAwNWMsIDB4OGZhYTAwNmMsIDB4MTE0MDAyMWIsIDB4MjdhYjAwMjAsCisweGFmYWIwMGE0LCAweDNjMGEwMDFmLCAweDM1NGFmZmZmLCAweGFmYWEwMDljLAorMHg4ZmFiMDA1YywgMHgyNDBhMDAwMSwgMHg1NTZhMDAyMSwgMHgyNDBhMDAwMiwKKzB4OGY0MzAwNTQsIDB4OGY0MjAwNTAsIDB4MTA2MjAwMGIsIDB4Mjc0YjAwNTQsCisweDhmNWUwMDU0LCAweDM0MDNlY2MwLCAweGFmYWIwMDRjLCAweDI3YzIwMDAxLAorMHgzMDQyMDFmZiwgMHhhZmEyMDA1NCwgMHgxZTExNDAsIDB4NDMxMDIxLAorMHgxMDAwMDA2YiwgMHgyZTJhODIxLCAweDhmNDIwMDQ0LCAweDhmYWEwMDZjLAorMHgzYzA0MDAwMSwgMHgyNDg0NjhhYywgMHhhZmFhMDAxNCwgMHhhZmEyMDAxMCwKKzB4OGY0NjAwNTQsIDB4OGY0NzAwNTAsIDB4M2MwNTAwMDcsIDB4YzAwMmIzYiwKKzB4MzRhNTEzMDAsIDB4OGY0MzAzNTAsIDB4MjQwMmZmYmYsIDB4MjgyYTAyNCwKKzB4MjQ2MzAwMDEsIDB4YWY0MzAzNTAsIDB4MTAwMDAxZDMsIDB4OGY0MjAzNTAsCisweDE1NmEwMDFkLCAweDAsIDB4OGY0MzAwNzQsIDB4OGY0MjAwNzAsCisweDEwNjIwMDBhLCAweDI3NGIwMDc0LCAweDhmNWUwMDc0LCAweGFmYWIwMDRjLAorMHgyN2MyMDAwMSwgMHgzMDQyMDNmZiwgMHhhZmEyMDA1NCwgMHgxZTExNDAsCisweDI0NDI2Y2MwLCAweDEwMDAwMDRhLCAweDJlMmE4MjEsIDB4OGY0MjAwNDQsCisweDhmYWEwMDZjLCAweDNjMDQwMDAxLCAweDI0ODQ2OGI4LCAweDNjMDUwMDA3LAorMHhhZmFhMDAxNCwgMHhhZmEyMDAxMCwgMHg4ZjQ2MDA3NCwgMHg4ZjQ3MDA3MCwKKzB4MzRhNTE1MDAsIDB4MjQwYjAwMDEsIDB4YzAwMmIzYiwgMHhhZmFiMDA1YywKKzB4MTAwMGZmYzMsIDB4MCwgMHg4ZjQzMDA2NCwgMHg4ZjQyMDA2MCwKKzB4MTA2MjAwMWEsIDB4Mjc0YTAwNjQsIDB4OGY1ZTAwNjQsIDB4OGZhYjAwNWMsCisweGFmYWEwMDRjLCAweDI3YzIwMDAxLCAweDMwNDIwMGZmLCAweGFmYTIwMDU0LAorMHgyNDAyMDAwNCwgMHgxNTYyMDAwZSwgMHgxZTExNDAsIDB4MWUxMTgwLAorMHgyNDQyMGNjMCwgMHgyZTIxMDIxLCAweGFmYTIwMDQ0LCAweDk0NDIwMDJhLAorMHg4ZmFhMDA0NCwgMHg4ZmFiMDA2YywgMHg0YjEwMmIsIDB4MTA0MDAwMjQsCisweDI1NTUwMDIwLCAweDI0MGEwMDAxLCAweDEwMDAwMDIxLCAweGEzYWEwMDk3LAorMHgyNDQyNGNjMCwgMHgxMDAwMDAxZSwgMHgyZTJhODIxLCAweDhmNDIwMDQ0LAorMHg4ZmFiMDA2YywgMHgzYzA0MDAwMSwgMHgyNDg0NjhjNCwgMHhhZmFiMDAxNCwKKzB4YWZhMjAwMTAsIDB4OGY0NjAwNjQsIDB4OGY0NzAwNjAsIDB4M2MwNTAwMDcsCisweGMwMDJiM2IsIDB4MzRhNTE4MDAsIDB4M2MwMjAwMDgsIDB4MmMyMTAyNCwKKzB4MTQ0MGZmMzQsIDB4MCwgMHg4ZjQyMDM3MCwgMHgyNDBhMDAwMSwKKzB4YWZhYTAwNWMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNzAsIDB4MTAwMGZmOTAsCisweDhmNDIwMzcwLCAweDI3YTMwMDM2LCAweDEzMTA0MCwgMHg2MjE4MjEsCisweDk0NjIwMDAwLCAweDQ0MTAyMSwgMHgxMDAwMDAyMCwgMHhhNDYyMDAwMCwKKzB4OGZhYjAwNjQsIDB4YWVhYjAwMTgsIDB4OTNhMjAwOTcsIDB4MTA0MDAwNzIsCisweDk4MjEsIDB4OGZhYTAwNDQsIDB4OGZhNDAwNmMsIDB4OGZhMzAwYTQsCisweDI1NDIwMDIwLCAweGFmYTIwMDI4LCAweDI1NDIwMDA4LCAweGFmYTIwMDMwLAorMHgyNTQyMDAxMCwgMHhhZmFhMDAyYywgMHhhZmEyMDAzNCwgMHg5NTQyMDAyYSwKKzB4YTdhMjAwMzgsIDB4OTU0MjAwMTgsIDB4YTdhMjAwM2EsIDB4OTU0MjAwMWEsCisweGE3YTIwMDNjLCAweDk1NDIwMDFjLCAweGE3YTIwMDNlLCAweDk0NjIwMDE4LAorMHgyNDYzMDAwMiwgMHg4MjIwMjMsIDB4MTg4MGZmZGUsIDB4MjY3MzAwMDEsCisweDJlNjIwMDA0LCAweDE0NDBmZmY5LCAweDAsIDB4OGY0MjAwZmMsCisweDI2NjUwMDAxLCAweGEyMTAyYSwgMHgxNDQwMDAyYiwgMHgyNDAzMDAwMSwKKzB4OGY4MzAxMmMsIDB4MTA2MDAwMjMsIDB4MCwgMHg4ZjgyMDEyNCwKKzB4NDMxMDIzLCAweDIyMTQzLCAweDU4ODAwMDAxLCAweDI0ODQwMDQwLAorMHg4ZjgyMDEyOCwgMHg0MzEwMjMsIDB4MjE5NDMsIDB4NTg2MDAwMDEsCisweDI0NjMwMDQwLCAweDY0MTAyYSwgMHg1NDQwMDAwMSwgMHg2MDIwMjEsCisweGFmNDQwMGZjLCAweDhmNDIwMGZjLCAweGEyMTAyYSwgMHgxMDQwMDAxMSwKKzB4MjQwMzAwMDEsIDB4MTAwMDAwMTUsIDB4MzA2MjAwZmYsIDB4OGZhYjAwNjQsCisweDk2MDcwMDE4LCAweGFmYWIwMDEwLCAweDhlMjIwMDA4LCAweDNjMDQwMDAxLAorMHgyNDg0NjhkYywgMHg4YzQzMDAwNCwgMHg4YzQyMDAwMCwgMHgzNGE1MjQwMCwKKzB4MjQwMzAyMSwgMHhjMDAyYjNiLCAweGFmYTMwMDE0LCAweDEwMDAwMDJiLAorMHgwLCAweDhmNDIwMzM0LCAweDE4MjEsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzM0LCAweDhmNDIwMzM0LCAweDMwNjIwMGZmLCAweDUwNDBmZWRjLAorMHgzYzAyMDgwMCwgMHgxMjYwMDAyMSwgMHg5MDIxLCAweDhmYjEwMGE0LAorMHgyMjA4MDIxLCAweDhlMjIwMDA4LCAweDk2MDcwMDE4LCAweDhmYTYwMDY0LAorMHg4YzQ0MDAwMCwgMHg4YzQ1MDAwNCwgMHgyNDBhMDAwMSwgMHhhZmFhMDAxMCwKKzB4YWZiZTAwMTQsIDB4OGY0MjAwMDgsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsCisweDQwZjgwOSwgMHgwLCAweDEwNDBmZmQ4LCAweDNjMDUwMDA3LAorMHg5NjAyMDAxOCwgMHg4ZmFiMDA2NCwgMHg4ZmFhMDA5YywgMHgxNjI1ODIxLAorMHgxNGIxMDJiLCAweDEwNDAwMDA0LCAweGFmYWIwMDY0LCAweDhmNDIwMTQ4LAorMHgxNjI1ODIzLCAweGFmYWIwMDY0LCAweDI2MTAwMDAyLCAweDI2NTIwMDAxLAorMHgyNTMxMDJiLCAweDE0NDBmZmUzLCAweDI2MzEwMDA0LCAweDhmYjAwMDZjLAorMHgxMDAwMDAzNiwgMHg5N2IxMDAzOCwgMHg4ZjQyMDBmYywgMHgyNDA1MDAwMiwKKzB4YTIxMDJhLCAweDE0NDAwMDFiLCAweDI0MDMwMDAxLCAweDhmODMwMTJjLAorMHgxMDYwMDAxMywgMHgwLCAweDhmODIwMTI0LCAweDQzMTAyMywKKzB4MjIxNDMsIDB4NTg4MDAwMDEsIDB4MjQ4NDAwNDAsIDB4OGY4MjAxMjgsCisweDQzMTAyMywgMHgyMTk0MywgMHg1ODYwMDAwMSwgMHgyNDYzMDA0MCwKKzB4NjQxMDJhLCAweDU0NDAwMDAxLCAweDYwMjAyMSwgMHhhZjQ0MDBmYywKKzB4OGY0MjAwZmMsIDB4YTIxMDJhLCAweDE0NDAwMDA2LCAweDI0MDMwMDAxLAorMHg4ZjQyMDMzNCwgMHgxODIxLCAweDI0NDIwMDAxLCAweGFmNDIwMzM0LAorMHg4ZjQyMDMzNCwgMHgzMDYyMDBmZiwgMHgxMDQwZmVhNSwgMHgzYzAyMDgwMCwKKzB4OTZiMTAwMGEsIDB4OGZiMDAwNmMsIDB4MzIyM2ZmZmYsIDB4NzAxMDJiLAorMHg1NDQwMDAwMSwgMHg2MDgwMjEsIDB4OGVhNDAwMDAsIDB4OGVhNTAwMDQsCisweDI0MGIwMDAxLCAweGFmYWIwMDEwLCAweGFmYmUwMDE0LCAweDhmNDIwMDA4LAorMHg4ZmE2MDA2NCwgMHhhZmEyMDAxOCwgMHg4ZjQyMDEwYywgMHg0MGY4MDksCisweDIwMDM4MjEsIDB4MTA0MGZlYTIsIDB4M2MwNTAwMDcsIDB4OTZhMzAwMGUsCisweDk3YWEwMDhlLCAweDExNDAwMDA3LCAweDYwOTAyMSwgMHg5MzQyMDVjNCwKKzB4MTQ0MDAwMDQsIDB4MCwgMHg5N2FiMDA4NiwgMHg2YTE4MjUsCisweGE2YWIwMDE2LCAweDhmYWEwMDdjLCAweDNjMDJmZmZmLCAweDE0MjEwMjQsCisweDEwNDAwMDAzLCAweGExNDAyLCAweDM0NjMwNDAwLCAweGE2YTIwMDE0LAorMHg4ZmFiMDA2YywgMHg1NjBiMDA3MiwgMHhhNmEzMDAwZSwgMHgzNDYyMDAwNCwKKzB4YTZhMjAwMGUsIDB4OGZhYTAwNzQsIDB4MTZhMTAyMSwgMHhhNmEyMDAwYSwKKzB4OGY0MzAwNDQsIDB4OGY0NDAxYTAsIDB4OGY0NTAxYTQsIDB4MzQwMjgwMDAsCisweGFmYTIwMDEwLCAweDhmNDIwMDQ0LCAweDJhMDMwMjEsIDB4MjQwNzAwMjAsCisweGFmYTIwMDE0LCAweDhmNDIwMDBjLCAweDMxOTQwLCAweDYwNDgyMSwKKzB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIDB4NDAyMSwgMHhhOTI4MjEsCisweGE5MTgyYiwgMHg4ODIwMjEsIDB4NDBmODA5LCAweDgzMjAyMSwKKzB4NTA0MGZlN2YsIDB4YTZiMjAwMGUsIDB4OGY0MjAzNjgsIDB4YWZhMDAwNmMsCisweGEzNDAwNWM0LCAweDI0NDJmZmZmLCAweGFmNDIwMzY4LCAweDhmYWIwMDVjLAorMHgyNDBhMDAwMSwgMHg4ZjQyMDM2OCwgMHgxNTZhMDAwNiwgMHgyNDBhMDAwMiwKKzB4OGY0MjAzNWMsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNWMsIDB4MTAwMDAwMGMsCisweDhmNDIwMzVjLCAweDE1NmEwMDA2LCAweDAsIDB4OGY0MjAzNjQsCisweDI0NDJmZmZmLCAweGFmNDIwMzY0LCAweDEwMDAwMDA1LCAweDhmNDIwMzY0LAorMHg4ZjQyMDM2MCwgMHgyNDQyZmZmZiwgMHhhZjQyMDM2MCwgMHg4ZjQyMDM2MCwKKzB4OGZhYTAwNTQsIDB4OGZhYjAwNGMsIDB4YWQ2YTAwMDAsIDB4OGY0MjAwNDQsCisweDhmNDQwMDg4LCAweDhmNDMwMDc4LCAweDI0NDIwMDAxLCAweDQ0MTAyNCwKKzB4MjQ2MzAwMDEsIDB4YWY0MjAwNDQsIDB4YWY0MzAwNzgsIDB4OGMwMjAyNDAsCisweDYyMTgyYiwgMHgxNDYwMDA3NSwgMHgyNDA3MDAwOCwgMHg4ZjQ0MDE2OCwKKzB4OGY0NTAxNmMsIDB4OGY0MzAwNDQsIDB4OGY0ODAwMGMsIDB4OGY4NjAxMjAsCisweDI0MDIwMDQwLCAweGFmYTIwMDEwLCAweGFmYTMwMDE0LCAweGFmYTgwMDE4LAorMHg4ZjQyMDEwYywgMHg0MGY4MDksIDB4MjRjNjAwMWMsIDB4MTQ0MDAwMTEsCisweDI0MGIwMDAxLCAweDNjMDEwMDAxLCAweDM3MDgyMSwgMHhhMDJiNDBmMiwKKzB4OGY4MjAxMjQsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjgsIDB4M2MwNDAwMDEsCisweDI0ODQ2ODhjLCAweGFmYTIwMDE0LCAweDhmNDYwMDQ0LCAweDhmODcwMTIwLAorMHgzYzA1MDAwOSwgMHhjMDAyYjNiLCAweDM0YTUxMzAwLCAweDEwMDAwMDBiLAorMHgwLCAweDhmNDIwMzA0LCAweDI0NDIwMDAxLCAweGFmNDIwMzA0LAorMHg4ZjQyMDMwNCwgMHg4ZjQyMDA0NCwgMHhhZjQyMDA3YywgMHgzYzAxMDAwMSwKKzB4MzcwODIxLCAweGEwMjA0MGYyLCAweGFmNDAwMDc4LCAweDhmNDIwMzE4LAorMHgyNDQyMDAwMSwgMHhhZjQyMDMxOCwgMHgxMDAwMDA0OCwgMHg4ZjQyMDMxOCwKKzB4YTZiMDAwMGEsIDB4OGY0MzAwNDQsIDB4OGY0NDAxYTAsIDB4OGY0NTAxYTQsCisweDM0MDI4MDAwLCAweGFmYTIwMDEwLCAweDhmNDIwMDQ0LCAweDJhMDMwMjEsCisweDI0MDcwMDIwLCAweGFmYTIwMDE0LCAweDhmNDIwMDBjLCAweDMxOTQwLAorMHg2MDQ4MjEsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsIDB4NDAyMSwKKzB4YTkyODIxLCAweGE5MTgyYiwgMHg4ODIwMjEsIDB4NDBmODA5LAorMHg4MzIwMjEsIDB4MTA0MGZlMWYsIDB4MjQwYTAwMDEsIDB4YTM0YTA1YzQsCisweDhmYWIwMDZjLCAweDhmYWEwMDY0LCAweDE3MDU4MjMsIDB4YWZhYjAwNmMsCisweDhmYWIwMDljLCAweDE1MDUwMjEsIDB4MTZhMTAyYiwgMHgxMDQwMDAwNCwKKzB4YWZhYTAwNjQsIDB4OGY0MjAxNDgsIDB4MTQyNTAyMywgMHhhZmFhMDA2NCwKKzB4OGY0MjAzNjgsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNjgsIDB4OGZhYTAwNWMsCisweDI0MGIwMDAxLCAweDhmNDIwMzY4LCAweDE1NGIwMDA2LCAweDI0MGIwMDAyLAorMHg4ZjQyMDM1YywgMHgyNDQyZmZmZiwgMHhhZjQyMDM1YywgMHgxMDAwMDAwYywKKzB4OGY0MjAzNWMsIDB4MTE0YjAwMDYsIDB4MCwgMHg4ZjQyMDM2MCwKKzB4MjQ0MmZmZmYsIDB4YWY0MjAzNjAsIDB4MTAwMDAwMDUsIDB4OGY0MjAzNjAsCisweDhmNDIwMzY0LCAweDI0NDJmZmZmLCAweGFmNDIwMzY0LCAweDhmNDIwMzY0LAorMHg4ZmFiMDA1NCwgMHg4ZmFhMDA0YywgMHhhZDRiMDAwMCwgMHg4ZjQyMDA0NCwKKzB4OGY0NDAwODgsIDB4OGY0MzAwNzgsIDB4MjQ0MjAwMDEsIDB4NDQxMDI0LAorMHgyNDYzMDAwMSwgMHhhZjQyMDA0NCwgMHhhZjQzMDA3OCwgMHg4ZmFhMDA2YywKKzB4MTU0MGZlMGIsIDB4MCwgMHg4ZmFiMDA2YywgMHgxMTYwMDAxZSwKKzB4MCwgMHg5MzQyMDVjNCwgMHgxMDQwMDAwOSwgMHgwLAorMHg4ZmFhMDA2NCwgMHhhZjRhMDBjNCwgMHhhZjRiMDBjMCwgMHg4ZmFiMDA3YywKKzB4YWY0YjAwYzgsIDB4OGZhYTAwNzQsIDB4MTAwMDAwMGUsIDB4YWY0YTAwY2MsCisweDk3YWIwMDhlLCAweDExNjAwMDBiLCAweDM0MDM4MTAwLCAweDhmYTIwMDIwLAorMHg4YzQ2MDAwYywgMHhhNDQzMDAwYywgMHg5N2FhMDA4NiwgMHg4YzQ0MDAwNCwKKzB4OGM0NTAwMDgsIDB4YTQ0YTAwMGUsIDB4YWM0NDAwMDAsIDB4YWM0NTAwMDQsCisweGFjNDYwMDA4LCAweDhmNDIwMzRjLCAweDI0NDIwMDAxLCAweGFmNDIwMzRjLAorMHgxMDAwMDAxMCwgMHg4ZjQyMDM0YywgMHg4ZmFiMDA3YywgMHgzMTY0ZmZmZiwKKzB4MjQ4NGZmZmMsIDB4ODAxODIxLCAweDhmNDQwMjUwLCAweDhmNDUwMjU0LAorMHg4ZjQ2MDExOCwgMHgxMDIxLCAweGEzMjgyMSwgMHhhMzM4MmIsCisweDgyMjAyMSwgMHg4NzIwMjEsIDB4YWY0NDAyNTAsIDB4YzBmODA5LAorMHhhZjQ1MDI1NCwgMHg4ZmJmMDBjOCwgMHg4ZmJlMDBjNCwgMHg4ZmI1MDBjMCwKKzB4OGZiMzAwYmMsIDB4OGZiMjAwYjgsIDB4OGZiMTAwYjQsIDB4OGZiMDAwYjAsCisweDNlMDAwMDgsIDB4MjdiZDAwZDAsIDB4M2UwMDAwOCwgMHgwLAorMHgyN2JkZmYzOCwgMHgyNDBiMDAwMSwgMHhhZmJmMDBjMCwgMHhhZmJlMDBiYywKKzB4YWZiNTAwYjgsIDB4YWZiMzAwYjQsIDB4YWZiMjAwYjAsIDB4YWZiMTAwYWMsCisweGFmYjAwMGE4LCAweGEzYTAwMDg3LCAweGFmYTAwMDQ0LCAweGFmYWIwMDVjLAorMHg5MzQyMDVjNCwgMHhhN2EwMDA3NiwgMHgxMDQwMDAwNywgMHhhN2EwMDA3ZSwKKzB4OGY0YzAwYzAsIDB4YWZhYzAwNjQsIDB4OGY0YjAwYzgsIDB4OGY1ZTAwYzQsCisweDEwMDAwMTMwLCAweGFmYWIwMDZjLCAweDhmNDIwMTE0LCAweDQwZjgwOSwKKzB4MCwgMHg0MDMwMjEsIDB4MTBjMDAyYTEsIDB4MCwKKzB4OGNjMjAwMDAsIDB4OGNjMzAwMDQsIDB4YWZhMjAwMjAsIDB4YWZhMzAwMjQsCisweDhmYWMwMDI0LCAweDhmYmUwMDIwLCAweDMxODJmZmZmLCAweDI0NDJmZmZjLAorMHhhZmEyMDA2NCwgMHgzYzAyMDAwNiwgMHgyYzIxMDI0LCAweDE0NDAwMDE1LAorMHhhZmFjMDA2YywgMHg5M2MyMDAwMCwgMHgzMDQyMDAwMSwgMHgxMDQwMDAxMSwKKzB4MjQwMmZmZmYsIDB4OGZjMzAwMDAsIDB4MTQ2MjAwMDQsIDB4MzQwMmZmZmYsCisweDk3YzMwMDA0LCAweDEwNjIwMDBiLCAweDAsIDB4YzAwMjRiYiwKKzB4M2MwMjAyMSwgMHgzMDQyMDBmZiwgMHgxNDQwMDAwNiwgMHgwLAorMHg4ZjQyMDExOCwgMHg0MGY4MDksIDB4MCwgMHgxMDAwMDI4MCwKKzB4MCwgMHg4ZmEyMDAyNCwgMHgzYzAzZmZiZiwgMHgzNDYzZmZmZiwKKzB4NDMxMDI0LCAweDNjMDNmZmZmLCAweDQzMTgyNCwgMHgxNDYwMDAwMywKKzB4YWZhMjAwMjQsIDB4MTAwMDAwNDAsIDB4ODAyMSwgMHgzYzAyMDA4MCwKKzB4NjIxMDI0LCAweDEwNDAwMDA3LCAweDAsIDB4OGY0MjAzOGMsCisweDI0NDIwMDAxLCAweGFmNDIwMzhjLCAweDhmNDIwMzhjLCAweDEwMDAwMDM2LAorMHgyNDEwMDAwMSwgMHg4ZjQyMDIxMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDIxMCwKKzB4OGY0MjAyMTAsIDB4M2MwMjAwMDEsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAwMiwgMHg4ZjQyMDFjNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDFjNCwKKzB4OGY0MjAxYzQsIDB4M2MwMjAwMDIsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAwNCwgMHg4ZjQyMDM3YywgMHgyNDQyMDAwMSwgMHhhZjQyMDM3YywKKzB4OGY0MjAzN2MsIDB4M2MwMjAwMDQsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAwOCwgMHg4ZjQyMDM4MCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4MCwKKzB4OGY0MjAzODAsIDB4M2MwMjAwMDgsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAxMCwgMHg4ZjQyMDM4NCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4NCwKKzB4OGY0MjAzODQsIDB4M2MwMjAwMTAsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgzYzAyMDAyMCwgMHg4ZjQyMDFjMCwgMHgyNDQyMDAwMSwgMHhhZjQyMDFjMCwKKzB4OGY0MjAxYzAsIDB4M2MwMjAwMjAsIDB4NjIxMDI0LCAweDEwNDAwMDA2LAorMHgyNDEwMDAwMSwgMHg4ZjQyMDM4OCwgMHgyNDQyMDAwMSwgMHhhZjQyMDM4OCwKKzB4OGY0MjAzODgsIDB4MjQxMDAwMDEsIDB4OGMwMjAyNjAsIDB4OGZhYjAwNjQsCisweDRiMTAyYiwgMHgxMDQwMDAxNSwgMHgzMjAyMDBmZiwgMHg4ZjQyMDFlOCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAxZTgsIDB4OGY0MjAxZTgsIDB4OGZhYzAwNmMsCisweDhmODIwMGUwLCAweDM1OGMwMTAwLCAweGFmYWMwMDZjLCAweGFmYTIwMDEwLAorMHg4ZjgyMDBlNCwgMHgyNDEwMDAwMSwgMHgzYzA0MDAwMSwgMHgyNDg0NjhhMCwKKzB4YWZhMjAwMTQsIDB4OGZhNjAwMjAsIDB4OGZhNzAwMjQsIDB4M2MwNTAwMDcsCisweGMwMDJiM2IsIDB4MzRhNTM2MDAsIDB4MzIwMjAwZmYsIDB4MTA0MDAwMTAsCisweDNjMDIwMDgwLCAweDJjMjEwMjQsIDB4MTQ0MDAwMGUsIDB4MzJjMjA0MDAsCisweDhmYWIwMDZjLCAweDNjMDIwMDgwLCAweDM0NDIwMTAwLCAweDE2MjEwMjQsCisweDEwNDAwMDA1LCAweDAsIDB4OGY0MjAyMGMsIDB4MjQ0MjAwMDEsCisweGFmNDIwMjBjLCAweDhmNDIwMjBjLCAweDEwMDAwMjAyLCAweDhmYTMwMDY0LAorMHgzMmMyMDQwMCwgMHgxMDQwMDAxMiwgMHgzNDAyODEwMCwgMHg5N2MzMDAwYywKKzB4MTQ2MjAwMGYsIDB4MCwgMHgyNDBjMDIwMCwgMHhhN2FjMDA3NiwKKzB4OTdjMjAwMGUsIDB4OGZjMzAwMDgsIDB4OGZjNDAwMDQsIDB4OGZhYjAwNjQsCisweDhmYzUwMDAwLCAweDI1NmJmZmZjLCAweGFmYWIwMDY0LCAweGE3YTIwMDdlLAorMHhhZmMzMDAwYywgMHhhZmM0MDAwOCwgMHhhZmM1MDAwNCwgMHgyN2RlMDAwNCwKKzB4OGZhNzAwNjQsIDB4MzIwMjAwZmYsIDB4MTQ0MDAwMzQsIDB4M2MwMjAxMDAsCisweDk3YzQwMDBjLCAweDJjODMwNWRkLCAweDM4ODI4ODcwLCAweDJjNDIwMDAxLAorMHg2MjE4MjUsIDB4MTA2MDAwMTUsIDB4MjgyMSwgMHgzMmMyMDgwMCwKKzB4MTA0MDAwMTUsIDB4MjQwMjA4MDAsIDB4OTdjMzAwMTQsIDB4MTQ2MjAwMTIsCisweDM0MDJhYWFhLCAweDk3YzMwMDBlLCAweDE0NjIwMDA3LCAweDIwMjEsCisweDk3YzMwMDEwLCAweDI0MDIwMzAwLCAweDE0NjIwMDA0LCAweDgwMTAyMSwKKzB4OTdjMjAwMTIsIDB4MmM0NDAwMDEsIDB4ODAxMDIxLCAweDU0NDAwMDA2LAorMHgyNDA1MDAxNiwgMHgxMDAwMDAwNCwgMHgwLCAweDI0MDIwODAwLAorMHg1MDgyMDAwMSwgMHgyNDA1MDAwZSwgMHgxMGEwMDAxMywgMHgzYzUyMDIxLAorMHgyNDgzMDAwOSwgMHgzYzAyMDAxZiwgMHgzNDQyZmZmZiwgMHg0MzEwMmIsCisweDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsIDB4NjIxODIzLAorMHg5MDYyMDAwMCwgMHgzODQzMDAwNiwgMHgyYzYzMDAwMSwgMHgzODQyMDAxMSwKKzB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDEwNjAwMDA0LCAweDNjMDIwMTAwLAorMHg5NDgyMDAwMiwgMHg0NTM4MjEsIDB4M2MwMjAxMDAsIDB4MmMyMTAyNCwKKzB4NTA0MDAwMGUsIDB4YWZhNzAwNjQsIDB4OGZhYzAwNjQsIDB4MTBlYzAwMDgsCisweDNjMDUwMDA3LCAweDNjMDQwMDAxLCAweDI0ODQ2OTA4LCAweDhmYTYwMDY0LAorMHgzNGE1NDAwMCwgMHhhZmEwMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LAorMHg4ZmFiMDA2NCwgMHgyNTZiMDAwNCwgMHhhZmFiMDA2NCwgMHg4ZjQyMDA4MCwKKzB4OGZhYzAwNjQsIDB4NGMxMDJiLCAweDEwNDAwMDJjLCAweDMyYzI4MDAwLAorMHgxMDQwMDAzNCwgMHgyNDBiMDAwMywgMHgzMmMyMTAwMCwgMHgxMDQwMDAzMSwKKzB4YWZhYjAwNWMsIDB4MTAwMDAwMmUsIDB4MjQwYzAwMDQsIDB4OGY0MjAzNTAsCisweDI0MDNmZmJmLCAweDI4M2EwMjQsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNTAsCisweDEwMDAwMTczLCAweDhmNDIwMzUwLCAweDNjMDIwODAwLCAweDJjMmIwMjUsCisweDI0MDJmZmJmLCAweDI4MmEwMjQsIDB4OGY4MzAxMjgsIDB4M2MwNDAwMDEsCisweDI0ODQ2OGQwLCAweDI2NjIwMDAxLCAweGFmYTIwMDE0LCAweGFmYTMwMDEwLAorMHg4Zjg2MDEyMCwgMHg4Zjg3MDEyNCwgMHgzYzA1MDAwNywgMHhjMDAyYjNiLAorMHgzNGE1NTMwMCwgMHgxMDAwMDE2MiwgMHgwLCAweDhlYTIwMDAwLAorMHg4ZWEzMDAwNCwgMHgzYzA0MDAwMSwgMHgyNDg0NjhlOCwgMHhhZmIwMDAxMCwKKzB4YWZiMTAwMTQsIDB4OGVhNzAwMTgsIDB4MzRhNTU5MDAsIDB4YzAwMmIzYiwKKzB4NjAzMDIxLCAweDEwMDAwMTU2LCAweDAsIDB4OGY0MjAwODQsCisweDhmYWIwMDY0LCAweDRiMTAyYiwgMHgxNDQwMDAwNywgMHgzYzAyMDAwMSwKKzB4MmMyMTAyNCwgMHgxMDQwMDAwNCwgMHgwLCAweDI0MGMwMDAyLAorMHhhZmFjMDA1YywgMHg4ZmFiMDA2NCwgMHgxMTYwMDE2NiwgMHgyN2FjMDAyMCwKKzB4YWZhYzAwOGMsIDB4OGZhYjAwNWMsIDB4MjQwYzAwMDEsIDB4NTU2YzAwMjEsCisweDI0MGMwMDAyLCAweDhmNDMwMDU0LCAweDhmNDIwMDUwLCAweDEwNjIwMDBiLAorMHgyNzRiMDA1NCwgMHg4ZjUxMDA1NCwgMHgzNDAzZWNjMCwgMHhhZmFiMDA0YywKKzB4MjYyMjAwMDEsIDB4MzA0MjAxZmYsIDB4YWZhMjAwNTQsIDB4MTExMTQwLAorMHg0MzEwMjEsIDB4MTAwMDAwNmIsIDB4MmUyYTgyMSwgMHg4ZjQyMDA0NCwKKzB4OGZhYzAwNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4YWMsIDB4YWZhYzAwMTQsCisweGFmYTIwMDEwLCAweDhmNDYwMDU0LCAweDhmNDcwMDUwLCAweDNjMDUwMDA3LAorMHhjMDAyYjNiLCAweDM0YTU0MzAwLCAweDhmNDMwMzUwLCAweDI0MDJmZmJmLAorMHgyODJhMDI0LCAweDI0NjMwMDAxLCAweGFmNDMwMzUwLCAweDEwMDAwMTI0LAorMHg4ZjQyMDM1MCwgMHgxNTZjMDAxZCwgMHgwLCAweDhmNDMwMDc0LAorMHg4ZjQyMDA3MCwgMHgxMDYyMDAwYSwgMHgyNzRiMDA3NCwgMHg4ZjUxMDA3NCwKKzB4YWZhYjAwNGMsIDB4MjYyMjAwMDEsIDB4MzA0MjAzZmYsIDB4YWZhMjAwNTQsCisweDExMTE0MCwgMHgyNDQyNmNjMCwgMHgxMDAwMDA0YSwgMHgyZTJhODIxLAorMHg4ZjQyMDA0NCwgMHg4ZmFjMDA2NCwgMHgzYzA0MDAwMSwgMHgyNDg0NjhiOCwKKzB4M2MwNTAwMDcsIDB4YWZhYzAwMTQsIDB4YWZhMjAwMTAsIDB4OGY0NjAwNzQsCisweDhmNDcwMDcwLCAweDM0YTU0NTAwLCAweDI0MGIwMDAxLCAweGMwMDJiM2IsCisweGFmYWIwMDVjLCAweDEwMDBmZmMzLCAweDAsIDB4OGY0MzAwNjQsCisweDhmNDIwMDYwLCAweDEwNjIwMDFhLCAweDI3NGMwMDY0LCAweDhmNTEwMDY0LAorMHg4ZmFiMDA1YywgMHhhZmFjMDA0YywgMHgyNjIyMDAwMSwgMHgzMDQyMDBmZiwKKzB4YWZhMjAwNTQsIDB4MjQwMjAwMDQsIDB4MTU2MjAwMGUsIDB4MTExMTQwLAorMHgxMTExODAsIDB4MjQ0MjBjYzAsIDB4MmUyMTAyMSwgMHhhZmEyMDA0NCwKKzB4OTQ0MjAwMmEsIDB4OGZhYzAwNDQsIDB4OGZhYjAwNjQsIDB4NGIxMDJiLAorMHgxMDQwMDAyNCwgMHgyNTk1MDAyMCwgMHgyNDBjMDAwMSwgMHgxMDAwMDAyMSwKKzB4YTNhYzAwODcsIDB4MjQ0MjRjYzAsIDB4MTAwMDAwMWUsIDB4MmUyYTgyMSwKKzB4OGY0MjAwNDQsIDB4OGZhYjAwNjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4YzQsCisweGFmYWIwMDE0LCAweGFmYTIwMDEwLCAweDhmNDYwMDY0LCAweDhmNDcwMDYwLAorMHgzYzA1MDAwNywgMHhjMDAyYjNiLCAweDM0YTU0ODAwLCAweDNjMDIwMDA4LAorMHgyYzIxMDI0LCAweDE0NDBmZjYxLCAweDAsIDB4OGY0MjAzNzAsCisweDI0MGMwMDAxLCAweGFmYWMwMDVjLCAweDI0NDIwMDAxLCAweGFmNDIwMzcwLAorMHgxMDAwZmY5MCwgMHg4ZjQyMDM3MCwgMHgyN2EzMDAzNiwgMHgxMzEwNDAsCisweDYyMTgyMSwgMHg5NDYyMDAwMCwgMHg0NDEwMjEsIDB4MTAwMDAwMWYsCisweGE0NjIwMDAwLCAweGFlYmUwMDE4LCAweDkzYTIwMDg3LCAweDEwNDAwMDg0LAorMHg5ODIxLCAweDhmYWIwMDQ0LCAweDhmYTQwMDY0LCAweDhmYTMwMDhjLAorMHgyNTYyMDAyMCwgMHhhZmEyMDAyOCwgMHgyNTYyMDAwOCwgMHhhZmEyMDAzMCwKKzB4MjU2MjAwMTAsIDB4YWZhYjAwMmMsIDB4YWZhMjAwMzQsIDB4OTU2MjAwMmEsCisweGE3YTIwMDM4LCAweDk1NjIwMDE4LCAweGE3YTIwMDNhLCAweDk1NjIwMDFhLAorMHhhN2EyMDAzYywgMHg5NTYyMDAxYywgMHhhN2EyMDAzZSwgMHg5NDYyMDAxOCwKKzB4MjQ2MzAwMDIsIDB4ODIyMDIzLCAweDE4ODBmZmRmLCAweDI2NzMwMDAxLAorMHgyZTYyMDAwNCwgMHgxNDQwZmZmOSwgMHgwLCAweDhmNDIwMGZjLAorMHgyNjIxMDJhLCAweDE0NDAwMDMwLCAweDI0MDMwMDAxLCAweDhmODMwMTJjLAorMHgxMDYwMDAyOCwgMHgwLCAweDhmODIwMTI0LCAweDQzMTAyMywKKzB4MjIxNDMsIDB4NTg4MDAwMDEsIDB4MjQ4NDAwNDAsIDB4OGY4MjAxMjgsCisweDQzMTAyMywgMHgyMTk0MywgMHg1ODYwMDAwMSwgMHgyNDYzMDA0MCwKKzB4NjQxMDJhLCAweDU0NDAwMDAxLCAweDYwMjAyMSwgMHhhZjQ0MDBmYywKKzB4OGY0MjAwZmMsIDB4MjYyMTAyYSwgMHgxMDQwMDAxNiwgMHgyNDAzMDAwMSwKKzB4MTAwMDAwMWEsIDB4MzA2MjAwZmYsIDB4OGZhYzAwOGMsIDB4MTAxMDQwLAorMHg0YzEwMjEsIDB4OTQ0NzAwMTgsIDB4MTAxMDgwLCAweDRjMTAyMSwKKzB4YWZiZTAwMTAsIDB4OGM0MjAwMDgsIDB4M2MwNDAwMDEsIDB4MjQ4NDY4ZGMsCisweDNjMDUwMDA3LCAweDhjNDMwMDA0LCAweDhjNDIwMDAwLCAweDM0YTU1NTAwLAorMHgyMDAzMDIxLCAweGMwMDJiM2IsIDB4YWZhMzAwMTQsIDB4MTAwMDAwMzksCisweDAsIDB4OGY0MjAzMzQsIDB4MTgyMSwgMHgyNDQyMDAwMSwKKzB4YWY0MjAzMzQsIDB4OGY0MjAzMzQsIDB4MzA2MjAwZmYsIDB4MTA0MGZmMDYsCisweDgwMjEsIDB4OGY0MzAwMDgsIDB4MjQwMmZiZmYsIDB4MTI2MDAwMmQsCisweDYyNTAyNCwgMHgzYzBiNDAwMCwgMHgyMmI0MDI1LCAweDhmYjEwMDhjLAorMHgyNjY5ZmZmZiwgMHgyMjA5MDIxLCAweDhlNDIwMDA4LCAweDk2MjcwMDE4LAorMHg4YzQ0MDAwMCwgMHg4YzQ1MDAwNCwgMHg1NjA5MDAwNCwgMHgyNDBiMDAwMSwKKzB4MjQwYzAwMDIsIDB4MTAwMDAwMDIsIDB4YWZhYzAwMTAsIDB4YWZhYjAwMTAsCisweDE2MDAwMDA0LCAweGFmYTgwMDE0LCAweDhmNDIwMDA4LCAweDEwMDAwMDAyLAorMHhhZmEyMDAxOCwgMHhhZmFhMDAxOCwgMHg4ZjQyMDEwYywgMHgzYzAzMDIxLAorMHhhZmE4MDA5OCwgMHhhZmE5MDA5YywgMHg0MGY4MDksIDB4YWZhYTAwYTAsCisweDhmYTgwMDk4LCAweDhmYTkwMDljLCAweDhmYWEwMGEwLCAweDEwNDBmZmMyLAorMHgzYzAyMDAxZiwgMHg5NjIzMDAxOCwgMHgzNDQyZmZmZiwgMHgzYzNmMDIxLAorMHg1ZTEwMmIsIDB4MTA0MDAwMDMsIDB4MjYzMTAwMDIsIDB4OGY0MjAxNDgsCisweDNjMmYwMjMsIDB4MjYxMDAwMDEsIDB4MjEzMTAyYiwgMHgxNDQwZmZkYSwKKzB4MjY1MjAwMDQsIDB4OGZiMDAwNjQsIDB4MTAwMDAwMWEsIDB4MCwKKzB4OTZhMzAwMGEsIDB4OGZiMDAwNjQsIDB4NzAxMDJiLCAweDU0NDAwMDAxLAorMHg2MDgwMjEsIDB4OGVhNDAwMDAsIDB4OGVhNTAwMDQsIDB4OGZhYjAwNWMsCisweDI0MGMwMDAyLCAweGFmYWMwMDEwLCAweDkzNDMwNWM0LCAweGIxNzAwLAorMHgxMDYwMDAwMywgMHgyMjIzMDI1LCAweDNjMDIwODAwLCAweGMyMzAyNSwKKzB4YWZhNjAwMTQsIDB4OGY0MjAwMDgsIDB4YWZhMjAwMTgsIDB4OGY0MjAxMGMsCisweDNjMDMwMjEsIDB4NDBmODA5LCAweDIwMDM4MjEsIDB4MTA0MGZlY2IsCisweDNjMDUwMDA3LCAweDk3YWMwMDc2LCAweDExODAwMDA3LCAweDk2YTMwMDBlLAorMHg5MzQyMDVjNCwgMHgxNDQwMDAwNCwgMHgwLCAweDk3YWIwMDdlLAorMHg2YzE4MjUsIDB4YTZhYjAwMTYsIDB4OGZhYzAwNmMsIDB4M2MwMmZmZmYsCisweDE4MjEwMjQsIDB4MTA0MDAwMDMsIDB4YzE0MDIsIDB4MzQ2MzA0MDAsCisweGE2YTIwMDE0LCAweGE2YjAwMDBhLCAweDhmYWIwMDY0LCAweDU2MGIwMDA2LAorMHgzZDBmMDIxLCAweDM0NjIwMDA0LCAweGFmYTAwMDY0LCAweGE2YTIwMDBlLAorMHgxMDAwMDAwZCwgMHhhMzQwMDVjNCwgMHg4ZmFjMDA2NCwgMHgzYzAyMDAxZiwKKzB4MzQ0MmZmZmYsIDB4NWUxMDJiLCAweDE5MDYwMjMsIDB4YWZhYzAwNjQsCisweGE2YTMwMDBlLCAweDI0MGIwMDAxLCAweDEwNDAwMDAzLCAweGEzNGIwNWM0LAorMHg4ZjQyMDE0OCwgMHgzYzJmMDIzLCAweDhmYWIwMDU0LCAweDhmYWMwMDRjLAorMHhhZDhiMDAwMCwgMHg4ZmFjMDA2NCwgMHgxNTgwZmViYSwgMHgwLAorMHg4ZmFiMDA2NCwgMHgxMTYwMDAxYiwgMHgwLCAweDkzNDIwNWM0LAorMHgxMDQwMDAwNiwgMHgwLCAweGFmNWUwMGM0LCAweGFmNGIwMGMwLAorMHg4ZmFjMDA2YywgMHgxMDAwMDAwZSwgMHhhZjRjMDBjOCwgMHg5N2FiMDA3NiwKKzB4MTE2MDAwMGIsIDB4MzQwMzgxMDAsIDB4OGZhMjAwMjAsIDB4OGM0NjAwMGMsCisweGE0NDMwMDBjLCAweDk3YWMwMDdlLCAweDhjNDQwMDA0LCAweDhjNDUwMDA4LAorMHhhNDRjMDAwZSwgMHhhYzQ0MDAwMCwgMHhhYzQ1MDAwNCwgMHhhYzQ2MDAwOCwKKzB4OGY0MjAzNGMsIDB4MjQ0MjAwMDEsIDB4YWY0MjAzNGMsIDB4MTAwMDAwMTAsCisweDhmNDIwMzRjLCAweDhmYWIwMDZjLCAweDMxNjRmZmZmLCAweDI0ODRmZmZjLAorMHg4MDE4MjEsIDB4OGY0NDAyNTAsIDB4OGY0NTAyNTQsIDB4OGY0NjAxMTgsCisweDEwMjEsIDB4YTMyODIxLCAweGEzMzgyYiwgMHg4MjIwMjEsCisweDg3MjAyMSwgMHhhZjQ0MDI1MCwgMHhjMGY4MDksIDB4YWY0NTAyNTQsCisweDhmYmYwMGMwLCAweDhmYmUwMGJjLCAweDhmYjUwMGI4LCAweDhmYjMwMGI0LAorMHg4ZmIyMDBiMCwgMHg4ZmIxMDBhYywgMHg4ZmIwMDBhOCwgMHgzZTAwMDA4LAorMHgyN2JkMDBjOCwgMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsCisweGFmYmYwMDI0LCAweGFmYjAwMDIwLCAweDhmNDMwMDRjLCAweDhmNDIwMDQ4LAorMHgxMDYyMDAzNCwgMHgwLCAweDhmNDMwMDQ4LCAweDhmNDIwMDRjLAorMHg2MjIwMjMsIDB4NDgyMDAwMSwgMHgyNDg0MDIwMCwgMHg4ZjQzMDA1NCwKKzB4OGY0MjAwNGMsIDB4NDMxMDJiLCAweDE0NDAwMDA0LCAweDI0MDIwMjAwLAorMHg4ZjQzMDA0YywgMHgxMDAwMDAwNSwgMHg0MzEwMjMsIDB4OGY0MjAwNTQsCisweDhmNDMwMDRjLCAweDQzMTAyMywgMHgyNDQyZmZmZiwgMHg0MDUwMjEsCisweDhhMTAyYSwgMHg1NDQwMDAwMSwgMHg4MDUwMjEsIDB4OGY0OTAwNGMsCisweDhmNDgwMDRjLCAweDhmNDQwMTg4LCAweDhmNDUwMThjLCAweDhmNDYwMDRjLAorMHgyNDA3MTAwMCwgMHhhZmE3MDAxMCwgMHg4NDE0MCwgMHgxMDAxODIxLAorMHgxMmE0ODIxLCAweDMxMzAwMWZmLCAweGFmYjAwMDE0LCAweDhmNDcwMDE0LAorMHgxMDIxLCAweDYzMTQwLCAweGFmYTcwMDE4LCAweGEzMjgyMSwKKzB4YTMzODJiLCAweDgyMjAyMSwgMHg4NzIwMjEsIDB4MzQwMmVjYzAsCisweGMyMzAyMSwgMHg4ZjQyMDEwOCwgMHgyZTYzMDIxLCAweDQwZjgwOSwKKzB4YTM5NDAsIDB4NTQ0MDAwMDEsIDB4YWY1MDAwNGMsIDB4OGY0MzAwNGMsCisweDhmNDIwMDQ4LCAweDE0NjIwMDE4LCAweDAsIDB4OGY0MjAwMDAsCisweDEwNDAwMDA3LCAweDAsIDB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsCisweDEwNDBmZmZkLCAweDAsIDB4MTAwMDAwMDUsIDB4MCwKKzB4YWY4MDAwNDgsIDB4OGY4MjAwNDgsIDB4MTA0MGZmZmQsIDB4MCwKKzB4OGY4MjAwNjAsIDB4MjQwM2ZkZmYsIDB4NDMxMDI0LCAweGFmODIwMDYwLAorMHg4ZjQyMDAwMCwgMHgxMDQwMDAwMywgMHgwLCAweDEwMDAwMDAyLAorMHhhZjgwMDA0YywgMHhhZjgwMDA0OCwgMHg4ZmJmMDAyNCwgMHg4ZmIwMDAyMCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzZTAwMDA4LCAweDAsCisweDI3YmRmZmQ4LCAweGFmYmYwMDI0LCAweGFmYjAwMDIwLCAweDhmNDMwMDVjLAorMHg4ZjQyMDA1OCwgMHgxMDYyMDA0OSwgMHgwLCAweDhmNDMwMDU4LAorMHg4ZjQyMDA1YywgMHg2MjIwMjMsIDB4NDgyMDAwMSwgMHgyNDg0MDEwMCwKKzB4OGY0MzAwNjQsIDB4OGY0MjAwNWMsIDB4NDMxMDJiLCAweDE0NDAwMDA0LAorMHgyNDAyMDEwMCwgMHg4ZjQzMDA1YywgMHgxMDAwMDAwNSwgMHg0MzEwMjMsCisweDhmNDIwMDY0LCAweDhmNDMwMDVjLCAweDQzMTAyMywgMHgyNDQyZmZmZiwKKzB4NDAzODIxLCAweDg3MTAyYSwgMHg1NDQwMDAwMSwgMHg4MDM4MjEsCisweDhmNDIwMDVjLCAweDQ3MTAyMSwgMHgzMDUwMDBmZiwgMHgzMmMyMTAwMCwKKzB4MTA0MDAwMTUsIDB4MjQwODIwMDAsIDB4OGY0OTAwNWMsIDB4OGY0NDAxOTAsCisweDhmNDUwMTk0LCAweDhmNDYwMDVjLCAweDczOTgwLCAweGFmYTgwMDEwLAorMHhhZmIwMDAxNCwgMHg4ZjQ4MDAxNCwgMHg5NDk4MCwgMHgxMjAxODIxLAorMHgxMDIxLCAweGEzMjgyMSwgMHhhMzQ4MmIsIDB4ODIyMDIxLAorMHg4OTIwMjEsIDB4NjMxODAsIDB4YWZhODAwMTgsIDB4OGY0MjAxMDgsCisweDEwMDAwMDE0LCAweDI0YzYwY2MwLCAweDhmNDkwMDVjLCAweDhmNDQwMTkwLAorMHg4ZjQ1MDE5NCwgMHg4ZjQ2MDA1YywgMHg3Mzk0MCwgMHhhZmE4MDAxMCwKKzB4YWZiMDAwMTQsIDB4OGY0ODAwMTQsIDB4OTQ5NDAsIDB4MTIwMTgyMSwKKzB4MTAyMSwgMHhhMzI4MjEsIDB4YTM0ODJiLCAweDgyMjAyMSwKKzB4ODkyMDIxLCAweDYzMTQwLCAweGFmYTgwMDE4LCAweDhmNDIwMTA4LAorMHgyNGM2NGNjMCwgMHg0MGY4MDksIDB4MmU2MzAyMSwgMHg1NDQwMDAwMSwKKzB4YWY1MDAwNWMsIDB4OGY0MzAwNWMsIDB4OGY0MjAwNTgsIDB4MTQ2MjAwMTgsCisweDAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDcsIDB4MCwKKzB4YWY4MDAwNGMsIDB4OGY4MjAwNGMsIDB4MTA0MGZmZmQsIDB4MCwKKzB4MTAwMDAwMDUsIDB4MCwgMHhhZjgwMDA0OCwgMHg4ZjgyMDA0OCwKKzB4MTA0MGZmZmQsIDB4MCwgMHg4ZjgyMDA2MCwgMHgyNDAzZmVmZiwKKzB4NDMxMDI0LCAweGFmODIwMDYwLCAweDhmNDIwMDAwLCAweDEwNDAwMDAzLAorMHgwLCAweDEwMDAwMDAyLCAweGFmODAwMDRjLCAweGFmODAwMDQ4LAorMHg4ZmJmMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LCAweDI3YmQwMDI4LAorMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjQsCisweGFmYjAwMDIwLCAweDhmNDMwMDZjLCAweDhmNDIwMDY4LCAweDEwNjIwMDMzLAorMHgwLCAweDhmNDMwMDY4LCAweDhmNDIwMDZjLCAweDYyMjAyMywKKzB4NDgyMDAwMSwgMHgyNDg0MDQwMCwgMHg4ZjQzMDA3NCwgMHg4ZjQyMDA2YywKKzB4NDMxMDJiLCAweDE0NDAwMDA0LCAweDI0MDIwNDAwLCAweDhmNDMwMDZjLAorMHgxMDAwMDAwNSwgMHg0MzEwMjMsIDB4OGY0MjAwNzQsIDB4OGY0MzAwNmMsCisweDQzMTAyMywgMHgyNDQyZmZmZiwgMHg0MDUwMjEsIDB4OGExMDJhLAorMHg1NDQwMDAwMSwgMHg4MDUwMjEsIDB4OGY0OTAwNmMsIDB4OGY0ODAwNmMsCisweDhmNDQwMTk4LCAweDhmNDUwMTljLCAweDhmNDYwMDZjLCAweDI0MDc0MDAwLAorMHhhZmE3MDAxMCwgMHg4NDE0MCwgMHgxMDAxODIxLCAweDEyYTQ4MjEsCisweDMxMzAwM2ZmLCAweGFmYjAwMDE0LCAweDhmNDcwMDE0LCAweDEwMjEsCisweDYzMTQwLCAweDI0YzY2Y2MwLCAweGFmYTcwMDE4LCAweGEzMjgyMSwKKzB4YTMzODJiLCAweDgyMjAyMSwgMHg4NzIwMjEsIDB4OGY0MjAxMDgsCisweDJlNjMwMjEsIDB4NDBmODA5LCAweGEzOTQwLCAweDU0NDAwMDAxLAorMHhhZjUwMDA2YywgMHg4ZjQzMDA2YywgMHg4ZjQyMDA2OCwgMHgxNDYyMDAxOCwKKzB4MCwgMHg4ZjQyMDAwMCwgMHgxMDQwMDAwNywgMHgwLAorMHhhZjgwMDA0YywgMHg4ZjgyMDA0YywgMHgxMDQwZmZmZCwgMHgwLAorMHgxMDAwMDAwNSwgMHgwLCAweGFmODAwMDQ4LCAweDhmODIwMDQ4LAorMHgxMDQwZmZmZCwgMHgwLCAweDhmODIwMDYwLCAweDI0MDNmN2ZmLAorMHg0MzEwMjQsIDB4YWY4MjAwNjAsIDB4OGY0MjAwMDAsIDB4MTA0MDAwMDMsCisweDAsIDB4MTAwMDAwMDIsIDB4YWY4MDAwNGMsIDB4YWY4MDAwNDgsCisweDhmYmYwMDI0LCAweDhmYjAwMDIwLCAweDNlMDAwMDgsIDB4MjdiZDAwMjgsCisweDNlMDAwMDgsIDB4MCwgMHg4ZjQyMDBmYywgMHgzYzAzMDAwMSwKKzB4OGY0NDAwZjgsIDB4MzQ2MzMwYzgsIDB4MjQ0MjAwMDEsIDB4YWY0MjAwZmMsCisweDhmODUwMTI4LCAweDJlMzEwMjEsIDB4NTQ4MjAwMDQsIDB4MjQ4MjAwMDgsCisweDNjMDIwMDAxLCAweDM0NDIyZWM4LCAweDJlMjEwMjEsIDB4NDAxODIxLAorMHhhZjQzMDBmOCwgMHhhYzYwMDAwMCwgMHg4ZjQyMDBmNCwgMHgxNDYyMDAwNCwKKzB4M2MwMjAwMDEsIDB4MjRhMjAwMjAsIDB4MTAwMDAwMGYsIDB4YWY4MjAxMjgsCisweDhmNDMwMGY4LCAweDM0NDIzMGM4LCAweDJlMjEwMjEsIDB4NTQ2MjAwMDQsCisweDI0NjIwMDA4LCAweDNjMDIwMDAxLCAweDM0NDIyZWM4LCAweDJlMjEwMjEsCisweDQwMTgyMSwgMHg4YzYyMDAwNCwgMHgyMTE0MCwgMHhhMjEwMjEsCisweGFmODIwMTI4LCAweGFjNjAwMDAwLCAweDhjYTMwMDE4LCAweDMwNjIwMDcwLAorMHgxMDQwMDAyZCwgMHgzMDYyMDAyMCwgMHgxMDQwMDAwNCwgMHgzYzAyMDAxMCwKKzB4MmMyMTAyNCwgMHgxMDQwMDAwZCwgMHgwLCAweDMwNjIwMDQwLAorMHgxMDQwMDAwNCwgMHgzYzAyMDAyMCwgMHgyYzIxMDI0LCAweDEwNDAwMDA3LAorMHgwLCAweDMwNjIwMDEwLCAweDEwNDAwMDFmLCAweDNjMDIwMDQwLAorMHgyYzIxMDI0LCAweDE0NDAwMDFjLCAweDAsIDB4OGY4MjAwNDAsCisweDMwNDIwMDAxLCAweDE0NDAwMDA4LCAweDIwMjEsIDB4OGMwMzAxMDQsCisweDI0MDIwMDAxLCAweDUwNjIwMDA1LCAweDI0MDQwMDAxLCAweDhjMDIwMjY0LAorMHgxMDQwMDAwMywgMHg4MDEwMjEsIDB4MjQwNDAwMDEsIDB4ODAxMDIxLAorMHgxMDQwMDAwNiwgMHgwLCAweDhmNDIwMzBjLCAweDI0NDIwMDAxLAorMHhhZjQyMDMwYywgMHgxMDAwMDAwOCwgMHg4ZjQyMDMwYywgMHg4ZjgyMDA0NCwKKzB4MzQ0MjAwMDQsIDB4YWY4MjAwNDQsIDB4OGY0MjAzMDgsIDB4MjQ0MjAwMDEsCisweGFmNDIwMzA4LCAweDhmNDIwMzA4LCAweDNlMDAwMDgsIDB4MCwKKzB4M2UwMDAwOCwgMHgwLCAweDI3YmRmZjk4LCAweGFmYmYwMDYwLAorMHhhZmJlMDA1YywgMHhhZmI1MDA1OCwgMHhhZmIzMDA1NCwgMHhhZmIyMDA1MCwKKzB4YWZiMTAwNGMsIDB4YWZiMDAwNDgsIDB4OGY0MjAwZmMsIDB4MjQ0MjAwMDEsCisweGFmNDIwMGZjLCAweDhmODgwMTI4LCAweDI1MDIwMDIwLCAweGFmODIwMTI4LAorMHg4ZDAzMDAxOCwgMHgzMDYyMDA3MCwgMHgxMDQwMDAyZSwgMHgzMDYyMDAyMCwKKzB4MTA0MDAwMDQsIDB4M2MwMjAwMTAsIDB4MmMyMTAyNCwgMHgxMDQwMDAwZCwKKzB4MCwgMHgzMDYyMDA0MCwgMHgxMDQwMDAwNCwgMHgzYzAyMDAyMCwKKzB4MmMyMTAyNCwgMHgxMDQwMDAwNywgMHgwLCAweDMwNjIwMDEwLAorMHgxMDQwMDFhOSwgMHgzYzAyMDA0MCwgMHgyYzIxMDI0LCAweDE0NDAwMWE2LAorMHgwLCAweDhmODIwMDQwLCAweDMwNDIwMDAxLCAweDE0NDAwMDA4LAorMHgyMDIxLCAweDhjMDMwMTA0LCAweDI0MDIwMDAxLCAweDUwNjIwMDA1LAorMHgyNDA0MDAwMSwgMHg4YzAyMDI2NCwgMHgxMDQwMDAwMywgMHg4MDEwMjEsCisweDI0MDQwMDAxLCAweDgwMTAyMSwgMHgxMDQwMDAwNiwgMHgwLAorMHg4ZjQyMDMwYywgMHgyNDQyMDAwMSwgMHhhZjQyMDMwYywgMHgxMDAwMDE5MiwKKzB4OGY0MjAzMGMsIDB4OGY4MjAwNDQsIDB4MzQ0MjAwMDQsIDB4YWY4MjAwNDQsCisweDhmNDIwMzA4LCAweDI0NDIwMDAxLCAweGFmNDIwMzA4LCAweDEwMDAwMThhLAorMHg4ZjQyMDMwOCwgMHgzMDYyMDAwMiwgMHgxMDQwMDE0YiwgMHgzYzAyMDgwMCwKKzB4OGQxZTAwMWMsIDB4MWU1NzAyLCAweGFmYWEwMDM0LCAweDk1MGEwMDE2LAorMHgzYzIyMDI0LCAweGFmYWEwMDI0LCAweDhmYWEwMDM0LCAweDI0MDIwMDAxLAorMHgxNTQyMDAwNiwgMHgzM2RlZmZmZiwgMHgxZTExNDAsIDB4MzQwM2VjYzAsCisweDQzMTAyMSwgMHgxMDAwMDAxMCwgMHgyZTJhODIxLCAweDI0MDIwMDAyLAorMHgxNTQyMDAwNSwgMHgyNDAyMDAwMywgMHgxZTExNDAsIDB4MjQ0MjZjYzAsCisweDEwMDAwMDA5LCAweDJlMmE4MjEsIDB4MTU0MjAwMDUsIDB4MWUxMTgwLAorMHgxZTExNDAsIDB4MjQ0MjRjYzAsIDB4MTAwMDAwMDMsIDB4MmUyYTgyMSwKKzB4NTcxMDIxLCAweDI0NTUwY2UwLCAweDk2YTIwMDBlLCAweDMwNGFmZmZjLAorMHgzMDQyMDQwMCwgMHgxMDQwMDAwMywgMHhhZmFhMDAyYywgMHgxMDAwMDBlMSwKKzB4ODgyMSwgMHgxMDgwMDAwNCwgMHg4ODIxLCAweDk3YjEwMDI2LAorMHgxMDAwMDBkZCwgMHhhNmIxMDAxMiwgMHg4ZWIzMDAxOCwgMHg5NjZhMDAwYywKKzB4YTdhYTAwM2UsIDB4OTdhNTAwM2UsIDB4MmNhMzA1ZGQsIDB4MzhhMjg4NzAsCisweDJjNDIwMDAxLCAweDYyMTgyNSwgMHgxMDYwMDAxNSwgMHgyMDIxLAorMHgzMmMyMDgwMCwgMHgxMDQwMDAxNSwgMHgyNDAyMDgwMCwgMHg5NjYzMDAxNCwKKzB4MTQ2MjAwMTIsIDB4MzQwMmFhYWEsIDB4OTY2MzAwMGUsIDB4MTQ2MjAwMDcsCisweDI4MjEsIDB4OTY2MzAwMTAsIDB4MjQwMjAzMDAsIDB4MTQ2MjAwMDQsCisweGEwMTAyMSwgMHg5NjYyMDAxMiwgMHgyYzQ1MDAwMSwgMHhhMDEwMjEsCisweDU0NDAwMDA2LCAweDI0MDQwMDE2LCAweDEwMDAwMDA0LCAweDAsCisweDI0MDIwODAwLCAweDUwYTIwMDAxLCAweDI0MDQwMDBlLCAweDEwODAwMGI5LAorMHgyNjQ5MDIxLCAweDkyNDIwMDAwLCAweDMwNDIwMDBmLCAweDI4MDgwLAorMHgzMmMyMDEwMCwgMHgxMDQwMDAyMCwgMHgyNTAxODIxLCAweDNjMDIwMDIwLAorMHg0MzEwMmIsIDB4MTQ0MDAwMGUsIDB4MjQwMjAyMSwgMHgyODIxLAorMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHhhMjI4MjEsIDB4ODMxMDJiLAorMHgxNDQwZmZmYiwgMHgzMGEyZmZmZiwgMHg1MWMwMiwgMHg2MjI4MjEsCisweDUxYzAyLCAweDMwYTJmZmZmLCAweDEwMDAwMDA5LCAweDYyMjgyMSwKKzB4OGY0NzAxNDgsIDB4OGY0MjAxMTAsIDB4MTAyODQyLCAweDNjMDYwMDIwLAorMHg0MGY4MDksIDB4YWZhODAwNDAsIDB4MzA0NWZmZmYsIDB4OGZhODAwNDAsCisweDUwYTAwMDAxLCAweDM0MDVmZmZmLCAweDhmYWEwMDJjLCAweDM1NGEwMDAyLAorMHgxMDAwMDAwMiwgMHhhZmFhMDAyYywgMHgyODIxLCAweDMyYzIwMDgwLAorMHgxMDQwMDA5MCwgMHhhNmE1MDAxMCwgMHgyNjQzMDAwOSwgMHgzYzAyMDAxZiwKKzB4MzQ0MmZmZmYsIDB4NDMxMDJiLCAweDEwNDAwMDAzLCAweDAsCisweDhmNDIwMTQ4LCAweDYyMTgyMywgMHg5MDY2MDAwMCwgMHgzMGMyMDBmZiwKKzB4Mzg0MzAwMDYsIDB4MmM2MzAwMDEsIDB4Mzg0MjAwMTEsIDB4MmM0MjAwMDEsCisweDYyMTgyNSwgMHgxMDYwMDA3ZiwgMHgyNDAyMDgwMCwgMHg4ODIxLAorMHg5N2EzMDAzZSwgMHgxNDYyMDAwZiwgMHgyNjAyMDIxLCAweDk2NzEwMDAwLAorMHg5NjYyMDAwMiwgMHg5NjYzMDAwNCwgMHg5NjY0MDAwNiwgMHgyMjI4ODIxLAorMHgyMjM4ODIxLCAweDIyNDg4MjEsIDB4OTY2MjAwMDgsIDB4OTY2MzAwMGEsCisweDk2NjQwMDBjLCAweDIyMjg4MjEsIDB4MjIzODgyMSwgMHgxMDAwMDAwNywKKzB4MjI0ODgyMSwgMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHgyMjI4ODIxLAorMHg5MjEwMmIsIDB4MTQ0MGZmZmIsIDB4MCwgMHgxMTFjMDIsCisweDMyMjJmZmZmLCAweDYyODgyMSwgMHgxMTFjMDIsIDB4MzIyMmZmZmYsCisweDYyODgyMSwgMHgzMmMyMDIwMCwgMHgxMDQwMDAwMywgMHgyNjQ0MDAwNiwKKzB4MTAwMDAwM2UsIDB4ODAyMSwgMHgzYzA1MDAxZiwgMHgzNGE1ZmZmZiwKKzB4YTQxMDJiLCAweDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsCisweDgyMjAyMywgMHg5NDgyMDAwMCwgMHgzMDQyMWZmZiwgMHgxMDQwMDAwNCwKKzB4MjY0NDAwMGMsIDB4OTY0MjAwMDIsIDB4MTAwMDAwMzAsIDB4NTA4MDIzLAorMHg5NjQyMDAwMiwgMHgyNjQzMDAxNCwgMHg1MDgwMjMsIDB4M2MwMjAwMjAsCisweDQzMTAyYiwgMHgxNDQwMDAwYSwgMHhkMDgwMjEsIDB4OTY0MjAwMGMsCisweDIwMjgwMjEsIDB4OTY0MjAwMGUsIDB4OTY0MzAwMTAsIDB4OTY0NDAwMTIsCisweDIwMjgwMjEsIDB4MjAzODAyMSwgMHgxMDAwMDAyMCwgMHgyMDQ4MDIxLAorMHhhNDEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgMHg4ZjQyMDE0OCwKKzB4ODIyMDIzLCAweDk0ODIwMDAwLCAweDI0ODQwMDAyLCAweDIwMjgwMjEsCisweGE0MTAyYiwgMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LAorMHg4MjIwMjMsIDB4OTQ4MjAwMDAsIDB4MjQ4NDAwMDIsIDB4MjAyODAyMSwKKzB4YTQxMDJiLCAweDEwNDAwMDAzLCAweDAsIDB4OGY0MjAxNDgsCisweDgyMjAyMywgMHg5NDgyMDAwMCwgMHgyNDg0MDAwMiwgMHgyMDI4MDIxLAorMHhhNDEwMmIsIDB4MTA0MDAwMDMsIDB4MCwgMHg4ZjQyMDE0OCwKKzB4ODIyMDIzLCAweDk0ODIwMDAwLCAweDIwMjgwMjEsIDB4M2MwMjAxMDAsCisweDJjMjEwMjQsIDB4MTA0MDAwMGUsIDB4MCwgMHg4ZmFhMDAyYywKKzB4MzE0MjAwMDQsIDB4MTA0MDAwMGEsIDB4MCwgMHg5NTA0MDAwZSwKKzB4MjY0MjAyMSwgMHhjMDAzZWVjLCAweDI0ODRmZmZjLCAweDMwNDJmZmZmLAorMHgyMjI4ODIxLCAweDExMWMwMiwgMHgzMjIyZmZmZiwgMHg2Mjg4MjEsCisweDhmYWEwMDI0LCAweDE1MTg4MjMsIDB4MTExNDAyLCAweDIyMjg4MjEsCisweDIzMDg4MjEsIDB4MTExNDAyLCAweDIyMjg4MjEsIDB4MzIzMWZmZmYsCisweDUyMjAwMDAxLCAweDM0MTFmZmZmLCAweDhmYWEwMDJjLCAweDM1NGEwMDAxLAorMHhhZmFhMDAyYywgMHhhNmIxMDAxMiwgMHg5N2FhMDAyZSwgMHhhNmFhMDAwZSwKKzB4OGZhYTAwMmMsIDB4MzE0MjAwMDQsIDB4MTA0MDAwMDIsIDB4MjQwOTEwMDAsCisweDM0MDk4MDAwLCAweDhmNDgwMDQ0LCAweDhmNDQwMWEwLCAweDhmNDUwMWE0LAorMHhhZmE5MDAxMCwgMHg4ZjQ5MDA0NCwgMHg4NDE0MCwgMHgxMDAxODIxLAorMHhhZmE5MDAxNCwgMHg4ZjQ4MDAwYywgMHgyYTAzMDIxLCAweDI0MDcwMDIwLAorMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgxMDIxLCAweGEzMjgyMSwKKzB4YTM0ODJiLCAweDgyMjAyMSwgMHgxMDBmODA5LCAweDg5MjAyMSwKKzB4MTQ0MDAwMGIsIDB4MCwgMHg4ZjgyMDEyOCwgMHgzYzA0MDAwMSwKKzB4MjQ4NDY5MTQsIDB4YWZiZTAwMTQsIDB4YWZhMjAwMTAsIDB4OGY4NjAxMjQsCisweDhmODcwMTIwLCAweDNjMDUwMDA3LCAweGMwMDJiM2IsIDB4MzRhNTk5MjAsCisweDhmNDIwMzY4LCAweDI0NDJmZmZmLCAweGFmNDIwMzY4LCAweDhmNDIwMDQ0LAorMHg4ZjQzMDA4OCwgMHgyNDQyMDAwMSwgMHg0MzEwMjQsIDB4YWY0MjAwNDQsCisweDhmYWEwMDM0LCAweDhmNDQwMzY4LCAweDI0MDIwMDAxLCAweDE1NDIwMDA2LAorMHgyNDAyMDAwMiwgMHg4ZjQyMDM1YywgMHgyNDQyZmZmZiwgMHhhZjQyMDM1YywKKzB4MTAwMDAwNDksIDB4OGY0MjAzNWMsIDB4MTU0MjAwMDYsIDB4MCwKKzB4OGY0MjAzNjQsIDB4MjQ0MmZmZmYsIDB4YWY0MjAzNjQsIDB4MTAwMDAwNDIsCisweDhmNDIwMzY0LCAweDhmNDIwMzYwLCAweDI0NDJmZmZmLCAweGFmNDIwMzYwLAorMHgxMDAwMDAzZCwgMHg4ZjQyMDM2MCwgMHgzMDYyMTAwMCwgMHgxMDQwMDAwNSwKKzB4MzA2MjgwMDAsIDB4OGY0MjAwNzgsIDB4MjQ0MjAwMDEsIDB4MTAwMDAwMzYsCisweGFmNDIwMDc4LCAweDEwNDAwMDM0LCAweDAsIDB4OGY0MjAwNzgsCisweDI0NDIwMDAxLCAweGFmNDIwMDc4LCAweDhjMDMwMjQwLCAweDQzMTAyYiwKKzB4MTQ0MDAwMmQsIDB4MjQwNzAwMDgsIDB4OGY0NDAxNjgsIDB4OGY0NTAxNmMsCisweDhmNDMwMDQ0LCAweDhmNDgwMDBjLCAweDhmODYwMTIwLCAweDI0MDIwMDQwLAorMHhhZmEyMDAxMCwgMHhhZmEzMDAxNCwgMHhhZmE4MDAxOCwgMHg4ZjQyMDEwYywKKzB4NDBmODA5LCAweDI0YzYwMDFjLCAweDE0NDAwMDExLCAweDI0MDIwMDAxLAorMHgzYzAxMDAwMSwgMHgzNzA4MjEsIDB4YTAyMjQwZjIsIDB4OGY4MjAxMjQsCisweGFmYTIwMDEwLCAweDhmODIwMTI4LCAweDNjMDQwMDAxLCAweDI0ODQ2ODhjLAorMHhhZmEyMDAxNCwgMHg4ZjQ2MDA0NCwgMHg4Zjg3MDEyMCwgMHgzYzA1MDAwOSwKKzB4YzAwMmIzYiwgMHgzNGE1MTMwMCwgMHgxMDAwMDAwYiwgMHgwLAorMHg4ZjQyMDMwNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDMwNCwgMHg4ZjQyMDMwNCwKKzB4OGY0MjAwNDQsIDB4YWY0MjAwN2MsIDB4M2MwMTAwMDEsIDB4MzcwODIxLAorMHhhMDIwNDBmMiwgMHhhZjQwMDA3OCwgMHg4ZjQyMDMxOCwgMHgyNDQyMDAwMSwKKzB4YWY0MjAzMTgsIDB4OGY0MjAzMTgsIDB4OGZiZjAwNjAsIDB4OGZiZTAwNWMsCisweDhmYjUwMDU4LCAweDhmYjMwMDU0LCAweDhmYjIwMDUwLCAweDhmYjEwMDRjLAorMHg4ZmIwMDA0OCwgMHgzZTAwMDA4LCAweDI3YmQwMDY4LCAweDNlMDAwMDgsCisweDAsIDB4MCwgMHgwLCAweDhmNDIwMTNjLAorMHhhZjgyMDBjMCwgMHg4ZjQyMDEzYywgMHhhZjgyMDBjNCwgMHg4ZjQyMDEzYywKKzB4YWY4MjAwYzgsIDB4OGY0MjAxMzgsIDB4YWY4MjAwZDAsIDB4OGY0MjAxMzgsCisweGFmODIwMGQ0LCAweDhmNDIwMTM4LCAweDNlMDAwMDgsIDB4YWY4MjAwZDgsCisweDI3YmRmZmUwLCAweDI3ODQwMjA4LCAweDI0MDUwMjAwLCAweGFmYmYwMDE4LAorMHhjMDAyYmJmLCAweDI0MDYwMDA4LCAweDhjMDIwMjA0LCAweGMwMDQwMTIsCisweGFmODIwMjEwLCAweDNjMDIwMDAxLCAweDhjNDI2ZDk0LCAweDMwNDIwMDAyLAorMHgxMDQwMDAwZSwgMHgyMDIxLCAweDhjMDYwMjQ4LCAweDI0MDIwMDAyLAorMHgzYzAxMDAwMSwgMHhhYzIyNmQ5OCwgMHhjMDA1MTA0LCAweDI0MDUwMDAyLAorMHgyMDIxLCAweDhjMDYwMjQ4LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLAorMHhhYzIyNmQ5OCwgMHgxMDAwMDAxMSwgMHgyNDA1MDAwMSwgMHg4YzA2MDI0OCwKKzB4MjQwMjAwMDQsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTgsIDB4YzAwNTEwNCwKKzB4MjQwNTAwMDQsIDB4M2MwMjAwMDEsIDB4OGM0MjZkOTQsIDB4MzA0MjAwMDEsCisweDEwNDAwMDA4LCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk4LAorMHgyMDIxLCAweDI0MDUwMDAxLCAweDNjMDY2MDFiLCAweGMwMDUxMDQsCisweDAsIDB4M2MwNDAwMDEsIDB4MjQ4NDY5ZDAsIDB4OGY0MjAxNTAsCisweDhmNDMwMTU0LCAweDNjMDUwMDA4LCAweDhmNDYwMTU4LCAweDIxNjQwLAorMHgzMTk0MCwgMHgzNDYzMDQwMywgMHg0MzEwMjUsIDB4NjMzYzAsCisweDQ2MTAyNSwgMHhhZjgyMDIxYywgMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwKKzB4OGY4NjAyMWMsIDB4MzRhNTAyMDAsIDB4YzAwMmIzYiwgMHgzODIxLAorMHgzYzAxMDAwMSwgMHhhYzIwNmQ5MCwgMHgzYzAxMDAwMSwgMHhhYzIwNmRhOCwKKzB4OGZiZjAwMTgsIDB4M2UwMDAwOCwgMHgyN2JkMDAyMCwgMHgyN2JkZmZlMCwKKzB4M2MwNTAwMDgsIDB4MzRhNTAzMDAsIDB4YWZiZjAwMTgsIDB4YWZhMDAwMTAsCisweGFmYTAwMDE0LCAweDhmODYwMjAwLCAweDNjMDQwMDAxLCAweDI0ODQ2OWRjLAorMHhjMDAyYjNiLCAweDM4MjEsIDB4OGY0MjA0MTAsIDB4MjQ0MjAwMDEsCisweGFmNDIwNDEwLCAweDhmNDIwNDEwLCAweDhmYmYwMDE4LCAweDNlMDAwMDgsCisweDI3YmQwMDIwLCAweDI3YmRmZmQ4LCAweGFmYmYwMDIwLCAweGFmYjEwMDFjLAorMHhhZmIwMDAxOCwgMHg4ZjQyMDNhNCwgMHgyNDQyMDAwMSwgMHhhZjQyMDNhNCwKKzB4OGY0MjAzYTQsIDB4OGY5MDAyMjAsIDB4OGY4MjAwZTAsIDB4YWZhMjAwMTAsCisweDhmODIwMGU0LCAweGFmYTIwMDE0LCAweDhmODYwMGM0LCAweDhmODcwMGM4LAorMHgzYzA0MDAwMSwgMHgyNDg0NjllOCwgMHhjMDAyYjNiLCAweDIwMDI4MjEsCisweDNjMDQ0MDAwLCAweDIwNDEwMjQsIDB4NTA0MDAwYjQsIDB4M2MwNDAxMDAsCisweDhmNDIwM2JjLCAweDI0NDIwMDAxLCAweGFmNDIwM2JjLCAweDhmNDIwM2JjLAorMHg4Zjg3MDBjNCwgMHg4ZjgzMDBjOCwgMHg4ZjQyMDE0OCwgMHg2NzE4MjMsCisweDQzMTAyYiwgMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LAorMHg2MjE4MjEsIDB4MTA2MDAwMDUsIDB4MCwgMHg4ZjQyMDE0YywKKzB4NDMxMDJiLCAweDEwNDAwMDBiLCAweDAsIDB4OGY4MjAwZTAsCisweDhmNDMwMTI0LCAweGFmNDIwMTFjLCAweGFmNDMwMTE0LCAweDhmODIwMjIwLAorMHgzYzAzMDhmZiwgMHgzNDYzZmZmYiwgMHg0MzEwMjQsIDB4MTAwMDAwY2UsCisweDQ0MTAyNSwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwgMHgzNDYzZmZmZiwKKzB4NDMxMDI0LCAweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMGUwLAorMHg4ZjQzMDEyNCwgMHhhZjQyMDExYywgMHhhZjQzMDExNCwgMHg4Zjg2MDBjOCwKKzB4OGY4NDAxMjAsIDB4OGY4MzAxMjQsIDB4MTAwMDAwMDUsIDB4MjgyMSwKKzB4MTQ2MjAwMDIsIDB4MjQ2MjAwMjAsIDB4Mjc2MjQ4MDAsIDB4NDAxODIxLAorMHgxMDY0MDAwYywgMHgzMGEyMDBmZiwgMHg4YzYyMDAxOCwgMHgzMDQyMDAwMywKKzB4MTA0MGZmZjcsIDB4Mjc2MjRmZTAsIDB4OGY0MjAzZDAsIDB4MjQwNTAwMDEsCisweDI0NDIwMDAxLCAweGFmNDIwM2QwLCAweDhmNDIwM2QwLCAweDhjNjYwMDA4LAorMHgzMGEyMDBmZiwgMHgxNDQwMDA1OCwgMHgwLCAweDkzNDIwNWM0LAorMHgxNDQwMDA1NSwgMHgwLCAweDhmODcwMGM0LCAweDhmODgwMGUwLAorMHg4Zjg0MDBlNCwgMHgyNDAyZmZmOCwgMHgxMDI0MDI0LCAweDEwNDEwMjMsCisweDIxOGMzLCAweDQ2MjAwMDEsIDB4MjQ2MzAyMDAsIDB4MTA2MDAwMDUsCisweDI0MDIwMDAxLCAweDEwNjIwMDA5LCAweDAsIDB4MTAwMDAwMWYsCisweDAsIDB4OGY0MjAzYzAsIDB4ZTAzMDIxLCAweDI0NDIwMDAxLAorMHhhZjQyMDNjMCwgMHgxMDAwMDA0MCwgMHg4ZjQyMDNjMCwgMHg4ZjQyMDNjNCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzYzQsIDB4OGM4NjAwMDAsIDB4OGY0MjAxNDgsCisweDhmNDMwM2M0LCAweGU2MTgyMywgMHg0MzEwMmIsIDB4MTA0MDAwMDQsCisweDJjNjIyMzNmLCAweDhmNDIwMTQ4LCAweDYyMTgyMSwgMHgyYzYyMjMzZiwKKzB4MTQ0MDAwMzEsIDB4MCwgMHg4ZjQyMDIwYywgMHgyNDQyMDAwMSwKKzB4YWY0MjAyMGMsIDB4OGY0MjAyMGMsIDB4ZTAzMDIxLCAweDI0ODIwMDA4LAorMHhhZjgyMDBlNCwgMHgxMDAwMDAyOCwgMHhhZjgyMDBlOCwgMHg4ZjQyMDNjOCwKKzB4MjQ0MjAwMDEsIDB4YWY0MjAzYzgsIDB4OGY0MjAzYzgsIDB4OGM4NTAwMDAsCisweDhmNDIwMTQ4LCAweGE3MTgyMywgMHg0MzEwMmIsIDB4MTA0MDAwMDMsCisweDAsIDB4OGY0MjAxNDgsIDB4NjIxODIxLCAweDhmNDIwMTRjLAorMHg0MzEwMmIsIDB4NTQ0MDAwMGEsIDB4YTAzMDIxLCAweDhmNDIwMjBjLAorMHgyNDQyMDAwMSwgMHhhZjQyMDIwYywgMHg4ZjQyMDIwYywgMHgyNDgyMDAwOCwKKzB4YWY4MjAwZTQsIDB4OGY4NDAwZTQsIDB4MTQ4OGZmZWMsIDB4YWY4NDAwZTgsCisweDE0ODgwMDBkLCAweDI3NjIzMDAwLCAweDE0ODIwMDAyLCAweDI0ODJmZmY4LAorMHgyNzYyM2ZmOCwgMHg5NDQzMDAwNiwgMHgzYzAyMDAxZiwgMHgzNDQyZmZmZiwKKzB4YzMzMDIxLCAweDQ2MTAyYiwgMHgxMDQwMDAwMywgMHgwLAorMHg4ZjQyMDE0OCwgMHhjMjMwMjMsIDB4YWY4NjAwYzgsIDB4OGY4MzAwYzQsCisweDhmNDIwMTQ4LCAweGMzMTgyMywgMHg0MzEwMmIsIDB4MTA0MDAwMDMsCisweDAsIDB4OGY0MjAxNDgsIDB4NjIxODIxLCAweDEwNjAwMDA1LAorMHgwLCAweDhmNDIwMTRjLCAweDQzMTAyYiwgMHg1MDQwMDAwOCwKKzB4M2MwMmZkZmYsIDB4OGY4MjAyMjAsIDB4M2MwMzA4ZmYsIDB4MzQ2M2ZmZmIsCisweDQzMTAyNCwgMHgzYzAzNDAwMCwgMHgxMDAwMDAzZiwgMHg0MzEwMjUsCisweDhmNDMwM2NjLCAweDM0NDJmZmZmLCAweDI4MmEwMjQsIDB4MjQ2MzAwMDEsCisweGFmNDMwM2NjLCAweDEwMDAwMDM5LCAweDhmNDIwM2NjLCAweDIwNDEwMjQsCisweDEwNDAwMDBlLCAweDNjMTEwMjAwLCAweDhmNDIwM2E4LCAweDI0NDIwMDAxLAorMHhhZjQyMDNhOCwgMHg4ZjQyMDNhOCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDhmZiwKKzB4MzQ2M2ZmZmYsIDB4NDMxMDI0LCAweDQ0MTAyNSwgMHhjMDAzZGFmLAorMHhhZjgyMDIyMCwgMHgxMDAwMDAyOSwgMHgwLCAweDIxMTEwMjQsCisweDUwNDAwMDA4LCAweDNjMTEwNDAwLCAweDhmNDIwM2FjLCAweDI0NDIwMDAxLAorMHhhZjQyMDNhYywgMHhjMDAzZGFmLCAweDhmNDIwM2FjLCAweDEwMDAwMDE5LAorMHgwLCAweDIxMTEwMjQsIDB4MTA0MDAwMWMsIDB4MCwKKzB4OGY4MzAyMjQsIDB4MjQwMjE0MDIsIDB4MTQ2MjAwMDksIDB4M2MwNTAwMDgsCisweDNjMDQwMDAxLCAweDI0ODQ2OWY0LCAweGFmYTAwMDEwLCAweGFmYTAwMDE0LAorMHg4Zjg2MDIyNCwgMHgzNGE1MDUwMCwgMHhjMDAyYjNiLCAweDM4MjEsCisweDhmNDIwM2IwLCAweDI0NDIwMDAxLCAweGFmNDIwM2IwLCAweDhmNDIwM2IwLAorMHg4ZjgyMDIyMCwgMHgyMDAyMDIxLCAweDM0NDIwMDAyLCAweGMwMDRlOWMsCisweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLAorMHg0MzEwMjQsIDB4NTExMDI1LCAweGFmODIwMjIwLCAweDhmYmYwMDIwLAorMHg4ZmIxMDAxYywgMHg4ZmIwMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDI4LAorMHgzZTAwMDA4LCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYTgsCisweDI3YmRmZmIwLCAweGFmYmYwMDQ4LCAweGFmYmUwMDQ0LCAweGFmYjUwMDQwLAorMHhhZmIzMDAzYywgMHhhZmIyMDAzOCwgMHhhZmIxMDAzNCwgMHgxMDQwMDAwZiwKKzB4YWZiMDAwMzAsIDB4M2MwNDAwMDEsIDB4MjQ4NDZhMDAsIDB4M2MwNTAwMDgsCisweGFmYTAwMDEwLCAweGFmYTAwMDE0LCAweDhmODYwMjIwLCAweDM0YTUwNjAwLAorMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIwNmRhOCwgMHgzYzAxMDAwMSwKKzB4YWMyMjZkOWMsIDB4YzAwMmIzYiwgMHgzODIxLCAweDNjMDM3ZmZmLAorMHg4YzAyMDI2OCwgMHgzNDYzZmZmZiwgMHgzYzA0ZmRmZiwgMHg0MzEwMjQsCisweGFjMDIwMjY4LCAweDhmNDIwMDA0LCAweDM0ODRmZmZmLCAweDMwNDIwMDAyLAorMHgxMDQwMDA5MiwgMHgyODRhMDI0LCAweDNjMDQwNjAwLCAweDM0ODQyMDAwLAorMHg4ZjQyMDAwNCwgMHgyODIxLCAweDI0MDNmZmZkLCAweDQzMTAyNCwKKzB4YWY0MjAwMDQsIDB4YWZhNDAwMjAsIDB4OGY1ZTAwMTgsIDB4MjdhYTAwMjAsCisweDI0MDIwMGZmLCAweDEzYzIwMDAyLCAweGFmYWEwMDJjLCAweDI3YzUwMDAxLAorMHg4YzAyMDIyOCwgMHhhMDkwMjEsIDB4MTY0MjAwMGUsIDB4MWUzOGMwLAorMHg4ZjQyMDMzYywgMHgyNDQyMDAwMSwgMHhhZjQyMDMzYywgMHg4ZjQyMDMzYywKKzB4OGMwMjAyMjgsIDB4M2MwNDAwMDEsIDB4MjQ4NDY5OTgsIDB4M2MwNTAwMDksCisweGFmYTAwMDE0LCAweGFmYTIwMDEwLCAweDhmYTYwMDIwLCAweDEwMDAwMDZkLAorMHgzNGE1MDUwMCwgMHhmNzEwMjEsIDB4OGZhMzAwMjAsIDB4OGZhNDAwMjQsCisweGFjNDMwNGMwLCAweGFjNDQwNGM0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LAorMHgyNDcwMDNlOCwgMHgyMDIxMDIzLCAweDJjNDIwM2U5LCAweDEwNDAwMDFiLAorMHg5ODIxLCAweGUwODgyMSwgMHgyNjM1MDRjMCwgMHg4ZjQ0MDE3OCwKKzB4OGY0NTAxN2MsIDB4MjIwMTgyMSwgMHgyNDBhMDAwNCwgMHhhZmFhMDAxMCwKKzB4YWZiMjAwMTQsIDB4OGY0ODAwMGMsIDB4MTAyMSwgMHgyZjUzMDIxLAorMHhhZmE4MDAxOCwgMHg4ZjQ4MDEwYywgMHgyNDA3MDAwOCwgMHhhMzI4MjEsCisweGEzNDgyYiwgMHg4MjIwMjEsIDB4MTAwZjgwOSwgMHg4OTIwMjEsCisweDU0NDAwMDA2LCAweDI0MTMwMDAxLCAweDhmODIwMDU0LCAweDIwMjEwMjMsCisweDJjNDIwM2U5LCAweDE0NDBmZmU5LCAweDAsIDB4MzI2MjAwZmYsCisweDU0NDAwMDE3LCAweGFmNTIwMDE4LCAweDhmNDIwMzc4LCAweDI0NDIwMDAxLAorMHhhZjQyMDM3OCwgMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwgMHg4ZmFhMDAyYywKKzB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsIDB4MjQ4NDY5YTQsCisweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNDYwMDAwLCAweDEwMDAwMDM1LAorMHgzNGE1MDYwMCwgMHg4ZjQyMDMwOCwgMHgyNDEzMDAwMSwgMHgyNDQyMDAwMSwKKzB4YWY0MjAzMDgsIDB4OGY0MjAzMDgsIDB4MTAwMDAwMWUsIDB4MzI2MjAwZmYsCisweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDI0NzAwM2U4LCAweDIwMjEwMjMsCisweDJjNDIwM2U5LCAweDEwNDAwMDE2LCAweDk4MjEsIDB4M2MxNTAwMjAsCisweDI0MTEwMDEwLCAweDhmNDIwMDBjLCAweDhmNDQwMTYwLCAweDhmNDUwMTY0LAorMHg4Zjg2MDEyMCwgMHhhZmIxMDAxMCwgMHhhZmIyMDAxNCwgMHg1NTEwMjUsCisweGFmYTIwMDE4LCAweDhmNDIwMTBjLCAweDI0MDcwMDA4LCAweDQwZjgwOSwKKzB4MjRjNjAwMWMsIDB4MTQ0MGZmZTMsIDB4MCwgMHg4ZjgyMDA1NCwKKzB4MjAyMTAyMywgMHgyYzQyMDNlOSwgMHgxNDQwZmZlZSwgMHgwLAorMHgzMjYyMDBmZiwgMHgxNDQwMDAxMSwgMHgwLCAweDhmNDIwMzc4LAorMHgyNDQyMDAwMSwgMHhhZjQyMDM3OCwgMHg4ZjQyMDM3OCwgMHg4ZjgyMDEyMCwKKzB4OGZhYTAwMmMsIDB4YWZhMjAwMTAsIDB4OGY4MjAxMjQsIDB4M2MwNDAwMDEsCisweDI0ODQ2OWFjLCAweDNjMDUwMDA5LCAweGFmYTIwMDE0LCAweDhkNDYwMDAwLAorMHgzNGE1MDcwMCwgMHhjMDAyYjNiLCAweDNjMDM4MjEsIDB4OGY0MjAyZWMsCisweDI0NDIwMDAxLCAweGFmNDIwMmVjLCAweDhmNDIwMmVjLCAweDhmYmYwMDQ4LAorMHg4ZmJlMDA0NCwgMHg4ZmI1MDA0MCwgMHg4ZmIzMDAzYywgMHg4ZmIyMDAzOCwKKzB4OGZiMTAwMzQsIDB4OGZiMDAwMzAsIDB4M2UwMDAwOCwgMHgyN2JkMDA1MCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZkYTgsIDB4MjdiZGZmZTAsIDB4MTQ0MDAwMGQsCisweGFmYmYwMDE4LCAweDNjMDQwMDAxLCAweDI0ODQ2YTBjLCAweDNjMDUwMDA4LAorMHhhZmEwMDAxMCwgMHhhZmEwMDAxNCwgMHg4Zjg2MDIyMCwgMHgzNGE1MDcwMCwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZkYTgsIDB4YzAwMmIzYiwKKzB4MzgyMSwgMHgzYzAyMDAwNCwgMHgyYzIxMDI0LCAweDEwNDAwMDA3LAorMHgwLCAweDhmODIwMjIwLCAweDNjMDMwOGZmLCAweDM0NjNmZmZmLAorMHg0MzEwMjQsIDB4MzQ0MjAwMDgsIDB4YWY4MjAyMjAsIDB4M2MwNTAwMDEsCisweDhjYTU2ZDk4LCAweDI0MDIwMDAxLCAweDE0YTIwMDA3LCAweDIwMjEsCisweGMwMDUyOWIsIDB4MjQwNTAwMDEsIDB4YWMwMjAyNmMsIDB4OGMwMzAyNmMsCisweDEwMDAwMDA2LCAweDNjMDIwMDA3LCAweGMwMDUyOWIsIDB4MjAyMSwKKzB4YWMwMjAyNjgsIDB4OGMwMzAyNjgsIDB4M2MwMjAwMDcsIDB4NjIxODI0LAorMHgzYzAyMDAwMiwgMHg1MDYyMDAwZCwgMHgzYzAyMDVmNSwgMHg0MzEwMmIsCisweDE0NDAwMDA2LCAweDNjMDIwMDA0LCAweDNjMDIwMDAxLCAweDEwNjIwMDA5LAorMHgzYzAyMDA5OCwgMHgxMDAwMDAwYiwgMHgwLCAweDE0NjIwMDA5LAorMHgzYzAyM2I5YSwgMHgxMDAwMDAwNCwgMHgzNDQyY2EwMCwgMHgxMDAwMDAwMiwKKzB4MzQ0MmUxMDAsIDB4MzQ0Mjk2ODAsIDB4YWY0MjAxZmMsIDB4OGY0MjAxZmMsCisweGFlZTIwMDY0LCAweDhmYmYwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjAsCisweDAsIDB4MCwgMHgwLCAweDg2MTAyYiwKKzB4NTA0MDAwMDEsIDB4ODcyMDIzLCAweGM0MTAyMywgMHgyNDg0MywKKzB4MTI1MTAyYiwgMHgxMDQwMDAxYiwgMHg5MTA0MCwgMHg4MjQwMjEsCisweDg4MTAyYiwgMHgxMDQwMDAwNywgMHgxODIxLCAweDk0ODIwMDAwLAorMHgyNDg0MDAwMiwgMHg2MjE4MjEsIDB4ODgxMDJiLCAweDE0NDBmZmZiLAorMHgwLCAweDYwMjAyMSwgMHhjNzMwMjMsIDB4YTkxMDIzLAorMHgyMTA0MCwgMHhjMjI4MjEsIDB4YzUxMDJiLCAweDEwNDAwMDA3LAorMHgxODIxLCAweDk0YzIwMDAwLCAweDI0YzYwMDAyLCAweDYyMTgyMSwKKzB4YzUxMDJiLCAweDE0NDBmZmZiLCAweDAsIDB4MTAwMDAwMGQsCisweDgzMjAyMSwgMHg1MTA0MCwgMHg4MjI4MjEsIDB4ODUxMDJiLAorMHgxMDQwMDAwNywgMHgxODIxLCAweDk0ODIwMDAwLCAweDI0ODQwMDAyLAorMHg2MjE4MjEsIDB4ODUxMDJiLCAweDE0NDBmZmZiLCAweDAsCisweDYwMjAyMSwgMHg0MWMwMiwgMHgzMDgyZmZmZiwgMHg2MjIwMjEsCisweDQxYzAyLCAweDMwODJmZmZmLCAweDYyMjAyMSwgMHgzZTAwMDA4LAorMHgzMDgyZmZmZiwgMHgzZTAwMDA4LCAweDAsIDB4ODAyODIxLAorMHgzMGEyMDAwMSwgMHgxMDQwMDAyYiwgMHgzYzAzMDAxZiwgMHgzNDYzZmZmZiwKKzB4MjRhMjAwMDQsIDB4NjIxMDJiLCAweDU0NDAwMDA3LCAweDY1MTAyYiwKKzB4OTBhMjAwMDEsIDB4OTBhNDAwMDMsIDB4OTBhMzAwMDAsIDB4OTBhNTAwMDIsCisweDEwMDAwMDJhLCAweDQ0MTAyMSwgMHgxMDQwMDAwMywgMHgwLAorMHg4ZjQyMDE0OCwgMHhhMjI4MjMsIDB4OTBhNDAwMDAsIDB4MjRhNTAwMDEsCisweDY1MTAyYiwgMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LAorMHhhMjI4MjMsIDB4OTBhMjAwMDAsIDB4MjRhNTAwMDEsIDB4MjEyMDAsCisweDgyMjAyMSwgMHg2NTEwMmIsIDB4MTA0MDAwMDMsIDB4MCwKKzB4OGY0MjAxNDgsIDB4YTIyODIzLCAweDkwYTIwMDAwLCAweDI0YTUwMDAxLAorMHg4MjIwMjEsIDB4NjUxMDJiLCAweDEwNDAwMDAzLCAweDAsCisweDhmNDIwMTQ4LCAweGEyMjgyMywgMHg5MGEyMDAwMCwgMHgxMDAwMDAyZCwKKzB4MjEyMDAsIDB4MzQ2M2ZmZmYsIDB4MjRhMjAwMDQsIDB4NjIxMDJiLAorMHg1NDQwMDAwYSwgMHg2NTEwMmIsIDB4OTBhMjAwMDAsIDB4OTBhNDAwMDIsCisweDkwYTMwMDAxLCAweDkwYTUwMDAzLCAweDQ0MTAyMSwgMHgyMTIwMCwKKzB4NjUxODIxLCAweDEwMDAwMDIwLCAweDQzMjAyMSwgMHgxMDQwMDAwMywKKzB4MCwgMHg4ZjQyMDE0OCwgMHhhMjI4MjMsIDB4OTBhMjAwMDAsCisweDI0YTUwMDAxLCAweDIyMjAwLCAweDY1MTAyYiwgMHgxMDQwMDAwMywKKzB4MCwgMHg4ZjQyMDE0OCwgMHhhMjI4MjMsIDB4OTBhMjAwMDAsCisweDI0YTUwMDAxLCAweDgyMjAyMSwgMHg2NTEwMmIsIDB4MTA0MDAwMDMsCisweDAsIDB4OGY0MjAxNDgsIDB4YTIyODIzLCAweDkwYTIwMDAwLAorMHgyNGE1MDAwMSwgMHgyMTIwMCwgMHg4MjIwMjEsIDB4NjUxMDJiLAorMHgxMDQwMDAwMywgMHgwLCAweDhmNDIwMTQ4LCAweGEyMjgyMywKKzB4OTBhMjAwMDAsIDB4ODIyMDIxLCAweDQxYzAyLCAweDMwODJmZmZmLAorMHg2MjIwMjEsIDB4NDFjMDIsIDB4MzA4MmZmZmYsIDB4NjIyMDIxLAorMHgzZTAwMDA4LCAweDMwODJmZmZmLCAweDAsIDB4OGY4MjAyMjAsCisweDM0NDIwMDAyLCAweGFmODIwMjIwLCAweDNjMDIwMDAyLCAweDhjNDI4ZmY4LAorMHgzMDQyNDAwMCwgMHgxMDQwMDA1NCwgMHgyNDA0MDAwMSwgMHg4ZjgyMDIwMCwKKzB4MjQwNjdmZmYsIDB4OGY4MzAyMDAsIDB4MzA0NTAwMDIsIDB4MjQwMmZmZmQsCisweDYyMTgyNCwgMHhhZjgzMDIwMCwgMHhhZjg0MDIwNCwgMHg4ZjgzMDA1NCwKKzB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsCisweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLAorMHg4ZjgyMDIyNCwgMHgxNDQ0MDA0ZCwgMHg0MjA0MCwgMHhjNDEwMmIsCisweDEwNDBmZmYxLCAweDAsIDB4OGY4MjAyMDAsIDB4NDUxMDI1LAorMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwgMHgzNDQyODAwMCwgMHhhZjgyMDIyMCwKKzB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsCisweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywKKzB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsCisweDE0NDAwMDBmLCAweDAsIDB4OGY4MjAyMjAsIDB4M2MwM2ZmZmYsCisweDM0NjM3ZmZmLCAweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHg4ZjgzMDA1NCwKKzB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsCisweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLAorMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsIDB4MTQ0MDAwMGQsCisweDAsIDB4OGY4MjAyMjAsIDB4MzQ0MjgwMDAsIDB4YWY4MjAyMjAsCisweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDEwMDAwMDAyLCAweDI0NjMwMDAxLAorMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsIDB4MTQ0MGZmZmMsCisweDAsIDB4OGY4MjAyMjAsIDB4M2MwMzAwMDQsIDB4NDMxMDI0LAorMHgxMDQwMDAxYiwgMHgxMDIxLCAweDhmODMwMjIwLCAweDI0MDIwMDAxLAorMHgxMDAwMDAxNSwgMHgzYzA0ZjcwMCwgMHg4ZjgyMDIyMCwgMHgzYzA0ZjcwMCwKKzB4NDQxMDI1LCAweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDI0MDNmZmZkLAorMHg0MzEwMjQsIDB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4M2MwMzAzMDAsCisweDQzMTAyNCwgMHgxNDQwMDAwMywgMHgwLCAweDEwMDAwMDA4LAorMHgxMDIxLCAweDhmODIwMjIwLCAweDM0NDIwMDAyLCAweGFmODIwMjIwLAorMHg4ZjgzMDIyMCwgMHgyNDAyMDAwMSwgMHg2NDE4MjUsIDB4YWY4MzAyMjAsCisweDNlMDAwMDgsIDB4MCwgMHgyMDIxLCAweDNjMDUwMTAwLAorMHgyNDAyMDAwMSwgMHhhZjgwMDIxYywgMHhhZjgyMDIwMCwgMHhhZjgyMDIyMCwKKzB4Mjc2MjUwMDAsIDB4YWY4MjAwYzAsIDB4Mjc2MjUwMDAsIDB4YWY4MjAwYzQsCisweDI3NjI1MDAwLCAweGFmODIwMGM4LCAweDI3NjI1MDAwLCAweGFmODIwMGQwLAorMHgyNzYyNTAwMCwgMHhhZjgyMDBkNCwgMHgyNzYyNTAwMCwgMHhhZjgyMDBkOCwKKzB4Mjc2MjMwMDAsIDB4YWY4MjAwZTAsIDB4Mjc2MjMwMDAsIDB4YWY4MjAwZTQsCisweDI3NjIzMDAwLCAweGFmODIwMGU4LCAweDI3NjIyODAwLCAweGFmODIwMGYwLAorMHgyNzYyMjgwMCwgMHhhZjgyMDBmNCwgMHgyNzYyMjgwMCwgMHhhZjgyMDBmOCwKKzB4NDE4YzAsIDB4MjQ4NDAwMDEsIDB4MzYzMTAyMSwgMHhhYzQ1MzAwNCwKKzB4MzYzMTAyMSwgMHhhYzQwMzAwMCwgMHgyODgyMDIwMCwgMHgxNDQwZmZmOSwKKzB4NDE4YzAsIDB4MjAyMSwgMHg0MThjMCwgMHgyNDg0MDAwMSwKKzB4MzYzMTAyMSwgMHhhYzQwMjgwNCwgMHgzNjMxMDIxLCAweGFjNDAyODAwLAorMHgyODgyMDEwMCwgMHgxNDQwZmZmOSwgMHg0MThjMCwgMHhhZjgwMDIzYywKKzB4MjQwMzAwODAsIDB4MjQwNDAxMDAsIDB4YWM2MDAwMDAsIDB4MjQ2MzAwMDQsCisweDY0MTAyYiwgMHg1NDQwZmZmZCwgMHhhYzYwMDAwMCwgMHg4ZjgzMDA0MCwKKzB4M2MwMmYwMDAsIDB4NjIxODI0LCAweDNjMDI1MDAwLCAweDEwNjIwMDBjLAorMHg0MzEwMmIsIDB4MTQ0MDAwMDYsIDB4M2MwMjYwMDAsIDB4M2MwMjQwMDAsCisweDEwNjIwMDA4LCAweDI0MDIwODAwLCAweDEwMDAwMDA4LCAweDAsCisweDEwNjIwMDA0LCAweDI0MDIwODAwLCAweDEwMDAwMDA0LCAweDAsCisweDI0MDIwNzAwLCAweDNjMDEwMDAxLCAweGFjMjI2ZGFjLCAweDNlMDAwMDgsCisweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYmMsIDB4MjdiZGZmZDAsCisweGFmYmYwMDJjLCAweGFmYjIwMDI4LCAweGFmYjEwMDI0LCAweGFmYjAwMDIwLAorMHgzYzAxMDAwMSwgMHgxMDQwMDAwNSwgMHhhYzIwNmQ5NCwgMHhjMDA0ZDllLAorMHgwLCAweDNjMDEwMDAxLCAweGFjMjA2ZGJjLCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwKKzB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLCAweDAsCisweGMwMDRkYjksIDB4MCwgMHgyNDA0MDAwMSwgMHgyODIxLAorMHgyN2E2MDAxOCwgMHgzNDAyODAwMCwgMHhjMDA0NWJlLCAweGE3YTIwMDE4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLAorMHgyNDA0MDAwMSwgMHgzYzA2MDAwMSwgMHgyNGM2NmYyNCwgMHhjMDA0NTdjLAorMHgyNDA1MDAwMiwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwKKzB4MjQ2MzAwNjQsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDY1LAorMHgxNDQwZmZmYywgMHgyNDA0MDAwMSwgMHgyNDA1MDAwMywgMHgzYzEwMDAwMSwKKzB4MjYxMDZmMjYsIDB4YzAwNDU3YywgMHgyMDAzMDIxLCAweDk3YTYwMDE4LAorMHgzYzA3MDAwMSwgMHg5NGU3NmYyNCwgMHgzYzA0MDAwMSwgMHgyNDg0NmFlMCwKKzB4YWZhMDAwMTQsIDB4OTYwMjAwMDAsIDB4M2MwNTAwMGQsIDB4MzRhNTAxMDAsCisweGMwMDJiM2IsIDB4YWZhMjAwMTAsIDB4OTdhMjAwMTgsIDB4MTA0MDAwNGQsCisweDI0MDM2MDQwLCAweDk2MDIwMDAwLCAweDMwNDJmZmYwLCAweDE0NDMwMDBjLAorMHgyNDAyMDAyMCwgMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgxNDYyMDAwYiwKKzB4MjQwMjc4MzAsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTQsCisweDI0MDIwMDA1LCAweDNjMDEwMDAxLCAweDEwMDAwMDNmLCAweGFjMjI2ZjM0LAorMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgyNDAyNzgzMCwgMHgxNDYyMDAwYywKKzB4MjQwMzAwMTAsIDB4M2MwMjAwMDEsIDB4OTQ0MjZmMjYsIDB4MzA0MmZmZjAsCisweDE0NDMwMDA3LCAweDI0MDIwMDAzLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk0LAorMHgyNDAyMDAwNiwgMHgzYzAxMDAwMSwgMHgxMDAwMDAyZiwgMHhhYzIyNmYzNCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZkOTQsIDB4M2MwMzAwMDEsIDB4OTQ2MzZmMjQsCisweDM0NDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk0LCAweDI0MDIwMDE1LAorMHgxNDYyMDAwYiwgMHgwLCAweDNjMDIwMDAxLCAweDk0NDI2ZjI2LAorMHgzMDQyZmZmMCwgMHgzODQzZjQyMCwgMHgyYzYzMDAwMSwgMHgzODQyZjQzMCwKKzB4MmM0MjAwMDEsIDB4NjIxODI1LCAweDE0NjAwMDFiLCAweDI0MDIwMDAzLAorMHgzYzAzMDAwMSwgMHg5NDYzNmYyNCwgMHgyNDAyNzgxMCwgMHgxNDYyMDAxNiwKKzB4MjQwMjAwMDIsIDB4M2MwMjAwMDEsIDB4OTQ0MjZmMjYsIDB4MzA0MmZmZjAsCisweDE0NDAwMDExLCAweDI0MDIwMDAyLCAweDEwMDAwMDBmLCAweDI0MDIwMDA0LAorMHgzYzAyMDAwMSwgMHg4YzQyNmQ5NCwgMHgzNDQyMDAwOCwgMHgzYzAxMDAwMSwKKzB4YWMyMjZkOTQsIDB4MTAwMDAwNWUsIDB4MjQwMjAwMDQsIDB4M2MwMjAwMDEsCisweDhjNDI2ZDk0LCAweDM0NDIwMDA0LCAweDNjMDEwMDAxLCAweDEwMDAwMGFmLAorMHhhYzIyNmQ5NCwgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmY0MCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZkOTQsIDB4MzA0MjAwMDIsIDB4MTQ0MDAwYjIsCisweDNjMDlmZmYwLCAweDI0MDIwZTAwLCAweGFmODIwMjM4LCAweDhmODQwMDU0LAorMHg4ZjgyMDA1NCwgMHgyNDAzMDAwOCwgMHgzYzAxMDAwMSwgMHhhYzIzNmQ5OCwKKzB4MTAwMDAwMDIsIDB4MjQ4NDAxZjQsIDB4OGY4MjAwNTQsIDB4ODIxMDIzLAorMHgyYzQyMDFmNSwgMHgxNDQwZmZmYywgMHgzYzAyMDBjOCwgMHgzNDQyMDFmYiwKKzB4YWY4MjAyMzgsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsCisweDI0NjMwMWY0LCAweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDFmNSwKKzB4MTQ0MGZmZmMsIDB4ODAyMSwgMHgyNDEyMDAwMSwgMHgyNDExMDAwOSwKKzB4YzAwNDQ4MiwgMHgwLCAweDNjMDEwMDAxLCAweGFjMzI2ZGI0LAorMHhjMDA0NTQ3LCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYjQsCisweDE0NTFmZmZiLCAweDNjMDIwMGM4LCAweDM0NDIwMWY2LCAweGFmODIwMjM4LAorMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDAwYSwKKzB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDBiLCAweDE0NDBmZmZjLAorMHgwLCAweDhmODIwMjIwLCAweDI0MDQwMDAxLCAweDM0NDIwMDAyLAorMHhhZjgyMDIyMCwgMHg4ZjgzMDIwMCwgMHgyNDA1N2ZmZiwgMHgyNDAyZmZmZCwKKzB4NjIxODI0LCAweGFmODMwMjAwLCAweGFmODQwMjA0LCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwKKzB4NjIxMDIzLCAweDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsCisweDhmODIwMjI0LCAweDE0NDQwMDA1LCAweDM0MDI4MDAwLCAweDQyMDQwLAorMHhhNDEwMmIsIDB4MTA0MGZmZjAsIDB4MzQwMjgwMDAsIDB4MTA4MmZmYTAsCisweDI2MTAwMDAxLCAweDJlMDIwMDE0LCAweDE0NDBmZmNkLCAweDI0MDIwMDA0LAorMHgzYzAxMDAwMSwgMHhhYzIyNmQ5OCwgMHg4MDIxLCAweDI0MTIwMDA5LAorMHgzYzExZmZmZiwgMHgzNjMxM2Y3ZiwgMHhjMDA0NDgyLCAweDAsCisweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZGI0LCAweGMwMDQ1NDcsCisweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYjQsIDB4MTQ1MmZmZmIsCisweDAsIDB4OGY4MjAwNDQsIDB4NTExMDI0LCAweDM0NDI1MDgwLAorMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwKKzB4MjQ2MzAwMGEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDBiLAorMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMDQ0LCAweDUxMTAyNCwKKzB4MzQ0MmYwODAsIDB4YWY4MjAwNDQsIDB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsCisweDEwMDAwMDAyLCAweDI0NjMwMDBhLCAweDhmODIwMDU0LCAweDYyMTAyMywKKzB4MmM0MjAwMGIsIDB4MTQ0MGZmZmMsIDB4MCwgMHg4ZjgyMDIyMCwKKzB4M2MwM2Y3MDAsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAweDhmODMwMDU0LAorMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwgMHgyNDYzMDA2NCwgMHg4ZjgyMDA1NCwKKzB4NjIxMDIzLCAweDJjNDIwMDY1LCAweDE0NDBmZmZjLCAweDAsCisweDhmODIwMjIwLCAweDI0MDQwMDAxLCAweDM0NDIwMDAyLCAweGFmODIwMjIwLAorMHg4ZjgzMDIwMCwgMHgyNDA1N2ZmZiwgMHgyNDAyZmZmZCwgMHg2MjE4MjQsCisweGFmODMwMjAwLCAweGFmODQwMjA0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LAorMHgxMDAwMDAwMiwgMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsCisweDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsIDB4OGY4MjAyMjQsCisweDE0NDQwMDA1LCAweDM0MDI4MDAwLCAweDQyMDQwLCAweGE0MTAyYiwKKzB4MTA0MGZmZjAsIDB4MzQwMjgwMDAsIDB4MTA4MmZmNTAsIDB4MjYxMDAwMDEsCisweDJlMDIwMDY0LCAweDE0NDBmZmIwLCAweDAsIDB4M2MwMjAwMDEsCisweDhjNDI2ZDk0LCAweDMwNDIwMDA0LCAweDE0NDAwMDA3LCAweDNjMDlmZmYwLAorMHg4ZjgyMDA0NCwgMHgzYzAzZmZmZiwgMHgzNDYzM2Y3ZiwgMHg0MzEwMjQsCisweGFmODIwMDQ0LCAweDNjMDlmZmYwLCAweDM1MjliZGMwLCAweDNjMDYwMDAxLAorMHg4Y2M2NmQ5NCwgMHgzYzA0MDAwMSwgMHgyNDg0NmFlMCwgMHgyNDAyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyMjZkOWMsIDB4OGY4MjAwNTQsIDB4M2MwNzAwMDEsCisweDhjZTc2ZjQwLCAweDNjMDMwMDAxLCAweDk0NjM2ZjI0LCAweDNjMDgwMDAxLAorMHg5NTA4NmYyNiwgMHgzYzA1MDAwZCwgMHgzNGE1MDEwMCwgMHgzYzAxMDAwMSwKKzB4YWMyMDZkOTgsIDB4NDkxMDIxLCAweDNjMDEwMDAxLCAweGFjMjI2ZjMwLAorMHhhZmEzMDAxMCwgMHhjMDAyYjNiLCAweGFmYTgwMDE0LCAweDhmYmYwMDJjLAorMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgMHg4ZmIwMDAyMCwgMHgzZTAwMDA4LAorMHgyN2JkMDAzMCwgMHgyN2JkZmZlOCwgMHgzYzA1MDAwMSwgMHg4Y2E1NmQ5OCwKKzB4MjQwNjAwMDQsIDB4MjQwMjAwMDEsIDB4MTRhMjAwMTQsIDB4YWZiZjAwMTAsCisweDNjMDIwMDAyLCAweDhjNDI4ZmZjLCAweDMwNDI4MDAwLCAweDEwNDAwMDA1LAorMHgzYzA0MDAwZiwgMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgxMDAwMDAwNSwKKzB4MzQ4NDQyNDAsIDB4M2MwNDAwMDQsIDB4M2MwMzAwMDEsIDB4OGM2MzZmNDAsCisweDM0ODQ5M2UwLCAweDI0MDIwMDA1LCAweDE0NjIwMDE2LCAweDAsCisweDNjMDQwMDNkLCAweDEwMDAwMDEzLCAweDM0ODQwOTAwLCAweDNjMDIwMDAyLAorMHg4YzQyOGZmOCwgMHgzMDQyODAwMCwgMHgxMDQwMDAwNSwgMHgzYzA0MDAxZSwKKzB4M2MwMzAwMDEsIDB4OGM2MzZmNDAsIDB4MTAwMDAwMDUsIDB4MzQ4NDg0ODAsCisweDNjMDQwMDBmLCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAweDM0ODQ0MjQwLAorMHgyNDAyMDAwNSwgMHgxNDYyMDAwMywgMHgwLCAweDNjMDQwMDdhLAorMHgzNDg0MTIwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYzMCwgMHg4ZjgzMDA1NCwKKzB4NDQxMDIxLCAweDQzMTAyMywgMHg0NDEwMmIsIDB4MTQ0MDAwNGMsCisweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYTAsIDB4MTQ0MDAwNDgsCisweDAsIDB4M2MwMTAwMDEsIDB4MTBjMDAwMjUsIDB4YWMyMDZkYjAsCisweDNjMDkwMDAxLCAweDhkMjk2ZDk0LCAweDI0MDcwMDAxLCAweDNjMDQ0MDAwLAorMHgzYzA4MDAwMiwgMHgyNTA4OGZmYywgMHgyNTBhZmZmYywgMHg1Mjg0MiwKKzB4MTRhMDAwMDIsIDB4MjRjNmZmZmYsIDB4MjQwNTAwMDgsIDB4YTkxMDI0LAorMHgxMDQwMDAxMCwgMHgwLCAweDE0YTcwMDA4LCAweDAsCisweDhkMDIwMDAwLCAweDQ0MTAyNCwgMHgxMDQwMDAwYSwgMHgwLAorMHgzYzAxMDAwMSwgMHgxMDAwMDAwNywgMHhhYzI1NmRiMCwgMHg4ZDQyMDAwMCwKKzB4NDQxMDI0LCAweDEwNDAwMDAzLCAweDAsIDB4M2MwMTAwMDEsCisweGFjMjc2ZGIwLCAweDNjMDIwMDAxLCAweDhjNDI2ZGIwLCAweDYxODJiLAorMHgyYzQyMDAwMSwgMHg0MzEwMjQsIDB4NTQ0MGZmZTUsIDB4NTI4NDIsCisweDhmODIwMDU0LCAweDNjMDMwMDAxLCAweDhjNjM2ZGIwLCAweDNjMDEwMDAxLAorMHhhYzIyNmYzMCwgMHgxMDYwMDAzYiwgMHgyNDAyMDAwNSwgMHgzYzAzMDAwMSwKKzB4OGM2MzZmNDAsIDB4M2MwMTAwMDEsIDB4YWMyNTZkOTgsIDB4MTQ2MjAwMTIsCisweDI0MDIwMDAxLCAweDNjMDIwMDAyLCAweDhjNDI4ZmY4LCAweDNjMDMyMDAwLAorMHgzNDYzNTAwMCwgMHg0MzEwMjQsIDB4MTQ0MDAwMDYsIDB4MjQwMjAwMDEsCisweDNjMDEwMDAxLCAweGFjMjA2ZjFjLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk4LAorMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmUyNCwgMHgzYzAxMDAwMSwKKzB4YWMyMjZkYTQsIDB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOWMsCisweDNjMDIwMDAxLCAweDhjNDI2ZGIwLCAweDEwNDAwMDFlLCAweDAsCisweDNjMDIwMDAxLCAweDhjNDI2ZDljLCAweDEwNDAwMDA4LCAweDI0MDIwMDAxLAorMHgzYzAxMDAwMSwgMHhhYzIwNmQ5YywgMHhhZWUyMDRiOCwgMHgzYzAxMDAwMSwKKzB4YWMyMDZlMWMsIDB4M2MwMTAwMDEsIDB4YWMyMjZkZDQsIDB4OGVlMzA0YjgsCisweDI0MDIwMDA4LCAweDEwNjIwMDA1LCAweDI0MDIwMDAxLCAweGMwMDQyMzksCisweDAsIDB4MTAwMDAwMGIsIDB4MCwgMHgzYzAzMDAwMSwKKzB4OGM2MzZkOTgsIDB4MTA2MjAwMDcsIDB4MjQwMjAwMGUsIDB4M2MwMzAwMDIsCisweDhjNjM4ZjkwLCAweDEwNjIwMDAzLCAweDAsIDB4YzAwNGU5YywKKzB4OGY4NDAyMjAsIDB4OGZiZjAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAxOCwKKzB4MjdiZGZmZTAsIDB4M2MwM2ZkZmYsIDB4M2MwNDAwMDEsIDB4OGM4NDZkOTgsCisweDNjMDIwMDAxLCAweDhjNDI2ZGMwLCAweDM0NjNmZmZmLCAweDI4M2EwMjQsCisweDE0ODIwMDA2LCAweGFmYmYwMDE4LCAweDhlZTMwNGI4LCAweDNjMDIwMDAxLAorMHg4YzQyNmRjNCwgMHgxMDYyMDAwNiwgMHgwLCAweDhlZTIwNGI4LAorMHgzYzAxMDAwMSwgMHhhYzI0NmRjMCwgMHgzYzAxMDAwMSwgMHhhYzIyNmRjNCwKKzB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MjQwMjAwMDIsIDB4MTA2MjAxOWMsCisweDJjNjIwMDAzLCAweDEwNDAwMDA1LCAweDI0MDIwMDAxLCAweDEwNjIwMDBhLAorMHgwLCAweDEwMDAwMjI2LCAweDAsIDB4MjQwMjAwMDQsCisweDEwNjIwMGI2LCAweDI0MDIwMDA4LCAweDEwNjIwMTBhLCAweDI0MDIwMDAxLAorMHgxMDAwMDIxZiwgMHgwLCAweDhlZTIwNGI4LCAweDI0NDNmZmZmLAorMHgyYzYyMDAwOCwgMHgxMDQwMDIxYywgMHgzMTA4MCwgMHgzYzAxMDAwMSwKKzB4MjIwODIxLCAweDhjMjI2YWY4LCAweDQwMDAwOCwgMHgwLAorMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgyNDAyMDAwNSwgMHgxNDYyMDAxMCwKKzB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhNCwgMHgxMDQwMDAwOCwKKzB4MjQwMjAwMDMsIDB4YzAwNDQ4MiwgMHgwLCAweDI0MDIwMDAyLAorMHhhZWUyMDRiOCwgMHgzYzAxMDAwMSwgMHgxMDAwMDAwMiwgMHhhYzIwNmRhNCwKKzB4YWVlMjA0YjgsIDB4M2MwMTAwMDEsIDB4MTAwMDAyMDMsIDB4YWMyMDZkMzAsCisweGMwMDQ0ODIsIDB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhNCwKKzB4M2MwMTAwMDEsIDB4YWMyMDZkMzAsIDB4MTQ0MDAxN2EsIDB4MjQwMjAwMDIsCisweDEwMDAwMTlkLCAweDI0MDIwMDA3LCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLAorMHgyNDAyMDAwNSwgMHgxNDYyMDAwMywgMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwKKzB4YWMyMjZkZDAsIDB4YzAwNDVmZiwgMHgwLCAweDNjMDMwMDAxLAorMHg4YzYzNmRkMCwgMHgxMDAwMDE3NCwgMHgyNDAyMDAxMSwgMHgzYzA1MDAwMSwKKzB4OGNhNTZkOTgsIDB4M2MwNjAwMDIsIDB4OGNjNjhmZmMsIDB4YzAwNTEwNCwKKzB4MjAyMSwgMHgyNDAyMDAwNSwgMHgzYzAxMDAwMSwgMHhhYzIwNmRhNCwKKzB4MTAwMDAxZTEsIDB4YWVlMjA0YjgsIDB4M2MwNDAwMDEsIDB4MjQ4NDZhZWMsCisweDNjMDUwMDBmLCAweDM0YTUwMTAwLCAweDMwMjEsIDB4MzgyMSwKKzB4YWZhMDAwMTAsIDB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHgxMDAwMDFkNiwKKzB4MCwgMHg4ZjgyMDIyMCwgMHgzYzAzMDAwNCwgMHg0MzEwMjQsCisweDE0NDAwMTc1LCAweDI0MDIwMDA3LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLAorMHg4YzQyNmYyOCwgMHgyNDYzZDhmMCwgMHg0MzEwMjMsIDB4MmM0MjI3MTAsCisweDE0NDAwMDAzLCAweDI0MDIwMDAxLCAweDNjMDEwMDAxLCAweGFjMjI2ZDljLAorMHgzYzAyMDAwMiwgMHg4YzQyOGZmYywgMHgzMDQyNTAwMCwgMHgxMDQwMDFjMiwKKzB4MCwgMHg4ZjgyMDIyMCwgMHgzMDQyODAwMCwgMHgxMDQwMDE3ZCwKKzB4MCwgMHgxMDAwMDE3NSwgMHgwLCAweDNjMDUwMDAxLAorMHg4Y2E1NmQ5OCwgMHhjMDA1MjliLCAweDIwMjEsIDB4YzAwNTUxYiwKKzB4MjAyMSwgMHgzYzAzMDAwMiwgMHg4YzYzOGZmNCwgMHg0NjEwMWIwLAorMHgyNDAyMDAwMSwgMHgzYzAyMDAwOCwgMHg2MjEwMjQsIDB4MTA0MDAwMDYsCisweDAsIDB4OGY4MjAyMTQsIDB4M2MwM2ZmZmYsIDB4NDMxMDI0LAorMHgxMDAwMDAwNSwgMHgzNDQyMjUxZiwgMHg4ZjgyMDIxNCwgMHgzYzAzZmZmZiwKKzB4NDMxMDI0LCAweDM0NDIyNDFmLCAweGFmODIwMjE0LCAweDhmODIwMjIwLAorMHgzYzAzMDIwMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwgMHgyNDAyMDAwOCwKKzB4YWVlMjA0YjgsIDB4OGY4MjAyMjAsIDB4MjgzYTAyNSwgMHgzYzAzMDAwNCwKKzB4NDMxMDI0LCAweDE0NDAwMDE2LCAweDAsIDB4M2MwMjAwMDIsCisweDhjNDI4ZmZjLCAweDMwNDI1MDAwLCAweDEwNDAwMDBkLCAweDAsCisweDhmODIwMjIwLCAweDMwNDI4MDAwLCAweDEwNDAwMDA2LCAweDAsCisweDhmODIwMjIwLCAweDNjMDNmZmZmLCAweDM0NjM3ZmZmLCAweDEwMDAwMDAzLAorMHg0MzEwMjQsIDB4OGY4MjAyMjAsIDB4MzQ0MjgwMDAsIDB4YWY4MjAyMjAsCisweDhmODIwMjIwLCAweDNjMDNmNzAwLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwKKzB4M2MwMzAwMDEsIDB4OGM2MzZmNDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMGEsCisweDAsIDB4M2MwMjAwMDEsIDB4OTQ0MjZmMjYsIDB4MjQ0MjlmYmMsCisweDJjNDIwMDA0LCAweDEwNDAwMDA0LCAweDI0MDQwMDE4LCAweDI0MDUwMDAyLAorMHhjMDA0ZGRiLCAweDI0MDYwMDIwLCAweGMwMDNlNmQsIDB4MCwKKzB4M2MwMTAwMDEsIDB4MTAwMDAxNzAsIDB4YWMyMDZlMjAsIDB4OGVlMjA0YjgsCisweDI0NDNmZmZmLCAweDJjNjIwMDA4LCAweDEwNDAwMTZiLCAweDMxMDgwLAorMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjZiMTgsIDB4NDAwMDA4LAorMHgwLCAweGMwMDQ1NDcsIDB4MCwgMHgzYzAzMDAwMSwKKzB4OGM2MzZkYjQsIDB4MTAwMDAwZTgsIDB4MjQwMjAwMDksIDB4M2MwMjAwMDIsCisweDhjNDI4ZmY4LCAweDMwNDI0MDAwLCAweDEwNDAwMDA0LCAweDAsCisweDhmODIwMDQ0LCAweDEwMDAwMDA2LCAweDM0NDJmMDgwLCAweDhmODIwMDQ0LAorMHgzYzAzZmZmZiwgMHgzNDYzM2Y3ZiwgMHg0MzEwMjQsIDB4MzQ0MmEwODAsCisweGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDEwMDAwMGVhLCAweDI0MDIwMDA0LAorMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYyOCwgMHgyNDYzZDhmMCwKKzB4NDMxMDIzLCAweDJjNDIyNzEwLCAweDE0NDAwMTQ3LCAweDI0MDIwMDA1LAorMHgxMDAwMDBkOCwgMHgwLCAweDhmODIwMjIwLCAweDNjMDNmNzAwLAorMHg0MzEwMjUsIDB4YWY4MjAyMjAsIDB4YWY4MDAyMDQsIDB4M2MwMTAwMDIsCisweDEwMDAwMGQ2LCAweGFjMjA4ZmUwLCAweDhmODMwMDU0LCAweDNjMDIwMDAxLAorMHg4YzQyNmYyOCwgMHgyNDYzZmZmNiwgMHg0MzEwMjMsIDB4MmM0MjAwMGEsCisweDE0NDAwMTM1LCAweDI0MDIwMDA3LCAweDEwMDAwMGQ3LCAweDAsCisweGMwMDNmNTAsIDB4MCwgMHgxMDQwMDEyZCwgMHgyNDAyMDAwMSwKKzB4OGY4MjAyMTQsIDB4M2MwM2ZmZmYsIDB4M2MwNDAwMDEsIDB4OGM4NDZmMWMsCisweDQzMTAyNCwgMHgzNDQyMjUxZiwgMHhhZjgyMDIxNCwgMHgyNDAyMDAwOCwKKzB4MTA4MDAwMDUsIDB4YWVlMjA0YjgsIDB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsCisweDEwNDAwMDY0LCAweDI0MDIwMDAxLCAweDhmODIwMjIwLCAweDNjMDMwMDA4LAorMHg0MzEwMjQsIDB4MTA0MDAwNmEsIDB4M2MwMjAyMDAsIDB4MTAwMDAwNzgsCisweDAsIDB4OGVlMjA0YjgsIDB4MjQ0M2ZmZmYsIDB4MmM2MjAwMDcsCisweDEwNDAwMTE1LCAweDMxMDgwLCAweDNjMDEwMDAxLCAweDIyMDgyMSwKKzB4OGMyMjZiMzgsIDB4NDAwMDA4LCAweDAsIDB4YzAwM2RhZiwKKzB4MCwgMHgzYzAxMDAwMSwgMHhhYzIwNmQ5YywgMHhhZjgwMDIwNCwKKzB4M2MwMTAwMDIsIDB4YzAwNDQ4MiwgMHhhYzIwOGZlMCwgMHgyNDAyMDAwMSwKKzB4M2MwMTAwMDEsIDB4YWMyMjZkYjQsIDB4MjQwMjAwMDIsIDB4MTAwMDAxMDIsCisweGFlZTIwNGI4LCAweGMwMDQ1NDcsIDB4MCwgMHgzYzAzMDAwMSwKKzB4OGM2MzZkYjQsIDB4MTAwMDAwODQsIDB4MjQwMjAwMDksIDB4M2MwMjAwMDIsCisweDhjNDI4ZmY4LCAweDMwNDI0MDAwLCAweDEwNDAwMDAzLCAweDNjMDIwMGM4LAorMHgxMDAwMDAwMiwgMHgzNDQyMDFmNiwgMHgzNDQyMDFmZSwgMHhhZjgyMDIzOCwKKzB4OGY4MzAwNTQsIDB4MTAwMDAwOGIsIDB4MjQwMjAwMDQsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI2ZjI4LCAweDI0NjNkOGYwLCAweDQzMTAyMywKKzB4MmM0MjI3MTAsIDB4MTQ0MDAwZTgsIDB4MjQwMjAwMDUsIDB4MTAwMDAwNzksCisweDAsIDB4OGY4MjAyMjAsIDB4M2MwM2Y3MDAsIDB4NDMxMDI1LAorMHhhZjgyMDIyMCwgMHhhZjgwMDIwNCwgMHgzYzAxMDAwMiwgMHgxMDAwMDA3NywKKzB4YWMyMDhmZTAsIDB4OGY4MzAwNTQsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMjgsCisweDI0NjNmZmY2LCAweDQzMTAyMywgMHgyYzQyMDAwYSwgMHgxNDQwMDBkNiwKKzB4MjQwMjAwMDcsIDB4MTAwMDAwNzgsIDB4MCwgMHhjMDAzZjUwLAorMHgwLCAweDEwNDAwMGNlLCAweDI0MDIwMDAxLCAweDhmODIwMjE0LAorMHgzYzAzZmZmZiwgMHgzYzA0MDAwMSwgMHg4Yzg0NmYxYywgMHg0MzEwMjQsCisweDM0NDIyNTFmLCAweGFmODIwMjE0LCAweDI0MDIwMDA4LCAweDEwODAwMDBmLAorMHhhZWUyMDRiOCwgMHgzYzAyMDAwMSwgMHg4YzQyNmU0NCwgMHgxNDQwMDAwYiwKKzB4MCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIyMCwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDIsIDB4YWMyMjhmOTAsIDB4YzAwNGU5YywKKzB4OGY4NDAyMjAsIDB4MTAwMDAwMTYsIDB4MCwgMHg4ZjgyMDIyMCwKKzB4M2MwMzAwMDgsIDB4NDMxMDI0LCAweDE0NDAwMDExLCAweDNjMDIwMjAwLAorMHgyODJhMDI1LCAweDI0MDIwMDBlLCAweDNjMDEwMDAyLCAweGFjMjI4ZjkwLAorMHhjMDA1NTFiLCAweDIwMjEsIDB4OGY4MjAyMjAsIDB4MzQ0MjAwMDIsCisweGMwMDNlNmQsIDB4YWY4MjAyMjAsIDB4M2MwNTAwMDEsIDB4OGNhNTZkOTgsCisweGMwMDUyOWIsIDB4MjAyMSwgMHgxMDAwMDBhMywgMHgwLAorMHgzYzAyMDAwMSwgMHg4YzQyNmU0NCwgMHgxMDQwMDA5ZiwgMHgwLAorMHgzYzAyMDAwMSwgMHg4YzQyNmU0MCwgMHgyNDQyZmZmZiwgMHgzYzAxMDAwMSwKKzB4YWMyMjZlNDAsIDB4MTQ0MDAwOTgsIDB4MjQwMjAwMDIsIDB4M2MwMTAwMDEsCisweGFjMjA2ZTQ0LCAweDNjMDEwMDAxLCAweDEwMDAwMDkzLCAweGFjMjI2ZTQwLAorMHg4ZWUyMDRiOCwgMHgyNDQzZmZmZiwgMHgyYzYyMDAwNywgMHgxMDQwMDA4ZSwKKzB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDhjMjI2YjU4LAorMHg0MDAwMDgsIDB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhNCwKKzB4MTA0MDAwMTgsIDB4MjQwMjAwMDUsIDB4YzAwNDQ4MiwgMHgwLAorMHgyNDAyMDAwMiwgMHhhZWUyMDRiOCwgMHgzYzAxMDAwMSwgMHgxMDAwMDA3ZSwKKzB4YWMyMDZkYTQsIDB4YzAwNDk2MywgMHgwLCAweDNjMDMwMDAxLAorMHg4YzYzNmRkNCwgMHgyNDAyMDAwNiwgMHgxNDYyMDA3NywgMHgyNDAyMDAwMywKKzB4MTAwMDAwNzUsIDB4YWVlMjA0YjgsIDB4M2MwNTAwMDEsIDB4OGNhNTZkOTgsCisweDNjMDYwMDAyLCAweDhjYzY4ZmY4LCAweGMwMDUxMDQsIDB4MjAyMSwKKzB4MjQwMjAwMDUsIDB4MTAwMDAwNmMsIDB4YWVlMjA0YjgsIDB4OGY4MjAyMjAsCisweDNjMDNmNzAwLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHg4ZjgzMDA1NCwKKzB4MjQwMjAwMDYsIDB4YWVlMjA0YjgsIDB4M2MwMTAwMDEsIDB4MTAwMDAwNjIsCisweGFjMjM2ZjI4LCAweDhmODIwMjIwLCAweDNjMDMwMDA0LCAweDQzMTAyNCwKKzB4MTA0MDAwMDMsIDB4MjQwMjAwMDcsIDB4MTAwMDAwNWIsIDB4YWVlMjA0YjgsCisweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI2ZjI4LCAweDI0NjNkOGYwLAorMHg0MzEwMjMsIDB4MmM0MjI3MTAsIDB4MTQ0MDAwMDMsIDB4MjQwMjAwMDEsCisweDNjMDEwMDAxLCAweGFjMjI2ZDljLCAweDNjMDIwMDAyLCAweDhjNDI4ZmY4LAorMHgzMDQyNTAwMCwgMHgxMDQwMDA0YywgMHgwLCAweDhmODIwMjIwLAorMHgzMDQyODAwMCwgMHgxMDQwMDAwNywgMHgwLCAweDhmODIwMjIwLAorMHgzYzAzZmZmZiwgMHgzNDYzN2ZmZiwgMHg0MzEwMjQsIDB4MTAwMDAwNDIsCisweGFmODIwMjIwLCAweDhmODIwMjIwLCAweDM0NDI4MDAwLCAweDEwMDAwMDNlLAorMHhhZjgyMDIyMCwgMHgzYzA1MDAwMSwgMHg4Y2E1NmQ5OCwgMHhjMDA1MjliLAorMHgyMDIxLCAweGMwMDU1MWIsIDB4MjAyMSwgMHgzYzAyMDAwMiwKKzB4OGM0MjhmZjAsIDB4NDQxMDAzMiwgMHgyNDAyMDAwMSwgMHg4ZjgyMDIxNCwKKzB4M2MwM2ZmZmYsIDB4NDMxMDI0LCAweDM0NDIyNTFmLCAweGFmODIwMjE0LAorMHgyNDAyMDAwOCwgMHhhZWUyMDRiOCwgMHg4ZjgyMDIyMCwgMHgzNDQyMDAwMiwKKzB4YWY4MjAyMjAsIDB4OGY4MjAyMjAsIDB4M2MwMzAwMDQsIDB4NDMxMDI0LAorMHgxNDQwMDAxNiwgMHgwLCAweDNjMDIwMDAyLCAweDhjNDI4ZmY4LAorMHgzMDQyNTAwMCwgMHgxMDQwMDAwZCwgMHgwLCAweDhmODIwMjIwLAorMHgzMDQyODAwMCwgMHgxMDQwMDAwNiwgMHgwLCAweDhmODIwMjIwLAorMHgzYzAzZmZmZiwgMHgzNDYzN2ZmZiwgMHgxMDAwMDAwMywgMHg0MzEwMjQsCisweDhmODIwMjIwLCAweDM0NDI4MDAwLCAweGFmODIwMjIwLCAweDhmODIwMjIwLAorMHgzYzAzZjcwMCwgMHg0MzEwMjUsIDB4YWY4MjAyMjAsIDB4M2MwMjAwMDEsCisweDk0NDI2ZjI2LCAweDI0NDI5ZmJjLCAweDJjNDIwMDA0LCAweDEwNDAwMDA0LAorMHgyNDA0MDAxOCwgMHgyNDA1MDAwMiwgMHhjMDA0ZGRiLCAweDI0MDYwMDIwLAorMHhjMDAzZTZkLCAweDAsIDB4MTAwMDAwMDMsIDB4MCwKKzB4M2MwMTAwMDEsIDB4YWMyMjZkOWMsIDB4OGZiZjAwMTgsIDB4M2UwMDAwOCwKKzB4MjdiZDAwMjAsIDB4OGY4MjAyMDAsIDB4OGY4MjAyMjAsIDB4OGY4MjAyMjAsCisweDM0NDIwMDA0LCAweGFmODIwMjIwLCAweDhmODIwMjAwLCAweDNjMDUwMDAxLAorMHg4Y2E1NmQ5OCwgMHgzNDQyMDAwNCwgMHhhZjgyMDIwMCwgMHgyNDAyMDAwMiwKKzB4MTBhMjAwNGIsIDB4MmNhMjAwMDMsIDB4MTA0MDAwMDUsIDB4MjQwMjAwMDEsCisweDEwYTIwMDBhLCAweDAsIDB4MTAwMDAwYjEsIDB4MCwKKzB4MjQwMjAwMDQsIDB4MTBhMjAwNzIsIDB4MjQwMjAwMDgsIDB4MTBhMjAwODUsCisweDNjMDJmMGZmLCAweDEwMDAwMGFhLCAweDAsIDB4OGY4MzAwNTAsCisweDNjMDJmMGZmLCAweDM0NDJmZmZmLCAweDNjMDQwMDAxLCAweDhjODQ2ZjQwLAorMHg2MjE4MjQsIDB4M2MwMjA3MDAsIDB4NjIxODI1LCAweDI0MDIwZTAwLAorMHgyNDg0ZmZmYiwgMHgyYzg0MDAwMiwgMHhhZjgzMDA1MCwgMHhhZjg1MDIwMCwKKzB4YWY4NTAyMjAsIDB4MTQ4MDAwMDYsIDB4YWY4MjAyMzgsIDB4OGY4MjAwNDQsCisweDNjMDNmZmZmLCAweDM0NjMzZjdmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwKKzB4M2MwMzAwMDEsIDB4OGM2MzZmNDAsIDB4MjQwMjAwMDUsIDB4MTQ2MjAwMDQsCisweDAsIDB4OGY4MjAwNDQsIDB4MzQ0MjUwMDAsIDB4YWY4MjAwNDQsCisweDNjMDIwMDAxLCAweDhjNDI2ZDg4LCAweDNjMDMwMDAxLCAweDhjNjM2ZjQwLAorMHgzNDQyMDAyMiwgMHgyNDYzZmZmYywgMHgyYzYzMDAwMiwgMHgxNDYwMDAwYywKKzB4YWY4MjAyMDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYWMsIDB4M2MwMzAwMDEsCisweDhjNjM2ZDkwLCAweDNjMDQwMDAxLCAweDhjODQ2ZDhjLCAweDM0NDI4MDAwLAorMHg2MjE4MjUsIDB4NjQxODI1LCAweDEwMDAwMDBhLCAweDM0NjIwMDAyLAorMHgzYzAyMDAwMSwgMHg4YzQyNmQ5MCwgMHgzYzAzMDAwMSwgMHg4YzYzNmRhYywKKzB4M2MwNDAwMDEsIDB4OGM4NDZkOGMsIDB4NDMxMDI1LCAweDQ0MTAyNSwKKzB4MzQ0MjAwMDIsIDB4YWY4MjAyMjAsIDB4MTAwMDAwMmYsIDB4MjQwMjAwMDEsCisweDI0MDIwZTAxLCAweGFmODIwMjM4LCAweDhmODMwMDUwLCAweDNjMDJmMGZmLAorMHgzNDQyZmZmZiwgMHgzYzA0MDAwMSwgMHg4Yzg0NmYxYywgMHg2MjE4MjQsCisweDNjMDIwZDAwLCAweDYyMTgyNSwgMHgyNDAyMDAwMSwgMHhhZjgzMDA1MCwKKzB4YWY4MjAyMDAsIDB4YWY4MjAyMjAsIDB4MTA4MDAwMDUsIDB4M2MwMzNmMDAsCisweDNjMDIwMDAxLCAweDhjNDI2ZDgwLCAweDEwMDAwMDA0LCAweDM0NjMwMDcwLAorMHgzYzAyMDAwMSwgMHg4YzQyNmQ4MCwgMHgzNDYzMDA3MiwgMHg0MzEwMjUsCisweGFmODIwMjAwLCAweDNjMDMwMDAxLCAweDhjNjM2ZDg0LCAweDNjMDJmNzAwLAorMHg2MjE4MjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZkOTAsIDB4M2MwNDAwMDEsCisweDhjODQ2ZGFjLCAweDNjMDUwMDAxLCAweDhjYTU2ZjQwLCAweDQzMTAyNSwKKzB4NDQxMDI1LCAweGFmODIwMjIwLCAweDI0MDIwMDA1LCAweDE0YTIwMDA2LAorMHgyNDAyMDAwMSwgMHg4ZjgyMDA0NCwgMHgyNDAzYWZmZiwgMHg0MzEwMjQsCisweGFmODIwMDQ0LCAweDI0MDIwMDAxLCAweDEwMDAwMDNkLCAweGFmODIwMjM4LAorMHg4ZjgzMDA1MCwgMHgzYzAyZjBmZiwgMHgzNDQyZmZmZiwgMHgzYzA0MDAwMSwKKzB4OGM4NDZmMWMsIDB4NjIxODI0LCAweDNjMDIwYTAwLCAweDYyMTgyNSwKKzB4MjQwMjAwMDEsIDB4YWY4MzAwNTAsIDB4YWY4MjAyMDAsIDB4MTA4MDAwMWUsCisweGFmODIwMjIwLCAweDNjMDIwMDAxLCAweDhjNDI2ZTQ0LCAweDE0NDAwMDFhLAorMHgzYzAzM2YwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmQ4MCwgMHgxMDAwMDAxYSwKKzB4MzQ2MzAwZTAsIDB4OGY4MzAwNTAsIDB4M2MwNDAwMDEsIDB4OGM4NDZmMWMsCisweDM0NDJmZmZmLCAweDYyMTgyNCwgMHgxMDgwMDAwZiwgMHhhZjgzMDA1MCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZlNDQsIDB4MTQ0MDAwMGIsIDB4M2MwNDNmMDAsCisweDNjMDMwMDAxLCAweDhjNjM2ZDgwLCAweDM0ODQwMGUwLCAweDI0MDIwMDAxLAorMHhhZjgyMDIwMCwgMHhhZjgyMDIyMCwgMHg2NDE4MjUsIDB4YWY4MzAyMDAsCisweDEwMDAwMDA4LCAweDNjMDVmNzAwLCAweDNjMDIwMDAxLCAweDhjNDI2ZDgwLAorMHgzYzAzM2YwMCwgMHgzNDYzMDBlMiwgMHg0MzEwMjUsIDB4YWY4MjAyMDAsCisweDNjMDVmNzAwLCAweDM0YTU4MDAwLCAweDNjMDMwMDAxLCAweDhjNjM2ZDg0LAorMHgzYzAyMDAwMSwgMHg4YzQyNmQ5MCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmRhYywKKzB4NjUxODI1LCAweDQzMTAyNSwgMHg0NDEwMjUsIDB4YWY4MjAyMjAsCisweDNlMDAwMDgsIDB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNmRiNCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZkYjgsIDB4MTA2MjAwMDMsIDB4MjQwMjAwMDIsCisweDNjMDEwMDAxLCAweGFjMjM2ZGI4LCAweDEwNjIwMDFkLCAweDJjNjIwMDAzLAorMHgxMDQwMDAyNSwgMHgyNDAyMDAwMSwgMHgxNDYyMDAyMywgMHgyNDAyMDAwNCwKKzB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MTA2MjAwMDYsIDB4MjQwMjAwMDgsCisweDE0NjIwMDBjLCAweDNjMDIwMGM4LCAweDM0NDIwMWZiLCAweDEwMDAwMDA5LAorMHhhZjgyMDIzOCwgMHgyNDAyMGUwMSwgMHhhZjgyMDIzOCwgMHg4ZjgyMDA0NCwKKzB4M2MwM2ZmZmYsIDB4MzQ2MzNmN2YsIDB4NDMxMDI0LCAweDM0NDIwMDgwLAorMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMSwKKzB4YWMyMjZkYjQsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMGIsIDB4YWMyMzZmMmMsCisweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI2ZjJjLCAweDI0NjNkOGYwLAorMHg0MzEwMjMsIDB4MmM0MjI3MTAsIDB4MTQ0MDAwMDMsIDB4MjQwMjAwMDksCisweDNjMDEwMDAxLCAweGFjMjI2ZGI0LCAweDNlMDAwMDgsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MjdiZGZmZDgsCisweGFmYjIwMDE4LCAweDgwOTAyMSwgMHhhZmIzMDAxYywgMHhhMDk4MjEsCisweGFmYjEwMDE0LCAweGMwODgyMSwgMHhhZmIwMDAxMCwgMHg4MDIxLAorMHhhZmJmMDAyMCwgMHhhNjIwMDAwMCwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLAorMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLAorMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsCisweDI0MTAwMDEwLCAweDI1MDEwMjQsIDB4MTA0MDAwMDIsIDB4MjAyMSwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsCisweDI1MDEwMjQsIDB4MjQxMDAwMTAsIDB4MjcwMTAyNCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MjcwMTAyNCwgMHhjMDA0ZGI5LCAweDM0MTA4MDAwLAorMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwgMHgwLAorMHg1MDQwMDAwNSwgMHgxMDgwNDIsIDB4OTYyMjAwMDAsIDB4NTAxMDI1LAorMHhhNjIyMDAwMCwgMHgxMDgwNDIsIDB4MTYwMGZmZjcsIDB4MCwKKzB4YzAwNGRiOSwgMHgwLCAweDhmYmYwMDIwLCAweDhmYjMwMDFjLAorMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwgMHgzZTAwMDA4LAorMHgyN2JkMDAyOCwgMHgyN2JkZmZkOCwgMHhhZmIxMDAxNCwgMHg4MDg4MjEsCisweGFmYjIwMDE4LCAweGEwOTAyMSwgMHhhZmIzMDAxYywgMHhjMDk4MjEsCisweGFmYjAwMDEwLCAweDgwMjEsIDB4YWZiZjAwMjAsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsCisweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgyMzAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmYSwgMHgyMzAxMDI0LCAweDI0MTAwMDEwLCAweDI1MDEwMjQsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDI1MDEwMjQsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweDM0MTA4MDAwLAorMHg5NjYyMDAwMCwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsIDB4MjAyMSwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZjgsCisweDAsIDB4YzAwNGRiOSwgMHgwLCAweDhmYmYwMDIwLAorMHg4ZmIzMDAxYywgMHg4ZmIyMDAxOCwgMHg4ZmIxMDAxNCwgMHg4ZmIwMDAxMCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAyOCwgMHgzYzA0MDAwMSwgMHg4Yzg0NmRkMCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZlMTgsIDB4MjdiZGZmZDgsIDB4YWZiZjAwMjAsCisweGFmYjEwMDFjLCAweDEwODIwMDAzLCAweGFmYjAwMDE4LCAweDNjMDEwMDAxLAorMHhhYzI0NmUxOCwgMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgyNDAyMDAwNSwKKzB4MTQ2MjAwMDUsIDB4MjQ4M2ZmZmYsIDB4YzAwNDk2MywgMHgwLAorMHgxMDAwMDM0YywgMHgwLCAweDJjNjIwMDEzLCAweDEwNDAwMzQ5LAorMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjZiODAsCisweDQwMDAwOCwgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwKKzB4MzQwMjgwMDAsIDB4YTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsCisweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4YzAwNGQ3OCwKKzB4MjAyMSwgMHgxMDgwNDIsIDB4MTYwMGZmZmMsIDB4MCwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsCisweDM0MTA4MDAwLCAweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZjgsIDB4MCwgMHhjMDA0ZGI5LCAweDAsCisweDEwMDAwMzBlLCAweDI0MDIwMDAyLCAweDI3YjEwMDEwLCAweGE3YTAwMDEwLAorMHg4MDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsCisweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwKKzB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsCisweDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgxMDgwNDIsCisweDE2MDBmZmZjLCAweDAsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwKKzB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwKKzB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAweDUwMTAyNSwKKzB4YTYyMjAwMDAsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsCisweGMwMDRkYjksIDB4MCwgMHg5N2EyMDAxMCwgMHgzMDQyODAwMCwKKzB4MTQ0MDAyZGMsIDB4MjQwMjAwMDMsIDB4MTAwMDAyZDgsIDB4MCwKKzB4MjQwMjEyMDAsIDB4YTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywKKzB4MCwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDIwMjEsIDB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksCisweDAsIDB4OGY4MzAwNTQsIDB4MTAwMDAyOTYsIDB4MjQwMjAwMDQsCisweDhmODMwMDU0LCAweDNjMDIwMDAxLCAweDhjNDI2ZjNjLCAweDI0NjNmZjljLAorMHg0MzEwMjMsIDB4MmM0MjAwNjQsIDB4MTQ0MDAyOWUsIDB4MjQwMjAwMDIsCisweDNjMDMwMDAxLCAweDhjNjM2ZjQwLCAweDEwNjIwMjk3LCAweDJjNjIwMDAzLAorMHgxNDQwMDI5NiwgMHgyNDAyMDAxMSwgMHgyNDAyMDAwMywgMHgxMDYyMDAwNSwKKzB4MjQwMjAwMDQsIDB4MTA2MjAyOTEsIDB4MjQwMjAwMGYsIDB4MTAwMDAyOGYsCisweDI0MDIwMDExLCAweDEwMDAwMjhkLCAweDI0MDIwMDA1LCAweDI0MDIwMDE0LAorMHhhN2EyMDAxMCwgMHgyN2IxMDAxMCwgMHg4MDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDEyLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxMiwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MzQxMDgwMDAsCisweDk2MjIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmOCwKKzB4MCwgMHhjMDA0ZGI5LCAweDAsIDB4OGY4MzAwNTQsCisweDEwMDAwMjQ4LCAweDI0MDIwMDA2LCAweDhmODMwMDU0LCAweDNjMDIwMDAxLAorMHg4YzQyNmYzYywgMHgyNDYzZmY5YywgMHg0MzEwMjMsIDB4MmM0MjAwNjQsCisweDE0NDAwMjUwLCAweDI0MDIwMDA3LCAweDEwMDAwMjRjLCAweDAsCisweDI0MDIwMDA2LCAweGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDEzLCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDEzLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwKKzB4OGY4MzAwNTQsIDB4MTAwMDAyMDcsIDB4MjQwMjAwMDgsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI2ZjNjLCAweDI0NjNmZjljLCAweDQzMTAyMywKKzB4MmM0MjAwNjQsIDB4MTQ0MDAyMGYsIDB4MjQwMjAwMDksIDB4MTAwMDAyMGIsCisweDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsCisweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLAorMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLAorMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLAorMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwKKzB4OTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4MzQ0MjAwMDEsIDB4YTdhMjAwMTAsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE4LAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwKKzB4OGY4MzAwNTQsIDB4MTAwMDAxOTMsIDB4MjQwMjAwMGEsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI2ZjNjLCAweDI0NjNmZjljLCAweDQzMTAyMywKKzB4MmM0MjAwNjQsIDB4MTQ0MDAxOWIsIDB4MjQwMjAwMGIsIDB4MTAwMDAxOTcsCisweDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTcsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTcsCisweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLAorMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLAorMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLAorMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwKKzB4OTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4MzQ0MjA3MDAsIDB4YTdhMjAwMTAsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDE3LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE3LAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwKKzB4OGY4MzAwNTQsIDB4MTAwMDAxMWYsIDB4MjQwMjAwMGMsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI2ZjNjLCAweDI0NjNmZjljLCAweDQzMTAyMywKKzB4MmM0MjAwNjQsIDB4MTQ0MDAxMjcsIDB4MjQwMjAwMTIsIDB4MTAwMDAxMjMsCisweDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTQsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTQsCisweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLAorMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLAorMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLAorMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwKKzB4OTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4MzQ0MjAwMTAsIDB4YTdhMjAwMTAsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDE0LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE0LAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwKKzB4OGY4MzAwNTQsIDB4MTAwMDAwYWIsIDB4MjQwMjAwMTMsIDB4OGY4MzAwNTQsCisweDNjMDIwMDAxLCAweDhjNDI2ZjNjLCAweDI0NjNmZjljLCAweDQzMTAyMywKKzB4MmM0MjAwNjQsIDB4MTQ0MDAwYjMsIDB4MjQwMjAwMGQsIDB4MTAwMDAwYWYsCisweDAsIDB4MjdiMTAwMTAsIDB4YTdhMDAwMTAsIDB4ODAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsCisweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLAorMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLAorMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLAorMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwKKzB4OTdhMjAwMTAsIDB4MjdiMTAwMTAsIDB4MzA0MmZmZmUsIDB4YTdhMjAwMTAsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsCisweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDE4LCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDE4LAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4MzQxMDgwMDAsIDB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksIDB4MCwKKzB4OGY4MzAwNTQsIDB4MTAwMDAwMzcsIDB4MjQwMjAwMGUsIDB4MjQwMjA4NDAsCisweGE3YTIwMDEwLCAweDI3YjEwMDEwLCAweDgwMjEsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsCisweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMTMsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDEzLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgzNDEwODAwMCwKKzB4OTYyMjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmY4LAorMHgwLCAweGMwMDRkYjksIDB4MCwgMHg4ZjgzMDA1NCwKKzB4MjQwMjAwMTAsIDB4M2MwMTAwMDEsIDB4YWMyMjZkZDAsIDB4M2MwMTAwMDEsCisweDEwMDAwMDBjLCAweGFjMjM2ZjNjLCAweDhmODMwMDU0LCAweDNjMDIwMDAxLAorMHg4YzQyNmYzYywgMHgyNDYzZmY5YywgMHg0MzEwMjMsIDB4MmM0MjAwNjQsCisweDE0NDAwMDA0LCAweDAsIDB4MjQwMjAwMTEsIDB4M2MwMTAwMDEsCisweGFjMjI2ZGQwLCAweDhmYmYwMDIwLCAweDhmYjEwMDFjLCAweDhmYjAwMDE4LAorMHgzZTAwMDA4LCAweDI3YmQwMDI4LCAweDNjMDMwMDAxLCAweDhjNjM2ZDk4LAorMHgyN2JkZmZjOCwgMHgyNDAyMDAwMiwgMHhhZmJmMDAzNCwgMHhhZmIyMDAzMCwKKzB4YWZiMTAwMmMsIDB4MTQ2MjAwMDQsIDB4YWZiMDAwMjgsIDB4M2MxMjAwMDIsCisweDEwMDAwMDAzLCAweDhlNTI4ZmY4LCAweDNjMTIwMDAyLCAweDhlNTI4ZmZjLAorMHgzYzAzMDAwMSwgMHg4YzYzNmRkNCwgMHgzYzAyMDAwMSwgMHg4YzQyNmUxYywKKzB4NTA2MjAwMDQsIDB4MjQ2M2ZmZmYsIDB4M2MwMTAwMDEsIDB4YWMyMzZlMWMsCisweDI0NjNmZmZmLCAweDJjNjIwMDA2LCAweDEwNDAwMzc3LCAweDMxMDgwLAorMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjZiZDgsIDB4NDAwMDA4LAorMHgwLCAweDIwMjEsIDB4MjgyMSwgMHhjMDA0ZGRiLAorMHgzNDA2ODAwMCwgMHgyNDA0MDAxMCwgMHgyNDA1MDAwMiwgMHgyNDA2MDAwMiwKKzB4MjQwMjAwMDIsIDB4YzAwNGRkYiwgMHhhN2EyMDAxOCwgMHgyNDAyMDAwMiwKKzB4M2MwMTAwMDEsIDB4MTAwMDAzNjQsIDB4YWMyMjZkZDQsIDB4MjdiMTAwMTgsCisweGE3YTAwMDE4LCAweDgwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwgMHgyMDIxLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwKKzB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHgxMDgwNDIsIDB4MTYwMGZmZmMsIDB4MCwgMHhjMDA0ZGI5LAorMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwKKzB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsIDB4OTYyMjAwMDAsCisweDUwMTAyNSwgMHhhNjIyMDAwMCwgMHgxMDgwNDIsIDB4MTYwMGZmZjcsCisweDAsIDB4YzAwNGRiOSwgMHgwLCAweDk3YTIwMDE4LAorMHgzMDQyODAwMCwgMHgxNDQwMDAwNCwgMHgyNDAyMDAwMywgMHgzYzAxMDAwMSwKKzB4YWMyMjZkZDQsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIDB4MTAwMDAzMmEsCisweGFjMjI2ZGQ0LCAweDI0MDQwMDEwLCAweDI0MDUwMDAyLCAweDI0MDYwMDAyLAorMHgyNDAyMDAwMiwgMHhjMDA0ZGRiLCAweGE3YTIwMDE4LCAweDNjMDMwMDAxLAorMHg4YzYzNmUyMCwgMHgyNDAyMDAwMSwgMHgxNDYyMDFlMSwgMHg4MDIxLAorMHgyN2IxMDAxOCwgMHhhN2EwMDAxOCwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLAorMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLAorMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsCisweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLAorMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwKKzB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwKKzB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLCAweDUwMTAyNSwKKzB4YTYyMjAwMDAsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsCisweGMwMDRkYjksIDB4ODAyMSwgMHgyN2IxMDAxOCwgMHhhN2EwMDAxOCwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMTgsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsCisweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLAorMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLAorMHg5NjIyMDAwMCwgMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLAorMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksIDB4ODAyMSwKKzB4MjQwNDAwMTgsIDB4MjgyMSwgMHhjMDA0ZGRiLCAweDI0MDYwNDA0LAorMHhhN2EwMDAxYSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLAorMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsCisweDIwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MjQxMDAwMTAsCisweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDAxLAorMHgyNDEwMDAxMCwgMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwgMHgyMDIxLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxNjAwZmZmYSwKKzB4MzIwMjAwMTgsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwgMHhjMDA0ZGI5LAorMHgwLCAweGMwMDRkNTgsIDB4MCwgMHg1MDQwMDAwNSwKKzB4MTA4MDQyLCAweDk3YTIwMDFhLCAweDUwMTAyNSwgMHhhN2EyMDAxYSwKKzB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsIDB4YzAwNGRiOSwKKzB4ODAyMSwgMHhhN2EwMDAxYSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLAorMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwgMHgwLAorMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsCisweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLAorMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAxOCwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MzIwMjAwMTgsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwKKzB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwKKzB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk3YTIwMDFhLCAweDUwMTAyNSwKKzB4YTdhMjAwMWEsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsCisweGMwMDRkYjksIDB4ODAyMSwgMHhhN2EwMDAxYywgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwKKzB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgyMDIxLCAweDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4MTA4MDQyLCAweDE2MDBmZmZjLCAweDAsIDB4MjQxMDAwMTAsCisweDMyMDIwMDFlLCAweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDMyMDIwMDFlLAorMHhjMDA0ZGI5LCAweDM0MTA4MDAwLCAweGMwMDRkYjksIDB4MCwKKzB4YzAwNGQ1OCwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwKKzB4OTdhMjAwMWMsIDB4NTAxMDI1LCAweGE3YTIwMDFjLCAweDEwODA0MiwKKzB4MTYwMGZmZjcsIDB4MCwgMHhjMDA0ZGI5LCAweDgwMjEsCisweGE3YTAwMDFjLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsCisweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwKKzB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywKKzB4MCwgMHgyNDEwMDAxMCwgMHgzMjAyMDAxZSwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MzIwMjAwMWUsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwKKzB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwKKzB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk3YTIwMDFjLCAweDUwMTAyNSwKKzB4YTdhMjAwMWMsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsCisweGMwMDRkYjksIDB4ODAyMSwgMHgyNDAyMDAwMiwgMHhhN2EyMDAxZSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwKKzB4MTQ0MGZmZmIsIDB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweGMwMDRkNzgsCisweDIwMjEsIDB4MTA4MDQyLCAweDE2MDBmZmZjLCAweDAsCisweDI0MTAwMDEwLCAweDMyMDIwMDFlLCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmZhLAorMHgzMjAyMDAxZSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDIwMjEsIDB4MzQxMDgwMDAsIDB4OTdhMjAwMWUsIDB4NTAxMDI0LAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmOCwgMHgwLCAweGMwMDRkYjksCisweDgwMjEsIDB4YTdhMDAwMjAsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHgyNDEwMDAxMCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MTA4MDQyLAorMHgxNjAwZmZmYywgMHgwLCAweDI0MTAwMDEwLCAweDMyMDIwMDFlLAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgzMjAyMDAxZSwgMHhjMDA0ZGI5LAorMHgzNDEwODAwMCwgMHhjMDA0ZGI5LCAweDAsIDB4YzAwNGQ1OCwKKzB4MCwgMHg1MDQwMDAwNSwgMHgxMDgwNDIsIDB4OTdhMjAwMjAsCisweDUwMTAyNSwgMHhhN2EyMDAyMCwgMHgxMDgwNDIsIDB4MTYwMGZmZjcsCisweDAsIDB4YzAwNGRiOSwgMHg4MDIxLCAweGE3YTAwMDIwLAorMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLAorMHgxNDQwZmZmYiwgMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwKKzB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLAorMHhjMDA0ZDc4LCAweDIwMjEsIDB4MjQxMDAwMTAsIDB4YzAwNGQ3OCwKKzB4MjAyMSwgMHgxMDgwNDIsIDB4MTYwMGZmZmMsIDB4MCwKKzB4MjQxMDAwMTAsIDB4MzIwMjAwMWUsIDB4MTA0MDAwMDIsIDB4MjAyMSwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsCisweDMyMDIwMDFlLCAweGMwMDRkYjksIDB4MzQxMDgwMDAsIDB4YzAwNGRiOSwKKzB4MCwgMHhjMDA0ZDU4LCAweDAsIDB4NTA0MDAwMDUsCisweDEwODA0MiwgMHg5N2EyMDAyMCwgMHg1MDEwMjUsIDB4YTdhMjAwMjAsCisweDEwODA0MiwgMHgxNjAwZmZmNywgMHgwLCAweGMwMDRkYjksCisweDgwMjEsIDB4YTdhMDAwMjIsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwKKzB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsIDB4MCwKKzB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsCisweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLAorMHgyNDEwMDAxMCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MTA4MDQyLAorMHgxNjAwZmZmYywgMHgwLCAweDI0MTAwMDEwLCAweGMwMDRkNzgsCisweDIwMjEsIDB4MTA4MDQyLCAweDE2MDBmZmZjLCAweDAsCisweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLAorMHgzNDEwODAwMCwgMHg5N2EyMDAyMiwgMHg1MDEwMjQsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsCisweDE2MDBmZmY4LCAweDAsIDB4YzAwNGRiOSwgMHgwLAorMHgyNDA0MDAxOCwgMHgyNDA1MDAwMiwgMHhjMDA0ZGRiLCAweDI0MDYwMDA0LAorMHgzYzEwMDAwMSwgMHg4ZTEwNmUyNCwgMHgyNDAyMDAwMSwgMHgxNjAyMDExZCwKKzB4MCwgMHgzYzAyMDAwMSwgMHg5NDQyNmYyNiwgMHgzYzAxMDAwMSwKKzB4YWMyMDZlMjQsIDB4MjQ0MjlmYmMsIDB4MmM0MjAwMDQsIDB4MTA0MDAwMGMsCisweDI0MDQwMDA5LCAweDI0MDUwMDAxLCAweGMwMDRkZGIsIDB4MjQwNjA0MDAsCisweDI0MDQwMDE4LCAweDI0MDUwMDAxLCAweGMwMDRkZGIsIDB4MjQwNjAwMjAsCisweDI0MDQwMDE4LCAweDI0MDUwMDAxLCAweGMwMDRkZGIsIDB4MjQwNjIwMDAsCisweDNjMDI0MDAwLCAweDI0MjEwMjQsIDB4MTA0MDAxMjMsIDB4M2MwMjIwMDAsCisweDI0MjEwMjQsIDB4MTA0MDAwMDQsIDB4MCwgMHgzYzAxMDAwMSwKKzB4MTAwMDAwMDMsIDB4YWMzMDZmMWMsIDB4M2MwMTAwMDEsIDB4YWMyMDZmMWMsCisweDNjMDMwMDAxLCAweDhjNjM2ZjM0LCAweDI0MDIwMDA1LCAweDE0NjIwMGY5LAorMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjFjLCAweDEwNDAwMDY3LAorMHgzYzAyMDAwNCwgMHgyNDIxMDI0LCAweDEwNDAwMDExLCAweGE3YTAwMDE4LAorMHgzYzAyMDAwOCwgMHgyNDIxMDI0LCAweDEwNDAwMDAyLCAweDI0MDIwMjAwLAorMHhhN2EyMDAxOCwgMHgzYzAyMDAxMCwgMHgyNDIxMDI0LCAweDEwNDAwMDA0LAorMHgwLCAweDk3YTIwMDE4LCAweDM0NDIwMTAwLCAweGE3YTIwMDE4LAorMHg5N2E2MDAxOCwgMHgyNDA0MDAwOSwgMHgxMDAwMDAwNCwgMHgyODIxLAorMHgyNDA0MDAwOSwgMHgyODIxLCAweDMwMjEsIDB4YzAwNGRkYiwKKzB4MCwgMHgyNDAyMDAwMSwgMHhhN2EyMDAxYSwgMHgzYzAyMDAwOCwKKzB4MjQyMTAyNCwgMHgxMDQwMDAwYywgMHgzYzAyMDAwMiwgMHgyNDIxMDI0LAorMHgxMDQwMDAwMiwgMHgyNDAyMDEwMSwgMHhhN2EyMDAxYSwgMHgzYzAyMDAwMSwKKzB4MjQyMTAyNCwgMHgxMDQwMDAwNSwgMHgzYzAyMDAxMCwgMHg5N2EyMDAxYSwKKzB4MzQ0MjAwNDAsIDB4YTdhMjAwMWEsIDB4M2MwMjAwMTAsIDB4MjQyMTAyNCwKKzB4MTA0MDAwMGUsIDB4M2MwMjAwMDIsIDB4MjQyMTAyNCwgMHgxMDQwMDAwNSwKKzB4M2MwMjAwMDEsIDB4OTdhMjAwMWEsIDB4MzQ0MjAwODAsIDB4YTdhMjAwMWEsCisweDNjMDIwMDAxLCAweDI0MjEwMjQsIDB4MTA0MDAwMDUsIDB4M2MwMzAwYTAsCisweDk3YTIwMDFhLCAweDM0NDIwMDIwLCAweGE3YTIwMDFhLCAweDNjMDMwMGEwLAorMHgyNDMxMDI0LCAweDU0NDMwMDA0LCAweDNjMDIwMDIwLCAweDk3YTIwMDFhLAorMHgxMDAwMDAwYywgMHgzNDQyMDQwMCwgMHgyNDIxMDI0LCAweDUwNDAwMDA0LAorMHgzYzAyMDA4MCwgMHg5N2EyMDAxYSwgMHgxMDAwMDAwNiwgMHgzNDQyMDgwMCwKKzB4MjQyMTAyNCwgMHgxMDQwMDAwNCwgMHgwLCAweDk3YTIwMDFhLAorMHgzNDQyMGMwMCwgMHhhN2EyMDAxYSwgMHg5N2E2MDAxYSwgMHgyNDA0MDAwNCwKKzB4YzAwNGRkYiwgMHgyODIxLCAweDNjMDIwMDA0LCAweDI0MjEwMjQsCisweDEwNDAwMDA0LCAweGE3YTAwMDFjLCAweDMyNDI1MDAwLCAweDE0NDAwMDA0LAorMHgwLCAweDMyNDI0MDAwLCAweDEwNDAwMDA1LCAweDIwMjEsCisweGMwMDRjZjksIDB4MjQwMjAyMSwgMHgxMDAwMDA5NiwgMHgwLAorMHg5N2E2MDAxYywgMHgyODIxLCAweDM0YzYxMjAwLCAweGMwMDRkZGIsCisweGE3YTYwMDFjLCAweDEwMDAwMDhmLCAweDAsIDB4MjQyMTAyNCwKKzB4MTA0MDAwMDQsIDB4YTdhMDAwMTgsIDB4MzI0MjUwMDAsIDB4MTQ0MDAwMDQsCisweDAsIDB4MzI0MjQwMDAsIDB4MTA0MDAwMDUsIDB4M2MwMjAwMTAsCisweGMwMDRjZjksIDB4MjQwMjAyMSwgMHgxMDAwMDAxOSwgMHhhN2EwMDAxYSwKKzB4MjQyMTAyNCwgMHgxMDQwMDAwNCwgMHgwLCAweDk3YTIwMDE4LAorMHgxMDAwMDAwNCwgMHhhN2EyMDAxOCwgMHg5N2EyMDAxOCwgMHgzNDQyMDEwMCwKKzB4YTdhMjAwMTgsIDB4M2MwMjAwMDEsIDB4MjQyMTAyNCwgMHgxMDQwMDAwNCwKKzB4MCwgMHg5N2EyMDAxOCwgMHgxMDAwMDAwNCwgMHhhN2EyMDAxOCwKKzB4OTdhMjAwMTgsIDB4MzQ0MjIwMDAsIDB4YTdhMjAwMTgsIDB4OTdhNjAwMTgsCisweDIwMjEsIDB4YzAwNGRkYiwgMHgyODIxLCAweGE3YTAwMDFhLAorMHg4MDIxLCAweGMwMDRkNzgsIDB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsCisweDJlMDIwMDIwLCAweDE0NDBmZmZiLCAweDAsIDB4YzAwNGQ3OCwKKzB4MjAyMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgyNDEwMDAxMCwKKzB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwKKzB4YzAwNGQ3OCwgMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsCisweDI0MTAwMDEwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgxMDgwNDIsCisweDE2MDBmZmZjLCAweDAsIDB4YzAwNGRiOSwgMHgzNDEwODAwMCwKKzB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsIDB4MCwKKzB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk3YTIwMDFhLCAweDUwMTAyNSwKKzB4YTdhMjAwMWEsIDB4MTA4MDQyLCAweDE2MDBmZmY3LCAweDAsCisweGMwMDRkYjksIDB4ODAyMSwgMHhhN2EwMDAxYSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwKKzB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgyMDIxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHhjMDA0ZDc4LAorMHgyMDIxLCAweDEwODA0MiwgMHgxNjAwZmZmYywgMHgwLAorMHhjMDA0ZGI5LCAweDM0MTA4MDAwLCAweGMwMDRkYjksIDB4MCwKKzB4YzAwNGQ1OCwgMHgwLCAweDUwNDAwMDA1LCAweDEwODA0MiwKKzB4OTdhMjAwMWEsIDB4NTAxMDI1LCAweGE3YTIwMDFhLCAweDEwODA0MiwKKzB4MTYwMGZmZjcsIDB4MCwgMHhjMDA0ZGI5LCAweDAsCisweDNjMDQwMDAxLCAweDI0ODQ2YmNjLCAweDk3YTYwMDE4LCAweDk3YTcwMDFhLAorMHgzYzAyMDAwMSwgMHg4YzQyNmQ5OCwgMHgzYzAzMDAwMSwgMHg4YzYzNmYxYywKKzB4M2MwNTAwMGQsIDB4MzRhNTAyMDUsIDB4YWZhMjAwMTAsIDB4YzAwMmIzYiwKKzB4YWZhMzAwMTQsIDB4OGY4MzAwNTQsIDB4MjQwMjAwMDQsIDB4M2MwMTAwMDEsCisweGFjMjI2ZGQ0LCAweDNjMDEwMDAxLCAweDEwMDAwMDE3LCAweGFjMjM2ZjM4LAorMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYzOCwgMHgyNDYzZmY5YywKKzB4NDMxMDIzLCAweDJjNDIwMDY0LCAweDE0NDAwMDBmLCAweDAsCisweDhmODIwMjIwLCAweDI0MDMwMDA1LCAweDNjMDEwMDAxLCAweGFjMjM2ZGQ0LAorMHgzYzAzZjcwMCwgMHg0MzEwMjUsIDB4MTAwMDAwMDcsIDB4YWY4MjAyMjAsCisweDI0MDIwMDA2LCAweDNjMDEwMDAxLCAweGFjMjI2ZGQ0LCAweDI0MDIwMDExLAorMHgzYzAxMDAwMSwgMHhhYzIyNmRkMCwgMHg4ZmJmMDAzNCwgMHg4ZmIyMDAzMCwKKzB4OGZiMTAwMmMsIDB4OGZiMDAwMjgsIDB4M2UwMDAwOCwgMHgyN2JkMDAzOCwKKzB4MjdiZGZmZDgsIDB4YWZiMDAwMTgsIDB4ODA4MDIxLCAweGFmYjEwMDFjLAorMHg4ODIxLCAweDMyMDI0MDAwLCAweDEwNDAwMDEzLCAweGFmYmYwMDIwLAorMHgzYzAyMDAxMCwgMHgyMDIxMDI0LCAweDJjNDIwMDAxLCAweDIxMDIzLAorMHgzMDQzNDEwMCwgMHgzYzAyMDAwMSwgMHgyMDIxMDI0LCAweDE0NDAwMDA2LAorMHgzNDcxNDAwMCwgMHgzYzAyMDAwMiwgMHgyMDIxMDI0LCAweDE0NDAwMDAyLAorMHgzNDcxNjAwMCwgMHgzNDcxNDA0MCwgMHgyMDIxLCAweDI4MjEsCisweDEwMDAwMDM2LCAweDIyMDMwMjEsIDB4MzIwMjEwMDAsIDB4MTA0MDAwMzUsCisweDIwMjEsIDB4MjgyMSwgMHhjMDA0ZGRiLCAweDI0MDYwMDQwLAorMHgyNDA0MDAxOCwgMHgyODIxLCAweGMwMDRkZGIsIDB4MjQwNjBjMDAsCisweDI0MDQwMDE3LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDQwMCwKKzB4MjQwNDAwMTYsIDB4MjgyMSwgMHhjMDA0ZGRiLCAweDI0MDYwMDA2LAorMHgyNDA0MDAxNywgMHgyODIxLCAweGMwMDRkZGIsIDB4MjQwNjI1MDAsCisweDI0MDQwMDE2LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MDAwNiwKKzB4MjQwNDAwMTcsIDB4MjgyMSwgMHhjMDA0ZGRiLCAweDI0MDY0NjAwLAorMHgyNDA0MDAxNiwgMHgyODIxLCAweGMwMDRkZGIsIDB4MjQwNjAwMDYsCisweDI0MDQwMDE3LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2NjcwMCwKKzB4MjQwNDAwMTYsIDB4MjgyMSwgMHhjMDA0ZGRiLCAweDI0MDYwMDA2LAorMHgyNDA0MDAxZiwgMHgyODIxLCAweGMwMDRkZGIsIDB4MjQwNjAwMTAsCisweDI0MDQwMDA5LCAweDI4MjEsIDB4YzAwNGRkYiwgMHgyNDA2MTUwMCwKKzB4MjQwNDAwMDksIDB4MjgyMSwgMHgyNDA2MWQwMCwgMHhjMDA0ZGRiLAorMHgwLCAweDNjMDQwMDAxLCAweDI0ODQ2YmYwLCAweDNjMDUwMDBlLAorMHgzNGE1MDEwMCwgMHgyMDAzMDIxLCAweDIyMDM4MjEsIDB4YWZhMDAwMTAsCisweGMwMDJiM2IsIDB4YWZhMDAwMTQsIDB4OGZiZjAwMjAsIDB4OGZiMTAwMWMsCisweDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMjgsIDB4OGY4NTAwNDQsCisweDhmODIwMDQ0LCAweDNjMDMwMDAxLCAweDQzMTAyNSwgMHgzYzAzMDAwOCwKKzB4YWY4MjAwNDQsIDB4OGY4NDAwNTQsIDB4OGY4MjAwNTQsIDB4YTMyODI0LAorMHgxMDAwMDAwMiwgMHgyNDg0MDAwMSwgMHg4ZjgyMDA1NCwgMHg4MjEwMjMsCisweDJjNDIwMDAyLCAweDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsCisweDNjMDNmZmZlLCAweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwKKzB4OGY4MzAwNTQsIDB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsCisweDhmODIwMDU0LCAweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywKKzB4MCwgMHgzZTAwMDA4LCAweGEwMTAyMSwgMHg4ZjgzMDA0NCwKKzB4M2MwMmZmZjAsIDB4MzQ0MmZmZmYsIDB4NDI0ODAsIDB4NjIxODI0LAorMHgzYzAyMDAwMiwgMHg4MjIwMjUsIDB4NjQxODI1LCAweGFmODMwMDQ0LAorMHg4ZjgyMDA0NCwgMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsCisweGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDEwMDAwMDAyLAorMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsCisweDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsIDB4M2MwMzAwMDEsCisweDQzMTAyNSwgMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwKKzB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLAorMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLCAweDNlMDAwMDgsCisweDAsIDB4OGY4MjAwNDQsIDB4MjQwM2ZmN2YsIDB4NDMxMDI0LAorMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwKKzB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAyLAorMHgxNDQwZmZmYywgMHgwLCAweDhmODIwMDQ0LCAweDM0NDIwMDgwLAorMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwgMHg4ZjgyMDA1NCwgMHgxMDAwMDAwMiwKKzB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsIDB4NjIxMDIzLCAweDJjNDIwMDAyLAorMHgxNDQwZmZmYywgMHgwLCAweDNlMDAwMDgsIDB4MCwKKzB4OGY4MjAwNDQsIDB4M2MwM2ZmZjAsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgMHgzYzAzMDAwMSwgMHg0MzEwMjUsCisweGFmODIwMDQ0LCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDEwMDAwMDAyLAorMHgyNDYzMDAwMSwgMHg4ZjgyMDA1NCwgMHg2MjEwMjMsIDB4MmM0MjAwMDIsCisweDE0NDBmZmZjLCAweDAsIDB4OGY4MjAwNDQsIDB4M2MwM2ZmZmUsCisweDM0NjNmZmZmLCAweDQzMTAyNCwgMHhhZjgyMDA0NCwgMHg4ZjgzMDA1NCwKKzB4OGY4MjAwNTQsIDB4MTAwMDAwMDIsIDB4MjQ2MzAwMDEsIDB4OGY4MjAwNTQsCisweDYyMTAyMywgMHgyYzQyMDAwMiwgMHgxNDQwZmZmYywgMHgwLAorMHgzZTAwMDA4LCAweDAsIDB4MjdiZGZmYzgsIDB4YWZiMzAwMjQsCisweDgwOTgyMSwgMHhhZmJlMDAyYywgMHhhMGYwMjEsIDB4YWZiMjAwMjAsCisweGMwOTAyMSwgMHgzM2MyZmZmZiwgMHhhZmJmMDAzMCwgMHhhZmI1MDAyOCwKKzB4YWZiMTAwMWMsIDB4YWZiMDAwMTgsIDB4MTQ0MDAwMzQsIDB4YTdiMjAwMTAsCisweDMyNzFmZmZmLCAweDI3YjIwMDEwLCAweDgwMjEsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4MjYxMDAwMDEsIDB4MmUwMjAwMjAsIDB4MTQ0MGZmZmIsCisweDAsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNDEwMDAxMCwgMHgzMjAyMDAwMSwgMHgxMDQwMDAwMiwKKzB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwKKzB4MTYwMGZmZmEsIDB4MzIwMjAwMDEsIDB4MjQxMDAwMTAsIDB4MjMwMTAyNCwKKzB4MTA0MDAwMDIsIDB4MjAyMSwgMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LAorMHgxMDgwNDIsIDB4MTYwMGZmZmEsIDB4MjMwMTAyNCwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4MzQxMDgwMDAsCisweDk2NDIwMDAwLCAweDUwMTAyNCwgMHgxMDQwMDAwMiwgMHgyMDIxLAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDEwODA0MiwgMHgxMjAwMDA3NSwKKzB4MCwgMHgxMDAwZmZmNiwgMHgwLCAweDMyNzVmZmZmLAorMHgyN2IxMDAxMCwgMHhhN2EwMDAxMCwgMHg4MDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweDI2MTAwMDAxLCAweDJlMDIwMDIwLCAweDE0NDBmZmZiLAorMHgwLCAweGMwMDRkNzgsIDB4MjAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHhjMDA0ZDc4LCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDIwMjEsIDB4MjQxMDAwMTAsIDB4MzIwMjAwMDEsIDB4MTA0MDAwMDIsCisweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgxMDgwNDIsCisweDE2MDBmZmZhLCAweDMyMDIwMDAxLCAweDI0MTAwMDEwLCAweDJiMDEwMjQsCisweDEwNDAwMDAyLCAweDIwMjEsIDB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwKKzB4MTA4MDQyLCAweDE2MDBmZmZhLCAweDJiMDEwMjQsIDB4YzAwNGRiOSwKKzB4MzQxMDgwMDAsIDB4YzAwNGRiOSwgMHgwLCAweGMwMDRkNTgsCisweDAsIDB4NTA0MDAwMDUsIDB4MTA4MDQyLCAweDk2MjIwMDAwLAorMHg1MDEwMjUsIDB4YTYyMjAwMDAsIDB4MTA4MDQyLCAweDE2MDBmZmY3LAorMHgwLCAweGMwMDRkYjksIDB4MCwgMHgzM2M1ZmZmZiwKKzB4MjQwMjAwMDEsIDB4NTRhMjAwMDQsIDB4MjQwMjAwMDIsIDB4OTdhMjAwMTAsCisweDEwMDAwMDA2LCAweDUyMTAyNSwgMHgxNGEyMDAwNiwgMHgzMjcxZmZmZiwKKzB4OTdhMjAwMTAsIDB4MTIxODI3LCAweDQzMTAyNCwgMHhhN2EyMDAxMCwKKzB4MzI3MWZmZmYsIDB4MjdiMjAwMTAsIDB4ODAyMSwgMHhjMDA0ZDc4LAorMHgyNDA0MDAwMSwgMHgyNjEwMDAwMSwgMHgyZTAyMDAyMCwgMHgxNDQwZmZmYiwKKzB4MCwgMHhjMDA0ZDc4LCAweDIwMjEsIDB4YzAwNGQ3OCwKKzB4MjQwNDAwMDEsIDB4YzAwNGQ3OCwgMHgyMDIxLCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweDI0MTAwMDEwLCAweDMyMDIwMDAxLCAweDEwNDAwMDAyLAorMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLAorMHgxNjAwZmZmYSwgMHgzMjAyMDAwMSwgMHgyNDEwMDAxMCwgMHgyMzAxMDI0LAorMHgxMDQwMDAwMiwgMHgyMDIxLCAweDI0MDQwMDAxLCAweGMwMDRkNzgsCisweDEwODA0MiwgMHgxNjAwZmZmYSwgMHgyMzAxMDI0LCAweGMwMDRkNzgsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MjAyMSwgMHgzNDEwODAwMCwKKzB4OTY0MjAwMDAsIDB4NTAxMDI0LCAweDEwNDAwMDAyLCAweDIwMjEsCisweDI0MDQwMDAxLCAweGMwMDRkNzgsIDB4MTA4MDQyLCAweDE2MDBmZmY4LAorMHgwLCAweGMwMDRkYjksIDB4MCwgMHg4ZmJmMDAzMCwKKzB4OGZiZTAwMmMsIDB4OGZiNTAwMjgsIDB4OGZiMzAwMjQsIDB4OGZiMjAwMjAsCisweDhmYjEwMDFjLCAweDhmYjAwMDE4LCAweDNlMDAwMDgsIDB4MjdiZDAwMzgsCisweDAsIDB4MCwgMHgwLCAweDI3YmRmZmU4LAorMHhhZmJmMDAxMCwgMHg4ZWUzMDRiOCwgMHgyNDAyMDAwOCwgMHgxNDYyMDFlMCwKKzB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYxYywgMHgxNDQwMDAwNSwKKzB4MCwgMHhjMDAzZGFmLCAweDhmODQwMjI0LCAweDEwMDAwMWQ4LAorMHgwLCAweDhmODIwMjIwLCAweDNjMDMwMDA4LCAweDQzMTAyNCwKKzB4MTA0MDAwMjYsIDB4MjQwMjAwMDEsIDB4OGY4NDAyMjQsIDB4OGY4MjAyMjAsCisweDNjMDMwNDAwLCAweDQzMTAyNCwgMHgxMDQwMDAwNiwgMHgwLAorMHgzYzAxMDAwMiwgMHhhYzIwOGZhMCwgMHgzYzAxMDAwMiwgMHgxMDAwMDAwYiwKKzB4YWMyMDhmYzAsIDB4M2MwMzAwMDIsIDB4MjQ2MzhmYTAsIDB4OGM2MjAwMDAsCisweDI0NDIwMDAxLCAweGFjNjIwMDAwLCAweDJjNDIwMDAyLCAweDE0NDAwMDAzLAorMHgyNDAyMDAwMSwgMHgzYzAxMDAwMiwgMHhhYzIyOGZjMCwgMHgzYzAyMDAwMiwKKzB4OGM0MjhmYzAsIDB4MTA0MDAwMDYsIDB4MzA4MjAwNDAsIDB4MTA0MDAwMDQsCisweDI0MDIwMDAxLCAweDNjMDEwMDAyLCAweDEwMDAwMDAzLCAweGFjMjI4ZmM0LAorMHgzYzAxMDAwMiwgMHhhYzIwOGZjNCwgMHgzYzAxMDAwMiwgMHhhYzI0OGY5YywKKzB4M2MwMTAwMDIsIDB4MTAwMDAwMGIsIDB4YWMyMDhmZDAsIDB4M2MwMTAwMDIsCisweGFjMjI4ZmQwLCAweDNjMDEwMDAyLCAweGFjMjA4ZmMwLCAweDNjMDEwMDAyLAorMHhhYzIwOGZhMCwgMHgzYzAxMDAwMiwgMHhhYzIwOGZjNCwgMHgzYzAxMDAwMiwKKzB4YWMyMDhmOWMsIDB4M2MwMzAwMDIsIDB4OGM2MzhmOTAsIDB4M2MwMjAwMDIsCisweDhjNDI4Zjk0LCAweDUwNjIwMDA0LCAweDI0NjNmZmZmLCAweDNjMDEwMDAyLAorMHhhYzIzOGY5NCwgMHgyNDYzZmZmZiwgMHgyYzYyMDAwZSwgMHgxMDQwMDE5NCwKKzB4MzEwODAsIDB4M2MwMTAwMDEsIDB4MjIwODIxLCAweDhjMjI2YzAwLAorMHg0MDAwMDgsIDB4MCwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMiwKKzB4YWMyMDhmYzAsIDB4M2MwMTAwMDIsIDB4YWMyMDhmYTAsIDB4M2MwMTAwMDIsCisweGFjMjA4ZjljLCAweDNjMDEwMDAyLCAweGFjMjA4ZmM0LCAweDNjMDEwMDAyLAorMHhhYzIwOGZiOCwgMHgzYzAxMDAwMiwgMHhhYzIwOGZiMCwgMHhhZjgwMDIyNCwKKzB4M2MwMTAwMDIsIDB4YWMyMjhmOTAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmZDAsCisweDE0NDAwMDRmLCAweDNjMDJmZGZmLCAweDM0NDJmZmZmLCAweGMwMDNkYWYsCisweDI4MmEwMjQsIDB4YWY4MDAyMDQsIDB4OGY4MjAyMDAsIDB4MjQwM2ZmZmQsCisweDQzMTAyNCwgMHhhZjgyMDIwMCwgMHgzYzAxMDAwMiwgMHhhYzIwOGZlMCwKKzB4OGY4MzAwNTQsIDB4M2MwMjAwMDIsIDB4OGM0MjhmYjgsIDB4MjQwNDAwMDEsCisweDNjMDEwMDAyLCAweGFjMjQ4ZmNjLCAweDI0NDIwMDAxLCAweDNjMDEwMDAyLAorMHhhYzIyOGZiOCwgMHgyYzQyMDAwNCwgMHgzYzAxMDAwMiwgMHhhYzIzOGZiNCwKKzB4MTQ0MDAwMDYsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDEsIDB4YWMyNDZkOWMsCisweDNjMDEwMDAyLCAweDEwMDAwMTVlLCAweGFjMjA4ZmI4LCAweDNjMDEwMDAyLAorMHgxMDAwMDE1YiwgMHhhYzIyOGY5MCwgMHg4ZjgzMDA1NCwgMHgzYzAyMDAwMiwKKzB4OGM0MjhmYjQsIDB4MjQ2M2Q4ZjAsIDB4NDMxMDIzLCAweDJjNDIyNzEwLAorMHgxNDQwMDAwMywgMHgyNDAyMDAwNCwgMHgzYzAxMDAwMiwgMHhhYzIyOGY5MCwKKzB4M2MwMjAwMDIsIDB4OGM0MjhmZDAsIDB4MTQ0MDAwMjEsIDB4M2MwMmZkZmYsCisweDM0NDJmZmZmLCAweDEwMDAwMTRhLCAweDI4MmEwMjQsIDB4M2MwNDAwMDEsCisweDhjODQ2ZjIwLCAweDNjMDEwMDAyLCAweGMwMDUwODQsIDB4YWMyMDhmYTgsCisweDNjMDIwMDAyLCAweDhjNDI4ZmRjLCAweGFmODIwMjA0LCAweDNjMDIwMDAyLAorMHg4YzQyOGZkMCwgMHgxNDQwMDAxMiwgMHgzYzAzZmRmZiwgMHg4ZjgyMDIwNCwKKzB4MzQ2M2ZmZmYsIDB4MzA0MjAwMzAsIDB4MTQ0MDAxMmYsIDB4MjgzYTAyNCwKKzB4M2MwMzAwMDIsIDB4OGM2MzhmZGMsIDB4MjQwMjAwMDUsIDB4M2MwMTAwMDIsCisweGFjMjI4ZjkwLCAweDNjMDEwMDAyLCAweDEwMDAwMTMxLCAweGFjMjM4ZmUwLAorMHgzYzAyMDAwMiwgMHg4YzQyOGZkMCwgMHgxMDQwMDAxMCwgMHgzYzAyZmRmZiwKKzB4M2MwMjAwMDEsIDB4OGM0MjZlM2MsIDB4MjQ0MjAwMDEsIDB4M2MwMTAwMDEsCisweGFjMjI2ZTNjLCAweDJjNDIwMDAyLCAweDE0NDAwMTI1LCAweDI0MDIwMDAxLAorMHgzYzAxMDAwMSwgMHhhYzIyNmU0NCwgMHgzYzAxMDAwMSwgMHhhYzIwNmUzYywKKzB4M2MwMTAwMDEsIDB4MTAwMDAxMWUsIDB4YWMyMjZkOWMsIDB4M2MwMzAwMDIsCisweDhjNjM4ZmMwLCAweDM0NDJmZmZmLCAweDEwNjAwMTE5LCAweDI4MmEwMjQsCisweDNjMDIwMDAyLCAweDhjNDI4ZjljLCAweDEwNDAwMTE1LCAweDAsCisweDNjMDEwMDAyLCAweGFjMjI4ZmM4LCAweDI0MDIwMDAzLCAweDNjMDEwMDAyLAorMHhhYzIyOGZhMCwgMHgxMDAwMDBiOCwgMHgyNDAyMDAwNiwgMHgzYzAxMDAwMiwKKzB4YWMyMDhmYTgsIDB4OGY4MjAyMDQsIDB4MzQ0MjAwNDAsIDB4YWY4MjAyMDQsCisweDNjMDIwMDAyLCAweDhjNDI4ZmUwLCAweDI0MDMwMDA3LCAweDNjMDEwMDAyLAorMHhhYzIzOGY5MCwgMHgzNDQyMDA0MCwgMHgzYzAxMDAwMiwgMHhhYzIyOGZlMCwKKzB4M2MwMjAwMDIsIDB4OGM0MjhmYzAsIDB4MTA0MDAwMDUsIDB4MCwKKzB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsIDB4MTA0MDAwZjAsIDB4MjQwMjAwMDIsCisweDNjMDUwMDAyLCAweDI0YTU4ZmEwLCAweDhjYTIwMDAwLCAweDJjNDI0ZTIxLAorMHgxMDQwMDBlYSwgMHgyNDAyMDAwMiwgMHgzYzAyMDAwMiwgMHg4YzQyOGZjNCwKKzB4MTA0MDAwZWYsIDB4MjQwNGZmYmYsIDB4M2MwMjAwMDIsIDB4OGM0MjhmOWMsCisweDNjMDMwMDAyLCAweDhjNjM4ZmM4LCAweDQ0MTAyNCwgMHg2NDE4MjQsCisweDEwNDMwMDA0LCAweDI0MDIwMDAxLCAweDNjMDEwMDAyLCAweDEwMDAwMGU0LAorMHhhYzIyOGY5MCwgMHgyNDAyMDAwMywgMHhhY2EyMDAwMCwgMHgyNDAyMDAwOCwKKzB4M2MwMTAwMDIsIDB4YWMyMjhmOTAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmY2MsCisweDEwNDAwMDBjLCAweDI0MDIwMDAxLCAweDNjMDQwMDAyLCAweGMwMDUwOTEsCisweDhjODQ4ZjljLCAweDNjMDIwMDAyLCAweDhjNDI4ZmU4LCAweDE0NDAwMDA1LAorMHgyNDAyMDAwMSwgMHgzYzAyMDAwMiwgMHg4YzQyOGZlNCwgMHgxMDQwMDAwNiwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOWMsIDB4M2MwMTAwMDIsCisweDEwMDAwMGNiLCAweGFjMjA4ZmI4LCAweDNjMDIwMDAyLCAweDhjNDI4ZmIwLAorMHgzYzAzMDAwMiwgMHg4YzYzOGY5YywgMHgyYzQyMDAwMSwgMHgyMTBjMCwKKzB4MzA2MzAwMDgsIDB4M2MwMTAwMDIsIDB4YWMyMjhmYjAsIDB4M2MwMTAwMDIsCisweGFjMjM4ZmFjLCAweDhmODMwMDU0LCAweDI0MDIwMDA5LCAweDNjMDEwMDAyLAorMHhhYzIyOGY5MCwgMHgzYzAxMDAwMiwgMHgxMDAwMDBiOSwgMHhhYzIzOGZiNCwKKzB4OGY4MzAwNTQsIDB4M2MwMjAwMDIsIDB4OGM0MjhmYjQsIDB4MjQ2M2Q4ZjAsCisweDQzMTAyMywgMHgyYzQyMjcxMCwgMHgxNDQwMDA5ZiwgMHgwLAorMHgzYzAyMDAwMiwgMHg4YzQyOGZjMCwgMHgxMDQwMDAwNSwgMHgwLAorMHgzYzAyMDAwMiwgMHg4YzQyOGY5YywgMHgxMDQwMDBhMCwgMHgyNDAyMDAwMiwKKzB4M2MwMzAwMDIsIDB4MjQ2MzhmYTAsIDB4OGM2MjAwMDAsIDB4MmM0MjRlMjEsCisweDEwNDAwMDlhLCAweDI0MDIwMDAyLCAweDNjMDIwMDAyLCAweDhjNDI4ZmNjLAorMHgxMDQwMDAwZSwgMHgwLCAweDNjMDIwMDAyLCAweDhjNDI4ZjljLAorMHgzYzAxMDAwMiwgMHhhYzIwOGZjYywgMHgzMDQyMDA4MCwgMHgxMDQwMDAyZiwKKzB4MjQwMjAwMGMsIDB4OGY4MjAyMDQsIDB4MzA0MjAwODAsIDB4MTQ0MDAwMGMsCisweDI0MDIwMDAzLCAweDEwMDAwMDI5LCAweDI0MDIwMDBjLCAweDNjMDIwMDAyLAorMHg4YzQyOGY5YywgMHgzMDQyMDA4MCwgMHgxNDQwMDAwNSwgMHgyNDAyMDAwMywKKzB4OGY4MjAyMDQsIDB4MzA0MjAwODAsIDB4MTA0MDAwMWYsIDB4MjQwMjAwMDMsCisweGFjNjIwMDAwLCAweDI0MDIwMDBhLCAweDNjMDEwMDAyLCAweGFjMjI4ZjkwLAorMHgzYzA0MDAwMiwgMHgyNDg0OGZkOCwgMHg4YzgyMDAwMCwgMHgzYzAzMDAwMiwKKzB4OGM2MzhmYjAsIDB4NDMxMDI1LCAweGFmODIwMjA0LCAweDhjODMwMDAwLAorMHgzYzA0MDAwMiwgMHg4Yzg0OGZiMCwgMHgyNDAyMDAwYiwgMHgzYzAxMDAwMiwKKzB4YWMyMjhmOTAsIDB4NjQxODI1LCAweDNjMDEwMDAyLCAweGFjMjM4ZmUwLAorMHgzYzA1MDAwMiwgMHgyNGE1OGZhMCwgMHg4Y2EyMDAwMCwgMHgyYzQyNGUyMSwKKzB4MTA0MDAwNjYsIDB4MjQwMjAwMDIsIDB4M2MwMjAwMDIsIDB4OGM0MjhmZDAsCisweDEwNDAwMDA1LCAweDAsIDB4MjQwMjAwMGMsIDB4M2MwMTAwMDIsCisweDEwMDAwMDY3LCAweGFjMjI4ZjkwLCAweDNjMDIwMDAyLCAweDhjNDI4ZmMwLAorMHgxMDQwMDA2MywgMHgwLCAweDNjMDQwMDAyLCAweDhjODQ4ZjljLAorMHgxMDgwMDA1NSwgMHgzMDgyMDAwOCwgMHgzYzAzMDAwMiwgMHg4YzYzOGZhYywKKzB4MTA2MjAwNWIsIDB4MjQwMjAwMDMsIDB4M2MwMTAwMDIsIDB4YWMyNDhmYzgsCisweGFjYTIwMDAwLCAweDI0MDIwMDA2LCAweDNjMDEwMDAyLCAweDEwMDAwMDU0LAorMHhhYzIyOGY5MCwgMHg4ZjgyMDIwMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIwMCwKKzB4OGY4MzAwNTQsIDB4MjQwMjAwMGQsIDB4M2MwMTAwMDIsIDB4YWMyMjhmOTAsCisweDNjMDEwMDAyLCAweGFjMjM4ZmI0LCAweDhmODMwMDU0LCAweDNjMDIwMDAyLAorMHg4YzQyOGZiNCwgMHgyNDYzZDhmMCwgMHg0MzEwMjMsIDB4MmM0MjI3MTAsCisweDE0NDAwMDMxLCAweDAsIDB4M2MwMjAwMDIsIDB4OGM0MjhmZDAsCisweDEwNDAwMDIwLCAweDI0MDIwMDBlLCAweDNjMDMwMDAyLCAweDhjNjM4ZmU0LAorMHgzYzAxMDAwMiwgMHgxNDYwMDAxNSwgMHhhYzIyOGY5MCwgMHhjMDAzZTZkLAorMHgwLCAweDNjMDUwMDAxLCAweDhjYTU2ZDk4LCAweGMwMDUyOWIsCisweDIwMjEsIDB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MjQwMjAwMDQsCisweDE0NjIwMDA1LCAweDI0MDNmZmZiLCAweDNjMDIwMDAxLCAweDhjNDI2ZDk0LAorMHgxMDAwMDAwMywgMHgyNDAzZmZmNywgMHgzYzAyMDAwMSwgMHg4YzQyNmQ5NCwKKzB4NDMxMDI0LCAweDNjMDEwMDAxLCAweGFjMjI2ZDk0LCAweDhmODMwMjI0LAorMHgzYzAyMDIwMCwgMHgzYzAxMDAwMiwgMHhhYzIzOGZlYywgMHgxMDAwMDAyMCwKKzB4MjgyYTAyNSwgMHgzYzAyMDAwMiwgMHg4YzQyOGZjMCwgMHgxMDQwMDAwNSwKKzB4MCwgMHgzYzAyMDAwMiwgMHg4YzQyOGY5YywgMHgxMDQwMDAwZiwKKzB4MjQwMjAwMDIsIDB4M2MwMjAwMDIsIDB4OGM0MjhmYTAsIDB4MmM0MjRlMjEsCisweDEwNDAwMDBhLCAweDI0MDIwMDAyLCAweDNjMDIwMDAyLCAweDhjNDI4ZmMwLAorMHgxMDQwMDAwZiwgMHgwLCAweDNjMDIwMDAyLCAweDhjNDI4ZjljLAorMHgxNDQwMDAwYiwgMHgwLCAweDI0MDIwMDAyLCAweDNjMDEwMDAyLAorMHgxMDAwMDAwNywgMHhhYzIyOGY5MCwgMHgzYzAyMDAwMiwgMHg4YzQyOGZjMCwKKzB4MTA0MDAwMDMsIDB4MCwgMHhjMDAzZGFmLCAweDAsCisweDhmODIwMjIwLCAweDNjMDNmNzAwLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwKKzB4OGZiZjAwMTAsIDB4M2UwMDAwOCwgMHgyN2JkMDAxOCwgMHgzYzAzMDAwMiwKKzB4MjQ2MzhmZTgsIDB4OGM2MjAwMDAsIDB4MTA0MDAwMDUsIDB4MzQ0MjIwMDAsCisweDNjMDEwMDAyLCAweGFjMjI4ZmRjLCAweDEwMDAwMDAzLCAweGFjNjAwMDAwLAorMHgzYzAxMDAwMiwgMHhhYzI0OGZkYywgMHgzZTAwMDA4LCAweDAsCisweDI3YmRmZmUwLCAweDMwODIwMDMwLCAweGFmYmYwMDE4LCAweDNjMDEwMDAyLAorMHhhYzIyOGZlNCwgMHgxNDQwMDA2NywgMHgzYzAyZmZmZiwgMHgzNDQyMWYwZSwKKzB4ODIxMDI0LCAweDE0NDAwMDYxLCAweDI0MDIwMDMwLCAweDMwODIyMDAwLAorMHgxMDQwMDA1ZCwgMHgzMDgzODAwMCwgMHgzMWEwMiwgMHgzMDgyMDAwMSwKKzB4MjEyMDAsIDB4M2MwNDAwMDEsIDB4OGM4NDZmMjAsIDB4NjIxODI1LAorMHgzMzFjMiwgMHgzYzAzMDAwMSwgMHgyNDYzNmU0OCwgMHgzMDgyODAwMCwKKzB4MjEyMDIsIDB4MzA4NDAwMDEsIDB4NDIyMDAsIDB4NDQxMDI1LAorMHgyMzljMiwgMHg2MTA4MCwgMHg0MzEwMjEsIDB4NDcxMDIxLAorMHg5MDQzMDAwMCwgMHgyNDAyMDAwMSwgMHgxMDYyMDAyNSwgMHgwLAorMHgxMDYwMDAwNywgMHgyNDAyMDAwMiwgMHgxMDYyMDAxMywgMHgyNDAyMDAwMywKKzB4MTA2MjAwMmMsIDB4M2MwNTAwMGYsIDB4MTAwMDAwMzcsIDB4MCwKKzB4OGY4MjAyMDAsIDB4MjQwM2ZlZmYsIDB4NDMxMDI0LCAweGFmODIwMjAwLAorMHg4ZjgyMDIyMCwgMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsCisweGFmODIwMjIwLCAweDNjMDEwMDAyLCAweGFjMjA5MDA0LCAweDNjMDEwMDAyLAorMHgxMDAwMDAzNCwgMHhhYzIwOTAwYywgMHg4ZjgyMDIwMCwgMHgzNDQyMDEwMCwKKzB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsIDB4M2MwM2ZmZmUsIDB4MzQ2M2ZmZmYsCisweDQzMTAyNCwgMHhhZjgyMDIyMCwgMHgyNDAyMDEwMCwgMHgzYzAxMDAwMiwKKzB4YWMyMjkwMDQsIDB4M2MwMTAwMDIsIDB4MTAwMDAwMjYsIDB4YWMyMDkwMGMsCisweDhmODIwMjAwLCAweDI0MDNmZWZmLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwKKzB4OGY4MjAyMjAsIDB4M2MwMzAwMDEsIDB4NDMxMDI1LCAweGFmODIwMjIwLAorMHgzYzAxMDAwMiwgMHhhYzIwOTAwNCwgMHgzYzAxMDAwMiwgMHgxMDAwMDAxOSwKKzB4YWMyMzkwMGMsIDB4OGY4MjAyMDAsIDB4MzQ0MjAxMDAsIDB4YWY4MjAyMDAsCisweDhmODIwMjIwLCAweDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwKKzB4MjQwMjAxMDAsIDB4M2MwMTAwMDIsIDB4YWMyMjkwMDQsIDB4M2MwMTAwMDIsCisweDEwMDAwMDBjLCAweGFjMjM5MDBjLCAweDM0YTVmZmZmLCAweDNjMDQwMDAxLAorMHgyNDg0NmMzOCwgMHhhZmEzMDAxMCwgMHhjMDAyYjNiLCAweGFmYTAwMDE0LAorMHgxMDAwMDAwNCwgMHgwLCAweDI0MDIwMDMwLCAweDNjMDEwMDAyLAorMHhhYzIyOGZlOCwgMHg4ZmJmMDAxOCwgMHgzZTAwMDA4LCAweDI3YmQwMDIwLAorMHgwLCAweDAsIDB4MCwgMHgyN2JkZmZjOCwKKzB4YWZiMjAwMjgsIDB4ODA5MDIxLCAweGFmYjMwMDJjLCAweGEwOTgyMSwKKzB4YWZiMDAwMjAsIDB4YzA4MDIxLCAweDNjMDQwMDAxLCAweDI0ODQ2YzUwLAorMHgzYzA1MDAwOSwgMHgzYzAyMDAwMSwgMHg4YzQyNmQ5OCwgMHgzNGE1OTAwMSwKKzB4MjQwMzAyMSwgMHgyNjAzODIxLCAweGFmYmYwMDMwLCAweGFmYjEwMDI0LAorMHhhN2EwMDAxYSwgMHhhZmIwMDAxNCwgMHhjMDAyYjNiLCAweGFmYTIwMDEwLAorMHgyNDAyMDAwMiwgMHgxMjYyMDA4MywgMHgyZTYyMDAwMywgMHgxMDQwMDAwNSwKKzB4MjQwMjAwMDEsIDB4MTI2MjAwMGEsIDB4MCwgMHgxMDAwMDE3MywKKzB4MCwgMHgyNDAyMDAwNCwgMHgxMjYyMDBmOCwgMHgyNDAyMDAwOCwKKzB4MTI2MjAwZjcsIDB4M2MwMmZmZWMsIDB4MTAwMDAxNmMsIDB4MCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZkOTQsIDB4MzA0MjAwMDIsIDB4MTQ0MDAwMDQsCisweDEyODk0MCwgMHgzYzAyZmZmYiwgMHgzNDQyZmZmZiwgMHgyMDI4MDI0LAorMHgzYzAxMDAwMiwgMHgzMTA4MjEsIDB4YWMzMDhmZmMsIDB4M2MwMjQwMDAsCisweDIwMjEwMjQsIDB4MTA0MDAwNGUsIDB4MTAyM2MyLCAweDMwODQwMDMwLAorMHgxMDEzODIsIDB4MzA0MjAwMWMsIDB4M2MwMzAwMDEsIDB4MjQ2MzZkZDgsCisweDQzMTAyMSwgMHg4MjM4MjEsIDB4M2MwMjAwMjAsIDB4MjAyMTAyNCwKKzB4MTA0MDAwMDYsIDB4MjQwMjAxMDAsIDB4M2MwMTAwMDIsIDB4MzEwODIxLAorMHhhYzIyOTAwMCwgMHgxMDAwMDAwNSwgMHgzYzAyMDA4MCwgMHgzYzAxMDAwMiwKKzB4MzEwODIxLCAweGFjMjA5MDAwLCAweDNjMDIwMDgwLCAweDIwMjEwMjQsCisweDEwNDAwMDA2LCAweDEyMTk0MCwgMHgzYzAyMDAwMSwgMHgzYzAxMDAwMiwKKzB4MjMwODIxLCAweDEwMDAwMDA1LCAweGFjMjI5MDA4LCAweDEyMTE0MCwKKzB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDA4LCAweDk0ZTQwMDAwLAorMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwgMHgyNDAyMDAwNSwgMHgxMDYyMDAxMCwKKzB4YTdhNDAwMTgsIDB4MzIwMjQwMDAsIDB4MTA0MDAwMDIsIDB4MzQ4MjQwMDAsCisweGE3YTIwMDE4LCAweDI0MDQwMDAxLCAweDk0ZTIwMDAyLCAweDI0MDUwMDA0LAorMHgyNGU2MDAwMiwgMHgzNDQyMDAwMSwgMHhjMDA0NWJlLCAweGE0ZTIwMDAyLAorMHgyNDA0MDAwMSwgMHgyODIxLCAweGMwMDQ1YmUsIDB4MjdhNjAwMTgsCisweDNjMDIwMDAxLCAweDhjNDI2ZDk4LCAweDI0MTEwMDAxLCAweDNjMDEwMDAxLAorMHhhYzMxNmRhNCwgMHgxNDUzMDAwNCwgMHgzMjAyODAwMCwgMHhjMDAzZGFmLAorMHgwLCAweDMyMDI4MDAwLCAweDEwNDAwMTFjLCAweDAsCisweGMwMDNkYWYsIDB4MCwgMHgzYzAzMDAwMSwgMHg4YzYzNmY0MCwKKzB4MjQwMjAwMDUsIDB4MTA2MjAxMTUsIDB4MjQwMjAwMDIsIDB4M2MwMTAwMDEsCisweGFjMzE2ZDljLCAweDNjMDEwMDAxLCAweDEwMDAwMTEwLCAweGFjMjI2ZDk4LAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwNCwgMHgyN2IwMDAxYSwgMHhjMDA0NWJlLAorMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDViZSwKKzB4MjAwMzAyMSwgMHgzYzAyMDAwMiwgMHg1MTEwMjEsIDB4OGM0MjhmZjQsCisweDNjMDQwMDAxLCAweDhjODQ2ZDk4LCAweDNjMDNiZmZmLCAweDM0NjNmZmZmLAorMHgzYzAxMDAwMSwgMHhhYzMzNmRhNCwgMHg0MzEwMjQsIDB4M2MwMTAwMDIsCisweDMxMDgyMSwgMHgxMDkzMDBmNywgMHhhYzIyOGZmNCwgMHgxMDAwMDBmNywKKzB4MCwgMHgzYzAyMjAwMCwgMHgyMDIxMDI0LCAweDEwNDAwMDA1LAorMHgyNDAyMDAwMSwgMHgzYzAxMDAwMSwgMHhhYzIyNmYxYywgMHgxMDAwMDAwNCwKKzB4MTI4OTQwLCAweDNjMDEwMDAxLCAweGFjMjA2ZjFjLCAweDEyODk0MCwKKzB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMzA4ZmY4LCAweDNjMDI0MDAwLAorMHgyMDIxMDI0LCAweDE0NDAwMDE0LCAweDAsIDB4M2MwMjAwMDEsCisweDhjNDI2ZjFjLCAweDEwNDAwMDA2LCAweDI0MDQwMDA0LCAweDI0MDUwMDAxLAorMHhjMDA0ZGRiLCAweDI0MDYyMDAwLCAweDI0MDIwMDAxLCAweGFlZTIwNGI4LAorMHgzYzAyMDAwMiwgMHg1MTEwMjEsIDB4OGM0MjhmZjAsIDB4M2MwM2JmZmYsCisweDM0NjNmZmZmLCAweDQzMTAyNCwgMHgzYzAxMDAwMiwgMHgzMTA4MjEsCisweDEwMDAwMGQwLCAweGFjMjI4ZmYwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjFjLAorMHgxMDQwMDAyOCwgMHgzYzAzMDBhMCwgMHgyMDMxMDI0LCAweDU0NDMwMDBkLAorMHgzYzAyMDAyMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYyMCwgMHgyNDAzMDEwMCwKKzB4M2MwMTAwMDIsIDB4MzEwODIxLCAweGFjMjM5MDA0LCAweDNjMDMwMDAxLAorMHgzYzAxMDAwMiwgMHgzMTA4MjEsIDB4YWMyMzkwMGMsIDB4MTAwMDAwMTUsCisweDM0NDIwNDAwLCAweDIwMjEwMjQsIDB4MTA0MDAwMDgsIDB4MjQwMzAxMDAsCisweDNjMDIwMDAxLCAweDhjNDI2ZjIwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwKKzB4YWMyMzkwMDQsIDB4MTAwMDAwMGIsIDB4MzQ0MjA4MDAsIDB4M2MwMjAwODAsCisweDIwMjEwMjQsIDB4MTA0MDAwMmUsIDB4M2MwMzAwMDEsIDB4M2MwMjAwMDEsCisweDhjNDI2ZjIwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgMHhhYzIzOTAwYywKKzB4MzQ0MjBjMDAsIDB4M2MwMTAwMDEsIDB4YWMyMjZmMjAsIDB4MTAwMDAwMjUsCisweDI0MDQwMDAxLCAweDNjMDIwMDIwLCAweDIwMjEwMjQsIDB4MTA0MDAwMDYsCisweDI0MDIwMTAwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgMHhhYzIyOTAwNCwKKzB4MTAwMDAwMDUsIDB4M2MwMjAwODAsIDB4M2MwMTAwMDIsIDB4MzEwODIxLAorMHhhYzIwOTAwNCwgMHgzYzAyMDA4MCwgMHgyMDIxMDI0LCAweDEwNDAwMDA3LAorMHgxMjE5NDAsIDB4M2MwMjAwMDEsIDB4M2MwMTAwMDIsIDB4MjMwODIxLAorMHhhYzIyOTAwYywgMHgxMDAwMDAwNiwgMHgyNDA0MDAwMSwgMHgxMjExNDAsCisweDNjMDEwMDAyLCAweDIyMDgyMSwgMHhhYzIwOTAwYywgMHgyNDA0MDAwMSwKKzB4MjgyMSwgMHgyN2IwMDAxZSwgMHhjMDA0NTdjLCAweDIwMDMwMjEsCisweDI0MDQwMDAxLCAweDI4MjEsIDB4YzAwNDU3YywgMHgyMDAzMDIxLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwMSwgMHgyN2IwMDAxYywgMHhjMDA0NTdjLAorMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweGMwMDQ1N2MsCisweDIwMDMwMjEsIDB4MTAwMDAwNzcsIDB4MCwgMHgzYzAyZmZlYywKKzB4MzQ0MmZmZmYsIDB4MjAyODAyNCwgMHgzYzAyMDAwOCwgMHgyMDI4MDI1LAorMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMzA4ZmY4LAorMHgzYzAyMjAwMCwgMHgyMDIxMDI0LCAweDEwNDAwMDA5LCAweDAsCisweDNjMDIwMDAxLCAweDhjNDI2ZTQ0LCAweDE0NDAwMDA1LCAweDI0MDIwMDAxLAorMHgzYzAxMDAwMSwgMHhhYzIyNmYxYywgMHgxMDAwMDAwNCwgMHgzYzAyNDAwMCwKKzB4M2MwMTAwMDEsIDB4YWMyMDZmMWMsIDB4M2MwMjQwMDAsIDB4MjAyMTAyNCwKKzB4MTQ0MDAwMWQsIDB4MjQwMjBlMDEsIDB4M2MwMzAwMDEsIDB4OGM2MzZmMWMsCisweGFmODIwMjM4LCAweDNjMDEwMDAxLCAweGFjMjA2ZGIwLCAweDEwNjAwMDA1LAorMHgyNDAyMjAyMCwgMHgzYzAxMDAwMSwgMHhhYzIyNmYyMCwgMHgyNDAyMDAwMSwKKzB4YWVlMjA0YjgsIDB4M2MwNGJmZmYsIDB4MTIxOTQwLCAweDNjMDIwMDAyLAorMHg0MzEwMjEsIDB4OGM0MjhmZjAsIDB4M2MwNTAwMDEsIDB4OGNhNTZkOTgsCisweDM0ODRmZmZmLCAweDQ0MTAyNCwgMHgzYzAxMDAwMiwgMHgyMzA4MjEsCisweGFjMjI4ZmYwLCAweDI0MDIwMDAxLCAweDEwYTIwMDQ0LCAweDAsCisweDEwMDAwMDQwLCAweDAsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMWMsCisweDEwNDAwMDFjLCAweDI0MDIyMDAwLCAweDNjMDEwMDAxLCAweGFjMjI2ZjIwLAorMHgzYzAzMDBhMCwgMHgyMDMxMDI0LCAweDE0NDMwMDA1LCAweDEyMTE0MCwKKzB4MzQwMmEwMDAsIDB4M2MwMTAwMDEsIDB4MTAwMDAwMmQsIDB4YWMyMjZmMjAsCisweDNjMDMwMDAyLCAweDYyMTgyMSwgMHg4YzYzOGZmOCwgMHgzYzAyMDAyMCwKKzB4NjIxMDI0LCAweDEwNDAwMDA0LCAweDI0MDIyMDAxLCAweDNjMDEwMDAxLAorMHgxMDAwMDAyMywgMHhhYzIyNmYyMCwgMHgzYzAyMDA4MCwgMHg2MjEwMjQsCisweDEwNDAwMDFmLCAweDM0MDJhMDAxLCAweDNjMDEwMDAxLCAweDEwMDAwMDFjLAorMHhhYzIyNmYyMCwgMHgzYzAyMDAyMCwgMHgyMDIxMDI0LCAweDEwNDAwMDA3LAorMHgxMjE5NDAsIDB4MjQwMjAxMDAsIDB4M2MwMTAwMDIsIDB4MjMwODIxLAorMHhhYzIyOTAwNCwgMHgxMDAwMDAwNiwgMHgzYzAyMDA4MCwgMHgxMjExNDAsCisweDNjMDEwMDAyLCAweDIyMDgyMSwgMHhhYzIwOTAwNCwgMHgzYzAyMDA4MCwKKzB4MjAyMTAyNCwgMHgxMDQwMDAwNiwgMHgxMjE5NDAsIDB4M2MwMjAwMDEsCisweDNjMDEwMDAyLCAweDIzMDgyMSwgMHgxMDAwMDAwNSwgMHhhYzIyOTAwYywKKzB4MTIxMTQwLCAweDNjMDEwMDAyLCAweDIyMDgyMSwgMHhhYzIwOTAwYywKKzB4M2MwMzAwMDEsIDB4OGM2MzZkOTgsIDB4MjQwMjAwMDEsIDB4MTA2MjAwMDMsCisweDAsIDB4YzAwM2RhZiwgMHgwLCAweDhmYmYwMDMwLAorMHg4ZmIzMDAyYywgMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgMHg4ZmIwMDAyMCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAzOCwgMHgyN2JkZmZiMCwgMHhhZmIzMDAzYywKKzB4OTgyMSwgMHhhZmI1MDA0MCwgMHhhODIxLCAweGFmYjEwMDM0LAorMHg4ODIxLCAweDI0MDIwMDAyLCAweGFmYmYwMDQ4LCAweGFmYmUwMDQ0LAorMHhhZmIyMDAzOCwgMHhhZmIwMDAzMCwgMHhhZmE0MDAyYywgMHhhN2EwMDAxYSwKKzB4YTdhMDAwMTgsIDB4YTdhMDAwMjAsIDB4YTdhMDAwMWUsIDB4YTdhMDAwMjIsCisweDEwYTIwMTMwLCAweGE3YTAwMDFjLCAweDJjYTIwMDAzLCAweDEwNDAwMDA1LAorMHgyNDAyMDAwMSwgMHgxMGEyMDAwYSwgMHgzYzAyNDAwMCwgMHgxMDAwMDI1ZCwKKzB4MjIwMTAyMSwgMHgyNDAyMDAwNCwgMHgxMGEyMDIwYSwgMHgyNDAyMDAwOCwKKzB4MTBhMjAyMDgsIDB4MjIwMTAyMSwgMHgxMDAwMDI1NiwgMHgwLAorMHg4ZmE4MDAyYywgMHg4ODE0MCwgMHgzYzAzMDAwMiwgMHg3MDE4MjEsCisweDhjNjM4ZmZjLCAweDYyMTAyNCwgMHgxNDQwMDAwOSwgMHgyNDA0MDAwMSwKKzB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsIDB4NjI4ODI0LCAweDNjMDEwMDAyLAorMHgzMDA4MjEsIDB4YWMzMThmZjQsIDB4MTAwMDAyNDYsIDB4MjIwMTAyMSwKKzB4MjQwNTAwMDEsIDB4YzAwNDU3YywgMHgyN2E2MDAxOCwgMHgyNDA0MDAwMSwKKzB4MjQwNTAwMDEsIDB4YzAwNDU3YywgMHgyN2E2MDAxOCwgMHg5N2EyMDAxOCwKKzB4MzA0MjAwMDQsIDB4MTA0MDAwZDksIDB4M2MxMTQwMDAsIDB4M2MwMjAwMDEsCisweDhjNDI2ZjQwLCAweDI0NDNmZmZmLCAweDJjNjIwMDA2LCAweDEwNDAwMGQ5LAorMHgzMTA4MCwgMHgzYzAxMDAwMSwgMHgyMjA4MjEsIDB4OGMyMjZjNjgsCisweDQwMDAwOCwgMHgwLCAweDI0MDQwMDAxLCAweDI0MDUwMDExLAorMHgyN2IwMDAxYSwgMHhjMDA0NTdjLCAweDIwMDMwMjEsIDB4MjQwNDAwMDEsCisweDI0MDUwMDExLCAweGMwMDQ1N2MsIDB4MjAwMzAyMSwgMHg5N2EzMDAxYSwKKzB4MzA2MjQwMDAsIDB4MTA0MDAwMDIsIDB4M2MxNTAwMTAsIDB4M2MxNTAwMDgsCisweDMwNjI4MDAwLCAweDEwNDAwMGFhLCAweDNjMTMwMDAxLCAweDEwMDAwMGE4LAorMHgzYzEzMDAwMiwgMHgyNDA0MDAwMSwgMHgyNDA1MDAxNCwgMHgyN2IwMDAxYSwKKzB4YzAwNDU3YywgMHgyMDAzMDIxLCAweDI0MDQwMDAxLCAweDI0MDUwMDE0LAorMHhjMDA0NTdjLCAweDIwMDMwMjEsIDB4OTdhMzAwMWEsIDB4MzA2MjEwMDAsCisweDEwNDAwMDAyLCAweDNjMTUwMDEwLCAweDNjMTUwMDA4LCAweDMwNjIwODAwLAorMHgxMDQwMDA5NywgMHgzYzEzMDAwMSwgMHgxMDAwMDA5NSwgMHgzYzEzMDAwMiwKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMTksIDB4MjdiMDAwMWMsIDB4YzAwNDU3YywKKzB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAxOSwgMHhjMDA0NTdjLAorMHgyMDAzMDIxLCAweDk3YTIwMDFjLCAweDMwNDMwNzAwLCAweDI0MDIwNDAwLAorMHgxMDYyMDAyNywgMHgyODYyMDQwMSwgMHgxMDQwMDAwZSwgMHgyNDAyMDIwMCwKKzB4MTA2MjAwMWYsIDB4Mjg2MjAyMDEsIDB4MTA0MDAwMDUsIDB4MjQwMjAxMDAsCisweDUwNjIwMDFlLCAweDNjMTMwMDAxLCAweDEwMDAwMDFlLCAweDI0MDQwMDAxLAorMHgyNDAyMDMwMCwgMHg1MDYyMDAxOSwgMHgzYzEzMDAwMiwgMHgxMDAwMDAxOSwKKzB4MjQwNDAwMDEsIDB4MjQwMjA2MDAsIDB4MTA2MjAwMGQsIDB4Mjg2MjA2MDEsCisweDEwNDAwMDA1LCAweDI0MDIwNTAwLCAweDUwNjIwMDBiLCAweDNjMTMwMDAyLAorMHgxMDAwMDAxMCwgMHgyNDA0MDAwMSwgMHgyNDAyMDcwMCwgMHgxNDYyMDAwZCwKKzB4MjQwNDAwMDEsIDB4M2MxMzAwMDQsIDB4MTAwMDAwMGEsIDB4M2MxNTAwMDgsCisweDEwMDAwMDA2LCAweDNjMTMwMDA0LCAweDEwMDAwMDA1LCAweDNjMTUwMDA4LAorMHgzYzEzMDAwMSwgMHgxMDAwMDAwMiwgMHgzYzE1MDAwOCwgMHgzYzE1MDAxMCwKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMTgsIDB4MjdiMDAwMWUsIDB4YzAwNDU3YywKKzB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAxOCwgMHhjMDA0NTdjLAorMHgyMDAzMDIxLCAweDhmYTgwMDJjLCAweDk3YTcwMDFlLCAweDgxMTQwLAorMHgzYzA2MDAwMiwgMHhjMjMwMjEsIDB4OGNjNjhmZjQsIDB4OTdhMjAwMjIsCisweDNjMTAwMDAxLCAweDI2MTA2YzVjLCAweDIwMDIwMjEsIDB4YWZhMjAwMTAsCisweDk3YTIwMDFjLCAweDNjMDUwMDBjLCAweDM0YTUwMzAzLCAweGMwMDJiM2IsCisweGFmYTIwMDE0LCAweDNjMDIwMDA0LCAweDE2NjIwMDEwLCAweDNjMDIwMDAxLAorMHg4Zjg0MDA1NCwgMHgyNDAzMDAwMSwgMHgyNDAyMDAwMiwgMHgzYzAxMDAwMSwKKzB4YWMyMzZkOWMsIDB4M2MwMTAwMDEsIDB4YWMyMjZkOTgsIDB4M2MwMTAwMDEsCisweGFjMjM2ZGE0LCAweDNjMDEwMDAxLCAweGFjMjM2ZTI0LCAweDNjMDEwMDAxLAorMHhhYzI0NmYzMCwgMHgxMDAwMDA0ZiwgMHgyYjM4ODI1LCAweDE2NjIwMDM5LAorMHgzYzAyODAwMCwgMHgzYzAyMDAwMSwgMHg4YzQyNmUyMCwgMHgxNDQwMDAxZSwKKzB4MjQwNDAwMTgsIDB4MjAyMSwgMHgyODIxLCAweGMwMDRkZGIsCisweDM0MDY4MDAwLCAweDhmODMwMDU0LCAweDhmODIwMDU0LCAweDJiMzg4MjUsCisweDEwMDAwMDAyLCAweDI0NjMwMDMyLCAweDhmODIwMDU0LCAweDYyMTAyMywKKzB4MmM0MjAwMzMsIDB4MTQ0MGZmZmMsIDB4MCwgMHg4ZjgzMDA1NCwKKzB4MjQwMjAwMDEsIDB4M2MwMTAwMDEsIDB4YWMyMjZlMjAsIDB4M2MwMTAwMDEsCisweGFjMjI2ZDljLCAweDNjMDEwMDAxLCAweGFjMjI2ZDk4LCAweDNjMDEwMDAxLAorMHhhYzIyNmRhNCwgMHgzYzAxMDAwMSwgMHhhYzIyNmUyNCwgMHgzYzAxMDAwMSwKKzB4MTAwMDAwMmMsIDB4YWMyMzZmMzAsIDB4MjgyMSwgMHhjMDA0ZGRiLAorMHgyNDA2MDQwNCwgMHgyMDIxLCAweDI0MDUwMDFlLCAweDI3YTYwMDE4LAorMHgyNDAyMDAwMiwgMHhjMDA0NWJlLCAweGE3YTIwMDE4LCAweDIwMjEsCisweDI4MjEsIDB4MjdhNjAwMTgsIDB4YzAwNDViZSwgMHhhN2EwMDAxOCwKKzB4MjQwNDAwMTgsIDB4MjQwNTAwMDIsIDB4YzAwNGRkYiwgMHgyNDA2MDAwNCwKKzB4M2MwMjgwMDAsIDB4MjIyMTAyNSwgMHgyYjMxODI1LCAweDEwMDAwMDE1LAorMHg0Mzg4MjUsIDB4MjIyMTAyNSwgMHgyNzUxODI1LCAweDQzODgyNSwKKzB4MjAwMjAyMSwgMHg5N2E2MDAxYywgMHgzYzA3MDAwMSwgMHg4Y2U3NmQ5OCwKKzB4M2MwNTAwMGMsIDB4MzRhNTAzMjYsIDB4YWZiMzAwMTAsIDB4YzAwMmIzYiwKKzB4YWZiMTAwMTQsIDB4MTAwMDAwMDcsIDB4MCwgMHgzYzExMDAwMiwKKzB4MjMwODgyMSwgMHg4ZTMxOGZmYywgMHgzYzAyN2ZmZiwgMHgzNDQyZmZmZiwKKzB4MjIyODgyNCwgMHgzYzAyMDAwMSwgMHg4YzQyNmRhOCwgMHgxMDQwMDAxZSwKKzB4MCwgMHgzYzAyMDAwMSwgMHg4YzQyNmYxYywgMHgxMDQwMDAwMiwKKzB4M2MwMjIwMDAsIDB4MjIyODgyNSwgMHg4ZmE4MDAyYywgMHg4MTE0MCwKKzB4M2MwMTAwMDIsIDB4MjIwODIxLCAweDhjMjI5MDAwLCAweDEwNDAwMDAzLAorMHgzYzAyMDAyMCwgMHgxMDAwMDAwNSwgMHgyMjI4ODI1LCAweDNjMDJmZmRmLAorMHgzNDQyZmZmZiwgMHgyMjI4ODI0LCAweDhmYTgwMDJjLCAweDgxMTQwLAorMHgzYzAxMDAwMiwgMHgyMjA4MjEsIDB4OGMyMjkwMDgsIDB4MTA0MDAwMDMsCisweDNjMDIwMDgwLCAweDEwMDAwMDA0LCAweDIyMjg4MjUsIDB4M2MwMmZmN2YsCisweDM0NDJmZmZmLCAweDIyMjg4MjQsIDB4OGZhODAwMmMsIDB4ODExNDAsCisweDNjMDEwMDAyLCAweDIyMDgyMSwgMHhhYzMxOGZmNCwgMHgxMDAwMDEzNSwKKzB4MjIwMTAyMSwgMHg4ZmE4MDAyYywgMHg4ZjE0MCwgMHgzYzAzMDAwMiwKKzB4N2UxODIxLCAweDhjNjM4ZmY4LCAweDNjMDI0MDAwLCAweDYyMTAyNCwKKzB4MTQ0MDAwMDksIDB4MjQwNDAwMDEsIDB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsCisweDYyODgyNCwgMHgzYzAxMDAwMiwgMHgzZTA4MjEsIDB4YWMzMThmZjAsCisweDEwMDAwMTI0LCAweDIyMDEwMjEsIDB4MjgyMSwgMHhjMDA0NTdjLAorMHgyN2E2MDAxOCwgMHgyNDA0MDAwMSwgMHgyODIxLCAweGMwMDQ1N2MsCisweDI3YTYwMDE4LCAweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweDI3YjIwMDIwLAorMHhjMDA0NTdjLCAweDI0MDMwMjEsIDB4MjQwNDAwMDEsIDB4MjQwNTAwMDEsCisweGMwMDQ1N2MsIDB4MjQwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAwNCwKKzB4MjdiMTAwMWUsIDB4YzAwNDU3YywgMHgyMjAzMDIxLCAweDI0MDQwMDAxLAorMHgyNDA1MDAwNCwgMHhjMDA0NTdjLCAweDIyMDMwMjEsIDB4MjQwNDAwMDEsCisweDI0MDUwMDA1LCAweDI3YjAwMDIyLCAweGMwMDQ1N2MsIDB4MjAwMzAyMSwKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMDUsIDB4YzAwNDU3YywgMHgyMDAzMDIxLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAxMCwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LAorMHgyNDA0MDAwMSwgMHgyNDA1MDAxMCwgMHhjMDA0NTdjLCAweDI3YTYwMDE4LAorMHgyNDA0MDAwMSwgMHgyNDA1MDAwYSwgMHhjMDA0NTdjLCAweDI0MDMwMjEsCisweDI0MDQwMDAxLCAweDI0MDUwMDBhLCAweGMwMDQ1N2MsIDB4MjQwMzAyMSwKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMTgsIDB4YzAwNDU3YywgMHgyMjAzMDIxLAorMHgyNDA0MDAwMSwgMHgyNDA1MDAxOCwgMHhjMDA0NTdjLCAweDIyMDMwMjEsCisweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweGMwMDQ1N2MsIDB4MjdhNjAwMTgsCisweDI0MDQwMDAxLCAweDI0MDUwMDAxLCAweGMwMDQ1N2MsIDB4MjdhNjAwMTgsCisweDk3YTIwMDE4LCAweDMwNDIwMDA0LCAweDEwNDAwMDY2LCAweDNjMTE0MDAwLAorMHgzYzAzMDAwMSwgMHg4YzYzNmYzNCwgMHgyNDAyMDAwNSwgMHgxNDYyMDA2NywKKzB4MjQwNDAwMDEsIDB4MjQwNTAwMTksIDB4MjdiMDAwMWMsIDB4YzAwNDU3YywKKzB4MjAwMzAyMSwgMHgyNDA0MDAwMSwgMHgyNDA1MDAxOSwgMHhjMDA0NTdjLAorMHgyMDAzMDIxLCAweDk3YTIwMDFjLCAweDMwNDMwNzAwLCAweDI0MDIwNDAwLAorMHgxMDYyMDAyNywgMHgyODYyMDQwMSwgMHgxMDQwMDAwZSwgMHgyNDAyMDIwMCwKKzB4MTA2MjAwMWYsIDB4Mjg2MjAyMDEsIDB4MTA0MDAwMDUsIDB4MjQwMjAxMDAsCisweDUwNjIwMDFlLCAweDNjMTMwMDAxLCAweDEwMDAwMDFlLCAweDNjMDIwMDA0LAorMHgyNDAyMDMwMCwgMHg1MDYyMDAxOSwgMHgzYzEzMDAwMiwgMHgxMDAwMDAxOSwKKzB4M2MwMjAwMDQsIDB4MjQwMjA2MDAsIDB4MTA2MjAwMGQsIDB4Mjg2MjA2MDEsCisweDEwNDAwMDA1LCAweDI0MDIwNTAwLCAweDUwNjIwMDBiLCAweDNjMTMwMDAyLAorMHgxMDAwMDAxMCwgMHgzYzAyMDAwNCwgMHgyNDAyMDcwMCwgMHgxNDYyMDAwZCwKKzB4M2MwMjAwMDQsIDB4M2MxMzAwMDQsIDB4MTAwMDAwMGEsIDB4M2MxNTAwMDgsCisweDEwMDAwMDA2LCAweDNjMTMwMDA0LCAweDEwMDAwMDA1LCAweDNjMTUwMDA4LAorMHgzYzEzMDAwMSwgMHgxMDAwMDAwMiwgMHgzYzE1MDAwOCwgMHgzYzE1MDAxMCwKKzB4M2MwMjAwMDQsIDB4MTI2MjAwMTcsIDB4M2MwMjgwMDAsIDB4OGY4MjAwNTQsCisweDI0MTAwMDAxLCAweDNjMDEwMDAxLCAweGFjMzA2ZDljLCAweDNjMDEwMDAxLAorMHhhYzMwNmQ5OCwgMHgzYzAxMDAwMSwgMHhhYzMwNmRhNCwgMHgzYzAxMDAwMSwKKzB4YWMzMDZlMjQsIDB4M2MwMTAwMDEsIDB4YWMyMjZmMzAsIDB4M2MwMjAwMDEsCisweDE2NjIwMDIyLCAweDI3NTg4MjUsIDB4MjAyMSwgMHgyODIxLAorMHhjMDA0ZGRiLCAweDM0MDY4MDAwLCAweDNjMDEwMDAxLCAweDEwMDAwMDFiLAorMHhhYzMwNmUyMCwgMHgyMjIxMDI1LCAweDJiMzE4MjUsIDB4NDM4ODI1LAorMHg5N2E2MDAxYywgMHgzYzAyMDAwMSwgMHg4YzQyNmYxYywgMHgzYzA3MDAwMSwKKzB4OGNlNzZkOTgsIDB4M2MwNDAwMDEsIDB4MjQ4NDZjNWMsIDB4YWZhMjAwMTAsCisweDk3YTIwMDFlLCAweDNjMDUwMDBjLCAweDM0YTUwMzIzLCAweDNjMDEwMDAxLAorMHhhYzIwNmUyMCwgMHhjMDAyYjNiLCAweGFmYTIwMDE0LCAweDEwMDAwMDA3LAorMHgwLCAweDNjMTEwMDAyLCAweDIzZTg4MjEsIDB4OGUzMThmZjAsCisweDNjMDI3ZmZmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsIDB4M2MwMjAwMDEsCisweDhjNDI2ZGE4LCAweDEwNDAwMDY5LCAweDAsIDB4M2MwMjAwMDEsCisweDhjNDI2ZjFjLCAweDEwNDAwMDAyLCAweDNjMDIyMDAwLCAweDIyMjg4MjUsCisweDhmYTgwMDJjLCAweDgxMTQwLCAweDNjMDEwMDAyLCAweDIyMDgyMSwKKzB4OGMyMjkwMDQsIDB4MTA0MDAwMDMsIDB4M2MwMjAwMjAsIDB4MTAwMDAwMDUsCisweDIyMjg4MjUsIDB4M2MwMmZmZGYsIDB4MzQ0MmZmZmYsIDB4MjIyODgyNCwKKzB4OGZhODAwMmMsIDB4ODExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLAorMHg4YzIyOTAwYywgMHgxMDQwMDAwMywgMHgzYzAyMDA4MCwgMHgxMDAwMDA0ZiwKKzB4MjIyODgyNSwgMHgzYzAyZmY3ZiwgMHgzNDQyZmZmZiwgMHgxMDAwMDA0YiwKKzB4MjIyODgyNCwgMHg4ZmE4MDAyYywgMHg4Mjk0MCwgMHgzYzAzMDAwMiwKKzB4NjUxODIxLCAweDhjNjM4ZmY4LCAweDNjMDI0MDAwLCAweDYyMTAyNCwKKzB4MTQ0MDAwMDgsIDB4M2MwMjdmZmYsIDB4MzQ0MmZmZmYsIDB4NjI4ODI0LAorMHgzYzAxMDAwMiwgMHgyNTA4MjEsIDB4YWMzMThmZjAsIDB4MTAwMDAwNDEsCisweDIyMDEwMjEsIDB4M2MwMjAwMDEsIDB4OGM0MjZkYTgsIDB4MTA0MDAwMzQsCisweDNjMTFjMDBjLCAweDNjMDIwMDAxLCAweDhjNDI2ZTQ0LCAweDNjMDRjMDBjLAorMHgzNDg0MjAwMCwgMHgzYzAzMDAwMSwgMHg4YzYzNmYxYywgMHgyMTAyYiwKKzB4MjEwMjMsIDB4NDQxMDI0LCAweDEwNjAwMDAzLCAweDUxODgyNSwKKzB4M2MwMjIwMDAsIDB4MjIyODgyNSwgMHgzYzAyMDAwMiwgMHg0NTEwMjEsCisweDhjNDI5MDA0LCAweDEwNDAwMDAzLCAweDNjMDIwMDIwLCAweDEwMDAwMDA0LAorMHgyMjI4ODI1LCAweDNjMDJmZmRmLCAweDM0NDJmZmZmLCAweDIyMjg4MjQsCisweDhmYTgwMDJjLCAweDgxMTQwLCAweDNjMDEwMDAyLCAweDIyMDgyMSwKKzB4OGMyMjkwMGMsIDB4MTA0MDAwMDMsIDB4M2MwMjAwODAsIDB4MTAwMDAwMDQsCisweDIyMjg4MjUsIDB4M2MwMmZmN2YsIDB4MzQ0MmZmZmYsIDB4MjIyODgyNCwKKzB4M2MwMjAwMDEsIDB4OGM0MjZlMzAsIDB4MTA0MDAwMDIsIDB4M2MwMjA4MDAsCisweDIyMjg4MjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZlMzQsIDB4MTA0MDAwMDIsCisweDNjMDIwNDAwLCAweDIyMjg4MjUsIDB4M2MwMjAwMDEsIDB4OGM0MjZlMzgsCisweDEwNDAwMDA2LCAweDNjMDIwMTAwLCAweDEwMDAwMDA0LCAweDIyMjg4MjUsCisweDNjMDI3ZmZmLCAweDM0NDJmZmZmLCAweDYyODgyNCwgMHg4ZmE4MDAyYywKKzB4ODExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMzE4ZmYwLAorMHgyMjAxMDIxLCAweDhmYmYwMDQ4LCAweDhmYmUwMDQ0LCAweDhmYjUwMDQwLAorMHg4ZmIzMDAzYywgMHg4ZmIyMDAzOCwgMHg4ZmIxMDAzNCwgMHg4ZmIwMDAzMCwKKzB4M2UwMDAwOCwgMHgyN2JkMDA1MCwgMHgyN2JkZmZkMCwgMHhhZmIyMDAyOCwKKzB4ODA5MDIxLCAweGFmYmYwMDJjLCAweGFmYjEwMDI0LCAweGFmYjAwMDIwLAorMHg4Zjg0MDIwMCwgMHgzYzEwMDAwMSwgMHg4ZTEwNmQ5OCwgMHg4Zjg2MDIyMCwKKzB4MjQwMjAwMDIsIDB4MTIwMjAwNWMsIDB4MmUwMjAwMDMsIDB4MTA0MDAwMDUsCisweDI0MDIwMDAxLCAweDEyMDIwMDBhLCAweDEyMTk0MCwgMHgxMDAwMDEwYywKKzB4MCwgMHgyNDAyMDAwNCwgMHgxMjAyMDBiZiwgMHgyNDAyMDAwOCwKKzB4MTIwMjAwYmUsIDB4MTI4OTQwLCAweDEwMDAwMTA1LCAweDAsCisweDNjMDUwMDAyLCAweGEzMjgyMSwgMHg4Y2E1OGZmYywgMHgzYzEwMDAwMiwKKzB4MjAzODAyMSwgMHg4ZTEwOGZmNCwgMHgzYzAyNDAwMCwgMHhhMjEwMjQsCisweDEwNDAwMDM4LCAweDNjMDIwMDA4LCAweDIwMjEwMjQsIDB4MTA0MDAwMjAsCisweDM0ODQwMDAyLCAweDNjMDIwMDAyLCAweDQzMTAyMSwgMHg4YzQyOTAwMCwKKzB4MTA0MDAwMDUsIDB4MzQ4NDAwMjAsIDB4MzQ4NDAxMDAsIDB4M2MwMjAwMjAsCisweDEwMDAwMDA2LCAweDIwMjgwMjUsIDB4MjQwMmZlZmYsIDB4ODIyMDI0LAorMHgzYzAyZmZkZiwgMHgzNDQyZmZmZiwgMHgyMDI4MDI0LCAweDEyMTE0MCwKKzB4M2MwMTAwMDIsIDB4MjIwODIxLCAweDhjMjI5MDA4LCAweDEwNDAwMDA1LAorMHgzYzAyMDAwMSwgMHhjMjMwMjUsIDB4M2MwMjAwODAsIDB4MTAwMDAwMTYsCisweDIwMjgwMjUsIDB4M2MwMmZmZmUsIDB4MzQ0MmZmZmYsIDB4YzIzMDI0LAorMHgzYzAyZmY3ZiwgMHgzNDQyZmZmZiwgMHgxMDAwMDAwZiwgMHgyMDI4MDI0LAorMHgyNDAyZmVkZiwgMHg4MjIwMjQsIDB4M2MwMmZmZmUsIDB4MzQ0MmZmZmYsCisweGMyMzAyNCwgMHgzYzAyZmY1ZiwgMHgzNDQyZmZmZiwgMHgyMDI4MDI0LAorMHgzYzAxMDAwMiwgMHgyMzA4MjEsIDB4YWMyMDkwMDAsIDB4M2MwMTAwMDIsCisweDIzMDgyMSwgMHhhYzIwOTAwOCwgMHhhZjg0MDIwMCwgMHhhZjg2MDIyMCwKKzB4OGY4MjAyMjAsIDB4MzQ0MjAwMDIsIDB4YWY4MjAyMjAsIDB4MTAwMDAwMGEsCisweDEyMTE0MCwgMHgzYzAyYmZmZiwgMHgzNDQyZmZmZiwgMHg4ZjgzMDIwMCwKKzB4MjAyODAyNCwgMHgyNDAyZmZmZCwgMHg2MjE4MjQsIDB4YzAwM2RhZiwKKzB4YWY4MzAyMDAsIDB4MTIxMTQwLCAweDNjMDEwMDAyLCAweDIyMDgyMSwKKzB4MTAwMDAwYjcsIDB4YWMzMDhmZjQsIDB4M2MwMjAwMDEsIDB4OGM0MjZmMWMsCisweDEwNDAwMDY5LCAweDI0MDUwMDA0LCAweDI0MDQwMDAxLCAweGMwMDQ1N2MsCisweDI3YTYwMDE4LCAweDI0MDQwMDAxLCAweDI0MDUwMDA1LCAweGMwMDQ1N2MsCisweDI3YTYwMDFhLCAweDk3YTMwMDE4LCAweDk3YTIwMDFhLCAweDNjMDQwMDAxLAorMHgyNDg0NmU0OCwgMHgzMDYzMGMwMCwgMHgzMWE4MiwgMHgzMDQyMGMwMCwKKzB4MjEyODIsIDB4YTdhMjAwMWEsIDB4MjEwODAsIDB4NDQxMDIxLAorMHg0MzEwMjEsIDB4YTdhMzAwMTgsIDB4OTA0ODAwMDAsIDB4MjQwMjAwMDEsCisweDMxMDNmZmZmLCAweDEwNjIwMDI5LCAweDI4NjIwMDAyLCAweDEwNDAwMDA1LAorMHgwLCAweDEwNjAwMDA5LCAweDAsIDB4MTAwMDAwM2QsCisweDAsIDB4MTA3MDAwMTMsIDB4MjQwMjAwMDMsIDB4MTA2MjAwMmMsCisweDAsIDB4MTAwMDAwMzcsIDB4MCwgMHg4ZjgyMDIwMCwKKzB4MjQwM2ZlZmYsIDB4NDMxMDI0LCAweGFmODIwMjAwLCAweDhmODIwMjIwLAorMHgzYzAzZmZmZSwgMHgzNDYzZmZmZiwgMHg0MzEwMjQsIDB4YWY4MjAyMjAsCisweDNjMDEwMDAyLCAweGFjMjA5MDA0LCAweDNjMDEwMDAyLCAweDEwMDAwMDMyLAorMHhhYzIwOTAwYywgMHg4ZjgyMDIwMCwgMHgzNDQyMDEwMCwgMHhhZjgyMDIwMCwKKzB4OGY4MjAyMjAsIDB4M2MwM2ZmZmUsIDB4MzQ2M2ZmZmYsIDB4NDMxMDI0LAorMHhhZjgyMDIyMCwgMHgyNDAyMDEwMCwgMHgzYzAxMDAwMiwgMHhhYzIyOTAwNCwKKzB4M2MwMTAwMDIsIDB4MTAwMDAwMjQsIDB4YWMyMDkwMGMsIDB4OGY4MjAyMDAsCisweDI0MDNmZWZmLCAweDQzMTAyNCwgMHhhZjgyMDIwMCwgMHg4ZjgyMDIyMCwKKzB4M2MwMzAwMDEsIDB4NDMxMDI1LCAweGFmODIwMjIwLCAweDNjMDEwMDAyLAorMHhhYzIwOTAwNCwgMHgzYzAxMDAwMiwgMHgxMDAwMDAxNywgMHhhYzIzOTAwYywKKzB4OGY4MjAyMDAsIDB4MzQ0MjAxMDAsIDB4YWY4MjAyMDAsIDB4OGY4MjAyMjAsCisweDNjMDMwMDAxLCAweDQzMTAyNSwgMHhhZjgyMDIyMCwgMHgyNDAyMDEwMCwKKzB4M2MwMTAwMDIsIDB4YWMyMjkwMDQsIDB4M2MwMTAwMDIsIDB4MTAwMDAwMGEsCisweGFjMjM5MDBjLCAweDNjMDQwMDAxLCAweDI0ODQ2YzgwLCAweDk3YTYwMDFhLAorMHg5N2E3MDAxOCwgMHgzYzA1MDAwMSwgMHgzNGE1ZmZmZiwgMHhhZmE4MDAxMCwKKzB4YzAwMmIzYiwgMHhhZmEwMDAxNCwgMHg4ZjgyMDIwMCwgMHgzNDQyMDAwMiwKKzB4MTAwMDAwNGIsIDB4YWY4MjAyMDAsIDB4MTI4OTQwLCAweDNjMDUwMDAyLAorMHhiMTI4MjEsIDB4OGNhNThmZjgsIDB4M2MxMDAwMDIsIDB4MjExODAyMSwKKzB4OGUxMDhmZjAsIDB4M2MwMjQwMDAsIDB4YTIxMDI0LCAweDE0NDAwMDEwLAorMHgwLCAweDNjMDIwMDAxLCAweDhjNDI2ZjFjLCAweDE0NDAwMDA1LAorMHgzYzAyYmZmZiwgMHg4ZjgyMDIwMCwgMHgzNDQyMDAwMiwgMHhhZjgyMDIwMCwKKzB4M2MwMmJmZmYsIDB4MzQ0MmZmZmYsIDB4YzAwM2RhZiwgMHgyMDI4MDI0LAorMHgzYzAxMDAwMiwgMHgzMTA4MjEsIDB4MTAwMDAwMzEsIDB4YWMzMDhmZjAsCisweDNjMDIwMDAxLCAweDhjNDI2ZjFjLCAweDEwNDAwMDA1LCAweDNjMDIwMDIwLAorMHgzYzAyMDAwMSwgMHg4YzQyNmU0NCwgMHgxMDQwMDAyNSwgMHgzYzAyMDAyMCwKKzB4YTIxMDI0LCAweDEwNDAwMDA3LCAweDM0ODQwMDIwLCAweDI0MDIwMTAwLAorMHgzYzAxMDAwMiwgMHgzMTA4MjEsIDB4YWMyMjkwMDQsIDB4MTAwMDAwMDYsCisweDM0ODQwMTAwLCAweDNjMDEwMDAyLCAweDMxMDgyMSwgMHhhYzIwOTAwNCwKKzB4MjQwMmZlZmYsIDB4ODIyMDI0LCAweDNjMDIwMDgwLCAweGEyMTAyNCwKKzB4MTA0MDAwMDcsIDB4MTIxOTQwLCAweDNjMDIwMDAxLCAweDNjMDEwMDAyLAorMHgyMzA4MjEsIDB4YWMyMjkwMGMsIDB4MTAwMDAwMDgsIDB4YzIzMDI1LAorMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMjA5MDBjLAorMHgzYzAyZmZmZSwgMHgzNDQyZmZmZiwgMHhjMjMwMjQsIDB4YWY4NDAyMDAsCisweGFmODYwMjIwLCAweDhmODIwMjIwLCAweDM0NDIwMDAyLCAweGFmODIwMjIwLAorMHgxMjExNDAsIDB4M2MwMTAwMDIsIDB4MjIwODIxLCAweGFjMzA4ZmYwLAorMHg4ZmJmMDAyYywgMHg4ZmIyMDAyOCwgMHg4ZmIxMDAyNCwgMHg4ZmIwMDAyMCwKKzB4M2UwMDAwOCwgMHgyN2JkMDAzMCwgMHgwLCAweDE4MjEsCisweDMwODQwMGZmLCAweDI0MDVmZmRmLCAweDI0MDZmZmJmLCAweDY0MTAwNywKKzB4MzA0MjAwMDEsIDB4MTA0MDAwMDQsIDB4MCwgMHg4ZjgyMDA0NCwKKzB4MTAwMDAwMDMsIDB4MzQ0MjAwNDAsIDB4OGY4MjAwNDQsIDB4NDYxMDI0LAorMHhhZjgyMDA0NCwgMHg4ZjgyMDA0NCwgMHgzNDQyMDAyMCwgMHhhZjgyMDA0NCwKKzB4OGY4MjAwNDQsIDB4NDUxMDI0LCAweGFmODIwMDQ0LCAweDI0NjMwMDAxLAorMHgyODYyMDAwOCwgMHg1NDQwZmZlZSwgMHg2NDEwMDcsIDB4M2UwMDAwOCwKKzB4MCwgMHgyYzgyMDAwOCwgMHgxMDQwMDAxYiwgMHgwLAorMHgyNDA1ZmZkZiwgMHgyNDA2ZmZiZiwgMHg0MTg4MCwgMHgzYzAyMDAwMSwKKzB4MjQ0MjZlNjAsIDB4NjIxODIxLCAweDI0NjQwMDA0LCAweDkwNjIwMDAwLAorMHgxMDQwMDAwNCwgMHgwLCAweDhmODIwMDQ0LCAweDEwMDAwMDAzLAorMHgzNDQyMDA0MCwgMHg4ZjgyMDA0NCwgMHg0NjEwMjQsIDB4YWY4MjAwNDQsCisweDhmODIwMDQ0LCAweDM0NDIwMDIwLCAweGFmODIwMDQ0LCAweDhmODIwMDQ0LAorMHg0NTEwMjQsIDB4YWY4MjAwNDQsIDB4MjQ2MzAwMDEsIDB4NjQxMDJiLAorMHgxNDQwZmZlZSwgMHgwLCAweDNlMDAwMDgsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4OGY4NDAwYzQsCisweDhmODYwMGUwLCAweDhmODcwMGU0LCAweDI0MDJmZmY4LCAweGMyMjgyNCwKKzB4MTBlNTAwMWEsIDB4Mjc2MjNmZjgsIDB4MTRlMjAwMDIsIDB4MjRlODAwMDgsCisweDI3NjgzMDAwLCAweDU1MDUwMDA0LCAweDhkMGEwMDAwLCAweDMwYzIwMDA0LAorMHgxNDQwMDAxMiwgMHg4MDUwMjEsIDB4OGNlOTAwMDAsIDB4OGY0MjAxM2MsCisweDE0OTQ4MjMsIDB4NDkxODJiLCAweDk0ZWIwMDA2LCAweDEwNjAwMDAyLAorMHgyNTYzMDA1MCwgMHg0OTQ4MjEsIDB4MTIzMTgyYiwgMHg1MDQwMDAwMywKKzB4OGY0MjAxZmMsIDB4M2UwMDAwOCwgMHhlMDEwMjEsIDB4YWY4ODAwZTgsCisweDI0NDIwMDAxLCAweGFmNDIwMWZjLCAweGFmODgwMGU0LCAweDNlMDAwMDgsCisweDEwMjEsIDB4M2UwMDAwOCwgMHgwLCAweDhmODMwMGU0LAorMHgyNzYyM2ZmOCwgMHgxMDYyMDAwNCwgMHgyNDYyMDAwOCwgMHhhZjgyMDBlOCwKKzB4M2UwMDAwOCwgMHhhZjgyMDBlNCwgMHgyNzYyMzAwMCwgMHhhZjgyMDBlOCwKKzB4M2UwMDAwOCwgMHhhZjgyMDBlNCwgMHgzZTAwMDA4LCAweDAsCisweDAsIDB4MCwgMHgwLCAweDhmODgwMTIwLAorMHgyNzYyNGZlMCwgMHg4ZjgzMDEyOCwgMHgxNTAyMDAwMiwgMHgyNTA5MDAyMCwKKzB4Mjc2OTQ4MDAsIDB4MTEyMzAwMTIsIDB4OGZhMjAwMTAsIDB4YWQwNDAwMDAsCisweGFkMDUwMDA0LCAweGFkMDYwMDA4LCAweGE1MDcwMDBlLCAweDhmYTMwMDE0LAorMHhhZDAyMDAxOCwgMHg4ZmEyMDAxOCwgMHhhZDAzMDAxYywgMHgyNTAzMDAxNiwKKzB4YWQwMjAwMTAsIDB4YWQwMzAwMTQsIDB4YWY4OTAxMjAsIDB4OGY0MzAwZmMsCisweDI0MDIwMDAxLCAweDI0NjNmZmZmLCAweDNlMDAwMDgsIDB4YWY0MzAwZmMsCisweDhmNDMwMzI0LCAweDEwMjEsIDB4MjQ2MzAwMDEsIDB4M2UwMDAwOCwKKzB4YWY0MzAzMjQsIDB4M2UwMDAwOCwgMHgwLCAweDhmODgwMTAwLAorMHgyNzYyNDdlMCwgMHg4ZjgzMDEwOCwgMHgxNTAyMDAwMiwgMHgyNTA5MDAyMCwKKzB4Mjc2OTQwMDAsIDB4MTEyMzAwMGYsIDB4OGZhMjAwMTAsIDB4YWQwNDAwMDAsCisweGFkMDUwMDA0LCAweGFkMDYwMDA4LCAweGE1MDcwMDBlLCAweDhmYTMwMDE0LAorMHhhZDAyMDAxOCwgMHg4ZmEyMDAxOCwgMHhhZDAzMDAxYywgMHgyNTAzMDAxNiwKKzB4YWQwMjAwMTAsIDB4YWQwMzAwMTQsIDB4YWY4OTAxMDAsIDB4M2UwMDAwOCwKKzB4MjQwMjAwMDEsIDB4OGY0MzAzMjgsIDB4MTAyMSwgMHgyNDYzMDAwMSwKKzB4M2UwMDAwOCwgMHhhZjQzMDMyOCwgMHgzZTAwMDA4LCAweDAsCiAweDAsIDB4MCwgMHgwLCAweDAgfTsKIHN0YXRpYyB1MzIgdGlnb24yRndSb2RhdGFbKE1BWF9ST0RBVEFfTEVOLzQpICsgMV0gX19kZXZpbml0ZGF0YSA9IHsKLTB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsIAotMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwgCi0weDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLCAKLTB4NmUyZjY2NzcsIDB4NmQ2MTY5NmUsIDB4MmU2MzJjNzYsIDB4MjAzMTJlMzEsIAotMHgyZTMyMmUzNCwgMHgzNTIwMzEzOSwgMHgzOTM5MmYzMCwgMHgzMTJmMzIzNCwgCi0weDIwMzAzMDNhLCAweDMxMzAzYTM1LCAweDM1MjA3MzY4LCAweDc1NjE2ZTY3LCAKLTB4MjA0NTc4NzAsIDB4MjAyNDAwMDAsIDB4NjU3Njc0NTIsIDB4NmU2NzQ2MDAsIAotMHg1MTY1NzY3NCwgMHg0NjAwMDAwMCwgMHg1MTY1NzY3NCwgMHg1MDVmNDYwMCwgCi0weDRkNjU3Njc0LCAweDUyNmU2NzQ2LCAweDAsIDB4NGQ1MTY1NzYsIAotMHg3NDQ2MDAwMCwgMHg0ZDUxNjU3NiwgMHg1MDVmNDYwMCwgMHg1MTczNDM2ZiwgCi0weDZlNDk1ZjQ2LCAweDAsIDB4NTE3MzQzNmYsIDB4NmU3MzQ2MDAsIAotMHg1MTcyNTA3MiwgMHg2ZjY0NDYwMCwgMHg2MjYxNjQ0ZCwgMHg2NTZkNTM3YSwgCi0weDAsIDB4Njg3NzU2NjUsIDB4NzIwMDAwMDAsIDB4NjI2MTY0NDgsIAotMHg3NzU2NjU3MiwgMHgwLCAweDJhMmE0NDQxLCAweDU3NGU1ZjQxLCAKLTB4MCwgMHg3NDc4NTI3OCwgMHg0MjY2NTM3YSwgMHgwLCAKLTB4NjI2NjQxNzQsIDB4NmU0ZDcyNmIsIDB4MCwgMHg3MjY1NjQ1YSwgCi0weDZmNmU2NTMxLCAweDAsIDB4NzA2MzY5NDMsIDB4NmY2ZTY2MDAsIAotMHg2NzY1NmU0MywgMHg2ZjZlNjYwMCwgMHgyYTY0NmQ2MSwgMHg1MjQ0NjY2YywgCi0weDAsIDB4MmE1MDQxNGUsIDB4NDk0MzJhMDAsIDB4MmUyZTJmMmUsIAotMHgyZTJmMmUyZSwgMHgyZjJlMmUyZiwgMHgyZTJlMmY3MywgMHg3MjYzMmY2ZSwgCi0weDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLCAweDZlMmY2Njc3LCAKLTB4NmQ2MTY5NmUsIDB4MmU2MzAwMDAsIDB4NzI2MzYyNDYsIDB4NmM2MTY3NzMsIAotMHgwLCAweDYyNjE2NDUyLCAweDc4NTI2MzYyLCAweDAsIAotMHg2NzZjNmY2MiwgMHg0NjZjNjc3MywgMHgwLCAweDJiNWY2NDY5LCAKLTB4NzM3MDVmNmMsIDB4NmY2ZjcwMDAsIDB4MmI2NTc2NWYsIDB4Njg2MTZlNjQsIAotMHg2YzY1NzIwMCwgMHg2MzYxNmU3NCwgMHgzMTQ0NmQ2MSwgMHgwLCAKLTB4MmI3MTVmNjQsIDB4NmQ2MTVmNzQsIDB4NmY1ZjZlNjksIDB4NjM1ZjYzNmIsIAotMHg3Mzc1NmQwMCwgMHgyYjY4NWY3MywgMHg2NTZlNjQ1ZiwgMHg2NDYxNzQ2MSwgCi0weDVmNzI2NTYxLCAweDY0Nzk1ZjYzLCAweDZiNzM3NTZkLCAweDAsIAotMHgyYjY4NWY2NCwgMHg2ZDYxNWY3MiwgMHg2NDVmNjE3MywgMHg3MzY5NzM3NCwgCi0weDVmNjM2YjczLCAweDc1NmQwMDAwLCAweDc0NDM2YjczLCAweDZkNGY2ZTAwLCAKLTB4MmI3MTVmNjQsIDB4NmQ2MTVmNzQsIDB4NmY1ZjZlNjksIDB4NjMwMDAwMDAsIAotMHgyYjY4NWY3MywgMHg2NTZlNjQ1ZiwgMHg2NDYxNzQ2MSwgMHg1ZjcyNjU2MSwgCi0weDY0NzkwMDAwLCAweDJiNjg1ZjY0LCAweDZkNjE1ZjcyLCAweDY0NWY2MTczLCAKLTB4NzM2OTczNzQsIDB4MCwgMHg3NDQzNmI3MywgMHg2ZDRmNjY2NiwgCi0weDAsIDB4MmI2ODVmNzMsIDB4NjU2ZTY0NWYsIDB4NjI2NDVmNzIsIAotMHg2NTYxNjQ3OSwgMHgwLCAweDY4NzM3NDUzLCAweDUyNjk2ZTY3LCAKLTB4MCwgMHg2MjYxNjQ1MywgMHg1MjY5NmU2NywgMHgwLCAKLTB4NmU2OTYzNTMsIDB4NTI2OTZlNjcsIDB4MCwgMHg3NzQ0NmQ2MSwgCi0weDQxNmM2YzQxLCAweDAsIDB4MmI3MTVmNjQsIDB4NmQ2MTVmNzQsIAotMHg2ZjVmNjg2ZiwgMHg3Mzc0NWY2MywgMHg2YjczNzU2ZCwgMHgwLCAKLTB4MmI2ODVmNmQsIDB4NjE2MzVmNzIsIDB4Nzg1ZjYzNmYsIDB4NmQ3MDVmNjMsIAotMHg2YjczNzU2ZCwgMHgwLCAweDJiNjg1ZjY0LCAweDZkNjE1Zjc3LCAKLTB4NzI1ZjYxNzMsIDB4NzM2OTczNzQsIDB4NWY2MzZiNzMsIDB4NzU2ZDAwMDAsIAotMHg3MjQzNmI3MywgMHg2ZDRmNmUwMCwgMHgyYjcxNWY2NCwgMHg2ZDYxNWY3NCwgCi0weDZmNWY2ODZmLCAweDczNzQwMDAwLCAweDJiNjg1ZjZkLCAweDYxNjM1ZjcyLCAKLTB4Nzg1ZjYzNmYsIDB4NmQ3MDAwMDAsIDB4MmI2ODVmNjQsIDB4NmQ2MTVmNzcsIAotMHg3MjVmNjE3MywgMHg3MzY5NzM3NCwgMHgwLCAweDcyNDM2YjczLCAKLTB4NmQ0ZjY2NjYsIDB4MCwgMHgyYjY4NWY3MiwgMHg2NTYzNzY1ZiwgCi0weDYyNjQ1ZjcyLCAweDY1NjE2NDc5LCAweDAsIDB4MmI2ODVmNzIsIAotMHg2NTYzNzY1ZiwgMHg2YTc1NmQ2MiwgMHg2ZjVmNjI2NCwgMHg1ZjcyNjU2MSwgCi0weDY0NzkwMDAwLCAweDJiNjg1ZjcyLCAweDY1NjM3NjVmLCAweDZkNjk2ZTY5LCAKLTB4NWY2MjY0NWYsIDB4NzI2NTYxNjQsIDB4NzkwMDAwMDAsIDB4MmI2ZDY4NWYsIAotMHg2MzZmNmQ2ZCwgMHg2MTZlNjQwMCwgMHgyYjY4NWY3NCwgMHg2OTZkNjU3MiwgCi0weDAsIDB4MmI2ODVmNjQsIDB4NmY1Zjc1NzAsIDB4NjQ2MTc0NjUsIAotMHg1Zjc0Nzg1ZiwgMHg2MzZmNmU3MywgMHgwLCAweDJiNjg1ZjY0LCAKLTB4NmY1Zjc1NzAsIDB4NjQ2MTc0NjUsIDB4NWY3Mjc4NWYsIDB4NzA3MjZmNjQsIAotMHgwLCAweDJiNjM2YjczLCAweDc1NmQzMTM2LCAweDAsIAotMHgyYjcwNjU2NSwgMHg2YjVmNmQ2MSwgMHg2MzVmNzI3OCwgMHg1Zjc3NjEwMCwgCi0weDJiNzA2NTY1LCAweDZiNWY2ZDYxLCAweDYzNWY3Mjc4LCAweDAsIAotMHgyYjY0NjU3MSwgMHg1ZjZkNjE2MywgMHg1ZjcyNzgwMCwgMHgyYjY4NWY2ZCwgCi0weDYxNjM1ZjcyLCAweDc4NWY2MTc0LCAweDc0NmUwMDAwLCAweDYyNjE2NDUyLCAKLTB4NjU3NDUzN2EsIDB4MCwgMHg3Mjc4NDI2NCwgMHg0MjY2NTM3YSwgCi0weDAsIDB4MmI2ZTc1NmMsIDB4NmM1ZjY4NjEsIDB4NmU2NDZjNjUsIAotMHg3MjAwMDAwMCwgMHg2Njc3NGY3MCwgMHg0NjYxNjk2YywgMHgwLCAKLTB4MmI2ODVmNzUsIDB4NzA2NDYxNzQsIDB4NjU1ZjZjNjUsIDB4NjQzNDAwMDAsIAotMHgyYjY4NWY3NSwgMHg3MDY0NjE3NCwgMHg2NTVmNmM2NSwgMHg2NDM2MDAwMCwgCi0weDJiNjg1Zjc1LCAweDcwNjQ2MTc0LCAweDY1NWY2YzY1LCAweDY0MzIwMDAwLCAKLTB4Njk2ZTc0NTMsIDB4NzQ2MTc0NjUsIDB4MCwgMHgyYTJhNjk2ZSwgCi0weDY5NzQ0MzcwLCAweDAsIDB4MjM3MzYzNzIsIDB4NjU2MTZkMDAsIAotMHg2OTUzNzQ2MSwgMHg2MzZiNDU3MiwgMHgwLCAweDcwNzI2ZjYyLCAKLTB4NjU0ZDY1NmQsIDB4MCwgMHgyYTJhNDQ0MSwgMHg1NzRlNWY0MiwgCi0weDAsIDB4MmI3Mzc3NWYsIDB4NjQ2ZDYxNWYsIDB4NjE3MzczNjksIAotMHg3Mzc0NWY3MCwgMHg2Yzc1NzM1ZiwgMHg3NDY5NmQ2NSwgMHg3MjAwMDAwMCwgCi0weDJiMjY3MDcyLCAweDY1NmM2ZjYxLCAweDY0NWY3NzcyLCAweDVmNjQ2NTczLCAKLTB4NjM3MjAwMDAsIDB4MmIyNjcwNzIsIDB4NjU2YzZmNjEsIDB4NjQ1ZjcyNjQsIAotMHg1ZjY0NjU3MywgMHg2MzcyMDAwMCwgMHgyYjY4NWY2OCwgMHg2NjVmNzQ2OSwgCi0weDZkNjU3MjAwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwgCi0weDZlMmY3NDY5LCAweDZkNjU3MjJlLCAweDYzMmM3NjIwLCAweDMxMmUzMTJlLCAKLTB4MzIyZTMzMzUsIDB4MjAzMTM5MzksIDB4MzkyZjMwMzEsIDB4MmYzMjM3MjAsIAotMHgzMTM5M2EzMCwgMHgzOTNhMzUzMCwgMHgyMDY4NjE3OSwgMHg2NTczMjA0NSwgCi0weDc4NzAyMDI0LCAweDAsIDB4NjU3Njc0NTIsIDB4NmU2NzQ2MDAsIAotMHg1MTY1NzY3NCwgMHg0NjAwMDAwMCwgMHg1MTY1NzY3NCwgMHg1MDVmNDYwMCwgCi0weDRkNjU3Njc0LCAweDUyNmU2NzQ2LCAweDAsIDB4NGQ1MTY1NzYsIAotMHg3NDQ2MDAwMCwgMHg0ZDUxNjU3NiwgMHg1MDVmNDYwMCwgMHg1MTczNDM2ZiwgCi0weDZlNDk1ZjQ2LCAweDAsIDB4NTE3MzQzNmYsIDB4NmU3MzQ2MDAsIAotMHg1MTcyNTA3MiwgMHg2ZjY0NDYwMCwgMHg1NDJkNDQ2ZCwgMHg2MTUyNjQzMiwgCi0weDAsIDB4NTQyZDQ0NmQsIDB4NjE1MjY0MzEsIDB4MCwgCi0weDU0MmQ0NDZkLCAweDYxNTI2NDQyLCAweDAsIDB4NTQyZDQ0NmQsIAotMHg2MTU3NzIzMiwgMHgwLCAweDU0MmQ0NDZkLCAweDYxNTc3MjMxLCAKLTB4MCwgMHg1NDJkNDQ2ZCwgMHg2MTU3NzI0MiwgMHgwLCAKLTB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsIAotMHg2ZTJmNjM2ZiwgMHg2ZDZkNjE2ZSwgMHg2NDJlNjMyYywgMHg3NjIwMzEyZSwgCi0weDMxMmUzMjJlLCAweDMyMzgyMDMxLCAweDM5MzkzOTJmLCAweDMwMzEyZjMyLCAKLTB4MzAyMDMxMzksIDB4M2EzNDM5M2EsIDB4MzQzOTIwNzMsIDB4Njg3NTYxNmUsIAotMHg2NzIwNDU3OCwgMHg3MDIwMjQwMCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwgCi0weDUxNjU3Njc0LCAweDQ2MDAwMDAwLCAweDUxNjU3Njc0LCAweDUwNWY0NjAwLCAKLTB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwgCi0weDc0NDYwMDAwLCAweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLCAKLTB4NmU0OTVmNDYsIDB4MCwgMHg1MTczNDM2ZiwgMHg2ZTczNDYwMCwgCi0weDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDNmNDg2MzZkLCAweDY0NGQ2Mjc4LCAKLTB4MCwgMHgzZjYzNmQ2NCwgMHg0ODczNzQ1MywgMHgwLCAKLTB4M2Y2MzZkNjQsIDB4NGQ2MzRkNjQsIDB4MCwgMHgzZjYzNmQ2NCwgCi0weDUwNzI2ZjZkLCAweDAsIDB4M2Y2MzZkNjQsIDB4NGM2OTZlNmIsIAotMHgwLCAweDNmNjM2ZDY0LCAweDQ1NzI3MjAwLCAweDg2YWMsIAotMHg4ZTVjLCAweDhlNWMsIDB4OGRlNCwgMHg4Yjc4LCAKLTB4OGUzMCwgMHg4ZTVjLCAweDg3OTAsIDB4ODgwMCwgCi0weDg5OTAsIDB4OGE2OCwgMHg4YTM0LCAweDhlNWMsIAotMHg4ODcwLCAweDhiMjQsIDB4OGU1YywgMHg4YjM0LCAKLTB4ODdiNCwgMHg4ODI0LCAweDAsIDB4MCwgCi0weDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsIAotMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwgCi0weDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLCAKLTB4NmUyZjZkNjMsIDB4NjE3Mzc0MmUsIDB4NjMyYzc2MjAsIDB4MzEyZTMxMmUsIAotMHgzMjJlMzgyMCwgMHgzMTM5MzkzOCwgMHgyZjMxMzIyZiwgMHgzMDM4MjAzMCwgCi0weDMyM2EzMzM2LCAweDNhMzMzNjIwLCAweDczNjg3NTYxLCAweDZlNjcyMDQ1LCAKLTB4Nzg3MDIwMjQsIDB4MCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwgCi0weDUxNjU3Njc0LCAweDQ2MDAwMDAwLCAweDUxNjU3Njc0LCAweDUwNWY0NjAwLCAKLTB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwgCi0weDc0NDYwMDAwLCAweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLCAKLTB4NmU0OTVmNDYsIDB4MCwgMHg1MTczNDM2ZiwgMHg2ZTczNDYwMCwgCi0weDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDYxNjQ2NDRkLCAweDYzNDQ3NTcwLCAKLTB4MCwgMHg2MTY0NjQ0ZCwgMHg2MzQ2NzU2YywgMHgwLCAKLTB4NjQ2NTZjNGQsIDB4NjM0ZTZmNDUsIDB4MCwgMHgwLCAKLTB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsIAotMHg2ZTJmNjQ2ZCwgMHg2MTJlNjMyYywgMHg3NjIwMzEyZSwgMHgzMTJlMzIyZSwgCi0weDMyMzQyMDMxLCAweDM5MzkzODJmLCAweDMxMzIyZjMyLCAweDMxMjAzMDMwLCAKLTB4M2EzMzMzM2EsIDB4MzAzOTIwNzMsIDB4Njg3NTYxNmUsIDB4NjcyMDQ1NzgsIAotMHg3MDIwMjQwMCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwgMHg1MTY1NzY3NCwgCi0weDQ2MDAwMDAwLCAweDUxNjU3Njc0LCAweDUwNWY0NjAwLCAweDRkNjU3Njc0LCAKLTB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwgMHg3NDQ2MDAwMCwgCi0weDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLCAweDZlNDk1ZjQ2LCAKLTB4MCwgMHg1MTczNDM2ZiwgMHg2ZTczNDYwMCwgMHg1MTcyNTA3MiwgCi0weDZmNjQ0NjAwLCAweDczNzc0NDZkLCAweDYxNGY2NjY2LCAweDAsIAotMHgzMTQ0NmQ2MSwgMHg0ZjZlMDAwMCwgMHg3Mzc3NDQ2ZCwgMHg2MTRmNmUwMCwgCi0weDIzNzI0NDZkLCAweDYxNDE1NDRlLCAweDAsIDB4NzI0NDZkNjEsIAotMHg0MTU0NGUzMCwgMHgwLCAweDcyNDQ2ZDYxLCAweDQxNTQ0ZTMxLCAKLTB4MCwgMHg3MjQ0NmQ2MSwgMHgzNDQ3NjIwMCwgMHgyYTUwNDE0ZSwgCi0weDQ5NDMyYTAwLCAweDJlMmUyZjJlLCAweDJlMmYyZTJlLCAweDJmMmUyZTJmLCAKLTB4MmUyZTJmNzMsIDB4NzI2MzJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIAotMHg2ZjZkNmQ2ZiwgMHg2ZTJmNjQ2ZCwgMHg2MTJlNjMwMCwgMHgyMzc3NDQ2ZCwgCi0weDYxNDE1NDRlLCAweDAsIDB4Nzc0NDZkNjEsIDB4NDE1NDRlMzAsIAotMHgwLCAweDc3NDQ2ZDYxLCAweDQxNTQ0ZTMxLCAweDAsIAotMHg3NzQ0NmQ2MSwgMHgzNDQ3NjIwMCwgMHgwLCAweDAsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwgCi0weDZlMmY3NDcyLCAweDYxNjM2NTJlLCAweDYzMmM3NjIwLCAweDMxMmUzMTJlLCAKLTB4MzIyZTM1MjAsIDB4MzEzOTM5MzgsIDB4MmYzMDM5MmYsIDB4MzMzMDIwMzEsIAotMHgzODNhMzUzMCwgMHgzYTMyMzgyMCwgMHg3MzY4NzU2MSwgMHg2ZTY3MjA0NSwgCi0weDc4NzAyMDI0LCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsIAotMHg2ZTJmNjQ2MSwgMHg3NDYxMmU2MywgMHgyYzc2MjAzMSwgMHgyZTMxMmUzMiwgCi0weDJlMzEzMjIwLCAweDMxMzkzOTM5LCAweDJmMzAzMTJmLCAweDMyMzAyMDMxLCAKLTB4MzkzYTM0MzksIDB4M2EzNTMxMjAsIDB4NzM2ODc1NjEsIDB4NmU2NzIwNDUsIAotMHg3ODcwMjAyNCwgMHgwLCAweDQ2NTc1ZjU2LCAweDQ1NTI1MzQ5LCAKLTB4NGY0ZTNhMjAsIDB4MjMzMTIwNDYsIDB4NzI2OTIwNDEsIDB4NzA3MjIwMzcsIAotMHgyMDMxMzczYSwgMHgzNTM3M2EzNSwgMHgzMjIwNTA0NCwgMHg1NDIwMzIzMCwgCi0weDMwMzAwMDAwLCAweDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAweDRjNDU1ZjU0LCAKLTB4NDk0ZDQ1M2EsIDB4MjAzMTM3M2EsIDB4MzUzNzNhMzUsIDB4MzIwMDAwMDAsIAotMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgMHg0YzQ1NWY0MiwgMHg1OTNhMjA2NCwgCi0weDY1NzY3MjYzLCAweDczMDAwMDAwLCAweDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAKLTB4NGM0NTVmNDgsIDB4NGY1MzU0M2EsIDB4MjA2MzZmNmQsIDB4NzA3NTc0NjUsIAotMHgwLCAweDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAweDRjNDU1ZjQ0LCAKLTB4NGY0ZDQxNDksIDB4NGUzYTIwNjUsIDB4NmU2NzJlNjEsIDB4NjM3NDY1NmYsIAotMHg2ZTJlNjM2ZiwgMHg2ZDAwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgCi0weDRjNDU1MjNhLCAweDIwNjc2MzYzLCAweDIwNzY2NTcyLCAweDczNjk2ZjZlLCAKLTB4MjAzMjJlMzcsIDB4MmUzMjAwMDAsIDB4MCwgMHgxMjA0MTEwMCwgCi0weDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsIAotMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwgCi0weDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLCAKLTB4NmUyZjZkNjUsIDB4NmQyZTYzMmMsIDB4NzYyMDMxMmUsIDB4MzEyZTMyMmUsIAotMHgzNTIwMzEzOSwgMHgzOTM4MmYzMCwgMHgzOTJmMzMzMCwgMHgyMDMxMzgzYSwgCi0weDM1MzAzYTMwLCAweDM4MjA3MzY4LCAweDc1NjE2ZTY3LCAweDIwNDU3ODcwLCAKLTB4MjAyNDAwMDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsIAotMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwgCi0weDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLCAKLTB4NmUyZjczNjUsIDB4NmU2NDJlNjMsIDB4MmM3NjIwMzEsIDB4MmUzMTJlMzIsIAotMHgyZTM0MzQyMCwgMHgzMTM5MzkzOCwgMHgyZjMxMzIyZiwgMHgzMjMxMjAzMCwgCi0weDMwM2EzMzMzLCAweDNhMzEzODIwLCAweDczNjg3NTYxLCAweDZlNjcyMDQ1LCAKLTB4Nzg3MDIwMjQsIDB4MCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwgCi0weDUxNjU3Njc0LCAweDQ2MDAwMDAwLCAweDUxNjU3Njc0LCAweDUwNWY0NjAwLCAKLTB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwgCi0weDc0NDYwMDAwLCAweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLCAKLTB4NmU0OTVmNDYsIDB4MCwgMHg1MTczNDM2ZiwgMHg2ZTczNDYwMCwgCi0weDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDY5NzM2ZTc0LCAweDU0NjM3MDU1LCAKLTB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsIAotMHg2ZTJmNzI2NSwgMHg2Mzc2MmU2MywgMHgyYzc2MjAzMSwgMHgyZTMxMmUzMiwgCi0weDJlMzUzMzIwLCAweDMxMzkzOTM5LCAweDJmMzAzMTJmLCAweDMxMzYyMDMwLCAKLTB4MzIzYTM1MzUsIDB4M2EzNDMzMjAsIDB4NzM2ODc1NjEsIDB4NmU2NzIwNDUsIAotMHg3ODcwMjAyNCwgMHgwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLCAKLTB4NTE2NTc2NzQsIDB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsIAotMHg0ZDY1NzY3NCwgMHg1MjZlNjc0NiwgMHgwLCAweDRkNTE2NTc2LCAKLTB4NzQ0NjAwMDAsIDB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsIAotMHg2ZTQ5NWY0NiwgMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLCAKLTB4NTE3MjUwNzIsIDB4NmY2NDQ2MDAsIDB4NzI0ZDYxNjMsIDB4NDM2ODZiMzAsIAotMHgwLCAweDcyNzg0NjcyLCAweDZkMzI0YzY3LCAweDAsIAotMHg3Mjc4NGU2ZiwgMHg1Mzc0NDI2NCwgMHgwLCAweDcyNzg0ZTZmLCAKLTB4NGQ2OTQyNjQsIDB4MCwgMHg3Mjc4NGU2ZiwgMHg0YTZkNDI2NCwgCi0weDAsIDB4NzI3ODQzNmIsIDB4NDQ2ZDYxNDYsIDB4MCwgCi0weDcyNzg1MTQ0LCAweDZkNDU3ODQ2LCAweDAsIDB4NzI3ODUxNDQsIAotMHg2ZDYxNDYwMCwgMHg3Mjc4NTE0NCwgMHg0YzQyNjQ0NiwgMHgwLCAKLTB4NzI3ODUxNDQsIDB4NmQ0MjY0NDYsIDB4MCwgMHg3Mjc4NDM3MiwgCi0weDYzNTA2MTY0LCAweDAsIDB4NzI1MzZkNTEsIDB4NDQ2ZDYxNDYsIAotMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLCAKLTB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsIAotMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwgCi0weDZlMmY2ZDYxLCAweDYzMmU2MzJjLCAweDc2MjAzMTJlLCAweDMxMmUzMjJlLCAKLTB4MzIzMjIwMzEsIDB4MzkzOTM4MmYsIDB4MzEzMjJmMzAsIDB4MzgyMDMwMzIsIAotMHgzYTMzMzYzYSwgMHgzMzMwMjA3MywgMHg2ODc1NjE2ZSwgMHg2NzIwNDU3OCwgCi0weDcwMjAyNDAwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLCAweDUxNjU3Njc0LCAKLTB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsIDB4NGQ2NTc2NzQsIAotMHg1MjZlNjc0NiwgMHgwLCAweDRkNTE2NTc2LCAweDc0NDYwMDAwLCAKLTB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsIDB4NmU0OTVmNDYsIAotMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLCAweDUxNzI1MDcyLCAKLTB4NmY2NDQ2MDAsIDB4NmQ2MTYzNTQsIDB4Njg3MjY1NzMsIDB4MCwgCi0weDIzNzQ0ZDYxLCAweDYzNDE1NDRlLCAweDAsIDB4MjM3MjRkNjEsIAotMHg2MzQxNTQ0ZSwgMHgwLCAweDcyNjU2ZDQxLCAweDczNzM3Mjc0LCAKLTB4MCwgMHg2YzY5NmU2YiwgMHg0NDRmNTc0ZSwgMHgwLCAKLTB4NmM2OTZlNmIsIDB4NTU1MDAwMDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwgCi0weDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LCAKLTB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsIAotMHg2ZTJmNjM2YiwgMHg3Mzc1NmQyZSwgMHg2MzJjNzYyMCwgMHgzMTJlMzEyZSwgCi0weDMyMmUzOTIwLCAweDMxMzkzOTM5LCAweDJmMzAzMTJmLCAweDMxMzQyMDMwLCAKLTB4MzAzYTMwMzMsIDB4M2EzNDM4MjAsIDB4NzM2ODc1NjEsIDB4NmU2NzIwNDUsIAotMHg3ODcwMjAyNCwgMHgwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLCAKLTB4NTE2NTc2NzQsIDB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsIAotMHg0ZDY1NzY3NCwgMHg1MjZlNjc0NiwgMHgwLCAweDRkNTE2NTc2LCAKLTB4NzQ0NjAwMDAsIDB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsIAotMHg2ZTQ5NWY0NiwgMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLCAKLTB4NTE3MjUwNzIsIDB4NmY2NDQ2MDAsIDB4MCwgMHgwLCAKLTB4MCwgMHg1MDcyNmY2MiwgMHg2NTUwNjg3OSwgMHgwLCAKLTB4NmM2ZTZiNDEsIDB4NTM1MzUyNTQsIDB4MCwgMHgxMDlhNCwgCi0weDEwYTFjLCAweDEwYTUwLCAweDEwYTdjLCAweDExMDUwLCAKLTB4MTBhYTgsIDB4MTBiMTAsIDB4MTExZmMsIDB4MTBkYzAsIAotMHgxMGM2OCwgMHgxMGM4MCwgMHgxMGNjNCwgMHgxMGNlYywgCi0weDEwZDBjLCAweDEwZDM0LCAweDExMWZjLCAweDEwZGMwLCAKLTB4MTBkZjgsIDB4MTBlMTAsIDB4MTBlNDAsIDB4MTBlNjgsIAotMHgxMGU4OCwgMHgxMGViMCwgMHgwLCAweDEwZmRjLCAKLTB4MTEwMDgsIDB4MTEwMmMsIDB4MTExZmMsIDB4MTEwNTAsIAotMHgxMTA3OCwgMHgxMTEwOCwgMHgwLCAweDAsIAotMHgwLCAweDExODZjLCAweDExOTNjLCAweDExYTE0LCAKLTB4MTFhZTQsIDB4MTFiNDAsIDB4MTFjMWMsIDB4MTFjNDQsIAotMHgxMWQyMCwgMHgxMWQ0OCwgMHgxMWVmMCwgMHgxMWYxOCwgCi0weDEyMGMwLCAweDEyMmI4LCAweDEyNTRjLCAweDEyNDYwLCAKLTB4MTI1NGMsIDB4MTI1NzgsIDB4MTIwZTgsIDB4MTIyOTAsIAotMHg3MjczNzQ1ZiwgMHg2NzZkNjk2OSwgMHgwLCAweDEyNjA4LCAKLTB4MTI2NDAsIDB4MTI3MjgsIDB4MTMzNzQsIDB4MTMzYjQsIAotMHgxMzNjYywgMHg3MzY1NzQ2YywgMHg2ZjZmNzAwMCwgMHgwLCAKLTB4MCwgMHgxM2JiYywgMHgxM2JmYywgMHgxM2M4YywgCi0weDEzY2QwLCAweDEzZDM0LCAweDEzZGMwLCAweDEzZGY0LCAKLTB4MTNlN2MsIDB4MTNmMTQsIDB4MTNmZTQsIDB4MTQwMjQsIAotMHgxNDBhOCwgMHgxNDBjYywgMHgxNDFkYywgMHg2NDZmNDI2MSwgCi0weDczNjU1MDY3LCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHg3Mzc0NmQ2MSwgMHg2MzRjNGU0YiwgMHgwLCAKLTB4Njc2NTc0NmQsIDB4NjM2YzZlNmIsIDB4MCwgMHgxNGVkOCwgCi0weDE0ZWQ4LCAweDE0YjhjLCAweDE0YmQ4LCAweDE0YzI0LCAKLTB4MTRlZDgsIDB4NzM2NTc0NmQsIDB4NjE2MzYxNjMsIDB4NzQwMDAwMDAsIAorMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLAorMHg2ZTJmNjY3NywgMHg2ZDYxNjk2ZSwgMHgyZTYzMmM3NiwgMHgyMDMxMmUzMSwKKzB4MmUzMjJlMzQsIDB4MzUyMDMxMzksIDB4MzkzOTJmMzAsIDB4MzEyZjMyMzQsCisweDIwMzAzMDNhLCAweDMxMzAzYTM1LCAweDM1MjA3MzY4LCAweDc1NjE2ZTY3LAorMHgyMDQ1Nzg3MCwgMHgyMDI0MDAwMCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwKKzB4NTE2NTc2NzQsIDB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsCisweDRkNjU3Njc0LCAweDUyNmU2NzQ2LCAweDAsIDB4NGQ1MTY1NzYsCisweDc0NDYwMDAwLCAweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLAorMHg2ZTQ5NWY0NiwgMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLAorMHg1MTcyNTA3MiwgMHg2ZjY0NDYwMCwgMHg2MjYxNjQ0ZCwgMHg2NTZkNTM3YSwKKzB4MCwgMHg2ODc3NTY2NSwgMHg3MjAwMDAwMCwgMHg2MjYxNjQ0OCwKKzB4Nzc1NjY1NzIsIDB4MCwgMHgyYTJhNDQ0MSwgMHg1NzRlNWY0MSwKKzB4MCwgMHg3NDc4NTI3OCwgMHg0MjY2NTM3YSwgMHgwLAorMHg2MjY2NDE3NCwgMHg2ZTRkNzI2YiwgMHgwLCAweDcyNjU2NDVhLAorMHg2ZjZlNjUzMSwgMHgwLCAweDcwNjM2OTQzLCAweDZmNmU2NjAwLAorMHg2NzY1NmU0MywgMHg2ZjZlNjYwMCwgMHgyYTY0NmQ2MSwgMHg1MjQ0NjY2YywKKzB4MCwgMHgyYTUwNDE0ZSwgMHg0OTQzMmEwMCwgMHgyZTJlMmYyZSwKKzB4MmUyZjJlMmUsIDB4MmYyZTJlMmYsIDB4MmUyZTJmNzMsIDB4NzI2MzJmNmUsCisweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLCAweDZlMmY2Njc3LAorMHg2ZDYxNjk2ZSwgMHgyZTYzMDAwMCwgMHg3MjYzNjI0NiwgMHg2YzYxNjc3MywKKzB4MCwgMHg2MjYxNjQ1MiwgMHg3ODUyNjM2MiwgMHgwLAorMHg2NzZjNmY2MiwgMHg0NjZjNjc3MywgMHgwLCAweDJiNWY2NDY5LAorMHg3MzcwNWY2YywgMHg2ZjZmNzAwMCwgMHgyYjY1NzY1ZiwgMHg2ODYxNmU2NCwKKzB4NmM2NTcyMDAsIDB4NjM2MTZlNzQsIDB4MzE0NDZkNjEsIDB4MCwKKzB4MmI3MTVmNjQsIDB4NmQ2MTVmNzQsIDB4NmY1ZjZlNjksIDB4NjM1ZjYzNmIsCisweDczNzU2ZDAwLCAweDJiNjg1ZjczLCAweDY1NmU2NDVmLCAweDY0NjE3NDYxLAorMHg1ZjcyNjU2MSwgMHg2NDc5NWY2MywgMHg2YjczNzU2ZCwgMHgwLAorMHgyYjY4NWY2NCwgMHg2ZDYxNWY3MiwgMHg2NDVmNjE3MywgMHg3MzY5NzM3NCwKKzB4NWY2MzZiNzMsIDB4NzU2ZDAwMDAsIDB4NzQ0MzZiNzMsIDB4NmQ0ZjZlMDAsCisweDJiNzE1ZjY0LCAweDZkNjE1Zjc0LCAweDZmNWY2ZTY5LCAweDYzMDAwMDAwLAorMHgyYjY4NWY3MywgMHg2NTZlNjQ1ZiwgMHg2NDYxNzQ2MSwgMHg1ZjcyNjU2MSwKKzB4NjQ3OTAwMDAsIDB4MmI2ODVmNjQsIDB4NmQ2MTVmNzIsIDB4NjQ1ZjYxNzMsCisweDczNjk3Mzc0LCAweDAsIDB4NzQ0MzZiNzMsIDB4NmQ0ZjY2NjYsCisweDAsIDB4MmI2ODVmNzMsIDB4NjU2ZTY0NWYsIDB4NjI2NDVmNzIsCisweDY1NjE2NDc5LCAweDAsIDB4Njg3Mzc0NTMsIDB4NTI2OTZlNjcsCisweDAsIDB4NjI2MTY0NTMsIDB4NTI2OTZlNjcsIDB4MCwKKzB4NmU2OTYzNTMsIDB4NTI2OTZlNjcsIDB4MCwgMHg3NzQ0NmQ2MSwKKzB4NDE2YzZjNDEsIDB4MCwgMHgyYjcxNWY2NCwgMHg2ZDYxNWY3NCwKKzB4NmY1ZjY4NmYsIDB4NzM3NDVmNjMsIDB4NmI3Mzc1NmQsIDB4MCwKKzB4MmI2ODVmNmQsIDB4NjE2MzVmNzIsIDB4Nzg1ZjYzNmYsIDB4NmQ3MDVmNjMsCisweDZiNzM3NTZkLCAweDAsIDB4MmI2ODVmNjQsIDB4NmQ2MTVmNzcsCisweDcyNWY2MTczLCAweDczNjk3Mzc0LCAweDVmNjM2YjczLCAweDc1NmQwMDAwLAorMHg3MjQzNmI3MywgMHg2ZDRmNmUwMCwgMHgyYjcxNWY2NCwgMHg2ZDYxNWY3NCwKKzB4NmY1ZjY4NmYsIDB4NzM3NDAwMDAsIDB4MmI2ODVmNmQsIDB4NjE2MzVmNzIsCisweDc4NWY2MzZmLCAweDZkNzAwMDAwLCAweDJiNjg1ZjY0LCAweDZkNjE1Zjc3LAorMHg3MjVmNjE3MywgMHg3MzY5NzM3NCwgMHgwLCAweDcyNDM2YjczLAorMHg2ZDRmNjY2NiwgMHgwLCAweDJiNjg1ZjcyLCAweDY1NjM3NjVmLAorMHg2MjY0NWY3MiwgMHg2NTYxNjQ3OSwgMHgwLCAweDJiNjg1ZjcyLAorMHg2NTYzNzY1ZiwgMHg2YTc1NmQ2MiwgMHg2ZjVmNjI2NCwgMHg1ZjcyNjU2MSwKKzB4NjQ3OTAwMDAsIDB4MmI2ODVmNzIsIDB4NjU2Mzc2NWYsIDB4NmQ2OTZlNjksCisweDVmNjI2NDVmLCAweDcyNjU2MTY0LCAweDc5MDAwMDAwLCAweDJiNmQ2ODVmLAorMHg2MzZmNmQ2ZCwgMHg2MTZlNjQwMCwgMHgyYjY4NWY3NCwgMHg2OTZkNjU3MiwKKzB4MCwgMHgyYjY4NWY2NCwgMHg2ZjVmNzU3MCwgMHg2NDYxNzQ2NSwKKzB4NWY3NDc4NWYsIDB4NjM2ZjZlNzMsIDB4MCwgMHgyYjY4NWY2NCwKKzB4NmY1Zjc1NzAsIDB4NjQ2MTc0NjUsIDB4NWY3Mjc4NWYsIDB4NzA3MjZmNjQsCisweDAsIDB4MmI2MzZiNzMsIDB4NzU2ZDMxMzYsIDB4MCwKKzB4MmI3MDY1NjUsIDB4NmI1ZjZkNjEsIDB4NjM1ZjcyNzgsIDB4NWY3NzYxMDAsCisweDJiNzA2NTY1LCAweDZiNWY2ZDYxLCAweDYzNWY3Mjc4LCAweDAsCisweDJiNjQ2NTcxLCAweDVmNmQ2MTYzLCAweDVmNzI3ODAwLCAweDJiNjg1ZjZkLAorMHg2MTYzNWY3MiwgMHg3ODVmNjE3NCwgMHg3NDZlMDAwMCwgMHg2MjYxNjQ1MiwKKzB4NjU3NDUzN2EsIDB4MCwgMHg3Mjc4NDI2NCwgMHg0MjY2NTM3YSwKKzB4MCwgMHgyYjZlNzU2YywgMHg2YzVmNjg2MSwgMHg2ZTY0NmM2NSwKKzB4NzIwMDAwMDAsIDB4NjY3NzRmNzAsIDB4NDY2MTY5NmMsIDB4MCwKKzB4MmI2ODVmNzUsIDB4NzA2NDYxNzQsIDB4NjU1ZjZjNjUsIDB4NjQzNDAwMDAsCisweDJiNjg1Zjc1LCAweDcwNjQ2MTc0LCAweDY1NWY2YzY1LCAweDY0MzYwMDAwLAorMHgyYjY4NWY3NSwgMHg3MDY0NjE3NCwgMHg2NTVmNmM2NSwgMHg2NDMyMDAwMCwKKzB4Njk2ZTc0NTMsIDB4NzQ2MTc0NjUsIDB4MCwgMHgyYTJhNjk2ZSwKKzB4Njk3NDQzNzAsIDB4MCwgMHgyMzczNjM3MiwgMHg2NTYxNmQwMCwKKzB4Njk1Mzc0NjEsIDB4NjM2YjQ1NzIsIDB4MCwgMHg3MDcyNmY2MiwKKzB4NjU0ZDY1NmQsIDB4MCwgMHgyYTJhNDQ0MSwgMHg1NzRlNWY0MiwKKzB4MCwgMHgyYjczNzc1ZiwgMHg2NDZkNjE1ZiwgMHg2MTczNzM2OSwKKzB4NzM3NDVmNzAsIDB4NmM3NTczNWYsIDB4NzQ2OTZkNjUsIDB4NzIwMDAwMDAsCisweDJiMjY3MDcyLCAweDY1NmM2ZjYxLCAweDY0NWY3NzcyLCAweDVmNjQ2NTczLAorMHg2MzcyMDAwMCwgMHgyYjI2NzA3MiwgMHg2NTZjNmY2MSwgMHg2NDVmNzI2NCwKKzB4NWY2NDY1NzMsIDB4NjM3MjAwMDAsIDB4MmI2ODVmNjgsIDB4NjY1Zjc0NjksCisweDZkNjU3MjAwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLAorMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwKKzB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsCisweDZlMmY3NDY5LCAweDZkNjU3MjJlLCAweDYzMmM3NjIwLCAweDMxMmUzMTJlLAorMHgzMjJlMzMzNSwgMHgyMDMxMzkzOSwgMHgzOTJmMzAzMSwgMHgyZjMyMzcyMCwKKzB4MzEzOTNhMzAsIDB4MzkzYTM1MzAsIDB4MjA2ODYxNzksIDB4NjU3MzIwNDUsCisweDc4NzAyMDI0LCAweDAsIDB4NjU3Njc0NTIsIDB4NmU2NzQ2MDAsCisweDUxNjU3Njc0LCAweDQ2MDAwMDAwLCAweDUxNjU3Njc0LCAweDUwNWY0NjAwLAorMHg0ZDY1NzY3NCwgMHg1MjZlNjc0NiwgMHgwLCAweDRkNTE2NTc2LAorMHg3NDQ2MDAwMCwgMHg0ZDUxNjU3NiwgMHg1MDVmNDYwMCwgMHg1MTczNDM2ZiwKKzB4NmU0OTVmNDYsIDB4MCwgMHg1MTczNDM2ZiwgMHg2ZTczNDYwMCwKKzB4NTE3MjUwNzIsIDB4NmY2NDQ2MDAsIDB4NTQyZDQ0NmQsIDB4NjE1MjY0MzIsCisweDAsIDB4NTQyZDQ0NmQsIDB4NjE1MjY0MzEsIDB4MCwKKzB4NTQyZDQ0NmQsIDB4NjE1MjY0NDIsIDB4MCwgMHg1NDJkNDQ2ZCwKKzB4NjE1NzcyMzIsIDB4MCwgMHg1NDJkNDQ2ZCwgMHg2MTU3NzIzMSwKKzB4MCwgMHg1NDJkNDQ2ZCwgMHg2MTU3NzI0MiwgMHgwLAorMHgwLCAweDI0NDg2NTYxLCAweDY0NjU3MjNhLCAweDIwMmY3MDcyLAorMHg2ZjZhNjU2MywgMHg3NDczMmY3MiwgMHg2MzczMmY3MywgMHg3NzJmNjc2NSwKKzB4MmYyZTJmNmUsIDB4Njk2MzJmNjYsIDB4NzczMjJmNjMsIDB4NmY2ZDZkNmYsCisweDZlMmY2MzZmLCAweDZkNmQ2MTZlLCAweDY0MmU2MzJjLCAweDc2MjAzMTJlLAorMHgzMTJlMzIyZSwgMHgzMjM4MjAzMSwgMHgzOTM5MzkyZiwgMHgzMDMxMmYzMiwKKzB4MzAyMDMxMzksIDB4M2EzNDM5M2EsIDB4MzQzOTIwNzMsIDB4Njg3NTYxNmUsCisweDY3MjA0NTc4LCAweDcwMjAyNDAwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLAorMHg1MTY1NzY3NCwgMHg0NjAwMDAwMCwgMHg1MTY1NzY3NCwgMHg1MDVmNDYwMCwKKzB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwKKzB4NzQ0NjAwMDAsIDB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsCisweDZlNDk1ZjQ2LCAweDAsIDB4NTE3MzQzNmYsIDB4NmU3MzQ2MDAsCisweDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDNmNDg2MzZkLCAweDY0NGQ2Mjc4LAorMHgwLCAweDNmNjM2ZDY0LCAweDQ4NzM3NDUzLCAweDAsCisweDNmNjM2ZDY0LCAweDRkNjM0ZDY0LCAweDAsIDB4M2Y2MzZkNjQsCisweDUwNzI2ZjZkLCAweDAsIDB4M2Y2MzZkNjQsIDB4NGM2OTZlNmIsCisweDAsIDB4M2Y2MzZkNjQsIDB4NDU3MjcyMDAsIDB4ODZhYywKKzB4OGU1YywgMHg4ZTVjLCAweDhkZTQsIDB4OGI3OCwKKzB4OGUzMCwgMHg4ZTVjLCAweDg3OTAsIDB4ODgwMCwKKzB4ODk5MCwgMHg4YTY4LCAweDhhMzQsIDB4OGU1YywKKzB4ODg3MCwgMHg4YjI0LCAweDhlNWMsIDB4OGIzNCwKKzB4ODdiNCwgMHg4ODI0LCAweDAsIDB4MCwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLAorMHg2ZTJmNmQ2MywgMHg2MTczNzQyZSwgMHg2MzJjNzYyMCwgMHgzMTJlMzEyZSwKKzB4MzIyZTM4MjAsIDB4MzEzOTM5MzgsIDB4MmYzMTMyMmYsIDB4MzAzODIwMzAsCisweDMyM2EzMzM2LCAweDNhMzMzNjIwLCAweDczNjg3NTYxLCAweDZlNjcyMDQ1LAorMHg3ODcwMjAyNCwgMHgwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLAorMHg1MTY1NzY3NCwgMHg0NjAwMDAwMCwgMHg1MTY1NzY3NCwgMHg1MDVmNDYwMCwKKzB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwKKzB4NzQ0NjAwMDAsIDB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsCisweDZlNDk1ZjQ2LCAweDAsIDB4NTE3MzQzNmYsIDB4NmU3MzQ2MDAsCisweDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDYxNjQ2NDRkLCAweDYzNDQ3NTcwLAorMHgwLCAweDYxNjQ2NDRkLCAweDYzNDY3NTZjLCAweDAsCisweDY0NjU2YzRkLCAweDYzNGU2ZjQ1LCAweDAsIDB4MCwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLAorMHg2ZTJmNjQ2ZCwgMHg2MTJlNjMyYywgMHg3NjIwMzEyZSwgMHgzMTJlMzIyZSwKKzB4MzIzNDIwMzEsIDB4MzkzOTM4MmYsIDB4MzEzMjJmMzIsIDB4MzEyMDMwMzAsCisweDNhMzMzMzNhLCAweDMwMzkyMDczLCAweDY4NzU2MTZlLCAweDY3MjA0NTc4LAorMHg3MDIwMjQwMCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwgMHg1MTY1NzY3NCwKKzB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsIDB4NGQ2NTc2NzQsCisweDUyNmU2NzQ2LCAweDAsIDB4NGQ1MTY1NzYsIDB4NzQ0NjAwMDAsCisweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLCAweDZlNDk1ZjQ2LAorMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLCAweDUxNzI1MDcyLAorMHg2ZjY0NDYwMCwgMHg3Mzc3NDQ2ZCwgMHg2MTRmNjY2NiwgMHgwLAorMHgzMTQ0NmQ2MSwgMHg0ZjZlMDAwMCwgMHg3Mzc3NDQ2ZCwgMHg2MTRmNmUwMCwKKzB4MjM3MjQ0NmQsIDB4NjE0MTU0NGUsIDB4MCwgMHg3MjQ0NmQ2MSwKKzB4NDE1NDRlMzAsIDB4MCwgMHg3MjQ0NmQ2MSwgMHg0MTU0NGUzMSwKKzB4MCwgMHg3MjQ0NmQ2MSwgMHgzNDQ3NjIwMCwgMHgyYTUwNDE0ZSwKKzB4NDk0MzJhMDAsIDB4MmUyZTJmMmUsIDB4MmUyZjJlMmUsIDB4MmYyZTJlMmYsCisweDJlMmUyZjczLCAweDcyNjMyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLAorMHg2ZjZkNmQ2ZiwgMHg2ZTJmNjQ2ZCwgMHg2MTJlNjMwMCwgMHgyMzc3NDQ2ZCwKKzB4NjE0MTU0NGUsIDB4MCwgMHg3NzQ0NmQ2MSwgMHg0MTU0NGUzMCwKKzB4MCwgMHg3NzQ0NmQ2MSwgMHg0MTU0NGUzMSwgMHgwLAorMHg3NzQ0NmQ2MSwgMHgzNDQ3NjIwMCwgMHgwLCAweDAsCisweDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwKKzB4NmUyZjc0NzIsIDB4NjE2MzY1MmUsIDB4NjMyYzc2MjAsIDB4MzEyZTMxMmUsCisweDMyMmUzNTIwLCAweDMxMzkzOTM4LCAweDJmMzAzOTJmLCAweDMzMzAyMDMxLAorMHgzODNhMzUzMCwgMHgzYTMyMzgyMCwgMHg3MzY4NzU2MSwgMHg2ZTY3MjA0NSwKKzB4Nzg3MDIwMjQsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwKKzB4NmUyZjY0NjEsIDB4NzQ2MTJlNjMsIDB4MmM3NjIwMzEsIDB4MmUzMTJlMzIsCisweDJlMzEzMjIwLCAweDMxMzkzOTM5LCAweDJmMzAzMTJmLCAweDMyMzAyMDMxLAorMHgzOTNhMzQzOSwgMHgzYTM1MzEyMCwgMHg3MzY4NzU2MSwgMHg2ZTY3MjA0NSwKKzB4Nzg3MDIwMjQsIDB4MCwgMHg0NjU3NWY1NiwgMHg0NTUyNTM0OSwKKzB4NGY0ZTNhMjAsIDB4MjMzMTIwNDYsIDB4NzI2OTIwNDEsIDB4NzA3MjIwMzcsCisweDIwMzEzNzNhLCAweDM1MzczYTM1LCAweDMyMjA1MDQ0LCAweDU0MjAzMjMwLAorMHgzMDMwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwgMHg0YzQ1NWY1NCwKKzB4NDk0ZDQ1M2EsIDB4MjAzMTM3M2EsIDB4MzUzNzNhMzUsIDB4MzIwMDAwMDAsCisweDQ2NTc1ZjQzLCAweDRmNGQ1MDQ5LCAweDRjNDU1ZjQyLCAweDU5M2EyMDY0LAorMHg2NTc2NzI2MywgMHg3MzAwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwKKzB4NGM0NTVmNDgsIDB4NGY1MzU0M2EsIDB4MjA2MzZmNmQsIDB4NzA3NTc0NjUsCisweDAsIDB4NDY1NzVmNDMsIDB4NGY0ZDUwNDksIDB4NGM0NTVmNDQsCisweDRmNGQ0MTQ5LCAweDRlM2EyMDY1LCAweDZlNjcyZTYxLCAweDYzNzQ2NTZmLAorMHg2ZTJlNjM2ZiwgMHg2ZDAwMDAwMCwgMHg0NjU3NWY0MywgMHg0ZjRkNTA0OSwKKzB4NGM0NTUyM2EsIDB4MjA2NzYzNjMsIDB4MjA3NjY1NzIsIDB4NzM2OTZmNmUsCisweDIwMzIyZTM3LCAweDJlMzIwMDAwLCAweDAsIDB4MTIwNDExMDAsCisweDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwKKzB4NmUyZjZkNjUsIDB4NmQyZTYzMmMsIDB4NzYyMDMxMmUsIDB4MzEyZTMyMmUsCisweDM1MjAzMTM5LCAweDM5MzgyZjMwLCAweDM5MmYzMzMwLCAweDIwMzEzODNhLAorMHgzNTMwM2EzMCwgMHgzODIwNzM2OCwgMHg3NTYxNmU2NywgMHgyMDQ1Nzg3MCwKKzB4MjAyNDAwMDAsIDB4MjQ0ODY1NjEsIDB4NjQ2NTcyM2EsIDB4MjAyZjcwNzIsCisweDZmNmE2NTYzLCAweDc0NzMyZjcyLCAweDYzNzMyZjczLCAweDc3MmY2NzY1LAorMHgyZjJlMmY2ZSwgMHg2OTYzMmY2NiwgMHg3NzMyMmY2MywgMHg2ZjZkNmQ2ZiwKKzB4NmUyZjczNjUsIDB4NmU2NDJlNjMsIDB4MmM3NjIwMzEsIDB4MmUzMTJlMzIsCisweDJlMzQzNDIwLCAweDMxMzkzOTM4LCAweDJmMzEzMjJmLCAweDMyMzEyMDMwLAorMHgzMDNhMzMzMywgMHgzYTMxMzgyMCwgMHg3MzY4NzU2MSwgMHg2ZTY3MjA0NSwKKzB4Nzg3MDIwMjQsIDB4MCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwKKzB4NTE2NTc2NzQsIDB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsCisweDRkNjU3Njc0LCAweDUyNmU2NzQ2LCAweDAsIDB4NGQ1MTY1NzYsCisweDc0NDYwMDAwLCAweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLAorMHg2ZTQ5NWY0NiwgMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLAorMHg1MTcyNTA3MiwgMHg2ZjY0NDYwMCwgMHg2OTczNmU3NCwgMHg1NDYzNzA1NSwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLAorMHg2ZTJmNzI2NSwgMHg2Mzc2MmU2MywgMHgyYzc2MjAzMSwgMHgyZTMxMmUzMiwKKzB4MmUzNTMzMjAsIDB4MzEzOTM5MzksIDB4MmYzMDMxMmYsIDB4MzEzNjIwMzAsCisweDMyM2EzNTM1LCAweDNhMzQzMzIwLCAweDczNjg3NTYxLCAweDZlNjcyMDQ1LAorMHg3ODcwMjAyNCwgMHgwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLAorMHg1MTY1NzY3NCwgMHg0NjAwMDAwMCwgMHg1MTY1NzY3NCwgMHg1MDVmNDYwMCwKKzB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwKKzB4NzQ0NjAwMDAsIDB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsCisweDZlNDk1ZjQ2LCAweDAsIDB4NTE3MzQzNmYsIDB4NmU3MzQ2MDAsCisweDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDcyNGQ2MTYzLCAweDQzNjg2YjMwLAorMHgwLCAweDcyNzg0NjcyLCAweDZkMzI0YzY3LCAweDAsCisweDcyNzg0ZTZmLCAweDUzNzQ0MjY0LCAweDAsIDB4NzI3ODRlNmYsCisweDRkNjk0MjY0LCAweDAsIDB4NzI3ODRlNmYsIDB4NGE2ZDQyNjQsCisweDAsIDB4NzI3ODQzNmIsIDB4NDQ2ZDYxNDYsIDB4MCwKKzB4NzI3ODUxNDQsIDB4NmQ0NTc4NDYsIDB4MCwgMHg3Mjc4NTE0NCwKKzB4NmQ2MTQ2MDAsIDB4NzI3ODUxNDQsIDB4NGM0MjY0NDYsIDB4MCwKKzB4NzI3ODUxNDQsIDB4NmQ0MjY0NDYsIDB4MCwgMHg3Mjc4NDM3MiwKKzB4NjM1MDYxNjQsIDB4MCwgMHg3MjUzNmQ1MSwgMHg0NDZkNjE0NiwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLAorMHg2ZTJmNmQ2MSwgMHg2MzJlNjMyYywgMHg3NjIwMzEyZSwgMHgzMTJlMzIyZSwKKzB4MzIzMjIwMzEsIDB4MzkzOTM4MmYsIDB4MzEzMjJmMzAsIDB4MzgyMDMwMzIsCisweDNhMzMzNjNhLCAweDMzMzAyMDczLCAweDY4NzU2MTZlLCAweDY3MjA0NTc4LAorMHg3MDIwMjQwMCwgMHg2NTc2NzQ1MiwgMHg2ZTY3NDYwMCwgMHg1MTY1NzY3NCwKKzB4NDYwMDAwMDAsIDB4NTE2NTc2NzQsIDB4NTA1ZjQ2MDAsIDB4NGQ2NTc2NzQsCisweDUyNmU2NzQ2LCAweDAsIDB4NGQ1MTY1NzYsIDB4NzQ0NjAwMDAsCisweDRkNTE2NTc2LCAweDUwNWY0NjAwLCAweDUxNzM0MzZmLCAweDZlNDk1ZjQ2LAorMHgwLCAweDUxNzM0MzZmLCAweDZlNzM0NjAwLCAweDUxNzI1MDcyLAorMHg2ZjY0NDYwMCwgMHg2ZDYxNjM1NCwgMHg2ODcyNjU3MywgMHgwLAorMHgyMzc0NGQ2MSwgMHg2MzQxNTQ0ZSwgMHgwLCAweDIzNzI0ZDYxLAorMHg2MzQxNTQ0ZSwgMHgwLCAweDcyNjU2ZDQxLCAweDczNzM3Mjc0LAorMHgwLCAweDZjNjk2ZTZiLCAweDQ0NGY1NzRlLCAweDAsCisweDZjNjk2ZTZiLCAweDU1NTAwMDAwLCAweDAsIDB4MCwKKzB4MCwgMHgyNDQ4NjU2MSwgMHg2NDY1NzIzYSwgMHgyMDJmNzA3MiwKKzB4NmY2YTY1NjMsIDB4NzQ3MzJmNzIsIDB4NjM3MzJmNzMsIDB4NzcyZjY3NjUsCisweDJmMmUyZjZlLCAweDY5NjMyZjY2LCAweDc3MzIyZjYzLCAweDZmNmQ2ZDZmLAorMHg2ZTJmNjM2YiwgMHg3Mzc1NmQyZSwgMHg2MzJjNzYyMCwgMHgzMTJlMzEyZSwKKzB4MzIyZTM5MjAsIDB4MzEzOTM5MzksIDB4MmYzMDMxMmYsIDB4MzEzNDIwMzAsCisweDMwM2EzMDMzLCAweDNhMzQzODIwLCAweDczNjg3NTYxLCAweDZlNjcyMDQ1LAorMHg3ODcwMjAyNCwgMHgwLCAweDY1NzY3NDUyLCAweDZlNjc0NjAwLAorMHg1MTY1NzY3NCwgMHg0NjAwMDAwMCwgMHg1MTY1NzY3NCwgMHg1MDVmNDYwMCwKKzB4NGQ2NTc2NzQsIDB4NTI2ZTY3NDYsIDB4MCwgMHg0ZDUxNjU3NiwKKzB4NzQ0NjAwMDAsIDB4NGQ1MTY1NzYsIDB4NTA1ZjQ2MDAsIDB4NTE3MzQzNmYsCisweDZlNDk1ZjQ2LCAweDAsIDB4NTE3MzQzNmYsIDB4NmU3MzQ2MDAsCisweDUxNzI1MDcyLCAweDZmNjQ0NjAwLCAweDAsIDB4MCwKKzB4MCwgMHg1MDcyNmY2MiwgMHg2NTUwNjg3OSwgMHgwLAorMHg2YzZlNmI0MSwgMHg1MzUzNTI1NCwgMHgwLCAweDEwOWE0LAorMHgxMGExYywgMHgxMGE1MCwgMHgxMGE3YywgMHgxMTA1MCwKKzB4MTBhYTgsIDB4MTBiMTAsIDB4MTExZmMsIDB4MTBkYzAsCisweDEwYzY4LCAweDEwYzgwLCAweDEwY2M0LCAweDEwY2VjLAorMHgxMGQwYywgMHgxMGQzNCwgMHgxMTFmYywgMHgxMGRjMCwKKzB4MTBkZjgsIDB4MTBlMTAsIDB4MTBlNDAsIDB4MTBlNjgsCisweDEwZTg4LCAweDEwZWIwLCAweDAsIDB4MTBmZGMsCisweDExMDA4LCAweDExMDJjLCAweDExMWZjLCAweDExMDUwLAorMHgxMTA3OCwgMHgxMTEwOCwgMHgwLCAweDAsCisweDAsIDB4MTE4NmMsIDB4MTE5M2MsIDB4MTFhMTQsCisweDExYWU0LCAweDExYjQwLCAweDExYzFjLCAweDExYzQ0LAorMHgxMWQyMCwgMHgxMWQ0OCwgMHgxMWVmMCwgMHgxMWYxOCwKKzB4MTIwYzAsIDB4MTIyYjgsIDB4MTI1NGMsIDB4MTI0NjAsCisweDEyNTRjLCAweDEyNTc4LCAweDEyMGU4LCAweDEyMjkwLAorMHg3MjczNzQ1ZiwgMHg2NzZkNjk2OSwgMHgwLCAweDEyNjA4LAorMHgxMjY0MCwgMHgxMjcyOCwgMHgxMzM3NCwgMHgxMzNiNCwKKzB4MTMzY2MsIDB4NzM2NTc0NmMsIDB4NmY2ZjcwMDAsIDB4MCwKKzB4MCwgMHgxM2JiYywgMHgxM2JmYywgMHgxM2M4YywKKzB4MTNjZDAsIDB4MTNkMzQsIDB4MTNkYzAsIDB4MTNkZjQsCisweDEzZTdjLCAweDEzZjE0LCAweDEzZmU0LCAweDE0MDI0LAorMHgxNDBhOCwgMHgxNDBjYywgMHgxNDFkYywgMHg2NDZmNDI2MSwKKzB4NzM2NTUwNjcsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4NzM3NDZkNjEsIDB4NjM0YzRlNGIsIDB4MCwKKzB4Njc2NTc0NmQsIDB4NjM2YzZlNmIsIDB4MCwgMHgxNGVkOCwKKzB4MTRlZDgsIDB4MTRiOGMsIDB4MTRiZDgsIDB4MTRjMjQsCisweDE0ZWQ4LCAweDczNjU3NDZkLCAweDYxNjM2MTYzLCAweDc0MDAwMDAwLAogMHgwLCAweDAgfTsKIHN0YXRpYyB1MzIgdGlnb24yRndEYXRhWyhNQVhfREFUQV9MRU4vNCkgKyAxXSBfX2RldmluaXRkYXRhID0gewotMHgxLCAKLTB4MSwgMHgxLCAweGMwMDFmYywgMHgzZmZjLCAKLTB4YzAwMDAwLCAweDQxNmM3NDY1LCAweDZmNmUyMDQxLCAweDYzNjU0ZTQ5LCAKLTB4NDMyMDU2MDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHg0MTZjNzQ2NSwgCi0weDZmNmUyMDQxLCAweDYzNjU0ZTQ5LCAweDQzMjA1NjAwLCAweDQyNDI0MjQyLCAKLTB4MCwgMHgwLCAweDAsIDB4MWZmZmZjLCAKLTB4MWZmZjdjLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4NjBjZjAwLCAKLTB4NjAsIDB4Y2YwMDAwMDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDAsIAotMHgwLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MCwgCi0weDAsIDB4MCwgMHgzLCAweDAsIAotMHgxLCAweDAsIDB4MCwgMHgwLCAKLTB4MSwgMHgwLCAweDEsIDB4MCwgCi0weDAsIDB4MCwgMHgwLCAweDEsIAotMHgxLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDEwMDAwMDAsIDB4MjEwMDAwMDAsIAotMHgxMjAwMDE0MCwgMHgwLCAweDAsIDB4MjAwMDAwMDAsIAotMHgxMjAwMDBhMCwgMHgwLCAweDEyMDAwMDYwLCAweDEyMDAwMTgwLCAKLTB4MTIwMDAxZTAsIDB4MCwgMHgwLCAweDAsIAotMHgxLCAweDAsIDB4MCwgMHgwLCAKLTB4MCwgMHgwLCAweDAsIDB4MiwgCi0weDAsIDB4MCwgMHgzMDAwMSwgMHgxLCAKLTB4MzAyMDEsIDB4MCwgMHgwLCAweDEwMTAxMDEsIAotMHgxMDEwMTAwLCAweDEwMTAwLCAweDEwMTAwMDEsIDB4MTAwMDEsIAorMHgxLAorMHgxLCAweDEsIDB4YzAwMWZjLCAweDNmZmMsCisweGMwMDAwMCwgMHg0MTZjNzQ2NSwgMHg2ZjZlMjA0MSwgMHg2MzY1NGU0OSwKKzB4NDMyMDU2MDAsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDQxNmM3NDY1LAorMHg2ZjZlMjA0MSwgMHg2MzY1NGU0OSwgMHg0MzIwNTYwMCwgMHg0MjQyNDI0MiwKKzB4MCwgMHgwLCAweDAsIDB4MWZmZmZjLAorMHgxZmZmN2MsIDB4MCwgMHgwLCAweDAsCisweDAsIDB4MCwgMHgwLCAweDYwY2YwMCwKKzB4NjAsIDB4Y2YwMDAwMDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MywgMHgwLAorMHgxLCAweDAsIDB4MCwgMHgwLAorMHgxLCAweDAsIDB4MSwgMHgwLAorMHgwLCAweDAsIDB4MCwgMHgxLAorMHgxLCAweDAsIDB4MCwgMHgwLAorMHgwLCAweDAsIDB4MTAwMDAwMCwgMHgyMTAwMDAwMCwKKzB4MTIwMDAxNDAsIDB4MCwgMHgwLCAweDIwMDAwMDAwLAorMHgxMjAwMDBhMCwgMHgwLCAweDEyMDAwMDYwLCAweDEyMDAwMTgwLAorMHgxMjAwMDFlMCwgMHgwLCAweDAsIDB4MCwKKzB4MSwgMHgwLCAweDAsIDB4MCwKKzB4MCwgMHgwLCAweDAsIDB4MiwKKzB4MCwgMHgwLCAweDMwMDAxLCAweDEsCisweDMwMjAxLCAweDAsIDB4MCwgMHgxMDEwMTAxLAorMHgxMDEwMTAwLCAweDEwMTAwLCAweDEwMTAwMDEsIDB4MTAwMDEsCiAweDEwMDAxMDEsIDB4MTAxLCAweDAsIDB4MCB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYW1kODExMWUuYyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKaW5kZXggZWQzMjJhNy4uMjg4NTVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYW1kODExMWUuYworKysgYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCkBAIC0xLDggKzEsOCBAQAogCi0vKiBBZHZhbmNlZCAgTWljcm8gRGV2aWNlcyBJbmMuIEFNRDgxMTFFIExpbnV4IE5ldHdvcmsgRHJpdmVyIAotICogQ29weXJpZ2h0IChDKSAyMDA0IEFkdmFuY2VkIE1pY3JvIERldmljZXMgCisvKiBBZHZhbmNlZCAgTWljcm8gRGV2aWNlcyBJbmMuIEFNRDgxMTFFIExpbnV4IE5ldHdvcmsgRHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcwogICoKLSAqIAorICoKICAqIENvcHlyaWdodCAyMDAxLDIwMDIgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAbWFuZHJha2Vzb2Z0LmNvbT4gWyA4MTM5Y3AuYyx0ZzMuYyBdCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKVsgdGczLmNdCiAgKiBDb3B5cmlnaHQgMTk5Ni0xOTk5IFRob21hcyBCb2dlbmRvZXJmZXIgWyBwY25ldDMyLmMgXQpAQCAtMTIsNyArMTIsNyBAQAogICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tIFsgcGNuZXQzMi5jIF0KICAqIENvcHlyaWdodCAoQykgMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0yNSwxNiArMjUsMTYgQEAKICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IAorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKICAqIFVTQQotICAKKwogTW9kdWxlIE5hbWU6CiAKIAlhbWQ4MTExZS5jCiAKIEFic3RyYWN0OgotCQotIAkgQU1EODExMSBiYXNlZCAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlciBEcml2ZXIuIAorCisgCSBBTUQ4MTExIGJhc2VkIDEwLzEwMCBFdGhlcm5ldCBDb250cm9sbGVyIERyaXZlci4KIAogRW52aXJvbm1lbnQ6CiAKQEAgLTU4LDEzICs1OCwxMyBAQAogCTMuMC40IDEyLzA5LzIwMDMKIAkgMS4gQWRkZWQgc2V0X21hY19hZGRyZXNzIHJvdXRpbmUgZm9yIGJvbmRpbmcgZHJpdmVyIHN1cHBvcnQuCiAJIDIuIFRlc3RlZCB0aGUgZHJpdmVyIGZvciBib25kaW5nIHN1cHBvcnQKLQkgMy4gQnVnIGZpeDogRml4ZWQgbWlzbWFjaCBpbiBhY3R1YWwgcmVjZWl2ZSBidWZmZXIgbGVudGggYW5kIGxlbnRoIAorCSAzLiBCdWcgZml4OiBGaXhlZCBtaXNtYWNoIGluIGFjdHVhbCByZWNlaXZlIGJ1ZmZlciBsZW50aCBhbmQgbGVudGgKIAkgICAgaW5kaWNhdGVkIHRvIHRoZSBoL3cuCi0JIDQuIE1vZGlmaWVkIGFtZDgxMTFlX3J4KCkgcm91dGluZSB0byByZWNlaXZlIGFsbCB0aGUgcmVjZWl2ZWQgcGFja2V0cyAKKwkgNC4gTW9kaWZpZWQgYW1kODExMWVfcngoKSByb3V0aW5lIHRvIHJlY2VpdmUgYWxsIHRoZSByZWNlaXZlZCBwYWNrZXRzCiAJICAgIGluIHRoZSBmaXJzdCBpbnRlcnJ1cHQuCiAJIDUuIEJ1ZyBmaXg6IENvcnJlY3RlZCAgcnhfZXJyb3JzICByZXBvcnRlZCBpbiBnZXRfc3RhdHMoKSBmdW5jdGlvbi4KIAkzLjAuNSAwMy8yMi8yMDA0Ci0JIDEuIEFkZGVkIE5BUEkgc3VwcG9ydCAgCisJIDEuIEFkZGVkIE5BUEkgc3VwcG9ydAogCiAqLwogCkBAIC04NCw3ICs4NCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgkKKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIApAQCAtMTAxLDkgKzEwMSw5IEBACiAKICNpbmNsdWRlICJhbWQ4MTExZS5oIgogI2RlZmluZSBNT0RVTEVfTkFNRQkiYW1kODExMWUiCi0jZGVmaW5lIE1PRFVMRV9WRVJTCSIzLjAuNSIKKyNkZWZpbmUgTU9EVUxFX1ZFUlMJIjMuMC42IgogTU9EVUxFX0FVVEhPUigiQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiQU1EODExMSBiYXNlZCAxMC8xMDAgRXRoZXJuZXQgQ29udHJvbGxlci4gRHJpdmVyIFZlcnNpb24gMy4wLjMiKTsKK01PRFVMRV9ERVNDUklQVElPTiAoIkFNRDgxMTEgYmFzZWQgMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIuIERyaXZlciBWZXJzaW9uIDMuMC42Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYW1kODExMWVfcGNpX3RibCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc3BlZWRfZHVwbGV4LCBpbnQsIE5VTEwsIDApOwpAQCAtMTE0LDEzICsxMTQsMTMgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZHluYW1pY19pcGcsICJFbmFibGUgb3IgRGlzYWJsZSBkeW5hbWljIElQRywgMTogRW5hYmxlLCAwOiBEaXNhYmxlIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ4MTExZV9wY2lfdGJsW10gPSB7Ci0JCQorCiAJeyBQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTUQ4MTExRV83NDYyLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKIAl7IDAsIH0KIAogfTsKLS8qIAorLyoKIFRoaXMgZnVuY3Rpb24gd2lsbCByZWFkIHRoZSBQSFkgcmVnaXN0ZXJzLgogKi8KIHN0YXRpYyBpbnQgYW1kODExMWVfcmVhZF9waHkoc3RydWN0IGFtZDgxMTFlX3ByaXYqIGxwLCBpbnQgcGh5X2lkLCBpbnQgcmVnLCB1MzIqIHZhbCkKQEAgLTE0MSwxNyArMTQxLDE3IEBACiAJfSB3aGlsZSAoLS1yZXBlYXQgJiYgKHJlZ192YWwgJiBQSFlfQ01EX0FDVElWRSkpOwogCWlmKHJlZ192YWwgJiBQSFlfUkRfRVJSKQogCQlnb3RvIGVycl9waHlfcmVhZDsKLQkKKwogCSp2YWwgPSByZWdfdmFsICYgMHhmZmZmOwogCXJldHVybiAwOwotZXJyX3BoeV9yZWFkOgkKK2Vycl9waHlfcmVhZDoKIAkqdmFsID0gMDsKIAlyZXR1cm4gLUVJTlZBTDsKLQkKKwogfQogCi0vKiAKLVRoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBpbnRvIFBIWSByZWdpc3RlcnMuIAorLyoKK1RoaXMgZnVuY3Rpb24gd2lsbCB3cml0ZSBpbnRvIFBIWSByZWdpc3RlcnMuCiAqLwogc3RhdGljIGludCBhbWQ4MTExZV93cml0ZV9waHkoc3RydWN0IGFtZDgxMTFlX3ByaXYqIGxwLGludCBwaHlfaWQsIGludCByZWcsIHUzMiB2YWwpCiB7CkBAIC0xNzAsMTkgKzE3MCwxOSBAQAogCQlyZWdfdmFsID0gcmVhZGwobW1pbyArIFBIWV9BQ0NFU1MpOwogCQl1ZGVsYXkoMzApOyAgLyogSXQgdGFrZXMgMzAgdXMgdG8gcmVhZC93cml0ZSB0aGUgZGF0YSAqLwogCX0gd2hpbGUgKC0tcmVwZWF0ICYmIChyZWdfdmFsICYgUEhZX0NNRF9BQ1RJVkUpKTsKLQkKKwogCWlmKHJlZ192YWwgJiBQSFlfUkRfRVJSKQogCQlnb3RvIGVycl9waHlfd3JpdGU7Ci0JCisKIAlyZXR1cm4gMDsKIAotZXJyX3BoeV93cml0ZToJCitlcnJfcGh5X3dyaXRlOgogCXJldHVybiAtRUlOVkFMOwotCQorCiB9Ci0vKiAKKy8qCiBUaGlzIGlzIHRoZSBtaWkgcmVnaXN0ZXIgcmVhZCBmdW5jdGlvbiBwcm92aWRlZCB0byB0aGUgbWlpIGludGVyZmFjZS4KLSovIAorKi8KIHN0YXRpYyBpbnQgYW1kODExMWVfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSkKIHsKIAlzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTkwLDEyICsxOTAsMTIgQEAKIAogCWFtZDgxMTFlX3JlYWRfcGh5KGxwLHBoeV9pZCxyZWdfbnVtLCZyZWdfdmFsKTsKIAlyZXR1cm4gcmVnX3ZhbDsKLQkKKwogfQogCi0vKiAKKy8qCiBUaGlzIGlzIHRoZSBtaWkgcmVnaXN0ZXIgd3JpdGUgZnVuY3Rpb24gcHJvdmlkZWQgdG8gdGhlIG1paSBpbnRlcmZhY2UuCi0qLyAKKyovCiBzdGF0aWMgdm9pZCBhbWQ4MTExZV9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnX251bSwgaW50IHZhbCkKIHsKIAlzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjEwLDcgKzIxMCw3IEBACiB7CiAJc3RydWN0IGFtZDgxMTFlX3ByaXYgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgYm1jcixhZHZlcnQsdG1wOwotCQorCiAJLyogRGV0ZXJtaW5lIG1paSByZWdpc3RlciB2YWx1ZXMgdG8gc2V0IHRoZSBzcGVlZCAqLwogCWFkdmVydCA9IGFtZDgxMTFlX21kaW9fcmVhZChkZXYsIGxwLT5leHRfcGh5X2FkZHIsIE1JSV9BRFZFUlRJU0UpOwogCXRtcCA9IGFkdmVydCAmIH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7CkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJY2FzZSBTUEVFRDEwX0ZVTEw6CiAJCQl0bXAgfD0gQURWRVJUSVNFXzEwRlVMTDsKIAkJCWJyZWFrOwotCQljYXNlIFNQRUVEMTAwX0hBTEY6IAorCQljYXNlIFNQRUVEMTAwX0hBTEY6CiAJCQl0bXAgfD0gQURWRVJUSVNFXzEwMEhBTEY7CiAJCQlicmVhazsKIAkJY2FzZSBTUEVFRDEwMF9GVUxMOgpAQCAtMjQ0LDggKzI0NCw4IEBACiAKIH0KIAotLyogCi1UaGlzIGZ1bmN0aW9uIHdpbGwgdW5tYXAgc2tiLT5kYXRhIHNwYWNlIGFuZCB3aWxsIGZyZWUgCisvKgorVGhpcyBmdW5jdGlvbiB3aWxsIHVubWFwIHNrYi0+ZGF0YSBzcGFjZSBhbmQgd2lsbCBmcmVlCiBhbGwgdHJhbnNtaXQgYW5kIHJlY2VpdmUgc2tidWZmcy4KICovCiBzdGF0aWMgaW50IGFtZDgxMTFlX2ZyZWVfc2ticyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMjc0LDcgKzI3NCw3IEBACiAJCQlscC0+cnhfZG1hX2FkZHJbaV0gPSAwOwogCQl9CiAJfQotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NSw3ICsyODUsNyBAQAogewogCXN0cnVjdCBhbWQ4MTExZV9wcml2KiBscCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaW50IG10dSA9IGRldi0+bXR1OwotCQorCiAJaWYgKG10dSA+IEVUSF9EQVRBX0xFTil7CiAJCS8qIE1UVSArIGV0aGVybmV0IGhlYWRlciArIEZDUwogCQkrIG9wdGlvbmFsIFZMQU4gdGFnICsgc2tiIHJlc2VydmUgc3BhY2UgMiAqLwpAQCAtMjk4LDcgKzI5OCw3IEBACiAJfQogfQogCi0vKiAKKy8qCiBUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhbGwgdGhlIHByZXZpb3VzbHkgYWxsb2NhdGVkIGJ1ZmZlcnMsIGRldGVybWluZSBuZXcgcmVjZWl2ZSBidWZmZXIgbGVuZ3RoICBhbmQgd2lsbCBhbGxvY2F0ZSBuZXcgcmVjZWl2ZSBidWZmZXJzLiBUaGlzIGZ1bmN0aW9uIGFsc28gYWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBib3RoIHRoZSB0cmFuc21pdHRlciBhbmQgcmVjZWl2ZSBoYXJkd2FyZSBkZXNjcmlwdG9ycy4KICAqLwogc3RhdGljIGludCBhbWQ4MTExZV9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTMwOSwyNCArMzA5LDI0IEBACiAJbHAtPnJ4X2lkeCA9IGxwLT50eF9pZHggPSAwOwogCWxwLT50eF9jb21wbGV0ZV9pZHggPSAwOwogCWxwLT50eF9yaW5nX2lkeCA9IDA7Ci0JCisKIAogCWlmKGxwLT5vcGVuZWQpCiAJCS8qIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgdHJhbnNtaXQgYW5kIHJlY2VpdmUgc2ticyAqLwotCQlhbWQ4MTExZV9mcmVlX3NrYnMoZGV2KTsJCisJCWFtZDgxMTFlX2ZyZWVfc2ticyhkZXYpOwogCiAJZWxzZXsKIAkJIC8qIGFsbG9jYXRlIHRoZSB0eCBhbmQgcnggZGVzY3JpcHRvcnMgKi8KLQkgICAgIAlpZigobHAtPnR4X3JpbmcgPSBwY2lfYWxsb2NfY29uc2lzdGVudChscC0+cGNpX2RldiwgCisJICAgICAJaWYoKGxwLT50eF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCiAJCQlzaXplb2Yoc3RydWN0IGFtZDgxMTFlX3R4X2RyKSpOVU1fVFhfUklOR19EUiwKIAkJCSZscC0+dHhfcmluZ19kbWFfYWRkcikpID09IE5VTEwpCi0JCQorCiAJCQlnb3RvIGVycl9ub19tZW07Ci0JCi0JICAgICAJaWYoKGxwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIAorCisJICAgICAJaWYoKGxwLT5yeF9yaW5nID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCiAJCQlzaXplb2Yoc3RydWN0IGFtZDgxMTFlX3J4X2RyKSpOVU1fUlhfUklOR19EUiwKIAkJCSZscC0+cnhfcmluZ19kbWFfYWRkcikpID09IE5VTEwpCi0JCQorCiAJCQlnb3RvIGVycl9mcmVlX3R4X3Jpbmc7CiAKIAl9CkBAIC0zNDYsNyArMzQ2LDcgQEAKIAl9CiAgICAgICAgIC8qIEluaXRpbGFpemluZyByZWNlaXZlIGRlc2NyaXB0b3JzICovCiAJZm9yIChpID0gMDsgaSA8IE5VTV9SWF9CVUZGRVJTOyBpKyspIHsKLQkJbHAtPnJ4X2RtYV9hZGRyW2ldID0gcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsIAorCQlscC0+cnhfZG1hX2FkZHJbaV0gPSBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2RldiwKIAkJCWxwLT5yeF9za2J1ZmZbaV0tPmRhdGEsbHAtPnJ4X2J1ZmZfbGVuLTIsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJbHAtPnJ4X3JpbmdbaV0uYnVmZl9waHlfYWRkciA9IGNwdV90b19sZTMyKGxwLT5yeF9kbWFfYWRkcltpXSk7CkBAIC0zNjUsMTUgKzM2NSwxNSBAQAogCXJldHVybiAwOwogCiBlcnJfZnJlZV9yeF9yaW5nOgotCQotCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIAorCisJcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2RldiwKIAkJc2l6ZW9mKHN0cnVjdCBhbWQ4MTExZV9yeF9kcikqTlVNX1JYX1JJTkdfRFIsbHAtPnJ4X3JpbmcsCiAJCWxwLT5yeF9yaW5nX2RtYV9hZGRyKTsKIAogZXJyX2ZyZWVfdHhfcmluZzoKLQkKKwogCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCi0JCSBzaXplb2Yoc3RydWN0IGFtZDgxMTFlX3R4X2RyKSpOVU1fVFhfUklOR19EUixscC0+dHhfcmluZywgCisJCSBzaXplb2Yoc3RydWN0IGFtZDgxMTFlX3R4X2RyKSpOVU1fVFhfUklOR19EUixscC0+dHhfcmluZywKIAkJIGxwLT50eF9yaW5nX2RtYV9hZGRyKTsKIAogZXJyX25vX21lbToKQEAgLTM5NSwxMSArMzk1LDExIEBACiAJCWNhc2UgUlhfSU5UUl9DT0FMIDoKIAkJCXRpbWVvdXQgPSBjb2FsX2NvbmYtPnJ4X3RpbWVvdXQ7CiAJCQlldmVudF9jb3VudCA9IGNvYWxfY29uZi0+cnhfZXZlbnRfY291bnQ7Ci0JCQlpZiggdGltZW91dCA+IE1BWF9USU1FT1VUIHx8IAotCQkJCQlldmVudF9jb3VudCA+IE1BWF9FVkVOVF9DT1VOVCApIAorCQkJaWYoIHRpbWVvdXQgPiBNQVhfVElNRU9VVCB8fAorCQkJCQlldmVudF9jb3VudCA+IE1BWF9FVkVOVF9DT1VOVCApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJdGltZW91dCA9IHRpbWVvdXQgKiBERUxBWV9USU1FUl9DT05WOyAKKwkJCXRpbWVvdXQgPSB0aW1lb3V0ICogREVMQVlfVElNRVJfQ09OVjsKIAkJCXdyaXRlbChWQUwwfFNUSU5URU4sIG1taW8rSU5URU4wKTsKIAkJCXdyaXRlbCgodTMyKURMWV9JTlRfQV9SMHwoIGV2ZW50X2NvdW50PDwgMTYgKXx0aW1lb3V0LAogCQkJCQkJCW1taW8rRExZX0lOVF9BKTsKQEAgLTQwOCwxMiArNDA4LDEyIEBACiAJCWNhc2UgVFhfSU5UUl9DT0FMIDoKIAkJCXRpbWVvdXQgPSBjb2FsX2NvbmYtPnR4X3RpbWVvdXQ7CiAJCQlldmVudF9jb3VudCA9IGNvYWxfY29uZi0+dHhfZXZlbnRfY291bnQ7Ci0JCQlpZiggdGltZW91dCA+IE1BWF9USU1FT1VUIHx8IAotCQkJCQlldmVudF9jb3VudCA+IE1BWF9FVkVOVF9DT1VOVCApIAorCQkJaWYoIHRpbWVvdXQgPiBNQVhfVElNRU9VVCB8fAorCQkJCQlldmVudF9jb3VudCA+IE1BWF9FVkVOVF9DT1VOVCApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkgICAKLQkJCXRpbWVvdXQgPSB0aW1lb3V0ICogREVMQVlfVElNRVJfQ09OVjsgCisKKwkJCXRpbWVvdXQgPSB0aW1lb3V0ICogREVMQVlfVElNRVJfQ09OVjsKIAkJCXdyaXRlbChWQUwwfFNUSU5URU4sbW1pbytJTlRFTjApOwogCQkJd3JpdGVsKCh1MzIpRExZX0lOVF9CX1QwfCggZXZlbnRfY291bnQ8PCAxNiApfHRpbWVvdXQsCiAJCQkJCQkJIG1taW8rRExZX0lOVF9CKTsKQEAgLTQyNSw3ICs0MjUsNyBAQAogCQkJd3JpdGVsKDAsIG1taW8gK0RMWV9JTlRfQik7CiAJCQl3cml0ZWwoMCwgbW1pbytETFlfSU5UX0EpOwogCQkJYnJlYWs7Ci0JCSBjYXNlIEVOQUJMRV9DT0FMOiAKKwkJIGNhc2UgRU5BQkxFX0NPQUw6CiAJCSAgICAgICAvKiBTdGFydCB0aGUgdGltZXIgKi8KIAkJCXdyaXRlbCgodTMyKVNPRlRfVElNRVJfRlJFUSwgbW1pbytTVFZBTCk7IC8qICAwLjUgc2VjICovCiAJCQl3cml0ZWwoVkFMMHxTVElOVEVOLCBtbWlvK0lOVEVOMCk7CkBAIC00MzgsOCArNDM4LDggQEAKIAogfQogCi0vKiAKLVRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRldmljZSByZWdpc3RlcnMgIGFuZCBzdGFydHMgdGhlIGRldmljZS4gIAorLyoKK1RoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGRldmljZSByZWdpc3RlcnMgIGFuZCBzdGFydHMgdGhlIGRldmljZS4KICovCiBzdGF0aWMgaW50IGFtZDgxMTFlX3Jlc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTQ1NSw4ICs0NTUsOCBAQAogCiAJLyogZW5hYmxlIHRoZSBwb3J0IG1hbmFnZXIgYW5kIHNldCBhdXRvIG5lZ290aWF0aW9uIGFsd2F5cyAqLwogCXdyaXRlbCgodTMyKSBWQUwxfEVOX1BNR1IsIG1taW8gKyBDTUQzICk7Ci0Jd3JpdGVsKCh1MzIpWFBIWUFORXxYUEhZUlNUICwgbW1pbyArIENUUkwyKTsgCi0JCisJd3JpdGVsKCh1MzIpWFBIWUFORXxYUEhZUlNUICwgbW1pbyArIENUUkwyKTsKKwogCWFtZDgxMTFlX3NldF9leHRfcGh5KGRldik7CiAKIAkvKiBzZXQgY29udHJvbCByZWdpc3RlcnMgKi8KQEAgLTQ2NSw3ICs0NjUsNyBAQAogCXdyaXRlbCggcmVnX3ZhbHwgWE1UU1BfMTI4IHwgQ0FDSEVfQUxJR04sIG1taW8gKyBDVFJMMSApOwogCiAJLyogZW5hYmxlIGludGVycnVwdCAqLwotCXdyaXRlbCggQVBJTlQ1RU4gfCBBUElOVDRFTiB8IEFQSU5UM0VOIHwgQVBJTlQyRU4gfCBBUElOVDFFTiB8IAorCXdyaXRlbCggQVBJTlQ1RU4gfCBBUElOVDRFTiB8IEFQSU5UM0VOIHwgQVBJTlQyRU4gfCBBUElOVDFFTiB8CiAJCUFQSU5UMEVOIHwgTUlJUERUSU5URU4gfCBNQ0NJSU5URU4gfCBNQ0NJTlRFTiB8IE1SRUlOVEVOIHwKIAkJU1BORElOVEVOIHwgTVBJTlRFTiB8IFNJTlRFTiB8IFNUSU5URU4sIG1taW8gKyBJTlRFTjApOwogCkBAIC00NzcsMTAgKzQ3NywxMCBAQAogCiAJd3JpdGV3KCh1MzIpTlVNX1RYX1JJTkdfRFIsIG1taW8gKyBYTVRfUklOR19MRU4wKTsKIAl3cml0ZXcoKHUxNilOVU1fUlhfUklOR19EUiwgbW1pbyArIFJDVl9SSU5HX0xFTjApOwotCQorCiAJLyogc2V0IGRlZmF1bHQgSVBHIHRvIDk2ICovCiAJd3JpdGV3KCh1MzIpREVGQVVMVF9JUEcsbW1pbytJUEcpOwotCXdyaXRldygodTMyKShERUZBVUxUX0lQRy1JRlMxX0RFTFRBKSwgbW1pbyArIElGUzEpOyAKKwl3cml0ZXcoKHUzMikoREVGQVVMVF9JUEctSUZTMV9ERUxUQSksIG1taW8gKyBJRlMxKTsKIAogCWlmKGxwLT5vcHRpb25zICYgT1BUSU9OX0pVTUJPX0VOQUJMRSl7CiAJCXdyaXRlbCgodTMyKVZBTDJ8SlVNQk8sIG1taW8gKyBDTUQzKTsKQEAgLTQ5NywxMCArNDk3LDEwIEBACiAJd3JpdGVsKCh1MzIpIFZBTDJ8VlNJWkV8VkxfVEFHX0RFTCwgbW1pbyArIENNRDMpOwogI2VuZGlmCiAJd3JpdGVsKCBWQUwwIHwgQVBBRF9YTVQgfCBSRVhfUlRSWSwgbW1pbyArIENNRDIgKTsKLQkKKwogCS8qIFNldHRpbmcgdGhlIE1BQyBhZGRyZXNzIHRvIHRoZSBkZXZpY2UgKi8KIAlmb3IoaSA9IDA7IGkgPCBFVEhfQUREUl9MRU47IGkrKykKLQkJd3JpdGViKCBkZXYtPmRldl9hZGRyW2ldLCBtbWlvICsgUEFEUiArIGkgKTsgCisJCXdyaXRlYiggZGV2LT5kZXZfYWRkcltpXSwgbW1pbyArIFBBRFIgKyBpICk7CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0IGNvYWxlc2NlICovCiAJaWYobHAtPm9wdGlvbnMgJiBPUFRJT05fSU5UUl9DT0FMX0VOQUJMRSl7CkBAIC01MDgsMTggKzUwOCwxOCBAQAogCQkJCQkJCQlkZXYtPm5hbWUpOwogCQlhbWQ4MTExZV9zZXRfY29hbGVzY2UoZGV2LEVOQUJMRV9DT0FMKTsKIAl9Ci0JCisKIAkvKiBzZXQgUlVOIGJpdCB0byBzdGFydCB0aGUgY2hpcCAqLwogCXdyaXRlbChWQUwyIHwgUkRNRDAsIG1taW8gKyBDTUQwKTsKIAl3cml0ZWwoVkFMMCB8IElOVFJFTiB8IFJVTiwgbW1pbyArIENNRDApOwotCQorCiAJLyogVG8gYXZvaWQgUENJIHBvc3RpbmcgYnVnICovCiAJcmVhZGwobW1pbytDTUQwKTsKIAlyZXR1cm4gMDsKIH0KLS8qIAotVGhpcyBmdW5jdGlvbiBjbGVhcnMgbmVjZXNzYXJ5IHRoZSBkZXZpY2UgcmVnaXN0ZXJzLiAKLSovCQorLyoKK1RoaXMgZnVuY3Rpb24gY2xlYXJzIG5lY2Vzc2FyeSB0aGUgZGV2aWNlIHJlZ2lzdGVycy4KKyovCiBzdGF0aWMgdm9pZCBhbWQ4MTExZV9pbml0X2h3X2RlZmF1bHQoIHN0cnVjdCBhbWQ4MTExZV9wcml2KiBscCkKIHsKIAl1bnNpZ25lZCBpbnQgcmVnX3ZhbDsKQEAgLTU0NCw3ICs1NDQsNyBAQAogCiAJLyogQ2xlYXIgQ01EMCAgKi8KIAl3cml0ZWwoQ01EMF9DTEVBUixtbWlvICsgQ01EMCk7Ci0JCisKIAkvKiBDbGVhciBDTUQyICovCiAJd3JpdGVsKENNRDJfQ0xFQVIsIG1taW8gK0NNRDIpOwogCkBAIC01OTQsNyArNTk0LDcgQEAKIAogCS8qIFNSQU1fU0laRSByZWdpc3RlciAqLwogCXJlZ192YWwgPSByZWFkbChtbWlvICsgU1JBTV9TSVpFKTsKLQkKKwogCWlmKGxwLT5vcHRpb25zICYgT1BUSU9OX0pVTUJPX0VOQUJMRSkKIAkJd3JpdGVsKCBWQUwyfEpVTUJPLCBtbWlvICsgQ01EMyk7CiAjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRApAQCAtNjA4LDU2ICs2MDgsNTYgQEAKIAogfQogCi0vKiAKLVRoaXMgZnVuY3Rpb24gZGlzYWJsZXMgdGhlIGludGVycnVwdCBhbmQgY2xlYXJzIGFsbCB0aGUgcGVuZGluZyAKKy8qCitUaGlzIGZ1bmN0aW9uIGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgYW5kIGNsZWFycyBhbGwgdGhlIHBlbmRpbmcKIGludGVycnVwdHMgaW4gSU5UMAogICovCiBzdGF0aWMgdm9pZCBhbWQ4MTExZV9kaXNhYmxlX2ludGVycnVwdChzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHApCi17CQorewogCXUzMiBpbnRyMDsKIAogCS8qIERpc2FibGUgaW50ZXJydXB0ICovCiAJd3JpdGVsKElOVFJFTiwgbHAtPm1taW8gKyBDTUQwKTsKLQkKKwogCS8qIENsZWFyIElOVDAgKi8KIAlpbnRyMCA9IHJlYWRsKGxwLT5tbWlvICsgSU5UMCk7CiAJd3JpdGVsKGludHIwLCBscC0+bW1pbyArIElOVDApOwotCQorCiAJLyogVG8gYXZvaWQgUENJIHBvc3RpbmcgYnVnICovCiAJcmVhZGwobHAtPm1taW8gKyBJTlQwKTsKIAogfQogCiAvKgotVGhpcyBmdW5jdGlvbiBzdG9wcyB0aGUgY2hpcC4gCitUaGlzIGZ1bmN0aW9uIHN0b3BzIHRoZSBjaGlwLgogKi8KIHN0YXRpYyB2b2lkIGFtZDgxMTFlX3N0b3BfY2hpcChzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHApCiB7CiAJd3JpdGVsKFJVTiwgbHAtPm1taW8gKyBDTUQwKTsKLQkKKwogCS8qIFRvIGF2b2lkIFBDSSBwb3N0aW5nIGJ1ZyAqLwogCXJlYWRsKGxwLT5tbWlvICsgQ01EMCk7CiB9CiAKLS8qIAorLyoKIFRoaXMgZnVuY3Rpb24gZnJlZXMgdGhlICB0cmFuc21pdGVyIGFuZCByZWNlaXZlciBkZXNjcmlwdG9yIHJpbmdzLgogKi8KIHN0YXRpYyB2b2lkIGFtZDgxMTFlX2ZyZWVfcmluZyhzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHApCi17CQorewogCiAJLyogRnJlZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBza2JzICovCiAJYW1kODExMWVfZnJlZV9za2JzKGxwLT5hbWQ4MTExZV9uZXRfZGV2KTsKIAogCS8qIEZyZWUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZGVzY3JpcHRvciByaW5ncyAqLwogCWlmKGxwLT5yeF9yaW5nKXsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChscC0+cGNpX2RldiwgCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCiAJCQlzaXplb2Yoc3RydWN0IGFtZDgxMTFlX3J4X2RyKSpOVU1fUlhfUklOR19EUiwKIAkJCWxwLT5yeF9yaW5nLCBscC0+cnhfcmluZ19kbWFfYWRkcik7CiAJCWxwLT5yeF9yaW5nID0gTlVMTDsKIAl9Ci0JCisKIAlpZihscC0+dHhfcmluZyl7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIAorCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LAogCQkJc2l6ZW9mKHN0cnVjdCBhbWQ4MTExZV90eF9kcikqTlVNX1RYX1JJTkdfRFIsCiAJCQlscC0+dHhfcmluZywgbHAtPnR4X3JpbmdfZG1hX2FkZHIpOwogCkBAIC02NjUsMTAgKzY2NSwxMCBAQAogCX0KIAogfQotI2lmIEFNRDgxMTFFX1ZMQU5fVEFHX1VTRUQJCi0vKiAKKyNpZiBBTUQ4MTExRV9WTEFOX1RBR19VU0VECisvKgogVGhpcyBpcyB0aGUgcmVjZWl2ZSBpbmRpY2F0aW9uIGZ1bmN0aW9uIGZvciBwYWNrZXRzIHdpdGggdmxhbiB0YWcuCi0qLwkKKyovCiBzdGF0aWMgaW50IGFtZDgxMTFlX3ZsYW5fcngoc3RydWN0IGFtZDgxMTFlX3ByaXYgKmxwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmxhbl90YWcpCiB7CiAjaWZkZWYgQ09ORklHX0FNRDgxMTFFX05BUEkKQEAgLTY4MCw3ICs2ODAsNyBAQAogI2VuZGlmCiAKIC8qCi1UaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhbGwgdGhlIHRyYW5zbWl0IHNrYnMgdGhhdCBhcmUgYWN0dWFsbHkgdHJhbnNtaXR0ZWQgYnkgdGhlIGRldmljZS4gSXQgd2lsbCBjaGVjayB0aGUgb3duZXJzaGlwIG9mIHRoZSBza2IgYmVmb3JlIGZyZWVpbmcgdGhlIHNrYi4gCitUaGlzIGZ1bmN0aW9uIHdpbGwgZnJlZSBhbGwgdGhlIHRyYW5zbWl0IHNrYnMgdGhhdCBhcmUgYWN0dWFsbHkgdHJhbnNtaXR0ZWQgYnkgdGhlIGRldmljZS4gSXQgd2lsbCBjaGVjayB0aGUgb3duZXJzaGlwIG9mIHRoZSBza2IgYmVmb3JlIGZyZWVpbmcgdGhlIHNrYi4KICovCiBzdGF0aWMgaW50IGFtZDgxMTFlX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC03MDksNyArNzA5LDcgQEAKIAkJbHAtPnR4X2NvbXBsZXRlX2lkeCsrOwogCQkvKkNPQUwgdXBkYXRlIHR4IGNvYWxlc2NpbmcgcGFyYW1ldGVycyAqLwogCQlscC0+Y29hbF9jb25mLnR4X3BhY2tldHMrKzsKLQkJbHAtPmNvYWxfY29uZi50eF9ieXRlcyArPSBscC0+dHhfcmluZ1t0eF9pbmRleF0uYnVmZl9jb3VudDsJCisJCWxwLT5jb2FsX2NvbmYudHhfYnl0ZXMgKz0gbHAtPnR4X3JpbmdbdHhfaW5kZXhdLmJ1ZmZfY291bnQ7CiAKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSAmJgogCQkJbHAtPnR4X2NvbXBsZXRlX2lkeCA+IGxwLT50eF9pZHggLSBOVU1fVFhfQlVGRkVSUyArMil7CkBAIC03MzQsMTMgKzczNCwxMyBAQAogCWludCBudW1fcnhfcGt0ID0gMDsKIAkvKmludCBtYXhfcnhfcGt0ID0gTlVNX1JYX0JVRkZFUlM7Ki8KIAlzaG9ydCBwa3RfbGVuOwotI2lmIEFNRDgxMTFFX1ZMQU5fVEFHX1VTRUQJCQorI2lmIEFNRDgxMTFFX1ZMQU5fVEFHX1VTRUQKIAlzaG9ydCB2dGFnOwogI2VuZGlmCiAJaW50IHJ4X3BrdF9saW1pdCA9IGRldi0+cXVvdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkKLQlkb3sgICAKKworCWRvewogCQkvKiBwcm9jZXNzIHJlY2VpdmUgcGFja2V0cyB1bnRpbCB3ZSB1c2UgdGhlIHF1b3RhKi8KIAkJLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KIAkJd2hpbGUoMSkgewpAQCAtNzQ4LDExICs3NDgsMTEgQEAKIAkJCWlmIChzdGF0dXMgJiBPV05fQklUKQogCQkJCWJyZWFrOwogCi0JCQkvKiAKKwkJCS8qCiAJCQkgKiBUaGVyZSBpcyBhIHRyaWNreSBlcnJvciBub3RlZCBieSBKb2huIE11cnBoeSwKIAkJCSAqIDxtdXJmQHBlcmZ0ZWNoLmNvbT4gdG8gUnVzcyBOZWxzb246IEV2ZW4gd2l0aAotCQkJICogZnVsbC1zaXplZCAqIGJ1ZmZlcnMgaXQncyBwb3NzaWJsZSBmb3IgYSAgCi0JCQkgKiBqYWJiZXIgcGFja2V0IHRvIHVzZSB0d28gYnVmZmVycywgd2l0aCBvbmx5IAorCQkJICogZnVsbC1zaXplZCAqIGJ1ZmZlcnMgaXQncyBwb3NzaWJsZSBmb3IgYQorCQkJICogamFiYmVyIHBhY2tldCB0byB1c2UgdHdvIGJ1ZmZlcnMsIHdpdGggb25seQogCQkJICogdGhlIGxhc3QgY29ycmVjdGx5IG5vdGluZyB0aGUgZXJyb3IuCiAJCQkgKi8KIApAQCAtNzY5LDkgKzc2OSw5IEBACiAJCQl9CiAJCQlwa3RfbGVuID0gbGUxNl90b19jcHUobHAtPnJ4X3JpbmdbcnhfaW5kZXhdLm1zZ19jb3VudCkgLSA0OwogCi0jaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAkJCisjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCQkJdnRhZyA9IHN0YXR1cyAmIFRUX01BU0s7Ci0JCQkvKk1BQyB3aWxsIHN0cmlwIHZsYW4gdGFnKi8gCisJCQkvKk1BQyB3aWxsIHN0cmlwIHZsYW4gdGFnKi8KIAkJCWlmKGxwLT52bGdycCAhPSBOVUxMICYmIHZ0YWcgIT0wKQogCQkJCW1pbl9wa3RfbGVuID1NSU5fUEtUX0xFTiAtIDQ7CiAJCQllbHNlCkBAIC03ODYsMTMgKzc4NiwxMyBAQAogCQkJaWYoLS1yeF9wa3RfbGltaXQgPCAwKQogCQkJCWdvdG8gcnhfbm90X2VtcHR5OwogCQkJaWYoIShuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihscC0+cnhfYnVmZl9sZW4pKSl7Ci0JCQkJLyogaWYgYWxsb2NhdGlvbiBmYWlsLCAKKwkJCQkvKiBpZiBhbGxvY2F0aW9uIGZhaWwsCiAJCQkJICAgaWdub3JlIHRoYXQgcGt0IGFuZCBnbyB0byBuZXh0IG9uZSAqLwogCQkJCWxwLT5yeF9yaW5nW3J4X2luZGV4XS5yeF9mbGFncyAmPSBSRVNFVF9SWF9GTEFHUzsKIAkJCQlscC0+ZHJ2X3J4X2Vycm9ycysrOwogCQkJCWdvdG8gZXJyX25leHRfcGt0OwogCQkJfQotCQkKKwogCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgMik7CiAJCQlza2IgPSBscC0+cnhfc2tidWZmW3J4X2luZGV4XTsKIAkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsbHAtPnJ4X2RtYV9hZGRyW3J4X2luZGV4XSwKQEAgLTgwNSwxMCArODA1LDEwIEBACiAJCQkJCQkJCSAgIG5ld19za2ItPmRhdGEsCiAJCQkJCQkJCSAgIGxwLT5yeF9idWZmX2xlbi0yLAogCQkJCQkJCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQorCiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0jaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAkJCisjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCQkJaWYobHAtPnZsZ3JwICE9IE5VTEwgJiYgKHZ0YWcgPT0gVFRfVkxBTl9UQUdHRUQpKXsKIAkJCQlhbWQ4MTExZV92bGFuX3J4KGxwLCBza2IsCiAJCQkJCSBsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tyeF9pbmRleF0udGFnX2N0cmxfaW5mbykpOwpAQCAtODE3LDIwICs4MTcsMjAgQEAKIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQkJLypDT0FMIHVwZGF0ZSByeCBjb2FsZXNjaW5nIHBhcmFtZXRlcnMqLwogCQkJbHAtPmNvYWxfY29uZi5yeF9wYWNrZXRzKys7Ci0JCQlscC0+Y29hbF9jb25mLnJ4X2J5dGVzICs9IHBrdF9sZW47CQorCQkJbHAtPmNvYWxfY29uZi5yeF9ieXRlcyArPSBwa3RfbGVuOwogCQkJbnVtX3J4X3BrdCsrOwogCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkKLQkJZXJyX25leHRfcGt0OgkKKworCQllcnJfbmV4dF9wa3Q6CiAJCQlscC0+cnhfcmluZ1tyeF9pbmRleF0uYnVmZl9waHlfYWRkcgogCQkJCT0gY3B1X3RvX2xlMzIobHAtPnJ4X2RtYV9hZGRyW3J4X2luZGV4XSk7Ci0JCQlscC0+cnhfcmluZ1tyeF9pbmRleF0uYnVmZl9jb3VudCA9IAorCQkJbHAtPnJ4X3JpbmdbcnhfaW5kZXhdLmJ1ZmZfY291bnQgPQogCQkJCWNwdV90b19sZTE2KGxwLT5yeF9idWZmX2xlbi0yKTsKIAkJCXdtYigpOwogCQkJbHAtPnJ4X3JpbmdbcnhfaW5kZXhdLnJ4X2ZsYWdzIHw9IGNwdV90b19sZTE2KE9XTl9CSVQpOwogCQkJcnhfaW5kZXggPSAoKytscC0+cnhfaWR4KSAmIFJYX1JJTkdfRFJfTU9EX01BU0s7CiAJCX0KLQkJLyogQ2hlY2sgdGhlIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgZm9yIG1vcmUgcGFja2V0cyBpbiB0aGUgCisJCS8qIENoZWNrIHRoZSBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyIGZvciBtb3JlIHBhY2tldHMgaW4gdGhlCiAJCSAgIG1lYW4gdGltZS4gUHJvY2VzcyB0aGVtIHNpbmNlIHdlIGhhdmUgbm90IHVzZWQgdXAgb3VyIHF1b3RhLiovCiAKIAkJaW50cjAgPSByZWFkbChtbWlvICsgSU5UMCk7CkBAIC04NTIsMTMgKzg1MiwxMyBAQAogCiByeF9ub3RfZW1wdHk6CiAJLyogRG8gbm90IGNhbGwgYSBuZXRpZl9yeF9jb21wbGV0ZSAqLwotCWRldi0+cXVvdGEgLT0gbnVtX3J4X3BrdDsJCisJZGV2LT5xdW90YSAtPSBudW1fcnhfcGt0OwogCSpidWRnZXQgLT0gbnVtX3J4X3BrdDsKIAlyZXR1cm4gMTsKIH0KIAogI2Vsc2UKLS8qIAorLyoKIFRoaXMgZnVuY3Rpb24gd2lsbCBjaGVjayB0aGUgb3duZXJzaGlwIG9mIHJlY2VpdmUgYnVmZmVycyBhbmQgZGVzY3JpcHRvcnMuIEl0IHdpbGwgaW5kaWNhdGUgdG8ga2VybmVsIHVwIHRvIGhhbGYgdGhlIG51bWJlciBvZiBtYXhpbXVtIHJlY2VpdmUgYnVmZmVycyBpbiB0aGUgZGVzY3JpcHRvciByaW5nLCBpbiBhIHNpbmdsZSByZWNlaXZlIGludGVycnVwdC4gSXQgd2lsbCBhbHNvIHJlcGxlbmlzaCB0aGUgZGVzY3JpcHRvcnMgd2l0aCBuZXcgc2ticy4KICovCiBzdGF0aWMgaW50IGFtZDgxMTFlX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC04NzAsMTkgKzg3MCwxOSBAQAogCWludCBudW1fcnhfcGt0ID0gMDsKIAlpbnQgbWF4X3J4X3BrdCA9IE5VTV9SWF9CVUZGRVJTOwogCXNob3J0IHBrdF9sZW47Ci0jaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAkJCisjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCXNob3J0IHZ0YWc7CiAjZW5kaWYKLQkKKwogCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCiAJd2hpbGUoKytudW1fcnhfcGt0IDw9IG1heF9yeF9wa3QpewogCQlzdGF0dXMgPSBsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tyeF9pbmRleF0ucnhfZmxhZ3MpOwogCQlpZihzdGF0dXMgJiBPV05fQklUKQogCQkJcmV0dXJuIDA7Ci0JICAgICAgIAotCQkvKiBjaGVjayBpZiBlcnIgc3VtbWFyeSBiaXQgaXMgc2V0ICovIAorCisJCS8qIGNoZWNrIGlmIGVyciBzdW1tYXJ5IGJpdCBpcyBzZXQgKi8KIAkJaWYoc3RhdHVzICYgRVJSX0JJVCl7Ci0JCQkvKiAKKwkJCS8qCiAJCQkgKiBUaGVyZSBpcyBhIHRyaWNreSBlcnJvciBub3RlZCBieSBKb2huIE11cnBoeSwKIAkJCSAqIDxtdXJmQHBlcmZ0ZWNoLmNvbT4gdG8gUnVzcyBOZWxzb246IEV2ZW4gd2l0aCBmdWxsLXNpemVkCiAJCQkgKiBidWZmZXJzIGl0J3MgcG9zc2libGUgZm9yIGEgamFiYmVyIHBhY2tldCB0byB1c2UgdHdvCkBAIC04OTksOSArODk5LDkgQEAKIAkJfQogCQlwa3RfbGVuID0gbGUxNl90b19jcHUobHAtPnJ4X3JpbmdbcnhfaW5kZXhdLm1zZ19jb3VudCkgLSA0OwogCi0jaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAkJCisjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCQl2dGFnID0gc3RhdHVzICYgVFRfTUFTSzsKLQkJLypNQUMgd2lsbCBzdHJpcCB2bGFuIHRhZyovIAorCQkvKk1BQyB3aWxsIHN0cmlwIHZsYW4gdGFnKi8KIAkJaWYobHAtPnZsZ3JwICE9IE5VTEwgJiYgdnRhZyAhPTApCiAJCQltaW5fcGt0X2xlbiA9TUlOX1BLVF9MRU4gLSA0OwogCQllbHNlCkBAIC05MTQsMTMgKzkxNCwxMyBAQAogCQkJZ290byBlcnJfbmV4dF9wa3Q7CiAJCX0KIAkJaWYoIShuZXdfc2tiID0gZGV2X2FsbG9jX3NrYihscC0+cnhfYnVmZl9sZW4pKSl7Ci0JCQkvKiBpZiBhbGxvY2F0aW9uIGZhaWwsIAorCQkJLyogaWYgYWxsb2NhdGlvbiBmYWlsLAogCQkJCWlnbm9yZSB0aGF0IHBrdCBhbmQgZ28gdG8gbmV4dCBvbmUgKi8KIAkJCWxwLT5yeF9yaW5nW3J4X2luZGV4XS5yeF9mbGFncyAmPSBSRVNFVF9SWF9GTEFHUzsKIAkJCWxwLT5kcnZfcnhfZXJyb3JzKys7CiAJCQlnb3RvIGVycl9uZXh0X3BrdDsKIAkJfQotCQkKKwogCQlza2JfcmVzZXJ2ZShuZXdfc2tiLCAyKTsKIAkJc2tiID0gbHAtPnJ4X3NrYnVmZltyeF9pbmRleF07CiAJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsbHAtPnJ4X2RtYV9hZGRyW3J4X2luZGV4XSwKQEAgLTkzMSwyNyArOTMxLDI3IEBACiAJCW5ld19za2ItPmRldiA9IGRldjsKIAkJbHAtPnJ4X2RtYV9hZGRyW3J4X2luZGV4XSA9IHBjaV9tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LAogCQkJbmV3X3NrYi0+ZGF0YSwgbHAtPnJ4X2J1ZmZfbGVuLTIsUENJX0RNQV9GUk9NREVWSUNFKTsKLQkKKwogCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCi0jaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAkJCQkKKyNpZiBBTUQ4MTExRV9WTEFOX1RBR19VU0VECiAJCWlmKGxwLT52bGdycCAhPSBOVUxMICYmICh2dGFnID09IFRUX1ZMQU5fVEFHR0VEKSl7CiAJCQlhbWQ4MTExZV92bGFuX3J4KGxwLCBza2IsCiAJCQkJIGxlMTZfdG9fY3B1KGxwLT5yeF9yaW5nW3J4X2luZGV4XS50YWdfY3RybF9pbmZvKSk7CiAJCX0gZWxzZQogI2VuZGlmCi0JCQkKKwogCQkJbmV0aWZfcnggKHNrYik7CiAJCQkvKkNPQUwgdXBkYXRlIHJ4IGNvYWxlc2NpbmcgcGFyYW1ldGVycyovCiAJCQlscC0+Y29hbF9jb25mLnJ4X3BhY2tldHMrKzsKLQkJCWxwLT5jb2FsX2NvbmYucnhfYnl0ZXMgKz0gcGt0X2xlbjsJCisJCQlscC0+Y29hbF9jb25mLnJ4X2J5dGVzICs9IHBrdF9sZW47CiAKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCisKIGVycl9uZXh0X3BrdDoKIAkJbHAtPnJ4X3JpbmdbcnhfaW5kZXhdLmJ1ZmZfcGh5X2FkZHIKIAkJCSA9IGNwdV90b19sZTMyKGxwLT5yeF9kbWFfYWRkcltyeF9pbmRleF0pOwotCQlscC0+cnhfcmluZ1tyeF9pbmRleF0uYnVmZl9jb3VudCA9IAorCQlscC0+cnhfcmluZ1tyeF9pbmRleF0uYnVmZl9jb3VudCA9CiAJCQkJY3B1X3RvX2xlMTYobHAtPnJ4X2J1ZmZfbGVuLTIpOwogCQl3bWIoKTsKIAkJbHAtPnJ4X3JpbmdbcnhfaW5kZXhdLnJ4X2ZsYWdzIHw9IGNwdV90b19sZTE2KE9XTl9CSVQpOwpAQCAtOTYxLDI2ICs5NjEsMjYgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBDT05GSUdfQU1EODExMUVfTkFQSSAqLwotLyogCisvKgogVGhpcyBmdW5jdGlvbiB3aWxsIGluZGljYXRlIHRoZSBsaW5rIHN0YXR1cyB0byB0aGUga2VybmVsLgogKi8KIHN0YXRpYyBpbnQgYW1kODExMWVfbGlua19jaGFuZ2Uoc3RydWN0IG5ldF9kZXZpY2UqIGRldikKLXsJCit7CiAJc3RydWN0IGFtZDgxMTFlX3ByaXYgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc3RhdHVzMCxzcGVlZDsKIAogCS8qIHJlYWQgdGhlIGxpbmsgY2hhbmdlICovCiAgICAgIAlzdGF0dXMwID0gcmVhZGwobHAtPm1taW8gKyBTVEFUMCk7Ci0JCisKIAlpZihzdGF0dXMwICYgTElOS19TVEFUUyl7CiAJCWlmKHN0YXR1czAgJiBBVVRPTkVHX0NPTVBMRVRFKQogCQkJbHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKLQkJZWxzZSAKKwkJZWxzZQogCQkJbHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CiAKIAkJaWYoc3RhdHVzMCAmIEZVTExfRFBMWCkKIAkJCWxwLT5saW5rX2NvbmZpZy5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJZWxzZSAKKwkJZWxzZQogCQkJbHAtPmxpbmtfY29uZmlnLmR1cGxleCA9IERVUExFWF9IQUxGOwogCQlzcGVlZCA9IChzdGF0dXMwICYgU1BFRURfTUFTSykgPj4gNzsKIAkJaWYoc3BlZWQgPT0gUEhZX1NQRUVEXzEwKQpAQCAtOTg5LDIyICs5ODksMjIgQEAKIAkJCWxwLT5saW5rX2NvbmZpZy5zcGVlZCA9IFNQRUVEXzEwMDsKIAogCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayBpcyBVcC4gU3BlZWQgaXMgJXMgTWJwcyAlcyBEdXBsZXhcbiIsCQkJZGV2LT5uYW1lLAotCQkgICAgICAgKGxwLT5saW5rX2NvbmZpZy5zcGVlZCA9PSBTUEVFRF8xMDApID8gIjEwMCI6ICIxMCIsIAotCQkgICAgICAgKGxwLT5saW5rX2NvbmZpZy5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpPyAiRnVsbCI6ICJIYWxmIik7IAorCQkgICAgICAgKGxwLT5saW5rX2NvbmZpZy5zcGVlZCA9PSBTUEVFRF8xMDApID8gIjEwMCI6ICIxMCIsCisJCSAgICAgICAobHAtPmxpbmtfY29uZmlnLmR1cGxleCA9PSBEVVBMRVhfRlVMTCk/ICJGdWxsIjogIkhhbGYiKTsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCX0KLQllbHNlewkKKwllbHNlewogCQlscC0+bGlua19jb25maWcuc3BlZWQgPSBTUEVFRF9JTlZBTElEOwogCQlscC0+bGlua19jb25maWcuZHVwbGV4ID0gRFVQTEVYX0lOVkFMSUQ7CiAJCWxwLT5saW5rX2NvbmZpZy5hdXRvbmVnID0gQVVUT05FR19JTlZBTElEOwogCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayBpcyBEb3duLlxuIixkZXYtPm5hbWUpOwogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwogCX0KLQkJCisKIAlyZXR1cm4gMDsKIH0KIC8qCi1UaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBtaWIgY291bnRlcnMuIAkgCitUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBtaWIgY291bnRlcnMuCiAqLwogc3RhdGljIGludCBhbWQ4MTExZV9yZWFkX21pYih2b2lkIF9faW9tZW0gKm1taW8sIHU4IE1JQl9DT1VOVEVSKQogewpAQCAtMTAyNSw3ICsxMDI1LDcgQEAKIAogLyoKIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIG1pYiByZWdpc3RlcnMgYW5kIHJldHVybnMgdGhlIGhhcmR3YXJlIHN0YXRpc3RpY3MuIEl0ICB1cGRhdGVzIHByZXZpb3VzIGludGVybmFsIGRyaXZlciBzdGF0aXN0aWNzIHdpdGggbmV3IHZhbHVlcy4KLSovIAorKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYW1kODExMWVfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KQogewogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMDMzLDkgKzEwMzMsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJLyogc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnByZXZfc3RhdHMgPSAmbHAtPnByZXZfc3RhdHM7ICovCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqIG5ld19zdGF0cyA9ICZscC0+c3RhdHM7Ci0JCisKIAlpZighbHAtPm9wZW5lZCkKLQkJcmV0dXJuICZscC0+c3RhdHM7CQorCQlyZXR1cm4gJmxwLT5zdGF0czsKIAlzcGluX2xvY2tfaXJxc2F2ZSAoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBzdGF0cy5yeF9wYWNrZXRzICovCkBAIC0xMDc4LDcgKzEwNzgsNyBAQAogCW5ld19zdGF0cy0+Y29sbGlzaW9ucyA9IGFtZDgxMTFlX3JlYWRfbWliKG1taW8sIHhtdF9jb2xsaXNpb25zKTsKIAogCS8qIHN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMqLwotCW5ld19zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IAorCW5ld19zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9CiAJCWFtZDgxMTFlX3JlYWRfbWliKG1taW8sIHJjdl91bmRlcnNpemVfcGt0cykrCiAJCWFtZDgxMTFlX3JlYWRfbWliKG1taW8sIHJjdl9vdmVyc2l6ZV9wa3RzKTsKIApAQCAtMTA5OSwxMSArMTA5OSwxMSBAQAogCW5ld19zdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyA9IGFtZDgxMTFlX3JlYWRfbWliKG1taW8sIHJjdl9taXNzX3BrdHMpOwogCiAJLyogc3RhdHMudHhfYWJvcnRlZF9lcnJvcnMqLwotCW5ld19zdGF0cy0+dHhfYWJvcnRlZF9lcnJvcnMgPSAKKwluZXdfc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0KIAkJYW1kODExMWVfcmVhZF9taWIobW1pbywgeG10X2V4Y2Vzc2l2ZV9jb2xsaXNpb24pOwogCiAJLyogc3RhdHMudHhfY2Fycmllcl9lcnJvcnMqLwotCW5ld19zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSAKKwluZXdfc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzID0KIAkJYW1kODExMWVfcmVhZF9taWIobW1pbywgeG10X2xvc3NfY2Fycmllcik7CiAKIAkvKiBzdGF0cy50eF9maWZvX2Vycm9ycyovCkBAIC0xMTE1LDEyICsxMTE1LDEyIEBACiAKIAkvKiBSZXNldCB0aGUgbWlicyBmb3IgY29sbGVjdGluZyBuZXcgc3RhdGlzdGljcyAqLwogCS8qIHdyaXRldyhNSUJfQ0xFQVIsIG1taW8gKyBNSUJfQUREUik7Ki8KLQkJCisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiBuZXdfc3RhdHM7CiB9Ci0vKiBUaGlzIGZ1bmN0aW9uIHJlY2FsY3VsYXRlIHRoZSBpbnRlcnVwdCBjb2FsZXNjaW5nICBtb2RlIG9uIGV2ZXJ5IGludGVycnVwdCAKKy8qIFRoaXMgZnVuY3Rpb24gcmVjYWxjdWxhdGUgdGhlIGludGVydXB0IGNvYWxlc2NpbmcgIG1vZGUgb24gZXZlcnkgaW50ZXJydXB0CiBhY2NvcmRpbmcgdG8gdGhlIGRhdGFyYXRlIGFuZCB0aGUgcGFja2V0IHJhdGUuCiAqLwogc3RhdGljIGludCBhbWQ4MTExZV9jYWxjX2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMTM2LDE5ICsxMTM2LDE5IEBACiAKIAl0eF9wa3RfcmF0ZSA9IGNvYWxfY29uZi0+dHhfcGFja2V0cyAtIGNvYWxfY29uZi0+dHhfcHJldl9wYWNrZXRzOwogCWNvYWxfY29uZi0+dHhfcHJldl9wYWNrZXRzID0gIGNvYWxfY29uZi0+dHhfcGFja2V0czsKLQkKKwogCXR4X2RhdGFfcmF0ZSA9IGNvYWxfY29uZi0+dHhfYnl0ZXMgLSBjb2FsX2NvbmYtPnR4X3ByZXZfYnl0ZXM7CiAJY29hbF9jb25mLT50eF9wcmV2X2J5dGVzID0gIGNvYWxfY29uZi0+dHhfYnl0ZXM7Ci0JCisKIAlyeF9wa3RfcmF0ZSA9IGNvYWxfY29uZi0+cnhfcGFja2V0cyAtIGNvYWxfY29uZi0+cnhfcHJldl9wYWNrZXRzOwogCWNvYWxfY29uZi0+cnhfcHJldl9wYWNrZXRzID0gIGNvYWxfY29uZi0+cnhfcGFja2V0czsKLQkKKwogCXJ4X2RhdGFfcmF0ZSA9IGNvYWxfY29uZi0+cnhfYnl0ZXMgLSBjb2FsX2NvbmYtPnJ4X3ByZXZfYnl0ZXM7CiAJY29hbF9jb25mLT5yeF9wcmV2X2J5dGVzID0gIGNvYWxfY29uZi0+cnhfYnl0ZXM7Ci0JCisKIAlpZihyeF9wa3RfcmF0ZSA8IDgwMCl7CiAJCWlmKGNvYWxfY29uZi0+cnhfY29hbF90eXBlICE9IE5PX0NPQUxFU0NFKXsKLQkJCQorCiAJCQljb2FsX2NvbmYtPnJ4X3RpbWVvdXQgPSAweDA7CiAJCQljb2FsX2NvbmYtPnJ4X2V2ZW50X2NvdW50ID0gMDsKIAkJCWFtZDgxMTFlX3NldF9jb2FsZXNjZShkZXYsUlhfSU5UUl9DT0FMKTsKQEAgLTExNTYsMTEgKzExNTYsMTEgQEAKIAkJfQogCX0KIAllbHNlewotCQorCiAJCXJ4X3BrdF9zaXplID0gcnhfZGF0YV9yYXRlL3J4X3BrdF9yYXRlOwogCQlpZiAocnhfcGt0X3NpemUgPCAxMjgpewogCQkJaWYoY29hbF9jb25mLT5yeF9jb2FsX3R5cGUgIT0gTk9fQ09BTEVTQ0UpewotCQkJCisKIAkJCQljb2FsX2NvbmYtPnJ4X3RpbWVvdXQgPSAwOwogCQkJCWNvYWxfY29uZi0+cnhfZXZlbnRfY291bnQgPSAwOwogCQkJCWFtZDgxMTFlX3NldF9jb2FsZXNjZShkZXYsUlhfSU5UUl9DT0FMKTsKQEAgLTExNjksNyArMTE2OSw3IEBACiAKIAkJfQogCQllbHNlIGlmICggKHJ4X3BrdF9zaXplID49IDEyOCkgJiYgKHJ4X3BrdF9zaXplIDwgNTEyKSApewotCQorCiAJCQlpZihjb2FsX2NvbmYtPnJ4X2NvYWxfdHlwZSAhPSAgTE9XX0NPQUxFU0NFKXsKIAkJCQljb2FsX2NvbmYtPnJ4X3RpbWVvdXQgPSAxOwogCQkJCWNvYWxfY29uZi0+cnhfZXZlbnRfY291bnQgPSA0OwpAQCAtMTE3OCwxNCArMTE3OCwxNCBAQAogCQkJfQogCQl9CiAJCWVsc2UgaWYgKChyeF9wa3Rfc2l6ZSA+PSA1MTIpICYmIChyeF9wa3Rfc2l6ZSA8IDEwMjQpKXsKLQkJCQorCiAJCQlpZihjb2FsX2NvbmYtPnJ4X2NvYWxfdHlwZSAhPSAgTUVESVVNX0NPQUxFU0NFKXsKIAkJCQljb2FsX2NvbmYtPnJ4X3RpbWVvdXQgPSAxOwogCQkJCWNvYWxfY29uZi0+cnhfZXZlbnRfY291bnQgPSA0OwogCQkJCWFtZDgxMTFlX3NldF9jb2FsZXNjZShkZXYsUlhfSU5UUl9DT0FMKTsKIAkJCQljb2FsX2NvbmYtPnJ4X2NvYWxfdHlwZSA9IE1FRElVTV9DT0FMRVNDRTsKLQkJCX0JCQotCQkJCQorCQkJfQorCiAJCX0KIAkJZWxzZSBpZihyeF9wa3Rfc2l6ZSA+PSAxMDI0KXsKIAkJCWlmKGNvYWxfY29uZi0+cnhfY29hbF90eXBlICE9ICBISUdIX0NPQUxFU0NFKXsKQEAgLTExOTMsMTMgKzExOTMsMTMgQEAKIAkJCQljb2FsX2NvbmYtPnJ4X2V2ZW50X2NvdW50ID0gMzsKIAkJCQlhbWQ4MTExZV9zZXRfY29hbGVzY2UoZGV2LFJYX0lOVFJfQ09BTCk7CiAJCQkJY29hbF9jb25mLT5yeF9jb2FsX3R5cGUgPSBISUdIX0NPQUxFU0NFOwotCQkJfQkJCisJCQl9CiAJCX0KIAl9CiAgICAgCS8qIE5PVyBGT1IgVFggSU5UUiBDT0FMRVNDICovCiAJaWYodHhfcGt0X3JhdGUgPCA4MDApewogCQlpZihjb2FsX2NvbmYtPnR4X2NvYWxfdHlwZSAhPSBOT19DT0FMRVNDRSl7Ci0JCQkKKwogCQkJY29hbF9jb25mLT50eF90aW1lb3V0ID0gMHgwOwogCQkJY29hbF9jb25mLT50eF9ldmVudF9jb3VudCA9IDA7CiAJCQlhbWQ4MTExZV9zZXRfY29hbGVzY2UoZGV2LFRYX0lOVFJfQ09BTCk7CkBAIC0xMjA3LDEyICsxMjA3LDEyIEBACiAJCX0KIAl9CiAJZWxzZXsKLQkKKwogCQl0eF9wa3Rfc2l6ZSA9IHR4X2RhdGFfcmF0ZS90eF9wa3RfcmF0ZTsKIAkJaWYgKHR4X3BrdF9zaXplIDwgMTI4KXsKLQkJCisKIAkJCWlmKGNvYWxfY29uZi0+dHhfY29hbF90eXBlICE9IE5PX0NPQUxFU0NFKXsKLQkJCQorCiAJCQkJY29hbF9jb25mLT50eF90aW1lb3V0ID0gMDsKIAkJCQljb2FsX2NvbmYtPnR4X2V2ZW50X2NvdW50ID0gMDsKIAkJCQlhbWQ4MTExZV9zZXRfY29hbGVzY2UoZGV2LFRYX0lOVFJfQ09BTCk7CkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCiAJCX0KIAkJZWxzZSBpZiAoICh0eF9wa3Rfc2l6ZSA+PSAxMjgpICYmICh0eF9wa3Rfc2l6ZSA8IDUxMikgKXsKLQkKKwogCQkJaWYoY29hbF9jb25mLT50eF9jb2FsX3R5cGUgIT0gIExPV19DT0FMRVNDRSl7CiAJCQkJY29hbF9jb25mLT50eF90aW1lb3V0ID0gMTsKIAkJCQljb2FsX2NvbmYtPnR4X2V2ZW50X2NvdW50ID0gMjsKQEAgLTEyMzEsMTQgKzEyMzEsMTQgQEAKIAkJCX0KIAkJfQogCQllbHNlIGlmICgodHhfcGt0X3NpemUgPj0gNTEyKSAmJiAodHhfcGt0X3NpemUgPCAxMDI0KSl7Ci0JCQkKKwogCQkJaWYoY29hbF9jb25mLT50eF9jb2FsX3R5cGUgIT0gIE1FRElVTV9DT0FMRVNDRSl7CiAJCQkJY29hbF9jb25mLT50eF90aW1lb3V0ID0gMjsKIAkJCQljb2FsX2NvbmYtPnR4X2V2ZW50X2NvdW50ID0gNTsKIAkJCQlhbWQ4MTExZV9zZXRfY29hbGVzY2UoZGV2LFRYX0lOVFJfQ09BTCk7CiAJCQkJY29hbF9jb25mLT50eF9jb2FsX3R5cGUgPSBNRURJVU1fQ09BTEVTQ0U7Ci0JCQl9CQkKLQkJCQkKKwkJCX0KKwogCQl9CiAJCWVsc2UgaWYodHhfcGt0X3NpemUgPj0gMTAyNCl7CiAJCQlpZiAodHhfcGt0X3NpemUgPj0gMTAyNCl7CkBAIC0xMjQ3LDcgKzEyNDcsNyBAQAogCQkJCQljb2FsX2NvbmYtPnR4X2V2ZW50X2NvdW50ID0gODsKIAkJCQkJYW1kODExMWVfc2V0X2NvYWxlc2NlKGRldixUWF9JTlRSX0NPQUwpOwogCQkJCQljb2FsX2NvbmYtPnR4X2NvYWxfdHlwZSA9IEhJR0hfQ09BTEVTQ0U7Ci0JCQkJfQkJCisJCQkJfQogCQkJfQogCQl9CiAJfQpAQCAtMTI4NCw3ICsxMjg0LDcgQEAKIAkJaGFuZGxlZCA9IDA7CiAJCWdvdG8gZXJyX25vX2ludGVycnVwdDsKIAl9Ci0JCSAKKwogCS8qIEN1cnJlbnQgZHJpdmVyIHByb2Nlc3NlcyA0IGludGVycnVwdHMgOiBSSU5ULFRJTlQsTENJTlQsU1RJTlQgKi8KIAl3cml0ZWwoaW50cjAsIG1taW8gKyBJTlQwKTsKIApAQCAtMTMxMyw3ICsxMzEzLDcgQEAKIAkvKiBDaGVjayBpZiAgVHJhbnNtaXQgSW50ZXJydXB0IGhhcyBvY2N1cnJlZC4gKi8KIAlpZihpbnRyMCAmIFRJTlQwKQogCQlhbWQ4MTExZV90eChkZXYpOwotCQkKKwogCS8qIENoZWNrIGlmICBMaW5rIENoYW5nZSBJbnRlcnJ1cHQgaGFzIG9jY3VycmVkLiAqLwogCWlmIChpbnRyMCAmIExDSU5UKQogCQlhbWQ4MTExZV9saW5rX2NoYW5nZShkZXYpOwpAQCAtMTMyNCwyMSArMTMyNCwyMSBAQAogCiBlcnJfbm9faW50ZXJydXB0OgogCXdyaXRlbCggVkFMMCB8IElOVFJFTixtbWlvICsgQ01EMCk7Ci0JCisKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwotCQorCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgYW1kODExMWVfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoteyAKK3sKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOyAKKwlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKIAlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCWFtZDgxMTFlX2ludGVycnVwdCgwLCBkZXYsIE5VTEwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgCi19IAorCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KICNlbmRpZgogCiAKQEAgLTEzNDksMzUgKzEzNDksMzUgQEAKIHsKIAlzdHJ1Y3QgYW1kODExMWVfcHJpdiAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKLQkKKwogCWFtZDgxMTFlX2Rpc2FibGVfaW50ZXJydXB0KGxwKTsKIAlhbWQ4MTExZV9zdG9wX2NoaXAobHApOwogCWFtZDgxMTFlX2ZyZWVfcmluZyhscCk7Ci0JCisKIAluZXRpZl9jYXJyaWVyX29mZihscC0+YW1kODExMWVfbmV0X2Rldik7CiAKIAkvKiBEZWxldGUgaXBnIHRpbWVyICovCi0JaWYobHAtPm9wdGlvbnMgJiBPUFRJT05fRFlOX0lQR19FTkFCTEUpCSAgICAgICAgCisJaWYobHAtPm9wdGlvbnMgJiBPUFRJT05fRFlOX0lQR19FTkFCTEUpCiAJCWRlbF90aW1lcl9zeW5jKCZscC0+aXBnX2RhdGEuaXBnX3RpbWVyKTsKIAogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCQorCiAJLyogVXBkYXRlIHRoZSBzdGF0aXN0aWNzIGJlZm9yZSBjbG9zaW5nICovCiAJYW1kODExMWVfZ2V0X3N0YXRzKGRldik7CiAJbHAtPm9wZW5lZCA9IDA7CiAJcmV0dXJuIDA7CiB9Ci0vKiBUaGlzIGZ1bmN0aW9uIG9wZW5zIG5ldyBpbnRlcmZhY2UuSXQgcmVxdWVzdHMgaXJxIGZvciB0aGUgZGV2aWNlLCBpbml0aWFsaXplcyB0aGUgZGV2aWNlLGJ1ZmZlcnMgYW5kIGRlc2NyaXB0b3JzLCBhbmQgc3RhcnRzIHRoZSBkZXZpY2UuIAorLyogVGhpcyBmdW5jdGlvbiBvcGVucyBuZXcgaW50ZXJmYWNlLkl0IHJlcXVlc3RzIGlycSBmb3IgdGhlIGRldmljZSwgaW5pdGlhbGl6ZXMgdGhlIGRldmljZSxidWZmZXJzIGFuZCBkZXNjcmlwdG9ycywgYW5kIHN0YXJ0cyB0aGUgZGV2aWNlLgogKi8KIHN0YXRpYyBpbnQgYW1kODExMWVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiApCiB7CiAJc3RydWN0IGFtZDgxMTFlX3ByaXYgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmKGRldi0+aXJxID09MCB8fCByZXF1ZXN0X2lycShkZXYtPmlycSwgYW1kODExMWVfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCQkJIGRldi0+bmFtZSwgZGV2KSkgCisJCQkJCSBkZXYtPm5hbWUsIGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwpAQCAtMTM5MSw3ICsxMzkxLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCS8qIFN0YXJ0IGlwZyB0aW1lciAqLwotCWlmKGxwLT5vcHRpb25zICYgT1BUSU9OX0RZTl9JUEdfRU5BQkxFKXsJICAgICAgICAKKwlpZihscC0+b3B0aW9ucyAmIE9QVElPTl9EWU5fSVBHX0VOQUJMRSl7CiAJCWFkZF90aW1lcigmbHAtPmlwZ19kYXRhLmlwZ190aW1lcik7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBEeW5hbWljIElQRyBFbmFibGVkLlxuIixkZXYtPm5hbWUpOwogCX0KQEAgLTE0MDIsMjEgKzE0MDIsMjEgQEAKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKLQlyZXR1cm4gMDsJCQorCXJldHVybiAwOwogfQotLyogCisvKgogVGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHRyYW5zbWl0ICBkZXNjcmlwdG9ycyBhdmFpbGFibGUgdG8gcXVldWUgbW9yZSBwYWNrZXQuCiAqLwogc3RhdGljIGludCBhbWQ4MTExZV90eF9xdWV1ZV9hdmFpbChzdHJ1Y3QgYW1kODExMWVfcHJpdiogbHAgKQotewkKK3sKIAlpbnQgdHhfaW5kZXggPSBscC0+dHhfaWR4ICYgVFhfQlVGRl9NT0RfTUFTSzsKIAlpZihscC0+dHhfc2tidWZmW3R4X2luZGV4XSAhPSAwKQogCQlyZXR1cm4gLTE7CiAJZWxzZQogCQlyZXR1cm4gMDsKLQkKKwogfQotLyogCisvKgogVGhpcyBmdW5jdGlvbiB3aWxsIHF1ZXVlIHRoZSB0cmFuc21pdCBwYWNrZXRzIHRvIHRoZSBkZXNjcmlwdG9ycyBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBzZW5kIG9wZXJhdGlvbi4gSXQgYWxzbyBpbml0aWFsaXplcyB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMgd2l0aCBidWZmZXIgcGh5c2ljYWwgYWRkcmVzcywgYnl0ZSBjb3VudCwgb3duZXJzaGlwIHRvIGhhcmR3YXJlIGV0Yy4KICovCiAKQEAgLTE0MzcsOSArMTQzNyw5IEBACiAKICNpZiBBTUQ4MTExRV9WTEFOX1RBR19VU0VECiAJaWYoKGxwLT52bGdycCAhPSBOVUxMKSAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpewotCQlscC0+dHhfcmluZ1t0eF9pbmRleF0udGFnX2N0cmxfY21kIHw9IAotCQkJCWNwdV90b19sZTE2KFRDQ19WTEFOX0lOU0VSVCk7CQotCQlscC0+dHhfcmluZ1t0eF9pbmRleF0udGFnX2N0cmxfaW5mbyA9IAorCQlscC0+dHhfcmluZ1t0eF9pbmRleF0udGFnX2N0cmxfY21kIHw9CisJCQkJY3B1X3RvX2xlMTYoVENDX1ZMQU5fSU5TRVJUKTsKKwkJbHAtPnR4X3JpbmdbdHhfaW5kZXhdLnRhZ19jdHJsX2luZm8gPQogCQkJCWNwdV90b19sZTE2KHZsYW5fdHhfdGFnX2dldChza2IpKTsKIAogCX0KQEAgLTE1MTAsMTQgKzE1MTAsMTQgQEAKIAkJCX0KIAkJCWVsc2UKIAkJCQljcmMgPj49IDE7Ci0JCQkKKwogCQkJb2N0ZXQgPj49IDE7CiAJCX0KLQl9CQotCXJldHVybiBjcmM7IAorCX0KKwlyZXR1cm4gY3JjOwogfQogLyoKLVRoaXMgZnVuY3Rpb24gc2V0cyBwcm9taXNjdW9zIG1vZGUsIGFsbC1tdWx0aSBtb2RlIG9yIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyAKK1RoaXMgZnVuY3Rpb24gc2V0cyBwcm9taXNjdW9zIG1vZGUsIGFsbC1tdWx0aSBtb2RlIG9yIHRoZSBtdWx0aWNhc3QgYWRkcmVzcwogbGlzdCB0byB0aGUgZGV2aWNlLgogKi8KIHN0YXRpYyB2b2lkIGFtZDgxMTFlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTUyNyw3ICsxNTI3LDYgQEAKIAl1MzIgbWNfZmlsdGVyWzJdIDsKIAlpbnQgaSxiaXRfbnVtOwogCWlmKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyl7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZXR0aW5nICBwcm9taXNjdW91cyBtb2RlLlxuIixkZXYtPm5hbWUpOwogCQl3cml0ZWwoIFZBTDIgfCBQUk9NLCBscC0+bW1pbyArIENNRDIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTU1OSw3ICsxNTU4LDcgQEAKIAkJICAgICBpKyssIG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgewogCQliaXRfbnVtID0gKCBhbWQ4MTExZV9ldGhlcl9jcmMoRVRIX0FMRU4sbWNfcHRyLT5kbWlfYWRkcikJCQkJCQkJID4+IDI2ICkgJiAweDNmOwogCQltY19maWx0ZXJbYml0X251bSA+PiA1XSB8PSAxIDw8IChiaXRfbnVtICYgMzEpOwotCX0JCisJfQogCWFtZDgxMTFlX3dyaXRlcSgqKHU2NCopbWNfZmlsdGVyLGxwLT5tbWlvKyBMQURSRik7CiAKIAkvKiBUbyBlbGltaW5hdGUgUENJIHBvc3RpbmcgYnVnICovCkBAIC0xNjM1LDE4ICsxNjM0LDE4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKIAlpZiAod29sX2luZm8tPndvbG9wdHMgJiBXQUtFX01BR0lDKQotCQlscC0+b3B0aW9ucyB8PSAKKwkJbHAtPm9wdGlvbnMgfD0KIAkJCShPUFRJT05fV09MX0VOQUJMRSB8IE9QVElPTl9XQUtFX01BR0lDX0VOQUJMRSk7CiAJZWxzZSBpZih3b2xfaW5mby0+d29sb3B0cyAmIFdBS0VfUEhZKQotCQlscC0+b3B0aW9ucyB8PSAKKwkJbHAtPm9wdGlvbnMgfD0KIAkJCShPUFRJT05fV09MX0VOQUJMRSB8IE9QVElPTl9XQUtFX1BIWV9FTkFCTEUpOwogCWVsc2UKLQkJbHAtPm9wdGlvbnMgJj0gfk9QVElPTl9XT0xfRU5BQkxFOyAKKwkJbHAtPm9wdGlvbnMgJj0gfk9QVElPTl9XT0xfRU5BQkxFOwogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGFtZDgxMTFlX2dldF9kcnZpbmZvLAogCS5nZXRfcmVnc19sZW4gPSBhbWQ4MTExZV9nZXRfcmVnc19sZW4sCiAJLmdldF9yZWdzID0gYW1kODExMWVfZ2V0X3JlZ3MsCkBAIC0xNjU5LDkgKzE2NTgsOSBAQAogfTsKIAogLyoKLVRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbGwgdGhlICBldGh0b29sIGlvY3Rscy4gSXQgZ2l2ZXMgZHJpdmVyIGluZm8sIGdldHMvc2V0cyBkcml2ZXIgc3BlZWQsIGdldHMgbWVtb3J5IG1hcHBlZCByZWdpc3RlciB2YWx1ZXMsIGZvcmNlcyBhdXRvIG5lZ290aWF0aW9uLCBzZXRzL2dldHMgV09MIG9wdGlvbnMgZm9yIGV0aHRvb2wgYXBwbGljYXRpb24uIAorVGhpcyBmdW5jdGlvbiBoYW5kbGVzIGFsbCB0aGUgIGV0aHRvb2wgaW9jdGxzLiBJdCBnaXZlcyBkcml2ZXIgaW5mbywgZ2V0cy9zZXRzIGRyaXZlciBzcGVlZCwgZ2V0cyBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVyIHZhbHVlcywgZm9yY2VzIGF1dG8gbmVnb3RpYXRpb24sIHNldHMvZ2V0cyBXT0wgb3B0aW9ucyBmb3IgZXRodG9vbCBhcHBsaWNhdGlvbi4KICovCi0JCisKIHN0YXRpYyBpbnQgYW1kODExMWVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYgLCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkoaWZyKTsKQEAgLTE2NzcsNyArMTY3Niw3IEBACiAJCWRhdGEtPnBoeV9pZCA9IGxwLT5leHRfcGh5X2FkZHI7CiAKIAkvKiBmYWxsdGhydSAqLwotCWNhc2UgU0lPQ0dNSUlSRUc6IAorCWNhc2UgU0lPQ0dNSUlSRUc6CiAKIAkJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCQllcnIgPSBhbWQ4MTExZV9yZWFkX3BoeShscCwgZGF0YS0+cGh5X2lkLApAQCAtMTcxMiwxNiArMTcxMSwxNiBAQAogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKIAkvKiBTZXR0aW5nIHRoZSBNQUMgYWRkcmVzcyB0byB0aGUgZGV2aWNlICovCiAJZm9yKGkgPSAwOyBpIDwgRVRIX0FERFJfTEVOOyBpKyspCi0JCXdyaXRlYiggZGV2LT5kZXZfYWRkcltpXSwgbHAtPm1taW8gKyBQQURSICsgaSApOyAKLQkJCisJCXdyaXRlYiggZGV2LT5kZXZfYWRkcltpXSwgbHAtPm1taW8gKyBQQURSICsgaSApOworCiAJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotLyogCisvKgogVGhpcyBmdW5jdGlvbiBjaGFuZ2VzIHRoZSBtdHUgb2YgdGhlIGRldmljZS4gSXQgcmVzdGFydHMgdGhlIGRldmljZSAgdG8gaW5pdGlhbGl6ZSB0aGUgZGVzY3JpcHRvciB3aXRoIG5ldyByZWNlaXZlIGJ1ZmZlcnMuCi0qLyAgCisqLwogc3RhdGljIGludCBhbWQ4MTExZV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xNzMyLDcgKzE3MzEsNyBAQAogCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJLyogbmV3X210dSB3aWxsIGJlIHVzZWQKLQkJICAgd2hlbiBkZXZpY2Ugc3RhcnRzIG5ldHh0IHRpbWUgKi8gCisJCSAgIHdoZW4gZGV2aWNlIHN0YXJ0cyBuZXR4dCB0aW1lICovCiAJCWRldi0+bXR1ID0gbmV3X210dTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc1OSw3ICsxNzU4LDcgQEAKIAlscC0+dmxncnAgPSBncnA7CiAJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CiB9Ci0JCisKIHN0YXRpYyB2b2lkIGFtZDgxMTFlX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgc2hvcnQgdmlkKQogewogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xNzg0LDExICsxNzgzLDExIEBACiAKIAkvKiBBZGFwdGVyIGlzIGFscmVhZHkgc3RvcGVkL3N1c3BlbmRlZC9pbnRlcnJ1cHQtZGlzYWJsZWQgKi8KIAl3cml0ZWwoVkFMMHxMQ01PREVfU1csbHAtPm1taW8gKyBDTUQ3KTsKLQkKKwogCS8qIFRvIGVsaW1pbmF0ZSBQQ0kgcG9zdGluZyBidWcgKi8KIAlyZWFkbChscC0+bW1pbyArIENNRDcpOwogCXJldHVybiAwOwotfQkKK30KIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBwYWNrZXQgdHJhbnNtaXNzaW9uIGZhaWxzIHRvIGNvbXBsZXRlIHdpdGhpbiBhICByZXNvbmFibGUgcGVyaW9kLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGFuIGludGVycnVwdHMgaGF2ZSBiZWVuIGZhaWxlZCBvciB0aGUgIGludGVyZmFjZSBpcyBsb2NrZWQgdXAuIFRoaXMgZnVuY3Rpb24gd2lsbCByZWluaXRpYWxpemUgdGhlIGhhcmR3YXJlICovCiAKIHN0YXRpYyB2b2lkIGFtZDgxMTFlX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE4MDUsMTAgKzE4MDQsMTAgQEAKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogc3RhdGljIGludCBhbWQ4MTExZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17CQorewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CiAJc3RydWN0IGFtZDgxMTFlX3ByaXYgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKIApAQCAtMTgxOCwxMCArMTgxNywxMCBAQAogCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwotCQorCiAJLyogc3RvcCBjaGlwICovCiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwotCWlmKGxwLT5vcHRpb25zICYgT1BUSU9OX0RZTl9JUEdfRU5BQkxFKQkgICAgICAgIAorCWlmKGxwLT5vcHRpb25zICYgT1BUSU9OX0RZTl9JUEdfRU5BQkxFKQogCQlkZWxfdGltZXJfc3luYygmbHAtPmlwZ19kYXRhLmlwZ190aW1lcik7CiAJYW1kODExMWVfc3RvcF9jaGlwKGxwKTsKIAlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKQEAgLTE4MjksMTkgKzE4MjgsMTkgQEAKIAlpZihscC0+b3B0aW9ucyAmIE9QVElPTl9XT0xfRU5BQkxFKXsKIAkJIC8qIGVuYWJsZSB3b2wgKi8KIAkJaWYobHAtPm9wdGlvbnMgJiBPUFRJT05fV0FLRV9NQUdJQ19FTkFCTEUpCi0JCQlhbWQ4MTExZV9lbmFibGVfbWFnaWNwa3QobHApOwkKKwkJCWFtZDgxMTFlX2VuYWJsZV9tYWdpY3BrdChscCk7CiAJCWlmKGxwLT5vcHRpb25zICYgT1BUSU9OX1dBS0VfUEhZX0VOQUJMRSkKLQkJCWFtZDgxMTFlX2VuYWJsZV9saW5rX2NoYW5nZShscCk7CQotCQkKKwkJCWFtZDgxMTFlX2VuYWJsZV9saW5rX2NoYW5nZShscCk7CisKIAkJcGNpX2VuYWJsZV93YWtlKHBjaV9kZXYsIFBDSV9EM2hvdCwgMSk7CiAJCXBjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBQQ0lfRDNjb2xkLCAxKTsKIAogCX0KLQllbHNlewkJCisJZWxzZXsKIAkJcGNpX2VuYWJsZV93YWtlKHBjaV9kZXYsIFBDSV9EM2hvdCwgMCk7CiAJCXBjaV9lbmFibGVfd2FrZShwY2lfZGV2LCBQQ0lfRDNjb2xkLCAwKTsKIAl9Ci0JCisKIAlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EM2hvdCk7CiAKQEAgLTE4NTEsNyArMTg1MCw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKIAlzdHJ1Y3QgYW1kODExMWVfcHJpdiAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAwOwogCkBAIC0xODY2LDggKzE4NjUsOCBAQAogCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKIAlhbWQ4MTExZV9yZXN0YXJ0KGRldik7CiAJLyogUmVzdGFydCBpcGcgdGltZXIgKi8KLQlpZihscC0+b3B0aW9ucyAmIE9QVElPTl9EWU5fSVBHX0VOQUJMRSkJICAgICAgICAKLQkJbW9kX3RpbWVyKCZscC0+aXBnX2RhdGEuaXBnX3RpbWVyLCAKKwlpZihscC0+b3B0aW9ucyAmIE9QVElPTl9EWU5fSVBHX0VOQUJMRSkKKwkJbW9kX3RpbWVyKCZscC0+aXBnX2RhdGEuaXBnX3RpbWVyLAogCQkJCWppZmZpZXMgKyBJUEdfQ09OVkVSR0VfSklGRklFUyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CiAKQEAgLTE4OTUsMTYgKzE4OTQsMTYgQEAKIAl1bnNpZ25lZCBpbnQgcHJldl9jb2xfY250ID0gaXBnX2RhdGEtPmNvbF9jbnQ7CiAJdW5zaWduZWQgaW50IHRvdGFsX2NvbF9jbnQ7CiAJdW5zaWduZWQgaW50IHRtcF9pcGc7Ci0JCisKIAlpZihscC0+bGlua19jb25maWcuZHVwbGV4ID09IERVUExFWF9GVUxMKXsKIAkJaXBnX2RhdGEtPmlwZyA9IERFRkFVTFRfSVBHOwogCQlyZXR1cm47CiAJfQogCiAJaWYoaXBnX2RhdGEtPmlwZ19zdGF0ZSA9PSBTU1RBVEUpewotCQkKKwogCQlpZihpcGdfZGF0YS0+dGltZXJfdGljayA9PSBJUEdfU1RBQkxFX1RJTUUpewotCQkJCisKIAkJCWlwZ19kYXRhLT50aW1lcl90aWNrID0gMDsKIAkJCWlwZ19kYXRhLT5pcGcgPSBNSU5fSVBHIC0gSVBHX1NURVA7CiAJCQlpcGdfZGF0YS0+Y3VycmVudF9pcGcgPSBNSU5fSVBHOwpAQCAtMTkxNiwxNSArMTkxNSwxNSBAQAogCX0KIAogCWlmKGlwZ19kYXRhLT5pcGdfc3RhdGUgPT0gQ1NUQVRFKXsKLQkJCisKIAkJLyogR2V0IHRoZSBjdXJyZW50IGNvbGxpc2lvbiBjb3VudCAqLwogCi0JCXRvdGFsX2NvbF9jbnQgPSBpcGdfZGF0YS0+Y29sX2NudCA9IAorCQl0b3RhbF9jb2xfY250ID0gaXBnX2RhdGEtPmNvbF9jbnQgPQogCQkJCWFtZDgxMTFlX3JlYWRfbWliKG1taW8sIHhtdF9jb2xsaXNpb25zKTsKIAotCQlpZiAoKHRvdGFsX2NvbF9jbnQgLSBwcmV2X2NvbF9jbnQpIDwgCisJCWlmICgodG90YWxfY29sX2NudCAtIHByZXZfY29sX2NudCkgPAogCQkJCShpcGdfZGF0YS0+ZGlmZl9jb2xfY250KSl7Ci0JCQkKKwogCQkJaXBnX2RhdGEtPmRpZmZfY29sX2NudCA9CiAJCQkJdG90YWxfY29sX2NudCAtIHByZXZfY29sX2NudCA7CiAKQEAgLTE5MzksOCArMTkzOCw4IEBACiAJCQl0bXBfaXBnID0gaXBnX2RhdGEtPmlwZzsKIAkJCWlwZ19kYXRhLT5pcGdfc3RhdGUgPSBTU1RBVEU7CiAJCX0KLQkJd3JpdGV3KCh1MzIpdG1wX2lwZywgbW1pbyArIElQRyk7IAotCQl3cml0ZXcoKHUzMikodG1wX2lwZyAtIElGUzFfREVMVEEpLCBtbWlvICsgSUZTMSk7IAorCQl3cml0ZXcoKHUzMil0bXBfaXBnLCBtbWlvICsgSVBHKTsKKwkJd3JpdGV3KCh1MzIpKHRtcF9pcGcgLSBJRlMxX0RFTFRBKSwgbW1pbyArIElGUzEpOwogCX0KIAkgbW9kX3RpbWVyKCZscC0+aXBnX2RhdGEuaXBnX3RpbWVyLCBqaWZmaWVzICsgSVBHX0NPTlZFUkdFX0pJRkZJRVMpOwogCXJldHVybjsKQEAgLTIwMTEsNyArMjAxMCw3IEBACiAJCQkiZXhpdGluZy5cbiIpOwogCQlnb3RvIGVycl9mcmVlX3JlZzsKIAl9Ci0JCisKIAlyZWdfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAlyZWdfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKIApAQCAtMjAyOSw4ICsyMDI4LDggQEAKIAlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfVkxBTl9UWCB8IE5FVElGX0ZfSFdfVkxBTl9SWCA7CiAJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID1hbWQ4MTExZV92bGFuX3J4X3JlZ2lzdGVyOwogCWRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGFtZDgxMTFlX3ZsYW5fcnhfa2lsbF92aWQ7Ci0jZW5kaWYJCi0JCisjZW5kaWYKKwogCWxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlscC0+cGNpX2RldiA9IHBkZXY7CiAJbHAtPmFtZDgxMTFlX25ldF9kZXYgPSBkZXY7CkBAIC0yMDQ1LDE3ICsyMDQ0LDE3IEBACiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCX0KLQkKKwogCS8qIEluaXRpYWxpemluZyBNQUMgYWRkcmVzcyAqLwogCWZvcihpID0gMDsgaSA8IEVUSF9BRERSX0xFTjsgaSsrKQogCQkJZGV2LT5kZXZfYWRkcltpXSA9cmVhZGIobHAtPm1taW8gKyBQQURSICsgaSk7Ci0JCisKIAkvKiBTZXR0aW5nIHVzZXIgZGVmaW5lZCBwYXJhbWV0cnMgKi8KIAlscC0+ZXh0X3BoeV9vcHRpb24gPSBzcGVlZF9kdXBsZXhbY2FyZF9pZHhdOwogCWlmKGNvYWxlc2NlW2NhcmRfaWR4XSkKLQkJbHAtPm9wdGlvbnMgfD0gT1BUSU9OX0lOVFJfQ09BTF9FTkFCTEU7CQkKKwkJbHAtPm9wdGlvbnMgfD0gT1BUSU9OX0lOVFJfQ09BTF9FTkFCTEU7CiAJaWYoZHluYW1pY19pcGdbY2FyZF9pZHgrK10pCi0JCWxwLT5vcHRpb25zIHw9IE9QVElPTl9EWU5fSVBHX0VOQUJMRTsJICAgICAgICAJCisJCWxwLT5vcHRpb25zIHw9IE9QVElPTl9EWU5fSVBHX0VOQUJMRTsKIAogCS8qIEluaXRpYWxpemUgZHJpdmVyIGVudHJ5IHBvaW50cyAqLwogCWRldi0+b3BlbiA9IGFtZDgxMTFlX29wZW47CkBAIC0yMDY4LDIxICsyMDY3LDIxIEBACiAJZGV2LT5jaGFuZ2VfbXR1ID0gYW1kODExMWVfY2hhbmdlX210dTsKIAlTRVRfRVRIVE9PTF9PUFMoZGV2LCAmb3BzKTsKIAlkZXYtPmlycSA9cGRldi0+aXJxOwotCWRldi0+dHhfdGltZW91dCA9IGFtZDgxMTFlX3R4X3RpbWVvdXQ7IAotCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBBTUQ4MTExRV9UWF9USU1FT1VUOyAKKwlkZXYtPnR4X3RpbWVvdXQgPSBhbWQ4MTExZV90eF90aW1lb3V0OworCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBBTUQ4MTExRV9UWF9USU1FT1VUOwogI2lmZGVmIENPTkZJR19BTUQ4MTExRV9OQVBJCiAJZGV2LT5wb2xsID0gYW1kODExMWVfcnhfcG9sbDsKIAlkZXYtPndlaWdodCA9IDMyOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKLQlkZXYtPnBvbGxfY29udHJvbGxlciA9IGFtZDgxMTFlX3BvbGw7IAorCWRldi0+cG9sbF9jb250cm9sbGVyID0gYW1kODExMWVfcG9sbDsKICNlbmRpZgogCiAjaWYgQU1EODExMUVfVkxBTl9UQUdfVVNFRAogCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX1RYIHwgTkVUSUZfRl9IV19WTEFOX1JYOwogCWRldi0+dmxhbl9yeF9yZWdpc3RlciA9YW1kODExMWVfdmxhbl9yeF9yZWdpc3RlcjsKIAlkZXYtPnZsYW5fcnhfa2lsbF92aWQgPSBhbWQ4MTExZV92bGFuX3J4X2tpbGxfdmlkOwotI2VuZGlmCQorI2VuZGlmCiAJLyogUHJvYmUgdGhlIGV4dGVybmFsIFBIWSAqLwogCWFtZDgxMTFlX3Byb2JlX2V4dF9waHkoZGV2KTsKIApAQCAtMjEwNCwxMyArMjEwMywxMyBAQAogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwotCQorCiAJLyogSW5pdGlhbGl6ZSBzb2Z0d2FyZSBpcGcgdGltZXIgKi8KLQlpZihscC0+b3B0aW9ucyAmIE9QVElPTl9EWU5fSVBHX0VOQUJMRSl7CSAgICAgICAgCisJaWYobHAtPm9wdGlvbnMgJiBPUFRJT05fRFlOX0lQR19FTkFCTEUpewogCQlpbml0X3RpbWVyKCZscC0+aXBnX2RhdGEuaXBnX3RpbWVyKTsKIAkJbHAtPmlwZ19kYXRhLmlwZ190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRldjsKIAkJbHAtPmlwZ19kYXRhLmlwZ190aW1lci5mdW5jdGlvbiA9ICh2b2lkICopJmFtZDgxMTFlX2NvbmZpZ19pcGc7Ci0JCWxwLT5pcGdfZGF0YS5pcGdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAKKwkJbHAtPmlwZ19kYXRhLmlwZ190aW1lci5leHBpcmVzID0gamlmZmllcyArCiAJCQkJCQkgSVBHX0NPTlZFUkdFX0pJRkZJRVM7CiAJCWxwLT5pcGdfZGF0YS5pcGcgPSBERUZBVUxUX0lQRzsKIAkJbHAtPmlwZ19kYXRhLmlwZ19zdGF0ZSA9IENTVEFURTsKQEAgLTIxMjMsNyArMjEyMiw3IEBACiAgICAgCXByaW50ayhLRVJOX0lORk8gIiVzOiBbIFJldiAleCBdIFBDSSAxMC8xMDBCYXNlVCBFdGhlcm5ldCAiLAkJCQkJCQlkZXYtPm5hbWUsIGNoaXBfdmVyc2lvbik7CiAgICAgCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXByaW50aygiJTIuMnglYyIsZGV2LT5kZXZfYWRkcltpXSxpID09IDUgPyAnICcgOiAnOicpOwotICAgIAlwcmludGsoICJcbiIpOwkKKyAgICAJcHJpbnRrKCAiXG4iKTsKIAlpZiAobHAtPmV4dF9waHlfaWQpCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCBNSUkgUEhZIElEIDB4JTA4eCBhdCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgbHAtPmV4dF9waHlfaWQsIGxwLT5leHRfcGh5X2FkZHIpOwpAQCAtMjE1OCw3ICsyMTU3LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYW1kODExMWVfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmFtZDgxMTFlX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmFtZDgxMTFlX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhbWQ4MTExZV9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5oIGIvZHJpdmVycy9uZXQvYW1kODExMWUuaAppbmRleCBjZmUzYTQyLi43NzI3ZDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5oCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmgKQEAgLTEsNiArMSw2IEBACiAvKgotICogQWR2YW5jZWQgIE1pY3JvIERldmljZXMgSW5jLiBBTUQ4MTExRSBMaW51eCBOZXR3b3JrIERyaXZlciAKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzIAorICogQWR2YW5jZWQgIE1pY3JvIERldmljZXMgSW5jLiBBTUQ4MTExRSBMaW51eCBOZXR3b3JrIERyaXZlcgorICogQ29weXJpZ2h0IChDKSAyMDAzIEFkdmFuY2VkIE1pY3JvIERldmljZXMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE0LDcgKzE0LDcgQEAKICAqCiAgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IAorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcKICAqIFVTQQogCiBNb2R1bGUgTmFtZToKQEAgLTIyLDExICsyMiwxMSBAQAogICAgIGFtZDgxMTFlLmgKIAogQWJzdHJhY3Q6Ci0JCi0gCSBBTUQ4MTExIGJhc2VkIDEwLzEwMCBFdGhlcm5ldCBDb250cm9sbGVyIGRyaXZlciBkZWZpbml0aW9ucy4gCisKKyAJIEFNRDgxMTEgYmFzZWQgMTAvMTAwIEV0aGVybmV0IENvbnRyb2xsZXIgZHJpdmVyIGRlZmluaXRpb25zLgogCiBFbnZpcm9ubWVudDoKLSAgICAKKwogCUtlcm5lbCBNb2RlCiAKIFJldmlzaW9uIEhpc3Rvcnk6CkBAIC00MCw3ICs0MCw3IEBACiAKIC8qIENvbW1hbmQgc3R5bGUgcmVnaXN0ZXIgYWNjZXNzCiAKLVJlZ2lzdGVycyBDTUQwLCBDTUQyLCBDTUQzLENNRDcgYW5kIElOVEVOMCB1c2VzIGEgd3JpdGUgYWNjZXNzIHRlY2huaXF1ZSBjYWxsZWQgY29tbWFuZCBzdHlsZSBhY2Nlc3MuIEl0IGFsbG93cyB0aGUgd3JpdGUgdG8gc2VsZWN0ZWQgYml0cyBvZiB0aGlzIHJlZ2lzdGVyIHdpdGhvdXQgYWx0ZXJpbmcgdGhlIGJpdHMgdGhhdCBhcmUgbm90IHNlbGVjdGVkLiBDb21tYW5kIHN0eWxlIHJlZ2lzdGVycyBhcmUgZGl2aWRlZCBpbnRvIDQgYnl0ZXMgdGhhdCBjYW4gYmUgd3JpdHRlbiBpbmRlcGVuZGVudGx5LiBIaWdoZXIgb3JkZXIgYml0IG9mIGVhY2ggYnl0ZSBpcyB0aGUgIHZhbHVlIGJpdCB0aGF0IHNwZWNpZmllcyB0aGUgdmFsdWUgdGhhdCB3aWxsIGJlIHdyaXR0ZW4gaW50byB0aGUgc2VsZWN0ZWQgYml0cyBvZiByZWdpc3Rlci4gCitSZWdpc3RlcnMgQ01EMCwgQ01EMiwgQ01EMyxDTUQ3IGFuZCBJTlRFTjAgdXNlcyBhIHdyaXRlIGFjY2VzcyB0ZWNobmlxdWUgY2FsbGVkIGNvbW1hbmQgc3R5bGUgYWNjZXNzLiBJdCBhbGxvd3MgdGhlIHdyaXRlIHRvIHNlbGVjdGVkIGJpdHMgb2YgdGhpcyByZWdpc3RlciB3aXRob3V0IGFsdGVyaW5nIHRoZSBiaXRzIHRoYXQgYXJlIG5vdCBzZWxlY3RlZC4gQ29tbWFuZCBzdHlsZSByZWdpc3RlcnMgYXJlIGRpdmlkZWQgaW50byA0IGJ5dGVzIHRoYXQgY2FuIGJlIHdyaXR0ZW4gaW5kZXBlbmRlbnRseS4gSGlnaGVyIG9yZGVyIGJpdCBvZiBlYWNoIGJ5dGUgaXMgdGhlICB2YWx1ZSBiaXQgdGhhdCBzcGVjaWZpZXMgdGhlIHZhbHVlIHRoYXQgd2lsbCBiZSB3cml0dGVuIGludG8gdGhlIHNlbGVjdGVkIGJpdHMgb2YgcmVnaXN0ZXIuCiAKIGVnLiwgaWYgdGhlIHZhbHVlIDEwMDExMDEwYiBpcyB3cml0dGVuIGludG8gdGhlIGxlYXN0IHNpZ25pZmljYW50IGJ5dGUgb2YgYSBjb21tYW5kIHN0eWxlIHJlZ2lzdGVyLCBiaXRzIDEsMyBhbmQgNCBvZiB0aGUgcmVnaXN0ZXIgd2lsbCBiZSBzZXQgdG8gMSwgYW5kIHRoZSBvdGhlciBiaXRzIHdpbGwgbm90IGJlIGFsdGVyZWQuIElmIHRoZSB2YWx1ZSAwMDAxMTAxMGIgaXMgd3JpdHRlbiBpbnRvIHRoZSBzYW1lIGJ5dGUsIGJpdHMgMSwzIGFuZCA0IHdpbGwgYmUgY2xlYXJlZCB0byAwIGFuZCB0aGUgb3RoZXIgYml0cyB3aWxsIG5vdCBiZSBhbHRlcmVkLgogCkBAIC0xMjIsOCArMTIyLDggQEAKIAlBU0ZfSU5JVF9ET05FCQk9ICgxIDw8IDEpLAogCUFTRl9JTklUX1BSRVNFTlQJPSAoMSA8PCAwKSwKIAotfVNUQVRfQVNGX0JJVFM7IAotICAgCit9U1RBVF9BU0ZfQklUUzsKKwogdHlwZWRlZiBlbnVtIHsKIAogCU1JQl9DTURfQUNUSVZFCQk9ICgxIDw8IDE1ICksCkBAIC0xMzUsNyArMTM1LDcgQEAKIAogCiB0eXBlZGVmIGVudW0gewotCQorCiAJUE1BVF9ERVQJCT0gKDEgPDwgMTIpLAogCU1QX0RFVAkJICAgICAgICA9ICgxIDw8IDExKSwKIAlMQ19ERVQJCQk9ICgxIDw8IDEwKSwKQEAgLTE1Nyw3ICsxNTcsNyBAQAogdHlwZWRlZiBlbnVtIHsKIAogCUlOVFIJCQk9ICgxIDw8IDMxKSwKLQlQQ1NJTlQJCQk9ICgxIDw8IDI4KSwgCisJUENTSU5UCQkJPSAoMSA8PCAyOCksCiAJTENJTlQJCQk9ICgxIDw8IDI3KSwKIAlBUElOVDUJCQk9ICgxIDw8IDI2KSwKIAlBUElOVDQJCQk9ICgxIDw8IDI1KSwKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAJSU5URU4wX0NMRUFSIAkJPSAweDFGN0Y3RjFGLCAvKiBDb21tYW5kIHN0eWxlIHJlZ2lzdGVyICovCiAKLX1JTlRFTjBfQklUUzsJCQorfUlOVEVOMF9CSVRTOwogCiB0eXBlZGVmIGVudW0gewogCS8qIFZBTDIgKi8KQEAgLTI0MCw3ICsyNDAsNyBAQAogCUlOVFJFTgkJCT0gKDEgPDwgMSksCiAJUlVOCQkJPSAoMSA8PCAwKSwKIAotCUNNRDBfQ0xFQVIgCQk9IDB4MDAwRjBGN0YsICAgLyogQ29tbWFuZCBzdHlsZSByZWdpc3RlciAqLwkKKwlDTUQwX0NMRUFSIAkJPSAweDAwMEYwRjdGLCAgIC8qIENvbW1hbmQgc3R5bGUgcmVnaXN0ZXIgKi8KIAogfUNNRDBfQklUUzsKIApAQCAtMjc5LDIwICsyNzksMjAgQEAKIAlBU0ZfSU5JVF9ET05FX0FMSUFTCT0gKDEgPDwgMjkpLAogCS8qIFZBTDIgKi8KIAlKVU1CTwkJCT0gKDEgPDwgMjEpLAotCVZTSVpFCQkJPSAoMSA8PCAyMCksCQorCVZTSVpFCQkJPSAoMSA8PCAyMCksCiAJVkxPTkxZCQkJPSAoMSA8PCAxOSksCi0JVkxfVEFHX0RFTAkJPSAoMSA8PCAxOCksCQorCVZMX1RBR19ERUwJCT0gKDEgPDwgMTgpLAogCS8qIFZBTDEgKi8KLQlFTl9QTUdSCQkJPSAoMSA8PCAxNCksCQkJCisJRU5fUE1HUgkJCT0gKDEgPDwgMTQpLAogCUlOVExFVkVMCQk9ICgxIDw8IDEzKSwKLQlGT1JDRV9GVUxMX0RVUExFWAk9ICgxIDw8IDEyKSwJCi0JRk9SQ0VfTElOS19TVEFUVVMJPSAoMSA8PCAxMSksCQotCUFQRVAJCQk9ICgxIDw8IDEwKSwJCi0JTVBQTEJBCQkJPSAoMSA8PCA5KSwJCisJRk9SQ0VfRlVMTF9EVVBMRVgJPSAoMSA8PCAxMiksCisJRk9SQ0VfTElOS19TVEFUVVMJPSAoMSA8PCAxMSksCisJQVBFUAkJCT0gKDEgPDwgMTApLAorCU1QUExCQQkJCT0gKDEgPDwgOSksCiAJLyogVkFMMCAqLwotCVJFU0VUX1BIWV9QVUxTRQkJPSAoMSA8PCAyKSwJCi0JUkVTRVRfUEhZCQk9ICgxIDw8IDEpLAkKLQlQSFlfUlNUX1BPTAkJPSAoMSA8PCAwKSwJCisJUkVTRVRfUEhZX1BVTFNFCQk9ICgxIDw8IDIpLAorCVJFU0VUX1BIWQkJPSAoMSA8PCAxKSwKKwlQSFlfUlNUX1BPTAkJPSAoMSA8PCAwKSwKIAogfUNNRDNfQklUUzsKIApAQCAtMzE0LDcgKzMxNCw3IEBACiAKIAlSRVNFVF9QSFlfV0lEVEgJCT0gKDB4RiA8PCAxNikgfCAoMHhGPDwgMjApLCAvKiAweDAwRkYwMDAwICovCiAJWE1UU1BfTUFTSwkJPSAoMSA8PCA5KSB8ICgxIDw8IDgpLAkvKiA5OjggKi8KLQlYTVRTUF8xMjgJCT0gKDEgPDwgOSksCS8qIDkgKi8JCisJWE1UU1BfMTI4CQk9ICgxIDw8IDkpLAkvKiA5ICovCiAJWE1UU1BfNjQJCT0gKDEgPDwgOCksCiAJQ0FDSEVfQUxJR04JCT0gKDEgPDwgNCksCiAJQlVSU1RfTElNSVRfTUFTSwk9ICgweEYgPDwgMCApLApAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJRExZX0lOVF9CX1QxCQk9ICgxIDw8IDI1KSwKIAlETFlfSU5UX0JfVDAJCT0gKCAxIDw8IDI0KSwKIAlFVkVOVF9DT1VOVF9CCQk9ICgweEYgPDwgMTYpIHwgKDB4MSA8PCAyMCksLyogMjA6MTYgKi8KLQlNQVhfREVMQVlfVElNRV9CCT0gKDB4RiA8PCAwKSB8ICgweEYgPDwgNCkgfCAoMSA8PCA4KXwgCisJTUFYX0RFTEFZX1RJTUVfQgk9ICgweEYgPDwgMCkgfCAoMHhGIDw8IDQpIHwgKDEgPDwgOCl8CiAJCQkJICAoMSA8PCA5KSB8ICgxIDw8IDEwKSwJLyogMTA6MCAqLwogfURMWV9JTlRfQl9CSVRTOwogCkBAIC01NjksMjAgKzU2OSwyMCBAQAogI2RlZmluZSBNQVhfVU5JVFMJCQk4IC8qIE1heGltdW0gbnVtYmVyIG9mIGRldmljZXMgcG9zc2libGUgKi8KIAogI2RlZmluZSBOVU1fVFhfQlVGRkVSUwkJCTMyIC8qIE51bWJlciBvZiB0cmFuc21pdCBidWZmZXJzICovCi0jZGVmaW5lIE5VTV9SWF9CVUZGRVJTCQkJMzIgLyogTnVtYmVyIG9mIHJlY2VpdmUgYnVmZmVycyAqLwkKKyNkZWZpbmUgTlVNX1JYX0JVRkZFUlMJCQkzMiAvKiBOdW1iZXIgb2YgcmVjZWl2ZSBidWZmZXJzICovCiAKICNkZWZpbmUgVFhfQlVGRl9NT0RfTUFTSyAgICAgICAgIAkzMSAvKiAoTlVNX1RYX0JVRkZFUlMgLTEpICovCiAjZGVmaW5lIFJYX0JVRkZfTU9EX01BU0sgICAgICAgICAJMzEgLyogKE5VTV9SWF9CVUZGRVJTIC0xKSAqLwogCi0jZGVmaW5lIE5VTV9UWF9SSU5HX0RSCQkJMzIgIAotI2RlZmluZSBOVU1fUlhfUklOR19EUgkJCTMyIAorI2RlZmluZSBOVU1fVFhfUklOR19EUgkJCTMyCisjZGVmaW5lIE5VTV9SWF9SSU5HX0RSCQkJMzIKIAogI2RlZmluZSBUWF9SSU5HX0RSX01PRF9NQVNLICAgICAgICAgCTMxIC8qIChOVU1fVFhfUklOR19EUiAtMSkgKi8KICNkZWZpbmUgUlhfUklOR19EUl9NT0RfTUFTSyAgICAgICAgIAkzMSAvKiAoTlVNX1JYX1JJTkdfRFIgLTEpICovCiAKLSNkZWZpbmUgTUFYX0ZJTFRFUl9TSVpFCQkJNjQgLyogTWF4aW11bSBtdWx0aWNhc3QgYWRkcmVzcyAqLyAKLSNkZWZpbmUgQU1EODExMUVfTUlOX01UVQkgCTYwIAkKLSNkZWZpbmUgQU1EODExMUVfTUFYX01UVQkJOTAwMAkJCQorI2RlZmluZSBNQVhfRklMVEVSX1NJWkUJCQk2NCAvKiBNYXhpbXVtIG11bHRpY2FzdCBhZGRyZXNzICovCisjZGVmaW5lIEFNRDgxMTFFX01JTl9NVFUJIAk2MAorI2RlZmluZSBBTUQ4MTExRV9NQVhfTVRVCQk5MDAwCiAKICNkZWZpbmUgUEtUX0JVRkZfU1oJCQkxNTM2CiAjZGVmaW5lIE1JTl9QS1RfTEVOCQkJNjAKQEAgLTU5MSw3ICs1OTEsNyBAQAogI2RlZmluZSAgQU1EODExMUVfVFhfVElNRU9VVAkJKDMgKiBIWikvKiAzIHNlYyAqLwogI2RlZmluZSBTT0ZUX1RJTUVSX0ZSRVEgCQkweEJFQkMgIC8qIDAuNSBzZWMgKi8KICNkZWZpbmUgREVMQVlfVElNRVJfQ09OVgkJNTAgICAgLyogbXNlYyB0byAxMCB1c2VjIGNvbnZlcnNpb24uCi0JCQkJCQkgT25seSA1MDAgdXNlYyByZXNvbHV0aW9uICovIAkJCQkJCSAKKwkJCQkJCSBPbmx5IDUwMCB1c2VjIHJlc29sdXRpb24gKi8KICNkZWZpbmUgT1BUSU9OX1ZMQU5fRU5BQkxFCQkweDAwMDEKICNkZWZpbmUgT1BUSU9OX0pVTUJPX0VOQUJMRQkJMHgwMDAyCiAjZGVmaW5lIE9QVElPTl9NVUxUSUNBU1RfRU5BQkxFCQkweDAwMDQKQEAgLTYxMSwxMiArNjExLDEyIEBACiAjZGVmaW5lCU1JTl9JUEcJOTYKICNkZWZpbmUJTUFYX0lQRwkyNTUKICNkZWZpbmUgSVBHX1NURVAJMTYKLSNkZWZpbmUgQ1NUQVRFICAxIAotI2RlZmluZSBTU1RBVEUgIDIgCisjZGVmaW5lIENTVEFURSAgMQorI2RlZmluZSBTU1RBVEUgIDIKIAogLyogQXNzdW1lIGNvbnRvbGxlciBnZXRzIGRhdGEgMTAgdGltZXMgdGhlIG1heGltdW0gcHJvY2Vzc2luZyB0aW1lICovCi0jZGVmaW5lICBSRVBFQVRfQ05UCQkJMTA7IAotICAgICAKKyNkZWZpbmUgIFJFUEVBVF9DTlQJCQkxMDsKKwogLyogYW1kODExMWUgZGVjcmlwdG9yIGZsYWcgZGVmaW5pdGlvbnMgKi8KIHR5cGVkZWYgZW51bSB7CiAKQEAgLTY0OSw3ICs2NDksNyBAQAogI2RlZmluZSBUQ0NfTUFTSwkJMHgwMDAzCiAKIC8qIGRyaXZlciBpb2N0bCBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIEFNRDgxMTFFX1JFR19EVU1QX0xFTgkgMTMqc2l6ZW9mKHUzMikgCisjZGVmaW5lIEFNRDgxMTFFX1JFR19EVU1QX0xFTgkgMTMqc2l6ZW9mKHUzMikKIAogLyogY3JjIGdlbmVyYXRvciBjb25zdGFudHMgKi8KICNkZWZpbmUgQ1JDMzIgMHhlZGI4ODMyMApAQCAtNjcwLDE1ICs2NzAsMTUgQEAKIAl1MzIgYnVmZl9waHlfYWRkcjsKIAogCXUzMiByZXNlcnZlZDsKLX07IAorfTsKIAogc3RydWN0IGFtZDgxMTFlX3J4X2RyewotCQorCiAJdTMyIHJlc2VydmVkOwogCiAJdTE2IG1zZ19jb3VudDsgLyogUmVjZWl2ZWQgbWVzc2FnZSBsZW4gKi8KIAotCXUxNiB0YWdfY3RybF9pbmZvOyAKKwl1MTYgdGFnX2N0cmxfaW5mbzsKIAogCXUxNiBidWZmX2NvdW50OyAgLyogTGVuIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBieSBkZXNjcmlwdG9yLiAqLwogCkBAIC02OTIsNyArNjkyLDcgQEAKICNkZWZpbmUgU1BFRURfSU5WQUxJRAkJMHhmZmZmCiAjZGVmaW5lIERVUExFWF9JTlZBTElECQkweGZmCiAjZGVmaW5lIEFVVE9ORUdfSU5WQUxJRAkJMHhmZgotCQorCiAJdW5zaWduZWQgbG9uZwkJCW9yaWdfcGh5X29wdGlvbjsKIAl1MTYJCQkJc3BlZWQ7CiAJdTgJCQkJZHVwbGV4OwpAQCAtNzA5LDcgKzcwOSw3IEBACiAKIH07CiAKLWVudW0gY29hbF9tb2RleyAKK2VudW0gY29hbF9tb2RlewogICAgICAgIAlSWF9JTlRSX0NPQUwsCiAJVFhfSU5UUl9DT0FMLAogCURJU0FCTEVfQ09BTCwKQEAgLTcyNyw3ICs3MjcsNyBAQAogCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyByeF9wcmV2X2J5dGVzOwogCXVuc2lnbmVkIGludCByeF9jb2FsX3R5cGU7Ci0JCisKIAl1bnNpZ25lZCBpbnQgdHhfdGltZW91dDsKIAl1bnNpZ25lZCBpbnQgdHhfZXZlbnRfY291bnQ7CiAJdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzOwpAQCAtNzM4LDcgKzczOCw3IEBACiAKIH07CiBzdHJ1Y3QgaXBnX2luZm97Ci0JCisKIAl1bnNpZ25lZCBpbnQgaXBnX3N0YXRlOwogCXVuc2lnbmVkIGludCBpcGc7CiAJdW5zaWduZWQgaW50IGN1cnJlbnRfaXBnOwpAQCAtNzUwLDcgKzc1MCw3IEBACiB9OwogCiBzdHJ1Y3QgYW1kODExMWVfcHJpdnsKLQkKKwogCXN0cnVjdCBhbWQ4MTExZV90eF9kciogIHR4X3Jpbmc7CiAJc3RydWN0IGFtZDgxMTFlX3J4X2RyKiByeF9yaW5nOwogCWRtYV9hZGRyX3QgdHhfcmluZ19kbWFfYWRkcjsJLyogdHggZGVzY3JpcHRvciByaW5nIGJhc2UgYWRkcmVzcyAqLwpAQCAtNzY2LDcgKzc2Niw3IEBACiAJZG1hX2FkZHJfdCByeF9kbWFfYWRkcltOVU1fUlhfQlVGRkVSU107CiAJLyogUmVnIG1lbW9yeSBtYXBwZWQgYWRkcmVzcyAqLwogCXZvaWQgX19pb21lbSAqbW1pbzsKLQkKKwogCXNwaW5sb2NrX3QgbG9jazsJLyogR3VhcmQgbG9jayAqLwogCXVuc2lnbmVkIGxvbmcgcnhfaWR4LCB0eF9pZHg7CS8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSAqLwogCXVuc2lnbmVkIGxvbmcgdHhfY29tcGxldGVfaWR4OwpAQCAtNzc4LDcgKzc3OCw3IEBACiAJdW5zaWduZWQgbG9uZyBleHRfcGh5X29wdGlvbjsKIAlpbnQgZXh0X3BoeV9hZGRyOwogCXUzMiBleHRfcGh5X2lkOwotCQorCiAJc3RydWN0IGFtZDgxMTFlX2xpbmtfY29uZmlnIGxpbmtfY29uZmlnOwogCWludCBwbV9jYXA7CiAKQEAgLTc4NywyMiArNzg3LDIyIEBACiAJc3RydWN0IG1paV9pZl9pbmZvIG1paV9pZjsKICNpZiBBTUQ4MTExRV9WTEFOX1RBR19VU0VECiAJc3RydWN0IHZsYW5fZ3JvdXAJCSp2bGdycDsKLSNlbmRpZgkKKyNlbmRpZgogCWNoYXIgb3BlbmVkOwogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGludCBkcnZfcnhfZXJyb3JzOwogCXN0cnVjdCBkZXZfbWNfbGlzdCogbWNfbGlzdDsKIAlzdHJ1Y3QgYW1kODExMWVfY29hbGVzY2VfY29uZiBjb2FsX2NvbmY7CiAKLQlzdHJ1Y3QgaXBnX2luZm8gIGlwZ19kYXRhOwkKLQkKKwlzdHJ1Y3QgaXBnX2luZm8gIGlwZ19kYXRhOworCiB9OwogCiAvKiBrZXJuZWwgcHJvdmlkZWQgd3JpdGVxIGRvZXMgbm90IHdyaXRlIDY0IGJpdHMgaW50byB0aGUgYW1kODExMWUgZGV2aWNlIHJlZ2lzdGVyIGluc3RlYWQgd3JpdGVzIG9ubHkgaGlnaGVyIDMyYml0cyBkYXRhIGludG8gbG93ZXIgMzJiaXRzIG9mIHRoZSByZWdpc3Rlci4KIEJVRz8gKi8KICNkZWZpbmUgIGFtZDgxMTFlX3dyaXRlcShfVWxEYXRhLF9tZW1NYXApICAgXAogCQl3cml0ZWwoKih1MzIqKSgmX1VsRGF0YSksIF9tZW1NYXApOwlcCi0JCXdyaXRlbCgqKHUzMiopKCh1OCopKCZfVWxEYXRhKSs0KSwgX21lbU1hcCs0KQkKKwkJd3JpdGVsKCoodTMyKikoKHU4KikoJl9VbERhdGEpKzQpLCBfbWVtTWFwKzQpCiAKIC8qIG1hcHMgdGhlIGV4dGVybmFsIHNwZWVkIG9wdGlvbnMgdG8gaW50ZXJuYWwgdmFsdWUgKi8KIHR5cGVkZWYgZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcG5lLmMgYi9kcml2ZXJzL25ldC9hcG5lLmMKaW5kZXggOWNjMTNhMC4uNjQzYjA4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBuZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FwbmUuYwpAQCAtMTMyLDkgKzEzMiw5IEBACiAKIAlpZiAoICEoQU1JR0FIV19QUkVTRU5UKFBDTUNJQSkpICkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAJcHJpbnRrKCJMb29raW5nIGZvciBQQ01DSUEgZXRoZXJuZXQgY2FyZCA6ICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAJLyogY2hlY2sgaWYgYSBjYXJkIGlzIGluc2VydGVkICovCiAJaWYgKCEoUENNQ0lBX0lOU0VSVEVEKSkgewogCQlwcmludGsoIk5PIFBDTUNJQSBjYXJkIGluc2VydGVkXG4iKTsKQEAgLTIwNSw3ICsyMDUsNyBAQAogICAgIGludCBuZVgwMDAsIGN0cm9uOwogI2VuZGlmCiAgICAgc3RhdGljIHVuc2lnbmVkIHZlcnNpb25fcHJpbnRlZDsKLSAKKwogICAgIGlmIChlaV9kZWJ1ZyAgJiYgIHZlcnNpb25fcHJpbnRlZCsrID09IDApCiAJcHJpbnRrKHZlcnNpb24pOwogCkBAIC0yNjEsMTMgKzI2MSwxMyBAQAogCiAgICAgLyoJQXQgdGhpcyBwb2ludCwgd29yZGxlbmd0aCAqb25seSogdGVsbHMgdXMgaWYgdGhlIFNBX3Byb20gaXMgZG91YmxlZAogCXVwIG9yIG5vdCBiZWNhdXNlIHNvbWUgYnJva2VuIFBDSSBjYXJkcyBkb24ndCByZXNwZWN0IHRoZSBieXRlLXdpZGUKLQlyZXF1ZXN0IGluIHByb2dyYW1fc2VxIGFib3ZlLCBhbmQgaGVuY2UgZG9uJ3QgaGF2ZSBkb3VibGVkIHVwIHZhbHVlcy4gCisJcmVxdWVzdCBpbiBwcm9ncmFtX3NlcSBhYm92ZSwgYW5kIGhlbmNlIGRvbid0IGhhdmUgZG91YmxlZCB1cCB2YWx1ZXMuCiAJVGhlc2UgYnJva2VuIGNhcmRzIHdvdWxkIG90aGVyd2lzZSBiZSBkZXRlY3RlZCBhcyBhbiBuZTEwMDAuICAqLwogCiAgICAgaWYgKHdvcmRsZW5ndGggPT0gMikKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKIAkJU0FfcHJvbVtpXSA9IFNBX3Byb21baStpXTsKLSAgICAKKwogICAgIGlmICh3b3JkbGVuZ3RoID09IDIpIHsKIAkvKiBXZSBtdXN0IHNldCB0aGUgODM5MCBmb3Igd29yZCBtb2RlLiAqLwogCW91dGIoMHg0OSwgaW9hZGRyICsgTkVfRU4wX0RDRkcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL0tjb25maWcgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvS2NvbmZpZwppbmRleCBiMTRlODkwLi4wYTBlMGNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvS2NvbmZpZwpAQCAtMjksNyArMjksNyBAQAogCSAgZXZlbiBwb2xpdGljYWxseSBjb3JyZWN0IHBlb3BsZSBhcmUgYWxsb3dlZCB0byBzYXkgWSBoZXJlLgogCiBjb25maWcgREVWX0FQUExFVEFMSwotCWJvb2wgIkFwcGxldGFsayBpbnRlcmZhY2VzIHN1cHBvcnQiCisJdHJpc3RhdGUgIkFwcGxldGFsayBpbnRlcmZhY2VzIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBBVEFMSwogCWhlbHAKIAkgIEFwcGxlVGFsayBpcyB0aGUgcHJvdG9jb2wgdGhhdCBBcHBsZSBjb21wdXRlcnMgY2FuIHVzZSB0byBjb21tdW5pY2F0ZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9jb3BzLmMKaW5kZXggMWQwMWFjMC4uYWU3ZjgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2NvcHMuYworKysgYi9kcml2ZXJzL25ldC9hcHBsZXRhbGsvY29wcy5jCkBAIC0xMDMwLDcgKzEwMzAsNyBAQAogbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwKTsKIG1vZHVsZV9wYXJhbShib2FyZF90eXBlLCBpbnQsIDApOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpZiAoaW8gPT0gMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFlvdSBzaG91bGRuJ3QgYXV0b3Byb2JlIHdpdGggaW5zbW9kXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCmluZGV4IDk3OWEzM2QuLmZjMjU2YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKQEAgLTE3Nyw3ICsxNzcsNyBAQAogc3RhdGljIGludCBfX2luaXQgY29tMjAwMjBwY2lfaW5pdCh2b2lkKQogewogCUJVR0xWTChEX05PUk1BTCkgcHJpbnRrKFZFUlNJT04pOwotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmNvbTIwMDIwcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNvbTIwMDIwcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjb20yMDAyMHBjaV9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMgYi9kcml2ZXJzL25ldC9hcmlhZG5lLmMKaW5kZXggY2M3MjFhZC4uM2FlZjNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJpYWRuZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwpAQCAtODI1LDggKzgyNSw2IEBACiAgICAgYXJpYWRuZV9pbml0X3JpbmcoZGV2KTsKIAogICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkvKiBMb2cgYW55IG5ldCB0YXBzLiAqLwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCWxhbmNlLT5SQVAgPSBDU1IxNTsJCS8qIE1vZGUgUmVnaXN0ZXIgKi8KIAlsYW5jZS0+UkRQID0gUFJPTTsJCS8qIFNldCBwcm9taXNjdW91cyBtb2RlICovCiAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnIGIvZHJpdmVycy9uZXQvYXJtL0tjb25maWcKaW5kZXggNzdmZTIwZGIuLjY3OGU0ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2FybS9LY29uZmlnCkBAIC0zOSwzICszOSwxMCBAQAogCWhlbHAKIAkgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIHRoZSBBVDkxUk05MjAwIGFuZCBlbmFibGUKIAkgIGV0aGVybmV0IHN1cHBvcnQsIHRoZW4geW91IHNob3VsZCBhbHdheXMgYW5zd2VyIFkgdG8gdGhpcy4KKworY29uZmlnIEVQOTNYWF9FVEgKKwl0cmlzdGF0ZSAiRVA5M3h4IEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBORVRfRVRIRVJORVQgJiYgQVJNICYmIEFSQ0hfRVA5M1hYCisJaGVscAorCSAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIGV0aGVybmV0IGhhcmR3YXJlIGluY2x1ZGVkIGluIEVQOTN4eCBDUFVzLgorCSAgU2F5IFkgaWYgeW91IGFyZSBidWlsZGluZyBhIGtlcm5lbCBmb3IgRVA5M3h4IGJhc2VkIGRldmljZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9hcm0vTWFrZWZpbGUKaW5kZXggNDJjOTViNy4uYTRjODY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2FybS9NYWtlZmlsZQpAQCAtOCwzICs4LDQgQEAKIG9iai0kKENPTkZJR19BUk1fRVRIRVIzKQkrPSBldGhlcjMubwogb2JqLSQoQ09ORklHX0FSTV9FVEhFUjEpCSs9IGV0aGVyMS5vCiBvYmotJChDT05GSUdfQVJNX0FUOTFfRVRIRVIpCSs9IGF0OTFfZXRoZXIubworb2JqLSQoQ09ORklHX0VQOTNYWF9FVEgpCSs9IGVwOTN4eF9ldGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKaW5kZXggODU0OTNiNy4uOTViMjhhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIAlzdHJsY3B5KGluZm8tPmJ1c19pbmZvLCBkZXYtPmNsYXNzX2Rldi5kZXYtPmJ1c19pZCwgc2l6ZW9mKGluZm8tPmJ1c19pbmZvKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXQ5MWV0aGVyX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBhdDkxZXRoZXJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwk9IGF0OTFldGhlcl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IGF0OTFldGhlcl9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCT0gYXQ5MWV0aGVyX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VmMDA3NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTAsMCArMSw5NDQgQEAKKy8qCisgKiBFUDkzeHggZXRoZXJuZXQgbmV0d29yayBkZXZpY2UgZHJpdmVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKiBEZWRpY2F0ZWQgdG8gTWFyaWphIEt1bGlrb3ZhLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9lcDkzeHgtcmVncy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiZXA5M3h4LWV0aCIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIwLjEiCisKKyNkZWZpbmUgUlhfUVVFVUVfRU5UUklFUwk2NAorI2RlZmluZSBUWF9RVUVVRV9FTlRSSUVTCTgKKworI2RlZmluZSBNQVhfUEtUX1NJWkUJCTIwNDQKKyNkZWZpbmUgUEtUX0JVRl9TSVpFCQkyMDQ4CisKKyNkZWZpbmUgUkVHX1JYQ1RMCQkweDAwMDAKKyNkZWZpbmUgIFJFR19SWENUTF9ERUZBVUxUCTB4MDAwNzM4MDAKKyNkZWZpbmUgUkVHX1RYQ1RMCQkweDAwMDQKKyNkZWZpbmUgIFJFR19UWENUTF9FTkFCTEUJMHgwMDAwMDAwMQorI2RlZmluZSBSRUdfTUlJQ01ECQkweDAwMTAKKyNkZWZpbmUgIFJFR19NSUlDTURfUkVBRAkweDAwMDA4MDAwCisjZGVmaW5lICBSRUdfTUlJQ01EX1dSSVRFCTB4MDAwMDQwMDAKKyNkZWZpbmUgUkVHX01JSURBVEEJCTB4MDAxNAorI2RlZmluZSBSRUdfTUlJU1RTCQkweDAwMTgKKyNkZWZpbmUgIFJFR19NSUlTVFNfQlVTWQkweDAwMDAwMDAxCisjZGVmaW5lIFJFR19TRUxGQ1RMCQkweDAwMjAKKyNkZWZpbmUgIFJFR19TRUxGQ1RMX1JFU0VUCTB4MDAwMDAwMDEKKyNkZWZpbmUgUkVHX0lOVEVOCQkweDAwMjQKKyNkZWZpbmUgIFJFR19JTlRFTl9UWAkJMHgwMDAwMDAwOAorI2RlZmluZSAgUkVHX0lOVEVOX1JYCQkweDAwMDAwMDA3CisjZGVmaW5lIFJFR19JTlRTVFNQCQkweDAwMjgKKyNkZWZpbmUgIFJFR19JTlRTVFNfVFgJCTB4MDAwMDAwMDgKKyNkZWZpbmUgIFJFR19JTlRTVFNfUlgJCTB4MDAwMDAwMDQKKyNkZWZpbmUgUkVHX0lOVFNUU0MJCTB4MDAyYworI2RlZmluZSBSRUdfQUZQCQkJMHgwMDRjCisjZGVmaW5lIFJFR19JTkRBRDAJCTB4MDA1MAorI2RlZmluZSBSRUdfSU5EQUQxCQkweDAwNTEKKyNkZWZpbmUgUkVHX0lOREFEMgkJMHgwMDUyCisjZGVmaW5lIFJFR19JTkRBRDMJCTB4MDA1MworI2RlZmluZSBSRUdfSU5EQUQ0CQkweDAwNTQKKyNkZWZpbmUgUkVHX0lOREFENQkJMHgwMDU1CisjZGVmaW5lIFJFR19HSUlOVE1TSwkJMHgwMDY0CisjZGVmaW5lICBSRUdfR0lJTlRNU0tfRU5BQkxFCTB4MDAwMDgwMDAKKyNkZWZpbmUgUkVHX0JNQ1RMCQkweDAwODAKKyNkZWZpbmUgIFJFR19CTUNUTF9FTkFCTEVfVFgJMHgwMDAwMDEwMAorI2RlZmluZSAgUkVHX0JNQ1RMX0VOQUJMRV9SWAkweDAwMDAwMDAxCisjZGVmaW5lIFJFR19CTVNUUwkJMHgwMDg0CisjZGVmaW5lICBSRUdfQk1TVFNfUlhfQUNUSVZFCTB4MDAwMDAwMDgKKyNkZWZpbmUgUkVHX1JYRFFCQURECQkweDAwOTAKKyNkZWZpbmUgUkVHX1JYRFFCTEVOCQkweDAwOTQKKyNkZWZpbmUgUkVHX1JYRENVUkFERAkJMHgwMDk4CisjZGVmaW5lIFJFR19SWERFTlEJCTB4MDA5YworI2RlZmluZSBSRUdfUlhTVFNRQkFERAkJMHgwMGEwCisjZGVmaW5lIFJFR19SWFNUU1FCTEVOCQkweDAwYTQKKyNkZWZpbmUgUkVHX1JYU1RTUUNVUkFERAkweDAwYTgKKyNkZWZpbmUgUkVHX1JYU1RTRU5RCQkweDAwYWMKKyNkZWZpbmUgUkVHX1RYRFFCQURECQkweDAwYjAKKyNkZWZpbmUgUkVHX1RYRFFCTEVOCQkweDAwYjQKKyNkZWZpbmUgUkVHX1RYRFFDVVJBREQJCTB4MDBiOAorI2RlZmluZSBSRUdfVFhERU5RCQkweDAwYmMKKyNkZWZpbmUgUkVHX1RYU1RTUUJBREQJCTB4MDBjMAorI2RlZmluZSBSRUdfVFhTVFNRQkxFTgkJMHgwMGM0CisjZGVmaW5lIFJFR19UWFNUU1FDVVJBREQJMHgwMGM4CisjZGVmaW5lIFJFR19NQVhGUk1MRU4JCTB4MDBlOAorCitzdHJ1Y3QgZXA5M3h4X3JkZXNjCit7CisJdTMyCWJ1Zl9hZGRyOworCXUzMglyZGVzYzE7Cit9OworCisjZGVmaW5lIFJERVNDMV9OU09GCQkweDgwMDAwMDAwCisjZGVmaW5lIFJERVNDMV9CVUZGRVJfSU5ERVgJMHg3ZmZmMDAwMAorI2RlZmluZSBSREVTQzFfQlVGRkVSX0xFTkdUSAkweDAwMDBmZmZmCisKK3N0cnVjdCBlcDkzeHhfcnN0YXQKK3sKKwl1MzIJcnN0YXQwOworCXUzMglyc3RhdDE7Cit9OworCisjZGVmaW5lIFJTVEFUMF9SRlAJCTB4ODAwMDAwMDAKKyNkZWZpbmUgUlNUQVQwX1JXRQkJMHg0MDAwMDAwMAorI2RlZmluZSBSU1RBVDBfRU9GCQkweDIwMDAwMDAwCisjZGVmaW5lIFJTVEFUMF9FT0IJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUlNUQVQwX0FNCQkweDAwYzAwMDAwCisjZGVmaW5lIFJTVEFUMF9SWF9FUlIJCTB4MDAyMDAwMDAKKyNkZWZpbmUgUlNUQVQwX09FCQkweDAwMTAwMDAwCisjZGVmaW5lIFJTVEFUMF9GRQkJMHgwMDA4MDAwMAorI2RlZmluZSBSU1RBVDBfUlVOVAkJMHgwMDA0MDAwMAorI2RlZmluZSBSU1RBVDBfRURBVEEJCTB4MDAwMjAwMDAKKyNkZWZpbmUgUlNUQVQwX0NSQ0UJCTB4MDAwMTAwMDAKKyNkZWZpbmUgUlNUQVQwX0NSQ0kJCTB4MDAwMDgwMDAKKyNkZWZpbmUgUlNUQVQwX0hUSQkJMHgwMDAwM2YwMAorI2RlZmluZSBSU1RBVDFfUkZQCQkweDgwMDAwMDAwCisjZGVmaW5lIFJTVEFUMV9CVUZGRVJfSU5ERVgJMHg3ZmZmMDAwMAorI2RlZmluZSBSU1RBVDFfRlJBTUVfTEVOR1RICTB4MDAwMGZmZmYKKworc3RydWN0IGVwOTN4eF90ZGVzYworeworCXUzMglidWZfYWRkcjsKKwl1MzIJdGRlc2MxOworfTsKKworI2RlZmluZSBUREVTQzFfRU9GCQkweDgwMDAwMDAwCisjZGVmaW5lIFRERVNDMV9CVUZGRVJfSU5ERVgJMHg3ZmZmMDAwMAorI2RlZmluZSBUREVTQzFfQlVGRkVSX0FCT1JUCTB4MDAwMDgwMDAKKyNkZWZpbmUgVERFU0MxX0JVRkZFUl9MRU5HVEgJMHgwMDAwMGZmZgorCitzdHJ1Y3QgZXA5M3h4X3RzdGF0Cit7CisJdTMyCXRzdGF0MDsKK307CisKKyNkZWZpbmUgVFNUQVQwX1RYRlAJCTB4ODAwMDAwMDAKKyNkZWZpbmUgVFNUQVQwX1RYV0UJCTB4NDAwMDAwMDAKKyNkZWZpbmUgVFNUQVQwX0ZBCQkweDIwMDAwMDAwCisjZGVmaW5lIFRTVEFUMF9MQ1JTCQkweDEwMDAwMDAwCisjZGVmaW5lIFRTVEFUMF9PVwkJMHgwNDAwMDAwMAorI2RlZmluZSBUU1RBVDBfVFhVCQkweDAyMDAwMDAwCisjZGVmaW5lIFRTVEFUMF9FQ09MTAkJMHgwMTAwMDAwMAorI2RlZmluZSBUU1RBVDBfTkNPTEwJCTB4MDAxZjAwMDAKKyNkZWZpbmUgVFNUQVQwX0JVRkZFUl9JTkRFWAkweDAwMDA3ZmZmCisKK3N0cnVjdCBlcDkzeHhfZGVzY3MKK3sKKwlzdHJ1Y3QgZXA5M3h4X3JkZXNjCXJkZXNjW1JYX1FVRVVFX0VOVFJJRVNdOworCXN0cnVjdCBlcDkzeHhfdGRlc2MJdGRlc2NbVFhfUVVFVUVfRU5UUklFU107CisJc3RydWN0IGVwOTN4eF9yc3RhdAlyc3RhdFtSWF9RVUVVRV9FTlRSSUVTXTsKKwlzdHJ1Y3QgZXA5M3h4X3RzdGF0CXRzdGF0W1RYX1FVRVVFX0VOVFJJRVNdOworfTsKKworc3RydWN0IGVwOTN4eF9wcml2Cit7CisJc3RydWN0IHJlc291cmNlCQkqcmVzOworCXZvaWQJCQkqYmFzZV9hZGRyOworCWludAkJCWlycTsKKworCXN0cnVjdCBlcDkzeHhfZGVzY3MJKmRlc2NzOworCWRtYV9hZGRyX3QJCWRlc2NzX2RtYV9hZGRyOworCisJdm9pZAkJCSpyeF9idWZbUlhfUVVFVUVfRU5UUklFU107CisJdm9pZAkJCSp0eF9idWZbVFhfUVVFVUVfRU5UUklFU107CisKKwlzcGlubG9ja190CQlyeF9sb2NrOworCXVuc2lnbmVkIGludAkJcnhfcG9pbnRlcjsKKwl1bnNpZ25lZCBpbnQJCXR4X2NsZWFuX3BvaW50ZXI7CisJdW5zaWduZWQgaW50CQl0eF9wb2ludGVyOworCXNwaW5sb2NrX3QJCXR4X3BlbmRpbmdfbG9jazsKKwl1bnNpZ25lZCBpbnQJCXR4X3BlbmRpbmc7CisKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cwlzdGF0czsKKworCXN0cnVjdCBtaWlfaWZfaW5mbwltaWk7CisJdTgJCQltZGNfZGl2aXNvcjsKK307CisKKyNkZWZpbmUgcmRiKGVwLCBvZmYpCQlfX3Jhd19yZWFkYigoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKKyNkZWZpbmUgcmR3KGVwLCBvZmYpCQlfX3Jhd19yZWFkdygoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKKyNkZWZpbmUgcmRsKGVwLCBvZmYpCQlfX3Jhd19yZWFkbCgoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKKyNkZWZpbmUgd3JiKGVwLCBvZmYsIHZhbCkJX19yYXdfd3JpdGViKCh2YWwpLCAoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKKyNkZWZpbmUgd3J3KGVwLCBvZmYsIHZhbCkJX19yYXdfd3JpdGV3KCh2YWwpLCAoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKKyNkZWZpbmUgd3JsKGVwLCBvZmYsIHZhbCkJX19yYXdfd3JpdGVsKCh2YWwpLCAoZXApLT5iYXNlX2FkZHIgKyAob2ZmKSkKKworc3RhdGljIGludCBlcDkzeHhfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWcpOworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVwOTN4eF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gJihlcC0+c3RhdHMpOworfQorCitzdGF0aWMgaW50IGVwOTN4eF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdGFpbF9vZmZzZXQ7CisJaW50IHJ4X2RvbmU7CisJaW50IHByb2Nlc3NlZDsKKworCXRhaWxfb2Zmc2V0ID0gcmRsKGVwLCBSRUdfUlhTVFNRQ1VSQUREKSAtIGVwLT5kZXNjc19kbWFfYWRkcjsKKworCXJ4X2RvbmUgPSAwOworCXByb2Nlc3NlZCA9IDA7CisJd2hpbGUgKCpidWRnZXQgPiAwKSB7CisJCWludCBlbnRyeTsKKwkJc3RydWN0IGVwOTN4eF9yc3RhdCAqcnN0YXQ7CisJCXUzMiByc3RhdDA7CisJCXUzMiByc3RhdDE7CisJCWludCBsZW5ndGg7CisJCXN0cnVjdCBza19idWZmICpza2I7CisKKwkJZW50cnkgPSBlcC0+cnhfcG9pbnRlcjsKKwkJcnN0YXQgPSBlcC0+ZGVzY3MtPnJzdGF0ICsgZW50cnk7CisJCWlmICgodm9pZCAqKXJzdGF0IC0gKHZvaWQgKillcC0+ZGVzY3MgPT0gdGFpbF9vZmZzZXQpIHsKKwkJCXJ4X2RvbmUgPSAxOworCQkJYnJlYWs7CisJCX0KKworCQlyc3RhdDAgPSByc3RhdC0+cnN0YXQwOworCQlyc3RhdDEgPSByc3RhdC0+cnN0YXQxOworCQlyc3RhdC0+cnN0YXQwID0gMDsKKwkJcnN0YXQtPnJzdGF0MSA9IDA7CisKKwkJaWYgKCEocnN0YXQwICYgUlNUQVQwX1JGUCkpCisJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IGJ1ZmZlciBub3QgZG9uZSAiCisJCQkJCSAiICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOworCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfRU9GKSkKKwkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF9yeDogbm90IGVuZC1vZi1mcmFtZSAiCisJCQkJCSAiICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOworCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfRU9CKSkKKwkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF9yeDogbm90IGVuZC1vZi1idWZmZXIgIgorCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJaWYgKCEocnN0YXQxICYgUlNUQVQxX1JGUCkpCisJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfcng6IGJ1ZmZlcjEgbm90IGRvbmUgIgorCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJaWYgKChyc3RhdDEgJiBSU1RBVDFfQlVGRkVSX0lOREVYKSA+PiAxNiAhPSBlbnRyeSkKKwkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF9yeDogZW50cnkgbWlzbWF0Y2ggIgorCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKworCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfUldFKSkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJlcDkzeHhfcng6IHJlY2VpdmUgZXJyb3IgIgorCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKworCQkJZXAtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJaWYgKHJzdGF0MCAmIFJTVEFUMF9PRSkKKwkJCQllcC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJCWlmIChyc3RhdDAgJiBSU1RBVDBfRkUpCisJCQkJZXAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJaWYgKHJzdGF0MCAmIChSU1RBVDBfUlVOVCB8IFJTVEFUMF9FREFUQSkpCisJCQkJZXAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJCWlmIChyc3RhdDAgJiBSU1RBVDBfQ1JDRSkKKwkJCQllcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCQkJZ290byBlcnI7CisJCX0KKworCQlsZW5ndGggPSByc3RhdDEgJiBSU1RBVDFfRlJBTUVfTEVOR1RIOworCQlpZiAobGVuZ3RoID4gTUFYX1BLVF9TSVpFKSB7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgImVwOTN4eF9yeDogaW52YWxpZCBsZW5ndGggIgorCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJLyogU3RyaXAgRkNTLiAgKi8KKwkJaWYgKHJzdGF0MCAmIFJTVEFUMF9DUkNJKQorCQkJbGVuZ3RoIC09IDQ7CisKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihsZW5ndGggKyAyKTsKKwkJaWYgKGxpa2VseShza2IgIT0gTlVMTCkpIHsKKwkJCXNrYi0+ZGV2ID0gZGV2OworCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKKwkJCWRtYV9zeW5jX3NpbmdsZShOVUxMLCBlcC0+ZGVzY3MtPnJkZXNjW2VudHJ5XS5idWZfYWRkciwKKwkJCQkJCWxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJCWV0aF9jb3B5X2FuZF9zdW0oc2tiLCBlcC0+cnhfYnVmW2VudHJ5XSwgbGVuZ3RoLCAwKTsKKwkJCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKworCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCQkJZXAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCWVwLT5zdGF0cy5yeF9ieXRlcyArPSBsZW5ndGg7CisJCX0gZWxzZSB7CisJCQllcC0+c3RhdHMucnhfZHJvcHBlZCsrOworCQl9CisKK2VycjoKKwkJZXAtPnJ4X3BvaW50ZXIgPSAoZW50cnkgKyAxKSAmIChSWF9RVUVVRV9FTlRSSUVTIC0gMSk7CisJCXByb2Nlc3NlZCsrOworCQlkZXYtPnF1b3RhLS07CisJCSgqYnVkZ2V0KS0tOworCX0KKworCWlmIChwcm9jZXNzZWQpIHsKKwkJd3J3KGVwLCBSRUdfUlhERU5RLCBwcm9jZXNzZWQpOworCQl3cncoZXAsIFJFR19SWFNUU0VOUSwgcHJvY2Vzc2VkKTsKKwl9CisKKwlyZXR1cm4gIXJ4X2RvbmU7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X2hhdmVfbW9yZV9yeChzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwKQoreworCXN0cnVjdCBlcDkzeHhfcnN0YXQgKnJzdGF0OworCWludCB0YWlsX29mZnNldDsKKworCXJzdGF0ID0gZXAtPmRlc2NzLT5yc3RhdCArIGVwLT5yeF9wb2ludGVyOworCXRhaWxfb2Zmc2V0ID0gcmRsKGVwLCBSRUdfUlhTVFNRQ1VSQUREKSAtIGVwLT5kZXNjc19kbWFfYWRkcjsKKworCXJldHVybiAhKCh2b2lkICopcnN0YXQgLSAodm9pZCAqKWVwLT5kZXNjcyA9PSB0YWlsX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKgorCSAqIEBAQCBIYXZlIHRvIHN0b3AgcG9sbGluZyBpZiBkZXZpY2UgaXMgZG93bmVkIHdoaWxlIHdlCisJICogYXJlIHBvbGxpbmcuCisJICovCisKK3BvbGxfc29tZV9tb3JlOgorCWlmIChlcDkzeHhfcngoZGV2LCBidWRnZXQpKQorCQlyZXR1cm4gMTsKKworCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisKKwlzcGluX2xvY2tfaXJxKCZlcC0+cnhfbG9jayk7CisJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCB8IFJFR19JTlRFTl9SWCk7CisJaWYgKGVwOTN4eF9oYXZlX21vcmVfcngoZXApKSB7CisJCXdybChlcCwgUkVHX0lOVEVOLCBSRUdfSU5URU5fVFgpOworCQl3cmwoZXAsIFJFR19JTlRTVFNQLCBSRUdfSU5UU1RTX1JYKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZlcC0+cnhfbG9jayk7CisKKwkJaWYgKG5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCAwKSkKKwkJCWdvdG8gcG9sbF9zb21lX21vcmU7CisKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycSgmZXAtPnJ4X2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZW50cnk7CisKKwlpZiAodW5saWtlbHkoc2tiLT5sZW4pID4gTUFYX1BLVF9TSVpFKSB7CisJCWVwLT5zdGF0cy50eF9kcm9wcGVkKys7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwllbnRyeSA9IGVwLT50eF9wb2ludGVyOworCWVwLT50eF9wb2ludGVyID0gKGVwLT50eF9wb2ludGVyICsgMSkgJiAoVFhfUVVFVUVfRU5UUklFUyAtIDEpOworCisJZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0udGRlc2MxID0KKwkJVERFU0MxX0VPRiB8IChlbnRyeSA8PCAxNikgfCAoc2tiLT5sZW4gJiAweGZmZik7CisJc2tiX2NvcHlfYW5kX2NzdW1fZGV2KHNrYiwgZXAtPnR4X2J1ZltlbnRyeV0pOworCWRtYV9zeW5jX3NpbmdsZShOVUxMLCBlcC0+ZGVzY3MtPnRkZXNjW2VudHJ5XS5idWZfYWRkciwKKwkJCQlza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwlzcGluX2xvY2tfaXJxKCZlcC0+dHhfcGVuZGluZ19sb2NrKTsKKwllcC0+dHhfcGVuZGluZysrOworCWlmIChlcC0+dHhfcGVuZGluZyA9PSBUWF9RVUVVRV9FTlRSSUVTKQorCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJc3Bpbl91bmxvY2tfaXJxKCZlcC0+dHhfcGVuZGluZ19sb2NrKTsKKworCXdybChlcCwgUkVHX1RYREVOUSwgMSk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfdHhfY29tcGxldGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgdGFpbF9vZmZzZXQ7CisJaW50IHdha2U7CisKKwl0YWlsX29mZnNldCA9IHJkbChlcCwgUkVHX1RYU1RTUUNVUkFERCkgLSBlcC0+ZGVzY3NfZG1hX2FkZHI7CisJd2FrZSA9IDA7CisKKwlzcGluX2xvY2soJmVwLT50eF9wZW5kaW5nX2xvY2spOworCXdoaWxlICgxKSB7CisJCWludCBlbnRyeTsKKwkJc3RydWN0IGVwOTN4eF90c3RhdCAqdHN0YXQ7CisJCXUzMiB0c3RhdDA7CisKKwkJZW50cnkgPSBlcC0+dHhfY2xlYW5fcG9pbnRlcjsKKwkJdHN0YXQgPSBlcC0+ZGVzY3MtPnRzdGF0ICsgZW50cnk7CisJCWlmICgodm9pZCAqKXRzdGF0IC0gKHZvaWQgKillcC0+ZGVzY3MgPT0gdGFpbF9vZmZzZXQpCisJCQlicmVhazsKKworCQl0c3RhdDAgPSB0c3RhdC0+dHN0YXQwOworCQl0c3RhdC0+dHN0YXQwID0gMDsKKworCQlpZiAoISh0c3RhdDAgJiBUU1RBVDBfVFhGUCkpCisJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfdHhfY29tcGxldGU6IGJ1ZmZlciBub3QgZG9uZSAiCisJCQkJCSAiICUuOHhcbiIsIHRzdGF0MCk7CisJCWlmICh0c3RhdDAgJiBUU1RBVDBfRkEpCisJCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfdHhfY29tcGxldGU6IGZyYW1lIGFib3J0ZWQgIgorCQkJCQkgIiAlLjh4XG4iLCB0c3RhdDApOworCQlpZiAoKHRzdGF0MCAmIFRTVEFUMF9CVUZGRVJfSU5ERVgpICE9IGVudHJ5KQorCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3R4X2NvbXBsZXRlOiBlbnRyeSBtaXNtYXRjaCAiCisJCQkJCSAiICUuOHhcbiIsIHRzdGF0MCk7CisKKwkJaWYgKHRzdGF0MCAmIFRTVEFUMF9UWFdFKSB7CisJCQlpbnQgbGVuZ3RoID0gZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0udGRlc2MxICYgMHhmZmY7CisKKwkJCWVwLT5zdGF0cy50eF9wYWNrZXRzKys7CisJCQllcC0+c3RhdHMudHhfYnl0ZXMgKz0gbGVuZ3RoOworCQl9IGVsc2UgeworCQkJZXAtPnN0YXRzLnR4X2Vycm9ycysrOworCQl9CisKKwkJaWYgKHRzdGF0MCAmIFRTVEFUMF9PVykKKwkJCWVwLT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CisJCWlmICh0c3RhdDAgJiBUU1RBVDBfVFhVKQorCQkJZXAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWVwLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0c3RhdDAgPj4gMTYpICYgMHgxZjsKKworCQllcC0+dHhfY2xlYW5fcG9pbnRlciA9IChlbnRyeSArIDEpICYgKFRYX1FVRVVFX0VOVFJJRVMgLSAxKTsKKwkJaWYgKGVwLT50eF9wZW5kaW5nID09IFRYX1FVRVVFX0VOVFJJRVMpCisJCQl3YWtlID0gMTsKKwkJZXAtPnR4X3BlbmRpbmctLTsKKwl9CisJc3Bpbl91bmxvY2soJmVwLT50eF9wZW5kaW5nX2xvY2spOworCisJaWYgKHdha2UpCisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKK30KKworc3RhdGljIGlycXJldHVybl90IGVwOTN4eF9pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBzdGF0dXM7CisKKwlzdGF0dXMgPSByZGwoZXAsIFJFR19JTlRTVFNDKTsKKwlpZiAoc3RhdHVzID09IDApCisJCXJldHVybiBJUlFfTk9ORTsKKworCWlmIChzdGF0dXMgJiBSRUdfSU5UU1RTX1JYKSB7CisJCXNwaW5fbG9jaygmZXAtPnJ4X2xvY2spOworCQlpZiAobGlrZWx5KF9fbmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSkgeworCQkJd3JsKGVwLCBSRUdfSU5URU4sIFJFR19JTlRFTl9UWCk7CisJCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldik7CisJCX0KKwkJc3Bpbl91bmxvY2soJmVwLT5yeF9sb2NrKTsKKwl9CisKKwlpZiAoc3RhdHVzICYgUkVHX0lOVFNUU19UWCkKKwkJZXA5M3h4X3R4X2NvbXBsZXRlKGRldik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGVwOTN4eF9mcmVlX2J1ZmZlcnMoc3RydWN0IGVwOTN4eF9wcml2ICplcCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBSWF9RVUVVRV9FTlRSSUVTOyBpICs9IDIpIHsKKwkJZG1hX2FkZHJfdCBkOworCisJCWQgPSBlcC0+ZGVzY3MtPnJkZXNjW2ldLmJ1Zl9hZGRyOworCQlpZiAoZCkKKwkJCWRtYV91bm1hcF9zaW5nbGUoTlVMTCwgZCwgUEFHRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCWlmIChlcC0+cnhfYnVmW2ldICE9IE5VTEwpCisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZXAtPnJ4X2J1ZltpXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFRYX1FVRVVFX0VOVFJJRVM7IGkgKz0gMikgeworCQlkbWFfYWRkcl90IGQ7CisKKwkJZCA9IGVwLT5kZXNjcy0+dGRlc2NbaV0uYnVmX2FkZHI7CisJCWlmIChkKQorCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCBkLCBQQUdFX1NJWkUsIERNQV9UT19ERVZJQ0UpOworCisJCWlmIChlcC0+dHhfYnVmW2ldICE9IE5VTEwpCisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpZXAtPnR4X2J1ZltpXSk7CisJfQorCisJZG1hX2ZyZWVfY29oZXJlbnQoTlVMTCwgc2l6ZW9mKHN0cnVjdCBlcDkzeHhfZGVzY3MpLCBlcC0+ZGVzY3MsCisJCQkJCQkJZXAtPmRlc2NzX2RtYV9hZGRyKTsKK30KKworLyoKKyAqIFRoZSBoYXJkd2FyZSBlbmZvcmNlcyBhIHN1Yi0ySyBtYXhpbXVtIHBhY2tldCBzaXplLCBzbyB3ZSBwdXQKKyAqIHR3byBidWZmZXJzIG9uIGV2ZXJ5IGhhcmR3YXJlIHBhZ2UuCisgKi8KK3N0YXRpYyBpbnQgZXA5M3h4X2FsbG9jX2J1ZmZlcnMoc3RydWN0IGVwOTN4eF9wcml2ICplcCkKK3sKKwlpbnQgaTsKKworCWVwLT5kZXNjcyA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBzaXplb2Yoc3RydWN0IGVwOTN4eF9kZXNjcyksCisJCQkJJmVwLT5kZXNjc19kbWFfYWRkciwgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCWlmIChlcC0+ZGVzY3MgPT0gTlVMTCkKKwkJcmV0dXJuIDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlhfUVVFVUVfRU5UUklFUzsgaSArPSAyKSB7CisJCXZvaWQgKnBhZ2U7CisJCWRtYV9hZGRyX3QgZDsKKworCQlwYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlpZiAocGFnZSA9PSBOVUxMKQorCQkJZ290byBlcnI7CisKKwkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGQpKSB7CisJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcGFnZSk7CisJCQlnb3RvIGVycjsKKwkJfQorCisJCWVwLT5yeF9idWZbaV0gPSBwYWdlOworCQllcC0+ZGVzY3MtPnJkZXNjW2ldLmJ1Zl9hZGRyID0gZDsKKwkJZXAtPmRlc2NzLT5yZGVzY1tpXS5yZGVzYzEgPSAoaSA8PCAxNikgfCBQS1RfQlVGX1NJWkU7CisKKwkJZXAtPnJ4X2J1ZltpICsgMV0gPSBwYWdlICsgUEtUX0JVRl9TSVpFOworCQllcC0+ZGVzY3MtPnJkZXNjW2kgKyAxXS5idWZfYWRkciA9IGQgKyBQS1RfQlVGX1NJWkU7CisJCWVwLT5kZXNjcy0+cmRlc2NbaSArIDFdLnJkZXNjMSA9ICgoaSArIDEpIDw8IDE2KSB8IFBLVF9CVUZfU0laRTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUVVFVUVfRU5UUklFUzsgaSArPSAyKSB7CisJCXZvaWQgKnBhZ2U7CisJCWRtYV9hZGRyX3QgZDsKKworCQlwYWdlID0gKHZvaWQgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlpZiAocGFnZSA9PSBOVUxMKQorCQkJZ290byBlcnI7CisKKwkJZCA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsIHBhZ2UsIFBBR0VfU0laRSwgRE1BX1RPX0RFVklDRSk7CisJCWlmIChkbWFfbWFwcGluZ19lcnJvcihkKSkgeworCQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBhZ2UpOworCQkJZ290byBlcnI7CisJCX0KKworCQllcC0+dHhfYnVmW2ldID0gcGFnZTsKKwkJZXAtPmRlc2NzLT50ZGVzY1tpXS5idWZfYWRkciA9IGQ7CisKKwkJZXAtPnR4X2J1ZltpICsgMV0gPSBwYWdlICsgUEtUX0JVRl9TSVpFOworCQllcC0+ZGVzY3MtPnRkZXNjW2kgKyAxXS5idWZfYWRkciA9IGQgKyBQS1RfQlVGX1NJWkU7CisJfQorCisJcmV0dXJuIDA7CisKK2VycjoKKwllcDkzeHhfZnJlZV9idWZmZXJzKGVwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBlcDkzeHhfc3RhcnRfaHcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisJaW50IGk7CisKKwl3cmwoZXAsIFJFR19TRUxGQ1RMLCBSRUdfU0VMRkNUTF9SRVNFVCk7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKChyZGwoZXAsIFJFR19TRUxGQ1RMKSAmIFJFR19TRUxGQ1RMX1JFU0VUKSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaSA9PSAxMCkgeworCQlwcmludGsoS0VSTl9DUklUIERSVl9NT0RVTEVfTkFNRSAiOiBodyBmYWlsZWQgdG8gcmVzZXRcbiIpOworCQlyZXR1cm4gMTsKKwl9CisKKwl3cmwoZXAsIFJFR19TRUxGQ1RMLCAoKGVwLT5tZGNfZGl2aXNvciAtIDEpIDw8IDkpKTsKKworCS8qIERvZXMgdGhlIFBIWSBzdXBwb3J0IHByZWFtYmxlIHN1cHByZXNzPyAgKi8KKwlpZiAoKGVwOTN4eF9tZGlvX3JlYWQoZGV2LCBlcC0+bWlpLnBoeV9pZCwgTUlJX0JNU1IpICYgMHgwMDQwKSAhPSAwKQorCQl3cmwoZXAsIFJFR19TRUxGQ1RMLCAoKGVwLT5tZGNfZGl2aXNvciAtIDEpIDw8IDkpIHwgKDEgPDwgOCkpOworCisJLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmcuICAqLworCWFkZHIgPSBlcC0+ZGVzY3NfZG1hX2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgZXA5M3h4X2Rlc2NzLCByZGVzYyk7CisJd3JsKGVwLCBSRUdfUlhEUUJBREQsIGFkZHIpOworCXdybChlcCwgUkVHX1JYRENVUkFERCwgYWRkcik7CisJd3J3KGVwLCBSRUdfUlhEUUJMRU4sIFJYX1FVRVVFX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IGVwOTN4eF9yZGVzYykpOworCisJLyogUmVjZWl2ZSBzdGF0dXMgcmluZy4gICovCisJYWRkciA9IGVwLT5kZXNjc19kbWFfYWRkciArIG9mZnNldG9mKHN0cnVjdCBlcDkzeHhfZGVzY3MsIHJzdGF0KTsKKwl3cmwoZXAsIFJFR19SWFNUU1FCQURELCBhZGRyKTsKKwl3cmwoZXAsIFJFR19SWFNUU1FDVVJBREQsIGFkZHIpOworCXdydyhlcCwgUkVHX1JYU1RTUUJMRU4sIFJYX1FVRVVFX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IGVwOTN4eF9yc3RhdCkpOworCisJLyogVHJhbnNtaXQgZGVzY3JpcHRvciByaW5nLiAgKi8KKwlhZGRyID0gZXAtPmRlc2NzX2RtYV9hZGRyICsgb2Zmc2V0b2Yoc3RydWN0IGVwOTN4eF9kZXNjcywgdGRlc2MpOworCXdybChlcCwgUkVHX1RYRFFCQURELCBhZGRyKTsKKwl3cmwoZXAsIFJFR19UWERRQ1VSQURELCBhZGRyKTsKKwl3cncoZXAsIFJFR19UWERRQkxFTiwgVFhfUVVFVUVfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgZXA5M3h4X3RkZXNjKSk7CisKKwkvKiBUcmFuc21pdCBzdGF0dXMgcmluZy4gICovCisJYWRkciA9IGVwLT5kZXNjc19kbWFfYWRkciArIG9mZnNldG9mKHN0cnVjdCBlcDkzeHhfZGVzY3MsIHRzdGF0KTsKKwl3cmwoZXAsIFJFR19UWFNUU1FCQURELCBhZGRyKTsKKwl3cmwoZXAsIFJFR19UWFNUU1FDVVJBREQsIGFkZHIpOworCXdydyhlcCwgUkVHX1RYU1RTUUJMRU4sIFRYX1FVRVVFX0VOVFJJRVMgKiBzaXplb2Yoc3RydWN0IGVwOTN4eF90c3RhdCkpOworCisJd3JsKGVwLCBSRUdfQk1DVEwsIFJFR19CTUNUTF9FTkFCTEVfVFggfCBSRUdfQk1DVExfRU5BQkxFX1JYKTsKKwl3cmwoZXAsIFJFR19JTlRFTiwgUkVHX0lOVEVOX1RYIHwgUkVHX0lOVEVOX1JYKTsKKwl3cmwoZXAsIFJFR19HSUlOVE1TSywgMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAoKHJkbChlcCwgUkVHX0JNU1RTKSAmIFJFR19CTVNUU19SWF9BQ1RJVkUpICE9IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0NSSVQgRFJWX01PRFVMRV9OQU1FICI6IGh3IGZhaWxlZCB0byBzdGFydFxuIik7CisJCXJldHVybiAxOworCX0KKworCXdybChlcCwgUkVHX1JYREVOUSwgUlhfUVVFVUVfRU5UUklFUyk7CisJd3JsKGVwLCBSRUdfUlhTVFNFTlEsIFJYX1FVRVVFX0VOVFJJRVMpOworCisJd3JiKGVwLCBSRUdfSU5EQUQwLCBkZXYtPmRldl9hZGRyWzBdKTsKKwl3cmIoZXAsIFJFR19JTkRBRDEsIGRldi0+ZGV2X2FkZHJbMV0pOworCXdyYihlcCwgUkVHX0lOREFEMiwgZGV2LT5kZXZfYWRkclsyXSk7CisJd3JiKGVwLCBSRUdfSU5EQUQzLCBkZXYtPmRldl9hZGRyWzNdKTsKKwl3cmIoZXAsIFJFR19JTkRBRDQsIGRldi0+ZGV2X2FkZHJbNF0pOworCXdyYihlcCwgUkVHX0lOREFENSwgZGV2LT5kZXZfYWRkcls1XSk7CisJd3JsKGVwLCBSRUdfQUZQLCAwKTsKKworCXdybChlcCwgUkVHX01BWEZSTUxFTiwgKE1BWF9QS1RfU0laRSA8PCAxNikgfCBNQVhfUEtUX1NJWkUpOworCisJd3JsKGVwLCBSRUdfUlhDVEwsIFJFR19SWENUTF9ERUZBVUxUKTsKKwl3cmwoZXAsIFJFR19UWENUTCwgUkVHX1RYQ1RMX0VOQUJMRSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X3N0b3BfaHcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCXdybChlcCwgUkVHX1NFTEZDVEwsIFJFR19TRUxGQ1RMX1JFU0VUKTsKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAoKHJkbChlcCwgUkVHX1NFTEZDVEwpICYgUkVHX1NFTEZDVExfUkVTRVQpID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmIChpID09IDEwKQorCQlwcmludGsoS0VSTl9DUklUIERSVl9NT0RVTEVfTkFNRSAiOiBodyBmYWlsZWQgdG8gcmVzZXRcbiIpOworfQorCitzdGF0aWMgaW50IGVwOTN4eF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCWlmIChlcDkzeHhfYWxsb2NfYnVmZmVycyhlcCkpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGlzX3plcm9fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgeworCQlyYW5kb21fZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGdlbmVyYXRlZCByYW5kb20gTUFDIGFkZHJlc3MgIgorCQkJIiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4LlxuIiwgZGV2LT5uYW1lLAorCQkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwKKwkJCWRldi0+ZGV2X2FkZHJbMl0sIGRldi0+ZGV2X2FkZHJbM10sCisJCQlkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdKTsKKwl9CisKKwlpZiAoZXA5M3h4X3N0YXJ0X2h3KGRldikpIHsKKwkJZXA5M3h4X2ZyZWVfYnVmZmVycyhlcCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXNwaW5fbG9ja19pbml0KCZlcC0+cnhfbG9jayk7CisJZXAtPnJ4X3BvaW50ZXIgPSAwOworCWVwLT50eF9jbGVhbl9wb2ludGVyID0gMDsKKwllcC0+dHhfcG9pbnRlciA9IDA7CisJc3Bpbl9sb2NrX2luaXQoJmVwLT50eF9wZW5kaW5nX2xvY2spOworCWVwLT50eF9wZW5kaW5nID0gMDsKKworCWVyciA9IHJlcXVlc3RfaXJxKGVwLT5pcnEsIGVwOTN4eF9pcnEsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJaWYgKGVycikgeworCQllcDkzeHhfc3RvcF9odyhkZXYpOworCQllcDkzeHhfZnJlZV9idWZmZXJzKGVwKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwl3cmwoZXAsIFJFR19HSUlOVE1TSywgUkVHX0dJSU5UTVNLX0VOQUJMRSk7CisKKwluZXRpZl9zdGFydF9xdWV1ZShkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisKKwl3cmwoZXAsIFJFR19HSUlOVE1TSywgMCk7CisJZnJlZV9pcnEoZXAtPmlycSwgZGV2KTsKKwllcDkzeHhfc3RvcF9odyhkZXYpOworCWVwOTN4eF9mcmVlX2J1ZmZlcnMoZXApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQoreworCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOworCisJcmV0dXJuIGdlbmVyaWNfbWlpX2lvY3RsKCZlcC0+bWlpLCBkYXRhLCBjbWQsIE5VTEwpOworfQorCitzdGF0aWMgaW50IGVwOTN4eF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZGF0YTsKKwlpbnQgaTsKKworCXdybChlcCwgUkVHX01JSUNNRCwgUkVHX01JSUNNRF9SRUFEIHwgKHBoeV9pZCA8PCA1KSB8IHJlZyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAoKHJkbChlcCwgUkVHX01JSVNUUykgJiBSRUdfTUlJU1RTX0JVU1kpID09IDApCisJCQlicmVhazsKKwkJbXNsZWVwKDEpOworCX0KKworCWlmIChpID09IDEwKSB7CisJCXByaW50ayhLRVJOX0lORk8gRFJWX01PRFVMRV9OQU1FICI6IG1kaW8gcmVhZCB0aW1lZCBvdXRcbiIpOworCQlkYXRhID0gMHhmZmZmOworCX0gZWxzZSB7CisJCWRhdGEgPSByZGwoZXAsIFJFR19NSUlEQVRBKTsKKwl9CisKKwlyZXR1cm4gZGF0YTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X21kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZywgaW50IGRhdGEpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGk7CisKKwl3cmwoZXAsIFJFR19NSUlEQVRBLCBkYXRhKTsKKwl3cmwoZXAsIFJFR19NSUlDTUQsIFJFR19NSUlDTURfV1JJVEUgfCAocGh5X2lkIDw8IDUpIHwgcmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmICgocmRsKGVwLCBSRUdfTUlJU1RTKSAmIFJFR19NSUlTVFNfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCisJaWYgKGkgPT0gMTApCisJCXByaW50ayhLRVJOX0lORk8gRFJWX01PRFVMRV9OQU1FICI6IG1kaW8gd3JpdGUgdGltZWQgb3V0XG4iKTsKK30KKworc3RhdGljIHZvaWQgZXA5M3h4X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FKTsKKwlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OKTsKK30KKworc3RhdGljIGludCBlcDkzeHhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBtaWlfZXRodG9vbF9nc2V0KCZlcC0+bWlpLCBjbWQpOworfQorCitzdGF0aWMgaW50IGVwOTN4eF9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG1paV9ldGh0b29sX3NzZXQoJmVwLT5taWksIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZXA5M3h4X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmZXAtPm1paSk7Cit9CisKK3N0YXRpYyB1MzIgZXA5M3h4X2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIG1paV9saW5rX29rKCZlcC0+bWlpKTsKK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBlcDkzeHhfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGVwOTN4eF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3NldHRpbmdzCQk9IGVwOTN4eF9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBlcDkzeHhfc2V0X3NldHRpbmdzLAorCS5ud2F5X3Jlc2V0CQk9IGVwOTN4eF9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawkJPSBlcDkzeHhfZ2V0X2xpbmssCit9OworCitzdHJ1Y3QgbmV0X2RldmljZSAqZXA5M3h4X2Rldl9hbGxvYyhzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcDsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZXA5M3h4X3ByaXYpKTsKKwlpZiAoZGV2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBkYXRhLT5kZXZfYWRkciwgRVRIX0FMRU4pOworCisJZGV2LT5nZXRfc3RhdHMgPSBlcDkzeHhfZ2V0X3N0YXRzOworCWRldi0+ZXRodG9vbF9vcHMgPSAmZXA5M3h4X2V0aHRvb2xfb3BzOworCWRldi0+cG9sbCA9IGVwOTN4eF9wb2xsOworCWRldi0+aGFyZF9zdGFydF94bWl0ID0gZXA5M3h4X3htaXQ7CisJZGV2LT5vcGVuID0gZXA5M3h4X29wZW47CisJZGV2LT5zdG9wID0gZXA5M3h4X2Nsb3NlOworCWRldi0+ZG9faW9jdGwgPSBlcDkzeHhfaW9jdGw7CisKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0cgfCBORVRJRl9GX0hXX0NTVU07CisJZGV2LT53ZWlnaHQgPSA2NDsKKworCXJldHVybiBkZXY7Cit9CisKKworc3RhdGljIGludCBlcDkzeHhfZXRoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGVwOTN4eF9wcml2ICplcDsKKworCWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWlmIChkZXYgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwllcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBAQEAgRm9yY2UgZG93bi4gICovCisJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKwllcDkzeHhfZnJlZV9idWZmZXJzKGVwKTsKKworCWlmIChlcC0+YmFzZV9hZGRyICE9IE5VTEwpCisJCWlvdW5tYXAoZXAtPmJhc2VfYWRkcik7CisKKwlpZiAoZXAtPnJlcyAhPSBOVUxMKSB7CisJCXJlbGVhc2VfcmVzb3VyY2UoZXAtPnJlcyk7CisJCWtmcmVlKGVwLT5yZXMpOworCX0KKworCWZyZWVfbmV0ZGV2KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlcDkzeHhfZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGVwOTN4eF9ldGhfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXA7CisJaW50IGVycjsKKworCWRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAocGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWRldiA9IGVwOTN4eF9kZXZfYWxsb2MoZGF0YSk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisJZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKKworCWVwLT5yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCisJCQlwZGV2LT5kZXYuYnVzX2lkKTsKKwlpZiAoZXAtPnJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXAtPmJhc2VfYWRkciA9IGlvcmVtYXAocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCisJCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCk7CisJaWYgKGVwLT5iYXNlX2FkZHIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBldGhlcm5ldCByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9vdXQ7CisJfQorCWVwLT5pcnEgPSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKKworCWVwLT5taWkucGh5X2lkID0gZGF0YS0+cGh5X2lkOworCWVwLT5taWkucGh5X2lkX21hc2sgPSAweDFmOworCWVwLT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKKwllcC0+bWlpLmRldiA9IGRldjsKKwllcC0+bWlpLm1kaW9fcmVhZCA9IGVwOTN4eF9tZGlvX3JlYWQ7CisJZXAtPm1paS5tZGlvX3dyaXRlID0gZXA5M3h4X21kaW9fd3JpdGU7CisJZXAtPm1kY19kaXZpc29yID0gNDA7CS8qIE1heCBIQ0xLIDEwMCBNSHosIG1pbiBNRElPIGNsayAyLjUgTUh6LiAgKi8KKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIG5ldGRldlxuIik7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICIlczogZXA5M3h4IG9uLWNoaXAgZXRoZXJuZXQsIElSUSAlZCwgIgorCQkJICIlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeC5cbiIsIGRldi0+bmFtZSwKKwkJCWVwLT5pcnEsIGRhdGEtPmRldl9hZGRyWzBdLCBkYXRhLT5kZXZfYWRkclsxXSwKKwkJCWRhdGEtPmRldl9hZGRyWzJdLCBkYXRhLT5kZXZfYWRkclszXSwKKwkJCWRhdGEtPmRldl9hZGRyWzRdLCBkYXRhLT5kZXZfYWRkcls1XSk7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwllcDkzeHhfZXRoX3JlbW92ZShwZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVwOTN4eF9ldGhfZHJpdmVyID0geworCS5wcm9iZQkJPSBlcDkzeHhfZXRoX3Byb2JlLAorCS5yZW1vdmUJCT0gZXA5M3h4X2V0aF9yZW1vdmUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gImVwOTN4eC1ldGgiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfZXRoX2luaXRfbW9kdWxlKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTU9EVUxFX05BTUUgIiB2ZXJzaW9uICIgRFJWX01PRFVMRV9WRVJTSU9OICIgbG9hZGluZ1xuIik7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmZXA5M3h4X2V0aF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZXA5M3h4X2V0aF9jbGVhbnVwX21vZHVsZSh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlcDkzeHhfZXRoX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGVwOTN4eF9ldGhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoZXA5M3h4X2V0aF9jbGVhbnVwX21vZHVsZSk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXJoLmMKaW5kZXggZDUyZGViOC4uNGFlOTg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyaC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9ldGhlcmguYwpAQCAtNjI2LDcgKzYyNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRoZXJoX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGhlcmhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwk9IGV0aGVyaF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IGV0aGVyaF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCT0gZXRoZXJoX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXQxNzAwLmMgYi9kcml2ZXJzL25ldC9hdDE3MDAuYwppbmRleCA1ZDc5MjljNy4uNGFlY2ExMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQxNzAwLmMKKysrIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKQEAgLTE4LDcgKzE4LDcgQEAKIAlzdHJhaWdodC1mb3J3YXJkIEZ1aml0c3UgTUI4Njk2NSBpbXBsZW1lbnRhdGlvbnMuCiAKIAlNb2RpZmljYXRpb24gZm9yIEZ1aml0c3UgRk1WLTE4WCBjYXJkcyBpcyBkb25lIGJ5IFl1dGFrYSBUYW1peWEKLQkodGFteUBmbGFiLmZ1aml0c3UuY28uanApLiAKKwkodGFteUBmbGFiLmZ1aml0c3UuY28uanApLgogCiAgIFNvdXJjZXM6CiAgICAgVGhlIEZ1aml0c3UgTUI4Njk2NSBkYXRhc2hlZXQuCkBAIC01OCw3ICs1OCw3IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9Ci0JImF0MTcwMC5jOnYxLjE1IDQvNy85OCAgRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KVxuIjsKKwkiYXQxNzAwLmM6djEuMTYgOS8xMS8wNiAgRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KVxuIjsKIAogI2RlZmluZSBEUlZfTkFNRSAiYXQxNzAwIgogCkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbmV0X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0MCisKICNpZmRlZiBDT05GSUdfTUNBX0xFR0FDWQogc3RydWN0IGF0MTcyMF9tY2FfYWRhcHRlcnNfc3RydWN0IHsKIAljaGFyKiBuYW1lOwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmIChscC0+bWNhX3Nsb3QgPj0gMCkKIAkJbWNhX21hcmtfYXNfdW51c2VkKGxwLT5tY2Ffc2xvdCk7Ci0jZW5kaWYJCisjZW5kaWYKIAlmcmVlX2lycShkZXYtPmlycSwgTlVMTCk7CiAJcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIEFUMTcwMF9JT19FWFRFTlQpOwogfQpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCWZvciAoaiA9IDA7IGF0MTcyMF9tY2FfYWRhcHRlcnNbal0ubmFtZSAhPSBOVUxMOyBqICsrKSB7CiAJCQlzbG90ID0gMDsKIAkJCXdoaWxlIChzbG90ICE9IE1DQV9OT1RGT1VORCkgewotCQkJCQorCiAJCQkJc2xvdCA9IG1jYV9maW5kX3VudXNlZF9hZGFwdGVyKCBhdDE3MjBfbWNhX2FkYXB0ZXJzW2pdLmlkLCBzbG90ICk7CiAJCQkJaWYgKHNsb3QgPT0gTUNBX05PVEZPVU5EKSBicmVhazsKIApAQCAtMzE1LDcgKzMxNSw3IEBACiAJCQkJCWlmICgoIHBvczMgJiAweDA3KSA9PSBhdDE3MDBfaW9hZGRyX3BhdHRlcm5bbF9pXSkKIAkJCQkJCWJyZWFrOwogCQkJCWlvYWRkciA9IGF0MTcwMF9tY2FfcHJvYmVfbGlzdFtsX2ldOwotCQkJCQorCiAJCQkJZm9yIChpcnEgPSAwOyBpcnEgPCAweDEwOyBpcnErKykKIAkJCQkJaWYgKCgoKChwb3M0Pj40KSAmIDB4MGYpIHwgKHBvczMgJiAweGYwKSkgJiAweGZmKSA9PSBhdDE3MDBfaXJxX3BhdHRlcm5baXJxXSkKIAkJCQkJCWJyZWFrOwpAQCAtMzI4LDcgKzMyOCw3IEBACiAJCQkJfQogCiAJCQkJZGV2LT5pcnEgPSBpcnE7Ci0JCQkJCisKIAkJCQkvKiBjbGFpbSB0aGUgc2xvdCAqLwogCQkJCW1jYV9zZXRfYWRhcHRlcl9uYW1lKCBzbG90LCBhdDE3MjBfbWNhX2FkYXB0ZXJzW2pdLm5hbWUgKTsKIAkJCQltY2FfbWFya19hc191c2VkKHNsb3QpOwpAQCAtMzUzLDcgKzM1Myw3IEBACiAJZWxzZSB7CiAJCWdvdG8gZXJyX291dDsKIAl9Ci0JCQkKKwogI2lmZGVmIENPTkZJR19NQ0FfTEVHQUNZCiBmb3VuZDoKICNlbmRpZgpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotDAorCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KICNkZWZpbmUgRUVfU0hJRlRfQ0xLCTB4NDAJLyogRUVQUk9NIHNoaWZ0IGNsb2NrLCBpbiByZWcuIDE2LiAqLwogI2RlZmluZSBFRV9DUwkJCTB4MjAJLyogRUVQUk9NIGNoaXAgc2VsZWN0LCBpbiByZWcuIDE2LiAqLwpAQCAtNTI4LDcgKzUyOCw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotDAorCiAKIHN0YXRpYyBpbnQgbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTY0NSw3ICs2NDUsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0MCisKIC8qIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6CiAgICBIYW5kbGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGludGVycnVwdHMuICovCiBzdGF0aWMgaXJxcmV0dXJuX3QKQEAgLTY2Myw5ICs2NjMsOSBAQAogCiAJaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJc3Bpbl9sb2NrICgmbHAtPmxvY2spOwotCQorCiAJc3RhdHVzID0gaW53KGlvYWRkciArIFRYX1NUQVRVUyk7CiAJb3V0dyhzdGF0dXMsIGlvYWRkciArIFRYX1NUQVRVUyk7CiAKQEAgLTg1MSw4ICs4NTEsNiBAQAogCWludCBpOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlwcmludGsoIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCW91dGIoMywgaW9hZGRyICsgUlhfTU9ERSk7CS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gTUNfRklMVEVSQlJFQUsKQEAgLTkwMSw3ICs4OTksNyBAQAogTU9EVUxFX1BBUk1fREVTQyhpcnEsICJBVDE3MDAvRk1WMThYIElSUSBudW1iZXIiKTsKIE1PRFVMRV9QQVJNX0RFU0MobmV0X2RlYnVnLCAiQVQxNzAwL0ZNVjE4WCBkZWJ1ZyBsZXZlbCAoMC02KSIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpZiAoaW8gPT0gMCkKIAkJcHJpbnRrKCJhdDE3MDA6IFlvdSBzaG91bGQgbm90IHVzZSBhdXRvLXByb2Jpbmcgd2l0aCBpbnNtb2QhXG4iKTsKQEAgLTkyMSw3ICs5MTksNyBAQAogI2VuZGlmIC8qIE1PRFVMRSAqLwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0MCisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiAgY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1ETU9EVUxFIC1EX19LRVJORUxfXyAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyBhdDE3MDAuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0YXJpX2Jpb25ldC5jIGIvZHJpdmVycy9uZXQvYXRhcmlfYmlvbmV0LmMKaW5kZXggNWU1ZjgwYi4uOTJiNTIxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRhcmlfYmlvbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlfYmlvbmV0LmMKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCQlpZiAoYmlvbmV0X2RlYnVnID4xKSB7CiAJCQl1X2NoYXIgKmRhdGEgPSBuaWNfcGFja2V0LT5idWZmZXIsICpwOwogCQkJaW50IGk7Ci0JCQkKKwogCQkJcHJpbnRrKCAiJXM6IFRYIHBrdCB0eXBlIDB4JTR4IGZyb20gIiwgZGV2LT5uYW1lLAogCQkJCSAgKCh1X3Nob3J0ICopZGF0YSlbNl0pOwogCkBAIC01NTEsNyArNTUxLDcgQEAKIAkJCS8qICdza2ItPmRhdGEnIHBvaW50cyB0byB0aGUgc3RhcnQgb2Ygc2tfYnVmZiBkYXRhIGFyZWEuCiAJCQkgKi8KIAkJCW1lbWNweShza2ItPmRhdGEsIG5pY19wYWNrZXQtPmJ1ZmZlciwgcGt0X2xlbik7Ci0JCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoIHNrYiwgZGV2ICk7IAorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKCBza2IsIGRldiApOwogCQkJbmV0aWZfcngoc2tiKTsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQlscC0+c3RhdHMucnhfcGFja2V0cysrOwpAQCAtNTY1LDE3ICs1NjUsMTcgQEAKICAJCQlpZiAoYmlvbmV0X2RlYnVnID4xKSB7CiAgCQkJCXVfY2hhciAqZGF0YSA9IG5pY19wYWNrZXQtPmJ1ZmZlciwgKnA7CiAgCQkJCWludCBpOwotIAkJCQkKKwogIAkJCQlwcmludGsoICIlczogUlggcGt0IHR5cGUgMHglNHggZnJvbSAiLCBkZXYtPm5hbWUsCiAgCQkJCQkgICgodV9zaG9ydCAqKWRhdGEpWzZdKTsKLSAJCQkJCSAKLSAJCQkJCisKKwogIAkJCQlmb3IoIHAgPSAmZGF0YVs2XSwgaSA9IDA7IGkgPCA2OyBpKysgKQogIAkJCQkJcHJpbnRrKCIlMDJ4JXMiLCAqcCsrLGkgIT0gNSA/ICI6IiA6ICIiICk7CiAgCQkJCXByaW50aygiIHRvICIpOwogIAkJCQlmb3IoIHAgPSBkYXRhLCBpID0gMDsgaSA8IDY7IGkrKyApCiAgCQkJCQlwcmludGsoIiUwMnglcyIsICpwKyssaSAhPSA1ID8gIjoiIDogIiIgIlxuIiApOwotIAorCiAgCQkJCXByaW50ayggIiVzOiAiLCBkZXYtPm5hbWUgKTsKICAJCQkJcHJpbnRrKCIgZGF0YSAlMDJ4JTAyeCAlMDJ4JTAyeCUwMnglMDJ4ICUwMnglMDJ4JTAyeCUwMnggJTAyeCUwMnglMDJ4JTAyeCAlMDJ4JTAyeCUwMnglMDJ4IgogIAkJCQkgICAgICAgIiAlMDJ4JTAyeCUwMnglMDJ4IGxlbiAlZFxuIiwKQEAgLTYzNiw3ICs2MzYsNyBAQAogLyogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuCiAgICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yIGNsb3NlZC4KICAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAmbHAtPnN0YXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlfcGFtc25ldC5jIGIvZHJpdmVycy9uZXQvYXRhcmlfcGFtc25ldC5jCmluZGV4IGQ2MDM5ZTYuLmExMDI2MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpX3BhbXNuZXQuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaV9wYW1zbmV0LmMKQEAgLTg1Nyw3ICs4NTcsNyBAQAogLyogR2V0IHRoZSBjdXJyZW50IHN0YXRpc3RpY3MuCiAgICBUaGlzIG1heSBiZSBjYWxsZWQgd2l0aCB0aGUgY2FyZCBvcGVuIG9yIGNsb3NlZC4KICAqLwotc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAmbHAtPnN0YXRzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCmluZGV4IDkxNzgzYTguLmI2NTcwY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAKIAotDAorCiAKIHN0YXRpYyB2b2lkICpzbG93X21lbWNweSggdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4gKQogCkBAIC01NDksNyArNTQ5LDcgQEAKIAkJbWVtYWRkciA9PSAodW5zaWduZWQgc2hvcnQgKikweGZmZTAwMDAwKSB7CiAJCS8qIFBBTXMgY2FyZCBhbmQgUmllYmwgb24gU1QgdXNlIGxldmVsIDUgYXV0b3ZlY3RvciAqLwogCQlpZiAocmVxdWVzdF9pcnEoSVJRX0FVVE9fNSwgbGFuY2VfaW50ZXJydXB0LCBJUlFfVFlQRV9QUklPLAotCQkgICAgICAgICAgICAiUEFNL1JpZWJsLVNUIEV0aGVybmV0IiwgZGV2KSkgeyAKKwkJICAgICAgICAgICAgIlBBTS9SaWVibC1TVCBFdGhlcm5ldCIsIGRldikpIHsKIAkJCXByaW50ayggIkxhbmNlOiByZXF1ZXN0IGZvciBpcnEgJWQgZmFpbGVkXG4iLCBJUlFfQVVUT181ICk7CiAJCQlyZXR1cm4oIDAgKTsKIAkJfQpAQCAtNjM5LDcgKzYzOSw3IEBACiAJLyogWFhYIE1TY2ggKi8KIAlkZXYtPnR4X3RpbWVvdXQgPSBsYW5jZV90eF90aW1lb3V0OwogCWRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOwotCQkJCisKIAogI2lmIDAKIAlkZXYtPnN0YXJ0ID0gMDsKQEAgLTY1MCw3ICs2NTAsNyBAQAogCXJldHVybiggMSApOwogfQogCi0MCisKIHN0YXRpYyBpbnQgbGFuY2Vfb3Blbiggc3RydWN0IG5ldF9kZXZpY2UgKmRldiApCiAKIHsJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gKHN0cnVjdCBsYW5jZV9wcml2YXRlICopZGV2LT5wcml2OwpAQCAtNzQ0LDcgKzc0NCw3IEBACiB7CiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gKHN0cnVjdCBsYW5jZV9wcml2YXRlICopIGRldi0+cHJpdjsKIAlzdHJ1Y3QgbGFuY2VfaW9yZWcJICpJTyA9IGxwLT5pb2Jhc2U7Ci0JCisKIAlBUkVHID0gQ1NSMDsKIAlEUFJJTlRLKCAxLCAoICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA0eCwgcmVzZXR0aW5nLlxuIiwKIAkJCSAgZGV2LT5uYW1lLCBEUkVHICkpOwpAQCAtNzcyLDcgKzc3Miw3IEBACiAJCQkJCQkJICAtTUVNLT50eF9oZWFkW2ldLmxlbmd0aCwKIAkJCQkJCQkgIE1FTS0+dHhfaGVhZFtpXS5taXNjICkpOwogCQl9Ci0jZW5kaWYgCSAKKyNlbmRpZgogCS8qIFhYWCBNU2NoOiBtYXliZSBwdXJnZS9yZWluaXQgcmluZyBoZXJlICovCiAJLyogbGFuY2VfcmVzdGFydCwgZXNzZW50aWFsbHkgKi8KIAlsYW5jZV9pbml0X3JpbmcoZGV2KTsKQEAgLTgwMiwxMiArODAyLDEyIEBACiAJLyogUEFNLUNhcmQgaGFzIGEgYnVnOiBDYW4gb25seSBzZW5kIHBhY2tldHMgd2l0aCBldmVuIG51bWJlciBvZiBieXRlcyEgKi8KIAllbHNlIGlmIChscC0+Y2FyZHR5cGUgPT0gUEFNX0NBUkQgJiYgKGxlbiAmIDEpKQogCQkrK2xlbjsKLQkJCisKIAlpZiAobGVuID4gc2tiLT5sZW4pIHsKIAkJaWYgKHNrYl9wYWR0byhza2IsIGxlbikpCiAJCQlyZXR1cm4gMDsKIAl9Ci0JCQorCiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAogCS8qIEZpbGwgaW4gYSBUeCByaW5nIGVudHJ5ICovCkBAIC0xMTIxLDcgKzExMjEsNyBAQAogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBMb2cgYW55IG5ldCB0YXBzLiAqLwotCQlEUFJJTlRLKCAxLCAoICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lICkpOworCQlEUFJJTlRLKCAyLCAoICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lICkpOwogCQlSRUdBKCBDU1IxNSApID0gMHg4MDAwOyAvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwogCX0gZWxzZSB7CiAJCXNob3J0IG11bHRpY2FzdF90YWJsZVs0XTsKQEAgLTExNzUsNyArMTE3NSw3IEBACiAJcmV0dXJuKCAwICk7CiB9CiAKLQwKKwogI2lmZGVmIE1PRFVMRQogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICphdGFyaWxhbmNlX2RldjsKIApAQCAtMTE5NSw3ICsxMTk1LDcgQEAKIH0KIAogI2VuZGlmIC8qIE1PRFVMRSAqLwotDAorCiAKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdHAuYyBiL2RyaXZlcnMvbmV0L2F0cC5jCmluZGV4IGJmYTY3NGUuLmYyYzhlMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0cC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0cC5jCkBAIC0yMjEsNyArMjIxLDcgQEAKICAgIElmIGRldi0+YmFzZV9hZGRyID09IDEsIGFsd2F5cyByZXR1cm4gZmFpbHVyZS4KICAgIElmIGRldi0+YmFzZV9hZGRyID09IDIsIGFsbG9jYXRlIHNwYWNlIGZvciB0aGUgZGV2aWNlIGFuZCByZXR1cm4gc3VjY2VzcwogICAgKGRldGFjaGFibGUgZGV2aWNlcyBvbmx5KS4KLSAgIAorCiAgICBGSVhNRTogd2Ugc2hvdWxkIHVzZSB0aGUgcGFycG9ydCBsYXllciBmb3IgdGhpcwogICAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGF0cF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKaW5kZXggNTVmNmUzZi4uYWMzM2IxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYwpAQCAtNiw4ICs2LDggQEAKICAqIENvcHlyaWdodCAyMDAyIFRpbWVTeXMgQ29ycC4KICAqIEFkZGVkIGV0aHRvb2wvbWlpLXRvb2wgc3VwcG9ydCwKICAqIENvcHlyaWdodCAyMDA0IE1hdHQgUG9ydGVyIDxtcG9ydGVyQGtlcm5lbC5jcmFzaGluZy5vcmc+Ci0gKiBVcGRhdGU6IDIwMDQgQmpvZXJuIFJpZW1lciwgcmllbWVyQGZva3VzLmZyYXVuaG9mZXIuZGUgCi0gKiBvciByaWVtZXJAcmllbWVyLW50LmRlOiBmaXhlZCB0aGUgbGluayBiZWF0IGRldGVjdGlvbiB3aXRoIAorICogVXBkYXRlOiAyMDA0IEJqb2VybiBSaWVtZXIsIHJpZW1lckBmb2t1cy5mcmF1bmhvZmVyLmRlCisgKiBvciByaWVtZXJAcmllbWVyLW50LmRlOiBmaXhlZCB0aGUgbGluayBiZWF0IGRldGVjdGlvbiB3aXRoCiAgKiBpb2N0bHMgKFNJT0NHTUlJUEhZKQogICogQ29weXJpZ2h0IDIwMDYgSGVyYmVydCBWYWxlcmlvIFJpZWRlbCA8aHZyQGdudS5vcmc+CiAgKiAgY29udmVydGVkIHRvIHVzZSBsaW51eC0yLjYueCdzIFBIWSBmcmFtZXdvcmsKQEAgLTMyLDcgKzMyLDcgQEAKICAqCiAgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAqCi0gKiAKKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNzIsNyArNzIsNyBAQAogI2VuZGlmCiAKICNkZWZpbmUgRFJWX05BTUUJImF1MTAwMF9ldGgiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjUiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjYiCiAjZGVmaW5lIERSVl9BVVRIT1IJIlBldGUgUG9wb3YgPHBwb3BvdkBlbWJlZGRlZGFsbGV5LmNvbT4iCiAjZGVmaW5lIERSVl9ERVNDCSJBdTF4eHggb24tY2hpcCBFdGhlcm5ldCBkcml2ZXIiCiAKQEAgLTEwNywxMyArMTA3LDEzIEBACiAvKgogICogVGhlb3J5IG9mIG9wZXJhdGlvbgogICoKLSAqIFRoZSBBdTEwMDAgTUFDcyB1c2UgYSBzaW1wbGUgcnggYW5kIHR4IGRlc2NyaXB0b3IgcmluZyBzY2hlbWUuIAotICogVGhlcmUgYXJlIGZvdXIgcmVjZWl2ZSBhbmQgZm91ciB0cmFuc21pdCBkZXNjcmlwdG9ycy4gIFRoZXNlIAotICogZGVzY3JpcHRvcnMgYXJlIG5vdCBpbiBtZW1vcnk7IHJhdGhlciwgdGhleSBhcmUganVzdCBhIHNldCBvZiAKKyAqIFRoZSBBdTEwMDAgTUFDcyB1c2UgYSBzaW1wbGUgcnggYW5kIHR4IGRlc2NyaXB0b3IgcmluZyBzY2hlbWUuCisgKiBUaGVyZSBhcmUgZm91ciByZWNlaXZlIGFuZCBmb3VyIHRyYW5zbWl0IGRlc2NyaXB0b3JzLiAgVGhlc2UKKyAqIGRlc2NyaXB0b3JzIGFyZSBub3QgaW4gbWVtb3J5OyByYXRoZXIsIHRoZXkgYXJlIGp1c3QgYSBzZXQgb2YKICAqIGhhcmR3YXJlIHJlZ2lzdGVycy4KICAqCiAgKiBTaW5jZSB0aGUgQXUxMDAwIGhhcyBhIGNvaGVyZW50IGRhdGEgY2FjaGUsIHRoZSByZWNlaXZlIGFuZAotICogdHJhbnNtaXQgYnVmZmVycyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIEtTRUcwIHNlZ21lbnQuIFRoZSAKKyAqIHRyYW5zbWl0IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBLU0VHMCBzZWdtZW50LiBUaGUKICAqIGhhcmR3YXJlIHJlZ2lzdGVycywgaG93ZXZlciwgYXJlIHN0aWxsIG1hcHBlZCBhdCBLU0VHMSB0bwogICogbWFrZSBzdXJlIHRoZXJlJ3Mgbm8gb3V0LW9mLW9yZGVyIHdyaXRlcywgYW5kIHRoYXQgYWxsIHdyaXRlcwogICogY29tcGxldGUgaW1tZWRpYXRlbHkuCkBAIC0xMjMsNyArMTIzLDcgQEAKICAqIHRoZSBtYWMgYWRkcmVzcyBpcywgYW5kIHRoZSBtYWMgYWRkcmVzcyBpcyBub3QgcGFzc2VkIG9uIHRoZQogICogY29tbWFuZCBsaW5lLgogICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBhdTEwMDBfbWFjX2FkZHJbNl0gX19kZXZpbml0ZGF0YSA9IHsgCitzdGF0aWMgdW5zaWduZWQgY2hhciBhdTEwMDBfbWFjX2FkZHJbNl0gX19kZXZpbml0ZGF0YSA9IHsKIAkweDAwLCAweDUwLCAweGMyLCAweDBjLCAweDMwLCAweDAwCiB9OwogCkBAIC0yMDcsMTMgKzIwNywxMyBAQAogCXdoaWxlICgqbWlpX2NvbnRyb2xfcmVnICYgTUFDX01JSV9CVVNZKSB7CiAJCW1kZWxheSgxKTsKIAkJaWYgKC0tdGltZWRvdXQgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVhZF9NSUkgYnVzeSB0aW1lb3V0ISFcbiIsIAorCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVhZF9NSUkgYnVzeSB0aW1lb3V0ISFcbiIsCiAJCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CiAKLQltaWlfY29udHJvbCA9IE1BQ19TRVRfTUlJX1NFTEVDVF9SRUcocmVnKSB8IAorCW1paV9jb250cm9sID0gTUFDX1NFVF9NSUlfU0VMRUNUX1JFRyhyZWcpIHwKIAkJTUFDX1NFVF9NSUlfU0VMRUNUX1BIWShwaHlfYWRkcikgfCBNQUNfTUlJX1JFQUQ7CiAKIAkqbWlpX2NvbnRyb2xfcmVnID0gbWlpX2NvbnRyb2w7CkBAIC0yMjIsNyArMjIyLDcgQEAKIAl3aGlsZSAoKm1paV9jb250cm9sX3JlZyAmIE1BQ19NSUlfQlVTWSkgewogCQltZGVsYXkoMSk7CiAJCWlmICgtLXRpbWVkb3V0ID09IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1kaW9fcmVhZCBidXN5IHRpbWVvdXQhIVxuIiwgCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtZGlvX3JlYWQgYnVzeSB0aW1lb3V0ISFcbiIsCiAJCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTI0MSwxMyArMjQxLDEzIEBACiAJd2hpbGUgKCptaWlfY29udHJvbF9yZWcgJiBNQUNfTUlJX0JVU1kpIHsKIAkJbWRlbGF5KDEpOwogCQlpZiAoLS10aW1lZG91dCA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBtZGlvX3dyaXRlIGJ1c3kgdGltZW91dCEhXG4iLCAKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG1kaW9fd3JpdGUgYnVzeSB0aW1lb3V0ISFcbiIsCiAJCQkJCWRldi0+bmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KIAl9CiAKLQltaWlfY29udHJvbCA9IE1BQ19TRVRfTUlJX1NFTEVDVF9SRUcocmVnKSB8IAorCW1paV9jb250cm9sID0gTUFDX1NFVF9NSUlfU0VMRUNUX1JFRyhyZWcpIHwKIAkJTUFDX1NFVF9NSUlfU0VMRUNUX1BIWShwaHlfYWRkcikgfCBNQUNfTUlJX1dSSVRFOwogCiAJKm1paV9kYXRhX3JlZyA9IHZhbHVlOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAKIC8qCiAgKiBCdWZmZXIgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMuIFRoZSBidWZmZXIgZGVzY3JpcHRvciByZXR1cm5lZAotICogaGFzIHRoZSB2aXJ0dWFsIGFuZCBkbWEgYWRkcmVzcyBvZiBhIGJ1ZmZlciBzdWl0YWJsZSBmb3IgCisgKiBoYXMgdGhlIHZpcnR1YWwgYW5kIGRtYSBhZGRyZXNzIG9mIGEgYnVmZmVyIHN1aXRhYmxlIGZvcgogICogYm90aCwgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgb3BlcmF0aW9ucy4KICAqLwogc3RhdGljIGRiX2Rlc3RfdCAqR2V0RnJlZURCKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwKQpAQCAtNTAwLDIyICs1MDAsMjIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhdXAtPmxvY2ssIGZsYWdzKTsKIH0KIAotLyogCisvKgogICogU2V0dXAgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0ICJyaW5ncyIuICBUaGVzZSBwb2ludGVycyBhcmUgdGhlIGFkZHJlc3NlcwogICogb2YgdGhlIHJ4IGFuZCB0eCBNQUMgRE1BIHJlZ2lzdGVycyBzbyB0aGV5IGFyZSBmaXhlZCBieSB0aGUgaGFyZHdhcmUgLS0KICAqIHRoZXNlIGFyZSBub3QgZGVzY3JpcHRvcnMgc2l0dGluZyBpbiBtZW1vcnkuCiAgKi8KLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIHNldHVwX2h3X3JpbmdzKHN0cnVjdCBhdTEwMDBfcHJpdmF0ZSAqYXVwLCB1MzIgcnhfYmFzZSwgdTMyIHR4X2Jhc2UpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1JYX0RNQTsgaSsrKSB7Ci0JCWF1cC0+cnhfZG1hX3JpbmdbaV0gPSAKKwkJYXVwLT5yeF9kbWFfcmluZ1tpXSA9CiAJCQkodm9sYXRpbGUgcnhfZG1hX3QgKikgKHJ4X2Jhc2UgKyBzaXplb2YocnhfZG1hX3QpKmkpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RNQTsgaSsrKSB7Ci0JCWF1cC0+dHhfZG1hX3JpbmdbaV0gPSAKKwkJYXVwLT50eF9kbWFfcmluZ1tpXSA9CiAJCQkodm9sYXRpbGUgdHhfZG1hX3QgKikgKHR4X2Jhc2UgKyBzaXplb2YodHhfZG1hX3QpKmkpOwogCX0KIH0KQEAgLTYwOCw3ICs2MDgsNyBAQAogCWluZm8tPnJlZ2R1bXBfbGVuID0gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBhdTEwMDBfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGF1MTAwMF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gYXUxMDAwX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gYXUxMDAwX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBhdTEwMDBfZ2V0X2RydmluZm8sCkBAIC02OTEsNyArNjkxLDcgQEAKIAkJCQkvKiBVc2UgdGhlIGhhcmQgY29kZWQgTUFDIGFkZHJlc3NlcyAqLwogCQkJZWxzZSB7CiAJCQkJc3RyMmVhZGRyKGV0aGFkZHIsIHBtYWMgKyBzdHJsZW4oImV0aGFkZHI9IikpOwotCQkJCW1lbWNweShhdTEwMDBfbWFjX2FkZHIsIGV0aGFkZHIsIAorCQkJCW1lbWNweShhdTEwMDBfbWFjX2FkZHIsIGV0aGFkZHIsCiAJCQkJICAgICAgIHNpemVvZihhdTEwMDBfbWFjX2FkZHIpKTsKIAkJCX0KIAkJfQpAQCAtNzgwLDggKzc4MCw4IEBACiAJZGV2LT50eF90aW1lb3V0ID0gYXUxMDAwX3R4X3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbyA9IEVUSF9UWF9USU1FT1VUOwogCi0JLyogCi0JICogVGhlIGJvb3QgY29kZSB1c2VzIHRoZSBldGhlcm5ldCBjb250cm9sbGVyLCBzbyByZXNldCBpdCB0byBzdGFydCAKKwkvKgorCSAqIFRoZSBib290IGNvZGUgdXNlcyB0aGUgZXRoZXJuZXQgY29udHJvbGxlciwgc28gcmVzZXQgaXQgdG8gc3RhcnQKIAkgKiBmcmVzaC4gIGF1MTAwMF9pbml0KCkgZXhwZWN0cyB0aGF0IHRoZSBkZXZpY2UgaXMgaW4gcmVzZXQgc3RhdGUuCiAJICovCiAJcmVzZXRfbWFjKGRldik7CkBAIC04MTAsNyArODEwLDcgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotLyogCisvKgogICogSW5pdGlhbGl6ZSB0aGUgaW50ZXJmYWNlLgogICoKICAqIFdoZW4gdGhlIGRldmljZSBwb3dlcnMgdXAsIHRoZSBjbG9ja3MgYXJlIGRpc2FibGVkIGFuZCB0aGUKQEAgLTgyNiw3ICs4MjYsNyBAQAogCWludCBpOwogCXUzMiBjb250cm9sOwogCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIAorCWlmIChhdTEwMDBfZGVidWcgPiA0KQogCQlwcmludGsoIiVzOiBhdTEwMDBfaW5pdFxuIiwgZGV2LT5uYW1lKTsKIAogCS8qIGJyaW5nIHRoZSBkZXZpY2Ugb3V0IG9mIHJlc2V0ICovCkBAIC0xMTAyLDggKzExMDIsOCBAQAogCWludCBpOwogCiAJaWYgKGF1MTAwMF9kZWJ1ZyA+IDUpCi0JCXByaW50aygiJXM6IHR4OiBhdXAgJXggbGVuPSVkLCBkYXRhPSVwLCBoZWFkICVkXG4iLCAKLQkJCQlkZXYtPm5hbWUsICh1bnNpZ25lZClhdXAsIHNrYi0+bGVuLCAKKwkJcHJpbnRrKCIlczogdHg6IGF1cCAleCBsZW49JWQsIGRhdGE9JXAsIGhlYWQgJWRcbiIsCisJCQkJZGV2LT5uYW1lLCAodW5zaWduZWQpYXVwLCBza2ItPmxlbiwKIAkJCQlza2ItPmRhdGEsIGF1cC0+dHhfaGVhZCk7CiAKIAlwdHhkID0gYXVwLT50eF9kbWFfcmluZ1thdXAtPnR4X2hlYWRdOwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAKIAlwREIgPSBhdXAtPnR4X2RiX2ludXNlW2F1cC0+dHhfaGVhZF07CiAJbWVtY3B5KCh2b2lkICopcERCLT52YWRkciwgc2tiLT5kYXRhLCBza2ItPmxlbik7CiAJaWYgKHNrYi0+bGVuIDwgRVRIX1pMRU4pIHsKLQkJZm9yIChpPXNrYi0+bGVuOyBpPEVUSF9aTEVOOyBpKyspIHsgCisJCWZvciAoaT1za2ItPmxlbjsgaTxFVEhfWkxFTjsgaSsrKSB7CiAJCQkoKGNoYXIgKilwREItPnZhZGRyKVtpXSA9IDA7CiAJCX0KIAkJcHR4ZC0+bGVuID0gRVRIX1pMRU47CkBAIC0xMTY2LDcgKzExNjYsNyBAQAogCQlpZiAoc3RhdHVzICYgUlhfQ09MTCkKIAkJCXBzLT5jb2xsaXNpb25zKys7CiAJfQotCWVsc2UgCisJZWxzZQogCQlwcy0+cnhfYnl0ZXMgKz0gc3RhdHVzICYgUlhfRlJBTUVfTEVOX01BU0s7CiAKIH0KQEAgLTEyMTUsMTMgKzEyMTUsMTMgQEAKIAkJfQogCQllbHNlIHsKIAkJCWlmIChhdTEwMDBfZGVidWcgPiA0KSB7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkgCisJCQkJaWYgKHN0YXR1cyAmIFJYX01JU1NFRF9GUkFNRSkKIAkJCQkJcHJpbnRrKCJyeCBtaXNzXG4iKTsKLQkJCQlpZiAoc3RhdHVzICYgUlhfV0RPR19USU1FUikgCisJCQkJaWYgKHN0YXR1cyAmIFJYX1dET0dfVElNRVIpCiAJCQkJCXByaW50aygicnggd2RvZ1xuIik7Ci0JCQkJaWYgKHN0YXR1cyAmIFJYX1JVTlQpIAorCQkJCWlmIChzdGF0dXMgJiBSWF9SVU5UKQogCQkJCQlwcmludGsoInJ4IHJ1bnRcbiIpOwotCQkJCWlmIChzdGF0dXMgJiBSWF9PVkVSTEVOKSAKKwkJCQlpZiAoc3RhdHVzICYgUlhfT1ZFUkxFTikKIAkJCQkJcHJpbnRrKCJyeCBvdmVybGVuXG4iKTsKIAkJCQlpZiAoc3RhdHVzICYgUlhfQ09MTCkKIAkJCQkJcHJpbnRrKCJyeCBjb2xsXG4iKTsKQEAgLTEyODcsMTIgKzEyODcsMTEgQEAKIHsKIAlzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKmF1cCA9IChzdHJ1Y3QgYXUxMDAwX3ByaXZhdGUgKikgZGV2LT5wcml2OwogCi0JaWYgKGF1MTAwMF9kZWJ1ZyA+IDQpIAorCWlmIChhdTEwMDBfZGVidWcgPiA0KQogCQlwcmludGsoIiVzOiBzZXRfcnhfbW9kZTogZmxhZ3M9JXhcbiIsIGRldi0+bmFtZSwgZGV2LT5mbGFncyk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUFJPTUlTQ1VPVVM7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICB8fAogCQkJICAgZGV2LT5tY19jb3VudCA+IE1VTFRJQ0FTVF9GSUxURVJfTElNSVQpIHsKIAkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BBU1NfQUxMX01VTFRJOwpAQCAtMTMwNiw3ICsxMzA1LDcgQEAKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKIAkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7CiAJCQkgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQkJCXNldF9iaXQoZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKT4+MjYsIAorCQkJc2V0X2JpdChldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpPj4yNiwKIAkJCQkJKGxvbmcgKiltY19maWx0ZXIpOwogCQl9CiAJCWF1cC0+bWFjLT5tdWx0aV9oYXNoX2hpZ2ggPSBtY19maWx0ZXJbMV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmggYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmgKaW5kZXggNDFjMmY4NC4uNTJmZTAwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5oCisrKyBiL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguaApAQCAtMjMsNyArMjMsNyBAQAogICoKICAqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICoKLSAqIAorICoKICAqLwogCiAKQEAgLTQwLDggKzQwLDggQEAKIAogI2RlZmluZSBNVUxUSUNBU1RfRklMVEVSX0xJTUlUIDY0CiAKLS8qIAotICogRGF0YSBCdWZmZXIgRGVzY3JpcHRvci4gRGF0YSBidWZmZXJzIG11c3QgYmUgYWxpZ25lZCBvbiAzMiBieXRlIAorLyoKKyAqIERhdGEgQnVmZmVyIERlc2NyaXB0b3IuIERhdGEgYnVmZmVycyBtdXN0IGJlIGFsaWduZWQgb24gMzIgYnl0ZQogICogYm91bmRhcnkgZm9yIGJvdGgsIHJlY2VpdmUgYW5kIHRyYW5zbWl0LgogICovCiB0eXBlZGVmIHN0cnVjdCBkYl9kZXN0IHsKQEAgLTUxLDcgKzUxLDcgQEAKIH0gZGJfZGVzdF90OwogCiAvKgotICogVGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGRlc2NyaXB0b3JzIGFyZSBtZW1vcnkgCisgKiBUaGUgdHJhbnNtaXQgYW5kIHJlY2VpdmUgZGVzY3JpcHRvcnMgYXJlIG1lbW9yeQogICogbWFwcGVkIHJlZ2lzdGVycy4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgdHhfZG1hIHsKQEAgLTEwNyw5ICsxMDcsOSBAQAogCiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9kZXY7CiAJc3RydWN0IG1paV9idXMgbWlpX2J1czsKLQkKKwogCS8qIFRoZXNlIHZhcmlhYmxlcyBhcmUganVzdCBmb3IgcXVpY2sgYWNjZXNzIHRvIGNlcnRhaW4gcmVncyBhZGRyZXNzZXMuICovCi0Jdm9sYXRpbGUgbWFjX3JlZ190ICptYWM7ICAvKiBtYWMgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICovICAgCisJdm9sYXRpbGUgbWFjX3JlZ190ICptYWM7ICAvKiBtYWMgcmVnaXN0ZXJzICAgICAgICAgICAgICAgICAgICAgICovCiAJdm9sYXRpbGUgdTMyICplbmFibGU7ICAgICAvKiBhZGRyZXNzIG9mIE1BQyBFbmFibGUgUmVnaXN0ZXIgICAgICovCiAKIAl1MzIgdmFkZHI7ICAgICAgICAgICAgICAgIC8qIHZpcnR1YWwgYWRkcmVzcyBvZiByeC90eCBidWZmZXJzICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2I0NC5jIGIvZHJpdmVycy9uZXQvYjQ0LmMKaW5kZXggYmVhMGZjMC4uZTg5MWVhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYjQ0LmMKKysrIGIvZHJpdmVycy9uZXQvYjQ0LmMKQEAgLTIwMTIsNyArMjAxMiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYjQ0X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiNDRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IGI0NF9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCQk9IGI0NF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBiNDRfc2V0X3NldHRpbmdzLApAQCAtMjM1NCw3ICsyMzU0LDcgQEAKIAlkbWFfZGVzY19hbGlnbl9tYXNrID0gfihkbWFfZGVzY19hbGlnbl9zaXplIC0gMSk7CiAJZG1hX2Rlc2Nfc3luY19zaXplID0gbWF4X3QodW5zaWduZWQgaW50LCBkbWFfZGVzY19hbGlnbl9zaXplLCBzaXplb2Yoc3RydWN0IGRtYV9kZXNjKSk7CiAKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZiNDRfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYjQ0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBiNDRfY2xlYW51cCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm1hYy5jIGIvZHJpdmVycy9uZXQvYm1hYy5jCmluZGV4IDZmYWQ4M2YuLjRhZGZlN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JtYWMuYworKysgYi9kcml2ZXJzL25ldC9ibWFjLmMKQEAgLTMzMyw3ICszMzMsNyBAQAogCQl1ZGVsYXkoMTAwMDApOwogCX0KIAotCWJtd3JpdGUoZGV2LCBSU0VFRCwgKHVuc2lnbmVkIHNob3J0KTB4MTk2OCk7CQkKKwlibXdyaXRlKGRldiwgUlNFRUQsICh1bnNpZ25lZCBzaG9ydCkweDE5NjgpOwogCiAJcmVnVmFsdWUgPSBibXJlYWQoZGV2LCBYSUZDKTsKIAlyZWdWYWx1ZSB8PSBUeE91dHB1dEVuYWJsZTsKQEAgLTM3Myw3ICszNzMsNyBAQAogCWJtd3JpdGUoZGV2LCBCSEFTSDIsIGJwLT5oYXNoX3RhYmxlX21hc2tbMV0pOyAJLyogYml0cyAzMSAtIDE2ICovCiAJYm13cml0ZShkZXYsIEJIQVNIMSwgYnAtPmhhc2hfdGFibGVfbWFza1syXSk7IAkvKiBiaXRzIDQ3IC0gMzIgKi8KIAlibXdyaXRlKGRldiwgQkhBU0gwLCBicC0+aGFzaF90YWJsZV9tYXNrWzNdKTsgCS8qIGJpdHMgNjMgLSA0OCAqLwotCQorCiAJcFdvcmQxNiA9ICh1bnNpZ25lZCBzaG9ydCAqKWRldi0+ZGV2X2FkZHI7CiAJYm13cml0ZShkZXYsIE1BREQwLCAqcFdvcmQxNisrKTsKIAlibXdyaXRlKGRldiwgTUFERDEsICpwV29yZDE2KyspOwpAQCAtNDExLDExICs0MTEsMTEgQEAKIAkvKiBlbmFibGUgcnggZG1hIGNoYW5uZWwgKi8KIAlkYmRtYV9jb250aW51ZShyZCk7CiAKLQlvbGRDb25maWcgPSBibXJlYWQoZGV2LCBUWENGRyk7CQkKKwlvbGRDb25maWcgPSBibXJlYWQoZGV2LCBUWENGRyk7CiAJYm13cml0ZShkZXYsIFRYQ0ZHLCBvbGRDb25maWcgfCBUeE1BQ0VuYWJsZSApOwogCiAJLyogdHVybiBvbiByeCBwbHVzIGFueSBvdGhlciBiaXRzIGFscmVhZHkgb24gKHByb21pc2N1b3VzIHBvc3NpYmx5KSAqLwotCW9sZENvbmZpZyA9IGJtcmVhZChkZXYsIFJYQ0ZHKTsJCQorCW9sZENvbmZpZyA9IGJtcmVhZChkZXYsIFJYQ0ZHKTsKIAlibXdyaXRlKGRldiwgUlhDRkcsIG9sZENvbmZpZyB8IFJ4TUFDRW5hYmxlICk7CiAJdWRlbGF5KDIwMDAwKTsKIH0KQEAgLTQ1NiwxMiArNDU2LDEyIEBACiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJtYWNfc3VzcGVuZChzdHJ1Y3QgbWFjaW9fZGV2ICptZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IG1hY2lvX2dldF9kcnZkYXRhKG1kZXYpOwkKKwlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gbWFjaW9fZ2V0X2RydmRhdGEobWRldik7CiAJc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgY29uZmlnOwogCWludCBpOwotCQorCiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCS8qIHByb2xseSBzaG91bGQgd2FpdCBmb3IgZG1hIHRvIGZpbmlzaCAmIHR1cm4gb2ZmIHRoZSBjaGlwICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJwLT5sb2NrLCBmbGFncyk7CkBAIC00NzcsNyArNDc3LDcgQEAKIAlpZiAoYnAtPm9wZW5lZCkgewogCQl2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfcmVncyBfX2lvbWVtICpyZCA9IGJwLT5yeF9kbWE7CiAJCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKnRkID0gYnAtPnR4X2RtYTsKLQkJCQorCiAJCWNvbmZpZyA9IGJtcmVhZChkZXYsIFJYQ0ZHKTsKIAkJYm13cml0ZShkZXYsIFJYQ0ZHLCAoY29uZmlnICYgflJ4TUFDRW5hYmxlKSk7CiAJCWNvbmZpZyA9IGJtcmVhZChkZXYsIFRYQ0ZHKTsKQEAgLTUwNiw3ICs1MDYsNyBAQAogCiBzdGF0aWMgaW50IGJtYWNfcmVzdW1lKHN0cnVjdCBtYWNpb19kZXYgKm1kZXYpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UqIGRldiA9IG1hY2lvX2dldF9kcnZkYXRhKG1kZXYpOwkKKwlzdHJ1Y3QgbmV0X2RldmljZSogZGV2ID0gbWFjaW9fZ2V0X2RydmRhdGEobWRldik7CiAJc3RydWN0IGJtYWNfZGF0YSAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyogc2VlIGlmIHRoaXMgaXMgZW5vdWdoICovCkBAIC04NTUsMTIgKzg1NSwxMiBAQAogCQllbHNlIGhpZ2hfY3JjX3NldCA9IDE7CiAKIAkJY3VyID0gY3VyIDw8IDE7Ci0JCisKIAkJaWYgKChuZXh0ICYgMHgwMDAxKSA9PSAwKSBsb3dfZGF0YV9zZXQgPSAwOwogCQllbHNlIGxvd19kYXRhX3NldCA9IDE7CiAKIAkJbmV4dCA9IG5leHQgPj4gMTsKLQkKKwogCQkvKiBkbyB0aGUgWE9SICovCiAJCWlmIChoaWdoX2NyY19zZXQgXiBsb3dfZGF0YV9zZXQpIGN1ciA9IGN1ciBeIEVORVRfQ1JDUE9MWTsKIAl9CkBAIC04NjksNyArODY5LDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludAogYm1hY19jcmModW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCi17CQorewogCXVuc2lnbmVkIGludCBuZXdjcmM7CiAKIAlYWERFQlVHKCgiYm1hY19jcmM6IGFkZHI9JSMwNHgsICUjMDR4LCAlIzA0eFxuIiwgKmFkZHJlc3MsIGFkZHJlc3NbMV0sIGFkZHJlc3NbMl0pKTsKQEAgLTg4Nyw3ICs4ODcsNyBAQAogCiBzdGF0aWMgdm9pZAogYm1hY19hZGRoYXNoKHN0cnVjdCBibWFjX2RhdGEgKmJwLCB1bnNpZ25lZCBjaGFyICphZGRyKQotewkKK3sKIAl1bnNpZ25lZCBpbnQJIGNyYzsKIAl1bnNpZ25lZCBzaG9ydAkgbWFzazsKIApAQCAtOTAyLDcgKzkwMiw3IEBACiAKIHN0YXRpYyB2b2lkCiBibWFjX3JlbW92ZWhhc2goc3RydWN0IGJtYWNfZGF0YSAqYnAsIHVuc2lnbmVkIGNoYXIgKmFkZHIpCi17CQorewogCXVuc2lnbmVkIGludCBjcmM7CiAJdW5zaWduZWQgY2hhciBtYXNrOwogCkBAIC0xMDU0LDEzICsxMDU0LDEzIEBACiAJCWJtd3JpdGUoZGV2LCBSWENGRywgcnhfY2ZnKTsKIAl9IGVsc2UgewogCQl1MTYgaGFzaF90YWJsZVs0XTsKLQkKKwogCQlyeF9jZmcgPSBibXJlYWQoZGV2LCBSWENGRyk7CiAJCXJ4X2NmZyAmPSB+UnhQcm9taXNjRW5hYmxlOwogCQlibXdyaXRlKGRldiwgUlhDRkcsIHJ4X2NmZyk7CiAKIAkJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSBoYXNoX3RhYmxlW2ldID0gMDsKLQkKKwogCQlmb3IoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKIAkJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAkJCWRtaSA9IGRtaS0+bmV4dDsKQEAgLTEyMjAsNyArMTIyMCw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgc2hvcnQgZGF0YTsKIAotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCQorCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXsKIAkJCXJlc2V0X2FuZF9zZWxlY3Rfc3JvbShkZXYpOwogCQkJZGF0YSA9IHJlYWRfc3JvbShkZXYsIGkgKyBFbmV0QWRkcmVzc09mZnNldC8yLCBTUk9NQWRkcmVzc0JpdHMpOwpAQCAtMTI0NCw3ICsxMjQ0LDcgQEAKIAlibWFjX3N0YXJ0X2NoaXAoZGV2KTsKIAlibXdyaXRlKGRldiwgSU5URElTQUJMRSwgRW5hYmxlTm9ybWFsKTsKIAlicC0+c2xlZXBpbmcgPSAwOwotCQorCiAJLyoKIAkgKiBJdCBzZWVtcyB0aGF0IHRoZSBibWFjIGNhbid0IHJlY2VpdmUgdW50aWwgaXQncyB0cmFuc21pdHRlZAogCSAqIGEgcGFja2V0LiAgU28gd2UgZ2l2ZSBpdCBhIGR1bW15IHBhY2tldCB0byB0cmFuc21pdC4KQEAgLTEyNjQsNyArMTI2NCw4IEBACiB7CiAJaW50IGosIHJldiwgcmV0OwogCXN0cnVjdCBibWFjX2RhdGEgKmJwOwotCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcF9hZGRyOworCXVuc2lnbmVkIGNoYXIgYWRkcls2XTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBpc19ibWFjX3BsdXMgPSAoKGludCltYXRjaC0+ZGF0YSkgIT0gMDsKIApAQCAtMTI3MiwyMSArMTI3MywyMyBAQAogCQlwcmludGsoS0VSTl9FUlIgIkJNQUM6IGNhbid0IHVzZSwgbmVlZCAzIGFkZHJzIGFuZCAzIGludHJzXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWFkZHIgPSBnZXRfcHJvcGVydHkobWFjaW9fZ2V0X29mX25vZGUobWRldiksICJtYWMtYWRkcmVzcyIsIE5VTEwpOwotCWlmIChhZGRyID09IE5VTEwpIHsKLQkJYWRkciA9IGdldF9wcm9wZXJ0eShtYWNpb19nZXRfb2Zfbm9kZShtZGV2KSwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7Ci0JCWlmIChhZGRyID09IE5VTEwpIHsKKwlwcm9wX2FkZHIgPSBnZXRfcHJvcGVydHkobWFjaW9fZ2V0X29mX25vZGUobWRldiksICJtYWMtYWRkcmVzcyIsIE5VTEwpOworCWlmIChwcm9wX2FkZHIgPT0gTlVMTCkgeworCQlwcm9wX2FkZHIgPSBnZXRfcHJvcGVydHkobWFjaW9fZ2V0X29mX25vZGUobWRldiksCisJCQkJImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7CisJCWlmIChwcm9wX2FkZHIgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJCTUFDOiBDYW4ndCBnZXQgbWFjLWFkZHJlc3NcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CisJbWVtY3B5KGFkZHIsIHByb3BfYWRkciwgc2l6ZW9mKGFkZHIpKTsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KFBSSVZfQllURVMpOwogCWlmICghZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiQk1BQzogYWxsb2NfZXRoZXJkZXYgZmFpbGVkLCBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCQkKKwogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmbWRldi0+b2ZkZXYuZGV2KTsKQEAgLTEzNzksNyArMTM4Miw3IEBACiAJCXByaW50aygiJWMlLjJ4IiwgKGo/ICc6JzogJyAnKSwgZGV2LT5kZXZfYWRkcltqXSk7CiAJWFhERUJVRygoIiwgYmFzZV9hZGRyPSUjMGx4IiwgZGV2LT5iYXNlX2FkZHIpKTsKIAlwcmludGsoIlxuIik7Ci0JCisKIAlyZXR1cm4gMDsKIAogZXJyX291dF9pcnEyOgpAQCAtMTQ3MSw3ICsxNDc0LDcgQEAKIAogCWlmIChicC0+c2xlZXBpbmcpCiAJCXJldHVybjsKLQkJCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKIAl3aGlsZSAoMSkgewogCQlpID0gYnAtPnR4X2ZpbGwgKyAxOwpAQCAtMTU1OSw5ICsxNTYyLDkgQEAKIAl9CiAKIAkvKiB0dXJuIGl0IGJhY2sgb24gKi8KLQlvbGRDb25maWcgPSBibXJlYWQoZGV2LCBSWENGRyk7CQkKKwlvbGRDb25maWcgPSBibXJlYWQoZGV2LCBSWENGRyk7CiAJYm13cml0ZShkZXYsIFJYQ0ZHLCBvbGRDb25maWcgfCBSeE1BQ0VuYWJsZSApOwotCW9sZENvbmZpZyA9IGJtcmVhZChkZXYsIFRYQ0ZHKTsJCQorCW9sZENvbmZpZyA9IGJtcmVhZChkZXYsIFRYQ0ZHKTsKIAlibXdyaXRlKGRldiwgVFhDRkcsIG9sZENvbmZpZyB8IFR4TUFDRW5hYmxlICk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZicC0+bG9jaywgZmxhZ3MpOwpAQCAtMTU3MSwxMCArMTU3NCwxMCBAQAogc3RhdGljIHZvaWQgZHVtcF9kYmRtYSh2b2xhdGlsZSBzdHJ1Y3QgZGJkbWFfY21kICpjcCxpbnQgY291bnQpCiB7CiAJaW50IGksKmlwOwotCQorCiAJZm9yIChpPTA7aTwgY291bnQ7aSsrKSB7CiAJCWlwID0gKGludCopKGNwK2kpOwotCQorCiAJCXByaW50aygiZGJkbWEgcmVxIDB4JXggYWRkciAweCV4IGJhZGRyIDB4JXggeGZlci9yZXMgMHgleFxuIiwKIAkJICAgICAgIGxkX2xlMzIoaXArMCksCiAJCSAgICAgICBsZF9sZTMyKGlwKzEpLApAQCAtMTYzMCw3ICsxNjMzLDcgQEAKIAl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwogCiAgICAgICAgCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCWZyZWVfaXJxKGJwLT50eF9kbWFfaW50ciwgZGV2KTsJCisJZnJlZV9pcnEoYnAtPnR4X2RtYV9pbnRyLCBkZXYpOwogCWZyZWVfaXJxKGJwLT5yeF9kbWFfaW50ciwgZGV2KTsKIAogCWlvdW5tYXAoKHZvaWQgX19pb21lbSAqKWRldi0+YmFzZV9hZGRyKTsKQEAgLTE2NDQsNyArMTY0Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGJtYWNfbWF0Y2hbXSA9IAorc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgYm1hY19tYXRjaFtdID0KIHsKIAl7CiAJLm5hbWUgCQk9ICJibWFjIiwKQEAgLTE2NTksNyArMTY2Miw3IEBACiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAob2YsIGJtYWNfbWF0Y2gpOwogCi1zdGF0aWMgc3RydWN0IG1hY2lvX2RyaXZlciBibWFjX2RyaXZlciA9IAorc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgYm1hY19kcml2ZXIgPQogewogCS5uYW1lIAkJPSAiYm1hYyIsCiAJLm1hdGNoX3RhYmxlCT0gYm1hY19tYXRjaCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JtYWMuaCBiL2RyaXZlcnMvbmV0L2JtYWMuaAppbmRleCBkZjNiOTNkLi5hMWQxOWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibWFjLmgKKysrIGIvZHJpdmVycy9uZXQvYm1hYy5oCkBAIC0xNCw3ICsxNCw3IEBACiAgKiAoSE1FKSBjb250cm9sbGVyLiAgU2VlIHN1bmhtZS5oCiAgKi8KIAotIAorCiAvKiByZWdpc3RlciBvZmZzZXRzICovCiAKIC8qIGdsb2JhbCBzdGF0dXMgYW5kIGNvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCBkYjczZGUwLi5iMTU4ZGUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC01Niw4ICs1Niw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjQzIgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkp1bmUgMjgsIDIwMDYiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjQ0IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkF1Z3VzdCAxMCwgMjAwNiIKIAogI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCSBTQUlGVU5fRkxBU0hfQllURV9BRERSX01BU0ssIDAsCiAJICJFbnRyeSAwMTAwIn0sCiAJLyogRW50cnkgMDEwMTogU1QgTTQ1UEUxMCAobm9uLWJ1ZmZlcmVkIGZsYXNoLCBUZXRvbklJIEIwKSAqLwotCXsweDE5MDAwMDAyLCAweDViODA4MjAxLCAweDAwMDUwMGRiLCAweDAzODQwMjUzLCAweGFmMDIwNDA2LCAgICAgICAgCisJezB4MTkwMDAwMDIsIDB4NWI4MDgyMDEsIDB4MDAwNTAwZGIsIDB4MDM4NDAyNTMsIDB4YWYwMjA0MDYsCiAJIDAsIFNUX01JQ1JPX0ZMQVNIX1BBR0VfQklUUywgU1RfTUlDUk9fRkxBU0hfUEFHRV9TSVpFLAogCSBTVF9NSUNST19GTEFTSF9CWVRFX0FERFJfTUFTSywgU1RfTUlDUk9fRkxBU0hfQkFTRV9UT1RBTF9TSVpFKjIsCiAJICJFbnRyeSAwMTAxOiBTVCBNNDVQRTEwICgxMjhrQiBub24tYnVmZmVycmVkKSJ9LApAQCAtMjA5LDggKzIwOSwxMCBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBibngyX3R4X2F2YWlsKHN0cnVjdCBibngyICpicCkKIHsKLQl1MzIgZGlmZiA9IFRYX1JJTkdfSURYKGJwLT50eF9wcm9kKSAtIFRYX1JJTkdfSURYKGJwLT50eF9jb25zKTsKKwl1MzIgZGlmZjsKIAorCXNtcF9tYigpOworCWRpZmYgPSBUWF9SSU5HX0lEWChicC0+dHhfcHJvZCkgLSBUWF9SSU5HX0lEWChicC0+dHhfY29ucyk7CiAJaWYgKGRpZmYgPiBNQVhfVFhfREVTQ19DTlQpCiAJCWRpZmYgPSAoZGlmZiAmIE1BWF9UWF9ERVNDX0NOVCkgLSAxOwogCXJldHVybiAoYnAtPnR4X3Jpbmdfc2l6ZSAtIGRpZmYpOwpAQCAtMzE1LDcgKzMxNyw3IEBACiAJCUJOWDJfRU1BQ19NRElPX0NPTU1fQ09NTUFORF9XUklURSB8CiAJCUJOWDJfRU1BQ19NRElPX0NPTU1fU1RBUlRfQlVTWSB8IEJOWDJfRU1BQ19NRElPX0NPTU1fRElTRVhUOwogCVJFR19XUihicCwgQk5YMl9FTUFDX01ESU9fQ09NTSwgdmFsMSk7Ci0gICAgCisKIAlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgewogCQl1ZGVsYXkoMTApOwogCkBAIC01ODMsNyArNTg1LDcgQEAKIAl1MzIgbG9jYWxfYWR2LCByZW1vdGVfYWR2OwogCiAJYnAtPmZsb3dfY3RybCA9IDA7Ci0JaWYgKChicC0+YXV0b25lZyAmIChBVVRPTkVHX1NQRUVEIHwgQVVUT05FR19GTE9XX0NUUkwpKSAhPSAKKwlpZiAoKGJwLT5hdXRvbmVnICYgKEFVVE9ORUdfU1BFRUQgfCBBVVRPTkVHX0ZMT1dfQ1RSTCkpICE9CiAJCShBVVRPTkVHX1NQRUVEIHwgQVVUT05FR19GTE9XX0NUUkwpKSB7CiAKIAkJaWYgKGJwLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKQEAgLTEwODUsNyArMTA4Nyw3IEBACiAKICNkZWZpbmUgUEhZX0FMTF8xMF8xMDBfU1BFRUQgKEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfMTBGVUxMIHwgXAogCUFEVkVSVElTRV8xMDBIQUxGIHwgQURWRVJUSVNFXzEwMEZVTEwgfCBBRFZFUlRJU0VfQ1NNQSkKLQkKKwogI2RlZmluZSBQSFlfQUxMXzEwMDBfU1BFRUQgKEFEVkVSVElTRV8xMDAwSEFMRiB8IEFEVkVSVElTRV8xMDAwRlVMTCkKIAogc3RhdGljIGludApAQCAtMTExOCw3ICsxMTIwLDcgQEAKIAkJCW5ld19hZHZfcmVnIHw9IEFEVkVSVElTRV8xMDBGVUxMOwogCQlpZiAoYnAtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKIAkJCW5ld19hZHYxMDAwX3JlZyB8PSBBRFZFUlRJU0VfMTAwMEZVTEw7Ci0JCQorCiAJCW5ld19hZHZfcmVnIHw9IEFEVkVSVElTRV9DU01BOwogCiAJCW5ld19hZHZfcmVnIHw9IGJueDJfcGh5X2dldF9wYXVzZV9hZHYoYnApOwpAQCAtMTE1NSw3ICsxMTU3LDcgQEAKIAogCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1TUiwgJmJtc3IpOwogCQlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1TUiwgJmJtc3IpOwotCQkKKwogCQlpZiAoYm1zciAmIEJNU1JfTFNUQVRVUykgewogCQkJLyogRm9yY2UgbGluayBkb3duICovCiAJCQlibngyX3dyaXRlX3BoeShicCwgTUlJX0JNQ1IsIEJNQ1JfTE9PUEJBQ0spOwpAQCAtMTU0NSw3ICsxNTQ3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWJueDJfc2V0X21hY19hZGRyKHN0cnVjdCBibngyICpicCkgCitibngyX3NldF9tYWNfYWRkcihzdHJ1Y3QgYm54MiAqYnApCiB7CiAJdTMyIHZhbDsKIAl1OCAqbWFjX2FkZHIgPSBicC0+ZGV2LT5kZXZfYWRkcjsKQEAgLTE1NTQsNyArMTU1Niw3IEBACiAKIAlSRUdfV1IoYnAsIEJOWDJfRU1BQ19NQUNfTUFUQ0gwLCB2YWwpOwogCi0JdmFsID0gKG1hY19hZGRyWzJdIDw8IDI0KSB8IChtYWNfYWRkclszXSA8PCAxNikgfCAKKwl2YWwgPSAobWFjX2FkZHJbMl0gPDwgMjQpIHwgKG1hY19hZGRyWzNdIDw8IDE2KSB8CiAJCShtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOwogCiAJUkVHX1dSKGJwLCBCTlgyX0VNQUNfTUFDX01BVENIMSwgdmFsKTsKQEAgLTE1NjksNyArMTU3MSw3IEBACiAJc3RydWN0IHJ4X2JkICpyeGJkID0gJmJwLT5yeF9kZXNjX3JpbmdbUlhfUklORyhpbmRleCldW1JYX0lEWChpbmRleCldOwogCXVuc2lnbmVkIGxvbmcgYWxpZ247CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGJwLT5yeF9idWZfc2l6ZSk7CisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihicC0+ZGV2LCBicC0+cnhfYnVmX3NpemUpOwogCWlmIChza2IgPT0gTlVMTCkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xNTc4LDcgKzE1ODAsNiBAQAogCQlza2JfcmVzZXJ2ZShza2IsIDggLSBhbGlnbik7CiAJfQogCi0Jc2tiLT5kZXYgPSBicC0+ZGV2OwogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShicC0+cGRldiwgc2tiLT5kYXRhLCBicC0+cnhfYnVmX3VzZV9zaXplLAogCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCkBAIC0xNjM3LDcgKzE2MzgsNyBAQAogCiAJCXR4X2J1ZiA9ICZicC0+dHhfYnVmX3Jpbmdbc3dfcmluZ19jb25zXTsKIAkJc2tiID0gdHhfYnVmLT5za2I7Ci0jaWZkZWYgQkNNX1RTTyAKKyNpZmRlZiBCQ01fVFNPCiAJCS8qIHBhcnRpYWwgQkQgY29tcGxldGlvbnMgcG9zc2libGUgd2l0aCBUU08gcGFja2V0cyAqLwogCQlpZiAoc2tiX2lzX2dzbyhza2IpKSB7CiAJCQl1MTYgbGFzdF9pZHgsIGxhc3RfcmluZ19pZHg7CkBAIC0xNjg2LDE1ICsxNjg3LDIwIEBACiAJfQogCiAJYnAtPnR4X2NvbnMgPSBzd19jb25zOworCS8qIE5lZWQgdG8gbWFrZSB0aGUgdHhfY29ucyB1cGRhdGUgdmlzaWJsZSB0byBibngyX3N0YXJ0X3htaXQoKQorCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKKwkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0IGJueDJfc3RhcnRfeG1pdCgpCisJICogd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZCBmb3JldmVyLgorCSAqLworCXNtcF9tYigpOwogCi0JaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQoYnAtPmRldikpKSB7Ci0JCXNwaW5fbG9jaygmYnAtPnR4X2xvY2spOworCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpKSAmJgorCQkgICAgIChibngyX3R4X2F2YWlsKGJwKSA+IGJwLT50eF93YWtlX3RocmVzaCkpIHsKKwkJbmV0aWZfdHhfbG9jayhicC0+ZGV2KTsKIAkJaWYgKChuZXRpZl9xdWV1ZV9zdG9wcGVkKGJwLT5kZXYpKSAmJgotCQkgICAgKGJueDJfdHhfYXZhaWwoYnApID4gTUFYX1NLQl9GUkFHUykpIHsKLQorCQkgICAgKGJueDJfdHhfYXZhaWwoYnApID4gYnAtPnR4X3dha2VfdGhyZXNoKSkKIAkJCW5ldGlmX3dha2VfcXVldWUoYnAtPmRldik7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmJwLT50eF9sb2NrKTsKKwkJbmV0aWZfdHhfdW5sb2NrKGJwLT5kZXYpOwogCX0KIH0KIApAQCAtMTc4Niw3ICsxNzkyLDcgQEAKIAkJaWYgKChicC0+ZGV2LT5tdHUgPiAxNTAwKSAmJiAobGVuIDw9IFJYX0NPUFlfVEhSRVNIKSkgewogCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CiAKLQkJCW5ld19za2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIDIpOworCQkJbmV3X3NrYiA9IG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgbGVuICsgMik7CiAJCQlpZiAobmV3X3NrYiA9PSBOVUxMKQogCQkJCWdvdG8gcmV1c2Vfcng7CiAKQEAgLTE3OTcsNyArMTgwMyw2IEBACiAKIAkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOwogCQkJc2tiX3B1dChuZXdfc2tiLCBsZW4pOwotCQkJbmV3X3NrYi0+ZGV2ID0gYnAtPmRldjsKIAogCQkJYm54Ml9yZXVzZV9yeF9za2IoYnAsIHNrYiwKIAkJCQlzd19yaW5nX2NvbnMsIHN3X3JpbmdfcHJvZCk7CkBAIC0xOTc5LDEyICsxOTg0LDEyIEBACiAKIAkJaWYgKG9yaWdfYnVkZ2V0ID4gZGV2LT5xdW90YSkKIAkJCW9yaWdfYnVkZ2V0ID0gZGV2LT5xdW90YTsKLQkJCisKIAkJd29ya19kb25lID0gYm54Ml9yeF9pbnQoYnAsIG9yaWdfYnVkZ2V0KTsKIAkJKmJ1ZGdldCAtPSB3b3JrX2RvbmU7CiAJCWRldi0+cXVvdGEgLT0gd29ya19kb25lOwogCX0KLQkKKwogCWJwLT5sYXN0X3N0YXR1c19pZHggPSBicC0+c3RhdHVzX2Jsay0+c3RhdHVzX2lkeDsKIAlybWIoKTsKIApAQCAtMjMxNyw3ICsyMzIyLDcgQEAKIAljcHVfcmVnLmJwID0gQk5YMl9SWFBfQ1BVX0hXX0JSRUFLUE9JTlQ7CiAJY3B1X3JlZy5zcGFkX2Jhc2UgPSBCTlgyX1JYUF9TQ1JBVENIOwogCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7Ci0gICAgCisKIAlmdy52ZXJfbWFqb3IgPSBibngyX1JYUF9iMDZGd1JlbGVhc2VNYWpvcjsKIAlmdy52ZXJfbWlub3IgPSBibngyX1JYUF9iMDZGd1JlbGVhc2VNaW5vcjsKIAlmdy52ZXJfZml4ID0gYm54Ml9SWFBfYjA2RndSZWxlYXNlRml4OwpAQCAtMjM2OSw3ICsyMzc0LDcgQEAKIAljcHVfcmVnLmJwID0gQk5YMl9UWFBfQ1BVX0hXX0JSRUFLUE9JTlQ7CiAJY3B1X3JlZy5zcGFkX2Jhc2UgPSBCTlgyX1RYUF9TQ1JBVENIOwogCWNwdV9yZWcubWlwc192aWV3X2Jhc2UgPSAweDgwMDAwMDA7Ci0gICAgCisKIAlmdy52ZXJfbWFqb3IgPSBibngyX1RYUF9iMDZGd1JlbGVhc2VNYWpvcjsKIAlmdy52ZXJfbWlub3IgPSBibngyX1RYUF9iMDZGd1JlbGVhc2VNaW5vcjsKIAlmdy52ZXJfZml4ID0gYm54Ml9UWFBfYjA2RndSZWxlYXNlRml4OwpAQCAtMjQyMSw3ICsyNDI2LDcgQEAKIAljcHVfcmVnLmJwID0gQk5YMl9UUEFUX0NQVV9IV19CUkVBS1BPSU5UOwogCWNwdV9yZWcuc3BhZF9iYXNlID0gQk5YMl9UUEFUX1NDUkFUQ0g7CiAJY3B1X3JlZy5taXBzX3ZpZXdfYmFzZSA9IDB4ODAwMDAwMDsKLSAgICAKKwogCWZ3LnZlcl9tYWpvciA9IGJueDJfVFBBVF9iMDZGd1JlbGVhc2VNYWpvcjsKIAlmdy52ZXJfbWlub3IgPSBibngyX1RQQVRfYjA2RndSZWxlYXNlTWlub3I7CiAJZncudmVyX2ZpeCA9IGJueDJfVFBBVF9iMDZGd1JlbGVhc2VGaXg7CkBAIC0yNDczLDcgKzI0NzgsNyBAQAogCWNwdV9yZWcuYnAgPSBCTlgyX0NPTV9DUFVfSFdfQlJFQUtQT0lOVDsKIAljcHVfcmVnLnNwYWRfYmFzZSA9IEJOWDJfQ09NX1NDUkFUQ0g7CiAJY3B1X3JlZy5taXBzX3ZpZXdfYmFzZSA9IDB4ODAwMDAwMDsKLSAgICAKKwogCWZ3LnZlcl9tYWpvciA9IGJueDJfQ09NX2IwNkZ3UmVsZWFzZU1ham9yOwogCWZ3LnZlcl9taW5vciA9IGJueDJfQ09NX2IwNkZ3UmVsZWFzZU1pbm9yOwogCWZ3LnZlcl9maXggPSBibngyX0NPTV9iMDZGd1JlbGVhc2VGaXg7CkBAIC0yNzM2LDcgKzI3NDEsNyBAQAogCiAJdmFsID0gUkVHX1JEKGJwLCBCTlgyX05WTV9BQ0NFU1NfRU5BQkxFKTsKIAkvKiBFbmFibGUgYm90aCBiaXRzLCBldmVuIG9uIHJlYWQuICovCi0JUkVHX1dSKGJwLCBCTlgyX05WTV9BQ0NFU1NfRU5BQkxFLCAKKwlSRUdfV1IoYnAsIEJOWDJfTlZNX0FDQ0VTU19FTkFCTEUsCiAJICAgICAgIHZhbCB8IEJOWDJfTlZNX0FDQ0VTU19FTkFCTEVfRU4gfCBCTlgyX05WTV9BQ0NFU1NfRU5BQkxFX1dSX0VOKTsKIH0KIApAQCAtMjc0Nyw3ICsyNzUyLDcgQEAKIAogCXZhbCA9IFJFR19SRChicCwgQk5YMl9OVk1fQUNDRVNTX0VOQUJMRSk7CiAJLyogRGlzYWJsZSBib3RoIGJpdHMsIGV2ZW4gYWZ0ZXIgcmVhZC4gKi8KLQlSRUdfV1IoYnAsIEJOWDJfTlZNX0FDQ0VTU19FTkFCTEUsIAorCVJFR19XUihicCwgQk5YMl9OVk1fQUNDRVNTX0VOQUJMRSwKIAkJdmFsICYgfihCTlgyX05WTV9BQ0NFU1NfRU5BQkxFX0VOIHwKIAkJCUJOWDJfTlZNX0FDQ0VTU19FTkFCTEVfV1JfRU4pKTsKIH0KQEAgLTMxMzgsNyArMzE0Myw3IEBACiAJCS8qIEZpbmQgdGhlIGRhdGFfc3RhcnQgYWRkciAqLwogCQlkYXRhX3N0YXJ0ID0gKHdyaXR0ZW4gPT0gMCkgPyBvZmZzZXQzMiA6IHBhZ2Vfc3RhcnQ7CiAJCS8qIEZpbmQgdGhlIGRhdGFfZW5kIGFkZHIgKi8KLQkJZGF0YV9lbmQgPSAocGFnZV9lbmQgPiBvZmZzZXQzMiArIGxlbjMyKSA/IAorCQlkYXRhX2VuZCA9IChwYWdlX2VuZCA+IG9mZnNldDMyICsgbGVuMzIpID8KIAkJCShvZmZzZXQzMiArIGxlbjMyKSA6IHBhZ2VfZW5kOwogCiAJCS8qIFJlcXVlc3QgYWNjZXNzIHRvIHRoZSBmbGFzaCBpbnRlcmZhY2UuICovCkBAIC0zMTU5LDggKzMxNjQsOCBAQAogCQkJCQljbWRfZmxhZ3MgfD0gQk5YMl9OVk1fQ09NTUFORF9MQVNUOwogCQkJCX0KIAkJCQlyYyA9IGJueDJfbnZyYW1fcmVhZF9kd29yZChicCwKLQkJCQkJcGFnZV9zdGFydCArIGosIAotCQkJCQkmZmxhc2hfYnVmZmVyW2pdLCAKKwkJCQkJcGFnZV9zdGFydCArIGosCisJCQkJCSZmbGFzaF9idWZmZXJbal0sCiAJCQkJCWNtZF9mbGFncyk7CiAKIAkJCQlpZiAocmMpCkBAIC0zMTg3LDcgKzMxOTIsNyBAQAogCQlpZiAoYnAtPmZsYXNoX2luZm8tPmJ1ZmZlcmVkID09IDApIHsKIAkJCWZvciAoYWRkciA9IHBhZ2Vfc3RhcnQ7IGFkZHIgPCBkYXRhX3N0YXJ0OwogCQkJCWFkZHIgKz0gNCwgaSArPSA0KSB7Ci0JCQkJCisKIAkJCQlyYyA9IGJueDJfbnZyYW1fd3JpdGVfZHdvcmQoYnAsIGFkZHIsCiAJCQkJCSZmbGFzaF9idWZmZXJbaV0sIGNtZF9mbGFncyk7CiAKQEAgLTMyMjEsNyArMzIyNiw3IEBACiAJCWlmIChicC0+Zmxhc2hfaW5mby0+YnVmZmVyZWQgPT0gMCkgewogCQkJZm9yIChhZGRyID0gZGF0YV9lbmQ7IGFkZHIgPCBwYWdlX2VuZDsKIAkJCQlhZGRyICs9IDQsIGkgKz0gNCkgewotCQkJCisKIAkJCQlpZiAoYWRkciA9PSBwYWdlX2VuZC00KSB7CiAJCQkJCWNtZF9mbGFncyA9IEJOWDJfTlZNX0NPTU1BTkRfTEFTVDsKICAgICAgICAgICAgICAgICAJCX0KQEAgLTMzNDYsOSArMzM1MSw5IEBACiAJdmFsID0gQk5YMl9ETUFfQ09ORklHX0RBVEFfQllURV9TV0FQIHwKIAkgICAgICBCTlgyX0RNQV9DT05GSUdfREFUQV9XT1JEX1NXQVAgfAogI2lmZGVmIF9fQklHX0VORElBTgotCSAgICAgIEJOWDJfRE1BX0NPTkZJR19DTlRMX0JZVEVfU1dBUCB8IAorCSAgICAgIEJOWDJfRE1BX0NPTkZJR19DTlRMX0JZVEVfU1dBUCB8CiAjZW5kaWYKLQkgICAgICBCTlgyX0RNQV9DT05GSUdfQ05UTF9XT1JEX1NXQVAgfCAKKwkgICAgICBCTlgyX0RNQV9DT05GSUdfQ05UTF9XT1JEX1NXQVAgfAogCSAgICAgIERNQV9SRUFEX0NIQU5TIDw8IDEyIHwKIAkgICAgICBETUFfV1JJVEVfQ0hBTlMgPDwgMTY7CiAKQEAgLTM0NDEsNyArMzQ0Niw3IEBACiAJUkVHX1dSKGJwLCBCTlgyX0hDX1NUQVRJU1RJQ1NfQUREUl9ILAogCSAgICAgICAodTY0KSBicC0+c3RhdHNfYmxrX21hcHBpbmcgPj4gMzIpOwogCi0JUkVHX1dSKGJwLCBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUCwgCisJUkVHX1dSKGJwLCBCTlgyX0hDX1RYX1FVSUNLX0NPTlNfVFJJUCwKIAkgICAgICAgKGJwLT50eF9xdWlja19jb25zX3RyaXBfaW50IDw8IDE2KSB8IGJwLT50eF9xdWlja19jb25zX3RyaXApOwogCiAJUkVHX1dSKGJwLCBCTlgyX0hDX1JYX1FVSUNLX0NPTlNfVFJJUCwKQEAgLTM1MDMsOCArMzUwOCwxMCBAQAogCXN0cnVjdCB0eF9iZCAqdHhiZDsKIAl1MzIgdmFsOwogCisJYnAtPnR4X3dha2VfdGhyZXNoID0gYnAtPnR4X3Jpbmdfc2l6ZSAvIDI7CisKIAl0eGJkID0gJmJwLT50eF9kZXNjX3JpbmdbTUFYX1RYX0RFU0NfQ05UXTsKLQkJCisKIAl0eGJkLT50eF9iZF9oYWRkcl9oaSA9ICh1NjQpIGJwLT50eF9kZXNjX21hcHBpbmcgPj4gMzI7CiAJdHhiZC0+dHhfYmRfaGFkZHJfbG8gPSAodTY0KSBicC0+dHhfZGVzY19tYXBwaW5nICYgMHhmZmZmZmZmZjsKIApAQCAtMzUxMiw3ICszNTE5LDcgQEAKIAlicC0+dHhfY29ucyA9IDA7CiAJYnAtPmh3X3R4X2NvbnMgPSAwOwogCWJwLT50eF9wcm9kX2JzZXEgPSAwOwotCQorCiAJdmFsID0gQk5YMl9MMkNUWF9UWVBFX1RZUEVfTDI7CiAJdmFsIHw9IEJOWDJfTDJDVFhfVFlQRV9TSVpFX0wyOwogCUNUWF9XUihicCwgR0VUX0NJRF9BRERSKFRYX0NJRCksIEJOWDJfTDJDVFhfVFlQRSwgdmFsKTsKQEAgLTM1MzMsNyArMzU0MCw3IEBACiB7CiAJc3RydWN0IHJ4X2JkICpyeGJkOwogCWludCBpOwotCXUxNiBwcm9kLCByaW5nX3Byb2Q7IAorCXUxNiBwcm9kLCByaW5nX3Byb2Q7CiAJdTMyIHZhbDsKIAogCS8qIDggZm9yIENSQyBhbmQgVkxBTiAqLwpAQCAtMzU0NSw3ICszNTUyLDcgQEAKIAlicC0+cnhfY29ucyA9IDA7CiAJYnAtPmh3X3J4X2NvbnMgPSAwOwogCWJwLT5yeF9wcm9kX2JzZXEgPSAwOwotCQkKKwogCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfbWF4X3Jpbmc7IGkrKykgewogCQlpbnQgajsKIApAQCAtMzkyMCw3ICszOTI3LDcgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9Ci0JCisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTUyLDcgKzM5NTksNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBrdF9zaXplID0gMTUxNDsKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9zaXplKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGJwLT5kZXYsIHBrdF9zaXplKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcGFja2V0ID0gc2tiX3B1dChza2IsIHBrdF9zaXplKTsKQEAgLTQxMTcsNyArNDEyNCw3IEBACiAJYm54Ml9yZWFkX3BoeShicCwgTUlJX0JNU1IsICZibXNyKTsKIAlibngyX3JlYWRfcGh5KGJwLCBNSUlfQk1TUiwgJmJtc3IpOwogCXNwaW5fdW5sb2NrX2JoKCZicC0+cGh5X2xvY2spOwotCQkKKwogCWlmIChibXNyICYgQk1TUl9MU1RBVFVTKSB7CiAJCXJldHVybiAwOwogCX0KQEAgLTQyODQsNyArNDI5MSw3IEBACiAJCWJueDJfZnJlZV9tZW0oYnApOwogCQlyZXR1cm4gcmM7CiAJfQotCQorCiAJbW9kX3RpbWVyKCZicC0+dGltZXIsIGppZmZpZXMgKyBicC0+Y3VycmVudF9pbnRlcnZhbCk7CiAKIAlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDApOwpAQCAtNDM5MCwxMCArNDM5Nyw4IEBACiAjZW5kaWYKIAogLyogQ2FsbGVkIHdpdGggbmV0aWZfdHhfbG9jay4KLSAqIGhhcmRfc3RhcnRfeG1pdCBpcyBwc2V1ZG8tbG9ja2xlc3MgLSBhIGxvY2sgaXMgb25seSByZXF1aXJlZCB3aGVuCi0gKiB0aGUgdHggcXVldWUgaXMgZnVsbC4gVGhpcyB3YXksIHdlIGdldCB0aGUgYmVuZWZpdCBvZiBsb2NrbGVzcwotICogb3BlcmF0aW9ucyBtb3N0IG9mIHRoZSB0aW1lIHdpdGhvdXQgdGhlIGNvbXBsZXhpdGllcyB0byBoYW5kbGUKLSAqIG5ldGlmX3N0b3BfcXVldWUvd2FrZV9xdWV1ZSByYWNlIGNvbmRpdGlvbnMuCisgKiBibngyX3R4X2ludCgpIHJ1bnMgd2l0aG91dCBuZXRpZl90eF9sb2NrIHVubGVzcyBpdCBuZWVkcyB0byBjYWxsCisgKiBuZXRpZl93YWtlX3F1ZXVlKCkuCiAgKi8KIHN0YXRpYyBpbnQKIGJueDJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDQyNiw3ICs0NDMxLDcgQEAKIAkJdmxhbl90YWdfZmxhZ3MgfD0KIAkJCShUWF9CRF9GTEFHU19WTEFOX1RBRyB8ICh2bGFuX3R4X3RhZ19nZXQoc2tiKSA8PCAxNikpOwogCX0KLSNpZmRlZiBCQ01fVFNPIAorI2lmZGVmIEJDTV9UU08KIAlpZiAoKG1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpICYmCiAJCShza2ItPmxlbiA+IChicC0+ZGV2LT5tdHUgKyBFVEhfSExFTikpKSB7CiAJCXUzMiB0Y3Bfb3B0X2xlbiwgaXBfdGNwX2xlbjsKQEAgLTQ0NjUsNyArNDQ3MCw3IEBACiAJfQogCiAJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKGJwLT5wZGV2LCBza2ItPmRhdGEsIGxlbiwgUENJX0RNQV9UT0RFVklDRSk7Ci0JCisKIAl0eF9idWYgPSAmYnAtPnR4X2J1Zl9yaW5nW3JpbmdfcHJvZF07CiAJdHhfYnVmLT5za2IgPSBza2I7CiAJcGNpX3VubWFwX2FkZHJfc2V0KHR4X2J1ZiwgbWFwcGluZywgbWFwcGluZyk7CkBAIC00NTEyLDEyICs0NTE3LDkgQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWlmICh1bmxpa2VseShibngyX3R4X2F2YWlsKGJwKSA8PSBNQVhfU0tCX0ZSQUdTKSkgewotCQlzcGluX2xvY2soJmJwLT50eF9sb2NrKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkKLQkJaWYgKGJueDJfdHhfYXZhaWwoYnApID4gTUFYX1NLQl9GUkFHUykKKwkJaWYgKGJueDJfdHhfYXZhaWwoYnApID4gYnAtPnR4X3dha2VfdGhyZXNoKQogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQlzcGluX3VubG9jaygmYnAtPnR4X2xvY2spOwogCX0KIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC00NTk4LDIzICs0NjAwLDIzIEBACiAJbmV0X3N0YXRzLT50eF9ieXRlcyA9CiAJCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENPdXRPY3RldHMpOwogCi0JbmV0X3N0YXRzLT5tdWx0aWNhc3QgPSAKKwluZXRfc3RhdHMtPm11bHRpY2FzdCA9CiAJCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENPdXRNdWx0aWNhc3RQa3RzKTsKIAotCW5ldF9zdGF0cy0+Y29sbGlzaW9ucyA9IAorCW5ldF9zdGF0cy0+Y29sbGlzaW9ucyA9CiAJCSh1bnNpZ25lZCBsb25nKSBzdGF0c19ibGstPnN0YXRfRXRoZXJTdGF0c0NvbGxpc2lvbnM7CiAKLQluZXRfc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPSAKKwluZXRfc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgPQogCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9FdGhlclN0YXRzVW5kZXJzaXplUGt0cyArCiAJCXN0YXRzX2Jsay0+c3RhdF9FdGhlclN0YXRzT3ZlcnJzaXplUGt0cyk7CiAKLQluZXRfc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0gCisJbmV0X3N0YXRzLT5yeF9vdmVyX2Vycm9ycyA9CiAJCSh1bnNpZ25lZCBsb25nKSBzdGF0c19ibGstPnN0YXRfSWZJbk1CVUZEaXNjYXJkczsKIAotCW5ldF9zdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gCisJbmV0X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgPQogCQkodW5zaWduZWQgbG9uZykgc3RhdHNfYmxrLT5zdGF0X0RvdDNTdGF0c0FsaWdubWVudEVycm9yczsKIAotCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9IAorCW5ldF9zdGF0cy0+cnhfY3JjX2Vycm9ycyA9CiAJCSh1bnNpZ25lZCBsb25nKSBzdGF0c19ibGstPnN0YXRfRG90M1N0YXRzRkNTRXJyb3JzOwogCiAJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBuZXRfc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKwpAQCAtNDYzNSw3ICs0NjM3LDcgQEAKIAl9CiAKIAluZXRfc3RhdHMtPnR4X2Vycm9ycyA9Ci0gICAgCQkodW5zaWduZWQgbG9uZykgCisgICAgCQkodW5zaWduZWQgbG9uZykKIAkJc3RhdHNfYmxrLT5zdGF0X2VtYWNfdHhfc3RhdF9kb3Qzc3RhdHNpbnRlcm5hbG1hY3RyYW5zbWl0ZXJyb3JzCiAJCSsKIAkJbmV0X3N0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArCkBAIC00Njk2LDcgKzQ2OTgsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0gIAorCiBzdGF0aWMgaW50CiBibngyX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKQEAgLTQ3MDksNyArNDcxMSw3IEBACiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQlhdXRvbmVnIHw9IEFVVE9ORUdfU1BFRUQ7CiAKLQkJY21kLT5hZHZlcnRpc2luZyAmPSBFVEhUT09MX0FMTF9DT1BQRVJfU1BFRUQ7IAorCQljbWQtPmFkdmVydGlzaW5nICY9IEVUSFRPT0xfQUxMX0NPUFBFUl9TUEVFRDsKIAogCQkvKiBhbGxvdyBhZHZlcnRpc2luZyAxIHNwZWVkICovCiAJCWlmICgoY21kLT5hZHZlcnRpc2luZyA9PSBBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZikgfHwKQEAgLTQ5ODYsNyArNDk4OCw3IEBACiAJYnAtPnJ4X3RpY2tzID0gKHUxNikgY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CiAJaWYgKGJwLT5yeF90aWNrcyA+IDB4M2ZmKSBicC0+cnhfdGlja3MgPSAweDNmZjsKIAotCWJwLT5yeF9xdWlja19jb25zX3RyaXAgPSAodTE2KSBjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsgCisJYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcCA9ICh1MTYpIGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCWlmIChicC0+cnhfcXVpY2tfY29uc190cmlwID4gMHhmZikgYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcCA9IDB4ZmY7CiAKIAlicC0+cnhfdGlja3NfaW50ID0gKHUxNikgY29hbC0+cnhfY29hbGVzY2VfdXNlY3NfaXJxOwpAQCAtNTIwNCw0NiArNTIwNiw0NiBAQAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ091dE11bHRpY2FzdFBrdHNfaGkpLAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZIQ091dEJyb2FkY2FzdFBrdHNfaGkpLAogICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfZW1hY190eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpLAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKSwgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzRkNTRXJyb3JzKSwgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzQWxpZ25tZW50RXJyb3JzKSwgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKSwgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMpLCAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKSwgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyksICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMpLCAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c0NvbGxpc2lvbnMpLCAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c0ZyYWdtZW50cyksICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c0phYmJlcnMpLCAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMpLCAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c092ZXJyc2l6ZVBrdHMpLCAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDY0T2N0ZXRzKSwgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDY1T2N0ZXRzdG8xMjdPY3RldHMpLCAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDEyOE9jdGV0c3RvMjU1T2N0ZXRzKSwgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDI1Nk9jdGV0c3RvNTExT2N0ZXRzKSwgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDUxMk9jdGV0c3RvMTAyM09jdGV0cyksICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDEwMjRPY3RldHN0bzE1MjJPY3RldHMpLCAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDE1MjNPY3RldHN0bzkwMjJPY3RldHMpLCAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDY0T2N0ZXRzKSwgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDY1T2N0ZXRzdG8xMjdPY3RldHMpLCAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDEyOE9jdGV0c3RvMjU1T2N0ZXRzKSwgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDI1Nk9jdGV0c3RvNTExT2N0ZXRzKSwgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDUxMk9jdGV0c3RvMTAyM09jdGV0cyksICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDEwMjRPY3RldHN0bzE1MjJPY3RldHMpLCAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDE1MjNPY3RldHN0bzkwMjJPY3RldHMpLCAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfWG9uUGF1c2VGcmFtZXNSZWNlaXZlZCksICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfWG9mZlBhdXNlRnJhbWVzUmVjZWl2ZWQpLCAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfT3V0WG9uU2VudCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfT3V0WG9mZlNlbnQpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfTWFjQ29udHJvbEZyYW1lc1JlY2VpdmVkKSwgICAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbkZyYW1lc0wyRmlsdGVyRGlzY2FyZHMpLCAgICAgICAgICAgICAgICAgIAotICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbk1CVUZEaXNjYXJkcyksICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNTdGF0c0ZDU0Vycm9ycyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9Eb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9Eb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0RvdDNTdGF0c0xhdGVDb2xsaXNpb25zKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNDb2xsaXNpb25zKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNGcmFnbWVudHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c0phYmJlcnMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c092ZXJyc2l6ZVBrdHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDY0T2N0ZXRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNQa3RzUng2NU9jdGV0c3RvMTI3T2N0ZXRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNQa3RzUngxMjhPY3RldHN0bzI1NU9jdGV0cyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9FdGhlclN0YXRzUGt0c1J4MjU2T2N0ZXRzdG81MTFPY3RldHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNSeDUxMk9jdGV0c3RvMTAyM09jdGV0cyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9FdGhlclN0YXRzUGt0c1J4MTAyNE9jdGV0c3RvMTUyMk9jdGV0cyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9FdGhlclN0YXRzUGt0c1J4MTUyM09jdGV0c3RvOTAyMk9jdGV0cyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9FdGhlclN0YXRzUGt0c1R4NjRPY3RldHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDY1T2N0ZXRzdG8xMjdPY3RldHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfRXRoZXJTdGF0c1BrdHNUeDEyOE9jdGV0c3RvMjU1T2N0ZXRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNQa3RzVHgyNTZPY3RldHN0bzUxMU9jdGV0cyksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9FdGhlclN0YXRzUGt0c1R4NTEyT2N0ZXRzdG8xMDIzT2N0ZXRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNQa3RzVHgxMDI0T2N0ZXRzdG8xNTIyT2N0ZXRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X0V0aGVyU3RhdHNQa3RzVHgxNTIzT2N0ZXRzdG85MDIyT2N0ZXRzKSwKKyAgICBTVEFUU19PRkZTRVQzMihzdGF0X1hvblBhdXNlRnJhbWVzUmVjZWl2ZWQpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfWG9mZlBhdXNlRnJhbWVzUmVjZWl2ZWQpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfT3V0WG9uU2VudCksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9PdXRYb2ZmU2VudCksCisgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9NYWNDb250cm9sRnJhbWVzUmVjZWl2ZWQpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbkZyYW1lc0wyRmlsdGVyRGlzY2FyZHMpLAorICAgIFNUQVRTX09GRlNFVDMyKHN0YXRfSWZJbk1CVUZEaXNjYXJkcyksCiAgICAgU1RBVFNfT0ZGU0VUMzIoc3RhdF9Gd1J4RHJvcCksCiB9OwogCiAvKiBzdGF0X0lmSENJbkJhZE9jdGV0cyBhbmQgc3RhdF9Eb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgYXJlCiAgKiBza2lwcGVkIGJlY2F1c2Ugb2YgZXJyYXRhLgotICovICAgICAgICAgICAgICAgCisgKi8KIHN0YXRpYyB1OCBibngyXzU3MDZfc3RhdHNfbGVuX2FycltCTlgyX05VTV9TVEFUU10gPSB7CiAJOCwwLDgsOCw4LDgsOCw4LDgsOCwKIAk0LDAsNCw0LDQsNCw0LDQsNCw0LApAQCAtNTQyNyw3ICs1NDI5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBibngyX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBibngyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gYm54Ml9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBibngyX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gYm54Ml9nZXRfZHJ2aW5mbywKQEAgLTU2MjgsNyArNTYzMCw2IEBACiAJYnAtPnBkZXYgPSBwZGV2OwogCiAJc3Bpbl9sb2NrX2luaXQoJmJwLT5waHlfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmJwLT50eF9sb2NrKTsKIAlJTklUX1dPUksoJmJwLT5yZXNldF90YXNrLCBibngyX3Jlc2V0X3Rhc2ssIGJwKTsKIAogCWRldi0+YmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CkBAIC01NjY0LDcgKzU2NjUsNyBAQAogCQlicC0+ZmxhZ3MgfD0gUENJWF9GTEFHOwogCiAJCWNsa3JlZyA9IFJFR19SRChicCwgQk5YMl9QQ0lDRkdfUENJX0NMT0NLX0NPTlRST0xfQklUUyk7Ci0JCQorCiAJCWNsa3JlZyAmPSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1BDSV9DTEtfU1BEX0RFVDsKIAkJc3dpdGNoIChjbGtyZWcpIHsKIAkJY2FzZSBCTlgyX1BDSUNGR19QQ0lfQ0xPQ0tfQ09OVFJPTF9CSVRTX1BDSV9DTEtfU1BEX0RFVF8xMzNNSFo6CkBAIC01NzUxLDcgKzU3NTIsNyBAQAogCWJwLT5tYWNfYWRkcls1XSA9ICh1OCkgcmVnOwogCiAJYnAtPnR4X3Jpbmdfc2l6ZSA9IE1BWF9UWF9ERVNDX0NOVDsKLQlibngyX3NldF9yeF9yaW5nX3NpemUoYnAsIDEwMCk7CisJYm54Ml9zZXRfcnhfcmluZ19zaXplKGJwLCAyNTUpOwogCiAJYnAtPnJ4X2NzdW0gPSAxOwogCkBAIC01NzYxLDcgKzU3NjIsNyBAQAogCWJwLT50eF9xdWlja19jb25zX3RyaXAgPSAyMDsKIAlicC0+dHhfdGlja3NfaW50ID0gODA7CiAJYnAtPnR4X3RpY2tzID0gODA7Ci0JCQorCiAJYnAtPnJ4X3F1aWNrX2NvbnNfdHJpcF9pbnQgPSA2OwogCWJwLT5yeF9xdWlja19jb25zX3RyaXAgPSA2OwogCWJwLT5yeF90aWNrc19pbnQgPSAxODsKQEAgLTYwMTUsNyArNjAxNiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGJueDJfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmJueDJfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJueDJfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBibngyX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCA2NThjNWVlLi5jYTMxOTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC0yMiw5ICsyMiw5IEBACiAgKi8KIHN0cnVjdCB0eF9iZCB7CiAJdTMyIHR4X2JkX2hhZGRyX2hpOwotCXUzMiB0eF9iZF9oYWRkcl9sbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotCXUzMiB0eF9iZF9tc3NfbmJ5dGVzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQl1MzIgdHhfYmRfdmxhbl90YWdfZmxhZ3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwl1MzIgdHhfYmRfaGFkZHJfbG87CisJdTMyIHR4X2JkX21zc19uYnl0ZXM7CisJdTMyIHR4X2JkX3ZsYW5fdGFnX2ZsYWdzOwogCQkjZGVmaW5lIFRYX0JEX0ZMQUdTX0NPTk5fRkFVTFQJCSgxPDwwKQogCQkjZGVmaW5lIFRYX0JEX0ZMQUdTX1RDUF9VRFBfQ0tTVU0JKDE8PDEpCiAJCSNkZWZpbmUgVFhfQkRfRkxBR1NfSVBfQ0tTVU0JCSgxPDwyKQpAQCAtMzg5MCwxNCArMzg5MCwxMCBAQAogCXUzMgkJdHhfcHJvZF9ic2VxIF9fYXR0cmlidXRlX18oKGFsaWduZWQoTDFfQ0FDSEVfQllURVMpKSk7CiAJdTE2CQl0eF9wcm9kOwogCi0Jc3RydWN0IHR4X2JkCSp0eF9kZXNjX3Jpbmc7Ci0Jc3RydWN0IHN3X2JkCSp0eF9idWZfcmluZzsKLQlpbnQJCXR4X3Jpbmdfc2l6ZTsKLQogCXUxNgkJdHhfY29ucyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSkpOwogCXUxNgkJaHdfdHhfY29uczsKIAotI2lmZGVmIEJDTV9WTEFOIAorI2lmZGVmIEJDTV9WTEFOCiAJc3RydWN0CQkJdmxhbl9ncm91cCAqdmxncnA7CiAjZW5kaWYKIApAQCAtMzkxNiw5ICszOTEyLDExIEBACiAJc3RydWN0IHN3X2JkCQkqcnhfYnVmX3Jpbmc7CiAJc3RydWN0IHJ4X2JkCQkqcnhfZGVzY19yaW5nW01BWF9SWF9SSU5HU107CiAKLQkvKiBPbmx5IHVzZWQgdG8gc3luY2hyb25pemUgbmV0aWZfc3RvcF9xdWV1ZS93YWtlX3F1ZXVlIHdoZW4gdHggKi8KLQkvKiByaW5nIGlzIGZ1bGwgKi8KLQlzcGlubG9ja190CQl0eF9sb2NrOworCS8qIFRYIGNvbnN0YW50cyAqLworCXN0cnVjdCB0eF9iZAkqdHhfZGVzY19yaW5nOworCXN0cnVjdCBzd19iZAkqdHhfYnVmX3Jpbmc7CisJaW50CQl0eF9yaW5nX3NpemU7CisJdTMyCQl0eF93YWtlX3RocmVzaDsKIAogCS8qIEVuZCBvZiBmaWVsZHMgdXNlZCBpbiB0aGUgcGVyZm9ybWFuY2UgY29kZSBwYXRocy4gKi8KIApAQCAtMzk1Miw3ICszOTUwLDcgQEAKICNkZWZpbmUgQ0hJUF9SRVZfQXgJCQkweDAwMDAwMDAwCiAjZGVmaW5lIENISVBfUkVWX0J4CQkJMHgwMDAwMTAwMAogI2RlZmluZSBDSElQX1JFVl9DeAkJCTB4MDAwMDIwMDAKLSAgICAKKwogI2RlZmluZSBDSElQX01FVEFMKGJwKQkJCSgoKGJwKS0+Y2hpcF9pZCkgJiAweDAwMDAwZmYwKQogI2RlZmluZSBDSElQX0JPTkRJTkcoYnApCQkoKChicCktPmNoaXBfaWQpICYgMHgwMDAwMDAwZikKIApAQCAtMzk3MSw3ICszOTY5LDcgQEAKIAogCXUzMgkJCXBoeV9hZGRyOwogCXUzMgkJCXBoeV9pZDsKLQkKKwogCXUxNgkJCWJ1c19zcGVlZF9taHo7CiAJdTgJCQl3b2w7CiAKQEAgLTQwMjcsNyArNDAyNSw3IEBACiAKIAl1MzIJCQlhZHZlcnRpc2luZzsKIAotCXU4CQkJcmVxX2Zsb3dfY3RybDsJLyogZmxvdyBjdHJsIGFkdmVydGlzZW1lbnQgKi8gCisJdTgJCQlyZXFfZmxvd19jdHJsOwkvKiBmbG93IGN0cmwgYWR2ZXJ0aXNlbWVudCAqLwogCQkJCQkJLyogc2V0dGluZ3Mgb3IgZm9yY2VkICAgICAgKi8KIAkJCQkJCS8qIHNldHRpbmdzICAgICAgICAgICAgICAgICovCiAJdTgJCQlhdXRvbmVnOwpAQCAtNDE4MSw3ICs0MTc5LDcgQEAKICNkZWZpbmUgQk5YMl9EUlZfTVNHX0RBVEFfV0FJVDEJCQkgMHgwMDAyMDAwMAogI2RlZmluZSBCTlgyX0RSVl9NU0dfREFUQV9XQUlUMgkJCSAweDAwMDMwMDAwCiAjZGVmaW5lIEJOWDJfRFJWX01TR19EQVRBX1dBSVQzCQkJIDB4MDAwNDAwMDAKLSAgICAgICAgCisKICNkZWZpbmUgQk5YMl9EUlZfTVNHX1NFUQkJCSAweDAwMDBmZmZmCiAKICNkZWZpbmUgQk5YMl9GV19NQgkJCQkweDAwMDAwMDA4CkBAIC00MTkxLDM4ICs0MTg5LDM4IEBACiAjZGVmaW5lIEJOWDJfRldfTVNHX1NUQVRVU19GQUlMVVJFCQkgMHgwMGZmMDAwMAogCiAjZGVmaW5lIEJOWDJfTElOS19TVEFUVVMJCQkweDAwMDAwMDBjCi0jZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfSU5JVF9WQUxVRQkJIDB4ZmZmZmZmZmYgCi0jZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfTElOS19VUAkJIDB4MSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19MSU5LX0RPV04JCSAweDAgCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfSU5JVF9WQUxVRQkJIDB4ZmZmZmZmZmYKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19MSU5LX1VQCQkgMHgxCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfTElOS19ET1dOCQkgMHgwCiAjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfU1BFRURfTUFTSwkJIDB4MWUKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19BTl9JTkNPTVBMRVRFCQkgKDA8PDEpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTXzEwSEFMRgkJCSAoMTw8MSkgCi0jZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfMTBGVUxMCQkJICgyPDwxKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18xMDBIQUxGCQkgKDM8PDEpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTXzEwMEJBU0VfVDQJCSAoNDw8MSkgCi0jZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfMTAwRlVMTAkJICg1PDwxKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18xMDAwSEFMRgkJICg2PDwxKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18xMDAwRlVMTAkJICg3PDwxKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18yNTAwSEFMRgkJICg4PDwxKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18yNTAwRlVMTAkJICg5PDwxKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19BTl9FTkFCTEVECQkgKDE8PDUpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX0FOX0NPTVBMRVRFCQkgKDE8PDYpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUkFMTEVMX0RFVAkJICgxPDw3KSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19SRVNFUlZFRAkJICgxPDw4KSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FEXzEwMDBGVUxMCSAoMTw8OSkgCi0jZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfUEFSVE5FUl9BRF8xMDAwSEFMRgkgKDE8PDEwKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FEXzEwMEJUNAkgKDE8PDExKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FEXzEwMEZVTEwJICgxPDwxMikgCi0jZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfUEFSVE5FUl9BRF8xMDBIQUxGCSAoMTw8MTMpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTBGVUxMCSAoMTw8MTQpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTBIQUxGCSAoMTw8MTUpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1RYX0ZDX0VOQUJMRUQJCSAoMTw8MTYpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1JYX0ZDX0VOQUJMRUQJCSAoMTw8MTcpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfU1lNX1BBVVNFX0NBUAkgKDE8PDE4KSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FTWU1fUEFVU0VfQ0FQCSAoMTw8MTkpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1NFUkRFU19MSU5LCQkgKDE8PDIwKSAKLSNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FEXzI1MDBGVUxMCSAoMTw8MjEpIAotI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMjUwMEhBTEYJICgxPDwyMikgCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfQU5fSU5DT01QTEVURQkJICgwPDwxKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTXzEwSEFMRgkJCSAoMTw8MSkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18xMEZVTEwJCQkgKDI8PDEpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfMTAwSEFMRgkJICgzPDwxKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTXzEwMEJBU0VfVDQJCSAoNDw8MSkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18xMDBGVUxMCQkgKDU8PDEpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfMTAwMEhBTEYJCSAoNjw8MSkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU18xMDAwRlVMTAkJICg3PDwxKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTXzI1MDBIQUxGCQkgKDg8PDEpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfMjUwMEZVTEwJCSAoOTw8MSkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19BTl9FTkFCTEVECQkgKDE8PDUpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfQU5fQ09NUExFVEUJCSAoMTw8NikKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJBTExFTF9ERVQJCSAoMTw8NykKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19SRVNFUlZFRAkJICgxPDw4KQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTAwMEZVTEwJICgxPDw5KQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTAwMEhBTEYJICgxPDwxMCkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FEXzEwMEJUNAkgKDE8PDExKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTAwRlVMTAkgKDE8PDEyKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTAwSEFMRgkgKDE8PDEzKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMTBGVUxMCSAoMTw8MTQpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfUEFSVE5FUl9BRF8xMEhBTEYJICgxPDwxNSkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19UWF9GQ19FTkFCTEVECQkgKDE8PDE2KQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1JYX0ZDX0VOQUJMRUQJCSAoMTw8MTcpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfUEFSVE5FUl9TWU1fUEFVU0VfQ0FQCSAoMTw8MTgpCisjZGVmaW5lIEJOWDJfTElOS19TVEFUVVNfUEFSVE5FUl9BU1lNX1BBVVNFX0NBUAkgKDE8PDE5KQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1NFUkRFU19MSU5LCQkgKDE8PDIwKQorI2RlZmluZSBCTlgyX0xJTktfU1RBVFVTX1BBUlRORVJfQURfMjUwMEZVTEwJICgxPDwyMSkKKyNkZWZpbmUgQk5YMl9MSU5LX1NUQVRVU19QQVJUTkVSX0FEXzI1MDBIQUxGCSAoMTw8MjIpCiAKICNkZWZpbmUgQk5YMl9EUlZfUFVMU0VfTUIJCQkweDAwMDAwMDEwCiAjZGVmaW5lIEJOWDJfRFJWX1BVTFNFX1NFUV9NQVNLCQkJIDB4MDAwMDdmZmYKQEAgLTQ0MDIsNyArNDQwMCw3IEBACiAJCQkJCSAgMHgwMDAyMDAwMCkKICNkZWZpbmUgQk5YMl9CQ19TVEFURV9SRVNFVF9UWVBFX1ZBVVgJIChCTlgyX0JDX1NUQVRFX1JFU0VUX1RZUEVfU0lHIHwgXAogCQkJCQkgIDB4MDAwMzAwMDApCi0jZGVmaW5lIEJOWDJfQkNfU1RBVEVfUkVTRVRfVFlQRV9EUlZfTUFTSwkgRFJWX01TR19DT0RFICAgICAgICAgCisjZGVmaW5lIEJOWDJfQkNfU1RBVEVfUkVTRVRfVFlQRV9EUlZfTUFTSwkgRFJWX01TR19DT0RFCiAjZGVmaW5lIEJOWDJfQkNfU1RBVEVfUkVTRVRfVFlQRV9EUlZfUkVTRVQgKEJOWDJfQkNfU1RBVEVfUkVTRVRfVFlQRV9TSUcgfCBcCiAJCQkJCSAgICBEUlZfTVNHX0NPREVfUkVTRVQpCiAjZGVmaW5lIEJOWDJfQkNfU1RBVEVfUkVTRVRfVFlQRV9EUlZfVU5MT0FEIChCTlgyX0JDX1NUQVRFX1JFU0VUX1RZUEVfU0lHIHwgXApAQCAtNDQ0NSw3ICs0NDQzLDcgQEAKICNkZWZpbmUgQk5YMl9CQ19TVEFURV9FUlJfRFJWX0RFQUQJCSAoQk5YMl9CQ19TVEFURV9TSUdOIHwgMHgwNTAwKQogI2RlZmluZSBCTlgyX0JDX1NUQVRFX0VSUl9OT19SWFAJCSAoQk5YMl9CQ19TVEFURV9TSUdOIHwgMHgwNjAwKQogI2RlZmluZSBCTlgyX0JDX1NUQVRFX0VSUl9UT09fTUFOWV9SQlVGCQkgKEJOWDJfQkNfU1RBVEVfU0lHTiB8IDB4MDcwMCkKLQkKKwogI2RlZmluZSBCTlgyX0JDX1NUQVRFX0RFQlVHX0NNRAkJCTB4MWRjCiAjZGVmaW5lIEJOWDJfQkNfU1RBVEVfQkNfREJHX0NNRF9TSUdOQVRVUkUJIDB4NDI0NDAwMDAKICNkZWZpbmUgQk5YMl9CQ19TVEFURV9CQ19EQkdfQ01EX1NJR05BVFVSRV9NQVNLCSAweGZmZmYwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA4Yjk1MTIzLi44NTBhYWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTQxMzAsNyArNDEzMCw3IEBACiAJc25wcmludGYoZHJ2aW5mby0+ZndfdmVyc2lvbiwgMzIsICIlZCIsIEJPTkRfQUJJX1ZFUlNJT04pOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJvbmRfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJvbmRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF90eF9jc3VtCQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCiAJLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAogCS5nZXRfdWZvCQk9IGV0aHRvb2xfb3BfZ2V0X3VmbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JzZF9jb21wLmMgYi9kcml2ZXJzL25ldC9ic2RfY29tcC5jCmluZGV4IGZiNDA5OGUuLmJhZTFkZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JzZF9jb21wLmMKKysrIGIvZHJpdmVycy9uZXQvYnNkX2NvbXAuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBVcGRhdGU6IFRoZSBCZXJrZWxleSBjb3B5cmlnaHQgd2FzIGNoYW5nZWQsIGFuZCB0aGUgY2hhbmdlIAorICogVXBkYXRlOiBUaGUgQmVya2VsZXkgY29weXJpZ2h0IHdhcyBjaGFuZ2VkLCBhbmQgdGhlIGNoYW5nZQogICogaXMgcmV0cm9hY3RpdmUgdG8gYWxsICJ0cnVlIiBCU0Qgc29mdHdhcmUgKGllIGV2ZXJ5dGhpbmcKICAqIGZyb20gVUNCIGFzIG9wcG9zZWQgdG8gb3RoZXIgcGVvcGxlcyBjb2RlIHRoYXQganVzdCBjYXJyaWVkCiAgKiB0aGUgc2FtZSBsaWNlbnNlKS4gVGhlIG5ldyBjb3B5cmlnaHQgZG9lc24ndCBjbGFzaCB3aXRoIHRoZQpAQCAtMjU2LDkgKzI1Niw5IEBACiAJICAgIGRiLT5pbl9jb3VudCAgLT0gKGRiLT5pbl9jb3VudCAgPj4gMik7CiAJICAgIGRiLT5ieXRlc19vdXQgLT0gKGRiLT5ieXRlc19vdXQgPj4gMik7CiAJICB9Ci0JCisKIAlkYi0+Y2hlY2twb2ludCA9IGRiLT5pbl9jb3VudCArIENIRUNLX0dBUDsKLQkKKwogCWlmIChkYi0+bWF4X2VudCA+PSBkYi0+bWF4bWF4Y29kZSkKIAkgIHsKIAkgICAgLyogUmVzZXQgdGhlIGRpY3Rpb25hcnkgb25seSBpZiB0aGUgcmF0aW8gaXMgd29yc2UsCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkgICAgICB7CiAJCW5ld19yYXRpbyAvPSBkYi0+Ynl0ZXNfb3V0OwogCSAgICAgIH0KLQkgICAgCisKIAkgICAgaWYgKG5ld19yYXRpbyA8IGRiLT5yYXRpbyB8fCBuZXdfcmF0aW8gPCAxICogUkFUSU9fU0NBTEUpCiAJICAgICAgewogCQlic2RfY2xlYXIgKGRiKTsKQEAgLTI5Myw3ICsyOTMsNyBAQAogc3RhdGljIHZvaWQgYnNkX2NvbXBfc3RhdHMgKHZvaWQgKnN0YXRlLCBzdHJ1Y3QgY29tcHN0YXQgKnN0YXRzKQogICB7CiAgICAgc3RydWN0IGJzZF9kYiAqZGIgPSAoc3RydWN0IGJzZF9kYiAqKSBzdGF0ZTsKLSAgICAKKwogICAgIHN0YXRzLT51bmNfYnl0ZXMgICAgPSBkYi0+dW5jb21wX2J5dGVzOwogICAgIHN0YXRzLT51bmNfcGFja2V0cyAgPSBkYi0+dW5jb21wX2NvdW50OwogICAgIHN0YXRzLT5jb21wX2J5dGVzICAgPSBkYi0+Y29tcF9ieXRlczsKQEAgLTMyNSw3ICszMjUsNyBAQAogc3RhdGljIHZvaWQgYnNkX2ZyZWUgKHZvaWQgKnN0YXRlKQogewogCXN0cnVjdCBic2RfZGIgKmRiID0gc3RhdGU7Ci0gICAgCisKIAlpZiAoIWRiKQogCQlyZXR1cm47CiAKQEAgLTQ2OCw3ICs0NjgsNyBAQAogICB7CiAgICAgc3RydWN0IGJzZF9kYiAqZGIgPSBzdGF0ZTsKICAgICBpbnQgaW5keDsKLSAgICAKKwogICAgIGlmICgob3B0X2xlbiAhPSAzKSB8fCAob3B0aW9uc1swXSAhPSBDSV9CU0RfQ09NUFJFU1MpIHx8IChvcHRpb25zWzFdICE9IDMpCiAJfHwgKEJTRF9WRVJTSU9OKG9wdGlvbnNbMl0pICE9IEJTRF9DVVJSRU5UX1ZFUlNJT04pCiAJfHwgKEJTRF9OQklUUyhvcHRpb25zWzJdKSAhPSBkYi0+bWF4Yml0cykKQEAgLTUwMCw5ICs1MDAsOSBAQAogICAgIGlmIChkZWJ1ZykKICNlbmRpZgogICAgICAgZGItPmRlYnVnID0gMTsKLSAgICAKKwogICAgIGJzZF9yZXNldChkYik7Ci0gICAgCisKICAgICByZXR1cm4gMTsKICAgfQogCkBAIC02NjAsNyArNjYwLDcgQEAKIAlmY29kZSA9IEJTRF9LRVkgIChlbnQsIGMpOwogCWh2YWwgID0gQlNEX0hBU0ggKGVudCwgYywgaHNoaWZ0KTsKIAlkaWN0cCA9IGRpY3RfcHRyIChkYiwgaHZhbCk7Ci0JCisKIAkvKiBWYWxpZGF0ZSBhbmQgdGhlbiBjaGVjayB0aGUgZW50cnkuICovCiAJaWYgKGRpY3RwLT5jb2RlbTEgPj0gbWF4X2VudCkKIAkgIHsKQEAgLTY3Miw3ICs2NzIsNyBAQAogCSAgICBlbnQgPSBkaWN0cC0+Y29kZW0xICsgMTsKIAkgICAgY29udGludWU7CS8qIGZvdW5kIChwcmVmaXgsc3VmZml4KSAqLwogCSAgfQotCQorCiAJLyogY29udGludWUgcHJvYmluZyB1bnRpbCBhIG1hdGNoIG9yIGludmFsaWQgZW50cnkgKi8KIAlkaXNwID0gKGh2YWwgPT0gMCkgPyAxIDogaHZhbDsKIApAQCAtNjkzLDEwICs2OTMsMTAgQEAKIAogCWVudCA9IGRpY3RwLT5jb2RlbTEgKyAxOwkvKiBmaW5hbGx5IGZvdW5kIChwcmVmaXgsc3VmZml4KSAqLwogCWNvbnRpbnVlOwotCQorCiBub21hdGNoOgogCU9VVFBVVChlbnQpOwkJLyogb3V0cHV0IHRoZSBwcmVmaXggKi8KLQkKKwogCS8qIGNvZGUgLT4gaGFzaHRhYmxlICovCiAJaWYgKG1heF9lbnQgPCBkYi0+bWF4bWF4Y29kZSkKIAkgIHsKQEAgLTcxMCw3ICs3MTAsNyBAQAogCQlkYi0+bl9iaXRzID0gKytuX2JpdHM7CiAJCW14Y29kZSAgICAgPSBNQVhDT0RFIChuX2JpdHMpOwogCSAgICAgIH0KLQkgICAgCisKIAkgICAgLyogSW52YWxpZGF0ZSBvbGQgaGFzaCB0YWJsZSBlbnRyeSB1c2luZwogCSAgICAgKiB0aGlzIGNvZGUsIGFuZCB0aGVuIHRha2UgaXQgb3Zlci4KIAkgICAgICovCkBAIC03MzgsNyArNzM4LDcgQEAKIAkgIH0KIAllbnQgPSBjOwogICAgICAgfQotICAgIAorCiAgICAgT1VUUFVUKGVudCk7CQkvKiBvdXRwdXQgdGhlIGxhc3QgY29kZSAqLwogCiAgICAgZGItPmJ5dGVzX291dCAgICArPSBvbGVuIC0gUFBQX0hEUkxFTiAtIEJTRF9PVkhEOwpAQCAtNzYwLDcgKzc2MCw3IEBACiAgICAgICB7CiAJT1VUUFVUIChDTEVBUik7CiAgICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIFBhZCBkcmliYmxlIGJpdHMgb2YgbGFzdCBjb2RlIHdpdGggb25lcy4KICAgICAgKiBEbyBub3QgZW1pdCBhIGNvbXBsZXRlbHkgdXNlbGVzcyBieXRlIG9mIG9uZXMuCkBAIC03NzAsNyArNzcwLDcgQEAKICAgICAgIHsKIAlQVVRCWVRFKChhY2NtIHwgKDB4ZmYgPDwgKGJpdG5vLTgpKSkgPj4gMjQpOwogICAgICAgfQotICAgIAorCiAgICAgLyoKICAgICAgKiBJbmNyZWFzZSBjb2RlIHNpemUgaWYgd2Ugd291bGQgaGF2ZSB3aXRob3V0IHRoZSBwYWNrZXQKICAgICAgKiBib3VuZGFyeSBiZWNhdXNlIHRoZSBkZWNvbXByZXNzb3Igd2lsbCBkbyBzby4KQEAgLTg1Niw3ICs4NTYsNyBAQAogICAgIGJpdG5vICAgID0gMzI7CQkvKiAxc3QgdmFsaWQgYml0IGluIGFjY20gKi8KICAgICBuX2JpdHMgICA9IGRiLT5uX2JpdHM7CiAgICAgdGd0Yml0bm8gPSAzMiAtIG5fYml0czsJLyogYml0bm8gd2hlbiB3ZSBoYXZlIGEgY29kZSAqLwotICAgIAorCiAgICAgLyoKICAgICAgKiBTYXZlIHRoZSBhZGRyZXNzL2NvbnRyb2wgZnJvbSB0aGUgUFBQIGhlYWRlcgogICAgICAqIGFuZCB0aGVuIGdldCB0aGUgc2VxdWVuY2UgbnVtYmVyLgpAQCAtODY5LDcgKzg2OSw3IEBACiAKICAgICBpYnVmICs9IChQUFBfSERSTEVOICsgMik7CiAgICAgaWxlbiAgPSBpc2l6ZSAtIChQUFBfSERSTEVOICsgMik7Ci0gICAgCisKICAgICAvKgogICAgICAqIENoZWNrIHRoZSBzZXF1ZW5jZSBudW1iZXIgYW5kIGdpdmUgdXAgaWYgaXQgZGlmZmVycyBmcm9tCiAgICAgICogdGhlIHZhbHVlIHdlJ3JlIGV4cGVjdGluZy4KQEAgLTg5Nyw3ICs4OTcsNyBAQAogICAgICp3cHRyKysgPSBhZHJzOwogICAgICp3cHRyKysgPSBjdHJsOwogICAgICp3cHRyKysgPSAwOwotICAgIAorCiAgICAgb2xkY29kZSA9IENMRUFSOwogICAgIGV4cGxlbiAgPSAzOwogCkBAIC05MzQsNyArOTM0LDcgQEAKIAkvKgogCSAqIFRoZSBkaWN0aW9uYXJ5IG11c3Qgb25seSBiZSBjbGVhcmVkIGF0IHRoZSBlbmQgb2YgYSBwYWNrZXQuCiAJICovCi0JCisKIAlpZiAoaW5jb2RlID09IENMRUFSKQogCSAgewogCSAgICBpZiAoaWxlbiA+IDApCkBAIC05NDUsNyArOTQ1LDcgQEAKIAkJICB9CiAJCXJldHVybiBERUNPTVBfRkFUQUxFUlJPUjsJLyogcHJvYmFibHkgYSBidWcgKi8KIAkgICAgICB9Ci0JICAgIAorCiAJICAgIGJzZF9jbGVhcihkYik7CiAJICAgIGJyZWFrOwogCSAgfQpAQCAtOTYyLDcgKzk2Miw3IEBACiAJICAgICAgfQogCSAgICByZXR1cm4gREVDT01QX0ZBVEFMRVJST1I7CS8qIHByb2JhYmx5IGEgYnVnICovCiAJICB9Ci0JCisKIAkvKiBTcGVjaWFsIGNhc2UgZm9yIEt3S3dLIHN0cmluZy4gKi8KIAlpZiAoaW5jb2RlID4gbWF4X2VudCkKIAkgIHsKQEAgLTk3NCw3ICs5NzQsNyBAQAogCSAgICBmaW5jaGFyID0gaW5jb2RlOwogCSAgICBleHRyYSAgID0gMDsKIAkgIH0KLQkKKwogCWNvZGVsZW4gPSAqKGxlbnNfcHRyIChkYiwgZmluY2hhcikpOwogCWV4cGxlbiArPSBjb2RlbGVuICsgZXh0cmE7CiAJaWYgKGV4cGxlbiA+IG9zaXplKQpAQCAtOTg5LDcgKzk4OSw3IEBACiAJICAgICAgfQogCSAgICByZXR1cm4gREVDT01QX0ZBVEFMRVJST1I7CiAJICB9Ci0JCisKIAkvKgogCSAqIERlY29kZSB0aGlzIGNvZGUgYW5kIGluc3RhbGwgaXQgaW4gdGhlIGRlY29tcHJlc3NlZCBidWZmZXIuCiAJICovCkBAIC05OTksNyArOTk5LDcgQEAKIAl3aGlsZSAoZmluY2hhciA+IExBU1QpCiAJICB7CiAJICAgIHN0cnVjdCBic2RfZGljdCAqZGljdHAyID0gZGljdF9wdHIgKGRiLCBmaW5jaGFyKTsKLQkgICAgCisKIAkgICAgZGljdHAgPSBkaWN0X3B0ciAoZGIsIGRpY3RwMi0+Y3B0cik7CiAjaWZkZWYgREVCVUcKIAkgICAgaWYgKC0tY29kZWxlbiA8PSAwIHx8IGRpY3RwLT5jb2RlbTEgIT0gZmluY2hhci0xKQpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKIAkgICAgZmluY2hhciA9IGRpY3RwLT5mLmhzLnByZWZpeDsKIAkgIH0KIAkqLS1wID0gZmluY2hhcjsKLQkKKwogI2lmZGVmIERFQlVHCiAJaWYgKC0tY29kZWxlbiAhPSAwKQogCSAgewpAQCAtMTAzNywxMiArMTAzNywxMiBAQAogCQkgICBkYi0+dW5pdCwgY29kZWxlbiwgaW5jb2RlLCBtYXhfZW50KTsKIAkgIH0KICNlbmRpZgotCQorCiAJaWYgKGV4dHJhKQkJLyogdGhlIEt3S3dLIGNhc2UgYWdhaW4gKi8KIAkgIHsKIAkgICAgKndwdHIrKyA9IGZpbmNoYXI7CiAJICB9Ci0JCisKIAkvKgogCSAqIElmIG5vdCBmaXJzdCBjb2RlIGluIGEgcGFja2V0LCBhbmQKIAkgKiBpZiBub3Qgb3V0IG9mIGNvZGUgc3BhY2UsIHRoZW4gYWxsb2NhdGUgYSBuZXcgY29kZS4KQEAgLTEwNTcsMTEgKzEwNTcsMTEgQEAKIAkgICAgdW5zaWduZWQgc2hvcnQgICpsZW5zMSwgICpsZW5zMjsKIAkgICAgdW5zaWduZWQgbG9uZyBmY29kZTsKIAkgICAgaW50IGh2YWwsIGRpc3AsIGluZHg7Ci0JICAgIAorCiAJICAgIGZjb2RlID0gQlNEX0tFWShvbGRjb2RlLGZpbmNoYXIpOwogCSAgICBodmFsICA9IEJTRF9IQVNIKG9sZGNvZGUsZmluY2hhcixkYi0+aHNoaWZ0KTsKIAkgICAgZGljdHAgPSBkaWN0X3B0ciAoZGIsIGh2YWwpOwotCSAgICAKKwogCSAgICAvKiBsb29rIGZvciBhIGZyZWUgaGFzaCB0YWJsZSBlbnRyeSAqLwogCSAgICBpZiAoZGljdHAtPmNvZGVtMSA8IG1heF9lbnQpCiAJICAgICAgewpAQCAtMTA3Nyw3ICsxMDc3LDcgQEAKIAkJICB9CiAJCXdoaWxlIChkaWN0cC0+Y29kZW0xIDwgbWF4X2VudCk7CiAJICAgICAgfQotCSAgICAKKwogCSAgICAvKgogCSAgICAgKiBJbnZhbGlkYXRlIHByZXZpb3VzIGhhc2ggdGFibGUgZW50cnkKIAkgICAgICogYXNzaWduZWQgdGhpcyBjb2RlLCBhbmQgdGhlbiB0YWtlIGl0IG92ZXIKQEAgLTExMDEsNyArMTEwMSw3IEBACiAJICAgIGxlbnMxICA9IGxlbnNfcHRyIChkYiwgbWF4X2VudCk7CiAJICAgIGxlbnMyICA9IGxlbnNfcHRyIChkYiwgb2xkY29kZSk7CiAJICAgICpsZW5zMSA9ICpsZW5zMiArIDE7Ci0JICAgIAorCiAJICAgIC8qIEV4cGFuZCBjb2RlIHNpemUgaWYgbmVlZGVkLiAqLwogCSAgICBpZiAobWF4X2VudCA+PSBNQVhDT0RFKG5fYml0cykgJiYgbWF4X2VudCA8IGRiLT5tYXhtYXhjb2RlKQogCSAgICAgIHsKQEAgLTExMjcsNyArMTEyNyw3IEBACiAgICAgICB9CiAgICAgcmV0dXJuIGV4cGxlbjsKICAgfQotICAgICAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFRhYmxlIG9mIGFkZHJlc3NlcyBmb3IgdGhlIEJTRCBjb21wcmVzc2lvbiBtb2R1bGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jIGIvZHJpdmVycy9uZXQvY2Fzc2luaS5jCmluZGV4IGEzMTU0NGMuLjI3NTA1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYworKysgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAqICAtLSBvbiBwYWdlIHJlY2xhbWF0aW9uLCB0aGUgZHJpdmVyIHN3YXBzIHRoZSBwYWdlIHdpdGggYSBzcGFyZSBwYWdlLgogICogICAgIGlmIHRoYXQgcGFnZSBpcyBzdGlsbCBpbiB1c2UsIGl0IGZyZWVzIGl0cyByZWZlcmVuY2UgdG8gdGhhdCBwYWdlLAogICogICAgIGFuZCBhbGxvY2F0ZXMgYSBuZXcgcGFnZSBmb3IgdXNlLiBvdGhlcndpc2UsIGl0IGp1c3QgcmVjeWNsZXMgdGhlCi0gKiAgICAgdGhlIHBhZ2UuIAorICogICAgIHRoZSBwYWdlLgogICoKICAqIE5PVEU6IGNhc3NpbmkgY2FuIHBhcnNlIHRoZSBoZWFkZXIuIGhvd2V2ZXIsIGl0J3Mgbm90IHdvcnRoIGl0CiAgKiAgICAgICBhcyBsb25nIGFzIHRoZSBuZXR3b3JrIHN0YWNrIHJlcXVpcmVzIGEgaGVhZGVyIGNvcHkuCkBAIC02MCwxMCArNjAsMTAgQEAKICAqIGludGVycnVwdHMsIGJ1dCB0aGUgSU5UIyBhc3NpZ25tZW50IG5lZWRzIHRvIGJlIHNldCB1cCBwcm9wZXJseSBieQogICogdGhlIEJJT1MgYW5kIGNvbnZleWVkIHRvIHRoZSBkcml2ZXIuIFBDSSBCSU9TZXMgZG9uJ3Qga25vdyBob3cgdG8gZG8KICAqIHRoYXQuIGFsc28sIHRoZSB0d28gZGVzY3JpcHRvciByaW5ncyBhcmUgZGVzaWduZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbgotICogZW5jcnlwdGVkIGFuZCBub24tZW5jcnlwdGVkIHBhY2tldHMsIGJ1dCB3ZSB1c2UgdGhlbSBmb3IgYnVmZmVyaW5nIAorICogZW5jcnlwdGVkIGFuZCBub24tZW5jcnlwdGVkIHBhY2tldHMsIGJ1dCB3ZSB1c2UgdGhlbSBmb3IgYnVmZmVyaW5nCiAgKiBpbnN0ZWFkLgogICoKLSAqIGJ5IGRlZmF1bHQsIHRoZSBzZWxlY3RpdmUgY2xlYXIgbWFzayBpcyBzZXQgdXAgdG8gcHJvY2VzcyByeCBwYWNrZXRzLiAgCisgKiBieSBkZWZhdWx0LCB0aGUgc2VsZWN0aXZlIGNsZWFyIG1hc2sgaXMgc2V0IHVwIHRvIHByb2Nlc3MgcnggcGFja2V0cy4KICAqLwogCiAKQEAgLTExMiw3ICsxMTIsNyBAQAogI2VuZGlmCiAKIC8qIHNlbGVjdCB3aGljaCBmaXJtd2FyZSB0byB1c2UgKi8KLSNkZWZpbmUgVVNFX0hQX1dPUktBUk9VTkQgICAgIAorI2RlZmluZSBVU0VfSFBfV09SS0FST1VORAogI2RlZmluZSBIUF9XT1JLQVJPVU5EX0RFRkFVTFQgLyogc2VsZWN0IHdoaWNoIGZpcm13YXJlIHRvIHVzZSBhcyBkZWZhdWx0ICovCiAjZGVmaW5lIENBU19IUF9BTFRfRklSTVdBUkUgICBjYXNfcHJvZ19udWxsIC8qIGFsdGVybmF0ZSBmaXJtd2FyZSAqLwogCkBAIC0xNjgsNyArMTY4LDcgQEAKICNkZWZpbmUgU1RPUF9UUklFU19QSFkgMTAwMAogI2RlZmluZSBTVE9QX1RSSUVTICAgICA1MDAwCiAKLS8qIHNwZWNpZnkgYSBtaW5pbXVtIGZyYW1lIHNpemUgdG8gZGVhbCB3aXRoIHNvbWUgZmlmbyBpc3N1ZXMgCisvKiBzcGVjaWZ5IGEgbWluaW11bSBmcmFtZSBzaXplIHRvIGRlYWwgd2l0aCBzb21lIGZpZm8gaXNzdWVzCiAgKiBtYXggbXR1ID09IDIgKiBwYWdlIHNpemUgLSBldGhlcm5ldCBoZWFkZXIgLSA2NCAtIHN3aXZlbCA9CiAgKiAgICAgICAgICAgIDIgKiBwYWdlX3NpemUgLSAweDUwCiAgKi8KQEAgLTIwNyw3ICsyMDcsNyBAQAogICogYmVpbmcgY29uZnVzZWQgYW5kIG5ldmVyIHNob3dpbmcgYSBsaW5rIHN0YXR1cyBvZiAidXAuIgogICovCiAjZGVmaW5lIERFRkFVTFRfTElOS0RPV05fVElNRU9VVCA1Ci0vKiAKKy8qCiAgKiBWYWx1ZSBpbiBzZWNvbmRzLCBmb3IgdXNlciBpbnB1dC4KICAqLwogc3RhdGljIGludCBsaW5rZG93bl90aW1lb3V0ID0gREVGQVVMVF9MSU5LRE9XTl9USU1FT1VUOwpAQCAtMjQ5LDcgKzI0OSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTl9UWF9SSU5HUzsgaSsrKSAgCisJZm9yIChpID0gMDsgaSA8IE5fVFhfUklOR1M7IGkrKykKIAkJc3Bpbl9sb2NrKCZjcC0+dHhfbG9ja1tpXSk7CiB9CiAKQEAgLTI3OCw4ICsyNzgsOCBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gTl9UWF9SSU5HUzsgaSA+IDA7IGktLSkgIAotCQlzcGluX3VubG9jaygmY3AtPnR4X2xvY2tbaSAtIDFdKTsgIAorCWZvciAoaSA9IE5fVFhfUklOR1M7IGkgPiAwOyBpLS0pCisJCXNwaW5fdW5sb2NrKCZjcC0+dHhfbG9ja1tpIC0gMV0pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY2FzX3VubG9ja19hbGwoc3RydWN0IGNhcyAqY3ApCkBAIC0zMTYsNyArMzE2LDcgQEAKICNpZmRlZiBVU0VfUENJX0lOVEQKIAkJY2FzZSAzOgogI2VuZGlmCi0JCQl3cml0ZWwoSU5UUk5fTUFTS19DTEVBUl9BTEwgfCBJTlRSTl9NQVNLX1JYX0VOLCAKKwkJCXdyaXRlbChJTlRSTl9NQVNLX0NMRUFSX0FMTCB8IElOVFJOX01BU0tfUlhfRU4sCiAJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfUExVU19JTlRSTl9NQVNLKHJpbmcpKTsKIAkJCWJyZWFrOwogI2VuZGlmCkBAIC00MTUsNyArNDE1LDcgQEAKIAlpZiAoKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19FTlRST1BZX0RFVikgPT0gMCkKIAkJcmV0dXJuOwogCi0Jd3JpdGVsKEJJTV9MT0NBTF9ERVZfUEFEIHwgQklNX0xPQ0FMX0RFVl9QUk9NIHwgQklNX0xPQ0FMX0RFVl9FWFQsIAorCXdyaXRlbChCSU1fTE9DQUxfREVWX1BBRCB8IEJJTV9MT0NBTF9ERVZfUFJPTSB8IEJJTV9MT0NBTF9ERVZfRVhULAogCSAgICAgICBjcC0+cmVncyArIFJFR19CSU1fTE9DQUxfREVWX0VOKTsKIAl3cml0ZWIoRU5UUk9QWV9SRVNFVF9TVENfTU9ERSwgY3AtPnJlZ3MgKyBSRUdfRU5UUk9QWV9SRVNFVCk7CiAJd3JpdGViKDB4NTUsIGNwLT5yZWdzICsgUkVHX0VOVFJPUFlfUkFORF9SRUcpOwpAQCAtNDI2LDcgKzQyNiw3IEBACiAjZW5kaWYKIH0KIAotLyogYWNjZXNzIHRvIHRoZSBwaHkuIHRoZSBmb2xsb3dpbmcgYXNzdW1lcyB0aGF0IHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBNSUYgdG8gCisvKiBhY2Nlc3MgdG8gdGhlIHBoeS4gdGhlIGZvbGxvd2luZyBhc3N1bWVzIHRoYXQgd2UndmUgaW5pdGlhbGl6ZWQgdGhlIE1JRiB0bwogICogYmUgaW4gZnJhbWUgcmF0aGVyIHRoYW4gYml0LWJhbmcgbW9kZQogICovCiBzdGF0aWMgdTE2IGNhc19waHlfcmVhZChzdHJ1Y3QgY2FzICpjcCwgaW50IHJlZykKQEAgLTQzOSw3ICs0MzksNyBAQAogCWNtZCB8PSBDQVNfQkFTRShNSUZfRlJBTUVfUkVHX0FERFIsIHJlZyk7CiAJY21kIHw9IE1JRl9GUkFNRV9UVVJOX0FST1VORF9NU0I7CiAJd3JpdGVsKGNtZCwgY3AtPnJlZ3MgKyBSRUdfTUlGX0ZSQU1FKTsKLQkKKwogCS8qIHBvbGwgZm9yIGNvbXBsZXRpb24gKi8KIAl3aGlsZSAobGltaXQtLSA+IDApIHsKIAkJdWRlbGF5KDEwKTsKQEAgLTQ2MSw3ICs0NjEsNyBAQAogCWNtZCB8PSBNSUZfRlJBTUVfVFVSTl9BUk9VTkRfTVNCOwogCWNtZCB8PSB2YWwgJiBNSUZfRlJBTUVfREFUQV9NQVNLOwogCXdyaXRlbChjbWQsIGNwLT5yZWdzICsgUkVHX01JRl9GUkFNRSk7Ci0JCisKIAkvKiBwb2xsIGZvciBjb21wbGV0aW9uICovCiAJd2hpbGUgKGxpbWl0LS0gPiAwKSB7CiAJCXVkZWxheSgxMCk7CkBAIC00NzQsNyArNDc0LDcgQEAKIAogc3RhdGljIHZvaWQgY2FzX3BoeV9wb3dlcnVwKHN0cnVjdCBjYXMgKmNwKQogewotCXUxNiBjdGwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsJCisJdTE2IGN0bCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNQ1IpOwogCiAJaWYgKChjdGwgJiBCTUNSX1BET1dOKSA9PSAwKQogCQlyZXR1cm47CkBAIC00ODQsNyArNDg0LDcgQEAKIAogc3RhdGljIHZvaWQgY2FzX3BoeV9wb3dlcmRvd24oc3RydWN0IGNhcyAqY3ApCiB7Ci0JdTE2IGN0bCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNQ1IpOwkKKwl1MTYgY3RsID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfQk1DUik7CiAKIAlpZiAoY3RsICYgQk1DUl9QRE9XTikKIAkJcmV0dXJuOwpAQCAtNDk1LDcgKzQ5NSw3IEBACiAvKiBjcC0+bG9jayBoZWxkLiBub3RlOiB0aGUgbGFzdCBwdXRfcGFnZSB3aWxsIGZyZWUgdGhlIGJ1ZmZlciAqLwogc3RhdGljIGludCBjYXNfcGFnZV9mcmVlKHN0cnVjdCBjYXMgKmNwLCBjYXNfcGFnZV90ICpwYWdlKQogewotCXBjaV91bm1hcF9wYWdlKGNwLT5wZGV2LCBwYWdlLT5kbWFfYWRkciwgY3AtPnBhZ2Vfc2l6ZSwgCisJcGNpX3VubWFwX3BhZ2UoY3AtPnBkZXYsIHBhZ2UtPmRtYV9hZGRyLCBjcC0+cGFnZV9zaXplLAogCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAljYXNfYnVmZmVyX2RlYyhwYWdlKTsKIAlfX2ZyZWVfcGFnZXMocGFnZS0+YnVmZmVyLCBjcC0+cGFnZV9vcmRlcik7CkBAIC01MDcsNyArNTA3LDcgQEAKICNkZWZpbmUgUlhfVVNFRF9BREQoeCwgeSkgICAgICAgKCh4KS0+dXNlZCArPSAoeSkpCiAjZGVmaW5lIFJYX1VTRURfU0VUKHgsIHkpICAgICAgICgoeCktPnVzZWQgID0gKHkpKQogI2Vsc2UKLSNkZWZpbmUgUlhfVVNFRF9BREQoeCwgeSkgCisjZGVmaW5lIFJYX1VTRURfQUREKHgsIHkpCiAjZGVmaW5lIFJYX1VTRURfU0VUKHgsIHkpCiAjZW5kaWYKIApAQCAtNjAyLDcgKzYwMiw3IEBACiAJbGlzdF9zcGxpY2UoJmNwLT5yeF9pbnVzZV9saXN0LCAmbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNwLT5yeF9pbnVzZV9saXN0KTsKIAlzcGluX3VubG9jaygmY3AtPnJ4X2ludXNlX2xvY2spOwotCQorCiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVsZW0sIHRtcCwgJmxpc3QpIHsKIAkJY2FzX3BhZ2VfdCAqcGFnZSA9IGxpc3RfZW50cnkoZWxlbSwgY2FzX3BhZ2VfdCwgbGlzdCk7CiAKQEAgLTYyNyw3ICs2MjcsNyBAQAogCQlsaXN0X3NwbGljZSgmbGlzdCwgJmNwLT5yeF9pbnVzZV9saXN0KTsKIAkJc3Bpbl91bmxvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKIAl9Ci0JCisKIAlzcGluX2xvY2soJmNwLT5yeF9zcGFyZV9sb2NrKTsKIAluZWVkZWQgPSBjcC0+cnhfc3BhcmVzX25lZWRlZDsKIAlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOwpAQCAtNjM5LDcgKzYzOSw3IEBACiAJaSA9IDA7CiAJd2hpbGUgKGkgPCBuZWVkZWQpIHsKIAkJY2FzX3BhZ2VfdCAqc3BhcmUgPSBjYXNfcGFnZV9hbGxvYyhjcCwgZmxhZ3MpOwotCQlpZiAoIXNwYXJlKSAKKwkJaWYgKCFzcGFyZSkKIAkJCWJyZWFrOwogCQlsaXN0X2FkZCgmc3BhcmUtPmxpc3QsICZsaXN0KTsKIAkJaSsrOwpAQCAtNjk1LDEyICs2OTUsMTIgQEAKIHN0YXRpYyB2b2lkIGNhc19taWZfcG9sbChzdHJ1Y3QgY2FzICpjcCwgY29uc3QgaW50IGVuYWJsZSkKIHsKIAl1MzIgY2ZnOwotCQotCWNmZyAgPSByZWFkbChjcC0+cmVncyArIFJFR19NSUZfQ0ZHKTsgCisKKwljZmcgID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX0NGRyk7CiAJY2ZnICY9IChNSUZfQ0ZHX01ESU9fMCB8IE1JRl9DRkdfTURJT18xKTsKIAogCWlmIChjcC0+cGh5X3R5cGUgJiBDQVNfUEhZX01JSV9NRElPMSkKLQkJY2ZnIHw9IE1JRl9DRkdfUEhZX1NFTEVDVDsgCisJCWNmZyB8PSBNSUZfQ0ZHX1BIWV9TRUxFQ1Q7CiAKIAkvKiBwb2xsIGFuZCBpbnRlcnJ1cHQgb24gbGluayBzdGF0dXMgY2hhbmdlLiAqLwogCWlmIChlbmFibGUpIHsKQEAgLTcwOCw4ICs3MDgsOCBAQAogCQljZmcgfD0gQ0FTX0JBU0UoTUlGX0NGR19QT0xMX1JFRywgTUlJX0JNU1IpOwogCQljZmcgfD0gQ0FTX0JBU0UoTUlGX0NGR19QT0xMX1BIWSwgY3AtPnBoeV9hZGRyKTsKIAl9Ci0Jd3JpdGVsKChlbmFibGUpID8gfihCTVNSX0xTVEFUVVMgfCBCTVNSX0FORUdDT01QTEVURSkgOiAweEZGRkYsIAotCSAgICAgICBjcC0+cmVncyArIFJFR19NSUZfTUFTSyk7IAorCXdyaXRlbCgoZW5hYmxlKSA/IH4oQk1TUl9MU1RBVFVTIHwgQk1TUl9BTkVHQ09NUExFVEUpIDogMHhGRkZGLAorCSAgICAgICBjcC0+cmVncyArIFJFR19NSUZfTUFTSyk7CiAJd3JpdGVsKGNmZywgY3AtPnJlZ3MgKyBSRUdfTUlGX0NGRyk7CiB9CiAKQEAgLTc1OSw3ICs3NTksNyBAQAogCS8qCiAJICogV1RaOiBJZiB0aGUgb2xkIHN0YXRlIHdhcyBsaW5rX3VwLCB3ZSB0dXJuIG9mZiB0aGUgY2FycmllcgogCSAqIHRvIHJlcGxpY2F0ZSBldmVyeXRoaW5nIHdlIGRvIGVsc2V3aGVyZSBvbiBhIGxpbmstZG93bgotCSAqIGV2ZW50IHdoZW4gd2Ugd2VyZSBhbHJlYWR5IGluIGEgbGluay11cCBzdGF0ZS4uICAKKwkgKiBldmVudCB3aGVuIHdlIHdlcmUgYWxyZWFkeSBpbiBhIGxpbmstdXAgc3RhdGUuLgogCSAqLwogCWlmIChvbGRzdGF0ZSA9PSBsaW5rX3VwKQogCQluZXRpZl9jYXJyaWVyX29mZihjcC0+ZGV2KTsKQEAgLTc2Nyw3ICs3NjcsNyBAQAogCQkvKgogCQkgKiBXVFo6IFRoaXMgYnJhbmNoIHdpbGwgc2ltcGx5IHNjaGVkdWxlIGEgZnVsbCByZXNldCBhZnRlcgogCQkgKiB3ZSBleHBsaWNpdGx5IGNoYW5nZWQgbGluayBtb2RlcyBpbiBhbiBpb2N0bC4gU2VlIGlmIHRoaXMKLQkJICogZml4ZXMgdGhlIGxpbmstcHJvYmxlbXMgd2Ugd2VyZSBoYXZpbmcgZm9yIGZvcmNlZCBtb2RlLiAKKwkJICogZml4ZXMgdGhlIGxpbmstcHJvYmxlbXMgd2Ugd2VyZSBoYXZpbmcgZm9yIGZvcmNlZCBtb2RlLgogCQkgKi8KIAkJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZyk7CiAJCWF0b21pY19pbmMoJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfYWxsKTsKQEAgLTc5NSw3ICs3OTUsNyBAQAogCX0gZWxzZSB7CiAJCWNhc19taWZfcG9sbChjcCwgMCk7CiAJCWN0bCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNQ1IpOwotCQljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8IAorCQljdGwgJj0gfihCTUNSX0ZVTExEUExYIHwgQk1DUl9TUEVFRDEwMCB8CiAJCQkgQ0FTX0JNQ1JfU1BFRUQxMDAwIHwgQk1DUl9BTkVOQUJMRSk7CiAJCWN0bCB8PSBjcC0+bGlua19jbnRsOwogCQlpZiAoY3RsICYgQk1DUl9BTkVOQUJMRSkgewpAQCAtODE4LDcgKzgxOCw3IEBACiB7CiAJaW50IGxpbWl0ID0gU1RPUF9UUklFU19QSFk7CiAJdTE2IHZhbDsKLQkKKwogCWNhc19waHlfd3JpdGUoY3AsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKIAl1ZGVsYXkoMTAwKTsKIAl3aGlsZSAobGltaXQtLSkgewpAQCAtOTAxLDE3ICs5MDEsMTcgQEAKIAkJCXZhbCA9IGNhc19waHlfcmVhZChjcCwgQlJPQURDT01fTUlJX1JFRzQpOwogCQkJaWYgKHZhbCAmIDB4MDA4MCkgewogCQkJCS8qIGxpbmsgd29ya2Fyb3VuZCAqLwotCQkJCWNhc19waHlfd3JpdGUoY3AsIEJST0FEQ09NX01JSV9SRUc0LCAKKwkJCQljYXNfcGh5X3dyaXRlKGNwLCBCUk9BRENPTV9NSUlfUkVHNCwKIAkJCQkJICAgICAgdmFsICYgfjB4MDA4MCk7CiAJCQl9Ci0JCQkKKwogCQl9IGVsc2UgaWYgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19TQVRVUk4pIHsKLQkJCXdyaXRlbCgoY3AtPnBoeV90eXBlICYgQ0FTX1BIWV9NSUlfTURJTzApID8gCi0JCQkgICAgICAgU0FUVVJOX1BDRkdfRlNJIDogMHgwLCAKKwkJCXdyaXRlbCgoY3AtPnBoeV90eXBlICYgQ0FTX1BIWV9NSUlfTURJTzApID8KKwkJCSAgICAgICBTQVRVUk5fUENGR19GU0kgOiAweDAsCiAJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfU0FUVVJOX1BDRkcpOwogCiAJCQkvKiBsb2FkIGZpcm13YXJlIHRvIGFkZHJlc3MgMTBNYnBzIGF1dG8tbmVnb3RpYXRpb24KLQkJCSAqIGlzc3VlLiBOT1RFOiB0aGlzIHdpbGwgbmVlZCB0byBiZSBjaGFuZ2VkIGlmIHRoZSAKKwkJCSAqIGlzc3VlLiBOT1RFOiB0aGlzIHdpbGwgbmVlZCB0byBiZSBjaGFuZ2VkIGlmIHRoZQogCQkJICogZGVmYXVsdCBmaXJtd2FyZSBnZXRzIGZpeGVkLgogCQkJICovCiAJCQlpZiAoUEhZX05TX0RQODMwNjUgPT0gY3AtPnBoeV9pZCkgewpAQCAtOTMwLDkgKzkzMCw5IEBACiAJCQkgICAgICBjYXNfcGh5X3JlYWQoY3AsIE1JSV9BRFZFUlRJU0UpIHwKIAkJCSAgICAgIChBRFZFUlRJU0VfMTBIQUxGIHwgQURWRVJUSVNFXzEwRlVMTCB8CiAJCQkgICAgICAgQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTCB8Ci0JCQkgICAgICAgQ0FTX0FEVkVSVElTRV9QQVVTRSB8IAorCQkJICAgICAgIENBU19BRFZFUlRJU0VfUEFVU0UgfAogCQkJICAgICAgIENBU19BRFZFUlRJU0VfQVNZTV9QQVVTRSkpOwotCQkKKwogCQlpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHXzEwMDBNQl9DQVApIHsKIAkJCS8qIG1ha2Ugc3VyZSB0aGF0IHdlIGRvbid0IGFkdmVydGlzZSBoYWxmCiAJCQkgKiBkdXBsZXggdG8gYXZvaWQgYSBjaGlwIGlzc3VlCkBAIC05NjMsNyArOTYzLDcgQEAKIAkJbGltaXQgPSBTVE9QX1RSSUVTOwogCQl3aGlsZSAobGltaXQtLSA+IDApIHsKIAkJCXVkZWxheSgxMCk7Ci0JCQlpZiAoKHJlYWRsKGNwLT5yZWdzICsgUkVHX1BDU19NSUlfQ1RSTCkgJiAKKwkJCWlmICgocmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9DVFJMKSAmCiAJCQkgICAgIFBDU19NSUlfUkVTRVQpID09IDApCiAJCQkJYnJlYWs7CiAJCX0KQEAgLTk4MCw3ICs5ODAsNyBAQAogCQkvKiBBZHZlcnRpc2UgYWxsIGNhcGFiaWxpdGllcyBleGNlcHQgaGFsZi1kdXBsZXguICovCiAJCXZhbCAgPSByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfTUlJX0FEVkVSVCk7CiAJCXZhbCAmPSB+UENTX01JSV9BRFZFUlRfSEQ7Ci0JCXZhbCB8PSAoUENTX01JSV9BRFZFUlRfRkQgfCBQQ1NfTUlJX0FEVkVSVF9TWU1fUEFVU0UgfCAKKwkJdmFsIHw9IChQQ1NfTUlJX0FEVkVSVF9GRCB8IFBDU19NSUlfQURWRVJUX1NZTV9QQVVTRSB8CiAJCQlQQ1NfTUlJX0FEVkVSVF9BU1lNX1BBVVNFKTsKIAkJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfUENTX01JSV9BRFZFUlQpOwogCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCQkgICAgIFBDU19NSUlfU1RBVFVTX1JFTU9URV9GQVVMVCkpID09CiAJICAgIChQQ1NfTUlJX1NUQVRVU19BVVRPTkVHX0NPTVAgfCBQQ1NfTUlJX1NUQVRVU19SRU1PVEVfRkFVTFQpKSB7CiAJCWlmIChuZXRpZl9tc2dfbGluayhjcCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUENTIFJlbW90ZUZhdWx0XG4iLCAKKwkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQQ1MgUmVtb3RlRmF1bHRcbiIsCiAJCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CiAJfQogCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCQkJaWYgKGNwLT5vcGVuZWQpIHsKIAkJCQljcC0+bHN0YXRlID0gbGlua191cDsKIAkJCQljcC0+bGlua190cmFuc2l0aW9uID0gTElOS19UUkFOU0lUSU9OX0xJTktfVVA7Ci0JCQkJCisKIAkJCQljYXNfc2V0X2xpbmtfbW9kZXMoY3ApOwogCQkJCW5ldGlmX2NhcnJpZXJfb24oY3AtPmRldik7CiAJCQl9CkBAIC0xMDQ0LDggKzEwNDQsOCBAQAogCQkgICAgY3AtPmxpbmtfdHJhbnNpdGlvbiAhPSBMSU5LX1RSQU5TSVRJT05fUkVRVUVTVEVEX1JFU0VUICYmCiAJCSAgICAhY3AtPmxpbmtfdHJhbnNpdGlvbl9qaWZmaWVzX3ZhbGlkKSB7CiAJCQkvKgotCQkJICogZm9yY2UgYSByZXNldCwgYXMgYSB3b3JrYXJvdW5kIGZvciB0aGUgCi0JCQkgKiBsaW5rLWZhaWx1cmUgcHJvYmxlbS4gTWF5IHdhbnQgdG8gbW92ZSB0aGlzIHRvIGEgCisJCQkgKiBmb3JjZSBhIHJlc2V0LCBhcyBhIHdvcmthcm91bmQgZm9yIHRoZQorCQkJICogbGluay1mYWlsdXJlIHByb2JsZW0uIE1heSB3YW50IHRvIG1vdmUgdGhpcyB0byBhCiAJCQkgKiBwb2ludCBhIGJpdCBlYXJsaWVyIGluIHRoZSBzZXF1ZW5jZS4gSWYgd2UgaGFkCiAJCQkgKiBnZW5lcmF0ZWQgYSByZXNldCBhIHNob3J0IHRpbWUgYWdvLCB3ZSdsbCB3YWl0IGZvcgogCQkJICogdGhlIGxpbmsgdGltZXIgdG8gY2hlY2sgdGhlIHN0YXR1cyB1bnRpbCBhCkBAIC0xMTAzLDE3ICsxMTAzLDE3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBjYXNfcGNzX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKK3N0YXRpYyBpbnQgY2FzX3Bjc19pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IGNhcyAqY3AsIHUzMiBzdGF0dXMpCiB7CiAJdTMyIHN0YXQgPSByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfSU5UUl9TVEFUVVMpOwogCi0JaWYgKChzdGF0ICYgUENTX0lOVFJfU1RBVFVTX0xJTktfQ0hBTkdFKSA9PSAwKSAKKwlpZiAoKHN0YXQgJiBQQ1NfSU5UUl9TVEFUVVNfTElOS19DSEFOR0UpID09IDApCiAJCXJldHVybiAwOwogCXJldHVybiBjYXNfcGNzX2xpbmtfY2hlY2soY3ApOwogfQogCi1zdGF0aWMgaW50IGNhc190eG1hY19pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCitzdGF0aWMgaW50IGNhc190eG1hY19pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgY2FzICpjcCwgdTMyIHN0YXR1cykKIHsKIAl1MzIgdHhtYWNfc3RhdCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9TVEFUVVMpOwpAQCAtMTE2OCw3ICsxMTY4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2FzX2xvYWRfZmlybXdhcmUoc3RydWN0IGNhcyAqY3AsIGNhc19ocF9pbnN0X3QgKmZpcm13YXJlKSAKK3N0YXRpYyB2b2lkIGNhc19sb2FkX2Zpcm13YXJlKHN0cnVjdCBjYXMgKmNwLCBjYXNfaHBfaW5zdF90ICpmaXJtd2FyZSkKIHsKIAljYXNfaHBfaW5zdF90ICppbnN0OwogCXUzMiB2YWw7CkBAIC0xMjAzLDEyICsxMjAzLDEyIEBACiAKIHN0YXRpYyB2b2lkIGNhc19pbml0X3J4X2RtYShzdHJ1Y3QgY2FzICpjcCkKIHsKLQl1NjQgZGVzY19kbWEgPSBjcC0+YmxvY2tfZHZtYTsgCisJdTY0IGRlc2NfZG1hID0gY3AtPmJsb2NrX2R2bWE7CiAJdTMyIHZhbDsKIAlpbnQgaSwgc2l6ZTsKIAogCS8qIHJ4IGZyZWUgZGVzY3JpcHRvcnMgKi8KLQl2YWwgPSBDQVNfQkFTRShSWF9DRkdfU1dJVkVMLCBSWF9TV0lWRUxfT0ZGX1ZBTCk7IAorCXZhbCA9IENBU19CQVNFKFJYX0NGR19TV0lWRUwsIFJYX1NXSVZFTF9PRkZfVkFMKTsKIAl2YWwgfD0gQ0FTX0JBU0UoUlhfQ0ZHX0RFU0NfUklORywgUlhfREVTQ19SSU5HTl9JTkRFWCgwKSk7CiAJdmFsIHw9IENBU19CQVNFKFJYX0NGR19DT01QX1JJTkcsIFJYX0NPTVBfUklOR05fSU5ERVgoMCkpOwogCWlmICgoTl9SWF9ERVNDX1JJTkdTID4gMSkgJiYKQEAgLTEyMTYsMjcgKzEyMTYsMjcgQEAKIAkJdmFsIHw9IENBU19CQVNFKFJYX0NGR19ERVNDX1JJTkcxLCBSWF9ERVNDX1JJTkdOX0lOREVYKDEpKTsKIAl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9DRkcpOwogCi0JdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4ZHNbMF0gLSAKKwl2YWwgPSAodW5zaWduZWQgbG9uZykgY3AtPmluaXRfcnhkc1swXSAtCiAJCSh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9ibG9jazsKIAl3cml0ZWwoKGRlc2NfZG1hICsgdmFsKSA+PiAzMiwgY3AtPnJlZ3MgKyBSRUdfUlhfREJfSEkpOwogCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpICYgMHhmZmZmZmZmZiwgY3AtPnJlZ3MgKyBSRUdfUlhfREJfTE9XKTsKIAl3cml0ZWwoUlhfREVTQ19SSU5HTl9TSVpFKDApIC0gNCwgY3AtPnJlZ3MgKyBSRUdfUlhfS0lDSyk7CiAKIAlpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1JFR19QTFVTKSB7Ci0JCS8qIHJ4IGRlc2MgMiBpcyBmb3IgSVBTRUMgcGFja2V0cy4gaG93ZXZlciwgCisJCS8qIHJ4IGRlc2MgMiBpcyBmb3IgSVBTRUMgcGFja2V0cy4gaG93ZXZlciwKIAkJICogd2UgZG9uJ3QgaXQgdGhhdCBmb3IgdGhhdCBwdXJwb3NlLgogCQkgKi8KLQkJdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4ZHNbMV0gLSAKKwkJdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4ZHNbMV0gLQogCQkJKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X2Jsb2NrOwogCQl3cml0ZWwoKGRlc2NfZG1hICsgdmFsKSA+PiAzMiwgY3AtPnJlZ3MgKyBSRUdfUExVU19SWF9EQjFfSEkpOwotCQl3cml0ZWwoKGRlc2NfZG1hICsgdmFsKSAmIDB4ZmZmZmZmZmYsIGNwLT5yZWdzICsgCisJCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpICYgMHhmZmZmZmZmZiwgY3AtPnJlZ3MgKwogCQkgICAgICAgUkVHX1BMVVNfUlhfREIxX0xPVyk7Ci0JCXdyaXRlbChSWF9ERVNDX1JJTkdOX1NJWkUoMSkgLSA0LCBjcC0+cmVncyArIAorCQl3cml0ZWwoUlhfREVTQ19SSU5HTl9TSVpFKDEpIC0gNCwgY3AtPnJlZ3MgKwogCQkgICAgICAgUkVHX1BMVVNfUlhfS0lDSzEpOwogCX0KLQkKKwogCS8qIHJ4IGNvbXBsZXRpb24gcmVnaXN0ZXJzICovCi0JdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4Y3NbMF0gLSAKKwl2YWwgPSAodW5zaWduZWQgbG9uZykgY3AtPmluaXRfcnhjc1swXSAtCiAJCSh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9ibG9jazsKIAl3cml0ZWwoKGRlc2NfZG1hICsgdmFsKSA+PiAzMiwgY3AtPnJlZ3MgKyBSRUdfUlhfQ0JfSEkpOwogCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpICYgMHhmZmZmZmZmZiwgY3AtPnJlZ3MgKyBSRUdfUlhfQ0JfTE9XKTsKQEAgLTEyNDQsMTEgKzEyNDQsMTEgQEAKIAlpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1JFR19QTFVTKSB7CiAJCS8qIHJ4IGNvbXAgMi00ICovCiAJCWZvciAoaSA9IDE7IGkgPCBNQVhfUlhfQ09NUF9SSU5HUzsgaSsrKSB7Ci0JCQl2YWwgPSAodW5zaWduZWQgbG9uZykgY3AtPmluaXRfcnhjc1tpXSAtIAorCQkJdmFsID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3J4Y3NbaV0gLQogCQkJCSh1bnNpZ25lZCBsb25nKSBjcC0+aW5pdF9ibG9jazsKLQkJCXdyaXRlbCgoZGVzY19kbWEgKyB2YWwpID4+IDMyLCBjcC0+cmVncyArIAorCQkJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgPj4gMzIsIGNwLT5yZWdzICsKIAkJCSAgICAgICBSRUdfUExVU19SWF9DQk5fSEkoaSkpOwotCQkJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgJiAweGZmZmZmZmZmLCBjcC0+cmVncyArIAorCQkJd3JpdGVsKChkZXNjX2RtYSArIHZhbCkgJiAweGZmZmZmZmZmLCBjcC0+cmVncyArCiAJCQkgICAgICAgUkVHX1BMVVNfUlhfQ0JOX0xPVyhpKSk7CiAJCX0KIAl9CkBAIC0xMjY1LDIxICsxMjY1LDIxIEBACiAKIAkJLyogMiBpcyBkaWZmZXJlbnQgZnJvbSAzIGFuZCA0ICovCiAJCWlmIChOX1JYX0NPTVBfUklOR1MgPiAxKQotCQkJd3JpdGVsKElOVFJfUlhfRE9ORV9BTFQgfCBJTlRSX1JYX0JVRl9VTkFWQUlMXzEsIAorCQkJd3JpdGVsKElOVFJfUlhfRE9ORV9BTFQgfCBJTlRSX1JYX0JVRl9VTkFWQUlMXzEsCiAJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfUExVU19BTElBU05fQ0xFQVIoMSkpOwogCi0JCWZvciAoaSA9IDI7IGkgPCBOX1JYX0NPTVBfUklOR1M7IGkrKykgCi0JCQl3cml0ZWwoSU5UUl9SWF9ET05FX0FMVCwgCisJCWZvciAoaSA9IDI7IGkgPCBOX1JYX0NPTVBfUklOR1M7IGkrKykKKwkJCXdyaXRlbChJTlRSX1JYX0RPTkVfQUxULAogCQkJICAgICAgIGNwLT5yZWdzICsgUkVHX1BMVVNfQUxJQVNOX0NMRUFSKGkpKTsKIAl9CiAKIAkvKiBzZXQgdXAgcGF1c2UgdGhyZXNob2xkcyAqLwogCXZhbCAgPSBDQVNfQkFTRShSWF9QQVVTRV9USFJFU0hfT0ZGLAogCQkJY3AtPnJ4X3BhdXNlX29mZiAvIFJYX1BBVVNFX1RIUkVTSF9RVUFOVFVNKTsKLQl2YWwgfD0gQ0FTX0JBU0UoUlhfUEFVU0VfVEhSRVNIX09OLCAKKwl2YWwgfD0gQ0FTX0JBU0UoUlhfUEFVU0VfVEhSRVNIX09OLAogCQkJY3AtPnJ4X3BhdXNlX29uIC8gUlhfUEFVU0VfVEhSRVNIX1FVQU5UVU0pOwogCXdyaXRlbCh2YWwsIGNwLT5yZWdzICsgUkVHX1JYX1BBVVNFX1RIUkVTSCk7Ci0JCisKIAkvKiB6ZXJvIG91dCBkbWEgcmVhc3NlbWJseSBidWZmZXJzICovCiAJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKIAkJd3JpdGVsKGksIGNwLT5yZWdzICsgUkVHX1JYX1RBQkxFX0FERFIpOwpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAkgKiB0aGlzIHNob3VsZCBiZSB0dW5hYmxlLgogCSAqLwogCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX1JYX1JFRCk7Ci0JCisKIAkvKiByZWNlaXZlIHBhZ2Ugc2l6ZXMuIGRlZmF1bHQgPT0gMksgKDB4ODAwKSAqLwogCXZhbCA9IDA7CiAJaWYgKGNwLT5wYWdlX3NpemUgPT0gMHgxMDAwKQpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAkJdmFsID0gMHgyOwogCWVsc2UgaWYgKGNwLT5wYWdlX3NpemUgPT0gMHg0MDAwKQogCQl2YWwgPSAweDM7Ci0JCisKIAkvKiByb3VuZCBtdHUgKyBvZmZzZXQuIGNvbnN0cmFpbiB0byBwYWdlIHNpemUuICovCiAJc2l6ZSA9IGNwLT5kZXYtPm10dSArIDY0OwogCWlmIChzaXplID4gY3AtPnBhZ2Vfc2l6ZSkKQEAgLTEzNDQsMTEgKzEzNDQsMTEgQEAKIAogCWNwLT5tdHVfc3RyaWRlID0gMSA8PCAoaSArIDEwKTsKIAl2YWwgID0gQ0FTX0JBU0UoUlhfUEFHRV9TSVpFLCB2YWwpOwotCXZhbCB8PSBDQVNfQkFTRShSWF9QQUdFX1NJWkVfTVRVX1NUUklERSwgaSk7IAorCXZhbCB8PSBDQVNfQkFTRShSWF9QQUdFX1NJWkVfTVRVX1NUUklERSwgaSk7CiAJdmFsIHw9IENBU19CQVNFKFJYX1BBR0VfU0laRV9NVFVfQ09VTlQsIGNwLT5wYWdlX3NpemUgPj4gKGkgKyAxMCkpOwogCXZhbCB8PSBDQVNfQkFTRShSWF9QQUdFX1NJWkVfTVRVX09GRiwgMHgxKTsKIAl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19SWF9QQUdFX1NJWkUpOwotCQorCiAJLyogZW5hYmxlIHRoZSBoZWFkZXIgcGFyc2VyIGlmIGRlc2lyZWQgKi8KIAlpZiAoQ0FTX0hQX0ZJUk1XQVJFID09IGNhc19wcm9nX251bGwpCiAJCXJldHVybjsKQEAgLTEzNjIsNyArMTM2Miw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY2FzX3J4Y19pbml0KHN0cnVjdCBjYXNfcnhfY29tcCAqcnhjKQogewogCW1lbXNldChyeGMsIDAsIHNpemVvZigqcnhjKSk7Ci0JcnhjLT53b3JkNCA9IGNwdV90b19sZTY0KFJYX0NPTVA0X1pFUk8pOyAKKwlyeGMtPndvcmQ0ID0gY3B1X3RvX2xlNjQoUlhfQ09NUDRfWkVSTyk7CiB9CiAKIC8qIE5PVEU6IHdlIHVzZSB0aGUgRU5DIFJYIERFU0MgcmluZyBmb3Igc3BhcmVzLiB0aGUgcnhfcGFnZVswLDFdCkBAIC0xMzg1LDkgKzEzODUsOSBAQAogCX0KIAlyZXR1cm4gbmV3OwogfQotCQkJCSAgIAorCiAvKiB0aGlzIG5lZWRzIHRvIGJlIGNoYW5nZWQgaWYgd2UgYWN0dWFsbHkgdXNlIHRoZSBFTkMgUlggREVTQyByaW5nICovCi1zdGF0aWMgY2FzX3BhZ2VfdCAqY2FzX3BhZ2Vfc3dhcChzdHJ1Y3QgY2FzICpjcCwgY29uc3QgaW50IHJpbmcsIAorc3RhdGljIGNhc19wYWdlX3QgKmNhc19wYWdlX3N3YXAoc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCByaW5nLAogCQkJCSBjb25zdCBpbnQgaW5kZXgpCiB7CiAJY2FzX3BhZ2VfdCAqKnBhZ2UwID0gY3AtPnJ4X3BhZ2VzWzBdOwpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAkJCXBhZ2UxW2luZGV4XSA9IHBhZ2UwW2luZGV4XTsKIAkJCXBhZ2UwW2luZGV4XSA9IG5ldzsKIAkJfQotCX0gCisJfQogCVJYX1VTRURfU0VUKHBhZ2UwW2luZGV4XSwgMCk7CiAJcmV0dXJuIHBhZ2UwW2luZGV4XTsKIH0KQEAgLTE0MjQsMTEgKzE0MjQsMTEgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCWNhc19wYWdlX3QgKnBhZ2UgPSBjYXNfcGFnZV9zd2FwKGNwLCAwLCBpKTsKIAkJcnhkW2ldLmJ1ZmZlciA9IGNwdV90b19sZTY0KHBhZ2UtPmRtYV9hZGRyKTsKLQkJcnhkW2ldLmluZGV4ICA9IGNwdV90b19sZTY0KENBU19CQVNFKFJYX0lOREVYX05VTSwgaSkgfCAKKwkJcnhkW2ldLmluZGV4ICA9IGNwdV90b19sZTY0KENBU19CQVNFKFJYX0lOREVYX05VTSwgaSkgfAogCQkJCQkgICAgQ0FTX0JBU0UoUlhfSU5ERVhfUklORywgMCkpOwogCX0KIAotCWNwLT5yeF9vbGRbMF0gID0gUlhfREVTQ19SSU5HTl9TSVpFKDApIC0gNDsgCisJY3AtPnJ4X29sZFswXSAgPSBSWF9ERVNDX1JJTkdOX1NJWkUoMCkgLSA0OwogCWNwLT5yeF9sYXN0WzBdID0gMDsKIAljcC0+Y2FzX2ZsYWdzICY9IH5DQVNfRkxBR19SWERfUE9TVCgwKTsKIH0KQEAgLTE1MzMsNyArMTUzMyw3IEBACiAKIAkvKiB0aGVzZSBhcmUgYWxsIHJvbGxvdmVycyAqLwogCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7Ci0JaWYgKHN0YXQgJiBNQUNfUlhfQUxJR05fRVJSKSAKKwlpZiAoc3RhdCAmIE1BQ19SWF9BTElHTl9FUlIpCiAJCWNwLT5uZXRfc3RhdHNbMF0ucnhfZnJhbWVfZXJyb3JzICs9IDB4MTAwMDA7CiAKIAlpZiAoc3RhdCAmIE1BQ19SWF9DUkNfRVJSKQpAQCAtMTU3OSwxMiArMTU3OSwxMiBAQAogCXJldHVybiAwOwogfQogCi0JCisKIC8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4gKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNhc19tZGlvX2xpbmtfbm90X3VwKHN0cnVjdCBjYXMgKmNwKQogewogCXUxNiB2YWw7Ci0JCisKIAlzd2l0Y2ggKGNwLT5sc3RhdGUpIHsKIAljYXNlIGxpbmtfZm9yY2VfcmV0OgogCQlpZiAobmV0aWZfbXNnX2xpbmsoY3ApKQpAQCAtMTU5NSw3ICsxNTk1LDcgQEAKIAkJY3AtPmxzdGF0ZSA9IGxpbmtfZm9yY2Vfb2s7CiAJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19DT05GSUc7CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgbGlua19hbmVnOgogCQl2YWwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKIApAQCAtMTYwNCw3ICsxNjA0LDcgQEAKIAkJICovCiAJCXZhbCAmPSB+KEJNQ1JfQU5SRVNUQVJUIHwgQk1DUl9BTkVOQUJMRSk7CiAJCXZhbCB8PSBCTUNSX0ZVTExEUExYOwotCQl2YWwgfD0gKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR18xMDAwTUJfQ0FQKSA/IAorCQl2YWwgfD0gKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR18xMDAwTUJfQ0FQKSA/CiAJCQlDQVNfQk1DUl9TUEVFRDEwMDAgOiBCTUNSX1NQRUVEMTAwOwogCQljYXNfcGh5X3dyaXRlKGNwLCBNSUlfQk1DUiwgdmFsKTsKIAkJY3AtPnRpbWVyX3RpY2tzID0gNTsKQEAgLTE2NDYsMTEgKzE2NDYsMTEgQEAKIAogCWlmIChibXNyICYgQk1TUl9MU1RBVFVTKSB7CiAJCS8qIE9rLCBoZXJlIHdlIGdvdCBhIGxpbmsuIElmIHdlIGhhZCBpdCBkdWUgdG8gYSBmb3JjZWQKLQkJICogZmFsbGJhY2ssIGFuZCB3ZSB3ZXJlIGNvbmZpZ3VyZWQgZm9yIGF1dG9uZWcsIHdlIAorCQkgKiBmYWxsYmFjaywgYW5kIHdlIHdlcmUgY29uZmlndXJlZCBmb3IgYXV0b25lZywgd2UKIAkJICogcmV0cnkgYSBzaG9ydCBhdXRvbmVnIHBhc3MuIElmIHlvdSBrbm93IHlvdXIgaHViIGlzCiAJCSAqIGJyb2tlbiwgdXNlIGV0aHRvb2wgOykKIAkJICovCi0JCWlmICgoY3AtPmxzdGF0ZSA9PSBsaW5rX2ZvcmNlX3RyeSkgJiYgCisJCWlmICgoY3AtPmxzdGF0ZSA9PSBsaW5rX2ZvcmNlX3RyeSkgJiYKIAkJICAgIChjcC0+bGlua19jbnRsICYgQk1DUl9BTkVOQUJMRSkpIHsKIAkJCWNwLT5sc3RhdGUgPSBsaW5rX2ZvcmNlX3JldDsKIAkJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fTElOS19DT05GSUc7CkBAIC0xNjkwLDEwICsxNjkwLDEwIEBACiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayBkb3duXG4iLAogCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOwogCQlyZXN0YXJ0ID0gMTsKLQkJCisKIAl9IGVsc2UgaWYgKCsrY3AtPnRpbWVyX3RpY2tzID4gMTApCiAJCWNhc19tZGlvX2xpbmtfbm90X3VwKGNwKTsKLQkJCisKIAlyZXR1cm4gcmVzdGFydDsKIH0KIApAQCAtMTkwOCw3ICsxOTA4LDcgQEAKIAogCQlza2JzW2VudHJ5XSA9IE5VTEw7CiAJCWNwLT50eF90aW55X3VzZVtyaW5nXVtlbnRyeV0ubmJ1ZnMgPSAwOwotCQkKKwogCQlmb3IgKGZyYWcgPSAwOyBmcmFnIDw9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGZyYWcrKykgewogCQkJc3RydWN0IGNhc190eF9kZXNjICp0eGQgPSB0eGRzICsgZW50cnk7CiAKQEAgLTE5MjMsNyArMTkyMyw3IEBACiAJCQlpZiAoY3AtPnR4X3RpbnlfdXNlW3JpbmddW2VudHJ5XS51c2VkKSB7CiAJCQkJY3AtPnR4X3RpbnlfdXNlW3JpbmddW2VudHJ5XS51c2VkID0gMDsKIAkJCQllbnRyeSA9IFRYX0RFU0NfTkVYVChyaW5nLCBlbnRyeSk7Ci0JCQl9IAorCQkJfQogCQl9CiAKIAkJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrW3JpbmddKTsKQEAgLTE5NjQsMTQgKzE5NjQsMTQgQEAKICNlbHNlCiAJCWxpbWl0ID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfQ09NUE4ocmluZykpOwogI2VuZGlmCi0JCWlmIChjcC0+dHhfb2xkW3JpbmddICE9IGxpbWl0KSAKKwkJaWYgKGNwLT50eF9vbGRbcmluZ10gIT0gbGltaXQpCiAJCQljYXNfdHhfcmluZ04oY3AsIHJpbmcsIGxpbWl0KTsKIAl9CiB9CiAKIAotc3RhdGljIGludCBjYXNfcnhfcHJvY2Vzc19wa3Qoc3RydWN0IGNhcyAqY3AsIHN0cnVjdCBjYXNfcnhfY29tcCAqcnhjLCAKLQkJCSAgICAgIGludCBlbnRyeSwgY29uc3QgdTY0ICp3b3JkcywgCitzdGF0aWMgaW50IGNhc19yeF9wcm9jZXNzX3BrdChzdHJ1Y3QgY2FzICpjcCwgc3RydWN0IGNhc19yeF9jb21wICpyeGMsCisJCQkgICAgICBpbnQgZW50cnksIGNvbnN0IHU2NCAqd29yZHMsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnJlZikKIHsKIAlpbnQgZGxlbiwgaGxlbiwgbGVuLCBpLCBhbGxvY2xlbjsKQEAgLTE5NzksMTkgKzE5NzksMTkgQEAKIAlzdHJ1Y3QgY2FzX3BhZ2UgKnBhZ2U7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl2b2lkICphZGRyLCAqY3JjYWRkcjsKLQljaGFyICpwOyAKKwljaGFyICpwOwogCiAJaGxlbiA9IENBU19WQUwoUlhfQ09NUDJfSERSX1NJWkUsIHdvcmRzWzFdKTsKIAlkbGVuID0gQ0FTX1ZBTChSWF9DT01QMV9EQVRBX1NJWkUsIHdvcmRzWzBdKTsKIAlsZW4gID0gaGxlbiArIGRsZW47CiAKLQlpZiAoUlhfQ09QWV9BTFdBWVMgfHwgKHdvcmRzWzJdICYgUlhfQ09NUDNfU01BTExfUEtUKSkgCisJaWYgKFJYX0NPUFlfQUxXQVlTIHx8ICh3b3Jkc1syXSAmIFJYX0NPTVAzX1NNQUxMX1BLVCkpCiAJCWFsbG9jbGVuID0gbGVuOwotCWVsc2UgCisJZWxzZQogCQlhbGxvY2xlbiA9IG1heChobGVuLCBSWF9DT1BZX01JTik7CiAKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGFsbG9jbGVuICsgc3dpdmVsICsgY3AtPmNyY19zaXplKTsKLQlpZiAoc2tiID09IE5VTEwpIAorCWlmIChza2IgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCiAJKnNrYnJlZiA9IHNrYjsKQEAgLTIwMDMsNyArMjAwMyw3IEBACiAJaWYgKGhsZW4pIHsgLyogYWx3YXlzIGNvcHkgaGVhZGVyIHBhZ2VzICovCiAJCWkgPSBDQVNfVkFMKFJYX0NPTVAyX0hEUl9JTkRFWCwgd29yZHNbMV0pOwogCQlwYWdlID0gY3AtPnJ4X3BhZ2VzW0NBU19WQUwoUlhfSU5ERVhfUklORywgaSldW0NBU19WQUwoUlhfSU5ERVhfTlVNLCBpKV07Ci0JCW9mZiA9IENBU19WQUwoUlhfQ09NUDJfSERSX09GRiwgd29yZHNbMV0pICogMHgxMDAgKyAKKwkJb2ZmID0gQ0FTX1ZBTChSWF9DT01QMl9IRFJfT0ZGLCB3b3Jkc1sxXSkgKiAweDEwMCArCiAJCQlzd2l2ZWw7CiAKIAkJaSA9IGhsZW47CkBAIC0yMDE5LDcgKzIwMTksNyBAQAogCQlSWF9VU0VEX0FERChwYWdlLCAweDEwMCk7CiAJCXAgKz0gaGxlbjsKIAkJc3dpdmVsID0gMDsKLQl9IAorCX0KIAogCiAJaWYgKGFsbG9jbGVuIDwgKGhsZW4gKyBkbGVuKSkgewpAQCAtMjA3MCw3ICsyMDcwLDcgQEAKIAkJZnJhZy0+cGFnZSA9IHBhZ2UtPmJ1ZmZlcjsKIAkJZnJhZy0+cGFnZV9vZmZzZXQgPSBvZmY7CiAJCWZyYWctPnNpemUgPSBobGVuIC0gc3dpdmVsOwotCQkKKwogCQkvKiBhbnkgbW9yZSBkYXRhPyAqLwogCQlpZiAoKHdvcmRzWzBdICYgUlhfQ09NUDFfU1BMSVRfUEtUKSAmJiAoKGRsZW4gLT0gaGxlbikgPiAwKSkgewogCQkJaGxlbiA9IGRsZW47CkBAIC0yMDc4LDggKzIwNzgsOCBAQAogCiAJCQlpID0gQ0FTX1ZBTChSWF9DT01QMl9ORVhUX0lOREVYLCB3b3Jkc1sxXSk7CiAJCQlwYWdlID0gY3AtPnJ4X3BhZ2VzW0NBU19WQUwoUlhfSU5ERVhfUklORywgaSldW0NBU19WQUwoUlhfSU5ERVhfTlVNLCBpKV07Ci0JCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoY3AtPnBkZXYsIHBhZ2UtPmRtYV9hZGRyLCAKLQkJCQkJICAgIGhsZW4gKyBjcC0+Y3JjX3NpemUsIAorCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGNwLT5wZGV2LCBwYWdlLT5kbWFfYWRkciwKKwkJCQkJICAgIGhsZW4gKyBjcC0+Y3JjX3NpemUsCiAJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNwLT5wZGV2LCBwYWdlLT5kbWFfYWRkciwKIAkJCQkJICAgIGhsZW4gKyBjcC0+Y3JjX3NpemUsCkBAIC0yMDg3LDcgKzIwODcsNyBAQAogCiAJCQlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CiAJCQlza2ItPmRhdGFfbGVuICs9IGhsZW47Ci0JCQlza2ItPmxlbiAgICAgICs9IGhsZW47IAorCQkJc2tiLT5sZW4gICAgICArPSBobGVuOwogCQkJZnJhZysrOwogCiAJCQlnZXRfcGFnZShwYWdlLT5idWZmZXIpOwpAQCAtMjEzNCwxNCArMjEzNCwxNCBAQAogCQkJUlhfVVNFRF9BREQocGFnZSwgY3AtPm10dV9zdHJpZGUpOwogCQllbHNlCiAJCQlSWF9VU0VEX0FERChwYWdlLCBpKTsKLQkKKwogCQkvKiBhbnkgbW9yZSBkYXRhPyAqLwogCQlpZiAoKHdvcmRzWzBdICYgUlhfQ09NUDFfU1BMSVRfUEtUKSAmJiAoKGRsZW4gLT0gaGxlbikgPiAwKSkgewogCQkJcCArPSBobGVuOwogCQkJaSA9IENBU19WQUwoUlhfQ09NUDJfTkVYVF9JTkRFWCwgd29yZHNbMV0pOwogCQkJcGFnZSA9IGNwLT5yeF9wYWdlc1tDQVNfVkFMKFJYX0lOREVYX1JJTkcsIGkpXVtDQVNfVkFMKFJYX0lOREVYX05VTSwgaSldOwotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGNwLT5wZGV2LCBwYWdlLT5kbWFfYWRkciwgCi0JCQkJCSAgICBkbGVuICsgY3AtPmNyY19zaXplLCAKKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShjcC0+cGRldiwgcGFnZS0+ZG1hX2FkZHIsCisJCQkJCSAgICBkbGVuICsgY3AtPmNyY19zaXplLAogCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWFkZHIgPSBjYXNfcGFnZV9tYXAocGFnZS0+YnVmZmVyKTsKIAkJCW1lbWNweShwLCBhZGRyLCBkbGVuICsgY3AtPmNyY19zaXplKTsKQEAgLTIxNDksNyArMjE0OSw3IEBACiAJCQkJCSAgICBkbGVuICsgY3AtPmNyY19zaXplLAogCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWNhc19wYWdlX3VubWFwKGFkZHIpOwotCQkJUlhfVVNFRF9BREQocGFnZSwgZGxlbiArIGNwLT5jcmNfc2l6ZSk7IAorCQkJUlhfVVNFRF9BREQocGFnZSwgZGxlbiArIGNwLT5jcmNfc2l6ZSk7CiAJCX0KIGVuZF9jb3B5X3BrdDoKIAkJaWYgKGNwLT5jcmNfc2l6ZSkgewpAQCAtMjE3NCw3ICsyMTc0LDcgQEAKIAogCiAvKiB3ZSBjYW4gaGFuZGxlIHVwIHRvIDY0IHJ4IGZsb3dzIGF0IGEgdGltZS4gd2UgZG8gdGhlIHNhbWUgdGhpbmcKLSAqIGFzIG5vbnJlYXNzbSBleGNlcHQgdGhhdCB3ZSBiYXRjaCB1cCB0aGUgYnVmZmVycy4gCisgKiBhcyBub25yZWFzc20gZXhjZXB0IHRoYXQgd2UgYmF0Y2ggdXAgdGhlIGJ1ZmZlcnMuCiAgKiBOT1RFOiB3ZSBjdXJyZW50bHkganVzdCB0cmVhdCBlYWNoIGZsb3cgYXMgYSBidW5jaCBvZiBwYWNrZXRzIHRoYXQKICAqICAgICAgIHdlIHBhc3MgdXAuIGEgYmV0dGVyIHdheSB3b3VsZCBiZSB0byBjb2FsZXNjZSB0aGUgcGFja2V0cwogICogICAgICAgaW50byBhIGp1bWJvIHBhY2tldC4gdG8gZG8gdGhhdCwgd2UgbmVlZCB0byBkbyB0aGUgZm9sbG93aW5nOgpAQCAtMjE4NCw3ICsyMTg0LDcgQEAKICAqICAgICAgICAgIGRhdGEgbGVuZ3RoIGFuZCBtZXJnZSB0aGUgY2hlY2tzdW1zLgogICogICAgICAgMykgb24gZmxvdyByZWxlYXNlLCBmaXggdXAgdGhlIGhlYWRlci4KICAqICAgICAgIDQpIG1ha2Ugc3VyZSB0aGUgaGlnaGVyIGxheWVyIGRvZXNuJ3QgY2FyZS4KLSAqIGJlY2F1c2UgcGFja2V0cyBnZXQgY29hbGVzY2VkLCB3ZSBzaG91bGRuJ3QgcnVuIGludG8gZnJhZ21lbnQgY291bnQgCisgKiBiZWNhdXNlIHBhY2tldHMgZ2V0IGNvYWxlc2NlZCwgd2Ugc2hvdWxkbid0IHJ1biBpbnRvIGZyYWdtZW50IGNvdW50CiAgKiBpc3N1ZXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjYXNfcnhfZmxvd19wa3Qoc3RydWN0IGNhcyAqY3AsIGNvbnN0IHU2NCAqd29yZHMsCkBAIC0yMTkyLDggKzIxOTIsOCBAQAogewogCWludCBmbG93aWQgPSBDQVNfVkFMKFJYX0NPTVAzX0ZMT1dJRCwgd29yZHNbMl0pICYgKE5fUlhfRkxPV1MgLSAxKTsKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpmbG93ID0gJmNwLT5yeF9mbG93c1tmbG93aWRdOwotCQotCS8qIHRoaXMgaXMgcHJvdGVjdGVkIGF0IGEgaGlnaGVyIGxheWVyLCBzbyBubyBuZWVkIHRvIAorCisJLyogdGhpcyBpcyBwcm90ZWN0ZWQgYXQgYSBoaWdoZXIgbGF5ZXIsIHNvIG5vIG5lZWQgdG8KIAkgKiBkbyBhbnkgYWRkaXRpb25hbCBsb2NraW5nIGhlcmUuIHN0aWNrIHRoZSBidWZmZXIKIAkgKiBhdCB0aGUgZW5kLgogCSAqLwpAQCAtMjIxOCwxOSArMjIxOCwxOSBAQAogCW5ldyA9IGNhc19wYWdlX3N3YXAoY3AsIHJpbmcsIGluZGV4KTsKIAljcC0+aW5pdF9yeGRzW3JpbmddW2VudHJ5XS5idWZmZXIgPSBjcHVfdG9fbGU2NChuZXctPmRtYV9hZGRyKTsKIAljcC0+aW5pdF9yeGRzW3JpbmddW2VudHJ5XS5pbmRleCAgPQotCQljcHVfdG9fbGU2NChDQVNfQkFTRShSWF9JTkRFWF9OVU0sIGluZGV4KSB8IAorCQljcHVfdG9fbGU2NChDQVNfQkFTRShSWF9JTkRFWF9OVU0sIGluZGV4KSB8CiAJCQkgICAgQ0FTX0JBU0UoUlhfSU5ERVhfUklORywgcmluZykpOwogCiAJZW50cnkgPSBSWF9ERVNDX0VOVFJZKHJpbmcsIGVudHJ5ICsgMSk7CiAJY3AtPnJ4X29sZFtyaW5nXSA9IGVudHJ5OwotCQorCiAJaWYgKGVudHJ5ICUgNCkKIAkJcmV0dXJuOwogCiAJaWYgKHJpbmcgPT0gMCkKIAkJd3JpdGVsKGVudHJ5LCBjcC0+cmVncyArIFJFR19SWF9LSUNLKTsKIAllbHNlIGlmICgoTl9SWF9ERVNDX1JJTkdTID4gMSkgJiYKLQkJIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpKSAKKwkJIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpKQogCQl3cml0ZWwoZW50cnksIGNwLT5yZWdzICsgUkVHX1BMVVNfUlhfS0lDSzEpOwogfQogCkBAIC0yMjQ5LDcgKzIyNDksNyBAQAogCQkgICAgICAgY3AtPmRldi0+bmFtZSwgcmluZywgZW50cnkpOwogCiAJY2x1c3RlciA9IC0xOwotCWNvdW50ID0gZW50cnkgJiAweDM7IAorCWNvdW50ID0gZW50cnkgJiAweDM7CiAJbGFzdCA9IFJYX0RFU0NfRU5UUlkocmluZywgbnVtID8gZW50cnkgKyBudW0gLSA0OiBlbnRyeSAtIDQpOwogCXJlbGVhc2VkID0gMDsKIAl3aGlsZSAoZW50cnkgIT0gbGFzdCkgewpAQCAtMjI1NywxMiArMjI1NywxMiBAQAogCQlpZiAoY2FzX2J1ZmZlcl9jb3VudChwYWdlW2VudHJ5XSkgPiAxKSB7CiAJCQljYXNfcGFnZV90ICpuZXcgPSBjYXNfcGFnZV9kZXF1ZXVlKGNwKTsKIAkJCWlmICghbmV3KSB7Ci0JCQkJLyogbGV0IHRoZSB0aW1lciBrbm93IHRoYXQgd2UgbmVlZCB0byAKKwkJCQkvKiBsZXQgdGhlIHRpbWVyIGtub3cgdGhhdCB3ZSBuZWVkIHRvCiAJCQkJICogZG8gdGhpcyBhZ2FpbgogCQkJCSAqLwogCQkJCWNwLT5jYXNfZmxhZ3MgfD0gQ0FTX0ZMQUdfUlhEX1BPU1QocmluZyk7CiAJCQkJaWYgKCF0aW1lcl9wZW5kaW5nKCZjcC0+bGlua190aW1lcikpCi0JCQkJCW1vZF90aW1lcigmY3AtPmxpbmtfdGltZXIsIGppZmZpZXMgKyAKKwkJCQkJbW9kX3RpbWVyKCZjcC0+bGlua190aW1lciwgamlmZmllcyArCiAJCQkJCQkgIENBU19MSU5LX0ZBU1RfVElNRU9VVCk7CiAJCQkJY3AtPnJ4X29sZFtyaW5nXSAgPSBlbnRyeTsKIAkJCQljcC0+cnhfbGFzdFtyaW5nXSA9IG51bSA/IG51bSAtIHJlbGVhc2VkIDogMDsKQEAgLTIyNzEsMTAgKzIyNzEsMTAgQEAKIAkJCXNwaW5fbG9jaygmY3AtPnJ4X2ludXNlX2xvY2spOwogCQkJbGlzdF9hZGQoJnBhZ2VbZW50cnldLT5saXN0LCAmY3AtPnJ4X2ludXNlX2xpc3QpOwogCQkJc3Bpbl91bmxvY2soJmNwLT5yeF9pbnVzZV9sb2NrKTsKLQkJCWNwLT5pbml0X3J4ZHNbcmluZ11bZW50cnldLmJ1ZmZlciA9IAorCQkJY3AtPmluaXRfcnhkc1tyaW5nXVtlbnRyeV0uYnVmZmVyID0KIAkJCQljcHVfdG9fbGU2NChuZXctPmRtYV9hZGRyKTsKIAkJCXBhZ2VbZW50cnldID0gbmV3OwotCQkJCisKIAkJfQogCiAJCWlmICgrK2NvdW50ID09IDQpIHsKQEAgLTIyODYsMTMgKzIyODYsMTMgQEAKIAl9CiAJY3AtPnJ4X29sZFtyaW5nXSA9IGVudHJ5OwogCi0JaWYgKGNsdXN0ZXIgPCAwKSAKKwlpZiAoY2x1c3RlciA8IDApCiAJCXJldHVybiAwOwogCiAJaWYgKHJpbmcgPT0gMCkKIAkJd3JpdGVsKGNsdXN0ZXIsIGNwLT5yZWdzICsgUkVHX1JYX0tJQ0spOwogCWVsc2UgaWYgKChOX1JYX0RFU0NfUklOR1MgPiAxKSAmJgotCQkgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykpIAorCQkgKGNwLT5jYXNfZmxhZ3MgJiBDQVNfRkxBR19SRUdfUExVUykpCiAJCXdyaXRlbChjbHVzdGVyLCBjcC0+cmVncyArIFJFR19QTFVTX1JYX0tJQ0sxKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMDEsMTQgKzIzMDEsMTQgQEAKIC8qIHByb2Nlc3MgYSBjb21wbGV0aW9uIHJpbmcuIHBhY2tldHMgYXJlIHNldCB1cCBpbiB0aHJlZSBiYXNpYyB3YXlzOgogICogc21hbGwgcGFja2V0czogc2hvdWxkIGJlIGNvcGllZCBoZWFkZXIgKyBkYXRhIGluIHNpbmdsZSBidWZmZXIuCiAgKiBsYXJnZSBwYWNrZXRzOiBoZWFkZXIgYW5kIGRhdGEgaW4gYSBzaW5nbGUgYnVmZmVyLgotICogc3BsaXQgcGFja2V0czogaGVhZGVyIGluIGEgc2VwYXJhdGUgYnVmZmVyIGZyb20gZGF0YS4gCisgKiBzcGxpdCBwYWNrZXRzOiBoZWFkZXIgaW4gYSBzZXBhcmF0ZSBidWZmZXIgZnJvbSBkYXRhLgogICogICAgICAgICAgICAgICAgZGF0YSBtYXkgYmUgaW4gbXVsdGlwbGUgcGFnZXMuIGRhdGEgbWF5IGJlID4gMjU2Ci0gKiAgICAgICAgICAgICAgICBieXRlcyBidXQgaW4gYSBzaW5nbGUgcGFnZS4gCisgKiAgICAgICAgICAgICAgICBieXRlcyBidXQgaW4gYSBzaW5nbGUgcGFnZS4KICAqCiAgKiBOT1RFOiBSWCBwYWdlIHBvc3RpbmcgaXMgZG9uZSBpbiB0aGlzIHJvdXRpbmUgYXMgd2VsbC4gd2hpbGUgdGhlcmUncwogICogICAgICAgdGhlIGNhcGFiaWxpdHkgb2YgdXNpbmcgbXVsdGlwbGUgUlggY29tcGxldGlvbiByaW5ncywgaXQgaXNuJ3QKICAqICAgICAgIHJlYWxseSB3b3J0aHdoaWxlIGR1ZSB0byB0aGUgZmFjdCB0aGF0IHRoZSBwYWdlIHBvc3Rpbmcgd2lsbAotICogICAgICAgZm9yY2Ugc2VyaWFsaXphdGlvbiBvbiB0aGUgc2luZ2xlIGRlc2NyaXB0b3IgcmluZy4gCisgKiAgICAgICBmb3JjZSBzZXJpYWxpemF0aW9uIG9uIHRoZSBzaW5nbGUgZGVzY3JpcHRvciByaW5nLgogICovCiBzdGF0aWMgaW50IGNhc19yeF9yaW5nTihzdHJ1Y3QgY2FzICpjcCwgaW50IHJpbmcsIGludCBidWRnZXQpCiB7CkBAIC0yMzE5LDcgKzIzMTksNyBAQAogCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnhbJWRdIGludGVycnVwdCwgZG9uZTogJWQvJWRcbiIsCiAJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCByaW5nLAotCQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9IRUFEKSwgCisJCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19SWF9DT01QX0hFQUQpLAogCQkgICAgICAgY3AtPnJ4X25ld1tyaW5nXSk7CiAKIAllbnRyeSA9IGNwLT5yeF9uZXdbcmluZ107CkBAIC0yMzc1LDcgKzIzNzUsNyBAQAogCQkgKi8KIAkJaWYgKFJYX0RPTlRfQkFUQ0ggfHwgKHR5cGUgPT0gMHgyKSkgewogCQkJLyogbm9uLXJlYXNzbTogdGhlc2UgYWx3YXlzIGdldCByZWxlYXNlZCAqLwotCQkJY2FzX3NrYl9yZWxlYXNlKHNrYik7IAorCQkJY2FzX3NrYl9yZWxlYXNlKHNrYik7CiAJCX0gZWxzZSB7CiAJCQljYXNfcnhfZmxvd19wa3QoY3AsIHdvcmRzLCBza2IpOwogCQl9CkBAIC0yMzk2LDcgKzIzOTYsNyBAQAogCQkJaSA9IENBU19WQUwoUlhfSU5ERVhfTlVNLCBpKTsKIAkJCWNhc19wb3N0X3BhZ2UoY3AsIGRyaW5nLCBpKTsKIAkJfQotCQkKKwogCQlpZiAod29yZHNbMF0gJiBSWF9DT01QMV9SRUxFQVNFX0RBVEEpIHsKIAkJCWkgPSBDQVNfVkFMKFJYX0NPTVAxX0RBVEFfSU5ERVgsIHdvcmRzWzBdKTsKIAkJCWRyaW5nID0gQ0FTX1ZBTChSWF9JTkRFWF9SSU5HLCBpKTsKQEAgLTI0MTIsNyArMjQxMiw3IEBACiAJCX0KIAogCQkvKiBza2lwIHRvIHRoZSBuZXh0IGVudHJ5ICovCi0JCWVudHJ5ID0gUlhfQ09NUF9FTlRSWShyaW5nLCBlbnRyeSArIDEgKyAKKwkJZW50cnkgPSBSWF9DT01QX0VOVFJZKHJpbmcsIGVudHJ5ICsgMSArCiAJCQkJICAgICAgQ0FTX1ZBTChSWF9DT01QMV9TS0lQLCB3b3Jkc1swXSkpOwogI2lmZGVmIFVTRV9OQVBJCiAJCWlmIChidWRnZXQgJiYgKG5wYWNrZXRzID49IGJ1ZGdldCkpCkBAIC0yNDM2LDEyICsyNDM2LDEyIEBACiAJaW50IGxhc3QsIGVudHJ5OwogCiAJbGFzdCA9IGNwLT5yeF9jdXJbcmluZ107Ci0JZW50cnkgPSBjcC0+cnhfbmV3W3JpbmddOyAKKwllbnRyeSA9IGNwLT5yeF9uZXdbcmluZ107CiAJaWYgKG5ldGlmX21zZ19pbnRyKGNwKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeGNbJWRdIGludGVycnVwdCwgZG9uZTogJWQvJWRcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIHJpbmcsIHJlYWRsKGNwLT5yZWdzICsgUkVHX1JYX0NPTVBfSEVBRCksCiAJCSAgICAgICBlbnRyeSk7Ci0JCisKIAkvKiB6ZXJvIGFuZCByZS1tYXJrIGRlc2NyaXB0b3JzICovCiAJd2hpbGUgKGxhc3QgIT0gZW50cnkpIHsKIAkJY2FzX3J4Y19pbml0KHJ4YyArIGxhc3QpOwpAQCAtMjQ1MSwyMSArMjQ1MSwyMSBAQAogCiAJaWYgKHJpbmcgPT0gMCkKIAkJd3JpdGVsKGxhc3QsIGNwLT5yZWdzICsgUkVHX1JYX0NPTVBfVEFJTCk7Ci0JZWxzZSBpZiAoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1JFR19QTFVTKSAKKwllbHNlIGlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpCiAJCXdyaXRlbChsYXN0LCBjcC0+cmVncyArIFJFR19QTFVTX1JYX0NPTVBOX1RBSUwocmluZykpOwogfQogCiAKIAotLyogY2Fzc2luaSBjYW4gdXNlIGFsbCBmb3VyIFBDSSBpbnRlcnJ1cHRzIGZvciB0aGUgY29tcGxldGlvbiByaW5nLiAKKy8qIGNhc3NpbmkgY2FuIHVzZSBhbGwgZm91ciBQQ0kgaW50ZXJydXB0cyBmb3IgdGhlIGNvbXBsZXRpb24gcmluZy4KICAqIHJpbmdzIDMgYW5kIDQgYXJlIGlkZW50aWNhbAogICovCiAjaWYgZGVmaW5lZChVU0VfUENJX0lOVEMpIHx8IGRlZmluZWQoVVNFX1BDSV9JTlREKQotc3RhdGljIGlubGluZSB2b2lkIGNhc19oYW5kbGVfaXJxTihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYXNfaGFuZGxlX2lycU4oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgY2FzICpjcCwgY29uc3QgdTMyIHN0YXR1cywKIAkJCQkgICBjb25zdCBpbnQgcmluZykKIHsKLQlpZiAoc3RhdHVzICYgKElOVFJfUlhfQ09NUF9GVUxMX0FMVCB8IElOVFJfUlhfQ09NUF9BRl9BTFQpKSAKKwlpZiAoc3RhdHVzICYgKElOVFJfUlhfQ09NUF9GVUxMX0FMVCB8IElOVFJfUlhfQ09NUF9BRl9BTFQpKQogCQljYXNfcG9zdF9yeGNzX3JpbmdOKGRldiwgY3AsIHJpbmcpOwogfQogCkBAIC0yNTA1LDcgKzI1MDUsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGNhc19oYW5kbGVfaXJxMShzdHJ1Y3QgY2FzICpjcCwgY29uc3QgdTMyIHN0YXR1cykKIHsKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9CVUZfVU5BVkFJTF8xKSB7Ci0JCS8qIEZyYW1lIGFycml2ZWQsIG5vIGZyZWUgUlggYnVmZmVycyBhdmFpbGFibGUuIAorCQkvKiBGcmFtZSBhcnJpdmVkLCBubyBmcmVlIFJYIGJ1ZmZlcnMgYXZhaWxhYmxlLgogCQkgKiBOT1RFOiB3ZSBjYW4gZ2V0IHRoaXMgb24gYSBsaW5rIHRyYW5zaXRpb24uICovCiAJCWNhc19wb3N0X3J4ZHNfcmluZ04oY3AsIDEsIDApOwogCQlzcGluX2xvY2soJmNwLT5zdGF0X2xvY2tbMV0pOwpAQCAtMjUxMyw4ICsyNTEzLDggQEAKIAkJc3Bpbl91bmxvY2soJmNwLT5zdGF0X2xvY2tbMV0pOwogCX0KIAotCWlmIChzdGF0dXMgJiBJTlRSX1JYX0JVRl9BRV8xKSAKLQkJY2FzX3Bvc3Rfcnhkc19yaW5nTihjcCwgMSwgUlhfREVTQ19SSU5HTl9TSVpFKDEpIC0gCisJaWYgKHN0YXR1cyAmIElOVFJfUlhfQlVGX0FFXzEpCisJCWNhc19wb3N0X3J4ZHNfcmluZ04oY3AsIDEsIFJYX0RFU0NfUklOR05fU0laRSgxKSAtCiAJCQkJICAgIFJYX0FFX0ZSRUVOX1ZBTCgxKSk7CiAKIAlpZiAoc3RhdHVzICYgKElOVFJfUlhfQ09NUF9BRiB8IElOVFJfUlhfQ09NUF9GVUxMKSkKQEAgLTI1NTgsNyArMjU1OCw3IEBACiAJCWNhc19hYm5vcm1hbF9pcnEoZGV2LCBjcCwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBJTlRSX1JYX0JVRl9VTkFWQUlMKSB7Ci0JCS8qIEZyYW1lIGFycml2ZWQsIG5vIGZyZWUgUlggYnVmZmVycyBhdmFpbGFibGUuIAorCQkvKiBGcmFtZSBhcnJpdmVkLCBubyBmcmVlIFJYIGJ1ZmZlcnMgYXZhaWxhYmxlLgogCQkgKiBOT1RFOiB3ZSBjYW4gZ2V0IHRoaXMgb24gYSBsaW5rIHRyYW5zaXRpb24uCiAJCSAqLwogCQljYXNfcG9zdF9yeGRzX3JpbmdOKGNwLCAwLCAwKTsKQEAgLTI2MjUsNyArMjYyNSw3IEBACiAJdG9kbyA9IG1pbigqYnVkZ2V0LCBkZXYtPnF1b3RhKTsKIAogCS8qIHRvIG1ha2Ugc3VyZSB3ZSdyZSBmYWlyIHdpdGggdGhlIHdvcmsgd2UgbG9vcCB0aHJvdWdoIGVhY2gKLQkgKiByaW5nIE5fUlhfQ09NUF9SSU5HIHRpbWVzIHdpdGggYSByZXF1ZXN0IG9mIAorCSAqIHJpbmcgTl9SWF9DT01QX1JJTkcgdGltZXMgd2l0aCBhIHJlcXVlc3Qgb2YKIAkgKiB0b2RvIC8gTl9SWF9DT01QX1JJTkdTCiAJICovCiAJZW5hYmxlX2ludHIgPSAxOwpAQCAtMjc4NCwxMyArMjc4NCwxMyBAQAogCXR4ZC0+YnVmZmVyID0gY3B1X3RvX2xlNjQobWFwcGluZyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqdHhfdGlueV9idWYoc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCByaW5nLCAKK3N0YXRpYyBpbmxpbmUgdm9pZCAqdHhfdGlueV9idWYoc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCByaW5nLAogCQkJCWNvbnN0IGludCBlbnRyeSkKIHsKIAlyZXR1cm4gY3AtPnR4X3RpbnlfYnVmc1tyaW5nXSArIFRYX1RJTllfQlVGX0xFTiplbnRyeTsKIH0KIAotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IHR4X3RpbnlfbWFwKHN0cnVjdCBjYXMgKmNwLCBjb25zdCBpbnQgcmluZywgCitzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgdHhfdGlueV9tYXAoc3RydWN0IGNhcyAqY3AsIGNvbnN0IGludCByaW5nLAogCQkJCSAgICAgY29uc3QgaW50IGVudHJ5LCBjb25zdCBpbnQgdGVudHJ5KQogewogCWNwLT50eF90aW55X3VzZVtyaW5nXVt0ZW50cnldLm5idWZzKys7CkBAIC0yNzk4LDcgKzI3OTgsNyBAQAogCXJldHVybiBjcC0+dHhfdGlueV9kdm1hW3JpbmddICsgVFhfVElOWV9CVUZfTEVOKmVudHJ5OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjYXNfeG1pdF90eF9yaW5nTihzdHJ1Y3QgY2FzICpjcCwgaW50IHJpbmcsIAorc3RhdGljIGlubGluZSBpbnQgY2FzX3htaXRfdHhfcmluZ04oc3RydWN0IGNhcyAqY3AsIGludCByaW5nLAogCQkJCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBjcC0+ZGV2OwpAQCAtMjgxMSw3ICsyODExLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPnR4X2xvY2tbcmluZ10sIGZsYWdzKTsKIAogCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCi0JaWYgKFRYX0JVRkZTX0FWQUlMKGNwLCByaW5nKSA8PSAKKwlpZiAoVFhfQlVGRlNfQVZBSUwoY3AsIHJpbmcpIDw9CiAJICAgIENBU19UQUJPUlQoY3ApKihza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+dHhfbG9ja1tyaW5nXSwgZmxhZ3MpOwpAQCAtMjgyNyw3ICsyODI3LDcgQEAKIAkJY3N1bV9zdGFydF9vZmYgPSAodTY0KSAoc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YSk7CiAJCWNzdW1fc3R1ZmZfb2ZmID0gKHU2NCkgKChza2ItPmgucmF3ICsgc2tiLT5jc3VtKSAtIHNrYi0+ZGF0YSk7CiAKLQkJY3RybCA9ICBUWF9ERVNDX0NTVU1fRU4gfCAKKwkJY3RybCA9ICBUWF9ERVNDX0NTVU1fRU4gfAogCQkJQ0FTX0JBU0UoVFhfREVTQ19DU1VNX1NUQVJULCBjc3VtX3N0YXJ0X29mZikgfAogCQkJQ0FTX0JBU0UoVFhfREVTQ19DU1VNX1NUVUZGLCBjc3VtX3N0dWZmX29mZik7CiAJfQpAQCAtMjg0NSwxNyArMjg0NSwxNyBAQAogCXRhYm9ydCA9IGNhc19jYWxjX3RhYm9ydChjcCwgKHVuc2lnbmVkIGxvbmcpIHNrYi0+ZGF0YSwgbGVuKTsKIAlpZiAodW5saWtlbHkodGFib3J0KSkgewogCQkvKiBOT1RFOiBsZW4gaXMgYWx3YXlzID4gIHRhYm9ydCAqLwotCQljYXNfd3JpdGVfdHhkKGNwLCByaW5nLCBlbnRyeSwgbWFwcGluZywgbGVuIC0gdGFib3J0LCAKKwkJY2FzX3dyaXRlX3R4ZChjcCwgcmluZywgZW50cnksIG1hcHBpbmcsIGxlbiAtIHRhYm9ydCwKIAkJCSAgICAgIGN0cmwgfCBUWF9ERVNDX1NPRiwgMCk7CiAJCWVudHJ5ID0gVFhfREVTQ19ORVhUKHJpbmcsIGVudHJ5KTsKIAotCQltZW1jcHkodHhfdGlueV9idWYoY3AsIHJpbmcsIGVudHJ5KSwgc2tiLT5kYXRhICsgCisJCW1lbWNweSh0eF90aW55X2J1ZihjcCwgcmluZywgZW50cnkpLCBza2ItPmRhdGEgKwogCQkgICAgICAgbGVuIC0gdGFib3J0LCB0YWJvcnQpOwogCQltYXBwaW5nID0gdHhfdGlueV9tYXAoY3AsIHJpbmcsIGVudHJ5LCB0ZW50cnkpOwogCQljYXNfd3JpdGVfdHhkKGNwLCByaW5nLCBlbnRyeSwgbWFwcGluZywgdGFib3J0LCBjdHJsLAogCQkJICAgICAgKG5yX2ZyYWdzID09IDApKTsKIAl9IGVsc2UgewotCQljYXNfd3JpdGVfdHhkKGNwLCByaW5nLCBlbnRyeSwgbWFwcGluZywgbGVuLCBjdHJsIHwgCisJCWNhc193cml0ZV90eGQoY3AsIHJpbmcsIGVudHJ5LCBtYXBwaW5nLCBsZW4sIGN0cmwgfAogCQkJICAgICAgVFhfREVTQ19TT0YsIChucl9mcmFncyA9PSAwKSk7CiAJfQogCWVudHJ5ID0gVFhfREVTQ19ORVhUKHJpbmcsIGVudHJ5KTsKQEAgLTI4NzYsMTAgKzI4NzYsMTAgQEAKIAkJCWNhc193cml0ZV90eGQoY3AsIHJpbmcsIGVudHJ5LCBtYXBwaW5nLCBsZW4gLSB0YWJvcnQsCiAJCQkJICAgICAgY3RybCwgMCk7CiAJCQllbnRyeSA9IFRYX0RFU0NfTkVYVChyaW5nLCBlbnRyeSk7Ci0JCQkKKwogCQkJYWRkciA9IGNhc19wYWdlX21hcChmcmFncC0+cGFnZSk7CiAJCQltZW1jcHkodHhfdGlueV9idWYoY3AsIHJpbmcsIGVudHJ5KSwKLQkJCSAgICAgICBhZGRyICsgZnJhZ3AtPnBhZ2Vfb2Zmc2V0ICsgbGVuIC0gdGFib3J0LCAKKwkJCSAgICAgICBhZGRyICsgZnJhZ3AtPnBhZ2Vfb2Zmc2V0ICsgbGVuIC0gdGFib3J0LAogCQkJICAgICAgIHRhYm9ydCk7CiAJCQljYXNfcGFnZV91bm1hcChhZGRyKTsKIAkJCW1hcHBpbmcgPSB0eF90aW55X21hcChjcCwgcmluZywgZW50cnksIHRlbnRyeSk7CkBAIC0yODk4LDEyICsyODk4LDEyIEBACiAJaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQoY3ApKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4WyVkXSBxdWV1ZWQsIHNsb3QgJWQsIHNrYmxlbiAlZCwgIgogCQkgICAgICAgImF2YWlsICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCByaW5nLCBlbnRyeSwgc2tiLT5sZW4sIAorCQkgICAgICAgZGV2LT5uYW1lLCByaW5nLCBlbnRyeSwgc2tiLT5sZW4sCiAJCSAgICAgICBUWF9CVUZGU19BVkFJTChjcCwgcmluZykpOwogCXdyaXRlbChlbnRyeSwgY3AtPnJlZ3MgKyBSRUdfVFhfS0lDS04ocmluZykpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwLT50eF9sb2NrW3JpbmddLCBmbGFncyk7CiAJcmV0dXJuIDA7Ci19IAorfQogCiBzdGF0aWMgaW50IGNhc19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0yOTEyLDcgKzI5MTIsNyBAQAogCS8qIHRoaXMgaXMgb25seSB1c2VkIGFzIGEgbG9hZC1iYWxhbmNpbmcgaGludCwgc28gaXQgZG9lc24ndAogCSAqIG5lZWQgdG8gYmUgU01QIHNhZmUKIAkgKi8KLQlzdGF0aWMgaW50IHJpbmc7IAorCXN0YXRpYyBpbnQgcmluZzsKIAogCWlmIChza2JfcGFkdG8oc2tiLCBjcC0+bWluX2ZyYW1lX3NpemUpKQogCQlyZXR1cm4gMDsKQEAgLTI5NDMsMTQgKzI5NDMsMTQgQEAKIAkvKiBlbmFibGUgY29tcGxldGlvbiB3cml0ZWJhY2tzLCBlbmFibGUgcGFjZWQgbW9kZSwKIAkgKiBkaXNhYmxlIHJlYWQgcGlwZSwgYW5kIGRpc2FibGUgcHJlLWludGVycnVwdCBjb21wd2JzCiAJICovCi0JdmFsID0gICBUWF9DRkdfQ09NUFdCX1ExIHwgVFhfQ0ZHX0NPTVBXQl9RMiB8IAorCXZhbCA9ICAgVFhfQ0ZHX0NPTVBXQl9RMSB8IFRYX0NGR19DT01QV0JfUTIgfAogCQlUWF9DRkdfQ09NUFdCX1EzIHwgVFhfQ0ZHX0NPTVBXQl9RNCB8Ci0JCVRYX0NGR19ETUFfUkRQSVBFX0RJUyB8IFRYX0NGR19QQUNFRF9NT0RFIHwgCisJCVRYX0NGR19ETUFfUkRQSVBFX0RJUyB8IFRYX0NGR19QQUNFRF9NT0RFIHwKIAkJVFhfQ0ZHX0lOVFJfQ09NUFdCX0RJUzsKIAogCS8qIHdyaXRlIG91dCB0eCByaW5nIGluZm8gYW5kIHR4IGRlc2MgYmFzZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1RYX1JJTkdTOyBpKyspIHsKLQkJb2ZmID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3R4ZHNbaV0gLSAKKwkJb2ZmID0gKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X3R4ZHNbaV0gLQogCQkJKHVuc2lnbmVkIGxvbmcpIGNwLT5pbml0X2Jsb2NrOwogCiAJCXZhbCB8PSBDQVNfVFhfUklOR05fQkFTRShpKTsKQEAgLTI5OTEsNyArMjk5MSw3IEBACiB7CiAJdTMyIHJ4Y2ZnID0gMDsKIAlpbnQgaTsKLQkKKwogCWlmIChjcC0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJ4Y2ZnIHw9IE1BQ19SWF9DRkdfUFJPTUlTQ19FTjsKIApAQCAtMzAxNiwxNiArMzAxNiwxNiBAQAogCQkJCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTihpKjMgKyAyKSk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQl3cml0ZWwoKGRtaS0+ZG1pX2FkZHJbNF0gPDwgOCkgfCBkbWktPmRtaV9hZGRyWzVdLCAKKwkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkcls0XSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbNV0sCiAJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDApKTsKLQkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkclsyXSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbM10sIAorCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzJdIDw8IDgpIHwgZG1pLT5kbWlfYWRkclszXSwKIAkJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMSkpOwotCQkJd3JpdGVsKChkbWktPmRtaV9hZGRyWzBdIDw8IDgpIHwgZG1pLT5kbWlfYWRkclsxXSwgCisJCQl3cml0ZWwoKGRtaS0+ZG1pX2FkZHJbMF0gPDwgOCkgfCBkbWktPmRtaV9hZGRyWzFdLAogCQkJICAgICAgIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTihpKjMgKyAyKSk7CiAJCQlkbWkgPSBkbWktPm5leHQ7CiAJCX0KIAotCQkvKiB1c2UgaHcgaGFzaCB0YWJsZSBmb3IgdGhlIG5leHQgc2VyaWVzIG9mIAorCQkvKiB1c2UgaHcgaGFzaCB0YWJsZSBmb3IgdGhlIG5leHQgc2VyaWVzIG9mCiAJCSAqIG11bHRpY2FzdCBhZGRyZXNzZXMKIAkJICovCiAJCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOwpAQCAtMzAzNiw3ICszMDM2LDcgQEAKIAkJCWRtaSA9IGRtaS0+bmV4dDsKIAkJfQogCSAgICAJZm9yIChpPTA7IGkgPCAxNjsgaSsrKQotCQkJd3JpdGVsKGhhc2hfdGFibGVbaV0sIGNwLT5yZWdzICsgCisJCQl3cml0ZWwoaGFzaF90YWJsZVtpXSwgY3AtPnJlZ3MgKwogCQkJICAgICAgIFJFR19NQUNfSEFTSF9UQUJMRU4oaSkpOwogCQlyeGNmZyB8PSBNQUNfUlhfQ0ZHX0hBU0hfRklMVEVSX0VOOwogCX0KQEAgLTMxMjEsMjMgKzMxMjEsMjMgQEAKIAl3cml0ZWwoMHgwMCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0lQRzApOwogCXdyaXRlbCgweDA4LCBjcC0+cmVncyArIFJFR19NQUNfSVBHMSk7CiAJd3JpdGVsKDB4MDQsIGNwLT5yZWdzICsgUkVHX01BQ19JUEcyKTsKLQkKKwogCS8qIGNoYW5nZSBsYXRlciBmb3IgODAyLjN6ICovCi0Jd3JpdGVsKDB4NDAsIGNwLT5yZWdzICsgUkVHX01BQ19TTE9UX1RJTUUpOyAKKwl3cml0ZWwoMHg0MCwgY3AtPnJlZ3MgKyBSRUdfTUFDX1NMT1RfVElNRSk7CiAKIAkvKiBtaW4gZnJhbWUgKyBGQ1MgKi8KIAl3cml0ZWwoRVRIX1pMRU4gKyA0LCBjcC0+cmVncyArIFJFR19NQUNfRlJBTUVTSVpFX01JTik7CiAKIAkvKiBFdGhlcm5ldCBwYXlsb2FkICsgaGVhZGVyICsgRkNTICsgb3B0aW9uYWwgVkxBTiB0YWcuIE5PVEU6IHdlCi0JICogc3BlY2lmeSB0aGUgbWF4aW11bSBmcmFtZSBzaXplIHRvIHByZXZlbnQgUlggdGFnIGVycm9ycyBvbiAKKwkgKiBzcGVjaWZ5IHRoZSBtYXhpbXVtIGZyYW1lIHNpemUgdG8gcHJldmVudCBSWCB0YWcgZXJyb3JzIG9uCiAJICogb3ZlcnNpemVkIGZyYW1lcy4KIAkgKi8KIAl3cml0ZWwoQ0FTX0JBU0UoTUFDX0ZSQU1FU0laRV9NQVhfQlVSU1QsIDB4MjAwMCkgfAotCSAgICAgICBDQVNfQkFTRShNQUNfRlJBTUVTSVpFX01BWF9GUkFNRSwgCi0JCQkoQ0FTX01BWF9NVFUgKyBFVEhfSExFTiArIDQgKyA0KSksIAorCSAgICAgICBDQVNfQkFTRShNQUNfRlJBTUVTSVpFX01BWF9GUkFNRSwKKwkJCShDQVNfTUFYX01UVSArIEVUSF9ITEVOICsgNCArIDQpKSwKIAkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0ZSQU1FU0laRV9NQVgpOwogCi0JLyogTk9URTogY3JjX3NpemUgaXMgdXNlZCBhcyBhIHN1cnJvZ2F0ZSBmb3IgaGFsZi1kdXBsZXguIAorCS8qIE5PVEU6IGNyY19zaXplIGlzIHVzZWQgYXMgYSBzdXJyb2dhdGUgZm9yIGhhbGYtZHVwbGV4LgogCSAqIHdvcmthcm91bmQgc2F0dXJuIGhhbGYtZHVwbGV4IGlzc3VlIGJ5IGluY3JlYXNpbmcgcHJlYW1ibGUKIAkgKiBzaXplIHRvIDY1IGJ5dGVzLgogCSAqLwpAQCAtMzE4MCw3ICszMTgwLDcgQEAKIAkgKiBzcGluX2xvY2tfaXJxc2F2ZSwgYnV0IHdlIGFyZSBjYWxsZWQgb25seSBpbiBjYXNfaW5pdF9odyBhbmQKIAkgKiBjYXNfaW5pdF9odyBpcyBwcm90ZWN0ZWQgYnkgY2FzX2xvY2tfYWxsLCB3aGljaCBjYWxscwogCSAqIHNwaW5fbG9ja19pcnEgKHNvIGl0IGRvZXNuJ3QgbmVlZCB0byBzYXZlIHRoZSBmbGFncywgYW5kCi0JICogd2Ugc2hvdWxkIGJlIE9LIGZvciB0aGUgd3JpdGVsLCBhcyB0aGF0IGlzIHRoZSBvbmx5IAorCSAqIHdlIHNob3VsZCBiZSBPSyBmb3IgdGhlIHdyaXRlbCwgYXMgdGhhdCBpcyB0aGUgb25seQogCSAqIGRpZmZlcmVuY2UpLgogCSAqLwogCWNwLT5tYWNfcnhfY2ZnID0gcnhjZmcgPSBjYXNfc2V0dXBfbXVsdGljYXN0KGNwKTsKQEAgLTMyMjksNyArMzIyOSw3IEBACiB7CiAJaW50IGxlbiA9IHN0cmxlbihzdHIpICsgMTsKIAlpbnQgaTsKLQkKKwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAocmVhZGIocCArIGkpICE9IHN0cltpXSkKIAkJCXJldHVybiAwOwpAQCAtMzI0Niw3ICszMjQ2LDcgQEAKICAqICAgICBudW1iZXIuCiAgKiAgMykgZmliZXIgY2FyZHMgZG9uJ3QgaGF2ZSBicmlkZ2VzLCBzbyB0aGVpciBzbG90IG51bWJlcnMgZG9uJ3QKICAqICAgICBtZWFuIGFueXRoaW5nLgotICogIDQpIHdlIGRvbid0IGFjdHVhbGx5IGtub3cgd2UgaGF2ZSBhIGZpYmVyIGNhcmQgdW50aWwgYWZ0ZXIgCisgKiAgNCkgd2UgZG9uJ3QgYWN0dWFsbHkga25vdyB3ZSBoYXZlIGEgZmliZXIgY2FyZCB1bnRpbCBhZnRlcgogICogICAgIHRoZSBtYWMgYWRkcmVzc2VzIGFyZSBwYXJzZWQuCiAgKi8KIHN0YXRpYyBpbnQgY2FzX2dldF92cGRfaW5mbyhzdHJ1Y3QgY2FzICpjcCwgdW5zaWduZWQgY2hhciAqZGV2X2FkZHIsCkBAIC0zMjc4LDE1ICszMjc4LDE1IEBACiAJCSAgICAocmVhZGIocCArIGkgKyAxKSA9PSAweDQzKSAmJgogCQkgICAgKHJlYWRiKHAgKyBpICsgMikgPT0gMHg0OSkgJiYKIAkJICAgIChyZWFkYihwICsgaSArIDMpID09IDB4NTIpKSB7Ci0JCQliYXNlID0gcCArIChyZWFkYihwICsgaSArIDgpIHwgCisJCQliYXNlID0gcCArIChyZWFkYihwICsgaSArIDgpIHwKIAkJCQkgICAgKHJlYWRiKHAgKyBpICsgOSkgPDwgOCkpOwogCQkJYnJlYWs7Ci0JCX0JCQorCQl9CiAJfQogCiAJaWYgKCFiYXNlIHx8IChyZWFkYihiYXNlKSAhPSAweDgyKSkKIAkJZ290byB1c2VfcmFuZG9tX21hY19hZGRyOwotCQorCiAJaSA9IChyZWFkYihiYXNlICsgMSkgfCAocmVhZGIoYmFzZSArIDIpIDw8IDgpKSArIDM7CiAJd2hpbGUgKGkgPCBFWFBBTlNJT05fUk9NX1NJWkUpIHsKIAkJaWYgKHJlYWRiKGJhc2UgKyBpKSAhPSAweDkwKSAvKiBubyB2cGQgZm91bmQgKi8KQEAgLTMzMDQsMjAgKzMzMDQsMjAgQEAKIAkJCWNoYXIgdHlwZTsKIAogCQkJcCArPSAzOwotCQkJCisKIAkJCS8qIGxvb2sgZm9yIHRoZSBmb2xsb3dpbmcgdGhpbmdzOgogCQkJICogLS0gY29ycmVjdCBsZW5ndGggPT0gMjkKLQkJCSAqIDMgKHR5cGUpICsgMiAoc2l6ZSkgKyAKLQkJCSAqIDE4IChzdHJsZW4oImxvY2FsLW1hYy1hZGRyZXNzIikgKyAxKSArIAotCQkJICogNiAobWFjIGFkZHIpIAorCQkJICogMyAodHlwZSkgKyAyIChzaXplKSArCisJCQkgKiAxOCAoc3RybGVuKCJsb2NhbC1tYWMtYWRkcmVzcyIpICsgMSkgKworCQkJICogNiAobWFjIGFkZHIpCiAJCQkgKiAtLSBWUEQgSW5zdGFuY2UgJ0knCiAJCQkgKiAtLSBWUEQgVHlwZSBCeXRlcyAnQicKIAkJCSAqIC0tIFZQRCBkYXRhIGxlbmd0aCA9PSA2CiAJCQkgKiAtLSBwcm9wZXJ0eSBzdHJpbmcgPT0gbG9jYWwtbWFjLWFkZHJlc3MKLQkJCSAqIAorCQkJICoKIAkJCSAqIC0tIGNvcnJlY3QgbGVuZ3RoID09IDI0Ci0JCQkgKiAzICh0eXBlKSArIDIgKHNpemUpICsgCi0JCQkgKiAxMiAoc3RybGVuKCJlbnRyb3B5LWRldiIpICsgMSkgKyAKKwkJCSAqIDMgKHR5cGUpICsgMiAoc2l6ZSkgKworCQkJICogMTIgKHN0cmxlbigiZW50cm9weS1kZXYiKSArIDEpICsKIAkJCSAqIDcgKHN0cmxlbigidm1zMTEwIikgKyAxKQogCQkJICogLS0gVlBEIEluc3RhbmNlICdJJwogCQkJICogLS0gVlBEIFR5cGUgU3RyaW5nICdCJwpAQCAtMzMyNSwxNyArMzMyNSwxNyBAQAogCQkJICogLS0gcHJvcGVydHkgc3RyaW5nID09IGVudHJvcHktZGV2CiAJCQkgKgogCQkJICogLS0gY29ycmVjdCBsZW5ndGggPT0gMTgKLQkJCSAqIDMgKHR5cGUpICsgMiAoc2l6ZSkgKyAKLQkJCSAqIDkgKHN0cmxlbigicGh5LXR5cGUiKSArIDEpICsgCisJCQkgKiAzICh0eXBlKSArIDIgKHNpemUpICsKKwkJCSAqIDkgKHN0cmxlbigicGh5LXR5cGUiKSArIDEpICsKIAkJCSAqIDQgKHN0cmxlbigicGNzIikgKyAxKQogCQkJICogLS0gVlBEIEluc3RhbmNlICdJJwogCQkJICogLS0gVlBEIFR5cGUgU3RyaW5nICdTJwogCQkJICogLS0gVlBEIGRhdGEgbGVuZ3RoID09IDQKIAkJCSAqIC0tIHByb3BlcnR5IHN0cmluZyA9PSBwaHktdHlwZQotCQkJICogCisJCQkgKgogCQkJICogLS0gY29ycmVjdCBsZW5ndGggPT0gMjMKLQkJCSAqIDMgKHR5cGUpICsgMiAoc2l6ZSkgKyAKLQkJCSAqIDE0IChzdHJsZW4oInBoeS1pbnRlcmZhY2UiKSArIDEpICsgCisJCQkgKiAzICh0eXBlKSArIDIgKHNpemUpICsKKwkJCSAqIDE0IChzdHJsZW4oInBoeS1pbnRlcmZhY2UiKSArIDEpICsKIAkJCSAqIDQgKHN0cmxlbigicGNzIikgKyAxKQogCQkJICogLS0gVlBEIEluc3RhbmNlICdJJwogCQkJICogLS0gVlBEIFR5cGUgU3RyaW5nICdTJwpAQCAtMzM0OSwxNCArMzM0OSwxNCBAQAogCQkJdHlwZSA9IHJlYWRiKHAgKyAzKTsKIAkJCWlmICh0eXBlID09ICdCJykgewogCQkJCWlmICgoa2xlbiA9PSAyOSkgJiYgcmVhZGIocCArIDQpID09IDYgJiYKLQkJCQkgICAgY2FzX3ZwZF9tYXRjaChwICsgNSwgCisJCQkJICAgIGNhc192cGRfbWF0Y2gocCArIDUsCiAJCQkJCQkgICJsb2NhbC1tYWMtYWRkcmVzcyIpKSB7Ci0JCQkJCWlmIChtYWNfb2ZmKysgPiBvZmZzZXQpIAorCQkJCQlpZiAobWFjX29mZisrID4gb2Zmc2V0KQogCQkJCQkJZ290byBuZXh0OwogCiAJCQkJCS8qIHNldCBtYWMgYWRkcmVzcyAqLwotCQkJCQlmb3IgKGogPSAwOyBqIDwgNjsgaisrKSAKLQkJCQkJCWRldl9hZGRyW2pdID0gCisJCQkJCWZvciAoaiA9IDA7IGogPCA2OyBqKyspCisJCQkJCQlkZXZfYWRkcltqXSA9CiAJCQkJCQkJcmVhZGIocCArIDIzICsgaik7CiAJCQkJCWdvdG8gZm91bmRfbWFjOwogCQkJCX0KQEAgLTMzNjYsNyArMzM2Niw3IEBACiAJCQkJZ290byBuZXh0OwogCiAjaWZkZWYgVVNFX0VOVFJPUFlfREVWCi0JCQlpZiAoKGtsZW4gPT0gMjQpICYmIAorCQkJaWYgKChrbGVuID09IDI0KSAmJgogCQkJICAgIGNhc192cGRfbWF0Y2gocCArIDUsICJlbnRyb3B5LWRldiIpICYmCiAJCQkgICAgY2FzX3ZwZF9tYXRjaChwICsgMTcsICJ2bXMxMTAiKSkgewogCQkJCWNwLT5jYXNfZmxhZ3MgfD0gQ0FTX0ZMQUdfRU5UUk9QWV9ERVY7CkBAIC0zMzg0LDcgKzMzODQsNyBAQAogCQkJCQlnb3RvIGZvdW5kX3BoeTsKIAkJCQl9CiAJCQl9Ci0JCQkKKwogCQkJaWYgKChrbGVuID09IDIzKSAmJiByZWFkYihwICsgNCkgPT0gNCAmJgogCQkJICAgIGNhc192cGRfbWF0Y2gocCArIDUsICJwaHktaW50ZXJmYWNlIikpIHsKIAkJCQlpZiAoY2FzX3ZwZF9tYXRjaChwICsgMTksICJwY3MiKSkgewpAQCAtMzQ2MiwxMiArMzQ2MiwxMiBAQAogCWludCBpOwogCiAJLyogZ2V0IHBhZ2Ugc2l6ZSBmb3IgcnggYnVmZmVycy4gKi8KLQljcC0+cGFnZV9vcmRlciA9IDA7IAorCWNwLT5wYWdlX29yZGVyID0gMDsKICNpZmRlZiBVU0VfUEFHRV9PUkRFUgogCWlmIChQQUdFX1NISUZUIDwgQ0FTX0pVTUJPX1BBR0VfU0hJRlQpIHsKIAkJLyogc2VlIGlmIHdlIGNhbiBhbGxvY2F0ZSBsYXJnZXIgcGFnZXMgKi8KLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlcyhHRlBfQVRPTUlDLCAKLQkJCQkJCUNBU19KVU1CT19QQUdFX1NISUZUIC0gCisJCXN0cnVjdCBwYWdlICpwYWdlID0gYWxsb2NfcGFnZXMoR0ZQX0FUT01JQywKKwkJCQkJCUNBU19KVU1CT19QQUdFX1NISUZUIC0KIAkJCQkJCVBBR0VfU0hJRlQpOwogCQlpZiAocGFnZSkgewogCQkJX19mcmVlX3BhZ2VzKHBhZ2UsIENBU19KVU1CT19QQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7CkBAIC0zNDgzLDE1ICszNDgzLDE1IEBACiAJY3AtPnR4X2ZpZm9fc2l6ZSA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fU0laRSkgKiA2NDsKIAljcC0+cnhfZmlmb19zaXplID0gUlhfRklGT19TSVpFOwogCi0JLyogZmluaXNoIHBoeSBkZXRlcm1pbmF0aW9uLiBNRElPMSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgTURJTzAgaWYgCisJLyogZmluaXNoIHBoeSBkZXRlcm1pbmF0aW9uLiBNRElPMSB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgTURJTzAgaWYKIAkgKiB0aGV5J3JlIGJvdGggY29ubmVjdGVkLgogCSAqLwotCWNwLT5waHlfdHlwZSA9IGNhc19nZXRfdnBkX2luZm8oY3AsIGNwLT5kZXYtPmRldl9hZGRyLCAKKwljcC0+cGh5X3R5cGUgPSBjYXNfZ2V0X3ZwZF9pbmZvKGNwLCBjcC0+ZGV2LT5kZXZfYWRkciwKIAkJCQkJUENJX1NMT1QocGRldi0+ZGV2Zm4pKTsKIAlpZiAoY3AtPnBoeV90eXBlICYgQ0FTX1BIWV9TRVJERVMpIHsKIAkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR18xMDAwTUJfQ0FQOwogCQlyZXR1cm4gMDsgLyogbm8gbW9yZSBjaGVja2luZyBuZWVkZWQgKi8KLQl9IAorCX0KIAogCS8qIE1JSSAqLwogCWNmZyA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9DRkcpOwpAQCAtMzUyNSw3ICszNTI1LDcgQEAKIGRvbmU6CiAJLyogc2VlIGlmIHdlIGNhbiBkbyBnaWdhYml0ICovCiAJY2ZnID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfQk1TUik7Ci0JaWYgKChjZmcgJiBDQVNfQk1TUl8xMDAwX0VYVEVORCkgJiYgCisJaWYgKChjZmcgJiBDQVNfQk1TUl8xMDAwX0VYVEVORCkgJiYKIAkgICAgY2FzX3BoeV9yZWFkKGNwLCBDQVNfTUlJXzEwMDBfRVhURU5EKSkKIAkJY3AtPmNhc19mbGFncyB8PSBDQVNfRkxBR18xMDAwTUJfQ0FQOwogCXJldHVybiAwOwpAQCAtMzUzNyw3ICszNTM3LDcgQEAKIAlpbnQgaTsKIAl1MzIgdmFsOwogCWludCB0eGZhaWxlZCA9IDA7Ci0JCisKIAkvKiBlbmFibGUgZG1hICovCiAJdmFsID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKSB8IFRYX0NGR19ETUFfRU47CiAJd3JpdGVsKHZhbCwgY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKTsKQEAgLTM1NjMsOCArMzU2Myw4IEBACiAJCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOwogCQlpZiAoKHZhbCAmIE1BQ19SWF9DRkdfRU4pKSB7CiAJCQlpZiAodHhmYWlsZWQpIHsKLQkJCSAgcHJpbnRrKEtFUk5fRVJSIAotCQkJCSAiJXM6IGVuYWJsaW5nIG1hYyBmYWlsZWQgW3R4OiUwOHg6JTA4eF0uXG4iLCAKKwkJCSAgcHJpbnRrKEtFUk5fRVJSCisJCQkJICIlczogZW5hYmxpbmcgbWFjIGZhaWxlZCBbdHg6JTA4eDolMDh4XS5cbiIsCiAJCQkJIGNwLT5kZXYtPm5hbWUsCiAJCQkJIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSwKIAkJCQkgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpKTsKQEAgLTM1NzMsNyArMzU3Myw3IEBACiAJCX0KIAkJdWRlbGF5KDEwKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogZW5hYmxpbmcgbWFjIGZhaWxlZCBbJXM6JTA4eDolMDh4XS5cbiIsIAorCXByaW50ayhLRVJOX0VSUiAiJXM6IGVuYWJsaW5nIG1hYyBmYWlsZWQgWyVzOiUwOHg6JTA4eF0uXG4iLAogCSAgICAgICBjcC0+ZGV2LT5uYW1lLAogCSAgICAgICAodHhmYWlsZWQ/ICJ0eCxyeCI6InJ4IiksCiAJICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01JRl9TVEFURV9NQUNISU5FKSwKQEAgLTM1ODUsMTEgKzM1ODUsMTEgQEAKIAl3cml0ZWwoMCwgY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9UQUlMKTsKIAogCWlmIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpIHsKLQkJaWYgKE5fUlhfREVTQ19SSU5HUyA+IDEpIAotCQkJd3JpdGVsKFJYX0RFU0NfUklOR05fU0laRSgxKSAtIDQsIAorCQlpZiAoTl9SWF9ERVNDX1JJTkdTID4gMSkKKwkJCXdyaXRlbChSWF9ERVNDX1JJTkdOX1NJWkUoMSkgLSA0LAogCQkJICAgICAgIGNwLT5yZWdzICsgUkVHX1BMVVNfUlhfS0lDSzEpOwogCi0JCWZvciAoaSA9IDE7IGkgPCBOX1JYX0NPTVBfUklOR1M7IGkrKykgCisJCWZvciAoaSA9IDE7IGkgPCBOX1JYX0NPTVBfUklOR1M7IGkrKykKIAkJCXdyaXRlbCgwLCBjcC0+cmVncyArIFJFR19QTFVTX1JYX0NPTVBOX1RBSUwoaSkpOwogCX0KIH0KQEAgLTM2MTUsNyArMzYxNSw3IEBACiAJKmZkID0gMDsKIAkqc3BkID0gMTA7CiAJKnBhdXNlID0gMDsKLQkKKwogCS8qIHVzZSBHTUlJIHJlZ2lzdGVycyAqLwogCXZhbCA9IGNhc19waHlfcmVhZChjcCwgTUlJX0xQQSk7CiAJaWYgKHZhbCAmIENBU19MUEFfUEFVU0UpCkBAIC0zNjU2LDcgKzM2NTYsNyBAQAogCQljYXNfbWlmX3BvbGwoY3AsIDApOwogCQl2YWwgPSBjYXNfcGh5X3JlYWQoY3AsIE1JSV9CTUNSKTsKIAkJaWYgKHZhbCAmIEJNQ1JfQU5FTkFCTEUpIHsKLQkJCWNhc19yZWFkX21paV9saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwgJnNwZWVkLCAKKwkJCWNhc19yZWFkX21paV9saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwgJnNwZWVkLAogCQkJCQkgICAgICAgJnBhdXNlKTsKIAkJfSBlbHNlIHsKIAkJCWlmICh2YWwgJiBCTUNSX0ZVTExEUExYKQpAQCAtMzY4OSw3ICszNjg5LDcgQEAKIAkJaWYgKCFmdWxsX2R1cGxleCkKIAkJCXZhbCB8PSBNQUNfWElGX0RJU0FCTEVfRUNITzsKIAl9Ci0JaWYgKGZ1bGxfZHVwbGV4KSAKKwlpZiAoZnVsbF9kdXBsZXgpCiAJCXZhbCB8PSBNQUNfWElGX0ZEUExYX0xFRDsKIAlpZiAoc3BlZWQgPT0gMTAwMCkKIAkJdmFsIHw9IE1BQ19YSUZfR01JSV9NT0RFOwpAQCAtMzcwOSwxNyArMzcwOSwxNyBAQAogCS8qIHZhbCBub3cgc2V0IHVwIGZvciBSRUdfTUFDX1RYX0NGRyAqLwogCiAJLyogSWYgZ2lnYWJpdCBhbmQgaGFsZi1kdXBsZXgsIGVuYWJsZSBjYXJyaWVyIGV4dGVuc2lvbgotCSAqIG1vZGUuICBpbmNyZWFzZSBzbG90IHRpbWUgdG8gNTEyIGJ5dGVzIGFzIHdlbGwuIAorCSAqIG1vZGUuICBpbmNyZWFzZSBzbG90IHRpbWUgdG8gNTEyIGJ5dGVzIGFzIHdlbGwuCiAJICogZWxzZSwgZGlzYWJsZSBpdCBhbmQgbWFrZSBzdXJlIHNsb3QgdGltZSBpcyA2NCBieXRlcy4KIAkgKiBhbHNvIGFjdGl2YXRlIGNoZWNrc3VtIGJ1ZyB3b3JrYXJvdW5kCiAJICovCiAJaWYgKChzcGVlZCA9PSAxMDAwKSAmJiAhZnVsbF9kdXBsZXgpIHsKLQkJd3JpdGVsKHZhbCB8IE1BQ19UWF9DRkdfQ0FSUklFUl9FWFRFTkQsIAorCQl3cml0ZWwodmFsIHwgTUFDX1RYX0NGR19DQVJSSUVSX0VYVEVORCwKIAkJICAgICAgIGNwLT5yZWdzICsgUkVHX01BQ19UWF9DRkcpOwogCiAJCXZhbCA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19SWF9DRkcpOwogCQl2YWwgJj0gfk1BQ19SWF9DRkdfU1RSSVBfRkNTOyAvKiBjaGVja3N1bSB3b3JrYXJvdW5kICovCi0JCXdyaXRlbCh2YWwgfCBNQUNfUlhfQ0ZHX0NBUlJJRVJfRVhURU5ELCAKKwkJd3JpdGVsKHZhbCB8IE1BQ19SWF9DRkdfQ0FSUklFUl9FWFRFTkQsCiAJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKIAogCQl3cml0ZWwoMHgyMDAsIGNwLT5yZWdzICsgUkVHX01BQ19TTE9UX1RJTUUpOwpAQCAtMzczMSw3ICszNzMxLDcgQEAKIAl9IGVsc2UgewogCQl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19NQUNfVFhfQ0ZHKTsKIAotCQkvKiBjaGVja3N1bSBidWcgd29ya2Fyb3VuZC4gZG9uJ3Qgc3RyaXAgRkNTIHdoZW4gaW4gCisJCS8qIGNoZWNrc3VtIGJ1ZyB3b3JrYXJvdW5kLiBkb24ndCBzdHJpcCBGQ1Mgd2hlbiBpbgogCQkgKiBoYWxmLWR1cGxleCBtb2RlCiAJCSAqLwogCQl2YWwgPSByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKQEAgLTM3NDQsNyArMzc0NCw3IEBACiAJCQljcC0+Y3JjX3NpemUgPSA0OwogCQkJY3AtPm1pbl9mcmFtZV9zaXplID0gQ0FTX01JTl9GUkFNRTsKIAkJfQotCQl3cml0ZWwodmFsICYgfk1BQ19SWF9DRkdfQ0FSUklFUl9FWFRFTkQsIAorCQl3cml0ZWwodmFsICYgfk1BQ19SWF9DRkdfQ0FSUklFUl9FWFRFTkQsCiAJCSAgICAgICBjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKIAkJd3JpdGVsKDB4NDAsIGNwLT5yZWdzICsgUkVHX01BQ19TTE9UX1RJTUUpOwogCX0KQEAgLTM3NzIsNyArMzc3Miw3IEBACiAJCXZhbCB8PSBNQUNfQ1RSTF9DRkdfU0VORF9QQVVTRV9FTjsKIAkJaWYgKHBhdXNlICYgMHgwMSkgeyAvKiBzeW1tZXRyaWMgcGF1c2UgKi8KIAkJCXZhbCB8PSBNQUNfQ1RSTF9DRkdfUkVDVl9QQVVTRV9FTjsKLQkJfSAKKwkJfQogCX0KIAl3cml0ZWwodmFsLCBjcC0+cmVncyArIFJFR19NQUNfQ1RSTF9DRkcpOwogCWNhc19zdGFydF9kbWEoY3ApOwpAQCAtMzgwNCw3ICszODA0LDcgQEAKICAqLwogc3RhdGljIHZvaWQgY2FzX2hhcmRfcmVzZXQoc3RydWN0IGNhcyAqY3ApCiB7Ci0Jd3JpdGVsKEJJTV9MT0NBTF9ERVZfU09GVF8wLCBjcC0+cmVncyArIFJFR19CSU1fTE9DQUxfREVWX0VOKTsgCisJd3JpdGVsKEJJTV9MT0NBTF9ERVZfU09GVF8wLCBjcC0+cmVncyArIFJFR19CSU1fTE9DQUxfREVWX0VOKTsKIAl1ZGVsYXkoMjApOwogCXBjaV9yZXN0b3JlX3N0YXRlKGNwLT5wZGV2KTsKIH0KQEAgLTM4MjIsNyArMzgyMiw3IEBACiAJCSAqIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5nIGlmIHRoZSBjaGlwIGlzIHNldCBpbnRvIGEKIAkJICogbG9vcGJhY2sgbW9kZS4KIAkJICovCi0JCXdyaXRlbCgoU1dfUkVTRVRfVFggfCBTV19SRVNFVF9SWCB8IFNXX1JFU0VUX0JMT0NLX1BDU19TTElOSyksIAorCQl3cml0ZWwoKFNXX1JFU0VUX1RYIHwgU1dfUkVTRVRfUlggfCBTV19SRVNFVF9CTE9DS19QQ1NfU0xJTkspLAogCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfU1dfUkVTRVQpOwogCX0gZWxzZSB7CiAJCXdyaXRlbChTV19SRVNFVF9UWCB8IFNXX1JFU0VUX1JYLCBjcC0+cmVncyArIFJFR19TV19SRVNFVCk7CkBAIC0zODQyLDE2ICszODQyLDE2IEBACiAKIGRvbmU6CiAJLyogZW5hYmxlIHZhcmlvdXMgQklNIGludGVycnVwdHMgKi8KLQl3cml0ZWwoQklNX0NGR19EUEFSX0lOVFJfRU5BQkxFIHwgQklNX0NGR19STUFfSU5UUl9FTkFCTEUgfCAKKwl3cml0ZWwoQklNX0NGR19EUEFSX0lOVFJfRU5BQkxFIHwgQklNX0NGR19STUFfSU5UUl9FTkFCTEUgfAogCSAgICAgICBCSU1fQ0ZHX1JUQV9JTlRSX0VOQUJMRSwgY3AtPnJlZ3MgKyBSRUdfQklNX0NGRyk7CiAKIAkvKiBjbGVhciBvdXQgcGNpIGVycm9yIHN0YXR1cyBtYXNrIGZvciBoYW5kbGVkIGVycm9ycy4KIAkgKiB3ZSBkb24ndCBkZWFsIHdpdGggRE1BIGNvdW50ZXIgb3ZlcmZsb3dzIGFzIHRoZXkgaGFwcGVuCiAJICogYWxsIHRoZSB0aW1lLgogCSAqLwotCXdyaXRlbCgweEZGRkZGRkZGVSAmIH4oUENJX0VSUl9CQURBQ0sgfCBQQ0lfRVJSX0RUUlRPIHwgCi0JCQkgICAgICAgUENJX0VSUl9PVEhFUiB8IFBDSV9FUlJfQklNX0RNQV9XUklURSB8IAotCQkJICAgICAgIFBDSV9FUlJfQklNX0RNQV9SRUFEKSwgY3AtPnJlZ3MgKyAKKwl3cml0ZWwoMHhGRkZGRkZGRlUgJiB+KFBDSV9FUlJfQkFEQUNLIHwgUENJX0VSUl9EVFJUTyB8CisJCQkgICAgICAgUENJX0VSUl9PVEhFUiB8IFBDSV9FUlJfQklNX0RNQV9XUklURSB8CisJCQkgICAgICAgUENJX0VSUl9CSU1fRE1BX1JFQUQpLCBjcC0+cmVncyArCiAJICAgICAgIFJFR19QQ0lfRVJSX1NUQVRVU19NQVNLKTsKIAogCS8qIHNldCB1cCBmb3IgTUlJIGJ5IGRlZmF1bHQgdG8gYWRkcmVzcyBtYWMgcnggcmVzZXQgdGltZW91dApAQCAtMzkxMiw3ICszOTEyLDcgQEAKICNlbHNlCiAJd2hpbGUgKGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKSkKIAkJc2NoZWR1bGUoKTsKLSNlbmRpZgkKKyNlbmRpZgogCS8qIEFjdHVhbGx5IHN0b3AgdGhlIGNoaXAgKi8KIAljYXNfbG9ja19hbGxfc2F2ZShjcCwgZmxhZ3MpOwogCWNhc19yZXNldChjcCwgMCk7CkBAIC0zOTQyLDcgKzM5NDIsNyBAQAogCX0KIAlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CiAjZWxzZQotCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIChjcC0+cGh5X3R5cGUgJiBDQVNfUEhZX1NFUkRFUykgPyAKKwlhdG9taWNfc2V0KCZjcC0+cmVzZXRfdGFza19wZW5kaW5nLCAoY3AtPnBoeV90eXBlICYgQ0FTX1BIWV9TRVJERVMpID8KIAkJICAgQ0FTX1JFU0VUX0FMTCA6IENBU19SRVNFVF9NVFUpOwogCXByaW50ayhLRVJOX0VSUiAicmVzZXQgY2FsbGVkIGluIGNhc19jaGFuZ2VfbXR1XG4iKTsKIAlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CkBAIC0zOTc2LDcgKzM5NzYsNyBAQAogCQkJICogbmVlZHMgdG8gYmUgdW5tYXBwZWQuCiAJCQkgKi8KIAkJCWRhZGRyID0gbGU2NF90b19jcHUodHhkW2VudF0uYnVmZmVyKTsKLQkJCWRsZW4gID0gIENBU19WQUwoVFhfREVTQ19CVUZMRU4sIAorCQkJZGxlbiAgPSAgQ0FTX1ZBTChUWF9ERVNDX0JVRkxFTiwKIAkJCQkJIGxlNjRfdG9fY3B1KHR4ZFtlbnRdLmNvbnRyb2wpKTsKIAkJCXBjaV91bm1hcF9wYWdlKGNwLT5wZGV2LCBkYWRkciwgZGxlbiwKIAkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CkBAIC00MDQ3LDcgKzQwNDcsNyBAQAogCiAJc2l6ZSA9IFJYX0RFU0NfUklOR05fU0laRShyaW5nKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0JCWlmICgocGFnZVtpXSA9IGNhc19wYWdlX2FsbG9jKGNwLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkgCisJCWlmICgocGFnZVtpXSA9IGNhc19wYWdlX2FsbG9jKGNwLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJCXJldHVybiAtMTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00MTE0LDcgKzQxMTQsNyBAQAogCQkgKiBjYWxsIHRvIGNhc19pbml0X2h3IHdpbGwgcmVzdGFydCBhdXRvIG5lZ290aWF0aW9uLgogCQkgKiBTZXR0aW5nIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgY2FzX3Jlc2V0IHRvCiAJCSAqICEocGVuZGluZyA9PSBDQVNfUkVTRVRfQUxMKSB3aWxsIHNldCB0aGlzIGFyZ3VtZW50Ci0JCSAqIHRvIDEgKGF2b2lkaW5nIHJlaW5pdGlhbGl6aW5nIHRoZSBQSFkgZm9yIHRoZSBub3JtYWwgCisJCSAqIHRvIDEgKGF2b2lkaW5nIHJlaW5pdGlhbGl6aW5nIHRoZSBQSFkgZm9yIHRoZSBub3JtYWwKIAkJICogUENTIGNhc2UpIHdoZW4gYXV0byBuZWdvdGlhdGlvbiBpcyBub3QgcmVzdGFydGVkLgogCQkgKi8KICNpZiAxCkBAIC00MTUxLDkgKzQxNTEsOSBAQAogCiAJaWYgKGxpbmtfdHJhbnNpdGlvbl90aW1lb3V0ICE9IDAgJiYKIAkgICAgY3AtPmxpbmtfdHJhbnNpdGlvbl9qaWZmaWVzX3ZhbGlkICYmCi0JICAgICgoamlmZmllcyAtIGNwLT5saW5rX3RyYW5zaXRpb25famlmZmllcykgPiAKKwkgICAgKChqaWZmaWVzIC0gY3AtPmxpbmtfdHJhbnNpdGlvbl9qaWZmaWVzKSA+CiAJICAgICAgKGxpbmtfdHJhbnNpdGlvbl90aW1lb3V0KSkpIHsKLQkJLyogT25lLXNlY29uZCBjb3VudGVyIHNvIGxpbmstZG93biB3b3JrYXJvdW5kIGRvZXNuJ3QgCisJCS8qIE9uZS1zZWNvbmQgY291bnRlciBzbyBsaW5rLWRvd24gd29ya2Fyb3VuZCBkb2Vzbid0CiAJCSAqIGNhdXNlIHJlc2V0cyB0byBvY2N1ciBzbyBmYXN0IGFzIHRvIGZvb2wgdGhlIHN3aXRjaAogCQkgKiBpbnRvIHRoaW5raW5nIHRoZSBsaW5rIGlzIGRvd24uCiAJCSAqLwpAQCAtNDE3MywxMCArNDE3MywxMCBAQAogI2lmIDEKIAlpZiAoYXRvbWljX3JlYWQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfYWxsKSB8fAogCSAgICBhdG9taWNfcmVhZCgmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19zcGFyZSkgfHwKLQkgICAgYXRvbWljX3JlYWQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmdfbXR1KSkgCisJICAgIGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nX210dSkpCiAJCWdvdG8gZG9uZTsKICNlbHNlCi0JaWYgKGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKSkgCisJaWYgKGF0b21pY19yZWFkKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKSkKIAkJZ290byBkb25lOwogI2VuZGlmCiAKQEAgLTQyNjgsNyArNDI2OCw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3AtPmxvY2ssIGZsYWdzKTsKIH0KIAotLyogdGlueSBidWZmZXJzIGFyZSB1c2VkIHRvIGF2b2lkIHRhcmdldCBhYm9ydCBpc3N1ZXMgd2l0aCAKKy8qIHRpbnkgYnVmZmVycyBhcmUgdXNlZCB0byBhdm9pZCB0YXJnZXQgYWJvcnQgaXNzdWVzIHdpdGgKICAqIG9sZGVyIGNhc3NpbmkncwogICovCiBzdGF0aWMgdm9pZCBjYXNfdHhfdGlueV9mcmVlKHN0cnVjdCBjYXMgKmNwKQpAQCAtNDI4MCw3ICs0MjgwLDcgQEAKIAkJaWYgKCFjcC0+dHhfdGlueV9idWZzW2ldKQogCQkJY29udGludWU7CiAKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9USU5ZX0JVRl9CTE9DSywgCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfVElOWV9CVUZfQkxPQ0ssCiAJCQkJICAgIGNwLT50eF90aW55X2J1ZnNbaV0sCiAJCQkJICAgIGNwLT50eF90aW55X2R2bWFbaV0pOwogCQljcC0+dHhfdGlueV9idWZzW2ldID0gTlVMTDsKQEAgLTQyOTMsNyArNDI5Myw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTl9UWF9SSU5HUzsgaSsrKSB7Ci0JCWNwLT50eF90aW55X2J1ZnNbaV0gPSAKKwkJY3AtPnR4X3RpbnlfYnVmc1tpXSA9CiAJCQlwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBUWF9USU5ZX0JVRl9CTE9DSywKIAkJCQkJICAgICAmY3AtPnR4X3RpbnlfZHZtYVtpXSk7CiAJCWlmICghY3AtPnR4X3RpbnlfYnVmc1tpXSkgewpAQCAtNDMyMiw3ICs0MzIyLDcgQEAKIAkJLyogUmVzZXQgdGhlIGNoaXAgKi8KIAkJY2FzX2xvY2tfYWxsX3NhdmUoY3AsIGZsYWdzKTsKIAkJLyogV2Ugc2V0IHRoZSBzZWNvbmQgYXJnIHRvIGNhc19yZXNldCB0byB6ZXJvCi0JCSAqIGJlY2F1c2UgY2FzX2luaXRfaHcgYmVsb3cgd2lsbCBoYXZlIGl0cyBzZWNvbmQgCisJCSAqIGJlY2F1c2UgY2FzX2luaXRfaHcgYmVsb3cgd2lsbCBoYXZlIGl0cyBzZWNvbmQKIAkJICogYXJndW1lbnQgc2V0IHRvIG5vbi16ZXJvLCB3aGljaCB3aWxsIGZvcmNlCiAJCSAqIGF1dG9uZWdvdGlhdGlvbiB0byBzdGFydC4KIAkJICovCkBAIC00MzM4LDE5ICs0MzM4LDE5IEBACiAJZXJyID0gLUVOT01FTTsKIAlpZiAoY2FzX2FsbG9jX3J4ZHMoY3ApIDwgMCkKIAkJZ290byBlcnJfdHhfdGlueTsKLQkKKwogCS8qIGFsbG9jYXRlIHNwYXJlcyAqLwogCWNhc19zcGFyZV9pbml0KGNwKTsKIAljYXNfc3BhcmVfcmVjb3ZlcihjcCwgR0ZQX0tFUk5FTCk7CiAKIAkvKiBXZSBjYW4gbm93IHJlcXVlc3QgdGhlIGludGVycnVwdCBhcyB3ZSBrbm93IGl0J3MgbWFza2VkCiAJICogb24gdGhlIGNvbnRyb2xsZXIuIGNhc3NpbmkrIGhhcyB1cCB0byA0IGludGVycnVwdHMKLQkgKiB0aGF0IGNhbiBiZSB1c2VkLCBidXQgeW91IG5lZWQgdG8gZG8gZXhwbGljaXQgcGNpIGludGVycnVwdCAKKwkgKiB0aGF0IGNhbiBiZSB1c2VkLCBidXQgeW91IG5lZWQgdG8gZG8gZXhwbGljaXQgcGNpIGludGVycnVwdAogCSAqIG1hcHBpbmcgdG8gZXhwb3NlIHRoZW0KIAkgKi8KIAlpZiAocmVxdWVzdF9pcnEoY3AtPnBkZXYtPmlycSwgY2FzX2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCBkZXYtPm5hbWUsICh2b2lkICopIGRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICFcbiIsIAorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVxdWVzdCBpcnEgIVxuIiwKIAkJICAgICAgIGNwLT5kZXYtPm5hbWUpOwogCQllcnIgPSAtRUFHQUlOOwogCQlnb3RvIGVycl9zcGFyZTsKQEAgLTQzODgsOSArNDM4OCw5IEBACiAKIAkvKiBTdG9wIHRyYWZmaWMsIG1hcmsgdXMgY2xvc2VkICovCiAJY2FzX2xvY2tfYWxsX3NhdmUoY3AsIGZsYWdzKTsKLQljcC0+b3BlbmVkID0gMDsJCisJY3AtPm9wZW5lZCA9IDA7CiAJY2FzX3Jlc2V0KGNwLCAwKTsKLQljYXNfcGh5X2luaXQoY3ApOyAKKwljYXNfcGh5X2luaXQoY3ApOwogCWNhc19iZWdpbl9hdXRvX25lZ290aWF0aW9uKGNwLCBOVUxMKTsKIAljYXNfY2xlYW5fcmluZ3MoY3ApOwogCWNhc191bmxvY2tfYWxsX3Jlc3RvcmUoY3AsIGZsYWdzKTsKQEAgLTQ0ODMsNyArNDQ4Myw3IEBACiAJLyogd2UgY29sbGF0ZSBhbGwgb2YgdGhlIHN0YXRzIGludG8gbmV0X3N0YXRzW05fVFhfUklOR10gKi8KIAlpZiAoIWNwLT5od19ydW5uaW5nKQogCQlyZXR1cm4gc3RhdHMgKyBOX1RYX1JJTkdTOwotCQorCiAJLyogY29sbGVjdCBvdXRzdGFuZGluZyBzdGF0cyAqLwogCS8qIFdUWjogdGhlIENhc3Npbmkgc3BlYyBnaXZlcyB0aGVzZSBhcyAxNiBiaXQgY291bnRlcnMgYnV0CiAJICogc3RvcmVkIGluIDMyLWJpdCB3b3Jkcy4gIEFkZGVkIGEgbWFzayBvZiAweGZmZmYgdG8gYmUgc2FmZSwKQEAgLTQ0OTMsMTEgKzQ0OTMsMTEgQEAKIAkgKiB0aGF0IGNvbnNpc3RlbnQuCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5zdGF0X2xvY2tbTl9UWF9SSU5HU10sIGZsYWdzKTsKLQlzdGF0c1tOX1RYX1JJTkdTXS5yeF9jcmNfZXJyb3JzICs9IAorCXN0YXRzW05fVFhfUklOR1NdLnJ4X2NyY19lcnJvcnMgKz0KIAkgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19GQ1NfRVJSKSAmIDB4ZmZmZjsKLQlzdGF0c1tOX1RYX1JJTkdTXS5yeF9mcmFtZV9lcnJvcnMgKz0gCisJc3RhdHNbTl9UWF9SSU5HU10ucnhfZnJhbWVfZXJyb3JzICs9CiAJCXJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19BTElHTl9FUlIpICYweGZmZmY7Ci0Jc3RhdHNbTl9UWF9SSU5HU10ucnhfbGVuZ3RoX2Vycm9ycyArPSAKKwlzdGF0c1tOX1RYX1JJTkdTXS5yeF9sZW5ndGhfZXJyb3JzICs9CiAJCXJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19MRU5fRVJSKSAmIDB4ZmZmZjsKICNpZiAxCiAJdG1wID0gKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX0VYQ0VTUykgJiAweGZmZmYpICsKQEAgLTQ1MDYsNyArNDUwNiw3IEBACiAJc3RhdHNbTl9UWF9SSU5HU10uY29sbGlzaW9ucyArPQogCSAgdG1wICsgKHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX05PUk1BTCkgJiAweGZmZmYpOwogI2Vsc2UKLQlzdGF0c1tOX1RYX1JJTkdTXS50eF9hYm9ydGVkX2Vycm9ycyArPSAKKwlzdGF0c1tOX1RYX1JJTkdTXS50eF9hYm9ydGVkX2Vycm9ycyArPQogCQlyZWFkbChjcC0+cmVncyArIFJFR19NQUNfQ09MTF9FWENFU1MpOwogCXN0YXRzW05fVFhfUklOR1NdLmNvbGxpc2lvbnMgKz0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX0NPTExfRVhDRVNTKSArCiAJCXJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19DT0xMX0xBVEUpOwpAQCAtNDUyNSw3ICs0NTI1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBOX1RYX1JJTkdTOyBpKyspIHsKIAkJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrW2ldKTsKLQkJc3RhdHNbTl9UWF9SSU5HU10ucnhfbGVuZ3RoX2Vycm9ycyArPSAKKwkJc3RhdHNbTl9UWF9SSU5HU10ucnhfbGVuZ3RoX2Vycm9ycyArPQogCQkJc3RhdHNbaV0ucnhfbGVuZ3RoX2Vycm9yczsKIAkJc3RhdHNbTl9UWF9SSU5HU10ucnhfY3JjX2Vycm9ycyArPSBzdGF0c1tpXS5yeF9jcmNfZXJyb3JzOwogCQlzdGF0c1tOX1RYX1JJTkdTXS5yeF9wYWNrZXRzICAgICs9IHN0YXRzW2ldLnJ4X3BhY2tldHM7CkBAIC00NTUwLDEwICs0NTUwLDEwIEBACiAJdTMyIHJ4Y2ZnLCByeGNmZ19uZXc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbGltaXQgPSBTVE9QX1RSSUVTOwotCQorCiAJaWYgKCFjcC0+aHdfcnVubmluZykKIAkJcmV0dXJuOwotCQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjcC0+bG9jaywgZmxhZ3MpOwogCXJ4Y2ZnID0gcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRyk7CiAKQEAgLTQ2MTksMjIgKzQ2MTksMjIgQEAKIAkJCVhDVlJfSU5URVJOQUwgOiBYQ1ZSX0VYVEVSTkFMOwogCQljbWQtPnBoeV9hZGRyZXNzID0gY3AtPnBoeV9hZGRyOwogCQljbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfVFAgfCBBRFZFUlRJU0VEX01JSSB8Ci0JCQlBRFZFUlRJU0VEXzEwYmFzZVRfSGFsZiB8IAotCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfCAKLQkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8IAorCQkJQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAorCQkJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwKIAkJCUFEVkVSVElTRURfMTAwYmFzZVRfRnVsbDsKIAogCQljbWQtPnN1cHBvcnRlZCB8PQotCQkJKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfCAKKwkJCShTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKIAkJCSBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKLQkJCSBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8IAorCQkJIFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwKIAkJCSBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CiAJCQkgU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX01JSSk7CiAKIAkJaWYgKGNwLT5od19ydW5uaW5nKSB7CiAJCQljYXNfbWlmX3BvbGwoY3AsIDApOwogCQkJYm1jciA9IGNhc19waHlfcmVhZChjcCwgTUlJX0JNQ1IpOwotCQkJY2FzX3JlYWRfbWlpX2xpbmtfbW9kZShjcCwgJmZ1bGxfZHVwbGV4LCAKKwkJCWNhc19yZWFkX21paV9saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwKIAkJCQkJICAgICAgICZzcGVlZCwgJnBhdXNlKTsKIAkJCWNhc19taWZfcG9sbChjcCwgMSk7CiAJCX0KQEAgLTQ2NDcsOSArNDY0Nyw5IEBACiAJCWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9GSUJSRTsKIAogCQlpZiAoY3AtPmh3X3J1bm5pbmcpIHsKLQkJCS8qIHBjcyB1c2VzIHRoZSBzYW1lIGJpdHMgYXMgbWlpICovIAorCQkJLyogcGNzIHVzZXMgdGhlIHNhbWUgYml0cyBhcyBtaWkgKi8KIAkJCWJtY3IgPSByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfTUlJX0NUUkwpOwotCQkJY2FzX3JlYWRfcGNzX2xpbmtfbW9kZShjcCwgJmZ1bGxfZHVwbGV4LCAKKwkJCWNhc19yZWFkX3Bjc19saW5rX21vZGUoY3AsICZmdWxsX2R1cGxleCwKIAkJCQkJICAgICAgICZzcGVlZCwgJnBhdXNlKTsKIAkJfQogCX0KQEAgLTQ2NjcsOCArNDY2Nyw4IEBACiAJCWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKIAkJY21kLT5zcGVlZCA9CiAJCQkoYm1jciAmIENBU19CTUNSX1NQRUVEMTAwMCkgPwotCQkJU1BFRURfMTAwMCA6IAotCQkJKChibWNyICYgQk1DUl9TUEVFRDEwMCkgPyBTUEVFRF8xMDA6IAorCQkJU1BFRURfMTAwMCA6CisJCQkoKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/IFNQRUVEXzEwMDoKIAkJCSBTUEVFRF8xMCk7CiAJCWNtZC0+ZHVwbGV4ID0KIAkJCShibWNyICYgQk1DUl9GVUxMRFBMWCkgPwpAQCAtNDY3Niw3ICs0Njc2LDcgQEAKIAl9CiAJaWYgKGxpbmtzdGF0ZSAhPSBsaW5rX3VwKSB7CiAJCS8qIEZvcmNlIHRoZXNlIHRvICJ1bmtub3duIiBpZiB0aGUgbGluayBpcyBub3QgdXAgYW5kCi0JCSAqIGF1dG9ub2dvdGlhdGlvbiBpbiBlbmFibGVkLiBXZSBjYW4gc2V0IHRoZSBsaW5rIAorCQkgKiBhdXRvbm9nb3RpYXRpb24gaW4gZW5hYmxlZC4gV2UgY2FuIHNldCB0aGUgbGluawogCQkgKiBzcGVlZCB0byAwLCBidXQgbm90IGNtZC0+ZHVwbGV4LAogCQkgKiBiZWNhdXNlIGl0cyBsZWdhbCB2YWx1ZXMgYXJlIDAgYW5kIDEuICBFdGh0b29sIHdpbGwKIAkJICogcHJpbnQgdGhlIHZhbHVlIHJlcG9ydGVkIGluIHBhcmVudGhlc2VzIGFmdGVyIHRoZQpAQCAtNDc4Myw3ICs0NzgzLDcgQEAKIAogc3RhdGljIHZvaWQgY2FzX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdHJpbmdzZXQsIHU4ICpkYXRhKQogewotCSBtZW1jcHkoZGF0YSwgJmV0aHRvb2xfY2Fzc2luaV9zdGF0bmFtZXMsIAorCSBtZW1jcHkoZGF0YSwgJmV0aHRvb2xfY2Fzc2luaV9zdGF0bmFtZXMsCiAJCQkJCSBDQVNfTlVNX1NUQVRfS0VZUyAqIEVUSF9HU1RSSU5HX0xFTik7CiB9CiAKQEAgLTQ4MTIsNyArNDgxMiw3IEBACiAJQlVHX09OKGkgIT0gQ0FTX05VTV9TVEFUX0tFWVMpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGNhc19ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgY2FzX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBjYXNfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBjYXNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gY2FzX3NldF9zZXR0aW5ncywKQEAgLTQ4MzMsNyArNDgzMyw3IEBACiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKGlmcik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmMgPSAtRU9QTk9UU1VQUDsKLQkKKwogCS8qIEhvbGQgdGhlIFBNIG11dGV4IHdoaWxlIGRvaW5nIGlvY3RsJ3Mgb3Igd2UgbWF5IGNvbGxpZGUKIAkgKiB3aXRoIG9wZW4vY2xvc2UgYW5kIHBvd2VyIG1hbmFnZW1lbnQgYW5kIG9vcHMuCiAJICovCkBAIC00OTMzLDExICs0OTMzLDExIEBACiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwKIAkJCSAgICAgJm9yaWdfY2FjaGVsaW5lX3NpemUpOwogCWlmIChvcmlnX2NhY2hlbGluZV9zaXplIDwgQ0FTX1BSRUZfQ0FDSEVMSU5FX1NJWkUpIHsKLQkJY2FzX2NhY2hlbGluZV9zaXplID0gCi0JCQkoQ0FTX1BSRUZfQ0FDSEVMSU5FX1NJWkUgPCBTTVBfQ0FDSEVfQllURVMpID8gCisJCWNhc19jYWNoZWxpbmVfc2l6ZSA9CisJCQkoQ0FTX1BSRUZfQ0FDSEVMSU5FX1NJWkUgPCBTTVBfQ0FDSEVfQllURVMpID8KIAkJCUNBU19QUkVGX0NBQ0hFTElORV9TSVpFIDogU01QX0NBQ0hFX0JZVEVTOwotCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIAotCQkJCQkgIFBDSV9DQUNIRV9MSU5FX1NJWkUsIAorCQlpZiAocGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsCisJCQkJCSAgUENJX0NBQ0hFX0xJTkVfU0laRSwKIAkJCQkJICBjYXNfY2FjaGVsaW5lX3NpemUpKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3Qgc2V0IFBDSSBjYWNoZSAiCiAJCQkgICAgICAgImxpbmUgc2l6ZVxuIik7CkBAIC00OTc3LDcgKzQ5NzcsNyBAQAogCWNwLT5vcmlnX2NhY2hlbGluZV9zaXplID0gY2FzX2NhY2hlbGluZV9zaXplID8gb3JpZ19jYWNoZWxpbmVfc2l6ZTogMDsKICNlbmRpZgogCWNwLT5kZXYgPSBkZXY7Ci0JY3AtPm1zZ19lbmFibGUgPSAoY2Fzc2luaV9kZWJ1ZyA8IDApID8gQ0FTX0RFRl9NU0dfRU5BQkxFIDogCisJY3AtPm1zZ19lbmFibGUgPSAoY2Fzc2luaV9kZWJ1ZyA8IDApID8gQ0FTX0RFRl9NU0dfRU5BQkxFIDoKIAkgIGNhc3NpbmlfZGVidWc7CiAKIAljcC0+bGlua190cmFuc2l0aW9uID0gTElOS19UUkFOU0lUSU9OX1VOS05PV047CkBAIC01MDQxLDEzICs1MDQxLDEzIEBACiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBOX1RYX1JJTkdTOyBpKyspIAorCWZvciAoaSA9IDA7IGkgPCBOX1RYX1JJTkdTOyBpKyspCiAJCWNwLT5pbml0X3R4ZHNbaV0gPSBjcC0+aW5pdF9ibG9jay0+dHhkc1tpXTsKIAotCWZvciAoaSA9IDA7IGkgPCBOX1JYX0RFU0NfUklOR1M7IGkrKykgCisJZm9yIChpID0gMDsgaSA8IE5fUlhfREVTQ19SSU5HUzsgaSsrKQogCQljcC0+aW5pdF9yeGRzW2ldID0gY3AtPmluaXRfYmxvY2stPnJ4ZHNbaV07CiAKLQlmb3IgKGkgPSAwOyBpIDwgTl9SWF9DT01QX1JJTkdTOyBpKyspIAorCWZvciAoaSA9IDA7IGkgPCBOX1JYX0NPTVBfUklOR1M7IGkrKykKIAkJY3AtPmluaXRfcnhjc1tpXSA9IGNwLT5pbml0X2Jsb2NrLT5yeGNzW2ldOwogCiAJZm9yIChpID0gMDsgaSA8IE5fUlhfRkxPV1M7IGkrKykKQEAgLTUwODcsMTEgKzUwODcsMTEgQEAKIAogCWkgPSByZWFkbChjcC0+cmVncyArIFJFR19CSU1fQ0ZHKTsKIAlwcmludGsoS0VSTl9JTkZPICIlczogU3VuIENhc3NpbmklcyAoJXNiaXQvJXNNSHogUENJLyVzKSAiCi0JICAgICAgICJFdGhlcm5ldFslZF0gIiwgIGRldi0+bmFtZSwgCi0JICAgICAgIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpID8gIisiIDogIiIsIAorCSAgICAgICAiRXRoZXJuZXRbJWRdICIsICBkZXYtPm5hbWUsCisJICAgICAgIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpID8gIisiIDogIiIsCiAJICAgICAgIChpICYgQklNX0NGR18zMkJJVCkgPyAiMzIiIDogIjY0IiwKIAkgICAgICAgKGkgJiBCSU1fQ0ZHXzY2TUhaKSA/ICI2NiIgOiAiMzMiLAotCSAgICAgICAoY3AtPnBoeV90eXBlID09IENBU19QSFlfU0VSREVTKSA/ICJGaSIgOiAiQ3UiLCBwZGV2LT5pcnEpOyAKKwkgICAgICAgKGNwLT5waHlfdHlwZSA9PSBDQVNfUEhZX1NFUkRFUykgPyAiRmkiIDogIkN1IiwgcGRldi0+aXJxKTsKIAogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCiAJCXByaW50aygiJTIuMnglYyIsIGRldi0+ZGV2X2FkZHJbaV0sCkBAIC01MTIzLDcgKzUxMjMsNyBAQAogCiBlcnJfd3JpdGVfY2FjaGVsaW5lOgogCS8qIFRyeSB0byByZXN0b3JlIGl0IGluIGNhc2UgdGhlIGVycm9yIG9jY3VyZWQgYWZ0ZXIgd2UKLQkgKiBzZXQgaXQuIAorCSAqIHNldCBpdC4KIAkgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgb3JpZ19jYWNoZWxpbmVfc2l6ZSk7CiAKQEAgLTUxNTcsNyArNTE1Nyw3IEBACiAJCS8qIFJlc3RvcmUgdGhlIGNhY2hlIGxpbmUgc2l6ZSBpZiB3ZSBoYWQgbW9kaWZpZWQKIAkJICogaXQuCiAJCSAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUENJX0NBQ0hFX0xJTkVfU0laRSwgCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0FDSEVfTElORV9TSVpFLAogCQkJCSAgICAgIGNwLT5vcmlnX2NhY2hlbGluZV9zaXplKTsKIAl9CiAjZW5kaWYKQEAgLTUxNzgsNyArNTE3OCw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJmNwLT5wbV9tdXRleCk7Ci0JCisKIAkvKiBJZiB0aGUgZHJpdmVyIGlzIG9wZW5lZCwgd2Ugc3RvcCB0aGUgRE1BICovCiAJaWYgKGNwLT5vcGVuZWQpIHsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwpAQCAtNTI0NSw3ICs1MjQ1LDcgQEAKIAllbHNlCiAJCWxpbmtfdHJhbnNpdGlvbl90aW1lb3V0ID0gMDsKIAotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmNhc19kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjYXNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNhc19jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmggYi9kcml2ZXJzL25ldC9jYXNzaW5pLmgKaW5kZXggYWI1NWM3ZS4uYTk3MDgwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5oCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuaApAQCAtMjEsNyArMjEsNyBAQAogICoKICAqIHZlbmRvciBpZDogMHgxMDhFIChTdW4gTWljcm9zeXN0ZW1zLCBJbmMuKQogICogZGV2aWNlIGlkOiAweGFiYmEgKENhc3NpbmkpCi0gKiByZXZpc2lvbiBpZHM6IDB4MDEgPSBDYXNzaW5pIAorICogcmV2aXNpb24gaWRzOiAweDAxID0gQ2Fzc2luaQogICogICAgICAgICAgICAgICAweDAyID0gQ2Fzc2luaSByZXYgMgogICogICAgICAgICAgICAgICAweDEwID0gQ2Fzc2luaSsKICAqICAgICAgICAgICAgICAgMHgxMSA9IENhc3NpbmkrIDAuMnUKQEAgLTQ2LDE2ICs0NiwxNiBAQAogICogYXBwZWFyIGluIGNhc3NpbmkrLiBSRUdfTUlOVVNfIGFkZHJlc3NlcyBvbmx5IGFwcGVhciBpbiBjYXNzaW5pLgogICovCiAjZGVmaW5lIENBU19JRF9SRVYyICAgICAgICAgIDB4MDIKLSNkZWZpbmUgQ0FTX0lEX1JFVlBMVVMgICAgICAgMHgxMCAKLSNkZWZpbmUgQ0FTX0lEX1JFVlBMVVMwMnUgICAgMHgxMSAKKyNkZWZpbmUgQ0FTX0lEX1JFVlBMVVMgICAgICAgMHgxMAorI2RlZmluZSBDQVNfSURfUkVWUExVUzAydSAgICAweDExCiAjZGVmaW5lIENBU19JRF9SRVZTQVRVUk5CMiAgIDB4MzAKIAogLyoqIGdsb2JhbCByZXNvdXJjZXMgKiovCiAKIC8qIHRoaXMgcmVnaXN0ZXIgc2V0cyB0aGUgd2VpZ2h0cyBmb3IgdGhlIHdlaWdodGVkIHJvdW5kIHJvYmluIGFyYml0ZXIuIGUuZy4sCiAgKiBpZiByeCB3ZWlnaHQgPT0gMSBhbmQgdHggd2VpZ2h0ID09IDAsIHJ4ID09IDJ4IHR4IHRyYW5zZmVyIGNyZWRpdAotICogZm9yIGl0cyBuZXh0IHR1cm4gdG8gYWNjZXNzIHRoZSBwY2kgYnVzLiAKLSAqIG1hcDogMHgwID0geDEsIDB4MSA9IHgyLCAweDIgPSB4NCwgMHgzID0geDggCisgKiBmb3IgaXRzIG5leHQgdHVybiB0byBhY2Nlc3MgdGhlIHBjaSBidXMuCisgKiBtYXA6IDB4MCA9IHgxLCAweDEgPSB4MiwgMHgyID0geDQsIDB4MyA9IHg4CiAgKiBERUZBVUxUOiAweDAsIFNJWkU6IDUgYml0cwogICovCiAjZGVmaW5lICBSRUdfQ0FXUgkgICAgICAgICAgICAgICAweDAwMDQgIC8qIGNvcmUgYXJiaXRyYXRpb24gd2VpZ2h0ICovCkBAIC02Niw4ICs2Niw4IEBACiAjZGVmaW5lICAgIENBV1JfUlJfRElTICAgICAgICAgICAgICAgICAweDEwICAgIC8qIFs0XSAqLwogCiAvKiBpZiBlbmFibGVkLCBCSU0gY2FuIHNlbmQgYnVyc3RzIGFjcm9zcyBQQ0kgYnVzID4gY2FjaGVsaW5lIHNpemUuIGJ1cnN0Ci0gKiBzaXplcyBkZXRlcm1pbmVkIGJ5IGxlbmd0aCBvZiBwYWNrZXQgb3IgZGVzY3JpcHRvciB0cmFuc2ZlciBhbmQgdGhlIAotICogbWF4IGxlbmd0aCBhbGxvd2VkIGJ5IHRoZSB0YXJnZXQuIAorICogc2l6ZXMgZGV0ZXJtaW5lZCBieSBsZW5ndGggb2YgcGFja2V0IG9yIGRlc2NyaXB0b3IgdHJhbnNmZXIgYW5kIHRoZQorICogbWF4IGxlbmd0aCBhbGxvd2VkIGJ5IHRoZSB0YXJnZXQuCiAgKiBERUZBVUxUOiAweDAsIFNJWkU6IDEgYml0CiAgKi8KICNkZWZpbmUgIFJFR19JTkZfQlVSU1QgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogaW5maW5pdGUgYnVyc3QgZW5hYmxlIHJlZyAqLwpAQCAtNzUsMjEgKzc1LDIxIEBACiAKIC8qIHRvcCBsZXZlbCBpbnRlcnJ1cHRzIFswLTldIGFyZSBhdXRvLWNsZWFyZWQgdG8gMCB3aGVuIHRoZSBzdGF0dXMKICAqIHJlZ2lzdGVyIGlzIHJlYWQuIHNlY29uZCBsZXZlbCBpbnRlcnJ1cHRzIFsxMyAtIDE4XSBhcmUgY2xlYXJlZCBhdAotICogdGhlIHNvdXJjZS4gdHggY29tcGxldGlvbiByZWdpc3RlciAzIGlzIHJlcGxpY2F0ZWQgaW4gWzE5IC0gMzFdIAorICogdGhlIHNvdXJjZS4gdHggY29tcGxldGlvbiByZWdpc3RlciAzIGlzIHJlcGxpY2F0ZWQgaW4gWzE5IC0gMzFdCiAgKiBERUZBVUxUOiAweDAwMDAwMDAwLCBTSVpFOiAyOSBiaXRzCiAgKi8KICNkZWZpbmUgIFJFR19JTlRSX1NUQVRVUyAgICAgICAgICAgICAgIDB4MDAwQyAgLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotI2RlZmluZSAgICBJTlRSX1RYX0lOVE1FICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAgLyogZnJhbWUgdy8gSU5UIE1FIGRlc2MgYml0IHNldCAKKyNkZWZpbmUgICAgSU5UUl9UWF9JTlRNRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgIC8qIGZyYW1lIHcvIElOVCBNRSBkZXNjIGJpdCBzZXQKIAkJCQkJCSAgICAgIHhmZXJyZWQgZnJvbSBob3N0IHF1ZXVlIHRvCiAJCQkJCQkgICAgICBUWCBGSUZPICovCiAjZGVmaW5lICAgIElOVFJfVFhfQUxMICAgICAgICAgICAgICAgICAweDAwMDAwMDAyICAvKiBhbGwgeG1pdCBmcmFtZXMgeGZlcnJlZCBpbnRvCiAJCQkJCQkgICAgICBUWCBGSUZPLiBpLmUuLAotCQkJCQkJICAgICAgVFggS2ljayA9PSBUWCBjb21wbGV0ZS4gaWYgCisJCQkJCQkgICAgICBUWCBLaWNrID09IFRYIGNvbXBsZXRlLiBpZgogCQkJCQkJICAgICAgUEFDRURfTU9ERSBzZXQsIHRoZW4gVFggRklGTwogCQkJCQkJICAgICAgYWxzbyBlbXB0eSAqLwotI2RlZmluZSAgICBJTlRSX1RYX0RPTkUgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLyogYW55IGZyYW1lIHhmZXJyZWQgaW50byB0eCAKKyNkZWZpbmUgICAgSU5UUl9UWF9ET05FICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQgIC8qIGFueSBmcmFtZSB4ZmVycmVkIGludG8gdHgKIAkJCQkJCSAgICAgIEZJRk8gKi8KLSNkZWZpbmUgICAgSU5UUl9UWF9UQUdfRVJST1IgICAgICAgICAgIDB4MDAwMDAwMDggIC8qIFRYIEZJRk8gdGFnIGZyYW1pbmcgCisjZGVmaW5lICAgIElOVFJfVFhfVEFHX0VSUk9SICAgICAgICAgICAweDAwMDAwMDA4ICAvKiBUWCBGSUZPIHRhZyBmcmFtaW5nCiAJCQkJCQkgICAgICBjb3JydXB0ZWQuIEZBVEFMIEVSUk9SICovCiAjZGVmaW5lICAgIElOVFJfUlhfRE9ORSAgICAgICAgICAgICAgICAweDAwMDAwMDEwICAvKiBhdCBsZWFzdCAxIGZyYW1lIHhmZXJyZWQKIAkJCQkJCSAgICAgIGZyb20gUlggRklGTyB0byBob3N0IG1lbS4KQEAgLTk4LDE4ICs5OCwxOCBAQAogCQkJCQkJICAgICAgaW50ciBibGFua2luZy4gKi8KICNkZWZpbmUgICAgSU5UUl9SWF9CVUZfVU5BVkFJTCAgICAgICAgIDB4MDAwMDAwMjAgIC8qIG5vIG1vcmUgcmVjZWl2ZSBidWZmZXJzLgogCQkJCQkJICAgICAgUlggS2ljayA9PSBSWCBjb21wbGV0ZSAqLwotI2RlZmluZSAgICBJTlRSX1JYX1RBR19FUlJPUiAgICAgICAgICAgMHgwMDAwMDA0MCAgLyogUlggRklGTyB0YWcgZnJhbWluZyAKKyNkZWZpbmUgICAgSU5UUl9SWF9UQUdfRVJST1IgICAgICAgICAgIDB4MDAwMDAwNDAgIC8qIFJYIEZJRk8gdGFnIGZyYW1pbmcKIAkJCQkJCSAgICAgIGNvcnJ1cHRlZC4gRkFUQUwgRVJST1IgKi8KICNkZWZpbmUgICAgSU5UUl9SWF9DT01QX0ZVTEwgICAgICAgICAgIDB4MDAwMDAwODAgIC8qIG5vIG1vcmUgcm9vbSBpbiBjb21wbGV0aW9uCiAJCQkJCQkgICAgICByaW5nIHRvIHBvc3QgZGVzY3JpcHRvcnMuCiAJCQkJCQkgICAgICBSWCBjb21wbGV0ZSBoZWFkIGluY3IgdG8KIAkJCQkJCSAgICAgIGFsbW9zdCByZWFjaCBSWCBjb21wbGV0ZQogCQkJCQkJICAgICAgdGFpbCAqLwotI2RlZmluZSAgICBJTlRSX1JYX0JVRl9BRSAgICAgICAgICAgICAgMHgwMDAwMDEwMCAgLyogbGVzcyB0aGFuIHRoZSAKKyNkZWZpbmUgICAgSU5UUl9SWF9CVUZfQUUgICAgICAgICAgICAgIDB4MDAwMDAxMDAgIC8qIGxlc3MgdGhhbiB0aGUKIAkJCQkJCSAgICAgIHByb2dyYW1tYWJsZSB0aHJlc2hvbGQgIwogCQkJCQkJICAgICAgb2YgZnJlZSBkZXNjciBhdmFpbCBmb3IKIAkJCQkJCSAgICAgIGh3IHVzZSAqLwotI2RlZmluZSAgICBJTlRSX1JYX0NPTVBfQUYgICAgICAgICAgICAgMHgwMDAwMDIwMCAgLyogbGVzcyB0aGFuIHRoZSAKKyNkZWZpbmUgICAgSU5UUl9SWF9DT01QX0FGICAgICAgICAgICAgIDB4MDAwMDAyMDAgIC8qIGxlc3MgdGhhbiB0aGUKIAkJCQkJCSAgICAgIHByb2dyYW1tYWJsZSB0aHJlc2hvbGQgIwogCQkJCQkJICAgICAgb2YgZGVzY3Igc3BhY2VzIGZvciBodwogCQkJCQkJICAgICAgdXNlIGluIGNvbXBsZXRpb24gZGVzY3IKQEAgLTExOSwxNyArMTE5LDE3IEBACiAJCQkJCQkgICAgICBmcm9tIGZpZm8gZHVyaW5nIERNQSBvcgogCQkJCQkJICAgICAgaGVhZGVyIHBhcnNlciBwcm92aWRlcyBUQ1AKIAkJCQkJCSAgICAgIGhlYWRlciBhbmQgcGF5bG9hZCBzaXplID4KLQkJCQkJCSAgICAgIE1BQyBwYWNrZXQgc2l6ZS4gCisJCQkJCQkgICAgICBNQUMgcGFja2V0IHNpemUuCiAJCQkJCQkgICAgICBGQVRBTCBFUlJPUiAqLwogI2RlZmluZSAgICBJTlRSX1NVTU1BUlkgICAgICAgICAgICAgICAgMHgwMDAwMTAwMCAgLyogc3VtbWFyeSBpbnRlcnJ1cHQgYml0LiB0aGlzCi0JCQkJCQkgICAgICBiaXQgd2lsbCBiZSBzZXQgaWYgYW4gaW50ZXJydXB0IAorCQkJCQkJICAgICAgYml0IHdpbGwgYmUgc2V0IGlmIGFuIGludGVycnVwdAogCQkJCQkJICAgICAgZ2VuZXJhdGVkIG9uIHRoZSBwY2kgYnVzLiB1c2VmdWwKLQkJCQkJCSAgICAgIHdoZW4gZHJpdmVyIGlzIHBvbGxpbmcgZm9yIAorCQkJCQkJICAgICAgd2hlbiBkcml2ZXIgaXMgcG9sbGluZyBmb3IKIAkJCQkJCSAgICAgIGludGVycnVwdHMgKi8KICNkZWZpbmUgICAgSU5UUl9QQ1NfU1RBVFVTICAgICAgICAgICAgIDB4MDAwMDIwMDAgIC8qIFBDUyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCi0jZGVmaW5lICAgIElOVFJfVFhfTUFDX1NUQVRVUyAgICAgICAgICAweDAwMDA0MDAwICAvKiBUWCBNQUMgc3RhdHVzIHJlZ2lzdGVyIGhhcyBhdCAKKyNkZWZpbmUgICAgSU5UUl9UWF9NQUNfU1RBVFVTICAgICAgICAgIDB4MDAwMDQwMDAgIC8qIFRYIE1BQyBzdGF0dXMgcmVnaXN0ZXIgaGFzIGF0CiAJCQkJCQkgICAgICBsZWFzdCAxIHVubWFza2VkIGludGVycnVwdCBzZXQgKi8KLSNkZWZpbmUgICAgSU5UUl9SWF9NQUNfU1RBVFVTICAgICAgICAgIDB4MDAwMDgwMDAgIC8qIFJYIE1BQyBzdGF0dXMgcmVnaXN0ZXIgaGFzIGF0IAorI2RlZmluZSAgICBJTlRSX1JYX01BQ19TVEFUVVMgICAgICAgICAgMHgwMDAwODAwMCAgLyogUlggTUFDIHN0YXR1cyByZWdpc3RlciBoYXMgYXQKIAkJCQkJCSAgICAgIGxlYXN0IDEgdW5tYXNrZWQgaW50ZXJydXB0IHNldCAqLwogI2RlZmluZSAgICBJTlRSX01BQ19DVFJMX1NUQVRVUyAgICAgICAgMHgwMDAxMDAwMCAgLyogTUFDIGNvbnRyb2wgc3RhdHVzIHJlZ2lzdGVyIGhhcwogCQkJCQkJICAgICAgYXQgbGVhc3QgMSB1bm1hc2tlZCBpbnRlcnJ1cHQKQEAgLTEzNyw5ICsxMzcsOSBAQAogI2RlZmluZSAgICBJTlRSX01JRl9TVEFUVVMgICAgICAgICAgICAgMHgwMDAyMDAwMCAgLyogTUlGIHN0YXR1cyByZWdpc3RlciBoYXMgYXQgbGVhc3QKIAkJCQkJCSAgICAgIDEgdW5tYXNrZWQgaW50ZXJydXB0IHNldCAqLwogI2RlZmluZSAgICBJTlRSX1BDSV9FUlJPUl9TVEFUVVMgICAgICAgMHgwMDA0MDAwMCAgLyogUENJIGVycm9yIHN0YXR1cyByZWdpc3RlciBpbiB0aGUKLQkJCQkJCSAgICAgIEJJRiBoYXMgYXQgbGVhc3QgMSB1bm1hc2tlZCAKKwkJCQkJCSAgICAgIEJJRiBoYXMgYXQgbGVhc3QgMSB1bm1hc2tlZAogCQkJCQkJICAgICAgaW50ZXJydXB0IHNldCAqLwotI2RlZmluZSAgICBJTlRSX1RYX0NPTVBfM19NQVNLICAgICAgICAgMHhGRkY4MDAwMCAgLyogbWFzayBmb3IgVFggY29tcGxldGlvbiAKKyNkZWZpbmUgICAgSU5UUl9UWF9DT01QXzNfTUFTSyAgICAgICAgIDB4RkZGODAwMDAgIC8qIG1hc2sgZm9yIFRYIGNvbXBsZXRpb24KIAkJCQkJCSAgICAgIDMgcmVnIGRhdGEgKi8KICNkZWZpbmUgICAgSU5UUl9UWF9DT01QXzNfU0hJRlQgICAgICAgIDE5CiAjZGVmaW5lICAgIElOVFJfRVJST1JfTUFTSyAoSU5UUl9NSUZfU1RBVFVTIHwgSU5UUl9QQ0lfRVJST1JfU1RBVFVTIHwgXApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UUl9NQUNfQ1RSTF9TVEFUVVMpCiAKIC8qIGRldGVybWluZXMgd2hpY2ggc3RhdHVzIGV2ZW50cyB3aWxsIGNhdXNlIGFuIGludGVycnVwdC4gbGF5b3V0IHNhbWUKLSAqIGFzIFJFR19JTlRSX1NUQVRVUy4gCisgKiBhcyBSRUdfSU5UUl9TVEFUVVMuCiAgKiBERUZBVUxUOiAweEZGRkZGRkZGLCBTSVpFOiAxNiBiaXRzCiAgKi8KICNkZWZpbmUgIFJFR19JTlRSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSW50ZXJydXB0IG1hc2sgKi8KQEAgLTE1OCwxOCArMTU4LDE4IEBACiAgKiB1c2VmdWwgd2hlbiBkcml2ZXIgaXMgcG9sbGluZyBmb3IgaW50ZXJydXB0cy4gbGF5b3V0IHNhbWUgYXMgUkVHX0lOVFJfTUFTSy4KICAqIERFRkFVTFQ6IDB4MDAwMDAwMDAsIFNJWkU6IDEyIGJpdHMKICAqLwotI2RlZmluZSAgUkVHX0FMSUFTX0NMRUFSICAgICAgICAgICAgICAgMHgwMDE0ICAvKiBhbGlhcyBjbGVhciBtYXNrIAorI2RlZmluZSAgUkVHX0FMSUFTX0NMRUFSICAgICAgICAgICAgICAgMHgwMDE0ICAvKiBhbGlhcyBjbGVhciBtYXNrCiAJCQkJCQkgICh1c2VkIHcvIHN0YXR1cyBhbGlhcykgKi8KIC8qIHNhbWUgYXMgUkVHX0lOVFJfU1RBVFVTIGV4Y2VwdCB0aGF0IG9ubHkgYml0cyBjbGVhcmVkIGFyZSB0aG9zZSBzZWxlY3RlZCBieQotICogUkVHX0FMSUFTX0NMRUFSIAorICogUkVHX0FMSUFTX0NMRUFSCiAgKiBERUZBVUxUOiAweDAwMDAwMDAwLCBTSVpFOiAyOSBiaXRzCiAgKi8KLSNkZWZpbmUgIFJFR19JTlRSX1NUQVRVU19BTElBUyAgICAgICAgIDB4MDAxQyAgLyogaW50ZXJydXB0IHN0YXR1cyBhbGlhcyAKKyNkZWZpbmUgIFJFR19JTlRSX1NUQVRVU19BTElBUyAgICAgICAgIDB4MDAxQyAgLyogaW50ZXJydXB0IHN0YXR1cyBhbGlhcwogCQkJCQkJICAoc2VsZWN0aXZlIGNsZWFyKSAqLwogCiAvKiBERUZBVUxUOiAweDAsIFNJWkU6IDMgYml0cyAqLwogI2RlZmluZSAgUkVHX1BDSV9FUlJfU1RBVFVTICAgICAgICAgICAgMHgxMDAwICAvKiBQQ0kgZXJyb3Igc3RhdHVzICovCi0jZGVmaW5lICAgIFBDSV9FUlJfQkFEQUNLICAgICAgICAgICAgICAweDAxICAgIC8qIHJlc2VydmVkIGluIENhc3NpbmkrLiAKKyNkZWZpbmUgICAgUENJX0VSUl9CQURBQ0sgICAgICAgICAgICAgIDB4MDEgICAgLyogcmVzZXJ2ZWQgaW4gQ2Fzc2luaSsuCiAJCQkJCQkgIHNldCBpZiBubyBBQ0s2NCMgZHVyaW5nIEFCUzY0IGN5Y2xlCiAJCQkJCQkgIGluIENhc3NpbmkuICovCiAjZGVmaW5lICAgIFBDSV9FUlJfRFRSVE8gICAgICAgICAgICAgICAweDAyICAgIC8qIGRlbGF5ZWQgeGFjdGlvbiB0aW1lb3V0LiBzZXQgaWYKQEAgLTE3OSwxNiArMTc5LDE2IEBACiAJCQkJCQkgIHVudXNlZCBpbiBDYXNzaW5pLiAqLwogI2RlZmluZSAgICBQQ0lfRVJSX0JJTV9ETUFfUkVBRCAgICAgICAgMHgxMCAgICAvKiBCSU0gcmVjZWl2ZWQgMCBjb3VudCBETUEgcmVhZCByZXEuCiAJCQkJCQkgIHVudXNlZCBpbiBDYXNzaW5pLiAqLwotI2RlZmluZSAgICBQQ0lfRVJSX0JJTV9ETUFfVElNRU9VVCAgICAgMHgyMCAgICAvKiBCSU0gcmVjZWl2ZWQgMjU1IHJldHJpZXMgZHVyaW5nIAorI2RlZmluZSAgICBQQ0lfRVJSX0JJTV9ETUFfVElNRU9VVCAgICAgMHgyMCAgICAvKiBCSU0gcmVjZWl2ZWQgMjU1IHJldHJpZXMgZHVyaW5nCiAJCQkJCQkgIERNQS4gdW51c2VkIGluIGNhc3NpbmkuICovCiAKIC8qIG1hc2sgZm9yIFBDSSBzdGF0dXMgZXZlbnRzIHRoYXQgd2lsbCBzZXQgUENJX0VSUl9TVEFUVVMuIGlmIGNsZWFyZWQsIGV2ZW50Ci0gKiBjYXVzZXMgYW4gaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZC4gCisgKiBjYXVzZXMgYW4gaW50ZXJydXB0IHRvIGJlIGdlbmVyYXRlZC4KICAqIERFRkFVTFQ6IDB4NywgU0laRTogMyBiaXRzCiAgKi8KICNkZWZpbmUgIFJFR19QQ0lfRVJSX1NUQVRVU19NQVNLICAgICAgIDB4MTAwNCAgLyogUENJIEVycm9yIHN0YXR1cyBtYXNrICovCiAKLS8qIHVzZWQgdG8gY29uZmlndXJlIFBDSSByZWxhdGVkIHBhcmFtZXRlcnMgdGhhdCBhcmUgbm90IGluIFBDSSBjb25maWcgc3BhY2UuIAorLyogdXNlZCB0byBjb25maWd1cmUgUENJIHJlbGF0ZWQgcGFyYW1ldGVycyB0aGF0IGFyZSBub3QgaW4gUENJIGNvbmZpZyBzcGFjZS4KICAqIERFRkFVTFQ6IDBieHgwMDAsIFNJWkU6IDUgYml0cwogICovCiAjZGVmaW5lICBSRUdfQklNX0NGRyAgICAgICAgICAgICAgICAweDEwMDggIC8qIEJJTSBDb25maWd1cmF0aW9uICovCkBAIC0yMDEsNyArMjAxLDcgQEAKICNkZWZpbmUgICAgQklNX0NGR19STUFfSU5UUl9FTkFCTEUgIDB4MDQwICAgLyogbWFzdGVyIGFib3J0IGludHIgZW5hYmxlICovCiAjZGVmaW5lICAgIEJJTV9DRkdfUlRBX0lOVFJfRU5BQkxFICAweDA4MCAgIC8qIHRhcmdldCBhYm9ydCBpbnRyIGVuYWJsZSAqLwogI2RlZmluZSAgICBCSU1fQ0ZHX1JFU0VSVkVEMiAgICAgICAgMHgxMDAgICAvKiByZXNlcnZlZCAqLwotI2RlZmluZSAgICBCSU1fQ0ZHX0JJTV9ESVNBQkxFICAgICAgMHgyMDAgICAvKiBzdG9wIEJJTSBETUEuIHVzZSBiZWZvcmUgZ2xvYmFsIAorI2RlZmluZSAgICBCSU1fQ0ZHX0JJTV9ESVNBQkxFICAgICAgMHgyMDAgICAvKiBzdG9wIEJJTSBETUEuIHVzZSBiZWZvcmUgZ2xvYmFsCiAJCQkJCSAgICAgICByZXNldC4gcmVzZXJ2ZWQgaW4gQ2Fzc2luaS4gKi8KICNkZWZpbmUgICAgQklNX0NGR19CSU1fU1RBVFVTICAgICAgIDB4NDAwICAgLyogKHJvKSAxID0gQklNIERNQSBzdXNwZW5kZWQuCiAJCQkJCQkgIHJlc2VydmVkIGluIENhc3NpbmkuICovCkBAIC0yMTIsNyArMjEyLDcgQEAKICNkZWZpbmUgIFJFR19CSU1fRElBRyAgICAgICAgICAgICAgICAgIDB4MTAwQyAgLyogQklNIERpYWdub3N0aWMgKi8KICNkZWZpbmUgICAgQklNX0RJQUdfTVNUUl9TTV9NQVNLICAgICAgIDB4M0ZGRkZGMDAgLyogUENJIG1hc3RlciBjb250cm9sbGVyIHN0YXRlCiAJCQkJCQkgICAgIG1hY2hpbmUgYml0cyBbMjE6MF0gKi8KLSNkZWZpbmUgICAgQklNX0RJQUdfQlJTVF9TTV9NQVNLICAgICAgIDB4N0YgICAgLyogUENJIGJ1cnN0IGNvbnRyb2xsZXIgc3RhdGUgCisjZGVmaW5lICAgIEJJTV9ESUFHX0JSU1RfU01fTUFTSyAgICAgICAweDdGICAgIC8qIFBDSSBidXJzdCBjb250cm9sbGVyIHN0YXRlCiAJCQkJCQkgIG1hY2hpbmUgYml0cyBbNjowXSAqLwogCiAvKiB3cml0aW5nIHRvIFNXX1JFU0VUX1RYIGFuZCBTV19SRVNFVF9SWCB3aWxsIGlzc3VlIGEgZ2xvYmFsCkBAIC0yMjQsMTQgKzIyNCwxNCBAQAogI2RlZmluZSAgICBTV19SRVNFVF9SWCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMiAgLyogcmVzZXQgUlggRE1BIGVuZ2luZS4gcG9sbCB1bnRpbAogCQkJCQkJICAgICAgY2xlYXJlZCB0byAwLiAqLwogI2RlZmluZSAgICBTV19SRVNFVF9SU1RPVVQgICAgICAgICAgICAgMHgwMDAwMDAwNCAgLyogZm9yY2UgUlNUT1VUIyBwaW4gYWN0aXZlIChsb3cpLgotCQkJCQkJICAgICAgcmVzZXRzIFBIWSBhbmQgYW55dGhpbmcgZWxzZSAKKwkJCQkJCSAgICAgIHJlc2V0cyBQSFkgYW5kIGFueXRoaW5nIGVsc2UKIAkJCQkJCSAgICAgIGNvbm5lY3RlZCB0byBSU1RPVVQjLiBSU1RPVVQjCiAJCQkJCQkgICAgICBpcyBhbHNvIGFjdGl2YXRlZCBieSBsb2NhbCBQQ0kKLQkJCQkJCSAgICAgIHJlc2V0IHdoZW4gaG90LXN3YXAgaXMgYmVpbmcgCisJCQkJCQkgICAgICByZXNldCB3aGVuIGhvdC1zd2FwIGlzIGJlaW5nCiAJCQkJCQkgICAgICBkb25lLiAqLwotI2RlZmluZSAgICBTV19SRVNFVF9CTE9DS19QQ1NfU0xJTksgICAgMHgwMDAwMDAwOCAgLyogaWYgYSBnbG9iYWwgcmVzZXQgaXMgZG9uZSB3aXRoIAotCQkJCQkJICAgICAgdGhpcyBiaXQgc2V0LCBQQ1MgYW5kIFNMSU5LIAotCQkJCQkJICAgICAgbW9kdWxlcyB3b24ndCBiZSByZXNldC4gCisjZGVmaW5lICAgIFNXX1JFU0VUX0JMT0NLX1BDU19TTElOSyAgICAweDAwMDAwMDA4ICAvKiBpZiBhIGdsb2JhbCByZXNldCBpcyBkb25lIHdpdGgKKwkJCQkJCSAgICAgIHRoaXMgYml0IHNldCwgUENTIGFuZCBTTElOSworCQkJCQkJICAgICAgbW9kdWxlcyB3b24ndCBiZSByZXNldC4KIAkJCQkJCSAgICAgIGkuZS4sIGxpbmsgd29uJ3QgZHJvcC4gKi8KICNkZWZpbmUgICAgU1dfUkVTRVRfQlJFUV9TTV9NQVNLICAgICAgIDB4MDAwMDdGMDAgIC8qIGJyZXEgc3RhdGUgbWFjaGluZSBbNjowXSAqLwogI2RlZmluZSAgICBTV19SRVNFVF9QQ0lBUkJfU01fTUFTSyAgICAgMHgwMDA3MDAwMCAgLyogcGNpIGFyYml0cmF0aW9uIHN0YXRlIGJpdHM6CkBAIC0yNTIsNyArMjUyLDcgQEAKIAkJCQkJCSAgICAgIDBiMDE6IEFEX0FDS19SWAogCQkJCQkJICAgICAgMGIxMDogQURfQUNLX1RYCiAJCQkJCQkgICAgICAwYjExOiBBRF9JRExfVFggKi8KLSNkZWZpbmUgICAgU1dfUkVTRVRfV1JQQ0lfU01fTUFTSyAgICAgIDB4MDYwMDAwMDAgIC8qIHdyaXRlIHBjaSBzdGF0ZSBiaXRzIAorI2RlZmluZSAgICBTV19SRVNFVF9XUlBDSV9TTV9NQVNLICAgICAgMHgwNjAwMDAwMCAgLyogd3JpdGUgcGNpIHN0YXRlIGJpdHMKIAkJCQkJCSAgICAgIDBiMDA6IFdSX1BDSV9XQVQKIAkJCQkJCSAgICAgIDBiMDE6IFdSX1BDSV9SRFkKIAkJCQkJCSAgICAgIDBiMTE6IFdSX1BDSV9BQ0sgKi8KQEAgLTI2OCw3ICsyNjgsNyBAQAogICogdmFsdWUgd3JpdHRlbiBoYXMgYm90aCBsb3dlciBhbmQgdXBwZXIgMzItYml0IGhhbHZlcyByb3RhdGVkIHRvIHRoZSByaWdodAogICogb25lIGJpdCBwb3NpdGlvbi4gZS5nLiwgRkZGRkZGRkYgRkZGRkZGRkYgLT4gN0ZGRkZGRkYgN0ZGRkZGRkYKICAqLwotI2RlZmluZSAgUkVHX01JTlVTX0JJTV9EQVRBUEFUSF9URVNUICAgMHgxMDE4ICAvKiBDYXNzaW5pOiBCSU0gZGF0YXBhdGggdGVzdCAKKyNkZWZpbmUgIFJFR19NSU5VU19CSU1fREFUQVBBVEhfVEVTVCAgIDB4MTAxOCAgLyogQ2Fzc2luaTogQklNIGRhdGFwYXRoIHRlc3QKIAkJCQkJCSAgQ2Fzc2luaSs6IHJlc2VydmVkICovCiAKIC8qIG91dHB1dCBlbmFibGVzIGFyZSBwcm92aWRlZCBmb3IgZWFjaCBkZXZpY2UncyBjaGlwIHNlbGVjdCBhbmQgZm9yIHRoZSByZXN0CkBAIC0yNzYsMTIgKzI3NiwxMiBAQAogICogYml0cyBhcmUgY29ubmVjdGVkIHRvIGdlbmVyYWwgcHVycHVzIGNvbnRyb2wvc3RhdHVzIGJpdHMuCiAgKiBERUZBVUxUOiAweDcKICAqLwotI2RlZmluZSAgUkVHX0JJTV9MT0NBTF9ERVZfRU4gICAgICAgICAgMHgxMDIwICAvKiBCSU0gbG9jYWwgZGV2aWNlIAorI2RlZmluZSAgUkVHX0JJTV9MT0NBTF9ERVZfRU4gICAgICAgICAgMHgxMDIwICAvKiBCSU0gbG9jYWwgZGV2aWNlCiAJCQkJCQkgIG91dHB1dCBFTi4gZGVmYXVsdDogMHg3ICovCiAjZGVmaW5lICAgIEJJTV9MT0NBTF9ERVZfUEFEICAgICAgICAgICAweDAxICAgIC8qIGFkZHJlc3MgYnVzLCBSVyBzaWduYWwsIGFuZAogCQkJCQkJICBPRSBzaWduYWwgb3V0cHV0IGVuYWJsZSBvbiB0aGUKIAkJCQkJCSAgbG9jYWwgYnVzIGludGVyZmFjZS4gdGhlc2UKLQkJCQkJCSAgYXJlIHNoYXJlZCBiZXR3ZWVuIGJvdGggbG9jYWwgCisJCQkJCQkgIGFyZSBzaGFyZWQgYmV0d2VlbiBib3RoIGxvY2FsCiAJCQkJCQkgIGJ1cyBkZXZpY2VzLiB0cmlzdGF0ZSB3aGVuIDAuICovCiAjZGVmaW5lICAgIEJJTV9MT0NBTF9ERVZfUFJPTSAgICAgICAgICAweDAyICAgIC8qIFBST00gY2hpcCBzZWxlY3QgKi8KICNkZWZpbmUgICAgQklNX0xPQ0FMX0RFVl9FWFQgICAgICAgICAgIDB4MDQgICAgLyogc2Vjb25kYXJ5IGxvY2FsIGJ1cyBkZXZpY2UgY2hpcApAQCAtMjkxLDggKzI5MSw4IEBACiAjZGVmaW5lICAgIEJJTV9MT0NBTF9ERVZfSFdfUkVTRVQgICAgICAweDIwICAgIC8qIGludGVybmFsIGh3IHJlc2V0LiBDYXNzaW5pKyBvbmx5LiAqLwogCiAvKiBhY2Nlc3MgMjQgZW50cnkgQklNIHJlYWQgYW5kIHdyaXRlIGJ1ZmZlcnMuIHB1dCBhZGRyZXNzIGluIFJFR19CSU1fQlVGRkVSX0FERFIKLSAqIGFuZCByZWFkL3dyaXRlIGZyb20vdG8gaXQgUkVHX0JJTV9CVUZGRVJfREFUQV9MT1cgYW5kIF9EQVRBX0hJLiAKLSAqIF9EQVRBX0hJIHNob3VsZCBiZSB0aGUgbGFzdCBhY2Nlc3Mgb2YgdGhlIHNlcXVlbmNlLiAKKyAqIGFuZCByZWFkL3dyaXRlIGZyb20vdG8gaXQgUkVHX0JJTV9CVUZGRVJfREFUQV9MT1cgYW5kIF9EQVRBX0hJLgorICogX0RBVEFfSEkgc2hvdWxkIGJlIHRoZSBsYXN0IGFjY2VzcyBvZiB0aGUgc2VxdWVuY2UuCiAgKiBERUZBVUxUOiB1bmRlZmluZWQKICAqLwogI2RlZmluZSAgUkVHX0JJTV9CVUZGRVJfQUREUiAgICAgICAgICAgMHgxMDI0ICAvKiBCSU0gYnVmZmVyIGFkZHJlc3MuIGZvcgpAQCAtMzA0LDEwICszMDQsMTAgQEAKICNkZWZpbmUgIFJFR19CSU1fQlVGRkVSX0RBVEFfTE9XICAgICAgIDB4MTAyOCAgLyogQklNIGJ1ZmZlciBkYXRhIGxvdyAqLwogI2RlZmluZSAgUkVHX0JJTV9CVUZGRVJfREFUQV9ISSAgICAgICAgMHgxMDJDICAvKiBCSU0gYnVmZmVyIGRhdGEgaGlnaCAqLwogCi0vKiBzZXQgQklNX1JBTV9CSVNUX1NUQVJUIHRvIHN0YXJ0IGJ1aWx0LWluIHNlbGYgdGVzdCBmb3IgQklNIHJlYWQgYnVmZmVyLiAKKy8qIHNldCBCSU1fUkFNX0JJU1RfU1RBUlQgdG8gc3RhcnQgYnVpbHQtaW4gc2VsZiB0ZXN0IGZvciBCSU0gcmVhZCBidWZmZXIuCiAgKiBiaXQgYXV0by1jbGVhcnMgd2hlbiBkb25lIHdpdGggc3RhdHVzIHJlYWQgZnJvbSBfU1VNTUFSWSBhbmQgX1BBU1MgYml0cy4KICAqLwotI2RlZmluZSAgUkVHX0JJTV9SQU1fQklTVCAgICAgICAgICAgICAgMHgxMDJDICAvKiBCSU0gUkFNIChyZWFkIGJ1ZmZlcikgQklTVCAKKyNkZWZpbmUgIFJFR19CSU1fUkFNX0JJU1QgICAgICAgICAgICAgIDB4MTAyQyAgLyogQklNIFJBTSAocmVhZCBidWZmZXIpIEJJU1QKIAkJCQkJCSAgY29udHJvbC9zdGF0dXMgKi8KICNkZWZpbmUgICAgQklNX1JBTV9CSVNUX1JEX1NUQVJUICAgICAgIDB4MDEgICAgLyogc3RhcnQgQklTVCBmb3IgQklNIHJlYWQgYnVmZmVyICovCiAjZGVmaW5lICAgIEJJTV9SQU1fQklTVF9XUl9TVEFSVCAgICAgICAweDAyICAgIC8qIHN0YXJ0IEJJU1QgZm9yIEJJTSB3cml0ZSBidWZmZXIuCkBAIC0zMjEsNyArMzIxLDcgQEAKICNkZWZpbmUgICAgQklNX1JBTV9CSVNUX1JEX0xPV19QQVNTICAgIDB4MTAgICAgLyogcmVhZCBsb3cgYmFuayBwYXNzZXMgQklTVCAqLwogI2RlZmluZSAgICBCSU1fUkFNX0JJU1RfUkRfSElfUEFTUyAgICAgMHgyMCAgICAvKiByZWFkIGhpZ2ggYmFuayBwYXNzZXMgQklTVCAqLwogI2RlZmluZSAgICBCSU1fUkFNX0JJU1RfV1JfTE9XX1BBU1MgICAgMHg0MCAgICAvKiB3cml0ZSBsb3cgYmFuayBwYXNzZXMgQklTVC4KLQkJCQkJCSAgQ2Fzc2luaSBvbmx5LiByZXNlcnZlZCBpbiAKKwkJCQkJCSAgQ2Fzc2luaSBvbmx5LiByZXNlcnZlZCBpbgogCQkJCQkJICBDYXNzaW5pKy4gKi8KICNkZWZpbmUgICAgQklNX1JBTV9CSVNUX1dSX0hJX1BBU1MgICAgIDB4ODAgICAgLyogd3JpdGUgaGlnaCBiYW5rIHBhc3NlcyBCSVNULgogCQkJCQkJICBDYXNzaW5pIG9ubHkuIHJlc2VydmVkIGluCkBAIC0zMzMsNyArMzMzLDcgQEAKICNkZWZpbmUgIFJFR19CSU1fRElBR19NVVggICAgICAgICAgICAgIDB4MTAzMCAgLyogQklNIGRpYWdub3N0aWMgcHJvYmUgbXV4CiAJCQkJCQkgIHNlbGVjdCByZWdpc3RlciAqLwogCi0vKiBlbmFibGUgcHJvYmUgbW9uaXRvcmluZyBtb2RlIGFuZCBzZWxlY3QgZGF0YSBhcHBlYXJpbmcgb24gdGhlIFBfQSogYnVzLiBiaXQgCisvKiBlbmFibGUgcHJvYmUgbW9uaXRvcmluZyBtb2RlIGFuZCBzZWxlY3QgZGF0YSBhcHBlYXJpbmcgb24gdGhlIFBfQSogYnVzLiBiaXQKICAqIHZhbHVlcyBmb3IgX1NFTF9ISV9NQVNLIGFuZCBfU0VMX0xPV19NQVNLOgogICogMHgwOiBpbnRlcm5hbCBwcm9iZVs3OjBdIChwY2kgYXJiIHN0YXRlLCB3dGMgZW1wdHkgdywgd3RjIGZ1bGwgdywgd3RjIGVtcHR5IHcsCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHd0YyBlbXB0eSByLCBwb3N0IHBjaSkKQEAgLTM1Myw3ICszNTMsNyBAQAogICogMHhlOiBocCBwcm9iZVs3OjBdIAkgICAgICAweGY6IG1hYyBwcm9iZVs3OjBdCiAgKi8KICNkZWZpbmUgIFJFR19QTFVTX1BST0JFX01VWF9TRUxFQ1QgICAgIDB4MTAzNCAvKiBDYXNzaW5pKzogUFJPQkUgTVVYIFNFTEVDVCAqLwotI2RlZmluZSAgICBQUk9CRV9NVVhfRU4gICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBhbGxvdyBwcm9iZSBzaWduYWxzIHRvIGJlIAorI2RlZmluZSAgICBQUk9CRV9NVVhfRU4gICAgICAgICAgICAgICAgMHg4MDAwMDAwMCAvKiBhbGxvdyBwcm9iZSBzaWduYWxzIHRvIGJlCiAJCQkJCQkgICAgIGRyaXZlbiBvbiBsb2NhbCBidXMgUF9BWzE1OjBdCiAJCQkJCQkgICAgIGZvciBkZWJ1Z2dpbmcgKi8KICNkZWZpbmUgICAgUFJPQkVfTVVYX1NVQl9NVVhfTUFTSyAgICAgIDB4MDAwMEZGMDAgLyogc2VsZWN0IHN1YiBtb2R1bGUgcHJvYmUgc2lnbmFsczoKQEAgLTM2MiwyOCArMzYyLDI4IEBACiAJCQkJCQkgICAgIDB4MzAgPSB0eFsxOjBdCiAJCQkJCQkgICAgIDB4QzAgPSBocFsxOjBdICovCiAjZGVmaW5lICAgIFBST0JFX01VWF9TRUxfSElfTUFTSyAgICAgICAweDAwMDAwMEYwIC8qIHNlbGVjdCB3aGljaCBtb2R1bGUgdG8gYXBwZWFyCi0JCQkJCQkgICAgIG9uIFBfQVsxNTo4XS4gc2VlIGFib3ZlIGZvciAKKwkJCQkJCSAgICAgb24gUF9BWzE1OjhdLiBzZWUgYWJvdmUgZm9yCiAJCQkJCQkgICAgIHZhbHVlcy4gKi8KICNkZWZpbmUgICAgUFJPQkVfTVVYX1NFTF9MT1dfTUFTSyAgICAgIDB4MDAwMDAwMEYgLyogc2VsZWN0IHdoaWNoIG1vZHVsZSB0byBhcHBlYXIKLQkJCQkJCSAgICAgb24gUF9BWzc6MF0uIHNlZSBhYm92ZSBmb3IgCisJCQkJCQkgICAgIG9uIFBfQVs3OjBdLiBzZWUgYWJvdmUgZm9yCiAJCQkJCQkgICAgIHZhbHVlcy4gKi8KIAotLyogdmFsdWVzIG1lYW4gdGhlIHNhbWUgdGhpbmcgYXMgUkVHX0lOVFJfTUFTSyBleGNlcCB0aGF0IGl0J3MgZm9yIElOVEIuIAorLyogdmFsdWVzIG1lYW4gdGhlIHNhbWUgdGhpbmcgYXMgUkVHX0lOVFJfTUFTSyBleGNlcCB0aGF0IGl0J3MgZm9yIElOVEIuCiAgREVGQVVMVDogMHgxRiAqLwogI2RlZmluZSAgUkVHX1BMVVNfSU5UUl9NQVNLXzEgICAgICAgICAgMHgxMDM4IC8qIENhc3NpbmkrOiBpbnRlcnJ1cHQgbWFzawogCQkJCQkJIHJlZ2lzdGVyIDIgZm9yIElOVEIgKi8KICNkZWZpbmUgIFJFR19QTFVTX0lOVFJOX01BU0soeCkgICAgICAgKFJFR19QTFVTX0lOVFJfTUFTS18xICsgKCh4KSAtIDEpKjE2KQotLyogYml0cyBjb3JyZXNwb25kIHRvIGJvdGggX01BU0sgYW5kIF9TVEFUVVMgcmVnaXN0ZXJzLiBfQUxUIGNvcnJlc3BvbmRzIHRvIAotICogYWxsIG9mIHRoZSBhbHRlcm5hdGUgKDItNCkgSU5UUiByZWdpc3RlcnMgd2hpbGUgXzEgY29ycmVzcG9uZHMgdG8gb25seSAKLSAqIF9NQVNLXzEgYW5kIF9TVEFUVVNfMSByZWdpc3RlcnMuIAorLyogYml0cyBjb3JyZXNwb25kIHRvIGJvdGggX01BU0sgYW5kIF9TVEFUVVMgcmVnaXN0ZXJzLiBfQUxUIGNvcnJlc3BvbmRzIHRvCisgKiBhbGwgb2YgdGhlIGFsdGVybmF0ZSAoMi00KSBJTlRSIHJlZ2lzdGVycyB3aGlsZSBfMSBjb3JyZXNwb25kcyB0byBvbmx5CisgKiBfTUFTS18xIGFuZCBfU1RBVFVTXzEgcmVnaXN0ZXJzLgogICogREVGQVVMVDogMHg3IGZvciBNQVNLIHJlZ2lzdGVycywgMHgwIGZvciBBTElBU19DTEVBUiByZWdpc3RlcnMKICAqLwotI2RlZmluZSAgICBJTlRSX1JYX0RPTkVfQUxUICAgICAgICAgICAgICAweDAxICAKKyNkZWZpbmUgICAgSU5UUl9SWF9ET05FX0FMVCAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSAgICBJTlRSX1JYX0NPTVBfRlVMTF9BTFQgICAgICAgICAweDAyCiAjZGVmaW5lICAgIElOVFJfUlhfQ09NUF9BRl9BTFQgICAgICAgICAgIDB4MDQKICNkZWZpbmUgICAgSU5UUl9SWF9CVUZfVU5BVkFJTF8xICAgICAgICAgMHgwOAogI2RlZmluZSAgICBJTlRSX1JYX0JVRl9BRV8xICAgICAgICAgICAgICAweDEwIC8qIGFsbW9zdCBlbXB0eSAqLwotI2RlZmluZSAgICBJTlRSTl9NQVNLX1JYX0VOICAgICAgICAgICAgICAweDgwICAgICAKKyNkZWZpbmUgICAgSU5UUk5fTUFTS19SWF9FTiAgICAgICAgICAgICAgMHg4MAogI2RlZmluZSAgICBJTlRSTl9NQVNLX0NMRUFSX0FMTCAgICAgICAgICAoSU5UUl9SWF9ET05FX0FMVCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfUlhfQ09NUF9GVUxMX0FMVCB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElOVFJfUlhfQ09NUF9BRl9BTFQgfCBcCkBAIC0zOTksNyArMzk5LDcgQEAKIAkJCQkJCSByZWdpc3RlciAyIGZvciBJTlRCICovCiAjZGVmaW5lICBSRUdfUExVU19BTElBU05fQ0xFQVIoeCkgICAgICAoUkVHX1BMVVNfQUxJQVNfQ0xFQVJfMSArICgoeCkgLSAxKSoxNikKIAotI2RlZmluZSAgUkVHX1BMVVNfSU5UUl9TVEFUVVNfQUxJQVNfMSAgMHgxMDQ0IC8qIENhc3NpbmkrOiBpbnRlcnJ1cHQgc3RhdHVzIAorI2RlZmluZSAgUkVHX1BMVVNfSU5UUl9TVEFUVVNfQUxJQVNfMSAgMHgxMDQ0IC8qIENhc3NpbmkrOiBpbnRlcnJ1cHQgc3RhdHVzCiAJCQkJCQkgcmVnaXN0ZXIgYWxpYXMgMiBmb3IgSU5UQiAqLwogI2RlZmluZSAgUkVHX1BMVVNfSU5UUk5fU1RBVFVTX0FMSUFTKHgpIChSRUdfUExVU19JTlRSX1NUQVRVU19BTElBU18xICsgKCh4KSAtIDEpKjE2KQogCkBAIC00MTEsMTggKzQxMSwxOCBAQAogI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX0NMQSAgICAgICAgICAgICAweDAwMDAwMDA0IC8qIDEgPSBwaHkgbGluazEwMGxlZCAqLwogI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX0xMQSAgICAgICAgICAgICAweDAwMDAwMDA4IC8qIDEgPSBwaHkgbGluazEwMDBsZWQgKi8KICNkZWZpbmUgICBTQVRVUk5fUENGR19STEEgICAgICAgICAgICAgMHgwMDAwMDAxMCAvKiAxID0gcGh5IGR1cGxleGxlZCAqLwotI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX1BEUyAgICAgICAgICAgICAweDAwMDAwMDIwIC8qIHBoeSBkZWJ1ZyBtb2RlLiAKKyNkZWZpbmUgICBTQVRVUk5fUENGR19QRFMgICAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBwaHkgZGVidWcgbW9kZS4KIAkJCQkJCSAgICAwID0gbm9ybWFsICovCi0jZGVmaW5lICAgU0FUVVJOX1BDRkdfTVRQICAgICAgICAgICAgIDB4MDAwMDAwODAgLyogdGVzdCBwb2ludCBzZWxlY3QgKi8gCi0jZGVmaW5lICAgU0FUVVJOX1BDRkdfR01PICAgICAgICAgICAgIDB4MDAwMDAxMDAgLyogR01JSSBvYnNlcnZlLiAxID0gCisjZGVmaW5lICAgU0FUVVJOX1BDRkdfTVRQICAgICAgICAgICAgIDB4MDAwMDAwODAgLyogdGVzdCBwb2ludCBzZWxlY3QgKi8KKyNkZWZpbmUgICBTQVRVUk5fUENGR19HTU8gICAgICAgICAgICAgMHgwMDAwMDEwMCAvKiBHTUlJIG9ic2VydmUuIDEgPQogCQkJCQkJICAgIEdNSUkgb24gU0VSREVTIHBpbnMgZm9yCiAJCQkJCQkgICAgbW9uaXRvcmluZy4gKi8KICNkZWZpbmUgICBTQVRVUk5fUENGR19GU0kgICAgICAgICAgICAgMHgwMDAwMDIwMCAvKiAxID0gZnJlZXplIHNlcmRlcy9nbWlpLiBhbGwKIAkJCQkJCSAgICBwaW5zIGNvbmZpZ2VkIGFzIG91dHB1dHMuCiAJCQkJCQkgICAgZm9yIHBvd2VyIHNhdmluZyB3aGVuIHVzaW5nCiAJCQkJCQkgICAgaW50ZXJuYWwgcGh5LiAqLwotI2RlZmluZSAgIFNBVFVSTl9QQ0ZHX0xBRCAgICAgICAgICAgICAweDAwMDAwODAwIC8qIDAgPSBtYWMgY29yZSBsZWQgY3RybCAKLQkJCQkJCSAgICBwb2xhcml0eSBmcm9tIHN0cmFwcGluZyAKKyNkZWZpbmUgICBTQVRVUk5fUENGR19MQUQgICAgICAgICAgICAgMHgwMDAwMDgwMCAvKiAwID0gbWFjIGNvcmUgbGVkIGN0cmwKKwkJCQkJCSAgICBwb2xhcml0eSBmcm9tIHN0cmFwcGluZwogCQkJCQkJICAgIHZhbHVlLgogCQkJCQkJICAgIDEgPSBtYWMgY29yZSBsZWQgY3RybAogCQkJCQkJICAgIHBvbGFyaXR5IGFjdGl2ZSBsb3cuICovCkBAIC00MzMsMjYgKzQzMywyNiBAQAogI2RlZmluZSBNQVhfVFhfUklOR1MgICAgICAgICAgICAgICAgICAoMSA8PCBNQVhfVFhfUklOR1NfU0hJRlQpCiAjZGVmaW5lIE1BWF9UWF9SSU5HU19NQVNLICAgICAgICAgICAgIChNQVhfVFhfUklOR1MgLSAxKQogCi0vKiBUWCBjb25maWd1cmF0aW9uLiAKLSAqIGRlc2NyIHJpbmcgc2l6ZXMgc2l6ZSA9IDMyICogKDEgPDwgbiksIG4gPCA5LiBlLmcuLCAweDggPSA4ay4gZGVmYXVsdDogMHg4IAorLyogVFggY29uZmlndXJhdGlvbi4KKyAqIGRlc2NyIHJpbmcgc2l6ZXMgc2l6ZSA9IDMyICogKDEgPDwgbiksIG4gPCA5LiBlLmcuLCAweDggPSA4ay4gZGVmYXVsdDogMHg4CiAgKiBERUZBVUxUOiAweDNGMDAwMDAxCiAgKi8KICNkZWZpbmUgIFJFR19UWF9DRkcgICAgICAgICAgICAgICAgICAgIDB4MjAwNCAgLyogVFggY29uZmlnICovCiAjZGVmaW5lICAgIFRYX0NGR19ETUFfRU4gICAgICAgICAgICAgICAweDAwMDAwMDAxICAvKiBlbmFibGUgVFggRE1BLiBpZiBjbGVhcmVkLCBETUEKIAkJCQkJCSAgICAgIHdpbGwgc3RvcCBhZnRlciB4ZmVyIG9mIGN1cnJlbnQKIAkJCQkJCSAgICAgIGJ1ZmZlciBoYXMgYmVlbiBjb21wbGV0ZWQuICovCi0jZGVmaW5lICAgIFRYX0NGR19GSUZPX1BJT19TRUwgICAgICAgICAweDAwMDAwMDAyICAvKiBUWCBETUEgRklGTyBjYW4gYmUgCi0JCQkJCQkgICAgICBhY2Nlc3NlZCB3LyBGSUZPIGFkZHIgCi0JCQkJCQkgICAgICBhbmQgZGF0YSByZWdpc3RlcnMuIAotCQkJCQkJICAgICAgVFggRE1BIHNob3VsZCBiZSAKKyNkZWZpbmUgICAgVFhfQ0ZHX0ZJRk9fUElPX1NFTCAgICAgICAgIDB4MDAwMDAwMDIgIC8qIFRYIERNQSBGSUZPIGNhbiBiZQorCQkJCQkJICAgICAgYWNjZXNzZWQgdy8gRklGTyBhZGRyCisJCQkJCQkgICAgICBhbmQgZGF0YSByZWdpc3RlcnMuCisJCQkJCQkgICAgICBUWCBETUEgc2hvdWxkIGJlCiAJCQkJCQkgICAgICBkaXNhYmxlZC4gKi8KICNkZWZpbmUgICAgVFhfQ0ZHX0RFU0NfUklORzBfTUFTSyAgICAgIDB4MDAwMDAwM0MgIC8qICMgZGVzYyBlbnRyaWVzIGluCiAJCQkJCQkgICAgICByaW5nIDEuICovCiAjZGVmaW5lICAgIFRYX0NGR19ERVNDX1JJTkcwX1NISUZUICAgICAyCiAjZGVmaW5lICAgIFRYX0NGR19ERVNDX1JJTkdOX01BU0soYSkgICAoVFhfQ0ZHX0RFU0NfUklORzBfTUFTSyA8PCAoYSkqNCkKICNkZWZpbmUgICAgVFhfQ0ZHX0RFU0NfUklOR05fU0hJRlQoYSkgIChUWF9DRkdfREVTQ19SSU5HMF9TSElGVCArIChhKSo0KQotI2RlZmluZSAgICBUWF9DRkdfUEFDRURfTU9ERSAgICAgICAgICAgMHgwMDEwMDAwMCAgLyogVFhfQUxMIG9ubHkgc2V0IGFmdGVyIAotCQkJCQkJICAgICAgVFggRklGTyBiZWNvbWVzIGVtcHR5LiAKKyNkZWZpbmUgICAgVFhfQ0ZHX1BBQ0VEX01PREUgICAgICAgICAgIDB4MDAxMDAwMDAgIC8qIFRYX0FMTCBvbmx5IHNldCBhZnRlcgorCQkJCQkJICAgICAgVFggRklGTyBiZWNvbWVzIGVtcHR5LgogCQkJCQkJICAgICAgaWYgMCwgVFhfQUxMIHNldAogCQkJCQkJICAgICAgaWYgZGVzY3IgcXVldWUgZW1wdHkuICovCiAjZGVmaW5lICAgIFRYX0NGR19ETUFfUkRQSVBFX0RJUyAgICAgICAweDAxMDAwMDAwICAvKiBhbHdheXMgc2V0IHRvIDEgKi8KQEAgLTQ3MCwyNiArNDcwLDI2IEBACiAJCQkJCQkgICAgICB0aHJvdWdoIFE0ICovCiAjZGVmaW5lICAgIFRYX0NGR19JTlRSX0NPTVBXQl9ESVMgICAgICAweDIwMDAwMDAwICAvKiBkaXNhYmxlIHByZS1pbnRlcnJ1cHQgY29tcGxldGlvbgogCQkJCQkJICAgICAgd3JpdGViYWNrICovCi0jZGVmaW5lICAgIFRYX0NGR19DVFhfU0VMX01BU0sgICAgICAgICAweEMwMDAwMDAwICAvKiBzZWxlY3RzIHR4IHRlc3QgcG9ydCAKKyNkZWZpbmUgICAgVFhfQ0ZHX0NUWF9TRUxfTUFTSyAgICAgICAgIDB4QzAwMDAwMDAgIC8qIHNlbGVjdHMgdHggdGVzdCBwb3J0CiAJCQkJCQkgICAgICBjb25uZWN0aW9uCi0JCQkJCQkgICAgICAwYjAwOiB0eCBtYWMgcmVxLCAKKwkJCQkJCSAgICAgIDBiMDA6IHR4IG1hYyByZXEsCiAJCQkJCQkgICAgICAgICAgICB0eCBtYWMgcmV0cnkgcmVxLAogCQkJCQkJCSAgICB0eCBhY2sgYW5kIHR4IHRhZy4KLQkJCQkJCSAgICAgIDBiMDE6IHR4ZG1hIHJkIHJlcSwgCisJCQkJCQkgICAgICAwYjAxOiB0eGRtYSByZCByZXEsCiAJCQkJCQkgICAgICAgICAgICB0eGRtYSByZCBhY2ssCiAJCQkJCQkJICAgIHR4ZG1hIHJkIHJkeSwKIAkJCQkJCQkgICAgdHhkbWEgcmQgdHlwZTAKLQkJCQkJCSAgICAgIDBiMTE6IHR4ZG1hIHdyIHJlcSwgCisJCQkJCQkgICAgICAwYjExOiB0eGRtYSB3ciByZXEsCiAJCQkJCQkgICAgICAgICAgICB0eGRtYSB3ciBhY2ssCiAJCQkJCQkJICAgIHR4ZG1hIHdyIHJkeSwKIAkJCQkJCQkgICAgdHhkbWEgd3IgeGZyIGRvbmUuICovCiAjZGVmaW5lICAgIFRYX0NGR19DVFhfU0VMX1NISUZUICAgICAgICAzMAotCQkJCQkJICAgICAgCisKIC8qIDExLWJpdCBjb3VudGVycyB0aGF0IHBvaW50IHRvIG5leHQgbG9jYXRpb24gaW4gRklGTyB0byBiZSBsb2FkZWQvcmV0cmlldmVkLgogICogdXNlZCBmb3IgZGlhZ25vc3RpY3Mgb25seS4KICAqLwogI2RlZmluZSAgUkVHX1RYX0ZJRk9fV1JJVEVfUFRSICAgICAgICAgMHgyMDE0ICAvKiBUWCBGSUZPIHdyaXRlIHBvaW50ZXIgKi8KLSNkZWZpbmUgIFJFR19UWF9GSUZPX1NIQURPV19XUklURV9QVFIgIDB4MjAxOCAgLyogVFggRklGTyBzaGFkb3cgd3JpdGUgCisjZGVmaW5lICBSRUdfVFhfRklGT19TSEFET1dfV1JJVEVfUFRSICAweDIwMTggIC8qIFRYIEZJRk8gc2hhZG93IHdyaXRlCiAJCQkJCQkgIHBvaW50ZXIuIHRlbXAgaG9sZCByZWcuCiAJCQkJCSAgICAgICAgICBkaWFnbm9zdGljcyBvbmx5LiAqLwogI2RlZmluZSAgUkVHX1RYX0ZJRk9fUkVBRF9QVFIgICAgICAgICAgMHgyMDFDICAvKiBUWCBGSUZPIHJlYWQgcG9pbnRlciAqLwpAQCAtNTA5LDcgKzUwOSw3IEBACiAjZGVmaW5lICAgIFRYX1NNXzFfQ0FDSEVfTUFTSyAgICAgICAgICAweDAzQzAwMDAwICAgLyogZGVzYy4gcHJlZmV0Y2ggY2FjaGUgY29udHJvbGxlcgogCQkJCQkJICAgICAgIHN0YXRlIG1hY2hpbmUgKi8KICNkZWZpbmUgICAgVFhfU01fMV9DQlFfQVJCX01BU0sgICAgICAgIDB4RjgwMDAwMDAgICAvKiBDQlEgYXJiaXRlciBzdGF0ZSBtYWNoaW5lICovCi0JCQkJCQkgICAgICAgICAKKwogI2RlZmluZSAgUkVHX1RYX1NNXzIgICAgICAgICAgICAgICAgICAgMHgyMDJDICAvKiBUWCBzdGF0ZSBtYWNoaW5lIHJlZyAjMiAqLwogI2RlZmluZSAgICBUWF9TTV8yX0NPTVBfV0JfTUFTSyAgICAgICAgMHgwNyAgICAvKiBjb21wbGV0aW9uIHdyaXRlYmFjayBzbSAqLwogI2RlZmluZQkgICBUWF9TTV8yX1NVQl9MT0FEX01BU0sgICAgICAgMHgzOCAgICAvKiBzdWIgbG9hZCBzdGF0ZSBtYWNoaW5lICovCkBAIC01MjEsOSArNTIxLDkgQEAKICNkZWZpbmUgIFJFR19UWF9EQVRBX1BUUl9MT1cgICAgICAgICAgIDB4MjAzMCAgLyogVFggZGF0YSBwb2ludGVyIGxvdyAqLwogI2RlZmluZSAgUkVHX1RYX0RBVEFfUFRSX0hJICAgICAgICAgICAgMHgyMDM0ICAvKiBUWCBkYXRhIHBvaW50ZXIgaGlnaCAqLwogCi0vKiAxMyBiaXQgcmVnaXN0ZXJzIHdyaXR0ZW4gYnkgZHJpdmVyIHcvIGRlc2NyaXB0b3IgdmFsdWUgdGhhdCBmb2xsb3dzIAorLyogMTMgYml0IHJlZ2lzdGVycyB3cml0dGVuIGJ5IGRyaXZlciB3LyBkZXNjcmlwdG9yIHZhbHVlIHRoYXQgZm9sbG93cwogICogbGFzdCB2YWxpZCB4bWl0IGRlc2NyaXB0b3IuIGtpY2sgIyBhbmQgY29tcGxldGUgIyB2YWx1ZXMgYXJlIHVzZWQgYnkKLSAqIHRoZSB4bWl0IGRtYSBlbmdpbmUgdG8gY29udHJvbCB0eCBkZXNjciBmZXRjaGluZy4gaWYgPiAxIHZhbGlkIAorICogdGhlIHhtaXQgZG1hIGVuZ2luZSB0byBjb250cm9sIHR4IGRlc2NyIGZldGNoaW5nLiBpZiA+IDEgdmFsaWQKICAqIHR4IGRlc2NyIGlzIGF2YWlsYWJsZSB3aXRoaW4gdGhlIGNhY2hlIGxpbmUgYmVpbmcgcmVhZCwgY2Fzc2luaSB3aWxsCiAgKiBpbnRlcm5hbGx5IGNhY2hlIHVwIHRvIDQgb2YgdGhlbS4gMCBvbiByZXNldC4gX0tJQ0sgPSBydywgX0NPTVAgPSByby4KICAqLwpAQCAtNTMyLDEyICs1MzIsMTIgQEAKICNkZWZpbmUgIFJFR19UWF9DT01QMCAgICAgICAgICAgICAgICAgIDB4MjA0OCAgLyogVFggY29tcGxldGlvbiByZWcgIzEgKi8KICNkZWZpbmUgIFJFR19UWF9DT01QTih4KSAgICAgICAgICAgICAgIChSRUdfVFhfQ09NUDAgKyAoeCkqNCkKIAotLyogdmFsdWVzIG9mIFRYX0NPTVBMRVRFXzEtNCBhcmUgd3JpdHRlbi4gZWFjaCBjb21wbGV0aW9uIHJlZ2lzdGVyIAotICogaXMgMmJ5dGVzIGluIHNpemUgYW5kIGNvbnRpZ3VvdXMuIDhCIGFsbG9jYXRpb24gdy8gOEIgYWxpZ25tZW50LiAKKy8qIHZhbHVlcyBvZiBUWF9DT01QTEVURV8xLTQgYXJlIHdyaXR0ZW4uIGVhY2ggY29tcGxldGlvbiByZWdpc3RlcgorICogaXMgMmJ5dGVzIGluIHNpemUgYW5kIGNvbnRpZ3VvdXMuIDhCIGFsbG9jYXRpb24gdy8gOEIgYWxpZ25tZW50LgogICogTk9URTogY29tcGxldGlvbiByZWcgdmFsdWVzIGFyZSBvbmx5IHdyaXR0ZW4gYmFjayBwcmlvciB0byBUWF9JTlRNRSBhbmQKLSAqIFRYX0FMTCBpbnRlcnJ1cHRzLiBhdCBhbGwgb3RoZXIgdGltZXMsIHRoZSBtb3N0IHVwLXRvLWRhdGUgaW5kZXggdmFsdWVzIAotICogc2hvdWxkIGJlIG9idGFpbmVkIGZyb20gdGhlIFJFR19UWF9DT01QTEVURV8jIHJlZ2lzdGVycy4gCi0gKiBoZXJlJ3MgdGhlIGxheW91dDogCisgKiBUWF9BTEwgaW50ZXJydXB0cy4gYXQgYWxsIG90aGVyIHRpbWVzLCB0aGUgbW9zdCB1cC10by1kYXRlIGluZGV4IHZhbHVlcworICogc2hvdWxkIGJlIG9idGFpbmVkIGZyb20gdGhlIFJFR19UWF9DT01QTEVURV8jIHJlZ2lzdGVycy4KKyAqIGhlcmUncyB0aGUgbGF5b3V0OgogICogb2Zmc2V0IGZyb20gYmFzZSBhZGRyICAgICAgY29tcGxldGlvbiAjIGJ5dGUKICAqICAgICAgICAgICAwICAgICAgICAgICAgICAgIFRYX0NPTVBMRVRFXzFfTVNCCiAgKgkgICAgIDEgICAgICAgICAgICAgICAgVFhfQ09NUExFVEVfMV9MU0IKQEAgLTU1OCw3ICs1NTgsNyBAQAogI2RlZmluZSAgICBUWF9DT01QV0JfTFNCX01BU0sgICAgICAgMHgwMDAwMDAwMDAwMDBGRjAwVUxMCiAjZGVmaW5lICAgIFRYX0NPTVBXQl9MU0JfU0hJRlQgICAgICA4CiAjZGVmaW5lICAgIFRYX0NPTVBXQl9ORVhUKHgpICAgICAgICAoKHgpID4+IDE2KQotCQkJCQkJICAgICAgCisKIC8qIDUzIE1TQiB1c2VkIGFzIGJhc2UgYWRkcmVzcy4gMTEgTFNCIGFzc3VtZWQgdG8gYmUgMC4gVFggZGVzYyBwb2ludGVyIG11c3QKICAqIGJlIDJLQi1hbGlnbmVkLiAqLwogI2RlZmluZSAgUkVHX1RYX0RCMF9MT1cgICAgICAgICAweDIwNjAgIC8qIFRYIGRlc2NyaXB0b3IgYmFzZSBsb3cgIzEgKi8KQEAgLTU5NCwxMSArNTk0LDExIEBACiAjZGVmaW5lICBSRUdfVFhfRklGT19EQVRBX0hJX1QwICAgICAgICAweDIxMTQgIC8qIFRYIEZJRk8gZGF0YSBoaWdoIHQwICovCiAjZGVmaW5lICBSRUdfVFhfRklGT19TSVpFICAgICAgICAgICAgICAweDIxMTggIC8qIChybykgVFggRklGTyBzaXplID0gMHgwOTAgPSA5S0IgKi8KIAotLyogOS1iaXQgcmVnaXN0ZXIgY29udHJvbHMgQklTVCBvZiBUWCBGSUZPLiBiaXQgc2V0IGluZGljYXRlcyB0aGF0IHRoZSBCSVNUIAorLyogOS1iaXQgcmVnaXN0ZXIgY29udHJvbHMgQklTVCBvZiBUWCBGSUZPLiBiaXQgc2V0IGluZGljYXRlcyB0aGF0IHRoZSBCSVNUCiAgKiBwYXNzZWQgZm9yIHRoZSBzcGVjaWZpZWQgbWVtb3J5CiAgKi8KICNkZWZpbmUgIFJFR19UWF9SQU1CSVNUICAgICAgICAgICAgICAgIDB4MjExQyAvKiBUWCBSQU1CSVNUIGNvbnRyb2wvc3RhdHVzICovCi0jZGVmaW5lICAgIFRYX1JBTUJJU1RfU1RBVEUgICAgICAgICAgICAweDAxQzAgLyogcHJvZ3Jlc3Mgc3RhdGUgb2YgUkFNQklTVCAKKyNkZWZpbmUgICAgVFhfUkFNQklTVF9TVEFURSAgICAgICAgICAgIDB4MDFDMCAvKiBwcm9ncmVzcyBzdGF0ZSBvZiBSQU1CSVNUCiAJCQkJCQkgY29udHJvbGxlciBzdGF0ZSBtYWNoaW5lICovCiAjZGVmaW5lICAgIFRYX1JBTUJJU1RfUkFNMzNBX1BBU1MgICAgICAweDAwMjAgLyogUkFNMzNBIHBhc3NlZCAqLwogI2RlZmluZSAgICBUWF9SQU1CSVNUX1JBTTMyQV9QQVNTICAgICAgMHgwMDEwIC8qIFJBTTMyQSBwYXNzZWQgKi8KQEAgLTYxMiwzMyArNjEyLDMzIEBACiAjZGVmaW5lIE1BWF9SWF9ERVNDX1JJTkdTICAgICAgICAgICAgICAyCiAjZGVmaW5lIE1BWF9SWF9DT01QX1JJTkdTICAgICAgICAgICAgICA0CiAKLS8qIHJlY2VpdmUgRE1BIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gZGVmYXVsdDogMHg4MDkxMCAKKy8qIHJlY2VpdmUgRE1BIGNoYW5uZWwgY29uZmlndXJhdGlvbi4gZGVmYXVsdDogMHg4MDkxMAogICogZnJlZSByaW5nIHNpemUgICAgICAgPSAoMSA8PCBuKSozMiAgLT4gWzMyIC0gOGtdCi0gKiBjb21wbGV0aW9uIHJpbmcgc2l6ZSA9ICgxIDw8IG4pKjEyOCAtPiBbMTI4IC0gMzJrXSwgbiA8IDkgCisgKiBjb21wbGV0aW9uIHJpbmcgc2l6ZSA9ICgxIDw8IG4pKjEyOCAtPiBbMTI4IC0gMzJrXSwgbiA8IDkKICAqIERFRkFVTFQ6IDB4ODA5MTAKICAqLwogI2RlZmluZSAgUkVHX1JYX0NGRyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogUlggY29uZmlnICovCiAjZGVmaW5lICAgIFJYX0NGR19ETUFfRU4gICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBlbmFibGUgUlggRE1BLiAwIHN0b3BzCiAJCQkJCQkJIGNoYW5uZWwgYXMgc29vbiBhcyBjdXJyZW50CiAJCQkJCQkJIGZyYW1lIHhmZXIgaGFzIGNvbXBsZXRlZC4KLQkJCQkJCQkgZHJpdmVyIHNob3VsZCBkaXNhYmxlIE1BQyAKLQkJCQkJCQkgZm9yIDIwMG1zIGJlZm9yZSBkaXNhYmxpbmcgCisJCQkJCQkJIGRyaXZlciBzaG91bGQgZGlzYWJsZSBNQUMKKwkJCQkJCQkgZm9yIDIwMG1zIGJlZm9yZSBkaXNhYmxpbmcKIAkJCQkJCQkgUlggKi8KLSNkZWZpbmUgICAgUlhfQ0ZHX0RFU0NfUklOR19NQVNLICAgICAgICAweDAwMDAwMDFFIC8qICMgZGVzYyBlbnRyaWVzIGluIFJYIAotCQkJCQkJCSBmcmVlIGRlc2MgcmluZy4gCisjZGVmaW5lICAgIFJYX0NGR19ERVNDX1JJTkdfTUFTSyAgICAgICAgMHgwMDAwMDAxRSAvKiAjIGRlc2MgZW50cmllcyBpbiBSWAorCQkJCQkJCSBmcmVlIGRlc2MgcmluZy4KIAkJCQkJCQkgZGVmOiAweDggPSA4ayAqLwogI2RlZmluZSAgICBSWF9DRkdfREVTQ19SSU5HX1NISUZUICAgICAgIDEKICNkZWZpbmUgICAgUlhfQ0ZHX0NPTVBfUklOR19NQVNLICAgICAgICAweDAwMDAwMUUwIC8qICMgZGVzYyBlbnRyaWVzIGluIFJYIGNvbXBsZXRlCiAJCQkJCQkJIHJpbmcuIGRlZjogMHg4ID0gMzJrICovCiAjZGVmaW5lICAgIFJYX0NGR19DT01QX1JJTkdfU0hJRlQgICAgICAgNQotI2RlZmluZSAgICBSWF9DRkdfQkFUQ0hfRElTICAgICAgICAgICAgIDB4MDAwMDAyMDAgLyogZGlzYWJsZSByZWNlaXZlIGRlc2MgCisjZGVmaW5lICAgIFJYX0NGR19CQVRDSF9ESVMgICAgICAgICAgICAgMHgwMDAwMDIwMCAvKiBkaXNhYmxlIHJlY2VpdmUgZGVzYwogCQkJCQkJICAgICAgYmF0Y2hpbmcuIGRlZjogMHgwID0KIAkJCQkJCSAgICAgIGVuYWJsZWQgKi8KLSNkZWZpbmUgICAgUlhfQ0ZHX1NXSVZFTF9NQVNLICAgICAgICAgICAweDAwMDAxQzAwIC8qIGJ5dGUgb2Zmc2V0IG9mIHRoZSAxc3QgCi0JCQkJCQkgICAgICBkYXRhIGJ5dGUgb2YgdGhlIHBhY2tldCAKKyNkZWZpbmUgICAgUlhfQ0ZHX1NXSVZFTF9NQVNLICAgICAgICAgICAweDAwMDAxQzAwIC8qIGJ5dGUgb2Zmc2V0IG9mIHRoZSAxc3QKKwkJCQkJCSAgICAgIGRhdGEgYnl0ZSBvZiB0aGUgcGFja2V0CiAJCQkJCQkgICAgICB3L2luIDggYnl0ZSBib3VuZGFyZXMuCi0JCQkJCQkgICAgICB0aGlzIHN3aXZlbHMgdGhlIGRhdGEgCi0JCQkJCQkgICAgICBETUEnZWQgdG8gaGVhZGVyIAorCQkJCQkJICAgICAgdGhpcyBzd2l2ZWxzIHRoZSBkYXRhCisJCQkJCQkgICAgICBETUEnZWQgdG8gaGVhZGVyCiAJCQkJCQkgICAgICBidWZmZXJzLCBqdW1ibyBidWZmZXJzCiAJCQkJCQkgICAgICB3aGVuIGhlYWRlciBzcGxpdCBpcyBub3QKIAkJCQkJCSAgICAgIHJlcXVlc3RlZCBhbmQgTVRVIHNpemVkCkBAIC02NDcsMTcgKzY0NywxNyBAQAogCiAvKiBjYXNzaW5pKyBvbmx5ICovCiAjZGVmaW5lICAgIFJYX0NGR19ERVNDX1JJTkcxX01BU0sgICAgICAgMHgwMDBGMDAwMCAvKiAjIG9mIGRlc2MgZW50cmllcyBpbgotCQkJCQkJCSBSWCBmcmVlIGRlc2MgcmluZyAyLiAKKwkJCQkJCQkgUlggZnJlZSBkZXNjIHJpbmcgMi4KIAkJCQkJCQkgZGVmOiAweDggPSA4ayAqLwogI2RlZmluZSAgICBSWF9DRkdfREVTQ19SSU5HMV9TSElGVCAgICAgIDE2CiAKIAotLyogdGhlIHBhZ2Ugc2l6ZSByZWdpc3RlciBhbGxvd3MgY2Fzc2luaSBjaGlwcyB0byBkbyB0aGUgZm9sbG93aW5nIHdpdGggCisvKiB0aGUgcGFnZSBzaXplIHJlZ2lzdGVyIGFsbG93cyBjYXNzaW5pIGNoaXBzIHRvIGRvIHRoZSBmb2xsb3dpbmcgd2l0aAogICogcmVjZWl2ZWQgZGF0YToKICAqIFstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLV0gcGFnZQogICogW29mZl1bYnVmMV1bcGFkXVtvZmZdW2J1ZjJdW3BhZF1bb2ZmXVtidWYzXVtwYWRdW29mZl1bYnVmNF1bcGFkXQogICogfC0tLS0tLS0tLS0tLS0tfCA9IFBBR0VfU0laRV9CVUZGRVJfU1RSSURFCi0gKiBwYWdlID0gUEFHRV9TSVpFIAorICogcGFnZSA9IFBBR0VfU0laRQogICogb2Zmc2V0ID0gUEFHRV9TSVpFX01UVV9PRkYKICAqIGZvciB0aGUgYWJvdmUgZXhhbXBsZSwgTVRVX0JVRkZFUl9DT1VOVCA9IDQuCiAgKiBOT1RFOiBhcyBpcyBhcHBhcmVudCwgeW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBob2xkczoKQEAgLTY2NywyMCArNjY3LDIwIEBACiAjZGVmaW5lICBSRUdfUlhfUEFHRV9TSVpFICAgICAgICAgICAgICAgMHg0MDA0ICAvKiBSWCBwYWdlIHNpemUgKi8KICNkZWZpbmUgICAgUlhfUEFHRV9TSVpFX01BU0sgICAgICAgICAgICAweDAwMDAwMDAzIC8qIHNpemUgb2YgcGFnZXMgcG9pbnRlZCB0bwogCQkJCQkJICAgICAgYnkgcmVjZWl2ZSBkZXNjcmlwdG9ycy4KLQkJCQkJCSAgICAgIGlmIGp1bWJvIGJ1ZmZlcnMgYXJlIAotCQkJCQkJICAgICAgc3VwcG9ydGVkIHRoZSBwYWdlIHNpemUgCisJCQkJCQkgICAgICBpZiBqdW1ibyBidWZmZXJzIGFyZQorCQkJCQkJICAgICAgc3VwcG9ydGVkIHRoZSBwYWdlIHNpemUKIAkJCQkJCSAgICAgIHNob3VsZCBub3QgYmUgPCA4ay4KIAkJCQkJCSAgICAgIDBiMDAgPSAyaywgMGIwMSA9IDRrCiAJCQkJCQkgICAgICAwYjEwID0gOGssIDBiMTEgPSAxNmsKIAkJCQkJCSAgICAgIERFRkFVTFQ6IDhrICovCiAjZGVmaW5lICAgIFJYX1BBR0VfU0laRV9TSElGVCAgICAgICAgICAgMAogI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfTVRVX0NPVU5UX01BU0sgIDB4MDAwMDc4MDAgLyogIyBvZiBNVFUgYnVmZmVycyB0aGUgaHcKLQkJCQkJCSAgICAgIHBhY2tzIGludG8gYSBwYWdlLiAKKwkJCQkJCSAgICAgIHBhY2tzIGludG8gYSBwYWdlLgogCQkJCQkJICAgICAgREVGQVVMVDogNCAqLwogI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfTVRVX0NPVU5UX1NISUZUIDExCiAjZGVmaW5lICAgIFJYX1BBR0VfU0laRV9NVFVfU1RSSURFX01BU0sgMHgxODAwMDAwMCAvKiAjIG9mIGJ5dGVzIHRoYXQgc2VwYXJhdGUKLQkJCQkJCQkgZWFjaCBNVFUgYnVmZmVyICsgCi0JCQkJCQkJIG9mZnNldCBmcm9tIGVhY2ggCisJCQkJCQkJIGVhY2ggTVRVIGJ1ZmZlciArCisJCQkJCQkJIG9mZnNldCBmcm9tIGVhY2gKIAkJCQkJCQkgb3RoZXIuCiAJCQkJCQkJIDBiMDAgPSAxaywgMGIwMSA9IDJrCiAJCQkJCQkJIDBiMTAgPSA0aywgMGIxMSA9IDhrCkBAIC02ODgsMjQgKzY4OCwyNCBAQAogI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfTVRVX1NUUklERV9TSElGVCAyNwogI2RlZmluZSAgICBSWF9QQUdFX1NJWkVfTVRVX09GRl9NQVNLICAgIDB4QzAwMDAwMDAgLyogb2Zmc2V0IGluIGVhY2ggcGFnZSB0aGF0CiAJCQkJCQkgICAgICBodyB3cml0ZXMgdGhlIE1UVSBidWZmZXIKLQkJCQkJCSAgICAgIGludG8uIAotCQkJCQkJICAgICAgMGIwMCA9IDAsICAKKwkJCQkJCSAgICAgIGludG8uCisJCQkJCQkgICAgICAwYjAwID0gMCwKIAkJCQkJCSAgICAgIDBiMDEgPSA2NCBieXRlcwogCQkJCQkJICAgICAgMGIxMCA9IDk2LCAwYjExID0gMTI4CiAJCQkJCQkgICAgICBERUZBVUxUOiAweDEgKi8KICNkZWZpbmUgICAgUlhfUEFHRV9TSVpFX01UVV9PRkZfU0hJRlQgICAzMAotCQkJCQkJCSAKLS8qIDExLWJpdCBjb3VudGVyIHBvaW50cyB0byBuZXh0IGxvY2F0aW9uIGluIFJYIEZJRk8gdG8gYmUgbG9hZGVkL3JlYWQuIAorCisvKiAxMS1iaXQgY291bnRlciBwb2ludHMgdG8gbmV4dCBsb2NhdGlvbiBpbiBSWCBGSUZPIHRvIGJlIGxvYWRlZC9yZWFkLgogICogc2hhZG93IHdyaXRlIHBvaW50ZXJzIGVuYWJsZSByZXRyaWVzIGluIGNhc2Ugb2YgZWFybHkgcmVjZWl2ZSBhYm9ydHMuCiAgKiBERUZBVUxUOiAweDAuIGdlbmVyYXRlZCBvbiA2NC1iaXQgYm91bmRhcmllcy4KICAqLwogI2RlZmluZSAgUkVHX1JYX0ZJRk9fV1JJVEVfUFRSICAgICAgICAgICAgIDB4NDAwOCAgLyogUlggRklGTyB3cml0ZSBwb2ludGVyICovCiAjZGVmaW5lICBSRUdfUlhfRklGT19SRUFEX1BUUiAgICAgICAgICAgICAgMHg0MDBDICAvKiBSWCBGSUZPIHJlYWQgcG9pbnRlciAqLwotI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX1NIQURPV19XUklURV9QVFIgIDB4NDAxMCAgLyogUlggSVBQIEZJRk8gc2hhZG93IHdyaXRlIAorI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX1NIQURPV19XUklURV9QVFIgIDB4NDAxMCAgLyogUlggSVBQIEZJRk8gc2hhZG93IHdyaXRlCiAJCQkJCQkgICAgICBwb2ludGVyICovCiAjZGVmaW5lICBSRUdfUlhfSVBQX0ZJRk9fU0hBRE9XX1JFQURfUFRSICAgMHg0MDE0ICAvKiBSWCBJUFAgRklGTyBzaGFkb3cgcmVhZAogCQkJCQkJICAgICAgcG9pbnRlciAqLwotI2RlZmluZSAgUkVHX1JYX0lQUF9GSUZPX1JFQURfUFRSICAgICAgICAgIDB4NDAwQyAgLyogUlggSVBQIEZJRk8gcmVhZCAKKyNkZWZpbmUgIFJFR19SWF9JUFBfRklGT19SRUFEX1BUUiAgICAgICAgICAweDQwMEMgIC8qIFJYIElQUCBGSUZPIHJlYWQKIAkJCQkJCSAgICAgIHBvaW50ZXIuICg4LWJpdCBjb3VudGVyKSAqLwogCiAvKiBjdXJyZW50IHN0YXRlIG9mIFJYIERNQSBzdGF0ZSBlbmdpbmVzICsgb3RoZXIgaW5mbwpAQCAtNzM4LDcgKzczOCw3IEBACiAJCQkJCQkJIDB4MiA9IHdhaXQgeG9uCiAJCQkJCQkJIDB4MyA9IHdhaXQgeG9uIGFjayAqLwogI2RlZmluZSAgICBSWF9ERUJVR19EQVRBX1NUQVRFX01BU0sgICAgICAgIDB4MDAwMDAxRTAwIC8qIHVubG9hZCBkYXRhIHN0YXRlIG1hY2hpbmUKLQkJCQkJCQkgc3RhdGVzOiAKKwkJCQkJCQkgc3RhdGVzOgogCQkJCQkJCSAweDAgPSBpZGxlIGRhdGEKIAkJCQkJCQkgMHgxID0gaGVhZGVyIGJlZ2luCiAJCQkJCQkJIDB4MiA9IHhmZXIgaGVhZGVyCkBAIC03NDcsNyArNzQ3LDcgQEAKIAkJCQkJCQkgMHg1ID0geGZlciBtdHUKIAkJCQkJCQkgMHg2ID0geGZlciBtdHUgbGQKIAkJCQkJCQkgMHg3ID0ganVtYm8gYmVnaW4KLQkJCQkJCQkgMHg4ID0geGZlciBqdW1ibyAKKwkJCQkJCQkgMHg4ID0geGZlciBqdW1ibwogCQkJCQkJCSAweDkgPSB4ZmVyIGp1bWJvIGxkCiAJCQkJCQkJIDB4YSA9IHJlYXMgYmVnaW4KIAkJCQkJCQkgMHhiID0geGZlciByZWFzCkBAIC03NzYsMTUgKzc3NiwxNSBAQAogICogWE9GRiBQQVVTRSB1c2VzIHBhdXNlIHRpbWUgdmFsdWUgcHJlLXByb2dyYW1tZWQgaW4gdGhlIFNlbmQgUEFVU0UgTUFDIHJlZwogICogWE9OIFBBVVNFIHVzZXMgYSBwYXVzZSB0aW1lIG9mIDAuIGdyYW51bGFyaXR5IG9mIHRocmVzaG9sZCBpcyA2NGJ5dGVzLgogICogUEFVU0UgdGhyZXNob2xkcyBkZWZpbmVkIGluIHRlcm1zIG9mIEZJRk8gb2NjdXBhbmN5IGFuZCBtYXkgYmUgdHJhbnNsYXRlZAotICogaW50byBGSUZPIHZhY2FuY3kgdXNpbmcgUlhfRklGT19TSVpFLiBzZXR0aW5nIE9OIHdpbGwgdHJpZ2dlciBYT04gZnJhbWVzIAorICogaW50byBGSUZPIHZhY2FuY3kgdXNpbmcgUlhfRklGT19TSVpFLiBzZXR0aW5nIE9OIHdpbGwgdHJpZ2dlciBYT04gZnJhbWVzCiAgKiB3aGVuIEZJRk8gcmVhY2hlcyAwLiBPRkYgdGhyZXNob2xkIHNob3VsZCBub3QgYmUgPiBzaXplIG9mIFJYIEZJRk8uIG1heAotICogdmFsdWUgaXMgaXMgMHg2Ri4gCisgKiB2YWx1ZSBpcyBpcyAweDZGLgogICogREVGQVVMVDogMHgwMDA3OAogICovCiAjZGVmaW5lICBSRUdfUlhfUEFVU0VfVEhSRVNIICAgICAgICAgICAgICAgMHg0MDIwICAvKiBSWCBwYXVzZSB0aHJlc2hvbGRzICovCiAjZGVmaW5lICAgIFJYX1BBVVNFX1RIUkVTSF9RVUFOVFVNICAgICAgICAgNjQKICNkZWZpbmUgICAgUlhfUEFVU0VfVEhSRVNIX09GRl9NQVNLICAgICAgICAweDAwMDAwMUZGIC8qIFhPRkYgUEFVU0UgZW1pdHRlZCB3aGVuCi0JCQkJCQkJIFJYIEZJRk8gb2NjdXBhbmN5ID4gCisJCQkJCQkJIFJYIEZJRk8gb2NjdXBhbmN5ID4KIAkJCQkJCQkgdmFsdWUqNjRCICovCiAjZGVmaW5lICAgIFJYX1BBVVNFX1RIUkVTSF9PRkZfU0hJRlQgICAgICAgMAogI2RlZmluZSAgICBSWF9QQVVTRV9USFJFU0hfT05fTUFTSyAgICAgICAgIDB4MDAxRkYwMDAgLyogWE9OIFBBVVNFIGVtaXR0ZWQgYWZ0ZXIKQEAgLTc5Nyw5ICs3OTcsOSBAQAogI2RlZmluZSAgICBSWF9QQVVTRV9USFJFU0hfT05fU0hJRlQgICAgICAgIDEyCiAKIC8qIDEzLWJpdCByZWdpc3RlciB1c2VkIHRvIGNvbnRyb2wgUlggZGVzYyBmZXRjaGluZyBhbmQgaW50ciBnZW5lcmF0aW9uLiBpZiA0KwotICogdmFsaWQgUlggZGVzY3JpcHRvcnMgYXJlIGF2YWlsYWJsZSwgQ2Fzc2luaSB3aWxsIHJlYWQgNCBhdCBhIHRpbWUuIAorICogdmFsaWQgUlggZGVzY3JpcHRvcnMgYXJlIGF2YWlsYWJsZSwgQ2Fzc2luaSB3aWxsIHJlYWQgNCBhdCBhIHRpbWUuCiAgKiB3cml0aW5nIE4gbWVhbnMgdGhhdCBhbGwgZGVzYyB1cCB0byAqYnV0KiBleGNsdWRpbmcgTiBhcmUgYXZhaWxhYmxlLiBOIG11c3QKLSAqIGJlIGEgbXVsdGlwbGUgb2YgNCAoTiAlIDQgPSAwKS4gZmlyc3QgZGVzYyBzaG91bGQgYmUgY2FjaGUtbGluZSBhbGlnbmVkLiAKKyAqIGJlIGEgbXVsdGlwbGUgb2YgNCAoTiAlIDQgPSAwKS4gZmlyc3QgZGVzYyBzaG91bGQgYmUgY2FjaGUtbGluZSBhbGlnbmVkLgogICogREVGQVVMVDogMCBvbiByZXNldAogICovCiAjZGVmaW5lICBSRUdfUlhfS0lDSyAgICAgICAgICAgICAgICAgICAgMHg0MDI0ICAvKiBSWCBraWNrIHJlZyAqLwpAQCAtODA3LDE2ICs4MDcsMTYgQEAKIC8qIDhLQiBhbGlnbmVkIDY0LWJpdCBwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBSWCBmcmVlL2NvbXBsZXRpb24gcmluZ3MuCiAgKiBsb3dlciAxMyBiaXRzIG9mIHRoZSBsb3cgcmVnaXN0ZXIgYXJlIGhhcmQtd2lyZWQgdG8gMC4KICAqLwotI2RlZmluZSAgUkVHX1JYX0RCX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4NDAyOCAgLyogUlggZGVzY3JpcHRvciByaW5nIAorI2RlZmluZSAgUkVHX1JYX0RCX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4NDAyOCAgLyogUlggZGVzY3JpcHRvciByaW5nCiAJCQkJCQkJIGJhc2UgbG93ICovCiAjZGVmaW5lICBSRUdfUlhfREJfSEkgICAgICAgICAgICAgICAgICAgICAgMHg0MDJDICAvKiBSWCBkZXNjcmlwdG9yIHJpbmcKIAkJCQkJCQkgYmFzZSBoaSAqLwogI2RlZmluZSAgUkVHX1JYX0NCX0xPVyAgICAgICAgICAgICAgICAgICAgIDB4NDAzMCAgLyogUlggY29tcGxldGlvbiByaW5nCiAJCQkJCQkJIGJhc2UgbG93ICovCi0jZGVmaW5lICBSRUdfUlhfQ0JfSEkgICAgICAgICAgICAgICAgICAgICAgMHg0MDM0ICAvKiBSWCBjb21wbGV0aW9uIHJpbmcgCisjZGVmaW5lICBSRUdfUlhfQ0JfSEkgICAgICAgICAgICAgICAgICAgICAgMHg0MDM0ICAvKiBSWCBjb21wbGV0aW9uIHJpbmcKIAkJCQkJCQkgYmFzZSBoaSAqLwogLyogMTMtYml0IHJlZ2lzdGVyIGluZGljYXRlIGRlc2MgdXNlZCBieSBjYXNzaW5pIGZvciByZWNlaXZlIGZyYW1lcy4gdXNlZAotICogZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuIAorICogZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuCiAgKiBERUZBVUxUOiAwIG9uIHJlc2V0CiAgKi8KICNkZWZpbmUgIFJFR19SWF9DT01QICAgICAgICAgICAgICAgICAgICAgICAweDQwMzggIC8qIChybykgUlggY29tcGxldGlvbiAqLwpAQCAtODM3LDkgKzgzNyw5IEBACiAvKiB2YWx1ZXMgdXNlZCBmb3IgcmVjZWl2ZSBpbnRlcnJ1cHQgYmxhbmtpbmcuIGxvYWRlZCBlYWNoIHRpbWUgdGhlIElTUiBpcyByZWFkCiAgKiBERUZBVUxUOiAweDAwMDAwMDAwCiAgKi8KLSNkZWZpbmUgIFJFR19SWF9CTEFOSyAgICAgICAgICAgICAgICAgICAgICAweDQwNDQgIC8qIFJYIGJsYW5raW5nIHJlZ2lzdGVyIAorI2RlZmluZSAgUkVHX1JYX0JMQU5LICAgICAgICAgICAgICAgICAgICAgIDB4NDA0NCAgLyogUlggYmxhbmtpbmcgcmVnaXN0ZXIKIAkJCQkJCQkgZm9yIElTUiByZWFkICovCi0jZGVmaW5lICAgIFJYX0JMQU5LX0lOVFJfUEtUX01BU0sgICAgICAgICAgMHgwMDAwMDFGRiAvKiBSWF9ET05FIGludHIgYXNzZXJ0ZWQgaWYgCisjZGVmaW5lICAgIFJYX0JMQU5LX0lOVFJfUEtUX01BU0sgICAgICAgICAgMHgwMDAwMDFGRiAvKiBSWF9ET05FIGludHIgYXNzZXJ0ZWQgaWYKIAkJCQkJCQkgdGhpcyBtYW55IHNldHMgb2YgY29tcGxldGlvbgogCQkJCQkJCSB3cml0ZWJhY2tzICh1cCB0byAyIHBhY2tldHMpCiAJCQkJCQkJIG9jY3VyIHNpbmNlIHRoZSBsYXN0IHRpbWUKQEAgLTg0OSwzMyArODQ5LDMzIEBACiAjZGVmaW5lICAgIFJYX0JMQU5LX0lOVFJfVElNRV9NQVNLICAgICAgICAgMHgzRkZGRjAwMCAvKiBSWF9ET05FIGludGVycnVwdCBhc3NlcnRlZAogCQkJCQkJCSBpZiB0aGF0IG1hbnkgY2xvY2tzIHdlcmUKIAkJCQkJCQkgY291bnRlZCBzaW5jZSBsYXN0IHRpbWUgdGhlCi0JCQkJCQkJIElTUiB3YXMgcmVhZC4gCisJCQkJCQkJIElTUiB3YXMgcmVhZC4KIAkJCQkJCQkgZWFjaCBjb3VudCBpcyA1MTIgY29yZQogCQkJCQkJCSBjbG9ja3MgKDEyNU1IeikuIDAgPSBubwogCQkJCQkJCSB0aW1lIGJsYW5raW5nICovCiAjZGVmaW5lICAgIFJYX0JMQU5LX0lOVFJfVElNRV9TSElGVCAgICAgICAgMTIKIAotLyogdmFsdWVzIHVzZWQgZm9yIGludGVycnVwdCBnZW5lcmF0aW9uIGJhc2VkIG9uIHRocmVzaG9sZCB2YWx1ZXMgb2YgaG93IAorLyogdmFsdWVzIHVzZWQgZm9yIGludGVycnVwdCBnZW5lcmF0aW9uIGJhc2VkIG9uIHRocmVzaG9sZCB2YWx1ZXMgb2YgaG93CiAgKiBtYW55IGZyZWUgZGVzYyBhbmQgY29tcGxldGlvbiBlbnRyaWVzIGFyZSBhdmFpbGFibGUgZm9yIGh3IHVzZS4KICAqIERFRkFVTFQ6IDB4MDAwMDAwMDAKICAqLwotI2RlZmluZSAgUkVHX1JYX0FFX1RIUkVTSCAgICAgICAgICAgICAgICAgIDB4NDA0OCAgLyogUlggYWxtb3N0IGVtcHR5IAorI2RlZmluZSAgUkVHX1JYX0FFX1RIUkVTSCAgICAgICAgICAgICAgICAgIDB4NDA0OCAgLyogUlggYWxtb3N0IGVtcHR5CiAJCQkJCQkJIHRocmVzaG9sZHMgKi8KLSNkZWZpbmUgICAgUlhfQUVfVEhSRVNIX0ZSRUVfTUFTSyAgICAgICAgICAweDAwMDAxRkZGIC8qIFJYX0JVRl9BRSB3aWxsIGJlIAorI2RlZmluZSAgICBSWF9BRV9USFJFU0hfRlJFRV9NQVNLICAgICAgICAgIDB4MDAwMDFGRkYgLyogUlhfQlVGX0FFIHdpbGwgYmUKIAkJCQkJCQkgZ2VuZXJhdGVkIGlmICMgZGVzYwotCQkJCQkJCSBhdmFpbCBmb3IgaHcgdXNlIDw9IAorCQkJCQkJCSBhdmFpbCBmb3IgaHcgdXNlIDw9CiAJCQkJCQkJICMgKi8KICNkZWZpbmUgICAgUlhfQUVfVEhSRVNIX0ZSRUVfU0hJRlQgICAgICAgICAwCiAjZGVmaW5lICAgIFJYX0FFX1RIUkVTSF9DT01QX01BU0sgICAgICAgICAgMHgwRkZGRTAwMCAvKiBSWF9DT01QX0FFIHdpbGwgYmUKLQkJCQkJCQkgZ2VuZXJhdGVkIGlmICMgb2YgCisJCQkJCQkJIGdlbmVyYXRlZCBpZiAjIG9mCiAJCQkJCQkJIGNvbXBsZXRpb24gZW50cmllcwotCQkJCQkJCSBhdmFpbCBmb3IgaHcgdXNlIDw9IAorCQkJCQkJCSBhdmFpbCBmb3IgaHcgdXNlIDw9CiAJCQkJCQkJICMgKi8KICNkZWZpbmUgICAgUlhfQUVfVEhSRVNIX0NPTVBfU0hJRlQgICAgICAgICAxMwogCi0vKiBwcm9iYWJpbGl0aWVzIGZvciByYW5kb20gZWFybHkgZHJvcCAoUkVEKSB0aHJlc2hvbGRzIG9uIGEgRklGTyB0aHJlc2hvbGQgCi0gKiBiYXNpcy4gcHJvYmFiaWxpdHkgc2hvdWxkIGluY3JlYXNlIHdoZW4gdGhlIEZJRk8gbGV2ZWwgaW5jcmVhc2VzLiBjb250cm9sIAotICogcGFja2V0cyBhcmUgbmV2ZXIgZHJvcHBlZCBhbmQgbm90IGNvdW50ZWQgaW4gc3RhdHMuIHByb2JhYmlsaXR5IHByb2dyYW1tZWQgCisvKiBwcm9iYWJpbGl0aWVzIGZvciByYW5kb20gZWFybHkgZHJvcCAoUkVEKSB0aHJlc2hvbGRzIG9uIGEgRklGTyB0aHJlc2hvbGQKKyAqIGJhc2lzLiBwcm9iYWJpbGl0eSBzaG91bGQgaW5jcmVhc2Ugd2hlbiB0aGUgRklGTyBsZXZlbCBpbmNyZWFzZXMuIGNvbnRyb2wKKyAqIHBhY2tldHMgYXJlIG5ldmVyIGRyb3BwZWQgYW5kIG5vdCBjb3VudGVkIGluIHN0YXRzLiBwcm9iYWJpbGl0eSBwcm9ncmFtbWVkCiAgKiBvbiBhIDEyLjUlIGdyYW51bGFyaXR5LiBlLmcuLCAweDEgPSAxLzggcGFja2V0cyBkcm9wcGVkLgogICogREVGQVVMVDogMHgwMDAwMDAwMAogICovCkBAIC04ODUsOCArODg1LDggQEAKICNkZWZpbmUgICAgUlhfUkVEXzhLXzEwS19GSUZPX01BU0sgICAgICAgMHgwMEZGMDAwMCAvKiAgOEtCIDwgRklGTyB0aHJlc2ggPCAxMEtCICovCiAjZGVmaW5lICAgIFJYX1JFRF8xMEtfMTJLX0ZJRk9fTUFTSyAgICAgIDB4RkYwMDAwMDAgLyogMTBLQiA8IEZJRk8gdGhyZXNoIDwgMTJLQiAqLwogCi0vKiBGSUZPIGZ1bGxuZXNzIGxldmVscyBmb3IgUlggRklGTywgUlggY29udHJvbCBGSUZPLCBhbmQgUlggSVBQIEZJRk8uIAotICogUlggY29udHJvbCBGSUZPID0gIyBvZiBwYWNrZXRzIGluIFJYIEZJRk8uIAorLyogRklGTyBmdWxsbmVzcyBsZXZlbHMgZm9yIFJYIEZJRk8sIFJYIGNvbnRyb2wgRklGTywgYW5kIFJYIElQUCBGSUZPLgorICogUlggY29udHJvbCBGSUZPID0gIyBvZiBwYWNrZXRzIGluIFJYIEZJRk8uCiAgKiBERUZBVUxUOiAweDAKICAqLwogI2RlZmluZSAgUkVHX1JYX0ZJRk9fRlVMTE5FU1MgICAgICAgICAgICAgIDB4NDA1MCAgLyogKHJvKSBSWCBGSUZPIGZ1bGxuZXNzICovCkBAIC04OTUsMTIgKzg5NSwxMiBAQAogI2RlZmluZSAgICBSWF9GSUZPX0ZVTExORVNTX1JYX1BLVF9NQVNLICAgIDB4MDAwMDAwRkYgLyogIyBwYWNrZXRzIGluIFJYIEZJRk8gKi8KICNkZWZpbmUgIFJFR19SWF9JUFBfUEFDS0VUX0NPVU5UICAgICAgICAgICAweDQwNTQgIC8qIFJYIElQUCBwYWNrZXQgY291bnRlciAqLwogI2RlZmluZSAgUkVHX1JYX1dPUktfRE1BX1BUUl9MT1cgICAgICAgICAgIDB4NDA1OCAgLyogUlggd29ya2luZyBETUEgcHRyIGxvdyAqLwotI2RlZmluZSAgUkVHX1JYX1dPUktfRE1BX1BUUl9ISSAgICAgICAgICAgIDB4NDA1QyAgLyogUlggd29ya2luZyBETUEgcHRyIAorI2RlZmluZSAgUkVHX1JYX1dPUktfRE1BX1BUUl9ISSAgICAgICAgICAgIDB4NDA1QyAgLyogUlggd29ya2luZyBETUEgcHRyCiAJCQkJCQkgICAgICBoaWdoICovCiAKIC8qIEJJU1QgdGVzdGluZyBybyBSWCBGSUZPLCBSWCBjb250cm9sIEZJRk8sIGFuZCBSWCBJUFAgRklGTy4gb25seSBSWCBCSVNUCiAgKiBTVEFSVC9DT01QTEVURSBpcyB3cml0ZWFibGUuIFNUQVJUIHdpbGwgY2xlYXIgd2hlbiB0aGUgQklTVCBoYXMgY29tcGxldGVkCi0gKiBjaGVja2luZyBhbGwgMTcgUkFNUy4gCisgKiBjaGVja2luZyBhbGwgMTcgUkFNUy4KICAqIERFRkFVTFQ6IDBieHh4eCB4eHh4eCB4eHh4IHh4eHggeHh4eCB4MDAwIDAwMDAgMDAwMCAwMHgwCiAgKi8KICNkZWZpbmUgIFJFR19SWF9CSVNUICAgICAgICAgICAgICAgICAgICAgICAweDQwNjAgIC8qIChybykgUlggQklTVCAqLwpAQCAtOTIzLDQxICs5MjMsNDEgQEAKICNkZWZpbmUgICAgUlhfQklTVF9SRUFTXzI3X1BBU1MgICAgICAgICAgICAweDAwMDgwMDAwIC8qIFJYIFJlYXMgMjcgcGFzc2VkICovCiAjZGVmaW5lICAgIFJYX0JJU1RfU1RBVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDA3ODAwMCAvKiBCSVNUIHN0YXRlIG1hY2hpbmUgKi8KICNkZWZpbmUgICAgUlhfQklTVF9TVU1NQVJZICAgICAgICAgICAgICAgICAweDAwMDAwMDAyIC8qIHdoZW4gQklTVCBjb21wbGV0ZSwKLQkJCQkJCQkgc3VtbWFyeSBwYXNzIGJpdCAKKwkJCQkJCQkgc3VtbWFyeSBwYXNzIGJpdAogCQkJCQkJCSBjb250YWlucyBBTkQgb2YgQklTVAogCQkJCQkJCSByZXN1bHRzIG9mIGFsbCAxNgogCQkJCQkJCSBSQU1TICovCi0jZGVmaW5lICAgIFJYX0JJU1RfU1RBUlQgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiB3cml0ZSAxIHRvIHN0YXJ0IAorI2RlZmluZSAgICBSWF9CSVNUX1NUQVJUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEgLyogd3JpdGUgMSB0byBzdGFydAogCQkJCQkJCSBCSVNULiBzZWxmIGNsZWFycwogCQkJCQkJCSBvbiBjb21wbGV0aW9uLiAqLwogCiAvKiBuZXh0IGxvY2F0aW9uIGluIFJYIENUUkwgRklGTyB0aGF0IHdpbGwgYmUgbG9hZGVkIHcvIGRhdGEgZnJvbSBSWCBJUFAvcmVhZAotICogZnJvbSB0byByZXRyaWV2ZSBwYWNrZXQgY29udHJvbCBpbmZvLiAKKyAqIGZyb20gdG8gcmV0cmlldmUgcGFja2V0IGNvbnRyb2wgaW5mby4KICAqIERFRkFVTFQ6IDAKICAqLwotI2RlZmluZSAgUkVHX1JYX0NUUkxfRklGT19XUklURV9QVFIgICAgICAgIDB4NDA2NCAgLyogKHJvKSBSWCBjb250cm9sIEZJRk8gCisjZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX1dSSVRFX1BUUiAgICAgICAgMHg0MDY0ICAvKiAocm8pIFJYIGNvbnRyb2wgRklGTwogCQkJCQkJICAgICAgd3JpdGUgcHRyICovCiAjZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX1JFQURfUFRSICAgICAgICAgMHg0MDY4ICAvKiAocm8pIFJYIGNvbnRyb2wgRklGTyByZWFkCiAJCQkJCQkgICAgICBwdHIgKi8KIAogLyogcmVjZWl2ZSBpbnRlcnJ1cHQgYmxhbmtpbmcuIGxvYWRlZCBlYWNoIHRpbWUgaW50ZXJydXB0IGFsaWFzIHJlZ2lzdGVyIGlzCi0gKiByZWFkLiAKKyAqIHJlYWQuCiAgKiBERUZBVUxUOiAweDAKICAqLwogI2RlZmluZSAgUkVHX1JYX0JMQU5LX0FMSUFTX1JFQUQgICAgICAgICAgIDB4NDA2QyAgLyogUlggYmxhbmtpbmcgcmVnaXN0ZXIgZm9yCiAJCQkJCQkgICAgICBhbGlhcyByZWFkICovCi0jZGVmaW5lICAgIFJYX0JBUl9JTlRSX1BBQ0tFVF9NQVNLICAgICAgICAgMHgwMDAwMDFGRiAvKiBhc3NlcnQgUlhfRE9ORSBpZiAjIAotCQkJCQkJCSBjb21wbGV0aW9uIHdyaXRlYmFja3MgCi0JCQkJCQkJID4gIyBzaW5jZSBsYXN0IElTUiAKLQkJCQkJCQkgcmVhZC4gMCA9IG5vIAotCQkJCQkJCSBibGFua2luZy4gdXAgdG8gMiAKLQkJCQkJCQkgcGFja2V0cyBwZXIgCisjZGVmaW5lICAgIFJYX0JBUl9JTlRSX1BBQ0tFVF9NQVNLICAgICAgICAgMHgwMDAwMDFGRiAvKiBhc3NlcnQgUlhfRE9ORSBpZiAjCisJCQkJCQkJIGNvbXBsZXRpb24gd3JpdGViYWNrcworCQkJCQkJCSA+ICMgc2luY2UgbGFzdCBJU1IKKwkJCQkJCQkgcmVhZC4gMCA9IG5vCisJCQkJCQkJIGJsYW5raW5nLiB1cCB0byAyCisJCQkJCQkJIHBhY2tldHMgcGVyCiAJCQkJCQkJIGNvbXBsZXRpb24gd2IuICovCiAjZGVmaW5lICAgIFJYX0JBUl9JTlRSX1RJTUVfTUFTSyAgICAgICAgICAgMHgzRkZGRjAwMCAvKiBhc3NlcnQgUlhfRE9ORSBpZiAjCiAJCQkJCQkJIGNsb2NrcyA+ICMgc2luY2UgbGFzdAogCQkJCQkJCSBJU1IgcmVhZC4gZWFjaCBjb3VudAogCQkJCQkJCSBpcyA1MTIgY29yZSBjbG9ja3MKLQkJCQkJCQkgKDEyNU1IeikuIDAgPSBubyAKKwkJCQkJCQkgKDEyNU1IeikuIDAgPSBubwogCQkJCQkJCSBibGFua2luZy4gKi8KIAogLyogZGlhZ25vc3RpYyBhY2Nlc3MgdG8gUlggRklGTy4gMzIgTFNCIGFjY2Vzc2VkIHZpYSBEQVRBX0xPVy4gMzIgTVNCIGFjY2Vzc2VkCkBAIC05ODEsMTMgKzk4MSwxMyBAQAogICogc2hvdWxkIGJlIGxhc3Qgd3JpdGUgYWNjZXNzIG9mIHRoZSB3cml0ZSBzZXF1ZW5jZS4KICAqIERFRkFVTFQ6IHVuZGVmaW5lZAogICovCi0jZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX0FERFIgICAgICAgICAgICAgMHg0MDk0ICAvKiBSWCBDb250cm9sIEZJRk8gYW5kIAorI2RlZmluZSAgUkVHX1JYX0NUUkxfRklGT19BRERSICAgICAgICAgICAgIDB4NDA5NCAgLyogUlggQ29udHJvbCBGSUZPIGFuZAogCQkJCQkJICAgICAgQmF0Y2hpbmcgRklGTyBhZGRyICovCi0jZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX0RBVEFfTE9XICAgICAgICAgMHg0MDk4ICAvKiBSWCBDb250cm9sIEZJRk8gZGF0YSAKKyNkZWZpbmUgIFJFR19SWF9DVFJMX0ZJRk9fREFUQV9MT1cgICAgICAgICAweDQwOTggIC8qIFJYIENvbnRyb2wgRklGTyBkYXRhCiAJCQkJCQkgICAgICBsb3cgKi8KLSNkZWZpbmUgIFJFR19SWF9DVFJMX0ZJRk9fREFUQV9NSUQgICAgICAgICAweDQwOUMgIC8qIFJYIENvbnRyb2wgRklGTyBkYXRhIAorI2RlZmluZSAgUkVHX1JYX0NUUkxfRklGT19EQVRBX01JRCAgICAgICAgIDB4NDA5QyAgLyogUlggQ29udHJvbCBGSUZPIGRhdGEKIAkJCQkJCSAgICAgIG1pZCAqLwotI2RlZmluZSAgUkVHX1JYX0NUUkxfRklGT19EQVRBX0hJICAgICAgICAgIDB4NDEwMCAgLyogUlggQ29udHJvbCBGSUZPIGRhdGEgCisjZGVmaW5lICBSRUdfUlhfQ1RSTF9GSUZPX0RBVEFfSEkgICAgICAgICAgMHg0MTAwICAvKiBSWCBDb250cm9sIEZJRk8gZGF0YQogCQkJCQkJICAgICAgaGkgYW5kIGZsb3cgaWQgKi8KICNkZWZpbmUgICAgUlhfQ1RSTF9GSUZPX0RBVEFfSElfQ1RSTCAgICAgICAweDAwMDEgIC8qIHVwcGVyIGJpdCBvZiBjdHJsIHdvcmQgKi8KICNkZWZpbmUgICAgUlhfQ1RSTF9GSUZPX0RBVEFfSElfRkxPV19NQVNLICAweDAwN0UgIC8qIGZsb3cgaWQgKi8KQEAgLTEwMDQsNyArMTAwNCw3IEBACiAJCQkJCQkgICAgICBUMSAqLwogCiAvKiA2NC1iaXQgcG9pbnRlciB0byByZWNlaXZlIGRhdGEgYnVmZmVyIGluIGhvc3QgbWVtb3J5IHVzZWQgZm9yIGhlYWRlcnMgYW5kCi0gKiBzbWFsbCBwYWNrZXRzLiBNU0IgaW4gaGlnaCByZWdpc3Rlci4gbG9hZGVkIGJ5IERNQSBzdGF0ZSBtYWNoaW5lIGFuZCAKKyAqIHNtYWxsIHBhY2tldHMuIE1TQiBpbiBoaWdoIHJlZ2lzdGVyLiBsb2FkZWQgYnkgRE1BIHN0YXRlIG1hY2hpbmUgYW5kCiAgKiBpbmNyZW1lbnRzIGFzIERNQSB3cml0ZXMgcmVjZWl2ZSBkYXRhLiBvbmx5IDUwIExTQiBhcmUgaW5jcmVtZW50ZWQuIHRvcAogICogMTMgYml0cyB0YWtlbiBmcm9tIFJYIGRlc2NyaXB0b3IuCiAgKiBERUZBVUxUOiB1bmRlZmluZWQKQEAgLTEwMTMsMTcgKzEwMTMsMTcgQEAKIAkJCQkJCSAgICAgIGxvdyAqLwogI2RlZmluZSAgUkVHX1JYX0hFQURFUl9QQUdFX1BUUl9ISSAgICAgICAgIDB4NDExQyAgLyogKHJvKSBSWCBoZWFkZXIgcGFnZSBwdHIKIAkJCQkJCSAgICAgIGhpZ2ggKi8KLSNkZWZpbmUgIFJFR19SWF9NVFVfUEFHRV9QVFJfTE9XICAgICAgICAgICAweDQxMjAgIC8qIChybykgUlggTVRVIHBhZ2UgcG9pbnRlciAKKyNkZWZpbmUgIFJFR19SWF9NVFVfUEFHRV9QVFJfTE9XICAgICAgICAgICAweDQxMjAgIC8qIChybykgUlggTVRVIHBhZ2UgcG9pbnRlcgogCQkJCQkJICAgICAgbG93ICovCi0jZGVmaW5lICBSRUdfUlhfTVRVX1BBR0VfUFRSX0hJICAgICAgICAgICAgMHg0MTI0ICAvKiAocm8pIFJYIE1UVSBwYWdlIHBvaW50ZXIgCisjZGVmaW5lICBSRUdfUlhfTVRVX1BBR0VfUFRSX0hJICAgICAgICAgICAgMHg0MTI0ICAvKiAocm8pIFJYIE1UVSBwYWdlIHBvaW50ZXIKIAkJCQkJCSAgICAgIGhpZ2ggKi8KIAogLyogUElPIGRpYWdub3N0aWMgYWNjZXNzIHRvIFJYIHJlYXNzZW1ibHkgRE1BIFRhYmxlIFJBTS4gNi1iaXQgcmVnaXN0ZXIgaG9sZHMKICAqIG9uZSBvZiA2NCA3OS1iaXQgbG9jYXRpb25zIGluIHRoZSBSWCBSZWFzc2VtYmx5IERNQSB0YWJsZSBhbmQgdGhlIGFkZHIgb2YKLSAqIG9uZSBvZiB0aGUgNjQgYnl0ZSBsb2NhdGlvbnMgaW4gdGhlIEJhdGNoaW5nIHRhYmxlLiBMT1cgaG9sZHMgMzIgTFNCLiAKKyAqIG9uZSBvZiB0aGUgNjQgYnl0ZSBsb2NhdGlvbnMgaW4gdGhlIEJhdGNoaW5nIHRhYmxlLiBMT1cgaG9sZHMgMzIgTFNCLgogICogTUlEIGhvbGRzIHRoZSBuZXh0IDMyIExTQi4gSElHSCBob2xkcyB0aGUgMTUgTVNCLiBSWF9ETUFfRU4gbXVzdCBiZSBzZXQKICAqIHRvIDAgZm9yIFBJTyBhY2Nlc3MuIERBVEFfSElHSCBzaG91bGQgYmUgbGFzdCB3cml0ZSBvZiB3cml0ZSBzZXF1ZW5jZS4KLSAqIGxheW91dDogIAorICogbGF5b3V0OgogICogcmVhc3NtYmwgcHRyIFs3ODoxNV0gfCByZWFzc21ibCBpbmRleCBbMTQ6MV0gfCByZWFzc21ibCBlbnRyeSB2YWxpZCBbMF0KICAqIERFRkFVTFQ6IHVuZGVmaW5lZAogICovCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCiAjZGVmaW5lICBSRUdfUlhfVEFCTEVfREFUQV9MT1cgICAgICAgICAweDQxMkMgIC8qIFJYIHJlYXNzZW1ibHkgRE1BIHRhYmxlCiAJCQkJCQkgIGRhdGEgbG93ICovCi0jZGVmaW5lICBSRUdfUlhfVEFCTEVfREFUQV9NSUQgICAgICAgICAweDQxMzAgIC8qIFJYIHJlYXNzZW1ibHkgRE1BIHRhYmxlIAorI2RlZmluZSAgUkVHX1JYX1RBQkxFX0RBVEFfTUlEICAgICAgICAgMHg0MTMwICAvKiBSWCByZWFzc2VtYmx5IERNQSB0YWJsZQogCQkJCQkJICBkYXRhIG1pZCAqLwogI2RlZmluZSAgUkVHX1JYX1RBQkxFX0RBVEFfSEkgICAgICAgICAgMHg0MTM0ICAvKiBSWCByZWFzc2VtYmx5IERNQSB0YWJsZQogCQkJCQkJICBkYXRhIGhpZ2ggKi8KQEAgLTEwNTMsMTEgKzEwNTMsMTEgQEAKICNkZWZpbmUgIFJFR19QTFVTX1JYX0NCTl9MT1coeCkgICAgICAgIChSRUdfUExVU19SWF9DQjFfTE9XICsgOCooKHgpIC0gMSkpCiAjZGVmaW5lICBSRUdfUExVU19SWF9DQk5fSEkoeCkgICAgICAgICAoUkVHX1BMVVNfUlhfQ0IxX0hJICsgOCooKHgpIC0gMSkpCiAjZGVmaW5lICBSRUdfUExVU19SWF9LSUNLMSAgICAgICAgICAgICAweDQyMjAgIC8qIFJYIEtpY2sgMiByZWdpc3RlciAqLwotI2RlZmluZSAgUkVHX1BMVVNfUlhfQ09NUDEgICAgICAgICAgICAgMHg0MjI0ICAvKiAocm8pIFJYIGNvbXBsZXRpb24gMiAKKyNkZWZpbmUgIFJFR19QTFVTX1JYX0NPTVAxICAgICAgICAgICAgIDB4NDIyNCAgLyogKHJvKSBSWCBjb21wbGV0aW9uIDIKIAkJCQkJCSAgcmVnICovCi0jZGVmaW5lICBSRUdfUExVU19SWF9DT01QMV9IRUFEICAgICAgICAweDQyMjggIC8qIChybykgUlggY29tcGxldGlvbiAyIAorI2RlZmluZSAgUkVHX1BMVVNfUlhfQ09NUDFfSEVBRCAgICAgICAgMHg0MjI4ICAvKiAocm8pIFJYIGNvbXBsZXRpb24gMgogCQkJCQkJICBoZWFkIHJlZy4gNCB0b3RhbC4gKi8KLSNkZWZpbmUgIFJFR19QTFVTX1JYX0NPTVAxX1RBSUwgICAgICAgIDB4NDIyQyAgLyogUlggY29tcGxldGlvbiAyIAorI2RlZmluZSAgUkVHX1BMVVNfUlhfQ09NUDFfVEFJTCAgICAgICAgMHg0MjJDICAvKiBSWCBjb21wbGV0aW9uIDIKIAkJCQkJCSAgdGFpbCByZWcuIDQgdG90YWwuICovCiAjZGVmaW5lICBSRUdfUExVU19SWF9DT01QTl9IRUFEKHgpICAgIChSRUdfUExVU19SWF9DT01QMV9IRUFEICsgOCooKHgpIC0gMSkpCiAjZGVmaW5lICBSRUdfUExVU19SWF9DT01QTl9UQUlMKHgpICAgIChSRUdfUExVU19SWF9DT01QMV9UQUlMICsgOCooKHgpIC0gMSkpCkBAIC0xMDY4LDEzICsxMDY4LDEzIEBACiAKIC8qKiBoZWFkZXIgcGFyc2VyIHJlZ2lzdGVycyAqKi8KIAotLyogUlggcGFyc2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuIAorLyogUlggcGFyc2VyIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuCiAgKiBERUZBVUxUOiAweDE2NTEwMDQKICAqLwotI2RlZmluZSAgUkVHX0hQX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHg0MTQwICAvKiBoZWFkZXIgcGFyc2VyIAorI2RlZmluZSAgUkVHX0hQX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHg0MTQwICAvKiBoZWFkZXIgcGFyc2VyCiAJCQkJCQkgICAgIGNvbmZpZ3VyYXRpb24gcmVnICovCiAjZGVmaW5lICAgIEhQX0NGR19QQVJTRV9FTiAgICAgICAgICAgICAgICAweDAwMDAwMDAxIC8qIGVuYWIgaGVhZGVyIHBhcnNpbmcgKi8KLSNkZWZpbmUgICAgSFBfQ0ZHX05VTV9DUFVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwRkMgLyogIyBwcm9jZXNzb3JzIAorI2RlZmluZSAgICBIUF9DRkdfTlVNX0NQVV9NQVNLICAgICAgICAgICAgMHgwMDAwMDBGQyAvKiAjIHByb2Nlc3NvcnMKIAkJCQkJCSAgICAgIDAgPSA2NC4gMHgzZiA9IDYzICovCiAjZGVmaW5lICAgIEhQX0NGR19OVU1fQ1BVX1NISUZUICAgICAgICAgICAyCiAjZGVmaW5lICAgIEhQX0NGR19TWU5fSU5DX01BU0sgICAgICAgICAgICAweDAwMDAwMTAwIC8qIFNZTiBiaXQgd29uJ3QgaW5jcmVtZW50CkBAIC0xMDg4LDcgKzEwODgsNyBAQAogLyogYWNjZXNzIHRvIFJYIEluc3RydWN0aW9uIFJBTS4gNS1iaXQgcmVnaXN0ZXIvY291bnRlciBob2xkcyBhZGRyCiAgKiBvZiAzOSBiaXQgZW50cnkgdG8gYmUgcmVhZC93cml0dGVuLiAzMiBMU0IgaW4gX0RBVEFfTE9XLiA3IE1TQiBpbiBfREFUQV9ISS4KICAqIFJYX0RNQV9FTiBtdXN0IGJlIDAgZm9yIFJYIGluc3RyIFBJTyBhY2Nlc3MuIERBVEFfSEkgc2hvdWxkIGJlIGxhc3QgYWNjZXNzCi0gKiBvZiBzZXF1ZW5jZS4gCisgKiBvZiBzZXF1ZW5jZS4KICAqIERFRkFVTFQ6IHVuZGVmaW5lZAogICovCiAjZGVmaW5lICBSRUdfSFBfSU5TVFJfUkFNX0FERFIgICAgICAgICAgICAgMHg0MTQ0ICAvKiBIUCBpbnN0cnVjdGlvbiBSQU0KQEAgLTExMDQsNyArMTEwNCw3IEBACiAjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9MT1dfT1VURU5fU0hJRlQgICAgMjAKICNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX0xPV19PVVRBUkdfTUFTSyAgICAweEZGQzAwMDAwCiAjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9MT1dfT1VUQVJHX1NISUZUICAgMjIKLSNkZWZpbmUgIFJFR19IUF9JTlNUUl9SQU1fREFUQV9NSUQgICAgICAgICAweDQxNEMgIC8qIEhQIGluc3RydWN0aW9uIFJBTSAKKyNkZWZpbmUgIFJFR19IUF9JTlNUUl9SQU1fREFUQV9NSUQgICAgICAgICAweDQxNEMgIC8qIEhQIGluc3RydWN0aW9uIFJBTQogCQkJCQkJICAgICAgZGF0YSBtaWQgKi8KICNkZWZpbmUgICAgSFBfSU5TVFJfUkFNX01JRF9PVVRBUkdfTUFTSyAgICAweDAwMDAwMDAzCiAjZGVmaW5lICAgIEhQX0lOU1RSX1JBTV9NSURfT1VUQVJHX1NISUZUICAgMApAQCAtMTEzMSw3ICsxMTMxLDcgQEAKICAqIDExLWJpdCByZWdpc3Rlci4gRGF0YSBmaWxscyB0aGUgTFNCIHBvcnRpb24gb2YgYnVzIGlmIGxlc3MgdGhhbiAzMiBiaXRzLgogICogREFUQV9SQU06IHdyaXRlIFJBTV9GREJfREFUQSB3aXRoIGluZGV4IHRvIGFjY2VzcyBEQVRBX1JBTS4KICAqIFJBTSBieXRlcyA9IDQqKHggLSAxKSArIFszOjBdLiBlLmcuLCAwIC0+IFszOjBdLCAzMSAtPiBbMTIzOjEyMF0KLSAqIEZMT1dEQjogd3JpdGUgREFUQV9SQU1fRkRCIHJlZ2lzdGVyIGFuZCB0aGVuIHJlYWQvd3JpdGUgRkRCMS0xMiB0byBhY2Nlc3MgCisgKiBGTE9XREI6IHdyaXRlIERBVEFfUkFNX0ZEQiByZWdpc3RlciBhbmQgdGhlbiByZWFkL3dyaXRlIEZEQjEtMTIgdG8gYWNjZXNzCiAgKiBmbG93IGRhdGFiYXNlLgogICogUlhfRE1BX0VOIG11c3QgYmUgMCBmb3IgUlggcGFyc2VyIFJBTSBQSU8gYWNjZXNzLiBSWCBQYXJzZXIgUkFNIGRhdGEgcmVnCiAgKiBzaG91bGQgYmUgdGhlIGxhc3Qgd3JpdGUgYWNjZXNzIG9mIHRoZSB3cml0ZSBzZXF1ZW5jZS4KQEAgLTExMzksMTcgKzExMzksMTcgQEAKICAqLwogI2RlZmluZSAgUkVHX0hQX0RBVEFfUkFNX0ZEQl9BRERSICAgICAgICAgIDB4NDE1NCAgLyogSFAgZGF0YSBhbmQgRkRCCiAJCQkJCQkgICAgICBSQU0gYWRkcmVzcyAqLwotI2RlZmluZSAgICBIUF9EQVRBX1JBTV9GREJfREFUQV9NQVNLICAgICAgIDB4MDAxRiAgLyogc2VsZWN0IDEgb2YgODYgYnl0ZSAKLQkJCQkJCSAgICAgIGxvY2F0aW9ucyBpbiBoZWFkZXIgCi0JCQkJCQkgICAgICBwYXJzZXIgZGF0YSByYW0gdG8gCisjZGVmaW5lICAgIEhQX0RBVEFfUkFNX0ZEQl9EQVRBX01BU0sgICAgICAgMHgwMDFGICAvKiBzZWxlY3QgMSBvZiA4NiBieXRlCisJCQkJCQkgICAgICBsb2NhdGlvbnMgaW4gaGVhZGVyCisJCQkJCQkgICAgICBwYXJzZXIgZGF0YSByYW0gdG8KIAkJCQkJCSAgICAgIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUgICAgSFBfREFUQV9SQU1fRkRCX0ZEQl9NQVNLICAgICAgICAweDNGMDAgIC8qIDEgb2YgNjQgMzUzLWJpdCBsb2NhdGlvbnMKIAkJCQkJCSAgICAgIGluIHRoZSBmbG93IGRhdGFiYXNlICovCiAjZGVmaW5lICBSRUdfSFBfREFUQV9SQU1fREFUQSAgICAgICAgICAgICAgMHg0MTU4ICAvKiBIUCBkYXRhIFJBTSBkYXRhICovCiAKLS8qIEhQIGZsb3cgZGF0YWJhc2UgcmVnaXN0ZXJzOiAxIC0gMTIsIDB4NDE1QyAtIDB4NDE4OCwgNCA4LWJpdCBieXRlcyAKKy8qIEhQIGZsb3cgZGF0YWJhc2UgcmVnaXN0ZXJzOiAxIC0gMTIsIDB4NDE1QyAtIDB4NDE4OCwgNCA4LWJpdCBieXRlcwogICogRkxPV19EQigxKSA9IElQX1NBWzEyNzo5Nl0sIEZMT1dfREIoMikgPSBJUF9TQVs5NTo2NF0KLSAqIEZMT1dfREIoMykgPSBJUF9TQVs2MzozMl0sICBGTE9XX0RCKDQpID0gSVBfU0FbMzE6MF0gCisgKiBGTE9XX0RCKDMpID0gSVBfU0FbNjM6MzJdLCAgRkxPV19EQig0KSA9IElQX1NBWzMxOjBdCiAgKiBGTE9XX0RCKDUpID0gSVBfREFbMTI3Ojk2XSwgRkxPV19EQig2KSA9IElQX0RBWzk1OjY0XQogICogRkxPV19EQig3KSA9IElQX0RBWzYzOjMyXSwgIEZMT1dfREIoOCkgPSBJUF9EQVszMTowXQogICogRkxPV19EQig5KSA9IHtUQ1BfU1BbMTU6MF0sVENQX0RQWzE1OjBdfQpAQCAtMTE1OSw3ICsxMTU5LDcgQEAKICNkZWZpbmUgIFJFR19IUF9GTE9XX0RCMCAgICAgICAgICAgICAgICAgICAweDQxNUMgIC8qIEhQIGZsb3cgZGF0YWJhc2UgMSByZWcgKi8KICNkZWZpbmUgIFJFR19IUF9GTE9XX0RCTih4KSAgICAgICAgICAgICAgICAoUkVHX0hQX0ZMT1dfREIwICsgKHgpKjQpCiAKLS8qIGRpYWdub3N0aWNzIGZvciBSWCBIZWFkZXIgUGFyc2VyIGJsb2NrLiAKKy8qIGRpYWdub3N0aWNzIGZvciBSWCBIZWFkZXIgUGFyc2VyIGJsb2NrLgogICogQVNVTjogdGhlIGhlYWRlciBwYXJzZXIgc3RhdGUgbWFjaGluZSByZWdpc3RlciBpcyB1c2VkIGZvciBkaWFnbm9zdGljcwogICogcHVycG9zZXMuIGhvd2V2ZXIsIHRoZSBzcGVjIGRvZXNuJ3QgaGF2ZSBhbnkgZGV0YWlscyBvbiBpdC4KICAqLwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKICNkZWZpbmUgIFJFR19IUF9TVEFUVVMwICAgICAgICAgICAgICAgICAgICAweDQxOTAgIC8qIChybykgSFAgc3RhdHVzIDEgKi8KICNkZWZpbmUgICAgSFBfU1RBVFVTMF9TQVBfTUFTSyAgICAgICAgICAgICAweEZGRkYwMDAwIC8qIFNBUCAqLwogI2RlZmluZSAgICBIUF9TVEFUVVMwX0wzX09GRl9NQVNLICAgICAgICAgIDB4MDAwMEZFMDAgLyogTDMgb2Zmc2V0ICovCi0jZGVmaW5lICAgIEhQX1NUQVRVUzBfTEJfQ1BVTlVNX01BU0sgICAgICAgMHgwMDAwMDFGOCAvKiBsb2FkIGJhbGFuY2luZyBDUFUgCisjZGVmaW5lICAgIEhQX1NUQVRVUzBfTEJfQ1BVTlVNX01BU0sgICAgICAgMHgwMDAwMDFGOCAvKiBsb2FkIGJhbGFuY2luZyBDUFUKIAkJCQkJCQkgbnVtYmVyICovCiAjZGVmaW5lICAgIEhQX1NUQVRVUzBfSFJQX09QQ09ERV9NQVNLICAgICAgMHgwMDAwMDAwNyAvKiBIUlAgb3Bjb2RlICovCiAKQEAgLTExNzksMTEgKzExNzksMTEgQEAKIAogI2RlZmluZSAgUkVHX0hQX1NUQVRVUzIgICAgICAgICAgICAgICAgICAgIDB4NDE5OCAgLyogKHJvKSBIUCBzdGF0dXMgMyAqLwogI2RlZmluZSAgICBIUF9TVEFUVVMyX0FDQ1VSMl9NQVNLICAgICAgICAgIDB4RjAwMDAwMDAgLyogYWNjdSBSMlszOjBdICovCi0jZGVmaW5lICAgIEhQX1NUQVRVUzJfQ1NVTV9PRkZfTUFTSyAgICAgICAgMHgwN0YwMDAwMCAvKiBjaGVja3N1bSBzdGFydCAKKyNkZWZpbmUgICAgSFBfU1RBVFVTMl9DU1VNX09GRl9NQVNLICAgICAgICAweDA3RjAwMDAwIC8qIGNoZWNrc3VtIHN0YXJ0CiAJCQkJCQkJIHN0YXJ0IG9mZnNldCAqLwogI2RlZmluZSAgICBIUF9TVEFUVVMyX0FDQ1VSMV9NQVNLICAgICAgICAgIDB4MDAwRkUwMDAgLyogYWNjdSBSMSAqLwogI2RlZmluZSAgICBIUF9TVEFUVVMyX0ZPUkNFX0RST1AgICAgICAgICAgIDB4MDAwMDEwMDAgLyogZm9yY2UgZHJvcCAqLwotI2RlZmluZSAgICBIUF9TVEFUVVMyX0JXT19SRUFTU00gICAgICAgICAgIDB4MDAwMDA4MDAgLyogYmF0Y2hpbmcgdy9vIAorI2RlZmluZSAgICBIUF9TVEFUVVMyX0JXT19SRUFTU00gICAgICAgICAgIDB4MDAwMDA4MDAgLyogYmF0Y2hpbmcgdy9vCiAJCQkJCQkJIHJlYXNzZW1ibHkgKi8KICNkZWZpbmUgICAgSFBfU1RBVFVTMl9KSF9TUExJVF9FTiAgICAgICAgICAweDAwMDAwNDAwIC8qIGp1bWJvIGhlYWRlciBzcGxpdAogCQkJCQkJCSBlbmFibGUgKi8KQEAgLTExOTEsOSArMTE5MSw5IEBACiAJCQkJCQkJIGNoZWNrICovCiAjZGVmaW5lICAgIEhQX1NUQVRVUzJfREFUQV9NQVNLX1pFUk8gICAgICAgMHgwMDAwMDEwMCAvKiBtYXNrIG9mIGRhdGEgbGVuZ3RoCiAJCQkJCQkJIGVxdWFsIHRvIHplcm8gKi8KLSNkZWZpbmUgICAgSFBfU1RBVFVTMl9GT1JDRV9UQ1BfQ0hFQ0sgICAgICAweDAwMDAwMDgwIC8qIGZvcmNlIHRjcCBwYXlsb2FkIAorI2RlZmluZSAgICBIUF9TVEFUVVMyX0ZPUkNFX1RDUF9DSEVDSyAgICAgIDB4MDAwMDAwODAgLyogZm9yY2UgdGNwIHBheWxvYWQKIAkJCQkJCQkgY2hrICovCi0jZGVmaW5lICAgIEhQX1NUQVRVUzJfTUFTS19UQ1BfVEhSRVNIICAgICAgMHgwMDAwMDA0MCAvKiBtYXNrIG9mIHBheWxvYWQgCisjZGVmaW5lICAgIEhQX1NUQVRVUzJfTUFTS19UQ1BfVEhSRVNIICAgICAgMHgwMDAwMDA0MCAvKiBtYXNrIG9mIHBheWxvYWQKIAkJCQkJCQkgdGhyZXNob2xkICovCiAjZGVmaW5lICAgIEhQX1NUQVRVUzJfTk9fQVNTSVNUICAgICAgICAgICAgMHgwMDAwMDAyMCAvKiBubyBhc3Npc3QgKi8KICNkZWZpbmUgICAgSFBfU1RBVFVTMl9DVFJMX1BBQ0tFVF9GTEFHICAgICAweDAwMDAwMDEwIC8qIGNvbnRyb2wgcGFja2V0IGZsYWcgKi8KQEAgLTEyMTQsNyArMTIxNCw3IEBACiAjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0hQX0lOU1RSMl9QQVNTICAgICAgMHgxMDAwMDAwMCAvKiBIUCBpbnN0ciByYW0gMiAqLwogI2RlZmluZSAgICBIUF9SQU1fQklTVF9GREJNX0FHRTBfUEFTUyAgICAgIDB4MDgwMDAwMDAgLyogRkRCTSBhZ2luZyBSQU0wICovCiAjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0ZEQk1fQUdFMV9QQVNTICAgICAgMHgwNDAwMDAwMCAvKiBGREJNIGFnaW5nIFJBTTEgKi8KLSNkZWZpbmUgICAgSFBfUkFNX0JJU1RfRkRCTV9GTE9XSUQwMF9QQVNTICAweDAyMDAwMDAwIC8qIEZEQk0gZmxvd2lkIFJBTTAgCisjZGVmaW5lICAgIEhQX1JBTV9CSVNUX0ZEQk1fRkxPV0lEMDBfUEFTUyAgMHgwMjAwMDAwMCAvKiBGREJNIGZsb3dpZCBSQU0wCiAJCQkJCQkJIGJhbmsgMCAqLwogI2RlZmluZSAgICBIUF9SQU1fQklTVF9GREJNX0ZMT1dJRDEwX1BBU1MgIDB4MDEwMDAwMDAgLyogRkRCTSBmbG93aWQgUkFNMQogCQkJCQkJCSBiYW5rIDAgKi8KQEAgLTEyNDcsMjUgKzEyNDcsMjUgQEAKIC8qIGV4ZWN1dGUgYSBwYXVzZSBmbG93IGNvbnRyb2wgZnJhbWUgdHJhbnNtaXNzaW9uCiAgREVGQVVMVDogMHgwWFhYWCAqLwogI2RlZmluZSAgUkVHX01BQ19TRU5EX1BBVVNFICAgICAgICAgICAgICAgIDB4NjAwOCAgLyogc2VuZCBwYXVzZSBjb21tYW5kIHJlZyAqLwotI2RlZmluZSAgICBNQUNfU0VORF9QQVVTRV9USU1FX01BU0sgICAgICAgIDB4MDAwMEZGRkYgLyogdmFsdWUgb2YgcGF1c2UgdGltZSAKKyNkZWZpbmUgICAgTUFDX1NFTkRfUEFVU0VfVElNRV9NQVNLICAgICAgICAweDAwMDBGRkZGIC8qIHZhbHVlIG9mIHBhdXNlIHRpbWUKIAkJCQkJCQkgdG8gYmUgc2VudCBvbiBuZXR3b3JrCi0JCQkJCQkJIGluIHVuaXRzIG9mIHNsb3QgCisJCQkJCQkJIGluIHVuaXRzIG9mIHNsb3QKIAkJCQkJCQkgdGltZXMgKi8KICNkZWZpbmUgICAgTUFDX1NFTkRfUEFVU0VfU0VORCAgICAgICAgICAgICAweDAwMDEwMDAwIC8qIHNlbmQgcGF1c2UgZmxvdyBjdHJsCiAJCQkJCQkJIGZyYW1lIG9uIG5ldHdvcmsgKi8KIAogLyogYml0IHNldCBpbmRpY2F0ZXMgdGhhdCBldmVudCBvY2N1cnJlZC4gYXV0by1jbGVhcmVkIHdoZW4gc3RhdHVzIHJlZ2lzdGVyCi0gKiBpcyByZWFkIGFuZCBoYXZlIGNvcnJlc3BvbmRpbmcgbWFzayBiaXRzIGluIG1hc2sgcmVnaXN0ZXIuIGV2ZW50cyB3aWxsIAotICogdHJpZ2dlciBhbiBpbnRlcnJ1cHQgaWYgdGhlIGNvcnJlc3BvbmRpbmcgbWFzayBiaXQgaXMgMC4gCisgKiBpcyByZWFkIGFuZCBoYXZlIGNvcnJlc3BvbmRpbmcgbWFzayBiaXRzIGluIG1hc2sgcmVnaXN0ZXIuIGV2ZW50cyB3aWxsCisgKiB0cmlnZ2VyIGFuIGludGVycnVwdCBpZiB0aGUgY29ycmVzcG9uZGluZyBtYXNrIGJpdCBpcyAwLgogICogc3RhdHVzIHJlZ2lzdGVyIGRlZmF1bHQ6IDB4MDAwMDAwMDAKICAqIG1hc2sgcmVnaXN0ZXIgZGVmYXVsdCA9IDB4RkZGRkZGRkYgb24gcmVzZXQKICAqLwogI2RlZmluZSAgUkVHX01BQ19UWF9TVEFUVVMgICAgICAgICAgICAgICAgIDB4NjAxMCAgLyogVFggTUFDIHN0YXR1cyByZWcgKi8KLSNkZWZpbmUgICAgTUFDX1RYX0ZSQU1FX1hNSVQgICAgICAgICAgICAgICAweDAwMDEgIC8qIHN1Y2Nlc3NmdWwgZnJhbWUgCisjZGVmaW5lICAgIE1BQ19UWF9GUkFNRV9YTUlUICAgICAgICAgICAgICAgMHgwMDAxICAvKiBzdWNjZXNzZnVsIGZyYW1lCiAJCQkJCQkgICAgICB0cmFuc21pc2lvbiAqLwotI2RlZmluZSAgICBNQUNfVFhfVU5ERVJSVU4gICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogdGVybWluYXRlZCBmcmFtZSAKKyNkZWZpbmUgICAgTUFDX1RYX1VOREVSUlVOICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIHRlcm1pbmF0ZWQgZnJhbWUKIAkJCQkJCSAgICAgIHRyYW5zbWlzc2lvbiBkdWUgdG8KLQkJCQkJCSAgICAgIGRhdGEgc3RhcnZhdGlvbiBpbiB0aGUgCisJCQkJCQkgICAgICBkYXRhIHN0YXJ2YXRpb24gaW4gdGhlCiAJCQkJCQkgICAgICB4bWl0IGRhdGEgcGF0aCAqLwogI2RlZmluZSAgICBNQUNfVFhfTUFYX1BBQ0tFVF9FUlIgICAgICAgICAgIDB4MDAwNCAgLyogZnJhbWUgZXhjZWVkcyBtYXggYWxsb3dlZAogCQkJCQkJICAgICAgbGVuZ3RoIHBhc3NlZCB0byBUWCBNQUMKQEAgLTEyODYsNyArMTI4Niw3IEBACiAjZGVmaW5lICBSRUdfTUFDX1JYX1NUQVRVUyAgICAgICAgICAgICAgICAgMHg2MDE0ICAvKiBSWCBNQUMgc3RhdHVzIHJlZyAqLwogI2RlZmluZSAgICBNQUNfUlhfRlJBTUVfUkVDViAgICAgICAgICAgICAgIDB4MDAwMSAgLyogc3VjY2Vzc2Z1bCByZWNlaXB0IG9mCiAJCQkJCQkgICAgICBhIGZyYW1lICovCi0jZGVmaW5lICAgIE1BQ19SWF9PVkVSRkxPVyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBkcm9wcGVkIGZyYW1lIGR1ZSB0byAKKyNkZWZpbmUgICAgTUFDX1JYX09WRVJGTE9XICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIGRyb3BwZWQgZnJhbWUgZHVlIHRvCiAJCQkJCQkgICAgICBSWCBGSUZPIG92ZXJmbG93ICovCiAjZGVmaW5lICAgIE1BQ19SWF9GUkFNRV9DT1VOVCAgICAgICAgICAgICAgMHgwMDA0ICAvKiByb2xsb3ZlciBvZiByZWNlaXZlIGZyYW1lCiAJCQkJCQkgICAgICBjb3VudGVyICovCkBAIC0xMjk0LDI3ICsxMjk0LDI3IEBACiAJCQkJCQkgICAgICBlcnJvciBjb3VudGVyICovCiAjZGVmaW5lICAgIE1BQ19SWF9DUkNfRVJSICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiByb2xsb3ZlciBvZiBjcmMgZXJyb3IKIAkJCQkJCSAgICAgIGNvdW50ZXIgKi8KLSNkZWZpbmUgICAgTUFDX1JYX0xFTl9FUlIgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIHJvbGxvdmVyIG9mIGxlbmd0aCAKKyNkZWZpbmUgICAgTUFDX1JYX0xFTl9FUlIgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIHJvbGxvdmVyIG9mIGxlbmd0aAogCQkJCQkJICAgICAgZXJyb3IgY291bnRlciAqLwotI2RlZmluZSAgICBNQUNfUlhfVklPTF9FUlIgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogcm9sbG92ZXIgb2YgY29kZSAKKyNkZWZpbmUgICAgTUFDX1JYX1ZJT0xfRVJSICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIHJvbGxvdmVyIG9mIGNvZGUKIAkJCQkJCSAgICAgIHZpb2xhdGlvbiBlcnJvciAqLwogCiAvKiBERUZBVUxUOiAweFhYWFgwMDAwIG9uIHJlc2V0ICovCiAjZGVmaW5lICBSRUdfTUFDX0NUUkxfU1RBVFVTICAgICAgICAgICAgICAgMHg2MDE4ICAvKiBNQUMgY29udHJvbCBzdGF0dXMgcmVnICovCi0jZGVmaW5lICAgIE1BQ19DVFJMX1BBVVNFX1JFQ0VJVkVEICAgICAgICAgMHgwMDAwMDAwMSAgLyogc3VjY2Vzc2Z1bCAKLQkJCQkJCQkgIHJlY2VwdGlvbiBvZiBhIAotCQkJCQkJCSAgcGF1c2UgY29udHJvbCAKKyNkZWZpbmUgICAgTUFDX0NUUkxfUEFVU0VfUkVDRUlWRUQgICAgICAgICAweDAwMDAwMDAxICAvKiBzdWNjZXNzZnVsCisJCQkJCQkJICByZWNlcHRpb24gb2YgYQorCQkJCQkJCSAgcGF1c2UgY29udHJvbAogCQkJCQkJCSAgZnJhbWUgKi8KLSNkZWZpbmUgICAgTUFDX0NUUkxfUEFVU0VfU1RBVEUgICAgICAgICAgICAweDAwMDAwMDAyICAvKiBNQUMgaGFzIG1hZGUgYSAKLQkJCQkJCQkgIHRyYW5zaXRpb24gZnJvbSAKLQkJCQkJCQkgICJub3QgcGF1c2VkIiB0byAKKyNkZWZpbmUgICAgTUFDX0NUUkxfUEFVU0VfU1RBVEUgICAgICAgICAgICAweDAwMDAwMDAyICAvKiBNQUMgaGFzIG1hZGUgYQorCQkJCQkJCSAgdHJhbnNpdGlvbiBmcm9tCisJCQkJCQkJICAibm90IHBhdXNlZCIgdG8KIAkJCQkJCQkgICJwYXVzZWQiICovCi0jZGVmaW5lICAgIE1BQ19DVFJMX05PUEFVU0VfU1RBVEUgICAgICAgICAgMHgwMDAwMDAwNCAgLyogTUFDIGhhcyBtYWRlIGEgCi0JCQkJCQkJICB0cmFuc2l0aW9uIGZyb20gCisjZGVmaW5lICAgIE1BQ19DVFJMX05PUEFVU0VfU1RBVEUgICAgICAgICAgMHgwMDAwMDAwNCAgLyogTUFDIGhhcyBtYWRlIGEKKwkJCQkJCQkgIHRyYW5zaXRpb24gZnJvbQogCQkJCQkJCSAgInBhdXNlZCIgdG8gIm5vdAogCQkJCQkJCSAgcGF1c2VkIiAqLwogI2RlZmluZSAgICBNQUNfQ1RSTF9QQVVTRV9USU1FX01BU0sgICAgICAgIDB4RkZGRjAwMDAgIC8qIHZhbHVlIG9mIHBhdXNlIHRpbWUKLQkJCQkJCQkgIG9wZXJhbmQgdGhhdCB3YXMgCisJCQkJCQkJICBvcGVyYW5kIHRoYXQgd2FzCiAJCQkJCQkJICByZWNlaXZlZCBpbiB0aGUgbGFzdAogCQkJCQkJCSAgcGF1c2UgZmxvdyBjb250cm9sCiAJCQkJCQkJICBmcmFtZSAqLwpAQCAtMTMyNiwxMyArMTMyNiwxMyBAQAogLyogbGF5b3V0IGlkZW50aWNhbCB0byBDVFJMIE1BQ1syOjBdICovCiAjZGVmaW5lICBSRUdfTUFDX0NUUkxfTUFTSyAgICAgICAgICAgICAgICAgMHg2MDI4ICAvKiBNQUMgY29udHJvbCBtYXNrIHJlZyAqLwogCi0vKiB0byBlbnN1cmUgcHJvcGVyIG9wZXJhdGlvbiwgQ0ZHX0VOIG11c3QgYmUgY2xlYXJlZCB0byAwIGFuZCBhIGRlbGF5IAorLyogdG8gZW5zdXJlIHByb3BlciBvcGVyYXRpb24sIENGR19FTiBtdXN0IGJlIGNsZWFyZWQgdG8gMCBhbmQgYSBkZWxheQogICogaW1wb3NlZCBiZWZvcmUgd3JpdGVzIHRvIG90aGVyIGJpdHMgaW4gdGhlIFRYX01BQ19DRkcgcmVnaXN0ZXIgb3IgYW55IG9mCiAgKiB0aGUgTUFDIHBhcmFtZXRlcnMgaXMgcGVyZm9ybWVkLiBkZWxheSBkZXBlbmRlbnQgdXBvbiB0aW1lIHJlcXVpcmVkIHRvCiAgKiB0cmFuc21pdCBhIG1heGltdW0gc2l6ZSBmcmFtZSAoPSBNQUNfRlJBTUVTSVpFX01BWCo4L01icHMpLiBlLmcuLAotICogdGhlIGRlbGF5IGZvciBhIDE1MTgtYnl0ZSBmcmFtZSBvbiBhIDEwME1icHMgbmV0d29yayBpcyAxMjV1cy4gCi0gKiBhbHRlcm5hdGl2ZWx5LCBqdXN0IHBvbGwgVFhfQ0ZHX0VOIHVudGlsIGl0IHJlYWRzIGJhY2sgYXMgMC4gCi0gKiBOT1RFOiBvbiBoYWxmLWR1cGxleCAxR2JwcywgVFhfQ0ZHX0NBUlJJRVJfRVhURU5EIGFuZCAKKyAqIHRoZSBkZWxheSBmb3IgYSAxNTE4LWJ5dGUgZnJhbWUgb24gYSAxMDBNYnBzIG5ldHdvcmsgaXMgMTI1dXMuCisgKiBhbHRlcm5hdGl2ZWx5LCBqdXN0IHBvbGwgVFhfQ0ZHX0VOIHVudGlsIGl0IHJlYWRzIGJhY2sgYXMgMC4KKyAqIE5PVEU6IG9uIGhhbGYtZHVwbGV4IDFHYnBzLCBUWF9DRkdfQ0FSUklFUl9FWFRFTkQgYW5kCiAgKiBSWF9DRkdfQ0FSUklFUl9FWFRFTkQgc2hvdWxkIGJlIHNldCBhbmQgdGhlIFNMT1RfVElNRSByZWdpc3RlciBzaG91bGQKICAqIGJlIDB4MjAwIChzbG90IHRpbWUgb2YgNTEyIGJ5dGVzKQogICovCkBAIC0xMzQwLDEyICsxMzQwLDEyIEBACiAjZGVmaW5lICAgIE1BQ19UWF9DRkdfRU4gICAgICAgICAgICAgICAgMHgwMDAxICAvKiBlbmFibGUgVFggTUFDLiAwIHdpbGwKIAkJCQkJCSAgICAgIGZvcmNlIFRYTUFDIHN0YXRlCiAJCQkJCQkgICAgICBtYWNoaW5lIHRvIHJlbWFpbiBpbgotCQkJCQkJICAgICAgaWRsZSBzdGF0ZSBvciB0byAKKwkJCQkJCSAgICAgIGlkbGUgc3RhdGUgb3IgdG8KIAkJCQkJCSAgICAgIHRyYW5zaXRpb24gdG8gaWRsZSBzdGF0ZQogCQkJCQkJICAgICAgb24gY29tcGxldGlvbiBvZiBhbgogCQkJCQkJICAgICAgb25nb2luZyBwYWNrZXQuICovCiAjZGVmaW5lICAgIE1BQ19UWF9DRkdfSUdOT1JFX0NBUlJJRVIgICAgMHgwMDAyICAvKiBkaXNhYmxlIENTTUEvQ0QgZGVmZXJyYWwKLQkJCQkJCSAgIHByb2Nlc3MuIHNldCB0byAxIHdoZW4gCisJCQkJCQkgICBwcm9jZXNzLiBzZXQgdG8gMSB3aGVuCiAJCQkJCQkgICBmdWxsIGR1cGxleCBhbmQgMCB3aGVuCiAJCQkJCQkgICBoYWxmIGR1cGxleCAqLwogI2RlZmluZSAgICBNQUNfVFhfQ0ZHX0lHTk9SRV9DT0xMICAgICAgIDB4MDAwNCAgLyogZGlzYWJsZSBDU01BL0NEIGJhY2tvZmYKQEAgLTEzNTMsMzIgKzEzNTMsMzIgQEAKIAkJCQkJCSAgIGZ1bGwgZHVwbGV4IGFuZCAwIHdoZW4KIAkJCQkJCSAgIGhhbGYgZHVwbGV4ICovCiAjZGVmaW5lICAgIE1BQ19UWF9DRkdfSVBHX0VOICAgICAgICAgICAgMHgwMDA4ICAvKiBlbmFibGUgZXh0ZW5zaW9uIG9mIHRoZQotCQkJCQkJICAgUngtdG8tVFggSVBHLiBhZnRlciAKLQkJCQkJCSAgIHJlY2VpdmluZyBhIGZyYW1lLCBUWCAKLQkJCQkJCSAgIE1BQyB3aWxsIHJlc2V0IGl0cyAKLQkJCQkJCSAgIGRlZmVycmFsIHByb2Nlc3MgdG8gCisJCQkJCQkgICBSeC10by1UWCBJUEcuIGFmdGVyCisJCQkJCQkgICByZWNlaXZpbmcgYSBmcmFtZSwgVFgKKwkJCQkJCSAgIE1BQyB3aWxsIHJlc2V0IGl0cworCQkJCQkJICAgZGVmZXJyYWwgcHJvY2VzcyB0bwogCQkJCQkJICAgY2FycmllciBzZW5zZSBmb3IgdGhlCiAJCQkJCQkgICBhbW91bnQgb2YgdGltZSA9IElQRzAgKwotCQkJCQkJICAgSVBHMSBhbmQgY29tbWl0IHRvIAorCQkJCQkJICAgSVBHMSBhbmQgY29tbWl0IHRvCiAJCQkJCQkgICB0cmFuc21pc3Npb24gZm9yIHRpbWUKIAkJCQkJCSAgIHNwZWNpZmllZCBpbiBJUEcyLiB3aGVuCiAJCQkJCQkgICAwIG9yIHdoZW4geG1pdHRpbmcgZnJhbWVzCiAJCQkJCQkgICBiYWNrLXRvLXBhY2sgKFR4LXRvLVR4Ci0JCQkJCQkgICBJUEcpLCBUWCBNQUMgaWdub3JlcyAKKwkJCQkJCSAgIElQRyksIFRYIE1BQyBpZ25vcmVzCiAJCQkJCQkgICBJUEcwIGFuZCB3aWxsIG9ubHkgdXNlCiAJCQkJCQkgICBJUEcxIGZvciBkZWZlcnJhbCB0aW1lLgogCQkJCQkJICAgSVBHMiBzdGlsbCB1c2VkLiAqLwogI2RlZmluZSAgICBNQUNfVFhfQ0ZHX05FVkVSX0dJVkVfVVBfRU4gIDB4MDAxMCAgLyogVFggTUFDIHdpbGwgbm90IGVhc2lseQotCQkJCQkJICAgZ2l2ZSB1cCBvbiBmcmFtZSAKLQkJCQkJCSAgIHhtaXNzaW9uLiBpZiBiYWNrb2ZmIAorCQkJCQkJICAgZ2l2ZSB1cCBvbiBmcmFtZQorCQkJCQkJICAgeG1pc3Npb24uIGlmIGJhY2tvZmYKIAkJCQkJCSAgIGFsZ29yaXRobSByZWFjaGVzIHRoZQogCQkJCQkJICAgQVRURU1QVF9MSU1JVCwgaXQgd2lsbAogCQkJCQkJICAgY2xlYXIgYXR0ZW1wdHMgY291bnRlcgogCQkJCQkJICAgYW5kIGNvbnRpbnVlIHRyeWluZyB0bwotCQkJCQkJICAgc2VuZCB0aGUgZnJhbWUgYXMgCi0JCQkJCQkgICBzcGVjaWZpZWQgYnkgCisJCQkJCQkgICBzZW5kIHRoZSBmcmFtZSBhcworCQkJCQkJICAgc3BlY2lmaWVkIGJ5CiAJCQkJCQkgICBHSVZFX1VQX0xJTS4gd2hlbiAwLAotCQkJCQkJICAgVFggTUFDIHdpbGwgZXhlY3V0ZSAKKwkJCQkJCSAgIFRYIE1BQyB3aWxsIGV4ZWN1dGUKIAkJCQkJCSAgIHN0YW5kYXJkIENTTUEvQ0QgcHJvdC4gKi8KICNkZWZpbmUgICAgTUFDX1RYX0NGR19ORVZFUl9HSVZFX1VQX0xJTSAweDAwMjAgIC8qIHdoZW4gc2V0LCBUWCBNQUMgd2lsbAogCQkJCQkJICAgY29udGludWUgdG8gdHJ5IHRvIHhtaXQKQEAgLTEzODYsMTMgKzEzODYsMTMgQEAKIAkJCQkJCSAgIDAsIFRYIE1BQyB3aWxsIGNvbnRpbnVlCiAJCQkJCQkgICB0byB0cnkgeG1pdHRpbmcgdW50aWwKIAkJCQkJCSAgIHN1Y2Nlc3NmdWwgb3IgYmFja29mZgotCQkJCQkJICAgYWxnb3JpdGhtIHJlYWNoZXMgCisJCQkJCQkgICBhbGdvcml0aG0gcmVhY2hlcwogCQkJCQkJICAgQVRURU1QVF9MSU1JVCoxNiAqLwogI2RlZmluZSAgICBNQUNfVFhfQ0ZHX05PX0JBQ0tPRkYgICAgICAgIDB4MDA0MCAgLyogbW9kaWZ5IENTTUEvQ0QgdG8gZGlzYWJsZQogCQkJCQkJICAgYmFja29mZiBhbGdvcml0aG0uIFRYCiAJCQkJCQkgICBNQUMgd2lsbCBub3QgYmFjayBvZmYKIAkJCQkJCSAgIGFmdGVyIGEgeG1pc3Npb24gYXR0ZW1wdAotCQkJCQkJICAgdGhhdCByZXN1bHRlZCBpbiBhIAorCQkJCQkJICAgdGhhdCByZXN1bHRlZCBpbiBhCiAJCQkJCQkgICBjb2xsaXNpb24uICovCiAjZGVmaW5lICAgIE1BQ19UWF9DRkdfU0xPV19ET1dOICAgICAgICAgMHgwMDgwICAvKiBtb2RpZnkgQ1NNQS9DRCBzbyB0aGF0CiAJCQkJCQkgICBkZWZlcnJhbCBwcm9jZXNzIGlzIHJlc2V0CkBAIC0xNDA4LDExICsxNDA4LDExIEBACiAJCQkJCQkgICBwYWNrZXRzLiB3aGVuIGNsZWFyLCBDUkMKIAkJCQkJCSAgIGdlbmVyYXRpb24gaXMgZGVwZW5kZW50CiAJCQkJCQkgICB1cG9uIE5PX0NSQyBiaXQgaW4gdGhlCi0JCQkJCQkgICB4bWl0IGNvbnRyb2wgd29yZCBmcm9tIAorCQkJCQkJICAgeG1pdCBjb250cm9sIHdvcmQgZnJvbQogCQkJCQkJICAgVFggRE1BICovCiAjZGVmaW5lICAgIE1BQ19UWF9DRkdfQ0FSUklFUl9FWFRFTkQgICAgMHgwMjAwICAvKiBlbmFibGVzIHhtaXQgcGFydCBvZiB0aGUKLQkJCQkJCSAgIGNhcnJpZXIgZXh0ZW5zaW9uIAotCQkJCQkJICAgZmVhdHVyZS4gdGhpcyBhbGxvd3MgZm9yIAorCQkJCQkJICAgY2FycmllciBleHRlbnNpb24KKwkJCQkJCSAgIGZlYXR1cmUuIHRoaXMgYWxsb3dzIGZvcgogCQkJCQkJICAgbG9uZ2VyIGNvbGxpc2lvbiBkb21haW5zCiAJCQkJCQkgICBieSBleHRlbmRpbmcgdGhlIGNhcnJpZXIKIAkJCQkJCSAgIGFuZCBjb2xsaXNpb24gd2luZG93CkBAIC0xNDIyLDQ0ICsxNDIyLDQ0IEBACiAJCQkJCQkgICBmb3IgaGFsZi1kdXBsZXggYXQgMUdicHMsCiAJCQkJCQkgICBjbGVhciBvdGhlcndpc2UuICovCiAKLS8qIHdoZW4gQ1JDIGlzIG5vdCBzdHJpcHBlZCwgcmVhc3NlbWJseSBwYWNrZXRzIHdpbGwgbm90IGNvbnRhaW4gdGhlIENSQy4gCisvKiB3aGVuIENSQyBpcyBub3Qgc3RyaXBwZWQsIHJlYXNzZW1ibHkgcGFja2V0cyB3aWxsIG5vdCBjb250YWluIHRoZSBDUkMuCiAgKiB0aGVzZSB3aWxsIGJlIHN0cmlwcGVkIGJ5IEhSUCBiZWNhdXNlIGl0IHJlYXNzZW1ibGVzIGxheWVyIDQgZGF0YSwgYW5kIHRoZQotICogQ1JDIGlzIGxheWVyIDIuIGhvd2V2ZXIsIG5vbi1yZWFzc2VtYmx5IHBhY2tldHMgd2lsbCBzdGlsbCBjb250YWluIHRoZSBDUkMgCisgKiBDUkMgaXMgbGF5ZXIgMi4gaG93ZXZlciwgbm9uLXJlYXNzZW1ibHkgcGFja2V0cyB3aWxsIHN0aWxsIGNvbnRhaW4gdGhlIENSQwogICogd2hlbiBwYXNzZWQgdG8gdGhlIGhvc3QuIHRvIGVuc3VyZSBwcm9wZXIgb3BlcmF0aW9uLCBuZWVkIHRvIHdhaXQgMy4ybXMKICAqIGFmdGVyIGNsZWFyaW5nIFJYX0NGR19FTiBiZWZvcmUgd3JpdGluZyB0byBhbnkgb3RoZXIgUlggTUFDIHJlZ2lzdGVycwogICogb3Igb3RoZXIgTUFDIHBhcmFtZXRlcnMuIGFsdGVybmF0aXZlbHksIHBvbGwgUlhfQ0ZHX0VOIHVudGlsIGl0IGNsZWFycwotICogdG8gMC4gc2ltaWxhcnksIEhBU0hfRklMVEVSX0VOIGFuZCBBRERSX0ZJTFRFUl9FTiBoYXZlIHRoZSBzYW1lIAorICogdG8gMC4gc2ltaWxhcnksIEhBU0hfRklMVEVSX0VOIGFuZCBBRERSX0ZJTFRFUl9FTiBoYXZlIHRoZSBzYW1lCiAgKiByZXN0cmljdGlvbnMgYXMgQ0ZHX0VOLgogICovCiAjZGVmaW5lICBSRUdfTUFDX1JYX0NGRyAgICAgICAgICAgICAgICAgMHg2MDM0ICAvKiBSWCBNQUMgY29uZmlnIHJlZyAqLwogI2RlZmluZSAgICBNQUNfUlhfQ0ZHX0VOICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogZW5hYmxlIFJYIE1BQyAqLwogI2RlZmluZSAgICBNQUNfUlhfQ0ZHX1NUUklQX1BBRCAgICAgICAgIDB4MDAwMiAgLyogYWx3YXlzIHByb2dyYW0gdG8gMC4KIAkJCQkJCSAgIGZlYXR1cmUgbm90IHN1cHBvcnRlZCAqLwotI2RlZmluZSAgICBNQUNfUlhfQ0ZHX1NUUklQX0ZDUyAgICAgICAgIDB4MDAwNCAgLyogUlggTUFDIHdpbGwgc3RyaXAgdGhlIAotCQkJCQkJICAgbGFzdCA0IGJ5dGVzIG9mIGEgCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfU1RSSVBfRkNTICAgICAgICAgMHgwMDA0ICAvKiBSWCBNQUMgd2lsbCBzdHJpcCB0aGUKKwkJCQkJCSAgIGxhc3QgNCBieXRlcyBvZiBhCiAJCQkJCQkgICByZWNlaXZlZCBmcmFtZS4gKi8KICNkZWZpbmUgICAgTUFDX1JYX0NGR19QUk9NSVNDX0VOICAgICAgICAweDAwMDggIC8qIHByb21pc2N1b3VzIG1vZGUgKi8KLSNkZWZpbmUgICAgTUFDX1JYX0NGR19QUk9NSVNDX0dST1VQX0VOICAweDAwMTAgIC8qIGFjY2VwdCBhbGwgdmFsaWQgCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfUFJPTUlTQ19HUk9VUF9FTiAgMHgwMDEwICAvKiBhY2NlcHQgYWxsIHZhbGlkCiAJCQkJCQkgICBtdWx0aWNhc3QgZnJhbWVzIChncm91cAogCQkJCQkJICAgYml0IGluIERBIGZpZWxkIHNldCkgKi8KICNkZWZpbmUgICAgTUFDX1JYX0NGR19IQVNIX0ZJTFRFUl9FTiAgICAweDAwMjAgIC8qIHVzZSBoYXNoIHRhYmxlIHRvIGZpbHRlcgogCQkJCQkJICAgbXVsdGljYXN0IGFkZHJlc3NlcyAqLwotI2RlZmluZSAgICBNQUNfUlhfQ0ZHX0FERFJfRklMVEVSX0VOICAgIDB4MDA0MCAgLyogY2F1c2UgUlggTUFDIHRvIHVzZSAKLQkJCQkJCSAgIGFkZHJlc3MgZmlsdGVyaW5nIHJlZ3MgCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfQUREUl9GSUxURVJfRU4gICAgMHgwMDQwICAvKiBjYXVzZSBSWCBNQUMgdG8gdXNlCisJCQkJCQkgICBhZGRyZXNzIGZpbHRlcmluZyByZWdzCiAJCQkJCQkgICB0byBmaWx0ZXIgYm90aCB1bmljYXN0Ci0JCQkJCQkgICBhbmQgbXVsdGljYXN0IAorCQkJCQkJICAgYW5kIG11bHRpY2FzdAogCQkJCQkJICAgYWRkcmVzc2VzICovCiAjZGVmaW5lICAgIE1BQ19SWF9DRkdfRElTQUJMRV9ESVNDQVJEICAgMHgwMDgwICAvKiBwYXNzIGVycm9yZWQgZnJhbWVzIHRvCiAJCQkJCQkgICBSWCBETUEgYnkgc2V0dGluZyBCQUQKIAkJCQkJCSAgIGJpdCBidXQgbm90IEFib3J0IGJpdAotCQkJCQkJICAgaW4gdGhlIHN0YXR1cy4gQ1JDLCAKKwkJCQkJCSAgIGluIHRoZSBzdGF0dXMuIENSQywKIAkJCQkJCSAgIGZyYW1pbmcsIGFuZCBsZW5ndGggZXJycwotCQkJCQkJICAgd2lsbCBub3QgaW5jcmVtZW50IAorCQkJCQkJICAgd2lsbCBub3QgaW5jcmVtZW50CiAJCQkJCQkgICBlcnJvciBjb3VudGVycy4gZnJhbWVzCiAJCQkJCQkgICB3aGljaCBkb24ndCBtYXRjaCBkZXN0CiAJCQkJCQkgICBhZGRyIHdpbGwgYmUgcGFzc2VkIHVwCiAJCQkJCQkgICB3LyBCQUQgYml0IHNldC4gKi8KLSNkZWZpbmUgICAgTUFDX1JYX0NGR19DQVJSSUVSX0VYVEVORCAgICAweDAxMDAgIC8qIGVuYWJsZSByZWNlcHRpb24gb2YgCisjZGVmaW5lICAgIE1BQ19SWF9DRkdfQ0FSUklFUl9FWFRFTkQgICAgMHgwMTAwICAvKiBlbmFibGUgcmVjZXB0aW9uIG9mCiAJCQkJCQkgICBwYWNrZXQgYnVyc3RzIGdlbmVyYXRlZAogCQkJCQkJICAgYnkgY2FycmllciBleHRlbnNpb24KIAkJCQkJCSAgIHdpdGggcGFja2V0IGJ1cnN0aW5nCkBAIC0xNDY4LDE4ICsxNDY4LDE4IEBACiAKIC8qIERFRkFVTFQ6IDB4MCAqLwogI2RlZmluZSAgUkVHX01BQ19DVFJMX0NGRyAgICAgICAgICAgICAgIDB4NjAzOCAgLyogTUFDIGNvbnRyb2wgY29uZmlnIHJlZyAqLwotI2RlZmluZSAgICBNQUNfQ1RSTF9DRkdfU0VORF9QQVVTRV9FTiAgIDB4MDAwMSAgLyogcmVzcG9uZCB0byByZXF1ZXN0cyBmb3IgCi0JCQkJCQkgICBzZW5kaW5nIHBhdXNlIGZsb3cgY3RybCAKKyNkZWZpbmUgICAgTUFDX0NUUkxfQ0ZHX1NFTkRfUEFVU0VfRU4gICAweDAwMDEgIC8qIHJlc3BvbmQgdG8gcmVxdWVzdHMgZm9yCisJCQkJCQkgICBzZW5kaW5nIHBhdXNlIGZsb3cgY3RybAogCQkJCQkJICAgZnJhbWVzICovCi0jZGVmaW5lICAgIE1BQ19DVFJMX0NGR19SRUNWX1BBVVNFX0VOICAgMHgwMDAyICAvKiByZXNwb25kIHRvIHJlY2VpdmVkIAorI2RlZmluZSAgICBNQUNfQ1RSTF9DRkdfUkVDVl9QQVVTRV9FTiAgIDB4MDAwMiAgLyogcmVzcG9uZCB0byByZWNlaXZlZAogCQkJCQkJICAgcGF1c2UgZmxvdyBjdHJsIGZyYW1lcyAqLwogI2RlZmluZSAgICBNQUNfQ1RSTF9DRkdfUEFTU19DVFJMICAgICAgIDB4MDAwNCAgLyogcGFzcyB2YWxpZCBNQUMgY3RybAogCQkJCQkJICAgcGFja2V0cyB0byBSWCBETUEgKi8KIAogLyogdG8gZW5zdXJlIHByb3BlciBvcGVyYXRpb24sIGEgZ2xvYmFsIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHNob3VsZCBiZQogICogcGVyZm9ybWVkIHdoZW4gYSBsb29wYmFjayBjb25maWcgaXMgZW50ZXJlZCBvciBleGl0ZWQuIGlmIHByb2dyYW1tZWQgYWZ0ZXIKLSAqIGEgaHcgb3IgZ2xvYmFsIHN3IHJlc2V0LCBSWC9UWCBNQUMgc29mdHdhcmUgcmVzZXQgYW5kIGluaXRpYWxpemF0aW9uIAotICogc2hvdWxkIGJlIGRvbmUgdG8gZW5zdXJlIHN0YWJsZSBjbG9ja2luZy4gCisgKiBhIGh3IG9yIGdsb2JhbCBzdyByZXNldCwgUlgvVFggTUFDIHNvZnR3YXJlIHJlc2V0IGFuZCBpbml0aWFsaXphdGlvbgorICogc2hvdWxkIGJlIGRvbmUgdG8gZW5zdXJlIHN0YWJsZSBjbG9ja2luZy4KICAqIERFRkFVTFQ6IDB4MAogICovCiAjZGVmaW5lICBSRUdfTUFDX1hJRl9DRkcgICAgICAgICAgICAgICAgMHg2MDNDICAvKiBYSUYgY29uZmlnIHJlZyAqLwpAQCAtMTQ4OSwyNiArMTQ4OSwyNiBAQAogCQkJCQkJICAgICAgcGF0aCB0byBHTUlJIHJlY3YgZGF0YQogCQkJCQkJICAgICAgcGF0aC4gcGh5IG1vZGUgcmVnaXN0ZXIKIAkJCQkJCSAgICAgIGNsb2NrIHNlbGVjdGlvbiBtdXN0IGJlCi0JCQkJCQkgICAgICBzZXQgdG8gR01JSSBtb2RlIGFuZCAKKwkJCQkJCSAgICAgIHNldCB0byBHTUlJIG1vZGUgYW5kCiAJCQkJCQkgICAgICBHTUlJX01PREUgc2hvdWxkIGJlIHNldAogCQkJCQkJICAgICAgdG8gMS4gaW4gbG9vcGJhY2sgbW9kZSwKIAkJCQkJCSAgICAgIFJFRkNMSyB3aWxsIGRyaXZlIHRoZQogCQkJCQkJICAgICAgZW50aXJlIG1hYyBjb3JlLiAwIGZvcgogCQkJCQkJICAgICAgbm9ybWFsIG9wZXJhdGlvbi4gKi8KICNkZWZpbmUgICAgTUFDX1hJRl9ESVNBQkxFX0VDSE8gICAgICAgICAgICAweDAwMDQgIC8qIGRpc2FibGVzIHJlY2VpdmUgZGF0YQotCQkJCQkJICAgICAgcGF0aCBkdXJpbmcgcGFja2V0IAorCQkJCQkJICAgICAgcGF0aCBkdXJpbmcgcGFja2V0CiAJCQkJCQkgICAgICB4bWlzc2lvbi4gY2xlYXIgdG8gMAogCQkJCQkJICAgICAgaW4gYW55IGZ1bGwgZHVwbGV4IG1vZGUsCiAJCQkJCQkgICAgICBpbiBhbnkgbG9vcGJhY2sgbW9kZSwKIAkJCQkJCSAgICAgIG9yIGluIGhhbGYtZHVwbGV4IFNFUkRFUwogCQkJCQkJICAgICAgb3IgU0xJTksgbW9kZXMuIHNldCB3aGVuCi0JCQkJCQkgICAgICBpbiBoYWxmLWR1cGxleCB3aGVuIAorCQkJCQkJICAgICAgaW4gaGFsZi1kdXBsZXggd2hlbgogCQkJCQkJICAgICAgdXNpbmcgZXh0ZXJuYWwgcGh5LiAqLwogI2RlZmluZSAgICBNQUNfWElGX0dNSUlfTU9ERSAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUFDIG9wZXJhdGVzIHdpdGggR01JSQogCQkJCQkJICAgICAgY2xvY2tzIGFuZCBkYXRhcGF0aCAqLwogI2RlZmluZSAgICBNQUNfWElGX01JSV9CVUZGRVJfT1VUUFVUX0VOICAgIDB4MDAxMCAgLyogTUlJX0JVRl9FTiBwaW4uIGVuYWJsZQogCQkJCQkJICAgICAgZXh0ZXJuYWwgdHJpc3RhdGUgYnVmZmVyCi0JCQkJCQkgICAgICBvbiB0aGUgTUlJIHJlY2VpdmUgCisJCQkJCQkgICAgICBvbiB0aGUgTUlJIHJlY2VpdmUKIAkJCQkJCSAgICAgIGJ1cy4gKi8KICNkZWZpbmUgICAgTUFDX1hJRl9MSU5LX0xFRCAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTktMRUQjIGFjdGl2ZSAobG93KSAqLwogI2RlZmluZSAgICBNQUNfWElGX0ZEUExYX0xFRCAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkRQTFhMRUQjIGFjdGl2ZSAobG93KSAqLwpAQCAtMTUyMSw3ICsxNTIxLDcgQEAKIAkJCQkJCSAgICAgIHJlY29tbWVuZGVkOiAweDA0ICovCiAjZGVmaW5lICBSRUdfTUFDX1NMT1RfVElNRSAgICAgICAgICAgICAgICAgMHg2MDRDICAvKiBzbG90IHRpbWUgcmVnCiAJCQkJCQkgICAgICByZWNvbW1lbmRlZDogMHg0MCAqLwotI2RlZmluZSAgUkVHX01BQ19GUkFNRVNJWkVfTUlOICAgICAgICAgICAgIDB4NjA1MCAgLyogbWluIGZyYW1lIHNpemUgcmVnIAorI2RlZmluZSAgUkVHX01BQ19GUkFNRVNJWkVfTUlOICAgICAgICAgICAgIDB4NjA1MCAgLyogbWluIGZyYW1lIHNpemUgcmVnCiAJCQkJCQkgICAgICByZWNvbW1lbmRlZDogMHg0MCAqLwogCiAvKiBGUkFNRVNJWkVfTUFYIGhvbGRzIGJvdGggdGhlIG1heCBmcmFtZSBzaXplIGFzIHdlbGwgYXMgdGhlIG1heCBidXJzdCBzaXplLgpAQCAtMTUzNiwzOSArMTUzNiwzOSBAQAogCQkJCQkJICAgICAgcHJlYW1ibGUgYnl0ZXMgdGhhdCB0aGUKIAkJCQkJCSAgICAgIFRYIE1BQyB3aWxsIHhtaXQgYXQgdGhlCiAJCQkJCQkgICAgICBiZWdpbm5pbmcgb2YgZWFjaCBmcmFtZQotCQkJCQkJICAgICAgdmFsdWUgc2hvdWxkIGJlIDIgb3IgCi0JCQkJCQkgICAgICBncmVhdGVyLiByZWNvbW1lbmRlZCAKKwkJCQkJCSAgICAgIHZhbHVlIHNob3VsZCBiZSAyIG9yCisJCQkJCQkgICAgICBncmVhdGVyLiByZWNvbW1lbmRlZAogCQkJCQkJICAgICAgdmFsdWU6IDB4MDcgKi8KLSNkZWZpbmUgIFJFR19NQUNfSkFNX1NJWkUgICAgICAgICAgICAgICAgICAweDYwNUMgIC8qIGphbSBzaXplIHJlZy4gZHVyYXRpb24gCisjZGVmaW5lICBSRUdfTUFDX0pBTV9TSVpFICAgICAgICAgICAgICAgICAgMHg2MDVDICAvKiBqYW0gc2l6ZSByZWcuIGR1cmF0aW9uCiAJCQkJCQkgICAgICBvZiBqYW0gaW4gdW5pdHMgb2YgbWVkaWEKIAkJCQkJCSAgICAgIGJ5dGUgdGltZS4gcmVjb21tZW5kZWQKIAkJCQkJCSAgICAgIHZhbHVlOiAweDA0ICovCiAjZGVmaW5lICBSRUdfTUFDX0FUVEVNUFRfTElNSVQgICAgICAgICAgICAgMHg2MDYwICAvKiBhdHRlbXB0IGxpbWl0IHJlZy4gIwogCQkJCQkJICAgICAgb2YgYXR0ZW1wdHMgVFggTUFDIHdpbGwKLQkJCQkJCSAgICAgIG1ha2UgdG8geG1pdCBhIGZyYW1lIAorCQkJCQkJICAgICAgbWFrZSB0byB4bWl0IGEgZnJhbWUKIAkJCQkJCSAgICAgIGJlZm9yZSBpdCByZXNldHMgaXRzCiAJCQkJCQkgICAgICBhdHRlbXB0cyBjb3VudGVyLiBhZnRlcgotCQkJCQkJICAgICAgdGhlIGxpbWl0IGhhcyBiZWVuIAorCQkJCQkJICAgICAgdGhlIGxpbWl0IGhhcyBiZWVuCiAJCQkJCQkgICAgICByZWFjaGVkLCBUWCBNQUMgbWF5IG9yCiAJCQkJCQkgICAgICBtYXkgbm90IGRyb3AgdGhlIGZyYW1lCiAJCQkJCQkgICAgICBkZXBlbmRlbnQgdXBvbiB2YWx1ZQotCQkJCQkJICAgICAgaW4gVFhfTUFDX0NGRy4gCi0JCQkJCQkgICAgICByZWNvbW1lbmRlZCAKKwkJCQkJCSAgICAgIGluIFRYX01BQ19DRkcuCisJCQkJCQkgICAgICByZWNvbW1lbmRlZAogCQkJCQkJICAgICAgdmFsdWU6IDB4MTAgKi8KICNkZWZpbmUgIFJFR19NQUNfQ1RSTF9UWVBFICAgICAgICAgICAgICAgICAweDYwNjQgIC8qIE1BQyBjb250cm9sIHR5cGUgcmVnLgotCQkJCQkJICAgICAgdHlwZSBmaWVsZCBvZiBhIE1BQyAKKwkJCQkJCSAgICAgIHR5cGUgZmllbGQgb2YgYSBNQUMKIAkJCQkJCSAgICAgIGN0cmwgZnJhbWUuIHJlY29tbWVuZGVkCiAJCQkJCQkgICAgICB2YWx1ZTogMHg4ODA4ICovCiAKIC8qIG1hYyBhZGRyZXNzIHJlZ2lzdGVyczogMCAtIDQ0LCAweDYwODAgLSAweDYxMzAsIDQgOC1iaXQgYnl0ZXMuCi0gKiByZWdpc3RlciAgICAgICAgICAgY29udGFpbnMgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbiAgCisgKiByZWdpc3RlciAgICAgICAgICAgY29udGFpbnMgICAgICAgICAgICAgICAgICAgY29tcGFyaXNvbgogICogICAgMCAgICAgICAgMTYgTVNCIG9mIHByaW1hcnkgTUFDIGFkZHIgICAgICAgIFs0NzozMl0gb2YgREEgZmllbGQKICAqICAgIDEgICAgICAgIDE2IG1pZGRsZSBiaXRzICIiICAgICAgICAgICAgICAgICBbMzE6MTZdIG9mIERBIGZpZWxkCiAgKiAgICAyICAgICAgICAxNiBMU0IgIiIgICAgICAgICAgICAgICAgICAgICAgICAgWzE1OjBdIG9mIERBIGZpZWxkCiAgKiAgICAzKnggICAgICAxNk1TQiBvZiBhbHQgTUFDIGFkZHIgMS0xNSAgICAgICAgWzQ3OjMyXSBvZiBEQSBmaWVsZAogICogICAgNCp4ICAgICAgMTYgbWlkZGxlIGJpdHMgIiIgICAgICAgICAgICAgICAgIFszMToxNl0KICAqICAgIDUqeCAgICAgIDE2IExTQiAiIiAgICAgICAgICAgICAgICAgICAgICAgICBbMTU6MF0KLSAqICAgIDQyICAgICAgIDE2IE1TQiBvZiBNQUMgQ1RSTCBhZGRyICAgICAgICAgICBbNDc6MzJdIG9mIERBLiAKKyAqICAgIDQyICAgICAgIDE2IE1TQiBvZiBNQUMgQ1RSTCBhZGRyICAgICAgICAgICBbNDc6MzJdIG9mIERBLgogICogICAgNDMgICAgICAgMTYgbWlkZGxlIGJpdHMgIiIgICAgICAgICAgICAgICAgIFszMToxNl0KICAqICAgIDQ0ICAgICAgIDE2IExTQiAiIiAgICAgICAgICAgICAgICAgICAgICAgICBbMTU6MF0KICAqICAgIE1BQyBDVFJMIGFkZHIgbXVzdCBiZSB0aGUgcmVzZXJ2ZWQgbXVsdGljYXN0IGFkZHIgZm9yIE1BQyBDVFJMIGZyYW1lcy4KQEAgLTE1ODYsMzkgKzE1ODYsMzkgQEAKICNkZWZpbmUgIFJFR19NQUNfQUREUk4oeCkgICAgICAgICAgICAgICAgICAoUkVHX01BQ19BRERSMCArICh4KSo0KQogI2RlZmluZSAgUkVHX01BQ19BRERSX0ZJTFRFUjAgICAgICAgICAgICAgIDB4NjE0QyAgLyogYWRkcmVzcyBmaWx0ZXIgMCByZWcKIAkJCQkJCSAgICAgIFs0NzozMl0gKi8KLSNkZWZpbmUgIFJFR19NQUNfQUREUl9GSUxURVIxICAgICAgICAgICAgICAweDYxNTAgIC8qIGFkZHJlc3MgZmlsdGVyIDEgcmVnIAorI2RlZmluZSAgUkVHX01BQ19BRERSX0ZJTFRFUjEgICAgICAgICAgICAgIDB4NjE1MCAgLyogYWRkcmVzcyBmaWx0ZXIgMSByZWcKIAkJCQkJCSAgICAgIFszMToxNl0gKi8KLSNkZWZpbmUgIFJFR19NQUNfQUREUl9GSUxURVIyICAgICAgICAgICAgICAweDYxNTQgIC8qIGFkZHJlc3MgZmlsdGVyIDIgcmVnIAorI2RlZmluZSAgUkVHX01BQ19BRERSX0ZJTFRFUjIgICAgICAgICAgICAgIDB4NjE1NCAgLyogYWRkcmVzcyBmaWx0ZXIgMiByZWcKIAkJCQkJCSAgICAgIFsxNTowXSAqLwogI2RlZmluZSAgUkVHX01BQ19BRERSX0ZJTFRFUjJfMV9NQVNLICAgICAgIDB4NjE1OCAgLyogYWRkcmVzcyBmaWx0ZXIgMiBhbmQgMQogCQkJCQkJICAgICAgbWFzayByZWcuIDgtYml0IHJlZwogCQkJCQkJICAgICAgY29udGFpbnMgbmliYmxlIG1hc2sgZm9yCiAJCQkJCQkgICAgICByZWcgMiBhbmQgMS4gKi8KLSNkZWZpbmUgIFJFR19NQUNfQUREUl9GSUxURVIwX01BU0sgICAgICAgICAweDYxNUMgIC8qIGFkZHJlc3MgZmlsdGVyIDAgbWFzayAKKyNkZWZpbmUgIFJFR19NQUNfQUREUl9GSUxURVIwX01BU0sgICAgICAgICAweDYxNUMgIC8qIGFkZHJlc3MgZmlsdGVyIDAgbWFzawogCQkJCQkJICAgICAgcmVnICovCiAKLS8qIGhhc2ggdGFibGUgcmVnaXN0ZXJzOiAwIC0gMTUsIDB4NjE2MCAtIDB4NjE5QywgNCA4LWJpdCBieXRlcyAKKy8qIGhhc2ggdGFibGUgcmVnaXN0ZXJzOiAwIC0gMTUsIDB4NjE2MCAtIDB4NjE5QywgNCA4LWJpdCBieXRlcwogICogMTYtYml0IHJlZ2lzdGVycyBjb250YWluIGJpdHMgb2YgdGhlIGhhc2ggdGFibGUuCi0gKiByZWcgeCAgLT4gWzE2KigxNSAtIHgpICsgMTUgOiAxNiooMTUgLSB4KV0uIAorICogcmVnIHggIC0+IFsxNiooMTUgLSB4KSArIDE1IDogMTYqKDE1IC0geCldLgogICogZS5nLiwgMTUgLT4gWzE1OjBdLCAwIC0+IFsyNTU6MjQwXQogICovCiAjZGVmaW5lICBSRUdfTUFDX0hBU0hfVEFCTEUwICAgICAgICAgICAgICAgMHg2MTYwICAvKiBoYXNoIHRhYmxlIDAgcmVnICovCiAjZGVmaW5lICBSRUdfTUFDX0hBU0hfVEFCTEVOKHgpICAgICAgICAgICAgKFJFR19NQUNfSEFTSF9UQUJMRTAgKyAoeCkqNCkKIAotLyogc3RhdGlzdGljcyByZWdpc3RlcnMuIHRoZXNlIHJlZ2lzdGVycyBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQgb24gCisvKiBzdGF0aXN0aWNzIHJlZ2lzdGVycy4gdGhlc2UgcmVnaXN0ZXJzIGdlbmVyYXRlIGFuIGludGVycnVwdCBvbgogICogb3ZlcmZsb3cuIHJlY29tbWVuZGVkIGluaXRpYWxpemF0aW9uOiAweDAwMDAuIG1vc3QgYXJlIDE2LWJpdHMgZXhjZXB0CiAgKiBmb3IgUEVBS19BVFRFTVBUUyByZWdpc3RlciB3aGljaCBpcyA4IGJpdHMuCiAgKi8KLSNkZWZpbmUgIFJFR19NQUNfQ09MTF9OT1JNQUwgICAgICAgICAgICAgICAweDYxQTAgLyogbm9ybWFsIGNvbGxpc2lvbiAKKyNkZWZpbmUgIFJFR19NQUNfQ09MTF9OT1JNQUwgICAgICAgICAgICAgICAweDYxQTAgLyogbm9ybWFsIGNvbGxpc2lvbgogCQkJCQkJICAgICBjb3VudGVyLiAqLwogI2RlZmluZSAgUkVHX01BQ19DT0xMX0ZJUlNUICAgICAgICAgICAgICAgIDB4NjFBNCAvKiBmaXJzdCBhdHRlbXB0Ci0JCQkJCQkgICAgIHN1Y2Nlc3NmdWwgY29sbGlzaW9uIAorCQkJCQkJICAgICBzdWNjZXNzZnVsIGNvbGxpc2lvbgogCQkJCQkJICAgICBjb3VudGVyICovCi0jZGVmaW5lICBSRUdfTUFDX0NPTExfRVhDRVNTICAgICAgICAgICAgICAgMHg2MUE4IC8qIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gCisjZGVmaW5lICBSRUdfTUFDX0NPTExfRVhDRVNTICAgICAgICAgICAgICAgMHg2MUE4IC8qIGV4Y2Vzc2l2ZSBjb2xsaXNpb24KIAkJCQkJCSAgICAgY291bnRlciAqLwogI2RlZmluZSAgUkVHX01BQ19DT0xMX0xBVEUgICAgICAgICAgICAgICAgIDB4NjFBQyAvKiBsYXRlIGNvbGxpc2lvbiBjb3VudGVyICovCi0jZGVmaW5lICBSRUdfTUFDX1RJTUVSX0RFRkVSICAgICAgICAgICAgICAgMHg2MUIwIC8qIGRlZmVyIHRpbWVyLiB0aW1lIGJhc2UgCi0JCQkJCQkgICAgIGlzIHRoZSBtZWRpYSBieXRlIAorI2RlZmluZSAgUkVHX01BQ19USU1FUl9ERUZFUiAgICAgICAgICAgICAgIDB4NjFCMCAvKiBkZWZlciB0aW1lci4gdGltZSBiYXNlCisJCQkJCQkgICAgIGlzIHRoZSBtZWRpYSBieXRlCiAJCQkJCQkgICAgIGNsb2NrLzI1NiAqLwogI2RlZmluZSAgUkVHX01BQ19BVFRFTVBUU19QRUFLICAgICAgICAgICAgIDB4NjFCNCAvKiBwZWFrIGF0dGVtcHRzIHJlZyAqLwogI2RlZmluZSAgUkVHX01BQ19SRUNWX0ZSQU1FICAgICAgICAgICAgICAgIDB4NjFCOCAvKiByZWNlaXZlIGZyYW1lIGNvdW50ZXIgKi8KQEAgLTE2MzMsMTMgKzE2MzMsMTMgQEAKIAkJCQkJCSAgIDEwLWJpdCByZWdpc3RlciB1c2VkIGFzIGEKIAkJCQkJCSAgIHNlZWQgIGZvciB0aGUgcmFuZG9tIG51bWJlcgogCQkJCQkJICAgZ2VuZXJhdG9yIGZvciB0aGUgQ1NNQS9DRAotCQkJCQkJICAgYmFja29mZiBhbGdvcml0aG0uIG9ubHkgCisJCQkJCQkgICBiYWNrb2ZmIGFsZ29yaXRobS4gb25seQogCQkJCQkJICAgcHJvZ3JhbW1lZCBhZnRlciBwb3dlci1vbgotCQkJCQkJICAgcmVzZXQgYW5kIHNob3VsZCBiZSBhIAotCQkJCQkJICAgcmFuZG9tIHZhbHVlIHdoaWNoIGhhcyBhIAotCQkJCQkJICAgaGlnaCBsaWtlbGlob29kIG9mIGJlaW5nIAotCQkJCQkJICAgdW5pcXVlIGZvciBlYWNoIE1BQyAKLQkJCQkJCSAgIGF0dGFjaGVkIHRvIGEgbmV0d29yayAKKwkJCQkJCSAgIHJlc2V0IGFuZCBzaG91bGQgYmUgYQorCQkJCQkJICAgcmFuZG9tIHZhbHVlIHdoaWNoIGhhcyBhCisJCQkJCQkgICBoaWdoIGxpa2VsaWhvb2Qgb2YgYmVpbmcKKwkJCQkJCSAgIHVuaXF1ZSBmb3IgZWFjaCBNQUMKKwkJCQkJCSAgIGF0dGFjaGVkIHRvIGEgbmV0d29yawogCQkJCQkJICAgc2VnbWVudCAoZS5nLiwgMTAgTFNCIG9mCiAJCQkJCQkgICBNQUMgYWRkcmVzcykgKi8KIApAQCAtMTY0OSw3ICsxNjQ5LDcgQEAKIAogLyogMjctYml0IHJlZ2lzdGVyIGhhcyB0aGUgY3VycmVudCBzdGF0ZSBmb3Iga2V5IHN0YXRlIG1hY2hpbmVzIGluIHRoZSBNQUMgKi8KICNkZWZpbmUgIFJFR19NQUNfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAweDYxRDAgLyogKHJvKSBzdGF0ZSBtYWNoaW5lIHJlZyAqLwotI2RlZmluZSAgICBNQUNfU01fUkxNX01BU0sgICAgICAgICAgICAgICAgIDB4MDc4MDAwMDAgCisjZGVmaW5lICAgIE1BQ19TTV9STE1fTUFTSyAgICAgICAgICAgICAgICAgMHgwNzgwMDAwMAogI2RlZmluZSAgICBNQUNfU01fUkxNX1NISUZUICAgICAgICAgICAgICAgIDIzCiAjZGVmaW5lICAgIE1BQ19TTV9SWF9GQ19NQVNLICAgICAgICAgICAgICAgMHgwMDcwMDAwMAogI2RlZmluZSAgICBNQUNfU01fUlhfRkNfU0hJRlQgICAgICAgICAgICAgIDIwCkBAIC0xNjY2LDI2ICsxNjY2LDI2IEBACiAjZGVmaW5lICAgIE1BQ19TTV9UWF9GSUZPX0VNUFRZX01BU0sgICAgICAgMHgwMDAwMDAwNwogI2RlZmluZSAgICBNQUNfU01fVFhfRklGT19FTVBUWV9TSElGVCAgICAgIDAKIAotLyoqIE1JRiByZWdpc3RlcnMuIHRoZSBNSUYgY2FuIGJlIHByb2dyYW1tZWQgaW4gZWl0aGVyIGJpdC1iYW5nIG9yIAorLyoqIE1JRiByZWdpc3RlcnMuIHRoZSBNSUYgY2FuIGJlIHByb2dyYW1tZWQgaW4gZWl0aGVyIGJpdC1iYW5nIG9yCiAgKiAgZnJhbWUgbW9kZS4KICAqKi8KICNkZWZpbmUgIFJFR19NSUZfQklUX0JBTkdfQ0xPQ0sgICAgICAgICAgICAweDYyMDAgLyogTUlGIGJpdC1iYW5nIGNsb2NrLgotCQkJCQkJICAgMSAtPiAwIHdpbGwgZ2VuZXJhdGUgYSAKKwkJCQkJCSAgIDEgLT4gMCB3aWxsIGdlbmVyYXRlIGEKIAkJCQkJCSAgIHJpc2luZyBlZGdlLiAwIC0+IDEgd2lsbAogCQkJCQkJICAgZ2VuZXJhdGUgYSBmYWxsaW5nIGVkZ2UuICovCiAjZGVmaW5lICBSRUdfTUlGX0JJVF9CQU5HX0RBVEEgICAgICAgICAgICAgMHg2MjA0IC8qIE1JRiBiaXQtYmFuZyBkYXRhLiAxLWJpdAogCQkJCQkJICAgICByZWdpc3RlciBnZW5lcmF0ZXMgZGF0YSAqLwotI2RlZmluZSAgUkVHX01JRl9CSVRfQkFOR19PVVRQVVRfRU4gICAgICAgIDB4NjIwOCAvKiBNSUYgYml0LWJhbmcgb3V0cHV0IAotCQkJCQkJICAgICBlbmFibGUuIGVuYWJsZSB3aGVuIAorI2RlZmluZSAgUkVHX01JRl9CSVRfQkFOR19PVVRQVVRfRU4gICAgICAgIDB4NjIwOCAvKiBNSUYgYml0LWJhbmcgb3V0cHV0CisJCQkJCQkgICAgIGVuYWJsZS4gZW5hYmxlIHdoZW4KIAkJCQkJCSAgICAgeG1pdHRpbmcgZGF0YSBmcm9tIE1JRiB0bwogCQkJCQkJICAgICB0cmFuc2NlaXZlci4gKi8KIAotLyogMzItYml0IHJlZ2lzdGVyIHNlcnZlcyBhcyBhbiBpbnN0cnVjdGlvbiByZWdpc3RlciB3aGVuIHRoZSBNSUYgaXMgCisvKiAzMi1iaXQgcmVnaXN0ZXIgc2VydmVzIGFzIGFuIGluc3RydWN0aW9uIHJlZ2lzdGVyIHdoZW4gdGhlIE1JRiBpcwogICogcHJvZ3JhbW1lZCBpbiBmcmFtZSBtb2RlLiBsb2FkIHRoaXMgcmVnaXN0ZXIgdy8gYSB2YWxpZCBpbnN0cnVjdGlvbgogICogKGFzIHBlciBJRUVFIDgwMi4zdSBNSUkgc3BlYykuIHBvbGwgdGhpcyByZWdpc3RlciB0byBjaGVjayBmb3IgaW5zdHJ1Y3Rpb24KICAqIGV4ZWN1dGlvbiBjb21wbGV0aW9uLiBkdXJpbmcgYSByZWFkIG9wZXJhdGlvbiwgdGhpcyByZWdpc3RlciB3aWxsIGFsc28KLSAqIGNvbnRhaW4gdGhlIDE2LWJpdCBkYXRhIHJldHVybmVkIGJ5IHRoZSB0cmFuY2VpdmVyLiB1bmxlc3Mgc3BlY2lmaWVkIAotICogb3RoZXJ3aXNlLCBmaWVsZHMgYXJlIGNvbnNpZGVyZWQgImRvbid0IGNhcmUiIHdoZW4gcG9sbGluZyBmb3IgCisgKiBjb250YWluIHRoZSAxNi1iaXQgZGF0YSByZXR1cm5lZCBieSB0aGUgdHJhbmNlaXZlci4gdW5sZXNzIHNwZWNpZmllZAorICogb3RoZXJ3aXNlLCBmaWVsZHMgYXJlIGNvbnNpZGVyZWQgImRvbid0IGNhcmUiIHdoZW4gcG9sbGluZyBmb3IKICAqIGNvbXBsZXRpb24uCiAgKi8KICNkZWZpbmUgIFJFR19NSUZfRlJBTUUgICAgICAgICAgICAgICAgICAgICAweDYyMEMgLyogTUlGIGZyYW1lL291dHB1dCByZWcgKi8KQEAgLTE2OTMsMTQgKzE2OTMsMTQgQEAKIAkJCQkJCQkgbG9hZCB3LyAwMSB3aGVuCiAJCQkJCQkJIGlzc3VpbmcgYW4gaW5zdHIgKi8KICNkZWZpbmUgICAgTUlGX0ZSQU1FX1NUICAgICAgICAgICAgICAgICAgICAweDQwMDAwMDAwIC8qIFNUYXJ0IG9mIGZyYW1lICovCi0jZGVmaW5lICAgIE1JRl9GUkFNRV9PUENPREVfTUFTSyAgICAgICAgICAgMHgzMDAwMDAwMCAvKiBvcGNvZGUuIDAxIGZvciBhIAotCQkJCQkJCSB3cml0ZS4gMTAgZm9yIGEgCisjZGVmaW5lICAgIE1JRl9GUkFNRV9PUENPREVfTUFTSyAgICAgICAgICAgMHgzMDAwMDAwMCAvKiBvcGNvZGUuIDAxIGZvciBhCisJCQkJCQkJIHdyaXRlLiAxMCBmb3IgYQogCQkJCQkJCSByZWFkICovCiAjZGVmaW5lICAgIE1JRl9GUkFNRV9PUF9SRUFEICAgICAgICAgICAgICAgMHgyMDAwMDAwMCAvKiByZWFkIE9QY29kZSAqLwogI2RlZmluZSAgICBNSUZfRlJBTUVfT1BfV1JJVEUgICAgICAgICAgICAgIDB4MTAwMDAwMDAgLyogd3JpdGUgT1Bjb2RlICovCiAjZGVmaW5lICAgIE1JRl9GUkFNRV9QSFlfQUREUl9NQVNLICAgICAgICAgMHgwRjgwMDAwMCAvKiBwaHkgYWRkcmVzcy4gd2hlbgogCQkJCQkJCSBpc3N1aW5nIGFuIGluc3RyLAotCQkJCQkJCSB0aGlzIGZpZWxkIHNob3VsZCBiZSAKKwkJCQkJCQkgdGhpcyBmaWVsZCBzaG91bGQgYmUKIAkJCQkJCQkgbG9hZGVkIHcvIHRoZSBYQ1ZSCiAJCQkJCQkJIGFkZHIgKi8KICNkZWZpbmUgICAgTUlGX0ZSQU1FX1BIWV9BRERSX1NISUZUICAgICAgICAyMwpAQCAtMTcyNCwxMiArMTcyNCwxMiBAQAogCQkJCQkJCSB0byBiZSB3cml0dGVuIGluCiAJCQkJCQkJIHRyYW5zY2VpdmVyIHJlZyBmb3IgYQogCQkJCQkJCSB3cml0ZS4gZG9lc24ndCBtYXR0ZXIKLQkJCQkJCQkgaW4gYSByZWFkLiB3aGVuIAotCQkJCQkJCSBwb2xsaW5nIGZvciAKKwkJCQkJCQkgaW4gYSByZWFkLiB3aGVuCisJCQkJCQkJIHBvbGxpbmcgZm9yCiAJCQkJCQkJIGNvbXBsZXRpb24sIGZpZWxkIGlzCiAJCQkJCQkJICJkb24ndCBjYXJlIiBmb3Igd3JpdGUKLQkJCQkJCQkgYW5kIDE2LWJpdCBkYXRhIAotCQkJCQkJCSByZXR1cm5lZCBieSB0aGUgCisJCQkJCQkJIGFuZCAxNi1iaXQgZGF0YQorCQkJCQkJCSByZXR1cm5lZCBieSB0aGUKIAkJCQkJCQkgdHJhbnNjZWl2ZXIgZm9yIGEKIAkJCQkJCQkgcmVhZCAoaWYgdmFsaWQgYml0CiAJCQkJCQkJIGlzIHNldCkgKi8KQEAgLTE3NDgsMTYgKzE3NDgsMTYgQEAKICNkZWZpbmUgICAgTUlGX0NGR19QT0xMX1JFR19TSElGVCAgICAgICAzCiAjZGVmaW5lICAgIE1JRl9DRkdfTURJT18wICAgICAgICAgICAgICAgMHgwMTAwIC8qIChybykgZHVhbCBwdXJwb3NlLgogCQkJCQkJICB3aGVuIE1ESU9fMCBpcyBpZGxlLAotCQkJCQkJICAxIC0+IHRyYW5jZWl2ZXIgaXMgCisJCQkJCQkgIDEgLT4gdHJhbmNlaXZlciBpcwogCQkJCQkJICBjb25uZWN0ZWQgdG8gTURJT18wLgogCQkJCQkJICB3aGVuIE1JRiBpcyBjb21tdW5pY2F0aW5nCi0JCQkJCQkgIHcvIE1ESU9fMCBpbiBiaXQtYmFuZyAKKwkJCQkJCSAgdy8gTURJT18wIGluIGJpdC1iYW5nCiAJCQkJCQkgIG1vZGUsIHRoaXMgYml0IGluZGljYXRlcwogCQkJCQkJICB0aGUgaW5jb21pbmcgYml0IHN0cmVhbQogCQkJCQkJICBkdXJpbmcgYSByZWFkIG9wICovCiAjZGVmaW5lICAgIE1JRl9DRkdfTURJT18xICAgICAgICAgICAgICAgMHgwMjAwIC8qIChybykgZHVhbCBwdXJwb3NlLgotCQkJCQkJICB3aGVuIE1ESU9fMSBpcyBpZGxlLCAKLQkJCQkJCSAgMSAtPiB0cmFuc2NlaXZlciBpcyAKKwkJCQkJCSAgd2hlbiBNRElPXzEgaXMgaWRsZSwKKwkJCQkJCSAgMSAtPiB0cmFuc2NlaXZlciBpcwogCQkJCQkJICBjb25uZWN0ZWQgdG8gTURJT18xLgogCQkJCQkJICB3aGVuIE1JRiBpcyBjb21tdW5pY2F0aW5nCiAJCQkJCQkgIHcvIE1ESU9fMSBpbiBiaXQtYmFuZwpAQCAtMTc3MCw3ICsxNzcwLDcgQEAKIAogLyogMTYtYml0IHJlZ2lzdGVyIHVzZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJpdHMgaW4gdGhlIFBPTExfU1RBVFVTIHBvcnRpb24gb2YKICAqIHRoZSBNSUZfU1RBVFVTIHJlZ2lzdGVyIHdpbGwgY2F1c2UgYW4gaW50ZXJydXB0LiBpZiBhIG1hc2sgYml0IGlzIDAsCi0gKiBjb3JyZXNwb25kaW5nIGJpdCBvZiB0aGUgUE9MTF9TVEFUVVMgd2lsbCBnZW5lcmF0ZSBhIE1JRiBpbnRlcnJ1cHQgd2hlbiAKKyAqIGNvcnJlc3BvbmRpbmcgYml0IG9mIHRoZSBQT0xMX1NUQVRVUyB3aWxsIGdlbmVyYXRlIGEgTUlGIGludGVycnVwdCB3aGVuCiAgKiBzZXQuIERFRkFVTFQ6IDB4RkZGRgogICovCiAjZGVmaW5lICBSRUdfTUlGX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg2MjE0IC8qIE1JRiBtYXNrIHJlZyAqLwpAQCAtMTc3OSw3ICsxNzc5LDcgQEAKICNkZWZpbmUgIFJFR19NSUZfU1RBVFVTICAgICAgICAgICAgICAgICAgICAweDYyMTggLyogTUlGIHN0YXR1cyByZWcgKi8KICNkZWZpbmUgICAgTUlGX1NUQVRVU19QT0xMX0RBVEFfTUFTSyAgICAgICAweEZGRkYwMDAwIC8qIHBvbGwgZGF0YSBjb250YWlucwogCQkJCQkJCSB0aGUgImxhdGVzdCBpbWFnZSIKLQkJCQkJCQkgdXBkYXRlIG9mIHRoZSBYQ1ZSIAorCQkJCQkJCSB1cGRhdGUgb2YgdGhlIFhDVlIKIAkJCQkJCQkgcmVnIGJlaW5nIHJlYWQgKi8KICNkZWZpbmUgICAgTUlGX1NUQVRVU19QT0xMX0RBVEFfU0hJRlQgICAgICAxNgogI2RlZmluZSAgICBNSUZfU1RBVFVTX1BPTExfU1RBVFVTX01BU0sgICAgIDB4MDAwMEZGRkYgLyogcG9sbCBzdGF0dXMgaW5kaWNhdGVzCkBAIC0xNzkyLDE5ICsxNzkyLDE5IEBACiAKIC8qIDctYml0IHJlZ2lzdGVyIGhhcyBjdXJyZW50IHN0YXRlIGZvciBhbGwgc3RhdGUgbWFjaGluZXMgaW4gdGhlIE1JRiAqLwogI2RlZmluZSAgUkVHX01JRl9TVEFURV9NQUNISU5FICAgICAgICAgICAgIDB4NjIxQyAvKiBNSUYgc3RhdGUgbWFjaGluZSByZWcgKi8KLSNkZWZpbmUgICAgTUlGX1NNX0NPTlRST0xfTUFTSyAgICAgICAgICAgICAweDA3ICAgLyogY29udHJvbCBzdGF0ZSBtYWNoaW5lIAorI2RlZmluZSAgICBNSUZfU01fQ09OVFJPTF9NQVNLICAgICAgICAgICAgIDB4MDcgICAvKiBjb250cm9sIHN0YXRlIG1hY2hpbmUKIAkJCQkJCSAgICAgc3RhdGUgKi8KICNkZWZpbmUgICAgTUlGX1NNX0VYRUNVVElPTl9NQVNLICAgICAgICAgICAweDYwICAgLyogZXhlY3V0aW9uIHN0YXRlIG1hY2hpbmUKIAkJCQkJCSAgICAgc3RhdGUgKi8KIAogLyoqIFBDUy9TZXJpYWxpbmsuIHRoZSBmb2xsb3dpbmcgcmVnaXN0ZXJzIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBzdGFuZGFyZAotICogIE1JSSBtYW5hZ2VtZW50IHJlZ2lzdGVycyBleGNlcHQgdGhhdCB0aGV5J3JlIGRpcmVjdGx5IG1hcHBlZCBpbiAKKyAqICBNSUkgbWFuYWdlbWVudCByZWdpc3RlcnMgZXhjZXB0IHRoYXQgdGhleSdyZSBkaXJlY3RseSBtYXBwZWQgaW4KICAqICBDYXNzaW5pJ3MgcmVnaXN0ZXIgc3BhY2UuCiAgKiovCiAKIC8qIHRoZSBhdXRvLW5lZ290aWF0aW9uIGVuYWJsZSBiaXQgc2hvdWxkIGJlIHByb2dyYW1tZWQgdGhlIHNhbWUgYXQKICAqIHRoZSBsaW5rIHBhcnRuZXIgYXMgaW4gdGhlIGxvY2FsIGRldmljZSB0byBlbmFibGUgYXV0by1uZWdvdGlhdGlvbiB0bwotICogY29tcGxldGUuIHdoZW4gdGhhdCBiaXQgaXMgcmVwcm9ncmFtbWVkLCBhdXRvLW5lZy9tYW51YWwgY29uZmlnIGlzIAorICogY29tcGxldGUuIHdoZW4gdGhhdCBiaXQgaXMgcmVwcm9ncmFtbWVkLCBhdXRvLW5lZy9tYW51YWwgY29uZmlnIGlzCiAgKiByZXN0YXJ0ZWQgYXV0b21hdGljYWxseS4KICAqIERFRkFVTFQ6IDB4MTA0MAogICovCkBAIC0xODE1LDEwICsxODE1LDEwIEBACiAJCQkJCQkgICAgIHRvIE1BQyBpbnRlcmZhY2UgaXMKIAkJCQkJCSAgICAgYWN0aXZhdGVkIHJlZ2FyZGxlc3MKIAkJCQkJCSAgICAgb2YgYWN0aXZpdHkgKi8KLSNkZWZpbmUgICAgUENTX01JSV9DVFJMX0RVUExFWCAgICAgICAgICAgICAweDAxMDAgLyogZm9yY2VkIDB4MC4gUENTIAorI2RlZmluZSAgICBQQ1NfTUlJX0NUUkxfRFVQTEVYICAgICAgICAgICAgIDB4MDEwMCAvKiBmb3JjZWQgMHgwLiBQQ1MKIAkJCQkJCSAgICAgYmVoYXZpb3VyIHNhbWUgZm9yCiAJCQkJCQkgICAgIGhhbGYgYW5kIGZ1bGwgZHBseCAqLwotI2RlZmluZSAgICBQQ1NfTUlJX1JFU1RBUlRfQVVUT05FRyAgICAgICAgIDB4MDIwMCAvKiBzZWxmIGNsZWFyaW5nLiAKKyNkZWZpbmUgICAgUENTX01JSV9SRVNUQVJUX0FVVE9ORUcgICAgICAgICAweDAyMDAgLyogc2VsZiBjbGVhcmluZy4KIAkJCQkJCSAgICAgcmVzdGFydCBhdXRvLQogCQkJCQkJICAgICBuZWdvdGlhdGlvbiAqLwogI2RlZmluZSAgICBQQ1NfTUlJX0lTT0xBVEUgICAgICAgICAgICAgICAgIDB4MDQwMCAvKiByZWFkIGFzIDAuIGlnbm9yZWQKQEAgLTE4MjksMTAgKzE4MjksMTAgQEAKIAkJCQkJCSAgICAgdGhyb3VnaCBhdXRvbWF0aWMKIAkJCQkJCSAgICAgbGluayBjb25maWcgYmVmb3JlIGl0CiAJCQkJCQkgICAgIGNhbiBiZSB1c2VkLiB3aGVuIDAsCi0JCQkJCQkgICAgIGxpbmsgY2FuIGJlIHVzZWQgCisJCQkJCQkgICAgIGxpbmsgY2FuIGJlIHVzZWQKIAkJCQkJCSAgICAgdy9vdXQgYW55IGxpbmsgY29uZmlnCiAJCQkJCQkgICAgIHBoYXNlICovCi0jZGVmaW5lICAgIFBDU19NSUlfMTBfMTAwX1NFTCAgICAgICAgICAgICAgMHgyMDAwIC8qIHJlYWQgYXMgMC4gaWdub3JlZCBvbiAKKyNkZWZpbmUgICAgUENTX01JSV8xMF8xMDBfU0VMICAgICAgICAgICAgICAweDIwMDAgLyogcmVhZCBhcyAwLiBpZ25vcmVkIG9uCiAJCQkJCQkgICAgIHdyaXRlcyAqLwogI2RlZmluZSAgICBQQ1NfTUlJX1JFU0VUICAgICAgICAgICAgICAgICAgIDB4ODAwMCAvKiByZXNldCBQQ1MuIHNlbGYtY2xlYXJzCiAJCQkJCQkgICAgIHdoZW4gZG9uZSAqLwpAQCAtMTg0MSw3ICsxODQxLDcgQEAKICNkZWZpbmUgIFJFR19QQ1NfTUlJX1NUQVRVUyAgICAgICAgICAgICAgICAweDkwMDQgLyogUENTIE1JSSBzdGF0dXMgcmVnICovCiAjZGVmaW5lICAgIFBDU19NSUlfU1RBVFVTX0VYVEVORF9DQVAgICAgICAgMHgwMDAxIC8qIHJlYWRzIDAgKi8KICNkZWZpbmUgICAgUENTX01JSV9TVEFUVVNfSkFCQkVSX0RFVEVDVCAgICAweDAwMDIgLyogcmVhZHMgMCAqLwotI2RlZmluZSAgICBQQ1NfTUlJX1NUQVRVU19MSU5LX1NUQVRVUyAgICAgIDB4MDAwNCAvKiAxIC0+IGxpbmsgdXAuIAorI2RlZmluZSAgICBQQ1NfTUlJX1NUQVRVU19MSU5LX1NUQVRVUyAgICAgIDB4MDAwNCAvKiAxIC0+IGxpbmsgdXAuCiAJCQkJCQkgICAgIDAgLT4gbGluayBkb3duLiAwIGlzCiAJCQkJCQkgICAgIGxhdGNoZWQgc28gdGhhdCAwIGlzCiAJCQkJCQkgICAgIGtlcHQgdW50aWwgcmVhZC4gcmVhZApAQCAtMTg1Myw3ICsxODUzLDcgQEAKIAkJCQkJCSAgICAgZnJvbSByZWNlaXZlZCBsaW5rIGNvZGUKIAkJCQkJCSAgICAgd29yZC4gb25seSB2YWxpZCBhZnRlcgogCQkJCQkJICAgICBhdXRvLW5lZyBjb21wbGV0ZWQgKi8KLSNkZWZpbmUgICAgUENTX01JSV9TVEFUVVNfQVVUT05FR19DT01QICAgICAweDAwMjAgLyogMSAtPiBhdXRvLW5lZ290aWF0aW9uIAorI2RlZmluZSAgICBQQ1NfTUlJX1NUQVRVU19BVVRPTkVHX0NPTVAgICAgIDB4MDAyMCAvKiAxIC0+IGF1dG8tbmVnb3RpYXRpb24KIAkJCQkJCSAgICAgICAgICBjb21wbGV0ZWQKIAkJCQkJCSAgICAgMCAtPiBhdXRvLW5lZ290aWF0aW9uIG5vdAogCQkJCQkJICAgICBjb21wbGV0ZWQgKi8KQEAgLTE4NjIsNyArMTg2Miw3IEBACiAJCQkJCQkgICAgIGEgMTAwMCBCYXNlLVggUEhZLiB3cml0ZXMKIAkJCQkJCSAgICAgdG8gaXQgYXJlIGlnbm9yZWQgKi8KIAotLyogdXNlZCBkdXJpbmcgYXV0by1uZWdvdGlhdGlvbi4gCisvKiB1c2VkIGR1cmluZyBhdXRvLW5lZ290aWF0aW9uLgogICogREVGQVVMVDogMHgwMEUwCiAgKi8KICNkZWZpbmUgIFJFR19QQ1NfTUlJX0FEVkVSVCAgICAgICAgICAgICAgICAweDkwMDggLyogUENTIE1JSSBhZHZlcnRpc2VtZW50CkBAIC0xODczLDcgKzE4NzMsNyBAQAogCQkJCQkJICAgICAgMTAwMCBCYXNlLVggKi8KICNkZWZpbmUgICAgUENTX01JSV9BRFZFUlRfU1lNX1BBVVNFICAgICAgICAweDAwODAgIC8qIGFkdmVydGlzZSBQQVVTRQogCQkJCQkJICAgICAgc3ltbWV0cmljIGNhcGFiaWxpdHkgKi8KLSNkZWZpbmUgICAgUENTX01JSV9BRFZFUlRfQVNZTV9QQVVTRSAgICAgICAweDAxMDAgIC8qIGFkdmVydGlzZXMgUEFVU0UgCisjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX0FTWU1fUEFVU0UgICAgICAgMHgwMTAwICAvKiBhZHZlcnRpc2VzIFBBVVNFCiAJCQkJCQkgICAgICBhc3ltbWV0cmljIGNhcGFiaWxpdHkgKi8KICNkZWZpbmUgICAgUENTX01JSV9BRFZFUlRfUkZfTUFTSyAgICAgICAgICAweDMwMDAgLyogcmVtb3RlIGZhdWx0LiB3cml0ZSBiaXQxMwogCQkJCQkJICAgICB0byBvcHRpb25hbGx5IGluZGljYXRlIHRvCkBAIC0xODgxLDcgKzE4ODEsNyBAQAogCQkJCQkJICAgICBnb2luZyBvZmYtbGluZS4gYml0MTIgd2lsbAogCQkJCQkJICAgICBnZXQgc2V0IHdoZW4gc2lnbmFsCiAJCQkJCQkgICAgIGRldGVjdCA9PSBGQUlMIGFuZCB3aWxsCi0JCQkJCQkgICAgIHJlbWFpbiBzZXQgdW50aWwgCisJCQkJCQkgICAgIHJlbWFpbiBzZXQgdW50aWwKIAkJCQkJCSAgICAgc3VjY2Vzc2Z1bCBuZWdvdGlhdGlvbiAqLwogI2RlZmluZSAgICBQQ1NfTUlJX0FEVkVSVF9BQ0sgICAgICAgICAgICAgIDB4NDAwMCAvKiAocm8pICovCiAjZGVmaW5lICAgIFBDU19NSUlfQURWRVJUX05FWFRfUEFHRSAgICAgICAgMHg4MDAwIC8qIChybykgZm9yY2VkIDB4MCAqLwpAQCAtMTkwNSw3ICsxOTA1LDcgQEAKIAkJCQkJCSAgICAgMCB3aGVuIG1vZGlmeWluZwogCQkJCQkJICAgICBQQ1NfTUlJX0FEVkVSVCAqLwogI2RlZmluZSAgICBQQ1NfQ0ZHX1NEX09WRVJSSURFICAgICAgICAgICAgIDB4MDIgICAvKiBzZXRzIHNpZ25hbCBkZXRlY3QgdG8KLQkJCQkJCSAgICAgT0suIGJpdCBpcyAKKwkJCQkJCSAgICAgT0suIGJpdCBpcwogCQkJCQkJICAgICBub24tcmVzZXR0YWJsZSAqLwogI2RlZmluZSAgICBQQ1NfQ0ZHX1NEX0FDVElWRV9MT1cgICAgICAgICAgIDB4MDQgICAvKiBjaGFuZ2VzIGludGVycHJldGF0aW9uCiAJCQkJCQkgICAgIG9mIG9wdGljYWwgc2lnbmFsIHRvIG1ha2UKQEAgLTE5MTQsMjMgKzE5MTQsMjMgQEAKICNkZWZpbmUgICAgUENTX0NGR19KSVRURVJfU1RVRFlfTUFTSyAgICAgICAweDE4ICAgLyogdXNlZCB0byBtYWtlIGppdHRlcgogCQkJCQkJICAgICBtZWFzdXJlbWVudHMuIGEgc2luZ2xlCiAJCQkJCQkgICAgIGNvZGUgZ3JvdXAgaXMgeG1pdHRlZAotCQkJCQkJICAgICByZWd1bGFybHkuIAorCQkJCQkJICAgICByZWd1bGFybHkuCiAJCQkJCQkgICAgIDB4MCA9IG5vcm1hbCBvcGVyYXRpb24KLQkJCQkJCSAgICAgMHgxID0gaGlnaCBmcmVxIHRlc3QgCisJCQkJCQkgICAgIDB4MSA9IGhpZ2ggZnJlcSB0ZXN0CiAJCQkJCQkgICAgICAgICAgIHBhdHRlcm4sIEQyMS41CiAJCQkJCQkgICAgIDB4MiA9IGxvdyBmcmVxIHRlc3QKIAkJCQkJCSAgICAgICAgICAgcGF0dGVybiwgSzI4LjcKIAkJCQkJCSAgICAgMHgzID0gcmVzZXJ2ZWQgKi8KICNkZWZpbmUgICAgUENTX0NGR18xME1TX1RJTUVSX09WRVJSSURFICAgICAweDIwICAgLyogc2hvcnRlbnMgMTAtMjBtcyBhdXRvLQotCQkJCQkJICAgICBuZWdvdGlhdGlvbiB0aW1lciB0byAKKwkJCQkJCSAgICAgbmVnb3RpYXRpb24gdGltZXIgdG8KIAkJCQkJCSAgICAgYSBmZXcgY3ljbGVzIGZvciB0ZXN0CiAJCQkJCQkgICAgIHB1cnBvc2VzICovCiAKIC8qIHVzZWQgZm9yIGRpYWdub3N0aWMgcHVycG9zZXMuIGJpdHMgMjAtMjIgYXV0b2NsZWFyIG9uIHJlYWQgKi8KLSNkZWZpbmUgIFJFR19QQ1NfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAweDkwMTQgLyogKHJvKSBQQ1Mgc3RhdGUgbWFjaGluZSAKKyNkZWZpbmUgIFJFR19QQ1NfU1RBVEVfTUFDSElORSAgICAgICAgICAgICAweDkwMTQgLyogKHJvKSBQQ1Mgc3RhdGUgbWFjaGluZQogCQkJCQkJICAgICBhbmQgZGlhZ25vc3RpYyByZWcgKi8KLSNkZWZpbmUgICAgUENTX1NNX1RYX1NUQVRFX01BU0sgICAgICAgICAgICAweDAwMDAwMDBGIC8qIDAgYW5kIDEgaW5kaWNhdGUgCi0JCQkJCQkJIHhtaXNzaW9uIG9mIGlkbGUuIAorI2RlZmluZSAgICBQQ1NfU01fVFhfU1RBVEVfTUFTSyAgICAgICAgICAgIDB4MDAwMDAwMEYgLyogMCBhbmQgMSBpbmRpY2F0ZQorCQkJCQkJCSB4bWlzc2lvbiBvZiBpZGxlLgogCQkJCQkJCSBvdGhlcndpc2UsIHhtaXNzaW9uIG9mCiAJCQkJCQkJIGEgcGFja2V0ICovCiAjZGVmaW5lICAgIFBDU19TTV9SWF9TVEFURV9NQVNLICAgICAgICAgICAgMHgwMDAwMDBGMCAvKiAwIGluZGljYXRlcyByZWNlcHRpb24KQEAgLTE5NDMsMzkgKzE5NDMsMzkgQEAKIAkJCQkJCQkgQ29uZmlnIGNvZGVzLiBjeWNsaW5nCiAJCQkJCQkJIHRocm91Z2ggMC0xIGluZGljYXRlcwogCQkJCQkJCSByZWNlcHRpb24gb2YgaWRsZXMgKi8KLSNkZWZpbmUgICAgUENTX1NNX0xJTktfU1RBVEVfTUFTSyAgICAgICAgICAweDAwMDFFMDAwIAorI2RlZmluZSAgICBQQ1NfU01fTElOS19TVEFURV9NQVNLICAgICAgICAgIDB4MDAwMUUwMDAKICNkZWZpbmUgICAgICAgIFNNX0xJTktfU1RBVEVfVVAgICAgICAgICAgICAweDAwMDE2MDAwIC8qIGxpbmsgc3RhdGUgaXMgdXAgKi8KIAogI2RlZmluZSAgICBQQ1NfU01fTE9TU19MSU5LX0MgICAgICAgICAgICAgIDB4MDAxMDAwMDAgLyogbG9zcyBvZiBsaW5rIGR1ZSB0bwotCQkJCQkJCSByZWNlcHQgb2YgQ29uZmlnIAorCQkJCQkJCSByZWNlcHQgb2YgQ29uZmlnCiAJCQkJCQkJIGNvZGVzICovCiAjZGVmaW5lICAgIFBDU19TTV9MT1NTX0xJTktfU1lOQyAgICAgICAgICAgMHgwMDIwMDAwMCAvKiBsb3NzIG9mIGxpbmsgZHVlIHRvCiAJCQkJCQkJIGxvc3Mgb2Ygc3luYyAqLwotI2RlZmluZSAgICBQQ1NfU01fTE9TU19TSUdOQUxfREVURUNUICAgICAgIDB4MDA0MDAwMDAgLyogc2lnbmFsIGRldGVjdCBnb2VzIAorI2RlZmluZSAgICBQQ1NfU01fTE9TU19TSUdOQUxfREVURUNUICAgICAgIDB4MDA0MDAwMDAgLyogc2lnbmFsIGRldGVjdCBnb2VzCiAJCQkJCQkJIGZyb20gT0sgdG8gRkFJTC4gYml0MjkKLQkJCQkJCQkgd2lsbCBhbHNvIGJlIHNldCBpZiAKKwkJCQkJCQkgd2lsbCBhbHNvIGJlIHNldCBpZgogCQkJCQkJCSB0aGlzIGlzIHNldCAqLwogI2RlZmluZSAgICBQQ1NfU01fTk9fTElOS19CUkVBS0xJTksgICAgICAgIDB4MDEwMDAwMDAgLyogbGluayBub3QgdXAgZHVlIHRvCiAJCQkJCQkJcmVjZWlwdCBvZiBicmVha2xpbmsKIAkJCQkJCQlDIGNvZGVzIGZyb20gcGFydG5lci4KIAkJCQkJCQlDIGNvZGVzIHcvIDAgY29udGVudAogCQkJCQkJCXJlY2VpdmVkIHRyaWdnZXJpbmcKLQkJCQkJCQlzdGFydC9yZXN0YXJ0IG9mIAotCQkJCQkJCWF1dG9uZWdvdGlhdGlvbi4gCisJCQkJCQkJc3RhcnQvcmVzdGFydCBvZgorCQkJCQkJCWF1dG9uZWdvdGlhdGlvbi4KIAkJCQkJCQlzaG91bGQgYmUgc2VudCBmb3IKIAkJCQkJCQlubyBsb25nZXIgdGhhbiAyMG1zICovCi0jZGVmaW5lICAgIFBDU19TTV9OT19MSU5LX1NFUkRFUyAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBzZXJkZXMgYmVpbmcgCisjZGVmaW5lICAgIFBDU19TTV9OT19MSU5LX1NFUkRFUyAgICAgICAgICAgMHgwMjAwMDAwMCAvKiBzZXJkZXMgYmVpbmcKIAkJCQkJCQlpbml0aWFsaXplZC4gc2VlIHNlcmRlcwogCQkJCQkJCXN0YXRlIHJlZyAqLwogI2RlZmluZSAgICBQQ1NfU01fTk9fTElOS19DICAgICAgICAgICAgICAgIDB4MDQwMDAwMDAgLyogQyBjb2RlcyBub3Qgc3RhYmxlIG9yCiAJCQkJCQkJIG5vdCByZWNlaXZlZCAqLwotI2RlZmluZSAgICBQQ1NfU01fTk9fTElOS19TWU5DICAgICAgICAgICAgIDB4MDgwMDAwMDAgLyogd29yZCBzeW5jIG5vdCAKKyNkZWZpbmUgICAgUENTX1NNX05PX0xJTktfU1lOQyAgICAgICAgICAgICAweDA4MDAwMDAwIC8qIHdvcmQgc3luYyBub3QKIAkJCQkJCQkgYWNoaWV2ZWQgKi8KLSNkZWZpbmUgICAgUENTX1NNX05PX0xJTktfV0FJVF9DICAgICAgICAgICAweDEwMDAwMDAwIC8qIHdhaXRpbmcgZm9yIEMgY29kZXMgCisjZGVmaW5lICAgIFBDU19TTV9OT19MSU5LX1dBSVRfQyAgICAgICAgICAgMHgxMDAwMDAwMCAvKiB3YWl0aW5nIGZvciBDIGNvZGVzCiAJCQkJCQkJIHcvIGFjayBiaXQgc2V0ICovCiAjZGVmaW5lICAgIFBDU19TTV9OT19MSU5LX05PX0lETEUgICAgICAgICAgMHgyMDAwMDAwMCAvKiBsaW5rIHBhcnRuZXIgY29udGludWVzCi0JCQkJCQkJIHRvIHNlbmQgQyBjb2RlcyAKLQkJCQkJCQkgaW5zdGVhZCBvZiBpZGxlIAorCQkJCQkJCSB0byBzZW5kIEMgY29kZXMKKwkJCQkJCQkgaW5zdGVhZCBvZiBpZGxlCiAJCQkJCQkJIHN5bWJvbHMgb3IgcGt0IGRhdGEgKi8KIAogLyogdGhpcyByZWdpc3RlciBpbmRpY2F0ZXMgaW50ZXJydXB0IGNoYW5nZXMgaW4gc3BlY2lmaWMgUENTIE1JSSBzdGF0dXMgYml0cy4KQEAgLTE5OTEsMjEgKzE5OTEsMjEgQEAKICAqIERFRkFVTFQ6IG5vbmUKICAqLwogI2RlZmluZSAgUkVHX1BDU19EQVRBUEFUSF9NT0RFICAgICAgICAgICAgIDB4OTA1MCAvKiBkYXRhcGF0aCBtb2RlIHJlZyAqLwotI2RlZmluZSAgICBQQ1NfREFUQVBBVEhfTU9ERV9NSUkgICAgICAgICAgIDB4MDAgLyogUENTIGlzIG5vdCB1c2VkIGFuZCAKLQkJCQkJCSAgIE1JSS9HTUlJIGlzIHNlbGVjdGVkLiAKKyNkZWZpbmUgICAgUENTX0RBVEFQQVRIX01PREVfTUlJICAgICAgICAgICAweDAwIC8qIFBDUyBpcyBub3QgdXNlZCBhbmQKKwkJCQkJCSAgIE1JSS9HTUlJIGlzIHNlbGVjdGVkLgogCQkJCQkJICAgc2VsZWN0aW9uIGJldHdlZW4gTUlJIGFuZAotCQkJCQkJICAgR01JSSBpcyBjb250cm9sbGVkIGJ5IAorCQkJCQkJICAgR01JSSBpcyBjb250cm9sbGVkIGJ5CiAJCQkJCQkgICBYSUZfQ0ZHICovCiAjZGVmaW5lICAgIFBDU19EQVRBUEFUSF9NT0RFX1NFUkRFUyAgICAgICAgMHgwMiAvKiBQQ1MgaXMgdXNlZCB2aWEgdGhlCiAJCQkJCQkgICAxMC1iaXQgaW50ZXJmYWNlICovCiAKIC8qIGlucHV0IHRvIHNlcmRlcyBjaGlwIG9yIHNlcmlhbGluayBibG9jayAqLwogI2RlZmluZSAgUkVHX1BDU19TRVJERVNfQ1RSTCAgICAgICAgICAgICAgMHg5MDU0IC8qIHNlcmRlcyBjb250cm9sIHJlZyAqLwotI2RlZmluZSAgICBQQ1NfU0VSREVTX0NUUkxfTE9PUEJBQ0sgICAgICAgMHgwMSAgIC8qIGVuYWJsZSBsb29wYmFjayBvbiAKKyNkZWZpbmUgICAgUENTX1NFUkRFU19DVFJMX0xPT1BCQUNLICAgICAgIDB4MDEgICAvKiBlbmFibGUgbG9vcGJhY2sgb24KIAkJCQkJCSAgICBzZXJkZXMgaW50ZXJmYWNlICovCiAjZGVmaW5lICAgIFBDU19TRVJERVNfQ1RSTF9TWU5DRF9FTiAgICAgICAweDAyICAgLyogZW5hYmxlIHN5bmMgY2FycmllcgogCQkJCQkJICAgIGRldGVjdGlvbi4gc2hvdWxkIGJlCi0JCQkJCQkgICAgMHgwIGZvciBub3JtYWwgCisJCQkJCQkgICAgMHgwIGZvciBub3JtYWwKIAkJCQkJCSAgICBvcGVyYXRpb24gKi8KICNkZWZpbmUgICAgUENTX1NFUkRFU19DVFJMX0xPQ0tSRUYgICAgICAgMHgwNCAgIC8qIGZyZXF1ZW5jeS1sb2NrIFJCQ1swOjFdCiAJCQkJCQkgICB0byBSRUZDTEsgd2hlbiBzZXQuCkBAIC0yMDE0LDI4ICsyMDE0LDI4IEBACiAJCQkJCQkgICBzZXJpYWwgZGF0YSAqLwogCiAvKiBtdWx0aXBsZXggdGVzdCBvdXRwdXRzIGludG8gdGhlIFBST00gYWRkcmVzcyAoUEFfMyB0aHJvdWdoIFBBXzApIHBpbnMuCi0gKiBzaG91bGQgYmUgMHgwIGZvciBub3JtYWwgb3BlcmF0aW9ucy4gCisgKiBzaG91bGQgYmUgMHgwIGZvciBub3JtYWwgb3BlcmF0aW9ucy4KICAqIDBiMDAwICAgICAgICAgIG5vcm1hbCBvcGVyYXRpb24sIFBST00gYWRkcmVzc1szOjBdIHNlbGVjdGVkCi0gKiAwYjAwMSAgICAgICAgICByeGRtYSByZXEsIHJ4ZG1hIGFjaywgcnhkbWEgcmVhZHksIHJ4ZG1hIHJlYWQgCi0gKiAwYjAxMCAgICAgICAgICByeG1hYyByZXEsIHJ4IGFjaywgcnggdGFnLCByeCBjbGsgc2hhcmVkIAotICogMGIwMTEgICAgICAgICAgdHhtYWMgcmVxLCB0eCBhY2ssIHR4IHRhZywgdHggcmV0cnkgcmVxIAotICogMGIxMDAgICAgICAgICAgdHggdHAzLCB0eCB0cDIsIHR4IHRwMSwgdHggdHAwIAorICogMGIwMDEgICAgICAgICAgcnhkbWEgcmVxLCByeGRtYSBhY2ssIHJ4ZG1hIHJlYWR5LCByeGRtYSByZWFkCisgKiAwYjAxMCAgICAgICAgICByeG1hYyByZXEsIHJ4IGFjaywgcnggdGFnLCByeCBjbGsgc2hhcmVkCisgKiAwYjAxMSAgICAgICAgICB0eG1hYyByZXEsIHR4IGFjaywgdHggdGFnLCB0eCByZXRyeSByZXEKKyAqIDBiMTAwICAgICAgICAgIHR4IHRwMywgdHggdHAyLCB0eCB0cDEsIHR4IHRwMAogICogMGIxMDEgICAgICAgICAgUiBwZXJpb2QgUlgsIFIgcGVyaW9kIFRYLCBSIHBlcmlvZCBIUCwgUiBwZXJpb2QgQklNCiAgKiBERUZBVUxUOiAweDAKICAqLwogI2RlZmluZSAgUkVHX1BDU19TSEFSRURfT1VUUFVUX1NFTCAgICAgICAgIDB4OTA1OCAvKiBzaGFyZWQgb3V0cHV0IHNlbGVjdCAqLwogI2RlZmluZSAgICBQQ1NfU09TX1BST01fQUREUl9NQVNLICAgICAgICAgIDB4MDAwNwogCi0vKiB1c2VkIGZvciBkaWFnbm9zdGljcy4gdGhpcyByZWdpc3RlciBpbmRpY2F0ZXMgcHJvZ3Jlc3Mgb2YgdGhlIFNFUkRFUyAKLSAqIGJvb3QgdXAuIAorLyogdXNlZCBmb3IgZGlhZ25vc3RpY3MuIHRoaXMgcmVnaXN0ZXIgaW5kaWNhdGVzIHByb2dyZXNzIG9mIHRoZSBTRVJERVMKKyAqIGJvb3QgdXAuCiAgKiAwYjAwICAgICAgIHVuZGVyZ29pbmcgcmVzZXQKICAqIDBiMDEgICAgICAgd2FpdGluZyA1MDB1cyB3aGlsZSBsb2NrcmVmbiBpcyBhc3NlcnRlZAogICogMGIxMCAgICAgICB3YWl0aW5nIGZvciBjb21tYSBkZXRlY3QKLSAqIDBiMTEgICAgICAgcmVjZWl2ZSBkYXRhIGlzIHN5bmNocm9uaXplZCAKKyAqIDBiMTEgICAgICAgcmVjZWl2ZSBkYXRhIGlzIHN5bmNocm9uaXplZAogICogREVGQVVMVDogMHgwCiAgKi8KICNkZWZpbmUgIFJFR19QQ1NfU0VSREVTX1NUQVRFICAgICAgICAgICAgICAweDkwNUMgLyogKHJvKSBzZXJkZXMgc3RhdGUgKi8KLSNkZWZpbmUgICAgUENTX1NFUkRFU19TVEFURV9NQVNLICAgICAgICAgICAweDAzICAgCisjZGVmaW5lICAgIFBDU19TRVJERVNfU1RBVEVfTUFTSyAgICAgICAgICAgMHgwMwogCiAvKiB1c2VkIGZvciBkaWFnbm9zdGljcy4gaW5kaWNhdGVzIG51bWJlciBvZiBwYWNrZXRzIHRyYW5zbWl0dGVkIG9yIHJlY2VpdmVkLgogICogY291bnRlcnMgcm9sbG92ZXIgdy9vdXQgZ2VuZXJhdGluZyBhbiBpbnRlcnJ1cHQuCkBAIC0yMDQ0LDE4ICsyMDQ0LDE4IEBACiAjZGVmaW5lICBSRUdfUENTX1BBQ0tFVF9DT1VOVCAgICAgICAgICAgICAgMHg5MDYwIC8qIChybykgUENTIHBhY2tldCBjb3VudGVyICovCiAjZGVmaW5lICAgIFBDU19QQUNLRVRfQ09VTlRfVFggICAgICAgICAgICAgMHgwMDAwMDdGRiAvKiBwa3RzIHhtaXR0ZWQgYnkgUENTICovCiAjZGVmaW5lICAgIFBDU19QQUNLRVRfQ09VTlRfUlggICAgICAgICAgICAgMHgwN0ZGMDAwMCAvKiBwa3RzIHJlY3ZkIGJ5IFBDUwotCQkJCQkJCSB3aGV0aGVyIHRoZXkgCisJCQkJCQkJIHdoZXRoZXIgdGhleQogCQkJCQkJCSBlbmNvdW50ZXJlZCBhbiBlcnJvcgogCQkJCQkJCSBvciBub3QgKi8KIAotLyoqIExvY2FsQnVzIERldmljZXMuIHRoZSBmb2xsb3dpbmcgcHJvdmlkZXMgcnVuLXRpbWUgYWNjZXNzIHRvIHRoZSAKKy8qKiBMb2NhbEJ1cyBEZXZpY2VzLiB0aGUgZm9sbG93aW5nIHByb3ZpZGVzIHJ1bi10aW1lIGFjY2VzcyB0byB0aGUKICAqICBDYXNzaW5pJ3MgUFJPTQogICoqKi8KICNkZWZpbmUgIFJFR19FWFBBTlNJT05fUk9NX1JVTl9TVEFSVCAgICAgICAweDEwMDAwMCAvKiBleHBhbnNpb24gcm9tIHJ1biB0aW1lCiAJCQkJCQkgICAgICAgYWNjZXNzICovCiAjZGVmaW5lICBSRUdfRVhQQU5TSU9OX1JPTV9SVU5fRU5EICAgICAgICAgMHgxN0ZGRkYKIAotI2RlZmluZSAgUkVHX1NFQ09ORF9MT0NBTEJVU19TVEFSVCAgICAgICAgIDB4MTgwMDAwIC8qIHNlY29uZGFyeSBsb2NhbCBidXMgCisjZGVmaW5lICBSRUdfU0VDT05EX0xPQ0FMQlVTX1NUQVJUICAgICAgICAgMHgxODAwMDAgLyogc2Vjb25kYXJ5IGxvY2FsIGJ1cwogCQkJCQkJICAgICAgIGRldmljZSAqLwogI2RlZmluZSAgUkVHX1NFQ09ORF9MT0NBTEJVU19FTkQgICAgICAgICAgIDB4MUZGRkZGCiAKQEAgLTIxMDMsNyArMjEwMyw3IEBACiAjZGVmaW5lICAgQ0FTX01JSV8xMDAwX0VYVEVORCAgICAgMHgwRgogCiAjZGVmaW5lICAgQ0FTX0JNU1JfMTAwMF9FWFRFTkQgICAgMHgwMTAwIC8qIHN1cHBvcnRzIDEwMDBCYXNlLVQgZXh0ZW5kZWQgc3RhdHVzICovCi0vKiAKKy8qCiAgKiBpZiBhdXRvbmVnIGlzIGRpc2FibGVkLCBoZXJlJ3MgdGhlIHRhYmxlOgogICogQk1DUl9TUEVFRDEwMCA9IDEwME1icHMKICAqIEJNQ1JfU1BFRUQxMDAwID0gMTAwME1icHMKQEAgLTIxNDUsNyArMjE0NSw3IEBACiAJdTggb3V0ZW5hYjsgIC8qIG91dHB1dCBlbmFibGU6IDAgPSBub3QsIDEgPSBpZiBtYXRjaAogCQkJIDIgPSBpZiAhbWF0Y2gsIDMgPSBhbHdheXMgKi8KIAl1OCBvdXRzaGlmdDsgLyogYmFycmVsIHNoaWZ0IHJpZ2h0LCA0IGJpdHMgKi8KLQl1MTYgb3V0bWFzazsgCisJdTE2IG91dG1hc2s7CiB9IGNhc19ocF9pbnN0X3Q7CiAKIC8qIGNvbXBhcmlzb24gKi8KQEAgLTIyMzIsOSArMjIzMiw5IEBACiAKICNpZmRlZiBVU0VfSFBfSVA0NlRDUDQKIHN0YXRpYyBjYXNfaHBfaW5zdF90IGNhc19wcm9nX2lwNDZ0Y3A0dGFiW10gPSB7Ci0JQ0FTX1BST0dfSVA0NlRDUDRfUFJFQU1CTEUsIAotCXsgIlRDUCBzZXEiLCAvKiBEQUREUiBzaG91bGQgcG9pbnQgdG8gZGVzdCBwb3J0ICovIAotCSAgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAwLCBTMV9UQ1BGRywgNCwgUzFfVENQRkcsIExEX1NFUSwgCisJQ0FTX1BST0dfSVA0NlRDUDRfUFJFQU1CTEUsCisJeyAiVENQIHNlcSIsIC8qIERBRERSIHNob3VsZCBwb2ludCB0byBkZXN0IHBvcnQgKi8KKwkgIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgMCwgUzFfVENQRkcsIDQsIFMxX1RDUEZHLCBMRF9TRVEsCiAJICAweDA4MSwgIDMsIDB4MCwgMHhmZmZmfSwgLyogTG9hZCBUQ1Agc2VxICMgKi8KIAl7ICJUQ1AgY29udHJvbCBmbGFncyIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhMLCAwLAogCSAgUzFfVENQSEwsIFNUX0ZMRywgMHgwNDUsICAzLCAweDAsIDB4MDAyZn0sIC8qIExvYWQgVENQIGZsYWdzICovCkBAIC0yMjYzLDcgKzIyNjMsNyBAQAogc3RhdGljIGNhc19ocF9pbnN0X3QgY2FzX3Byb2dfaXA0NnRjcDRub2h0dHB0YWJbXSA9IHsKIAlDQVNfUFJPR19JUDQ2VENQNF9QUkVBTUJMRSwKIAl7ICJUQ1Agc2VxIiwgLyogREFERFIgc2hvdWxkIHBvaW50IHRvIGRlc3QgcG9ydCAqLwotCSAgMHhGRkZGLCAweDAwODAsIE9QX0VRLCAgMCwgUzJfSFRUUCwgIDAsIFMxX1RDUEZHLCBMRF9TRVEsIAorCSAgMHhGRkZGLCAweDAwODAsIE9QX0VRLCAgMCwgUzJfSFRUUCwgIDAsIFMxX1RDUEZHLCBMRF9TRVEsCiAJICAweDA4MSwgIDMsIDB4MCwgMHhmZmZmfSAsIC8qIExvYWQgVENQIHNlcSAjICovCiAJeyAiVENQIGNvbnRyb2wgZmxhZ3MiLCAweEZGRkYsIDB4ODA4MCwgT1BfRVEsICAwLCBTMl9IVFRQLCAgMCwKIAkgIFMxX1RDUEhMLCBTVF9GTEcsIDB4MTQ1LCAgMiwgMHgwLCAweDAwMmYsIH0sIC8qIExvYWQgVENQIGZsYWdzICovCkBAIC0yMzI4LDcgKzIzMjgsNyBAQAogCXsgIlRDUCBzZXEiLAkvKiBEQUREUiBzaG91bGQgcG9pbnQgdG8gZGVzdCBwb3J0ICovCiAJICAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTM19UQ1BGRywgNCwgUzNfVENQRkcsIExEX1NFUSwKIAkgIDB4MDgxLCAgMywgMHgwLCAweGZmZmZ9LCAvKiBMb2FkIFRDUCBzZXEgIyAqLwotCXsgIlRDUCBjb250cm9sIGZsYWdzIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzNfVENQSEwsIDAsIAorCXsgIlRDUCBjb250cm9sIGZsYWdzIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzNfVENQSEwsIDAsCiAJICBTM19UQ1BITCwgU1RfRkxHLCAweDA0NSwgIDMsIDB4MCwgMHgwMDJmfSwgLyogTG9hZCBUQ1AgZmxhZ3MgKi8KIAl7ICJUQ1AgbGVuZ3RoIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzNfVENQSGMsIDAsIFMzX1RDUEhjLAogCSAgTERfUjEsICAweDIwNSwgIDMsIDB4QiwgMHhmMDAwfSwKQEAgLTIzMzgsNyArMjMzOCw3IEBACiAJICBMRF9GSUQsIDB4MTAzLCAgMywgMHgwLCAweGZmZmZ9LCAvKiBGSUQgSVA0IHNyYytkc3QgKi8KIAl7ICJJUDQgZnJhZyBvZmZzZXQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTM19GT0ZGLCAgMCwgUzNfRk9GRiwKIAkgIExEX1NFUSwgMHgwNDAsICAxLCAweEQsIDB4ZmZmOH0sCi0JeyAiQ2xlYW51cCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLCBTMV9QQ0tULCAgCisJeyAiQ2xlYW51cCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLCBTMV9QQ0tULAogCSAgSU1fQ1RMLCAweDAwMSwgIDMsIDB4MCwgMHgwMDAxfSwKIAl7IE5VTEwgfSwKIH07CkBAIC0yMzU2LDExICsyMzU2LDExIEBACiAJeyAiVENQIHNlcSIsCS8qIERBRERSIHNob3VsZCBwb2ludCB0byBkZXN0IHBvcnQgKi8KIAkgIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEZHLCAwLCBTMV9UQ1BGRywgTERfU0VRLAogCSAgMHgwODEsICAzLCAweDAsIDB4ZmZmZn0sIC8qIExvYWQgVENQIHNlcSAjICovCi0JeyAiVENQIGNvbnRyb2wgZmxhZ3MiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BITCwgMCwgCisJeyAiVENQIGNvbnRyb2wgZmxhZ3MiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BITCwgMCwKIAkgIFMxX1RDUEhMLCBTVF9GTEcsIDB4MDAwLCAgMywgMHgwLCAweDAwMDB9LCAvKiBMb2FkIFRDUCBmbGFncyAqLwotCXsgIlRDUCBsZW5ndGgiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BIYywgMCwgCisJeyAiVENQIGxlbmd0aCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhjLCAwLAogCSAgUzFfVENQSGMsIExEX1IxLCAgMHgyMDUsICAzLCAweEIsIDB4ZjAwMH0sCi0JeyAiVENQIGxlbmd0aCBjb250IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIAorCXsgIlRDUCBsZW5ndGggY29udCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLAogCSAgUzFfUENLVCwgIElNX0NUTCwgMHgwNDAsICAzLCAweDAsIDB4ZmZmZn0sIC8qIHNldCBiYXRjaCBiaXQgKi8KIAl7ICJDbGVhbnVwIiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfUENLVCwgIDAsIFMxX1BDS1QsCiAJICBJTV9DVEwsIDB4MDAxLCAgMywgMHgwLCAweDAwMDF9LApAQCAtMjM4MSw3ICsyMzgxLDcgQEAKIHN0YXRpYyBjYXNfaHBfaW5zdF90ICBjYXNfcHJvZ193b3JrYXJvdW5kdGFiW10gPSB7CiAJeyAicGFja2V0IGFycml2YWw/IiwgMHhmZmZmLCAweDAwMDAsIE9QX05QLCAgNiwgUzFfVkxBTiwgIDAsCiAJICBTMV9QQ0tULCAgQ0xfUkVHLCAweDNmZiwgIDEsIDB4MCwgMHgwMDAwfSAsCi0JeyAiVkxBTj8iLCAweGZmZmYsIDB4ODEwMCwgT1BfRVEsICAxLCBTMV9DRkksIDAsIFMxXzgwMjMsIAorCXsgIlZMQU4/IiwgMHhmZmZmLCAweDgxMDAsIE9QX0VRLCAgMSwgUzFfQ0ZJLCAwLCBTMV84MDIzLAogCSAgSU1fQ1RMLCAweDA0YSwgIDMsIDB4MCwgMHhmZmZmfSwKIAl7ICJDRkk/IiwgMHgxMDAwLCAweDEwMDAsIE9QX0VRLCAgMCwgUzFfQ0xOUCwgIDEsIFMxXzgwMjMsCiAJICBDTF9SRUcsIDB4MDAwLCAgMCwgMHgwLCAweDAwMDB9LApAQCAtMjM5NSw3ICsyMzk1LDcgQEAKIAkgIElNX1NBUCwgMHg2QUUsICAzLCAweDAsIDB4ZmZmZn0sCiAJeyAiSVBWNCBjb250PyIsIDB4ZmYwMCwgMHg0NTAwLCBPUF9FUSwgIDMsIFMxX0lQVjRGLCAwLCBTMV9DTE5QLAogCSAgTERfU1VNLCAweDAwYSwgIDEsIDB4MCwgMHgwMDAwfSwKLQl7ICJJUFY0IGZyYWc/IiwgMHgzZmZmLCAweDAwMDAsIE9QX0VRLCAgMSwgUzFfVENQNDQsIDAsIFMxX0NMTlAsICAKKwl7ICJJUFY0IGZyYWc/IiwgMHgzZmZmLCAweDAwMDAsIE9QX0VRLCAgMSwgUzFfVENQNDQsIDAsIFMxX0NMTlAsCiAJICBMRF9MRU4sIDB4MDNlLCAgMSwgMHgwLCAweGZmZmZ9LAogCXsgIlRDUDQ0PyIsIDB4MDBmZiwgMHgwMDA2LCBPUF9FUSwgIDcsIFMxX1RDUFNRLCAwLCBTMV9DTE5QLAogCSAgTERfRklELCAweDE4MiwgIDMsIDB4MCwgMHhmZmZmfSwgLyogRklEIElQNCZUQ1Agc3JjK2RzdCAqLwpAQCAtMjQwOCw3ICsyNDA4LDcgQEAKIAl7ICJUQ1A2ND8iLCAweGZmMDAsIDB4MDYwMCwgT1BfRVEsIDE4LCBTMV9UQ1BTUSwgMCwgUzFfQ0xOUCwKIAkgIExEX0xFTiwgMHgwM2YsICAxLCAweDAsIDB4ZmZmZn0sCiAJeyAiVENQIHNlcSIsICAgICAgLyogREFERFIgc2hvdWxkIHBvaW50IHRvIGRlc3QgcG9ydCAqLwotCSAgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfVENQRkcsIDQsIFMxX1RDUEZHLCBMRF9TRVEsIAorCSAgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMCwgUzFfVENQRkcsIDQsIFMxX1RDUEZHLCBMRF9TRVEsCiAJICAweDA4MSwgIDMsIDB4MCwgMHhmZmZmfSwgLyogTG9hZCBUQ1Agc2VxICMgKi8KIAl7ICJUQ1AgY29udHJvbCBmbGFncyIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1RDUEhMLCAwLAogCSAgUzFfVENQSEwsIFNUX0ZMRywgMHgwNDUsICAzLCAweDAsIDB4MDAyZn0sIC8qIExvYWQgVENQIGZsYWdzICovCkBAIC0yNDI5LDcgKzI0MjksNyBAQAogCiAjaWZkZWYgVVNFX0hQX0VOQ1JZUFQKIHN0YXRpYyBjYXNfaHBfaW5zdF90ICBjYXNfcHJvZ19lbmNyeXB0aW9udGFiW10gPSB7Ci0JeyAicGFja2V0IGFycml2YWw/IiwgMHhmZmZmLCAweDAwMDAsIE9QX05QLCAgNiwgUzFfVkxBTiwgIDAsIAorCXsgInBhY2tldCBhcnJpdmFsPyIsIDB4ZmZmZiwgMHgwMDAwLCBPUF9OUCwgIDYsIFMxX1ZMQU4sICAwLAogCSAgUzFfUENLVCwgIENMX1JFRywgMHgzZmYsICAxLCAweDAsIDB4MDAwMH0sCiAJeyAiVkxBTj8iLCAweGZmZmYsIDB4ODEwMCwgT1BfRVEsICAxLCBTMV9DRkksICAgMCwgUzFfODAyMywKIAkgIElNX0NUTCwgMHgwMGEsICAzLCAweDAsIDB4ZmZmZn0sCkBAIC0yNDM5LDE5ICsyNDM5LDE5IEBACiAJMDAsCiAjZW5kaWYKIAl7ICJDRkk/IiwgLyogRklORCBDRkkgYW5kIElmIEZJTkQgZ28gdG8gQ2xlYW5VUDEgKGlnbm9yZSBhbmQgc2VuZCB0byBob3N0KSAqLwotCSAgMHgxMDAwLCAweDEwMDAsIE9QX0VRLCAgMCwgUzFfQ0xOUCwgIDEsIFMxXzgwMjMsICAKKwkgIDB4MTAwMCwgMHgxMDAwLCBPUF9FUSwgIDAsIFMxX0NMTlAsICAxLCBTMV84MDIzLAogCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKLQl7ICI4MDIzPyIsIDB4ZmZmZiwgMHgwNjAwLCBPUF9MVCwgIDEsIFMxX0xMQywgICAwLCBTMV9JUFY0LCAKKwl7ICI4MDIzPyIsIDB4ZmZmZiwgMHgwNjAwLCBPUF9MVCwgIDEsIFMxX0xMQywgICAwLCBTMV9JUFY0LAogCSAgQ0xfUkVHLCAweDAwMCwgIDAsIDB4MCwgMHgwMDAwfSwKLQl7ICJMTEM/IiwgMHhmZmZmLCAweGFhYWEsIE9QX0VRLCAgMSwgUzFfTExDYywgIDAsIFMxX0NMTlAsIAorCXsgIkxMQz8iLCAweGZmZmYsIDB4YWFhYSwgT1BfRVEsICAxLCBTMV9MTENjLCAgMCwgUzFfQ0xOUCwKIAkgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sCiAJeyAiTExDYz8iLCAweGZmMDAsIDB4MDMwMCwgT1BfRVEsICAyLCBTMV9JUFY0LCAgMCwgUzFfQ0xOUCwKIAkgIENMX1JFRywgMHgwMDAsICAwLCAweDAsIDB4MDAwMH0sCi0JeyAiSVBWND8iLCAweGZmZmYsIDB4MDgwMCwgT1BfRVEsICAxLCBTMV9JUFY0YywgMCwgUzFfSVBWNiwgIAorCXsgIklQVjQ/IiwgMHhmZmZmLCAweDA4MDAsIE9QX0VRLCAgMSwgUzFfSVBWNGMsIDAsIFMxX0lQVjYsCiAJICBMRF9TQVAsIDB4MTAwLCAgMywgMHgwLCAweGZmZmZ9LAotCXsgIklQVjQgY29udD8iLCAweGZmMDAsIDB4NDUwMCwgT1BfRVEsICAzLCBTMV9JUFY0RiwgMCwgUzFfQ0xOUCwgIAorCXsgIklQVjQgY29udD8iLCAweGZmMDAsIDB4NDUwMCwgT1BfRVEsICAzLCBTMV9JUFY0RiwgMCwgUzFfQ0xOUCwKIAkgIExEX1NVTSwgMHgwMGEsICAxLCAweDAsIDB4MDAwMH0sCi0JeyAiSVBWNCBmcmFnPyIsIDB4M2ZmZiwgMHgwMDAwLCBPUF9FUSwgIDEsIFMxX1RDUDQ0LCAwLCBTMV9DTE5QLCAKKwl7ICJJUFY0IGZyYWc/IiwgMHgzZmZmLCAweDAwMDAsIE9QX0VRLCAgMSwgUzFfVENQNDQsIDAsIFMxX0NMTlAsCiAJICBMRF9MRU4sIDB4MDNlLCAgMSwgMHgwLCAweGZmZmZ9LAogCXsgIlRDUDQ0PyIsIDB4MDBmZiwgMHgwMDA2LCBPUF9FUSwgIDcsIFMxX1RDUFNRLCAwLCBTMV9FU1A0LAogCSAgTERfRklELCAweDE4MiwgIDEsIDB4MCwgMHhmZmZmfSwgLyogRklEIElQNCZUQ1Agc3JjK2RzdCAqLwpAQCAtMjQ1OSw5ICsyNDU5LDkgQEAKIAkgIExEX1NVTSwgMHgwMTUsICAxLCAweDAsIDB4MDAwMH0sCiAJeyAiSVBWNiBsZW4iLCAweGYwMDAsIDB4NjAwMCwgT1BfRVEsICAwLCBTMV9JUFY2YywgMCwgUzFfQ0xOUCwKIAkgIElNX1IxLCAgMHgxMjgsICAxLCAweDAsIDB4ZmZmZn0sCi0JeyAiSVBWNiBjb250PyIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDMsIFMxX1RDUDY0LCAwLCBTMV9DTE5QLCAKKwl7ICJJUFY2IGNvbnQ/IiwgMHgwMDAwLCAweDAwMDAsIE9QX0VRLCAgMywgUzFfVENQNjQsIDAsIFMxX0NMTlAsCiAJICBMRF9GSUQsIDB4NDg0LCAgMSwgMHgwLCAweGZmZmZ9LCAvKiAgRklEIElQNiZUQ1Agc3JjK2RzdCAqLwotCXsgIlRDUDY0PyIsIAorCXsgIlRDUDY0PyIsCiAjaWYgMAogLy9AQEAweGZmMDAsIDB4MDYwMCwgT1BfRVEsIDE4LCBTMV9UQ1BTUSwgMCwgUzFfRVNQNiwgIExEX0xFTiwgMHgwM2YsICAxLCAweDAsIDB4ZmZmZiwKICNlbmRpZgpAQCAtMjQ3MiwxMCArMjQ3MiwxMCBAQAogCSAgMHgwODEsICAzLCAweDAsIDB4ZmZmZn0sIC8qIExvYWQgVENQIHNlcSAjICovCiAJeyAiVENQIGNvbnRyb2wgZmxhZ3MiLCAweEZGRkYsIDB4ODA4MCwgT1BfRVEsICAwLCBTMl9IVFRQLCAgMCwKIAkgIFMxX1RDUEhMLCBTVF9GTEcsIDB4MTQ1LCAgMiwgMHgwLCAweDAwMmZ9LCAvKiBMb2FkIFRDUCBmbGFncyAqLwotCXsgIlRDUCBsZW5ndGgiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BIYywgMCwgUzFfVENQSGMsIAorCXsgIlRDUCBsZW5ndGgiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9UQ1BIYywgMCwgUzFfVENQSGMsCiAJICBMRF9SMSwgIDB4MjA1LCAgMywgMHhCLCAweGYwMDB9ICwKIAl7ICJUQ1AgbGVuZ3RoIGNvbnQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwKLQkgIFMxX1BDS1QsICBMRF9IRFIsIDB4MGZmLCAgMywgMHgwLCAweGZmZmZ9LCAKKwkgIFMxX1BDS1QsICBMRF9IRFIsIDB4MGZmLCAgMywgMHgwLCAweGZmZmZ9LAogCXsgIkNsZWFudXAiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9DTE5QMiwgIDAsIFMxX0NMTlAyLAogCSAgSU1fQ1RMLCAweDAwMSwgIDMsIDB4MCwgMHgwMDAxfSwKIAl7ICJDbGVhbnVwIDIiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgUzFfUENLVCwKQEAgLTI0ODMsNyArMjQ4Myw3IEBACiAJeyAiRHJvcCBwYWNrZXQiLCAweDAwMDAsIDB4MDAwMCwgT1BfRVEsICAwLCBTMV9QQ0tULCAgMCwgUzFfUENLVCwKIAkgIElNX0NUTCwgMHgwODAsICAzLCAweDAsIDB4ZmZmZn0sCiAJeyAiTm8gSFRUUCIsIDB4MDAwMCwgMHgwMDAwLCBPUF9FUSwgIDAsIFMxX1BDS1QsICAwLCBTMV9QQ0tULAotCSAgSU1fQ1RMLCAweDA0NCwgIDMsIDB4MCwgMHhmZmZmfSwgCisJICBJTV9DVEwsIDB4MDQ0LCAgMywgMHgwLCAweGZmZmZ9LAogCXsgIklQVjQgRVNQIGVuY3J5cHRlZD8iLCAgLyogUzFfRVNQNCAqLwogCSAgMHgwMGZmLCAweDAwMzIsIE9QX0VRLCAgMCwgUzFfQ0xOUDIsIDAsIFMxX0FINCwgSU1fQ1RMLAogCSAgMHgwMjEsIDEsICAweDAsIDB4ZmZmZn0sCkBAIC00MDQ0LDcgKzQwNDQsNyBAQAogICogZGVhbCB3aXRoIHRoYXQsIGkganVzdCBhbGxvY2F0ZSByaW5ncyB0byBjcmVhdGUgdGhlIGRlc2lyZWQKICAqIGFsaWdubWVudC4gaGVyZSBhcmUgdGhlIGNvbnN0cmFpbnRzOgogICogICBSWCBERVNDIGFuZCBDT01QIHJpbmdzIG11c3QgYmUgOEtCIGFsaWduZWQKLSAqICAgVFggREVTQyBtdXN0IGJlIDJLQiBhbGlnbmVkLiAKKyAqICAgVFggREVTQyBtdXN0IGJlIDJLQiBhbGlnbmVkLgogICogaWYgeW91IGNoYW5nZSB0aGUgbnVtYmVycywgYmUgY29nbml6YW50IG9mIGhvdyB0aGUgYWxpZ25tZW50IHdpbGwgY2hhbmdlCiAgKiBpbiBJTklUX0JMT0NLIGFzIHdlbGwuCiAgKi8KQEAgLTQwOTUsMjAgKzQwOTUsMjAgQEAKIC8qIG1pbiBpcyAyaywgYnV0IHdlIGNhbid0IGRvIGp1bWJvIGZyYW1lcyB1bmxlc3MgaXQncyBhdCBsZWFzdCA4ayAqLwogI2RlZmluZSBDQVNfTUlOX1BBR0VfU0hJRlQgICAgICAgICAgICAxMSAvKiAyMDQ4ICovCiAjZGVmaW5lIENBU19KVU1CT19QQUdFX1NISUZUICAgICAgICAgIDEzIC8qIDgxOTIgKi8KLSNkZWZpbmUgQ0FTX01BWF9QQUdFX1NISUZUICAgICAgICAgICAgMTQgLyogMTYzODQgKi8gICAgICAgICAgICAgCisjZGVmaW5lIENBU19NQVhfUEFHRV9TSElGVCAgICAgICAgICAgIDE0IC8qIDE2Mzg0ICovCiAKICNkZWZpbmUgVFhfREVTQ19CVUZMRU5fTUFTSyAgICAgICAgIDB4MDAwMDAwMDAwMDAwM0ZGRlVMTCAvKiBidWZmZXIgbGVuZ3RoIGluCiAJCQkJCQkJICAgICBieXRlcy4gMCAtIDkyNTYgKi8KICNkZWZpbmUgVFhfREVTQ19CVUZMRU5fU0hJRlQgICAgICAgIDAKICNkZWZpbmUgVFhfREVTQ19DU1VNX1NUQVJUX01BU0sgICAgIDB4MDAwMDAwMDAwMDFGODAwMFVMTCAvKiBjaGVja3N1bSBzdGFydC4gIwotCQkJCQkJCSAgICAgb2YgYnl0ZXMgdG8gYmUgCisJCQkJCQkJICAgICBvZiBieXRlcyB0byBiZQogCQkJCQkJCSAgICAgc2tpcHBlZCBiZWZvcmUKIAkJCQkJCQkgICAgIGNzdW0gY2FsYyBiZWdpbnMuCiAJCQkJCQkJICAgICB2YWx1ZSBtdXN0IGJlCiAJCQkJCQkJICAgICBldmVuICovCiAjZGVmaW5lIFRYX0RFU0NfQ1NVTV9TVEFSVF9TSElGVCAgICAxNQogI2RlZmluZSBUWF9ERVNDX0NTVU1fU1RVRkZfTUFTSyAgICAgMHgwMDAwMDAwMDFGRTAwMDAwVUxMIC8qIGNoZWNrc3VtIHN0dWZmLgotCQkJCQkJCSAgICAgYnl0ZSBvZmZzZXQgdy9pbiAKKwkJCQkJCQkgICAgIGJ5dGUgb2Zmc2V0IHcvaW4KIAkJCQkJCQkgICAgIHRoZSBwa3QgZm9yIHRoZQogCQkJCQkJCSAgICAgMXN0IGNzdW0gYnl0ZS4KIAkJCQkJCQkgICAgIG11c3QgYmUgPiA4ICovCkBAIC00MTM3LDcgKzQxMzcsNyBAQAogCiAvKiByZWNlaXZlZCBwYWNrZXRzIGFyZSBwdXQgb24gdGhlIGNvbXBsZXRpb24gcmluZy4gKi8KIC8qIHdvcmQgMSAqLwotI2RlZmluZSBSWF9DT01QMV9EQVRBX1NJWkVfTUFTSyAgICAgICAgICAgMHgwMDAwMDAwMDA3RkZFMDAwVUxMICAgCisjZGVmaW5lIFJYX0NPTVAxX0RBVEFfU0laRV9NQVNLICAgICAgICAgICAweDAwMDAwMDAwMDdGRkUwMDBVTEwKICNkZWZpbmUgUlhfQ09NUDFfREFUQV9TSVpFX1NISUZUICAgICAgICAgIDEzCiAjZGVmaW5lIFJYX0NPTVAxX0RBVEFfT0ZGX01BU0sgICAgICAgICAgICAweDAwMDAwMUZGRjgwMDAwMDBVTEwKICNkZWZpbmUgUlhfQ09NUDFfREFUQV9PRkZfU0hJRlQgICAgICAgICAgIDI3CkBAIC00MTQ3LDggKzQxNDcsOCBAQAogI2RlZmluZSBSWF9DT01QMV9TS0lQX1NISUZUICAgICAgICAgICAgICAgNTUKICNkZWZpbmUgUlhfQ09NUDFfUkVMRUFTRV9ORVhUICAgICAgICAgICAgIDB4MDIwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBSWF9DT01QMV9TUExJVF9QS1QgICAgICAgICAgICAgICAgMHgwNDAwMDAwMDAwMDAwMDAwVUxMCi0jZGVmaW5lIFJYX0NPTVAxX1JFTEVBU0VfRkxPVyAgICAgICAgICAgICAweDA4MDAwMDAwMDAwMDAwMDBVTEwgIAotI2RlZmluZSBSWF9DT01QMV9SRUxFQVNFX0RBVEEgICAgICAgICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwVUxMICAKKyNkZWZpbmUgUlhfQ09NUDFfUkVMRUFTRV9GTE9XICAgICAgICAgICAgIDB4MDgwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBSWF9DT01QMV9SRUxFQVNFX0RBVEEgICAgICAgICAgICAgMHgxMDAwMDAwMDAwMDAwMDAwVUxMCiAjZGVmaW5lIFJYX0NPTVAxX1JFTEVBU0VfSERSICAgICAgICAgICAgICAweDIwMDAwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgUlhfQ09NUDFfVFlQRV9NQVNLICAgICAgICAgICAgICAgIDB4QzAwMDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBSWF9DT01QMV9UWVBFX1NISUZUICAgICAgICAgICAgICAgNjIKQEAgLTQyMDEsNyArNDIwMSw3IEBACiAKIC8qIHdlIGVuY29kZSB0aGUgZm9sbG93aW5nOiByaW5nL2luZGV4L3JlbGVhc2UuIG9ubHkgMTQgYml0cwogICogYXJlIHVzYWJsZS4KLSAqIE5PVEU6IHRoZSBlbmNvZGluZyBpcyBkZXBlbmRlbnQgdXBvbiBSWF9ERVNDX1JJTkdfU0laRSBhbmQgCisgKiBOT1RFOiB0aGUgZW5jb2RpbmcgaXMgZGVwZW5kZW50IHVwb24gUlhfREVTQ19SSU5HX1NJWkUgYW5kCiAgKiAgICAgICBNQVhfUlhfREVTQ19SSU5HUy4gKi8KICNkZWZpbmUgUlhfSU5ERVhfTlVNX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMEZGRlVMTAogI2RlZmluZSBSWF9JTkRFWF9OVU1fU0hJRlQgICAgICAgICAgICAgICAgMApAQCAtNDIxNCw3ICs0MjE0LDcgQEAKIAl1NjQgICAgIHdvcmQyOwogCXU2NCAgICAgd29yZDM7CiAJdTY0ICAgICB3b3JkNDsKLX07IAorfTsKIAogZW51bSBsaW5rX3N0YXRlIHsKIAlsaW5rX2Rvd24gPSAwLAkvKiBObyBsaW5rLCB3aWxsIHJldHJ5ICovCkBAIC00MjM1LDkgKzQyMzUsOSBAQAogCiAvKiBzb21lIGFsaWdubWVudCBjb25zdHJhaW50czoKICAqIFRYIERFU0MsIFJYIERFU0MsIGFuZCBSWCBDT01QIG11c3QgZWFjaCBiZSA4SyBhbGlnbmVkLgotICogVFggQ09NUFdCIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuIAorICogVFggQ09NUFdCIG11c3QgYmUgOC1ieXRlIGFsaWduZWQuCiAgKiB0byBhY2NvbXBsaXNoIHRoaXMsIGhlcmUncyB3aGF0IHdlIGRvOgotICogCisgKgogICogSU5JVF9CTE9DS19SWF9DT01QICA9IDY0ayAoYWxyZWFkeSBhbGlnbmVkKQogICogSU5JVF9CTE9DS19SWF9ERVNDICA9IDhrCiAgKiBJTklUX0JMT0NLX1RYICAgICAgID0gOGsKQEAgLTQyNTAsOSArNDI1MCw5IEBACiAKIHN0cnVjdCBjYXNfaW5pdF9ibG9jayB7CiAJc3RydWN0IGNhc19yeF9jb21wIHJ4Y3NbTl9SWF9DT01QX1JJTkdTXVtJTklUX0JMT0NLX1JYX0NPTVBdOwotCXN0cnVjdCBjYXNfcnhfZGVzYyByeGRzW05fUlhfREVTQ19SSU5HU11bSU5JVF9CTE9DS19SWF9ERVNDXTsgCisJc3RydWN0IGNhc19yeF9kZXNjIHJ4ZHNbTl9SWF9ERVNDX1JJTkdTXVtJTklUX0JMT0NLX1JYX0RFU0NdOwogCXN0cnVjdCBjYXNfdHhfZGVzYyB0eGRzW05fVFhfUklOR1NdW0lOSVRfQkxPQ0tfVFhdOwotCXU2NCB0eF9jb21wd2I7IAorCXU2NCB0eF9jb21wd2I7CiB9OwogCiAvKiB0aW55IGJ1ZmZlcnMgdG8gZGVhbCB3aXRoIHRhcmdldCBhYm9ydCBpc3N1ZS4gd2UgYWxsb2NhdGUgYSBiaXQKQEAgLTQyNzgsNyArNDI3OCw3IEBACiAJaW50IHR4X25ld1tOX1RYX1JJTkdTXSwgdHhfb2xkW05fVFhfUklOR1NdOwogCWludCByeF9vbGRbTl9SWF9ERVNDX1JJTkdTXTsKIAlpbnQgcnhfY3VyW05fUlhfQ09NUF9SSU5HU10sIHJ4X25ld1tOX1JYX0NPTVBfUklOR1NdOwotCWludCByeF9sYXN0W05fUlhfREVTQ19SSU5HU107IAorCWludCByeF9sYXN0W05fUlhfREVTQ19SSU5HU107CiAKIAkvKiBTZXQgd2hlbiBjaGlwIGlzIGFjdHVhbGx5IGluIG9wZXJhdGlvbmFsIHN0YXRlCiAJICogKGllLiBub3QgcG93ZXIgbWFuYWdlZCkgKi8KQEAgLTQzMzcsNyArNDMzNyw3IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgbWluX2ZyYW1lX3NpemU7IC8qIGZvciB0eCBmaWZvIHdvcmthcm91bmQgKi8KIAogCS8qIHBhZ2Ugc2l6ZSBhbGxvY2F0aW9uICovCi0JaW50ICAgICAgICAgICAgICAgICAgICAgcGFnZV9zaXplOyAKKwlpbnQgICAgICAgICAgICAgICAgICAgICBwYWdlX3NpemU7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgcGFnZV9vcmRlcjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICBtdHVfc3RyaWRlOwogCkBAIC00MzYyLDcgKzQzNjIsNyBAQAogI2lmZGVmIENPTkZJR19DQVNTSU5JX1FHRV9ERUJVRwogCWF0b21pY190IGludGVycnVwdF9zZWVuOyAvKiAxIGlmIGFueSBpbnRlcnJ1cHRzIGFyZSBnZXR0aW5nIHRocm91Z2ggKi8KICNlbmRpZgotCQorCiAJLyogTGluay1kb3duIHByb2JsZW0gd29ya2Fyb3VuZCAqLwogI2RlZmluZSBMSU5LX1RSQU5TSVRJT05fVU5LTk9XTiAJMAogI2RlZmluZSBMSU5LX1RSQU5TSVRJT05fT05fRkFJTFVSRSAJMQpAQCAtNDM4Myw3ICs0MzgzLDcgQEAKIAlpbnQgCQkJY2FzcmVnX2xlbjsgLyogcmVnLXNwYWNlIHNpemUgZm9yIGR1bXBpbmcgKi8KIAl1NjQJCQlwYXVzZV9lbnRlcmVkOwogCXUxNgkJCXBhdXNlX2xhc3RfdGltZV9yZWN2ZDsKLSAgCisKIAlkbWFfYWRkcl90IGJsb2NrX2R2bWEsIHR4X3RpbnlfZHZtYVtOX1RYX1JJTkdTXTsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtNDM5NCw3ICs0Mzk0LDcgQEAKICNkZWZpbmUgUlhfQ09NUF9FTlRSWShyLCB4KSAoKHgpICYgKFJYX0NPTVBfUklOR05fU0laRShyKSAtIDEpKQogCiAjZGVmaW5lIFRYX0JVRkZfQ09VTlQociwgeCwgeSkgICAgKCh4KSA8PSAoeSkgPyAoKHkpIC0gKHgpKSA6IFwKLSAgICAgICAgKFRYX0RFU0NfUklOR05fU0laRShyKSAtICh4KSArICh5KSkpICAgIAorICAgICAgICAoVFhfREVTQ19SSU5HTl9TSVpFKHIpIC0gKHgpICsgKHkpKSkKIAogI2RlZmluZSBUWF9CVUZGU19BVkFJTChjcCwgaSkJKChjcCktPnR4X29sZFsoaSldIDw9IChjcCktPnR4X25ld1soaSldID8gXAogICAgICAgICAoY3ApLT50eF9vbGRbKGkpXSArIChUWF9ERVNDX1JJTkdOX1NJWkUoaSkgLSAxKSAtIChjcCktPnR4X25ld1soaSldIDogXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCmluZGV4IGU2Nzg3MjQuLjVmMWIwNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKQEAgLTc3OSw3ICs3NzksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHQxX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0MV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzICAgICAgPSBnZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyAgICAgID0gc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyAgICAgICA9IGdldF9kcnZpbmZvLApAQCAtMTI0Myw3ICsxMjQzLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgdDFfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZkcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgdDFfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKaW5kZXggMGViMWY4Ny4uZjE1MDFiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKKysrIGIvZHJpdmVycy9uZXQvY3Jpcy9ldGhfdjEwLmMKQEAgLTQzNCw3ICs0MzQsNyBAQAogc3RhdGljIHZvaWQgZTEwMF9jbGVhcl9uZXR3b3JrX2xlZHModW5zaWduZWQgbG9uZyBkdW1teSk7CiBzdGF0aWMgdm9pZCBlMTAwX3NldF9uZXR3b3JrX2xlZHMoaW50IGFjdGl2ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wczsKIAogc3RhdGljIHZvaWQgYnJvYWRjb21fY2hlY2tfc3BlZWQoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CiBzdGF0aWMgdm9pZCBicm9hZGNvbV9jaGVja19kdXBsZXgoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7CkBAIC0xNTUyLDcgKzE1NTIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGUxMDBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwk9IGUxMDBfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJPSBlMTAwX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JPSBlMTAwX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3M4OXgwLmMgYi9kcml2ZXJzL25ldC9jczg5eDAuYwppbmRleCA0N2VlY2NlLi5lNGQ1MGYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jczg5eDAuYworKysgYi9kcml2ZXJzL25ldC9jczg5eDAuYwpAQCAtMTUsMTMgKzE1LDEzIEBACiAgIENoYW5nZWxvZzoKIAogICBNaWtlIENydXNlICAgICAgICA6IG1jcnVzZUBjdGktbHRkLmNvbQotICAgICAgICAgICAgICAgICAgICA6IENoYW5nZXMgZm9yIExpbnV4IDIuMCBjb21wYXRpYmlsaXR5LiAKKyAgICAgICAgICAgICAgICAgICAgOiBDaGFuZ2VzIGZvciBMaW51eCAyLjAgY29tcGF0aWJpbGl0eS4KICAgICAgICAgICAgICAgICAgICAgOiBBZGRlZCBkZXZfaWQgcGFyYW1ldGVyIGluIG5ldF9pbnRlcnJ1cHQoKSwKICAgICAgICAgICAgICAgICAgICAgOiByZXF1ZXN0X2lycSgpIGFuZCBmcmVlX2lycSgpLiBKdXN0IE5VTEwgZm9yIG5vdy4KIAogICBNaWtlIENydXNlICAgICAgICA6IEFkZGVkIE1PRF9JTkNfVVNFX0NPVU5UIGFuZCBNT0RfREVDX1VTRV9DT1VOVCBtYWNyb3MKICAgICAgICAgICAgICAgICAgICAgOiBpbiBuZXRfb3BlbigpIGFuZCBuZXRfY2xvc2UoKSBzbyBrZXJuZWxkIHdvdWxkIGtub3cKLSAgICAgICAgICAgICAgICAgICAgOiB0aGF0IHRoZSBtb2R1bGUgaXMgaW4gdXNlIGFuZCB3b3VsZG4ndCBlamVjdCB0aGUgCisgICAgICAgICAgICAgICAgICAgIDogdGhhdCB0aGUgbW9kdWxlIGlzIGluIHVzZSBhbmQgd291bGRuJ3QgZWplY3QgdGhlCiAgICAgICAgICAgICAgICAgICAgIDogZHJpdmVyIHByZW1hdHVyZWx5LgogCiAgIE1pa2UgQ3J1c2UgICAgICAgIDogUmV3cm90ZSBpbml0X21vZHVsZSgpIGFuZCBjbGVhbnVwX21vZHVsZSB1c2luZyA4MzkwLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogICBSdXNzIE5lbHNvbiAgICAgICA6IEp1bCAxMyAxOTk4LiAgQWRkZWQgUnhPbmx5IERNQSBzdXBwb3J0LgogCi0gIE1lbG9keSBMZWUgICAgICAgIDogQXVnIDEwIDE5OTkuICBDaGFuZ2VzIGZvciBMaW51eCAyLjIuNSBjb21wYXRpYmlsaXR5LiAKKyAgTWVsb2R5IExlZSAgICAgICAgOiBBdWcgMTAgMTk5OS4gIENoYW5nZXMgZm9yIExpbnV4IDIuMi41IGNvbXBhdGliaWxpdHkuCiAgICAgICAgICAgICAgICAgICAgIDogZW1haWw6IGV0aGVybmV0QGNyeXN0YWwuY2lycnVzLmNvbQogCiAgIEFsYW4gQ294ICAgICAgICAgIDogUmVtb3ZlZCAxLjIgc3VwcG9ydCwgYWRkZWQgMi4xIGV4dHJhIGNvdW50ZXJzLgpAQCAtMTYzLDEyICsxNjMsMTIgQEAKIC8qIEZpcnN0LCBhIGZldyBkZWZpbml0aW9ucyB0aGF0IHRoZSBicmF2ZSBtaWdodCBjaGFuZ2UuCiAgICBBIHplcm8tdGVybWluYXRlZCBsaXN0IG9mIEkvTyBhZGRyZXNzZXMgdG8gYmUgcHJvYmVkLiBTb21lIHNwZWNpYWwgZmxhZ3MuLgogICAgICAgQWRkciAmIDEgPSBSZWFkIGJhY2sgdGhlIGFkZHJlc3MgcG9ydCwgbG9vayBmb3Igc2lnbmF0dXJlIGFuZCByZXNldAotICAgICAgICAgICAgICAgICB0aGUgcGFnZSB3aW5kb3cgYmVmb3JlIHByb2JpbmcgCi0gICAgICBBZGRyICYgMyA9IFJlc2V0IHRoZSBwYWdlIHdpbmRvdyBhbmQgcHJvYmUgCisgICAgICAgICAgICAgICAgIHRoZSBwYWdlIHdpbmRvdyBiZWZvcmUgcHJvYmluZworICAgICAgQWRkciAmIDMgPSBSZXNldCB0aGUgcGFnZSB3aW5kb3cgYW5kIHByb2JlCiAgICBUaGUgQ0xQUyBldmFsIGJvYXJkIGhhcyB0aGUgQ2lycnVzIGNoaXAgYXQgMHg4MDA5MDMwMCwgaW4gQVJNIElPIHNwYWNlLAogICAgYnV0IGl0IGlzIHBvc3NpYmxlIHRoYXQgYSBDaXJydXMgYm9hcmQgY291bGQgYmUgcGx1Z2dlZCBpbnRvIHRoZSBJU0EKICAgIHNsb3RzLiAqLwotLyogVGhlIGNzODkwMCBoYXMgNCBJUlEgcGlucywgc29mdHdhcmUgc2VsZWN0YWJsZS4gY3M4OTAwX2lycV9tYXAgbWFwcyAKKy8qIFRoZSBjczg5MDAgaGFzIDQgSVJRIHBpbnMsIHNvZnR3YXJlIHNlbGVjdGFibGUuIGNzODkwMF9pcnFfbWFwIG1hcHMKICAgIHRoZW0gdG8gc3lzdGVtIElSUSBudW1iZXJzLiBUaGlzIG1hcHBpbmcgaXMgY2FyZCBzcGVjaWZpYyBhbmQgaXMgc2V0IHRvCiAgICB0aGUgY29uZmlndXJhdGlvbiBvZiB0aGUgQ2lycnVzIEV2YWwgYm9hcmQgZm9yIHRoaXMgY2hpcC4gKi8KICNpZmRlZiBDT05GSUdfQVJDSF9DTFBTNzUwMApAQCAtMjk5LDcgKzI5OSw3IEBACiAKIF9fc2V0dXAoImNzODl4MF9tZWRpYT0iLCBtZWRpYV9mbik7CiAKLQwKKwogLyogQ2hlY2sgZm9yIGEgbmV0d29yayBhZGFwdG9yIG9mIHRoaXMgdHlwZSwgYW5kIHJldHVybiAnMCcgaWZmIG9uZSBleGlzdHMuCiAgICBJZiBkZXYtPmJhc2VfYWRkciA9PSAwLCBwcm9iZSBhbGwgbGlrZWx5IGxvY2F0aW9ucy4KICAgIElmIGRldi0+YmFzZV9hZGRyID09IDEsIGFsd2F5cyByZXR1cm4gZmFpbHVyZS4KQEAgLTYzMCw3ICs2MzAsNyBAQAogCSAgICAgICBkZXYtPmJhc2VfYWRkcik7CiAKIAlyZXNldF9jaGlwKGRldik7Ci0gICAKKwogICAgICAgICAvKiBIZXJlIHdlIHJlYWQgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBvZiB0aGUgY2hpcC4gSWYgdGhlcmUKIAkgICBpcyBubyBFeHRlbmRlZCBFRVBST00gdGhlbiB0aGUgaWRlYSBpcyB0byBub3QgZGlzdHVyYiB0aGUgY2hpcAogCSAgIGNvbmZpZ3VyYXRpb24sIGl0IHNob3VsZCBoYXZlIGJlZW4gY29ycmVjdGx5IHNldHVwIGJ5IGF1dG9tYXRpYwpAQCAtNjU0LDcgKzY1NCw3IEBACiAJCWNudCA9ICgqY29uZmQrKyAmIDB4MDBmZikgPj4gMTsKIAkJd2hpbGUgKC0tY250ID4gMCkgewogCQkJX191MTYgaiA9ICpjb25mZCsrOwotCQkJCisKIAkJCXN3aXRjaCAoaiAmIDB4MGZmZikgewogCQkJY2FzZSBQUF9JQToKIAkJCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU4vMjsgaSsrKSB7CkBAIC02NzAsNyArNjcwLDcgQEAKIAl9IGVsc2UKICNlbmRpZgogCi0gICAgICAgIGlmICgocmVhZHJlZyhkZXYsIFBQX1NlbGZTVCkgJiAoRUVQUk9NX09LIHwgRUVQUk9NX1BSRVNFTlQpKSA9PSAKKyAgICAgICAgaWYgKChyZWFkcmVnKGRldiwgUFBfU2VsZlNUKSAmIChFRVBST01fT0sgfCBFRVBST01fUFJFU0VOVCkpID09CiAJICAgICAgKEVFUFJPTV9PS3xFRVBST01fUFJFU0VOVCkpIHsKIAkgICAgICAgIC8qIExvYWQgdGhlIE1BQy4gKi8KIAkJZm9yIChpPTA7IGkgPCBFVEhfQUxFTi8yOyBpKyspIHsKQEAgLTY3OSwxNyArNjc5LDE3IEBACiAJCSAgICAgICAgZGV2LT5kZXZfYWRkcltpKjJdID0gQWRkciAmIDB4RkY7CiAJCSAgICAgICAgZGV2LT5kZXZfYWRkcltpKjIrMV0gPSBBZGRyID4+IDg7CiAJCX0KLSAgIAotCSAgIAkvKiBMb2FkIHRoZSBBZGFwdGVyIENvbmZpZ3VyYXRpb24uIAotCQkgICBOb3RlOiAgQmFycmluZyBhbnkgbW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmcm9tIHNvbWUgCi0JCSAgIG90aGVyIHNvdXJjZSAoaWUgRUVQUk9NK1NjaGVtYXRpY3MpLCB3ZSB3b3VsZCBub3Qga25vdyAKLQkJICAgaG93IHRvIG9wZXJhdGUgYSAxMEJhc2UyIGludGVyZmFjZSBvbiB0aGUgQVVJIHBvcnQuIAotCQkgICBIb3dldmVyLCBzaW5jZSB3ZSAgZG8gcmVhZCB0aGUgc3RhdHVzIG9mIEhDQjEgYW5kIHVzZSAKLQkJICAgc2V0dGluZ3MgdGhhdCBhbHdheXMgcmVzdWx0IGluIGNhbGxzIHRvIGNvbnRyb2xfZGNfZGMoZGV2LDApIAotCQkgICBhIEJOQyBpbnRlcmZhY2Ugc2hvdWxkIHdvcmsgaWYgdGhlIGVuYWJsZSBwaW4gCi0JCSAgIChkYy9kYyBjb252ZXJ0ZXIpIGlzIG9uIEhDQjEuIEl0IHdpbGwgYmUgY2FsbGVkIEFVSSAKKworCSAgIAkvKiBMb2FkIHRoZSBBZGFwdGVyIENvbmZpZ3VyYXRpb24uCisJCSAgIE5vdGU6ICBCYXJyaW5nIGFueSBtb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIGZyb20gc29tZQorCQkgICBvdGhlciBzb3VyY2UgKGllIEVFUFJPTStTY2hlbWF0aWNzKSwgd2Ugd291bGQgbm90IGtub3cKKwkJICAgaG93IHRvIG9wZXJhdGUgYSAxMEJhc2UyIGludGVyZmFjZSBvbiB0aGUgQVVJIHBvcnQuCisJCSAgIEhvd2V2ZXIsIHNpbmNlIHdlICBkbyByZWFkIHRoZSBzdGF0dXMgb2YgSENCMSBhbmQgdXNlCisJCSAgIHNldHRpbmdzIHRoYXQgYWx3YXlzIHJlc3VsdCBpbiBjYWxscyB0byBjb250cm9sX2RjX2RjKGRldiwwKQorCQkgICBhIEJOQyBpbnRlcmZhY2Ugc2hvdWxkIHdvcmsgaWYgdGhlIGVuYWJsZSBwaW4KKwkJICAgKGRjL2RjIGNvbnZlcnRlcikgaXMgb24gSENCMS4gSXQgd2lsbCBiZSBjYWxsZWQgQVVJCiAJCSAgIGhvd2V2ZXIuICovCi0JICAgCisKIAkJbHAtPmFkYXB0ZXJfY25mID0gMDsKIAkJaSA9IHJlYWRyZWcoZGV2LCBQUF9MaW5lQ1RMKTsKIAkJLyogUHJlc2VydmUgdGhlIHNldHRpbmcgb2YgdGhlIEhDQjEgcGluLiAqLwpAQCAtNzA2LDIyICs3MDYsMjIgQEAKIAkJCWxwLT5hZGFwdGVyX2NuZiB8PSAgQV9DTkZfQVVJIHwgQV9DTkZfTUVESUFfQVVJOwogCQkvKiBDaGVjayBpZiB0aGUgY2FyZCBpcyBpbiBBdXRvIG1vZGUuICovCiAJCWlmICgoaSAmIChBVUlfT05MWSB8IEFVVE9fQVVJXzEwQkFTRVQpKSA9PSBBVVRPX0FVSV8xMEJBU0VUKQotCQkJbHAtPmFkYXB0ZXJfY25mIHw9ICBBX0NORl9BVUkgfCBBX0NORl8xMEJfVCB8IAorCQkJbHAtPmFkYXB0ZXJfY25mIHw9ICBBX0NORl9BVUkgfCBBX0NORl8xMEJfVCB8CiAJCQlBX0NORl9NRURJQV9BVUkgfCBBX0NORl9NRURJQV8xMEJfVCB8IEFfQ05GX01FRElBX0FVVE87Ci0JCQorCiAJCWlmIChuZXRfZGVidWcgPiAxKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFBQX0xpbmVDVEw9MHgleCwgYWRhcHRlcl9jbmY9MHgleFxuIiwKIAkJCQkJZGV2LT5uYW1lLCBpLCBscC0+YWRhcHRlcl9jbmYpOwogCiAJCS8qIElSUS4gT3RoZXIgY2hpcHMgYWxyZWFkeSBwcm9iZSwgc2VlIGJlbG93LiAqLwotCQlpZiAobHAtPmNoaXBfdHlwZSA9PSBDUzg5MDApIAorCQlpZiAobHAtPmNoaXBfdHlwZSA9PSBDUzg5MDApCiAJCQlscC0+aXNhX2NvbmZpZyA9IHJlYWRyZWcoZGV2LCBQUF9DUzg5MDBfSVNBSU5UKSAmIElOVF9OT19NQVNLOwotCSAgIAorCiAJCXByaW50ayggIltDaXJydXMgRUVQUk9NXSAiKTsKIAl9CiAKICAgICAgICAgcHJpbnRrKCJcbiIpOwotICAgCisKIAkvKiBGaXJzdCBjaGVjayB0byBzZWUgaWYgYW4gRUVQUk9NIGlzIGF0dGFjaGVkLiAqLwogI2lmZGVmIENPTkZJR19TSF9ISUNPU0g0IC8qIG5vIEVFUFJPTSBvbiBIaUNPLCBkb24ndCBoYXp6bGUgd2l0aCBpdCBoZXJlICovCiAJaWYgKDEpIHsKQEAgLTczNiwxMyArNzM2LDEzIEBACiAJCS8qIENoZWNrIGlmIHRoZSBjaGlwIHdhcyBhYmxlIHRvIHJlYWQgaXRzIG93biBjb25maWd1cmF0aW9uIHN0YXJ0aW5nCiAJCSAgIGF0IDAgaW4gdGhlIEVFUFJPTSovCiAJCWlmICgocmVhZHJlZyhkZXYsIFBQX1NlbGZTVCkgJiAoRUVQUk9NX09LIHwgRUVQUk9NX1BSRVNFTlQpKSAhPQotCQkgICAgKEVFUFJPTV9PS3xFRVBST01fUFJFU0VOVCkpIAorCQkgICAgKEVFUFJPTV9PS3xFRVBST01fUFJFU0VOVCkpCiAgICAgICAgICAgICAgICAgCXByaW50ayhLRVJOX1dBUk5JTkcgImNzODl4MDogRXh0ZW5kZWQgRUVQUk9NIGNoZWNrc3VtIGJhZCBhbmQgbm8gQ2lycnVzIEVFUFJPTSwgcmVseWluZyBvbiBjb21tYW5kIGxpbmVcbiIpOwotCQkgICAKKwogICAgICAgICB9IGVsc2UgewogCQkvKiBUaGlzIHJlYWRzIGFuIGV4dGVuZGVkIEVFUFJPTSB0aGF0IGlzIG5vdCBkb2N1bWVudGVkCiAJCSAgIGluIHRoZSBDUzg5MDAgZGF0YXNoZWV0LiAqLwotCQkKKwogICAgICAgICAgICAgICAgIC8qIGdldCB0cmFuc21pc3Npb24gY29udHJvbCB3b3JkICBidXQga2VlcCB0aGUgYXV0b25lZ290aWF0aW9uIGJpdHMgKi8KICAgICAgICAgICAgICAgICBpZiAoIWxwLT5hdXRvX25lZ19jbmYpIGxwLT5hdXRvX25lZ19jbmYgPSBlZXByb21fYnVmZltBVVRPX05FR19DTkZfT0ZGU0VULzJdOwogICAgICAgICAgICAgICAgIC8qIFN0b3JlIGFkYXB0ZXIgY29uZmlndXJhdGlvbiAqLwpAQCAtODEwLDcgKzgxMCw3IEBACiAJCQkJcHJpbnRrKCJcbmNzODl4MDogaW52YWxpZCBJU0EgaW50ZXJydXB0IG51bWJlciAlZFxuIiwgaSk7CiAJCQllbHNlCiAJCQkJaSA9IGNzODkwMF9pcnFfbWFwW2ldOwotCQkJCisKIAkJCWxwLT5pcnFfbWFwID0gQ1M4OTAwX0lSUV9NQVA7IC8qIGZpeGVkIElSUSBtYXAgZm9yIENTODkwMCAqLwogCQl9IGVsc2UgewogCQkJaW50IGlycV9tYXBfYnVmZltJUlFfTUFQX0xFTi8yXTsKQEAgLTg3NSw3ICs4NzUsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogVGhpcyBwYWdlIGNvbnRhaW5zIERNQSByb3V0aW5lcwogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTEwNjQsMTQgKzEwNjQsMTQgQEAKIAkJOwogfQogCi0MCisKIHN0YXRpYyB2b2lkCiBjb250cm9sX2RjX2RjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBvbl9ub3Rfb2ZmKQogewogCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc2VsZmNvbnRyb2w7CiAJaW50IHRpbWVub3cgPSBqaWZmaWVzOwotCS8qIGNvbnRyb2wgdGhlIERDIHRvIERDIGNvbnZlcnRvciBpbiB0aGUgU2VsZkNvbnRyb2wgcmVnaXN0ZXIuICAKKwkvKiBjb250cm9sIHRoZSBEQyB0byBEQyBjb252ZXJ0b3IgaW4gdGhlIFNlbGZDb250cm9sIHJlZ2lzdGVyLgogCSAgIE5vdGU6IFRoaXMgaXMgaG9va2VkIHVwIHRvIGEgZ2VuZXJhbCBwdXJwb3NlIHBpbiwgbWlnaHQgbm90CiAJICAgYWx3YXlzIGJlIGEgREMgdG8gREMgY29udmVydG9yLiAqLwogCkBAIC0xMjQwLDcgKzEyNDAsNyBAQAogCQlyZXR1cm4gREVURUNURURfTk9ORTsKIH0KIAotDAorCiBzdGF0aWMgdm9pZAogd3JpdGVfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjaGlwX3R5cGUsIGludCBpcnEpCiB7CkBAIC0xNTQ0LDcgKzE1NDQsNyBAQAogCQkgKiBHYXNwISAgSXQgaGFzbid0LiAgQnV0IHRoYXQgc2hvdWxkbid0IGhhcHBlbiBzaW5jZQogCQkgKiB3ZSdyZSB3YWl0aW5nIGZvciBUeE9rLCBzbyByZXR1cm4gMSBhbmQgcmVxdWV1ZSB0aGlzIHBhY2tldC4KIAkJICovCi0JCQorCiAJCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCQlpZiAobmV0X2RlYnVnKSBwcmludGsoImNzODl4MDogVHggYnVmZmVyIG5vdCBmcmVlIVxuIik7CiAJCXJldHVybiAxOwpAQCAtMTU2OSwxMCArMTU2OSwxMCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0MCisKIC8qIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6CiAgICBIYW5kbGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGludGVycnVwdHMuICovCi0gICAKKwogc3RhdGljIGlycXJldHVybl90IG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKQEAgLTE3NDAsNyArMTc0MCw3IEBACiAjZW5kaWYKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCXdyaXRlcmVnKGRldiwgUFBfUnhDRkcsIDApOwogCXdyaXRlcmVnKGRldiwgUFBfVHhDRkcsIDApOwogCXdyaXRlcmVnKGRldiwgUFBfQnVmQ0ZHLCAwKTsKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJCS8qIFRoZSBtdWx0aWNhc3QtYWNjZXB0IGxpc3QgaXMgaW5pdGlhbGl6ZWQgdG8gYWNjZXB0LWFsbCwgYW5kIHdlCiAJCSAgIHJlbHkgb24gaGlnaGVyLWxldmVsIGZpbHRlcmluZyBmb3Igbm93LiAqLwogCQlscC0+cnhfbW9kZSA9IFJYX01VTFRDQVNUX0FDQ0VQVDsKLQl9IAorCX0KIAllbHNlCiAJCWxwLT5yeF9tb2RlID0gMDsKIApAQCAtMTgzMyw4ICsxODMzLDggQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2NzODl4MDsKIAogLyoKLSAqIFN1cHBvcnQgdGhlICdkZWJ1ZycgbW9kdWxlIHBhcm0gZXZlbiBpZiB3ZSdyZSBjb21waWxlZCBmb3Igbm9uLWRlYnVnIHRvIAotICogYXZvaWQgYnJlYWtpbmcgc29tZW9uZSdzIHN0YXJ0dXAgc2NyaXB0cyAKKyAqIFN1cHBvcnQgdGhlICdkZWJ1ZycgbW9kdWxlIHBhcm0gZXZlbiBpZiB3ZSdyZSBjb21waWxlZCBmb3Igbm9uLWRlYnVnIHRvCisgKiBhdm9pZCBicmVha2luZyBzb21lb25lJ3Mgc3RhcnR1cCBzY3JpcHRzCiAgKi8KIAogc3RhdGljIGludCBpbzsKQEAgLTE5MDUsOCArMTkwNSw3IEBACiAKICovCiAKLWludAotaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscDsKQEAgLTE5ODQsNyArMTk4Myw3IEBACiAJZnJlZV9uZXRkZXYoZGV2X2NzODl4MCk7CiB9CiAjZW5kaWYgLyogTU9EVUxFICovCi0MCisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiAgdmVyc2lvbi1jb250cm9sOiB0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jczg5eDAuaCBiL2RyaXZlcnMvbmV0L2NzODl4MC5oCmluZGV4IDk2OGZlMTEuLjIwNGVkMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NzODl4MC5oCisrKyBiL2RyaXZlcnMvbmV0L2NzODl4MC5oCkBAIC00MjcsOCArNDI3LDggQEAKICNkZWZpbmUgRE1BX1NJWkUgKDE2KjEwMjQpIC8qICBTaXplIG9mIGRtYSBidWZmZXIgLSAxNmsgKi8KIAogI2RlZmluZSBDUzg5MDAgMHgwMDAwCi0jZGVmaW5lIENTODkyMCAweDQwMDAgICAKLSNkZWZpbmUgQ1M4OTIwTSAweDYwMDAgICAKKyNkZWZpbmUgQ1M4OTIwIDB4NDAwMAorI2RlZmluZSBDUzg5MjBNIDB4NjAwMAogI2RlZmluZSBSRVZJU09OX0JJVFMgMHgxRjAwCiAjZGVmaW5lIEVFVkVSX05VTUJFUiAweDEyCiAjZGVmaW5lIENIS1NVTV9MRU4gMHgxNApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGU2MDAuYyBiL2RyaXZlcnMvbmV0L2RlNjAwLmMKaW5kZXggNTZhMTAwZi4uMGI5MzBkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGU2MDAuYworKysgYi9kcml2ZXJzL25ldC9kZTYwMC5jCkBAIC0xNzksNyArMTc5LDcgQEAKICAqIENvcHkgYSBidWZmZXIgdG8gdGhlIGFkYXB0ZXIgdHJhbnNtaXQgcGFnZSBtZW1vcnkuCiAgKiBTdGFydCBzZW5kaW5nLgogICovCi0gCisKIHN0YXRpYyBpbnQgZGU2MDBfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0yNzIsNyArMjcyLDcgQEAKIAl9CiAKIAlzcGluX2xvY2soJmRlNjAwX2xvY2spOwotCQorCiAJc2VsZWN0X25pYygpOwogCWlycV9zdGF0dXMgPSBkZTYwMF9yZWFkX3N0YXR1cyhkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZTYyMC5jIGIvZHJpdmVycy9uZXQvZGU2MjAuYwppbmRleCAyMmZjNWI4Li5hMThkNGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZTYyMC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlNjIwLmMKQEAgLTQwLDcgKzQwLDcgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9CiAJImRlNjIwLmM6ICRSZXZpc2lvbjogMS40MCAkLCAgQmpvcm4gRWt3YWxsIDxiajBybkBibG94LnNlPlxuIjsKLQwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogIlR1bmluZyIgc2VjdGlvbi4KQEAgLTExNSw3ICsxMTUsNyBAQAogI2RlZmluZSBDT1VOVF9MT09QUwogICovCiAjZW5kaWYKLQwKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0yNTAsNyArMjUwLDcgQEAKIAlieXRlCU1lZGlhOwogCWJ5dGUJU0NSOwogfSBuaWNfZGF0YTsKLQwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiBDb252ZW5pZW5jZSBtYWNyb3MvZnVuY3Rpb25zIGZvciBELUxpbmsgREUtNjIwIGFkYXB0ZXIgKgpAQCAtNDMyLDcgKzQzMiw3IEBACiAKIAlyZXR1cm4gdmFsdWU7CiB9Ci0MCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLgpAQCAtNTE1LDEwICs1MTUsMTAgQEAKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCQorICoKICAqIEhhbmRsZSB0aW1lb3V0cyBvbiB0cmFuc21pdAogICovCi0gCisKIHN0YXRpYyB2b2lkIGRlNjIwX3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCAlcz9cbiIsIGRldi0+bmFtZSwgIm5ldHdvcmsgY2FibGUgcHJvYmxlbSIpOwpAQCAtNTQwLDkgKzU0MCw5IEBACiAJYnl0ZSB1c2luZ190eGJ1ZjsKIAogCXVzaW5nX3R4YnVmID0gZGU2MjBfdHhfYnVmZnMoZGV2KTsgLyogUGVlayBhdCB0aGUgYWRhcHRlciAqLwotCQorCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQorCiAKIAlpZiAoKGxlbiA9IHNrYi0+bGVuKSA8IFJVTlQpCiAJCWxlbiA9IFJVTlQ7CkBAIC01ODQsNyArNTg0LDcgQEAKIAlkZXZfa2ZyZWVfc2tiIChza2IpOwogCXJldHVybiAwOwogfQotDAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBIYW5kbGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGludGVycnVwdHMuCkBAIC01OTksNyArNTk5LDcgQEAKIAlpbnQgYWdhaW4gPSAwOwogCiAJc3Bpbl9sb2NrKCZkZTYyMF9sb2NrKTsKLQkKKwogCS8qIFJlYWQgdGhlIHN0YXR1cyByZWdpc3RlciAoX25vdF8gdGhlIHN0YXR1cyBwb3J0KSAqLwogCWlycV9zdGF0dXMgPSBkZTYyMF9nZXRfcmVnaXN0ZXIoZGV2LCBSX1NUUyk7CiAKQEAgLTYxNSw3ICs2MTUsNyBAQAogCiAJaWYoZGU2MjBfdHhfYnVmZnMoZGV2KSAhPSAoVFhCRjAgfCBUWEJGMSkpCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCisKIAlzcGluX3VubG9jaygmZGU2MjBfbG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtNzIwLDcgKzcyMCw3IEBACiAKIAlyZXR1cm4gKG5leHRfcnhfcGFnZSAhPSBjdXJyX3BhZ2UpOyAvKiBUaGF0IHdhcyBzbGlnaHRseSB0cmlja3kuLi4gKi8KIH0KLQwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFJlc2V0IHRoZSBhZGFwdGVyIHRvIGEga25vd24gc3RhdGUKQEAgLTgwMyw3ICs4MDMsNyBAQAogCiAJcmV0dXJuIDA7IC8qIGFsbCBvayAqLwogfQotDAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogT25seSBzdGFydC11cCBjb2RlIGJlbG93CkBAIC04MjcsNyArODI3LDcgQEAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAKIAlzcGluX2xvY2tfaW5pdCgmZGU2MjBfbG9jayk7Ci0JCisKIAkvKgogCSAqIFRoaXMgaXMgd2hlcmUgdGhlIGJhc2VfYWRkciBhbmQgaXJxIGdldHMgc2V0LgogCSAqIFR1bmFibGUgYXQgY29tcGlsZS10aW1lIGFuZCBpbnNtb2QtdGltZQpAQCAtODQwLDcgKzg0MCw3IEBACiAJCXNwcmludGYoZGV2LT5uYW1lLCAiZXRoJWQiLCB1bml0KTsKIAkJbmV0ZGV2X2Jvb3Rfc2V0dXBfY2hlY2soZGV2KTsKIAl9Ci0JCisKIAlpZiAoZGU2MjBfZGVidWcpCiAJCXByaW50ayh2ZXJzaW9uKTsKIApAQCAtODg5LDcgKzg4OSw3IEBACiAJZGV2LT50eF90aW1lb3V0IAk9IGRlNjIwX3RpbWVvdXQ7CiAJZGV2LT53YXRjaGRvZ190aW1lbwk9IEhaKjI7CiAJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBkZTYyMF9zZXRfbXVsdGljYXN0X2xpc3Q7Ci0JCisKIAkvKiBiYXNlX2FkZHIgYW5kIGlycSBhcmUgYWxyZWFkeSBzZXQsIHNlZSBhYm92ZSEgKi8KIAogCS8qIGR1bXAgZWVwcm9tICovCkBAIC05MTcsNyArOTE3LDcgQEAKIG91dDoKIAlyZXR1cm4gRVJSX1BUUihlcnIpOwogfQotDAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFJlYWQgaW5mbyBmcm9tIG9uLWJvYXJkIEVFUFJPTQpAQCAtMTAwMyw3ICsxMDAzLDcgQEAKIAogCXJldHVybiAwOyAvKiBubyBlcnJvcnMgKi8KIH0KLQwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIExvYWRhYmxlIG1vZHVsZSBza2VsZXRvbgpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKICNlbmRpZiAvKiBNT0RVTEUgKi8KIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotDAorCiAvKgogICogKGFkZCAnLURNT0RVTEUnIHdoZW4gY29tcGlsaW5nIGFzIGxvYWRhYmxlIG1vZHVsZSkKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWNsYW5jZS5jIGIvZHJpdmVycy9uZXQvZGVjbGFuY2UuYwppbmRleCA2YWQ1Nzk2Li5iYmNjZDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKQEAgLTEsNCArMSw0IEBACi0vKiAgICAgCisvKgogICogICAgTGFuY2UgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgTUlQUyBwcm9jZXNzb3IgYmFzZWQKICAqICAgICAgREVDc3RhdGlvbiBmYW1pbHkKICAqCkBAIC0xNTgsOSArMTU4LDkgQEAKIAogLyogVGhlIERTMjAwMC8zMDAwIGhhdmUgYSBsaW5lYXIgNjQgS0IgYnVmZmVyLgogCi0gKiBUaGUgUE1BRC1BQSBoYXMgMTI4IGtiIGJ1ZmZlciBvbi1ib2FyZC4gCisgKiBUaGUgUE1BRC1BQSBoYXMgMTI4IGtiIGJ1ZmZlciBvbi1ib2FyZC4KICAqCi0gKiBUaGUgSU9BU0lDIExBTkNFIGRldmljZXMgdXNlIGEgc2hhcmVkIG1lbW9yeSByZWdpb24uIFRoaXMgcmVnaW9uIGFzIHNlZW4gCisgKiBUaGUgSU9BU0lDIExBTkNFIGRldmljZXMgdXNlIGEgc2hhcmVkIG1lbW9yeSByZWdpb24uIFRoaXMgcmVnaW9uIGFzIHNlZW4KICAqIGZyb20gdGhlIENQVSBpcyAobWF4KSAxMjggS0IgbG9uZyBhbmQgaGFzIHRvIGJlIG9uIGFuIDEyOCBLQiBib3VuZGFyeS4KICAqIFRoZSBMQU5DRSBzZWVzIHRoaXMgYXMgYSA2NCBLQiBsb25nIGNvbnRpbnVvdXMgbWVtb3J5IHJlZ2lvbi4KICAqCkBAIC04ODIsNyArODgyLDcgQEAKIAlza2JsZW4gPSBza2ItPmxlbjsKIAogCWxlbiA9IHNrYmxlbjsKLQkKKwogCWlmIChsZW4gPCBFVEhfWkxFTikgewogCQlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWZ4eC5jIGIvZHJpdmVycy9uZXQvZGVmeHguYwppbmRleCA5MWNjOGNiLi5hZTk2ODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZWZ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKQEAgLTI3NSw3ICsyNzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnJvb3RfZGZ4X2Vpc2FfZGV2OwogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfcG9ydF93cml0ZV9ieXRlID0KQEAgLTI4MywxMyArMjgzLDEzIEBACiAgKiA9IGRmeF9wb3J0X3dyaXRlX2xvbmcgPQogICogPSBkZnhfcG9ydF9yZWFkX2xvbmcgID0KICAqID09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBSb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyB2YWx1ZXMgZnJvbS90byBhZGFwdGVyCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgTm9uZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAgICAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKiAgIG9mZnNldCAtIHJlZ2lzdGVyIG9mZnNldCBmcm9tIGJhc2UgSS9PIGFkZHJlc3MKQEAgLTMwMSw3ICszMDEsNyBAQAogICogRnVuY3Rpb25hbCBEZXNjcmlwdGlvbjoKICAqICAgVGhlc2Ugcm91dGluZXMgcGVyZm9ybSB0aGUgY29ycmVjdCBvcGVyYXRpb24gdG8gcmVhZCBvciB3cml0ZQogICogICB0aGUgYWRhcHRlciByZWdpc3Rlci4KLSAqICAgCisgKgogICogICBFSVNBIHBvcnQgYmxvY2sgYmFzZSBhZGRyZXNzZXMgYXJlIGJhc2VkIG9uIHRoZSBzbG90IG51bWJlciBpbiB3aGljaCB0aGUKICAqICAgY29udHJvbGxlciBpcyBpbnN0YWxsZWQuICBGb3IgZXhhbXBsZSwgaWYgdGhlIEVJU0EgY29udHJvbGxlciBpcyBpbnN0YWxsZWQKICAqICAgaW4gc2xvdCA0LCB0aGUgcG9ydCBibG9jayBiYXNlIGFkZHJlc3MgaXMgMHg0MDAwLiAgSWYgdGhlIGNvbnRyb2xsZXIgaXMKQEAgLTM3NywxOCArMzc3LDE4IEBACiAJKmRhdGEgPSBpbmwocG9ydCk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09CiAgKiA9IGRmeF9pbml0X29uZV9wY2lfb3JfZWlzYSA9CiAgKiA9PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBJbml0aWFsaXplcyBhIHN1cHBvcnRlZCBGRERJIEVJU0Egb3IgUENJIGNvbnRyb2xsZXIKLSAqICAKKyAqCiAgKiBSZXR1cm5zOgogICogICBDb25kaXRpb24gY29kZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBwZGV2IC0gcG9pbnRlciB0byBwY2kgZGV2aWNlIGluZm9ybWF0aW9uIChOVUxMIGZvciBFSVNBKQogICogICBpb2FkZHIgLSBwb2ludGVyIHRvIHBvcnQgKE5VTEwgZm9yIFBDSSkKQEAgLTUzNywxOCArNTM3LDE4IEBACiAJfQogCXJldHVybiByYzsKIH0KLQwKKwogLyoKICAqID09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2J1c19pbml0ID0KICAqID09PT09PT09PT09PT09PT0KLSAqICAgCisgKgogICogT3ZlcnZpZXc6CiAgKiAgIEluaXRpYWxpemVzIEVJU0EgYW5kIFBDSSBjb250cm9sbGVyIGJ1cy1zcGVjaWZpYyBsb2dpYy4KLSAqICAKKyAqCiAgKiBSZXR1cm5zOgogICogICBOb25lCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGRldiAtIHBvaW50ZXIgdG8gZGV2aWNlIGluZm9ybWF0aW9uCiAgKgpAQCAtNjcyLDE5ICs2NzIsMTkgQEAKIAkJfQogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09PT09CiAgKiA9IGRmeF9idXNfY29uZmlnX2NoZWNrID0KICAqID09PT09PT09PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgQ2hlY2tzIHRoZSBjb25maWd1cmF0aW9uIChidXJzdCBzaXplLCBmdWxsLWR1cGxleCwgZXRjLikgIElmIGFueSBwYXJhbWV0ZXJzCiAgKiAgIGFyZSBpbGxlZ2FsLCB0aGVuIHRoaXMgcm91dGluZSB3aWxsIHNldCBuZXcgZGVmYXVsdHMuCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgTm9uZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAtIHBvaW50ZXIgdG8gYm9hcmQgaW5mb3JtYXRpb24KICAqCkBAIC03NjYsMTkgKzc2NiwxOSBAQAogCQl9CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09CiAgKiA9IGRmeF9kcml2ZXJfaW5pdCA9CiAgKiA9PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBJbml0aWFsaXplcyByZW1haW5pbmcgYWRhcHRlciBib2FyZCBzdHJ1Y3R1cmUgaW5mb3JtYXRpb24KICAqICAgYW5kIG1ha2VzIHN1cmUgYWRhcHRlciBpcyBpbiBhIHNhZmUgc3RhdGUgcHJpb3IgdG8gZGZ4X29wZW4oKS4KLSAqICAKKyAqCiAgKiBSZXR1cm5zOgogICogICBDb25kaXRpb24gY29kZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBkZXYgLSBwb2ludGVyIHRvIGRldmljZSBpbmZvcm1hdGlvbgogICogICBwcmludF9uYW1lIC0gcHJpbnRhYmxlIGRldmljZSBuYW1lCkBAIC05ODQsMTggKzk4NCwxOCBAQAogCXJldHVybihERlhfS19TVUNDRVNTKTsKIH0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2FkYXBfaW5pdCA9CiAgKiA9PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgQnJpbmdzIHRoZSBhZGFwdGVyIHRvIHRoZSBsaW5rIGF2YWlsL2xpbmsgdW5hdmFpbGFibGUgc3RhdGUuCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgQ29uZGl0aW9uIGNvZGUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKiAgIGdldF9idWZmZXJzIC0gbm9uLXplcm8gaWYgYnVmZmVycyB0byBiZSBhbGxvY2F0ZWQKQEAgLTExODgsMTggKzExODgsMTggQEAKIAlyZXR1cm4oREZYX0tfU1VDQ0VTUyk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT0KICAqID0gZGZ4X29wZW4gPQogICogPT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBPcGVucyB0aGUgYWRhcHRlcgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIENvbmRpdGlvbiBjb2RlCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGRldiAtIHBvaW50ZXIgdG8gZGV2aWNlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTIyNSw3ICsxMjI1LDcgQEAKIAlERlhfYm9hcmRfdAkqYnAgPSBkZXYtPnByaXY7CiAKIAlEQkdfcHJpbnRrKCJJbiBkZnhfb3Blbi4uLlxuIik7Ci0JCisKIAkvKiBSZWdpc3RlciBJUlEgLSBzdXBwb3J0IHNoYXJlZCBpbnRlcnJ1cHRzIGJ5IHBhc3NpbmcgZGV2aWNlIHB0ciAqLwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIGRmeF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CkBAIC0xMjc2LDE4ICsxMjc2LDE4IEBACiAJcmV0dXJuKDApOwogfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09CiAgKiA9IGRmeF9jbG9zZSA9CiAgKiA9PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBDbG9zZXMgdGhlIGRldmljZS9tb2R1bGUuCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgQ29uZGl0aW9uIGNvZGUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgZGV2IC0gcG9pbnRlciB0byBkZXZpY2UgaW5mb3JtYXRpb24KICAqCkBAIC0xMzYwLDI2ICsxMzYwLDI2IEBACiAJLyogQ2xlYXIgZGV2aWNlIHN0cnVjdHVyZSBmbGFncyAqLwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQorCiAJLyogRGVyZWdpc3RlciAoZnJlZSkgSVJRICovCiAKIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkKKwogCXJldHVybigwKTsKIH0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfaW50X3ByX2hhbHRfaWQgPQogICogPT09PT09PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgRGlzcGxheXMgaGFsdCBpZCdzIGluIHN0cmluZyBmb3JtLgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIE5vbmUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKgpAQCAtMTQ1MiwxOCArMTQ1MiwxOCBAQAogCQl9CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfaW50X3R5cGVfMF9wcm9jZXNzID0KICAqID09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBQcm9jZXNzZXMgVHlwZSAwIGludGVycnVwdHMuCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgTm9uZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAtIHBvaW50ZXIgdG8gYm9hcmQgaW5mb3JtYXRpb24KICAqCkBAIC0xNTY5LDcgKzE1NjksNyBAQAogCS8qIENoZWNrIGZvciBhZGFwdGVyIHN0YXRlIGNoYW5nZSAqLwogCiAJaWYgKHR5cGVfMF9zdGF0dXMgJiBQSV9UWVBFXzBfU1RBVF9NX1NUQVRFX0NIQU5HRSkKLQkJeyAgICAgICAgICAgICAgICAgICAgIAorCQl7CiAJCS8qIEdldCBsYXRlc3QgYWRhcHRlciBzdGF0ZSAqLwogCiAJCXN0YXRlID0gZGZ4X2h3X2FkYXBfc3RhdGVfcmQoYnApOwkvKiBnZXQgYWRhcHRlciBzdGF0ZSAqLwpAQCAtMTYwNCwxOCArMTYwNCwxOCBAQAogCQl9CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2ludF9jb21tb24gPQogICogPT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBJbnRlcnJ1cHQgc2VydmljZSByb3V0aW5lIChJU1IpCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgTm9uZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAtIHBvaW50ZXIgdG8gYm9hcmQgaW5mb3JtYXRpb24KICAqCkBAIC0xNjc4LDcgKzE2NzgsNyBAQAogCQlkZnhfaW50X3R5cGVfMF9wcm9jZXNzKGJwKTsJLyogcHJvY2VzcyBUeXBlIDAgaW50ZXJydXB0cyAqLwogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2ludGVycnVwdCA9CkBAIC0xNzgwLDE4ICsxNzgwLDE4IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2N0bF9nZXRfc3RhdHMgPQogICogPT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBHZXQgc3RhdGlzdGljcyBmb3IgRkRESSBhZGFwdGVyCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgUG9pbnRlciB0byBGRERJIHN0YXRpc3RpY3Mgc3RydWN0dXJlCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGRldiAtIHBvaW50ZXIgdG8gZGV2aWNlIGluZm9ybWF0aW9uCiAgKgpAQCAtMTk2NywxOSArMTk2NywxOSBAQAogCXJldHVybigoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKikgJmJwLT5zdGF0cyk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2N0bF9zZXRfbXVsdGljYXN0X2xpc3QgPQogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBFbmFibGUvRGlzYWJsZSBMTEMgZnJhbWUgcHJvbWlzY3VvdXMgbW9kZSByZWNlcHRpb24KICAqICAgb24gdGhlIGFkYXB0ZXIgYW5kL29yIHVwZGF0ZSBtdWx0aWNhc3QgYWRkcmVzcyB0YWJsZS4KLSAqICAKKyAqCiAgKiBSZXR1cm5zOgogICogICBOb25lCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGRldiAtIHBvaW50ZXIgdG8gZGV2aWNlIGluZm9ybWF0aW9uCiAgKgpAQCAtMjA4OCwxOSArMjA4OCwxOSBAQAogCQl9CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2N0bF9zZXRfbWFjX2FkZHJlc3MgPQogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBBZGQgbm9kZSBhZGRyZXNzIG92ZXJyaWRlICh1bmljYXN0IGFkZHJlc3MpIHRvIGFkYXB0ZXIKICAqICAgQ0FNIGFuZCB1cGRhdGUgZGV2X2FkZHIgZmllbGQgaW4gZGV2aWNlIHRhYmxlLgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIE5vbmUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgZGV2ICAtIHBvaW50ZXIgdG8gZGV2aWNlIGluZm9ybWF0aW9uCiAgKiAgIGFkZHIgLSBwb2ludGVyIHRvIHNvY2thZGRyIHN0cnVjdHVyZSBjb250YWluaW5nIHVuaWNhc3QgYWRkcmVzcyB0byBhZGQKQEAgLTIxNzgsNyArMjE3OCw3IEBACiAJcmV0dXJuKDApOwkJCS8qIGFsd2F5cyByZXR1cm4gemVybyAqLwogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfY3RsX3VwZGF0ZV9jYW0gPQpAQCAtMjI2Myw3ICsyMjYzLDcgQEAKIAlyZXR1cm4oREZYX0tfU1VDQ0VTUyk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfY3RsX3VwZGF0ZV9maWx0ZXJzID0KQEAgLTIyNzIsMTAgKzIyNzIsMTAgQEAKICAqIE92ZXJ2aWV3OgogICogICBQcm9jZWR1cmUgdG8gdXBkYXRlIGFkYXB0ZXIgZmlsdGVycyB3aXRoIGRlc2lyZWQKICAqICAgZmlsdGVyIHNldHRpbmdzLgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIENvbmRpdGlvbiBjb2RlCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGJwIC0gcG9pbnRlciB0byBib2FyZCBpbmZvcm1hdGlvbgogICoKQEAgLTIzMjksMTggKzIzMjksMTggQEAKIAlyZXR1cm4oREZYX0tfU1VDQ0VTUyk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09CiAgKiA9IGRmeF9od19kbWFfY21kX3JlcSA9CiAgKiA9PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBTZW5kcyBQRFEgRE1BIGNvbW1hbmQgdG8gYWRhcHRlciBmaXJtd2FyZQotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIENvbmRpdGlvbiBjb2RlCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGJwIC0gcG9pbnRlciB0byBib2FyZCBpbmZvcm1hdGlvbgogICoKQEAgLTIzNzQsOSArMjM3NCw5IEBACiAJewogCWludCBzdGF0dXM7CQkJLyogYWRhcHRlciBzdGF0dXMgKi8KIAlpbnQgdGltZW91dF9jbnQ7CS8qIHVzZWQgaW4gZm9yIGxvb3BzICovCi0JCisKIAkvKiBNYWtlIHN1cmUgdGhlIGFkYXB0ZXIgaXMgaW4gYSBzdGF0ZSB0aGF0IHdlIGNhbiBpc3N1ZSB0aGUgRE1BIGNvbW1hbmQgaW4gKi8KLQkKKwogCXN0YXR1cyA9IGRmeF9od19hZGFwX3N0YXRlX3JkKGJwKTsKIAlpZiAoKHN0YXR1cyA9PSBQSV9TVEFURV9LX1JFU0VUKQkJfHwKIAkJKHN0YXR1cyA9PSBQSV9TVEFURV9LX0hBTFRFRCkJCXx8CkBAIC0yMzk3LDcgKzIzOTcsNyBAQAogCWRmeF9wb3J0X3dyaXRlX2xvbmcoYnAsIFBJX1BEUV9LX1JFR19DTURfUlNQX1BST0QsIGJwLT5jbWRfcnNwX3JlZy5sd29yZCk7CiAKIAkvKiBQdXQgcmVxdWVzdCBidWZmZXIgb24gdGhlIGNvbW1hbmQgcmVxdWVzdCBxdWV1ZSAqLwotCQorCiAJYnAtPmRlc2NyX2Jsb2NrX3ZpcnQtPmNtZF9yZXFbYnAtPmNtZF9yZXFfcmVnLmluZGV4LnByb2RdLmxvbmdfMCA9ICh1MzIpIChQSV9YTVRfREVTQ1JfTV9TT1AgfAogCQkJUElfWE1UX0RFU0NSX01fRU9QIHwgKFBJX0NNRF9SRVFfS19TSVpFX01BWCA8PCBQSV9YTVRfREVTQ1JfVl9TRUdfTEVOKSk7CiAJYnAtPmRlc2NyX2Jsb2NrX3ZpcnQtPmNtZF9yZXFbYnAtPmNtZF9yZXFfcmVnLmluZGV4LnByb2RdLmxvbmdfMSA9IGJwLT5jbWRfcmVxX3BoeXM7CkBAIC0yNDE5LDcgKzI0MTksNyBAQAogCQkJYnJlYWs7CiAJCXVkZWxheSgxMDApOwkJCS8qIHdhaXQgZm9yIDEwMCBtaWNyb3NlY29uZHMgKi8KIAkJfQotCWlmICh0aW1lb3V0X2NudCA9PSAwKSAKKwlpZiAodGltZW91dF9jbnQgPT0gMCkKIAkJcmV0dXJuKERGWF9LX0hXX1RJTUVPVVQpOwogCiAJLyogQnVtcCAoYW5kIHdyYXApIHRoZSBjb21wbGV0aW9uIGluZGV4IGFuZCB3cml0ZSBvdXQgdG8gcmVnaXN0ZXIgKi8KQEAgLTI0MzksNyArMjQzOSw3IEBACiAJCQlicmVhazsKIAkJdWRlbGF5KDEwMCk7CQkJLyogd2FpdCBmb3IgMTAwIG1pY3Jvc2Vjb25kcyAqLwogCQl9Ci0JaWYgKHRpbWVvdXRfY250ID09IDApIAorCWlmICh0aW1lb3V0X2NudCA9PSAwKQogCQlyZXR1cm4oREZYX0tfSFdfVElNRU9VVCk7CiAKIAkvKiBCdW1wIChhbmQgd3JhcCkgdGhlIGNvbXBsZXRpb24gaW5kZXggYW5kIHdyaXRlIG91dCB0byByZWdpc3RlciAqLwpAQCAtMjQ1MCwxOCArMjQ1MCwxOCBAQAogCXJldHVybihERlhfS19TVUNDRVNTKTsKIAl9CiAKLQwKKwogLyoKICAqID09PT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfaHdfcG9ydF9jdHJsX3JlcSA9CiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT0KLSAqICAgCisgKgogICogT3ZlcnZpZXc6CiAgKiAgIFNlbmRzIFBEUSBwb3J0IGNvbnRyb2wgY29tbWFuZCB0byBhZGFwdGVyIGZpcm13YXJlCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgSG9zdCBkYXRhIHJlZ2lzdGVyIHZhbHVlIGluIGhvc3RfZGF0YSBpZiBwdHIgaXMgbm90IE5VTEwKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAJCQktIHBvaW50ZXIgdG8gYm9hcmQgaW5mb3JtYXRpb24KICAqCSBjb21tYW5kCS0gcG9ydCBjb250cm9sIGNvbW1hbmQKQEAgLTI0OTcsNyArMjQ5Nyw3IEBACiAJaW50CQkJdGltZW91dF9jbnQ7CS8qIHVzZWQgaW4gZm9yIGxvb3BzICovCiAKIAkvKiBTZXQgQ29tbWFuZCBFcnJvciBiaXQgaW4gY29tbWFuZCBsb25nd29yZCAqLwotCQorCiAJcG9ydF9jbWQgPSAoUElfVUlOVDMyKSAoY29tbWFuZCB8IFBJX1BDVFJMX01fQ01EX0VSUk9SKTsKIAogCS8qIElzc3VlIHBvcnQgY29tbWFuZCB0byB0aGUgYWRhcHRlciAqLwpAQCAtMjUyMCwxMiArMjUyMCwxMiBAQAogCQkJYnJlYWs7CiAJCXVkZWxheSgxMDApOwkJCS8qIHdhaXQgZm9yIDEwMCBtaWNyb3NlY29uZHMgKi8KIAkJfQotCWlmICh0aW1lb3V0X2NudCA9PSAwKSAKKwlpZiAodGltZW91dF9jbnQgPT0gMCkKIAkJcmV0dXJuKERGWF9LX0hXX1RJTUVPVVQpOwogCiAJLyoKLQkgKiBJZiB0aGUgYWRkcmVzcyBvZiBob3N0X2RhdGEgaXMgbm9uLXplcm8sIGFzc3VtZSBjYWxsZXIgaGFzIHN1cHBsaWVkIGEgIAotCSAqIG5vbiBOVUxMIHBvaW50ZXIsIGFuZCByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIHRoZSBIT1NUX0RBVEEgcmVnaXN0ZXIgaW4gCisJICogSWYgdGhlIGFkZHJlc3Mgb2YgaG9zdF9kYXRhIGlzIG5vbi16ZXJvLCBhc3N1bWUgY2FsbGVyIGhhcyBzdXBwbGllZCBhCisJICogbm9uIE5VTEwgcG9pbnRlciwgYW5kIHJldHVybiB0aGUgY29udGVudHMgb2YgdGhlIEhPU1RfREFUQSByZWdpc3RlciBpbgogCSAqIGl0LgogCSAqLwogCkBAIC0yNTM0LDE4ICsyNTM0LDE4IEBACiAJcmV0dXJuKERGWF9LX1NVQ0NFU1MpOwogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09CiAgKiA9IGRmeF9od19hZGFwX3Jlc2V0ID0KICAqID09PT09PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgUmVzZXRzIGFkYXB0ZXIKLSAqICAKKyAqCiAgKiBSZXR1cm5zOgogICogICBOb25lCi0gKiAgICAgICAKKyAqCiAgKiBBcmd1bWVudHM6CiAgKiAgIGJwICAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKiAgIHR5cGUgLSB0eXBlIG9mIHJlc2V0IHRvIHBlcmZvcm0KQEAgLTI1ODgsMTggKzI1ODgsMTggQEAKIAlkZnhfcG9ydF93cml0ZV9sb25nKGJwLCBQSV9QRFFfS19SRUdfUE9SVF9SRVNFVCwgMCk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2h3X2FkYXBfc3RhdGVfcmQgPQogICogPT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBSZXR1cm5zIGN1cnJlbnQgYWRhcHRlciBzdGF0ZQotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIEFkYXB0ZXIgc3RhdGUgcGVyIFBEUSBQb3J0IFNwZWNpZmljYXRpb24KLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKgpAQCAtMjYyNCwxOCArMjYyNCwxOCBAQAogCXJldHVybigocG9ydF9zdGF0dXMgJiBQSV9QU1RBVFVTX01fU1RBVEUpID4+IFBJX1BTVEFUVVNfVl9TVEFURSk7CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X2h3X2RtYV91bmluaXQgPQogICogPT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBCcmluZ3MgYWRhcHRlciB0byBETUFfVU5BVkFJTEFCTEUgc3RhdGUKLSAqICAKKyAqCiAgKiBSZXR1cm5zOgogICogICBDb25kaXRpb24gY29kZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAgIC0gcG9pbnRlciB0byBib2FyZCBpbmZvcm1hdGlvbgogICogICB0eXBlIC0gdHlwZSBvZiByZXNldCB0byBwZXJmb3JtCkBAIC0yNjcyLDM4ICsyNjcyLDM4IEBACiAJCQlicmVhazsKIAkJdWRlbGF5KDEwMCk7CQkJCQkvKiB3YWl0IGZvciAxMDAgbWljcm9zZWNvbmRzICovCiAJCX0KLQlpZiAodGltZW91dF9jbnQgPT0gMCkgCisJaWYgKHRpbWVvdXRfY250ID09IDApCiAJCXJldHVybihERlhfS19IV19USU1FT1VUKTsKIAlyZXR1cm4oREZYX0tfU1VDQ0VTUyk7CiAJfQotDAorCiAvKgogICoJQWxpZ24gYW4gc2tfYnVmZiB0byBhIGJvdW5kYXJ5IHBvd2VyIG9mIDIKICAqCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgbXlfc2tiX2FsaWduKHN0cnVjdCBza19idWZmICpza2IsIGludCBuKQogewogCXVuc2lnbmVkIGxvbmcgeCA9ICh1bnNpZ25lZCBsb25nKXNrYi0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIHY7Ci0JCisKIAl2ID0gQUxJR04oeCwgbik7CS8qIFdoZXJlIHdlIHdhbnQgdG8gYmUgKi8KLQkKKwogCXNrYl9yZXNlcnZlKHNrYiwgdiAtIHgpOwogfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09CiAgKiA9IGRmeF9yY3ZfaW5pdCA9CiAgKiA9PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBQcm9kdWNlcyBidWZmZXJzIHRvIGFkYXB0ZXIgTExDIEhvc3QgcmVjZWl2ZSBkZXNjcmlwdG9yIGJsb2NrCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgTm9uZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAtIHBvaW50ZXIgdG8gYm9hcmQgaW5mb3JtYXRpb24KICAqICAgZ2V0X2J1ZmZlcnMgLSBub24temVybyBpZiBidWZmZXJzIHRvIGJlIGFsbG9jYXRlZApAQCAtMjc2NCw3ICsyNzY0LDcgQEAKIAkJCSAqIGFsaWduIHRvIDEyOCBieXRlcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoCiAJCQkgKiB0aGUgb2xkIEVJU0EgYm9hcmRzLgogCQkJICovCi0JCQkgCisKIAkJCW15X3NrYl9hbGlnbihuZXdza2IsIDEyOCk7CiAJCQlicC0+ZGVzY3JfYmxvY2tfdmlydC0+cmN2X2RhdGFbaSArIGpdLmxvbmdfMSA9CiAJCQkJKHUzMilwY2lfbWFwX3NpbmdsZShicC0+cGNpX2RldiwgbmV3c2tiLT5kYXRhLApAQCAtMjc5NSwxOCArMjc5NSwxOCBAQAogCXJldHVybiAwOwogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PQogICogPSBkZnhfcmN2X3F1ZXVlX3Byb2Nlc3MgPQogICogPT09PT09PT09PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgUHJvY2VzcyByZWNlaXZlZCBMTEMgZnJhbWVzLgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIE5vbmUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKgpAQCAtMjg4MCw3ICsyODgwLDcgQEAKIAkJCQkJbmV3c2tiID0gZGV2X2FsbG9jX3NrYihORVdfU0tCX1NJWkUpOwogCQkJCQlpZiAobmV3c2tiKXsKIAkJCQkJCXJ4X2luX3BsYWNlID0gMTsKLQkJCQkJCQorCiAJCQkJCQlteV9za2JfYWxpZ24obmV3c2tiLCAxMjgpOwogCQkJCQkJc2tiID0gKHN0cnVjdCBza19idWZmICopYnAtPnBfcmN2X2J1ZmZfdmFbZW50cnldOwogCQkJCQkJcGNpX3VubWFwX3NpbmdsZShicC0+cGNpX2RldiwKQEAgLTI5MTQsNyArMjkxNCw3IEBACiAKIAkJCQkJCW1lbWNweShza2ItPmRhdGEsIHBfYnVmZiArIFJDVl9CVUZGX0tfUEFERElORywgcGt0X2xlbiszKTsKIAkJCQkJfQotCQkJCQkKKwogCQkJCQlza2JfcmVzZXJ2ZShza2IsMyk7CQkvKiBhZGp1c3QgZGF0YSBmaWVsZCBzbyB0aGF0IGl0IHBvaW50cyB0byBGQyBieXRlICovCiAJCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsJCS8qIHBhc3MgdXAgcGFja2V0IGxlbmd0aCwgTk9UIGluY2x1ZGluZyBDUkMgKi8KIAkJCQkJc2tiLT5kZXYgPSBicC0+ZGV2OwkJLyogcGFzcyB1cCBkZXZpY2UgcG9pbnRlciAqLwpAQCAtMjk0NSwxOCArMjk0NSwxOCBAQAogCQl9CiAJfQogCi0MCisKIC8qCiAgKiA9PT09PT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X3htdF9xdWV1ZV9wa3QgPQogICogPT09PT09PT09PT09PT09PT09PT09Ci0gKiAgIAorICoKICAqIE92ZXJ2aWV3OgogICogICBRdWV1ZXMgcGFja2V0cyBmb3IgdHJhbnNtaXNzaW9uCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgQ29uZGl0aW9uIGNvZGUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgc2tiIC0gcG9pbnRlciB0byBza19idWZmIHRvIHF1ZXVlIGZvciB0cmFuc21pc3Npb24KICAqICAgZGV2IC0gcG9pbnRlciB0byBkZXZpY2UgaW5mb3JtYXRpb24KQEAgLTMwMjAsNyArMzAyMCw3IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAkvKgogCSAqIFZlcmlmeSB0aGF0IGluY29taW5nIHRyYW5zbWl0IHJlcXVlc3QgaXMgT0sKIAkgKgpAQCAtMzAzMiw3ICszMDMyLDcgQEAKIAogCWlmICghSU5fUkFOR0Uoc2tiLT5sZW4sIEZERElfS19MTENfWkxFTiwgRkRESV9LX0xMQ19MRU4pKQogCXsKLQkJcHJpbnRrKCIlczogSW52YWxpZCBwYWNrZXQgbGVuZ3RoIC0gJXUgYnl0ZXNcbiIsIAorCQlwcmludGsoIiVzOiBJbnZhbGlkIHBhY2tldCBsZW5ndGggLSAldSBieXRlc1xuIiwKIAkJCWRldi0+bmFtZSwgc2tiLT5sZW4pOwogCQlicC0+eG10X2xlbmd0aF9lcnJvcnMrKzsJCS8qIGJ1bXAgZXJyb3IgY291bnRlciAqLwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CkBAIC0zMDY1LDcgKzMwNjUsNyBAQAogCQl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYnAtPmxvY2ssIGZsYWdzKTsKLQkKKwogCS8qIEdldCB0aGUgY3VycmVudCBwcm9kdWNlciBhbmQgdGhlIG5leHQgZnJlZSB4bXQgZGF0YSBkZXNjcmlwdG9yICovCiAKIAlwcm9kCQk9IGJwLT5yY3ZfeG10X3JlZy5pbmRleC54bXRfcHJvZDsKQEAgLTMxNjcsMTggKzMxNjcsMTggQEAKIAlyZXR1cm4oMCk7CQkJCQkJCS8qIHBhY2tldCBxdWV1ZWQgdG8gYWRhcHRlciAqLwogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PQogICogPSBkZnhfeG10X2RvbmUgPQogICogPT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgUHJvY2Vzc2VzIGFsbCBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gdHJhbnNtaXR0ZWQuCi0gKiAgCisgKgogICogUmV0dXJuczoKICAqICAgTm9uZQotICogICAgICAgCisgKgogICogQXJndW1lbnRzOgogICogICBicCAtIHBvaW50ZXIgdG8gYm9hcmQgaW5mb3JtYXRpb24KICAqCkBAIC0zMjQ2LDE4ICszMjQ2LDE4IEBACiAJcmV0dXJuIGZyZWVkOwogCX0KIAotDAorCiAvKgogICogPT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X3Jjdl9mbHVzaCA9CiAgKiA9PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgUmVtb3ZlIGFsbCBza2IncyBpbiB0aGUgcmVjZWl2ZSByaW5nLgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIE5vbmUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKgpAQCAtMzI5OSwxNCArMzI5OSwxNCBAQAogICogPT09PT09PT09PT09PT09PT0KICAqID0gZGZ4X3htdF9mbHVzaCA9CiAgKiA9PT09PT09PT09PT09PT09PQotICogICAKKyAqCiAgKiBPdmVydmlldzoKICAqICAgUHJvY2Vzc2VzIGFsbCBmcmFtZXMgd2hldGhlciB0aGV5J3ZlIGJlZW4gdHJhbnNtaXR0ZWQKICAqICAgb3Igbm90LgotICogIAorICoKICAqIFJldHVybnM6CiAgKiAgIE5vbmUKLSAqICAgICAgIAorICoKICAqIEFyZ3VtZW50czoKICAqICAgYnAgLSBwb2ludGVyIHRvIGJvYXJkIGluZm9ybWF0aW9uCiAgKgpAQCAtMzQ0NCwxMyArMzQ0NCwxMyBAQAogewogCWludCByY19wY2ksIHJjX2Vpc2E7CiAKLQlyY19wY2kgPSBwY2lfbW9kdWxlX2luaXQoJmRmeF9kcml2ZXIpOworCXJjX3BjaSA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRmeF9kcml2ZXIpOwogCWlmIChyY19wY2kgPj0gMCkgZGZ4X2hhdmVfcGNpID0gMTsKLQkKKwogCXJjX2Vpc2EgPSBkZnhfZWlzYV9pbml0KCk7CiAJaWYgKHJjX2Vpc2EgPj0gMCkgZGZ4X2hhdmVfZWlzYSA9IDE7CiAKLQlyZXR1cm4gKChyY19laXNhIDwgMCkgPyAwIDogcmNfZWlzYSkgICsgKChyY19wY2kgPCAwKSA/IDAgOiByY19wY2kpOyAKKwlyZXR1cm4gKChyY19laXNhIDwgMCkgPyAwIDogcmNfZWlzYSkgICsgKChyY19wY2kgPCAwKSA/IDAgOiByY19wY2kpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGZ4X2NsZWFudXAodm9pZCkKQEAgLTM0NTksOCArMzQ1OSw4IEBACiAJCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZGZ4X2RyaXZlcik7CiAJaWYgKGRmeF9oYXZlX2Vpc2EpCiAJCWRmeF9laXNhX2NsZWFudXAoKTsKLQkJCi19CQorCit9CiAKIG1vZHVsZV9pbml0KGRmeF9pbml0KTsKIG1vZHVsZV9leGl0KGRmeF9jbGVhbnVwKTsKQEAgLTM0NjksNyArMzQ2OSw3IEBACiAJCSAgIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQwKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIGtlcm5lbC1jb21waWxlLWNvbW1hbmQ6ICJnY2MgLURfX0tFUk5FTF9fIC1JL3Jvb3QvbGludXgvaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtcGlwZSAtZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtbTQ4NiAtbWFsaWduLWxvb3BzPTIgLW1hbGlnbi1qdW1wcz0yIC1tYWxpZ24tZnVuY3Rpb25zPTIgLWMgZGVmeHguYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlZnh4LmggYi9kcml2ZXJzL25ldC9kZWZ4eC5oCmluZGV4IGE0ODBiODAuLjhiMWU5YTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlZnh4LmgKKysrIGIvZHJpdmVycy9uZXQvZGVmeHguaApAQCAtNDUsNyArNDUsNyBAQAogCX0gUElfQ05UUjsKIAogdHlwZWRlZiBzdHJ1Y3QJCQkJCQkJLyogTEFOIGFkZHJlc3MgKi8KLQl7CQkJCQkJCQkJCQorCXsKIAlQSV9VSU5UMzIgIGx3cmRfMDsKIAlQSV9VSU5UMzIgIGx3cmRfMTsKIAl9IFBJX0xBTl9BRERSOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAjZGVmaW5lIFBJX1NUQVRFX0tfTElOS19VTkFWQUlMCSAJCTUKICNkZWZpbmUgUElfU1RBVEVfS19IQUxURUQJCSAgIAkJNgogI2RlZmluZSBQSV9TVEFURV9LX1JJTkdfTUVNQkVSCQkJNwotI2RlZmluZSBQSV9TVEFURV9LX05VTUJFUgkJCQk4IAorI2RlZmluZSBQSV9TVEFURV9LX05VTUJFUgkJCQk4CiAKIC8qIERlZmluZSBjb2RlcyBmb3IgY29tbWFuZCB0eXBlICovCiAKQEAgLTE3NSw5ICsxNzUsOSBAQAogI2RlZmluZSBQSV9JVEVNX0tfRU9MCQkJCQkweDAwIAkvKiBFbmQtb2YtSXRlbSBsaXN0IAkJICAqLwogI2RlZmluZSBQSV9JVEVNX0tfVF9SRVEJCQkJCTB4MDEgCS8qIERFQ25ldCBUX1JFUSAJCQkgICovCiAjZGVmaW5lIFBJX0lURU1fS19UVlgJCQkJCTB4MDIgCS8qIERFQ25ldCBUVlggCQkJCSAgKi8KLSNkZWZpbmUgUElfSVRFTV9LX1JFU1RSSUNURURfVE9LRU4JCTB4MDMgCS8qIERFQ25ldCBSZXN0cmljdGVkIFRva2VuIAkgICovCSAKKyNkZWZpbmUgUElfSVRFTV9LX1JFU1RSSUNURURfVE9LRU4JCTB4MDMgCS8qIERFQ25ldCBSZXN0cmljdGVkIFRva2VuIAkgICovCiAjZGVmaW5lIFBJX0lURU1fS19MRU1fVEhSRVNIT0xECQkJMHgwNCAJLyogREVDbmV0IExFTSBUaHJlc2hvbGQgCSAgKi8KLSNkZWZpbmUgUElfSVRFTV9LX1JJTkdfUFVSR0VSCQkJMHgwNSAJLyogREVDbmV0IFJpbmcgUHVyZ2VyIEVuYWJsZSAgKi8JCisjZGVmaW5lIFBJX0lURU1fS19SSU5HX1BVUkdFUgkJCTB4MDUgCS8qIERFQ25ldCBSaW5nIFB1cmdlciBFbmFibGUgICovCiAjZGVmaW5lIFBJX0lURU1fS19DTlRSX0lOVEVSVkFMCQkJMHgwNiAJLyogQ2hhcnNfU2V0IAkJCQkgICovCiAjZGVmaW5lIFBJX0lURU1fS19JTkRfR1JPVVBfUFJPTQkJMHgwNyAJLyogRmlsdGVyc19TZXQgCQkJCSAgKi8KICNkZWZpbmUgUElfSVRFTV9LX0dST1VQX1BST00JCQkweDA4IAkvKiBGaWx0ZXJzX1NldCAJCQkJICAqLwpAQCAtMjgzLDE2ICsyODMsMTYgQEAKIAogLyogU3RhcnQgUmVzcG9uc2UgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgCit0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCX0gUElfQ01EX1NUQVJUX1JTUDsKIAogLyogRmlsdGVyc19TZXQgUmVxdWVzdCAqLwogCiAjZGVmaW5lIFBJX0NNRF9GSUxURVJTX1NFVF9LX0lURU1TX01BWCAgNjMJCS8qIEZpdHMgaW4gYSA1MTIgYnl0ZSBidWZmZXIgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgCit0eXBlZGVmIHN0cnVjdAogCXsKIAlQSV9VSU5UMzIJCWNtZF90eXBlOwogCVBJX0lURU1fTElTVAlpdGVtW1BJX0NNRF9GSUxURVJTX1NFVF9LX0lURU1TX01BWF07CkBAIC0zMDIsMjEgKzMwMiwyMSBAQAogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCX0gUElfQ01EX0ZJTFRFUlNfU0VUX1JTUDsKIAogLyogRmlsdGVyc19HZXQgUmVxdWVzdCAqLwogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9VSU5UMzIJCWNtZF90eXBlOyAgIAorCVBJX1VJTlQzMgkJY21kX3R5cGU7CiAJfSBQSV9DTURfRklMVEVSU19HRVRfUkVROwogCiAvKiBGaWx0ZXJzX0dldCBSZXNwb25zZSAqLwogCi10eXBlZGVmIHN0cnVjdCAKK3R5cGVkZWYgc3RydWN0CiAJewotCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CQorCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CiAJUElfVUlOVDMyCQlpbmRfZ3JvdXBfcHJvbTsKIAlQSV9VSU5UMzIJCWdyb3VwX3Byb207CiAJUElfVUlOVDMyCQlicm9hZGNhc3RfYWxsOwpAQCAtMzM5LDE0ICszMzksMTQgQEAKIAkJUElfVUlOVDMyCWl0ZW1fY29kZTsKIAkJUElfVUlOVDMyCXZhbHVlOwogCQlQSV9VSU5UMzIJaXRlbV9pbmRleDsKLQkJfSBpdGVtW1BJX0NNRF9DSEFSU19TRVRfS19JVEVNU19NQVhdOwkKKwkJfSBpdGVtW1BJX0NNRF9DSEFSU19TRVRfS19JVEVNU19NQVhdOwogCX0gUElfQ01EX0NIQVJTX1NFVF9SRVE7CiAKIC8qIENoYXJzX1NldCBSZXNwb25zZSAqLwogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCX0gUElfQ01EX0NIQVJTX1NFVF9SU1A7CiAKIApAQCAtMzYyLDIwICszNjIsMjAgQEAKIAkJUElfVUlOVDMyCWl0ZW1fY29kZTsKIAkJUElfVUlOVDMyCXZhbHVlOwogCQlQSV9VSU5UMzIJaXRlbV9pbmRleDsKLQkJfSBpdGVtW1BJX0NNRF9TTk1QX1NFVF9LX0lURU1TX01BWF07CQorCQl9IGl0ZW1bUElfQ01EX1NOTVBfU0VUX0tfSVRFTVNfTUFYXTsKIAl9IFBJX0NNRF9TTk1QX1NFVF9SRVE7CiAKIC8qIFNOTVBfU2V0IFJlc3BvbnNlICovCiAKIHR5cGVkZWYgc3RydWN0CiAJewotCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CQorCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CiAJfSBQSV9DTURfU05NUF9TRVRfUlNQOwogCiAKIC8qIFNNVF9NSUJfU2V0IFJlcXVlc3QgKi8KIAotI2RlZmluZSBQSV9DTURfU01UX01JQl9TRVRfS19JVEVNU19NQVggNDIJLyogTWF4IG51bWJlciBvZiBpdGVtcyAqLyAKKyNkZWZpbmUgUElfQ01EX1NNVF9NSUJfU0VUX0tfSVRFTVNfTUFYIDQyCS8qIE1heCBudW1iZXIgb2YgaXRlbXMgKi8KIAogdHlwZWRlZiBzdHJ1Y3QKIAl7CkBAIC0zOTIsNyArMzkyLDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIAl7Ci0JUElfUlNQX0hFQURFUiAgIGhlYWRlcjsJCisJUElfUlNQX0hFQURFUiAgIGhlYWRlcjsKIAl9IFBJX0NNRF9TTVRfTUlCX1NFVF9SU1A7CiAKIC8qIFNNVF9NSUJfR2V0IFJlcXVlc3QgKi8KQEAgLTQwNyw4ICs0MDcsOCBAQAogdHlwZWRlZiBzdHJ1Y3QJCQkJCQkgIC8qIFJlZmVyIHRvIEFOU0kgRkRESSBTTVQgUmV2LiA3LjMgKi8KIAl7CiAJUElfUlNQX0hFQURFUiAgaGVhZGVyOwotCQotCS8qIFNNVCBHUk9VUCAqLwkJCQkJCQkJCQkJCQkJICAKKworCS8qIFNNVCBHUk9VUCAqLwogCiAJUElfU1RBVElPTl9JRCAgCXNtdF9zdGF0aW9uX2lkOwogCVBJX1VJTlQzMiAJCXNtdF9vcF92ZXJzaW9uX2lkOwpAQCAtNDg1LDcgKzQ4NSw3IEBACiAJUElfVUlOVDMyCQlwb3J0X2Nvbm5lY3Rpb25fY2FwYWJpbGl0aWVzW1BJX1BIWV9LX01BWF07CiAJUElfVUlOVDMyCQlwb3J0X2JzX2ZsYWdbUElfUEhZX0tfTUFYXTsKIAlQSV9VSU5UMzIJCXBvcnRfbGVyX2VzdGltYXRlW1BJX1BIWV9LX01BWF07Ci0JUElfVUlOVDMyCQlwb3J0X2xlcl9jdXRvZmZbUElfUEhZX0tfTUFYXTsJCisJUElfVUlOVDMyCQlwb3J0X2xlcl9jdXRvZmZbUElfUEhZX0tfTUFYXTsKIAlQSV9VSU5UMzIJCXBvcnRfbGVyX2FsYXJtW1BJX1BIWV9LX01BWF07CiAJUElfVUlOVDMyCQlwb3J0X2Nvbm5lY3Rfc3RhdGVbUElfUEhZX0tfTUFYXTsKIAlQSV9VSU5UMzIJCXBvcnRfcGNtX3N0YXRlW1BJX1BIWV9LX01BWF07CkBAIC00OTcsNyArNDk3LDcgQEAKIAogCVBJX0NOVFIJICAgCQlwYXRoX3JpbmdfbGF0ZW5jeTsKIAotCX0gUElfQ01EX1NNVF9NSUJfR0VUX1JTUDsgCisJfSBQSV9DTURfU01UX01JQl9HRVRfUlNQOwogCiAKIC8qCkBAIC01MDYsNyArNTA2LDcgQEAKICAqICBjZXJ0YWluIGhvc3Qtc2VudCBTTVQgZnJhbWVzIHN1Y2ggYXMgUE1GIEdldCBhbmQgU2V0IHJlcXVlc3RzLiAgVGhlCiAgKiAgY29kZXMgaGF2ZSBiZWVuIHRha2VuIGZyb20gdGhlIE1JQiBzdW1tYXJ5IHNlY3Rpb24gb2YgQU5TSSBTTVQgNy4zLgogICovCi0JCisKICNkZWZpbmUgUElfR1JQX0tfU01UX1NUQVRJT05fSUQJCQkweDEwMEEKICNkZWZpbmUgUElfSVRFTV9LX1NNVF9TVEFUSU9OX0lECQkweDEwMEIKICNkZWZpbmUgUElfSVRFTV9LX1NNVF9PUF9WRVJTX0lECQkweDEwMEQKQEAgLTUzNiw3ICs1MzYsNyBAQAogI2RlZmluZSBQSV9JVEVNX0tfU01UX1JFTV9ESVNDX0ZMQUcJCTB4MTAyQwogI2RlZmluZSBQSV9JVEVNX0tfU01UX1NUQVRJT05fU1RBVFVTCTB4MTAyRAogI2RlZmluZSBQSV9JVEVNX0tfU01UX1BFRVJfV1JBUF9GTEFHCTB4MTAyRQotCQorCiAjZGVmaW5lIFBJX0dSUF9LX1NNVF9NSUJfT1BFUkFUSU9OCSAJMHgxMDMyCiAjZGVmaW5lIFBJX0lURU1fS19TTVRfTVNHX1RJTUVfU1RBTVAgCTB4MTAzMwogI2RlZmluZSBQSV9JVEVNX0tfU01UX1RSTl9USU1FX1NUQU1QIAkweDEwMzQKQEAgLTY0Myw5ICs2NDMsOSBAQAogCiAvKiBBZGRyX0ZpbHRlcl9TZXQgUmVzcG9uc2UgKi8KIAotdHlwZWRlZiBzdHJ1Y3QgCit0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCX0gUElfQ01EX0FERFJfRklMVEVSX1NFVF9SU1A7CiAKIC8qIEFkZHJfRmlsdGVyX0dldCBSZXF1ZXN0ICovCkBAIC02NTksNyArNjU5LDcgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIAl7Ci0JUElfUlNQX0hFQURFUiAgIGhlYWRlcjsJCisJUElfUlNQX0hFQURFUiAgIGhlYWRlcjsKIAlQSV9MQU5fQUREUgkJZW50cnlbUElfQ01EX0FERFJfRklMVEVSX0tfU0laRV07CiAJfSBQSV9DTURfQUREUl9GSUxURVJfR0VUX1JTUDsKIApAQCAtNjc0LDcgKzY3NCw3IEBACiAKIHR5cGVkZWYgc3RydWN0CiAJewotCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CQorCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CiAJUElfU1RBVElPTl9JRCAgIHN0YXRpb25faWQ7CQkJCQkJLyogU3RhdGlvbiAqLwogCVBJX1VJTlQzMgkJc3RhdGlvbl90eXBlOwogCVBJX1VJTlQzMgkJc210X3Zlcl9pZDsKQEAgLTcyOCw2NiArNzI4LDY2IEBACiAKIHR5cGVkZWYgc3RydWN0CiAJewotCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CQkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCiAJLyogU01UIEdST1VQICovCiAKLQlQSV9TVEFUSU9OX0lEICAgc210X3N0YXRpb25faWQ7CQkJCisJUElfU1RBVElPTl9JRCAgIHNtdF9zdGF0aW9uX2lkOwogCVBJX1VJTlQzMgkJc210X29wX3ZlcnNpb25faWQ7CiAJUElfVUlOVDMyCQlzbXRfaGlfdmVyc2lvbl9pZDsKIAlQSV9VSU5UMzIJCXNtdF9sb192ZXJzaW9uX2lkOwotCVBJX1VJTlQzMgkJc210X21hY19jdDsJCQkJCi0JUElfVUlOVDMyCQlzbXRfbm9uX21hc3Rlcl9jdDsJCQkKLQlQSV9VSU5UMzIJCXNtdF9tYXN0ZXJfY3Q7CQkJCQotCVBJX1VJTlQzMgkJc210X3BhdGhzX2F2YWlsYWJsZTsJCQkKLQlQSV9VSU5UMzIJCXNtdF9jb25maWdfY2FwYWJpbGl0aWVzOwkJCi0JUElfVUlOVDMyCQlzbXRfY29uZmlnX3BvbGljeTsJCQotCVBJX1VJTlQzMgkJc210X2Nvbm5lY3Rpb25fcG9saWN5OwkJCi0JUElfVUlOVDMyCQlzbXRfdF9ub3RpZnk7CQorCVBJX1VJTlQzMgkJc210X21hY19jdDsKKwlQSV9VSU5UMzIJCXNtdF9ub25fbWFzdGVyX2N0OworCVBJX1VJTlQzMgkJc210X21hc3Rlcl9jdDsKKwlQSV9VSU5UMzIJCXNtdF9wYXRoc19hdmFpbGFibGU7CisJUElfVUlOVDMyCQlzbXRfY29uZmlnX2NhcGFiaWxpdGllczsKKwlQSV9VSU5UMzIJCXNtdF9jb25maWdfcG9saWN5OworCVBJX1VJTlQzMgkJc210X2Nvbm5lY3Rpb25fcG9saWN5OworCVBJX1VJTlQzMgkJc210X3Rfbm90aWZ5OwogCVBJX1VJTlQzMgkJc210X3N0YXR1c19yZXBvcnRpbmc7Ci0JUElfVUlOVDMyCQlzbXRfZWNtX3N0YXRlOwkKLQlQSV9VSU5UMzIJCXNtdF9jZl9zdGF0ZTsJCi0JUElfVUlOVDMyCQlzbXRfaG9sZF9zdGF0ZTsJCQorCVBJX1VJTlQzMgkJc210X2VjbV9zdGF0ZTsKKwlQSV9VSU5UMzIJCXNtdF9jZl9zdGF0ZTsKKwlQSV9VSU5UMzIJCXNtdF9ob2xkX3N0YXRlOwogCVBJX1VJTlQzMgkJc210X3JlbW90ZV9kaXNjb25uZWN0X2ZsYWc7Ci0JUElfVUlOVDMyCQlzbXRfc3RhdGlvbl9hY3Rpb247CQkJCisJUElfVUlOVDMyCQlzbXRfc3RhdGlvbl9hY3Rpb247CiAKIAkvKiBNQUMgR1JPVVAgKi8KIAotCVBJX1VJTlQzMgkJbWFjX2ZyYW1lX3N0YXR1c19jYXBhYmlsaXRpZXM7CQorCVBJX1VJTlQzMgkJbWFjX2ZyYW1lX3N0YXR1c19jYXBhYmlsaXRpZXM7CiAJUElfVUlOVDMyCQltYWNfdF9tYXhfZ3JlYXRlc3RfbG93ZXJfYm91bmQ7CiAJUElfVUlOVDMyCQltYWNfdHZ4X2dyZWF0ZXN0X2xvd2VyX2JvdW5kOwogCVBJX1VJTlQzMgkJbWFjX3BhdGhzX2F2YWlsYWJsZTsKIAlQSV9VSU5UMzIJCW1hY19jdXJyZW50X3BhdGg7Ci0JUElfTEFOX0FERFIJCW1hY191cHN0cmVhbV9uYnI7CQkJCi0JUElfTEFOX0FERFIJCW1hY19vbGRfdXBzdHJlYW1fbmJyOwkJCi0JUElfVUlOVDMyCQltYWNfZHVwX2FkZHJfdGVzdDsJCQkKKwlQSV9MQU5fQUREUgkJbWFjX3Vwc3RyZWFtX25icjsKKwlQSV9MQU5fQUREUgkJbWFjX29sZF91cHN0cmVhbV9uYnI7CisJUElfVUlOVDMyCQltYWNfZHVwX2FkZHJfdGVzdDsKIAlQSV9VSU5UMzIJCW1hY19wYXRoc19yZXF1ZXN0ZWQ7CiAJUElfVUlOVDMyCQltYWNfZG93bnN0cmVhbV9wb3J0X3R5cGU7Ci0JUElfTEFOX0FERFIJCW1hY19zbXRfYWRkcmVzczsJCQkKLQlQSV9VSU5UMzIJCW1hY190X3JlcTsJCQkJCisJUElfTEFOX0FERFIJCW1hY19zbXRfYWRkcmVzczsKKwlQSV9VSU5UMzIJCW1hY190X3JlcTsKIAlQSV9VSU5UMzIJCW1hY190X25lZzsKLQlQSV9VSU5UMzIJCW1hY190X21heDsJCQkJCi0JUElfVUlOVDMyCQltYWNfdHZ4X3ZhbHVlOwkJCQotCVBJX1VJTlQzMgkJbWFjX3RfbWluOwkJCQkKKwlQSV9VSU5UMzIJCW1hY190X21heDsKKwlQSV9VSU5UMzIJCW1hY190dnhfdmFsdWU7CisJUElfVUlOVDMyCQltYWNfdF9taW47CiAJUElfVUlOVDMyCQltYWNfY3VycmVudF9mcmFtZV9zdGF0dXM7CiAJLyoJCQkgIAltYWNfZnJhbWVfY3RzIAkJCSovCiAJLyogCQkJCW1hY19lcnJvcl9jdHMgCQkJKi8KIAkvKiAJCSAgIAkJbWFjX2xvc3RfY3RzIAkJCSovCi0JUElfVUlOVDMyCQltYWNfZnJhbWVfZXJyb3JfdGhyZXNob2xkOwkJCi0JUElfVUlOVDMyCQltYWNfZnJhbWVfZXJyb3JfcmF0aW87CQkKKwlQSV9VSU5UMzIJCW1hY19mcmFtZV9lcnJvcl90aHJlc2hvbGQ7CisJUElfVUlOVDMyCQltYWNfZnJhbWVfZXJyb3JfcmF0aW87CiAJUElfVUlOVDMyCQltYWNfcm10X3N0YXRlOwogCVBJX1VJTlQzMgkJbWFjX2RhX2ZsYWc7Ci0JUElfVUlOVDMyCQltYWNfdW5hX2RhX2ZsYWc7CQkJCisJUElfVUlOVDMyCQltYWNfdW5hX2RhX2ZsYWc7CiAJUElfVUlOVDMyCQltYWNfZnJhbWVfY29uZGl0aW9uOwotCVBJX1VJTlQzMgkJbWFjX2NoaXBfc2V0OwkJCQotCVBJX1VJTlQzMgkJbWFjX2FjdGlvbjsJCQkJCisJUElfVUlOVDMyCQltYWNfY2hpcF9zZXQ7CisJUElfVUlOVDMyCQltYWNfYWN0aW9uOwogCiAJLyogUEFUSCBHUk9VUCA9PiBEb2VzIG5vdCBuZWVkIHRvIGJlIGltcGxlbWVudGVkICovCiAKIAkvKiBQT1JUIEdST1VQICovCiAKLQlQSV9VSU5UMzIJCXBvcnRfcGNfdHlwZVtQSV9QSFlfS19NQVhdOwkJCQotCVBJX1VJTlQzMgkJcG9ydF9wY19uZWlnaGJvcltQSV9QSFlfS19NQVhdOwkJCQorCVBJX1VJTlQzMgkJcG9ydF9wY190eXBlW1BJX1BIWV9LX01BWF07CisJUElfVUlOVDMyCQlwb3J0X3BjX25laWdoYm9yW1BJX1BIWV9LX01BWF07CiAJUElfVUlOVDMyCQlwb3J0X2Nvbm5lY3Rpb25fcG9saWNpZXNbUElfUEhZX0tfTUFYXTsKIAlQSV9VSU5UMzIJCXBvcnRfcmVtb3RlX21hY19pbmRpY2F0ZWRbUElfUEhZX0tfTUFYXTsKIAlQSV9VSU5UMzIJCXBvcnRfY2Vfc3RhdGVbUElfUEhZX0tfTUFYXTsKQEAgLTc5OCwxNyArNzk4LDE3IEBACiAJUElfVUlOVDMyCQlwb3J0X3RiX21heFtQSV9QSFlfS19NQVhdOwogCVBJX1VJTlQzMgkJcG9ydF9ic19mbGFnW1BJX1BIWV9LX01BWF07CiAJLyoJCQkJcG9ydF9sY3RfZmFpbF9jdHNbUElfUEhZX0tfTUFYXTsJKi8KLQlQSV9VSU5UMzIJCXBvcnRfbGVyX2VzdGltYXRlW1BJX1BIWV9LX01BWF07CQkJCQorCVBJX1VJTlQzMgkJcG9ydF9sZXJfZXN0aW1hdGVbUElfUEhZX0tfTUFYXTsKIAkvKgkJCQlwb3J0X2xlbV9yZWplY3RfY3RzW1BJX1BIWV9LX01BWF07CSovCiAJLyoJCQkJcG9ydF9sZW1fY3RzW1BJX1BIWV9LX01BWF07CQkqLwotCVBJX1VJTlQzMgkJcG9ydF9sZXJfY3V0b2ZmW1BJX1BIWV9LX01BWF07CQkJCQotCVBJX1VJTlQzMgkJcG9ydF9sZXJfYWxhcm1bUElfUEhZX0tfTUFYXTsJCQkJCisJUElfVUlOVDMyCQlwb3J0X2xlcl9jdXRvZmZbUElfUEhZX0tfTUFYXTsKKwlQSV9VSU5UMzIJCXBvcnRfbGVyX2FsYXJtW1BJX1BIWV9LX01BWF07CiAJUElfVUlOVDMyCQlwb3J0X2Nvbm5lY3Rfc3RhdGVbUElfUEhZX0tfTUFYXTsKIAlQSV9VSU5UMzIJCXBvcnRfcGNtX3N0YXRlW1BJX1BIWV9LX01BWF07CiAJUElfVUlOVDMyCQlwb3J0X3BjX3dpdGhob2xkW1BJX1BIWV9LX01BWF07Ci0JUElfVUlOVDMyCQlwb3J0X2xlcl9jb25kaXRpb25bUElfUEhZX0tfTUFYXTsJCQkJCi0JUElfVUlOVDMyCQlwb3J0X2NoaXBfc2V0W1BJX1BIWV9LX01BWF07CQkJCQotCVBJX1VJTlQzMgkJcG9ydF9hY3Rpb25bUElfUEhZX0tfTUFYXTsJCQkJCisJUElfVUlOVDMyCQlwb3J0X2xlcl9jb25kaXRpb25bUElfUEhZX0tfTUFYXTsKKwlQSV9VSU5UMzIJCXBvcnRfY2hpcF9zZXRbUElfUEhZX0tfTUFYXTsKKwlQSV9VSU5UMzIJCXBvcnRfYWN0aW9uW1BJX1BIWV9LX01BWF07CiAKIAkvKiBBVFRBQ0hNRU5UIEdST1VQICovCiAKQEAgLTgzMyw3ICs4MzMsNyBAQAogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkJCisJUElfUlNQX0hFQURFUiAgIGhlYWRlcjsKIAogCS8qIFNNVCBHUk9VUCAqLwogCkBAIC04NDEsNyArODQxLDcgQEAKIAogCS8qIE1BQyBHUk9VUCAqLwogCi0JUElfVUlOVDMyCQllbWFjX2xpbmtfc3RhdGU7CQkJCisJUElfVUlOVDMyCQllbWFjX2xpbmtfc3RhdGU7CiAJUElfVUlOVDMyCQllbWFjX3JpbmdfcHVyZ2VyX3N0YXRlOwogCVBJX1VJTlQzMgkJZW1hY19yaW5nX3B1cmdlcl9lbmFibGU7CiAJUElfVUlOVDMyCQllbWFjX2ZyYW1lX3N0cmlwX21vZGU7CkBAIC05MTUsOSArOTE1LDkgQEAKIAogdHlwZWRlZiBzdHJ1Y3QKIAl7Ci0JUElfUlNQX0hFQURFUiAgIGhlYWRlcjsJCi0JUElfQ05UUgkJdGltZV9zaW5jZV9yZXNldDsJCQkKLQlQSV9DTlRSX0JMSwkJY250cnM7CQkJCQorCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CisJUElfQ05UUgkJdGltZV9zaW5jZV9yZXNldDsKKwlQSV9DTlRSX0JMSwkJY250cnM7CiAJfSBQSV9DTURfQ05UUlNfR0VUX1JTUDsKIAogLyogQ291bnRlcnNfU2V0IFJlcXVlc3QgKi8KQEAgLTkyNSwxNCArOTI1LDE0IEBACiB0eXBlZGVmIHN0cnVjdAogCXsKIAlQSV9VSU5UMzIJY21kX3R5cGU7Ci0JUElfQ05UUl9CTEsJY250cnM7CQkJCQorCVBJX0NOVFJfQkxLCWNudHJzOwogCX0gUElfQ01EX0NOVFJTX1NFVF9SRVE7CiAKIC8qIENvdW50ZXJzX1NldCBSZXNwb25zZSAqLwogCi10eXBlZGVmIHN0cnVjdCAKK3R5cGVkZWYgc3RydWN0CiAJewotCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CQorCVBJX1JTUF9IRUFERVIgICBoZWFkZXI7CiAJfSBQSV9DTURfQ05UUlNfU0VUX1JTUDsKIAogLyogRXJyb3JfTG9nX0NsZWFyIFJlcXVlc3QgKi8KQEAgLTk0Niw3ICs5NDYsNyBAQAogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCX0gUElfQ01EX0VSUk9SX0xPR19DTEVBUl9SU1A7CiAKIC8qIEVycm9yX0xvZ19HZXQgUmVxdWVzdCAqLwpAQCAtOTY2LDcgKzk2Niw3IEBACiAKIHR5cGVkZWYgc3RydWN0CiAJewotCXN0cnVjdCAKKwlzdHJ1Y3QKIAkJewogCQlQSV9VSU5UMzIJZnJ1X2ltcF9tYXNrOwogCQlQSV9VSU5UMzIJdGVzdF9pZDsKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCiB0eXBlZGVmIHN0cnVjdAogCXsKLQlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwkKKwlQSV9SU1BfSEVBREVSICAgaGVhZGVyOwogCVBJX1VJTlQzMgkJZXZlbnRfc3RhdHVzOwogCVBJX1VJTlQzMgkJY2FsbGVyX2lkOwogCVBJX1VJTlQzMgkJdGltZXN0YW1wX2w7CkBAIC05OTMsNyArOTkzLDcgQEAKICNkZWZpbmUgUElfTE9HX0VWRU5UX1NUQVRVU19LX1ZBTElECQkwCS8qIFZhbGlkIEV2ZW50IFN0YXR1cyAJCSovCiAjZGVmaW5lIFBJX0xPR19FVkVOVF9TVEFUVVNfS19JTlZBTElECTEJLyogSW52YWxpZCBFdmVudCBTdGF0dXMgCSovCiAjZGVmaW5lIFBJX0xPR19DQUxMRVJfSURfS19OT05FCQkgCTAJLyogTm8gY2FsbGVyIAkJCQkqLwotI2RlZmluZSBQSV9MT0dfQ0FMTEVSX0lEX0tfU0VMRlRFU1QJIAkxCS8qIE5vcm1hbCBwb3dlci11cCBzZWxmdGVzdCAqLwkJCQorI2RlZmluZSBQSV9MT0dfQ0FMTEVSX0lEX0tfU0VMRlRFU1QJIAkxCS8qIE5vcm1hbCBwb3dlci11cCBzZWxmdGVzdCAqLwogI2RlZmluZSBQSV9MT0dfQ0FMTEVSX0lEX0tfTUZHCQkgCTIJLyogTWZnIHBvd2VyLXVwIHNlbGZ0ZXN0IAkqLwogI2RlZmluZSBQSV9MT0dfQ0FMTEVSX0lEX0tfT05MSU5FCQkzCS8qIE9uLWxpbmUgZGlhZ25vc3RpY3MgCQkqLwogI2RlZmluZSBQSV9MT0dfQ0FMTEVSX0lEX0tfSFcJCQk0CS8qIEhhcmR3YXJlIAkJCQkqLwpAQCAtMTAyNiw3ICsxMDI2LDcgQEAKIAlQSV9DTURfREVDX0VYVF9NSUJfR0VUX1JFUQlkZWNfbWliX2dldDsKIAlQSV9DTURfU01UX01JQl9TRVRfUkVRCQlzbXRfbWliX3NldDsKIAlQSV9DTURfU01UX01JQl9HRVRfUkVRCQlzbXRfbWliX2dldDsKLQljaGFyCQkJCQkJcGFkW1BJX0NNRF9SRVFfS19TSVpFX01BWF07IAorCWNoYXIJCQkJCQlwYWRbUElfQ01EX1JFUV9LX1NJWkVfTUFYXTsKIAl9IFBJX0RNQV9DTURfUkVROwogCiB0eXBlZGVmIHVuaW9uCkBAIC0xMDQ4LDcgKzEwNDgsNyBAQAogCVBJX0NNRF9ERUNfRVhUX01JQl9HRVRfUlNQCWRlY19taWJfZ2V0OwogCVBJX0NNRF9TTVRfTUlCX1NFVF9SU1AJCXNtdF9taWJfc2V0OwogCVBJX0NNRF9TTVRfTUlCX0dFVF9SU1AJCXNtdF9taWJfZ2V0OwotCWNoYXIJCQkJCQlwYWRbUElfQ01EX1JTUF9LX1NJWkVfTUFYXTsgCisJY2hhcgkJCQkJCXBhZFtQSV9DTURfUlNQX0tfU0laRV9NQVhdOwogCX0gUElfRE1BX0NNRF9SU1A7CiAKIHR5cGVkZWYgdW5pb24KQEAgLTEwOTQsNyArMTA5NCw3IEBACiAjZGVmaW5lIFBJX0RFU0NSX0JMS19LX1NNVF9IT1NUIAkweDEwMDAKICNkZWZpbmUgUElfREVTQ1JfQkxLX0tfVU5TT0wJCTB4MTIwMAogI2RlZmluZSBQSV9ERVNDUl9CTEtfS19DTURfUlNQCQkweDEyODAKLSNkZWZpbmUgUElfREVTQ1JfQkxLX0tfQ01EX1JFUQkJMHgxMzAwCQorI2RlZmluZSBQSV9ERVNDUl9CTEtfS19DTURfUkVRCQkweDEzMDAKIAogLyogRGVmaW5lIGZvcm1hdCBvZiBhIHJjdiBkZXNjciAoUmN2IERhdGEsIENtZCBSc3AsIFVuc29saWNpdGVkLCBTTVQgSG9zdCkgICAqLwogLyogICBOb3RlIGEgZmllbGQgaGFzIGJlZW4gYWRkZWQgZm9yIGxhdGVyIHZlcnNpb25zIG9mIHRoZSBQRFEgdG8gYWxsb3cgZm9yICAqLwpAQCAtMTExMCwxMCArMTExMCwxMCBAQAogCX0gUElfUkNWX0RFU0NSOwogCiAjZGVmaW5lCVBJX1JDVl9ERVNDUl9NX1NPUAkgIAkJMHg4MDAwMDAwMAotI2RlZmluZSBQSV9SQ1ZfREVTQ1JfTV9TRUdfTEVOX0xPIAkweDYwMDAwMDAwIAotI2RlZmluZSBQSV9SQ1ZfREVTQ1JfTV9NQloJICAJCTB4NjAwMDAwMDAgCisjZGVmaW5lIFBJX1JDVl9ERVNDUl9NX1NFR19MRU5fTE8gCTB4NjAwMDAwMDAKKyNkZWZpbmUgUElfUkNWX0RFU0NSX01fTUJaCSAgCQkweDYwMDAwMDAwCiAjZGVmaW5lIFBJX1JDVl9ERVNDUl9NX1NFR19MRU4JCTB4MUY4MDAwMDAKLSNkZWZpbmUgUElfUkNWX0RFU0NSX01fU0VHX0xFTl9ISQkweDFGRjAwMDAwCSAgCisjZGVmaW5lIFBJX1JDVl9ERVNDUl9NX1NFR19MRU5fSEkJMHgxRkYwMDAwMAogI2RlZmluZSBQSV9SQ1ZfREVTQ1JfTV9TRUdfQ05UCSAgCTB4MDAwRjAwMDAKICNkZWZpbmUgUElfUkNWX0RFU0NSX01fQlVGRl9ISQkgIAkweDAwMDBGRkZGCiAKQEAgLTExMjEsNyArMTEyMSw3IEBACiAjZGVmaW5lIFBJX1JDVl9ERVNDUl9WX1NFR19MRU5fTE8gCTI5CiAjZGVmaW5lIFBJX1JDVl9ERVNDUl9WX01CWgkgIAkJMjkKICNkZWZpbmUgUElfUkNWX0RFU0NSX1ZfU0VHX0xFTgkgIAkyMwotI2RlZmluZSBQSV9SQ1ZfREVTQ1JfVl9TRUdfTEVOX0hJIAkyMAkgIAorI2RlZmluZSBQSV9SQ1ZfREVTQ1JfVl9TRUdfTEVOX0hJIAkyMAogI2RlZmluZSBQSV9SQ1ZfREVTQ1JfVl9TRUdfQ05UCSAgCTE2CiAjZGVmaW5lIFBJX1JDVl9ERVNDUl9WX0JVRkZfSEkJIAkwCiAKQEAgLTExMzUsNyArMTEzNSw3IEBACiAKICNkZWZpbmUJUElfWE1UX0RFU0NSX01fU09QCQkJMHg4MDAwMDAwMAogI2RlZmluZSBQSV9YTVRfREVTQ1JfTV9FT1AJCQkweDQwMDAwMDAwCi0jZGVmaW5lIFBJX1hNVF9ERVNDUl9NX01CWgkJCTB4MjAwMDAwMDAgCisjZGVmaW5lIFBJX1hNVF9ERVNDUl9NX01CWgkJCTB4MjAwMDAwMDAKICNkZWZpbmUgUElfWE1UX0RFU0NSX01fU0VHX0xFTgkJMHgxRkZGMDAwMAogI2RlZmluZSBQSV9YTVRfREVTQ1JfTV9CVUZGX0hJCQkweDAwMDBGRkZGCiAKQEAgLTExOTUsNyArMTE5NSw3IEBACiAjZGVmaW5lIFBJX1BDVFJMX01fQ09OU19CTE9DSwkJCTB4MDA0MAogI2RlZmluZSBQSV9QQ1RSTF9NX1VOSU5JVAkJCQkweDAwMjAKICNkZWZpbmUgUElfUENUUkxfTV9SSU5HX01FTUJFUgkJCTB4MDAxMAotI2RlZmluZSBQSV9QQ1RSTF9NX01MQQkJCQkJMHgwMDA4CQkKKyNkZWZpbmUgUElfUENUUkxfTV9NTEEJCQkJCTB4MDAwOAogI2RlZmluZSBQSV9QQ1RSTF9NX0ZXX1JFVl9SRUFECQkJMHgwMDA0CiAjZGVmaW5lIFBJX1BDVFJMX01fREVWX1NQRUNJRklDCQkJMHgwMDAyCiAjZGVmaW5lIFBJX1BDVFJMX01fU1VCX0NNRAkJCQkweDAwMDEKQEAgLTEyMzAsMTIgKzEyMzAsMTIgQEAKIAogI2RlZmluZSBQSV9QREFUQV9BX0lOSVRfTV9ERVNDX0JMS19BRERSCQkJMHgwRkZGRkUwMDAKICNkZWZpbmUgUElfUERBVEFfQV9JTklUX01fUkVTRVJWRUQJCQkJMHgwMDAwMDFGRkMKLSNkZWZpbmUgUElfUERBVEFfQV9JTklUX01fQlNXQVBfREFUQQkJCTB4MDAwMDAwMDAyIAorI2RlZmluZSBQSV9QREFUQV9BX0lOSVRfTV9CU1dBUF9EQVRBCQkJMHgwMDAwMDAwMDIKICNkZWZpbmUgUElfUERBVEFfQV9JTklUX01fQlNXQVBfTElURVJBTAkJCTB4MDAwMDAwMDAxCiAKICNkZWZpbmUgUElfUERBVEFfQV9JTklUX1ZfREVTQ19CTEtfQUREUgkJCTEzCiAjZGVmaW5lIFBJX1BEQVRBX0FfSU5JVF9WX1JFU0VSVkVECQkJCTMKLSNkZWZpbmUgUElfUERBVEFfQV9JTklUX1ZfQlNXQVBfREFUQQkJCTEgCisjZGVmaW5lIFBJX1BEQVRBX0FfSU5JVF9WX0JTV0FQX0RBVEEJCQkxCiAjZGVmaW5lIFBJX1BEQVRBX0FfSU5JVF9WX0JTV0FQX0xJVEVSQUwJCQkwCiAKIC8qIFBvcnQgUmVzZXQgUmVnaXN0ZXIgKi8KQEAgLTEyODEsMTEgKzEyODEsMTEgQEAKICNkZWZpbmUgUElfSEFMVF9JRF9LX0lNQUdFX0NSQ19FUlJPUgk3ICAgCQkvKiBJbWFnZSBpcyBiYWQsIHVwZGF0ZSBpdCAqLwogI2RlZmluZSBQSV9IQUxUX0lEX0tfQlVTX0VYQ0VQVElPTgkgCTggICAJCS8qIDY4SyBidXMgZXhjZXB0aW9uCSAgICovCiAKLS8qIEhvc3QgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciBhcyBzZWVuIGJ5IGhvc3QgKi8gCisvKiBIb3N0IEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgYXMgc2VlbiBieSBob3N0ICovCiAKICNkZWZpbmUgUElfSE9TVF9JTlRfTV9YTVRfREFUQV9FTkIJCTB4ODAwMDAwMDAJLyogVHlwZSAyIEVuYWJsZXMgKi8KLSNkZWZpbmUgUElfSE9TVF9JTlRfTV9SQ1ZfREFUQV9FTkIJCTB4NDAwMDAwMDAgIAotI2RlZmluZSBQSV9IT1NUX0lOVF9NX1NNVF9IT1NUX0VOQgkJMHgxMDAwMDAwMAkvKiBUeXBlIDEgRW5hYmxlcyAqLyAKKyNkZWZpbmUgUElfSE9TVF9JTlRfTV9SQ1ZfREFUQV9FTkIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgUElfSE9TVF9JTlRfTV9TTVRfSE9TVF9FTkIJCTB4MTAwMDAwMDAJLyogVHlwZSAxIEVuYWJsZXMgKi8KICNkZWZpbmUgUElfSE9TVF9JTlRfTV9VTlNPTF9FTkIJCQkweDIwMDAwMDAwCiAjZGVmaW5lIFBJX0hPU1RfSU5UX01fQ01EX1JTUF9FTkIJCTB4MDgwMDAwMDAKICNkZWZpbmUgUElfSE9TVF9JTlRfTV9DTURfUkVRX0VOQgkJMHgwNDAwMDAwMApAQCAtMTMwMSw4ICsxMzAxLDggQEAKICNkZWZpbmUgUElfSE9TVF9JTlRfTV9CVVNfUEFSX0VSUgkJMHgwMDAwMDAwMQogCiAjZGVmaW5lIFBJX0hPU1RfSU5UX1ZfWE1UX0RBVEFfRU5CCQkzMQkJCS8qIFR5cGUgMiBFbmFibGVzICovCi0jZGVmaW5lIFBJX0hPU1RfSU5UX1ZfUkNWX0RBVEFfRU5CCQkzMCAgCi0jZGVmaW5lIFBJX0hPU1RfSU5UX1ZfU01UX0hPU1RfRU5CCQkyOQkJCS8qIFR5cGUgMSBFbmFibGVzICovIAorI2RlZmluZSBQSV9IT1NUX0lOVF9WX1JDVl9EQVRBX0VOQgkJMzAKKyNkZWZpbmUgUElfSE9TVF9JTlRfVl9TTVRfSE9TVF9FTkIJCTI5CQkJLyogVHlwZSAxIEVuYWJsZXMgKi8KICNkZWZpbmUgUElfSE9TVF9JTlRfVl9VTlNPTF9FTkIJCQkyOAogI2RlZmluZSBQSV9IT1NUX0lOVF9WX0NNRF9SU1BfRU5CCQkyNwogI2RlZmluZSBQSV9IT1NUX0lOVF9WX0NNRF9SRVFfRU5CCQkyNgpAQCAtMTMzMyw4ICsxMzMzLDggQEAKICNkZWZpbmUgUElfVFlQRV8wX1NUQVRfTV9QTV9QQVJfRVJSCQkweDAwMDAwMDAyCiAjZGVmaW5lIFBJX1RZUEVfMF9TVEFUX01fQlVTX1BBUl9FUlIJMHgwMDAwMDAwMQogCi0jZGVmaW5lIFBJX1RZUEVfMF9TVEFUX1ZfMU1TCQkJNwkJCQotI2RlZmluZSBQSV9UWVBFXzBfU1RBVF9WXzIwTVMJCQk2CQorI2RlZmluZSBQSV9UWVBFXzBfU1RBVF9WXzFNUwkJCTcKKyNkZWZpbmUgUElfVFlQRV8wX1NUQVRfVl8yME1TCQkJNgogI2RlZmluZSBQSV9UWVBFXzBfU1RBVF9WX0NTUl9DTURfRE9ORQk1CiAjZGVmaW5lIFBJX1RZUEVfMF9TVEFUX1ZfU1RBVEVfQ0hBTkdFCTQKICNkZWZpbmUgUElfVFlQRV8wX1NUQVRfVl9YTVRfRkxVU0gJCTMKQEAgLTE2OTIsNyArMTY5Miw3IEBACiAJewogCS8qIEtlZXAgdmlydHVhbCBhbmQgcGh5c2ljYWwgcG9pbnRlcnMgdG8gbG9ja2VkLCBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5ICovCiAKLQljaGFyCQkJCSprbWFsbG9jZWQ7CQkJCQkvKiBwY2lfZnJlZV9jb25zaXN0ZW50IHRoaXMgb24gdW5sb2FkICovIAorCWNoYXIJCQkJKmttYWxsb2NlZDsJCQkJCS8qIHBjaV9mcmVlX2NvbnNpc3RlbnQgdGhpcyBvbiB1bmxvYWQgKi8KIAlkbWFfYWRkcl90CQkJa21hbGxvY2VkX2RtYTsKIAkvKiBETUEgaGFuZGxlIGZvciB0aGUgYWJvdmUgKi8KIAlQSV9ERVNDUl9CTE9DSwkJCSpkZXNjcl9ibG9ja192aXJ0OwkJCQkvKiBQRFEgZGVzY3JpcHRvciBibG9jayB2aXJ0IGFkZHJlc3MgKi8KQEAgLTE3MzksOSArMTczOSw5IEBACiAJLyogU3RvcmUgcG9pbnRlcnMgdG8gdHJhbnNtaXQgYnVmZmVycyBmb3IgdHJhbnNtaXQgY29tcGxldGlvbiBjb2RlICovCiAKIAlYTVRfRFJJVkVSX0RFU0NSCQl4bXRfZHJ2X2Rlc2NyX2Jsa1tQSV9YTVRfREFUQV9LX05VTV9FTlRSSUVTXTsKLQkKKwogCS8qIFRyYW5zbWl0IHNwaW5sb2NrcyAqLwotCQorCiAJc3BpbmxvY2tfdAkJCWxvY2s7CiAKIAkvKiBTdG9yZSBkZXZpY2UsIGJ1cy1zcGVjaWZpYywgYW5kIHBhcmFtZXRlciBpbmZvcm1hdGlvbiBmb3IgdGhpcyBhZGFwdGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCBiMWNiZTk5Li5hZjU5NDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTQsOSArNCw5IEBACiAKIAogICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAxOTk0IERhdmlkIEMuIERhdmllcwotCQkgICAgICAgICAgICAgICAgICAgYW5kIAorCQkgICAgICAgICAgICAgICAgICAgYW5kCiAJCQkgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50Ci0JIChhcyByZXByZXNlbnRlZCBieSB0aGUgRGlyZWN0b3IsIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeSkuICAKKwkgKGFzIHJlcHJlc2VudGVkIGJ5IHRoZSBEaXJlY3RvciwgTmF0aW9uYWwgU2VjdXJpdHkgQWdlbmN5KS4KIAogICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTUgIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgogCkBAIC02MSw3ICs2MSw3IEBACiAgICAgICAgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24sIDE5ODkKICAgICA4KSAiREVDIEV0aGVyV09SS1MgVHVyYm9fKFRQIEJOQykgRXRoZXJuZXQgQ29udHJvbGxlciBPd25lcnMgTWFudWFsIiwKICAgICAgICBEaWdpdGFsIEVxdWlwbWVudCBjb3Jwb3JhdGlvbiwgMTk5MSwgUHViLiAjRUstREUyMDItT00uMDAxCi0gICAgCisKIAogICAgIFBldGVyIEJhdWVyJ3MgZGVwY2EuYyAoVjAuNSkgd2FzIHJlZmVycmVkIHRvIHdoZW4gZGVidWdnaW5nIFYwLjEgb2YgdGhpcwogICAgIGRyaXZlci4KQEAgLTEzNSwyMCArMTM1LDIwIEBACiAgICAgICAgW0FsYW4gQ294OiBDaGFuZ2VkIHRoZSBjb2RlIHRvIGFsbG93IGNvbW1hbmQgbGluZSBpcnEvaW8gYXNzaWdubWVudHNdCiAgICAgICAgW0RhdmUgRGF2aWVzOiBDaGFuZ2VkIHRoZSBjb2RlIHRvIGFsbG93IGNvbW1hbmQgbGluZSBtZW0vbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzXQotICAgIDYpIHJ1biB0aGUgbmV0IHN0YXJ0dXAgYml0cyBmb3IgeW91ciBldGg/PyBpbnRlcmZhY2UgbWFudWFsbHkgCi0gICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLiAKKyAgICA2KSBydW4gdGhlIG5ldCBzdGFydHVwIGJpdHMgZm9yIHlvdXIgZXRoPz8gaW50ZXJmYWNlIG1hbnVhbGx5CisgICAgKHVzdWFsbHkgL2V0Yy9yYy5pbmV0WzEyXSBhdCBib290IHRpbWUpLgogICAgIDcpIGVuam95IQogCiAgICAgTm90ZSB0aGF0IGF1dG9wcm9iaW5nIGlzIG5vdCBhbGxvd2VkIGluIGxvYWRhYmxlIG1vZHVsZXMgLSB0aGUgc3lzdGVtIGlzCiAgICAgYWxyZWFkeSB1cCBhbmQgcnVubmluZyBhbmQgeW91J3JlIG1lc3Npbmcgd2l0aCBpbnRlcnJ1cHRzLgogCi0gICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UgCisgICAgVG8gdW5sb2FkIGEgbW9kdWxlLCB0dXJuIG9mZiB0aGUgYXNzb2NpYXRlZCBpbnRlcmZhY2UKICAgICAnaWZjb25maWcgZXRoPz8gZG93bicgdGhlbiAncm1tb2QgZGVwY2EnLgogCiAgICAgVG8gYXNzaWduIGEgYmFzZSBtZW1vcnkgYWRkcmVzcyBmb3IgdGhlIHNoYXJlZCBtZW1vcnkgIHdoZW4gcnVubmluZyBhcyBhCiAgICAgbG9hZGFibGUgbW9kdWxlLCBzZWUgNSBhYm92ZS4gIFRvIGluY2x1ZGUgdGhlIGFkYXB0ZXIgIG5hbWUgKGlmIHlvdSBoYXZlCiAgICAgbm8gUFJPTSAgYnV0IGtub3cgdGhlIGNhcmQgbmFtZSkgIGFsc28gc2VlIDUgIGFib3ZlLiBOb3RlIHRoYXQgdGhpcyBsYXN0Ci0gICAgb3B0aW9uICB3aWxsIG5vdCB3b3JrICB3aXRoIGtlcm5lbCAgYnVpbHQtaW4gIGRlcGNhJ3MuIAorICAgIG9wdGlvbiAgd2lsbCBub3Qgd29yayAgd2l0aCBrZXJuZWwgIGJ1aWx0LWluICBkZXBjYSdzLgogCiAgICAgVGhlIHNoYXJlZCBtZW1vcnkgYXNzaWdubWVudCBmb3IgYSBsb2FkYWJsZSBtb2R1bGUgIG1ha2VzIHNlbnNlIHRvIGF2b2lkCiAgICAgdGhlICdtZW1vcnkgYXV0b3Byb2JlJyBwaWNraW5nIHRoZSB3cm9uZyBzaGFyZWQgbWVtb3J5ICAoZm9yIHRoZSBjYXNlIG9mCkBAIC0xNTcsNyArMTU3LDcgQEAKICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICBTdXBwb3J0IGZvciBNQ0EgRXRoZXJXT1JLUyBjYXJkcyBhZGRlZCAxMS0zLTk4LgogICAgIFZlcmlmaWVkIHRvIHdvcmsgd2l0aCB1cCB0byAyIERFMjEyIGNhcmRzIGluIGEgc3lzdGVtIChhbHRob3VnaCBub3QKLSAgICAgIGZ1bGx5IHN0cmVzcy10ZXN0ZWQpLiAgCisgICAgICBmdWxseSBzdHJlc3MtdGVzdGVkKS4KIAogICAgIEN1cnJlbnRseSBrbm93biBidWdzL2xpbWl0YXRpb25zOgogCkBAIC0xNzYsNyArMTc2LDcgQEAKICAgICAtLS0tLS0tLS0tLS0tLS0tCiAKICAgICBWZXJzaW9uICAgRGF0ZSAgICAgICAgRGVzY3JpcHRpb24KLSAgCisKICAgICAgIDAuMSAgICAgMjUtamFuLTk0ICAgSW5pdGlhbCB3cml0aW5nLgogICAgICAgMC4yICAgICAyNy1qYW4tOTQgICBBZGRlZCBMQU5DRSBUWCBoYXJkd2FyZSBidWZmZXIgY2hhaW5pbmcuCiAgICAgICAwLjMgICAgICAxLWZlYi05NCAgIEFkZGVkIG11bHRpcGxlIERFUENBIHN1cHBvcnQuCkBAIC0xOTAsNyArMTkwLDcgQEAKICAgICAgIDAuMzUxICAgMzAtYXByLTk0ICAgQWRkZWQgRUlTQSBzdXBwb3J0LiBBZGRlZCBERTQyMiByZWNvZ25pdGlvbi4KICAgICAgIDAuMzYgICAgMTYtbWF5LTk0ICAgREU0MjIgZml4IHJlbGVhc2VkLgogICAgICAgMC4zNyAgICAyMi1qdWwtOTQgICBBZGRlZCBNT0RVTEUgc3VwcG9ydAotICAgICAgMC4zOCAgICAxNS1hdWctOTQgICBBZGRlZCBEQlIgUk9NIHN3aXRjaCBpbiBkZXBjYV9jbG9zZSgpLiAKKyAgICAgIDAuMzggICAgMTUtYXVnLTk0ICAgQWRkZWQgREJSIFJPTSBzd2l0Y2ggaW4gZGVwY2FfY2xvc2UoKS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVsdGkgREVQQ0EgYnVnIGZpeC4KICAgICAgIDAuMzhheHAgMTUtc2VwLTk0ICAgU3BlY2lhbCB2ZXJzaW9uIGZvciBBbHBoYSBBWFAgTGludXggVjEuMC4KICAgICAgIDAuMzgxICAgMTItZGVjLTk0ICAgQWRkZWQgREUxMDEgcmVjb2duaXRpb24sIGZpeCBtdWx0aWNhc3QgYnVnLgpAQCAtMTk4LDE3ICsxOTgsMTcgQEAKICAgICAgIDAuMzgzICAgMjItZmViLTk1ICAgRml4IGZvciBjb25mbGljdCB3aXRoIFZFU0EgU0NTSSByZXBvcnRlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb21haW5AYWxmLmRlYy5jb20+CiAgICAgICAwLjM4NCAgIDE3LW1hci05NSAgIEZpeCBhIHJpbmcgZnVsbCBidWcgcmVwb3J0ZWQgYnkgPGJrbUBzdGFyLnJsLmFjLnVrPgotICAgICAgMC4zODUgICAgMy1hcHItOTUgICBGaXggYSByZWNvZ25pdGlvbiBidWcgcmVwb3J0ZWQgYnkgCisgICAgICAwLjM4NSAgICAzLWFwci05NSAgIEZpeCBhIHJlY29nbml0aW9uIGJ1ZyByZXBvcnRlZCBieQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJ5YW4ubmllbWlAbGFzdGZyb250aWVyLmNvbT4KICAgICAgIDAuMzg2ICAgMjEtYXByLTk1ICAgRml4IHRoZSBsYXN0IGZpeC4uLnNvcnJ5LCBtdXN0IGJlIGdhbGxvcGluZyBzZW5pbGl0eQogICAgICAgMC40MCAgICAyNS1NYXktOTUgICBSZXdyaXRlIGZvciBwb3J0YWJpbGl0eSAmIHVwZGF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMUEhBIHN1cHBvcnQgZnJvbSA8amVzdGFicm9AYW10LnRheTEuZGVjLmNvbT4KICAgICAgIDAuNDEgICAgMjYtSnVuLTk1ICAgQWRkZWQgdmVyaWZ5X2FyZWEoKSBjYWxscyBpbiBkZXBjYV9pb2N0bCgpIGZyb20KICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiBieSA8aGVpa29AY29sb3NzdXMuZXNjYXBlLmRlPgotICAgICAgMC40MiAgICAyNy1EZWMtOTUgICBBZGQgJ21lbScgc2hhcmVkIG1lbW9yeSBhc3NpZ25tZW50IGZvciBsb2FkYWJsZSAKKyAgICAgIDAuNDIgICAgMjctRGVjLTk1ICAgQWRkICdtZW0nIHNoYXJlZCBtZW1vcnkgYXNzaWdubWVudCBmb3IgbG9hZGFibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkICdhZGFwdGVyX25hbWUnIGZvciBsb2FkYWJsZSBtb2R1bGVzIHdoZW4gbm8gUFJPTS4KLQkJCSAgQm90aCBhYm92ZSBmcm9tIGEgc3VnZ2VzdGlvbiBieSAKKwkJCSAgQm90aCBhYm92ZSBmcm9tIGEgc3VnZ2VzdGlvbiBieQogCQkJICA8cGNoZW5Ad29vZHJ1ZmZzMTIxLnJlc2lkZW5jZS5nYXRlY2guZWR1Pi4KIAkJCSAgQWRkIG5ldyBtdWx0aWNhc3RpbmcgY29kZS4KICAgICAgIDAuNDIxICAgMjItQXByLTk2CSAgRml4IGFsbG9jX2RldmljZSgpIGJ1ZyA8amFyaUBtYXJra3VzMi5maW1yLmZpPgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICAwLjQ0ICAgICAxLVNlcC05NyAgIEZpeCAqX3Byb2JlKCkgdG8gdGVzdCBjaGVja19yZWdpb24oKSBmaXJzdCAtIGJ1ZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYnkgPG1tb2dpbHZpQGVsYmVydC51Y2NzLmVkdT4KICAgICAgIDAuNDUgICAgIDMtTm92LTk4ICAgQWRkZWQgc3VwcG9ydCBmb3IgTUNBIEV0aGVyV09SS1MgKERFMjEwL0RFMjEyKSBjYXJkcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgPHR5bW1AY29tcHV0ZXIub3JnPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IDx0eW1tQGNvbXB1dGVyLm9yZz4KICAgICAgIDAuNDUxICAgIDUtTm92LTk4ICAgRml4ZWQgbWNhIHN0dWZmIGN1eiBJJ20gYSBkdW1teS4gPHR5bW1AY29tcHV0ZXIub3JnPgogICAgICAgMC41ICAgICAxNC1Ob3YtOTggICBSZS1zcGluIGZvciAyLjEueCBrZXJuZWxzLgogICAgICAgMC41MSAgICAyNy1KdW4tOTkgICBDb3JyZWN0IHJlY2VpdmVkIHBhY2tldCBsZW5ndGggZm9yIENSQyBmcm9tCkBAIC00MTEsNyArNDExLDcgQEAKIAkJLm5hbWUgICA9IGRlcGNhX3N0cmluZywKIAl9LAogfTsKLQkKKwogLyoKICoqIE1pc2NlbGxhbmVvdXMgaW5mby4uLgogKi8KQEAgLTQyMSwxNCArNDIxLDE0IEBACiAqKiBNZW1vcnkgQWxpZ25tZW50LiBFYWNoIGRlc2NyaXB0b3IgaXMgNCBsb25nd29yZHMgbG9uZy4gVG8gZm9yY2UgYQogKiogcGFydGljdWxhciBhbGlnbm1lbnQgb24gdGhlIFRYIGRlc2NyaXB0b3IsIGFkanVzdCBERVNDX1NLSVBfTEVOIGFuZAogKiogREVTQ19BTElHTi4gREVQQ0FfQUxJR04gYWxpZ25zIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBwcml2YXRlIG1lbW9yeSBhcmVhCi0qKiBhbmQgaGVuY2UgdGhlIFJYIGRlc2NyaXB0b3IgcmluZydzIGZpcnN0IGVudHJ5LiAKKyoqIGFuZCBoZW5jZSB0aGUgUlggZGVzY3JpcHRvciByaW5nJ3MgZmlyc3QgZW50cnkuCiAqLwogI2RlZmluZSBERVBDQV9BTElHTjQgICAgICAoKHVfbG9uZyk0IC0gMSkJLyogMSBsb25nd29yZCBhbGlnbiAqLwogI2RlZmluZSBERVBDQV9BTElHTjggICAgICAoKHVfbG9uZyk4IC0gMSkJLyogMiBsb25nd29yZCAocXVhZHdvcmQpIGFsaWduICovCiAjZGVmaW5lIERFUENBX0FMSUdOICAgICAgICAgREVQQ0FfQUxJR044CS8qIEtlZXAgdGhlIExBTkNFIGhhcHB5Li4uICovCiAKIC8qCi0qKiBUaGUgREVQQ0EgUnggYW5kIFR4IHJpbmcgZGVzY3JpcHRvcnMuIAorKiogVGhlIERFUENBIFJ4IGFuZCBUeCByaW5nIGRlc2NyaXB0b3JzLgogKi8KIHN0cnVjdCBkZXBjYV9yeF9kZXNjIHsKIAl2b2xhdGlsZSBzMzIgYmFzZTsKQEAgLTU5MSw3ICs1OTEsNyBAQAogCSAqLwogCiAJaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JCisKIAlTVE9QX0RFUENBOwogCiAJbmljc3IgPSBpbmIoREVQQ0FfTklDU1IpOwpAQCAtNjEwLDcgKzYxMCw3IEBACiAKIAlwcmludGsgKCIlczogJXMgYXQgMHglMDRseCIsCiAJICAgICAgICBkZXZpY2UtPmJ1c19pZCwgZGVwY2Ffc2lnbmF0dXJlW2xwLT5hZGFwdGVyXSwgaW9hZGRyKTsKLQkKKwogCXN3aXRjaCAobHAtPmRlcGNhX2J1cykgewogI2lmZGVmIENPTkZJR19NQ0EKIAljYXNlIERFUENBX0JVU19NQ0E6CkBAIC02NTcsNyArNjU3LDcgQEAKIAkJaWYgKGxwLT5kZXBjYV9idXMgIT0gREVQQ0FfQlVTX01DQSkKIAkJCW1lbV9zdGFydCArPSAweDgwMDA7CiAJfQotCQorCiAJaWYgKChtZW1fbGVuID0gKE5VTV9SWF9ERVNDICogKHNpemVvZihzdHJ1Y3QgZGVwY2FfcnhfZGVzYykgKyBSWF9CVUZGX1NaKSArIE5VTV9UWF9ERVNDICogKHNpemVvZihzdHJ1Y3QgZGVwY2FfdHhfZGVzYykgKyBUWF9CVUZGX1NaKSArIHNpemVvZihzdHJ1Y3QgZGVwY2FfaW5pdCkpKQogCSAgICA+IChuZXRSQU0gPDwgMTApKSB7CiAJCXByaW50aygiLFxuICAgICAgIHJlcXVlc3RzICVka0IgUkFNOiBvbmx5ICVka0IgaXMgYXZhaWxhYmxlIVxuIiwgKG1lbV9sZW4gPj4gMTApLCBuZXRSQU0pOwpAQCAtNjgyLDcgKzY4Miw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiZGVwY2E6IGNhbm5vdCByZXF1ZXN0IElTQSBtZW1vcnksIGFib3J0aW5nXG4iKTsKIAkJZ290byBvdXRfcHJpdjsKIAl9Ci0JCQorCiAJc3RhdHVzID0gLUVJTzsKIAlscC0+c2hfbWVtID0gaW9yZW1hcChtZW1fc3RhcnQsIG1lbV9sZW4pOwogCWlmIChscC0+c2hfbWVtID09IE5VTEwpIHsKQEAgLTgxMSw3ICs4MTEsNyBAQAogCiAJZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGRldjsKIAlTRVRfTkVUREVWX0RFViAoZGV2LCBkZXZpY2UpOwotCQorCiAJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHN0YXR1cyA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTgyMiw3ICs4MjIsNyBAQAogb3V0X3ByaXY6CiAJcmV0dXJuIHN0YXR1czsKIH0KLQwKKwogCiBzdGF0aWMgaW50IGRlcGNhX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTkyNCw4ICs5MjQsOCBAQAogfQogCiAKLS8qIAotKiogV3JpdGVzIGEgc29ja2V0IGJ1ZmZlciB0byBUWCBkZXNjcmlwdG9yIHJpbmcgYW5kIHN0YXJ0cyB0cmFuc21pc3Npb24gCisvKgorKiogV3JpdGVzIGEgc29ja2V0IGJ1ZmZlciB0byBUWCBkZXNjcmlwdG9yIHJpbmcgYW5kIHN0YXJ0cyB0cmFuc21pc3Npb24KICovCiBzdGF0aWMgaW50IGRlcGNhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTkzOSw3ICs5MzksNyBAQAogCiAJaWYgKHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKIAkJZ290byBvdXQ7Ci0JCisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAlpZiAoVFhfQlVGRlNfQVZBSUwpIHsJLyogRmlsbCBpbiBhIFR4IHJpbmcgZW50cnkgKi8KQEAgLTk2Myw3ICs5NjMsNyBAQAogfQogCiAvKgotKiogVGhlIERFUENBIGludGVycnVwdCBoYW5kbGVyLiAKKyoqIFRoZSBERVBDQSBpbnRlcnJ1cHQgaGFuZGxlci4KICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgZGVwY2FfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0xMDUzLDggKzEwNTMsOCBAQAogCQkJCQkJbWVtY3B5X2Zyb21pbyhidWYsIGxwLT5yeF9idWZmW2xwLT5yeF9vbGRdLCBwa3RfbGVuKTsKIAkJCQkJfQogCi0JCQkJCS8qIAotCQkJCQkgICAqKiBOb3RpZnkgdGhlIHVwcGVyIHByb3RvY29sIGxheWVycyB0aGF0IHRoZXJlIGlzIGFub3RoZXIgCisJCQkJCS8qCisJCQkJCSAgICoqIE5vdGlmeSB0aGUgdXBwZXIgcHJvdG9jb2wgbGF5ZXJzIHRoYXQgdGhlcmUgaXMgYW5vdGhlcgogCQkJCQkgICAqKiBwYWNrZXQgdG8gaGFuZGxlCiAJCQkJCSAqLwogCQkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwpAQCAtMTE2Nyw5ICsxMTY3LDkgQEAKIAkJcHJpbnRrKCIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLCBkZXYtPm5hbWUsIGludyhERVBDQV9EQVRBKSk7CiAJfQogCi0JLyogCisJLyoKIAkgICAqKiBXZSBzdG9wIHRoZSBERVBDQSBoZXJlIC0tIGl0IG9jY2FzaW9uYWxseSBwb2xscwotCSAgICoqIG1lbW9yeSBpZiB3ZSBkb24ndC4gCisJICAgKiogbWVtb3J5IGlmIHdlIGRvbid0LgogCSAqLwogCW91dHcoU1RPUCwgREVQQ0FfREFUQSk7CiAKQEAgLTEzMjAsMTIgKzEzMjAsMTIgQEAKIHN0YXRpYyBpbnQgX19pbml0IGRlcGNhX2NvbW1vbl9pbml0ICh1X2xvbmcgaW9hZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldnApCiB7CiAJaW50IHN0YXR1cyA9IDA7Ci0JCisKIAlpZiAoIXJlcXVlc3RfcmVnaW9uIChpb2FkZHIsIERFUENBX1RPVEFMX1NJWkUsIGRlcGNhX3N0cmluZykpIHsKIAkJc3RhdHVzID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9Ci0JCisKIAlpZiAoRGV2aWNlUHJlc2VudChpb2FkZHIpKSB7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X3JlbGVhc2U7CkBAIC0xMzM3LDcgKzEzMzcsNyBAQAogCX0KIAogCXJldHVybiAwOwotCQorCiAgb3V0X3JlbGVhc2U6CiAJcmVsZWFzZV9yZWdpb24gKGlvYWRkciwgREVQQ0FfVE9UQUxfU0laRSk7CiAgb3V0OgpAQCAtMTM1OSwxNiArMTM1OSwxNiBAQAogCXN0cnVjdCBkZXBjYV9wcml2YXRlICpscDsKIAogCS8qCi0JKiogU2VhcmNoIGZvciB0aGUgYWRhcHRlci4gIElmIGFuIGFkZHJlc3MgaGFzIGJlZW4gZ2l2ZW4sIHNlYXJjaCAKKwkqKiBTZWFyY2ggZm9yIHRoZSBhZGFwdGVyLiAgSWYgYW4gYWRkcmVzcyBoYXMgYmVlbiBnaXZlbiwgc2VhcmNoCiAJKiogc3BlY2lmaWNhbGx5IGZvciB0aGUgY2FyZCBhdCB0aGF0IGFkZHJlc3MuICBPdGhlcndpc2UgZmluZCB0aGUKIAkqKiBmaXJzdCBjYXJkIGluIHRoZSBzeXN0ZW0uCiAJKi8KLQkKKwogCXBvc1swXSA9IG1jYV9kZXZpY2VfcmVhZF9zdG9yZWRfcG9zKG1kZXYsIDIpOwogCXBvc1sxXSA9IG1jYV9kZXZpY2VfcmVhZF9zdG9yZWRfcG9zKG1kZXYsIDMpOwogCiAJLyoKLQkqKiBJTyBvZiBjYXJkIGlzIGhhbmRsZWQgYnkgYml0cyAxIGFuZCAyIG9mIHBvczAuICAgIAorCSoqIElPIG9mIGNhcmQgaXMgaGFuZGxlZCBieSBiaXRzIDEgYW5kIDIgb2YgcG9zMC4KIAkqKgogCSoqICAgIGJpdDIgYml0MSAgICBJTwogCSoqICAgICAgIDAgICAgMCAgICAweDJjMDAKQEAgLTEzODEsMTIgKzEzODEsMTIgQEAKIAogCS8qCiAJKiogRm91bmQgdGhlIGFkYXB0ZXIgd2Ugd2VyZSBsb29raW5nIGZvci4gTm93IHN0YXJ0IHNldHRpbmcgaXQgdXAuCi0JKiogCisJKioKIAkqKiBGaXJzdCB3b3JrIG9uIGRlY29kaW5nIHRoZSBJUlEuICBJdCdzIHN0b3JlZCBpbiB0aGUgbG93ZXIgNCBiaXRzCiAJKiogb2YgcG9zMS4gIEJpdHMgYXJlIGFzIGZvbGxvd3MgKGZyb20gdGhlIEFERiBmaWxlKToKIAkqKgotCSoqICAgICAgQml0cyAgICAgICAgICAgCi0JKiogICAzICAgMiAgIDEgICAwICAgIElSUSAKKwkqKiAgICAgIEJpdHMKKwkqKiAgIDMgICAyICAgMSAgIDAgICAgSVJRCiAJKiogICAtLS0tLS0tLS0tLS0tLS0tLS0tLQogCSoqICAgMCAgIDAgICAxICAgMCAgICAgNQogCSoqICAgMCAgIDAgICAwICAgMSAgICAgOQpAQCAtMTQzNSw3ICsxNDM1LDcgQEAKIAlzdHJuY3B5KG1kZXYtPm5hbWUsIGRlcGNhX21jYV9hZGFwdGVyX25hbWVbbWRldi0+aW5kZXhdLAogCQlzaXplb2YobWRldi0+bmFtZSkpOwogCW1jYV9kZXZpY2Vfc2V0X2NsYWltKG1kZXYsIDEpOwotCQorCiAgICAgICAgIC8qCiAJKiogR2V0IGV2ZXJ5dGhpbmcgYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZC4uLiAgKGFsbW9zdCBqdXN0CiAJKiogbGlrZSB0aGUgSVNBIGFuZCBFSVNBIHByb2JlcykKQEAgLTE0NTIsMTAgKzE0NTIsMTAgQEAKIAlscC0+ZGVwY2FfYnVzID0gREVQQ0FfQlVTX01DQTsKIAlscC0+YWRhcHRlciA9IGRlcGNhX21jYV9hZGFwdGVyX3R5cGVbbWRldi0+aW5kZXhdOwogCWxwLT5tZW1fc3RhcnQgPSBtZW1fc3RhcnQ7Ci0JCisKIAlpZiAoKGVyciA9IGRlcGNhX2h3X2luaXQoZGV2LCBkZXZpY2UpKSkKIAkJZ290byBvdXRfZnJlZTsKLQkJCQorCiAJcmV0dXJuIDA7CiAKICBvdXRfZnJlZToKQEAgLTE0NzksNyArMTQ3OSw3IEBACiAKIAlmb3IgKGkgPSAwOyBkZXBjYV9pb19wb3J0c1tpXS5pb2Jhc2U7IGkrKykgewogCQlkZXBjYV9pb19wb3J0c1tpXS5kZXZpY2UgPSBOVUxMOwotCQkKKwogCQkvKiBpZiBhbiBhZGRyZXNzIGhhcyBiZWVuIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZAogCQkgKiBsaW5lLCB1c2UgaXQgKGlmIHZhbGlkKSAqLwogCQlpZiAoaW8gJiYgaW8gIT0gZGVwY2FfaW9fcG9ydHNbaV0uaW9iYXNlKQpAQCAtMTUwMyw3ICsxNTAzLDcgQEAKIAkJICogbm8gaGFyZHdhcmUgYXQgdGhpcyBhZGRyZXNzLiBVbnJlZ2lzdGVyIGl0LCBhcyB0aGUKIAkJICogcmVsZWFzZSBmdWN0aW9uIHdpbGwgdGFrZSBjYXJlIG9mIGZyZWVpbmcgdGhlCiAJCSAqIGFsbG9jYXRlZCBzdHJ1Y3R1cmUgKi8KLQkJCQorCiAJCQlkZXBjYV9pb19wb3J0c1tpXS5kZXZpY2UgPSBOVUxMOwogCQkJcGxkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAkJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyIChwbGRldik7CkBAIC0xNTQxLDcgKzE1NDEsNyBAQAogCQlnb3RvIG91dDsKIAogCWFkYXB0ZXIgPSBkZXBjYV9zaG1lbV9wcm9iZSAoJm1lbV9zdGFydCk7Ci0JCisKIAlpZiAoYWRhcHRlciA9PSB1bmtub3duKSB7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0X2ZyZWU7CkBAIC0xNTU0LDEwICsxNTU0LDEwIEBACiAJbHAtPmRlcGNhX2J1cyA9IERFUENBX0JVU19JU0E7CiAJbHAtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWxwLT5tZW1fc3RhcnQgPSBtZW1fc3RhcnQ7Ci0JCisKIAlpZiAoKHN0YXR1cyA9IGRlcGNhX2h3X2luaXQoZGV2LCAmZGV2aWNlLT5kZXYpKSkKIAkJZ290byBvdXRfZnJlZTsKLQkKKwogCXJldHVybiAwOwogCiAgb3V0X2ZyZWU6CkBAIC0xNTkxLDcgKzE1OTEsNyBAQAogCSAqIGl0J3MgYWRkcmVzcyB3aXRoIHRoZSBldGhlcm5ldCBwcm9tKS4uLiBBcyB3ZSBkb24ndCBwYXJzZQogCSAqIHRoZSBFSVNBIGNvbmZpZ3VyYXRpb24gc3RydWN0dXJlcyAoeWV0Li4uIDotKSwganVzdCByZWx5IG9uCiAJICogdGhlIElTQSBwcm9iaW5nIHRvIHNvcnQgaXQgb3V0Li4uICovCi0JCisKIAlkZXBjYV9zaG1lbV9wcm9iZSAoJm1lbV9zdGFydCk7CiAKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkcjsKQEAgLTE2MDAsMTAgKzE2MDAsMTAgQEAKIAlscC0+ZGVwY2FfYnVzID0gREVQQ0FfQlVTX0VJU0E7CiAJbHAtPmFkYXB0ZXIgPSBlZGV2LT5pZC5kcml2ZXJfZGF0YTsKIAlscC0+bWVtX3N0YXJ0ID0gbWVtX3N0YXJ0OwotCQorCiAJaWYgKChzdGF0dXMgPSBkZXBjYV9od19pbml0KGRldiwgZGV2aWNlKSkpCiAJCWdvdG8gb3V0X2ZyZWU7Ci0JCisKIAlyZXR1cm4gMDsKIAogIG91dF9mcmVlOgpAQCAtMTY1MCw3ICsxNjUwLDcgQEAKIAkgKiB1c2VkLCBhdCBsZWFzdCBvbiB4ODYuIEluc3RlYWQsIHJlc2VydmUgYSBtZW1vcnkgcmVnaW9uIGEKIAkgKiBib2FyZCB3b3VsZCBjZXJ0YWlubHkgdXNlLiBJZiBpdCB3b3JrcywgZ28gYWhlYWQuIElmIG5vdCwKIAkgKiBydW4gbGlrZSBoZWxsLi4uICovCi0JCisKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbiAobWVtX2FkZHIsIDE2LCBkZXBjYV9zdHJpbmcpKQogCQlyZXR1cm4gdW5rbm93bjsKIApAQCAtMTY5OSw3ICsxNjk5LDcgQEAKICoqIGlmIHRoZSBmaXJzdCBhZGRyZXNzIG9jdGV0IGlzIGEgMHgwOCAtIHRoaXMgbWluaW1pc2VzIHRoZSBjaGFuY2VzIG9mCiAqKiBtZXNzaW5nIGFyb3VuZCB3aXRoIHNvbWUgb3RoZXIgaGFyZHdhcmUsIGJ1dCBpdCBhc3N1bWVzIHRoYXQgdGhpcyBERVBDQQogKiogY2FyZCBpbml0aWFsaXplZCBpdHNlbGYgY29ycmVjdGx5LgotKiogCisqKgogKiogU2VhcmNoIHRoZSBFdGhlcm5ldCBhZGRyZXNzIFJPTSBmb3IgdGhlIHNpZ25hdHVyZS4gU2luY2UgdGhlIFJPTSBhZGRyZXNzCiAqKiBjb3VudGVyIGNhbiBzdGFydCBhdCBhbiBhcmJpdHJhcnkgcG9pbnQsIHRoZSBzZWFyY2ggbXVzdCBpbmNsdWRlIHRoZSBlbnRpcmUKICoqIHByb2JlIHNlcXVlbmNlIGxlbmd0aCBwbHVzIHRoZSAobGVuZ3RoX29mX3RoZV9zaWduYXR1cmUgLSAxKS4KQEAgLTE4MDQsNyArMTgwNCw3IEBACiAJZW50cnkgPSBscC0+dHhfbmV3OwkvKiBSaW5nIGFyb3VuZCBidWZmZXIgbnVtYmVyLiAqLwogCWVuZCA9IChlbnRyeSArIChza2ItPmxlbiAtIDEpIC8gVFhfQlVGRl9TWikgJiBscC0+dHhSaW5nTWFzazsKIAlpZiAoIShyZWFkbCgmbHAtPnR4X3JpbmdbZW5kXS5iYXNlKSAmIFRfT1dOKSkgewkvKiBFbm91Z2ggcm9vbT8gKi8KLQkJLyogCisJCS8qCiAJCSAgICoqIENhdXRpb246IHRoZSB3cml0ZSBvcmRlciBpcyBpbXBvcnRhbnQgaGVyZS4uLiBkb24ndCBzZXQgdXAgdGhlCiAJCSAgICoqIG93bmVyc2hpcCByaWdodHMgdW50aWwgYWxsIHRoZSBvdGhlciBpbmZvcm1hdGlvbiBpcyBpbiBwbGFjZS4KIAkJICovCkBAIC0yMDg2LDcgKzIwODYsNyBAQAogI2VuZGlmCiAJZXJyIHw9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAoJmRlcGNhX2lzYV9kcml2ZXIpOwogCWRlcGNhX3BsYXRmb3JtX3Byb2JlICgpOwotCQorCiAgICAgICAgIHJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlcGNhLmggYi9kcml2ZXJzL25ldC9kZXBjYS5oCmluZGV4IDExNzg1MjcuLmVlNDI2NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlcGNhLmgKKysrIGIvZHJpdmVycy9uZXQvZGVwY2EuaApAQCAtMjAsMTcgKzIwLDE3IEBACiAjZGVmaW5lIERFUENBX1JCU0EgIGlvYWRkcisweDBlICAgLyogUkFNIGJ1ZmZlciBzdGFydGluZyBhZGRyZXNzICgyayBidWZmLikgKi8KIAogLyoKLSoqIFRoZXNlIGFyZSBMQU5DRSByZWdpc3RlcnMgYWRkcmVzc2FibGUgdGhyb3VnaCBERVBDQV9BRERSIAorKiogVGhlc2UgYXJlIExBTkNFIHJlZ2lzdGVycyBhZGRyZXNzYWJsZSB0aHJvdWdoIERFUENBX0FERFIKICovCiAjZGVmaW5lIENTUjAgICAgICAgMAogI2RlZmluZSBDU1IxICAgICAgIDEKICNkZWZpbmUgQ1NSMiAgICAgICAyCiAjZGVmaW5lIENTUjMgICAgICAgMwogCi0vKiAKLSoqIE5FVFdPUksgSU5URVJGQUNFIENTUiAoTklfQ1NSKSBiaXQgZGVmaW5pdGlvbnMgCisvKgorKiogTkVUV09SSyBJTlRFUkZBQ0UgQ1NSIChOSV9DU1IpIGJpdCBkZWZpbml0aW9ucwogKi8KLSAKKwogI2RlZmluZSBUTyAgICAgICAJMHgwMTAwCS8qIFRpbWUgT3V0IGZvciByZW1vdGUgYm9vdCAqLwogI2RlZmluZSBTSEUgICAgICAJMHgwMDgwICAvKiBTSGFkb3cgbWVtb3J5IEVuYWJsZSAqLwogI2RlZmluZSBCUyAgICAgICAJMHgwMDQwICAvKiBCYW5rIFNlbGVjdCAqLwpAQCAtNDIsOCArNDIsOCBAQAogI2RlZmluZSBJRU4gICAgICAJMHgwMDAyCS8qIEludGVycnVwdCB0cmlzdGF0ZSBFTmFibGUgKDEtPmVuYWJsZSkgKi8KICNkZWZpbmUgTEVEICAgICAgCTB4MDAwMQkvKiBMRUQgY29udHJvbCAqLwogCi0vKiAKLSoqIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwIChDU1IwKSBiaXQgZGVmaW5pdGlvbnMgCisvKgorKiogQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIDAgKENTUjApIGJpdCBkZWZpbml0aW9ucwogKi8KIAogI2RlZmluZSBFUlIgICAgIAkweDgwMDAgCS8qIEVycm9yIHN1bW1hcnkgKi8KQEAgLTc0LDcgKzc0LDcgQEAKICNkZWZpbmUgQkNPTiAgICAJMHgwMDAxCS8qIEJ5dGUgQ09OdHJvbCAqLwogCiAvKgotKiogSW5pdGlhbGl6YXRpb24gQmxvY2sgTW9kZSBSZWdpc3RlciAKKyoqIEluaXRpYWxpemF0aW9uIEJsb2NrIE1vZGUgUmVnaXN0ZXIKICovCiAKICNkZWZpbmUgUFJPTSAgICAgICAJMHg4MDAwIAkvKiBQcm9taXNjdW91cyBNb2RlICovCkBAIC04OCw3ICs4OCw3IEBACiAjZGVmaW5lIERSWCAgICAgICAgCTB4MDAwMSAJLyogRGlzYWJsZSB0aGUgUmVjZWl2ZXIgKi8KIAogLyoKLSoqIFJlY2VpdmUgTWVzc2FnZSBEZXNjcmlwdG9yIDEgKFJNRDEpIGJpdCBkZWZpbml0aW9ucy4gCisqKiBSZWNlaXZlIE1lc3NhZ2UgRGVzY3JpcHRvciAxIChSTUQxKSBiaXQgZGVmaW5pdGlvbnMuCiAqLwogCiAjZGVmaW5lIFJfT1dOICAgICAgIDB4ODAwMDAwMDAgCS8qIE93bmVyIGJpdCAwID0gaG9zdCwgMSA9IGxhbmNlICovCkBAIC0xMDEsNyArMTAxLDcgQEAKICNkZWZpbmUgUl9FTlAgICAgIAkweDAxMDAgCS8qIEVuZCBvZiBQYWNrZXQgKi8KIAogLyoKLSoqIFRyYW5zbWl0IE1lc3NhZ2UgRGVzY3JpcHRvciAxIChUTUQxKSBiaXQgZGVmaW5pdGlvbnMuIAorKiogVHJhbnNtaXQgTWVzc2FnZSBEZXNjcmlwdG9yIDEgKFRNRDEpIGJpdCBkZWZpbml0aW9ucy4KICovCiAKICNkZWZpbmUgVF9PV04gICAgICAgMHg4MDAwMDAwMCAJLyogT3duZXIgYml0IDAgPSBob3N0LCAxID0gbGFuY2UgKi8KQEAgLTEyNSwxMCArMTI1LDEwIEBACiAjZGVmaW5lIFRNRDNfTENBUiAgICAweDA4MDAJLyogTG9zcyBvZiBDQVJyaWVyICovCiAjZGVmaW5lIFRNRDNfUlRSWSAgICAweDA0MDAJLyogUmVUUlkgZXJyb3IgKi8KIAotLyogCi0qKiBFSVNBIGNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKENORkcpIGJpdCBkZWZpbml0aW9ucyAKKy8qCisqKiBFSVNBIGNvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKENORkcpIGJpdCBkZWZpbml0aW9ucwogKi8KLSAKKwogI2RlZmluZSBUSU1FT1VUICAgICAgIAkweDAxMDAJLyogMDoyLjUgbWlucywgMTogMzAgc2VjcyAqLwogI2RlZmluZSBSRU1PVEUgICAgICAJMHgwMDgwICAvKiBSZW1vdGUgQm9vdCBFbmFibGUgLT4gMSAqLwogI2RlZmluZSBJUlExMSAgICAgICAJMHgwMDQwICAvKiBFbmFibGUgLT4gMSAqLwpAQCAtMTY1LDggKzE2NSw4IEBACiAJdW5zaWduZWQgY2hhciAgX191c2VyICpkYXRhOyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciAqLwogfTsKIAotLyogCi0qKiBSZWNvZ25pc2VkIGNvbW1hbmRzIGZvciB0aGUgZHJpdmVyIAorLyoKKyoqIFJlY29nbmlzZWQgY29tbWFuZHMgZm9yIHRoZSBkcml2ZXIKICovCiAjZGVmaW5lIERFUENBX0dFVF9IV0FERFIJMHgwMSAvKiBHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgKi8KICNkZWZpbmUgREVQQ0FfU0VUX0hXQUREUgkweDAyIC8qIEdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGdycy5jIGIvZHJpdmVycy9uZXQvZGdycy5jCmluZGV4IGZhNGYwOTQzLi5lOTM2MWNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZ3JzLmMKKysrIGIvZHJpdmVycy9uZXQvZGdycy5jCkBAIC04NzQsNyArODc0LDcgQEAKIAkJCXByaXZOLT5iY29tbS0+YmNfZmlsdGVyX3BvcnQgPSBpb2MucG9ydDsKIAkJCXByaXZOLT5iY29tbS0+YmNfZmlsdGVyX251bSA9IGlvYy5maWx0ZXI7CiAJCQlwcml2Ti0+YmNvbW0tPmJjX2ZpbHRlcl9sZW4gPSBpb2MubGVuOwotCQorCiAJCQlpZiAoaW9jLmxlbikKIAkJCXsKIAkJCQlpZihjb3B5X2Zyb21fdXNlcihTMkhOKHByaXZOLT5iY29tbS0+YmNfZmlsdGVyX2FyZWEpLApAQCAtOTg2LDcgKzk4Niw3IEBACiAvKgogICoJRG93bmxvYWQgdGhlIGJvYXJkIGZpcm13YXJlCiAgKi8KLXN0YXRpYyBpbnQgX19pbml0IAorc3RhdGljIGludCBfX2luaXQKIGRncnNfZG93bmxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldjApCiB7CiAJREdSU19QUklWCSpwcml2MCA9IChER1JTX1BSSVYgKikgZGV2MC0+cHJpdjsKQEAgLTExNTAsNyArMTE1MCw3IEBACiAvKgogICoJUHJvYmUgKGluaXQpIGEgYm9hcmQKICAqLwotc3RhdGljIGludCBfX2luaXQgCitzdGF0aWMgaW50IF9faW5pdAogZGdyc19wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlER1JTX1BSSVYJKnByaXYgPSAoREdSU19QUklWICopIGRldi0+cHJpdjsKQEAgLTExOTAsNyArMTE5MCw3IEBACiAJICovCiAJaWYgKHByaXYtPnBseHJlZykKIAkJT1VUTChkZXYtPmJhc2VfYWRkciArIFBMWF9MQ0wyUENJX0RPT1JCRUxMLCAxKTsKLQkKKwogCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICZkZ3JzX2ludHIsIElSUUZfU0hBUkVELCAiUmlnaHRTd2l0Y2giLCBkZXYpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKICAgICAgICAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCAKK3N0YXRpYyBpbnQgX19pbml0CiBkZ3JzX2luaXRjbG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCURHUlNfUFJJVgkqcHJpdiA9IChER1JTX1BSSVYgKikgZGV2LT5wcml2OwpAQCAtMTI0Myw3ICsxMjQzLDcgQEAKIAlyZXR1cm4gKDApOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQKIGRncnNfZm91bmRfZGV2aWNlKAogCWludAkJaW8sCiAJdWxvbmcJCW1lbSwKQEAgLTEyNzYsOSArMTI3Niw5IEBACiAKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCBwZGV2KTsKLQkKKwogCXJldCA9IGRncnNfcHJvYmUxKGRldik7Ci0JaWYgKHJldCkgCisJaWYgKHJldCkKIAkJZ290byBlcnIxOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CkBAIC0xMzAxLDcgKzEzMDEsNyBAQAogCQkJLyogQWxsb2NhdGUgbmV3IGRldiBhbmQgcHJpdiBzdHJ1Y3R1cmVzICovCiAJCWRldk4gPSBhbGxvY19ldGhlcmRldihzaXplb2YoREdSU19QUklWKSk7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWlmICghZGV2TikgCisJCWlmICghZGV2TikKIAkJCWdvdG8gZmFpbDsKIAogCQkvKiBEb24ndCBjb3B5IHRoZSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUhICovCkBAIC0xMzM1LDcgKzEzMzUsNyBAQAogCX0KIAlyZXR1cm4gZGV2OwogCi0gZmFpbDoJCisgZmFpbDoKIAl3aGlsZSAoaSA+PSAwKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkID0gcHJpdi0+ZGV2dGJsW2ktLV07CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGQpOwpAQCAtMTQ4MCw3ICsxNDgwLDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlpZiAoICEgKGluYihpbytFUzRIX0VDKSAmIEVTNEhfRUNfRU5BQkxFKSApIAorCWlmICggISAoaW5iKGlvK0VTNEhfRUMpICYgRVM0SF9FQ19FTkFCTEUpICkKIAkJZ290byBlcnJfb3V0OwogCiAJbWVtID0gKGluYihpbytFUzRIX0FTXzMxXzI0KSA8PCAyNCkKQEAgLTE1MDQsMTEgKzE1MDQsMTEgQEAKIHN0YXRpYyBpbnQgX19kZXZleGl0IGRncnNfZWlzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZ2VuZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBnZW5kZXYtPmRyaXZlcl9kYXRhOwotCQorCiAJZGdyc19yZW1vdmUoZGV2KTsKIAogCXJlbGVhc2VfcmVnaW9uKGRldi0+YmFzZV9hZGRyLCAyNTYpOwotCQkKKwogCWZyZWVfbmV0ZGV2KGRldik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZ3JzLmggYi9kcml2ZXJzL25ldC9kZ3JzLmgKaW5kZXggYzM0N2NkMS4uNjA1OGQ1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGdycy5oCisrKyBiL2RyaXZlcnMvbmV0L2RncnMuaApAQCAtMzEsOCArMzEsOCBAQAogCXVuc2lnbmVkIHNob3J0CWZpbHRlcjsJLyogZmlsdGVyIG51bWJlciBmb3IgY29tbWFuZCwgaWYgbmVlZGVkICovCiB9IERHUlNfSU9DVEw7CiAKLS8qIAotICoJQ29tbWFuZHMgZm9yIHRoZSBkcml2ZXIgCisvKgorICoJQ29tbWFuZHMgZm9yIHRoZSBkcml2ZXIKICAqLwogI2RlZmluZQlER1JTX0dFVE1FTQkJMHgwMQkvKiBHZXQgdGhlIGR1YWwgcG9ydCBtZW1vcnkgYWRkcmVzcyAqLwogI2RlZmluZQlER1JTX1NFVEZJTFRFUgkJMHgwMgkvKiBTZXQgYSBmaWx0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RncnNfYXNzdHJ1Y3QuaCBiL2RyaXZlcnMvbmV0L2RncnNfYXNzdHJ1Y3QuaAppbmRleCBhOGU1YmI1Li5mMGUyMTIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZ3JzX2Fzc3RydWN0LmgKKysrIGIvZHJpdmVycy9uZXQvZGdyc19hc3N0cnVjdC5oCkBAIC0xOSw3ICsxOSw3IEBACiAjCWRlZmluZQlTMSh0LHgpCQlfT2ZmPShfT2ZmKzApJn4wOyB4PV9PZmY7IF9PZmY9X09mZisxCiAjCWRlZmluZQlTMih0LHgpCQlfT2ZmPShfT2ZmKzEpJn4xOyB4PV9PZmY7IF9PZmY9X09mZisyCiAjCWRlZmluZQlTNCh0LHgpCQlfT2ZmPShfT2ZmKzMpJn4zOyB4PV9PZmY7IF9PZmY9X09mZis0Ci0jCWRlZmluZQlFTkRfU1RSVUNUKHgpCV9PZmY9KF9PZmYrMykmfjM7IHg9X09mZiAKKyMJZGVmaW5lCUVORF9TVFJVQ1QoeCkJX09mZj0oX09mZiszKSZ+MzsgeD1fT2ZmCiAKICNlbHNlCS8qIEMgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGdyc19iY29tbS5oIGIvZHJpdmVycy9uZXQvZGdyc19iY29tbS5oCmluZGV4IDY2NDY2MDguLjVlOWMyNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RncnNfYmNvbW0uaAorKysgYi9kcml2ZXJzL25ldC9kZ3JzX2Jjb21tLmgKQEAgLTI3LDcgKzI3LDcgQEAKICAqCWJjX25vd2FpdAogICoJYmNfaG9zdGFyZWFfbGVuCiAgKgliY19maWx0ZXJfbGVuCi0gKgkJCQorICoKICAqLwogQkVHSU5fU1RSVUNUKGJpb3NfY29tbSkKIAlTNCh1bG9uZywgYmNfaW50ZmxhZykJLyogQ291bnQgb2YgYWxsIGludGVycnVwdHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RncnNfZXRoZXIuaCBiL2RyaXZlcnMvbmV0L2RncnNfZXRoZXIuaAppbmRleCA1MTU5NmNlLi43NTM5YjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZ3JzX2V0aGVyLmgKKysrIGIvZHJpdmVycy9uZXQvZGdyc19ldGhlci5oCkBAIC00OSw3ICs0OSw3IEBACiAJaW50CQlidWZfY250OwkvKiBUb3RhbCBSQkQncyBhbGxvY2F0ZWQgKi8KIAogCS8qIFJ4IFN0YXRpc3RpY3MgKi8KLQl1bG9uZwkJY250X3J4X2NudDsJLyogVG90YWwgcGFja2V0cyByY3ZkLCBnb29kIGFuZCBiYWQgKi8gCisJdWxvbmcJCWNudF9yeF9jbnQ7CS8qIFRvdGFsIHBhY2tldHMgcmN2ZCwgZ29vZCBhbmQgYmFkICovCiAJdWxvbmcJCWNudF9yeF9nb29kOwkvKiBUb3RhbCBnb29kIHBhY2tldHMgcmN2ZCAqLwogCXVsb25nCQljbnRfcnhfYmFkOwkvKiBUb3RhbCBvZiBhbGwgYmFkIHBhY2tldHMgcmN2ZCAqLwogCQkJCQkvKiBTdWJ0b3RhbHMgY2FuIGJlIGdvdHRlbiBmcm9tIFNDQiAqLwpAQCAtOTQsNyArOTQsNyBAQAogCSAqCUZpbHRlciAwOiBpbnB1dCBmaWx0ZXIKIAkgKglGaWx0ZXIgMTogb3V0cHV0IGZpbHRlcgogCSAqLwotCQorCiAJdWxvbmcJCSpmaWx0ZXJfc3BhY2VbTkZJTFRFUlNdOwogCUZJTFRFUl9GVU5DCSpmaWx0ZXJfZnVuY1tORklMVEVSU107CiAJdWxvbmcJCWZpbHRlcl9jbnRbTkZJTFRFUlNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGdyc19pODI1OTYuaCBiL2RyaXZlcnMvbmV0L2RncnNfaTgyNTk2LmgKaW5kZXggYzdhMzhjMS4uYWM5MjE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGdyc19pODI1OTYuaAorKysgYi9kcml2ZXJzL25ldC9kZ3JzX2k4MjU5Ni5oCkBAIC00NTUsNyArNDU1LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiB0eXBlZGVmIHZvbGF0aWxlIHN0cnVjdAogewotCXVsb25nCQlzeXNidXM7CQorCXVsb25nCQlzeXNidXM7CiAJdWxvbmcJCWR1bW15OwogCUk1OTZfSVNDUAkqaXNjcHA7CiB9IEk1OTZfU0NQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IDQwMjk2MWUuLmM1YzgwZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9Ci0gICAgICBLRVJOX0lORk8gRFJWX05BTUUgIiAiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOwkKKyAgICAgIEtFUk5fSU5GTyBEUlZfTkFNRSAiICIgRFJWX1ZFUlNJT04gIiAiIERSVl9SRUxEQVRFICJcbiI7CiAjZGVmaW5lIE1BWF9VTklUUyA4CiBzdGF0aWMgaW50IG10dVtNQVhfVU5JVFNdOwogc3RhdGljIGludCB2bGFuW01BWF9VTklUU107CkBAIC04Myw3ICs4Myw3IEBACiBzdGF0aWMgaW50IG1paV93cml0ZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSwKIAkJICAgICAgdTE2IGRhdGEpOwogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAogc3RhdGljIGludCBfX2RldmluaXQKIHJpb19wcm9iZTEgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMTQ0LDkgKzE0NCw5IEBACiAJCWlmIChtZWRpYVtjYXJkX2lkeF0gIT0gTlVMTCkgewogCQkJbnAtPmFuX2VuYWJsZSA9IDA7CiAJCQlpZiAoc3RyY21wIChtZWRpYVtjYXJkX2lkeF0sICJhdXRvIikgPT0gMCB8fAotCQkJICAgIHN0cmNtcCAobWVkaWFbY2FyZF9pZHhdLCAiYXV0b3NlbnNlIikgPT0gMCB8fCAKKwkJCSAgICBzdHJjbXAgKG1lZGlhW2NhcmRfaWR4XSwgImF1dG9zZW5zZSIpID09IDAgfHwKIAkJCSAgICBzdHJjbXAgKG1lZGlhW2NhcmRfaWR4XSwgIjAiKSA9PSAwICkgewotCQkJCW5wLT5hbl9lbmFibGUgPSAyOyAKKwkJCQlucC0+YW5fZW5hYmxlID0gMjsKIAkJCX0gZWxzZSBpZiAoc3RyY21wIChtZWRpYVtjYXJkX2lkeF0sICIxMDBtYnBzX2ZkIikgPT0gMCB8fAogCQkJICAgIHN0cmNtcCAobWVkaWFbY2FyZF9pZHhdLCAiNCIpID09IDApIHsKIAkJCQlucC0+c3BlZWQgPSAxMDA7CkBAIC0yMzIsNyArMjMyLDcgQEAKIAllcnIgPSBmaW5kX21paXBoeSAoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9vdXRfdW5tYXBfcng7Ci0JCisKIAkvKiBGaWJlciBkZXZpY2U/ICovCiAJbnAtPnBoeV9tZWRpYSA9IChyZWFkdyhpb2FkZHIgKyBBU0lDQ3RybCkgJiBQaHlNZWRpYSkgPyAxIDogMDsKIAlucC0+bGlua19zdGF0dXMgPSAwOwpAQCAtMjYzLDExICsyNjMsMTEgQEAKIAkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKIAkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSwgaXJxKTsKIAlpZiAodHhfY29hbGVzY2UgPiAxKQotCQlwcmludGsoS0VSTl9JTkZPICJ0eF9jb2FsZXNjZTpcdCVkIHBhY2tldHNcbiIsIAorCQlwcmludGsoS0VSTl9JTkZPICJ0eF9jb2FsZXNjZTpcdCVkIHBhY2tldHNcbiIsCiAJCQkJdHhfY29hbGVzY2UpOwogCWlmIChucC0+Y29hbGVzY2UpCiAJCXByaW50ayhLRVJOX0lORk8gInJ4X2NvYWxlc2NlOlx0JWQgcGFja2V0c1xuIgotCQkgICAgICAgS0VSTl9JTkZPICJyeF90aW1lb3V0OiBcdCVkIG5zXG4iLCAKKwkJICAgICAgIEtFUk5fSU5GTyAicnhfdGltZW91dDogXHQlZCBuc1xuIiwKIAkJCQlucC0+cnhfY29hbGVzY2UsIG5wLT5yeF90aW1lb3V0KjY0MCk7CiAJaWYgKG5wLT52bGFuKQogCQlwcmludGsoS0VSTl9JTkZPICJ2bGFuKGlkKTpcdCVkXG4iLCBucC0+dmxhbik7CkBAIC0zMzksNyArMzM5LDcgQEAKIAl9CiAjaWZkZWYJTUVNX01BUFBJTkcKIAlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSNlbmRpZgkKKyNlbmRpZgogCS8qIENoZWNrIENSQyAqLwogCWNyYyA9IH5ldGhlcl9jcmNfbGUgKDI1NiAtIDQsIHNyb21kYXRhKTsKIAlpZiAocHNyb20tPmNyYyAhPSBjcmMpIHsKQEAgLTQwMCwxNiArNDAwLDE2IEBACiAJbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgaTsKIAl1MTYgbWFjY3RybDsKLQkKKwogCWkgPSByZXF1ZXN0X2lycSAoZGV2LT5pcnEsICZyaW9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChpKQogCQlyZXR1cm4gaTsKLQkKKwogCS8qIFJlc2V0IGFsbCBsb2dpYyBmdW5jdGlvbnMgKi8KIAl3cml0ZXcgKEdsb2JhbFJlc2V0IHwgRE1BUmVzZXQgfCBGSUZPUmVzZXQgfCBOZXR3b3JrUmVzZXQgfCBIb3N0UmVzZXQsCiAJCWlvYWRkciArIEFTSUNDdHJsICsgMik7CiAJbWRlbGF5KDEwKTsKLQkKKwogCS8qIERlYnVnQ3RybCBiaXQgNCwgNSwgOSBtdXN0IHNldCAqLwogCXdyaXRlbCAocmVhZGwgKGlvYWRkciArIERlYnVnQ3RybCkgfCAweDAyMzAsIGlvYWRkciArIERlYnVnQ3RybCk7CiAKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCS8qIFZMQU4gc3VwcG9ydGVkICovCiAJaWYgKG5wLT52bGFuKSB7CiAJCS8qIHByaW9yaXR5IGZpZWxkIGluIFJ4RE1BSW50Q3RybCAgKi8KLQkJd3JpdGVsIChyZWFkbChpb2FkZHIgKyBSeERNQUludEN0cmwpIHwgMHg3IDw8IDEwLCAKKwkJd3JpdGVsIChyZWFkbChpb2FkZHIgKyBSeERNQUludEN0cmwpIHwgMHg3IDw8IDEwLAogCQkJaW9hZGRyICsgUnhETUFJbnRDdHJsKTsKIAkJLyogVkxBTklkICovCiAJCXdyaXRldyAobnAtPnZsYW4sIGlvYWRkciArIFZMQU5JZCk7CkBAIC00NTksOSArNDU5LDkgQEAKIAlhZGRfdGltZXIgKCZucC0+dGltZXIpOwogCiAJLyogU3RhcnQgVHgvUnggKi8KLQl3cml0ZWwgKHJlYWRsIChpb2FkZHIgKyBNQUNDdHJsKSB8IFN0YXRzRW5hYmxlIHwgUnhFbmFibGUgfCBUeEVuYWJsZSwgCisJd3JpdGVsIChyZWFkbCAoaW9hZGRyICsgTUFDQ3RybCkgfCBTdGF0c0VuYWJsZSB8IFJ4RW5hYmxlIHwgVHhFbmFibGUsCiAJCQlpb2FkZHIgKyBNQUNDdHJsKTsKLQkKKwogCW1hY2N0cmwgPSAwOwogCW1hY2N0cmwgfD0gKG5wLT52bGFuKSA/IEF1dG9WTEFOdW50YWdnaW5nIDogMDsKIAltYWNjdHJsIHw9IChucC0+ZnVsbF9kdXBsZXgpID8gRHVwbGV4U2VsZWN0IDogMDsKQEAgLTQ3MCwxMyArNDcwLDEzIEBACiAJd3JpdGV3KG1hY2N0cmwsCWlvYWRkciArIE1BQ0N0cmwpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUgKGRldik7Ci0JCisKIAkvKiBFbmFibGUgZGVmYXVsdCBpbnRlcnJ1cHRzICovCiAJRW5hYmxlSW50ICgpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCAKK3N0YXRpYyB2b2lkCiByaW9fdGltZXIgKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKQEAgLTUyMSw3ICs1MjEsNyBAQAogCW5wLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIG5leHRfdGljazsKIAlhZGRfdGltZXIoJm5wLT50aW1lcik7CiB9Ci0JCisKIHN0YXRpYyB2b2lkCiByaW9fdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTYzMiwxMiArNjMyLDEyIEBACiAJICogV29yayBhcm91bmQ6IEFsd2F5cyB1c2UgMSBkZXNjcmlwdG9yIGluIDEwTWJwcyBtb2RlICovCiAJaWYgKGVudHJ5ICUgbnAtPnR4X2NvYWxlc2NlID09IDAgfHwgbnAtPnNwZWVkID09IDEwKQogCQl0eGRlc2MtPnN0YXR1cyA9IGNwdV90b19sZTY0IChlbnRyeSB8IHRmY192bGFuX3RhZyB8Ci0JCQkJCSAgICAgIFdvcmRBbGlnbkRpc2FibGUgfCAKKwkJCQkJICAgICAgV29yZEFsaWduRGlzYWJsZSB8CiAJCQkJCSAgICAgIFR4RE1BSW5kaWNhdGUgfAogCQkJCQkgICAgICAoMSA8PCBGcmFnQ291bnRTaGlmdCkpOwogCWVsc2UKIAkJdHhkZXNjLT5zdGF0dXMgPSBjcHVfdG9fbGU2NCAoZW50cnkgfCB0ZmNfdmxhbl90YWcgfAotCQkJCQkgICAgICBXb3JkQWxpZ25EaXNhYmxlIHwgCisJCQkJCSAgICAgIFdvcmRBbGlnbkRpc2FibGUgfAogCQkJCQkgICAgICAoMSA8PCBGcmFnQ291bnRTaGlmdCkpOwogCiAJLyogVHhETUFQb2xsTm93ICovCkBAIC02NTgsNyArNjU4LDcgQEAKIAkJCWRldi0+YmFzZV9hZGRyICsgVEZETGlzdFB0cjApOwogCQl3cml0ZWwgKDAsIGRldi0+YmFzZV9hZGRyICsgVEZETGlzdFB0cjEpOwogCX0KLQkKKwogCS8qIE5FVERFViBXQVRDSERPRyB0aW1lciAqLwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJldHVybiAwOwpAQCAtNjc3LDcgKzY3Nyw3IEBACiAJaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXdoaWxlICgxKSB7Ci0JCWludF9zdGF0dXMgPSByZWFkdyAoaW9hZGRyICsgSW50U3RhdHVzKTsgCisJCWludF9zdGF0dXMgPSByZWFkdyAoaW9hZGRyICsgSW50U3RhdHVzKTsKIAkJd3JpdGV3IChpbnRfc3RhdHVzLCBpb2FkZHIgKyBJbnRTdGF0dXMpOwogCQlpbnRfc3RhdHVzICY9IERFRkFVTFRfSU5UUjsKIAkJaWYgKGludF9zdGF0dXMgPT0gMCB8fCAtLWNudCA8IDApCkBAIC02OTMsNyArNjkzLDcgQEAKIAkJCWlmICh0eF9zdGF0dXMgJiAweDAxKQogCQkJCXR4X2Vycm9yIChkZXYsIHR4X3N0YXR1cyk7CiAJCQkvKiBGcmVlIHVzZWQgdHggc2tidWZmcyAqLwotCQkJcmlvX2ZyZWVfdHggKGRldiwgMSk7CQkKKwkJCXJpb19mcmVlX3R4IChkZXYsIDEpOwogCQl9CiAKIAkJLyogSGFuZGxlIHVuY29tbW9uIGV2ZW50cyAqLwpAQCAtNzA2LDE5ICs3MDYsMTkgQEAKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAotc3RhdGljIHZvaWQgCi1yaW9fZnJlZV90eCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlycSkgCitzdGF0aWMgdm9pZAorcmlvX2ZyZWVfdHggKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpcnEpCiB7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGVudHJ5ID0gbnAtPm9sZF90eCAlIFRYX1JJTkdfU0laRTsKIAlpbnQgdHhfdXNlID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWcgPSAwOwotCQorCiAJaWYgKGlycSkKIAkJc3Bpbl9sb2NrKCZucC0+dHhfbG9jayk7CiAJZWxzZQogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPnR4X2xvY2ssIGZsYWcpOwotCQkJCisKIAkvKiBGcmVlIHVzZWQgdHggc2tidWZmcyAqLwogCXdoaWxlIChlbnRyeSAhPSBucC0+Y3VyX3R4KSB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC03NDQsMTEgKzc0NCwxMSBAQAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZucC0+dHhfbG9jaywgZmxhZyk7CiAJbnAtPm9sZF90eCA9IGVudHJ5OwogCi0JLyogSWYgdGhlIHJpbmcgaXMgbm8gbG9uZ2VyIGZ1bGwsIGNsZWFyIHR4X2Z1bGwgYW5kIAorCS8qIElmIHRoZSByaW5nIGlzIG5vIGxvbmdlciBmdWxsLCBjbGVhciB0eF9mdWxsIGFuZAogCSAgIGNhbGwgbmV0aWZfd2FrZV9xdWV1ZSgpICovCiAKIAlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCi0JICAgICgobnAtPmN1cl90eCAtIG5wLT5vbGRfdHggKyBUWF9SSU5HX1NJWkUpICUgVFhfUklOR19TSVpFIAorCSAgICAoKG5wLT5jdXJfdHggLSBucC0+b2xkX3R4ICsgVFhfUklOR19TSVpFKSAlIFRYX1JJTkdfU0laRQogCSAgICA8IFRYX1FVRVVFX0xFTiAtIDEgfHwgbnAtPnNwZWVkID09IDEwKSkgewogCQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwogCX0KQEAgLTgwNSwxMSArODA1LDExIEBACiAJCS8qIExldCBUeFN0YXJ0VGhyZXNoIHN0YXkgZGVmYXVsdCB2YWx1ZSAqLwogCX0KIAkvKiBNYXhpbXVtIENvbGxpc2lvbnMgKi8KLSNpZmRlZiBFVEhFUl9TVEFUUwkKLQlpZiAodHhfc3RhdHVzICYgMHgwOCkgCisjaWZkZWYgRVRIRVJfU1RBVFMKKwlpZiAodHhfc3RhdHVzICYgMHgwOCkKIAkJbnAtPnN0YXRzLmNvbGxpc2lvbnMxNisrOwogI2Vsc2UKLQlpZiAodHhfc3RhdHVzICYgMHgwOCkgCisJaWYgKHR4X3N0YXR1cyAmIDB4MDgpCiAJCW5wLT5zdGF0cy5jb2xsaXNpb25zKys7CiAjZW5kaWYKIAkvKiBSZXN0YXJ0IHRoZSBUeCAqLwpAQCAtODYyLDcgKzg2Miw3IEBACiAJCQkJbnAtPnJ4X3NrYnVmZltlbnRyeV0gPSBOVUxMOwogCQkJfSBlbHNlIGlmICgoc2tiID0gZGV2X2FsbG9jX3NrYiAocGt0X2xlbiArIDIpKSAhPSBOVUxMKSB7CiAJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KG5wLT5wZGV2LAotCQkJCSAgCQkJICAgIGRlc2MtPmZyYWdpbmZvICYgCisJCQkJICAJCQkgICAgZGVzYy0+ZnJhZ2luZm8gJgogCQkJCQkJCSAgICAJRE1BXzQ4QklUX01BU0ssCiAJCQkJCQkJICAgIG5wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CkBAIC04ODAsMTIgKzg4MCwxMiBAQAogCQkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJfQogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zIChza2IsIGRldik7Ci0jaWYgMAkJCQorI2lmIDAKIAkJCS8qIENoZWNrc3VtIGRvbmUgYnkgaHcsIGJ1dCBjc3VtIHZhbHVlIHVuYXZhaWxhYmxlLiAqLwotCQkJaWYgKG5wLT5wY2lfcmV2X2lkID49IDB4MGMgJiYgCisJCQlpZiAobnAtPnBjaV9yZXZfaWQgPj0gMHgwYyAmJgogCQkJCSEoZnJhbWVfc3RhdHVzICYgKFRDUEVycm9yIHwgVURQRXJyb3IgfCBJUEVycm9yKSkpIHsKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotCQkJfSAKKwkJCX0KICNlbmRpZgogCQkJbmV0aWZfcnggKHNrYik7CiAJCQlkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwpAQCAtOTQ1LDE0ICs5NDUsMTQgQEAKIAkJCQltaWlfZ2V0X21lZGlhIChkZXYpOwogCQkJaWYgKG5wLT5zcGVlZCA9PSAxMDAwKQogCQkJCW5wLT50eF9jb2FsZXNjZSA9IHR4X2NvYWxlc2NlOwotCQkJZWxzZSAKKwkJCWVsc2UKIAkJCQlucC0+dHhfY29hbGVzY2UgPSAxOwogCQkJbWFjY3RybCA9IDA7CiAJCQltYWNjdHJsIHw9IChucC0+dmxhbikgPyBBdXRvVkxBTnVudGFnZ2luZyA6IDA7CiAJCQltYWNjdHJsIHw9IChucC0+ZnVsbF9kdXBsZXgpID8gRHVwbGV4U2VsZWN0IDogMDsKLQkJCW1hY2N0cmwgfD0gKG5wLT50eF9mbG93KSA/IAorCQkJbWFjY3RybCB8PSAobnAtPnR4X2Zsb3cpID8KIAkJCQlUeEZsb3dDb250cm9sRW5hYmxlIDogMDsKLQkJCW1hY2N0cmwgfD0gKG5wLT5yeF9mbG93KSA/IAorCQkJbWFjY3RybCB8PSAobnAtPnJ4X2Zsb3cpID8KIAkJCQlSeEZsb3dDb250cm9sRW5hYmxlIDogMDsKIAkJCXdyaXRldyhtYWNjdHJsLAlpb2FkZHIgKyBNQUNDdHJsKTsKIAkJCW5wLT5saW5rX3N0YXR1cyA9IDE7CkBAIC05NjksNyArOTY5LDcgQEAKIAkJZ2V0X3N0YXRzIChkZXYpOwogCX0KIAotCS8qIFBDSSBFcnJvciwgYSBjYXRhc3Ryb25waGljIGVycm9yIHJlbGF0ZWQgdG8gdGhlIGJ1cyBpbnRlcmZhY2UgCisJLyogUENJIEVycm9yLCBhIGNhdGFzdHJvbnBoaWMgZXJyb3IgcmVsYXRlZCB0byB0aGUgYnVzIGludGVyZmFjZQogCSAgIG9jY3Vycywgc2V0IEdsb2JhbFJlc2V0IGFuZCBIb3N0UmVzZXQgdG8gcmVzZXQuICovCiAJaWYgKGludF9zdGF0dXMgJiBIb3N0RXJyb3IpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IEhvc3RFcnJvciEgSW50U3RhdHVzICU0LjR4LlxuIiwKQEAgLTk5MSwxNiArOTkxLDE2IEBACiAKIAkvKiBBbGwgc3RhdGlzdGljcyByZWdpc3RlcnMgbmVlZCB0byBiZSBhY2tub3dsZWRnZWQsCiAJICAgZWxzZSBzdGF0aXN0aWMgb3ZlcmZsb3cgY291bGQgY2F1c2UgcHJvYmxlbXMgKi8KLQkKKwogCW5wLT5zdGF0cy5yeF9wYWNrZXRzICs9IHJlYWRsIChpb2FkZHIgKyBGcmFtZXNSY3ZPayk7CiAJbnAtPnN0YXRzLnR4X3BhY2tldHMgKz0gcmVhZGwgKGlvYWRkciArIEZyYW1lc1htdE9rKTsKIAlucC0+c3RhdHMucnhfYnl0ZXMgKz0gcmVhZGwgKGlvYWRkciArIE9jdGV0UmN2T2spOwogCW5wLT5zdGF0cy50eF9ieXRlcyArPSByZWFkbCAoaW9hZGRyICsgT2N0ZXRYbXRPayk7CiAKIAlucC0+c3RhdHMubXVsdGljYXN0ID0gcmVhZGwgKGlvYWRkciArIE1jc3RGcmFtZXNSY3ZkT2spOwotCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9IHJlYWRsIChpb2FkZHIgKyBTaW5nbGVDb2xGcmFtZXMpIAotCQkJICAgICArICByZWFkbCAoaW9hZGRyICsgTXVsdGlDb2xGcmFtZXMpOyAKLQkKKwlucC0+c3RhdHMuY29sbGlzaW9ucyArPSByZWFkbCAoaW9hZGRyICsgU2luZ2xlQ29sRnJhbWVzKQorCQkJICAgICArICByZWFkbCAoaW9hZGRyICsgTXVsdGlDb2xGcmFtZXMpOworCiAJLyogZGV0YWlsZWQgdHggZXJyb3JzICovCiAJc3RhdF9yZWcgPSByZWFkdyAoaW9hZGRyICsgRnJhbWVzQWJvcnRYU0NvbGxzKTsKIAlucC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gc3RhdF9yZWc7CkBAIC0xMDQ3LDcgKzEwNDcsNyBAQAogCWxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAjaWZkZWYgTUVNX01BUFBJTkcKIAlpbnQgaTsKLSNlbmRpZiAKKyNlbmRpZgogCiAJLyogQWxsIHN0YXRpc3RpY3MgcmVnaXN0ZXJzIG5lZWQgdG8gYmUgYWNrbm93bGVkZ2VkLAogCSAgIGVsc2Ugc3RhdGlzdGljIG92ZXJmbG93IGNvdWxkIGNhdXNlIHByb2JsZW1zICovCkBAIC0xMDYwLDcgKzEwNjAsNyBAQAogCXJlYWRsIChpb2FkZHIgKyBTaW5nbGVDb2xGcmFtZXMpOwogCXJlYWRsIChpb2FkZHIgKyBNdWx0aUNvbEZyYW1lcyk7CiAJcmVhZGwgKGlvYWRkciArIExhdGVDb2xsaXNpb25zKTsKLQkvKiBkZXRhaWxlZCByeCBlcnJvcnMgKi8JCQorCS8qIGRldGFpbGVkIHJ4IGVycm9ycyAqLwogCXJlYWR3IChpb2FkZHIgKyBGcmFtZVRvb0xvbmdFcnJvcnMpOwogCXJlYWR3IChpb2FkZHIgKyBJblJhbmdlTGVuZ3RoRXJyb3JzKTsKIAlyZWFkdyAoaW9hZGRyICsgRnJhbWVzQ2hlY2tTZXFFcnJvcnMpOwpAQCAtMTA4Niw3ICsxMDg2LDcgQEAKICNpZmRlZiBNRU1fTUFQUElORwogCWZvciAoaSA9IDB4MTAwOyBpIDw9IDB4MTUwOyBpICs9IDQpCiAJCXJlYWRsIChpb2FkZHIgKyBpKTsKLSNlbmRpZiAKKyNlbmRpZgogCXJlYWR3IChpb2FkZHIgKyBUeEp1bWJvRnJhbWVzKTsKIAlyZWFkdyAoaW9hZGRyICsgUnhKdW1ib0ZyYW1lcyk7CiAJcmVhZHcgKGlvYWRkciArIFRDUENoZWNrU3VtRXJyb3JzKTsKQEAgLTExMTgsMjYgKzExMTgsMjYgQEAKIAl1MzIgaGFzaF90YWJsZVsyXTsKIAl1MTYgcnhfbW9kZSA9IDA7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAloYXNoX3RhYmxlWzBdID0gaGFzaF90YWJsZVsxXSA9IDA7CiAJLyogUnhGbG93Y29udHJvbCBEQTogMDEtODAtQzItMDAtMDAtMDEuIEhhc2ggaW5kZXg9MHgzOSAqLwogCWhhc2hfdGFibGVbMV0gfD0gY3B1X3RvX2xlMzIoMHgwMjAwMDAwMCk7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBSZWNlaXZlIGFsbCBmcmFtZXMgcHJvbWlzY3VvdXNseS4gKi8KIAkJcnhfbW9kZSA9IFJlY2VpdmVBbGxGcmFtZXM7Ci0JfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgCisJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKIAkJCShkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkpIHsKIAkJLyogUmVjZWl2ZSBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBmcmFtZXMgKi8KIAkJcnhfbW9kZSA9IFJlY2VpdmVCcm9hZGNhc3QgfCBSZWNlaXZlTXVsdGljYXN0IHwgUmVjZWl2ZVVuaWNhc3Q7CiAJfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewogCQlpbnQgaTsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCS8qIFJlY2VpdmUgYnJvYWRjYXN0IGZyYW1lcyBhbmQgbXVsdGljYXN0IGZyYW1lcyBmaWx0ZXJpbmcgCisJCS8qIFJlY2VpdmUgYnJvYWRjYXN0IGZyYW1lcyBhbmQgbXVsdGljYXN0IGZyYW1lcyBmaWx0ZXJpbmcKIAkJICAgYnkgSGFzaHRhYmxlICovCiAJCXJ4X21vZGUgPQogCQkgICAgUmVjZWl2ZUJyb2FkY2FzdCB8IFJlY2VpdmVNdWx0aWNhc3RIYXNoIHwgUmVjZWl2ZVVuaWNhc3Q7Ci0JCWZvciAoaT0wLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsgCi0JCQkJaSsrLCBtY2xpc3Q9bWNsaXN0LT5uZXh0KSAKKwkJZm9yIChpPTAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OworCQkJCWkrKywgbWNsaXN0PW1jbGlzdC0+bmV4dCkKIAkJewogCQkJaW50IGJpdCwgaW5kZXggPSAwOwogCQkJaW50IGNyYyA9IGV0aGVyX2NyY19sZSAoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpOwpAQCAtMTE2Nyw3ICsxMTY3LDcgQEAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCAiZGwyayIpOwogCXN0cmNweShpbmZvLT52ZXJzaW9uLCBEUlZfVkVSU0lPTik7CiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShucC0+cGRldikpOwotfQkKK30KIAogc3RhdGljIGludCByaW9fZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQogewpAQCAtMTE3NywxMCArMTE3NywxMCBAQAogCQljbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX0ZJQlJFOwogCQljbWQtPmFkdmVydGlzaW5nPSBBRFZFUlRJU0VEX0F1dG9uZWcgfCBBRFZFUlRJU0VEX0ZJQlJFOwogCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwotCQljbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsJCisJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCX0gZWxzZSB7CiAJCS8qIGNvcHBlciBkZXZpY2UgKi8KLQkJY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgCisJCWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CiAJCQlTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKIAkJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAogCQkJU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfTUlJOwpAQCAtMTE5MSw3ICsxMTkxLDcgQEAKIAkJY21kLT5wb3J0ID0gUE9SVF9NSUk7CiAJCWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0lOVEVSTkFMOwogCX0KLQlpZiAoIG5wLT5saW5rX3N0YXR1cyApIHsgCisJaWYgKCBucC0+bGlua19zdGF0dXMgKSB7CiAJCWNtZC0+c3BlZWQgPSBucC0+c3BlZWQ7CiAJCWNtZC0+ZHVwbGV4ID0gbnAtPmZ1bGxfZHVwbGV4ID8gRFVQTEVYX0ZVTEwgOiBEVVBMRVhfSEFMRjsKIAl9IGVsc2UgewpAQCAtMTIwMiw5ICsxMjAyLDkgQEAKIAkJY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7CiAJZWxzZQogCQljbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JCisKIAljbWQtPnBoeV9hZGRyZXNzID0gbnAtPnBoeV9hZGRyOwotCXJldHVybiAwOwkJCQkgICAKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCByaW9fc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQpAQCAtMTIxNywyMiArMTIxNywyMiBAQAogCQllbHNlIHsKIAkJCW5wLT5hbl9lbmFibGUgPSAxOwogCQkJbWlpX3NldF9tZWRpYShkZXYpOwotCQkJcmV0dXJuIDA7CQotCQl9CQorCQkJcmV0dXJuIDA7CisJCX0KIAl9IGVsc2UgewogCQlucC0+YW5fZW5hYmxlID0gMDsKIAkJaWYgKG5wLT5zcGVlZCA9PSAxMDAwKSB7Ci0JCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOwkJCQorCQkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsKIAkJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CiAJCQlwcmludGsoIldhcm5pbmchISBDYW4ndCBkaXNhYmxlIEF1dG8gbmVnb3RpYXRpb24gaW4gMTAwME1icHMsIGNoYW5nZSB0byBNYW51YWwgMTAwTWJwcywgRnVsbCBkdXBsZXguXG4iKTsKIAkJfQogCQlzd2l0Y2goY21kLT5zcGVlZCArIGNtZC0+ZHVwbGV4KSB7Ci0JCQorCiAJCWNhc2UgU1BFRURfMTAgKyBEVVBMRVhfSEFMRjoKIAkJCW5wLT5zcGVlZCA9IDEwOwogCQkJbnAtPmZ1bGxfZHVwbGV4ID0gMDsKIAkJCWJyZWFrOwotCQkKKwogCQljYXNlIFNQRUVEXzEwICsgRFVQTEVYX0ZVTEw6CiAJCQlucC0+c3BlZWQgPSAxMDsKIAkJCW5wLT5mdWxsX2R1cGxleCA9IDE7CkBAIC0xMjQ4LDcgKzEyNDgsNyBAQAogCQljYXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjovKiBub3Qgc3VwcG9ydGVkICovCiAJCWNhc2UgU1BFRURfMTAwMCArIERVUExFWF9GVUxMOi8qIG5vdCBzdXBwb3J0ZWQgKi8KIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwkKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCW1paV9zZXRfbWVkaWEoZGV2KTsKIAl9CkBAIC0xMjYxLDcgKzEyNjEsNyBAQAogCXJldHVybiBucC0+bGlua19zdGF0dXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IHJpb19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gcmlvX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gcmlvX3NldF9zZXR0aW5ncywKQEAgLTEyNzQsNyArMTI3NCw3IEBACiAJaW50IHBoeV9hZGRyOwogCXN0cnVjdCBuZXRkZXZfcHJpdmF0ZSAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtaWlfZGF0YSAqbWlpZGF0YSA9IChzdHJ1Y3QgbWlpX2RhdGEgKikgJnJxLT5pZnJfaWZydTsKLQkKKwogCXN0cnVjdCBuZXRkZXZfZGVzYyAqZGVzYzsKIAlpbnQgaTsKIApAQCAtMTI4Miw3ICsxMjgyLDcgQEAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CiAJCWJyZWFrOwotCQorCiAJY2FzZSBTSU9DREVWUFJJVkFURSArIDE6CiAJCW1paWRhdGEtPm91dF92YWx1ZSA9IG1paV9yZWFkIChkZXYsIHBoeV9hZGRyLCBtaWlkYXRhLT5yZWdfbnVtKTsKIAkJYnJlYWs7CkBAIC0xNDY3LDcgKzE0NjcsNyBAQAogCQkJLyogQXV0by1OZWdvdGlhdGlvbiBub3QgY29tcGxldGVkICovCiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJbmVnb3RpYXRlLmltYWdlID0gbWlpX3JlYWQgKGRldiwgcGh5X2FkZHIsIE1JSV9BTkFSKSAmIAorCQluZWdvdGlhdGUuaW1hZ2UgPSBtaWlfcmVhZCAoZGV2LCBwaHlfYWRkciwgTUlJX0FOQVIpICYKIAkJCW1paV9yZWFkIChkZXYsIHBoeV9hZGRyLCBNSUlfQU5MUEFSKTsKIAkJbXNjci5pbWFnZSA9IG1paV9yZWFkIChkZXYsIHBoeV9hZGRyLCBNSUlfTVNDUik7CiAJCW1zc3IuaW1hZ2UgPSBtaWlfcmVhZCAoZGV2LCBwaHlfYWRkciwgTUlJX01TU1IpOwpAQCAtMTUxOSw5ICsxNTE5LDkgQEAKIAkJCXByaW50ayAoIkhhbGYgZHVwbGV4XG4iKTsKIAkJfQogCX0KLQlpZiAobnAtPnR4X2Zsb3cpIAorCWlmIChucC0+dHhfZmxvdykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxlIFR4IEZsb3cgQ29udHJvbFxuIik7Ci0JZWxzZQkKKwllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGUgVHggRmxvdyBDb250cm9sXG4iKTsKIAlpZiAobnAtPnJ4X2Zsb3cpCiAJCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBSeCBGbG93IENvbnRyb2xcbiIpOwpAQCAtMTU2MSw3ICsxNTYxLDcgQEAKIAkJcHNjci5pbWFnZSA9IG1paV9yZWFkIChkZXYsIHBoeV9hZGRyLCBNSUlfUEhZX1NDUik7CiAJCXBzY3IuYml0cy5tZGlfY3Jvc3NvdmVyX21vZGUgPSAzOwkvKiAxMSdiICovCiAJCW1paV93cml0ZSAoZGV2LCBwaHlfYWRkciwgTUlJX1BIWV9TQ1IsIHBzY3IuaW1hZ2UpOwotCQkKKwogCQkvKiBTb2Z0IHJlc2V0IFBIWSAqLwogCQltaWlfd3JpdGUgKGRldiwgcGh5X2FkZHIsIE1JSV9CTUNSLCBNSUlfQk1DUl9SRVNFVCk7CiAJCWJtY3IuaW1hZ2UgPSAwOwpAQCAtMTYzOSw3ICsxNjM5LDcgQEAKIAkJCS8qIEF1dG8tTmVnb3RpYXRpb24gbm90IGNvbXBsZXRlZCAqLwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCW5lZ290aWF0ZS5pbWFnZSA9IG1paV9yZWFkIChkZXYsIHBoeV9hZGRyLCBQQ1NfQU5BUikgJiAKKwkJbmVnb3RpYXRlLmltYWdlID0gbWlpX3JlYWQgKGRldiwgcGh5X2FkZHIsIFBDU19BTkFSKSAmCiAJCQltaWlfcmVhZCAoZGV2LCBwaHlfYWRkciwgUENTX0FOTFBBUik7CiAJCW5wLT5zcGVlZCA9IDEwMDA7CiAJCWlmIChuZWdvdGlhdGUuYml0cy5mdWxsX2R1cGxleCkgewpAQCAtMTY2Niw5ICsxNjY2LDkgQEAKIAkJCXByaW50ayAoIkhhbGYgZHVwbGV4XG4iKTsKIAkJfQogCX0KLQlpZiAobnAtPnR4X2Zsb3cpIAorCWlmIChucC0+dHhfZmxvdykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiRW5hYmxlIFR4IEZsb3cgQ29udHJvbFxuIik7Ci0JZWxzZQkKKwllbHNlCiAJCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGUgVHggRmxvdyBDb250cm9sXG4iKTsKIAlpZiAobnAtPnJ4X2Zsb3cpCiAJCXByaW50ayhLRVJOX0lORk8gIkVuYWJsZSBSeCBGbG93IENvbnRyb2xcbiIpOwpAQCAtMTY5NCw5ICsxNjk0LDkgQEAKIAkJLyogQWR2ZXJ0aXNlIGNhcGFiaWxpdGllcyAqLwogCQllc3IuaW1hZ2UgPSBtaWlfcmVhZCAoZGV2LCBwaHlfYWRkciwgUENTX0VTUik7CiAJCWFuYXIuaW1hZ2UgPSBtaWlfcmVhZCAoZGV2LCBwaHlfYWRkciwgTUlJX0FOQVIpOwotCQlhbmFyLmJpdHMuaGFsZl9kdXBsZXggPSAKKwkJYW5hci5iaXRzLmhhbGZfZHVwbGV4ID0KIAkJCWVzci5iaXRzLm1lZGlhXzEwMDBCVF9IRCB8IGVzci5iaXRzLm1lZGlhXzEwMDBCWF9IRDsKLQkJYW5hci5iaXRzLmZ1bGxfZHVwbGV4ID0gCisJCWFuYXIuYml0cy5mdWxsX2R1cGxleCA9CiAJCQllc3IuYml0cy5tZWRpYV8xMDAwQlRfRkQgfCBlc3IuYml0cy5tZWRpYV8xMDAwQlhfRkQ7CiAJCWFuYXIuYml0cy5wYXVzZSA9IDE7CiAJCWFuYXIuYml0cy5hc3ltbWV0cmljID0gMTsKQEAgLTE3NTQsMTQgKzE3NTQsMTQgQEAKIAlzeW5jaHJvbml6ZV9pcnEgKGRldi0+aXJxKTsKIAlmcmVlX2lycSAoZGV2LT5pcnEsIGRldik7CiAJZGVsX3RpbWVyX3N5bmMgKCZucC0+dGltZXIpOwotCQorCiAJLyogRnJlZSBhbGwgdGhlIHNrYnVmZnMgaW4gdGhlIHF1ZXVlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewogCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSAwOwogCQlucC0+cnhfcmluZ1tpXS5mcmFnaW5mbyA9IDA7CiAJCXNrYiA9IG5wLT5yeF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBkZXYsIAorCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGRldiwKIAkJCQkJIG5wLT5yeF9yaW5nW2ldLmZyYWdpbmZvICYgRE1BXzQ4QklUX01BU0ssCiAJCQkJCSBza2ItPmxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWRldl9rZnJlZV9za2IgKHNrYik7CkBAIC0xNzcxLDcgKzE3NzEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlza2IgPSBucC0+dHhfc2tidWZmW2ldOwogCQlpZiAoc2tiKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wZGV2LCAKKwkJCXBjaV91bm1hcF9zaW5nbGUobnAtPnBkZXYsCiAJCQkJCSBucC0+dHhfcmluZ1tpXS5mcmFnaW5mbyAmIERNQV80OEJJVF9NQVNLLAogCQkJCQkgc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKQEAgLTE4MTUsNyArMTgxNSw3IEBACiBzdGF0aWMgaW50IF9faW5pdAogcmlvX2luaXQgKHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJnJpb19kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZyaW9fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CkBAIC0xODI4LDkgKzE4MjgsOSBAQAogbW9kdWxlX2V4aXQgKHJpb19leGl0KTsKIAogLyoKLSAKLUNvbXBpbGUgY29tbWFuZDogCi0gCisKK0NvbXBpbGUgY29tbWFuZDoKKwogZ2NjIC1EX19LRVJORUxfXyAtRE1PRFVMRSAtSS91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzIgLWMgZGwyay5jCiAKIFJlYWQgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RsMmsudHh0IGZvciBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5oIGIvZHJpdmVycy9uZXQvZGwyay5oCmluZGV4IDUzNDQ5MjAuLjgxNGM0NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuaAorKysgYi9kcml2ZXJzL25ldC9kbDJrLmgKQEAgLTEsNSArMSw1IEBACiAvKiAgRC1MaW5rIERMMjAwMC1iYXNlZCBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgTGludXggZHJpdmVyICovCi0vKiAgCisvKgogICAgIENvcHlyaWdodCAoYykgMjAwMSwgMjAwMiBieSBELUxpbmsgQ29ycG9yYXRpb24KICAgICBXcml0dGVuIGJ5IEVkd2FyZCBQZW5nLjxlZHdhcmRfcGVuZ0BkbGluay5jb20udHc+CiAgICAgQ3JlYXRlZCAwMy1NYXktMjAwMSwgYmFzZSBvbiBMaW51eCcgc3VuZGFuY2UuYy4KQEAgLTIxNiw3ICsyMTYsNyBAQAogZW51bSBBU0lDQ3RybF9Mb1dvcmRfYml0cyB7CiAJUGh5TWVkaWEgPSAweDAwODAsCiB9OwotCQorCiBlbnVtIEFTSUNDdHJsX0hpV29yZF9iaXRzIHsKIAlHbG9iYWxSZXNldCA9IDB4MDAwMSwKIAlSeFJlc2V0ID0gMHgwMDAyLApAQCAtNTk2LDcgKzU5Niw3IEBACiB9IEFOTFBBUl9QQ1NfdCwgKlBBTkxQQVJfUENTX3Q7CiAKIGVudW0gX3Bjc19hbmxwYXIgewotCVBDU19BTkxQQVJfTkVYVF9QQUdFID0gUENTX0FOQVJfTkVYVF9QQUdFLCAKKwlQQ1NfQU5MUEFSX05FWFRfUEFHRSA9IFBDU19BTkFSX05FWFRfUEFHRSwKIAlQQ1NfQU5MUEFSX1JFTU9URV9GQVVMVCA9IFBDU19BTkFSX1JFTU9URV9GQVVMVCwKIAlQQ1NfQU5MUEFSX0FTWU1NRVRSSUMgPSBQQ1NfQU5BUl9BU1lNTUVUUklDLAogCVBDU19BTkxQQVJfUEFVU0UgPSBQQ1NfQU5BUl9QQVVTRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RtOTAwMC5jIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKaW5kZXggMWI3NThiNy4uYTg2MGViYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZG05MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvZG05MDAwLmMKQEAgLTMzOSw2ICszMzksMTcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jayxmbGFncyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorLyoKKyAqVXNlZCBieSBuZXRjb25zb2xlCisgKi8KK3N0YXRpYyB2b2lkIGRtOTAwMF9wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlkaXNhYmxlX2lycShkZXYtPmlycSk7CisJZG05MDAwX2ludGVycnVwdChkZXYtPmlycSxkZXYsTlVMTCk7CisJZW5hYmxlX2lycShkZXYtPmlycSk7Cit9CisjZW5kaWYKIAogLyogZG05MDAwX3JlbGVhc2VfYm9hcmQKICAqCkBAIC0zNjYsOCArMzc3LDggQEAKIAkJa2ZyZWUoZGItPmRhdGFfcmVxKTsKIAl9CiAKLQlpZiAoZGItPmFkZHJfcmVzICE9IE5VTEwpIHsKLQkJcmVsZWFzZV9yZXNvdXJjZShkYi0+YWRkcl9yZXMpOworCWlmIChkYi0+YWRkcl9yZXEgIT0gTlVMTCkgeworCQlyZWxlYXNlX3Jlc291cmNlKGRiLT5hZGRyX3JlcSk7CiAJCWtmcmVlKGRiLT5hZGRyX3JlcSk7CiAJfQogfQpAQCAtNTM4LDYgKzU0OSw5IEBACiAJbmRldi0+c3RvcAkJID0gJmRtOTAwMF9zdG9wOwogCW5kZXYtPmdldF9zdGF0cwkJID0gJmRtOTAwMF9nZXRfc3RhdHM7CiAJbmRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gJmRtOTAwMF9oYXNoX3RhYmxlOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJbmRldi0+cG9sbF9jb250cm9sbGVyCSA9ICZkbTkwMDBfcG9sbF9jb250cm9sbGVyOworI2VuZGlmCiAKICNpZmRlZiBETTkwMDBfUFJPR1JBTV9FRVBST00KIAlwcm9ncmFtX2VlcHJvbShkYik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kdW1teS5jIGIvZHJpdmVycy9uZXQvZHVtbXkuYwppbmRleCAyMTQ2Y2Y3Li42MDY3M2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kdW1teS5jCisrKyBiL2RyaXZlcnMvbmV0L2R1bW15LmMKQEAgLTExLDcgKzExLDcgQEAKIAlPbmUgc29sdXRpb24gaXMgdG8gc2V0IHVwIGEgZHVtbXkgbGluayB1c2luZyBQUFAvU0xJUC9QTElQLAogCWJ1dCB0aGlzIHNlZW1zICh0byBtZSkgdG9vIG11Y2ggb3ZlcmhlYWQgZm9yIHRvbyBsaXR0bGUgZ2Fpbi4KIAlUaGlzIGRyaXZlciBwcm92aWRlcyBhIHNtYWxsIGFsdGVybmF0aXZlLiBUaHVzIHlvdSBjYW4gZG8KLQkKKwogCVt3aGVuIG5vdCBydW5uaW5nIHNsaXBdCiAJCWlmY29uZmlnIGR1bW15IHNsaXAuYWRkci5lc3MuaGVyZSB1cAogCVt0byBnbyB0byBzbGlwXQpAQCAtNDQsOSArNDQsOSBAQAogewogCXN0cnVjdCBzb2NrYWRkciAqc2EgPSBwOwogCi0JaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHNhLT5zYV9kYXRhKSkgCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKHNhLT5zYV9kYXRhKSkKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwotCQkKKwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBzYS0+c2FfZGF0YSwgRVRIX0FMRU4pOwogCXJldHVybiAwOwogfQpAQCAtMTExLDcgKzExMSw3IEBACiAJCWZyZWVfbmV0ZGV2KGRldl9kdW1teSk7CiAJCWRldl9kdW1teSA9IE5VTEw7CiAJfSBlbHNlIHsKLQkJZHVtbWllc1tpbmRleF0gPSBkZXZfZHVtbXk7IAorCQlkdW1taWVzW2luZGV4XSA9IGRldl9kdW1teTsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTIxLDMwICsxMjEsMzAgQEAKIHsKIAl1bnJlZ2lzdGVyX25ldGRldihkdW1taWVzW2luZGV4XSk7CiAJZnJlZV9uZXRkZXYoZHVtbWllc1tpbmRleF0pOwotfSAKK30KIAogc3RhdGljIGludCBfX2luaXQgZHVtbXlfaW5pdF9tb2R1bGUodm9pZCkKLXsgCit7CiAJaW50IGksIGVyciA9IDA7Ci0JZHVtbWllcyA9IGttYWxsb2MobnVtZHVtbWllcyAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsgCisJZHVtbWllcyA9IGttYWxsb2MobnVtZHVtbWllcyAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWR1bW1pZXMpCi0JCXJldHVybiAtRU5PTUVNOyAKKwkJcmV0dXJuIC1FTk9NRU07CiAJZm9yIChpID0gMDsgaSA8IG51bWR1bW1pZXMgJiYgIWVycjsgaSsrKQotCQllcnIgPSBkdW1teV9pbml0X29uZShpKTsgCi0JaWYgKGVycikgeyAKKwkJZXJyID0gZHVtbXlfaW5pdF9vbmUoaSk7CisJaWYgKGVycikgewogCQlpLS07CiAJCXdoaWxlICgtLWkgPj0gMCkKIAkJCWR1bW15X2ZyZWVfb25lKGkpOwogCX0KIAlyZXR1cm4gZXJyOwotfSAKK30KIAogc3RhdGljIHZvaWQgX19leGl0IGR1bW15X2NsZWFudXBfbW9kdWxlKHZvaWQpCiB7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IG51bWR1bW1pZXM7IGkrKykgCi0JCWR1bW15X2ZyZWVfb25lKGkpOyAKLQlrZnJlZShkdW1taWVzKTsJCisJZm9yIChpID0gMDsgaSA8IG51bWR1bW1pZXM7IGkrKykKKwkJZHVtbXlfZnJlZV9vbmUoaSk7CisJa2ZyZWUoZHVtbWllcyk7CiB9CiAKIG1vZHVsZV9pbml0KGR1bW15X2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAuYyBiL2RyaXZlcnMvbmV0L2UxMDAuYwppbmRleCA5MWVmNWYyLi5kYzVlMzhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMC5jCkBAIC0xLDcgKzEsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogCi0gIENvcHlyaWdodChjKSAxOTk5IC0gMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogCiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCkBAIC0xNTgsMTAgKzE1OCwxMCBAQAogCiAKICNkZWZpbmUgRFJWX05BTUUJCSJlMTAwIgotI2RlZmluZSBEUlZfRVhUCQkiLU5BUEkiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMy41LjEwLWsyIkRSVl9FWFQKKyNkZWZpbmUgRFJWX0VYVAkJCSItTkFQSSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIzLjUuMTYtazIiRFJWX0VYVAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JCSJJbnRlbChSKSBQUk8vMTAwIE5ldHdvcmsgRHJpdmVyIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCQkiQ29weXJpZ2h0KGMpIDE5OTktMjAwNSBJbnRlbCBDb3Jwb3JhdGlvbiIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkJIkNvcHlyaWdodChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKIAogI2RlZmluZSBFMTAwX1dBVENIRE9HX1BFUklPRAkoMiAqIEhaKQpAQCAtMTczLDggKzE3MywxMSBAQAogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCiBzdGF0aWMgaW50IGRlYnVnID0gMzsKK3N0YXRpYyBpbnQgZWVwcm9tX2JhZF9jc3VtX2FsbG93ID0gMDsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKK21vZHVsZV9wYXJhbShlZXByb21fYmFkX2NzdW1fYWxsb3csIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDA9bm9uZSwuLi4sMTY9YWxsKSIpOworTU9EVUxFX1BBUk1fREVTQyhlZXByb21fYmFkX2NzdW1fYWxsb3csICJBbGxvdyBiYWQgZWVwcm9tIGNoZWNrc3VtcyIpOwogI2RlZmluZSBEUFJJTlRLKG5sZXZlbCwga2xldmVsLCBmbXQsIGFyZ3MuLi4pIFwKIAkodm9pZCkoKE5FVElGX01TR18jI25sZXZlbCAmIG5pYy0+bXNnX2VuYWJsZSkgJiYgXAogCXByaW50ayhLRVJOXyMja2xldmVsIFBGWCAiJXM6ICVzOiAiIGZtdCwgbmljLT5uZXRkZXYtPm5hbWUsIFwKQEAgLTc1Niw3ICs3NTksOCBAQAogCWNoZWNrc3VtID0gbGUxNl90b19jcHUoMHhCQUJBIC0gY2hlY2tzdW0pOwogCWlmKGNoZWNrc3VtICE9IG5pYy0+ZWVwcm9tW25pYy0+ZWVwcm9tX3djIC0gMV0pIHsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLCAiRUVQUk9NIGNvcnJ1cHRlZFxuIik7Ci0JCXJldHVybiAtRUFHQUlOOworCQlpZiAoIWVlcHJvbV9iYWRfY3N1bV9hbGxvdykKKwkJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTM5MSwxNSArMTM5NSwxMSBAQAogCX0KIAogCWlmKChuaWMtPm1hYyA+PSBtYWNfODI1NTBfRDEwMikgfHwgKChuaWMtPmZsYWdzICYgaWNoKSAmJgotCSAgIChtZGlvX3JlYWQobmV0ZGV2LCBuaWMtPm1paS5waHlfaWQsIE1JSV9UUElTVEFUVVMpICYgMHg4MDAwKSkpIHsKLQkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLgotCQkgICBNREkvTURJLVggYXV0by1zd2l0Y2hpbmcgaXMgZGlzYWJsZWQgZm9yIDgyNTUxRVIvUU0gY2hpcHMgKi8KLQkJaWYoKG5pYy0+bWFjID09IG1hY184MjU1MV9FKSB8fCAobmljLT5tYWMgPT0gbWFjXzgyNTUxX0YpIHx8Ci0JCSAgIChuaWMtPm1hYyA9PSBtYWNfODI1NTFfMTApIHx8IChuaWMtPm1paS5mb3JjZV9tZWRpYSkgfHwKLQkJICAgIShuaWMtPmVlcHJvbVtlZXByb21fY25mZ19tZGl4XSAmIGVlcHJvbV9tZGl4X2VuYWJsZWQpKQotCQkJbWRpb193cml0ZShuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX05DT05GSUcsIDApOwotCQllbHNlCi0JCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTkNPTkZJRywgTkNPTkZJR19BVVRPX1NXSVRDSCk7CisJICAgKG1kaW9fcmVhZChuZXRkZXYsIG5pYy0+bWlpLnBoeV9pZCwgTUlJX1RQSVNUQVRVUykgJiAweDgwMDApICYmCisJCSEobmljLT5lZXByb21bZWVwcm9tX2NuZmdfbWRpeF0gJiBlZXByb21fbWRpeF9lbmFibGVkKSkpIHsKKwkJLyogZW5hYmxlL2Rpc2FibGUgTURJL01ESS1YIGF1dG8tc3dpdGNoaW5nLiAqLworCQltZGlvX3dyaXRlKG5ldGRldiwgbmljLT5taWkucGh5X2lkLCBNSUlfTkNPTkZJRywKKwkJCQluaWMtPm1paS5mb3JjZV9tZWRpYSA/IDAgOiBOQ09ORklHX0FVVE9fU1dJVENIKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTE3NjMsMTEgKzE3NjMsMTAgQEAKICNkZWZpbmUgUkZEX0JVRl9MRU4gKHNpemVvZihzdHJ1Y3QgcmZkKSArIFZMQU5fRVRIX0ZSQU1FX0xFTikKIHN0YXRpYyBpbnQgZTEwMF9yeF9hbGxvY19za2Ioc3RydWN0IG5pYyAqbmljLCBzdHJ1Y3QgcnggKnJ4KQogewotCWlmKCEocngtPnNrYiA9IGRldl9hbGxvY19za2IoUkZEX0JVRl9MRU4gKyBORVRfSVBfQUxJR04pKSkKKwlpZighKHJ4LT5za2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5pYy0+bmV0ZGV2LCBSRkRfQlVGX0xFTiArIE5FVF9JUF9BTElHTikpKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIEFsaWduLCBpbml0LCBhbmQgbWFwIHRoZSBSRkQuICovCi0JcngtPnNrYi0+ZGV2ID0gbmljLT5uZXRkZXY7CiAJc2tiX3Jlc2VydmUocngtPnNrYiwgTkVUX0lQX0FMSUdOKTsKIAltZW1jcHkocngtPnNrYi0+ZGF0YSwgJm5pYy0+YmxhbmtfcmZkLCBzaXplb2Yoc3RydWN0IHJmZCkpOwogCXJ4LT5kbWFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKG5pYy0+cGRldiwgcngtPnNrYi0+ZGF0YSwKQEAgLTIxNDMsNyArMjE0Miw3IEBACiAKIAllMTAwX3N0YXJ0X3JlY2VpdmVyKG5pYywgTlVMTCk7CiAKLQlpZighKHNrYiA9IGRldl9hbGxvY19za2IoRVRIX0RBVEFfTEVOKSkpIHsKKwlpZighKHNrYiA9IG5ldGRldl9hbGxvY19za2IobmljLT5uZXRkZXYsIEVUSF9EQVRBX0xFTikpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2xvb3BiYWNrX25vbmU7CiAJfQpAQCAtMjQ3OCw3ICsyNDc3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGUxMDBfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gZTEwMF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IGUxMDBfZ2V0X2RydmluZm8sCkBAIC0yNzk1LDYgKzI3OTQsNyBAQAogCS8qIERldGFjaDsgcHV0IG5ldGlmIGludG8gc3RhdGUgc2ltaWxhciB0byBob3RwbHVnIHVucGx1Zy4gKi8KIAluZXRpZl9wb2xsX2VuYWJsZShuZXRkZXYpOwogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKIAkvKiBSZXF1ZXN0IGEgc2xvdCByZXNldC4gKi8KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKQEAgLTI4NzMsNyArMjg3Myw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCX0KLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZlMTAwX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmUxMDBfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGUxMDBfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCmluZGV4IGQzMDQyOTcuLjk4YWZhOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaApAQCAtMjQyLDEyICsyNDIsMTAgQEAKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKIAlzdHJ1Y3QgdGltZXJfbGlzdCBwaHlfaW5mb190aW1lcjsKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7Ci0gICAgCXVpbnQxNl90IG1uZ192bGFuX2lkOworCXVpbnQxNl90IG1uZ192bGFuX2lkOwogCXVpbnQzMl90IGJkX251bWJlcjsKIAl1aW50MzJfdCByeF9idWZmZXJfbGVuOwotCXVpbnQzMl90IHBhcnRfbnVtOwogCXVpbnQzMl90IHdvbDsKLQl1aW50MzJfdCBrc3AzX3BvcnRfYTsKIAl1aW50MzJfdCBzbWFydHNwZWVkOwogCXVpbnQzMl90IGVuX21uZ19wdDsKIAl1aW50MTZfdCBsaW5rX3NwZWVkOwpAQCAtMzQyLDcgKzM0MCw5IEBACiAJYm9vbGVhbl90IHRzb19mb3JjZTsKICNlbmRpZgogCWJvb2xlYW5fdCBzbWFydF9wb3dlcl9kb3duOwkvKiBwaHkgc21hcnQgcG93ZXIgZG93biAqLworCWJvb2xlYW5fdCBxdWFkX3BvcnRfYTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQzMl90IGVlcHJvbV93b2w7CiB9OwogCiBlbnVtIGUxMDAwX3N0YXRlX3QgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCmluZGV4IDg4YTgyYmEuLmUzOWFhMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKQEAgLTE4Myw2ICsxODMsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKSkKKwkJbXNsZWVwKDEpOworCiAJaWYgKGVjbWQtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJaHctPmF1dG9uZWcgPSAxOwogCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikKQEAgLTE5OSwxNiArMjAyLDIwIEBACiAJCQkJCQkgIEFEVkVSVElTRURfVFA7CiAJCWVjbWQtPmFkdmVydGlzaW5nID0gaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZDsKIAl9IGVsc2UKLQkJaWYgKGUxMDAwX3NldF9zcGRfZHBseChhZGFwdGVyLCBlY21kLT5zcGVlZCArIGVjbWQtPmR1cGxleCkpCisJCWlmIChlMTAwMF9zZXRfc3BkX2RwbHgoYWRhcHRlciwgZWNtZC0+c3BlZWQgKyBlY21kLT5kdXBsZXgpKSB7CisJCQljbGVhcl9iaXQoX19FMTAwMF9SRVNFVFRJTkcsICZhZGFwdGVyLT5mbGFncyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQogCiAJLyogcmVzZXQgdGhlIGxpbmsgKi8KIAotCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCWUxMDAwX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7Ci0JZWxzZQorCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJZTEwMDBfZG93bihhZGFwdGVyKTsKKwkJZTEwMDBfdXAoYWRhcHRlcik7CisJfSBlbHNlCiAJCWUxMDAwX3Jlc2V0KGFkYXB0ZXIpOwogCisJY2xlYXJfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC0yMzgsOSArMjQ1LDEzIEBACiB7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHJldHZhbCA9IDA7CiAKIAlhZGFwdGVyLT5mY19hdXRvbmVnID0gcGF1c2UtPmF1dG9uZWc7CiAKKwl3aGlsZSAodGVzdF9hbmRfc2V0X2JpdChfX0UxMDAwX1JFU0VUVElORywgJmFkYXB0ZXItPmZsYWdzKSkKKwkJbXNsZWVwKDEpOworCiAJaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1c2UpCiAJCWh3LT5mYyA9IGUxMDAwX2ZjX2Z1bGw7CiAJZWxzZSBpZiAocGF1c2UtPnJ4X3BhdXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCkBAIC0yNTMsMTUgKzI2NCwxNyBAQAogCWh3LT5vcmlnaW5hbF9mYyA9IGh3LT5mYzsKIAogCWlmIChhZGFwdGVyLT5mY19hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7Ci0JCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCi0JCQllMTAwMF9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwotCQllbHNlCisJCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpIHsKKwkJCWUxMDAwX2Rvd24oYWRhcHRlcik7CisJCQllMTAwMF91cChhZGFwdGVyKTsKKwkJfSBlbHNlCiAJCQllMTAwMF9yZXNldChhZGFwdGVyKTsKIAl9IGVsc2UKLQkJcmV0dXJuICgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgPwotCQkJZTEwMDBfc2V0dXBfbGluayhodykgOiBlMTAwMF9mb3JjZV9tYWNfZmMoaHcpKTsKKwkJcmV0dmFsID0gKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSA/CisJCQkgICBlMTAwMF9zZXR1cF9saW5rKGh3KSA6IGUxMDAwX2ZvcmNlX21hY19mYyhodykpOwogCi0JcmV0dXJuIDA7CisJY2xlYXJfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyB1aW50MzJfdApAQCAtNDE1LDEyICs0MjgsMTIgQEAKIAkJcmVnc19idWZmWzIzXSA9IHJlZ3NfYnVmZlsxOF07IC8qIG1kaXggbW9kZSAqLwogCQllMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgMHgwKTsKIAl9IGVsc2UgewotICAgICAgICAJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7CisJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmcGh5X2RhdGEpOwogCQlyZWdzX2J1ZmZbMTNdID0gKHVpbnQzMl90KXBoeV9kYXRhOyAvKiBjYWJsZSBsZW5ndGggKi8KIAkJcmVnc19idWZmWzE0XSA9IDA7ICAvKiBEdW1teSAodG8gYWxpZ24gdy8gSUdQIHBoeSByZWcgZHVtcCkgKi8KIAkJcmVnc19idWZmWzE1XSA9IDA7ICAvKiBEdW1teSAodG8gYWxpZ24gdy8gSUdQIHBoeSByZWcgZHVtcCkgKi8KIAkJcmVnc19idWZmWzE2XSA9IDA7ICAvKiBEdW1teSAodG8gYWxpZ24gdy8gSUdQIHBoeSByZWcgZHVtcCkgKi8KLSAgICAgICAgCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKKwkJZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogCQlyZWdzX2J1ZmZbMTddID0gKHVpbnQzMl90KXBoeV9kYXRhOyAvKiBleHRlbmRlZCAxMGJ0IGRpc3RhbmNlICovCiAJCXJlZ3NfYnVmZlsxOF0gPSByZWdzX2J1ZmZbMTNdOyAvKiBjYWJsZSBwb2xhcml0eSAqLwogCQlyZWdzX2J1ZmZbMTldID0gMDsgIC8qIER1bW15ICh0byBhbGlnbiB3LyBJR1AgcGh5IHJlZyBkdW1wKSAqLwpAQCAtNjk2LDcgKzcwOSw2IEBACiAJfQogCiAJY2xlYXJfYml0KF9fRTEwMDBfUkVTRVRUSU5HLCAmYWRhcHRlci0+ZmxhZ3MpOwotCiAJcmV0dXJuIDA7CiBlcnJfc2V0dXBfdHg6CiAJZTEwMDBfZnJlZV9hbGxfcnhfcmVzb3VyY2VzKGFkYXB0ZXIpOwpAQCAtODgxLDIxICs4OTMsMjIgQEAKIAogCSpkYXRhID0gMDsKIAorCS8qIE5PVEU6IHdlIGRvbid0IHRlc3QgTVNJIGludGVycnVwdHMgaGVyZSwgeWV0ICovCiAJLyogSG9vayB1cCB0ZXN0IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLwogCWlmICghcmVxdWVzdF9pcnEoaXJxLCAmZTEwMDBfdGVzdF9pbnRyLCBJUlFGX1BST0JFX1NIQVJFRCwKLQkJCSBuZXRkZXYtPm5hbWUsIG5ldGRldikpIHsKLSAJCXNoYXJlZF9pbnQgPSBGQUxTRTsKLSAJfSBlbHNlIGlmIChyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIElSUUZfU0hBUkVELAotCQkJICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKXsKKwkJCSBuZXRkZXYtPm5hbWUsIG5ldGRldikpCisJCXNoYXJlZF9pbnQgPSBGQUxTRTsKKwllbHNlIGlmIChyZXF1ZXN0X2lycShpcnEsICZlMTAwMF90ZXN0X2ludHIsIElSUUZfU0hBUkVELAorCQkJICAgICAgbmV0ZGV2LT5uYW1lLCBuZXRkZXYpKSB7CiAJCSpkYXRhID0gMTsKIAkJcmV0dXJuIC0xOwogCX0KLQlEUFJJTlRLKFBST0JFLElORk8sICJ0ZXN0aW5nICVzIGludGVycnVwdFxuIiwKKwlEUFJJTlRLKEhXLCBJTkZPLCAidGVzdGluZyAlcyBpbnRlcnJ1cHRcbiIsCiAJICAgICAgICAoc2hhcmVkX2ludCA/ICJzaGFyZWQiIDogInVuc2hhcmVkIikpOwogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIDB4RkZGRkZGRkYpOwotCW1zZWNfZGVsYXkoMTApOworCW1zbGVlcCgxMCk7CiAKIAkvKiBUZXN0IGVhY2ggaW50ZXJydXB0ICovCiAJZm9yICg7IGkgPCAxMDsgaSsrKSB7CkBAIC05MTUsNyArOTI4LDcgQEAKIAkJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJCUUxMDAwX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElNQywgbWFzayk7CiAJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJQ1MsIG1hc2spOwotCQkJbXNlY19kZWxheSgxMCk7CisJCQltc2xlZXAoMTApOwogCiAJCQlpZiAoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSB7CiAJCQkJKmRhdGEgPSAzOwpAQCAtOTMyLDcgKzk0NSw3IEBACiAJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSU1TLCBtYXNrKTsKIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgSUNTLCBtYXNrKTsKLQkJbXNlY19kZWxheSgxMCk7CisJCW1zbGVlcCgxMCk7CiAKIAkJaWYgKCEoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSkgewogCQkJKmRhdGEgPSA0OwpAQCAtOTQ5LDcgKzk2Miw3IEBACiAJCQlhZGFwdGVyLT50ZXN0X2ljciA9IDA7CiAJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIH5tYXNrICYgMHgwMDAwN0ZGRik7CiAJCQlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJQ1MsIH5tYXNrICYgMHgwMDAwN0ZGRik7Ci0JCQltc2VjX2RlbGF5KDEwKTsKKwkJCW1zbGVlcCgxMCk7CiAKIAkJCWlmIChhZGFwdGVyLT50ZXN0X2ljcikgewogCQkJCSpkYXRhID0gNTsKQEAgLTk2MCw3ICs5NzMsNyBAQAogCiAJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KIAlFMTAwMF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJTUMsIDB4RkZGRkZGRkYpOwotCW1zZWNfZGVsYXkoMTApOworCW1zbGVlcCgxMCk7CiAKIAkvKiBVbmhvb2sgdGVzdCBpbnRlcnJ1cHQgaGFuZGxlciAqLwogCWZyZWVfaXJxKGlycSwgbmV0ZGV2KTsKQEAgLTEyNTYsMTEgKzEyNjksMTAgQEAKIAkJZTEwMDBfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsIFBIWV9DVFJMLCAweDkxNDApOwogCQkvKiBhdXRvbmVnIG9mZiAqLwogCQllMTAwMF93cml0ZV9waHlfcmVnKCZhZGFwdGVyLT5odywgUEhZX0NUUkwsIDB4ODE0MCk7Ci0JfSBlbHNlIGlmIChhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykgeworCX0gZWxzZSBpZiAoYWRhcHRlci0+aHcucGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpCiAJCWUxMDAwX3dyaXRlX3BoeV9yZWcoJmFkYXB0ZXItPmh3LAogCQkgICAgICAgICAgICAgICAgICAgIEdHODI1NjNfUEhZX0tNUk5fTU9ERV9DVFJMLAogCQkgICAgICAgICAgICAgICAgICAgIDB4MUNDKTsKLQl9CiAKIAljdHJsX3JlZyA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQ1RSTCk7CiAKQEAgLTEyODgsOSArMTMwMCw5IEBACiAJfQogCiAJaWYgKGFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIgJiYKLQkgICBhZGFwdGVyLT5ody5waHlfdHlwZSA9PSBlMTAwMF9waHlfbTg4KSB7CisJICAgYWRhcHRlci0+aHcucGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkKIAkJY3RybF9yZWcgfD0gRTEwMDBfQ1RSTF9JTE9TOyAvKiBJbnZlcnQgTG9zcyBvZiBTaWduYWwgKi8KLQl9IGVsc2UgeworCWVsc2UgewogCQkvKiBTZXQgdGhlIElMT1MgYml0IG9uIHRoZSBmaWJlciBOaWMgaXMgaGFsZgogCQkgKiBkdXBsZXggbGluayBpcyBkZXRlY3RlZC4gKi8KIAkJc3RhdF9yZWcgPSBFMTAwMF9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFNUQVRVUyk7CkBAIC0xMzgzLDcgKzEzOTUsNyBAQAogI2RlZmluZSBFMTAwMF9TRVJERVNfTEJfT04gMHg0MTAKIAkJCWUxMDAwX3NldF9waHlfbG9vcGJhY2soYWRhcHRlcik7CiAJCQlFMTAwMF9XUklURV9SRUcoaHcsIFNDVEwsIEUxMDAwX1NFUkRFU19MQl9PTik7Ci0JCQltc2VjX2RlbGF5KDEwKTsKKwkJCW1zbGVlcCgxMCk7CiAJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtMTQxNiw3ICsxNDI4LDcgQEAKIAkJICAgIGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSB7CiAjZGVmaW5lIEUxMDAwX1NFUkRFU19MQl9PRkYgMHg0MDAKIAkJCUUxMDAwX1dSSVRFX1JFRyhodywgU0NUTCwgRTEwMDBfU0VSREVTX0xCX09GRik7Ci0JCQltc2VjX2RlbGF5KDEwKTsKKwkJCW1zbGVlcCgxMCk7CiAJCQlicmVhazsKIAkJfQogCQkvKiBGYWxsIFRocm91Z2ggKi8KQEAgLTE0MjYsMTEgKzE0MzgsMTAgQEAKIAljYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgogCWRlZmF1bHQ6CiAJCWh3LT5hdXRvbmVnID0gVFJVRTsKLQkJaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykgeworCQlpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKQogCQkJZTEwMDBfd3JpdGVfcGh5X3JlZyhodywKIAkJCQkJICAgIEdHODI1NjNfUEhZX0tNUk5fTU9ERV9DVFJMLAogCQkJCQkgICAgMHgxODApOwotCQl9CiAJCWUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0NUUkwsICZwaHlfcmVnKTsKIAkJaWYgKHBoeV9yZWcgJiBNSUlfQ1JfTE9PUEJBQ0spIHsKIAkJCXBoeV9yZWcgJj0gfk1JSV9DUl9MT09QQkFDSzsKQEAgLTE0OTcsNyArMTUwOCw3IEBACiAJCQlpZiAodW5saWtlbHkoKytrID09IHR4ZHItPmNvdW50KSkgayA9IDA7CiAJCX0KIAkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgVERULCBrKTsKLQkJbXNlY19kZWxheSgyMDApOworCQltc2xlZXAoMjAwKTsKIAkJdGltZSA9IGppZmZpZXM7IC8qIHNldCB0aGUgc3RhcnQgdGltZSBmb3IgdGhlIHJlY2VpdmUgKi8KIAkJZ29vZF9jbnQgPSAwOwogCQlkbyB7IC8qIHJlY2VpdmUgdGhlIHNlbnQgcGFja2V0cyAqLwpAQCAtMTU2OCwxNCArMTU3OSwxNCBAQAogCQkJZTEwMDBfY2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKIAkJCWlmIChhZGFwdGVyLT5ody5zZXJkZXNfbGlua19kb3duID09IEZBTFNFKQogCQkJCXJldHVybiAqZGF0YTsKLQkJCW1zZWNfZGVsYXkoMjApOworCQkJbXNsZWVwKDIwKTsKIAkJfSB3aGlsZSAoaSsrIDwgMzc1MCk7CiAKIAkJKmRhdGEgPSAxOwogCX0gZWxzZSB7CiAJCWUxMDAwX2NoZWNrX2Zvcl9saW5rKCZhZGFwdGVyLT5odyk7CiAJCWlmIChhZGFwdGVyLT5ody5hdXRvbmVnKSAgLyogaWYgYXV0b19uZWcgaXMgc2V0IHdhaXQgZm9yIGl0ICovCi0JCQltc2VjX2RlbGF5KDQwMDApOworCQkJbXNsZWVwKDQwMDApOwogCiAJCWlmICghKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkpIHsKIAkJCSpkYXRhID0gMTsKQEAgLTE1OTAsNiArMTYwMSw4IEBACiAJcmV0dXJuIEUxMDAwX1RFU1RfTEVOOwogfQogCitleHRlcm4gdm9pZCBlMTAwMF9wb3dlcl91cF9waHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKik7CisKIHN0YXRpYyB2b2lkCiBlMTAwMF9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJICAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRoX3Rlc3QsIHVpbnQ2NF90ICpkYXRhKQpAQCAtMTYwNiw2ICsxNjE5LDggQEAKIAkJdWludDhfdCBmb3JjZWRfc3BlZWRfZHVwbGV4ID0gYWRhcHRlci0+aHcuZm9yY2VkX3NwZWVkX2R1cGxleDsKIAkJdWludDhfdCBhdXRvbmVnID0gYWRhcHRlci0+aHcuYXV0b25lZzsKIAorCQlEUFJJTlRLKEhXLCBJTkZPLCAib2ZmbGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKwogCQkvKiBMaW5rIHRlc3QgcGVyZm9ybWVkIGJlZm9yZSBoYXJkd2FyZSByZXNldCBzbyBhdXRvbmVnIGRvZXNuJ3QKIAkJICogaW50ZXJmZXJlIHdpdGggdGVzdCByZXN1bHQgKi8KIAkJaWYgKGUxMDAwX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVs0XSkpCkBAIC0xNjI5LDYgKzE2NDQsOCBAQAogCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAogCQllMTAwMF9yZXNldChhZGFwdGVyKTsKKwkJLyogbWFrZSBzdXJlIHRoZSBwaHkgaXMgcG93ZXJlZCB1cCAqLworCQllMTAwMF9wb3dlcl91cF9waHkoYWRhcHRlcik7CiAJCWlmIChlMTAwMF9sb29wYmFja190ZXN0KGFkYXB0ZXIsICZkYXRhWzNdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKQEAgLTE2NDIsNiArMTY1OSw3IEBACiAJCWlmIChpZl9ydW5uaW5nKQogCQkJZGV2X29wZW4obmV0ZGV2KTsKIAl9IGVsc2UgeworCQlEUFJJTlRLKEhXLCBJTkZPLCAib25saW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQkvKiBPbmxpbmUgdGVzdHMgKi8KIAkJaWYgKGUxMDAwX2xpbmtfdGVzdChhZGFwdGVyLCAmZGF0YVs0XSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwpAQCAtMTY1NywxNCArMTY3NSwxMiBAQAogCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDQgKiAxMDAwKTsKIH0KIAotc3RhdGljIHZvaWQKLWUxMDAwX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQorc3RhdGljIGludCBlMTAwMF93b2xfZXhjbHVzaW9uKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7Ci0Jc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHJldHZhbCA9IDE7IC8qIGZhaWwgYnkgZGVmYXVsdCAqLwogCi0Jc3dpdGNoIChhZGFwdGVyLT5ody5kZXZpY2VfaWQpIHsKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU0MjoKKwlzd2l0Y2ggKGh3LT5kZXZpY2VfaWQpIHsKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0M0dDX0ZJQkVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQzR0NfQ09QUEVSOgogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ0RUlfRklCRVI6CkBAIC0xNjcyLDUyICsxNjg4LDg3IEBACiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NDVFTV9GSUJFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUVNX0NPUFBFUjoKIAljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUENJRToKKwkJLyogdGhlc2UgZG9uJ3Qgc3VwcG9ydCBXb0wgYXQgYWxsICovCiAJCXdvbC0+c3VwcG9ydGVkID0gMDsKLQkJd29sLT53b2xvcHRzICAgPSAwOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX0NPUFBFUjoKKwkJLyogV2FrZSBldmVudHMgbm90IHN1cHBvcnRlZCBvbiBwb3J0IEIgKi8KKwkJaWYgKEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSkgeworCQkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzOgorCQkvKiBxdWFkIHBvcnQgYWRhcHRlcnMgb25seSBzdXBwb3J0IFdvTCBvbiBwb3J0IEEgKi8KKwkJaWYgKCFhZGFwdGVyLT5xdWFkX3BvcnRfYSkgeworCQkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJLyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCisJCXJldHZhbCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGR1YWwgcG9ydCBjYXJkcyBvbmx5IHN1cHBvcnQgV29MIG9uIHBvcnQgQSBmcm9tIG5vdyBvbgorCQkgKiB1bmxlc3MgaXQgd2FzIGVuYWJsZWQgaW4gdGhlIGVlcHJvbSBmb3IgcG9ydCBCCisJCSAqIHNvIGV4Y2x1ZGUgRlVOQ18xIHBvcnRzIGZyb20gaGF2aW5nIFdvTCBlbmFibGVkICovCisJCWlmIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEgJiYKKwkJICAgICFhZGFwdGVyLT5lZXByb21fd29sKSB7CisJCQl3b2wtPnN1cHBvcnRlZCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXJldHZhbCA9IDA7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQKK2UxMDAwX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9VQ0FTVCB8IFdBS0VfTUNBU1QgfAorCSAgICAgICAgICAgICAgICAgV0FLRV9CQ0FTVCB8IFdBS0VfTUFHSUM7CisJd29sLT53b2xvcHRzID0gMDsKKworCS8qIHRoaXMgZnVuY3Rpb24gd2lsbCBzZXQgLT5zdXBwb3J0ZWQgPSAwIGFuZCByZXR1cm4gMSBpZiB3b2wgaXMgbm90CisJICogc3VwcG9ydGVkIGJ5IHRoaXMgaGFyZHdhcmUgKi8KKwlpZiAoZTEwMDBfd29sX2V4Y2x1c2lvbihhZGFwdGVyLCB3b2wpKQogCQlyZXR1cm47CiAKKwkvKiBhcHBseSBhbnkgc3BlY2lmaWMgdW5zdXBwb3J0ZWQgbWFza3MgaGVyZSAqLworCXN3aXRjaCAoYWRhcHRlci0+aHcuZGV2aWNlX2lkKSB7CiAJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzOgotCQkvKiBkZXZpY2UgaWQgMTBCNSBwb3J0LUEgc3VwcG9ydHMgd29sICovCi0JCWlmICghYWRhcHRlci0+a3NwM19wb3J0X2EpIHsKLQkJCXdvbC0+c3VwcG9ydGVkID0gMDsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBLU1AzIGRvZXMgbm90IHN1cHBwb3J0IFVDQVNUIHdha2UtdXBzIGZvciBhbnkgaW50ZXJmYWNlICovCi0JCXdvbC0+c3VwcG9ydGVkID0gV0FLRV9NQ0FTVCB8IFdBS0VfQkNBU1QgfCBXQUtFX01BR0lDOworCQkvKiBLU1AzIGRvZXMgbm90IHN1cHBwb3J0IFVDQVNUIHdha2UtdXBzICovCisJCXdvbC0+c3VwcG9ydGVkICY9IH5XQUtFX1VDQVNUOwogCiAJCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX0VYKQogCQkJRFBSSU5USyhEUlYsIEVSUiwgIkludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0ICIKIAkJICAgICAgICAiZGlyZWN0ZWQgKHVuaWNhc3QpIGZyYW1lIHdha2UtdXAgcGFja2V0c1xuIik7Ci0JCXdvbC0+d29sb3B0cyA9IDA7Ci0JCWdvdG8gZG9fZGVmYXVsdHM7Ci0KLQljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSOgotCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfRklCRVI6Ci0JY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKLQkJLyogV2FrZSBldmVudHMgb25seSBzdXBwb3J0ZWQgb24gcG9ydCBBIGZvciBkdWFsIGZpYmVyICovCi0JCWlmIChFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpIHsKLQkJCXdvbC0+c3VwcG9ydGVkID0gMDsKLQkJCXdvbC0+d29sb3B0cyAgID0gMDsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBGYWxsIFRocm91Z2ggKi8KLQorCQlicmVhazsKIAlkZWZhdWx0OgotCQl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwKLQkJCQkgV0FLRV9CQ0FTVCB8IFdBS0VfTUFHSUM7Ci0JCXdvbC0+d29sb3B0cyA9IDA7Ci0KLWRvX2RlZmF1bHRzOgotCQlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19FWCkKLQkJCXdvbC0+d29sb3B0cyB8PSBXQUtFX1VDQVNUOwotCQlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19NQykKLQkJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01DQVNUOwotCQlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19CQykKLQkJCXdvbC0+d29sb3B0cyB8PSBXQUtFX0JDQVNUOwotCQlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19NQUcpCi0JCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKLQkJcmV0dXJuOworCQlicmVhazsKIAl9CisKKwlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19FWCkKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfVUNBU1Q7CisJaWYgKGFkYXB0ZXItPndvbCAmIEUxMDAwX1dVRkNfTUMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01DQVNUOworCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX0JDKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9CQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19NQUcpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX01BR0lDOworCisJcmV0dXJuOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzI2LDUyICsxNzc3LDM2IEBACiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAKLQlzd2l0Y2ggKGFkYXB0ZXItPmh3LmRldmljZV9pZCkgewotCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQyOgotCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQzR0NfRklCRVI6Ci0JY2FzZSBFMTAwMF9ERVZfSURfODI1NDNHQ19DT1BQRVI6Ci0JY2FzZSBFMTAwMF9ERVZfSURfODI1NDRFSV9GSUJFUjoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX1FVQURfQ09QUEVSOgotCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVI6Ci0JY2FzZSBFMTAwMF9ERVZfSURfODI1NDVFTV9GSUJFUjoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU0NUVNX0NPUFBFUjoKKwlpZiAod29sLT53b2xvcHRzICYgKFdBS0VfUEhZIHwgV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKGUxMDAwX3dvbF9leGNsdXNpb24oYWRhcHRlciwgd29sKSkKIAkJcmV0dXJuIHdvbC0+d29sb3B0cyA/IC1FT1BOT1RTVVBQIDogMDsKIAorCXN3aXRjaCAoaHctPmRldmljZV9pZCkgewogCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfUVVBRF9DT1BQRVJfS1NQMzoKLQkJLyogZGV2aWNlIGlkIDEwQjUgcG9ydC1BIHN1cHBvcnRzIHdvbCAqLwotCQlpZiAoIWFkYXB0ZXItPmtzcDNfcG9ydF9hKQotCQkJcmV0dXJuIHdvbC0+d29sb3B0cyA/IC1FT1BOT1RTVVBQIDogMDsKLQogCQlpZiAod29sLT53b2xvcHRzICYgV0FLRV9VQ0FTVCkgewogCQkJRFBSSU5USyhEUlYsIEVSUiwgIkludGVyZmFjZSBkb2VzIG5vdCBzdXBwb3J0ICIKIAkJICAgICAgICAiZGlyZWN0ZWQgKHVuaWNhc3QpIGZyYW1lIHdha2UtdXAgcGFja2V0c1xuIik7CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KLQotCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2RUJfRklCRVI6Ci0JY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9GSUJFUjoKLQljYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX0ZJQkVSOgotCQkvKiBXYWtlIGV2ZW50cyBvbmx5IHN1cHBvcnRlZCBvbiBwb3J0IEEgZm9yIGR1YWwgZmliZXIgKi8KLQkJaWYgKEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSkKLQkJCXJldHVybiB3b2wtPndvbG9wdHMgPyAtRU9QTk9UU1VQUCA6IDA7Ci0JCS8qIEZhbGwgVGhyb3VnaCAqLwotCisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkgfCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQotCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JCWFkYXB0ZXItPndvbCA9IDA7Ci0KLQkJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCi0JCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19FWDsKLQkJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUNBU1QpCi0JCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19NQzsKLQkJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfQkNBU1QpCi0JCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19CQzsKLQkJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCi0JCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19NQUc7CisJCWJyZWFrOwogCX0KIAorCS8qIHRoZXNlIHNldHRpbmdzIHdpbGwgYWx3YXlzIG92ZXJyaWRlIHdoYXQgd2UgY3VycmVudGx5IGhhdmUgKi8KKwlhZGFwdGVyLT53b2wgPSAwOworCisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBFMTAwMF9XVUZDX0VYOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQorCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19NQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKKwkJYWRhcHRlci0+d29sIHw9IEUxMDAwX1dVRkNfQkM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCWFkYXB0ZXItPndvbCB8PSBFMTAwMF9XVUZDX01BRzsKKwogCXJldHVybiAwOwogfQogCkBAIC0xODg3LDcgKzE5MjIsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBlMTAwMF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZTEwMDBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBlMTAwMF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyAgICAgICAgICAgPSBlMTAwMF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvICAgICAgICAgICAgPSBlMTAwMF9nZXRfZHJ2aW5mbywKQEAgLTE4OTUsOCArMTkzMCw4IEBACiAJLmdldF9yZWdzICAgICAgICAgICAgICAgPSBlMTAwMF9nZXRfcmVncywKIAkuZ2V0X3dvbCAgICAgICAgICAgICAgICA9IGUxMDAwX2dldF93b2wsCiAJLnNldF93b2wgICAgICAgICAgICAgICAgPSBlMTAwMF9zZXRfd29sLAotCS5nZXRfbXNnbGV2ZWwJICAgICAgICA9IGUxMDAwX2dldF9tc2dsZXZlbCwKLQkuc2V0X21zZ2xldmVsCSAgICAgICAgPSBlMTAwMF9zZXRfbXNnbGV2ZWwsCisJLmdldF9tc2dsZXZlbCAgICAgICAgICAgPSBlMTAwMF9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBlMTAwMF9zZXRfbXNnbGV2ZWwsCiAJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBlMTAwMF9ud2F5X3Jlc2V0LAogCS5nZXRfbGluayAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4gICAgICAgICA9IGUxMDAwX2dldF9lZXByb21fbGVuLApAQCAtMTkwNCwxNyArMTkzOSwxNyBAQAogCS5zZXRfZWVwcm9tICAgICAgICAgICAgID0gZTEwMDBfc2V0X2VlcHJvbSwKIAkuZ2V0X3JpbmdwYXJhbSAgICAgICAgICA9IGUxMDAwX2dldF9yaW5ncGFyYW0sCiAJLnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBlMTAwMF9zZXRfcmluZ3BhcmFtLAotCS5nZXRfcGF1c2VwYXJhbQkJPSBlMTAwMF9nZXRfcGF1c2VwYXJhbSwKLQkuc2V0X3BhdXNlcGFyYW0JCT0gZTEwMDBfc2V0X3BhdXNlcGFyYW0sCi0JLmdldF9yeF9jc3VtCQk9IGUxMDAwX2dldF9yeF9jc3VtLAotCS5zZXRfcnhfY3N1bQkJPSBlMTAwMF9zZXRfcnhfY3N1bSwKLQkuZ2V0X3R4X2NzdW0JCT0gZTEwMDBfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtCQk9IGUxMDAwX3NldF90eF9jc3VtLAotCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfcGF1c2VwYXJhbSAgICAgICAgID0gZTEwMDBfZ2V0X3BhdXNlcGFyYW0sCisJLnNldF9wYXVzZXBhcmFtICAgICAgICAgPSBlMTAwMF9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0gICAgICAgICAgICA9IGUxMDAwX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSAgICAgICAgICAgID0gZTEwMDBfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtICAgICAgICAgICAgPSBlMTAwMF9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0gICAgICAgICAgICA9IGUxMDAwX3NldF90eF9jc3VtLAorCS5nZXRfc2cgICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfc2csCisJLnNldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF9zZywKICNpZmRlZiBORVRJRl9GX1RTTwotCS5nZXRfdHNvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbwkJPSBlMTAwMF9zZXRfdHNvLAorCS5nZXRfdHNvICAgICAgICAgICAgICAgID0gZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvICAgICAgICAgICAgICAgID0gZTEwMDBfc2V0X3RzbywKICNlbmRpZgogCS5zZWxmX3Rlc3RfY291bnQgICAgICAgID0gZTEwMDBfZGlhZ190ZXN0X2NvdW50LAogCS5zZWxmX3Rlc3QgICAgICAgICAgICAgID0gZTEwMDBfZGlhZ190ZXN0LApAQCAtMTkyMiw3ICsxOTU3LDcgQEAKIAkucGh5c19pZCAgICAgICAgICAgICAgICA9IGUxMDAwX3BoeXNfaWQsCiAJLmdldF9zdGF0c19jb3VudCAgICAgICAgPSBlMTAwMF9nZXRfc3RhdHNfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSBlMTAwMF9nZXRfZXRodG9vbF9zdGF0cywKLQkuZ2V0X3Blcm1fYWRkcgkJPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCisJLmdldF9wZXJtX2FkZHIgICAgICAgICAgPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCiB9OwogCiB2b2lkIGUxMDAwX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmMKaW5kZXggNTgzNTE4YS4uMTBiOGM4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5jCkBAIC0zMSw2ICszMSw3IEBACiAgKiBTaGFyZWQgZnVuY3Rpb25zIGZvciBhY2Nlc3NpbmcgYW5kIGNvbmZpZ3VyaW5nIHRoZSBNQUMKICAqLwogCisKICNpbmNsdWRlICJlMTAwMF9ody5oIgogCiBzdGF0aWMgaW50MzJfdCBlMTAwMF9zZXRfcGh5X3R5cGUoc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC0xMDUsNiArMTA2LDMzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGR1cGxleCk7CiBzdGF0aWMgaW50MzJfdCBlMTAwMF9jb25maWd1cmVfa21ybl9mb3JfMTAwMChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAorc3RhdGljIGludDMyX3QgZTEwMDBfZXJhc2VfaWNoOF80a19zZWdtZW50KHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJCSAgIHVpbnQzMl90IHNlZ21lbnQpOworc3RhdGljIGludDMyX3QgZTEwMDBfZ2V0X3NvZnR3YXJlX2ZsYWcoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgaW50MzJfdCBlMTAwMF9nZXRfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIGludDMyX3QgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7CitzdGF0aWMgaW50MzJfdCBlMTAwMF9rdW1lcmFuX2xvY2tfbG9zc193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIGludDMyX3QgZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsCisJCQkJICAgICAgdWludDE2X3Qgd29yZHMsIHVpbnQxNl90ICpkYXRhKTsKK3N0YXRpYyBpbnQzMl90IGUxMDAwX3JlYWRfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LAorCQkJCSAgICB1aW50OF90KiBkYXRhKTsKK3N0YXRpYyBpbnQzMl90IGUxMDAwX3JlYWRfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LAorCQkJCSAgICB1aW50MTZfdCAqZGF0YSk7CitzdGF0aWMgaW50MzJfdCBlMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLAorCQkJCSAgIHVpbnQxNl90ICpkYXRhKTsKK3N0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfZmxhZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIGludDMyX3QgZTEwMDBfc2V0X3BjaV9leF9ub19zbm9vcChzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCQkgdWludDMyX3Qgbm9fc25vb3ApOworc3RhdGljIGludDMyX3QgZTEwMDBfdmVyaWZ5X3dyaXRlX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LAorCQkJCQkgICAgdWludDMyX3QgaW5kZXgsIHVpbnQ4X3QgYnl0ZSk7CitzdGF0aWMgaW50MzJfdCBlMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsCisJCQkJICAgICAgIHVpbnQxNl90IHdvcmRzLCB1aW50MTZfdCAqZGF0YSk7CitzdGF0aWMgaW50MzJfdCBlMTAwMF93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsCisJCQkJICAgICB1aW50OF90IGRhdGEpOworc3RhdGljIGludDMyX3QgZTEwMDBfd3JpdGVfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgcmVnX2FkZHIsCisJCQkJICAgIHVpbnQxNl90IGRhdGEpOworCiAvKiBJR1AgY2FibGUgbGVuZ3RoIHRhYmxlICovCiBzdGF0aWMgY29uc3QKIHVpbnQxNl90IGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfdGFibGVbSUdQMDFFMTAwMF9BR0NfTEVOR1RIX1RBQkxFX1NJWkVdID0KQEAgLTEzOSwxMCArMTY3LDEwIEBACiB7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXRfcGh5X3R5cGUiKTsKIAotICAgIGlmKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF91bmRlZmluZWQpCisgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF91bmRlZmluZWQpCiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1BIWV9UWVBFOwogCi0gICAgc3dpdGNoKGh3LT5waHlfaWQpIHsKKyAgICBzd2l0Y2ggKGh3LT5waHlfaWQpIHsKICAgICBjYXNlIE04OEUxMDAwX0VfUEhZX0lEOgogICAgIGNhc2UgTTg4RTEwMDBfSV9QSFlfSUQ6CiAgICAgY2FzZSBNODhFMTAxMV9JX1BIWV9JRDoKQEAgLTE1MCwxMCArMTc4LDEwIEBACiAgICAgICAgIGh3LT5waHlfdHlwZSA9IGUxMDAwX3BoeV9tODg7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSUdQMDFFMTAwMF9JX1BIWV9JRDoKLSAgICAgICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxIHx8Ci0gICAgICAgICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MV9yZXZfMiB8fAotICAgICAgICAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwKLSAgICAgICAgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CisgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDEgfHwKKyAgICAgICAgICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MV9yZXZfMiB8fAorICAgICAgICAgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3IHx8CisgICAgICAgICAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDdfcmV2XzIpIHsKICAgICAgICAgICAgIGh3LT5waHlfdHlwZSA9IGUxMDAwX3BoeV9pZ3A7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtMTgwLDYgKzIwOCw3IEBACiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CiAKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSUdQIHBoeSBpbml0IHNjcmlwdCAtIGluaXRpYWxpemVzIHRoZSBHYkUgUEhZCiAgKgpAQCAtMTkzLDggKzIyMiw4IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3BoeV9pbml0X3NjcmlwdCIpOwogCi0gICAgaWYoaHctPnBoeV9pbml0X3NjcmlwdCkgewotICAgICAgICBtc2VjX2RlbGF5KDIwKTsKKyAgICBpZiAoaHctPnBoeV9pbml0X3NjcmlwdCkgeworICAgICAgICBtc2xlZXAoMjApOwogCiAgICAgICAgIC8qIFNhdmUgb2ZmIHRoZSBjdXJyZW50IHZhbHVlIG9mIHJlZ2lzdGVyIDB4MkY1QiB0byBiZSByZXN0b3JlZCBhdAogICAgICAgICAgKiB0aGUgZW5kIG9mIHRoaXMgcm91dGluZS4gKi8KQEAgLTIwMywxMyArMjMyLDEzIEBACiAgICAgICAgIC8qIERpc2FibGVkIHRoZSBQSFkgdHJhbnNtaXR0ZXIgKi8KICAgICAgICAgZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCAweDAwMDMpOwogCi0gICAgICAgIG1zZWNfZGVsYXkoMjApOworICAgICAgICBtc2xlZXAoMjApOwogCiAgICAgICAgIGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsMHgwMDAwLDB4MDE0MCk7CiAKLSAgICAgICAgbXNlY19kZWxheSg1KTsKKyAgICAgICAgbXNsZWVwKDUpOwogCi0gICAgICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKICAgICAgICAgY2FzZSBlMTAwMF84MjU0MToKICAgICAgICAgY2FzZSBlMTAwMF84MjU0NzoKICAgICAgICAgICAgIGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDB4MUY5NSwgMHgwMDAxKTsKQEAgLTI0MSwyNyArMjcwLDI3IEBACiAKICAgICAgICAgZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLCAweDMzMDApOwogCi0gICAgICAgIG1zZWNfZGVsYXkoMjApOworICAgICAgICBtc2xlZXAoMjApOwogCiAgICAgICAgIC8qIE5vdyBlbmFibGUgdGhlIHRyYW5zbWl0dGVyICovCiAgICAgICAgIGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDB4MkY1QiwgcGh5X3NhdmVkX2RhdGEpOwogCi0gICAgICAgIGlmKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykgeworICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSB7CiAgICAgICAgICAgICB1aW50MTZfdCBmdXNlZCwgZmluZSwgY29hcnNlOwogCiAgICAgICAgICAgICAvKiBNb3ZlIHRvIGFuYWxvZyByZWdpc3RlcnMgcGFnZSAqLwogICAgICAgICAgICAgZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX0FOQUxPR19TUEFSRV9GVVNFX1NUQVRVUywgJmZ1c2VkKTsKIAotICAgICAgICAgICAgaWYoIShmdXNlZCAmIElHUDAxRTEwMDBfQU5BTE9HX1NQQVJFX0ZVU0VfRU5BQkxFRCkpIHsKKyAgICAgICAgICAgIGlmICghKGZ1c2VkICYgSUdQMDFFMTAwMF9BTkFMT0dfU1BBUkVfRlVTRV9FTkFCTEVEKSkgewogICAgICAgICAgICAgICAgIGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9BTkFMT0dfRlVTRV9TVEFUVVMsICZmdXNlZCk7CiAKICAgICAgICAgICAgICAgICBmaW5lID0gZnVzZWQgJiBJR1AwMUUxMDAwX0FOQUxPR19GVVNFX0ZJTkVfTUFTSzsKICAgICAgICAgICAgICAgICBjb2Fyc2UgPSBmdXNlZCAmIElHUDAxRTEwMDBfQU5BTE9HX0ZVU0VfQ09BUlNFX01BU0s7CiAKLSAgICAgICAgICAgICAgICBpZihjb2Fyc2UgPiBJR1AwMUUxMDAwX0FOQUxPR19GVVNFX0NPQVJTRV9USFJFU0gpIHsKKyAgICAgICAgICAgICAgICBpZiAoY29hcnNlID4gSUdQMDFFMTAwMF9BTkFMT0dfRlVTRV9DT0FSU0VfVEhSRVNIKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvYXJzZSAtPSBJR1AwMUUxMDAwX0FOQUxPR19GVVNFX0NPQVJTRV8xMDsKICAgICAgICAgICAgICAgICAgICAgZmluZSAtPSBJR1AwMUUxMDAwX0FOQUxPR19GVVNFX0ZJTkVfMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYoY29hcnNlID09IElHUDAxRTEwMDBfQU5BTE9HX0ZVU0VfQ09BUlNFX1RIUkVTSCkKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvYXJzZSA9PSBJR1AwMUUxMDAwX0FOQUxPR19GVVNFX0NPQVJTRV9USFJFU0gpCiAgICAgICAgICAgICAgICAgICAgIGZpbmUgLT0gSUdQMDFFMTAwMF9BTkFMT0dfRlVTRV9GSU5FXzEwOwogCiAgICAgICAgICAgICAgICAgZnVzZWQgPSAoZnVzZWQgJiBJR1AwMUUxMDAwX0FOQUxPR19GVVNFX1BPTFlfTUFTSykgfApAQCAtMzYwLDYgKzM4OSw3IEBACiAgICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9DT1BQRVI6CiAgICAgY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKICAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1NFUkRFUzoKKyAgICBjYXNlIEUxMDAwX0RFVl9JRF84MjU3MUVCX1FVQURfQ09QUEVSOgogICAgICAgICAgICAgaHctPm1hY190eXBlID0gZTEwMDBfODI1NzE7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRTEwMDBfREVWX0lEXzgyNTcyRUlfQ09QUEVSOgpAQCAtMzkxLDcgKzQyMSw3IEBACiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX01BQ19UWVBFOwogICAgIH0KIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfaWNoOGxhbjoKICAgICAgICAgaHctPnN3Zndod19zZW1hcGhvcmVfcHJlc2VudCA9IFRSVUU7CiAgICAgICAgIGh3LT5hc2ZfZmlybXdhcmVfcHJlc2VudCA9IFRSVUU7CkBAIC00MjksNyArNDU5LDcgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfc2V0X21lZGlhX3R5cGUiKTsKIAotICAgIGlmKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF84MjU0MykgeworICAgIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfODI1NDMpIHsKICAgICAgICAgLyogdGJpX2NvbXBhdGliaWxpdHkgaXMgb25seSB2YWxpZCBvbiA4MjU0MyAqLwogICAgICAgICBody0+dGJpX2NvbXBhdGliaWxpdHlfZW4gPSBGQUxTRTsKICAgICB9CkBAIC00ODksMTYgKzUxOSwxNiBAQAogICAgIERFQlVHRlVOQygiZTEwMDBfcmVzZXRfaHciKTsKIAogICAgIC8qIEZvciA4MjU0MiAocmV2IDIuMCksIGRpc2FibGUgTVdJIGJlZm9yZSBpc3N1aW5nIGEgZGV2aWNlIHJlc2V0ICovCi0gICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgeworICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKSB7CiAgICAgICAgIERFQlVHT1VUKCJEaXNhYmxpbmcgTVdJIG9uIDgyNTQyIHJldiAyLjBcbiIpOwogICAgICAgICBlMTAwMF9wY2lfY2xlYXJfbXdpKGh3KTsKICAgICB9CiAKLSAgICBpZihody0+YnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpX2V4cHJlc3MpIHsKKyAgICBpZiAoaHctPmJ1c190eXBlID09IGUxMDAwX2J1c190eXBlX3BjaV9leHByZXNzKSB7CiAgICAgICAgIC8qIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIHN0aWNraW5nIGlmIHRoZXJlIGlzIG5vIFRMUCBjb25uZWN0aW9uCiAgICAgICAgICAqIG9uIHRoZSBsYXN0IFRMUCByZWFkL3dyaXRlIHRyYW5zYWN0aW9uIHdoZW4gTUFDIGlzIHJlc2V0LgogICAgICAgICAgKi8KLSAgICAgICAgaWYoZTEwMDBfZGlzYWJsZV9wY2lleF9tYXN0ZXIoaHcpICE9IEUxMDAwX1NVQ0NFU1MpIHsKKyAgICAgICAgaWYgKGUxMDAwX2Rpc2FibGVfcGNpZXhfbWFzdGVyKGh3KSAhPSBFMTAwMF9TVUNDRVNTKSB7CiAgICAgICAgICAgICBERUJVR09VVCgiUENJLUUgTWFzdGVyIGRpc2FibGUgcG9sbGluZyBoYXMgZmFpbGVkLlxuIik7CiAgICAgICAgIH0KICAgICB9CkBAIC01MjEsMTkgKzU1MSwxOSBAQAogICAgIC8qIERlbGF5IHRvIGFsbG93IGFueSBvdXRzdGFuZGluZyBQQ0kgdHJhbnNhY3Rpb25zIHRvIGNvbXBsZXRlIGJlZm9yZQogICAgICAqIHJlc2V0dGluZyB0aGUgZGV2aWNlCiAgICAgICovCi0gICAgbXNlY19kZWxheSgxMCk7CisgICAgbXNsZWVwKDEwKTsKIAogICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCk7CiAKICAgICAvKiBNdXN0IHJlc2V0IHRoZSBQSFkgYmVmb3JlIHJlc2V0dGluZyB0aGUgTUFDICovCi0gICAgaWYoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MSkgfHwgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MSkgfHwgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NykpIHsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCAoY3RybCB8IEUxMDAwX0NUUkxfUEhZX1JTVCkpOwotICAgICAgICBtc2VjX2RlbGF5KDUpOworICAgICAgICBtc2xlZXAoNSk7CiAgICAgfQogCiAgICAgLyogTXVzdCBhY3F1aXJlIHRoZSBNRElPIG93bmVyc2hpcCBiZWZvcmUgTUFDIHJlc2V0LgogICAgICAqIE93bmVyc2hpcCBkZWZhdWx0cyB0byBmaXJtd2FyZSBhZnRlciBhIHJlc2V0LiAqLwotICAgIGlmKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU3MykgeworICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpIHsKICAgICAgICAgdGltZW91dCA9IDEwOwogCiAgICAgICAgIGV4dGNuZl9jdHJsID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVYVENORl9DVFJMKTsKQEAgLTU0MywxNCArNTczLDE0IEBACiAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVYVENORl9DVFJMLCBleHRjbmZfY3RybCk7CiAgICAgICAgICAgICBleHRjbmZfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFWFRDTkZfQ1RSTCk7CiAKLSAgICAgICAgICAgIGlmKGV4dGNuZl9jdHJsICYgRTEwMDBfRVhUQ05GX0NUUkxfTURJT19TV19PV05FUlNISVApCisgICAgICAgICAgICBpZiAoZXh0Y25mX2N0cmwgJiBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBleHRjbmZfY3RybCB8PSBFMTAwMF9FWFRDTkZfQ1RSTF9NRElPX1NXX09XTkVSU0hJUDsKIAotICAgICAgICAgICAgbXNlY19kZWxheSgyKTsKKyAgICAgICAgICAgIG1zbGVlcCgyKTsKICAgICAgICAgICAgIHRpbWVvdXQtLTsKLSAgICAgICAgfSB3aGlsZSh0aW1lb3V0KTsKKyAgICAgICAgfSB3aGlsZSAodGltZW91dCk7CiAgICAgfQogCiAgICAgLyogV29ya2Fyb3VuZCBmb3IgSUNIOCBiaXQgY29ycnVwdGlvbiBpc3N1ZSBpbiBGSUZPIG1lbW9yeSAqLwpAQCAtNTY4LDcgKzU5OCw3IEBACiAgICAgICovCiAgICAgREVCVUdPVVQoIklzc3VpbmcgYSBnbG9iYWwgcmVzZXQgdG8gTUFDXG4iKTsKIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgICAgICBjYXNlIGUxMDAwXzgyNTQ0OgogICAgICAgICBjYXNlIGUxMDAwXzgyNTQwOgogICAgICAgICBjYXNlIGUxMDAwXzgyNTQ1OgpAQCAtNTk2LDcgKzYyNiw3IEBACiAKICAgICAgICAgICAgIGUxMDAwX2dldF9zb2Z0d2FyZV9mbGFnKGh3KTsKICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTCwgKGN0cmwgfCBFMTAwMF9DVFJMX1JTVCkpOwotICAgICAgICAgICAgbXNlY19kZWxheSg1KTsKKyAgICAgICAgICAgIG1zbGVlcCg1KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCAoY3RybCB8IEUxMDAwX0NUUkxfUlNUKSk7CkBAIC02MDcsNyArNjM3LDcgQEAKICAgICAgKiBkZXZpY2UuICBMYXRlciBjb250cm9sbGVycyByZWxvYWQgdGhlIEVFUFJPTSBhdXRvbWF0aWNhbGx5LCBzbyBqdXN0IHdhaXQKICAgICAgKiBmb3IgcmVsb2FkIHRvIGNvbXBsZXRlLgogICAgICAqLwotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgICAgICBjYXNlIGUxMDAwXzgyNTQyX3JldjJfMDoKICAgICAgICAgY2FzZSBlMTAwMF84MjU0Ml9yZXYyXzE6CiAgICAgICAgIGNhc2UgZTEwMDBfODI1NDM6CkBAIC02MTksMTQgKzY0OSwxNCBAQAogICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOwogICAgICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOwogICAgICAgICAgICAgLyogV2FpdCBmb3IgRUVQUk9NIHJlbG9hZCAqLwotICAgICAgICAgICAgbXNlY19kZWxheSgyKTsKKyAgICAgICAgICAgIG1zbGVlcCgyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIGUxMDAwXzgyNTQxOgogICAgICAgICBjYXNlIGUxMDAwXzgyNTQxX3Jldl8yOgogICAgICAgICBjYXNlIGUxMDAwXzgyNTQ3OgogICAgICAgICBjYXNlIGUxMDAwXzgyNTQ3X3Jldl8yOgogICAgICAgICAgICAgLyogV2FpdCBmb3IgRUVQUk9NIHJlbG9hZCAqLwotICAgICAgICAgICAgbXNlY19kZWxheSgyMCk7CisgICAgICAgICAgICBtc2xlZXAoMjApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgZTEwMDBfODI1NzM6CiAgICAgICAgICAgICBpZiAoZTEwMDBfaXNfb25ib2FyZF9udm1fZWVwcm9tKGh3KSA9PSBGQUxTRSkgewpAQCAtNjQyLDI0ICs2NzIsMjQgQEAKICAgICAgICAgY2FzZSBlMTAwMF9pY2g4bGFuOgogICAgICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2dldF9hdXRvX3JkX2RvbmUoaHcpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIC8qIFdlIGRvbid0IHdhbnQgdG8gY29udGludWUgYWNjZXNzaW5nIE1BQyByZWdpc3RlcnMuICovCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8qIFdhaXQgZm9yIEVFUFJPTSByZWxvYWQgKGl0IGhhcHBlbnMgYXV0b21hdGljYWxseSkgKi8KLSAgICAgICAgICAgIG1zZWNfZGVsYXkoNSk7CisgICAgICAgICAgICBtc2xlZXAoNSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKICAgICAvKiBEaXNhYmxlIEhXIEFSUHMgb24gQVNGIGVuYWJsZWQgYWRhcHRlcnMgKi8KLSAgICBpZihody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDAgJiYgaHctPm1hY190eXBlIDw9IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MCAmJiBody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIpIHsKICAgICAgICAgbWFuYyA9IEUxMDAwX1JFQURfUkVHKGh3LCBNQU5DKTsKICAgICAgICAgbWFuYyAmPSB+KEUxMDAwX01BTkNfQVJQX0VOKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBNQU5DLCBtYW5jKTsKICAgICB9CiAKLSAgICBpZigoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxKSB8fCAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkgeworICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxKSB8fCAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkgewogICAgICAgICBlMTAwMF9waHlfaW5pdF9zY3JpcHQoaHcpOwogCiAgICAgICAgIC8qIENvbmZpZ3VyZSBhY3Rpdml0eSBMRUQgYWZ0ZXIgUEhZIHJlc2V0ICovCkBAIC02NzcsOCArNzA3LDggQEAKICAgICBpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSKTsKIAogICAgIC8qIElmIE1XSSB3YXMgcHJldmlvdXNseSBlbmFibGVkLCByZWVuYWJsZSBpdC4gKi8KLSAgICBpZihody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKSB7Ci0gICAgICAgIGlmKGh3LT5wY2lfY21kX3dvcmQgJiBDTURfTUVNX1dSVF9JTlZBTElEQVRFKQorICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKSB7CisgICAgICAgIGlmIChody0+cGNpX2NtZF93b3JkICYgUENJX0NPTU1BTkRfSU5WQUxJREFURSkKICAgICAgICAgICAgIGUxMDAwX3BjaV9zZXRfbXdpKGh3KTsKICAgICB9CiAKQEAgLTcxOCw5ICs3NDgsMjAgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfaW5pdF9odyIpOwogCisgICAgLyogZm9yY2UgZnVsbCBETUEgY2xvY2sgZnJlcXVlbmN5IGZvciAxMC8xMDAgb24gSUNIOCBBMC1CMCAqLworICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfaWNoOGxhbikgeworICAgICAgICByZWdfZGF0YSA9IEUxMDAwX1JFQURfUkVHKGh3LCBUQVJDMCk7CisgICAgICAgIHJlZ19kYXRhIHw9IDB4MzAwMDAwMDA7CisgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVEFSQzAsIHJlZ19kYXRhKTsKKworICAgICAgICByZWdfZGF0YSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOworICAgICAgICByZWdfZGF0YSAmPSB+MHg4MDAwMDAwMDsKKyAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTVEFUVVMsIHJlZ19kYXRhKTsKKyAgICB9CisKICAgICAvKiBJbml0aWFsaXplIElkZW50aWZpY2F0aW9uIExFRCAqLwogICAgIHJldF92YWwgPSBlMTAwMF9pZF9sZWRfaW5pdChodyk7Ci0gICAgaWYocmV0X3ZhbCkgeworICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgIERFQlVHT1VUKCJFcnJvciBJbml0aWFsaXppbmcgSWRlbnRpZmljYXRpb24gTEVEXG4iKTsKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQpAQCAtNzM4LDEyICs3NzksMTIgQEAKICAgICB9CiAKICAgICAvKiBGb3IgODI1NDIgKHJldiAyLjApLCBkaXNhYmxlIE1XSSBhbmQgcHV0IHRoZSByZWNlaXZlciBpbnRvIHJlc2V0ICovCi0gICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgeworICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDJfcmV2Ml8wKSB7CiAgICAgICAgIERFQlVHT1VUKCJEaXNhYmxpbmcgTVdJIG9uIDgyNTQyIHJldiAyLjBcbiIpOwogICAgICAgICBlMTAwMF9wY2lfY2xlYXJfbXdpKGh3KTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBSQ1RMLCBFMTAwMF9SQ1RMX1JTVCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKLSAgICAgICAgbXNlY19kZWxheSg1KTsKKyAgICAgICAgbXNsZWVwKDUpOwogICAgIH0KIAogICAgIC8qIFNldHVwIHRoZSByZWNlaXZlIGFkZHJlc3MuIFRoaXMgaW52b2x2ZXMgaW5pdGlhbGl6aW5nIGFsbCBvZiB0aGUgUmVjZWl2ZQpAQCAtNzUyLDExICs3OTMsMTEgQEAKICAgICBlMTAwMF9pbml0X3J4X2FkZHJzKGh3KTsKIAogICAgIC8qIEZvciA4MjU0MiAocmV2IDIuMCksIHRha2UgdGhlIHJlY2VpdmVyIG91dCBvZiByZXNldCBhbmQgZW5hYmxlIE1XSSAqLwotICAgIGlmKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0Ml9yZXYyXzApIHsKKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkgewogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFJDVEwsIDApOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7Ci0gICAgICAgIG1zZWNfZGVsYXkoMSk7Ci0gICAgICAgIGlmKGh3LT5wY2lfY21kX3dvcmQgJiBDTURfTUVNX1dSVF9JTlZBTElEQVRFKQorICAgICAgICBtc2xlZXAoMSk7CisgICAgICAgIGlmIChody0+cGNpX2NtZF93b3JkICYgUENJX0NPTU1BTkRfSU5WQUxJREFURSkKICAgICAgICAgICAgIGUxMDAwX3BjaV9zZXRfbXdpKGh3KTsKICAgICB9CiAKQEAgLTc2NSw3ICs4MDYsNyBAQAogICAgIG10YV9zaXplID0gRTEwMDBfTUNfVEJMX1NJWkU7CiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQogICAgICAgICBtdGFfc2l6ZSA9IEUxMDAwX01DX1RCTF9TSVpFX0lDSDhMQU47Ci0gICAgZm9yKGkgPSAwOyBpIDwgbXRhX3NpemU7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBtdGFfc2l6ZTsgaSsrKSB7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgTVRBLCBpLCAwKTsKICAgICAgICAgLyogdXNlIHdyaXRlIGZsdXNoIHRvIHByZXZlbnQgTWVtb3J5IFdyaXRlIEJsb2NrIChNV0IpIGZyb20KICAgICAgICAgICogb2NjdXJpbmcgd2hlbiBhY2Nlc3Npbmcgb3VyIHJlZ2lzdGVyIHNwYWNlICovCkBAIC03NzcsMTggKzgxOCwxOCBAQAogICAgICAqIGdpdmVzIGVxdWFsIHByaW9yaXR5IHRvIHRyYW5zbWl0cyBhbmQgcmVjZWl2ZXMuICBWYWxpZCBvbmx5IG9uCiAgICAgICogODI1NDIgYW5kIDgyNTQzIHNpbGljb24uCiAgICAgICovCi0gICAgaWYoaHctPmRtYV9mYWlybmVzcyAmJiBody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDMpIHsKKyAgICBpZiAoaHctPmRtYV9mYWlybmVzcyAmJiBody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDMpIHsKICAgICAgICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsIHwgRTEwMDBfQ1RSTF9QUklPUik7CiAgICAgfQogCi0gICAgc3dpdGNoKGh3LT5tYWNfdHlwZSkgeworICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAgICAgY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKICAgICBjYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICAvKiBXb3JrYXJvdW5kIGZvciBQQ0ktWCBwcm9ibGVtIHdoZW4gQklPUyBzZXRzIE1NUkJDIGluY29ycmVjdGx5LiAqLwotICAgICAgICBpZihody0+YnVzX3R5cGUgPT0gZTEwMDBfYnVzX3R5cGVfcGNpeCkgeworICAgICAgICBpZiAoaHctPmJ1c190eXBlID09IGUxMDAwX2J1c190eXBlX3BjaXgpIHsKICAgICAgICAgICAgIGUxMDAwX3JlYWRfcGNpX2NmZyhodywgUENJWF9DT01NQU5EX1JFR0lTVEVSLCAmcGNpeF9jbWRfd29yZCk7CiAgICAgICAgICAgICBlMTAwMF9yZWFkX3BjaV9jZmcoaHcsIFBDSVhfU1RBVFVTX1JFR0lTVEVSX0hJLAogICAgICAgICAgICAgICAgICZwY2l4X3N0YXRfaGlfd29yZCk7CkBAIC03OTYsOSArODM3LDkgQEAKICAgICAgICAgICAgICAgICBQQ0lYX0NPTU1BTkRfTU1SQkNfU0hJRlQ7CiAgICAgICAgICAgICBzdGF0X21tcmJjID0gKHBjaXhfc3RhdF9oaV93b3JkICYgUENJWF9TVEFUVVNfSElfTU1SQkNfTUFTSykgPj4KICAgICAgICAgICAgICAgICBQQ0lYX1NUQVRVU19ISV9NTVJCQ19TSElGVDsKLSAgICAgICAgICAgIGlmKHN0YXRfbW1yYmMgPT0gUENJWF9TVEFUVVNfSElfTU1SQkNfNEspCisgICAgICAgICAgICBpZiAoc3RhdF9tbXJiYyA9PSBQQ0lYX1NUQVRVU19ISV9NTVJCQ180SykKICAgICAgICAgICAgICAgICBzdGF0X21tcmJjID0gUENJWF9TVEFUVVNfSElfTU1SQkNfMks7Ci0gICAgICAgICAgICBpZihjbWRfbW1yYmMgPiBzdGF0X21tcmJjKSB7CisgICAgICAgICAgICBpZiAoY21kX21tcmJjID4gc3RhdF9tbXJiYykgewogICAgICAgICAgICAgICAgIHBjaXhfY21kX3dvcmQgJj0gflBDSVhfQ09NTUFORF9NTVJCQ19NQVNLOwogICAgICAgICAgICAgICAgIHBjaXhfY21kX3dvcmQgfD0gc3RhdF9tbXJiYyA8PCBQQ0lYX0NPTU1BTkRfTU1SQkNfU0hJRlQ7CiAgICAgICAgICAgICAgICAgZTEwMDBfd3JpdGVfcGNpX2NmZyhodywgUENJWF9DT01NQU5EX1JFR0lTVEVSLApAQCAtODEwLDEzICs4NTEsMTMgQEAKIAogICAgIC8qIE1vcmUgdGltZSBuZWVkZWQgZm9yIFBIWSB0byBpbml0aWFsaXplICovCiAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKQotICAgICAgICBtc2VjX2RlbGF5KDE1KTsKKyAgICAgICAgbXNsZWVwKDE1KTsKIAogICAgIC8qIENhbGwgYSBzdWJyb3V0aW5lIHRvIGNvbmZpZ3VyZSB0aGUgbGluayBhbmQgc2V0dXAgZmxvdyBjb250cm9sLiAqLwogICAgIHJldF92YWwgPSBlMTAwMF9zZXR1cF9saW5rKGh3KTsKIAogICAgIC8qIFNldCB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciB3cml0ZS1iYWNrIHBvbGljeSAqLwotICAgIGlmKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQ0KSB7CiAgICAgICAgIGN0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgVFhEQ1RMKTsKICAgICAgICAgY3RybCA9IChjdHJsICYgfkUxMDAwX1RYRENUTF9XVEhSRVNIKSB8IEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0I7CiAgICAgICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CkBAIC04NjcsMTQgKzkwOCwxMyBAQAogICAgIGNhc2UgZTEwMDBfaWNoOGxhbjoKICAgICAgICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBUWERDVEwxKTsKICAgICAgICAgY3RybCA9IChjdHJsICYgfkUxMDAwX1RYRENUTF9XVEhSRVNIKSB8IEUxMDAwX1RYRENUTF9GVUxMX1RYX0RFU0NfV0I7Ci0gICAgICAgIGlmKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKKyAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKICAgICAgICAgICAgIGN0cmwgfD0gRTEwMDBfVFhEQ1RMX0NPVU5UX0RFU0M7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgVFhEQ1RMMSwgY3RybCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogCi0KICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTczKSB7CiAgICAgICAgIHVpbnQzMl90IGdjciA9IEUxMDAwX1JFQURfUkVHKGh3LCBHQ1IpOwogICAgICAgICBnY3IgfD0gRTEwMDBfR0NSX0wxX0FDVF9XSVRIT1VUX0wwU19SWDsKQEAgLTkxOCwxMCArOTU4LDEwIEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2FkanVzdF9zZXJkZXNfYW1wbGl0dWRlIik7CiAKLSAgICBpZihody0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKyAgICBpZiAoaHctPm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogCi0gICAgc3dpdGNoKGh3LT5tYWNfdHlwZSkgeworICAgIHN3aXRjaCAoaHctPm1hY190eXBlKSB7CiAgICAgY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKICAgICBjYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgogICAgICAgICBicmVhazsKQEAgLTkzNCwxMSArOTc0LDExIEBACiAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgIH0KIAotICAgIGlmKGVlcHJvbV9kYXRhICE9IEVFUFJPTV9SRVNFUlZFRF9XT1JEKSB7CisgICAgaWYgKGVlcHJvbV9kYXRhICE9IEVFUFJPTV9SRVNFUlZFRF9XT1JEKSB7CiAgICAgICAgIC8qIEFkanVzdCBTRVJERVMgb3V0cHV0IGFtcGxpdHVkZSBvbmx5LiAqLwogICAgICAgICBlZXByb21fZGF0YSAmPSBFRVBST01fU0VSREVTX0FNUExJVFVERV9NQVNLOwogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0VYVF9DVFJMLCBlZXByb21fZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCkBAIC0xMDA2LDEwICsxMDQ2LDEwIEBACiAgICAgICogaW4gY2FzZSB3ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQKICAgICAgKiBodWIgb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRpZXMuCiAgICAgICovCi0gICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkKKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkKICAgICAgICAgaHctPmZjICY9ICh+ZTEwMDBfZmNfdHhfcGF1c2UpOwogCi0gICAgaWYoKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKSAmJiAoaHctPnJlcG9ydF90eF9lYXJseSA9PSAxKSkKKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA8IGUxMDAwXzgyNTQzKSAmJiAoaHctPnJlcG9ydF90eF9lYXJseSA9PSAxKSkKICAgICAgICAgaHctPmZjICY9ICh+ZTEwMDBfZmNfcnhfcGF1c2UpOwogCiAgICAgaHctPm9yaWdpbmFsX2ZjID0gaHctPmZjOwpAQCAtMTAyNCwxMiArMTA2NCwxMiBAQAogICAgICAqIG9yIGUxMDAwX3BoeV9zZXR1cCgpIGlzIGNhbGxlZC4KICAgICAgKi8KICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQzKSB7Ci0JCXJldF92YWwgPSBlMTAwMF9yZWFkX2VlcHJvbShodywgRUVQUk9NX0lOSVRfQ09OVFJPTDJfUkVHLAotCQkJCQkJCQkJMSwgJmVlcHJvbV9kYXRhKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCURFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7Ci0JCQlyZXR1cm4gLUUxMDAwX0VSUl9FRVBST007Ci0JCX0KKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfZWVwcm9tKGh3LCBFRVBST01fSU5JVF9DT05UUk9MMl9SRUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmZWVwcm9tX2RhdGEpOworICAgICAgICBpZiAocmV0X3ZhbCkgeworICAgICAgICAgICAgREVCVUdPVVQoIkVFUFJPTSBSZWFkIEVycm9yXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKKyAgICAgICAgfQogICAgICAgICBjdHJsX2V4dCA9ICgoZWVwcm9tX2RhdGEgJiBFRVBST01fV09SRDBGX1NXUERJT19FWFQpIDw8CiAgICAgICAgICAgICAgICAgICAgIFNXRFBJT19fRVhUX1NISUZUKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOwpAQCAtMTA2MiwxNCArMTEwMiwxNCBAQAogICAgICAqIGFiaWxpdHkgdG8gdHJhbnNtaXQgcGF1c2UgZnJhbWVzIGluIG5vdCBlbmFibGVkLCB0aGVuIHRoZXNlCiAgICAgICogcmVnaXN0ZXJzIHdpbGwgYmUgc2V0IHRvIDAuCiAgICAgICovCi0gICAgaWYoIShody0+ZmMgJiBlMTAwMF9mY190eF9wYXVzZSkpIHsKKyAgICBpZiAoIShody0+ZmMgJiBlMTAwMF9mY190eF9wYXVzZSkpIHsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUTCwgMCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRkNSVEgsIDApOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBSZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIgbWFya3MKICAgICAgICAgICogYXMgd2VsbCBhcyAob3B0aW9uYWxseSkgZW5hYmxpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZiBYT04gZnJhbWVzLgogICAgICAgICAgKi8KLSAgICAgICAgaWYoaHctPmZjX3NlbmRfeG9uKSB7CisgICAgICAgIGlmIChody0+ZmNfc2VuZF94b24pIHsKICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRkNSVEwsIChody0+ZmNfbG93X3dhdGVyIHwgRTEwMDBfRkNSVExfWE9ORSkpOwogICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBGQ1JUSCwgaHctPmZjX2hpZ2hfd2F0ZXIpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTExNiwxMSArMTE1NiwxMSBAQAogICAgICAqIHRoZSBFRVBST00uCiAgICAgICovCiAgICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKLSAgICBpZihody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKQorICAgIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKQogICAgICAgICBzaWduYWwgPSAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpID8gRTEwMDBfQ1RSTF9TV0RQSU4xIDogMDsKIAogICAgIHJldF92YWwgPSBlMTAwMF9hZGp1c3Rfc2VyZGVzX2FtcGxpdHVkZShodyk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAvKiBUYWtlIHRoZSBsaW5rIG91dCBvZiByZXNldCAqLwpAQCAtMTEyOCw3ICsxMTY4LDcgQEAKIAogICAgIC8qIEFkanVzdCBWQ08gc3BlZWQgdG8gaW1wcm92ZSBCRVIgcGVyZm9ybWFuY2UgKi8KICAgICByZXRfdmFsID0gZTEwMDBfc2V0X3Zjb19zcGVlZChodyk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICBlMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOwpAQCAtMTE5MSw3ICsxMjMxLDcgQEAKICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CiAKICAgICBody0+dHhjdyA9IHR4Y3c7Ci0gICAgbXNlY19kZWxheSgxKTsKKyAgICBtc2xlZXAoMSk7CiAKICAgICAvKiBJZiB3ZSBoYXZlIGEgc2lnbmFsICh0aGUgY2FibGUgaXMgcGx1Z2dlZCBpbikgdGhlbiBwb2xsIGZvciBhICJMaW5rLVVwIgogICAgICAqIGluZGljYXRpb24gaW4gdGhlIERldmljZSBTdGF0dXMgUmVnaXN0ZXIuICBUaW1lLW91dCBpZiBhIGxpbmsgaXNuJ3QKQEAgLTExOTksMTUgKzEyMzksMTUgQEAKICAgICAgKiBsZXNzIHRoYW4gNTAwIG1pbGxpc2Vjb25kcyBldmVuIGlmIHRoZSBvdGhlciBlbmQgaXMgZG9pbmcgaXQgaW4gU1cpLgogICAgICAqIEZvciBpbnRlcm5hbCBzZXJkZXMsIHdlIGp1c3QgYXNzdW1lIGEgc2lnbmFsIGlzIHByZXNlbnQsIHRoZW4gcG9sbC4KICAgICAgKi8KLSAgICBpZihody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcyB8fAorICAgIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcyB8fAogICAgICAgIChFMTAwMF9SRUFEX1JFRyhodywgQ1RSTCkgJiBFMTAwMF9DVFJMX1NXRFBJTjEpID09IHNpZ25hbCkgewogICAgICAgICBERUJVR09VVCgiTG9va2luZyBmb3IgTGlua1xuIik7Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IChMSU5LX1VQX1RJTUVPVVQgLyAxMCk7IGkrKykgewotICAgICAgICAgICAgbXNlY19kZWxheSgxMCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoTElOS19VUF9USU1FT1VUIC8gMTApOyBpKyspIHsKKyAgICAgICAgICAgIG1zbGVlcCgxMCk7CiAgICAgICAgICAgICBzdGF0dXMgPSBFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKTsKLSAgICAgICAgICAgIGlmKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkgYnJlYWs7CisgICAgICAgICAgICBpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKSBicmVhazsKICAgICAgICAgfQotICAgICAgICBpZihpID09IChMSU5LX1VQX1RJTUVPVVQgLyAxMCkpIHsKKyAgICAgICAgaWYgKGkgPT0gKExJTktfVVBfVElNRU9VVCAvIDEwKSkgewogICAgICAgICAgICAgREVCVUdPVVQoIk5ldmVyIGdvdCBhIHZhbGlkIGxpbmsgZnJvbSBhdXRvLW5lZyEhIVxuIik7CiAgICAgICAgICAgICBody0+YXV0b25lZ19mYWlsZWQgPSAxOwogICAgICAgICAgICAgLyogQXV0b05lZyBmYWlsZWQgdG8gYWNoaWV2ZSBhIGxpbmssIHNvIHdlJ2xsIGNhbGwKQEAgLTEyMTYsNyArMTI1Niw3IEBACiAgICAgICAgICAgICAgKiBub24tYXV0b25lZ290aWF0aW5nIGxpbmsgcGFydG5lcnMuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jaGVja19mb3JfbGluayhodyk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKSB7CisgICAgICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciB3aGlsZSBjaGVja2luZyBmb3IgbGlua1xuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICB9CkBAIC0xMjUwLDcgKzEyOTAsNyBAQAogICAgICAqIHRoZSBQSFkgc3BlZWQgYW5kIGR1cGxleCBjb25maWd1cmF0aW9uIGlzLiBJbiBhZGRpdGlvbiwgd2UgbmVlZCB0bwogICAgICAqIHBlcmZvcm0gYSBoYXJkd2FyZSByZXNldCBvbiB0aGUgUEhZIHRvIHRha2UgaXQgb3V0IG9mIHJlc2V0LgogICAgICAqLwotICAgIGlmKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CiAgICAgICAgIGN0cmwgfD0gRTEwMDBfQ1RSTF9TTFU7CiAgICAgICAgIGN0cmwgJj0gfihFMTAwMF9DVFJMX0ZSQ1NQRCB8IEUxMDAwX0NUUkxfRlJDRFBYKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKQEAgLTEyNTgsMTMgKzEyOTgsMTMgQEAKICAgICAgICAgY3RybCB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCB8IEUxMDAwX0NUUkxfU0xVKTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCBjdHJsKTsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3BoeV9od19yZXNldChodyk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCiAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSB2YWxpZCBQSFkgKi8KICAgICByZXRfdmFsID0gZTEwMDBfZGV0ZWN0X2dpZ19waHkoaHcpOwotICAgIGlmKHJldF92YWwpIHsKKyAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICBERUJVR09VVCgiRXJyb3IsIGRpZCBub3QgZGV0ZWN0IHZhbGlkIHBoeS5cbiIpOwogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICB9CkBAIC0xMjcyLDE5ICsxMzEyLDE5IEBACiAKICAgICAvKiBTZXQgUEhZIHRvIGNsYXNzIEEgbW9kZSAoaWYgbmVjZXNzYXJ5KSAqLwogICAgIHJldF92YWwgPSBlMTAwMF9zZXRfcGh5X21vZGUoaHcpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgaWYoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NV9yZXZfMykgfHwKKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NV9yZXZfMykgfHwKICAgICAgICAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ2X3Jldl8zKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCAmcGh5X2RhdGEpOwogICAgICAgICBwaHlfZGF0YSB8PSAweDAwMDAwMDA4OwogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogICAgIH0KIAotICAgIGlmKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0MyB8fAotICAgICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MSB8fCBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDcgfHwKLSAgICAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDFfcmV2XzIgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQorICAgIGlmIChody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDMgfHwKKyAgICAgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxIHx8IGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NyB8fAorICAgICAgICBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDFfcmV2XzIgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKQogICAgICAgICBody0+cGh5X3Jlc2V0X2Rpc2FibGUgPSBGQUxTRTsKIAogICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CkBAIC0xMzE0LDggKzEzNTQsOCBAQAogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICB9CiAKLSAgICAvKiBXYWl0IDEwbXMgZm9yIE1BQyB0byBjb25maWd1cmUgUEhZIGZyb20gZWVwcm9tIHNldHRpbmdzICovCi0gICAgbXNlY19kZWxheSgxNSk7CisgICAgLyogV2FpdCAxNW1zIGZvciBNQUMgdG8gY29uZmlndXJlIFBIWSBmcm9tIGVlcHJvbSBzZXR0aW5ncyAqLworICAgIG1zbGVlcCgxNSk7CiAgICAgaWYgKGh3LT5tYWNfdHlwZSAhPSBlMTAwMF9pY2g4bGFuKSB7CiAgICAgLyogQ29uZmlndXJlIGFjdGl2aXR5IExFRCBhZnRlciBQSFkgcmVzZXQgKi8KICAgICBsZWRfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBMRURDVEwpOwpAQCAtMTMyNCwxMSArMTM2NCwxNCBAQAogICAgIEUxMDAwX1dSSVRFX1JFRyhodywgTEVEQ1RMLCBsZWRfY3RybCk7CiAgICAgfQogCi0gICAgLyogZGlzYWJsZSBscGx1IGQzIGR1cmluZyBkcml2ZXIgaW5pdCAqLwotICAgIHJldF92YWwgPSBlMTAwMF9zZXRfZDNfbHBsdV9zdGF0ZShodywgRkFMU0UpOwotICAgIGlmIChyZXRfdmFsKSB7Ci0gICAgICAgIERFQlVHT1VUKCJFcnJvciBEaXNhYmxpbmcgTFBMVSBEM1xuIik7Ci0gICAgICAgIHJldHVybiByZXRfdmFsOworICAgIC8qIFRoZSBOVk0gc2V0dGluZ3Mgd2lsbCBjb25maWd1cmUgTFBMVSBpbiBEMyBmb3IgSUdQMiBhbmQgSUdQMyBQSFlzICovCisgICAgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwKSB7CisgICAgICAgIC8qIGRpc2FibGUgbHBsdSBkMyBkdXJpbmcgZHJpdmVyIGluaXQgKi8KKyAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3NldF9kM19scGx1X3N0YXRlKGh3LCBGQUxTRSk7CisgICAgICAgIGlmIChyZXRfdmFsKSB7CisgICAgICAgICAgICBERUJVR09VVCgiRXJyb3IgRGlzYWJsaW5nIExQTFUgRDNcbiIpOworICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvKiBkaXNhYmxlIGxwbHUgZDAgZHVyaW5nIGRyaXZlciBpbml0ICovCkBAIC0xMzY2LDQ1ICsxNDA5LDQ1IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgcGh5X2RhdGEpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgLyogc2V0IGF1dG8tbWFzdGVyIHNsYXZlIHJlc29sdXRpb24gc2V0dGluZ3MgKi8KLSAgICBpZihody0+YXV0b25lZykgeworICAgIGlmIChody0+YXV0b25lZykgewogICAgICAgICBlMTAwMF9tc190eXBlIHBoeV9tc19zZXR0aW5nID0gaHctPm1hc3Rlcl9zbGF2ZTsKIAotICAgICAgICBpZihody0+ZmZlX2NvbmZpZ19zdGF0ZSA9PSBlMTAwMF9mZmVfY29uZmlnX2FjdGl2ZSkKKyAgICAgICAgaWYgKGh3LT5mZmVfY29uZmlnX3N0YXRlID09IGUxMDAwX2ZmZV9jb25maWdfYWN0aXZlKQogICAgICAgICAgICAgaHctPmZmZV9jb25maWdfc3RhdGUgPSBlMTAwMF9mZmVfY29uZmlnX2VuYWJsZWQ7CiAKLSAgICAgICAgaWYoaHctPmRzcF9jb25maWdfc3RhdGUgPT0gZTEwMDBfZHNwX2NvbmZpZ19hY3RpdmF0ZWQpCisgICAgICAgIGlmIChody0+ZHNwX2NvbmZpZ19zdGF0ZSA9PSBlMTAwMF9kc3BfY29uZmlnX2FjdGl2YXRlZCkKICAgICAgICAgICAgIGh3LT5kc3BfY29uZmlnX3N0YXRlID0gZTEwMDBfZHNwX2NvbmZpZ19lbmFibGVkOwogCiAgICAgICAgIC8qIHdoZW4gYXV0b25lZ290aWF0aW9uIGFkdmVydGlzbWVudCBpcyBvbmx5IDEwMDBNYnBzIHRoZW4gd2UKICAgICAgICAgICAqIHNob3VsZCBkaXNhYmxlIFNtYXJ0U3BlZWQgYW5kIGVuYWJsZSBBdXRvIE1hc3RlclNsYXZlCiAgICAgICAgICAgKiByZXNvbHV0aW9uIGFzIGhhcmR3YXJlIGRlZmF1bHQuICovCi0gICAgICAgIGlmKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gQURWRVJUSVNFXzEwMDBfRlVMTCkgeworICAgICAgICBpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBRFZFUlRJU0VfMTAwMF9GVUxMKSB7CiAgICAgICAgICAgICAvKiBEaXNhYmxlIFNtYXJ0U3BlZWQgKi8KLSAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmcGh5X2RhdGEpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGh5X2RhdGEpOworICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICBwaHlfZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKLSAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X2RhdGEpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgLyogU2V0IGF1dG8gTWFzdGVyL1NsYXZlIHJlc29sdXRpb24gcHJvY2VzcyAqLwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZwaHlfZGF0YSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICBwaHlfZGF0YSAmPSB+Q1JfMTAwMFRfTVNfRU5BQkxFOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBwaHlfZGF0YSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KIAogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAvKiBsb2FkIGRlZmF1bHRzIGZvciBmdXR1cmUgdXNlICovCkBAIC0xNDI4LDcgKzE0NzEsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCkBAIC0xNDQ5LDEyICsxNDkyLDEyIEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cCIpOwogCi0gICAgaWYoIWh3LT5waHlfcmVzZXRfZGlzYWJsZSkgeworICAgIGlmICghaHctPnBoeV9yZXNldF9kaXNhYmxlKSB7CiAKICAgICAgICAgLyogRW5hYmxlIENSUyBvbiBUWCBmb3IgaGFsZi1kdXBsZXggb3BlcmF0aW9uLiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9NQUNfU1BFQ19DVFJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgcGh5X2RhdGEgfD0gR0c4MjU2M19NU0NSX0FTU0VSVF9DUlNfT05fVFg7CkBAIC0xNDYzLDcgKzE1MDYsNyBAQAogCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9NQUNfU1BFQ19DVFJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgLyogT3B0aW9uczoKQEAgLTE0NzQsNyArMTUxNyw3IEBACiAgICAgICAgICAqICAgMyAtIEF1dG8gZm9yIDEwMDBCYXNlLVQgb25seSAoTURJLVggZm9yIDEwLzEwMEJhc2UtVCBtb2RlcykKICAgICAgICAgICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIEdHODI1NjNfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBwaHlfZGF0YSAmPSB+R0c4MjU2M19QU0NSX0NST1NTT1ZFUl9NT0RFX01BU0s7CkBAIC0xNDk5LDExICsxNTQyLDExIEBACiAgICAgICAgICAqICAgMSAtIEVuYWJsZWQKICAgICAgICAgICovCiAgICAgICAgIHBoeV9kYXRhICY9IH5HRzgyNTYzX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUxfRElTQUJMRTsKLSAgICAgICAgaWYoaHctPmRpc2FibGVfcG9sYXJpdHlfY29ycmVjdGlvbiA9PSAxKQorICAgICAgICBpZiAoaHctPmRpc2FibGVfcG9sYXJpdHlfY29ycmVjdGlvbiA9PSAxKQogICAgICAgICAgICAgcGh5X2RhdGEgfD0gR0c4MjU2M19QU0NSX1BPTEFSSVRZX1JFVkVSU0FMX0RJU0FCTEU7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBHRzgyNTYzX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKIAotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgIC8qIFNXIFJlc2V0IHRoZSBQSFkgc28gYWxsIGNoYW5nZXMgdGFrZSBlZmZlY3QgKi8KQEAgLTE1NTksOSArMTYwMiw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgICAgIHBoeV9kYXRhICY9IH5HRzgyNTYzX0tNQ1JfUEFTU19GQUxTRV9DQVJSSUVSOwotCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgR0c4MjU2M19QSFlfS01STl9NT0RFX0NUUkwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlfZGF0YSk7CisKICAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9CkBAIC0xNTk2LDEyICsxNjM5LDEyIEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2NvcHBlcl9saW5rX21ncF9zZXR1cCIpOwogCi0gICAgaWYoaHctPnBoeV9yZXNldF9kaXNhYmxlKQorICAgIGlmIChody0+cGh5X3Jlc2V0X2Rpc2FibGUpCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogCiAgICAgLyogRW5hYmxlIENSUyBvbiBUWC4gVGhpcyBtdXN0IGJlIHNldCBmb3IgaGFsZi1kdXBsZXggb3BlcmF0aW9uLiAqLwogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICBwaHlfZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FTU0VSVF9DUlNfT05fVFg7CkBAIC0xNjM4LDcgKzE2ODEsNyBAQAogICAgICAqICAgMSAtIEVuYWJsZWQKICAgICAgKi8KICAgICBwaHlfZGF0YSAmPSB+TTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTDsKLSAgICBpZihody0+ZGlzYWJsZV9wb2xhcml0eV9jb3JyZWN0aW9uID09IDEpCisgICAgaWYgKGh3LT5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPT0gMSkKICAgICAgICAgcGh5X2RhdGEgfD0gTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTDsKICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwogICAgIGlmIChyZXRfdmFsKQpAQCAtMTY3OCw3ICsxNzIxLDcgQEAKIAogICAgIC8qIFNXIFJlc2V0IHRoZSBQSFkgc28gYWxsIGNoYW5nZXMgdGFrZSBlZmZlY3QgKi8KICAgICByZXRfdmFsID0gZTEwMDBfcGh5X3Jlc2V0KGh3KTsKLSAgICBpZihyZXRfdmFsKSB7CisgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgREVCVUdPVVQoIkVycm9yIFJlc2V0dGluZyB0aGUgUEhZXG4iKTsKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQpAQCAtMTcwOCw3ICsxNzUxLDcgQEAKICAgICAvKiBJZiBhdXRvbmVnX2FkdmVydGlzZWQgaXMgemVybywgd2UgYXNzdW1lIGl0IHdhcyBub3QgZGVmYXVsdGVkCiAgICAgICogYnkgdGhlIGNhbGxpbmcgY29kZSBzbyB3ZSBzZXQgdG8gYWR2ZXJ0aXNlIGZ1bGwgY2FwYWJpbGl0eS4KICAgICAgKi8KLSAgICBpZihody0+YXV0b25lZ19hZHZlcnRpc2VkID09IDApCisgICAgaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gMCkKICAgICAgICAgaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQ7CiAKICAgICAvKiBJRkUgcGh5IG9ubHkgc3VwcG9ydHMgMTAvMTAwICovCkBAIC0xNzE3LDcgKzE3NjAsNyBAQAogCiAgICAgREVCVUdPVVQoIlJlY29uZmlndXJpbmcgYXV0by1uZWcgYWR2ZXJ0aXNlbWVudCBwYXJhbXNcbiIpOwogICAgIHJldF92YWwgPSBlMTAwMF9waHlfc2V0dXBfYXV0b25lZyhodyk7Ci0gICAgaWYocmV0X3ZhbCkgeworICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgIERFQlVHT1VUKCJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOwogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICB9CkBAIC0xNzI3LDIwICsxNzcwLDIwIEBACiAgICAgICogdGhlIEF1dG8gTmVnIFJlc3RhcnQgYml0IGluIHRoZSBQSFkgY29udHJvbCByZWdpc3Rlci4KICAgICAgKi8KICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgJnBoeV9kYXRhKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIHBoeV9kYXRhIHw9IChNSUlfQ1JfQVVUT19ORUdfRU4gfCBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyk7CiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIFBIWV9DVFJMLCBwaHlfZGF0YSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAvKiBEb2VzIHRoZSB1c2VyIHdhbnQgdG8gd2FpdCBmb3IgQXV0by1OZWcgdG8gY29tcGxldGUgaGVyZSwgb3IKICAgICAgKiBjaGVjayBhdCBhIGxhdGVyIHRpbWUgKGZvciBleGFtcGxlLCBjYWxsYmFjayByb3V0aW5lKS4KICAgICAgKi8KLSAgICBpZihody0+d2FpdF9hdXRvbmVnX2NvbXBsZXRlKSB7CisgICAgaWYgKGh3LT53YWl0X2F1dG9uZWdfY29tcGxldGUpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dhaXRfYXV0b25lZyhodyk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciB3aGlsZSB3YWl0aW5nIGZvciBhdXRvbmVnIHRvIGNvbXBsZXRlXG4iKTsKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9CkBAIC0xNzUxLDcgKzE3OTQsNiBAQAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogQ29uZmlnIHRoZSBNQUMgYW5kIHRoZSBQSFkgYWZ0ZXIgbGluayBpcyB1cC4KICogICAxKSBTZXQgdXAgdGhlIE1BQyB0byB0aGUgY3VycmVudCBQSFkgc3BlZWQvZHVwbGV4CkBAIC0xNzcwLDI1ICsxODEyLDI1IEBACiAgICAgaW50MzJfdCByZXRfdmFsOwogICAgIERFQlVHRlVOQygiZTEwMDBfY29wcGVyX2xpbmtfcG9zdGNvbmZpZyIpOwogCi0gICAgaWYoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQ0KSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkgewogICAgICAgICBlMTAwMF9jb25maWdfY29sbGlzaW9uX2Rpc3QoaHcpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb25maWdfbWFjX3RvX3BoeShodyk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBjb25maWd1cmluZyBNQUMgdG8gUEhZIHNldHRpbmdzXG4iKTsKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9CiAgICAgfQogICAgIHJldF92YWwgPSBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChodyk7Ci0gICAgaWYocmV0X3ZhbCkgeworICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgIERFQlVHT1VUKCJFcnJvciBDb25maWd1cmluZyBGbG93IENvbnRyb2xcbiIpOwogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICB9CiAKICAgICAvKiBDb25maWcgRFNQIHRvIGltcHJvdmUgR2lnYSBsaW5rIHF1YWxpdHkgKi8KLSAgICBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCkgeworICAgIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncCkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZShodywgVFJVRSk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBDb25maWd1cmluZyBEU1AgYWZ0ZXIgbGluayB1cFxuIik7CiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQpAQCAtMTgzNCw3ICsxODc2LDcgQEAKIAogICAgIC8qIENoZWNrIGlmIGl0IGlzIGEgdmFsaWQgUEhZIGFuZCBzZXQgUEhZIG1vZGUgaWYgbmVjZXNzYXJ5LiAqLwogICAgIHJldF92YWwgPSBlMTAwMF9jb3BwZXJfbGlua19wcmVjb25maWcoaHcpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKQEAgLTE4NTUsMzAgKzE4OTcsMzAgQEAKICAgICAgICAgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMyB8fAogICAgICAgICBody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2lncF8yKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb3BwZXJfbGlua19pZ3Bfc2V0dXAoaHcpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgIH0gZWxzZSBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvcHBlcl9saW5rX21ncF9zZXR1cChodyk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfSBlbHNlIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvcHBlcl9saW5rX2dncF9zZXR1cChodyk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCi0gICAgaWYoaHctPmF1dG9uZWcpIHsKKyAgICBpZiAoaHctPmF1dG9uZWcpIHsKICAgICAgICAgLyogU2V0dXAgYXV0b25lZyBhbmQgZmxvdyBjb250cm9sIGFkdmVydGlzZW1lbnQKICAgICAgICAgICAqIGFuZCBwZXJmb3JtIGF1dG9uZWdvdGlhdGlvbiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfY29wcGVyX2xpbmtfYXV0b25lZyhodyk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyogUEhZIHdpbGwgYmUgc2V0IHRvIDEwSCwgMTBGLCAxMDBILG9yIDEwMEYKICAgICAgICAgICAqIGRlcGVuZGluZyBvbiB2YWx1ZSBmcm9tIGZvcmNlZF9zcGVlZF9kdXBsZXguICovCiAgICAgICAgIERFQlVHT1VUKCJGb3JjaW5nIHNwZWVkIGFuZCBkdXBsZXhcbiIpOwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleChodyk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhcbiIpOwogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KQEAgLTE4ODcsMTggKzE5MjksMTggQEAKICAgICAvKiBDaGVjayBsaW5rIHN0YXR1cy4gV2FpdCB1cCB0byAxMDAgbWljcm9zZWNvbmRzIGZvciBsaW5rIHRvIGJlY29tZQogICAgICAqIHZhbGlkLgogICAgICAqLwotICAgIGZvcihpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgICAgIGlmKHBoeV9kYXRhICYgTUlJX1NSX0xJTktfU1RBVFVTKSB7CisgICAgICAgIGlmIChwaHlfZGF0YSAmIE1JSV9TUl9MSU5LX1NUQVRVUykgewogICAgICAgICAgICAgLyogQ29uZmlnIHRoZSBNQUMgYW5kIFBIWSBhZnRlciBsaW5rIGlzIHVwICovCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfY29wcGVyX2xpbmtfcG9zdGNvbmZpZyhodyk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgICAgIERFQlVHT1VUKCJWYWxpZCBsaW5rIGVzdGFibGlzaGVkISEhXG4iKTsKQEAgLTIwMDAsNyArMjA0Miw3IEBACiAKICAgICAvKiBSZWFkIHRoZSBNSUkgQXV0by1OZWcgQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAoQWRkcmVzcyA0KS4gKi8KICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsICZtaWlfYXV0b25lZ19hZHZfcmVnKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIGlmIChody0+cGh5X3R5cGUgIT0gZTEwMDBfcGh5X2lmZSkgewpAQCAtMjAyOCwzNiArMjA3MCwzNiBAQAogICAgIERFQlVHT1VUMSgiYXV0b25lZ19hZHZlcnRpc2VkICV4XG4iLCBody0+YXV0b25lZ19hZHZlcnRpc2VkKTsKIAogICAgIC8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwIE1iIEhhbGYgRHVwbGV4PyAqLwotICAgIGlmKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTBfSEFMRikgeworICAgIGlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0hBTEYpIHsKICAgICAgICAgREVCVUdPVVQoIkFkdmVydGlzZSAxMG1iIEhhbGYgZHVwbGV4XG4iKTsKICAgICAgICAgbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwVF9IRF9DQVBTOwogICAgIH0KIAogICAgIC8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwIE1iIEZ1bGwgRHVwbGV4PyAqLwotICAgIGlmKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTBfRlVMTCkgeworICAgIGlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0ZVTEwpIHsKICAgICAgICAgREVCVUdPVVQoIkFkdmVydGlzZSAxMG1iIEZ1bGwgZHVwbGV4XG4iKTsKICAgICAgICAgbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwVF9GRF9DQVBTOwogICAgIH0KIAogICAgIC8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwMCBNYiBIYWxmIER1cGxleD8gKi8KLSAgICBpZihody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMF9IQUxGKSB7CisgICAgaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTAwX0hBTEYpIHsKICAgICAgICAgREVCVUdPVVQoIkFkdmVydGlzZSAxMDBtYiBIYWxmIGR1cGxleFxuIik7CiAgICAgICAgIG1paV9hdXRvbmVnX2Fkdl9yZWcgfD0gTldBWV9BUl8xMDBUWF9IRF9DQVBTOwogICAgIH0KIAogICAgIC8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwMCBNYiBGdWxsIER1cGxleD8gKi8KLSAgICBpZihody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMF9GVUxMKSB7CisgICAgaWYgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgJiBBRFZFUlRJU0VfMTAwX0ZVTEwpIHsKICAgICAgICAgREVCVUdPVVQoIkFkdmVydGlzZSAxMDBtYiBGdWxsIGR1cGxleFxuIik7CiAgICAgICAgIG1paV9hdXRvbmVnX2Fkdl9yZWcgfD0gTldBWV9BUl8xMDBUWF9GRF9DQVBTOwogICAgIH0KIAogICAgIC8qIFdlIGRvIG5vdCBhbGxvdyB0aGUgUGh5IHRvIGFkdmVydGlzZSAxMDAwIE1iIEhhbGYgRHVwbGV4ICovCi0gICAgaWYoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDAwX0hBTEYpIHsKKyAgICBpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDAwX0hBTEYpIHsKICAgICAgICAgREVCVUdPVVQoIkFkdmVydGlzZSAxMDAwbWIgSGFsZiBkdXBsZXggcmVxdWVzdGVkLCByZXF1ZXN0IGRlbmllZCFcbiIpOwogICAgIH0KIAogICAgIC8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwMDAgTWIgRnVsbCBEdXBsZXg/ICovCi0gICAgaWYoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDAwX0ZVTEwpIHsKKyAgICBpZiAoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDAwX0ZVTEwpIHsKICAgICAgICAgREVCVUdPVVQoIkFkdmVydGlzZSAxMDAwbWIgRnVsbCBkdXBsZXhcbiIpOwogICAgICAgICBtaWlfMTAwMHRfY3RybF9yZWcgfD0gQ1JfMTAwMFRfRkRfQ0FQUzsKICAgICAgICAgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWZlKSB7CkBAIC0yMTE5LDcgKzIxNjEsNyBAQAogICAgIH0KIAogICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgREVCVUdPVVQxKCJBdXRvLU5lZyBBZHZlcnRpc2luZyAleFxuIiwgbWlpX2F1dG9uZWdfYWR2X3JlZyk7CkBAIC0yMTY3LDcgKzIyMDksNyBAQAogCiAgICAgLyogUmVhZCB0aGUgTUlJIENvbnRyb2wgUmVnaXN0ZXIuICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0NUUkwsICZtaWlfY3RybF9yZWcpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgLyogV2UgbmVlZCB0byBkaXNhYmxlIGF1dG9uZWcgaW4gb3JkZXIgdG8gZm9yY2UgbGluayBhbmQgZHVwbGV4LiAqLwpAQCAtMjE3NSw4ICsyMjE3LDggQEAKICAgICBtaWlfY3RybF9yZWcgJj0gfk1JSV9DUl9BVVRPX05FR19FTjsKIAogICAgIC8qIEFyZSB3ZSBmb3JjaW5nIEZ1bGwgb3IgSGFsZiBEdXBsZXg/ICovCi0gICAgaWYoaHctPmZvcmNlZF9zcGVlZF9kdXBsZXggPT0gZTEwMDBfMTAwX2Z1bGwgfHwKLSAgICAgICBody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9PSBlMTAwMF8xMF9mdWxsKSB7CisgICAgaWYgKGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwMF9mdWxsIHx8CisgICAgICAgIGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwX2Z1bGwpIHsKICAgICAgICAgLyogV2Ugd2FudCB0byBmb3JjZSBmdWxsIGR1cGxleCBzbyB3ZSBTRVQgdGhlIGZ1bGwgZHVwbGV4IGJpdHMgaW4gdGhlCiAgICAgICAgICAqIERldmljZSBhbmQgTUlJIENvbnRyb2wgUmVnaXN0ZXJzLgogICAgICAgICAgKi8KQEAgLTIxOTMsNyArMjIzNSw3IEBACiAgICAgfQogCiAgICAgLyogQXJlIHdlIGZvcmNpbmcgMTAwTWJwcz8/PyAqLwotICAgIGlmKGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwMF9mdWxsIHx8CisgICAgaWYgKGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwMF9mdWxsIHx8CiAgICAgICAgaHctPmZvcmNlZF9zcGVlZF9kdXBsZXggPT0gZTEwMDBfMTAwX2hhbGYpIHsKICAgICAgICAgLyogU2V0IHRoZSAxMDBNYiBiaXQgYW5kIHR1cm4gb2ZmIHRoZSAxMDAwTWIgYW5kIDEwTWIgYml0cy4gKi8KICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX1NQRF8xMDA7CkBAIC0yMjE2LDcgKzIyNTgsNyBAQAogICAgIGlmICgoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHx8CiAgICAgICAgIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X2dnODI1NjMpKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgLyogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiBNODhFMTAwMCByZXF1aXJlcyBNREkKQEAgLTIyMjQsNyArMjI2Niw3IEBACiAgICAgICAgICAqLwogICAgICAgICBwaHlfZGF0YSAmPSB+TTg4RTEwMDBfUFNDUl9BVVRPX1hfTU9ERTsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsIHBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBERUJVR09VVDEoIk04OEUxMDAwIFBTQ1I6ICV4IFxuIiwgcGh5X2RhdGEpOwpAQCAtMjI0OCwyMCArMjI5MCwyMCBAQAogICAgICAgICAgKiBmb3JjZWQgd2hlbmV2ZXIgc3BlZWQgb3IgZHVwbGV4IGFyZSBmb3JjZWQuCiAgICAgICAgICAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NUUkwsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgcGh5X2RhdGEgJj0gfklHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVg7CiAgICAgICAgIHBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ1JfRk9SQ0VfTURJX01ESVg7CiAKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwgcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgIH0KIAogICAgIC8qIFdyaXRlIGJhY2sgdGhlIG1vZGlmaWVkIFBIWSBNSUkgY29udHJvbCByZWdpc3Rlci4gKi8KICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgUEhZX0NUUkwsIG1paV9jdHJsX3JlZyk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICB1ZGVsYXkoMSk7CkBAIC0yMjczLDUwICsyMzE1LDUwIEBACiAgICAgICogb25seSBpZiB0aGUgdXNlciBoYXMgc2V0IHdhaXRfYXV0b25lZ19jb21wbGV0ZSB0byAxLCB3aGljaCBpcwogICAgICAqIHRoZSBkZWZhdWx0LgogICAgICAqLwotICAgIGlmKGh3LT53YWl0X2F1dG9uZWdfY29tcGxldGUpIHsKKyAgICBpZiAoaHctPndhaXRfYXV0b25lZ19jb21wbGV0ZSkgewogICAgICAgICAvKiBXZSB3aWxsIHdhaXQgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUuICovCiAgICAgICAgIERFQlVHT1VUKCJXYWl0aW5nIGZvciBmb3JjZWQgc3BlZWQvZHVwbGV4IGxpbmsuXG4iKTsKICAgICAgICAgbWlpX3N0YXR1c19yZWcgPSAwOwogCiAgICAgICAgIC8qIFdlIHdpbGwgd2FpdCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBvciA0LjUgc2Vjb25kcyB0byBleHBpcmUuICovCi0gICAgICAgIGZvcihpID0gUEhZX0ZPUkNFX1RJTUU7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgZm9yIChpID0gUEhZX0ZPUkNFX1RJTUU7IGkgPiAwOyBpLS0pIHsKICAgICAgICAgICAgIC8qIFJlYWQgdGhlIE1JSSBTdGF0dXMgUmVnaXN0ZXIgYW5kIHdhaXQgZm9yIEF1dG8tTmVnIENvbXBsZXRlIGJpdAogICAgICAgICAgICAgICogdG8gYmUgc2V0LgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmbWlpX3N0YXR1c19yZWcpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmbWlpX3N0YXR1c19yZWcpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgICAgICAgICBpZihtaWlfc3RhdHVzX3JlZyAmIE1JSV9TUl9MSU5LX1NUQVRVUykgYnJlYWs7Ci0gICAgICAgICAgICBtc2VjX2RlbGF5KDEwMCk7CisgICAgICAgICAgICBpZiAobWlpX3N0YXR1c19yZWcgJiBNSUlfU1JfTElOS19TVEFUVVMpIGJyZWFrOworICAgICAgICAgICAgbXNsZWVwKDEwMCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYoKGkgPT0gMCkgJiYKKyAgICAgICAgaWYgKChpID09IDApICYmCiAgICAgICAgICAgICgoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9tODgpIHx8CiAgICAgICAgICAgICAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9nZzgyNTYzKSkpIHsKICAgICAgICAgICAgIC8qIFdlIGRpZG4ndCBnZXQgbGluay4gIFJlc2V0IHRoZSBEU1AgYW5kIHdhaXQgYWdhaW4gZm9yIGxpbmsuICovCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcGh5X3Jlc2V0X2RzcChodyk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKSB7CisgICAgICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBSZXNldHRpbmcgUEhZIERTUFxuIik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgLyogVGhpcyBsb29wIHdpbGwgZWFybHktb3V0IGlmIHRoZSBsaW5rIGNvbmRpdGlvbiBoYXMgYmVlbiBtZXQuICAqLwotICAgICAgICBmb3IoaSA9IFBIWV9GT1JDRV9USU1FOyBpID4gMDsgaS0tKSB7Ci0gICAgICAgICAgICBpZihtaWlfc3RhdHVzX3JlZyAmIE1JSV9TUl9MSU5LX1NUQVRVUykgYnJlYWs7Ci0gICAgICAgICAgICBtc2VjX2RlbGF5KDEwMCk7CisgICAgICAgIGZvciAoaSA9IFBIWV9GT1JDRV9USU1FOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICBpZiAobWlpX3N0YXR1c19yZWcgJiBNSUlfU1JfTElOS19TVEFUVVMpIGJyZWFrOworICAgICAgICAgICAgbXNsZWVwKDEwMCk7CiAgICAgICAgICAgICAvKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCB3YWl0IGZvciBBdXRvLU5lZyBDb21wbGV0ZSBiaXQKICAgICAgICAgICAgICAqIHRvIGJlIHNldC4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJm1paV9zdGF0dXNfcmVnKTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJm1paV9zdGF0dXNfcmVnKTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQogICAgIH0KQEAgLTIzMjcsMzIgKzIzNjksMzEgQEAKICAgICAgICAgICogZGVmYXVsdHMgYmFjayB0byBhIDIuNU1IeiBjbG9jayB3aGVuIHRoZSBQSFkgaXMgcmVzZXQuCiAgICAgICAgICAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBwaHlfZGF0YSB8PSBNODhFMTAwMF9FUFNDUl9UWF9DTEtfMjU7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwgcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgIC8qIEluIGFkZGl0aW9uLCBiZWNhdXNlIG9mIHRoZSBzL3cgcmVzZXQgYWJvdmUsIHdlIG5lZWQgdG8gZW5hYmxlIENSUyBvbgogICAgICAgICAgKiBUWC4gIFRoaXMgbXVzdCBiZSBzZXQgZm9yIGJvdGggZnVsbCBhbmQgaGFsZiBkdXBsZXggb3BlcmF0aW9uLgogICAgICAgICAgKi8KICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBwaHlfZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FTU0VSVF9DUlNfT05fVFg7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLCBwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICAgICAgaWYoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NCB8fCBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDMpICYmCi0gICAgICAgICAgICghaHctPmF1dG9uZWcpICYmCi0gICAgICAgICAgIChody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9PSBlMTAwMF8xMF9mdWxsIHx8Ci0gICAgICAgICAgICBody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9PSBlMTAwMF8xMF9oYWxmKSkgeworICAgICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NCB8fCBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDMpICYmCisgICAgICAgICAgICAoIWh3LT5hdXRvbmVnKSAmJiAoaHctPmZvcmNlZF9zcGVlZF9kdXBsZXggPT0gZTEwMDBfMTBfZnVsbCB8fAorICAgICAgICAgICAgIGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwX2hhbGYpKSB7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcG9sYXJpdHlfcmV2ZXJzYWxfd29ya2Fyb3VuZChodyk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykgewpAQCAtMjQ0MywxMCArMjQ4NCwxMCBAQAogICAgICAqIHJlZ2lzdGVycyBkZXBlbmRpbmcgb24gbmVnb3RpYXRlZCB2YWx1ZXMuCiAgICAgICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmcGh5X2RhdGEpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgaWYocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX0RQTFgpCisgICAgaWYgKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9EUExYKQogICAgICAgICBjdHJsIHw9IEUxMDAwX0NUUkxfRkQ7CiAgICAgZWxzZQogICAgICAgICBjdHJsICY9IH5FMTAwMF9DVFJMX0ZEOwpAQCAtMjQ1Niw5ICsyNDk3LDkgQEAKICAgICAvKiBTZXQgdXAgc3BlZWQgaW4gdGhlIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGRlcGVuZGluZyBvbgogICAgICAqIG5lZ290aWF0ZWQgdmFsdWVzLgogICAgICAqLwotICAgIGlmKChwaHlfZGF0YSAmIE04OEUxMDAwX1BTU1JfU1BFRUQpID09IE04OEUxMDAwX1BTU1JfMTAwME1CUykKKyAgICBpZiAoKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9TUEVFRCkgPT0gTTg4RTEwMDBfUFNTUl8xMDAwTUJTKQogICAgICAgICBjdHJsIHw9IEUxMDAwX0NUUkxfU1BEXzEwMDA7Ci0gICAgZWxzZSBpZigocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX1NQRUVEKSA9PSBNODhFMTAwMF9QU1NSXzEwME1CUykKKyAgICBlbHNlIGlmICgocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX1NQRUVEKSA9PSBNODhFMTAwMF9QU1NSXzEwME1CUykKICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX1NQRF8xMDA7CiAKICAgICAvKiBXcml0ZSB0aGUgY29uZmlndXJlZCB2YWx1ZXMgYmFjayB0byB0aGUgRGV2aWNlIENvbnRyb2wgUmVnLiAqLwpAQCAtMjUyNiw3ICsyNTY3LDcgQEAKICAgICB9CiAKICAgICAvKiBEaXNhYmxlIFRYIEZsb3cgQ29udHJvbCBmb3IgODI1NDIgKHJldiAyLjApICovCi0gICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkKKyAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQyX3JldjJfMCkKICAgICAgICAgY3RybCAmPSAofkUxMDAwX0NUUkxfVEZDRSk7CiAKICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOwpAQCAtMjU2MCwxMSArMjYwMSwxMiBAQAogICAgICAqIHNvIHdlIGhhZCB0byBmb3JjZSBsaW5rLiAgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGZvcmNlIHRoZQogICAgICAqIGNvbmZpZ3VyYXRpb24gb2YgdGhlIE1BQyB0byBtYXRjaCB0aGUgImZjIiBwYXJhbWV0ZXIuCiAgICAgICovCi0gICAgaWYoKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJiAoaHctPmF1dG9uZWdfZmFpbGVkKSkgfHwKLSAgICAgICAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJiAoaHctPmF1dG9uZWdfZmFpbGVkKSkgfHwKLSAgICAgICAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJiAoIWh3LT5hdXRvbmVnKSkpIHsKKyAgICBpZiAoKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJiAoaHctPmF1dG9uZWdfZmFpbGVkKSkgfHwKKyAgICAgICAgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKKyAgICAgICAgIChody0+YXV0b25lZ19mYWlsZWQpKSB8fAorICAgICAgICAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJiAoIWh3LT5hdXRvbmVnKSkpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2ZvcmNlX21hY19mYyhodyk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBmb3JjaW5nIGZsb3cgY29udHJvbCBzZXR0aW5nc1xuIik7CiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQpAQCAtMjU3NSwxOSArMjYxNywxOSBAQAogICAgICAqIGhhcyBjb21wbGV0ZWQsIGFuZCBpZiBzbywgaG93IHRoZSBQSFkgYW5kIGxpbmsgcGFydG5lciBoYXMKICAgICAgKiBmbG93IGNvbnRyb2wgY29uZmlndXJlZC4KICAgICAgKi8KLSAgICBpZigoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpICYmIGh3LT5hdXRvbmVnKSB7CisgICAgaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgJiYgaHctPmF1dG9uZWcpIHsKICAgICAgICAgLyogUmVhZCB0aGUgTUlJIFN0YXR1cyBSZWdpc3RlciBhbmQgY2hlY2sgdG8gc2VlIGlmIEF1dG9OZWcKICAgICAgICAgICogaGFzIGNvbXBsZXRlZC4gIFdlIHJlYWQgdGhpcyB0d2ljZSBiZWNhdXNlIHRoaXMgcmVnIGhhcwogICAgICAgICAgKiBzb21lICJzdGlja3kiIChsYXRjaGVkKSBiaXRzLgogICAgICAgICAgKi8KICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJm1paV9zdGF0dXNfcmVnKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJm1paV9zdGF0dXNfcmVnKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgICAgICBpZihtaWlfc3RhdHVzX3JlZyAmIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFKSB7CisgICAgICAgIGlmIChtaWlfc3RhdHVzX3JlZyAmIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFKSB7CiAgICAgICAgICAgICAvKiBUaGUgQXV0b05lZyBwcm9jZXNzIGhhcyBjb21wbGV0ZWQsIHNvIHdlIG5vdyBuZWVkIHRvCiAgICAgICAgICAgICAgKiByZWFkIGJvdGggdGhlIEF1dG8gTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudCBSZWdpc3RlcgogICAgICAgICAgICAgICogKEFkZHJlc3MgNCkgYW5kIHRoZSBBdXRvX05lZ290aWF0aW9uIEJhc2UgUGFnZSBBYmlsaXR5CkBAIC0yNTk2LDExICsyNjM4LDExIEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9BVVRPTkVHX0FEViwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1paV9ud2F5X2Fkdl9yZWcpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0xQX0FCSUxJVFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtaWlfbndheV9scF9hYmlsaXR5X3JlZyk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgICAgIC8qIFR3byBiaXRzIGluIHRoZSBBdXRvIE5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIKQEAgLTI2MzcsMTUgKzI2NzksMTUgQEAKICAgICAgICAgICAgICAqICAgMSAgIHwgICBEQyAgICB8ICAgMSAgIHwgICBEQyAgICB8IGUxMDAwX2ZjX2Z1bGwKICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmKChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9QQVVTRSkgJiYKLSAgICAgICAgICAgICAgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9QQVVTRSkpIHsKKyAgICAgICAgICAgIGlmICgobWlpX253YXlfYWR2X3JlZyAmIE5XQVlfQVJfUEFVU0UpICYmCisgICAgICAgICAgICAgICAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSkgewogICAgICAgICAgICAgICAgIC8qIE5vdyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSB1c2VyIHNlbGVjdGVkIFJYIE9OTFkKICAgICAgICAgICAgICAgICAgKiBvZiBwYXVzZSBmcmFtZXMuICBJbiB0aGlzIGNhc2UsIHdlIGhhZCB0byBhZHZlcnRpc2UKICAgICAgICAgICAgICAgICAgKiBGVUxMIGZsb3cgY29udHJvbCBiZWNhdXNlIHdlIGNvdWxkIG5vdCBhZHZlcnRpc2UgUlgKICAgICAgICAgICAgICAgICAgKiBPTkxZLiBIZW5jZSwgd2UgbXVzdCBub3cgY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8KICAgICAgICAgICAgICAgICAgKiB0dXJuIE9GRiAgdGhlIFRSQU5TTUlTU0lPTiBvZiBQQVVTRSBmcmFtZXMuCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX2Z1bGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX2Z1bGwpIHsKICAgICAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfZnVsbDsKICAgICAgICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IEZVTEwuXG4iKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjY2MSwxMCArMjcwMywxMCBAQAogICAgICAgICAgICAgICogICAwICAgfCAgICAxICAgIHwgICAxICAgfCAgICAxICAgIHwgZTEwMDBfZmNfdHhfcGF1c2UKICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGVsc2UgaWYoIShtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9QQVVTRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX0FTTV9ESVIpICYmCi0gICAgICAgICAgICAgICAgICAgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9QQVVTRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX0FTTV9ESVIpKSB7CisgICAgICAgICAgICBlbHNlIGlmICghKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX1BBVVNFKSAmJgorICAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX0FTTV9ESVIpICYmCisgICAgICAgICAgICAgICAgICAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCisgICAgICAgICAgICAgICAgICAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfQVNNX0RJUikpIHsKICAgICAgICAgICAgICAgICBody0+ZmMgPSBlMTAwMF9mY190eF9wYXVzZTsKICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gVFggUEFVU0UgZnJhbWVzIG9ubHkuXG4iKTsKICAgICAgICAgICAgIH0KQEAgLTI2NzYsMTAgKzI3MTgsMTAgQEAKICAgICAgICAgICAgICAqICAgMSAgIHwgICAgMSAgICB8ICAgMCAgIHwgICAgMSAgICB8IGUxMDAwX2ZjX3J4X3BhdXNlCiAgICAgICAgICAgICAgKgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBlbHNlIGlmKChtaWlfbndheV9hZHZfcmVnICYgTldBWV9BUl9QQVVTRSkgJiYKLSAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX0FTTV9ESVIpICYmCi0gICAgICAgICAgICAgICAgICAgICEobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQQVJfUEFVU0UpICYmCi0gICAgICAgICAgICAgICAgICAgIChtaWlfbndheV9scF9hYmlsaXR5X3JlZyAmIE5XQVlfTFBBUl9BU01fRElSKSkgeworICAgICAgICAgICAgZWxzZSBpZiAoKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX1BBVVNFKSAmJgorICAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX0FTTV9ESVIpICYmCisgICAgICAgICAgICAgICAgICAgICAhKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX1BBVVNFKSAmJgorICAgICAgICAgICAgICAgICAgICAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldBWV9MUEFSX0FTTV9ESVIpKSB7CiAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfcnhfcGF1c2U7CiAgICAgICAgICAgICAgICAgREVCVUdPVVQoIkZsb3cgQ29udHJvbCA9IFJYIFBBVVNFIGZyYW1lcyBvbmx5LlxuIik7CiAgICAgICAgICAgICB9CkBAIC0yNzAzLDkgKzI3NDUsOSBAQAogICAgICAgICAgICAgICogYmUgYXNrZWQgdG8gZGVsYXkgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMgdGhhbiBhc2tpbmcKICAgICAgICAgICAgICAqIG91ciBsaW5rIHBhcnRuZXIgdG8gcGF1c2UgdHJhbnNtaXNzaW9uIG9mIGZyYW1lcy4KICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZWxzZSBpZigoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX25vbmUgfHwKLSAgICAgICAgICAgICAgICAgICAgIGh3LT5vcmlnaW5hbF9mYyA9PSBlMTAwMF9mY190eF9wYXVzZSkgfHwKLSAgICAgICAgICAgICAgICAgICAgaHctPmZjX3N0cmljdF9pZWVlKSB7CisgICAgICAgICAgICBlbHNlIGlmICgoaHctPm9yaWdpbmFsX2ZjID09IGUxMDAwX2ZjX25vbmUgfHwKKyAgICAgICAgICAgICAgICAgICAgICBody0+b3JpZ2luYWxfZmMgPT0gZTEwMDBfZmNfdHhfcGF1c2UpIHx8CisgICAgICAgICAgICAgICAgICAgICAgaHctPmZjX3N0cmljdF9pZWVlKSB7CiAgICAgICAgICAgICAgICAgaHctPmZjID0gZTEwMDBfZmNfbm9uZTsKICAgICAgICAgICAgICAgICBERUJVR09VVCgiRmxvdyBDb250cm9sID0gTk9ORS5cbiIpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI3MTgsMTkgKzI3NjAsMTkgQEAKICAgICAgICAgICAgICAqIGVuYWJsZWQgcGVyIElFRUUgODAyLjMgc3BlYy4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4KGh3LCAmc3BlZWQsICZkdXBsZXgpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkgeworICAgICAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgICAgICBERUJVR09VVCgiRXJyb3IgZ2V0dGluZyBsaW5rIHNwZWVkIGFuZCBkdXBsZXhcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZihkdXBsZXggPT0gSEFMRl9EVVBMRVgpCisgICAgICAgICAgICBpZiAoZHVwbGV4ID09IEhBTEZfRFVQTEVYKQogICAgICAgICAgICAgICAgIGh3LT5mYyA9IGUxMDAwX2ZjX25vbmU7CiAKICAgICAgICAgICAgIC8qIE5vdyB3ZSBjYWxsIGEgc3Vicm91dGluZSB0byBhY3R1YWxseSBmb3JjZSB0aGUgTUFDCiAgICAgICAgICAgICAgKiBjb250cm9sbGVyIHRvIHVzZSB0aGUgY29ycmVjdCBmbG93IGNvbnRyb2wgc2V0dGluZ3MuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9mb3JjZV9tYWNfZmMoaHcpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkgeworICAgICAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgICAgICBERUJVR09VVCgiRXJyb3IgZm9yY2luZyBmbG93IGNvbnRyb2wgc2V0dGluZ3NcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgfQpAQCAtMjc2OSwxMyArMjgxMSwxMyBAQAogICAgICAqIHNldCB3aGVuIHRoZSBvcHRpY3MgZGV0ZWN0IGEgc2lnbmFsLiBPbiBvbGRlciBhZGFwdGVycywgaXQgd2lsbCBiZQogICAgICAqIGNsZWFyZWQgd2hlbiB0aGVyZSBpcyBhIHNpZ25hbC4gIFRoaXMgYXBwbGllcyB0byBmaWJlciBtZWRpYSBvbmx5LgogICAgICAqLwotICAgIGlmKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB8fAotICAgICAgIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykpIHsKKyAgICBpZiAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHx8CisgICAgICAgIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykpIHsKICAgICAgICAgcnhjdyA9IEUxMDAwX1JFQURfUkVHKGh3LCBSWENXKTsKIAotICAgICAgICBpZihody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7CisgICAgICAgIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7CiAgICAgICAgICAgICBzaWduYWwgPSAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpID8gRTEwMDBfQ1RSTF9TV0RQSU4xIDogMDsKLSAgICAgICAgICAgIGlmKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkKKyAgICAgICAgICAgIGlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfTFUpCiAgICAgICAgICAgICAgICAgaHctPmdldF9saW5rX3N0YXR1cyA9IEZBTFNFOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc4NiwyMCArMjgyOCwyMCBAQAogICAgICAqIHJlY2VpdmUgYSBMaW5rIFN0YXR1cyBDaGFuZ2UgaW50ZXJydXB0IG9yIHdlIGhhdmUgUnggU2VxdWVuY2UKICAgICAgKiBFcnJvcnMuCiAgICAgICovCi0gICAgaWYoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSAmJiBody0+Z2V0X2xpbmtfc3RhdHVzKSB7CisgICAgaWYgKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgJiYgaHctPmdldF9saW5rX3N0YXR1cykgewogICAgICAgICAvKiBGaXJzdCB3ZSB3YW50IHRvIHNlZSBpZiB0aGUgTUlJIFN0YXR1cyBSZWdpc3RlciByZXBvcnRzCiAgICAgICAgICAqIGxpbmsuICBJZiBzbywgdGhlbiB3ZSB3YW50IHRvIGdldCB0aGUgY3VycmVudCBzcGVlZC9kdXBsZXgKICAgICAgICAgICogb2YgdGhlIFBIWS4KICAgICAgICAgICogUmVhZCB0aGUgcmVnaXN0ZXIgdHdpY2Ugc2luY2UgdGhlIGxpbmsgYml0IGlzIHN0aWNreS4KICAgICAgICAgICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICAgICAgaWYocGh5X2RhdGEgJiBNSUlfU1JfTElOS19TVEFUVVMpIHsKKyAgICAgICAgaWYgKHBoeV9kYXRhICYgTUlJX1NSX0xJTktfU1RBVFVTKSB7CiAgICAgICAgICAgICBody0+Z2V0X2xpbmtfc3RhdHVzID0gRkFMU0U7CiAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGVyZSB3YXMgRG93blNoaWZ0LCBtdXN0IGJlIGNoZWNrZWQgaW1tZWRpYXRlbHkgYWZ0ZXIKICAgICAgICAgICAgICAqIGxpbmstdXAgKi8KQEAgLTI4MTMsMTAgKzI4NTUsMTAgQEAKICAgICAgICAgICAgICAqIGhhcHBlbiBkdWUgdG8gdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIHdvcmthcm91bmQuCiAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgaWYoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NCB8fCBody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDMpICYmCi0gICAgICAgICAgICAgICAoIWh3LT5hdXRvbmVnKSAmJgotICAgICAgICAgICAgICAgKGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwX2Z1bGwgfHwKLSAgICAgICAgICAgICAgICBody0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9PSBlMTAwMF8xMF9oYWxmKSkgeworICAgICAgICAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDQgfHwgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQzKSAmJgorICAgICAgICAgICAgICAgICghaHctPmF1dG9uZWcpICYmCisgICAgICAgICAgICAgICAgKGh3LT5mb3JjZWRfc3BlZWRfZHVwbGV4ID09IGUxMDAwXzEwX2Z1bGwgfHwKKyAgICAgICAgICAgICAgICAgaHctPmZvcmNlZF9zcGVlZF9kdXBsZXggPT0gZTEwMDBfMTBfaGFsZikpIHsKICAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIElNQywgMHhmZmZmZmZmZik7CiAgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3BvbGFyaXR5X3JldmVyc2FsX3dvcmthcm91bmQoaHcpOwogICAgICAgICAgICAgICAgIGljciA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQ1IpOwpAQCAtMjgzMyw3ICsyODc1LDcgQEAKICAgICAgICAgLyogSWYgd2UgYXJlIGZvcmNpbmcgc3BlZWQvZHVwbGV4LCB0aGVuIHdlIHNpbXBseSByZXR1cm4gc2luY2UKICAgICAgICAgICogd2UgaGF2ZSBhbHJlYWR5IGRldGVybWluZWQgd2hldGhlciB3ZSBoYXZlIGxpbmsgb3Igbm90LgogICAgICAgICAgKi8KLSAgICAgICAgaWYoIWh3LT5hdXRvbmVnKSByZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CisgICAgICAgIGlmICghaHctPmF1dG9uZWcpIHJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKIAogICAgICAgICAvKiBvcHRpbWl6ZSB0aGUgZHNwIHNldHRpbmdzIGZvciB0aGUgaWdwIHBoeSAqLwogICAgICAgICBlMTAwMF9jb25maWdfZHNwX2FmdGVyX2xpbmtfY2hhbmdlKGh3LCBUUlVFKTsKQEAgLTI4NDYsMTEgKzI4ODgsMTEgQEAKICAgICAgICAgICogc3BlZWQvZHVwbGV4IG9uIHRoZSBNQUMgdG8gdGhlIGN1cnJlbnQgUEhZIHNwZWVkL2R1cGxleAogICAgICAgICAgKiBzZXR0aW5ncy4KICAgICAgICAgICovCi0gICAgICAgIGlmKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkKKyAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0NCkKICAgICAgICAgICAgIGUxMDAwX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2NvbmZpZ19tYWNfdG9fcGh5KGh3KTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgICAgICAgICAgREVCVUdPVVQoIkVycm9yIGNvbmZpZ3VyaW5nIE1BQyB0byBQSFkgc2V0dGluZ3NcbiIpOwogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgfQpAQCAtMjg2MSw3ICsyOTAzLDcgQEAKICAgICAgICAgICogaGF2ZSBoYWQgdG8gcmUtYXV0b25lZyB3aXRoIGEgZGlmZmVyZW50IGxpbmsgcGFydG5lci4KICAgICAgICAgICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9jb25maWdfZmNfYWZ0ZXJfbGlua191cChodyk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBjb25maWd1cmluZyBmbG93IGNvbnRyb2xcbiIpOwogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KQEAgLTI4NzMsNyArMjkxNSw3IEBACiAgICAgICAgICAqIGF0IGdpZ2FiaXQgc3BlZWQsIHRoZW4gVEJJIGNvbXBhdGliaWxpdHkgaXMgbm90IG5lZWRlZC4gIElmIHdlIGFyZQogICAgICAgICAgKiBhdCBnaWdhYml0IHNwZWVkLCB3ZSB0dXJuIG9uIFRCSSBjb21wYXRpYmlsaXR5LgogICAgICAgICAgKi8KLSAgICAgICAgaWYoaHctPnRiaV9jb21wYXRpYmlsaXR5X2VuKSB7CisgICAgICAgIGlmIChody0+dGJpX2NvbXBhdGliaWxpdHlfZW4pIHsKICAgICAgICAgICAgIHVpbnQxNl90IHNwZWVkLCBkdXBsZXg7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoaHcsICZzcGVlZCwgJmR1cGxleCk7CiAgICAgICAgICAgICBpZiAocmV0X3ZhbCkgewpAQCAtMjg4NCw3ICsyOTI2LDcgQEAKICAgICAgICAgICAgICAgICAvKiBJZiBsaW5rIHNwZWVkIGlzIG5vdCBzZXQgdG8gZ2lnYWJpdCBzcGVlZCwgd2UgZG8gbm90IG5lZWQKICAgICAgICAgICAgICAgICAgKiB0byBlbmFibGUgVEJJIGNvbXBhdGliaWxpdHkuCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYoaHctPnRiaV9jb21wYXRpYmlsaXR5X29uKSB7CisgICAgICAgICAgICAgICAgaWYgKGh3LT50YmlfY29tcGF0aWJpbGl0eV9vbikgewogICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSBwcmV2aW91c2x5IHdlcmUgaW4gdGhlIG1vZGUsIHR1cm4gaXQgb2ZmLiAqLwogICAgICAgICAgICAgICAgICAgICByY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIFJDVEwpOwogICAgICAgICAgICAgICAgICAgICByY3RsICY9IH5FMTAwMF9SQ1RMX1NCUDsKQEAgLTI4OTcsNyArMjkzOSw3IEBACiAgICAgICAgICAgICAgICAgICogcGFja2V0cy4gU29tZSBmcmFtZXMgaGF2ZSBhbiBhZGRpdGlvbmFsIGJ5dGUgb24gdGhlIGVuZCBhbmQKICAgICAgICAgICAgICAgICAgKiB3aWxsIGxvb2sgbGlrZSBDUkMgZXJyb3JzIHRvIHRvIHRoZSBoYXJkd2FyZS4KICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBpZighaHctPnRiaV9jb21wYXRpYmlsaXR5X29uKSB7CisgICAgICAgICAgICAgICAgaWYgKCFody0+dGJpX2NvbXBhdGliaWxpdHlfb24pIHsKICAgICAgICAgICAgICAgICAgICAgaHctPnRiaV9jb21wYXRpYmlsaXR5X29uID0gVFJVRTsKICAgICAgICAgICAgICAgICAgICAgcmN0bCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSQ1RMKTsKICAgICAgICAgICAgICAgICAgICAgcmN0bCB8PSBFMTAwMF9SQ1RMX1NCUDsKQEAgLTI5MTMsMTIgKzI5NTUsMTIgQEAKICAgICAgKiBhdXRvLW5lZ290aWF0aW9uIHRpbWUgdG8gY29tcGxldGUsIGluIGNhc2UgdGhlIGNhYmxlIHdhcyBqdXN0IHBsdWdnZWQKICAgICAgKiBpbi4gVGhlIGF1dG9uZWdfZmFpbGVkIGZsYWcgZG9lcyB0aGlzLgogICAgICAqLwotICAgIGVsc2UgaWYoKCgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgJiYKKyAgICBlbHNlIGlmICgoKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSAmJgogICAgICAgICAgICAgICAoKGN0cmwgJiBFMTAwMF9DVFJMX1NXRFBJTjEpID09IHNpZ25hbCkpIHx8Ci0gICAgICAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkgJiYKLSAgICAgICAgICAgICghKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19MVSkpICYmCi0gICAgICAgICAgICAoIShyeGN3ICYgRTEwMDBfUlhDV19DKSkpIHsKLSAgICAgICAgaWYoaHctPmF1dG9uZWdfZmFpbGVkID09IDApIHsKKyAgICAgICAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkgJiYKKyAgICAgICAgICAgICAgKCEoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0xVKSkgJiYKKyAgICAgICAgICAgICAgKCEocnhjdyAmIEUxMDAwX1JYQ1dfQykpKSB7CisgICAgICAgIGlmIChody0+YXV0b25lZ19mYWlsZWQgPT0gMCkgewogICAgICAgICAgICAgaHctPmF1dG9uZWdfZmFpbGVkID0gMTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CkBAIC0yOTM0LDcgKzI5NzYsNyBAQAogCiAgICAgICAgIC8qIENvbmZpZ3VyZSBGbG93IENvbnRyb2wgYWZ0ZXIgZm9yY2luZyBsaW5rIHVwLiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoaHcpOwotICAgICAgICBpZihyZXRfdmFsKSB7CisgICAgICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgICAgICBERUJVR09VVCgiRXJyb3IgY29uZmlndXJpbmcgZmxvdyBjb250cm9sXG4iKTsKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9CkBAIC0yOTQ0LDkgKzI5ODYsOSBAQAogICAgICAqIERldmljZSBDb250cm9sIHJlZ2lzdGVyIGluIGFuIGF0dGVtcHQgdG8gYXV0by1uZWdvdGlhdGUgd2l0aCBvdXIgbGluawogICAgICAqIHBhcnRuZXIuCiAgICAgICovCi0gICAgZWxzZSBpZigoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHx8Ci0gICAgICAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkgJiYKLSAgICAgICAgICAgIChjdHJsICYgRTEwMDBfQ1RSTF9TTFUpICYmIChyeGN3ICYgRTEwMDBfUlhDV19DKSkgeworICAgIGVsc2UgaWYgKCgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKKyAgICAgICAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkgJiYKKyAgICAgICAgICAgICAgKGN0cmwgJiBFMTAwMF9DVFJMX1NMVSkgJiYgKHJ4Y3cgJiBFMTAwMF9SWENXX0MpKSB7CiAgICAgICAgIERFQlVHT1VUKCJSWGluZyAvQy8sIGVuYWJsZSBBdXRvTmVnIGFuZCBzdG9wIGZvcmNpbmcgbGluay5cbiIpOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIFRYQ1csIGh3LT50eGN3KTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMLCAoY3RybCAmIH5FMTAwMF9DVFJMX1NMVSkpOwpAQCAtMjk1NiwxMiArMjk5OCwxMiBAQAogICAgIC8qIElmIHdlIGZvcmNlIGxpbmsgZm9yIG5vbi1hdXRvLW5lZ290aWF0aW9uIHN3aXRjaCwgY2hlY2sgbGluayBzdGF0dXMKICAgICAgKiBiYXNlZCBvbiBNQUMgc3luY2hyb25pemF0aW9uIGZvciBpbnRlcm5hbCBzZXJkZXMgbWVkaWEgdHlwZS4KICAgICAgKi8KLSAgICBlbHNlIGlmKChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKLSAgICAgICAgICAgICEoRTEwMDBfVFhDV19BTkUgJiBFMTAwMF9SRUFEX1JFRyhodywgVFhDVykpKSB7CisgICAgZWxzZSBpZiAoKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSAmJgorICAgICAgICAgICAgICEoRTEwMDBfVFhDV19BTkUgJiBFMTAwMF9SRUFEX1JFRyhodywgVFhDVykpKSB7CiAgICAgICAgIC8qIFNZTkNIIGJpdCBhbmQgSVYgYml0IGFyZSBzdGlja3kuICovCiAgICAgICAgIHVkZWxheSgxMCk7Ci0gICAgICAgIGlmKEUxMDAwX1JYQ1dfU1lOQ0ggJiBFMTAwMF9SRUFEX1JFRyhodywgUlhDVykpIHsKLSAgICAgICAgICAgIGlmKCEocnhjdyAmIEUxMDAwX1JYQ1dfSVYpKSB7CisgICAgICAgIGlmIChFMTAwMF9SWENXX1NZTkNIICYgRTEwMDBfUkVBRF9SRUcoaHcsIFJYQ1cpKSB7CisgICAgICAgICAgICBpZiAoIShyeGN3ICYgRTEwMDBfUlhDV19JVikpIHsKICAgICAgICAgICAgICAgICBody0+c2VyZGVzX2xpbmtfZG93biA9IEZBTFNFOwogICAgICAgICAgICAgICAgIERFQlVHT1VUKCJTRVJERVM6IExpbmsgaXMgdXAuXG4iKTsKICAgICAgICAgICAgIH0KQEAgLTI5NzAsOCArMzAxMiw4IEBACiAgICAgICAgICAgICBERUJVR09VVCgiU0VSREVTOiBMaW5rIGlzIGRvd24uXG4iKTsKICAgICAgICAgfQogICAgIH0KLSAgICBpZigoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpICYmCi0gICAgICAgKEUxMDAwX1RYQ1dfQU5FICYgRTEwMDBfUkVBRF9SRUcoaHcsIFRYQ1cpKSkgeworICAgIGlmICgoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpICYmCisgICAgICAgIChFMTAwMF9UWENXX0FORSAmIEUxMDAwX1JFQURfUkVHKGh3LCBUWENXKSkpIHsKICAgICAgICAgaHctPnNlcmRlc19saW5rX2Rvd24gPSAhKEUxMDAwX1NUQVRVU19MVSAmIEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpKTsKICAgICB9CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CkBAIC0yOTk1LDEyICszMDM3LDEyIEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2dldF9zcGVlZF9hbmRfZHVwbGV4Iik7CiAKLSAgICBpZihody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpIHsKKyAgICBpZiAoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7CiAgICAgICAgIHN0YXR1cyA9IEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpOwotICAgICAgICBpZihzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwMCkgeworICAgICAgICBpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMDApIHsKICAgICAgICAgICAgICpzcGVlZCA9IFNQRUVEXzEwMDA7CiAgICAgICAgICAgICBERUJVR09VVCgiMTAwMCBNYnMsICIpOwotICAgICAgICB9IGVsc2UgaWYoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMCkgeworICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDApIHsKICAgICAgICAgICAgICpzcGVlZCA9IFNQRUVEXzEwMDsKICAgICAgICAgICAgIERFQlVHT1VUKCIxMDAgTWJzLCAiKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTMwMDgsNyArMzA1MCw3IEBACiAgICAgICAgICAgICBERUJVR09VVCgiMTAgTWJzLCAiKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19GRCkgeworICAgICAgICBpZiAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0ZEKSB7CiAgICAgICAgICAgICAqZHVwbGV4ID0gRlVMTF9EVVBMRVg7CiAgICAgICAgICAgICBERUJVR09VVCgiRnVsbCBEdXBsZXhcbiIpOwogICAgICAgICB9IGVsc2UgewpAQCAtMzAyNSwxOCArMzA2NywxOCBAQAogICAgICAqIGlmIGl0IGlzIG9wZXJhdGluZyBhdCBoYWxmIGR1cGxleC4gIEhlcmUgd2Ugc2V0IHRoZSBkdXBsZXggc2V0dGluZ3MgdG8KICAgICAgKiBtYXRjaCB0aGUgZHVwbGV4IGluIHRoZSBsaW5rIHBhcnRuZXIncyBjYXBhYmlsaXRpZXMuCiAgICAgICovCi0gICAgaWYoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgJiYgaHctPnNwZWVkX2Rvd25ncmFkZWQpIHsKKyAgICBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgJiYgaHctPnNwZWVkX2Rvd25ncmFkZWQpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX0FVVE9ORUdfRVhQLCAmcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgICAgIGlmKCEocGh5X2RhdGEgJiBOV0FZX0VSX0xQX05XQVlfQ0FQUykpCisgICAgICAgIGlmICghKHBoeV9kYXRhICYgTldBWV9FUl9MUF9OV0FZX0NBUFMpKQogICAgICAgICAgICAgKmR1cGxleCA9IEhBTEZfRFVQTEVYOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9MUF9BQklMSVRZLCAmcGh5X2RhdGEpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwotICAgICAgICAgICAgaWYoKCpzcGVlZCA9PSBTUEVFRF8xMDAgJiYgIShwaHlfZGF0YSAmIE5XQVlfTFBBUl8xMDBUWF9GRF9DQVBTKSkgfHwKKyAgICAgICAgICAgIGlmICgoKnNwZWVkID09IFNQRUVEXzEwMCAmJiAhKHBoeV9kYXRhICYgTldBWV9MUEFSXzEwMFRYX0ZEX0NBUFMpKSB8fAogICAgICAgICAgICAgICAgKCpzcGVlZCA9PSBTUEVFRF8xMCAmJiAhKHBoeV9kYXRhICYgTldBWV9MUEFSXzEwVF9GRF9DQVBTKSkpCiAgICAgICAgICAgICAgICAgKmR1cGxleCA9IEhBTEZfRFVQTEVYOwogICAgICAgICB9CkBAIC0zMDc3LDIwICszMTE5LDIwIEBACiAgICAgREVCVUdPVVQoIldhaXRpbmcgZm9yIEF1dG8tTmVnIHRvIGNvbXBsZXRlLlxuIik7CiAKICAgICAvKiBXZSB3aWxsIHdhaXQgZm9yIGF1dG9uZWcgdG8gY29tcGxldGUgb3IgNC41IHNlY29uZHMgdG8gZXhwaXJlLiAqLwotICAgIGZvcihpID0gUEhZX0FVVE9fTkVHX1RJTUU7IGkgPiAwOyBpLS0pIHsKKyAgICBmb3IgKGkgPSBQSFlfQVVUT19ORUdfVElNRTsgaSA+IDA7IGktLSkgewogICAgICAgICAvKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCB3YWl0IGZvciBBdXRvLU5lZwogICAgICAgICAgKiBDb21wbGV0ZSBiaXQgdG8gYmUgc2V0LgogICAgICAgICAgKi8KICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKLSAgICAgICAgaWYocGh5X2RhdGEgJiBNSUlfU1JfQVVUT05FR19DT01QTEVURSkgeworICAgICAgICBpZiAocGh5X2RhdGEgJiBNSUlfU1JfQVVUT05FR19DT01QTEVURSkgewogICAgICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAgICAgICAgIH0KLSAgICAgICAgbXNlY19kZWxheSgxMDApOworICAgICAgICBtc2xlZXAoMTAwKTsKICAgICB9CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC0zMTYwLDE0ICszMjAyLDE2IEBACiAgICAgLyogU2V0IE1ESU9fRElSIGFuZCBNRENfRElSIGRpcmVjdGlvbiBiaXRzIHRvIGJlIHVzZWQgYXMgb3V0cHV0IHBpbnMuICovCiAgICAgY3RybCB8PSAoRTEwMDBfQ1RSTF9NRElPX0RJUiB8IEUxMDAwX0NUUkxfTURDX0RJUik7CiAKLSAgICB3aGlsZShtYXNrKSB7CisgICAgd2hpbGUgKG1hc2spIHsKICAgICAgICAgLyogQSAiMSIgaXMgc2hpZnRlZCBvdXQgdG8gdGhlIFBIWSBieSBzZXR0aW5nIHRoZSBNRElPIGJpdCB0byAiMSIgYW5kCiAgICAgICAgICAqIHRoZW4gcmFpc2luZyBhbmQgbG93ZXJpbmcgdGhlIE1hbmFnZW1lbnQgRGF0YSBDbG9jay4gQSAiMCIgaXMKICAgICAgICAgICogc2hpZnRlZCBvdXQgdG8gdGhlIFBIWSBieSBzZXR0aW5nIHRoZSBNRElPIGJpdCB0byAiMCIgYW5kIHRoZW4KICAgICAgICAgICogcmFpc2luZyBhbmQgbG93ZXJpbmcgdGhlIGNsb2NrLgogICAgICAgICAgKi8KLSAgICAgICAgaWYoZGF0YSAmIG1hc2spIGN0cmwgfD0gRTEwMDBfQ1RSTF9NRElPOwotICAgICAgICBlbHNlIGN0cmwgJj0gfkUxMDAwX0NUUkxfTURJTzsKKyAgICAgICAgaWYgKGRhdGEgJiBtYXNrKQorICAgICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX01ESU87CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGN0cmwgJj0gfkUxMDAwX0NUUkxfTURJTzsKIAogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CkBAIC0zMjE4LDEyICszMjYyLDEzIEBACiAgICAgZTEwMDBfcmFpc2VfbWRpX2NsayhodywgJmN0cmwpOwogICAgIGUxMDAwX2xvd2VyX21kaV9jbGsoaHcsICZjdHJsKTsKIAotICAgIGZvcihkYXRhID0gMCwgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisgICAgZm9yIChkYXRhID0gMCwgaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAgICAgICAgIGRhdGEgPSBkYXRhIDw8IDE7CiAgICAgICAgIGUxMDAwX3JhaXNlX21kaV9jbGsoaHcsICZjdHJsKTsKICAgICAgICAgY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMKTsKICAgICAgICAgLyogQ2hlY2sgdG8gc2VlIGlmIHdlIHNoaWZ0ZWQgaW4gYSAiMSIuICovCi0gICAgICAgIGlmKGN0cmwgJiBFMTAwMF9DVFJMX01ESU8pIGRhdGEgfD0gMTsKKyAgICAgICAgaWYgKGN0cmwgJiBFMTAwMF9DVFJMX01ESU8pCisgICAgICAgICAgICBkYXRhIHw9IDE7CiAgICAgICAgIGUxMDAwX2xvd2VyX21kaV9jbGsoaHcsICZjdHJsKTsKICAgICB9CiAKQEAgLTMyMzMsNyArMzI3OCw3IEBACiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBtYXNrKQogewogICAgIHVpbnQzMl90IHN3Zndfc3luYyA9IDA7CkBAIC0zMjQ5LDcgKzMyOTQsNyBAQAogICAgIGlmICghaHctPnN3Zndfc3luY19wcmVzZW50KQogICAgICAgICByZXR1cm4gZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoaHcpOwogCi0gICAgd2hpbGUodGltZW91dCkgeworICAgIHdoaWxlICh0aW1lb3V0KSB7CiAgICAgICAgICAgICBpZiAoZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUoaHcpKQogICAgICAgICAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1NXRldfU1lOQzsKIApAQCAtMzI2MSw3ICszMzA2LDcgQEAKICAgICAgICAgICAgIC8qIGZpcm13YXJlIGN1cnJlbnRseSB1c2luZyByZXNvdXJjZSAoZndtYXNrKSAqLwogICAgICAgICAgICAgLyogb3Igb3RoZXIgc29mdHdhcmUgdGhyZWFkIGN1cnJlbnRseSB1c2luZyByZXNvdXJjZSAoc3dtYXNrKSAqLwogICAgICAgICAgICAgZTEwMDBfcHV0X2h3X2VlcHJvbV9zZW1hcGhvcmUoaHcpOwotICAgICAgICAgICAgbXNlY19kZWxheV9pcnEoNSk7CisgICAgICAgICAgICBtZGVsYXkoNSk7CiAgICAgICAgICAgICB0aW1lb3V0LS07CiAgICAgfQogCkBAIC0zMjc3LDcgKzMzMjIsNyBAQAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfc3dmd19zeW5jX3JlbGVhc2Uoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgbWFzaykKIHsKICAgICB1aW50MzJfdCBzd2Z3X3N5bmM7CkBAIC0zMzM4LDcgKzMzODMsNyBAQAogICAgICAgIChyZWdfYWRkciA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpKSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnX2V4KGh3LCBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KXJlZ19hZGRyKTsKLSAgICAgICAgaWYocmV0X3ZhbCkgeworICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2UoaHcsIHN3ZncpOwogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KQEAgLTMzODMsMTIgKzM0MjgsMTIgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfcmVhZF9waHlfcmVnX2V4Iik7CiAKLSAgICBpZihyZWdfYWRkciA+IE1BWF9QSFlfUkVHX0FERFJFU1MpIHsKKyAgICBpZiAocmVnX2FkZHIgPiBNQVhfUEhZX1JFR19BRERSRVNTKSB7CiAgICAgICAgIERFQlVHT1VUMSgiUEhZIEFkZHJlc3MgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLCByZWdfYWRkcik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1BBUkFNOwogICAgIH0KIAotICAgIGlmKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CiAgICAgICAgIC8qIFNldCB1cCBPcC1jb2RlLCBQaHkgQWRkcmVzcywgYW5kIHJlZ2lzdGVyIGFkZHJlc3MgaW4gdGhlIE1ESQogICAgICAgICAgKiBDb250cm9sIHJlZ2lzdGVyLiAgVGhlIE1BQyB3aWxsIHRha2UgY2FyZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZQogICAgICAgICAgKiBQSFkgdG8gcmV0cmlldmUgdGhlIGRlc2lyZWQgZGF0YS4KQEAgLTM0MDAsMTYgKzM0NDUsMTYgQEAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBNRElDLCBtZGljKTsKIAogICAgICAgICAvKiBQb2xsIHRoZSByZWFkeSBiaXQgdG8gc2VlIGlmIHRoZSBNREkgcmVhZCBjb21wbGV0ZWQgKi8KLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgNjQ7IGkrKykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgewogICAgICAgICAgICAgdWRlbGF5KDUwKTsKICAgICAgICAgICAgIG1kaWMgPSBFMTAwMF9SRUFEX1JFRyhodywgTURJQyk7Ci0gICAgICAgICAgICBpZihtZGljICYgRTEwMDBfTURJQ19SRUFEWSkgYnJlYWs7CisgICAgICAgICAgICBpZiAobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmKCEobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpKSB7CisgICAgICAgIGlmICghKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKSkgewogICAgICAgICAgICAgREVCVUdPVVQoIk1ESSBSZWFkIGRpZCBub3QgY29tcGxldGVcbiIpOwogICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogICAgICAgICB9Ci0gICAgICAgIGlmKG1kaWMgJiBFMTAwMF9NRElDX0VSUk9SKSB7CisgICAgICAgIGlmIChtZGljICYgRTEwMDBfTURJQ19FUlJPUikgewogICAgICAgICAgICAgREVCVUdPVVQoIk1ESSBFcnJvclxuIik7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9QSFk7CiAgICAgICAgIH0KQEAgLTM0NzgsNyArMzUyMyw3IEBACiAgICAgICAgKHJlZ19hZGRyID4gTUFYX1BIWV9NVUxUSV9QQUdFX1JFRykpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWdfZXgoaHcsIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpcmVnX2FkZHIpOwotICAgICAgICBpZihyZXRfdmFsKSB7CisgICAgICAgIGlmIChyZXRfdmFsKSB7CiAgICAgICAgICAgICBlMTAwMF9zd2Z3X3N5bmNfcmVsZWFzZShodywgc3dmdyk7CiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQpAQCAtMzUyMywxMiArMzU2OCwxMiBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF93cml0ZV9waHlfcmVnX2V4Iik7CiAKLSAgICBpZihyZWdfYWRkciA+IE1BWF9QSFlfUkVHX0FERFJFU1MpIHsKKyAgICBpZiAocmVnX2FkZHIgPiBNQVhfUEhZX1JFR19BRERSRVNTKSB7CiAgICAgICAgIERFQlVHT1VUMSgiUEhZIEFkZHJlc3MgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLCByZWdfYWRkcik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1BBUkFNOwogICAgIH0KIAotICAgIGlmKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CisgICAgaWYgKGh3LT5tYWNfdHlwZSA+IGUxMDAwXzgyNTQzKSB7CiAgICAgICAgIC8qIFNldCB1cCBPcC1jb2RlLCBQaHkgQWRkcmVzcywgcmVnaXN0ZXIgYWRkcmVzcywgYW5kIGRhdGEgaW50ZW5kZWQKICAgICAgICAgICogZm9yIHRoZSBQSFkgcmVnaXN0ZXIgaW4gdGhlIE1ESSBDb250cm9sIHJlZ2lzdGVyLiAgVGhlIE1BQyB3aWxsIHRha2UKICAgICAgICAgICogY2FyZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZSBQSFkgdG8gc2VuZCB0aGUgZGVzaXJlZCBkYXRhLgpAQCAtMzU0MSwxMiArMzU4NiwxMiBAQAogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIE1ESUMsIG1kaWMpOwogCiAgICAgICAgIC8qIFBvbGwgdGhlIHJlYWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkIGNvbXBsZXRlZCAqLwotICAgICAgICBmb3IoaSA9IDA7IGkgPCA2NDA7IGkrKykgeworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNjQxOyBpKyspIHsKICAgICAgICAgICAgIHVkZWxheSg1KTsKICAgICAgICAgICAgIG1kaWMgPSBFMTAwMF9SRUFEX1JFRyhodywgTURJQyk7Ci0gICAgICAgICAgICBpZihtZGljICYgRTEwMDBfTURJQ19SRUFEWSkgYnJlYWs7CisgICAgICAgICAgICBpZiAobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGlmKCEobWRpYyAmIEUxMDAwX01ESUNfUkVBRFkpKSB7CisgICAgICAgIGlmICghKG1kaWMgJiBFMTAwMF9NRElDX1JFQURZKSkgewogICAgICAgICAgICAgREVCVUdPVVQoIk1ESSBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKICAgICAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1BIWTsKICAgICAgICAgfQpAQCAtMzU3NSw3ICszNjIwLDcgQEAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KIAotaW50MzJfdAorc3RhdGljIGludDMyX3QKIGUxMDAwX3JlYWRfa21ybl9yZWcoc3RydWN0IGUxMDAwX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVnX2FkZHIsCiAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90ICpkYXRhKQpAQCAtMzYwOCw3ICszNjUzLDcgQEAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KIAotaW50MzJfdAorc3RhdGljIGludDMyX3QKIGUxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZWdfYWRkciwKICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGRhdGEpCkBAIC0zNjU4LDcgKzM3MDMsNyBAQAogCiAgICAgREVCVUdPVVQoIlJlc2V0dGluZyBQaHkuLi5cbiIpOwogCi0gICAgaWYoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpIHsKKyAgICBpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDMpIHsKICAgICAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pICYmCiAgICAgICAgICAgICAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSkgewogICAgICAgICAgICAgc3dmdyA9IEUxMDAwX1NXRldfUEhZMV9TTTsKQEAgLTM2ODAsNyArMzcyNSw3IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKIAogICAgICAgICBpZiAoaHctPm1hY190eXBlIDwgZTEwMDBfODI1NzEpCi0gICAgICAgICAgICBtc2VjX2RlbGF5KDEwKTsKKyAgICAgICAgICAgIG1zbGVlcCgxMCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHVkZWxheSgxMDApOwogCkBAIC0zNjg4LDcgKzM3MzMsNyBAQAogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CiAKICAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU3MSkKLSAgICAgICAgICAgIG1zZWNfZGVsYXlfaXJxKDEwKTsKKyAgICAgICAgICAgIG1kZWxheSgxMCk7CiAgICAgICAgIGUxMDAwX3N3Zndfc3luY19yZWxlYXNlKGh3LCBzd2Z3KTsKICAgICB9IGVsc2UgewogICAgICAgICAvKiBSZWFkIHRoZSBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCBSZWdpc3RlciwgYXNzZXJ0IHRoZSBQSFlfUkVTRVRfRElSCkBAIC0zNjk5LDE0ICszNzQ0LDE0IEBACiAgICAgICAgIGN0cmxfZXh0ICY9IH5FMTAwMF9DVFJMX0VYVF9TRFA0X0RBVEE7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgQ1RSTF9FWFQsIGN0cmxfZXh0KTsKICAgICAgICAgRTEwMDBfV1JJVEVfRkxVU0goaHcpOwotICAgICAgICBtc2VjX2RlbGF5KDEwKTsKKyAgICAgICAgbXNsZWVwKDEwKTsKICAgICAgICAgY3RybF9leHQgfD0gRTEwMDBfQ1RSTF9FWFRfU0RQNF9EQVRBOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkxfRVhULCBjdHJsX2V4dCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKICAgICB9CiAgICAgdWRlbGF5KDE1MCk7CiAKLSAgICBpZigoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxKSB8fCAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkgeworICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxKSB8fCAoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3KSkgewogICAgICAgICAvKiBDb25maWd1cmUgYWN0aXZpdHkgTEVEIGFmdGVyIFBIWSByZXNldCAqLwogICAgICAgICBsZWRfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBMRURDVEwpOwogICAgICAgICBsZWRfY3RybCAmPSBJR1BfQUNUSVZJVFlfTEVEX01BU0s7CkBAIC0zNzE2LDE0ICszNzYxLDEzIEBACiAKICAgICAvKiBXYWl0IGZvciBGVyB0byBmaW5pc2ggUEhZIGNvbmZpZ3VyYXRpb24uICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX2dldF9waHlfY2ZnX2RvbmUoaHcpOworICAgIGlmIChyZXRfdmFsICE9IEUxMDAwX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgIGUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfc2VtYXBob3JlKGh3KTsKIAotICAgICAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSAmJgotICAgICAgICAgICAgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwXzMpKSB7Ci0gICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfaW5pdF9sY2RfZnJvbV9udm0oaHcpOwotICAgICAgICAgICAgaWYgKHJldF92YWwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7Ci0gICAgICAgIH0KKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF9pY2g4bGFuKSAmJiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMykpCisgICAgICAgIHJldF92YWwgPSBlMTAwMF9pbml0X2xjZF9mcm9tX252bShodyk7CisKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KIApAQCAtMzc1NCwyNSArMzc5OCwyNSBAQAogICAgIGNhc2UgZTEwMDBfODI1NzI6CiAgICAgY2FzZSBlMTAwMF9pY2g4bGFuOgogICAgICAgICByZXRfdmFsID0gZTEwMDBfcGh5X2h3X3Jlc2V0KGh3KTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBwaHlfZGF0YSB8PSBNSUlfQ1JfUkVTRVQ7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBQSFlfQ1RSTCwgcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgIHVkZWxheSgxKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgfHwgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikKKyAgICBpZiAoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3AgfHwgaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3BfMikKICAgICAgICAgZTEwMDBfcGh5X2luaXRfc2NyaXB0KGh3KTsKIAogICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwpAQCAtMzgzOSw3ICszODgzLDcgQEAKICoKICogaHcgLSBzdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF9rdW1lcmFuX2xvY2tfbG9zc193b3JrYXJvdW5kKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgaW50MzJfdCByZXRfdmFsOwpAQCAtMzg1MCw4ICszODk0LDggQEAKICAgICBpZiAoaHctPmttcm5fbG9ja19sb3NzX3dvcmthcm91bmRfZGlzYWJsZWQpCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogCi0gICAgLyogTWFrZSBzdXJlIGxpbmsgaXMgdXAgYmVmb3JlIHByb2NlZWRpbmcuIElmIG5vdCBqdXN0IHJldHVybi4KLSAgICAgKiBBdHRlbXB0aW5nIHRoaXMgd2hpbGUgbGluayBpcyBuZWdvdGlhdGluZyBmb3VscyB1cCBsaW5rCisgICAgLyogTWFrZSBzdXJlIGxpbmsgaXMgdXAgYmVmb3JlIHByb2NlZWRpbmcuICBJZiBub3QganVzdCByZXR1cm4uCisgICAgICogQXR0ZW1wdGluZyB0aGlzIHdoaWxlIGxpbmsgaXMgbmVnb3RpYXRpbmcgZm91bGVkIHVwIGxpbmsKICAgICAgKiBzdGFiaWxpdHkgKi8KICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X2RhdGEpOwogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfZGF0YSk7CkBAIC0zODczLDcgKzM5MTcsNyBAQAogCiAgICAgICAgICAgICAvKiBJc3N1ZSBQSFkgcmVzZXQgKi8KICAgICAgICAgICAgIGUxMDAwX3BoeV9od19yZXNldChodyk7Ci0gICAgICAgICAgICBtc2VjX2RlbGF5X2lycSg1KTsKKyAgICAgICAgICAgIG1kZWxheSg1KTsKICAgICAgICAgfQogICAgICAgICAvKiBEaXNhYmxlIEdpZ0UgbGluayBuZWdvdGlhdGlvbiAqLwogICAgICAgICByZWcgPSBFMTAwMF9SRUFEX1JFRyhodywgUEhZX0NUUkwpOwpAQCAtMzkyOCwzNCArMzk3MiwzNCBAQAogICAgIGh3LT5waHlfaWQgPSAodWludDMyX3QpIChwaHlfaWRfaGlnaCA8PCAxNik7CiAgICAgdWRlbGF5KDIwKTsKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfSUQyLCAmcGh5X2lkX2xvdyk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICBody0+cGh5X2lkIHw9ICh1aW50MzJfdCkgKHBoeV9pZF9sb3cgJiBQSFlfUkVWSVNJT05fTUFTSyk7CiAgICAgaHctPnBoeV9yZXZpc2lvbiA9ICh1aW50MzJfdCkgcGh5X2lkX2xvdyAmIH5QSFlfUkVWSVNJT05fTUFTSzsKIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfODI1NDM6Ci0gICAgICAgIGlmKGh3LT5waHlfaWQgPT0gTTg4RTEwMDBfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTEwMDBfRV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU0NDoKLSAgICAgICAgaWYoaHctPnBoeV9pZCA9PSBNODhFMTAwMF9JX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOworICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBNODhFMTAwMF9JX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgyNTQwOgogICAgIGNhc2UgZTEwMDBfODI1NDU6CiAgICAgY2FzZSBlMTAwMF84MjU0NV9yZXZfMzoKICAgICBjYXNlIGUxMDAwXzgyNTQ2OgogICAgIGNhc2UgZTEwMDBfODI1NDZfcmV2XzM6Ci0gICAgICAgIGlmKGh3LT5waHlfaWQgPT0gTTg4RTEwMTFfSV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKKyAgICAgICAgaWYgKGh3LT5waHlfaWQgPT0gTTg4RTEwMTFfSV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU0MToKICAgICBjYXNlIGUxMDAwXzgyNTQxX3Jldl8yOgogICAgIGNhc2UgZTEwMDBfODI1NDc6CiAgICAgY2FzZSBlMTAwMF84MjU0N19yZXZfMjoKLSAgICAgICAgaWYoaHctPnBoeV9pZCA9PSBJR1AwMUUxMDAwX0lfUEhZX0lEKSBtYXRjaCA9IFRSVUU7CisgICAgICAgIGlmIChody0+cGh5X2lkID09IElHUDAxRTEwMDBfSV9QSFlfSUQpIG1hdGNoID0gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU3MzoKLSAgICAgICAgaWYoaHctPnBoeV9pZCA9PSBNODhFMTExMV9JX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOworICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBNODhFMTExMV9JX1BIWV9JRCkgbWF0Y2ggPSBUUlVFOwogICAgICAgICBicmVhazsKICAgICBjYXNlIGUxMDAwXzgwMDAzZXMybGFuOgogICAgICAgICBpZiAoaHctPnBoeV9pZCA9PSBHRzgyNTYzX0VfUEhZX0lEKSBtYXRjaCA9IFRSVUU7CkBAIC0zOTk0LDE0ICs0MDM4LDE0IEBACiAgICAgZG8gewogICAgICAgICBpZiAoaHctPnBoeV90eXBlICE9IGUxMDAwX3BoeV9nZzgyNTYzKSB7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMjksIDB4MDAxZCk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKSBicmVhazsKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKSBicmVhazsKICAgICAgICAgfQogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMzAsIDB4MDBjMSk7Ci0gICAgICAgIGlmKHJldF92YWwpIGJyZWFrOworICAgICAgICBpZiAocmV0X3ZhbCkgYnJlYWs7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCAzMCwgMHgwMDAwKTsKLSAgICAgICAgaWYocmV0X3ZhbCkgYnJlYWs7CisgICAgICAgIGlmIChyZXRfdmFsKSBicmVhazsKICAgICAgICAgcmV0X3ZhbCA9IEUxMDAwX1NVQ0NFU1M7Ci0gICAgfSB3aGlsZSgwKTsKKyAgICB9IHdoaWxlICgwKTsKIAogICAgIHJldHVybiByZXRfdmFsOwogfQpAQCAtNDAzMywyMyArNDA3NywyMyBAQAogCiAgICAgLyogQ2hlY2sgcG9sYXJpdHkgc3RhdHVzICovCiAgICAgcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX3BvbGFyaXR5KGh3LCAmcG9sYXJpdHkpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgcGh5X2luZm8tPmNhYmxlX3BvbGFyaXR5ID0gcG9sYXJpdHk7CiAKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywgJnBoeV9kYXRhKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIHBoeV9pbmZvLT5tZGl4X21vZGUgPSAocGh5X2RhdGEgJiBJR1AwMUUxMDAwX1BTU1JfTURJWCkgPj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9QU1NSX01ESVhfU0hJRlQ7CiAKLSAgICBpZigocGh5X2RhdGEgJiBJR1AwMUUxMDAwX1BTU1JfU1BFRURfTUFTSykgPT0KKyAgICBpZiAoKHBoeV9kYXRhICYgSUdQMDFFMTAwMF9QU1NSX1NQRUVEX01BU0spID09CiAgICAgICAgSUdQMDFFMTAwMF9QU1NSX1NQRUVEXzEwMDBNQlBTKSB7CiAgICAgICAgIC8qIExvY2FsL1JlbW90ZSBSZWNlaXZlciBJbmZvcm1hdGlvbiBhcmUgb25seSB2YWxpZCBhdCAxMDAwIE1icHMgKi8KICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBwaHlfaW5mby0+bG9jYWxfcnggPSAocGh5X2RhdGEgJiBTUl8xMDAwVF9MT0NBTF9SWF9TVEFUVVMpID4+CkBAIC00MDU5LDE5ICs0MTAzLDE5IEBACiAKICAgICAgICAgLyogR2V0IGNhYmxlIGxlbmd0aCAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfZ2V0X2NhYmxlX2xlbmd0aChodywgJm1pbl9sZW5ndGgsICZtYXhfbGVuZ3RoKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAvKiBUcmFuc2xhdGUgdG8gb2xkIG1ldGhvZCAqLwogICAgICAgICBhdmVyYWdlID0gKG1heF9sZW5ndGggKyBtaW5fbGVuZ3RoKSAvIDI7CiAKLSAgICAgICAgaWYoYXZlcmFnZSA8PSBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzUwKQorICAgICAgICBpZiAoYXZlcmFnZSA8PSBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzUwKQogICAgICAgICAgICAgcGh5X2luZm8tPmNhYmxlX2xlbmd0aCA9IGUxMDAwX2NhYmxlX2xlbmd0aF81MDsKLSAgICAgICAgZWxzZSBpZihhdmVyYWdlIDw9IGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfODApCisgICAgICAgIGVsc2UgaWYgKGF2ZXJhZ2UgPD0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF84MCkKICAgICAgICAgICAgIHBoeV9pbmZvLT5jYWJsZV9sZW5ndGggPSBlMTAwMF9jYWJsZV9sZW5ndGhfNTBfODA7Ci0gICAgICAgIGVsc2UgaWYoYXZlcmFnZSA8PSBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzExMCkKKyAgICAgICAgZWxzZSBpZiAoYXZlcmFnZSA8PSBlMTAwMF9pZ3BfY2FibGVfbGVuZ3RoXzExMCkKICAgICAgICAgICAgIHBoeV9pbmZvLT5jYWJsZV9sZW5ndGggPSBlMTAwMF9jYWJsZV9sZW5ndGhfODBfMTEwOwotICAgICAgICBlbHNlIGlmKGF2ZXJhZ2UgPD0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xNDApCisgICAgICAgIGVsc2UgaWYgKGF2ZXJhZ2UgPD0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF8xNDApCiAgICAgICAgICAgICBwaHlfaW5mby0+Y2FibGVfbGVuZ3RoID0gZTEwMDBfY2FibGVfbGVuZ3RoXzExMF8xNDA7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBoeV9pbmZvLT5jYWJsZV9sZW5ndGggPSBlMTAwMF9jYWJsZV9sZW5ndGhfMTQwOwpAQCAtNDA4Niw3ICs0MTMwLDcgQEAKICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICogcGh5X2luZm8gLSBQSFkgaW5mb3JtYXRpb24gc3RydWN0dXJlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfcGh5X2lmZV9nZXRfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeV9pbmZvKQogewpAQCAtNDE0Nyw3ICs0MTkxLDcgQEAKICAgICBwaHlfaW5mby0+ZG93bnNoaWZ0ID0gKGUxMDAwX2Rvd25zaGlmdClody0+c3BlZWRfZG93bmdyYWRlZDsKIAogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwsICZwaHlfZGF0YSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICBwaHlfaW5mby0+ZXh0ZW5kZWRfMTBidF9kaXN0YW5jZSA9CkBAIC00MTU5LDEyICs0MjAzLDEyIEBACiAKICAgICAvKiBDaGVjayBwb2xhcml0eSBzdGF0dXMgKi8KICAgICByZXRfdmFsID0gZTEwMDBfY2hlY2tfcG9sYXJpdHkoaHcsICZwb2xhcml0eSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgcGh5X2luZm8tPmNhYmxlX3BvbGFyaXR5ID0gcG9sYXJpdHk7CiAKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsICZwaHlfZGF0YSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICBwaHlfaW5mby0+bWRpeF9tb2RlID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9NRElYKSA+PgpAQCAtNDE4Nyw3ICs0MjMxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgcGh5X2luZm8tPmxvY2FsX3J4ID0gKHBoeV9kYXRhICYgU1JfMTAwMFRfTE9DQUxfUlhfU1RBVFVTKSA+PgpAQCAtNDIyNCwyMCArNDI2OCwyMCBAQAogICAgIHBoeV9pbmZvLT5sb2NhbF9yeCA9IGUxMDAwXzEwMDB0X3J4X3N0YXR1c191bmRlZmluZWQ7CiAgICAgcGh5X2luZm8tPnJlbW90ZV9yeCA9IGUxMDAwXzEwMDB0X3J4X3N0YXR1c191bmRlZmluZWQ7CiAKLSAgICBpZihody0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgeworICAgIGlmIChody0+bWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewogICAgICAgICBERUJVR09VVCgiUEhZIGluZm8gaXMgb25seSB2YWxpZCBmb3IgY29wcGVyIG1lZGlhXG4iKTsKICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfQ09ORklHOwogICAgIH0KIAogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfZGF0YSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X2RhdGEpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgaWYoKHBoeV9kYXRhICYgTUlJX1NSX0xJTktfU1RBVFVTKSAhPSBNSUlfU1JfTElOS19TVEFUVVMpIHsKKyAgICBpZiAoKHBoeV9kYXRhICYgTUlJX1NSX0xJTktfU1RBVFVTKSAhPSBNSUlfU1JfTElOS19TVEFUVVMpIHsKICAgICAgICAgREVCVUdPVVQoIlBIWSBpbmZvIGlzIG9ubHkgdmFsaWQgaWYgbGluayBpcyB1cFxuIik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKICAgICB9CkBAIC00MjU3LDcgKzQzMDEsNyBAQAogewogICAgIERFQlVHRlVOQygiZTEwMDBfdmFsaWRhdGVfbWRpX3NldHRpbmdzIik7CiAKLSAgICBpZighaHctPmF1dG9uZWcgJiYgKGh3LT5tZGl4ID09IDAgfHwgaHctPm1kaXggPT0gMykpIHsKKyAgICBpZiAoIWh3LT5hdXRvbmVnICYmIChody0+bWRpeCA9PSAwIHx8IGh3LT5tZGl4ID09IDMpKSB7CiAgICAgICAgIERFQlVHT1VUKCJJbnZhbGlkIE1ESSBzZXR0aW5nIGRldGVjdGVkXG4iKTsKICAgICAgICAgaHctPm1kaXggPSAxOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9DT05GSUc7CkBAIC00MzA0LDcgKzQzNDgsNyBAQAogICAgICAgICBlZXByb20tPnR5cGUgPSBlMTAwMF9lZXByb21fbWljcm93aXJlOwogICAgICAgICBlZXByb20tPm9wY29kZV9iaXRzID0gMzsKICAgICAgICAgZWVwcm9tLT5kZWxheV91c2VjID0gNTA7Ci0gICAgICAgIGlmKGVlY2QgJiBFMTAwMF9FRUNEX1NJWkUpIHsKKyAgICAgICAgaWYgKGVlY2QgJiBFMTAwMF9FRUNEX1NJWkUpIHsKICAgICAgICAgICAgIGVlcHJvbS0+d29yZF9zaXplID0gMjU2OwogICAgICAgICAgICAgZWVwcm9tLT5hZGRyZXNzX2JpdHMgPSA4OwogICAgICAgICB9IGVsc2UgewpAQCAtNDM3Miw3ICs0NDE2LDcgQEAKICAgICAgICAgfQogICAgICAgICBlZXByb20tPnVzZV9lZXJkID0gVFJVRTsKICAgICAgICAgZWVwcm9tLT51c2VfZWV3ciA9IFRSVUU7Ci0gICAgICAgIGlmKGUxMDAwX2lzX29uYm9hcmRfbnZtX2VlcHJvbShodykgPT0gRkFMU0UpIHsKKyAgICAgICAgaWYgKGUxMDAwX2lzX29uYm9hcmRfbnZtX2VlcHJvbShodykgPT0gRkFMU0UpIHsKICAgICAgICAgICAgIGVlcHJvbS0+dHlwZSA9IGUxMDAwX2VlcHJvbV9mbGFzaDsKICAgICAgICAgICAgIGVlcHJvbS0+d29yZF9zaXplID0gMjA0ODsKIApAQCAtNDQzMywxNyArNDQ3NywxNyBAQAogICAgICAgICAvKiBlZXByb21fc2l6ZSB3aWxsIGJlIGFuIGVudW0gWzAuLjhdIHRoYXQgbWFwcyB0byBlZXByb20gc2l6ZXMgMTI4QiB0bwogICAgICAgICAgKiAzMktCIChpbmNyZW1lbnRlZCBieSBwb3dlcnMgb2YgMikuCiAgICAgICAgICAqLwotICAgICAgICBpZihody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIpIHsKKyAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMikgewogICAgICAgICAgICAgLyogU2V0IHRvIGRlZmF1bHQgdmFsdWUgZm9yIGluaXRpYWwgZWVwcm9tIHJlYWQuICovCiAgICAgICAgICAgICBlZXByb20tPndvcmRfc2l6ZSA9IDY0OwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfZWVwcm9tKGh3LCBFRVBST01fQ0ZHLCAxLCAmZWVwcm9tX3NpemUpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgZWVwcm9tX3NpemUgPSAoZWVwcm9tX3NpemUgJiBFRVBST01fU0laRV9NQVNLKSA+PiBFRVBST01fU0laRV9TSElGVDsKICAgICAgICAgICAgIC8qIDI1NkIgZWVwcm9tIHNpemUgd2FzIG5vdCBzdXBwb3J0ZWQgaW4gZWFybGllciBoYXJkd2FyZSwgc28gd2UKICAgICAgICAgICAgICAqIGJ1bXAgZWVwcm9tX3NpemUgdXAgb25lIHRvIGVuc3VyZSB0aGF0ICIxIiAod2hpY2ggbWFwcyB0byAyNTZCKQogICAgICAgICAgICAgICogaXMgbmV2ZXIgdGhlIHJlc3VsdCB1c2VkIGluIHRoZSBzaGlmdGluZyBsb2dpYyBiZWxvdy4gKi8KLSAgICAgICAgICAgIGlmKGVlcHJvbV9zaXplKQorICAgICAgICAgICAgaWYgKGVlcHJvbV9zaXplKQogICAgICAgICAgICAgICAgIGVlcHJvbV9zaXplKys7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBlZXByb21fc2l6ZSA9ICh1aW50MTZfdCkoKGVlY2QgJiBFMTAwMF9FRUNEX1NJWkVfRVhfTUFTSykgPj4KQEAgLTQ1MjgsNyArNDU3Miw3IEBACiAgICAgICAgICAqLwogICAgICAgICBlZWNkICY9IH5FMTAwMF9FRUNEX0RJOwogCi0gICAgICAgIGlmKGRhdGEgJiBtYXNrKQorICAgICAgICBpZiAoZGF0YSAmIG1hc2spCiAgICAgICAgICAgICBlZWNkIHw9IEUxMDAwX0VFQ0RfREk7CiAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKQEAgLTQ1NDEsNyArNDU4NSw3IEBACiAKICAgICAgICAgbWFzayA9IG1hc2sgPj4gMTsKIAotICAgIH0gd2hpbGUobWFzayk7CisgICAgfSB3aGlsZSAobWFzayk7CiAKICAgICAvKiBXZSBsZWF2ZSB0aGUgIkRJIiBiaXQgc2V0IHRvICIwIiB3aGVuIHdlIGxlYXZlIHRoaXMgcm91dGluZS4gKi8KICAgICBlZWNkICY9IH5FMTAwMF9FRUNEX0RJOwpAQCAtNDU3MywxNCArNDYxNywxNCBAQAogICAgIGVlY2QgJj0gfihFMTAwMF9FRUNEX0RPIHwgRTEwMDBfRUVDRF9ESSk7CiAgICAgZGF0YSA9IDA7CiAKLSAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKICAgICAgICAgZGF0YSA9IGRhdGEgPDwgMTsKICAgICAgICAgZTEwMDBfcmFpc2VfZWVfY2xrKGh3LCAmZWVjZCk7CiAKICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKIAogICAgICAgICBlZWNkICY9IH4oRTEwMDBfRUVDRF9ESSk7Ci0gICAgICAgIGlmKGVlY2QgJiBFMTAwMF9FRUNEX0RPKQorICAgICAgICBpZiAoZWVjZCAmIEUxMDAwX0VFQ0RfRE8pCiAgICAgICAgICAgICBkYXRhIHw9IDE7CiAKICAgICAgICAgZTEwMDBfbG93ZXJfZWVfY2xrKGh3LCAmZWVjZCk7CkBAIC00NjExLDE3ICs0NjU1LDE3IEBACiAKICAgICBpZiAoaHctPm1hY190eXBlICE9IGUxMDAwXzgyNTczKSB7CiAgICAgICAgIC8qIFJlcXVlc3QgRUVQUk9NIEFjY2VzcyAqLwotICAgICAgICBpZihody0+bWFjX3R5cGUgPiBlMTAwMF84MjU0NCkgeworICAgICAgICBpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpIHsKICAgICAgICAgICAgIGVlY2QgfD0gRTEwMDBfRUVDRF9SRVE7CiAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwogICAgICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKLSAgICAgICAgICAgIHdoaWxlKCghKGVlY2QgJiBFMTAwMF9FRUNEX0dOVCkpICYmCisgICAgICAgICAgICB3aGlsZSAoKCEoZWVjZCAmIEUxMDAwX0VFQ0RfR05UKSkgJiYKICAgICAgICAgICAgICAgICAgIChpIDwgRTEwMDBfRUVQUk9NX0dSQU5UX0FUVEVNUFRTKSkgewogICAgICAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgICAgICB1ZGVsYXkoNSk7CiAgICAgICAgICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmKCEoZWVjZCAmIEUxMDAwX0VFQ0RfR05UKSkgeworICAgICAgICAgICAgaWYgKCEoZWVjZCAmIEUxMDAwX0VFQ0RfR05UKSkgewogICAgICAgICAgICAgICAgIGVlY2QgJj0gfkUxMDAwX0VFQ0RfUkVROwogICAgICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CiAgICAgICAgICAgICAgICAgREVCVUdPVVQoIkNvdWxkIG5vdCBhY3F1aXJlIEVFUFJPTSBncmFudFxuIik7CkBAIC00NjY0LDcgKzQ3MDgsNyBAQAogCiAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKIAotICAgIGlmKGVlcHJvbS0+dHlwZSA9PSBlMTAwMF9lZXByb21fbWljcm93aXJlKSB7CisgICAgaWYgKGVlcHJvbS0+dHlwZSA9PSBlMTAwMF9lZXByb21fbWljcm93aXJlKSB7CiAgICAgICAgIGVlY2QgJj0gfihFMTAwMF9FRUNEX0NTIHwgRTEwMDBfRUVDRF9TSyk7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKQEAgLTQ2ODcsNyArNDczMSw3IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKICAgICAgICAgdWRlbGF5KGVlcHJvbS0+ZGVsYXlfdXNlYyk7Ci0gICAgfSBlbHNlIGlmKGVlcHJvbS0+dHlwZSA9PSBlMTAwMF9lZXByb21fc3BpKSB7CisgICAgfSBlbHNlIGlmIChlZXByb20tPnR5cGUgPT0gZTEwMDBfZWVwcm9tX3NwaSkgewogICAgICAgICAvKiBUb2dnbGUgQ1MgdG8gZmx1c2ggY29tbWFuZHMgKi8KICAgICAgICAgZWVjZCB8PSBFMTAwMF9FRUNEX0NTOwogICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEVFQ0QsIGVlY2QpOwpAQCAtNDcyMSw3ICs0NzY1LDcgQEAKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBFRUNELCBlZWNkKTsKIAogICAgICAgICB1ZGVsYXkoaHctPmVlcHJvbS5kZWxheV91c2VjKTsKLSAgICB9IGVsc2UgaWYoaHctPmVlcHJvbS50eXBlID09IGUxMDAwX2VlcHJvbV9taWNyb3dpcmUpIHsKKyAgICB9IGVsc2UgaWYgKGh3LT5lZXByb20udHlwZSA9PSBlMTAwMF9lZXByb21fbWljcm93aXJlKSB7CiAgICAgICAgIC8qIGNsZWFudXAgZWVwcm9tICovCiAKICAgICAgICAgLyogQ1Mgb24gTWljcm93aXJlIGlzIGFjdGl2ZS1oaWdoICovCkBAIC00NzQzLDcgKzQ3ODcsNyBAQAogICAgIH0KIAogICAgIC8qIFN0b3AgcmVxdWVzdGluZyBFRVBST00gYWNjZXNzICovCi0gICAgaWYoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpIHsKKyAgICBpZiAoaHctPm1hY190eXBlID4gZTEwMDBfODI1NDQpIHsKICAgICAgICAgZWVjZCAmPSB+RTEwMDBfRUVDRF9SRVE7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVDRCwgZWVjZCk7CiAgICAgfQpAQCAtNDc4MSwxMiArNDgyNSwxMiBAQAogICAgICAgICByZXRyeV9jb3VudCArPSA1OwogCiAgICAgICAgIGUxMDAwX3N0YW5kYnlfZWVwcm9tKGh3KTsKLSAgICB9IHdoaWxlKHJldHJ5X2NvdW50IDwgRUVQUk9NX01BWF9SRVRSWV9TUEkpOworICAgIH0gd2hpbGUgKHJldHJ5X2NvdW50IDwgRUVQUk9NX01BWF9SRVRSWV9TUEkpOwogCiAgICAgLyogQVRNRUwgU1BJIHdyaXRlIHRpbWUgY291bGQgdmFyeSBmcm9tIDAtMjBtU2VjIG9uIDMuM1YgZGV2aWNlcyAoYW5kCiAgICAgICogb25seSAwLTVtU2VjIG9uIDVWIGRldmljZXMpCiAgICAgICovCi0gICAgaWYocmV0cnlfY291bnQgPj0gRUVQUk9NX01BWF9SRVRSWV9TUEkpIHsKKyAgICBpZiAocmV0cnlfY291bnQgPj0gRUVQUk9NX01BWF9SRVRSWV9TUEkpIHsKICAgICAgICAgREVCVUdPVVQoIlNQSSBFRVBST00gU3RhdHVzIGVycm9yXG4iKTsKICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwogICAgIH0KQEAgLTQ4MTcsNyArNDg2MSw3IEBACiAgICAgLyogQSBjaGVjayBmb3IgaW52YWxpZCB2YWx1ZXM6ICBvZmZzZXQgdG9vIGxhcmdlLCB0b28gbWFueSB3b3JkcywgYW5kIG5vdAogICAgICAqIGVub3VnaCB3b3Jkcy4KICAgICAgKi8KLSAgICBpZigob2Zmc2V0ID49IGVlcHJvbS0+d29yZF9zaXplKSB8fCAod29yZHMgPiBlZXByb20tPndvcmRfc2l6ZSAtIG9mZnNldCkgfHwKKyAgICBpZiAoKG9mZnNldCA+PSBlZXByb20tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gZWVwcm9tLT53b3JkX3NpemUgLSBvZmZzZXQpIHx8CiAgICAgICAgKHdvcmRzID09IDApKSB7CiAgICAgICAgIERFQlVHT1VUKCJcIndvcmRzXCIgcGFyYW1ldGVyIG91dCBvZiBib3VuZHNcbiIpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CkBAIC00ODI1LDcgKzQ4NjksNyBAQAogCiAgICAgLyogRkxBU0ggcmVhZHMgd2l0aG91dCBhY3F1aXJpbmcgdGhlIHNlbWFwaG9yZSBhcmUgc2FmZSAqLwogICAgIGlmIChlMTAwMF9pc19vbmJvYXJkX252bV9lZXByb20oaHcpID09IFRSVUUgJiYKLSAgICBody0+ZWVwcm9tLnVzZV9lZXJkID09IEZBTFNFKSB7CisgICAgICAgIGh3LT5lZXByb20udXNlX2VlcmQgPT0gRkFMU0UpIHsKICAgICAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKICAgICAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg1Miw3ICs0ODk2LDcgQEAKICAgICAgICAgdWludDE2X3Qgd29yZF9pbjsKICAgICAgICAgdWludDhfdCByZWFkX29wY29kZSA9IEVFUFJPTV9SRUFEX09QQ09ERV9TUEk7CiAKLSAgICAgICAgaWYoZTEwMDBfc3BpX2VlcHJvbV9yZWFkeShodykpIHsKKyAgICAgICAgaWYgKGUxMDAwX3NwaV9lZXByb21fcmVhZHkoaHcpKSB7CiAgICAgICAgICAgICBlMTAwMF9yZWxlYXNlX2VlcHJvbShodyk7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgICAgIH0KQEAgLTQ4NjAsNyArNDkwNCw3IEBACiAgICAgICAgIGUxMDAwX3N0YW5kYnlfZWVwcm9tKGh3KTsKIAogICAgICAgICAvKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZSBvcGNvZGUgKi8KLSAgICAgICAgaWYoKGVlcHJvbS0+YWRkcmVzc19iaXRzID09IDgpICYmIChvZmZzZXQgPj0gMTI4KSkKKyAgICAgICAgaWYgKChlZXByb20tPmFkZHJlc3NfYml0cyA9PSA4KSAmJiAob2Zmc2V0ID49IDEyOCkpCiAgICAgICAgICAgICByZWFkX29wY29kZSB8PSBFRVBST01fQThfT1BDT0RFX1NQSTsKIAogICAgICAgICAvKiBTZW5kIHRoZSBSRUFEIGNvbW1hbmQgKG9wY29kZSArIGFkZHIpICAqLwpAQCAtNDg3Niw3ICs0OTIwLDcgQEAKICAgICAgICAgICAgIHdvcmRfaW4gPSBlMTAwMF9zaGlmdF9pbl9lZV9iaXRzKGh3LCAxNik7CiAgICAgICAgICAgICBkYXRhW2ldID0gKHdvcmRfaW4gPj4gOCkgfCAod29yZF9pbiA8PCA4KTsKICAgICAgICAgfQotICAgIH0gZWxzZSBpZihlZXByb20tPnR5cGUgPT0gZTEwMDBfZWVwcm9tX21pY3Jvd2lyZSkgeworICAgIH0gZWxzZSBpZiAoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9taWNyb3dpcmUpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKICAgICAgICAgICAgIC8qIFNlbmQgdGhlIFJFQUQgY29tbWFuZCAob3Bjb2RlICsgYWRkcikgICovCiAgICAgICAgICAgICBlMTAwMF9zaGlmdF9vdXRfZWVfYml0cyhodywgRUVQUk9NX1JFQURfT1BDT0RFX01JQ1JPV0lSRSwKQEAgLTQ5MjEsNyArNDk2NSw3IEBACiAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgRUVSRCwgZWVyZCk7CiAgICAgICAgIGVycm9yID0gZTEwMDBfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgRTEwMDBfRUVQUk9NX1BPTExfUkVBRCk7CiAKLSAgICAgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBkYXRhW2ldID0gKEUxMDAwX1JFQURfUkVHKGh3LCBFRVJEKSA+PiBFMTAwMF9FRVBST01fUldfUkVHX0RBVEEpOwpAQCAtNDk1OCw3ICs1MDAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBFMTAwMF9FRVBST01fUldfUkVHX1NUQVJUOwogCiAgICAgICAgIGVycm9yID0gZTEwMDBfcG9sbF9lZXJkX2Vld3JfZG9uZShodywgRTEwMDBfRUVQUk9NX1BPTExfV1JJVEUpOwotICAgICAgICBpZihlcnJvcikgeworICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAgLTQ5NjYsNyArNTAxMCw3IEBACiAKICAgICAgICAgZXJyb3IgPSBlMTAwMF9wb2xsX2VlcmRfZWV3cl9kb25lKGh3LCBFMTAwMF9FRVBST01fUE9MTF9XUklURSk7CiAKLSAgICAgICAgaWYoZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KQEAgLTQ5ODcsMTMgKzUwMzEsMTMgQEAKICAgICB1aW50MzJfdCBpLCByZWcgPSAwOwogICAgIGludDMyX3QgZG9uZSA9IEUxMDAwX0VSUl9FRVBST007CiAKLSAgICBmb3IoaSA9IDA7IGkgPCBhdHRlbXB0czsgaSsrKSB7Ci0gICAgICAgIGlmKGVlcmQgPT0gRTEwMDBfRUVQUk9NX1BPTExfUkVBRCkKKyAgICBmb3IgKGkgPSAwOyBpIDwgYXR0ZW1wdHM7IGkrKykgeworICAgICAgICBpZiAoZWVyZCA9PSBFMTAwMF9FRVBST01fUE9MTF9SRUFEKQogICAgICAgICAgICAgcmVnID0gRTEwMDBfUkVBRF9SRUcoaHcsIEVFUkQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZWcgPSBFMTAwMF9SRUFEX1JFRyhodywgRUVXUik7CiAKLSAgICAgICAgaWYocmVnICYgRTEwMDBfRUVQUk9NX1JXX1JFR19ET05FKSB7CisgICAgICAgIGlmIChyZWcgJiBFMTAwMF9FRVBST01fUldfUkVHX0RPTkUpIHsKICAgICAgICAgICAgIGRvbmUgPSBFMTAwMF9TVUNDRVNTOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUwMjUsNyArNTA2OSw3IEBACiAgICAgICAgIGVlY2QgPSAoKGVlY2QgPj4gMTUpICYgMHgwMyk7CiAKICAgICAgICAgLyogSWYgYm90aCBiaXRzIGFyZSBzZXQsIGRldmljZSBpcyBGbGFzaCB0eXBlICovCi0gICAgICAgIGlmKGVlY2QgPT0gMHgwMykgeworICAgICAgICBpZiAoZWVjZCA9PSAweDAzKSB7CiAgICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgICAgIH0KICAgICB9CkBAIC01MDkwLDcgKzUxMzQsNyBAQAogICAgICAgICBjaGVja3N1bSArPSBlZXByb21fZGF0YTsKICAgICB9CiAKLSAgICBpZihjaGVja3N1bSA9PSAodWludDE2X3QpIEVFUFJPTV9TVU0pCisgICAgaWYgKGNoZWNrc3VtID09ICh1aW50MTZfdCkgRUVQUk9NX1NVTSkKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAgICAgZWxzZSB7CiAgICAgICAgIERFQlVHT1VUKCJFRVBST00gQ2hlY2tzdW0gSW52YWxpZFxuIik7CkBAIC01MTE1LDE1ICs1MTU5LDE1IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3VwZGF0ZV9lZXByb21fY2hlY2tzdW0iKTsKIAotICAgIGZvcihpID0gMDsgaSA8IEVFUFJPTV9DSEVDS1NVTV9SRUc7IGkrKykgewotICAgICAgICBpZihlMTAwMF9yZWFkX2VlcHJvbShodywgaSwgMSwgJmVlcHJvbV9kYXRhKSA8IDApIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX0NIRUNLU1VNX1JFRzsgaSsrKSB7CisgICAgICAgIGlmIChlMTAwMF9yZWFkX2VlcHJvbShodywgaSwgMSwgJmVlcHJvbV9kYXRhKSA8IDApIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgICAgIH0KICAgICAgICAgY2hlY2tzdW0gKz0gZWVwcm9tX2RhdGE7CiAgICAgfQogICAgIGNoZWNrc3VtID0gKHVpbnQxNl90KSBFRVBST01fU1VNIC0gY2hlY2tzdW07Ci0gICAgaWYoZTEwMDBfd3JpdGVfZWVwcm9tKGh3LCBFRVBST01fQ0hFQ0tTVU1fUkVHLCAxLCAmY2hlY2tzdW0pIDwgMCkgeworICAgIGlmIChlMTAwMF93cml0ZV9lZXByb20oaHcsIEVFUFJPTV9DSEVDS1NVTV9SRUcsIDEsICZjaGVja3N1bSkgPCAwKSB7CiAgICAgICAgIERFQlVHT1VUKCJFRVBST00gV3JpdGUgRXJyb3JcbiIpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgfSBlbHNlIGlmIChody0+ZWVwcm9tLnR5cGUgPT0gZTEwMDBfZWVwcm9tX2ZsYXNoKSB7CkBAIC01MTM1LDcgKzUxNzksNyBAQAogICAgICAgICBjdHJsX2V4dCA9IEUxMDAwX1JFQURfUkVHKGh3LCBDVFJMX0VYVCk7CiAgICAgICAgIGN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfRVhUX0VFX1JTVDsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBDVFJMX0VYVCwgY3RybF9leHQpOwotICAgICAgICBtc2VjX2RlbGF5KDEwKTsKKyAgICAgICAgbXNsZWVwKDEwKTsKICAgICB9CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC01MTY1LDE0ICs1MjA5LDE0IEBACiAgICAgLyogQSBjaGVjayBmb3IgaW52YWxpZCB2YWx1ZXM6ICBvZmZzZXQgdG9vIGxhcmdlLCB0b28gbWFueSB3b3JkcywgYW5kIG5vdAogICAgICAqIGVub3VnaCB3b3Jkcy4KICAgICAgKi8KLSAgICBpZigob2Zmc2V0ID49IGVlcHJvbS0+d29yZF9zaXplKSB8fCAod29yZHMgPiBlZXByb20tPndvcmRfc2l6ZSAtIG9mZnNldCkgfHwKKyAgICBpZiAoKG9mZnNldCA+PSBlZXByb20tPndvcmRfc2l6ZSkgfHwgKHdvcmRzID4gZWVwcm9tLT53b3JkX3NpemUgLSBvZmZzZXQpIHx8CiAgICAgICAgKHdvcmRzID09IDApKSB7CiAgICAgICAgIERFQlVHT1VUKCJcIndvcmRzXCIgcGFyYW1ldGVyIG91dCBvZiBib3VuZHNcbiIpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgfQogCiAgICAgLyogODI1NzMgd3JpdGVzIG9ubHkgdGhyb3VnaCBlZXdyICovCi0gICAgaWYoZWVwcm9tLT51c2VfZWV3ciA9PSBUUlVFKQorICAgIGlmIChlZXByb20tPnVzZV9lZXdyID09IFRSVUUpCiAgICAgICAgIHJldHVybiBlMTAwMF93cml0ZV9lZXByb21fZWV3cihodywgb2Zmc2V0LCB3b3JkcywgZGF0YSk7CiAKICAgICBpZiAoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9pY2g4KQpAQCAtNTE4MiwxMSArNTIyNiwxMSBAQAogICAgIGlmIChlMTAwMF9hY3F1aXJlX2VlcHJvbShodykgIT0gRTEwMDBfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOwogCi0gICAgaWYoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9taWNyb3dpcmUpIHsKKyAgICBpZiAoZWVwcm9tLT50eXBlID09IGUxMDAwX2VlcHJvbV9taWNyb3dpcmUpIHsKICAgICAgICAgc3RhdHVzID0gZTEwMDBfd3JpdGVfZWVwcm9tX21pY3Jvd2lyZShodywgb2Zmc2V0LCB3b3JkcywgZGF0YSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc3RhdHVzID0gZTEwMDBfd3JpdGVfZWVwcm9tX3NwaShodywgb2Zmc2V0LCB3b3JkcywgZGF0YSk7Ci0gICAgICAgIG1zZWNfZGVsYXkoMTApOworICAgICAgICBtc2xlZXAoMTApOwogICAgIH0KIAogICAgIC8qIERvbmUgd2l0aCB3cml0aW5nICovCkBAIC01MjE4LDcgKzUyNjIsNyBAQAogICAgIHdoaWxlICh3aWR4IDwgd29yZHMpIHsKICAgICAgICAgdWludDhfdCB3cml0ZV9vcGNvZGUgPSBFRVBST01fV1JJVEVfT1BDT0RFX1NQSTsKIAotICAgICAgICBpZihlMTAwMF9zcGlfZWVwcm9tX3JlYWR5KGh3KSkgcmV0dXJuIC1FMTAwMF9FUlJfRUVQUk9NOworICAgICAgICBpZiAoZTEwMDBfc3BpX2VlcHJvbV9yZWFkeShodykpIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKIAogICAgICAgICBlMTAwMF9zdGFuZGJ5X2VlcHJvbShodyk7CiAKQEAgLTUyMjksNyArNTI3Myw3IEBACiAgICAgICAgIGUxMDAwX3N0YW5kYnlfZWVwcm9tKGh3KTsKIAogICAgICAgICAvKiBTb21lIFNQSSBlZXByb21zIHVzZSB0aGUgOHRoIGFkZHJlc3MgYml0IGVtYmVkZGVkIGluIHRoZSBvcGNvZGUgKi8KLSAgICAgICAgaWYoKGVlcHJvbS0+YWRkcmVzc19iaXRzID09IDgpICYmIChvZmZzZXQgPj0gMTI4KSkKKyAgICAgICAgaWYgKChlZXByb20tPmFkZHJlc3NfYml0cyA9PSA4KSAmJiAob2Zmc2V0ID49IDEyOCkpCiAgICAgICAgICAgICB3cml0ZV9vcGNvZGUgfD0gRUVQUk9NX0E4X09QQ09ERV9TUEk7CiAKICAgICAgICAgLyogU2VuZCB0aGUgV3JpdGUgY29tbWFuZCAoOC1iaXQgb3Bjb2RlICsgYWRkcikgKi8KQEAgLTUyNTEsNyArNTI5NSw3IEBACiAgICAgICAgICAgICAgKiBvcGVyYXRpb24sIHdoaWxlIHRoZSBzbWFsbGVyIGVlcHJvbXMgYXJlIGNhcGFibGUgb2YgYW4gOC1ieXRlCiAgICAgICAgICAgICAgKiBQQUdFIFdSSVRFIG9wZXJhdGlvbi4gIEJyZWFrIHRoZSBpbm5lciBsb29wIHRvIHBhc3MgbmV3IGFkZHJlc3MKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYoKCgob2Zmc2V0ICsgd2lkeCkqMikgJSBlZXByb20tPnBhZ2Vfc2l6ZSkgPT0gMCkgeworICAgICAgICAgICAgaWYgKCgoKG9mZnNldCArIHdpZHgpKjIpICUgZWVwcm9tLT5wYWdlX3NpemUpID09IDApIHsKICAgICAgICAgICAgICAgICBlMTAwMF9zdGFuZGJ5X2VlcHJvbShodyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01MzE3LDEyICs1MzYxLDEyIEBACiAgICAgICAgICAqIHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIGhhcyBiZWVuIGNvbXBsZXRlZCBieSByYWlzaW5nIHRoZSBETyBzaWduYWwuCiAgICAgICAgICAqIElmIERPIGRvZXMgbm90IGdvIGhpZ2ggaW4gMTAgbWlsbGlzZWNvbmRzLCB0aGVuIGVycm9yIG91dC4KICAgICAgICAgICovCi0gICAgICAgIGZvcihpID0gMDsgaSA8IDIwMDsgaSsrKSB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyMDA7IGkrKykgewogICAgICAgICAgICAgZWVjZCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKTsKLSAgICAgICAgICAgIGlmKGVlY2QgJiBFMTAwMF9FRUNEX0RPKSBicmVhazsKKyAgICAgICAgICAgIGlmIChlZWNkICYgRTEwMDBfRUVDRF9ETykgYnJlYWs7CiAgICAgICAgICAgICB1ZGVsYXkoNTApOwogICAgICAgICB9Ci0gICAgICAgIGlmKGkgPT0gMjAwKSB7CisgICAgICAgIGlmIChpID09IDIwMCkgewogICAgICAgICAgICAgREVCVUdPVVQoIkVFUFJPTSBXcml0ZSBkaWQgbm90IGNvbXBsZXRlXG4iKTsKICAgICAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKICAgICAgICAgfQpAQCAtNTUxMyw0MCArNTU1Nyw2IEBACiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFJlYWRzIHRoZSBhZGFwdGVyJ3MgcGFydCBudW1iZXIgZnJvbSB0aGUgRUVQUk9NCi0gKgotICogaHcgLSBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKLSAqIHBhcnRfbnVtIC0gQWRhcHRlcidzIHBhcnQgbnVtYmVyCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90Ci1lMTAwMF9yZWFkX3BhcnRfbnVtKHN0cnVjdCBlMTAwMF9odyAqaHcsCi0gICAgICAgICAgICAgICAgICAgIHVpbnQzMl90ICpwYXJ0X251bSkKLXsKLSAgICB1aW50MTZfdCBvZmZzZXQgPSBFRVBST01fUEJBX0JZVEVfMTsKLSAgICB1aW50MTZfdCBlZXByb21fZGF0YTsKLQotICAgIERFQlVHRlVOQygiZTEwMDBfcmVhZF9wYXJ0X251bSIpOwotCi0gICAgLyogR2V0IHdvcmQgMCBmcm9tIEVFUFJPTSAqLwotICAgIGlmKGUxMDAwX3JlYWRfZWVwcm9tKGh3LCBvZmZzZXQsIDEsICZlZXByb21fZGF0YSkgPCAwKSB7Ci0gICAgICAgIERFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7Ci0gICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKLSAgICB9Ci0gICAgLyogU2F2ZSB3b3JkIDAgaW4gdXBwZXIgaGFsZiBvZiBwYXJ0X251bSAqLwotICAgICpwYXJ0X251bSA9ICh1aW50MzJfdCkgKGVlcHJvbV9kYXRhIDw8IDE2KTsKLQotICAgIC8qIEdldCB3b3JkIDEgZnJvbSBFRVBST00gKi8KLSAgICBpZihlMTAwMF9yZWFkX2VlcHJvbShodywgKytvZmZzZXQsIDEsICZlZXByb21fZGF0YSkgPCAwKSB7Ci0gICAgICAgIERFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7Ci0gICAgICAgIHJldHVybiAtRTEwMDBfRVJSX0VFUFJPTTsKLSAgICB9Ci0gICAgLyogU2F2ZSB3b3JkIDEgaW4gbG93ZXIgaGFsZiBvZiBwYXJ0X251bSAqLwotICAgICpwYXJ0X251bSB8PSBlZXByb21fZGF0YTsKLQotICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWFkcyB0aGUgYWRhcHRlcidzIE1BQyBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTSBhbmQgaW52ZXJ0cyB0aGUgTFNCIGZvciB0aGUKICAqIHNlY29uZCBmdW5jdGlvbiBvZiBkdWFsIGZ1bmN0aW9uIGRldmljZXMKICAqCkBAIC01NTYwLDkgKzU1NzAsOSBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZWFkX21hY19hZGRyIik7CiAKLSAgICBmb3IoaSA9IDA7IGkgPCBOT0RFX0FERFJFU1NfU0laRTsgaSArPSAyKSB7CisgICAgZm9yIChpID0gMDsgaSA8IE5PREVfQUREUkVTU19TSVpFOyBpICs9IDIpIHsKICAgICAgICAgb2Zmc2V0ID0gaSA+PiAxOwotICAgICAgICBpZihlMTAwMF9yZWFkX2VlcHJvbShodywgb2Zmc2V0LCAxLCAmZWVwcm9tX2RhdGEpIDwgMCkgeworICAgICAgICBpZiAoZTEwMDBfcmVhZF9lZXByb20oaHcsIG9mZnNldCwgMSwgJmVlcHJvbV9kYXRhKSA8IDApIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFRVBST00gUmVhZCBFcnJvclxuIik7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgICAgIH0KQEAgLTU1NzcsMTIgKzU1ODcsMTIgQEAKICAgICBjYXNlIGUxMDAwXzgyNTQ2X3Jldl8zOgogICAgIGNhc2UgZTEwMDBfODI1NzE6CiAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKLSAgICAgICAgaWYoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQorICAgICAgICBpZiAoRTEwMDBfUkVBRF9SRUcoaHcsIFNUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKQogICAgICAgICAgICAgaHctPnBlcm1fbWFjX2FkZHJbNV0gXj0gMHgwMTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgZm9yKGkgPSAwOyBpIDwgTk9ERV9BRERSRVNTX1NJWkU7IGkrKykKKyAgICBmb3IgKGkgPSAwOyBpIDwgTk9ERV9BRERSRVNTX1NJWkU7IGkrKykKICAgICAgICAgaHctPm1hY19hZGRyW2ldID0gaHctPnBlcm1fbWFjX2FkZHJbaV07CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC01NjIxLDcgKzU2MzEsNyBAQAogCiAgICAgLyogWmVybyBvdXQgdGhlIG90aGVyIDE1IHJlY2VpdmUgYWRkcmVzc2VzLiAqLwogICAgIERFQlVHT1VUKCJDbGVhcmluZyBSQVJbMS0xNV1cbiIpOwotICAgIGZvcihpID0gMTsgaSA8IHJhcl9udW07IGkrKykgeworICAgIGZvciAoaSA9IDE7IGkgPCByYXJfbnVtOyBpKyspIHsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgKGkgPDwgMSksIDApOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CiAgICAgICAgIEUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsICgoaSA8PCAxKSArIDEpLCAwKTsKQEAgLTU2NDMsNiArNTY1Myw3IEBACiAgKiBmb3IgdGhlIGZpcnN0IDE1IG11bHRpY2FzdCBhZGRyZXNzZXMsIGFuZCBoYXNoZXMgdGhlIHJlc3QgaW50byB0aGUKICAqIG11bHRpY2FzdCB0YWJsZS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAwCiB2b2lkCiBlMTAwMF9tY19hZGRyX2xpc3RfdXBkYXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKm1jX2FkZHJfbGlzdCwKQEAgLTU2NzEsNyArNTY4Miw3IEBACiAgICAgaWYgKChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzEpICYmIChody0+bGFhX2lzX3ByZXNlbnQgPT0gVFJVRSkpCiAgICAgICAgIG51bV9yYXJfZW50cnkgLT0gMTsKIAotICAgIGZvcihpID0gcmFyX3VzZWRfY291bnQ7IGkgPCBudW1fcmFyX2VudHJ5OyBpKyspIHsKKyAgICBmb3IgKGkgPSByYXJfdXNlZF9jb3VudDsgaSA8IG51bV9yYXJfZW50cnk7IGkrKykgewogICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIFJBLCAoaSA8PCAxKSwgMCk7CiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgKChpIDw8IDEpICsgMSksIDApOwpAQCAtNTY4MywxMyArNTY5NCwxMyBAQAogICAgIG51bV9tdGFfZW50cnkgPSBFMTAwMF9OVU1fTVRBX1JFR0lTVEVSUzsKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pCiAgICAgICAgIG51bV9tdGFfZW50cnkgPSBFMTAwMF9OVU1fTVRBX1JFR0lTVEVSU19JQ0g4TEFOOwotICAgIGZvcihpID0gMDsgaSA8IG51bV9tdGFfZW50cnk7IGkrKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBudW1fbXRhX2VudHJ5OyBpKyspIHsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBNVEEsIGksIDApOwogICAgICAgICBFMTAwMF9XUklURV9GTFVTSChodyk7CiAgICAgfQogCiAgICAgLyogQWRkIHRoZSBuZXcgYWRkcmVzc2VzICovCi0gICAgZm9yKGkgPSAwOyBpIDwgbWNfYWRkcl9jb3VudDsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IG1jX2FkZHJfY291bnQ7IGkrKykgewogICAgICAgICBERUJVR09VVCgiIEFkZGluZyB0aGUgbXVsdGljYXN0IGFkZHJlc3NlczpcbiIpOwogICAgICAgICBERUJVR09VVDcoIiBNQyBBZGRyICMlZCA9JS4yWCAlLjJYICUuMlggJS4yWCAlLjJYICUuMlhcbiIsIGksCiAgICAgICAgICAgICAgICAgICBtY19hZGRyX2xpc3RbaSAqIChFVEhfTEVOR1RIX09GX0FERFJFU1MgKyBwYWQpXSwKQEAgLTU3MTksNiArNTczMCw3IEBACiAgICAgfQogICAgIERFQlVHT1VUKCJNQyBVcGRhdGUgQ29tcGxldGVcbiIpOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSGFzaGVzIGFuIGFkZHJlc3MgdG8gZGV0ZXJtaW5lIGl0cyBsb2NhdGlvbiBpbiB0aGUgbXVsdGljYXN0IHRhYmxlCkBAIC01ODIwLDcgKzU4MzIsNyBAQAogICAgICAqIGluIHRoZSBNVEEsIHNhdmUgb2ZmIHRoZSBwcmV2aW91cyBlbnRyeSBiZWZvcmUgd3JpdGluZyBhbmQKICAgICAgKiByZXN0b3JlIHRoZSBvbGQgdmFsdWUgYWZ0ZXIgd3JpdGluZy4KICAgICAgKi8KLSAgICBpZigoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ0KSAmJiAoKGhhc2hfcmVnICYgMHgxKSA9PSAxKSkgeworICAgIGlmICgoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ0KSAmJiAoKGhhc2hfcmVnICYgMHgxKSA9PSAxKSkgewogICAgICAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUdfQVJSQVkoaHcsIE1UQSwgKGhhc2hfcmVnIC0gMSkpOwogICAgICAgICBFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIE1UQSwgaGFzaF9yZWcsIG10YSk7CiAgICAgICAgIEUxMDAwX1dSSVRFX0ZMVVNIKGh3KTsKQEAgLTU5NzAsNyArNTk4Miw3IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX2lkX2xlZF9pbml0Iik7CiAKLSAgICBpZihody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MCkgeworICAgIGlmIChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MCkgewogICAgICAgICAvKiBOb3RoaW5nIHRvIGRvICovCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogICAgIH0KQEAgLTU5ODAsNyArNTk5Miw3IEBACiAgICAgaHctPmxlZGN0bF9tb2RlMSA9IGh3LT5sZWRjdGxfZGVmYXVsdDsKICAgICBody0+bGVkY3RsX21vZGUyID0gaHctPmxlZGN0bF9kZWZhdWx0OwogCi0gICAgaWYoZTEwMDBfcmVhZF9lZXByb20oaHcsIEVFUFJPTV9JRF9MRURfU0VUVElOR1MsIDEsICZlZXByb21fZGF0YSkgPCAwKSB7CisgICAgaWYgKGUxMDAwX3JlYWRfZWVwcm9tKGh3LCBFRVBST01fSURfTEVEX1NFVFRJTkdTLCAxLCAmZWVwcm9tX2RhdGEpIDwgMCkgewogICAgICAgICBERUJVR09VVCgiRUVQUk9NIFJlYWQgRXJyb3JcbiIpOwogICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9FRVBST007CiAgICAgfQpAQCAtNTk5Nyw3ICs2MDA5LDcgQEAKICAgICB9CiAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgICB0ZW1wID0gKGVlcHJvbV9kYXRhID4+IChpIDw8IDIpKSAmIGxlZF9tYXNrOwotICAgICAgICBzd2l0Y2godGVtcCkgeworICAgICAgICBzd2l0Y2ggKHRlbXApIHsKICAgICAgICAgY2FzZSBJRF9MRURfT04xX0RFRjI6CiAgICAgICAgIGNhc2UgSURfTEVEX09OMV9PTjI6CiAgICAgICAgIGNhc2UgSURfTEVEX09OMV9PRkYyOgpAQCAtNjAxNCw3ICs2MDI2LDcgQEAKICAgICAgICAgICAgIC8qIERvIG5vdGhpbmcgKi8KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHN3aXRjaCh0ZW1wKSB7CisgICAgICAgIHN3aXRjaCAodGVtcCkgewogICAgICAgICBjYXNlIElEX0xFRF9ERUYxX09OMjoKICAgICAgICAgY2FzZSBJRF9MRURfT04xX09OMjoKICAgICAgICAgY2FzZSBJRF9MRURfT0ZGMV9PTjI6CkBAIC02MDQ4LDcgKzYwNjAsNyBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9zZXR1cF9sZWQiKTsKIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfODI1NDJfcmV2Ml8wOgogICAgIGNhc2UgZTEwMDBfODI1NDJfcmV2Ml8xOgogICAgIGNhc2UgZTEwMDBfODI1NDM6CkBAIC02MDYyLDE2ICs2MDc0LDE2IEBACiAgICAgICAgIC8qIFR1cm4gb2ZmIFBIWSBTbWFydCBQb3dlciBEb3duIChpZiBlbmFibGVkKSAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX0dNSUlfRklGTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHctPnBoeV9zcGRfZGVmYXVsdCk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX0dNSUlfRklGTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQxNl90KShody0+cGh5X3NwZF9kZWZhdWx0ICYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfklHUDAxRTEwMDBfR01JSV9TUEQpKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgLyogRmFsbCBUaHJvdWdoICovCiAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgeworICAgICAgICBpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgewogICAgICAgICAgICAgbGVkY3RsID0gRTEwMDBfUkVBRF9SRUcoaHcsIExFRENUTCk7CiAgICAgICAgICAgICAvKiBTYXZlIGN1cnJlbnQgTEVEQ1RMIHNldHRpbmdzICovCiAgICAgICAgICAgICBody0+bGVkY3RsX2RlZmF1bHQgPSBsZWRjdGw7CkBAIC02MDgyLDcgKzYwOTQsNyBAQAogICAgICAgICAgICAgbGVkY3RsIHw9IChFMTAwMF9MRURDVExfTU9ERV9MRURfT0ZGIDw8CiAgICAgICAgICAgICAgICAgICAgICAgIEUxMDAwX0xFRENUTF9MRUQwX01PREVfU0hJRlQpOwogICAgICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBMRURDVEwsIGxlZGN0bCk7Ci0gICAgICAgIH0gZWxzZSBpZihody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKKyAgICAgICAgfSBlbHNlIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKICAgICAgICAgICAgIEUxMDAwX1dSSVRFX1JFRyhodywgTEVEQ1RMLCBody0+bGVkY3RsX21vZGUxKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNjA5MCw2ICs2MTAyLDcgQEAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIH0KIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBVc2VkIG9uIDgyNTcxIGFuZCBsYXRlciBTaSB0aGF0IGhhcyBMRUQgYmxpbmsgYml0cy4KICAqIENhbGxlcnMgbXVzdCB1c2UgdGhlaXIgb3duIHRpbWVyIGFuZCBzaG91bGQgaGF2ZSBhbHJlYWR5IGNhbGxlZApAQCAtNjE0MCw3ICs2MTUzLDcgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY2xlYW51cF9sZWQiKTsKIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfODI1NDJfcmV2Ml8wOgogICAgIGNhc2UgZTEwMDBfODI1NDJfcmV2Ml8xOgogICAgIGNhc2UgZTEwMDBfODI1NDM6CkBAIC02MTU0LDcgKzYxNjcsNyBAQAogICAgICAgICAvKiBUdXJuIG9uIFBIWSBTbWFydCBQb3dlciBEb3duIChpZiBwcmV2aW91c2x5IGVuYWJsZWQpICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX0dNSUlfRklGTywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHctPnBoeV9zcGRfZGVmYXVsdCk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIC8qIEZhbGwgVGhyb3VnaCAqLwogICAgIGRlZmF1bHQ6CkBAIC02MTgyLDcgKzYxOTUsNyBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9sZWRfb24iKTsKIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfODI1NDJfcmV2Ml8wOgogICAgIGNhc2UgZTEwMDBfODI1NDJfcmV2Ml8xOgogICAgIGNhc2UgZTEwMDBfODI1NDM6CkBAIC02MTkxLDcgKzYyMDQsNyBAQAogICAgICAgICBjdHJsIHw9IEUxMDAwX0NUUkxfU1dEUElPMDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU0NDoKLSAgICAgICAgaWYoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgeworICAgICAgICBpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgewogICAgICAgICAgICAgLyogU2V0IFNXIERlZmluZWFibGUgUGluIDAgdG8gdHVybiBvbiB0aGUgTEVEICovCiAgICAgICAgICAgICBjdHJsIHw9IEUxMDAwX0NUUkxfU1dEUElOMDsKICAgICAgICAgICAgIGN0cmwgfD0gRTEwMDBfQ1RSTF9TV0RQSU8wOwpAQCAtNjIwMiw3ICs2MjE1LDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgotICAgICAgICBpZihody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7CisgICAgICAgIGlmIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyKSB7CiAgICAgICAgICAgICAvKiBDbGVhciBTVyBEZWZpbmVhYmxlIFBpbiAwIHRvIHR1cm4gb24gdGhlIExFRCAqLwogICAgICAgICAgICAgY3RybCAmPSB+RTEwMDBfQ1RSTF9TV0RQSU4wOwogICAgICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX1NXRFBJTzA7CkBAIC02MjMzLDcgKzYyNDYsNyBAQAogCiAgICAgREVCVUdGVU5DKCJlMTAwMF9sZWRfb2ZmIik7CiAKLSAgICBzd2l0Y2goaHctPm1hY190eXBlKSB7CisgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKICAgICBjYXNlIGUxMDAwXzgyNTQyX3JldjJfMDoKICAgICBjYXNlIGUxMDAwXzgyNTQyX3JldjJfMToKICAgICBjYXNlIGUxMDAwXzgyNTQzOgpAQCAtNjI0Miw3ICs2MjU1LDcgQEAKICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX1NXRFBJTzA7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgZTEwMDBfODI1NDQ6Ci0gICAgICAgIGlmKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKKyAgICAgICAgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKICAgICAgICAgICAgIC8qIENsZWFyIFNXIERlZmluZWFibGUgUGluIDAgdG8gdHVybiBvZmYgdGhlIExFRCAqLwogICAgICAgICAgICAgY3RybCAmPSB+RTEwMDBfQ1RSTF9TV0RQSU4wOwogICAgICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX1NXRFBJTzA7CkBAIC02MjUzLDcgKzYyNjYsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKKyAgICAgICAgaWYgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpIHsKICAgICAgICAgICAgIC8qIFNldCBTVyBEZWZpbmVhYmxlIFBpbiAwIHRvIHR1cm4gb2ZmIHRoZSBMRUQgKi8KICAgICAgICAgICAgIGN0cmwgfD0gRTEwMDBfQ1RSTF9TV0RQSU4wOwogICAgICAgICAgICAgY3RybCB8PSBFMTAwMF9DVFJMX1NXRFBJTzA7CkBAIC02Mjc3LDcgKzYyOTAsNyBAQAogICoKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgdm9pZAordm9pZAogZTEwMDBfY2xlYXJfaHdfY250cnMoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB2b2xhdGlsZSB1aW50MzJfdCB0ZW1wOwpAQCAtNjM0MCw3ICs2MzUzLDcgQEAKICAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1QVEMpOwogICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgQlBUQyk7CiAKLSAgICBpZihody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MykgcmV0dXJuOworICAgIGlmIChody0+bWFjX3R5cGUgPCBlMTAwMF84MjU0MykgcmV0dXJuOwogCiAgICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBBTEdORVJSQyk7CiAgICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBSWEVSUkMpOwpAQCAtNjM0OSwxMyArNjM2MiwxMyBAQAogICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgVFNDVEMpOwogICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgVFNDVEZDKTsKIAotICAgIGlmKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0NCkgcmV0dXJuOworICAgIGlmIChody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDQpIHJldHVybjsKIAogICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgTUdUUFJDKTsKICAgICB0ZW1wID0gRTEwMDBfUkVBRF9SRUcoaHcsIE1HVFBEQyk7CiAgICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBNR1RQVEMpOwogCi0gICAgaWYoaHctPm1hY190eXBlIDw9IGUxMDAwXzgyNTQ3X3Jldl8yKSByZXR1cm47CisgICAgaWYgKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMikgcmV0dXJuOwogCiAgICAgdGVtcCA9IEUxMDAwX1JFQURfUkVHKGh3LCBJQUMpOwogICAgIHRlbXAgPSBFMTAwMF9SRUFEX1JFRyhodywgSUNSWE9DKTsKQEAgLTYzODYsOCArNjM5OSw4IEBACiB7CiAgICAgREVCVUdGVU5DKCJlMTAwMF9yZXNldF9hZGFwdGl2ZSIpOwogCi0gICAgaWYoaHctPmFkYXB0aXZlX2lmcykgewotICAgICAgICBpZighaHctPmlmc19wYXJhbXNfZm9yY2VkKSB7CisgICAgaWYgKGh3LT5hZGFwdGl2ZV9pZnMpIHsKKyAgICAgICAgaWYgKCFody0+aWZzX3BhcmFtc19mb3JjZWQpIHsKICAgICAgICAgICAgIGh3LT5jdXJyZW50X2lmc192YWwgPSAwOwogICAgICAgICAgICAgaHctPmlmc19taW5fdmFsID0gSUZTX01JTjsKICAgICAgICAgICAgIGh3LT5pZnNfbWF4X3ZhbCA9IElGU19NQVg7CkBAIC02NDE0LDEyICs2NDI3LDEyIEBACiB7CiAgICAgREVCVUdGVU5DKCJlMTAwMF91cGRhdGVfYWRhcHRpdmUiKTsKIAotICAgIGlmKGh3LT5hZGFwdGl2ZV9pZnMpIHsKLSAgICAgICAgaWYoKGh3LT5jb2xsaXNpb25fZGVsdGEgKiBody0+aWZzX3JhdGlvKSA+IGh3LT50eF9wYWNrZXRfZGVsdGEpIHsKLSAgICAgICAgICAgIGlmKGh3LT50eF9wYWNrZXRfZGVsdGEgPiBNSU5fTlVNX1hNSVRTKSB7CisgICAgaWYgKGh3LT5hZGFwdGl2ZV9pZnMpIHsKKyAgICAgICAgaWYgKChody0+Y29sbGlzaW9uX2RlbHRhICogaHctPmlmc19yYXRpbykgPiBody0+dHhfcGFja2V0X2RlbHRhKSB7CisgICAgICAgICAgICBpZiAoaHctPnR4X3BhY2tldF9kZWx0YSA+IE1JTl9OVU1fWE1JVFMpIHsKICAgICAgICAgICAgICAgICBody0+aW5faWZzX21vZGUgPSBUUlVFOwotICAgICAgICAgICAgICAgIGlmKGh3LT5jdXJyZW50X2lmc192YWwgPCBody0+aWZzX21heF92YWwpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYoaHctPmN1cnJlbnRfaWZzX3ZhbCA9PSAwKQorICAgICAgICAgICAgICAgIGlmIChody0+Y3VycmVudF9pZnNfdmFsIDwgaHctPmlmc19tYXhfdmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChody0+Y3VycmVudF9pZnNfdmFsID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsID0gaHctPmlmc19taW5fdmFsOwogICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsICs9IGh3LT5pZnNfc3RlcF9zaXplOwpAQCAtNjQyNyw3ICs2NDQwLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZihody0+aW5faWZzX21vZGUgJiYgKGh3LT50eF9wYWNrZXRfZGVsdGEgPD0gTUlOX05VTV9YTUlUUykpIHsKKyAgICAgICAgICAgIGlmIChody0+aW5faWZzX21vZGUgJiYgKGh3LT50eF9wYWNrZXRfZGVsdGEgPD0gTUlOX05VTV9YTUlUUykpIHsKICAgICAgICAgICAgICAgICBody0+Y3VycmVudF9pZnNfdmFsID0gMDsKICAgICAgICAgICAgICAgICBody0+aW5faWZzX21vZGUgPSBGQUxTRTsKICAgICAgICAgICAgICAgICBFMTAwMF9XUklURV9SRUcoaHcsIEFJVCwgMCk7CkBAIC02NDc0LDQ2ICs2NDg3LDQ2IEBACiAgICAgICogVGhpcyBjb3VsZCBiZSBzaW1wbGlmaWVkIGlmIGFsbCBlbnZpcm9ubWVudHMgc3VwcG9ydGVkCiAgICAgICogNjQtYml0IGludGVnZXJzLgogICAgICAqLwotICAgIGlmKGNhcnJ5X2JpdCAmJiAoKHN0YXRzLT5nb3JjbCAmIDB4ODAwMDAwMDApID09IDApKQorICAgIGlmIChjYXJyeV9iaXQgJiYgKChzdGF0cy0+Z29yY2wgJiAweDgwMDAwMDAwKSA9PSAwKSkKICAgICAgICAgc3RhdHMtPmdvcmNoKys7CiAgICAgLyogSXMgdGhpcyBhIGJyb2FkY2FzdCBvciBtdWx0aWNhc3Q/ICBDaGVjayBicm9hZGNhc3QgZmlyc3QsCiAgICAgICogc2luY2UgdGhlIHRlc3QgZm9yIGEgbXVsdGljYXN0IGZyYW1lIHdpbGwgdGVzdCBwb3NpdGl2ZSBvbgogICAgICAqIGEgYnJvYWRjYXN0IGZyYW1lLgogICAgICAqLwotICAgIGlmKChtYWNfYWRkclswXSA9PSAodWludDhfdCkgMHhmZikgJiYgKG1hY19hZGRyWzFdID09ICh1aW50OF90KSAweGZmKSkKKyAgICBpZiAoKG1hY19hZGRyWzBdID09ICh1aW50OF90KSAweGZmKSAmJiAobWFjX2FkZHJbMV0gPT0gKHVpbnQ4X3QpIDB4ZmYpKQogICAgICAgICAvKiBCcm9hZGNhc3QgcGFja2V0ICovCiAgICAgICAgIHN0YXRzLT5icHJjKys7Ci0gICAgZWxzZSBpZigqbWFjX2FkZHIgJiAweDAxKQorICAgIGVsc2UgaWYgKCptYWNfYWRkciAmIDB4MDEpCiAgICAgICAgIC8qIE11bHRpY2FzdCBwYWNrZXQgKi8KICAgICAgICAgc3RhdHMtPm1wcmMrKzsKIAotICAgIGlmKGZyYW1lX2xlbiA9PSBody0+bWF4X2ZyYW1lX3NpemUpIHsKKyAgICBpZiAoZnJhbWVfbGVuID09IGh3LT5tYXhfZnJhbWVfc2l6ZSkgewogICAgICAgICAvKiBJbiB0aGlzIGNhc2UsIHRoZSBoYXJkd2FyZSBoYXMgb3ZlcmNvdW50ZWQgdGhlIG51bWJlciBvZgogICAgICAgICAgKiBvdmVyc2l6ZSBmcmFtZXMuCiAgICAgICAgICAqLwotICAgICAgICBpZihzdGF0cy0+cm9jID4gMCkKKyAgICAgICAgaWYgKHN0YXRzLT5yb2MgPiAwKQogICAgICAgICAgICAgc3RhdHMtPnJvYy0tOwogICAgIH0KIAogICAgIC8qIEFkanVzdCB0aGUgYmluIGNvdW50ZXJzIHdoZW4gdGhlIGV4dHJhIGJ5dGUgcHV0IHRoZSBmcmFtZSBpbiB0aGUKICAgICAgKiB3cm9uZyBiaW4uIFJlbWVtYmVyIHRoYXQgdGhlIGZyYW1lX2xlbiB3YXMgYWRqdXN0ZWQgYWJvdmUuCiAgICAgICovCi0gICAgaWYoZnJhbWVfbGVuID09IDY0KSB7CisgICAgaWYgKGZyYW1lX2xlbiA9PSA2NCkgewogICAgICAgICBzdGF0cy0+cHJjNjQrKzsKICAgICAgICAgc3RhdHMtPnByYzEyNy0tOwotICAgIH0gZWxzZSBpZihmcmFtZV9sZW4gPT0gMTI3KSB7CisgICAgfSBlbHNlIGlmIChmcmFtZV9sZW4gPT0gMTI3KSB7CiAgICAgICAgIHN0YXRzLT5wcmMxMjcrKzsKICAgICAgICAgc3RhdHMtPnByYzI1NS0tOwotICAgIH0gZWxzZSBpZihmcmFtZV9sZW4gPT0gMjU1KSB7CisgICAgfSBlbHNlIGlmIChmcmFtZV9sZW4gPT0gMjU1KSB7CiAgICAgICAgIHN0YXRzLT5wcmMyNTUrKzsKICAgICAgICAgc3RhdHMtPnByYzUxMS0tOwotICAgIH0gZWxzZSBpZihmcmFtZV9sZW4gPT0gNTExKSB7CisgICAgfSBlbHNlIGlmIChmcmFtZV9sZW4gPT0gNTExKSB7CiAgICAgICAgIHN0YXRzLT5wcmM1MTErKzsKICAgICAgICAgc3RhdHMtPnByYzEwMjMtLTsKLSAgICB9IGVsc2UgaWYoZnJhbWVfbGVuID09IDEwMjMpIHsKKyAgICB9IGVsc2UgaWYgKGZyYW1lX2xlbiA9PSAxMDIzKSB7CiAgICAgICAgIHN0YXRzLT5wcmMxMDIzKys7CiAgICAgICAgIHN0YXRzLT5wcmMxNTIyLS07Ci0gICAgfSBlbHNlIGlmKGZyYW1lX2xlbiA9PSAxNTIyKSB7CisgICAgfSBlbHNlIGlmIChmcmFtZV9sZW4gPT0gMTUyMikgewogICAgICAgICBzdGF0cy0+cHJjMTUyMisrOwogICAgIH0KIH0KQEAgLTY1NTMsMTAgKzY1NjYsMTAgQEAKICAgICAgICAgaHctPmJ1c190eXBlID0gKHN0YXR1cyAmIEUxMDAwX1NUQVRVU19QQ0lYX01PREUpID8KICAgICAgICAgICAgICAgICAgICAgICAgZTEwMDBfYnVzX3R5cGVfcGNpeCA6IGUxMDAwX2J1c190eXBlX3BjaTsKIAotICAgICAgICBpZihody0+ZGV2aWNlX2lkID09IEUxMDAwX0RFVl9JRF84MjU0NkVCX1FVQURfQ09QUEVSKSB7CisgICAgICAgIGlmIChody0+ZGV2aWNlX2lkID09IEUxMDAwX0RFVl9JRF84MjU0NkVCX1FVQURfQ09QUEVSKSB7CiAgICAgICAgICAgICBody0+YnVzX3NwZWVkID0gKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2kpID8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlMTAwMF9idXNfc3BlZWRfNjYgOiBlMTAwMF9idXNfc3BlZWRfMTIwOwotICAgICAgICB9IGVsc2UgaWYoaHctPmJ1c190eXBlID09IGUxMDAwX2J1c190eXBlX3BjaSkgeworICAgICAgICB9IGVsc2UgaWYgKGh3LT5idXNfdHlwZSA9PSBlMTAwMF9idXNfdHlwZV9wY2kpIHsKICAgICAgICAgICAgIGh3LT5idXNfc3BlZWQgPSAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX1BDSTY2KSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZTEwMDBfYnVzX3NwZWVkXzY2IDogZTEwMDBfYnVzX3NwZWVkXzMzOwogICAgICAgICB9IGVsc2UgewpAQCAtNjU4Nyw2ICs2NjAwLDcgQEAKICAqIGh3IC0gU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKiBvZmZzZXQgLSBvZmZzZXQgdG8gcmVhZCBmcm9tCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgMAogdWludDMyX3QKIGUxMDAwX3JlYWRfcmVnX2lvKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBvZmZzZXQpCkBAIC02NTk3LDYgKzY2MTEsNyBAQAogICAgIGUxMDAwX2lvX3dyaXRlKGh3LCBpb19hZGRyLCBvZmZzZXQpOwogICAgIHJldHVybiBlMTAwMF9pb19yZWFkKGh3LCBpb19kYXRhKTsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFdyaXRlcyBhIHZhbHVlIHRvIG9uZSBvZiB0aGUgZGV2aWNlcyByZWdpc3RlcnMgdXNpbmcgcG9ydCBJL08gKGFzIG9wcG9zZWQgdG8KQEAgLTY2NDksMTEgKzY2NjQsMTEgQEAKICAgICAqbWluX2xlbmd0aCA9ICptYXhfbGVuZ3RoID0gMDsKIAogICAgIC8qIFVzZSBvbGQgbWV0aG9kIGZvciBQaHkgb2xkZXIgdGhhbiBJR1AgKi8KLSAgICBpZihody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkgeworICAgIGlmIChody0+cGh5X3R5cGUgPT0gZTEwMDBfcGh5X204OCkgewogCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICBjYWJsZV9sZW5ndGggPSAocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX0NBQkxFX0xFTkdUSCkgPj4KICAgICAgICAgICAgICAgICAgICAgICAgTTg4RTEwMDBfUFNTUl9DQUJMRV9MRU5HVEhfU0hJRlQ7CkBAIC02NzEyLDcgKzY3MjcsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC1FMTAwMF9FUlJfUEhZOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgaWYoaHctPnBoeV90eXBlID09IGUxMDAwX3BoeV9pZ3ApIHsgLyogRm9yIElHUCBQSFkgKi8KKyAgICB9IGVsc2UgaWYgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwKSB7IC8qIEZvciBJR1AgUEhZICovCiAgICAgICAgIHVpbnQxNl90IGN1cl9hZ2NfdmFsdWU7CiAgICAgICAgIHVpbnQxNl90IG1pbl9hZ2NfdmFsdWUgPSBJR1AwMUUxMDAwX0FHQ19MRU5HVEhfVEFCTEVfU0laRTsKICAgICAgICAgdWludDE2X3QgYWdjX3JlZ19hcnJheVtJR1AwMUUxMDAwX1BIWV9DSEFOTkVMX05VTV0gPQpAQCAtNjcyMSwxMCArNjczNiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAxRTEwMDBfUEhZX0FHQ19DLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAxRTEwMDBfUEhZX0FHQ19EfTsKICAgICAgICAgLyogUmVhZCB0aGUgQUdDIHJlZ2lzdGVycyBmb3IgYWxsIGNoYW5uZWxzICovCi0gICAgICAgIGZvcihpID0gMDsgaSA8IElHUDAxRTEwMDBfUEhZX0NIQU5ORUxfTlVNOyBpKyspIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IElHUDAxRTEwMDBfUEhZX0NIQU5ORUxfTlVNOyBpKyspIHsKIAogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgYWdjX3JlZ19hcnJheVtpXSwgJnBoeV9kYXRhKTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgY3VyX2FnY192YWx1ZSA9IHBoeV9kYXRhID4+IElHUDAxRTEwMDBfQUdDX0xFTkdUSF9TSElGVDsKQEAgLTY3NzQsNyArNjc4OSw3IEBACiAgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotCSAgICAvKiBHZXR0aW5nIGJpdHMgMTU6OSwgd2hpY2ggcmVwcmVzZW50IHRoZSBjb21iaW5hdGlvbiBvZiBjb3Vyc2UgYW5kCisgICAgICAgICAgICAvKiBHZXR0aW5nIGJpdHMgMTU6OSwgd2hpY2ggcmVwcmVzZW50IHRoZSBjb21iaW5hdGlvbiBvZiBjb3Vyc2UgYW5kCiAgICAgICAgICAgICAgKiBmaW5lIGdhaW4gdmFsdWVzLiAgVGhlIHJlc3VsdCBpcyBhIG51bWJlciB0aGF0IGNhbiBiZSBwdXQgaW50bwogICAgICAgICAgICAgICogdGhlIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aC4gKi8KICAgICAgICAgICAgIGN1cl9hZ2NfaW5kZXggPSAocGh5X2RhdGEgPj4gSUdQMDJFMTAwMF9BR0NfTEVOR1RIX1NISUZUKSAmCkBAIC02ODM5LDcgKzY4NTQsNyBAQAogICAgICAgICAvKiByZXR1cm4gdGhlIFBvbGFyaXR5IGJpdCBpbiB0aGUgU3RhdHVzIHJlZ2lzdGVyLiAqLwogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgKnBvbGFyaXR5ID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9SRVZfUE9MQVJJVFkpID4+CiAgICAgICAgICAgICAgICAgICAgIE04OEUxMDAwX1BTU1JfUkVWX1BPTEFSSVRZX1NISUZUOwpAQCAtNjg0OSwxOCArNjg2NCwxOCBAQAogICAgICAgICAvKiBSZWFkIHRoZSBTdGF0dXMgcmVnaXN0ZXIgdG8gY2hlY2sgdGhlIHNwZWVkICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfU1RBVFVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgLyogSWYgc3BlZWQgaXMgMTAwMCBNYnBzLCBtdXN0IHJlYWQgdGhlIElHUDAxRTEwMDBfUEhZX1BDU19JTklUX1JFRyB0bwogICAgICAgICAgKiBmaW5kIHRoZSBwb2xhcml0eSBzdGF0dXMgKi8KLSAgICAgICAgaWYoKHBoeV9kYXRhICYgSUdQMDFFMTAwMF9QU1NSX1NQRUVEX01BU0spID09CisgICAgICAgIGlmICgocGh5X2RhdGEgJiBJR1AwMUUxMDAwX1BTU1JfU1BFRURfTUFTSykgPT0KICAgICAgICAgICAgSUdQMDFFMTAwMF9QU1NSX1NQRUVEXzEwMDBNQlBTKSB7CiAKICAgICAgICAgICAgIC8qIFJlYWQgdGhlIEdJRyBpbml0aWFsaXphdGlvbiBQQ1MgcmVnaXN0ZXIgKDB4MDBCNCkgKi8KICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BDU19JTklUX1JFRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgLyogQ2hlY2sgdGhlIHBvbGFyaXR5IGJpdHMgKi8KQEAgLTY5MDksNyArNjkyNCw3IEBACiAgICAgICAgIGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfaWdwXzIpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfTElOS19IRUFMVEgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICBody0+c3BlZWRfZG93bmdyYWRlZCA9IChwaHlfZGF0YSAmIElHUDAxRTEwMDBfUExIUl9TU19ET1dOR1JBREUpID8gMSA6IDA7CkBAIC02OTE3LDcgKzY5MzIsNyBAQAogICAgICAgICAgICAgICAgKGh3LT5waHlfdHlwZSA9PSBlMTAwMF9waHlfZ2c4MjU2MykpIHsKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgaHctPnNwZWVkX2Rvd25ncmFkZWQgPSAocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX0RPV05TSElGVCkgPj4KQEAgLTY5NTcsNDIgKzY5NzIsNDIgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfY29uZmlnX2RzcF9hZnRlcl9saW5rX2NoYW5nZSIpOwogCi0gICAgaWYoaHctPnBoeV90eXBlICE9IGUxMDAwX3BoeV9pZ3ApCisgICAgaWYgKGh3LT5waHlfdHlwZSAhPSBlMTAwMF9waHlfaWdwKQogICAgICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKIAotICAgIGlmKGxpbmtfdXApIHsKKyAgICBpZiAobGlua191cCkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfZ2V0X3NwZWVkX2FuZF9kdXBsZXgoaHcsICZzcGVlZCwgJmR1cGxleCk7Ci0gICAgICAgIGlmKHJldF92YWwpIHsKKyAgICAgICAgaWYgKHJldF92YWwpIHsKICAgICAgICAgICAgIERFQlVHT1VUKCJFcnJvciBnZXR0aW5nIGxpbmsgc3BlZWQgYW5kIGR1cGxleFxuIik7CiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQogCi0gICAgICAgIGlmKHNwZWVkID09IFNQRUVEXzEwMDApIHsKKyAgICAgICAgaWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHsKIAogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX2dldF9jYWJsZV9sZW5ndGgoaHcsICZtaW5fbGVuZ3RoLCAmbWF4X2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgICAgICAgICAgaWYoKGh3LT5kc3BfY29uZmlnX3N0YXRlID09IGUxMDAwX2RzcF9jb25maWdfZW5hYmxlZCkgJiYKKyAgICAgICAgICAgIGlmICgoaHctPmRzcF9jb25maWdfc3RhdGUgPT0gZTEwMDBfZHNwX2NvbmZpZ19lbmFibGVkKSAmJgogICAgICAgICAgICAgICAgIG1pbl9sZW5ndGggPj0gZTEwMDBfaWdwX2NhYmxlX2xlbmd0aF81MCkgewogCi0gICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU07IGkrKykgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBJR1AwMUUxMDAwX1BIWV9DSEFOTkVMX05VTTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIGRzcF9yZWdfYXJyYXlbaV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgICAgICAgICBwaHlfZGF0YSAmPSB+SUdQMDFFMTAwMF9QSFlfRURBQ19NVV9JTkRFWDsKIAogICAgICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgZHNwX3JlZ19hcnJheVtpXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X2RhdGEpOwotICAgICAgICAgICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBody0+ZHNwX2NvbmZpZ19zdGF0ZSA9IGUxMDAwX2RzcF9jb25maWdfYWN0aXZhdGVkOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZigoaHctPmZmZV9jb25maWdfc3RhdGUgPT0gZTEwMDBfZmZlX2NvbmZpZ19lbmFibGVkKSAmJgorICAgICAgICAgICAgaWYgKChody0+ZmZlX2NvbmZpZ19zdGF0ZSA9PSBlMTAwMF9mZmVfY29uZmlnX2VuYWJsZWQpICYmCiAgICAgICAgICAgICAgICAobWluX2xlbmd0aCA8IGUxMDAwX2lncF9jYWJsZV9sZW5ndGhfNTApKSB7CiAKICAgICAgICAgICAgICAgICB1aW50MTZfdCBmZmVfaWRsZV9lcnJfdGltZW91dCA9IEZGRV9JRExFX0VSUl9DT1VOVF9USU1FT1VUXzIwOwpAQCAtNzAwMSwxMTkgKzcwMTYsMTE5IEBACiAgICAgICAgICAgICAgICAgLyogY2xlYXIgcHJldmlvdXMgaWRsZSBlcnJvciBjb3VudHMgKi8KICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfU1RBVFVTLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKLSAgICAgICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IGZmZV9pZGxlX2Vycl90aW1lb3V0OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmZlX2lkbGVfZXJyX3RpbWVvdXQ7IGkrKykgewogICAgICAgICAgICAgICAgICAgICB1ZGVsYXkoMTAwMCk7CiAgICAgICAgICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBoeV9kYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgICAgICAgICBpZGxlX2VycnMgKz0gKHBoeV9kYXRhICYgU1JfMTAwMFRfSURMRV9FUlJPUl9DTlQpOwotICAgICAgICAgICAgICAgICAgICBpZihpZGxlX2VycnMgPiBTUl8xMDAwVF9QSFlfRVhDRVNTSVZFX0lETEVfRVJSX0NPVU5UKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpZGxlX2VycnMgPiBTUl8xMDAwVF9QSFlfRVhDRVNTSVZFX0lETEVfRVJSX0NPVU5UKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBody0+ZmZlX2NvbmZpZ19zdGF0ZSA9IGUxMDAwX2ZmZV9jb25maWdfYWN0aXZlOwogCiAgICAgICAgICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAxRTEwMDBfUEhZX0RTUF9GRkUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX1BIWV9EU1BfRkZFX0NNX0NQKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYoaWRsZV9lcnJzKQorICAgICAgICAgICAgICAgICAgICBpZiAoaWRsZV9lcnJzKQogICAgICAgICAgICAgICAgICAgICAgICAgZmZlX2lkbGVfZXJyX3RpbWVvdXQgPSBGRkVfSURMRV9FUlJfQ09VTlRfVElNRU9VVF8xMDA7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYoaHctPmRzcF9jb25maWdfc3RhdGUgPT0gZTEwMDBfZHNwX2NvbmZpZ19hY3RpdmF0ZWQpIHsKKyAgICAgICAgaWYgKGh3LT5kc3BfY29uZmlnX3N0YXRlID09IGUxMDAwX2RzcF9jb25maWdfYWN0aXZhdGVkKSB7CiAgICAgICAgICAgICAvKiBTYXZlIG9mZiB0aGUgY3VycmVudCB2YWx1ZSBvZiByZWdpc3RlciAweDJGNUIgdG8gYmUgcmVzdG9yZWQgYXQKICAgICAgICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIHJvdXRpbmVzLiAqLwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgMHgyRjVCLCAmcGh5X3NhdmVkX2RhdGEpOwogCi0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgICAgIC8qIERpc2FibGUgdGhlIFBIWSB0cmFuc21pdHRlciAqLwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIDB4MkY1QiwgMHgwMDAzKTsKIAotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCi0gICAgICAgICAgICBtc2VjX2RlbGF5X2lycSgyMCk7CisgICAgICAgICAgICBtZGVsYXkoMjApOwogCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9JRUVFX0ZPUkNFX0dJR0EpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwotICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgSUdQMDFFMTAwMF9QSFlfQ0hBTk5FTF9OVU07IGkrKykgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IElHUDAxRTEwMDBfUEhZX0NIQU5ORUxfTlVNOyBpKyspIHsKICAgICAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBkc3BfcmVnX2FycmF5W2ldLCAmcGh5X2RhdGEpOwotICAgICAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgICAgICAgICAgcGh5X2RhdGEgJj0gfklHUDAxRTEwMDBfUEhZX0VEQUNfTVVfSU5ERVg7CiAgICAgICAgICAgICAgICAgcGh5X2RhdGEgfD0gIElHUDAxRTEwMDBfUEhZX0VEQUNfU0lHTl9FWFRfOV9CSVRTOwogCiAgICAgICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsZHNwX3JlZ19hcnJheVtpXSwgcGh5X2RhdGEpOwotICAgICAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUdQMDFFMTAwMF9JRUVFX1JFU1RBUlRfQVVUT05FRyk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICAgICAgICAgIG1zZWNfZGVsYXlfaXJxKDIwKTsKKyAgICAgICAgICAgIG1kZWxheSgyMCk7CiAKICAgICAgICAgICAgIC8qIE5vdyBlbmFibGUgdGhlIHRyYW5zbWl0dGVyICovCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCBwaHlfc2F2ZWRfZGF0YSk7CiAKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgaHctPmRzcF9jb25maWdfc3RhdGUgPSBlMTAwMF9kc3BfY29uZmlnX2VuYWJsZWQ7CiAgICAgICAgIH0KIAotICAgICAgICBpZihody0+ZmZlX2NvbmZpZ19zdGF0ZSA9PSBlMTAwMF9mZmVfY29uZmlnX2FjdGl2ZSkgeworICAgICAgICBpZiAoaHctPmZmZV9jb25maWdfc3RhdGUgPT0gZTEwMDBfZmZlX2NvbmZpZ19hY3RpdmUpIHsKICAgICAgICAgICAgIC8qIFNhdmUgb2ZmIHRoZSBjdXJyZW50IHZhbHVlIG9mIHJlZ2lzdGVyIDB4MkY1QiB0byBiZSByZXN0b3JlZCBhdAogICAgICAgICAgICAgICogdGhlIGVuZCBvZiB0aGUgcm91dGluZXMuICovCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCAweDJGNUIsICZwaHlfc2F2ZWRfZGF0YSk7CiAKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgICAgICAgICAgLyogRGlzYWJsZSB0aGUgUEhZIHRyYW5zbWl0dGVyICovCiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCAweDAwMDMpOwogCi0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICAgICAgICAgIG1zZWNfZGVsYXlfaXJxKDIwKTsKKyAgICAgICAgICAgIG1kZWxheSgyMCk7CiAKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCAweDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX0lFRUVfRk9SQ0VfR0lHQSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfRFNQX0ZGRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElHUDAxRTEwMDBfUEhZX0RTUF9GRkVfREVGQVVMVCk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCAweDAwMDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJR1AwMUUxMDAwX0lFRUVfUkVTVEFSVF9BVVRPTkVHKTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgICAgICAgICAgbXNlY19kZWxheV9pcnEoMjApOworICAgICAgICAgICAgbWRlbGF5KDIwKTsKIAogICAgICAgICAgICAgLyogTm93IGVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCAweDJGNUIsIHBoeV9zYXZlZF9kYXRhKTsKIAotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgICAgICBody0+ZmZlX2NvbmZpZ19zdGF0ZSA9IGUxMDAwX2ZmZV9jb25maWdfZW5hYmxlZDsKQEAgLTcxMzgsMjAgKzcxNTMsMjAgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfc2V0X3BoeV9tb2RlIik7CiAKLSAgICBpZigoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ1X3Jldl8zKSAmJgotICAgICAgIChody0+bWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikpIHsKKyAgICBpZiAoKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0NV9yZXZfMykgJiYKKyAgICAgICAgKGh3LT5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSkgewogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9lZXByb20oaHcsIEVFUFJPTV9QSFlfQ0xBU1NfV09SRCwgMSwgJmVlcHJvbV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkgeworICAgICAgICBpZiAocmV0X3ZhbCkgewogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0KIAotICAgICAgICBpZigoZWVwcm9tX2RhdGEgIT0gRUVQUk9NX1JFU0VSVkVEX1dPUkQpICYmCi0gICAgICAgICAgIChlZXByb21fZGF0YSAmIEVFUFJPTV9QSFlfQ0xBU1NfQSkpIHsKKyAgICAgICAgaWYgKChlZXByb21fZGF0YSAhPSBFRVBST01fUkVTRVJWRURfV09SRCkgJiYKKyAgICAgICAgICAgIChlZXByb21fZGF0YSAmIEVFUFJPTV9QSFlfQ0xBU1NfQSkpIHsKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIDB4MDAwQik7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAweDgxMDQpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgICAgICBody0+cGh5X3Jlc2V0X2Rpc2FibGUgPSBGQUxTRTsKQEAgLTcyMDIsMTYgKzcyMTcsMTYgQEAKICAgICAgICAgcGh5X2N0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgUEhZX0NUUkwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCi0gICAgaWYoIWFjdGl2ZSkgewotICAgICAgICBpZihody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDFfcmV2XzIgfHwKLSAgICAgICAgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CisgICAgaWYgKCFhY3RpdmUpIHsKKyAgICAgICAgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0MV9yZXZfMiB8fAorICAgICAgICAgICAgaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQ3X3Jldl8yKSB7CiAgICAgICAgICAgICBwaHlfZGF0YSAmPSB+SUdQMDFFMTAwMF9HTUlJX0ZMRVhfU1BEOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfR01JSV9GSUZPLCBwaHlfZGF0YSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKQEAgLTcyMzMsMTMgKzcyNDgsMTMgQEAKICAgICAgICAgaWYgKGh3LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vbikgewogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwaHlfZGF0YSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgICAgIHBoeV9kYXRhIHw9IElHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQ7CiAgICAgICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlfZGF0YSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0gZWxzZSBpZiAoaHctPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29mZikgewogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCkBAIC03MjUwLDE5ICs3MjY1LDE5IEBACiAgICAgICAgICAgICBwaHlfZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBoeV9kYXRhKTsKLSAgICAgICAgICAgIGlmKHJldF92YWwpCisgICAgICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICAgICAgfQogCi0gICAgfSBlbHNlIGlmKChody0+YXV0b25lZ19hZHZlcnRpc2VkID09IEFVVE9ORUdfQURWRVJUSVNFX1NQRUVEX0RFRkFVTFQpIHx8Ci0gICAgICAgICAgICAgIChody0+YXV0b25lZ19hZHZlcnRpc2VkID09IEFVVE9ORUdfQURWRVJUSVNFXzEwX0FMTCApIHx8Ci0gICAgICAgICAgICAgIChody0+YXV0b25lZ19hZHZlcnRpc2VkID09IEFVVE9ORUdfQURWRVJUSVNFXzEwXzEwMF9BTEwpKSB7CisgICAgfSBlbHNlIGlmICgoaHctPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUKSB8fAorICAgICAgICAgICAgICAgKGh3LT5hdXRvbmVnX2FkdmVydGlzZWQgPT0gQVVUT05FR19BRFZFUlRJU0VfMTBfQUxMICkgfHwKKyAgICAgICAgICAgICAgIChody0+YXV0b25lZ19hZHZlcnRpc2VkID09IEFVVE9ORUdfQURWRVJUSVNFXzEwXzEwMF9BTEwpKSB7CiAKLSAgICAgICAgaWYoaHctPm1hY190eXBlID09IGUxMDAwXzgyNTQxX3Jldl8yIHx8CisgICAgICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NDFfcmV2XzIgfHwKICAgICAgICAgICAgIGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MjU0N19yZXZfMikgewogICAgICAgICAgICAgcGh5X2RhdGEgfD0gSUdQMDFFMTAwMF9HTUlJX0ZMRVhfU1BEOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfR01JSV9GSUZPLCBwaHlfZGF0YSk7Ci0gICAgICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKQEAgLTcyNzksMTIgKzcyOTQsMTIgQEAKIAogICAgICAgICAvKiBXaGVuIExQTFUgaXMgZW5hYmxlZCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgIHBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIHBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIH0KQEAgLTczMTQsMTQgKzczMjksMTQgQEAKICAgICB1aW50MTZfdCBwaHlfZGF0YTsKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldF9kMF9scGx1X3N0YXRlIik7CiAKLSAgICBpZihody0+bWFjX3R5cGUgPD0gZTEwMDBfODI1NDdfcmV2XzIpCisgICAgaWYgKGh3LT5tYWNfdHlwZSA8PSBlMTAwMF84MjU0N19yZXZfMikKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pIHsKICAgICAgICAgcGh5X2N0cmwgPSBFMTAwMF9SRUFEX1JFRyhodywgUEhZX0NUUkwpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsICZwaHlfZGF0YSk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCkBAIC03MzQzLDEzICs3MzU4LDEzIEBACiAgICAgICAgIGlmIChody0+c21hcnRfc3BlZWQgPT0gZTEwMDBfc21hcnRfc3BlZWRfb24pIHsKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGh5X2RhdGEpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgICAgICBwaHlfZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X2RhdGEpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9IGVsc2UgaWYgKGh3LT5zbWFydF9zcGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKICAgICAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLApAQCAtNzM2MCw3ICs3Mzc1LDcgQEAKICAgICAgICAgICAgIHBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwogICAgICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5X2RhdGEpOwotICAgICAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogICAgICAgICB9CiAKQEAgLTczNzksMTIgKzczOTQsMTIgQEAKIAogICAgICAgICAvKiBXaGVuIExQTFUgaXMgZW5hYmxlZCB3ZSBzaG91bGQgZGlzYWJsZSBTbWFydFNwZWVkICovCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLCAmcGh5X2RhdGEpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgIHBoeV9kYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwogICAgICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsIHBoeV9kYXRhKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIH0KQEAgLTc0MDUsNyArNzQyMCw3IEBACiAKICAgICBERUJVR0ZVTkMoImUxMDAwX3NldF92Y29fc3BlZWQiKTsKIAotICAgIHN3aXRjaChody0+bWFjX3R5cGUpIHsKKyAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGNhc2UgZTEwMDBfODI1NDVfcmV2XzM6CiAgICAgY2FzZSBlMTAwMF84MjU0Nl9yZXZfMzoKICAgICAgICBicmVhazsKQEAgLTc0MTYsMzkgKzc0MzEsMzkgQEAKICAgICAvKiBTZXQgUEhZIHJlZ2lzdGVyIDMwLCBwYWdlIDUsIGJpdCA4IHRvIDAgKi8KIAogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgJmRlZmF1bHRfcGFnZSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1BBR0VfU0VMRUNULCAweDAwMDUpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAmcGh5X2RhdGEpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgcGh5X2RhdGEgJj0gfk04OEUxMDAwX1BIWV9WQ09fUkVHX0JJVDg7CiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgcGh5X2RhdGEpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgLyogU2V0IFBIWSByZWdpc3RlciAzMCwgcGFnZSA0LCBiaXQgMTEgdG8gMSAqLwogCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgMHgwMDA0KTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgJnBoeV9kYXRhKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIHBoeV9kYXRhIHw9IE04OEUxMDAwX1BIWV9WQ09fUkVHX0JJVDExOwogICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIHBoeV9kYXRhKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QsIGRlZmF1bHRfcGFnZSk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICByZXR1cm4gRTEwMDBfU1VDQ0VTUzsKQEAgLTc1MDQsNyArNzUxOSw3IEBACiAgICAgICAgIGhpY3IgPSBFMTAwMF9SRUFEX1JFRyhodywgSElDUik7CiAgICAgICAgIGlmICghKGhpY3IgJiBFMTAwMF9ISUNSX0MpKQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIG1zZWNfZGVsYXlfaXJxKDEpOworICAgICAgICBtZGVsYXkoMSk7CiAgICAgfQogCiAgICAgaWYgKGkgPT0gRTEwMDBfTU5HX0RIQ1BfQ09NTUFORF9USU1FT1VUKSB7CkBAIC03NTI3LDcgKzc1NDIsNyBAQAogewogICAgIHVpbnQ4X3QgKnRtcDsKICAgICB1aW50OF90ICpidWZwdHIgPSBidWZmZXI7Ci0gICAgdWludDMyX3QgZGF0YTsKKyAgICB1aW50MzJfdCBkYXRhID0gMDsKICAgICB1aW50MTZfdCByZW1haW5pbmcsIGksIGosIHByZXZfYnl0ZXM7CiAKICAgICAvKiBzdW0gPSBvbmx5IHN1bSBvZiB0aGUgZGF0YSBhbmQgaXQgaXMgbm90IGNoZWNrc3VtICovCkBAIC03NjA3LDcgKzc2MjIsNyBAQAogCiAgICAgYnVmZmVyID0gKHVpbnQ4X3QgKikgaGRyOwogICAgIGkgPSBsZW5ndGg7Ci0gICAgd2hpbGUoaS0tKQorICAgIHdoaWxlIChpLS0pCiAgICAgICAgIHN1bSArPSBidWZmZXJbaV07CiAKICAgICBoZHItPmNoZWNrc3VtID0gMCAtIHN1bTsKQEAgLTc2MzAsOCArNzY0NSw3IEBACiAgKiByZXR1cm5zICAtIEUxMDAwX1NVQ0NFU1MgZm9yIHN1Y2Nlc3MuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQzMl90Ci1lMTAwMF9tbmdfd3JpdGVfY29tbWl0KAotICAgIHN0cnVjdCBlMTAwMF9odyAqIGh3KQorZTEwMDBfbW5nX3dyaXRlX2NvbW1pdChzdHJ1Y3QgZTEwMDBfaHcgKiBodykKIHsKICAgICB1aW50MzJfdCBoaWNyOwogCkBAIC03ODAzLDc1ICs3ODE3LDc1IEBACiAgICAgLyogRGlzYWJsZSB0aGUgdHJhbnNtaXR0ZXIgb24gdGhlIFBIWSAqLwogCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgMHgwMDE5KTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAweEZGRkYpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgMHgwMDAwKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIC8qIFRoaXMgbG9vcCB3aWxsIGVhcmx5LW91dCBpZiB0aGUgTk8gbGluayBjb25kaXRpb24gaGFzIGJlZW4gbWV0LiAqLwotICAgIGZvcihpID0gUEhZX0ZPUkNFX1RJTUU7IGkgPiAwOyBpLS0pIHsKKyAgICBmb3IgKGkgPSBQSFlfRk9SQ0VfVElNRTsgaSA+IDA7IGktLSkgewogICAgICAgICAvKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCB3YWl0IGZvciBMaW5rIFN0YXR1cyBiaXQKICAgICAgICAgICogdG8gYmUgY2xlYXIuCiAgICAgICAgICAqLwogCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZtaWlfc3RhdHVzX3JlZyk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKICAgICAgICAgcmV0X3ZhbCA9IGUxMDAwX3JlYWRfcGh5X3JlZyhodywgUEhZX1NUQVRVUywgJm1paV9zdGF0dXNfcmVnKTsKLSAgICAgICAgaWYocmV0X3ZhbCkKKyAgICAgICAgaWYgKHJldF92YWwpCiAgICAgICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAotICAgICAgICBpZigobWlpX3N0YXR1c19yZWcgJiB+TUlJX1NSX0xJTktfU1RBVFVTKSA9PSAwKSBicmVhazsKLSAgICAgICAgbXNlY19kZWxheV9pcnEoMTAwKTsKKyAgICAgICAgaWYgKChtaWlfc3RhdHVzX3JlZyAmIH5NSUlfU1JfTElOS19TVEFUVVMpID09IDApIGJyZWFrOworICAgICAgICBtZGVsYXkoMTAwKTsKICAgICB9CiAKICAgICAvKiBSZWNvbW1lbmRlZCBkZWxheSB0aW1lIGFmdGVyIGxpbmsgaGFzIGJlZW4gbG9zdCAqLwotICAgIG1zZWNfZGVsYXlfaXJxKDEwMDApOworICAgIG1kZWxheSgxMDAwKTsKIAogICAgIC8qIE5vdyB3ZSB3aWxsIHJlLWVuYWJsZSB0aCB0cmFuc21pdHRlciBvbiB0aGUgUEhZICovCiAKICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1BBR0VfU0VMRUNULCAweDAwMTkpOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwotICAgIG1zZWNfZGVsYXlfaXJxKDUwKTsKKyAgICBtZGVsYXkoNTApOwogICAgIHJldF92YWwgPSBlMTAwMF93cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfR0VOX0NPTlRST0wsIDB4RkZGMCk7Ci0gICAgaWYocmV0X3ZhbCkKKyAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgcmV0dXJuIHJldF92YWw7Ci0gICAgbXNlY19kZWxheV9pcnEoNTApOworICAgIG1kZWxheSg1MCk7CiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9HRU5fQ09OVFJPTCwgMHhGRjAwKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKLSAgICBtc2VjX2RlbGF5X2lycSg1MCk7CisgICAgbWRlbGF5KDUwKTsKICAgICByZXRfdmFsID0gZTEwMDBfd3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAweDAwMDApOwotICAgIGlmKHJldF92YWwpCisgICAgaWYgKHJldF92YWwpCiAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgcmV0X3ZhbCA9IGUxMDAwX3dyaXRlX3BoeV9yZWcoaHcsIE04OEUxMDAwX1BIWV9QQUdFX1NFTEVDVCwgMHgwMDAwKTsKLSAgICBpZihyZXRfdmFsKQorICAgIGlmIChyZXRfdmFsKQogICAgICAgICByZXR1cm4gcmV0X3ZhbDsKIAogICAgIC8qIFRoaXMgbG9vcCB3aWxsIGVhcmx5LW91dCBpZiB0aGUgbGluayBjb25kaXRpb24gaGFzIGJlZW4gbWV0LiAqLwotICAgIGZvcihpID0gUEhZX0ZPUkNFX1RJTUU7IGkgPiAwOyBpLS0pIHsKKyAgICBmb3IgKGkgPSBQSFlfRk9SQ0VfVElNRTsgaSA+IDA7IGktLSkgewogICAgICAgICAvKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFuZCB3YWl0IGZvciBMaW5rIFN0YXR1cyBiaXQKICAgICAgICAgICogdG8gYmUgc2V0LgogICAgICAgICAgKi8KIAogICAgICAgICByZXRfdmFsID0gZTEwMDBfcmVhZF9waHlfcmVnKGh3LCBQSFlfU1RBVFVTLCAmbWlpX3N0YXR1c19yZWcpOwotICAgICAgICBpZihyZXRfdmFsKQorICAgICAgICBpZiAocmV0X3ZhbCkKICAgICAgICAgICAgIHJldHVybiByZXRfdmFsOwogCiAgICAgICAgIHJldF92YWwgPSBlMTAwMF9yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZtaWlfc3RhdHVzX3JlZyk7Ci0gICAgICAgIGlmKHJldF92YWwpCisgICAgICAgIGlmIChyZXRfdmFsKQogICAgICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAKLSAgICAgICAgaWYobWlpX3N0YXR1c19yZWcgJiBNSUlfU1JfTElOS19TVEFUVVMpIGJyZWFrOwotICAgICAgICBtc2VjX2RlbGF5X2lycSgxMDApOworICAgICAgICBpZiAobWlpX3N0YXR1c19yZWcgJiBNSUlfU1JfTElOS19TVEFUVVMpIGJyZWFrOworICAgICAgICBtZGVsYXkoMTAwKTsKICAgICB9CiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC03OTA5LDYgKzc5MjMsNyBAQAogICogcmV0dXJuczogLSBub25lLgogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgMAogdm9pZAogZTEwMDBfZW5hYmxlX3BjaWV4X21hc3RlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewpAQCAtNzkyMyw2ICs3OTM4LDcgQEAKICAgICBjdHJsICY9IH5FMTAwMF9DVFJMX0dJT19NQVNURVJfRElTQUJMRTsKICAgICBFMTAwMF9XUklURV9SRUcoaHcsIENUUkwsIGN0cmwpOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC03OTQ3LDE1ICs3OTYzLDE1IEBACiAKICAgICBlMTAwMF9zZXRfcGNpX2V4cHJlc3NfbWFzdGVyX2Rpc2FibGUoaHcpOwogCi0gICAgd2hpbGUodGltZW91dCkgewotICAgICAgICBpZighKEUxMDAwX1JFQURfUkVHKGh3LCBTVEFUVVMpICYgRTEwMDBfU1RBVFVTX0dJT19NQVNURVJfRU5BQkxFKSkKKyAgICB3aGlsZSAodGltZW91dCkgeworICAgICAgICBpZiAoIShFMTAwMF9SRUFEX1JFRyhodywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19HSU9fTUFTVEVSX0VOQUJMRSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgdWRlbGF5KDEwMCk7CiAgICAgICAgIHRpbWVvdXQtLTsKICAgICB9CiAKLSAgICBpZighdGltZW91dCkgeworICAgIGlmICghdGltZW91dCkgewogICAgICAgICBERUJVR09VVCgiTWFzdGVyIHJlcXVlc3RzIGFyZSBwZW5kaW5nLlxuIik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX01BU1RFUl9SRVFVRVNUU19QRU5ESU5HOwogICAgIH0KQEAgLTc5ODIsNyArNzk5OCw3IEBACiAKICAgICBzd2l0Y2ggKGh3LT5tYWNfdHlwZSkgewogICAgIGRlZmF1bHQ6Ci0gICAgICAgIG1zZWNfZGVsYXkoNSk7CisgICAgICAgIG1zbGVlcCg1KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF84MjU3MToKICAgICBjYXNlIGUxMDAwXzgyNTcyOgpAQCAtNzk5MiwxMSArODAwOCwxMSBAQAogICAgICAgICB3aGlsZSAodGltZW91dCkgewogICAgICAgICAgICAgaWYgKEUxMDAwX1JFQURfUkVHKGh3LCBFRUNEKSAmIEUxMDAwX0VFQ0RfQVVUT19SRCkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGVsc2UgbXNlY19kZWxheSgxKTsKKyAgICAgICAgICAgIGVsc2UgbXNsZWVwKDEpOwogICAgICAgICAgICAgdGltZW91dC0tOwogICAgICAgICB9CiAKLSAgICAgICAgaWYoIXRpbWVvdXQpIHsKKyAgICAgICAgaWYgKCF0aW1lb3V0KSB7CiAgICAgICAgICAgICBERUJVR09VVCgiQXV0byByZWFkIGJ5IEhXIGZyb20gRUVQUk9NIGhhcyBub3QgY29tcGxldGVkLlxuIik7CiAgICAgICAgICAgICByZXR1cm4gLUUxMDAwX0VSUl9SRVNFVDsKICAgICAgICAgfQpAQCAtODAwNyw3ICs4MDIzLDcgQEAKICAgICAgKiBOZWVkIHRvIHdhaXQgZm9yIFBIWSBjb25maWd1cmF0aW9uIGNvbXBsZXRpb24gYmVmb3JlIGFjY2Vzc2luZyBOVk0KICAgICAgKiBhbmQgUEhZLiAqLwogICAgIGlmIChody0+bWFjX3R5cGUgPT0gZTEwMDBfODI1NzMpCi0gICAgICAgIG1zZWNfZGVsYXkoMjUpOworICAgICAgICBtc2xlZXAoMjUpOwogCiAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiB9CkBAIC04MDMxLDcgKzgwNDcsNyBAQAogCiAgICAgc3dpdGNoIChody0+bWFjX3R5cGUpIHsKICAgICBkZWZhdWx0OgotICAgICAgICBtc2VjX2RlbGF5X2lycSgxMCk7CisgICAgICAgIG1kZWxheSgxMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgZTEwMDBfODAwMDNlczJsYW46CiAgICAgICAgIC8qIFNlcGFyYXRlICpfQ0ZHX0RPTkVfKiBiaXQgZm9yIGVhY2ggcG9ydCAqLwpAQCAtODA0NCw3ICs4MDYwLDcgQEAKICAgICAgICAgICAgIGlmIChFMTAwMF9SRUFEX1JFRyhodywgRUVNTkdDVEwpICYgY2ZnX21hc2spCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbXNlY19kZWxheSgxKTsKKyAgICAgICAgICAgICAgICBtc2xlZXAoMSk7CiAgICAgICAgICAgICB0aW1lb3V0LS07CiAgICAgICAgIH0KIApAQCAtODA3Nyw3ICs4MDkzLDcgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfZ2V0X2h3X2VlcHJvbV9zZW1hcGhvcmUiKTsKIAotICAgIGlmKCFody0+ZWVwcm9tX3NlbWFwaG9yZV9wcmVzZW50KQorICAgIGlmICghaHctPmVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudCkKICAgICAgICAgcmV0dXJuIEUxMDAwX1NVQ0NFU1M7CiAKICAgICBpZiAoaHctPm1hY190eXBlID09IGUxMDAwXzgwMDAzZXMybGFuKSB7CkBAIC04MDg4LDIwICs4MTA0LDIwIEBACiAKICAgICAvKiBHZXQgdGhlIEZXIHNlbWFwaG9yZS4gKi8KICAgICB0aW1lb3V0ID0gaHctPmVlcHJvbS53b3JkX3NpemUgKyAxOwotICAgIHdoaWxlKHRpbWVvdXQpIHsKKyAgICB3aGlsZSAodGltZW91dCkgewogICAgICAgICBzd3NtID0gRTEwMDBfUkVBRF9SRUcoaHcsIFNXU00pOwogICAgICAgICBzd3NtIHw9IEUxMDAwX1NXU01fU1dFU01CSTsKICAgICAgICAgRTEwMDBfV1JJVEVfUkVHKGh3LCBTV1NNLCBzd3NtKTsKICAgICAgICAgLyogaWYgd2UgbWFuYWdlZCB0byBzZXQgdGhlIGJpdCB3ZSBnb3QgdGhlIHNlbWFwaG9yZS4gKi8KICAgICAgICAgc3dzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV1NNKTsKLSAgICAgICAgaWYoc3dzbSAmIEUxMDAwX1NXU01fU1dFU01CSSkKKyAgICAgICAgaWYgKHN3c20gJiBFMTAwMF9TV1NNX1NXRVNNQkkpCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICB1ZGVsYXkoNTApOwogICAgICAgICB0aW1lb3V0LS07CiAgICAgfQogCi0gICAgaWYoIXRpbWVvdXQpIHsKKyAgICBpZiAoIXRpbWVvdXQpIHsKICAgICAgICAgLyogUmVsZWFzZSBzZW1hcGhvcmVzICovCiAgICAgICAgIGUxMDAwX3B1dF9od19lZXByb21fc2VtYXBob3JlKGh3KTsKICAgICAgICAgREVCVUdPVVQoIkRyaXZlciBjYW4ndCBhY2Nlc3MgdGhlIEVlcHJvbSAtIFNXRVNNQkkgYml0IGlzIHNldC5cbiIpOwpAQCAtODEyNiw3ICs4MTQyLDcgQEAKIAogICAgIERFQlVHRlVOQygiZTEwMDBfcHV0X2h3X2VlcHJvbV9zZW1hcGhvcmUiKTsKIAotICAgIGlmKCFody0+ZWVwcm9tX3NlbWFwaG9yZV9wcmVzZW50KQorICAgIGlmICghaHctPmVlcHJvbV9zZW1hcGhvcmVfcHJlc2VudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgc3dzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBTV1NNKTsKQEAgLTgxNDgsNyArODE2NCw3IEBACiAgKiAgICAgICAgICAgIEUxMDAwX1NVQ0NFU1MgYXQgYW55IG90aGVyIGNhc2UuCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF9nZXRfc29mdHdhcmVfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgaW50MzJfdCB0aW1lb3V0ID0gaHctPmVlcHJvbS53b3JkX3NpemUgKyAxOwpAQCAtODE1OSwxNiArODE3NSwxNiBAQAogICAgIGlmIChody0+bWFjX3R5cGUgIT0gZTEwMDBfODAwMDNlczJsYW4pCiAgICAgICAgIHJldHVybiBFMTAwMF9TVUNDRVNTOwogCi0gICAgd2hpbGUodGltZW91dCkgeworICAgIHdoaWxlICh0aW1lb3V0KSB7CiAgICAgICAgIHN3c20gPSBFMTAwMF9SRUFEX1JFRyhodywgU1dTTSk7CiAgICAgICAgIC8qIElmIFNNQkkgYml0IGNsZWFyZWQsIGl0IGlzIG5vdyBzZXQgYW5kIHdlIGhvbGQgdGhlIHNlbWFwaG9yZSAqLwotICAgICAgICBpZighKHN3c20gJiBFMTAwMF9TV1NNX1NNQkkpKQorICAgICAgICBpZiAoIShzd3NtICYgRTEwMDBfU1dTTV9TTUJJKSkKICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBtc2VjX2RlbGF5X2lycSgxKTsKKyAgICAgICAgbWRlbGF5KDEpOwogICAgICAgICB0aW1lb3V0LS07CiAgICAgfQogCi0gICAgaWYoIXRpbWVvdXQpIHsKKyAgICBpZiAoIXRpbWVvdXQpIHsKICAgICAgICAgREVCVUdPVVQoIkRyaXZlciBjYW4ndCBhY2Nlc3MgZGV2aWNlIC0gU01CSSBiaXQgaXMgc2V0LlxuIik7CiAgICAgICAgIHJldHVybiAtRTEwMDBfRVJSX1JFU0VUOwogICAgIH0KQEAgLTgxODMsNyArODE5OSw3IEBACiAgKiBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBlMTAwMF9yZWxlYXNlX3NvZnR3YXJlX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIHVpbnQzMl90IHN3c207CkBAIC04MjQ0LDcgKzgyNjAsNyBAQAogICAgIGNhc2UgZTEwMDBfODI1NzM6CiAgICAgY2FzZSBlMTAwMF84MDAwM2VzMmxhbjoKICAgICAgICAgZndzbSA9IEUxMDAwX1JFQURfUkVHKGh3LCBGV1NNKTsKLSAgICAgICAgaWYoKGZ3c20gJiBFMTAwMF9GV1NNX01PREVfTUFTSykgIT0gMCkKKyAgICAgICAgaWYgKChmd3NtICYgRTEwMDBfRldTTV9NT0RFX01BU0spICE9IDApCiAgICAgICAgICAgICByZXR1cm4gVFJVRTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBlMTAwMF9pY2g4bGFuOgpAQCAtODI2NSw3ICs4MjgxLDcgQEAKICAqIHJldHVybnM6IEUxMDAwX1NVQ0NFU1MKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfc2V0X3BjaV9leF9ub19zbm9vcChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBub19zbm9vcCkKIHsKICAgICB1aW50MzJfdCBnY3JfcmVnID0gMDsKQEAgLTgzMDYsNyArODMyMiw3IEBACiAgKiBodzogU3RydWN0IGNvbnRhaW5pbmcgdmFyaWFibGVzIGFjY2Vzc2VkIGJ5IHNoYXJlZCBjb2RlCiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF9nZXRfc29mdHdhcmVfZmxhZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogICAgIGludDMyX3QgdGltZW91dCA9IFBIWV9DRkdfVElNRU9VVDsKQEAgLTgzMjMsNyArODMzOSw3IEBACiAgICAgICAgICAgICBleHRjbmZfY3RybCA9IEUxMDAwX1JFQURfUkVHKGh3LCBFWFRDTkZfQ1RSTCk7CiAgICAgICAgICAgICBpZiAoZXh0Y25mX2N0cmwgJiBFMTAwMF9FWFRDTkZfQ1RSTF9TV0ZMQUcpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBtc2VjX2RlbGF5X2lycSgxKTsKKyAgICAgICAgICAgIG1kZWxheSgxKTsKICAgICAgICAgICAgIHRpbWVvdXQtLTsKICAgICAgICAgfQogCkBAIC04MzQ1LDcgKzgzNjEsNyBAQAogICogaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi12b2lkCitzdGF0aWMgdm9pZAogZTEwMDBfcmVsZWFzZV9zb2Z0d2FyZV9mbGFnKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdWludDMyX3QgZXh0Y25mX2N0cmw7CkBAIC04MzY5LDYgKzgzODUsNyBAQAogICogaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgMAogaW50MzJfdAogZTEwMDBfaWZlX2Rpc2FibGVfZHluYW1pY19wb3dlcl9kb3duKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC04Mzg4LDYgKzg0MDUsNyBAQAogCiAgICAgcmV0dXJuIHJldF92YWw7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtODM5Nyw2ICs4NDE1LDcgQEAKICAqIGh3OiBTdHJ1Y3QgY29udGFpbmluZyB2YXJpYWJsZXMgYWNjZXNzZWQgYnkgc2hhcmVkIGNvZGUKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmIDAKIGludDMyX3QKIGUxMDAwX2lmZV9lbmFibGVfZHluYW1pY19wb3dlcl9kb3duKHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CkBAIC04NDE2LDYgKzg0MzUsNyBAQAogCiAgICAgcmV0dXJuIHJldF92YWw7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBSZWFkcyBhIDE2IGJpdCB3b3JkIG9yIHdvcmRzIGZyb20gdGhlIEVFUFJPTSB1c2luZyB0aGUgSUNIOCdzIGZsYXNoIGFjY2VzcwpAQCAtODQyNiw3ICs4NDQ2LDcgQEAKICAqIGRhdGEgLSB3b3JkIHJlYWQgZnJvbSB0aGUgRUVQUk9NCiAgKiB3b3JkcyAtIG51bWJlciBvZiB3b3JkcyB0byByZWFkCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfcmVhZF9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IHdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqZGF0YSkKIHsKQEAgLTg0ODIsNyArODUwMiw3IEBACiAgKiB3b3JkcyAtIG51bWJlciBvZiB3b3JkcyB0byB3cml0ZQogICogZGF0YSAtIHdvcmRzIHRvIHdyaXRlIHRvIHRoZSBFRVBST00KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF93cml0ZV9lZXByb21faWNoOChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBvZmZzZXQsIHVpbnQxNl90IHdvcmRzLAogICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgKmRhdGEpCiB7CkBAIC04NTI5LDcgKzg1NDksNyBAQAogICoKICAqIGh3IC0gVGhlIHBvaW50ZXIgdG8gdGhlIGh3IHN0cnVjdHVyZQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfaWNoOF9jeWNsZV9pbml0KHN0cnVjdCBlMTAwMF9odyAqaHcpCiB7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfc3RhdHVzIGhzZnN0czsKQEAgLTg1OTYsNyArODYxNiw3IEBACiAgKgogICogaHcgLSBUaGUgcG9pbnRlciB0byB0aGUgaHcgc3RydWN0dXJlCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF9pY2g4X2ZsYXNoX2N5Y2xlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHRpbWVvdXQpCiB7CiAgICAgdW5pb24gaWNoOF9od3NfZmxhc2hfY3RybCBoc2ZsY3RsOwpAQCAtODYzMSw3ICs4NjUxLDcgQEAKICAqIHNpemUgLSBTaXplIG9mIGRhdGEgdG8gcmVhZCwgMT1ieXRlIDI9d29yZAogICogZGF0YSAtIFBvaW50ZXIgdG8gdGhlIHdvcmQgdG8gc3RvcmUgdGhlIHZhbHVlIHJlYWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfcmVhZF9pY2g4X2RhdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLCB1aW50MTZfdCogZGF0YSkKIHsKQEAgLTg3MTAsNyArODczMCw3IEBACiAgKiBzaXplIC0gU2l6ZSBvZiBkYXRhIHRvIHJlYWQsIDE9Ynl0ZSAyPXdvcmQKICAqIGRhdGEgLSBUaGUgYnl0ZShzKSB0byB3cml0ZSB0byB0aGUgTlZNLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorc3RhdGljIGludDMyX3QKIGUxMDAwX3dyaXRlX2ljaDhfZGF0YShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBpbmRleCwgdWludDMyX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBkYXRhKQogewpAQCAtODc4NSw3ICs4ODA1LDcgQEAKICAqIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBieXRlIHRvIHJlYWQuCiAgKiBkYXRhIC0gUG9pbnRlciB0byBhIGJ5dGUgdG8gc3RvcmUgdGhlIHZhbHVlIHJlYWQuCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfcmVhZF9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsIHVpbnQ4X3QqIGRhdGEpCiB7CiAgICAgaW50MzJfdCBzdGF0dXMgPSBFMTAwMF9TVUNDRVNTOwpAQCAtODgwOCw3ICs4ODI4LDcgQEAKICAqIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBieXRlIHRvIHdyaXRlLgogICogYnl0ZSAtIFRoZSBieXRlIHRvIHdyaXRlIHRvIHRoZSBOVk0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfdmVyaWZ5X3dyaXRlX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBpbmRleCwgdWludDhfdCBieXRlKQogewogICAgIGludDMyX3QgZXJyb3IgPSBFMTAwMF9TVUNDRVNTOwpAQCAtODgzOSw3ICs4ODU5LDcgQEAKICAqIGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBieXRlIHRvIHJlYWQuCiAgKiBkYXRhIC0gVGhlIGJ5dGUgdG8gd3JpdGUgdG8gdGhlIE5WTS4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF93cml0ZV9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsIHVpbnQ4X3QgZGF0YSkKIHsKICAgICBpbnQzMl90IHN0YXR1cyA9IEUxMDAwX1NVQ0NFU1M7CkBAIC04ODU3LDcgKzg4NzcsNyBAQAogICogaW5kZXggLSBUaGUgc3RhcnRpbmcgYnl0ZSBpbmRleCBvZiB0aGUgd29yZCB0byByZWFkLgogICogZGF0YSAtIFBvaW50ZXIgdG8gYSB3b3JkIHRvIHN0b3JlIHRoZSB2YWx1ZSByZWFkLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorc3RhdGljIGludDMyX3QKIGUxMDAwX3JlYWRfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50MTZfdCAqZGF0YSkKIHsKICAgICBpbnQzMl90IHN0YXR1cyA9IEUxMDAwX1NVQ0NFU1M7CkBAIC04ODcyLDYgKzg4OTIsNyBAQAogICogaW5kZXggLSBUaGUgc3RhcnRpbmcgYnl0ZSBpbmRleCBvZiB0aGUgd29yZCB0byByZWFkLgogICogZGF0YSAtIFRoZSB3b3JkIHRvIHdyaXRlIHRvIHRoZSBOVk0uCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWYgMAogaW50MzJfdAogZTEwMDBfd3JpdGVfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LCB1aW50MTZfdCBkYXRhKQogewpAQCAtODg3OSw2ICs4OTAwLDcgQEAKICAgICBzdGF0dXMgPSBlMTAwMF93cml0ZV9pY2g4X2RhdGEoaHcsIGluZGV4LCAyLCBkYXRhKTsKICAgICByZXR1cm4gc3RhdHVzOwogfQorI2VuZGlmICAvKiAgMCAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogRXJhc2VzIHRoZSBiYW5rIHNwZWNpZmllZC4gRWFjaCBiYW5rIGlzIGEgNGsgYmxvY2suIFNlZ21lbnRzIGFyZSAwIGJhc2VkLgpAQCAtODg4Nyw3ICs4OTA5LDcgQEAKICAqIGh3IC0gcG9pbnRlciB0byBlMTAwMF9odyBzdHJ1Y3R1cmUKICAqIHNlZ21lbnQgLSAwIGZvciBmaXJzdCBzZWdtZW50LCAxIGZvciBzZWNvbmQgc2VnbWVudCwgZXRjLgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotaW50MzJfdAorc3RhdGljIGludDMyX3QKIGUxMDAwX2VyYXNlX2ljaDhfNGtfc2VnbWVudChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBzZWdtZW50KQogewogICAgIHVuaW9uIGljaDhfaHdzX2ZsYXNoX3N0YXR1cyBoc2ZzdHM7CkBAIC04OTg0LDYgKzkwMDYsNyBAQAogICogaHc6IFN0cnVjdCBjb250YWluaW5nIHZhcmlhYmxlcyBhY2Nlc3NlZCBieSBzaGFyZWQgY29kZQogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZiAwCiBpbnQzMl90CiBlMTAwMF9kdXBsZXhfcmV2ZXJzYWwoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKQEAgLTkwMTIsOCArOTAzNSw5IEBACiAKICAgICByZXR1cm4gcmV0X3ZhbDsKIH0KKyNlbmRpZiAgLyogIDAgICovCiAKLWludDMyX3QKK3N0YXRpYyBpbnQzMl90CiBlMTAwMF9pbml0X2xjZF9mcm9tX252bV9jb25maWdfcmVnaW9uKHN0cnVjdCBlMTAwMF9odyAqaHcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNuZl9iYXNlX2FkZHIsIHVpbnQzMl90IGNuZl9zaXplKQogewpAQCAtOTA0Nyw3ICs5MDcxLDcgQEAKIH0KIAogCi1pbnQzMl90CitzdGF0aWMgaW50MzJfdAogZTEwMDBfaW5pdF9sY2RfZnJvbV9udm0oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKICAgICB1aW50MzJfdCByZWdfZGF0YSwgY25mX2Jhc2VfYWRkciwgY25mX3NpemUsIHJldF92YWwsIGxvb3A7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaAppbmRleCBmOTM0MWUzLi5hMTcwZTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKQEAgLTMyMywxMyArMzIzLDggQEAKIGludDMyX3QgZTEwMDBfcGh5X2h3X3Jlc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcpOwogaW50MzJfdCBlMTAwMF9waHlfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiB2b2lkIGUxMDAwX3BoeV9wb3dlcmRvd25fd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfa3VtZXJhbl9sb2NrX2xvc3Nfd29ya2Fyb3VuZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfaW5pdF9sY2RfZnJvbV9udm1fY29uZmlnX3JlZ2lvbihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBjbmZfYmFzZV9hZGRyLCB1aW50MzJfdCBjbmZfc2l6ZSk7Ci1pbnQzMl90IGUxMDAwX2luaXRfbGNkX2Zyb21fbnZtKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogaW50MzJfdCBlMTAwMF9waHlfZ2V0X2luZm8oc3RydWN0IGUxMDAwX2h3ICpodywgc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHlfaW5mbyk7CiBpbnQzMl90IGUxMDAwX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotaW50MzJfdCBlMTAwMF9yZWFkX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MTZfdCAqZGF0YSk7Ci1pbnQzMl90IGUxMDAwX3dyaXRlX2ttcm5fcmVnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZ19hZGRyLCB1aW50MTZfdCBkYXRhKTsKIAogLyogRUVQUk9NIEZ1bmN0aW9ucyAqLwogaW50MzJfdCBlMTAwMF9pbml0X2VlcHJvbV9wYXJhbXMoc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC0zNDEsOSArMzM2LDkgQEAKICNkZWZpbmUgRTEwMDBfSElfTUFYX01OR19EQVRBX0xFTkdUSCAgICAweDZGOCAgIC8qIEhvc3QgSW50ZXJmYWNlIGRhdGEgbGVuZ3RoICovCiAKICNkZWZpbmUgRTEwMDBfTU5HX0RIQ1BfQ09NTUFORF9USU1FT1VUICAxMCAgICAgIC8qIFRpbWUgaW4gbXMgdG8gcHJvY2VzcyBNTkcgY29tbWFuZCAqLwotI2RlZmluZSBFMTAwMF9NTkdfREhDUF9DT09LSUVfT0ZGU0VUCTB4NkYwICAgLyogQ29va2llIG9mZnNldCAqLwotI2RlZmluZSBFMTAwMF9NTkdfREhDUF9DT09LSUVfTEVOR1RICTB4MTAgICAgLyogQ29va2llIGxlbmd0aCAqLwotI2RlZmluZSBFMTAwMF9NTkdfSUFNVF9NT0RFCQkweDMKKyNkZWZpbmUgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX09GRlNFVCAgICAweDZGMCAgIC8qIENvb2tpZSBvZmZzZXQgKi8KKyNkZWZpbmUgRTEwMDBfTU5HX0RIQ1BfQ09PS0lFX0xFTkdUSCAgICAweDEwICAgIC8qIENvb2tpZSBsZW5ndGggKi8KKyNkZWZpbmUgRTEwMDBfTU5HX0lBTVRfTU9ERSAgICAgICAgICAgICAweDMKICNkZWZpbmUgRTEwMDBfTU5HX0lDSF9JQU1UX01PREUgICAgICAgICAweDIKICNkZWZpbmUgRTEwMDBfSUFNVF9TSUdOQVRVUkUgICAgICAgICAgICAweDU0NEQ0MTQ5IC8qIEludGVsKFIpIEFjdGl2ZSBNYW5hZ2VtZW50IFRlY2hub2xvZ3kgc2lnbmF0dXJlICovCiAKQEAgLTM5MCw3ICszODUsNyBAQAogI2VuZGlmCiAKIGludDMyX3QgZTEwMDBfbW5nX3dyaXRlX2RoY3BfaW5mbyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50OF90ICpidWZmZXIsCi0JCQkJCQkJdWludDE2X3QgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgpOwogYm9vbGVhbl90IGUxMDAwX2NoZWNrX21uZ19tb2RlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogYm9vbGVhbl90IGUxMDAwX2VuYWJsZV90eF9wa3RfZmlsdGVyaW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCkBAIC00MDAsMTMgKzM5NSw4IEBACiBpbnQzMl90IGUxMDAwX3dyaXRlX2VlcHJvbShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCByZWcsIHVpbnQxNl90IHdvcmRzLCB1aW50MTZfdCAqZGF0YSk7CiBpbnQzMl90IGUxMDAwX3JlYWRfcGFydF9udW0oc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgKiBwYXJ0X251bSk7CiBpbnQzMl90IGUxMDAwX3JlYWRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICogaHcpOwotaW50MzJfdCBlMTAwMF9zd2Z3X3N5bmNfYWNxdWlyZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MTZfdCBtYXNrKTsKLXZvaWQgZTEwMDBfc3dmd19zeW5jX3JlbGVhc2Uoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3QgbWFzayk7Ci12b2lkIGUxMDAwX3JlbGVhc2Vfc29mdHdhcmVfZmxhZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfZ2V0X3NvZnR3YXJlX2ZsYWcoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKIC8qIEZpbHRlcnMgKG11bHRpY2FzdCwgdmxhbiwgcmVjZWl2ZSkgKi8KLXZvaWQgZTEwMDBfbWNfYWRkcl9saXN0X3VwZGF0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50OF90ICogbWNfYWRkcl9saXN0LCB1aW50MzJfdCBtY19hZGRyX2NvdW50LCB1aW50MzJfdCBwYWQsIHVpbnQzMl90IHJhcl91c2VkX2NvdW50KTsKIHVpbnQzMl90IGUxMDAwX2hhc2hfbWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50OF90ICogbWNfYWRkcik7CiB2b2lkIGUxMDAwX210YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaGFzaF92YWx1ZSk7CiB2b2lkIGUxMDAwX3Jhcl9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDhfdCAqIG1jX2FkZHIsIHVpbnQzMl90IHJhcl9pbmRleCk7CkBAIC00MzEsMzEgKzQyMSw5IEBACiB2b2lkIGUxMDAwX3JlYWRfcGNpX2NmZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCByZWcsIHVpbnQxNl90ICogdmFsdWUpOwogdm9pZCBlMTAwMF93cml0ZV9wY2lfY2ZnKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHJlZywgdWludDE2X3QgKiB2YWx1ZSk7CiAvKiBQb3J0IEkvTyBpcyBvbmx5IHN1cHBvcnRlZCBvbiA4MjU0NCBhbmQgbmV3ZXIgKi8KLXVpbnQzMl90IGUxMDAwX2lvX3JlYWQoc3RydWN0IGUxMDAwX2h3ICpodywgdW5zaWduZWQgbG9uZyBwb3J0KTsKLXVpbnQzMl90IGUxMDAwX3JlYWRfcmVnX2lvKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IG9mZnNldCk7CiB2b2lkIGUxMDAwX2lvX3dyaXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVuc2lnbmVkIGxvbmcgcG9ydCwgdWludDMyX3QgdmFsdWUpOwotdm9pZCBlMTAwMF9lbmFibGVfcGNpZXhfbWFzdGVyKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogaW50MzJfdCBlMTAwMF9kaXNhYmxlX3BjaWV4X21hc3RlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfZ2V0X3NvZnR3YXJlX3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXZvaWQgZTEwMDBfcmVsZWFzZV9zb2Z0d2FyZV9zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBpbnQzMl90IGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLWludDMyX3QgZTEwMDBfc2V0X3BjaV9leF9ub19zbm9vcChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBub19zbm9vcCk7Ci0KLWludDMyX3QgZTEwMDBfcmVhZF9pY2g4X2J5dGUoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDMyX3QgaW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmRhdGEpOwotaW50MzJfdCBlMTAwMF92ZXJpZnlfd3JpdGVfaWNoOF9ieXRlKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZSk7Ci1pbnQzMl90IGUxMDAwX3dyaXRlX2ljaDhfYnl0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1aW50MzJfdCBpbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYnl0ZSk7Ci1pbnQzMl90IGUxMDAwX3JlYWRfaWNoOF93b3JkKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCAqZGF0YSk7Ci1pbnQzMl90IGUxMDAwX3JlYWRfaWNoOF9kYXRhKHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplLCB1aW50MTZfdCAqZGF0YSk7Ci1pbnQzMl90IGUxMDAwX3JlYWRfZWVwcm9tX2ljaDgoc3RydWN0IGUxMDAwX2h3ICpodywgdWludDE2X3Qgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IHdvcmRzLCB1aW50MTZfdCAqZGF0YSk7Ci1pbnQzMl90IGUxMDAwX3dyaXRlX2VlcHJvbV9pY2g4KHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQxNl90IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3Qgd29yZHMsIHVpbnQxNl90ICpkYXRhKTsKLWludDMyX3QgZTEwMDBfZXJhc2VfaWNoOF80a19zZWdtZW50KHN0cnVjdCBlMTAwMF9odyAqaHcsIHVpbnQzMl90IHNlZ21lbnQpOwogCiAKICNkZWZpbmUgRTEwMDBfUkVBRF9SRUdfSU8oYSwgcmVnKSBcCkBAIC01MDIsNiArNDcwLDcgQEAKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTcxRUJfQ09QUEVSICAgICAgMHgxMDVFCiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3MUVCX0ZJQkVSICAgICAgIDB4MTA1RgogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzFFQl9TRVJERVMgICAgICAweDEwNjAKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVIgMHgxMEE0CiAjZGVmaW5lIEUxMDAwX0RFVl9JRF84MjU3MkVJX0NPUFBFUiAgICAgIDB4MTA3RAogI2RlZmluZSBFMTAwMF9ERVZfSURfODI1NzJFSV9GSUJFUiAgICAgICAweDEwN0UKICNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTcyRUlfU0VSREVTICAgICAgMHgxMDdGCkBAIC01NTUsNyArNTI0LDcgQEAKIAogCiAvKiA4MDIuMXEgVkxBTiBQYWNrZXQgU2l6ZXMgKi8KLSNkZWZpbmUgVkxBTl9UQUdfU0laRSAgICAgICAgICAgICAgICAgICAgIDQgICAgIC8qIDgwMi4zYWMgdGFnIChub3QgRE1BZWQpICovCisjZGVmaW5lIFZMQU5fVEFHX1NJWkUgIDQgICAgIC8qIDgwMi4zYWMgdGFnIChub3QgRE1BZWQpICovCiAKIC8qIEV0aGVydHlwZSBmaWVsZCB2YWx1ZXMgKi8KICNkZWZpbmUgRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuM2FjIHBhY2tldCAqLwpAQCAtNzI5LDYgKzY5OCw3IEBACiAgICAgRTEwMDBfUlhERVhUX1NUQVRFUlJfQ1hFIHwgICAgICAgICAgICBcCiAgICAgRTEwMDBfUlhERVhUX1NUQVRFUlJfUlhFKQogCisKIC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgKi8KIHN0cnVjdCBlMTAwMF90eF9kZXNjIHsKICAgICB1aW50NjRfdCBidWZmZXJfYWRkcjsgICAgICAgLyogQWRkcmVzcyBvZiB0aGUgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovCkBAIC0yMTE4LDcgKzIwODgsNyBAQAogI2RlZmluZSBFMTAwMF9NQU5DX0VOX0lQX0FERFJfRklMVEVSICAgIDB4MDA0MDAwMDAgLyogRW5hYmxlIElQIGFkZHJlc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpbHRlcmluZyAqLwogI2RlZmluZSBFMTAwMF9NQU5DX0VOX1hTVU1fRklMVEVSICAgMHgwMDgwMDAwMCAvKiBFbmFibGUgY2hlY2tzdW0gZmlsdGVyaW5nICovCi0jZGVmaW5lIEUxMDAwX01BTkNfQlJfRU4gICAgICAgICAgICAweDAxMDAwMDAwIC8qIEVuYWJsZSBicm9hZGNhc3QgZmlsdGVyaW5nICovCisjZGVmaW5lIEUxMDAwX01BTkNfQlJfRU4gICAgICAgICAweDAxMDAwMDAwIC8qIEVuYWJsZSBicm9hZGNhc3QgZmlsdGVyaW5nICovCiAjZGVmaW5lIEUxMDAwX01BTkNfU01CX1JFUSAgICAgICAweDAxMDAwMDAwIC8qIFNNQnVzIFJlcXVlc3QgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19TTUJfR05UICAgICAgIDB4MDIwMDAwMDAgLyogU01CdXMgR3JhbnQgKi8KICNkZWZpbmUgRTEwMDBfTUFOQ19TTUJfQ0xLX0lOICAgIDB4MDQwMDAwMDAgLyogU01CdXMgQ2xvY2sgSW4gKi8KQEAgLTIyMDQsNyArMjE3NCw3IEBACiAKICNkZWZpbmUgRTEwMDBfTURBTElHTiAgICAgICAgICA0MDk2CiAKLS8qIFBDSS1FeCByZWdpc3RlcnMgKi8KKy8qIFBDSS1FeCByZWdpc3RlcnMqLwogCiAvKiBQQ0ktRXggQ29udHJvbCBSZWdpc3RlciAqLwogI2RlZmluZSBFMTAwMF9HQ1JfUlhEX05PX1NOT09QICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTIyNTYsNyArMjIyNiw3IEBACiAjZGVmaW5lIEVFUFJPTV9FV0RTX09QQ09ERV9NSUNST1dJUkUgIDB4MTAgLyogRUVQUk9NIGVyYXN0L3dyaXRlIGRpc2FibGUgKi8KIAogLyogRUVQUk9NIENvbW1hbmRzIC0gU1BJICovCi0jZGVmaW5lIEVFUFJPTV9NQVhfUkVUUllfU1BJICAgIDUwMDAgLyogTWF4IHdhaXQgb2YgNW1zLCBmb3IgUkRZIHNpZ25hbCAqLworI2RlZmluZSBFRVBST01fTUFYX1JFVFJZX1NQSSAgICAgICAgNTAwMCAvKiBNYXggd2FpdCBvZiA1bXMsIGZvciBSRFkgc2lnbmFsICovCiAjZGVmaW5lIEVFUFJPTV9SRUFEX09QQ09ERV9TUEkgICAgICAweDAzICAvKiBFRVBST00gcmVhZCBvcGNvZGUgKi8KICNkZWZpbmUgRUVQUk9NX1dSSVRFX09QQ09ERV9TUEkgICAgIDB4MDIgIC8qIEVFUFJPTSB3cml0ZSBvcGNvZGUgKi8KICNkZWZpbmUgRUVQUk9NX0E4X09QQ09ERV9TUEkgICAgICAgIDB4MDggIC8qIG9wY29kZSBiaXQtMyA9IGFkZHJlc3MgYml0LTggKi8KQEAgLTMxMTQsMTAgKzMwODQsMTAgQEAKIAogLyogRFNQIERpc3RhbmNlIFJlZ2lzdGVyIChQYWdlIDUsIFJlZ2lzdGVyIDI2KSAqLwogI2RlZmluZSBHRzgyNTYzX0RTUERfQ0FCTEVfTEVOR1RIICAgICAgICAgICAgICAgMHgwMDA3IC8qIDAgPSA8NTBNOwotCQkJCQkJCSAgICAgIDEgPSA1MC04ME07Ci0JCQkJCQkJICAgICAgMiA9IDgwLTExME07Ci0JCQkJCQkJICAgICAgMyA9IDExMC0xNDBNOwotCQkJCQkJCSAgICAgIDQgPSA+MTQwTSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgPSA1MC04ME07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiA9IDgwLTExME07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyA9IDExMC0xNDBNOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQgPSA+MTQwTSAqLwogCiAvKiBLdW1lcmFuIE1vZGUgQ29udHJvbCBSZWdpc3RlciAoUGFnZSAxOTMsIFJlZ2lzdGVyIDE2KSAqLwogI2RlZmluZSBHRzgyNTYzX0tNQ1JfUEhZX0xFRFNfRU4gICAgICAgICAgICAgICAgICAgIDB4MDAyMCAvKiAxPVBIWSBMRURzLCAwPUt1bWVyYW4gSW5iYW5kIExFRHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwppbmRleCBkYTYyZGI4Li44ODI3NmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCkBAIC0zNiw3ICszNiw3IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4xLjktazQiRFJJVkVSTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTiAiNy4yLjctazIiRFJJVkVSTkFQSQogY2hhciBlMTAwMF9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CiBzdGF0aWMgY2hhciBlMTAwMF9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbi4iOwogCkBAIC05OSw2ICs5OSw3IEBACiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA5OCksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA5OSksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTA5QSksCisJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBBNCksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBCNSksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBCOSksCiAJSU5URUxfRTEwMDBfRVRIRVJORVRfREVWSUNFKDB4MTBCQSksCkBAIC0yNDUsNyArMjQ2LDcgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBlMTAwMF9jb3B5cmlnaHQpOwogCi0JcmV0ID0gcGNpX21vZHVsZV9pbml0KCZlMTAwMF9kcml2ZXIpOworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmUxMDAwX2RyaXZlcik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDg1LDcgKzQ4Niw3IEBACiAgKgogICoqLwogCi1zdGF0aWMgdm9pZCBlMTAwMF9wb3dlcl91cF9waHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCit2b2lkIGUxMDAwX3Bvd2VyX3VwX3BoeShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1aW50MTZfdCBtaWlfcmVnID0gMDsKIApAQCAtNjgyLDkgKzY4Myw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFzaF9zdGFydCwgZmxhc2hfbGVuOwogCiAJc3RhdGljIGludCBjYXJkc19mb3VuZCA9IDA7Ci0Jc3RhdGljIGludCBlMTAwMF9rc3AzX3BvcnRfYSA9IDA7IC8qIGdsb2JhbCBrc3AzIHBvcnQgYSBpbmRpY2F0aW9uICovCisJc3RhdGljIGludCBnbG9iYWxfcXVhZF9wb3J0X2EgPSAwOyAvKiBnbG9iYWwga3NwMyBwb3J0IGEgaW5kaWNhdGlvbiAqLwogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7Ci0JdWludDE2X3QgZWVwcm9tX2RhdGE7CisJdWludDE2X3QgZWVwcm9tX2RhdGEgPSAwOwogCXVpbnQxNl90IGVlcHJvbV9hcG1lX21hc2sgPSBFMTAwMF9FRVBST01fQVBNRTsKIAlpZiAoKGVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkKIAkJcmV0dXJuIGVycjsKQEAgLTY5NiwyMSArNjk3LDIwIEBACiAJCWlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSykpICYmCiAJCSAgICAoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKIAkJCUUxMDAwX0VSUigiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7Ci0JCQlyZXR1cm4gZXJyOworCQkJZ290byBlcnJfZG1hOwogCQl9CiAJCXBjaV91c2luZ19kYWMgPSAwOwogCX0KIAogCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBlMTAwMF9kcml2ZXJfbmFtZSkpKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIGVycl9wY2lfcmVnOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKKwllcnIgPSAtRU5PTUVNOwogCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZTEwMDBfYWRhcHRlcikpOwotCWlmICghbmV0ZGV2KSB7Ci0JCWVyciA9IC1FTk9NRU07CisJaWYgKCFuZXRkZXYpCiAJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OwotCX0KIAogCVNFVF9NT0RVTEVfT1dORVIobmV0ZGV2KTsKIAlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOwpAQCAtNzI1LDExICs3MjUsMTAgQEAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIEJBUl8wKTsKIAltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgQkFSXzApOwogCisJZXJyID0gLUVJTzsKIAlhZGFwdGVyLT5ody5od19hZGRyID0gaW9yZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7Ci0JaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKSB7Ci0JCWVyciA9IC1FSU87CisJaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKQogCQlnb3RvIGVycl9pb3JlbWFwOwotCX0KIAogCWZvciAoaSA9IEJBUl8xOyBpIDw9IEJBUl81OyBpKyspIHsKIAkJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSkgPT0gMCkKQEAgLTc3NCw2ICs3NzMsNyBAQAogCWlmICgoZXJyID0gZTEwMDBfc3dfaW5pdChhZGFwdGVyKSkpCiAJCWdvdG8gZXJyX3N3X2luaXQ7CiAKKwllcnIgPSAtRUlPOwogCS8qIEZsYXNoIEJBUiBtYXBwaW5nIG11c3QgaGFwcGVuIGFmdGVyIGUxMDAwX3N3X2luaXQKIAkgKiBiZWNhdXNlIGl0IGRlcGVuZHMgb24gbWFjX3R5cGUgKi8KIAlpZiAoKGFkYXB0ZXItPmh3Lm1hY190eXBlID09IGUxMDAwX2ljaDhsYW4pICYmCkBAIC03ODEsMjQgKzc4MSwxMyBAQAogCQlmbGFzaF9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAxKTsKIAkJZmxhc2hfbGVuID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKTsKIAkJYWRhcHRlci0+aHcuZmxhc2hfYWRkcmVzcyA9IGlvcmVtYXAoZmxhc2hfc3RhcnQsIGZsYXNoX2xlbik7Ci0JCWlmICghYWRhcHRlci0+aHcuZmxhc2hfYWRkcmVzcykgewotCQkJZXJyID0gLUVJTzsKKwkJaWYgKCFhZGFwdGVyLT5ody5mbGFzaF9hZGRyZXNzKQogCQkJZ290byBlcnJfZmxhc2htYXA7Ci0JCX0KIAl9CiAKLQlpZiAoKGVyciA9IGUxMDAwX2NoZWNrX3BoeV9yZXNldF9ibG9jaygmYWRhcHRlci0+aHcpKSkKKwlpZiAoZTEwMDBfY2hlY2tfcGh5X3Jlc2V0X2Jsb2NrKCZhZGFwdGVyLT5odykpCiAJCURQUklOVEsoUFJPQkUsIElORk8sICJQSFkgcmVzZXQgaXMgYmxvY2tlZCBkdWUgdG8gU09ML0lERVIgc2Vzc2lvbi5cbiIpOwogCi0JLyogaWYga3NwMywgaW5kaWNhdGUgaWYgaXQncyBwb3J0IGEgYmVpbmcgc2V0dXAgKi8KLQlpZiAocGRldi0+ZGV2aWNlID09IEUxMDAwX0RFVl9JRF84MjU0NkdCX1FVQURfQ09QUEVSX0tTUDMgJiYKLQkJCWUxMDAwX2tzcDNfcG9ydF9hID09IDApCi0JCWFkYXB0ZXItPmtzcDNfcG9ydF9hID0gMTsKLQllMTAwMF9rc3AzX3BvcnRfYSsrOwotCS8qIFJlc2V0IGZvciBtdWx0aXBsZSBLUDMgYWRhcHRlcnMgKi8KLQlpZiAoZTEwMDBfa3NwM19wb3J0X2EgPT0gNCkKLQkJZTEwMDBfa3NwM19wb3J0X2EgPSAwOwotCiAJaWYgKGFkYXB0ZXItPmh3Lm1hY190eXBlID49IGUxMDAwXzgyNTQzKSB7CiAJCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKIAkJCQkgICBORVRJRl9GX0hXX0NTVU0gfApAQCAtODMwLDcgKzgxOSw3IEBACiAKIAlpZiAoZTEwMDBfaW5pdF9lZXByb21fcGFyYW1zKCZhZGFwdGVyLT5odykpIHsKIAkJRTEwMDBfRVJSKCJFRVBST00gaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FSU87CisJCWdvdG8gZXJyX2VlcHJvbTsKIAl9CiAKIAkvKiBiZWZvcmUgcmVhZGluZyB0aGUgRUVQUk9NLCByZXNldCB0aGUgY29udHJvbGxlciB0bwpAQCAtODQyLDcgKzgzMSw2IEBACiAKIAlpZiAoZTEwMDBfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKCZhZGFwdGVyLT5odykgPCAwKSB7CiAJCURQUklOVEsoUFJPQkUsIEVSUiwgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKLQkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIApAQCAtODU1LDEyICs4NDMsOSBAQAogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+cGVybV9hZGRyKSkgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJJbnZhbGlkIE1BQyBBZGRyZXNzXG4iKTsKLQkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAotCWUxMDAwX3JlYWRfcGFydF9udW0oJmFkYXB0ZXItPmh3LCAmKGFkYXB0ZXItPnBhcnRfbnVtKSk7Ci0KIAllMTAwMF9nZXRfYnVzX2luZm8oJmFkYXB0ZXItPmh3KTsKIAogCWluaXRfdGltZXIoJmFkYXB0ZXItPnR4X2ZpZm9fc3RhbGxfdGltZXIpOwpAQCAtOTIxLDcgKzkwNiwzOCBAQAogCQlicmVhazsKIAl9CiAJaWYgKGVlcHJvbV9kYXRhICYgZWVwcm9tX2FwbWVfbWFzaykKLQkJYWRhcHRlci0+d29sIHw9IEUxMDAwX1dVRkNfTUFHOworCQlhZGFwdGVyLT5lZXByb21fd29sIHw9IEUxMDAwX1dVRkNfTUFHOworCisJLyogbm93IHRoYXQgd2UgaGF2ZSB0aGUgZWVwcm9tIHNldHRpbmdzLCBhcHBseSB0aGUgc3BlY2lhbCBjYXNlcworCSAqIHdoZXJlIHRoZSBlZXByb20gbWF5IGJlIHdyb25nIG9yIHRoZSBib2FyZCBzaW1wbHkgd29uJ3Qgc3VwcG9ydAorCSAqIHdha2Ugb24gbGFuIG9uIGEgcGFydGljdWxhciBwb3J0ICovCisJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkdCX1BDSUU6CisJCWFkYXB0ZXItPmVlcHJvbV93b2wgPSAwOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU0NkVCX0ZJQkVSOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTQ2R0JfRklCRVI6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzFFQl9GSUJFUjoKKwkJLyogV2FrZSBldmVudHMgb25seSBzdXBwb3J0ZWQgb24gcG9ydCBBIGZvciBkdWFsIGZpYmVyCisJCSAqIHJlZ2FyZGxlc3Mgb2YgZWVwcm9tIHNldHRpbmcgKi8KKwkJaWYgKEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19GVU5DXzEpCisJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NDZHQl9RVUFEX0NPUFBFUl9LU1AzOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTcxRUJfUVVBRF9DT1BQRVI6CisJCS8qIGlmIHF1YWQgcG9ydCBhZGFwdGVyLCBkaXNhYmxlIFdvTCBvbiBhbGwgYnV0IHBvcnQgQSAqLworCQlpZiAoZ2xvYmFsX3F1YWRfcG9ydF9hICE9IDApCisJCQlhZGFwdGVyLT5lZXByb21fd29sID0gMDsKKwkJZWxzZQorCQkJYWRhcHRlci0+cXVhZF9wb3J0X2EgPSAxOworCQkvKiBSZXNldCBmb3IgbXVsdGlwbGUgcXVhZCBwb3J0IGFkYXB0ZXJzICovCisJCWlmICgrK2dsb2JhbF9xdWFkX3BvcnRfYSA9PSA0KQorCQkJZ2xvYmFsX3F1YWRfcG9ydF9hID0gMDsKKwkJYnJlYWs7CisJfQorCisJLyogaW5pdGlhbGl6ZSB0aGUgd29sIHNldHRpbmdzIGJhc2VkIG9uIHRoZSBlZXByb20gc2V0dGluZ3MgKi8KKwlhZGFwdGVyLT53b2wgPSBhZGFwdGVyLT5lZXByb21fd29sOwogCiAJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLwogCXsKQEAgLTk2NCwxNiArOTgwLDMzIEBACiAJcmV0dXJuIDA7CiAKIGVycl9yZWdpc3RlcjoKKwllMTAwMF9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CitlcnJfZWVwcm9tOgorCWlmICghZTEwMDBfY2hlY2tfcGh5X3Jlc2V0X2Jsb2NrKCZhZGFwdGVyLT5odykpCisJCWUxMDAwX3BoeV9od19yZXNldCgmYWRhcHRlci0+aHcpOworCiAJaWYgKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpCiAJCWlvdW5tYXAoYWRhcHRlci0+aHcuZmxhc2hfYWRkcmVzcyk7CiBlcnJfZmxhc2htYXA6CisjaWZkZWYgQ09ORklHX0UxMDAwX05BUEkKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlkZXZfcHV0KCZhZGFwdGVyLT5wb2xsaW5nX25ldGRldltpXSk7CisjZW5kaWYKKworCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOworI2lmZGVmIENPTkZJR19FMTAwMF9OQVBJCisJa2ZyZWUoYWRhcHRlci0+cG9sbGluZ19uZXRkZXYpOworI2VuZGlmCiBlcnJfc3dfaW5pdDoKLWVycl9lZXByb206CiAJaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKIGVycl9pb3JlbWFwOgogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiBlcnJfYWxsb2NfZXRoZXJkZXY6CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9wY2lfcmVnOgorZXJyX2RtYToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTIwOCw3ICsxMjQxLDcgQEAKIAogCWVyciA9IGUxMDAwX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX3VwOworCQlnb3RvIGVycl9yZXFfaXJxOwogCiAJZTEwMDBfcG93ZXJfdXBfcGh5KGFkYXB0ZXIpOwogCkBAIC0xMjI5LDYgKzEyNjIsOSBAQAogCXJldHVybiBFMTAwMF9TVUNDRVNTOwogCiBlcnJfdXA6CisJZTEwMDBfcG93ZXJfZG93bl9waHkoYWRhcHRlcik7CisJZTEwMDBfZnJlZV9pcnEoYWRhcHRlcik7CitlcnJfcmVxX2lycToKIAllMTAwMF9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CiBlcnJfc2V0dXBfcng6CiAJZTEwMDBfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOwpAQCAtMTM4MSwxMCArMTQxNyw2IEBACiAgKiAJCQkJICAoRGVzY3JpcHRvcnMpIGZvciBhbGwgcXVldWVzCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKICAqCi0gKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2l0aCBhbiBlcnJvciwgdGhlbiBpdCdzIHBvc3NpYmxlIG9uZSBvcgotICogbW9yZSBvZiB0aGUgcmluZ3MgaXMgcG9wdWxhdGVkICh3aGlsZSB0aGUgcmVzdCBhcmUgbm90KS4gIEl0IGlzIHRoZQotICogY2FsbGVycyBkdXR5IHRvIGNsZWFuIHRob3NlIG9ycGhhbmVkIHJpbmdzLgotICoKICAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKICAqKi8KIApAQCAtMTM5OCw2ICsxNDMwLDkgQEAKIAkJaWYgKGVycikgewogCQkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkJCSJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOworCQkJZm9yIChpLS0gOyBpID49IDA7IGktLSkKKwkJCQllMTAwMF9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJCSZhZGFwdGVyLT50eF9yaW5nW2ldKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTQzMyw4ICsxNDY4LDggQEAKIAkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUREJBTCwgKHRkYmEgJiAweDAwMDAwMDAwZmZmZmZmZmZVTEwpKTsKIAkJRTEwMDBfV1JJVEVfUkVHKGh3LCBURFQsIDApOwogCQlFMTAwMF9XUklURV9SRUcoaHcsIFRESCwgMCk7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbMF0udGRoID0gRTEwMDBfVERIOwotCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRkdCA9IEUxMDAwX1REVDsKKwkJYWRhcHRlci0+dHhfcmluZ1swXS50ZGggPSAoKGh3LT5tYWNfdHlwZSA+PSBlMTAwMF84MjU0MykgPyBFMTAwMF9UREggOiBFMTAwMF84MjU0Ml9UREgpOworCQlhZGFwdGVyLT50eF9yaW5nWzBdLnRkdCA9ICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSA/IEUxMDAwX1REVCA6IEUxMDAwXzgyNTQyX1REVCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTQ5OSw4ICsxNTM0LDYgQEAKIAl9IGVsc2UgaWYgKGh3LT5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikgewogCQl0YXJjID0gRTEwMDBfUkVBRF9SRUcoaHcsIFRBUkMwKTsKIAkJdGFyYyB8PSAxOwotCQlpZiAoaHctPm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCi0JCQl0YXJjIHw9ICgxIDw8IDIwKTsKIAkJRTEwMDBfV1JJVEVfUkVHKGh3LCBUQVJDMCwgdGFyYyk7CiAJCXRhcmMgPSBFMTAwMF9SRUFEX1JFRyhodywgVEFSQzEpOwogCQl0YXJjIHw9IDE7CkBAIC0xNjM5LDEwICsxNjcyLDYgQEAKICAqIAkJCQkgIChEZXNjcmlwdG9ycykgZm9yIGFsbCBxdWV1ZXMKICAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQogICoKLSAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB3aXRoIGFuIGVycm9yLCB0aGVuIGl0J3MgcG9zc2libGUgb25lIG9yCi0gKiBtb3JlIG9mIHRoZSByaW5ncyBpcyBwb3B1bGF0ZWQgKHdoaWxlIHRoZSByZXN0IGFyZSBub3QpLiAgSXQgaXMgdGhlCi0gKiBjYWxsZXJzIGR1dHkgdG8gY2xlYW4gdGhvc2Ugb3JwaGFuZWQgcmluZ3MuCi0gKgogICogUmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQogICoqLwogCkBAIC0xNjU2LDYgKzE2ODUsOSBAQAogCQlpZiAoZXJyKSB7CiAJCQlEUFJJTlRLKFBST0JFLCBFUlIsCiAJCQkJIkFsbG9jYXRpb24gZm9yIFJ4IFF1ZXVlICV1IGZhaWxlZFxuIiwgaSk7CisJCQlmb3IgKGktLSA7IGkgPj0gMDsgaS0tKQorCQkJCWUxMDAwX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkJCQkJJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xODQwLDggKzE4NzIsOCBAQAogCQlFMTAwMF9XUklURV9SRUcoaHcsIFJEQkFMLCAocmRiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCkpOwogCQlFMTAwMF9XUklURV9SRUcoaHcsIFJEVCwgMCk7CiAJCUUxMDAwX1dSSVRFX1JFRyhodywgUkRILCAwKTsKLQkJYWRhcHRlci0+cnhfcmluZ1swXS5yZGggPSBFMTAwMF9SREg7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbMF0ucmR0ID0gRTEwMDBfUkRUOworCQlhZGFwdGVyLT5yeF9yaW5nWzBdLnJkaCA9ICgoaHctPm1hY190eXBlID49IGUxMDAwXzgyNTQzKSA/IEUxMDAwX1JESCA6IEUxMDAwXzgyNTQyX1JESCk7CisJCWFkYXB0ZXItPnJ4X3JpbmdbMF0ucmR0ID0gKChody0+bWFjX3R5cGUgPj0gZTEwMDBfODI1NDMpID8gRTEwMDBfUkRUIDogRTEwMDBfODI1NDJfUkRUKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0yNDQyLDEwICsyNDc0LDkgQEAKIAkJCSAqIGRpc2FibGUgcmVjZWl2ZXMgaW4gdGhlIElTUiBhbmQKIAkJCSAqIHJlc2V0IGRldmljZSBoZXJlIGluIHRoZSB3YXRjaGRvZwogCQkJICovCi0JCQlpZiAoYWRhcHRlci0+aHcubWFjX3R5cGUgPT0gZTEwMDBfODAwMDNlczJsYW4pIHsKKwkJCWlmIChhZGFwdGVyLT5ody5tYWNfdHlwZSA9PSBlMTAwMF84MDAwM2VzMmxhbikKIAkJCQkvKiByZXNldCBkZXZpY2UgKi8KIAkJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKLQkJCX0KIAkJfQogCiAJCWUxMDAwX3NtYXJ0c3BlZWQoYWRhcHRlcik7CkBAIC0yNTQ1LDcgKzI1NzYsNyBAQAogCQkJY21kX2xlbmd0aCA9IEUxMDAwX1RYRF9DTURfSVA7CiAJCQlpcGNzZSA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGEgLSAxOwogI2lmZGVmIE5FVElGX0ZfVFNPX0lQVjYKLQkJfSBlbHNlIGlmIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQVjYpKSB7CisJCX0gZWxzZSBpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUFY2KSkgewogCQkJc2tiLT5uaC5pcHY2aC0+cGF5bG9hZF9sZW4gPSAwOwogCQkJc2tiLT5oLnRoLT5jaGVjayA9CiAJCQkJfmNzdW1faXB2Nl9tYWdpYygmc2tiLT5uaC5pcHY2aC0+c2FkZHIsCkBAIC0zMTI3LDcgKzMxNTgsNyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBOT1RFOiBkZXZfYWxsb2Nfc2tiIHJlc2VydmVzIDE2IGJ5dGVzLCBhbmQgdHlwaWNhbGx5IE5FVF9JUF9BTElHTgorCS8qIE5PVEU6IG5ldGRldl9hbGxvY19za2IgcmVzZXJ2ZXMgMTYgYnl0ZXMsIGFuZCB0eXBpY2FsbHkgTkVUX0lQX0FMSUdOCiAJICogbWVhbnMgd2UgcmVzZXJ2ZSAyIG1vcmUsIHRoaXMgcHVzaGVzIHVzIHRvIGFsbG9jYXRlIGZyb20gdGhlIG5leHQKIAkgKiBsYXJnZXIgc2xhYiBzaXplCiAJICogaS5lLiBSWEJVRkZFUl8yMDQ4IC0tPiBzaXplLTQwOTYgc2xhYiAqLwpAQCAtMzY4MCw3ICszNzExLDcgQEAKIAkJCUUxMDAwX0RCRygiJXM6IFJlY2VpdmUgcGFja2V0IGNvbnN1bWVkIG11bHRpcGxlIgogCQkJCSAgIiBidWZmZXJzXG4iLCBuZXRkZXYtPm5hbWUpOwogCQkJLyogcmVjeWNsZSAqLwotCQkJYnVmZmVyX2luZm8tPiBza2IgPSBza2I7CisJCQlidWZmZXJfaW5mby0+c2tiID0gc2tiOwogCQkJZ290byBuZXh0X2Rlc2M7CiAJCX0KIApAQCAtMzcwOCwxMCArMzczOSw5IEBACiAjZGVmaW5lIEUxMDAwX0NCX0xFTkdUSCAyNTYKIAkJaWYgKGxlbmd0aCA8IEUxMDAwX0NCX0xFTkdUSCkgewogCQkJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IgPQotCQkJICAgIGRldl9hbGxvY19za2IobGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKKwkJCSAgICBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKIAkJCWlmIChuZXdfc2tiKSB7CiAJCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKLQkJCQluZXdfc2tiLT5kZXYgPSBuZXRkZXY7CiAJCQkJbWVtY3B5KG5ld19za2ItPmRhdGEgLSBORVRfSVBfQUxJR04sCiAJCQkJICAgICAgIHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTiwKIAkJCQkgICAgICAgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKQEAgLTM5NzgsMTMgKzQwMDgsMTMgQEAKIAlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKIAogCXdoaWxlIChjbGVhbmVkX2NvdW50LS0pIHsKLQkJaWYgKCEoc2tiID0gYnVmZmVyX2luZm8tPnNrYikpCi0JCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGJ1ZnN6KTsKLQkJZWxzZSB7CisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCWlmIChza2IpIHsKIAkJCXNrYl90cmltKHNrYiwgMCk7CiAJCQlnb3RvIG1hcF9za2I7CiAJCX0KIAorCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgYnVmc3opOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KIAkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CkBAIC0zOTk3LDcgKzQwMjcsNyBAQAogCQkJRFBSSU5USyhSWF9FUlIsIEVSUiwgInNrYiBhbGlnbiBjaGVjayBmYWlsZWQ6ICV1IGJ5dGVzICIKIAkJCQkJICAgICAiYXQgJXBcbiIsIGJ1ZnN6LCBza2ItPmRhdGEpOwogCQkJLyogVHJ5IGFnYWluLCB3aXRob3V0IGZyZWVpbmcgdGhlIHByZXZpb3VzICovCi0JCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGJ1ZnN6KTsKKwkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LCBidWZzeik7CiAJCQkvKiBGYWlsZWQgYWxsb2NhdGlvbiwgY3JpdGljYWwgZmFpbHVyZSAqLwogCQkJaWYgKCFza2IpIHsKIAkJCQlkZXZfa2ZyZWVfc2tiKG9sZHNrYik7CkBAIC00MDA5LDEwICs0MDM5LDEwIEBACiAJCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJCWRldl9rZnJlZV9za2Iob2xkc2tiKTsKIAkJCQlicmVhazsgLyogd2hpbGUgIWJ1ZmZlcl9pbmZvLT5za2IgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJLyogVXNlIG5ldyBhbGxvY2F0aW9uICovCi0JCQkJZGV2X2tmcmVlX3NrYihvbGRza2IpOwogCQkJfQorCisJCQkvKiBVc2UgbmV3IGFsbG9jYXRpb24gKi8KKwkJCWRldl9rZnJlZV9za2Iob2xkc2tiKTsKIAkJfQogCQkvKiBNYWtlIGJ1ZmZlciBhbGlnbm1lbnQgMiBiZXlvbmQgYSAxNiBieXRlIGJvdW5kYXJ5CiAJCSAqIHRoaXMgd2lsbCByZXN1bHQgaW4gYSAxNiBieXRlIGFsaWduZWQgSVAgaGVhZGVyIGFmdGVyCkBAIC00MDIwLDggKzQwNTAsNiBAQAogCQkgKi8KIAkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwogCi0JCXNrYi0+ZGV2ID0gbmV0ZGV2OwotCiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwogbWFwX3NrYjoKQEAgLTQxMjEsNyArNDE0OSw4IEBACiAJCQkJcnhfZGVzYy0+cmVhZC5idWZmZXJfYWRkcltqKzFdID0gfjA7CiAJCX0KIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPnJ4X3BzX2JzaXplMCArIE5FVF9JUF9BTElHTik7CisJCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmV0ZGV2LAorCQkJCSAgICAgICBhZGFwdGVyLT5yeF9wc19ic2l6ZTAgKyBORVRfSVBfQUxJR04pOwogCiAJCWlmICh1bmxpa2VseSghc2tiKSkgewogCQkJYWRhcHRlci0+YWxsb2NfcnhfYnVmZl9mYWlsZWQrKzsKQEAgLTQxMzQsOCArNDE2Myw2IEBACiAJCSAqLwogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAKLQkJc2tiLT5kZXYgPSBuZXRkZXY7Ci0KIAkJYnVmZmVyX2luZm8tPnNrYiA9IHNrYjsKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGFkYXB0ZXItPnJ4X3BzX2JzaXplMDsKIAkJYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKQEAgLTQzODUsMTEgKzQ0MTIsMTMgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRhcHRlci0+cGRldiwgcmVnLCAqdmFsdWUpOwogfQogCisjaWYgMAogdWludDMyX3QKIGUxMDAwX2lvX3JlYWQoc3RydWN0IGUxMDAwX2h3ICpodywgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCXJldHVybiBpbmwocG9ydCk7CiB9CisjZW5kaWYgIC8qICAwICAqLwogCiB2b2lkCiBlMTAwMF9pb193cml0ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1bnNpZ25lZCBsb25nIHBvcnQsIHVpbnQzMl90IHZhbHVlKQpAQCAtNDYyNSw3ICs0NjU0LDcgQEAKIAkJZTEwMDBfc2V0X211bHRpKG5ldGRldik7CiAKIAkJLyogdHVybiBvbiBhbGwtbXVsdGkgbW9kZSBpZiB3YWtlIG9uIG11bHRpY2FzdCBpcyBlbmFibGVkICovCi0JCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX01DKSB7CisJCWlmICh3dWZjICYgRTEwMDBfV1VGQ19NQykgewogCQkJcmN0bCA9IEUxMDAwX1JFQURfUkVHKCZhZGFwdGVyLT5odywgUkNUTCk7CiAJCQlyY3RsIHw9IEUxMDAwX1JDVExfTVBFOwogCQkJRTEwMDBfV1JJVEVfUkVHKCZhZGFwdGVyLT5odywgUkNUTCwgcmN0bCk7CkBAIC00Njk3LDExICs0NzI2LDE0IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0JdWludDMyX3QgbWFuYywgcmV0X3ZhbDsKKwl1aW50MzJfdCBtYW5jLCBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJZTEwMDBfcGNpX3Jlc3RvcmVfc3RhdGUoYWRhcHRlcik7Ci0JcmV0X3ZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZTEwMDA6IENhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOworCQlyZXR1cm4gZXJyOworCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDApOwpAQCAtNDc3OSw2ICs0ODExLDcgQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWUxMDAwX2Rvd24oYWRhcHRlcik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCiAJLyogUmVxdWVzdCBhIHNsb3Qgc2xvdCByZXNldC4gKi8KIAlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9vc2RlcC5oCmluZGV4IDJkM2U4YjAuLjQ2YmM0OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX29zZGVwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfb3NkZXAuaApAQCAtNDIsMjUgKzQyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCi0jaWZuZGVmIG1zZWNfZGVsYXkKLSNkZWZpbmUgbXNlY19kZWxheSh4KQlkbyB7IGlmKGluX2ludGVycnVwdCgpKSB7IFwKLQkJCQkvKiBEb24ndCBtZGVsYXkgaW4gaW50ZXJydXB0IGNvbnRleHQhICovIFwKLQkgICAgICAgICAgICAgICAgCUJVRygpOyBcCi0JCQl9IGVsc2UgeyBcCi0JCQkJbXNsZWVwKHgpOyBcCi0JCQl9IH0gd2hpbGUgKDApCi0KLS8qIFNvbWUgd29ya2Fyb3VuZHMgcmVxdWlyZSBtaWxsaXNlY29uZCBkZWxheXMgYW5kIGFyZSBydW4gZHVyaW5nIGludGVycnVwdAotICogY29udGV4dC4gIE1vc3Qgbm90YWJseSwgd2hlbiBlc3RhYmxpc2hpbmcgbGluaywgdGhlIHBoeSBtYXkgbmVlZCB0d2Vha2luZwotICogYnV0IGNhbm5vdCBwcm9jZXNzIHBoeSByZWdpc3RlciByZWFkcy93cml0ZXMgZmFzdGVyIHRoYW4gbWlsbGlzZWNvbmQKLSAqIGludGVydmFscy4uLmFuZCB3ZSBlc3RhYmxpc2ggbGluayBkdWUgdG8gYSAibGluayBzdGF0dXMgY2hhbmdlIiBpbnRlcnJ1cHQuCi0gKi8KLSNkZWZpbmUgbXNlY19kZWxheV9pcnEoeCkgbWRlbGF5KHgpCi0jZW5kaWYKLQotI2RlZmluZSBQQ0lfQ09NTUFORF9SRUdJU1RFUiAgIFBDSV9DT01NQU5ECi0jZGVmaW5lIENNRF9NRU1fV1JUX0lOVkFMSURBVEUgUENJX0NPTU1BTkRfSU5WQUxJREFURQotCiB0eXBlZGVmIGVudW0gewogI3VuZGVmIEZBTFNFCiAgICAgRkFMU0UgPSAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX3BhcmFtLmMKaW5kZXggMGVmNDEzMS4uMjEyODQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfcGFyYW0uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9wYXJhbS5jCkBAIC0zMjQsNyArMzI0LDYgQEAKIAkJRFBSSU5USyhQUk9CRSwgTk9USUNFLAogCQkgICAgICAgIldhcm5pbmc6IG5vIGNvbmZpZ3VyYXRpb24gZm9yIGJvYXJkICMlaVxuIiwgYmQpOwogCQlEUFJJTlRLKFBST0JFLCBOT1RJQ0UsICJVc2luZyBkZWZhdWx0cyBmb3IgYWxsIHZhbHVlc1xuIik7Ci0JCWJkID0gRTEwMDBfTUFYX05JQzsKIAl9CiAKIAl7IC8qIFRyYW5zbWl0IERlc2NyaXB0b3IgQ291bnQgKi8KQEAgLTM0Miw5ICszNDEsMTQgQEAKIAkJb3B0LmFyZy5yLm1heCA9IG1hY190eXBlIDwgZTEwMDBfODI1NDQgPwogCQkJRTEwMDBfTUFYX1RYRCA6IEUxMDAwX01BWF84MjU0NF9UWEQ7CiAKLQkJdHhfcmluZy0+Y291bnQgPSBUeERlc2NyaXB0b3JzW2JkXTsKLQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZ0eF9yaW5nLT5jb3VudCwgJm9wdCwgYWRhcHRlcik7Ci0JCUUxMDAwX1JPVU5EVVAodHhfcmluZy0+Y291bnQsIFJFUV9UWF9ERVNDUklQVE9SX01VTFRJUExFKTsKKwkJaWYgKG51bV9UeERlc2NyaXB0b3JzID4gYmQpIHsKKwkJCXR4X3JpbmctPmNvdW50ID0gVHhEZXNjcmlwdG9yc1tiZF07CisJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJnR4X3JpbmctPmNvdW50LCAmb3B0LCBhZGFwdGVyKTsKKwkJCUUxMDAwX1JPVU5EVVAodHhfcmluZy0+Y291bnQsCisJCQkJCQlSRVFfVFhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CisJCX0gZWxzZSB7CisJCQl0eF9yaW5nLT5jb3VudCA9IG9wdC5kZWY7CisJCX0KIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKIAkJCXR4X3JpbmdbaV0uY291bnQgPSB0eF9yaW5nLT5jb3VudDsKIAl9CkBAIC0zNjMsOSArMzY3LDE0IEBACiAJCW9wdC5hcmcuci5tYXggPSBtYWNfdHlwZSA8IGUxMDAwXzgyNTQ0ID8gRTEwMDBfTUFYX1JYRCA6CiAJCQlFMTAwMF9NQVhfODI1NDRfUlhEOwogCi0JCXJ4X3JpbmctPmNvdW50ID0gUnhEZXNjcmlwdG9yc1tiZF07Ci0JCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmcnhfcmluZy0+Y291bnQsICZvcHQsIGFkYXB0ZXIpOwotCQlFMTAwMF9ST1VORFVQKHJ4X3JpbmctPmNvdW50LCBSRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CisJCWlmIChudW1fUnhEZXNjcmlwdG9ycyA+IGJkKSB7CisJCQlyeF9yaW5nLT5jb3VudCA9IFJ4RGVzY3JpcHRvcnNbYmRdOworCQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZyeF9yaW5nLT5jb3VudCwgJm9wdCwgYWRhcHRlcik7CisJCQlFMTAwMF9ST1VORFVQKHJ4X3JpbmctPmNvdW50LAorCQkJCQkJUkVRX1JYX0RFU0NSSVBUT1JfTVVMVElQTEUpOworCQl9IGVsc2UgeworCQkJcnhfcmluZy0+Y291bnQgPSBvcHQuZGVmOworCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCiAJCQlyeF9yaW5nW2ldLmNvdW50ID0gcnhfcmluZy0+Y291bnQ7CiAJfQpAQCAtMzc3LDkgKzM4NiwxMyBAQAogCQkJLmRlZiAgPSBPUFRJT05fRU5BQkxFRAogCQl9OwogCi0JCWludCByeF9jc3VtID0gWHN1bVJYW2JkXTsKLQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZyeF9jc3VtLCAmb3B0LCBhZGFwdGVyKTsKLQkJYWRhcHRlci0+cnhfY3N1bSA9IHJ4X2NzdW07CisJCWlmIChudW1fWHN1bVJYID4gYmQpIHsKKwkJCWludCByeF9jc3VtID0gWHN1bVJYW2JkXTsKKwkJCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmcnhfY3N1bSwgJm9wdCwgYWRhcHRlcik7CisJCQlhZGFwdGVyLT5yeF9jc3VtID0gcnhfY3N1bTsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPnJ4X2NzdW0gPSBvcHQuZGVmOworCQl9CiAJfQogCXsgLyogRmxvdyBDb250cm9sICovCiAKQEAgLTM5OSw5ICs0MTIsMTMgQEAKIAkJCQkJIC5wID0gZmNfbGlzdCB9fQogCQl9OwogCi0JCWludCBmYyA9IEZsb3dDb250cm9sW2JkXTsKLQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZmYywgJm9wdCwgYWRhcHRlcik7Ci0JCWFkYXB0ZXItPmh3LmZjID0gYWRhcHRlci0+aHcub3JpZ2luYWxfZmMgPSBmYzsKKwkJaWYgKG51bV9GbG93Q29udHJvbCA+IGJkKSB7CisJCQlpbnQgZmMgPSBGbG93Q29udHJvbFtiZF07CisJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmZjLCAmb3B0LCBhZGFwdGVyKTsKKwkJCWFkYXB0ZXItPmh3LmZjID0gYWRhcHRlci0+aHcub3JpZ2luYWxfZmMgPSBmYzsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPmh3LmZjID0gYWRhcHRlci0+aHcub3JpZ2luYWxfZmMgPSBvcHQuZGVmOworCQl9CiAJfQogCXsgLyogVHJhbnNtaXQgSW50ZXJydXB0IERlbGF5ICovCiAJCXN0cnVjdCBlMTAwMF9vcHRpb24gb3B0ID0gewpAQCAtNDEzLDggKzQzMCwxMyBAQAogCQkJCQkgLm1heCA9IE1BWF9UWERFTEFZIH19CiAJCX07CiAKLQkJYWRhcHRlci0+dHhfaW50X2RlbGF5ID0gVHhJbnREZWxheVtiZF07Ci0JCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmYWRhcHRlci0+dHhfaW50X2RlbGF5LCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKG51bV9UeEludERlbGF5ID4gYmQpIHsKKwkJCWFkYXB0ZXItPnR4X2ludF9kZWxheSA9IFR4SW50RGVsYXlbYmRdOworCQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZhZGFwdGVyLT50eF9pbnRfZGVsYXksICZvcHQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcik7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT50eF9pbnRfZGVsYXkgPSBvcHQuZGVmOworCQl9CiAJfQogCXsgLyogVHJhbnNtaXQgQWJzb2x1dGUgSW50ZXJydXB0IERlbGF5ICovCiAJCXN0cnVjdCBlMTAwMF9vcHRpb24gb3B0ID0gewpAQCAtNDI2LDkgKzQ0OCwxMyBAQAogCQkJCQkgLm1heCA9IE1BWF9UWEFCU0RFTEFZIH19CiAJCX07CiAKLQkJYWRhcHRlci0+dHhfYWJzX2ludF9kZWxheSA9IFR4QWJzSW50RGVsYXlbYmRdOwotCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPnR4X2Fic19pbnRfZGVsYXksICZvcHQsCi0JCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyKTsKKwkJaWYgKG51bV9UeEFic0ludERlbGF5ID4gYmQpIHsKKwkJCWFkYXB0ZXItPnR4X2Fic19pbnRfZGVsYXkgPSBUeEFic0ludERlbGF5W2JkXTsKKwkJCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmYWRhcHRlci0+dHhfYWJzX2ludF9kZWxheSwgJm9wdCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPnR4X2Fic19pbnRfZGVsYXkgPSBvcHQuZGVmOworCQl9CiAJfQogCXsgLyogUmVjZWl2ZSBJbnRlcnJ1cHQgRGVsYXkgKi8KIAkJc3RydWN0IGUxMDAwX29wdGlvbiBvcHQgPSB7CkBAIC00NDAsOCArNDY2LDEzIEBACiAJCQkJCSAubWF4ID0gTUFYX1JYREVMQVkgfX0KIAkJfTsKIAotCQlhZGFwdGVyLT5yeF9pbnRfZGVsYXkgPSBSeEludERlbGF5W2JkXTsKLQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZhZGFwdGVyLT5yeF9pbnRfZGVsYXksICZvcHQsIGFkYXB0ZXIpOworCQlpZiAobnVtX1J4SW50RGVsYXkgPiBiZCkgeworCQkJYWRhcHRlci0+cnhfaW50X2RlbGF5ID0gUnhJbnREZWxheVtiZF07CisJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPnJ4X2ludF9kZWxheSwgJm9wdCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyKTsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPnJ4X2ludF9kZWxheSA9IG9wdC5kZWY7CisJCX0KIAl9CiAJeyAvKiBSZWNlaXZlIEFic29sdXRlIEludGVycnVwdCBEZWxheSAqLwogCQlzdHJ1Y3QgZTEwMDBfb3B0aW9uIG9wdCA9IHsKQEAgLTQ1Myw5ICs0ODQsMTMgQEAKIAkJCQkJIC5tYXggPSBNQVhfUlhBQlNERUxBWSB9fQogCQl9OwogCi0JCWFkYXB0ZXItPnJ4X2Fic19pbnRfZGVsYXkgPSBSeEFic0ludERlbGF5W2JkXTsKLQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZhZGFwdGVyLT5yeF9hYnNfaW50X2RlbGF5LCAmb3B0LAotCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcik7CisJCWlmIChudW1fUnhBYnNJbnREZWxheSA+IGJkKSB7CisJCQlhZGFwdGVyLT5yeF9hYnNfaW50X2RlbGF5ID0gUnhBYnNJbnREZWxheVtiZF07CisJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPnJ4X2Fic19pbnRfZGVsYXksICZvcHQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcik7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5yeF9hYnNfaW50X2RlbGF5ID0gb3B0LmRlZjsKKwkJfQogCX0KIAl7IC8qIEludGVycnVwdCBUaHJvdHRsaW5nIFJhdGUgKi8KIAkJc3RydWN0IGUxMDAwX29wdGlvbiBvcHQgPSB7CkBAIC00NjcsMTggKzUwMiwyNCBAQAogCQkJCQkgLm1heCA9IE1BWF9JVFIgfX0KIAkJfTsKIAotCQlhZGFwdGVyLT5pdHIgPSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGVbYmRdOwotCQlzd2l0Y2ggKGFkYXB0ZXItPml0cikgewotCQljYXNlIDA6Ci0JCQlEUFJJTlRLKFBST0JFLCBJTkZPLCAiJXMgdHVybmVkIG9mZlxuIiwgb3B0Lm5hbWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCURQUklOVEsoUFJPQkUsIElORk8sICIlcyBzZXQgdG8gZHluYW1pYyBtb2RlXG4iLAotCQkJCW9wdC5uYW1lKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZhZGFwdGVyLT5pdHIsICZvcHQsIGFkYXB0ZXIpOwotCQkJYnJlYWs7CisJCWlmIChudW1fSW50ZXJydXB0VGhyb3R0bGVSYXRlID4gYmQpIHsKKwkJCWFkYXB0ZXItPml0ciA9IEludGVycnVwdFRocm90dGxlUmF0ZVtiZF07CisJCQlzd2l0Y2ggKGFkYXB0ZXItPml0cikgeworCQkJY2FzZSAwOgorCQkJCURQUklOVEsoUFJPQkUsIElORk8sICIlcyB0dXJuZWQgb2ZmXG4iLAorCQkJCSAgICAgICAgb3B0Lm5hbWUpOworCQkJCWJyZWFrOworCQkJY2FzZSAxOgorCQkJCURQUklOVEsoUFJPQkUsIElORk8sICIlcyBzZXQgdG8gZHluYW1pYyBtb2RlXG4iLAorCQkJCSAgICAgICAgb3B0Lm5hbWUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFkYXB0ZXItPml0ciwgJm9wdCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlcik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5pdHIgPSBvcHQuZGVmOwogCQl9CiAJfQogCXsgLyogU21hcnQgUG93ZXIgRG93biAqLwpAQCAtNDg5LDkgKzUzMCwxMyBAQAogCQkJLmRlZiAgPSBPUFRJT05fRElTQUJMRUQKIAkJfTsKIAotCQlpbnQgc3BkID0gU21hcnRQb3dlckRvd25FbmFibGVbYmRdOwotCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJnNwZCwgJm9wdCwgYWRhcHRlcik7Ci0JCWFkYXB0ZXItPnNtYXJ0X3Bvd2VyX2Rvd24gPSBzcGQ7CisJCWlmIChudW1fU21hcnRQb3dlckRvd25FbmFibGUgPiBiZCkgeworCQkJaW50IHNwZCA9IFNtYXJ0UG93ZXJEb3duRW5hYmxlW2JkXTsKKwkJCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmc3BkLCAmb3B0LCBhZGFwdGVyKTsKKwkJCWFkYXB0ZXItPnNtYXJ0X3Bvd2VyX2Rvd24gPSBzcGQ7CisJCX0gZWxzZSB7CisJCQlhZGFwdGVyLT5zbWFydF9wb3dlcl9kb3duID0gb3B0LmRlZjsKKwkJfQogCX0KIAl7IC8qIEt1bWVyYW4gTG9jayBMb3NzIFdvcmthcm91bmQgKi8KIAkJc3RydWN0IGUxMDAwX29wdGlvbiBvcHQgPSB7CkBAIC01MDEsOSArNTQ2LDEzIEBACiAJCQkuZGVmICA9IE9QVElPTl9FTkFCTEVECiAJCX07CiAKKwkJaWYgKG51bV9LdW1lcmFuTG9ja0xvc3MgPiBiZCkgewogCQkJaW50IGttcm5fbG9ja19sb3NzID0gS3VtZXJhbkxvY2tMb3NzW2JkXTsKIAkJCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigma21ybl9sb2NrX2xvc3MsICZvcHQsIGFkYXB0ZXIpOwogCQkJYWRhcHRlci0+aHcua21ybl9sb2NrX2xvc3Nfd29ya2Fyb3VuZF9kaXNhYmxlZCA9ICFrbXJuX2xvY2tfbG9zczsKKwkJfSBlbHNlIHsKKwkJCWFkYXB0ZXItPmh3Lmttcm5fbG9ja19sb3NzX3dvcmthcm91bmRfZGlzYWJsZWQgPSAhb3B0LmRlZjsKKwkJfQogCX0KIAogCXN3aXRjaCAoYWRhcHRlci0+aHcubWVkaWFfdHlwZSkgewpAQCAtNTMwLDE4ICs1NzksMTcgQEAKIGUxMDAwX2NoZWNrX2ZpYmVyX29wdGlvbnMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaW50IGJkID0gYWRhcHRlci0+YmRfbnVtYmVyOwotCWJkID0gYmQgPiBFMTAwMF9NQVhfTklDID8gRTEwMDBfTUFYX05JQyA6IGJkOwotCWlmICgoU3BlZWRbYmRdICE9IE9QVElPTl9VTlNFVCkpIHsKKwlpZiAobnVtX1NwZWVkID4gYmQpIHsKIAkJRFBSSU5USyhQUk9CRSwgSU5GTywgIlNwZWVkIG5vdCB2YWxpZCBmb3IgZmliZXIgYWRhcHRlcnMsICIKIAkJICAgICAgICJwYXJhbWV0ZXIgaWdub3JlZFxuIik7CiAJfQogCi0JaWYgKChEdXBsZXhbYmRdICE9IE9QVElPTl9VTlNFVCkpIHsKKwlpZiAobnVtX0R1cGxleCA+IGJkKSB7CiAJCURQUklOVEsoUFJPQkUsIElORk8sICJEdXBsZXggbm90IHZhbGlkIGZvciBmaWJlciBhZGFwdGVycywgIgogCQkgICAgICAgInBhcmFtZXRlciBpZ25vcmVkXG4iKTsKIAl9CiAKLQlpZiAoKEF1dG9OZWdbYmRdICE9IE9QVElPTl9VTlNFVCkgJiYgKEF1dG9OZWdbYmRdICE9IDB4MjApKSB7CisJaWYgKChudW1fQXV0b05lZyA+IGJkKSAmJiAoQXV0b05lZ1tiZF0gIT0gMHgyMCkpIHsKIAkJRFBSSU5USyhQUk9CRSwgSU5GTywgIkF1dG9OZWcgb3RoZXIgdGhhbiAxMDAwL0Z1bGwgaXMgIgogCQkJCSAibm90IHZhbGlkIGZvciBmaWJlciBhZGFwdGVycywgIgogCQkJCSAicGFyYW1ldGVyIGlnbm9yZWRcbiIpOwpAQCAtNTYwLDcgKzYwOCw2IEBACiB7CiAJaW50IHNwZWVkLCBkcGx4LCBhbjsKIAlpbnQgYmQgPSBhZGFwdGVyLT5iZF9udW1iZXI7Ci0JYmQgPSBiZCA+IEUxMDAwX01BWF9OSUMgPyBFMTAwMF9NQVhfTklDIDogYmQ7CiAKIAl7IC8qIFNwZWVkICovCiAJCXN0cnVjdCBlMTAwMF9vcHRfbGlzdCBzcGVlZF9saXN0W10gPSB7eyAgICAgICAgICAwLCAiIiB9LApAQCAtNTc3LDggKzYyNCwxMiBAQAogCQkJCQkgLnAgPSBzcGVlZF9saXN0IH19CiAJCX07CiAKLQkJc3BlZWQgPSBTcGVlZFtiZF07Ci0JCWUxMDAwX3ZhbGlkYXRlX29wdGlvbigmc3BlZWQsICZvcHQsIGFkYXB0ZXIpOworCQlpZiAobnVtX1NwZWVkID4gYmQpIHsKKwkJCXNwZWVkID0gU3BlZWRbYmRdOworCQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZzcGVlZCwgJm9wdCwgYWRhcHRlcik7CisJCX0gZWxzZSB7CisJCQlzcGVlZCA9IG9wdC5kZWY7CisJCX0KIAl9CiAJeyAvKiBEdXBsZXggKi8KIAkJc3RydWN0IGUxMDAwX29wdF9saXN0IGRwbHhfbGlzdFtdID0ge3sgICAgICAgICAgIDAsICIiIH0sCkBAIC02MDAsMTEgKzY1MSwxNSBAQAogCQkJICAgICAgICAiU3BlZWQvRHVwbGV4L0F1dG9OZWcgcGFyYW1ldGVyIGlnbm9yZWQuXG4iKTsKIAkJCXJldHVybjsKIAkJfQotCQlkcGx4ID0gRHVwbGV4W2JkXTsKLQkJZTEwMDBfdmFsaWRhdGVfb3B0aW9uKCZkcGx4LCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKG51bV9EdXBsZXggPiBiZCkgeworCQkJZHBseCA9IER1cGxleFtiZF07CisJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmRwbHgsICZvcHQsIGFkYXB0ZXIpOworCQl9IGVsc2UgeworCQkJZHBseCA9IG9wdC5kZWY7CisJCX0KIAl9CiAKLQlpZiAoQXV0b05lZ1tiZF0gIT0gT1BUSU9OX1VOU0VUICYmIChzcGVlZCAhPSAwIHx8IGRwbHggIT0gMCkpIHsKKwlpZiAoKG51bV9BdXRvTmVnID4gYmQpICYmIChzcGVlZCAhPSAwIHx8IGRwbHggIT0gMCkpIHsKIAkJRFBSSU5USyhQUk9CRSwgSU5GTywKIAkJICAgICAgICJBdXRvTmVnIHNwZWNpZmllZCBhbG9uZyB3aXRoIFNwZWVkIG9yIER1cGxleCwgIgogCQkgICAgICAgInBhcmFtZXRlciBpZ25vcmVkXG4iKTsKQEAgLTY1MywxNSArNzA4LDE5IEBACiAJCQkJCSAucCA9IGFuX2xpc3QgfX0KIAkJfTsKIAotCQlhbiA9IEF1dG9OZWdbYmRdOwotCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFuLCAmb3B0LCBhZGFwdGVyKTsKKwkJaWYgKG51bV9BdXRvTmVnID4gYmQpIHsKKwkJCWFuID0gQXV0b05lZ1tiZF07CisJCQllMTAwMF92YWxpZGF0ZV9vcHRpb24oJmFuLCAmb3B0LCBhZGFwdGVyKTsKKwkJfSBlbHNlIHsKKwkJCWFuID0gb3B0LmRlZjsKKwkJfQogCQlhZGFwdGVyLT5ody5hdXRvbmVnX2FkdmVydGlzZWQgPSBhbjsKIAl9CiAKIAlzd2l0Y2ggKHNwZWVkICsgZHBseCkgewogCWNhc2UgMDoKIAkJYWRhcHRlci0+aHcuYXV0b25lZyA9IGFkYXB0ZXItPmZjX2F1dG9uZWcgPSAxOwotCQlpZiAoU3BlZWRbYmRdICE9IE9QVElPTl9VTlNFVCB8fCBEdXBsZXhbYmRdICE9IE9QVElPTl9VTlNFVCkKKwkJaWYgKChudW1fU3BlZWQgPiBiZCkgJiYgKHNwZWVkICE9IDAgfHwgZHBseCAhPSAwKSkKIAkJCURQUklOVEsoUFJPQkUsIElORk8sCiAJCQkgICAgICAgIlNwZWVkIGFuZCBkdXBsZXggYXV0b25lZ290aWF0aW9uIGVuYWJsZWRcbiIpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UyMTAwLmMgYi9kcml2ZXJzL25ldC9lMjEwMC5jCmluZGV4IGU1YzVjZDIuLmQzOWU4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UyMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZTIxMDAuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAKIHN0YXRpYyBpbnQgZTIxX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0MCisKIC8qICBQcm9iZSBmb3IgdGhlIEUyMTAwIHNlcmllcyBldGhlcmNhcmRzLiAgVGhlc2UgY2FyZHMgaGF2ZSBhbiA4MzkwIGF0IHRoZQogCWJhc2UgYWRkcmVzcyBhbmQgdGhlIHN0YXRpb24gYWRkcmVzcyBhdCBib3RoIG9mZnNldCAweDEwIGFuZCAweDE4LiAgSSByZWFkCiAJdGhlIHN0YXRpb24gYWRkcmVzcyBmcm9tIG9mZnNldCAweDE4IHRvIGF2b2lkIHRoZSBkYXRhcG9ydCBvZiBORTIwMDAKQEAgLTQwMyw3ICs0MDMsNyBAQAogCXJldHVybiAwOwogfQogCi0MCisKICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgTUFYX0UyMV9DQVJEUwk0CS8qIE1heCBudW1iZXIgb2YgRTIxIGNhcmRzIHBlciBtb2R1bGUgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2UyMVtNQVhfRTIxX0NBUkRTXTsKQEAgLTQyNSw4ICs0MjUsOCBAQAogCiAvKiBUaGlzIGlzIHNldCB1cCBzbyB0aGF0IG9ubHkgYSBzaW5nbGUgYXV0b3Byb2JlIHRha2VzIHBsYWNlIHBlciBjYWxsLgogSVNBIGRldmljZSBhdXRvcHJvYmVzIG9uIGEgcnVubmluZyBtYWNoaW5lIGFyZSBub3QgcmVjb21tZW5kZWQuICovCi1pbnQKLWluaXRfbW9kdWxlKHZvaWQpCisKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWVwcm8uYyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKaW5kZXggMjBkMzE0My4uMDlmZjliOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWVwcm8uYworKysgYi9kcml2ZXJzL25ldC9lZXByby5jCkBAIC0xNTQsNyArMTU0LDcgQEAKICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgImVlcHJvIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4xM2IiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjEzYyIKIAogI2RlZmluZSBjb21wYXRfZGV2X2tmcmVlX3NrYiggc2tiLCBtb2RlICkgZGV2X2tmcmVlX3NrYiggKHNrYikgKQogLyogSSBoYWQgcmVwb3J0cyBvZiBsb29vbmcgZGVsYXlzIHdpdGggU0xPV19ET1dOIGRlZmluZWQgYXMgdWRlbGF5KDIpICovCkBAIC03NDMsNyArNzQzLDcgQEAKIAkJcHJpbnRFRVBST01JbmZvKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZWVwcm9fZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVlcHJvX2V0aHRvb2xfb3BzOwogCiAvKiBUaGlzIGlzIHRoZSByZWFsIHByb2JlIHJvdXRpbmUuICBMaW51eCBoYXMgYSBoaXN0b3J5IG9mIGZyaWVuZGx5IGRldmljZQogICAgcHJvYmVzIG9uIHRoZSBJU0EgYnVzLiAgQSBnb29kIGRldmljZSBwcm9iZSBhdm9pZHMgZG9pbmcgd3JpdGVzLCBhbmQKQEAgLTEzMzMsNyArMTMzMyw2IEBACiAJCW1vZGUgPSBpbmIoaW9hZGRyICsgUkVHMyk7CiAJCW91dGIobW9kZSwgaW9hZGRyICsgUkVHMyk7IC8qIHdyaXRpbmcgcmVnLiAzIHRvIGNvbXBsZXRlIHRoZSB1cGRhdGUgKi8KIAkJZWVwcm9fc3cyYmFuazAoaW9hZGRyKTsgLyogUmV0dXJuIHRvIEJBTksgMCBub3cgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CiAJfQogCiAJZWxzZSBpZiAoZGV2LT5tY19jb3VudD09MCApCkBAIC0xNzcyLDcgKzE3NzEsNyBAQAogCXNwcmludGYoZHJ2aW5mby0+YnVzX2luZm8sICJJU0EgMHglbHgiLCBkZXYtPmJhc2VfYWRkcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZWVwcm9fZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVlcHJvX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSBlZXByb19ldGh0b29sX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gCT0gZWVwcm9fZXRodG9vbF9nZXRfZHJ2aW5mbywKIH07CkBAIC0xODA3LDggKzE4MDYsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhtZW0sICJFdGhlckV4cHJlc3MgUHJvLzEwIFJ4IGJ1ZmZlciBzaXplKGVzKSBpbiBrQiAoMy0yOSkiKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXV0b2RldGVjdCwgIkV0aGVyRXhwcmVzcyBQcm8vMTAgZm9yY2UgYm9hcmQocykgZGV0ZWN0aW9uICgwLTEpIik7CiAKLWludAotaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWVwcm8xMDAuYyBiL2RyaXZlcnMvbmV0L2VlcHJvMTAwLmMKaW5kZXggZTQ0NTk4OC4uNDk5ZTkzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWVwcm8xMDAuYworKysgYi9kcml2ZXJzL25ldC9lZXBybzEwMC5jCkBAIC00OTQsOSArNDk0LDkgQEAKIHN0YXRpYyBpbnQgc3BlZWRvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzcGVlZG9fc2hvd19zdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogCi0MCisKIAogI2lmZGVmIGhvbm9yX2RlZmF1bHRfcG9ydAogLyogT3B0aW9uYWwgZHJpdmVyIGZlYXR1cmUgdG8gYWxsb3cgZm9yY2luZyB0aGUgdHJhbnNjZWl2ZXIgc2V0dGluZy4KQEAgLTY0Niw3ICs2NDYsNyBAQAogCQlvcHRpb24gPSAwOwogCiAJcnRubF9sb2NrKCk7Ci0JaWYgKGRldl9hbGxvY19uYW1lKGRldiwgZGV2LT5uYW1lKSA8IDApIAorCWlmIChkZXZfYWxsb2NfbmFtZShkZXYsIGRldi0+bmFtZSkgPCAwKQogCQlnb3RvIGVycl9mcmVlX3VubG9jazsKIAogCS8qIFJlYWQgdGhlIHN0YXRpb24gYWRkcmVzcyBFRVBST00gYmVmb3JlIGRvaW5nIHRoZSByZXNldC4KQEAgLTgyNSwxMCArODI1LDEwIEBACiAJc3AtPm1paV9pZi5kZXYgPSBkZXY7CiAJc3AtPm1paV9pZi5tZGlvX3JlYWQgPSBtZGlvX3JlYWQ7CiAJc3AtPm1paV9pZi5tZGlvX3dyaXRlID0gbWRpb193cml0ZTsKLQkKKwogCXNwLT5yeF9idWcgPSAoZWVwcm9tWzNdICYgMHgwMykgPT0gMyA/IDAgOiAxOwotCWlmICgoKHBkZXYtPmRldmljZSA+IDB4MTAzMCAmJiAocGRldi0+ZGV2aWNlIDwgMHgxMDNGKSkpIAotCSAgICB8fCAocGRldi0+ZGV2aWNlID09IDB4MjQ0OSkgfHwgKHBkZXYtPmRldmljZSA9PSAweDI0NTkpIAorCWlmICgoKHBkZXYtPmRldmljZSA+IDB4MTAzMCAmJiAocGRldi0+ZGV2aWNlIDwgMHgxMDNGKSkpCisJICAgIHx8IChwZGV2LT5kZXZpY2UgPT0gMHgyNDQ5KSB8fCAocGRldi0+ZGV2aWNlID09IDB4MjQ1OSkKICAgICAgICAgICAgIHx8IChwZGV2LT5kZXZpY2UgPT0gMHgyNDVEKSkgewogCSAgICAJc3AtPmNoaXBfaWQgPSAxOwogCX0KQEAgLTEyMDgsNyArMTIwOCw3IEBACiAJaW50IGk7CiAKIAlpZiAobmV0aWZfbXNnX3BrdGRhdGEoc3ApKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogVHggcmluZyBkdW1wLCAgVHggcXVldWUgJXUgLyAldTpcbiIsIAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHJpbmcgZHVtcCwgIFR4IHF1ZXVlICV1IC8gJXU6XG4iLAogCQkgICAgZGV2LT5uYW1lLCBzcC0+Y3VyX3R4LCBzcC0+ZGlydHlfdHgpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICAlYyVjJTJkICU4Ljh4LlxuIiwgZGV2LT5uYW1lLApAQCAtMTU4Niw3ICsxNTg2LDcgQEAKIAogCQkvKiBBbHdheXMgY2hlY2sgaWYgYWxsIHJ4IGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZC4gIC0tU0FXICovCiAJCXNwZWVkb19yZWZpbGxfcnhfYnVmZmVycyhkZXYsIDApOwotCQkKKwogCQlzcGluX2xvY2soJnNwLT5sb2NrKTsKIAkJLyoKIAkJICogVGhlIGNoaXAgbWF5IGhhdmUgc3VzcGVuZGVkIHJlY2VwdGlvbiBmb3IgdmFyaW91cyByZWFzb25zLgpAQCAtMTYwNyw4ICsxNjA3LDggQEAKIAkJCS8qIHRoZXNlIGFyZSBhbGwgcmVzZXJ2ZWQgdmFsdWVzICovCiAJCQlicmVhazsKIAkJfQotCQkKLQkJCisKKwogCQkvKiBVc2VyIGludGVycnVwdCwgQ29tbWFuZC9UeCB1bml0IGludGVycnVwdCBvciBDVSBub3QgYWN0aXZlLiAqLwogCQlpZiAoc3RhdHVzICYgMHhBNDAwKSB7CiAJCQlzcGVlZG9fdHhfYnVmZmVyX2djKGRldik7CkBAIC0xNjE5LDcgKzE2MTksNyBAQAogCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsgLyogQXR0ZW50aW9uOiB1bmRlciBhIHNwaW5sb2NrLiAgLS1TQVcgKi8KIAkJCX0KIAkJfQotCQkKKwogCQlzcGluX3VubG9jaygmc3AtPmxvY2spOwogCiAJCWlmICgtLWJvZ3VzY250IDwgMCkgewpAQCAtMjAxNSw3ICsyMDE1LDcgQEAKIAlzcC0+bXNnX2VuYWJsZSA9IHY7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IHNwZWVkb19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gc3BlZWRvX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gc3BlZWRvX3NldF9zZXR0aW5ncywKQEAgLTIyNjMsNyArMjI2Myw3IEBACiAKIAlzcC0+cnhfbW9kZSA9IG5ld19yeF9tb2RlOwogfQotDAorCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGVlcHJvMTAwX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTIyNzUsMTIgKzIyNzUsMTIgQEAKIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKLQkJCisKIAlkZWxfdGltZXJfc3luYygmc3AtPnRpbWVyKTsKIAogCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKIAlpb3dyaXRlMzIoUG9ydFBhcnRpYWxSZXNldCwgaW9hZGRyICsgU0NCUG9ydCk7Ci0JCisKIAkvKiBYWFggY2FsbCBwY2lfc2V0X3Bvd2VyX3N0YXRlICgpPyAqLwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlIChwZGV2LCBQQ0lfRDNob3QpOwpAQCAtMjMyNCw3ICsyMzI0LDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKIAlzdHJ1Y3Qgc3BlZWRvX3ByaXZhdGUgKnNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKIAlyZWxlYXNlX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSksIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkpOwpAQCAtMjMzNyw3ICsyMzM3LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAJZnJlZV9uZXRkZXYoZGV2KTsKIH0KLQwKKwogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVlcHJvMTAwX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTIyOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTIwOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKQEAgLTIzNjgsNyArMjM2OCw3IEBACiAJeyAwLH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZWVwcm8xMDBfcGNpX3RibCk7Ci0JCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBlZXBybzEwMF9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gImVlcHJvMTAwIiwKIAkuaWRfdGFibGUJPSBlZXBybzEwMF9wY2lfdGJsLApAQCAtMjM4NSw3ICsyMzg1LDcgQEAKICNpZmRlZiBNT0RVTEUKIAlwcmludGsodmVyc2lvbik7CiAjZW5kaWYKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZlZXBybzEwMF9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZlZXBybzEwMF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZWVwcm8xMDBfY2xlYW51cF9tb2R1bGUodm9pZCkKQEAgLTIzOTUsNyArMjM5NSw3IEBACiAKIG1vZHVsZV9pbml0KGVlcHJvMTAwX2luaXRfbW9kdWxlKTsKIG1vZHVsZV9leGl0KGVlcHJvMTAwX2NsZWFudXBfbW9kdWxlKTsKLQwKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqICBjb21waWxlLWNvbW1hbmQ6ICJnY2MgLURNT0RVTEUgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvbmV0L2luZXQgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzYgLWMgZWVwcm8xMDAuYyBgWyAtZiAvdXNyL2luY2x1ZGUvbGludXgvbW9kdmVyc2lvbnMuaCBdICYmIGVjaG8gLURNT0RWRVJTSU9OU2AiCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5jIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuYwppbmRleCAzMzI5MWJjLi45Y2IwNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCisrKyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKQEAgLTc3LDcgKzc3LDcgQEAKICAqIENVIGJlZm9yZSBzdWJtaXR0aW5nIGEgcGFja2V0IGZvciB0cmFuc21pc3Npb24sIGFuZCB0aGVuIHJlc3RhcnRzIGl0IGFzIHNvb24KICAqIGFzIHRoZSBwcm9jZXNzIG9mIGhhbmRpbmcgdGhlIHBhY2tldCBpcyBjb21wbGV0ZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGFuCiAgKiB1bm5lY2Vzc2FyeSBzbG93ZG93biBpZiB0aGUgY2FyZCBpcyBydW5uaW5nIGluIDE2LWJpdCBtb2RlOyB0aGVyZWZvcmUgb25lCi0gKiBzaG91bGQgZGV0ZWN0IDE2LWJpdCB2cyA4LWJpdCBtb2RlIGZyb20gdGhlIEVFUFJPTSBzZXR0aW5ncyBhbmQgYWN0IAorICogc2hvdWxkIGRldGVjdCAxNi1iaXQgdnMgOC1iaXQgbW9kZSBmcm9tIHRoZSBFRVBST00gc2V0dGluZ3MgYW5kIGFjdAogICogYWNjb3JkaW5nbHkuIEluIDgtYml0IG1vZGUgd2l0aCB0aGlzIGJ1Z2ZpeCBJJ20gZ2V0dGluZyBhYm91dCAxNTAgSy9zIGZvcgogICogZnRwJ3MsIHdoaWNoIGlzIHNpZ25pZmljYW50bHkgYmV0dGVyIHRoYW4gSSBnZXQgaW4gRE9TLCBzbyB0aGUgb3ZlcmhlYWQgb2YKICAqIHN0b3BwaW5nIGFuZCByZXN0YXJ0aW5nIHRoZSBDVSB3aXRoIGVhY2ggdHJhbnNtaXQgaXMgbm90IHByb2hpYml0aXZlIGluCkBAIC05Niw3ICs5Niw3IEBACiAjaWZuZGVmIExPQ0tVUDE2CiAjZGVmaW5lIExPQ0tVUDE2IDAKICNlbmRpZgotICAKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0xNzcsNyArMTc3LDcgQEAKIAogLyogMHgyMCAtLSBzdGFydCBvZiA4MjU4NiBDVSBwcm9ncmFtICovCiAjZGVmaW5lIENPTkZfTElOSyAweDIwCi0JMHgwMDAwLENtZF9Db25maWcsICAgICAgCisJMHgwMDAwLENtZF9Db25maWcsCiAJMHgwMDMyLCAgICAgICAgICAgICAgICAgLyogbGluayB0byBuZXh0IGNvbW1hbmQgKi8KIAkweDA4MGMsICAgICAgICAgICAgICAgICAvKiAxMiBieXRlcyBmb2xsb3cgOiBmaWZvIHRocmVzaG9sZD04ICovCiAJMHgyZTQwLCAgICAgICAgICAgICAgICAgLyogZG9uJ3QgcnggYmFkIGZyYW1lcwpAQCAtMTg3LDEwICsxODcsMTAgQEAKIAkJCQkgKi8KIAkweDYwMDAsICAgICAgICAgICAgICAgICAvKiBkZWZhdWx0IGJhY2tvZmYgbWV0aG9kICYgcHJpb3JpdHkKIAkJCQkgKiBpbnRlcmZyYW1lIHNwYWNpbmcgPSAweDYwICovCi0JMHhmMjAwLCAgICAgICAgICAgICAgICAgLyogc2xvdCB0aW1lPTB4MjAwIAorCTB4ZjIwMCwgICAgICAgICAgICAgICAgIC8qIHNsb3QgdGltZT0weDIwMAogCQkJCSAqIG1heCBjb2xsaXNpb24gcmV0cnkgPSAweGYgKi8KICNkZWZpbmUgQ09ORl9QUk9NSVNDICAweDJlCi0JMHgwMDAwLCAgICAgICAgICAgICAgICAgLyogbm8gSERMQyA6IG5vcm1hbCBDUkMgOiBlbmFibGUgYnJvYWRjYXN0IAorCTB4MDAwMCwgICAgICAgICAgICAgICAgIC8qIG5vIEhETEMgOiBub3JtYWwgQ1JDIDogZW5hYmxlIGJyb2FkY2FzdAogCQkJCSAqIGRpc2FibGUgcHJvbWlzY3VvdXMvbXVsdGljYXN0IG1vZGVzICovCiAJMHgwMDNjLCAgICAgICAgICAgICAgICAgLyogbWluaW11bSBmcmFtZSBsZW5ndGggPSA2MCBvY3RldHMpICovCiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogfTsKIC8qIGJpdHMgNS03IG9mIHRoZSBzZWNvbmQgUE9TIHJlZ2lzdGVyICovCiBzdGF0aWMgY2hhciBtY2FfaXJxbWFwW10gPSB7IDEyLCA5LCAzLCA0LCA1LCAxMCwgMTEsIDE1IH07Ci0jZW5kaWYgCisjZW5kaWYKIAogLyoKICAqIFByb3RvdHlwZXMgZm9yIExpbnV4IGludGVyZmFjZQpAQCAtMzU2LDcgKzM1Niw3IEBACiAJCSAqLwogCQl3aGlsZSAoc2xvdCAhPSBNQ0FfTk9URk9VTkQpIHsKIAkJCWludCBwb3MwLCBwb3MxOwotCQkJCisKIAkJCXNsb3QgPSBtY2FfZmluZF91bnVzZWRfYWRhcHRlcigweDYyOEIsIHNsb3QpOwogCQkJaWYgKHNsb3QgPT0gTUNBX05PVEZPVU5EKQogCQkJCWJyZWFrOwpAQCAtMzY2LDEwICszNjYsMTAgQEAKIAkJCWlvYWRkciA9IG1jYV9pb21hcFtwb3MxJjB4Zl07CiAKIAkJCWRldi0+aXJxID0gbWNhX2lycW1hcFsocG9zMT4+NCkmMHg3XTsKLQkJCQorCiAJCQkvKgogCQkJICogWFhYOiBUcmFuc2NpZXZlciBzZWxlY3Rpb24gaXMgZG9uZQotCQkJICogZGlmZmVyZW50bHkgb24gdGhlIE1DQSB2ZXJzaW9uLiAgCisJCQkgKiBkaWZmZXJlbnRseSBvbiB0aGUgTUNBIHZlcnNpb24uCiAJCQkgKiBIb3cgdG8gZ2V0IGl0IHRvIHNlbGVjdCBzb21ldGhpbmcKIAkJCSAqIG90aGVyIHRoYW4gZXh0ZXJuYWwvQVVJIGlzIGN1cnJlbnRseQogCQkJICogdW5rbm93bi4gIFRoaXMgY29kZSBpcyBqdXN0IGZvciBsb29rcy4gLS0gQVNGCkBAIC00ODIsNyArNDgyLDcgQEAKIAkJCSwgaW9hZGRyKzB4YzAwMCk7CiAJCWdvdG8gZXJyX291dDQ7CiAJfQotCQorCiAJaWYgKGxwLT53aWR0aCkgewogCQlwcmludGsoIiVzOiBmb3JjaW5nIEFTSUMgdG8gOC1iaXQgbW9kZVxuIiwgZGV2LT5uYW1lKTsKIAkJb3V0YihpbmIoZGV2LT5iYXNlX2FkZHIrQ29uZmlnKSZ+NCwgZGV2LT5iYXNlX2FkZHIrQ29uZmlnKTsKQEAgLTUxOCw3ICs1MTgsNyBAQAogCWludCBpcnEgPSBkZXYtPmlycTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCW91dGIoU0lSUV9kaXN8aXJxcm1hcFtpcnFdLGlvYWRkcitTRVRfSVJRKTsKIAlscC0+c3RhcnRlZCA9IDA7CiAJc2NiX2NvbW1hbmQoZGV2LCBTQ0JfQ1VzdXNwZW5kfFNDQl9SVXN1c3BlbmQpOwpAQCAtNjMwLDE0ICs2MzAsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2VuZGlmCiAJaW50IHN0YXR1czsKLQkKKwogCWRpc2FibGVfaXJxKGRldi0+aXJxKTsKIAogCS8qCiAJICoJQmVzdCB3b3VsZCBiZSB0byB1c2Ugc3luY2hyb25pemVfaXJxKCk7IHNwaW5fbG9jaygpIGhlcmUKIAkgKglsZXRzIG1ha2UgaXQgd29yayBmaXJzdC4uCiAJICovCi0JIAorCiAjaWZkZWYgQ09ORklHX1NNUAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogI2VuZGlmCkBAIC02NTMsNyArNjUzLDcgQEAKIAkJc2NiX2NvbW1hbmQoZGV2LCBTQ0JfQ1VhYm9ydCk7CiAJCW91dGIoMCxkZXYtPmJhc2VfYWRkcitTSUdOQUxfQ0EpOwogCX0KLQluZXRpZl93YWtlX3F1ZXVlKGRldik7CQorCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKICNpZmRlZiBDT05GSUdfU01QCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKICNlbmRpZgpAQCAtNjg3LDExICs2ODcsMTEgQEAKIAkgKglCZXN0IHdvdWxkIGJlIHRvIHVzZSBzeW5jaHJvbml6ZV9pcnEoKTsgc3Bpbl9sb2NrKCkgaGVyZQogCSAqCWxldHMgbWFrZSBpdCB3b3JrIGZpcnN0Li4KIAkgKi8KLQkgCisKICNpZmRlZiBDT05GSUdfU01QCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAjZW5kaWYKLSAgCisKIAl7CiAJCXVuc2lnbmVkIHNob3J0ICpkYXRhID0gKHVuc2lnbmVkIHNob3J0ICopYnVmLT5kYXRhOwogCkBAIC03MzksNyArNzM5LDcgQEAKIAkJb3V0dyhDT05GX0RJQUdfUkVTVUxUICYgfjMxLCBpb2FkZHIgKyBTTV9QVFIpOwogCQlkaWFnX3N0YXR1cyA9IGludyhpb2FkZHIgKyBTSEFET1coQ09ORl9ESUFHX1JFU1VMVCkpOwogCQlpZiAoZGlhZ19zdGF0dXMgJiAxPDwxMSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IDgyNTg2IGZhaWxlZCBzZWxmLXRlc3RcbiIsIAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IDgyNTg2IGZhaWxlZCBzZWxmLXRlc3RcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJfSBlbHNlIGlmICghKGRpYWdfc3RhdHVzICYgMTw8MTMpKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogODI1ODYgc2VsZi10ZXN0IGZhaWxlZCB0byBjb21wbGV0ZVxuIiwgZGV2LT5uYW1lKTsKQEAgLTc0OSw3ICs3NDksNyBAQAogCQl0ZHJfc3RhdHVzID0gaW53KGlvYWRkciArIFNIQURPVyhDT05GX1REUl9SRVNVTFQpKTsKIAkJaWYgKHRkcl9zdGF0dXMgJiAoVERSX1NIT1JUfFREUl9PUEVOKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFREUiByZXBvcnRzIGNhYmxlICVzIGF0ICVkIHRpY2slc1xuIiwgZGV2LT5uYW1lLCAodGRyX3N0YXR1cyAmIFREUl9TSE9SVCk/InNob3J0IjoiYnJva2VuIiwgdGRyX3N0YXR1cyAmIFREUl9USU1FLCAoKHRkcl9zdGF0dXMgJiBURFJfVElNRSkgIT0gMSkgPyAicyIgOiAiIik7Ci0JCX0gCisJCX0KIAkJZWxzZSBpZiAodGRyX3N0YXR1cyAmIFREUl9YQ1ZSUFJPQkxFTSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFREUiByZXBvcnRzIHRyYW5zY2VpdmVyIHByb2JsZW1cbiIsIGRldi0+bmFtZSk7CiAJCX0KQEAgLTc2MSw3ICs3NjEsNyBAQAogCQkJcHJpbnRrKCIlczogVERSIGlzIGdhLWdhIChzdGF0dXMgJTA0eClcbiIsIGRldi0+bmFtZSwKIAkJCSAgICAgICB0ZHJfc3RhdHVzKTsKIAkJfQotCQkJCisKIAkJbHAtPnN0YXJ0ZWQgfD0gU1RBUlRFRF9DVTsKIAkJc2NiX3dyY2JsKGRldiwgbHAtPnR4X2xpbmspOwogCQkvKiBpZiB0aGUgUlUgaXNuJ3QgcnVubmluZywgc3RhcnQgaXQgbm93ICovCkBAIC03NzQsNyArNzc0LDcgQEAKIAkJYWNrX2NtZCB8PSBTQ0JfQ1VzdGFydCB8IDB4MjAwMDsKIAl9CiAKLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfVVApICYmICEobHAtPnN0YXJ0ZWQgJiBTVEFSVEVEX1JVKSAmJiBTQ0JfUlVzdGF0KHN0YXR1cyk9PTQpIAorCWlmICgoZGV2LT5mbGFncyAmIElGRl9VUCkgJiYgIShscC0+c3RhcnRlZCAmIFNUQVJURURfUlUpICYmIFNDQl9SVXN0YXQoc3RhdHVzKT09NCkKIAkJbHAtPnN0YXJ0ZWR8PVNUQVJURURfUlU7CiAKIAlyZXR1cm4gYWNrX2NtZDsKQEAgLTc4OCw3ICs3ODgsNyBAQAogCQlwcmludGsoIiVzOiBjb21tYW5kIGRpZG4ndCBjbGVhclxuIiwgZGV2LT5uYW1lKTsKIAl9CiB9Ci0JCisKIHN0YXRpYyBpcnFyZXR1cm5fdCBlZXhwX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaW5mbywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pbmZvOwpAQCAtODEzLDcgKzgxMyw3IEBACiAKIAlvdXRiKFNJUlFfZGlzfGlycXJtYXBbaXJxXSxpb2FkZHIrU0VUX0lSUSk7CiAKLQkKKwogCXN0YXR1cyA9IHNjYl9zdGF0dXMoZGV2KTsKIAogI2lmIE5FVF9ERUJVRyA+IDQKQEAgLTgzNiwxNCArODM2LDE0IEBACiAJCQkJCXByaW50aygiJXM6IHR4IGludGVycnVwdCBidXQgbm8gc3RhdHVzXG4iLCBkZXYtPm5hbWUpOwogCQkJCX0KIAkJCX0KLQkJCQotCQkJaWYgKFNDQl9yeGRmcmFtZShzdGF0dXMpKSAKKworCQkJaWYgKFNDQl9yeGRmcmFtZShzdGF0dXMpKQogCQkJCWVleHBfaHdfcnhfcGlvKGRldik7CiAKIAkJCXN0YXR1cyA9IHNjYl9zdGF0dXMoZGV2KTsKIAkJfSB3aGlsZSAoc3RhdHVzICYgMHhjMDAwKTsKIAotCQlpZiAoU0NCX1JVZGVhZChzdGF0dXMpKSAKKwkJaWYgKFNDQl9SVWRlYWQoc3RhdHVzKSkKIAkJewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFJVIHN0b3BwZWQ6IHN0YXR1cyAlMDR4XG4iLAogCQkJICAgICAgIGRldi0+bmFtZSxzdGF0dXMpOwpAQCAtODY3LDkgKzg2Nyw5IEBACiAJCQlzY2Jfd3JyZmEoZGV2LCBscC0+cnhfYnVmX3N0YXJ0KTsKIAkJCXNjYl9jb21tYW5kKGRldiwgU0NCX1JVc3RhcnQpOwogCQkJb3V0YigwLGlvYWRkcitTSUdOQUxfQ0EpOwotCQl9IAorCQl9CiAJfSBlbHNlIHsKLQkJaWYgKHN0YXR1cyAmIDB4ODAwMCkgCisJCWlmIChzdGF0dXMgJiAweDgwMDApCiAJCQlhY2tfY21kID0gZWV4cF9zdGFydF9pcnEoZGV2LCBzdGF0dXMpOwogCQllbHNlCiAJCQlhY2tfY21kID0gU0NCX2FjayhzdGF0dXMpOwpAQCAtODc5LDE0ICs4NzksMTQgQEAKIAogCWVleHBfY21kX2NsZWFyKGRldik7CiAKLQlvdXRiKFNJUlFfZW58aXJxcm1hcFtpcnFdLGlvYWRkcitTRVRfSVJRKTsgCisJb3V0YihTSVJRX2VufGlycXJtYXBbaXJxXSxpb2FkZHIrU0VUX0lSUSk7CiAKLSNpZiBORVRfREVCVUcgPiA2IAorI2lmIE5FVF9ERUJVRyA+IDYKIAlwcmludGsoIiVzOiBsZWF2aW5nIGVleHBfaXJxKClcbiIsIGRldi0+bmFtZSk7CiAjZW5kaWYKIAlvdXR3KG9sZF9yZWFkX3B0ciwgaW9hZGRyK1JFQURfUFRSKTsKIAlvdXR3KG9sZF93cml0ZV9wdHIsIGlvYWRkcitXUklURV9QVFIpOwotCQorCiAJc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC05MzQsNyArOTM0LDcgQEAKIAogIAlkbyB7CiAgCQl1bnNpZ25lZCBzaG9ydCByZmRfY21kLCByeF9uZXh0LCBwYnVmLCBwa3RfbGVuOwotICAKKwogCQlvdXR3KHJ4X2Jsb2NrLCBpb2FkZHIgKyBSRUFEX1BUUik7CiAJCXN0YXR1cyA9IGludyhpb2FkZHIgKyBEQVRBUE9SVCk7CiAKQEAgLTk0Myw3ICs5NDMsNyBAQAogCQkJcmZkX2NtZCA9IGludyhpb2FkZHIgKyBEQVRBUE9SVCk7CiAJCQlyeF9uZXh0ID0gaW53KGlvYWRkciArIERBVEFQT1JUKTsKIAkJCXBidWYgPSBpbncoaW9hZGRyICsgREFUQVBPUlQpOwotIAorCiAJCQlvdXR3KHBidWYsIGlvYWRkciArIFJFQURfUFRSKTsKIAkJCXBrdF9sZW4gPSBpbncoaW9hZGRyICsgREFUQVBPUlQpOwogCkBAIC05NTUsMTcgKzk1NSwxNyBAQAogCQkJfQogCQkJZWxzZSBpZiAocGJ1ZiE9cnhfYmxvY2srMHgxNikKIAkJCXsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcmZkIGFuZCByYmQgb3V0IG9mIHN5bmMgMHglMDR4IDB4JTA0eFxuIiwgCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHJmZCBhbmQgcmJkIG91dCBvZiBzeW5jIDB4JTA0eCAweCUwNHhcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgcnhfYmxvY2srMHgxNiwgcGJ1Zik7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQllbHNlIGlmICgocGt0X2xlbiAmIDB4YzAwMCkhPTB4YzAwMCkgCisJCQllbHNlIGlmICgocGt0X2xlbiAmIDB4YzAwMCkhPTB4YzAwMCkKIAkJCXsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogRU9GIG9yIEYgbm90IHNldCBvbiByZWNlaXZlZCBidWZmZXIgKCUwNHgpXG4iLAogCQkJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4gJiAweGMwMDApOwogICAJCQkJY29udGludWU7CiAgIAkJCX0KLSAgCQkJZWxzZSBpZiAoIUZEX09LKHN0YXR1cykpIAorICAJCQllbHNlIGlmICghRkRfT0soc3RhdHVzKSkKIAkJCXsKIAkJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKEZEX0NSQyhzdGF0dXMpKQpAQCAtMTAyNSw5ICsxMDI1LDkgQEAKIAlpZiAoTE9DS1VQMTYgfHwgbHAtPndpZHRoKSB7CiAJCS8qIFN0b3AgdGhlIENVIHNvIHRoYXQgdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgaXQKIAkJICAganVtcHMgb2ZmIHRvIGEgYm9ndXMgYWRkcmVzcyB3aGlsZSB3ZSBhcmUgd3JpdGluZyB0aGUKLQkJICAgcG9pbnRlciB0byB0aGUgbmV4dCB0cmFuc21pdCBwYWNrZXQgaW4gOC1iaXQgbW9kZSAtLSAKKwkJICAgcG9pbnRlciB0byB0aGUgbmV4dCB0cmFuc21pdCBwYWNrZXQgaW4gOC1iaXQgbW9kZSAtLQogCQkgICB0aGlzIGVsaW1pbmF0ZXMgdGhlICJDVSB3ZWRnZWQiIGVycm9ycyBpbiA4LWJpdCBtb2RlLgotCQkgICAoWm9sdGFuIFN6aWxhZ3lpIDEwLTEyLTk2KSAqLyAKKwkJICAgKFpvbHRhbiBTemlsYWd5aSAxMC0xMi05NikgKi8KIAkJc2NiX2NvbW1hbmQoZGV2LCBTQ0JfQ1VzdXNwZW5kKTsKIAkJb3V0dygweEZGRkYsIGlvYWRkcitTSUdOQUxfQ0EpOwogCX0KQEAgLTEwNjEsNyArMTA2MSw3IEBACiAJCWxwLT50eF9oZWFkICs9IFRYX0JVRl9TSVpFOwogCWlmIChscC0+dHhfaGVhZCAhPSBscC0+dHhfcmVhcCkKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkKKwogCWlmIChMT0NLVVAxNiB8fCBscC0+d2lkdGgpIHsKIAkJLyogUmVzdGFydCB0aGUgQ1Ugc28gdGhhdCB0aGUgcGFja2V0IGNhbiBhY3R1YWxseQogCQkgICBiZSB0cmFuc21pdHRlZC4gKFpvbHRhbiBTemlsYWd5aSAxMC0xMi05NikgKi8KQEAgLTExMDIsNyArMTEwMiw3IEBACiAKIAkvKiBTdGFuZGFyZCBBZGRyZXNzIG9yIENvbXBhcSBMVEUgQWRkcmVzcyAqLwogCWlmICghKChod19hZGRyWzJdPT0weDAwYWEgJiYgKChod19hZGRyWzFdICYgMHhmZjAwKT09MHgwMDAwKSkgfHwKLQkgICAgICAoaHdfYWRkclsyXT09MHgwMDgwICYmICgoaHdfYWRkclsxXSAmIDB4ZmYwMCk9PTB4NUYwMCkpKSkgCisJICAgICAgKGh3X2FkZHJbMl09PTB4MDA4MCAmJiAoKGh3X2FkZHJbMV0gJiAweGZmMDApPT0weDVGMDApKSkpCiAJewogCQlwcmludGsoIiByZWplY3RlZDogaW52YWxpZCBhZGRyZXNzICUwNHglMDR4JTA0eFxuIiwKIAkJCWh3X2FkZHJbMl0saHdfYWRkclsxXSxod19hZGRyWzBdKTsKQEAgLTExNDAsMTYgKzExNDAsMTYgQEAKIAltZW1zZXQobHAsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7CiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKIAotIAlwcmludGsoIihJUlEgJWQsICVzIGNvbm5lY3RvciwgJWQtYml0IGJ1cyIsIGRldi0+aXJxLCAKKyAJcHJpbnRrKCIoSVJRICVkLCAlcyBjb25uZWN0b3IsICVkLWJpdCBidXMiLCBkZXYtPmlycSwKICAJICAgICAgIGVleHBfaWZtYXBbZGV2LT5pZl9wb3J0XSwgYnVzd2lkdGg/ODoxNik7Ci0gCisKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+YmFzZV9hZGRyICsgMHgzMDBlLCAxLCAiRXRoZXJFeHByZXNzIikpCiAJCXJldHVybiAtRUJVU1k7CiAKICAJZWV4cF9od19zZXRfaW50ZXJmYWNlKGRldik7Ci0gCisKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmJhc2VfYWRkciArIDB4MzAwZSwgMSk7Ci0gIAorCiAJLyogRmluZCBvdXQgaG93IG11Y2ggUkFNIHdlIGhhdmUgb24gdGhlIGNhcmQgKi8KIAlvdXR3KDAsIGRldi0+YmFzZV9hZGRyICsgV1JJVEVfUFRSKTsKIAlmb3IgKGkgPSAwOyBpIDwgMzI3Njg7IGkrKykKQEAgLTEyODQsNyArMTI4NCw3IEBACiAJCQl7CiAJCQkJY2hhciAqd2hhdHN1cCA9IE5VTEw7CiAJCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwotICAJCQkJaWYgKFN0YXRfQWJvcnQoc3RhdHVzKSkgCisgIAkJCQlpZiAoU3RhdF9BYm9ydChzdGF0dXMpKQogICAJCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwogCQkJCWlmIChTdGF0X1ROb0NhcihzdGF0dXMpKSB7CiAJCQkJCXdoYXRzdXAgPSAiYWJvcnRlZCwgbm8gY2FycmllciI7CkBAIC0xNDYwLDExICsxNDYwLDExIEBACiAJLyogQ2xvc2UgUnggZnJhbWUgZGVzY3JpcHRvciByaW5nICovCiAgIAlvdXR3KGxwLT5yeF9sYXN0ICsgNCwgaW9hZGRyK1dSSVRFX1BUUik7CiAgIAlvdXR3KGxwLT5yeF9maXJzdCwgaW9hZGRyK0RBVEFQT1JUKTsKLSAgCisKIAkvKiBDbG9zZSBSeCBidWZmZXIgZGVzY3JpcHRvciByaW5nICovCiAJb3V0dyhscC0+cnhfbGFzdCArIDB4MTYgKyAyLCBpb2FkZHIrV1JJVEVfUFRSKTsKIAlvdXR3KGxwLT5yeF9maXJzdCArIDB4MTYsIGlvYWRkcitEQVRBUE9SVCk7Ci0JCisKIH0KIAogLyoKQEAgLTE1MTIsNyArMTUxMiw3IEBACiAJLyogRG8gd2Ugd2FudCBwcm9taXNjdW91cyBtb2RlIG9yIG11bHRpY2FzdD8gKi8KIAlvdXR3KENPTkZfUFJPTUlTQyAmIH4zMSwgaW9hZGRyK1NNX1BUUik7CiAJaSA9IGludyhpb2FkZHIrU0hBRE9XKENPTkZfUFJPTUlTQykpOwotCW91dHcoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyk/KGl8MSk6KGkgJiB+MSksIAorCW91dHcoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyk/KGl8MSk6KGkgJiB+MSksCiAJICAgICBpb2FkZHIrU0hBRE9XKENPTkZfUFJPTUlTQykpOwogCWxwLT53YXNfcHJvbWlzYyA9IGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQzsKICNpZiAwCkBAIC0xNTIyLDcgKzE1MjIsNyBAQAogCS8qIFdyaXRlIG91ciBoYXJkd2FyZSBhZGRyZXNzICovCiAJb3V0dyhDT05GX0hXQUREUiAmIH4zMSwgaW9hZGRyK1NNX1BUUik7CiAJb3V0dygoKHVuc2lnbmVkIHNob3J0ICopZGV2LT5kZXZfYWRkcilbMF0sIGlvYWRkcitTSEFET1coQ09ORl9IV0FERFIpKTsKLQlvdXR3KCgodW5zaWduZWQgc2hvcnQgKilkZXYtPmRldl9hZGRyKVsxXSwgCisJb3V0dygoKHVuc2lnbmVkIHNob3J0ICopZGV2LT5kZXZfYWRkcilbMV0sCiAJICAgICBpb2FkZHIrU0hBRE9XKENPTkZfSFdBRERSKzIpKTsKIAlvdXR3KCgodW5zaWduZWQgc2hvcnQgKilkZXYtPmRldl9hZGRyKVsyXSwKIAkgICAgIGlvYWRkcitTSEFET1coQ09ORl9IV0FERFIrNCkpOwpAQCAtMTYwOCw3ICsxNjA4LDcgQEAKIAkJICAgICAgIGRldi0+bmFtZSwgY291bnQpOwogCQljb3VudCA9IDg7CiAJfQotCQorCiAJb3V0dyhDT05GX05SX01VTFRJQ0FTVCAmIH4zMSwgaW9hZGRyK1NNX1BUUik7CiAJb3V0dyhjb3VudCwgaW9hZGRyK1NIQURPVyhDT05GX05SX01VTFRJQ0FTVCkpOwogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC0xNjk4LDcgKzE2OTgsNyBAQAogICogYXJlIHNwZWNpZmllZCwgd2UgdmVyaWZ5IGFuZCB0aGVuIHVzZSB0aGVtLiAgSWYgbm8gcGFyYW1ldGVycyBhcmUgZ2l2ZW4sIHdlCiAgKiBhdXRvcHJvYmUgZm9yIG9uZSBjYXJkIG9ubHkuCiAgKi8KLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXhwcmVzcy5oIGIvZHJpdmVycy9uZXQvZWV4cHJlc3MuaAppbmRleCAyOGI0MzEyNi4uNzA3ZGYzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuaAorKysgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5oCkBAIC01Myw4ICs1Myw4IEBACiAjZGVmaW5lIFNDQl9TVEFSVCAweDAwMDgKIAogLyogU3RhcnQgb2YgYnVmZmVyIHJlZ2lvbi4gIEV2ZXJ5dGhpbmcgYmVmb3JlIHRoaXMgaXMgdXNlZCBmb3IgY29udHJvbAotICogc3RydWN0dXJlcyBhbmQgdGhlIENVIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbS4gIFRoZSBtZW1vcnkgbGF5b3V0IGlzIAotICogZGV0ZXJtaW5lZCBpbiBlZXhwX2h3X3Byb2JlKCksIG9uY2Ugd2Uga25vdyBob3cgbXVjaCBtZW1vcnkgaXMgCisgKiBzdHJ1Y3R1cmVzIGFuZCB0aGUgQ1UgY29uZmlndXJhdGlvbiBwcm9ncmFtLiAgVGhlIG1lbW9yeSBsYXlvdXQgaXMKKyAqIGRldGVybWluZWQgaW4gZWV4cF9od19wcm9iZSgpLCBvbmNlIHdlIGtub3cgaG93IG11Y2ggbWVtb3J5IGlzCiAgKiBhdmFpbGFibGUgb24gdGhlIGNhcmQuCiAgKi8KIApAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSBSWF9CVUZfU0laRSAoKDMyK0VUSF9GUkFNRV9MRU4rMzEpJn4weDFmKQogCiAvKgotICogU0NCIGRlZmluZXMgCisgKiBTQ0IgZGVmaW5lcwogICovCiAKIC8qIHRoZXNlIGZ1bmN0aW9ucyB0YWtlIHRoZSBTQ0Igc3RhdHVzIHdvcmQgYW5kIHRlc3QgdGhlIHJlbGV2YW50IHN0YXR1cyBiaXQgKi8KQEAgLTk1LDcgKzk1LDcgQEAKICNkZWZpbmUgU0NCX1JVYWJvcnQgICAgIDB4MDA0MAogCiAvKgotICogQ29tbWFuZCBibG9jayBkZWZpbmVzIAorICogQ29tbWFuZCBibG9jayBkZWZpbmVzCiAgKi8KIAogI2RlZmluZSBTdGF0X0RvbmUocykgICAgKChzJjB4ODAwMCkhPTApCkBAIC0xNTgsOSArMTU4LDkgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBzcmNhZGRyMjsKIAl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBzcmNhZGRyMzsKIAl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBsZW5ndGg7Ci0gIAotCS8qIFRoaXMgaXMgYWN0dWFsbHkgYSBSZWNlaXZlIEJ1ZmZlciBEZXNjcmlwdG9yLiAgVGhlIHdheSB3ZSAKLQkgKiBhcnJhbmdlIG1lbW9yeSBtZWFucyB0aGF0IGFuIFJCRCBhbHdheXMgZm9sbG93cyB0aGUgUkZEIHRoYXQgCisKKwkvKiBUaGlzIGlzIGFjdHVhbGx5IGEgUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvci4gIFRoZSB3YXkgd2UKKwkgKiBhcnJhbmdlIG1lbW9yeSBtZWFucyB0aGF0IGFuIFJCRCBhbHdheXMgZm9sbG93cyB0aGUgUkZEIHRoYXQKIAkgKiBwb2ludHMgdG8gaXQsIHNvIHRoZXkgbWlnaHQgYXMgd2VsbCBiZSBpbiB0aGUgc2FtZSBzdHJ1Y3R1cmUuCiAJICovCiAJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgYWN0dWFsX2NvdW50OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2VoZWEvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc1ZDk5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvTWFrZWZpbGUKQEAgLTAsMCArMSw2IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgZUhFQSBldGhlcm5ldCBkZXZpY2UgZHJpdmVyIGZvciBJQk0gZVNlcnZlciBTeXN0ZW0gcAorIworZWhlYS15ID0gZWhlYV9tYWluLm8gZWhlYV9waHlwLm8gZWhlYV9xbXIubyBlaGVhX2V0aHRvb2wubyBlaGVhX3BoeXAubworb2JqLSQoQ09ORklHX0VIRUEpICs9IGVoZWEubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWEuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzYjQ1MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWEuaApAQCAtMCwwICsxLDQ0NyBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL25ldC9laGVhL2VoZWEuaAorICoKKyAqICBlSEVBIGV0aGVybmV0IGRldmljZSBkcml2ZXIgZm9yIElCTSBlU2VydmVyIFN5c3RlbSBwCisgKgorICogIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDYKKyAqCisgKiAgQXV0aG9yczoKKyAqICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgSmFuLUJlcm5kIFRoZW1hbm4gPHRoZW1hbm5AZGUuaWJtLmNvbT4KKyAqICAgICAgIFRob21hcyBLbGVpbiA8dGtsZWluQGRlLmlibS5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19FSEVBX0hfXworI2RlZmluZSBfX0VIRUFfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKworI2luY2x1ZGUgPGFzbS9pYm1lYnVzLmg+CisjaW5jbHVkZSA8YXNtL2Fic19hZGRyLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgRFJWX05BTUUJImVoZWEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSJFSEVBXzAwMjgiCisKKyNkZWZpbmUgRUhFQV9NU0dfREVGQVVMVCAoTkVUSUZfTVNHX0xJTksgfCBORVRJRl9NU0dfVElNRVIgXAorCXwgTkVUSUZfTVNHX1JYX0VSUiB8IE5FVElGX01TR19UWF9FUlIpCisKKyNkZWZpbmUgRUhFQV9NQVhfRU5UUklFU19SUTEgMzI3NjcKKyNkZWZpbmUgRUhFQV9NQVhfRU5UUklFU19SUTIgMTYzODMKKyNkZWZpbmUgRUhFQV9NQVhfRU5UUklFU19SUTMgMTYzODMKKyNkZWZpbmUgRUhFQV9NQVhfRU5UUklFU19TUSAgMzI3NjcKKyNkZWZpbmUgRUhFQV9NSU5fRU5UUklFU19RUCAgMTI3CisKKyNkZWZpbmUgRUhFQV9OVU1fVFhfUVAgMQorCisjaWZkZWYgRUhFQV9TTUFMTF9RVUVVRVMKKyNkZWZpbmUgRUhFQV9NQVhfQ1FFX0NPVU5UICAgICAgMTAyMworI2RlZmluZSBFSEVBX0RFRl9FTlRSSUVTX1NRICAgICAxMDIzCisjZGVmaW5lIEVIRUFfREVGX0VOVFJJRVNfUlExICAgIDQwOTUKKyNkZWZpbmUgRUhFQV9ERUZfRU5UUklFU19SUTIgICAgMTAyMworI2RlZmluZSBFSEVBX0RFRl9FTlRSSUVTX1JRMyAgICAxMDIzCisjZWxzZQorI2RlZmluZSBFSEVBX01BWF9DUUVfQ09VTlQgICAgIDMyMDAwCisjZGVmaW5lIEVIRUFfREVGX0VOVFJJRVNfU1EgICAgMTYwMDAKKyNkZWZpbmUgRUhFQV9ERUZfRU5UUklFU19SUTEgICAzMjA4MAorI2RlZmluZSBFSEVBX0RFRl9FTlRSSUVTX1JRMiAgICA0MDIwCisjZGVmaW5lIEVIRUFfREVGX0VOVFJJRVNfUlEzICAgIDQwMjAKKyNlbmRpZgorCisjZGVmaW5lIEVIRUFfTUFYX0VOVFJJRVNfRVEgMjAKKworI2RlZmluZSBFSEVBX1NHX1NRICAyCisjZGVmaW5lIEVIRUFfU0dfUlExIDEKKyNkZWZpbmUgRUhFQV9TR19SUTIgMAorI2RlZmluZSBFSEVBX1NHX1JRMyAwCisKKyNkZWZpbmUgRUhFQV9NQVhfUEFDS0VUX1NJWkUgICAgOTAyMgkvKiBmb3IganVtYm8gZnJhbWVzICovCisjZGVmaW5lIEVIRUFfUlEyX1BLVF9TSVpFICAgICAgIDE1MjIKKyNkZWZpbmUgRUhFQV9MX1BLVF9TSVpFICAgICAgICAgMjU2CS8qIGxvdyBsYXRlbmN5ICovCisKKyNkZWZpbmUgRUhFQV9QT0xMX01BWF9SV1FFICAgICAgMTAwMAorCisvKiBTZW5kIGNvbXBsZXRpb24gc2lnbmFsaW5nICovCisjZGVmaW5lIEVIRUFfU0lHX0lWX0xPTkcgICAgICAgICAgIDEKKworLyogUHJvdGVjdGlvbiBEb21haW4gSWRlbnRpZmllciAqLworI2RlZmluZSBFSEVBX1BEX0lEICAgICAgICAweGFhYmNkZWZmCisKKyNkZWZpbmUgRUhFQV9SUTJfVEhSRVNIT0xEIAkgICAxCisjZGVmaW5lIEVIRUFfUlEzX1RIUkVTSE9MRCAJICAgOQkvKiB1c2UgUlEzIHRocmVzaG9sZCBvZiAxNTIyIGJ5dGVzICovCisKKyNkZWZpbmUgRUhFQV9TUEVFRF8xMEcgICAgICAgICAxMDAwMAorI2RlZmluZSBFSEVBX1NQRUVEXzFHICAgICAgICAgICAxMDAwCisjZGVmaW5lIEVIRUFfU1BFRURfMTAwTSAgICAgICAgICAxMDAKKyNkZWZpbmUgRUhFQV9TUEVFRF8xME0gICAgICAgICAgICAxMAorI2RlZmluZSBFSEVBX1NQRUVEX0FVVE9ORUcgICAgICAgICAwCisKKy8qIEJyb2FkY2FzdC9NdWx0aWNhc3QgcmVnaXN0cmF0aW9uIHR5cGVzICovCisjZGVmaW5lIEVIRUFfQkNNQ19TQ09QRV9BTEwJMHgwOAorI2RlZmluZSBFSEVBX0JDTUNfU0NPUEVfU0lOR0xFCTB4MDAKKyNkZWZpbmUgRUhFQV9CQ01DX01VTFRJQ0FTVAkweDA0CisjZGVmaW5lIEVIRUFfQkNNQ19CUk9BRENBU1QJMHgwMAorI2RlZmluZSBFSEVBX0JDTUNfVU5UQUdHRUQJMHgwMgorI2RlZmluZSBFSEVBX0JDTUNfVEFHR0VECTB4MDAKKyNkZWZpbmUgRUhFQV9CQ01DX1ZMQU5JRF9BTEwJMHgwMQorI2RlZmluZSBFSEVBX0JDTUNfVkxBTklEX1NJTkdMRQkweDAwCisKKy8qIFVzZSB0aGlzIGRlZmluZSB0byBrbWFsbG9jYXRlIHBIWVAgY29udHJvbCBibG9ja3MgKi8KKyNkZWZpbmUgSF9DQl9BTElHTk1FTlQJCTQwOTYKKworI2RlZmluZSBFSEVBX0NBQ0hFX0xJTkUgICAgICAgICAgMTI4CisKKy8qIE1lbW9yeSBSZWdpb25zICovCisjZGVmaW5lIEVIRUFfTVJfTUFYX1RYX1BBR0VTICAgMjAKKyNkZWZpbmUgRUhFQV9NUl9UWF9EQVRBX1BOICAgICAgMworI2RlZmluZSBFSEVBX01SX0FDQ19DVFJMICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRUhFQV9SV1FFU19QRVJfTVJfUlEyICAxMAorI2RlZmluZSBFSEVBX1JXUUVTX1BFUl9NUl9SUTMgIDEwCisKKyNkZWZpbmUgRUhFQV9XQVRDSF9ET0dfVElNRU9VVCAxMCpIWgorCisvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLworCisjZGVmaW5lIGVoZWFfaW5mbyhmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpCisKKyNkZWZpbmUgZWhlYV9lcnJvcihmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogRXJyb3IgaW4gJXM6ICIgZm10ICJcbiIsIF9fZnVuY19fLCAjIyBhcmdzKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZWhlYV9kZWJ1ZyhmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiOiAiIGZtdCwgIyMgYXJncykKKyNlbHNlCisjZGVmaW5lIGVoZWFfZGVidWcoZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCit2b2lkIGVoZWFfZHVtcCh2b2lkICphZHIsIGludCBsZW4sIGNoYXIgKm1zZyk7CisKKyNkZWZpbmUgRUhFQV9CTUFTSyhwb3MsIGxlbmd0aCkgKCgocG9zKSA8PCAxNikgKyAobGVuZ3RoKSkKKworI2RlZmluZSBFSEVBX0JNQVNLX0lCTShmcm9tLCB0bykgKCgoNjMgLSB0bykgPDwgMTYpICsgKCh0bykgLSAoZnJvbSkgKyAxKSkKKworI2RlZmluZSBFSEVBX0JNQVNLX1NISUZUUE9TKG1hc2spICgoKG1hc2spID4+IDE2KSAmIDB4ZmZmZikKKworI2RlZmluZSBFSEVBX0JNQVNLX01BU0sobWFzaykgXAorCSgweGZmZmZmZmZmZmZmZmZmZmZVTEwgPj4gKCg2NCAtIChtYXNrKSkgJiAweGZmZmYpKQorCisjZGVmaW5lIEVIRUFfQk1BU0tfU0VUKG1hc2ssIHZhbHVlKSBcCisgICAgICAgICgoRUhFQV9CTUFTS19NQVNLKG1hc2spICYgKCh1NjQpKHZhbHVlKSkpIDw8IEVIRUFfQk1BU0tfU0hJRlRQT1MobWFzaykpCisKKyNkZWZpbmUgRUhFQV9CTUFTS19HRVQobWFzaywgdmFsdWUpIFwKKyAgICAgICAgKEVIRUFfQk1BU0tfTUFTSyhtYXNrKSAmICgoKHU2NCkodmFsdWUpKSA+PiBFSEVBX0JNQVNLX1NISUZUUE9TKG1hc2spKSkKKworLyoKKyAqIEdlbmVyaWMgZWhlYSBwYWdlCisgKi8KK3N0cnVjdCBlaGVhX3BhZ2UgeworCXU4IGVudHJpZXNbUEFHRV9TSVpFXTsKK307CisKKy8qCisgKiBHZW5lcmljIHF1ZXVlIGluIGxpbnV4IGtlcm5lbCB2aXJ0dWFsIG1lbW9yeQorICovCitzdHJ1Y3QgaHdfcXVldWUgeworCXU2NCBjdXJyZW50X3Ffb2Zmc2V0OwkJLyogY3VycmVudCBxdWV1ZSBlbnRyeSAqLworCXN0cnVjdCBlaGVhX3BhZ2UgKipxdWV1ZV9wYWdlczsJLyogYXJyYXkgb2YgcGFnZXMgYmVsb25naW5nIHRvIHF1ZXVlICovCisJdTMyIHFlX3NpemU7CQkJLyogcXVldWUgZW50cnkgc2l6ZSAqLworCXUzMiBxdWV1ZV9sZW5ndGg7ICAgICAgCQkvKiBxdWV1ZSBsZW5ndGggYWxsb2NhdGVkIGluIGJ5dGVzICovCisJdTMyIHBhZ2VzaXplOworCXUzMiB0b2dnbGVfc3RhdGU7CQkvKiB0b2dnbGUgZmxhZyAtIHBlciBwYWdlICovCisJdTMyIHJlc2VydmVkOwkJCS8qIDY0IGJpdCBhbGlnbm1lbnQgKi8KK307CisKKy8qCisgKiBGb3IgcFNlcmllcyB0aGlzIGlzIGEgNjRiaXQgbWVtb3J5IGFkZHJlc3Mgd2hlcmUKKyAqIEkvTyBtZW1vcnkgaXMgbWFwcGVkIGludG8gQ1BVIGFkZHJlc3Mgc3BhY2UKKyAqLworc3RydWN0IGhfZXBhIHsKKwl2b2lkIF9faW9tZW0gKmFkZHI7Cit9OworCitzdHJ1Y3QgaF9lcGFfdXNlciB7CisJdTY0IGFkZHI7Cit9OworCitzdHJ1Y3QgaF9lcGFzIHsKKwlzdHJ1Y3QgaF9lcGEga2VybmVsOwkvKiBrZXJuZWwgc3BhY2UgYWNjZXNzaWJsZSByZXNvdXJjZSwKKwkJCQkgICBzZXQgdG8gMCBpZiB1bnVzZWQgKi8KKwlzdHJ1Y3QgaF9lcGFfdXNlciB1c2VyOwkvKiB1c2VyIHNwYWNlIGFjY2Vzc2libGUgcmVzb3VyY2UKKwkJCQkgICBzZXQgdG8gMCBpZiB1bnVzZWQgKi8KK307CisKK3N0cnVjdCBlaGVhX3FwOworc3RydWN0IGVoZWFfY3E7CitzdHJ1Y3QgZWhlYV9lcTsKK3N0cnVjdCBlaGVhX3BvcnQ7CitzdHJ1Y3QgZWhlYV9hdjsKKworLyoKKyAqIFF1ZXVlIGF0dHJpYnV0ZXMgcGFzc2VkIHRvIGVoZWFfY3JlYXRlX3FwKCkKKyAqLworc3RydWN0IGVoZWFfcXBfaW5pdF9hdHRyIHsKKyAgICAgICAgLyogaW5wdXQgcGFyYW1ldGVyICovCisJdTMyIHFwX3Rva2VuOyAgICAgICAgICAgLyogcXVldWUgdG9rZW4gKi8KKwl1OCBsb3dfbGF0X3JxMTsKKwl1OCBzaWduYWxpbmd0eXBlOyAgICAgICAvKiBjcWUgZ2VuZXJhdGlvbiBmbGFnICovCisJdTggcnFfY291bnQ7ICAgICAgICAgICAgLyogbnVtIG9mIHJlY2VpdmUgcXVldWVzICovCisJdTggZXFlX2dlbjsgICAgICAgICAgICAgLyogZXFlIGdlbmVyYXRpb24gZmxhZyAqLworCXUxNiBtYXhfbnJfc2VuZF93cWVzOyAgIC8qIG1heCBudW1iZXIgb2Ygc2VuZCB3cWVzICovCisJdTE2IG1heF9ucl9yd3Flc19ycTE7ICAgLyogbWF4IG51bWJlciBvZiByZWNlaXZlIHdxZXMgKi8KKwl1MTYgbWF4X25yX3J3cWVzX3JxMjsKKwl1MTYgbWF4X25yX3J3cWVzX3JxMzsKKwl1OCB3cWVfc2l6ZV9lbmNfc3E7CisJdTggd3FlX3NpemVfZW5jX3JxMTsKKwl1OCB3cWVfc2l6ZV9lbmNfcnEyOworCXU4IHdxZV9zaXplX2VuY19ycTM7CisJdTggc3dxZV9pbW1fZGF0YV9sZW47ICAgLyogaW1tZWRpYXRlIGRhdGEgbGVuZ3RoIGZvciBzd3FlcyAqLworCXUxNiBwb3J0X25yOworCXUxNiBycTJfdGhyZXNob2xkOworCXUxNiBycTNfdGhyZXNob2xkOworCXU2NCBzZW5kX2NxX2hhbmRsZTsKKwl1NjQgcmVjdl9jcV9oYW5kbGU7CisJdTY0IGFmZl9lcV9oYW5kbGU7CisKKyAgICAgICAgLyogb3V0cHV0IHBhcmFtZXRlciAqLworCXUzMiBxcF9ucjsKKwl1MTYgYWN0X25yX3NlbmRfd3FlczsKKwl1MTYgYWN0X25yX3J3cWVzX3JxMTsKKwl1MTYgYWN0X25yX3J3cWVzX3JxMjsKKwl1MTYgYWN0X25yX3J3cWVzX3JxMzsKKwl1OCBhY3Rfd3FlX3NpemVfZW5jX3NxOworCXU4IGFjdF93cWVfc2l6ZV9lbmNfcnExOworCXU4IGFjdF93cWVfc2l6ZV9lbmNfcnEyOworCXU4IGFjdF93cWVfc2l6ZV9lbmNfcnEzOworCXUzMiBucl9zcV9wYWdlczsKKwl1MzIgbnJfcnExX3BhZ2VzOworCXUzMiBucl9ycTJfcGFnZXM7CisJdTMyIG5yX3JxM19wYWdlczsKKwl1MzIgbGlvYm5fc3E7CisJdTMyIGxpb2JuX3JxMTsKKwl1MzIgbGlvYm5fcnEyOworCXUzMiBsaW9ibl9ycTM7Cit9OworCisvKgorICogRXZlbnQgUXVldWUgYXR0cmlidXRlcywgcGFzc2VkIGFzIHBhcmFtdGVyCisgKi8KK3N0cnVjdCBlaGVhX2VxX2F0dHIgeworCXUzMiB0eXBlOworCXUzMiBtYXhfbnJfb2ZfZXFlczsKKwl1OCBlcWVfZ2VuOyAgICAgICAgLyogZ2VuZXJhdGUgZXFlIGZsYWcgKi8KKwl1NjQgZXFfaGFuZGxlOworCXUzMiBhY3RfbnJfb2ZfZXFlczsKKwl1MzIgbnJfcGFnZXM7CisJdTMyIGlzdDE7ICAgICAgICAgIC8qIEludGVycnVwdCBzZXJ2aWNlIHRva2VuICovCisJdTMyIGlzdDI7CisJdTMyIGlzdDM7CisJdTMyIGlzdDQ7Cit9OworCisKKy8qCisgKiBFdmVudCBRdWV1ZQorICovCitzdHJ1Y3QgZWhlYV9lcSB7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaHdfcXVldWUgaHdfcXVldWU7CisJdTY0IGZ3X2hhbmRsZTsKKwlzdHJ1Y3QgaF9lcGFzIGVwYXM7CisJc3BpbmxvY2tfdCBzcGlubG9jazsKKwlzdHJ1Y3QgZWhlYV9lcV9hdHRyIGF0dHI7Cit9OworCisvKgorICogSEVBIFF1ZXVlcworICovCitzdHJ1Y3QgZWhlYV9xcCB7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlcjsKKwl1NjQgZndfaGFuZGxlOwkJCS8qIFFQIGhhbmRsZSBmb3IgZmlybXdhcmUgY2FsbHMgKi8KKwlzdHJ1Y3QgaHdfcXVldWUgaHdfc3F1ZXVlOworCXN0cnVjdCBod19xdWV1ZSBod19ycXVldWUxOworCXN0cnVjdCBod19xdWV1ZSBod19ycXVldWUyOworCXN0cnVjdCBod19xdWV1ZSBod19ycXVldWUzOworCXN0cnVjdCBoX2VwYXMgZXBhczsKKwlzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgaW5pdF9hdHRyOworfTsKKworLyoKKyAqIENvbXBsZXRpb24gUXVldWUgYXR0cmlidXRlcworICovCitzdHJ1Y3QgZWhlYV9jcV9hdHRyIHsKKyAgICAgICAgLyogaW5wdXQgcGFyYW1ldGVyICovCisJdTMyIG1heF9ucl9vZl9jcWVzOworCXUzMiBjcV90b2tlbjsKKwl1NjQgZXFfaGFuZGxlOworCisgICAgICAgIC8qIG91dHB1dCBwYXJhbWV0ZXIgKi8KKwl1MzIgYWN0X25yX29mX2NxZXM7CisJdTMyIG5yX3BhZ2VzOworfTsKKworLyoKKyAqIENvbXBsZXRpb24gUXVldWUKKyAqLworc3RydWN0IGVoZWFfY3EgeworCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CisJdTY0IGZ3X2hhbmRsZTsKKwlzdHJ1Y3QgaHdfcXVldWUgaHdfcXVldWU7CisJc3RydWN0IGhfZXBhcyBlcGFzOworCXN0cnVjdCBlaGVhX2NxX2F0dHIgYXR0cjsKK307CisKKy8qCisgKiBNZW1vcnkgUmVnaW9uCisgKi8KK3N0cnVjdCBlaGVhX21yIHsKKwl1NjQgaGFuZGxlOworCXU2NCB2YWRkcjsKKwl1MzIgbGtleTsKK307CisKKy8qCisgKiBQb3J0IHN0YXRlIGluZm9ybWF0aW9uCisgKi8KK3N0cnVjdCBwb3J0X3N0YXRlIHsKKwlpbnQgcG9sbF9tYXhfcHJvY2Vzc2VkOworCWludCBwb2xsX3JlY2VpdmVfZXJyb3JzOworCWludCBlaGVhX3BvbGw7CisJaW50IHF1ZXVlX3N0b3BwZWQ7CisJaW50IG1pbl9zd3FlX2F2YWlsOworCXU2NCBzcWNfc3RvcF9zdW07CisJaW50IHBrdF9zZW5kOworCWludCBwa3RfeG1pdDsKKwlpbnQgc2VuZF90YXNrbGV0OworCWludCBud3FlOworfTsKKworI2RlZmluZSBFSEVBX0lSUV9OQU1FX1NJWkUgMjAKKworLyoKKyAqIFF1ZXVlIFNLQiBBcnJheQorICovCitzdHJ1Y3QgZWhlYV9xX3NrYl9hcnIgeworCXN0cnVjdCBza19idWZmICoqYXJyOwkJLyogc2tiIGFycmF5IGZvciBxdWV1ZSAqLworCWludCBsZW47ICAgICAgICAgICAgICAgIAkvKiBhcnJheSBsZW5ndGggKi8KKwlpbnQgaW5kZXg7CQkJLyogYXJyYXkgaW5kZXggKi8KKwlpbnQgb3Nfc2ticzsJCQkvKiBycTIvcnEzIG9ubHk6IG91dHN0YW5kaW5nIHNrYnMgKi8KK307CisKKy8qCisgKiBQb3J0IHJlc291cmNlcworICovCitzdHJ1Y3QgZWhlYV9wb3J0X3JlcyB7CisJc3RydWN0IGVoZWFfbXIgc2VuZF9tcjsgICAgICAgCS8qIHNlbmQgbWVtb3J5IHJlZ2lvbiAqLworCXN0cnVjdCBlaGVhX21yIHJlY3ZfbXI7ICAgICAgIAkvKiByZWNlaXZlIG1lbW9yeSByZWdpb24gKi8KKwlzcGlubG9ja190IHhtaXRfbG9jazsKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0OworCWNoYXIgaW50X3JlY3ZfbmFtZVtFSEVBX0lSUV9OQU1FX1NJWkVdOworCWNoYXIgaW50X3NlbmRfbmFtZVtFSEVBX0lSUV9OQU1FX1NJWkVdOworCXN0cnVjdCBlaGVhX3FwICpxcDsKKwlzdHJ1Y3QgZWhlYV9jcSAqc2VuZF9jcTsKKwlzdHJ1Y3QgZWhlYV9jcSAqcmVjdl9jcTsKKwlzdHJ1Y3QgZWhlYV9lcSAqc2VuZF9lcTsKKwlzdHJ1Y3QgZWhlYV9lcSAqcmVjdl9lcTsKKwlzcGlubG9ja190IHNlbmRfbG9jazsKKwlzdHJ1Y3QgZWhlYV9xX3NrYl9hcnIgcnExX3NrYmE7CisJc3RydWN0IGVoZWFfcV9za2JfYXJyIHJxMl9za2JhOworCXN0cnVjdCBlaGVhX3Ffc2tiX2FyciBycTNfc2tiYTsKKwlzdHJ1Y3QgZWhlYV9xX3NrYl9hcnIgc3Ffc2tiYTsKKwlzcGlubG9ja190IG5ldGlmX3F1ZXVlOworCWludCBxdWV1ZV9zdG9wcGVkOworCWludCBzd3FlX3JlZmlsbF90aDsKKwlhdG9taWNfdCBzd3FlX2F2YWlsOworCWludCBzd3FlX2xsX2NvdW50OworCWludCBzd3FlX2NvdW50OworCXUzMiBzd3FlX2lkX2NvdW50ZXI7CisJdTY0IHR4X3BhY2tldHM7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHNlbmRfY29tcF90YXNrOworCXNwaW5sb2NrX3QgcmVjdl9sb2NrOworCXN0cnVjdCBwb3J0X3N0YXRlIHBfc3RhdGU7CisJdTY0IHJ4X3BhY2tldHM7CisJdTMyIHBvbGxfY291bnRlcjsKK307CisKKworc3RydWN0IGVoZWFfYWRhcHRlciB7CisJdTY0IGhhbmRsZTsKKwl1OCBudW1fcG9ydHM7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydFsxNl07CisJc3RydWN0IGVoZWFfZXEgKm5lcTsgICAgICAgLyogbm90aWZpY2F0aW9uIGV2ZW50IHF1ZXVlICovCisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmVoZWFfd3E7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IG5lcV90YXNrbGV0OworCXN0cnVjdCBlaGVhX21yIG1yOworCXUzMiBwZDsgICAgICAgICAgICAgICAgICAgIC8qIHByb3RlY3Rpb24gZG9tYWluICovCisJdTY0IG1heF9tY19tYWM7ICAgICAgICAgICAgLyogbWF4IG51bWJlciBvZiBtdWx0aWNhc3QgbWFjIGFkZHJlc3NlcyAqLworfTsKKworCitzdHJ1Y3QgZWhlYV9tY19saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdTY0IG1hY2FkZHI7Cit9OworCisjZGVmaW5lIEVIRUFfUE9SVF9VUCAxCisjZGVmaW5lIEVIRUFfUE9SVF9ET1dOIDAKKyNkZWZpbmUgRUhFQV9NQVhfUE9SVF9SRVMgMTYKK3N0cnVjdCBlaGVhX3BvcnQgeworCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXI7CSAvKiBhZGFwdGVyIHRoYXQgb3ducyB0aGlzIHBvcnQgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOworCXN0cnVjdCBlaGVhX3BvcnRfcmVzIHBvcnRfcmVzW0VIRUFfTUFYX1BPUlRfUkVTXTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm9mX2Rldl9ub2RlOyAvKiBPcGVuIEZpcm13YXJlIERldmljZSBOb2RlICovCisJc3RydWN0IGVoZWFfbWNfbGlzdCAqbWNfbGlzdDsJIC8qIE11bHRpY2FzdCBNQUMgYWRkcmVzc2VzICovCisJc3RydWN0IHZsYW5fZ3JvdXAgKnZncnA7CisJc3RydWN0IGVoZWFfZXEgKnFwX2VxOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOworCXN0cnVjdCBzZW1hcGhvcmUgcG9ydF9sb2NrOworCWNoYXIgaW50X2FmZl9uYW1lW0VIRUFfSVJRX05BTUVfU0laRV07CisJaW50IGFsbG11bHRpOwkJCSAvKiBJbmRpY2F0ZXMgSUZGX0FMTE1VTFRJIHN0YXRlICovCisJaW50IHByb21pc2M7CQkgCSAvKiBJbmRpY2F0ZXMgSUZGX1BST01JU0Mgc3RhdGUgKi8KKwlpbnQgbnVtX2FkZF90eF9xcHM7CisJaW50IHJlc2V0czsKKwl1NjQgbWFjX2FkZHI7CisJdTMyIGxvZ2ljYWxfcG9ydF9pZDsKKwl1MzIgcG9ydF9zcGVlZDsKKwl1MzIgbXNnX2VuYWJsZTsKKwl1MzIgc2lnX2NvbXBfaXY7CisJdTMyIHN0YXRlOworCXU4IGZ1bGxfZHVwbGV4OworCXU4IGF1dG9uZWc7CisJdTggbnVtX2RlZl9xcHM7Cit9OworCitzdHJ1Y3QgcG9ydF9yZXNfY2ZnIHsKKwlpbnQgbWF4X2VudHJpZXNfcmNxOworCWludCBtYXhfZW50cmllc19zY3E7CisJaW50IG1heF9lbnRyaWVzX3NxOworCWludCBtYXhfZW50cmllc19ycTE7CisJaW50IG1heF9lbnRyaWVzX3JxMjsKKwlpbnQgbWF4X2VudHJpZXNfcnEzOworfTsKKworCit2b2lkIGVoZWFfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworaW50IGVoZWFfc2Vuc2VfcG9ydF9hdHRyKHN0cnVjdCBlaGVhX3BvcnQgKnBvcnQpOworaW50IGVoZWFfc2V0X3BvcnRzcGVlZChzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0LCB1MzIgcG9ydF9zcGVlZCk7CisKKyNlbmRpZgkvKiBfX0VIRUFfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmViMmZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX2V0aHRvb2wuYwpAQCAtMCwwICsxLDI5NCBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL25ldC9laGVhL2VoZWFfZXRodG9vbC5jCisgKgorICogIGVIRUEgZXRoZXJuZXQgZGV2aWNlIGRyaXZlciBmb3IgSUJNIGVTZXJ2ZXIgU3lzdGVtIHAKKyAqCisgKiAgKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNgorICoKKyAqICBBdXRob3JzOgorICogICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKiAgICAgICBKYW4tQmVybmQgVGhlbWFubiA8dGhlbWFubkBkZS5pYm0uY29tPgorICogICAgICAgVGhvbWFzIEtsZWluIDx0a2xlaW5AZGUuaWJtLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImVoZWEuaCIKKyNpbmNsdWRlICJlaGVhX3BoeXAuaCIKKworc3RhdGljIGludCBlaGVhX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgcmV0OworCisJcmV0ID0gZWhlYV9zZW5zZV9wb3J0X2F0dHIocG9ydCk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkgeworCQlzd2l0Y2gocG9ydC0+cG9ydF9zcGVlZCkgeworCQljYXNlIEVIRUFfU1BFRURfMTBNOiBjbWQtPnNwZWVkID0gU1BFRURfMTA7IGJyZWFrOworCQljYXNlIEVIRUFfU1BFRURfMTAwTTogY21kLT5zcGVlZCA9IFNQRUVEXzEwMDsgYnJlYWs7CisJCWNhc2UgRUhFQV9TUEVFRF8xRzogY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7IGJyZWFrOworCQljYXNlIEVIRUFfU1BFRURfMTBHOiBjbWQtPnNwZWVkID0gU1BFRURfMTAwMDA7IGJyZWFrOworCQl9CisJCWNtZC0+ZHVwbGV4ID0gcG9ydC0+ZnVsbF9kdXBsZXggPT0gMSA/CisJCQkJCQkgICAgIERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CisJfSBlbHNlIHsKKwkJY21kLT5zcGVlZCA9IC0xOworCQljbWQtPmR1cGxleCA9IC0xOworCX0KKworCWNtZC0+c3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMDAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwKKwkJICAgICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKKwkJICAgICAgIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKKwkJICAgICAgIHwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfRklCUkUpOworCisJY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbCB8IEFEVkVSVElTRURfQXV0b25lZworCQkJIHwgQURWRVJUSVNFRF9GSUJSRSk7CisKKwljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCWNtZC0+YXV0b25lZyA9IHBvcnQtPmF1dG9uZWcgPT0gMSA/IEFVVE9ORUdfRU5BQkxFIDogQVVUT05FR19ESVNBQkxFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldCA9IDA7CisJdTMyIHNwOworCisJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlzcCA9IEVIRUFfU1BFRURfQVVUT05FRzsKKwkJZ290byBkb2l0OworCX0KKworCXN3aXRjaChjbWQtPnNwZWVkKSB7CisJY2FzZSBTUEVFRF8xMDoKKwkJaWYgKGNtZC0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJc3AgPSBIX1NQRUVEXzEwTV9GOworCQllbHNlCisJCQlzcCA9IEhfU1BFRURfMTBNX0g7CisJCWJyZWFrOworCisJY2FzZSBTUEVFRF8xMDA6CisJCWlmIChjbWQtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCXNwID0gSF9TUEVFRF8xMDBNX0Y7CisJCWVsc2UKKwkJCXNwID0gSF9TUEVFRF8xMDBNX0g7CisJCWJyZWFrOworCisJY2FzZSBTUEVFRF8xMDAwOgorCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQlzcCA9IEhfU1BFRURfMUdfRjsKKwkJZWxzZQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisKKwljYXNlIFNQRUVEXzEwMDAwOgorCQlpZiAoY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQlzcCA9IEhfU1BFRURfMTBHX0Y7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWlmIChyZXQpCisJCWdvdG8gb3V0OworZG9pdDoKKwlyZXQgPSBlaGVhX3NldF9wb3J0c3BlZWQocG9ydCwgc3ApOworCisJaWYgKCFyZXQpCisJCWVoZWFfaW5mbygiJXM6IFBvcnQgc3BlZWQgc3VjY2VzZnVsbHkgc2V0OiAlZE1icHMgIgorCQkJICAiJXMgRHVwbGV4IiwKKwkJCSAgcG9ydC0+bmV0ZGV2LT5uYW1lLCBwb3J0LT5wb3J0X3NwZWVkLAorCQkJICBwb3J0LT5mdWxsX2R1cGxleCA9PSAxID8gIkZ1bGwiIDogIkhhbGYiKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGVoZWFfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBlaGVhX3NldF9wb3J0c3BlZWQocG9ydCwgRUhFQV9TUEVFRF9BVVRPTkVHKTsKKworCWlmICghcmV0KQorCQllaGVhX2luZm8oIiVzOiBQb3J0IHNwZWVkIHN1Y2Nlc2Z1bGx5IHNldDogJWRNYnBzICIKKwkJCSAgIiVzIER1cGxleCIsCisJCQkgIHBvcnQtPm5ldGRldi0+bmFtZSwgcG9ydC0+cG9ydF9zcGVlZCwKKwkJCSAgcG9ydC0+ZnVsbF9kdXBsZXggPT0gMSA/ICJGdWxsIiA6ICJIYWxmIik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZWhlYV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RybGNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FLCBzaXplb2YoaW5mby0+ZHJpdmVyKSAtIDEpOworCXN0cmxjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04sIHNpemVvZihpbmZvLT52ZXJzaW9uKSAtIDEpOworfQorCitzdGF0aWMgdTMyIGVoZWFfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIHBvcnQtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlwb3J0LT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CisKK3N0YXRpYyB1MzIgZWhlYV9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAxOworfQorCitzdGF0aWMgY2hhciBlaGVhX2V0aHRvb2xfc3RhdHNfa2V5c1tdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CisJeyJwb2xsX21heF9wcm9jZXNzZWQifSwKKwl7InF1ZXVlX3N0b3BwZWQifSwKKwl7Im1pbl9zd3FlX2F2YWlsIn0sCisJeyJwb2xsX3JlY2VpdmVfZXJyIn0sCisJeyJwa3Rfc2VuZCJ9LAorCXsicGt0X3htaXQifSwKKwl7InNlbmRfdGFza2xldCJ9LAorCXsiZWhlYV9wb2xsIn0sCisJeyJud3FlIn0sCisJeyJzd3FlX2F2YWlsYWJsZV8wIn0sCisJeyJzaWdfY29tcF9pdiJ9LAorCXsic3dxZV9yZWZpbGxfdGgifSwKKwl7InBvcnQgcmVzZXRzIn0sCisJeyJyeG8ifSwKKwl7InJ4NjQifSwKKwl7InJ4NjUifSwKKwl7InJ4MTI4In0sCisJeyJyeDI1NiJ9LAorCXsicng1MTIifSwKKwl7InJ4MTAyNCJ9LAorCXsidHhvIn0sCisJeyJ0eDY0In0sCisJeyJ0eDY1In0sCisJeyJ0eDEyOCJ9LAorCXsidHgyNTYifSwKKwl7InR4NTEyIn0sCisJeyJ0eDEwMjQifSwKK307CisKK3N0YXRpYyB2b2lkIGVoZWFfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0cmluZ3NldCwgdTggKmRhdGEpCit7CisJaWYgKHN0cmluZ3NldCA9PSBFVEhfU1NfU1RBVFMpIHsKKwkJbWVtY3B5KGRhdGEsICZlaGVhX2V0aHRvb2xfc3RhdHNfa2V5cywKKwkJICAgICAgIHNpemVvZihlaGVhX2V0aHRvb2xfc3RhdHNfa2V5cykpOworCX0KK30KKworc3RhdGljIGludCBlaGVhX2dldF9zdGF0c19jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBBUlJBWV9TSVpFKGVoZWFfZXRodG9vbF9zdGF0c19rZXlzKTsKK30KKworc3RhdGljIHZvaWQgZWhlYV9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQgKmRhdGEpCit7CisJdTY0IGhyZXQ7CisJaW50IGk7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByID0gJnBvcnQtPnBvcnRfcmVzWzBdOworCXN0cnVjdCBwb3J0X3N0YXRlICpwX3N0YXRlID0gJnByLT5wX3N0YXRlOworCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiNiAqY2I2OworCisJZm9yIChpID0gMDsgaSA8IGVoZWFfZ2V0X3N0YXRzX2NvdW50KGRldik7IGkrKykKKwkJZGF0YVtpXSA9IDA7CisKKwlpID0gMDsKKworCWRhdGFbaSsrXSA9IHBfc3RhdGUtPnBvbGxfbWF4X3Byb2Nlc3NlZDsKKwlkYXRhW2krK10gPSBwX3N0YXRlLT5xdWV1ZV9zdG9wcGVkOworCWRhdGFbaSsrXSA9IHBfc3RhdGUtPm1pbl9zd3FlX2F2YWlsOworCWRhdGFbaSsrXSA9IHBfc3RhdGUtPnBvbGxfcmVjZWl2ZV9lcnJvcnM7CisJZGF0YVtpKytdID0gcF9zdGF0ZS0+cGt0X3NlbmQ7CisJZGF0YVtpKytdID0gcF9zdGF0ZS0+cGt0X3htaXQ7CisJZGF0YVtpKytdID0gcF9zdGF0ZS0+c2VuZF90YXNrbGV0OworCWRhdGFbaSsrXSA9IHBfc3RhdGUtPmVoZWFfcG9sbDsKKwlkYXRhW2krK10gPSBwX3N0YXRlLT5ud3FlOworCWRhdGFbaSsrXSA9IGF0b21pY19yZWFkKCZwb3J0LT5wb3J0X3Jlc1swXS5zd3FlX2F2YWlsKTsKKwlkYXRhW2krK10gPSBwb3J0LT5zaWdfY29tcF9pdjsKKwlkYXRhW2krK10gPSBwb3J0LT5wb3J0X3Jlc1swXS5zd3FlX3JlZmlsbF90aDsKKwlkYXRhW2krK10gPSBwb3J0LT5yZXNldHM7CisKKwljYjYgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiNikgeworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNiIpOworCQlyZXR1cm47CisJfQorCisJaHJldCA9IGVoZWFfaF9xdWVyeV9laGVhX3BvcnQoYWRhcHRlci0+aGFuZGxlLCBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJICAgICAgSF9QT1JUX0NCNiwgSF9QT1JUX0NCNl9BTEwsIGNiNik7CisJaWYgKG5ldGlmX21zZ19odyhwb3J0KSkKKwkJZWhlYV9kdW1wKGNiNiwgc2l6ZW9mKCpjYjYpLCAiZWhlYV9nZXRfZXRodG9vbF9zdGF0cyIpOworCisJaWYgKGhyZXQgPT0gSF9TVUNDRVNTKSB7CisJCWRhdGFbaSsrXSA9IGNiNi0+cnhvOworCQlkYXRhW2krK10gPSBjYjYtPnJ4NjQ7CisJCWRhdGFbaSsrXSA9IGNiNi0+cng2NTsKKwkJZGF0YVtpKytdID0gY2I2LT5yeDEyODsKKwkJZGF0YVtpKytdID0gY2I2LT5yeDI1NjsKKwkJZGF0YVtpKytdID0gY2I2LT5yeDUxMjsKKwkJZGF0YVtpKytdID0gY2I2LT5yeDEwMjQ7CisJCWRhdGFbaSsrXSA9IGNiNi0+dHhvOworCQlkYXRhW2krK10gPSBjYjYtPnR4NjQ7CisJCWRhdGFbaSsrXSA9IGNiNi0+dHg2NTsKKwkJZGF0YVtpKytdID0gY2I2LT50eDEyODsKKwkJZGF0YVtpKytdID0gY2I2LT50eDI1NjsKKwkJZGF0YVtpKytdID0gY2I2LT50eDUxMjsKKwkJZGF0YVtpKytdID0gY2I2LT50eDEwMjQ7CisJfSBlbHNlCisJCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKKworCWtmcmVlKGNiNik7Cit9CisKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBlaGVhX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgPSBlaGVhX2dldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8gPSBlaGVhX2dldF9kcnZpbmZvLAorCS5nZXRfbXNnbGV2ZWwgPSBlaGVhX2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsID0gZWhlYV9zZXRfbXNnbGV2ZWwsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X3R4X2NzdW0gPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKKwkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKwkuZ2V0X3N0cmluZ3MgPSBlaGVhX2dldF9zdHJpbmdzLAorCS5nZXRfc3RhdHNfY291bnQgPSBlaGVhX2dldF9zdGF0c19jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBlaGVhX2dldF9ldGh0b29sX3N0YXRzLAorCS5nZXRfcnhfY3N1bSA9IGVoZWFfZ2V0X3J4X2NzdW0sCisJLnNldF9zZXR0aW5ncyA9IGVoZWFfc2V0X3NldHRpbmdzLAorCS5ud2F5X3Jlc2V0ID0gZWhlYV9ud2F5X3Jlc2V0LAkJLyogUmVzdGFydCBhdXRvbmVnb3RpYXRpb24gKi8KK307CisKK3ZvaWQgZWhlYV9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmZWhlYV9ldGh0b29sX29wcyk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfaGNhbGwuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9oY2FsbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlN2QxYzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfaGNhbGwuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9oY2FsbC5oCisgKgorICogIGVIRUEgZXRoZXJuZXQgZGV2aWNlIGRyaXZlciBmb3IgSUJNIGVTZXJ2ZXIgU3lzdGVtIHAKKyAqCisgKiAgKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNgorICoKKyAqICBBdXRob3JzOgorICogICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKiAgICAgICBKYW4tQmVybmQgVGhlbWFubiA8dGhlbWFubkBkZS5pYm0uY29tPgorICogICAgICAgVGhvbWFzIEtsZWluIDx0a2xlaW5AZGUuaWJtLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0VIRUFfSENBTExfSF9fCisjZGVmaW5lIF9fRUhFQV9IQ0FMTF9IX18KKworLyoqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgSENBTEwgZGVmaW5lcyB0aGF0IGFyZSB0byBiZSBpbmNsdWRlZCBpbiB0aGUgYXBwcm9wcmlhdGUKKyAqIGtlcm5lbCBmaWxlcyBsYXRlcgorICovCisKKyNkZWZpbmUgSF9BTExPQ19IRUFfUkVTT1VSQ0UgICAweDI3OAorI2RlZmluZSBIX01PRElGWV9IRUFfUVAgICAgICAgIDB4MjUwCisjZGVmaW5lIEhfUVVFUllfSEVBX1FQICAgICAgICAgMHgyNTQKKyNkZWZpbmUgSF9RVUVSWV9IRUEgICAgICAgICAgICAweDI1OAorI2RlZmluZSBIX1FVRVJZX0hFQV9QT1JUICAgICAgIDB4MjVDCisjZGVmaW5lIEhfTU9ESUZZX0hFQV9QT1JUICAgICAgMHgyNjAKKyNkZWZpbmUgSF9SRUdfQkNNQyAgICAgICAgICAgICAweDI2NAorI2RlZmluZSBIX0RFUkVHX0JDTUMgICAgICAgICAgIDB4MjY4CisjZGVmaW5lIEhfUkVHSVNURVJfSEVBX1JQQUdFUyAgMHgyNkMKKyNkZWZpbmUgSF9ESVNBQkxFX0FORF9HRVRfSEVBICAweDI3MAorI2RlZmluZSBIX0dFVF9IRUFfSU5GTyAgICAgICAgIDB4Mjc0CisjZGVmaW5lIEhfQUREX0NPTk4gICAgICAgICAgICAgMHgyODQKKyNkZWZpbmUgSF9ERUxfQ09OTiAgICAgICAgICAgICAweDI4OAorCisjZW5kaWYJLyogX19FSEVBX0hDQUxMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX2h3LmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjQ2NzU3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX2h3LmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9uZXQvZWhlYS9laGVhX2h3LmgKKyAqCisgKiAgZUhFQSBldGhlcm5ldCBkZXZpY2UgZHJpdmVyIGZvciBJQk0gZVNlcnZlciBTeXN0ZW0gcAorICoKKyAqICAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA2CisgKgorICogIEF1dGhvcnM6CisgKiAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgIEphbi1CZXJuZCBUaGVtYW5uIDx0aGVtYW5uQGRlLmlibS5jb20+CisgKiAgICAgICBUaG9tYXMgS2xlaW4gPHRrbGVpbkBkZS5pYm0uY29tPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fRUhFQV9IV19IX18KKyNkZWZpbmUgX19FSEVBX0hXX0hfXworCisjZGVmaW5lIFFQWF9TUUFfVkFMVUUgICBFSEVBX0JNQVNLX0lCTSg0OCw2MykKKyNkZWZpbmUgUVBYX1JRMUFfVkFMVUUgIEVIRUFfQk1BU0tfSUJNKDQ4LDYzKQorI2RlZmluZSBRUFhfUlEyQV9WQUxVRSAgRUhFQV9CTUFTS19JQk0oNDgsNjMpCisjZGVmaW5lIFFQWF9SUTNBX1ZBTFVFICBFSEVBX0JNQVNLX0lCTSg0OCw2MykKKworI2RlZmluZSBRUFRFTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBlaGVhX3FwdGVtbSwgeCkKKworc3RydWN0IGVoZWFfcXB0ZW1tIHsKKwl1NjQgcXB4X2hjcjsKKwl1NjQgcXB4X2M7CisJdTY0IHFweF9oZXJyOworCXU2NCBxcHhfYWVyOworCXU2NCBxcHhfc3FhOworCXU2NCBxcHhfc3FjOworCXU2NCBxcHhfcnExYTsKKwl1NjQgcXB4X3JxMWM7CisJdTY0IHFweF9zdDsKKwl1NjQgcXB4X2FlcnI7CisJdTY0IHFweF90ZW51cmU7CisJdTY0IHFweF9yZXNlcnZlZDFbKDB4MDk4IC0gMHgwNTgpIC8gOF07CisJdTY0IHFweF9wb3J0cDsKKwl1NjQgcXB4X3Jlc2VydmVkMlsoMHgxMDAgLSAweDBBMCkgLyA4XTsKKwl1NjQgcXB4X3Q7CisJdTY0IHFweF9zcWhwOworCXU2NCBxcHhfc3FwdHA7CisJdTY0IHFweF9yZXNlcnZlZDNbKDB4MTQwIC0gMHgxMTgpIC8gOF07CisJdTY0IHFweF9zcXdzaXplOworCXU2NCBxcHhfcmVzZXJ2ZWQ0WygweDE3MCAtIDB4MTQ4KSAvIDhdOworCXU2NCBxcHhfc3FzaXplOworCXU2NCBxcHhfcmVzZXJ2ZWQ1WygweDFCMCAtIDB4MTc4KSAvIDhdOworCXU2NCBxcHhfc2lndDsKKwl1NjQgcXB4X3dxZWNudDsKKwl1NjQgcXB4X3JxMWhwOworCXU2NCBxcHhfcnExcHRwOworCXU2NCBxcHhfcnExc2l6ZTsKKwl1NjQgcXB4X3Jlc2VydmVkNlsoMHgyMjAgLSAweDFEOCkgLyA4XTsKKwl1NjQgcXB4X3JxMXdzaXplOworCXU2NCBxcHhfcmVzZXJ2ZWQ3WygweDI0MCAtIDB4MjI4KSAvIDhdOworCXU2NCBxcHhfcGQ7CisJdTY0IHFweF9zY3FuOworCXU2NCBxcHhfcmNxbjsKKwl1NjQgcXB4X2FlcW47CisJdTY0IHJlc2VydmVkNDk7CisJdTY0IHFweF9yYW07CisJdTY0IHFweF9yZXNlcnZlZDhbKDB4MzAwIC0gMHgyNzApIC8gOF07CisJdTY0IHFweF9ycTJhOworCXU2NCBxcHhfcnEyYzsKKwl1NjQgcXB4X3JxMmhwOworCXU2NCBxcHhfcnEycHRwOworCXU2NCBxcHhfcnEyc2l6ZTsKKwl1NjQgcXB4X3JxMndzaXplOworCXU2NCBxcHhfcnEydGg7CisJdTY0IHFweF9ycTNhOworCXU2NCBxcHhfcnEzYzsKKwl1NjQgcXB4X3JxM2hwOworCXU2NCBxcHhfcnEzcHRwOworCXU2NCBxcHhfcnEzc2l6ZTsKKwl1NjQgcXB4X3JxM3dzaXplOworCXU2NCBxcHhfcnEzdGg7CisJdTY0IHFweF9scG47CisJdTY0IHFweF9yZXNlcnZlZDlbKDB4NDAwIC0gMHgzNzgpIC8gOF07CisJdTY0IHJlc2VydmVkX2V4dFsoMHg1MDAgLSAweDQwMCkgLyA4XTsKKwl1NjQgcmVzZXJ2ZWQyWygweDEwMDAgLSAweDUwMCkgLyA4XTsKK307CisKKyNkZWZpbmUgTVJ4X0hDUl9MUEFSSURfVkFMSUQgRUhFQV9CTUFTS19JQk0oMCwgMCkKKworI2RlZmluZSBNUk1XTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBlaGVhX21ybXdtbSwgeCkKKworc3RydWN0IGVoZWFfbXJtd21tIHsKKwl1NjQgbXJ4X2hjcjsKKwl1NjQgbXJ4X2M7CisJdTY0IG1yeF9oZXJyOworCXU2NCBtcnhfYWVyOworCXU2NCBtcnhfcHA7CisJdTY0IHJlc2VydmVkMTsKKwl1NjQgcmVzZXJ2ZWQyOworCXU2NCByZXNlcnZlZDM7CisJdTY0IHJlc2VydmVkNFsoMHgyMDAgLSAweDQwKSAvIDhdOworCXU2NCBtcnhfY3RsWzY0XTsKK307CisKKyNkZWZpbmUgUVBFRE1NX09GRlNFVCh4KSBvZmZzZXRvZihzdHJ1Y3QgZWhlYV9xcGVkbW0sIHgpCisKK3N0cnVjdCBlaGVhX3FwZWRtbSB7CisKKwl1NjQgcmVzZXJ2ZWQwWygweDQwMCkgLyA4XTsKKwl1NjQgcXBlZHhfcGhoOworCXU2NCBxcGVkeF9wcHNncDsKKwl1NjQgcXBlZHhfcHBzZ3U7CisJdTY0IHFwZWR4X3BwZGdwOworCXU2NCBxcGVkeF9wcGRndTsKKwl1NjQgcXBlZHhfYXBoOworCXU2NCBxcGVkeF9hcHNncDsKKwl1NjQgcXBlZHhfYXBzZ3U7CisJdTY0IHFwZWR4X2FwZGdwOworCXU2NCBxcGVkeF9hcGRndTsKKwl1NjQgcXBlZHhfYXBhdjsKKwl1NjQgcXBlZHhfYXBzYXY7CisJdTY0IHFwZWR4X2hjcjsKKwl1NjQgcmVzZXJ2ZWQxWzRdOworCXU2NCBxcGVkeF9ycmwwOworCXU2NCBxcGVkeF9ycnJrZXkwOworCXU2NCBxcGVkeF9ycnZhMDsKKwl1NjQgcmVzZXJ2ZWQyOworCXU2NCBxcGVkeF9ycmwxOworCXU2NCBxcGVkeF9ycnJrZXkxOworCXU2NCBxcGVkeF9ycnZhMTsKKwl1NjQgcmVzZXJ2ZWQzOworCXU2NCBxcGVkeF9ycmwyOworCXU2NCBxcGVkeF9ycnJrZXkyOworCXU2NCBxcGVkeF9ycnZhMjsKKwl1NjQgcmVzZXJ2ZWQ0OworCXU2NCBxcGVkeF9ycmwzOworCXU2NCBxcGVkeF9ycnJrZXkzOworCXU2NCBxcGVkeF9ycnZhMzsKK307CisKKyNkZWZpbmUgQ1FYX0ZFQ0FEREVSIEVIRUFfQk1BU0tfSUJNKDMyLCA2MykKKyNkZWZpbmUgQ1FYX0ZFQ19DUUVfQ05UIEVIRUFfQk1BU0tfSUJNKDMyLCA2MykKKyNkZWZpbmUgQ1FYX04xX0dFTkVSQVRFX0NPTVBfRVZFTlQgRUhFQV9CTUFTS19JQk0oMCwgMCkKKyNkZWZpbmUgQ1FYX0VQX0VWRU5UX1BFTkRJTkcgRUhFQV9CTUFTS19JQk0oMCwgMCkKKworI2RlZmluZSBDUVRFTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBlaGVhX2NxdGVtbSwgeCkKKworc3RydWN0IGVoZWFfY3F0ZW1tIHsKKwl1NjQgY3F4X2hjcjsKKwl1NjQgY3F4X2M7CisJdTY0IGNxeF9oZXJyOworCXU2NCBjcXhfYWVyOworCXU2NCBjcXhfcHRwOworCXU2NCBjcXhfdHA7CisJdTY0IGNxeF9mZWM7CisJdTY0IGNxeF9mZWNhOworCXU2NCBjcXhfZXA7CisJdTY0IGNxeF9lcTsKKwl1NjQgcmVzZXJ2ZWQxOworCXU2NCBjcXhfbjA7CisJdTY0IGNxeF9uMTsKKwl1NjQgcmVzZXJ2ZWQyWygweDEwMDAgLSAweDYwKSAvIDhdOworfTsKKworI2RlZmluZSBFUVRFTU1fT0ZGU0VUKHgpIG9mZnNldG9mKHN0cnVjdCBlaGVhX2VxdGVtbSwgeCkKKworc3RydWN0IGVoZWFfZXF0ZW1tIHsKKwl1NjQgZXF4X2hjcjsKKwl1NjQgZXF4X2M7CisJdTY0IGVxeF9oZXJyOworCXU2NCBlcXhfYWVyOworCXU2NCBlcXhfcHRwOworCXU2NCBlcXhfdHA7CisJdTY0IGVxeF9zc2JhOworCXU2NCBlcXhfcHNiYTsKKwl1NjQgZXF4X2NlYzsKKwl1NjQgZXF4X21lcWw7CisJdTY0IGVxeF94aXNiaTsKKwl1NjQgZXF4X3hpc2M7CisJdTY0IGVxeF9pdDsKK307CisKKy8qCisgKiBUaGVzZSBhY2Nlc3MgZnVuY3Rpb25zIHdpbGwgYmUgY2hhbmdlZCB3aGVuIHRoZSBkaXNzdWNjc2lvbiBhYm91dAorICogdGhlIG5ldyBhY2Nlc3MgbWV0aG9kcyBmb3IgUE9XRVIgaGFzIHNldHRsZWQuCisgKi8KKworc3RhdGljIGlubGluZSB1NjQgZXBhX2xvYWQoc3RydWN0IGhfZXBhIGVwYSwgdTMyIG9mZnNldCkKK3sKKwlyZXR1cm4gX19yYXdfcmVhZHEoKHZvaWQgX19pb21lbSAqKShlcGEuYWRkciArIG9mZnNldCkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXBhX3N0b3JlKHN0cnVjdCBoX2VwYSBlcGEsIHUzMiBvZmZzZXQsIHU2NCB2YWx1ZSkKK3sKKwlfX3Jhd193cml0ZXEodmFsdWUsICh2b2lkIF9faW9tZW0gKikoZXBhLmFkZHIgKyBvZmZzZXQpKTsKKwllcGFfbG9hZChlcGEsIG9mZnNldCk7CS8qIHN5bmNocm9uaXplIGV4cGxpY2l0bHkgdG8gZUhFQSAqLworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXBhX3N0b3JlX2FjYyhzdHJ1Y3QgaF9lcGEgZXBhLCB1MzIgb2Zmc2V0LCB1NjQgdmFsdWUpCit7CisJX19yYXdfd3JpdGVxKHZhbHVlLCAodm9pZCBfX2lvbWVtICopKGVwYS5hZGRyICsgb2Zmc2V0KSk7Cit9CisKKyNkZWZpbmUgZXBhX3N0b3JlX2VxKGVwYSwgb2Zmc2V0LCB2YWx1ZSlcCisgICAgICAgIGVwYV9zdG9yZShlcGEsIEVRVEVNTV9PRkZTRVQob2Zmc2V0KSwgdmFsdWUpCisjZGVmaW5lIGVwYV9sb2FkX2VxKGVwYSwgb2Zmc2V0KVwKKyAgICAgICAgZXBhX2xvYWQoZXBhLCBFUVRFTU1fT0ZGU0VUKG9mZnNldCkpCisKKyNkZWZpbmUgZXBhX3N0b3JlX2NxKGVwYSwgb2Zmc2V0LCB2YWx1ZSlcCisgICAgICAgIGVwYV9zdG9yZShlcGEsIENRVEVNTV9PRkZTRVQob2Zmc2V0KSwgdmFsdWUpCisjZGVmaW5lIGVwYV9sb2FkX2NxKGVwYSwgb2Zmc2V0KVwKKyAgICAgICAgZXBhX2xvYWQoZXBhLCBDUVRFTU1fT0ZGU0VUKG9mZnNldCkpCisKKyNkZWZpbmUgZXBhX3N0b3JlX3FwKGVwYSwgb2Zmc2V0LCB2YWx1ZSlcCisgICAgICAgIGVwYV9zdG9yZShlcGEsIFFQVEVNTV9PRkZTRVQob2Zmc2V0KSwgdmFsdWUpCisjZGVmaW5lIGVwYV9sb2FkX3FwKGVwYSwgb2Zmc2V0KVwKKyAgICAgICAgZXBhX2xvYWQoZXBhLCBRUFRFTU1fT0ZGU0VUKG9mZnNldCkpCisKKyNkZWZpbmUgZXBhX3N0b3JlX3FwZWQoZXBhLCBvZmZzZXQsIHZhbHVlKVwKKyAgICAgICAgZXBhX3N0b3JlKGVwYSwgUVBFRE1NX09GRlNFVChvZmZzZXQpLCB2YWx1ZSkKKyNkZWZpbmUgZXBhX2xvYWRfcXBlZChlcGEsIG9mZnNldClcCisgICAgICAgIGVwYV9sb2FkKGVwYSwgUVBFRE1NX09GRlNFVChvZmZzZXQpKQorCisjZGVmaW5lIGVwYV9zdG9yZV9tcm13KGVwYSwgb2Zmc2V0LCB2YWx1ZSlcCisgICAgICAgIGVwYV9zdG9yZShlcGEsIE1STVdNTV9PRkZTRVQob2Zmc2V0KSwgdmFsdWUpCisjZGVmaW5lIGVwYV9sb2FkX21ybXcoZXBhLCBvZmZzZXQpXAorICAgICAgICBlcGFfbG9hZChlcGEsIE1STVdNTV9PRkZTRVQob2Zmc2V0KSkKKworI2RlZmluZSBlcGFfc3RvcmVfYmFzZShlcGEsIG9mZnNldCwgdmFsdWUpXAorICAgICAgICBlcGFfc3RvcmUoZXBhLCBIQ0FHUl9PRkZTRVQob2Zmc2V0KSwgdmFsdWUpCisjZGVmaW5lIGVwYV9sb2FkX2Jhc2UoZXBhLCBvZmZzZXQpXAorICAgICAgICBlcGFfbG9hZChlcGEsIEhDQUdSX09GRlNFVChvZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhlYV91cGRhdGVfc3FhKHN0cnVjdCBlaGVhX3FwICpxcCwgdTE2IG5yX3dxZXMpCit7CisJc3RydWN0IGhfZXBhIGVwYSA9IHFwLT5lcGFzLmtlcm5lbDsKKwllcGFfc3RvcmVfYWNjKGVwYSwgUVBURU1NX09GRlNFVChxcHhfc3FhKSwKKwkJICAgICAgRUhFQV9CTUFTS19TRVQoUVBYX1NRQV9WQUxVRSwgbnJfd3FlcykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhlYV91cGRhdGVfcnEzYShzdHJ1Y3QgZWhlYV9xcCAqcXAsIHUxNiBucl93cWVzKQoreworCXN0cnVjdCBoX2VwYSBlcGEgPSBxcC0+ZXBhcy5rZXJuZWw7CisJZXBhX3N0b3JlX2FjYyhlcGEsIFFQVEVNTV9PRkZTRVQocXB4X3JxM2EpLAorCQkgICAgICBFSEVBX0JNQVNLX1NFVChRUFhfUlExQV9WQUxVRSwgbnJfd3FlcykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhlYV91cGRhdGVfcnEyYShzdHJ1Y3QgZWhlYV9xcCAqcXAsIHUxNiBucl93cWVzKQoreworCXN0cnVjdCBoX2VwYSBlcGEgPSBxcC0+ZXBhcy5rZXJuZWw7CisJZXBhX3N0b3JlX2FjYyhlcGEsIFFQVEVNTV9PRkZTRVQocXB4X3JxMmEpLAorCQkgICAgICBFSEVBX0JNQVNLX1NFVChRUFhfUlEyQV9WQUxVRSwgbnJfd3FlcykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhlYV91cGRhdGVfcnExYShzdHJ1Y3QgZWhlYV9xcCAqcXAsIHUxNiBucl93cWVzKQoreworCXN0cnVjdCBoX2VwYSBlcGEgPSBxcC0+ZXBhcy5rZXJuZWw7CisJZXBhX3N0b3JlX2FjYyhlcGEsIFFQVEVNTV9PRkZTRVQocXB4X3JxMWEpLAorCQkgICAgICBFSEVBX0JNQVNLX1NFVChRUFhfUlEzQV9WQUxVRSwgbnJfd3FlcykpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhlYV91cGRhdGVfZmVjYShzdHJ1Y3QgZWhlYV9jcSAqY3EsIHUzMiBucl9jcWVzKQoreworCXN0cnVjdCBoX2VwYSBlcGEgPSBjcS0+ZXBhcy5rZXJuZWw7CisJZXBhX3N0b3JlX2FjYyhlcGEsIENRVEVNTV9PRkZTRVQoY3F4X2ZlY2EpLAorCQkgICAgICBFSEVBX0JNQVNLX1NFVChDUVhfRkVDQURERVIsIG5yX2NxZXMpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVoZWFfcmVzZXRfY3FfbjEoc3RydWN0IGVoZWFfY3EgKmNxKQoreworCXN0cnVjdCBoX2VwYSBlcGEgPSBjcS0+ZXBhcy5rZXJuZWw7CisJZXBhX3N0b3JlX2NxKGVwYSwgY3F4X24xLAorCQkgICAgIEVIRUFfQk1BU0tfU0VUKENRWF9OMV9HRU5FUkFURV9DT01QX0VWRU5ULCAxKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlaGVhX3Jlc2V0X2NxX2VwKHN0cnVjdCBlaGVhX2NxICpteV9jcSkKK3sKKwlzdHJ1Y3QgaF9lcGEgZXBhID0gbXlfY3EtPmVwYXMua2VybmVsOworCWVwYV9zdG9yZV9hY2MoZXBhLCBDUVRFTU1fT0ZGU0VUKGNxeF9lcCksCisJCSAgICAgIEVIRUFfQk1BU0tfU0VUKENRWF9FUF9FVkVOVF9QRU5ESU5HLCAwKSk7Cit9CisKKyNlbmRpZgkvKiBfX0VIRUFfSFdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjNkMWM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtMCwwICsxLDI2NTQgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYworICoKKyAqICBlSEVBIGV0aGVybmV0IGRldmljZSBkcml2ZXIgZm9yIElCTSBlU2VydmVyIFN5c3RlbSBwCisgKgorICogIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDYKKyAqCisgKiAgQXV0aG9yczoKKyAqICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgSmFuLUJlcm5kIFRoZW1hbm4gPHRoZW1hbm5AZGUuaWJtLmNvbT4KKyAqICAgICAgIFRob21hcyBLbGVpbiA8dGtsZWluQGRlLmlibS5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKworI2luY2x1ZGUgImVoZWEuaCIKKyNpbmNsdWRlICJlaGVhX3Ftci5oIgorI2luY2x1ZGUgImVoZWFfcGh5cC5oIgorCisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkNocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJQk0gZVNlcnZlciBIRUEgRHJpdmVyIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKKworc3RhdGljIGludCBtc2dfbGV2ZWwgPSAtMTsKK3N0YXRpYyBpbnQgcnExX2VudHJpZXMgPSBFSEVBX0RFRl9FTlRSSUVTX1JRMTsKK3N0YXRpYyBpbnQgcnEyX2VudHJpZXMgPSBFSEVBX0RFRl9FTlRSSUVTX1JRMjsKK3N0YXRpYyBpbnQgcnEzX2VudHJpZXMgPSBFSEVBX0RFRl9FTlRSSUVTX1JRMzsKK3N0YXRpYyBpbnQgc3FfZW50cmllcyA9IEVIRUFfREVGX0VOVFJJRVNfU1E7CisKK21vZHVsZV9wYXJhbShtc2dfbGV2ZWwsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocnExX2VudHJpZXMsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocnEyX2VudHJpZXMsIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocnEzX2VudHJpZXMsIGludCwgMCk7Cittb2R1bGVfcGFyYW0oc3FfZW50cmllcywgaW50LCAwKTsKKworTU9EVUxFX1BBUk1fREVTQyhtc2dfbGV2ZWwsICJtc2dfbGV2ZWwiKTsKK01PRFVMRV9QQVJNX0RFU0MocnEzX2VudHJpZXMsICJOdW1iZXIgb2YgZW50cmllcyBmb3IgUmVjZWl2ZSBRdWV1ZSAzICIKKwkJICJbMl54IC0gMV0sIHggPSBbNi4uMTRdLiBEZWZhdWx0ID0gIgorCQkgX19NT0RVTEVfU1RSSU5HKEVIRUFfREVGX0VOVFJJRVNfUlEzKSAiKSIpOworTU9EVUxFX1BBUk1fREVTQyhycTJfZW50cmllcywgIk51bWJlciBvZiBlbnRyaWVzIGZvciBSZWNlaXZlIFF1ZXVlIDIgIgorCQkgIlsyXnggLSAxXSwgeCA9IFs2Li4xNF0uIERlZmF1bHQgPSAiCisJCSBfX01PRFVMRV9TVFJJTkcoRUhFQV9ERUZfRU5UUklFU19SUTIpICIpIik7CitNT0RVTEVfUEFSTV9ERVNDKHJxMV9lbnRyaWVzLCAiTnVtYmVyIG9mIGVudHJpZXMgZm9yIFJlY2VpdmUgUXVldWUgMSAiCisJCSAiWzJeeCAtIDFdLCB4ID0gWzYuLjE0XS4gRGVmYXVsdCA9ICIKKwkJIF9fTU9EVUxFX1NUUklORyhFSEVBX0RFRl9FTlRSSUVTX1JRMSkgIikiKTsKK01PRFVMRV9QQVJNX0RFU0Moc3FfZW50cmllcywgIiBOdW1iZXIgb2YgZW50cmllcyBmb3IgdGhlIFNlbmQgUXVldWUgICIKKwkJICJbMl54IC0gMV0sIHggPSBbNi4uMTRdLiBEZWZhdWx0ID0gIgorCQkgX19NT0RVTEVfU1RSSU5HKEVIRUFfREVGX0VOVFJJRVNfU1EpICIpIik7CisKK3ZvaWQgZWhlYV9kdW1wKHZvaWQgKmFkciwgaW50IGxlbiwgY2hhciAqbXNnKSB7CisJaW50IHg7CisJdW5zaWduZWQgY2hhciAqZGViID0gYWRyOworCWZvciAoeCA9IDA7IHggPCBsZW47IHggKz0gMTYpIHsKKwkJcHJpbnRrKERSVl9OQU1FICIlcyBhZHI9JXAgb2ZzPSUwNHggJTAxNmx4ICUwMTZseFxuIiwgbXNnLAorCQkJICBkZWIsIHgsICooKHU2NCopJmRlYlswXSksICooKHU2NCopJmRlYls4XSkpOworCQlkZWIgKz0gMTY7CisJfQorfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVoZWFfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnBvcnQtPnN0YXRzOworCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiMiAqY2IyOworCXU2NCBocmV0LCByeF9wYWNrZXRzOworCWludCBpOworCisJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2YoKnN0YXRzKSk7CisKKwljYjIgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiMikgeworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChwb3J0LT5hZGFwdGVyLT5oYW5kbGUsCisJCQkJICAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAorCQkJCSAgICAgIEhfUE9SVF9DQjIsIEhfUE9SVF9DQjJfQUxMLCBjYjIpOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGVhX2Vycm9yKCJxdWVyeV9laGVhX3BvcnQgZmFpbGVkIik7CisJCWdvdG8gb3V0X2hlcnI7CisJfQorCisJaWYgKG5ldGlmX21zZ19odyhwb3J0KSkKKwkJZWhlYV9kdW1wKGNiMiwgc2l6ZW9mKCpjYjIpLCAibmV0X2RldmljZV9zdGF0cyIpOworCisJcnhfcGFja2V0cyA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzOyBpKyspCisJCXJ4X3BhY2tldHMgKz0gcG9ydC0+cG9ydF9yZXNbaV0ucnhfcGFja2V0czsKKworCXN0YXRzLT50eF9wYWNrZXRzID0gY2IyLT50eHVjcCArIGNiMi0+dHhtY3AgKyBjYjItPnR4YmNwOworCXN0YXRzLT5tdWx0aWNhc3QgPSBjYjItPnJ4bWNwOworCXN0YXRzLT5yeF9lcnJvcnMgPSBjYjItPnJ4dWVycjsKKwlzdGF0cy0+cnhfYnl0ZXMgPSBjYjItPnJ4bzsKKwlzdGF0cy0+dHhfYnl0ZXMgPSBjYjItPnR4bzsKKwlzdGF0cy0+cnhfcGFja2V0cyA9IHJ4X3BhY2tldHM7CisKK291dF9oZXJyOgorCWtmcmVlKGNiMik7CitvdXQ6CisJcmV0dXJuIHN0YXRzOworfQorCitzdGF0aWMgdm9pZCBlaGVhX3JlZmlsbF9ycTEoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgaW5kZXgsIGludCBucl9vZl93cWVzKQoreworCXN0cnVjdCBza19idWZmICoqc2tiX2Fycl9ycTEgPSBwci0+cnExX3NrYmEuYXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwci0+cG9ydC0+bmV0ZGV2OworCWludCBtYXhfaW5kZXhfbWFzayA9IHByLT5ycTFfc2tiYS5sZW4gLSAxOworCWludCBpOworCisJaWYgKCFucl9vZl93cWVzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfb2Zfd3FlczsgaSsrKSB7CisJCWlmICghc2tiX2Fycl9ycTFbaW5kZXhdKSB7CisJCQlza2JfYXJyX3JxMVtpbmRleF0gPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwKKwkJCQkJCQkgICAgICBFSEVBX0xfUEtUX1NJWkUpOworCQkJaWYgKCFza2JfYXJyX3JxMVtpbmRleF0pIHsKKwkJCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAorCQkJCQkgICBkZXYtPm5hbWUsIGkpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWluZGV4LS07CisJCWluZGV4ICY9IG1heF9pbmRleF9tYXNrOworCX0KKwkvKiBSaW5nIGRvb3JiZWxsICovCisJZWhlYV91cGRhdGVfcnExYShwci0+cXAsIGkpOworfQorCitzdGF0aWMgaW50IGVoZWFfaW5pdF9maWxsX3JxMShzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsIGludCBucl9ycTFhKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBza19idWZmICoqc2tiX2Fycl9ycTEgPSBwci0+cnExX3NrYmEuYXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwci0+cG9ydC0+bmV0ZGV2OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHByLT5ycTFfc2tiYS5sZW47IGkrKykgeworCQlza2JfYXJyX3JxMVtpXSA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBFSEVBX0xfUEtUX1NJWkUpOworCQlpZiAoIXNrYl9hcnJfcnExW2ldKSB7CisJCQllaGVhX2Vycm9yKCIlczogbm8gbWVtIGZvciBza2IvJWQgd3FlcyBmaWxsZWQiLAorCQkJCSAgIGRldi0+bmFtZSwgaSk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJLyogUmluZyBkb29yYmVsbCAqLworCWVoZWFfdXBkYXRlX3JxMWEocHItPnFwLCBucl9ycTFhKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGVoZWFfcmVmaWxsX3JxX2RlZihzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsCisJCQkgICAgICBzdHJ1Y3QgZWhlYV9xX3NrYl9hcnIgKnFfc2tiYSwgaW50IHJxX25yLAorCQkJICAgICAgaW50IG51bV93cWVzLCBpbnQgd3FlX3R5cGUsIGludCBwYWNrZXRfc2l6ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcHItPnBvcnQtPm5ldGRldjsKKwlzdHJ1Y3QgZWhlYV9xcCAqcXAgPSBwci0+cXA7CisJc3RydWN0IHNrX2J1ZmYgKipza2JfYXJyID0gcV9za2JhLT5hcnI7CisJc3RydWN0IGVoZWFfcndxZSAqcndxZTsKKwlpbnQgaSwgaW5kZXgsIG1heF9pbmRleF9tYXNrLCBmaWxsX3dxZXM7CisJaW50IHJldCA9IDA7CisKKwlmaWxsX3dxZXMgPSBxX3NrYmEtPm9zX3NrYnMgKyBudW1fd3FlczsKKworCWlmICghZmlsbF93cWVzKQorCQlyZXR1cm4gcmV0OworCisJaW5kZXggPSBxX3NrYmEtPmluZGV4OworCW1heF9pbmRleF9tYXNrID0gcV9za2JhLT5sZW4gLSAxOworCWZvciAoaSA9IDA7IGkgPCBmaWxsX3dxZXM7IGkrKykgeworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHBhY2tldF9zaXplKTsKKwkJaWYgKCFza2IpIHsKKwkJCWVoZWFfZXJyb3IoIiVzOiBubyBtZW0gZm9yIHNrYi8lZCB3cWVzIGZpbGxlZCIsCisJCQkJICAgZGV2LT5uYW1lLCBpKTsKKwkJCXFfc2tiYS0+b3Nfc2ticyA9IGZpbGxfd3FlcyAtIGk7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJYnJlYWs7CisJCX0KKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCisJCXNrYl9hcnJbaW5kZXhdID0gc2tiOworCisJCXJ3cWUgPSBlaGVhX2dldF9uZXh0X3J3cWUocXAsIHJxX25yKTsKKwkJcndxZS0+d3JfaWQgPSBFSEVBX0JNQVNLX1NFVChFSEVBX1dSX0lEX1RZUEUsIHdxZV90eXBlKQorCQkgICAgICAgICAgICB8IEVIRUFfQk1BU0tfU0VUKEVIRUFfV1JfSURfSU5ERVgsIGluZGV4KTsKKwkJcndxZS0+c2dfbGlzdFswXS5sX2tleSA9IHByLT5yZWN2X21yLmxrZXk7CisJCXJ3cWUtPnNnX2xpc3RbMF0udmFkZHIgPSAodTY0KXNrYi0+ZGF0YTsKKwkJcndxZS0+c2dfbGlzdFswXS5sZW4gPSBwYWNrZXRfc2l6ZTsKKwkJcndxZS0+ZGF0YV9zZWdtZW50cyA9IDE7CisKKwkJaW5kZXgrKzsKKwkJaW5kZXggJj0gbWF4X2luZGV4X21hc2s7CisJfQorCXFfc2tiYS0+aW5kZXggPSBpbmRleDsKKworCS8qIFJpbmcgZG9vcmJlbGwgKi8KKwlpb3N5bmMoKTsKKwlpZiAocnFfbnIgPT0gMikKKwkJZWhlYV91cGRhdGVfcnEyYShwci0+cXAsIGkpOworCWVsc2UKKwkJZWhlYV91cGRhdGVfcnEzYShwci0+cXAsIGkpOworCisJcmV0dXJuIHJldDsKK30KKworCitzdGF0aWMgaW50IGVoZWFfcmVmaWxsX3JxMihzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIsIGludCBucl9vZl93cWVzKQoreworCXJldHVybiBlaGVhX3JlZmlsbF9ycV9kZWYocHIsICZwci0+cnEyX3NrYmEsIDIsCisJCQkJICBucl9vZl93cWVzLCBFSEVBX1JXUUUyX1RZUEUsCisJCQkJICBFSEVBX1JRMl9QS1RfU0laRSArIE5FVF9JUF9BTElHTik7Cit9CisKKworc3RhdGljIGludCBlaGVhX3JlZmlsbF9ycTMoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgbnJfb2Zfd3FlcykKK3sKKwlyZXR1cm4gZWhlYV9yZWZpbGxfcnFfZGVmKHByLCAmcHItPnJxM19za2JhLCAzLAorCQkJCSAgbnJfb2Zfd3FlcywgRUhFQV9SV1FFM19UWVBFLAorCQkJCSAgRUhFQV9NQVhfUEFDS0VUX1NJWkUgKyBORVRfSVBfQUxJR04pOworfQorCitzdGF0aWMgaW5saW5lIGludCBlaGVhX2NoZWNrX2NxZShzdHJ1Y3QgZWhlYV9jcWUgKmNxZSwgaW50ICpycV9udW0pCit7CisJKnJxX251bSA9IChjcWUtPnR5cGUgJiBFSEVBX0NRRV9UWVBFX1JRKSA+PiA1OworCWlmICgoY3FlLT5zdGF0dXMgJiBFSEVBX0NRRV9TVEFUX0VSUl9NQVNLKSA9PSAwKQorCQlyZXR1cm4gMDsKKwlpZiAoKChjcWUtPnN0YXR1cyAmIEVIRUFfQ1FFX1NUQVRfRVJSX1RDUCkgIT0gMCkgJiYKKwkgICAgKGNxZS0+aGVhZGVyX2xlbmd0aCA9PSAwKSkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBlaGVhX2ZpbGxfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBlaGVhX2NxZSAqY3FlKQoreworCWludCBsZW5ndGggPSBjcWUtPm51bV9ieXRlc190cmFuc2ZlcmVkIC0gNDsJLypyZW1vdmUgQ1JDICovCisKKwlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmdldF9za2JfYnlfaW5kZXgoc3RydWN0IHNrX2J1ZmYgKipza2JfYXJyYXksCisJCQkJCSAgICAgICBpbnQgYXJyX2xlbiwKKwkJCQkJICAgICAgIHN0cnVjdCBlaGVhX2NxZSAqY3FlKQoreworCWludCBza2JfaW5kZXggPSBFSEVBX0JNQVNLX0dFVChFSEVBX1dSX0lEX0lOREVYLCBjcWUtPndyX2lkKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXZvaWQgKnByZWY7CisJaW50IHg7CisKKwl4ID0gc2tiX2luZGV4ICsgMTsKKwl4ICY9IChhcnJfbGVuIC0gMSk7CisKKwlwcmVmID0gc2tiX2FycmF5W3hdOworCXByZWZldGNodyhwcmVmKTsKKwlwcmVmZXRjaHcocHJlZiArIEVIRUFfQ0FDSEVfTElORSk7CisKKwlwcmVmID0gKHNrYl9hcnJheVt4XS0+ZGF0YSk7CisJcHJlZmV0Y2gocHJlZik7CisJcHJlZmV0Y2gocHJlZiArIEVIRUFfQ0FDSEVfTElORSk7CisJcHJlZmV0Y2gocHJlZiArIEVIRUFfQ0FDSEVfTElORSAqIDIpOworCXByZWZldGNoKHByZWYgKyBFSEVBX0NBQ0hFX0xJTkUgKiAzKTsKKwlza2IgPSBza2JfYXJyYXlbc2tiX2luZGV4XTsKKwlza2JfYXJyYXlbc2tiX2luZGV4XSA9IE5VTEw7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqZ2V0X3NrYl9ieV9pbmRleF9sbChzdHJ1Y3Qgc2tfYnVmZiAqKnNrYl9hcnJheSwKKwkJCQkJCSAgaW50IGFycl9sZW4sIGludCB3cWVfaW5kZXgpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICpwcmVmOworCWludCB4OworCisJeCA9IHdxZV9pbmRleCArIDE7CisJeCAmPSAoYXJyX2xlbiAtIDEpOworCisJcHJlZiA9IHNrYl9hcnJheVt4XTsKKwlwcmVmZXRjaHcocHJlZik7CisJcHJlZmV0Y2h3KHByZWYgKyBFSEVBX0NBQ0hFX0xJTkUpOworCisJcHJlZiA9IChza2JfYXJyYXlbeF0tPmRhdGEpOworCXByZWZldGNodyhwcmVmKTsKKwlwcmVmZXRjaHcocHJlZiArIEVIRUFfQ0FDSEVfTElORSk7CisKKwlza2IgPSBza2JfYXJyYXlbd3FlX2luZGV4XTsKKwlza2JfYXJyYXlbd3FlX2luZGV4XSA9IE5VTEw7CisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGludCBlaGVhX3RyZWF0X3BvbGxfZXJyb3Ioc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLCBpbnQgcnEsCisJCQkJIHN0cnVjdCBlaGVhX2NxZSAqY3FlLCBpbnQgKnByb2Nlc3NlZF9ycTIsCisJCQkJIGludCAqcHJvY2Vzc2VkX3JxMykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKG5ldGlmX21zZ19yeF9lcnIocHItPnBvcnQpKSB7CisJCWVoZWFfZXJyb3IoIkNRRSBFcnJvciBmb3IgUVAgJWQiLCBwci0+cXAtPmluaXRfYXR0ci5xcF9ucik7CisJCWVoZWFfZHVtcChjcWUsIHNpemVvZigqY3FlKSwgIkNRRSIpOworCX0KKworCWlmIChycSA9PSAyKSB7CisJCSpwcm9jZXNzZWRfcnEyICs9IDE7CisJCXNrYiA9IGdldF9za2JfYnlfaW5kZXgocHItPnJxMl9za2JhLmFyciwgcHItPnJxMl9za2JhLmxlbiwgY3FlKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCX0gZWxzZSBpZiAocnEgPT0gMykgeworCQkqcHJvY2Vzc2VkX3JxMyArPSAxOworCQlza2IgPSBnZXRfc2tiX2J5X2luZGV4KHByLT5ycTNfc2tiYS5hcnIsIHByLT5ycTNfc2tiYS5sZW4sIGNxZSk7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwl9CisKKwlpZiAoY3FlLT5zdGF0dXMgJiBFSEVBX0NRRV9TVEFUX0ZBVF9FUlJfTUFTSykgeworCQllaGVhX2Vycm9yKCJDcml0aWNhbCByZWNlaXZlIGVycm9yLiBSZXNldHRpbmcgcG9ydC4iKTsKKwkJcXVldWVfd29yayhwci0+cG9ydC0+YWRhcHRlci0+ZWhlYV93cSwgJnByLT5wb3J0LT5yZXNldF90YXNrKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQoreworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciA9ICZwb3J0LT5wb3J0X3Jlc1swXTsKKwlzdHJ1Y3QgZWhlYV9xcCAqcXAgPSBwci0+cXA7CisJc3RydWN0IGVoZWFfY3FlICpjcWU7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYl9hcnJfcnExID0gcHItPnJxMV9za2JhLmFycjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYl9hcnJfcnEyID0gcHItPnJxMl9za2JhLmFycjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYl9hcnJfcnEzID0gcHItPnJxM19za2JhLmFycjsKKwlpbnQgc2tiX2Fycl9ycTFfbGVuID0gcHItPnJxMV9za2JhLmxlbjsKKwlpbnQgc2tiX2Fycl9ycTJfbGVuID0gcHItPnJxMl9za2JhLmxlbjsKKwlpbnQgc2tiX2Fycl9ycTNfbGVuID0gcHItPnJxM19za2JhLmxlbjsKKwlpbnQgcHJvY2Vzc2VkLCBwcm9jZXNzZWRfcnExLCBwcm9jZXNzZWRfcnEyLCBwcm9jZXNzZWRfcnEzOworCWludCB3cWVfaW5kZXgsIGxhc3Rfd3FlX2luZGV4LCBycSwgaW50cmVxLCBteV9xdW90YSwgcG9ydF9yZXNldDsKKworCXByb2Nlc3NlZCA9IHByb2Nlc3NlZF9ycTEgPSBwcm9jZXNzZWRfcnEyID0gcHJvY2Vzc2VkX3JxMyA9IDA7CisJbGFzdF93cWVfaW5kZXggPSAwOworCW15X3F1b3RhID0gbWluKCpidWRnZXQsIGRldi0+cXVvdGEpOworCW15X3F1b3RhID0gbWluKG15X3F1b3RhLCBFSEVBX1BPTExfTUFYX1JXUUUpOworCisJLyogcnEwIGlzIGxvdyBsYXRlbmN5IFJRICovCisJY3FlID0gZWhlYV9wb2xsX3JxMShxcCwgJndxZV9pbmRleCk7CisJd2hpbGUgKChteV9xdW90YSA+IDApICYmIGNxZSkgeworCQllaGVhX2luY19ycTEocXApOworCQlwcm9jZXNzZWRfcnExKys7CisJCXByb2Nlc3NlZCsrOworCQlteV9xdW90YS0tOworCQlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyhwb3J0KSkKKwkJCWVoZWFfZHVtcChjcWUsIHNpemVvZigqY3FlKSwgIkNRRSIpOworCisJCWxhc3Rfd3FlX2luZGV4ID0gd3FlX2luZGV4OworCQlybWIoKTsKKwkJaWYgKCFlaGVhX2NoZWNrX2NxZShjcWUsICZycSkpIHsKKwkJCWlmIChycSA9PSAxKSB7CS8qIExMIFJRMSAqLworCQkJCXNrYiA9IGdldF9za2JfYnlfaW5kZXhfbGwoc2tiX2Fycl9ycTEsCisJCQkJCQkJICBza2JfYXJyX3JxMV9sZW4sCisJCQkJCQkJICB3cWVfaW5kZXgpOworCQkJCWlmICh1bmxpa2VseSghc2tiKSkgeworCQkJCQlpZiAobmV0aWZfbXNnX3J4X2Vycihwb3J0KSkKKwkJCQkJCWVoZWFfZXJyb3IoIkxMIHJxMTogc2tiPU5VTEwiKTsKKwkJCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsCisJCQkJCQkJICAgICAgIEVIRUFfTF9QS1RfU0laRSk7CisJCQkJCWlmICghc2tiKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1lbWNweShza2ItPmRhdGEsICgoY2hhciopY3FlKSArIDY0LAorCQkJCSAgICAgICBjcWUtPm51bV9ieXRlc190cmFuc2ZlcmVkIC0gNCk7CisJCQkJZWhlYV9maWxsX3NrYihkZXYsIHNrYiwgY3FlKTsKKwkJCX0gZWxzZSBpZiAocnEgPT0gMikgeyAgLyogUlEyICovCisJCQkJc2tiID0gZ2V0X3NrYl9ieV9pbmRleChza2JfYXJyX3JxMiwKKwkJCQkJCSAgICAgICBza2JfYXJyX3JxMl9sZW4sIGNxZSk7CisJCQkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBvcnQpKQorCQkJCQkJZWhlYV9lcnJvcigicnEyOiBza2I9TlVMTCIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWhlYV9maWxsX3NrYihkZXYsIHNrYiwgY3FlKTsKKwkJCQlwcm9jZXNzZWRfcnEyKys7CisJCQl9IGVsc2UgeyAgLyogUlEzICovCisJCQkJc2tiID0gZ2V0X3NrYl9ieV9pbmRleChza2JfYXJyX3JxMywKKwkJCQkJCSAgICAgICBza2JfYXJyX3JxM19sZW4sIGNxZSk7CisJCQkJaWYgKHVubGlrZWx5KCFza2IpKSB7CisJCQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBvcnQpKQorCQkJCQkJZWhlYV9lcnJvcigicnEzOiBza2I9TlVMTCIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJZWhlYV9maWxsX3NrYihkZXYsIHNrYiwgY3FlKTsKKwkJCQlwcm9jZXNzZWRfcnEzKys7CisJCQl9CisKKwkJCWlmIChjcWUtPnN0YXR1cyAmIEVIRUFfQ1FFX1ZMQU5fVEFHX1hUUkFDVCkKKwkJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBwb3J0LT52Z3JwLAorCQkJCQkJCSBjcWUtPnZsYW5fdGFnKTsKKwkJCWVsc2UKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCX0gZWxzZSB7IC8qIEVycm9yIG9jY3VyZWQgKi8KKwkJCXByLT5wX3N0YXRlLnBvbGxfcmVjZWl2ZV9lcnJvcnMrKzsKKwkJCXBvcnRfcmVzZXQgPSBlaGVhX3RyZWF0X3BvbGxfZXJyb3IocHIsIHJxLCBjcWUsCisJCQkJCQkJICAgJnByb2Nlc3NlZF9ycTIsCisJCQkJCQkJICAgJnByb2Nlc3NlZF9ycTMpOworCQkJaWYgKHBvcnRfcmVzZXQpCisJCQkJYnJlYWs7CisJCX0KKwkJY3FlID0gZWhlYV9wb2xsX3JxMShxcCwgJndxZV9pbmRleCk7CisJfQorCisJZGV2LT5xdW90YSAtPSBwcm9jZXNzZWQ7CisJKmJ1ZGdldCAtPSBwcm9jZXNzZWQ7CisKKwlwci0+cF9zdGF0ZS5laGVhX3BvbGwgKz0gMTsKKwlwci0+cnhfcGFja2V0cyArPSBwcm9jZXNzZWQ7CisKKwllaGVhX3JlZmlsbF9ycTEocHIsIGxhc3Rfd3FlX2luZGV4LCBwcm9jZXNzZWRfcnExKTsKKwllaGVhX3JlZmlsbF9ycTIocHIsIHByb2Nlc3NlZF9ycTIpOworCWVoZWFfcmVmaWxsX3JxMyhwciwgcHJvY2Vzc2VkX3JxMyk7CisKKwlpbnRyZXEgPSAoKHByLT5wX3N0YXRlLmVoZWFfcG9sbCAmIDB4RikgPT0gMHhGKTsKKworCWlmICghY3FlIHx8IGludHJlcSkgeworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCQllaGVhX3Jlc2V0X2NxX2VwKHByLT5yZWN2X2NxKTsKKwkJZWhlYV9yZXNldF9jcV9uMShwci0+cmVjdl9jcSk7CisJCWNxZSA9IGh3X3FlaXRfZ2V0X3ZhbGlkKCZxcC0+aHdfcnF1ZXVlMSk7CisJCWlmICghY3FlIHx8IGludHJlcSkKKwkJCXJldHVybiAwOworCQlpZiAoIW5ldGlmX3J4X3Jlc2NoZWR1bGUoZGV2LCBteV9xdW90YSkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3ZvaWQgZnJlZV9zZW50X3NrYnMoc3RydWN0IGVoZWFfY3FlICpjcWUsIHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpbmRleCwgbWF4X2luZGV4X21hc2ssIGk7CisKKwlpbmRleCA9IEVIRUFfQk1BU0tfR0VUKEVIRUFfV1JfSURfSU5ERVgsIGNxZS0+d3JfaWQpOworCW1heF9pbmRleF9tYXNrID0gcHItPnNxX3NrYmEubGVuIC0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgRUhFQV9CTUFTS19HRVQoRUhFQV9XUl9JRF9SRUZJTEwsIGNxZS0+d3JfaWQpOyBpKyspIHsKKwkJc2tiID0gcHItPnNxX3NrYmEuYXJyW2luZGV4XTsKKwkJaWYgKGxpa2VseShza2IpKSB7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJCQlwci0+c3Ffc2tiYS5hcnJbaW5kZXhdID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWVoZWFfZXJyb3IoInNrYj1OVUxMLCB3cl9pZD0lbFgsIGxvb3A9JWQsIGluZGV4PSVkIiwKKwkJCQkgICBjcWUtPndyX2lkLCBpLCBpbmRleCk7CisJCX0KKwkJaW5kZXgtLTsKKwkJaW5kZXggJj0gbWF4X2luZGV4X21hc2s7CisJfQorfQorCisjZGVmaW5lIE1BWF9TRU5EQ09NUF9RVU9UQSA0MDAKK3ZvaWQgZWhlYV9zZW5kX2lycV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIgPSAoc3RydWN0IGVoZWFfcG9ydF9yZXMqKWRhdGE7CisJc3RydWN0IGVoZWFfY3EgKnNlbmRfY3EgPSBwci0+c2VuZF9jcTsKKwlzdHJ1Y3QgZWhlYV9jcWUgKmNxZTsKKwlpbnQgcXVvdGEgPSBNQVhfU0VORENPTVBfUVVPVEE7CisJaW50IGNxZV9jb3VudGVyID0gMDsKKwlpbnQgc3dxZV9hdiA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRvIHsKKwkJY3FlID0gZWhlYV9wb2xsX2NxKHNlbmRfY3EpOworCQlpZiAoIWNxZSkgeworCQkJZWhlYV9yZXNldF9jcV9lcChzZW5kX2NxKTsKKwkJCWVoZWFfcmVzZXRfY3FfbjEoc2VuZF9jcSk7CisJCQljcWUgPSBlaGVhX3BvbGxfY3Eoc2VuZF9jcSk7CisJCQlpZiAoIWNxZSkKKwkJCQlicmVhazsKKwkJfQorCQljcWVfY291bnRlcisrOworCQlybWIoKTsKKwkJaWYgKGNxZS0+c3RhdHVzICYgRUhFQV9DUUVfU1RBVF9FUlJfTUFTSykgeworCQkJZWhlYV9lcnJvcigiU2VuZCBDb21wbGV0aW9uIEVycm9yOiBSZXNldHRpbmcgcG9ydCIpOworCQkJaWYgKG5ldGlmX21zZ190eF9lcnIocHItPnBvcnQpKQorCQkJCWVoZWFfZHVtcChjcWUsIHNpemVvZigqY3FlKSwgIlNlbmQgQ1FFIik7CisJCQlxdWV1ZV93b3JrKHByLT5wb3J0LT5hZGFwdGVyLT5laGVhX3dxLAorCQkJCSAgICZwci0+cG9ydC0+cmVzZXRfdGFzayk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChuZXRpZl9tc2dfdHhfZG9uZShwci0+cG9ydCkpCisJCQllaGVhX2R1bXAoY3FlLCBzaXplb2YoKmNxZSksICJDUUUiKTsKKworCQlpZiAobGlrZWx5KEVIRUFfQk1BU0tfR0VUKEVIRUFfV1JfSURfVFlQRSwgY3FlLT53cl9pZCkKKwkJCSAgID09IEVIRUFfU1dRRTJfVFlQRSkpCisJCQlmcmVlX3NlbnRfc2ticyhjcWUsIHByKTsKKworCQlzd3FlX2F2ICs9IEVIRUFfQk1BU0tfR0VUKEVIRUFfV1JfSURfUkVGSUxMLCBjcWUtPndyX2lkKTsKKwkJcXVvdGEtLTsKKwl9IHdoaWxlIChxdW90YSA+IDApOworCisJZWhlYV91cGRhdGVfZmVjYShzZW5kX2NxLCBjcWVfY291bnRlcik7CisJYXRvbWljX2FkZChzd3FlX2F2LCAmcHItPnN3cWVfYXZhaWwpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByLT5uZXRpZl9xdWV1ZSwgZmxhZ3MpOworCWlmIChwci0+cXVldWVfc3RvcHBlZCAmJiAoYXRvbWljX3JlYWQoJnByLT5zd3FlX2F2YWlsKQorCQkJCSAgPj0gcHItPnN3cWVfcmVmaWxsX3RoKSkgeworCQluZXRpZl93YWtlX3F1ZXVlKHByLT5wb3J0LT5uZXRkZXYpOworCQlwci0+cXVldWVfc3RvcHBlZCA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByLT5uZXRpZl9xdWV1ZSwgZmxhZ3MpOworCisJaWYgKHVubGlrZWx5KGNxZSkpCisJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnByLT5zZW5kX2NvbXBfdGFzayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlaGVhX3NlbmRfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqcGFyYW0sCisJCQkJCSBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIgPSBwYXJhbTsKKwl0YXNrbGV0X2hpX3NjaGVkdWxlKCZwci0+c2VuZF9jb21wX3Rhc2spOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGVoZWFfcmVjdl9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwYXJhbSwKKwkJCQkJIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBlaGVhX3BvcnRfcmVzICpwciA9IHBhcmFtOworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBwci0+cG9ydDsKKwluZXRpZl9yeF9zY2hlZHVsZShwb3J0LT5uZXRkZXYpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGVoZWFfcXBfYWZmX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKnBhcmFtLAorCQkJCQkgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gcGFyYW07CisJc3RydWN0IGVoZWFfZXFlICplcWU7CisJdTMyIHFwX3Rva2VuOworCisJZXFlID0gZWhlYV9wb2xsX2VxKHBvcnQtPnFwX2VxKTsKKwllaGVhX2RlYnVnKCJlcWU9JXAiLCBlcWUpOworCXdoaWxlIChlcWUpIHsKKwkJZWhlYV9kZWJ1ZygiKmVxZT0lbHgiLCAqKHU2NCopZXFlKTsKKwkJZXFlID0gZWhlYV9wb2xsX2VxKHBvcnQtPnFwX2VxKTsKKwkJcXBfdG9rZW4gPSBFSEVBX0JNQVNLX0dFVChFSEVBX0VRRV9RUF9UT0tFTiwgZXFlLT5lbnRyeSk7CisJCWVoZWFfZGVidWcoIm5leHQgZXFlPSVwIiwgZXFlKTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZWhlYV9wb3J0ICplaGVhX2dldF9wb3J0KHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICAgICAgIGludCBsb2dpY2FsX3BvcnQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3BvcnRzOyBpKyspCisJCWlmIChhZGFwdGVyLT5wb3J0W2ldLT5sb2dpY2FsX3BvcnRfaWQgPT0gbG9naWNhbF9wb3J0KQorCQkJcmV0dXJuIGFkYXB0ZXItPnBvcnRbaV07CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBlaGVhX3NlbnNlX3BvcnRfYXR0cihzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0KQoreworCWludCByZXQ7CisJdTY0IGhyZXQ7CisJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwICpjYjA7CisKKwljYjAgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiMCkgeworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMCIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChwb3J0LT5hZGFwdGVyLT5oYW5kbGUsCisJCQkJICAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLCBIX1BPUlRfQ0IwLAorCQkJCSAgICAgIEVIRUFfQk1BU0tfU0VUKEhfUE9SVF9DQjBfQUxMLCAweEZGRkYpLAorCQkJCSAgICAgIGNiMCk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJLyogTUFDIGFkZHJlc3MgKi8KKwlwb3J0LT5tYWNfYWRkciA9IGNiMC0+cG9ydF9tYWNfYWRkciA8PCAxNjsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigodTgqKSZwb3J0LT5tYWNfYWRkcikpIHsKKwkJcmV0ID0gLUVBRERSTk9UQVZBSUw7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJLyogUG9ydCBzcGVlZCAqLworCXN3aXRjaCAoY2IwLT5wb3J0X3NwZWVkKSB7CisJY2FzZSBIX1NQRUVEXzEwTV9IOgorCQlwb3J0LT5wb3J0X3NwZWVkID0gRUhFQV9TUEVFRF8xME07CisJCXBvcnQtPmZ1bGxfZHVwbGV4ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBIX1NQRUVEXzEwTV9GOgorCQlwb3J0LT5wb3J0X3NwZWVkID0gRUhFQV9TUEVFRF8xME07CisJCXBvcnQtPmZ1bGxfZHVwbGV4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBIX1NQRUVEXzEwME1fSDoKKwkJcG9ydC0+cG9ydF9zcGVlZCA9IEVIRUFfU1BFRURfMTAwTTsKKwkJcG9ydC0+ZnVsbF9kdXBsZXggPSAwOworCQlicmVhazsKKwljYXNlIEhfU1BFRURfMTAwTV9GOgorCQlwb3J0LT5wb3J0X3NwZWVkID0gRUhFQV9TUEVFRF8xMDBNOworCQlwb3J0LT5mdWxsX2R1cGxleCA9IDE7CisJCWJyZWFrOworCWNhc2UgSF9TUEVFRF8xR19GOgorCQlwb3J0LT5wb3J0X3NwZWVkID0gRUhFQV9TUEVFRF8xRzsKKwkJcG9ydC0+ZnVsbF9kdXBsZXggPSAxOworCQlicmVhazsKKwljYXNlIEhfU1BFRURfMTBHX0Y6CisJCXBvcnQtPnBvcnRfc3BlZWQgPSBFSEVBX1NQRUVEXzEwRzsKKwkJcG9ydC0+ZnVsbF9kdXBsZXggPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwb3J0LT5wb3J0X3NwZWVkID0gMDsKKwkJcG9ydC0+ZnVsbF9kdXBsZXggPSAwOworCQlicmVhazsKKwl9CisKKwkvKiBOdW1iZXIgb2YgZGVmYXVsdCBRUHMgKi8KKwlwb3J0LT5udW1fZGVmX3FwcyA9IGNiMC0+bnVtX2RlZmF1bHRfcXBzOworCisJaWYgKCFwb3J0LT5udW1fZGVmX3FwcykgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWlmIChwb3J0LT5udW1fZGVmX3FwcyA+PSBFSEVBX05VTV9UWF9RUCkKKwkJcG9ydC0+bnVtX2FkZF90eF9xcHMgPSAwOworCWVsc2UKKwkJcG9ydC0+bnVtX2FkZF90eF9xcHMgPSBFSEVBX05VTV9UWF9RUCAtIHBvcnQtPm51bV9kZWZfcXBzOworCisJcmV0ID0gMDsKK291dF9mcmVlOgorCWlmIChyZXQgfHwgbmV0aWZfbXNnX3Byb2JlKHBvcnQpKQorCQllaGVhX2R1bXAoY2IwLCBzaXplb2YoKmNiMCksICJlaGVhX3NlbnNlX3BvcnRfYXR0ciIpOworCWtmcmVlKGNiMCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworaW50IGVoZWFfc2V0X3BvcnRzcGVlZChzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0LCB1MzIgcG9ydF9zcGVlZCkKK3sKKwlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjQgKmNiNDsKKwl1NjQgaHJldDsKKwlpbnQgcmV0ID0gMDsKKworCWNiNCA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWlmICghY2I0KSB7CisJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I0Iik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWNiNC0+cG9ydF9zcGVlZCA9IHBvcnRfc3BlZWQ7CisKKwluZXRpZl9jYXJyaWVyX29mZihwb3J0LT5uZXRkZXYpOworCisJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KHBvcnQtPmFkYXB0ZXItPmhhbmRsZSwKKwkJCQkgICAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAorCQkJCSAgICAgICBIX1BPUlRfQ0I0LCBIX1BPUlRfQ0I0X1NQRUVELCBjYjQpOworCWlmIChocmV0ID09IEhfU1VDQ0VTUykgeworCQlwb3J0LT5hdXRvbmVnID0gcG9ydF9zcGVlZCA9PSBFSEVBX1NQRUVEX0FVVE9ORUcgPyAxIDogMDsKKworCQlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChwb3J0LT5hZGFwdGVyLT5oYW5kbGUsCisJCQkJCSAgICAgIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkJICAgICAgSF9QT1JUX0NCNCwgSF9QT1JUX0NCNF9TUEVFRCwKKwkJCQkJICAgICAgY2I0KTsKKwkJaWYgKGhyZXQgPT0gSF9TVUNDRVNTKSB7CisJCQlzd2l0Y2ggKGNiNC0+cG9ydF9zcGVlZCkgeworCQkJY2FzZSBIX1NQRUVEXzEwTV9IOgorCQkJCXBvcnQtPnBvcnRfc3BlZWQgPSBFSEVBX1NQRUVEXzEwTTsKKwkJCQlwb3J0LT5mdWxsX2R1cGxleCA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfU1BFRURfMTBNX0Y6CisJCQkJcG9ydC0+cG9ydF9zcGVlZCA9IEVIRUFfU1BFRURfMTBNOworCQkJCXBvcnQtPmZ1bGxfZHVwbGV4ID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSF9TUEVFRF8xMDBNX0g6CisJCQkJcG9ydC0+cG9ydF9zcGVlZCA9IEVIRUFfU1BFRURfMTAwTTsKKwkJCQlwb3J0LT5mdWxsX2R1cGxleCA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIEhfU1BFRURfMTAwTV9GOgorCQkJCXBvcnQtPnBvcnRfc3BlZWQgPSBFSEVBX1NQRUVEXzEwME07CisJCQkJcG9ydC0+ZnVsbF9kdXBsZXggPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBIX1NQRUVEXzFHX0Y6CisJCQkJcG9ydC0+cG9ydF9zcGVlZCA9IEVIRUFfU1BFRURfMUc7CisJCQkJcG9ydC0+ZnVsbF9kdXBsZXggPSAxOworCQkJCWJyZWFrOworCQkJY2FzZSBIX1NQRUVEXzEwR19GOgorCQkJCXBvcnQtPnBvcnRfc3BlZWQgPSBFSEVBX1NQRUVEXzEwRzsKKwkJCQlwb3J0LT5mdWxsX2R1cGxleCA9IDE7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXBvcnQtPnBvcnRfc3BlZWQgPSAwOworCQkJCXBvcnQtPmZ1bGxfZHVwbGV4ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWVoZWFfZXJyb3IoIkZhaWxlZCBzZW5zaW5nIHBvcnQgc3BlZWQiKTsKKwkJCXJldCA9IC1FSU87CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaHJldCA9PSBIX0FVVEhPUklUWSkgeworCQkJZWhlYV9pbmZvKCJIeXBlcnZpc29yIGRlbmllZCBzZXR0aW5nIHBvcnQgc3BlZWQuIEVpdGhlciIKKwkJCQkgICIgdGhpcyBwYXJ0aXRpb24gaXMgbm90IGF1dGhvcml6ZWQgdG8gc2V0ICIKKwkJCQkgICJwb3J0IHNwZWVkIG9yIGFub3RoZXIgcGFydGl0aW9uIGhhcyBtb2RpZmllZCIKKwkJCQkgICIgcG9ydCBzcGVlZCBmaXJzdC4iKTsKKwkJCXJldCA9IC1FUEVSTTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IC1FSU87CisJCQllaGVhX2Vycm9yKCJGYWlsZWQgc2V0dGluZyBwb3J0IHNwZWVkIik7CisJCX0KKwl9CisJbmV0aWZfY2Fycmllcl9vbihwb3J0LT5uZXRkZXYpOworCWtmcmVlKGNiNCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZWhlYV9wYXJzZV9lcWUoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciwgdTY0IGVxZSkKK3sKKwlpbnQgcmV0OworCXU4IGVjOworCXU4IHBvcnRudW07CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydDsKKworCWVjID0gRUhFQV9CTUFTS19HRVQoTkVRRV9FVkVOVF9DT0RFLCBlcWUpOworCXBvcnRudW0gPSBFSEVBX0JNQVNLX0dFVChORVFFX1BPUlROVU0sIGVxZSk7CisJcG9ydCA9IGVoZWFfZ2V0X3BvcnQoYWRhcHRlciwgcG9ydG51bSk7CisKKwlzd2l0Y2ggKGVjKSB7CisJY2FzZSBFSEVBX0VDX1BPUlRTVEFURV9DSEc6CS8qIHBvcnQgc3RhdGUgY2hhbmdlICovCisKKwkJaWYgKCFwb3J0KSB7CisJCQllaGVhX2Vycm9yKCJ1bmtub3duIHBvcnRudW0gJXgiLCBwb3J0bnVtKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKEVIRUFfQk1BU0tfR0VUKE5FUUVfUE9SVF9VUCwgZXFlKSkgeworCQkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHBvcnQtPm5ldGRldikpIHsKKwkJCQlyZXQgPSBlaGVhX3NlbnNlX3BvcnRfYXR0cigKKwkJCQkJYWRhcHRlci0+cG9ydFtwb3J0bnVtXSk7CisJCQkJaWYgKHJldCkgeworCQkJCQllaGVhX2Vycm9yKCJmYWlsZWQgcmVzZW5zaW5nIHBvcnQgIgorCQkJCQkJICAgImF0dHJpYnV0ZXMiKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKG5ldGlmX21zZ19saW5rKHBvcnQpKQorCQkJCQllaGVhX2luZm8oIiVzOiBMb2dpY2FsIHBvcnQgdXA6ICVkTWJwcyAiCisJCQkJCQkgICIlcyBEdXBsZXgiLAorCQkJCQkJICBwb3J0LT5uZXRkZXYtPm5hbWUsCisJCQkJCQkgIHBvcnQtPnBvcnRfc3BlZWQsCisJCQkJCQkgIHBvcnQtPmZ1bGxfZHVwbGV4ID09CisJCQkJCQkgIDEgPyAiRnVsbCIgOiAiSGFsZiIpOworCisJCQkJbmV0aWZfY2Fycmllcl9vbihwb3J0LT5uZXRkZXYpOworCQkJCW5ldGlmX3dha2VfcXVldWUocG9ydC0+bmV0ZGV2KTsKKwkJCX0KKwkJfSBlbHNlCisJCQlpZiAobmV0aWZfY2Fycmllcl9vayhwb3J0LT5uZXRkZXYpKSB7CisJCQkJaWYgKG5ldGlmX21zZ19saW5rKHBvcnQpKQorCQkJCQllaGVhX2luZm8oIiVzOiBMb2dpY2FsIHBvcnQgZG93biIsCisJCQkJCQkgIHBvcnQtPm5ldGRldi0+bmFtZSk7CisJCQkJbmV0aWZfY2Fycmllcl9vZmYocG9ydC0+bmV0ZGV2KTsKKwkJCQluZXRpZl9zdG9wX3F1ZXVlKHBvcnQtPm5ldGRldik7CisJCQl9CisKKwkJaWYgKEVIRUFfQk1BU0tfR0VUKE5FUUVfRVhUU1dJVENIX1BPUlRfVVAsIGVxZSkpIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhwb3J0KSkKKwkJCQllaGVhX2luZm8oIiVzOiBQaHlzaWNhbCBwb3J0IHVwIiwKKwkJCQkJICBwb3J0LT5uZXRkZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJaWYgKG5ldGlmX21zZ19saW5rKHBvcnQpKQorCQkJCWVoZWFfaW5mbygiJXM6IFBoeXNpY2FsIHBvcnQgZG93biIsCisJCQkJCSAgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKwkJfQorCisJCWlmIChFSEVBX0JNQVNLX0dFVChORVFFX0VYVFNXSVRDSF9QUklNQVJZLCBlcWUpKQorCQkJZWhlYV9pbmZvKCJFeHRlcm5hbCBzd2l0Y2ggcG9ydCBpcyBwcmltYXJ5IHBvcnQiKTsKKwkJZWxzZQorCQkJZWhlYV9pbmZvKCJFeHRlcm5hbCBzd2l0Y2ggcG9ydCBpcyBiYWNrdXAgcG9ydCIpOworCisJCWJyZWFrOworCWNhc2UgRUhFQV9FQ19BREFQVEVSX01BTEZVTkM6CisJCWVoZWFfZXJyb3IoIkFkYXB0ZXIgbWFsZnVuY3Rpb24iKTsKKwkJYnJlYWs7CisJY2FzZSBFSEVBX0VDX1BPUlRfTUFMRlVOQzoKKwkJZWhlYV9pbmZvKCJQb3J0IG1hbGZ1bmN0aW9uOiBEZXZpY2U6ICVzIiwgcG9ydC0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0aWZfY2Fycmllcl9vZmYocG9ydC0+bmV0ZGV2KTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShwb3J0LT5uZXRkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllaGVhX2Vycm9yKCJ1bmtub3duIGV2ZW50IGNvZGUgJXgiLCBlYyk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgZWhlYV9uZXFfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgZWhlYV9hZGFwdGVyKilkYXRhOworCXN0cnVjdCBlaGVhX2VxZSAqZXFlOworCXU2NCBldmVudF9tYXNrOworCisJZXFlID0gZWhlYV9wb2xsX2VxKGFkYXB0ZXItPm5lcSk7CisJZWhlYV9kZWJ1ZygiZXFlPSVwIiwgZXFlKTsKKworCXdoaWxlIChlcWUpIHsKKwkJZWhlYV9kZWJ1ZygiKmVxZT0lbHgiLCBlcWUtPmVudHJ5KTsKKwkJZWhlYV9wYXJzZV9lcWUoYWRhcHRlciwgZXFlLT5lbnRyeSk7CisJCWVxZSA9IGVoZWFfcG9sbF9lcShhZGFwdGVyLT5uZXEpOworCQllaGVhX2RlYnVnKCJuZXh0IGVxZT0lcCIsIGVxZSk7CisJfQorCisJZXZlbnRfbWFzayA9IEVIRUFfQk1BU0tfU0VUKE5FTFJfUE9SVFNUQVRFX0NIRywgMSkKKwkJICAgfCBFSEVBX0JNQVNLX1NFVChORUxSX0FEQVBURVJfTUFMRlVOQywgMSkKKwkJICAgfCBFSEVBX0JNQVNLX1NFVChORUxSX1BPUlRfTUFMRlVOQywgMSk7CisKKwllaGVhX2hfcmVzZXRfZXZlbnRzKGFkYXB0ZXItPmhhbmRsZSwKKwkJCSAgICBhZGFwdGVyLT5uZXEtPmZ3X2hhbmRsZSwgZXZlbnRfbWFzayk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBlaGVhX2ludGVycnVwdF9uZXEoaW50IGlycSwgdm9pZCAqcGFyYW0sCisJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IHBhcmFtOworCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmFkYXB0ZXItPm5lcV90YXNrbGV0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKworc3RhdGljIGludCBlaGVhX2ZpbGxfcG9ydF9yZXMoc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByKQoreworCWludCByZXQ7CisJc3RydWN0IGVoZWFfcXBfaW5pdF9hdHRyICppbml0X2F0dHIgPSAmcHItPnFwLT5pbml0X2F0dHI7CisKKwlyZXQgPSBlaGVhX2luaXRfZmlsbF9ycTEocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMQorCQkJCSAgICAgLSBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIKKwkJCQkgICAgIC0gaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEzIC0gMSk7CisKKwlyZXQgfD0gZWhlYV9yZWZpbGxfcnEyKHByLCBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTIgLSAxKTsKKworCXJldCB8PSBlaGVhX3JlZmlsbF9ycTMocHIsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMyAtIDEpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX3JlZ19pbnRlcnJ1cHRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByOworCWludCBpLCByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHM7IGkrKykgeworCQlwciA9ICZwb3J0LT5wb3J0X3Jlc1tpXTsKKwkJc25wcmludGYocHItPmludF9yZWN2X25hbWUsIEVIRUFfSVJRX05BTUVfU0laRSAtIDEKKwkJCSAsICIlcy1yZWN2JWQiLCBkZXYtPm5hbWUsIGkpOworCQlyZXQgPSBpYm1lYnVzX3JlcXVlc3RfaXJxKE5VTEwsIHByLT5yZWN2X2VxLT5hdHRyLmlzdDEsCisJCQkJCSAgZWhlYV9yZWN2X2lycV9oYW5kbGVyLAorCQkJCQkgIFNBX0lOVEVSUlVQVCwgcHItPmludF9yZWN2X25hbWUsIHByKTsKKwkJaWYgKHJldCkgeworCQkJZWhlYV9lcnJvcigiZmFpbGVkIHJlZ2lzdGVyaW5nIGlycSBmb3IgZWhlYV9yZWN2X2ludDoiCisJCQkJICAgInBvcnRfcmVzX25yOiVkLCBpc3Q9JVgiLCBpLAorCQkJCSAgIHByLT5yZWN2X2VxLT5hdHRyLmlzdDEpOworCQkJZ290byBvdXRfZnJlZV9zZXE7CisJCX0KKwkJaWYgKG5ldGlmX21zZ19pZnVwKHBvcnQpKQorCQkJZWhlYV9pbmZvKCJpcnFfaGFuZGxlIDB4JVggZm9yIGZ1bmN0IGVoZWFfcmVjdl9pbnQgJWQgIgorCQkJCSAgInJlZ2lzdGVyZWQiLCBwci0+cmVjdl9lcS0+YXR0ci5pc3QxLCBpKTsKKwl9CisKKwlzbnByaW50Zihwb3J0LT5pbnRfYWZmX25hbWUsIEVIRUFfSVJRX05BTUVfU0laRSAtIDEsICIlcy1hZmYiLAorCQkgZGV2LT5uYW1lKTsKKworCXJldCA9IGlibWVidXNfcmVxdWVzdF9pcnEoTlVMTCwgcG9ydC0+cXBfZXEtPmF0dHIuaXN0MSwKKwkJCQkgIGVoZWFfcXBfYWZmX2lycV9oYW5kbGVyLAorCQkJCSAgU0FfSU5URVJSVVBULCBwb3J0LT5pbnRfYWZmX25hbWUsIHBvcnQpOworCWlmIChyZXQpIHsKKwkJZWhlYV9lcnJvcigiZmFpbGVkIHJlZ2lzdGVyaW5nIGlycSBmb3IgcXBfYWZmX2lycV9oYW5kbGVyOiIKKwkJCSAgICJpc3Q9JVgiLCBwb3J0LT5xcF9lcS0+YXR0ci5pc3QxKTsKKwkJZ290byBvdXRfZnJlZV9xcGVxOworCX0KKworCWlmIChuZXRpZl9tc2dfaWZ1cChwb3J0KSkKKwkJZWhlYV9pbmZvKCJpcnFfaGFuZGxlIDB4JVggZm9yIGZ1bmN0aW9uIHFwX2FmZl9pcnFfaGFuZGxlciAiCisJCQkgICJyZWdpc3RlcmVkIiwgcG9ydC0+cXBfZXEtPmF0dHIuaXN0MSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsgaSsrKSB7CisJCXByID0gJnBvcnQtPnBvcnRfcmVzW2ldOworCQlzbnByaW50Zihwci0+aW50X3NlbmRfbmFtZSwgRUhFQV9JUlFfTkFNRV9TSVpFIC0gMSwKKwkJCSAiJXMtc2VuZCVkIiwgZGV2LT5uYW1lLCBpKTsKKwkJcmV0ID0gaWJtZWJ1c19yZXF1ZXN0X2lycShOVUxMLCBwci0+c2VuZF9lcS0+YXR0ci5pc3QxLAorCQkJCQkgIGVoZWFfc2VuZF9pcnFfaGFuZGxlciwKKwkJCQkJICBTQV9JTlRFUlJVUFQsIHByLT5pbnRfc2VuZF9uYW1lLAorCQkJCQkgIHByKTsKKwkJaWYgKHJldCkgeworCQkJZWhlYV9lcnJvcigiZmFpbGVkIHJlZ2lzdGVyaW5nIGlycSBmb3IgZWhlYV9zZW5kICIKKwkJCQkgICAicG9ydF9yZXNfbnI6JWQsIGlzdD0lWCIsIGksCisJCQkJICAgcHItPnNlbmRfZXEtPmF0dHIuaXN0MSk7CisJCQlnb3RvIG91dF9mcmVlX3JlcTsKKwkJfQorCQlpZiAobmV0aWZfbXNnX2lmdXAocG9ydCkpCisJCQllaGVhX2luZm8oImlycV9oYW5kbGUgMHglWCBmb3IgZnVuY3Rpb24gZWhlYV9zZW5kX2ludCAiCisJCQkJICAiJWQgcmVnaXN0ZXJlZCIsIHByLT5zZW5kX2VxLT5hdHRyLmlzdDEsIGkpOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworCitvdXRfZnJlZV9yZXE6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXUzMiBpc3QgPSBwb3J0LT5wb3J0X3Jlc1tpXS5zZW5kX2VxLT5hdHRyLmlzdDE7CisJCWlibWVidXNfZnJlZV9pcnEoTlVMTCwgaXN0LCAmcG9ydC0+cG9ydF9yZXNbaV0pOworCX0KK291dF9mcmVlX3FwZXE6CisJaWJtZWJ1c19mcmVlX2lycShOVUxMLCBwb3J0LT5xcF9lcS0+YXR0ci5pc3QxLCBwb3J0KTsKKwlpID0gcG9ydC0+bnVtX2RlZl9xcHM7CitvdXRfZnJlZV9zZXE6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXUzMiBpc3QgPSBwb3J0LT5wb3J0X3Jlc1tpXS5yZWN2X2VxLT5hdHRyLmlzdDE7CisJCWlibWVidXNfZnJlZV9pcnEoTlVMTCwgaXN0LCAmcG9ydC0+cG9ydF9yZXNbaV0pOworCX0KKwlnb3RvIG91dDsKK30KKworc3RhdGljIHZvaWQgZWhlYV9mcmVlX2ludGVycnVwdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHI7CisJaW50IGk7CisKKwkvKiBzZW5kICovCisJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzICsgcG9ydC0+bnVtX2FkZF90eF9xcHM7IGkrKykgeworCQlwciA9ICZwb3J0LT5wb3J0X3Jlc1tpXTsKKwkJaWJtZWJ1c19mcmVlX2lycShOVUxMLCBwci0+c2VuZF9lcS0+YXR0ci5pc3QxLCBwcik7CisJCWlmIChuZXRpZl9tc2dfaW50cihwb3J0KSkKKwkJCWVoZWFfaW5mbygiZnJlZSBzZW5kIGlycSBmb3IgcmVzICVkIHdpdGggaGFuZGxlIDB4JVgiLAorCQkJCSAgaSwgcHItPnNlbmRfZXEtPmF0dHIuaXN0MSk7CisJfQorCisJLyogcmVjZWl2ZSAqLworCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5udW1fZGVmX3FwczsgaSsrKSB7CisJCXByID0gJnBvcnQtPnBvcnRfcmVzW2ldOworCQlpYm1lYnVzX2ZyZWVfaXJxKE5VTEwsIHByLT5yZWN2X2VxLT5hdHRyLmlzdDEsIHByKTsKKwkJaWYgKG5ldGlmX21zZ19pbnRyKHBvcnQpKQorCQkJZWhlYV9pbmZvKCJmcmVlIHJlY3YgaXJxIGZvciByZXMgJWQgd2l0aCBoYW5kbGUgMHglWCIsCisJCQkJICBpLCBwci0+cmVjdl9lcS0+YXR0ci5pc3QxKTsKKwl9CisKKwkvKiBhc3NvY2lhdGVkIGV2ZW50cyAqLworCWlibWVidXNfZnJlZV9pcnEoTlVMTCwgcG9ydC0+cXBfZXEtPmF0dHIuaXN0MSwgcG9ydCk7CisJaWYgKG5ldGlmX21zZ19pbnRyKHBvcnQpKQorCQllaGVhX2luZm8oImFzc29jaWF0ZWQgZXZlbnQgaW50ZXJydXB0IGZvciBoYW5kbGUgMHglWCBmcmVlZCIsCisJCQkgIHBvcnQtPnFwX2VxLT5hdHRyLmlzdDEpOworfQorCitzdGF0aWMgaW50IGVoZWFfY29uZmlndXJlX3BvcnQoc3RydWN0IGVoZWFfcG9ydCAqcG9ydCkKK3sKKwlpbnQgcmV0LCBpOworCXU2NCBocmV0LCBtYXNrOworCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiMCAqY2IwOworCisJcmV0ID0gLUVOT01FTTsKKwljYjAgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiMCkKKwkJZ290byBvdXQ7CisKKwljYjAtPnBvcnRfcmMgPSBFSEVBX0JNQVNLX1NFVChQWExZX1JDX1ZBTElELCAxKQorCQkgICAgIHwgRUhFQV9CTUFTS19TRVQoUFhMWV9SQ19JUF9DSEtTVU0sIDEpCisJCSAgICAgfCBFSEVBX0JNQVNLX1NFVChQWExZX1JDX1RDUF9VRFBfQ0hLU1VNLCAxKQorCQkgICAgIHwgRUhFQV9CTUFTS19TRVQoUFhMWV9SQ19WTEFOX1hUUkFDVCwgMSkKKwkJICAgICB8IEVIRUFfQk1BU0tfU0VUKFBYTFlfUkNfVkxBTl9UQUdfRklMVEVSLAorCQkJCSAgICAgIFBYTFlfUkNfVkxBTl9GSUxURVIpCisJCSAgICAgfCBFSEVBX0JNQVNLX1NFVChQWExZX1JDX0pVTUJPX0ZSQU1FLCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5udW1fZGVmX3FwczsgaSsrKQorCQljYjAtPmRlZmF1bHRfcXBuX2FycltpXSA9IHBvcnQtPnBvcnRfcmVzW2ldLnFwLT5pbml0X2F0dHIucXBfbnI7CisKKwlpZiAobmV0aWZfbXNnX2lmdXAocG9ydCkpCisJCWVoZWFfZHVtcChjYjAsIHNpemVvZigqY2IwKSwgImVoZWFfY29uZmlndXJlX3BvcnQiKTsKKworCW1hc2sgPSBFSEVBX0JNQVNLX1NFVChIX1BPUlRfQ0IwX1BSQywgMSkKKwkgICAgIHwgRUhFQV9CTUFTS19TRVQoSF9QT1JUX0NCMF9ERUZRUE5BUlJBWSwgMSk7CisKKwlocmV0ID0gZWhlYV9oX21vZGlmeV9laGVhX3BvcnQocG9ydC0+YWRhcHRlci0+aGFuZGxlLAorCQkJCSAgICAgICBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJICAgICAgIEhfUE9SVF9DQjAsIG1hc2ssIGNiMCk7CisJcmV0ID0gLUVJTzsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlyZXQgPSAwOworCitvdXRfZnJlZToKKwlrZnJlZShjYjApOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9nZW5fc21ycyhzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIpCit7CisJdTY0IGhyZXQ7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IHByLT5wb3J0LT5hZGFwdGVyOworCisJaHJldCA9IGVoZWFfaF9yZWdpc3Rlcl9zbXIoYWRhcHRlci0+aGFuZGxlLCBhZGFwdGVyLT5tci5oYW5kbGUsCisJCQkJICAgYWRhcHRlci0+bXIudmFkZHIsIEVIRUFfTVJfQUNDX0NUUkwsCisJCQkJICAgYWRhcHRlci0+cGQsICZwci0+c2VuZF9tcik7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQorCQlnb3RvIG91dDsKKworCWhyZXQgPSBlaGVhX2hfcmVnaXN0ZXJfc21yKGFkYXB0ZXItPmhhbmRsZSwgYWRhcHRlci0+bXIuaGFuZGxlLAorCQkJCSAgIGFkYXB0ZXItPm1yLnZhZGRyLCBFSEVBX01SX0FDQ19DVFJMLAorCQkJCSAgIGFkYXB0ZXItPnBkLCAmcHItPnJlY3ZfbXIpOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKKwkJZ290byBvdXRfZnJlZXJlczsKKworCXJldHVybiAwOworCitvdXRfZnJlZXJlczoKKwlocmV0ID0gZWhlYV9oX2ZyZWVfcmVzb3VyY2UoYWRhcHRlci0+aGFuZGxlLCBwci0+c2VuZF9tci5oYW5kbGUpOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKKwkJZWhlYV9lcnJvcigiZmFpbGVkIGZyZWVpbmcgU01SIik7CitvdXQ6CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9yZW1fc21ycyhzdHJ1Y3QgZWhlYV9wb3J0X3JlcyAqcHIpCit7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IHByLT5wb3J0LT5hZGFwdGVyOworCWludCByZXQgPSAwOworCXU2NCBocmV0OworCisJaHJldCA9IGVoZWFfaF9mcmVlX3Jlc291cmNlKGFkYXB0ZXItPmhhbmRsZSwgcHItPnNlbmRfbXIuaGFuZGxlKTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZWhlYV9lcnJvcigiZmFpbGVkIGZyZWVpbmcgc2VuZCBTTVIgZm9yIHByPSVwIiwgcHIpOworCX0KKworCWhyZXQgPSBlaGVhX2hfZnJlZV9yZXNvdXJjZShhZGFwdGVyLT5oYW5kbGUsIHByLT5yZWN2X21yLmhhbmRsZSk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCXJldCA9IC1FSU87CisJCWVoZWFfZXJyb3IoImZhaWxlZCBmcmVlaW5nIHJlY3YgU01SIGZvciBwcj0lcCIsIHByKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGVoZWFfaW5pdF9xX3NrYmEoc3RydWN0IGVoZWFfcV9za2JfYXJyICpxX3NrYmEsIGludCBtYXhfcV9lbnRyaWVzKQoreworCWludCBhcnJfc2l6ZSA9IHNpemVvZih2b2lkKikgKiBtYXhfcV9lbnRyaWVzOworCisJcV9za2JhLT5hcnIgPSB2bWFsbG9jKGFycl9zaXplKTsKKwlpZiAoIXFfc2tiYS0+YXJyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChxX3NrYmEtPmFyciwgMCwgYXJyX3NpemUpOworCisJcV9za2JhLT5sZW4gPSBtYXhfcV9lbnRyaWVzOworCXFfc2tiYS0+aW5kZXggPSAwOworCXFfc2tiYS0+b3Nfc2ticyA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlaGVhX2luaXRfcG9ydF9yZXMoc3RydWN0IGVoZWFfcG9ydCAqcG9ydCwgc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByLAorCQkJICAgICAgc3RydWN0IHBvcnRfcmVzX2NmZyAqcHJfY2ZnLCBpbnQgcXVldWVfdG9rZW4pCit7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJZW51bSBlaGVhX2VxX3R5cGUgZXFfdHlwZSA9IEVIRUFfRVE7CisJc3RydWN0IGVoZWFfcXBfaW5pdF9hdHRyICppbml0X2F0dHIgPSBOVUxMOworCWludCByZXQgPSAtRUlPOworCisJbWVtc2V0KHByLCAwLCBzaXplb2Yoc3RydWN0IGVoZWFfcG9ydF9yZXMpKTsKKworCXByLT5wb3J0ID0gcG9ydDsKKwlzcGluX2xvY2tfaW5pdCgmcHItPnNlbmRfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnByLT5yZWN2X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZwci0+eG1pdF9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcHItPm5ldGlmX3F1ZXVlKTsKKworCXByLT5yZWN2X2VxID0gZWhlYV9jcmVhdGVfZXEoYWRhcHRlciwgZXFfdHlwZSwgRUhFQV9NQVhfRU5UUklFU19FUSwgMCk7CisJaWYgKCFwci0+cmVjdl9lcSkgeworCQllaGVhX2Vycm9yKCJjcmVhdGVfZXEgZmFpbGVkIChyZWN2X2VxKSIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXByLT5zZW5kX2VxID0gZWhlYV9jcmVhdGVfZXEoYWRhcHRlciwgZXFfdHlwZSwgRUhFQV9NQVhfRU5UUklFU19FUSwgMCk7CisJaWYgKCFwci0+c2VuZF9lcSkgeworCQllaGVhX2Vycm9yKCJjcmVhdGVfZXEgZmFpbGVkIChzZW5kX2VxKSIpOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCXByLT5yZWN2X2NxID0gZWhlYV9jcmVhdGVfY3EoYWRhcHRlciwgcHJfY2ZnLT5tYXhfZW50cmllc19yY3EsCisJCQkJICAgICBwci0+cmVjdl9lcS0+ZndfaGFuZGxlLAorCQkJCSAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkKTsKKwlpZiAoIXByLT5yZWN2X2NxKSB7CisJCWVoZWFfZXJyb3IoImNyZWF0ZV9jcSBmYWlsZWQgKGNxX3JlY3YpIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcHItPnNlbmRfY3EgPSBlaGVhX2NyZWF0ZV9jcShhZGFwdGVyLCBwcl9jZmctPm1heF9lbnRyaWVzX3NjcSwKKwkJCQkgICAgIHByLT5zZW5kX2VxLT5md19oYW5kbGUsCisJCQkJICAgICBwb3J0LT5sb2dpY2FsX3BvcnRfaWQpOworCWlmICghcHItPnNlbmRfY3EpIHsKKwkJZWhlYV9lcnJvcigiY3JlYXRlX2NxIGZhaWxlZCAoY3Ffc2VuZCkiKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlpZiAobmV0aWZfbXNnX2lmdXAocG9ydCkpCisJCWVoZWFfaW5mbygiU2VuZCBDUTogYWN0X25yX2NxZXM9JWQsIFJlY3YgQ1E6IGFjdF9ucl9jcWVzPSVkIiwKKwkJCSAgcHItPnNlbmRfY3EtPmF0dHIuYWN0X25yX29mX2NxZXMsCisJCQkgIHByLT5yZWN2X2NxLT5hdHRyLmFjdF9ucl9vZl9jcWVzKTsKKworCWluaXRfYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKCppbml0X2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluaXRfYXR0cikgeworCQlyZXQgPSAtRU5PTUVNOworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGVoZWFfcXBfaW5pdF9hdHRyIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJaW5pdF9hdHRyLT5sb3dfbGF0X3JxMSA9IDE7CisJaW5pdF9hdHRyLT5zaWduYWxpbmd0eXBlID0gMTsJLyogZ2VuZXJhdGUgQ1FFIGlmIHNwZWNpZmllZCBpbiBXUUUgKi8KKwlpbml0X2F0dHItPnJxX2NvdW50ID0gMzsKKwlpbml0X2F0dHItPnFwX3Rva2VuID0gcXVldWVfdG9rZW47CisJaW5pdF9hdHRyLT5tYXhfbnJfc2VuZF93cWVzID0gcHJfY2ZnLT5tYXhfZW50cmllc19zcTsKKwlpbml0X2F0dHItPm1heF9ucl9yd3Flc19ycTEgPSBwcl9jZmctPm1heF9lbnRyaWVzX3JxMTsKKwlpbml0X2F0dHItPm1heF9ucl9yd3Flc19ycTIgPSBwcl9jZmctPm1heF9lbnRyaWVzX3JxMjsKKwlpbml0X2F0dHItPm1heF9ucl9yd3Flc19ycTMgPSBwcl9jZmctPm1heF9lbnRyaWVzX3JxMzsKKwlpbml0X2F0dHItPndxZV9zaXplX2VuY19zcSA9IEVIRUFfU0dfU1E7CisJaW5pdF9hdHRyLT53cWVfc2l6ZV9lbmNfcnExID0gRUhFQV9TR19SUTE7CisJaW5pdF9hdHRyLT53cWVfc2l6ZV9lbmNfcnEyID0gRUhFQV9TR19SUTI7CisJaW5pdF9hdHRyLT53cWVfc2l6ZV9lbmNfcnEzID0gRUhFQV9TR19SUTM7CisJaW5pdF9hdHRyLT5ycTJfdGhyZXNob2xkID0gRUhFQV9SUTJfVEhSRVNIT0xEOworCWluaXRfYXR0ci0+cnEzX3RocmVzaG9sZCA9IEVIRUFfUlEzX1RIUkVTSE9MRDsKKwlpbml0X2F0dHItPnBvcnRfbnIgPSBwb3J0LT5sb2dpY2FsX3BvcnRfaWQ7CisJaW5pdF9hdHRyLT5zZW5kX2NxX2hhbmRsZSA9IHByLT5zZW5kX2NxLT5md19oYW5kbGU7CisJaW5pdF9hdHRyLT5yZWN2X2NxX2hhbmRsZSA9IHByLT5yZWN2X2NxLT5md19oYW5kbGU7CisJaW5pdF9hdHRyLT5hZmZfZXFfaGFuZGxlID0gcG9ydC0+cXBfZXEtPmZ3X2hhbmRsZTsKKworCXByLT5xcCA9IGVoZWFfY3JlYXRlX3FwKGFkYXB0ZXIsIGFkYXB0ZXItPnBkLCBpbml0X2F0dHIpOworCWlmICghcHItPnFwKSB7CisJCWVoZWFfZXJyb3IoImNyZWF0ZV9xcCBmYWlsZWQiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlpZiAobmV0aWZfbXNnX2lmdXAocG9ydCkpCisJCWVoZWFfaW5mbygiUVA6IHFwX25yPSVkXG4gYWN0X25yX3NuZF93cWU9JWRcbiBucl9yd3FlX3JxMT0lZFxuICIKKwkJCSAgIm5yX3J3cWVfcnEyPSVkXG4gbnJfcndxZV9ycTM9JWQiLCBpbml0X2F0dHItPnFwX25yLAorCQkJICBpbml0X2F0dHItPmFjdF9ucl9zZW5kX3dxZXMsCisJCQkgIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMSwKKwkJCSAgaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnEyLAorCQkJICBpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMpOworCisJcmV0ID0gZWhlYV9pbml0X3Ffc2tiYSgmcHItPnNxX3NrYmEsIGluaXRfYXR0ci0+YWN0X25yX3NlbmRfd3FlcyArIDEpOworCXJldCB8PSBlaGVhX2luaXRfcV9za2JhKCZwci0+cnExX3NrYmEsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMSArIDEpOworCXJldCB8PSBlaGVhX2luaXRfcV9za2JhKCZwci0+cnEyX3NrYmEsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiArIDEpOworCXJldCB8PSBlaGVhX2luaXRfcV9za2JhKCZwci0+cnEzX3NrYmEsIGluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMyArIDEpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlwci0+c3dxZV9yZWZpbGxfdGggPSBpbml0X2F0dHItPmFjdF9ucl9zZW5kX3dxZXMgLyAxMDsKKwlpZiAoZWhlYV9nZW5fc21ycyhwcikgIT0gMCkgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9mcmVlOworCX0KKwl0YXNrbGV0X2luaXQoJnByLT5zZW5kX2NvbXBfdGFzaywgZWhlYV9zZW5kX2lycV90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKXByKTsKKwlhdG9taWNfc2V0KCZwci0+c3dxZV9hdmFpbCwgaW5pdF9hdHRyLT5hY3RfbnJfc2VuZF93cWVzIC0gMSk7CisKKwlrZnJlZShpbml0X2F0dHIpOworCXJldCA9IDA7CisJZ290byBvdXQ7CisKK291dF9mcmVlOgorCWtmcmVlKGluaXRfYXR0cik7CisJdmZyZWUocHItPnNxX3NrYmEuYXJyKTsKKwl2ZnJlZShwci0+cnExX3NrYmEuYXJyKTsKKwl2ZnJlZShwci0+cnEyX3NrYmEuYXJyKTsKKwl2ZnJlZShwci0+cnEzX3NrYmEuYXJyKTsKKwllaGVhX2Rlc3Ryb3lfcXAocHItPnFwKTsKKwllaGVhX2Rlc3Ryb3lfY3EocHItPnNlbmRfY3EpOworCWVoZWFfZGVzdHJveV9jcShwci0+cmVjdl9jcSk7CisJZWhlYV9kZXN0cm95X2VxKHByLT5zZW5kX2VxKTsKKwllaGVhX2Rlc3Ryb3lfZXEocHItPnJlY3ZfZXEpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9jbGVhbl9wb3J0cmVzKHN0cnVjdCBlaGVhX3BvcnQgKnBvcnQsIHN0cnVjdCBlaGVhX3BvcnRfcmVzICpwcikKK3sKKwlpbnQgcmV0LCBpOworCisJcmV0ID0gZWhlYV9kZXN0cm95X3FwKHByLT5xcCk7CisKKwlpZiAoIXJldCkgeworCQllaGVhX2Rlc3Ryb3lfY3EocHItPnNlbmRfY3EpOworCQllaGVhX2Rlc3Ryb3lfY3EocHItPnJlY3ZfY3EpOworCQllaGVhX2Rlc3Ryb3lfZXEocHItPnNlbmRfZXEpOworCQllaGVhX2Rlc3Ryb3lfZXEocHItPnJlY3ZfZXEpOworCisJCWZvciAoaSA9IDA7IGkgPCBwci0+cnExX3NrYmEubGVuOyBpKyspCisJCQlpZiAocHItPnJxMV9za2JhLmFycltpXSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHByLT5ycTFfc2tiYS5hcnJbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBwci0+cnEyX3NrYmEubGVuOyBpKyspCisJCQlpZiAocHItPnJxMl9za2JhLmFycltpXSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHByLT5ycTJfc2tiYS5hcnJbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBwci0+cnEzX3NrYmEubGVuOyBpKyspCisJCQlpZiAocHItPnJxM19za2JhLmFycltpXSkKKwkJCQlkZXZfa2ZyZWVfc2tiKHByLT5ycTNfc2tiYS5hcnJbaV0pOworCisJCWZvciAoaSA9IDA7IGkgPCBwci0+c3Ffc2tiYS5sZW47IGkrKykKKwkJCWlmIChwci0+c3Ffc2tiYS5hcnJbaV0pCisJCQkJZGV2X2tmcmVlX3NrYihwci0+c3Ffc2tiYS5hcnJbaV0pOworCisJCXZmcmVlKHByLT5ycTFfc2tiYS5hcnIpOworCQl2ZnJlZShwci0+cnEyX3NrYmEuYXJyKTsKKwkJdmZyZWUocHItPnJxM19za2JhLmFycik7CisJCXZmcmVlKHByLT5zcV9za2JhLmFycik7CisJCXJldCA9IGVoZWFfcmVtX3NtcnMocHIpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKgorICogVGhlIHdyaXRlXyogZnVuY3Rpb25zIHN0b3JlIGluZm9ybWF0aW9uIGluIHN3cWUgd2hpY2ggaXMgdXNlZCBieQorICogdGhlIGhhcmR3YXJlIHRvIGNhbGN1bGF0ZSB0aGUgaXAvdGNwL3VkcCBjaGVja3N1bQorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV9pcF9zdGFydF9lbmQoc3RydWN0IGVoZWFfc3dxZSAqc3dxZSwKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN3cWUtPmlwX3N0YXJ0ID0gKHU4KSgoKHU2NClza2ItPm5oLmlwaCkgLSAoKHU2NClza2ItPmRhdGEpKTsKKwlzd3FlLT5pcF9lbmQgPSAodTgpKHN3cWUtPmlwX3N0YXJ0ICsgc2tiLT5uaC5pcGgtPmlobCAqIDQgLSAxKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3RjcF9vZmZzZXRfZW5kKHN0cnVjdCBlaGVhX3N3cWUgKnN3cWUsCisJCQkJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3dxZS0+dGNwX29mZnNldCA9CisJCSh1OCkoc3dxZS0+aXBfZW5kICsgMSArIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGNoZWNrKSk7CisKKwlzd3FlLT50Y3BfZW5kID0gKHUxNilza2ItPmxlbiAtIDE7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZV91ZHBfb2Zmc2V0X2VuZChzdHJ1Y3QgZWhlYV9zd3FlICpzd3FlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN3cWUtPnRjcF9vZmZzZXQgPQorCQkodTgpKHN3cWUtPmlwX2VuZCArIDEgKyBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBjaGVjaykpOworCisJc3dxZS0+dGNwX2VuZCA9ICh1MTYpc2tiLT5sZW4gLSAxOworfQorCisKK3N0YXRpYyB2b2lkIHdyaXRlX3N3cWUyX1RTTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgIHN0cnVjdCBlaGVhX3N3cWUgKnN3cWUsIHUzMiBsa2V5KQoreworCXN0cnVjdCBlaGVhX3ZzZ2VudHJ5ICpzZzFlbnRyeSA9ICZzd3FlLT51LmltbWRhdGFfZGVzYy5zZ19lbnRyeTsKKwl1OCAqaW1tX2RhdGEgPSAmc3dxZS0+dS5pbW1kYXRhX2Rlc2MuaW1tZWRpYXRlX2RhdGFbMF07CisJaW50IHNrYl9kYXRhX3NpemUgPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJaW50IGhlYWRlcnNpemU7CisJdTY0IHRtcF9hZGRyOworCisJLyogUGFja2V0IGlzIFRDUCB3aXRoIFRTTyBlbmFibGVkICovCisJc3dxZS0+dHhfY29udHJvbCB8PSBFSEVBX1NXUUVfVFNPOworCXN3cWUtPm1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CisJLyogY29weSBvbmx5IGV0aC9pcC90Y3AgaGVhZGVycyB0byBpbW1lZGlhdGUgZGF0YSBhbmQKKwkgKiB0aGUgcmVzdCBvZiBza2ItPmRhdGEgdG8gc2cxZW50cnkKKwkgKi8KKwloZWFkZXJzaXplID0gRVRIX0hMRU4gKyAoc2tiLT5uaC5pcGgtPmlobCAqIDQpICsgKHNrYi0+aC50aC0+ZG9mZiAqIDQpOworCisJc2tiX2RhdGFfc2l6ZSA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKworCWlmIChza2JfZGF0YV9zaXplID49IGhlYWRlcnNpemUpIHsKKwkJLyogY29weSBpbW1lZGlhdGUgZGF0YSAqLworCQltZW1jcHkoaW1tX2RhdGEsIHNrYi0+ZGF0YSwgaGVhZGVyc2l6ZSk7CisJCXN3cWUtPmltbWVkaWF0ZV9kYXRhX2xlbmd0aCA9IGhlYWRlcnNpemU7CisKKwkJaWYgKHNrYl9kYXRhX3NpemUgPiBoZWFkZXJzaXplKSB7CisJCQkvKiBzZXQgc2cxZW50cnkgZGF0YSAqLworCQkJc2cxZW50cnktPmxfa2V5ID0gbGtleTsKKwkJCXNnMWVudHJ5LT5sZW4gPSBza2JfZGF0YV9zaXplIC0gaGVhZGVyc2l6ZTsKKworCQkJdG1wX2FkZHIgPSAodTY0KShza2ItPmRhdGEgKyBoZWFkZXJzaXplKTsKKwkJCXNnMWVudHJ5LT52YWRkciA9IHRtcF9hZGRyOworCQkJc3dxZS0+ZGVzY3JpcHRvcnMrKzsKKwkJfQorCX0gZWxzZQorCQllaGVhX2Vycm9yKCJjYW5ub3QgaGFuZGxlIGZyYWdtZW50ZWQgaGVhZGVycyIpOworfQorCitzdGF0aWMgdm9pZCB3cml0ZV9zd3FlMl9ub25UU08oc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgICBzdHJ1Y3QgZWhlYV9zd3FlICpzd3FlLCB1MzIgbGtleSkKK3sKKwlpbnQgc2tiX2RhdGFfc2l6ZSA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKKwl1OCAqaW1tX2RhdGEgPSAmc3dxZS0+dS5pbW1kYXRhX2Rlc2MuaW1tZWRpYXRlX2RhdGFbMF07CisJc3RydWN0IGVoZWFfdnNnZW50cnkgKnNnMWVudHJ5ID0gJnN3cWUtPnUuaW1tZGF0YV9kZXNjLnNnX2VudHJ5OworCXU2NCB0bXBfYWRkcjsKKworCS8qIFBhY2tldCBpcyBhbnkgbm9uVFNPIHR5cGUKKwkgKgorCSAqIENvcHkgYXMgbXVjaCBhcyBwb3NzaWJsZSBza2ItPmRhdGEgdG8gaW1tZWRpYXRlIGRhdGEgYW5kCisJICogdGhlIHJlc3QgdG8gc2cxZW50cnkKKwkgKi8KKwlpZiAoc2tiX2RhdGFfc2l6ZSA+PSBTV1FFMl9NQVhfSU1NKSB7CisJCS8qIGNvcHkgaW1tZWRpYXRlIGRhdGEgKi8KKwkJbWVtY3B5KGltbV9kYXRhLCBza2ItPmRhdGEsIFNXUUUyX01BWF9JTU0pOworCisJCXN3cWUtPmltbWVkaWF0ZV9kYXRhX2xlbmd0aCA9IFNXUUUyX01BWF9JTU07CisKKwkJaWYgKHNrYl9kYXRhX3NpemUgPiBTV1FFMl9NQVhfSU1NKSB7CisJCQkvKiBjb3B5IHNnMWVudHJ5IGRhdGEgKi8KKwkJCXNnMWVudHJ5LT5sX2tleSA9IGxrZXk7CisJCQlzZzFlbnRyeS0+bGVuID0gc2tiX2RhdGFfc2l6ZSAtIFNXUUUyX01BWF9JTU07CisJCQl0bXBfYWRkciA9ICh1NjQpKHNrYi0+ZGF0YSArIFNXUUUyX01BWF9JTU0pOworCQkJc2cxZW50cnktPnZhZGRyID0gdG1wX2FkZHI7CisJCQlzd3FlLT5kZXNjcmlwdG9ycysrOworCQl9CisJfSBlbHNlIHsKKwkJbWVtY3B5KGltbV9kYXRhLCBza2ItPmRhdGEsIHNrYl9kYXRhX3NpemUpOworCQlzd3FlLT5pbW1lZGlhdGVfZGF0YV9sZW5ndGggPSBza2JfZGF0YV9zaXplOworCX0KK30KKworc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX3N3cWUyX2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGVoZWFfc3dxZSAqc3dxZSwgdTMyIGxrZXkpCit7CisJc3RydWN0IGVoZWFfdnNnZW50cnkgKnNnX2xpc3QsICpzZzFlbnRyeSwgKnNnZW50cnk7CisJc2tiX2ZyYWdfdCAqZnJhZzsKKwlpbnQgbmZyYWdzLCBzZzFlbnRyeV9jb250YWluc19mcmFnX2RhdGEsIGk7CisJdTY0IHRtcF9hZGRyOworCisJbmZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlzZzFlbnRyeSA9ICZzd3FlLT51LmltbWRhdGFfZGVzYy5zZ19lbnRyeTsKKwlzZ19saXN0ID0gKHN0cnVjdCBlaGVhX3ZzZ2VudHJ5Kikmc3dxZS0+dS5pbW1kYXRhX2Rlc2Muc2dfbGlzdDsKKwlzd3FlLT5kZXNjcmlwdG9ycyA9IDA7CisJc2cxZW50cnlfY29udGFpbnNfZnJhZ19kYXRhID0gMDsKKworCWlmICgoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfVFNPKSAmJiBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplKQorCQl3cml0ZV9zd3FlMl9UU08oc2tiLCBzd3FlLCBsa2V5KTsKKwllbHNlCisJCXdyaXRlX3N3cWUyX25vblRTTyhza2IsIHN3cWUsIGxrZXkpOworCisJLyogd3JpdGUgZGVzY3JpcHRvcnMgKi8KKwlpZiAobmZyYWdzID4gMCkgeworCQlpZiAoc3dxZS0+ZGVzY3JpcHRvcnMgPT0gMCkgeworCQkJLyogc2cxZW50cnkgbm90IHlldCB1c2VkICovCisJCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF07CisKKwkJCS8qIGNvcHkgc2cxZW50cnkgZGF0YSAqLworCQkJc2cxZW50cnktPmxfa2V5ID0gbGtleTsKKwkJCXNnMWVudHJ5LT5sZW4gPSBmcmFnLT5zaXplOworCQkJdG1wX2FkZHIgPSAgKHU2NCkocGFnZV9hZGRyZXNzKGZyYWctPnBhZ2UpCisJCQkJCSAgKyBmcmFnLT5wYWdlX29mZnNldCk7CisJCQlzZzFlbnRyeS0+dmFkZHIgPSB0bXBfYWRkcjsKKwkJCXN3cWUtPmRlc2NyaXB0b3JzKys7CisJCQlzZzFlbnRyeV9jb250YWluc19mcmFnX2RhdGEgPSAxOworCQl9CisKKwkJZm9yIChpID0gc2cxZW50cnlfY29udGFpbnNfZnJhZ19kYXRhOyBpIDwgbmZyYWdzOyBpKyspIHsKKworCQkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCQkJc2dlbnRyeSA9ICZzZ19saXN0W2kgLSBzZzFlbnRyeV9jb250YWluc19mcmFnX2RhdGFdOworCisJCQlzZ2VudHJ5LT5sX2tleSA9IGxrZXk7CisJCQlzZ2VudHJ5LT5sZW4gPSBmcmFnLT5zaXplOworCisJCQl0bXBfYWRkciA9ICh1NjQpKHBhZ2VfYWRkcmVzcyhmcmFnLT5wYWdlKQorCQkJCQkgKyBmcmFnLT5wYWdlX29mZnNldCk7CisJCQlzZ2VudHJ5LT52YWRkciA9IHRtcF9hZGRyOworCQkJc3dxZS0+ZGVzY3JpcHRvcnMrKzsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBlaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHN0cnVjdCBlaGVhX3BvcnQgKnBvcnQsIHUzMiBoY2FsbGlkKQoreworCWludCByZXQgPSAwOworCXU2NCBocmV0OworCXU4IHJlZ190eXBlOworCisJLyogRGUvUmVnaXN0ZXIgdW50YWdnZWQgcGFja2V0cyAqLworCXJlZ190eXBlID0gRUhFQV9CQ01DX0JST0FEQ0FTVCB8IEVIRUFfQkNNQ19VTlRBR0dFRDsKKwlocmV0ID0gZWhlYV9oX3JlZ19kZXJlZ19iY21jKHBvcnQtPmFkYXB0ZXItPmhhbmRsZSwKKwkJCQkgICAgIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkgICAgIHJlZ190eXBlLCBwb3J0LT5tYWNfYWRkciwgMCwgaGNhbGxpZCk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoInJlZ19kZXJlZ19iY21jIGZhaWxlZCAodGFnZ2VkKSIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9oZXJyOworCX0KKworCS8qIERlL1JlZ2lzdGVyIFZMQU4gcGFja2V0cyAqLworCXJlZ190eXBlID0gRUhFQV9CQ01DX0JST0FEQ0FTVCB8IEVIRUFfQkNNQ19WTEFOSURfQUxMOworCWhyZXQgPSBlaGVhX2hfcmVnX2RlcmVnX2JjbWMocG9ydC0+YWRhcHRlci0+aGFuZGxlLAorCQkJCSAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAorCQkJCSAgICAgcmVnX3R5cGUsIHBvcnQtPm1hY19hZGRyLCAwLCBoY2FsbGlkKTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigicmVnX2RlcmVnX2JjbWMgZmFpbGVkICh2bGFuKSIpOworCQlyZXQgPSAtRUlPOworCX0KK291dF9oZXJyOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqc2EpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICptYWNfYWRkciA9IHNhOworCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiMCAqY2IwOworCWludCByZXQ7CisJdTY0IGhyZXQ7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHItPnNhX2RhdGEpKSB7CisJCXJldCA9IC1FQUREUk5PVEFWQUlMOworCQlnb3RvIG91dDsKKwl9CisKKwljYjAgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiMCkgeworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMCIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwltZW1jcHkoJihjYjAtPnBvcnRfbWFjX2FkZHIpLCAmKG1hY19hZGRyLT5zYV9kYXRhWzBdKSwgRVRIX0FMRU4pOworCisJY2IwLT5wb3J0X21hY19hZGRyID0gY2IwLT5wb3J0X21hY19hZGRyID4+IDE2OworCisJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KHBvcnQtPmFkYXB0ZXItPmhhbmRsZSwKKwkJCQkgICAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLCBIX1BPUlRfQ0IwLAorCQkJCSAgICAgICBFSEVBX0JNQVNLX1NFVChIX1BPUlRfQ0IwX01BQywgMSksIGNiMCk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIG1hY19hZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKKworCS8qIERlcmVnaXN0ZXIgb2xkIE1BQyBpbiBwSFlQICovCisJcmV0ID0gZWhlYV9icm9hZGNhc3RfcmVnX2hlbHBlcihwb3J0LCBIX0RFUkVHX0JDTUMpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwlwb3J0LT5tYWNfYWRkciA9IGNiMC0+cG9ydF9tYWNfYWRkciA8PCAxNjsKKworCS8qIFJlZ2lzdGVyIG5ldyBNQUMgaW4gcEhZUCAqLworCXJldCA9IGVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9SRUdfQkNNQyk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZTsKKworCXJldCA9IDA7CitvdXRfZnJlZToKKwlrZnJlZShjYjApOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfcHJvbWlzY3VvdXNfZXJyb3IodTY0IGhyZXQsIGludCBlbmFibGUpCit7CisJZWhlYV9pbmZvKCJIeXBlcnZpc29yIGRlbmllZCAlc2FibGluZyBwcm9taXNjdW91cyBtb2RlLiVzIiwKKwkJICBlbmFibGUgPT0gMSA/ICJlbiIgOiAiZGlzIiwKKwkJICBocmV0ICE9IEhfQVVUSE9SSVRZID8gIiIgOiAiIEFub3RoZXIgcGFydGl0aW9uIG93bmluZyBhICIKKwkJICAibG9naWNhbCBwb3J0IG9uIHRoZSBzYW1lIHBoeXNpY2FsIHBvcnQgbWlnaHQgaGF2ZSBhbHRlcmVkICIKKwkJICAicHJvbWlzY3VvdXMgbW9kZSBmaXJzdC4iKTsKK30KKworc3RhdGljIHZvaWQgZWhlYV9wcm9taXNjdW91cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBoY3BfZWhlYV9wb3J0X2NiNyAqY2I3OworCXU2NCBocmV0OworCisJaWYgKChlbmFibGUgJiYgcG9ydC0+cHJvbWlzYykgfHwgKCFlbmFibGUgJiYgIXBvcnQtPnByb21pc2MpKQorCQlyZXR1cm47CisKKwljYjcgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiNykgeworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiNyIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBNb2RpZnkgUHhzX0RVQ1FQTiBpbiBDQjcgKi8KKwljYjctPmRlZl91Y19xcG4gPSBlbmFibGUgPT0gMSA/IHBvcnQtPnBvcnRfcmVzWzBdLnFwLT5md19oYW5kbGUgOiAwOworCisJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KHBvcnQtPmFkYXB0ZXItPmhhbmRsZSwKKwkJCQkgICAgICAgcG9ydC0+bG9naWNhbF9wb3J0X2lkLAorCQkJCSAgICAgICBIX1BPUlRfQ0I3LCBIX1BPUlRfQ0I3X0RVQ1FQTiwgY2I3KTsKKwlpZiAoaHJldCkgeworCQllaGVhX3Byb21pc2N1b3VzX2Vycm9yKGhyZXQsIGVuYWJsZSk7CisJCWdvdG8gb3V0OworCX0KKworCXBvcnQtPnByb21pc2MgPSBlbmFibGU7CitvdXQ6CisJa2ZyZWUoY2I3KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB1NjQgZWhlYV9tdWx0aWNhc3RfcmVnX2hlbHBlcihzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0LCB1NjQgbWNfbWFjX2FkZHIsCisJCQkJICAgICB1MzIgaGNhbGxpZCkKK3sKKwl1NjQgaHJldDsKKwl1OCByZWdfdHlwZTsKKworCXJlZ190eXBlID0gRUhFQV9CQ01DX1NDT1BFX0FMTCB8IEVIRUFfQkNNQ19NVUxUSUNBU1QKKwkJIHwgRUhFQV9CQ01DX1VOVEFHR0VEOworCisJaHJldCA9IGVoZWFfaF9yZWdfZGVyZWdfYmNtYyhwb3J0LT5hZGFwdGVyLT5oYW5kbGUsCisJCQkJICAgICBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJICAgICByZWdfdHlwZSwgbWNfbWFjX2FkZHIsIDAsIGhjYWxsaWQpOworCWlmIChocmV0KQorCQlnb3RvIG91dDsKKworCXJlZ190eXBlID0gRUhFQV9CQ01DX1NDT1BFX0FMTCB8IEVIRUFfQkNNQ19NVUxUSUNBU1QKKwkJIHwgRUhFQV9CQ01DX1ZMQU5JRF9BTEw7CisKKwlocmV0ID0gZWhlYV9oX3JlZ19kZXJlZ19iY21jKHBvcnQtPmFkYXB0ZXItPmhhbmRsZSwKKwkJCQkgICAgIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkgICAgIHJlZ190eXBlLCBtY19tYWNfYWRkciwgMCwgaGNhbGxpZCk7CitvdXQ6CisJcmV0dXJuIGhyZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9kcm9wX211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVoZWFfbWNfbGlzdCAqbWNfZW50cnkgPSBwb3J0LT5tY19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0ZW1wOworCWludCByZXQgPSAwOworCXU2NCBocmV0OworCisJbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgdGVtcCwgJihwb3J0LT5tY19saXN0LT5saXN0KSkgeworCQltY19lbnRyeSA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgZWhlYV9tY19saXN0LCBsaXN0KTsKKworCQlocmV0ID0gZWhlYV9tdWx0aWNhc3RfcmVnX2hlbHBlcihwb3J0LCBtY19lbnRyeS0+bWFjYWRkciwKKwkJCQkJCSBIX0RFUkVHX0JDTUMpOworCQlpZiAoaHJldCkgeworCQkJZWhlYV9lcnJvcigiZmFpbGVkIGRlcmVnaXN0ZXJpbmcgbWNhc3QgTUFDIik7CisJCQlyZXQgPSAtRUlPOworCQl9CisKKwkJbGlzdF9kZWwocG9zKTsKKwkJa2ZyZWUobWNfZW50cnkpOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBlaGVhX2FsbG11bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBlbmFibGUpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJdTY0IGhyZXQ7CisKKwlpZiAoIXBvcnQtPmFsbG11bHRpKSB7CisJCWlmIChlbmFibGUpIHsKKwkJCS8qIEVuYWJsZSBBTExNVUxUSSAqLworCQkJZWhlYV9kcm9wX211bHRpY2FzdF9saXN0KGRldik7CisJCQlocmV0ID0gZWhlYV9tdWx0aWNhc3RfcmVnX2hlbHBlcihwb3J0LCAwLCBIX1JFR19CQ01DKTsKKwkJCWlmICghaHJldCkKKwkJCQlwb3J0LT5hbGxtdWx0aSA9IDE7CisJCQllbHNlCisJCQkJZWhlYV9lcnJvcigiZmFpbGVkIGVuYWJsaW5nIElGRl9BTExNVUxUSSIpOworCQl9CisJfSBlbHNlCisJCWlmICghZW5hYmxlKSB7CisJCQkvKiBEaXNhYmxlIEFMTE1VTFRJICovCisJCQlocmV0ID0gZWhlYV9tdWx0aWNhc3RfcmVnX2hlbHBlcihwb3J0LCAwLCBIX0RFUkVHX0JDTUMpOworCQkJaWYgKCFocmV0KQorCQkJCXBvcnQtPmFsbG11bHRpID0gMDsKKwkJCWVsc2UKKwkJCQllaGVhX2Vycm9yKCJmYWlsZWQgZGlzYWJsaW5nIElGRl9BTExNVUxUSSIpOworCQl9Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfYWRkX211bHRpY2FzdF9lbnRyeShzdHJ1Y3QgZWhlYV9wb3J0KiBwb3J0LCB1OCogbWNfbWFjX2FkZHIpCit7CisJc3RydWN0IGVoZWFfbWNfbGlzdCAqZWhlYV9tY2xfZW50cnk7CisJdTY0IGhyZXQ7CisKKwllaGVhX21jbF9lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCplaGVhX21jbF9lbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZWhlYV9tY2xfZW50cnkpIHsKKwkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBtY2xfZW50cnkiKTsKKwkJcmV0dXJuOworCX0KKworCUlOSVRfTElTVF9IRUFEKCZlaGVhX21jbF9lbnRyeS0+bGlzdCk7CisKKwltZW1jcHkoJmVoZWFfbWNsX2VudHJ5LT5tYWNhZGRyLCBtY19tYWNfYWRkciwgRVRIX0FMRU4pOworCisJaHJldCA9IGVoZWFfbXVsdGljYXN0X3JlZ19oZWxwZXIocG9ydCwgZWhlYV9tY2xfZW50cnktPm1hY2FkZHIsCisJCQkJCSBIX1JFR19CQ01DKTsKKwlpZiAoIWhyZXQpCisJCWxpc3RfYWRkKCZlaGVhX21jbF9lbnRyeS0+bGlzdCwgJnBvcnQtPm1jX2xpc3QtPmxpc3QpOworCWVsc2UgeworCQllaGVhX2Vycm9yKCJmYWlsZWQgcmVnaXN0ZXJpbmcgbWNhc3QgTUFDIik7CisJCWtmcmVlKGVoZWFfbWNsX2VudHJ5KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9tY19saXN0ICprX21jbF9lbnRyeTsKKwlpbnQgcmV0LCBpOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQllaGVhX3Byb21pc2N1b3VzKGRldiwgMSk7CisJCXJldHVybjsKKwl9CisJZWhlYV9wcm9taXNjdW91cyhkZXYsIDApOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJZWhlYV9hbGxtdWx0aShkZXYsIDEpOworCQlyZXR1cm47CisJfQorCWVoZWFfYWxsbXVsdGkoZGV2LCAwKTsKKworCWlmIChkZXYtPm1jX2NvdW50KSB7CisJCXJldCA9IGVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOworCQlpZiAocmV0KSB7CisJCQkvKiBEcm9wcGluZyB0aGUgY3VycmVudCBtdWx0aWNhc3QgbGlzdCBmYWlsZWQuCisJCQkgKiBFbmFibGluZyBBTExfTVVMVEkgaXMgdGhlIGJlc3Qgd2UgY2FuIGRvLgorCQkJICovCisJCQllaGVhX2FsbG11bHRpKGRldiwgMSk7CisJCX0KKworCQlpZiAoZGV2LT5tY19jb3VudCA+IHBvcnQtPmFkYXB0ZXItPm1heF9tY19tYWMpIHsKKwkJCWVoZWFfaW5mbygiTWNhc3QgcmVnaXN0cmF0aW9uIGxpbWl0IHJlYWNoZWQgKDB4JWx4KS4gIgorCQkJCSAgIlVzZSBBTExNVUxUSSEiLAorCQkJCSAgcG9ydC0+YWRhcHRlci0+bWF4X21jX21hYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCWZvciAoaSA9IDAsIGtfbWNsX2VudHJ5ID0gZGV2LT5tY19saXN0OworCQkgICAgIGkgPCBkZXYtPm1jX2NvdW50OworCQkgICAgIGkrKywga19tY2xfZW50cnkgPSBrX21jbF9lbnRyeS0+bmV4dCkgeworCQkJZWhlYV9hZGRfbXVsdGljYXN0X2VudHJ5KHBvcnQsIGtfbWNsX2VudHJ5LT5kbWlfYWRkcik7CisJCX0KKwl9CitvdXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGVoZWFfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKK3sKKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG5ld19tdHUgPiBFSEVBX01BWF9QQUNLRVRfU0laRSkpCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+bXR1ID0gbmV3X210dTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZWhlYV94bWl0MihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkgICAgICAgc3RydWN0IGVoZWFfc3dxZSAqc3dxZSwgdTMyIGxrZXkpCit7CisJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCS8qIElQdjQgKi8KKwkJc3dxZS0+dHhfY29udHJvbCB8PSBFSEVBX1NXUUVfQ1JDCisJCQkJIHwgRUhFQV9TV1FFX0lQX0NIRUNLU1VNCisJCQkJIHwgRUhFQV9TV1FFX1RDUF9DSEVDS1NVTQorCQkJCSB8IEVIRUFfU1dRRV9JTU1fREFUQV9QUkVTRU5UCisJCQkJIHwgRUhFQV9TV1FFX0RFU0NSSVBUT1JTX1BSRVNFTlQ7CisKKwkJd3JpdGVfaXBfc3RhcnRfZW5kKHN3cWUsIHNrYik7CisKKwkJaWYgKHNrYi0+bmguaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkgeworCQkJaWYgKChza2ItPm5oLmlwaC0+ZnJhZ19vZmYgJiBJUF9NRikgfHwKKwkJCSAgICAoc2tiLT5uaC5pcGgtPmZyYWdfb2ZmICYgSVBfT0ZGU0VUKSkKKwkJCQkvKiBJUCBmcmFnbWVudCwgc28gZG9uJ3QgY2hhbmdlIGNzICovCisJCQkJc3dxZS0+dHhfY29udHJvbCAmPSB+RUhFQV9TV1FFX1RDUF9DSEVDS1NVTTsKKwkJCWVsc2UKKwkJCQl3cml0ZV91ZHBfb2Zmc2V0X2VuZChzd3FlLCBza2IpOworCisJCX0gZWxzZSBpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CisJCQl3cml0ZV90Y3Bfb2Zmc2V0X2VuZChzd3FlLCBza2IpOworCQl9CisKKwkJLyogaWNtcCAoYmlnIGRhdGEpIGFuZCBpcCBzZWdtZW50YXRpb24gcGFja2V0cyAoYWxsIG90aGVyIGlwCisJCSAgIHBhY2tldHMpIGRvIG5vdCByZXF1aXJlIGFueSBzcGVjaWFsIGhhbmRsaW5nICovCisKKwl9IGVsc2UgeworCQkvKiBPdGhlciBFdGhlcm5ldCBQcm90b2NvbCAqLworCQlzd3FlLT50eF9jb250cm9sIHw9IEVIRUFfU1dRRV9DUkMKKwkJCQkgfCBFSEVBX1NXUUVfSU1NX0RBVEFfUFJFU0VOVAorCQkJCSB8IEVIRUFfU1dRRV9ERVNDUklQVE9SU19QUkVTRU5UOworCX0KKworCXdyaXRlX3N3cWUyX2RhdGEoc2tiLCBkZXYsIHN3cWUsIGxrZXkpOworfQorCitzdGF0aWMgdm9pZCBlaGVhX3htaXQzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCSAgICAgICBzdHJ1Y3QgZWhlYV9zd3FlICpzd3FlKQoreworCWludCBuZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXU4ICppbW1fZGF0YSA9ICZzd3FlLT51LmltbWRhdGFfbm9kZXNjLmltbWVkaWF0ZV9kYXRhWzBdOworCXNrYl9mcmFnX3QgKmZyYWc7CisJaW50IGk7CisKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpIHsKKwkJLyogSVB2NCAqLworCQl3cml0ZV9pcF9zdGFydF9lbmQoc3dxZSwgc2tiKTsKKworCQlpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVENQKSB7CisJCQlzd3FlLT50eF9jb250cm9sIHw9IEVIRUFfU1dRRV9DUkMKKwkJCQkJIHwgRUhFQV9TV1FFX0lQX0NIRUNLU1VNCisJCQkJCSB8IEVIRUFfU1dRRV9UQ1BfQ0hFQ0tTVU0KKwkJCQkJIHwgRUhFQV9TV1FFX0lNTV9EQVRBX1BSRVNFTlQ7CisKKwkJCXdyaXRlX3RjcF9vZmZzZXRfZW5kKHN3cWUsIHNrYik7CisKKwkJfSBlbHNlIGlmIChza2ItPm5oLmlwaC0+cHJvdG9jb2wgPT0gSVBQUk9UT19VRFApIHsKKwkJCWlmICgoc2tiLT5uaC5pcGgtPmZyYWdfb2ZmICYgSVBfTUYpIHx8CisJCQkgICAgKHNrYi0+bmguaXBoLT5mcmFnX29mZiAmIElQX09GRlNFVCkpCisJCQkJLyogSVAgZnJhZ21lbnQsIHNvIGRvbid0IGNoYW5nZSBjcyAqLworCQkJCXN3cWUtPnR4X2NvbnRyb2wgfD0gRUhFQV9TV1FFX0NSQworCQkJCQkJIHwgRUhFQV9TV1FFX0lNTV9EQVRBX1BSRVNFTlQ7CisJCQllbHNlIHsKKwkJCQlzd3FlLT50eF9jb250cm9sIHw9IEVIRUFfU1dRRV9DUkMKKwkJCQkJCSB8IEVIRUFfU1dRRV9JUF9DSEVDS1NVTQorCQkJCQkJIHwgRUhFQV9TV1FFX1RDUF9DSEVDS1NVTQorCQkJCQkJIHwgRUhFQV9TV1FFX0lNTV9EQVRBX1BSRVNFTlQ7CisKKwkJCQl3cml0ZV91ZHBfb2Zmc2V0X2VuZChzd3FlLCBza2IpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogaWNtcCAoYmlnIGRhdGEpIGFuZAorCQkJICAgaXAgc2VnbWVudGF0aW9uIHBhY2tldHMgKGFsbCBvdGhlciBpcCBwYWNrZXRzKSAqLworCQkJc3dxZS0+dHhfY29udHJvbCB8PSBFSEVBX1NXUUVfQ1JDCisJCQkJCSB8IEVIRUFfU1dRRV9JUF9DSEVDS1NVTQorCQkJCQkgfCBFSEVBX1NXUUVfSU1NX0RBVEFfUFJFU0VOVDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIE90aGVyIEV0aGVybmV0IFByb3RvY29sICovCisJCXN3cWUtPnR4X2NvbnRyb2wgfD0gRUhFQV9TV1FFX0NSQyB8IEVIRUFfU1dRRV9JTU1fREFUQV9QUkVTRU5UOworCX0KKwkvKiBjb3B5IChpbW1lZGlhdGUpIGRhdGEgKi8KKwlpZiAobmZyYWdzID09IDApIHsKKwkJLyogZGF0YSBpcyBpbiBhIHNpbmdsZSBwaWVjZSAqLworCQltZW1jcHkoaW1tX2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCX0gZWxzZSB7CisJCS8qIGZpcnN0IGNvcHkgZGF0YSBmcm9tIHRoZSBza2ItPmRhdGEgYnVmZmVyIC4uLiAqLworCQltZW1jcHkoaW1tX2RhdGEsIHNrYi0+ZGF0YSwgc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuKTsKKwkJaW1tX2RhdGEgKz0gc2tiLT5sZW4gLSBza2ItPmRhdGFfbGVuOworCisJCS8qIC4uLiB0aGVuIGNvcHkgZGF0YSBmcm9tIHRoZSBmcmFnbWVudHMgKi8KKwkJZm9yIChpID0gMDsgaSA8IG5mcmFnczsgaSsrKSB7CisJCQlmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQltZW1jcHkoaW1tX2RhdGEsCisJCQkgICAgICAgcGFnZV9hZGRyZXNzKGZyYWctPnBhZ2UpICsgZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkgICAgICAgZnJhZy0+c2l6ZSk7CisJCQlpbW1fZGF0YSArPSBmcmFnLT5zaXplOworCQl9CisJfQorCXN3cWUtPmltbWVkaWF0ZV9kYXRhX2xlbmd0aCA9IHNrYi0+bGVuOworCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KKworc3RhdGljIGludCBlaGVhX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWhlYV9zd3FlICpzd3FlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIGxrZXk7CisJaW50IHN3cWVfaW5kZXg7CisJc3RydWN0IGVoZWFfcG9ydF9yZXMgKnByID0gJnBvcnQtPnBvcnRfcmVzWzBdOworCisJc3Bpbl9sb2NrKCZwci0+eG1pdF9sb2NrKTsKKworCXN3cWUgPSBlaGVhX2dldF9zd3FlKHByLT5xcCwgJnN3cWVfaW5kZXgpOworCW1lbXNldChzd3FlLCAwLCBTV1FFX0hFQURFUl9TSVpFKTsKKwlhdG9taWNfZGVjKCZwci0+c3dxZV9hdmFpbCk7CisKKwlpZiAoc2tiLT5sZW4gPD0gU1dRRTNfTUFYX0lNTSkgeworCQl1MzIgc2lnX2l2ID0gcG9ydC0+c2lnX2NvbXBfaXY7CisJCXUzMiBzd3FlX251bSA9IHByLT5zd3FlX2lkX2NvdW50ZXI7CisJCWVoZWFfeG1pdDMoc2tiLCBkZXYsIHN3cWUpOworCQlzd3FlLT53cl9pZCA9IEVIRUFfQk1BU0tfU0VUKEVIRUFfV1JfSURfVFlQRSwgRUhFQV9TV1FFM19UWVBFKQorCQkJfCBFSEVBX0JNQVNLX1NFVChFSEVBX1dSX0lEX0NPVU5ULCBzd3FlX251bSk7CisJCWlmIChwci0+c3dxZV9sbF9jb3VudCA+PSAoc2lnX2l2IC0gMSkpIHsKKwkJCXN3cWUtPndyX2lkIHw9IEVIRUFfQk1BU0tfU0VUKEVIRUFfV1JfSURfUkVGSUxMLAorCQkJCQkJICAgICAgc2lnX2l2KTsKKwkJCXN3cWUtPnR4X2NvbnRyb2wgfD0gRUhFQV9TV1FFX1NJR05BTExFRF9DT01QTEVUSU9OOworCQkJcHItPnN3cWVfbGxfY291bnQgPSAwOworCQl9IGVsc2UKKwkJCXByLT5zd3FlX2xsX2NvdW50ICs9IDE7CisJfSBlbHNlIHsKKwkJc3dxZS0+d3JfaWQgPQorCQkJRUhFQV9CTUFTS19TRVQoRUhFQV9XUl9JRF9UWVBFLCBFSEVBX1NXUUUyX1RZUEUpCisJCSAgICAgIHwgRUhFQV9CTUFTS19TRVQoRUhFQV9XUl9JRF9DT1VOVCwgcHItPnN3cWVfaWRfY291bnRlcikKKwkJICAgICAgfCBFSEVBX0JNQVNLX1NFVChFSEVBX1dSX0lEX0lOREVYLCBwci0+c3Ffc2tiYS5pbmRleCk7CisJCXByLT5zcV9za2JhLmFycltwci0+c3Ffc2tiYS5pbmRleF0gPSBza2I7CisKKwkJcHItPnNxX3NrYmEuaW5kZXgrKzsKKwkJcHItPnNxX3NrYmEuaW5kZXggJj0gKHByLT5zcV9za2JhLmxlbiAtIDEpOworCisJCWxrZXkgPSBwci0+c2VuZF9tci5sa2V5OworCQllaGVhX3htaXQyKHNrYiwgZGV2LCBzd3FlLCBsa2V5KTsKKworCQlpZiAocHItPnN3cWVfY291bnQgPj0gKEVIRUFfU0lHX0lWX0xPTkcgLSAxKSkgeworCQkJc3dxZS0+d3JfaWQgfD0gRUhFQV9CTUFTS19TRVQoRUhFQV9XUl9JRF9SRUZJTEwsCisJCQkJCQkgICAgICBFSEVBX1NJR19JVl9MT05HKTsKKwkJCXN3cWUtPnR4X2NvbnRyb2wgfD0gRUhFQV9TV1FFX1NJR05BTExFRF9DT01QTEVUSU9OOworCQkJcHItPnN3cWVfY291bnQgPSAwOworCQl9IGVsc2UKKwkJCXByLT5zd3FlX2NvdW50ICs9IDE7CisJfQorCXByLT5zd3FlX2lkX2NvdW50ZXIgKz0gMTsKKworCWlmIChwb3J0LT52Z3JwICYmIHZsYW5fdHhfdGFnX3ByZXNlbnQoc2tiKSkgeworCQlzd3FlLT50eF9jb250cm9sIHw9IEVIRUFfU1dRRV9WTEFOX0lOU0VSVDsKKwkJc3dxZS0+dmxhbl90YWcgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwl9CisKKwlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChwb3J0KSkgeworCQllaGVhX2luZm8oInBvc3Qgc3dxZSBvbiBRUCAlZCIsIHByLT5xcC0+aW5pdF9hdHRyLnFwX25yKTsKKwkJZWhlYV9kdW1wKHN3cWUsIHNpemVvZigqc3dxZSksICJzd3FlIik7CisJfQorCisJZWhlYV9wb3N0X3N3cWUocHItPnFwLCBzd3FlKTsKKwlwci0+dHhfcGFja2V0cysrOworCisJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZwci0+c3dxZV9hdmFpbCkgPD0gMSkpIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByLT5uZXRpZl9xdWV1ZSwgZmxhZ3MpOworCQlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnByLT5zd3FlX2F2YWlsKSA8PSAxKSkgeworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQkJcHItPnF1ZXVlX3N0b3BwZWQgPSAxOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByLT5uZXRpZl9xdWV1ZSwgZmxhZ3MpOworCX0KKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwlzcGluX3VubG9jaygmcHItPnhtaXRfbG9jayk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgdm9pZCBlaGVhX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciA9IHBvcnQtPmFkYXB0ZXI7CisJc3RydWN0IGhjcF9laGVhX3BvcnRfY2IxICpjYjE7CisJdTY0IGhyZXQ7CisKKwlwb3J0LT52Z3JwID0gZ3JwOworCisJY2IxID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYjEpIHsKKwkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGdycCkKKwkJbWVtc2V0KGNiMS0+dmxhbl9maWx0ZXIsIDAsIHNpemVvZihjYjEtPnZsYW5fZmlsdGVyKSk7CisJZWxzZQorCQltZW1zZXQoY2IxLT52bGFuX2ZpbHRlciwgMHhGRiwgc2l6ZW9mKGNiMS0+dmxhbl9maWx0ZXIpKTsKKworCWhyZXQgPSBlaGVhX2hfbW9kaWZ5X2VoZWFfcG9ydChhZGFwdGVyLT5oYW5kbGUsIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkgICAgICAgSF9QT1JUX0NCMSwgSF9QT1JUX0NCMV9BTEwsIGNiMSk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQorCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOworCisJa2ZyZWUoY2IxKTsKK291dDoKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfdmxhbl9yeF9hZGRfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjEgKmNiMTsKKwlpbnQgaW5kZXg7CisJdTY0IGhyZXQ7CisKKwljYjEgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiMSkgeworCQllaGVhX2Vycm9yKCJubyBtZW0gZm9yIGNiMSIpOworCQlnb3RvIG91dDsKKwl9CisKKwlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChhZGFwdGVyLT5oYW5kbGUsIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkgICAgICBIX1BPUlRfQ0IxLCBIX1BPUlRfQ0IxX0FMTCwgY2IxKTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9wb3J0IGZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpbmRleCA9ICh2aWQgLyA2NCk7CisJY2IxLT52bGFuX2ZpbHRlcltpbmRleF0gfD0gKCh1NjQpKDEgPDwgKHZpZCAmIDB4M0YpKSk7CisKKwlocmV0ID0gZWhlYV9oX21vZGlmeV9laGVhX3BvcnQoYWRhcHRlci0+aGFuZGxlLCBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJICAgICAgIEhfUE9SVF9DQjEsIEhfUE9SVF9DQjFfQUxMLCBjYjEpOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykKKwkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKK291dDoKKwlrZnJlZShjYjEpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZWhlYV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHNob3J0IHZpZCkKK3sKKwlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjEgKmNiMTsKKwlpbnQgaW5kZXg7CisJdTY0IGhyZXQ7CisKKwlpZiAocG9ydC0+dmdycCkKKwkJcG9ydC0+dmdycC0+dmxhbl9kZXZpY2VzW3ZpZF0gPSBOVUxMOworCisJY2IxID0ga3phbGxvYyhIX0NCX0FMSUdOTUVOVCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjYjEpIHsKKwkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBjYjEiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaHJldCA9IGVoZWFfaF9xdWVyeV9laGVhX3BvcnQoYWRhcHRlci0+aGFuZGxlLCBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJICAgICAgSF9QT1JUX0NCMSwgSF9QT1JUX0NCMV9BTEwsIGNiMSk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcG9ydCBmYWlsZWQiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaW5kZXggPSAodmlkIC8gNjQpOworCWNiMS0+dmxhbl9maWx0ZXJbaW5kZXhdICY9IH4oKHU2NCkoMSA8PCAodmlkICYgMHgzRikpKTsKKworCWhyZXQgPSBlaGVhX2hfbW9kaWZ5X2VoZWFfcG9ydChhZGFwdGVyLT5oYW5kbGUsIHBvcnQtPmxvZ2ljYWxfcG9ydF9pZCwKKwkJCQkgICAgICAgSF9QT1JUX0NCMSwgSF9QT1JUX0NCMV9BTEwsIGNiMSk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKQorCQllaGVhX2Vycm9yKCJtb2RpZnlfZWhlYV9wb3J0IGZhaWxlZCIpOworb3V0OgorCWtmcmVlKGNiMSk7CisJcmV0dXJuOworfQorCitpbnQgZWhlYV9hY3RpdmF0ZV9xcChzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgZWhlYV9xcCAqcXApCit7CisJaW50IHJldCA9IC1FSU87CisJdTY0IGhyZXQ7CisJdTE2IGR1bW15MTYgPSAwOworCXU2NCBkdW1teTY0ID0gMDsKKwlzdHJ1Y3QgaGNwX21vZGlmeV9xcF9jYjAqIGNiMDsKKworCWNiMCA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWlmICghY2IwKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWhyZXQgPSBlaGVhX2hfcXVlcnlfZWhlYV9xcChhZGFwdGVyLT5oYW5kbGUsIDAsIHFwLT5md19oYW5kbGUsCisJCQkJICAgIEVIRUFfQk1BU0tfU0VUKEhfUVBDQjBfQUxMLCAweEZGRkYpLCBjYjApOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGVhX2Vycm9yKCJxdWVyeV9laGVhX3FwIGZhaWxlZCAoMSkiKTsKKwkJZ290byBvdXQ7CisJfQorCisJY2IwLT5xcF9jdGxfcmVnID0gSF9RUF9DUl9TVEFURV9JTklUSUFMSVpFRDsKKwlocmV0ID0gZWhlYV9oX21vZGlmeV9laGVhX3FwKGFkYXB0ZXItPmhhbmRsZSwgMCwgcXAtPmZ3X2hhbmRsZSwKKwkJCQkgICAgIEVIRUFfQk1BU0tfU0VUKEhfUVBDQjBfUVBfQ1RMX1JFRywgMSksIGNiMCwKKwkJCQkgICAgICZkdW1teTY0LCAmZHVtbXk2NCwgJmR1bW15MTYsICZkdW1teTE2KTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigibW9kaWZ5X2VoZWFfcXAgZmFpbGVkICgxKSIpOworCQlnb3RvIG91dDsKKwl9CisKKwlocmV0ID0gZWhlYV9oX3F1ZXJ5X2VoZWFfcXAoYWRhcHRlci0+aGFuZGxlLCAwLCBxcC0+ZndfaGFuZGxlLAorCQkJCSAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX0FMTCwgMHhGRkZGKSwgY2IwKTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigicXVlcnlfZWhlYV9xcCBmYWlsZWQgKDIpIik7CisJCWdvdG8gb3V0OworCX0KKworCWNiMC0+cXBfY3RsX3JlZyA9IEhfUVBfQ1JfRU5BQkxFRCB8IEhfUVBfQ1JfU1RBVEVfSU5JVElBTElaRUQ7CisJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9xcChhZGFwdGVyLT5oYW5kbGUsIDAsIHFwLT5md19oYW5kbGUsCisJCQkJICAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX1FQX0NUTF9SRUcsIDEpLCBjYjAsCisJCQkJICAgICAmZHVtbXk2NCwgJmR1bW15NjQsICZkdW1teTE2LCAmZHVtbXkxNik7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3FwIGZhaWxlZCAoMikiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaHJldCA9IGVoZWFfaF9xdWVyeV9laGVhX3FwKGFkYXB0ZXItPmhhbmRsZSwgMCwgcXAtPmZ3X2hhbmRsZSwKKwkJCQkgICAgRUhFQV9CTUFTS19TRVQoSF9RUENCMF9BTEwsIDB4RkZGRiksIGNiMCk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICgzKSIpOworCQlnb3RvIG91dDsKKwl9CisKKwljYjAtPnFwX2N0bF9yZWcgPSBIX1FQX0NSX0VOQUJMRUQgfCBIX1FQX0NSX1NUQVRFX1JEWTJTTkQ7CisJaHJldCA9IGVoZWFfaF9tb2RpZnlfZWhlYV9xcChhZGFwdGVyLT5oYW5kbGUsIDAsIHFwLT5md19oYW5kbGUsCisJCQkJICAgICBFSEVBX0JNQVNLX1NFVChIX1FQQ0IwX1FQX0NUTF9SRUcsIDEpLCBjYjAsCisJCQkJICAgICAmZHVtbXk2NCwgJmR1bW15NjQsICZkdW1teTE2LCAmZHVtbXkxNik7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoIm1vZGlmeV9laGVhX3FwIGZhaWxlZCAoMykiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaHJldCA9IGVoZWFfaF9xdWVyeV9laGVhX3FwKGFkYXB0ZXItPmhhbmRsZSwgMCwgcXAtPmZ3X2hhbmRsZSwKKwkJCQkgICAgRUhFQV9CTUFTS19TRVQoSF9RUENCMF9BTEwsIDB4RkZGRiksIGNiMCk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoInF1ZXJ5X2VoZWFfcXAgZmFpbGVkICg0KSIpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKGNiMCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX3BvcnRfcmVzX3NldHVwKHN0cnVjdCBlaGVhX3BvcnQgKnBvcnQsIGludCBkZWZfcXBzLAorCQkJICAgICAgIGludCBhZGRfdHhfcXBzKQoreworCWludCByZXQsIGk7CisJc3RydWN0IHBvcnRfcmVzX2NmZyBwcl9jZmcsIHByX2NmZ19zbWFsbF9yeDsKKwllbnVtIGVoZWFfZXFfdHlwZSBlcV90eXBlID0gRUhFQV9FUTsKKworCXBvcnQtPnFwX2VxID0gZWhlYV9jcmVhdGVfZXEocG9ydC0+YWRhcHRlciwgZXFfdHlwZSwKKwkJCQkgICBFSEVBX01BWF9FTlRSSUVTX0VRLCAxKTsKKwlpZiAoIXBvcnQtPnFwX2VxKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWVoZWFfZXJyb3IoImVoZWFfY3JlYXRlX2VxIGZhaWxlZCAocXBfZXEpIik7CisJCWdvdG8gb3V0X2tpbGxfZXE7CisJfQorCisJcHJfY2ZnLm1heF9lbnRyaWVzX3JjcSA9IHJxMV9lbnRyaWVzICsgcnEyX2VudHJpZXMgKyBycTNfZW50cmllczsKKwlwcl9jZmcubWF4X2VudHJpZXNfc2NxID0gc3FfZW50cmllczsKKwlwcl9jZmcubWF4X2VudHJpZXNfc3EgPSBzcV9lbnRyaWVzOworCXByX2NmZy5tYXhfZW50cmllc19ycTEgPSBycTFfZW50cmllczsKKwlwcl9jZmcubWF4X2VudHJpZXNfcnEyID0gcnEyX2VudHJpZXM7CisJcHJfY2ZnLm1heF9lbnRyaWVzX3JxMyA9IHJxM19lbnRyaWVzOworCisJcHJfY2ZnX3NtYWxsX3J4Lm1heF9lbnRyaWVzX3JjcSA9IDE7CisJcHJfY2ZnX3NtYWxsX3J4Lm1heF9lbnRyaWVzX3NjcSA9IHNxX2VudHJpZXM7CisJcHJfY2ZnX3NtYWxsX3J4Lm1heF9lbnRyaWVzX3NxID0gc3FfZW50cmllczsKKwlwcl9jZmdfc21hbGxfcngubWF4X2VudHJpZXNfcnExID0gMTsKKwlwcl9jZmdfc21hbGxfcngubWF4X2VudHJpZXNfcnEyID0gMTsKKwlwcl9jZmdfc21hbGxfcngubWF4X2VudHJpZXNfcnEzID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBkZWZfcXBzOyBpKyspIHsKKwkJcmV0ID0gZWhlYV9pbml0X3BvcnRfcmVzKHBvcnQsICZwb3J0LT5wb3J0X3Jlc1tpXSwgJnByX2NmZywgaSk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9jbGVhbl9wcjsKKwl9CisJZm9yIChpID0gZGVmX3FwczsgaSA8IGRlZl9xcHMgKyBhZGRfdHhfcXBzOyBpKyspIHsKKwkJcmV0ID0gZWhlYV9pbml0X3BvcnRfcmVzKHBvcnQsICZwb3J0LT5wb3J0X3Jlc1tpXSwKKwkJCQkJICZwcl9jZmdfc21hbGxfcngsIGkpOworCQlpZiAocmV0KQorCQkJZ290byBvdXRfY2xlYW5fcHI7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9jbGVhbl9wcjoKKwl3aGlsZSAoLS1pID49IDApCisJCWVoZWFfY2xlYW5fcG9ydHJlcyhwb3J0LCAmcG9ydC0+cG9ydF9yZXNbaV0pOworCitvdXRfa2lsbF9lcToKKwllaGVhX2Rlc3Ryb3lfZXEocG9ydC0+cXBfZXEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV9jbGVhbl9hbGxfcG9ydHJlcyhzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0KQoreworCWludCByZXQgPSAwOworCWludCBpOworCisJZm9yKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsgaSsrKQorCQlyZXQgfD0gZWhlYV9jbGVhbl9wb3J0cmVzKHBvcnQsICZwb3J0LT5wb3J0X3Jlc1tpXSk7CisKKwlyZXQgfD0gZWhlYV9kZXN0cm95X2VxKHBvcnQtPnFwX2VxKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZWhlYV91cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByZXQsIGk7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisJdTY0IG1hY19hZGRyID0gMDsKKworCWlmIChwb3J0LT5zdGF0ZSA9PSBFSEVBX1BPUlRfVVApCisJCXJldHVybiAwOworCisJcmV0ID0gZWhlYV9wb3J0X3Jlc19zZXR1cChwb3J0LCBwb3J0LT5udW1fZGVmX3FwcywKKwkJCQkgIHBvcnQtPm51bV9hZGRfdHhfcXBzKTsKKwlpZiAocmV0KSB7CisJCWVoZWFfZXJyb3IoInBvcnRfcmVzX2ZhaWxlZCIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTZXQgZGVmYXVsdCBRUCBmb3IgdGhpcyBwb3J0ICovCisJcmV0ID0gZWhlYV9jb25maWd1cmVfcG9ydChwb3J0KTsKKwlpZiAocmV0KSB7CisJCWVoZWFfZXJyb3IoImVoZWFfY29uZmlndXJlX3BvcnQgZmFpbGVkLiByZXQ6JWQiLCByZXQpOworCQlnb3RvIG91dF9jbGVhbl9wcjsKKwl9CisKKwlyZXQgPSBlaGVhX2Jyb2FkY2FzdF9yZWdfaGVscGVyKHBvcnQsIEhfUkVHX0JDTUMpOworCWlmIChyZXQpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZWhlYV9lcnJvcigib3V0X2NsZWFuX3ByIik7CisJCWdvdG8gb3V0X2NsZWFuX3ByOworCX0KKwltYWNfYWRkciA9ICgqKHU2NCopZGV2LT5kZXZfYWRkcikgPj4gMTY7CisKKwlyZXQgPSBlaGVhX3JlZ19pbnRlcnJ1cHRzKGRldik7CisJaWYgKHJldCkgeworCQllaGVhX2Vycm9yKCJvdXRfZGVyZWdfYmMiKTsKKwkJZ290byBvdXRfZGVyZWdfYmM7CisJfQorCisJZm9yKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsgaSsrKSB7CisJCXJldCA9IGVoZWFfYWN0aXZhdGVfcXAocG9ydC0+YWRhcHRlciwgcG9ydC0+cG9ydF9yZXNbaV0ucXApOworCQlpZiAocmV0KSB7CisJCQllaGVhX2Vycm9yKCJhY3RpdmF0ZV9xcCBmYWlsZWQiKTsKKwkJCWdvdG8gb3V0X2ZyZWVfaXJxczsKKwkJfQorCX0KKworCWZvcihpID0gMDsgaSA8IHBvcnQtPm51bV9kZWZfcXBzOyBpKyspIHsKKwkJcmV0ID0gZWhlYV9maWxsX3BvcnRfcmVzKCZwb3J0LT5wb3J0X3Jlc1tpXSk7CisJCWlmIChyZXQpIHsKKwkJCWVoZWFfZXJyb3IoIm91dF9mcmVlX2lycXMiKTsKKwkJCWdvdG8gb3V0X2ZyZWVfaXJxczsKKwkJfQorCX0KKworCXJldCA9IDA7CisJcG9ydC0+c3RhdGUgPSBFSEVBX1BPUlRfVVA7CisJZ290byBvdXQ7CisKK291dF9mcmVlX2lycXM6CisJZWhlYV9mcmVlX2ludGVycnVwdHMoZGV2KTsKKworb3V0X2RlcmVnX2JjOgorCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKKworb3V0X2NsZWFuX3ByOgorCWVoZWFfY2xlYW5fYWxsX3BvcnRyZXMocG9ydCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCisJZG93bigmcG9ydC0+cG9ydF9sb2NrKTsKKworCWlmIChuZXRpZl9tc2dfaWZ1cChwb3J0KSkKKwkJZWhlYV9pbmZvKCJlbmFibGluZyBwb3J0ICVzIiwgZGV2LT5uYW1lKTsKKworCXJldCA9IGVoZWFfdXAoZGV2KTsKKwlpZiAoIXJldCkKKwkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCXVwKCZwb3J0LT5wb3J0X2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0LCBpOworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKHBvcnQtPnN0YXRlID09IEVIRUFfUE9SVF9ET1dOKQorCQlyZXR1cm4gMDsKKworCWVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOworCWVoZWFfZnJlZV9pbnRlcnJ1cHRzKGRldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2RlZl9xcHMgKyBwb3J0LT5udW1fYWRkX3R4X3FwczsgaSsrKQorCQl0YXNrbGV0X2tpbGwoJnBvcnQtPnBvcnRfcmVzW2ldLnNlbmRfY29tcF90YXNrKTsKKworCWVoZWFfYnJvYWRjYXN0X3JlZ19oZWxwZXIocG9ydCwgSF9ERVJFR19CQ01DKTsKKwlyZXQgPSBlaGVhX2NsZWFuX2FsbF9wb3J0cmVzKHBvcnQpOworCXBvcnQtPnN0YXRlID0gRUhFQV9QT1JUX0RPV047CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBlaGVhX3BvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5ldGlmX21zZ19pZmRvd24ocG9ydCkpCisJCWVoZWFfaW5mbygiZGlzYWJsaW5nIHBvcnQgJXMiLCBkZXYtPm5hbWUpOworCisJZmx1c2hfd29ya3F1ZXVlKHBvcnQtPmFkYXB0ZXItPmVoZWFfd3EpOworCWRvd24oJnBvcnQtPnBvcnRfbG9jayk7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCXJldCA9IGVoZWFfZG93bihkZXYpOworCXVwKCZwb3J0LT5wb3J0X2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfcmVzZXRfcG9ydCh2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisKKwlwb3J0LT5yZXNldHMrKzsKKwlkb3duKCZwb3J0LT5wb3J0X2xvY2spOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwluZXRpZl9wb2xsX2Rpc2FibGUoZGV2KTsKKworCXJldCA9IGVoZWFfZG93bihkZXYpOworCWlmIChyZXQpCisJCWVoZWFfZXJyb3IoImVoZWFfZG93biBmYWlsZWQuIG5vdCBhbGwgcmVzb3VyY2VzIGFyZSBmcmVlZCIpOworCisJcmV0ID0gZWhlYV91cChkZXYpOworCWlmIChyZXQpIHsKKwkJZWhlYV9lcnJvcigiUmVzZXQgZGV2aWNlICVzIGZhaWxlZDogcmV0PSVkIiwgZGV2LT5uYW1lLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAobmV0aWZfbXNnX3RpbWVyKHBvcnQpKQorCQllaGVhX2luZm8oIkRldmljZSAlcyByZXNldHRlZCBzdWNjZXNzZnVsbHkiLCBkZXYtPm5hbWUpOworCisJbmV0aWZfcG9sbF9lbmFibGUoZGV2KTsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7CitvdXQ6CisJdXAoJnBvcnQtPnBvcnRfbG9jayk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBlaGVhX3R4X3dhdGNoZG9nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydCA9IG5ldGRldl9wcml2KGRldik7CisKKwlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKQorCQlxdWV1ZV93b3JrKHBvcnQtPmFkYXB0ZXItPmVoZWFfd3EsICZwb3J0LT5yZXNldF90YXNrKTsKK30KKworaW50IGVoZWFfc2Vuc2VfYWRhcHRlcl9hdHRyKHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGhjcF9xdWVyeV9laGVhICpjYjsKKwl1NjQgaHJldDsKKwlpbnQgcmV0OworCisJY2IgPSBremFsbG9jKEhfQ0JfQUxJR05NRU5ULCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNiKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWhyZXQgPSBlaGVhX2hfcXVlcnlfZWhlYShhZGFwdGVyLT5oYW5kbGUsIGNiKTsKKworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgeworCQlyZXQgPSAtRUlPOworCQlnb3RvIG91dF9oZXJyOworCX0KKworCWFkYXB0ZXItPm51bV9wb3J0cyA9IGNiLT5udW1fcG9ydHM7CisJYWRhcHRlci0+bWF4X21jX21hYyA9IGNiLT5tYXhfbWNfbWFjIC0gMTsKKwlyZXQgPSAwOworCitvdXRfaGVycjoKKwlrZnJlZShjYik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX3NldHVwX3NpbmdsZV9wb3J0KHN0cnVjdCBlaGVhX3BvcnQgKnBvcnQsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQoreworCWludCByZXQ7CisJdTY0IGhyZXQ7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBvcnQtPm5ldGRldjsKKwlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKKwlzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjQgKmNiNDsKKwl1MzIgKmRuX2xvZ19wb3J0X2lkOworCisJc2VtYV9pbml0KCZwb3J0LT5wb3J0X2xvY2ssIDEpOworCXBvcnQtPnN0YXRlID0gRUhFQV9QT1JUX0RPV047CisJcG9ydC0+c2lnX2NvbXBfaXYgPSBzcV9lbnRyaWVzIC8gMTA7CisKKwlpZiAoIWRuKSB7CisJCWVoZWFfZXJyb3IoImJhZCBkZXZpY2Ugbm9kZTogZG49JXAiLCBkbik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXBvcnQtPm9mX2Rldl9ub2RlID0gZG47CisKKwkvKiBEZXRlcm1pbmUgbG9naWNhbCBwb3J0IGlkICovCisJZG5fbG9nX3BvcnRfaWQgPSAodTMyKilnZXRfcHJvcGVydHkoZG4sICJpYm0saGVhLXBvcnQtbm8iLCBOVUxMKTsKKworCWlmICghZG5fbG9nX3BvcnRfaWQpIHsKKwkJZWhlYV9lcnJvcigiYmFkIGRldmljZSBub2RlOiBkbl9sb2dfcG9ydF9pZD0lcCIsCisJCQkgICBkbl9sb2dfcG9ydF9pZCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwlwb3J0LT5sb2dpY2FsX3BvcnRfaWQgPSAqZG5fbG9nX3BvcnRfaWQ7CisKKwlwb3J0LT5tY19saXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVoZWFfbWNfbGlzdCksIEdGUF9LRVJORUwpOworCWlmICghcG9ydC0+bWNfbGlzdCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmcG9ydC0+bWNfbGlzdC0+bGlzdCk7CisKKwllaGVhX3NldF9wb3J0c3BlZWQocG9ydCwgRUhFQV9TUEVFRF9BVVRPTkVHKTsKKworCXJldCA9IGVoZWFfc2Vuc2VfcG9ydF9hdHRyKHBvcnQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0OworCisJLyogRW5hYmxlIEp1bWJvIGZyYW1lcyAqLworCWNiNCA9IGt6YWxsb2MoSF9DQl9BTElHTk1FTlQsIEdGUF9LRVJORUwpOworCWlmICghY2I0KSB7CisJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY2I0Iik7CisJfSBlbHNlIHsKKwkJY2I0LT5qdW1ib19mcmFtZSA9IDE7CisJCWhyZXQgPSBlaGVhX2hfbW9kaWZ5X2VoZWFfcG9ydChhZGFwdGVyLT5oYW5kbGUsCisJCQkJCSAgICAgICBwb3J0LT5sb2dpY2FsX3BvcnRfaWQsCisJCQkJCSAgICAgICBIX1BPUlRfQ0I0LCBIX1BPUlRfQ0I0X0pVTUJPLAorCQkJCQkgICAgICAgY2I0KTsKKwkJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCQllaGVhX2luZm8oIkp1bWJvIGZyYW1lcyBub3QgYWN0aXZhdGVkIik7CisJCX0KKwkJa2ZyZWUoY2I0KTsKKwl9CisKKwkvKiBpbml0aWFsaXplIG5ldF9kZXZpY2Ugc3RydWN0dXJlICovCisJU0VUX01PRFVMRV9PV05FUihkZXYpOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsICZwb3J0LT5tYWNfYWRkciwgRVRIX0FMRU4pOworCisJZGV2LT5vcGVuID0gZWhlYV9vcGVuOworCWRldi0+cG9sbCA9IGVoZWFfcG9sbDsKKwlkZXYtPndlaWdodCA9IDY0OworCWRldi0+c3RvcCA9IGVoZWFfc3RvcDsKKwlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGVoZWFfc3RhcnRfeG1pdDsKKwlkZXYtPmdldF9zdGF0cyA9IGVoZWFfZ2V0X3N0YXRzOworCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZWhlYV9zZXRfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5zZXRfbWFjX2FkZHJlc3MgPSBlaGVhX3NldF9tYWNfYWRkcjsKKwlkZXYtPmNoYW5nZV9tdHUgPSBlaGVhX2NoYW5nZV9tdHU7CisJZGV2LT52bGFuX3J4X3JlZ2lzdGVyID0gZWhlYV92bGFuX3J4X3JlZ2lzdGVyOworCWRldi0+dmxhbl9yeF9hZGRfdmlkID0gZWhlYV92bGFuX3J4X2FkZF92aWQ7CisJZGV2LT52bGFuX3J4X2tpbGxfdmlkID0gZWhlYV92bGFuX3J4X2tpbGxfdmlkOworCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwgTkVUSUZfRl9GUkFHTElTVCB8IE5FVElGX0ZfVFNPCisJCSAgICAgIHwgTkVUSUZfRl9ISUdIRE1BIHwgTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9IV19WTEFOX1RYCisJCSAgICAgIHwgTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9IV19WTEFOX0ZJTFRFUgorCQkgICAgICB8IE5FVElGX0ZfTExUWDsKKwlkZXYtPnR4X3RpbWVvdXQgPSAmZWhlYV90eF93YXRjaGRvZzsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gRUhFQV9XQVRDSF9ET0dfVElNRU9VVDsKKworCUlOSVRfV09SSygmcG9ydC0+cmVzZXRfdGFzaywgZWhlYV9yZXNldF9wb3J0LCBkZXYpOworCisJZWhlYV9zZXRfZXRodG9vbF9vcHMoZGV2KTsKKworCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChyZXQpIHsKKwkJZWhlYV9lcnJvcigicmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZC4gcmV0PSVkIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlwb3J0LT5uZXRkZXYgPSBkZXY7CisJcmV0ID0gMDsKKwlnb3RvIG91dDsKKworb3V0X2ZyZWU6CisJa2ZyZWUocG9ydC0+bWNfbGlzdCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBlaGVhX3NldHVwX3BvcnRzKHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJldDsKKwlpbnQgcG9ydF9zZXR1cF9vayA9IDA7CisJc3RydWN0IGVoZWFfcG9ydCAqcG9ydDsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gTlVMTDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBpOworCisJLyogZ2V0IHBvcnQgcHJvcGVydGllcyBmb3IgYWxsIHBvcnRzICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9wb3J0czsgaSsrKSB7CisKKwkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCisJCQljb250aW51ZTsJLyogcG9ydCBhbHJlYWR5IHVwIGFuZCBydW5uaW5nICovCisKKwkJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgcG9ydCBzdHJ1Y3R1cmVzICovCisJCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZWhlYV9wb3J0KSk7CisKKwkJaWYgKCFkZXYpIHsKKwkJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgbmV0X2RldmljZSIpOworCQkJYnJlYWs7CisJCX0KKworCQlwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwkJcG9ydC0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCXBvcnQtPm5ldGRldiA9IGRldjsKKwkJYWRhcHRlci0+cG9ydFtpXSA9IHBvcnQ7CisJCXBvcnQtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChtc2dfbGV2ZWwsIEVIRUFfTVNHX0RFRkFVTFQpOworCisJCWRuID0gb2ZfZmluZF9ub2RlX2J5X25hbWUoZG4sICJldGhlcm5ldCIpOworCQlyZXQgPSBlaGVhX3NldHVwX3NpbmdsZV9wb3J0KHBvcnQsIGRuKTsKKwkJaWYgKHJldCkgeworCQkJLyogRnJlZSBtZW0gZm9yIHRoaXMgcG9ydCBzdHJ1Y3QuIFRoZSBvdGhlcnMgd2lsbCBiZQorCQkJICAgcHJvY2Vzc2VkIG9uIHJvbGxiYWNrICovCisJCQlmcmVlX25ldGRldihkZXYpOworCQkJYWRhcHRlci0+cG9ydFtpXSA9IE5VTEw7CisJCQllaGVhX2Vycm9yKCJlSEVBIHBvcnQgJWQgc2V0dXAgZmFpbGVkLCByZXQ9JWQiLCBpLCByZXQpOworCQl9CisJfQorCisJb2Zfbm9kZV9wdXQoZG4pOworCisJLyogQ2hlY2sgZm9yIHN1Y2Nlc2Z1bGx5IHNldCB1cCBwb3J0cyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcG9ydHM7IGkrKykKKwkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pCisJCQlwb3J0X3NldHVwX29rKys7CisKKwlpZiAocG9ydF9zZXR1cF9vaykKKwkJcmV0ID0gMDsJLyogQXQgbGVhc3Qgc29tZSBwb3J0cyBhcmUgc2V0dXAgY29ycmVjdGx5ICovCisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZWhlYV9wcm9iZShzdHJ1Y3QgaWJtZWJ1c19kZXYgKmRldiwKKwkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyOworCXU2NCAqYWRhcHRlcl9oYW5kbGU7CisJaW50IHJldDsKKworCWFkYXB0ZXIgPSBremFsbG9jKHNpemVvZigqYWRhcHRlciksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZkZXYtPm9mZGV2LmRldiwgIm5vIG1lbSBmb3IgZWhlYV9hZGFwdGVyXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJYWRhcHRlcl9oYW5kbGUgPSAodTY0KilnZXRfcHJvcGVydHkoZGV2LT5vZmRldi5ub2RlLCAiaWJtLGhlYS1oYW5kbGUiLAorCQkJCQkgICAgTlVMTCk7CisJaWYgKCFhZGFwdGVyX2hhbmRsZSkgeworCQlkZXZfZXJyKCZkZXYtPm9mZGV2LmRldiwgImZhaWxlZCBnZXR0aW5nIGhhbmRsZSBmb3IgYWRhcHRlciIKKwkJCSIgJyVzJ1xuIiwgZGV2LT5vZmRldi5ub2RlLT5mdWxsX25hbWUpOworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlX2FkOworCX0KKworCWFkYXB0ZXItPmhhbmRsZSA9ICphZGFwdGVyX2hhbmRsZTsKKwlhZGFwdGVyLT5wZCA9IEVIRUFfUERfSUQ7CisKKwlkZXYtPm9mZGV2LmRldi5kcml2ZXJfZGF0YSA9IGFkYXB0ZXI7CisKKwlyZXQgPSBlaGVhX3JlZ19tcl9hZGFwdGVyKGFkYXB0ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmZGV2LT5vZmRldi5kZXYsICJyZWdfbXJfYWRhcHRlciBmYWlsZWRcbiIpOworCQlnb3RvIG91dF9mcmVlX2FkOworCX0KKworCS8qIGluaXRpYWxpemUgYWRhcHRlciBhbmQgcG9ydHMgKi8KKwkvKiBnZXQgYWRhcHRlciBwcm9wZXJ0aWVzICovCisJcmV0ID0gZWhlYV9zZW5zZV9hZGFwdGVyX2F0dHIoYWRhcHRlcik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZkZXYtPm9mZGV2LmRldiwgInNlbnNlX2FkYXB0ZXJfYXR0ciBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXRfZnJlZV9yZXM7CisJfQorCWRldl9pbmZvKCZkZXYtPm9mZGV2LmRldiwgIiVkIGVIRUEgcG9ydHMgZm91bmRcbiIsIGFkYXB0ZXItPm51bV9wb3J0cyk7CisKKwlhZGFwdGVyLT5uZXEgPSBlaGVhX2NyZWF0ZV9lcShhZGFwdGVyLAorCQkJCSAgICAgIEVIRUFfTkVRLCBFSEVBX01BWF9FTlRSSUVTX0VRLCAxKTsKKwlpZiAoIWFkYXB0ZXItPm5lcSkgeworCQlkZXZfZXJyKCZkZXYtPm9mZGV2LmRldiwgIk5FUSBjcmVhdGlvbiBmYWlsZWQiKTsKKwkJZ290byBvdXRfZnJlZV9yZXM7CisJfQorCisJdGFza2xldF9pbml0KCZhZGFwdGVyLT5uZXFfdGFza2xldCwgZWhlYV9uZXFfdGFza2xldCwKKwkJICAgICAodW5zaWduZWQgbG9uZylhZGFwdGVyKTsKKworCXJldCA9IGlibWVidXNfcmVxdWVzdF9pcnEoTlVMTCwgYWRhcHRlci0+bmVxLT5hdHRyLmlzdDEsCisJCQkJICBlaGVhX2ludGVycnVwdF9uZXEsIFNBX0lOVEVSUlVQVCwKKwkJCQkgICJlaGVhX25lcSIsIGFkYXB0ZXIpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmZGV2LT5vZmRldi5kZXYsICJyZXF1ZXN0aW5nIE5FUSBJUlEgZmFpbGVkIik7CisJCWdvdG8gb3V0X2tpbGxfZXE7CisJfQorCisJYWRhcHRlci0+ZWhlYV93cSA9IGNyZWF0ZV93b3JrcXVldWUoImVoZWFfd3EiKTsKKwlpZiAoIWFkYXB0ZXItPmVoZWFfd3EpCisJCWdvdG8gb3V0X2ZyZWVfaXJxOworCisJcmV0ID0gZWhlYV9zZXR1cF9wb3J0cyhhZGFwdGVyKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJmRldi0+b2ZkZXYuZGV2LCAic2V0dXBfcG9ydHMgZmFpbGVkIik7CisJCWdvdG8gb3V0X2tpbGxfd3E7CisJfQorCisJcmV0ID0gMDsKKwlnb3RvIG91dDsKKworb3V0X2tpbGxfd3E6CisJZGVzdHJveV93b3JrcXVldWUoYWRhcHRlci0+ZWhlYV93cSk7CisKK291dF9mcmVlX2lycToKKwlpYm1lYnVzX2ZyZWVfaXJxKE5VTEwsIGFkYXB0ZXItPm5lcS0+YXR0ci5pc3QxLCBhZGFwdGVyKTsKKworb3V0X2tpbGxfZXE6CisJZWhlYV9kZXN0cm95X2VxKGFkYXB0ZXItPm5lcSk7CisKK291dF9mcmVlX3JlczoKKwllaGVhX2hfZnJlZV9yZXNvdXJjZShhZGFwdGVyLT5oYW5kbGUsIGFkYXB0ZXItPm1yLmhhbmRsZSk7CisKK291dF9mcmVlX2FkOgorCWtmcmVlKGFkYXB0ZXIpOworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGVoZWFfc2h1dGRvd25fc2luZ2xlX3BvcnQoc3RydWN0IGVoZWFfcG9ydCAqcG9ydCkKK3sKKwl1bnJlZ2lzdGVyX25ldGRldihwb3J0LT5uZXRkZXYpOworCWtmcmVlKHBvcnQtPm1jX2xpc3QpOworCWZyZWVfbmV0ZGV2KHBvcnQtPm5ldGRldik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IGVoZWFfcmVtb3ZlKHN0cnVjdCBpYm1lYnVzX2RldiAqZGV2KQoreworCXN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPm9mZGV2LmRldi5kcml2ZXJfZGF0YTsKKwl1NjQgaHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcG9ydHM7IGkrKykKKwkJaWYgKGFkYXB0ZXItPnBvcnRbaV0pIHsKKwkJCWVoZWFfc2h1dGRvd25fc2luZ2xlX3BvcnQoYWRhcHRlci0+cG9ydFtpXSk7CisJCQlhZGFwdGVyLT5wb3J0W2ldID0gTlVMTDsKKwkJfQorCWRlc3Ryb3lfd29ya3F1ZXVlKGFkYXB0ZXItPmVoZWFfd3EpOworCisJaWJtZWJ1c19mcmVlX2lycShOVUxMLCBhZGFwdGVyLT5uZXEtPmF0dHIuaXN0MSwgYWRhcHRlcik7CisKKwllaGVhX2Rlc3Ryb3lfZXEoYWRhcHRlci0+bmVxKTsKKworCWhyZXQgPSBlaGVhX2hfZnJlZV9yZXNvdXJjZShhZGFwdGVyLT5oYW5kbGUsIGFkYXB0ZXItPm1yLmhhbmRsZSk7CisJaWYgKGhyZXQpIHsKKwkJZGV2X2VycigmZGV2LT5vZmRldi5kZXYsICJmcmVlX3Jlc291cmNlX21yIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJa2ZyZWUoYWRhcHRlcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfbW9kdWxlX3Bhcm0odm9pZCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmICgocnExX2VudHJpZXMgPCBFSEVBX01JTl9FTlRSSUVTX1FQKSB8fAorCSAgICAocnExX2VudHJpZXMgPiBFSEVBX01BWF9FTlRSSUVTX1JRMSkpIHsKKwkJZWhlYV9pbmZvKCJCYWQgcGFyYW1ldGVyOiBycTFfZW50cmllcyIpOworCQlyZXQgPSAtRUlOVkFMOworCX0KKwlpZiAoKHJxMl9lbnRyaWVzIDwgRUhFQV9NSU5fRU5UUklFU19RUCkgfHwKKwkgICAgKHJxMl9lbnRyaWVzID4gRUhFQV9NQVhfRU5UUklFU19SUTIpKSB7CisJCWVoZWFfaW5mbygiQmFkIHBhcmFtZXRlcjogcnEyX2VudHJpZXMiKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJaWYgKChycTNfZW50cmllcyA8IEVIRUFfTUlOX0VOVFJJRVNfUVApIHx8CisJICAgIChycTNfZW50cmllcyA+IEVIRUFfTUFYX0VOVFJJRVNfUlEzKSkgeworCQllaGVhX2luZm8oIkJhZCBwYXJhbWV0ZXI6IHJxM19lbnRyaWVzIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCWlmICgoc3FfZW50cmllcyA8IEVIRUFfTUlOX0VOVFJJRVNfUVApIHx8CisJICAgIChzcV9lbnRyaWVzID4gRUhFQV9NQVhfRU5UUklFU19TUSkpIHsKKwkJZWhlYV9pbmZvKCJCYWQgcGFyYW1ldGVyOiBzcV9lbnRyaWVzIik7CisJCXJldCA9IC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgZWhlYV9kZXZpY2VfdGFibGVbXSA9IHsKKwl7CisJCS5uYW1lID0gImxoZWEiLAorCQkuY29tcGF0aWJsZSA9ICJJQk0sbGhlYSIsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaWJtZWJ1c19kcml2ZXIgZWhlYV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZWhlYSIsCisJLmlkX3RhYmxlID0gZWhlYV9kZXZpY2VfdGFibGUsCisJLnByb2JlID0gZWhlYV9wcm9iZSwKKwkucmVtb3ZlID0gZWhlYV9yZW1vdmUsCit9OworCitpbnQgX19pbml0IGVoZWFfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiSUJNIGVIRUEgZXRoZXJuZXQgZGV2aWNlIGRyaXZlciAoUmVsZWFzZSAlcylcbiIsCisJICAgICAgIERSVl9WRVJTSU9OKTsKKworCXJldCA9IGNoZWNrX21vZHVsZV9wYXJtKCk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0ID0gaWJtZWJ1c19yZWdpc3Rlcl9kcml2ZXIoJmVoZWFfZHJpdmVyKTsKKwlpZiAocmV0KQorCQllaGVhX2Vycm9yKCJmYWlsZWQgcmVnaXN0ZXJpbmcgZUhFQSBkZXZpY2UgZHJpdmVyIG9uIGVidXMiKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBlaGVhX21vZHVsZV9leGl0KHZvaWQpCit7CisJaWJtZWJ1c191bnJlZ2lzdGVyX2RyaXZlcigmZWhlYV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChlaGVhX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGVoZWFfbW9kdWxlX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE4NWFjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmMKQEAgLTAsMCArMSw3MDUgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9uZXQvZWhlYS9laGVhX3BoeXAuYworICoKKyAqICBlSEVBIGV0aGVybmV0IGRldmljZSBkcml2ZXIgZm9yIElCTSBlU2VydmVyIFN5c3RlbSBwCisgKgorICogIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDYKKyAqCisgKiAgQXV0aG9yczoKKyAqICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgSmFuLUJlcm5kIFRoZW1hbm4gPHRoZW1hbm5AZGUuaWJtLmNvbT4KKyAqICAgICAgIFRob21hcyBLbGVpbiA8dGtsZWluQGRlLmlibS5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJlaGVhX3BoeXAuaCIKKworCitzdGF0aWMgaW5saW5lIHUxNiBnZXRfb3JkZXJfb2ZfcWVudHJpZXModTE2IHF1ZXVlX2VudHJpZXMpCit7CisJdTggbGQgPSAxOwkJLyogIGxvZ2FyaXRobXVzIGR1YWxpcyAqLworCXdoaWxlICgoKDFVIDw8IGxkKSAtIDEpIDwgcXVldWVfZW50cmllcykKKwkJbGQrKzsKKwlyZXR1cm4gbGQgLSAxOworfQorCisvKiBEZWZpbmVzIGZvciBIX0NBTEwgSF9BTExPQ19SRVNPVVJDRSAqLworI2RlZmluZSBIX0FMTF9SRVNfVFlQRV9RUCAgICAgICAgMQorI2RlZmluZSBIX0FMTF9SRVNfVFlQRV9DUSAgICAgICAgMgorI2RlZmluZSBIX0FMTF9SRVNfVFlQRV9FUSAgICAgICAgMworI2RlZmluZSBIX0FMTF9SRVNfVFlQRV9NUiAgICAgICAgNQorI2RlZmluZSBIX0FMTF9SRVNfVFlQRV9NVyAgICAgICAgNgorCitzdGF0aWMgbG9uZyBlaGVhX2hjYWxsXzlhcmdfOXJldCh1bnNpZ25lZCBsb25nIG9wY29kZSwKKyAgICAgICAgIAkJCSB1bnNpZ25lZCBsb25nIGFyZzEsIHVuc2lnbmVkIGxvbmcgYXJnMiwKKyAgICAgICAgIAkJCSB1bnNpZ25lZCBsb25nIGFyZzMsIHVuc2lnbmVkIGxvbmcgYXJnNCwKKyAgICAgICAgIAkJCSB1bnNpZ25lZCBsb25nIGFyZzUsIHVuc2lnbmVkIGxvbmcgYXJnNiwKKyAgICAgICAgIAkJCSB1bnNpZ25lZCBsb25nIGFyZzcsIHVuc2lnbmVkIGxvbmcgYXJnOCwKKyAgICAgICAgIAkJCSB1bnNpZ25lZCBsb25nIGFyZzksIHVuc2lnbmVkIGxvbmcgKm91dDEsCisgICAgICAgICAJCQkgdW5zaWduZWQgbG9uZyAqb3V0Mix1bnNpZ25lZCBsb25nICpvdXQzLAorICAgICAgICAgCQkJIHVuc2lnbmVkIGxvbmcgKm91dDQsdW5zaWduZWQgbG9uZyAqb3V0NSwKKyAgICAgICAgIAkJCSB1bnNpZ25lZCBsb25nICpvdXQ2LHVuc2lnbmVkIGxvbmcgKm91dDcsCisgICAgICAgICAJCQkgdW5zaWduZWQgbG9uZyAqb3V0OCx1bnNpZ25lZCBsb25nICpvdXQ5KQoreworCWxvbmcgaHJldDsKKwlpbnQgaSwgc2xlZXBfbXNlY3M7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWhyZXQgPSBwbHBhcl9oY2FsbF85YXJnXzlyZXQob3Bjb2RlLGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsCisJCQkJCSAgICAgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCwgYXJnOSwgb3V0MSwKKwkJCQkJICAgICBvdXQyLCBvdXQzLCBvdXQ0LCBvdXQ1LCBvdXQ2LCBvdXQ3LAorCQkJCQkgICAgIG91dDgsIG91dDkpOworCQlpZiAoSF9JU19MT05HX0JVU1koaHJldCkpIHsKKwkJCXNsZWVwX21zZWNzID0gZ2V0X2xvbmdidXN5X21zZWNzKGhyZXQpOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoc2xlZXBfbXNlY3MpOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoaHJldCA8IEhfU1VDQ0VTUykKKwkJCWVoZWFfZXJyb3IoIm9wPSVseCBocmV0PSVseCAiCisJCQkJICAgImkxPSVseCBpMj0lbHggaTM9JWx4IGk0PSVseCBpNT0lbHggaTY9JWx4ICIKKwkJCQkgICAiaTc9JWx4IGk4PSVseCBpOT0lbHggIgorCQkJCSAgICJvMT0lbHggbzI9JWx4IG8zPSVseCBvND0lbHggbzU9JWx4IG82PSVseCAiCisJCQkJICAgIm83PSVseCBvOD0lbHggbzk9JWx4IiwKKwkJCQkgICBvcGNvZGUsIGhyZXQsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsCisJCQkJICAgYXJnNiwgYXJnNywgYXJnOCwgYXJnOSwgKm91dDEsICpvdXQyLCAqb3V0MywKKwkJCQkgICAqb3V0NCwgKm91dDUsICpvdXQ2LCAqb3V0NywgKm91dDgsICpvdXQ5KTsKKwkJcmV0dXJuIGhyZXQ7CisJfQorCXJldHVybiBIX0JVU1k7Cit9CisKK3U2NCBlaGVhX2hfcXVlcnlfZWhlYV9xcChjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU4IHFwX2NhdGVnb3J5LAorCQkJIGNvbnN0IHU2NCBxcF9oYW5kbGUsIGNvbnN0IHU2NCBzZWxfbWFzaywgdm9pZCAqY2JfYWRkcikKK3sKKwl1NjQgZHVtbXk7CisKKwlpZiAoKCgodTY0KWNiX2FkZHIpICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB7CisJCWVoZWFfZXJyb3IoIm5vdCBvbiBwYWdlYm91bmRhcnkiKTsKKwkJcmV0dXJuIEhfUEFSQU1FVEVSOworCX0KKworCXJldHVybiBlaGVhX2hjYWxsXzlhcmdfOXJldChIX1FVRVJZX0hFQV9RUCwKKwkJCQkgICAgYWRhcHRlcl9oYW5kbGUsCSAgICAgICAgLyogUjQgKi8KKwkJCQkgICAgcXBfY2F0ZWdvcnksCSAgICAgICAgLyogUjUgKi8KKwkJCQkgICAgcXBfaGFuZGxlLAkgICAgICAgICAgICAgICAgLyogUjYgKi8KKwkJCQkgICAgc2VsX21hc2ssCSAgICAgICAgICAgICAgICAvKiBSNyAqLworCQkJCSAgICB2aXJ0X3RvX2FicyhjYl9hZGRyKSwJLyogUjggKi8KKwkJCQkgICAgMCwgMCwgMCwgMCwJICAgICAgICAgICAgICAgIC8qIFI5LVIxMiAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgICAgICAgLyogUjQgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAgICAgIC8qIFI1ICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFI2ICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFI3ICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFI4ICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFI5ICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFIxMCAqLworCQkJCSAgICAmZHVtbXksCSAgICAgICAgICAgICAgICAvKiBSMTEgKi8KKwkJCQkgICAgJmR1bW15KTsJICAgICAgICAgICAgICAgIC8qIFIxMiAqLworfQorCisvKiBpbnB1dCBwYXJhbSBSNSAqLworI2RlZmluZSBIX0FMTF9SRVNfUVBfRVFQTyAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDksIDExKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfUVBQICAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDEyLCAxMikKKyNkZWZpbmUgSF9BTExfUkVTX1FQX1JRUiAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgxMywgMTUpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9FUUVHICAgICAgICAgRUhFQV9CTUFTS19JQk0oMTYsIDE2KQorI2RlZmluZSBIX0FMTF9SRVNfUVBfTExfUVAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDE3LCAxNykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0RNQTEyOCAgICAgICBFSEVBX0JNQVNLX0lCTSgxOSwgMTkpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9IU00gICAgICAgICAgRUhFQV9CTUFTS19JQk0oMjAsIDIxKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfU0lHVCAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDIyLCAyMykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX1RFTlVSRSAgICAgICBFSEVBX0JNQVNLX0lCTSg0OCwgNTUpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9SRVNfVFlQICAgICAgRUhFQV9CTUFTS19JQk0oNTYsIDYzKQorCisvKiBpbnB1dCBwYXJhbSBSOSAgKi8KKyNkZWZpbmUgSF9BTExfUkVTX1FQX1RPS0VOICAgICAgICBFSEVBX0JNQVNLX0lCTSgwLCAzMSkKKyNkZWZpbmUgSF9BTExfUkVTX1FQX1BEICAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgzMiw2MykKKworLyogaW5wdXQgcGFyYW0gUjEwICovCisjZGVmaW5lIEhfQUxMX1JFU19RUF9NQVhfU1dRRSAgICAgRUhFQV9CTUFTS19JQk0oNCwgNykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX01BWF9SMVdRRSAgICBFSEVBX0JNQVNLX0lCTSgxMiwgMTUpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9NQVhfUjJXUUUgICAgRUhFQV9CTUFTS19JQk0oMjAsIDIzKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfTUFYX1IzV1FFICAgIEVIRUFfQk1BU0tfSUJNKDI4LCAzMSkKKy8qIE1heCBTZW5kIFNjYXR0ZXIgR2F0aGVyIEVsZW1lbnRzICovCisjZGVmaW5lIEhfQUxMX1JFU19RUF9NQVhfU1NHRSAgICAgRUhFQV9CTUFTS19JQk0oMzcsIDM5KQorI2RlZmluZSBIX0FMTF9SRVNfUVBfTUFYX1IxU0dFICAgIEVIRUFfQk1BU0tfSUJNKDQ1LCA0NykKKy8qIE1heCBSZWNlaXZlIFNHIEVsZW1lbnRzIFJRMSAqLworI2RlZmluZSBIX0FMTF9SRVNfUVBfTUFYX1IyU0dFICAgIEVIRUFfQk1BU0tfSUJNKDUzLCA1NSkKKyNkZWZpbmUgSF9BTExfUkVTX1FQX01BWF9SM1NHRSAgICBFSEVBX0JNQVNLX0lCTSg2MSwgNjMpCisKKy8qIGlucHV0IHBhcmFtIFIxMSAqLworI2RlZmluZSBIX0FMTF9SRVNfUVBfU1dRRV9JREwgICAgIEVIRUFfQk1BU0tfSUJNKDAsIDcpCisvKiBtYXggc3dxZSBpbW1lZGlhdGUgZGF0YSBsZW5ndGggKi8KKyNkZWZpbmUgSF9BTExfUkVTX1FQX1BPUlRfTlVNICAgICBFSEVBX0JNQVNLX0lCTSg0OCwgNjMpCisKKy8qIGlucHV0IHBhcmFtIFIxMiAqLworI2RlZmluZSBIX0FMTF9SRVNfUVBfVEhfUlEyICAgICAgIEVIRUFfQk1BU0tfSUJNKDAsIDE1KQorLyogVGhyZXNob2xkIFJRMiAqLworI2RlZmluZSBIX0FMTF9SRVNfUVBfVEhfUlEzICAgICAgIEVIRUFfQk1BU0tfSUJNKDE2LCAzMSkKKy8qIFRocmVzaG9sZCBSUTMgKi8KKworLyogb3V0cHV0IHBhcmFtIFI2ICovCisjZGVmaW5lIEhfQUxMX1JFU19RUF9BQ1RfU1dRRSAgICAgRUhFQV9CTUFTS19JQk0oMCwgMTUpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9BQ1RfUjFXUUUgICAgRUhFQV9CTUFTS19JQk0oMTYsIDMxKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfQUNUX1IyV1FFICAgIEVIRUFfQk1BU0tfSUJNKDMyLCA0NykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0FDVF9SM1dRRSAgICBFSEVBX0JNQVNLX0lCTSg0OCwgNjMpCisKKy8qIG91dHB1dCBwYXJhbSwgUjcgKi8KKyNkZWZpbmUgSF9BTExfUkVTX1FQX0FDVF9TU0dFICAgICBFSEVBX0JNQVNLX0lCTSgwLCA3KQorI2RlZmluZSBIX0FMTF9SRVNfUVBfQUNUX1IxU0dFICAgIEVIRUFfQk1BU0tfSUJNKDgsIDE1KQorI2RlZmluZSBIX0FMTF9SRVNfUVBfQUNUX1IyU0dFICAgIEVIRUFfQk1BU0tfSUJNKDE2LCAyMykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0FDVF9SM1NHRSAgICBFSEVBX0JNQVNLX0lCTSgyNCwgMzEpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9BQ1RfU1dRRV9JREwgRUhFQV9CTUFTS19JQk0oMzIsIDM5KQorCisvKiBvdXRwdXQgcGFyYW0gUjgsUjkgKi8KKyNkZWZpbmUgSF9BTExfUkVTX1FQX1NJWkVfU1EgICAgICBFSEVBX0JNQVNLX0lCTSgwLCAzMSkKKyNkZWZpbmUgSF9BTExfUkVTX1FQX1NJWkVfUlExICAgICBFSEVBX0JNQVNLX0lCTSgzMiwgNjMpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9TSVpFX1JRMiAgICAgRUhFQV9CTUFTS19JQk0oMCwgMzEpCisjZGVmaW5lIEhfQUxMX1JFU19RUF9TSVpFX1JRMyAgICAgRUhFQV9CTUFTS19JQk0oMzIsIDYzKQorCisvKiBvdXRwdXQgcGFyYW0gUjExLFIxMiAqLworI2RlZmluZSBIX0FMTF9SRVNfUVBfTElPQk5fU1EgICAgIEVIRUFfQk1BU0tfSUJNKDAsIDMxKQorI2RlZmluZSBIX0FMTF9SRVNfUVBfTElPQk5fUlExICAgIEVIRUFfQk1BU0tfSUJNKDMyLCA2MykKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0xJT0JOX1JRMiAgICBFSEVBX0JNQVNLX0lCTSgwLCAzMSkKKyNkZWZpbmUgSF9BTExfUkVTX1FQX0xJT0JOX1JRMyAgICBFSEVBX0JNQVNLX0lCTSgzMiwgNjMpCisKK3U2NCBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfcXAoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciwgY29uc3QgdTMyIHBkLAorCQkJICAgICB1NjQgKnFwX2hhbmRsZSwgc3RydWN0IGhfZXBhcyAqaF9lcGFzKQoreworCXU2NCBocmV0OworCisJdTY0IGFsbG9jYXRlX2NvbnRyb2xzID0KKwkgICAgRUhFQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX0VRUE8sIGluaXRfYXR0ci0+bG93X2xhdF9ycTEgPyAxIDogMCkKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfUVBQLCAwKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9SUVIsIDYpCS8qIHJxMSAmIHJxMiAmIHJxMyAqLworCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9FUUVHLCAwKQkvKiBFUUUgZ2VuLiBkaXNhYmxlZCAqLworCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9MTF9RUCwgaW5pdF9hdHRyLT5sb3dfbGF0X3JxMSkKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfRE1BMTI4LCAwKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9IU00sIDApCisJICAgIHwgRUhFQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX1NJR1QsIGluaXRfYXR0ci0+c2lnbmFsaW5ndHlwZSkKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfUkVTX1RZUCwgSF9BTExfUkVTX1RZUEVfUVApOworCisJdTY0IHI5X3JlZyA9IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9QRCwgcGQpCisJICAgIHwgRUhFQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX1RPS0VOLCBpbml0X2F0dHItPnFwX3Rva2VuKTsKKworCXU2NCBtYXhfcjEwX3JlZyA9CisJICAgIEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfU1dRRSwKKwkJCSAgIGdldF9vcmRlcl9vZl9xZW50cmllcyhpbml0X2F0dHItPm1heF9ucl9zZW5kX3dxZXMpKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfUjFXUUUsCisJCQkgICAgIGdldF9vcmRlcl9vZl9xZW50cmllcyhpbml0X2F0dHItPm1heF9ucl9yd3Flc19ycTEpKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfUjJXUUUsCisJCQkgICAgIGdldF9vcmRlcl9vZl9xZW50cmllcyhpbml0X2F0dHItPm1heF9ucl9yd3Flc19ycTIpKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfUjNXUUUsCisJCQkgICAgIGdldF9vcmRlcl9vZl9xZW50cmllcyhpbml0X2F0dHItPm1heF9ucl9yd3Flc19ycTMpKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfU1NHRSwgaW5pdF9hdHRyLT53cWVfc2l6ZV9lbmNfc3EpCisJICAgIHwgRUhFQV9CTUFTS19TRVQoSF9BTExfUkVTX1FQX01BWF9SMVNHRSwKKwkJCSAgICAgaW5pdF9hdHRyLT53cWVfc2l6ZV9lbmNfcnExKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9NQVhfUjJTR0UsCisJCQkgICAgIGluaXRfYXR0ci0+d3FlX3NpemVfZW5jX3JxMikKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfTUFYX1IzU0dFLAorCQkJICAgICBpbml0X2F0dHItPndxZV9zaXplX2VuY19ycTMpOworCisJdTY0IHIxMV9pbiA9CisJICAgIEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9TV1FFX0lETCwgaW5pdF9hdHRyLT5zd3FlX2ltbV9kYXRhX2xlbikKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfUE9SVF9OVU0sIGluaXRfYXR0ci0+cG9ydF9ucik7CisJdTY0IHRocmVzaG9sZCA9CisJICAgIEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19RUF9USF9SUTIsIGluaXRfYXR0ci0+cnEyX3RocmVzaG9sZCkKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfUVBfVEhfUlEzLCBpbml0X2F0dHItPnJxM190aHJlc2hvbGQpOworCisJdTY0IHI1X291dCA9IDA7CisJdTY0IHI2X291dCA9IDA7CisJdTY0IHI3X291dCA9IDA7CisJdTY0IHI4X291dCA9IDA7CisJdTY0IHI5X291dCA9IDA7CisJdTY0IGdfbGFfdXNlcl9vdXQgPSAwOworCXU2NCByMTFfb3V0ID0gMDsKKwl1NjQgcjEyX291dCA9IDA7CisKKwlocmV0ID0gZWhlYV9oY2FsbF85YXJnXzlyZXQoSF9BTExPQ19IRUFfUkVTT1VSQ0UsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJLyogUjQgKi8KKwkJCQkgICAgYWxsb2NhdGVfY29udHJvbHMsCQkvKiBSNSAqLworCQkJCSAgICBpbml0X2F0dHItPnNlbmRfY3FfaGFuZGxlLAkvKiBSNiAqLworCQkJCSAgICBpbml0X2F0dHItPnJlY3ZfY3FfaGFuZGxlLAkvKiBSNyAqLworCQkJCSAgICBpbml0X2F0dHItPmFmZl9lcV9oYW5kbGUsCS8qIFI4ICovCisJCQkJICAgIHI5X3JlZywJCQkvKiBSOSAqLworCQkJCSAgICBtYXhfcjEwX3JlZywJCS8qIFIxMCAqLworCQkJCSAgICByMTFfaW4sCQkJLyogUjExICovCisJCQkJICAgIHRocmVzaG9sZCwJCQkvKiBSMTIgKi8KKwkJCQkgICAgcXBfaGFuZGxlLAkJCS8qIFI0ICovCisJCQkJICAgICZyNV9vdXQsCQkJLyogUjUgKi8KKwkJCQkgICAgJnI2X291dCwJCQkvKiBSNiAqLworCQkJCSAgICAmcjdfb3V0LAkJCS8qIFI3ICovCisJCQkJICAgICZyOF9vdXQsCQkJLyogUjggKi8KKwkJCQkgICAgJnI5X291dCwJCQkvKiBSOSAqLworCQkJCSAgICAmZ19sYV91c2VyX291dCwJCS8qIFIxMCAqLworCQkJCSAgICAmcjExX291dCwJCQkvKiBSMTEgKi8KKwkJCQkgICAgJnIxMl9vdXQpOwkJCS8qIFIxMiAqLworCisJaW5pdF9hdHRyLT5xcF9uciA9ICh1MzIpcjVfb3V0OworCisJaW5pdF9hdHRyLT5hY3RfbnJfc2VuZF93cWVzID0KKwkgICAgKHUxNilFSEVBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfQUNUX1NXUUUsIHI2X291dCk7CisJaW5pdF9hdHRyLT5hY3RfbnJfcndxZXNfcnExID0KKwkgICAgKHUxNilFSEVBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfQUNUX1IxV1FFLCByNl9vdXQpOworCWluaXRfYXR0ci0+YWN0X25yX3J3cWVzX3JxMiA9CisJICAgICh1MTYpRUhFQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0FDVF9SMldRRSwgcjZfb3V0KTsKKwlpbml0X2F0dHItPmFjdF9ucl9yd3Flc19ycTMgPQorCSAgICAodTE2KUVIRUFfQk1BU0tfR0VUKEhfQUxMX1JFU19RUF9BQ1RfUjNXUUUsIHI2X291dCk7CisKKwlpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfc3EgPSBpbml0X2F0dHItPndxZV9zaXplX2VuY19zcTsKKwlpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfcnExID0gaW5pdF9hdHRyLT53cWVfc2l6ZV9lbmNfcnExOworCWluaXRfYXR0ci0+YWN0X3dxZV9zaXplX2VuY19ycTIgPSBpbml0X2F0dHItPndxZV9zaXplX2VuY19ycTI7CisJaW5pdF9hdHRyLT5hY3Rfd3FlX3NpemVfZW5jX3JxMyA9IGluaXRfYXR0ci0+d3FlX3NpemVfZW5jX3JxMzsKKworCWluaXRfYXR0ci0+bnJfc3FfcGFnZXMgPQorCSAgICAodTMyKUVIRUFfQk1BU0tfR0VUKEhfQUxMX1JFU19RUF9TSVpFX1NRLCByOF9vdXQpOworCWluaXRfYXR0ci0+bnJfcnExX3BhZ2VzID0KKwkgICAgKHUzMilFSEVBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfU0laRV9SUTEsIHI4X291dCk7CisJaW5pdF9hdHRyLT5ucl9ycTJfcGFnZXMgPQorCSAgICAodTMyKUVIRUFfQk1BU0tfR0VUKEhfQUxMX1JFU19RUF9TSVpFX1JRMiwgcjlfb3V0KTsKKwlpbml0X2F0dHItPm5yX3JxM19wYWdlcyA9CisJICAgICh1MzIpRUhFQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX1NJWkVfUlEzLCByOV9vdXQpOworCisJaW5pdF9hdHRyLT5saW9ibl9zcSA9CisJICAgICh1MzIpRUhFQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0xJT0JOX1NRLCByMTFfb3V0KTsKKwlpbml0X2F0dHItPmxpb2JuX3JxMSA9CisJICAgICh1MzIpRUhFQV9CTUFTS19HRVQoSF9BTExfUkVTX1FQX0xJT0JOX1JRMSwgcjExX291dCk7CisJaW5pdF9hdHRyLT5saW9ibl9ycTIgPQorCSAgICAodTMyKUVIRUFfQk1BU0tfR0VUKEhfQUxMX1JFU19RUF9MSU9CTl9SUTIsIHIxMl9vdXQpOworCWluaXRfYXR0ci0+bGlvYm5fcnEzID0KKwkgICAgKHUzMilFSEVBX0JNQVNLX0dFVChIX0FMTF9SRVNfUVBfTElPQk5fUlEzLCByMTJfb3V0KTsKKworCWlmICghaHJldCkKKwkJaGNwX2VwYXNfY3RvcihoX2VwYXMsIGdfbGFfdXNlcl9vdXQsIGdfbGFfdXNlcl9vdXQpOworCisJcmV0dXJuIGhyZXQ7Cit9CisKK3U2NCBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfY3EoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgZWhlYV9jcV9hdHRyICpjcV9hdHRyLAorCQkJICAgICB1NjQgKmNxX2hhbmRsZSwgc3RydWN0IGhfZXBhcyAqZXBhcykKK3sKKwl1NjQgaHJldCwgZHVtbXksIGFjdF9ucl9vZl9jcWVzX291dCwgYWN0X3BhZ2VzX291dDsKKwl1NjQgZ19sYV9wcml2aWxlZ2VkX291dCwgZ19sYV91c2VyX291dDsKKworCWhyZXQgPSBlaGVhX2hjYWxsXzlhcmdfOXJldChIX0FMTE9DX0hFQV9SRVNPVVJDRSwKKwkJCQkgICAgYWRhcHRlcl9oYW5kbGUsCQkvKiBSNCAqLworCQkJCSAgICBIX0FMTF9SRVNfVFlQRV9DUSwJCS8qIFI1ICovCisJCQkJICAgIGNxX2F0dHItPmVxX2hhbmRsZSwJCS8qIFI2ICovCisJCQkJICAgIGNxX2F0dHItPmNxX3Rva2VuLAkJLyogUjcgKi8KKwkJCQkgICAgY3FfYXR0ci0+bWF4X25yX29mX2NxZXMsCS8qIFI4ICovCisJCQkJICAgIDAsIDAsIDAsIDAsCQkJLyogUjktUjEyICovCisJCQkJICAgIGNxX2hhbmRsZSwJCQkvKiBSNCAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjUgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI2ICovCisJCQkJICAgICZhY3RfbnJfb2ZfY3Flc19vdXQsCS8qIFI3ICovCisJCQkJICAgICZhY3RfcGFnZXNfb3V0LAkJLyogUjggKi8KKwkJCQkgICAgJmdfbGFfcHJpdmlsZWdlZF9vdXQsCS8qIFI5ICovCisJCQkJICAgICZnX2xhX3VzZXJfb3V0LAkJLyogUjEwICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFIxMSAqLworCQkJCSAgICAmZHVtbXkpOwkgICAgICAgICAgICAgICAgLyogUjEyICovCisKKwljcV9hdHRyLT5hY3RfbnJfb2ZfY3FlcyA9IGFjdF9ucl9vZl9jcWVzX291dDsKKwljcV9hdHRyLT5ucl9wYWdlcyA9IGFjdF9wYWdlc19vdXQ7CisKKwlpZiAoIWhyZXQpCisJCWhjcF9lcGFzX2N0b3IoZXBhcywgZ19sYV9wcml2aWxlZ2VkX291dCwgZ19sYV91c2VyX291dCk7CisKKwlyZXR1cm4gaHJldDsKK30KKworLyogRGVmaW5lcyBmb3IgSF9DQUxMIEhfQUxMT0NfUkVTT1VSQ0UgKi8KKyNkZWZpbmUgSF9BTExfUkVTX1RZUEVfUVAgICAgICAgIDEKKyNkZWZpbmUgSF9BTExfUkVTX1RZUEVfQ1EgICAgICAgIDIKKyNkZWZpbmUgSF9BTExfUkVTX1RZUEVfRVEgICAgICAgIDMKKyNkZWZpbmUgSF9BTExfUkVTX1RZUEVfTVIgICAgICAgIDUKKyNkZWZpbmUgSF9BTExfUkVTX1RZUEVfTVcgICAgICAgIDYKKworLyogIGlucHV0IHBhcmFtIFI1ICovCisjZGVmaW5lIEhfQUxMX1JFU19FUV9ORVEgICAgICAgICAgICAgRUhFQV9CTUFTS19JQk0oMCwgMCkKKyNkZWZpbmUgSF9BTExfUkVTX0VRX05PTl9ORVFfSVNOICAgICBFSEVBX0JNQVNLX0lCTSg2LCA3KQorI2RlZmluZSBIX0FMTF9SRVNfRVFfSU5IX0VRRV9HRU4gICAgIEVIRUFfQk1BU0tfSUJNKDE2LCAxNikKKyNkZWZpbmUgSF9BTExfUkVTX0VRX1JFU19UWVBFICAgICAgICBFSEVBX0JNQVNLX0lCTSg1NiwgNjMpCisvKiAgaW5wdXQgcGFyYW0gUjYgKi8KKyNkZWZpbmUgSF9BTExfUkVTX0VRX01BWF9FUUUgICAgICAgICBFSEVBX0JNQVNLX0lCTSgzMiwgNjMpCisKKy8qICBvdXRwdXQgcGFyYW0gUjYgKi8KKyNkZWZpbmUgSF9BTExfUkVTX0VRX0xJT0JOICAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgzMiwgNjMpCisKKy8qICBvdXRwdXQgcGFyYW0gUjcgKi8KKyNkZWZpbmUgSF9BTExfUkVTX0VRX0FDVF9FUUUgICAgICAgICBFSEVBX0JNQVNLX0lCTSgzMiwgNjMpCisKKy8qICBvdXRwdXQgcGFyYW0gUjggKi8KKyNkZWZpbmUgSF9BTExfUkVTX0VRX0FDVF9QUyAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgzMiwgNjMpCisKKy8qICBvdXRwdXQgcGFyYW0gUjkgKi8KKyNkZWZpbmUgSF9BTExfUkVTX0VRX0FDVF9FUV9JU1RfQyAgICBFSEVBX0JNQVNLX0lCTSgzMCwgMzEpCisjZGVmaW5lIEhfQUxMX1JFU19FUV9BQ1RfRVFfSVNUXzEgICAgRUhFQV9CTUFTS19JQk0oNDAsIDYzKQorCisvKiAgb3V0cHV0IHBhcmFtIFIxMCAqLworI2RlZmluZSBIX0FMTF9SRVNfRVFfQUNUX0VRX0lTVF8yICAgIEVIRUFfQk1BU0tfSUJNKDQwLCA2MykKKworLyogIG91dHB1dCBwYXJhbSBSMTEgKi8KKyNkZWZpbmUgSF9BTExfUkVTX0VRX0FDVF9FUV9JU1RfMyAgICBFSEVBX0JNQVNLX0lCTSg0MCwgNjMpCisKKy8qICBvdXRwdXQgcGFyYW0gUjEyICovCisjZGVmaW5lIEhfQUxMX1JFU19FUV9BQ1RfRVFfSVNUXzQgICAgRUhFQV9CTUFTS19JQk0oNDAsIDYzKQorCit1NjQgZWhlYV9oX2FsbG9jX3Jlc291cmNlX2VxKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoZWFfZXFfYXR0ciAqZXFfYXR0ciwgdTY0ICplcV9oYW5kbGUpCit7CisJdTY0IGhyZXQsIGR1bW15LCBlcV9saW9ibiwgYWxsb2NhdGVfY29udHJvbHM7CisJdTY0IGlzdDFfb3V0LCBpc3QyX291dCwgaXN0M19vdXQsIGlzdDRfb3V0OworCXU2NCBhY3RfbnJfb2ZfZXFlc19vdXQsIGFjdF9wYWdlc19vdXQ7CisKKwkvKiByZXNvdXJjZSB0eXBlICovCisJYWxsb2NhdGVfY29udHJvbHMgPQorCSAgICBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfRVFfUkVTX1RZUEUsIEhfQUxMX1JFU19UWVBFX0VRKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19FUV9ORVEsIGVxX2F0dHItPnR5cGUgPyAxIDogMCkKKwkgICAgfCBFSEVBX0JNQVNLX1NFVChIX0FMTF9SRVNfRVFfSU5IX0VRRV9HRU4sICFlcV9hdHRyLT5lcWVfZ2VuKQorCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfQUxMX1JFU19FUV9OT05fTkVRX0lTTiwgMSk7CisKKwlocmV0ID0gZWhlYV9oY2FsbF85YXJnXzlyZXQoSF9BTExPQ19IRUFfUkVTT1VSQ0UsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJLyogUjQgKi8KKwkJCQkgICAgYWxsb2NhdGVfY29udHJvbHMsCQkvKiBSNSAqLworCQkJCSAgICBlcV9hdHRyLT5tYXhfbnJfb2ZfZXFlcywJLyogUjYgKi8KKwkJCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwJCS8qIFI3LVIxMCAqLworCQkJCSAgICBlcV9oYW5kbGUsCQkJLyogUjQgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI1ICovCisJCQkJICAgICZlcV9saW9ibiwJCQkvKiBSNiAqLworCQkJCSAgICAmYWN0X25yX29mX2VxZXNfb3V0LAkvKiBSNyAqLworCQkJCSAgICAmYWN0X3BhZ2VzX291dCwJCS8qIFI4ICovCisJCQkJICAgICZpc3QxX291dCwJCQkvKiBSOSAqLworCQkJCSAgICAmaXN0Ml9vdXQsCQkJLyogUjEwICovCisJCQkJICAgICZpc3QzX291dCwJCQkvKiBSMTEgKi8KKwkJCQkgICAgJmlzdDRfb3V0KTsJCQkvKiBSMTIgKi8KKworCWVxX2F0dHItPmFjdF9ucl9vZl9lcWVzID0gYWN0X25yX29mX2VxZXNfb3V0OworCWVxX2F0dHItPm5yX3BhZ2VzID0gYWN0X3BhZ2VzX291dDsKKwllcV9hdHRyLT5pc3QxID0gaXN0MV9vdXQ7CisJZXFfYXR0ci0+aXN0MiA9IGlzdDJfb3V0OworCWVxX2F0dHItPmlzdDMgPSBpc3QzX291dDsKKwllcV9hdHRyLT5pc3Q0ID0gaXN0NF9vdXQ7CisKKwlyZXR1cm4gaHJldDsKK30KKwordTY0IGVoZWFfaF9tb2RpZnlfZWhlYV9xcChjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU4IGNhdCwKKwkJCSAgY29uc3QgdTY0IHFwX2hhbmRsZSwgY29uc3QgdTY0IHNlbF9tYXNrLAorCQkJICB2b2lkICpjYl9hZGRyLCB1NjQgKmludl9hdHRyX2lkLCB1NjQgKnByb2NfbWFzaywKKwkJCSAgdTE2ICpvdXRfc3dyLCB1MTYgKm91dF9yd3IpCit7CisJdTY0IGhyZXQsIGR1bW15LCBhY3Rfb3V0X3N3ciwgYWN0X291dF9yd3I7CisKKwlpZiAoKCgodTY0KWNiX2FkZHIpICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB7CisJCWVoZWFfZXJyb3IoIm5vdCBvbiBwYWdlIGJvdW5kYXJ5Iik7CisJCXJldHVybiBIX1BBUkFNRVRFUjsKKwl9CisKKwlocmV0ID0gZWhlYV9oY2FsbF85YXJnXzlyZXQoSF9NT0RJRllfSEVBX1FQLAorCQkJCSAgICBhZGFwdGVyX2hhbmRsZSwJCS8qIFI0ICovCisJCQkJICAgICh1NjQpIGNhdCwJCQkvKiBSNSAqLworCQkJCSAgICBxcF9oYW5kbGUsCQkJLyogUjYgKi8KKwkJCQkgICAgc2VsX21hc2ssCQkJLyogUjcgKi8KKwkJCQkgICAgdmlydF90b19hYnMoY2JfYWRkciksCS8qIFI4ICovCisJCQkJICAgIDAsIDAsIDAsIDAsCQkJLyogUjktUjEyICovCisJCQkJICAgIGludl9hdHRyX2lkLAkJLyogUjQgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI1ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNiAqLworCQkJCSAgICAmYWN0X291dF9zd3IsCQkvKiBSNyAqLworCQkJCSAgICAmYWN0X291dF9yd3IsCQkvKiBSOCAqLworCQkJCSAgICBwcm9jX21hc2ssCQkJLyogUjkgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFIxMCAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjExICovCisJCQkJICAgICZkdW1teSk7CQkJLyogUjEyICovCisJKm91dF9zd3IgPSBhY3Rfb3V0X3N3cjsKKwkqb3V0X3J3ciA9IGFjdF9vdXRfcndyOworCisJcmV0dXJuIGhyZXQ7Cit9CisKK3U2NCBlaGVhX2hfcmVnaXN0ZXJfcnBhZ2UoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1OCBwYWdlc2l6ZSwKKwkJCSAgY29uc3QgdTggcXVldWVfdHlwZSwgY29uc3QgdTY0IHJlc291cmNlX2hhbmRsZSwKKwkJCSAgY29uc3QgdTY0IGxvZ19wYWdlYWRkciwgdTY0IGNvdW50KQoreworCXU2NCBkdW1teSwgcmVnX2NvbnRyb2w7CisKKwlyZWdfY29udHJvbCA9IEVIRUFfQk1BU0tfU0VUKEhfUkVHX1JQQUdFX1BBR0VfU0laRSwgcGFnZXNpemUpCisJCSAgICB8IEVIRUFfQk1BU0tfU0VUKEhfUkVHX1JQQUdFX1FULCBxdWV1ZV90eXBlKTsKKworCXJldHVybiBlaGVhX2hjYWxsXzlhcmdfOXJldChIX1JFR0lTVEVSX0hFQV9SUEFHRVMsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJLyogUjQgKi8KKwkJCQkgICAgcmVnX2NvbnRyb2wsCQkvKiBSNSAqLworCQkJCSAgICByZXNvdXJjZV9oYW5kbGUsCQkvKiBSNiAqLworCQkJCSAgICBsb2dfcGFnZWFkZHIsCQkvKiBSNyAqLworCQkJCSAgICBjb3VudCwJCQkvKiBSOCAqLworCQkJCSAgICAwLCAwLCAwLCAwLAkJCS8qIFI5LVIxMiAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjQgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI1ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNiAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjcgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI4ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSOSAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjEwICovCisJCQkJICAgICZkdW1teSwJICAgICAgICAgICAgICAgIC8qIFIxMSAqLworCQkJCSAgICAmZHVtbXkpOwkgICAgICAgICAgICAgICAgLyogUjEyICovCit9CisKK3U2NCBlaGVhX2hfcmVnaXN0ZXJfc21yKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTY0IG9yaWdfbXJfaGFuZGxlLAorCQkJY29uc3QgdTY0IHZhZGRyX2luLCBjb25zdCB1MzIgYWNjZXNzX2N0cmwsIGNvbnN0IHUzMiBwZCwKKwkJCXN0cnVjdCBlaGVhX21yICptcikKK3sKKwl1NjQgaHJldCwgZHVtbXksIGxrZXlfb3V0OworCisJaHJldCA9IGVoZWFfaGNhbGxfOWFyZ185cmV0KEhfUkVHSVNURVJfU01SLAorCQkJCSAgICBhZGFwdGVyX2hhbmRsZSAgICAgICAsICAgICAgICAgIC8qIFI0ICovCisJCQkJICAgIG9yaWdfbXJfaGFuZGxlLCAgICAgICAgICAgICAgICAgLyogUjUgKi8KKwkJCQkgICAgdmFkZHJfaW4sICAgICAgICAgICAgICAgICAgICAgICAvKiBSNiAqLworCQkJCSAgICAoKCh1NjQpYWNjZXNzX2N0cmwpIDw8IDMyVUxMKSwgIC8qIFI3ICovCisJCQkJICAgIHBkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUjggKi8KKwkJCQkgICAgMCwgMCwgMCwgMCwJCQkgICAgLyogUjktUjEyICovCisJCQkJICAgICZtci0+aGFuZGxlLCAgICAgICAgICAgICAgICAgICAgLyogUjQgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSNSAqLworCQkJCSAgICAmbGtleV9vdXQsICAgICAgICAgICAgICAgICAgICAgIC8qIFI2ICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUjcgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSOCAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFI5ICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUjEwICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgICAgICAgICAgICAgLyogUjExICovCisJCQkJICAgICZkdW1teSk7ICAgICAgICAgICAgICAgICAgICAgICAgLyogUjEyICovCisJbXItPmxrZXkgPSAodTMyKWxrZXlfb3V0OworCisJcmV0dXJuIGhyZXQ7Cit9CisKK3U2NCBlaGVhX2hfZGlzYWJsZV9hbmRfZ2V0X2hlYShjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU2NCBxcF9oYW5kbGUpCit7CisJdTY0IGhyZXQsIGR1bW15LCBsYWRyX25leHRfc3Ffd3FlX291dDsKKwl1NjQgbGFkcl9uZXh0X3JxMV93cWVfb3V0LCBsYWRyX25leHRfcnEyX3dxZV9vdXQsIGxhZHJfbmV4dF9ycTNfd3FlX291dDsKKworCWhyZXQgPSBlaGVhX2hjYWxsXzlhcmdfOXJldChIX0RJU0FCTEVfQU5EX0dFVF9IRUEsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJLyogUjQgKi8KKwkJCQkgICAgSF9ESVNBQkxFX0dFVF9FSEVBX1dRRV9QLAkvKiBSNSAqLworCQkJCSAgICBxcF9oYW5kbGUsCQkJLyogUjYgKi8KKwkJCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwJCS8qIFI3LVIxMiAqLworCQkJCSAgICAmbGFkcl9uZXh0X3NxX3dxZV9vdXQsCS8qIFI0ICovCisJCQkJICAgICZsYWRyX25leHRfcnExX3dxZV9vdXQsCS8qIFI1ICovCisJCQkJICAgICZsYWRyX25leHRfcnEyX3dxZV9vdXQsCS8qIFI2ICovCisJCQkJICAgICZsYWRyX25leHRfcnEzX3dxZV9vdXQsCS8qIFI3ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSOCAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjkgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFIxMCAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgICAgICAgLyogUjExICovCisJCQkJICAgICZkdW1teSk7ICAgICAgICAgICAgICAgICAgICAvKiBSMTIgKi8KKwlyZXR1cm4gaHJldDsKK30KKwordTY0IGVoZWFfaF9mcmVlX3Jlc291cmNlKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTY0IHJlc19oYW5kbGUpCit7CisJdTY0IGR1bW15OworCisJcmV0dXJuIGVoZWFfaGNhbGxfOWFyZ185cmV0KEhfRlJFRV9SRVNPVVJDRSwKKwkJCQkgICAgYWRhcHRlcl9oYW5kbGUsCSAgIC8qIFI0ICovCisJCQkJICAgIHJlc19oYW5kbGUsICAgICAgICAgICAgLyogUjUgKi8KKwkJCQkgICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgICAvKiBSNi1SMTIgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAvKiBSNCAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgIC8qIFI1ICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgICAgLyogUjYgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAvKiBSNyAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgIC8qIFI4ICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgICAgLyogUjkgKi8KKwkJCQkgICAgJmR1bW15LAkJICAgLyogUjEwICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgICAgLyogUjExICovCisJCQkJICAgICZkdW1teSk7ICAgICAgICAgICAgICAgLyogUjEyICovCit9CisKK3U2NCBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfbXIoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1NjQgdmFkZHIsCisJCQkgICAgIGNvbnN0IHU2NCBsZW5ndGgsIGNvbnN0IHUzMiBhY2Nlc3NfY3RybCwKKwkJCSAgICAgY29uc3QgdTMyIHBkLCB1NjQgKm1yX2hhbmRsZSwgdTMyICpsa2V5KQoreworCXU2NCBocmV0LCBkdW1teSwgbGtleV9vdXQ7CisKKwlocmV0ID0gZWhlYV9oY2FsbF85YXJnXzlyZXQoSF9BTExPQ19IRUFfUkVTT1VSQ0UsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJICAgLyogUjQgKi8KKwkJCQkgICAgNSwJCQkJICAgLyogUjUgKi8KKwkJCQkgICAgdmFkZHIsCQkJICAgLyogUjYgKi8KKwkJCQkgICAgbGVuZ3RoLAkJCSAgIC8qIFI3ICovCisJCQkJICAgICgoKHU2NCkgYWNjZXNzX2N0cmwpIDw8IDMyVUxMKSwvKiBSOCAqLworCQkJCSAgICBwZCwJCQkJICAgLyogUjkgKi8KKwkJCQkgICAgMCwgMCwgMCwJCQkgICAvKiBSMTAtUjEyICovCisJCQkJICAgIG1yX2hhbmRsZSwJCQkgICAvKiBSNCAqLworCQkJCSAgICAmZHVtbXksCQkJICAgLyogUjUgKi8KKwkJCQkgICAgJmxrZXlfb3V0LAkJCSAgIC8qIFI2ICovCisJCQkJICAgICZkdW1teSwJCQkgICAvKiBSNyAqLworCQkJCSAgICAmZHVtbXksCQkJICAgLyogUjggKi8KKwkJCQkgICAgJmR1bW15LAkJCSAgIC8qIFI5ICovCisJCQkJICAgICZkdW1teSwJCQkgICAvKiBSMTAgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAgICAgICAgIC8qIFIxMSAqLworCQkJCSAgICAmZHVtbXkpOyAgICAgICAgICAgICAgICAgICAgICAgLyogUjEyICovCisJKmxrZXkgPSAodTMyKSBsa2V5X291dDsKKworCXJldHVybiBocmV0OworfQorCit1NjQgZWhlYV9oX3JlZ2lzdGVyX3JwYWdlX21yKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTY0IG1yX2hhbmRsZSwKKwkJCSAgICAgY29uc3QgdTggcGFnZXNpemUsIGNvbnN0IHU4IHF1ZXVlX3R5cGUsCisJCQkgICAgIGNvbnN0IHU2NCBsb2dfcGFnZWFkZHIsIGNvbnN0IHU2NCBjb3VudCkKK3sKKwlpZiAoKGNvdW50ID4gMSkgJiYgKGxvZ19wYWdlYWRkciAmIDB4ZmZmKSkgeworCQllaGVhX2Vycm9yKCJub3Qgb24gcGFnZWJvdW5kYXJ5Iik7CisJCXJldHVybiBIX1BBUkFNRVRFUjsKKwl9CisKKwlyZXR1cm4gZWhlYV9oX3JlZ2lzdGVyX3JwYWdlKGFkYXB0ZXJfaGFuZGxlLCBwYWdlc2l6ZSwKKwkJCQkgICAgIHF1ZXVlX3R5cGUsIG1yX2hhbmRsZSwKKwkJCQkgICAgIGxvZ19wYWdlYWRkciwgY291bnQpOworfQorCit1NjQgZWhlYV9oX3F1ZXJ5X2VoZWEoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCB2b2lkICpjYl9hZGRyKQoreworCXU2NCBocmV0LCBkdW1teSwgY2JfbG9nYWRkcjsKKworCWNiX2xvZ2FkZHIgPSB2aXJ0X3RvX2FicyhjYl9hZGRyKTsKKworCWhyZXQgPSBlaGVhX2hjYWxsXzlhcmdfOXJldChIX1FVRVJZX0hFQSwKKwkJCQkgICAgYWRhcHRlcl9oYW5kbGUsCQkvKiBSNCAqLworCQkJCSAgICBjYl9sb2dhZGRyLAkJCS8qIFI1ICovCisJCQkJICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsCS8qIFI2LVIxMiAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjQgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI1ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNiAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjcgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI4ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSOSAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjEwICovCisJCQkJICAgICZkdW1teSwgICAgICAgICAgICAgCS8qIFIxMSAqLworCQkJCSAgICAmZHVtbXkpOyAgICAgICAgICAgIAkvKiBSMTIgKi8KKyNpZmRlZiBERUJVRworCWVoZWFfZG1wKGNiX2FkZHIsIHNpemVvZihzdHJ1Y3QgaGNwX3F1ZXJ5X2VoZWEpLCAiaGNwX3F1ZXJ5X2VoZWEiKTsKKyNlbmRpZgorCXJldHVybiBocmV0OworfQorCit1NjQgZWhlYV9oX3F1ZXJ5X2VoZWFfcG9ydChjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHUxNiBwb3J0X251bSwKKwkJCSAgIGNvbnN0IHU4IGNiX2NhdCwgY29uc3QgdTY0IHNlbGVjdF9tYXNrLAorCQkJICAgdm9pZCAqY2JfYWRkcikKK3sKKwl1NjQgcG9ydF9pbmZvLCBkdW1teTsKKwl1NjQgY2JfbG9nYWRkciA9IHZpcnRfdG9fYWJzKGNiX2FkZHIpOworCXU2NCBhcnJfaW5kZXggPSAwOworCisJcG9ydF9pbmZvID0gRUhFQV9CTUFTS19TRVQoSF9NRUhFQVBPUlRfQ0FULCBjYl9jYXQpCisJCSAgfCBFSEVBX0JNQVNLX1NFVChIX01FSEVBUE9SVF9QTiwgcG9ydF9udW0pOworCisJcmV0dXJuIGVoZWFfaGNhbGxfOWFyZ185cmV0KEhfUVVFUllfSEVBX1BPUlQsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJLyogUjQgKi8KKwkJCQkgICAgcG9ydF9pbmZvLAkJCS8qIFI1ICovCisJCQkJICAgIHNlbGVjdF9tYXNrLAkJLyogUjYgKi8KKwkJCQkgICAgYXJyX2luZGV4LAkJCS8qIFI3ICovCisJCQkJICAgIGNiX2xvZ2FkZHIsCQkJLyogUjggKi8KKwkJCQkgICAgMCwgMCwgMCwgMCwJCQkvKiBSOS1SMTIgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI0ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNSAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjYgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI3ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSOCAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjkgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFIxMCAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgICAgICAgLyogUjExICovCisJCQkJICAgICZkdW1teSk7ICAgICAgICAgICAgICAgICAgICAvKiBSMTIgKi8KK30KKwordTY0IGVoZWFfaF9tb2RpZnlfZWhlYV9wb3J0KGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTE2IHBvcnRfbnVtLAorCQkJICAgIGNvbnN0IHU4IGNiX2NhdCwgY29uc3QgdTY0IHNlbGVjdF9tYXNrLAorCQkJICAgIHZvaWQgKmNiX2FkZHIpCit7CisJdTY0IHBvcnRfaW5mbywgZHVtbXksIGludl9hdHRyX2lkZW50LCBwcm9jX21hc2s7CisJdTY0IGFycl9pbmRleCA9IDA7CisJdTY0IGNiX2xvZ2FkZHIgPSB2aXJ0X3RvX2FicyhjYl9hZGRyKTsKKworCXBvcnRfaW5mbyA9IEVIRUFfQk1BU0tfU0VUKEhfTUVIRUFQT1JUX0NBVCwgY2JfY2F0KQorCQkgIHwgRUhFQV9CTUFTS19TRVQoSF9NRUhFQVBPUlRfUE4sIHBvcnRfbnVtKTsKKyNpZmRlZiBERUJVRworCWVoZWFfZHVtcChjYl9hZGRyLCBzaXplb2Yoc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwKSwgIkJlZm9yZSBIQ0FMTCIpOworI2VuZGlmCisJcmV0dXJuIGVoZWFfaGNhbGxfOWFyZ185cmV0KEhfTU9ESUZZX0hFQV9QT1JULAorCQkJCSAgICBhZGFwdGVyX2hhbmRsZSwJCS8qIFI0ICovCisJCQkJICAgIHBvcnRfaW5mbywJCQkvKiBSNSAqLworCQkJCSAgICBzZWxlY3RfbWFzaywJCS8qIFI2ICovCisJCQkJICAgIGFycl9pbmRleCwJCQkvKiBSNyAqLworCQkJCSAgICBjYl9sb2dhZGRyLAkJCS8qIFI4ICovCisJCQkJICAgIDAsIDAsIDAsIDAsCQkJLyogUjktUjEyICovCisJCQkJICAgICZpbnZfYXR0cl9pZGVudCwJCS8qIFI0ICovCisJCQkJICAgICZwcm9jX21hc2ssCQkJLyogUjUgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI2ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNyAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjggKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI5ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSMTAgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAgICAgIC8qIFIxMSAqLworCQkJCSAgICAmZHVtbXkpOyAgICAgICAgICAgICAgICAgICAgLyogUjEyICovCit9CisKK3U2NCBlaGVhX2hfcmVnX2RlcmVnX2JjbWMoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1MTYgcG9ydF9udW0sCisJCQkgIGNvbnN0IHU4IHJlZ190eXBlLCBjb25zdCB1NjQgbWNfbWFjX2FkZHIsCisJCQkgIGNvbnN0IHUxNiB2bGFuX2lkLCBjb25zdCB1MzIgaGNhbGxfaWQpCit7CisJdTY0IHI1X3BvcnRfbnVtLCByNl9yZWdfdHlwZSwgcjdfbWNfbWFjX2FkZHIsIHI4X3ZsYW5faWQsIGR1bW15OworCXU2NCBtYWNfYWRkciA9IG1jX21hY19hZGRyID4+IDE2OworCisJcjVfcG9ydF9udW0gPSBFSEVBX0JNQVNLX1NFVChIX1JFR0JDTUNfUE4sIHBvcnRfbnVtKTsKKwlyNl9yZWdfdHlwZSA9IEVIRUFfQk1BU0tfU0VUKEhfUkVHQkNNQ19SRUdUWVBFLCByZWdfdHlwZSk7CisJcjdfbWNfbWFjX2FkZHIgPSBFSEVBX0JNQVNLX1NFVChIX1JFR0JDTUNfTUFDQUREUiwgbWFjX2FkZHIpOworCXI4X3ZsYW5faWQgPSBFSEVBX0JNQVNLX1NFVChIX1JFR0JDTUNfVkxBTklELCB2bGFuX2lkKTsKKworCXJldHVybiBlaGVhX2hjYWxsXzlhcmdfOXJldChoY2FsbF9pZCwKKwkJCQkgICAgYWRhcHRlcl9oYW5kbGUsCQkvKiBSNCAqLworCQkJCSAgICByNV9wb3J0X251bSwJCS8qIFI1ICovCisJCQkJICAgIHI2X3JlZ190eXBlLAkJLyogUjYgKi8KKwkJCQkgICAgcjdfbWNfbWFjX2FkZHIsCQkvKiBSNyAqLworCQkJCSAgICByOF92bGFuX2lkLAkJCS8qIFI4ICovCisJCQkJICAgIDAsIDAsIDAsIDAsCQkJLyogUjktUjEyICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNCAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjUgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI2ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNyAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjggKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI5ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSMTAgKi8KKwkJCQkgICAgJmR1bW15LCAgICAgICAgICAgICAgICAgICAgIC8qIFIxMSAqLworCQkJCSAgICAmZHVtbXkpOyAgICAgICAgICAgICAgICAgICAgLyogUjEyICovCit9CisKK3U2NCBlaGVhX2hfcmVzZXRfZXZlbnRzKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTY0IG5lcV9oYW5kbGUsCisJCQljb25zdCB1NjQgZXZlbnRfbWFzaykKK3sKKwl1NjQgZHVtbXk7CisKKwlyZXR1cm4gZWhlYV9oY2FsbF85YXJnXzlyZXQoSF9SRVNFVF9FVkVOVFMsCisJCQkJICAgIGFkYXB0ZXJfaGFuZGxlLAkJLyogUjQgKi8KKwkJCQkgICAgbmVxX2hhbmRsZSwJCQkvKiBSNSAqLworCQkJCSAgICBldmVudF9tYXNrLAkJCS8qIFI2ICovCisJCQkJICAgIDAsIDAsIDAsIDAsIDAsIDAsCQkvKiBSNy1SMTIgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI0ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSNSAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjYgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFI3ICovCisJCQkJICAgICZkdW1teSwJCQkvKiBSOCAqLworCQkJCSAgICAmZHVtbXksCQkJLyogUjkgKi8KKwkJCQkgICAgJmR1bW15LAkJCS8qIFIxMCAqLworCQkJCSAgICAmZHVtbXksICAgICAgICAgICAgICAgICAgICAgLyogUjExICovCisJCQkJICAgICZkdW1teSk7ICAgICAgICAgICAgICAgICAgICAvKiBSMTIgKi8KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmggYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNTFlM2IKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcGh5cC5oCkBAIC0wLDAgKzEsNDU1IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9waHlwLmgKKyAqCisgKiAgZUhFQSBldGhlcm5ldCBkZXZpY2UgZHJpdmVyIGZvciBJQk0gZVNlcnZlciBTeXN0ZW0gcAorICoKKyAqICAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA2CisgKgorICogIEF1dGhvcnM6CisgKiAgICAgICBDaHJpc3RvcGggUmFpc2NoIDxyYWlzY2hAZGUuaWJtLmNvbT4KKyAqICAgICAgIEphbi1CZXJuZCBUaGVtYW5uIDx0aGVtYW5uQGRlLmlibS5jb20+CisgKiAgICAgICBUaG9tYXMgS2xlaW4gPHRrbGVpbkBkZS5pYm0uY29tPgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fRUhFQV9QSFlQX0hfXworI2RlZmluZSBfX0VIRUFfUEhZUF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8YXNtL2h2Y2FsbC5oPgorI2luY2x1ZGUgImVoZWEuaCIKKyNpbmNsdWRlICJlaGVhX2h3LmgiCisjaW5jbHVkZSAiZWhlYV9oY2FsbC5oIgorCisvKiBTb21lIGFiYnJldmlhdGlvbnMgdXNlZCBoZXJlOgorICoKKyAqIGhjcF8qICAtIHN0cnVjdHVyZXMsIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHJlbGVhdGVkIHRvIEh5cGVydmlzb3IgQ2FsbHMKKyAqLworCitzdGF0aWMgaW5saW5lIHUzMiBnZXRfbG9uZ2J1c3lfbXNlY3MoaW50IGxvbmdfYnVzeV9yZXRfY29kZSkKK3sKKwlzd2l0Y2ggKGxvbmdfYnVzeV9yZXRfY29kZSkgeworCWNhc2UgSF9MT05HX0JVU1lfT1JERVJfMV9NU0VDOgorCQlyZXR1cm4gMTsKKwljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwX01TRUM6CisJCXJldHVybiAxMDsKKwljYXNlIEhfTE9OR19CVVNZX09SREVSXzEwMF9NU0VDOgorCQlyZXR1cm4gMTAwOworCWNhc2UgSF9MT05HX0JVU1lfT1JERVJfMV9TRUM6CisJCXJldHVybiAxMDAwOworCWNhc2UgSF9MT05HX0JVU1lfT1JERVJfMTBfU0VDOgorCQlyZXR1cm4gMTAwMDA7CisJY2FzZSBIX0xPTkdfQlVTWV9PUkRFUl8xMDBfU0VDOgorCQlyZXR1cm4gMTAwMDAwOworCWRlZmF1bHQ6CisJCXJldHVybiAxOworCX0KK30KKworLyogTm90aWZpY2F0aW9uIEV2ZW50IFF1ZXVlIChORVEpIEVudHJ5IGJpdCBtYXNrcyAqLworI2RlZmluZSBORVFFX0VWRU5UX0NPREUJCUVIRUFfQk1BU0tfSUJNKDIsIDcpCisjZGVmaW5lIE5FUUVfUE9SVE5VTSAgCQlFSEVBX0JNQVNLX0lCTSgzMiwgNDcpCisjZGVmaW5lIE5FUUVfUE9SVF9VUAkJRUhFQV9CTUFTS19JQk0oMTYsIDE2KQorI2RlZmluZSBORVFFX0VYVFNXSVRDSF9QT1JUX1VQCUVIRUFfQk1BU0tfSUJNKDE3LCAxNykKKyNkZWZpbmUgTkVRRV9FWFRTV0lUQ0hfUFJJTUFSWQlFSEVBX0JNQVNLX0lCTSgxOCwgMTgpCisjZGVmaW5lIE5FUUVfUExJRAkJRUhFQV9CTUFTS19JQk0oMTYsIDQ3KQorCisvKiBOb3RpZmljYXRpb24gRXZlbnQgQ29kZXMgKi8KKyNkZWZpbmUgRUhFQV9FQ19QT1JUU1RBVEVfQ0hHCTB4MzAKKyNkZWZpbmUgRUhFQV9FQ19BREFQVEVSX01BTEZVTkMJMHgzMgorI2RlZmluZSBFSEVBX0VDX1BPUlRfTUFMRlVOQwkweDMzCisKKy8qIE5vdGlmaWNhdGlvbiBFdmVudCBMb2cgUmVnaXN0ZXIgKE5FTFIpIGJpdCBtYXNrcyAqLworI2RlZmluZSBORUxSX1BPUlRfTUFMRlVOQwlFSEVBX0JNQVNLX0lCTSg2MSwgNjEpCisjZGVmaW5lIE5FTFJfQURBUFRFUl9NQUxGVU5DCUVIRUFfQk1BU0tfSUJNKDYyLCA2MikKKyNkZWZpbmUgTkVMUl9QT1JUU1RBVEVfQ0hHCUVIRUFfQk1BU0tfSUJNKDYzLCA2MykKKworc3RhdGljIGlubGluZSB2b2lkIGhjcF9lcGFzX2N0b3Ioc3RydWN0IGhfZXBhcyAqZXBhcywgdTY0IHBhZGRyX2tlcm5lbCwKKwkJCQkgdTY0IHBhZGRyX3VzZXIpCit7CisJZXBhcy0+a2VybmVsLmFkZHIgPSBpb3JlbWFwKHBhZGRyX2tlcm5lbCwgUEFHRV9TSVpFKTsKKwllcGFzLT51c2VyLmFkZHIgPSBwYWRkcl91c2VyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaGNwX2VwYXNfZHRvcihzdHJ1Y3QgaF9lcGFzICplcGFzKQoreworCWlmIChlcGFzLT5rZXJuZWwuYWRkcikKKwkJaW91bm1hcChlcGFzLT5rZXJuZWwuYWRkcik7CisKKwllcGFzLT51c2VyLmFkZHIgPSAwOworCWVwYXMtPmtlcm5lbC5hZGRyID0gMDsKK30KKworc3RydWN0IGhjcF9tb2RpZnlfcXBfY2IwIHsKKwl1NjQgcXBfY3RsX3JlZzsJCS8qIDAwICovCisJdTMyIG1heF9zd3FlOwkJLyogMDIgKi8KKwl1MzIgbWF4X3J3cWU7CQkvKiAwMyAqLworCXUzMiBwb3J0X25iOwkJLyogMDQgKi8KKwl1MzIgcmVzZXJ2ZWQwOwkJLyogMDUgKi8KKwl1NjQgcXBfYWVyOwkJLyogMDYgKi8KKwl1NjQgcXBfdGVudXJlOwkJLyogMDggKi8KK307CisKKy8qIEhjYWxsIFF1ZXJ5L01vZGlmeSBRdWV1ZSBQYWlyIENvbnRyb2wgQmxvY2sgMCBTZWxlY3Rpb24gTWFzayBCaXRzICovCisjZGVmaW5lIEhfUVBDQjBfQUxMICAgICAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDAsIDUpCisjZGVmaW5lIEhfUVBDQjBfUVBfQ1RMX1JFRyAgICAgIEVIRUFfQk1BU0tfSUJNKDAsIDApCisjZGVmaW5lIEhfUVBDQjBfTUFYX1NXUUUgICAgICAgIEVIRUFfQk1BU0tfSUJNKDEsIDEpCisjZGVmaW5lIEhfUVBDQjBfTUFYX1JXUUUgICAgICAgIEVIRUFfQk1BU0tfSUJNKDIsIDIpCisjZGVmaW5lIEhfUVBDQjBfUE9SVF9OQiAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDMsIDMpCisjZGVmaW5lIEhfUVBDQjBfUVBfQUVSICAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDQsIDQpCisjZGVmaW5lIEhfUVBDQjBfUVBfVEVOVVJFICAgICAgIEVIRUFfQk1BU0tfSUJNKDUsIDUpCisKKy8qIFF1ZXVlIFBhaXIgQ29udHJvbCBSZWdpc3RlciBTdGF0dXMgQml0cyAqLworI2RlZmluZSBIX1FQX0NSX0VOQUJMRUQJCSAgICAweDgwMDAwMDAwMDAwMDAwMDBVTEwgLyogUVAgZW5hYmxlZCAqLworCQkJCQkJCSAgLyogUVAgU3RhdGVzOiAqLworI2RlZmluZSBIX1FQX0NSX1NUQVRFX1JFU0VUCSAgICAweDAwMDAwMTAwMDAwMDAwMDBVTEwgLyogIFJlc2V0ICovCisjZGVmaW5lIEhfUVBfQ1JfU1RBVEVfSU5JVElBTElaRUQgICAweDAwMDAwMjAwMDAwMDAwMDBVTEwgLyogIEluaXRpYWxpemVkICovCisjZGVmaW5lIEhfUVBfQ1JfU1RBVEVfUkRZMlJDVgkgICAgMHgwMDAwMDMwMDAwMDAwMDAwVUxMIC8qICBSZWFkeSB0byByZWN2ICovCisjZGVmaW5lIEhfUVBfQ1JfU1RBVEVfUkRZMlNORAkgICAgMHgwMDAwMDUwMDAwMDAwMDAwVUxMIC8qICBSZWFkeSB0byBzZW5kICovCisjZGVmaW5lIEhfUVBfQ1JfU1RBVEVfRVJST1IJICAgIDB4MDAwMDgwMDAwMDAwMDAwMFVMTCAvKiAgRXJyb3IgKi8KKworc3RydWN0IGhjcF9tb2RpZnlfcXBfY2IxIHsKKwl1MzIgcXBuOwkJLyogMDAgKi8KKwl1MzIgcXBfYXN5bl9ldl9lcV9uYjsJLyogMDEgKi8KKwl1NjQgc3FfY3FfaGFuZGxlOwkvKiAwMiAqLworCXU2NCBycV9jcV9oYW5kbGU7CS8qIDA0ICovCisJLyogc2dlbCA9IHNjYXR0ZXIgZ2F0aGVyIGVsZW1lbnQgKi8KKwl1MzIgc2dlbF9uYl9zcTsJCS8qIDA2ICovCisJdTMyIHNnZWxfbmJfcnExOwkvKiAwNyAqLworCXUzMiBzZ2VsX25iX3JxMjsJLyogMDggKi8KKwl1MzIgc2dlbF9uYl9ycTM7CS8qIDA5ICovCit9OworCisvKiBIY2FsbCBRdWVyeS9Nb2RpZnkgUXVldWUgUGFpciBDb250cm9sIEJsb2NrIDEgU2VsZWN0aW9uIE1hc2sgQml0cyAqLworI2RlZmluZSBIX1FQQ0IxX0FMTCAgICAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgwLCA3KQorI2RlZmluZSBIX1FQQ0IxX1FQTiAgICAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgwLCAwKQorI2RlZmluZSBIX1FQQ0IxX0FTWU5fRVZfRVFfTkIgICBFSEVBX0JNQVNLX0lCTSgxLCAxKQorI2RlZmluZSBIX1FQQ0IxX1NRX0NRX0hBTkRMRSAgICBFSEVBX0JNQVNLX0lCTSgyLCAyKQorI2RlZmluZSBIX1FQQ0IxX1JRX0NRX0hBTkRMRSAgICBFSEVBX0JNQVNLX0lCTSgzLCAzKQorI2RlZmluZSBIX1FQQ0IxX1NHRUxfTkJfU1EgICAgICBFSEVBX0JNQVNLX0lCTSg0LCA0KQorI2RlZmluZSBIX1FQQ0IxX1NHRUxfTkJfUlExICAgICBFSEVBX0JNQVNLX0lCTSg1LCA1KQorI2RlZmluZSBIX1FQQ0IxX1NHRUxfTkJfUlEyICAgICBFSEVBX0JNQVNLX0lCTSg2LCA2KQorI2RlZmluZSBIX1FQQ0IxX1NHRUxfTkJfUlEzICAgICBFSEVBX0JNQVNLX0lCTSg3LCA3KQorCitzdHJ1Y3QgaGNwX3F1ZXJ5X2VoZWEgeworCXUzMiBjdXJfbnVtX3FwczsJCS8qIDAwICovCisJdTMyIGN1cl9udW1fY3FzOwkJLyogMDEgKi8KKwl1MzIgY3VyX251bV9lcXM7CQkvKiAwMiAqLworCXUzMiBjdXJfbnVtX21yczsJCS8qIDAzICovCisJdTMyIGF1dGhfbGV2ZWw7CQkJLyogMDQgKi8KKwl1MzIgbWF4X251bV9xcHM7CQkvKiAwNSAqLworCXUzMiBtYXhfbnVtX2NxczsJCS8qIDA2ICovCisJdTMyIG1heF9udW1fZXFzOwkJLyogMDcgKi8KKwl1MzIgbWF4X251bV9tcnM7CQkvKiAwOCAqLworCXUzMiByZXNlcnZlZDA7CQkJLyogMDkgKi8KKwl1MzIgaW50X2Nsb2NrX2ZyZXE7CQkvKiAxMCAqLworCXUzMiBtYXhfbnVtX3BkczsJCS8qIDExICovCisJdTMyIG1heF9udW1fYWRkcl9oYW5kbGVzOwkvKiAxMiAqLworCXUzMiBtYXhfbnVtX2NxZXM7CQkvKiAxMyAqLworCXUzMiBtYXhfbnVtX3dxZXM7CQkvKiAxNCAqLworCXUzMiBtYXhfbnVtX3NnZWxfcnExd3FlOwkvKiAxNSAqLworCXUzMiBtYXhfbnVtX3NnZWxfcnEyd3FlOwkvKiAxNiAqLworCXUzMiBtYXhfbnVtX3NnZWxfcnEzd3FlOwkvKiAxNyAqLworCXUzMiBtcl9wYWdlX3NpemU7CQkvKiAxOCAqLworCXUzMiByZXNlcnZlZDE7CQkJLyogMTkgKi8KKwl1NjQgbWF4X21yX3NpemU7CQkvKiAyMCAqLworCXU2NCByZXNlcnZlZDI7CQkJLyogMjIgKi8KKwl1MzIgbnVtX3BvcnRzOwkJCS8qIDI0ICovCisJdTMyIHJlc2VydmVkMzsJCQkvKiAyNSAqLworCXUzMiByZXNlcnZlZDQ7CQkJLyogMjYgKi8KKwl1MzIgcmVzZXJ2ZWQ1OwkJCS8qIDI3ICovCisJdTY0IG1heF9tY19tYWM7CQkJLyogMjggKi8KKwl1NjQgZWhlYV9jYXA7CQkJLyogMzAgKi8KKwl1MzIgbWF4X2lzbl9wZXJfZXE7CQkvKiAzMiAqLworCXUzMiBtYXhfbnVtX25lcTsJCS8qIDMzICovCisJdTY0IG1heF9udW1fdmxhbl9pZHM7CQkvKiAzNCAqLworCXUzMiBtYXhfbnVtX3BvcnRfZ3JvdXA7CQkvKiAzNiAqLworCXUzMiBtYXhfbnVtX3BoeXNfcG9ydDsJCS8qIDM3ICovCisKK307CisKKy8qIEhjYWxsIFF1ZXJ5L01vZGlmeSBQb3J0IENvbnRyb2wgQmxvY2sgZGVmaW5lcyAqLworI2RlZmluZSBIX1BPUlRfQ0IwCSAwCisjZGVmaW5lIEhfUE9SVF9DQjEJIDEKKyNkZWZpbmUgSF9QT1JUX0NCMgkgMgorI2RlZmluZSBIX1BPUlRfQ0IzCSAzCisjZGVmaW5lIEhfUE9SVF9DQjQJIDQKKyNkZWZpbmUgSF9QT1JUX0NCNQkgNQorI2RlZmluZSBIX1BPUlRfQ0I2CSA2CisjZGVmaW5lIEhfUE9SVF9DQjcJIDcKKworc3RydWN0IGhjcF9laGVhX3BvcnRfY2IwIHsKKwl1NjQgcG9ydF9tYWNfYWRkcjsKKwl1NjQgcG9ydF9yYzsKKwl1NjQgcmVzZXJ2ZWQwOworCXUzMiBwb3J0X29wX3N0YXRlOworCXUzMiBwb3J0X3NwZWVkOworCXUzMiBleHRfc3dwb3J0X29wX3N0YXRlOworCXUzMiBuZWdfdHBmX3BycGY7CisJdTMyIG51bV9kZWZhdWx0X3FwczsKKwl1MzIgcmVzZXJ2ZWQxOworCXU2NCBkZWZhdWx0X3Fwbl9hcnJbMTZdOworfTsKKworLyogSGNhbGwgUXVlcnkvTW9kaWZ5IFBvcnQgQ29udHJvbCBCbG9jayAwIFNlbGVjdGlvbiBNYXNrIEJpdHMgKi8KKyNkZWZpbmUgSF9QT1JUX0NCMF9BTEwJCUVIRUFfQk1BU0tfSUJNKDAsIDcpICAgIC8qIFNldCBhbGwgYml0cyAqLworI2RlZmluZSBIX1BPUlRfQ0IwX01BQwkJRUhFQV9CTUFTS19JQk0oMCwgMCkgICAgLyogTUFDIGFkZHJlc3MgKi8KKyNkZWZpbmUgSF9QT1JUX0NCMF9QUkMJCUVIRUFfQk1BU0tfSUJNKDEsIDEpICAgIC8qIFBvcnQgUmVjdiBDb250cm9sICovCisjZGVmaW5lIEhfUE9SVF9DQjBfREVGUVBOQVJSQVkJRUhFQV9CTUFTS19JQk0oNywgNykgICAgLyogRGVmYXVsdCBRUE4gQXJyYXkgKi8KKworLyogIEhjYWxsIFF1ZXJ5IFBvcnQ6IFJldHVybmVkIHBvcnQgc3BlZWQgdmFsdWVzICovCisjZGVmaW5lIEhfU1BFRURfMTBNX0gJMQkvKiAgMTAgTWJwcywgSGFsZiBEdXBsZXggKi8KKyNkZWZpbmUgSF9TUEVFRF8xME1fRgkyCS8qICAxMCBNYnBzLCBGdWxsIER1cGxleCAqLworI2RlZmluZSBIX1NQRUVEXzEwME1fSAkzCS8qIDEwMCBNYnBzLCBIYWxmIER1cGxleCAqLworI2RlZmluZSBIX1NQRUVEXzEwME1fRgk0CS8qIDEwMCBNYnBzLCBGdWxsIER1cGxleCAqLworI2RlZmluZSBIX1NQRUVEXzFHX0YJNgkvKiAgIDEgR2JwcywgRnVsbCBEdXBsZXggKi8KKyNkZWZpbmUgSF9TUEVFRF8xMEdfRgk4CS8qICAxMCBHYnBzLCBGdWxsIER1cGxleCAqLworCisvKiBQb3J0IFJlY2VpdmUgQ29udHJvbCBTdGF0dXMgQml0cyAqLworI2RlZmluZSBQWExZX1JDX1ZBTElEICAgICAgICAgICBFSEVBX0JNQVNLX0lCTSg0OSwgNDkpCisjZGVmaW5lIFBYTFlfUkNfVkxBTl9YVFJBQ1QgICAgIEVIRUFfQk1BU0tfSUJNKDUwLCA1MCkKKyNkZWZpbmUgUFhMWV9SQ19UQ1BfNl9UVVBMRSAgICAgRUhFQV9CTUFTS19JQk0oNTEsIDUxKQorI2RlZmluZSBQWExZX1JDX1VEUF82X1RVUExFICAgICBFSEVBX0JNQVNLX0lCTSg1MiwgNTIpCisjZGVmaW5lIFBYTFlfUkNfVENQXzNfVFVQTEUgICAgIEVIRUFfQk1BU0tfSUJNKDUzLCA1MykKKyNkZWZpbmUgUFhMWV9SQ19UQ1BfMl9UVVBMRSAgICAgRUhFQV9CTUFTS19JQk0oNTQsIDU0KQorI2RlZmluZSBQWExZX1JDX0xMQ19TTkFQICAgICAgICBFSEVBX0JNQVNLX0lCTSg1NSwgNTUpCisjZGVmaW5lIFBYTFlfUkNfSlVNQk9fRlJBTUUgICAgIEVIRUFfQk1BU0tfSUJNKDU2LCA1NikKKyNkZWZpbmUgUFhMWV9SQ19GUkFHX0lQX1BLVCAgICAgRUhFQV9CTUFTS19JQk0oNTcsIDU3KQorI2RlZmluZSBQWExZX1JDX1RDUF9VRFBfQ0hLU1VNICBFSEVBX0JNQVNLX0lCTSg1OCwgNTgpCisjZGVmaW5lIFBYTFlfUkNfSVBfQ0hLU1VNICAgICAgIEVIRUFfQk1BU0tfSUJNKDU5LCA1OSkKKyNkZWZpbmUgUFhMWV9SQ19NQUNfRklMVEVSICAgICAgRUhFQV9CTUFTS19JQk0oNjAsIDYwKQorI2RlZmluZSBQWExZX1JDX1VOVEFHX0ZJTFRFUiAgICBFSEVBX0JNQVNLX0lCTSg2MSwgNjEpCisjZGVmaW5lIFBYTFlfUkNfVkxBTl9UQUdfRklMVEVSIEVIRUFfQk1BU0tfSUJNKDYyLCA2MykKKworI2RlZmluZSBQWExZX1JDX1ZMQU5fRklMVEVSICAgICAyCisjZGVmaW5lIFBYTFlfUkNfVkxBTl9QRVJNICAgICAgIDAKKworCisjZGVmaW5lIEhfUE9SVF9DQjFfQUxMICAgICAgICAgIDB4ODAwMDAwMDAwMDAwMDAwMFVMTAorCitzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjEgeworCXU2NCB2bGFuX2ZpbHRlcls2NF07Cit9OworCisjZGVmaW5lIEhfUE9SVF9DQjJfQUxMICAgICAgICAgIDB4RkZFMDAwMDAwMDAwMDAwMFVMTAorCitzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjIgeworCXU2NCByeG87CisJdTY0IHJ4dWNwOworCXU2NCByeHVmZDsKKwl1NjQgcnh1ZXJyOworCXU2NCByeGZ0bDsKKwl1NjQgcnhtY3A7CisJdTY0IHJ4YmNwOworCXU2NCB0eG87CisJdTY0IHR4dWNwOworCXU2NCB0eG1jcDsKKwl1NjQgdHhiY3A7Cit9OworCitzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjMgeworCXU2NCB2bGFuX2JjX2ZpbHRlcls2NF07CisJdTY0IHZsYW5fbWNfZmlsdGVyWzY0XTsKKwl1NjQgdmxhbl91bl9maWx0ZXJbNjRdOworCXU2NCBwb3J0X21hY19oYXNoX2FycmF5WzY0XTsKK307CisKKyNkZWZpbmUgSF9QT1JUX0NCNF9BTEwgICAgICAgICAgMHhGMDAwMDAwMDAwMDAwMDAwVUxMCisjZGVmaW5lIEhfUE9SVF9DQjRfSlVNQk8gICAgICAgIDB4MTAwMDAwMDAwMDAwMDAwMFVMTAorI2RlZmluZSBIX1BPUlRfQ0I0X1NQRUVEICAgICAgICAweDgwMDAwMDAwMDAwMDAwMDBVTEwKKworc3RydWN0IGhjcF9laGVhX3BvcnRfY2I0IHsKKwl1MzIgcG9ydF9zcGVlZDsKKwl1MzIgcGF1c2VfZnJhbWU7CisJdTMyIGVuc19wb3J0X29wX3N0YXRlOworCXUzMiBqdW1ib19mcmFtZTsKKwl1MzIgZW5zX3BvcnRfd3JhcDsKK307CisKKy8qIEhjYWxsIFF1ZXJ5L01vZGlmeSBQb3J0IENvbnRyb2wgQmxvY2sgNSBTZWxlY3Rpb24gTWFzayBCaXRzICovCisjZGVmaW5lIEhfUE9SVF9DQjVfUkNVCQkweDAwMDEwMDAwMDAwMDAwMDBVTEwKKyNkZWZpbmUgUFhTX1JDVQkJCUVIRUFfQk1BU0tfSUJNKDYxLCA2MykKKworc3RydWN0IGhjcF9laGVhX3BvcnRfY2I1IHsKKwl1NjQgcHJjOwkgICAgICAgIC8qIDAwICovCisJdTY0IHVhYTsJCS8qIDAxICovCisJdTY0IG1hY3ZjOwkJLyogMDIgKi8KKwl1NjQgeHBjc2M7CQkvKiAwMyAqLworCXU2NCB4cGNzcDsJCS8qIDA0ICovCisJdTY0IHBjc2lkOwkJLyogMDUgKi8KKwl1NjQgeHBjc3N0OwkJLyogMDYgKi8KKwl1NjQgcHRobGI7CQkvKiAwNyAqLworCXU2NCBwdGhyYjsJCS8qIDA4ICovCisJdTY0IHBxdTsJCS8qIDA5ICovCisJdTY0IHBxZDsJCS8qIDEwICovCisJdTY0IHBydDsJCS8qIDExICovCisJdTY0IHdzdGg7CQkvKiAxMiAqLworCXU2NCByY2I7CQkvKiAxMyAqLworCXU2NCByY207CQkvKiAxNCAqLworCXU2NCByY3U7CQkvKiAxNSAqLworCXU2NCBtYWNjOwkJLyogMTYgKi8KKwl1NjQgcGM7CQkJLyogMTcgKi8KKwl1NjQgcHN0OwkJLyogMTggKi8KKwl1NjQgZHVjcXBuOwkJLyogMTkgKi8KKwl1NjQgbWNxcG47CQkvKiAyMCAqLworCXU2NCBtbWE7CQkvKiAyMSAqLworCXU2NCBwbWMwaDsJCS8qIDIyICovCisJdTY0IHBtYzBsOwkJLyogMjMgKi8KKwl1NjQgbGJjOwkJLyogMjQgKi8KK307CisKKyNkZWZpbmUgSF9QT1JUX0NCNl9BTEwgIDB4RkZGRkZFN0ZGRkZGODAwMFVMTAorCitzdHJ1Y3QgaGNwX2VoZWFfcG9ydF9jYjYgeworCXU2NCByeG87CQkvKiAwMCAqLworCXU2NCByeDY0OwkJLyogMDEgKi8KKwl1NjQgcng2NTsJCS8qIDAyICovCisJdTY0IHJ4MTI4OwkJLyogMDMgKi8KKwl1NjQgcngyNTY7CQkvKiAwNCAqLworCXU2NCByeDUxMjsJCS8qIDA1ICovCisJdTY0IHJ4MTAyNDsJCS8qIDA2ICovCisJdTY0IHJ4YmZjczsJCS8qIDA3ICovCisJdTY0IHJ4aW1lOwkJLyogMDggKi8KKwl1NjQgcnhybGU7CQkvKiAwOSAqLworCXU2NCByeG9ybGU7CQkvKiAxMCAqLworCXU2NCByeGZ0bDsJCS8qIDExICovCisJdTY0IHJ4amFiOwkJLyogMTIgKi8KKwl1NjQgcnhzZTsJCS8qIDEzICovCisJdTY0IHJ4Y2U7CQkvKiAxNCAqLworCXU2NCByeHJmOwkJLyogMTUgKi8KKwl1NjQgcnhmcmFnOwkJLyogMTYgKi8KKwl1NjQgcnh1b2M7CQkvKiAxNyAqLworCXU2NCByeGNwZjsJCS8qIDE4ICovCisJdTY0IHJ4c2I7CQkvKiAxOSAqLworCXU2NCByeGZkOwkJLyogMjAgKi8KKwl1NjQgcnhvZXJyOwkJLyogMjEgKi8KKwl1NjQgcnhhbG47CQkvKiAyMiAqLworCXU2NCBkdWNxcG47CQkvKiAyMyAqLworCXU2NCByZXNlcnZlZDA7CQkvKiAyNCAqLworCXU2NCByeG1jcDsJCS8qIDI1ICovCisJdTY0IHJ4YmNwOwkJLyogMjYgKi8KKwl1NjQgdHhtY3A7CQkvKiAyNyAqLworCXU2NCB0eGJjcDsJCS8qIDI4ICovCisJdTY0IHR4bzsJCS8qIDI5ICovCisJdTY0IHR4NjQ7CQkvKiAzMCAqLworCXU2NCB0eDY1OwkJLyogMzEgKi8KKwl1NjQgdHgxMjg7CQkvKiAzMiAqLworCXU2NCB0eDI1NjsJCS8qIDMzICovCisJdTY0IHR4NTEyOwkJLyogMzQgKi8KKwl1NjQgdHgxMDI0OwkJLyogMzUgKi8KKwl1NjQgdHhiZmNzOwkJLyogMzYgKi8KKwl1NjQgdHhjcGY7CQkvKiAzNyAqLworCXU2NCB0eGxmOwkJLyogMzggKi8KKwl1NjQgdHhyZjsJCS8qIDM5ICovCisJdTY0IHR4aW1lOwkJLyogNDAgKi8KKwl1NjQgdHhzYzsJCS8qIDQxICovCisJdTY0IHR4bWM7CQkvKiA0MiAqLworCXU2NCB0eHNxZTsJCS8qIDQzICovCisJdTY0IHR4ZGVmOwkJLyogNDQgKi8KKwl1NjQgdHhsY29sOwkJLyogNDUgKi8KKwl1NjQgdHhleGNvbDsJCS8qIDQ2ICovCisJdTY0IHR4Y3NlOwkJLyogNDcgKi8KKwl1NjQgdHhib3I7CQkvKiA0OCAqLworfTsKKworI2RlZmluZSBIX1BPUlRfQ0I3X0RVQ1FQTiAweDgwMDAwMDAwMDAwMDAwMDBVTEwKKworc3RydWN0IGhjcF9laGVhX3BvcnRfY2I3IHsKKwl1NjQgZGVmX3VjX3FwbjsKK307CisKK3U2NCBlaGVhX2hfcXVlcnlfZWhlYV9xcChjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsCisJCQkgY29uc3QgdTggcXBfY2F0ZWdvcnksCisJCQkgY29uc3QgdTY0IHFwX2hhbmRsZSwgY29uc3QgdTY0IHNlbF9tYXNrLAorCQkJIHZvaWQgKmNiX2FkZHIpOworCit1NjQgZWhlYV9oX21vZGlmeV9laGVhX3FwKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgY29uc3QgdTggY2F0LAorCQkJICBjb25zdCB1NjQgcXBfaGFuZGxlLAorCQkJICBjb25zdCB1NjQgc2VsX21hc2ssCisJCQkgIHZvaWQgKmNiX2FkZHIsCisJCQkgIHU2NCAqIGludl9hdHRyX2lkLAorCQkJICB1NjQgKiBwcm9jX21hc2ssIHUxNiAqIG91dF9zd3IsIHUxNiAqIG91dF9yd3IpOworCit1NjQgZWhlYV9oX2FsbG9jX3Jlc291cmNlX2VxKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwKKwkJCSAgICAgc3RydWN0IGVoZWFfZXFfYXR0ciAqZXFfYXR0ciwgdTY0ICogZXFfaGFuZGxlKTsKKwordTY0IGVoZWFfaF9hbGxvY19yZXNvdXJjZV9jcShjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsCisJCQkgICAgIHN0cnVjdCBlaGVhX2NxX2F0dHIgKmNxX2F0dHIsCisJCQkgICAgIHU2NCAqIGNxX2hhbmRsZSwgc3RydWN0IGhfZXBhcyAqZXBhcyk7CisKK3U2NCBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfcXAoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLAorCQkJICAgICBzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgKmluaXRfYXR0ciwKKwkJCSAgICAgY29uc3QgdTMyIHBkLAorCQkJICAgICB1NjQgKiBxcF9oYW5kbGUsIHN0cnVjdCBoX2VwYXMgKmhfZXBhcyk7CisKKyNkZWZpbmUgSF9SRUdfUlBBR0VfUEFHRV9TSVpFICAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDQ4LDU1KQorI2RlZmluZSBIX1JFR19SUEFHRV9RVCAgICAgICAgICAgICAgICAgRUhFQV9CTUFTS19JQk0oNjIsNjMpCisKK3U2NCBlaGVhX2hfcmVnaXN0ZXJfcnBhZ2UoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLAorCQkJICBjb25zdCB1OCBwYWdlc2l6ZSwKKwkJCSAgY29uc3QgdTggcXVldWVfdHlwZSwKKwkJCSAgY29uc3QgdTY0IHJlc291cmNlX2hhbmRsZSwKKwkJCSAgY29uc3QgdTY0IGxvZ19wYWdlYWRkciwgdTY0IGNvdW50KTsKKworI2RlZmluZSBIX0RJU0FCTEVfR0VUX0VIRUFfV1FFX1AgIDEKKyNkZWZpbmUgSF9ESVNBQkxFX0dFVF9TUV9XUUVfUCAgICAyCisjZGVmaW5lIEhfRElTQUJMRV9HRVRfUlFDICAgICAgICAgMworCit1NjQgZWhlYV9oX2Rpc2FibGVfYW5kX2dldF9oZWEoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1NjQgcXBfaGFuZGxlKTsKKwordTY0IGVoZWFfaF9mcmVlX3Jlc291cmNlKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTY0IHJlc19oYW5kbGUpOworCit1NjQgZWhlYV9oX2FsbG9jX3Jlc291cmNlX21yKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTY0IHZhZGRyLAorCQkJICAgICBjb25zdCB1NjQgbGVuZ3RoLCBjb25zdCB1MzIgYWNjZXNzX2N0cmwsCisJCQkgICAgIGNvbnN0IHUzMiBwZCwgdTY0ICogbXJfaGFuZGxlLCB1MzIgKiBsa2V5KTsKKwordTY0IGVoZWFfaF9yZWdpc3Rlcl9ycGFnZV9tcihjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU2NCBtcl9oYW5kbGUsCisJCQkgICAgIGNvbnN0IHU4IHBhZ2VzaXplLCBjb25zdCB1OCBxdWV1ZV90eXBlLAorCQkJICAgICBjb25zdCB1NjQgbG9nX3BhZ2VhZGRyLCBjb25zdCB1NjQgY291bnQpOworCit1NjQgZWhlYV9oX3JlZ2lzdGVyX3Ntcihjb25zdCB1NjQgYWRhcHRlcl9oYW5kbGUsIGNvbnN0IHU2NCBvcmlnX21yX2hhbmRsZSwKKwkJCWNvbnN0IHU2NCB2YWRkcl9pbiwgY29uc3QgdTMyIGFjY2Vzc19jdHJsLCBjb25zdCB1MzIgcGQsCisJCQlzdHJ1Y3QgZWhlYV9tciAqbXIpOworCit1NjQgZWhlYV9oX3F1ZXJ5X2VoZWEoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCB2b2lkICpjYl9hZGRyKTsKKworLyogb3V0cHV0IHBhcmFtIFI1ICovCisjZGVmaW5lIEhfTUVIRUFQT1JUX0NBVAkJRUhFQV9CTUFTS19JQk0oNDAsNDcpCisjZGVmaW5lIEhfTUVIRUFQT1JUX1BOCQlFSEVBX0JNQVNLX0lCTSg0OCw2MykKKwordTY0IGVoZWFfaF9xdWVyeV9laGVhX3BvcnQoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1MTYgcG9ydF9udW0sCisJCQkgICBjb25zdCB1OCBjYl9jYXQsIGNvbnN0IHU2NCBzZWxlY3RfbWFzaywKKwkJCSAgIHZvaWQgKmNiX2FkZHIpOworCit1NjQgZWhlYV9oX21vZGlmeV9laGVhX3BvcnQoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1MTYgcG9ydF9udW0sCisJCQkgICAgY29uc3QgdTggY2JfY2F0LCBjb25zdCB1NjQgc2VsZWN0X21hc2ssCisJCQkgICAgdm9pZCAqY2JfYWRkcik7CisKKyNkZWZpbmUgSF9SRUdCQ01DX1BOICAgICAgICAgICAgRUhFQV9CTUFTS19JQk0oNDgsIDYzKQorI2RlZmluZSBIX1JFR0JDTUNfUkVHVFlQRSAgICAgICBFSEVBX0JNQVNLX0lCTSg2MSwgNjMpCisjZGVmaW5lIEhfUkVHQkNNQ19NQUNBRERSICAgICAgIEVIRUFfQk1BU0tfSUJNKDE2LCA2MykKKyNkZWZpbmUgSF9SRUdCQ01DX1ZMQU5JRCAgICAgICAgRUhFQV9CTUFTS19JQk0oNTIsIDYzKQorCit1NjQgZWhlYV9oX3JlZ19kZXJlZ19iY21jKGNvbnN0IHU2NCBhZGFwdGVyX2hhbmRsZSwgY29uc3QgdTE2IHBvcnRfbnVtLAorCQkJICBjb25zdCB1OCByZWdfdHlwZSwgY29uc3QgdTY0IG1jX21hY19hZGRyLAorCQkJICBjb25zdCB1MTYgdmxhbl9pZCwgY29uc3QgdTMyIGhjYWxsX2lkKTsKKwordTY0IGVoZWFfaF9yZXNldF9ldmVudHMoY29uc3QgdTY0IGFkYXB0ZXJfaGFuZGxlLCBjb25zdCB1NjQgbmVxX2hhbmRsZSwKKwkJCWNvbnN0IHU2NCBldmVudF9tYXNrKTsKKworI2VuZGlmCS8qIF9fRUhFQV9QSFlQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMTg2MjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfcW1yLmMKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5jCisgKgorICogIGVIRUEgZXRoZXJuZXQgZGV2aWNlIGRyaXZlciBmb3IgSUJNIGVTZXJ2ZXIgU3lzdGVtIHAKKyAqCisgKiAgKEMpIENvcHlyaWdodCBJQk0gQ29ycC4gMjAwNgorICoKKyAqICBBdXRob3JzOgorICogICAgICAgQ2hyaXN0b3BoIFJhaXNjaCA8cmFpc2NoQGRlLmlibS5jb20+CisgKiAgICAgICBKYW4tQmVybmQgVGhlbWFubiA8dGhlbWFubkBkZS5pYm0uY29tPgorICogICAgICAgVGhvbWFzIEtsZWluIDx0a2xlaW5AZGUuaWJtLmNvbT4KKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImVoZWEuaCIKKyNpbmNsdWRlICJlaGVhX3BoeXAuaCIKKyNpbmNsdWRlICJlaGVhX3Ftci5oIgorCitzdGF0aWMgdm9pZCAqaHdfcXBhZ2VpdF9nZXRfaW5jKHN0cnVjdCBod19xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0dmFsdWUgPSBod19xZWl0X2dldChxdWV1ZSk7CisKKwlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCArPSBxdWV1ZS0+cGFnZXNpemU7CisJaWYgKHF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID4gcXVldWUtPnF1ZXVlX2xlbmd0aCkgeworCQlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCAtPSBxdWV1ZS0+cGFnZXNpemU7CisJCXJldHZhbHVlID0gTlVMTDsKKwl9IGVsc2UgaWYgKCgodTY0KSByZXR2YWx1ZSkgJiAoRUhFQV9QQUdFU0laRS0xKSkgeworCQllaGVhX2Vycm9yKCJub3Qgb24gcGFnZWJvdW5kYXJ5Iik7CisJCXJldHZhbHVlID0gTlVMTDsKKwl9CisJcmV0dXJuIHJldHZhbHVlOworfQorCitzdGF0aWMgaW50IGh3X3F1ZXVlX2N0b3Ioc3RydWN0IGh3X3F1ZXVlICpxdWV1ZSwgY29uc3QgdTMyIG5yX29mX3BhZ2VzLAorCQkJICBjb25zdCB1MzIgcGFnZXNpemUsIGNvbnN0IHUzMiBxZV9zaXplKQoreworCWludCBwYWdlc19wZXJfa3BhZ2UgPSBQQUdFX1NJWkUgLyBwYWdlc2l6ZTsKKwlpbnQgaSwgazsKKworCWlmICgocGFnZXNpemUgPiBQQUdFX1NJWkUpIHx8ICghcGFnZXNfcGVyX2twYWdlKSkgeworCQllaGVhX2Vycm9yKCJwYWdlc2l6ZSBjb25mbGljdCEga2VybmVsIHBhZ2VzaXplPSVkLCAiCisJCQkgICAiZWhlYSBwYWdlc2l6ZT0lZCIsIChpbnQpUEFHRV9TSVpFLCAoaW50KXBhZ2VzaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcXVldWUtPnF1ZXVlX2xlbmd0aCA9IG5yX29mX3BhZ2VzICogcGFnZXNpemU7CisJcXVldWUtPnF1ZXVlX3BhZ2VzID0ga21hbGxvYyhucl9vZl9wYWdlcyAqIHNpemVvZih2b2lkKiksIEdGUF9LRVJORUwpOworCWlmICghcXVldWUtPnF1ZXVlX3BhZ2VzKSB7CisJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgcXVldWVfcGFnZXMiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyoKKwkgKiBhbGxvY2F0ZSBwYWdlcyBmb3IgcXVldWU6CisJICogb3V0ZXIgbG9vcCBhbGxvY2F0ZXMgd2hvbGUga2VybmVsIHBhZ2VzIChwYWdlIGFsaWduZWQpIGFuZAorCSAqIGlubmVyIGxvb3AgZGl2aWRlcyBhIGtlcm5lbCBwYWdlIGludG8gc21hbGxlciBoZWEgcXVldWUgcGFnZXMKKwkgKi8KKwlpID0gMDsKKwl3aGlsZSAoaSA8IG5yX29mX3BhZ2VzKSB7CisJCXU4ICprcGFnZSA9ICh1OCopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQlpZiAoIWtwYWdlKQorCQkJZ290byBvdXRfbm9tZW07CisJCWZvciAoayA9IDA7IGsgPCBwYWdlc19wZXJfa3BhZ2UgJiYgaSA8IG5yX29mX3BhZ2VzOyBrKyspIHsKKwkJCShxdWV1ZS0+cXVldWVfcGFnZXMpW2ldID0gKHN0cnVjdCBlaGVhX3BhZ2UqKWtwYWdlOworCQkJa3BhZ2UgKz0gcGFnZXNpemU7CisJCQlpKys7CisJCX0KKwl9CisKKwlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCA9IDA7CisJcXVldWUtPnFlX3NpemUgPSBxZV9zaXplOworCXF1ZXVlLT5wYWdlc2l6ZSA9IHBhZ2VzaXplOworCXF1ZXVlLT50b2dnbGVfc3RhdGUgPSAxOworCisJcmV0dXJuIDA7CitvdXRfbm9tZW06CisJZm9yIChpID0gMDsgaSA8IG5yX29mX3BhZ2VzOyBpICs9IHBhZ2VzX3Blcl9rcGFnZSkgeworCQlpZiAoIShxdWV1ZS0+cXVldWVfcGFnZXMpW2ldKQorCQkJYnJlYWs7CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykocXVldWUtPnF1ZXVlX3BhZ2VzKVtpXSk7CisJfQorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBod19xdWV1ZV9kdG9yKHN0cnVjdCBod19xdWV1ZSAqcXVldWUpCit7CisJaW50IHBhZ2VzX3Blcl9rcGFnZSA9IFBBR0VfU0laRSAvIHF1ZXVlLT5wYWdlc2l6ZTsKKwlpbnQgaSwgbnJfcGFnZXM7CisKKwlpZiAoIXF1ZXVlIHx8ICFxdWV1ZS0+cXVldWVfcGFnZXMpCisJCXJldHVybjsKKworCW5yX3BhZ2VzID0gcXVldWUtPnF1ZXVlX2xlbmd0aCAvIHF1ZXVlLT5wYWdlc2l6ZTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSArPSBwYWdlc19wZXJfa3BhZ2UpCisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykocXVldWUtPnF1ZXVlX3BhZ2VzKVtpXSk7CisKKwlrZnJlZShxdWV1ZS0+cXVldWVfcGFnZXMpOworfQorCitzdHJ1Y3QgZWhlYV9jcSAqZWhlYV9jcmVhdGVfY3Eoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBpbnQgbnJfb2ZfY3FlLCB1NjQgZXFfaGFuZGxlLCB1MzIgY3FfdG9rZW4pCit7CisJc3RydWN0IGVoZWFfY3EgKmNxOworCXN0cnVjdCBoX2VwYSBlcGE7CisJdTY0ICpjcV9oYW5kbGVfcmVmLCBocmV0LCBycGFnZTsKKwl1MzIgYWN0X25yX29mX2VudHJpZXMsIGFjdF9wYWdlcywgY291bnRlcjsKKwlpbnQgcmV0OworCXZvaWQgKnZwYWdlOworCisJY3EgPSBremFsbG9jKHNpemVvZigqY3EpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNxKSB7CisJCWVoZWFfZXJyb3IoIm5vIG1lbSBmb3IgY3EiKTsKKwkJZ290byBvdXRfbm9tZW07CisJfQorCisJY3EtPmF0dHIubWF4X25yX29mX2NxZXMgPSBucl9vZl9jcWU7CisJY3EtPmF0dHIuY3FfdG9rZW4gPSBjcV90b2tlbjsKKwljcS0+YXR0ci5lcV9oYW5kbGUgPSBlcV9oYW5kbGU7CisKKwljcS0+YWRhcHRlciA9IGFkYXB0ZXI7CisKKwljcV9oYW5kbGVfcmVmID0gJmNxLT5md19oYW5kbGU7CisJYWN0X25yX29mX2VudHJpZXMgPSAwOworCWFjdF9wYWdlcyA9IDA7CisKKwlocmV0ID0gZWhlYV9oX2FsbG9jX3Jlc291cmNlX2NxKGFkYXB0ZXItPmhhbmRsZSwgJmNxLT5hdHRyLAorCQkJCQkmY3EtPmZ3X2hhbmRsZSwgJmNxLT5lcGFzKTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigiYWxsb2NfcmVzb3VyY2VfY3EgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVtZW07CisJfQorCisJcmV0ID0gaHdfcXVldWVfY3RvcigmY3EtPmh3X3F1ZXVlLCBjcS0+YXR0ci5ucl9wYWdlcywKKwkJCSAgICBFSEVBX1BBR0VTSVpFLCBzaXplb2Yoc3RydWN0IGVoZWFfY3FlKSk7CisJaWYgKHJldCkKKwkJZ290byBvdXRfZnJlZXJlczsKKworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBjcS0+YXR0ci5ucl9wYWdlczsgY291bnRlcisrKSB7CisJCXZwYWdlID0gaHdfcXBhZ2VpdF9nZXRfaW5jKCZjcS0+aHdfcXVldWUpOworCQlpZiAoIXZwYWdlKSB7CisJCQllaGVhX2Vycm9yKCJod19xcGFnZWl0X2dldF9pbmMgZmFpbGVkIik7CisJCQlnb3RvIG91dF9raWxsX2h3cTsKKwkJfQorCisJCXJwYWdlID0gdmlydF90b19hYnModnBhZ2UpOworCQlocmV0ID0gZWhlYV9oX3JlZ2lzdGVyX3JwYWdlKGFkYXB0ZXItPmhhbmRsZSwKKwkJCQkJICAgICAwLCBFSEVBX0NRX1JFR0lTVEVSX09SSUcsCisJCQkJCSAgICAgY3EtPmZ3X2hhbmRsZSwgcnBhZ2UsIDEpOworCQlpZiAoaHJldCA8IEhfU1VDQ0VTUykgeworCQkJZWhlYV9lcnJvcigicmVnaXN0ZXJfcnBhZ2VfY3EgZmFpbGVkIGVoZWFfY3E9JXAgIgorCQkJCSAgICJocmV0PSVseCBjb3VudGVyPSVpIGFjdF9wYWdlcz0laSIsCisJCQkJICAgY3EsIGhyZXQsIGNvdW50ZXIsIGNxLT5hdHRyLm5yX3BhZ2VzKTsKKwkJCWdvdG8gb3V0X2tpbGxfaHdxOworCQl9CisKKwkJaWYgKGNvdW50ZXIgPT0gKGNxLT5hdHRyLm5yX3BhZ2VzIC0gMSkpIHsKKwkJCXZwYWdlID0gaHdfcXBhZ2VpdF9nZXRfaW5jKCZjcS0+aHdfcXVldWUpOworCisJCQlpZiAoKGhyZXQgIT0gSF9TVUNDRVNTKSB8fCAodnBhZ2UpKSB7CisJCQkJZWhlYV9lcnJvcigicmVnaXN0cmF0aW9uIG9mIHBhZ2VzIG5vdCAiCisJCQkJCSAgICJjb21wbGV0ZSBocmV0PSVseFxuIiwgaHJldCk7CisJCQkJZ290byBvdXRfa2lsbF9od3E7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKGhyZXQgIT0gSF9QQUdFX1JFR0lTVEVSRUQpIHx8ICghdnBhZ2UpKSB7CisJCQkJZWhlYV9lcnJvcigiQ1E6IHJlZ2lzdHJhdGlvbiBvZiBwYWdlIGZhaWxlZCAiCisJCQkJCSAgICJocmV0PSVseFxuIiwgaHJldCk7CisJCQkJZ290byBvdXRfa2lsbF9od3E7CisJCQl9CisJCX0KKwl9CisKKwlod19xZWl0X3Jlc2V0KCZjcS0+aHdfcXVldWUpOworCWVwYSA9IGNxLT5lcGFzLmtlcm5lbDsKKwllaGVhX3Jlc2V0X2NxX2VwKGNxKTsKKwllaGVhX3Jlc2V0X2NxX24xKGNxKTsKKworCXJldHVybiBjcTsKKworb3V0X2tpbGxfaHdxOgorCWh3X3F1ZXVlX2R0b3IoJmNxLT5od19xdWV1ZSk7CisKK291dF9mcmVlcmVzOgorCWVoZWFfaF9mcmVlX3Jlc291cmNlKGFkYXB0ZXItPmhhbmRsZSwgY3EtPmZ3X2hhbmRsZSk7CisKK291dF9mcmVlbWVtOgorCWtmcmVlKGNxKTsKKworb3V0X25vbWVtOgorCXJldHVybiBOVUxMOworfQorCitpbnQgZWhlYV9kZXN0cm95X2NxKHN0cnVjdCBlaGVhX2NxICpjcSkKK3sKKwl1NjQgYWRhcHRlcl9oYW5kbGUsIGhyZXQ7CisKKwlhZGFwdGVyX2hhbmRsZSA9IGNxLT5hZGFwdGVyLT5oYW5kbGU7CisKKwlpZiAoIWNxKQorCQlyZXR1cm4gMDsKKworCS8qIGRlcmVnaXN0ZXIgYWxsIHByZXZpb3VzIHJlZ2lzdGVyZWQgcGFnZXMgKi8KKwlocmV0ID0gZWhlYV9oX2ZyZWVfcmVzb3VyY2UoYWRhcHRlcl9oYW5kbGUsIGNxLT5md19oYW5kbGUpOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGVhX2Vycm9yKCJkZXN0cm95IENRIGZhaWxlZCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlod19xdWV1ZV9kdG9yKCZjcS0+aHdfcXVldWUpOworCWtmcmVlKGNxKTsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgZWhlYV9lcSAqZWhlYV9jcmVhdGVfZXEoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBjb25zdCBlbnVtIGVoZWFfZXFfdHlwZSB0eXBlLAorCQkJICAgICAgIGNvbnN0IHUzMiBtYXhfbnJfb2ZfZXFlcywgY29uc3QgdTggZXFlX2dlbikKK3sKKwlpbnQgcmV0LCBpOworCXU2NCBocmV0LCBycGFnZTsKKwl2b2lkICp2cGFnZTsKKwlzdHJ1Y3QgZWhlYV9lcSAqZXE7CisKKwllcSA9IGt6YWxsb2Moc2l6ZW9mKCplcSksIEdGUF9LRVJORUwpOworCWlmICghZXEpIHsKKwkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBlcSIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwllcS0+YWRhcHRlciA9IGFkYXB0ZXI7CisJZXEtPmF0dHIudHlwZSA9IHR5cGU7CisJZXEtPmF0dHIubWF4X25yX29mX2VxZXMgPSBtYXhfbnJfb2ZfZXFlczsKKwllcS0+YXR0ci5lcWVfZ2VuID0gZXFlX2dlbjsKKwlzcGluX2xvY2tfaW5pdCgmZXEtPnNwaW5sb2NrKTsKKworCWhyZXQgPSBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfZXEoYWRhcHRlci0+aGFuZGxlLAorCQkJCQkmZXEtPmF0dHIsICZlcS0+ZndfaGFuZGxlKTsKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigiYWxsb2NfcmVzb3VyY2VfZXEgZmFpbGVkIik7CisJCWdvdG8gb3V0X2ZyZWVtZW07CisJfQorCisJcmV0ID0gaHdfcXVldWVfY3RvcigmZXEtPmh3X3F1ZXVlLCBlcS0+YXR0ci5ucl9wYWdlcywKKwkJCSAgICBFSEVBX1BBR0VTSVpFLCBzaXplb2Yoc3RydWN0IGVoZWFfZXFlKSk7CisJaWYgKHJldCkgeworCQllaGVhX2Vycm9yKCJjYW4ndCBhbGxvY2F0ZSBlcSBwYWdlcyIpOworCQlnb3RvIG91dF9mcmVlcmVzOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBlcS0+YXR0ci5ucl9wYWdlczsgaSsrKSB7CisJCXZwYWdlID0gaHdfcXBhZ2VpdF9nZXRfaW5jKCZlcS0+aHdfcXVldWUpOworCQlpZiAoIXZwYWdlKSB7CisJCQllaGVhX2Vycm9yKCJod19xcGFnZWl0X2dldF9pbmMgZmFpbGVkIik7CisJCQlocmV0ID0gSF9SRVNPVVJDRTsKKwkJCWdvdG8gb3V0X2tpbGxfaHdxOworCQl9CisKKwkJcnBhZ2UgPSB2aXJ0X3RvX2Ficyh2cGFnZSk7CisKKwkJaHJldCA9IGVoZWFfaF9yZWdpc3Rlcl9ycGFnZShhZGFwdGVyLT5oYW5kbGUsIDAsCisJCQkJCSAgICAgRUhFQV9FUV9SRUdJU1RFUl9PUklHLAorCQkJCQkgICAgIGVxLT5md19oYW5kbGUsIHJwYWdlLCAxKTsKKworCQlpZiAoaSA9PSAoZXEtPmF0dHIubnJfcGFnZXMgLSAxKSkgeworCQkJLyogbGFzdCBwYWdlICovCisJCQl2cGFnZSA9IGh3X3FwYWdlaXRfZ2V0X2luYygmZXEtPmh3X3F1ZXVlKTsKKwkJCWlmICgoaHJldCAhPSBIX1NVQ0NFU1MpIHx8ICh2cGFnZSkpIHsKKwkJCQlnb3RvIG91dF9raWxsX2h3cTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmICgoaHJldCAhPSBIX1BBR0VfUkVHSVNURVJFRCkgfHwgKCF2cGFnZSkpIHsKKwkJCQlnb3RvIG91dF9raWxsX2h3cTsKKwkJCX0KKwkJfQorCX0KKworCWh3X3FlaXRfcmVzZXQoJmVxLT5od19xdWV1ZSk7CisJcmV0dXJuIGVxOworCitvdXRfa2lsbF9od3E6CisJaHdfcXVldWVfZHRvcigmZXEtPmh3X3F1ZXVlKTsKKworb3V0X2ZyZWVyZXM6CisJZWhlYV9oX2ZyZWVfcmVzb3VyY2UoYWRhcHRlci0+aGFuZGxlLCBlcS0+ZndfaGFuZGxlKTsKKworb3V0X2ZyZWVtZW06CisJa2ZyZWUoZXEpOworCXJldHVybiBOVUxMOworfQorCitzdHJ1Y3QgZWhlYV9lcWUgKmVoZWFfcG9sbF9lcShzdHJ1Y3QgZWhlYV9lcSAqZXEpCit7CisJc3RydWN0IGVoZWFfZXFlICplcWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZlcS0+c3BpbmxvY2ssIGZsYWdzKTsKKwllcWUgPSAoc3RydWN0IGVoZWFfZXFlKilod19lcWl0X2VxX2dldF9pbmNfdmFsaWQoJmVxLT5od19xdWV1ZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZXFlOworfQorCitpbnQgZWhlYV9kZXN0cm95X2VxKHN0cnVjdCBlaGVhX2VxICplcSkKK3sKKwl1NjQgaHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFlcSkKKwkJcmV0dXJuIDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlocmV0ID0gZWhlYV9oX2ZyZWVfcmVzb3VyY2UoZXEtPmFkYXB0ZXItPmhhbmRsZSwgZXEtPmZ3X2hhbmRsZSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXEtPnNwaW5sb2NrLCBmbGFncyk7CisKKwlpZiAoaHJldCAhPSBIX1NVQ0NFU1MpIHsKKwkJZWhlYV9lcnJvcigiZGVzdHJveV9lcSBmYWlsZWQiKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaHdfcXVldWVfZHRvcigmZXEtPmh3X3F1ZXVlKTsKKwlrZnJlZShlcSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBhbGxvY2F0ZXMgbWVtb3J5IGZvciBhIHF1ZXVlIGFuZCByZWdpc3RlcnMgcGFnZXMgaW4gcGh5cAorICovCitpbnQgZWhlYV9xcF9hbGxvY19yZWdpc3RlcihzdHJ1Y3QgZWhlYV9xcCAqcXAsIHN0cnVjdCBod19xdWV1ZSAqaHdfcXVldWUsCisJCQkgICBpbnQgbnJfcGFnZXMsIGludCB3cWVfc2l6ZSwgaW50IGFjdF9ucl9zZ2VzLAorCQkJICAgc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlciwgaW50IGhfY2FsbF9xX3NlbGVjdG9yKQoreworCXU2NCBocmV0LCBycGFnZTsKKwlpbnQgcmV0LCBjbnQ7CisJdm9pZCAqdnBhZ2U7CisKKwlyZXQgPSBod19xdWV1ZV9jdG9yKGh3X3F1ZXVlLCBucl9wYWdlcywgRUhFQV9QQUdFU0laRSwgd3FlX3NpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGNudCA9IDA7IGNudCA8IG5yX3BhZ2VzOyBjbnQrKykgeworCQl2cGFnZSA9IGh3X3FwYWdlaXRfZ2V0X2luYyhod19xdWV1ZSk7CisJCWlmICghdnBhZ2UpIHsKKwkJCWVoZWFfZXJyb3IoImh3X3FwYWdlaXRfZ2V0X2luYyBmYWlsZWQiKTsKKwkJCWdvdG8gb3V0X2tpbGxfaHdxOworCQl9CisJCXJwYWdlID0gdmlydF90b19hYnModnBhZ2UpOworCQlocmV0ID0gZWhlYV9oX3JlZ2lzdGVyX3JwYWdlKGFkYXB0ZXItPmhhbmRsZSwKKwkJCQkJICAgICAwLCBoX2NhbGxfcV9zZWxlY3RvciwKKwkJCQkJICAgICBxcC0+ZndfaGFuZGxlLCBycGFnZSwgMSk7CisJCWlmIChocmV0IDwgSF9TVUNDRVNTKSB7CisJCQllaGVhX2Vycm9yKCJyZWdpc3Rlcl9ycGFnZV9xcCBmYWlsZWQiKTsKKwkJCWdvdG8gb3V0X2tpbGxfaHdxOworCQl9CisJfQorCWh3X3FlaXRfcmVzZXQoaHdfcXVldWUpOworCXJldHVybiAwOworCitvdXRfa2lsbF9od3E6CisJaHdfcXVldWVfZHRvcihod19xdWV1ZSk7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIG1hcF93cWVfc2l6ZSh1OCB3cWVfZW5jX3NpemUpCit7CisJcmV0dXJuIDEyOCA8PCB3cWVfZW5jX3NpemU7Cit9CisKK3N0cnVjdCBlaGVhX3FwICplaGVhX2NyZWF0ZV9xcChzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHUzMiBwZCwgc3RydWN0IGVoZWFfcXBfaW5pdF9hdHRyICppbml0X2F0dHIpCit7CisJaW50IHJldDsKKwl1NjQgaHJldDsKKwlzdHJ1Y3QgZWhlYV9xcCAqcXA7CisJdTMyIHdxZV9zaXplX2luX2J5dGVzX3NxLCB3cWVfc2l6ZV9pbl9ieXRlc19ycTE7CisJdTMyIHdxZV9zaXplX2luX2J5dGVzX3JxMiwgd3FlX3NpemVfaW5fYnl0ZXNfcnEzOworCisKKwlxcCA9IGt6YWxsb2Moc2l6ZW9mKCpxcCksIEdGUF9LRVJORUwpOworCWlmICghcXApIHsKKwkJZWhlYV9lcnJvcigibm8gbWVtIGZvciBxcCIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlxcC0+YWRhcHRlciA9IGFkYXB0ZXI7CisKKwlocmV0ID0gZWhlYV9oX2FsbG9jX3Jlc291cmNlX3FwKGFkYXB0ZXItPmhhbmRsZSwgaW5pdF9hdHRyLCBwZCwKKwkJCQkJJnFwLT5md19oYW5kbGUsICZxcC0+ZXBhcyk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoImVoZWFfaF9hbGxvY19yZXNvdXJjZV9xcCBmYWlsZWQiKTsKKwkJZ290byBvdXRfZnJlZW1lbTsKKwl9CisKKwl3cWVfc2l6ZV9pbl9ieXRlc19zcSA9IG1hcF93cWVfc2l6ZShpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfc3EpOworCXdxZV9zaXplX2luX2J5dGVzX3JxMSA9IG1hcF93cWVfc2l6ZShpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfcnExKTsKKwl3cWVfc2l6ZV9pbl9ieXRlc19ycTIgPSBtYXBfd3FlX3NpemUoaW5pdF9hdHRyLT5hY3Rfd3FlX3NpemVfZW5jX3JxMik7CisJd3FlX3NpemVfaW5fYnl0ZXNfcnEzID0gbWFwX3dxZV9zaXplKGluaXRfYXR0ci0+YWN0X3dxZV9zaXplX2VuY19ycTMpOworCisJcmV0ID0gZWhlYV9xcF9hbGxvY19yZWdpc3RlcihxcCwgJnFwLT5od19zcXVldWUsIGluaXRfYXR0ci0+bnJfc3FfcGFnZXMsCisJCQkJICAgICB3cWVfc2l6ZV9pbl9ieXRlc19zcSwKKwkJCQkgICAgIGluaXRfYXR0ci0+YWN0X3dxZV9zaXplX2VuY19zcSwgYWRhcHRlciwKKwkJCQkgICAgIDApOworCWlmIChyZXQpIHsKKwkJZWhlYV9lcnJvcigiY2FuJ3QgcmVnaXN0ZXIgZm9yIHNxIHJldD0leCIsIHJldCk7CisJCWdvdG8gb3V0X2ZyZWVyZXM7CisJfQorCisJcmV0ID0gZWhlYV9xcF9hbGxvY19yZWdpc3RlcihxcCwgJnFwLT5od19ycXVldWUxLAorCQkJCSAgICAgaW5pdF9hdHRyLT5ucl9ycTFfcGFnZXMsCisJCQkJICAgICB3cWVfc2l6ZV9pbl9ieXRlc19ycTEsCisJCQkJICAgICBpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfcnExLAorCQkJCSAgICAgYWRhcHRlciwgMSk7CisJaWYgKHJldCkgeworCQllaGVhX2Vycm9yKCJjYW4ndCByZWdpc3RlciBmb3IgcnExIHJldD0leCIsIHJldCk7CisJCWdvdG8gb3V0X2tpbGxfaHdzcTsKKwl9CisKKwlpZiAoaW5pdF9hdHRyLT5ycV9jb3VudCA+IDEpIHsKKwkJcmV0ID0gZWhlYV9xcF9hbGxvY19yZWdpc3RlcihxcCwgJnFwLT5od19ycXVldWUyLAorCQkJCQkgICAgIGluaXRfYXR0ci0+bnJfcnEyX3BhZ2VzLAorCQkJCQkgICAgIHdxZV9zaXplX2luX2J5dGVzX3JxMiwKKwkJCQkJICAgICBpbml0X2F0dHItPmFjdF93cWVfc2l6ZV9lbmNfcnEyLAorCQkJCQkgICAgIGFkYXB0ZXIsIDIpOworCQlpZiAocmV0KSB7CisJCQllaGVhX2Vycm9yKCJjYW4ndCByZWdpc3RlciBmb3IgcnEyIHJldD0leCIsIHJldCk7CisJCQlnb3RvIG91dF9raWxsX2h3cjFxOworCQl9CisJfQorCisJaWYgKGluaXRfYXR0ci0+cnFfY291bnQgPiAyKSB7CisJCXJldCA9IGVoZWFfcXBfYWxsb2NfcmVnaXN0ZXIocXAsICZxcC0+aHdfcnF1ZXVlMywKKwkJCQkJICAgICBpbml0X2F0dHItPm5yX3JxM19wYWdlcywKKwkJCQkJICAgICB3cWVfc2l6ZV9pbl9ieXRlc19ycTMsCisJCQkJCSAgICAgaW5pdF9hdHRyLT5hY3Rfd3FlX3NpemVfZW5jX3JxMywKKwkJCQkJICAgICBhZGFwdGVyLCAzKTsKKwkJaWYgKHJldCkgeworCQkJZWhlYV9lcnJvcigiY2FuJ3QgcmVnaXN0ZXIgZm9yIHJxMyByZXQ9JXgiLCByZXQpOworCQkJZ290byBvdXRfa2lsbF9od3IycTsKKwkJfQorCX0KKworCXFwLT5pbml0X2F0dHIgPSAqaW5pdF9hdHRyOworCisJcmV0dXJuIHFwOworCitvdXRfa2lsbF9od3IycToKKwlod19xdWV1ZV9kdG9yKCZxcC0+aHdfcnF1ZXVlMik7CisKK291dF9raWxsX2h3cjFxOgorCWh3X3F1ZXVlX2R0b3IoJnFwLT5od19ycXVldWUxKTsKKworb3V0X2tpbGxfaHdzcToKKwlod19xdWV1ZV9kdG9yKCZxcC0+aHdfc3F1ZXVlKTsKKworb3V0X2ZyZWVyZXM6CisJZWhlYV9oX2Rpc2FibGVfYW5kX2dldF9oZWEoYWRhcHRlci0+aGFuZGxlLCBxcC0+ZndfaGFuZGxlKTsKKwllaGVhX2hfZnJlZV9yZXNvdXJjZShhZGFwdGVyLT5oYW5kbGUsIHFwLT5md19oYW5kbGUpOworCitvdXRfZnJlZW1lbToKKwlrZnJlZShxcCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBlaGVhX2Rlc3Ryb3lfcXAoc3RydWN0IGVoZWFfcXAgKnFwKQoreworCXU2NCBocmV0OworCXN0cnVjdCBlaGVhX3FwX2luaXRfYXR0ciAqcXBfYXR0ciA9ICZxcC0+aW5pdF9hdHRyOworCisJaWYgKCFxcCkKKwkJcmV0dXJuIDA7CisKKwlocmV0ID0gZWhlYV9oX2ZyZWVfcmVzb3VyY2UocXAtPmFkYXB0ZXItPmhhbmRsZSwgcXAtPmZ3X2hhbmRsZSk7CisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfZXJyb3IoImRlc3Ryb3lfcXAgZmFpbGVkIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWh3X3F1ZXVlX2R0b3IoJnFwLT5od19zcXVldWUpOworCWh3X3F1ZXVlX2R0b3IoJnFwLT5od19ycXVldWUxKTsKKworICAgCWlmIChxcF9hdHRyLT5ycV9jb3VudCA+IDEpCisJCWh3X3F1ZXVlX2R0b3IoJnFwLT5od19ycXVldWUyKTsKKyAgIAlpZiAocXBfYXR0ci0+cnFfY291bnQgPiAyKQorCQlod19xdWV1ZV9kdG9yKCZxcC0+aHdfcnF1ZXVlMyk7CisJa2ZyZWUocXApOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBlaGVhX3JlZ19tcl9hZGFwdGVyKHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGssIHJldDsKKwl1NjQgaHJldCwgcHRfYWJzLCBzdGFydCwgZW5kLCBucl9wYWdlczsKKwl1MzIgYWNjX2N0cmwgPSBFSEVBX01SX0FDQ19DVFJMOworCXU2NCAqcHQ7CisKKwlzdGFydCA9IEtFUk5FTEJBU0U7CisJZW5kID0gKHU2NCloaWdoX21lbW9yeTsKKwlucl9wYWdlcyA9IChlbmQgLSBzdGFydCkgLyBQQUdFX1NJWkU7CisKKwlwdCA9ICBremFsbG9jKFBBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwdCkgeworCQllaGVhX2Vycm9yKCJubyBtZW0iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXB0X2FicyA9IHZpcnRfdG9fYWJzKHB0KTsKKworCWhyZXQgPSBlaGVhX2hfYWxsb2NfcmVzb3VyY2VfbXIoYWRhcHRlci0+aGFuZGxlLCBzdGFydCwgZW5kIC0gc3RhcnQsCisJCQkJCWFjY19jdHJsLCBhZGFwdGVyLT5wZCwKKwkJCQkJJmFkYXB0ZXItPm1yLmhhbmRsZSwgJmFkYXB0ZXItPm1yLmxrZXkpOworCWlmIChocmV0ICE9IEhfU1VDQ0VTUykgeworCQllaGVhX2Vycm9yKCJhbGxvY19yZXNvdXJjZV9tciBmYWlsZWQiKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJYWRhcHRlci0+bXIudmFkZHIgPSBLRVJORUxCQVNFOworCWsgPSAwOworCisJd2hpbGUgKG5yX3BhZ2VzID4gMCkgeworCQlpZiAobnJfcGFnZXMgPiAxKSB7CisJCQl1NjQgbnVtX3BhZ2VzID0gbWluKG5yX3BhZ2VzLCAodTY0KTUxMik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BhZ2VzOyBpKyspCisJCQkJcHRbaV0gPSB2aXJ0X3RvX2Ficygodm9pZCopKCgodTY0KXN0YXJ0KQorCQkJCQkJCSAgICAgKyAoKGsrKykgKgorCQkJCQkJCQlQQUdFX1NJWkUpKSk7CisKKwkJCWhyZXQgPSBlaGVhX2hfcmVnaXN0ZXJfcnBhZ2VfbXIoYWRhcHRlci0+aGFuZGxlLAorCQkJCQkJCWFkYXB0ZXItPm1yLmhhbmRsZSwgMCwKKwkJCQkJCQkwLCAodTY0KXB0X2FicywKKwkJCQkJCQludW1fcGFnZXMpOworCQkJbnJfcGFnZXMgLT0gbnVtX3BhZ2VzOworCQl9IGVsc2UgeworCQkJdTY0IGFic19hZHIgPSB2aXJ0X3RvX2Ficygodm9pZCopKCgodTY0KXN0YXJ0KQorCQkJCQkJCSAgICsgKGsgKiBQQUdFX1NJWkUpKSk7CisJCQlocmV0ID0gZWhlYV9oX3JlZ2lzdGVyX3JwYWdlX21yKGFkYXB0ZXItPmhhbmRsZSwKKwkJCQkJCQlhZGFwdGVyLT5tci5oYW5kbGUsIDAsCisJCQkJCQkJMCwgYWJzX2FkciwxKTsKKwkJCW5yX3BhZ2VzLS07CisJCX0KKworCQlpZiAoKGhyZXQgIT0gSF9TVUNDRVNTKSAmJiAoaHJldCAhPSBIX1BBR0VfUkVHSVNURVJFRCkpIHsKKwkJCWVoZWFfaF9mcmVlX3Jlc291cmNlKGFkYXB0ZXItPmhhbmRsZSwKKwkJCQkJCWFkYXB0ZXItPm1yLmhhbmRsZSk7CisJCQllaGVhX2Vycm9yKCJyZWdpc3Rlcl9ycGFnZV9tciBmYWlsZWQ6IGhyZXQgPSAlbFgiLAorCQkJCSAgIGhyZXQpOworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYgKGhyZXQgIT0gSF9TVUNDRVNTKSB7CisJCWVoZWFfaF9mcmVlX3Jlc291cmNlKGFkYXB0ZXItPmhhbmRsZSwgYWRhcHRlci0+bXIuaGFuZGxlKTsKKwkJZWhlYV9lcnJvcigicmVnaXN0ZXJfcnBhZ2UgZmFpbGVkIGZvciBsYXN0IHBhZ2U6IGhyZXQgPSAlbFgiLAorCQkJICAgaHJldCk7CisJCXJldCA9IC1FSU87CisJCWdvdG8gb3V0OworCX0KKwlyZXQgPSAwOworb3V0OgorCWtmcmVlKHB0KTsKKwlyZXR1cm4gcmV0OworfQorCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaCBiL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWZkYzk2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX3Ftci5oCkBAIC0wLDAgKzEsMzU4IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9xbXIuaAorICoKKyAqICBlSEVBIGV0aGVybmV0IGRldmljZSBkcml2ZXIgZm9yIElCTSBlU2VydmVyIFN5c3RlbSBwCisgKgorICogIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDYKKyAqCisgKiAgQXV0aG9yczoKKyAqICAgICAgIENocmlzdG9waCBSYWlzY2ggPHJhaXNjaEBkZS5pYm0uY29tPgorICogICAgICAgSmFuLUJlcm5kIFRoZW1hbm4gPHRoZW1hbm5AZGUuaWJtLmNvbT4KKyAqICAgICAgIFRob21hcyBLbGVpbiA8dGtsZWluQGRlLmlibS5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgkgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19FSEVBX1FNUl9IX18KKyNkZWZpbmUgX19FSEVBX1FNUl9IX18KKworI2luY2x1ZGUgImVoZWEuaCIKKyNpbmNsdWRlICJlaGVhX2h3LmgiCisKKy8qCisgKiBwYWdlIHNpemUgb2YgZWhlYSBoYXJkd2FyZSBxdWV1ZXMKKyAqLworCisjZGVmaW5lIEVIRUFfUEFHRVNISUZUICAxMgorI2RlZmluZSBFSEVBX1BBR0VTSVpFICAgNDA5NlVMCisKKy8qIFNvbWUgYWJicmV2aWF0aW9ucyB1c2VkIGhlcmU6CisgKgorICogV1FFICAtIFdvcmsgUXVldWUgRW50cnkKKyAqIFNXUUUgLSBTZW5kIFdvcmsgUXVldWUgRW50cnkKKyAqIFJXUUUgLSBSZWNlaXZlIFdvcmsgUXVldWUgRW50cnkKKyAqIENRRSAgLSBDb21wbGV0aW9uIFF1ZXVlIEVudHJ5CisgKiBFUUUgIC0gRXZlbnQgUXVldWUgRW50cnkKKyAqIE1SICAgLSBNZW1vcnkgUmVnaW9uCisgKi8KKworLyogVXNlIG9mIFdSX0lEIGZpZWxkIGZvciBFSEVBICovCisjZGVmaW5lIEVIRUFfV1JfSURfQ09VTlQgICBFSEVBX0JNQVNLX0lCTSgwLCAxOSkKKyNkZWZpbmUgRUhFQV9XUl9JRF9UWVBFICAgIEVIRUFfQk1BU0tfSUJNKDIwLCAyMykKKyNkZWZpbmUgRUhFQV9TV1FFMl9UWVBFICAgIDB4MQorI2RlZmluZSBFSEVBX1NXUUUzX1RZUEUgICAgMHgyCisjZGVmaW5lIEVIRUFfUldRRTJfVFlQRSAgICAweDMKKyNkZWZpbmUgRUhFQV9SV1FFM19UWVBFICAgIDB4NAorI2RlZmluZSBFSEVBX1dSX0lEX0lOREVYICAgRUhFQV9CTUFTS19JQk0oMjQsIDQ3KQorI2RlZmluZSBFSEVBX1dSX0lEX1JFRklMTCAgRUhFQV9CTUFTS19JQk0oNDgsIDYzKQorCitzdHJ1Y3QgZWhlYV92c2dlbnRyeSB7CisJdTY0IHZhZGRyOworCXUzMiBsX2tleTsKKwl1MzIgbGVuOworfTsKKworLyogbWF4aW11bSBudW1iZXIgb2Ygc2cgZW50cmllcyBhbGxvd2VkIGluIGEgV1FFICovCisjZGVmaW5lIEVIRUFfTUFYX1dRRV9TR19FTlRSSUVTICAJMjUyCisjZGVmaW5lIFNXUUUyX01BWF9JTU0gICAgICAgICAgICAJKDB4RDAgLSAweDMwKQorI2RlZmluZSBTV1FFM19NQVhfSU1NICAgICAgICAgICAgCTIyNAorCisvKiB0eCBjb250cm9sIGZsYWdzIGZvciBzd3FlICovCisjZGVmaW5lIEVIRUFfU1dRRV9DUkMgICAgICAgICAgICAgICAgICAgMHg4MDAwCisjZGVmaW5lIEVIRUFfU1dRRV9JUF9DSEVDS1NVTSAgICAgICAgICAgMHg0MDAwCisjZGVmaW5lIEVIRUFfU1dRRV9UQ1BfQ0hFQ0tTVU0gICAgICAgICAgMHgyMDAwCisjZGVmaW5lIEVIRUFfU1dRRV9UU08gICAgICAgICAgICAgICAgICAgMHgxMDAwCisjZGVmaW5lIEVIRUFfU1dRRV9TSUdOQUxMRURfQ09NUExFVElPTiAgMHgwODAwCisjZGVmaW5lIEVIRUFfU1dRRV9WTEFOX0lOU0VSVCAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIEVIRUFfU1dRRV9JTU1fREFUQV9QUkVTRU5UICAgICAgMHgwMjAwCisjZGVmaW5lIEVIRUFfU1dRRV9ERVNDUklQVE9SU19QUkVTRU5UICAgMHgwMTAwCisjZGVmaW5lIEVIRUFfU1dRRV9XUkFQX0NUTF9SRUMgICAgICAgICAgMHgwMDgwCisjZGVmaW5lIEVIRUFfU1dRRV9XUkFQX0NUTF9GT1JDRSAgICAgICAgMHgwMDQwCisjZGVmaW5lIEVIRUFfU1dRRV9CSU5EICAgICAgICAgICAgICAgICAgMHgwMDIwCisjZGVmaW5lIEVIRUFfU1dRRV9QVVJHRSAgICAgICAgICAgICAgICAgMHgwMDEwCisKKy8qIHNpemVvZihzdHJ1Y3QgZWhlYV9zd3FlKSBsZXNzIHRoZSB1bmlvbiAqLworI2RlZmluZSBTV1FFX0hFQURFUl9TSVpFCQkzMgorCitzdHJ1Y3QgZWhlYV9zd3FlIHsKKwl1NjQgd3JfaWQ7CisJdTE2IHR4X2NvbnRyb2w7CisJdTE2IHZsYW5fdGFnOworCXU4IHJlc2VydmVkMTsKKwl1OCBpcF9zdGFydDsKKwl1OCBpcF9lbmQ7CisJdTggaW1tZWRpYXRlX2RhdGFfbGVuZ3RoOworCXU4IHRjcF9vZmZzZXQ7CisJdTggcmVzZXJ2ZWQyOworCXUxNiB0Y3BfZW5kOworCXU4IHdyYXBfdGFnOworCXU4IGRlc2NyaXB0b3JzOwkJLyogbnVtYmVyIG9mIHZhbGlkIGRlc2NyaXB0b3JzIGluIFdRRSAqLworCXUxNiByZXNlcnZlZDM7CisJdTE2IHJlc2VydmVkNDsKKwl1MTYgbXNzOworCXUzMiByZXNlcnZlZDU7CisJdW5pb24geworCQkvKiAgU2VuZCBXUUUgRm9ybWF0IDEgKi8KKwkJc3RydWN0IHsKKwkJCXN0cnVjdCBlaGVhX3ZzZ2VudHJ5IHNnX2xpc3RbRUhFQV9NQVhfV1FFX1NHX0VOVFJJRVNdOworCQl9IG5vX2ltbWVkaWF0ZV9kYXRhOworCisJCS8qICBTZW5kIFdRRSBGb3JtYXQgMiAqLworCQlzdHJ1Y3QgeworCQkJc3RydWN0IGVoZWFfdnNnZW50cnkgc2dfZW50cnk7CisJCQkvKiAweDMwICovCisJCQl1OCBpbW1lZGlhdGVfZGF0YVtTV1FFMl9NQVhfSU1NXTsKKwkJCS8qIDB4ZDAgKi8KKwkJCXN0cnVjdCBlaGVhX3ZzZ2VudHJ5IHNnX2xpc3RbRUhFQV9NQVhfV1FFX1NHX0VOVFJJRVMtMV07CisJCX0gaW1tZGF0YV9kZXNjIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCQkvKiAgU2VuZCBXUUUgRm9ybWF0IDMgKi8KKwkJc3RydWN0IHsKKwkJCXU4IGltbWVkaWF0ZV9kYXRhW1NXUUUzX01BWF9JTU1dOworCQl9IGltbWRhdGFfbm9kZXNjOworCX0gdTsKK307CisKK3N0cnVjdCBlaGVhX3J3cWUgeworCXU2NCB3cl9pZDsJCS8qIHdvcmsgcmVxdWVzdCBJRCAqLworCXU4IHJlc2VydmVkMVs1XTsKKwl1OCBkYXRhX3NlZ21lbnRzOworCXUxNiByZXNlcnZlZDI7CisJdTY0IHJlc2VydmVkMzsKKwl1NjQgcmVzZXJ2ZWQ0OworCXN0cnVjdCBlaGVhX3ZzZ2VudHJ5IHNnX2xpc3RbRUhFQV9NQVhfV1FFX1NHX0VOVFJJRVNdOworfTsKKworI2RlZmluZSBFSEVBX0NRRV9WTEFOX1RBR19YVFJBQ1QgICAweDA0MDAKKworI2RlZmluZSBFSEVBX0NRRV9UWVBFX1JRICAgICAgICAgICAweDYwCisjZGVmaW5lIEVIRUFfQ1FFX1NUQVRfRVJSX01BU0sgICAgIDB4NzIxRgorI2RlZmluZSBFSEVBX0NRRV9TVEFUX0ZBVF9FUlJfTUFTSyAweDFGCisjZGVmaW5lIEVIRUFfQ1FFX1NUQVRfRVJSX1RDUCAgICAgIDB4NDAwMAorCitzdHJ1Y3QgZWhlYV9jcWUgeworCXU2NCB3cl9pZDsJCS8qIHdvcmsgcmVxdWVzdCBJRCBmcm9tIFdRRSAqLworCXU4IHR5cGU7CisJdTggdmFsaWQ7CisJdTE2IHN0YXR1czsKKwl1MTYgcmVzZXJ2ZWQxOworCXUxNiBudW1fYnl0ZXNfdHJhbnNmZXJlZDsKKwl1MTYgdmxhbl90YWc7CisJdTE2IGluZXRfY2hlY2tzdW1fdmFsdWU7CisJdTggcmVzZXJ2ZWQyOworCXU4IGhlYWRlcl9sZW5ndGg7CisJdTE2IHJlc2VydmVkMzsKKwl1MTYgcGFnZV9vZmZzZXQ7CisJdTE2IHdxZV9jb3VudDsKKwl1MzIgcXBfdG9rZW47CisJdTMyIHRpbWVzdGFtcDsKKwl1MzIgcmVzZXJ2ZWQ0OworCXU2NCByZXNlcnZlZDVbM107Cit9OworCisjZGVmaW5lIEVIRUFfRVFFX1ZBTElEICAgICAgICAgICBFSEVBX0JNQVNLX0lCTSgwLCAwKQorI2RlZmluZSBFSEVBX0VRRV9JU19DUUUgICAgICAgICAgRUhFQV9CTUFTS19JQk0oMSwgMSkKKyNkZWZpbmUgRUhFQV9FUUVfSURFTlRJRklFUiAgICAgIEVIRUFfQk1BU0tfSUJNKDIsIDcpCisjZGVmaW5lIEVIRUFfRVFFX1FQX0NRX05VTUJFUiAgICBFSEVBX0JNQVNLX0lCTSg4LCAzMSkKKyNkZWZpbmUgRUhFQV9FUUVfUVBfVE9LRU4gICAgICAgIEVIRUFfQk1BU0tfSUJNKDMyLCA2MykKKyNkZWZpbmUgRUhFQV9FUUVfQ1FfVE9LRU4gICAgICAgIEVIRUFfQk1BU0tfSUJNKDMyLCA2MykKKyNkZWZpbmUgRUhFQV9FUUVfS0VZICAgICAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDMyLCA2MykKKyNkZWZpbmUgRUhFQV9FUUVfUE9SVF9OVU1CRVIgICAgIEVIRUFfQk1BU0tfSUJNKDU2LCA2MykKKyNkZWZpbmUgRUhFQV9FUUVfRVFfTlVNQkVSICAgICAgIEVIRUFfQk1BU0tfSUJNKDQ4LCA2MykKKyNkZWZpbmUgRUhFQV9FUUVfU01fSUQgICAgICAgICAgIEVIRUFfQk1BU0tfSUJNKDQ4LCA2MykKKyNkZWZpbmUgRUhFQV9FUUVfU01fTUVDSF9OVU1CRVIgIEVIRUFfQk1BU0tfSUJNKDQ4LCA1NSkKKyNkZWZpbmUgRUhFQV9FUUVfU01fUE9SVF9OVU1CRVIgIEVIRUFfQk1BU0tfSUJNKDU2LCA2MykKKworc3RydWN0IGVoZWFfZXFlIHsKKwl1NjQgZW50cnk7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgKmh3X3FlaXRfY2FsYyhzdHJ1Y3QgaHdfcXVldWUgKnF1ZXVlLCB1NjQgcV9vZmZzZXQpCit7CisJc3RydWN0IGVoZWFfcGFnZSAqY3VycmVudF9wYWdlOworCisJaWYgKHFfb2Zmc2V0ID49IHF1ZXVlLT5xdWV1ZV9sZW5ndGgpCisJCXFfb2Zmc2V0IC09IHF1ZXVlLT5xdWV1ZV9sZW5ndGg7CisJY3VycmVudF9wYWdlID0gKHF1ZXVlLT5xdWV1ZV9wYWdlcylbcV9vZmZzZXQgPj4gRUhFQV9QQUdFU0hJRlRdOworCXJldHVybiAmY3VycmVudF9wYWdlLT5lbnRyaWVzW3Ffb2Zmc2V0ICYgKEVIRUFfUEFHRVNJWkUgLSAxKV07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHdfcWVpdF9nZXQoc3RydWN0IGh3X3F1ZXVlICpxdWV1ZSkKK3sKKwlyZXR1cm4gaHdfcWVpdF9jYWxjKHF1ZXVlLCBxdWV1ZS0+Y3VycmVudF9xX29mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19xZWl0X2luYyhzdHJ1Y3QgaHdfcXVldWUgKnF1ZXVlKQoreworCXF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ICs9IHF1ZXVlLT5xZV9zaXplOworCWlmIChxdWV1ZS0+Y3VycmVudF9xX29mZnNldCA+PSBxdWV1ZS0+cXVldWVfbGVuZ3RoKSB7CisJCXF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID0gMDsKKwkJLyogdG9nZ2xlIHRoZSB2YWxpZCBmbGFnICovCisJCXF1ZXVlLT50b2dnbGVfc3RhdGUgPSAofnF1ZXVlLT50b2dnbGVfc3RhdGUpICYgMTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHdfcWVpdF9nZXRfaW5jKHN0cnVjdCBod19xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0dmFsdWUgPSBod19xZWl0X2dldChxdWV1ZSk7CisJaHdfcWVpdF9pbmMocXVldWUpOworCXJldHVybiByZXR2YWx1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpod19xZWl0X2dldF9pbmNfdmFsaWQoc3RydWN0IGh3X3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgZWhlYV9jcWUgKnJldHZhbHVlID0gaHdfcWVpdF9nZXQocXVldWUpOworCXU4IHZhbGlkID0gcmV0dmFsdWUtPnZhbGlkOworCXZvaWQgKnByZWY7CisKKwlpZiAoKHZhbGlkID4+IDcpID09IChxdWV1ZS0+dG9nZ2xlX3N0YXRlICYgMSkpIHsKKwkJLyogdGhpcyBpcyBhIGdvb2Qgb25lICovCisJCWh3X3FlaXRfaW5jKHF1ZXVlKTsKKwkJcHJlZiA9IGh3X3FlaXRfY2FsYyhxdWV1ZSwgcXVldWUtPmN1cnJlbnRfcV9vZmZzZXQpOworCQlwcmVmZXRjaChwcmVmKTsKKwkJcHJlZmV0Y2gocHJlZiArIDEyOCk7CisJfSBlbHNlCisJCXJldHZhbHVlID0gTlVMTDsKKwlyZXR1cm4gcmV0dmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHdfcWVpdF9nZXRfdmFsaWQoc3RydWN0IGh3X3F1ZXVlICpxdWV1ZSkKK3sKKwlzdHJ1Y3QgZWhlYV9jcWUgKnJldHZhbHVlID0gaHdfcWVpdF9nZXQocXVldWUpOworCXZvaWQgKnByZWY7CisJdTggdmFsaWQ7CisKKwlwcmVmID0gaHdfcWVpdF9jYWxjKHF1ZXVlLCBxdWV1ZS0+Y3VycmVudF9xX29mZnNldCk7CisJcHJlZmV0Y2gocHJlZik7CisJcHJlZmV0Y2gocHJlZiArIDEyOCk7CisJcHJlZmV0Y2gocHJlZiArIDI1Nik7CisJdmFsaWQgPSByZXR2YWx1ZS0+dmFsaWQ7CisJaWYgKCEoKHZhbGlkID4+IDcpID09IChxdWV1ZS0+dG9nZ2xlX3N0YXRlICYgMSkpKQorCQlyZXR2YWx1ZSA9IE5VTEw7CisJcmV0dXJuIHJldHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmh3X3FlaXRfcmVzZXQoc3RydWN0IGh3X3F1ZXVlICpxdWV1ZSkKK3sKKwlxdWV1ZS0+Y3VycmVudF9xX29mZnNldCA9IDA7CisJcmV0dXJuIGh3X3FlaXRfZ2V0KHF1ZXVlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpod19xZWl0X2VxX2dldF9pbmMoc3RydWN0IGh3X3F1ZXVlICpxdWV1ZSkKK3sKKwl1NjQgbGFzdF9lbnRyeV9pbl9xID0gcXVldWUtPnF1ZXVlX2xlbmd0aCAtIHF1ZXVlLT5xZV9zaXplOworCXZvaWQgKnJldHZhbHVlOworCisJcmV0dmFsdWUgPSBod19xZWl0X2dldChxdWV1ZSk7CisJcXVldWUtPmN1cnJlbnRfcV9vZmZzZXQgKz0gcXVldWUtPnFlX3NpemU7CisJaWYgKHF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID4gbGFzdF9lbnRyeV9pbl9xKSB7CisJCXF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0ID0gMDsKKwkJcXVldWUtPnRvZ2dsZV9zdGF0ZSA9ICh+cXVldWUtPnRvZ2dsZV9zdGF0ZSkgJiAxOworCX0KKwlyZXR1cm4gcmV0dmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHdfZXFpdF9lcV9nZXRfaW5jX3ZhbGlkKHN0cnVjdCBod19xdWV1ZSAqcXVldWUpCit7CisJdm9pZCAqcmV0dmFsdWUgPSBod19xZWl0X2dldChxdWV1ZSk7CisJdTMyIHFlID0gKih1OCopcmV0dmFsdWU7CisJaWYgKChxZSA+PiA3KSA9PSAocXVldWUtPnRvZ2dsZV9zdGF0ZSAmIDEpKQorCQlod19xZWl0X2VxX2dldF9pbmMocXVldWUpOworCWVsc2UKKwkJcmV0dmFsdWUgPSBOVUxMOworCXJldHVybiByZXR2YWx1ZTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZWhlYV9yd3FlICplaGVhX2dldF9uZXh0X3J3cWUoc3RydWN0IGVoZWFfcXAgKnFwLAorCQkJCQkJICAgaW50IHJxX25yKQoreworCXN0cnVjdCBod19xdWV1ZSAqcXVldWU7CisKKwlpZiAocnFfbnIgPT0gMSkKKwkJcXVldWUgPSAmcXAtPmh3X3JxdWV1ZTE7CisJZWxzZSBpZiAocnFfbnIgPT0gMikKKwkJcXVldWUgPSAmcXAtPmh3X3JxdWV1ZTI7CisJZWxzZQorCQlxdWV1ZSA9ICZxcC0+aHdfcnF1ZXVlMzsKKworCXJldHVybiBod19xZWl0X2dldF9pbmMocXVldWUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGVhX3N3cWUgKmVoZWFfZ2V0X3N3cWUoc3RydWN0IGVoZWFfcXAgKm15X3FwLAorCQkJCQkgICAgICBpbnQgKndxZV9pbmRleCkKK3sKKwlzdHJ1Y3QgaHdfcXVldWUgKnF1ZXVlID0gJm15X3FwLT5od19zcXVldWU7CisJc3RydWN0IGVoZWFfc3dxZSAqd3FlX3A7CisKKwkqd3FlX2luZGV4ID0gKHF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0KSA+PiAoNyArIEVIRUFfU0dfU1EpOworCXdxZV9wID0gaHdfcWVpdF9nZXRfaW5jKCZteV9xcC0+aHdfc3F1ZXVlKTsKKworCXJldHVybiB3cWVfcDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGVoZWFfcG9zdF9zd3FlKHN0cnVjdCBlaGVhX3FwICpteV9xcCwgc3RydWN0IGVoZWFfc3dxZSAqc3dxZSkKK3sKKwlpb3N5bmMoKTsKKwllaGVhX3VwZGF0ZV9zcWEobXlfcXAsIDEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGVhX2NxZSAqZWhlYV9wb2xsX3JxMShzdHJ1Y3QgZWhlYV9xcCAqcXAsIGludCAqd3FlX2luZGV4KQoreworCXN0cnVjdCBod19xdWV1ZSAqcXVldWUgPSAmcXAtPmh3X3JxdWV1ZTE7CisKKwkqd3FlX2luZGV4ID0gKHF1ZXVlLT5jdXJyZW50X3Ffb2Zmc2V0KSA+PiAoNyArIEVIRUFfU0dfUlExKTsKKwlyZXR1cm4gaHdfcWVpdF9nZXRfdmFsaWQocXVldWUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZWhlYV9pbmNfcnExKHN0cnVjdCBlaGVhX3FwICpxcCkKK3sKKwlod19xZWl0X2luYygmcXAtPmh3X3JxdWV1ZTEpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBlaGVhX2NxZSAqZWhlYV9wb2xsX2NxKHN0cnVjdCBlaGVhX2NxICpteV9jcSkKK3sKKwlyZXR1cm4gaHdfcWVpdF9nZXRfaW5jX3ZhbGlkKCZteV9jcS0+aHdfcXVldWUpOworfQorCisjZGVmaW5lIEVIRUFfQ1FfUkVHSVNURVJfT1JJRyAwCisjZGVmaW5lIEVIRUFfRVFfUkVHSVNURVJfT1JJRyAwCisKK2VudW0gZWhlYV9lcV90eXBlIHsKKwlFSEVBX0VRID0gMCwJCS8qIGV2ZW50IHF1ZXVlICAgICAgICAgICAgICAqLworCUVIRUFfTkVRCQkvKiBub3RpZmljYXRpb24gZXZlbnQgcXVldWUgKi8KK307CisKK3N0cnVjdCBlaGVhX2VxICplaGVhX2NyZWF0ZV9lcShzdHJ1Y3QgZWhlYV9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIGVudW0gZWhlYV9lcV90eXBlIHR5cGUsCisJCQkgICAgICAgY29uc3QgdTMyIGxlbmd0aCwgY29uc3QgdTggZXFlX2dlbik7CisKK2ludCBlaGVhX2Rlc3Ryb3lfZXEoc3RydWN0IGVoZWFfZXEgKmVxKTsKKworc3RydWN0IGVoZWFfZXFlICplaGVhX3BvbGxfZXEoc3RydWN0IGVoZWFfZXEgKmVxKTsKKworc3RydWN0IGVoZWFfY3EgKmVoZWFfY3JlYXRlX2NxKHN0cnVjdCBlaGVhX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjcWUsCisJCQkgICAgICAgdTY0IGVxX2hhbmRsZSwgdTMyIGNxX3Rva2VuKTsKKworaW50IGVoZWFfZGVzdHJveV9jcShzdHJ1Y3QgZWhlYV9jcSAqY3EpOworCitzdHJ1Y3QgZWhlYV9xcCAqZWhlYV9jcmVhdGVfcXAoc3RydWN0IGVoZWFfYWRhcHRlciAqIGFkYXB0ZXIsIHUzMiBwZCwKKwkJCSAgICAgICBzdHJ1Y3QgZWhlYV9xcF9pbml0X2F0dHIgKmluaXRfYXR0cik7CisKK2ludCBlaGVhX2Rlc3Ryb3lfcXAoc3RydWN0IGVoZWFfcXAgKnFwKTsKKworaW50IGVoZWFfcmVnX21yX2FkYXB0ZXIoc3RydWN0IGVoZWFfYWRhcHRlciAqYWRhcHRlcik7CisKKyNlbmRpZgkvKiBfX0VIRUFfUU1SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXBpYzEwMC5jIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCmluZGV4IGE2NzY1MGNjLi5iYTI1NjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcGljMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCkBAIC0yNiw4ICsyNiw4IEBACiAqLwogCiAjZGVmaW5lIERSVl9OQU1FICAgICAgICAiZXBpYzEwMCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICIyLjAiCi0jZGVmaW5lIERSVl9SRUxEQVRFICAgICAiSnVuZSAyNywgMjAwNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgICIyLjEiCisjZGVmaW5lIERSVl9SRUxEQVRFICAgICAiU2VwdCAxMSwgMjAwNiIKIAogLyogVGhlIHVzZXItY29uZmlndXJhYmxlIHZhbHVlcy4KICAgIFRoZXNlIG1heSBiZSBtb2RpZmllZCB3aGVuIGEgZHJpdmVyIG1vZHVsZSBpcyBsb2FkZWQuKi8KQEAgLTI5OSw3ICsyOTksNyBAQAogc3RhdGljIGludCBlcGljX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpOwogc3RhdGljIGlycXJldHVybl90IGVwaWNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIGludCBuZXRkZXZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGludCBlcGljX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICplcGljX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTM4Niw3ICsxMzg2LDYgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQlvdXRsKDB4MDAyQywgaW9hZGRyICsgUnhDdHJsKTsKIAkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gMCkgIHx8ICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVGhlcmUgaXMgYXBwYXJlbnRseSBhIGNoaXAgYnVnLCBzbyB0aGUgbXVsdGljYXN0IGZpbHRlcgpAQCAtMTQ5Myw3ICsxNDkyLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCQk9IG5ldGRldl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBuZXRkZXZfc2V0X3NldHRpbmdzLApAQCAtMTYwNCw3ICsxNjAzLDcgQEAKIAkJdmVyc2lvbiwgdmVyc2lvbjIsIHZlcnNpb24zKTsKICNlbmRpZgogCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJmVwaWNfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZXBpY19kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VxbC5jIGIvZHJpdmVycy9uZXQvZXFsLmMKaW5kZXggODE1NDM2Yy4uYTkzNzAwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXFsLmMKKysrIGIvZHJpdmVycy9uZXQvZXFsLmMKQEAgLTgsNyArOCw3IEBACiAgKgogICoJVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogICoJb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KLSAqIAorICoKICAqIFRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgYXMgc2ltb25AbmNtLmNvbSwgb3IgQy9PCiAgKiAgICBOQ00KICAqICAgIEF0dG46IFNpbW9uIEphbmVzCkBAIC0yMyw3ICsyMyw3IEBACiAgKiBJbnNwaXJhdGlvbnM6CiAgKiAgIFRoZSBIYXJyaWVkIGFuZCBPdmVyd29ya2VkIEFsYW4gQ294CiAgKiBDb25zcGlyYWNpZXM6Ci0gKiAgIFRoZSBBbGFuIENveCBhbmQgTWlrZSBNY0xhZ2FuIHBsb3QgdG8gZ2V0IHNvbWVvbmUgZWxzZSB0byBkbyB0aGUgY29kZSwgCisgKiAgIFRoZSBBbGFuIENveCBhbmQgTWlrZSBNY0xhZ2FuIHBsb3QgdG8gZ2V0IHNvbWVvbmUgZWxzZSB0byBkbyB0aGUgY29kZSwKICAqICAgd2hpY2ggdHVybmVkIG91dCB0byBiZSBtZS4KICAqLwogCkBAIC0xMzgsNyArMTM4LDcgQEAKIHsKIAllcXVhbGl6ZXJfdCAqZXFsID0gKGVxdWFsaXplcl90ICopIHBhcmFtOwogCXN0cnVjdCBsaXN0X2hlYWQgKnRoaXMsICp0bXAsICpoZWFkOwotCQorCiAJc3Bpbl9sb2NrX2JoKCZlcWwtPnF1ZXVlLmxvY2spOwogCWhlYWQgPSAmZXFsLT5xdWV1ZS5hbGxfc2xhdmVzOwogCWxpc3RfZm9yX2VhY2hfc2FmZSh0aGlzLCB0bXAsIGhlYWQpIHsKQEAgLTE1OSw3ICsxNTksNyBAQAogCWFkZF90aW1lcigmZXFsLT50aW1lcik7CiB9CiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2luaXRkYXRhID0gCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CiAJIkVxdWFsaXplcjIwMDI6IFNpbW9uIEphbmVzIChzaW1vbkBuY20uY29tKSBhbmQgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUByZWRoYXQuY29tKVxuIjsKIAogc3RhdGljIHZvaWQgX19pbml0IGVxbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTgyLDEyICsxODIsMTIgQEAKIAlkZXYtPmRvX2lvY3RsCQk9IGVxbF9pb2N0bDsKIAlkZXYtPmhhcmRfc3RhcnRfeG1pdAk9IGVxbF9zbGF2ZV94bWl0OwogCWRldi0+Z2V0X3N0YXRzCQk9IGVxbF9nZXRfc3RhdHM7Ci0gIAorCiAJLyoKIAkgKglOb3cgd2UgdW5kbyBzb21lIG9mIHRoZSB0aGluZ3MgdGhhdCBldGhfc2V0dXAgZG9lcwotCSAqIAl0aGF0IHdlIGRvbid0IGxpa2UgCisJICogCXRoYXQgd2UgZG9uJ3QgbGlrZQogCSAqLwotCSAKKwogCWRldi0+bXR1ICAgICAgICAJPSBFUUxfREVGQVVMVF9NVFU7CS8qIHNldCB0byA1NzYgaW4gaWZfZXFsLmggKi8KIAlkZXYtPmZsYWdzICAgICAgCT0gSUZGX01BU1RFUjsKIApAQCAtMjIzLDcgKzIyMyw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGVxbF9raWxsX3NsYXZlX3F1ZXVlKHNsYXZlX3F1ZXVlX3QgKnF1ZXVlKQoteyAKK3sKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCAqdG1wLCAqdGhpczsKIAogCXNwaW5fbG9ja19iaCgmcXVldWUtPmxvY2spOwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAkvKgogCSAqCVRoZSB0aW1lciBoYXMgdG8gYmUgc3RvcHBlZCBmaXJzdCBiZWZvcmUgd2Ugc3RhcnQgaGFja2luZyBhd2F5Ci0JICoJYXQgdGhlIGRhdGEgc3RydWN0dXJlIGl0IHNjYW5zIGV2ZXJ5IHNvIG9mdGVuLi4uIAorCSAqCWF0IHRoZSBkYXRhIHN0cnVjdHVyZSBpdCBzY2FucyBldmVyeSBzbyBvZnRlbi4uLgogCSAqLwogCiAJZGVsX3RpbWVyX3N5bmMoJmVxbC0+dGltZXIpOwpAQCAtMjY0LDcgKzI2NCw3IEBACiBzdGF0aWMgaW50IGVxbF9zX21hc3Rlcl9jZmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbWFzdGVyX2NvbmZpZ190IF9fdXNlciAqbWMpOwogCiBzdGF0aWMgaW50IGVxbF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKLXsgIAorewogCWlmIChjbWQgIT0gRVFMX0dFVE1BU1RSQ0ZHICYmIGNtZCAhPSBFUUxfR0VUU0xBVkVDRkcgJiYKIAkgICAgIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJICAJcmV0dXJuIC1FUEVSTTsKQEAgLTMwMCwxNSArMzAwLDE1IEBACiAJaGVhZCA9ICZxdWV1ZS0+YWxsX3NsYXZlczsKIAlsaXN0X2Zvcl9lYWNoX3NhZmUodGhpcywgdG1wLCBoZWFkKSB7CiAJCXNsYXZlX3QgKnNsYXZlID0gbGlzdF9lbnRyeSh0aGlzLCBzbGF2ZV90LCBsaXN0KTsKLQkJdW5zaWduZWQgbG9uZyBzbGF2ZV9sb2FkLCBieXRlc19xdWV1ZWQsIHByaW9yaXR5X0JwczsgCisJCXVuc2lnbmVkIGxvbmcgc2xhdmVfbG9hZCwgYnl0ZXNfcXVldWVkLCBwcmlvcml0eV9CcHM7CiAKIAkJLyogR28gdGhyb3VnaCB0aGUgc2xhdmUgbGlzdCBvbmNlLCB1cGRhdGluZyBiZXN0X3NsYXZlCiAJCSAqIHdoZW5ldmVyIGEgbmV3IGJlc3RfbG9hZCBpcyBmb3VuZC4KIAkJICovCiAJCWJ5dGVzX3F1ZXVlZCA9IHNsYXZlLT5ieXRlc19xdWV1ZWQ7Ci0JCXByaW9yaXR5X0JwcyA9IHNsYXZlLT5wcmlvcml0eV9CcHM7ICAgIAorCQlwcmlvcml0eV9CcHMgPSBzbGF2ZS0+cHJpb3JpdHlfQnBzOwogCQlpZiAoKHNsYXZlLT5kZXYtPmZsYWdzICYgSUZGX1VQKSA9PSBJRkZfVVApIHsKLQkJCXNsYXZlX2xvYWQgPSAofjBVTCAtICh+MFVMIC8gMikpIC0gCisJCQlzbGF2ZV9sb2FkID0gKH4wVUwgLSAofjBVTCAvIDIpKSAtCiAJCQkJKHByaW9yaXR5X0JwcykgKyBieXRlc19xdWV1ZWQgKiA4OwogCiAJCQlpZiAoc2xhdmVfbG9hZCA8IGJlc3RfbG9hZCkgewpAQCAtMzM2LDEzICszMzYsMTMgQEAKIAogCQlza2ItPmRldiA9IHNsYXZlX2RldjsKIAkJc2tiLT5wcmlvcml0eSA9IDE7Ci0JCXNsYXZlLT5ieXRlc19xdWV1ZWQgKz0gc2tiLT5sZW47IAorCQlzbGF2ZS0+Ynl0ZXNfcXVldWVkICs9IHNrYi0+bGVuOwogCQlkZXZfcXVldWVfeG1pdChza2IpOwogCQllcWwtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAl9IGVsc2UgewogCQllcWwtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYihza2IpOwotCX0JICAKKwl9CiAKIAlzcGluX3VubG9jaygmZXFsLT5xdWV1ZS5sb2NrKTsKIApAQCAtNTk2LDcgKzU5Niw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldl9lcWwpOwotCWlmIChlcnIpIAorCWlmIChlcnIpCiAJCWZyZWVfbmV0ZGV2KGRldl9lcWwpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lczMyMTAuYyBiL2RyaXZlcnMvbmV0L2VzMzIxMC5jCmluZGV4IDZiMGFiMWUuLmZkN2IzMmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VzMzIxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2VzMzIxMC5jCkBAIC00MjEsOCArNDIxLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUmFjYWwtSW50ZXJsYW4gRVMzMjEwIEVJU0EgZXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLWludAotaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoMTZpLmMgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwppbmRleCA0YmY3NmY4Li5mMTZiNmE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGgxNmkuYworKysgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwpAQCAtMSw3ICsxLDcgQEAKIC8qIGV0aDE2aS5jIEFuIElDTCBFdGhlclRlYW0gMTZpIGFuZCAzMiBFSVNBIGV0aGVybmV0IGRyaXZlciBmb3IgTGludXgKLSAgIAorCiAgICBXcml0dGVuIDE5OTQtMTk5OSBieSBNaWthIEt1b3BwYWxhCi0gICAKKwogICAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgYnkgTWlrYSBLdW9wcGFsYQogICAgQmFzZWQgb24gc2tlbGV0b24uYyBhbmQgaGVhdmlseSBvbiBhdDE3MDAuYyBieSBEb25hbGQgQmVja2VyCiAKQEAgLTEyLDcgKzEyLDcgQEAKIAogICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgZm9sbG93aW5nIGNhcmRzIDoKIAktIElDTCBFdGhlclRlYW0gMTZpCi0JLSBJQ0wgRXRoZXJUZWFtIDMyIEVJU0EgCisJLSBJQ0wgRXRoZXJUZWFtIDMyIEVJU0EKIAkgIChVc2VzIHRydWUgMzIgYml0IHRyYW5zZmVycyByYXRoZXIgdGhhbiAxNmkgY29tcGFiaWxpdHkgbW9kZSkKIAogICAgRXhhbXBsZSBNb2R1bGUgdXNhZ2U6CkBAIC0yNSwyNiArMjUsMjYgQEAKIAogICAgSSBoYXZlIGJlbmNobWFya2VkIGRyaXZlciB3aXRoIFBJSS8zMDBNaHogYXMgYSBmdHAgY2xpZW50CiAgICBhbmQgNDg2LzMzTWh6IGFzIGEgZnRwIHNlcnZlci4gVG9wIHNwZWVkIHdhcyAxMTI4LjM3IGtpbG9ieXRlcy9zZWMuCi0gICAKKwogICAgU291cmNlczoKICAgICAgLSBza2VsZXRvbi5jICBhIHNhbXBsZSBuZXR3b3JrIGRyaXZlciBjb3JlIGZvciBsaW51eCwKICAgICAgICB3cml0dGVuIGJ5IERvbmFsZCBCZWNrZXIgPGJlY2tlckBzY3lsZC5jb20+Ci0gICAgIC0gYXQxNzAwLmMgYSBkcml2ZXIgZm9yIEFsbGllZCBUZWxlc2lzIEFUMTcwMCwgd3JpdHRlbiAKKyAgICAgLSBhdDE3MDAuYyBhIGRyaXZlciBmb3IgQWxsaWVkIFRlbGVzaXMgQVQxNzAwLCB3cml0dGVuCiAgICAgICAgYnkgRG9uYWxkIEJlY2tlci4KICAgICAgLSBlMTZpU1JWLmFzbSBhIE5ldHdhcmUgMy5YIFNlcnZlciBEcml2ZXIgZm9yIElDTCBFdGhlclRlYW0xNmkKICAgICAgICB3cml0dGVuIGJ5IE1hcmtrdSBWaWltYQogICAgICAtIFRoZSBGdWppdHN1IE1CODY5NjUgZGF0YWJvb2suCi0gICAKLSAgIEF1dGhvciB0aGFua3MgZm9sbG93aW5nIHBlcnNvbnMgZHVlIHRvIHRoZWlyIHZhbHVlYmxlIGFzc2lzdGFuY2U6ICAgIAorCisgICBBdXRob3IgdGhhbmtzIGZvbGxvd2luZyBwZXJzb25zIGR1ZSB0byB0aGVpciB2YWx1ZWJsZSBhc3Npc3RhbmNlOgogICAgICAgICBNYXJra3UgVmlpbWEgKElDTCkKLQlBcmkgVmFsdmUgKElDTCkgICAgICAKKwlBcmkgVmFsdmUgKElDTCkKIAlEb25hbGQgQmVja2VyCiAJS3VydCBIdXdpZyA8a3VydEBodXdpZy5kZT4KIAogICAgUmV2aXNpb24gaGlzdG9yeToKIAogICAgVmVyc2lvbglEYXRlCQlEZXNjcmlwdGlvbgotICAgCisKICAgIDAuMDEgICAgICAgICAxNS4xMi05NCAgICAgICAgSW5pdGlhbCB2ZXJzaW9uIChjYXJkIGRldGVjdGlvbikKICAgIDAuMDIgICAgICAgICAyMy4wMS05NSAgICAgICAgSW50ZXJydXB0IGlzIG5vdyBob29rZWQgY29ycmVjdGx5CiAgICAwLjAzICAgICAgICAgMDEuMDItOTUgICAgICAgIFJld3JvdGUgaW5pdGlhbGl6YXRpb24gcGFydApAQCAtNTgsNyArNTgsNyBAQAogICAgMC4wNSAgICAgICAgIDA4LjAyLTk1ICAgICAgICBJZiB0aGVyZSB3ZXJlIG1vcmUgdGhhbiBvbmUgcGFja2V0IHRvIHNlbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbWl0IHdhcyBqYW1tZWQgZHVlIHRvIGludmFsaWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgd3JpdGUuLi5ub3cgZml4ZWQKLSAgIDAuMDYgICAgICAgICAxOS4wMi05NSAgICAgICAgUmV3cm90ZSBpbnRlcnJ1cHQgaGFuZGxpbmcgICAgICAgIAorICAgMC4wNiAgICAgICAgIDE5LjAyLTk1ICAgICAgICBSZXdyb3RlIGludGVycnVwdCBoYW5kbGluZwogICAgMC4wNyAgICAgICAgIDEzLjA0LTk1ICAgICAgICBXcm90ZSBFRVBST00gcmVhZCByb3V0aW5lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDYXJkIGNvbmZpZ3VyYXRpb24gbm93IHNldCBhY2NvcmRpbmcgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSByZWFkIGZyb20gRUVQUk9NCkBAIC02NiwzNCArNjYsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCBpZiBBVVRPIGlzIHNlbGVjdGVkCiAKICAgIDAuMDkgICAgICAgICAwMS4wOS05NSAgICAgICAgQWRkZWQgbW9kdWxlIHN1cHBvcnQKLSAgIAorCiAgICAwLjEwICAgICAgICAgMDQuMDktOTUgICAgICAgIEZpeGVkIHJlY2VpdmUgcGFja2V0IGFsbG9jYXRpb24gdG8gd29yawogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGtlcm5lbHMgPiAxLjMueAotICAgICAgCi0gICAwLjIwCQkyMC4wOS05NQlBZGRlZCBzdXBwb3J0IGZvciBFdGhlclRlYW0zMiBFSVNBCQogCi0gICAwLjIxICAgICAgICAgMTcuMTAtOTUgICAgICAgIFJlbW92ZWQgdGhlIHVubmVjZXNzYXJ5IGV4dGVybiAKKyAgIDAuMjAJCTIwLjA5LTk1CUFkZGVkIHN1cHBvcnQgZm9yIEV0aGVyVGVhbTMyIEVJU0EKKworICAgMC4yMSAgICAgICAgIDE3LjEwLTk1ICAgICAgICBSZW1vdmVkIHRoZSB1bm5lY2Vzc2FyeSBleHRlcm4KIAkJCQlpbml0X2V0aGVyZGV2KCkgZGVjbGFyYXRpb24uIFNvbWUKIAkJCQlvdGhlciBjbGVhbnVwcy4KLSAgIAkJCQkKKwogICAgMC4yMgkJMjIuMDItOTYJUmVjZWl2ZSBidWZmZXIgd2FzIG5vdCBmbHVzaGVkCiAJCQkJY29ycmVjdGx5IHdoZW4gZmF1bHR5IHBhY2tldCB3YXMKIAkJCQlyZWNlaXZlZC4gTm93IGZpeGVkLgogCi0gICAwLjIzCQkyNi4wMi05NglNYWRlIHJlc2V0dGluZyB0aGUgYWRhcHRlcgkKKyAgIDAuMjMJCTI2LjAyLTk2CU1hZGUgcmVzZXR0aW5nIHRoZSBhZGFwdGVyCiAJCQkgCW1vcmUgcmVsaWFibGUuCi0gICAKKwogICAgMC4yNAkJMjcuMDItOTYJUmV3cm90ZSBmYXVsdHkgcGFja2V0IGhhbmRsaW5nIGluIGV0aDE2aV9yeAogCiAgICAwLjI1CQkyMi4wNS05NglrZnJlZSgpIHdhcyBtaXNzaW5nIGZyb20gY2xlYW51cF9tb2R1bGUuCiAKLSAgIDAuMjYJCTExLjA2LTk2CVNvbWV0aW1lcyBjYXJkIHdhcyBub3QgZm91bmQgYnkgCisgICAwLjI2CQkxMS4wNi05NglTb21ldGltZXMgY2FyZCB3YXMgbm90IGZvdW5kIGJ5CiAJCQkJY2hlY2tfc2lnbmF0dXJlKCkuIE5vdyBtYWRlIG1vcmUgcmVsaWFibGUuCi0gICAKLSAgIDAuMjcJCTIzLjA2LTk2CU9vcHMuIDE2IGNvbnNlY3V0aXZlIGNvbGxpc2lvbnMgaGFsdGVkIAotCQkJCWFkYXB0ZXIuIE5vdyB3aWxsIHRyeSB0byByZXRyYW5zbWl0IAorCisgICAwLjI3CQkyMy4wNi05NglPb3BzLiAxNiBjb25zZWN1dGl2ZSBjb2xsaXNpb25zIGhhbHRlZAorCQkJCWFkYXB0ZXIuIE5vdyB3aWxsIHRyeSB0byByZXRyYW5zbWl0CiAJCQkJTUFYX0NPTF8xNiB0aW1lcyBiZWZvcmUgZmluYWxseSBnaXZpbmcgdXAuCi0gICAKKwogICAgMC4yOAkgICAgICAgIDI4LjEwLTk3CUFkZGVkIGRldl9pZCBwYXJhbWV0ZXIgKE5VTEwpIGZvciBmcmVlX2lycQogCiAgICAwLjI5ICAgICAgICAgMjkuMTAtOTcgICAgICAgIE11bHRpcGxlIGNhcmQgc3VwcG9ydCBmb3IgbW9kdWxlIHVzZXJzCkBAIC0xMDMsMTYgKzEwMywxNiBAQAogCiAgICAwLjMwYSAgICAgICAgMjEuMDgtOTggICAgICAgIENhcmQgZGV0ZWN0aW9uIG1hZGUgbW9yZSByZWxheGVkLiBEcml2ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFkIHByb2JsZW1zIHdpdGggc29tZSBUQ1AvSVAtUFJPTSBib290cwotCQkJCXRvIGZpbmQgdGhlIGNhcmQuIFN1Z2dlc3RlZCBieSAKKwkJCQl0byBmaW5kIHRoZSBjYXJkLiBTdWdnZXN0ZWQgYnkKIAkJCQlLdXJ0IEh1d2lnIDxrdXJ0QGh1d2lnLmRlPgogCiAgICAwLjMxICAgICAgICAgMjguMDgtOTggICAgICAgIE1lZGlhIGludGVyZmFjZSBwb3J0IGNhbiBub3cgYmUgc2VsZWN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBtb2R1bGUgcGFyYW1ldGVycyBvciBrZXJuZWwKLQkJCQlib290IHBhcmFtZXRlcnMuIAorCQkJCWJvb3QgcGFyYW1ldGVycy4KIAotICAgMC4zMiAgICAgICAgIDMxLjA4LTk4ICAgICAgICBJUlEgd2FzIG5ldmVyIGZyZWVkIGlmIG9wZW4vY2xvc2UgCisgICAwLjMyICAgICAgICAgMzEuMDgtOTggICAgICAgIElSUSB3YXMgbmV2ZXIgZnJlZWQgaWYgb3Blbi9jbG9zZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWlyIHdhc24ndCBjYWxsZWQuIE5vdyBmaXhlZC4KLSAgIAorCiAgICAwLjMzICAgICAgICAgMTAuMDktOTggICAgICAgIFdoZW4gZXRoMTZpX29wZW4oKSB3YXMgY2FsbGVkIGFmdGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aDE2aV9jbG9zZSgpIGNoaXAgbmV2ZXIgcmVjb3ZlcmVkLgogCQkJCU5vdyBtb3JlIHNoYWxsb3cgcmVzZXQgaXMgbWFkZSBvbgpAQCAtMTIyLDE1ICsxMjIsMTUgQEAKIAkJCQlDaGFuZ2VkIGlvYWRkciAtPiBpbyBmb3IgY29uc2lzdGVuY3kKIAogICAgMC4zNSAgICAgICAgIDAxLjA3LTk5ICAgICAgICB0cmFuc21pdCwtcmVjZWl2ZSBieXRlcyB3ZXJlIG5ldmVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgaW4gc3RhdHMuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkIGluIHN0YXRzLgogCiAgICBCdWdzOgotCUluIHNvbWUgY2FzZXMgdGhlIG1lZGlhIGludGVyZmFjZSBhdXRvcHJvYmluZyBjb2RlIGRvZXNuJ3QgZmluZCAKLQl0aGUgY29ycmVjdCBpbnRlcmZhY2UgdHlwZS4gSW4gdGhpcyBjYXNlIHlvdSBjYW4gCi0JbWFudWFsbHkgY2hvb3NlIHRoZSBpbnRlcmZhY2UgdHlwZSBpbiBET1Mgd2l0aCBFMTZJQy5FWEUgd2hpY2ggaXMgCisJSW4gc29tZSBjYXNlcyB0aGUgbWVkaWEgaW50ZXJmYWNlIGF1dG9wcm9iaW5nIGNvZGUgZG9lc24ndCBmaW5kCisJdGhlIGNvcnJlY3QgaW50ZXJmYWNlIHR5cGUuIEluIHRoaXMgY2FzZSB5b3UgY2FuCisJbWFudWFsbHkgY2hvb3NlIHRoZSBpbnRlcmZhY2UgdHlwZSBpbiBET1Mgd2l0aCBFMTZJQy5FWEUgd2hpY2ggaXMKIAljb25maWd1cmF0aW9uIHNvZnR3YXJlIGZvciBFdGhlclRlYW0xNmkgYW5kIEV0aGVyVGVhbTMyIGNhcmRzLgogCVRoaXMgaXMgYWxzbyB0cnVlIGZvciBJUlEgc2V0dGluZy4gWW91IGNhbm5vdCB1c2UgbW9kdWxlCi0JcGFyYW1ldGVyIHRvIGNvbmZpZ3VyZSBJUlEgb2YgdGhlIGNhcmQgKHlldCkuIAorCXBhcmFtZXRlciB0byBjb25maWd1cmUgSVJRIG9mIHRoZSBjYXJkICh5ZXQpLgogCiAgICBUbyBkbzoKIAktIFJlYWwgbXVsdGljYXN0IHN1cHBvcnQKQEAgLTE0MiwxOCArMTQyLDE4IEBACiAJICBpcnEgd2l0aG91dCBjb25maWd1cmF0aW9uIHV0aWxpdHkuCiAqLwogCi1zdGF0aWMgY2hhciAqdmVyc2lvbiA9IAorc3RhdGljIGNoYXIgKnZlcnNpb24gPQogICAgICJldGgxNmkuYzogdjAuMzUgMDEtSnVsLTE5OTkgTWlrYSBLdW9wcGFsYSAobWlrdUBpa2kuZmkpXG4iOwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCSAgCi0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4JCSAgCi0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CQkgIAotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkJICAKLSNpbmNsdWRlIDxsaW51eC9pbi5oPgkJICAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CQkgIAotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgkJICAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KQEAgLTE2MywxNSArMTYzLDE1IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgkJICAKLSNpbmNsdWRlIDxhc20vaW8uaD4JCSAgCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kbWEuaD4KIAogCiAKIC8qIEZldyBtYWNyb3MgKi8KLSNkZWZpbmUgQklUKGEpCQkgICAgICAgKCAoMSA8PCAoYSkpICkgIAotI2RlZmluZSBCSVRTRVQoaW9hZGRyLCBibnVtKSAgICgob3V0YigoKGluYihpb2FkZHIpKSB8IChibnVtKSksIGlvYWRkcikpKSAKKyNkZWZpbmUgQklUKGEpCQkgICAgICAgKCAoMSA8PCAoYSkpICkKKyNkZWZpbmUgQklUU0VUKGlvYWRkciwgYm51bSkgICAoKG91dGIoKChpbmIoaW9hZGRyKSkgfCAoYm51bSkpLCBpb2FkZHIpKSkKICNkZWZpbmUgQklUQ0xSKGlvYWRkciwgYm51bSkgICAoKG91dGIoKChpbmIoaW9hZGRyKSkgJiAofihibnVtKSkpLCBpb2FkZHIpKSkKIAogLyogVGhpcyBpcyB0aGUgSS9PIGFkZHJlc3Mgc3BhY2UgZm9yIEV0aGVydGVhbSAxNmkgYWRhcHRlci4gKi8KQEAgLTE4Niw3ICsxODYsNyBAQAogLyogU29tZSBpbnRlcnJ1cHQgbWFza3MgKi8KICNkZWZpbmUgRVRIMTZJX0lOVFJfT04JICAgICAgIDB4ZWY4YSAgICAgICAvKiBIaWdoZXIgaXMgcmVjZWl2ZSBtYXNrICovCiAjZGVmaW5lIEVUSDE2SV9JTlRSX09GRgkgICAgICAgMHgwMDAwCi0JIAorCiAvKiBCdWZmZXJzIGhlYWRlciBzdGF0dXMgYnl0ZSBtZWFuaW5ncyAqLwogI2RlZmluZSBQS1RfR09PRCAgICAgICAgICAgICAgIEJJVCg1KQogI2RlZmluZSBQS1RfR09PRF9STVQgICAgICAgICAgIEJJVCg0KQpAQCAtMjEzLDcgKzIxMyw3IEBACiAjZGVmaW5lIEFMSUdOX0VSUiAgICAgICAgICAgICAgQklUKDIpCiAjZGVmaW5lIENSQ19FUlIgICAgICAgICAgICAgICAgQklUKDEpCiAjZGVmaW5lIFJYX0JVRl9PVkVSRkxPVyAgICAgICAgQklUKDApCi0gICAgICAgICAgICAgIAorCiAvKiBUcmFuc21pdCBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyIChETENSMikgKi8KICNkZWZpbmUgVFhfSU5UUl9SRUcgICAgICAgICAgICAyCiAjZGVmaW5lIFRYX0lOVFJfRE9ORSAgICAgICAgICAgQklUKDcpCkBAIC0yNTIsMTQgKzI1MiwxNCBAQAogI2RlZmluZSBTUkFNX0NZQ0xFX1RJTUVfMTAwTlMgIEJJVCg2KQogI2RlZmluZSBTWVNURU1fQlVTX1dJRFRIXzggICAgIEJJVCg1KSAgICAgICAvKiAxID0gOGJpdCwgMCA9IDE2Yml0ICovCiAjZGVmaW5lIEJVRkZFUl9XSURUSF84ICAgICAgICAgQklUKDQpICAgICAgIC8qIDEgPSA4Yml0LCAwID0gMTZiaXQgKi8KLSNkZWZpbmUgVEJTMSAgICAgICAgICAgICAgICAgICBCSVQoMykgICAgICAgCisjZGVmaW5lIFRCUzEgICAgICAgICAgICAgICAgICAgQklUKDMpCiAjZGVmaW5lIFRCUzAgICAgICAgICAgICAgICAgICAgQklUKDIpCiAjZGVmaW5lIFNSQU1fQlMxICAgICAgICAgICAgICAgQklUKDEpICAgICAgIC8qIDAwPThrYiwgIDAxPTE2a2IgICovCiAjZGVmaW5lIFNSQU1fQlMwICAgICAgICAgICAgICAgQklUKDApICAgICAgIC8qIDEwPTMya2IsIDExPTY0a2IgICovCiAKLSNpZm5kZWYgRVRIMTZJX1RYX0JVRl9TSVpFICAgICAgICAgICAgICAgICAgIC8qIDAgPSAya2IsIDEgPSA0a2IgICovIAorI2lmbmRlZiBFVEgxNklfVFhfQlVGX1NJWkUgICAgICAgICAgICAgICAgICAgLyogMCA9IDJrYiwgMSA9IDRrYiAgKi8KICNkZWZpbmUgRVRIMTZJX1RYX0JVRl9TSVpFICAgICAzICAgICAgICAgICAgIC8qIDIgPSA4a2IsIDMgPSAxNmtiICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorI2VuZGlmCiAjZGVmaW5lIFRYX0JVRl8xeDIwNDggICAgICAgICAgMAogI2RlZmluZSBUWF9CVUZfMngyMDQ4ICAgICAgICAgIDEKICNkZWZpbmUgVFhfQlVGXzJ4NDA5OCAgICAgICAgICAyCkBAIC0yOTcsNyArMjk3LDcgQEAKIAogLyogRE1BIEJ1cnN0IGFuZCBUcmFuc2NlaXZlciBNb2RlIFJlZ2lzdGVyIChCTVBSMTMpICovCiAjZGVmaW5lIFRSQU5TQ0VJVkVSX01PREVfUkVHICAgMTMKLSNkZWZpbmUgVFJBTlNDRUlWRVJfTU9ERV9SQiAgICAyICAgICAgICAgCisjZGVmaW5lIFRSQU5TQ0VJVkVSX01PREVfUkIgICAgMgogI2RlZmluZSBJT19CQVNFX1VOTE9DSwkgICAgICAgQklUKDcpCiAjZGVmaW5lIExPV0VSX1NRVUVMQ0hfVFJFU0ggICAgQklUKDYpCiAjZGVmaW5lIExJTktfVEVTVF9ESVNBQkxFICAgICAgQklUKDUpCkBAIC0zMzcsNyArMzM3LDcgQEAKICAgI2RlZmluZSBFX1BPUlRfQVVUTyAgICAgICAgICAweDAzCiAgICNkZWZpbmUgRV9QT1JUX0ZST01fRVBST00gICAgMHgwNAogI2RlZmluZSBFX1BST0RVQ1RfQ0ZHICAgICAgICAgIDB4MzAKLSAKKwogCiAvKiBNYWNybyB0byBzbG93IGRvd24gaW8gYmV0d2VlbiBFRVBST00gY2xvY2sgdHJhbnNpdGlvbnMgKi8KICNkZWZpbmUgZWVwcm9tX3Nsb3dfaW8oKSBkbyB7IGludCBfaSA9IDQwOyB3aGlsZSgtLV9pID4gMCkgeyBpbmIoMHg4MCk7IH19d2hpbGUoMCkKQEAgLTM1MiwxMiArMzUyLDEyIEBACiAKIC8qIFRoaXMgaXMgdGhlIEkvTyBhZGRyZXNzIGxpc3QgdG8gYmUgcHJvYmVkIHdoZW4gc2Vla2luZyB0aGUgY2FyZCAqLwogc3RhdGljIHVuc2lnbmVkIGludCBldGgxNmlfcG9ydGxpc3RbXSBfX2luaXRkYXRhID0gewotCTB4MjYwLCAweDI4MCwgMHgyQTAsIDB4MjQwLCAweDM0MCwgMHgzMjAsIDB4MzgwLCAweDMwMCwgMCAKKwkweDI2MCwgMHgyODAsIDB4MkEwLCAweDI0MCwgMHgzNDAsIDB4MzIwLCAweDM4MCwgMHgzMDAsIDAKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZXRoMzJpX3BvcnRsaXN0W10gX19pbml0ZGF0YSA9IHsgCitzdGF0aWMgdW5zaWduZWQgaW50IGV0aDMyaV9wb3J0bGlzdFtdIF9faW5pdGRhdGEgPSB7CiAJMHgxMDAwLCAweDIwMDAsIDB4MzAwMCwgMHg0MDAwLCAweDUwMDAsIDB4NjAwMCwgMHg3MDAwLCAweDgwMDAsCi0JMHg5MDAwLCAweEEwMDAsIDB4QjAwMCwgMHhDMDAwLCAweEQwMDAsIDB4RTAwMCwgMHhGMDAwLCAwIAorCTB4OTAwMCwgMHhBMDAwLCAweEIwMDAsIDB4QzAwMCwgMHhEMDAwLCAweEUwMDAsIDB4RjAwMCwgMAogfTsKIAogLyogVGhpcyBpcyB0aGUgSW50ZXJydXB0IGxvb2t1cCB0YWJsZSBmb3IgRXRoMTZpIGNhcmQgKi8KQEAgLTM2NSw3ICszNjUsNyBAQAogI2RlZmluZSBOVU1fT0ZfSVNBX0lSUVMgICAgNAogCiAvKiBUaGlzIGlzIHRoZSBJbnRlcnJ1cHQgbG9va3VwIHRhYmxlIGZvciBFdGgzMmkgY2FyZCAqLwotc3RhdGljIHVuc2lnbmVkIGludCBldGgzMmlfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsgMywgNSwgNywgOSwgMTAsIDExLCAxMiwgMTUsIDAgfTsgIAorc3RhdGljIHVuc2lnbmVkIGludCBldGgzMmlfaXJxbWFwW10gX19pbml0ZGF0YSA9IHsgMywgNSwgNywgOSwgMTAsIDExLCAxMiwgMTUsIDAgfTsKICNkZWZpbmUgRUlTQV9JUlFfUkVHCTB4Yzg5CiAjZGVmaW5lIE5VTV9PRl9FSVNBX0lSUVMgICA4CiAKQEAgLTM4NCw3ICszODQsNyBAQAogCXVuc2lnbmVkIGNoYXIgICAgIHR4X3N0YXJ0ZWQ7CiAJdW5zaWduZWQgY2hhciAgICAgdHhfYnVmX2J1c3k7CiAJdW5zaWduZWQgc2hvcnQgICAgdHhfcXVldWU7ICAvKiBOdW1iZXIgb2YgcGFja2V0cyBpbiB0cmFuc21pdCBidWZmZXIgKi8KLQl1bnNpZ25lZCBzaG9ydCAgICB0eF9xdWV1ZV9sZW47ICAgICAgICAgCisJdW5zaWduZWQgc2hvcnQgICAgdHhfcXVldWVfbGVuOwogCXVuc2lnbmVkIGludCAgICAgIHR4X2J1Zl9zaXplOwogCXVuc2lnbmVkIGxvbmcgICAgIG9wZW5fdGltZTsKIAl1bnNpZ25lZCBsb25nICAgICB0eF9idWZmZXJlZF9wYWNrZXRzOwpAQCAtNDE0LDcgKzQxNCw3IEBACiBzdGF0aWMgdm9pZCAgICBldGgxNmlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCAgICBldGgxNmlfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIGV0aDE2aV9za2lwX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkICAgIGV0aDE2aV9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7IAorc3RhdGljIHZvaWQgICAgZXRoMTZpX211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkICAgIGV0aDE2aV9zZWxlY3RfcmVnYmFuayh1bnNpZ25lZCBjaGFyIHJlZ2JhbmssIGludCBpb2FkZHIpOwogc3RhdGljIHZvaWQgICAgZXRoMTZpX2luaXRpYWxpemUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGJvb3QpOwogCkBAIC00MzUsMTAgKzQzNSwxMCBAQAogCWludCBpOwogCWludCBpb2FkZHI7CiAJaW50IGJhc2VfYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAgIAorCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCi0JaWYoZXRoMTZpX2RlYnVnID4gNCkgCisJaWYoZXRoMTZpX2RlYnVnID4gNCkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlByb2Jpbmcgc3RhcnRlZCBmb3IgJXNcbiIsIGNhcmRuYW1lKTsKIAogCWlmKGJhc2VfYWRkciA+IDB4MWZmKSAgICAgICAgICAgLyogQ2hlY2sgb25seSBzaW5nbGUgbG9jYXRpb24gKi8KQEAgLTQ5MiwxNCArNDkyLDE0IEBACiAJCXJldHVybiAtRUJVU1k7CiAKIAkvKgotCSAgVGhlIE1CODY5ODUgY2hpcCBoYXMgb24gcmVnaXN0ZXIgd2hpY2ggaG9sZHMgaW5mb3JtYXRpb24gaW4gd2hpY2ggCisJICBUaGUgTUI4Njk4NSBjaGlwIGhhcyBvbiByZWdpc3RlciB3aGljaCBob2xkcyBpbmZvcm1hdGlvbiBpbiB3aGljaAogCSAgaW8gYWRkcmVzcyB0aGUgY2hpcCBsaWVzLiBGaXJzdCByZWFkIHRoaXMgcmVnaXN0ZXIgYW5kIGNvbXBhcmUKIAkgIGl0IHRvIG91ciBjdXJyZW50IGlvIGFkZHJlc3MgYW5kIGlmIG1hdGNoIHRoZW4gdGhpcyBjb3VsZAogCSAgYmUgb3VyIGNoaXAuCiAJICAqLwogCiAJaWYoaW9hZGRyIDwgMHgxMDAwKSB7Ci0JCWlmKGV0aDE2aV9wb3J0bGlzdFsoaW5iKGlvYWRkciArIEpVTVBFUkxFU1NfQ09ORklHKSAmIDB4MDcpXSAKKwkJaWYoZXRoMTZpX3BvcnRsaXN0WyhpbmIoaW9hZGRyICsgSlVNUEVSTEVTU19DT05GSUcpICYgMHgwNyldCiAJCSAgICE9IGlvYWRkcikgewogCQkJcmV0dmFsID0gLUVOT0RFVjsKIAkJCWdvdG8gb3V0OwpAQCAtNTEzLDkgKzUxMyw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCS8qIAorCS8qCiAJICAgTm93IGl0IHNlZW1zIHRoYXQgd2UgaGF2ZSBmb3VuZCBhIGV0aGVybmV0IGNoaXAgaW4gdGhpcyBwYXJ0aWN1bGFyCi0JICAgaW9hZGRyLiBUaGUgTUI4Njk4NSBjaGlwIGhhcyB0aGlzIGZlYXR1cmUsIHRoYXQgd2hlbiB5b3UgcmVhZCBhIAorCSAgIGlvYWRkci4gVGhlIE1CODY5ODUgY2hpcCBoYXMgdGhpcyBmZWF0dXJlLCB0aGF0IHdoZW4geW91IHJlYWQgYQogCSAgIGNlcnRhaW4gcmVnaXN0ZXIgaXQgd2lsbCBpbmNyZWFzZSBpdCdzIGlvIGJhc2UgYWRkcmVzcyB0byBuZXh0CiAJICAgY29uZmlndXJhYmxlIHNsb3QuIE5vdyB3aGVuIHdlIGhhdmUgZm91bmQgdGhlIGNoaXAsIGZpcnN0IHRoaW5nIGlzCiAJICAgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNoaXAncyBpb2FkZHIgd2lsbCBob2xkIHN0aWxsIGhlcmUuCkBAIC01MzYsNyArNTM2LDcgQEAKIAkvKiBUcnkgdG8gb2J0YWluIGludGVycnVwdCB2ZWN0b3IgKi8KIAogCWlmICgocmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsICh2b2lkICopJmV0aDE2aV9pbnRlcnJ1cHQsIDAsIGNhcmRuYW1lLCBkZXYpKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBhdCAlIzN4LCBidXQgaXMgdW51c2FibGUgZHVlIHRvIGNvbmZsaWN0aW5nIElSUSAlZC5cbiIsIAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlcyBhdCAlIzN4LCBidXQgaXMgdW51c2FibGUgZHVlIHRvIGNvbmZsaWN0aW5nIElSUSAlZC5cbiIsCiAJCSAgICAgICBjYXJkbmFtZSwgaW9hZGRyLCBkZXYtPmlycSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTU0Nyw3ICs1NDcsNyBAQAogCiAJLyogTm93IHdlIHdpbGwgaGF2ZSB0byBsb2NrIHRoZSBjaGlwJ3MgaW8gYWRkcmVzcyAqLwogCWV0aDE2aV9zZWxlY3RfcmVnYmFuayhUUkFOU0NFSVZFUl9NT0RFX1JCLCBpb2FkZHIpOwotCW91dGIoMHgzOCwgaW9hZGRyICsgVFJBTlNDRUlWRVJfTU9ERV9SRUcpOyAKKwlvdXRiKDB4MzgsIGlvYWRkciArIFRSQU5TQ0VJVkVSX01PREVfUkVHKTsKIAogCWV0aDE2aV9pbml0aWFsaXplKGRldiwgMSk7IC8qIEluaXRpYWxpemUgcmVzdCBvZiB0aGUgY2hpcCdzIHJlZ2lzdGVycyAqLwogCkBAIC01OTAsNyArNTkwLDcgQEAKIAkJKCh1bnNpZ25lZCBzaG9ydCAqKWRldi0+ZGV2X2FkZHIpW2ldID0gbnRvaHMobm9kZV92YWwpOwogCX0KIAotCWZvcihpID0gMDsgaSA8IDY7IGkrKykgeyAKKwlmb3IoaSA9IDA7IGkgPCA2OyBpKyspIHsKIAkJb3V0YiggKCh1bnNpZ25lZCBjaGFyICopZGV2LT5kZXZfYWRkcilbaV0sIGlvYWRkciArIE5PREVfSURfMCArIGkpOwogCQlpZihib290KSB7CiAJCQlwcmludGsoIiUwMngiLCBpbmIoaW9hZGRyICsgTk9ERV9JRF8wICsgaSkpOwpAQCAtNjAxLDExICs2MDEsMTEgQEAKIAogCS8qIE5vdyB3ZSB3aWxsIHNldCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIGFjY2VwdCBub25lICovCiAJZXRoMTZpX3NlbGVjdF9yZWdiYW5rKEhBU0hfVEFCTEVfUkIsIGlvYWRkcik7Ci0JZm9yKGkgPSAwOyBpIDwgODsgaSsrKSAKKwlmb3IoaSA9IDA7IGkgPCA4OyBpKyspCiAJCW91dGIoMHgwMCwgaW9hZGRyICsgSEFTSF9UQUJMRV8wICsgaSk7CiAKIAkvKgotCSAgTm93IGxldCdzIGRpc2FibGUgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciwgc2V0IHRoZSBidWZmZXIgcmFtIAorCSAgTm93IGxldCdzIGRpc2FibGUgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciwgc2V0IHRoZSBidWZmZXIgcmFtCiAJICBjeWNsZSB0aW1lLCBidXMgd2lkdGggYW5kIGJ1ZmZlciBkYXRhIHBhdGggd2lkdGguIEFsc28gd2Ugc2hhbGwKIAkgIHNldCB0cmFuc21pdCBidWZmZXIgc2l6ZSBhbmQgdG90YWwgYnVmZmVyIHNpemUuCiAJICAqLwpAQCAtNjMzLDcgKzYzMyw3IEBACiAjaWZkZWYgTU9EVUxFCiAJLyogaWZfcG9ydCBhbHJlYWR5IHNldCBieSBpbml0X21vZHVsZSgpICovCiAjZWxzZQotCWRldi0+aWZfcG9ydCA9IChkZXYtPm1lbV9zdGFydCA8IEVfUE9SVF9GUk9NX0VQUk9NKSA/IAorCWRldi0+aWZfcG9ydCA9IChkZXYtPm1lbV9zdGFydCA8IEVfUE9SVF9GUk9NX0VQUk9NKSA/CiAJCWRldi0+bWVtX3N0YXJ0IDogRV9QT1JUX0ZST01fRVBST007CiAjZW5kaWYKIApAQCAtNjUxLDcgKzY1MSw3IEBACiAJCWNhc2UgRV9QT1JUX0FVVE86CiAJCQlkZXYtPmlmX3BvcnQgPSBldGgxNmlfcHJvYmVfcG9ydChpb2FkZHIpOwogCQkJYnJlYWs7Ci0JCQkKKwogCQljYXNlIEVfUE9SVF9CTkM6CiAJCWNhc2UgRV9QT1JUX1RQOgogCQljYXNlIEVfUE9SVF9ESVg6CkBAIC03MjEsNyArNzIxLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgZXRoMTZpX3NldF9wb3J0KGludCBpb2FkZHIsIGludCBwb3J0dHlwZSkKLXsgCit7CiAJdW5zaWduZWQgc2hvcnQgdGVtcCA9IDA7CiAKIAlldGgxNmlfc2VsZWN0X3JlZ2JhbmsoVFJBTlNDRUlWRVJfTU9ERV9SQiwgaW9hZGRyKTsKQEAgLTc0MiwxMyArNzQyLDEzIEBACiAJCXRlbXAgfD0gQVVJX1NFTEVDVDsKIAkJQklUU0VUKGlvYWRkciArIFRSQU5TTUlUX01PREVfUkVHLCBDT05UUk9MX09VVFBVVCk7CiAJCWJyZWFrOwotCX0gIAorCX0KIAogCW91dGIodGVtcCwgaW9hZGRyICsgVFJBTlNDRUlWRVJfTU9ERV9SRUcpOwogCiAJaWYoZXRoMTZpX2RlYnVnID4gMSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiVFJBTlNNSVRfTU9ERV9SRUcgPSAleFxuIiwgaW5iKGlvYWRkciArIFRSQU5TTUlUX01PREVfUkVHKSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJUUkFOU0NFSVZFUl9NT0RFX1JFRyA9ICV4XG4iLCAKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRSQU5TQ0VJVkVSX01PREVfUkVHID0gJXhcbiIsCiAJCSAgICAgICBpbmIoaW9hZGRyK1RSQU5TQ0VJVkVSX01PREVfUkVHKSk7CiAJfQogfQpAQCAtNzYwLDEwICs3NjAsMTAgQEAKIAlvdXRiKDB4ZmYsIGlvYWRkciArIFRYX1NUQVRVU19SRUcpOwogCiAJb3V0dyhsLCBpb2FkZHIgKyBEQVRBUE9SVCk7Ci0Jb3V0c3coaW9hZGRyICsgREFUQVBPUlQsICh1bnNpZ25lZCBzaG9ydCAqKWIsIChsICsgMSkgPj4gMSk7ICAKKwlvdXRzdyhpb2FkZHIgKyBEQVRBUE9SVCwgKHVuc2lnbmVkIHNob3J0ICopYiwgKGwgKyAxKSA+PiAxKTsKIAogCXN0YXJ0dGltZSA9IGppZmZpZXM7Ci0Jb3V0YihUWF9TVEFSVCB8IDEsIGlvYWRkciArIFRSQU5TTUlUX1NUQVJUX1JFRyk7IAorCW91dGIoVFhfU1RBUlQgfCAxLCBpb2FkZHIgKyBUUkFOU01JVF9TVEFSVF9SRUcpOwogCiAJd2hpbGUoIChpbmIoaW9hZGRyICsgVFhfU1RBVFVTX1JFRykgJiAweDgwKSA9PSAwKSB7CiAJCWlmKCB0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0dGltZSArIFRYX1RJTUVPVVQpKSB7CkBAIC04MTUsMTAgKzgxNSwxMCBAQAogCWNvbnN0IGludCBpcnEgPSBkZXYtPmlycTsKIAlpbnQgaSA9IDA7CiAKLQlpZihpb2FkZHIgPCAweDEwMDApIHsJCQorCWlmKGlvYWRkciA8IDB4MTAwMCkgewogCQl3aGlsZShldGgxNmlfaXJxbWFwW2ldICYmIGV0aDE2aV9pcnFtYXBbaV0gIT0gaXJxKQogCQkJaSsrOwotCQorCiAJCWlmKGkgPCBOVU1fT0ZfSVNBX0lSUVMpIHsKIAkJCXU4IGNieXRlID0gaW5iKGlvYWRkciArIEpVTVBFUkxFU1NfQ09ORklHKTsKIAkJCWNieXRlID0gKGNieXRlICYgMHgzRikgfCAoaSA8PCA2KTsKQEAgLTgyOSw3ICs4MjksNyBAQAogCWVsc2UgewogCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBFSVNBIEludGVycnVwdCBjYW5ub3QgYmUgc2V0LiBVc2UgRUlTQSBDb25maWd1cmF0aW9uIHV0aWxpdHkuXG4iLCBkZXYtPm5hbWUpOwogCX0KLQkKKwogCXJldHVybiAtMTsKIAogfQpAQCAtODYzLDcgKzg2Myw3IEBACiAJCWNyZWdbaV0gPSBpbmIoaW9hZGRyICsgVFJBTlNNSVRfTU9ERV9SRUcgKyBpKTsKIAogCQlpZihldGgxNmlfZGVidWcgPiAxKQotCQkJcHJpbnRrKCJldGgxNmk6IHJlYWQgc2lnbmF0dXJlIGJ5dGUgJXggYXQgJXhcbiIsIAorCQkJcHJpbnRrKCJldGgxNmk6IHJlYWQgc2lnbmF0dXJlIGJ5dGUgJXggYXQgJXhcbiIsCiAJCQkgICAgICAgY3JlZ1tpXSwKIAkJCSAgICAgICBpb2FkZHIgKyBUUkFOU01JVF9NT0RFX1JFRyArIGkpOwogCX0KQEAgLTg3Miw3ICs4NzIsNyBAQAogCWNyZWdbMl0gJj0gMHg3RjsgICAgICAvKiBNYXNrIERDTEVOIGJpdCAqLwogCiAjaWYgMAotCS8qIAorCS8qCiAJICAgVGhpcyB3YXMgcmVtb3ZlZCBiZWNhdXNlIHRoZSBjYXJkIHdhcyBzb21ldGltZXMgbGVmdCB0byBzdGF0ZQogCSAgIGZyb20gd2hpY2ggaXQgY291bGRuJ3QgYmUgZmluZCBhbnltb3JlLiBJZiB0aGVyZSBpcyBuZWVkCiAJICAgdG8gbW9yZSBzdHJpY3QgY2hlY2sgc3RpbGwgdGhpcyBoYXZlIHRvIGJlIGZpeGVkLgpAQCAtODg2LDE0ICs4ODYsMTQgQEAKIAlpZiggISgoY3JlZ1syXSA9PSAweDM2KSAmJiAoY3JlZ1szXSA9PSAweEUwKSkgKSB7CiAJCWNyZWdbMl0gJj0gMHg0MDsKIAkJY3JlZ1szXSAmPSAweDAzOwotCQkKKwogCQlpZiggISgoY3JlZ1syXSA9PSAweDQwKSAmJiAoY3JlZ1szXSA9PSAweDAwKSkgKQogCQkJcmV0dXJuIC0xOwogCX0KLQkKKwogCWlmKGV0aDE2aV9yZWFkX2VlcHJvbShpb2FkZHIsIEVfTk9ERUlEXzApICE9IDApCiAJCXJldHVybiAtMTsKLQkKKwogCWlmKChldGgxNmlfcmVhZF9lZXByb20oaW9hZGRyLCBFX05PREVJRF8xKSAmIDB4RkYwMCkgIT0gMHg0QjAwKQogCQlyZXR1cm4gLTE7CiAKQEAgLTkwOSwyMiArOTA5LDIyIEBACiAJZGF0YSA9IGV0aDE2aV9yZWFkX2VlcHJvbV93b3JkKGlvYWRkcik7CiAJb3V0YihDU18wIHwgU0tfMCwgaW9hZGRyICsgRUVQUk9NX0NUUkxfUkVHKTsKIAotCXJldHVybihkYXRhKTsgIAorCXJldHVybihkYXRhKTsKIH0KIAogc3RhdGljIGludCBldGgxNmlfcmVhZF9lZXByb21fd29yZChpbnQgaW9hZGRyKQogewogCWludCBpOwogCWludCBkYXRhID0gMDsKLSAgICAgCisKIAlmb3IoaSA9IDE2OyBpID4gMDsgaS0tKSB7CiAJCW91dGIoQ1NfMSB8IFNLXzAsIGlvYWRkciArIEVFUFJPTV9DVFJMX1JFRyk7CiAJCWVlcHJvbV9zbG93X2lvKCk7CiAJCW91dGIoQ1NfMSB8IFNLXzEsIGlvYWRkciArIEVFUFJPTV9DVFJMX1JFRyk7CiAJCWVlcHJvbV9zbG93X2lvKCk7Ci0JCWRhdGEgPSAoZGF0YSA8PCAxKSB8IAorCQlkYXRhID0gKGRhdGEgPDwgMSkgfAogCQkJKChpbmIoaW9hZGRyICsgRUVQUk9NX0RBVEFfUkVHKSAmIERJXzEpID8gMSA6IDApOwotCQkKKwogCQllZXByb21fc2xvd19pbygpOwogCX0KIApAQCAtOTQ4LDI1ICs5NDgsMjUgQEAKIAkJZWVwcm9tX3Nsb3dfaW8oKTsKIAkJb3V0YihDU18xIHwgU0tfMSwgaW9hZGRyICsgRUVQUk9NX0NUUkxfUkVHKTsKIAkJZWVwcm9tX3Nsb3dfaW8oKTsKLQl9IAorCX0KIH0KIAogc3RhdGljIGludCBldGgxNmlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBldGgxNmlfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JCisKIAkvKiBQb3dlcnVwIHRoZSBjaGlwICovCiAJb3V0YigweGMwIHwgUE9XRVJVUCwgaW9hZGRyICsgQ09ORklHX1JFR18xKTsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXAgKi8KLQlldGgxNmlfaW5pdGlhbGl6ZShkZXYsIDApOyAgCisJZXRoMTZpX2luaXRpYWxpemUoZGV2LCAwKTsKIAogCS8qIFNldCB0aGUgdHJhbnNtaXQgYnVmZmVyIHNpemUgKi8KIAlscC0+dHhfYnVmX3NpemUgPSBldGgxNmlfdHhfYnVmX21hcFtFVEgxNklfVFhfQlVGX1NJWkUgJiAweDAzXTsKIAogCWlmKGV0aDE2aV9kZWJ1ZyA+IDApCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHJhbnNtaXQgYnVmZmVyIHNpemUgJWRcbiIsIAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRyYW5zbWl0IGJ1ZmZlciBzaXplICVkXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBscC0+dHhfYnVmX3NpemUpOwogCiAJLyogTm93IGVuYWJsZSBUcmFuc21pdHRlciBhbmQgUmVjZWl2ZXIgc2VjdGlvbnMgKi8KQEAgLTk4MSw3ICs5ODEsNyBAQAogCWxwLT50eF9xdWV1ZV9sZW4gPSAwOwogCiAJLyogVHVybiBvbiBpbnRlcnJ1cHRzKi8KLQlvdXR3KEVUSDE2SV9JTlRSX09OLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7ICAKKwlvdXR3KEVUSDE2SV9JTlRSX09OLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCXJldHVybiAwOwpAQCAtOTk1LDEwICs5OTUsMTAgQEAKIAlldGgxNmlfcmVzZXQoZGV2KTsKIAogCS8qIFR1cm4gb2ZmIGludGVycnVwdHMqLwotCW91dHcoRVRIMTZJX0lOVFJfT0ZGLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7ICAKKwlvdXR3KEVUSDE2SV9JTlRSX09GRiwgaW9hZGRyICsgVFhfSU5UUl9SRUcpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQorCiAJbHAtPm9wZW5fdGltZSA9IDA7CiAKIAkvKiBEaXNhYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlICovCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCS8qIFJlc2V0IHRoZSBjaGlwICovCiAJLyogb3V0YigweGZmLCBpb2FkZHIgKyBSRVNFVCk7ICovCiAJLyogb3V0dygweGZmZmYsIGlvYWRkciArIFRYX1NUQVRVU19SRUcpOyAgICAqLwotCQorCiAJb3V0YigweDAwLCBpb2FkZHIgKyBDT05GSUdfUkVHXzEpOwogCiAJcmV0dXJuIDA7CkBAIC0xMDE3LDI2ICsxMDE3LDI2IEBACiB7CiAJc3RydWN0IGV0aDE2aV9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQkvKiAKLQkgICBJZiB3ZSBnZXQgaGVyZSwgc29tZSBoaWdoZXIgbGV2ZWwgaGFzIGRlY2lkZWQgdGhhdCAKLQkgICB3ZSBhcmUgYnJva2VuLiBUaGVyZSBzaG91bGQgcmVhbGx5IGJlIGEgImtpY2sgbWUiIAotCSAgIGZ1bmN0aW9uIGNhbGwgaW5zdGVhZC4gCisJLyoKKwkgICBJZiB3ZSBnZXQgaGVyZSwgc29tZSBoaWdoZXIgbGV2ZWwgaGFzIGRlY2lkZWQgdGhhdAorCSAgIHdlIGFyZSBicm9rZW4uIFRoZXJlIHNob3VsZCByZWFsbHkgYmUgYSAia2ljayBtZSIKKwkgICBmdW5jdGlvbiBjYWxsIGluc3RlYWQuCiAJICAgKi8KIAogCW91dHcoRVRIMTZJX0lOVFJfT0ZGLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCB3aXRoIHN0YXR1cyAlMDR4LCAlcyA/XG4iLCAKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJhbnNtaXQgdGltZWQgb3V0IHdpdGggc3RhdHVzICUwNHgsICVzID9cbiIsCiAJICAgICAgIGRldi0+bmFtZSwKLQlpbncoaW9hZGRyICsgVFhfU1RBVFVTX1JFRyksICAoaW5iKGlvYWRkciArIFRYX1NUQVRVU19SRUcpICYgVFhfRE9ORSkgPyAKKwlpbncoaW9hZGRyICsgVFhfU1RBVFVTX1JFRyksICAoaW5iKGlvYWRkciArIFRYX1NUQVRVU19SRUcpICYgVFhfRE9ORSkgPwogCQkgICAgICAgIklSUSBjb25mbGljdCIgOiAibmV0d29yayBjYWJsZSBwcm9ibGVtIik7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCS8qIExldCdzIGR1bXAgYWxsIHJlZ2lzdGVycyAqLwotCWlmKGV0aDE2aV9kZWJ1ZyA+IDApIHsgCisJaWYoZXRoMTZpX2RlYnVnID4gMCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHRpbWVvdXQ6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGluYihpb2FkZHIgKyAwKSwgCi0JCSAgICAgICBpbmIoaW9hZGRyICsgMSksIGluYihpb2FkZHIgKyAyKSwgCi0JCSAgICAgICBpbmIoaW9hZGRyICsgMyksIGluYihpb2FkZHIgKyA0KSwgCisJCSAgICAgICBkZXYtPm5hbWUsIGluYihpb2FkZHIgKyAwKSwKKwkJICAgICAgIGluYihpb2FkZHIgKyAxKSwgaW5iKGlvYWRkciArIDIpLAorCQkgICAgICAgaW5iKGlvYWRkciArIDMpLCBpbmIoaW9hZGRyICsgNCksCiAJCSAgICAgICBpbmIoaW9hZGRyICsgNSksCiAJCSAgICAgICBpbmIoaW9hZGRyICsgNiksIGluYihpb2FkZHIgKyA3KSk7CiAKQEAgLTEwNzEsMzEgKzEwNzEsMzEgQEAKIAlidWYgPSBza2ItPmRhdGE7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCQorCiAJLyogVHVybiBvZmYgVFggaW50ZXJydXB0cyAqLwogCW91dHcoRVRIMTZJX0lOVFJfT0ZGLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7Ci0JCisKIAkvKiBXZSB3b3VsZCBiZSBiZXR0ZXIgZG9pbmcgdGhlIGRpc2FibGVfaXJxIHRyaWNrcyB0aGUgM2M1MDkgZG9lcywKIAkgICB0aGF0IHdvdWxkIG1ha2UgdGhpcyBzdWNrIGEgbG90IGxlc3MgKi8KLQkgICAKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJaWYoIChsZW5ndGggKyAyKSA+IChscC0+dHhfYnVmX3NpemUgLSBscC0+dHhfcXVldWVfbGVuKSkgewotCQlpZihldGgxNmlfZGVidWcgPiAwKSAKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUcmFuc21pdCBidWZmZXIgZnVsbC5cbiIsIGRldi0+bmFtZSk7ICAKLQl9IAorCQlpZihldGgxNmlfZGVidWcgPiAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IGJ1ZmZlciBmdWxsLlxuIiwgZGV2LT5uYW1lKTsKKwl9CiAJZWxzZSB7CiAJCW91dHcobGVuZ3RoLCBpb2FkZHIgKyBEQVRBUE9SVCk7CiAKLQkJaWYoIGlvYWRkciA8IDB4MTAwMCApIAorCQlpZiggaW9hZGRyIDwgMHgxMDAwICkKIAkJCW91dHN3KGlvYWRkciArIERBVEFQT1JULCBidWYsIChsZW5ndGggKyAxKSA+PiAxKTsKIAkJZWxzZSB7CiAJCQl1bnNpZ25lZCBjaGFyIGZyYWcgPSBsZW5ndGggJSA0OwogCQkJb3V0c2woaW9hZGRyICsgREFUQVBPUlQsIGJ1ZiwgbGVuZ3RoID4+IDIpOwogCQkJaWYoIGZyYWcgIT0gMCApIHsKIAkJCQlvdXRzdyhpb2FkZHIgKyBEQVRBUE9SVCwgKGJ1ZiArIChsZW5ndGggJiAweEZGRkMpKSwgMSk7Ci0JCQkJaWYoIGZyYWcgPT0gMyApIAotCQkJCQlvdXRzdyhpb2FkZHIgKyBEQVRBUE9SVCwgCisJCQkJaWYoIGZyYWcgPT0gMyApCisJCQkJCW91dHN3KGlvYWRkciArIERBVEFQT1JULAogCQkJCQkgICAgICAoYnVmICsgKGxlbmd0aCAmIDB4RkZGQykgKyAyKSwgMSk7CiAJCQl9CiAJCX0KQEAgLTExMTksOSArMTExOSw5IEBACiAJCS8qIFRoZXJlIGlzIHN0aWxsIG1vcmUgcm9vbSBmb3Igb25lIG1vcmUgcGFja2V0IGluIHR4IGJ1ZmZlciAqLwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJfQotCQkKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JCisKIAlvdXR3KEVUSDE2SV9JTlRSX09OLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7CiAJLyogVHVybiBUWCBpbnRlcnJ1cHRzIGJhY2sgb24gKi8KIAkvKiBvdXRiKFRYX0lOVFJfRE9ORSB8IFRYX0lOVFJfMTZfQ09MLCBpb2FkZHIgKyBUWF9JTlRSX1JFRyk7ICovCkBAIC0xMTM5LDM2ICsxMTM5LDM2IEBACiAJLyogTG9vcCB1bnRpbCBhbGwgcGFja2V0cyBoYXZlIGJlZW4gcmVhZCAqLwogCXdoaWxlKCAoaW5iKGlvYWRkciArIFJFQ0VJVkVfTU9ERV9SRUcpICYgUlhfQlVGRkVSX0VNUFRZKSA9PSAwKSB7CiAKLQkJLyogUmVhZCBzdGF0dXMgYnl0ZSBmcm9tIHJlY2VpdmUgYnVmZmVyICovIAorCQkvKiBSZWFkIHN0YXR1cyBieXRlIGZyb20gcmVjZWl2ZSBidWZmZXIgKi8KIAkJdXNob3J0IHN0YXR1cyA9IGludyhpb2FkZHIgKyBEQVRBUE9SVCk7CiAKIAkJLyogR2V0IHRoZSBzaXplIG9mIHRoZSBwYWNrZXQgZnJvbSByZWNlaXZlIGJ1ZmZlciAqLwogCQl1c2hvcnQgcGt0X2xlbiA9IGludyhpb2FkZHIgKyBEQVRBUE9SVCk7CiAKIAkJaWYoZXRoMTZpX2RlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2aW5nIHBhY2tldCBtb2RlICUwMnggc3RhdHVzICUwNHguXG4iLCAKLQkJCSAgICAgICBkZXYtPm5hbWUsIAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZpbmcgcGFja2V0IG1vZGUgJTAyeCBzdGF0dXMgJTA0eC5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLAogCQkJICAgICAgIGluYihpb2FkZHIgKyBSRUNFSVZFX01PREVfUkVHKSwgc3RhdHVzKTsKLQkJCisKIAkJaWYoICEoc3RhdHVzICYgUEtUX0dPT0QpICkgewogCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCiAJCQlpZiggKHBrdF9sZW4gPCBFVEhfWkxFTikgfHwgKHBrdF9sZW4gPiBFVEhfRlJBTUVfTEVOKSApIHsKIAkJCQlscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCWV0aDE2aV9yZXNldChkZXYpOwotCQkJCXJldHVybjsJCQorCQkJCXJldHVybjsKIAkJCX0KLQkJCWVsc2UgeyAKKwkJCWVsc2UgewogCQkJCWV0aDE2aV9za2lwX3BhY2tldChkZXYpOwogCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQl9CQorCQkJfQogCQl9CiAJCWVsc2UgeyAgIC8qIE9rIHNvIG5vdyB3ZSBzaG91bGQgaGF2ZSBhIGdvb2QgcGFja2V0ICovCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4gKyAzKTsKIAkJCWlmKCBza2IgPT0gTlVMTCApIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ291bGQnbiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhY2tldCAobGVuICVkKVxuIiwgCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENvdWxkJ24gYWxsb2NhdGUgbWVtb3J5IGZvciBwYWNrZXQgKGxlbiAlZClcbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7CiAJCQkJZXRoMTZpX3NraXBfcGFja2V0KGRldik7CiAJCQkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKQEAgLTExNzcsMTcgKzExNzcsMTcgQEAKIAogCQkJc2tiLT5kZXYgPSBkZXY7CiAJCQlza2JfcmVzZXJ2ZShza2IsMik7Ci0JCQkKLQkJCS8qIAorCisJCQkvKgogCQkJICAgTm93IGxldCdzIGdldCB0aGUgcGFja2V0IG91dCBvZiBidWZmZXIuCiAJCQkgICBzaXplIGlzIChwa3RfbGVuICsgMSkgPj4gMSwgY2F1c2Ugd2UgYXJlIG5vdyByZWFkaW5nIHdvcmRzCiAJCQkgICBhbmQgaXQgaGF2ZSB0byBiZSBldmVuIGFsaWduZWQuCi0JCQkgICAqLyAKLQkJCQotCQkJaWYoaW9hZGRyIDwgMHgxMDAwKSAKLQkJCQlpbnN3KGlvYWRkciArIERBVEFQT1JULCBza2JfcHV0KHNrYiwgcGt0X2xlbiksIAorCQkJICAgKi8KKworCQkJaWYoaW9hZGRyIDwgMHgxMDAwKQorCQkJCWluc3coaW9hZGRyICsgREFUQVBPUlQsIHNrYl9wdXQoc2tiLCBwa3RfbGVuKSwKIAkJCQkgICAgIChwa3RfbGVuICsgMSkgPj4gMSk7Ci0JCQllbHNlIHsJCisJCQllbHNlIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpidWYgPSBza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQkJdW5zaWduZWQgY2hhciBmcmFnID0gcGt0X2xlbiAlIDQ7CiAKQEAgLTEyMDcsOSArMTIwNyw5IEBACiAKIAkJCWlmKCBldGgxNmlfZGVidWcgPiA1ICkgewogCQkJCWludCBpOwotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZWQgcGFja2V0IG9mIGxlbmd0aCAlZC5cbiIsIAorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZWQgcGFja2V0IG9mIGxlbmd0aCAlZC5cbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCQkJZm9yKGkgPSAwOyBpIDwgMTQ7IGkrKykgCisJCQkJZm9yKGkgPSAwOyBpIDwgMTQ7IGkrKykKIAkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDJ4Iiwgc2tiLT5kYXRhW2ldKTsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiLlxuIik7CiAJCQl9CkBAIC0xMjU1LDcgKzEyNTUsNyBAQAogCiAJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAotCQlpZihzdGF0dXMgJiAoQlVTX1JEX0VSUiA8PCA4KSApIAorCQlpZihzdGF0dXMgJiAoQlVTX1JEX0VSUiA8PCA4KSApCiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQnVzIHJlYWQgZXJyb3IuXG4iLGRldi0+bmFtZSk7CiAJCWlmKHN0YXR1cyAmIChTSE9SVF9QS1RfRVJSIDw8IDgpICkgICBscC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQlpZihzdGF0dXMgJiAoQUxJR05fRVJSIDw8IDgpICkgICAgICAgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwpAQCAtMTI2OSwxNCArMTI2OSwxNCBAQAogCQlpZihzdGF0dXMgJiBDUl9MT1NUKSBscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJaWYoc3RhdHVzICYgVFhfSkFCQkVSX0VSUikgbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKIAotI2lmIDAJICAgICAgIAorI2lmIDAKIAkJaWYoc3RhdHVzICYgQ09MTElTSU9OKSB7Ci0JCQlscC0+c3RhdHMuY29sbGlzaW9ucyArPSAKKwkJCWxwLT5zdGF0cy5jb2xsaXNpb25zICs9CiAJCQkJKChpbmIoaW9hZGRyK1RSQU5TTUlUX01PREVfUkVHKSAmIDB4RjApID4+IDQpOwogCQl9CiAjZW5kaWYKIAkJaWYoc3RhdHVzICYgQ09MTElTSU9OU18xNikgewotCQkJaWYobHAtPmNvbF8xNiA8IE1BWF9DT0xfMTYpIHsgCisJCQlpZihscC0+Y29sXzE2IDwgTUFYX0NPTF8xNikgewogCQkJCWxwLT5jb2xfMTYrKzsKIAkJCQlscC0+c3RhdHMuY29sbGlzaW9ucysrOwogCQkJCS8qIFJlc3VtZSB0cmFuc21pdHRpbmcsIHNraXAgZmFpbGVkIHBhY2tldCAqLwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKIAkJaWYoc3RhdHVzICYgVFhfRE9ORSkgeyAgICAgICAgIC8qIFRoZSB0cmFuc21pdCBoYXMgYmVlbiBkb25lICovCiAJCQlscC0+c3RhdHMudHhfcGFja2V0cyA9IGxwLT50eF9idWZmZXJlZF9wYWNrZXRzOwogCQkJbHAtPnN0YXRzLnR4X2J5dGVzICs9IGxwLT50eF9idWZmZXJlZF9ieXRlczsKLQkJCWxwLT5jb2xfMTYgPSAwOwkJICAgCisJCQlscC0+Y29sXzE2ID0gMDsKIAogCQkJaWYobHAtPnR4X3F1ZXVlKSB7ICAgICAgICAgICAvKiBJcyB0aGVyZSBzdGlsbCBwYWNrZXRzID8gKi8KIAkJCQkvKiBUaGVyZSB3YXMgcGFja2V0KHMpIHNvIHN0YXJ0IHRyYW5zbWl0dGluZyBhbmQgd3JpdGUgYWxzbwpAQCAtMTMxMCwyNiArMTMxMCwyNiBAQAogCQl9CiAJfQogCi0JaWYoICggc3RhdHVzICYgMHg4MDAwICkgfHwgCisJaWYoICggc3RhdHVzICYgMHg4MDAwICkgfHwKIAkgICAgKCAoaW5iKGlvYWRkciArIFJFQ0VJVkVfTU9ERV9SRUcpICYgUlhfQlVGRkVSX0VNUFRZKSA9PSAwKSApIHsKIAkJZXRoMTZpX3J4KGRldik7ICAvKiBXZSBoYXZlIHBhY2tldCBpbiByZWNlaXZlIGJ1ZmZlciAqLwotCX0gIAotCQorCX0KKwogCS8qIFR1cm4gaW50ZXJydXB0cyBiYWNrIG9uICovCiAJb3V0dyhFVEgxNklfSU5UUl9PTiwgaW9hZGRyICsgVFhfSU5UUl9SRUcpOwotCQorCiAJaWYobHAtPnR4X3F1ZXVlX2xlbiA8IGxwLT50eF9idWZfc2l6ZSAtIChFVEhfRlJBTUVfTEVOICsgMikpIHsKIAkJLyogVGhlcmUgaXMgc3RpbGwgbW9yZSByb29tIGZvciBvbmUgbW9yZSBwYWNrZXQgaW4gdHggYnVmZmVyICovCiAJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9Ci0JCisKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwotCQorCiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGV0aDE2aV9za2lwX3BhY2tldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewkgCit7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCiAJaW53KGlvYWRkciArIERBVEFQT1JUKTsKQEAgLTEzNDUsMjggKzEzNDUsMjggQEAKIAlzdHJ1Y3QgZXRoMTZpX2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCi0JaWYoZXRoMTZpX2RlYnVnID4gMSkgCisJaWYoZXRoMTZpX2RlYnVnID4gMSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXNldHRpbmcgZGV2aWNlLlxuIiwgZGV2LT5uYW1lKTsKIAogCUJJVFNFVChpb2FkZHIgKyBDT05GSUdfUkVHXzAsIERMQ19FTik7Ci0Jb3V0dygweGZmZmYsIGlvYWRkciArIFRYX1NUQVRVU19SRUcpOyAgICAKKwlvdXR3KDB4ZmZmZiwgaW9hZGRyICsgVFhfU1RBVFVTX1JFRyk7CiAJZXRoMTZpX3NlbGVjdF9yZWdiYW5rKDIsIGlvYWRkcik7CiAKIAlscC0+dHhfc3RhcnRlZCA9IDA7CiAJbHAtPnR4X2J1Zl9idXN5ID0gMDsKIAlscC0+dHhfcXVldWUgPSAwOwotCWxwLT50eF9xdWV1ZV9sZW4gPSAwOyAgICAKKwlscC0+dHhfcXVldWVfbGVuID0gMDsKIAlCSVRDTFIoaW9hZGRyICsgQ09ORklHX1JFR18wLCBETENfRU4pOwogfQogCiBzdGF0aWMgdm9pZCBldGgxNmlfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotICAKLQlpZihkZXYtPm1jX2NvdW50IHx8IGRldi0+ZmxhZ3MmKElGRl9BTExNVUxUSXxJRkZfUFJPTUlTQykpIAorCisJaWYoZGV2LT5tY19jb3VudCB8fCBkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKQogCXsKIAkJZGV2LT5mbGFnc3w9SUZGX1BST01JU0M7CS8qIE11c3QgZG8gdGhpcyAqLwotCQlvdXRiKDMsIGlvYWRkciArIFJFQ0VJVkVfTU9ERV9SRUcpOyAgICAKKwkJb3V0YigzLCBpb2FkZHIgKyBSRUNFSVZFX01PREVfUkVHKTsKIAl9IGVsc2UgewogCQlvdXRiKDIsIGlvYWRkciArIFJFQ0VJVkVfTU9ERV9SRUcpOwogCX0KQEAgLTEzODMsNyArMTM4Myw3IEBACiAJdW5zaWduZWQgY2hhciBkYXRhOwogCiAJZGF0YSA9IGluYihpb2FkZHIgKyBDT05GSUdfUkVHXzEpOwotCW91dGIoICgoZGF0YSAmIDB4RjMpIHwgKCAoYmFua25iciAmIDB4MDMpIDw8IDIpKSwgaW9hZGRyICsgQ09ORklHX1JFR18xKTsgCisJb3V0YiggKChkYXRhICYgMHhGMykgfCAoIChiYW5rbmJyICYgMHgwMykgPDwgMikpLCBpb2FkZHIgKyBDT05GSUdfUkVHXzEpOwogfQogCiAjaWZkZWYgTU9EVUxFCkBAIC0xMzkyLDcgKzEzOTIsNyBAQAogewogCWlmKCFzKQogCQlyZXR1cm4gRV9QT1JUX0ZST01fRVBST007Ci0JCisKICAgICAgICAgaWYgKCFzdHJuY21wKHMsICJibmMiLCAzKSkKIAkJcmV0dXJuIEVfUE9SVF9CTkM7CiAgICAgICAgIGVsc2UgaWYgKCFzdHJuY21wKHMsICJ0cCIsIDIpKQpAQCAtMTQzNCw3ICsxNDM0LDcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJldGgxNmkgZGVidWcgbGV2ZWwgKDAtNikiKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJaW50IHRoaXNfZGV2LCBmb3VuZCA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTE0NzQsMTQgKzE0NzQsMTQgQEAKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIC1FTlhJTzsKIH0KLQkKKwogdm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCB0aGlzX2RldjsKIAogCWZvcih0aGlzX2RldiA9IDA7IHRoaXNfZGV2IDwgTUFYX0VUSDE2SV9DQVJEUzsgdGhpc19kZXYrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2V0aDE2aVt0aGlzX2Rldl07Ci0JCQorCiAJCWlmKGRldi0+cHJpdikgewogCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAkJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuYyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKaW5kZXggYjk4N2Y5NC4uNzVhNDNmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuYworKysgYi9kcml2ZXJzL25ldC9ld3JrMy5jCkBAIC0zMDUsOCArMzA1LDggQEAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXdyazNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBld3JrM19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHNfMjAzOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHNfMjAzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAogLyoKICAgICoqIFByaXZhdGUgZnVuY3Rpb25zCkBAIC0zNTksMTMgKzM1OSwxMyBAQAogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAogCWVyciA9IGV3cmszX3Byb2JlMShkZXYsIGRldi0+YmFzZV9hZGRyLCBkZXYtPmlycSk7Ci0JaWYgKGVycikgCisJaWYgKGVycikKIAkJZ290byBvdXQ7CiAJcmV0dXJuIGRldjsKIG91dDoKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBFUlJfUFRSKGVycik7Ci0JCisKIH0KICNlbmRpZgogCkBAIC0zNzgsNyArMzc4LDcgQEAKIAogCS8qIEFkZHJlc3MgUFJPTSBwYXR0ZXJuICovCiAJZXJyID0gaXNhX3Byb2JlKGRldiwgaW9iYXNlKTsKLQlpZiAoZXJyICE9IDApIAorCWlmIChlcnIgIT0gMCkKIAkJZXJyID0gZWlzYV9wcm9iZShkZXYsIGlvYmFzZSk7CiAKIAlpZiAoZXJyKQpAQCAtMzkxLDcgKzM5MSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgCitzdGF0aWMgaW50IF9faW5pdAogZXdyazNfaHdfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1X2xvbmcgaW9iYXNlKQogewogCXN0cnVjdCBld3JrM19wcml2YXRlICpscDsKQEAgLTQzNSwxOSArNDM1LDE5IEBACiAJCXByaW50aygiJXM6IERldmljZSBoYXMgYSBiYWQgb24tYm9hcmQgRUVQUk9NLlxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9Ci0JCisKIAlFdGh3cmtTaWduYXR1cmUobmFtZSwgZWVwcm9tX2ltYWdlKTsKLQlpZiAoKm5hbWUgPT0gJ1wwJykgCisJaWYgKCpuYW1lID09ICdcMCcpCiAJCXJldHVybiAtRU5YSU87CiAKIAlkZXYtPmJhc2VfYWRkciA9IGlvYmFzZTsKLQkJCQkKKwogCWlmIChpb2Jhc2UgPiAweDQwMCkgewogCQlvdXRiKGVpc2FfY3IsIEVJU0FfQ1IpOwkJLyogUmV3cml0ZSB0aGUgRUlTQSBDUiAqLwogCX0KIAlsZW1hYyA9IGVlcHJvbV9pbWFnZVtFRVBST01fQ0hJUFZFUl07CiAJY21yID0gaW5iKEVXUkszX0NNUik7Ci0JCisKIAlpZiAoKChsZW1hYyA9PSBMZU1BQykgJiYgKChjbXIgJiBDTVJfTk9fRUVQUk9NKSAhPSBDTVJfTk9fRUVQUk9NKSkgfHwKIAkgICAgKChsZW1hYyA9PSBMZU1BQzIpICYmICEoY21yICYgQ01SX0hTKSkpIHsKIAkJcHJpbnRrKCIlczogJXMgYXQgJSM0bHgiLCBkZXYtPm5hbWUsIG5hbWUsIGlvYmFzZSk7CkBAIC00NjgsNyArNDY4LDcgQEAKIAkJcHJpbnRrKCIlMi4yeDoiLCBkZXYtPmRldl9hZGRyW2ldKTsKIAl9CiAJcHJpbnRrKCIlMi4yeCxcbiIsIGRldi0+ZGV2X2FkZHJbaV0pOwotCQorCiAJaWYgKHN0YXR1cykgewogCQlwcmludGsoIiAgICAgIHdoaWNoIGhhcyBhbiBFRVBST00gQ1JDIGVycm9yLlxuIik7CiAJCXJldHVybiAtRU5YSU87CkBAIC00OTAsNyArNDkwLDcgQEAKIAlpZiAoZWVwcm9tX2ltYWdlW0VFUFJPTV9TRVRVUF0gJiBTRVRVUF9EUkFNKQogCQljbXIgfD0gQ01SX0RSQU07CiAJb3V0YihjbXIsIEVXUkszX0NNUik7Ci0JCisKIAljciA9IGluYihFV1JLM19DUik7CS8qIFNldCB1cCB0aGUgQ29udHJvbCBSZWdpc3RlciAqLwogCWNyIHw9IGVlcHJvbV9pbWFnZVtFRVBST01fU0VUVVBdICYgU0VUVVBfQVBEOwogCWlmIChjciAmIFNFVFVQX0FQRCkKQEAgLTUyNCw3ICs1MjQsNyBAQAogCSoqIHVuY29tbWVudGluZyB0aGlzIGxpbmUuCiAJKi8KIC8qICAgICAgICAgIEZPUkNFXzJLX01PREU7ICovCi0JCisKIAlpZiAoaGFyZF9zdHJhcHBlZCkgewogCQlwcmludGsoIiAgICAgIGlzIGhhcmQgc3RyYXBwZWQuXG4iKTsKIAl9IGVsc2UgaWYgKG1lbV9zdGFydCkgewpAQCAtNTQ0LDQ0ICs1NDQsNDQgQEAKIAlscC0+aGFyZF9zdHJhcHBlZCA9IGhhcmRfc3RyYXBwZWQ7CiAJbHAtPmxlZF9tYXNrID0gQ1JfTEVEOwogCXNwaW5fbG9ja19pbml0KCZscC0+aHdfbG9jayk7Ci0JCisKIAlscC0+bVBhZ2UgPSA2NDsKIAlpZiAoY21yICYgQ01SX0RSQU0pCiAJCWxwLT5tUGFnZSA8PD0gMTsJLyogMiBEUkFNUyBvbiBtb2R1bGUgKi8KLQkKKwogCXNwcmludGYobHAtPmFkYXB0ZXJfbmFtZSwgIiVzICglcykiLCBuYW1lLCBkZXYtPm5hbWUpOwotCQorCiAJbHAtPmlycV9tYXNrID0gSUNSX1RORU0gfCBJQ1JfVFhETSB8IElDUl9STkVNIHwgSUNSX1JYRE07Ci0JCisKIAlpZiAoIWhhcmRfc3RyYXBwZWQpIHsKIAkJLyoKIAkJKiogRW5hYmxlIEVXUkszIGJvYXJkIGludGVycnVwdHMgZm9yIGF1dG9wcm9iaW5nCiAJCSovCiAJCWljciB8PSBJQ1JfSUU7CS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCiAJCW91dGIoaWNyLCBFV1JLM19JQ1IpOwotCQkKKwogCQkvKiBUaGUgRE1BIGNoYW5uZWwgbWF5IGJlIHBhc3NlZCBpbiBvbiB0aGlzIHBhcmFtZXRlci4gKi8KIAkJZGV2LT5kbWEgPSAwOwotCQkKKwogCQkvKiBUbyBhdXRvLUlSUSB3ZSBlbmFibGUgdGhlIGluaXRpYWxpemF0aW9uLWRvbmUgYW5kIERNQSBlcnIsCiAJCSAgIGludGVycnVwdHMuIEZvciBub3cgd2Ugd2lsbCBhbHdheXMgZ2V0IGEgRE1BIGVycm9yLiAqLwogCQlpZiAoZGV2LT5pcnEgPCAyKSB7CiAjaWZuZGVmIE1PRFVMRQogCQkJdV9jaGFyIGlycW51bTsKIAkJCXVuc2lnbmVkIGxvbmcgaXJxX21hc2s7Ci0JCQkKKwogCiAJCQlpcnFfbWFzayA9IHByb2JlX2lycV9vbigpOwotCQkJCisKIAkJCS8qCiAJCQkqKiBUcmlnZ2VyIGEgVE5FIGludGVycnVwdC4KIAkJCSovCiAJCQlpY3IgfD0gSUNSX1RORU07CiAJCQlvdXRiKDEsIEVXUkszX1REUSk7CS8qIFdyaXRlIHRvIHRoZSBUWCBkb25lIHF1ZXVlICovCiAJCQlvdXRiKGljciwgRVdSSzNfSUNSKTsJLyogVW5tYXNrIHRoZSBUWEQgaW50ZXJydXB0ICovCi0JCQkKKwogCQkJaXJxbnVtID0gaXJxWygoaWNyICYgSVJRX1NFTCkgPj4gNCldOwotCQkJCisKIAkJCW1kZWxheSgyMCk7CiAJCQlkZXYtPmlycSA9IHByb2JlX2lycV9vZmYoaXJxX21hc2spOwogCQkJaWYgKChkZXYtPmlycSkgJiYgKGlycW51bSA9PSBkZXYtPmlycSkpIHsKQEAgLTYyMiwxMiArNjIyLDEyIEBACiAJCVNFVF9FVEhUT09MX09QUyhkZXYsICZldGh0b29sX29wcyk7CiAJZGV2LT50eF90aW1lb3V0ID0gZXdyazNfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gUVVFVUVfUEtUX1RJTUVPVVQ7Ci0JCisKIAlkZXYtPm1lbV9zdGFydCA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KLQwKKwogCiBzdGF0aWMgaW50IGV3cmszX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTczMiwxNCArNzMyLDE0IEBACiAvKgogICogIFRyYW5zbWl0IHRpbWVvdXQKICAqLwotIAorCiBzdGF0aWMgdm9pZCBld3JrM190aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV3cmszX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1X2NoYXIgaWNyLCBjc3I7CiAJdV9sb25nIGlvYmFzZSA9IGRldi0+YmFzZV9hZGRyOwotCQotCWlmICghbHAtPmhhcmRfc3RyYXBwZWQpIAorCisJaWYgKCFscC0+aGFyZF9zdHJhcHBlZCkKIAl7CiAJCXByaW50ayhLRVJOX1dBUk5JTkciJXM6IHRyYW5zbWl0IHRpbWVkL2xvY2tlZCBvdXQsIHN0YXR1cyAlMDR4LCByZXNldHRpbmcuXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBpbmIoRVdSSzNfQ1NSKSk7CkBAIC0xMTA4LDcgKzExMDgsNyBAQAogCXVfY2hhciBpY3IsIGNzcjsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCWlmIChld3JrM19kZWJ1ZyA+IDEpIHsKIAkJcHJpbnRrKCIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAogCQkgICAgICAgZGV2LT5uYW1lLCBpbmIoRVdSSzNfQ1NSKSk7CkBAIC0xNjY2LDE0ICsxNjY2LDE0IEBACiAJcmV0dXJuIHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpID8gLUVSRVNUQVJUU1lTIDogMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wc18yMDMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzXzIwMyA9IHsKIAkuZ2V0X2RydmluZm8gPSBld3JrM19nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzID0gZXdyazNfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBld3JrM19zZXRfc2V0dGluZ3MsCiAJLnBoeXNfaWQgPSBld3JrM19waHlzX2lkLAogfTsKIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gZXdyazNfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IGV3cmszX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gZXdyazNfc2V0X3NldHRpbmdzLApAQCAtMTY5Nyw3ICsxNjk3LDcgQEAKIAkJdV9jaGFyIGFkZHJbSEFTSF9UQUJMRV9MRU4gKiBFVEhfQUxFTl07CiAJCXVfc2hvcnQgdmFsWyhIQVNIX1RBQkxFX0xFTiAqIEVUSF9BTEVOKSA+PiAxXTsKIAl9OwotCQorCiAJdW5pb24gZXdyazNfYWRkciAqdG1wOwogCiAJLyogQWxsIHdlIGhhbmRsZSBhcmUgcHJpdmF0ZSBJT0NUTHMgKi8KQEAgLTE3MTcsNyArMTcxNyw3IEBACiAJCWlmIChjb3B5X3RvX3VzZXIoaW9jLT5kYXRhLCB0bXAtPmFkZHIsIGlvYy0+bGVuKSkKIAkJCXN0YXR1cyA9IC1FRkFVTFQ7CiAJCWJyZWFrOwotCQkKKwogCWNhc2UgRVdSSzNfU0VUX0hXQUREUjoJLyogU2V0IHRoZSBoYXJkd2FyZSBhZGRyZXNzICovCiAJCWlmIChjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmh3X2xvY2ssIGZsYWdzKTsKQEAgLTE5OTAsNyArMTk5MCw3IEBACiAjZW5kaWYJCQkJLyogTU9EVUxFICovCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQwKKwogCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuaCBiL2RyaXZlcnMvbmV0L2V3cmszLmgKaW5kZXggZmI3NGJkMC4uOGUwZWU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuaAorKysgYi9kcml2ZXJzL25ldC9ld3JrMy5oCkBAIC02Myw3ICs2Myw3IEBACiAqLwogI2RlZmluZSBDU1JfUkEJCTB4ODAJICAgIC8qIFJ1bnQgQWNjZXB0ICovCiAjZGVmaW5lIENTUl9QTUUJCTB4NDAJICAgIC8qIFByb21pc2N1b3VzIE1vZGUgRW5hYmxlICovCi0jZGVmaW5lIENTUl9NQ0UJCTB4MjAJICAgIC8qIE11bHRpY2FzdCBFbmFibGUgKi8gCisjZGVmaW5lIENTUl9NQ0UJCTB4MjAJICAgIC8qIE11bHRpY2FzdCBFbmFibGUgKi8KICNkZWZpbmUgQ1NSX1RORQkJMHgwOAkgICAgLyogVFggRG9uZSBRdWV1ZSBOb3QgRW1wdHkgKi8KICNkZWZpbmUgQ1NSX1JORQkJMHgwNAkgICAgLyogUlggUXVldWUgTm90IEVtcHR5ICovCiAjZGVmaW5lIENTUl9UWEQJCTB4MDIJICAgIC8qIFRYIERpc2FibGUgKi8KQEAgLTEyNyw3ICsxMjcsNyBAQAogI2RlZmluZSBDTVJfRFJBTSAgICAgICAgMHgwMgkvKiAwLT4gMURSQU0sIDEtPiAyIERSQU0gb24gYm9hcmQgKi8KICNkZWZpbmUgQ01SXzBXUyAgICAgICAgIDB4MDEgICAgLyogWmVybyBXYWl0IFN0YXRlICovCiAKLS8qIAorLyoKICoqIE1BQyBSZWNlaXZlIFN0YXR1cyBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKICovCiAKQEAgLTEzOCw3ICsxMzgsNyBAQAogI2RlZmluZSBSX0NSQyAgICAgCTB4MDIgCS8qIENSQyBlcnJvciAqLwogI2RlZmluZSBSX1BMTCAgICAgCTB4MDEgCS8qIFBoYXNlIExvY2sgTG9zdCAqLwogCi0vKiAKKy8qCiAqKiBNQUMgVHJhbnNtaXQgQ29udHJvbCBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKICovCiAKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2RlZmluZSBUQ1JfSUZDICAgICAJMHgwMiAJLyogSW5zZXJ0IEZyYW1lIENoZWNrICovCiAjZGVmaW5lIFRDUl9JU0EgICAgIAkweDAxIAkvKiBJbnNlcnQgU291cmNlIEFkZHJlc3MgKi8KIAotLyogCisvKgogKiogTUFDIFRyYW5zbWl0IFN0YXR1cyBSZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMKICovCiAKQEAgLTE2OCwxNSArMTY4LDE1IEBACiAjZGVmaW5lIFRfWFVSICAgICAgICAgICAweDAzICAgIC8qIEV4Y2Vzc2l2ZSBVbmRlcnJ1bnMgKi8KICNkZWZpbmUgVF9UWEUgICAgICAgICAgIDB4N2YgICAgLyogVFggRXJyb3JzICovCiAKLS8qIAotKiogRUlTQSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIGJpdCBkZWZpbml0aW9ucyAKKy8qCisqKiBFSVNBIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgYml0IGRlZmluaXRpb25zCiAqLwogCi0jZGVmaW5lIEVJU0FfSUQgICAgICAgaW9iYXNlICsgMHgwYzgwICAvKiBFSVNBIElEIFJlZ2lzdGVycyAqLyAKLSNkZWZpbmUgRUlTQV9JRDAgICAgICBpb2Jhc2UgKyAweDBjODAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMCAqLyAKLSNkZWZpbmUgRUlTQV9JRDEgICAgICBpb2Jhc2UgKyAweDBjODEgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMSAqLyAKLSNkZWZpbmUgRUlTQV9JRDIgICAgICBpb2Jhc2UgKyAweDBjODIgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMiAqLyAKLSNkZWZpbmUgRUlTQV9JRDMgICAgICBpb2Jhc2UgKyAweDBjODMgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMyAqLyAKKyNkZWZpbmUgRUlTQV9JRCAgICAgICBpb2Jhc2UgKyAweDBjODAgIC8qIEVJU0EgSUQgUmVnaXN0ZXJzICovCisjZGVmaW5lIEVJU0FfSUQwICAgICAgaW9iYXNlICsgMHgwYzgwICAvKiBFSVNBIElEIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgRUlTQV9JRDEgICAgICBpb2Jhc2UgKyAweDBjODEgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMSAqLworI2RlZmluZSBFSVNBX0lEMiAgICAgIGlvYmFzZSArIDB4MGM4MiAgLyogRUlTQSBJRCBSZWdpc3RlciAyICovCisjZGVmaW5lIEVJU0FfSUQzICAgICAgaW9iYXNlICsgMHgwYzgzICAvKiBFSVNBIElEIFJlZ2lzdGVyIDMgKi8KICNkZWZpbmUgRUlTQV9DUiAgICAgICBpb2Jhc2UgKyAweDBjODQgIC8qIEVJU0EgQ29udHJvbCBSZWdpc3RlciAqLwogCiAvKgpAQCAtMjIzLDcgKzIyMyw3IEBACiAvKgogKiogRUVQUk9NIE1JU0NFTExBTkVPVVMgRkxBR1MKICovCi0jZGVmaW5lIFJCRV9TSEFET1cJMHgwMTAwCS8qIFJlbW90ZSBCb290IEVuYWJsZSBTaGFkb3cgKi8gCisjZGVmaW5lIFJCRV9TSEFET1cJMHgwMTAwCS8qIFJlbW90ZSBCb290IEVuYWJsZSBTaGFkb3cgKi8KICNkZWZpbmUgUkVBRF9BSEVBRCAgICAgIDB4MDA4MCAgLyogUmVhZCBBaGVhZCBmZWF0dXJlICovCiAjZGVmaW5lIElSUV9TRUwyICAgICAgICAweDAwNzAgIC8qIElSUSBsaW5lIHNlbGVjdGlvbiAoTGVNQUMyKSAqLwogI2RlZmluZSBJUlFfU0VMICAgICAgICAgMHgwMDYwICAvKiBJUlEgbGluZSBzZWxlY3Rpb24gKi8KQEAgLTI0Miw3ICsyNDIsNyBAQAogLyoKICoqIEVFUFJPTSBTVyBGTEFHUwogKi8KLSNkZWZpbmUgU1dfU1FFCQkweDEwCS8qIFNpZ25hbCBRdWFsaXR5IEVycm9yICovIAorI2RlZmluZSBTV19TUUUJCTB4MTAJLyogU2lnbmFsIFF1YWxpdHkgRXJyb3IgKi8KICNkZWZpbmUgU1dfTEFCCQkweDA4CS8qIExlc3MgQWdncmVzc2l2ZSBCYWNrb2ZmICovCiAjZGVmaW5lIFNXX0lOSVQJCTB4MDQJLyogSW5pdGlhbGl6ZWQgKi8KICNkZWZpbmUgU1dfVElNRU9VVCAgICAgCTB4MDIJLyogMDoyLjUgbWlucywgMTogMzAgc2VjcyAqLwpAQCAtMjk5LDggKzI5OSw4IEBACiAJdW5zaWduZWQgY2hhciAgX191c2VyICpkYXRhOyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBkYXRhIGJ1ZmZlciAqLwogfTsKIAotLyogCi0qKiBSZWNvZ25pc2VkIGNvbW1hbmRzIGZvciB0aGUgZHJpdmVyIAorLyoKKyoqIFJlY29nbmlzZWQgY29tbWFuZHMgZm9yIHRoZSBkcml2ZXIKICovCiAjZGVmaW5lIEVXUkszX0dFVF9IV0FERFIJMHgwMSAvKiBHZXQgdGhlIGhhcmR3YXJlIGFkZHJlc3MgKi8KICNkZWZpbmUgRVdSSzNfU0VUX0hXQUREUgkweDAyIC8qIEdldCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZmVhbG54LmMgYi9kcml2ZXJzL25ldC9mZWFsbnguYwppbmRleCA5N2QzNGZlLi4xOTFiZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWFsbnguYworKysgYi9kcml2ZXJzL25ldC9mZWFsbnguYwpAQCAtMjUsOCArMjUsOCBAQAogKi8KIAogI2RlZmluZSBEUlZfTkFNRQkiZmVhbG54IgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi41MSIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIk5vdi0xNy0yMDAxIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMi41MiIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIlNlcC0xMS0yMDA2IgogCiBzdGF0aWMgaW50IGRlYnVnOwkJLyogMS0+IHByaW50IGRlYnVnIG1lc3NhZ2UgKi8KIHN0YXRpYyBpbnQgbWF4X2ludGVycnVwdF93b3JrID0gMjA7CkBAIC05Miw3ICs5Miw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjaGFyIHZlcnNpb25bXSA9CiBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiXG4iOwogCiAKQEAgLTQ0MCw3ICs0NDAsNyBAQAogc3RhdGljIHZvaWQgX19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBtaWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGludCBuZXRkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCByZXNldF9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJlc2V0X3R4X2Rlc2NyaXB0b3JzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNDg2LDIzICs0ODYsMjMgQEAKICNlbHNlCiAJaW50IGJhciA9IDE7CiAjZW5kaWYKLQkKKwogLyogd2hlbiBidWlsdCBpbnRvIHRoZSBrZXJuZWwsIHdlIG9ubHkgcHJpbnQgdmVyc2lvbiBpZiBkZXZpY2UgaXMgZm91bmQgKi8KICNpZm5kZWYgTU9EVUxFCiAJc3RhdGljIGludCBwcmludGVkX3ZlcnNpb247CiAJaWYgKCFwcmludGVkX3ZlcnNpb24rKykKIAkJcHJpbnRrKHZlcnNpb24pOwogI2VuZGlmCi0JCisKIAljYXJkX2lkeCsrOwogCXNwcmludGYoYm9hcmRuYW1lLCAiZmVhbG54JWQiLCBjYXJkX2lkeCk7Ci0JCisKIAlvcHRpb24gPSBjYXJkX2lkeCA8IE1BWF9VTklUUyA/IG9wdGlvbnNbY2FyZF9pZHhdIDogMDsKIAogCWkgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoaSkgcmV0dXJuIGk7CiAJcGNpX3NldF9tYXN0ZXIocGRldik7Ci0JCisKIAlsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIGJhcik7CiAJaWYgKGxlbiA8IE1JTl9SRUdJT05fU0laRSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCkBAIC01MTMsNyArNTEzLDcgQEAKIAlpID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBib2FyZG5hbWUpOwogCWlmIChpKQogCQlyZXR1cm4gaTsKLQkKKwogCWlycSA9IHBkZXYtPmlycTsKIAogCWlvYWRkciA9IHBjaV9pb21hcChwZGV2LCBiYXIsIGxlbik7CkBAIC02NjAsNyArNjYwLDcgQEAKIAlkZXYtPmV0aHRvb2xfb3BzID0gJm5ldGRldl9ldGh0b29sX29wczsKIAlkZXYtPnR4X3RpbWVvdXQgPSAmdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKLQkKKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9mcmVlX3R4OwpAQCAtODY1LDI1ICs4NjUsMjUgQEAKIAkgICBUeCBhbmQgUnggcXVldWVzIGFuZCB0aGUgYWRkcmVzcyBmaWx0ZXIgbGlzdC4KIAkgICBGSVhNRSAoVWVpbW9yKTogb3B0aW1pc3RpYyBmb3IgYWxwaGEgKyBwb3N0ZWQgd3JpdGVzID8gKi8KICNpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykKLS8vIDg5LzkvMSBtb2RpZnksIAorLy8gODkvOS8xIG1vZGlmeSwKIC8vICAgbnAtPmJjcnZhbHVlPTB4MDQgfCAweDB4Mzg7ICAvKiBiaWctZW5kaWFuLCAyNTYgYnVyc3QgbGVuZ3RoICovCiAJbnAtPmJjcnZhbHVlID0gMHgwNCB8IDB4MTA7CS8qIGJpZy1lbmRpYW4sIHR4IDggYnVyc3QgbGVuZ3RoICovCiAJbnAtPmNydmFsdWUgPSAweGUwMDsJLyogcnggMTI4IGJ1cnN0IGxlbmd0aCAqLwogI2VsaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKLS8vIDg5LzkvMSBtb2RpZnksIAorLy8gODkvOS8xIG1vZGlmeSwKIC8vICAgbnAtPmJjcnZhbHVlPTB4Mzg7ICAgICAgICAgICAvKiBsaXR0bGUtZW5kaWFuLCAyNTYgYnVyc3QgbGVuZ3RoICovCiAJbnAtPmJjcnZhbHVlID0gMHgxMDsJLyogbGl0dGxlLWVuZGlhbiwgOCBidXJzdCBsZW5ndGggKi8KIAlucC0+Y3J2YWx1ZSA9IDB4ZTAwOwkvKiByeCAxMjggYnVyc3QgbGVuZ3RoICovCiAjZWxpZiBkZWZpbmVkKF9faTM4Nl9fKQogI2lmIGRlZmluZWQoTU9EVUxFKQotLy8gODkvOS8xIG1vZGlmeSwgCisvLyA4OS85LzEgbW9kaWZ5LAogLy8gICBucC0+YmNydmFsdWU9MHgzODsgICAgICAgICAgIC8qIGxpdHRsZS1lbmRpYW4sIDI1NiBidXJzdCBsZW5ndGggKi8KIAlucC0+YmNydmFsdWUgPSAweDEwOwkvKiBsaXR0bGUtZW5kaWFuLCA4IGJ1cnN0IGxlbmd0aCAqLwogCW5wLT5jcnZhbHVlID0gMHhlMDA7CS8qIHJ4IDEyOCBidXJzdCBsZW5ndGggKi8KICNlbHNlCiAJLyogV2hlbiBub3QgYSBtb2R1bGUgd2UgY2FuIHdvcmsgYXJvdW5kIGJyb2tlbiAnNDg2IFBDSSBib2FyZHMuICovCiAjZGVmaW5lIHg4NiBib290X2NwdV9kYXRhLng4NgotLy8gODkvOS8xIG1vZGlmeSwgCisvLyA4OS85LzEgbW9kaWZ5LAogLy8gICBucC0+YmNydmFsdWU9KHg4NiA8PSA0ID8gMHgxMCA6IDB4MzgpOwogCW5wLT5iY3J2YWx1ZSA9IDB4MTA7CiAJbnAtPmNydmFsdWUgPSAoeDg2IDw9IDQgPyAweGEwMCA6IDB4ZTAwKTsKQEAgLTExNjAsNyArMTE2MCw3IEBACiAJLyogUmVzZXQgdGhlIGNoaXAgdG8gZXJhc2UgcHJldmlvdXMgbWlzY29uZmlndXJhdGlvbi4gKi8KIAlpb3dyaXRlMzIoMHgwMDAwMDAwMSwgaW9hZGRyICsgQkNSKTsKIAotCS8qIFVlaW1vcjogd2FpdCBmb3IgNTAgUENJIGN5Y2xlcyAoYW5kIGZsdXNoIHBvc3RlZCB3cml0ZXMgYnR3KS4gCisJLyogVWVpbW9yOiB3YWl0IGZvciA1MCBQQ0kgY3ljbGVzIChhbmQgZmx1c2ggcG9zdGVkIHdyaXRlcyBidHcpLgogCSAgIFdlIHN1cmVseSB3YWl0IHRvbyBsb25nIChhZGRyZXNzK2RhdGEgcGhhc2UpLiBXaG8gY2FyZXM/ICovCiAJd2hpbGUgKC0tZGVsYXkpIHsKIAkJaW9yZWFkMzIoaW9hZGRyICsgQkNSKTsKQEAgLTEyMTMsNyArMTIxMyw3IEBACiAJcmVzZXRfdHhfZGVzY3JpcHRvcnMoZGV2KTsgKi8KIAllbmFibGVfcnh0eChkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7IC8qIEZJWE1FOiBvciBuZXRpZl93YWtlX3F1ZXVlKGRldik7ID8gKi8KLQkJCisKIAlucC0+cmVzZXRfdGltZXJfYXJtZWQgPSAwOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKQEAgLTEyMzksNyArMTIzOSw3IEBACiAJCQlwcmludGsoIiAlNC40eCIsIG5wLT50eF9yaW5nW2ldLnN0YXR1cyk7CiAJCXByaW50aygiXG4iKTsKIAl9Ci0JCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIAogCXJlc2V0X2FuZF9kaXNhYmxlX3J4dHgoZGV2KTsKQEAgLTE1MDksNyArMTUwOSw3IEBACiAJCQkJc3RvcF9uaWNfcngoaW9hZGRyLCBucC0+Y3J2YWx1ZSk7CiAJCQkJcmVzZXRfcnhfZGVzY3JpcHRvcnMoZGV2KTsKIAkJCQlpb3dyaXRlMzIobnAtPmNydmFsdWUsIGlvYWRkciArIFRDUlJDUik7Ci0JCQl9CQkJCQorCQkJfQogCQl9CiAKIAkJd2hpbGUgKG5wLT5yZWFsbHlfdHhfY291bnQpIHsKQEAgLTE1NzEsNyArMTU3MSw3IEBACiAJCQl9CiAJCQludW1fdHgrKzsKIAkJfQkJLyogZW5kIG9mIGZvciBsb29wICovCi0JCQorCiAJCWlmIChudW1fdHggJiYgbnAtPmZyZWVfdHhfY291bnQgPj0gMikKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIApAQCAtMTcyOCw3ICsxNzI4LDcgQEAKIAkJCQkvKiBDYWxsIGNvcHkgKyBja3N1bSBpZiBhdmFpbGFibGUuICovCiAKICNpZiAhIGRlZmluZWQoX19hbHBoYV9fKQotCQkJCWV0aF9jb3B5X2FuZF9zdW0oc2tiLCAKKwkJCQlldGhfY29weV9hbmRfc3VtKHNrYiwKIAkJCQkJbnAtPmN1cl9yeC0+c2tidWZmLT5kYXRhLCBwa3RfbGVuLCAwKTsKIAkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAjZWxzZQpAQCAtMTgwMCw4ICsxODAwLDYgQEAKIAl1MzIgcnhfbW9kZTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCXJ4X21vZGUgPSBDUl9XX1BST00gfCBDUl9XX0FCIHwgQ1JfV19BTTsKIAl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkKQEAgLTE4ODcsNyArMTg4NSw3IEBACiAJZGVidWcgPSB2YWx1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gbmV0ZGV2X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IG5ldGRldl9zZXRfc2V0dGluZ3MsCkBAIC0xOTg0LDcgKzE5ODIsNyBAQAogCXByaW50ayh2ZXJzaW9uKTsKICNlbmRpZgogCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZmVhbG54X2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmZlYWxueF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZmVhbG54X2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5jIGIvZHJpdmVycy9uZXQvZmVjLmMKaW5kZXggOWI0MDMwMC4uNTVkODZiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjLmMKQEAgLTI1Niw3ICsyNTYsNyBAQAogc3RhdGljIG1paV9saXN0X3QJKm1paV9oZWFkOwogc3RhdGljIG1paV9saXN0X3QJKm1paV90YWlsOwogCi1zdGF0aWMgaW50CW1paV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcmVxdWVzdCwgCitzdGF0aWMgaW50CW1paV9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcmVxdWVzdCwKIAkJCQl2b2lkICgqZnVuYykodWludCwgc3RydWN0IG5ldF9kZXZpY2UgKikpOwogCiAvKiBNYWtlIE1JSSByZWFkL3dyaXRlIGNvbW1hbmRzIGZvciB0aGUgRkVDLgpAQCAtMjc3LDcgKzI3Nyw3IEBACiAjZGVmaW5lIE1JSV9SRUdfU1IgICAgICAgICAgMSAgLyogU3RhdHVzIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBNSUlfUkVHX1BIWUlSMSAgICAgIDIgIC8qIFBIWSBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAxICAgICAgICAgICAgKi8KICNkZWZpbmUgTUlJX1JFR19QSFlJUjIgICAgICAzICAvKiBQSFkgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgMiAgICAgICAgICAgICovCi0jZGVmaW5lIE1JSV9SRUdfQU5BUiAgICAgICAgNCAgLyogQS1OIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgICAgICAgICAgICAgICAqLyAKKyNkZWZpbmUgTUlJX1JFR19BTkFSICAgICAgICA0ICAvKiBBLU4gQWR2ZXJ0aXNlbWVudCBSZWdpc3RlciAgICAgICAgICAgICAgICovCiAjZGVmaW5lIE1JSV9SRUdfQU5MUEFSICAgICAgNSAgLyogQS1OIExpbmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyICAgICAgICAqLwogI2RlZmluZSBNSUlfUkVHX0FORVIgICAgICAgIDYgIC8qIEEtTiBFeHBhbnNpb24gUmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgTUlJX1JFR19BTk5QVFIgICAgICA3ICAvKiBBLU4gTmV4dCBQYWdlIFRyYW5zbWl0IFJlZ2lzdGVyICAgICAgICAgICovCkBAIC0yODksMTggKzI4OSwxOCBAQAogI2RlZmluZSBQSFlfQ09ORl9MT09QCTB4MDAwMiAgLyogMSBsb29wYmFjayBtb2RlIGVuYWJsZWQgKi8KICNkZWZpbmUgUEhZX0NPTkZfU1BNQVNLCTB4MDBmMCAgLyogbWFzayBmb3Igc3BlZWQgKi8KICNkZWZpbmUgUEhZX0NPTkZfMTBIRFgJMHgwMDEwICAvKiAxMCBNYml0IGhhbGYgZHVwbGV4IHN1cHBvcnRlZCAqLwotI2RlZmluZSBQSFlfQ09ORl8xMEZEWAkweDAwMjAgIC8qIDEwIE1iaXQgZnVsbCBkdXBsZXggc3VwcG9ydGVkICovIAorI2RlZmluZSBQSFlfQ09ORl8xMEZEWAkweDAwMjAgIC8qIDEwIE1iaXQgZnVsbCBkdXBsZXggc3VwcG9ydGVkICovCiAjZGVmaW5lIFBIWV9DT05GXzEwMEhEWAkweDAwNDAgIC8qIDEwMCBNYml0IGhhbGYgZHVwbGV4IHN1cHBvcnRlZCAqLwotI2RlZmluZSBQSFlfQ09ORl8xMDBGRFgJMHgwMDgwICAvKiAxMDAgTWJpdCBmdWxsIGR1cGxleCBzdXBwb3J0ZWQgKi8gCisjZGVmaW5lIFBIWV9DT05GXzEwMEZEWAkweDAwODAgIC8qIDEwMCBNYml0IGZ1bGwgZHVwbGV4IHN1cHBvcnRlZCAqLwogCiAjZGVmaW5lIFBIWV9TVEFUX0xJTksJMHgwMTAwICAvKiAxIHVwIC0gMCBkb3duICovCiAjZGVmaW5lIFBIWV9TVEFUX0ZBVUxUCTB4MDIwMCAgLyogMSByZW1vdGUgZmF1bHQgKi8KICNkZWZpbmUgUEhZX1NUQVRfQU5DCTB4MDQwMCAgLyogMSBhdXRvLW5lZ290aWF0aW9uIGNvbXBsZXRlCSovCiAjZGVmaW5lIFBIWV9TVEFUX1NQTUFTSwkweGYwMDAgIC8qIG1hc2sgZm9yIHNwZWVkICovCiAjZGVmaW5lIFBIWV9TVEFUXzEwSERYCTB4MTAwMCAgLyogMTAgTWJpdCBoYWxmIGR1cGxleCBzZWxlY3RlZAkqLwotI2RlZmluZSBQSFlfU1RBVF8xMEZEWAkweDIwMDAgIC8qIDEwIE1iaXQgZnVsbCBkdXBsZXggc2VsZWN0ZWQJKi8gCisjZGVmaW5lIFBIWV9TVEFUXzEwRkRYCTB4MjAwMCAgLyogMTAgTWJpdCBmdWxsIGR1cGxleCBzZWxlY3RlZAkqLwogI2RlZmluZSBQSFlfU1RBVF8xMDBIRFgJMHg0MDAwICAvKiAxMDAgTWJpdCBoYWxmIGR1cGxleCBzZWxlY3RlZCAqLwotI2RlZmluZSBQSFlfU1RBVF8xMDBGRFgJMHg4MDAwICAvKiAxMDAgTWJpdCBmdWxsIGR1cGxleCBzZWxlY3RlZCAqLyAKKyNkZWZpbmUgUEhZX1NUQVRfMTAwRkRYCTB4ODAwMCAgLyogMTAwIE1iaXQgZnVsbCBkdXBsZXggc2VsZWN0ZWQgKi8KIAogCiBzdGF0aWMgaW50CkBAIC0zNjAsNyArMzYwLDcgQEAKIAogCWZlcC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZmVwLT5za2JfY3VyID0gKGZlcC0+c2tiX2N1cisxKSAmIFRYX1JJTkdfTU9EX01BU0s7Ci0JCisKIAkvKiBQdXNoIHRoZSBkYXRhIGNhY2hlIHNvIHRoZSBDUE0gZG9lcyBub3QgZ2V0IHN0YWxlIG1lbW9yeQogCSAqIGRhdGEuCiAJICovCkBAIC00MjIsNyArNDIyLDcgQEAKIAliZHAgPSBmZXAtPnR4X2JkX2Jhc2U7CiAJcHJpbnRrKCIgdHg6ICV1IGJ1ZmZlcnNcbiIsICBUWF9SSU5HX1NJWkUpOwogCWZvciAoaSA9IDAgOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKLQkJcHJpbnRrKCIgICUwOHg6ICUwNHggJTA0eCAlMDh4XG4iLCAKKwkJcHJpbnRrKCIgICUwOHg6ICUwNHggJTA0eCAlMDh4XG4iLAogCQkgICAgICAgKHVpbnQpIGJkcCwKIAkJICAgICAgIGJkcC0+Y2JkX3NjLAogCQkgICAgICAgYmRwLT5jYmRfZGF0bGVuLApAQCAtNDg0LDcgKzQ4NCw3IEBACiAJCQloYW5kbGVkID0gMTsKIAkJCWZlY19lbmV0X21paShkZXYpOwogCQl9Ci0JCisKIAl9CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CkBAIC01MzQsMjAgKzUzNCwyMCBAQAogCQkgKi8KIAkJaWYgKHN0YXR1cyAmIEJEX0VORVRfVFhfREVGKQogCQkJZmVwLT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JICAgIAorCiAJCS8qIEZyZWUgdGhlIHNrIGJ1ZmZlciBhc3NvY2lhdGVkIHdpdGggdGhpcyBsYXN0IHRyYW5zbWl0LgogCQkgKi8KIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJZmVwLT50eF9za2J1ZmZbZmVwLT5za2JfZGlydHldID0gTlVMTDsKIAkJZmVwLT5za2JfZGlydHkgPSAoZmVwLT5za2JfZGlydHkgKyAxKSAmIFRYX1JJTkdfTU9EX01BU0s7Ci0JICAgIAorCiAJCS8qIFVwZGF0ZSBwb2ludGVyIHRvIG5leHQgYnVmZmVyIGRlc2NyaXB0b3IgdG8gYmUgdHJhbnNtaXR0ZWQuCiAJCSAqLwogCQlpZiAoc3RhdHVzICYgQkRfRU5FVF9UWF9XUkFQKQogCQkJYmRwID0gZmVwLT50eF9iZF9iYXNlOwogCQllbHNlCiAJCQliZHArKzsKLQkgICAgCisKIAkJLyogU2luY2Ugd2UgaGF2ZSBmcmVlZCB1cCBhIGJ1ZmZlciwgdGhlIHJpbmcgaXMgbm8gbG9uZ2VyCiAJCSAqIGZ1bGwuCiAJCSAqLwpAQCAtNTc3LDEwICs1NzcsMTAgQEAKIAlzdHJ1Y3QJc2tfYnVmZgkqc2tiOwogCXVzaG9ydAlwa3RfbGVuOwogCV9fdTggKmRhdGE7Ci0JCisKICNpZmRlZiBDT05GSUdfTTUzMngKIAlmbHVzaF9jYWNoZV9hbGwoKTsKLSNlbmRpZgkKKyNlbmRpZgogCiAJZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlmZWNwID0gKHZvbGF0aWxlIGZlY190KilkZXYtPmJhc2VfYWRkcjsKQEAgLTYwNiw3ICs2MDYsNyBAQAogCS8qIENoZWNrIGZvciBlcnJvcnMuICovCiAJaWYgKHN0YXR1cyAmIChCRF9FTkVUX1JYX0xHIHwgQkRfRU5FVF9SWF9TSCB8IEJEX0VORVRfUlhfTk8gfAogCQkJICAgQkRfRU5FVF9SWF9DUiB8IEJEX0VORVRfUlhfT1YpKSB7Ci0JCWZlcC0+c3RhdHMucnhfZXJyb3JzKys7ICAgICAgIAorCQlmZXAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlpZiAoc3RhdHVzICYgKEJEX0VORVRfUlhfTEcgfCBCRF9FTkVUX1JYX1NIKSkgewogCQkvKiBGcmFtZSB0b28gbG9uZyBvciB0b28gc2hvcnQuICovCiAJCQlmZXAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTY3MCw3ICs2NzAsNyBAQAogCQliZHAgPSBmZXAtPnJ4X2JkX2Jhc2U7CiAJZWxzZQogCQliZHArKzsKLQkKKwogI2lmIDEKIAkvKiBEb2luZyB0aGlzIGhlcmUgd2lsbCBrZWVwIHRoZSBGRUMgcnVubmluZyB3aGlsZSB3ZSBwcm9jZXNzCiAJICogaW5jb21pbmcgZnJhbWVzLiAgT24gYSBoZWF2aWx5IGxvYWRlZCBuZXR3b3JrLCB3ZSBzaG91bGQgYmUKQEAgLTcwOCw3ICs3MDgsNyBAQAogCW1paV9yZWcgPSBlcC0+ZmVjX21paV9kYXRhOwogCiAJc3Bpbl9sb2NrKCZmZXAtPmxvY2spOwotCQorCiAJaWYgKChtaXAgPSBtaWlfaGVhZCkgPT0gTlVMTCkgewogCQlwcmludGsoIk1JSSBhbmQgbm8gaGVhZCFcbiIpOwogCQlnb3RvIHVubG9jazsKQEAgLTg4NiwxNCArODg2LDE0IEBACiAJCXsgbWtfbWlpX2VuZCwgfQogCX07CiBzdGF0aWMgcGh5X2luZm9fdCBjb25zdCBwaHlfaW5mb19seHQ5NzAgPSB7Ci0JLmlkID0gMHgwNzgxMDAwMCwgCisJLmlkID0gMHgwNzgxMDAwMCwKIAkubmFtZSA9ICJMWFQ5NzAiLAogCS5jb25maWcgPSBwaHlfY21kX2x4dDk3MF9jb25maWcsCiAJLnN0YXJ0dXAgPSBwaHlfY21kX2x4dDk3MF9zdGFydHVwLAogCS5hY2tfaW50ID0gcGh5X2NtZF9seHQ5NzBfYWNrX2ludCwKIAkuc2h1dGRvd24gPSBwaHlfY21kX2x4dDk3MF9zaHV0ZG93bgogfTsKLQkKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogVGhlIExldmVsIG9uZSBMWFQ5NzEgaXMgdXNlZCBvbiBzb21lIG9mIG15IGN1c3RvbSBib2FyZHMgICAgICAgICAgICAgICAgICAqLwogCkBAIC05MDYsNyArOTA2LDcgQEAKICNkZWZpbmUgTUlJX0xYVDk3MV9MQ1IgICAgICAgMjAgIC8qIExFRCBDb250cm9sIFJlZ2lzdGVyICAgICAgKi8KICNkZWZpbmUgTUlJX0xYVDk3MV9UQ1IgICAgICAgMzAgIC8qIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIgKi8KIAotLyogCisvKgogICogSSBoYWQgc29tZSBuaWNlIGlkZWFzIG9mIHJ1bm5pbmcgdGhlIE1ESU8gZmFzdGVyLi4uCiAgKiBUaGUgOTcxIHNob3VsZCBzdXBwb3J0IDhNSHogYW5kIEkgdHJpZWQgaXQsIGJ1dCB0aGluZ3MgYWN0ZWQgcmVhbGx5CiAgKiB3ZWlyZCwgc28gMi41IE1IeiBvdWdodCB0byBiZSBlbm91Z2ggZm9yIGFueW9uZS4uLgpAQCAtOTQ0LDkgKzk0NCw5IEBACiAKIAkqcyA9IHN0YXR1czsKIH0KLQkKKwogc3RhdGljIHBoeV9jbWRfdCBjb25zdCBwaHlfY21kX2x4dDk3MV9jb25maWdbXSA9IHsKLQkJLyogbGltaXQgdG8gMTBNQml0IGJlY2F1c2UgbXkgcHJvdG90eXBlIGJvYXJkIAorCQkvKiBsaW1pdCB0byAxME1CaXQgYmVjYXVzZSBteSBwcm90b3R5cGUgYm9hcmQKIAkJICogZG9lc24ndCB3b3JrIHdpdGggMTAwLiAqLwogCQl7IG1rX21paV9yZWFkKE1JSV9SRUdfQ1IpLCBtaWlfcGFyc2VfY3IgfSwKIAkJeyBta19taWlfcmVhZChNSUlfUkVHX0FOQVIpLCBtaWlfcGFyc2VfYW5hciB9LApAQCAtOTYwLDcgKzk2MCw3IEBACiAJCS8qIFNvbWVob3cgZG9lcyB0aGUgOTcxIHRlbGwgbWUgdGhhdCB0aGUgbGluayBpcyBkb3duCiAJCSAqIHRoZSBmaXJzdCByZWFkIGFmdGVyIHBvd2VyLXVwLgogCQkgKiByZWFkIGhlcmUgdG8gZ2V0IGEgdmFsaWQgdmFsdWUgaW4gYWNrX2ludCAqLwotCQl7IG1rX21paV9yZWFkKE1JSV9SRUdfU1IpLCBtaWlfcGFyc2Vfc3IgfSwgCisJCXsgbWtfbWlpX3JlYWQoTUlJX1JFR19TUiksIG1paV9wYXJzZV9zciB9LAogCQl7IG1rX21paV9lbmQsIH0KIAl9Owogc3RhdGljIHBoeV9jbWRfdCBjb25zdCBwaHlfY21kX2x4dDk3MV9hY2tfaW50W10gPSB7CkBAIC05NzYsNyArOTc2LDcgQEAKIAkJeyBta19taWlfZW5kLCB9CiAJfTsKIHN0YXRpYyBwaHlfaW5mb190IGNvbnN0IHBoeV9pbmZvX2x4dDk3MSA9IHsKLQkuaWQgPSAweDAwMDEzNzhlLCAKKwkuaWQgPSAweDAwMDEzNzhlLAogCS5uYW1lID0gIkxYVDk3MSIsCiAJLmNvbmZpZyA9IHBoeV9jbWRfbHh0OTcxX2NvbmZpZywKIAkuc3RhcnR1cCA9IHBoeV9jbWRfbHh0OTcxX3N0YXJ0dXAsCkBAIC0xMDE1LDcgKzEwMTUsNyBAQAogfQogCiBzdGF0aWMgcGh5X2NtZF90IGNvbnN0IHBoeV9jbWRfcXM2NjEyX2NvbmZpZ1tdID0gewotCQkvKiBUaGUgUEhZIHBvd2VycyB1cCBpc29sYXRlZCBvbiB0aGUgUlBYLCAKKwkJLyogVGhlIFBIWSBwb3dlcnMgdXAgaXNvbGF0ZWQgb24gdGhlIFJQWCwKIAkJICogc28gc2VuZCBhIGNvbW1hbmQgdG8gYWxsb3cgb3BlcmF0aW9uLgogCQkgKi8KIAkJeyBta19taWlfd3JpdGUoTUlJX1FTNjYxMl9QQ1IsIDB4MGRjMCksIE5VTEwgfSwKQEAgLTEwNDUsNyArMTA0NSw3IEBACiAJCXsgbWtfbWlpX2VuZCwgfQogCX07CiBzdGF0aWMgcGh5X2luZm9fdCBjb25zdCBwaHlfaW5mb19xczY2MTIgPSB7Ci0JLmlkID0gMHgwMDE4MTQ0MCwgCisJLmlkID0gMHgwMDE4MTQ0MCwKIAkubmFtZSA9ICJRUzY2MTIiLAogCS5jb25maWcgPSBwaHlfY21kX3FzNjYxMl9jb25maWcsCiAJLnN0YXJ0dXAgPSBwaHlfY21kX3FzNjYxMl9zdGFydHVwLApAQCAtMTA5Myw3ICsxMDkzLDcgQEAKIHN0YXRpYyBwaHlfY21kX3QgY29uc3QgcGh5X2NtZF9hbTc5Yzg3NF9zdGFydHVwW10gPSB7ICAvKiBlbmFibGUgaW50ZXJydXB0cyAqLwogCQl7IG1rX21paV93cml0ZShNSUlfQU03OUM4NzRfSUNTUiwgMHhmZjAwKSwgTlVMTCB9LAogCQl7IG1rX21paV93cml0ZShNSUlfUkVHX0NSLCAweDEyMDApLCBOVUxMIH0sIC8qIGF1dG9uZWdvdGlhdGUgKi8KLQkJeyBta19taWlfcmVhZChNSUlfUkVHX1NSKSwgbWlpX3BhcnNlX3NyIH0sIAorCQl7IG1rX21paV9yZWFkKE1JSV9SRUdfU1IpLCBtaWlfcGFyc2Vfc3IgfSwKIAkJeyBta19taWlfZW5kLCB9CiAJfTsKIHN0YXRpYyBwaHlfY21kX3QgY29uc3QgcGh5X2NtZF9hbTc5Yzg3NF9hY2tfaW50W10gPSB7CkBAIC0xMTM1LDcgKzExMzUsNyBAQAogc3RhdGljIHBoeV9jbWRfdCBjb25zdCBwaHlfY21kX2tzODcyMWJsX3N0YXJ0dXBbXSA9IHsgIC8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCiAJCXsgbWtfbWlpX3dyaXRlKE1JSV9LUzg3MjFCTF9JQ1NSLCAweGZmMDApLCBOVUxMIH0sCiAJCXsgbWtfbWlpX3dyaXRlKE1JSV9SRUdfQ1IsIDB4MTIwMCksIE5VTEwgfSwgLyogYXV0b25lZ290aWF0ZSAqLwotCQl7IG1rX21paV9yZWFkKE1JSV9SRUdfU1IpLCBtaWlfcGFyc2Vfc3IgfSwgCisJCXsgbWtfbWlpX3JlYWQoTUlJX1JFR19TUiksIG1paV9wYXJzZV9zciB9LAogCQl7IG1rX21paV9lbmQsIH0KIAl9Owogc3RhdGljIHBoeV9jbWRfdCBjb25zdCBwaHlfY21kX2tzODcyMWJsX2Fja19pbnRbXSA9IHsKQEAgLTExNTAsNyArMTE1MCw3IEBACiAJCXsgbWtfbWlpX2VuZCwgfQogCX07CiBzdGF0aWMgcGh5X2luZm9fdCBjb25zdCBwaHlfaW5mb19rczg3MjFibCA9IHsKLQkuaWQgPSAweDAwMDIyMTYxLCAKKwkuaWQgPSAweDAwMDIyMTYxLAogCS5uYW1lID0gIktTODcyMUJMIiwKIAkuY29uZmlnID0gcGh5X2NtZF9rczg3MjFibF9jb25maWcsCiAJLnN0YXJ0dXAgPSBwaHlfY21kX2tzODcyMWJsX3N0YXJ0dXAsCkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogCXsKIAkJdm9sYXRpbGUgdTE2ICpncGlvX3Bhc3BhcjsKIAkJdm9sYXRpbGUgdTggKmdwaW9fcGVobHBhcjsKLSAgCisKIAkJZ3Bpb19wYXNwYXIgPSAodm9sYXRpbGUgdTE2ICopIChNQ0ZfSVBTQkFSICsgMHgxMDAwNTYpOwogCQlncGlvX3BlaGxwYXIgPSAodm9sYXRpbGUgdTE2ICopIChNQ0ZfSVBTQkFSICsgMHgxMDAwNTgpOwogCQkqZ3Bpb19wYXNwYXIgfD0gMHgwZjAwOwpAQCAtMTY2Nyw3ICsxNjY3LDcgQEAKIAkvKiBTZXR1cCBpbnRlcnJ1cHQgaGFuZGxlcnMuICovCiAJZm9yIChpZHAgPSBpZDsgaWRwLT5uYW1lOyBpZHArKykgewogCQlpZiAocmVxdWVzdF9pcnEoYitpZHAtPmlycSxmZWNfZW5ldF9pbnRlcnJ1cHQsMCxpZHAtPm5hbWUsZGV2KSE9MCkKLQkJCXByaW50aygiRkVDOiBDb3VsZCBub3QgYWxsb2NhdGUgJXMgSVJRKCVkKSFcbiIsIAorCQkJcHJpbnRrKCJGRUM6IENvdWxkIG5vdCBhbGxvY2F0ZSAlcyBJUlEoJWQpIVxuIiwKIAkJCQlpZHAtPm5hbWUsIGIraWRwLT5pcnEpOwogCX0KIApAQCAtMTg1NiwxMCArMTg1NiwxMCBAQAogCQlpbW1hcC0+aW1faW9wb3J0LmlvcF9wZGRpciA9IDB4MWM1ODsJLyogUHJlIHJldi4gRCAqLwogCWVsc2UKIAkJaW1tYXAtPmltX2lvcG9ydC5pb3BfcGRkaXIgPSAweDFmZmY7CS8qIFJldi4gRCBhbmQgbGF0ZXIgKi8KLQkKKwogCS8qIFNldCBNSUkgc3BlZWQgdG8gMi41IE1IegogCSovCi0JZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkID0gCisJZmVjcC0+ZmVjX21paV9zcGVlZCA9IGZlcC0+cGh5X3NwZWVkID0KIAkJKChiZC0+YmlfYnVzZnJlcSAqIDEwMDAwMDApIC8gMjUwMDAwMCkgJiAweDdlOwogfQogCkBAIC0xODY5LDcgKzE4NjksNyBAQAogCiAJZmVjcCA9IGZlcC0+aHdwOwogCi0JLyogRW5hYmxlIE1JSSBjb21tYW5kIGZpbmlzaGVkIGludGVycnVwdCAKKwkvKiBFbmFibGUgTUlJIGNvbW1hbmQgZmluaXNoZWQgaW50ZXJydXB0CiAJKi8KIAlmZWNwLT5mZWNfaXZlYyA9IChGRUNfSU5URVJSVVBULzIpIDw8IDI5OwogfQpAQCAtMTk3MSw3ICsxOTcxLDcgQEAKIAogCWlmIChzdGF0dXMgJiBQSFlfQ09ORl9MT09QKQogCQlwcmludGsoIiwgbG9vcGJhY2sgZW5hYmxlZCIpOwotCQorCiAJcHJpbnRrKCIuXG4iKTsKIAogCWZlcC0+c2VxdWVuY2VfZG9uZSA9IDE7CkBAIC0xOTkzLDcgKzE5OTMsNyBAQAogCiAJaWYgKGZlcC0+bGluaykgewogCQlkdXBsZXggPSAwOwotCQlpZiAoZmVwLT5waHlfc3RhdHVzIAorCQlpZiAoZmVwLT5waHlfc3RhdHVzCiAJCSAgICAmIChQSFlfU1RBVF8xMDBGRFggfCBQSFlfU1RBVF8xMEZEWCkpCiAJCQlkdXBsZXggPSAxOwogCQlmZWNfcmVzdGFydChkZXYsIGR1cGxleCk7CkBAIC0yMDcwLDcgKzIwNzAsNyBAQAogCQlwcmludGsoIiAtLSAlc1xuIiwgcGh5X2luZm9baV0tPm5hbWUpOwogCWVsc2UKIAkJcHJpbnRrKCIgLS0gdW5rbm93biBQSFkhXG4iKTsKLSAgICAgIAorCiAJZmVwLT5waHkgPSBwaHlfaW5mb1tpXTsKIAlmZXAtPnBoeV9pZF9kb25lID0gMTsKIH0KQEAgLTIwOTAsNyArMjA5MCw3IEBACiAKIAlpZiAoZmVwLT5waHlfYWRkciA8IDMyKSB7CiAJCWlmICgocGh5dHlwZSA9IChtaWlfcmVnICYgMHhmZmZmKSkgIT0gMHhmZmZmICYmIHBoeXR5cGUgIT0gMCkgewotCQkJCisKIAkJCS8qIEdvdCBmaXJzdCBwYXJ0IG9mIElELCBub3cgZ2V0IHJlbWFpbmRlci4KIAkJCSovCiAJCQlmZXAtPnBoeV9pZCA9IHBoeXR5cGUgPDwgMTY7CkBAIC0yMjI3LDggKzIyMjcsNiBAQAogCWVwID0gZmVwLT5od3A7CiAKIAlpZiAoZGV2LT5mbGFncyZJRkZfUFJPTUlTQykgewotCQkvKiBMb2cgYW55IG5ldCB0YXBzLiAqLwotCQlwcmludGsoIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQllcC0+ZmVjX3JfY250cmwgfD0gMHgwMDA4OwogCX0gZWxzZSB7CiAKQEAgLTIyNDUsNyArMjI0Myw3IEBACiAJCQkqLwogCQkJZXAtPmZlY19oYXNoX3RhYmxlX2hpZ2ggPSAwOwogCQkJZXAtPmZlY19oYXNoX3RhYmxlX2xvdyA9IDA7Ci0gICAgICAgICAgICAKKwogCQkJZG1pID0gZGV2LT5tY19saXN0OwogCiAJCQlmb3IgKGogPSAwOyBqIDwgZGV2LT5tY19jb3VudDsgaisrLCBkbWkgPSBkbWktPm5leHQpCkBAIC0yMjU0LDcgKzIyNTIsNyBAQAogCQkJCSovCiAJCQkJaWYgKCEoZG1pLT5kbWlfYWRkclswXSAmIDEpKQogCQkJCQljb250aW51ZTsKLQkJCQorCiAJCQkJLyogY2FsY3VsYXRlIGNyYzMyIHZhbHVlIG9mIG1hYyBhZGRyZXNzCiAJCQkJKi8KIAkJCQljcmMgPSAweGZmZmZmZmZmOwpAQCAtMjI3Myw3ICsyMjcxLDcgQEAKIAkJCQkgICB3aGljaCBwb2ludCB0byBzcGVjaWZpYyBiaXQgaW4gaGUgaGFzaCByZWdpc3RlcnMKIAkJCQkqLwogCQkJCWhhc2ggPSAoY3JjID4+ICgzMiAtIEhBU0hfQklUUykpICYgMHgzZjsKLQkJCQorCiAJCQkJaWYgKGhhc2ggPiAzMSkKIAkJCQkJZXAtPmZlY19oYXNoX3RhYmxlX2hpZ2ggfD0gMSA8PCAoaGFzaCAtIDMyKTsKIAkJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMKaW5kZXggMjgyYjE0NS4uMjJhYzJkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21haW4uYwpAQCAtMTAzNCwyMCArMTAzNCwyMCBAQAogCWZlcC0+bXNnX2VuYWJsZSA9IHZhbHVlOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGZlY19ldGh0b29sX29wcyA9IHsKLQkuZ2V0X2RydmluZm8gPSBmZWNfZ2V0X2RydmluZm8sCi0JLmdldF9yZWdzX2xlbiA9IGZlY19nZXRfcmVnc19sZW4sCi0JLmdldF9zZXR0aW5ncyA9IGZlY19nZXRfc2V0dGluZ3MsCi0JLnNldF9zZXR0aW5ncyA9IGZlY19zZXRfc2V0dGluZ3MsCi0JLm53YXlfcmVzZXQgPSBmZWNfbndheV9yZXNldCwKLQkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAotCS5nZXRfbXNnbGV2ZWwgPSBmZWNfZ2V0X21zZ2xldmVsLAotCS5zZXRfbXNnbGV2ZWwgPSBmZWNfc2V0X21zZ2xldmVsLAotCS5nZXRfdHhfY3N1bSA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCi0JLnNldF90eF9jc3VtID0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwJLyogbG9jYWwhICovCi0JLmdldF9zZyA9IGV0aHRvb2xfb3BfZ2V0X3NnLAotCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKLQkuZ2V0X3JlZ3MgPSBmZWNfZ2V0X3JlZ3MsCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZlY19ldGh0b29sX29wcyA9IHsKKwkuZ2V0X2RydmluZm8JPSBmZWNfZ2V0X2RydmluZm8sCisJLmdldF9yZWdzX2xlbgk9IGZlY19nZXRfcmVnc19sZW4sCisJLmdldF9zZXR0aW5ncwk9IGZlY19nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwk9IGZlY19zZXRfc2V0dGluZ3MsCisJLm53YXlfcmVzZXQJPSBmZWNfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsJPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbXNnbGV2ZWwJPSBmZWNfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJPSBmZWNfc2V0X21zZ2xldmVsLAorCS5nZXRfdHhfY3N1bQk9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtCT0gZXRodG9vbF9vcF9zZXRfdHhfY3N1bSwJLyogbG9jYWwhICovCisJLmdldF9zZwkJPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfcmVncwk9IGZlY19nZXRfcmVncywKIH07CiAKIHN0YXRpYyBpbnQgZmVjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mb3JjZWRldGguYyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCmluZGV4IDExYjhmMWIuLmI4ZGY1Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jCkBAIC0xMDksNiArMTA5LDcgQEAKICAqCTAuNTQ6IDIxIE1hciAyMDA2OiBGaXggc3BpbiBsb2NrcyBmb3IgbXVsdGkgaXJxcyBhbmQgY2xlYW51cC4KICAqCTAuNTU6IDIyIE1hciAyMDA2OiBBZGQgZmxvdyBjb250cm9sIChwYXVzZSBmcmFtZSkuCiAgKgkwLjU2OiAyMiBNYXIgMjAwNjogQWRkaXRpb25hbCBldGh0b29sIGNvbmZpZyBhbmQgbW9kdWxlcGFyYW0gc3VwcG9ydC4KKyAqCTAuNTc6IDE0IE1heSAyMDA2OiBNYWMgYWRkcmVzcyBzZXQgaW4gcHJvYmUvcmVtb3ZlIGFuZCBvcmRlciBjb3JyZWN0aW9ucy4KICAqCiAgKiBLbm93biBidWdzOgogICogV2Ugc3VzcGVjdCB0aGF0IG9uIHNvbWUgaGFyZHdhcmUgbm8gVFggZG9uZSBpbnRlcnJ1cHRzIGFyZSBnZW5lcmF0ZWQuCkBAIC0xMjAsNyArMTIxLDEyIEBACiAgKiBERVZfTkVFRF9USU1FUklSUSB3aWxsIG5vdCBoYXJtIHlvdSBvbiBzYW5lIGhhcmR3YXJlLCBvbmx5IGdlbmVyYXRpbmcgYSBmZXcKICAqIHN1cGVyZmx1b3VzIHRpbWVyIGludGVycnVwdHMgZnJvbSB0aGUgbmljLgogICovCi0jZGVmaW5lIEZPUkNFREVUSF9WRVJTSU9OCQkiMC41NiIKKyNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKKyNkZWZpbmUgRFJJVkVSTkFQSSAiLU5BUEkiCisjZWxzZQorI2RlZmluZSBEUklWRVJOQVBJCisjZW5kaWYKKyNkZWZpbmUgRk9SQ0VERVRIX1ZFUlNJT04JCSIwLjU3IgogI2RlZmluZSBEUlZfTkFNRQkJCSJmb3JjZWRldGgiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI2Miw3ICsyNjgsOCBAQAogCU52UmVnUmluZ1NpemVzID0gMHgxMDgsCiAjZGVmaW5lIE5WUkVHX1JJTkdTWl9UWFNISUZUIDAKICNkZWZpbmUgTlZSRUdfUklOR1NaX1JYU0hJRlQgMTYKLQlOdlJlZ1Vua25vd25UcmFuc21pdHRlclJlZyA9IDB4MTBjLAorCU52UmVnVHJhbnNtaXRQb2xsID0gMHgxMGMsCisjZGVmaW5lIE5WUkVHX1RSQU5TTUlUUE9MTF9NQUNfQUREUl9SRVYJMHgwMDAwODAwMAogCU52UmVnTGlua1NwZWVkID0gMHgxMTAsCiAjZGVmaW5lIE5WUkVHX0xJTktTUEVFRF9GT1JDRSAweDEwMDAwCiAjZGVmaW5lIE5WUkVHX0xJTktTUEVFRF8xMAkxMDAwCkBAIC0zODEsMjEgKzM4OCwyMSBAQAogCiAvKiBCaWcgZW5kaWFuOiBzaG91bGQgd29yaywgYnV0IGlzIHVudGVzdGVkICovCiBzdHJ1Y3QgcmluZ19kZXNjIHsKLQl1MzIgUGFja2V0QnVmZmVyOwotCXUzMiBGbGFnTGVuOworCV9fbGUzMiBidWY7CisJX19sZTMyIGZsYWdsZW47CiB9OwogCiBzdHJ1Y3QgcmluZ19kZXNjX2V4IHsKLQl1MzIgUGFja2V0QnVmZmVySGlnaDsKLQl1MzIgUGFja2V0QnVmZmVyTG93OwotCXUzMiBUeFZsYW47Ci0JdTMyIEZsYWdMZW47CisJX19sZTMyIGJ1ZmhpZ2g7CisJX19sZTMyIGJ1ZmxvdzsKKwlfX2xlMzIgdHh2bGFuOworCV9fbGUzMiBmbGFnbGVuOwogfTsKIAotdHlwZWRlZiB1bmlvbiBfcmluZ190eXBlIHsKK3VuaW9uIHJpbmdfdHlwZSB7CiAJc3RydWN0IHJpbmdfZGVzYyogb3JpZzsKIAlzdHJ1Y3QgcmluZ19kZXNjX2V4KiBleDsKLX0gcmluZ190eXBlOworfTsKIAogI2RlZmluZSBGTEFHX01BU0tfVjEgMHhmZmZmMDAwMAogI2RlZmluZSBGTEFHX01BU0tfVjIgMHhmZmZmYzAwMApAQCAtNTM2LDYgKzU0Myw5IEBACiAjZGVmaW5lIFBIWUlEMV9PVUlfU0hGVAk2CiAjZGVmaW5lIFBIWUlEMl9PVUlfTUFTSwkweGZjMDAKICNkZWZpbmUgUEhZSUQyX09VSV9TSEZUCTEwCisjZGVmaW5lIFBIWUlEMl9NT0RFTF9NQVNLCQkweDAzZjAKKyNkZWZpbmUgUEhZX01PREVMX01BUlZFTExfRTMwMTYJCTB4MjIwCisjZGVmaW5lIFBIWV9NQVJWRUxMX0UzMDE2X0lOSVRNQVNLCTB4MDMwMAogI2RlZmluZSBQSFlfSU5JVDEJMHgwZjAwMAogI2RlZmluZSBQSFlfSU5JVDIJMHgwZTAwCiAjZGVmaW5lIFBIWV9JTklUMwkweDAxMDAwCkBAIC02NTMsOCArNjYzLDggQEAKIH07CiAKIHN0cnVjdCByZWdpc3Rlcl90ZXN0IHsKLQl1MzIgcmVnOwotCXUzMiBtYXNrOworCV9fbGUzMiByZWc7CisJX19sZTMyIG1hc2s7CiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ2lzdGVyX3Rlc3QgbnZfcmVnaXN0ZXJzX3Rlc3RbXSA9IHsKQEAgLTY5NCw2ICs3MDQsNyBAQAogCWludCBwaHlhZGRyOwogCWludCB3b2xlbmFibGVkOwogCXVuc2lnbmVkIGludCBwaHlfb3VpOworCXVuc2lnbmVkIGludCBwaHlfbW9kZWw7CiAJdTE2IGdpZ2FiaXQ7CiAJaW50IGludHJfdGVzdDsKIApAQCAtNzA3LDEzICs3MTgsMTQgQEAKIAl1MzIgdmxhbmN0bF9iaXRzOwogCXUzMiBkcml2ZXJfZGF0YTsKIAl1MzIgcmVnaXN0ZXJfc2l6ZTsKKwlpbnQgcnhfY3N1bTsKIAogCXZvaWQgX19pb21lbSAqYmFzZTsKIAogCS8qIHJ4IHNwZWNpZmljIGZpZWxkcy4KIAkgKiBMb2NraW5nOiBXaXRoaW4gaXJxIGhhbmRlciBvciBkaXNhYmxlX2lycStzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkgKi8KLQlyaW5nX3R5cGUgcnhfcmluZzsKKwl1bmlvbiByaW5nX3R5cGUgcnhfcmluZzsKIAl1bnNpZ25lZCBpbnQgY3VyX3J4LCByZWZpbGxfcng7CiAJc3RydWN0IHNrX2J1ZmYgKipyeF9za2J1ZmY7CiAJZG1hX2FkZHJfdCAqcnhfZG1hOwpAQCAtNzMzLDcgKzc0NSw3IEBACiAJLyoKIAkgKiB0eCBzcGVjaWZpYyBmaWVsZHMuCiAJICovCi0JcmluZ190eXBlIHR4X3Jpbmc7CisJdW5pb24gcmluZ190eXBlIHR4X3Jpbmc7CiAJdW5zaWduZWQgaW50IG5leHRfdHgsIG5pY190eDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqKnR4X3NrYnVmZjsKIAlkbWFfYWRkcl90ICp0eF9kbWE7CkBAIC04MjYsMTMgKzgzOCwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHUzMiBudl9kZXNjcl9nZXRsZW5ndGgoc3RydWN0IHJpbmdfZGVzYyAqcHJkLCB1MzIgdikKIHsKLQlyZXR1cm4gbGUzMl90b19jcHUocHJkLT5GbGFnTGVuKQorCXJldHVybiBsZTMyX3RvX2NwdShwcmQtPmZsYWdsZW4pCiAJCSYgKCh2ID09IERFU0NfVkVSXzEpID8gTEVOX01BU0tfVjEgOiBMRU5fTUFTS19WMik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdTMyIG52X2Rlc2NyX2dldGxlbmd0aF9leChzdHJ1Y3QgcmluZ19kZXNjX2V4ICpwcmQsIHUzMiB2KQogewotCXJldHVybiBsZTMyX3RvX2NwdShwcmQtPkZsYWdMZW4pICYgTEVOX01BU0tfVjI7CisJcmV0dXJuIGxlMzJfdG9fY3B1KHByZC0+ZmxhZ2xlbikgJiBMRU5fTUFTS19WMjsKIH0KIAogc3RhdGljIGludCByZWdfZGVsYXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG9mZnNldCwgdTMyIG1hc2ssIHUzMiB0YXJnZXQsCkBAIC04ODUsNyArODk3LDcgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBnZXRfbnZwcml2KGRldik7CiAKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKLQkJaWYobnAtPnJ4X3Jpbmcub3JpZykKKwkJaWYgKG5wLT5yeF9yaW5nLm9yaWcpCiAJCQlwY2lfZnJlZV9jb25zaXN0ZW50KG5wLT5wY2lfZGV2LCBzaXplb2Yoc3RydWN0IHJpbmdfZGVzYykgKiAobnAtPnJ4X3Jpbmdfc2l6ZSArIG5wLT50eF9yaW5nX3NpemUpLAogCQkJCQkgICAgbnAtPnJ4X3Jpbmcub3JpZywgbnAtPnJpbmdfYWRkcik7CiAJfSBlbHNlIHsKQEAgLTEwMjAsMTQgKzEwMzIsMTMgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IHBoeV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBwaHlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGJtY3Jfc2V0dXApCiB7CiAJc3RydWN0IGZlX3ByaXYgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbWlpY29udHJvbDsKIAl1bnNpZ25lZCBpbnQgdHJpZXMgPSAwOwogCi0JbWlpY29udHJvbCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOwotCW1paWNvbnRyb2wgfD0gQk1DUl9SRVNFVDsKKwltaWljb250cm9sID0gQk1DUl9SRVNFVCB8IGJtY3Jfc2V0dXA7CiAJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgbWlpY29udHJvbCkpIHsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTEwNTIsNiArMTA2MywxNiBAQAogCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CiAJdTMyIHBoeWludGVyZmFjZSwgcGh5X3Jlc2VydmVkLCBtaWlfc3RhdHVzLCBtaWlfY29udHJvbCwgbWlpX2NvbnRyb2xfMTAwMCxyZWc7CiAKKwkvKiBwaHkgZXJyYXRhIGZvciBFMzAxNiBwaHkgKi8KKwlpZiAobnAtPnBoeV9tb2RlbCA9PSBQSFlfTU9ERUxfTUFSVkVMTF9FMzAxNikgeworCQlyZWcgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX05DT05GSUcsIE1JSV9SRUFEKTsKKwkJcmVnICY9IH5QSFlfTUFSVkVMTF9FMzAxNl9JTklUTUFTSzsKKwkJaWYgKG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfTkNPTkZJRywgcmVnKSkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHBoeSB3cml0ZSB0byBlcnJhdGEgcmVnIGZhaWxlZC5cbiIsIHBjaV9uYW1lKG5wLT5wY2lfZGV2KSk7CisJCQlyZXR1cm4gUEhZX0VSUk9SOworCQl9CisJfQorCiAJLyogc2V0IGFkdmVydGlzZSByZWdpc3RlciAqLwogCXJlZyA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQURWRVJUSVNFLCBNSUlfUkVBRCk7CiAJcmVnIHw9IChBRFZFUlRJU0VfMTBIQUxGfEFEVkVSVElTRV8xMEZVTEx8QURWRVJUSVNFXzEwMEhBTEZ8QURWRVJUSVNFXzEwMEZVTEx8QURWRVJUSVNFX1BBVVNFX0FTWU18QURWRVJUSVNFX1BBVVNFX0NBUCk7CkBAIC0xMDgyLDggKzExMDMsMTMgQEAKIAllbHNlCiAJCW5wLT5naWdhYml0ID0gMDsKIAotCS8qIHJlc2V0IHRoZSBwaHkgKi8KLQlpZiAocGh5X3Jlc2V0KGRldikpIHsKKwltaWlfY29udHJvbCA9IG1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgTUlJX1JFQUQpOworCW1paV9jb250cm9sIHw9IEJNQ1JfQU5FTkFCTEU7CisKKwkvKiByZXNldCB0aGUgcGh5CisJICogKGNlcnRhaW4gcGh5cyBuZWVkIGJtY3IgdG8gYmUgc2V0dXAgd2l0aCByZXNldCkKKwkgKi8KKwlpZiAocGh5X3Jlc2V0KGRldiwgbWlpX2NvbnRyb2wpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLCBwY2lfbmFtZShucC0+cGNpX2RldikpOwogCQlyZXR1cm4gUEhZX0VSUk9SOwogCX0KQEAgLTExNzgsNyArMTIwNCw3IEBACiAJCQlLRVJOX0lORk8gIm52X3N0b3BfdHg6IFRyYW5zbWl0dGVyU3RhdHVzIHJlbWFpbmVkIGJ1c3kiKTsKIAogCXVkZWxheShOVl9UWFNUT1BfREVMQVkyKTsKLQl3cml0ZWwoMCwgYmFzZSArIE52UmVnVW5rbm93blRyYW5zbWl0dGVyUmVnKTsKKwl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXRQb2xsKSAmIE5WUkVHX1RSQU5TTUlUUE9MTF9NQUNfQUREUl9SRVYsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCk7CiB9CiAKIHN0YXRpYyB2b2lkIG52X3R4cnhfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEyNTgsMTQgKzEyODQsMTQgQEAKIAkJbnAtPnJ4X2RtYVtucl0gPSBwY2lfbWFwX3NpbmdsZShucC0+cGNpX2Rldiwgc2tiLT5kYXRhLAogCQkJCQlza2ItPmVuZC1za2ItPmRhdGEsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewotCQkJbnAtPnJ4X3Jpbmcub3JpZ1tucl0uUGFja2V0QnVmZmVyID0gY3B1X3RvX2xlMzIobnAtPnJ4X2RtYVtucl0pOworCQkJbnAtPnJ4X3Jpbmcub3JpZ1tucl0uYnVmID0gY3B1X3RvX2xlMzIobnAtPnJ4X2RtYVtucl0pOwogCQkJd21iKCk7Ci0JCQlucC0+cnhfcmluZy5vcmlnW25yXS5GbGFnTGVuID0gY3B1X3RvX2xlMzIobnAtPnJ4X2J1Zl9zeiB8IE5WX1JYX0FWQUlMKTsKKwkJCW5wLT5yeF9yaW5nLm9yaWdbbnJdLmZsYWdsZW4gPSBjcHVfdG9fbGUzMihucC0+cnhfYnVmX3N6IHwgTlZfUlhfQVZBSUwpOwogCQl9IGVsc2UgewotCQkJbnAtPnJ4X3JpbmcuZXhbbnJdLlBhY2tldEJ1ZmZlckhpZ2ggPSBjcHVfdG9fbGU2NChucC0+cnhfZG1hW25yXSkgPj4gMzI7Ci0JCQlucC0+cnhfcmluZy5leFtucl0uUGFja2V0QnVmZmVyTG93ID0gY3B1X3RvX2xlNjQobnAtPnJ4X2RtYVtucl0pICYgMHgwRkZGRkZGRkY7CisJCQlucC0+cnhfcmluZy5leFtucl0uYnVmaGlnaCA9IGNwdV90b19sZTY0KG5wLT5yeF9kbWFbbnJdKSA+PiAzMjsKKwkJCW5wLT5yeF9yaW5nLmV4W25yXS5idWZsb3cgPSBjcHVfdG9fbGU2NChucC0+cnhfZG1hW25yXSkgJiAweDBGRkZGRkZGRjsKIAkJCXdtYigpOwotCQkJbnAtPnJ4X3JpbmcuZXhbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMihucC0+cnhfYnVmX3N6IHwgTlZfUlgyX0FWQUlMKTsKKwkJCW5wLT5yeF9yaW5nLmV4W25yXS5mbGFnbGVuID0gY3B1X3RvX2xlMzIobnAtPnJ4X2J1Zl9zeiB8IE5WX1JYMl9BVkFJTCk7CiAJCX0KIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfYWxsb2Nfcng6IFBhY2tldCAlZCBtYXJrZWQgYXMgQXZhaWxhYmxlXG4iLAogCQkJCQlkZXYtPm5hbWUsIHJlZmlsbF9yeCk7CkBAIC0xMjc3LDYgKzEzMDMsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogSWYgcnggYnVmcyBhcmUgZXhoYXVzdGVkIGNhbGxlZCBhZnRlciA1MG1zIHRvIGF0dGVtcHQgdG8gcmVmcmVzaCAqLworI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorc3RhdGljIHZvaWQgbnZfZG9fcnhfcmVmaWxsKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CisKKwkvKiBKdXN0IHJlc2NoZWR1bGUgTkFQSSByeCBwcm9jZXNzaW5nICovCisJbmV0aWZfcnhfc2NoZWR1bGUoZGV2KTsKK30KKyNlbHNlCiBzdGF0aWMgdm9pZCBudl9kb19yeF9yZWZpbGwodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKQEAgLTEzMDUsNiArMTM0MSw3IEBACiAJCWVuYWJsZV9pcnEobnAtPm1zaV94X2VudHJ5W05WX01TSV9YX1ZFQ1RPUl9SWF0udmVjdG9yKTsKIAl9CiB9CisjZW5kaWYKIAogc3RhdGljIHZvaWQgbnZfaW5pdF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTMxNSw5ICsxMzUyLDkgQEAKIAlucC0+cmVmaWxsX3J4ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKQogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpCi0JCQlucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4gPSAwOworCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5mbGFnbGVuID0gMDsKIAkgICAgICAgIGVsc2UKLQkJCW5wLT5yeF9yaW5nLmV4W2ldLkZsYWdMZW4gPSAwOworCQkJbnAtPnJ4X3JpbmcuZXhbaV0uZmxhZ2xlbiA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIG52X2luaXRfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTEzMjgsOSArMTM2NSw5IEBACiAJbnAtPm5leHRfdHggPSBucC0+bmljX3R4ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKLQkJCW5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbiA9IDA7CisJCQlucC0+dHhfcmluZy5vcmlnW2ldLmZsYWdsZW4gPSAwOwogCSAgICAgICAgZWxzZQotCQkJbnAtPnR4X3JpbmcuZXhbaV0uRmxhZ0xlbiA9IDA7CisJCQlucC0+dHhfcmluZy5leFtpXS5mbGFnbGVuID0gMDsKIAkJbnAtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCW5wLT50eF9kbWFbaV0gPSAwOwogCX0KQEAgLTEzNzMsOSArMTQxMCw5IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPnR4X3Jpbmdfc2l6ZTsgaSsrKSB7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikKLQkJCW5wLT50eF9yaW5nLm9yaWdbaV0uRmxhZ0xlbiA9IDA7CisJCQlucC0+dHhfcmluZy5vcmlnW2ldLmZsYWdsZW4gPSAwOwogCQllbHNlCi0JCQlucC0+dHhfcmluZy5leFtpXS5GbGFnTGVuID0gMDsKKwkJCW5wLT50eF9yaW5nLmV4W2ldLmZsYWdsZW4gPSAwOwogCQlpZiAobnZfcmVsZWFzZV90eHNrYihkZXYsIGkpKQogCQkJbnAtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAl9CkBAIC0xMzg3LDkgKzE0MjQsOSBAQAogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCBucC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQkJbnAtPnJ4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuID0gMDsKKwkJCW5wLT5yeF9yaW5nLm9yaWdbaV0uZmxhZ2xlbiA9IDA7CiAJCWVsc2UKLQkJCW5wLT5yeF9yaW5nLmV4W2ldLkZsYWdMZW4gPSAwOworCQkJbnAtPnJ4X3JpbmcuZXhbaV0uZmxhZ2xlbiA9IDA7CiAJCXdtYigpOwogCQlpZiAobnAtPnJ4X3NrYnVmZltpXSkgewogCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGNpX2RldiwgbnAtPnJ4X2RtYVtpXSwKQEAgLTE0NTAsMTcgKzE0ODcsMTcgQEAKIAkJbnAtPnR4X2RtYV9sZW5bbnJdID0gYmNudDsKIAogCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKLQkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLlBhY2tldEJ1ZmZlciA9IGNwdV90b19sZTMyKG5wLT50eF9kbWFbbnJdKTsKLQkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKKwkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLmJ1ZiA9IGNwdV90b19sZTMyKG5wLT50eF9kbWFbbnJdKTsKKwkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLmZsYWdsZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKIAkJfSBlbHNlIHsKLQkJCW5wLT50eF9yaW5nLmV4W25yXS5QYWNrZXRCdWZmZXJIaWdoID0gY3B1X3RvX2xlNjQobnAtPnR4X2RtYVtucl0pID4+IDMyOwotCQkJbnAtPnR4X3JpbmcuZXhbbnJdLlBhY2tldEJ1ZmZlckxvdyA9IGNwdV90b19sZTY0KG5wLT50eF9kbWFbbnJdKSAmIDB4MEZGRkZGRkZGOwotCQkJbnAtPnR4X3JpbmcuZXhbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKKwkJCW5wLT50eF9yaW5nLmV4W25yXS5idWZoaWdoID0gY3B1X3RvX2xlNjQobnAtPnR4X2RtYVtucl0pID4+IDMyOworCQkJbnAtPnR4X3JpbmcuZXhbbnJdLmJ1ZmxvdyA9IGNwdV90b19sZTY0KG5wLT50eF9kbWFbbnJdKSAmIDB4MEZGRkZGRkZGOworCQkJbnAtPnR4X3JpbmcuZXhbbnJdLmZsYWdsZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKIAkJfQogCQl0eF9mbGFncyA9IG5wLT50eF9mbGFnczsKIAkJb2Zmc2V0ICs9IGJjbnQ7CiAJCXNpemUgLT0gYmNudDsKLQl9IHdoaWxlKHNpemUpOworCX0gd2hpbGUgKHNpemUpOwogCiAJLyogc2V0dXAgdGhlIGZyYWdtZW50cyAqLwogCWZvciAoaSA9IDA7IGkgPCBmcmFnbWVudHM7IGkrKykgewpAQCAtMTQ3NywxMiArMTUxNCwxMiBAQAogCQkJbnAtPnR4X2RtYV9sZW5bbnJdID0gYmNudDsKIAogCQkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7Ci0JCQkJbnAtPnR4X3Jpbmcub3JpZ1tucl0uUGFja2V0QnVmZmVyID0gY3B1X3RvX2xlMzIobnAtPnR4X2RtYVtucl0pOwotCQkJCW5wLT50eF9yaW5nLm9yaWdbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKKwkJCQlucC0+dHhfcmluZy5vcmlnW25yXS5idWYgPSBjcHVfdG9fbGUzMihucC0+dHhfZG1hW25yXSk7CisJCQkJbnAtPnR4X3Jpbmcub3JpZ1tucl0uZmxhZ2xlbiA9IGNwdV90b19sZTMyKChiY250LTEpIHwgdHhfZmxhZ3MpOwogCQkJfSBlbHNlIHsKLQkJCQlucC0+dHhfcmluZy5leFtucl0uUGFja2V0QnVmZmVySGlnaCA9IGNwdV90b19sZTY0KG5wLT50eF9kbWFbbnJdKSA+PiAzMjsKLQkJCQlucC0+dHhfcmluZy5leFtucl0uUGFja2V0QnVmZmVyTG93ID0gY3B1X3RvX2xlNjQobnAtPnR4X2RtYVtucl0pICYgMHgwRkZGRkZGRkY7Ci0JCQkJbnAtPnR4X3JpbmcuZXhbbnJdLkZsYWdMZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKKwkJCQlucC0+dHhfcmluZy5leFtucl0uYnVmaGlnaCA9IGNwdV90b19sZTY0KG5wLT50eF9kbWFbbnJdKSA+PiAzMjsKKwkJCQlucC0+dHhfcmluZy5leFtucl0uYnVmbG93ID0gY3B1X3RvX2xlNjQobnAtPnR4X2RtYVtucl0pICYgMHgwRkZGRkZGRkY7CisJCQkJbnAtPnR4X3JpbmcuZXhbbnJdLmZsYWdsZW4gPSBjcHVfdG9fbGUzMigoYmNudC0xKSB8IHR4X2ZsYWdzKTsKIAkJCX0KIAkJCW9mZnNldCArPSBiY250OwogCQkJc2l6ZSAtPSBiY250OwpAQCAtMTQ5MSw5ICsxNTI4LDkgQEAKIAogCS8qIHNldCBsYXN0IGZyYWdtZW50IGZsYWcgICovCiAJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7Ci0JCW5wLT50eF9yaW5nLm9yaWdbbnJdLkZsYWdMZW4gfD0gY3B1X3RvX2xlMzIodHhfZmxhZ3NfZXh0cmEpOworCQlucC0+dHhfcmluZy5vcmlnW25yXS5mbGFnbGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzX2V4dHJhKTsKIAl9IGVsc2UgewotCQlucC0+dHhfcmluZy5leFtucl0uRmxhZ0xlbiB8PSBjcHVfdG9fbGUzMih0eF9mbGFnc19leHRyYSk7CisJCW5wLT50eF9yaW5nLmV4W25yXS5mbGFnbGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzX2V4dHJhKTsKIAl9CiAKIAlucC0+dHhfc2tidWZmW25yXSA9IHNrYjsKQEAgLTE1MTIsMTAgKzE1NDksMTAgQEAKIAogCS8qIHNldCB0eCBmbGFncyAqLwogCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewotCQlucC0+dHhfcmluZy5vcmlnW3N0YXJ0X25yXS5GbGFnTGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCQlucC0+dHhfcmluZy5vcmlnW3N0YXJ0X25yXS5mbGFnbGVuIHw9IGNwdV90b19sZTMyKHR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOwogCX0gZWxzZSB7Ci0JCW5wLT50eF9yaW5nLmV4W3N0YXJ0X25yXS5UeFZsYW4gPSBjcHVfdG9fbGUzMih0eF9mbGFnc192bGFuKTsKLQkJbnAtPnR4X3JpbmcuZXhbc3RhcnRfbnJdLkZsYWdMZW4gfD0gY3B1X3RvX2xlMzIodHhfZmxhZ3MgfCB0eF9mbGFnc19leHRyYSk7CisJCW5wLT50eF9yaW5nLmV4W3N0YXJ0X25yXS50eHZsYW4gPSBjcHVfdG9fbGUzMih0eF9mbGFnc192bGFuKTsKKwkJbnAtPnR4X3JpbmcuZXhbc3RhcnRfbnJdLmZsYWdsZW4gfD0gY3B1X3RvX2xlMzIodHhfZmxhZ3MgfCB0eF9mbGFnc19leHRyYSk7CiAJfQogCiAJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfc3RhcnRfeG1pdDogcGFja2V0ICVkIChlbnRyaWVzICVkKSBxdWV1ZWQgZm9yIHRyYW5zbWlzc2lvbi4gdHhfZmxhZ3NfZXh0cmE6ICV4XG4iLApAQCAtMTU0Nyw3ICsxNTg0LDcgQEAKIHN0YXRpYyB2b2lkIG52X3R4X2RvbmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBGbGFnczsKKwl1MzIgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMTU1NSwyMiArMTU5MiwyMiBAQAogCQlpID0gbnAtPm5pY190eCAlIG5wLT50eF9yaW5nX3NpemU7CiAKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKQotCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLkZsYWdMZW4pOworCQkJZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5vcmlnW2ldLmZsYWdsZW4pOwogCQllbHNlCi0JCQlGbGFncyA9IGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2ldLkZsYWdMZW4pOworCQkJZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5mbGFnbGVuKTsKIAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl90eF9kb25lOiBsb29raW5nIGF0IHBhY2tldCAlZCwgRmxhZ3MgMHgleC5cbiIsCi0JCQkJCWRldi0+bmFtZSwgbnAtPm5pY190eCwgRmxhZ3MpOwotCQlpZiAoRmxhZ3MgJiBOVl9UWF9WQUxJRCkKKwkJZHByaW50ayhLRVJOX0RFQlVHICIlczogbnZfdHhfZG9uZTogbG9va2luZyBhdCBwYWNrZXQgJWQsIGZsYWdzIDB4JXguXG4iLAorCQkJCQlkZXYtPm5hbWUsIG5wLT5uaWNfdHgsIGZsYWdzKTsKKwkJaWYgKGZsYWdzICYgTlZfVFhfVkFMSUQpCiAJCQlicmVhazsKIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKSB7Ci0JCQlpZiAoRmxhZ3MgJiBOVl9UWF9MQVNUUEFDS0VUKSB7CisJCQlpZiAoZmxhZ3MgJiBOVl9UWF9MQVNUUEFDS0VUKSB7CiAJCQkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKLQkJCQlpZiAoRmxhZ3MgJiAoTlZfVFhfUkVUUllFUlJPUnxOVl9UWF9DQVJSSUVSTE9TVHxOVl9UWF9MQVRFQ09MTElTSU9OfAorCQkJCWlmIChmbGFncyAmIChOVl9UWF9SRVRSWUVSUk9SfE5WX1RYX0NBUlJJRVJMT1NUfE5WX1RYX0xBVEVDT0xMSVNJT058CiAJCQkJCSAgICAgTlZfVFhfVU5ERVJGTE9XfE5WX1RYX0VSUk9SKSkgewotCQkJCQlpZiAoRmxhZ3MgJiBOVl9UWF9VTkRFUkZMT1cpCisJCQkJCWlmIChmbGFncyAmIE5WX1RYX1VOREVSRkxPVykKIAkJCQkJCW5wLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwotCQkJCQlpZiAoRmxhZ3MgJiBOVl9UWF9DQVJSSUVSTE9TVCkKKwkJCQkJaWYgKGZsYWdzICYgTlZfVFhfQ0FSUklFUkxPU1QpCiAJCQkJCQlucC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCX0gZWxzZSB7CkBAIC0xNTc5LDEzICsxNjE2LDEzIEBACiAJCQkJfQogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKEZsYWdzICYgTlZfVFgyX0xBU1RQQUNLRVQpIHsKKwkJCWlmIChmbGFncyAmIE5WX1RYMl9MQVNUUEFDS0VUKSB7CiAJCQkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKLQkJCQlpZiAoRmxhZ3MgJiAoTlZfVFgyX1JFVFJZRVJST1J8TlZfVFgyX0NBUlJJRVJMT1NUfE5WX1RYMl9MQVRFQ09MTElTSU9OfAorCQkJCWlmIChmbGFncyAmIChOVl9UWDJfUkVUUllFUlJPUnxOVl9UWDJfQ0FSUklFUkxPU1R8TlZfVFgyX0xBVEVDT0xMSVNJT058CiAJCQkJCSAgICAgTlZfVFgyX1VOREVSRkxPV3xOVl9UWDJfRVJST1IpKSB7Ci0JCQkJCWlmIChGbGFncyAmIE5WX1RYMl9VTkRFUkZMT1cpCisJCQkJCWlmIChmbGFncyAmIE5WX1RYMl9VTkRFUkZMT1cpCiAJCQkJCQlucC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKLQkJCQkJaWYgKEZsYWdzICYgTlZfVFgyX0NBUlJJRVJMT1NUKQorCQkJCQlpZiAoZmxhZ3MgJiBOVl9UWDJfQ0FSUklFUkxPU1QpCiAJCQkJCQlucC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKIAkJCQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJCX0gZWxzZSB7CkBAIC0xNjM4LDI5ICsxNjc1LDI5IEBACiAJCQlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKIAkJCQlwcmludGsoS0VSTl9JTkZPICIlMDN4OiAlMDh4ICUwOHggLy8gJTA4eCAlMDh4IC8vICUwOHggJTA4eCAvLyAlMDh4ICUwOHhcbiIsCiAJCQkJICAgICAgIGksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uUGFja2V0QnVmZmVyKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpXS5GbGFnTGVuKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzFdLlBhY2tldEJ1ZmZlciksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsxXS5GbGFnTGVuKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzJdLlBhY2tldEJ1ZmZlciksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsyXS5GbGFnTGVuKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzNdLlBhY2tldEJ1ZmZlciksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSszXS5GbGFnTGVuKSk7CisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaV0uYnVmKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpXS5mbGFnbGVuKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzFdLmJ1ZiksCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsxXS5mbGFnbGVuKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzJdLmJ1ZiksCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSsyXS5mbGFnbGVuKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3Jpbmcub3JpZ1tpKzNdLmJ1ZiksCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLm9yaWdbaSszXS5mbGFnbGVuKSk7CiAJCQl9IGVsc2UgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiUwM3g6ICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4IC8vICUwOHggJTA4eCAlMDh4XG4iLAogCQkJCSAgICAgICBpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5QYWNrZXRCdWZmZXJIaWdoKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uUGFja2V0QnVmZmVyTG93KSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uRmxhZ0xlbiksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uUGFja2V0QnVmZmVySGlnaCksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uUGFja2V0QnVmZmVyTG93KSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsxXS5GbGFnTGVuKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5QYWNrZXRCdWZmZXJIaWdoKSwKLQkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5QYWNrZXRCdWZmZXJMb3cpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzJdLkZsYWdMZW4pLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLlBhY2tldEJ1ZmZlckhpZ2gpLAotCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLlBhY2tldEJ1ZmZlckxvdyksCi0JCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krM10uRmxhZ0xlbikpOworCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpXS5idWZoaWdoKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uYnVmbG93KSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaV0uZmxhZ2xlbiksCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uYnVmaGlnaCksCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krMV0uYnVmbG93KSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsxXS5mbGFnbGVuKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5idWZoaWdoKSwKKwkJCQkgICAgICAgbGUzMl90b19jcHUobnAtPnR4X3JpbmcuZXhbaSsyXS5idWZsb3cpLAorCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzJdLmZsYWdsZW4pLAorCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLmJ1ZmhpZ2gpLAorCQkJCSAgICAgICBsZTMyX3RvX2NwdShucC0+dHhfcmluZy5leFtpKzNdLmJ1ZmxvdyksCisJCQkJICAgICAgIGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nLmV4W2krM10uZmxhZ2xlbikpOwogCQkJfQogCQl9CiAJfQpAQCAtMTY5Nyw3ICsxNzM0LDcgQEAKIAlpbnQgcHJvdG9sZW47CS8qIGxlbmd0aCBhcyBzdG9yZWQgaW4gdGhlIHByb3RvIGZpZWxkICovCiAKIAkvKiAxKSBjYWxjdWxhdGUgbGVuIGFjY29yZGluZyB0byBoZWFkZXIgKi8KLQlpZiAoICgoc3RydWN0IHZsYW5fZXRoaGRyICopcGFja2V0KS0+aF92bGFuX3Byb3RvID09IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJaWYgKCAoKHN0cnVjdCB2bGFuX2V0aGhkciAqKXBhY2tldCktPmhfdmxhbl9wcm90byA9PSBodG9ucyhFVEhfUF84MDIxUSkpIHsKIAkJcHJvdG9sZW4gPSBudG9ocyggKChzdHJ1Y3Qgdmxhbl9ldGhoZHIgKilwYWNrZXQpLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvICk7CiAJCWhkcmxlbiA9IFZMQU5fSExFTjsKIAl9IGVsc2UgewpAQCAtMTc0MCwxMyArMTc3NywxNCBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbnZfcnhfcHJvY2VzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBudl9yeF9wcm9jZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBGbGFnczsKKwl1MzIgZmxhZ3M7CiAJdTMyIHZsYW5mbGFncyA9IDA7CisJaW50IGNvdW50OwogCi0JZm9yICg7OykgeworIAlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsaW1pdDsgKytjb3VudCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQlpbnQgbGVuOwogCQlpbnQgaTsKQEAgLTE3NTUsMTggKzE3OTMsMTggQEAKIAogCQlpID0gbnAtPmN1cl9yeCAlIG5wLT5yeF9yaW5nX3NpemU7CiAJCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSB8fCBucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMikgewotCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5vcmlnW2ldLkZsYWdMZW4pOworCQkJZmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5vcmlnW2ldLmZsYWdsZW4pOwogCQkJbGVuID0gbnZfZGVzY3JfZ2V0bGVuZ3RoKCZucC0+cnhfcmluZy5vcmlnW2ldLCBucC0+ZGVzY192ZXIpOwogCQl9IGVsc2UgewotCQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5leFtpXS5GbGFnTGVuKTsKKwkJCWZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbaV0uZmxhZ2xlbik7CiAJCQlsZW4gPSBudl9kZXNjcl9nZXRsZW5ndGhfZXgoJm5wLT5yeF9yaW5nLmV4W2ldLCBucC0+ZGVzY192ZXIpOwotCQkJdmxhbmZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbaV0uUGFja2V0QnVmZmVyTG93KTsKKwkJCXZsYW5mbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5yeF9yaW5nLmV4W2ldLmJ1Zmxvdyk7CiAJCX0KIAotCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9wcm9jZXNzOiBsb29raW5nIGF0IHBhY2tldCAlZCwgRmxhZ3MgMHgleC5cbiIsCi0JCQkJCWRldi0+bmFtZSwgbnAtPmN1cl9yeCwgRmxhZ3MpOworCQlkcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBudl9yeF9wcm9jZXNzOiBsb29raW5nIGF0IHBhY2tldCAlZCwgZmxhZ3MgMHgleC5cbiIsCisJCQkJCWRldi0+bmFtZSwgbnAtPmN1cl9yeCwgZmxhZ3MpOwogCi0JCWlmIChGbGFncyAmIE5WX1JYX0FWQUlMKQorCQlpZiAoZmxhZ3MgJiBOVl9SWF9BVkFJTCkKIAkJCWJyZWFrOwkvKiBzdGlsbCBvd25lZCBieSBoYXJkd2FyZSwgKi8KIAogCQkvKgpAQCAtMTc4MCw3ICsxODE4LDcgQEAKIAogCQl7CiAJCQlpbnQgajsKLQkJCWRwcmludGsoS0VSTl9ERUJVRyAiRHVtcGluZyBwYWNrZXQgKGZsYWdzIDB4JXgpLiIsRmxhZ3MpOworCQkJZHByaW50ayhLRVJOX0RFQlVHICJEdW1waW5nIHBhY2tldCAoZmxhZ3MgMHgleCkuIixmbGFncyk7CiAJCQlmb3IgKGo9MDsgajw2NDsgaisrKSB7CiAJCQkJaWYgKChqJTE2KSA9PSAwKQogCQkJCQlkcHJpbnRrKCJcbiUwM3g6Iiwgaik7CkBAIC0xNzkwLDMwICsxODI4LDMwIEBACiAJCX0KIAkJLyogbG9vayBhdCB3aGF0IHdlIGFjdHVhbGx5IGdvdDogKi8KIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xKSB7Ci0JCQlpZiAoIShGbGFncyAmIE5WX1JYX0RFU0NSSVBUT1JWQUxJRCkpCisJCQlpZiAoIShmbGFncyAmIE5WX1JYX0RFU0NSSVBUT1JWQUxJRCkpCiAJCQkJZ290byBuZXh0X3BrdDsKIAotCQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1IpIHsKLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9NSVNTRURGUkFNRSkgeworCQkJaWYgKGZsYWdzICYgTlZfUlhfRVJST1IpIHsKKwkJCQlpZiAoZmxhZ3MgJiBOVl9SWF9NSVNTRURGUkFNRSkgewogCQkJCQlucC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycysrOwogCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWdvdG8gbmV4dF9wa3Q7CiAJCQkJfQotCQkJCWlmIChGbGFncyAmIChOVl9SWF9FUlJPUjF8TlZfUlhfRVJST1IyfE5WX1JYX0VSUk9SMykpIHsKKwkJCQlpZiAoZmxhZ3MgJiAoTlZfUlhfRVJST1IxfE5WX1JYX0VSUk9SMnxOVl9SWF9FUlJPUjMpKSB7CiAJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJZ290byBuZXh0X3BrdDsKIAkJCQl9Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlhfQ1JDRVJSKSB7CisJCQkJaWYgKGZsYWdzICYgTlZfUlhfQ1JDRVJSKSB7CiAJCQkJCW5wLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CiAJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCQkJZ290byBuZXh0X3BrdDsKIAkJCQl9Ci0JCQkJaWYgKEZsYWdzICYgTlZfUlhfT1ZFUkZMT1cpIHsKKwkJCQlpZiAoZmxhZ3MgJiBOVl9SWF9PVkVSRkxPVykgewogCQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCX0KLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9FUlJPUjQpIHsKKwkJCQlpZiAoZmxhZ3MgJiBOVl9SWF9FUlJPUjQpIHsKIAkJCQkJbGVuID0gbnZfZ2V0bGVuKGRldiwgbnAtPnJ4X3NrYnVmZltpXS0+ZGF0YSwgbGVuKTsKIAkJCQkJaWYgKGxlbiA8IDApIHsKIAkJCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTE4MjEsMzIgKzE4NTksMzIgQEAKIAkJCQkJfQogCQkJCX0KIAkJCQkvKiBmcmFtaW5nIGVycm9ycyBhcmUgc29mdCBlcnJvcnMuICovCi0JCQkJaWYgKEZsYWdzICYgTlZfUlhfRlJBTUlOR0VSUikgewotCQkJCQlpZiAoRmxhZ3MgJiBOVl9SWF9TVUJTVFJBQ1QxKSB7CisJCQkJaWYgKGZsYWdzICYgTlZfUlhfRlJBTUlOR0VSUikgeworCQkJCQlpZiAoZmxhZ3MgJiBOVl9SWF9TVUJTVFJBQ1QxKSB7CiAJCQkJCQlsZW4tLTsKIAkJCQkJfQogCQkJCX0KIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmICghKEZsYWdzICYgTlZfUlgyX0RFU0NSSVBUT1JWQUxJRCkpCisJCQlpZiAoIShmbGFncyAmIE5WX1JYMl9ERVNDUklQVE9SVkFMSUQpKQogCQkJCWdvdG8gbmV4dF9wa3Q7CiAKLQkJCWlmIChGbGFncyAmIE5WX1JYMl9FUlJPUikgewotCQkJCWlmIChGbGFncyAmIChOVl9SWDJfRVJST1IxfE5WX1JYMl9FUlJPUjJ8TlZfUlgyX0VSUk9SMykpIHsKKwkJCWlmIChmbGFncyAmIE5WX1JYMl9FUlJPUikgeworCQkJCWlmIChmbGFncyAmIChOVl9SWDJfRVJST1IxfE5WX1JYMl9FUlJPUjJ8TlZfUlgyX0VSUk9SMykpIHsKIAkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCX0KLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfQ1JDRVJSKSB7CisJCQkJaWYgKGZsYWdzICYgTlZfUlgyX0NSQ0VSUikgewogCQkJCQlucC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCQkJCQlucC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJCWdvdG8gbmV4dF9wa3Q7CiAJCQkJfQotCQkJCWlmIChGbGFncyAmIE5WX1JYMl9PVkVSRkxPVykgeworCQkJCWlmIChmbGFncyAmIE5WX1JYMl9PVkVSRkxPVykgewogCQkJCQlucC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKIAkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJCQlnb3RvIG5leHRfcGt0OwogCQkJCX0KLQkJCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1I0KSB7CisJCQkJaWYgKGZsYWdzICYgTlZfUlgyX0VSUk9SNCkgewogCQkJCQlsZW4gPSBudl9nZXRsZW4oZGV2LCBucC0+cnhfc2tidWZmW2ldLT5kYXRhLCBsZW4pOwogCQkJCQlpZiAobGVuIDwgMCkgewogCQkJCQkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtMTg1NCwxNyArMTg5MiwxNyBAQAogCQkJCQl9CiAJCQkJfQogCQkJCS8qIGZyYW1pbmcgZXJyb3JzIGFyZSBzb2Z0IGVycm9ycyAqLwotCQkJCWlmIChGbGFncyAmIE5WX1JYMl9GUkFNSU5HRVJSKSB7Ci0JCQkJCWlmIChGbGFncyAmIE5WX1JYMl9TVUJTVFJBQ1QxKSB7CisJCQkJaWYgKGZsYWdzICYgTlZfUlgyX0ZSQU1JTkdFUlIpIHsKKwkJCQkJaWYgKGZsYWdzICYgTlZfUlgyX1NVQlNUUkFDVDEpIHsKIAkJCQkJCWxlbi0tOwogCQkJCQl9CiAJCQkJfQogCQkJfQotCQkJaWYgKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spIHsKLQkJCQlGbGFncyAmPSBOVl9SWDJfQ0hFQ0tTVU1NQVNLOwotCQkJCWlmIChGbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzEgfHwKLQkJCQkgICAgRmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0syIHx8Ci0JCQkJICAgIEZsYWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMykgeworCQkJaWYgKG5wLT5yeF9jc3VtKSB7CisJCQkJZmxhZ3MgJj0gTlZfUlgyX0NIRUNLU1VNTUFTSzsKKwkJCQlpZiAoZmxhZ3MgPT0gTlZfUlgyX0NIRUNLU1VNT0sxIHx8CisJCQkJICAgIGZsYWdzID09IE5WX1JYMl9DSEVDS1NVTU9LMiB8fAorCQkJCSAgICBmbGFncyA9PSBOVl9SWDJfQ0hFQ0tTVU1PSzMpIHsKIAkJCQkJZHByaW50ayhLRVJOX0RFQlVHICIlczogaHcgY2hlY2tzdW0gaGl0IS5cbiIsIGRldi0+bmFtZSk7CiAJCQkJCW5wLT5yeF9za2J1ZmZbaV0tPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwogCQkJCX0gZWxzZSB7CkBAIC0xODgwLDE3ICsxOTE4LDI3IEBACiAJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X3J4X3Byb2Nlc3M6IHBhY2tldCAlZCB3aXRoICVkIGJ5dGVzLCBwcm90byAlZCBhY2NlcHRlZC5cbiIsCiAJCQkJCWRldi0+bmFtZSwgbnAtPmN1cl9yeCwgbGVuLCBza2ItPnByb3RvY29sKTsKLQkJaWYgKG5wLT52bGFuZ3JwICYmICh2bGFuZmxhZ3MgJiBOVl9SWDNfVkxBTl9UQUdfUFJFU0VOVCkpIHsKLQkJCXZsYW5faHdhY2NlbF9yeChza2IsIG5wLT52bGFuZ3JwLCB2bGFuZmxhZ3MgJiBOVl9SWDNfVkxBTl9UQUdfTUFTSyk7Ci0JCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJCWlmIChucC0+dmxhbmdycCAmJiAodmxhbmZsYWdzICYgTlZfUlgzX1ZMQU5fVEFHX1BSRVNFTlQpKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgbnAtPnZsYW5ncnAsCisJCQkJCQkgdmxhbmZsYWdzICYgTlZfUlgzX1ZMQU5fVEFHX01BU0spOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworI2Vsc2UKKwkJaWYgKG5wLT52bGFuZ3JwICYmICh2bGFuZmxhZ3MgJiBOVl9SWDNfVkxBTl9UQUdfUFJFU0VOVCkpCisJCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBucC0+dmxhbmdycCwKKwkJCQkJdmxhbmZsYWdzICYgTlZfUlgzX1ZMQU5fVEFHX01BU0spOworCQllbHNlCiAJCQluZXRpZl9yeChza2IpOwotCQl9CisjZW5kaWYKIAkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJbnAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAkJbnAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIG5leHRfcGt0OgogCQlucC0+Y3VyX3J4Kys7CiAJfQorCisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgdm9pZCBzZXRfYnVmc2l6ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTk5MCw3ICsyMDM4LDcgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzb2NrYWRkciAqbWFjYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIqKWFkZHI7CiAKLQlpZighaXNfdmFsaWRfZXRoZXJfYWRkcihtYWNhZGRyLT5zYV9kYXRhKSkKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAogCS8qIHN5bmNocm9uaXplZCBhZ2FpbnN0IG9wZW4gOiBydG5sX2xvY2soKSBoZWxkIGJ5IGNhbGxlciAqLwpAQCAtMjAzMiw3ICsyMDgwLDYgQEAKIAltZW1zZXQobWFzaywgMCwgc2l6ZW9mKG1hc2spKTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lKTsKIAkJcGZmIHw9IE5WUkVHX1BGRl9QUk9NSVNDOwogCX0gZWxzZSB7CiAJCXBmZiB8PSBOVlJFR19QRkZfTVlBRERSOwpAQCAtMjI4MywyMCArMjMzMCwyMCBAQAogCQkJbHBhX3BhdXNlID0gbHBhICYgKExQQV9QQVVTRV9DQVB8IExQQV9QQVVTRV9BU1lNKTsKIAogCQkJc3dpdGNoIChhZHZfcGF1c2UpIHsKLQkJCWNhc2UgKEFEVkVSVElTRV9QQVVTRV9DQVApOgorCQkJY2FzZSBBRFZFUlRJU0VfUEFVU0VfQ0FQOgogCQkJCWlmIChscGFfcGF1c2UgJiBMUEFfUEFVU0VfQ0FQKSB7CiAJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfUlhfRU5BQkxFOwogCQkJCQlpZiAobnAtPnBhdXNlX2ZsYWdzICYgTlZfUEFVU0VGUkFNRV9UWF9SRVEpCiAJCQkJCQlwYXVzZV9mbGFncyB8PSBOVl9QQVVTRUZSQU1FX1RYX0VOQUJMRTsKIAkJCQl9CiAJCQkJYnJlYWs7Ci0JCQljYXNlIChBRFZFUlRJU0VfUEFVU0VfQVNZTSk6CisJCQljYXNlIEFEVkVSVElTRV9QQVVTRV9BU1lNOgogCQkJCWlmIChscGFfcGF1c2UgPT0gKExQQV9QQVVTRV9DQVB8IExQQV9QQVVTRV9BU1lNKSkKIAkJCQl7CiAJCQkJCXBhdXNlX2ZsYWdzIHw9IE5WX1BBVVNFRlJBTUVfVFhfRU5BQkxFOwogCQkJCX0KIAkJCQlicmVhazsKLQkJCWNhc2UgKEFEVkVSVElTRV9QQVVTRV9DQVB8IEFEVkVSVElTRV9QQVVTRV9BU1lNKToKKwkJCWNhc2UgQURWRVJUSVNFX1BBVVNFX0NBUHwgQURWRVJUSVNFX1BBVVNFX0FTWU06CiAJCQkJaWYgKGxwYV9wYXVzZSAmIExQQV9QQVVTRV9DQVApCiAJCQkJewogCQkJCQlwYXVzZV9mbGFncyB8PSAgTlZfUEFVU0VGUkFNRV9SWF9FTkFCTEU7CkBAIC0yMzc2LDE0ICsyNDIzLDYgQEAKIAkJbnZfdHhfZG9uZShkZXYpOwogCQlzcGluX3VubG9jaygmbnAtPmxvY2spOwogCi0JCW52X3J4X3Byb2Nlc3MoZGV2KTsKLQkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKLQkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCi0JCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKLQkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci0JCX0KLQogCQlpZiAoZXZlbnRzICYgTlZSRUdfSVJRX0xJTkspIHsKIAkJCXNwaW5fbG9jaygmbnAtPmxvY2spOwogCQkJbnZfbGlua19pcnEoZGV2KTsKQEAgLTI0MDMsNiArMjQ0MiwyOSBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBpcnEgd2l0aCB1bmtub3duIGV2ZW50cyAweCV4LiBQbGVhc2UgcmVwb3J0XG4iLAogCQkJCQkJZGV2LT5uYW1lLCBldmVudHMpOwogCQl9CisjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJCWlmIChldmVudHMgJiBOVlJFR19JUlFfUlhfQUxMKSB7CisJCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOworCisJCQkvKiBEaXNhYmxlIGZ1cnRodXIgcmVjZWl2ZSBpcnEncyAqLworCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CisJCQlucC0+aXJxbWFzayAmPSB+TlZSRUdfSVJRX1JYX0FMTDsKKworCQkJaWYgKG5wLT5tc2lfZmxhZ3MgJiBOVl9NU0lfWF9FTkFCTEVEKQorCQkJCXdyaXRlbChOVlJFR19JUlFfUlhfQUxMLCBiYXNlICsgTnZSZWdJcnFNYXNrKTsKKwkJCWVsc2UKKwkJCQl3cml0ZWwobnAtPmlycW1hc2ssIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKKwkJfQorI2Vsc2UKKwkJbnZfcnhfcHJvY2VzcyhkZXYsIGRldi0+d2VpZ2h0KTsKKwkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKKwkJCXNwaW5fbG9jaygmbnAtPmxvY2spOworCQkJaWYgKCFucC0+aW5fc2h1dGRvd24pCisJCQkJbW9kX3RpbWVyKCZucC0+b29tX2tpY2ssIGppZmZpZXMgKyBPT01fUkVGSUxMKTsKKwkJCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7CisJCX0KKyNlbmRpZgogCQlpZiAoaSA+IG1heF9pbnRlcnJ1cHRfd29yaykgewogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQkvKiBkaXNhYmxlIGludGVycnVwdHMgb24gdGhlIG5pYyAqLwpAQCAtMjQ3NCw2ICsyNTM2LDYzIEBACiAJcmV0dXJuIElSUV9SRVRWQUwoaSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfRk9SQ0VERVRIX05BUEkKK3N0YXRpYyBpbnQgbnZfbmFwaV9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQoreworCWludCBwa3RzLCBsaW1pdCA9IG1pbigqYnVkZ2V0LCBkZXYtPnF1b3RhKTsKKwlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisKKwlwa3RzID0gbnZfcnhfcHJvY2VzcyhkZXYsIGxpbWl0KTsKKworCWlmIChudl9hbGxvY19yeChkZXYpKSB7CisJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKKwkJaWYgKCFucC0+aW5fc2h1dGRvd24pCisJCQltb2RfdGltZXIoJm5wLT5vb21fa2ljaywgamlmZmllcyArIE9PTV9SRUZJTEwpOworCQlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKKwl9CisKKwlpZiAocGt0cyA8IGxpbWl0KSB7CisJCS8qIGFsbCBkb25lLCBubyBtb3JlIHBhY2tldHMgcHJlc2VudCAqLworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCisJCS8qIHJlLWVuYWJsZSByZWNlaXZlIGludGVycnVwdHMgKi8KKwkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOworCQlucC0+aXJxbWFzayB8PSBOVlJFR19JUlFfUlhfQUxMOworCQlpZiAobnAtPm1zaV9mbGFncyAmIE5WX01TSV9YX0VOQUJMRUQpCisJCQl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCWVsc2UKKwkJCXdyaXRlbChucC0+aXJxbWFzaywgYmFzZSArIE52UmVnSXJxTWFzayk7CisJCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQkvKiB1c2VkIHVwIG91ciBxdWFudHVtLCBzbyByZXNjaGVkdWxlICovCisJCWRldi0+cXVvdGEgLT0gcGt0czsKKwkJKmJ1ZGdldCAtPSBwa3RzOworCQlyZXR1cm4gMTsKKwl9Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GT1JDRURFVEhfTkFQSQorc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfcngoaW50IGZvbywgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKSBkYXRhOworCXU4IF9faW9tZW0gKmJhc2UgPSBnZXRfaHdiYXNlKGRldik7CisJdTMyIGV2ZW50czsKKworCWV2ZW50cyA9IHJlYWRsKGJhc2UgKyBOdlJlZ01TSVhJcnFTdGF0dXMpICYgTlZSRUdfSVJRX1JYX0FMTDsKKwl3cml0ZWwoTlZSRUdfSVJRX1JYX0FMTCwgYmFzZSArIE52UmVnTVNJWElycVN0YXR1cyk7CisKKwlpZiAoZXZlbnRzKSB7CisJCW5ldGlmX3J4X3NjaGVkdWxlKGRldik7CisJCS8qIGRpc2FibGUgcmVjZWl2ZSBpbnRlcnJ1cHRzIG9uIHRoZSBuaWMgKi8KKwkJd3JpdGVsKE5WUkVHX0lSUV9SWF9BTEwsIGJhc2UgKyBOdlJlZ0lycU1hc2spOworCQlwY2lfcHVzaChiYXNlKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorI2Vsc2UKIHN0YXRpYyBpcnFyZXR1cm5fdCBudl9uaWNfaXJxX3J4KGludCBmb28sIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKQEAgLTI0OTIsNyArMjYxMSw3IEBACiAJCWlmICghKGV2ZW50cyAmIG5wLT5pcnFtYXNrKSkKIAkJCWJyZWFrOwogCi0JCW52X3J4X3Byb2Nlc3MoZGV2KTsKKwkJbnZfcnhfcHJvY2VzcyhkZXYsIGRldi0+d2VpZ2h0KTsKIAkJaWYgKG52X2FsbG9jX3J4KGRldikpIHsKIAkJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJCWlmICghbnAtPmluX3NodXRkb3duKQpAQCAtMjUxNCwxMiArMjYzMywxMiBAQAogCQkJc3Bpbl91bmxvY2tfaXJxKCZucC0+bG9jayk7CiAJCQlicmVhazsKIAkJfQotCiAJfQogCWRwcmludGsoS0VSTl9ERUJVRyAiJXM6IG52X25pY19pcnFfcnggY29tcGxldGVkXG4iLCBkZXYtPm5hbWUpOwogCiAJcmV0dXJuIElSUV9SRVRWQUwoaSk7CiB9CisjZW5kaWYKIAogc3RhdGljIGlycXJldHVybl90IG52X25pY19pcnFfb3RoZXIoaW50IGZvbywgdm9pZCAqZGF0YSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC0zMDU3LDkgKzMxNzYsMTggQEAKIAkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd24uXG4iLCBkZXYtPm5hbWUpOwogCQlibWNyID0gbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBNSUlfUkVBRCk7Ci0JCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7Ci0JCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7Ci0KKwkJaWYgKG5wLT5waHlfbW9kZWwgPT0gUEhZX01PREVMX01BUlZFTExfRTMwMTYpIHsKKwkJCWJtY3IgfD0gQk1DUl9BTkVOQUJMRTsKKwkJCS8qIHJlc2V0IHRoZSBwaHkgaW4gb3JkZXIgZm9yIHNldHRpbmdzIHRvIHN0aWNrLAorCQkJICogYW5kIGNhdXNlIGF1dG9uZWcgdG8gc3RhcnQgKi8KKwkJCWlmIChwaHlfcmVzZXQoZGV2LCBibWNyKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgeworCQkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKwkJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJCX0KIAl9IGVsc2UgewogCQlpbnQgYWR2LCBibWNyOwogCkBAIC0zMDk5LDE3ICszMjI3LDE5IEBACiAJCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CiAJCWlmIChucC0+Zml4ZWRfbW9kZSAmIChBRFZFUlRJU0VfMTAwSEFMRnxBRFZFUlRJU0VfMTAwRlVMTCkpCiAJCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDA7Ci0JCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CiAJCWlmIChucC0+cGh5X291aSA9PSBQSFlfT1VJX01BUlZFTEwpIHsKLQkJCS8qIHJlc2V0IHRoZSBwaHkgKi8KLQkJCWlmIChwaHlfcmVzZXQoZGV2KSkgeworCQkJLyogcmVzZXQgdGhlIHBoeSBpbiBvcmRlciBmb3IgZm9yY2VkIG1vZGUgc2V0dGluZ3MgdG8gc3RpY2sgKi8KKwkJCWlmIChwaHlfcmVzZXQoZGV2LCBibWNyKSkgewogCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJfQotCQl9IGVsc2UgaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJLyogV2FpdCBhIGJpdCBhbmQgdGhlbiByZWNvbmZpZ3VyZSB0aGUgbmljLiAqLwotCQkJdWRlbGF5KDEwKTsKLQkJCW52X2xpbmtjaGFuZ2UoZGV2KTsKKwkJfSBlbHNlIHsKKwkJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQkJLyogV2FpdCBhIGJpdCBhbmQgdGhlbiByZWNvbmZpZ3VyZSB0aGUgbmljLiAqLworCQkJCXVkZWxheSgxMCk7CisJCQkJbnZfbGlua2NoYW5nZShkZXYpOworCQkJfQogCQl9CiAJfQogCkBAIC0zMTY2LDggKzMyOTYsMTcgQEAKIAkJfQogCiAJCWJtY3IgPSBtaWlfcncoZGV2LCBucC0+cGh5YWRkciwgTUlJX0JNQ1IsIE1JSV9SRUFEKTsKLQkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKLQkJbWlpX3J3KGRldiwgbnAtPnBoeWFkZHIsIE1JSV9CTUNSLCBibWNyKTsKKwkJaWYgKG5wLT5waHlfbW9kZWwgPT0gUEhZX01PREVMX01BUlZFTExfRTMwMTYpIHsKKwkJCWJtY3IgfD0gQk1DUl9BTkVOQUJMRTsKKwkJCS8qIHJlc2V0IHRoZSBwaHkgaW4gb3JkZXIgZm9yIHNldHRpbmdzIHRvIHN0aWNrKi8KKwkJCWlmIChwaHlfcmVzZXQoZGV2LCBibWNyKSkgeworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBwaHkgcmVzZXQgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9IGVsc2UgeworCQkJYm1jciB8PSAoQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKKwkJCW1paV9ydyhkZXYsIG5wLT5waHlhZGRyLCBNSUlfQk1DUiwgYm1jcik7CisJCX0KIAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQludl9zdGFydF9yeChkZXYpOwpAQCAtMzI0NSw3ICszMzg0LDcgQEAKIAlpZiAoIXJ4dHhfcmluZyB8fCAhcnhfc2tidWZmIHx8ICFyeF9kbWEgfHwgIXR4X3NrYnVmZiB8fCAhdHhfZG1hIHx8ICF0eF9kbWFfbGVuKSB7CiAJCS8qIGZhbGwgYmFjayB0byBvbGQgcmluZ3MgKi8KIAkJaWYgKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xIHx8IG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8yKSB7Ci0JCQlpZihyeHR4X3JpbmcpCisJCQlpZiAocnh0eF9yaW5nKQogCQkJCXBjaV9mcmVlX2NvbnNpc3RlbnQobnAtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgcmluZ19kZXNjKSAqIChyaW5nLT5yeF9wZW5kaW5nICsgcmluZy0+dHhfcGVuZGluZyksCiAJCQkJCQkgICAgcnh0eF9yaW5nLCByaW5nX2FkZHIpOwogCQl9IGVsc2UgewpAQCAtMzQxOCw3ICszNTU3LDcgQEAKIHN0YXRpYyB1MzIgbnZfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXJldHVybiAobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExfUlhDSEVDSykgIT0gMDsKKwlyZXR1cm4gKG5wLT5yeF9jc3VtKSAhPSAwOwogfQogCiBzdGF0aWMgaW50IG52X3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQpAQCAtMzQyOCwyMiArMzU2NywxNSBAQAogCWludCByZXRjb2RlID0gMDsKIAogCWlmIChucC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSB7Ci0KLQkJaWYgKCgobnAtPnR4cnhjdGxfYml0cyAmIE5WUkVHX1RYUlhDVExfUlhDSEVDSykgJiYgZGF0YSkgfHwKLQkJICAgICghKG5wLT50eHJ4Y3RsX2JpdHMgJiBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0spICYmICFkYXRhKSkgewotCQkJLyogYWxyZWFkeSBzZXQgb3IgdW5zZXQgKi8KLQkJCXJldHVybiAwOwotCQl9Ci0KIAkJaWYgKGRhdGEpIHsKKwkJCW5wLT5yeF9jc3VtID0gMTsKIAkJCW5wLT50eHJ4Y3RsX2JpdHMgfD0gTlZSRUdfVFhSWENUTF9SWENIRUNLOwotCQl9IGVsc2UgaWYgKCEobnAtPnZsYW5jdGxfYml0cyAmIE5WUkVHX1ZMQU5DT05UUk9MX0VOQUJMRSkpIHsKLQkJCW5wLT50eHJ4Y3RsX2JpdHMgJj0gfk5WUkVHX1RYUlhDVExfUlhDSEVDSzsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIkNhbiBub3QgZGlzYWJsZSByeCBjaGVja3N1bSBpZiB2bGFuIGlzIGVuYWJsZWRcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlucC0+cnhfY3N1bSA9IDA7CisJCQkvKiB2bGFuIGlzIGRlcGVuZGVudCBvbiByeCBjaGVja3N1bSBvZmZsb2FkICovCisJCQlpZiAoIShucC0+dmxhbmN0bF9iaXRzICYgTlZSRUdfVkxBTkNPTlRST0xfRU5BQkxFKSkKKwkJCQlucC0+dHhyeGN0bF9iaXRzICY9IH5OVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CiAJCX0KLQogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJCQl3cml0ZWwobnAtPnR4cnhjdGxfYml0cywgYmFzZSArIE52UmVnVHhSeENvbnRyb2wpOwpAQCAtMzQ4MSw3ICszNjEzLDcgQEAKIAlzdHJ1Y3QgZmVfcHJpdiAqbnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfU1RBVElTVElDUykKLQkJcmV0dXJuIChzaXplb2Yoc3RydWN0IG52X2V0aHRvb2xfc3RhdHMpL3NpemVvZih1NjQpKTsKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgbnZfZXRodG9vbF9zdGF0cykvc2l6ZW9mKHU2NCk7CiAJZWxzZQogCQlyZXR1cm4gMDsKIH0KQEAgLTM2MTksNyArMzc1MSw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiwgKnJ4X3NrYjsKIAlkbWFfYWRkcl90IHRlc3RfZG1hX2FkZHI7CiAJdTMyIHR4X2ZsYWdzX2V4dHJhID0gKG5wLT5kZXNjX3ZlciA9PSBERVNDX1ZFUl8xID8gTlZfVFhfTEFTVFBBQ0tFVCA6IE5WX1RYMl9MQVNUUEFDS0VUKTsKLQl1MzIgRmxhZ3M7CisJdTMyIGZsYWdzOwogCWludCBsZW4sIGksIHBrdF9sZW47CiAJdTggKnBrdF9kYXRhOwogCXUzMiBmaWx0ZXJfZmxhZ3MgPSAwOwpAQCAtMzY2MywxMiArMzc5NSwxMiBAQAogCQkJCSAgICAgICB0eF9za2ItPmVuZC10eF9za2ItPmRhdGEsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKLQkJbnAtPnR4X3Jpbmcub3JpZ1swXS5QYWNrZXRCdWZmZXIgPSBjcHVfdG9fbGUzMih0ZXN0X2RtYV9hZGRyKTsKLQkJbnAtPnR4X3Jpbmcub3JpZ1swXS5GbGFnTGVuID0gY3B1X3RvX2xlMzIoKHBrdF9sZW4tMSkgfCBucC0+dHhfZmxhZ3MgfCB0eF9mbGFnc19leHRyYSk7CisJCW5wLT50eF9yaW5nLm9yaWdbMF0uYnVmID0gY3B1X3RvX2xlMzIodGVzdF9kbWFfYWRkcik7CisJCW5wLT50eF9yaW5nLm9yaWdbMF0uZmxhZ2xlbiA9IGNwdV90b19sZTMyKChwa3RfbGVuLTEpIHwgbnAtPnR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOwogCX0gZWxzZSB7Ci0JCW5wLT50eF9yaW5nLmV4WzBdLlBhY2tldEJ1ZmZlckhpZ2ggPSBjcHVfdG9fbGU2NCh0ZXN0X2RtYV9hZGRyKSA+PiAzMjsKLQkJbnAtPnR4X3JpbmcuZXhbMF0uUGFja2V0QnVmZmVyTG93ID0gY3B1X3RvX2xlNjQodGVzdF9kbWFfYWRkcikgJiAweDBGRkZGRkZGRjsKLQkJbnAtPnR4X3JpbmcuZXhbMF0uRmxhZ0xlbiA9IGNwdV90b19sZTMyKChwa3RfbGVuLTEpIHwgbnAtPnR4X2ZsYWdzIHwgdHhfZmxhZ3NfZXh0cmEpOworCQlucC0+dHhfcmluZy5leFswXS5idWZoaWdoID0gY3B1X3RvX2xlNjQodGVzdF9kbWFfYWRkcikgPj4gMzI7CisJCW5wLT50eF9yaW5nLmV4WzBdLmJ1ZmxvdyA9IGNwdV90b19sZTY0KHRlc3RfZG1hX2FkZHIpICYgMHgwRkZGRkZGRkY7CisJCW5wLT50eF9yaW5nLmV4WzBdLmZsYWdsZW4gPSBjcHVfdG9fbGUzMigocGt0X2xlbi0xKSB8IG5wLT50eF9mbGFncyB8IHR4X2ZsYWdzX2V4dHJhKTsKIAl9CiAJd3JpdGVsKE5WUkVHX1RYUlhDVExfS0lDS3xucC0+dHhyeGN0bF9iaXRzLCBnZXRfaHdiYXNlKGRldikgKyBOdlJlZ1R4UnhDb250cm9sKTsKIAlwY2lfcHVzaChnZXRfaHdiYXNlKGRldikpOwpAQCAtMzY3NywyMSArMzgwOSwyMSBAQAogCiAJLyogY2hlY2sgZm9yIHJ4IG9mIHRoZSBwYWNrZXQgKi8KIAlpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEgfHwgbnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzIpIHsKLQkJRmxhZ3MgPSBsZTMyX3RvX2NwdShucC0+cnhfcmluZy5vcmlnWzBdLkZsYWdMZW4pOworCQlmbGFncyA9IGxlMzJfdG9fY3B1KG5wLT5yeF9yaW5nLm9yaWdbMF0uZmxhZ2xlbik7CiAJCWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aCgmbnAtPnJ4X3Jpbmcub3JpZ1swXSwgbnAtPmRlc2NfdmVyKTsKIAogCX0gZWxzZSB7Ci0JCUZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbMF0uRmxhZ0xlbik7CisJCWZsYWdzID0gbGUzMl90b19jcHUobnAtPnJ4X3JpbmcuZXhbMF0uZmxhZ2xlbik7CiAJCWxlbiA9IG52X2Rlc2NyX2dldGxlbmd0aF9leCgmbnAtPnJ4X3JpbmcuZXhbMF0sIG5wLT5kZXNjX3Zlcik7CiAJfQogCi0JaWYgKEZsYWdzICYgTlZfUlhfQVZBSUwpIHsKKwlpZiAoZmxhZ3MgJiBOVl9SWF9BVkFJTCkgewogCQlyZXQgPSAwOwogCX0gZWxzZSBpZiAobnAtPmRlc2NfdmVyID09IERFU0NfVkVSXzEpIHsKLQkJaWYgKEZsYWdzICYgTlZfUlhfRVJST1IpCisJCWlmIChmbGFncyAmIE5WX1JYX0VSUk9SKQogCQkJcmV0ID0gMDsKIAl9IGVsc2UgewotCQlpZiAoRmxhZ3MgJiBOVl9SWDJfRVJST1IpIHsKKwkJaWYgKGZsYWdzICYgTlZfUlgyX0VSUk9SKSB7CiAJCQlyZXQgPSAwOwogCQl9CiAJfQpAQCAtMzc1Myw2ICszODg1LDcgQEAKIAlpZiAodGVzdC0+ZmxhZ3MgJiBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOwogCQkJbmV0aWZfdHhfbG9ja19iaChkZXYpOwogCQkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwogCQkJbnZfZGlzYWJsZV9od19pbnRlcnJ1cHRzKGRldiwgbnAtPmlycW1hc2spOwpAQCAtMzgxMSw2ICszOTQ0LDcgQEAKIAkJCW52X3N0YXJ0X3J4KGRldik7CiAJCQludl9zdGFydF90eChkZXYpOwogCQkJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKwkJCW5ldGlmX3BvbGxfZW5hYmxlKGRldik7CiAJCQludl9lbmFibGVfaHdfaW50ZXJydXB0cyhkZXYsIG5wLT5pcnFtYXNrKTsKIAkJfQogCX0KQEAgLTM4MjgsNyArMzk2Miw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IG52X2dldF9kcnZpbmZvLAogCS5nZXRfbGluayA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF93b2wgPSBudl9nZXRfd29sLApAQCAtMzg5NSwxMCArNDAyOSw5IEBACiAKIAlkcHJpbnRrKEtFUk5fREVCVUcgIm52X29wZW46IGJlZ2luXG4iKTsKIAotCS8qIDEpIGVyYXNlIHByZXZpb3VzIG1pc2NvbmZpZ3VyYXRpb24gKi8KKwkvKiBlcmFzZSBwcmV2aW91cyBtaXNjb25maWd1cmF0aW9uICovCiAJaWYgKG5wLT5kcml2ZXJfZGF0YSAmIERFVl9IQVNfUE9XRVJfQ05UUkwpCiAJCW52X21hY19yZXNldChkZXYpOwotCS8qIDQuMS0xOiBzdG9wIGFkYXB0ZXI6IGlnbm9yZWQsIDQuMyBzZWVtcyB0byBiZSBvdmVya2lsbCAqLwogCXdyaXRlbChOVlJFR19NQ0FTVEFERFJBX0ZPUkNFLCBiYXNlICsgTnZSZWdNdWx0aWNhc3RBZGRyQSk7CiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ011bHRpY2FzdEFkZHJCKTsKIAl3cml0ZWwoMCwgYmFzZSArIE52UmVnTXVsdGljYXN0TWFza0EpOwpAQCAtMzkxMywyNiArNDA0NiwyMiBAQAogCWlmIChucC0+cGF1c2VfZmxhZ3MgJiBOVl9QQVVTRUZSQU1FX1RYX0NBUEFCTEUpCiAJCXdyaXRlbChOVlJFR19UWF9QQVVTRUZSQU1FX0RJU0FCTEUsICBiYXNlICsgTnZSZWdUeFBhdXNlRnJhbWUpOwogCi0JLyogMikgaW5pdGlhbGl6ZSBkZXNjcmlwdG9yIHJpbmdzICovCisJLyogaW5pdGlhbGl6ZSBkZXNjcmlwdG9yIHJpbmdzICovCiAJc2V0X2J1ZnNpemUoZGV2KTsKIAlvb20gPSBudl9pbml0X3JpbmcoZGV2KTsKIAogCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdMaW5rU3BlZWQpOwotCXdyaXRlbCgwLCBiYXNlICsgTnZSZWdVbmtub3duVHJhbnNtaXR0ZXJSZWcpOworCXdyaXRlbChyZWFkbChiYXNlICsgTnZSZWdUcmFuc21pdFBvbGwpICYgTlZSRUdfVFJBTlNNSVRQT0xMX01BQ19BRERSX1JFViwgYmFzZSArIE52UmVnVHJhbnNtaXRQb2xsKTsKIAludl90eHJ4X3Jlc2V0KGRldik7CiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1Vua25vd25TZXR1cFJlZzYpOwogCiAJbnAtPmluX3NodXRkb3duID0gMDsKIAotCS8qIDMpIHNldCBtYWMgYWRkcmVzcyAqLwotCW52X2NvcHlfbWFjX3RvX2h3KGRldik7Ci0KLQkvKiA0KSBnaXZlIGh3IHJpbmdzICovCisJLyogZ2l2ZSBodyByaW5ncyAqLwogCXNldHVwX2h3X3JpbmdzKGRldiwgTlZfU0VUVVBfUlhfUklORyB8IE5WX1NFVFVQX1RYX1JJTkcpOwogCXdyaXRlbCggKChucC0+cnhfcmluZ19zaXplLTEpIDw8IE5WUkVHX1JJTkdTWl9SWFNISUZUKSArICgobnAtPnR4X3Jpbmdfc2l6ZS0xKSA8PCBOVlJFR19SSU5HU1pfVFhTSElGVCksCiAJCWJhc2UgKyBOdlJlZ1JpbmdTaXplcyk7CiAKLQkvKiA1KSBjb250aW51ZSBzZXR1cCAqLwogCXdyaXRlbChucC0+bGlua3NwZWVkLCBiYXNlICsgTnZSZWdMaW5rU3BlZWQpOwogCWlmIChucC0+ZGVzY192ZXIgPT0gREVTQ19WRVJfMSkKIAkJd3JpdGVsKE5WUkVHX1RYX1dNX0RFU0MxX0RFRkFVTFQsIGJhc2UgKyBOdlJlZ1R4V2F0ZXJtYXJrKTsKQEAgLTM5NTAsNyArNDA3OSw2IEBACiAJd3JpdGVsKE5WUkVHX0lSUVNUQVRfTUFTSywgYmFzZSArIE52UmVnSXJxU3RhdHVzKTsKIAl3cml0ZWwoTlZSRUdfTUlJU1RBVF9NQVNLMiwgYmFzZSArIE52UmVnTUlJU3RhdHVzKTsKIAotCS8qIDYpIGNvbnRpbnVlIHNldHVwICovCiAJd3JpdGVsKE5WUkVHX01JU0MxX0ZPUkNFIHwgTlZSRUdfTUlTQzFfSEQsIGJhc2UgKyBOdlJlZ01pc2MxKTsKIAl3cml0ZWwocmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXR0ZXJTdGF0dXMpLCBiYXNlICsgTnZSZWdUcmFuc21pdHRlclN0YXR1cyk7CiAJd3JpdGVsKE5WUkVHX1BGRl9BTFdBWVMsIGJhc2UgKyBOdlJlZ1BhY2tldEZpbHRlckZsYWdzKTsKQEAgLTQwMjAsNiArNDE0OCw4IEBACiAJbnZfc3RhcnRfcngoZGV2KTsKIAludl9zdGFydF90eChkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJbmV0aWZfcG9sbF9lbmFibGUoZGV2KTsKKwogCWlmIChyZXQpIHsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwogCX0gZWxzZSB7CkBAIC00MDQ5LDYgKzQxNzksNyBAQAogCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAlucC0+aW5fc2h1dGRvd24gPSAxOwogCXNwaW5fdW5sb2NrX2lycSgmbnAtPmxvY2spOworCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOwogCXN5bmNocm9uaXplX2lycShkZXYtPmlycSk7CiAKIAlkZWxfdGltZXJfc3luYygmbnAtPm9vbV9raWNrKTsKQEAgLTQwNzYsMTIgKzQyMDcsNiBAQAogCWlmIChucC0+d29sZW5hYmxlZCkKIAkJbnZfc3RhcnRfcngoZGV2KTsKIAotCS8qIHNwZWNpYWwgb3A6IHdyaXRlIGJhY2sgdGhlIG1pc29yZGVyZWQgTUFDIGFkZHJlc3MgLSBvdGhlcndpc2UKLQkgKiB0aGUgbmV4dCBudl9wcm9iZSB3b3VsZCBzZWUgYSB3cm9uZyBhZGRyZXNzLgotCSAqLwotCXdyaXRlbChucC0+b3JpZ19tYWNbMF0sIGJhc2UgKyBOdlJlZ01hY0FkZHJBKTsKLQl3cml0ZWwobnAtPm9yaWdfbWFjWzFdLCBiYXNlICsgTnZSZWdNYWNBZGRyQik7Ci0KIAkvKiBGSVhNRTogcG93ZXIgZG93biBuaWMgKi8KIAogCXJldHVybiAwOwpAQCAtNDA5NCw3ICs0MjE5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdTggX19pb21lbSAqYmFzZTsKIAlpbnQgZXJyLCBpOwotCXUzMiBwb3dlcnN0YXRlOworCXUzMiBwb3dlcnN0YXRlLCB0eHJlZzsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZmVfcHJpdikpOwogCWVyciA9IC1FTk9NRU07CkBAIC00MTkwLDYgKzQzMTUsNyBAQAogCQlucC0+cGt0X2xpbWl0ID0gTlZfUEtUTElNSVRfMjsKIAogCWlmIChpZC0+ZHJpdmVyX2RhdGEgJiBERVZfSEFTX0NIRUNLU1VNKSB7CisJCW5wLT5yeF9jc3VtID0gMTsKIAkJbnAtPnR4cnhjdGxfYml0cyB8PSBOVlJFR19UWFJYQ1RMX1JYQ0hFQ0s7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9TRzsKICNpZmRlZiBORVRJRl9GX1RTTwpAQCAtNDI3MCw2ICs0Mzk2LDEwIEBACiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAlkZXYtPnBvbGxfY29udHJvbGxlciA9IG52X3BvbGxfY29udHJvbGxlcjsKICNlbmRpZgorCWRldi0+d2VpZ2h0ID0gNjQ7CisjaWZkZWYgQ09ORklHX0ZPUkNFREVUSF9OQVBJCisJZGV2LT5wb2xsID0gbnZfbmFwaV9wb2xsOworI2VuZGlmCiAJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm9wcyk7CiAJZGV2LT50eF90aW1lb3V0ID0gbnZfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gTlZfV0FUQ0hET0dfVElNRU87CkBAIC00MjgxLDEyICs0NDExLDMwIEBACiAJbnAtPm9yaWdfbWFjWzBdID0gcmVhZGwoYmFzZSArIE52UmVnTWFjQWRkckEpOwogCW5wLT5vcmlnX21hY1sxXSA9IHJlYWRsKGJhc2UgKyBOdlJlZ01hY0FkZHJCKTsKIAotCWRldi0+ZGV2X2FkZHJbMF0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICA4KSAmIDB4ZmY7Ci0JZGV2LT5kZXZfYWRkclsxXSA9IChucC0+b3JpZ19tYWNbMV0gPj4gIDApICYgMHhmZjsKLQlkZXYtPmRldl9hZGRyWzJdID0gKG5wLT5vcmlnX21hY1swXSA+PiAyNCkgJiAweGZmOwotCWRldi0+ZGV2X2FkZHJbM10gPSAobnAtPm9yaWdfbWFjWzBdID4+IDE2KSAmIDB4ZmY7Ci0JZGV2LT5kZXZfYWRkcls0XSA9IChucC0+b3JpZ19tYWNbMF0gPj4gIDgpICYgMHhmZjsKLQlkZXYtPmRldl9hZGRyWzVdID0gKG5wLT5vcmlnX21hY1swXSA+PiAgMCkgJiAweGZmOworCS8qIGNoZWNrIHRoZSB3b3JrYXJvdW5kIGJpdCBmb3IgY29ycmVjdCBtYWMgYWRkcmVzcyBvcmRlciAqLworCXR4cmVnID0gcmVhZGwoYmFzZSArIE52UmVnVHJhbnNtaXRQb2xsKTsKKwlpZiAodHhyZWcgJiBOVlJFR19UUkFOU01JVFBPTExfTUFDX0FERFJfUkVWKSB7CisJCS8qIG1hYyBhZGRyZXNzIGlzIGFscmVhZHkgaW4gY29ycmVjdCBvcmRlciAqLworCQlkZXYtPmRldl9hZGRyWzBdID0gKG5wLT5vcmlnX21hY1swXSA+PiAgMCkgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzFdID0gKG5wLT5vcmlnX21hY1swXSA+PiAgOCkgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzJdID0gKG5wLT5vcmlnX21hY1swXSA+PiAxNikgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzNdID0gKG5wLT5vcmlnX21hY1swXSA+PiAyNCkgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzRdID0gKG5wLT5vcmlnX21hY1sxXSA+PiAgMCkgJiAweGZmOworCQlkZXYtPmRldl9hZGRyWzVdID0gKG5wLT5vcmlnX21hY1sxXSA+PiAgOCkgJiAweGZmOworCX0gZWxzZSB7CisJCS8qIG5lZWQgdG8gcmV2ZXJzZSBtYWMgYWRkcmVzcyB0byBjb3JyZWN0IG9yZGVyICovCisJCWRldi0+ZGV2X2FkZHJbMF0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICA4KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMV0gPSAobnAtPm9yaWdfbWFjWzFdID4+ICAwKSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbMl0gPSAobnAtPm9yaWdfbWFjWzBdID4+IDI0KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbM10gPSAobnAtPm9yaWdfbWFjWzBdID4+IDE2KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbNF0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICA4KSAmIDB4ZmY7CisJCWRldi0+ZGV2X2FkZHJbNV0gPSAobnAtPm9yaWdfbWFjWzBdID4+ICAwKSAmIDB4ZmY7CisJCS8qIHNldCBwZXJtYW5lbnQgYWRkcmVzcyB0byBiZSBjb3JyZWN0IGFzd2VsbCAqLworCQlucC0+b3JpZ19tYWNbMF0gPSAoZGV2LT5kZXZfYWRkclswXSA8PCAwKSArIChkZXYtPmRldl9hZGRyWzFdIDw8IDgpICsKKwkJCShkZXYtPmRldl9hZGRyWzJdIDw8IDE2KSArIChkZXYtPmRldl9hZGRyWzNdIDw8IDI0KTsKKwkJbnAtPm9yaWdfbWFjWzFdID0gKGRldi0+ZGV2X2FkZHJbNF0gPDwgMCkgKyAoZGV2LT5kZXZfYWRkcls1XSA8PCA4KTsKKwkJd3JpdGVsKHR4cmVnfE5WUkVHX1RSQU5TTUlUUE9MTF9NQUNfQUREUl9SRVYsIGJhc2UgKyBOdlJlZ1RyYW5zbWl0UG9sbCk7CisJfQogCW1lbWNweShkZXYtPnBlcm1fYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5wZXJtX2FkZHIpKSB7CkBAIC00MzA5LDYgKzQ0NTcsOSBAQAogCQkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKIAkJCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOwogCisJLyogc2V0IG1hYyBhZGRyZXNzICovCisJbnZfY29weV9tYWNfdG9faHcoZGV2KTsKKwogCS8qIGRpc2FibGUgV09MICovCiAJd3JpdGVsKDAsIGJhc2UgKyBOdlJlZ1dha2VVcEZsYWdzKTsKIAlucC0+d29sZW5hYmxlZCA9IDA7CkBAIC00MzY5LDYgKzQ1MjAsNyBAQAogCQlpZiAoaWQyIDwgMCB8fCBpZDIgPT0gMHhmZmZmKQogCQkJY29udGludWU7CiAKKwkJbnAtPnBoeV9tb2RlbCA9IGlkMiAmIFBIWUlEMl9NT0RFTF9NQVNLOwogCQlpZDEgPSAoaWQxICYgUEhZSUQxX09VSV9NQVNLKSA8PCBQSFlJRDFfT1VJX1NIRlQ7CiAJCWlkMiA9IChpZDIgJiBQSFlJRDJfT1VJX01BU0spID4+IFBIWUlEMl9PVUlfU0hGVDsKIAkJZHByaW50ayhLRVJOX0RFQlVHICIlczogb3BlbjogRm91bmQgUEhZICUwNHg6JTA0eCBhdCBhZGRyZXNzICVkLlxuIiwKQEAgLTQ0MjEsOSArNDU3MywxNyBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IG52X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBmZV9wcml2ICpucCA9IG5ldGRldl9wcml2KGRldik7CisJdTggX19pb21lbSAqYmFzZSA9IGdldF9od2Jhc2UoZGV2KTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKKwkvKiBzcGVjaWFsIG9wOiB3cml0ZSBiYWNrIHRoZSBtaXNvcmRlcmVkIE1BQyBhZGRyZXNzIC0gb3RoZXJ3aXNlCisJICogdGhlIG5leHQgbnZfcHJvYmUgd291bGQgc2VlIGEgd3JvbmcgYWRkcmVzcy4KKwkgKi8KKwl3cml0ZWwobnAtPm9yaWdfbWFjWzBdLCBiYXNlICsgTnZSZWdNYWNBZGRyQSk7CisJd3JpdGVsKG5wLT5vcmlnX21hY1sxXSwgYmFzZSArIE52UmVnTWFjQWRkckIpOworCiAJLyogZnJlZSBhbGwgc3RydWN0dXJlcyAqLwogCWZyZWVfcmluZ3MoZGV2KTsKIAlpb3VubWFwKGdldF9od2Jhc2UoZGV2KSk7CkBAIC00NTQwLDcgKzQ3MDAsNyBAQAogc3RhdGljIGludCBfX2luaXQgaW5pdF9uaWModm9pZCkKIHsKIAlwcmludGsoS0VSTl9JTkZPICJmb3JjZWRldGguYzogUmV2ZXJzZSBFbmdpbmVlcmVkIG5Gb3JjZSBldGhlcm5ldCBkcml2ZXIuIFZlcnNpb24gJXMuXG4iLCBGT1JDRURFVEhfVkVSU0lPTik7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfbmljKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9NYWtlZmlsZQppbmRleCBkNmRkM2YyLi4wMmQ0ZGMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai0kKENPTkZJR19GU19FTkVUKSArPSBmc19lbmV0Lm8KIAotb2JqLSQoQ09ORklHXzh4eCkgKz0gbWFjLWZlYy5vIG1hYy1zY2Mubwotb2JqLSQoQ09ORklHXzgyNjApICs9IG1hYy1mY2Mubworb2JqLSQoQ09ORklHXzh4eCkgKz0gbWFjLWZlYy5vIG1hYy1zY2MubyBtaWktZmVjLm8KK29iai0kKENPTkZJR19DUE0yKSArPSBtYWMtZmNjLm8gbWlpLWJpdGJhbmcubwogCi1mc19lbmV0LW9ianMgOj0gZnNfZW5ldC1tYWluLm8gZnNfZW5ldC1taWkubyBtaWktYml0YmFuZy5vIG1paS1maXhlZC5vCitmc19lbmV0LW9ianMgOj0gZnNfZW5ldC1tYWluLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZmVjLmggYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ODA1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZlYy5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgRlNfRU5FVF9GRUNfSAorI2RlZmluZSBGU19FTkVUX0ZFQ19ICisKKy8qIENSQyBwb2x5bm9taXVtIHVzZWQgYnkgdGhlIEZFQyBmb3IgdGhlIG11bHRpY2FzdCBncm91cCBmaWx0ZXJpbmcgKi8KKyNkZWZpbmUgRkVDX0NSQ19QT0xZICAgMHgwNEMxMURCNworCisjZGVmaW5lIEZFQ19NQVhfTVVMVElDQVNUX0FERFJTCTY0CisKKy8qIEludGVycnVwdCBldmVudHMvbWFza3MuCisqLworI2RlZmluZSBGRUNfRU5FVF9IQkVSUgkweDgwMDAwMDAwVQkvKiBIZWFydGJlYXQgZXJyb3IgICAgICAgICAgKi8KKyNkZWZpbmUgRkVDX0VORVRfQkFCUgkweDQwMDAwMDAwVQkvKiBCYWJibGluZyByZWNlaXZlciAgICAgICAgKi8KKyNkZWZpbmUgRkVDX0VORVRfQkFCVAkweDIwMDAwMDAwVQkvKiBCYWJibGluZyB0cmFuc21pdHRlciAgICAgKi8KKyNkZWZpbmUgRkVDX0VORVRfR1JBCTB4MTAwMDAwMDBVCS8qIEdyYWNlZnVsIHN0b3AgY29tcGxldGUgICAqLworI2RlZmluZSBGRUNfRU5FVF9UWEYJMHgwODAwMDAwMFUJLyogRnVsbCBmcmFtZSB0cmFuc21pdHRlZCAgICovCisjZGVmaW5lIEZFQ19FTkVUX1RYQgkweDA0MDAwMDAwVQkvKiBBIGJ1ZmZlciB3YXMgdHJhbnNtaXR0ZWQgKi8KKyNkZWZpbmUgRkVDX0VORVRfUlhGCTB4MDIwMDAwMDBVCS8qIEZ1bGwgZnJhbWUgcmVjZWl2ZWQgICAgICAqLworI2RlZmluZSBGRUNfRU5FVF9SWEIJMHgwMTAwMDAwMFUJLyogQSBidWZmZXIgd2FzIHJlY2VpdmVkICAgICovCisjZGVmaW5lIEZFQ19FTkVUX01JSQkweDAwODAwMDAwVQkvKiBNSUkgaW50ZXJydXB0ICAgICAgICAgICAgKi8KKyNkZWZpbmUgRkVDX0VORVRfRUJFUlIJMHgwMDQwMDAwMFUJLyogU0RNQSBidXMgZXJyb3IgICAgICAgICAgICovCisKKyNkZWZpbmUgRkVDX0VDTlRSTF9QSU5NVVgJMHgwMDAwMDAwNAorI2RlZmluZSBGRUNfRUNOVFJMX0VUSEVSX0VOCTB4MDAwMDAwMDIKKyNkZWZpbmUgRkVDX0VDTlRSTF9SRVNFVAkweDAwMDAwMDAxCisKKyNkZWZpbmUgRkVDX1JDTlRSTF9CQ19SRUoJMHgwMDAwMDAxMAorI2RlZmluZSBGRUNfUkNOVFJMX1BST00JCTB4MDAwMDAwMDgKKyNkZWZpbmUgRkVDX1JDTlRSTF9NSUlfTU9ERQkweDAwMDAwMDA0CisjZGVmaW5lIEZFQ19SQ05UUkxfRFJUCQkweDAwMDAwMDAyCisjZGVmaW5lIEZFQ19SQ05UUkxfTE9PUAkJMHgwMDAwMDAwMQorCisjZGVmaW5lIEZFQ19UQ05UUkxfRkRFTgkJMHgwMDAwMDAwNAorI2RlZmluZSBGRUNfVENOVFJMX0hCQwkJMHgwMDAwMDAwMgorI2RlZmluZSBGRUNfVENOVFJMX0dUUwkJMHgwMDAwMDAwMQorCisKKworLyoKKyAqIERlbGF5IHRvIHdhaXQgZm9yIEZFQyByZXNldCBjb21tYW5kIHRvIGNvbXBsZXRlIChpbiB1cykKKyAqLworI2RlZmluZSBGRUNfUkVTRVRfREVMQVkJCTUwCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IGY2YWJmZjUuLjM0NDEyYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KQEAgLTY4MiwzNSArNjgzLDYgQEAKIAkoKmZlcC0+b3BzLT5wb3N0X2ZyZWVfaXJxKShkZXYsIGlycSk7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0vKiBUaGlzIGludGVycnVwdCBvY2N1cnMgd2hlbiB0aGUgUEhZIGRldGVjdHMgYSBsaW5rIGNoYW5nZS4gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdAotZnNfbWlpX2xpbmtfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXA7Ci0JY29uc3Qgc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gKmZwaTsKLQotCWZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZnBpID0gZmVwLT5mcGk7Ci0KLQkvKgotCSAqIEFja25vd2xlZGdlIHRoZSBpbnRlcnJ1cHQgaWYgcG9zc2libGUuIElmIHdlIGhhdmUgbm90Ci0JICogZm91bmQgdGhlIFBIWSB5ZXQgd2UgY2FuJ3QgcHJvY2VzcyBvciBhY2tub3dsZWRnZSB0aGUKLQkgKiBpbnRlcnJ1cHQgbm93LiBJbnN0ZWFkIHdlIGlnbm9yZSB0aGlzIGludGVycnVwdCBmb3Igbm93LAotCSAqIHdoaWNoIHdlIGNhbiBkbyBzaW5jZSBpdCBpcyBlZGdlIHRyaWdnZXJlZC4gSXQgd2lsbCBiZQotCSAqIGFja25vd2xlZGdlZCBsYXRlciBieSBmc19lbmV0X29wZW4oKS4KLQkgKi8KLQlpZiAoIWZlcC0+cGh5KQotCQlyZXR1cm4gSVJRX05PTkU7Ci0KLQlmc19taWlfYWNrX2ludChkZXYpOwotCWZzX21paV9saW5rX3N0YXR1c19jaGFuZ2VfY2hlY2soZGV2LCAwKTsKLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQogc3RhdGljIHZvaWQgZnNfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03MjIsMTAgKzY5NCwxMyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPmxvY2ssIGZsYWdzKTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKSB7CisJCXBoeV9zdG9wKGZlcC0+cGh5ZGV2KTsKIAkJKCpmZXAtPm9wcy0+c3RvcCkoZGV2KTsKIAkJKCpmZXAtPm9wcy0+cmVzdGFydCkoZGV2KTsKKwkJcGh5X3N0YXJ0KGZlcC0+cGh5ZGV2KTsKIAl9CiAKKwlwaHlfc3RhcnQoZmVwLT5waHlkZXYpOwogCXdha2UgPSBmZXAtPnR4X2ZyZWUgJiYgIShDQkRSX1NDKGZlcC0+Y3VyX3R4KSAmIEJEX0VORVRfVFhfUkVBRFkpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlcC0+bG9jaywgZmxhZ3MpOwogCkBAIC03MzMsMzUgKzcwOCwxMTIgQEAKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgZ2VuZXJpYyBsaW5rLWNoYW5nZSBoYW5kbGVyIC0gc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgY2FzZXMKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIHZvaWQgZ2VuZXJpY19hZGp1c3RfbGluayhzdHJ1Y3QgIG5ldF9kZXZpY2UgKmRldikKK3sKKyAgICAgICBzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOworICAgICAgIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBmZXAtPnBoeWRldjsKKyAgICAgICBpbnQgbmV3X3N0YXRlID0gMDsKKworICAgICAgIGlmIChwaHlkZXYtPmxpbmspIHsKKworICAgICAgICAgICAgICAgLyogYWRqdXN0IHRvIGR1cGxleCBtb2RlICovCisgICAgICAgICAgICAgICBpZiAocGh5ZGV2LT5kdXBsZXggIT0gZmVwLT5vbGRkdXBsZXgpeworICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBmZXAtPm9sZGR1cGxleCA9IHBoeWRldi0+ZHVwbGV4OworICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiAocGh5ZGV2LT5zcGVlZCAhPSBmZXAtPm9sZHNwZWVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdGF0ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgIGZlcC0+b2xkc3BlZWQgPSBwaHlkZXYtPnNwZWVkOworICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBpZiAoIWZlcC0+b2xkbGluaykgeworICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3RhdGUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBmZXAtPm9sZGxpbmsgPSAxOworICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9zY2hlZHVsZShkZXYpOworICAgICAgICAgICAgICAgICAgICAgICBuZXRpZl9jYXJyaWVyX29uKGRldik7CisgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgIGlmIChuZXdfc3RhdGUpCisgICAgICAgICAgICAgICAgICAgICAgIGZlcC0+b3BzLT5yZXN0YXJ0KGRldik7CisKKyAgICAgICB9IGVsc2UgaWYgKGZlcC0+b2xkbGluaykgeworICAgICAgICAgICAgICAgbmV3X3N0YXRlID0gMTsKKyAgICAgICAgICAgICAgIGZlcC0+b2xkbGluayA9IDA7CisgICAgICAgICAgICAgICBmZXAtPm9sZHNwZWVkID0gMDsKKyAgICAgICAgICAgICAgIGZlcC0+b2xkZHVwbGV4ID0gLTE7CisgICAgICAgICAgICAgICBuZXRpZl9jYXJyaWVyX29mZihkZXYpOworICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworICAgICAgIH0KKworICAgICAgIGlmIChuZXdfc3RhdGUgJiYgbmV0aWZfbXNnX2xpbmsoZmVwKSkKKyAgICAgICAgICAgICAgIHBoeV9wcmludF9zdGF0dXMocGh5ZGV2KTsKK30KKworCitzdGF0aWMgdm9pZCBmc19hZGp1c3RfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPmxvY2ssIGZsYWdzKTsKKworCWlmKGZlcC0+b3BzLT5hZGp1c3RfbGluaykKKwkJZmVwLT5vcHMtPmFkanVzdF9saW5rKGRldik7CisJZWxzZQorCQlnZW5lcmljX2FkanVzdF9saW5rKGRldik7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZXAtPmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBmc19pbml0X3BoeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKworCWZlcC0+b2xkbGluayA9IDA7CisJZmVwLT5vbGRzcGVlZCA9IDA7CisJZmVwLT5vbGRkdXBsZXggPSAtMTsKKwlpZihmZXAtPmZwaS0+YnVzX2lkKQorCQlwaHlkZXYgPSBwaHlfY29ubmVjdChkZXYsIGZlcC0+ZnBpLT5idXNfaWQsICZmc19hZGp1c3RfbGluaywgMCk7CisJZWxzZSB7CisJCXByaW50aygiTm8gcGh5IGJ1cyBJRCBzcGVjaWZpZWQgaW4gQlNQIGNvZGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJaWYgKElTX0VSUihwaHlkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihwaHlkZXYpOworCX0KKworCWZlcC0+cGh5ZGV2ID0gcGh5ZGV2OworCisJcmV0dXJuIDA7Cit9CisKKwogc3RhdGljIGludCBmc19lbmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWNvbnN0IHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGkgPSBmZXAtPmZwaTsKIAlpbnQgcjsKKwlpbnQgZXJyOwogCiAJLyogSW5zdGFsbCBvdXIgaW50ZXJydXB0IGhhbmRsZXIuICovCiAJciA9IGZzX3JlcXVlc3RfaXJxKGRldiwgZmVwLT5pbnRlcnJ1cHQsICJmc19lbmV0LW1hYyIsIGZzX2VuZXRfaW50ZXJydXB0KTsKIAlpZiAociAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKLQkJICAgICAgICI6ICVzIENvdWxkIG5vdCBhbGxvY2F0ZSBGRUMgSVJRISIsIGRldi0+bmFtZSk7CisJCSAgICAgICAiOiAlcyBDb3VsZCBub3QgYWxsb2NhdGUgRlNfRU5FVCBJUlEhIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogSW5zdGFsbCBvdXIgcGh5IGludGVycnVwdCBoYW5kbGVyICovCi0JaWYgKGZwaS0+cGh5X2lycSAhPSAtMSkgeworCWVyciA9IGZzX2luaXRfcGh5KGRldik7CisJaWYoZXJyKQorCQlyZXR1cm4gZXJyOwogCi0JCXIgPSBmc19yZXF1ZXN0X2lycShkZXYsIGZwaS0+cGh5X2lycSwgImZzX2VuZXQtcGh5IiwgZnNfbWlpX2xpbmtfaW50ZXJydXB0KTsKLQkJaWYgKHIgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICI6ICVzIENvdWxkIG5vdCBhbGxvY2F0ZSBQSFkgSVJRISIsIGRldi0+bmFtZSk7Ci0JCQlmc19mcmVlX2lycShkZXYsIGZlcC0+aW50ZXJydXB0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JZnNfbWlpX3N0YXJ0dXAoZGV2KTsKLQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCWZzX21paV9saW5rX3N0YXR1c19jaGFuZ2VfY2hlY2soZGV2LCAxKTsKKwlwaHlfc3RhcnQoZmVwLT5waHlkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjksMjAgKzgyMSwxOSBAQAogc3RhdGljIGludCBmc19lbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljb25zdCBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpID0gZmVwLT5mcGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCWZzX21paV9zaHV0ZG93bihkZXYpOworCXBoeV9zdG9wKGZlcC0+cGh5ZGV2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPmxvY2ssIGZsYWdzKTsKIAkoKmZlcC0+b3BzLT5zdG9wKShkZXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlcC0+bG9jaywgZmxhZ3MpOwogCiAJLyogcmVsZWFzZSBhbnkgaXJxcyAqLwotCWlmIChmcGktPnBoeV9pcnEgIT0gLTEpCi0JCWZzX2ZyZWVfaXJxKGRldiwgZnBpLT5waHlfaXJxKTsKKwlwaHlfZGlzY29ubmVjdChmZXAtPnBoeWRldik7CisJZmVwLT5waHlkZXYgPSBOVUxMOwogCWZzX2ZyZWVfaXJxKGRldiwgZmVwLT5pbnRlcnJ1cHQpOwogCiAJcmV0dXJuIDA7CkBAIC04MzAsMzMgKzg4MSwxOSBAQAogc3RhdGljIGludCBmc19nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByYzsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IG1paV9ldGh0b29sX2dzZXQoJmZlcC0+bWlpX2lmLCBjbWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlcC0+bG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJjOworCXJldHVybiBwaHlfZXRodG9vbF9nc2V0KGZlcC0+cGh5ZGV2LCBjbWQpOwogfQogCiBzdGF0aWMgaW50IGZzX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZlcC0+bG9jaywgZmxhZ3MpOwotCXJjID0gbWlpX2V0aHRvb2xfc3NldCgmZmVwLT5taWlfaWYsIGNtZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVwLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmM7CisJcGh5X2V0aHRvb2xfc3NldChmZXAtPnBoeWRldiwgY21kKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmc19ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlyZXR1cm4gbWlpX253YXlfcmVzdGFydCgmZmVwLT5taWlfaWYpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdTMyIGZzX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtODcxLDcgKzkwOCw3IEBACiAJZmVwLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZnNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGZzX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGZzX2dldF9kcnZpbmZvLAogCS5nZXRfcmVnc19sZW4gPSBmc19nZXRfcmVnc19sZW4sCiAJLmdldF9zZXR0aW5ncyA9IGZzX2dldF9zZXR0aW5ncywKQEAgLTg5OCw3ICs5MzUsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPmxvY2ssIGZsYWdzKTsKLQlyYyA9IGdlbmVyaWNfbWlpX2lvY3RsKCZmZXAtPm1paV9pZiwgbWlpLCBjbWQsIE5VTEwpOworCXJjID0gcGh5X21paV9pb2N0bChmZXAtPnBoeWRldiwgbWlpLCBjbWQpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZlcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKIH0KQEAgLTEwMzAsMTIgKzEwNjcsNiBAQAogCX0KIAlyZWdpc3RlcmVkID0gMTsKIAotCWVyciA9IGZzX21paV9jb25uZWN0KG5kZXYpOwotCWlmIChlcnIgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCSAgICAgICAiOiAlcyBmc19taWlfY29ubmVjdCBmYWlsZWQuXG4iLCBuZGV2LT5uYW1lKTsKLQkJZ290byBlcnI7Ci0JfQogCiAJcmV0dXJuIG5kZXY7CiAKQEAgLTEwNzMsOCArMTEwNCw2IEBACiAKIAlmcGkgPSBmZXAtPmZwaTsKIAotCWZzX21paV9kaXNjb25uZWN0KG5kZXYpOwotCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKIAlkbWFfZnJlZV9jb2hlcmVudChmZXAtPmRldiwgKGZwaS0+dHhfcmluZyArIGZwaS0+cnhfcmluZykgKiBzaXplb2YoY2JkX3QpLApAQCAtMTE5NiwxNyArMTIyNSwzOSBAQAogCXIgPSBzZXR1cF9pbW1hcCgpOwogCWlmIChyICE9IDApCiAJCXJldHVybiByOwotCXIgPSBkcml2ZXJfcmVnaXN0ZXIoJmZzX2VuZXRfZmVjX2RyaXZlcik7Ci0JaWYgKHIgIT0gMCkKLQkJZ290byBlcnI7CiAKKyNpZmRlZiBDT05GSUdfRlNfRU5FVF9IQVNfRkNDCisJLyogbGV0J3MgaW5zZXJ0IG1paSBzdHVmZiAqLworCXIgPSBmc19lbmV0X21kaW9fYmJfaW5pdCgpOworCisJaWYgKHIgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCisJCQkiQkIgUEhZIGluaXQgZmFpbGVkLlxuIik7CisJCXJldHVybiByOworCX0KIAlyID0gZHJpdmVyX3JlZ2lzdGVyKCZmc19lbmV0X2ZjY19kcml2ZXIpOwogCWlmIChyICE9IDApCiAJCWdvdG8gZXJyOworI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDCisJciA9ICBmc19lbmV0X21kaW9fZmVjX2luaXQoKTsKKwlpZiAociAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKKwkJCSJGRUMgUEhZIGluaXQgZmFpbGVkLlxuIik7CisJCXJldHVybiByOworCX0KKworCXIgPSBkcml2ZXJfcmVnaXN0ZXIoJmZzX2VuZXRfZmVjX2RyaXZlcik7CisJaWYgKHIgIT0gMCkKKwkJZ290byBlcnI7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19GU19FTkVUX0hBU19TQ0MKIAlyID0gZHJpdmVyX3JlZ2lzdGVyKCZmc19lbmV0X3NjY19kcml2ZXIpOwogCWlmIChyICE9IDApCiAJCWdvdG8gZXJyOworI2VuZGlmCiAKIAlyZXR1cm4gMDsKIGVycjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1taWkuYyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1taWkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjdlNmUyMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWlpLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDUgKzAsMCBAQAotLyoKLSAqIENvbWJpbmVkIEV0aGVybmV0IGRyaXZlciBmb3IgTW90b3JvbGEgTVBDOHh4IGFuZCBNUEM4Mnh4LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJbnRyYWNvbSBTLkEuIAotICogIGJ5IFBhbnRlbGlzIEFudG9uaW91IDxwYW50b0BpbnRyYWNvbS5ncj4KLSAqIAotICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAKLSAqIFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KLSAqCi0gKiBIZWF2aWx5IGJhc2VkIG9uIG9yaWdpbmFsIEZFQyBkcml2ZXIgYnkgRGFuIE1hbGVrIDxkYW5AZW1iZWRkZWRlZGdlLmNvbT4KLSAqIGFuZCBtb2RpZmljYXRpb25zIGJ5IEpvYWtpbSBUamVybmx1bmQgPGpvYWtpbS50amVybmx1bmRAbHVtZW50aXMuc2U+Ci0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgCi0gKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSAKLSAqIGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvbWlpLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotI2luY2x1ZGUgImZzX2VuZXQuaCIKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiBHZW5lcmljIFBIWSBzdXBwb3J0LgotICogU2hvdWxkIHdvcmsgZm9yIGFsbCBQSFlzLCBidXQgbGluayBjaGFuZ2UgaXMgZGV0ZWN0ZWQgYnkgcG9sbGluZwotICovCi0KLXN0YXRpYyB2b2lkIGdlbmVyaWNfdGltZXJfY2FsbGJhY2sodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOwotCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlmZXAtPnBoeV90aW1lcl9saXN0LmV4cGlyZXMgPSBqaWZmaWVzICsgSFogLyAyOwotCi0JYWRkX3RpbWVyKCZmZXAtPnBoeV90aW1lcl9saXN0KTsKLQotCWZzX21paV9saW5rX3N0YXR1c19jaGFuZ2VfY2hlY2soZGV2LCAwKTsKLX0KLQotc3RhdGljIHZvaWQgZ2VuZXJpY19zdGFydHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWZlcC0+cGh5X3RpbWVyX2xpc3QuZXhwaXJlcyA9IGppZmZpZXMgKyBIWiAvIDI7CS8qIGV2ZXJ5IDUwMG1zICovCi0JZmVwLT5waHlfdGltZXJfbGlzdC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotCWZlcC0+cGh5X3RpbWVyX2xpc3QuZnVuY3Rpb24gPSBnZW5lcmljX3RpbWVyX2NhbGxiYWNrOwotCWFkZF90aW1lcigmZmVwLT5waHlfdGltZXJfbGlzdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGdlbmVyaWNfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZGVsX3RpbWVyX3N5bmMoJmZlcC0+cGh5X3RpbWVyX2xpc3QpOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBUaGUgRGF2aWNvbSBETTkxNjEgaXMgdXNlZCBvbiB0aGUgTkVUVEEgYm9hcmQJCQkgICAgICovCi0KLS8qIHJlZ2lzdGVyIGRlZmluaXRpb25zICovCi0KLSNkZWZpbmUgTUlJX0RNOTE2MV9BTkFSCQk0CS8qIEF1eC4gQ29uZmlnIFJlZ2lzdGVyICAgICAgICAgKi8KLSNkZWZpbmUgTUlJX0RNOTE2MV9BQ1IJCTE2CS8qIEF1eC4gQ29uZmlnIFJlZ2lzdGVyICAgICAgICAgKi8KLSNkZWZpbmUgTUlJX0RNOTE2MV9BQ1NSCQkxNwkvKiBBdXguIENvbmZpZy9TdGF0dXMgUmVnaXN0ZXIgICovCi0jZGVmaW5lIE1JSV9ETTkxNjFfMTBUQ1NSCTE4CS8qIDEwQmFzZVQgQ29uZmlnL1N0YXR1cyBSZWcuICAgKi8KLSNkZWZpbmUgTUlJX0RNOTE2MV9JTlRSCQkyMQkvKiBJbnRlcnJ1cHQgUmVnaXN0ZXIgICAgICAgICAgICovCi0jZGVmaW5lIE1JSV9ETTkxNjFfUkVDUgkJMjIJLyogUmVjZWl2ZSBFcnJvciBDb3VudGVyIFJlZy4gICAqLwotI2RlZmluZSBNSUlfRE05MTYxX0RJU0NSCTIzCS8qIERpc2Nvbm5lY3QgQ291bnRlciBSZWdpc3RlciAgKi8KLQotc3RhdGljIHZvaWQgZG05MTYxX3N0YXJ0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JZnNfbWlpX3dyaXRlKGRldiwgZmVwLT5taWlfaWYucGh5X2lkLCBNSUlfRE05MTYxX0lOVFIsIDB4MDAwMCk7Ci0JLyogU3RhcnQgYXV0b25lZ290aWF0aW9uICovCi0JZnNfbWlpX3dyaXRlKGRldiwgZmVwLT5taWlfaWYucGh5X2lkLCBNSUlfQk1DUiwgMHgxMjAwKTsKLQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlzY2hlZHVsZV90aW1lb3V0KEhaKjgpOwotfQotCi1zdGF0aWMgdm9pZCBkbTkxNjFfYWNrX2ludChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlmc19taWlfcmVhZChkZXYsIGZlcC0+bWlpX2lmLnBoeV9pZCwgTUlJX0RNOTE2MV9JTlRSKTsKLX0KLQotc3RhdGljIHZvaWQgZG05MTYxX3NodXRkb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQotCWZzX21paV93cml0ZShkZXYsIGZlcC0+bWlpX2lmLnBoeV9pZCwgTUlJX0RNOTE2MV9JTlRSLCAweDBmMDApOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlfaW5mbyBwaHlfaW5mb1tdID0gewotCXsKLQkJLmlkID0gMHgwMDE4MWI4OCwKLQkJLm5hbWUgPSAiRE05MTYxIiwKLQkJLnN0YXJ0dXAgPSBkbTkxNjFfc3RhcnR1cCwKLQkJLmFja19pbnQgPSBkbTkxNjFfYWNrX2ludCwKLQkJLnNodXRkb3duID0gZG05MTYxX3NodXRkb3duLAotCX0sIHsKLQkJLmlkID0gMCwKLQkJLm5hbWUgPSAiR0VORVJJQyIsCi0JCS5zdGFydHVwID0gZ2VuZXJpY19zdGFydHVwLAotCQkuc2h1dGRvd24gPSBnZW5lcmljX3NodXRkb3duLAotCX0sCi19OwotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBwaHlfaWRfZGV0ZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljb25zdCBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpID0gZmVwLT5mcGk7Ci0Jc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzID0gZmVwLT5taWlfYnVzOwotCWludCBpLCByLCBzdGFydCwgZW5kLCBwaHl0eXBlLCBwaHlzdWJ0eXBlOwotCWNvbnN0IHN0cnVjdCBwaHlfaW5mbyAqcGh5OwotCWludCBwaHlfaHdpZCwgcGh5X2lkOwotCi0JcGh5X2h3aWQgPSAtMTsKLQlmZXAtPnBoeSA9IE5VTEw7Ci0KLQkvKiBhdXRvLWRldGVjdD8gKi8KLQlpZiAoZnBpLT5waHlfYWRkciA9PSAtMSkgewotCQlzdGFydCA9IDE7Ci0JCWVuZCA9IDMyOwotCX0gZWxzZSB7CQkvKiBkaXJlY3QgKi8KLQkJc3RhcnQgPSBmcGktPnBoeV9hZGRyOwotCQllbmQgPSBzdGFydCArIDE7Ci0JfQotCi0JZm9yIChwaHlfaWQgPSBzdGFydDsgcGh5X2lkIDwgZW5kOyBwaHlfaWQrKykgewotCQkvKiBza2lwIGFscmVhZHkgdXNlZCBwaHkgYWRkcmVzc2VzIG9uIHRoaXMgYnVzICovIAotCQlpZiAoYnVzLT51c2FnZV9tYXAgJiAoMSA8PCBwaHlfaWQpKQotCQkJY29udGludWU7Ci0JCXIgPSBmc19taWlfcmVhZChkZXYsIHBoeV9pZCwgTUlJX1BIWVNJRDEpOwotCQlpZiAociA9PSAtMSB8fCAocGh5dHlwZSA9IChyICYgMHhmZmZmKSkgPT0gMHhmZmZmKQotCQkJY29udGludWU7Ci0JCXIgPSBmc19taWlfcmVhZChkZXYsIHBoeV9pZCwgTUlJX1BIWVNJRDIpOwotCQlpZiAociA9PSAtMSB8fCAocGh5c3VidHlwZSA9IChyICYgMHhmZmZmKSkgPT0gMHhmZmZmKQotCQkJY29udGludWU7Ci0JCXBoeV9od2lkID0gKHBoeXR5cGUgPDwgMTYpIHwgcGh5c3VidHlwZTsKLQkJaWYgKHBoeV9od2lkICE9IC0xKQotCQkJYnJlYWs7Ci0JfQotCi0JaWYgKHBoeV9od2lkID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKLQkJICAgICAgICI6ICVzIE5vIFBIWSBkZXRlY3RlZCEgcmFuZ2U9MHglMDJ4LTB4JTAyeFxuIiwKLQkJCWRldi0+bmFtZSwgc3RhcnQsIGVuZCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmb3IgKGkgPSAwLCBwaHkgPSBwaHlfaW5mbzsgaSA8IEFSUkFZX1NJWkUocGh5X2luZm8pOyBpKyssIHBoeSsrKQotCQlpZiAocGh5LT5pZCA9PSAocGh5X2h3aWQgPj4gNCkgfHwgcGh5LT5pZCA9PSAwKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA+PSBBUlJBWV9TSVpFKHBoeV9pbmZvKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCSAgICAgICAiOiAlcyBQSFkgaWQgMHglMDh4IGlzIG5vdCBzdXBwb3J0ZWQhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBwaHlfaHdpZCk7Ci0JCXJldHVybiAtMTsKLQl9Ci0KLQlmZXAtPnBoeSA9IHBoeTsKLQotCS8qIG1hcmsgdGhpcyBhZGRyZXNzIGFzIHVzZWQgKi8KLQlidXMtPnVzYWdlX21hcCB8PSAoMSA8PCBwaHlfaWQpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBEUlZfTU9EVUxFX05BTUUKLQkgICAgICAgIjogJXMgUGh5IEAgMHgleCwgdHlwZSAlcyAoMHglMDh4KSVzXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHBoeV9pZCwgZmVwLT5waHktPm5hbWUsIHBoeV9od2lkLAotCSAgICAgICBmcGktPnBoeV9hZGRyID09IC0xID8gIiAoYXV0by1kZXRlY3RlZCkiIDogIiIpOwotCi0JcmV0dXJuIHBoeV9pZDsKLX0KLQotdm9pZCBmc19taWlfc3RhcnR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZmVwLT5waHktPnN0YXJ0dXApCi0JCSgqZmVwLT5waHktPnN0YXJ0dXApIChkZXYpOwotfQotCi12b2lkIGZzX21paV9zaHV0ZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlpZiAoZmVwLT5waHktPnNodXRkb3duKQotCQkoKmZlcC0+cGh5LT5zaHV0ZG93bikgKGRldik7Ci19Ci0KLXZvaWQgZnNfbWlpX2Fja19pbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JaWYgKGZlcC0+cGh5LT5hY2tfaW50KQotCQkoKmZlcC0+cGh5LT5hY2tfaW50KSAoZGV2KTsKLX0KLQotI2RlZmluZSBNSUlfTElOSwkweDAwMDEKLSNkZWZpbmUgTUlJX0hBTEYJMHgwMDAyCi0jZGVmaW5lIE1JSV9GVUxMCTB4MDAwNAotI2RlZmluZSBNSUlfQkFTRTQJMHgwMDA4Ci0jZGVmaW5lIE1JSV8xME0JCTB4MDAxMAotI2RlZmluZSBNSUlfMTAwTQkweDAwMjAKLSNkZWZpbmUgTUlJXzFHCQkweDAwNDAKLSNkZWZpbmUgTUlJXzEwRwkJMHgwMDgwCi0KLS8qIHJldHVybiBmdWxsIG1paSBpbmZvIGF0IG9uZSBndWxwLCB3aXRoIGEgdXNhYmxlIGZvcm0gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWlpX2Z1bGxfc3RhdHVzKHN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpKQotewotCXVuc2lnbmVkIGludCBzdGF0dXM7Ci0JaW50IGJtc3IsIGFkdiwgbHBhLCBuZWc7Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSogZmVwID0gbmV0ZGV2X3ByaXYobWlpLT5kZXYpOwotCQotCS8qIGZpcnN0LCBhIGR1bW15IHJlYWQsIG5lZWRlZCB0byBsYXRjaCBzb21lIE1JSSBwaHlzICovCi0JKHZvaWQpbWlpLT5tZGlvX3JlYWQobWlpLT5kZXYsIG1paS0+cGh5X2lkLCBNSUlfQk1TUik7Ci0JYm1zciA9IG1paS0+bWRpb19yZWFkKG1paS0+ZGV2LCBtaWktPnBoeV9pZCwgTUlJX0JNU1IpOwotCi0JLyogbm8gbGluayAqLwotCWlmICgoYm1zciAmIEJNU1JfTFNUQVRVUykgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlzdGF0dXMgPSBNSUlfTElOSzsKLQkKLQkvKiBMZXRzIGxvb2sgd2hhdCBBTkVHIHNheXMgaWYgaXQncyBzdXBwb3J0ZWQgLSBvdGhlcndpemUgd2Ugc2hhbGwKLQkgICB0YWtlIHRoZSByaWdodCB2YWx1ZXMgZnJvbSB0aGUgcGxhdGZvcm0gaW5mbyovCi0JaWYoIW1paS0+Zm9yY2VfbWVkaWEpIHsKLQkJLyogYXV0b25lZyBub3QgY29tcGxldGVkOyBkb24ndCBib3RoZXIgKi8KLQkJaWYgKChibXNyICYgQk1TUl9BTkVHQ09NUExFVEUpID09IDApCi0JCQlyZXR1cm4gMDsKLQotCQlhZHYgPSAoKm1paS0+bWRpb19yZWFkKShtaWktPmRldiwgbWlpLT5waHlfaWQsIE1JSV9BRFZFUlRJU0UpOwotCQlscGEgPSAoKm1paS0+bWRpb19yZWFkKShtaWktPmRldiwgbWlpLT5waHlfaWQsIE1JSV9MUEEpOwotCi0JCW5lZyA9IGxwYSAmIGFkdjsKLQl9IGVsc2UgewotCQluZWcgPSBmZXAtPmZwaS0+YnVzX2luZm8tPmxwYTsKLQl9Ci0KLQlpZiAobmVnICYgTFBBXzEwMEZVTEwpCi0JCXN0YXR1cyB8PSBNSUlfRlVMTCB8IE1JSV8xMDBNOwotCWVsc2UgaWYgKG5lZyAmIExQQV8xMDBCQVNFNCkKLQkJc3RhdHVzIHw9IE1JSV9GVUxMIHwgTUlJX0JBU0U0IHwgTUlJXzEwME07Ci0JZWxzZSBpZiAobmVnICYgTFBBXzEwMEhBTEYpCi0JCXN0YXR1cyB8PSBNSUlfSEFMRiB8IE1JSV8xMDBNOwotCWVsc2UgaWYgKG5lZyAmIExQQV8xMEZVTEwpCi0JCXN0YXR1cyB8PSBNSUlfRlVMTCB8IE1JSV8xME07Ci0JZWxzZQotCQlzdGF0dXMgfD0gTUlJX0hBTEYgfCBNSUlfMTBNOwotCQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXZvaWQgZnNfbWlpX2xpbmtfc3RhdHVzX2NoYW5nZV9jaGVjayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5pdF9tZWRpYSkKLXsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBtaWlfaWZfaW5mbyAqbWlpID0gJmZlcC0+bWlpX2lmOwotCXVuc2lnbmVkIGludCBtaWlfc3RhdHVzOwotCWludCBva190b19wcmludCwgbGluaywgZHVwbGV4LCBzcGVlZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jb2tfdG9fcHJpbnQgPSBuZXRpZl9tc2dfbGluayhmZXApOwotCi0JbWlpX3N0YXR1cyA9IG1paV9mdWxsX3N0YXR1cyhtaWkpOwotCi0JaWYgKCFpbml0X21lZGlhICYmIG1paV9zdGF0dXMgPT0gZmVwLT5sYXN0X21paV9zdGF0dXMpCi0JCXJldHVybjsKLQotCWZlcC0+bGFzdF9taWlfc3RhdHVzID0gbWlpX3N0YXR1czsKLQotCWxpbmsgPSAhIShtaWlfc3RhdHVzICYgTUlJX0xJTkspOwotCWR1cGxleCA9ICEhKG1paV9zdGF0dXMgJiBNSUlfRlVMTCk7Ci0Jc3BlZWQgPSAobWlpX3N0YXR1cyAmIE1JSV8xMDBNKSA/IDEwMCA6IDEwOwotCi0JaWYgKGxpbmsgPT0gMCkgewotCQluZXRpZl9jYXJyaWVyX29mZihtaWktPmRldik7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJaWYgKCFpbml0X21lZGlhKSB7Ci0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZmVwLT5sb2NrLCBmbGFncyk7Ci0JCQkoKmZlcC0+b3BzLT5zdG9wKShkZXYpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmVwLT5sb2NrLCBmbGFncyk7Ci0JCX0KLQotCQlpZiAob2tfdG9fcHJpbnQpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duXG4iLCBtaWktPmRldi0+bmFtZSk7Ci0KLQl9IGVsc2UgewotCi0JCW1paS0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7Ci0KLQkJbmV0aWZfY2Fycmllcl9vbihtaWktPmRldik7Ci0KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmZlcC0+bG9jaywgZmxhZ3MpOwotCQlmZXAtPmR1cGxleCA9IGR1cGxleDsKLQkJZmVwLT5zcGVlZCA9IHNwZWVkOwotCQkoKmZlcC0+b3BzLT5yZXN0YXJ0KShkZXYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZXAtPmxvY2ssIGZsYWdzKTsKLQotCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCi0JCWlmIChva190b19wcmludCkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIHVwLCAlZE1icHMsICVzLWR1cGxleFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHNwZWVkLCBkdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpOwotCX0KLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBmc19taWlfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCi17Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZnNfZW5ldF9taWlfYnVzICpidXMgPSBmZXAtPm1paV9idXM7Ci0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVzLT5taWlfbG9jaywgZmxhZ3MpOwotCXJldCA9ICgqYnVzLT5taWlfcmVhZCkoYnVzLCBwaHlfaWQsIGxvY2F0aW9uKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXMtPm1paV9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIGZzX21paV93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cyA9IGZlcC0+bWlpX2J1czsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmJ1cy0+bWlpX2xvY2ssIGZsYWdzKTsKLQkoKmJ1cy0+bWlpX3dyaXRlKShidXMsIHBoeV9pZCwgbG9jYXRpb24sIHZhbHVlKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZidXMtPm1paV9sb2NrLCBmbGFncyk7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogbGlzdCBvZiBhbGwgcmVnaXN0ZXJlZCBtaWkgYnVzZXMgKi8KLXN0YXRpYyBMSVNUX0hFQUQoZnNfbWlpX2J1c19saXN0KTsKLQotc3RhdGljIHN0cnVjdCBmc19lbmV0X21paV9idXMgKmxvb2t1cF9idXMoaW50IG1ldGhvZCwgaW50IGlkKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnB0cjsKLQlzdHJ1Y3QgZnNfZW5ldF9taWlfYnVzICpidXM7Ci0KLQlsaXN0X2Zvcl9lYWNoKHB0ciwgJmZzX21paV9idXNfbGlzdCkgewotCQlidXMgPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IGZzX2VuZXRfbWlpX2J1cywgbGlzdCk7Ci0JCWlmIChidXMtPmJ1c19pbmZvLT5tZXRob2QgPT0gbWV0aG9kICYmCi0JCQlidXMtPmJ1c19pbmZvLT5pZCA9PSBpZCkKLQkJCXJldHVybiBidXM7Ci0JfQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqY3JlYXRlX2J1cyhjb25zdCBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvICpiaSkKLXsKLQlzdHJ1Y3QgZnNfZW5ldF9taWlfYnVzICpidXM7Ci0JaW50IHJldCA9IDA7Ci0KLQlidXMgPSBrbWFsbG9jKHNpemVvZigqYnVzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGJ1cyA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOwotCX0KLQltZW1zZXQoYnVzLCAwLCBzaXplb2YoKmJ1cykpOwotCXNwaW5fbG9ja19pbml0KCZidXMtPm1paV9sb2NrKTsKLQlidXMtPmJ1c19pbmZvID0gYmk7Ci0JYnVzLT5yZWZzID0gMDsKLQlidXMtPnVzYWdlX21hcCA9IDA7Ci0KLQkvKiBwZXJmb3JtIGluaXRpYWxpemF0aW9uICovCi0Jc3dpdGNoIChiaS0+bWV0aG9kKSB7Ci0KLQkJY2FzZSBmc21paV9maXhlZDoKLQkJCXJldCA9IGZzX21paV9maXhlZF9pbml0KGJ1cyk7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJZ290byBlcnI7Ci0JCQlicmVhazsKLQotCQljYXNlIGZzbWlpX2JpdGJhbmc6Ci0JCQlyZXQgPSBmc19taWlfYml0YmFuZ19pbml0KGJ1cyk7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJZ290byBlcnI7Ci0JCQlicmVhazsKLSNpZmRlZiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDCi0JCWNhc2UgZnNtaWlfZmVjOgotCQkJcmV0ID0gZnNfbWlpX2ZlY19pbml0KGJ1cyk7Ci0JCQlpZiAocmV0ICE9IDApCi0JCQkJZ290byBlcnI7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVJTlZBTDsKLQkJCWdvdG8gZXJyOwotCX0KLQotCWxpc3RfYWRkKCZidXMtPmxpc3QsICZmc19taWlfYnVzX2xpc3QpOwotCi0JcmV0dXJuIGJ1czsKLQotZXJyOgotCWtmcmVlKGJ1cyk7Ci0JcmV0dXJuIEVSUl9QVFIocmV0KTsKLX0KLQotc3RhdGljIHZvaWQgZGVzdHJveV9idXMoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzKQotewotCS8qIHJlbW92ZSBmcm9tIGJ1cyBsaXN0ICovCi0JbGlzdF9kZWwoJmJ1cy0+bGlzdCk7Ci0KLQkvKiBub3RoaW5nIG1vcmUgbmVlZGVkICovCi0Ja2ZyZWUoYnVzKTsKLX0KLQotaW50IGZzX21paV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQljb25zdCBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpID0gZmVwLT5mcGk7Ci0Jc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzID0gTlVMTDsKLQotCS8qIGNoZWNrIG1ldGhvZCB2YWxpZGl0eSAqLwotCXN3aXRjaCAoZnBpLT5idXNfaW5mby0+bWV0aG9kKSB7Ci0JCWNhc2UgZnNtaWlfZml4ZWQ6Ci0JCWNhc2UgZnNtaWlfYml0YmFuZzoKLQkJCWJyZWFrOwotI2lmZGVmIENPTkZJR19GU19FTkVUX0hBU19GRUMKLQkJY2FzZSBmc21paV9mZWM6Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICI6ICVzIFVua25vd24gTUlJIGJ1cyBtZXRob2QgKCVkKSFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBmcGktPmJ1c19pbmZvLT5tZXRob2QpOwotCQkJcmV0dXJuIC1FSU5WQUw7IAotCX0KLQotCWJ1cyA9IGxvb2t1cF9idXMoZnBpLT5idXNfaW5mby0+bWV0aG9kLCBmcGktPmJ1c19pbmZvLT5pZCk7Ci0KLQkvKiBpZiBub3QgZm91bmQgY3JlYXRlIG5ldyBidXMgKi8KLQlpZiAoYnVzID09IE5VTEwpIHsKLQkJYnVzID0gY3JlYXRlX2J1cyhmcGktPmJ1c19pbmZvKTsKLQkJaWYgKElTX0VSUihidXMpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCQkgICAgICAgIjogJXMgTUlJIGJ1cyBjcmVhdGlvbiBmYWlsdXJlIVxuIiwgZGV2LT5uYW1lKTsKLQkJCXJldHVybiBQVFJfRVJSKGJ1cyk7Ci0JCX0KLQl9Ci0KLQlidXMtPnJlZnMrKzsKLQotCWZlcC0+bWlpX2J1cyA9IGJ1czsKLQotCWZlcC0+bWlpX2lmLmRldiA9IGRldjsKLQlmZXAtPm1paV9pZi5waHlfaWRfbWFzayA9IDB4MWY7Ci0JZmVwLT5taWlfaWYucmVnX251bV9tYXNrID0gMHgxZjsKLQlmZXAtPm1paV9pZi5tZGlvX3JlYWQgPSBmc19taWlfcmVhZDsKLQlmZXAtPm1paV9pZi5tZGlvX3dyaXRlID0gZnNfbWlpX3dyaXRlOwotCWZlcC0+bWlpX2lmLmZvcmNlX21lZGlhID0gZnBpLT5idXNfaW5mby0+ZGlzYWJsZV9hbmVnOwotCWZlcC0+bWlpX2lmLnBoeV9pZCA9IHBoeV9pZF9kZXRlY3QoZGV2KTsKLQotCXJldHVybiAwOwotfQotCi12b2lkIGZzX21paV9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZnNfZW5ldF9taWlfYnVzICpidXMgPSBOVUxMOwotCi0JYnVzID0gZmVwLT5taWlfYnVzOwotCWZlcC0+bWlpX2J1cyA9IE5VTEw7Ci0KLQlpZiAoLS1idXMtPnJlZnMgPD0gMCkKLQkJZGVzdHJveV9idXMoYnVzKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKaW5kZXggZTdlYzk2Yy4uOTUwMjJjMDA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaAorKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaApAQCAtNSw2ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2ZzX2VuZXRfcGQuaD4KIApAQCAtMTIsMTIgKzEzLDMwIEBACiAKICNpZmRlZiBDT05GSUdfQ1BNMQogI2luY2x1ZGUgPGFzbS9jb21tcHJvYy5oPgorCitzdHJ1Y3QgZmVjX2luZm8geworICAgICAgICBmZWNfdCogIGZlY3A7CisJdTMyICAgICBtaWlfc3BlZWQ7Cit9OwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQ1BNMgogI2luY2x1ZGUgPGFzbS9jcG0yLmg+CiAjZW5kaWYKIAorLyogVGhpcyBpcyB1c2VkIHRvIG9wZXJhdGUgd2l0aCBwaW5zLgorICBOb3RlIHRoYXQgdGhlIGFjdHVhbCBwb3J0IHNpemUgbWF5CisgICAgYmUgZGlmZmVyZW50OyBjcG0ocykgaGFuZGxlIGl0IE9LICAqLworc3RydWN0IGJiX2luZm8geworCXU4IG1kaW9fZGF0X21zazsKKwl1OCBtZGlvX2Rpcl9tc2s7CisJdTggKm1kaW9fZGlyOworCXU4ICptZGlvX2RhdDsKKwl1OCBtZGNfbXNrOworCXU4ICptZGNfZGF0OworCWludCBkZWxheTsKK307CisKIC8qIGh3IGRyaXZlciBvcHMgKi8KIHN0cnVjdCBmc19vcHMgewogCWludCAoKnNldHVwX2RhdGEpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMjUsNiArNDQsNyBAQAogCXZvaWQgKCpmcmVlX2JkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl2b2lkICgqY2xlYW51cF9kYXRhKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl2b2lkICgqc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwl2b2lkICgqYWRqdXN0X2xpbmspKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCXZvaWQgKCpyZXN0YXJ0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl2b2lkICgqc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAJdm9pZCAoKnByZV9yZXF1ZXN0X2lycSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlycSk7CkBAIC0xMDAsMTAgKzEyMCw2IEBACiAJfTsKIH07CiAKLWludCBmc19taWlfYml0YmFuZ19pbml0KHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cyk7Ci1pbnQgZnNfbWlpX2ZpeGVkX2luaXQoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzKTsKLWludCBmc19taWlfZmVjX2luaXQoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzKTsKLQogc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSB7CiAJc3RydWN0IGRldmljZSAqZGV2OwkvKiBwb2ludGVyIGJhY2sgdG8gdGhlIGRldmljZSAobXVzdCBiZSBpbml0aWFsaXplZCBmaXJzdCkgKi8KIAlzcGlubG9ja190IGxvY2s7CS8qIGR1cmluZyBhbGwgb3BzIGV4Y2VwdCBUWCBwY2t0IHByb2Nlc3NpbmcgKi8KQEAgLTEzMCw3ICsxNDYsOCBAQAogCXN0cnVjdCBmc19lbmV0X21paV9idXMgKm1paV9idXM7CiAJaW50IGludGVycnVwdDsKIAotCWludCBkdXBsZXgsIHNwZWVkOwkvKiBjdXJyZW50IHNldHRpbmdzICovCisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwlpbnQgb2xkZHVwbGV4LCBvbGRzcGVlZCwgb2xkbGluazsJLyogY3VycmVudCBzZXR0aW5ncyAqLwogCiAJLyogZXZlbnQgbWFza3MgKi8KIAl1MzIgZXZfbmFwaV9yeDsJCS8qIG1hc2sgb2YgTkFQSSByeCBldmVudHMgKi8KQEAgLTE2OCwxNSArMTg1LDkgQEAKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWludCBmc19taWlfcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwotdm9pZCBmc19taWlfd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpOwotCi12b2lkIGZzX21paV9zdGFydHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBmc19taWlfc2h1dGRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIGZzX21paV9hY2tfaW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi12b2lkIGZzX21paV9saW5rX3N0YXR1c19jaGFuZ2VfY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGluaXRfbWVkaWEpOworaW50IGZzX2VuZXRfbWRpb19iYl9pbml0KHZvaWQpOworaW50IGZzX21paV9maXhlZF9pbml0KHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cyk7CitpbnQgZnNfZW5ldF9tZGlvX2ZlY19pbml0KHZvaWQpOwogCiB2b2lkIGZzX2luaXRfYmRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBmc19jbGVhbnVwX2JkcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTE5NCw3ICsyMDUsNiBAQAogdm9pZCBmc19lbmV0X3BsYXRmb3JtX2NsZWFudXAodm9pZCk7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KIC8qIGJ1ZmZlciBkZXNjcmlwdG9yIGFjY2VzcyBtYWNyb3MgKi8KIAogLyogYWNjZXNzIG1hY3JvcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYwppbmRleCA2NGUyMDk4Li4xZmYyNTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mY2MuYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNpbmNsdWRlIDxhc20vaW1tYXBfY3BtMi5oPgogI2luY2x1ZGUgPGFzbS9tcGM4MjYwLmg+CkBAIC0xMjIsMjIgKzEyMywzMiBAQAogCiAJLyogQXR0YWNoIHRoZSBtZW1vcnkgZm9yIHRoZSBGQ0MgUGFyYW1ldGVyIFJBTSAqLwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAiZmNjX3ByYW0iKTsKLQlmZXAtPmZjYy5lcCA9ICh2b2lkICopci0+c3RhcnQ7Ci0KKwlmZXAtPmZjYy5lcCA9ICh2b2lkICopaW9yZW1hcChyLT5zdGFydCwgci0+ZW5kIC0gci0+c3RhcnQgKyAxKTsKIAlpZiAoZmVwLT5mY2MuZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgImZjY19yZWdzIik7Ci0JZmVwLT5mY2MuZmNjcCA9ICh2b2lkICopci0+c3RhcnQ7Ci0KKwlmZXAtPmZjYy5mY2NwID0gKHZvaWQgKilpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOwogCWlmIChmZXAtPmZjYy5mY2NwID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmVwLT5mY2MuZmNjY3AgPSAodm9pZCAqKWZlcC0+ZnBpLT5mY2NfcmVnc19jOworCWlmIChmZXAtPmZwaS0+ZmNjX3JlZ3NfYykgeworCisJCWZlcC0+ZmNjLmZjY2NwID0gKHZvaWQgKilmZXAtPmZwaS0+ZmNjX3JlZ3NfYzsKKwl9IGVsc2UgeworCQlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwKKwkJCQkiZmNjX3JlZ3NfYyIpOworCQlmZXAtPmZjYy5mY2NjcCA9ICh2b2lkICopaW9yZW1hcChyLT5zdGFydCwKKwkJCQlyLT5lbmQgLSByLT5zdGFydCArIDEpOworCX0KIAogCWlmIChmZXAtPmZjYy5mY2NjcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWZlcC0+ZmNjLm1lbSA9ICh2b2lkICopZmVwLT5mcGktPm1lbV9vZmZzZXQ7CisJaWYgKGZlcC0+ZmNjLm1lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldHVybiAwOwogfQogCkBAIC0xNTUsOCArMTY2LDYgQEAKIAlpZiAoKHVuc2lnbmVkIGludClmZXAtPmZjYy5pZHggPj0gMykJLyogbWF4IDMgRkNDcyAqLwogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZlcC0+ZmNjLm1lbSA9ICh2b2lkICopZnBpLT5tZW1fb2Zmc2V0OwotCiAJaWYgKGRvX3BkX3NldHVwKGZlcCkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTM5NCw3ICs0MDMsNyBAQAogCiAJLyogYWRqdXN0IHRvIHNwZWVkIChmb3IgUk1JSSBtb2RlKSAqLwogCWlmIChmcGktPnVzZV9ybWlpKSB7Ci0JCWlmIChmZXAtPnNwZWVkID09IDEwMCkKKwkJaWYgKGZlcC0+cGh5ZGV2LT5zcGVlZCA9PSAxMDApCiAJCQlDOChmY2NjcCwgZmNjX2dmZW1yLCAweDIwKTsKIAkJZWxzZQogCQkJUzgoZmNjY3AsIGZjY19nZmVtciwgMHgyMCk7CkBAIC00MjAsNyArNDI5LDcgQEAKIAkJUzMyKGZjY3AsIGZjY19mcHNtciwgRkNDX1BTTVJfUk1JSSk7CiAKIAkvKiBhZGp1c3QgdG8gZHVwbGV4IG1vZGUgKi8KLQlpZiAoZmVwLT5kdXBsZXgpCisJaWYgKGZlcC0+cGh5ZGV2LT5kdXBsZXgpCiAJCVMzMihmY2NwLCBmY2NfZnBzbXIsIEZDQ19QU01SX0ZERSB8IEZDQ19QU01SX0xQQik7CiAJZWxzZQogCQlDMzIoZmNjcCwgZmNjX2Zwc21yLCBGQ0NfUFNNUl9GREUgfCBGQ0NfUFNNUl9MUEIpOwpAQCAtNDg2LDcgKzQ5NSwxMCBAQAogCiBzdGF0aWMgdm9pZCB0eF9raWNrc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQkvKiBub3RoaW5nICovCisJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlmY2NfdCAqZmNjcCA9IGZlcC0+ZmNjLmZjY3A7CisKKwlTMzIoZmNjcCwgZmNjX2Z0b2RyLCAweDgwKTsKIH0KIAogc3RhdGljIHUzMiBnZXRfaW50X2V2ZW50cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCBlMDk1NDcwLi5jMmM1ZmQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtNDYsNiArNDYsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJmc19lbmV0LmgiCisjaW5jbHVkZSAiZmVjLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCkBAIC03NSw1MCArNzYsOCBAQAogLyogY2xlYXIgYml0cyAqLwogI2RlZmluZSBGQyhfZmVjcCwgX3JlZywgX3YpIEZXKF9mZWNwLCBfcmVnLCBGUihfZmVjcCwgX3JlZykgJiB+KF92KSkKIAotCi0vKiBDUkMgcG9seW5vbWl1bSB1c2VkIGJ5IHRoZSBGRUMgZm9yIHRoZSBtdWx0aWNhc3QgZ3JvdXAgZmlsdGVyaW5nICovCi0jZGVmaW5lIEZFQ19DUkNfUE9MWSAgIDB4MDRDMTFEQjcKLQotI2RlZmluZSBGRUNfTUFYX01VTFRJQ0FTVF9BRERSUwk2NAotCi0vKiBJbnRlcnJ1cHQgZXZlbnRzL21hc2tzLgotKi8KLSNkZWZpbmUgRkVDX0VORVRfSEJFUlIJMHg4MDAwMDAwMFUJLyogSGVhcnRiZWF0IGVycm9yICAgICAgICAgICovCi0jZGVmaW5lIEZFQ19FTkVUX0JBQlIJMHg0MDAwMDAwMFUJLyogQmFiYmxpbmcgcmVjZWl2ZXIgICAgICAgICovCi0jZGVmaW5lIEZFQ19FTkVUX0JBQlQJMHgyMDAwMDAwMFUJLyogQmFiYmxpbmcgdHJhbnNtaXR0ZXIgICAgICovCi0jZGVmaW5lIEZFQ19FTkVUX0dSQQkweDEwMDAwMDAwVQkvKiBHcmFjZWZ1bCBzdG9wIGNvbXBsZXRlICAgKi8KLSNkZWZpbmUgRkVDX0VORVRfVFhGCTB4MDgwMDAwMDBVCS8qIEZ1bGwgZnJhbWUgdHJhbnNtaXR0ZWQgICAqLwotI2RlZmluZSBGRUNfRU5FVF9UWEIJMHgwNDAwMDAwMFUJLyogQSBidWZmZXIgd2FzIHRyYW5zbWl0dGVkICovCi0jZGVmaW5lIEZFQ19FTkVUX1JYRgkweDAyMDAwMDAwVQkvKiBGdWxsIGZyYW1lIHJlY2VpdmVkICAgICAgKi8KLSNkZWZpbmUgRkVDX0VORVRfUlhCCTB4MDEwMDAwMDBVCS8qIEEgYnVmZmVyIHdhcyByZWNlaXZlZCAgICAqLwotI2RlZmluZSBGRUNfRU5FVF9NSUkJMHgwMDgwMDAwMFUJLyogTUlJIGludGVycnVwdCAgICAgICAgICAgICovCi0jZGVmaW5lIEZFQ19FTkVUX0VCRVJSCTB4MDA0MDAwMDBVCS8qIFNETUEgYnVzIGVycm9yICAgICAgICAgICAqLwotCi0jZGVmaW5lIEZFQ19FQ05UUkxfUElOTVVYCTB4MDAwMDAwMDQKLSNkZWZpbmUgRkVDX0VDTlRSTF9FVEhFUl9FTgkweDAwMDAwMDAyCi0jZGVmaW5lIEZFQ19FQ05UUkxfUkVTRVQJMHgwMDAwMDAwMQotCi0jZGVmaW5lIEZFQ19SQ05UUkxfQkNfUkVKCTB4MDAwMDAwMTAKLSNkZWZpbmUgRkVDX1JDTlRSTF9QUk9NCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEZFQ19SQ05UUkxfTUlJX01PREUJMHgwMDAwMDAwNAotI2RlZmluZSBGRUNfUkNOVFJMX0RSVAkJMHgwMDAwMDAwMgotI2RlZmluZSBGRUNfUkNOVFJMX0xPT1AJCTB4MDAwMDAwMDEKLQotI2RlZmluZSBGRUNfVENOVFJMX0ZERU4JCTB4MDAwMDAwMDQKLSNkZWZpbmUgRkVDX1RDTlRSTF9IQkMJCTB4MDAwMDAwMDIKLSNkZWZpbmUgRkVDX1RDTlRSTF9HVFMJCTB4MDAwMDAwMDEKLQotCi0vKiBNYWtlIE1JSSByZWFkL3dyaXRlIGNvbW1hbmRzIGZvciB0aGUgRkVDLgotKi8KLSNkZWZpbmUgbWtfbWlpX3JlYWQoUkVHKQkoMHg2MDAyMDAwMCB8ICgoUkVHICYgMHgxZikgPDwgMTgpKQotI2RlZmluZSBta19taWlfd3JpdGUoUkVHLCBWQUwpCSgweDUwMDIwMDAwIHwgKChSRUcgJiAweDFmKSA8PCAxOCkgfCAoVkFMICYgMHhmZmZmKSkKLSNkZWZpbmUgbWtfbWlpX2VuZAkJMAotCi0jZGVmaW5lIEZFQ19NSUlfTE9PUFMJMTAwMDAKLQogLyoKLSAqIERlbGF5IHRvIHdhaXQgZm9yIEZFQyByZXNldCBjb21tYW5kIHRvIGNvbXBsZXRlIChpbiB1cykgCisgKiBEZWxheSB0byB3YWl0IGZvciBGRUMgcmVzZXQgY29tbWFuZCB0byBjb21wbGV0ZSAoaW4gdXMpCiAgKi8KICNkZWZpbmUgRkVDX1JFU0VUX0RFTEFZCQk1MAogCkBAIC0zMDMsMTMgKzI2MiwxNSBAQAogCWludCByOwogCXUzMiBhZGRyaGksIGFkZHJsbzsKIAorCXN0cnVjdCBtaWlfYnVzKiBtaWkgPSBmZXAtPnBoeWRldi0+YnVzOworCXN0cnVjdCBmZWNfaW5mbyogZmVjX2luZiA9IG1paS0+cHJpdjsKKwogCXIgPSB3aGFja19yZXNldChmZXAtPmZlYy5mZWNwKTsKIAlpZiAociAhPSAwKQogCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCiAJCQkJIjogJXMgRkVDIFJlc2V0IEZBSUxFRCFcbiIsIGRldi0+bmFtZSk7Ci0KIAkvKgotCSAqIFNldCBzdGF0aW9uIGFkZHJlc3MuIAorCSAqIFNldCBzdGF0aW9uIGFkZHJlc3MuCiAJICovCiAJYWRkcmhpID0gKCh1MzIpIGRldi0+ZGV2X2FkZHJbMF0gPDwgMjQpIHwKIAkJICgodTMyKSBkZXYtPmRldl9hZGRyWzFdIDw8IDE2KSB8CkBAIC0zNTAsMTIgKzMxMSwxMiBAQAogCUZXKGZlY3AsIGZ1bl9jb2RlLCAweDc4MDAwMDAwKTsKIAogCS8qCi0JICogU2V0IE1JSSBzcGVlZC4gCisJICogU2V0IE1JSSBzcGVlZC4KIAkgKi8KLQlGVyhmZWNwLCBtaWlfc3BlZWQsIGZlcC0+bWlpX2J1cy0+ZmVjLm1paV9zcGVlZCk7CisJRlcoZmVjcCwgbWlpX3NwZWVkLCBmZWNfaW5mLT5taWlfc3BlZWQpOwogCiAJLyoKLQkgKiBDbGVhciBhbnkgb3V0c3RhbmRpbmcgaW50ZXJydXB0LiAKKwkgKiBDbGVhciBhbnkgb3V0c3RhbmRpbmcgaW50ZXJydXB0LgogCSAqLwogCUZXKGZlY3AsIGlldmVudCwgMHhmZmMwKTsKIAlGVyhmZWNwLCBpdmVjLCAoZmVwLT5pbnRlcnJ1cHQgLyAyKSA8PCAyOSk7CkBAIC0zOTAsMTEgKzM1MSwxMiBAQAogCX0KICNlbmRpZgogCisKIAlGVyhmZWNwLCByX2NudHJsLCBGRUNfUkNOVFJMX01JSV9NT0RFKTsJLyogTUlJIGVuYWJsZSAqLwogCS8qCi0JICogYWRqdXN0IHRvIGR1cGxleCBtb2RlIAorCSAqIGFkanVzdCB0byBkdXBsZXggbW9kZQogCSAqLwotCWlmIChmZXAtPmR1cGxleCkgeworCWlmIChmZXAtPnBoeWRldi0+ZHVwbGV4KSB7CiAJCUZDKGZlY3AsIHJfY250cmwsIEZFQ19SQ05UUkxfRFJUKTsKIAkJRlMoZmVjcCwgeF9jbnRybCwgRkVDX1RDTlRSTF9GREVOKTsJLyogRkQgZW5hYmxlICovCiAJfSBlbHNlIHsKQEAgLTQxOCw5ICszODAsMTEgQEAKIHN0YXRpYyB2b2lkIHN0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWNvbnN0IHN0cnVjdCBmc19wbGF0Zm9ybV9pbmZvICpmcGkgPSBmZXAtPmZwaTsKIAlmZWNfdCAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7Ci0Jc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzID0gZmVwLT5taWlfYnVzOwotCWNvbnN0IHN0cnVjdCBmc19taWlfYnVzX2luZm8gKmJpID0gYnVzLT5idXNfaW5mbzsKKworCXN0cnVjdCBmZWNfaW5mbyogZmVjaT0gZmVwLT5waHlkZXYtPmJ1cy0+cHJpdjsKKwogCWludCBpOwogCiAJaWYgKChGUihmZWNwLCBlY250cmwpICYgRkVDX0VDTlRSTF9FVEhFUl9FTikgPT0gMCkKQEAgLTQ0NCwxMSArNDA4LDExIEBACiAJZnNfY2xlYW51cF9iZHMoZGV2KTsKIAogCS8qIHNodXQgZG93biBGRUMxPyB0aGF0J3Mgd2hlcmUgdGhlIG1paSBidXMgaXMgKi8KLQlpZiAoZmVwLT5mZWMuaWR4ID09IDAgJiYgYnVzLT5yZWZzID4gMSAmJiBiaS0+bWV0aG9kID09IGZzbWlpX2ZlYykgeworCWlmIChmcGktPmhhc19waHkpIHsKIAkJRlMoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CS8qIE1JSSBlbmFibGUgKi8KIAkJRlMoZmVjcCwgZWNudHJsLCBGRUNfRUNOVFJMX1BJTk1VWCB8IEZFQ19FQ05UUkxfRVRIRVJfRU4pOwogCQlGVyhmZWNwLCBpZXZlbnQsIEZFQ19FTkVUX01JSSk7Ci0JCUZXKGZlY3AsIG1paV9zcGVlZCwgYnVzLT5mZWMubWlpX3NwZWVkKTsKKwkJRlcoZmVjcCwgbWlpX3NwZWVkLCBmZWNpLT5taWlfc3BlZWQpOwogCX0KIH0KIApAQCAtNTgzLDczICs1NDcsMyBAQAogCS5mcmVlX2JkCQk9IGZyZWVfYmQsCiB9OwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyBpbnQgbWlpX3JlYWQoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCi17Ci0JZmVjX3QgKmZlY3AgPSBidXMtPmZlYy5mZWNwOwotCWludCBpLCByZXQgPSAtMTsKLQotCWlmICgoRlIoZmVjcCwgcl9jbnRybCkgJiBGRUNfUkNOVFJMX01JSV9NT0RFKSA9PSAwKQotCQlCVUcoKTsKLQotCS8qIEFkZCBQSFkgYWRkcmVzcyB0byByZWdpc3RlciBjb21tYW5kLiAgKi8KLQlGVyhmZWNwLCBtaWlfZGF0YSwgKHBoeV9pZCA8PCAyMykgfCBta19taWlfcmVhZChsb2NhdGlvbikpOwotCi0JZm9yIChpID0gMDsgaSA8IEZFQ19NSUlfTE9PUFM7IGkrKykKLQkJaWYgKChGUihmZWNwLCBpZXZlbnQpICYgRkVDX0VORVRfTUlJKSAhPSAwKQotCQkJYnJlYWs7Ci0KLQlpZiAoaSA8IEZFQ19NSUlfTE9PUFMpIHsKLQkJRlcoZmVjcCwgaWV2ZW50LCBGRUNfRU5FVF9NSUkpOwotCQlyZXQgPSBGUihmZWNwLCBtaWlfZGF0YSkgJiAweGZmZmY7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgbWlpX3dyaXRlKHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsdWUpCi17Ci0JZmVjX3QgKmZlY3AgPSBidXMtPmZlYy5mZWNwOwotCWludCBpOwotCi0JLyogdGhpcyBtdXN0IG5ldmVyIGhhcHBlbiAqLwotCWlmICgoRlIoZmVjcCwgcl9jbnRybCkgJiBGRUNfUkNOVFJMX01JSV9NT0RFKSA9PSAwKQotCQlCVUcoKTsKLQotCS8qIEFkZCBQSFkgYWRkcmVzcyB0byByZWdpc3RlciBjb21tYW5kLiAgKi8KLQlGVyhmZWNwLCBtaWlfZGF0YSwgKHBoeV9pZCA8PCAyMykgfCBta19taWlfd3JpdGUobG9jYXRpb24sIHZhbHVlKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRkVDX01JSV9MT09QUzsgaSsrKQotCQlpZiAoKEZSKGZlY3AsIGlldmVudCkgJiBGRUNfRU5FVF9NSUkpICE9IDApCi0JCQlicmVhazsKLQotCWlmIChpIDwgRkVDX01JSV9MT09QUykKLQkJRlcoZmVjcCwgaWV2ZW50LCBGRUNfRU5FVF9NSUkpOwotfQotCi1pbnQgZnNfbWlpX2ZlY19pbml0KHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cykKLXsKLQliZF90ICpiZCA9IChiZF90ICopX19yZXM7Ci0JY29uc3Qgc3RydWN0IGZzX21paV9idXNfaW5mbyAqYmkgPSBidXMtPmJ1c19pbmZvOwotCWZlY190ICpmZWNwOwotCi0JaWYgKGJpLT5pZCAhPSAwKQotCQlyZXR1cm4gLTE7Ci0KLQlidXMtPmZlYy5mZWNwID0gJigoaW1tYXBfdCAqKWZzX2VuZXRfaW1tYXApLT5pbV9jcG0uY3BfZmVjOwotCWJ1cy0+ZmVjLm1paV9zcGVlZCA9ICgoKChiZC0+YmlfaW50ZnJlcSArIDQ5OTk5OTkpIC8gMjUwMDAwMCkgLyAyKQotCQkJCSYgMHgzRikgPDwgMTsKLQotCWZlY3AgPSBidXMtPmZlYy5mZWNwOwotCi0JRlMoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CS8qIE1JSSBlbmFibGUgKi8KLQlGUyhmZWNwLCBlY250cmwsIEZFQ19FQ05UUkxfUElOTVVYIHwgRkVDX0VDTlRSTF9FVEhFUl9FTik7Ci0JRlcoZmVjcCwgaWV2ZW50LCBGRUNfRU5FVF9NSUkpOwotCUZXKGZlY3AsIG1paV9zcGVlZCwgYnVzLT5mZWMubWlpX3NwZWVkKTsKLQotCWJ1cy0+bWlpX3JlYWQgPSBtaWlfcmVhZDsKLQlidXMtPm1paV93cml0ZSA9IG1paV93cml0ZTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwppbmRleCBlYWEyNGZhLi45NWVjNTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJVzE2KHNjY3AsIHNjY19wc21yLCBTQ0NfUFNNUl9FTkNSQyB8IFNDQ19QU01SX05JQjIyKTsKIAogCS8qIFNldCBmdWxsIGR1cGxleCBtb2RlIGlmIG5lZWRlZCAqLwotCWlmIChmZXAtPmR1cGxleCkKKwlpZiAoZmVwLT5waHlkZXYtPmR1cGxleCkKIAkJUzE2KHNjY3AsIHNjY19wc21yLCBTQ0NfUFNNUl9MUEIgfCBTQ0NfUFNNUl9GREUpOwogCiAJUzMyKHNjY3AsIHNjY19nc21ybCwgU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpOwpAQCAtNTAwLDYgKzUwMCw4IEBACiAJc2NjX2NyX2NtZChmZXAsIENQTV9DUl9SRVNUQVJUX1RYKTsKIH0KIAorCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiBjb25zdCBzdHJ1Y3QgZnNfb3BzIGZzX3NjY19vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1iaXRiYW5nLmMKaW5kZXggNDhmOWNmOC4uMGI5YjhiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktYml0YmFuZy5jCisrKyBiL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWlpLWJpdGJhbmcuYwpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNDAsMTI5ICs0MSwyNSBAQAogCiAjaW5jbHVkZSAiZnNfZW5ldC5oIgogCi0jaWZkZWYgQ09ORklHXzh4eAotc3RhdGljIGludCBiaXRiYW5nX3ByZXBfYml0KHU4ICoqZGlycCwgdTggKipkYXRwLCB1OCAqbXNrcCwgaW50IHBvcnQsIGludCBiaXQpCitzdGF0aWMgaW50IGJpdGJhbmdfcHJlcF9iaXQodTggKipkYXRwLCB1OCAqbXNrcCwKKwkJc3RydWN0IGZzX21paV9iaXQgKm1paV9iaXQpCiB7Ci0JaW1tYXBfdCAqaW0gPSAoaW1tYXBfdCAqKWZzX2VuZXRfaW1tYXA7Ci0Jdm9pZCAqZGlyLCAqZGF0LCAqcHBhcjsKKwl2b2lkICpkYXQ7CiAJaW50IGFkdjsKIAl1OCBtc2s7CiAKLQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSBmc2lvcF9wb3J0YToKLQkJCWRpciA9ICZpbS0+aW1faW9wb3J0LmlvcF9wYWRpcjsKLQkJCWRhdCA9ICZpbS0+aW1faW9wb3J0LmlvcF9wYWRhdDsKLQkJCXBwYXIgPSAmaW0tPmltX2lvcG9ydC5pb3BfcGFwYXI7Ci0JCQlicmVhazsKKwlkYXQgPSAodm9pZCopIG1paV9iaXQtPm9mZnNldDsKIAotCQljYXNlIGZzaW9wX3BvcnRiOgotCQkJZGlyID0gJmltLT5pbV9jcG0uY3BfcGJkaXI7Ci0JCQlkYXQgPSAmaW0tPmltX2NwbS5jcF9wYmRhdDsKLQkJCXBwYXIgPSAmaW0tPmltX2NwbS5jcF9wYnBhcjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgZnNpb3BfcG9ydGM6Ci0JCQlkaXIgPSAmaW0tPmltX2lvcG9ydC5pb3BfcGNkaXI7Ci0JCQlkYXQgPSAmaW0tPmltX2lvcG9ydC5pb3BfcGNkYXQ7Ci0JCQlwcGFyID0gJmltLT5pbV9pb3BvcnQuaW9wX3BjcGFyOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBmc2lvcF9wb3J0ZDoKLQkJCWRpciA9ICZpbS0+aW1faW9wb3J0LmlvcF9wZGRpcjsKLQkJCWRhdCA9ICZpbS0+aW1faW9wb3J0LmlvcF9wZGRhdDsKLQkJCXBwYXIgPSAmaW0tPmltX2lvcG9ydC5pb3BfcGRwYXI7Ci0JCQlicmVhazsKLQotCQljYXNlIGZzaW9wX3BvcnRlOgotCQkJZGlyID0gJmltLT5pbV9jcG0uY3BfcGVkaXI7Ci0JCQlkYXQgPSAmaW0tPmltX2NwbS5jcF9wZWRhdDsKLQkJCXBwYXIgPSAmaW0tPmltX2NwbS5jcF9wZXBhcjsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCQkgICAgICAgIklsbGVnYWwgcG9ydCB2YWx1ZSAlZCFcbiIsIHBvcnQpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JYWR2ID0gYml0ID4+IDM7Ci0JZGlyID0gKGNoYXIgKilkaXIgKyBhZHY7CisJYWR2ID0gbWlpX2JpdC0+Yml0ID4+IDM7CiAJZGF0ID0gKGNoYXIgKilkYXQgKyBhZHY7Ci0JcHBhciA9IChjaGFyICopcHBhciArIGFkdjsKIAotCW1zayA9IDEgPDwgKDcgLSAoYml0ICYgNykpOwotCWlmICgoaW5fOChwcGFyKSAmIG1zaykgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX01PRFVMRV9OQU1FCi0JCSAgICAgICAicGluICVkIG9uIHBvcnQgJWQgaXMgbm90IGdlbmVyYWwgcHVycG9zZSFcbiIsIGJpdCwgcG9ydCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KKwltc2sgPSAxIDw8ICg3IC0gKG1paV9iaXQtPmJpdCAmIDcpKTsKIAotCSpkaXJwID0gZGlyOwogCSpkYXRwID0gZGF0OwogCSptc2twID0gbXNrOwogCiAJcmV0dXJuIDA7CiB9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR184MjYwCi1zdGF0aWMgaW50IGJpdGJhbmdfcHJlcF9iaXQodTggKipkaXJwLCB1OCAqKmRhdHAsIHU4ICptc2twLCBpbnQgcG9ydCwgaW50IGJpdCkKLXsKLQlpb3BfY3BtMl90ICppbyA9ICYoKGNwbTJfbWFwX3QgKilmc19lbmV0X2ltbWFwKS0+aW1faW9wb3J0OwotCXZvaWQgKmRpciwgKmRhdCwgKnBwYXI7Ci0JaW50IGFkdjsKLQl1OCBtc2s7Ci0KLQlzd2l0Y2ggKHBvcnQpIHsKLQkJY2FzZSBmc2lvcF9wb3J0YToKLQkJCWRpciA9ICZpby0+aW9wX3BkaXJhOwotCQkJZGF0ID0gJmlvLT5pb3BfcGRhdGE7Ci0JCQlwcGFyID0gJmlvLT5pb3BfcHBhcmE7Ci0JCQlicmVhazsKLQotCQljYXNlIGZzaW9wX3BvcnRiOgotCQkJZGlyID0gJmlvLT5pb3BfcGRpcmI7Ci0JCQlkYXQgPSAmaW8tPmlvcF9wZGF0YjsKLQkJCXBwYXIgPSAmaW8tPmlvcF9wcGFyYjsKLQkJCWJyZWFrOwotCi0JCWNhc2UgZnNpb3BfcG9ydGM6Ci0JCQlkaXIgPSAmaW8tPmlvcF9wZGlyYzsKLQkJCWRhdCA9ICZpby0+aW9wX3BkYXRjOwotCQkJcHBhciA9ICZpby0+aW9wX3BwYXJjOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBmc2lvcF9wb3J0ZDoKLQkJCWRpciA9ICZpby0+aW9wX3BkaXJkOwotCQkJZGF0ID0gJmlvLT5pb3BfcGRhdGQ7Ci0JCQlwcGFyID0gJmlvLT5pb3BfcHBhcmQ7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICJJbGxlZ2FsIHBvcnQgdmFsdWUgJWQhXG4iLCBwb3J0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWFkdiA9IGJpdCA+PiAzOwotCWRpciA9IChjaGFyICopZGlyICsgYWR2OwotCWRhdCA9IChjaGFyICopZGF0ICsgYWR2OwotCXBwYXIgPSAoY2hhciAqKXBwYXIgKyBhZHY7Ci0KLQltc2sgPSAxIDw8ICg3IC0gKGJpdCAmIDcpKTsKLQlpZiAoKGluXzgocHBhcikgJiBtc2spICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9NT0RVTEVfTkFNRQotCQkgICAgICAgInBpbiAlZCBvbiBwb3J0ICVkIGlzIG5vdCBnZW5lcmFsIHB1cnBvc2UhXG4iLCBiaXQsIHBvcnQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkqZGlycCA9IGRpcjsKLQkqZGF0cCA9IGRhdDsKLQkqbXNrcCA9IG1zazsKLQotCXJldHVybiAwOwotfQotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBiYl9zZXQodTggKnAsIHU4IG0pCiB7CkBAIC0xNzksNDQgKzc2LDQ0IEBACiAJcmV0dXJuIChpbl84KHApICYgbSkgIT0gMDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1kaW9fYWN0aXZlKHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGlvX2FjdGl2ZShzdHJ1Y3QgYmJfaW5mbyAqYml0YmFuZykKIHsKLQliYl9zZXQoYnVzLT5iaXRiYW5nLm1kaW9fZGlyLCBidXMtPmJpdGJhbmcubWRpb19tc2spOworCWJiX3NldChiaXRiYW5nLT5tZGlvX2RpciwgYml0YmFuZy0+bWRpb19kaXJfbXNrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG1kaW9fdHJpc3RhdGUoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzKQorc3RhdGljIGlubGluZSB2b2lkIG1kaW9fdHJpc3RhdGUoc3RydWN0IGJiX2luZm8gKmJpdGJhbmcgKQogewotCWJiX2NscihidXMtPmJpdGJhbmcubWRpb19kaXIsIGJ1cy0+Yml0YmFuZy5tZGlvX21zayk7CisJYmJfY2xyKGJpdGJhbmctPm1kaW9fZGlyLCBiaXRiYW5nLT5tZGlvX2Rpcl9tc2spOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBtZGlvX3JlYWQoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzKQorc3RhdGljIGlubGluZSBpbnQgbWRpb19yZWFkKHN0cnVjdCBiYl9pbmZvICpiaXRiYW5nICkKIHsKLQlyZXR1cm4gYmJfcmVhZChidXMtPmJpdGJhbmcubWRpb19kYXQsIGJ1cy0+Yml0YmFuZy5tZGlvX21zayk7CisJcmV0dXJuIGJiX3JlYWQoYml0YmFuZy0+bWRpb19kYXQsIGJpdGJhbmctPm1kaW9fZGF0X21zayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZGlvKHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cywgaW50IHdoYXQpCitzdGF0aWMgaW5saW5lIHZvaWQgbWRpbyhzdHJ1Y3QgYmJfaW5mbyAqYml0YmFuZyAsIGludCB3aGF0KQogewogCWlmICh3aGF0KQotCQliYl9zZXQoYnVzLT5iaXRiYW5nLm1kaW9fZGF0LCBidXMtPmJpdGJhbmcubWRpb19tc2spOworCQliYl9zZXQoYml0YmFuZy0+bWRpb19kYXQsIGJpdGJhbmctPm1kaW9fZGF0X21zayk7CiAJZWxzZQotCQliYl9jbHIoYnVzLT5iaXRiYW5nLm1kaW9fZGF0LCBidXMtPmJpdGJhbmcubWRpb19tc2spOworCQliYl9jbHIoYml0YmFuZy0+bWRpb19kYXQsIGJpdGJhbmctPm1kaW9fZGF0X21zayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtZGMoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzLCBpbnQgd2hhdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtZGMoc3RydWN0IGJiX2luZm8gKmJpdGJhbmcgLCBpbnQgd2hhdCkKIHsKIAlpZiAod2hhdCkKLQkJYmJfc2V0KGJ1cy0+Yml0YmFuZy5tZGNfZGF0LCBidXMtPmJpdGJhbmcubWRjX21zayk7CisJCWJiX3NldChiaXRiYW5nLT5tZGNfZGF0LCBiaXRiYW5nLT5tZGNfbXNrKTsKIAllbHNlCi0JCWJiX2NscihidXMtPmJpdGJhbmcubWRjX2RhdCwgYnVzLT5iaXRiYW5nLm1kY19tc2spOworCQliYl9jbHIoYml0YmFuZy0+bWRjX2RhdCwgYml0YmFuZy0+bWRjX21zayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtaWlfZGVsYXkoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzKQorc3RhdGljIGlubGluZSB2b2lkIG1paV9kZWxheShzdHJ1Y3QgYmJfaW5mbyAqYml0YmFuZyApCiB7Ci0JdWRlbGF5KGJ1cy0+YnVzX2luZm8tPmkuYml0YmFuZy5kZWxheSk7CisJdWRlbGF5KGJpdGJhbmctPmRlbGF5KTsKIH0KIAogLyogVXRpbGl0eSB0byBzZW5kIHRoZSBwcmVhbWJsZSwgYWRkcmVzcywgYW5kIHJlZ2lzdGVyIChjb21tb24gdG8gcmVhZCBhbmQgd3JpdGUpLiAqLwotc3RhdGljIHZvaWQgYml0YmFuZ19wcmUoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzLCBpbnQgcmVhZCwgdTggYWRkciwgdTggcmVnKQorc3RhdGljIHZvaWQgYml0YmFuZ19wcmUoc3RydWN0IGJiX2luZm8gKmJpdGJhbmcgLCBpbnQgcmVhZCwgdTggYWRkciwgdTggcmVnKQogewogCWludCBqOwogCkBAIC0yMjgsMTc3ICsxMjUsMjg0IEBACiAJICogYnV0IGl0IGlzIHNhZmVyIGFuZCB3aWxsIGJlIG11Y2ggbW9yZSByb2J1c3QuCiAJICovCiAKLQltZGlvX2FjdGl2ZShidXMpOwotCW1kaW8oYnVzLCAxKTsKKwltZGlvX2FjdGl2ZShiaXRiYW5nKTsKKwltZGlvKGJpdGJhbmcsIDEpOwogCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7Ci0JCW1kYyhidXMsIDApOwotCQltaWlfZGVsYXkoYnVzKTsKLQkJbWRjKGJ1cywgMSk7Ci0JCW1paV9kZWxheShidXMpOworCQltZGMoYml0YmFuZywgMCk7CisJCW1paV9kZWxheShiaXRiYW5nKTsKKwkJbWRjKGJpdGJhbmcsIDEpOworCQltaWlfZGVsYXkoYml0YmFuZyk7CiAJfQogCiAJLyogc2VuZCB0aGUgc3RhcnQgYml0ICgwMSkgYW5kIHRoZSByZWFkIG9wY29kZSAoMTApIG9yIHdyaXRlICgxMCkgKi8KLQltZGMoYnVzLCAwKTsKLQltZGlvKGJ1cywgMCk7Ci0JbWlpX2RlbGF5KGJ1cyk7Ci0JbWRjKGJ1cywgMSk7Ci0JbWlpX2RlbGF5KGJ1cyk7Ci0JbWRjKGJ1cywgMCk7Ci0JbWRpbyhidXMsIDEpOwotCW1paV9kZWxheShidXMpOwotCW1kYyhidXMsIDEpOwotCW1paV9kZWxheShidXMpOwotCW1kYyhidXMsIDApOwotCW1kaW8oYnVzLCByZWFkKTsKLQltaWlfZGVsYXkoYnVzKTsKLQltZGMoYnVzLCAxKTsKLQltaWlfZGVsYXkoYnVzKTsKLQltZGMoYnVzLCAwKTsKLQltZGlvKGJ1cywgIXJlYWQpOwotCW1paV9kZWxheShidXMpOwotCW1kYyhidXMsIDEpOwotCW1paV9kZWxheShidXMpOworCW1kYyhiaXRiYW5nLCAwKTsKKwltZGlvKGJpdGJhbmcsIDApOworCW1paV9kZWxheShiaXRiYW5nKTsKKwltZGMoYml0YmFuZywgMSk7CisJbWlpX2RlbGF5KGJpdGJhbmcpOworCW1kYyhiaXRiYW5nLCAwKTsKKwltZGlvKGJpdGJhbmcsIDEpOworCW1paV9kZWxheShiaXRiYW5nKTsKKwltZGMoYml0YmFuZywgMSk7CisJbWlpX2RlbGF5KGJpdGJhbmcpOworCW1kYyhiaXRiYW5nLCAwKTsKKwltZGlvKGJpdGJhbmcsIHJlYWQpOworCW1paV9kZWxheShiaXRiYW5nKTsKKwltZGMoYml0YmFuZywgMSk7CisJbWlpX2RlbGF5KGJpdGJhbmcpOworCW1kYyhiaXRiYW5nLCAwKTsKKwltZGlvKGJpdGJhbmcsICFyZWFkKTsKKwltaWlfZGVsYXkoYml0YmFuZyk7CisJbWRjKGJpdGJhbmcsIDEpOworCW1paV9kZWxheShiaXRiYW5nKTsKIAogCS8qIHNlbmQgdGhlIFBIWSBhZGRyZXNzICovCiAJZm9yIChqID0gMDsgaiA8IDU7IGorKykgewotCQltZGMoYnVzLCAwKTsKLQkJbWRpbyhidXMsIChhZGRyICYgMHgxMCkgIT0gMCk7Ci0JCW1paV9kZWxheShidXMpOwotCQltZGMoYnVzLCAxKTsKLQkJbWlpX2RlbGF5KGJ1cyk7CisJCW1kYyhiaXRiYW5nLCAwKTsKKwkJbWRpbyhiaXRiYW5nLCAoYWRkciAmIDB4MTApICE9IDApOworCQltaWlfZGVsYXkoYml0YmFuZyk7CisJCW1kYyhiaXRiYW5nLCAxKTsKKwkJbWlpX2RlbGF5KGJpdGJhbmcpOwogCQlhZGRyIDw8PSAxOwogCX0KIAogCS8qIHNlbmQgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgKi8KIAlmb3IgKGogPSAwOyBqIDwgNTsgaisrKSB7Ci0JCW1kYyhidXMsIDApOwotCQltZGlvKGJ1cywgKHJlZyAmIDB4MTApICE9IDApOwotCQltaWlfZGVsYXkoYnVzKTsKLQkJbWRjKGJ1cywgMSk7Ci0JCW1paV9kZWxheShidXMpOworCQltZGMoYml0YmFuZywgMCk7CisJCW1kaW8oYml0YmFuZywgKHJlZyAmIDB4MTApICE9IDApOworCQltaWlfZGVsYXkoYml0YmFuZyk7CisJCW1kYyhiaXRiYW5nLCAxKTsKKwkJbWlpX2RlbGF5KGJpdGJhbmcpOwogCQlyZWcgPDw9IDE7CiAJfQogfQogCi1zdGF0aWMgaW50IG1paV9yZWFkKHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQorc3RhdGljIGludCBmc19lbmV0X21paV9iYl9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMgLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCiB7CiAJdTE2IHJkcmVnOwogCWludCByZXQsIGo7CiAJdTggYWRkciA9IHBoeV9pZCAmIDB4ZmY7CiAJdTggcmVnID0gbG9jYXRpb24gJiAweGZmOworCXN0cnVjdCBiYl9pbmZvKiBiaXRiYW5nID0gYnVzLT5wcml2OwogCi0JYml0YmFuZ19wcmUoYnVzLCAxLCBhZGRyLCByZWcpOworCWJpdGJhbmdfcHJlKGJpdGJhbmcsIDEsIGFkZHIsIHJlZyk7CiAKIAkvKiB0cmktc3RhdGUgb3VyIE1ESU8gSS9PIHBpbiBzbyB3ZSBjYW4gcmVhZCAqLwotCW1kYyhidXMsIDApOwotCW1kaW9fdHJpc3RhdGUoYnVzKTsKLQltaWlfZGVsYXkoYnVzKTsKLQltZGMoYnVzLCAxKTsKLQltaWlfZGVsYXkoYnVzKTsKKwltZGMoYml0YmFuZywgMCk7CisJbWRpb190cmlzdGF0ZShiaXRiYW5nKTsKKwltaWlfZGVsYXkoYml0YmFuZyk7CisJbWRjKGJpdGJhbmcsIDEpOworCW1paV9kZWxheShiaXRiYW5nKTsKIAogCS8qIGNoZWNrIHRoZSB0dXJuYXJvdW5kIGJpdDogdGhlIFBIWSBzaG91bGQgYmUgZHJpdmluZyBpdCB0byB6ZXJvICovCi0JaWYgKG1kaW9fcmVhZChidXMpICE9IDApIHsKKwlpZiAobWRpb19yZWFkKGJpdGJhbmcpICE9IDApIHsKIAkJLyogUEhZIGRpZG4ndCBkcml2ZSBUQSBsb3cgKi8KIAkJZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHsKLQkJCW1kYyhidXMsIDApOwotCQkJbWlpX2RlbGF5KGJ1cyk7Ci0JCQltZGMoYnVzLCAxKTsKLQkJCW1paV9kZWxheShidXMpOworCQkJbWRjKGJpdGJhbmcsIDApOworCQkJbWlpX2RlbGF5KGJpdGJhbmcpOworCQkJbWRjKGJpdGJhbmcsIDEpOworCQkJbWlpX2RlbGF5KGJpdGJhbmcpOwogCQl9CiAJCXJldCA9IC0xOwogCQlnb3RvIG91dDsKIAl9CiAKLQltZGMoYnVzLCAwKTsKLQltaWlfZGVsYXkoYnVzKTsKKwltZGMoYml0YmFuZywgMCk7CisJbWlpX2RlbGF5KGJpdGJhbmcpOwogCiAJLyogcmVhZCAxNiBiaXRzIG9mIHJlZ2lzdGVyIGRhdGEsIE1TQiBmaXJzdCAqLwogCXJkcmVnID0gMDsKIAlmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgewotCQltZGMoYnVzLCAxKTsKLQkJbWlpX2RlbGF5KGJ1cyk7CisJCW1kYyhiaXRiYW5nLCAxKTsKKwkJbWlpX2RlbGF5KGJpdGJhbmcpOwogCQlyZHJlZyA8PD0gMTsKLQkJcmRyZWcgfD0gbWRpb19yZWFkKGJ1cyk7Ci0JCW1kYyhidXMsIDApOwotCQltaWlfZGVsYXkoYnVzKTsKKwkJcmRyZWcgfD0gbWRpb19yZWFkKGJpdGJhbmcpOworCQltZGMoYml0YmFuZywgMCk7CisJCW1paV9kZWxheShiaXRiYW5nKTsKIAl9CiAKLQltZGMoYnVzLCAxKTsKLQltaWlfZGVsYXkoYnVzKTsKLQltZGMoYnVzLCAwKTsKLQltaWlfZGVsYXkoYnVzKTsKLQltZGMoYnVzLCAxKTsKLQltaWlfZGVsYXkoYnVzKTsKKwltZGMoYml0YmFuZywgMSk7CisJbWlpX2RlbGF5KGJpdGJhbmcpOworCW1kYyhiaXRiYW5nLCAwKTsKKwltaWlfZGVsYXkoYml0YmFuZyk7CisJbWRjKGJpdGJhbmcsIDEpOworCW1paV9kZWxheShiaXRiYW5nKTsKIAogCXJldCA9IHJkcmVnOwogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIG1paV93cml0ZShzdHJ1Y3QgZnNfZW5ldF9taWlfYnVzICpidXMsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwgaW50IHZhbCkKK3N0YXRpYyBpbnQgZnNfZW5ldF9taWlfYmJfd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCB1MTYgdmFsKQogewogCWludCBqOworCXN0cnVjdCBiYl9pbmZvKiBiaXRiYW5nID0gYnVzLT5wcml2OworCiAJdTggYWRkciA9IHBoeV9pZCAmIDB4ZmY7CiAJdTggcmVnID0gbG9jYXRpb24gJiAweGZmOwogCXUxNiB2YWx1ZSA9IHZhbCAmIDB4ZmZmZjsKIAotCWJpdGJhbmdfcHJlKGJ1cywgMCwgYWRkciwgcmVnKTsKKwliaXRiYW5nX3ByZShiaXRiYW5nLCAwLCBhZGRyLCByZWcpOwogCiAJLyogc2VuZCB0aGUgdHVybmFyb3VuZCAoMTApICovCi0JbWRjKGJ1cywgMCk7Ci0JbWRpbyhidXMsIDEpOwotCW1paV9kZWxheShidXMpOwotCW1kYyhidXMsIDEpOwotCW1paV9kZWxheShidXMpOwotCW1kYyhidXMsIDApOwotCW1kaW8oYnVzLCAwKTsKLQltaWlfZGVsYXkoYnVzKTsKLQltZGMoYnVzLCAxKTsKLQltaWlfZGVsYXkoYnVzKTsKKwltZGMoYml0YmFuZywgMCk7CisJbWRpbyhiaXRiYW5nLCAxKTsKKwltaWlfZGVsYXkoYml0YmFuZyk7CisJbWRjKGJpdGJhbmcsIDEpOworCW1paV9kZWxheShiaXRiYW5nKTsKKwltZGMoYml0YmFuZywgMCk7CisJbWRpbyhiaXRiYW5nLCAwKTsKKwltaWlfZGVsYXkoYml0YmFuZyk7CisJbWRjKGJpdGJhbmcsIDEpOworCW1paV9kZWxheShiaXRiYW5nKTsKIAogCS8qIHdyaXRlIDE2IGJpdHMgb2YgcmVnaXN0ZXIgZGF0YSwgTVNCIGZpcnN0ICovCiAJZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHsKLQkJbWRjKGJ1cywgMCk7Ci0JCW1kaW8oYnVzLCAodmFsdWUgJiAweDgwMDApICE9IDApOwotCQltaWlfZGVsYXkoYnVzKTsKLQkJbWRjKGJ1cywgMSk7Ci0JCW1paV9kZWxheShidXMpOworCQltZGMoYml0YmFuZywgMCk7CisJCW1kaW8oYml0YmFuZywgKHZhbHVlICYgMHg4MDAwKSAhPSAwKTsKKwkJbWlpX2RlbGF5KGJpdGJhbmcpOworCQltZGMoYml0YmFuZywgMSk7CisJCW1paV9kZWxheShiaXRiYW5nKTsKIAkJdmFsdWUgPDw9IDE7CiAJfQogCiAJLyoKIAkgKiBUcmktc3RhdGUgdGhlIE1ESU8gbGluZS4KIAkgKi8KLQltZGlvX3RyaXN0YXRlKGJ1cyk7Ci0JbWRjKGJ1cywgMCk7Ci0JbWlpX2RlbGF5KGJ1cyk7Ci0JbWRjKGJ1cywgMSk7Ci0JbWlpX2RlbGF5KGJ1cyk7CisJbWRpb190cmlzdGF0ZShiaXRiYW5nKTsKKwltZGMoYml0YmFuZywgMCk7CisJbWlpX2RlbGF5KGJpdGJhbmcpOworCW1kYyhiaXRiYW5nLCAxKTsKKwltaWlfZGVsYXkoYml0YmFuZyk7CisJcmV0dXJuIDA7CiB9CiAKLWludCBmc19taWlfYml0YmFuZ19pbml0KHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cykKK3N0YXRpYyBpbnQgZnNfZW5ldF9taWlfYmJfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKIHsKLQljb25zdCBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvICpiaSA9IGJ1cy0+YnVzX2luZm87CisJLypub3RoaW5nIGhlcmUgLSBkdW5ubyBob3cgdG8gcmVzZXQgaXQqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzX21paV9iaXRiYW5nX2luaXQoc3RydWN0IGJiX2luZm8gKmJpdGJhbmcsIHN0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbyogZm1waSkKK3sKIAlpbnQgcjsKIAotCXIgPSBiaXRiYW5nX3ByZXBfYml0KCZidXMtPmJpdGJhbmcubWRpb19kaXIsCi0JCQkgJmJ1cy0+Yml0YmFuZy5tZGlvX2RhdCwKLQkJCSAmYnVzLT5iaXRiYW5nLm1kaW9fbXNrLAotCQkJIGJpLT5pLmJpdGJhbmcubWRpb19wb3J0LAotCQkJIGJpLT5pLmJpdGJhbmcubWRpb19iaXQpOworCWJpdGJhbmctPmRlbGF5ID0gZm1waS0+ZGVsYXk7CisKKwlyID0gYml0YmFuZ19wcmVwX2JpdCgmYml0YmFuZy0+bWRpb19kaXIsCisJCQkgJmJpdGJhbmctPm1kaW9fZGlyX21zaywKKwkJCSAmZm1waS0+bWRpb19kaXIpOwogCWlmIChyICE9IDApCiAJCXJldHVybiByOwogCi0JciA9IGJpdGJhbmdfcHJlcF9iaXQoJmJ1cy0+Yml0YmFuZy5tZGNfZGlyLAotCQkJICZidXMtPmJpdGJhbmcubWRjX2RhdCwKLQkJCSAmYnVzLT5iaXRiYW5nLm1kY19tc2ssCi0JCQkgYmktPmkuYml0YmFuZy5tZGNfcG9ydCwKLQkJCSBiaS0+aS5iaXRiYW5nLm1kY19iaXQpOworCXIgPSBiaXRiYW5nX3ByZXBfYml0KCZiaXRiYW5nLT5tZGlvX2RhdCwKKwkJCSAmYml0YmFuZy0+bWRpb19kYXRfbXNrLAorCQkJICZmbXBpLT5tZGlvX2RhdCk7CiAJaWYgKHIgIT0gMCkKIAkJcmV0dXJuIHI7CiAKLQlidXMtPm1paV9yZWFkID0gbWlpX3JlYWQ7Ci0JYnVzLT5taWlfd3JpdGUgPSBtaWlfd3JpdGU7CisJciA9IGJpdGJhbmdfcHJlcF9iaXQoJmJpdGJhbmctPm1kY19kYXQsCisJCQkgJmJpdGJhbmctPm1kY19tc2ssCisJCQkgJmZtcGktPm1kY19kYXQpOworCWlmIChyICE9IDApCisJCXJldHVybiByOwogCiAJcmV0dXJuIDA7CiB9CisKKworc3RhdGljIGludCBfX2RldmluaXQgZnNfZW5ldF9tZGlvX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldik7CisJc3RydWN0IGZzX21paV9iYl9wbGF0Zm9ybV9pbmZvICpwZGF0YTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKKwlzdHJ1Y3QgYmJfaW5mbyAqYml0YmFuZzsKKwlpbnQgZXJyID0gMDsKKworCWlmIChOVUxMID09IGRldikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1paV9idXMpLCBHRlBfS0VSTkVMKTsKKworCWlmIChOVUxMID09IG5ld19idXMpCisJCXJldHVybiAtRU5PTUVNOworCisJYml0YmFuZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSBiaXRiYW5nKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW5ld19idXMtPm5hbWUgPSAiQkIgTUlJIEJ1cyIsCisJbmV3X2J1cy0+cmVhZCA9ICZmc19lbmV0X21paV9iYl9yZWFkLAorCW5ld19idXMtPndyaXRlID0gJmZzX2VuZXRfbWlpX2JiX3dyaXRlLAorCW5ld19idXMtPnJlc2V0ID0gJmZzX2VuZXRfbWlpX2JiX3Jlc2V0LAorCW5ld19idXMtPmlkID0gcGRldi0+aWQ7CisKKwluZXdfYnVzLT5waHlfbWFzayA9IH4weDk7CisJcGRhdGEgPSAoc3RydWN0IGZzX21paV9iYl9wbGF0Zm9ybV9pbmZvICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAoTlVMTCA9PSBwZGF0YSkgeworCQlwcmludGsoS0VSTl9FUlIgImdmYXIgbWRpbyAlZDogTWlzc2luZyBwbGF0Zm9ybSBkYXRhIVxuIiwgcGRldi0+aWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKnNldCB1cCB3b3Jrc3BhY2UqLworCWZzX21paV9iaXRiYW5nX2luaXQoYml0YmFuZywgcGRhdGEpOworCisJbmV3X2J1cy0+cHJpdiA9IGJpdGJhbmc7CisKKwluZXdfYnVzLT5pcnEgPSBwZGF0YS0+aXJxOworCisJbmV3X2J1cy0+ZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG5ld19idXMpOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKworCWlmICgwICE9IGVycikgeworCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAorCQkJCW5ld19idXMtPm5hbWUpOworCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOworCX0KKworCXJldHVybiAwOworCitidXNfcmVnaXN0ZXJfZmFpbDoKKwlrZnJlZShiaXRiYW5nKTsKKwlrZnJlZShuZXdfYnVzKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBmc19lbmV0X21kaW9fcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwltZGlvYnVzX3VucmVnaXN0ZXIoYnVzKTsKKworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJaW91bm1hcCgodm9pZCAqKSAoJmJ1cy0+cHJpdikpOworCWJ1cy0+cHJpdiA9IE5VTEw7CisJa2ZyZWUoYnVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9kcml2ZXIgZnNfZW5ldF9iYl9tZGlvX2RyaXZlciA9IHsKKwkubmFtZSA9ICJmc2wtYmItbWRpbyIsCisJLmJ1cyA9ICZwbGF0Zm9ybV9idXNfdHlwZSwKKwkucHJvYmUgPSBmc19lbmV0X21kaW9fcHJvYmUsCisJLnJlbW92ZSA9IGZzX2VuZXRfbWRpb19yZW1vdmUsCit9OworCitpbnQgZnNfZW5ldF9tZGlvX2JiX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZmc19lbmV0X2JiX21kaW9fZHJpdmVyKTsKK30KKwordm9pZCBmc19lbmV0X21kaW9fYmJfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZmc19lbmV0X2JiX21kaW9fZHJpdmVyKTsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzI4ZTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qCisgKiBDb21iaW5lZCBFdGhlcm5ldCBkcml2ZXIgZm9yIE1vdG9yb2xhIE1QQzh4eCBhbmQgTVBDODJ4eC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgSW50cmFjb20gUy5BLgorICogIGJ5IFBhbnRlbGlzIEFudG9uaW91IDxwYW50b0BpbnRyYWNvbS5ncj4KKyAqCisgKiAyMDA1IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBWaXRhbHkgQm9yZHVnIDx2Ym9yZHVnQHJ1Lm12aXN0YS5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55CisgKiBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJmc19lbmV0LmgiCisjaW5jbHVkZSAiZmVjLmgiCisKKy8qIE1ha2UgTUlJIHJlYWQvd3JpdGUgY29tbWFuZHMgZm9yIHRoZSBGRUMuCisqLworI2RlZmluZSBta19taWlfcmVhZChSRUcpCSgweDYwMDIwMDAwIHwgKChSRUcgJiAweDFmKSA8PCAxOCkpCisjZGVmaW5lIG1rX21paV93cml0ZShSRUcsIFZBTCkJKDB4NTAwMjAwMDAgfCAoKFJFRyAmIDB4MWYpIDw8IDE4KSB8IChWQUwgJiAweGZmZmYpKQorI2RlZmluZSBta19taWlfZW5kCQkwCisKKyNkZWZpbmUgRkVDX01JSV9MT09QUwkxMDAwMAorCitzdGF0aWMgaW50IG1hdGNoX2hhc19waHkgKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCogZGF0YSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSwgZGV2KTsKKwlzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyogZnBpOworCWlmKHN0cmNtcChwZGV2LT5uYW1lLCAoY2hhciopZGF0YSkpCisJeworCSAgICByZXR1cm4gMDsKKwl9CisKKwlmcGkgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZigoZnBpKSYmKGZwaS0+aGFzX3BoeSkpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzX21paV9mZWNfaW5pdChzdHJ1Y3QgZmVjX2luZm8qIGZlYywgc3RydWN0IGZzX21paV9mZWNfcGxhdGZvcm1faW5mbyAqZm1waSkKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgKnI7CisJZmVjX3QgKmZlY3A7CisJY2hhciogbmFtZSA9ICJmc2wtY3BtLWZlYyI7CisKKwkvKiB3ZSBuZWVkIGZlYyBpbiBvcmRlciB0byBiZSB1c2VmdWwgKi8KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpmZWNfcGRldiA9CisJCWNvbnRhaW5lcl9vZihidXNfZmluZF9kZXZpY2UoJnBsYXRmb3JtX2J1c190eXBlLCBOVUxMLCBuYW1lLCBtYXRjaF9oYXNfcGh5KSwKKwkJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlLCBkZXYpOworCisJaWYoZmVjX3BkZXYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIiVW5hYmxlIHRvIGZpbmQgUEhZIGZvciAlcyIsIG5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShmZWNfcGRldiwgSU9SRVNPVVJDRV9NRU0sICJyZWdzIik7CisKKwlmZWMtPmZlY3AgPSBmZWNwID0gKGZlY190Kilpb3JlbWFwKHItPnN0YXJ0LHNpemVvZihmZWNfdCkpOworCWZlYy0+bWlpX3NwZWVkID0gZm1waS0+bWlpX3NwZWVkOworCisJc2V0Yml0czMyKCZmZWNwLT5mZWNfcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CS8qIE1JSSBlbmFibGUgKi8KKwlzZXRiaXRzMzIoJmZlY3AtPmZlY19lY250cmwsIEZFQ19FQ05UUkxfUElOTVVYIHwgRkVDX0VDTlRSTF9FVEhFUl9FTik7CisJb3V0X2JlMzIoJmZlY3AtPmZlY19pZXZlbnQsIEZFQ19FTkVUX01JSSk7CisJb3V0X2JlMzIoJmZlY3AtPmZlY19taWlfc3BlZWQsIGZlYy0+bWlpX3NwZWVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzX2VuZXRfZmVjX21paV9yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMgLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCit7CisJc3RydWN0IGZlY19pbmZvKiBmZWMgPSBidXMtPnByaXY7CisJZmVjX3QgKmZlY3AgPSBmZWMtPmZlY3A7CisJaW50IGksIHJldCA9IC0xOworCisJaWYgKChpbl9iZTMyKCZmZWNwLT5mZWNfcl9jbnRybCkgJiBGRUNfUkNOVFJMX01JSV9NT0RFKSA9PSAwKQorCQlCVUcoKTsKKworCS8qIEFkZCBQSFkgYWRkcmVzcyB0byByZWdpc3RlciBjb21tYW5kLiAgKi8KKwlvdXRfYmUzMigmZmVjcC0+ZmVjX21paV9kYXRhLCAocGh5X2lkIDw8IDIzKSB8IG1rX21paV9yZWFkKGxvY2F0aW9uKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRkVDX01JSV9MT09QUzsgaSsrKQorCQlpZiAoKGluX2JlMzIoJmZlY3AtPmZlY19pZXZlbnQpICYgRkVDX0VORVRfTUlJKSAhPSAwKQorCQkJYnJlYWs7CisKKwlpZiAoaSA8IEZFQ19NSUlfTE9PUFMpIHsKKwkJb3V0X2JlMzIoJmZlY3AtPmZlY19pZXZlbnQsIEZFQ19FTkVUX01JSSk7CisJCXJldCA9IGluX2JlMzIoJmZlY3AtPmZlY19taWlfZGF0YSkgJiAweGZmZmY7CisJfQorCisJcmV0dXJuIHJldDsKKworfQorCitzdGF0aWMgaW50IGZzX2VuZXRfZmVjX21paV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIHUxNiB2YWwpCit7CisJc3RydWN0IGZlY19pbmZvKiBmZWMgPSBidXMtPnByaXY7CisJZmVjX3QgKmZlY3AgPSBmZWMtPmZlY3A7CisJaW50IGk7CisKKwkvKiB0aGlzIG11c3QgbmV2ZXIgaGFwcGVuICovCisJaWYgKChpbl9iZTMyKCZmZWNwLT5mZWNfcl9jbnRybCkgJiBGRUNfUkNOVFJMX01JSV9NT0RFKSA9PSAwKQorCQlCVUcoKTsKKworCS8qIEFkZCBQSFkgYWRkcmVzcyB0byByZWdpc3RlciBjb21tYW5kLiAgKi8KKwlvdXRfYmUzMigmZmVjcC0+ZmVjX21paV9kYXRhLCAocGh5X2lkIDw8IDIzKSB8IG1rX21paV93cml0ZShsb2NhdGlvbiwgdmFsKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRkVDX01JSV9MT09QUzsgaSsrKQorCQlpZiAoKGluX2JlMzIoJmZlY3AtPmZlY19pZXZlbnQpICYgRkVDX0VORVRfTUlJKSAhPSAwKQorCQkJYnJlYWs7CisKKwlpZiAoaSA8IEZFQ19NSUlfTE9PUFMpCisJCW91dF9iZTMyKCZmZWNwLT5mZWNfaWV2ZW50LCBGRUNfRU5FVF9NSUkpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBmc19lbmV0X2ZlY19taWlfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwkvKiBub3RoaW5nIGhlcmUgLSBmb3Igbm93ICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZzX2VuZXRfZmVjX21kaW9fcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3QgZnNfbWlpX2ZlY19wbGF0Zm9ybV9pbmZvICpwZGF0YTsKKwlzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1czsKKwlzdHJ1Y3QgZmVjX2luZm8gKmZlYzsKKwlpbnQgZXJyID0gMDsKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAtRUlOVkFMOworCW5ld19idXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWlpX2J1cyksIEdGUF9LRVJORUwpOworCisJaWYgKE5VTEwgPT0gbmV3X2J1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlmZWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmVjX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmIChOVUxMID09IGZlYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwluZXdfYnVzLT5uYW1lID0gIkZFQyBNSUkgQnVzIiwKKwluZXdfYnVzLT5yZWFkID0gJmZzX2VuZXRfZmVjX21paV9yZWFkLAorCW5ld19idXMtPndyaXRlID0gJmZzX2VuZXRfZmVjX21paV93cml0ZSwKKwluZXdfYnVzLT5yZXNldCA9ICZmc19lbmV0X2ZlY19taWlfcmVzZXQsCisJbmV3X2J1cy0+aWQgPSBwZGV2LT5pZDsKKworCXBkYXRhID0gKHN0cnVjdCBmc19taWlfZmVjX3BsYXRmb3JtX2luZm8gKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCWlmIChOVUxMID09IHBkYXRhKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZnNfZW5ldCBGRUMgbWRpbyAlZDogTWlzc2luZyBwbGF0Zm9ybSBkYXRhIVxuIiwgcGRldi0+aWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKnNldCB1cCB3b3Jrc3BhY2UqLworCisJZnNfbWlpX2ZlY19pbml0KGZlYywgcGRhdGEpOworCW5ld19idXMtPnByaXYgPSBmZWM7CisKKwluZXdfYnVzLT5pcnEgPSBwZGF0YS0+aXJxOworCisJbmV3X2J1cy0+ZGV2ID0gZGV2OworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG5ld19idXMpOworCisJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKKworCWlmICgwICE9IGVycikgeworCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLAorCQkJCW5ld19idXMtPm5hbWUpOworCQlnb3RvIGJ1c19yZWdpc3Rlcl9mYWlsOworCX0KKworCXJldHVybiAwOworCitidXNfcmVnaXN0ZXJfZmFpbDoKKwlrZnJlZShuZXdfYnVzKTsKKworCXJldHVybiBlcnI7Cit9CisKKworc3RhdGljIGludCBmc19lbmV0X2ZlY19tZGlvX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJbWRpb2J1c191bnJlZ2lzdGVyKGJ1cyk7CisKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKKwlrZnJlZShidXMtPnByaXYpOworCisJYnVzLT5wcml2ID0gTlVMTDsKKwlrZnJlZShidXMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBmc19lbmV0X2ZlY19tZGlvX2RyaXZlciA9IHsKKwkubmFtZSA9ICJmc2wtY3BtLWZlYy1tZGlvIiwKKwkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZSA9IGZzX2VuZXRfZmVjX21kaW9fcHJvYmUsCisJLnJlbW92ZSA9IGZzX2VuZXRfZmVjX21kaW9fcmVtb3ZlLAorfTsKKworaW50IGZzX2VuZXRfbWRpb19mZWNfaW5pdCh2b2lkKQoreworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmZzX2VuZXRfZmVjX21kaW9fZHJpdmVyKTsKK30KKwordm9pZCBmc19lbmV0X21kaW9fZmVjX2V4aXQodm9pZCkKK3sKKwlkcml2ZXJfdW5yZWdpc3RlcigmZnNfZW5ldF9mZWNfbWRpb19kcml2ZXIpOworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1maXhlZC5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZml4ZWQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWU0YTljMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1maXhlZC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTEgKzAsMCBAQAotLyoKLSAqIENvbWJpbmVkIEV0aGVybmV0IGRyaXZlciBmb3IgTW90b3JvbGEgTVBDOHh4IGFuZCBNUEM4Mnh4LgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMyBJbnRyYWNvbSBTLkEuIAotICogIGJ5IFBhbnRlbGlzIEFudG9uaW91IDxwYW50b0BpbnRyYWNvbS5ncj4KLSAqIAotICogMjAwNSAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiAKLSAqIFZpdGFseSBCb3JkdWcgPHZib3JkdWdAcnUubXZpc3RhLmNvbT4KLSAqCi0gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAKLSAqIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IAotICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotCi0jaW5jbHVkZSAiZnNfZW5ldC5oIgotCi1zdGF0aWMgY29uc3QgdTE2IG1paV9yZWdzWzddID0gewotCTB4MzEwMCwKLQkweDc4NmQsCi0JMHgwZmZmLAotCTB4MGZmZiwKLQkweDAxZTEsCi0JMHg0NWUxLAotCTB4MDAwMywKLX07Ci0KLXN0YXRpYyBpbnQgbWlpX3JlYWQoc3RydWN0IGZzX2VuZXRfbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoKHVuc2lnbmVkIGludClsb2NhdGlvbiA+PSBBUlJBWV9TSVpFKG1paV9yZWdzKSkKLQkJcmV0dXJuIC0xOwotCi0JaWYgKGxvY2F0aW9uICE9IDUpCi0JCXJldCA9IG1paV9yZWdzW2xvY2F0aW9uXTsKLQllbHNlCi0JCXJldCA9IGJ1cy0+Zml4ZWQubHBhOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgbWlpX3dyaXRlKHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLCBpbnQgdmFsKQotewotCS8qIGRvIG5vdGhpbmcgKi8KLX0KLQotaW50IGZzX21paV9maXhlZF9pbml0KHN0cnVjdCBmc19lbmV0X21paV9idXMgKmJ1cykKLXsKLQljb25zdCBzdHJ1Y3QgZnNfbWlpX2J1c19pbmZvICpiaSA9IGJ1cy0+YnVzX2luZm87Ci0KLQlidXMtPmZpeGVkLmxwYSA9IDB4NDVlMTsJLyogZGVmYXVsdCAxMDBNYiwgZnVsbCBkdXBsZXggKi8KLQotCS8qIGlmIHNwZWVkIGlzIGZpeGVkIGF0IDEwTWIsIHJlbW92ZSAxMDBNYiBtb2RlcyAqLwotCWlmIChiaS0+aS5maXhlZC5zcGVlZCA9PSAxMCkKLQkJYnVzLT5maXhlZC5scGEgJj0gfkxQQV8xMDA7Ci0KLQkvKiBpZiBkdXBsZXggaXMgaGFsZiwgcmVtb3ZlIGZ1bGwgZHVwbGV4IG1vZGVzICovCi0JaWYgKGJpLT5pLmZpeGVkLmR1cGxleCA9PSAwKQotCQlidXMtPmZpeGVkLmxwYSAmPSB+TFBBX0RVUExFWDsKLQotCWJ1cy0+bWlpX3JlYWQgPSBtaWlfcmVhZDsKLQlidXMtPm1paV93cml0ZSA9IG1paV93cml0ZTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5jCmluZGV4IGViYmJkNmMuLjQ3ODhhNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogc3RhdGljIHZvaWQgZ2Zhcl9jbGVhcl9leGFjdF9tYXRjaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGdmYXJfc2V0X21hY19mb3JfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbnVtLCB1OCAqYWRkcik7CiAKLWV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wczsKIAogTU9EVUxFX0FVVEhPUigiRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYyIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHaWFuZmFyIEV0aGVybmV0IERyaXZlciIpOwpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAkJdGVtcHZhbCB8PSBUQ1RSTF9WTElOUzsKIAogCQlnZmFyX3dyaXRlKCZwcml2LT5yZWdzLT50Y3RybCwgdGVtcHZhbCk7Ci0JCQorCiAJCS8qIEVuYWJsZSBWTEFOIHRhZyBleHRyYWN0aW9uICovCiAJCXRlbXB2YWwgPSBnZmFyX3JlYWQoJnByaXYtPnJlZ3MtPnJjdHJsKTsKIAkJdGVtcHZhbCB8PSBSQ1RSTF9WTEVYOwpAQCAtMTcwOCw5ICsxNzA4LDYgQEAKIAl1MzIgdGVtcHZhbDsKIAogCWlmKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQlpZiAobmV0aWZfbXNnX2Rydihwcml2KSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbnRlcmluZyBwcm9taXNjdW91cyBtb2RlLlxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKIAkJLyogU2V0IFJDVFJMIHRvIFBST00gKi8KIAkJdGVtcHZhbCA9IGdmYXJfcmVhZCgmcmVncy0+cmN0cmwpOwogCQl0ZW1wdmFsIHw9IFJDVFJMX1BST007CkBAIC0xNzIxLDcgKzE3MTgsNyBAQAogCQl0ZW1wdmFsICY9IH4oUkNUUkxfUFJPTSk7CiAJCWdmYXJfd3JpdGUoJnJlZ3MtPnJjdHJsLCB0ZW1wdmFsKTsKIAl9Ci0JCisKIAlpZihkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCS8qIFNldCB0aGUgaGFzaCB0byByeCBhbGwgbXVsdGljYXN0IGZyYW1lcyAqLwogCQlnZmFyX3dyaXRlKCZyZWdzLT5pZ2FkZHIwLCAweGZmZmZmZmZmKTsKQEAgLTE5NTcsNyArMTk1NCw3IEBACiAKIAlpZiAoZXJyKQogCQlnZmFyX21kaW9fZXhpdCgpOwotCQorCiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhci5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhci5oCmluZGV4IGY4N2JiYzQuLmMzNWQ0N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXIuaAorKysgYi9kcml2ZXJzL25ldC9naWFuZmFyLmgKQEAgLTc1NCw4ICs3NTQsNiBAQAogCW91dF9iZTMyKGFkZHIsIHZhbCk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgZXRodG9vbF9vcHMgKmdmYXJfb3BfYXJyYXlbXTsKLQogZXh0ZXJuIGlycXJldHVybl90IGdmYXJfcmVjZWl2ZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiBpbnQgc3RhcnR1cF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHZvaWQgc3RvcF9nZmFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2lhbmZhcl9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwppbmRleCBlMGY1MDUyLi42ZDcxYmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX2V0aHRvb2wuYwpAQCAtMTAsOCArMTAsOCBAQAogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDMsMjAwNCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKLSAqICBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gCi0gKiAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMiwgaW5jb3Jwb3JhdGVkIGhlcmVpbiAKKyAqICBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8KKyAqICB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLCBpbmNvcnBvcmF0ZWQgaGVyZWluCiAgKiAgYnkgcmVmZXJlbmNlLgogICovCiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCiAJaWYgKE5VTEwgPT0gcGh5ZGV2KQogCQlyZXR1cm4gLUVOT0RFVjsKLQkKKwogCWNtZC0+bWF4dHhwa3QgPSBwcml2LT50eGNvdW50OwogCWNtZC0+bWF4cnhwa3QgPSBwcml2LT5yeGNvdW50OwogCkBAIC0yODEsNyArMjgxLDcgQEAKIHN0YXRpYyBpbnQgZ2Zhcl9nY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmN2YWxzKQogewogCXN0cnVjdCBnZmFyX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJaWYgKCEocHJpdi0+ZWluZm8tPmRldmljZV9mbGFncyAmIEZTTF9HSUFORkFSX0RFVl9IQVNfQ09BTEVTQ0UpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKQEAgLTU1NSwxOSArNTU1LDE5IEBACiB9CiAKIHN0YXRpYyB1aW50MzJfdCBnZmFyX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoteyAgICAgICAKK3sKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlyZXR1cm4gcHJpdi0+bXNnX2VuYWJsZTsKLX0gICAgICAgCi0gICAgICAgIAorfQorCiBzdGF0aWMgdm9pZCBnZmFyX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1aW50MzJfdCBkYXRhKQoteyAgICAgICAKK3sKIAlzdHJ1Y3QgZ2Zhcl9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlwcml2LT5tc2dfZW5hYmxlID0gZGF0YTsKIH0KIAogCi1zdHJ1Y3QgZXRodG9vbF9vcHMgZ2Zhcl9ldGh0b29sX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBnZmFyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBnZmFyX2dzZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzID0gZ2Zhcl9zc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gZ2Zhcl9nZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX21paS5jCmluZGV4IGM5MmU2NTkuLmZmNjg0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuYwpAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIGRyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmMKICAqCiAgKiBHaWFuZmFyIEV0aGVybmV0IERyaXZlciAtLSBNSUlNIGJ1cyBpbXBsZW1lbnRhdGlvbgpAQCAtMTcxLDcgKzE3MSw3IEBACiAJZXJyID0gbWRpb2J1c19yZWdpc3RlcihuZXdfYnVzKTsKIAogCWlmICgwICE9IGVycikgewotCQlwcmludGsgKEtFUk5fRVJSICIlczogQ2Fubm90IHJlZ2lzdGVyIGFzIE1ESU8gYnVzXG4iLCAKKwkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBhcyBNRElPIGJ1c1xuIiwKIAkJCQluZXdfYnVzLT5uYW1lKTsKIAkJZ290byBidXNfcmVnaXN0ZXJfZmFpbDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oIGIvZHJpdmVycy9uZXQvZ2lhbmZhcl9taWkuaAppbmRleCBkNTI3Y2YyLi41ZDM0MDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9naWFuZmFyX21paS5oCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXJfbWlpLmgKQEAgLTEsNCArMSw0IEBACi0vKiAKKy8qCiAgKiBkcml2ZXJzL25ldC9naWFuZmFyX21paS5oCiAgKgogICogR2lhbmZhciBFdGhlcm5ldCBEcml2ZXIgLS0gTUlJIE1hbmFnZW1lbnQgQnVzIEltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKaW5kZXggZThhMThmMTguLjlkZDM4N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2dpYW5mYXJfc3lzZnMuYworKysgYi9kcml2ZXJzL25ldC9naWFuZmFyX3N5c2ZzLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAlwcml2LT5iZF9zdGFzaF9lbiA9IG5ld19zZXR0aW5nOwogCiAJdGVtcCA9IGdmYXJfcmVhZCgmcHJpdi0+cmVncy0+YXR0cik7Ci0JCisKIAlpZiAobmV3X3NldHRpbmcpCiAJCXRlbXAgfD0gQVRUUl9CRFNUQVNIOwogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0NjQyNDBldGguaCBiL2RyaXZlcnMvbmV0L2d0NjQyNDBldGguaAppbmRleCA3ZTdhZjBkLi4wZDZmNDg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ndDY0MjQwZXRoLmgKKysrIGIvZHJpdmVycy9uZXQvZ3Q2NDI0MGV0aC5oCkBAIC0yNSw3ICsyNSw3IEBACiAgKgogICogRXRoZXJuZXQgZHJpdmVyIGRlZmluaXRpb25zIGZvciB0aGUgTUlQUyBHVDk2MTAwIEFkdmFuY2VkCiAgKiBDb21tdW5pY2F0aW9uIENvbnRyb2xsZXIuCi0gKiAKKyAqCiAgKiBNb2RpZmllZCBmb3IgdGhlIE1hcnZlbGxvdXMgR1Q2NDI0MCBSZXRhcmRlZCBDb21tdW5pY2F0aW9uIENvbnRyb2xsZXIuCiAgKi8KICNpZm5kZWYgX0dUNjQyNDBFVEhfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYjRkYjc0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguYworKysgL2Rldi9udWxsCkBAIC0xLDE1NjYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAwLCAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlzdGV2ZWxAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIE1JUFMgR1Q5NjEwMCBBZHZhbmNlZCBDb21tdW5pY2F0aW9uIENvbnRyb2xsZXIuCi0gKiAKLSAqICBSZXZpc2lvbiBoaXN0b3J5Ci0gKiAgICAKLSAqICAgIDExLjExLjIwMDEgIE1vdmVkIHRvIDIuNC4xNCwgcHBvcG92QG12aXN0YS5jb20uICBNb2RpZmllZCBkcml2ZXIgdG8gYWRkCi0gKiAgICAgICAgICAgICAgICBwcm9wZXIgZ3Q5NjEwMEEgc3VwcG9ydC4KLSAqICAgIDEyLjA1LjIwMDEgIE1vdmVkIGV0aCBwb3J0IDAgdG8gaXJxIDMgKG1hcHBlZCB0byBHVF9TRVJJTlQwIG9uIEVWOTYxMDBBKQotICogICAgICAgICAgICAgICAgaW4gb3JkZXIgZm9yIGJvdGggcG9ydHMgdG8gd29yay4gQWxzbyBjbGVhbmVkIHVwIGJvb3QKLSAqICAgICAgICAgICAgICAgIG9wdGlvbiBzdXBwb3J0IChtYWMgYWRkcmVzcyBzdHJpbmcgcGFyc2luZyksIGZsZXNoZWQgb3V0Ci0gKiAgICAgICAgICAgICAgICBndDk2MTAwX2NsZWFudXBfbW9kdWxlKCksIGFuZCBvdGhlciBnZW5lcmFsIGNvZGUgY2xlYW51cHMKLSAqICAgICAgICAgICAgICAgIDxzdGV2ZWxAbXZpc3RhLmNvbT4uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW4uaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jZGVmaW5lIERFU0NfQkUgMQotI2RlZmluZSBERVNDX0RBVEFfQkUgMQotCi0jZGVmaW5lIEdUOTYxMDBfREVCVUcgMgotCi0jaW5jbHVkZSAiZ3Q5NjEwMGV0aC5oIgotCi0vLyBwcm90b3R5cGVzCi1zdGF0aWMgdm9pZCogZG1hYWxsb2Moc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOwotc3RhdGljIHZvaWQgZG1hZnJlZShzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIpOwotc3RhdGljIHZvaWQgZ3Q5NjEwMF9kZWxheShpbnQgbXNlYyk7Ci1zdGF0aWMgaW50IGd0OTYxMDBfYWRkX2hhc2hfZW50cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHVuc2lnbmVkIGNoYXIqIGFkZHIpOwotc3RhdGljIHZvaWQgcmVhZF9taWJfY291bnRlcnMoc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3ApOwotc3RhdGljIGludCByZWFkX01JSShpbnQgcGh5X2FkZHIsIHUzMiByZWcpOwotc3RhdGljIGludCB3cml0ZV9NSUkoaW50IHBoeV9hZGRyLCB1MzIgcmVnLCB1MTYgZGF0YSk7Ci1zdGF0aWMgaW50IGd0OTYxMDBfaW5pdF9tb2R1bGUodm9pZCk7Ci1zdGF0aWMgdm9pZCBndDk2MTAwX2NsZWFudXBfbW9kdWxlKHZvaWQpOwotc3RhdGljIHZvaWQgZHVtcF9NSUkoaW50IGRiZ19sdmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZHVtcF90eF9kZXNjKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaSk7Ci1zdGF0aWMgdm9pZCBkdW1wX3J4X2Rlc2MoaW50IGRiZ19sdmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpKTsKLXN0YXRpYyB2b2lkIGR1bXBfc2tiKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwotc3RhdGljIHZvaWQgdXBkYXRlX3N0YXRzKHN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwKTsKLXN0YXRpYyB2b2lkIGFib3J0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhYm9ydF9iaXRzKTsKLXN0YXRpYyB2b2lkIGhhcmRfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIGVuYWJsZV9ldGhlcl9pcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBkaXNhYmxlX2V0aGVyX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZ3Q5NjEwMF9wcm9iZTEoc3RydWN0IHBjaV9kZXYgKnBjaSwgaW50IHBvcnRfbnVtKTsKLXN0YXRpYyB2b2lkIHJlc2V0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgcmVzZXRfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaW50IGd0OTYxMDBfY2hlY2tfdHhfY29uc2lzdGVudChzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCk7Ci1zdGF0aWMgaW50IGd0OTYxMDBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgZ3Q5NjEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBndDk2MTAwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBndDk2MTAwX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGludCBndDk2MTAwX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpOwotc3RhdGljIGlycXJldHVybl90IGd0OTYxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotc3RhdGljIHZvaWQgZ3Q5NjEwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgZ3Q5NjEwMF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyogZ3Q5NjEwMF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KLWV4dGVybiBjaGFyICogX19pbml0IHByb21fZ2V0Y21kbGluZSh2b2lkKTsKLQotc3RhdGljIGludCBtYXhfaW50ZXJydXB0X3dvcmsgPSAzMjsKLQotI2RlZmluZSBuaWJzd2FwKHgpICgoKCh4KSA+PiA0KSAmIDB4MGYpIHwgKCgoeCkgPDwgNCkgJiAweGYwKSkKLQotI2RlZmluZSBSVU5fQVQoeCkgKGppZmZpZXMgKyAoeCkpCi0KLS8vIEZvciByZWFkaW5nL3dyaXRpbmcgMzItYml0IHdvcmRzIGFuZCBoYWxmLXdvcmRzIGZyb20vdG8gRE1BIG1lbW9yeQotI2lmZGVmIERFU0NfQkUKLSNkZWZpbmUgY3B1X3RvX2RtYTMyIGNwdV90b19iZTMyCi0jZGVmaW5lIGRtYTMyX3RvX2NwdSBiZTMyX3RvX2NwdQotI2RlZmluZSBjcHVfdG9fZG1hMTYgY3B1X3RvX2JlMTYKLSNkZWZpbmUgZG1hMTZfdG9fY3B1IGJlMTZfdG9fY3B1Ci0jZWxzZQotI2RlZmluZSBjcHVfdG9fZG1hMzIgY3B1X3RvX2xlMzIKLSNkZWZpbmUgZG1hMzJfdG9fY3B1IGxlMzJfdG9fY3B1Ci0jZGVmaW5lIGNwdV90b19kbWExNiBjcHVfdG9fbGUxNgotI2RlZmluZSBkbWExNl90b19jcHUgbGUxNl90b19jcHUKLSNlbmRpZgotCi1zdGF0aWMgY2hhciBtYWMwWzE4XSA9ICIwMC4wMi4wMy4wNC4wNS4wNiI7Ci1zdGF0aWMgY2hhciBtYWMxWzE4XSA9ICIwMC4wMS4wMi4wMy4wNC4wNSI7Ci1tb2R1bGVfcGFyYW1fc3RyaW5nKG1hYzAsIG1hYzAsIDE4LCAwKTsKLW1vZHVsZV9wYXJhbV9zdHJpbmcobWFjMSwgbWFjMCwgMTgsIDApOwotTU9EVUxFX1BBUk1fREVTQyhtYWMwLCAiTUFDIGFkZHJlc3MgZm9yIEdUOTYxMDAgZXRoZXJuZXQgcG9ydCAwIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG1hYzEsICJNQUMgYWRkcmVzcyBmb3IgR1Q5NjEwMCBldGhlcm5ldCBwb3J0IDEiKTsKLQotLyoKLSAqIEluZm8gZm9yIHRoZSBHVDk2MTAwIGV0aGVybmV0IGNvbnRyb2xsZXIncyBwb3J0cy4KLSAqLwotc3RhdGljIHN0cnVjdCBndDk2MTAwX2lmX3QgewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdW5zaWduZWQgaW50ICBpb2Jhc2U7ICAgLy8gSU8gQmFzZSBhZGRyZXNzIG9mIHRoaXMgcG9ydAotCWludCAgICAgICAgICAgaXJxOyAgICAgIC8vIElSUSBudW1iZXIgb2YgdGhpcyBwb3J0Ci0JY2hhciAgICAgICAgICptYWNfc3RyOwotfSBndDk2MTAwX2lmbGlzdFtOVU1fSU5URVJGQUNFU10gPSB7Ci0JewotCQlOVUxMLAotCQlHVDk2MTAwX0VUSDBfQkFTRSwgR1Q5NjEwMF9FVEhFUjBfSVJRLAotCQltYWMwCi0JfSwKLQl7Ci0JCU5VTEwsCi0JCUdUOTYxMDBfRVRIMV9CQVNFLCBHVDk2MTAwX0VUSEVSMV9JUlEsCi0JCW1hYzEKLQl9Ci19OwotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIqCi1jaGlwX25hbWUoaW50IGNoaXBfcmV2KQotewotCXN3aXRjaCAoY2hpcF9yZXYpIHsKLQljYXNlIFJFVl9HVDk2MTAwOgotCQlyZXR1cm4gIkdUOTYxMDAiOwotCWNhc2UgUkVWX0dUOTYxMDBBXzE6Ci0JY2FzZSBSRVZfR1Q5NjEwMEE6Ci0JCXJldHVybiAiR1Q5NjEwMEEiOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiVW5rbm93biBHVDk2MTAwIjsKLQl9Ci19Ci0KLS8qCi0gIERNQSBtZW1vcnkgYWxsb2NhdGlvbiwgZGVyaXZlZCBmcm9tIHBjaV9hbGxvY19jb25zaXN0ZW50LgotKi8KLXN0YXRpYyB2b2lkICogZG1hYWxsb2Moc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCi17Ci0Jdm9pZCAqcmV0OwotCQotCXJldCA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDIHwgR0ZQX0RNQSwgZ2V0X29yZGVyKHNpemUpKTsKLQkKLQlpZiAocmV0ICE9IE5VTEwpIHsKLQkJZG1hX2NhY2hlX2ludigodW5zaWduZWQgbG9uZylyZXQsIHNpemUpOwotCQlpZiAoZG1hX2hhbmRsZSAhPSBOVUxMKQotCQkJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX3BoeXMocmV0KTsKLQotCQkvKiBidW1wIHZpcnR1YWwgYWRkcmVzcyB1cCB0byBub24tY2FjaGVkIGFyZWEgKi8KLQkJcmV0ID0gKHZvaWQqKUtTRUcxQUREUihyZXQpOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGRtYWZyZWUoc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyKQotewotCXZhZGRyID0gKHZvaWQqKUtTRUcwQUREUih2YWRkcik7Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKLX0KLQotc3RhdGljIHZvaWQgZ3Q5NjEwMF9kZWxheShpbnQgbXMpCi17Ci0JaWYgKGluX2ludGVycnVwdCgpKQotCQlyZXR1cm47Ci0JZWxzZQotCQltc2xlZXBfaW50ZXJydXB0aWJsZShtcyk7Ci19Ci0KLXN0YXRpYyBpbnQKLXBhcnNlX21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIqIG1hY3N0cikKLXsKLQlpbnQgaSwgajsKLQl1bnNpZ25lZCBjaGFyIHJlc3VsdCwgdmFsdWU7Ci0JCi0JZm9yIChpPTA7IGk8NjsgaSsrKSB7Ci0JCXJlc3VsdCA9IDA7Ci0JCWlmIChpICE9IDUgJiYgKihtYWNzdHIrMikgIT0gJy4nKSB7Ci0JCQllcnIoX19GSUxFX18gImludmFsaWQgbWFjIGFkZHJlc3MgZm9ybWF0OiAlZCAlY1xuIiwKLQkJCSAgICBpLCAqKG1hY3N0cisyKSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQkKLQkJZm9yIChqPTA7IGo8MjsgaisrKSB7Ci0JCQlpZiAoaXN4ZGlnaXQoKm1hY3N0cikgJiYKLQkJCSAgICAodmFsdWUgPSBpc2RpZ2l0KCptYWNzdHIpID8gKm1hY3N0ci0nMCcgOiAKLQkJCSAgICAgdG91cHBlcigqbWFjc3RyKS0nQScrMTApIDwgMTYpIHsKLQkJCQlyZXN1bHQgPSByZXN1bHQqMTYgKyB2YWx1ZTsKLQkJCQltYWNzdHIrKzsKLQkJCX0gZWxzZSB7Ci0JCQkJZXJyKF9fRklMRV9fICJpbnZhbGlkIG1hYyBhZGRyZXNzICIKLQkJCQkgICAgImNoYXJhY3RlcjogJWNcbiIsICptYWNzdHIpOwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQl9Ci0KLQkJbWFjc3RyKys7IC8vIHN0ZXAgb3ZlciAnLicKLQkJZGV2LT5kZXZfYWRkcltpXSA9IHJlc3VsdDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50Ci1yZWFkX01JSShpbnQgcGh5X2FkZHIsIHUzMiByZWcpCi17Ci0JaW50IHRpbWVkb3V0ID0gMjA7Ci0JdTMyIHNtaXIgPSBzbWlyT3BDb2RlIHwgKHBoeV9hZGRyIDw8IHNtaXJQaHlBZEJpdCkgfAotCQkocmVnIDw8IHNtaXJSZWdBZEJpdCk7Ci0KLQkvLyB3YWl0IGZvciBsYXN0IG9wZXJhdGlvbiB0byBjb21wbGV0ZQotCXdoaWxlIChHVDk2MTAwX1JFQUQoR1Q5NjEwMF9FVEhfU01JX1JFRykgJiBzbWlyQnVzeSkgewotCQkvLyBzbm9vemUgZm9yIDEgbXNlYyBhbmQgY2hlY2sgYWdhaW4KLQkJZ3Q5NjEwMF9kZWxheSgxKTsKLQotCQlpZiAoLS10aW1lZG91dCA9PSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBidXN5IHRpbWVvdXQhIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JfQotICAgIAotCUdUOTYxMDBfV1JJVEUoR1Q5NjEwMF9FVEhfU01JX1JFRywgc21pcik7Ci0KLQl0aW1lZG91dCA9IDIwOwotCS8vIHdhaXQgZm9yIHJlYWQgdG8gY29tcGxldGUKLQl3aGlsZSAoISgoc21pciA9IEdUOTYxMDBfUkVBRChHVDk2MTAwX0VUSF9TTUlfUkVHKSkgJiBzbWlyUmVhZFZhbGlkKSkgewotCQkvLyBzbm9vemUgZm9yIDEgbXNlYyBhbmQgY2hlY2sgYWdhaW4KLQkJZ3Q5NjEwMF9kZWxheSgxKTsKLQkKLQkJaWYgKC0tdGltZWRvdXQgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZW91dCEhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKGludCkoc21pciAmIHNtaXJEYXRhTWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kdW1wX3R4X2Rlc2MoaW50IGRiZ19sdmwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpKQotewotCXN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlndDk2MTAwX3RkX3QgKnRkID0gJmdwLT50eF9yaW5nW2ldOwotCi0JZGJnKGRiZ19sdmwsICJUeCBkZXNjcmlwdG9yIGF0IDB4JTA4bHg6XG4iLCB2aXJ0X3RvX3BoeXModGQpKTsKLQlkYmcoZGJnX2x2bCwKLQkgICAgIiAgICBjbWRzdGF0PSUwNHgsIGJ5dGVfY250PSUwNHgsIGJ1ZmZfcHRyPSUwNHgsIG5leHQ9JTA0eFxuIiwKLQkgICAgZG1hMzJfdG9fY3B1KHRkLT5jbWRzdGF0KSwKLQkgICAgZG1hMTZfdG9fY3B1KHRkLT5ieXRlX2NudCksCi0JICAgIGRtYTMyX3RvX2NwdSh0ZC0+YnVmZl9wdHIpLAotCSAgICBkbWEzMl90b19jcHUodGQtPm5leHQpKTsKLX0KLQotc3RhdGljIHZvaWQKLWR1bXBfcnhfZGVzYyhpbnQgZGJnX2x2bCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGkpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWd0OTYxMDBfcmRfdCAqcmQgPSAmZ3AtPnJ4X3JpbmdbaV07Ci0KLQlkYmcoZGJnX2x2bCwgIlJ4IGRlc2NyaXB0b3IgYXQgMHglMDhseDpcbiIsIHZpcnRfdG9fcGh5cyhyZCkpOwotCWRiZyhkYmdfbHZsLCAiICAgIGNtZHN0YXQ9JTA0eCwgYnVmZl9zej0lMDR4LCBieXRlX2NudD0lMDR4LCAiCi0JICAgICJidWZmX3B0cj0lMDR4LCBuZXh0PSUwNHhcbiIsCi0JICAgIGRtYTMyX3RvX2NwdShyZC0+Y21kc3RhdCksCi0JICAgIGRtYTE2X3RvX2NwdShyZC0+YnVmZl9zeiksCi0JICAgIGRtYTE2X3RvX2NwdShyZC0+Ynl0ZV9jbnQpLAotCSAgICBkbWEzMl90b19jcHUocmQtPmJ1ZmZfcHRyKSwKLQkgICAgZG1hMzJfdG9fY3B1KHJkLT5uZXh0KSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXdyaXRlX01JSShpbnQgcGh5X2FkZHIsIHUzMiByZWcsIHUxNiBkYXRhKQotewotCWludCB0aW1lZG91dCA9IDIwOwotCXUzMiBzbWlyID0gKHBoeV9hZGRyIDw8IHNtaXJQaHlBZEJpdCkgfAotCQkocmVnIDw8IHNtaXJSZWdBZEJpdCkgfCBkYXRhOwotCi0JLy8gd2FpdCBmb3IgbGFzdCBvcGVyYXRpb24gdG8gY29tcGxldGUKLQl3aGlsZSAoR1Q5NjEwMF9SRUFEKEdUOTYxMDBfRVRIX1NNSV9SRUcpICYgc21pckJ1c3kpIHsKLQkJLy8gc25vb3plIGZvciAxIG1zZWMgYW5kIGNoZWNrIGFnYWluCi0JCWd0OTYxMDBfZGVsYXkoMSk7Ci0JCi0JCWlmICgtLXRpbWVkb3V0ID09IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJ1c3kgdGltZW91dCEhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJcmV0dXJuIC0xOwotCQl9Ci0JfQotCi0JR1Q5NjEwMF9XUklURShHVDk2MTAwX0VUSF9TTUlfUkVHLCBzbWlyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQKLWR1bXBfTUlJKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWludCBpLCB2YWw7Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIAotCWlmIChkYmdfbHZsIDw9IEdUOTYxMDBfREVCVUcpIHsKLQkJZm9yIChpPTA7IGk8NzsgaSsrKSB7Ci0JCQlpZiAoKHZhbCA9IHJlYWRfTUlJKGdwLT5waHlfYWRkciwgaSkpID49IDApCi0JCQkJcHJpbnRrKCJNSUkgUmVnICVkPSV4XG4iLCBpLCB2YWwpOwotCQl9Ci0JCWZvciAoaT0xNjsgaTwyMTsgaSsrKSB7Ci0JCQlpZiAoKHZhbCA9IHJlYWRfTUlJKGdwLT5waHlfYWRkciwgaSkpID49IDApCi0JCQkJcHJpbnRrKCJNSUkgUmVnICVkPSV4XG4iLCBpLCB2YWwpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotZHVtcF9od19hZGRyKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCBjaGFyKiBwZngsCi0JICAgICBjb25zdCBjaGFyKiBmdW5jLCB1bnNpZ25lZCBjaGFyKiBhZGRyX3N0cikKLXsKLQlpbnQgaTsKLQljaGFyIGJ1ZlsxMDBdLCBvY3RldFs1XTsKLSAgICAKLQlpZiAoZGJnX2x2bCA8PSBHVDk2MTAwX0RFQlVHKSB7Ci0JCXNwcmludGYoYnVmLCBwZngsIGZ1bmMpOwotCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7Ci0JCQlzcHJpbnRmKG9jdGV0LCAiJTIuMnglcyIsCi0JCQkJYWRkcl9zdHJbaV0sIGk8NSA/ICI6IiA6ICJcbiIpOwotCQkJc3RyY2F0KGJ1Ziwgb2N0ZXQpOwotCQl9Ci0JCWluZm8oIiVzIiwgYnVmKTsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQKLWR1bXBfc2tiKGludCBkYmdfbHZsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCWludCBpOwotCXVuc2lnbmVkIGNoYXIqIHNrYmRhdGE7Ci0gICAgCi0JaWYgKGRiZ19sdmwgPD0gR1Q5NjEwMF9ERUJVRykgewotCQlkYmcoZGJnX2x2bCwgIiVzOiBza2I9JXAsIHNrYi0+ZGF0YT0lcCwgc2tiLT5sZW49JWRcbiIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHNrYiwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0KLQkJc2tiZGF0YSA9ICh1bnNpZ25lZCBjaGFyKilLU0VHMUFERFIoc2tiLT5kYXRhKTsKLSAgICAKLQkJZm9yIChpPTA7IGk8c2tiLT5sZW47IGkrKykgewotCQkJaWYgKCEoaSAlIDE2KSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiXG4gICAlMy4zeDogJTIuMngsIiwKLQkJCQkgICAgICAgaSwgc2tiZGF0YVtpXSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiUyLjJ4LCIsIHNrYmRhdGFbaV0pOwotCQl9Ci0JCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwotCX0KLX0KLQotCi1zdGF0aWMgaW50Ci1ndDk2MTAwX2FkZF9oYXNoX2VudHJ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYXIqIGFkZHIpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCS8vdTE2IGhhc2hSZXN1bHQsIHN0bXA7Ci0JLy91bnNpZ25lZCBjaGFyIGN0bXAsIGhhc2hfZWFbNl07Ci0JdTMyIHRibEVudHJ5MSwgdGJsRW50cnkwLCAqdGJsRW50cnlBZGRyOwotCWludCBpOwotCi0JdGJsRW50cnkxID0gaHRlVmFsaWQgfCBodGVSRDsKLQl0YmxFbnRyeTEgfD0gKHUzMilhZGRyWzVdIDw8IDM7Ci0JdGJsRW50cnkxIHw9ICh1MzIpYWRkcls0XSA8PCAxMTsKLQl0YmxFbnRyeTEgfD0gKHUzMilhZGRyWzNdIDw8IDE5OwotCXRibEVudHJ5MSB8PSAoKHUzMilhZGRyWzJdICYgMHgxZikgPDwgMjc7Ci0JZGJnKDMsICIlczogdGJsRW50cnkxPSV4XG4iLCBfX0ZVTkNUSU9OX18sIHRibEVudHJ5MSk7Ci0JdGJsRW50cnkwID0gKCh1MzIpYWRkclsyXSA+PiA1KSAmIDB4MDc7Ci0JdGJsRW50cnkwIHw9ICh1MzIpYWRkclsxXSA8PCAzOwotCXRibEVudHJ5MCB8PSAodTMyKWFkZHJbMF0gPDwgMTE7Ci0JZGJnKDMsICIlczogdGJsRW50cnkwPSV4XG4iLCBfX0ZVTkNUSU9OX18sIHRibEVudHJ5MCk7Ci0KLSNpZiAwCi0KLQlmb3IgKGk9MDsgaTw2OyBpKyspIHsKLQkJLy8gbmliYmxlIHN3YXAKLQkJY3RtcCA9IG5pYnN3YXAoYWRkcltpXSk7Ci0JCS8vIGludmVydCBldmVyeSBuaWJibGUKLQkJaGFzaF9lYVtpXSA9ICgoY3RtcCYxKTw8MykgfCAoKGN0bXAmOCk+PjMpIHwKLQkJCSgoY3RtcCYyKTw8MSkgfCAoKGN0bXAmNCk+PjEpOwotCQloYXNoX2VhW2ldIHw9ICgoY3RtcCYweDEwKTw8MykgfCAoKGN0bXAmMHg4MCk+PjMpIHwKLQkJCSgoY3RtcCYweDIwKTw8MSkgfCAoKGN0bXAmMHg0MCk+PjEpOwotCX0KLQotCWR1bXBfaHdfYWRkcigzLCBkZXYsICIlczogbmliIHN3YXAvaW52dCBhZGRyPSIsIF9fRlVOQ1RJT05fXywgaGFzaF9lYSk7Ci0gICAgCi0JaWYgKGdwLT5oYXNoX21vZGUgPT0gMCkgewotCQloYXNoUmVzdWx0ID0gKCh1MTYpaGFzaF9lYVswXSAmIDB4ZmMpIDw8IDc7Ci0JCXN0bXAgPSAoKHUxNiloYXNoX2VhWzBdICYgMHgwMykgfAotCQkJKCgodTE2KWhhc2hfZWFbMV0gJiAweDdmKSA8PCAyKTsKLQkJc3RtcCBePSAoKCh1MTYpaGFzaF9lYVsxXSA+PiA3KSAmIDB4MDEpIHwKLQkJCSgodTE2KWhhc2hfZWFbMl0gPDwgMSk7Ci0JCXN0bXAgXj0gKHUxNiloYXNoX2VhWzNdIHwgKCgodTE2KWhhc2hfZWFbNF0gJiAxKSA8PCA4KTsKLQkJaGFzaFJlc3VsdCB8PSBzdG1wOwotCX0gZWxzZSB7Ci0JCXJldHVybiAtMTsgLy8gZG9uJ3Qgc3VwcG9ydCBoYXNoIG1vZGUgMQotCX0KLQotCWRiZygzLCAiJXM6IGhhc2hSZXN1bHQ9JXhcbiIsIF9fRlVOQ1RJT05fXywgaGFzaFJlc3VsdCk7Ci0KLQl0YmxFbnRyeUFkZHIgPQotCQkodTMyICopKCZncC0+aGFzaF90YWJsZVsoKHUzMiloYXNoUmVzdWx0ICYgMHg3ZmYpIDw8IDNdKTsKLSAgICAKLQlkYmcoMywgIiVzOiB0YmxFbnRyeUFkZHI9JXBcbiIsIHRibEVudHJ5QWRkciwgX19GVU5DVElPTl9fKTsKLQotCWZvciAoaT0wOyBpPEhBU0hfSE9QX05VTUJFUjsgaSsrKSB7Ci0JCWlmICgoKnRibEVudHJ5QWRkciAmIGh0ZVZhbGlkKSAmJgotCQkgICAgISgqdGJsRW50cnlBZGRyICYgaHRlU2tpcCkpIHsKLQkJCS8vIFRoaXMgZW50cnkgaXMgYWxyZWFkeSBvY2N1cGllZCwgZ28gdG8gbmV4dCBlbnRyeQotCQkJdGJsRW50cnlBZGRyICs9IDI7Ci0JCQlkYmcoMywgIiVzOiBza2lwcGluZyB0byAlcFxuIiwgX19GVU5DVElPTl9fLCAKLQkJCSAgICB0YmxFbnRyeUFkZHIpOwotCQl9IGVsc2UgewotCQkJbWVtc2V0KHRibEVudHJ5QWRkciwgMCwgOCk7Ci0JCQl0YmxFbnRyeUFkZHJbMV0gPSBjcHVfdG9fZG1hMzIodGJsRW50cnkxKTsKLQkJCXRibEVudHJ5QWRkclswXSA9IGNwdV90b19kbWEzMih0YmxFbnRyeTApOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoaSA+PSBIQVNIX0hPUF9OVU1CRVIpIHsKLQkJZXJyKCIlczogZXhwaXJlZCFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtMTsgLy8gQ291bGRuJ3QgZmluZCBhbiB1bnVzZWQgZW50cnkKLQl9Ci0KLSNlbHNlCi0KLQl0YmxFbnRyeUFkZHIgPSAodTMyICopZ3AtPmhhc2hfdGFibGU7Ci0JZm9yIChpPTA7IGk8UlhfSEFTSF9UQUJMRV9TSVpFLzQ7IGkrPTIpIHsKLQkJdGJsRW50cnlBZGRyW2krMV0gPSBjcHVfdG9fZG1hMzIodGJsRW50cnkxKTsKLQkJdGJsRW50cnlBZGRyW2ldID0gY3B1X3RvX2RtYTMyKHRibEVudHJ5MCk7Ci0JfQotCi0jZW5kaWYKLSAgICAKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgdm9pZAotcmVhZF9taWJfY291bnRlcnMoc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3ApCi17Ci0JdTMyKiBtaWJfcmVncyA9ICh1MzIqKSZncC0+bWliOwotCWludCBpOwotICAgIAotCWZvciAoaT0wOyBpPHNpemVvZihtaWJfY291bnRlcnNfdCkvc2l6ZW9mKHUzMik7IGkrKykKLQkJbWliX3JlZ3NbaV0gPSBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX01JQl9DT1VOVF9CQVNFICsKLQkJCQkJICAgICAgaSpzaXplb2YodTMyKSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXVwZGF0ZV9zdGF0cyhzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCkKLXsKLQltaWJfY291bnRlcnNfdCAqbWliID0gJmdwLT5taWI7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmdwLT5zdGF0czsKLSAgICAKLQlyZWFkX21pYl9jb3VudGVycyhncCk7Ci0gICAgCi0Jc3RhdHMtPnJ4X3BhY2tldHMgPSBtaWItPnRvdGFsRnJhbWVzUmVjZWl2ZWQ7Ci0Jc3RhdHMtPnR4X3BhY2tldHMgPSBtaWItPmZyYW1lc1NlbnQ7Ci0Jc3RhdHMtPnJ4X2J5dGVzID0gbWliLT50b3RhbEJ5dGVSZWNlaXZlZDsKLQlzdGF0cy0+dHhfYnl0ZXMgPSBtaWItPmJ5dGVTZW50OwotCXN0YXRzLT5yeF9lcnJvcnMgPSBtaWItPnRvdGFsRnJhbWVzUmVjZWl2ZWQgLSBtaWItPmZyYW1lc1JlY2VpdmVkOwotCS8vdGhlIHR4IGVycm9yIGNvdW50ZXJzIGFyZSBpbmNyZW1lbnRlZCBieSB0aGUgSVNSCi0JLy9yeF9kcm9wcGVkIGluY3JlbWVudGVkIGJ5IGd0OTYxMDBfcngKLQkvL3R4X2Ryb3BwZWQgaW5jcmVtZW50ZWQgYnkgZ3Q5NjEwMF90eAotCXN0YXRzLT5tdWx0aWNhc3QgPSBtaWItPm11bHRpY2FzdEZyYW1lc1JlY2VpdmVkOwotCS8vIGNvbGxpc2lvbnMgaW5jcmVtZW50ZWQgYnkgZ3Q5NjEwMF90eF9jb21wbGV0ZQotCXN0YXRzLT5yeF9sZW5ndGhfZXJyb3JzID0gbWliLT5vdmVyc2l6ZUZyYW1lcyArIG1pYi0+ZnJhZ21lbnRzOwotCS8vIFRoZSBSeEVycm9yIGNvbmRpdGlvbiBtZWFucyB0aGUgUnggRE1BIGVuY291bnRlcmVkIGEKLQkvLyBDUFUgb3duZWQgZGVzY3JpcHRvciwgd2hpY2gsIGlmIHRoaW5ncyBhcmUgd29ya2luZyBhcwotCS8vIHRoZXkgc2hvdWxkLCBtZWFucyB0aGUgUnggcmluZyBoYXMgb3ZlcmZsb3dlZC4KLQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgPSBtaWItPm1hY1J4RXJyb3I7Ci0Jc3RhdHMtPnJ4X2NyY19lcnJvcnMgPSBtaWItPmNSQ0Vycm9yOwotfQotCi1zdGF0aWMgdm9pZAotYWJvcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFib3J0X2JpdHMpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCB0aW1lZG91dCA9IDEwMDsgLy8gd2FpdCB1cCB0byAxMDAgbXNlYyBmb3IgaGFyZCBzdG9wIHRvIGNvbXBsZXRlCi0KLQlkYmcoMywgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JLy8gUmV0dXJuIGlmIG5laXRoZXIgUnggb3IgVHggYWJvcnQgYml0cyBhcmUgc2V0Ci0JaWYgKCEoYWJvcnRfYml0cyAmIChzZGNtckFSIHwgc2RjbXJBVCkpKQotCQlyZXR1cm47Ci0KLQkvLyBtYWtlIHN1cmUgb25seSB0aGUgUngvVHggYWJvcnQgYml0cyBhcmUgc2V0Ci0JYWJvcnRfYml0cyAmPSAoc2RjbXJBUiB8IHNkY21yQVQpOwotICAgIAotCXNwaW5fbG9jaygmZ3AtPmxvY2spOwotCi0JLy8gYWJvcnQgYW55IFJ4L1R4IERNQSBpbW1lZGlhdGVseQotCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09NTSwgYWJvcnRfYml0cyk7Ci0KLQlkYmcoMywgIiVzOiBTRE1BIGNvbW0gPSAleFxuIiwgX19GVU5DVElPTl9fLAotCSAgICBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09NTSkpOwotCi0JLy8gd2FpdCBmb3IgYWJvcnQgdG8gY29tcGxldGUKLQl3aGlsZSAoR1Q5NjEwMEVUSF9SRUFEKGdwLCBHVDk2MTAwX0VUSF9TRE1BX0NPTU0pICYgYWJvcnRfYml0cykgewotCQkvLyBzbm9vemUgZm9yIDEgbXNlYyBhbmQgY2hlY2sgYWdhaW4KLQkJZ3Q5NjEwMF9kZWxheSgxKTsKLQkKLQkJaWYgKC0tdGltZWRvdXQgPT0gMCkgewotCQkJZXJyKCIlczogdGltZW91dCEhXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlzcGluX3VubG9jaygmZ3AtPmxvY2spOwotfQotCi0KLXN0YXRpYyB2b2lkCi1oYXJkX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlkYmcoMywgIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JZGlzYWJsZV9ldGhlcl9pcnEoZGV2KTsKLQotCWFib3J0KGRldiwgc2RjbXJBUiB8IHNkY21yQVQpOwotCi0JLy8gZGlzYWJsZSBwb3J0Ci0JR1Q5NjEwMEVUSF9XUklURShncCwgR1Q5NjEwMF9FVEhfUE9SVF9DT05GSUcsIDApOwotfQotCi0KLXN0YXRpYyB2b2lkCi1lbmFibGVfZXRoZXJfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiBpbnRNYXNrOwotCS8qCi0JICogcm91dGUgZXRoZXJuZXQgaW50ZXJydXB0IHRvIEdUX1NFUklOVDAgZm9yIHBvcnQgMCwKLQkgKiBHVF9JTlQwIGZvciBwb3J0IDEuCi0JICovCi0JaW50IGludHJfbWFza19yZWcgPSAoZ3AtPnBvcnRfbnVtID09IDApID8KLQkJR1Q5NjEwMF9TRVJJTlQwX01BU0sgOiBHVDk2MTAwX0lOVDBfSElHSF9NQVNLOwotCQotCWlmIChncC0+Y2hpcF9yZXYgPj0gUkVWX0dUOTYxMDBBXzEpIHsKLQkJaW50TWFzayA9IGljclR4QnVmZmVyTG93IHwgaWNyVHhFbmRMb3cgfAotCQkJaWNyVHhFcnJvckxvdyAgfCBpY3JSeE9WUiB8IGljclR4VWRyIHwKLQkJCWljclJ4QnVmZmVyUTAgfCBpY3JSeEVycm9yUTAgfAotCQkJaWNyTUlJUGh5U1RDIHwgaWNyRXRoZXJJbnRTdW07Ci0JfQotCWVsc2UgewotCQlpbnRNYXNrID0gaWNyVHhCdWZmZXJMb3cgfCBpY3JUeEVuZExvdyB8Ci0JCQlpY3JUeEVycm9yTG93ICB8IGljclJ4T1ZSIHwgaWNyVHhVZHIgfAotCQkJaWNyUnhCdWZmZXIgfCBpY3JSeEVycm9yIHwKLQkJCWljck1JSVBoeVNUQyB8IGljckV0aGVySW50U3VtOwotCX0KLQkKLQkvLyB1bm1hc2sgaW50ZXJydXB0cwotCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX0lOVF9NQVNLLCBpbnRNYXNrKTsKLSAgICAKLQlpbnRNYXNrID0gR1Q5NjEwMF9SRUFEKGludHJfbWFza19yZWcpOwotCWludE1hc2sgfD0gMTw8Z3AtPnBvcnRfbnVtOwotCUdUOTYxMDBfV1JJVEUoaW50cl9tYXNrX3JlZywgaW50TWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1kaXNhYmxlX2V0aGVyX2lycShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1MzIgaW50TWFzazsKLQlpbnQgaW50cl9tYXNrX3JlZyA9IChncC0+cG9ydF9udW0gPT0gMCkgPwotCQlHVDk2MTAwX1NFUklOVDBfTUFTSyA6IEdUOTYxMDBfSU5UMF9ISUdIX01BU0s7Ci0KLQlpbnRNYXNrID0gR1Q5NjEwMF9SRUFEKGludHJfbWFza19yZWcpOwotCWludE1hc2sgJj0gfigxPDxncC0+cG9ydF9udW0pOwotCUdUOTYxMDBfV1JJVEUoaW50cl9tYXNrX3JlZywgaW50TWFzayk7Ci0gICAgCi0JR1Q5NjEwMEVUSF9XUklURShncCwgR1Q5NjEwMF9FVEhfSU5UX01BU0ssIDApOwotfQotCi0KLS8qCi0gKiBJbml0IEdUOTYxMDAgZXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIKLSAqLwotc3RhdGljIGludCBndDk2MTAwX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaTsKLQlpbnQgaSwgcmV0dmFsPTA7Ci0JdTMyIGNwdUNvbmZpZzsKLQotCS8qCi0JICogU3R1cGlkIHByb2JlIGJlY2F1c2UgdGhpcyByZWFsbHkgaXNuJ3QgYSBQQ0kgZGV2aWNlCi0JICovCi0JaWYgKCEocGNpID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUOTYxMDAsIE5VTEwpKSAmJgotCSAgICAhKHBjaSA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX01BUlZFTEwsCi0JCSAgICAgICAgICAgICAgICAgICAgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUOTYxMDBBLCBOVUxMKSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IEdUOTYxMDAgbm90IGZvdW5kIVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWNwdUNvbmZpZyA9IEdUOTYxMDBfUkVBRChHVDk2MTAwX0NQVV9JTlRFUkZfQ09ORklHKTsKLQlpZiAoY3B1Q29uZmlnICYgKDE8PDEyKSkgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18KLQkJICAgICAgICI6IG11c3QgYmUgaW4gQmlnIEVuZGlhbiBtb2RlIVxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCWZvciAoaT0wOyBpIDwgTlVNX0lOVEVSRkFDRVM7IGkrKykKLQkJcmV0dmFsIHw9IGd0OTYxMDBfcHJvYmUxKHBjaSwgaSk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBndDk2MTAwX3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGNpLCBpbnQgcG9ydF9udW0pCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBOVUxMOwotCXN0cnVjdCBndDk2MTAwX2lmX3QgKmd0aWYgPSAmZ3Q5NjEwMF9pZmxpc3RbcG9ydF9udW1dOwotCWludCBwaHlfYWRkciwgcGh5X2lkMSwgcGh5X2lkMjsKLQl1MzIgcGh5QUQ7Ci0JaW50IHJldHZhbDsKLQl1bnNpZ25lZCBjaGFyIGNoaXBfcmV2OwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOwotICAgIAotCWlmIChndGlmLT5pcnEgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycSB1bmtub3duIC0gcHJvYmluZyBub3Qgc3VwcG9ydGVkXG4iLAotCQkgICAgICBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0gICAgCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpLCBQQ0lfUkVWSVNJT05fSUQsICZjaGlwX3Jldik7Ci0KLQlpZiAoY2hpcF9yZXYgPj0gUkVWX0dUOTYxMDBBXzEpIHsKLQkJcGh5QUQgPSBHVDk2MTAwX1JFQUQoR1Q5NjEwMF9FVEhfUEhZX0FERFJfUkVHKTsKLQkJcGh5X2FkZHIgPSAocGh5QUQgPj4gKDUqcG9ydF9udW0pKSAmIDB4MWY7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogbm90IHN1cmUgd2hhdCdzIHRoaXMgYWJvdXQgLS0gcHJvYmFibHkgYSBndCBidWcKLQkJICovCi0JCXBoeV9hZGRyID0gcG9ydF9udW07Ci0JCXBoeUFEID0gR1Q5NjEwMF9SRUFEKEdUOTYxMDBfRVRIX1BIWV9BRERSX1JFRyk7Ci0JCXBoeUFEICY9IH4oMHgxZiA8PCAocG9ydF9udW0qNSkpOwotCQlwaHlBRCB8PSBwaHlfYWRkciA8PCAocG9ydF9udW0qNSk7Ci0JCUdUOTYxMDBfV1JJVEUoR1Q5NjEwMF9FVEhfUEhZX0FERFJfUkVHLCBwaHlBRCk7Ci0JfQotCQotCS8vIHByb2JlIGZvciB0aGUgZXh0ZXJuYWwgUEhZCi0JaWYgKChwaHlfaWQxID0gcmVhZF9NSUkocGh5X2FkZHIsIDIpKSA8PSAwIHx8Ci0JICAgIChwaHlfaWQyID0gcmVhZF9NSUkocGh5X2FkZHIsIDMpKSA8PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIFBIWSBmb3VuZCBvbiBNSUklZFxuIiwgX19GVU5DVElPTl9fLCBwb3J0X251bSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQkKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGd0aWYtPmlvYmFzZSwgR1Q5NjEwMF9FVEhfSU9fU0laRSwgIkdUOTYxMDBFVEgiKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X3JlZ2lvbiBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBndDk2MTAwX3ByaXZhdGUpKTsKLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0JZ3RpZi0+ZGV2ID0gZGV2OwotCQotCS8qIHByaXZhdGUgc3RydWN0IGFsaWduZWQgYW5kIHplcm9lZCBieSBhbGxvY19ldGhlcmRldiAqLwotCS8qIEZpbGwgaW4gdGhlICdkZXYnIGZpZWxkcy4gKi8KLQlkZXYtPmJhc2VfYWRkciA9IGd0aWYtPmlvYmFzZTsKLQlkZXYtPmlycSA9IGd0aWYtPmlycTsKLQotCWlmICgocmV0dmFsID0gcGFyc2VfbWFjX2FkZHIoZGV2LCBndGlmLT5tYWNfc3RyKSkpIHsKLQkJZXJyKCIlczogTUFDIGFkZHJlc3MgcGFyc2UgZmFpbGVkXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotCQlnb3RvIG91dDE7Ci0JfQotCi0JZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JbWVtc2V0KGdwLCAwLCBzaXplb2YoKmdwKSk7IC8vIGNsZWFyIGl0Ci0KLQlncC0+cG9ydF9udW0gPSBwb3J0X251bTsKLQlncC0+cG9ydF9vZmZzZXQgPSBwb3J0X251bSAqIEdUOTYxMDBfRVRIX0lPX1NJWkU7Ci0JZ3AtPnBoeV9hZGRyID0gcGh5X2FkZHI7Ci0JZ3AtPmNoaXBfcmV2ID0gY2hpcF9yZXY7Ci0KLQlpbmZvKCIlcyBmb3VuZCBhdCAweCV4LCBpcnEgJWRcbiIsCi0JICAgICBjaGlwX25hbWUoZ3AtPmNoaXBfcmV2KSwgZ3RpZi0+aW9iYXNlLCBndGlmLT5pcnEpOwotCWR1bXBfaHdfYWRkcigwLCBkZXYsICIlczogSFcgQWRkcmVzcyAiLCBfX0ZVTkNUSU9OX18sIGRldi0+ZGV2X2FkZHIpOwotCWluZm8oIiVzIGNoaXAgcmV2aXNpb249JWRcbiIsIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBncC0+Y2hpcF9yZXYpOwotCWluZm8oIiVzIGV0aGVybmV0IHBvcnQgJWRcbiIsIGNoaXBfbmFtZShncC0+Y2hpcF9yZXYpLCBncC0+cG9ydF9udW0pOwotCWluZm8oImV4dGVybmFsIFBIWSBJRDE9MHglMDR4LCBJRDI9MHglMDR4XG4iLCBwaHlfaWQxLCBwaHlfaWQyKTsKLQotCS8vIEFsbG9jYXRlIFJ4IGFuZCBUeCBkZXNjcmlwdG9yIHJpbmdzCi0JaWYgKGdwLT5yeF9yaW5nID09IE5VTEwpIHsKLQkJLy8gQWxsIGRlc2NyaXB0b3JzIGluIHJpbmcgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQKLQkJZ3AtPnJ4X3JpbmcgPSBkbWFhbGxvYyhzaXplb2YoZ3Q5NjEwMF9yZF90KSAqIFJYX1JJTkdfU0laRQotCQkJCSAgICAgICArIHNpemVvZihndDk2MTAwX3RkX3QpICogVFhfUklOR19TSVpFLAotCQkJCSAgICAgICAmZ3AtPnJ4X3JpbmdfZG1hKTsKLQkJaWYgKGdwLT5yeF9yaW5nID09IE5VTEwpIHsKLQkJCXJldHZhbCA9IC1FTk9NRU07Ci0JCQlnb3RvIG91dDE7Ci0JCX0KLQkKLQkJZ3AtPnR4X3JpbmcgPSAoZ3Q5NjEwMF90ZF90ICopKGdwLT5yeF9yaW5nICsgUlhfUklOR19TSVpFKTsKLQkJZ3AtPnR4X3JpbmdfZG1hID0KLQkJCWdwLT5yeF9yaW5nX2RtYSArIHNpemVvZihndDk2MTAwX3JkX3QpICogUlhfUklOR19TSVpFOwotCX0KLSAgICAKLQkvLyBBbGxvY2F0ZSB0aGUgUnggRGF0YSBCdWZmZXJzCi0JaWYgKGdwLT5yeF9idWZmID09IE5VTEwpIHsKLQkJZ3AtPnJ4X2J1ZmYgPSBkbWFhbGxvYyhQS1RfQlVGX1NaKlJYX1JJTkdfU0laRSwKLQkJCQkgICAgICAgJmdwLT5yeF9idWZmX2RtYSk7Ci0JCWlmIChncC0+cnhfYnVmZiA9PSBOVUxMKSB7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBvdXQyOwotCQl9Ci0JfQotICAgIAotCWRiZygzLCAiJXM6IHJ4X3Jpbmc9JXAsIHR4X3Jpbmc9JXBcbiIsIF9fRlVOQ1RJT05fXywKLQkgICAgZ3AtPnJ4X3JpbmcsIGdwLT50eF9yaW5nKTsKLQotCS8vIEFsbG9jYXRlIFJ4IEhhc2ggVGFibGUKLQlpZiAoZ3AtPmhhc2hfdGFibGUgPT0gTlVMTCkgewotCQlncC0+aGFzaF90YWJsZSA9IChjaGFyKilkbWFhbGxvYyhSWF9IQVNIX1RBQkxFX1NJWkUsCi0JCQkJCQkgJmdwLT5oYXNoX3RhYmxlX2RtYSk7Ci0JCWlmIChncC0+aGFzaF90YWJsZSA9PSBOVUxMKSB7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBvdXQzOwotCQl9Ci0JfQotICAgIAotCWRiZygzLCAiJXM6IGhhc2g9JXBcbiIsIF9fRlVOQ1RJT05fXywgZ3AtPmhhc2hfdGFibGUpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmdwLT5sb2NrKTsKLSAgICAKLQlkZXYtPm9wZW4gPSBndDk2MTAwX29wZW47Ci0JZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBndDk2MTAwX3R4OwotCWRldi0+c3RvcCA9IGd0OTYxMDBfY2xvc2U7Ci0JZGV2LT5nZXRfc3RhdHMgPSBndDk2MTAwX2dldF9zdGF0czsKLQkvL2Rldi0+ZG9faW9jdGwgPSBndDk2MTAwX2lvY3RsOwotCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gZ3Q5NjEwMF9zZXRfcnhfbW9kZTsKLQlkZXYtPnR4X3RpbWVvdXQgPSBndDk2MTAwX3R4X3RpbWVvdXQ7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEdUOTYxMDBFVEhfVFhfVElNRU9VVDsKLQotCXJldHZhbCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gb3V0NDsKLQlyZXR1cm4gMDsKLQotb3V0NDoKLQlkbWFmcmVlKFJYX0hBU0hfVEFCTEVfU0laRSwgZ3AtPmhhc2hfdGFibGVfZG1hKTsKLW91dDM6Ci0JZG1hZnJlZShQS1RfQlVGX1NaKlJYX1JJTkdfU0laRSwgZ3AtPnJ4X2J1ZmYpOwotb3V0MjoKLQlkbWFmcmVlKHNpemVvZihndDk2MTAwX3JkX3QpICogUlhfUklOR19TSVpFCi0JCSsgc2l6ZW9mKGd0OTYxMDBfdGRfdCkgKiBUWF9SSU5HX1NJWkUsCi0JCWdwLT5yeF9yaW5nKTsKLW91dDE6Ci0JZnJlZV9uZXRkZXYgKGRldik7Ci1vdXQ6Ci0JcmVsZWFzZV9yZWdpb24oZ3RpZi0+aW9iYXNlLCBHVDk2MTAwX0VUSF9JT19TSVpFKTsKLQotCWVycigiJXMgZmFpbGVkLiAgUmV0dXJucyAlZFxuIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXJlc2V0X3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCi0JYWJvcnQoZGV2LCBzZGNtckFUKTsKLQotCWZvciAoaT0wOyBpPFRYX1JJTkdfU0laRTsgaSsrKSB7Ci0JCWlmIChncC0+dHhfc2tidWZmW2ldKSB7Ci0JCQlpZiAoaW5faW50ZXJydXB0KCkpCi0JCQkJZGV2X2tmcmVlX3NrYl9pcnEoZ3AtPnR4X3NrYnVmZltpXSk7Ci0JCQllbHNlCi0JCQkJZGV2X2tmcmVlX3NrYihncC0+dHhfc2tidWZmW2ldKTsKLQkJCWdwLT50eF9za2J1ZmZbaV0gPSBOVUxMOwotCQl9Ci0KLQkJZ3AtPnR4X3JpbmdbaV0uY21kc3RhdCA9IDA7IC8vIENQVSBvd25zCi0JCWdwLT50eF9yaW5nW2ldLmJ5dGVfY250ID0gMDsKLQkJZ3AtPnR4X3JpbmdbaV0uYnVmZl9wdHIgPSAwOwotCQlncC0+dHhfcmluZ1tpXS5uZXh0ID0KLQkJCWNwdV90b19kbWEzMihncC0+dHhfcmluZ19kbWEgKwotCQkJCSAgICAgc2l6ZW9mKGd0OTYxMDBfdGRfdCkgKiAoaSsxKSk7Ci0JCWR1bXBfdHhfZGVzYyg0LCBkZXYsIGkpOwotCX0KLQkvKiBXcmFwIHRoZSByaW5nLiAqLwotCWdwLT50eF9yaW5nW2ktMV0ubmV4dCA9IGNwdV90b19kbWEzMihncC0+dHhfcmluZ19kbWEpOwotICAgIAotCS8vIHNldHVwIG9ubHkgdGhlIGxvd2VzdCBwcmlvcml0eSBUeENEUCByZWcKLQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF9DVVJSX1RYX0RFU0NfUFRSMCwgZ3AtPnR4X3JpbmdfZG1hKTsKLQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF9DVVJSX1RYX0RFU0NfUFRSMSwgMCk7Ci0KLQkvLyBpbml0IFR4IGluZGVjZXMgYW5kIHBrdCBjb3VudGVyCi0JZ3AtPnR4X25leHRfaW4gPSBncC0+dHhfbmV4dF9vdXQgPSAwOwotCWdwLT50eF9jb3VudCA9IDA7Ci0KLX0KLQotc3RhdGljIHZvaWQKLXJlc2V0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpOwotCi0JYWJvcnQoZGV2LCBzZGNtckFSKTsKLSAgICAKLQlmb3IgKGk9MDsgaTxSWF9SSU5HX1NJWkU7IGkrKykgewotCQlncC0+cnhfcmluZ1tpXS5uZXh0ID0KLQkJCWNwdV90b19kbWEzMihncC0+cnhfcmluZ19kbWEgKwotCQkJCSAgICAgc2l6ZW9mKGd0OTYxMDBfcmRfdCkgKiAoaSsxKSk7Ci0JCWdwLT5yeF9yaW5nW2ldLmJ1ZmZfcHRyID0KLQkJCWNwdV90b19kbWEzMihncC0+cnhfYnVmZl9kbWEgKyBpKlBLVF9CVUZfU1opOwotCQlncC0+cnhfcmluZ1tpXS5idWZmX3N6ID0gY3B1X3RvX2RtYTE2KFBLVF9CVUZfU1opOwotCQkvLyBHaXZlIG93bmVyc2hpcCB0byBkZXZpY2UsIHNldCBmaXJzdCBhbmQgbGFzdCwgZW5hYmxlIGludHIKLQkJZ3AtPnJ4X3JpbmdbaV0uY21kc3RhdCA9Ci0JCQljcHVfdG9fZG1hMzIoKHUzMikocnhGaXJzdCB8IHJ4TGFzdCB8IHJ4T3duIHwgcnhFSSkpOwotCQlkdW1wX3J4X2Rlc2MoNCwgZGV2LCBpKTsKLQl9Ci0JLyogV3JhcCB0aGUgcmluZy4gKi8KLQlncC0+cnhfcmluZ1tpLTFdLm5leHQgPSBjcHVfdG9fZG1hMzIoZ3AtPnJ4X3JpbmdfZG1hKTsKLQotCS8vIFNldHVwIG9ubHkgdGhlIGxvd2VzdCBwcmlvcml0eSBSeEZEUCBhbmQgUnhDRFAgcmVncwotCWZvciAoaT0wOyBpPDQ7IGkrKykgewotCQlpZiAoaSA9PSAwKSB7Ci0JCQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF8xU1RfUlhfREVTQ19QVFIwLAotCQkJCQkgZ3AtPnJ4X3JpbmdfZG1hKTsKLQkJCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX0NVUlJfUlhfREVTQ19QVFIwLAotCQkJCQkgZ3AtPnJ4X3JpbmdfZG1hKTsKLQkJfSBlbHNlIHsKLQkJCUdUOTYxMDBFVEhfV1JJVEUoZ3AsCi0JCQkJCSBHVDk2MTAwX0VUSF8xU1RfUlhfREVTQ19QVFIwICsgaSo0LAotCQkJCQkgMCk7Ci0JCQlHVDk2MTAwRVRIX1dSSVRFKGdwLAotCQkJCQkgR1Q5NjEwMF9FVEhfQ1VSUl9SWF9ERVNDX1BUUjAgKyBpKjQsCi0JCQkJCSAwKTsKLQkJfQotCX0KLQotCS8vIGluaXQgUnggTmV4dE91dCBpbmRleAotCWdwLT5yeF9uZXh0X291dCA9IDA7Ci19Ci0KLQotLy8gUmV0dXJucyAxIGlmIHRoZSBUeCBjb3VudGVyIGFuZCBpbmRlY2VzIGRvbid0IGdlbAotc3RhdGljIGludAotZ3Q5NjEwMF9jaGVja190eF9jb25zaXN0ZW50KHN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwKQotewotCWludCBkaWZmID0gZ3AtPnR4X25leHRfaW4gLSBncC0+dHhfbmV4dF9vdXQ7Ci0KLQlkaWZmID0gZGlmZjwwID8gVFhfUklOR19TSVpFICsgZGlmZiA6IGRpZmY7Ci0JZGlmZiA9IGdwLT50eF9jb3VudCA9PSBUWF9SSU5HX1NJWkUgPyBkaWZmICsgVFhfUklOR19TSVpFIDogZGlmZjsKLSAgICAKLQlyZXR1cm4gKGRpZmYgIT0gZ3AtPnR4X2NvdW50KTsKLX0KLQotc3RhdGljIGludAotZ3Q5NjEwMF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXUzMiB0bXA7Ci0JdTE2IG1paV9yZWc7Ci0gICAgCi0JZGJnKDMsICIlczogZGV2PSVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7Ci0JZGJnKDMsICIlczogc2NzMTBfbG89JTR4LCBzY3MxMF9oaT0lNHhcbiIsIF9fRlVOQ1RJT05fXywgCi0JICAgIEdUOTYxMDBfUkVBRCgweDgpLCBHVDk2MTAwX1JFQUQoMHgxMCkpOwotCWRiZygzLCAiJXM6IHNjczMyX2xvPSU0eCwgc2NzMzJfaGk9JTR4XG4iLCBfX0ZVTkNUSU9OX18sCi0JICAgIEdUOTYxMDBfUkVBRCgweDE4KSwgR1Q5NjEwMF9SRUFEKDB4MjApKTsKLSAgICAKLQkvLyBTdG9wIGFuZCBkaXNhYmxlIFBvcnQKLQloYXJkX3N0b3AoZGV2KTsKLSAgICAKLQkvLyBTZXR1cCBDSVUgQXJiaXRlcgotCXRtcCA9IEdUOTYxMDBfUkVBRChHVDk2MTAwX0NJVV9BUkJJVEVSX0NPTkZJRyk7Ci0JdG1wIHw9ICgweDBjIDw8IChncC0+cG9ydF9udW0qMikpOyAvLyBzZXQgRXRoZXIgRE1BIHJlcSBwcmlvcml0eSB0byBoaQotI2lmbmRlZiBERVNDX0JFCi0JdG1wICY9IH4oMTw8MzEpOyAgICAgICAgICAgICAgICAgICAvLyBzZXQgZGVzYyBlbmRpYW5lc3MgdG8gbGl0dGxlCi0jZWxzZQotCXRtcCB8PSAoMTw8MzEpOwotI2VuZGlmCi0JR1Q5NjEwMF9XUklURShHVDk2MTAwX0NJVV9BUkJJVEVSX0NPTkZJRywgdG1wKTsKLQlkYmcoMywgIiVzOiBDSVUgQ29uZmlnPSV4LyV4XG4iLCBfX0ZVTkNUSU9OX18sIAotCSAgICB0bXAsIEdUOTYxMDBfUkVBRChHVDk2MTAwX0NJVV9BUkJJVEVSX0NPTkZJRykpOwotCi0JLy8gU2V0IHJvdXRpbmcuCi0JdG1wID0gR1Q5NjEwMF9SRUFEKEdUOTYxMDBfUk9VVEVfTUFJTikgJiAoMHgzZiA8PCAxOCk7Ci0JdG1wIHw9ICgweDA3IDw8ICgxOCArIGdwLT5wb3J0X251bSozKSk7Ci0JR1Q5NjEwMF9XUklURShHVDk2MTAwX1JPVVRFX01BSU4sIHRtcCk7Ci0KLQkvKiBzZXQgTUlJIGFzIHBlcmlwaGVyYWwgZnVuYyAqLwotCXRtcCA9IEdUOTYxMDBfUkVBRChHVDk2MTAwX0dQUF9DT05GSUcyKTsKLQl0bXAgfD0gMHg3ZmZmIDw8IChncC0+cG9ydF9udW0qMTYpOwotCUdUOTYxMDBfV1JJVEUoR1Q5NjEwMF9HUFBfQ09ORklHMiwgdG1wKTsKLQkKLQkvKiBTZXQgdXAgTUlJIHBvcnQgcGluIGRpcmVjdGlvbnMgKi8KLQl0bXAgPSBHVDk2MTAwX1JFQUQoR1Q5NjEwMF9HUFBfSU8yKTsKLQl0bXAgfD0gMHgwMDNkIDw8IChncC0+cG9ydF9udW0qMTYpOwotCUdUOTYxMDBfV1JJVEUoR1Q5NjEwMF9HUFBfSU8yLCB0bXApOwotCi0JLy8gU2V0LXVwIGhhc2ggdGFibGUKLQltZW1zZXQoZ3AtPmhhc2hfdGFibGUsIDAsIFJYX0hBU0hfVEFCTEVfU0laRSk7IC8vIGNsZWFyIGl0Ci0JZ3AtPmhhc2hfbW9kZSA9IDA7Ci0JLy8gQWRkIGEgc2luZ2xlIGVudHJ5IHRvIGhhc2ggdGFibGUgLSBvdXIgZXRoZXJuZXQgYWRkcmVzcwotCWd0OTYxMDBfYWRkX2hhc2hfZW50cnkoZGV2LCBkZXYtPmRldl9hZGRyKTsKLQkvLyBTZXQtdXAgRE1BIHB0ciB0byBoYXNoIHRhYmxlCi0JR1Q5NjEwMEVUSF9XUklURShncCwgR1Q5NjEwMF9FVEhfSEFTSF9UQkxfUFRSLCBncC0+aGFzaF90YWJsZV9kbWEpOwotCWRiZygzLCAiJXM6IEhhc2ggVGJsIFB0cj0leFxuIiwgX19GVU5DVElPTl9fLAotCSAgICBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX0hBU0hfVEJMX1BUUikpOwotCi0JLy8gU2V0dXAgVHgKLQlyZXNldF90eChkZXYpOwotCi0JZGJnKDMsICIlczogQ3VyciBUeCBEZXNjIFB0cjA9JXhcbiIsIF9fRlVOQ1RJT05fXywKLQkgICAgR1Q5NjEwMEVUSF9SRUFEKGdwLCBHVDk2MTAwX0VUSF9DVVJSX1RYX0RFU0NfUFRSMCkpOwotCi0JLy8gU2V0dXAgUngKLQlyZXNldF9yeChkZXYpOwotCi0JZGJnKDMsICIlczogMXN0L0N1cnIgUnggRGVzYyBQdHIwPSV4LyV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JICAgIEdUOTYxMDBFVEhfUkVBRChncCwgR1Q5NjEwMF9FVEhfMVNUX1JYX0RFU0NfUFRSMCksCi0JICAgIEdUOTYxMDBFVEhfUkVBRChncCwgR1Q5NjEwMF9FVEhfQ1VSUl9SWF9ERVNDX1BUUjApKTsKLQotCS8vIGV0aCBwb3J0IGNvbmZpZyByZWdpc3RlcgotCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1BPUlRfQ09ORklHX0VYVCwKLQkJCSBwY3hyRkNUTCB8IHBjeHJGQ1RMZW4gfCBwY3hyRkxQIHwgcGN4ckRQTFhlbik7Ci0KLQltaWlfcmVnID0gcmVhZF9NSUkoZ3AtPnBoeV9hZGRyLCAweDExKTsgLyogaW50IGVuYWJsZSByZWdpc3RlciAqLwotCW1paV9yZWcgfD0gMjsgIC8qIGVuYWJsZSBtaWkgaW50ZXJydXB0ICovCi0Jd3JpdGVfTUlJKGdwLT5waHlfYWRkciwgMHgxMSwgbWlpX3JlZyk7Ci0JCi0JZGJnKDMsICIlczogUGh5QUQ9JXhcbiIsIF9fRlVOQ1RJT05fXywKLQkgICAgR1Q5NjEwMF9SRUFEKEdUOTYxMDBfRVRIX1BIWV9BRERSX1JFRykpOwotCi0JLy8gc2V0dXAgRE1BCi0KLQkvLyBXZSB3YW50IHRoZSBSeC9UeCBETUEgdG8gd3JpdGUvcmVhZCBkYXRhIHRvL2Zyb20gbWVtb3J5IGluCi0JLy8gQmlnIEVuZGlhbiBtb2RlLiBBbHNvIHNldCBETUEgQnVyc3QgU2l6ZSB0byA4IDY0Qml0IHdvcmRzLgotI2lmZGVmIERFU0NfREFUQV9CRQotCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09ORklHLAotCQkJICgweGY8PHNkY3JSQ0JpdCkgfCBzZGNyUklGQiB8ICgzPDxzZGNyQlNaQml0KSk7Ci0jZWxzZQotCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09ORklHLAotCQkJIHNkY3JCTE1SIHwgc2RjckJMTVQgfAotCQkJICgweGY8PHNkY3JSQ0JpdCkgfCBzZGNyUklGQiB8ICgzPDxzZGNyQlNaQml0KSk7Ci0jZW5kaWYKLQlkYmcoMywgIiVzOiBTRE1BIENvbmZpZz0leFxuIiwgX19GVU5DVElPTl9fLAotCSAgICBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09ORklHKSk7Ci0KLQkvLyBzdGFydCBSeCBETUEKLQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF9TRE1BX0NPTU0sIHNkY21yRVJEKTsKLQlkYmcoMywgIiVzOiBTRE1BIENvbW09JXhcbiIsIF9fRlVOQ1RJT05fXywKLQkgICAgR1Q5NjEwMEVUSF9SRUFEKGdwLCBHVDk2MTAwX0VUSF9TRE1BX0NPTU0pKTsKLSAgICAKLQkvLyBlbmFibGUgdGhpcyBwb3J0IChzZXQgaGFzaCBzaXplIHRvIDEvMkspCi0JR1Q5NjEwMEVUSF9XUklURShncCwgR1Q5NjEwMF9FVEhfUE9SVF9DT05GSUcsIHBjckVOIHwgcGNySFMpOwotCWRiZygzLCAiJXM6IFBvcnQgQ29uZmlnPSV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JICAgIEdUOTYxMDBFVEhfUkVBRChncCwgR1Q5NjEwMF9FVEhfUE9SVF9DT05GSUcpKTsKLSAgICAKLQkvKgotCSAqIERpc2FibGUgYWxsIFR5cGUtb2YtU2VydmljZSBxdWV1ZWluZy4gQWxsIFJ4IHBhY2tldHMgd2lsbCBiZQotCSAqIHRyZWF0ZWQgbm9ybWFsbHkgYW5kIHdpbGwgYmUgc2VudCB0byB0aGUgbG93ZXN0IHByaW9yaXR5Ci0JICogcXVldWUuCi0JICoKLQkgKiBEaXNhYmxlIGZsb3ctY29udHJvbCBmb3Igbm93LiBGSVhNRTogc3VwcG9ydCBmbG93IGNvbnRyb2w/Ci0JICovCi0KLQkvLyBjbGVhciBhbGwgdGhlIE1JQiBjdHIgcmVncwotCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1BPUlRfQ09ORklHX0VYVCwKLQkJCSBwY3hyRkNUTCB8IHBjeHJGQ1RMZW4gfCBwY3hyRkxQIHwKLQkJCSBwY3hyUFJJT3J4T3ZlcnJpZGUpOwotCXJlYWRfbWliX2NvdW50ZXJzKGdwKTsKLQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF9QT1JUX0NPTkZJR19FWFQsCi0JCQkgcGN4ckZDVEwgfCBwY3hyRkNUTGVuIHwgcGN4ckZMUCB8Ci0JCQkgcGN4clBSSU9yeE92ZXJyaWRlIHwgcGN4ck1JQmNsck1vZGUpOwotICAgIAotCWRiZygzLCAiJXM6IFBvcnQgQ29uZmlnIEV4dD0leFxuIiwgX19GVU5DVElPTl9fLAotCSAgICBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX1BPUlRfQ09ORklHX0VYVCkpOwotCi0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQotCWR1bXBfTUlJKDQsIGRldik7Ci0KLQkvLyBlbmFibGUgaW50ZXJydXB0cwotCWVuYWJsZV9ldGhlcl9pcnEoZGV2KTsKLQotCS8vIHdlIHNob3VsZCBub3cgYmUgcmVjZWl2aW5nIGZyYW1lcwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLWd0OTYxMDBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCWludCByZXR2YWw7Ci0gICAgCi0JZGJnKDIsICIlczogZGV2PSVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7Ci0KLQkvLyBJbml0aWFsaXplIGFuZCBzdGFydHVwIHRoZSBHVC05NjEwMCBldGhlcm5ldCBwb3J0Ci0JaWYgKChyZXR2YWwgPSBndDk2MTAwX2luaXQoZGV2KSkpIHsKLQkJZXJyKCJlcnJvciBpbiBndDk2MTAwX2luaXRcbiIpOwotCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJcmV0dXJuIHJldHZhbDsKLQl9Ci0KLQlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCAmZ3Q5NjEwMF9pbnRlcnJ1cHQsCi0JCQkJICBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKSkgewotCQllcnIoInVuYWJsZSB0byBnZXQgSVJRICVkXG4iLCBkZXYtPmlycSk7Ci0JCXJldHVybiByZXR2YWw7Ci0JfQotCQotCWRiZygyLCAiJXM6IEluaXRpYWxpemF0aW9uIGRvbmUuXG4iLCBfX0ZVTkNUSU9OX18pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWd0OTYxMDBfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlkYmcoMywgIiVzOiBkZXY9JXBcbiIsIF9fRlVOQ1RJT05fXywgZGV2KTsKLQotCS8vIHN0b3AgdGhlIGRldmljZQotCWlmIChuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKSB7Ci0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJaGFyZF9zdG9wKGRldik7Ci0JfQotCi0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0gICAgCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIGludAotZ3Q5NjEwMF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBuZXh0SW47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKLQotCW5leHRJbiA9IGdwLT50eF9uZXh0X2luOwotCi0JZGJnKDMsICIlczogbmV4dEluPSVkXG4iLCBfX0ZVTkNUSU9OX18sIG5leHRJbik7Ci0gICAgCi0JaWYgKGdwLT50eF9jb3VudCA+PSBUWF9SSU5HX1NJWkUpIHsKLQkJd2FybigiVHggUmluZyBmdWxsLCBwa3QgZHJvcHBlZC5cbiIpOwotCQlncC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQl9Ci0gICAgCi0JaWYgKCEoZ3AtPmxhc3RfcHNyICYgcHNyTGluaykpIHsKLQkJZXJyKCIlczogTGluayBkb3duLCBwa3QgZHJvcHBlZC5cbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWdwLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAxOwotCX0KLSAgICAKLQlpZiAoZG1hMzJfdG9fY3B1KGdwLT50eF9yaW5nW25leHRJbl0uY21kc3RhdCkgJiB0eE93bikgewotCQllcnIoIiVzOiBkZXZpY2Ugb3ducyBkZXNjcmlwdG9yLCBwa3QgZHJvcHBlZC5cbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCWdwLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCS8vIHN0b3AgdGhlIHF1ZXVlLCBzbyBUeCB0aW1lb3V0IGNhbiBmaXggaXQKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMTsKLQl9Ci0gICAgCi0JLy8gUHJlcGFyZSB0aGUgRGVzY3JpcHRvciBhdCB0eF9uZXh0X2luCi0JZ3AtPnR4X3NrYnVmZltuZXh0SW5dID0gc2tiOwotCWdwLT50eF9yaW5nW25leHRJbl0uYnl0ZV9jbnQgPSBjcHVfdG9fZG1hMTYoc2tiLT5sZW4pOwotCWdwLT50eF9yaW5nW25leHRJbl0uYnVmZl9wdHIgPSBjcHVfdG9fZG1hMzIodmlydF90b19waHlzKHNrYi0+ZGF0YSkpOwotCS8vIG1ha2Ugc3VyZSBwYWNrZXQgZ2V0cyB3cml0dGVuIGJhY2sgdG8gbWVtb3J5Ci0JZG1hX2NhY2hlX3diYWNrX2ludigodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhKSwgc2tiLT5sZW4pOwotCS8vIEdpdmUgb3duZXJzaGlwIHRvIGRldmljZSwgc2V0IGZpcnN0IGFuZCBsYXN0IGRlc2MsIGVuYWJsZSBpbnRlcnJ1cHQKLQkvLyBTZXR0aW5nIG9mIG93bmVyc2hpcCBiaXQgbXVzdCBiZSAqbGFzdCohCi0JZ3AtPnR4X3JpbmdbbmV4dEluXS5jbWRzdGF0ID0KLQkJY3B1X3RvX2RtYTMyKCh1MzIpKHR4T3duIHwgdHhHZW5DUkMgfCB0eEVJIHwKLQkJCQkgICB0eFBhZCB8IHR4Rmlyc3QgfCB0eExhc3QpKTsKLSAgICAKLQlkdW1wX3R4X2Rlc2MoNCwgZGV2LCBuZXh0SW4pOwotCWR1bXBfc2tiKDQsIGRldiwgc2tiKTsKLQotCS8vIGluY3JlbWVudCB0eF9uZXh0X2luIHdpdGggd3JhcAotCWdwLT50eF9uZXh0X2luID0gKG5leHRJbiArIDEpICUgVFhfUklOR19TSVpFOwotCS8vIElmIERNQSBpcyBzdG9wcGVkLCByZXN0YXJ0Ci0JaWYgKCEoR1Q5NjEwMEVUSF9SRUFEKGdwLCBHVDk2MTAwX0VUSF9QT1JUX1NUQVRVUykgJiBwc3JUeExvdykpCi0JCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09NTSwKLQkJCQkgc2RjbXJFUkQgfCBzZGNtclRYREwpOwotCi0JLy8gaW5jcmVtZW50IGNvdW50IGFuZCBzdG9wIHF1ZXVlIGlmIGZ1bGwKLQlpZiAoKytncC0+dHhfY291bnQgPT0gVFhfUklOR19TSVpFKSB7Ci0JCWdwLT50eF9mdWxsID0gMTsKLQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlkYmcoMiwgIlR4IFJpbmcgbm93IGZ1bGwsIHF1ZXVlIHN0b3BwZWQuXG4iKTsKLQl9Ci0gICAgCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyBpbnQKLWd0OTYxMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHN0YXR1cykKLXsKLQlzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcGt0X2xlbiwgbmV4dE91dCwgY2RwOwotCWd0OTYxMDBfcmRfdCAqcmQ7Ci0JdTMyIGNtZHN0YXQ7Ci0gICAgCi0JZGJnKDMsICIlczogZGV2PSVwLCBzdGF0dXM9JXhcbiIsIF9fRlVOQ1RJT05fXywgZGV2LCBzdGF0dXMpOwotCi0JY2RwID0gKEdUOTYxMDBFVEhfUkVBRChncCwgR1Q5NjEwMF9FVEhfMVNUX1JYX0RFU0NfUFRSMCkKLQkgICAgICAgLSBncC0+cnhfcmluZ19kbWEpIC8gc2l6ZW9mKGd0OTYxMDBfcmRfdCk7Ci0KLQkvLyBDb250aW51ZSB1bnRpbCB3ZSByZWFjaCAxc3QgZGVzY3JpcHRvciBwb2ludGVyCi0JZm9yIChuZXh0T3V0ID0gZ3AtPnJ4X25leHRfb3V0OyBuZXh0T3V0ICE9IGNkcDsKLQkgICAgIG5leHRPdXQgPSAobmV4dE91dCArIDEpICUgUlhfUklOR19TSVpFKSB7Ci0JCi0JCWlmICgtLWdwLT5pbnRyX3dvcmtfZG9uZSA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJcmQgPSAmZ3AtPnJ4X3JpbmdbbmV4dE91dF07Ci0JCWNtZHN0YXQgPSBkbWEzMl90b19jcHUocmQtPmNtZHN0YXQpOwotCQotCQlkYmcoNCwgIiVzOiBSeCBkZXNjIGNtZHN0YXQ9JXgsIG5leHRPdXQ9JWRcbiIsIF9fRlVOQ1RJT05fXywKLQkJICAgIGNtZHN0YXQsIG5leHRPdXQpOwotCi0JCWlmIChjbWRzdGF0ICYgKHUzMilyeE93bikgewotCQkJLy9lcnIoIiVzOiBkZXZpY2Ugb3ducyBkZXNjcmlwdG9yIVxuIiwgX19GVU5DVElPTl9fKTsKLQkJCS8vIERNQSBpcyBub3QgZmluaXNoZWQgdXBkYXRpbmcgZGVzY3JpcHRvcj8/PwotCQkJLy8gTGVhdmUgYW5kIGNvbWUgYmFjayBsYXRlciB0byBwaWNrLXVwIHdoZXJlCi0JCQkvLyB3ZSBsZWZ0IG9mZi4KLQkJCWJyZWFrOwotCQl9Ci0KLQkJLy8gRHJvcCB0aGlzIHJlY2VpdmVkIHBrdCBpZiB0aGVyZSB3ZXJlIGFueSBlcnJvcnMKLQkJaWYgKCgoY21kc3RhdCAmICh1MzIpKHJ4RXJyb3JTdW1tYXJ5KSkgJiYKLQkJICAgICAoY21kc3RhdCAmICh1MzIpKHJ4Rmlyc3QpKSkgfHwgKHN0YXR1cyAmIGljclJ4RXJyb3IpKSB7Ci0JCQkvLyB1cGRhdGUgdGhlIGRldGFpbGVkIHJ4IGVycm9yIGNvdW50ZXJzIHRoYXQKLQkJCS8vIGFyZSBub3QgY292ZXJlZCBieSB0aGUgTUlCIGNvdW50ZXJzLgotCQkJaWYgKGNtZHN0YXQgJiAodTMyKXJ4T3ZlcnJ1bikKLQkJCQlncC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJCWNtZHN0YXQgfD0gKHUzMilyeE93bjsKLQkJCXJkLT5jbWRzdGF0ID0gY3B1X3RvX2RtYTMyKGNtZHN0YXQpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBNdXN0IGJlIGZpcnN0IGFuZCBsYXN0IChpZSBvbmx5KSBkZXNjcmlwdG9yIG9mIHBhY2tldC4gV2UKLQkJICogaWdub3JlIChkcm9wKSBhbnkgcGFja2V0cyB0aGF0IGRvIG5vdCBmaXQgaW4gb25lIGRlc2NyaXB0b3IuCi0JCSAqIEV2ZXJ5IGRlc2NyaXB0b3IncyByZWNlaXZlIGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2ggdG8gaG9sZAotCQkgKiB0aGUgbWF4aW11bSA4MDIuMyBmcmFtZSBzaXplLCBzbyBhIG11bHRpLWRlc2NyaXB0b3IgcGFja2V0Ci0JCSAqIGluZGljYXRlcyBhbiBlcnJvci4gTW9zdCBpZiBub3QgYWxsIGNvcnJ1cHRlZCBwYWNrZXRzIHdpbGwKLQkJICogaGF2ZSBhbHJlYWR5IGJlZW4gZHJvcHBlZCBieSB0aGUgYWJvdmUgY2hlY2sgZm9yIHRoZQotCQkgKiByeEVycm9yU3VtbWFyeSBzdGF0dXMgYml0LgotCQkgKi8KLQkJaWYgKCEoY21kc3RhdCAmICh1MzIpcnhGaXJzdCkgfHwgIShjbWRzdGF0ICYgKHUzMilyeExhc3QpKSB7Ci0JCQlpZiAoY21kc3RhdCAmICh1MzIpcnhGaXJzdCkgewotCQkJCS8qCi0JCQkJICogVGhpcyBpcyB0aGUgZmlyc3QgZGVzY3JpcHRvciBvZiBhCi0JCQkJICogbXVsdGktZGVzY3JpcHRvciBwYWNrZXQuIEl0IGlzbid0IGNvcnJ1cHRlZAotCQkJCSAqIGJlY2F1c2UgdGhlIGFib3ZlIGNoZWNrIGZvciByeEVycm9yU3VtbWFyeQotCQkJCSAqIHdvdWxkIGhhdmUgZHJvcHBlZCBpdCBhbHJlYWR5LCBzbyB3aGF0J3MKLQkJCQkgKiB0aGUgZGVhbCB3aXRoIHRoaXMgcGFja2V0PyBHb29kIHF1ZXN0aW9uLAotCQkJCSAqIGxldCdzIGR1bXAgaXQgb3V0LgotCQkJCSAqLwotCQkJCWVycigiJXM6IGRlc2Mgbm90IGZpcnN0IGFuZCBsYXN0IVxuIiwgX19GVU5DVElPTl9fKTsKLQkJCQlkdW1wX3J4X2Rlc2MoMCwgZGV2LCBuZXh0T3V0KTsKLQkJCX0KLQkJCWNtZHN0YXQgfD0gKHUzMilyeE93bjsKLQkJCXJkLT5jbWRzdGF0ID0gY3B1X3RvX2RtYTMyKGNtZHN0YXQpOwotCQkJLy8gY29udGludWUgdG8gZHJvcCBldmVyeSBkZXNjcmlwdG9yIG9mIHRoaXMgcGFja2V0Ci0JCQljb250aW51ZTsKLQkJfQotCQotCQlwa3RfbGVuID0gZG1hMTZfdG9fY3B1KHJkLT5ieXRlX2NudCk7Ci0JCi0JCS8qIENyZWF0ZSBuZXcgc2tiLiAqLwotCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4rMik7Ci0JCWlmIChza2IgPT0gTlVMTCkgewotCQkJZXJyKCIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQlncC0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJY21kc3RhdCB8PSAodTMyKXJ4T3duOwotCQkJcmQtPmNtZHN0YXQgPSBjcHVfdG9fZG1hMzIoY21kc3RhdCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlza2ItPmRldiA9IGRldjsKLQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsgICAvKiAxNiBieXRlIElQIGhlYWRlciBhbGlnbiAqLwotCQltZW1jcHkoc2tiX3B1dChza2IsIHBrdF9sZW4pLAotCQkgICAgICAgJmdwLT5yeF9idWZmW25leHRPdXQqUEtUX0JVRl9TWl0sIHBrdF9sZW4pOwotCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQlkdW1wX3NrYig0LCBkZXYsIHNrYik7Ci0JCi0JCW5ldGlmX3J4KHNrYik7ICAgICAgICAvKiBwYXNzIHRoZSBwYWNrZXQgdG8gdXBwZXIgbGF5ZXJzICovCi0JCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0KLQkJLy8gbm93IHdlIGNhbiByZWxlYXNlIG93bmVyc2hpcCBvZiB0aGlzIGRlc2MgYmFjayB0byBkZXZpY2UKLQkJY21kc3RhdCB8PSAodTMyKXJ4T3duOwotCQlyZC0+Y21kc3RhdCA9IGNwdV90b19kbWEzMihjbWRzdGF0KTsKLQl9Ci0gICAgCi0JaWYgKG5leHRPdXQgPT0gZ3AtPnJ4X25leHRfb3V0KQotCQlkYmcoMywgIiVzOiBSeENEUCBkaWQgbm90IGluY3JlbWVudD9cbiIsIF9fRlVOQ1RJT05fXyk7Ci0KLQlncC0+cnhfbmV4dF9vdXQgPSBuZXh0T3V0OwotCXJldHVybiAwOwotfQotCi0KLXN0YXRpYyB2b2lkCi1ndDk2MTAwX3R4X2NvbXBsZXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzdGF0dXMpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBuZXh0T3V0LCBjZHA7Ci0JZ3Q5NjEwMF90ZF90ICp0ZDsKLQl1MzIgY21kc3RhdDsKLQotCWNkcCA9IChHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX0NVUlJfVFhfREVTQ19QVFIwKQotCSAgICAgICAtIGdwLT50eF9yaW5nX2RtYSkgLyBzaXplb2YoZ3Q5NjEwMF90ZF90KTsKLSAgICAKLQkvLyBDb250aW51ZSB1bnRpbCB3ZSByZWFjaCB0aGUgY3VycmVudCBkZXNjcmlwdG9yIHBvaW50ZXIKLQlmb3IgKG5leHRPdXQgPSBncC0+dHhfbmV4dF9vdXQ7IG5leHRPdXQgIT0gY2RwOwotCSAgICAgbmV4dE91dCA9IChuZXh0T3V0ICsgMSkgJSBUWF9SSU5HX1NJWkUpIHsKLQkKLQkJaWYgKC0tZ3AtPmludHJfd29ya19kb25lID09IDApCi0JCQlicmVhazsKLQotCQl0ZCA9ICZncC0+dHhfcmluZ1tuZXh0T3V0XTsKLQkJY21kc3RhdCA9IGRtYTMyX3RvX2NwdSh0ZC0+Y21kc3RhdCk7Ci0JCi0JCWRiZygzLCAiJXM6IFR4IGRlc2MgY21kc3RhdD0leCwgbmV4dE91dD0lZFxuIiwgX19GVU5DVElPTl9fLAotCQkgICAgY21kc3RhdCwgbmV4dE91dCk7Ci0JCi0JCWlmIChjbWRzdGF0ICYgKHUzMil0eE93bikgewotCQkJLyoKLQkJCSAqIERNQSBpcyBub3QgZmluaXNoZWQgd3JpdGluZyBkZXNjcmlwdG9yPz8/Ci0JCQkgKiBMZWF2ZSBhbmQgY29tZSBiYWNrIGxhdGVyIHRvIHBpY2stdXAgd2hlcmUKLQkJCSAqIHdlIGxlZnQgb2ZmLgotCQkJICovCi0JCQlicmVhazsKLQkJfQotCQotCQkvLyBpbmNyZW1lbnQgVHggZXJyb3Igc3RhdHMKLQkJaWYgKGNtZHN0YXQgJiAodTMyKXR4RXJyb3JTdW1tYXJ5KSB7Ci0JCQlkYmcoMiwgIiVzOiBUeCBlcnJvciwgY21kc3RhdCA9ICV4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkgICAgY21kc3RhdCk7Ci0JCQlncC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQlpZiAoY21kc3RhdCAmICh1MzIpdHhSZVR4TGltaXQpCi0JCQkJZ3AtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQlpZiAoY21kc3RhdCAmICh1MzIpdHhVbmRlcnJ1bikKLQkJCQlncC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKLQkJCWlmIChjbWRzdGF0ICYgKHUzMil0eExhdGVDb2xsaXNpb24pCi0JCQkJZ3AtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKLQkJfQotCQotCQlpZiAoY21kc3RhdCAmICh1MzIpdHhDb2xsaXNpb24pCi0JCQlncC0+c3RhdHMuY29sbGlzaW9ucyArPQotCQkJCSh1MzIpKChjbWRzdGF0ICYgdHhSZVR4Q250TWFzaykgPj4KLQkJCQkgICAgICB0eFJlVHhDbnRCaXQpOwotCi0JCS8vIFdha2UgdGhlIHF1ZXVlIGlmIHRoZSByaW5nIHdhcyBmdWxsCi0JCWlmIChncC0+dHhfZnVsbCkgewotCQkJZ3AtPnR4X2Z1bGwgPSAwOwotCQkJaWYgKGdwLT5sYXN0X3BzciAmIHBzckxpbmspIHsKLQkJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQkJZGJnKDIsICIlczogVHggUmluZyB3YXMgZnVsbCwgcXVldWUgd2FrZWRcbiIsCi0JCQkJICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQl9Ci0JCX0KLQkKLQkJLy8gZGVjcmVtZW50IHR4IHJpbmcgYnVmZmVyIGNvdW50Ci0JCWlmIChncC0+dHhfY291bnQpIGdwLT50eF9jb3VudC0tOwotCQotCQkvLyBmcmVlIHRoZSBza2IKLQkJaWYgKGdwLT50eF9za2J1ZmZbbmV4dE91dF0pIHsKLQkJCWRiZygzLCAiJXM6IGdvb2QgVHgsIHNrYj0lcFxuIiwgX19GVU5DVElPTl9fLAotCQkJICAgIGdwLT50eF9za2J1ZmZbbmV4dE91dF0pOwotCQkJZGV2X2tmcmVlX3NrYl9pcnEoZ3AtPnR4X3NrYnVmZltuZXh0T3V0XSk7Ci0JCQlncC0+dHhfc2tidWZmW25leHRPdXRdID0gTlVMTDsKLQkJfSBlbHNlIHsKLQkJCWVycigiJXM6IG5vIHNrYiFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCX0KLQl9Ci0KLQlncC0+dHhfbmV4dF9vdXQgPSBuZXh0T3V0OwotCi0JaWYgKGd0OTYxMDBfY2hlY2tfdHhfY29uc2lzdGVudChncCkpIHsKLQkJZXJyKCIlczogVHggcXVldWUgaW5jb25zaXN0ZW50IVxuIiwgX19GVU5DVElPTl9fKTsKLQl9Ci0gICAgCi0JaWYgKChzdGF0dXMgJiBpY3JUeEVuZExvdykgJiYgZ3AtPnR4X2NvdW50ICE9IDApIHsKLQkJLy8gd2UgbXVzdCByZXN0YXJ0IHRoZSBETUEKLQkJZGJnKDMsICIlczogUmVzdGFydGluZyBUeCBETUFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1NETUFfQ09NTSwKLQkJCQkgc2RjbXJFUkQgfCBzZGNtclRYREwpOwotCX0KLX0KLQotCi1zdGF0aWMgaXJxcmV0dXJuX3QKLWd0OTYxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLQlzdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlICpncCA9IG5ldGRldl9wcml2KGRldik7Ci0JdTMyIHN0YXR1czsKLSAgICAJaW50IGhhbmRsZWQgPSAwOwotCi0JaWYgKGRldiA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IG51bGwgZGV2IHB0clxuIiwgX19GVU5DVElPTl9fKTsKLQkJcmV0dXJuIElSUV9OT05FOwotCX0KLQotCWRiZygzLCAiJXM6IGVudHJ5LCBpY3I9JXhcbiIsIF9fRlVOQ1RJT05fXywKLQkgICAgR1Q5NjEwMEVUSF9SRUFEKGdwLCBHVDk2MTAwX0VUSF9JTlRfQ0FVU0UpKTsKLQotCXNwaW5fbG9jaygmZ3AtPmxvY2spOwotCi0JZ3AtPmludHJfd29ya19kb25lID0gbWF4X2ludGVycnVwdF93b3JrOwotCi0Jd2hpbGUgKGdwLT5pbnRyX3dvcmtfZG9uZSA+IDApIHsKLQotCQlzdGF0dXMgPSBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX0lOVF9DQVVTRSk7Ci0JCS8vIEFDSyBpbnRlcnJ1cHRzCi0JCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX0lOVF9DQVVTRSwgfnN0YXR1cyk7Ci0KLQkJaWYgKChzdGF0dXMgJiBpY3JFdGhlckludFN1bSkgPT0gMCAmJgotCQkgICAgIShzdGF0dXMgJiAoaWNyVHhCdWZmZXJMb3d8aWNyVHhCdWZmZXJIaWdofGljclJ4QnVmZmVyKSkpCi0JCQlicmVhazsKLQotCQloYW5kbGVkID0gMTsKLQotCQlpZiAoc3RhdHVzICYgaWNyTUlJUGh5U1RDKSB7Ci0JCQl1MzIgcHNyID0gR1Q5NjEwMEVUSF9SRUFEKGdwLCBHVDk2MTAwX0VUSF9QT1JUX1NUQVRVUyk7Ci0JCQlpZiAoZ3AtPmxhc3RfcHNyICE9IHBzcikgewotCQkJCWRiZygwLCAicG9ydCBzdGF0dXM6XG4iKTsKLQkJCQlkYmcoMCwgIiAgICAlcyBNQml0L3MsICVzLWR1cGxleCwgIgotCQkJCSAgICAiZmxvdy1jb250cm9sICVzLCBsaW5rIGlzICVzLFxuIiwKLQkJCQkgICAgcHNyICYgcHNyU3BlZWQgPyAiMTAwIjoiMTAiLAotCQkJCSAgICBwc3IgJiBwc3JEdXBsZXggPyAiZnVsbCI6ImhhbGYiLAotCQkJCSAgICBwc3IgJiBwc3JGY3RsID8gImRpc2FibGVkIjoiZW5hYmxlZCIsCi0JCQkJICAgIHBzciAmIHBzckxpbmsgPyAidXAiOiJkb3duIik7Ci0JCQkJZGJnKDAsICIgICAgVHhMb3dRIGlzICVzLCBUeEhpZ2hRIGlzICVzLCAiCi0JCQkJICAgICJUcmFuc21pdHRlciBpcyAlc1xuIiwKLQkJCQkgICAgcHNyICYgcHNyVHhMb3cgPyAicnVubmluZyI6InN0b3BwZWQiLAotCQkJCSAgICBwc3IgJiBwc3JUeEhpZ2ggPyAicnVubmluZyI6InN0b3BwZWQiLAotCQkJCSAgICBwc3IgJiBwc3JUeEluUHJvZyA/ICJvbiI6Im9mZiIpOwotCQkKLQkJCQlpZiAoKHBzciAmIHBzckxpbmspICYmICFncC0+dHhfZnVsbCAmJgotCQkJCSAgICBuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKLQkJCQkJZGJnKDAsICIlczogTGluayB1cCwgd2FraW5nIHF1ZXVlLlxuIiwKLQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkJCQl9IGVsc2UgaWYgKCEocHNyICYgcHNyTGluaykgJiYKLQkJCQkJICAgIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewotCQkJCQlkYmcoMCwgIiVzOiBMaW5rIGRvd24sIHN0b3BwaW5nIHF1ZXVlLlxuIiwKLQkJCQkJICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJCQl9Ci0KLQkJCQlncC0+bGFzdF9wc3IgPSBwc3I7Ci0JCQl9Ci0KLQkJCWlmICgtLWdwLT5pbnRyX3dvcmtfZG9uZSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JCi0JCWlmIChzdGF0dXMgJiAoaWNyVHhCdWZmZXJMb3cgfCBpY3JUeEVuZExvdykpCi0JCQlndDk2MTAwX3R4X2NvbXBsZXRlKGRldiwgc3RhdHVzKTsKLQotCQlpZiAoc3RhdHVzICYgKGljclJ4QnVmZmVyIHwgaWNyUnhFcnJvcikpIHsKLQkJCWd0OTYxMDBfcngoZGV2LCBzdGF0dXMpOwotCQl9Ci0JCi0JCS8vIE5vdyBjaGVjayBUWCBlcnJvcnMgKFJYIGVycm9ycyB3ZXJlIGhhbmRsZWQgaW4gZ3Q5NjEwMF9yeCkKLQkJaWYgKHN0YXR1cyAmIGljclR4RXJyb3JMb3cpIHsKLQkJCWVycigiJXM6IFR4IHJlc291cmNlIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOwotCQkJaWYgKC0tZ3AtPmludHJfd29ya19kb25lID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkKLQkJaWYgKHN0YXR1cyAmIGljclR4VWRyKSB7Ci0JCQllcnIoIiVzOiBUeCB1bmRlcnJ1biBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKLQkJCWlmICgtLWdwLT5pbnRyX3dvcmtfZG9uZSA9PSAwKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGdwLT5pbnRyX3dvcmtfZG9uZSA9PSAwKSB7Ci0JCS8vIEFDSyBhbnkgcmVtYWluaW5nIHBlbmRpbmcgaW50ZXJydXB0cwotCQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF9JTlRfQ0FVU0UsIDApOwotCQlkYmcoMywgIiVzOiBoaXQgbWF4IHdvcmtcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JfQotICAgIAotCWRiZygzLCAiJXM6IGV4aXQsIGljcj0leFxuIiwgX19GVU5DVElPTl9fLAotCSAgICBHVDk2MTAwRVRIX1JFQUQoZ3AsIEdUOTYxMDBfRVRIX0lOVF9DQVVTRSkpOwotCi0Jc3Bpbl91bmxvY2soJmdwLT5sb2NrKTsKLQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotZ3Q5NjEwMF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGd0OTYxMDBfcHJpdmF0ZSAqZ3AgPSBuZXRkZXZfcHJpdihkZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7Ci0gICAgCi0JaWYgKCEoZ3AtPmxhc3RfcHNyICYgcHNyTGluaykpIHsKLQkJZXJyKCJ0eF90aW1lb3V0OiBsaW5rIGRvd24uXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKLQl9IGVsc2UgewotCQlpZiAoZ3Q5NjEwMF9jaGVja190eF9jb25zaXN0ZW50KGdwKSkKLQkJCWVycigidHhfdGltZW91dDogVHggcmluZyBlcnJvci5cbiIpOwotCi0JCWRpc2FibGVfZXRoZXJfaXJxKGRldik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7Ci0JCXJlc2V0X3R4KGRldik7Ci0JCWVuYWJsZV9ldGhlcl9pcnEoZGV2KTsKLQkKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZAotZ3Q5NjEwMF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCS8vc3RydWN0IGRldl9tY19saXN0ICptY3B0cjsKLSAgICAKLQlkYmcoMywgIiVzOiBkZXY9JXAsIGZsYWdzPSV4XG4iLCBfX0ZVTkNUSU9OX18sIGRldiwgZGV2LT5mbGFncyk7Ci0KLQkvLyBzdG9wIHRoZSBSZWNlaXZlciBETUEKLQlhYm9ydChkZXYsIHNkY21yQVIpOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7Ci0KLQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCUdUOTYxMDBFVEhfV1JJVEUoZ3AsIEdUOTYxMDBfRVRIX1BPUlRfQ09ORklHLAotCQkJCSBwY3JFTiB8IHBjckhTIHwgcGNyUE0pOwotCX0KLQotI2lmIDAKLQkvKgotCSAgRklYTUU6IGN1cnJlbnRseSBtdWx0aWNhc3QgZG9lc24ndCB3b3JrIC0gbmVlZCB0byBnZXQgaGFzaCB0YWJsZQotCSAgd29ya2luZyBmaXJzdC4KLQkqLwotCWlmIChkZXYtPm1jX2NvdW50KSB7Ci0JCS8vIGNsZWFyIGhhc2ggdGFibGUKLQkJbWVtc2V0KGdwLT5oYXNoX3RhYmxlLCAwLCBSWF9IQVNIX1RBQkxFX1NJWkUpOwotCQkvLyBBZGQgb3VyIGV0aGVybmV0IGFkZHJlc3MKLQkJZ3Q5NjEwMF9hZGRfaGFzaF9lbnRyeShkZXYsIGRldi0+ZGV2X2FkZHIpOwotCi0JCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3Q7IG1jcHRyOyBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7Ci0JCQlkdW1wX2h3X2FkZHIoMiwgZGV2LCAiJXM6IGFkZHI9IiwgX19GVU5DVElPTl9fLAotCQkJCSAgICAgbWNwdHItPmRtaV9hZGRyKTsKLQkJCWd0OTYxMDBfYWRkX2hhc2hfZW50cnkoZGV2LCBtY3B0ci0+ZG1pX2FkZHIpOwotCQl9Ci0JfQotI2VuZGlmCi0gICAgCi0JLy8gcmVzdGFydCBSeCBETUEKLQlHVDk2MTAwRVRIX1dSSVRFKGdwLCBHVDk2MTAwX0VUSF9TRE1BX0NPTU0sIHNkY21yRVJEKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCi1ndDk2MTAwX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JZGJnKDMsICIlczogZGV2PSVwXG4iLCBfX0ZVTkNUSU9OX18sIGRldik7Ci0KLQlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmdwLT5sb2NrLCBmbGFncyk7Ci0JCXVwZGF0ZV9zdGF0cyhncCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZncC0+bG9jaywgZmxhZ3MpOwotCX0KLQotCXJldHVybiAmZ3AtPnN0YXRzOwotfQotCi1zdGF0aWMgdm9pZCBndDk2MTAwX2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpPTA7IGk8TlVNX0lOVEVSRkFDRVM7IGkrKykgewotCQlzdHJ1Y3QgZ3Q5NjEwMF9pZl90ICpndGlmID0gJmd0OTYxMDBfaWZsaXN0W2ldOwotCQlpZiAoZ3RpZi0+ZGV2ICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKmdwID0gKHN0cnVjdCBndDk2MTAwX3ByaXZhdGUgKikKLQkJCQluZXRkZXZfcHJpdihndGlmLT5kZXYpOwotCQkJdW5yZWdpc3Rlcl9uZXRkZXYoZ3RpZi0+ZGV2KTsKLQkJCWRtYWZyZWUoUlhfSEFTSF9UQUJMRV9TSVpFLCBncC0+aGFzaF90YWJsZV9kbWEpOwotCQkJZG1hZnJlZShQS1RfQlVGX1NaKlJYX1JJTkdfU0laRSwgZ3AtPnJ4X2J1ZmYpOwotCQkJZG1hZnJlZShzaXplb2YoZ3Q5NjEwMF9yZF90KSAqIFJYX1JJTkdfU0laRQotCQkJCSsgc2l6ZW9mKGd0OTYxMDBfdGRfdCkgKiBUWF9SSU5HX1NJWkUsCi0JCQkJZ3AtPnJ4X3JpbmcpOwotCQkJZnJlZV9uZXRkZXYoZ3RpZi0+ZGV2KTsKLQkJCXJlbGVhc2VfcmVnaW9uKGd0aWYtPmlvYmFzZSwgR1Q5NjEwMF9FVEhfSU9fU0laRSk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGd0OTYxMDBfc2V0dXAoY2hhciAqb3B0aW9ucykKLXsKLQljaGFyICp0aGlzX29wdDsKLQotCWlmICghb3B0aW9ucyB8fCAhKm9wdGlvbnMpCi0JCXJldHVybiAwOwotCi0Jd2hpbGUgKCh0aGlzX29wdCA9IHN0cnNlcCAoJm9wdGlvbnMsICIsIikpICE9IE5VTEwpIHsKLQkJaWYgKCEqdGhpc19vcHQpCi0JCQljb250aW51ZTsKLQkJaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibWFjMDoiLCA1KSkgewotCQkJbWVtY3B5KG1hYzAsIHRoaXNfb3B0KzUsIDE3KTsKLQkJCW1hYzBbMTddPSAnXDAnOwotCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAibWFjMToiLCA1KSkgewotCQkJbWVtY3B5KG1hYzEsIHRoaXNfb3B0KzUsIDE3KTsKLQkJCW1hYzFbMTddPSAnXDAnOwotCQl9Ci0JfQotCi0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoImd0OTYxMDBldGg9IiwgZ3Q5NjEwMF9zZXR1cCk7Ci0KLW1vZHVsZV9pbml0KGd0OTYxMDBfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoZ3Q5NjEwMF9jbGVhbnVwX21vZHVsZSk7Ci0KLU1PRFVMRV9BVVRIT1IoIlN0ZXZlIExvbmdlcmJlYW0gPHN0ZXZlbEBtdmlzdGEuY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJHVDk2MTAwIEV0aGVybmV0IGRyaXZlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oIGIvZHJpdmVycy9uZXQvZ3Q5NjEwMGV0aC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjYyYTg3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L2d0OTYxMDBldGguaAorKysgL2Rldi9udWxsCkBAIC0xLDM0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXN0ZXZlbEBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKFZlcnNpb24gMikgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICogIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKgotICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0gKgotICogRXRoZXJuZXQgZHJpdmVyIGRlZmluaXRpb25zIGZvciB0aGUgTUlQUyBHVDk2MTAwIEFkdmFuY2VkCi0gKiBDb21tdW5pY2F0aW9uIENvbnRyb2xsZXIuCi0gKiAKLSAqLwotI2lmbmRlZiBfR1Q5NjEwMEVUSF9ICi0jZGVmaW5lIF9HVDk2MTAwRVRIX0gKLQotI2luY2x1ZGUgPGFzbS9nYWxpbGVvLWJvYXJkcy9ndDk2MTAwLmg+Ci0KLSNkZWZpbmUgZGJnKGx2bCwgZm9ybWF0LCBhcmcuLi4pIFwKLSAgICBpZiAobHZsIDw9IEdUOTYxMDBfREVCVUcpIFwKLSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCwgZGV2LT5uYW1lICwgIyMgYXJnKQotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIFwKLSAgICBwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZvcm1hdCwgZGV2LT5uYW1lICwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBcCi0gICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICIgZm9ybWF0LCBkZXYtPm5hbWUgLCAjIyBhcmcpCi0jZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIFwKLSAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogIiBmb3JtYXQsIGRldi0+bmFtZSAsICMjIGFyZykKLQotLyogS2VlcCB0aGUgcmluZyBzaXplcyBhIHBvd2VyIG9mIHR3byBmb3IgZWZmaWNpZW5jeS4gKi8KLSNkZWZpbmUgVFhfUklOR19TSVpFCTE2Ci0jZGVmaW5lIFJYX1JJTkdfU0laRQkzMgotI2RlZmluZSBQS1RfQlVGX1NaCTE1MzYJLyogU2l6ZSBvZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIuKi8KLQotI2RlZmluZSBSWF9IQVNIX1RBQkxFX1NJWkUgMTYzODQKLSNkZWZpbmUgSEFTSF9IT1BfTlVNQkVSIDEyCi0KLSNkZWZpbmUgTlVNX0lOVEVSRkFDRVMgMgotCi0jZGVmaW5lIEdUOTYxMDBFVEhfVFhfVElNRU9VVCBIWi80Ci0KLSNkZWZpbmUgR1Q5NjEwMF9FVEgwX0JBU0UgKE1JUFNfR1Q5NjEwMF9CQVNFICsgR1Q5NjEwMF9FVEhfUE9SVF9DT05GSUcpCi0jZGVmaW5lIEdUOTYxMDBfRVRIMV9CQVNFIChHVDk2MTAwX0VUSDBfQkFTRSArIEdUOTYxMDBfRVRIX0lPX1NJWkUpCi0KLSNpZmRlZiBDT05GSUdfTUlQU19FVjk2MTAwCi0jZGVmaW5lIEdUOTYxMDBfRVRIRVIwX0lSUSAzCi0jZGVmaW5lIEdUOTYxMDBfRVRIRVIxX0lSUSA0Ci0jZWxzZQotI2RlZmluZSBHVDk2MTAwX0VUSEVSMF9JUlEgLTEKLSNkZWZpbmUgR1Q5NjEwMF9FVEhFUjFfSVJRIC0xCi0jZW5kaWYKLQotI2RlZmluZSBSRVZfR1Q5NjEwMCAgMQotI2RlZmluZSBSRVZfR1Q5NjEwMEFfMSAyCi0jZGVmaW5lIFJFVl9HVDk2MTAwQSAzCi0KLSNkZWZpbmUgR1Q5NjEwMEVUSF9SRUFEKGdwLCBvZmZzZXQpIFwKLSAgICBHVDk2MTAwX1JFQUQoKGdwLT5wb3J0X29mZnNldCArIG9mZnNldCkpCi0KLSNkZWZpbmUgR1Q5NjEwMEVUSF9XUklURShncCwgb2Zmc2V0LCBkYXRhKSBcCi0gICAgR1Q5NjEwMF9XUklURSgoZ3AtPnBvcnRfb2Zmc2V0ICsgb2Zmc2V0KSwgZGF0YSkKLQotI2RlZmluZSBHVDk2MTAwRVRIX1NFVEJJVChncCwgb2Zmc2V0LCBiaXRzKSB7XAotICAgIHUzMiB2YWwgPSBHVDk2MTAwRVRIX1JFQUQoZ3AsIG9mZnNldCk7IHZhbCB8PSAodTMyKShiaXRzKTsgXAotICAgIEdUOTYxMDBFVEhfV1JJVEUoZ3AsIG9mZnNldCwgdmFsKTsgfQotCi0jZGVmaW5lIEdUOTYxMDBFVEhfQ0xSQklUKGdwLCBvZmZzZXQsIGJpdHMpIHtcCi0gICAgdTMyIHZhbCA9IEdUOTYxMDBFVEhfUkVBRChncCwgb2Zmc2V0KTsgdmFsICY9ICh1MzIpKH4oYml0cykpOyBcCi0gICAgR1Q5NjEwMEVUSF9XUklURShncCwgb2Zmc2V0LCB2YWwpOyB9Ci0KLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBTTUkgUmVnICovCi1lbnVtIHsKLQlzbWlyRGF0YU1hc2sgPSAweGZmZmYsCi0Jc21pclBoeUFkTWFzayA9IDB4MWY8PDE2LAotCXNtaXJQaHlBZEJpdCA9IDE2LAotCXNtaXJSZWdBZE1hc2sgPSAweDFmPDwyMSwKLQlzbWlyUmVnQWRCaXQgPSAyMSwKLQlzbWlyT3BDb2RlID0gMTw8MjYsCi0Jc21pclJlYWRWYWxpZCA9IDE8PDI3LAotCXNtaXJCdXN5ID0gMTw8MjgKLX07Ci0KLS8qIEJpdCBkZWZpbml0aW9ucyBvZiB0aGUgUG9ydCBDb25maWcgUmVnICovCi1lbnVtIHBjcl9iaXRzIHsKLQlwY3JQTSA9IDEsCi0JcGNyUkJNID0gMiwKLQlwY3JQQkYgPSA0LAotCXBjckVOID0gMTw8NywKLQlwY3JMUEJLTWFzayA9IDB4Mzw8OCwKLQlwY3JMUEJLQml0ID0gOCwKLQlwY3JGQyA9IDE8PDEwLAotCXBjckhTID0gMTw8MTIsCi0JcGNySE0gPSAxPDwxMywKLQlwY3JIRE0gPSAxPDwxNCwKLQlwY3JIRCA9IDE8PDE1LAotCXBjcklTTE1hc2sgPSAweDc8PDI4LAotCXBjcklTTEJpdCA9IDI4LAotCXBjckFDQ1MgPSAxPDwzMQotfTsKLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBQb3J0IENvbmZpZyBFeHRlbmQgUmVnICovCi1lbnVtIHBjeHJfYml0cyB7Ci0JcGN4cklHTVAgPSAxLAotCXBjeHJTUEFOID0gMiwKLQlwY3hyUEFSID0gNCwKLQlwY3hyUFJJT3R4TWFzayA9IDB4Nzw8MywKLQlwY3hyUFJJT3R4Qml0ID0gMywKLQlwY3hyUFJJT3J4TWFzayA9IDB4Mzw8NiwKLQlwY3hyUFJJT3J4Qml0ID0gNiwKLQlwY3hyUFJJT3J4T3ZlcnJpZGUgPSAxPDw4LAotCXBjeHJEUExYZW4gPSAxPDw5LAotCXBjeHJGQ1RMZW4gPSAxPDwxMCwKLQlwY3hyRkxQID0gMTw8MTEsCi0JcGN4ckZDVEwgPSAxPDwxMiwKLQlwY3hyTUZMTWFzayA9IDB4Mzw8MTQsCi0JcGN4ck1GTEJpdCA9IDE0LAotCXBjeHJNSUJjbHJNb2RlID0gMTw8MTYsCi0JcGN4clNwZWVkID0gMTw8MTgsCi0JcGN4clNwZWVkZW4gPSAxPDwxOSwKLQlwY3hyUk1JSWVuID0gMTw8MjAsCi0JcGN4ckRTQ1BlbiA9IDE8PDIxCi19OwotCi0vKiBCaXQgZGVmaW5pdGlvbnMgb2YgdGhlIFBvcnQgQ29tbWFuZCBSZWcgKi8KLWVudW0gcGNtcl9iaXRzIHsKLQlwY21yRkogPSAxPDwxNQotfTsKLQotCi0vKiBCaXQgZGVmaW5pdGlvbnMgb2YgdGhlIFBvcnQgU3RhdHVzIFJlZyAqLwotZW51bSBwc3JfYml0cyB7Ci0JcHNyU3BlZWQgPSAxLAotCXBzckR1cGxleCA9IDIsCi0JcHNyRmN0bCA9IDQsCi0JcHNyTGluayA9IDgsCi0JcHNyUGF1c2UgPSAxPDw0LAotCXBzclR4TG93ID0gMTw8NSwKLQlwc3JUeEhpZ2ggPSAxPDw2LAotCXBzclR4SW5Qcm9nID0gMTw8NwotfTsKLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBTRE1BIENvbmZpZyBSZWcgKi8KLWVudW0gc2Rjcl9iaXRzIHsKLQlzZGNyUkNNYXNrID0gMHhmPDwyLAotCXNkY3JSQ0JpdCA9IDIsCi0Jc2RjckJMTVIgPSAxPDw2LAotCXNkY3JCTE1UID0gMTw8NywKLQlzZGNyUE9WUiA9IDE8PDgsCi0Jc2RjclJJRkIgPSAxPDw5LAotCXNkY3JCU1pNYXNrID0gMHgzPDwxMiwKLQlzZGNyQlNaQml0ID0gMTIKLX07Ci0KLS8qIEJpdCBkZWZpbml0aW9ucyBvZiB0aGUgU0RNQSBDb21tYW5kIFJlZyAqLwotZW51bSBzZGNtcl9iaXRzIHsKLQlzZGNtckVSRCA9IDE8PDcsCi0Jc2RjbXJBUiA9IDE8PDE1LAotCXNkY21yU1RESCA9IDE8PDE2LAotCXNkY21yU1RETCA9IDE8PDE3LAotCXNkY21yVFhESCA9IDE8PDIzLAotCXNkY21yVFhETCA9IDE8PDI0LAotCXNkY21yQVQgPSAxPDwzMQotfTsKLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBJbnRlcnJ1cHQgQ2F1c2UgUmVnICovCi1lbnVtIGljcl9iaXRzIHsKLQlpY3JSeEJ1ZmZlciA9IDEsCi0JaWNyVHhCdWZmZXJIaWdoID0gMTw8MiwKLQlpY3JUeEJ1ZmZlckxvdyA9IDE8PDMsCi0JaWNyVHhFbmRIaWdoID0gMTw8NiwKLQlpY3JUeEVuZExvdyA9IDE8PDcsCi0JaWNyUnhFcnJvciA9IDE8PDgsCi0JaWNyVHhFcnJvckhpZ2ggPSAxPDwxMCwKLQlpY3JUeEVycm9yTG93ID0gMTw8MTEsCi0JaWNyUnhPVlIgPSAxPDwxMiwKLQlpY3JUeFVkciA9IDE8PDEzLAotCWljclJ4QnVmZmVyUTAgPSAxPDwxNiwKLQlpY3JSeEJ1ZmZlclExID0gMTw8MTcsCi0JaWNyUnhCdWZmZXJRMiA9IDE8PDE4LAotCWljclJ4QnVmZmVyUTMgPSAxPDwxOSwKLQlpY3JSeEVycm9yUTAgPSAxPDwyMCwKLQlpY3JSeEVycm9yUTEgPSAxPDwyMSwKLQlpY3JSeEVycm9yUTIgPSAxPDwyMiwKLQlpY3JSeEVycm9yUTMgPSAxPDwyMywKLQlpY3JNSUlQaHlTVEMgPSAxPDwyOCwKLQlpY3JTTUlkb25lID0gMTw8MjksCi0JaWNyRXRoZXJJbnRTdW0gPSAxPDwzMQotfTsKLQotCi0vKiBUaGUgUnggYW5kIFR4IGRlc2NyaXB0b3IgbGlzdHMuICovCi10eXBlZGVmIHN0cnVjdCB7Ci0jaWZkZWYgREVTQ19CRQotCXUxNiBieXRlX2NudDsKLQl1MTYgcmVzZXJ2ZWQ7Ci0jZWxzZQotCXUxNiByZXNlcnZlZDsKLQl1MTYgYnl0ZV9jbnQ7Ci0jZW5kaWYKLQl1MzIgY21kc3RhdDsKLQl1MzIgbmV4dDsKLQl1MzIgYnVmZl9wdHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBndDk2MTAwX3RkX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLSNpZmRlZiBERVNDX0JFCi0JdTE2IGJ1ZmZfc3o7Ci0JdTE2IGJ5dGVfY250OwotI2Vsc2UKLQl1MTYgYnl0ZV9jbnQ7Ci0JdTE2IGJ1ZmZfc3o7Ci0jZW5kaWYKLQl1MzIgY21kc3RhdDsKLQl1MzIgbmV4dDsKLQl1MzIgYnVmZl9wdHI7Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBndDk2MTAwX3JkX3Q7Ci0KLQotLyogVmFsdWVzIGZvciB0aGUgVHggY29tbWFuZC1zdGF0dXMgZGVzY3JpcHRvciBlbnRyeS4gKi8KLWVudW0gdGRfY21kc3RhdCB7Ci0JdHhPd24gPSAxPDwzMSwKLQl0eEF1dG9Nb2RlID0gMTw8MzAsCi0JdHhFSSA9IDE8PDIzLAotCXR4R2VuQ1JDID0gMTw8MjIsCi0JdHhQYWQgPSAxPDwxOCwKLQl0eEZpcnN0ID0gMTw8MTcsCi0JdHhMYXN0ID0gMTw8MTYsCi0JdHhFcnJvclN1bW1hcnkgPSAxPDwxNSwKLQl0eFJlVHhDbnRNYXNrID0gMHgwZjw8MTAsCi0JdHhSZVR4Q250Qml0ID0gMTAsCi0JdHhDb2xsaXNpb24gPSAxPDw5LAotCXR4UmVUeExpbWl0ID0gMTw8OCwKLQl0eFVuZGVycnVuID0gMTw8NiwKLQl0eExhdGVDb2xsaXNpb24gPSAxPDw1Ci19OwotCi0KLS8qIFZhbHVlcyBmb3IgdGhlIFJ4IGNvbW1hbmQtc3RhdHVzIGRlc2NyaXB0b3IgZW50cnkuICovCi1lbnVtIHJkX2NtZHN0YXQgewotCXJ4T3duID0gMTw8MzEsCi0JcnhBdXRvTW9kZSA9IDE8PDMwLAotCXJ4RUkgPSAxPDwyMywKLQlyeEZpcnN0ID0gMTw8MTcsCi0JcnhMYXN0ID0gMTw8MTYsCi0JcnhFcnJvclN1bW1hcnkgPSAxPDwxNSwKLQlyeElHTVAgPSAxPDwxNCwKLQlyeEhhc2hFeHBpcmVkID0gMTw8MTMsCi0JcnhNaXNzZWRGcmFtZSA9IDE8PDEyLAotCXJ4RnJhbWVUeXBlID0gMTw8MTEsCi0JcnhTaG9ydEZyYW1lID0gMTw8OCwKLQlyeE1heEZyYW1lTGVuID0gMTw8NywKLQlyeE92ZXJydW4gPSAxPDw2LAotCXJ4Q29sbGlzaW9uID0gMTw8NCwKLQlyeENSQ0Vycm9yID0gMQotfTsKLQotLyogQml0IGZpZWxkcyBvZiBhIEhhc2ggVGFibGUgRW50cnkgKi8KLWVudW0gaGFzaF90YWJsZV9lbnRyeSB7Ci0JaHRlVmFsaWQgPSAxLAotCWh0ZVNraXAgPSAyLAotCWh0ZVJEID0gNAotfTsKLQotLy8gVGhlIE1JQiBjb3VudGVycwotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiBieXRlUmVjZWl2ZWQ7Ci0JdTMyIGJ5dGVTZW50OwotCXUzMiBmcmFtZXNSZWNlaXZlZDsKLQl1MzIgZnJhbWVzU2VudDsKLQl1MzIgdG90YWxCeXRlUmVjZWl2ZWQ7Ci0JdTMyIHRvdGFsRnJhbWVzUmVjZWl2ZWQ7Ci0JdTMyIGJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkOwotCXUzMiBtdWx0aWNhc3RGcmFtZXNSZWNlaXZlZDsKLQl1MzIgY1JDRXJyb3I7Ci0JdTMyIG92ZXJzaXplRnJhbWVzOwotCXUzMiBmcmFnbWVudHM7Ci0JdTMyIGphYmJlcjsKLQl1MzIgY29sbGlzaW9uOwotCXUzMiBsYXRlQ29sbGlzaW9uOwotCXUzMiBmcmFtZXM2NDsKLQl1MzIgZnJhbWVzNjVfMTI3OwotCXUzMiBmcmFtZXMxMjhfMjU1OwotCXUzMiBmcmFtZXMyNTZfNTExOwotCXUzMiBmcmFtZXM1MTJfMTAyMzsKLQl1MzIgZnJhbWVzMTAyNF9NYXhTaXplOwotCXUzMiBtYWNSeEVycm9yOwotCXUzMiBkcm9wcGVkRnJhbWVzOwotCXUzMiBvdXRNdWx0aWNhc3RGcmFtZXM7Ci0JdTMyIG91dEJyb2FkY2FzdEZyYW1lczsKLQl1MzIgdW5kZXJzaXplRnJhbWVzOwotfSBtaWJfY291bnRlcnNfdDsKLQotCi1zdHJ1Y3QgZ3Q5NjEwMF9wcml2YXRlIHsKLQlndDk2MTAwX3JkX3QqIHJ4X3Jpbmc7Ci0JZ3Q5NjEwMF90ZF90KiB0eF9yaW5nOwotCS8vIFRoZSBSeCBhbmQgVHggcmluZ3MgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQKLQlkbWFfYWRkcl90IHJ4X3JpbmdfZG1hOwotCWRtYV9hZGRyX3QgdHhfcmluZ19kbWE7Ci0JY2hhciogaGFzaF90YWJsZTsKLQkvLyBUaGUgSGFzaCBUYWJsZSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkCi0JZG1hX2FkZHJfdCBoYXNoX3RhYmxlX2RtYTsKLQlpbnQgaGFzaF9tb2RlOwotICAgIAotCS8vIFRoZSBSeCBidWZmZXJzIG11c3QgYmUgOC1ieXRlIGFsaWduZWQKLQljaGFyKiByeF9idWZmOwotCWRtYV9hZGRyX3QgcnhfYnVmZl9kbWE7Ci0JLy8gVHggYnVmZmVycyAodHhfc2tidWZmW2ldLT5kYXRhKSB3aXRoIGxlc3MgdGhhbiA4IGJ5dGVzCi0JLy8gb2YgcGF5bG9hZCBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkCi0Jc3RydWN0IHNrX2J1ZmYqIHR4X3NrYnVmZltUWF9SSU5HX1NJWkVdOwotCWludCByeF9uZXh0X291dDsgLyogVGhlIG5leHQgZnJlZSByaW5nIGVudHJ5IHRvIHJlY2VpdmUgKi8KLQlpbnQgdHhfbmV4dF9pbjsJIC8qIFRoZSBuZXh0IGZyZWUgcmluZyBlbnRyeSB0byBzZW5kICovCi0JaW50IHR4X25leHRfb3V0OyAvKiBUaGUgbGFzdCByaW5nIGVudHJ5IHRoZSBJU1IgcHJvY2Vzc2VkICovCi0JaW50IHR4X2NvdW50OyAgICAvKiBjdXJyZW50ICMgb2YgcGt0cyB3YWl0aW5nIHRvIGJlIHNlbnQgaW4gVHggcmluZyAqLwotCWludCBpbnRyX3dvcmtfZG9uZTsgLyogbnVtYmVyIG9mIFJ4IGFuZCBUeCBwa3RzIHByb2Nlc3NlZCBpbiB0aGUgaXNyICovCi0JaW50IHR4X2Z1bGw7ICAgICAgICAvKiBUeCByaW5nIGlzIGZ1bGwgKi8KLSAgICAKLQltaWJfY291bnRlcnNfdCBtaWI7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7Ci0KLQlpbnQgcG9ydF9udW07ICAvLyAwIG9yIDEKLQlpbnQgY2hpcF9yZXY7Ci0JdTMyIHBvcnRfb2Zmc2V0OwotICAgIAotCWludCBwaHlfYWRkcjsgLy8gUEhZIGFkZHJlc3MKLQl1MzIgbGFzdF9wc3I7IC8vIGxhc3QgdmFsdWUgb2YgdGhlIHBvcnQgc3RhdHVzIHJlZ2lzdGVyCi0KLQlpbnQgb3B0aW9uczsgICAgIC8qIFVzZXItc2V0dGFibGUgbWlzYy4gZHJpdmVyIG9wdGlvbnMuICovCi0Jc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0Jc3BpbmxvY2tfdCBsb2NrOyAvKiBTZXJpYWxpc2UgYWNjZXNzIHRvIGRldmljZSAqLwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9oYW1hY2hpLmMgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKaW5kZXggNDA5YzZhYS4uYjU5YmFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jCisrKyBiL2RyaXZlcnMvbmV0L2hhbWFjaGkuYwpAQCAtMyw3ICszLDcgQEAKIAlXcml0dGVuIDE5OTgtMjAwMCBieSBEb25hbGQgQmVja2VyLgogCVVwZGF0ZXMgMjAwMCBieSBLZWl0aCBVbmRlcndvb2QuCiAKLQlUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mIAorCVRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YKIAl0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCksIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgogCURyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMgY29kZSBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QKIAlyZXRhaW4gdGhlIGF1dGhvcnNoaXAsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBub3RpY2UuICBUaGlzIGZpbGUgaXMgbm90CkBAIC0yNyw4ICsyNyw4IEBACiAqLwogCiAjZGVmaW5lIERSVl9OQU1FCSJoYW1hY2hpIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4wIgotI2RlZmluZSBEUlZfUkVMREFURQkiSnVuZSAyNywgMjAwNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMSIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIlNlcHQgMTEsIDIwMDYiCiAKIAogLyogQSBmZXcgdXNlci1jb25maWd1cmFibGUgdmFsdWVzLiAqLwpAQCAtNDYsNyArNDYsNyBAQAogc3RhdGljIGludCBtYXhfcnhfbGF0ZW5jeSA9IDB4MTE7CiBzdGF0aWMgaW50IG1heF9yeF9nYXAgPSAweDA1Owogc3RhdGljIGludCBtaW5fcnhfcGt0ID0gMHgxODsKLXN0YXRpYyBpbnQgbWF4X3R4X2xhdGVuY3kgPSAweDAwOyAKK3N0YXRpYyBpbnQgbWF4X3R4X2xhdGVuY3kgPSAweDAwOwogc3RhdGljIGludCBtYXhfdHhfZ2FwID0gMHgwMDsKIHN0YXRpYyBpbnQgbWluX3R4X3BrdCA9IDB4MzA7CiAKQEAgLTc2LDcgKzc2LDcgQEAKIAkJLSBUaGUgbmV4dCBiaXQgY2FuIGJlIHVzZWQgdG8gZm9yY2UgaGFsZi1kdXBsZXguICBUaGlzIGlzIGEgYmFkCiAJCSAgaWRlYSBzaW5jZSBubyBrbm93biBpbXBsZW1lbnRhdGlvbnMgaW1wbGVtZW50IGhhbGYtZHVwbGV4LCBhbmQsCiAJCSAgaW4gZ2VuZXJhbCwgaGFsZi1kdXBsZXggZm9yIGdpZ2FiaXQgZXRoZXJuZXQgaXMgYSBiYWQgaWRlYS4KLQkJCTB4MDAwMDAwODAgOiBGb3JjZSBoYWxmLWR1cGxleCAKKwkJCTB4MDAwMDAwODAgOiBGb3JjZSBoYWxmLWR1cGxleAogCQkJRGVmYXVsdCBpcyBmdWxsLWR1cGxleC4KIAkJLSBJbiB0aGUgb3JpZ2luYWwgZHJpdmVyLCB0aGUgbmludGggYml0IGNvdWxkIGJlIHVzZWQgdG8gZm9yY2UKIAkJICBmdWxsLWR1cGxleC4gIE1haW50YWluIHRoYXQgZm9yIGNvbXBhdGliaWxpdHkKQEAgLTg3LDcgKzg3LDcgQEAKIHN0YXRpYyBpbnQgZnVsbF9kdXBsZXhbTUFYX1VOSVRTXSA9IHstMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTF9OwogLyogVGhlIEhhbWFjaGkgY2hpcHNldCBzdXBwb3J0cyAzIHBhcmFtZXRlcnMgZWFjaCBmb3IgUnggYW5kIFR4CiAgKiBpbnRlcnJ1cHV0IG1hbmFnZW1lbnQuICBQYXJhbWV0ZXJzIHdpbGwgYmUgbG9hZGVkIGFzIHNwZWNpZmllZCBpbnRvCi0gKiB0aGUgVHhJbnRDb250cm9sIGFuZCBSeEludENvbnRyb2wgcmVnaXN0ZXJzLiAgCisgKiB0aGUgVHhJbnRDb250cm9sIGFuZCBSeEludENvbnRyb2wgcmVnaXN0ZXJzLgogICoKICAqIFRoZSByZWdpc3RlcnMgYXJlIGFycmFuZ2VkIGFzIGZvbGxvd3M6CiAgKiAgICAgMjMgLSAxNiAgIDE1IC0gIDggICA3ICAgIC0gICAgMApAQCAtOTUsMTAgKzk1LDEwIEBACiAgKiAgIHwgbWluX3BrdCB8IG1heF9nYXAgfCBtYXhfbGF0ZW5jeSB8CiAgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICAgbWluX3BrdCAgICAgIDogVGhlIG1pbmltdW0gbnVtYmVyIG9mIHBhY2tldHMgcHJvY2Vzc2VkIGJldHdlZW4KLSAqICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cy4gCisgKiAgICAgICAgICAgICAgICAgIGludGVycnVwdHMuCiAgKiAgIG1heF9nYXAgICAgICA6IFRoZSBtYXhpbXVtIGludGVyLXBhY2tldCBnYXAgaW4gdW5pdHMgb2YgOC4xOTIgdXMKICAqICAgbWF4X2xhdGVuY3kgIDogVGhlIGFic29sdXRlIHRpbWUgYmV0d2VlbiBpbnRlcnJ1cHRzIGluIHVuaXRzIG9mIDguMTkyIHVzCi0gKiAKKyAqCiAgKi8KIHN0YXRpYyBpbnQgcnhfcGFyYW1zW01BWF9VTklUU10gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKIHN0YXRpYyBpbnQgdHhfcGFyYW1zW01BWF9VTklUU10gPSB7LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xfTsKQEAgLTE4Myw3ICsxODMsNyBAQAogICAgb3RoZXIgbGludXggaGVhZGVycyBjYXVzaW5nIG1hbnkgY29tcGlsZXIgd2FybmluZ3MuCiAqLwogI2lmbmRlZiBJUF9NRgotICAjZGVmaW5lIElQX01GIDB4MjAwMCAgIC8qIElQIG1vcmUgZnJhZ3MgZnJvbSA8bmV0aW5ldC9pcC5oPiAqLyAKKyAgI2RlZmluZSBJUF9NRiAweDIwMDAgICAvKiBJUCBtb3JlIGZyYWdzIGZyb20gPG5ldGluZXQvaXAuaD4gKi8KICNlbmRpZgogCiAvKiBEZWZpbmUgSVBfT0ZGU0VUIHRvIGJlIElQT1BUX09GRlNFVCAqLwpAQCAtMjA0LDkgKzIwNCw5IEBACiAvKiBDb25kZW5zZWQgYnVzK2VuZGlhbiBwb3J0YWJpbGl0eSBvcGVyYXRpb25zLiAqLwogI2lmIEFERFJMRU4gPT0gNjQKICNkZWZpbmUgY3B1X3RvX2xlWFgoYWRkcikJY3B1X3RvX2xlNjQoYWRkcikKLSNlbHNlIAorI2Vsc2UKICNkZWZpbmUgY3B1X3RvX2xlWFgoYWRkcikJY3B1X3RvX2xlMzIoYWRkcikKLSNlbmRpZiAgIAorI2VuZGlmCiAKIAogLyoKQEAgLTI5MSwzMCArMjkxLDMwIEBACiAKIElWYy4gRXJyYXRhCiAKLU5vbmUgbm90ZWQuICAKK05vbmUgbm90ZWQuCiAKIFYuICBSZWNlbnQgQ2hhbmdlcwogCi0wMS8xNS8xOTk5IEVQSyAgRW5sYXJnZW1lbnQgb2YgdGhlIFRYIGFuZCBSWCByaW5nIHNpemVzLiAgVGhpcyBhcHBlYXJzIAorMDEvMTUvMTk5OSBFUEsgIEVubGFyZ2VtZW50IG9mIHRoZSBUWCBhbmQgUlggcmluZyBzaXplcy4gIFRoaXMgYXBwZWFycwogICAgIHRvIGhlbHAgYXZvaWQgc29tZSBzdGFsbCBjb25kaXRpb25zIC0tIHRoaXMgbmVlZHMgZnVydGhlciByZXNlYXJjaC4KIAotMDEvMTUvMTk5OSBFUEsgIENyZWF0aW9uIG9mIHRoZSBoYW1hY2hpX3R4IGZ1bmN0aW9uLiAgVGhpcyBmdW5jdGlvbiBjbGVhbnMgCiswMS8xNS8xOTk5IEVQSyAgQ3JlYXRpb24gb2YgdGhlIGhhbWFjaGlfdHggZnVuY3Rpb24uICBUaGlzIGZ1bmN0aW9uIGNsZWFucwogICAgIHRoZSBUeCByaW5nIGFuZCBpcyBjYWxsZWQgZnJvbSBoYW1hY2hpX3N0YXJ0X3htaXQgKHRoaXMgdXNlZCB0byBiZQogICAgIGNhbGxlZCBmcm9tIGhhbWFjaGlfaW50ZXJydXB0IGJ1dCBpdCB0ZW5kcyB0byBkZWxheSBleGVjdXRpb24gb2YgdGhlCiAgICAgaW50ZXJydXB0IGhhbmRsZXIgYW5kIHRodXMgcmVkdWNlIGJhbmR3aWR0aCBieSByZWR1Y2luZyB0aGUgbGF0ZW5jeQotICAgIGJldHdlZW4gaGFtYWNoaV9yeCgpJ3MpLiAgTm90YWJseSwgc29tZSBtb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBzbyAKLSAgICB0aGF0IHRoZSBjbGVhbmluZyBsb29wIGNoZWNrcyBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBEZXNjT3duIGJpdCAKLSAgICBpc24ndCBzZXQgaW4gdGhlIHN0YXR1cyBmbGFnIHNpbmNlIHRoZSBjYXJkIGlzIG5vdCByZXF1aXJlZCAKKyAgICBiZXR3ZWVuIGhhbWFjaGlfcngoKSdzKS4gIE5vdGFibHksIHNvbWUgbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgc28KKyAgICB0aGF0IHRoZSBjbGVhbmluZyBsb29wIGNoZWNrcyBvbmx5IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBEZXNjT3duIGJpdAorICAgIGlzbid0IHNldCBpbiB0aGUgc3RhdHVzIGZsYWcgc2luY2UgdGhlIGNhcmQgaXMgbm90IHJlcXVpcmVkCiAgICAgdG8gc2V0IHRoZSBlbnRpcmUgZmxhZyB0byB6ZXJvIGFmdGVyIHByb2Nlc3NpbmcuCiAKLTAxLzE1LzE5OTkgRVBLIEluIHRoZSBoYW1hY2hpX3N0YXJ0X3R4IGZ1bmN0aW9uLCB0aGUgVHggcmluZyBmdWxsIGZsYWcgaXMgCiswMS8xNS8xOTk5IEVQSyBJbiB0aGUgaGFtYWNoaV9zdGFydF90eCBmdW5jdGlvbiwgdGhlIFR4IHJpbmcgZnVsbCBmbGFnIGlzCiAgICAgY2hlY2tlZCBiZWZvcmUgYXR0ZW1wdGluZyB0byBhZGQgYSBidWZmZXIgdG8gdGhlIHJpbmcuICBJZiB0aGUgcmluZyBpcyBmdWxsCiAgICAgYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIGZyZWUgYW55IGRpcnR5IGJ1ZmZlcnMgYW5kIHRodXMgZmluZCBzcGFjZSBmb3IKICAgICB0aGUgbmV3IGJ1ZmZlciBvciB0aGUgZnVuY3Rpb24gcmV0dXJucyBub24temVybyB3aGljaCBzaG91bGQgY2FzZSB0aGUKICAgICBzY2hlZHVsZXIgdG8gcmVzY2hlZHVsZSB0aGUgYnVmZmVyIGxhdGVyLgogCi0wMS8xNS8xOTk5IEVQSyBTb21lIGFkanVzdG1lbnRzIHdlcmUgbWFkZSB0byB0aGUgY2hpcCBpbml0aWFsaXphdGlvbi4gIAotICAgIEVuZC10by1lbmQgZmxvdyBjb250cm9sIHNob3VsZCBub3cgYmUgZnVsbHkgYWN0aXZlIGFuZCB0aGUgaW50ZXJydXB0IAorMDEvMTUvMTk5OSBFUEsgU29tZSBhZGp1c3RtZW50cyB3ZXJlIG1hZGUgdG8gdGhlIGNoaXAgaW5pdGlhbGl6YXRpb24uCisgICAgRW5kLXRvLWVuZCBmbG93IGNvbnRyb2wgc2hvdWxkIG5vdyBiZSBmdWxseSBhY3RpdmUgYW5kIHRoZSBpbnRlcnJ1cHQKICAgICBhbGdvcml0aG0gdmFycyBoYXZlIGJlZW4gY2hhbmdlZC4gIFRoZXNlIGNvdWxkIHByb2JhYmx5IHVzZSBmdXJ0aGVyIHR1bmluZy4KIAogMDEvMTUvMTk5OSBFUEsgQWRkZWQgdGhlIG1heF97cngsdHh9X2xhdGVuY3kgb3B0aW9ucy4gIFRoZXNlIGFyZSB1c2VkIHRvCkBAIC0zMjIsNyArMzIyLDcgQEAKICAgICBwcm9ibGVtcyB3aXRoIG5ldHdvcmsgc3RhbGxzLCB0cnkgc2V0dGluZyB0aGVzZSB0byBoaWdoZXIgdmFsdWVzLgogICAgIFZhbGlkIHZhbHVlcyBhcmUgMHgwMCB0aHJvdWdoIDB4ZmYuCiAKLTAxLzE1LzE5OTkgRVBLIEluIGdlbmVyYWwsIHRoZSBvdmVyYWxsIGJhbmR3aWR0aCBoYXMgaW5jcmVhc2VkIGFuZCAKKzAxLzE1LzE5OTkgRVBLIEluIGdlbmVyYWwsIHRoZSBvdmVyYWxsIGJhbmR3aWR0aCBoYXMgaW5jcmVhc2VkIGFuZAogICAgIGxhdGVuY2llcyBhcmUgYmV0dGVyIChzb21ldGltZXMgYnkgYSBmYWN0b3Igb2YgMikuICBTdGFsbHMgYXJlIHJhcmUgYXQKICAgICB0aGlzIHBvaW50LCBob3dldmVyIHRoZXJlIHN0aWxsIGFwcGVhcnMgdG8gYmUgYSBidWcgc29tZXdoZXJlIGJldHdlZW4gdGhlCiAgICAgaGFyZHdhcmUgYW5kIGRyaXZlci4gIFRDUCBjaGVja3N1bSBlcnJvcnMgdW5kZXIgbG9hZCBhbHNvIGFwcGVhciB0byBiZQpAQCAtMzM0LDIwICszMzQsMjAgQEAKICAgICByaW5ncyB3YXMgdHlwaWNhbGx5IGdldHRpbmcgc2V0IGNvcnJlY3RseSwgYnV0IHRoZSBUeCByaW5nIHdhc24ndCBnZXR0aW5nCiAgICAgdGhlIERlc2NFbmRSaW5nIGJpdCBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiA/Pz8gRG9lcyB0aGlzIG1lYW4gdGhlCiAgICAgaGFtYWNoaSBjYXJkIGlzIHVzaW5nIHRoZSBEZXNjRW5kUmluZyBpbiBwcm9jZXNzaW5nIGV2ZW4gaWYgYSBwYXJ0aWN1bGFyCi0gICAgc2xvdCBpc24ndCBpbiB1c2UgLS0gaHlwb3RoZXRpY2FsbHksIHRoZSBjYXJkIG1pZ2h0IGJlIHNlYXJjaGluZyB0aGUgCisgICAgc2xvdCBpc24ndCBpbiB1c2UgLS0gaHlwb3RoZXRpY2FsbHksIHRoZSBjYXJkIG1pZ2h0IGJlIHNlYXJjaGluZyB0aGUKICAgICBlbnRpcmUgVHggcmluZyBmb3Igc2xvdHMgd2l0aCB0aGUgRGVzY093biBiaXQgc2V0IGFuZCB0aGVuIHByb2Nlc3NpbmcKICAgICB0aGVtLiAgSWYgdGhlIERlc2NFbmRSaW5nIGJpdCBpc24ndCBzZXQsIHRoZW4gaXQgbWlnaHQganVzdCB3YW5kZXIgb2ZmCiAgICAgdGhyb3VnaCBtZW1vcnkgdW50aWwgaXQgaGl0cyBhIGNodW5rIG9mIGRhdGEgd2l0aCB0aGF0IGJpdCBzZXQKICAgICBhbmQgdGhlbiBsb29waW5nIGJhY2suCiAKLTAyLzA5LzE5OTkgRVBLIEFkZGVkIE1pY2hlbCBNdWVsbGVyJ3MgVHhETUEgSW50ZXJydXB0IGFuZCBUeC10aW1lb3V0IAorMDIvMDkvMTk5OSBFUEsgQWRkZWQgTWljaGVsIE11ZWxsZXIncyBUeERNQSBJbnRlcnJ1cHQgYW5kIFR4LXRpbWVvdXQKICAgICBwcm9ibGVtIChUeENtZCBhbmQgUnhDbWQgbmVlZCBvbmx5IHRvIGJlIHNldCB3aGVuIGlkbGUgb3Igc3RvcHBlZC4KIAogMDIvMDkvMTk5OSBFUEsgQWRkZWQgY29kZSB0byBjaGVjay9yZXNldCBkZXYtPnRidXN5IGluIGhhbWFjaGlfaW50ZXJydXB0LgotICAgIChNaWNoZWwgTXVlbGxlciBwb2ludGVkIG91dCB0aGUgYGBwZXJtYW5lbnRseSBidXN5JycgcG90ZW50aWFsIAorICAgIChNaWNoZWwgTXVlbGxlciBwb2ludGVkIG91dCB0aGUgYGBwZXJtYW5lbnRseSBidXN5JycgcG90ZW50aWFsCiAgICAgcHJvYmxlbSBoZXJlKS4KIAotMDIvMjIvMTk5OSBFUEsgQWRkZWQgUGV0ZSBXeWNrb2ZmJ3MgaW9jdGwgdG8gY29udHJvbCB0aGUgVHgvUnggbGF0ZW5jaWVzLiAKKzAyLzIyLzE5OTkgRVBLIEFkZGVkIFBldGUgV3lja29mZidzIGlvY3RsIHRvIGNvbnRyb2wgdGhlIFR4L1J4IGxhdGVuY2llcy4KIAogMDIvMjMvMTk5OSBFUEsgVmVyaWZpZWQgdGhhdCB0aGUgaW50ZXJydXB0IHN0YXR1cyBmaWVsZCBiaXRzIGZvciBUeCB3ZXJlCiAgICAgaW5jb3JyZWN0bHkgZGVmaW5lZCBhbmQgY29ycmVjdGVkIChhcyBwZXIgTWljaGVsIE11ZWxsZXIpLgpAQCAtMzYzLDcgKzM2Myw3IEBACiAKIDAyLzIwLzIwMDAgS0RVIFNvbWUgb2YgdGhlIGNvbnRyb2wgd2FzIGp1c3QgcGxhaW4gb2RkLiAgQ2xlYW5lZCB1cCB0aGUKIGhhbWFjaGlfc3RhcnRfeG1pdCgpIGFuZCBoYW1hY2hpX2ludGVycnVwdCgpIGNvZGUuICBUaGVyZSBpcyBzdGlsbCBzb21lCi1yZS1zdHJ1Y3R1cmluZyBJIHdvdWxkIGxpa2UgdG8gZG8uICAKK3JlLXN0cnVjdHVyaW5nIEkgd291bGQgbGlrZSB0byBkby4KIAogMDMvMDEvMjAwMCBLRFUgRXhwZXJpbWVudGluZyB3aXRoIGEgV0lERSByYW5nZSBvZiBpbnRlcnJ1cHQgbWl0aWdhdGlvbgogcGFyYW1ldGVycyBvbiBhIGR1YWwgUDMtNDUwIHNldHVwIHlpZWxkZWQgdGhlIG5ldyBkZWZhdWx0IGludGVycnVwdApAQCAtMzcxLDI1ICszNzEsMjUgQEAKIEVyaWMncyBzY2hlbWUuICBSeCBzaG91bGQgYmUgbW9yZSBvZnRlbi4uLgogCiAwMy8xMy8yMDAwIEtEVSBBZGRlZCBhIHBhdGNoIHRvIG1ha2UgdGhlIFJ4IENoZWNrc3VtIGNvZGUgaW50ZXJhY3QKLW5pY2VseSB3aXRoIG5vbi1saW51eCBtYWNoaW5lcy4gIAorbmljZWx5IHdpdGggbm9uLWxpbnV4IG1hY2hpbmVzLgogCi0wMy8xMy8yMDAwIEtEVSBFeHBlcmltZW50ZWQgd2l0aCBzb21lIG9mIHRoZSBjb25maWd1cmF0aW9uIHZhbHVlczogIAorMDMvMTMvMjAwMCBLRFUgRXhwZXJpbWVudGVkIHdpdGggc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiB2YWx1ZXM6CiAKIAktSXQgc2VlbXMgdGhhdCBlbmFibGluZyBQQ0kgcGVyZm9ybWFuY2UgY29tbWFuZHMgZm9yIGRlc2NyaXB0b3JzCi0JKGNoYW5naW5nIFJ4RE1BQ3RybCBhbmQgVHhETUFDdHJsIGxvd2VyIG5pYmJsZSBmcm9tIDUgdG8gRCkgaGFzIG1pbmltYWwgCi0JcGVyZm9ybWFuY2UgaW1wYWN0IGZvciBhbnkgb2YgbXkgdGVzdHMuICh0dGNwLCBuZXRwaXBlLCBuZXRwZXJmKSAgSSB3aWxsIAorCShjaGFuZ2luZyBSeERNQUN0cmwgYW5kIFR4RE1BQ3RybCBsb3dlciBuaWJibGUgZnJvbSA1IHRvIEQpIGhhcyBtaW5pbWFsCisJcGVyZm9ybWFuY2UgaW1wYWN0IGZvciBhbnkgb2YgbXkgdGVzdHMuICh0dGNwLCBuZXRwaXBlLCBuZXRwZXJmKSAgSSB3aWxsCiAJbGVhdmUgdGhlbSB0aGF0IHdheSB1bnRpbCBJIGhlYXIgZnVydGhlciBmZWVkYmFjay4KIAotCS1JbmNyZWFzaW5nIHRoZSBQQ0lfTEFURU5DWV9USU1FUiB0byAxMzAgCisJLUluY3JlYXNpbmcgdGhlIFBDSV9MQVRFTkNZX1RJTUVSIHRvIDEzMAogCSgyICsgKGJ1cnN0IHNpemUgb2YgMTI4ICogKDAgd2FpdCBzdGF0ZXMgKyAxKSkpIHNlZW1zIHRvIHNsaWdodGx5CiAJZGVncmFkZSBwZXJmb3JtYW5jZS4gIExlYXZpbmcgZGVmYXVsdCBhdCA2NCBwZW5kaW5nIGZ1cnRoZXIgaW5mb3JtYXRpb24uCiAKLTAzLzE0LzIwMDAgS0RVIEZ1cnRoZXIgdHVuaW5nOiAgCiswMy8xNC8yMDAwIEtEVSBGdXJ0aGVyIHR1bmluZzoKIAogCS1hZGp1c3RlZCBib2d1c2NudCBpbiBoYW1hY2hpX3J4KCkgdG8gZGVwZW5kIG9uIGludGVycnVwdAogCW1pdGlnYXRpb24gcGFyYW1ldGVycyBjaG9zZW4uCiAKLQktU2VsZWN0ZWQgYSBzZXQgb2YgaW50ZXJydXB0IHBhcmFtZXRlcnMgYmFzZWQgb24gc29tZSBleHRlbnNpdmUgdGVzdGluZy4gIAorCS1TZWxlY3RlZCBhIHNldCBvZiBpbnRlcnJ1cHQgcGFyYW1ldGVycyBiYXNlZCBvbiBzb21lIGV4dGVuc2l2ZSB0ZXN0aW5nLgogCVRoZXNlIG1heSBjaGFuZ2Ugd2l0aCBtb3JlIHRlc3RpbmcuCiAKIFRPIERPOgpAQCAtMzk4LDE0ICszOTgsMTQgQEAKIFBDSV9DT01NQU5EX0lOVkFMSURBVEUuICBTZXQgbWF4aW11bSBidXJzdCBzaXplIHRvIGNhY2hlIGxpbmUgc2l6ZSBpbgogdGhhdCBjYXNlLgogCi0tZml4IHRoZSByZXNldCBwcm9jZWR1cmUuICBJdCBkb2Vzbid0IHF1aXRlIHdvcmsuICAKKy1maXggdGhlIHJlc2V0IHByb2NlZHVyZS4gIEl0IGRvZXNuJ3QgcXVpdGUgd29yay4KICovCiAKIC8qIEEgZmV3IHZhbHVlcyB0aGF0IG1heSBiZSB0d2Vha2VkLiAqLwogLyogU2l6ZSBvZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIsIGNhbGN1bGF0ZWQgYXM6CiAgKiAxNTE4IGJ5dGVzIChldGhlcm5ldCBwYWNrZXQpICsgMiBieXRlcyAodG8gZ2V0IDggYnl0ZSBhbGlnbm1lbnQgZm9yCiAgKiB0aGUgY2FyZCkgKyA4IGJ5dGVzIG9mIHN0YXR1cyBpbmZvICsgOCBieXRlcyBmb3IgdGhlIFJ4IENoZWNrc3VtICsKLSAqIDIgbW9yZSBiZWNhdXNlIHdlIHVzZSBza2JfcmVzZXJ2ZS4gIAorICogMiBtb3JlIGJlY2F1c2Ugd2UgdXNlIHNrYl9yZXNlcnZlLgogICovCiAjZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzgKIApAQCAtNDY1LDcgKzQ2NSw3IEBACiAKIC8qIFRoZSBIYW1hY2hpIFJ4IGFuZCBUeCBidWZmZXIgZGVzY3JpcHRvcnMuICovCiBzdHJ1Y3QgaGFtYWNoaV9kZXNjIHsKLQl1MzIgc3RhdHVzX25fbGVuZ3RoOwkJCQorCXUzMiBzdGF0dXNfbl9sZW5ndGg7CiAjaWYgQUREUkxFTiA9PSA2NAogCXUzMiBwYWQ7CiAJdTY0IGFkZHI7CkBAIC00NzYsNyArNDc2LDcgQEAKIAogLyogQml0cyBpbiBoYW1hY2hpX2Rlc2Muc3RhdHVzX25fbGVuZ3RoICovCiBlbnVtIGRlc2Nfc3RhdHVzX2JpdHMgewotCURlc2NPd249MHg4MDAwMDAwMCwgRGVzY0VuZFBhY2tldD0weDQwMDAwMDAwLCBEZXNjRW5kUmluZz0weDIwMDAwMDAwLCAKKwlEZXNjT3duPTB4ODAwMDAwMDAsIERlc2NFbmRQYWNrZXQ9MHg0MDAwMDAwMCwgRGVzY0VuZFJpbmc9MHgyMDAwMDAwMCwKIAlEZXNjSW50cj0weDEwMDAwMDAwLAogfTsKIApAQCAtNTQ2LDcgKzU0Niw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKG9wdGlvbnMsICJHTklDLUlJIEJpdHMgMC0zOiBtZWRpYSB0eXBlLCBiaXRzIDQtNjogYXMgZm9yY2UzMiwgYml0IDc6IGhhbGYgZHVwbGV4LCBiaXQgOSBmdWxsIGR1cGxleCIpOwogTU9EVUxFX1BBUk1fREVTQyhmdWxsX2R1cGxleCwgIkdOSUMtSUkgZnVsbCBkdXBsZXggc2V0dGluZyhzKSAoMSkiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZm9yY2UzMiwgIkdOSUMtSUk6IEJpdCAwOiAzMiBiaXQgUENJLCBiaXQgMTogZGlzYWJsZSBwYXJpdHksIGJpdCAyOiA2NCBiaXQgUENJIChhbGwgYm9hcmRzKSIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKIHN0YXRpYyBpbnQgcmVhZF9lZXByb20odm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBsb2NhdGlvbik7CiBzdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwogc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWx1ZSk7CkBAIC01NjMsOCArNTYzLDggQEAKIHN0YXRpYyBpbnQgaGFtYWNoaV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGFtYWNoaV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzX25vX21paTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzX25vX21paTsKIAogc3RhdGljIGludCBfX2RldmluaXQgaGFtYWNoaV9pbml0X29uZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC02NTksNyArNjU5LDcgQEAKIAkJb3B0aW9uID0gZGV2LT5tZW1fc3RhcnQ7CiAKIAkvKiBJZiB0aGUgYnVzIHNpemUgaXMgbWlzaWRlbnRpZmllZCwgZG8gdGhlIGZvbGxvd2luZy4gKi8KLQlmb3JjZTMyID0gZm9yY2UzMiA/IGZvcmNlMzIgOiAKKwlmb3JjZTMyID0gZm9yY2UzMiA/IGZvcmNlMzIgOgogCQkoKG9wdGlvbiAgPj0gMCkgPyAoKG9wdGlvbiAmIDB4MDAwMDAwNzApID4+IDQpIDogMCApOwogCWlmIChmb3JjZTMyKQogCQl3cml0ZWIoZm9yY2UzMiwgaW9hZGRyICsgVmlydHVhbEp1bXBlcnMpOwpAQCAtNjcxLDExICs2NzEsMTEgQEAKIAkgKiBiZSB2YWxpZCBmb3IgYSBtb21lbnQuICBXYWl0IGZvciBhIGxpdHRsZSB3aGlsZSB1bnRpbCBpdCBpcy4gIElmCiAJICogaXQgdGFrZXMgbW9yZSB0aGFuIDEwbXMsIGZvcmdldCBpdC4KIAkgKi8KLQl1ZGVsYXkoMTApOwkKKwl1ZGVsYXkoMTApOwogCWkgPSByZWFkYihpb2FkZHIgKyBQQ0lDbGtNZWFzKTsKIAlmb3IgKGJvZ3VzY250ID0gMDsgKCEoaSAmIDB4MDgwKSkgJiYgYm9ndXNjbnQgPCAxMDAwOyBib2d1c2NudCsrKXsKLQkJdWRlbGF5KDEwKTsJCi0JCWkgPSByZWFkYihpb2FkZHIgKyBQQ0lDbGtNZWFzKTsJCisJCXVkZWxheSgxMCk7CisJCWkgPSByZWFkYihpb2FkZHIgKyBQQ0lDbGtNZWFzKTsKIAl9CiAKIAlobXAtPmJhc2UgPSBpb2FkZHI7CkBAIC03MTQsOSArNzE0LDkgQEAKIAogCXJ4X2ludF92YXIgPSBjYXJkX2lkeCA8IE1BWF9VTklUUyA/IHJ4X3BhcmFtc1tjYXJkX2lkeF0gOiAtMTsKIAl0eF9pbnRfdmFyID0gY2FyZF9pZHggPCBNQVhfVU5JVFMgPyB0eF9wYXJhbXNbY2FyZF9pZHhdIDogLTE7Ci0JaG1wLT5yeF9pbnRfdmFyID0gcnhfaW50X3ZhciA+PSAwID8gcnhfaW50X3ZhciA6IAorCWhtcC0+cnhfaW50X3ZhciA9IHJ4X2ludF92YXIgPj0gMCA/IHJ4X2ludF92YXIgOgogCQkobWluX3J4X3BrdCA8PCAxNiB8IG1heF9yeF9nYXAgPDwgOCB8IG1heF9yeF9sYXRlbmN5KTsKLQlobXAtPnR4X2ludF92YXIgPSB0eF9pbnRfdmFyID49IDAgPyB0eF9pbnRfdmFyIDogCisJaG1wLT50eF9pbnRfdmFyID0gdHhfaW50X3ZhciA+PSAwID8gdHhfaW50X3ZhciA6CiAJCShtaW5fdHhfcGt0IDw8IDE2IHwgbWF4X3R4X2dhcCA8PCA4IHwgbWF4X3R4X2xhdGVuY3kpOwogCiAKQEAgLTc4MywxMCArNzgzLDEwIEBACiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfdW5tYXBfcng6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9UT1RBTF9TSVpFLCBobXAtPnJ4X3JpbmcsIAorCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgUlhfVE9UQUxfU0laRSwgaG1wLT5yeF9yaW5nLAogCQlobXAtPnJ4X3JpbmdfZG1hKTsKIGVycl9vdXRfdW5tYXBfdHg6Ci0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9UT1RBTF9TSVpFLCBobXAtPnR4X3JpbmcsIAorCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfVE9UQUxfU0laRSwgaG1wLT50eF9yaW5nLAogCQlobXAtPnR4X3JpbmdfZG1hKTsKIGVycl9vdXRfY2xlYXJkZXY6CiAJZnJlZV9uZXRkZXYgKGRldik7CkBAIC04NTYsNyArODU2LDcgQEAKIAlyZXR1cm47CiB9CiAKLQwKKwogc3RhdGljIGludCBoYW1hY2hpX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaGFtYWNoaV9wcml2YXRlICpobXAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtODg2LDcgKzg4Niw3IEBACiAJd3JpdGVsKGNwdV90b19sZTMyKGhtcC0+dHhfcmluZ19kbWEpLCBpb2FkZHIgKyBUeFB0cik7CiAjZW5kaWYKIAotCS8qIFRPRE86ICBJdCB3b3VsZCBtYWtlIHNlbnNlIHRvIG9yZ2FuaXplIHRoaXMgYXMgd29yZHMgc2luY2UgdGhlIGNhcmQgCisJLyogVE9ETzogIEl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gb3JnYW5pemUgdGhpcyBhcyB3b3JkcyBzaW5jZSB0aGUgY2FyZAogCSAqIGRvY3VtZW50YXRpb24gZG9lcy4gLUtEVQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCkBAIC04OTgsMzYgKzg5OCwzNiBAQAogCS8qIENvbmZpZ3VyZSB0aGUgRklGTyAqLwogCWZpZm9faW5mbyA9IChyZWFkdyhpb2FkZHIgKyBHUElPKSAmIDB4MDBDMCkgPj4gNjsKIAlzd2l0Y2ggKGZpZm9faW5mbyl7Ci0JCWNhc2UgMCA6IAorCQljYXNlIDAgOgogCQkJLyogTm8gRklGTyAqLwogCQkJd3JpdGV3KDB4MDAwMCwgaW9hZGRyICsgRklGT2NmZyk7CiAJCQlicmVhazsKLQkJY2FzZSAxIDogCisJCWNhc2UgMSA6CiAJCQkvKiBDb25maWd1cmUgdGhlIEZJRk8gZm9yIDUxMksgZXh0ZXJuYWwsIDE2SyB1c2VkIGZvciBUeC4gKi8KIAkJCXdyaXRldygweDAwMjgsIGlvYWRkciArIEZJRk9jZmcpOwogCQkJYnJlYWs7Ci0JCWNhc2UgMiA6IAorCQljYXNlIDIgOgogCQkJLyogQ29uZmlndXJlIHRoZSBGSUZPIGZvciAxMDI0IGV4dGVybmFsLCAzMksgdXNlZCBmb3IgVHguICovCiAJCQl3cml0ZXcoMHgwMDRDLCBpb2FkZHIgKyBGSUZPY2ZnKTsKIAkJCWJyZWFrOwotCQljYXNlIDMgOiAKKwkJY2FzZSAzIDoKIAkJCS8qIENvbmZpZ3VyZSB0aGUgRklGTyBmb3IgMjA0OCBleHRlcm5hbCwgMzJLIHVzZWQgZm9yIFR4LiAqLwogCQkJd3JpdGV3KDB4MDA2QywgaW9hZGRyICsgRklGT2NmZyk7CiAJCQlicmVhazsKLQkJZGVmYXVsdCA6IAorCQlkZWZhdWx0IDoKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAgVW5zdXBwb3J0ZWQgZXh0ZXJuYWwgbWVtb3J5IGNvbmZpZyFcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCS8qIERlZmF1bHQgdG8gbm8gRklGTyAqLwogCQkJd3JpdGV3KDB4MDAwMCwgaW9hZGRyICsgRklGT2NmZyk7CiAJCQlicmVhazsKIAl9Ci0JCisKIAlpZiAoZGV2LT5pZl9wb3J0ID09IDApCiAJCWRldi0+aWZfcG9ydCA9IGhtcC0+ZGVmYXVsdF9wb3J0OwogCiAKIAkvKiBTZXR0aW5nIHRoZSBSeCBtb2RlIHdpbGwgc3RhcnQgdGhlIFJ4IHByb2Nlc3MuICovCi0JLyogSWYgc29tZW9uZSBkaWRuJ3QgY2hvb3NlIGEgZHVwbGV4LCBkZWZhdWx0IHRvIGZ1bGwtZHVwbGV4ICovIAorCS8qIElmIHNvbWVvbmUgZGlkbid0IGNob29zZSBhIGR1cGxleCwgZGVmYXVsdCB0byBmdWxsLWR1cGxleCAqLwogCWlmIChobXAtPmR1cGxleF9sb2NrICE9IDEpCiAJCWhtcC0+bWlpX2lmLmZ1bGxfZHVwbGV4ID0gMTsKIApAQCAtOTQwLDcgKzk0MCw3IEBACiAjZW5kaWYKIAl3cml0ZXcoMHg4MDAwLCBpb2FkZHIgKyBNQUNDbmZnKTsgLyogU29mdCByZXNldCB0aGUgTUFDICovCiAJd3JpdGV3KDB4MjE1RiwgaW9hZGRyICsgTUFDQ25mZyk7Ci0Jd3JpdGV3KDB4MDAwQywgaW9hZGRyICsgRnJhbWVHYXAwKTsgCisJd3JpdGV3KDB4MDAwQywgaW9hZGRyICsgRnJhbWVHYXAwKTsKIAkvKiBXSEFUPyE/IT8gIFdoeSBpc24ndCB0aGlzIGRvY3VtZW50ZWQgc29tZXdoZXJlPyAtS0RVICovCiAJd3JpdGV3KDB4MTAxOCwgaW9hZGRyICsgRnJhbWVHYXAxKTsKIAkvKiBXaHkgZG8gd2UgZW5hYmxlIHJlY2VpdmVzL3RyYW5zbWl0cyBoZXJlPyAtS0RVICovCkBAIC05NjIsMTYgKzk2MiwxNiBAQAogCiAJaWYgKGhhbWFjaGlfZGVidWcgPiAxKSB7CiAJCXByaW50aygibWF4X3R4X2xhdGVuY3k6ICVkLCBtYXhfdHhfZ2FwOiAlZCwgbWluX3R4X3BrdDogJWRcbiIsCi0JCQl0eF9pbnRfdmFyICYgMHgwMGZmLCAodHhfaW50X3ZhciAmIDB4MDBmZjAwKSA+PiA4LCAKKwkJCXR4X2ludF92YXIgJiAweDAwZmYsICh0eF9pbnRfdmFyICYgMHgwMGZmMDApID4+IDgsCiAJCQkodHhfaW50X3ZhciAmIDB4MDBmZjAwMDApID4+IDE2KTsKIAkJcHJpbnRrKCJtYXhfcnhfbGF0ZW5jeTogJWQsIG1heF9yeF9nYXA6ICVkLCBtaW5fcnhfcGt0OiAlZFxuIiwKLQkJCXJ4X2ludF92YXIgJiAweDAwZmYsIChyeF9pbnRfdmFyICYgMHgwMGZmMDApID4+IDgsIAorCQkJcnhfaW50X3ZhciAmIDB4MDBmZiwgKHJ4X2ludF92YXIgJiAweDAwZmYwMCkgPj4gOCwKIAkJCShyeF9pbnRfdmFyICYgMHgwMGZmMDAwMCkgPj4gMTYpOwogCQlwcmludGsoInJ4X2ludF92YXI6ICV4LCB0eF9pbnRfdmFyOiAleFxuIiwgcnhfaW50X3ZhciwgdHhfaW50X3Zhcik7CiAJfQogCi0Jd3JpdGVsKHR4X2ludF92YXIsIGlvYWRkciArIFR4SW50ckN0cmwpOyAKLQl3cml0ZWwocnhfaW50X3ZhciwgaW9hZGRyICsgUnhJbnRyQ3RybCk7IAorCXdyaXRlbCh0eF9pbnRfdmFyLCBpb2FkZHIgKyBUeEludHJDdHJsKTsKKwl3cml0ZWwocnhfaW50X3ZhciwgaW9hZGRyICsgUnhJbnRyQ3RybCk7CiAKIAlzZXRfcnhfbW9kZShkZXYpOwogCkBAIC0xMDE2LDIxICsxMDE2LDIxIEBACiAJCWludCBlbnRyeSA9IGhtcC0+ZGlydHlfdHggJSBUWF9SSU5HX1NJWkU7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJaWYgKGhtcC0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzX25fbGVuZ3RoICYgY3B1X3RvX2xlMzIoRGVzY093bikpIAorCQlpZiAoaG1wLT50eF9yaW5nW2VudHJ5XS5zdGF0dXNfbl9sZW5ndGggJiBjcHVfdG9fbGUzMihEZXNjT3duKSkKIAkJCWJyZWFrOwogCQkvKiBGcmVlIHRoZSBvcmlnaW5hbCBza2IuICovCiAJCXNrYiA9IGhtcC0+dHhfc2tidWZmW2VudHJ5XTsKIAkJaWYgKHNrYiAhPSAwKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwgCi0JCQkJaG1wLT50eF9yaW5nW2VudHJ5XS5hZGRyLCBza2ItPmxlbiwgCisJCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwKKwkJCQlobXAtPnR4X3JpbmdbZW50cnldLmFkZHIsIHNrYi0+bGVuLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaG1wLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJfQogCQlobXAtPnR4X3JpbmdbZW50cnldLnN0YXR1c19uX2xlbmd0aCA9IDA7Ci0JCWlmIChlbnRyeSA+PSBUWF9SSU5HX1NJWkUtMSkgCisJCWlmIChlbnRyeSA+PSBUWF9SSU5HX1NJWkUtMSkKIAkJCWhtcC0+dHhfcmluZ1tUWF9SSU5HX1NJWkUtMV0uc3RhdHVzX25fbGVuZ3RoIHw9Ci0JCQkJY3B1X3RvX2xlMzIoRGVzY0VuZFJpbmcpOyAgIAorCQkJCWNwdV90b19sZTMyKERlc2NFbmRSaW5nKTsKIAkJaG1wLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJfQogCkBAIC0xMDgyLDcgKzEwODIsNyBAQAogCQlwcmludGsoIlxuIik7CiAJfQogCi0JLyogUmVpbml0IHRoZSBoYXJkd2FyZSBhbmQgbWFrZSBzdXJlIHRoZSBSeCBhbmQgVHggcHJvY2Vzc2VzIAorCS8qIFJlaW5pdCB0aGUgaGFyZHdhcmUgYW5kIG1ha2Ugc3VyZSB0aGUgUnggYW5kIFR4IHByb2Nlc3NlcwogCQlhcmUgdXAgYW5kIHJ1bm5pbmcuCiAJICovCiAJZGV2LT5pZl9wb3J0ID0gMDsKQEAgLTEwOTIsNyArMTA5Miw3IEBACiAJICoJCS1UdXJuIG9mZiBNQUMgcmVjZWl2ZXIKIAkgKgkJLUlzc3VlIFJlc2V0CiAJICovCi0JCisKIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspCiAJCWhtcC0+cnhfcmluZ1tpXS5zdGF0dXNfbl9sZW5ndGggJj0gY3B1X3RvX2xlMzIofkRlc2NPd24pOwogCkBAIC0xMTA2LDExICsxMTA2LDExIEBACiAJCQlobXAtPnR4X3JpbmdbaV0uc3RhdHVzX25fbGVuZ3RoID0gY3B1X3RvX2xlMzIoCiAJCQkJRGVzY0VuZFJpbmcgfAogCQkJCShobXAtPnR4X3JpbmdbaV0uc3RhdHVzX25fbGVuZ3RoICYgMHgwMDAwRkZGRikpOwotCQllbHNlCQorCQllbHNlCiAJCQlobXAtPnR4X3JpbmdbaV0uc3RhdHVzX25fbGVuZ3RoICY9IDB4MDAwMGZmZmY7CiAJCXNrYiA9IGhtcC0+dHhfc2tidWZmW2ldOwogCQlpZiAoc2tiKXsKLQkJCXBjaV91bm1hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LCBobXAtPnR4X3JpbmdbaV0uYWRkciwgCisJCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwgaG1wLT50eF9yaW5nW2ldLmFkZHIsCiAJCQkJc2tiLT5sZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaG1wLT50eF9za2J1ZmZbaV0gPSBOVUxMOwpAQCAtMTExOSwyMCArMTExOSwyMCBAQAogCiAJdWRlbGF5KDYwKTsgLyogU2xlZXAgNjAgdXMganVzdCBmb3Igc2FmZXR5IHNha2UgKi8KIAl3cml0ZXcoMHgwMDAyLCBpb2FkZHIgKyBSeENtZCk7IC8qIFNUT1AgUnggKi8KLQkJCi0Jd3JpdGViKDB4MDEsIGlvYWRkciArIENoaXBSZXNldCk7ICAvKiBSZWluaXQgdGhlIGhhcmR3YXJlICovIAorCisJd3JpdGViKDB4MDEsIGlvYWRkciArIENoaXBSZXNldCk7ICAvKiBSZWluaXQgdGhlIGhhcmR3YXJlICovCiAKIAlobXAtPnR4X2Z1bGwgPSAwOwogCWhtcC0+Y3VyX3J4ID0gaG1wLT5jdXJfdHggPSAwOwogCWhtcC0+ZGlydHlfcnggPSBobXAtPmRpcnR5X3R4ID0gMDsKIAkvKiBSeCBwYWNrZXRzIGFyZSBhbHNvIHByZXN1bWVkIGxvc3Q7IGhvd2V2ZXIsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGEKIAkgKiByaW5nIG9mIGJ1ZmZlcnMgaXMgaW4gdGFjdC4gLUtEVQotCSAqLyAKKwkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspewogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaG1wLT5yeF9za2J1ZmZbaV07CiAKIAkJaWYgKHNrYil7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwgaG1wLT5yeF9yaW5nW2ldLmFkZHIsIAorCQkJcGNpX3VubWFwX3NpbmdsZShobXAtPnBjaV9kZXYsIGhtcC0+cnhfcmluZ1tpXS5hZGRyLAogCQkJCWhtcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaG1wLT5yeF9za2J1ZmZbaV0gPSBOVUxMOwpAQCAtMTE0Niw5ICsxMTQ2LDkgQEAKIAkJCWJyZWFrOwogCQlza2ItPmRldiA9IGRldjsgICAgICAgICAvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkgdGhpcyBkZXZpY2UuICovCiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIDE2IGJ5dGUgYWxpZ24gdGhlIElQIGhlYWRlci4gKi8KLSAgICAgICAgICAgICAgICBobXAtPnJ4X3JpbmdbaV0uYWRkciA9IGNwdV90b19sZVhYKHBjaV9tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwgCisgICAgICAgICAgICAgICAgaG1wLT5yeF9yaW5nW2ldLmFkZHIgPSBjcHVfdG9fbGVYWChwY2lfbWFwX3NpbmdsZShobXAtPnBjaV9kZXYsCiAJCQlza2ItPmRhdGEsIGhtcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpKTsKLQkJaG1wLT5yeF9yaW5nW2ldLnN0YXR1c19uX2xlbmd0aCA9IGNwdV90b19sZTMyKERlc2NPd24gfCAKKwkJaG1wLT5yeF9yaW5nW2ldLnN0YXR1c19uX2xlbmd0aCA9IGNwdV90b19sZTMyKERlc2NPd24gfAogCQkJRGVzY0VuZFBhY2tldCB8IERlc2NJbnRyIHwgKGhtcC0+cnhfYnVmX3N6IC0gMikpOwogCX0KIAlobXAtPmRpcnR5X3J4ID0gKHVuc2lnbmVkIGludCkoaSAtIFJYX1JJTkdfU0laRSk7CkBAIC0xMTg3LDExICsxMTg3LDExIEBACiAjZW5kaWYKIAkvKiBNeSBhdHRlbXB0IGF0IGEgcmVhc29uYWJsZSBjb3JyZWN0aW9uICovCiAJLyogKzI2IGdldHMgdGhlIG1heGltdW0gZXRoZXJuZXQgZW5jYXBzdWxhdGlvbiwgKzcgJiB+NyBiZWNhdXNlIHRoZQotCSAqIGNhcmQgbmVlZHMgcm9vbSB0byBkbyA4IGJ5dGUgYWxpZ25tZW50LCArMiBzbyB3ZSBjYW4gcmVzZXJ2ZSAKLQkgKiB0aGUgZmlyc3QgMiBieXRlcywgYW5kICsxNiBnZXRzIHJvb20gZm9yIHRoZSBzdGF0dXMgd29yZCBmcm9tIHRoZSAKKwkgKiBjYXJkIG5lZWRzIHJvb20gdG8gZG8gOCBieXRlIGFsaWdubWVudCwgKzIgc28gd2UgY2FuIHJlc2VydmUKKwkgKiB0aGUgZmlyc3QgMiBieXRlcywgYW5kICsxNiBnZXRzIHJvb20gZm9yIHRoZSBzdGF0dXMgd29yZCBmcm9tIHRoZQogCSAqIGNhcmQuICAtS0RVCiAJICovCi0JaG1wLT5yeF9idWZfc3ogPSAoZGV2LT5tdHUgPD0gMTQ5MiA/IFBLVF9CVUZfU1ogOiAKKwlobXAtPnJ4X2J1Zl9zeiA9IChkZXYtPm10dSA8PSAxNDkyID8gUEtUX0JVRl9TWiA6CiAJCSgoKGRldi0+bXR1KzI2KzcpICYgfjcpICsgMiArIDE2KSk7CiAKIAkvKiBJbml0aWFsaXplIGFsbCBSeCBkZXNjcmlwdG9ycy4gKi8KQEAgLTEyMDcsMTAgKzEyMDcsMTAgQEAKIAkJCWJyZWFrOwogCQlza2ItPmRldiA9IGRldjsgICAgICAgICAvKiBNYXJrIGFzIGJlaW5nIHVzZWQgYnkgdGhpcyBkZXZpY2UuICovCiAJCXNrYl9yZXNlcnZlKHNrYiwgMik7IC8qIDE2IGJ5dGUgYWxpZ24gdGhlIElQIGhlYWRlci4gKi8KLSAgICAgICAgICAgICAgICBobXAtPnJ4X3JpbmdbaV0uYWRkciA9IGNwdV90b19sZVhYKHBjaV9tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwgCisgICAgICAgICAgICAgICAgaG1wLT5yeF9yaW5nW2ldLmFkZHIgPSBjcHVfdG9fbGVYWChwY2lfbWFwX3NpbmdsZShobXAtPnBjaV9kZXYsCiAJCQlza2ItPmRhdGEsIGhtcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpKTsKIAkJLyogLTIgYmVjYXVzZSBpdCBkb2Vzbid0IFJFQUxMWSBoYXZlIHRoYXQgZmlyc3QgMiBieXRlcyAtS0RVICovCi0JCWhtcC0+cnhfcmluZ1tpXS5zdGF0dXNfbl9sZW5ndGggPSBjcHVfdG9fbGUzMihEZXNjT3duIHwgCisJCWhtcC0+cnhfcmluZ1tpXS5zdGF0dXNfbl9sZW5ndGggPSBjcHVfdG9fbGUzMihEZXNjT3duIHwKIAkJCURlc2NFbmRQYWNrZXQgfCBEZXNjSW50ciB8IChobXAtPnJ4X2J1Zl9zeiAtMikpOwogCX0KIAlobXAtPmRpcnR5X3J4ID0gKHVuc2lnbmVkIGludCkoaSAtIFJYX1JJTkdfU0laRSk7CkBAIC0xMjY3LDcgKzEyNjcsNyBAQAogCXVuc2lnbmVkIGVudHJ5OwogCXUxNiBzdGF0dXM7CiAKLQkvKiBPaywgbm93IG1ha2Ugc3VyZSB0aGF0IHRoZSBxdWV1ZSBoYXMgc3BhY2UgYmVmb3JlIHRyeWluZyB0byAKKwkvKiBPaywgbm93IG1ha2Ugc3VyZSB0aGF0IHRoZSBxdWV1ZSBoYXMgc3BhY2UgYmVmb3JlIHRyeWluZyB0bwogCQlhZGQgYW5vdGhlciBza2J1ZmYuICBpZiB3ZSByZXR1cm4gbm9uLXplcm8gdGhlIHNjaGVkdWxlcgogCQlzaG91bGQgaW50ZXJwcmV0IHRoaXMgYXMgYSBxdWV1ZSBmdWxsIGFuZCByZXF1ZXVlIHRoZSBidWZmZXIKIAkJZm9yIGxhdGVyLgpAQCAtMTI4Miw3ICsxMjgyLDcgQEAKIAkJaWYoICEoc3RhdHVzICYgMHgwMDAxKSB8fCAoc3RhdHVzICYgMHgwMDAyKSkKIAkJCXdyaXRldygweDAwMDEsIGhtcC0+YmFzZSArIFR4Q21kKTsKIAkJcmV0dXJuIDE7Ci0JfSAKKwl9CiAKIAkvKiBDYXV0aW9uOiB0aGUgd3JpdGUgb3JkZXIgaXMgaW1wb3J0YW50IGhlcmUsIHNldCB0aGUgZmllbGQKIAkgICB3aXRoIHRoZSAib3duZXJzaGlwIiBiaXRzIGxhc3QuICovCkBAIC0xMzIyLDE1ICsxMzIyLDE1IEBACiAJfQogI2VuZGlmCiAKLSAgICAgICAgaG1wLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlWFgocGNpX21hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LCAKKyAgICAgICAgaG1wLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlWFgocGNpX21hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LAogCQlza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKSk7Ci0gICAgCisKIAkvKiBIbW1tbSwgY291bGQgcHJvYmFibHkgcHV0IGEgRGVzY0ludHIgb24gdGhlc2UsIGJ1dCB0aGUgd2F5CiAJCXRoZSBkcml2ZXIgaXMgY3VycmVudGx5IGNvZGVkIG1ha2VzIFR4IGludGVycnVwdHMgdW5uZWNlc3NhcnkKIAkJc2luY2UgdGhlIGNsZWFyaW5nIG9mIHRoZSBUeCByaW5nIGlzIGhhbmRsZWQgYnkgdGhlIHN0YXJ0X3htaXQKIAkJcm91dGluZS4gIFRoaXMgb3JnYW5pemF0aW9uIGhlbHBzIG1pdGlnYXRlIHRoZSBpbnRlcnJ1cHRzIGEKIAkJYml0IGFuZCBwcm9iYWJseSByZW5kZXJzIHRoZSBtYXhfdHhfbGF0ZW5jeSBwYXJhbSB1c2VsZXNzLgotCQkKKwogCQlVcGRhdGU6IFB1dHRpbmcgYSBEZXNjSW50ciBiaXQgb24gYWxsIG9mIHRoZSBkZXNjcmlwdG9ycyBhbmQKIAkJbWl0aWdhdGluZyBpbnRlcnJ1cHQgZnJlcXVlbmN5IHdpdGggdGhlIHR4X21pbl9wa3QgcGFyYW1ldGVyLiAtS0RVCiAJKi8KQEAgLTEzNTksNyArMTM1OSw3IEBACiAJICogaGVuY2UsIGFueSBwYWNrZXQgdGhhdCBnb3QgcHV0IG9mZiBiZWNhdXNlIHdlIHdlcmUgaW4gdGhlIHRyYW5zbWl0CiAJICogcm91dGluZSBzaG91bGQgSU1NRURJQVRFTFkgZ2V0IGEgY2hhbmNlIHRvIGJlIHJlLXF1ZXVlZC4gLUtEVQogCSAqLwotCWlmICgoaG1wLT5jdXJfdHggLSBobXAtPmRpcnR5X3R4KSA8IChUWF9SSU5HX1NJWkUgLSA0KSkgCisJaWYgKChobXAtPmN1cl90eCAtIGhtcC0+ZGlydHlfdHgpIDwgKFRYX1JJTkdfU0laRSAtIDQpKQogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7ICAvKiBUeXBpY2FsIHBhdGggKi8KIAllbHNlIHsKIAkJaG1wLT50eF9mdWxsID0gMTsKQEAgLTE0MTIsMjcgKzE0MTIsMjcgQEAKIAkJCS8qIFRoaXMgY29kZSBzaG91bGQgUkFSRUxZIG5lZWQgdG8gZXhlY3V0ZS4gQWZ0ZXIgYWxsLCB0aGlzIGlzCiAJCQkgKiBhIGdpZ2FiaXQgbGluaywgaXQgc2hvdWxkIGNvbnN1bWUgcGFja2V0cyBhcyBmYXN0IGFzIHdlIHB1dAogCQkJICogdGhlbSBpbiBBTkQgd2UgY2xlYXIgdGhlIFR4IHJpbmcgaW4gaGFtYWNoaV9zdGFydF94bWl0KCkuCi0JCQkgKi8gCisJCQkgKi8KIAkJCWlmIChobXAtPnR4X2Z1bGwpewogCQkJCWZvciAoOyBobXAtPmN1cl90eCAtIGhtcC0+ZGlydHlfdHggPiAwOyBobXAtPmRpcnR5X3R4KyspewogCQkJCQlpbnQgZW50cnkgPSBobXAtPmRpcnR5X3R4ICUgVFhfUklOR19TSVpFOwogCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JCQkJCWlmIChobXAtPnR4X3JpbmdbZW50cnldLnN0YXR1c19uX2xlbmd0aCAmIGNwdV90b19sZTMyKERlc2NPd24pKSAKKwkJCQkJaWYgKGhtcC0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzX25fbGVuZ3RoICYgY3B1X3RvX2xlMzIoRGVzY093bikpCiAJCQkJCQlicmVhazsKIAkJCQkJc2tiID0gaG1wLT50eF9za2J1ZmZbZW50cnldOwogCQkJCQkvKiBGcmVlIHRoZSBvcmlnaW5hbCBza2IuICovCiAJCQkJCWlmIChza2IpewotCQkJCQkJcGNpX3VubWFwX3NpbmdsZShobXAtPnBjaV9kZXYsIAotCQkJCQkJCWhtcC0+dHhfcmluZ1tlbnRyeV0uYWRkciwgCisJCQkJCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwKKwkJCQkJCQlobXAtPnR4X3JpbmdbZW50cnldLmFkZHIsCiAJCQkJCQkJc2tiLT5sZW4sCiAJCQkJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCQkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQkJCQkJaG1wLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJCQkJfQogCQkJCQlobXAtPnR4X3JpbmdbZW50cnldLnN0YXR1c19uX2xlbmd0aCA9IDA7Ci0JCQkJCWlmIChlbnRyeSA+PSBUWF9SSU5HX1NJWkUtMSkgIAotCQkJCQkJaG1wLT50eF9yaW5nW1RYX1JJTkdfU0laRS0xXS5zdGF0dXNfbl9sZW5ndGggfD0gCisJCQkJCWlmIChlbnRyeSA+PSBUWF9SSU5HX1NJWkUtMSkKKwkJCQkJCWhtcC0+dHhfcmluZ1tUWF9SSU5HX1NJWkUtMV0uc3RhdHVzX25fbGVuZ3RoIHw9CiAJCQkJCQkJY3B1X3RvX2xlMzIoRGVzY0VuZFJpbmcpOwogCQkJCQlobXAtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQl9CkBAIC0xNDk4LDkgKzE0OTgsOSBAQAogCQlzdHJ1Y3QgaGFtYWNoaV9kZXNjICpkZXNjID0gJihobXAtPnJ4X3JpbmdbZW50cnldKTsKIAkJdTMyIGRlc2Nfc3RhdHVzID0gbGUzMl90b19jcHUoZGVzYy0+c3RhdHVzX25fbGVuZ3RoKTsKIAkJdTE2IGRhdGFfc2l6ZSA9IGRlc2Nfc3RhdHVzOwkvKiBJbXBsaWNpdCB0cnVuY2F0ZSAqLwotCQl1OCAqYnVmX2FkZHI7IAorCQl1OCAqYnVmX2FkZHI7CiAJCXMzMiBmcmFtZV9zdGF0dXM7Ci0JCQorCiAJCWlmIChkZXNjX3N0YXR1cyAmIERlc2NPd24pCiAJCQlicmVhazsKIAkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhtcC0+cGNpX2RldiwKQEAgLTE1NDAsNyArMTU0MCw3IEBACiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCQkJLyogT21pdCBDUkMgKi8KLQkJCXUxNiBwa3RfbGVuID0gKGZyYW1lX3N0YXR1cyAmIDB4MDdmZikgLSA0OwkKKwkJCXUxNiBwa3RfbGVuID0gKGZyYW1lX3N0YXR1cyAmIDB4MDdmZikgLSA0OwogI2lmZGVmIFJYX0NIRUNLU1VNCiAJCQl1MzIgcGZjayA9ICoodTMyICopICZidWZfYWRkcltkYXRhX3NpemUgLSA4XTsKICNlbmRpZgpAQCAtMTU3Niw3ICsxNTc2LDcgQEAKIAkJCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQkvKiBDYWxsIGNvcHkgKyBja3N1bSBpZiBhdmFpbGFibGUuICovCiAjaWYgMSB8fCBVU0VfSVBfQ09QWVNVTQotCQkJCWV0aF9jb3B5X2FuZF9zdW0oc2tiLCAKKwkJCQlldGhfY29weV9hbmRfc3VtKHNrYiwKIAkJCQkJaG1wLT5yeF9za2J1ZmZbZW50cnldLT5kYXRhLCBwa3RfbGVuLCAwKTsKIAkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAjZWxzZQpAQCAtMTU4OCw3ICsxNTg4LDcgQEAKIAkJCQkJCQkgICAgICAgaG1wLT5yeF9idWZfc3osCiAJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQl9IGVsc2UgewotCQkJCXBjaV91bm1hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LCAKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwKIAkJCQkJCSBobXAtPnJ4X3JpbmdbZW50cnldLmFkZHIsCiAJCQkJCQkgaG1wLT5yeF9idWZfc3osIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiX3B1dChza2IgPSBobXAtPnJ4X3NrYnVmZltlbnRyeV0sIHBrdF9sZW4pOwpAQCAtMTYxOSwxOCArMTYxOSwxOCBAQAogCQkJCQkJcF9yID0gKnA7CiAJCQkJCQlwX3IxID0gKihwLTEpOwogCQkJCQkJc3dpdGNoIChpbnYpIHsKLQkJCQkJCQljYXNlIDA6CQorCQkJCQkJCWNhc2UgMDoKIAkJCQkJCQkJY3JjID0gKHBfciAmIDB4ZmZmZikgKyAocF9yID4+IDE2KTsKIAkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJY2FzZSAxOgkKKwkJCQkJCQljYXNlIDE6CiAJCQkJCQkJCWNyYyA9IChwX3IgPj4gMTYpICsgKHBfciAmIDB4ZmZmZikKLQkJCQkJCQkJCSsgKHBfcjEgPj4gMTYgJiAweGZmMDApOyAKKwkJCQkJCQkJCSsgKHBfcjEgPj4gMTYgJiAweGZmMDApOwogCQkJCQkJCQlicmVhazsKLQkJCQkJCQljYXNlIDI6CQotCQkJCQkJCQljcmMgPSBwX3IgKyAocF9yMSA+PiAxNik7IAorCQkJCQkJCWNhc2UgMjoKKwkJCQkJCQkJY3JjID0gcF9yICsgKHBfcjEgPj4gMTYpOwogCQkJCQkJCQlicmVhazsKLQkJCQkJCQljYXNlIDM6CQotCQkJCQkJCQljcmMgPSBwX3IgKyAocF9yMSAmIDB4ZmYwMCkgKyAocF9yMSA+PiAxNik7IAorCQkJCQkJCWNhc2UgMzoKKwkJCQkJCQkJY3JjID0gcF9yICsgKHBfcjEgJiAweGZmMDApICsgKHBfcjEgPj4gMTYpOwogCQkJCQkJCQlicmVhazsKIAkJCQkJCQlkZWZhdWx0OgkvKk5PVFJFQUNIRUQqLyBjcmMgPSAwOwogCQkJCQkJfQpAQCAtMTY1MCw3ICsxNjUwLDcgQEAKIAkJCQkJCSovCiAJCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0hXOwogCQkJCQl9Ci0JCQkJfQkKKwkJCQl9CiAJCQl9CiAjZW5kaWYgIC8qIFJYX0NIRUNLU1VNICovCiAKQEAgLTE2NzUsMTUgKzE2NzUsMTUgQEAKIAkJCQlicmVhazsJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQuICovCiAJCQlza2ItPmRldiA9IGRldjsJCS8qIE1hcmsgYXMgYmVpbmcgdXNlZCBieSB0aGlzIGRldmljZS4gKi8KIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIEFsaWduIElQIG9uIDE2IGJ5dGUgYm91bmRhcmllcyAqLwotICAgICAgICAgICAgICAgIAlkZXNjLT5hZGRyID0gY3B1X3RvX2xlWFgocGNpX21hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LCAKKyAgICAgICAgICAgICAgICAJZGVzYy0+YWRkciA9IGNwdV90b19sZVhYKHBjaV9tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwKIAkJCQlza2ItPmRhdGEsIGhtcC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpKTsKIAkJfQogCQlkZXNjLT5zdGF0dXNfbl9sZW5ndGggPSBjcHVfdG9fbGUzMihobXAtPnJ4X2J1Zl9zeik7CiAJCWlmIChlbnRyeSA+PSBSWF9SSU5HX1NJWkUtMSkKLQkJCWRlc2MtPnN0YXR1c19uX2xlbmd0aCB8PSBjcHVfdG9fbGUzMihEZXNjT3duIHwgCisJCQlkZXNjLT5zdGF0dXNfbl9sZW5ndGggfD0gY3B1X3RvX2xlMzIoRGVzY093biB8CiAJCQkJRGVzY0VuZFBhY2tldCB8IERlc2NFbmRSaW5nIHwgRGVzY0ludHIpOwogCQllbHNlCi0JCQlkZXNjLT5zdGF0dXNfbl9sZW5ndGggfD0gY3B1X3RvX2xlMzIoRGVzY093biB8IAorCQkJZGVzYy0+c3RhdHVzX25fbGVuZ3RoIHw9IGNwdV90b19sZTMyKERlc2NPd24gfAogCQkJCURlc2NFbmRQYWNrZXQgfCBEZXNjSW50cik7CiAJfQogCkBAIC0xNzk0LDggKzE3OTQsOCBAQAogCQlobXAtPnJ4X3JpbmdbaV0uc3RhdHVzX25fbGVuZ3RoID0gMDsKIAkJaG1wLT5yeF9yaW5nW2ldLmFkZHIgPSAweEJBREYwMEQwOyAvKiBBbiBpbnZhbGlkIGFkZHJlc3MuICovCiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoaG1wLT5wY2lfZGV2LCAKLQkJCQlobXAtPnJ4X3JpbmdbaV0uYWRkciwgaG1wLT5yeF9idWZfc3osIAorCQkJcGNpX3VubWFwX3NpbmdsZShobXAtPnBjaV9kZXYsCisJCQkJaG1wLT5yeF9yaW5nW2ldLmFkZHIsIGhtcC0+cnhfYnVmX3N6LAogCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlobXAtPnJ4X3NrYnVmZltpXSA9IE5VTEw7CkBAIC0xODA0LDggKzE4MDQsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykgewogCQlza2IgPSBobXAtPnR4X3NrYnVmZltpXTsKIAkJaWYgKHNrYikgewotCQkJcGNpX3VubWFwX3NpbmdsZShobXAtPnBjaV9kZXYsIAotCQkJCWhtcC0+dHhfcmluZ1tpXS5hZGRyLCBza2ItPmxlbiwgCisJCQlwY2lfdW5tYXBfc2luZ2xlKGhtcC0+cGNpX2RldiwKKwkJCQlobXAtPnR4X3JpbmdbaV0uYWRkciwgc2tiLT5sZW4sCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlobXAtPnR4X3NrYnVmZltpXSA9IE5VTEw7CkBAIC0xODI5LDcgKzE4MjksNyBAQAogICAgICAgICAgICBhY2NvcmRpbmcgdG8gaWZjb25maWcuICBJdCBkb2VzIGdldCBpbmNyZW1lbnRlZCBpbiBoYW1hY2hpX3R4KCksCiAgICAgICAgICAgIHNvIEkgdGhpbmsgSSdsbCBjb21tZW50IGl0IG91dCBoZXJlIGFuZCBzZWUgaWYgYmV0dGVyIHRoaW5ncwogICAgICAgICAgICBoYXBwZW4uCi0gICAgICAgICovIAorICAgICAgICAqLwogCS8qIGhtcC0+c3RhdHMudHhfcGFja2V0cwk9IHJlYWRsKGlvYWRkciArIDB4MDAwKTsgKi8KIAogCWhtcC0+c3RhdHMucnhfYnl0ZXMgPSByZWFkbChpb2FkZHIgKyAweDMzMCk7IC8qIFRvdGFsIFVuaStCcmQrTXVsdGkgKi8KQEAgLTE4NTEsOCArMTg1MSw2IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBobXAtPmJhc2U7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQl3cml0ZXcoMHgwMDBGLCBpb2FkZHIgKyBBZGRyTW9kZSk7CiAJfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDYzKSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwpAQCAtMTkyMSw3ICsxOTE5LDcgQEAKIAlyZXR1cm4gbWlpX2xpbmtfb2soJm5wLT5taWlfaWYpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wcyA9IHsKIAkuYmVnaW4gPSBjaGVja19pZl9ydW5uaW5nLAogCS5nZXRfZHJ2aW5mbyA9IGhhbWFjaGlfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IGhhbWFjaGlfZ2V0X3NldHRpbmdzLApAQCAtMTkzMCw3ICsxOTI4LDcgQEAKIAkuZ2V0X2xpbmsgPSBoYW1hY2hpX2dldF9saW5rLAogfTsKIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wc19ub19taWkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzX25vX21paSA9IHsKIAkuYmVnaW4gPSBjaGVja19pZl9ydW5uaW5nLAogCS5nZXRfZHJ2aW5mbyA9IGhhbWFjaGlfZ2V0X2RydmluZm8sCiB9OwpAQCAtMTk3OCw5ICsxOTc2LDkgQEAKIAlpZiAoZGV2KSB7CiAJCXN0cnVjdCBoYW1hY2hpX3ByaXZhdGUgKmhtcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9UT1RBTF9TSVpFLCBobXAtPnJ4X3JpbmcsIAorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFJYX1RPVEFMX1NJWkUsIGhtcC0+cnhfcmluZywKIAkJCWhtcC0+cnhfcmluZ19kbWEpOwotCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFRYX1RPVEFMX1NJWkUsIGhtcC0+dHhfcmluZywgCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfVE9UQUxfU0laRSwgaG1wLT50eF9yaW5nLAogCQkJaG1wLT50eF9yaW5nX2RtYSk7CiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCWlvdW5tYXAoaG1wLT5iYXNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2hwLXBsdXMuYyBiL2RyaXZlcnMvbmV0L2hwLXBsdXMuYwppbmRleCBlMjZhM2U0Li42YWJjZmQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocC1wbHVzLmMKKysrIGIvZHJpdmVycy9uZXQvaHAtcGx1cy5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIHN0YXRpYyB2b2lkIGhwcF9pb19nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwKIAkJCQkJCSAgaW50IHJpbmdfcGFnZSk7CiAKLQwKKwogLyoJUHJvYmUgYSBsaXN0IG9mIGFkZHJlc3NlcyBmb3IgYW4gSFAgTEFOKyBhZGFwdG9yLgogCVRoaXMgcm91dGluZSBpcyBhbG1vc3QgYm9pbGVycGxhdGUuICovCiAKQEAgLTQzMCw3ICs0MzAsNyBAQAogCXJldHVybjsKIH0KIAotDAorCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIE1BWF9IUFBfQ0FSRFMJNAkvKiBNYXggbnVtYmVyIG9mIEhQUCBjYXJkcyBwZXIgbW9kdWxlICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmRldl9ocHBbTUFYX0hQUF9DQVJEU107CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocC5jIGIvZHJpdmVycy9uZXQvaHAuYwppbmRleCA1NTFhNzFiLi4yOTQ3MDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwLmMKQEAgLTc1LDcgKzc1LDcgQEAKIC8qIE15IGRlZmF1bHQgaXMgSVJRNQkgICAgICAgICAgICAgMCAgMSAgMiAgMyAgNCAgNSAgNiAgNyAgOCAgOSAxMCAxMSAqLwogc3RhdGljIGNoYXIgaXJxbWFwWzE2XSBfX2luaXRkYXRhPSB7IDAsIDAsIDQsIDYsIDgsMTAsIDAsMTQsIDAsIDQsIDIsMTIsMCwwLDAsMH07CiAKLQwKKwogLyoJUHJvYmUgZm9yIGFuIEhQIExBTiBhZGFwdG9yLgogCUFsc28gaW5pdGlhbGl6ZSB0aGUgY2FyZCBhbmQgZmlsbCBpbiBTVEFUSU9OX0FERFIgd2l0aCB0aGUgc3RhdGlvbgogCWFkZHJlc3MuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCBlN2Q5YmYzLi4wM2IzZGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTEsMjQgKzEsMjQgQEAKIC8qCi0qKiBocDEwMC5jIAorKiogaHAxMDAuYwogKiogSFAgQ0FTQ0FERSBBcmNoaXRlY3R1cmUgRHJpdmVyIGZvciAxMDBWRy1BbnlMYW4gTmV0d29yayBBZGFwdGVycwogKioKICoqICRJZDogaHAxMDAuYyx2IDEuNTggMjAwMS8wOS8yNCAxODowMzowMSBwZXJleCBFeHAgcGVyZXggJAogKioKICoqIEJhc2VkIG9uIHRoZSBIUDEwMCBkcml2ZXIgd3JpdHRlbiBieSBKYXJvc2xhdiBLeXNlbGEgPHBlcmV4QGpjdS5jej4KLSoqIEV4dGVuZGVkIGZvciBuZXcgYnVzbWFzdGVyIGNhcGFibGUgY2hpcHNldHMgYnkgCisqKiBFeHRlbmRlZCBmb3IgbmV3IGJ1c21hc3RlciBjYXBhYmxlIGNoaXBzZXRzIGJ5CiAqKiBTaWVnZnJpZWQgIkZyaWVkZXIiIExvZWZmbGVyIChkZzFzZWspIDxmbG9lZmZAbWF0aGVtYXRpay51bmktc3R1dHRnYXJ0LmRlPgogKioKICoqIE1haW50YWluZWQgYnk6IEphcm9zbGF2IEt5c2VsYSA8cGVyZXhAc3VzZS5jej4KLSoqIAorKioKICoqIFRoaXMgZHJpdmVyIGhhcyBvbmx5IGJlZW4gdGVzdGVkIHdpdGgKICoqIC0tIEhQIEoyNTg1QiAxMC8xMDAgTWJpdC9zIFBDSSBCdXNtYXN0ZXIKLSoqIC0tIEhQIEoyNTg1QSAxMC8xMDAgTWJpdC9zIFBDSSAKKyoqIC0tIEhQIEoyNTg1QSAxMC8xMDAgTWJpdC9zIFBDSQogKiogLS0gSFAgSjI5NzBBIDEwIE1iaXQvcyBQQ0kgQ29tYm8gMTBiYXNlLVQvQk5DCiAqKiAtLSBIUCBKMjk3M0EgMTAgTWJpdC9zIFBDSSAxMGJhc2UtVAogKiogLS0gSFAgSjI1NzMgIDEwLzEwMCBJU0EKICoqIC0tIENvbXBleCBSZWFkeUxpbmsgRU5FVDEwMC1WRzQgIDEwLzEwMCBNYml0L3MgUENJIC8gRUlTQQogKiogLS0gQ29tcGV4IEZyZWVkb21MaW5lIDEwMC9WRyAgMTAvMTAwIE1iaXQvcyBJU0EgLyBFSVNBIC8gUENJCi0qKiAKKyoqCiAqKiBidXQgaXQgc2hvdWxkIGFsc28gd29yayB3aXRoIHRoZSBvdGhlciBDQVNDQURFIGJhc2VkIGFkYXB0ZXJzLgogKioKICoqIFRPRE86CkBAIC02NSw3ICs2NSw3IEBACiAqKiAgIC0gdGltaW5nIGNoYW5nZXMgaW4geG1pdCByb3V0aW5lcywgcmVsb2dpbiB0byAxMDBWRyBodWIgYWRkZWQgd2hlbgogKiogICAgIGRyaXZlciBkb2VzIHJlc2V0CiAqKiAgIC0gaW5jbHVkZWQgZml4IGZvciBDb21wZXggRnJlZWRvbUxpbmUgUENJIGFkYXB0ZXIKLSoqIAorKioKICoqIDEuNTQgLT4gMS41NQogKiogICAtIGZpeGVkIGJhZCBpbml0aWFsaXphdGlvbiBpbiBpbml0X21vZHVsZQogKiogICAtIGFkZGVkIENvbXBleCBGcmVlZG9tTGluZSBhZGFwdGVyCkBAIC03MywxMCArNzMsMTAgQEAKICoqCiAqKiAxLjUzIC0+IDEuNTQKICoqICAgLSBhZGRlZCBoYXJkd2FyZSBtdWx0aWNhc3QgZmlsdGVyIHN1cHBvcnQgKGRvZXNuJ3Qgd29yaykKLSoqICAgLSBsaXR0bGUgY2hhbmdlcyBpbiBocDEwMF9zZW5zZV9sYW4gcm91dGluZSAKKyoqICAgLSBsaXR0bGUgY2hhbmdlcyBpbiBocDEwMF9zZW5zZV9sYW4gcm91dGluZQogKiogICAgIC0gYWRkZWQgc3VwcG9ydCBmb3IgQ29heCBhbmQgQVVJIChKMjk3MCkKICoqICAgLSBmaXggZm9yIG11bHRpcGxlIGNhcmRzIGFuZCBocDEwMF9tb2RlIHBhcmFtZXRlciAoaW5zbW9kKQotKiogICAtIGZpeCBmb3Igc2hhcmVkIElSUSAKKyoqICAgLSBmaXggZm9yIHNoYXJlZCBJUlEKICoqCiAqKiAxLjUyIC0+IDEuNTMKICoqICAgLSBmaXhlZCBidWcgaW4gbXVsdGljYXN0IHN1cHBvcnQKQEAgLTExMSw3ICsxMTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogZm9yIENPTkZJR19QQ0kgKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KQEAgLTI4Nyw3ICsyODYsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVfaW50IHBkbF9tYXBfZGF0YShzdHJ1Y3QgaHAxMDBfcHJpdmF0ZSAqbHAsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIHBjaV9tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBkYXRhLCAKKwlyZXR1cm4gcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsIGRhdGEsCiAJCQkgICAgICBNQVhfRVRIRVJfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIH0KIApAQCAtMzU0LDcgKzM1Myw3IEBACiAJCWdvdG8gZXJyOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHAxMDBfaXNhX3RibCk7IGkrKykgewotCQlpZiAoIXN0cmNtcChocDEwMF9pc2FfdGJsW2ldLCBzaWcpKSAKKwkJaWYgKCFzdHJjbXAoaHAxMDBfaXNhX3RibFtpXSwgc2lnKSkKIAkJCWJyZWFrOwogCiAJfQpAQCAtMzc0LDExICszNzMsMTEgQEAKIHsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAotCS8qIFByb2JlIGZvciBhIHNwZWNpZmljIElTQSBhZGRyZXNzICovCQkKKwkvKiBQcm9iZSBmb3IgYSBzcGVjaWZpYyBJU0EgYWRkcmVzcyAqLwogCWlmIChhZGRyID4gMHhmZiAmJiBhZGRyIDwgMHg0MDApCiAJCWVyciA9IGhwMTAwX2lzYV9wcm9iZTEoZGV2LCBhZGRyKTsKIAotCWVsc2UgaWYgKGFkZHIgIT0gMCkgCisJZWxzZSBpZiAoYWRkciAhPSAwKQogCQllcnIgPSAtRU5YSU87CiAKIAllbHNlIHsKQEAgLTQ0OSw3ICs0NDgsNyBAQAogCWlmICghcmVxdWVzdF9yZWdpb24oaW9hZGRyLCBIUDEwMF9SRUdJT05fU0laRSwgImhwMTAwIikpCiAJCWdvdG8gb3V0MTsKIAotCWlmIChocDEwMF9pbncoSFdfSUQpICE9IEhQMTAwX0hXX0lEX0NBU0NBREUpIAorCWlmIChocDEwMF9pbncoSFdfSUQpICE9IEhQMTAwX0hXX0lEX0NBU0NBREUpCiAJCWdvdG8gb3V0MjsKIAogCWNoaXAgPSBocDEwMF9pbncoUEFHSU5HKSAmIEhQMTAwX0NISVBJRF9NQVNLOwpAQCAtNDkyLDcgKzQ5MSw3IEBACiAJICogVXNlIHRoZSB2YXJpYWJsZSAiaHAxMDBfbW9kZSIgdXBvbiBpbnNtb2Qgb3IgYXMga2VybmVsIHBhcmFtZXRlciB0bwogCSAqIGZvcmNlIGRyaXZlciBtb2RlczoKIAkgKiBocDEwMF9tb2RlPTEgLT4gZGVmYXVsdCwgdXNlIGJ1c21hc3RlciBtb2RlIGlmIGNvbmZpZ3VyZWQuCi0JICogaHAxMDBfbW9kZT0yIC0+IGVuYWJsZSBzaGFyZWQgbWVtb3J5IG1vZGUgCisJICogaHAxMDBfbW9kZT0yIC0+IGVuYWJsZSBzaGFyZWQgbWVtb3J5IG1vZGUKIAkgKiBocDEwMF9tb2RlPTMgLT4gZm9yY2UgdXNlIG9mIGkvbyBtYXBwZWQgbW9kZS4KIAkgKiBocDEwMF9tb2RlPTQgLT4gc2FtZSBhcyAxLCBidXQgcmUtc2V0IHRoZSBlbmFibGUgYml0IG9uIHRoZSBjYXJkLgogCSAqLwpAQCAtNjkwLDkgKzY4OSw5IEBACiAJaHAxMDBfY2xlYXJfc3RhdHMobHAsIGlvYWRkcik7CiAKIAkvKiBJZiBidXNtYXN0ZXIgbW9kZSBpcyB3YW50ZWQsIGEgZG1hLWNhcGFibGUgbWVtb3J5IGFyZWEgaXMgbmVlZGVkIGZvcgotCSAqIHRoZSByeCBhbmQgdHggUERMcyAKKwkgKiB0aGUgcnggYW5kIHR4IFBETHMKIAkgKiBQQ0kgY2FyZHMgY2FuIGFjY2VzcyB0aGUgd2hvbGUgUEMgbWVtb3J5LiBUaGVyZWZvcmUgR0ZQX0RNQSBpcyBub3QKLQkgKiBuZWVkZWQgZm9yIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBtZW1vcnkgYXJlYS4gCisJICogbmVlZGVkIGZvciB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgbWVtb3J5IGFyZWEuCiAJICovCiAKIAkvKiBUT0RPOiBXZSBkbyBub3QgbmVlZCB0aGlzIHdpdGggb2xkIGNhcmRzLCB3aGVyZSBQRExzIGFyZSBzdG9yZWQKQEAgLTcxOSw3ICs3MTgsNyBAQAogCX0KIAogCS8qIEluaXRpYWxpc2UgdGhlIGNhcmQuICovCi0JLyogKEknbSBub3QgcmVhbGx5IHN1cmUgaWYgaXQncyBhIGdvb2QgaWRlYSB0byBkbyB0aGlzIGR1cmluZyBwcm9iaW5nLCBidXQgCisJLyogKEknbSBub3QgcmVhbGx5IHN1cmUgaWYgaXQncyBhIGdvb2QgaWRlYSB0byBkbyB0aGlzIGR1cmluZyBwcm9iaW5nLCBidXQKIAkgKiBsaWtlIHRoaXMgaXQncyBhc3N1cmVkIHRoYXQgdGhlIGxhbiBjb25uZWN0aW9uIHR5cGUgY2FuIGJlIHNlbnNlZAogCSAqIGNvcnJlY3RseSkKIAkgKi8KQEAgLTc3OSw4ICs3NzgsOCBAQAogCXJldHVybiAwOwogb3V0MzoKIAlpZiAobG9jYWxfbW9kZSA9PSAxKQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LCBNQVhfUklOR1NJWkUgKyAweDBmLCAKLQkJCQkgICAgbHAtPnBhZ2VfdmFkZHJfYWxnbiwgCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsIE1BWF9SSU5HU0laRSArIDB4MGYsCisJCQkJICAgIGxwLT5wYWdlX3ZhZGRyX2FsZ24sCiAJCQkJICAgIHZpcnRfdG9fd2hhdGV2ZXIoZGV2LCBscC0+cGFnZV92YWRkcl9hbGduKSk7CiAJaWYgKG1lbV9wdHJfdmlydCkKIAkJaW91bm1hcChtZW1fcHRyX3ZpcnQpOwpAQCAtODYxLDcgKzg2MCw3IEBACiAJLyogTmV4dCBjb21lcyBjb2RlIGZyb20gbW11aW5pdCBwcm9jZWR1cmUgb2YgU0NPIEJNIGRyaXZlciB3aGljaCBpcwogCSAqIGNhbGxlZCBmcm9tIEhXY29uZmlndXJlIGluIHRoZSBTQ08gZHJpdmVyLiAgKi8KIAotCS8qIEluaXRpYWxpc2UgTU1VLCBldmVudHVhbGx5IHN3aXRjaCBvbiBCdXNtYXN0ZXIgTW9kZSwgaW5pdGlhbGlzZSAKKwkvKiBJbml0aWFsaXNlIE1NVSwgZXZlbnR1YWxseSBzd2l0Y2ggb24gQnVzbWFzdGVyIE1vZGUsIGluaXRpYWxpc2UKIAkgKiBtdWx0aWNhc3QgZmlsdGVyLi4uCiAJICovCiAJaHAxMDBfbW11aW5pdChkZXYpOwpAQCAtODc5LDExICs4NzgsMTEgQEAKIAkJaHAxMDBfbG9naW5fdG9fdmdfaHViKGRldiwgMCk7CS8qIHJlbG9naW4gKi8KIAogfQotDAogCi0vKiAKKworLyoKICAqIG1tdWluaXQgLSBSZWluaXRpYWxpc2UgQ2FzY2FkZSBNTVUgYW5kIE1BQyBzZXR0aW5ncy4KLSAqIE5vdGU6IE11c3QgYWxyZWFkeSBiZSBpbiByZXNldCBhbmQgbGVhdmVzIGNhcmQgaW4gcmVzZXQuIAorICogTm90ZTogTXVzdCBhbHJlYWR5IGJlIGluIHJlc2V0IGFuZCBsZWF2ZXMgY2FyZCBpbiByZXNldC4KICAqLwogc3RhdGljIHZvaWQgaHAxMDBfbW11aW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtOTA5LDcgKzkwOCw3IEBACiAJaHAxMDBfb3V0dygweGZmZmYsIElSUV9TVEFUVVMpOwkvKiBhY2sgSVJRICovCiAKIAkvKgotCSAqIEVuYWJsZSBIYXJkd2FyZSAKKwkgKiBFbmFibGUgSGFyZHdhcmUKIAkgKiAtIENsZWFyIERlYnVnIEVuLCBSeCBIZHIgUGlwZSwgRUUgRW4sIEkvTyBFbiwgRmFrZSBJbnQgYW5kIEludHIgRW4KIAkgKiAtIFNldCBUcmktU3RhdGUgSW50LCBCdXMgTWFzdGVyIFJkL1dyLCBhbmQgTWVtIE1hcCBEaXNhYmxlCiAJICogLSBDbGVhciBQcmlvcml0eSwgQWR2YW5jZSBQa3QgYW5kIFhtaXQgQ21kCkBAIC05ODQsNyArOTgzLDcgQEAKIAkJCSAqIDQgYnl0ZXMgZm9yIGhlYWRlcikuIFdlIHdpbGwgbGVhdmUgTlVNX1JYUERMUyAqIDUwOCAocm91bmRlZAogCQkJICogdG8gdGhlIG5leHQgaGlnaGVyIDFrIGJvdW5kYXJ5KSBieXRlcyBmb3IgdGhlIHJ4LXBkbCdzCiAJCQkgKiBOb3RlOiBGb3Igbm9uLWV0ciBjaGlwcyB0aGUgdHJhbnNtaXQgc3RvcCByZWdpc3RlciBtdXN0IGJlCi0JCQkgKiBwcm9ncmFtbWVkIG9uIGEgMWsgYm91bmRhcnksIGkuZS4gYml0cyA5OjAgbXVzdCBiZSB6ZXJvLiAKKwkJCSAqIHByb2dyYW1tZWQgb24gYSAxayBib3VuZGFyeSwgaS5lLiBiaXRzIDk6MCBtdXN0IGJlIHplcm8uCiAJCQkgKi8KIAkJCXBkbF9zdG9wID0gbHAtPm1lbW9yeV9zaXplOwogCQkJeG1pdF9zdG9wID0gKHBkbF9zdG9wIC0gNTA4ICogKE1BWF9SWF9QREwpIC0gMTYpICYgfigweDAzZmYpOwpAQCAtMTEzMiwxMCArMTEzMSwxMCBAQAogCiAJcmV0dXJuIDA7CiB9Ci0MCisKIAogLyoKLSAqIENvbmZpZ3VyZSB0aGUgUERMIFJ4IHJpbmdzIGFuZCBMQU4gCisgKiBDb25maWd1cmUgdGhlIFBETCBSeCByaW5ncyBhbmQgTEFOCiAgKi8KIHN0YXRpYyB2b2lkIGhwMTAwX2luaXRfcGRscyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTE4Myw3ICsxMTgyLDcgQEAKIAkJfQogCX0KIH0KLQwKKwogCiAvKiBUaGVzZSBmdW5jdGlvbnMgImZvcm1hdCIgdGhlIGVudHJpZXMgaW4gdGhlIHBkbCBzdHJ1Y3R1cmUgICAqLwogLyogVGhleSByZXR1cm4gaG93IG11Y2ggbWVtb3J5IHRoZSBmcmFnbWVudHMgbmVlZC4gICAgICAgICAgICAqLwpAQCAtMTIwMSwxMCArMTIwMCwxMCBAQAogCXJpbmdwdHItPnBkbF9wYWRkciA9IHZpcnRfdG9fd2hhdGV2ZXIoZGV2LCBwZGxwdHIgKyAxKTsKIAlyaW5ncHRyLT5za2IgPSAodm9pZCAqKSBOVUxMOwogCi0JLyogCisJLyoKIAkgKiBXcml0ZSBhZGRyZXNzIGFuZCBsZW5ndGggb2YgZmlyc3QgUERMIEZyYWdtZW50ICh3aGljaCBpcyB1c2VkIGZvcgogCSAqIHN0b3JpbmcgdGhlIFJYLUhlYWRlcgotCSAqIFdlIHVzZSB0aGUgNCBieXRlcyBfYmVmb3JlXyB0aGUgUERIIGluIHRoZSBwZGwgbWVtb3J5IGFyZWEgdG8gCisJICogV2UgdXNlIHRoZSA0IGJ5dGVzIF9iZWZvcmVfIHRoZSBQREggaW4gdGhlIHBkbCBtZW1vcnkgYXJlYSB0bwogCSAqIHN0b3JlIHRoaXMgaW5mb3JtYXRpb24uIChQREggaXMgYXQgb2Zmc2V0IDB4MDQpCiAJICovCiAJLyogTm90ZSB0aGF0IHBkbHB0cisxIGFuZCBub3QgcGRscHRyIGlzIHRoZSBwb2ludGVyIHRvIHRoZSBQREggKi8KQEAgLTEyMzEsOSArMTIzMCw5IEBACiB9CiAKIC8qCi0gKiBocDEwMF9idWlsZF9yeF9wZGwgYWxsb2NhdGVzIGFuIHNrYl9idWZmIG9mIG1heGltdW0gc2l6ZSBwbHVzIHR3byBieXRlcyAKKyAqIGhwMTAwX2J1aWxkX3J4X3BkbCBhbGxvY2F0ZXMgYW4gc2tiX2J1ZmYgb2YgbWF4aW11bSBzaXplIHBsdXMgdHdvIGJ5dGVzCiAgKiBmb3IgcG9zc2libGUgb2RkIHdvcmQgYWxpZ25tZW50IHJvdW5kaW5nIHVwIHRvIG5leHQgZHdvcmQgYW5kIHNldCBQREwKLSAqIGFkZHJlc3MgZm9yIGZyYWdtZW50IzIgCisgKiBhZGRyZXNzIGZvciBmcmFnbWVudCMyCiAgKiBSZXR1cm5zOiAwIGlmIHVuYWJsZSB0byBhbGxvY2F0ZSBza2JfYnVmZgogICogICAgICAgICAgMSBpZiBzdWNjZXNzZnVsCiAgKi8KQEAgLTEyNTMsMTMgKzEyNTIsMTMgQEAKICNlbmRpZgogCiAJLyogQWxsb2NhdGUgc2tiIGJ1ZmZlciBvZiBtYXhpbXVtIHNpemUgKi8KLQkvKiBOb3RlOiBUaGlzIGRlcGVuZHMgb24gdGhlIGFsbG9jX3NrYiBmdW5jdGlvbnMgYWxsb2NhdGluZyBtb3JlIAorCS8qIE5vdGU6IFRoaXMgZGVwZW5kcyBvbiB0aGUgYWxsb2Nfc2tiIGZ1bmN0aW9ucyBhbGxvY2F0aW5nIG1vcmUKIAkgKiBzcGFjZSB0aGFuIHJlcXVlc3RlZCwgaS5lLiBhbGlnbmluZyB0byAxNmJ5dGVzICovCiAKIAlyaW5ncHRyLT5za2IgPSBkZXZfYWxsb2Nfc2tiKCgoTUFYX0VUSEVSX1NJWkUgKyAyICsgMykgLyA0KSAqIDQpOwogCiAJaWYgKE5VTEwgIT0gcmluZ3B0ci0+c2tiKSB7Ci0JCS8qIAorCQkvKgogCQkgKiBSZXNlcnZlIDIgYnl0ZXMgYXQgdGhlIGhlYWQgb2YgdGhlIGJ1ZmZlciB0byBsYW5kIHRoZSBJUCBoZWFkZXIKIAkJICogb24gYSBsb25nIHdvcmQgYm91bmRhcnkgKEFjY29yZGluZyB0byB0aGUgTmV0d29yayBEcml2ZXIgc2VjdGlvbgogCQkgKiBpbiB0aGUgTGludXggS0hHLCB0aGlzIHNob3VsZCBoZWxwIHRvIGluY3JlYXNlIHBlcmZvcm1hbmNlLikKQEAgLTEyNzEsMTAgKzEyNzAsMTAgQEAKIAogCQkvKiByaW5ncHRyLT5wZGwgcG9pbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIFBETCwgaS5lLiB0aGUgUERIICovCiAJCS8qIE5vdGU6IDFzdCBGcmFnbWVudCBpcyB1c2VkIGZvciB0aGUgNCBieXRlIHBhY2tldCBzdGF0dXMKLQkJICogKHJlY2VpdmUgaGVhZGVyKS4gSXRzIFBETCBlbnRyaWVzIGFyZSBzZXQgdXAgYnkgaW5pdF9yeHBkbC4gU28gCisJCSAqIChyZWNlaXZlIGhlYWRlcikuIEl0cyBQREwgZW50cmllcyBhcmUgc2V0IHVwIGJ5IGluaXRfcnhwZGwuIFNvCiAJCSAqIGhlcmUgd2Ugb25seSBoYXZlIHRvIHNldCB1cCB0aGUgUERMIGZyYWdtZW50IGVudHJpZXMgZm9yIHRoZSBkYXRhCi0JCSAqIHBhcnQuIFRob3NlIDQgYnl0ZXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIERNQSBtZW1vcnkgcmVnaW9uIAotCQkgKiBkaXJlY3RseSBiZWZvcmUgdGhlIFBETC4gCisJCSAqIHBhcnQuIFRob3NlIDQgYnl0ZXMgd2lsbCBiZSBzdG9yZWQgaW4gdGhlIERNQSBtZW1vcnkgcmVnaW9uCisJCSAqIGRpcmVjdGx5IGJlZm9yZSB0aGUgUERMLgogCQkgKi8KICNpZmRlZiBIUDEwMF9ERUJVR19CTQogCQlwcmludGsoImhwMTAwOiAlczogYnVpbGRfcnhfcGRsOiBQREhAMHgleCwgc2tiLT5kYXRhIChsZW4gJWQpIGF0IDB4JXhcbiIsCkBAIC0xMjg2LDcgKzEyODUsNyBAQAogCQkvKiBDb252ZXJzaW9uIHRvIG5ldyBQQ0kgQVBJIDogbWFwIHNrYnVmIGRhdGEgdG8gUENJIGJ1cy4KIAkJICogRG9jIHNheXMgaXQncyBPSyBmb3IgRUlTQSBhcyB3ZWxsIC0gSmVhbiBJSSAqLwogCQlyaW5ncHRyLT5wZGxbMF0gPSAweDAwMDIwMDAwOwkvKiBXcml0ZSBQREggKi8KLQkJcmluZ3B0ci0+cGRsWzNdID0gcGRsX21hcF9kYXRhKG5ldGRldl9wcml2KGRldiksIAorCQlyaW5ncHRyLT5wZGxbM10gPSBwZGxfbWFwX2RhdGEobmV0ZGV2X3ByaXYoZGV2KSwKIAkJCQkJICAgICAgIHJpbmdwdHItPnNrYi0+ZGF0YSk7CiAJCXJpbmdwdHItPnBkbFs0XSA9IE1BWF9FVEhFUl9TSVpFOwkvKiBMZW5ndGggb2YgRGF0YSAqLwogCkBAIC0xNDA3LDcgKzE0MDYsNyBAQAogCQkJfQogCQl9IGVsc2UgewkvKiBTaGFzdGEgb3IgUmFpbmllciBTaHV0ZG93bi9SZXNldCAqLwogCQkJLyogVG8gZW5zdXJlIGFsbCBidXMgbWFzdGVyIGlubG9hZGluZyBhY3Rpdml0eSBoYXMgY2Vhc2VkLAotCQkJICogd2FpdCBmb3Igbm8gUnggUERBcyBvciBubyBSeCBwYWNrZXRzIG9uIGNhcmQuIAorCQkJICogd2FpdCBmb3Igbm8gUnggUERBcyBvciBubyBSeCBwYWNrZXRzIG9uIGNhcmQuCiAJCQkgKi8KIAkJCWhwMTAwX3BhZ2UoUEVSRk9STUFOQ0UpOwogCQkJLyogMTAwIG1zIHRpbWVvdXQgKi8KQEAgLTE0MjMsNyArMTQyMiw3IEBACiAKIAkJCS8qIFRvIGVuc3VyZSBhbGwgYnVzIG1hc3RlciBvdXRsb2FkaW5nIGFjdGl2aXR5IGhhcyBjZWFzZWQsCiAJCQkgKiB3YWl0IHVudGlsIHRoZSBUeCBQREEgY291bnQgZ29lcyB0byB6ZXJvIG9yIG5vIG1vcmUgVHggc3BhY2UKLQkJCSAqIGF2YWlsYWJsZSBpbiB0aGUgVHggcmVnaW9uIG9mIHRoZSBjYXJkLiAKKwkJCSAqIGF2YWlsYWJsZSBpbiB0aGUgVHggcmVnaW9uIG9mIHRoZSBjYXJkLgogCQkJICovCiAJCQkvKiAxMDAgbXMgdGltZW91dCAqLwogCQkJZm9yICh0aW1lID0gMDsgdGltZSA8IDEwMDAwOyB0aW1lKyspIHsKQEAgLTE0NjIsNyArMTQ2MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIAorLyoKICAqICB0cmFuc21pdCBmdW5jdGlvbnMKICAqLwogCkBAIC0xNDg2LDcgKzE0ODUsNyBAQAogCiAJaWYgKHNrYi0+bGVuIDw9IDApCiAJCXJldHVybiAwOwotCQkKKwogCWlmIChscC0+Y2hpcCA9PSBIUDEwMF9DSElQSURfU0hBU1RBICYmIHNrYl9wYWR0byhza2IsIEVUSF9aTEVOKSkKIAkJcmV0dXJuIDA7CiAKQEAgLTE1NzYsMTQgKzE1NzUsMTQgQEAKIAogCXJldHVybiAwOwogfQotDAorCiAKIC8qIGNsZWFuX3R4cmluZyBjaGVja3MgaWYgcGFja2V0cyBoYXZlIGJlZW4gc2VudCBieSB0aGUgY2FyZCBieSByZWFkaW5nCiAgKiB0aGUgVFhfUERMIHJlZ2lzdGVyIGZyb20gdGhlIHBlcmZvcm1hbmNlIHBhZ2UgYW5kIGNvbXBhcmluZyBpdCB0byB0aGUKICAqIG51bWJlciBvZiBjb21taXRlZCBwYWNrZXRzLiBJdCB0aGVuIGZyZWVzIHRoZSBza2IncyBvZiB0aGUgcGFja2V0cyB0aGF0CiAgKiBvYnZpb3VzbHkgaGF2ZSBiZWVuIHNlbnQgdG8gdGhlIG5ldHdvcmsuCiAgKgotICogTmVlZHMgdGhlIFBFUkZPUk1BTkNFIHBhZ2Ugc2VsZWN0ZWQuIAorICogTmVlZHMgdGhlIFBFUkZPUk1BTkNFIHBhZ2Ugc2VsZWN0ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGhwMTAwX2NsZWFuX3R4cmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtMTc0NCwxNSArMTc0MywxNSBAQAogCiAJcmV0dXJuIDA7CiB9Ci0MCisKIAogLyoKICAqIFJlY2VpdmUgRnVuY3Rpb24gKE5vbi1CdXNtYXN0ZXIgbW9kZSkKLSAqIENhbGxlZCB3aGVuIGFuICJSZWNlaXZlIFBhY2tldCIgaW50ZXJydXB0IG9jY3VycywgaS5lLiB0aGUgcmVjZWl2ZSAKKyAqIENhbGxlZCB3aGVuIGFuICJSZWNlaXZlIFBhY2tldCIgaW50ZXJydXB0IG9jY3VycywgaS5lLiB0aGUgcmVjZWl2ZQogICogcGFja2V0IGNvdW50ZXIgaXMgbm9uLXplcm8uCiAgKiBGb3Igbm9uLWJ1c21hc3RlciwgdGhpcyBmdW5jdGlvbiBkb2VzIHRoZSB3aG9sZSB3b3JrIG9mIHRyYW5zZmVyaW5nCiAgKiB0aGUgcGFja2V0IHRvIHRoZSBob3N0IG1lbW9yeSBhbmQgdGhlbiB1cCB0byBoaWdoZXIgbGF5ZXJzIHZpYSBza2IKLSAqIGFuZCBuZXRpZl9yeC4gCisgKiBhbmQgbmV0aWZfcnguCiAgKi8KIAogc3RhdGljIHZvaWQgaHAxMDBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE4NTUsNyArMTg1NCw3IEBACiAjZW5kaWYKIH0KIAotLyogCisvKgogICogUmVjZWl2ZSBGdW5jdGlvbiBmb3IgQnVzbWFzdGVyIE1vZGUKICAqLwogc3RhdGljIHZvaWQgaHAxMDBfcnhfYm0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE4NzYsNyArMTg3NSw3IEBACiAJCXByaW50aygiaHAxMDA6ICVzOiByeF9ibSBjYWxsZWQgYWx0aG91Z2ggbm8gUERMcyB3ZXJlIGNvbW1pdHRlZCB0byBhZGFwdGVyP1xuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0gZWxzZQotCQkvKiBSWF9QS1RfQ05UIHN0YXRlcyBob3cgbWFueSBQRExzIGFyZSBjdXJyZW50bHkgZm9ybWF0dGVkIGFuZCBhdmFpbGFibGUgdG8gCisJCS8qIFJYX1BLVF9DTlQgc3RhdGVzIGhvdyBtYW55IFBETHMgYXJlIGN1cnJlbnRseSBmb3JtYXR0ZWQgYW5kIGF2YWlsYWJsZSB0bwogCQkgKiB0aGUgY2FyZHMgQk0gZW5naW5lICovCiAJaWYgKChocDEwMF9pbncoUlhfUEtUX0NOVCkgJiAweDAwZmYpID49IGxwLT5yeHJjb21taXQpIHsKIAkJcHJpbnRrKCJocDEwMDogJXM6IE1vcmUgcGFja2V0cyByZWNlaXZlZCB0aGFuIGNvbW1pdGVkPyBSWF9QS1RfQ05UPTB4JXgsIGNvbW1pdD0weCV4XG4iLApAQCAtMTg4OSw3ICsxODg4LDcgQEAKIAl3aGlsZSAoKGxwLT5yeHJjb21taXQgPiBocDEwMF9pbmIoUlhfUERMKSkpIHsKIAkJLyoKIAkJICogVGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQgaW50byB0aGUgcGRsIHBvaW50ZWQgdG8gYnkgbHAtPnJ4cmhlYWQgKAotCQkgKiB0aGUgb2xkZXN0IHBkbCBpbiB0aGUgcmluZyAKKwkJICogdGhlIG9sZGVzdCBwZGwgaW4gdGhlIHJpbmcKIAkJICovCiAKIAkJLyogRmlyc3Qgd2UgZ2V0IHRoZSBoZWFkZXIsIHdoaWNoIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSAqLwpAQCAtMjA0NCw3ICsyMDQzLDcgQEAKIAlocDEwMF9wYWdlKFBFUkZPUk1BTkNFKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogfQotDAorCiAKIC8qCiAgKiAgbXVsdGljYXN0IHNldHVwCkBAIC0yMjIxLDkgKzIyMjAsOSBAQAogCS8qIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBpbiB0aG9zZSBpbnRlcnJ1cHRzIHdlIHJlYWxseSBlbmFibGVkLiAqLwogCS8qIHZhbCAmPSBocDEwMF9pbncoIElSUV9NQVNLICk7ICovCiAKLQkvKiAKLQkgKiBSWF9QRExfRklMTF9DT01QTCBpcyBzZXQgd2hlbmV2ZXIgYSBSWF9QREwgaGFzIGJlZW4gZXhlY3V0ZWQuIEEgUlhfUERMIAotCSAqIGlzIGNvbnNpZGVyZWQgZXhlY3V0ZWQgd2hlbmV2ZXIgdGhlIFJYX1BETCBkYXRhIHN0cnVjdHVyZSBpcyBubyBsb25nZXIgCisJLyoKKwkgKiBSWF9QRExfRklMTF9DT01QTCBpcyBzZXQgd2hlbmV2ZXIgYSBSWF9QREwgaGFzIGJlZW4gZXhlY3V0ZWQuIEEgUlhfUERMCisJICogaXMgY29uc2lkZXJlZCBleGVjdXRlZCB3aGVuZXZlciB0aGUgUlhfUERMIGRhdGEgc3RydWN0dXJlIGlzIG5vIGxvbmdlcgogCSAqIG5lZWRlZC4KIAkgKi8KIAlpZiAodmFsICYgSFAxMDBfUlhfUERMX0ZJTExfQ09NUEwpIHsKQEAgLTIyMzQsNyArMjIzMyw3IEBACiAJCX0KIAl9CiAKLQkvKiAKKwkvKgogCSAqIFRoZSBSWF9QQUNLRVQgaW50ZXJydXB0IGlzIHNldCwgd2hlbiB0aGUgcmVjZWl2ZSBwYWNrZXQgY291bnRlciBpcwogCSAqIG5vbiB6ZXJvLiBXZSB1c2UgdGhpcyBpbnRlcnJ1cHQgZm9yIHJlY2VpdmluZyBpbiBzbGF2ZSBtb2RlLiBJbgogCSAqIGJ1c21hc3RlciBtb2RlLCB3ZSB1c2UgaXQgdG8gbWFrZSBzdXJlIHdlIGRpZCBub3QgbWlzcyBhbnkgcnhfcGRsX2ZpbGwKQEAgLTIyNjAsMTAgKzIyNTksMTAgQEAKIAlocDEwMF9vdXR3KHZhbCwgSVJRX1NUQVRVUyk7CiAKIAkvKgotCSAqIFJYX0VSUk9SIGlzIHNldCB3aGVuIGEgcGFja2V0IGlzIGRyb3BwZWQgZHVlIHRvIG5vIG1lbW9yeSByZXNvdXJjZXMgb24gCi0JICogdGhlIGNhcmQgb3Igd2hlbiBhIFJDVl9FUlIgb2NjdXJzLiAKLQkgKiBUWF9FUlJPUiBpcyBzZXQgd2hlbiBhIFRYX0FCT1JUIGNvbmRpdGlvbiBvY2N1cnMgaW4gdGhlIE1BQy0+ZXhpc3RzICAKLQkgKiBvbmx5IGluIHRoZSA4MDIuMyBNQUMgYW5kIGhhcHBlbnMgd2hlbiAxNiBjb2xsaXNpb25zIG9jY3VyIGR1cmluZyBhIFRYIAorCSAqIFJYX0VSUk9SIGlzIHNldCB3aGVuIGEgcGFja2V0IGlzIGRyb3BwZWQgZHVlIHRvIG5vIG1lbW9yeSByZXNvdXJjZXMgb24KKwkgKiB0aGUgY2FyZCBvciB3aGVuIGEgUkNWX0VSUiBvY2N1cnMuCisJICogVFhfRVJST1IgaXMgc2V0IHdoZW4gYSBUWF9BQk9SVCBjb25kaXRpb24gb2NjdXJzIGluIHRoZSBNQUMtPmV4aXN0cworCSAqIG9ubHkgaW4gdGhlIDgwMi4zIE1BQyBhbmQgaGFwcGVucyB3aGVuIDE2IGNvbGxpc2lvbnMgb2NjdXIgZHVyaW5nIGEgVFgKIAkgKi8KIAlpZiAodmFsICYgKEhQMTAwX1RYX0VSUk9SIHwgSFAxMDBfUlhfRVJST1IpKSB7CiAjaWZkZWYgSFAxMDBfREVCVUdfSVJRCkBAIC0yMjc2LDIwICsyMjc1LDIwIEBACiAJCX0KIAl9CiAKLQkvKiAKLQkgKiBSWF9QREFfWkVSTyBpcyBzZXQgd2hlbiB0aGUgUERBIGNvdW50IGdvZXMgZnJvbSBub24temVybyB0byB6ZXJvLiAKKwkvKgorCSAqIFJYX1BEQV9aRVJPIGlzIHNldCB3aGVuIHRoZSBQREEgY291bnQgZ29lcyBmcm9tIG5vbi16ZXJvIHRvIHplcm8uCiAJICovCiAJaWYgKChscC0+bW9kZSA9PSAxKSAmJiAodmFsICYgKEhQMTAwX1JYX1BEQV9aRVJPKSkpCiAJCWhwMTAwX3J4ZmlsbChkZXYpOwogCi0JLyogCi0JICogSFAxMDBfVFhfQ09NUExFVEUgaW50ZXJydXB0IG9jY3VycyB3aGVuIHBhY2tldCB0cmFuc21pdHRlZCBvbiB3aXJlIAotCSAqIGlzIGNvbXBsZXRlZCAKKwkvKgorCSAqIEhQMTAwX1RYX0NPTVBMRVRFIGludGVycnVwdCBvY2N1cnMgd2hlbiBwYWNrZXQgdHJhbnNtaXR0ZWQgb24gd2lyZQorCSAqIGlzIGNvbXBsZXRlZAogCSAqLwogCWlmICgobHAtPm1vZGUgPT0gMSkgJiYgKHZhbCAmIChIUDEwMF9UWF9DT01QTEVURSkpKQogCQlocDEwMF9jbGVhbl90eHJpbmcoZGV2KTsKIAotCS8qIAorCS8qCiAJICogTUlTQ19FUlJPUiBpcyBzZXQgd2hlbiBlaXRoZXIgdGhlIExBTiBsaW5rIGdvZXMgZG93biBvciBhIGRldGVjdGVkCiAJICogYnVzIGVycm9yIG9jY3Vycy4KIAkgKi8KQEAgLTI0NzIsMTIgKzI0NzEsMTIgQEAKIAogCS8qIFRob3NlIGNhcmRzIGRvbid0IGhhdmUgYSAxMDAgTWJpdCBjb25uZWN0b3IgKi8KIAlpZiAoICFzdHJjbXAobHAtPmlkLCAiSFdQMTkyMCIpICB8fAotCSAgICAgKGxwLT5wY2lfZGV2ICYmIAotCSAgICAgIGxwLT5wY2lfZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRCAmJiAKKwkgICAgIChscC0+cGNpX2RldiAmJgorCSAgICAgIGxwLT5wY2lfZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRCAmJgogCSAgICAgIChscC0+cGNpX2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSFBfSjI5NzBBIHx8CiAJICAgICAgIGxwLT5wY2lfZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9IUF9KMjk3M0EpKSkKIAkJcmV0dXJuIEhQMTAwX0xBTl9FUlI7Ci0JCisKIAlpZiAodmFsX1ZHICYgSFAxMDBfTElOS19DQUJMRV9TVCkJLyogQ2FuIGhlYXIgdGhlIEhVQnMgdG9uZS4gKi8KIAkJcmV0dXJuIEhQMTAwX0xBTl8xMDA7CiAJcmV0dXJuIEhQMTAwX0xBTl9FUlI7CkBAIC0yODIzLDggKzI4MjIsOCBAQAogCXJlbGVhc2VfcmVnaW9uKGQtPmJhc2VfYWRkciwgSFAxMDBfUkVHSU9OX1NJWkUpOwogCiAJaWYgKHAtPm1vZGUgPT0gMSkJLyogYnVzbWFzdGVyICovCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQocC0+cGNpX2RldiwgTUFYX1JJTkdTSVpFICsgMHgwZiwgCi0JCQkJICAgIHAtPnBhZ2VfdmFkZHJfYWxnbiwgCisJCXBjaV9mcmVlX2NvbnNpc3RlbnQocC0+cGNpX2RldiwgTUFYX1JJTkdTSVpFICsgMHgwZiwKKwkJCQkgICAgcC0+cGFnZV92YWRkcl9hbGduLAogCQkJCSAgICB2aXJ0X3RvX3doYXRldmVyKGQsIHAtPnBhZ2VfdmFkZHJfYWxnbikpOwogCWlmIChwLT5tZW1fcHRyX3ZpcnQpCiAJCWlvdW5tYXAocC0+bWVtX3B0cl92aXJ0KTsKQEAgLTI4NTAsNyArMjg0OSw3IEBACiAJCWdvdG8gb3V0MTsKIAogI2lmZGVmIEhQMTAwX0RFQlVHCi0JcHJpbnRrKCJocDEwMDogJXM6IEVJU0EgYWRhcHRlciBmb3VuZCBhdCAweCV4XG4iLCBkZXYtPm5hbWUsIAorCXByaW50aygiaHAxMDA6ICVzOiBFSVNBIGFkYXB0ZXIgZm91bmQgYXQgMHgleFxuIiwgZGV2LT5uYW1lLAogCSAgICAgICBkZXYtPmJhc2VfYWRkcik7CiAjZW5kaWYKIAlnZW5kZXYtPmRyaXZlcl9kYXRhID0gZGV2OwpAQCAtMjkxNCwxMiArMjkxMywxMiBAQAogCQlwY2lfY29tbWFuZCB8PSBQQ0lfQ09NTUFORF9NQVNURVI7CiAJCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NvbW1hbmQpOwogCX0KLQkKKwogCWlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAllcnIgPSBocDEwMF9wcm9iZTEoZGV2LCBpb2FkZHIsIEhQMTAwX0JVU19QQ0ksIHBkZXYpOwotCWlmIChlcnIpIAorCWlmIChlcnIpCiAJCWdvdG8gb3V0MTsKLQkKKwogI2lmZGVmIEhQMTAwX0RFQlVHCiAJcHJpbnRrKCJocDEwMDogJXM6IFBDSSBhZGFwdGVyIGZvdW5kIGF0IDB4JXhcbiIsIGRldi0+bmFtZSwgaW9hZGRyKTsKICNlbmRpZgpAQCAtMzAwNCw3ICszMDAzLDcgQEAKIAlyZXR1cm4gY2FyZHMgPiAwID8gMCA6IC1FTk9ERVY7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBocDEwMF9pc2FfY2xlYW51cCh2b2lkKSAKK3N0YXRpYyB2b2lkIF9fZXhpdCBocDEwMF9pc2FfY2xlYW51cCh2b2lkKQogewogCWludCBpOwogCkBAIC0zMDI4LDEyICszMDI3LDEyIEBACiAJCWdvdG8gb3V0OwogI2lmZGVmIENPTkZJR19FSVNBCiAJZXJyID0gZWlzYV9kcml2ZXJfcmVnaXN0ZXIoJmhwMTAwX2Vpc2FfZHJpdmVyKTsKLQlpZiAoZXJyICYmIGVyciAhPSAtRU5PREVWKSAKKwlpZiAoZXJyICYmIGVyciAhPSAtRU5PREVWKQogCQlnb3RvIG91dDI7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfUENJCiAJZXJyID0gcGNpX21vZHVsZV9pbml0KCZocDEwMF9wY2lfZHJpdmVyKTsKLQlpZiAoZXJyICYmIGVyciAhPSAtRU5PREVWKSAKKwlpZiAoZXJyICYmIGVyciAhPSAtRU5PREVWKQogCQlnb3RvIG91dDM7CiAjZW5kaWYKICBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5oIGIvZHJpdmVycy9uZXQvaHAxMDAuaAppbmRleCAyMzZkOTQ1Li5lNmNhMTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmgKQEAgLTgsOSArOCw5IEBACiAgKgogICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlICdocGZlcGt0JyBjcnlud3IgcGFja2V0IGRyaXZlci4KICAqCi0gKiBUaGlzIHNvdXJjZS9jb2RlIGlzIHB1YmxpYyBmcmVlOyB5b3UgY2FuIGRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSAKKyAqIFRoaXMgc291cmNlL2NvZGUgaXMgcHVibGljIGZyZWU7IHlvdSBjYW4gZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbikgZWl0aGVyIHZlcnNpb24gdHdvIG9mIHRoaXMgTGljZW5zZSwgb3IgYW55IAorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uKSBlaXRoZXIgdmVyc2lvbiB0d28gb2YgdGhpcyBMaWNlbnNlLCBvciBhbnkKICAqIGxhdGVyIHZlcnNpb24uCiAgKi8KIApAQCAtMTgsNyArMTgsNyBAQAogICogIEhhcmR3YXJlIENvbnN0YW50cwogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIAorLyoKICAqIFBhZ2UgSWRlbnRpZmllcnMKICAqIChTd2FwIFBhZ2luZyBSZWdpc3RlciwgUEFHSU5HLCBiaXRzIDM6MCwgT2Zmc2V0IDB4MDIpCiAgKi8KQEAgLTE0MywxNSArMTQzLDE1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogCi0vKiAKKy8qCiAgKiBIYXJkd2FyZSBJRCBSZWdpc3RlciBJIChBbHdheXMgYXZhaWxhYmxlLCBIV19JRCwgT2Zmc2V0IDB4MDApCiAgKi8KICNkZWZpbmUgSFAxMDBfSFdfSURfQ0FTQ0FERSAgICAgMHg0ODUwCS8qIElkZW50aWZpZXMgQ2FzY2FkZSBDaGlwICovCiAKLS8qIAorLyoKICAqIEhhcmR3YXJlIElEIFJlZ2lzdGVyIDIgJiBQYWdpbmcgUmVnaXN0ZXIKICAqIChBbHdheXMgYXZhaWxhYmxlLCBQQUdJTkcsIE9mZnNldCAweDAyKQotICogQml0cyAxNTo0IGFyZSBmb3IgdGhlIENoaXAgSUQgCisgKiBCaXRzIDE1OjQgYXJlIGZvciB0aGUgQ2hpcCBJRAogICovCiAjZGVmaW5lIEhQMTAwX0NISVBJRF9NQVNLICAgICAgICAweEZGRjAKICNkZWZpbmUgSFAxMDBfQ0hJUElEX1NIQVNUQSAgICAgIDB4NTM1MAkvKiBOb3QgODAyLjEyIGNvbXBsaWFudCAqLwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJCQkJCSAvKiBMUkYgc3VwcG9ydGVkICovCiAKIC8qCi0gKiAgT3B0aW9uIFJlZ2lzdGVycyBJIGFuZCBJSSAKKyAqICBPcHRpb24gUmVnaXN0ZXJzIEkgYW5kIElJCiAgKiAoQWx3YXlzIGF2YWlsYWJsZSwgT1BUSU9OX0xTVywgT2Zmc2V0IDB4MDQtMHgwNSkKICAqLwogI2RlZmluZSBIUDEwMF9ERUJVR19FTgkJMHg4MDAwCS8qIDA6RGlzLiwgMTpFbmFibGUgRGVidWcgRHVtcCBQdHIuICovCkBAIC0xODcsNyArMTg3LDcgQEAKIAkJCQkJLyogTklDIHJlc2V0IG9uIDAgdG8gMSB0cmFuc2l0aW9uICovCiAKIC8qCi0gKiAgT3B0aW9uIFJlZ2lzdGVyIElJSSAKKyAqICBPcHRpb24gUmVnaXN0ZXIgSUlJCiAgKiAoQWx3YXlzIGF2YWlsYWJsZSwgT1BUSU9OX01TVywgT2Zmc2V0IDB4MDYpCiAgKi8KICNkZWZpbmUgSFAxMDBfUFJJT1JJVFlfVFgJMHgwMDgwCS8qIDE6RG8gYWxsIFR4IHBrdHMgYXMgcHJpb3JpdHkgKi8KQEAgLTI1Myw3ICsyNTMsNyBAQAogI2RlZmluZSBIUDEwMF9CTV9QQ0lfOENMSyAgICAgICAweDQwCS8qIC4uLiBjeWNsZXMgOCBjbG9ja3MgYXBhcnQgKi8KIAogCi0vKiAKKy8qCiAgKiBNb2RlIENvbnRyb2wgUmVnaXN0ZXIgSQogICogKFBhZ2UgSFdfTUFQLCBNT0RFQ1RSTDEsIE9mZnNldDB4MTApCiAgKi8KQEAgLTI4MSw3ICsyODEsNyBAQAogI2RlZmluZSBIUDEwMF9FTl9CVVNfRkFJTCAgICAgICAweDgwCS8qIEVuYWJsZXMgYnVzLWZhaWwgcG9ydGlvbiBvZiBtaXNjICovCiAJCQkJICAgICAgIC8qIGludGVycnVwdCAqLwogCi0vKiAKKy8qCiAgKiBQQ0kgQ29uZmlndXJhdGlvbiBhbmQgQ29udHJvbCBSZWdpc3RlciBJCiAgKiAoUGFnZSBIV19NQVAsIFBDSUNUUkwxLCBPZmZzZXQgMHgxMikKICAqLwpAQCAtMzc4LDcgKzM3OCw3IEBACiAKIC8qCiAgKiAxMDBNQiBMQU4gQ29udHJvbCBhbmQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcgotICogKFBhZ2UgTUFDX0NUUkwsIFZHX0xBTl9DRkdfMSwgT2Zmc2V0IDB4MGEpIAorICogKFBhZ2UgTUFDX0NUUkwsIFZHX0xBTl9DRkdfMSwgT2Zmc2V0IDB4MGEpCiAgKi8KICNkZWZpbmUgSFAxMDBfVkdfU0VMCSAgICAgICAgMHg4MAkvKiAwOk5vLCAxOlllcyB1c2UgMTAwIE1iaXQgTUFDICovCiAjZGVmaW5lIEhQMTAwX0xJTktfVVBfU1QJMHg0MAkvKiAwOk5vLCAxOlllcyBlbmRub2RlIGxvZ2dlZCBpbiAqLwpAQCAtNDIyLDcgKzQyMiw3IEBACiAjZGVmaW5lIEhQMTAwX01BQzFNT0RFNwkJSFAxMDBfTUFDMU1PREU2IHwgSFAxMDBfQUNDX0VSUk9SRUQKIAogLyoKLSAqICBNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBJSSAKKyAqICBNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBJSQogICogKFBhZ2UgTUFDX0NUUkwsIE1BQ19DRkdfMiwgT2Zmc2V0IDB4MGQpCiAgKi8KICNkZWZpbmUgSFAxMDBfVFJfTU9ERQkJMHg4MAkvKiAwOk5vLCAxOlllcyBzdXBwb3J0IFRva2VuIFJpbmcgZm9ybWF0cyAqLwpAQCAtNDQ3LDggKzQ0Nyw4IEBACiAjZGVmaW5lIEhQMTAwX01BQzJNT0RFNwkJS0VFUF9DUkMKIAogLyoKLSAqIE1BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIElJSSAKLSAqIChQYWdlIE1BQ19DVFJMLCBNQUNfQ0ZHXzMsIE9mZnNldCAweDBlKSAKKyAqIE1BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIElJSQorICogKFBhZ2UgTUFDX0NUUkwsIE1BQ19DRkdfMywgT2Zmc2V0IDB4MGUpCiAgKi8KICNkZWZpbmUgSFAxMDBfUEFDS0VUX1BBQ0UgICAgICAgMHgwMwkvKiBQYWNrZXQgUGFjaW5nOgogCQkJCQkgKiAwMDogTm8gcGFja2V0IHBhY2luZwpAQCAtNDYxLDcgKzQ2MSw3IEBACiAjZGVmaW5lIEhQMTAwX0FVVE9fTU9ERSAgICAgICAgIDB4MTAJLyogMTogQXV0b1NlbGVjdCBiZXR3ZWVuIDEwLzEwMCAqLwogCiAvKgotICogTUFDIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgSVYgCisgKiBNQUMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciBJVgogICogKFBhZ2UgTUFDX0NUUkwsIE1BQ19DRkdfNCwgT2Zmc2V0IDB4MGYpCiAgKi8KICNkZWZpbmUgSFAxMDBfTUFDX1NFTF9TVCAgICAgICAgMHgwMQkvKiAoUik6IFN0YXR1cyBvZiBleHRlcm5hbCBWR1NFTApAQCAtNDY5LDE4ICs0NjksMTggQEAKICNkZWZpbmUgSFAxMDBfTElOS19GQUlMX1NUICAgICAgMHgwMgkvKiAoUik6IFN0YXR1cyBvZiBMaW5rIEZhaWwgcG9ydGlvbgogCQkJCQkgKiBvZiB0aGUgTWlzYy4gSW50ZXJydXB0ICovCiAKLS8qIAotICogIDEwMCBNQiBMQU4gVHJhaW5pbmcgUmVxdWVzdC9BbGxvd2VkIFJlZ2lzdGVycyAKKy8qCisgKiAgMTAwIE1CIExBTiBUcmFpbmluZyBSZXF1ZXN0L0FsbG93ZWQgUmVnaXN0ZXJzCiAgKiAoUGFnZSBNQUNfQ1RSTCwgVFJBSU5fUkVRVUVTVCBhbmQgVFJBSU5fQUxMT1csIE9mZnNldCAweDE0LTB4MTYpKEVUUiBwYXJ0cyBvbmx5KQogICovCi0jZGVmaW5lIEhQMTAwX01BQ1JRX1JFUEVBVEVSICAgICAgICAgMHgwMDAxCS8qIDE6IE1BQyB0ZWxscyBIVUIgaXQgd2FudHMgdG8gYmUgCisjZGVmaW5lIEhQMTAwX01BQ1JRX1JFUEVBVEVSICAgICAgICAgMHgwMDAxCS8qIDE6IE1BQyB0ZWxscyBIVUIgaXQgd2FudHMgdG8gYmUKIAkJCQkJCSAqICAgIGEgY2FzY2FkZWQgcmVwZWF0ZXIKIAkJCQkJCSAqIDA6IC4uLiB3YW50cyB0byBiZSBhIERURSAqLwogI2RlZmluZSBIUDEwMF9NQUNSUV9QUk9NU0MgICAgICAgICAgIDB4MDAwNgkvKiAyIGJpdHM6IFByb21pc2Npb3VzIG1vZGUKIAkJCQkJCSAqIDAwOiBSY3Ygb25seSB1bmljYXN0IHBhY2tldHMKIAkJCQkJCSAqICAgICBzcGVjaWZpY2FsbHkgYWRkciB0byB0aGlzCiAJCQkJCQkgKiAgICAgZW5kbm9kZQotCQkJCQkJICogMTA6IFJjdiBhbGwgcGNrdHMgZndkZWQgYnkgCisJCQkJCQkgKiAxMDogUmN2IGFsbCBwY2t0cyBmd2RlZCBieQogCQkJCQkJICogICAgIHRoZSBsb2NhbCByZXBlYXRlciAqLwogI2RlZmluZSBIUDEwMF9NQUNSUV9GUkFNRUZNVF9FSVRIRVIgIDB4MDAxOAkvKiAxMTogZWl0aGVyIGZvcm1hdCBhbGxvd2VkICovCiAjZGVmaW5lIEhQMTAwX01BQ1JRX0ZSQU1FRk1UXzgwMl8zICAgMHgwMDAwCS8qIDAwOiA4MDIuMyBpcyByZXF1ZXN0ZWQgKi8KQEAgLTQ5Miw3ICs0OTIsNyBAQAogCQkJCQkJICogMDA6IFJjdiBvbmx5IHVuaWNhc3QgcGFja2V0cwogCQkJCQkJICogICAgIHNwZWNpZmljYWxseSBhZGRyIHRvIHRoaXMKIAkJCQkJCSAqICAgICBlbmRub2RlCi0JCQkJCQkgKiAxMDogUmN2IGFsbCBwY2t0cyBmd2RlZCBieSAKKwkJCQkJCSAqIDEwOiBSY3YgYWxsIHBja3RzIGZ3ZGVkIGJ5CiAJCQkJCQkgKiAgICAgdGhlIGxvY2FsIHJlcGVhdGVyICovCiAjZGVmaW5lIEhQMTAwX01BTExPV19GUkFNRUZNVCAgICAgICAgMHgwMGUwCS8qIDIgYml0czogRnJhbWUgRm9ybWF0CiAJCQkJCQkgKiAwMDogODAyLjMgZm9ybWF0IHdpbGwgYmUgdXNlZApAQCAtNTIxLDcgKzUyMSw3IEBACiAjZGVmaW5lIEhQMTAwX0xBTl9DT0FYCQk5CS8qIGxhbl90eXBlIHZhbHVlIGZvciBDb2F4ICovCiAjZGVmaW5lIEhQMTAwX0xBTl9FUlIJCSgtMSkJLyogbGFuX3R5cGUgdmFsdWUgZm9yIGxpbmsgZG93biAqLwogCi0vKiAKKy8qCiAgKiBCdXMgTWFzdGVyIERhdGEgU3RydWN0dXJlcyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKQEAgLTU1NCw3ICs1NTQsNyBAQAogI2RlZmluZSBIUDEwMF9QS1RfTEVOX01BU0sJMHgxRkZGCS8qIEFORCB3aXRoIFJ4TGVuZ3RoIHRvIGdldCBsZW5ndGggKi8KIAogCi0vKiBSZWNlaXZlIFBhY2tldCBTdGF0dXMuICBOb3RlLCB0aGUgZXJyb3IgYml0cyBhcmUgb25seSB2YWxpZCBpZiBBQ0NfRVJST1JFRCAKKy8qIFJlY2VpdmUgUGFja2V0IFN0YXR1cy4gIE5vdGUsIHRoZSBlcnJvciBiaXRzIGFyZSBvbmx5IHZhbGlkIGlmIEFDQ19FUlJPUkVECiAgICBiaXQgaW4gdGhlIE1BQyBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIDEgaXMgc2V0LiAqLwogI2RlZmluZSBIUDEwMF9SWF9QUkkJCTB4ODAwMAkvKiAwOk5vLCAxOlllcyBwYWNrZXQgaXMgcHJpb3JpdHkgKi8KICNkZWZpbmUgSFAxMDBfU0RGX0VSUgkJMHg0MDAwCS8qIDA6Tm8sIDE6WWVzIHN0YXJ0IG9mIGZyYW1lIGVycm9yICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocGxhbmNlLmMgYi9kcml2ZXJzL25ldC9ocGxhbmNlLmMKaW5kZXggNjg1NjkzNC4uOWM2NDNmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaHBsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2hwbGFuY2UuYwpAQCAtNDUsMTIgKzQ1LDEyIEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMuLi4gVGhpcyBpcyBlYXN5IGJlY2F1c2UgYWxsIHRoZSBncm90IGlzIGluIHRoZQogICogZ2VuZXJpYyBMQU5DRSBzdXBwb3J0LiBBbGwgd2UgaGF2ZSB0byBzdXBwb3J0IGlzIHByb2JpbmcgZm9yIGJvYXJkcywKLSAqIHBsdXMgYm9hcmQtc3BlY2lmaWMgaW5pdCwgb3BlbiBhbmQgY2xvc2UgYWN0aW9ucy4gCisgKiBwbHVzIGJvYXJkLXNwZWNpZmljIGluaXQsIG9wZW4gYW5kIGNsb3NlIGFjdGlvbnMuCiAgKiBPaCwgYW5kIHdlIG5lZWQgdG8gdGVsbCB0aGUgZ2VuZXJpYyBjb2RlIGhvdyB0byByZWFkIGFuZCB3cml0ZSBMQU5DRSByZWdpc3RlcnMuLi4KICAqLwogc3RhdGljIGludCBfX2RldmluaXQgaHBsYW5jZV9pbml0X29uZShzdHJ1Y3QgZGlvX2RldiAqZCwKIAkJCQljb25zdCBzdHJ1Y3QgZGlvX2RldmljZV9pZCAqZW50KTsKLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCBocGxhbmNlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaHBsYW5jZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJc3RydWN0IGRpb19kZXYgKmQpOwogc3RhdGljIHZvaWQgX19kZXZleGl0IGhwbGFuY2VfcmVtb3ZlX29uZShzdHJ1Y3QgZGlvX2RldiAqZCk7CiBzdGF0aWMgdm9pZCBocGxhbmNlX3dyaXRlcmFwKHZvaWQgKnByaXYsIHVuc2lnbmVkIHNob3J0IHZhbHVlKTsKQEAgLTExOCw3ICsxMTgsNyBAQAogICAgICAgICB1bnNpZ25lZCBsb25nIHZhID0gKGQtPnJlc291cmNlLnN0YXJ0ICsgRElPX1ZJUkFERFJCQVNFKTsKICAgICAgICAgc3RydWN0IGhwbGFuY2VfcHJpdmF0ZSAqbHA7CiAgICAgICAgIGludCBpOwotICAgICAgICAKKwogICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogJXM7IHNlbGVjdCBjb2RlICVkLCBhZGRyIiwgZGV2LT5uYW1lLCBkLT5uYW1lLCBkLT5zY29kZSk7CiAKICAgICAgICAgLyogcmVzZXQgdGhlIGJvYXJkICovCkBAIC0xMzYsNyArMTM2LDcgQEAKICAgICAgICAgZGV2LT5nZXRfc3RhdHMgPSAmbGFuY2VfZ2V0X3N0YXRzOwogICAgICAgICBkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZsYW5jZV9zZXRfbXVsdGljYXN0OwogICAgICAgICBkZXYtPmRtYSA9IDA7Ci0gICAgICAgIAorCiAgICAgICAgIGZvciAoaT0wOyBpPDY7IGkrKykgewogICAgICAgICAgICAgICAgIC8qIFRoZSBOVlJBTSBob2xkcyBvdXIgZXRoZXJuZXQgYWRkcmVzcywgb25lIG5pYmJsZSBwZXIgYnl0ZSwKICAgICAgICAgICAgICAgICAgKiBhdCBieXRlcyBOVlJBTU9GRisxLDMsNSw3LDkuLi4KQEAgLTE0NSw3ICsxNDUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfCAoaW5fOCh2YSArIEhQTEFOQ0VfTlZSQU1PRkYgKyBpKjQgKyAzKSAmIDB4Rik7CiAgICAgICAgICAgICAgICAgcHJpbnRrKCIlYyUyLjJ4IiwgaSA9PSAwID8gJyAnIDogJzonLCBkZXYtPmRldl9hZGRyW2ldKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBscCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgICAgIGxwLT5sYW5jZS5uYW1lID0gKGNoYXIqKWQtPm5hbWU7ICAgICAgICAgICAgICAgIC8qIGRpc2NhcmRzIGNvbnN0LCBzaHV0IHVwIGdjYyAqLwogICAgICAgICBscC0+bGFuY2UuYmFzZSA9IHZhOwpAQCAtMTk2LDcgKzE5Niw3IEBACiB7CiAgICAgICAgIGludCBzdGF0dXM7CiAgICAgICAgIHN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXR1cyA9IGxhbmNlX29wZW4oZGV2KTsgICAgICAgICAgICAgICAgIC8qIGNhbGwgZ2VuZXJpYyBsYW5jZSBvcGVuIGNvZGUgKi8KICAgICAgICAgaWYgKHN0YXR1cykKICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jIGIvZHJpdmVycy9uZXQvaWJtX2VtYWMvaWJtX2VtYWNfY29yZS5jCmluZGV4IDgyNDY4ZTIuLjk0NGVlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libV9lbWFjL2libV9lbWFjX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC9pYm1fZW1hYy9pYm1fZW1hY19jb3JlLmMKQEAgLTE4ODMsNyArMTg4Myw3IEBACiAJaW5mby0+cmVnZHVtcF9sZW4gPSBlbWFjX2V0aHRvb2xfZ2V0X3JlZ3NfbGVuKG5kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGVtYWNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGVtYWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGVtYWNfZXRodG9vbF9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IGVtYWNfZXRodG9vbF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gZW1hY19ldGh0b29sX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5jIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5jCmluZGV4IDA0NjRlNzguLjc2NzIwM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTYwNiw3ICs2MDYsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBuZXRkZXZfZ2V0X3NldHRpbmdzLAogCS5nZXRfbGluawkJPSBuZXRkZXZfZ2V0X2xpbmssCkBAIC03MDIsNyArNzAyLDggQEAKIAkJCQkJICAgICBkZXNjWzNdLmRlc2MsCiAJCQkJCSAgICAgZGVzY1s0XS5kZXNjLAogCQkJCQkgICAgIGRlc2NbNV0uZGVzYywKLQkJCQkJICAgICBjb3JyZWxhdG9yKTsKKwkJCQkJICAgICBjb3JyZWxhdG9yLAorCQkJCQkgICAgICZjb3JyZWxhdG9yKTsKIAl9IHdoaWxlICgobHBhcl9yYyA9PSBIX0JVU1kpICYmIChyZXRyeV9jb3VudC0tKSk7CiAKIAlpZihscGFyX3JjICE9IEhfU1VDQ0VTUyAmJiBscGFyX3JjICE9IEhfRFJPUFBFRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtdmV0aC5oIGIvZHJpdmVycy9uZXQvaWJtdmV0aC5oCmluZGV4IDgzODViZjguLmY1YjI1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguaAorKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmgKQEAgLTQxLDE2ICs0MSw2IEBACiAjZGVmaW5lIElibVZldGhNY2FzdFJlbW92ZUZpbHRlciAgICAgMHgyVUwKICNkZWZpbmUgSWJtVmV0aE1jYXN0Q2xlYXJGaWx0ZXJUYWJsZSAweDNVTAogCi0vKiBoY2FsbCBudW1iZXJzICovCi0jZGVmaW5lIEhfVklPX1NJR05BTCAgICAgICAgICAgICAweDEwNAotI2RlZmluZSBIX1JFR0lTVEVSX0xPR0lDQUxfTEFOICAgMHgxMTQKLSNkZWZpbmUgSF9GUkVFX0xPR0lDQUxfTEFOICAgICAgIDB4MTE4Ci0jZGVmaW5lIEhfQUREX0xPR0lDQUxfTEFOX0JVRkZFUiAweDExQwotI2RlZmluZSBIX1NFTkRfTE9HSUNBTF9MQU4gICAgICAgMHgxMjAKLSNkZWZpbmUgSF9NVUxUSUNBU1RfQ1RSTCAgICAgICAgIDB4MTMwCi0jZGVmaW5lIEhfQ0hBTkdFX0xPR0lDQUxfTEFOX01BQyAweDE0QwotI2RlZmluZSBIX0ZSRUVfTE9HSUNBTF9MQU5fQlVGRkVSIDB4MUQ0Ci0KIC8qIGhjYWxsIG1hY3JvcyAqLwogI2RlZmluZSBoX3JlZ2lzdGVyX2xvZ2ljYWxfbGFuKHVhLCBidWZsc3QsIHJ4cSwgZmx0bHN0LCBtYWMpIFwKICAgcGxwYXJfaGNhbGxfbm9yZXRzKEhfUkVHSVNURVJfTE9HSUNBTF9MQU4sIHVhLCBidWZsc3QsIHJ4cSwgZmx0bHN0LCBtYWMpCkBAIC02MSw4ICs1MSwyMSBAQAogI2RlZmluZSBoX2FkZF9sb2dpY2FsX2xhbl9idWZmZXIodWEsIGJ1ZikgXAogICBwbHBhcl9oY2FsbF9ub3JldHMoSF9BRERfTE9HSUNBTF9MQU5fQlVGRkVSLCB1YSwgYnVmKQogCi0jZGVmaW5lIGhfc2VuZF9sb2dpY2FsX2xhbih1YSwgYnVmMSwgYnVmMiwgYnVmMywgYnVmNCwgYnVmNSwgYnVmNiwgY29ycmVsYXRvcikgXAotICBwbHBhcl9oY2FsbF84YXJnXzJyZXQoSF9TRU5EX0xPR0lDQUxfTEFOLCB1YSwgYnVmMSwgYnVmMiwgYnVmMywgYnVmNCwgYnVmNSwgYnVmNiwgY29ycmVsYXRvciwgJmNvcnJlbGF0b3IpCitzdGF0aWMgaW5saW5lIGxvbmcgaF9zZW5kX2xvZ2ljYWxfbGFuKHVuc2lnbmVkIGxvbmcgdW5pdF9hZGRyZXNzLAorCQl1bnNpZ25lZCBsb25nIGRlc2MxLCB1bnNpZ25lZCBsb25nIGRlc2MyLCB1bnNpZ25lZCBsb25nIGRlc2MzLAorCQl1bnNpZ25lZCBsb25nIGRlc2M0LCB1bnNpZ25lZCBsb25nIGRlc2M1LCB1bnNpZ25lZCBsb25nIGRlc2M2LAorCQl1bnNpZ25lZCBsb25nIGNvcmVsbGF0b3JfaW4sIHVuc2lnbmVkIGxvbmcgKmNvcmVsbGF0b3Jfb3V0KQoreworCWxvbmcgcmM7CisJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTEw5X0JVRlNJWkVdOworCisJcmMgPSBwbHBhcl9oY2FsbDkoSF9TRU5EX0xPR0lDQUxfTEFOLCByZXRidWYsIHVuaXRfYWRkcmVzcywgZGVzYzEsCisJCQlkZXNjMiwgZGVzYzMsIGRlc2M0LCBkZXNjNSwgZGVzYzYsIGNvcmVsbGF0b3JfaW4pOworCisJKmNvcmVsbGF0b3Jfb3V0ID0gcmV0YnVmWzBdOworCisJcmV0dXJuIHJjOworfQogCiAjZGVmaW5lIGhfbXVsdGljYXN0X2N0cmwodWEsIGNtZCwgbWFjKSBcCiAgIHBscGFyX2hjYWxsX25vcmV0cyhIX01VTFRJQ0FTVF9DVFJMLCB1YSwgY21kLCBtYWMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZmIuYyBiL2RyaXZlcnMvbmV0L2lmYi5jCmluZGV4IDQzZTNmMzMuLjY0NjkxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lmYi5jCisrKyBiL2RyaXZlcnMvbmV0L2lmYi5jCkBAIC0xLDQgKzEsNCBAQAotLyogZHJpdmVycy9uZXQvaWZiLmM6IAorLyogZHJpdmVycy9uZXQvaWZiLmM6CiAKIAlUaGUgcHVycG9zZSBvZiB0aGlzIGRyaXZlciBpcyB0byBwcm92aWRlIGEgZGV2aWNlIHRoYXQgYWxsb3dzCiAJZm9yIHNoYXJpbmcgb2YgcmVzb3VyY2VzOgpAQCAtOCw4ICs4LDggQEAKIAlhbiBpbXByZXNzaW9uIG9mIHNoYXJpbmcuCiAKIAkyKSBBbGxvd3MgZm9yIHF1ZXVlaW5nIGluY29taW5nIHRyYWZmaWMgZm9yIHNoYXBpbmcgaW5zdGVhZCBvZgotCWRyb3BwaW5nLiAKLQkKKwlkcm9wcGluZy4KKwogCVRoZSBvcmlnaW5hbCBjb25jZXB0IGlzIGJhc2VkIG9uIHdoYXQgaXMga25vd24gYXMgdGhlIElNUQogCWRyaXZlciBpbml0aWFsbHkgd3JpdHRlbiBieSBNYXJ0aW4gRGV2ZXJhLCBsYXRlciByZXdyaXR0ZW4KIAlieSBQYXRyaWNrIE1jSGFyZHkgYW5kIHRoZW4gbWFpbnRhaW5lZCBieSBBbmRyZSBDb3JyZWEuCkBAIC0yMSw5ICsyMSw5IEBACiAJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIAlhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KIAkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotIAorCiAgIAlBdXRob3JzOglKYW1hbCBIYWRpIFNhbGltICgyMDA1KQotIAorCiAqLwogCiAKQEAgLTMzLDEwICszMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPiAKKyNpbmNsdWRlIDxuZXQvcGt0X3NjaGVkLmg+CiAKICNkZWZpbmUgVFhfVElNRU9VVCAgKDIqSFopCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAjZGVmaW5lIFRYX1FfTElNSVQgICAgMzIKIHN0cnVjdCBpZmJfcHJpdmF0ZSB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CkBAIC02NCw3ICs2NCw3IEBACiBzdGF0aWMgaW50IGlmYl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBpZmJfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyB2b2lkIHJpX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkZXYpIAorc3RhdGljIHZvaWQgcmlfdGFza2xldCh1bnNpZ25lZCBsb25nIGRldikKIHsKIAogCXN0cnVjdCBuZXRfZGV2aWNlICpfZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2OwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJCXN0YXRzLT5yeF9kcm9wcGVkKys7CiAJCXJldHVybiByZXQ7CiAJfSBlbHNlIHsKLQkJLyogCisJCS8qCiAJCSAqIG5vdGUgd2UgY291bGQgYmUgZ29pbmcKIAkJICogaW5ncmVzcyAtPiBlZ3Jlc3Mgb3IKIAkJICogZWdyZXNzIC0+IGluZ3Jlc3MKQEAgLTE5OSw3ICsxOTksNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZkcC0+c3RhdHM7CiAKIAlwcl9kZWJ1ZygidGFza2xldHMgc3RhdHMgJWxkOiVsZDolbGQ6JWxkOiVsZDolbGQ6JWxkOiVsZDolbGQgXG4iLAotCQlkcC0+c3RfdGFza19lbnRlciwgZHAtPnN0X3R4cV9yZWZsX3RyeSwgZHAtPnN0X3J4cV9lbnRlciwgCisJCWRwLT5zdF90YXNrX2VudGVyLCBkcC0+c3RfdHhxX3JlZmxfdHJ5LCBkcC0+c3RfcnhxX2VudGVyLAogCQlkcC0+c3RfcngydHhfdHJhbiBkcC0+c3RfcnhxX25vdGVudGVyLCBkcC0+c3RfcnhfZnJtX2VnciwKIAkJZHAtPnN0X3J4X2ZybV9pbmcsIGRwLT5zdF9yeHFfY2hlY2ssIGRwLT5zdF9yeHFfcnNjaCApOwogCkBAIC0yNTAsNyArMjUwLDcgQEAKIAkJZnJlZV9uZXRkZXYoZGV2X2lmYik7CiAJCWRldl9pZmIgPSBOVUxMOwogCX0gZWxzZSB7Ci0JCWlmYnNbaW5kZXhdID0gZGV2X2lmYjsgCisJCWlmYnNbaW5kZXhdID0gZGV2X2lmYjsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMjYwLDMyICsyNjAsMzIgQEAKIHsKIAl1bnJlZ2lzdGVyX25ldGRldihpZmJzW2luZGV4XSk7CiAJZnJlZV9uZXRkZXYoaWZic1tpbmRleF0pOwotfSAKK30KIAogc3RhdGljIGludCBfX2luaXQgaWZiX2luaXRfbW9kdWxlKHZvaWQpCi17IAorewogCWludCBpLCBlcnIgPSAwOwotCWlmYnMgPSBrbWFsbG9jKG51bWlmYnMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7IAorCWlmYnMgPSBrbWFsbG9jKG51bWlmYnMgKiBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpZmJzKQotCQlyZXR1cm4gLUVOT01FTTsgCisJCXJldHVybiAtRU5PTUVNOwogCWZvciAoaSA9IDA7IGkgPCBudW1pZmJzICYmICFlcnI7IGkrKykKLQkJZXJyID0gaWZiX2luaXRfb25lKGkpOyAKLQlpZiAoZXJyKSB7IAorCQllcnIgPSBpZmJfaW5pdF9vbmUoaSk7CisJaWYgKGVycikgewogCQlpLS07CiAJCXdoaWxlICgtLWkgPj0gMCkKIAkJCWlmYl9mcmVlX29uZShpKTsKIAl9CiAKIAlyZXR1cm4gZXJyOwotfSAKK30KIAogc3RhdGljIHZvaWQgX19leGl0IGlmYl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8IG51bWlmYnM7IGkrKykgCi0JCWlmYl9mcmVlX29uZShpKTsgCi0Ja2ZyZWUoaWZicyk7CQorCWZvciAoaSA9IDA7IGkgPCBudW1pZmJzOyBpKyspCisJCWlmYl9mcmVlX29uZShpKTsKKwlrZnJlZShpZmJzKTsKIH0KIAogbW9kdWxlX2luaXQoaWZiX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCmluZGV4IDY4ZDhhZjcuLjdhY2JhODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvaW9jMy1ldGguYwpAQCAtMjgsNyArMjgsNyBAQAogICovCiAKICNkZWZpbmUgSU9DM19OQU1FCSJpb2MzLWV0aCIKLSNkZWZpbmUgSU9DM19WRVJTSU9OCSIyLjYuMy0zIgorI2RlZmluZSBJT0MzX1ZFUlNJT04JIjIuNi4zLTQiCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KQEAgLTExNSw3ICsxMTUsNyBAQAogc3RhdGljIHZvaWQgaW9jM19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgY29uc3QgY2hhciBpb2MzX3N0cltdID0gIklPQzMgRXRoZXJuZXQiOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpb2MzX2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBpb2MzX2V0aHRvb2xfb3BzOwogCiAvKiBXZSB1c2UgdGhpcyB0byBhY3F1aXJlIHJlY2VpdmUgc2tiJ3MgdGhhdCB3ZSBjYW4gRE1BIGRpcmVjdGx5IGludG8uICovCiAKQEAgLTE1ODAsNyArMTU4MCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlvYzNfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlvYzNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IGlvYzNfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBpb2MzX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IGlvYzNfc2V0X3NldHRpbmdzLApAQCAtMTYxMSw4ICsxNjExLDYgQEAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CQkJCS8qIExvY2sgb3V0IG90aGVycy4gKi8KIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICAqLwotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CiAJCWlwLT5lbWNyIHw9IEVNQ1JfUFJPTUlTQzsKIAkJaW9jM193X2VtY3IoaXAtPmVtY3IpOwogCQkodm9pZCkgaW9jM19yX2VtY3IoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvbWNzNzc4MC5jIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKaW5kZXggNDdmNmY2NC4uNDE1YmE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9tY3M3NzgwLmMKQEAgLTQ1LDcgKzQ1LDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS93ODM5NzdhZl9pci5jCmluZGV4IDBlYTY1YzQuLmI2OTc3NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdzgzOTc3YWZfaXIuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3c4Mzk3N2FmX2lyLmMKQEAgLTQwLDcgKzQwLDYgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMgYi9kcml2ZXJzL25ldC9pc2Etc2tlbGV0b24uYwppbmRleCA4OGFlOGEwLi45ODRjMzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pc2Etc2tlbGV0b24uYworKysgYi9kcml2ZXJzL25ldC9pc2Etc2tlbGV0b24uYwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KLSAKKwogc3RhdGljIHZvaWQgY2xlYW51cF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAjaWZkZWYganVtcGVyZWRfZG1hCkBAIC0yMDAsMTAgKzIwMCwxMCBAQAogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyoKLQkgKiBGb3IgZXRoZXJuZXQgYWRhcHRvcnMgdGhlIGZpcnN0IHRocmVlIG9jdGV0cyBvZiB0aGUgc3RhdGlvbiBhZGRyZXNzIAorCSAqIEZvciBldGhlcm5ldCBhZGFwdG9ycyB0aGUgZmlyc3QgdGhyZWUgb2N0ZXRzIG9mIHRoZSBzdGF0aW9uIGFkZHJlc3MKIAkgKiBjb250YWlucyB0aGUgbWFudWZhY3R1cmVyJ3MgdW5pcXVlIGNvZGUuIFRoYXQgbWlnaHQgYmUgYSBnb29kIHByb2JlCiAJICogbWV0aG9kLiBJZGVhbGx5IHlvdSB3b3VsZCBhZGQgYWRkaXRpb25hbCBjaGVja3MuCi0JICovIAorCSAqLwogCWlmIChpbmIoaW9hZGRyICsgMCkgIT0gU0FfQUREUjAKIAkJfHwJIGluYihpb2FkZHIgKyAxKSAhPSBTQV9BRERSMQogCQl8fAkgaW5iKGlvYWRkciArIDIpICE9IFNBX0FERFIyKQpAQCAtMjkyLDcgKzI5Miw3IEBACiAJCWlmIChpIDw9IDApIHsKIAkJCXByaW50aygiRE1BIHByb2JlIGZhaWxlZC5cbiIpOwogCQkJZ290byBvdXQxOwotCQl9IAorCQl9CiAJCWlmIChyZXF1ZXN0X2RtYShkZXYtPmRtYSwgY2FyZG5hbWUpKSB7CiAJCQlwcmludGsoInByb2JlZCBETUEgJWQgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBkZXYtPmRtYSk7CiAJCQlnb3RvIG91dDE7CkBAIC0zMTAsNyArMzEwLDcgQEAKIAlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZzZXRfbXVsdGljYXN0X2xpc3Q7CiAKICAgICAgICAgZGV2LT50eF90aW1lb3V0CQk9ICZuZXRfdHhfdGltZW91dDsKLSAgICAgICAgZGV2LT53YXRjaGRvZ190aW1lbwk9IE1ZX1RYX1RJTUVPVVQ7IAorICAgICAgICBkZXYtPndhdGNoZG9nX3RpbWVvCT0gTVlfVFhfVElNRU9VVDsKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpCkBAIC01NTEsNyArNTUxLDcgQEAKIAlkbyB7CiAJCWludCBzdGF0dXMgPSBpbncoaW9hZGRyKTsKIAkJaW50IHBrdF9sZW4gPSBpbncoaW9hZGRyKTsKLQkgIAorCiAJCWlmIChwa3RfbGVuID09IDApCQkvKiBSZWFkIGFsbCB0aGUgZnJhbWVzPyAqLwogCQkJYnJlYWs7CQkJLyogRG9uZSBmb3Igbm93ICovCiAKQEAgLTU2Niw3ICs1NjYsNyBAQAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCQkJbHAtPnN0YXRzLnJ4X2J5dGVzKz1wa3RfbGVuOwotCQkJCisKIAkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbik7CiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKQEAgLTY2Myw3ICs2NjMsNyBAQAogCiAJCW91dHcoTVVMVElDQVNULCBpb2FkZHIpOwogCX0KLQllbHNlIAorCWVsc2UKIAkJb3V0dygwLCBpb2FkZHIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCmluZGV4IGNkYzE0NDAuLjQxYjFkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCkBAIC0xMDI5LDcgKzEwMjksNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IHZldGhfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IHZldGhfZ2V0X3NldHRpbmdzLAogCS5nZXRfbGluayA9IHZldGhfZ2V0X2xpbmssCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2IuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCmluZGV4IDgyYjY3YWYuLmE1MTYwNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oCkBAIC0xMTAsOSArMTEwLDYgQEAKICNkZWZpbmUgSVhHQl9SWEJVRkZFUl84MTkyICA4MTkyCiAjZGVmaW5lIElYR0JfUlhCVUZGRVJfMTYzODQgMTYzODQKIAotLyogSG93IG1hbnkgVHggRGVzY3JpcHRvcnMgZG8gd2UgbmVlZCB0byBjYWxsIG5ldGlmX3dha2VfcXVldWU/ICovCi0jZGVmaW5lIElYR0JfVFhfUVVFVUVfV0FLRSAxNgotCiAvKiBIb3cgbWFueSBSeCBCdWZmZXJzIGRvIHdlIGJ1bmRsZSBpbnRvIG9uZSB3cml0ZSB0byB0aGUgaGFyZHdhcmUgPyAqLwogI2RlZmluZSBJWEdCX1JYX0JVRkZFUl9XUklURQk0CS8qIE11c3QgYmUgcG93ZXIgb2YgMiAqLwogCkBAIC0xNzMsNyArMTcwLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxlZF9zdGF0dXM7CiAKIAkvKiBUWCAqLwotCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyB0eF9yaW5nOworCXN0cnVjdCBpeGdiX2Rlc2NfcmluZyB0eF9yaW5nIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAJdW5zaWduZWQgbG9uZyB0aW1lb19zdGFydDsKIAl1aW50MzJfdCB0eF9jbWRfdHlwZTsKIAl1aW50NjRfdCBod19jc3VtX3R4X2dvb2Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX2V0aHRvb2wuYwppbmRleCBjZjE5Yjg5Li42NGEzODNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9ldGh0b29sLmMKQEAgLTY1NCwxMSArNjU0LDcgQEAKIAogCW1vZF90aW1lcigmYWRhcHRlci0+YmxpbmtfdGltZXIsIGppZmZpZXMpOwogCi0JaWYgKGRhdGEpCi0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShkYXRhICogSFopOwotCWVsc2UKLQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKE1BWF9TQ0hFRFVMRV9USU1FT1VUKTsKLQorCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGRhdGEgKiAxMDAwKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+YmxpbmtfdGltZXIpOwogCWl4Z2JfbGVkX29mZigmYWRhcHRlci0+aHcpOwogCWNsZWFyX2JpdChJWEdCX0xFRF9PTiwgJmFkYXB0ZXItPmxlZF9zdGF0dXMpOwpAQCAtNzAzLDcgKzY5OSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IGl4Z2JfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgPSBpeGdiX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBpeGdiX2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2h3LmMgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwppbmRleCBmN2ZhMTBlLi5hY2M2ZGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaHcuYwpAQCAtODMsNyArODMsNyBAQAogI2VuZGlmCiAKIAkvKiBEZWxheSBhIGZldyBtcyBqdXN0IHRvIGFsbG93IHRoZSByZXNldCB0byBjb21wbGV0ZSAqLwotCW1zZWNfZGVsYXkoSVhHQl9ERUxBWV9BRlRFUl9SRVNFVCk7CisJbXNsZWVwKElYR0JfREVMQVlfQUZURVJfUkVTRVQpOwogCWN0cmxfcmVnID0gSVhHQl9SRUFEX1JFRyhodywgQ1RSTDApOwogI2lmZGVmIERCRwogCS8qIE1ha2Ugc3VyZSB0aGUgc2VsZi1jbGVhcmluZyBnbG9iYWwgcmVzZXQgYml0IGRpZCBzZWxmIGNsZWFyICovCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkgKi8KIAlJWEdCX1dSSVRFX1JFRyhodywgUkNUTCwgSVhHQl9SRUFEX1JFRyhodywgUkNUTCkgJiB+SVhHQl9SQ1RMX1JYRU4pOwogCUlYR0JfV1JJVEVfUkVHKGh3LCBUQ1RMLCBJWEdCX1JFQURfUkVHKGh3LCBUQ1RMKSAmIH5JWEdCX1RDVExfVFhFTik7Ci0JbXNlY19kZWxheShJWEdCX0RFTEFZX0JFRk9SRV9SRVNFVCk7CisJbXNsZWVwKElYR0JfREVMQVlfQkVGT1JFX1JFU0VUKTsKIAogCS8qIElzc3VlIGEgZ2xvYmFsIHJlc2V0IHRvIHRoZSBNQUMuICBUaGlzIHdpbGwgcmVzZXQgdGhlIGNoaXAncwogCSAqIHRyYW5zbWl0LCByZWNlaXZlLCBETUEsIGFuZCBsaW5rIHVuaXRzLiAgSXQgd2lsbCBub3QgZWZmZWN0CkBAIC0yMzYsNiArMjM2LDE3IEBACiAJCURFQlVHT1VUKCJJZGVudGlmaWVkIEc2MTA0IG9wdGljc1xuIik7CiAJCXBoeV90eXBlID0gaXhnYl9waHlfdHlwZV9nNjEwNDsKIAkJYnJlYWs7CisJY2FzZSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0NYNDoKKwkJREVCVUdPVVQoIklkZW50aWZpZWQgQ1g0XG4iKTsKKwkJeHBha192ZW5kb3IgPSBpeGdiX2lkZW50aWZ5X3hwYWtfdmVuZG9yKGh3KTsKKwkJaWYgKHhwYWtfdmVuZG9yID09IGl4Z2JfeHBha192ZW5kb3JfaW50ZWwpIHsKKwkJCURFQlVHT1VUKCJJZGVudGlmaWVkIFRYTjE3MjAxIG9wdGljc1xuIik7CisJCQlwaHlfdHlwZSA9IGl4Z2JfcGh5X3R5cGVfdHhuMTcyMDE7CisJCX0gZWxzZSB7CisJCQlERUJVR09VVCgiSWRlbnRpZmllZCBHNjAwNSBvcHRpY3NcbiIpOworCQkJcGh5X3R5cGUgPSBpeGdiX3BoeV90eXBlX2c2MDA1OworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURFQlVHT1VUKCJVbmtub3duIHBoeXNpY2FsIGxheWVyIG1vZHVsZVxuIik7CiAJCXBoeV90eXBlID0gaXhnYl9waHlfdHlwZV91bmtub3duOwpAQCAtMjg5LDcgKzMwMCw3IEBACiAjZW5kaWYKIAogCS8qIERlbGF5IGEgZmV3IG1zIGp1c3QgdG8gYWxsb3cgdGhlIHJlc2V0IHRvIGNvbXBsZXRlICovCi0JbXNlY19kZWxheShJWEdCX0RFTEFZX0FGVEVSX0VFX1JFU0VUKTsKKwltc2xlZXAoSVhHQl9ERUxBWV9BRlRFUl9FRV9SRVNFVCk7CiAKIAlpZiAoaXhnYl9nZXRfZWVwcm9tX2RhdGEoaHcpID09IEZBTFNFKSB7CiAJCXJldHVybihGQUxTRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaWRzLmggYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfaWRzLmgKaW5kZXggNDBhMDg1Zi4uOWZkNjExOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX2lkcy5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9pZHMuaApAQCAtNDUsNiArNDUsNyBAQAogCiAjZGVmaW5lIElYR0JfREVWSUNFX0lEXzgyNTk3RVhfQ1g0ICAgMHgxMDlFCiAjZGVmaW5lIElYR0JfU1VCREVWSUNFX0lEX0EwMEMgIDB4QTAwQworI2RlZmluZSBJWEdCX1NVQkRFVklDRV9JRF9BMDFDICAweEEwMUMKIAogI2VuZGlmIC8qICNpZm5kZWYgX0lYR0JfSURTX0hfICovCiAvKiBFbmQgb2YgRmlsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKaW5kZXggN2JiZDQ0Ny4uZTM2ZGVlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCkBAIC0zNiw3ICszNiw3IEBACiAjZWxzZQogI2RlZmluZSBEUklWRVJOQVBJICItTkFQSSIKICNlbmRpZgotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4xMDktazIiRFJJVkVSTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4xMTItazIiRFJJVkVSTkFQSQogY2hhciBpeGdiX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVSU0lPTjsKIHN0YXRpYyBjaGFyIGl4Z2JfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMDYgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtMTE4LDE1ICsxMTgsMjYgQEAKIHN0YXRpYyB2b2lkIGl4Z2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICNlbmRpZgogCi0vKiBFeHBvcnRlZCBmcm9tIG90aGVyIG1vZHVsZXMgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGl4Z2JfaW9fZXJyb3JfZGV0ZWN0ZWQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCSAgICAgICAgICAgICAgICAgICAgIGVudW0gcGNpX2NoYW5uZWxfc3RhdGUgc3RhdGUpOworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYl9pb19zbG90X3Jlc2V0IChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitzdGF0aWMgdm9pZCBpeGdiX2lvX3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwogCisvKiBFeHBvcnRlZCBmcm9tIG90aGVyIG1vZHVsZXMgKi8KIGV4dGVybiB2b2lkIGl4Z2JfY2hlY2tfb3B0aW9ucyhzdHJ1Y3QgaXhnYl9hZGFwdGVyICphZGFwdGVyKTsKIAorc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaXhnYl9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBpeGdiX2lvX2Vycm9yX2RldGVjdGVkLAorCS5zbG90X3Jlc2V0ID0gaXhnYl9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgPSBpeGdiX2lvX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiX2RyaXZlciA9IHsKIAkubmFtZSAgICAgPSBpeGdiX2RyaXZlcl9uYW1lLAogCS5pZF90YWJsZSA9IGl4Z2JfcGNpX3RibCwKIAkucHJvYmUgICAgPSBpeGdiX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGl4Z2JfcmVtb3ZlKSwKKwkuZXJyX2hhbmRsZXIgPSAmaXhnYl9lcnJfaGFuZGxlcgogfTsKIAogTU9EVUxFX0FVVEhPUigiSW50ZWwgQ29ycG9yYXRpb24sIDxsaW51eC5uaWNzQGludGVsLmNvbT4iKTsKQEAgLTE0MCwxMiArMTUxLDEyIEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDA9bm9uZSwuLi4sMTY9YWxsKSIpOwogCiAvKiBzb21lIGRlZmluZXMgZm9yIGNvbnRyb2xsaW5nIGRlc2NyaXB0b3IgZmV0Y2hlcyBpbiBoL3cgKi8KLSNkZWZpbmUgUlhEQ1RMX1dUSFJFU0hfREVGQVVMVCAxNgkvKiBjaGlwIHdyaXRlcyBiYWNrIGF0IHRoaXMgbWFueSBvciBSWFQwICovCi0jZGVmaW5lIFJYRENUTF9QVEhSRVNIX0RFRkFVTFQgMAkJLyogY2hpcCBjb25zaWRlcnMgcHJlZmVjaCBiZWxvdwotCQkJCQkJICogdGhpcyAqLwotI2RlZmluZSBSWERDVExfSFRIUkVTSF9ERUZBVUxUIDAJCS8qIGNoaXAgd2lsbCBvbmx5IHByZWZldGNoIGlmIHRhaWwKLQkJCQkJCSAqIGlzIHB1c2hlZCB0aGlzIG1hbnkgZGVzY3JpcHRvcnMKLQkJCQkJCSAqIGZyb20gaGVhZCAqLworI2RlZmluZSBSWERDVExfV1RIUkVTSF9ERUZBVUxUIDE1ICAvKiBjaGlwIHdyaXRlcyBiYWNrIGF0IHRoaXMgbWFueSBvciBSWFQwICovCisjZGVmaW5lIFJYRENUTF9QVEhSRVNIX0RFRkFVTFQgMCAgIC8qIGNoaXAgY29uc2lkZXJzIHByZWZlY2ggYmVsb3cKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpcyAqLworI2RlZmluZSBSWERDVExfSFRIUkVTSF9ERUZBVUxUIDAgICAvKiBjaGlwIHdpbGwgb25seSBwcmVmZXRjaCBpZiB0YWlsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlzIHB1c2hlZCB0aGlzIG1hbnkgZGVzY3JpcHRvcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZnJvbSBoZWFkICovCiAKIC8qKgogICogaXhnYl9pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQpAQCAtMTYyLDcgKzE3Myw3IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgaXhnYl9jb3B5cmlnaHQpOwogCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmaXhnYl9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpeGdiX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGl4Z2JfaW5pdF9tb2R1bGUpOwpAQCAtMTE3NCw2ICsxMTg1LDcgQEAKIAlpbnQgZXJyOwogCiAJaWYgKGxpa2VseShza2JfaXNfZ3NvKHNrYikpKSB7CisJCXN0cnVjdCBpeGdiX2J1ZmZlciAqYnVmZmVyX2luZm87CiAJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpKSB7CiAJCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQyk7CiAJCQlpZiAoZXJyKQpAQCAtMTE5Niw2ICsxMjA4LDggQEAKIAogCQlpID0gYWRhcHRlci0+dHhfcmluZy5uZXh0X3RvX3VzZTsKIAkJY29udGV4dF9kZXNjID0gSVhHQl9DT05URVhUX0RFU0MoYWRhcHRlci0+dHhfcmluZywgaSk7CisJCWJ1ZmZlcl9pbmZvID0gJmFkYXB0ZXItPnR4X3JpbmcuYnVmZmVyX2luZm9baV07CisJCVdBUk5fT04oYnVmZmVyX2luZm8tPmRtYSAhPSAwKTsKIAogCQljb250ZXh0X2Rlc2MtPmlwY3NzID0gaXBjc3M7CiAJCWNvbnRleHRfZGVzYy0+aXBjc28gPSBpcGNzbzsKQEAgLTEyMzMsMTEgKzEyNDcsMTQgQEAKIAl1aW50OF90IGNzcywgY3NvOwogCiAJaWYobGlrZWx5KHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSkgeworCQlzdHJ1Y3QgaXhnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCQljc3MgPSBza2ItPmgucmF3IC0gc2tiLT5kYXRhOwogCQljc28gPSAoc2tiLT5oLnJhdyArIHNrYi0+Y3N1bSkgLSBza2ItPmRhdGE7CiAKIAkJaSA9IGFkYXB0ZXItPnR4X3JpbmcubmV4dF90b191c2U7CiAJCWNvbnRleHRfZGVzYyA9IElYR0JfQ09OVEVYVF9ERVNDKGFkYXB0ZXItPnR4X3JpbmcsIGkpOworCQlidWZmZXJfaW5mbyA9ICZhZGFwdGVyLT50eF9yaW5nLmJ1ZmZlcl9pbmZvW2ldOworCQlXQVJOX09OKGJ1ZmZlcl9pbmZvLT5kbWEgIT0gMCk7CiAKIAkJY29udGV4dF9kZXNjLT50dWNzcyA9IGNzczsKIAkJY29udGV4dF9kZXNjLT50dWNzbyA9IGNzbzsKQEAgLTEyODMsNiArMTMwMCw3IEBACiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlzaXplID0gbWluKGxlbiwgSVhHQl9NQVhfREFUQV9QRVJfVFhEKTsKIAkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IHNpemU7CisJCVdBUk5fT04oYnVmZmVyX2luZm8tPmRtYSAhPSAwKTsKIAkJYnVmZmVyX2luZm8tPmRtYSA9CiAJCQlwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAogCQkJCXNrYi0+ZGF0YSArIG9mZnNldCwKQEAgLTE1NDMsNiArMTU2MSwxMSBAQAogaXhnYl91cGRhdGVfc3RhdHMoc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCS8qIFByZXZlbnQgc3RhdHMgdXBkYXRlIHdoaWxlIGFkYXB0ZXIgaXMgYmVpbmcgcmVzZXQgKi8KKwlpZiAocGRldi0+ZXJyb3Jfc3RhdGUgJiYgcGRldi0+ZXJyb3Jfc3RhdGUgIT0gcGNpX2NoYW5uZWxfaW9fbm9ybWFsKQorCQlyZXR1cm47CiAKIAlpZigobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKIAkgICAobmV0ZGV2LT5tY19jb3VudCA+IElYR0JfTUFYX05VTV9NVUxUSUNBU1RfQUREUkVTU0VTKSkgewpAQCAtMTc4Nyw3ICsxODEwLDcgQEAKIAlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpKSkgewogCQlzcGluX2xvY2soJmFkYXB0ZXItPnR4X2xvY2spOwogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgotCQkgICAgKElYR0JfREVTQ19VTlVTRUQodHhfcmluZykgPiBJWEdCX1RYX1FVRVVFX1dBS0UpKQorCQkgICAgKElYR0JfREVTQ19VTlVTRUQodHhfcmluZykgPj0gREVTQ19ORUVERUQpKQogCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOwogCQlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfbG9jayk7CiAJfQpAQCAtMTk0OCwxMCArMTk3MSw5IEBACiAjZGVmaW5lIElYR0JfQ0JfTEVOR1RIIDI1NgogCQlpZiAobGVuZ3RoIDwgSVhHQl9DQl9MRU5HVEgpIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0KLQkJCSAgICBkZXZfYWxsb2Nfc2tiKGxlbmd0aCArIE5FVF9JUF9BTElHTik7CisJCQkgICAgbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CiAJCQlpZiAobmV3X3NrYikgewogCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIE5FVF9JUF9BTElHTik7Ci0JCQkJbmV3X3NrYi0+ZGV2ID0gbmV0ZGV2OwogCQkJCW1lbWNweShuZXdfc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOLAogCQkJCSAgICAgICBza2ItPmRhdGEgLSBORVRfSVBfQUxJR04sCiAJCQkJICAgICAgIGxlbmd0aCArIE5FVF9JUF9BTElHTik7CkBAIC0yMDMxLDE0ICsyMDUzLDE0IEBACiAJLyogbGVhdmUgdGhyZWUgZGVzY3JpcHRvcnMgdW51c2VkICovCiAJd2hpbGUoLS1jbGVhbmNvdW50ID4gMikgewogCQkvKiByZWN5Y2xlISBpdHMgZ29vZCBmb3IgeW91ICovCi0JCWlmICghKHNrYiA9IGJ1ZmZlcl9pbmZvLT5za2IpKQotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihhZGFwdGVyLT5yeF9idWZmZXJfbGVuCi0JCQkgICAgICAgICAgICAgICAgICAgICsgTkVUX0lQX0FMSUdOKTsKLQkJZWxzZSB7CisJCXNrYiA9IGJ1ZmZlcl9pbmZvLT5za2I7CisJCWlmIChza2IpIHsKIAkJCXNrYl90cmltKHNrYiwgMCk7CiAJCQlnb3RvIG1hcF9za2I7CiAJCX0KIAorCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKG5ldGRldiwgYWRhcHRlci0+cnhfYnVmZmVyX2xlbgorCQkJICAgICAgICAgICAgICAgKyBORVRfSVBfQUxJR04pOwogCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KIAkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CkBAIC0yMDUxLDggKzIwNzMsNiBAQAogCQkgKi8KIAkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOwogCi0JCXNrYi0+ZGV2ID0gbmV0ZGV2OwotCiAJCWJ1ZmZlcl9pbmZvLT5za2IgPSBza2I7CiAJCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBhZGFwdGVyLT5yeF9idWZmZXJfbGVuOwogbWFwX3NrYjoKQEAgLTIxOTAsNyArMjIxMCw3IEBACiAKIHN0YXRpYyB2b2lkIGl4Z2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXYtPnByaXY7CisJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAKIAlkaXNhYmxlX2lycShhZGFwdGVyLT5wZGV2LT5pcnEpOwogCWl4Z2JfaW50cihhZGFwdGVyLT5wZGV2LT5pcnEsIGRldiwgTlVMTCk7CkBAIC0yMTk4LDQgKzIyMTgsOTggQEAKIH0KICNlbmRpZgogCisvKioKKyAqIGl4Z2JfaW9fZXJyb3JfZGV0ZWN0ZWQoKSAtIGNhbGxlZCB3aGVuIFBDSSBlcnJvciBpcyBkZXRlY3RlZAorICogQHBkZXYgICAgcG9pbnRlciB0byBwY2kgZGV2aWNlIHdpdGggZXJyb3IKKyAqIEBzdGF0ZSAgIHBjaSBjaGFubmVsIHN0YXRlIGFmdGVyIGVycm9yCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYnkgdGhlIFBDSSBzdWJzeXN0ZW0gd2hlbmV2ZXIKKyAqIGEgUENJIGJ1cyBlcnJvciBpcyBkZXRlY3RlZC4KKyAqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgaXhnYl9pb19lcnJvcl9kZXRlY3RlZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkgICAgICAgICAgICAgZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisKKwlpZihuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWl4Z2JfZG93bihhZGFwdGVyLCBUUlVFKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCS8qIFJlcXVlc3QgYSBzbG90IHJlc2V0LiAqLworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCisvKioKKyAqIGl4Z2JfaW9fc2xvdF9yZXNldCAtIGNhbGxlZCBhZnRlciB0aGUgcGNpIGJ1cyBoYXMgYmVlbiByZXNldC4KKyAqIEBwZGV2ICAgIHBvaW50ZXIgdG8gcGNpIGRldmljZSB3aXRoIGVycm9yCisgKgorICogVGhpcyBjYWxsYmFjayBpcyBjYWxsZWQgYWZ0ZXIgdGhlIFBDSSBidXNzIGhhcyBiZWVuIHJlc2V0LgorICogQmFzaWNhbGx5LCB0aGlzIHRyaWVzIHRvIHJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLgorICogVGhpcyBpcyBhIHNob3J0ZW5lZCB2ZXJzaW9uIG9mIHRoZSBkZXZpY2UgcHJvYmUvZGlzY292ZXJ5IGNvZGUsCisgKiBpdCByZXNlbWJsZXMgdGhlIGZpcnN0LWhhbGYgb2YgdGhlIGl4Z2JfcHJvYmUoKSByb3V0aW5lLgorICovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBpeGdiX2lvX3Nsb3RfcmVzZXQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGl4Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldi0+cHJpdjsKKworCWlmKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisKKwkvKiBQZXJmb3JtIGNhcmQgcmVzZXQgb25seSBvbiBvbmUgaW5zdGFuY2Ugb2YgdGhlIGNhcmQgKi8KKwlpZiAoMCAhPSBQQ0lfRlVOQyAocGRldi0+ZGV2Zm4pKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwlpeGdiX3Jlc2V0KGFkYXB0ZXIpOworCisJLyogTWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLworCWlmKCFpeGdiX3ZhbGlkYXRlX2VlcHJvbV9jaGVja3N1bSgmYWRhcHRlci0+aHcpKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIkFmdGVyIHJlc2V0LCB0aGUgRUVQUk9NIGNoZWNrc3VtIGlzIG5vdCB2YWxpZC5cbiIpOworCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwl9CisJaXhnYl9nZXRfZWVfbWFjX2FkZHIoJmFkYXB0ZXItPmh3LCBuZXRkZXYtPmRldl9hZGRyKTsKKwltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCisJaWYoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7CisJCURQUklOVEsoUFJPQkUsIEVSUiwgIkFmdGVyIHJlc2V0LCBpbnZhbGlkIE1BQyBhZGRyZXNzLlxuIik7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKKy8qKgorICogaXhnYl9pb19yZXN1bWUgLSBjYWxsZWQgd2hlbiBpdHMgT0sgdG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb25zCisgKiBAcGRldiAgICBwb2ludGVyIHRvIHBjaSBkZXZpY2Ugd2l0aCBlcnJvcgorICoKKyAqIFRoZSBlcnJvciByZWNvdmVyeSBkcml2ZXIgdGVsbHMgdXMgdGhhdCBpdHMgT0sgdG8gcmVzdW1lCisgKiBub3JtYWwgb3BlcmF0aW9uLiBJbXBsZW1lbnRhdGlvbiByZXNlbWJsZXMgdGhlIHNlY29uZC1oYWxmCisgKiBvZiB0aGUgaXhnYl9wcm9iZSgpIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2b2lkIGl4Z2JfaW9fcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXYtPnByaXY7CisKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWlmKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpZihpeGdiX3VwKGFkYXB0ZXIpKSB7CisJCQlwcmludGsgKCJpeGdiOiBjYW4ndCBicmluZyBkZXZpY2UgYmFjayB1cCBhZnRlciByZXNldFxuIik7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7Cit9CisKIC8qIGl4Z2JfbWFpbi5jICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2Jfb3NkZXAuaCBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCmluZGV4IGVlOTgyZmUuLjE5Y2IxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9vc2RlcC5oCkBAIC00MCwxOCArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLSNpZm5kZWYgbXNlY19kZWxheQotI2RlZmluZSBtc2VjX2RlbGF5KHgpCWRvIHsgaWYoaW5faW50ZXJydXB0KCkpIHsgXAotCQkJCS8qIERvbid0IG1kZWxheSBpbiBpbnRlcnJ1cHQgY29udGV4dCEgKi8gXAotCSAgICAgICAgICAgICAgICAJQlVHKCk7IFwKLQkJCX0gZWxzZSB7IFwKLQkJCQltc2xlZXAoeCk7IFwKLQkJCX0gfSB3aGlsZSgwKQotI2VuZGlmCi0KLSNkZWZpbmUgUENJX0NPTU1BTkRfUkVHSVNURVIgICBQQ0lfQ09NTUFORAotI2RlZmluZSBDTURfTUVNX1dSVF9JTlZBTElEQVRFIFBDSV9DT01NQU5EX0lOVkFMSURBVEUKLQogdHlwZWRlZiBlbnVtIHsKICN1bmRlZiBGQUxTRQogCUZBTFNFID0gMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2phenpzb25pYy5jIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKaW5kZXggNjYxZDc1Yi4uZDM0YWZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvamF6enNvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvamF6enNvbmljLmMKQEAgLTcsMTAgKzcsMTAgQEAKICAqIGRoZCdzIHN1cHBvcnQgZm9yIDE2LWJpdCBjYXJkcy4KICAqCiAgKiAoQykgMTk5NiwxOTk4IGJ5IFRob21hcyBCb2dlbmRvZXJmZXIgKHRzYm9nZW5kQGFscGhhLmZyYW5rZW4uZGUpCi0gKiAKKyAqCiAgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3b3JrIGZyb20gQW5kcmVhcyBCdXNzZSwgYnV0IG1vc3Qgb2YKICAqIHRoZSBjb2RlIGlzIHJld3JpdHRlbi4KLSAqIAorICoKICAqIChDKSAxOTk1IGJ5IEFuZHJlYXMgQnVzc2UgKGFuZHlAd2FsZG9yZi1nbWJoLmRlKQogICoKICAqIEEgZHJpdmVyIGZvciB0aGUgb25ib2FyZCBTb25pYyBldGhlcm5ldCBjb250cm9sbGVyIG9uIE1pcHMgSmF6egpAQCAtNjUsNyArNjUsNyBAQAogLyogdXNlIDAgZm9yIHByb2R1Y3Rpb24sIDEgZm9yIHZlcmlmaWNhdGlvbiwgPjEgZm9yIGRlYnVnICovCiAjaWZkZWYgU09OSUNfREVCVUcKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc29uaWNfZGVidWcgPSBTT05JQ19ERUJVRzsKLSNlbHNlIAorI2Vsc2UKIHN0YXRpYyB1bnNpZ25lZCBpbnQgc29uaWNfZGVidWcgPSAxOwogI2VuZGlmCiAKQEAgLTgwLDcgKzgwLDcgQEAKIC8qCiAgKiBXZSBjYW5ub3QgdXNlIHN0YXRpb24gKGV0aGVybmV0KSBhZGRyZXNzIHByZWZpeGVzIHRvIGRldGVjdCB0aGUKICAqIHNvbmljIGNvbnRyb2xsZXIgc2luY2UgdGhlc2UgYXJlIGJvYXJkIG1hbnVmYWN0dXJlciBkZXBlbmRlZC4KLSAqIFNvIHdlIGNoZWNrIGZvciBrbm93biBTaWxpY29uIFJldmlzaW9uIElEcyBpbnN0ZWFkLiAKKyAqIFNvIHdlIGNoZWNrIGZvciBrbm93biBTaWxpY29uIFJldmlzaW9uIElEcyBpbnN0ZWFkLgogICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQga25vd25fcmV2aXNpb25zW10gPQogewpAQCAtMTE5LDcgKzExOSw3IEBACiAJCSAgICAgICBzaWxpY29uX3JldmlzaW9uKTsKIAkJZ290byBvdXQ7CiAJfQotICAgIAorCiAJaWYgKHNvbmljX2RlYnVnICAmJiAgdmVyc2lvbl9wcmludGVkKysgPT0gMCkKIAkJcHJpbnRrKHZlcnNpb24pOwogCkBAIC0xMzgsNyArMTM4LDcgQEAKIAl9CiAKIAllcnIgPSAtRU5PTUVNOwotICAgIAorCiAJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KIAogCWxwLT5kbWFfYml0bW9kZSA9IFNPTklDX0JJVE1PREUzMjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xhbmNlLmMgYi9kcml2ZXJzL25ldC9sYW5jZS5jCmluZGV4IGMxYzM0NTIuLmYzNDllODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvbGFuY2UuYwpAQCAtMTksNyArMTksNyBAQAogCS0gYWxpZ25tZW50IHByb2JsZW0gd2l0aCAxLjMuKiBrZXJuZWwgYW5kIHNvbWUgbWlub3IgY2hhbmdlcy4KIAlUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBiaWdidWcuZnJhbmtlbi5kZSk6CiAJLSBhZGRlZCBzdXBwb3J0IGZvciBMaW51eC9BbHBoYSwgYnV0IHJlbW92ZWQgbW9zdCBvZiBpdCwgYmVjYXVzZQotICAgICAgICBpdCB3b3JrZWQgb25seSBmb3IgdGhlIFBDSSBjaGlwLiAKKyAgICAgICAgaXQgd29ya2VkIG9ubHkgZm9yIHRoZSBQQ0kgY2hpcC4KICAgICAgIC0gYWRkZWQgaG9vayBmb3IgdGhlIDMyYml0IGxhbmNlIGRyaXZlcgogICAgICAgLSBhZGRlZCBQQ25ldFBDSSBJSSAoNzlDOTcwQSkgdG8gY2hpcCB0YWJsZQogCVBhdWwgR29ydG1ha2VyIChncGcxMDlAcnNwaHkxLmFudS5lZHUuYXUpOgpAQCAtMzEsNyArMzEsNyBAQAogICAgICAgICAgICAgICAgICAgYmVmb3JlIHVucmVnaXN0ZXJfbmV0ZGV2KCkgd2hpY2ggY2F1c2VkIE5VTEwgcG9pbnRlcgogICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlIGxhdGVyIGluIHRoZSBjaGFpbiAoaW4gcnRuZXRsaW5rX2ZpbGxfaWZpbmZvKCkpCiAgICAgICAgICAgICAgICAgICAtLSBNaWthIEt1b3BwYWxhIDxtaWt1QGlraS5maT4KLSAgICAKKwogICAgIEZvcndhcmQgcG9ydGVkIHYxLjE0IHRvIDIuMS4xMjksIG1lcmdlZCB0aGUgUENJIGFuZCBtaXNjIGNoYW5nZXMgZnJvbQogICAgIHRoZSAyLjEgdmVyc2lvbiBvZiB0aGUgb2xkIGRyaXZlciAtIEFsYW4gQ294CiAKQEAgLTQyLDcgKzQyLDcgQEAKIAlWZXNzZWxpbiBLb3N0YWRpbm92IDx2ZXNvayBhdCB5YWhvbyBkb3QgY29tID4gLSAyMi80LzIwMDQKICovCiAKLXN0YXRpYyBjb25zdCBjaGFyIHZlcnNpb25bXSA9ICJsYW5jZS5jOnYxLjE1YWMgMTk5OS8xMS8xMyBkcGxhdHRAM2RvLmNvbSwgYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292XG4iOworc3RhdGljIGNvbnN0IGNoYXIgdmVyc2lvbltdID0gImxhbmNlLmM6djEuMTYgMjAwNi8xMS8wOSBkcGxhdHRAM2RvLmNvbSwgYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292XG4iOwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0zMDcsNyArMzA3LDcgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGxhbmNlX3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0MCisKIAogI2lmZGVmIE1PRFVMRQogI2RlZmluZSBNQVhfQ0FSRFMJCTgJLyogTWF4IG51bWJlciBvZiBpbnRlcmZhY2VzIChjYXJkcykgcGVyIG1vZHVsZSAqLwpAQCAtMzI2LDcgKzMyNiw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIkxBTkNFL1BDbmV0IElSUSBudW1iZXIgKGlnbm9yZWQgZm9yIHNvbWUgZGV2aWNlcykiKTsKIE1PRFVMRV9QQVJNX0RFU0MobGFuY2VfZGVidWcsICJMQU5DRS9QQ25ldCBkZWJ1ZyBsZXZlbCAoMC03KSIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwpAQCAtMzc0LDcgKzM3NCw3IEBACiAJZm9yICh0aGlzX2RldiA9IDA7IHRoaXNfZGV2IDwgTUFYX0NBUkRTOyB0aGlzX2RldisrKSB7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfbGFuY2VbdGhpc19kZXZdOwogCQlpZiAoZGV2KSB7Ci0JCQl1bnJlZ2lzdGVyX25ldGRldihkZXYpOwkKKwkJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJCQljbGVhbnVwX2NhcmQoZGV2KTsKIAkJCWZyZWVfbmV0ZGV2KGRldik7CiAJCX0KQEAgLTUzMSw3ICs1MzEsNyBAQAogCiAJZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7CiAJLyogTWFrZSBjZXJ0YWluIHRoZSBkYXRhIHN0cnVjdHVyZXMgdXNlZCBieSB0aGUgTEFOQ0UgYXJlIGFsaWduZWQgYW5kIERNQWJsZS4gKi8KLQkJCisKIAlscCA9IGttYWxsb2Moc2l6ZW9mKCpscCksIEdGUF9ETUEgfCBHRlBfS0VSTkVMKTsKIAlpZihscD09TlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02NTYsNyArNjU2LDcgQEAKIAkJCW91dHcoMHg3ZjA0LCBpb2FkZHIrTEFOQ0VfREFUQSk7IC8qIENsZWFyIHRoZSBtZW1vcnkgZXJyb3IgYml0cy4gKi8KIAkJCWlmIChyZXF1ZXN0X2RtYShkbWEsIGNoaXBuYW1lKSkKIAkJCQljb250aW51ZTsKLQkJCQkKKwogCQkJZmxhZ3M9Y2xhaW1fZG1hX2xvY2soKTsKIAkJCXNldF9kbWFfbW9kZShkbWEsIERNQV9NT0RFX0NBU0NBREUpOwogCQkJZW5hYmxlX2RtYShkbWEpOwpAQCAtNzM3LDcgKzczNyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotDAorCiBzdGF0aWMgaW50CiBsYW5jZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC04MDEsNyArODAxLDcgQEAKIAl3aGlsZSAoaSsrIDwgMTAwKQogCQlpZiAoaW53KGlvYWRkcitMQU5DRV9EQVRBKSAmIDB4MDEwMCkKIAkJCWJyZWFrOwotCS8qIAorCS8qCiAJICogV2UgdXNlZCB0byBjbGVhciB0aGUgSW5pdERvbmUgYml0LCAweDAxMDAsIGhlcmUgYnV0IE1hcmsgU3RvY2t0b24KIAkgKiByZXBvcnRzIHRoYXQgZG9pbmcgc28gdHJpZ2dlcnMgYSBidWcgaW4gdGhlICc5NzQuCiAJICovCkBAIC04MjYsNyArODI2LDcgQEAKICAgIHJlc3RhcnRpbmcgdGhlIGNoaXAsIGJ1dCBJJ20gdG9vIGxhenkgdG8gZG8gc28gcmlnaHQgbm93LiAgZHBsYXR0QDNkby5jb20KICovCiAKLXN0YXRpYyB2b2lkIAorc3RhdGljIHZvaWQKIGxhbmNlX3B1cmdlX3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CkBAIC05NzIsNyArOTcyLDcgQEAKIAkJCQlnb3RvIG91dDsKIAkJCWxwLT50eF9yaW5nW2VudHJ5XS5sZW5ndGggPSAtRVRIX1pMRU47CiAJCX0KLQkJZWxzZSAKKwkJZWxzZQogCQkJbHAtPnR4X3JpbmdbZW50cnldLmxlbmd0aCA9IC1za2ItPmxlbjsKIAl9IGVsc2UKIAkJbHAtPnR4X3JpbmdbZW50cnldLmxlbmd0aCA9IC1za2ItPmxlbjsKQEAgLTEwMjcsNyArMTAyNyw3IEBACiAKIAlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlscCA9IGRldi0+cHJpdjsKLQkKKwogCXNwaW5fbG9jayAoJmxwLT5kZXZsb2NrKTsKIAogCW91dHcoMHgwMCwgZGV2LT5iYXNlX2FkZHIgKyBMQU5DRV9BRERSKTsKQEAgLTEwNTEsNyArMTA1MSw3IEBACiAJCQl3aGlsZSAoZGlydHlfdHggPCBscC0+Y3VyX3R4KSB7CiAJCQkJaW50IGVudHJ5ID0gZGlydHlfdHggJiBUWF9SSU5HX01PRF9NQVNLOwogCQkJCWludCBzdGF0dXMgPSBscC0+dHhfcmluZ1tlbnRyeV0uYmFzZTsKLQkJCQorCiAJCQkJaWYgKHN0YXR1cyA8IDApCiAJCQkJCWJyZWFrOwkJCS8qIEl0IHN0aWxsIGhhc24ndCBiZWVuIFR4ZWQgKi8KIApAQCAtMTE0Miw3ICsxMTQyLDcgQEAKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CiAJaW50IGVudHJ5ID0gbHAtPmN1cl9yeCAmIFJYX1JJTkdfTU9EX01BU0s7CiAJaW50IGk7Ci0JCQorCiAJLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KIAl3aGlsZSAobHAtPnJ4X3JpbmdbZW50cnldLmJhc2UgPj0gMCkgewogCQlpbnQgc3RhdHVzID0gbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UgPj4gMjQ7CkBAIC0xMTYwLDEyICsxMTYwLDEyIEBACiAJCQlpZiAoc3RhdHVzICYgMHgwNCkgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJCQlscC0+cnhfcmluZ1tlbnRyeV0uYmFzZSAmPSAweDAzZmZmZmZmOwogCQl9Ci0JCWVsc2UgCisJCWVsc2UKIAkJewogCQkJLyogTWFsbG9jIHVwIG5ldyBidWZmZXIsIGNvbXBhdGlibGUgd2l0aCBuZXQzLiAqLwogCQkJc2hvcnQgcGt0X2xlbiA9IChscC0+cnhfcmluZ1tlbnRyeV0ubXNnX2xlbmd0aCAmIDB4ZmZmKS00OwogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJCQorCiAJCQlpZihwa3RfbGVuPDYwKQogCQkJewogCQkJCXByaW50aygiJXM6IFJ1bnQgcGFja2V0IVxuIixkZXYtPm5hbWUpOwpAQCAtMTE3NCwxNCArMTE3NCwxNCBAQAogCQkJZWxzZQogCQkJewogCQkJCXNrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbisyKTsKLQkJCQlpZiAoc2tiID09IE5VTEwpIAorCQkJCWlmIChza2IgPT0gTlVMTCkKIAkJCQl7CiAJCQkJCXByaW50aygiJXM6IE1lbW9yeSBzcXVlZXplLCBkZWZlcnJpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsKIAkJCQkJZm9yIChpPTA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykKIAkJCQkJCWlmIChscC0+cnhfcmluZ1soZW50cnkraSkgJiBSWF9SSU5HX01PRF9NQVNLXS5iYXNlIDwgMCkKIAkJCQkJCQlicmVhazsKIAotCQkJCQlpZiAoaSA+IFJYX1JJTkdfU0laRSAtMikgCisJCQkJCWlmIChpID4gUlhfUklOR19TSVpFIC0yKQogCQkJCQl7CiAJCQkJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCQkJbHAtPnJ4X3JpbmdbZW50cnldLmJhc2UgfD0gMHg4MDAwMDAwMDsKQEAgLTEyODEsOCArMTI4MSw2IEBACiAJb3V0dygweDAwMDQsIGlvYWRkcitMQU5DRV9EQVRBKTsgLyogVGVtcG9yYXJpbHkgc3RvcCB0aGUgbGFuY2UuCSAqLwogCiAJaWYgKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MpIHsKLQkJLyogTG9nIGFueSBuZXQgdGFwcy4gKi8KLQkJcHJpbnRrKCIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lKTsKIAkJb3V0dygxNSwgaW9hZGRyK0xBTkNFX0FERFIpOwogCQlvdXR3KDB4ODAwMCwgaW9hZGRyK0xBTkNFX0RBVEEpOyAvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sYXNpXzgyNTk2LmMgYi9kcml2ZXJzL25ldC9sYXNpXzgyNTk2LmMKaW5kZXggMWFiMDk0NC4uZGExZWVkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGFzaV84MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2xhc2lfODI1OTYuYwpAQCAtNSwxNCArNSwxNCBAQAogICAgYnV0IHRoZXJlIHdlcmUgdG9vIG1hbnkgaG9vcHMgd2hpY2ggSFAgd2FudHMganVtcGVkIHRocm91Z2ggdG8KICAgIGtlZXAgdGhpcyBjb2RlIGluIHRoZXJlIGluIGEgc2FuZSBtYW5uZXIuCiAKLSAgIDMgcHJpbWFyeSBzb3VyY2VzIG9mIHRoZSBtZXNzIC0tIAorICAgMyBwcmltYXJ5IHNvdXJjZXMgb2YgdGhlIG1lc3MgLS0KICAgIDEpIGhwcGEgbmVlZHMgKmxvdHMqIG9mIGNhY2hlbGluZSBmbHVzaGluZyB0byBrZWVwIHRoaXMga2luZCBvZgogICAgTU1JTyBydW5uaW5nLgogCiAgICAyKSBUaGUgODI1OTYgbmVlZHMgdG8gc2VlIGFsbCBvZiBpdHMgcG9pbnRlcnMgYXMgdGhlaXIgcGh5c2ljYWwKICAgIGFkZHJlc3MuICBUaHVzIHZpcnRfdG9fYnVzL2J1c190b192aXJ0IGFyZSAqZXZlcnl3aGVyZSouCiAKLSAgIDMpIFRoZSBpbXBsZW1lbnRhdGlvbiBIUCBpcyB1c2luZyBzZWVtcyB0byBiZSBzaWduaWZpY2FudGx5IHBpY2tpZXIgCisgICAzKSBUaGUgaW1wbGVtZW50YXRpb24gSFAgaXMgdXNpbmcgc2VlbXMgdG8gYmUgc2lnbmlmaWNhbnRseSBwaWNraWVyCiAgICBhYm91dCB3aGVuIGFuZCBob3cgdGhlIGNvbW1hbmQgYW5kIFJYIHVuaXRzIGFyZSBzdGFydGVkLiAgc29tZQogICAgY29tbWFuZCBvcmRlcmluZyB3YXMgY2hhbmdlZC4KIApAQCAtMjEsNyArMjEsNyBAQAogICAgZnVsbCByZXdyaXRlIGNhbiBiZSBteSBndWVzdC4KIAogICAgU3BsaXQgMDIvMTMvMjAwMCBTYW0gQ3JlYXNleSAoc2FtbXlAb2gudmVyaW8uY29tKQotICAgCisKICAgIDAyLzAxLzIwMDAgIEluaXRpYWwgbW9kaWZpY2F0aW9ucyBmb3IgcGFyaXNjIGJ5IEhlbGdlIERlbGxlciAoZGVsbGVyQGdteC5kZSkKICAgIDAzLzAyLzIwMDAgIGNoYW5nZXMgZm9yIGJldHRlci9jb3JyZWN0KD8pIGNhY2hlLWZsdXNoaW5nIChkZWxsZXIpCiAqLwpAQCAtMTcyLDcgKzE3Miw3IEBACiAjZGVmaW5lIFBPUlRfQUxUU0NQCQkweDAyCS8qIGFsdGVybmF0ZSBTQ0IgYWRkcmVzcyAqLwogI2RlZmluZSBQT1JUX0FMVERVTVAJCTB4MDMJLyogQWx0ZXJuYXRlIERVTVAgYWRkcmVzcyAqLwogCi1zdGF0aWMgaW50IGk1OTZfZGVidWcgPSAoREVCX1NFUklPVVN8REVCX1BST0JFKTsgIAorc3RhdGljIGludCBpNTk2X2RlYnVnID0gKERFQl9TRVJJT1VTfERFQl9QUk9CRSk7CiAKIE1PRFVMRV9BVVRIT1IoIlJpY2hhcmQgSGlyc3QiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaTgyNTk2IGRyaXZlciIpOwpAQCAtMjY1LDkgKzI2NSw5IEBACiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKICNpZmRlZiBfX0xQNjRfXwogCXUzMiBjYWNoZV9wYWRbNl07CQkvKiBUb3RhbCA2NCBieXRlcy4uLiAqLwotI2Vsc2UgICAgCisjZWxzZQogCXUzMiBjYWNoZV9wYWRbMV07CQkvKiBUb3RhbCAzMiBieXRlcy4uLiAqLwotI2VuZGlmICAgIAorI2VuZGlmCiB9OwogCiBzdHJ1Y3QgdGRyX2NtZCB7CkBAIC0zMDEsOSArMzAxLDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzaXplOwogCXN0cnVjdCBpNTk2X3JmZCAqdl9uZXh0OwkvKiBBZGRyZXNzIGZyb20gQ1BVcyB2aWV3cG9pbnQgKi8KIAlzdHJ1Y3QgaTU5Nl9yZmQgKnZfcHJldjsKLSNpZm5kZWYgX19MUDY0X18gICAgCisjaWZuZGVmIF9fTFA2NF9fCiAJdTMyIGNhY2hlX3BhZFsyXTsJCS8qIFRvdGFsIDMyIGJ5dGVzLi4uICovCi0jZW5kaWYgICAgCisjZW5kaWYKIH07CiAKIHN0cnVjdCBpNTk2X3JiZCB7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAkJCQkJLyogVG90YWwgMzIgYnl0ZXMuLi4gKi8KICNpZmRlZiBfX0xQNjRfXwogICAgIHUzMiBjYWNoZV9wYWRbNF07Ci0jZW5kaWYgICAgCisjZW5kaWYKIH07CiAKIC8qIFRoZXNlIHZhbHVlcyBhcyBjaG9zZW4gc28gc3RydWN0IGk1OTZfcHJpdmF0ZSBmaXRzIGluIG9uZSBwYWdlLi4uICovCkBAIC02MDUsNyArNjA1LDcgQEAKIAkJaWYgKHJiZC0+c2tiID09IE5VTEwpCiAJCQlicmVhazsKIAkJZG1hX3VubWFwX3NpbmdsZShscC0+ZGV2LAotCQkJCSAoZG1hX2FkZHJfdClXU1dBUGNoYXIocmJkLT5iX2RhdGEpLCAKKwkJCQkgKGRtYV9hZGRyX3QpV1NXQVBjaGFyKHJiZC0+Yl9kYXRhKSwKIAkJCQkgUEtUX0JVRl9TWiwgRE1BX0ZST01fREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYihyYmQtPnNrYik7CiAJfQpAQCAtNjQzLDcgKzY0Myw3IEBACiAJCXByaW50aygiUkVTRVQgODI1OTYgcG9ydDogJWx4ICh3aXRoIElSUSAlZCBkaXNhYmxlZClcbiIsCiAJCSAgICAgICAoZGV2LT5iYXNlX2FkZHIgKyBQQV9JODI1OTZfUkVTRVQpLAogCQkgICAgICAgZGV2LT5pcnEpKTsKLQkKKwogCWdzY193cml0ZWwoMCwgKGRldi0+YmFzZV9hZGRyICsgUEFfSTgyNTk2X1JFU0VUKSk7IC8qIEhhcmQgUmVzZXQgKi8KIAl1ZGVsYXkoMTAwKTsJCQkvKiBXYWl0IDEwMHVzIC0gc2VlbXMgdG8gaGVscCAqLwogCkBAIC02NjYsNyArNjY2LDcgQEAKIAlDSEVDS19XQkFDSygmKGxwLT5zY3ApLCBzaXplb2Yoc3RydWN0IGk1OTZfc2NwKSk7CiAJQ0hFQ0tfV0JBQ0soJihscC0+aXNjcCksIHNpemVvZihzdHJ1Y3QgaTU5Nl9pc2NwKSk7CiAKLQlNUFVfUE9SVChkZXYsIFBPUlRfQUxUU0NQLCB2aXJ0X3RvX2RtYShscCwmbHAtPnNjcCkpOwkKKwlNUFVfUE9SVChkZXYsIFBPUlRfQUxUU0NQLCB2aXJ0X3RvX2RtYShscCwmbHAtPnNjcCkpOwogCiAJQ0EoZGV2KTsKIApAQCAtNzU1LDcgKzc1NSw3IEBACiAJCX0KIAkJREVCKERFQl9SWEZSQU1FLCBwcmludGsoIiAgcmZkICVwLCByZmQucmJkICUwOHgsIHJmZC5zdGF0ICUwNHhcbiIsCiAJCQlyZmQsIHJmZC0+cmJkLCByZmQtPnN0YXQpKTsKLQkJCisKIAkJaWYgKHJiZCAhPSBOVUxMICYmICgocmZkLT5zdGF0KSAmIFNUQVRfT0spKSB7CiAJCQkvKiBhIGdvb2QgZnJhbWUgKi8KIAkJCWludCBwa3RfbGVuID0gcmJkLT5jb3VudCAmIDB4M2ZmZjsKQEAgLTk5Niw3ICs5OTYsNyBAQAogCiAJdGludCA9ICh2b2xhdGlsZSBpbnQgKikoJihscC0+c2NwKSk7CiAJZGF0YSA9IHZpcnRfdG9fZG1hKGxwLHRpbnQpOwotCQorCiAJdGludFsxXSA9IC0xOwogCUNIRUNLX1dCQUNLKHRpbnQsUEFHRV9TSVpFKTsKIApAQCAtMTA4Nyw3ICsxMDg3LDcgQEAKIAkJCXJldHVybiAwOwogCQlsZW5ndGggPSBFVEhfWkxFTjsKIAl9Ci0JCisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAl0eF9jbWQgPSBscC0+dHhfY21kcyArIGxwLT5uZXh0X3R4X2NtZDsKQEAgLTExOTQsNyArMTE5NCw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNQUMgb2YgSFA3MDAgTEFOIHJlYWQgZnJvbSBFRVBST01cbiIsIF9fRklMRV9fKTsKIAl9CiAKLQlkZXYtPm1lbV9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZ2VuX2RldiwgCisJZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgZG1hX2FsbG9jX25vbmNvaGVyZW50KGdlbl9kZXYsCiAJCXNpemVvZihzdHJ1Y3QgaTU5Nl9wcml2YXRlKSwgJmRtYV9hZGRyLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRldi0+bWVtX3N0YXJ0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENvdWxkbid0IGdldCBzaGFyZWQgbWVtb3J5XG4iLCBfX0ZJTEVfXyk7CkBAIC0xMjMzLDcgKzEyMzMsNyBAQAogCWkgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoaSkgewogCQlscCA9IGRldi0+cHJpdjsKLQkJZG1hX2ZyZWVfbm9uY29oZXJlbnQobHAtPmRldiwgc2l6ZW9mKHN0cnVjdCBpNTk2X3ByaXZhdGUpLCAKKwkJZG1hX2ZyZWVfbm9uY29oZXJlbnQobHAtPmRldiwgc2l6ZW9mKHN0cnVjdCBpNTk2X3ByaXZhdGUpLAogCQkJCSAgICAodm9pZCAqKWRldi0+bWVtX3N0YXJ0LCBscC0+ZG1hX2FkZHIpOwogCQlyZXR1cm4gaTsKIAl9OwpAQCAtMTQwMCw3ICsxNDAwLDcgQEAKIAlDSEVDS19XQkFDSygmbHAtPnNjYiwgc2l6ZW9mKHN0cnVjdCBpNTk2X3NjYikpOwogCiAJLyogREFOR0VSOiBJIHN1c3BlY3QgdGhhdCBzb21lIGtpbmQgb2YgaW50ZXJydXB0Ci0JIGFja25vd2xlZGdlbWVudCBhc2lkZSBmcm9tIGFja2luZyB0aGUgODI1OTYgbWlnaHQgYmUgbmVlZGVkIAorCSBhY2tub3dsZWRnZW1lbnQgYXNpZGUgZnJvbSBhY2tpbmcgdGhlIDgyNTk2IG1pZ2h0IGJlIG5lZWRlZAogCSBoZXJlLi4uICBidXQgaXQncyBydW5uaW5nIGFjY2VwdGFibHkgd2l0aG91dCAqLwogCiAJQ0EoZGV2KTsKQEAgLTE0OTgsNyArMTQ5OCw3IEBACiAJCXByaW50aygiJXM6IE9ubHkgJWQgbXVsdGljYXN0IGFkZHJlc3NlcyBzdXBwb3J0ZWQiLAogCQkJZGV2LT5uYW1lLCBjbnQpOwogCX0KLQkKKwogCWlmIChkZXYtPm1jX2NvdW50ID4gMCkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJdW5zaWduZWQgY2hhciAqY3A7CkBAIC0xNTM5LDcgKzE1MzksNyBAQAogCiAJaWYgKG51bV9kcml2ZXJzID09IDApCiAJCXByaW50ayhLRVJOX0lORk8gTEFTSV84MjU5Nl9EUklWRVJfVkVSU0lPTiAiXG4iKTsKLQkKKwogCWlmICghZGV2LT5pcnEpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSVJRIG5vdCBmb3VuZCBmb3IgaTgyNTk2IGF0IDB4JWx4XG4iLAogCQkJX19GSUxFX18sIGRldi0+aHBhLnN0YXJ0KTsKQEAgLTE2MDIsMTUgKzE2MDIsMTUgQEAKIAlmb3IgKGk9MDsgaTxNQVhfRFJJVkVSUzsgaSsrKSB7CiAJCXN0cnVjdCBpNTk2X3ByaXZhdGUgKmxwOwogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2aWNlOwotCQkKKwogCQluZXRkZXZpY2UgPSBuZXRkZXZzW2ldOwotCQlpZiAoIW5ldGRldmljZSkgCisJCWlmICghbmV0ZGV2aWNlKQogCQkJY29udGludWU7Ci0JCQorCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldmljZSk7CiAKIAkJbHAgPSBuZXRkZXZpY2UtPnByaXY7Ci0JCWRtYV9mcmVlX25vbmNvaGVyZW50KGxwLT5kZXYsIHNpemVvZihzdHJ1Y3QgaTU5Nl9wcml2YXRlKSwgCisJCWRtYV9mcmVlX25vbmNvaGVyZW50KGxwLT5kZXYsIHNpemVvZihzdHJ1Y3QgaTU5Nl9wcml2YXRlKSwKIAkJCQkgICAgICAgKHZvaWQgKiluZXRkZXZpY2UtPm1lbV9zdGFydCwgbHAtPmRtYV9hZGRyKTsKIAkJZnJlZV9uZXRkZXYobmV0ZGV2aWNlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sbmUzOTAuYyBiL2RyaXZlcnMvbmV0L2xuZTM5MC5jCmluZGV4IDY0NmU4OWYuLjU3OTVlZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xuZTM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L2xuZTM5MC5jCkBAIC0xODgsNyArMTg4LDcgQEAKIAl9CiAKIAlyZXZpc2lvbiA9IChlaXNhX2lkID4+IDI0KSAmIDB4MDE7CS8qIDAgPSByZXYgQSwgMSByZXYgQiAqLwotCQorCiAjaWYgMAogLyoJQ2hlY2sgdGhlIE15bGV4IHZlbmRvciBJRCBhcyB3ZWxsLiBOb3QgcmVhbGx5IHJlcXVpcmVkLiAqLwogCWlmIChpbmIoaW9hZGRyICsgTE5FMzkwX1NBX1BST00gKyAwKSAhPSBMTkUzOTBfQUREUjAKQEAgLTM0MSw3ICszNDEsNyBAQAogCWhkci0+Y291bnQgPSAoaGRyLT5jb3VudCArIDMpICYgfjM7ICAgICAvKiBSb3VuZCB1cCBhbGxvY2F0aW9uLiAqLwogfQogCi0vKgkKKy8qCiAgKglCbG9jayBpbnB1dCBhbmQgb3V0cHV0IGFyZSBlYXN5IG9uIHNoYXJlZCBtZW1vcnkgZXRoZXJjYXJkcywgdGhlIG9ubHkKICAqCWNvbXBsaWNhdGlvbiBpcyB3aGVuIHRoZSByaW5nIGJ1ZmZlciB3cmFwcy4gVGhlIGNvdW50IHdpbGwgYWxyZWFkeQogICoJYmUgcm91bmRlZCB1cCB0byBhIGRvdWJsZXdvcmQgdmFsdWUgdmlhIGxuZTM5MF9nZXRfODM5MF9oZHIoKSBhYm92ZS4KQEAgLTQwNiw3ICs0MDYsNyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNeWxleCBMTkUzOTBBL0IgRUlTQSBFdGhlcm5ldCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlpbnQgdGhpc19kZXYsIGZvdW5kID0gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IDk5N2NiY2UuLmY0MjliMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCXN0YXRzLT5yeF9wYWNrZXRzICs9IGxiX3N0YXRzLT5yeF9wYWNrZXRzOwogCQlzdGF0cy0+dHhfcGFja2V0cyArPSBsYl9zdGF0cy0+dHhfcGFja2V0czsKIAl9Ci0JCQkJCisKIAlyZXR1cm4gc3RhdHM7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGxvb3BiYWNrX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBsb29wYmFja19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsJCT0gbG9vcGJhY2tfZ2V0X2xpbmssCiAJLmdldF90c28JCT0gZXRodG9vbF9vcF9nZXRfdHNvLAogCS5zZXRfdHNvCQk9IGV0aHRvb2xfb3Bfc2V0X3RzbywKQEAgLTIzMCw3ICsyMzAsNyBAQAogCQlsb29wYmFja19kZXYucHJpdiA9IHN0YXRzOwogCQlsb29wYmFja19kZXYuZ2V0X3N0YXRzID0gJmdldF9zdGF0czsKIAl9Ci0JCisKIAlyZXR1cm4gcmVnaXN0ZXJfbmV0ZGV2KCZsb29wYmFja19kZXYpOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbHA0ODZlLmMgYi9kcml2ZXJzL25ldC9scDQ4NmUuYwppbmRleCBiNzgzYTY5Li4wMjU4YWFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9scDQ4NmUuYworKysgYi9kcml2ZXJzL25ldC9scDQ4NmUuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJcGh5c19hZGRyIHBhX25leHQ7CS8qIHZhX3RvX3BhKHN0cnVjdCBpNTk2X3RiZCAqbmV4dCkgKi8KIAlwaHlzX2FkZHIgcGFfZGF0YTsJLyogdmFfdG9fcGEoY2hhciAqZGF0YSkgKi8KIAlwaHlzX2FkZHIgcGFfcHJldjsJLyogdmFfdG9fcGEoc3RydWN0IGk1OTZfdGJkICpwcmV2KSAqLwotCQorCiAJLyogRHJpdmVyIHByaXZhdGUgcGFydCAqLwogCXN0cnVjdCBza19idWZmICpza2I7CiB9OwpAQCAtNDQyLDE2ICs0NDIsMTYgQEAKIAkJaWYgKHJiZCkgewogCQkJcmJkLT5wYWQgPSAwOwogCQkJcmJkLT5jb3VudCA9IDA7Ci0JCQlyYmQtPnNrYiA9IGRldl9hbGxvY19za2IoUlhfU0tCX1NJWkUpOworCQkJcmJkLT5za2IgPSBkZXZfYWxsb2Nfc2tiKFJYX1NLQlNJWkUpOwogCQkJaWYgKCFyYmQtPnNrYikgewogCQkJCXByaW50aygiZGV2X2FsbG9jX3NrYiBmYWlsZWQiKTsKIAkJCX0KIAkJCXJiZC0+bmV4dCA9IHJmZC0+cmJkOwogCQkJaWYgKGkpIHsKIAkJCQlyZmQtPnJiZC0+cHJldiA9IHJiZDsKLQkJCQlyYmQtPnNpemUgPSBSWF9TS0JfU0laRTsKKwkJCQlyYmQtPnNpemUgPSBSWF9TS0JTSVpFOwogCQkJfSBlbHNlIHsKLQkJCQlyYmQtPnNpemUgPSAoUlhfU0tCX1NJWkUgfCBSQkRfRUwpOworCQkJCXJiZC0+c2l6ZSA9IChSWF9TS0JTSVpFIHwgUkJEX0VMKTsKIAkJCQlscC0+cmJkX3RhaWwgPSByYmQ7CiAJCQl9CiAKQEAgLTY0Nyw3ICs2NDcsNyBAQAogCUNBKCk7CiAKIAliYXJyaWVyKCk7Ci0JCisKIAlpZiAobHAtPnNjYi5jb21tYW5kICYmIGk1OTZfdGltZW91dChkZXYsICJSZWNlaXZlIFVuaXQgc3RhcnQiLCAxMDApKQogCQlyZXR1cm4gMTsKIApAQCAtNjc2LDcgKzY3Niw3IEBACiAJCQlyZXR1cm4gMTsKIAkJfQogCi0JCXNrYi0+ZGV2ID0gZGV2OwkJCisJCXNrYi0+ZGV2ID0gZGV2OwogCQltZW1jcHkoc2tiX3B1dChza2IscGt0X2xlbiksIHJmZC0+ZGF0YSwgcGt0X2xlbik7CiAKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJbHAtPnNjYi5jb21tYW5kID0gQ1VDX0FCT1JUIHwgUlhfQUJPUlQ7CiAJQ0EoKTsKIAliYXJyaWVyKCk7Ci0JCisKIAkvKiB3YWl0IGZvciBzaHV0ZG93biAqLwogCWlmIChscC0+c2NiLmNvbW1hbmQgJiYgaTU5Nl90aW1lb3V0KGRldiwgImk1OTZfcmVzZXQoMikiLCA0MDApKQogCQk7CkBAIC04MjAsNyArODIwLDcgQEAKIAljbWQtPnBhX25leHQgPSBJNTk2X05VTEw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmNtZF9sb2NrLCBmbGFncyk7Ci0JCisKIAlpZiAobHAtPmNtZF9oZWFkKSB7CiAJCWxwLT5jbWRfdGFpbC0+cGFfbmV4dCA9IHZhX3RvX3BhKGNtZCk7CiAJfSBlbHNlIHsKQEAgLTg0Nyw3ICs4NDcsNyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpNTk2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgaW50IGk1OTZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpOwogCkBAIC04NzUsMTMgKzg3NSwxMyBAQAogCXNob3J0IGxlbmd0aDsKIAogCWxlbmd0aCA9IHNrYi0+bGVuOwotCQorCiAJaWYgKGxlbmd0aCA8IEVUSF9aTEVOKSB7CiAJCWlmIChza2JfcGFkdG8oc2tiLCBFVEhfWkxFTikpCiAJCQlyZXR1cm4gMDsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQotCQorCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKIAl0eF9jbWQgPSAoc3RydWN0IHR4X2NtZCAqKSBrbWFsbG9jICgoc2l6ZW9mIChzdHJ1Y3QgdHhfY21kKSArIHNpemVvZiAoc3RydWN0IGk1OTZfdGJkKSksIEdGUF9BVE9NSUMpOwpAQCAtOTQxLDcgKzk0MSw3IEBACiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9ldGgoY2hhciAqYWRkKSAKK3N0YXRpYyB2b2lkIHByaW50X2V0aChjaGFyICphZGQpCiB7CiAJaW50IGk7CiAKQEAgLTk3OCw3ICs5NzgsNyBAQAogCiAJbHAgPSAoc3RydWN0IGk1OTZfcHJpdmF0ZSAqKSBkZXYtPnByaXY7CiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5jbWRfbG9jayk7Ci0JCisKIAkvKgogCSAqIERvIHdlIHJlYWxseSBoYXZlIHRoaXMgdGhpbmc/CiAJICovCkBAIC0xMTMyLDcgKzExMzIsNyBAQAogCQlkZWZhdWx0OgogCQkJY21kLT5wYV9uZXh0ID0gSTU5Nl9OVUxMOwogCQkJbHAtPmxhc3RfY21kID0gamlmZmllczsKLQkJCQorCiAJCX0KIAkJYmFycmllcigpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hYzgzOTAuYyBiL2RyaXZlcnMvbmV0L21hYzgzOTAuYwppbmRleCAwNmNiNDYwLi5hZGU2ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWM4MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjODM5MC5jCkBAIC03LDEyICs3LDEyIEBACiAgICBUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mCiAgICB0aGUgR05VIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4gICovCiAKLS8qIDIwMDAtMDItMjg6IHN1cHBvcnQgYWRkZWQgZm9yIERheW5hIGFuZCBLaW5ldGljcyBjYXJkcyBieSAKKy8qIDIwMDAtMDItMjg6IHN1cHBvcnQgYWRkZWQgZm9yIERheW5hIGFuZCBLaW5ldGljcyBjYXJkcyBieQogICAgQS5HLmRlV2lqbkBwaHlzLnV1Lm5sICovCiAvKiAyMDAwLTA0LTA0OiBzdXBwb3J0IGFkZGVkIGZvciBEYXluYTIgYnkgYmFydEBldHBtb2QucGh5cy50dWUubmwgKi8KIC8qIDIwMDEtMDQtMTg6IHN1cHBvcnQgZm9yIERheW5hUG9ydCBFL0xDLU0gYnkgcmF5a0BrbmlnaHRzbWFub3Iub3JnICovCiAvKiAyMDAxLTA1LTE1OiBzdXBwb3J0IGZvciBDYWJsZXRyb24gcG9ydGVkIGZyb20gb2xkIGRheW5hcG9ydCBkcml2ZXIKLSAqIGFuZCBmaXhlZCBhY2Nlc3MgdG8gU29uaWMgU3lzIGNhcmQgd2hpY2ggbWFzcXVlcmFkZXMgYXMgYSBGYXJhbGxvbiAKKyAqIGFuZCBmaXhlZCBhY2Nlc3MgdG8gU29uaWMgU3lzIGNhcmQgd2hpY2ggbWFzcXVlcmFkZXMgYXMgYSBGYXJhbGxvbgogICogYnkgcmF5a0BrbmlnaHRzbWFub3Iub3JnICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTU1LDcgKzU1LDcgQEAKICNkZWZpbmUgS0lORVRJQ1NfODM5MF9CQVNFCTB4ODAwMDAKICNkZWZpbmUgS0lORVRJQ1NfODM5MF9NRU0JMHgwMDAwMAogCi0jZGVmaW5lIENBQkxFVFJPTl84MzkwX0JBU0UJMHg5MDAwMAkKKyNkZWZpbmUgQ0FCTEVUUk9OXzgzOTBfQkFTRQkweDkwMDAwCiAjZGVmaW5lIENBQkxFVFJPTl84MzkwX01FTQkweDAwMDAwCiAKIGVudW0gbWFjODM5MF90eXBlIHsKQEAgLTExOCw3ICsxMTgsNyBAQAogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CiAJIm1hYzgzOTAuYzogdjAuNCAyMDAxLTA1LTE1IERhdmlkIEh1Z2dpbnMtRGFpbmVzIDxkaGRAZGViaWFuLm9yZz4gYW5kIG90aGVyc1xuIjsKLQkJCisKIGV4dGVybiBlbnVtIG1hYzgzOTBfdHlwZSBtYWM4MzkwX2lkZW50KHN0cnVjdCBudWJ1c19kZXYgKiBkZXYpOwogZXh0ZXJuIGludCBtYWM4MzkwX21lbXNpemUodW5zaWduZWQgbG9uZyBtZW1iYXNlKTsKIGV4dGVybiBpbnQgbWFjODM5MF9tZW10ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogewogCWlmIChkZXYtPmRyX3N3ID09IE5VQlVTX0RSU1dfQVNBTlRFKQogCQlyZXR1cm4gTUFDODM5MF9BU0FOVEU7Ci0JaWYgKGRldi0+ZHJfc3cgPT0gTlVCVVNfRFJTV19GQVJBTExPTikgCisJaWYgKGRldi0+ZHJfc3cgPT0gTlVCVVNfRFJTV19GQVJBTExPTikKIAkJcmV0dXJuIE1BQzgzOTBfRkFSQUxMT047CiAJaWYgKGRldi0+ZHJfc3cgPT0gTlVCVVNfRFJTV19LSU5FVElDUykKIAkJcmV0dXJuIE1BQzgzOTBfS0lORVRJQ1M7CkBAIC0xODcsNyArMTg3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBqOwotCQorCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCS8qIENoZWNrIHVwIHRvIDMySyBpbiA0SyBpbmNyZW1lbnRzICovCiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewpAQCAtMTk3LDcgKzE5Nyw3IEBACiAJCSAgIFJBTSBlbmQgbG9jYXRlZCAqLwogCQlpZiAoaHdyZWdfcHJlc2VudChtKSA9PSAwKQogCQkJYnJlYWs7Ci0JCQorCiAJCS8qIHdyaXRlIGEgZGlzdGluY3RpdmUgYnl0ZSAqLwogCQkqbSA9IDB4QTVBMCB8IGk7CiAJCS8qIGNoZWNrIHRoYXQgd2UgcmVhZCBiYWNrIHdoYXQgd2Ugd3JvdGUgKi8KQEAgLTIyNCw3ICsyMjQsNyBAQAogCWludCB2ZXJzaW9uX2Rpc3AgPSAwOwogCXN0cnVjdCBudWJ1c19kZXYgKiBuZGV2ID0gTlVMTDsKIAlpbnQgZXJyID0gLUVOT0RFVjsKLQkKKwogCXN0cnVjdCBudWJ1c19kaXIgZGlyOwogCXN0cnVjdCBudWJ1c19kaXJlbnQgZW50OwogCWludCBvZmZzZXQ7CkBAIC0yNzMsNyArMjczLDcgQEAKIAkJCSAgICAgICBkZXYtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90KTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCQorCiAJCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgKi8KIAkJaWYgKChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUFDX0FERFJFU1MsICZlbnQpKSA9PSAtMSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENvdWxkbid0IGdldCBNQUMgYWRkcmVzcyFcbiIsCkBAIC0yODIsNyArMjgyLDcgQEAKIAkJfSBlbHNlIHsKIAkJCW51YnVzX2dldF9yc3JjX21lbShkZXYtPmRldl9hZGRyLCAmZW50LCA2KTsKIAkJCS8qIFNvbWUgU29uaWMgU3lzIGNhcmRzIG1hc3F1ZXJhZGUgYXMgRmFyYWxsb24gKi8KLQkJCWlmIChjYXJkdHlwZSA9PSBNQUM4MzkwX0ZBUkFMTE9OICYmIAorCQkJaWYgKGNhcmR0eXBlID09IE1BQzgzOTBfRkFSQUxMT04gJiYKIAkJCQkJZGV2LT5kZXZfYWRkclswXSA9PSAweDAgJiYKIAkJCQkJZGV2LT5kZXZfYWRkclsxXSA9PSAweDQwICYmCiAJCQkJCWRldi0+ZGV2X2FkZHJbMl0gPT0gMHgxMCkgewpAQCAtMjkwLDcgKzI5MCw3IEBACiAJCQkJY2FyZHR5cGUgPSBNQUM4MzkwX1NPTklDU1lTOwogCQkJfQogCQl9Ci0JCQorCiAJCWlmICh1c2VyZXNvdXJjZXNbY2FyZHR5cGVdID09IDEpIHsKIAkJCW51YnVzX3Jld2luZGRpcigmZGlyKTsKIAkJCWlmIChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUlOT1JfQkFTRU9TLCAmZW50KSA9PSAtMSkgewpAQCAtMzE4LDEwICszMTgsMTAgQEAKIAkJCXN3aXRjaCAoY2FyZHR5cGUpIHsKIAkJCQljYXNlIE1BQzgzOTBfS0lORVRJQ1M6CiAJCQkJY2FzZSBNQUM4MzkwX0RBWU5BOiAvKiBpdCdzIHRoZSBzYW1lICovCi0JCQkJCWRldi0+YmFzZV9hZGRyID0gCisJCQkJCWRldi0+YmFzZV9hZGRyID0KIAkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwogCQkJCQkJREFZTkFfODM5MF9CQVNFKTsKLQkJCQkJZGV2LT5tZW1fc3RhcnQgPSAKKwkJCQkJZGV2LT5tZW1fc3RhcnQgPQogCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCiAJCQkJCQlEQVlOQV84MzkwX01FTSk7CiAJCQkJCWRldi0+bWVtX2VuZCA9CkBAIC0zNDMsMTEgKzM0MywxMSBAQAogCQkJCQkgKi8KIAkJCQkJaSA9ICh2b2lkICopZGV2LT5iYXNlX2FkZHI7CiAJCQkJCSppID0gMHgyMTsKLQkJCQkJZGV2LT5tZW1fZW5kID0gCisJCQkJCWRldi0+bWVtX2VuZCA9CiAJCQkJCQlkZXYtPm1lbV9zdGFydCArCiAJCQkJCQltYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOwogCQkJCQlicmVhazsKLQkJCQkJCisKIAkJCQlkZWZhdWx0OgogCQkJCQlwcmludGsoS0VSTl9FUlIgIkNhcmQgdHlwZSAlcyBpcyIKIAkJCQkJCQkiIHVuc3VwcG9ydGVkLCBzb3JyeVxuIiwKQEAgLTQzMyw3ICs0MzMsNyBAQAogCX07CiAKIAlpbnQgYWNjZXNzX2JpdG1vZGU7Ci0JCisKIAkvKiBOb3cgZmlsbCBpbiBvdXIgc3R1ZmYgKi8KIAlkZXYtPm9wZW4gPSAmbWFjODM5MF9vcGVuOwogCWRldi0+c3RvcCA9ICZtYWM4MzkwX2Nsb3NlOwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAgICAgICAgICAgICAgICBlaV9zdGF0dXMucm1lbV9zdGFydCA9IGRldi0+bWVtX3N0YXJ0ICsgVFhfUEFHRVMqMjU2OwogICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJtZW1fZW5kID0gZGV2LT5tZW1fZW5kOwogCX0KLQkKKwogCS8qIEZpbGwgaW4gbW9kZWwtc3BlY2lmaWMgaW5mb3JtYXRpb24gYW5kIGZ1bmN0aW9ucyAqLwogCXN3aXRjaCh0eXBlKSB7CiAJY2FzZSBNQUM4MzkwX1NPTklDU1lTOgpAQCAtNTA5LDcgKzUwOSw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAiQ2FyZCB0eXBlICVzIGlzIHVuc3VwcG9ydGVkLCBzb3JyeVxuIiwgY2FyZG5hbWVbdHlwZV0pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JCQorCiAJTlM4MzkwX2luaXQoZGV2LCAwKTsKIAogCS8qIEdvb2QsIGRvbmUsIG5vdyBzcGl0IG91dCBzb21lIG1lc3NhZ2VzICovCkBAIC01MjUsNyArNTI1LDcgQEAKIAkJfQogCX0KIAlwcmludGsoIiBJUlEgJWQsIHNoYXJlZCBtZW1vcnkgYXQgJSNseC0lI2x4LCAgJWQtYml0IGFjY2Vzcy5cbiIsCi0JCSAgIGRldi0+aXJxLCBkZXYtPm1lbV9zdGFydCwgZGV2LT5tZW1fZW5kLTEsIAorCQkgICBkZXYtPmlycSwgZGV2LT5tZW1fc3RhcnQsIGRldi0+bWVtX2VuZC0xLAogCQkgICBhY2Nlc3NfYml0bW9kZT8zMjoxNik7CiAJcmV0dXJuIDA7CiB9CkBAIC01MzYsNyArNTM2LDcgQEAKIAlpZiAocmVxdWVzdF9pcnEoZGV2LT5pcnEsIGVpX2ludGVycnVwdCwgMCwgIjgzOTAgRXRoZXJuZXQiLCBkZXYpKSB7CiAJCXByaW50ayAoIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOwogCQlyZXR1cm4gLUVBR0FJTjsKLQl9CQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNjM5LDcgKzYzOSw3IEBACiAJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBzdGFydF9wYWdlKQogewogCWxvbmcgc2htZW0gPSAoc3RhcnRfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKLQkKKwogCW1lbWNweV90b2lvKChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyBzaG1lbSwgYnVmLCBjb3VudCk7CiB9CiAKQEAgLTY4MSwxMiArNjgxLDEyIEBACiAJCQkJaW50IHN0YXJ0X3BhZ2UpCiB7CiAJbG9uZyBzaG1lbSA9IChzdGFydF9wYWdlIC0gV0RfU1RBUlRfUEcpPDw4OwotCQorCiAJZGF5bmFfbWVtY3B5X3RvY2FyZChkZXYsIHNobWVtLCBidWYsIGNvdW50KTsKIH0KIAogLyogQ2FibGV0cm9uIGJsb2NrIEkvTyAqLwotc3RhdGljIHZvaWQgc2xvd19zYW5lX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZTgzOTBfcGt0X2hkciAqaGRyLCAKK3N0YXRpYyB2b2lkIHNsb3dfc2FuZV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwKIAlpbnQgcmluZ19wYWdlKQogewogCXVuc2lnbmVkIGxvbmcgaGRyX3N0YXJ0ID0gKHJpbmdfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKQEAgLTc1MCw0ICs3NTAsNCBAQAogCQkqdG8rKz0qZnJvbSsrOwogfQogCi0JCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hYzg5eDAuYyBiL2RyaXZlcnMvbmV0L21hYzg5eDAuYwppbmRleCBjZDNjOWE1Li44NDcyYjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWM4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCkBAIC0xMiwyNCArMTIsMjQgQEAKICAgQ2hhbmdlbG9nOgogCiAgIE1pa2UgQ3J1c2UgICAgICAgIDogbWNydXNlQGN0aS1sdGQuY29tCi0gICAgICAgICAgICAgICAgICAgIDogQ2hhbmdlcyBmb3IgTGludXggMi4wIGNvbXBhdGliaWxpdHkuIAorICAgICAgICAgICAgICAgICAgICA6IENoYW5nZXMgZm9yIExpbnV4IDIuMCBjb21wYXRpYmlsaXR5LgogICAgICAgICAgICAgICAgICAgICA6IEFkZGVkIGRldl9pZCBwYXJhbWV0ZXIgaW4gbmV0X2ludGVycnVwdCgpLAogICAgICAgICAgICAgICAgICAgICA6IHJlcXVlc3RfaXJxKCkgYW5kIGZyZWVfaXJxKCkuIEp1c3QgTlVMTCBmb3Igbm93LgogCiAgIE1pa2UgQ3J1c2UgICAgICAgIDogQWRkZWQgTU9EX0lOQ19VU0VfQ09VTlQgYW5kIE1PRF9ERUNfVVNFX0NPVU5UIG1hY3JvcwogICAgICAgICAgICAgICAgICAgICA6IGluIG5ldF9vcGVuKCkgYW5kIG5ldF9jbG9zZSgpIHNvIGtlcm5lbGQgd291bGQga25vdwotICAgICAgICAgICAgICAgICAgICA6IHRoYXQgdGhlIG1vZHVsZSBpcyBpbiB1c2UgYW5kIHdvdWxkbid0IGVqZWN0IHRoZSAKKyAgICAgICAgICAgICAgICAgICAgOiB0aGF0IHRoZSBtb2R1bGUgaXMgaW4gdXNlIGFuZCB3b3VsZG4ndCBlamVjdCB0aGUKICAgICAgICAgICAgICAgICAgICAgOiBkcml2ZXIgcHJlbWF0dXJlbHkuCiAKICAgTWlrZSBDcnVzZSAgICAgICAgOiBSZXdyb3RlIGluaXRfbW9kdWxlKCkgYW5kIGNsZWFudXBfbW9kdWxlIHVzaW5nIDgzOTAuYwogICAgICAgICAgICAgICAgICAgICA6IGFzIGFuIGV4YW1wbGUuIERpc2FibGVkIGF1dG9wcm9iaW5nIGluIGluaXRfbW9kdWxlKCksCiAgICAgICAgICAgICAgICAgICAgIDogbm90IGEgZ29vZCB0aGluZyB0byBkbyB0byBvdGhlciBkZXZpY2VzIHdoaWxlIExpbnV4CiAgICAgICAgICAgICAgICAgICAgIDogaXMgcnVubmluZyBmcm9tIGFsbCBhY2NvdW50cy4KLSAgICAgICAgICAgICAgICAgICAgCisKICAgQWxhbiBDb3ggICAgICAgICAgOiBSZW1vdmVkIDEuMiBzdXBwb3J0LCBhZGRlZCAyLjEgZXh0cmEgY291bnRlcnMuCiAKICAgRGF2aWQgSHVnZ2lucy1EYWluZXMgPGRoZEBkZWJpYW4ub3JnPgotICAKKwogICBTcGxpdCB0aGlzIG9mZiBpbnRvIG1hYzg5eDAuYywgYW5kIGd1dHRlZCBpdCBvZiBhbGwgcGFydHMgd2hpY2ggYXJlCiAgIG5vdCByZWxldmFudCB0byB0aGUgZXhpc3RpbmcgQ1M4OTAwIGNhcmRzIG9uIHRoZSBNYWNpbnRvc2gKICAgKGkuZS4gYmFzaWNhbGx5IHRoZSBEYXluYXBvcnQgQ1MgYW5kIExDIGNhcmRzKS4gIFRvIGJlIHByZWNpc2U6CkBAIC0yMTAsNyArMjEwLDcgQEAKIAl7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCWludCBjYXJkX3ByZXNlbnQ7Ci0JCQorCiAJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJY2FyZF9wcmVzZW50ID0gaHdyZWdfcHJlc2VudCgodm9pZCopIGlvYWRkcis0KQogCQkgICYmIGh3cmVnX3ByZXNlbnQoKHZvaWQqKSBpb2FkZHIgKyBEQVRBX1BPUlQpOwpAQCAtMjMwLDcgKzIzMCw3IEBACiAKIAkvKiBGaWxsIGluIHRoZSAnZGV2JyBmaWVsZHMuICovCiAJZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7Ci0JZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgCisJZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykKIAkJbnVidXNfc2xvdF9hZGRyKHNsb3QpIHwgKCgoc2xvdCYweGYpIDw8IDIwKSArIE1NSU9CQVNFKTsKIAlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIDB4MTAwMDsKIApAQCAtNDI4LDcgKzQyOCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KLQwKKwogLyogVGhlIHR5cGljYWwgd29ya2xvYWQgb2YgdGhlIGRyaXZlcjoKICAgIEhhbmRsZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0cy4gKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKQpAQCAtNTk2LDcgKzU5Niw3IEBACiAJCS8qIFRoZSBtdWx0aWNhc3QtYWNjZXB0IGxpc3QgaXMgaW5pdGlhbGl6ZWQgdG8gYWNjZXB0LWFsbCwgYW5kIHdlCiAJCSAgIHJlbHkgb24gaGlnaGVyLWxldmVsIGZpbHRlcmluZyBmb3Igbm93LiAqLwogCQlscC0+cnhfbW9kZSA9IFJYX01VTFRDQVNUX0FDQ0VQVDsKLQl9IAorCX0KIAllbHNlCiAJCWxwLT5yeF9tb2RlID0gMDsKIApAQCAtNjUzLDcgKzY1Myw3IEBACiAJZnJlZV9uZXRkZXYoZGV2X2NzODl4MCk7CiB9CiAjZW5kaWYgLyogTU9EVUxFICovCi0MCisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiAgY29tcGlsZS1jb21tYW5kOiAibTY4ay1saW51eC1nY2MgLURfX0tFUk5FTF9fIC1JLi4vLi4vaW5jbHVkZSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtcGlwZSAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtZmZpeGVkLWEyIC1ETU9EVUxFIC1ETU9EVkVSU0lPTlMgLWluY2x1ZGUgLi4vLi4vaW5jbHVkZS9saW51eC9tb2R2ZXJzaW9ucy5oICAgLWMgLW8gbWFjODl4MC5vIG1hYzg5eDAuYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY2UuYyBiL2RyaXZlcnMvbmV0L21hY2UuYwppbmRleCAyOWU0YjVhLi4yN2MyNGVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1hY2UgPSBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtYWNlX2RhdGEgKm1wOwotCXVuc2lnbmVkIGNoYXIgKmFkZHI7CisJY29uc3QgdW5zaWduZWQgY2hhciAqYWRkcjsKIAlpbnQgaiwgcmV2LCByYyA9IC1FQlVTWTsKIAogCWlmIChtYWNpb19yZXNvdXJjZV9jb3VudChtZGV2KSAhPSAzIHx8IG1hY2lvX2lycV9jb3VudChtZGV2KSAhPSAzKSB7CkBAIC0xNzcsNyArMTc3LDcgQEAKIAl9CiAJbXAtPmNoaXBpZCA9IChpbl84KCZtcC0+bWFjZS0+Y2hpcGlkX2hpKSA8PCA4KSB8CiAJCQlpbl84KCZtcC0+bWFjZS0+Y2hpcGlkX2xvKTsKLQkJCisKIAogCW1wID0gKHN0cnVjdCBtYWNlX2RhdGEgKikgZGV2LT5wcml2OwogCW1wLT5tYWNjYyA9IEVOWE1UIHwgRU5SQ1Y7CkBAIC0yMTksNyArMjE5LDcgQEAKIAkJCW1wLT5wb3J0X2FhdWkgPSAxOwogI2Vsc2UKIAkJCW1wLT5wb3J0X2FhdWkgPSAwOwotI2VuZGlmCQkJCisjZW5kaWYKIAkJfQogCX0KIApAQCAtMjY0LDcgKzI2NCw3IEBACiAJcHJpbnRrKCIsIGNoaXAgcmV2aXNpb24gJWQuJWRcbiIsIG1wLT5jaGlwaWQgPj4gOCwgbXAtPmNoaXBpZCAmIDB4ZmYpOwogCiAJcmV0dXJuIDA7Ci0gCisKICBlcnJfZnJlZV9yeF9pcnE6CiAJZnJlZV9pcnEobWFjaW9faXJxKG1kZXYsIDIpLCBkZXYpOwogIGVycl9mcmVlX3R4X2lycToKQEAgLTEwMDgsNyArMTAwOCw3IEBACiAgICAgcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBtYWNlX21hdGNoW10gPSAKK3N0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1hY2VfbWF0Y2hbXSA9CiB7CiAJewogCS5uYW1lIAkJPSAibWFjZSIsCkBAIC0xMDE3LDcgKzEwMTcsNyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUgKG9mLCBtYWNlX21hdGNoKTsKIAotc3RhdGljIHN0cnVjdCBtYWNpb19kcml2ZXIgbWFjZV9kcml2ZXIgPSAKK3N0YXRpYyBzdHJ1Y3QgbWFjaW9fZHJpdmVyIG1hY2VfZHJpdmVyID0KIHsKIAkubmFtZSAJCT0gIm1hY2UiLAogCS5tYXRjaF90YWJsZQk9IG1hY2VfbWF0Y2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWNtYWNlLmMgYi9kcml2ZXJzL25ldC9tYWNtYWNlLmMKaW5kZXggNzlhNmZjMS4uNjk2ZDU1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jCisrKyBiL2RyaXZlcnMvbmV0L21hY21hY2UuYwpAQCAtNjMsNyArNjMsNyBAQAogCXUxNglyY3ZjYzsKIAl1MzIJcGFkMTsKIAl1MzIJcGFkMjsKLQl1OAlkYXRhWzFdOwkKKwl1OAlkYXRhWzFdOwogCS8qIEFuZCBmcmFtZSBjb250aW51ZXMuLiAqLwogfTsKIApAQCAtMTE4LDE3ICsxMTgsMTcgQEAKIAlzdHJ1Y3QgbWFjZV9kYXRhICptcCA9IChzdHJ1Y3QgbWFjZV9kYXRhICopIGRldi0+cHJpdjsKIAl2b2xhdGlsZSBzdHJ1Y3QgbWFjZSAqbWFjZSA9IG1wLT5tYWNlOwogCXU4IG1hY2NjID0gbWFjZS0+bWFjY2M7Ci0JCisKIAltYWNlLT5tYWNjYyA9IG1hY2NjICYgfkVOUkNWOwotCQorCiAJcHNjX3dyaXRlX3dvcmQoUFNDX0VORVRSRF9DVEwsIDB4ODgwMCk7CiAJbWFjZV9sb2FkX3J4ZG1hX2Jhc2UoZGV2LCAweDAwKTsKIAlwc2Nfd3JpdGVfd29yZChQU0NfRU5FVFJEX0NUTCwgMHgwNDAwKTsKLQkKKwogCXBzY193cml0ZV93b3JkKFBTQ19FTkVUUkRfQ1RMLCAweDg4MDApOwogCW1hY2VfbG9hZF9yeGRtYV9iYXNlKGRldiwgMHgxMCk7CiAJcHNjX3dyaXRlX3dvcmQoUFNDX0VORVRSRF9DVEwsIDB4MDQwMCk7Ci0JCisKIAltYWNlLT5tYWNjYyA9IG1hY2NjOwogCW1wLT5yeF9zbG90ID0gMDsKIApAQCAtMTM5LDcgKzEzOSw3IEBACiAvKgogICogUmVzZXQgdGhlIHRyYW5zbWl0IERNQSBzdWJzeXN0ZW0KICAqLwotIAorCiBzdGF0aWMgdm9pZCBtYWNlX3R4ZG1hX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1hY2VfZGF0YSAqbXAgPSAoc3RydWN0IG1hY2VfZGF0YSAqKSBkZXYtPnByaXY7CkBAIC0xNjEsNyArMTYxLDcgQEAKIC8qCiAgKiBEaXNhYmxlIERNQQogICovCi0gCisKIHN0YXRpYyB2b2lkIG1hY2VfZG1hX29mZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXBzY193cml0ZV93b3JkKFBTQ19FTkVUUkRfQ1RMLCAweDg4MDApOwpAQCAtMTc5LDcgKzE3OSw3IEBACiAgKiBOb3QgcmVhbGx5IG11Y2ggb2YgYSBwcm9iZS4gVGhlIGhhcmR3YXJlIHRhYmxlIHRlbGxzIHVzIGlmIHRoaXMKICAqIG1vZGVsIG9mIE1hY2ludHJhc2ggaGFzIGEgTUFDRSAoQVYgbWFjaW50b3NoZXMpCiAgKi8KLSAKKwogc3RydWN0IG5ldF9kZXZpY2UgKm1hY2VfcHJvYmUoaW50IHVuaXQpCiB7CiAJaW50IGo7CkBAIC0xODksNyArMTg5LDcgQEAKIAl1bnNpZ25lZCBjaGFyIGNoZWNrc3VtID0gMDsKIAlzdGF0aWMgaW50IGZvdW5kID0gMDsKIAlpbnQgZXJyOwotCQorCiAJaWYgKGZvdW5kIHx8IG1hY2ludG9zaF9jb25maWctPmV0aGVyX3R5cGUgIT0gTUFDX0VUSEVSX01BQ0UpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwogCkBAIC0yMDUsNyArMjA1LDcgQEAKIAltcCA9IChzdHJ1Y3QgbWFjZV9kYXRhICopIGRldi0+cHJpdjsKIAlkZXYtPmJhc2VfYWRkciA9ICh1MzIpTUFDRV9CQVNFOwogCW1wLT5tYWNlID0gKHZvbGF0aWxlIHN0cnVjdCBtYWNlICopIE1BQ0VfQkFTRTsKLQkKKwogCWRldi0+aXJxID0gSVJRX01BQ19NQUNFOwogCW1wLT5kbWFfaW50ciA9IElSUV9NQUNfTUFDRV9ETUE7CiAKQEAgLTIxNyw3ICsyMTcsNyBAQAogCSAqLwogCiAJYWRkciA9ICh2b2lkICopTUFDRV9QUk9NOwotCQkgCisKIAlmb3IgKGogPSAwOyBqIDwgNjsgKytqKSB7CiAJCXU4IHY9Yml0cmV2KGFkZHJbajw8NF0pOwogCQljaGVja3N1bSBePSB2OwpAQCAtMjI2LDcgKzIyNiw3IEBACiAJZm9yICg7IGogPCA4OyArK2opIHsKIAkJY2hlY2tzdW0gXj0gYml0cmV2KGFkZHJbajw8NF0pOwogCX0KLQkKKwogCWlmIChjaGVja3N1bSAhPSAweEZGKSB7CiAJCWZyZWVfbmV0ZGV2KGRldik7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJLyogbG9hZCB1cCB0aGUgaGFyZHdhcmUgYWRkcmVzcyAqLwogCW1iLT5pYWMgPSBBRERSQ0hHIHwgUEhZQUREUjsKIAl3aGlsZSAoKG1iLT5pYWMgJiBBRERSQ0hHKSAhPSAwKTsKLQkKKwogCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpIHsKIAkJbWItPnBhZHIgPSBkZXYtPmRldl9hZGRyW2ldID0gcFtpXTsKIAl9CkBAIC0yOTAsNyArMjkwLDcgQEAKICAqIE9wZW4gdGhlIE1hY2ludG9zaCBNQUNFLiBNb3N0IG9mIHRoaXMgaXMgcGxheWluZyB3aXRoIHRoZSBETUEKICAqIGVuZ2luZS4gVGhlIGV0aGVybmV0IGNoaXAgaXMgcXVpdGUgZnJpZW5kbHkuCiAgKi8KLSAKKwogc3RhdGljIGludCBtYWNlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWFjZV9kYXRhICptcCA9IChzdHJ1Y3QgbWFjZV9kYXRhICopIGRldi0+cHJpdjsKQEAgLTMzMyw3ICszMzMsNyBAQAogCiAJbXAtPnJ4X3JpbmcgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLCBOX1JYX1BBR0VTKTsKIAltcC0+dHhfcmluZyA9ICh2b2lkICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCB8IEdGUF9ETUEsIDApOwotCQorCiAJaWYgKG1wLT50eF9yaW5nPT1OVUxMIHx8IG1wLT5yeF9yaW5nPT1OVUxMKSB7CiAJCWlmIChtcC0+cnhfcmluZykgZnJlZV9wYWdlcygodTMyKSBtcC0+cnhfcmluZywgTl9SWF9QQUdFUyk7CiAJCWlmIChtcC0+dHhfcmluZykgZnJlZV9wYWdlcygodTMyKSBtcC0+dHhfcmluZywgMCk7CkBAIC0zNDgsNyArMzQ4LDcgQEAKIAogCS8qIFdlIHdhbnQgdGhlIFJ4IGJ1ZmZlciB0byBiZSB1bmNhY2hlZCBhbmQgdGhlIFR4IGJ1ZmZlciB0byBiZSB3cml0ZXRocm91Z2ggKi8KIAotCWtlcm5lbF9zZXRfY2FjaGVtb2RlKCh2b2lkICopbXAtPnJ4X3JpbmcsIE5fUlhfUEFHRVMgKiBQQUdFX1NJWkUsIElPTUFQX05PQ0FDSEVfTk9OU0VSKTsJCisJa2VybmVsX3NldF9jYWNoZW1vZGUoKHZvaWQgKiltcC0+cnhfcmluZywgTl9SWF9QQUdFUyAqIFBBR0VfU0laRSwgSU9NQVBfTk9DQUNIRV9OT05TRVIpOwogCWtlcm5lbF9zZXRfY2FjaGVtb2RlKCh2b2lkICopbXAtPnR4X3JpbmcsIFBBR0VfU0laRSwgSU9NQVBfV1JJVEVUSFJPVUdIKTsKIAogCW1hY2VfZG1hX29mZihkZXYpOwpAQCAtMzYyLDExICszNjIsMTEgQEAKIAogI2lmIDAKIAkvKiBsb2FkIHVwIHRoZSBoYXJkd2FyZSBhZGRyZXNzICovCi0JCisKIAltYi0+aWFjID0gQUREUkNIRyB8IFBIWUFERFI7Ci0JCisKIAl3aGlsZSAoKG1iLT5pYWMgJiBBRERSQ0hHKSAhPSAwKTsKLQkKKwogCWZvciAoaSA9IDA7IGkgPCA2OyArK2kpCiAJCW1iLT5wYWRyID0gZGV2LT5kZXZfYWRkcltpXTsKIApAQCAtMzc0LDcgKzM3NCw3IEBACiAJbWItPmlhYyA9IEFERFJDSEcgfCBMT0dBRERSOwogCiAJd2hpbGUgKChtYi0+aWFjICYgQUREUkNIRykgIT0gMCk7Ci0JCisKIAlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQogCQltYi0+bGFkcmYgPSAwOwogCkBAIC0zODYsMTQgKzM4NiwxNCBAQAogCiAJbWFjZV9yeGRtYV9yZXNldChkZXYpOwogCW1hY2VfdHhkbWFfcmVzZXQoZGV2KTsKLQkKKwogCXJldHVybiAwOwogfQogCiAvKgogICogU2h1dCBkb3duIHRoZSBtYWNlIGFuZCBpdHMgaW50ZXJydXB0IGNoYW5uZWwKICAqLwotIAorCiBzdGF0aWMgaW50IG1hY2VfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbWFjZV9kYXRhICptcCA9IChzdHJ1Y3QgbWFjZV9kYXRhICopIGRldi0+cHJpdjsKQEAgLTQxNSw3ICs0MTUsNyBAQAogLyoKICAqIFRyYW5zbWl0IGEgZnJhbWUKICAqLwotIAorCiBzdGF0aWMgaW50IG1hY2VfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBtYWNlX2RhdGEgKm1wID0gKHN0cnVjdCBtYWNlX2RhdGEgKikgZGV2LT5wcml2OwpAQCAtNDI3LDcgKzQyNyw3IEBACiAJCXJldHVybiAxOwogCX0KIAltcC0+dHhfY291bnQtLTsKLQkKKwogCW1wLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJbXAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCkBAIC00ODgsNyArNDg4LDcgQEAKIAogCQltYi0+aWFjID0gQUREUkNIRyB8IExPR0FERFI7CiAJCXdoaWxlIChtYi0+aWFjICYgQUREUkNIRyk7Ci0JCQorCiAJCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpIHsKIAkJCW1iLT5sYWRyZiA9IG11bHRpY2FzdF9maWx0ZXJbaV07CiAJCX0KQEAgLTQ5OCwxMCArNDk4LDEwIEBACiB9CiAKIC8qCi0gKiBNaXNjZWxsYW5lb3VzIGludGVycnVwdHMgYXJlIGhhbmRsZWQgaGVyZS4gV2UgbWF5IGVuZCB1cCAKKyAqIE1pc2NlbGxhbmVvdXMgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBoZXJlLiBXZSBtYXkgZW5kIHVwCiAgKiBoYXZpbmcgdG8gYmFzaCB0aGUgY2hpcCBvbiB0aGUgaGVhZCBmb3IgYmFkIGVycm9ycwogICovCi0gCisKIHN0YXRpYyB2b2lkIG1hY2VfaGFuZGxlX21pc2NfaW50cnMoc3RydWN0IG1hY2VfZGF0YSAqbXAsIGludCBpbnRyKQogewogCXZvbGF0aWxlIHN0cnVjdCBtYWNlICptYiA9IG1wLT5tYWNlOwpAQCAtNTM2LDE2ICs1MzYsMTYgQEAKICAqCUEgdHJhbnNtaXQgZXJyb3IgaGFzIG9jY3VycmVkLiAoV2Uga2ljayB0aGUgdHJhbnNtaXQgc2lkZSBmcm9tCiAgKgl0aGUgRE1BIGNvbXBsZXRpb24pCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgbWFjZV94bWl0X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1hY2VfZGF0YSAqbXAgPSAoc3RydWN0IG1hY2VfZGF0YSAqKSBkZXYtPnByaXY7CiAJdm9sYXRpbGUgc3RydWN0IG1hY2UgKm1iID0gbXAtPm1hY2U7CiAJdTggeG10ZnMsIHhtdHJjOwotCQorCiAJeG10ZnMgPSBtYi0+eG10ZnM7CiAJeG10cmMgPSBtYi0+eG10cmM7Ci0JCisKIAlpZiAoeG10ZnMgJiBYTVRTVikgewogCQlpZiAoeG10ZnMgJiBVRkxPKSB7CiAJCQlwcmludGsoIiVzOiBETUEgdW5kZXJydW4uXG4iLCBkZXYtPm5hbWUpOwpAQCAtNTU2LDEzICs1NTYsMTMgQEAKIAkJaWYgKHhtdGZzICYgUlRSWSkgewogCQkJbXAtPnN0YXRzLmNvbGxpc2lvbnMrKzsKIAkJfQotCX0JCQkKKwl9CiB9CiAKIC8qCiAgKglBIHJlY2VpdmUgaW50ZXJydXB0IG9jY3VycmVkLgogICovCi0gCisKIHN0YXRpYyB2b2lkIG1hY2VfcmVjdl9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIC8qCXN0cnVjdCBtYWNlX2RhdGEgKm1wID0gKHN0cnVjdCBtYWNlX2RhdGEgKikgZGV2LT5wcml2OyAqLwpAQCAtNTcyLDE3ICs1NzIsMTcgQEAKIC8qCiAgKiBQcm9jZXNzIHRoZSBjaGlwIGludGVycnVwdAogICovCi0gCisKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYWNlX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwogCXN0cnVjdCBtYWNlX2RhdGEgKm1wID0gKHN0cnVjdCBtYWNlX2RhdGEgKikgZGV2LT5wcml2OwogCXZvbGF0aWxlIHN0cnVjdCBtYWNlICptYiA9IG1wLT5tYWNlOwogCXU4IGlyOwotCQorCiAJaXIgPSBtYi0+aXI7CiAJbWFjZV9oYW5kbGVfbWlzY19pbnRycyhtcCwgaXIpOwotCQorCiAJaWYgKGlyICYgWE1USU5UKSB7CiAJCW1hY2VfeG1pdF9lcnJvcihkZXYpOwogCX0KQEAgLTYwMSw3ICs2MDEsNyBAQAogLyoKICAqIEhhbmRsZSBhIG5ld2x5IGFycml2ZWQgZnJhbWUKICAqLwotIAorCiBzdGF0aWMgdm9pZCBtYWNlX2RtYV9yeF9mcmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbWFjZV9mcmFtZSAqbWYpCiB7CiAJc3RydWN0IG1hY2VfZGF0YSAqbXAgPSAoc3RydWN0IG1hY2VfZGF0YSAqKSBkZXYtPnByaXY7CkBAIC02MTQsNyArNjE0LDcgQEAKIAl9CiAJaWYgKG1mLT5zdGF0dXMmKFJTX0NMU058UlNfRlJBTUVSUnxSU19GQ1NFUlIpKQogCQltcC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQorCiAJaWYgKG1mLT5zdGF0dXMmUlNfQ0xTTikgewogCQltcC0+c3RhdHMuY29sbGlzaW9ucysrOwogCX0KQEAgLTYyNCw3ICs2MjQsNyBAQAogCWlmIChtZi0+c3RhdHVzJlJTX0ZDU0VSUikgewogCQltcC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOwogCX0KLQkJCisKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKG1mLT5sZW4rMik7CiAJaWYgKCFza2IpIHsKIAkJbXAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKQEAgLTYzMiw3ICs2MzIsNyBAQAogCX0KIAlza2JfcmVzZXJ2ZShza2IsMik7CiAJbWVtY3B5KHNrYl9wdXQoc2tiLCBtZi0+bGVuKSwgbWYtPmRhdGEsIG1mLT5sZW4pOwotCQorCiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAluZXRpZl9yeChza2IpOwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAvKgogICogVGhlIFBTQyBoYXMgcGFzc2VkIHVzIGEgRE1BIGludGVycnVwdCBldmVudC4KICAqLwotIAorCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWFjZV9kbWFfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwpAQCAtNjYxLDkgKzY2MSw5IEBACiAJLyoKIAkgKiBQcm9jZXNzIHRoZSByZWFkIHF1ZXVlCiAJICovCi0JCSAKKwogCXN0YXR1cyA9IHBzY19yZWFkX3dvcmQoUFNDX0VORVRSRF9DVEwpOwotCQkKKwogCWlmIChzdGF0dXMgJiAweDIwMDApIHsKIAkJbWFjZV9yeGRtYV9yZXNldChkZXYpOwogCX0gZWxzZSBpZiAoc3RhdHVzICYgMHgwMTAwKSB7CkBAIC02NzgsNyArNjc4LDcgQEAKIAkJCW1hY2VfZG1hX3J4X2ZyYW1lKGRldiwgKHN0cnVjdCBtYWNlX2ZyYW1lICopIChtcC0+cnhfcmluZyArIChtcC0+cnhfdGFpbCAqIDB4MDgwMCkpKTsKIAkJCW1wLT5yeF90YWlsKys7CiAJCX0KLQkJCQorCiAJCS8qIElmIHdlJ3JlIG91dCBvZiBidWZmZXJzIGluIHRoaXMgcmluZyB0aGVuIHN3aXRjaCB0byAqLwogCQkvKiB0aGUgb3RoZXIgc2V0LCBvdGhlcndpc2UganVzdCByZWFjdGl2YXRlIHRoaXMgb25lLiAgKi8KIApAQCAtNjg5LDcgKzY4OSw3IEBACiAJCQlwc2Nfd3JpdGVfd29yZChQU0NfRU5FVFJEX0NNRCArIG1wLT5yeF9zbG90LCAweDk4MDApOwogCQl9CiAJfQotCQkKKwogCS8qCiAJICogUHJvY2VzcyB0aGUgd3JpdGUgcXVldWUKIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMgYi9kcml2ZXJzL25ldC9tYWNzb25pYy5jCmluZGV4IGY2ZjNkYWYuLjM5M2Q5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY3NvbmljLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjc29uaWMuYwpAQCAtMTMsMjAgKzEzLDIwIEBACiAgKgogICogQmFzZWQgb24gY29kZQogICogKEMpIDE5OTYgYnkgVGhvbWFzIEJvZ2VuZG9lcmZlciAodHNib2dlbmRAYmlnYnVnLmZyYW5rZW4uZGUpCi0gKiAKKyAqCiAgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB3b3JrIGZyb20gQW5kcmVhcyBCdXNzZSwgYnV0IG1vc3Qgb2YKICAqIHRoZSBjb2RlIGlzIHJld3JpdHRlbi4KLSAqIAorICoKICAqIChDKSAxOTk1IGJ5IEFuZHJlYXMgQnVzc2UgKGFuZHlAd2FsZG9yZi1nbWJoLmRlKQogICoKICAqIEEgZHJpdmVyIGZvciB0aGUgTWFjIG9uYm9hcmQgU29uaWMgZXRoZXJuZXQgY2hpcC4KICAqCi0gKiA5OC8xMi8yMSBNU2NoOiBqdWRnZWQgZnJvbSB0ZXN0cyBvbiBRODAwLCBpdCdzIGJhc2ljYWxseSB3b3JraW5nLCAKKyAqIDk4LzEyLzIxIE1TY2g6IGp1ZGdlZCBmcm9tIHRlc3RzIG9uIFE4MDAsIGl0J3MgYmFzaWNhbGx5IHdvcmtpbmcsCiAgKgkJICBidXQgZWF0aW5nIHVwIGJvdGggcmVjZWl2ZSBhbmQgdHJhbnNtaXQgcmVzb3VyY2VzCiAgKgkJICBhbmQgZHVwbGljYXRpbmcgcGFja2V0cy4gTmVlZHMgbW9yZSB0ZXN0aW5nLgogICoKICAqIDk5LzAxLzAzIE1TY2g6IHVwZ3JhZGVkIHRvIHZlcnNpb24gMC45MiBvZiB0aGUgY29yZSBkcml2ZXIsIGZpeGVkLgotICogCisgKgogICogMDAvMTAvMzEgc2FtbXlAb2gudmVyaW8uY29tOiBVcGRhdGVkIGRyaXZlciBmb3IgMi40IGtlcm5lbHMsIGZpeGVkIHByb2JsZW1zCiAgKiAgICAgICAgICBvbiBjZW50cmlzLgogICovCkBAIC03Niw3ICs3Niw3IEBACiAvKiB1c2UgMCBmb3IgcHJvZHVjdGlvbiwgMSBmb3IgdmVyaWZpY2F0aW9uLCA+MSBmb3IgZGVidWcgKi8KICNpZmRlZiBTT05JQ19ERUJVRwogc3RhdGljIHVuc2lnbmVkIGludCBzb25pY19kZWJ1ZyA9IFNPTklDX0RFQlVHOwotI2Vsc2UgCisjZWxzZQogc3RhdGljIHVuc2lnbmVkIGludCBzb25pY19kZWJ1ZyA9IDE7CiAjZW5kaWYKIApAQCAtMTI5LDcgKzEyOSw3IEBACiAJaW50IGk7CiAKIAlmb3IoaSA9IDA7IGkgPCA2OyBpKyspCi0JCWFkZHJbaV0gPSAoKG5pYmJsZXRhYlthZGRyW2ldICYgMHhmXSA8PCA0KSB8IAorCQlhZGRyW2ldID0gKChuaWJibGV0YWJbYWRkcltpXSAmIDB4Zl0gPDwgNCkgfAogCQkJICAgbmliYmxldGFiWyhhZGRyW2ldID4+IDQpICYweGZdKTsKIH0KIApAQCAtMjE1LDcgKzIxNSw3IEBACiAJCXVuc2lnbmVkIHNob3J0IHZhbDsKIAogCQlwcmludGsoS0VSTl9JTkZPICJtYWNzb25pYzogUFJPTSBzZWVtcyB0byBiZSB3cm9uZywgdHJ5aW5nIENBTSBlbnRyeSAxNVxuIik7Ci0JCQorCiAJCVNPTklDX1dSSVRFKFNPTklDX0NNRCwgU09OSUNfQ1JfUlNUKTsKIAkJU09OSUNfV1JJVEUoU09OSUNfQ0VQLCAxNSk7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCQl2YWwgPSBTT05JQ19SRUFEKFNPTklDX0NBUDApOwogCQlkZXYtPmRldl9hZGRyWzFdID0gdmFsID4+IDg7CiAJCWRldi0+ZGV2X2FkZHJbMF0gPSB2YWwgJiAweGZmOwotCQkKKwogCQlwcmludGsoS0VSTl9JTkZPICJIVyBBZGRyZXNzIGZyb20gQ0FNIDE1OiAiKTsKIAkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewogCQkJcHJpbnRrKCIlMi4yeCIsIGRldi0+ZGV2X2FkZHJbaV0pOwpAQCAtMjU4LDcgKzI1OCw3IEBACiAJc3RydWN0IHNvbmljX2xvY2FsKiBscCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHNyOwogCWludCBjb21tc2xvdCA9IDA7Ci0JCisKIAlpZiAob25jZV9pc19tb3JlX3RoYW5fZW5vdWdoKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlvbmNlX2lzX21vcmVfdGhhbl9lbm91Z2ggPSAxOwpAQCAtMjY4LDkgKzI2OCw5IEBACiAKIAlpZiAobWFjaW50b3NoX2NvbmZpZy0+ZXRoZXJfdHlwZSAhPSBNQUNfRVRIRVJfU09OSUMpCiAJCXJldHVybiAtRU5PREVWOwotCQorCiAJcHJpbnRrKEtFUk5fSU5GTyAiQ2hlY2tpbmcgZm9yIGludGVybmFsIE1hY2ludG9zaCBldGhlcm5ldCAoU09OSUMpLi4gIik7Ci0JCisKIAkvKiBCb2d1cyBwcm9iaW5nLCBvbiB0aGUgbW9kZWxzIHdoaWNoIG1heSBvciBtYXkgbm90IGhhdmUKIAkgICBFdGhlcm5ldCAoQlRXLCB0aGUgRXRoZXJuZXQgKmlzKiBhbHdheXMgYXQgdGhlIHNhbWUKIAkgICBhZGRyZXNzLCBhbmQgbm90aGluZyBlbHNlIGxpdmVzIHRoZXJlLCBhdCBsZWFzdCBpZiBBcHBsZSdzCkBAIC0yOTMsNyArMjkzLDcgQEAKIAkJY29tbXNsb3QgPSAxOwogCX0KIAotCXByaW50aygieWVzXG4iKTsJCisJcHJpbnRrKCJ5ZXNcbiIpOwogCiAJLyogRGFuZ2VyISAgTXkgYXJtcyBhcmUgZmxhaWxpbmcgd2lsZGx5ISAgWW91ICptdXN0KiBzZXQgbHAtPnJlZ19vZmZzZXQKIAkgKiBhbmQgZGV2LT5iYXNlX2FkZHIgYmVmb3JlIHVzaW5nIFNPTklDX1JFQUQoKSBvciBTT05JQ19XUklURSgpICovCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkJbHAtPmRtYV9iaXRtb2RlID0gU09OSUNfQklUTU9ERTE2OwogCiAJCXNyID0gU09OSUNfUkVBRChTT05JQ19TUik7Ci0JCWlmIChzciA9PSAweDAwMDQgfHwgc3IgPT0gMHgwMDA2IHx8IHNyID09IDB4MDEwMCB8fCBzciA9PSAweDAxMDEpIAorCQlpZiAoc3IgPT0gMHgwMDA0IHx8IHNyID09IDB4MDAwNiB8fCBzciA9PSAweDAxMDAgfHwgc3IgPT0gMHgwMTAxKQogCQkJLyogODM5MzIgaXMgMHgwMDA0IG9yIDB4MDAwNiwgODM5MzQgaXMgMHgwMTAwIG9yIDB4MDEwMSAqLwogCQkJbHAtPmRtYV9iaXRtb2RlID0gU09OSUNfQklUTU9ERTMyOwogCQllbHNlIHsKQEAgLTM4OSw3ICszODksNyBAQAogCiBpbnQgX19pbml0IG1hY3NvbmljX2lkZW50KHN0cnVjdCBudWJ1c19kZXYqIG5kZXYpCiB7Ci0JaWYgKG5kZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfQVNBTlRFX0xDICYmIAorCWlmIChuZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX0FTQU5URV9MQyAmJgogCSAgICBuZGV2LT5kcl9zdyA9PSBOVUJVU19EUlNXX1NPTklDX0xDKQogCQlyZXR1cm4gTUFDU09OSUNfREFZTkFMSU5LOwogCWlmIChuZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX1NPTklDICYmCkBAIC00MDAsMTEgKzQwMCwxMSBAQAogCQllbHNlCiAJCQlyZXR1cm4gTUFDU09OSUNfQVBQTEU7CiAJfQotCQorCiAJaWYgKG5kZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfU01DOTE5NCAmJgogCSAgICBuZGV2LT5kcl9zdyA9PSBOVUJVU19EUlNXX0RBWU5BKQogCQlyZXR1cm4gTUFDU09OSUNfREFZTkE7Ci0JCisKIAlpZiAobmRldi0+ZHJfaHcgPT0gTlVCVVNfRFJIV19TT05JQ19MQyAmJgogCSAgICBuZGV2LT5kcl9zdyA9PSAwKSB7IC8qIGh1aD8gKi8KIAkJcmV0dXJuIE1BQ1NPTklDX0FQUExFMTY7CkBAIC00MjEsNyArNDIxLDcgQEAKIAl1MTYgc29uaWNfZGNyOwogCWludCBpZCA9IC0xOwogCWludCByZWdfb2Zmc2V0LCBkbWFfYml0bW9kZTsKLQkKKwogCS8qIEZpbmQgdGhlIGZpcnN0IFNPTklDIHRoYXQgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgYWxyZWFkeSAqLwogCXdoaWxlICgobmRldiA9IG51YnVzX2ZpbmRfdHlwZShOVUJVU19DQVRfTkVUV09SSywKIAkJCQkgICAgICAgTlVCVVNfVFlQRV9FVEhFUk5FVCwgbmRldikpICE9IE5VTEwpCkBAIC00NTksNyArNDU5LDcgQEAKIAkJYmFzZV9hZGRyID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkciArIEFQUExFX1NPTklDX1JFR0lTVEVSUzsKIAkJcHJvbV9hZGRyID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkciArIEFQUExFX1NPTklDX1BST01fQkFTRTsKIAkJc29uaWNfZGNyID0gU09OSUNfRENSX0VYQlVTIHwgU09OSUNfRENSX1JGVDEgfCBTT05JQ19EQ1JfVEZUMCB8Ci0JCSAgICAgICAgICAgIFNPTklDX0RDUl9QTzEgfCBTT05JQ19EQ1JfQk1TOyAKKwkJICAgICAgICAgICAgU09OSUNfRENSX1BPMSB8IFNPTklDX0RDUl9CTVM7CiAJCXJlZ19vZmZzZXQgPSAwOwogCQlkbWFfYml0bW9kZSA9IFNPTklDX0JJVE1PREUxNjsKIAkJYnJlYWs7CkBAIC00NjcsNyArNDY3LDcgQEAKIAkJYmFzZV9hZGRyID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkciArIEFQUExFX1NPTklDX1JFR0lTVEVSUzsKIAkJcHJvbV9hZGRyID0gbmRldi0+Ym9hcmQtPnNsb3RfYWRkciArIERBWU5BTElOS19QUk9NX0JBU0U7CiAJCXNvbmljX2RjciA9IFNPTklDX0RDUl9SRlQxIHwgU09OSUNfRENSX1RGVDAgfAotCQkgICAgICAgICAgICBTT05JQ19EQ1JfUE8xIHwgU09OSUNfRENSX0JNUzsgCisJCSAgICAgICAgICAgIFNPTklDX0RDUl9QTzEgfCBTT05JQ19EQ1JfQk1TOwogCQlyZWdfb2Zmc2V0ID0gMDsKIAkJZG1hX2JpdG1vZGUgPSBTT05JQ19CSVRNT0RFMTY7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IGQ2NDRiZjMuLjU1YjE0OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTkzLDcgKzkzLDcgQEAKIAogc3RhdGljIHZvaWQgbWV0aF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGlycXJldHVybl90IG1ldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnByZWdzKTsKLSAgICAgICAgCisKIC8qIGdsb2JhbCwgaW5pdGlhbGl6ZWQgaW4gaXAzMi1zZXR1cC5jICovCiBjaGFyIG8ybWV0aF9lYWRkcls4XT17MCwwLDAsMCwwLDAsMCwwfTsKIApAQCAtMjMyLDcgKzIzMiw3IEBACiAJCXNrYl9yZXNlcnZlKHByaXYtPnJ4X3NrYnNbaV0sTUVUSF9SWF9IRUFEKTsKIAkJcHJpdi0+cnhfcmluZ1tpXT0ocnhfcGFja2V0KikocHJpdi0+cnhfc2tic1tpXS0+aGVhZCk7CiAJCS8qIEknbGwgbmVlZCB0byByZS1zeW5jIGl0IGFmdGVyIGVhY2ggUlggKi8KLQkJcHJpdi0+cnhfcmluZ19kbWFzW2ldID0gCisJCXByaXYtPnJ4X3JpbmdfZG1hc1tpXSA9CiAJCQlkbWFfbWFwX3NpbmdsZShOVUxMLCBwcml2LT5yeF9yaW5nW2ldLAogCQkJCSAgICAgICBNRVRIX1JYX0JVRkZfU0laRSwgRE1BX0ZST01fREVWSUNFKTsKIAkJbWFjZS0+ZXRoLnJ4X2ZpZm8gPSBwcml2LT5yeF9yaW5nX2RtYXNbaV07CkBAIC0yODEsNyArMjgxLDcgQEAKIAkvKiBMb2FkIGV0aGVybmV0IGFkZHJlc3MgKi8KIAlsb2FkX2VhZGRyKGRldik7CiAJLyogU2hvdWxkIGxvYWQgc29tZSAiZXJyYXRhIiwgYnV0IGxhdGVyICovCi0JCisKIAkvKiBDaGVjayBmb3IgZGV2aWNlICovCiAJaWYgKG1kaW9fcHJvYmUocHJpdikgPCAwKSB7CiAJCURQUklOVEsoIlVuYWJsZSB0byBmaW5kIFBIWVxuIik7CkBAIC00NTIsNyArNDUyLDcgQEAKIAkJfQogCQlwcml2LT5yeF9yaW5nW3ByaXYtPnJ4X3dyaXRlXSA9IChyeF9wYWNrZXQqKXNrYi0+aGVhZDsKIAkJcHJpdi0+cnhfcmluZ1twcml2LT5yeF93cml0ZV0tPnN0YXR1cy5yYXcgPSAwOwotCQlwcml2LT5yeF9yaW5nX2RtYXNbcHJpdi0+cnhfd3JpdGVdID0gCisJCXByaXYtPnJ4X3JpbmdfZG1hc1twcml2LT5yeF93cml0ZV0gPQogCQkJZG1hX21hcF9zaW5nbGUoTlVMTCwgcHJpdi0+cnhfcmluZ1twcml2LT5yeF93cml0ZV0sCiAJCQkJICAgICAgIE1FVEhfUlhfQlVGRl9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOwogCQltYWNlLT5ldGgucnhfZmlmbyA9IHByaXYtPnJ4X3JpbmdfZG1hc1twcml2LT5yeF93cml0ZV07CkBAIC01NTUsNyArNTU1LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAibWV0aDogUnggdW5kZXJmbG93XG4iKTsKIAkJc3Bpbl9sb2NrKCZwcml2LT5tZXRoX2xvY2spOwogCQltYWNlLT5ldGguaW50X3N0YXQgPSBNRVRIX0lOVF9SWF9VTkRFUkZMT1c7Ci0JCS8qIG1vcmUgdW5kZXJmbG93IGludGVycnVwdHMgd2lsbCBiZSBkZWxpdmVyZWQsIAorCQkvKiBtb3JlIHVuZGVyZmxvdyBpbnRlcnJ1cHRzIHdpbGwgYmUgZGVsaXZlcmVkLAogCQkgKiBlZmZlY3RpdmVseSB0aHJvd2luZyB1cyBpbnRvIGFuIGluZmluaXRlIGxvb3AuCiAJCSAqICBUaHVzIEkgc3RvcCBwcm9jZXNzaW5nIFJ4IGluIHRoaXMgY2FzZS4gKi8KIAkJcHJpdi0+ZG1hX2N0cmwgJj0gfk1FVEhfRE1BX1JYX0VOOwpAQCAtNzYxLDEyICs3NjEsMTIgQEAKIH0KIAogLyoKLSAqIElvY3RsIGNvbW1hbmRzIAorICogSW9jdGwgY29tbWFuZHMKICAqLwogc3RhdGljIGludCBtZXRoX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJLyogWFhYIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLQlzd2l0Y2goY21kKSB7IAorCXN3aXRjaChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgogCWNhc2UgU0lPQ0dNSUlSRUc6CiAJY2FzZSBTSU9DU01JSVJFRzoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21paS5jIGIvZHJpdmVycy9uZXQvbWlpLmMKaW5kZXggZTQyYWE3OS4uMjkxMmEzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWlpLmMKKysrIGIvZHJpdmVycy9uZXQvbWlpLmMKQEAgLTgzLDkgKzgzLDkgQEAKIAlpZiAoYm1jciAmIEJNQ1JfQU5FTkFCTEUpIHsKIAkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19FTkFCTEU7Ci0JCQorCiAJCW5lZ28gPSBtaWlfbndheV9yZXN1bHQoYWR2ZXJ0ICYgbHBhKTsKLQkJaWYgKChibWNyMiAmIChBRFZFUlRJU0VfMTAwMEhBTEYgfCBBRFZFUlRJU0VfMTAwMEZVTEwpKSAmIAorCQlpZiAoKGJtY3IyICYgKEFEVkVSVElTRV8xMDAwSEFMRiB8IEFEVkVSVElTRV8xMDAwRlVMTCkpICYKIAkJICAgIChscGEyID4+IDIpKQogCQkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOwogCQllbHNlIGlmIChuZWdvID09IExQQV8xMDBGVUxMIHx8IG5lZ28gPT0gTFBBXzEwMEhBTEYpCkBAIC0xMDMsNyArMTAzLDcgQEAKIAl9IGVsc2UgewogCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOwogCi0JCWVjbWQtPnNwZWVkID0gKChibWNyICYgQk1DUl9TUEVFRDEwMDAgJiYgCisJCWVjbWQtPnNwZWVkID0gKChibWNyICYgQk1DUl9TUEVFRDEwMDAgJiYKIAkJCQkoYm1jciAmIEJNQ1JfU1BFRUQxMDApID09IDApID8gU1BFRURfMTAwMCA6CiAJCQkgICAgICAgKGJtY3IgJiBCTUNSX1NQRUVEMTAwKSA/IFNQRUVEXzEwMCA6IFNQRUVEXzEwKTsKIAkJZWNtZC0+ZHVwbGV4ID0gKGJtY3IgJiBCTUNSX0ZVTExEUExYKSA/IERVUExFWF9GVUxMIDogRFVQTEVYX0hBTEY7CkBAIC0xMTgsOCArMTE4LDggQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbWlpLT5kZXY7CiAKLQlpZiAoZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAgJiYgCi0JICAgIGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwMCAmJiAKKwlpZiAoZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAgJiYKKwkgICAgZWNtZC0+c3BlZWQgIT0gU1BFRURfMTAwICYmCiAJICAgIGVjbWQtPnNwZWVkICE9IFNQRUVEXzEwMDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChlY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKQpAQCAtMTM0LDkgKzEzNCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgoZWNtZC0+c3BlZWQgPT0gU1BFRURfMTAwMCkgJiYgKCFtaWktPnN1cHBvcnRzX2dtaWkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQkgIAorCiAJLyogaWdub3JlIHN1cHBvcnRlZCwgbWF4dHhwa3QsIG1heHJ4cGt0ICovCi0JCisKIAlpZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQl1MzIgYm1jciwgYWR2ZXJ0LCB0bXA7CiAJCXUzMiBhZHZlcnQyID0gMCwgdG1wMiA9IDA7CkBAIC0xNzYsNyArMTc2LDcgQEAKIAkJfQogCQlpZiAoKG1paS0+c3VwcG9ydHNfZ21paSkgJiYgKGFkdmVydDIgIT0gdG1wMikpCiAJCQltaWktPm1kaW9fd3JpdGUoZGV2LCBtaWktPnBoeV9pZCwgTUlJX0NUUkwxMDAwLCB0bXAyKTsKLQkJCisKIAkJLyogdHVybiBvbiBhdXRvbmVnb3RpYXRpb24sIGFuZCBmb3JjZSBhIHJlbmVnb3RpYXRlICovCiAJCWJtY3IgPSBtaWktPm1kaW9fcmVhZChkZXYsIG1paS0+cGh5X2lkLCBNSUlfQk1DUik7CiAJCWJtY3IgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CkBAIC0xODgsNyArMTg4LDcgQEAKIAogCQkvKiB0dXJuIG9mZiBhdXRvIG5lZ290aWF0aW9uLCBzZXQgc3BlZWQgYW5kIGR1cGxleGl0eSAqLwogCQlibWNyID0gbWlpLT5tZGlvX3JlYWQoZGV2LCBtaWktPnBoeV9pZCwgTUlJX0JNQ1IpOwotCQl0bXAgPSBibWNyICYgfihCTUNSX0FORU5BQkxFIHwgQk1DUl9TUEVFRDEwMCB8IAorCQl0bXAgPSBibWNyICYgfihCTUNSX0FORU5BQkxFIHwgQk1DUl9TUEVFRDEwMCB8CiAJCQkgICAgICAgQk1DUl9TUEVFRDEwMDAgfCBCTUNSX0ZVTExEUExYKTsKIAkJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDApCiAJCQl0bXAgfD0gQk1DUl9TUEVFRDEwMDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCA3NjBjNjFiLi42YTc0NjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTc0LDcgKzc0LDcgQEAKIHN0YXRpYyBpbnQgbXY2NDN4eF9tZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKTsKIHN0YXRpYyB2b2lkIG12NjQzeHhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIGludCB2YWwpOwogc3RhdGljIGludCBtdjY0M3h4X2V0aF9kb19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG12NjQzeHhfZXRodG9vbF9vcHM7CiAKIHN0YXRpYyBjaGFyIG12NjQzeHhfZHJpdmVyX25hbWVbXSA9ICJtdjY0M3h4X2V0aCI7CiBzdGF0aWMgY2hhciBtdjY0M3h4X2RyaXZlcl92ZXJzaW9uW10gPSAiMS4wIjsKQEAgLTM4NSw2ICszODUsOCBAQAogCXN0cnVjdCBwa3RfaW5mbyBwa3RfaW5mbzsKIAogCXdoaWxlIChidWRnZXQtLSA+IDAgJiYgZXRoX3BvcnRfcmVjZWl2ZShtcCwgJnBrdF9pbmZvKSA9PSBFVEhfT0spIHsKKwkJZG1hX3VubWFwX3NpbmdsZShOVUxMLCBwa3RfaW5mby5idWZfcHRyLCBFVEhfUlhfU0tCX1NJWkUsCisJCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKIAkJbXAtPnJ4X2Rlc2NfY291bnQtLTsKIAkJcmVjZWl2ZWRfcGFja2V0cysrOwogCkBAIC0yNzIxLDcgKzI3MjMsNyBAQAogCWV0aF91cGRhdGVfbWliX2NvdW50ZXJzKG1wKTsKIAogCWZvciAoaSA9IDA7IGkgPCBNVjY0M1hYX1NUQVRTX0xFTjsgaSsrKSB7Ci0JCWNoYXIgKnAgPSAoY2hhciAqKW1wK212NjQzeHhfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9vZmZzZXQ7CQorCQljaGFyICpwID0gKGNoYXIgKiltcCttdjY0M3h4X2dzdHJpbmdzX3N0YXRzW2ldLnN0YXRfb2Zmc2V0OwogCQlkYXRhW2ldID0gKG12NjQzeHhfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0KIAkJCXNpemVvZih1aW50NjRfdCkpID8gKih1aW50NjRfdCAqKXAgOiAqKHVpbnQzMl90ICopcDsKIAl9CkBAIC0yNzY0LDcgKzI3NjYsNyBAQAogCXJldHVybiBnZW5lcmljX21paV9pb2N0bCgmbXAtPm1paSwgaWZfbWlpKGlmciksIGNtZCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbXY2NDN4eF9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbXY2NDN4eF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IG12NjQzeHhfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MgICAgICAgICAgID0gbXY2NDN4eF9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvICAgICAgICAgICAgPSBtdjY0M3h4X2dldF9kcnZpbmZvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKaW5kZXggMDdjYTk0OC4uMjc3MzQ0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYworKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCkBAIC0xNzcsNiArMTc3LDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfd29yazsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKIAlpbnQgd2F0Y2hkb2dfdHhfZG9uZTsKKwlpbnQgd2F0Y2hkb2dfdHhfcmVxOwogCWludCB3YXRjaGRvZ19yZXNldHM7CiAJaW50IHR4X2xpbmVhcml6ZWQ7CiAJaW50IHBhdXNlOwpAQCAtMTg2LDExICsxODcsMTQgQEAKIAl1OCBtYWNfYWRkcls2XTsJCS8qIGVlcHJvbSBtYWMgYWRkcmVzcyAqLwogCXVuc2lnbmVkIGxvbmcgc2VyaWFsX251bWJlcjsKIAlpbnQgdmVuZG9yX3NwZWNpZmljX29mZnNldDsKKwlpbnQgZndfbXVsdGljYXN0X3N1cHBvcnQ7CiAJdTMyIGRldmN0bDsKIAl1MTYgbXNpX2ZsYWdzOwogCXUzMiByZWFkX2RtYTsKIAl1MzIgd3JpdGVfZG1hOwogCXUzMiByZWFkX3dyaXRlX2RtYTsKKwl1MzIgbGlua19jaGFuZ2VzOworCXUzMiBtc2dfZW5hYmxlOwogfTsKIAogc3RhdGljIGNoYXIgKm15cmkxMGdlX2Z3X3VuYWxpZ25lZCA9ICJteXJpMTBnZV9ldGhwX3o4ZS5kYXQiOwpAQCAtMjU2LDYgKzI2MCwxMiBAQAogTU9EVUxFX1BBUk1fREVTQyhteXJpMTBnZV9tYXhfaXJxX2xvb3BzLAogCQkgIlNldCBzdHVjayBsZWdhY3kgSVJRIGRldGVjdGlvbiB0aHJlc2hvbGRcbiIpOwogCisjZGVmaW5lIE1ZUkkxMEdFX01TR19ERUZBVUxUIE5FVElGX01TR19MSU5LCisKK3N0YXRpYyBpbnQgbXlyaTEwZ2VfZGVidWcgPSAtMTsJLyogZGVmYXVsdHMgYWJvdmUgKi8KK21vZHVsZV9wYXJhbShteXJpMTBnZV9kZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobXlyaTEwZ2VfZGVidWcsICJEZWJ1ZyBsZXZlbCAoMD1ub25lLC4uLiwxNj1hbGwpIik7CisKICNkZWZpbmUgTVlSSTEwR0VfRldfT0ZGU0VUIDEwMjQqMTAyNAogI2RlZmluZSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoWCkgXAogKHNpemVvZiAoWCkgPT0gOCkgPyAoKHUzMikoKHU2NCkoWCkgPj4gMzIpKSA6ICgwKQpAQCAtMjcwLDcgKzI4MCw3IEBACiAJc3RydWN0IG1jcF9jbWQgKmJ1ZjsKIAljaGFyIGJ1Zl9ieXRlc1tzaXplb2YoKmJ1ZikgKyA4XTsKIAlzdHJ1Y3QgbWNwX2NtZF9yZXNwb25zZSAqcmVzcG9uc2UgPSBtZ3AtPmNtZDsKLQljaGFyIF9faW9tZW0gKmNtZF9hZGRyID0gbWdwLT5zcmFtICsgTVhHRUZXX0NNRF9PRkZTRVQ7CisJY2hhciBfX2lvbWVtICpjbWRfYWRkciA9IG1ncC0+c3JhbSArIE1YR0VGV19FVEhfQ01EOwogCXUzMiBkbWFfbG93LCBkbWFfaGlnaCwgcmVzdWx0LCB2YWx1ZTsKIAlpbnQgc2xlZXBfdG90YWwgPSAwOwogCkBAIC0zMTksNiArMzI5LDggQEAKIAkJaWYgKHJlc3VsdCA9PSAwKSB7CiAJCQlkYXRhLT5kYXRhMCA9IHZhbHVlOwogCQkJcmV0dXJuIDA7CisJCX0gZWxzZSBpZiAocmVzdWx0ID09IE1YR0VGV19DTURfVU5LTk9XTikgeworCQkJcmV0dXJuIC1FTk9TWVM7CiAJCX0gZWxzZSB7CiAJCQlkZXZfZXJyKCZtZ3AtPnBkZXYtPmRldiwKIAkJCQkiY29tbWFuZCAlZCBmYWlsZWQsIHJlc3VsdCA9ICVkXG4iLApAQCAtNDAzLDcgKzQxNSw3IEBACiAJYnVmWzRdID0gaHRvbmwoZG1hX2xvdyk7CS8qIGR1bW15IGFkZHIgTFNXICovCiAJYnVmWzVdID0gaHRvbmwoZW5hYmxlKTsJLyogZW5hYmxlPyAqLwogCi0Jc3VibWl0ID0gbWdwLT5zcmFtICsgMHhmYzAxYzA7CisJc3VibWl0ID0gbWdwLT5zcmFtICsgTVhHRUZXX0JPT1RfRFVNTVlfUkRNQTsKIAogCW15cmkxMGdlX3Bpb19jb3B5KHN1Ym1pdCwgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCWZvciAoaSA9IDA7IG1ncC0+Y21kLT5kYXRhICE9IE1ZUkkxMEdFX05PX0NPTkZJUk1fREFUQSAmJiBpIDwgMjA7IGkrKykKQEAgLTQ0OCw2ICs0NjAsNyBAQAogCXN0cnVjdCBtY3BfZ2VuX2hlYWRlciAqaGRyOwogCXNpemVfdCBoZHJfb2Zmc2V0OwogCWludCBzdGF0dXM7CisJdW5zaWduZWQgaTsKIAogCWlmICgoc3RhdHVzID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIG1ncC0+ZndfbmFtZSwgZGV2KSkgPCAwKSB7CiAJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIGxvYWQgJXMgZmlybXdhcmUgaW1hZ2UgdmlhIGhvdHBsdWdcbiIsCkBAIC00NzksMTggKzQ5MiwxMiBAQAogCQlnb3RvIGFib3J0X3dpdGhfZnc7CiAKIAljcmMgPSBjcmMzMih+MCwgZnctPmRhdGEsIGZ3LT5zaXplKTsKLQlpZiAobWdwLT50eC5ib3VuZGFyeSA9PSAyMDQ4KSB7Ci0JCS8qIEF2b2lkIFBDSSBidXJzdCBvbiBjaGlwc2V0IHdpdGggdW5hbGlnbmVkIGNvbXBsZXRpb25zLiAqLwotCQlpbnQgaTsKLQkJX19pb21lbSB1MzIgKnB0ciA9IChfX2lvbWVtIHUzMiAqKSAobWdwLT5zcmFtICsKLQkJCQkJCSAgICBNWVJJMTBHRV9GV19PRkZTRVQpOwotCQlmb3IgKGkgPSAwOyBpIDwgZnctPnNpemUgLyA0OyBpKyspIHsKLQkJCV9fcmF3X3dyaXRlbCgoKHUzMiAqKSBmdy0+ZGF0YSlbaV0sIHB0ciArIGkpOwotCQkJd21iKCk7Ci0JCX0KLQl9IGVsc2UgewotCQlteXJpMTBnZV9waW9fY29weShtZ3AtPnNyYW0gKyBNWVJJMTBHRV9GV19PRkZTRVQsIGZ3LT5kYXRhLAotCQkJCSAgZnctPnNpemUpOworCWZvciAoaSA9IDA7IGkgPCBmdy0+c2l6ZTsgaSArPSAyNTYpIHsKKwkJbXlyaTEwZ2VfcGlvX2NvcHkobWdwLT5zcmFtICsgTVlSSTEwR0VfRldfT0ZGU0VUICsgaSwKKwkJCQkgIGZ3LT5kYXRhICsgaSwKKwkJCQkgIG1pbigyNTZVLCAodW5zaWduZWQpKGZ3LT5zaXplIC0gaSkpKTsKKwkJbWIoKTsKKwkJcmVhZGIobWdwLT5zcmFtKTsKIAl9CiAJLyogY29ycnVwdGlvbiBjaGVja2luZyBpcyBnb29kIGZvciBwYXJpdHkgcmVjb3ZlcnkgYW5kIGJ1Z2d5IGNoaXBzZXQgKi8KIAltZW1jcHlfZnJvbWlvKGZ3LT5kYXRhLCBtZ3AtPnNyYW0gKyBNWVJJMTBHRV9GV19PRkZTRVQsIGZ3LT5zaXplKTsKQEAgLTYwNCw3ICs2MTEsNyBAQAogCWJ1Zls1XSA9IGh0b25sKDgpOwkvKiB3aGVyZSB0byBjb3B5IHRvICovCiAJYnVmWzZdID0gaHRvbmwoMCk7CS8qIHdoZXJlIHRvIGp1bXAgdG8gKi8KIAotCXN1Ym1pdCA9IG1ncC0+c3JhbSArIDB4ZmMwMDAwOworCXN1Ym1pdCA9IG1ncC0+c3JhbSArIE1YR0VGV19CT09UX0hBTkRPRkY7CiAKIAlteXJpMTBnZV9waW9fY29weShzdWJtaXQsICZidWYsIHNpemVvZihidWYpKTsKIAltYigpOwpAQCAtNjIwLDcgKzYyNyw3IEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwgImhhbmRvZmYgY29uZmlybWVkXG4iKTsKLQlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgbWdwLT50eC5ib3VuZGFyeSAhPSA0MDk2KTsKKwlteXJpMTBnZV9kdW1teV9yZG1hKG1ncCwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTc2OCw2ICs3NzUsNyBAQAogCW1ncC0+cnhfc21hbGwuY250ID0gMDsKIAltZ3AtPnJ4X2RvbmUuaWR4ID0gMDsKIAltZ3AtPnJ4X2RvbmUuY250ID0gMDsKKwltZ3AtPmxpbmtfY2hhbmdlcyA9IDA7CiAJc3RhdHVzID0gbXlyaTEwZ2VfdXBkYXRlX21hY19hZGRyZXNzKG1ncCwgbWdwLT5kZXYtPmRldl9hZGRyKTsKIAlteXJpMTBnZV9jaGFuZ2VfcHJvbWlzYyhtZ3AsIDAsIDApOwogCW15cmkxMGdlX2NoYW5nZV9wYXVzZShtZ3AsIG1ncC0+cGF1c2UpOwpAQCAtODAyLDEyICs4MTAsMTMgQEAKICAqIHBhZ2VzIGRpcmVjdGx5IGFuZCBidWlsZGluZyBhIGZyYWdsaXN0IGluIHRoZSBuZWFyIGZ1dHVyZS4KICAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19iaWcoaW50IGJ5dGVzKQorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXlyaTEwZ2VfYWxsb2NfYmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgaW50IGJ5dGVzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgbG9uZyBkYXRhLCByb3VuZHVwOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihieXRlcyArIDQwOTYgKyBNWEdFRldfUEFEKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgYnl0ZXMgKyA0MDk2ICsgTVhHRUZXX1BBRCk7CiAJaWYgKHNrYiA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtODI1LDEyICs4MzQsMTMgQEAKIAogLyogQWxsb2NhdGUgMnggYXMgbXVjaCBzcGFjZSBhcyByZXF1aXJlZCBhbmQgdXNlIHdoaWNoZXZlciBwb3J0aW9uCiAgKiBkb2VzIG5vdCBjcm9zcyBhIDRLQiBib3VuZGFyeSAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbXlyaTEwZ2VfYWxsb2Nfc21hbGxfc2FmZSh1bnNpZ25lZCBpbnQgYnl0ZXMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19zbWFsbF9zYWZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkJdW5zaWduZWQgaW50IGJ5dGVzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgbG9uZyBkYXRhLCBib3VuZGFyeTsKIAotCXNrYiA9IGRldl9hbGxvY19za2IoMiAqIChieXRlcyArIE1YR0VGV19QQUQpIC0gMSk7CisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIDIgKiAoYnl0ZXMgKyBNWEdFRldfUEFEKSAtIDEpOwogCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCiAJCXJldHVybiBOVUxMOwogCkBAIC04NTEsMTIgKzg2MSwxMyBAQAogCiAvKiBBbGxvY2F0ZSBqdXN0IGVub3VnaCBzcGFjZSwgYW5kIHZlcmlmeSB0aGF0IHRoZSBhbGxvY2F0ZWQKICAqIHNwYWNlIGRvZXMgbm90IGNyb3NzIGEgNEtCIGJvdW5kYXJ5ICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19zbWFsbChpbnQgYnl0ZXMpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpteXJpMTBnZV9hbGxvY19zbWFsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgaW50IGJ5dGVzKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgbG9uZyByb3VuZHVwLCBkYXRhLCBlbmQ7CiAKLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGJ5dGVzICsgMTYgKyBNWEdFRldfUEFEKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgYnl0ZXMgKyAxNiArIE1YR0VGV19QQUQpOwogCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpCiAJCXJldHVybiBOVUxMOwogCkBAIC04NzIsMTUgKzg4MywxNyBAQAogCQkgICAgICAgIm15cmkxMGdlX2FsbG9jX3NtYWxsOiBzbWFsbCBza2IgY3Jvc3NlZCA0S0IgYm91bmRhcnlcbiIpOwogCQlteXJpMTBnZV9za2JfY3Jvc3NfNGsgPSAxOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlza2IgPSBteXJpMTBnZV9hbGxvY19zbWFsbF9zYWZlKGJ5dGVzKTsKKwkJc2tiID0gbXlyaTEwZ2VfYWxsb2Nfc21hbGxfc2FmZShkZXYsIGJ5dGVzKTsKIAl9CiAJcmV0dXJuIHNrYjsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLW15cmkxMGdlX2dldGJ1ZihzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmICpyeCwgc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBieXRlcywKLQkJaW50IGlkeCkKK215cmkxMGdlX2dldGJ1ZihzdHJ1Y3QgbXlyaTEwZ2VfcnhfYnVmICpyeCwgc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncCwKKwkJaW50IGJ5dGVzLCBpbnQgaWR4KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtZ3AtPmRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG1ncC0+cGRldjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWRtYV9hZGRyX3QgYnVzOwogCWludCBsZW4sIHJldHZhbCA9IDA7CkBAIC04ODgsMTEgKzkwMSwxMSBAQAogCWJ5dGVzICs9IFZMQU5fSExFTjsJLyogYWNjb3VudCBmb3IgODAyLjFxIHZsYW4gdGFnICovCiAKIAlpZiAoKGJ5dGVzICsgTVhHRUZXX1BBRCkgPiAoNDA5NiAtIDE2KSAvKiBsaW51eCBvdmVyaGVhZCAqLyApCi0JCXNrYiA9IG15cmkxMGdlX2FsbG9jX2JpZyhieXRlcyk7CisJCXNrYiA9IG15cmkxMGdlX2FsbG9jX2JpZyhkZXYsIGJ5dGVzKTsKIAllbHNlIGlmIChteXJpMTBnZV9za2JfY3Jvc3NfNGspCi0JCXNrYiA9IG15cmkxMGdlX2FsbG9jX3NtYWxsX3NhZmUoYnl0ZXMpOworCQlza2IgPSBteXJpMTBnZV9hbGxvY19zbWFsbF9zYWZlKGRldiwgYnl0ZXMpOwogCWVsc2UKLQkJc2tiID0gbXlyaTEwZ2VfYWxsb2Nfc21hbGwoYnl0ZXMpOworCQlza2IgPSBteXJpMTBnZV9hbGxvY19zbWFsbChkZXYsIGJ5dGVzKTsKIAogCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpIHsKIAkJcngtPmFsbG9jX2ZhaWwrKzsKQEAgLTk1NSw3ICs5NjgsNyBAQAogCXVubWFwX2xlbiA9IHBjaV91bm1hcF9sZW4oJnJ4LT5pbmZvW2lkeF0sIGxlbik7CiAKIAkvKiB0cnkgdG8gcmVwbGFjZSB0aGUgcmVjZWl2ZWQgc2tiICovCi0JaWYgKG15cmkxMGdlX2dldGJ1ZihyeCwgbWdwLT5wZGV2LCBieXRlcywgaWR4KSkgeworCWlmIChteXJpMTBnZV9nZXRidWYocngsIG1ncCwgYnl0ZXMsIGlkeCkpIHsKIAkJLyogZHJvcCB0aGUgZnJhbWUgLS0gdGhlIG9sZCBza2J1ZiBpcyByZS1jeWNsZWQgKi8KIAkJbWdwLT5zdGF0cy5yeF9kcm9wcGVkICs9IDE7CiAJCXJldHVybiAwOwpAQCAtOTcyLDcgKzk4NSw2IEBACiAJc2tiX3B1dChza2IsIGxlbik7CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBtZ3AtPmRldik7Ci0Jc2tiLT5kZXYgPSBtZ3AtPmRldjsKIAlpZiAobWdwLT5jc3VtX2ZsYWcpIHsKIAkJaWYgKChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQKSkgfHwKIAkJICAgIChza2ItPnByb3RvY29sID09IG50b2hzKEVUSF9QX0lQVjYpKSkgewpAQCAtMTA4NSwxMyArMTA5NywxOSBAQAogCQlpZiAobWdwLT5saW5rX3N0YXRlICE9IHN0YXRzLT5saW5rX3VwKSB7CiAJCQltZ3AtPmxpbmtfc3RhdGUgPSBzdGF0cy0+bGlua191cDsKIAkJCWlmIChtZ3AtPmxpbmtfc3RhdGUpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogJXM6IGxpbmsgdXBcbiIsCi0JCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJCQlpZiAobmV0aWZfbXNnX2xpbmsobWdwKSkKKwkJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCQkgICAgICAgIm15cmkxMGdlOiAlczogbGluayB1cFxuIiwKKwkJCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKIAkJCQluZXRpZl9jYXJyaWVyX29uKG1ncC0+ZGV2KTsKKwkJCQltZ3AtPmxpbmtfY2hhbmdlcysrOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICJteXJpMTBnZTogJXM6IGxpbmsgZG93blxuIiwKLQkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJCWlmIChuZXRpZl9tc2dfbGluayhtZ3ApKQorCQkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBsaW5rIGRvd25cbiIsCisJCQkJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CiAJCQkJbmV0aWZfY2Fycmllcl9vZmYobWdwLT5kZXYpOworCQkJCW1ncC0+bGlua19jaGFuZ2VzKys7CiAJCQl9CiAJCX0KIAkJaWYgKG1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSAhPQpAQCAtMTI5Myw3ICsxMzExLDggQEAKIAkic2VyaWFsX251bWJlciIsICJ0eF9wa3Rfc3RhcnQiLCAidHhfcGt0X2RvbmUiLAogCSJ0eF9yZXEiLCAidHhfZG9uZSIsICJyeF9zbWFsbF9jbnQiLCAicnhfYmlnX2NudCIsCiAJIndha2VfcXVldWUiLCAic3RvcF9xdWV1ZSIsICJ3YXRjaGRvZ19yZXNldHMiLCAidHhfbGluZWFyaXplZCIsCi0JImxpbmtfdXAiLCAiZHJvcHBlZF9saW5rX292ZXJmbG93IiwgImRyb3BwZWRfbGlua19lcnJvcl9vcl9maWx0ZXJlZCIsCisJImxpbmtfY2hhbmdlcyIsICJsaW5rX3VwIiwgImRyb3BwZWRfbGlua19vdmVyZmxvdyIsCisJImRyb3BwZWRfbGlua19lcnJvcl9vcl9maWx0ZXJlZCIsICJkcm9wcGVkX211bHRpY2FzdF9maWx0ZXJlZCIsCiAJImRyb3BwZWRfcnVudCIsICJkcm9wcGVkX292ZXJydW4iLCAiZHJvcHBlZF9ub19zbWFsbF9idWZmZXIiLAogCSJkcm9wcGVkX25vX2JpZ19idWZmZXIiCiB9OwpAQCAtMTM0NSwxNyArMTM2NCwzMiBAQAogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT5zdG9wX3F1ZXVlOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbWdwLT53YXRjaGRvZ19yZXNldHM7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPnR4X2xpbmVhcml6ZWQ7CisJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCltZ3AtPmxpbmtfY2hhbmdlczsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmxpbmtfdXApOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9saW5rX292ZXJmbG93KTsKIAlkYXRhW2krK10gPQogCSAgICAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfbGlua19lcnJvcl9vcl9maWx0ZXJlZCk7CisJZGF0YVtpKytdID0KKwkgICAgKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX211bHRpY2FzdF9maWx0ZXJlZCk7CiAJZGF0YVtpKytdID0gKHVuc2lnbmVkIGludCludG9obChtZ3AtPmZ3X3N0YXRzLT5kcm9wcGVkX3J1bnQpOwogCWRhdGFbaSsrXSA9ICh1bnNpZ25lZCBpbnQpbnRvaGwobWdwLT5md19zdGF0cy0+ZHJvcHBlZF9vdmVycnVuKTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfbm9fc21hbGxfYnVmZmVyKTsKIAlkYXRhW2krK10gPSAodW5zaWduZWQgaW50KW50b2hsKG1ncC0+Zndfc3RhdHMtPmRyb3BwZWRfbm9fYmlnX2J1ZmZlcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbXlyaTEwZ2VfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgdm9pZCBteXJpMTBnZV9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCW1ncC0+bXNnX2VuYWJsZSA9IHZhbHVlOworfQorCitzdGF0aWMgdTMyIG15cmkxMGdlX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXJldHVybiBtZ3AtPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbXlyaTEwZ2VfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IG15cmkxMGdlX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8gPSBteXJpMTBnZV9nZXRfZHJ2aW5mbywKIAkuZ2V0X2NvYWxlc2NlID0gbXlyaTEwZ2VfZ2V0X2NvYWxlc2NlLApAQCAtMTM3NSw3ICsxNDA5LDkgQEAKICNlbmRpZgogCS5nZXRfc3RyaW5ncyA9IG15cmkxMGdlX2dldF9zdHJpbmdzLAogCS5nZXRfc3RhdHNfY291bnQgPSBteXJpMTBnZV9nZXRfc3RhdHNfY291bnQsCi0JLmdldF9ldGh0b29sX3N0YXRzID0gbXlyaTEwZ2VfZ2V0X2V0aHRvb2xfc3RhdHMKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBteXJpMTBnZV9nZXRfZXRodG9vbF9zdGF0cywKKwkuc2V0X21zZ2xldmVsID0gbXlyaTEwZ2Vfc2V0X21zZ2xldmVsLAorCS5nZXRfbXNnbGV2ZWwgPSBteXJpMTBnZV9nZXRfbXNnbGV2ZWwKIH07CiAKIHN0YXRpYyBpbnQgbXlyaTEwZ2VfYWxsb2NhdGVfcmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE0NDMsNyArMTQ3OSw3IEBACiAJLyogRmlsbCB0aGUgcmVjZWl2ZSByaW5ncyAqLwogCiAJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X3NtYWxsLm1hc2s7IGkrKykgewotCQlzdGF0dXMgPSBteXJpMTBnZV9nZXRidWYoJm1ncC0+cnhfc21hbGwsIG1ncC0+cGRldiwKKwkJc3RhdHVzID0gbXlyaTEwZ2VfZ2V0YnVmKCZtZ3AtPnJ4X3NtYWxsLCBtZ3AsCiAJCQkJCSBtZ3AtPnNtYWxsX2J5dGVzLCBpKTsKIAkJaWYgKHN0YXR1cykgewogCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0xNDU1LDggKzE0OTEsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8PSBtZ3AtPnJ4X2JpZy5tYXNrOyBpKyspIHsKIAkJc3RhdHVzID0KLQkJICAgIG15cmkxMGdlX2dldGJ1ZigmbWdwLT5yeF9iaWcsIG1ncC0+cGRldiwKLQkJCQkgICAgZGV2LT5tdHUgKyBFVEhfSExFTiwgaSk7CisJCSAgICBteXJpMTBnZV9nZXRidWYoJm1ncC0+cnhfYmlnLCBtZ3AsIGRldi0+bXR1ICsgRVRIX0hMRU4sIGkpOwogCQlpZiAoc3RhdHVzKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBhbGxvY2VkIG9ubHkgJWQgYmlnIGJ1ZnNcbiIsCkBAIC0xNjUyLDkgKzE2ODcsMTEgQEAKIAl9CiAKIAlpZiAobWdwLT5tdHJyID49IDApIHsKLQkJbWdwLT50eC53Y19maWZvID0gKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgMHgyMDAwMDA7Ci0JCW1ncC0+cnhfc21hbGwud2NfZmlmbyA9ICh1OCBfX2lvbWVtICopIG1ncC0+c3JhbSArIDB4MzAwMDAwOwotCQltZ3AtPnJ4X2JpZy53Y19maWZvID0gKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgMHgzNDAwMDA7CisJCW1ncC0+dHgud2NfZmlmbyA9ICh1OCBfX2lvbWVtICopIG1ncC0+c3JhbSArIE1YR0VGV19FVEhfU0VORF80OworCQltZ3AtPnJ4X3NtYWxsLndjX2ZpZm8gPQorCQkgICAgKHU4IF9faW9tZW0gKikgbWdwLT5zcmFtICsgTVhHRUZXX0VUSF9SRUNWX1NNQUxMOworCQltZ3AtPnJ4X2JpZy53Y19maWZvID0KKwkJICAgICh1OCBfX2lvbWVtICopIG1ncC0+c3JhbSArIE1YR0VGV19FVEhfUkVDVl9CSUc7CiAJfSBlbHNlIHsKIAkJbWdwLT50eC53Y19maWZvID0gTlVMTDsKIAkJbWdwLT5yeF9zbWFsbC53Y19maWZvID0gTlVMTDsKQEAgLTE2OTAsNyArMTcyNywyMSBAQAogCiAJY21kLmRhdGEwID0gTVlSSTEwR0VfTE9XUEFSVF9UT19VMzIobWdwLT5md19zdGF0c19idXMpOwogCWNtZC5kYXRhMSA9IE1ZUkkxMEdFX0hJR0hQQVJUX1RPX1UzMihtZ3AtPmZ3X3N0YXRzX2J1cyk7Ci0Jc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9TVEFUU19ETUEsICZjbWQsIDApOworCWNtZC5kYXRhMiA9IHNpemVvZihzdHJ1Y3QgbWNwX2lycV9kYXRhKTsKKwlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX1NUQVRTX0RNQV9WMiwgJmNtZCwgMCk7CisJaWYgKHN0YXR1cyA9PSAtRU5PU1lTKSB7CisJCWRtYV9hZGRyX3QgYnVzID0gbWdwLT5md19zdGF0c19idXM7CisJCWJ1cyArPSBvZmZzZXRvZihzdHJ1Y3QgbWNwX2lycV9kYXRhLCBzZW5kX2RvbmVfY291bnQpOworCQljbWQuZGF0YTAgPSBNWVJJMTBHRV9MT1dQQVJUX1RPX1UzMihidXMpOworCQljbWQuZGF0YTEgPSBNWVJJMTBHRV9ISUdIUEFSVF9UT19VMzIoYnVzKTsKKwkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLAorCQkJCQkgICBNWEdFRldfQ01EX1NFVF9TVEFUU19ETUFfT0JTT0xFVEUsCisJCQkJCSAgICZjbWQsIDApOworCQkvKiBGaXJtd2FyZSBjYW5ub3Qgc3VwcG9ydCBtdWx0aWNhc3Qgd2l0aG91dCBTVEFUU19ETUFfVjIgKi8KKwkJbWdwLT5md19tdWx0aWNhc3Rfc3VwcG9ydCA9IDA7CisJfSBlbHNlIHsKKwkJbWdwLT5md19tdWx0aWNhc3Rfc3VwcG9ydCA9IDE7CisJfQogCWlmIChzdGF0dXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IHNldCBzdGF0cyBETUFcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwpAQCAtMTg0NSw3ICsxODk2LDggQEAKIAlpZiAoY250ID4gMCkgewogCQkvKiBwYWQgaXQgdG8gNjQgYnl0ZXMuICBUaGUgc3JjIGlzIDY0IGJ5dGVzIGJpZ2dlciB0aGFuIGl0CiAJCSAqIG5lZWRzIHRvIGJlIHNvIHRoYXQgd2UgZG9uJ3Qgb3ZlcnJ1biBpdCAqLwotCQlteXJpMTBnZV9waW9fY29weSh0eC0+d2NfZmlmbyArIChjbnQgPDwgMTgpLCBzcmMsIDY0KTsKKwkJbXlyaTEwZ2VfcGlvX2NvcHkodHgtPndjX2ZpZm8gKyBNWEdFRldfRVRIX1NFTkRfT0ZGU0VUKGNudCksCisJCQkJICBzcmMsIDY0KTsKIAkJbWIoKTsKIAl9CiB9CkBAIC0yMTQ0LDkgKzIxOTYsODEgQEAKIAogc3RhdGljIHZvaWQgbXlyaTEwZ2Vfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG15cmkxMGdlX2NtZCBjbWQ7CisJc3RydWN0IG15cmkxMGdlX3ByaXYgKm1ncDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CisJaW50IGVycjsKKworCW1ncCA9IG5ldGRldl9wcml2KGRldik7CiAJLyogY2FuIGJlIGNhbGxlZCBmcm9tIGF0b21pYyBjb250ZXh0cywKIAkgKiBwYXNzIDEgdG8gZm9yY2UgYXRvbWljaXR5IGluIG15cmkxMGdlX3NlbmRfY21kKCkgKi8KLQlteXJpMTBnZV9jaGFuZ2VfcHJvbWlzYyhuZXRkZXZfcHJpdihkZXYpLCBkZXYtPmZsYWdzICYgSUZGX1BST01JU0MsIDEpOworCW15cmkxMGdlX2NoYW5nZV9wcm9taXNjKG1ncCwgZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDLCAxKTsKKworCS8qIFRoaXMgZmlybXdhcmUgaXMga25vd24gdG8gbm90IHN1cHBvcnQgbXVsdGljYXN0ICovCisJaWYgKCFtZ3AtPmZ3X211bHRpY2FzdF9zdXBwb3J0KQorCQlyZXR1cm47CisKKwkvKiBEaXNhYmxlIG11bHRpY2FzdCBmaWx0ZXJpbmcgKi8KKworCWVyciA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0VOQUJMRV9BTExNVUxUSSwgJmNtZCwgMSk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgTVhHRUZXX0VOQUJMRV9BTExNVUxUSSwiCisJCSAgICAgICAiIGVycm9yIHN0YXR1czogJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkvKiByZXF1ZXN0IHRvIGRpc2FibGUgbXVsdGljYXN0IGZpbHRlcmluZywgc28gcXVpdCBoZXJlICovCisJCXJldHVybjsKKwl9CisKKwkvKiBGbHVzaCB0aGUgZmlsdGVycyAqLworCisJZXJyID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfTEVBVkVfQUxMX01VTFRJQ0FTVF9HUk9VUFMsCisJCQkJJmNtZCwgMSk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIm15cmkxMGdlOiAlczogRmFpbGVkIE1YR0VGV19MRUFWRV9BTExfTVVMVElDQVNUX0dST1VQUyIKKwkJICAgICAgICIsIGVycm9yIHN0YXR1czogJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwkvKiBXYWxrIHRoZSBtdWx0aWNhc3QgbGlzdCwgYW5kIGFkZCBlYWNoIGFkZHJlc3MgKi8KKwlmb3IgKG1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jX2xpc3QgIT0gTlVMTDsgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwkJbWVtY3B5KCZjbWQuZGF0YTAsICZtY19saXN0LT5kbWlfYWRkciwgNCk7CisJCW1lbWNweSgmY21kLmRhdGExLCAoKGNoYXIgKikmbWNfbGlzdC0+ZG1pX2FkZHIpICsgNCwgMik7CisJCWNtZC5kYXRhMCA9IGh0b25sKGNtZC5kYXRhMCk7CisJCWNtZC5kYXRhMSA9IGh0b25sKGNtZC5kYXRhMSk7CisJCWVyciA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0pPSU5fTVVMVElDQVNUX0dST1VQLAorCQkJCQkmY21kLCAxKTsKKworCQlpZiAoZXJyICE9IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgIgorCQkJICAgICAgICJNWEdFRldfSk9JTl9NVUxUSUNBU1RfR1JPVVAsIGVycm9yIHN0YXR1czoiCisJCQkgICAgICAgIiVkXHQiLCBkZXYtPm5hbWUsIGVycik7CisJCQlwcmludGsoS0VSTl9FUlIgIk1BQyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJCSAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikmbWNfbGlzdC0+ZG1pX2FkZHIpWzBdLAorCQkJICAgICAgICgodW5zaWduZWQgY2hhciAqKSZtY19saXN0LT5kbWlfYWRkcilbMV0sCisJCQkgICAgICAgKCh1bnNpZ25lZCBjaGFyICopJm1jX2xpc3QtPmRtaV9hZGRyKVsyXSwKKwkJCSAgICAgICAoKHVuc2lnbmVkIGNoYXIgKikmbWNfbGlzdC0+ZG1pX2FkZHIpWzNdLAorCQkJICAgICAgICgodW5zaWduZWQgY2hhciAqKSZtY19saXN0LT5kbWlfYWRkcilbNF0sCisJCQkgICAgICAgKCh1bnNpZ25lZCBjaGFyICopJm1jX2xpc3QtPmRtaV9hZGRyKVs1XQorCQkJICAgICk7CisJCQlnb3RvIGFib3J0OworCQl9CisJfQorCS8qIEVuYWJsZSBtdWx0aWNhc3QgZmlsdGVyaW5nICovCisJZXJyID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfRElTQUJMRV9BTExNVUxUSSwgJmNtZCwgMSk7CisJaWYgKGVyciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgTVhHRUZXX0RJU0FCTEVfQUxMTVVMVEksIgorCQkgICAgICAgImVycm9yIHN0YXR1czogJWRcbiIsIGRldi0+bmFtZSwgZXJyKTsKKwkJZ290byBhYm9ydDsKKwl9CisKKwlyZXR1cm47CisKK2Fib3J0OgorCXJldHVybjsKIH0KIAogc3RhdGljIGludCBteXJpMTBnZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKQEAgLTIyOTMsNiArMjQxNyw4IEBACiAgKi8KIAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMjAwMF9QQ0lFCTB4MDEzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U1MDAwX1BDSUUyMyAweDI1ZjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNTAwMF9QQ0lFNDcgMHgyNWZhCiAKIHN0YXRpYyB2b2lkIG15cmkxMGdlX3NlbGVjdF9maXJtd2FyZShzdHJ1Y3QgbXlyaTEwZ2VfcHJpdiAqbWdwKQogewpAQCAtMjMwMiwxNSArMjQyOCwzNCBAQAogCW1ncC0+ZndfbmFtZSA9IG15cmkxMGdlX2Z3X3VuYWxpZ25lZDsKIAogCWlmIChteXJpMTBnZV9mb3JjZV9maXJtd2FyZSA9PSAwKSB7CisJCWludCBsaW5rX3dpZHRoLCBleHBfY2FwOworCQl1MTYgbG5rOworCisJCWV4cF9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KG1ncC0+cGRldiwgUENJX0NBUF9JRF9FWFApOworCQlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIGV4cF9jYXAgKyBQQ0lfRVhQX0xOS1NUQSwgJmxuayk7CisJCWxpbmtfd2lkdGggPSAobG5rID4+IDQpICYgMHgzZjsKKwogCQlteXJpMTBnZV9lbmFibGVfZWNyYyhtZ3ApOwogCi0JCS8qIENoZWNrIHRvIHNlZSBpZiB0aGUgdXBzdHJlYW0gYnJpZGdlIGlzIGtub3duIHRvCi0JCSAqIHByb3ZpZGUgYWxpZ25lZCBjb21wbGV0aW9ucyAqLwotCQlpZiAoYnJpZGdlCi0JCSAgICAvKiBTZXJ2ZXJXb3JrcyBIVDIwMDAvSFQxMDAwICovCi0JCSAgICAmJiBicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTCi0JCSAgICAmJiBicmlkZ2UtPmRldmljZSA9PQotCQkgICAgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19IVDIwMDBfUENJRSkgeworCQkvKiBDaGVjayB0byBzZWUgaWYgTGluayBpcyBsZXNzIHRoYW4gOCBvciBpZiB0aGUKKwkJICogdXBzdHJlYW0gYnJpZGdlIGlzIGtub3duIHRvIHByb3ZpZGUgYWxpZ25lZAorCQkgKiBjb21wbGV0aW9ucyAqLworCQlpZiAobGlua193aWR0aCA8IDgpIHsKKwkJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwgIlBDSUUgeCVkIExpbmtcbiIsCisJCQkJIGxpbmtfd2lkdGgpOworCQkJbWdwLT50eC5ib3VuZGFyeSA9IDQwOTY7CisJCQltZ3AtPmZ3X25hbWUgPSBteXJpMTBnZV9md19hbGlnbmVkOworCQl9IGVsc2UgaWYgKGJyaWRnZSAmJgorCQkJICAgLyogU2VydmVyV29ya3MgSFQyMDAwL0hUMTAwMCAqLworCQkJICAgKChicmlkZ2UtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTCisJCQkgICAgICYmIGJyaWRnZS0+ZGV2aWNlID09CisJCQkgICAgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMDAwX1BDSUUpCisJCQkgICAgLyogQWxsIEludGVsIEU1MDAwIFBDSUUgcG9ydHMgKi8KKwkJCSAgICB8fCAoYnJpZGdlLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JTlRFTAorCQkJCSYmIGJyaWRnZS0+ZGV2aWNlID49CisJCQkJUENJX0RFVklDRV9JRF9JTlRFTF9FNTAwMF9QQ0lFMjMKKwkJCQkmJiBicmlkZ2UtPmRldmljZSA8PQorCQkJCVBDSV9ERVZJQ0VfSURfSU5URUxfRTUwMDBfUENJRTQ3KSkpIHsKIAkJCWRldl9pbmZvKCZtZ3AtPnBkZXYtPmRldiwKIAkJCQkgIkFzc3VtaW5nIGFsaWduZWQgY29tcGxldGlvbnMgKDB4JXg6MHgleClcbiIsCiAJCQkJIGJyaWRnZS0+dmVuZG9yLCBicmlkZ2UtPmRldmljZSk7CkBAIC0yNDI5LDcgKzI1NzQsNyBAQAogCX0KIAogCW15cmkxMGdlX3Jlc2V0KG1ncCk7Ci0JbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIG1ncC0+dHguYm91bmRhcnkgIT0gNDA5Nik7CisJbXlyaTEwZ2VfZHVtbXlfcmRtYShtZ3AsIDEpOwogCiAJLyogU2F2ZSBjb25maWd1cmF0aW9uIHNwYWNlIHRvIGJlIHJlc3RvcmVkIGlmIHRoZQogCSAqIG5pYyByZXNldHMgZHVlIHRvIGEgcGFyaXR5IGVycm9yICovCkBAIC0yNTQ3LDcgKzI2OTIsOCBAQAogCiAJbWdwID0gKHN0cnVjdCBteXJpMTBnZV9wcml2ICopYXJnOwogCWlmIChtZ3AtPnR4LnJlcSAhPSBtZ3AtPnR4LmRvbmUgJiYKLQkgICAgbWdwLT50eC5kb25lID09IG1ncC0+d2F0Y2hkb2dfdHhfZG9uZSkKKwkgICAgbWdwLT50eC5kb25lID09IG1ncC0+d2F0Y2hkb2dfdHhfZG9uZSAmJgorCSAgICBtZ3AtPndhdGNoZG9nX3R4X3JlcSAhPSBtZ3AtPndhdGNoZG9nX3R4X2RvbmUpCiAJCS8qIG5pYyBzZWVtcyBsaWtlIGl0IG1pZ2h0IGJlIHN0dWNrLi4gKi8KIAkJc2NoZWR1bGVfd29yaygmbWdwLT53YXRjaGRvZ193b3JrKTsKIAllbHNlCkBAIC0yNTU2LDYgKzI3MDIsNyBAQAogCQkJICBqaWZmaWVzICsgbXlyaTEwZ2Vfd2F0Y2hkb2dfdGltZW91dCAqIEhaKTsKIAogCW1ncC0+d2F0Y2hkb2dfdHhfZG9uZSA9IG1ncC0+dHguZG9uZTsKKwltZ3AtPndhdGNoZG9nX3R4X3JlcSA9IG1ncC0+dHgucmVxOwogfQogCiBzdGF0aWMgaW50IG15cmkxMGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQpAQCAtMjU4Myw2ICsyNzMwLDcgQEAKIAltZ3AtPmNzdW1fZmxhZyA9IE1YR0VGV19GTEFHU19DS1NVTTsKIAltZ3AtPnBhdXNlID0gbXlyaTEwZ2VfZmxvd19jb250cm9sOwogCW1ncC0+aW50cl9jb2FsX2RlbGF5ID0gbXlyaTEwZ2VfaW50cl9jb2FsX2RlbGF5OworCW1ncC0+bXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KG15cmkxMGdlX2RlYnVnLCBNWVJJMTBHRV9NU0dfREVGQVVMVCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmbWdwLT5kb3duX3dxKTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2VfbWNwLmggYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3AuaAppbmRleCAwYTZjYWU2Li45NTE5YWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3AuaAorKysgYi9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZV9tY3AuaApAQCAtOTEsNyArOTEsMTkgQEAKIAogLyogQ29tbWFuZHMgKi8KIAotI2RlZmluZSBNWEdFRldfQ01EX09GRlNFVCAweGY4MDAwMAorI2RlZmluZQlNWEdFRldfQk9PVF9IQU5ET0ZGCTB4ZmMwMDAwCisjZGVmaW5lCU1YR0VGV19CT09UX0RVTU1ZX1JETUEJMHhmYzAxYzAKKworI2RlZmluZQlNWEdFRldfRVRIX0NNRAkJMHhmODAwMDAKKyNkZWZpbmUJTVhHRUZXX0VUSF9TRU5EXzQJMHgyMDAwMDAKKyNkZWZpbmUJTVhHRUZXX0VUSF9TRU5EXzEJMHgyNDAwMDAKKyNkZWZpbmUJTVhHRUZXX0VUSF9TRU5EXzIJMHgyODAwMDAKKyNkZWZpbmUJTVhHRUZXX0VUSF9TRU5EXzMJMHgyYzAwMDAKKyNkZWZpbmUJTVhHRUZXX0VUSF9SRUNWX1NNQUxMCTB4MzAwMDAwCisjZGVmaW5lCU1YR0VGV19FVEhfUkVDVl9CSUcJMHgzNDAwMDAKKworI2RlZmluZQlNWEdFRldfRVRIX1NFTkQobikJCSgweDIwMDAwMCArICgoKG4pICYgMHgwMykgKiAweDQwMDAwKSkKKyNkZWZpbmUJTVhHRUZXX0VUSF9TRU5EX09GRlNFVChuKQkoTVhHRUZXX0VUSF9TRU5EKG4pIC0gTVhHRUZXX0VUSF9TRU5EXzQpCiAKIGVudW0gbXlyaTEwZ2VfbWNwX2NtZF90eXBlIHsKIAlNWEdFRldfQ01EX05PTkUgPSAwLApAQCAtMTU0LDcgKzE2Niw3IEBACiAJTVhHRUZXX0NNRF9TRVRfTVRVLAogCU1YR0VGV19DTURfR0VUX0lOVFJfQ09BTF9ERUxBWV9PRkZTRVQsCS8qIGluIG1pY3Jvc2Vjb25kcyAqLwogCU1YR0VGV19DTURfU0VUX1NUQVRTX0lOVEVSVkFMLAkvKiBpbiBtaWNyb3NlY29uZHMgKi8KLQlNWEdFRldfQ01EX1NFVF9TVEFUU19ETUEsCisJTVhHRUZXX0NNRF9TRVRfU1RBVFNfRE1BX09CU09MRVRFLAkvKiByZXBsYWNlZCBieSBTRVRfU1RBVFNfRE1BX1YyICovCiAKIAlNWEdFRldfRU5BQkxFX1BST01JU0MsCiAJTVhHRUZXX0RJU0FCTEVfUFJPTUlTQywKQEAgLTE2OCw3ICsxODAsMjYgQEAKIAkgKiBkYXRhMiAgICAgICA9IFJETUEgbGVuZ3RoIChNU0gpLCBXRE1BIGxlbmd0aCAoTFNIKQogCSAqIGNvbW1hbmQgcmV0dXJuIGRhdGEgPSByZXBldGl0aW9ucyAoTVNIKSwgMC41LW1zIHRpY2tzIChMU0gpCiAJICovCi0JTVhHRUZXX0RNQV9URVNUCisJTVhHRUZXX0RNQV9URVNULAorCisJTVhHRUZXX0VOQUJMRV9BTExNVUxUSSwKKwlNWEdFRldfRElTQUJMRV9BTExNVUxUSSwKKworCS8qIHJldHVybnMgTVhHRUZXX0NNRF9FUlJPUl9NVUxUSUNBU1QKKwkgKiBpZiB0aGVyZSBpcyBubyByb29tIGluIHRoZSBjYWNoZQorCSAqIGRhdGEwLE1TSChkYXRhMSkgPSBtdWx0aWNhc3QgZ3JvdXAgYWRkcmVzcyAqLworCU1YR0VGV19KT0lOX01VTFRJQ0FTVF9HUk9VUCwKKwkvKiByZXR1cm5zIE1YR0VGV19DTURfRVJST1JfTVVMVElDQVNUCisJICogaWYgdGhlIGFkZHJlc3MgaXMgbm90IGluIHRoZSBjYWNoZSwKKwkgKiBvciBpcyBlcXVhbCB0byBGRi1GRi1GRi1GRi1GRi1GRgorCSAqIGRhdGEwLE1TSChkYXRhMSkgPSBtdWx0aWNhc3QgZ3JvdXAgYWRkcmVzcyAqLworCU1YR0VGV19MRUFWRV9NVUxUSUNBU1RfR1JPVVAsCisJTVhHRUZXX0xFQVZFX0FMTF9NVUxUSUNBU1RfR1JPVVBTLAorCisJTVhHRUZXX0NNRF9TRVRfU1RBVFNfRE1BX1YyLAorCS8qIGRhdGEwLCBkYXRhMSA9IGJ1cyBhZGRyLAorCSAqIGRhdGEyID0gc2l6ZW9mKHN0cnVjdCBtY3BfaXJxX2RhdGEpIGZyb20gZHJpdmVyIHBvaW50IG9mIHZpZXcsIGFsbG93cworCSAqIGFkZGluZyBuZXcgc3R1ZmYgdG8gbWNwX2lycV9kYXRhIHdpdGhvdXQgY2hhbmdpbmcgdGhlIEFCSSAqLwogfTsKIAogZW51bSBteXJpMTBnZV9tY3BfY21kX3N0YXR1cyB7CkBAIC0xODAsMTEgKzIxMSwxNyBAQAogCU1YR0VGV19DTURfRVJST1JfQ0xPU0VELAogCU1YR0VGV19DTURfRVJST1JfSEFTSF9FUlJPUiwKIAlNWEdFRldfQ01EX0VSUk9SX0JBRF9QT1JULAotCU1YR0VGV19DTURfRVJST1JfUkVTT1VSQ0VTCisJTVhHRUZXX0NNRF9FUlJPUl9SRVNPVVJDRVMsCisJTVhHRUZXX0NNRF9FUlJPUl9NVUxUSUNBU1QKIH07CiAKLS8qIDQwIEJ5dGVzICovCisjZGVmaW5lIE1YR0VGV19PTERfSVJRX0RBVEFfTEVOIDQwCisKIHN0cnVjdCBtY3BfaXJxX2RhdGEgeworCS8qIGFkZCBuZXcgY291bnRlcnMgYXQgdGhlIGJlZ2lubmluZyAqLworCXUzMiBmdXR1cmVfdXNlWzVdOworCXUzMiBkcm9wcGVkX211bHRpY2FzdF9maWx0ZXJlZDsKKwkvKiA0MCBCeXRlcyAqLwogCXUzMiBzZW5kX2RvbmVfY291bnQ7CiAKIAl1MzIgbGlua191cDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L215cmlfY29kZS5oIGIvZHJpdmVycy9uZXQvbXlyaV9jb2RlLmgKaW5kZXggZTljNmU1Ni4uZTIxZWM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbXlyaV9jb2RlLmgKKysrIGIvZHJpdmVycy9uZXQvbXlyaV9jb2RlLmgKQEAgLTEsNDc3OCArMSw0Nzc4IEBACi0vKiBUaGlzIGlzIHRoZSBNeXJpbmV0IE1DUCBjb2RlIGZvciBMQU5haTQueCAqLyAKKy8qIFRoaXMgaXMgdGhlIE15cmluZXQgTUNQIGNvZGUgZm9yIExBTmFpNC54ICovCiAvKiBHZW5lcmF0ZWQgYnkgIGNhdCAkTVlSSV9IT01FL2xpYi9sYW5haS9tY3A0LmRhdCA+IG15cmlfY29kZTQuaCAqLwogCi1zdGF0aWMgdW5zaWduZWQgaW50IGxhbmFpNF9jb2RlX29mZiA9IDB4MDAwMDsgLyogaGFsZi13b3JkIG9mZnNldCAqLyAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbGFuYWk0X2NvZGVfb2ZmID0gMHgwMDAwOyAvKiBoYWxmLXdvcmQgb2Zmc2V0ICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciBsYW5haTRfY29kZVs3NjI1Nl0gX19pbml0ZGF0YSA9IHsKLTB4RjIsMHgwRSwgCi0weEZFLDB4MDAsIDB4QzIsMHg5MCwgMHgwMCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDAxLDB4NEMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4MkEsMHg2QywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDJDLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgwNSwweDNDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyOSwweEUwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkIsMHg4NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDJDLDB4MUMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgwQSwweEJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDIsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyQSwweEY4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDg1LDB4MTYsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDEsIDB4RUUsMHgwMCwgCi0weDAxLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwMSwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDEsMHgyRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjQsMHg4MiwgMHgwMCwweDEyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDAxLDB4RTAsIDB4QjQsMHhCQSwgCi0weDY4LDB4MDIsIDB4RTAsMHgwMCwgMHgwMSwweEUwLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDNCLDB4NjQsIDB4RjUsMHg4NCwgCi0weDRGLDB4NTQsIDB4RjcsMHgwNSwgMHg3QSwweDEwLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDAxLDB4OTksIDB4OTcsMHgyQSwgCi0weDAwLDB4MjAsIDB4OTUsMHhBQSwgMHgwMCwweDFDLCAweEY2LDB4MDYsIDB4NEEsMHg5OCwgMHgyNiwweEFDLCAweDAwLDB4MDEsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgwNywweDM4LCAweDAwLDB4MEMsIDB4QTQsMHhCQSwgCi0weDYwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QUEsIDB4MDAsMHgxMCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4ODcsMHgzQSwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MkEsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweDRBLDB4OUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4MkUsIDB4NzIsMHgwMCwgMHhENywweDAwLCAweDBBLDB4MDEsIDB4RTAsMHgwMCwgCi0weDAxLDB4RDAsIDB4RjcsMHgwNSwgMHg3QSwweDE4LCAweDk1LDB4QUEsIDB4MDAsMHgxQywgMHhGNiwweDA2LCAweDRBLDB4OTgsIDB4MDYsMHhBQywgCi0weDAwLDB4MDEsIDB4NzcsMHgzNSwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MDcsMHgzOCwgCi0weDAwLDB4MEMsIDB4QTQsMHhCQSwgMHg2MCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEFBLCAweDAwLDB4MTAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweEYwLDB4MDUsIDB4N0EsMHgxOCwgMHg5NywweDJBLCAweDAwLDB4MTQsIDB4RjUsMHgwNSwgCi0weDc5LDB4RDgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MDEsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MzgsIDB4RjcsMHgwNCwgCi0weDdBLDB4MTAsIDB4RjYsMHg4NCwgMHgzQiwweDY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDAyLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDAyLDB4NEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwMiwweDg1LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MTIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MDIsMHg3NCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjMsMHgwNiwgMHgyQSwweDZDLCAweEYzLDB4MDUsIDB4MkMsMHgxMCwgMHhFMCwweDAwLCAweDA1LDB4MjgsIDB4RjAsMHgwNSwgCi0weDdBLDB4MTgsIDB4RjMsMHg4NCwgMHg3OSwweEQ4LCAweEY2LDB4ODQsIDB4NEEsMHhBMCwgMHgyMywweDE0LCAweDAwLDB4MjAsIDB4OTMsMHgxNiwgCi0weEZGLDB4QzQsIDB4ODQsMHgxRSwgMHgwMCwweDEwLCAweDk2LDB4OTYsIDB4RkYsMHhENCwgMHhGNywweDA0LCAweDRBLDB4OUMsIDB4OTQsMHgxNiwgCi0weEZGLDB4RTAsIDB4ODUsMHgxRSwgMHgwMCwweDE0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLCAweDAzLDB4NkMsIDB4OTUsMHgxNiwgCi0weEZGLDB4RTQsIDB4NzcsMHgzNSwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwNiwgCi0weDRBLDB4OTgsIDB4QzYsMHhCOCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwQywgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NDIsMHgwMCwgMHhFNiwweDAwLCAweDAyLDB4RkMsIDB4QzYsMHgyNCwgCi0weDAwLDB4MDAsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDUyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDAzLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDAzLDB4MEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzIsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDAzLDB4NDgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MDMsMHg1MCwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDQsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weDAzLDB4NTEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDAzLDB4NjEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDAzLDB4NzAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDAzLDB4QTUsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhENCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4NzYsMHhCOSwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhEOCwgMHhFMCwweDAwLCAweDA0LDB4MTgsIDB4OTYsMHg5NiwgCi0weEZGLDB4REMsIDB4MjcsMHgxNCwgMHgwMCwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDE2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4Q0MsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4Q0MsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDQsMHgxNSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RDQsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RDgsIDB4OTYsMHg5NiwgMHhGRiwweERDLCAweEY3LDB4MDUsIDB4NEEsMHhBMCwgMHhFMCwweDAwLCAweDA0LDB4MUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA0LDB4MkMsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgwNCwweDg0LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LCAweEZGLDB4RDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgzNSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjYsMHg4NiwgCi0weDQyLDB4QzgsIDB4QTYsMHgzQSwgMHg2OCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NSwweDM5LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4MDUsMHhCOCwgMHgwMCwweDAyLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDQsIDB4OTcsMHgxNiwgCi0weEZGLDB4RUMsIDB4QzYsMHgzMCwgMHg1NywweEMwLCAweDc2LDB4MzAsIDB4RkYsMHhGMCwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4NzUsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NUYsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4OTYsMHg5NiwgCi0weEZGLDB4RjAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDUsMHgyNSwgMHhGMywweDA2LCAweDI5LDB4RTAsIDB4ODYsMHg5NiwgCi0weEZGLDB4RjAsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEM3LDB4MzQsIDB4NjgsMHgwMCwgMHhDNCwweDlDLCAweDcyLDB4MDAsIDB4QzAsMHgyRSwgCi0weDZBLDB4MDAsIDB4RUMsMHgwMCwgMHgwNCwweEYwLCAweEM1LDB4MjQsIDB4MDAsMHgwMCwgMHhDNiwweDJDLCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEE2LDB4QjIsIDB4NzAsMHgwMiwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4QzcsMHgzMCwgCi0weDcwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNCwgCi0weEZGLDB4RjAsIDB4RjYsMHhBQiwgMHgyOCwweDAwLCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyRSwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4MDQsMHhCMSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDMsIDB4RjMsMHgwNSwgMHg3NiwweEY0LCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHg4NiwweDlFLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDcwLDB4MDAsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDYsMHhCNCwgCi0weDAwLDB4MjAsIDB4OTcsMHgwMiwgMHhGRiwweDZDLCAweDk0LDB4ODIsIDB4RkYsMHg1MCwgMHg5NiwweDgyLCAweEZGLDB4NTgsIDB4RjMsMHgwNiwgCi0weDI5LDB4RTAsIDB4RjMsMHgwNSwgMHgyQywweDEwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg3QSwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA1LDB4Q0QsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4N0EsMHgxMCwgMHhGNiwweDg0LCAweDNCLDB4NjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA1LDB4Q0QsIDB4RjUsMHg4NiwgMHg0QSwweDk4LCAweEY2LDB4MDQsIDB4NzksMHhEOCwgMHhGNiwweDg0LCAweDRGLDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTYsMHhCMiwgMHgwMCwweDFDLCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDA3LDB4MzgsIDB4MDAsMHgwQywgMHhBNSwweDNBLCAweDU4LDB4MDIsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgzMiwgMHgwMCwweDEwLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MDQsIDB4RjAsMHgwNSwgCi0weDdBLDB4MTgsIDB4OTcsMHgzMiwgMHgwMCwweDE0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDAxLDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgwNSwweEZDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgCi0weDAwLDB4MTIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MDUsMHhGNCwgMHhCNSwweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjUsMHgwNiwgMHgyQSwweDZDLCAweEY1LDB4MDUsIDB4MkMsMHgxMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4ODUsMHgyRSwgCi0weDAwLDB4MjAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDYsMHhDQywgMHhGNSwweDA1LCAweDdBLDB4MDgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA2LDB4Q0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3QSwweDA4LCAweEY2LDB4ODQsIDB4M0IsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA2LDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MkUsIDB4MDAsMHgxQywgMHhGNiwweDg0LCAweDRGLDB4NTQsIDB4RjcsMHgwNSwgCi0weDdBLDB4MDAsIDB4QzcsMHgzNCwgMHg3MiwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweDA2LDB4OEQsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgwNiwweDkwLCAweEY1LDB4MDUsIDB4NzksMHhGOCwgMHhGMCwweDg1LCAweDc5LDB4RjgsIDB4RjYsMHg4NCwgCi0weDdBLDB4MDAsIDB4QzcsMHgzOCwgMHg3MCwweDAwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4RjgsIDB4RjYsMHg4NSwgCi0weDc5LDB4RTgsIDB4QzcsMHgzOCwgMHg3MCwweDAwLCAweEM2LDB4MzQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDRBLDB4OUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4MDYsMHhDQywgMHhGNiwweDA1LCAweDc5LDB4RjAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RUMsMHgwMCwgMHgwNiwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgCi0weDAwLDB4MTMsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MDcsMHgzOCwgMHhCNSwweDNBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgCi0weDA3LDB4MzgsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NEEsMHg5QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgCi0weDcyLDB4MDAsIDB4RUUsMHgwMCwgMHgwNywweDE5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDRBLDB4OUMsIDB4RTAsMHgwMCwgCi0weDA3LDB4MjgsIDB4RjcsMHgwNSwgMHg3OSwweEYwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFQywweDAwLCAweDA3LDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjAsMHg4NSwgMHg3OSwweEYwLCAweEY1LDB4ODUsIDB4NzksMHhFMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDA3LDB4NEMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDM4LCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwNywweEE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDcsMHhBNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDdBLDB4MDgsIDB4RjYsMHg4NCwgMHgzQiwweDY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA3LDB4RDUsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgxMywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDA3LDB4Q0MsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhFMCwweDAwLCAweDBBLDB4QTQsIDB4RjMsMHgwNiwgCi0weDJCLDB4ODQsIDB4RjYsMHg4NCwgMHg3OSwweEU4LCAweEY2LDB4MDYsIDB4NEEsMHg5OCwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY2LDB4ODQsIDB4NzksMHhFMCwgMHgwNywweDM4LCAweDAwLDB4MEMsIDB4QTMsMHgzQSwgCi0weDYwLDB4MDIsIDB4QzMsMHhCNCwgMHgwMCwweDAwLCAweDkzLDB4MzYsIDB4MDAsMHgxMCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4ODcsMHgzQSwgCi0weDAwLDB4MDQsIDB4MjMsMHgxNCwgMHgwMCwweDIwLCAweDkzLDB4MTYsIDB4RkYsMHhDNCwgMHg5NywweDM2LCAweDAwLDB4MTQsIDB4ODQsMHg5RSwgCi0weDAwLDB4MTAsIDB4RjYsMHg4NCwgMHg0QSwweEEwLCAweDk0LDB4OTYsIDB4RkYsMHhFMCwgMHg5NiwweDk2LCAweEZGLDB4RDQsIDB4ODUsMHgxRSwgCi0weDAwLDB4MTQsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgCi0weDA4LDB4RUMsIDB4OTUsMHgxNiwgMHhGRiwweEU0LCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCOCwgMHg2MCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwQywgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDA4LDB4N0MsIDB4QzYsMHgyMCwgCi0weDAwLDB4MDAsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDUyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA4LDB4ODAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA4LDB4OEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzIsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDA4LDB4QzgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MDgsMHhEMCwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDQsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weDA4LDB4RDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA4LDB4RTEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA4LDB4RjAsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDA5LDB4MjUsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhENCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4NzYsMHhCOSwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhEOCwgMHhFMCwweDAwLCAweDA5LDB4OTgsIDB4OTYsMHg5NiwgCi0weEZGLDB4REMsIDB4MjcsMHgxNCwgMHgwMCwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDE2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4Q0MsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4Q0MsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDksMHg5NSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RDQsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RDgsIDB4OTYsMHg5NiwgMHhGRiwweERDLCAweEY3LDB4MDUsIDB4NEEsMHhBMCwgMHhFMCwweDAwLCAweDA5LDB4OUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA5LDB4QUMsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgwQSwweDA0LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LCAweEZGLDB4RDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgzNSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjYsMHg4NiwgCi0weDQyLDB4QzgsIDB4QTYsMHgzQSwgMHg2OCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NSwweDM5LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4MDUsMHhCOCwgMHgwMCwweDAyLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDQsIDB4OTcsMHgxNiwgCi0weEZGLDB4RUMsIDB4QzYsMHgzMCwgMHg1NywweEMwLCAweDc2LDB4MzAsIDB4RkYsMHhGMCwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4NzUsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NUYsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4OTYsMHg5NiwgCi0weEZGLDB4RjAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MEEsMHhBNSwgMHhGMywweDA2LCAweDJBLDB4RjgsIDB4ODYsMHg5NiwgCi0weEZGLDB4RjAsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEM3LDB4MzQsIDB4NjgsMHgwMCwgMHhDNCwweDlDLCAweDcyLDB4MDAsIDB4QzAsMHgyRSwgCi0weDZBLDB4MDAsIDB4RUMsMHgwMCwgMHgwQSwweDcwLCAweEM1LDB4MjQsIDB4MDAsMHgwMCwgMHhDNiwweDJDLCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEE2LDB4QjIsIDB4NzAsMHgwMiwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4QzcsMHgzMCwgCi0weDcwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNCwgCi0weEZGLDB4RjAsIDB4RjYsMHhBQiwgMHgyOCwweDAwLCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyRSwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4MEEsMHgzMSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDIsIDB4RjMsMHgwNSwgMHg3NiwweEY0LCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHg4NiwweDlFLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDcwLDB4MDAsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDYsMHhCNCwgCi0weDAwLDB4MjAsIDB4OTcsMHgwMiwgMHhGRiwweDZDLCAweDk0LDB4ODIsIDB4RkYsMHg1MCwgMHg5NiwweDgyLCAweEZGLDB4NTgsIDB4RjMsMHgwNiwgCi0weDJBLDB4RjgsIDB4RjMsMHgwNSwgMHgyQywweDFDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjYsMHg4NCwgMHg3OSwweEU4LCAweEY3LDB4MDQsIDB4NzksMHhGOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4RjcsMHgwNCwgMHg3QSwweDIwLCAweEY2LDB4ODUsIDB4NzksMHhFOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDdBLDB4MjAsIDB4RjcsMHgwNCwgMHg3OSwweEYwLCAweEY2LDB4MDQsIDB4N0EsMHgyMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDBCLDB4MkMsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNSwweDgyLCAweDAwLDB4MTMsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgwQiwweDIwLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHg4NiwgCi0weDJCLDB4ODQsIDB4RTAsMHgwMCwgMHgwQiwweDM4LCAweEY1LDB4ODUsIDB4MkMsMHgxQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDA3LDB4NEMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwNiwgMHgyQywweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDI5LDB4RTAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDJDLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkEsMHg2QywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDJDLDB4MUMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyQSwweEY4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkMsMHgxQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDJCLDB4ODQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjAsMHgwNSwgMHgyRCwweDNDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE4LCAweEZGLDB4ODUsIDB4MkUsMHhEQywgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzcsMHg3QywgCi0weDc0LDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MTQsMHgyOSwgMHg5NywweDE2LCAweEZGLDB4RjQsIDB4NDcsMHgzOCwgCi0weEZGLDB4RkIsIDB4RjYsMHg4NCwgMHg2RiwweDUwLCAweENGLDB4QjgsIDB4MDAsMHgwMCwgMHg4MywweDk2LCAweEZGLDB4RjQsIDB4RjcsMHgwMiwgCi0weDAwLDB4M0YsIDB4QzMsMHg5QywgMHg2RCwweDgwLCAweEM3LDB4MUMsIDB4NzQsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4M0YsIDB4RTIsMHgwMCwgCi0weDEyLDB4NjAsIDB4OTMsMHg5NiwgMHhGRiwweEY0LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNiwweDgyLCAweDBDLDB4NUMsIDB4QTYsMHhCNiwgCi0weDcwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMxLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDEyLDB4NjAsIDB4MDAsMHgwMCwgCi0weDEyLDB4NjAsIDB4MDAsMHgwMCwgMHgwRCwweDY4LCAweDAwLDB4MDAsIDB4MEQsMHg2OCwgMHgwMCwweDAwLCAweDBELDB4NUMsIDB4MDAsMHgwMCwgCi0weDBELDB4NUMsIDB4MDAsMHgwMCwgMHgwRCwweDY4LCAweDAwLDB4MDAsIDB4MEQsMHg2OCwgMHgwMCwweDAwLCAweDEyLDB4NTAsIDB4MDAsMHgwMCwgCi0weDEyLDB4NTAsIDB4MDAsMHgwMCwgMHgxMiwweDNDLCAweDAwLDB4MDAsIDB4MTIsMHgzQywgMHgwMCwweDAwLCAweDBELDB4RTAsIDB4MDAsMHgwMCwgCi0weDBELDB4RTAsIDB4MDAsMHgwMCwgMHgxMiwweDNDLCAweDAwLDB4MDAsIDB4MTIsMHgzQywgMHgwMCwweDAwLCAweDBELDB4RTgsIDB4MDAsMHgwMCwgCi0weDBELDB4RjQsIDB4MDAsMHgwMCwgMHgwRSwweDAwLCAweDAwLDB4MDAsIDB4MEUsMHgyMCwgMHgwMCwweDAwLCAweDBFLDB4NDAsIDB4MDAsMHgwMCwgCi0weDBFLDB4NjAsIDB4MDAsMHgwMCwgMHgwRSwweDgwLCAweDAwLDB4MDAsIDB4MEUsMHhBMCwgMHgwMCwweDAwLCAweDBFLDB4QzAsIDB4MDAsMHgwMCwgCi0weDBFLDB4QzgsIDB4MDAsMHgwMCwgMHgwRSwweEQwLCAweDAwLDB4MDAsIDB4MTIsMHgyOCwgMHgwMCwweDAwLCAweDBFLDB4RDgsIDB4MDAsMHgwMCwgCi0weDBFLDB4RjQsIDB4MDAsMHgwMCwgMHgwRiwweDEwLCAweDAwLDB4MDAsIDB4MTIsMHgyOCwgMHgwMCwweDAwLCAweDBGLDB4MTgsIDB4MDAsMHgwMCwgCi0weDBGLDB4MTgsIDB4MDAsMHgwMCwgMHgwRiwweDI0LCAweDAwLDB4MDAsIDB4MEYsMHgyNCwgMHgwMCwweDAwLCAweDBGLDB4NDQsIDB4MDAsMHgwMCwgCi0weDBGLDB4NDQsIDB4MDAsMHgwMCwgMHgwRiwweDY0LCAweDAwLDB4MDAsIDB4MEYsMHg2NCwgMHgwMCwweDAwLCAweDBGLDB4ODQsIDB4MDAsMHgwMCwgCi0weDBGLDB4ODQsIDB4MDAsMHgwMCwgMHgwRiwweDhDLCAweDAwLDB4MDAsIDB4MEYsMHg4QywgMHgwMCwweDAwLCAweDBGLDB4OTQsIDB4MDAsMHgwMCwgCi0weDBGLDB4OTQsIDB4MDAsMHgwMCwgMHgwRiwweEIwLCAweDAwLDB4MDAsIDB4MEYsMHhCMCwgMHgwMCwweDAwLCAweDBGLDB4QjgsIDB4MDAsMHgwMCwgCi0weDBGLDB4RDgsIDB4MDAsMHgwMCwgMHgwRiwweEY4LCAweDAwLDB4MDAsIDB4MTAsMHgyQywgMHgwMCwweDAwLCAweDEwLDB4NjAsIDB4MDAsMHgwMCwgCi0weDEwLDB4OTQsIDB4MDAsMHgwMCwgMHgxMCwweEM4LCAweDAwLDB4MDAsIDB4MTAsMHhGQywgMHgwMCwweDAwLCAweDExLDB4MzAsIDB4MDAsMHgwMCwgCi0weDExLDB4NEMsIDB4MDAsMHgwMCwgMHgxMSwweDY4LCAweDAwLDB4MDAsIDB4MTIsMHgxNCwgMHgwMCwweDAwLCAweDExLDB4ODQsIDB4MDAsMHgwMCwgCi0weDExLDB4QjQsIDB4MDAsMHgwMCwgMHgxMSwweEU0LCAweDAwLDB4MDAsIDB4MTIsMHgxNCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwgCi0weDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4MDIsIDB4MDAsMHgwNSwgMHgyMCwweDMyLCAweDAwLDB4MTQsIDB4RTYsMHgwMCwgCi0weDBELDB4QjUsIDB4MjcsMHgwMCwgMHgwMCwweDEwLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFMiwweDAwLCAweDBELDB4QjUsIDB4RjcsMHgwNiwgCi0weDJELDB4Q0MsIDB4RjYsMHg4NCwgMHgyRSwweENDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NSwweEI1LCAweDAwLDB4MDIsIDB4QjYsMHgyRSwgCi0weDcwLDB4MDIsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEY2LDB4ODUsIDB4MkUsMHhDQywgMHg4NiwweDAyLCAweEZGLDB4MzQsIDB4RjcsMHgwNiwgCi0weDJFLDB4NEMsIDB4MjAsMHgzNiwgMHgwMCwweDFGLCAweEUyLDB4MDAsIDB4MEQsMHhCNSwgMHhCNiwweDJFLCAweDcwLDB4MDIsIDB4RjAsMHgwNSwgCi0weDJFLDB4Q0MsIDB4RjcsMHgwNCwgMHgyRCwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDNBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzOCwgCi0weDAwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgCi0weDEyLDB4NDAsIDB4RjMsMHg4MiwgMHgwMCwweDA2LCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA3LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MEIsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MEIsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA2LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA2LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MEIsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weDEyLDB4NDAsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweEUwLDB4MDAsIDB4MTIsMHg0MCwgMHhGMywweDgyLCAweDAwLDB4MDcsIDB4RTAsMHgwMCwgCi0weDEyLDB4MkMsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4NDAsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDYsIDB4RjMsMHg4MiwgMHgwMCwweDA3LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHg0MCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwgCi0weDEyLDB4MkMsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNSwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNiwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNSwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgxMiwweDQwLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHhFMCwweDAwLCAweDEyLDB4MkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MTQsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHg0MCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwgCi0weDEyLDB4MkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4RTAsMHgwMCwgCi0weDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDcsIDB4RTAsMHgwMCwgCi0weDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDUsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNiwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwgCi0weDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDUsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgxMiwweDQwLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weDEyLDB4NDAsIDB4RjMsMHg4MiwgMHgwMCwweDA3LCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4MkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MEIsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4NDAsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDYsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4NDAsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDYsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHgyQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4RjcsMHgwNCwgCi0weDM1LDB4MjgsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDEzLDB4Q0MsIDB4RjcsMHgwNSwgCi0weDM1LDB4NDQsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDUsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4OTAsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4OUMsIDB4MDAsMHgxNCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weDEyLDB4OUQsIDB4RjcsMHgwNiwgMHgwNCwweDAwLCAweEY3LDB4MDQsIDB4NkYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg2RiwweDVDLCAweEY3LDB4MDQsIDB4NkYsMHg1QywgMHhFMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweEY3LDB4MDYsIDB4MDQsMHgwMCwgMHhDMCwweDFFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weDE0LDB4MjksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MkUsMHhEMCwgMHhGNiwweDg0LCAweDM1LDB4MjQsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MTQsMHgwNSwgMHhGNywweDA1LCAweDJFLDB4RDAsIDB4RjcsMHgwNCwgCi0weEUwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE0LDB4MDUsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDAsIDB4RjYsMHg4NSwgMHhFMCwweDE0LCAweEY3LDB4MDQsIDB4MkUsMHhEOCwgMHhDNSwweDM0LCAweDAwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgyRSwweEQ4LCAweDIwLDB4MkEsIDB4MDAsMHgwMiwgMHhFRSwweDAwLCAweDEzLDB4Q0MsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDAsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4MTMsMHhBMCwgMHgwNSwweEI0LCAweDAwLDB4MDgsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4OTUsMHgxNiwgMHhGRiwweEU4LCAweDk1LDB4OTYsIDB4RkYsMHhFNCwgMHg5NiwweDk2LCAweEZGLDB4RTAsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4RTgsIDB4ODUsMHg5NiwgCi0weEZGLDB4RTQsIDB4ODYsMHg5NiwgMHhGRiwweEUwLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDEzLDB4OTAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHgzNiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MEYsIDB4RTIsMHgwMCwgCi0weDEzLDB4NzUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgwMCwweDE0LCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHhFMCwweDAwLCAweDEzLDB4OTAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHg3NywweDM1LCAweDAwLDB4MDUsIDB4QzcsMHgzOCwgCi0weDZBLDB4MDAsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHhDNywweDJDLCAweDcwLDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxMiwweDAwLCAweEY3LDB4MDUsIDB4MzUsMHgyQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4RjcsMHgwNCwgCi0weDZGLDB4NEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDEzLDB4QzAsIDB4MDcsMHgzNCwgCi0weDE0LDB4OTQsIDB4RjMsMHg4NCwgMHg2RiwweDQ0LCAweEUwLDB4MDAsIDB4MTMsMHhDNCwgMHhGMywweDg1LCAweDM1LDB4MjgsIDB4RjcsMHgwNSwgCi0weDM1LDB4MjgsIDB4RTAsMHgwMCwgMHgxMiwweEU4LCAweDA1LDB4MjgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDE0LDB4MjksIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGMCwweDA1LCAweDM1LDB4MjQsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDgyLCAweDAwLDB4MEQsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgxNCwweDI4LCAweEIzLDB4QkEsIDB4NjgsMHgwMiwgMHhFMCwweDAwLCAweDE0LDB4MjgsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjcsMHgwNCwgMHhFMCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDE0LDB4MjksIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweEY3LDB4MDUsIDB4RTAsMHgxMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDAyLDB4OTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4ODQsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDJELDB4M0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweEU2LDB4MDAsIDB4MEMsMHgwOSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QTUsMHgzQSwgMHg2OCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MTQsIDB4RTYsMHgwMCwgCi0weDE0LDB4OTEsIDB4MjcsMHgyOCwgMHgwMCwweDE1LCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFMiwweDAwLCAweDE0LDB4OTEsIDB4RjcsMHgwNiwgCi0weDJELDB4Q0MsIDB4RjYsMHg4NCwgMHgyRSwweENDLCAweDg2LDB4MDIsIDB4RkYsMHgzNCwgMHg3NSwweEI1LCAweDAwLDB4MDIsIDB4QjUsMHgyRSwgCi0weDcwLDB4MDIsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEY2LDB4ODUsIDB4MkUsMHhDQywgMHhGNywweDA2LCAweDJFLDB4NEMsIDB4MjAsMHgzNiwgCi0weDAwLDB4MUYsIDB4RTIsMHgwMCwgMHgxNCwweDkxLCAweEI2LDB4MkUsIDB4NzAsMHgwMiwgMHhGMCwweDA1LCAweDJFLDB4Q0MsIDB4RjcsMHgwNiwgCi0weDJELDB4NDQsIDB4NzYsMHhBOSwgMHgwMCwweDAyLCAweEE3LDB4MzYsIDB4NzAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzQSwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDM2LCAweDAwLDB4MDQsIDB4OTQsMHg5NiwgCi0weEZGLDB4RUMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEMxLDB4MzgsIDB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDJELDB4M0MsIDB4ODQsMHg5NiwgMHhGRiwweEVDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDE0LDB4MkMsIDB4RjcsMHgwNSwgMHgyRCwweDNDLCAweEUwLDB4MDAsIDB4MTQsMHgyQywgMHhGMCwweDA1LCAweDJELDB4M0MsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NCwweDE2LCAweDAwLDB4MDAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODUsMHg5NiwgMHgwMCwweDA0LCAweDIwLDB4M0EsIDB4MDAsMHgyMSwgMHhFRSwweDAwLCAweDE1LDB4MzQsIDB4OTUsMHhBMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwNiwgMHgyMywweDM4LCAweDA3LDB4MjAsIDB4MDAsMHg4NCwgMHhDNiwweEEwLCAweDAwLDB4MDAsIDB4OTYsMHgzQSwgCi0weDAwLDB4MDQsIDB4MjcsMHgzOCwgMHgwMCwweDA0LCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFQywweDAwLCAweDE1LDB4MjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODYsMHg5NiwgCi0weDAwLDB4MDAsIDB4ODcsMHgxNiwgMHgwMCwweDA0LCAweEY2LDB4MDQsIDB4MkQsMHg0MCwgMHg5NywweDM2LCAweDAwLDB4MDAsIDB4OTcsMHgzNiwgCi0weDAwLDB4MDQsIDB4MDcsMHgzMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MkQsMHg0MCwgMHg5NiwweDM2LCAweDAwLDB4MDgsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NSwweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDE0LCAweEU2LDB4MDAsIDB4MTUsMHhEOSwgMHgyNywweDI4LCAweDAwLDB4MTUsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDEsIDB4RTIsMHgwMCwgMHgxNSwweEQ5LCAweEY3LDB4MDYsIDB4MkQsMHhDQywgMHhGNiwweDg0LCAweDJFLDB4Q0MsIDB4ODYsMHgwMiwgCi0weEZGLDB4MzQsIDB4NzUsMHhCNSwgMHgwMCwweDAyLCAweEI1LDB4MkUsIDB4NzAsMHgwMiwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4RjYsMHg4NSwgCi0weDJFLDB4Q0MsIDB4RjcsMHgwNiwgMHgyRSwweDRDLCAweDIwLDB4MzYsIDB4MDAsMHgxRiwgMHhFMiwweDAwLCAweDE1LDB4RDksIDB4QjYsMHgyRSwgCi0weDcwLDB4MDIsIDB4RjAsMHgwNSwgMHgyRSwweENDLCAweEY2LDB4ODYsIDB4MkQsMHg0NCwgMHg3NywweDI5LCAweDAwLDB4MDIsIDB4QTYsMHhCQSwgCi0weDY4LDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzOCwgCi0weDAwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODcsMHgxNiwgMHgwMCwweDAwLCAweDg2LDB4OTYsIDB4MDAsMHgwNCwgMHhGNiwweDA2LCAweDJELDB4NDQsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4ODUsMHhCQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhCNSwweEI2LCAweDYwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4ODUsMHg5NiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweEI2LCAweDAwLDB4MDQsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzMiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MEYsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDAsIDB4QzUsMHgzOCwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4MTYsMHhCNCwgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MEYsIDB4RUUsMHgwMCwgMHgxNiwweEI0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RUMsMHgwMCwgCi0weDE2LDB4QjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFQywweDAwLCAweDE2LDB4RDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzMiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzMiwgCi0weDAwLDB4MEMsIDB4ODcsMHgzMiwgMHgwMCwweDBDLCAweEUwLDB4MDAsIDB4MTYsMHhEOCwgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgyQSwgCi0weDVBLDB4MDAsIDB4NDQsMHgwQywgMHgwMCwweDAxLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4MkUsMHhFMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDMyLDB4RDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgxOCwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MDksIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyRSwweEUwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MzQsMHg1OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgCi0weDAwLDB4MEMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkYsMHg2QywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDNGLDB4OTQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDBCLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDJGLDB4RjgsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgCi0weDNCLDB4ODQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwQiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDMyLDB4MjgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgyNiwweEU0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MTMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMCwweDg0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MjYsMHhBMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgCi0weDAwLDB4MTEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzEsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDE4LDB4MkMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDA5LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDMxLDB4OUMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjAsMHgwNSwgCi0weDdBLDB4NzgsIDB4RjAsMHgwNSwgMHgzMiwweEU4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDUwLCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxOCwweDU1LCAweEY2LDB4ODYsIDB4NzEsMHhDNCwgMHhFMCwweDAwLCAweDE4LDB4NkMsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg3MSwweEQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4ODYsMHgzQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDMyLDB4QzQsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDgsIDB4MDcsMHgwMSwgMHg4MCwweDAwLCAweEM1LDB4QjQsIDB4NzQsMHgwMCwgMHhGNSwweDg1LCAweDMyLDB4RDAsIDB4ODcsMHgzMiwgCi0weDAwLDB4MTgsIDB4RjYsMHg4NiwgMHg2RiwweDQ0LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhBNywweDNBLCAweDY4LDB4MDIsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEMwLCAweDA3LDB4MzgsIDB4MDksMHhEOCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjcsMHgwNSwgCi0weDMyLDB4Q0MsIDB4RTYsMHgwMCwgMHgxOSwweDQxLCAweEY2LDB4ODUsIDB4MzIsMHhDOCwgMHhGNywweDA0LCAweDcxLDB4OTgsIDB4RjYsMHg4NCwgCi0weDdBLDB4NzgsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE5LDB4MTAsIDB4RjcsMHgwNSwgCi0weDcxLDB4OTgsIDB4RjcsMHgwNCwgMHg3NiwweEZDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDE4LDB4RTgsIDB4RjMsMHgwMiwgMHgwMCwweDExLCAweEYzLDB4MDYsIDB4MzIsMHhENCwgMHhGMywweDA1LCAweDc2LDB4RkMsIDB4RTAsMHgwMCwgCi0weDE4LDB4RjgsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MDUsIDB4NzYsMHhGOCwgMHhGMywweDA2LCAweDMyLDB4RDQsIDB4RjMsMHgwNSwgCi0weDc3LDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE5LDB4MTQsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjMsMHgwNiwgMHgzMSwweDEwLCAweEUwLDB4MDAsIDB4MjYsMHg4QywgMHhGMywweDA1LCAweDMyLDB4RDQsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjMsMHgwNSwgMHg3QSwweDc4LCAweEYzLDB4MDYsIDB4MzAsMHg4NCwgMHhGMywweDA1LCAweDMyLDB4RDQsIDB4RjMsMHgwNCwgCi0weDMyLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDA2LDB4MTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MjYsMHg4QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUMsMHhCOSwgMHg5MywweDE2LCAweEZGLDB4RTQsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDgsIDB4ODYsMHg5NiwgMHhGRiwweEU0LCAweEMzLDB4MDQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDE5LDB4ODQsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDMyLDB4MDAsIDB4RTYsMHgwMCwgMHgxOSwweDg0LCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxQywweEI4LCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDMyLDB4QzAsIDB4OTMsMHgxNiwgCi0weEZGLDB4QUMsIDB4RjUsMHg4NCwgMHgzMiwweEM0LCAweDg2LDB4M0EsIDB4MTQsMHgyOCwgMHgwMywweEI4LCAweDE0LDB4MjAsIDB4MDQsMHgyQywgCi0weDAwLDB4MDgsIDB4ODYsMHhCQSwgMHgxNCwweDI0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDMyLCAweDZBLDB4MDAsIDB4RUMsMHgwMCwgCi0weDFBLDB4NzAsIDB4OTYsMHgxNiwgMHhGRiwweEVDLCAweDc3LDB4MzEsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QzYsMHgzOCwgMHgzOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwQywgMHg4NiwweEIyLCAweDAwLDB4MDAsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDgsIDB4ODUsMHgxNiwgMHhGRiwweEFDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDFBLDB4MDAsIDB4QzQsMHg4NCwgCi0weDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgxQSwweDA0LCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxQSwweDExLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDgyLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weDFBLDB4NEMsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDFBLDB4NTQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MjIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgxQSwweDU1LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxQSwweDY1LCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxQSwweDcwLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4QUMsIDB4ODMsMHgxNiwgCi0weEZGLDB4QUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFBLDB4QjEsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEUwLDB4MDAsIDB4MUIsMHgxOCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MjcsMHgxNCwgCi0weDAwLDB4MTQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk0LDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4QkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4QkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUIsMHgxNSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RjAsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDk3LDB4MUUsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDFCLDB4MUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFDLDB4QjgsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwNCwgMHgzMiwweEMwLCAweDkzLDB4MTYsIDB4RkYsMHhBQywgMHg4NiwweEIyLCAweDE0LDB4MjgsIDB4MDMsMHhCMCwgCi0weDE0LDB4MjAsIDB4MDQsMHgzMCwgMHgxNCwweDhDLCAweDg3LDB4MzIsIDB4MTQsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RUMsMHgwMCwgMHgxQywweDA0LCAweDk2LDB4OTYsIDB4RkYsMHhFQywgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM1LDB4QjgsIDB4MzgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MEMsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDAsIDB4ODcsMHgzMiwgMHgxNCwweDhDLCAweDg1LDB4MTYsIDB4RkYsMHhBQywgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDFCLDB4OTQsIDB4QzQsMHg4NCwgMHgwMCwweDAwLCAweDg2LDB4QUUsIDB4MDAsMHgwNCwgMHg4NywweDMyLCAweDE0LDB4OTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MUIsMHg5OCwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUIsMHhBNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDAsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDg3LDB4MjIsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgxQiwweEUwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDFCLDB4RTgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg2LDB4QUUsIDB4MDAsMHgwNCwgMHg4NywweDIyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4MUIsMHhFOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUIsMHhGOSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUMsMHgwNCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgCi0weEZGLDB4QUMsIDB4ODMsMHgxNiwgMHhGRiwweEFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDFBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDFDLDB4NDUsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzYsMHhCOSwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDM4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhGMCwgMHhFMCwweDAwLCAweDFDLDB4QUMsIDB4OTYsMHg5NiwgCi0weEZGLDB4RjQsIDB4MjcsMHgxNCwgMHgwMCwweDE0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NCwweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweEJDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI1LDB4NjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweEJDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFDLDB4QTksIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweDk2LDB4OTYsIDB4RkYsMHhGNCwgMHg5NywweDFFLCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDFDLDB4QjAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDFFLDB4MTUsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHhCNiwgCi0weDBFLDB4RjQsIDB4ODYsMHgzNiwgMHgwRSwweEY4LCAweDIwLDB4MkUsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDFDLDB4REMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgxQywweEY5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDBGLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MEYsMHgwMCwgMHg4NywweDM2LCAweDBGLDB4MDAsIDB4RTAsMHgwMCwgCi0weDFELDB4MjQsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDA3LDB4MzAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDVBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDFELDB4MUQsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDFELDB4MjAsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxRCwweDI0LCAweEM3LDB4MzQsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4QzcsMHgzNCwgCi0weDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUUsMHgxNCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4RjMsMHgwNCwgCi0weDMyLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTYsIDB4RkYsMHhEQywgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDFELDB4RkMsIDB4RjMsMHgwMiwgMHgwMCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhEQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDFELDB4OTEsIDB4NzYsMHhCMSwgCi0weDAwLDB4MDIsIDB4ODcsMHgxQSwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgxQSwgCi0weDAwLDB4MEMsIDB4ODcsMHgxQSwgMHgwMCwweDBDLCAweEUwLDB4MDAsIDB4MUQsMHhGQywgMHhGMywweDAyLCAweDAwLDB4MDAsIDB4RjMsMHgwMiwgCi0weDAwLDB4NEMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHg3NywweDM1LCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDZBLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweERDLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4N0EsMHgyOCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTYsMHgxNiwgCi0weEZGLDB4QjQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4QjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwgCi0weDFELDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4REMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTYsMHgxQSwgMHgwMCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4RDQsIDB4ODMsMHgxNiwgCi0weEZGLDB4RDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFFLDB4MTgsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEU0LCAweDgzLDB4MTYsIDB4RkYsMHhFNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxRiwweDM1LCAweEY2LDB4ODIsIDB4MEMsMHhBQiwgMHhGNywweDA0LCAweDMyLDB4QjQsIDB4ODMsMHgxNiwgCi0weEZGLDB4RDQsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzIsMHhCNCwgMHhGNywweDA0LCAweDMyLDB4QjQsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxRSwweDcwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDMyLDB4QzAsIDB4RjMsMHgwNiwgCi0weEUwLDB4MzAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4MUUsMHg3MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDMyLDB4RTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4RTgsIDB4RjcsMHgwNCwgCi0weDcxLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFFLDB4QUQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwQSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDFFLDB4QUMsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgCi0weDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDFFLDB4QzgsIDB4RjcsMHgwNSwgCi0weDcxLDB4RDQsIDB4RjAsMHgwNSwgMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhENCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwgCi0weDcxLDB4QzQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4RDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjUsMHhEOSwgMHhGNywweDA1LCAweDcxLDB4QzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4OTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4NzksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI1LDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweDc4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDI1LDB4REMsIDB4RjMsMHgwNiwgCi0weDMxLDB4OUMsIDB4RjAsMHgwNSwgMHgzMiwweEU4LCAweEY3LDB4MDQsIDB4MzIsMHhDMCwgMHhGNiwweDA0LCAweDZGLDB4NTQsIDB4OTYsMHhCQSwgCi0weDAwLDB4MDQsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUYsMHg2MCwgMHhGMywweDAyLCAweDAwLDB4MEMsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjMsMHgwNSwgMHg2RiwweDU0LCAweEUwLDB4MDAsIDB4MUYsMHg2OCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjMsMHgwNSwgCi0weDZGLDB4NTgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFGLDB4N0MsIDB4RjMsMHgwNiwgCi0weDJGLDB4NkMsIDB4RTAsMHgwMCwgMHgyNiwweDhDLCAweEYzLDB4MDUsIDB4MzIsMHhENCwgMHhGNSwweDg0LCAweDdBLDB4NzAsIDB4MjQsMHg5NCwgCi0weDAwLDB4MTAsIDB4MjAsMHgyRSwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4MjIsMHg4NCwgMHhGNSwweDg1LCAweDdBLDB4QTAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNCwgMHgzMiwweEM4LCAweEY3LDB4MDUsIDB4N0EsMHg3MCwgMHhGNywweDA0LCAweDMyLDB4QzQsIDB4RjYsMHg4NCwgCi0weDMyLDB4QzAsIDB4RjYsMHgwNSwgMHg3QSwweDJDLCAweDkwLDB4MDIsIDB4RkYsMHg4MCwgMHg5MCwweDAyLCAweEZGLDB4MzgsIDB4RjUsMHg4NCwgCi0weDdBLDB4MjgsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweDk1LDB4ODIsIDB4RkYsMHgzQywgMHg5NywweDAyLCAweEZGLDB4NDAsIDB4OTYsMHgwMiwgCi0weEZGLDB4NDQsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTAsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTgsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweEYwLDB4MDUsIDB4NkYsMHg1MCwgMHhGNywweDA0LCAweDMyLDB4QjgsIDB4OTUsMHg5NiwgCi0weEZGLDB4RUMsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweEY3LDB4MDUsIDB4MzIsMHhCOCwgMHhGNywweDA0LCAweDMyLDB4QkMsIDB4RjMsMHgwNiwgCi0weDJGLDB4RjgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzIsMHhCQywgMHhGNywweDA0LCAweDMyLDB4QkMsIDB4RjMsMHgwNSwgCi0weDMyLDB4RDQsIDB4RjcsMHgwNiwgMHgwQywweDNFLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDIwLDB4MzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4MjAsMHgyNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNiwgCi0weDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDI2LDB4OEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzMiwweEU0LCAweEZGLDB4ODIsIDB4MDAsMHgxMCwgMHhGNSwweDg0LCAweDZGLDB4NTgsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4MjAsMHg5MCwgMHhGNywweDA1LCAweDMyLDB4RTQsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MjAsMHg4NCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjMsMHgwMiwgMHgwMCwweDIyLCAweEUwLDB4MDAsIDB4MjAsMHg5NCwgMHhGMywweDA1LCAweDZGLDB4NTgsIDB4RjAsMHgwNSwgCi0weDZGLDB4NTQsIDB4RjUsMHg4NCwgMHgzMiwweEMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MCwweDJFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMiwgMHhFNiwweDAwLCAweDIxLDB4QzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgwMiwgMHhGRiwweDM4LCAweDAzLDB4MkMsIDB4MEUsMHhGNCwgMHg5MywweDE2LCAweEZGLDB4Q0MsIDB4RjcsMHgwNSwgCi0weDdBLDB4NjgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhCOCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDQzLDB4QTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhCOCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDIxLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MkUsIDB4MEUsMHhGOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgyMSwweDE5LCAweEYzLDB4MDIsIDB4MDAsMHg0QywgMHg4NywweDJFLCAweDBGLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MkUsIDB4MEYsMHgwMCwgMHg4NywweDJFLCAweDBGLDB4MDAsIDB4RTAsMHgwMCwgCi0weDIxLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDA2LCAweDdBLDB4MjgsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4NzYsMHhCMSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHg3NywweDM1LCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDZBLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweENDLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhCOCwgMHg5NiwweDE2LCAweEZGLDB4QjQsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNiwweEY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NiwweDE2LCAweEZGLDB4QjQsIDB4ODUsMHg5NiwgCi0weEZGLDB4QjgsIDB4MDYsMHgzMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMSwgMHhFNiwweDAwLCAweDIxLDB4NzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDk2LDB4MkUsIDB4MEUsMHhGOCwgMHhGNywweDA0LCAweDMyLDB4QzAsIDB4RjMsMHgwNiwgCi0weEUwLDB4MzAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4MjEsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weEUwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjgsIDB4MDAsMHgxRSwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weDIxLDB4QzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDIxLDB4RkQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwQSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDIxLDB4RkMsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgCi0weDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDIyLDB4MTgsIDB4RjcsMHgwNSwgCi0weDcxLDB4RDQsIDB4RjAsMHgwNSwgMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhENCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwgCi0weDcxLDB4QzQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4RDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjUsMHhEOSwgMHhGNywweDA1LCAweDcxLDB4QzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4OTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4NzksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI1LDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweDc4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDI1LDB4REMsIDB4RjMsMHgwNiwgCi0weDMxLDB4OUMsIDB4RjAsMHgwNSwgMHg3QSwweDg4LCAweDkwLDB4MDIsIDB4RkYsMHgzOCwgMHhGMCwweDA1LCAweDZGLDB4NTAsIDB4OTAsMHgwMiwgCi0weEZGLDB4ODAsIDB4RjcsMHgwNCwgMHgzMiwweEM0LCAweEYzLDB4MDYsIDB4MzIsMHgyOCwgMHhGMywweDA1LCAweDMyLDB4RDQsIDB4RjYsMHgwNCwgCi0weDMyLDB4QzgsIDB4RjYsMHg4NCwgMHg3QSwweDJDLCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4RjcsMHgwNSwgCi0weDdBLDB4OTgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjIsMHhENSwgMHhGNiwweDA1LCAweDdBLDB4OTAsIDB4QzAsMHgyQSwgCi0weDVBLDB4MDAsIDB4RTYsMHgwMCwgMHgyNiwweDIwLCAweEMwLDB4MzIsIDB4NkEsMHgwMCwgMHhFRSwweDAwLCAweDI2LDB4MjEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzMiwweEMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDE0LDB4MTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDk3LDB4MzYsIDB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MTQsMHgxOCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhGNywweDA1LCAweDMyLDB4QjgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4QkMsIDB4RjcsMHgwNCwgCi0weDMyLDB4QkMsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjMsMHg0NSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDMyLDB4RTAsIDB4RjUsMHgwNSwgMHg3QSwweDcwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDIzLDB4NDgsIDB4RjcsMHgwNSwgCi0weDMyLDB4RTAsIDB4RjUsMHgwNSwgMHg3QSwweDcwLCAweEY1LDB4ODQsIDB4NkYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MjEsIDB4RTIsMHgwMCwgMHgyMywweDhDLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgyMywweDgwLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwMiwgCi0weDAwLDB4MjIsIDB4RTAsMHgwMCwgMHgyMywweDkwLCAweEYzLDB4MDUsIDB4NkYsMHg1OCwgMHhGMCwweDA1LCAweDZGLDB4NTQsIDB4RjUsMHg4NCwgCi0weDMyLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkwLDB4MkUsIDB4MDAsMHgwNCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4MjQsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwgCi0weEZGLDB4MzgsIDB4MDMsMHgyQywgMHgwRSwweEY0LCAweDkzLDB4MTYsIDB4RkYsMHhDNCwgMHhGNywweDA1LCAweDdBLDB4NjgsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweEI4LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDQzLDB4QTAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODUsMHg5NiwgMHhGRiwweEI4LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI0LDB4NzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODYsMHgyRSwgMHgwRSwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTAsIDB4RTIsMHgwMCwgCi0weDI0LDB4MTUsIDB4RjMsMHgwMiwgMHgwMCwweDRDLCAweDg3LDB4MkUsIDB4MEYsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4OTcsMHgyRSwgMHgwRiwweDAwLCAweDg3LDB4MkUsIDB4MEYsMHgwMCwgMHhFMCwweDAwLCAweDI0LDB4NzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4N0EsMHgyOCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4NzYsMHhCMSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNCwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4ODMsMHgxNiwgCi0weEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweEM3LDB4MzgsIDB4MzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweEI4LCAweDk2LDB4MTYsIDB4RkYsMHhCNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsIDB4RkYsMHhCNCwgMHg4NSwweDk2LCAweEZGLDB4QjgsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDExLCAweEU2LDB4MDAsIDB4MjQsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4OTYsMHgyRSwgMHgwRSwweEY4LCAweEY3LDB4MDQsIDB4MzIsMHhDMCwgMHhGMywweDA2LCAweEUwLDB4MzAsIDB4QzAsMHgzQSwgCi0weDMyLDB4MDAsIDB4RTYsMHgwMCwgMHgyNCwweEJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweEUwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHhCOCwgMHgwMCwweDFFLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDI0LDB4QkQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHhGNywweDA0LCAweDcxLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjQsMHhGOSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjMsMHgwMiwgMHgwMCwweDBBLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDI0LDB4RjgsIDB4QjMsMHgzQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEU2LDB4MDAsIDB4MjUsMHgxNCwgMHhGNywweDA1LCAweDcxLDB4RDQsIDB4RjAsMHgwNSwgCi0weDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhEMCwgMHhGMCwweDA1LCAweDcxLDB4QzQsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweEQ5LCAweEY3LDB4MDUsIDB4NzEsMHhDOCwgMHhGNywweDA0LCAweDcxLDB4OTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjUsMHg3OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4NzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI1LDB4RDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODQsIDB4NzYsMHhGOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MjEsIDB4RTIsMHgwMCwgMHgyNSwweEM0LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgyNSwweEIwLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwMiwgCi0weDAwLDB4MjIsIDB4RjMsMHgwNSwgMHg3NiwweEY4LCAweEYzLDB4MDQsIDB4NzcsMHgwMCwgMHhFMCwweDAwLCAweDI1LDB4QzgsIDB4RjMsMHgwNSwgCi0weDc2LDB4RkMsIDB4RjAsMHgwNSwgMHg3NiwweEZDLCAweEUwLDB4MDAsIDB4MjUsMHhEOCwgMHhGMCwweDA1LCAweDdBLDB4NzgsIDB4RTAsMHgwMCwgCi0weDI1LDB4REMsIDB4RjMsMHgwNiwgMHgzMSwweDlDLCAweEYzLDB4MDYsIDB4MkUsMHhFMCwgMHhGMywweDA1LCAweDMyLDB4RDQsIDB4RjcsMHgwNCwgCi0weDcxLDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI2LDB4OEMsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwOSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDI2LDB4OEMsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4MjYsMHg4QywgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgCi0weDdBLDB4OTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFRSwweDAwLCAweDI2LDB4NDEsIDB4QzUsMHhCNCwgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg1QSwweDAwLCAweEUwLDB4MDAsIDB4MjYsMHg0OCwgMHhGNywweDA1LCAweDdBLDB4OTAsIDB4QzUsMHhCOCwgCi0weDAwLDB4MDAsIDB4RjAsMHgwNSwgMHg3QSwweDkwLCAweEY2LDB4ODQsIDB4N0EsMHg4OCwgMHhGNywweDA2LCAweDdBLDB4MjgsIDB4NzYsMHgzNSwgCi0weDAwLDB4MDMsIDB4QTcsMHgzMiwgMHg3MCwweDAyLCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHg5NywweDE2LCAweEZGLDB4RUMsIDB4ODQsMHhBNiwgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3QSwweDJDLCAweEYzLDB4MDQsIDB4N0EsMHg5OCwgMHg5NCwweDgyLCAweEZGLDB4M0MsIDB4OTMsMHgwMiwgCi0weEZGLDB4NDAsIDB4OTUsMHg4MiwgMHhGRiwweDQ0LCAweEI1LDB4QjIsIDB4NzAsMHgwMiwgMHhGNywweDA0LCAweDdBLDB4OTgsIDB4RjYsMHg4NSwgCi0weDdBLDB4ODgsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweEY3LDB4MDUsIDB4N0EsMHg5OCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDdBLDB4NzgsIDB4RjcsMHgwNiwgCi0weDMwLDB4ODQsIDB4RjcsMHgwNSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4MzIsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MDYsMHgxMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NTAsIDB4RjcsMHgwNCwgCi0weDMyLDB4RDAsIDB4RjMsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJBLDB4NzEsIDB4OTMsMHgxNiwgCi0weEZGLDB4RTQsIDB4RjYsMHg4NCwgMHgzMiwweEM0LCAweDg2LDB4MTYsIDB4RkYsMHhFNCwgMHg4NywweDM2LCAweDAwLDB4MDgsIDB4QzMsMHgwNCwgCi0weDAwLDB4MDAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4MjcsMHgzQywgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweDI3LDB4M0MsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJBLDB4NzAsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweDkzLDB4MTYsIDB4RkYsMHhBQywgMHhGNSwweDg0LCAweDMyLDB4QzQsIDB4ODYsMHgzQSwgCi0weDE0LDB4MjgsIDB4MDMsMHhCOCwgMHgxNCwweDIwLCAweDA0LDB4MkMsIDB4MDAsMHgwOCwgMHg4NiwweEJBLCAweDE0LDB4MjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg2QSwweDAwLCAweEVDLDB4MDAsIDB4MjgsMHgyOCwgMHg5NiwweDE2LCAweEZGLDB4RUMsIDB4NzcsMHgzMSwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNiwweDM4LCAweDM4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MEMsIDB4ODYsMHhCMiwgMHgwMCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwOCwgMHg4NSwweDE2LCAweEZGLDB4QUMsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgyNywweEI4LCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDI3LDB4QkMsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI3LDB4QzksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDIyLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4MjgsMHgwNCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgyOCwweDBDLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4ODcsMHgyMiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDI4LDB4MEQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI4LDB4MUQsIDB4MjAsMHgyNiwgCi0weDAwLDB4MDAsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI4LDB4MjgsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEFDLCAweDgzLDB4MTYsIDB4RkYsMHhBQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyOCwweDY5LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDM4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4RTAsMHgwMCwgCi0weDI4LDB4RDAsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDI3LDB4MTQsIDB4MDAsMHgxNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTQsMHgxMywgCi0weEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHhCQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhCQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI4LDB4Q0QsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzYsMHhCOSwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDM4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhGMCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4OTcsMHgxRSwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgyOCwweEQ0LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQSwweDcwLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHhGNiwweDA0LCAweDMyLDB4QzAsIDB4OTMsMHgxNiwgCi0weEZGLDB4QUMsIDB4ODYsMHhCMiwgMHgxNCwweDI4LCAweDAzLDB4QjAsIDB4MTQsMHgyMCwgMHgwNCwweDMwLCAweDE0LDB4OEMsIDB4ODcsMHgzMiwgCi0weDE0LDB4MjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLCAweDI5LDB4QkMsIDB4OTYsMHg5NiwgCi0weEZGLDB4RUMsIDB4NzcsMHgzNSwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzUsMHhCOCwgCi0weDM4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDBDLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg4NywweDMyLCAweDE0LDB4OEMsIDB4ODUsMHgxNiwgCi0weEZGLDB4QUMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MjksMHg0QywgMHhDNCwweDg0LCAweDAwLDB4MDAsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDQsIDB4ODcsMHgzMiwgMHgxNCwweDkwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI5LDB4NTAsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI5LDB4NUQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweEFFLCAweDAwLDB4MDAsIDB4ODcsMHgyMiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDI5LDB4OTgsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MjksMHhBMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyMiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weDI5LDB4QTEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI5LDB4QjEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDI5LDB4QkMsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweDkzLDB4MTYsIDB4RkYsMHhBQywgMHg4MywweDE2LCAweEZGLDB4QUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgxQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjksMHhGRCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RjAsIDB4RTAsMHgwMCwgMHgyQSwweDY0LCAweDk2LDB4OTYsIDB4RkYsMHhGNCwgMHgyNywweDE0LCAweDAwLDB4MTQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTQsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4QkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQSwweDYxLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDM4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4OTYsMHg5NiwgCi0weEZGLDB4RjQsIDB4OTcsMHgxRSwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MkEsMHg2OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkIsMHhDRCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDMyLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg1LDB4QjYsIDB4MEUsMHhGNCwgMHg4NiwweDM2LCAweDBFLDB4RjgsIDB4MjAsMHgyRSwgCi0weDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgyQSwweDk0LCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDJBLDB4QjEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwRiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDBGLDB4MDAsIDB4ODcsMHgzNiwgMHgwRiwweDAwLCAweEUwLDB4MDAsIDB4MkEsMHhEQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4MDcsMHgzMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg1QSwweDAwLCAweEU2LDB4MDAsIDB4MkEsMHhENSwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4MjAsMHgzMiwgCi0weDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgyQSwweEQ4LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJBLDB4REMsIDB4QzcsMHgzNCwgCi0weDAwLDB4MDAsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweEM3LDB4MzQsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDJCLDB4Q0MsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MDQsIDB4MzIsMHhDQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgCi0weEZGLDB4REMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDQzLDB4NjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkIsMHhCNCwgMHhGMywweDAyLCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgCi0weEZGLDB4REMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MUEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgyQiwweDQ5LCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHg4NywweDFBLCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MUEsIDB4MDAsMHgwQywgMHg4NywweDFBLCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgCi0weDJCLDB4QjQsIDB4RjMsMHgwMiwgMHgwMCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHg0QywgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4QzYsMHhCNCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4REMsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4QzcsMHgzOCwgMHgzMCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgCi0weDdBLDB4MjgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDk2LDB4MTYsIDB4RkYsMHhCNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsIDB4RkYsMHhCNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDExLCAweEU2LDB4MDAsIDB4MkIsMHhBNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweERDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NiwweDFBLCAweDAwLDB4MDAsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEQ0LCAweDgzLDB4MTYsIDB4RkYsMHhENCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQiwweEQwLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4RTQsIDB4ODMsMHgxNiwgCi0weEZGLDB4RTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJDLDB4RUQsIDB4RjYsMHg4MiwgCi0weDBDLDB4QUIsIDB4RjcsMHgwNCwgMHgzMiwweEI0LCAweDgzLDB4MTYsIDB4RkYsMHhENCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDMyLDB4QjQsIDB4RjcsMHgwNCwgMHgzMiwweEI0LCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJDLDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweEYzLDB4MDYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDJDLDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhFOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzMiwweEU4LCAweEY3LDB4MDQsIDB4NzEsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQywweDY1LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MEEsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MkMsMHg2NCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjcsMHgwNCwgMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhDQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgyQywweDgwLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgCi0weDcxLDB4RDQsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEYwLDB4MDUsIDB4NzEsMHhDNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzMiwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMzLDB4OTEsIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMywweDMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzMsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4MzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzMywweDk0LCAweEYzLDB4MDYsIDB4MzEsMHg5QywgMHhGMCwweDA1LCAweDMyLDB4RTgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QzAsIDB4RjYsMHgwNCwgMHg2RiwweDU0LCAweDk2LDB4QkEsIDB4MDAsMHgwNCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDJELDB4MTgsIDB4RjMsMHgwMiwgMHgwMCwweDBDLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA1LCAweDZGLDB4NTQsIDB4RTAsMHgwMCwgCi0weDJELDB4MjAsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MDUsIDB4NkYsMHg1OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyRCwweDM0LCAweEYzLDB4MDYsIDB4MkYsMHg2QywgMHhFMCwweDAwLCAweDM0LDB4NDQsIDB4RjMsMHgwNSwgCi0weDMyLDB4RDQsIDB4RjUsMHg4NCwgMHg3QSwweDcwLCAweDI0LDB4OTQsIDB4MDAsMHgxMCwgMHgyMCwweDJFLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weDMwLDB4M0MsIDB4RjUsMHg4NSwgMHg3QSwweEEwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNiwweDA0LCAweDMyLDB4QzgsIDB4RjcsMHgwNSwgCi0weDdBLDB4NzAsIDB4RjcsMHgwNCwgMHgzMiwweEM0LCAweEY2LDB4ODQsIDB4MzIsMHhDMCwgMHhGNiwweDA1LCAweDdBLDB4MkMsIDB4OTAsMHgwMiwgCi0weEZGLDB4ODAsIDB4OTAsMHgwMiwgMHhGRiwweDM4LCAweEY1LDB4ODQsIDB4N0EsMHgyOCwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4OTUsMHg4MiwgCi0weEZGLDB4M0MsIDB4OTcsMHgwMiwgMHhGRiwweDQwLCAweDk2LDB4MDIsIDB4RkYsMHg0NCwgMHg4NywweDM2LCAweDE0LDB4MTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDk3LDB4MzYsIDB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MTQsMHgxOCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4RjAsMHgwNSwgCi0weDZGLDB4NTAsIDB4RjcsMHgwNCwgMHgzMiwweEI4LCAweDk1LDB4OTYsIDB4RkYsMHhFQywgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4RjcsMHgwNSwgCi0weDMyLDB4QjgsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEYzLDB4MDYsIDB4MkYsMHhGOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDMyLDB4QkMsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEYzLDB4MDUsIDB4MzIsMHhENCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwgCi0weDc0LDB4MDAsIDB4RTYsMHgwMCwgMHgyRCwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDdFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weDJELDB4REQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDNywweDdDLCAweDc0LDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgzNCwweDQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDMyLDB4RTQsIDB4RkYsMHg4MiwgCi0weDAwLDB4MTAsIDB4RjUsMHg4NCwgMHg2RiwweDU4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgCi0weDJFLDB4NDgsIDB4RjcsMHgwNSwgMHgzMiwweEU0LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDJFLDB4M0MsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgCi0weDJFLDB4NEMsIDB4RjMsMHgwNSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTAsMHgyRSwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHgyRiwweDc4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDAyLCAweEZGLDB4MzgsIDB4MDMsMHgyQywgCi0weDBFLDB4RjQsIDB4OTMsMHgxNiwgMHhGRiwweENDLCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgCi0weEZGLDB4QjgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NDMsMHhBMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weEZGLDB4QjgsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkYsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgyRSwgCi0weDBFLDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDJFLDB4RDEsIDB4RjMsMHgwMiwgCi0weDAwLDB4NEMsIDB4ODcsMHgyRSwgMHgwRiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgyRSwgCi0weDBGLDB4MDAsIDB4ODcsMHgyRSwgMHgwRiwweDAwLCAweEUwLDB4MDAsIDB4MkYsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4RjMsMHgwNiwgMHg3QSwweDI4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4Q0MsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4QzcsMHgzOCwgMHgzMCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgCi0weEZGLDB4QjgsIDB4OTYsMHgxNiwgMHhGRiwweEI0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODYsMHgxNiwgMHhGRiwweEI0LCAweDg1LDB4OTYsIDB4RkYsMHhCOCwgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MTEsIDB4RTYsMHgwMCwgMHgyRiwweDMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4OTYsMHgyRSwgCi0weDBFLDB4RjgsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweEYzLDB4MDYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDJGLDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhCOCwgCi0weDAwLDB4MUUsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDAsIDB4MkYsMHg3OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MEYsMHg4MSwgCi0weDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyRiwweEI1LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MEEsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MkYsMHhCNCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjcsMHgwNCwgMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhDQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgyRiwweEQwLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgCi0weDcxLDB4RDQsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEYwLDB4MDUsIDB4NzEsMHhDNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzMiwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMzLDB4OTEsIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMywweDMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzMsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4MzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzMywweDk0LCAweEYzLDB4MDYsIDB4MzEsMHg5QywgMHhGMCwweDA1LCAweDdBLDB4ODgsIDB4OTAsMHgwMiwgCi0weEZGLDB4MzgsIDB4RjAsMHgwNSwgMHg2RiwweDUwLCAweDkwLDB4MDIsIDB4RkYsMHg4MCwgMHhGNywweDA0LCAweDMyLDB4QzQsIDB4RjMsMHgwNiwgCi0weDMyLDB4MjgsIDB4RjMsMHgwNSwgMHgzMiwweEQ0LCAweEY2LDB4MDQsIDB4MzIsMHhDOCwgMHhGNiwweDg0LCAweDdBLDB4MkMsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweEY3LDB4MDUsIDB4N0EsMHg5OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMwLDB4OEQsIDB4RjYsMHgwNSwgMHg3QSwweDkwLCAweEMwLDB4MkEsIDB4NUEsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4RDgsIDB4QzAsMHgzMiwgCi0weDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzMywweEQ5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTAsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTgsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweEY3LDB4MDQsIDB4MzIsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzMiwweEJDLCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMwLDB4RkQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzMSwweDAwLCAweEY3LDB4MDUsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDMxLDB4NDQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDMxLDB4MzgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDMxLDB4NDgsIDB4RjMsMHgwNSwgCi0weDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY1LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTAsMHgyRSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgCi0weDMyLDB4NzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MDIsIDB4RkYsMHgzOCwgMHgwMywweDJDLCAweDBFLDB4RjQsIDB4OTMsMHgxNiwgCi0weEZGLDB4QzQsIDB4RjcsMHgwNSwgMHg3QSwweDY4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4QjgsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4QjgsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMiwweDMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDJFLCAweDBFLDB4RjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MzEsMHhDRCwgMHhGMywweDAyLCAweDAwLDB4NEMsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4RTAsMHgwMCwgMHgzMiwweDMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgCi0weDdBLDB4MjgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwgCi0weDMwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4QjgsIDB4OTYsMHgxNiwgCi0weEZGLDB4QjQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4QjQsIDB4ODUsMHg5NiwgMHhGRiwweEI4LCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwgCi0weDMyLDB4MkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg5NiwweDJFLCAweDBFLDB4RjgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QzAsIDB4RjMsMHgwNiwgMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweDMyLDB4NzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMCwgMHgzMiwweDc1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwRiwweDgxLCAweDQwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMyLDB4QjEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEEsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzMiwweEIwLCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweENDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMyLDB4Q0MsIDB4RjcsMHgwNSwgMHg3MSwweEQ0LCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4RDQsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDMyLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4OTEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDMzLDB4MzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMywweDMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzMsMHg4OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4NCwgCi0weDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDMzLDB4N0MsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDMzLDB4NjgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDIsIDB4MDAsMHgyMiwgMHhGMywweDA1LCAweDc2LDB4RjgsIDB4RjMsMHgwNCwgCi0weDc3LDB4MDAsIDB4RTAsMHgwMCwgMHgzMywweDgwLCAweEYzLDB4MDUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RTAsMHgwMCwgCi0weDMzLDB4OTAsIDB4RjAsMHgwNSwgMHg3QSwweDc4LCAweEUwLDB4MDAsIDB4MzMsMHg5NCwgMHhGMywweDA2LCAweDMxLDB4OUMsIDB4RjMsMHgwNiwgCi0weDJFLDB4RTAsIDB4RjMsMHgwNSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzNCwweDQ0LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MzQsMHg0NCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgCi0weDM0LDB4NDQsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4N0EsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzMywweEY5LCAweEM1LDB4QjQsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDVBLDB4MDAsIDB4RTAsMHgwMCwgCi0weDM0LDB4MDAsIDB4RjcsMHgwNSwgMHg3QSwweDkwLCAweEM1LDB4QjgsIDB4MDAsMHgwMCwgMHhGMCwweDA1LCAweDdBLDB4OTAsIDB4RjYsMHg4NCwgCi0weDdBLDB4ODgsIDB4RjcsMHgwNiwgMHg3QSwweDI4LCAweDc2LDB4MzUsIDB4MDAsMHgwMywgMHhBNywweDMyLCAweDcwLDB4MDIsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDEsIDB4OTcsMHgxNiwgMHhGRiwweEVDLCAweDg0LDB4QTYsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDdBLDB4MkMsIDB4RjMsMHgwNCwgCi0weDdBLDB4OTgsIDB4OTQsMHg4MiwgMHhGRiwweDNDLCAweDkzLDB4MDIsIDB4RkYsMHg0MCwgMHg5NSwweDgyLCAweEZGLDB4NDQsIDB4QjUsMHhCMiwgCi0weDcwLDB4MDIsIDB4RjcsMHgwNCwgMHg3QSwweDk4LCAweEY2LDB4ODUsIDB4N0EsMHg4OCwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4RjcsMHgwNSwgCi0weDdBLDB4OTgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MjAsIDB4RjUsMHg4NCwgMHg3QSwweDcwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weDM3LDB4NkMsIDB4RjUsMHg4NSwgMHg3QSwweEEwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNiwweDA0LCAweDMyLDB4QzgsIDB4RjcsMHgwNSwgCi0weDdBLDB4NzAsIDB4RjcsMHgwNCwgMHgzMiwweEM0LCAweEY2LDB4ODQsIDB4MzIsMHhDMCwgMHhGNiwweDA1LCAweDdBLDB4MkMsIDB4OTAsMHgwMiwgCi0weEZGLDB4ODAsIDB4OTAsMHgwMiwgMHhGRiwweDM4LCAweEY1LDB4ODQsIDB4N0EsMHgyOCwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4OTUsMHg4MiwgCi0weEZGLDB4M0MsIDB4OTcsMHgwMiwgMHhGRiwweDQwLCAweDk2LDB4MDIsIDB4RkYsMHg0NCwgMHg4NywweDM2LCAweDE0LDB4MTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDk3LDB4MzYsIDB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MTQsMHgxOCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4RjAsMHgwNSwgCi0weDZGLDB4NTAsIDB4RjcsMHgwNCwgMHgzMiwweEI4LCAweDk1LDB4OTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4RjcsMHgwNSwgCi0weDMyLDB4QjgsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEY0LDB4ODYsIDB4MkYsMHhGOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDMyLDB4QkMsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEY0LDB4ODUsIDB4MzIsMHhENCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwgCi0weDc0LDB4MDAsIDB4RTYsMHgwMCwgMHgzNSwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDdFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weDM1LDB4MEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDNywweDdDLCAweDc0LDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgzQiwweDcwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDMyLDB4RTQsIDB4RkYsMHg4MiwgCi0weDAwLDB4MTAsIDB4RjUsMHg4NCwgMHg2RiwweDU4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgCi0weDM1LDB4NzgsIDB4RjcsMHgwNSwgMHgzMiwweEU0LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDM1LDB4NkMsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNCwweDgyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgCi0weDM1LDB4N0MsIDB4RjQsMHg4NSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTAsMHgyRSwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHgzNiwweEE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDAyLCAweEZGLDB4MzgsIDB4MDQsMHhBQywgCi0weDBFLDB4RjQsIDB4OTQsMHg5NiwgMHhGRiwweEVDLCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgCi0weEZGLDB4REMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NDMsMHhBMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weEZGLDB4REMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzYsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgyRSwgCi0weDBFLDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDM2LDB4MDEsIDB4RjQsMHg4MiwgCi0weDAwLDB4NEMsIDB4ODcsMHgyRSwgMHgwRiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgyRSwgCi0weDBGLDB4MDAsIDB4ODcsMHgyRSwgMHgwRiwweDAwLCAweEUwLDB4MDAsIDB4MzYsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4RjQsMHg4NiwgMHg3QSwweDI4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHg4NCwweDk2LCAweEZGLDB4RUMsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgCi0weEZGLDB4REMsIDB4OTYsMHgxNiwgMHhGRiwweEQ4LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODYsMHgxNiwgMHhGRiwweEQ4LCAweDg1LDB4OTYsIDB4RkYsMHhEQywgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MTEsIDB4RTYsMHgwMCwgMHgzNiwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4OTYsMHgyRSwgCi0weDBFLDB4RjgsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweEY0LDB4ODYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDM2LDB4QTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhCOCwgCi0weDAwLDB4MUUsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDAsIDB4MzYsMHhBOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MEYsMHg4MSwgCi0weDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzNiwweEU1LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MEEsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MzYsMHhFNCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjcsMHgwNCwgMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhDQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgzNywweDAwLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgCi0weDcxLDB4RDQsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEYwLDB4MDUsIDB4NzEsMHhDNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzMiwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDNBLDB4QzEsIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzQSwweDYxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0EsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNBLDB4NjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzQSwweEM0LCAweEY0LDB4ODYsIDB4MzEsMHg5QywgMHhGMCwweDA1LCAweDdBLDB4ODgsIDB4OTAsMHgwMiwgCi0weEZGLDB4MzgsIDB4RjAsMHgwNSwgMHg2RiwweDUwLCAweDkwLDB4MDIsIDB4RkYsMHg4MCwgMHhGNywweDA0LCAweDMyLDB4QzQsIDB4RjQsMHg4NiwgCi0weDMyLDB4MjgsIDB4RjQsMHg4NSwgMHgzMiwweEQ0LCAweEY2LDB4MDQsIDB4MzIsMHhDOCwgMHhGNiwweDg0LCAweDdBLDB4MkMsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweEY3LDB4MDUsIDB4N0EsMHg5OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDM3LDB4QkQsIDB4RjYsMHgwNSwgMHg3QSwweDkwLCAweEMwLDB4MkEsIDB4NUEsMHgwMCwgMHhFNiwweDAwLCAweDNCLDB4MDgsIDB4QzAsMHgzMiwgCi0weDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzQiwweDA5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTAsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTgsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweEY3LDB4MDQsIDB4MzIsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzMiwweEJDLCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDM4LDB4MkQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzOCwweDMwLCAweEY3LDB4MDUsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDM4LDB4NzQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDM4LDB4NjgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDM4LDB4NzgsIDB4RjQsMHg4NSwgCi0weDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY1LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTAsMHgyRSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgCi0weDM5LDB4QTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MDIsIDB4RkYsMHgzOCwgMHgwNCwweEFDLCAweDBFLDB4RjQsIDB4OTQsMHg5NiwgCi0weEZGLDB4RTQsIDB4RjcsMHgwNSwgMHg3QSwweDY4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4REMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4REMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzOSwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDJFLCAweDBFLDB4RjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MzgsMHhGRCwgMHhGNCwweDgyLCAweDAwLDB4NEMsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4RTAsMHgwMCwgMHgzOSwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4RjQsMHg4NiwgCi0weDdBLDB4MjgsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHhFNCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwgCi0weDQ4LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4REMsIDB4OTYsMHgxNiwgCi0weEZGLDB4RDgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4RDgsIDB4ODUsMHg5NiwgMHhGRiwweERDLCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwgCi0weDM5LDB4NUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg5NiwweDJFLCAweDBFLDB4RjgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QzAsIDB4RjQsMHg4NiwgMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDM5LDB4QTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMCwgMHgzOSwweEE1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwRiwweDgxLCAweDQwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDM5LDB4RTEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MEEsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzOSwweEUwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweENDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDM5LDB4RkMsIDB4RjcsMHgwNSwgMHg3MSwweEQ0LCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4RDQsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDMyLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNBLDB4QzEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDNBLDB4NjEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzQSwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0EsMHhCOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4NCwgCi0weDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDNBLDB4QUMsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNBLDB4OTgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhGNCwweDg1LCAweDc2LDB4RjgsIDB4RjQsMHg4NCwgCi0weDc3LDB4MDAsIDB4RTAsMHgwMCwgMHgzQSwweEIwLCAweEY0LDB4ODUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RTAsMHgwMCwgCi0weDNBLDB4QzAsIDB4RjAsMHgwNSwgMHg3QSwweDc4LCAweEUwLDB4MDAsIDB4M0EsMHhDNCwgMHhGNCwweDg2LCAweDMxLDB4OUMsIDB4RjQsMHg4NiwgCi0weDJFLDB4RTAsIDB4RjQsMHg4NSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzQiwweDcwLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4M0IsMHg3MCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgCi0weDNCLDB4NzAsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4N0EsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzQiwweDI5LCAweEM1LDB4QjQsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDVBLDB4MDAsIDB4RTAsMHgwMCwgCi0weDNCLDB4MzAsIDB4RjcsMHgwNSwgMHg3QSwweDkwLCAweEM1LDB4QjgsIDB4MDAsMHgwMCwgMHhGMCwweDA1LCAweDdBLDB4OTAsIDB4RjcsMHgwNCwgCi0weDdBLDB4ODgsIDB4RjYsMHg4NiwgMHg3QSwweDI4LCAweDc2LDB4MzksIDB4MDAsMHgwMywgMHhBNiwweEIyLCAweDY4LDB4MDIsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3QSwweDg4LCAweEY3LDB4MDQsIDB4N0EsMHg5OCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4OTYsMHg4MiwgCi0weEZGLDB4M0MsIDB4RjQsMHg4NCwgMHg3QSwweDk4LCAweEY2LDB4ODYsIDB4N0EsMHgyQywgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4OTQsMHg4MiwgCi0weEZGLDB4NDAsIDB4OTUsMHg4MiwgMHhGRiwweDQ0LCAweEI1LDB4QjIsIDB4NjgsMHgwMiwgMHhGNywweDA1LCAweDdBLDB4OTgsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTgsIDB4RjUsMHgwNCwgCi0weDdBLDB4ODgsIDB4RjcsMHgwNiwgMHg3QSwweDJDLCAweEY1LDB4ODQsIDB4N0EsMHg5MCwgMHg3NiwweEE5LCAweDAwLDB4MDMsIDB4QTYsMHhCNiwgCi0weDcwLDB4MDIsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0IsMHhDRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDdBLDB4QTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MkEsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDNGLDB4MTgsIDB4QzAsMHgyRSwgCi0weDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzRiwweDE5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4QzAsIDB4RjYsMHgwNCwgCi0weDMyLDB4QzgsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTAsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MTgsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweEY3LDB4MDQsIDB4MzIsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzMiwweEJDLCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDNDLDB4M0QsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4MzIsMHhFMCwgMHhGNiwweDg1LCAweDdBLDB4NzAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzQywweDQwLCAweEY3LDB4MDUsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDNDLDB4ODQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNDLDB4NzgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDNDLDB4ODgsIDB4RjQsMHg4NSwgCi0weDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY1LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTAsMHgyRSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgCi0weDNELDB4QjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MDIsIDB4RkYsMHgzOCwgMHgwNCwweEFDLCAweDBFLDB4RjQsIDB4OTQsMHg5NiwgCi0weEZGLDB4RUMsIDB4RjcsMHgwNSwgMHg3QSwweDY4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RTQsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RTQsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzRCwweDcwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDJFLCAweDBFLDB4RjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4M0QsMHgwRCwgMHhGNCwweDgyLCAweDAwLDB4NEMsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4RTAsMHgwMCwgMHgzRCwweDcwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4RjQsMHg4NiwgCi0weDdBLDB4MjgsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHhFQywgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwgCi0weDQ4LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RTQsIDB4OTYsMHgxNiwgCi0weEZGLDB4RTAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4RTAsIDB4ODUsMHg5NiwgMHhGRiwweEU0LCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwgCi0weDNELDB4NkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg5NiwweDJFLCAweDBFLDB4RjgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QzAsIDB4RjQsMHg4NiwgMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDNELDB4QjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMCwgMHgzRCwweEI1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwRiwweDgxLCAweDQwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDNELDB4RjEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MEEsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzRCwweEYwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweENDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDNFLDB4MEMsIDB4RjcsMHgwNSwgMHg3MSwweEQ0LCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4RDQsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDMyLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNFLDB4RDEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDNFLDB4NzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzRSwweDcwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0UsMHhDOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4NCwgCi0weDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDNFLDB4QkMsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNFLDB4QTgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhGNCwweDg1LCAweDc2LDB4RjgsIDB4RjQsMHg4NCwgCi0weDc3LDB4MDAsIDB4RTAsMHgwMCwgMHgzRSwweEMwLCAweEY0LDB4ODUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RTAsMHgwMCwgCi0weDNFLDB4RDAsIDB4RjAsMHgwNSwgMHg3QSwweDc4LCAweEUwLDB4MDAsIDB4M0UsMHhENCwgMHhGNCwweDg2LCAweDMxLDB4OUMsIDB4RjQsMHg4NiwgCi0weDJFLDB4RTAsIDB4RjQsMHg4NSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzRiwweDgwLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4M0YsMHg4MCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgCi0weDNGLDB4ODAsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4N0EsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzRiwweDM5LCAweEM1LDB4QjQsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDVBLDB4MDAsIDB4RTAsMHgwMCwgCi0weDNGLDB4NDAsIDB4RjcsMHgwNSwgMHg3QSwweDkwLCAweEM1LDB4QjgsIDB4MDAsMHgwMCwgMHhGMCwweDA1LCAweDdBLDB4OTAsIDB4RjcsMHgwNCwgCi0weDdBLDB4ODgsIDB4RjYsMHg4NiwgMHg3QSwweDI4LCAweDc2LDB4MzksIDB4MDAsMHgwMywgMHhBNiwweEIyLCAweDY4LDB4MDIsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3QSwweDg4LCAweEY3LDB4MDQsIDB4N0EsMHg5OCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4OTYsMHg4MiwgCi0weEZGLDB4M0MsIDB4RjQsMHg4NCwgMHg3QSwweDk4LCAweEY2LDB4ODYsIDB4N0EsMHgyQywgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4OTQsMHg4MiwgCi0weEZGLDB4NDAsIDB4OTUsMHg4MiwgMHhGRiwweDQ0LCAweEI1LDB4QjIsIDB4NjgsMHgwMiwgMHhGNywweDA1LCAweDdBLDB4OTgsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTAsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDNGLDB4RTQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNGLDB4RDgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDNGLDB4RTgsIDB4RjUsMHgwNSwgCi0weDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY1LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTAsMHgyRSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgCi0weDQxLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MDIsIDB4RkYsMHgzOCwgMHgwNSwweDJDLCAweDBFLDB4RjQsIDB4OTUsMHgxNiwgCi0weEZGLDB4RjQsIDB4RjcsMHgwNSwgMHg3QSwweDY4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RUMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RUMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0MCwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDJFLCAweDBFLDB4RjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4NDAsMHg2RCwgMHhGNSwweDAyLCAweDAwLDB4NEMsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwgCi0weDBGLDB4MDAsIDB4RTAsMHgwMCwgMHg0MCwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDdBLDB4MjgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDg1LDB4MTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwgCi0weDUwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RUMsIDB4OTYsMHgxNiwgCi0weEZGLDB4RTgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4RTgsIDB4ODUsMHg5NiwgMHhGRiwweEVDLCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwgCi0weDQwLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg5NiwweDJFLCAweDBFLDB4RjgsIDB4RjcsMHgwNCwgCi0weDMyLDB4QzAsIDB4RjUsMHgwNiwgMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4NTIsMHgwMCwgMHhFNiwweDAwLCAweDQxLDB4MTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMCwgMHg0MSwweDE1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwRiwweDgxLCAweDQwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQxLDB4NTEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNSwweDAyLCAweDAwLDB4MEEsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg0MSwweDUwLCAweEI1LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweENDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQxLDB4NkMsIDB4RjcsMHgwNSwgMHg3MSwweEQ0LCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4RDQsIDB4RjcsMHgwNCwgCi0weDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDMyLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQyLDB4MzEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQxLDB4RDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0MSwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDIsMHgyOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4NCwgCi0weDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDQyLDB4MUMsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDQyLDB4MDgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsIDB4MDAsMHgyMiwgMHhGNSwweDA1LCAweDc2LDB4RjgsIDB4RjUsMHgwNCwgCi0weDc3LDB4MDAsIDB4RTAsMHgwMCwgMHg0MiwweDIwLCAweEY1LDB4MDUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RTAsMHgwMCwgCi0weDQyLDB4MzAsIDB4RjAsMHgwNSwgMHg3QSwweDc4LCAweEUwLDB4MDAsIDB4NDIsMHgzNCwgMHhGNSwweDA2LCAweDMxLDB4OUMsIDB4RjUsMHgwNiwgCi0weDJFLDB4RTAsIDB4RjUsMHgwNSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0MiwweDc0LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NDIsMHg3NCwgMHhCNSwweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgCi0weDMyLDB4RDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkUsMHhFMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDMyLDB4RDQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyRiwweDZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzIsMHhENCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDJGLDB4RjgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMiwweEQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDMwLDB4ODQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDMyLDB4RDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzEsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDMyLDB4RDQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMSwweDlDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzIsMHhENCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDMyLDB4MjgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODcsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ0LDB4MEMsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgyRSwgCi0weDAwLDB4MDAsIDB4ODYsMHhBRSwgMHgwMCwweDA0LCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDQzLDB4RDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4NDMsMHhFRCwgMHgwNywweDM0LCAweDAwLDB4MDEsIDB4ODcsMHgyRSwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDAwLDB4MEMsIDB4ODcsMHgyRSwgCi0weDAwLDB4MEMsIDB4RTAsMHgwMCwgMHg0NCwweDE0LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDYyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQ0LDB4MTEsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzYsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDQ0LDB4MTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDQsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzNSwweDI0LCAweEY3LDB4MDQsIDB4NkYsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDM1LDB4MjgsIDB4RjcsMHgwNiwgMHgzMiwweEY0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM1LDB4MzAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg0OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgCi0weDQ1LDB4MDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MDAsMHgwRCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDMyLDB4RjQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHg0QSwweDA0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MEYsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMywweDgwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4NEUsMHhFQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzQsMHgwQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDU3LDB4NjQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgwMCwweDA3LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM0LDB4OTgsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQ1LDB4MkQsIDB4RjYsMHg4NiwgCi0weDc1LDB4RjgsIDB4RTAsMHgwMCwgMHg0NSwweDQ0LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc2LDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDUsMHg1QywgMHhGNywweDA1LCAweDM1LDB4NDgsIDB4RjQsMHg4NiwgCi0weDMzLDB4ODAsIDB4RTAsMHgwMCwgMHg0OSwweEYwLCAweEY0LDB4ODUsIDB4MzUsMHgzMCwgMHhGNywweDA0LCAweDZGLDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDUsMHg4MCwgMHhGNCwweDgyLCAweDAwLDB4MDgsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjQsMHg4NSwgMHg2RiwweDU0LCAweEUwLDB4MDAsIDB4NDUsMHg4OCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjQsMHg4NSwgCi0weDZGLDB4NTgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQ1LDB4QTAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDQsIDB4RjQsMHg4NiwgMHgzNCwweDBDLCAweEUwLDB4MDAsIDB4NDksMHhGMCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjYsMHg4NCwgCi0weDM1LDB4NDgsIDB4RjYsMHgwNCwgMHgzNSwweDJDLCAweEY0LDB4QjcsIDB4MjgsMHgwMCwgMHgwNywweDM0LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjQsMHhCQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHg4QywgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDAwLDB4MTgsIDB4ODcsMHgzMiwgMHgwMCwweDkwLCAweEY0LDB4ODUsIDB4NkYsMHg1MCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4ODQsMHhCMiwgCi0weDAwLDB4ODQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QjYsIDB4MDAsMHgxMCwgMHg4NCwweEIyLCAweDAwLDB4ODgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTQsMHhCNiwgMHgwMCwweDE0LCAweDg0LDB4QjYsIDB4MDAsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhCNiwgCi0weDAwLDB4MDgsIDB4ODQsMHhCNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDAwLDB4MEMsIDB4ODQsMHhCMiwgCi0weDAwLDB4OTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4ODUsIDB4MzUsMHg1NCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4OTQsMHg4MiwgCi0weEZGLDB4ODAsIDB4RjUsMHgwNCwgMHgzNSwweDU0LCAweEY0LDB4ODYsIDB4MzQsMHg5OCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4OTUsMHgwMiwgCi0weEZGLDB4MzgsIDB4ODUsMHhCMiwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgyNCwgMHg5NSwweDgyLCAweEZGLDB4M0MsIDB4OTYsMHg4MiwgCi0weEZGLDB4NDAsIDB4ODcsMHgzMiwgMHgwMCwweDA0LCAweEY2LDB4ODUsIDB4MzUsMHg1MCwgMHg5NywweDAyLCAweEZGLDB4NDQsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDQsIDB4RjAsMHgwNSwgMHgzNSwweDRDLCAweEY3LDB4MDQsIDB4MzUsMHg0MCwgMHg5NSwweDE2LCAweEZGLDB4RjQsIDB4OTUsMHg5NiwgCi0weEZGLDB4RjQsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweEY3LDB4MDUsIDB4MzUsMHg0MCwgMHhGNSwweDg0LCAweDM1LDB4MjgsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgxNCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4OTcsMHgyRSwgCi0weDE0LDB4MTQsIDB4ODcsMHgzMiwgMHgwMCwweDgwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDEsIDB4RUUsMHgwMCwgCi0weDQ5LDB4RjAsIDB4RjcsMHgwNiwgMHgwQywweDNFLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDQ2LDB4QTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NDYsMHg5NSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNiwgCi0weDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDQ5LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RkYsMHg4MiwgMHgwMCwweDEwLCAweDg2LDB4ODIsIDB4RkYsMHgzOCwgMHhGNywweDA0LCAweDM1LDB4NTgsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4RjYsMHg4NSwgMHgzNSwweDU0LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgCi0weDQ3LDB4MDgsIDB4RjcsMHgwNSwgMHgzNSwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDQ2LDB4RkMsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNCwweDgyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgCi0weDQ3LDB4MEMsIDB4RjQsMHg4NSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDk0LCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQ3LDB4NzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MzYsIDB4MDAsMHg5NCwgMHhGNiwweDg0LCAweDM1LDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDM1LDB4NDgsIDB4NzcsMHhCNCwgCi0weDAwLDB4MEYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweDA3LDB4MzgsIDB4MDAsMHgyNCwgMHhFNiwweDAwLCAweDQ3LDB4NjksIDB4QzYsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4NDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg0NywweEJELCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgCi0weDQ3LDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzUsMHgyOCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0OSwweDY4LCAweEY3LDB4MDUsIDB4MzUsMHg0NCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgCi0weDQ3LDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDM1LDB4M0MsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4ODcsMHgzNiwgMHgxNCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHg3NiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQ4LDB4MUMsIDB4RjcsMHgwNSwgMHg3NiwweDA0LCAweEYwLDB4MDUsIDB4NzYsMHgwNCwgMHhGNiwweDg0LCAweDc2LDB4MDQsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0OCwweDgxLCAweEY3LDB4MDUsIDB4NzUsMHhGOCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjQsMHg4NiwgCi0weDcyLDB4MTgsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQ4LDB4ODEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg0OCwweDgwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NDksMHg2OCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHg0OSwweDNDLCAweDA1LDB4QjQsIDB4MDAsMHgwOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxNiwgCi0weEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDVFLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhFQywgMHg4NSwweDk2LCAweEZGLDB4RTgsIDB4ODYsMHg5NiwgCi0weEZGLDB4RTQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDksMHgyQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4ODYsMHgzNiwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDQ5LDB4MTEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDAwLDB4MTQsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4NDksMHgyQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDQ3LDB4QTgsIDB4RjcsMHgwNSwgMHgzNSwweDJDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NDksMHg1QywgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjQsMHg4NCwgCi0weDZGLDB4NDQsIDB4RTAsMHgwMCwgMHg0OSwweDYwLCAweEY0LDB4ODUsIDB4MzUsMHgyOCwgMHhGNywweDA1LCAweDM1LDB4MjgsIDB4RTAsMHgwMCwgCi0weDQ4LDB4ODQsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQ5LDB4QTEsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgwRCwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDQ5LDB4QTgsIDB4QjQsMHhCQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4NDksMHhBOCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjQsMHg4NSwgMHgzNSwweDI0LCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NDQsIDB4RjQsMHg4NiwgCi0weDMyLDB4RjQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NDksMHhGMCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjcsMHgwNCwgCi0weEUwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjgsIDB4MDAsMHgxRiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weDQ5LDB4RjEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRBLDB4MkQsIDB4RjYsMHg4NiwgCi0weDc1LDB4RjgsIDB4RTAsMHgwMCwgMHg0QSwweDQwLCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc2LDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MTgsIDB4RjcsMHgwNCwgCi0weDZGLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRBLDB4NjQsIDB4RjYsMHg4NSwgCi0weDM1LDB4NDgsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweEY0LDB4ODUsIDB4NkYsMHg1NCwgMHhFMCwweDAwLCAweDRBLDB4NzAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjQsMHg4MiwgMHgwMCwweDA4LCAweEY0LDB4ODUsIDB4NkYsMHg1OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0QSwweDg4LCAweEY0LDB4ODIsIDB4MDAsMHgwNCwgMHhGNCwweDg2LCAweDM0LDB4MEMsIDB4RTAsMHgwMCwgCi0weDRFLDB4RDgsIDB4RjQsMHg4NSwgMHgzNSwweDMwLCAweEY2LDB4ODQsIDB4MzUsMHg0OCwgMHhGNiwweDA0LCAweDM1LDB4MkMsIDB4RjQsMHhCNywgCi0weDI4LDB4MDAsIDB4MDcsMHgzNCwgMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweEJCLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgCi0weDAwLDB4OEMsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgxOCwgMHg4NywweDMyLCAweDAwLDB4OTAsIDB4RjQsMHg4NSwgCi0weDZGLDB4NTAsIDB4OTcsMHgzNiwgMHgwMCwweDA0LCAweDg0LDB4QjIsIDB4MDAsMHg4NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhCNiwgCi0weDAwLDB4MTAsIDB4ODQsMHhCMiwgMHgwMCwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDAwLDB4MTQsIDB4ODQsMHhCNiwgCi0weDAwLDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QjYsIDB4MDAsMHgwOCwgMHg4NCwweEI2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTQsMHhCNiwgMHgwMCwweDBDLCAweDg0LDB4QjIsIDB4MDAsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4NSwgCi0weDM1LDB4NTQsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDk0LDB4ODIsIDB4RkYsMHg4MCwgMHhGNSwweDA0LCAweDM1LDB4NTQsIDB4RjQsMHg4NiwgCi0weDM0LDB4OTgsIDB4RjQsMHg4NSwgMHgzNSwweDMwLCAweDk1LDB4MDIsIDB4RkYsMHgzOCwgMHg4NSwweEIyLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MjQsIDB4OTUsMHg4MiwgMHhGRiwweDNDLCAweDk2LDB4ODIsIDB4RkYsMHg0MCwgMHg4NywweDMyLCAweDAwLDB4MDQsIDB4RjYsMHg4NSwgCi0weDM1LDB4NTAsIDB4OTcsMHgwMiwgMHhGRiwweDQ0LCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHhGMCwweDA1LCAweDM1LDB4NEMsIDB4RjcsMHgwNCwgCi0weDM1LDB4NDAsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDk1LDB4OTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4RjcsMHgwNSwgCi0weDM1LDB4NDAsIDB4RjUsMHg4NCwgMHgzNSwweDI4LCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHg4NywweDJFLCAweDE0LDB4MTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDk3LDB4MkUsIDB4MTQsMHgxNCwgMHg4NywweDMyLCAweDAwLDB4ODAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweEVFLDB4MDAsIDB4NEUsMHhEOCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwgCi0weDc0LDB4MDAsIDB4RTYsMHgwMCwgMHg0QiwweDhDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDdFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weDRCLDB4N0QsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDNywweDdDLCAweDc0LDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MTAsIDB4RTYsMHgwMCwgMHg0RSwweEQ4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGRiwweDgyLCAweDAwLDB4MTAsIDB4ODYsMHg4MiwgCi0weEZGLDB4MzgsIDB4RjcsMHgwNCwgMHgzNSwweDU4LCAweEY1LDB4ODQsIDB4NkYsMHg1OCwgMHhGNiwweDg1LCAweDM1LDB4NTQsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4NEIsMHhGMCwgMHhGNywweDA1LCAweDM1LDB4NTgsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NEIsMHhFNCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjQsMHg4MiwgMHgwMCwweDIyLCAweEUwLDB4MDAsIDB4NEIsMHhGNCwgMHhGNCwweDg1LCAweDZGLDB4NTgsIDB4RjAsMHgwNSwgCi0weDZGLDB4NTQsIDB4RjYsMHg4NCwgMHgzNSwweDJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4OTQsIDB4QzQsMHg4NCwgCi0weDAwLDB4MDAsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweEU2LDB4MDAsIDB4NEMsMHg1OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgzNiwgCi0weDAwLDB4OTQsIDB4RjYsMHg4NCwgMHgzNSwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4RjcsMHgwNCwgCi0weDM1LDB4NTQsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4RjcsMHgwNCwgMHgzNSwweDQ4LCAweDc3LDB4QjQsIDB4MDAsMHgwRiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MjQsIDB4RTYsMHgwMCwgMHg0QywweDUxLCAweEM2LDB4MzgsIDB4NjAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4QzcsMHgwNCwgCi0weDZFLDB4MDAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY2LDB4ODQsIDB4MzUsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDRDLDB4QTUsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDAwLDB4MEMsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweEUwLDB4MDAsIDB4NEMsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDM1LDB4MjgsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDRFLDB4NTAsIDB4RjcsMHgwNSwgCi0weDM1LDB4NDQsIDB4MjAsMHgzQSwgMHgwMCwweDEwLCAweEU2LDB4MDAsIDB4NEMsMHhCNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4OTcsMHgzNiwgMHgwMCwweDA0LCAweEY3LDB4MDQsIDB4MzUsMHgzQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzNSwweDNDLCAweEY3LDB4MDQsIDB4MzUsMHgzQywgMHg4NywweDM2LCAweDE0LDB4MUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MTQsMHgxQywgMHhGNywweDA0LCAweDc2LDB4MDQsIDB4ODYsMHhCNiwgCi0weDE0LDB4MUMsIDB4RjYsMHgwNCwgMHg3NSwweEZDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDc2LDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEU2LDB4MDAsIDB4NEQsMHgwNCwgMHhGNywweDA1LCAweDc2LDB4MDQsIDB4RjAsMHgwNSwgCi0weDc2LDB4MDQsIDB4RjYsMHg4NCwgMHg3NiwweDA0LCAweEY3LDB4MDQsIDB4NzYsMHgwOCwgMHhGMCwweDA1LCAweDc1LDB4RkMsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRELDB4NjksIDB4RjcsMHgwNSwgCi0weDc1LDB4RjgsIDB4RjcsMHgwNCwgMHg3NiwweDQ4LCAweEY0LDB4ODYsIDB4NzIsMHgxOCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NEQsMHg2OSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjQsMHg4MiwgMHgwMCwweDBFLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDRELDB4NjgsIDB4QjQsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDJBLCAweDAwLDB4MDIsIDB4RUUsMHgwMCwgCi0weDRFLDB4NTAsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMiwgMHhFNiwweDAwLCAweDRFLDB4MjQsIDB4MDUsMHhCNCwgCi0weDAwLDB4MDgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTYsIDB4RkYsMHhFQywgMHg5NSwweDk2LCAweEZGLDB4RTgsIDB4OTYsMHg5NiwgCi0weEZGLDB4RTQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NUUsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgCi0weEZGLDB4RUMsIDB4ODUsMHg5NiwgMHhGRiwweEU4LCAweDg2LDB4OTYsIDB4RkYsMHhFNCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDRFLDB4MTQsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4MzYsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg0RCwweEY5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgxNCwgMHg4NywweDM2LCAweDAwLDB4MTQsIDB4RTAsMHgwMCwgCi0weDRFLDB4MTQsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDUsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4QzcsMHgyQywgCi0weDcwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NEMsMHg5MCwgMHhGNywweDA1LCAweDM1LDB4MkMsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDRDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDRFLDB4NDQsIDB4MDcsMHgzNCwgMHgxNCwweDk0LCAweEY0LDB4ODQsIDB4NkYsMHg0NCwgMHhFMCwweDAwLCAweDRFLDB4NDgsIDB4RjQsMHg4NSwgCi0weDM1LDB4MjgsIDB4RjcsMHgwNSwgMHgzNSwweDI4LCAweEUwLDB4MDAsIDB4NEQsMHg2QywgMHgwNSwweDI4LCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0RSwweDg5LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MEQsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NEUsMHg5MCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgCi0weDRFLDB4OTAsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweDg1LCAweDM1LDB4MjQsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDQ0LCAweEY0LDB4ODYsIDB4MzIsMHhGNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDRFLDB4RDgsIDB4RjQsMHg4NSwgMHgzNSwweDMwLCAweEY3LDB4MDQsIDB4RTAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhCOCwgCi0weDAwLDB4MUYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDAsIDB4NEUsMHhEOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MEYsMHg4MSwgCi0weDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE0LCAweEY2LDB4ODQsIDB4MzUsMHg0OCwgMHhGNiwweDA0LCAweDM1LDB4MkMsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDQsIDB4RjQsMHhCNywgMHgyOCwweDAwLCAweDA3LDB4MzQsIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjQsMHhCQiwgCi0weDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDhDLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDAwLDB4MTgsIDB4ODcsMHgzMiwgCi0weDAwLDB4OTAsIDB4RjQsMHg4NSwgMHg2RiwweDUwLCAweDk3LDB4MzYsIDB4MDAsMHgwNCwgMHg4NCwweEIyLCAweDAwLDB4ODQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTQsMHhCNiwgMHgwMCwweDEwLCAweDg0LDB4QjIsIDB4MDAsMHg4OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhCNiwgCi0weDAwLDB4MTQsIDB4ODQsMHhCNiwgMHgwMCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDAwLDB4MDgsIDB4ODQsMHhCNiwgCi0weDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QjYsIDB4MDAsMHgwQywgMHg4NCwweEIyLCAweDAwLDB4OTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjQsMHg4NSwgMHgzNSwweDU0LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHg5NCwweDgyLCAweEZGLDB4ODAsIDB4RjUsMHgwNCwgCi0weDM1LDB4NTQsIDB4RjQsMHg4NiwgMHgzNCwweDk4LCAweEY0LDB4ODUsIDB4MzUsMHgzMCwgMHg5NSwweDAyLCAweEZGLDB4MzgsIDB4ODUsMHhCMiwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDI0LCAweDk1LDB4ODIsIDB4RkYsMHgzQywgMHg5NiwweDgyLCAweEZGLDB4NDAsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDQsIDB4RjYsMHg4NSwgMHgzNSwweDUwLCAweDk3LDB4MDIsIDB4RkYsMHg0NCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjAsMHgwNSwgCi0weDM1LDB4NEMsIDB4RjcsMHgwNCwgMHgzNSwweDQwLCAweDk1LDB4MTYsIDB4RkYsMHhGNCwgMHg5NSwweDk2LCAweEZGLDB4RjQsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4RjcsMHgwNSwgMHgzNSwweDQwLCAweEY1LDB4ODQsIDB4MzUsMHgyOCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgCi0weDE0LDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg5NywweDJFLCAweDE0LDB4MTQsIDB4ODcsMHgzMiwgCi0weDAwLDB4ODAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFRSwweDAwLCAweDUzLDB4NEMsIDB4RjcsMHgwNiwgCi0weDBDLDB4M0UsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHg3RSwgCi0weDc0LDB4MDAsIDB4RTYsMHgwMCwgMHg0RiwweEYxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzcsMHg3QywgCi0weDc0LDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDEwLCAweEU2LDB4MDAsIDB4NTMsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RkYsMHg4MiwgCi0weDAwLDB4MTAsIDB4ODYsMHg4MiwgMHhGRiwweDM4LCAweEY3LDB4MDQsIDB4MzUsMHg1OCwgMHhGNSwweDg0LCAweDZGLDB4NTgsIDB4RjYsMHg4NSwgCi0weDM1LDB4NTQsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDUwLDB4NjQsIDB4RjcsMHgwNSwgCi0weDM1LDB4NTgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDUwLDB4NTgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDUwLDB4NjgsIDB4RjQsMHg4NSwgCi0weDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY2LDB4ODQsIDB4MzUsMHgyQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4OTQsIDB4QzQsMHg4NCwgMHgwMCwweDAwLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDUwLDB4Q0QsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODYsMHgzNiwgMHgwMCwweDk0LCAweEY2LDB4ODQsIDB4MzUsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzYsMHhCNCwgCi0weEZGLDB4RjAsIDB4RjcsMHgwNCwgMHgzNSwweDU0LCAweDk2LDB4OTYsIDB4RkYsMHhGNCwgMHg0NywweDM5LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RjAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY3LDB4MDQsIDB4MzUsMHg0OCwgMHg3NywweEI0LCAweDAwLDB4MEYsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweEU2LDB4MDAsIDB4NTAsMHhDNSwgMHhDNiwweDM4LCAweDYwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDEsIDB4QzcsMHgwNCwgMHg2RSwweDAwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHhGNiwweDg0LCAweDM1LDB4NDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MEYsIDB4RTIsMHgwMCwgCi0weDUxLDB4MTksIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgwMCwweDBDLCAweDg3LDB4MzYsIDB4MDAsMHgwQywgMHhFMCwweDAwLCAweDUxLDB4MkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzNSwweDI4LCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDUyLDB4QzQsIDB4RjcsMHgwNSwgMHgzNSwweDQ0LCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDUxLDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDk3LDB4MzYsIDB4MDAsMHgwNCwgMHhGNywweDA0LCAweDM1LDB4M0MsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzUsMHgzQywgMHhGNywweDA0LCAweDM1LDB4M0MsIDB4ODcsMHgzNiwgCi0weDE0LDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDE0LDB4MUMsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDQsIDB4ODYsMHhCNiwgMHgxNCwweDFDLCAweEY2LDB4MDQsIDB4NzUsMHhGQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDc2LDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDUxLDB4NzgsIDB4RjcsMHgwNSwgCi0weDc2LDB4MDQsIDB4RjAsMHgwNSwgMHg3NiwweDA0LCAweEY2LDB4ODQsIDB4NzYsMHgwNCwgMHhGNywweDA0LCAweDc2LDB4MDgsIDB4RjAsMHgwNSwgCi0weDc1LDB4RkMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDUxLDB4REQsIDB4RjcsMHgwNSwgMHg3NSwweEY4LCAweEY3LDB4MDQsIDB4NzYsMHg0OCwgMHhGNCwweDg2LCAweDcyLDB4MTgsIDB4QzAsMHgzQSwgCi0weDRBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDUxLDB4REQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgwRSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDUxLDB4REMsIDB4QjQsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDIsIDB4RUUsMHgwMCwgMHg1MiwweEM0LCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgCi0weDUyLDB4OTgsIDB4MDUsMHhCNCwgMHgwMCwweDA4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDE2LCAweEZGLDB4RUMsIDB4OTUsMHg5NiwgCi0weEZGLDB4RTgsIDB4OTYsMHg5NiwgMHhGRiwweEU0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDVFLDB4REMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg1LDB4OTYsIDB4RkYsMHhFOCwgMHg4NiwweDk2LCAweEZGLDB4RTQsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1MiwweDg4LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDBGLCAweEUyLDB4MDAsIDB4NTIsMHg2RCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDAwLDB4MTQsIDB4ODcsMHgzNiwgCi0weDAwLDB4MTQsIDB4RTAsMHgwMCwgMHg1MiwweDg4LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA1LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MTAsIDB4QzcsMHgyQywgMHg3MCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDUxLDB4MDQsIDB4RjcsMHgwNSwgCi0weDM1LDB4MkMsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweEY3LDB4MDQsIDB4NkYsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1MiwweEI4LCAweDA3LDB4MzQsIDB4MTQsMHg5NCwgMHhGNCwweDg0LCAweDZGLDB4NDQsIDB4RTAsMHgwMCwgCi0weDUyLDB4QkMsIDB4RjQsMHg4NSwgMHgzNSwweDI4LCAweEY3LDB4MDUsIDB4MzUsMHgyOCwgMHhFMCwweDAwLCAweDUxLDB4RTAsIDB4MDUsMHgyOCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NTIsMHhGRCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjQsMHg4MiwgMHgwMCwweDBELCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDUzLDB4MDQsIDB4QjQsMHhCQSwgCi0weDY4LDB4MDIsIDB4RTAsMHgwMCwgMHg1MywweDA0LCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjQsMHg4NSwgCi0weDM1LDB4MjQsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweEY3LDB4MDQsIDB4NkYsMHg0NCwgMHhGNCwweDg2LCAweDMyLDB4RjQsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1MywweDRDLCAweEY0LDB4ODUsIDB4MzUsMHgzMCwgMHhGNywweDA0LCAweEUwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHhCOCwgMHgwMCwweDFGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDUzLDB4NEQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgxNCwgMHhGNCwweDg0LCAweDM1LDB4NTQsIDB4RjYsMHg4NCwgCi0weDM1LDB4NEMsIDB4RjUsMHg4NCwgMHgzNSwweDJDLCAweDk0LDB4ODIsIDB4RkYsMHgzOCwgMHg3NiwweEI1LCAweDAwLDB4MDMsIDB4QTUsMHgyRSwgCi0weDY4LDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MDIsIDB4RkYsMHgzQywgMHhGMywweDg0LCAweDM1LDB4NTAsIDB4QzYsMHhBQywgCi0weDY4LDB4MDAsIDB4OTMsMHg4MiwgMHhGRiwweDQwLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgwMiwgCi0weEZGLDB4NDQsIDB4ODYsMHgzNiwgMHgwMCwweDA0LCAweEY3LDB4MDQsIDB4MzUsMHg0MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzNSwweDQwLCAweEY2LDB4MDQsIDB4MzUsMHgyOCwgMHg4NiwweEI2LCAweDAwLDB4MDQsIDB4ODcsMHgzMiwgCi0weDE0LDB4MTQsIDB4OTQsMHg5NiwgMHhGRiwweEY0LCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg5NywweDMyLCAweDE0LDB4MTQsIDB4ODcsMHgyRSwgCi0weDAwLDB4ODAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFRSwweDAwLCAweDU3LDB4NTAsIDB4OTUsMHgxNiwgCi0weEZGLDB4RjQsIDB4RjcsMHgwNiwgMHgwQywweDNFLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDU0LDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NTMsMHhGNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNiwgCi0weDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDU3LDB4NTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RkYsMHg4MiwgMHgwMCwweDEwLCAweDg2LDB4ODIsIDB4RkYsMHgzOCwgMHhGNywweDA0LCAweDM1LDB4NTgsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4RjYsMHg4NSwgMHgzNSwweDU0LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgCi0weDU0LDB4NjgsIDB4RjcsMHgwNSwgMHgzNSwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDU0LDB4NUMsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDgyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgCi0weDU0LDB4NkMsIDB4RjMsMHg4NSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDk0LCAweEMzLDB4ODQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDNBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU0LDB4RDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MzYsIDB4MDAsMHg5NCwgMHhGNiwweDg0LCAweDM1LDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDM1LDB4NDgsIDB4NzcsMHhCNCwgCi0weDAwLDB4MEYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweDA3LDB4MzgsIDB4MDAsMHgyNCwgMHhFNiwweDAwLCAweDU0LDB4QzksIDB4QzYsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4NDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg1NSwweDFELCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgCi0weDU1LDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzUsMHgyOCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg1NiwweEM4LCAweEY3LDB4MDUsIDB4MzUsMHg0NCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgCi0weDU1LDB4MkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDM1LDB4M0MsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4ODcsMHgzNiwgMHgxNCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHg3NiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU1LDB4N0MsIDB4RjcsMHgwNSwgMHg3NiwweDA0LCAweEYwLDB4MDUsIDB4NzYsMHgwNCwgMHhGNiwweDg0LCAweDc2LDB4MDQsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1NSwweEUxLCAweEY3LDB4MDUsIDB4NzUsMHhGOCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjMsMHg4NiwgCi0weDcyLDB4MTgsIDB4QzAsMHgzQSwgMHgzQSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU1LDB4RTEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDgyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg1NSwweEUwLCAweEIzLDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NTYsMHhDOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHg1NiwweDlDLCAweDA1LDB4QjQsIDB4MDAsMHgwOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxNiwgCi0weEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDVFLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhFQywgMHg4NSwweDk2LCAweEZGLDB4RTgsIDB4ODYsMHg5NiwgCi0weEZGLDB4RTQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NTYsMHg4QywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4ODYsMHgzNiwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDU2LDB4NzEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDAwLDB4MTQsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4NTYsMHg4QywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU1LDB4MDgsIDB4RjcsMHgwNSwgMHgzNSwweDJDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NTYsMHhCQywgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjMsMHg4NCwgCi0weDZGLDB4NDQsIDB4RTAsMHgwMCwgMHg1NiwweEMwLCAweEYzLDB4ODUsIDB4MzUsMHgyOCwgMHhGNywweDA1LCAweDM1LDB4MjgsIDB4RTAsMHgwMCwgCi0weDU1LDB4RTQsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDU3LDB4MDEsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4ODIsIDB4MDAsMHgwRCwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDU3LDB4MDgsIDB4QjMsMHhCQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4NTcsMHgwOCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjMsMHg4NSwgMHgzNSwweDI0LCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NDQsIDB4RjMsMHg4NiwgCi0weDMyLDB4RjQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NTcsMHg1MCwgMHhGMywweDg1LCAweDM1LDB4MzAsIDB4RjcsMHgwNCwgCi0weEUwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjgsIDB4MDAsMHgxRiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weDU3LDB4NTEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTQsIDB4ODcsMHgwMiwgCi0weEZGLDB4MzgsIDB4RjMsMHg4NCwgMHgzNSwweDJDLCAweEY3LDB4MDUsIDB4MzUsMHg1NCwgMHg4NywweDFFLCAweDAwLDB4ODAsIDB4RjUsMHgwNCwgCi0weDM1LDB4NEMsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4MkEsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDVBLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjUsMHg4NCwgMHg2RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgCi0weDU3LDB4RDgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDU3LDB4Q0MsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgCi0weDU3LDB4REMsIDB4RjMsMHgwNSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDk0LCAweEMzLDB4MDQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU4LDB4NDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MzYsIDB4MDAsMHg5NCwgMHhGNiwweDg0LCAweDM1LDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDM1LDB4NDgsIDB4NzcsMHhCNCwgCi0weDAwLDB4MEYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweDA3LDB4MzgsIDB4MDAsMHgyNCwgMHhFNiwweDAwLCAweDU4LDB4MzksIDB4QzYsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4NDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg1OCwweDhELCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgCi0weDU4LDB4QTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzUsMHgyOCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg1QSwweDM4LCAweEY3LDB4MDUsIDB4MzUsMHg0NCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgCi0weDU4LDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDM1LDB4M0MsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4ODcsMHgzNiwgMHgxNCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHg3NiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU4LDB4RUMsIDB4RjcsMHgwNSwgMHg3NiwweDA0LCAweEYwLDB4MDUsIDB4NzYsMHgwNCwgMHhGNiwweDg0LCAweDc2LDB4MDQsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1OSwweDUxLCAweEY3LDB4MDUsIDB4NzUsMHhGOCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjMsMHgwNiwgCi0weDcyLDB4MTgsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU5LDB4NTEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg1OSwweDUwLCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NUEsMHgzOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHg1QSwweDBDLCAweDA1LDB4QjQsIDB4MDAsMHgwOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxNiwgCi0weEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDVFLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhFQywgMHg4NSwweDk2LCAweEZGLDB4RTgsIDB4ODYsMHg5NiwgCi0weEZGLDB4RTQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NTksMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4ODYsMHgzNiwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDU5LDB4RTEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDAwLDB4MTQsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4NTksMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDU4LDB4NzgsIDB4RjcsMHgwNSwgMHgzNSwweDJDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NUEsMHgyQywgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjMsMHgwNCwgCi0weDZGLDB4NDQsIDB4RTAsMHgwMCwgMHg1QSwweDMwLCAweEYzLDB4MDUsIDB4MzUsMHgyOCwgMHhGNywweDA1LCAweDM1LDB4MjgsIDB4RTAsMHgwMCwgCi0weDU5LDB4NTQsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDVELDB4QzQsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHg1RCwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweDI5LCAweDAwLDB4MDMsIDB4QzcsMHgxQywgCi0weDcwLDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDA1LDB4MjgsIDB4MDAsMHgwMSwgMHg3NiwweEE5LCAweDAwLDB4MDMsIDB4RjQsMHg4NCwgCi0weDM1LDB4NTQsIDB4RjYsMHgwNCwgMHgzNSwweDUwLCAweDk0LDB4ODIsIDB4RkYsMHgzOCwgMHhBNCwweDFFLCAweDY4LDB4MDIsIDB4QzYsMHgzMCwgCi0weDcwLDB4MDAsIDB4OTQsMHgwMiwgMHhGRiwweDNDLCAweDk2LDB4MDIsIDB4RkYsMHg0MCwgMHhDNiwweDlDLCAweDY4LDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MDIsIDB4RkYsMHg0NCwgMHg4NSwweEI2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weDM1LDB4NDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHhGNywweDA1LCAweDM1LDB4NDAsIDB4ODUsMHhCNiwgCi0weDAwLDB4MDQsIDB4RjUsMHgwNSwgMHgzNSwweDRDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNiwweDA1LCAweDM1LDB4NTAsIDB4ODcsMHgzNiwgCi0weDE0LDB4MTQsIDB4OTQsMHg5NiwgMHhGRiwweEY0LCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHg5NywweDM2LCAweDE0LDB4MTQsIDB4ODcsMHgxRSwgCi0weDAwLDB4ODAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFRSwweDAwLCAweDVFLDB4M0MsIDB4OTQsMHgxNiwgCi0weEZGLDB4RjQsIDB4RjcsMHgwNiwgMHgwQywweDNFLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDVBLDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NUEsMHhFNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNiwgCi0weDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDVFLDB4M0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RkYsMHg4MiwgMHgwMCwweDEwLCAweDg2LDB4ODIsIDB4RkYsMHgzOCwgMHhGNywweDA0LCAweDM1LDB4NTgsIDB4RjUsMHg4NCwgCi0weDZGLDB4NTgsIDB4RjYsMHg4NSwgMHgzNSwweDU0LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgCi0weDVCLDB4NTgsIDB4RjcsMHgwNSwgMHgzNSwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDVCLDB4NEMsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgCi0weDVCLDB4NUMsIDB4RjMsMHgwNSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDk0LCAweEMzLDB4MDQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDVCLDB4QzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MzYsIDB4MDAsMHg5NCwgMHhGNiwweDg0LCAweDM1LDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDM1LDB4NDgsIDB4NzcsMHhCNCwgCi0weDAwLDB4MEYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweDA3LDB4MzgsIDB4MDAsMHgyNCwgMHhFNiwweDAwLCAweDVCLDB4QjksIDB4QzYsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4NDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg1QywweDBELCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgCi0weDVDLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzUsMHgyOCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg1RCwweEI4LCAweEY3LDB4MDUsIDB4MzUsMHg0NCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgCi0weDVDLDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDM1LDB4M0MsIDB4RjcsMHgwNCwgCi0weDM1LDB4M0MsIDB4ODcsMHgzNiwgMHgxNCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHg3NiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgCi0weDVDLDB4NkMsIDB4RjcsMHgwNSwgMHg3NiwweDA0LCAweEYwLDB4MDUsIDB4NzYsMHgwNCwgMHhGNiwweDg0LCAweDc2LDB4MDQsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1QywweEQxLCAweEY3LDB4MDUsIDB4NzUsMHhGOCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjMsMHgwNiwgCi0weDcyLDB4MTgsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDVDLDB4RDEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg1QywweEQwLCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NUQsMHhCOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgCi0weDM1LDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHg1RCwweDhDLCAweDA1LDB4QjQsIDB4MDAsMHgwOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxNiwgCi0weEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDVFLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhFQywgMHg4NSwweDk2LCAweEZGLDB4RTgsIDB4ODYsMHg5NiwgCi0weEZGLDB4RTQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NUQsMHg3QywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4ODYsMHgzNiwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDVELDB4NjEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgCi0weDAwLDB4MTQsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4NUQsMHg3QywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDVCLDB4RjgsIDB4RjcsMHgwNSwgMHgzNSwweDJDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NUQsMHhBQywgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjMsMHgwNCwgCi0weDZGLDB4NDQsIDB4RTAsMHgwMCwgMHg1RCwweEIwLCAweEYzLDB4MDUsIDB4MzUsMHgyOCwgMHhGNywweDA1LCAweDM1LDB4MjgsIDB4RTAsMHgwMCwgCi0weDVDLDB4RDQsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDVELDB4RjEsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwRCwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDVELDB4RjQsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4NUQsMHhGNCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwNSwgCi0weDM1LDB4MjQsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweEY3LDB4MDQsIDB4NkYsMHg0NCwgMHhGMywweDA2LCAweDMyLDB4RjQsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1RSwweDNDLCAweEYzLDB4MDUsIDB4MzUsMHgzMCwgMHhGNywweDA0LCAweEUwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHhCOCwgMHgwMCwweDFGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDVFLDB4M0QsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4MzUsMHgzMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDMyLDB4RjQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNSwweDMwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDMzLDB4ODAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDM1LDB4MzAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzQsMHgwQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM1LDB4MzAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNCwweDk4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDMyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDBGLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHhDNSwweDM4LCAweDAwLDB4MDAsIDB4RUUsMHgwMCwgCi0weDVGLDB4MkMsIDB4QzUsMHhCNCwgMHgwMCwweDAwLCAweDIwLDB4MzYsIDB4MDAsMHgwRiwgMHhFRSwweDAwLCAweDVGLDB4MkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVDLDB4MDAsIDB4NUYsMHgyRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RUMsMHgwMCwgMHg1RiwweDQ4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDMyLCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzIsIDB4MDAsMHgwQywgMHg4NywweDMyLCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgCi0weDVGLDB4NTAsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MkEsIDB4NUEsMHgwMCwgMHg0NCwweDBDLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjYsMHg4NiwgCi0weDM1LDB4NjAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4NDIsMHgzMCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDY2LDB4RjgsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDE3LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LCAweDM1LDB4NjAsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwgCi0weDY5LDB4ODAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgCi0weDM1LDB4NjAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4MiwgMHg2QiwweDUwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MTYsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgzNSwweDYwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODIsIDB4NjEsMHg3OCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MUYsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4MzUsMHg2MCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDYyLDB4N0MsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDIwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LCAweDM1LDB4NjAsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwgCi0weDY2LDB4RjgsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxNywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgCi0weDM1LDB4RUMsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4MiwgMHg2OSwweDgwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MTgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgzNSwweEVDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODIsIDB4NkIsMHg1MCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MTYsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4MzUsMHhFQywgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDYxLDB4NzgsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFGLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LCAweDM1LDB4RUMsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwgCi0weDYyLDB4N0MsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgyMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgCi0weDM1LDB4RUMsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNCwgMHhFMCwweDI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDYxLDB4MTUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgyOCwgMHhFMCwweDAwLCAweDYxLDB4MTgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjcsMHgwMiwgMHgwMCwweEYwLCAweEY3LDB4MDUsIDB4NDIsMHgyOCwgMHhGNywweDA2LCAweDQwLDB4OEEsIDB4RjAsMHgzQiwgCi0weDI4LDB4MDAsIDB4RjcsMHgwNiwgMHg0MCwweDhDLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNSwgCi0weDdBLDB4QzAsIDB4RjcsMHgwNSwgMHg3QSwweEI4LCAweEY3LDB4MDUsIDB4N0EsMHhCMCwgMHhGNywweDA1LCAweDdBLDB4QzgsIDB4RjYsMHg4MiwgCi0weEMzLDB4NTAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODIsIDB4MDAsMHgxNiwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgCi0weDQyLDB4MzAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjYsMHgwNCwgCi0weDZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDYxLDB4RUQsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDA3LCAweEU2LDB4MDAsIDB4NjEsMHhFQywgMHgwNiwweEIwLCAweDAwLDB4MDIsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4NjEsMHhFQywgMHhGNSwweDA2LCAweDM1LDB4RUMsIDB4RjcsMHgwNCwgCi0weDQyLDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NTIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2MiwweDExLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDQyLDB4QTAsIDB4RjYsMHgwNiwgCi0weDQyLDB4QTIsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4NjIsMHg2OCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4RTAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDgsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2MiwweDNDLCAweEY2LDB4ODUsIDB4RTAsMHgwNCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDYyLDB4NDAsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDYyLDB4NjUsIDB4RjYsMHgwNiwgMHg0MiwweEEyLCAweEY3LDB4MDQsIDB4NDIsMHhBMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4RjAsMHgwNSwgMHg0MiwweDI4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg0MiwweDNDLCAweEY2LDB4ODQsIDB4NkYsMHgzNCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2MiwweEIxLCAweEY3LDB4MDUsIDB4NDIsMHgzQywgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4RjUsMHg5RSwgCi0weDAwLDB4MDIsIDB4QzAsMHgzQSwgMHg1QSwweDAwLCAweEU2LDB4MDAsIDB4NjIsMHhCRCwgMHhGNSwweDg2LCAweDM1LDB4RUMsIDB4RjcsMHgwNCwgCi0weDQyLDB4QTAsIDB4RTAsMHgwMCwgMHg2MiwweERDLCAweEY2LDB4MDYsIDB4NDIsMHhBMiwgMHhGNywweDA0LCAweDQyLDB4MzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg1QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDYyLDB4RjksIDB4RjYsMHgwNiwgMHg0MiwweEE0LCAweEY3LDB4MDQsIDB4NDIsMHhBNCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgCi0weDYzLDB4MEMsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDYzLDB4MjAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYwLDB4MDUsIDB4NDIsMHgyOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgyMCwgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgxQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDYzLDB4NkMsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDgzLDB4OUEsIDB4MDAsMHgxQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjMsMHg4NSwgCi0weDdBLDB4QzAsIDB4ODQsMHg5QSwgMHgwMCwweDE0LCAweEY3LDB4MDUsIDB4N0EsMHhDOCwgMHhGNCwweDg1LCAweDdBLDB4QjAsIDB4RjcsMHgwNSwgCi0weDdBLDB4QjgsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDlBLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgCi0weDdBLDB4QjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDYzLDB4RDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5QSwgMHgwMCwweDFDLCAweEY3LDB4MDQsIDB4N0EsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2MywweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDlBLCAweDAwLDB4MTgsIDB4RjcsMHgwNCwgCi0weDdBLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDYzLDB4RDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODYsMHg5QSwgMHgwMCwweDIwLCAweEY3LDB4MDQsIDB4N0EsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDY0LCAweEVFLDB4MDAsIDB4NjMsMHhEOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NjQsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODMsMHg5NiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MUUsIDB4MDAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NCwweDNDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA1LCAweDQwLDB4ODAsIDB4RjcsMHgwNSwgCi0weDQwLDB4ODQsIDB4RjYsMHg4NCwgMHg2RSwweDUwLCAweEY0LDB4ODIsIDB4RkYsMHhGRiwgMHg4MywweDFFLCAweDAwLDB4MEMsIDB4RjQsMHg4NSwgCi0weDRGLDB4NTQsIDB4OTMsMHgzNiwgMHgwMCwweDEwLCAweDgzLDB4OUUsIDB4MDAsMHgxMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4OTMsMHhCNiwgCi0weDAwLDB4MTQsIDB4ODQsMHhBNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDFELDB4REMsIDB4RjYsMHg4MiwgCi0weDAwLDB4NjQsIDB4RjYsMHg4NSwgMHg0QSwweDk4LCAweEY3LDB4MDUsIDB4NEEsMHg5QywgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgxQSwgMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RUUsMHgwMCwgCi0weDY0LDB4N0MsIDB4RjMsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDIsMHhBNCwgMHhGNiwweDA2LCAweDQyLDB4QTYsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHg2NiwweEU0LCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg5MywweDk2LCAweEZGLDB4RjQsIDB4ODQsMHgxNiwgCi0weDAwLDB4MDAsIDB4RjQsMHg4NiwgMHg0MiwweEM4LCAweDk0LDB4OTYsIDB4RkYsMHhFQywgMHhGMywweDAyLCAweDAwLDB4MEMsIDB4OTMsMHgxNiwgCi0weEZGLDB4RTQsIDB4ODMsMHg5NiwgMHgwMCwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHhGNCwgMHg4NywweDFFLCAweDAwLDB4MjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyNiwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4NjYsMHg0OCwgMHhGMywweDg2LCAweDRBLDB4OTgsIDB4ODQsMHhBMiwgCi0weDAwLDB4MjQsIDB4ODMsMHgxNiwgMHhGRiwweEU0LCAweEM1LDB4MDQsIDB4MDAsMHgwMCwgMHhCNCwweDlBLCAweDM4LDB4MDIsIDB4QzcsMHgxOCwgCi0weDM4LDB4MDAsIDB4ODMsMHgyMiwgMHgwMCwweDI4LCAweDgzLDB4OTYsIDB4RkYsMHhGNCwgMHg4NCwweDk2LCAweEZGLDB4RTQsIDB4OTMsMHgzQSwgCi0weDAwLDB4MDQsIDB4OTMsMHhCQSwgMHgwMCwweDA4LCAweEY2LDB4MDQsIDB4RTAsMHgwMCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4QTYsMHhBNiwgCi0weDMwLDB4MDIsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzIsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDY1LDB4MTAsIDB4QzYsMHgzOCwgCi0weDAwLDB4MDAsIDB4RjYsMHg4NCwgMHhFMCwweDA0LCAweDg3LDB4MzIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDE0LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDIxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgCi0weEUwLDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weDY1LDB4NUMsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDY1LDB4NjQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjYsMHg4NCwgMHhFMCwweDA0LCAweDg3LDB4MzIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHg2NSwweDY1LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDc1LCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4MywweDk2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjMsMHg4NSwgMHg0RiwweDU0LCAweDg3LDB4MjIsIDB4MDAsMHgyQywgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDUsMHhBMCwgMHgwMCwweDJFLCAweDc2LDB4MkQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweERDLCAweDgzLDB4MTYsIDB4RkYsMHhFQywgMHgyMCwweDI2LCAweDAwLDB4MDcsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsIDB4MjgsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4MDYsMHg5OCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhFMiwweDAwLCAweDY2LDB4MUMsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg1LDB4OTYsIDB4RkYsMHhEQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyQywgCi0weDQwLDB4MDAsIDB4ODYsMHhCQSwgMHgwMCwweDMwLCAweDA2LDB4MjgsIDB4MDAsMHgwNCwgMHgwNSwweDI4LCAweDAwLDB4MDIsIDB4MDUsMHhBQywgCi0weDAwLDB4MDIsIDB4ODMsMHg5NiwgMHhGRiwweERDLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4MDMsMHg5QywgCi0weDAwLDB4MDEsIDB4OTMsMHg5NiwgMHhGRiwweERDLCAweDIwLDB4MUUsIDB4MDAsMHgwNywgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNCwgCi0weEZGLDB4RjAsIDB4RTIsMHgwMCwgMHg2NSwweEUxLCAweEY2LDB4QjMsIDB4MjgsMHgwMCwgMHgwNCwweDIwLCAweDAwLDB4MUMsIDB4ODQsMHg5NiwgCi0weEZGLDB4RUMsIDB4ODMsMHgxNiwgMHhGRiwweEU0LCAweDgzLDB4OTYsIDB4RkYsMHhGNCwgMHgwNCwweEE0LCAweDAwLDB4MTQsIDB4OTQsMHg5NiwgCi0weEZGLDB4RUMsIDB4MDMsMHgxOCwgMHgwMCwweDBDLCAweDkzLDB4MTYsIDB4RkYsMHhFNCwgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgCi0weDY0LDB4OTQsIDB4OTMsMHg5NiwgMHhGRiwweEY0LCAweDg0LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgyNiwgCi0weDAwLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NEEsMHg5QywgMHg4NSwweEE2LCAweDAwLDB4MjAsIDB4RjcsMHgwNCwgCi0weDdBLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDdBLDB4QjgsIDB4RjcsMHgwNCwgCi0weDdBLDB4QjgsIDB4RjYsMHg4NCwgMHg3QSwweEM4LCAweDg2LDB4MjYsIDB4MDAsMHgxOCwgMHhDNiwweEI0LCAweDU4LDB4MDAsIDB4ODcsMHgyNiwgCi0weDAwLDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDI3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDMyLCAweDcyLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NjYsMHhFNSwgMHhGNiwweDg1LCAweDdBLDB4QzgsIDB4ODMsMHgyNiwgCi0weDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg2RSwweDUwLCAweEYzLDB4MDUsIDB4M0IsMHg2NCwgMHg4MywweEE2LCAweDAwLDB4MDgsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDAsIDB4OTMsMHhCQSwgMHgxRCwweERDLCAweDg0LDB4QTYsIDB4MDAsMHgwQywgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4OTQsMHhCQSwgCi0weDAwLDB4MTAsIDB4ODMsMHgxQSwgMHgwMCwweDEwLCAweEY2LDB4ODUsIDB4N0EsMHhDOCwgMHg5MywweDNBLCAweDAwLDB4MTQsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MCwweDg0LCAweEY2LDB4ODUsIDB4N0EsMHhDMCwgMHhGNiwweDg1LCAweDdBLDB4QjgsIDB4RjYsMHg4NSwgCi0weDdBLDB4QjAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MDgsIDB4RjMsMHg4NCwgMHg2RiwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDFFLCAweDAwLDB4MTgsIDB4RjYsMHg4NCwgCi0weEUwLDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLCAweDY3LDB4MjksIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4RTgsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDFDLCAweDg2LDB4OUUsIDB4MDAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4RTksIDB4QzUsMHg4NCwgCi0weDAwLDB4MDAsIDB4ODYsMHg5RSwgMHgwMCwweDEwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2NywweDg4LCAweDA1LDB4MUMsIDB4MDAsMHgxMCwgMHg4NiwweDlFLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4OEMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4OTksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4QUEsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweEUwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4NjcsMHhENCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2NywweERDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDY3LDB4REQsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4RUQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY4LDB4MTAsIDB4RjYsMHgwNiwgCi0weDQyLDB4OUMsIDB4RjcsMHgwNCwgMHg0MiwweDlDLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjQsIDB4NzUsMHhBQywgMHhGRiwweEUxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY4LDB4NDUsIDB4OTUsMHg5NiwgCi0weEZGLDB4RjQsIDB4RjcsMHgwNCwgMHg0MiwweDk4LCAweEY2LDB4MDYsIDB4NDIsMHg5OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDIwLCAweDA0LDB4MUMsIDB4MDAsMHgyMCwgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDgsIDB4RUUsMHgwMCwgCi0weDY4LDB4QzQsIDB4RjMsMHgwNiwgMHgxNSwweDU0LCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHgwNSwweDlDLCAweDAwLDB4MjIsIDB4QzQsMHhBQywgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MjIsIDB4MDAsMHgwMCwgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDMCwweDJBLCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgCi0weDY4LDB4QzAsIDB4QzYsMHhBNCwgMHg2MCwweDAwLCAweEE3LDB4MjYsIDB4NjAsMHgwMiwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RTgsIDB4RjcsMHgyRiwgCi0weDY4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4NjgsMHg3OCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4RjMsMHgwNiwgCi0weDE1LDB4NTQsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4RTAsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNCwgMHhFMCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgCi0weEUwLDB4MDAsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUUsMHg2NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2OSwweDI4LCAweEY2LDB4MDYsIDB4NDIsMHg5RSwgMHhGNywweDA0LCAweDQyLDB4OUMsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2OSwweDZDLCAweEYzLDB4MDYsIDB4MzUsMHhFQywgMHhGNywweDA0LCAweDQyLDB4MzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDY5LDB4NkQsIDB4RjAsMHgwNSwgMHg0MiwweDI4LCAweEYzLDB4MDYsIDB4MzUsMHg2MCwgMHhGMywweDA1LCAweDQyLDB4MzAsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwNCwgMHhGNSwweDA0LCAweDZGLDB4MzQsIDB4RjcsMHgwNCwgCi0weDQyLDB4NDAsIDB4ODYsMHgyQSwgMHgwMCwweDE4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweEUwLDB4MUMsIDB4RjcsMHgwNSwgCi0weDQyLDB4NDAsIDB4QzAsMHgzNiwgMHg2MiwweDAwLCAweEVDLDB4MDAsIDB4NjksMHhCNSwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkEsMHg4MCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weEUwLDB4MUMsIDB4ODYsMHhBQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkEsMHg3RCwgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODYsMHhBQSwgCi0weDAwLDB4MTAsIDB4RjcsMHgwNCwgMHhFMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZBLDB4MTQsIDB4MDQsMHhBOCwgMHgwMCwweDEwLCAweDg2LDB4QUEsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NkEsMHgxOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkEsMHgyNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDAsIDB4ODYsMHhBNiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHg2QSwweDYwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZBLDB4NjgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg2LDB4QTYsIDB4MDAsMHgwNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4NkEsMHg2OSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkEsMHg4MSwgMHhDNywweDJDLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHg2QSwweDgwLCAweEM3LDB4MkMsIDB4MDAsMHgwMCwgMHhDNywweDA0LCAweDAwLDB4MDAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RUUsMHgwMCwgMHg2QiwweDNELCAweEY2LDB4ODYsIDB4NDAsMHg4QSwgMHhGNywweDA0LCAweDQwLDB4ODgsIDB4NzYsMHhCNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QiwweDNDLCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNiwweDg1LCAweDQwLDB4ODAsIDB4RjYsMHg4NSwgCi0weDQwLDB4ODQsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LCAweEUwLDB4MUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4ODYsIDB4RTAsMHgwMCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDAyLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhFRSwweDY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDA1LCAweDQwLDB4ODQsIDB4ODYsMHg5NiwgCi0weEZGLDB4RjQsIDB4RjcsMHgwNCwgMHg2RSwweDUwLCAweEYzLDB4ODYsIDB4MzUsMHhFQywgMHhGNiwweDg1LCAweDQwLDB4OTAsIDB4RjYsMHg4NSwgCi0weDQwLDB4OTQsIDB4ODcsMHgzQSwgMHgxRCwweERDLCAweEY2LDB4ODUsIDB4NDIsMHgyOCwgMHhGNywweDA1LCAweDNCLDB4NjQsIDB4RjcsMHgwNCwgCi0weDQyLDB4MzAsIDB4RjQsMHgwNSwgMHg0MCwweDgwLCAweEMwLDB4M0EsIDB4M0EsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QiwweDNELCAweEYzLDB4ODYsIDB4MzUsMHg2MCwgMHhGMywweDg1LCAweDQyLDB4MzAsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY0LDB4ODYsIDB4NDIsMHgzMCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZELDB4RDksIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDAsMHg4QywgMHhGNiwweDA2LCAweDQwLDB4OEMsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4RjYsMHg4NCwgMHg0MiwweDI4LCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZCLDB4QzgsIDB4RjYsMHg4NSwgCi0weDQyLDB4MjgsIDB4RjcsMHgwNCwgMHg0MCwweDg4LCAweEY2LDB4ODYsIDB4NDAsMHg4QSwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZELDB4MEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDAsMHg4QywgMHhGNiwweDg2LCAweDQwLDB4OEMsIDB4NzYsMHhCNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QywweDM1LCAweEY2LDB4MDYsIDB4NDAsMHg4QSwgMHhGNywweDA0LCAweDQwLDB4ODgsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QywweDM0LCAweEY0LDB4ODYsIDB4MzYsMHg3OCwgMHhGNywweDA0LCAweDQyLDB4NDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZDLDB4MzUsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweEY0LDB4QjMsIDB4MjgsMHgwMCwgMHhFMCwweDAwLCAweDZELDB4MTAsIDB4RjAsMHgwNSwgCi0weDQyLDB4MkMsIDB4RjcsMHgwNCwgMHg0MCwweDhDLCAweEY1LDB4MDYsIDB4NDAsMHg4QywgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZDLDB4QzEsIDB4RjYsMHgwNiwgMHg0MCwweDhBLCAweEY3LDB4MDQsIDB4NDAsMHg4OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZDLDB4QzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHgyQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDA5LCAweEVFLDB4MDAsIDB4NkQsMHgxMSwgMHhGNywweDA1LCAweDQyLDB4MkMsIDB4RjAsMHgyQiwgCi0weDI4LDB4MDAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4OTQsIDB4RjYsMHgwNiwgCi0weDQyLDB4OTQsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4NkQsMHgxMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgCi0weDQwLDB4OEMsIDB4RjYsMHg4NiwgMHg0MCwweDhDLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZELDB4MTQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg0MCwweDg4LCAweEY2LDB4MDYsIDB4NDAsMHg4QSwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZELDB4MTUsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEYwLDB4MzMsIDB4MjgsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2RCwweEI1LCAweEY0LDB4ODYsIDB4MzUsMHhFQywgMHhGNywweDA0LCAweDQyLDB4MzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDZELDB4NTksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2RCwweDc5LCAweEY2LDB4ODIsIDB4MDAsMHgzQywgMHhGNiwweDg0LCAweEUwLDB4MjgsIDB4RTAsMHgwMCwgCi0weDZELDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2RCwweDc5LCAweEY2LDB4ODIsIDB4MDAsMHhGMCwgMHhGNywweDA0LCAweEUwLDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAyLCAweEY3LDB4MDQsIDB4NDIsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDZBLDB4MDAsIDB4RUMsMHgwMCwgMHg2RCwweEI1LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjAsMHgwNSwgCi0weDQyLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MTksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NkQsMHhCNCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjQsMHg4MiwgMHhDMywweDUwLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDgyLCAweDAwLDB4MTYsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4RjQsMHg4NiwgMHg0MiwweDMwLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDFFLDB4QzAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDA0LCAweEY1LDB4ODYsIDB4MzYsMHg3OCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgCi0weDQyLDB4NDQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4MiwgMHg3NCwweDE4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDAwLDB4MTksIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzNiwweDc4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4NzQsMHhBQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MUQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzcsMHgwNCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDc4LDB4MDAsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFCLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM3LDB4MDQsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwgCi0weDc4LDB4RkMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxQSwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgCi0weDM3LDB4OTAsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4MiwgMHg4MCwweEQ4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUIsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzNywweDkwLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4ODEsMHg3NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MUQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzgsMHgxQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDg3LDB4NzQsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFCLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM4LDB4MUMsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwgCi0weDk0LDB4RjgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxQiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgCi0weDM5LDB4MzQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4MiwgMHg4QSwweDAwLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzOSwweDM0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4OEUsMHgwOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MUEsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzksMHgzNCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDk2LDB4OUMsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFFLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM4LDB4QTgsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwgCi0weDlCLDB4MkMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxQiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgCi0weDM4LDB4QTgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4MiwgMHhBMiwweERDLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUUsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzQSwweEQ4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4OUUsMHg1NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MUIsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4M0EsMHhEOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweEEzLDB4QzAsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM5LDB4QzAsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwgCi0weEE3LDB4NjQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxRSwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgCi0weDM5LDB4QzAsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4MiwgMHhBQSwweDA0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUIsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzOSwweEMwLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4QUUsMHhGOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4M0EsMHg0QywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDQyLDB4NTAsIDB4RjAsMHgzQiwgCi0weDI4LDB4MDAsIDB4RjcsMHgwNiwgMHg0MCwweDg4LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4RjYsMHgwNSwgCi0weDQwLDB4ODAsIDB4RjYsMHgwNSwgMHg0MCwweDg0LCAweEY3LDB4MDYsIDB4M0IsMHg3MCwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwgCi0weDNCLDB4NzIsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4Q0EsMHgyMCwgMHhGNSwweDg1LCAweDNCLDB4NzQsIDB4RjcsMHgwNiwgCi0weDNCLDB4NzgsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEY3LDB4MDYsIDB4M0IsMHg3QSwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgCi0weEIxLDB4OTQsIDB4RjUsMHg4NSwgMHgzQiwweDdDLCAweEY3LDB4MDYsIDB4M0IsMHg4MCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwgCi0weDNCLDB4ODIsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4QzcsMHg1NCwgMHhGNSwweDg1LCAweDNCLDB4ODQsIDB4RjcsMHgwNiwgCi0weDNCLDB4ODgsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEY3LDB4MDYsIDB4M0IsMHg4QSwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgCi0weEJFLDB4RjgsIDB4RjUsMHg4NSwgMHgzQiwweDhDLCAweEY3LDB4MDYsIDB4M0IsMHg5MCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwgCi0weDNCLDB4OTIsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4QzgsMHhGOCwgMHhGNSwweDg1LCAweDNCLDB4OTQsIDB4RjcsMHgwNiwgCi0weDNCLDB4OTgsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEY3LDB4MDYsIDB4M0IsMHg5QSwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgCi0weEM1LDB4RDgsIDB4RjUsMHg4NSwgMHgzQiwweDlDLCAweEY3LDB4MDYsIDB4M0IsMHhBMCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwgCi0weDNCLDB4QTIsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4QzcsMHg3MCwgMHhGNSwweDg1LCAweDNCLDB4QTQsIDB4RjcsMHgwNiwgCi0weDNCLDB4QTgsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEY3LDB4MDYsIDB4M0IsMHhBQSwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgCi0weEMxLDB4QjQsIDB4RjUsMHg4NSwgMHgzQiwweEFDLCAweDk2LDB4MTYsIDB4RkYsMHhGNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQ1LDB4NDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODQsIDB4NkUsMHg1MCwgMHg4NiwweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTYsMHgzNiwgMHgxRCwweERDLCAweEY2LDB4MDUsIDB4M0IsMHg2NCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgzMCwgMHgyNSwweDk0LCAweDAwLDB4MjAsIDB4RjAsMHgyRiwgCi0weDI4LDB4MDAsIDB4MjYsMHgxNCwgMHgwMCwweDM4LCAweEYwLDB4MzMsIDB4MjgsMHgwMCwgMHg5MCwweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTAsIDB4RjYsMHg4NiwgMHg0MiwweDUwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjUsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg3MiwweDFELCAweEY1LDB4MDIsIDB4MTcsMHg3MCwgMHhGNywweDA0LCAweDQyLDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg1NCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwMiwgCi0weDAwLDB4MUIsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NDIsMHg0NCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRSwweEMwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsIDB4RTAsMHgwNCwgMHg4NiwweDE2LCAweDAwLDB4MDAsIDB4RjYsMHg4MiwgCi0weDAwLDB4RkYsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4NkMsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwgCi0weEUwLDB4MDYsIDB4ODcsMHgzQSwgMHgwMCwweDAwLCAweDA2LDB4QjAsIDB4MDAsMHgwMiwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgCi0weDNCLDB4NjQsIDB4MDcsMHgzMCwgMHgwMCwweDA0LCAweEY2LDB4QkIsIDB4MjgsMHgwMCwgMHg4NywweDAyLCAweEZGLDB4MzQsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDYsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDMwLCAweDI2LDB4MTQsIDB4MDAsMHgyMCwgMHhGMCwweDMzLCAweDI4LDB4MDAsIDB4MjcsMHgxNCwgCi0weDAwLDB4MzgsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5MCwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTAsIDB4RjYsMHg4NiwgMHg0MiwweDUwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGMywweDM4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDczLDB4MTksIDB4RjUsMHg4MiwgMHgxNywweDcwLCAweEY3LDB4MDQsIDB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDAwLDB4MUIsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4NiwgMHg0MiwweDQ0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDFFLDB4QzAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDQwLCAweDI2LDB4MTQsIDB4MDAsMHgyMCwgMHg5NiwweDE2LCAweEZGLDB4QzQsIDB4RjAsMHgzMywgCi0weDI4LDB4MDAsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgyNiwweDE0LCAweDAwLDB4MzgsIDB4OTYsMHgxNiwgCi0weEZGLDB4QkMsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNiwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4ODYsMHgxNiwgMHhGRiwweEJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEY1LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDczLDB4RTUsIDB4RjYsMHgwMiwgCi0weDE3LDB4NzAsIDB4RjcsMHgwNCwgMHg0MiwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDQyLDB4NTQsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweEY2LDB4MDIsIDB4MDAsMHgxQiwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4RjYsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MDQsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEY1LDB4ODUsIDB4NDAsMHg4MCwgMHg5NSwweDk2LCAweEZGLDB4RjQsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweDUwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RjQsIDB4RjUsMHgwMiwgCi0weDAwLDB4NjQsIDB4RjUsMHgwNSwgMHgzQiwweEI0LCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNCwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhBNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEY2LDB4MDQsIDB4NEYsMHg1QywgMHhGNCwweDAyLCAweDAwLDB4MDYsIDB4RjQsMHgwNSwgCi0weDQyLDB4NTQsIDB4RjUsMHg4NSwgMHgzQiwweDZDLCAweEY1LDB4ODUsIDB4M0IsMHhCOCwgMHg5NSwweDMyLCAweDAwLDB4MDAsIDB4OTUsMHhCMiwgCi0weDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzEsMHhCMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjQsMHgwNiwgCi0weDM3LDB4MDQsIDB4RjQsMHgwNSwgMHg0MiwweDQ0LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDUwLCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNiwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEY2LDB4MDQsIDB4NkYsMHgzNCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4ODYsMHhCMiwgCi0weDAwLDB4MEMsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDc3LDB4RUMsIDB4QzUsMHgwNCwgCi0weDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDEwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGMywweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg3NSwweDE4LCAweDA0LDB4QjAsIDB4MDAsMHgxMCwgMHg4NiwweEIyLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDc1LDB4MUMsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDc1LDB4MjksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjUsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4QTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweEUwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4NzUsMHg2NCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg3NSwweDZDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEE2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDc1LDB4NkQsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDc1LDB4N0QsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDc3LDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0IsMHhDQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjYsMHgxNCwgCi0weDAwLDB4MjAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweDA0LDB4QTAsIDB4MDAsMHgwMiwgMHhGMCwweDI3LCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDIyLCAweEY1LDB4OUYsIDB4MjgsMHgwMCwgMHgwMywweEEwLCAweDAwLDB4MUEsIDB4OTMsMHg5NiwgCi0weEZGLDB4RDQsIDB4MjUsMHg5NCwgMHgwMCwweDIyLCAweDg1LDB4QUUsIDB4MDAsMHgwMCwgMHg3NywweEFELCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzUsMHhBQywgMHg3RiwweEMwLCAweDc1LDB4QUQsIDB4RkYsMHhGMCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4MDYsMHhBNCwgMHgwMCwweDAyLCAweDIzLDB4MTQsIDB4MDAsMHgxRSwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4RjUsMHg5RiwgCi0weDI4LDB4MDAsIDB4RjMsMHg4NCwgMHhFMCwweDAwLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5MywweEEyLCAweDAwLDB4MUMsIDB4RjUsMHg4NCwgCi0weEUwLDB4MDQsIDB4NzMsMHg5OSwgMHgwMCwweDFFLCAweDczLDB4OUMsIDB4RkYsMHhFNSwgMHg5MywweDk2LCAweEZGLDB4QUMsIDB4NzMsMHg5NSwgCi0weDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhDQywgMHgyMywweDk0LCAweDAwLDB4NDIsIDB4OTUsMHhBMiwgCi0weDAwLDB4MjAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweDc1LDB4OTUsIDB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4OTUsMHg5NiwgCi0weEZGLDB4QjQsIDB4NzUsMHg5NSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHg5NSwweDk2LCAweEZGLDB4QzQsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHhGNCwweDg0LCAweDRGLDB4NTgsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4QzQsMHhBMCwgMHg0QSwweDAwLCAweDc0LDB4QTQsIDB4RkYsMHhGQSwgMHhDNSwweEE0LCAweDAwLDB4MDAsIDB4RjUsMHg5RiwgCi0weDI4LDB4MDAsIDB4ODMsMHg5NiwgMHhGRiwweEFDLCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4ODUsMHg5NiwgMHhGRiwweEI0LCAweEM3LDB4MzgsIDB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHg4MywweDk2LCAweEZGLDB4Q0MsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU4LCAweDIzLDB4MTQsIDB4MDAsMHgxNiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgyMywweDE0LCAweDAwLDB4MTIsIDB4NzYsMHgxOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NSwweDk2LCAweEZGLDB4QzQsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDIsIDB4RjMsMHhBMywgMHgyOCwweDAwLCAweDA0LDB4MjAsIDB4MDAsMHgxOCwgMHgyNSwweDk0LCAweDAwLDB4MjIsIDB4ODUsMHhBRSwgCi0weDAwLDB4MDAsIDB4NzcsMHhBRCwgMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNSwweEFDLCAweDdGLDB4QzAsIDB4NzUsMHhBRCwgCi0weEZGLDB4RjAsIDB4ODMsMHg5NiwgMHhGRiwweEQ0LCAweEY1LDB4QTMsIDB4MjgsMHgwMCwgMHhGNCwweDlGLCAweDI4LDB4MDAsIDB4MjUsMHg5NCwgCi0weDAwLDB4NDIsIDB4ODUsMHhBRSwgMHgwMCwweDAwLCAweDc3LDB4QUQsIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzUsMHhBQywgCi0weDdGLDB4QzAsIDB4NzUsMHhBRCwgMHhGRiwweEYwLCAweDQ0LDB4QUQsIDB4MDAsMHgwMCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4NiwgCi0weEUwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjMsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweEQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMCwweDA1LCAweDQwLDB4ODQsIDB4RjcsMHg4NiwgCi0weEUwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQ1LDB4QTAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNCwgMHg2RSwweDUwLCAweEY0LDB4MDUsIDB4NDAsMHg4NCwgMHg4NywweDNBLCAweDFELDB4REMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzQiwweDY0LCAweEY1LDB4ODYsIDB4MzYsMHg3OCwgMHhGNSwweDg1LCAweDQyLDB4NDQsIDB4RjMsMHg4NiwgCi0weDM1LDB4NjAsIDB4RjMsMHg4NSwgMHg0MiwweDMwLCAweEY1LDB4ODYsIDB4NDIsMHg0NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRiwweDQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY1LDB4ODYsIDB4NDIsMHg0NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDc4LDB4ODksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RUUsMHgwMCwgMHg3OCwweDUxLCAweEY2LDB4MDYsIDB4NDIsMHg1MCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDcxLDB4QjAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4NzgsMHg4OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGNSwweDgyLCAweDAwLDB4MDYsIDB4RjUsMHg4NSwgCi0weDQyLDB4NTQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzIsMHhBQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgCi0weDM3LDB4OTAsIDB4RjUsMHg4NSwgMHg0MiwweDQ0LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjYsMHgwNiwgMHgzNiwweDc4LCAweEY2LDB4MDUsIDB4NDIsMHg0NCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNSwgCi0weDQwLDB4ODAsIDB4RjcsMHgwNSwgMHg0MCwweDk0LCAweEY2LDB4ODQsIDB4NkUsMHg1MCwgMHhGNywweDA1LCAweDQwLDB4OTAsIDB4OTcsMHgzNiwgCi0weDFELDB4REMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MCwweDgwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweEE4LCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNSwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4RjQsMHg4NCwgMHg2RiwweDM0LCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4QzQsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4ODYsMHhBNiwgMHgwMCwweDBDLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDc5LDB4NTUsIDB4RjYsMHgwNiwgMHg0MiwweDlBLCAweEY3LDB4MDQsIDB4NDIsMHg5OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0MiwweDUwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4ODUsMHgxNiwgCi0weEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDg2LDB4QUEsIDB4MDAsMHgwQywgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg4MCwweEE4LCAweEY2LDB4MDYsIDB4NDIsMHg5QSwgMHg4NywweDJBLCAweDAwLDB4MTAsIDB4ODYsMHgyQSwgCi0weDAwLDB4MUMsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NzksMHhBOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4ODcsMHgyQSwgCi0weDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDc5LDB4QUMsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDdBLDB4MDUsIDB4MjQsMHg5NCwgCi0weDAwLDB4MjAsIDB4OTQsMHg5NiwgMHhGRiwweEJDLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHhGMCwweDI3LCAweDI4LDB4MDAsIDB4MDUsMHgyOCwgCi0weDAwLDB4MTAsIDB4OTUsMHgxNiwgMHhGRiwweEI0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDcyLDB4NTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHhCNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGOSwweDM0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDgwLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODAsMHg2QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyNSwweDk0LCAweDAwLDB4MjAsIDB4RjAsMHgyRiwgCi0weDI4LDB4MDAsIDB4MDQsMHhBMCwgMHgwMCwweDAyLCAweDk0LDB4OTYsIDB4RkYsMHg1QywgMHhGMCwweDI3LCAweDI4LDB4MDAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDVBLCAweEY0LDB4QUIsIDB4MjgsMHgwMCwgMHgwNywweDIwLCAweDAwLDB4MUEsIDB4MjUsMHgxNCwgCi0weDAwLDB4NUEsIDB4ODUsMHgyQSwgMHgwMCwweDAwLCAweDc3LDB4QTksIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzUsMHgyOCwgCi0weDdGLDB4QzAsIDB4NzUsMHgyOSwgMHhGRiwweEYwLCAweDc1LDB4QUQsIDB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4MjMsMHgxNCwgCi0weDAwLDB4MUUsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweEY1LDB4M0IsIDB4MjgsMHgwMCwgMHhGNCwweDg0LCAweEUwLDB4MDAsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4OTQsMHhBMiwgMHgwMCwweDFDLCAweEY1LDB4MDQsIDB4RTAsMHgwNCwgMHg4NCwweDk2LCAweEZGLDB4NUMsIDB4OTUsMHgyMiwgCi0weDAwLDB4MjAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweDA2LDB4QTQsIDB4MDAsMHgwMiwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4OTUsMHgxNiwgMHhGRiwweDU0LCAweDc0LDB4OTUsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4OTQsMHg5NiwgCi0weEZGLDB4OUMsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5NSwweDE2LCAweEZGLDB4OTQsIDB4NzQsMHg5NSwgCi0weDAwLDB4MUUsIDB4ODUsMHgxNiwgMHhGRiwweDVDLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4OEMsIDB4ODQsMHg5NiwgCi0weEZGLDB4NTQsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweDlDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHgyMywweDE0LCAweDAwLDB4MUEsIDB4NzYsMHgxOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NCwweDk2LCAweEZGLDB4OTQsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTgsIDB4MjMsMHgxNCwgMHgwMCwweDE2LCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDIzLDB4MTQsIDB4MDAsMHgxMiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg1LDB4MTYsIDB4RkYsMHg4QywgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4MDIsIDB4RjQsMHhBMywgCi0weDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDVBLCAweDg1LDB4MkEsIDB4MDAsMHgwMCwgMHg3NywweEE5LCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzUsMHgyOCwgMHg3RiwweEMwLCAweDc1LDB4MjksIDB4RkYsMHhGMCwgMHgwNywweDIwLCAweDAwLDB4MTgsIDB4RjUsMHgzQiwgCi0weDI4LDB4MDAsIDB4OTQsMHgxNiwgMHhGRiwweEFDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjYsMHgxNCwgMHgwMCwweDM4LCAweDI0LDB4OTQsIDB4MDAsMHg1QSwgMHg4NCwweEE2LCAweDAwLDB4MDAsIDB4NzcsMHhBNSwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEM0LDB4QTQsIDB4N0YsMHhDMCwgMHg3NCwweEE1LCAweEZGLDB4RjAsIDB4MDUsMHhBMCwgCi0weDAwLDB4MDIsIDB4MDYsMHhBQywgMHgwMCwweDAyLCAweDIzLDB4OTQsIDB4MDAsMHgzNiwgMHg3NSwweDFELCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4MDcsMHgyMCwgMHgwMCwweDFBLCAweEY0LDB4QjMsIDB4MjgsMHgwMCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4OTUsMHgxNiwgMHhGRiwweDU0LCAweDc0LDB4OTUsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4OTQsMHg5NiwgCi0weEZGLDB4NUMsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5NSwweDE2LCAweEZGLDB4N0MsIDB4NzQsMHg5NSwgCi0weDAwLDB4MUUsIDB4ODUsMHgxNiwgMHhGRiwweEM0LCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4NzQsIDB4ODUsMHgyQSwgCi0weDAwLDB4MzQsIDB4MjQsMHg5NCwgMHgwMCwweDVBLCAweDk1LDB4MTYsIDB4RkYsMHg4NCwgMHg4NCwweEE2LCAweDAwLDB4MDAsIDB4NzcsMHhBNSwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEM0LDB4QTQsIDB4N0YsMHhDMCwgMHg3NCwweEE1LCAweEZGLDB4RjAsIDB4MjUsMHgxNCwgCi0weDAwLDB4NUEsIDB4RjQsMHhBRiwgMHgyOCwweDAwLCAweDg1LDB4MkEsIDB4MDAsMHgwMCwgMHg3NywweEE5LCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzUsMHgyOCwgMHg3RiwweEMwLCAweDc1LDB4MjksIDB4RkYsMHhGMCwgMHg4NCwweDk2LCAweEZGLDB4QzQsIDB4RjUsMHgzQiwgCi0weDI4LDB4MDAsIDB4ODQsMHhBNiwgMHgwMCwweDEwLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHg5NCwweEEyLCAweDAwLDB4MUMsIDB4ODUsMHgyQSwgCi0weDAwLDB4MTQsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4NkMsIDB4OTUsMHgyMiwgCi0weDAwLDB4MjAsIDB4ODcsMHgxNiwgMHhGRiwweEM4LCAweDg1LDB4MTYsIDB4RkYsMHg1NCwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDg3LDB4MUUsIDB4MDAsMHgwMCwgMHg4NCwweDk2LCAweEZGLDB4NUMsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4Q0MsIDB4MjMsMHg5NCwgMHgwMCwweDMyLCAweDc2LDB4MUQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4ODUsMHgxNiwgCi0weEZGLDB4N0MsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxRSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhEMCwgMHgyMywweDk0LCAweDAwLDB4MkUsIDB4NzYsMHgxRCwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NCwweDk2LCAweEZGLDB4NzQsIDB4ODUsMHgxNiwgCi0weEZGLDB4NkMsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEQ0LCAweDIzLDB4OTQsIDB4MDAsMHgyQSwgMHg3NiwweDFELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxRSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEQ4LCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMiwgMHhGNCwweEEzLCAweDI4LDB4MDAsIDB4MDcsMHgyMCwgCi0weDAwLDB4MTgsIDB4MjUsMHgxNCwgMHgwMCwweDdBLCAweDg1LDB4MkEsIDB4MDAsMHgwMCwgMHg3NywweEE5LCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzUsMHgyOCwgMHg3RiwweEMwLCAweDc1LDB4MjksIDB4RkYsMHhGMCwgMHg4NCwweDk2LCAweEZGLDB4QzQsIDB4RjUsMHgzQiwgCi0weDI4LDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MjQsIDB4RjcsMHgwNCwgCi0weDRGLDB4NTgsIDB4RTYsMHgwMCwgMHg3RSwweEY5LCAweDk0LDB4MTYsIDB4RkYsMHg1NCwgMHhDNywweDIwLCAweDcyLDB4MDAsIDB4RjYsMHg4NCwgCi0weDZFLDB4NTAsIDB4ODYsMHgyNiwgMHgwMCwweDJDLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHgyNSwweDE0LCAweDAwLDB4NUEsIDB4ODQsMHgyQSwgCi0weDAwLDB4MDAsIDB4NzcsMHhBOSwgMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNCwweDIwLCAweDdGLDB4QzAsIDB4NzQsMHgyMSwgCi0weEZGLDB4RjAsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDg2LDB4QjYsIDB4MUQsMHhEQywgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzAsMHgzMiwgCi0weDZBLDB4MDAsIDB4NDYsMHg4QywgMHgwMCwweDAxLCAweEQ2LDB4ODAsIDB4MEEsMHg2OCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RjYsMHg4NiwgCi0weDQwLDB4OTgsIDB4RTYsMHgwMCwgMHg3RSwweEMwLCAweEMzLDB4QjgsIDB4NjgsMHgwMCwgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODYsMHhBNiwgCi0weDAwLDB4MjQsIDB4RjcsMHgwNCwgMHhFMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDdFLDB4NTQsIDB4MDMsMHgyNCwgMHgwMCwweDI0LCAweDg2LDB4QTYsIDB4MDAsMHgyOCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4N0UsMHg1OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4N0UsMHg2NSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5QSwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHg3RSwweEEwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDdFLDB4QTgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg2LDB4OUEsIDB4MDAsMHgwNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4N0UsMHhBOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4N0UsMHhCOSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4N0UsMHhDNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEY0LDB4MUYsIDB4MjgsMHgwMCwgMHg4NCwweDk2LCAweEZGLDB4NTQsIDB4ODUsMHgxNiwgCi0weEZGLDB4QzQsIDB4RjYsMHg4NiwgMHg0MCwweDlBLCAweEM3LDB4MjQsIDB4NzIsMHgwMCwgMHg3NywweDM4LCAweEZGLDB4RkEsIDB4ODYsMHgyQSwgCi0weDAwLDB4MzAsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4RTAsMHgwMCwgCi0weDdGLDB4NEMsIDB4RjYsMHgzQiwgMHgyOCwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHg1NCwgMHhGNiwweDA2LCAweDQwLDB4OTgsIDB4QzcsMHgyNCwgCi0weDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweEM2LDB4QjgsIDB4MDAsMHgwMCwgMHg0NiwweEI1LCAweDAwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHhGNSwweDM3LCAweDI4LDB4MDAsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NUEsIDB4ODQsMHhBNiwgCi0weDAwLDB4MDAsIDB4NzcsMHhBNSwgMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNCwweEE0LCAweDdGLDB4QzAsIDB4NzQsMHhBNSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAyLCAweEY0LDB4QkIsIDB4MjgsMHgwMCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4ODUsMHgxNiwgCi0weEZGLDB4NTQsIDB4ODQsMHg5NiwgMHhGRiwweEFDLCAweEM2LDB4QTgsIDB4NzIsMHgwMCwgMHg3NiwweEI0LCAweEZGLDB4RkEsIDB4MDYsMHgyNCwgCi0weDAwLDB4MUEsIDB4RjYsMHhCMywgMHgyOCwweDAwLCAweEM3LDB4MjQsIDB4NzIsMHgwMCwgMHg3NywweDM4LCAweEZGLDB4RkEsIDB4MDYsMHhBOCwgCi0weDAwLDB4MUEsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHgyNCwgCi0weDAwLDB4MUMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4MDQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjMsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDRGLDB4NTgsIDB4ODQsMHg5NiwgMHhGRiwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDI0LCAweDcyLDB4MDAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RkEsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDI0LCAweDAwLDB4MUMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNCwgMHg0RiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMywweDQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDc4LDB4RDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODQsIDB4NkUsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDFELDB4REMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDFELDB4REMsIDB4ODcsMHgzNiwgCi0weDFELDB4REMsIDB4RjAsMHgwNSwgMHg0MCwweDg0LCAweEY0LDB4ODYsIDB4RTAsMHgwMCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhENSwweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDA1LCAweDQwLDB4ODQsIDB4RjcsMHgwNCwgCi0weDZFLDB4NTAsIDB4RjAsMHgwNSwgMHg0MiwweDVDLCAweDg3LDB4M0EsIDB4MUQsMHhEQywgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNSwgCi0weDNCLDB4NjQsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY1LDB4MDYsIDB4M0EsMHg0QywgMHhGNSwweDA1LCAweDQyLDB4NDQsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg4MCwweDYwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwNiwgCi0weDM1LDB4RUMsIDB4RTAsMHgwMCwgMHg4MCwweDhDLCAweEY1LDB4MDUsIDB4NDIsMHgzMCwgMHgyMCwweDMyLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weDgwLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjQsMHg4NiwgMHgzNSwweDYwLCAweEY0LDB4ODUsIDB4NDIsMHgzMCwgMHhGNSwweDA2LCAweDQyLDB4NDQsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUYsMHg0OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weDgwLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg5OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjUsMHg4NiwgCi0weDQyLDB4NDQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODEsMHg2MSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweDgxLDB4MjksIDB4RjYsMHgwNiwgCi0weDQyLDB4NTAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzIsMHhBQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weDgxLDB4NjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjUsMHg4MiwgMHgwMCwweDA2LCAweEY1LDB4ODUsIDB4NDIsMHg1NCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDczLDB4NEMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzgsMHgxQywgMHhGNSwweDg1LCAweDQyLDB4NDQsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NTgsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTAsIDB4RjYsMHg4NiwgMHg0MiwweDUwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjYsMHgwNCwgCi0weDZGLDB4MzQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDg2LDB4QjIsIDB4MDAsMHgwQywgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg4MiwweDUwLCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHhDNSwweDA0LCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgCi0weDAwLDB4MTAsIDB4RjcsMHgwNCwgMHhFMCwweDAwLCAweEM1LDB4QTQsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDgxLDB4RTQsIDB4MDQsMHgzMCwgMHgwMCwweDEwLCAweDg2LDB4QjIsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4ODEsMHhFOCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODEsMHhGNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHhBMiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHg4MiwweDMwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDgyLDB4MzgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg2LDB4QTIsIDB4MDAsMHgwNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4ODIsMHgzOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODIsMHg0OSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODIsMHg1OSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODcsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDIwLCAweDAwLDB4MDIsIDB4RjAsMHgzQiwgCi0weDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEY0LDB4MDUsIDB4M0IsMHhCMCwgMHgwNiwweEEwLCAweDAwLDB4MTQsIDB4QzcsMHgyMCwgCi0weDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEEwLCAweDAwLDB4MTYsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MjMsIDB4MjgsMHgwMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENCLDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDI2LDB4MTQsIDB4MDAsMHgyMCwgMHhGMCwweDMzLCAweDI4LDB4MDAsIDB4MDQsMHhBMCwgCi0weDAwLDB4MDIsIDB4RjAsMHgyNywgMHgyOCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MkEsIDB4RjMsMHgxRiwgCi0weDI4LDB4MDAsIDB4MDcsMHgyMCwgMHgwMCwweDFBLCAweDIzLDB4OTQsIDB4MDAsMHgyQSwgMHg4MywweDlFLCAweDAwLDB4MDAsIDB4NzcsMHg5RCwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEMzLDB4OUMsIDB4N0YsMHhDMCwgMHg3MywweDlELCAweEZGLDB4RjAsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDA2LDB4QTQsIDB4MDAsMHgwMiwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4RjMsMHhCQiwgCi0weDI4LDB4MDAsIDB4RjMsMHgwNCwgMHhFMCwweDAwLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5MywweDIyLCAweDAwLDB4MUMsIDB4RjMsMHg4NCwgCi0weEUwLDB4MDQsIDB4MjMsMHgxNCwgMHgwMCwweDFFLCAweDkzLDB4MTYsIDB4RkYsMHhBNCwgMHg3NSwweDk5LCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4NzMsMHgxNSwgMHgwMCwweDFFLCAweDczLDB4MTgsIDB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZGLDB4Q0MsIDB4ODMsMHgxNiwgCi0weEZGLDB4QTQsIDB4OTMsMHhBMiwgMHgwMCwweDIwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg3MywweDk1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywgCi0weEZGLDB4RTUsIDB4OTMsMHg5NiwgMHhGRiwweEFDLCAweDczLDB4OTUsIDB4MDAsMHgxRSwgMHg3MywweDlDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4OTMsMHg5NiwgCi0weEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4OTQsIDB4MDAsMHgxQSwgMHg5MywweDk2LCAweEZGLDB4QTQsIDB4NzYsMHgxRCwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RTgsIDB4MjMsMHgxNCwgCi0weDAwLDB4MTYsIDB4OTMsMHgxNiwgMHhGRiwweEE0LCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg4MywweDk2LCAweEZGLDB4QUMsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHgzRiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgyMywweDE0LCAweDAwLDB4MTIsIDB4OTMsMHgxNiwgCi0weEZGLDB4QTQsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDgzLDB4OTYsIDB4RkYsMHhDQywgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDNGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RjAsIDB4ODMsMHgxNiwgMHhGRiwweEM0LCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweEYzLDB4ODIsIDB4MDAsMHgwMiwgMHhGMywweEEzLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4MkEsIDB4ODMsMHgxQSwgMHgwMCwweDAwLCAweDc3LDB4OTksIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzMsMHgxOCwgCi0weDdGLDB4QzAsIDB4NzMsMHgxOSwgMHhGRiwweEYwLCAweDA3LDB4MjAsIDB4MDAsMHgxOCwgMHhGMywweDNCLCAweDI4LDB4MDAsIDB4OTQsMHgxNiwgCi0weEZGLDB4REMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0IsMHhDQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHgyMCwgCi0weDAwLDB4MDIsIDB4MjMsMHg5NCwgMHgwMCwweDJBLCAweDgzLDB4OUUsIDB4MDAsMHgwMCwgMHg3NywweDlELCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzMsMHg5QywgMHg3RiwweEMwLCAweDczLDB4OUQsIDB4RkYsMHhGMCwgMHgyNCwweDgwLCAweDAwLDB4MDcsIDB4MDUsMHgyMCwgCi0weDAwLDB4MEEsIDB4RjMsMHhCQiwgMHgyOCwweDAwLCAweDIwLDB4MjYsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweDg0LDB4RTAsIDB4MDYsMHgyOCwgCi0weDAwLDB4MEUsIDB4ODYsMHhCMiwgMHgwMCwweDAwLCAweDc3LDB4MzEsIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4NzUsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHgwNCwweEE0LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4RjYsMHhCMywgCi0weDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHhGRiwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4QzcsMHgzOCwgMHgzNCwweDAwLCAweEUwLDB4MDAsIDB4ODQsMHg4OCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDUsMHgyMCwgCi0weDAwLDB4MjYsIDB4ODYsMHgyQSwgMHgwMCwweDAwLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4ODMsMHg5NiwgMHhGRiwweERDLCAweEYzLDB4MDIsIDB4MDAsMHhGRiwgMHg5NCwweDE2LCAweEZGLDB4QkMsIDB4QzcsMHgxQywgCi0weDVBLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweEM2LDB4MzAsIDB4NkYsMHhDMCwgMHg3NiwweDMxLCAweEZGLDB4RjAsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHgzNCwweDAwLCAweEY2LDB4ODIsIDB4RkYsMHgwMCwgMHhDNiwweDMwLCAweDZDLDB4MDAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4RjYsMHg4NCwgMHgzQiwweDZDLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHhDNSwweEEwLCAweDVBLDB4MDAsIDB4NzUsMHhBQywgCi0weEZGLDB4RkEsIDB4ODMsMHgxNiwgMHhGRiwweERDLCAweDA3LDB4MzQsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDNCLDB4NkMsIDB4MDcsMHgyMCwgCi0weDAwLDB4M0EsIDB4RjYsMHhCQiwgMHgyOCwweDAwLCAweDA3LDB4MjAsIDB4MDAsMHgzNiwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDMsIDB4RjMsMHhBMywgMHgyOCwweDAwLCAweDA3LDB4MTgsIDB4MDAsMHgxQSwgMHhGNSwweEJCLCAweDI4LDB4MDAsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDIwLCAweDAwLDB4MDIsIDB4RjAsMHgzQiwgCi0weDI4LDB4MDAsIDB4MjQsMHg4MCwgMHgwMCwweDA3LCAweDA1LDB4MjAsIDB4MDAsMHgwQSwgMHgyMCwweDI2LCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgCi0weDg1LDB4RDQsIDB4MDYsMHgyOCwgMHgwMCwweDBFLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg3NywweDMxLCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHgwNSwweDI4LCAweDAwLDB4MDIsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwgCi0weDc0LDB4MDAsIDB4RjYsMHhCMywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHhGMywweDgyLCAweDAwLDB4RkYsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4M0MsMHgwMCwgMHhFMCwweDAwLCAweDg1LDB4N0MsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4MDUsMHhBMCwgMHgwMCwweDI2LCAweDg2LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzUsMHgyMCwgMHgwMCwweDAwLCAweDI0LDB4MDAsIDB4MDAsMHgwNywgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgCi0weEZGLDB4QTQsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweDgzLDB4OTYsIDB4RkYsMHhCQywgMHgyNCwweDgwLCAweDAwLDB4MEUsIDB4QzcsMHgxQywgCi0weDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweEM2LDB4MzAsIDB4NkYsMHhDMCwgMHg3NiwweDMxLCAweEZGLDB4RjAsIDB4NDcsMHgzOSwgCi0weDAwLDB4MDAsIDB4RjYsMHg4MiwgMHgwMCwweEZGLCAweEM3LDB4MzgsIDB4NkMsMHgwMCwgMHhGNiwweDgyLCAweEZGLDB4MDAsIDB4QzYsMHgzMCwgCi0weDZDLDB4MDAsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweEY2LDB4ODQsIDB4M0IsMHg2QywgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4MDcsMHgzNCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzQiwweDZDLCAweDA3LDB4MjgsIDB4MDAsMHgzQSwgMHhGNiwweEJCLCAweDI4LDB4MDAsIDB4MDcsMHgyOCwgCi0weDAwLDB4MzYsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHgwMywgMHhGMywweDJCLCAweDI4LDB4MDAsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDcsIDB4RUUsMHgwMCwgMHg4NiwweDk0LCAweEM2LDB4MjgsIDB4NDgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MjYsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNCwweEE0LCAweDAwLDB4MDIsIDB4MDQsMHgyMCwgCi0weDAwLDB4MDEsIDB4ODMsMHg5NiwgMHhGRiwweEE0LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4RjYsMHg4MiwgCi0weEZGLDB4MDAsIDB4QzcsMHgzOCwgMHg2QywweDAwLCAweEM3LDB4MUMsIDB4NzAsMHgwMCwgMHhFMCwweDAwLCAweDg2LDB4NTAsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4MDYsMHgyOCwgMHgwMCwweDI2LCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg3NywweDMxLCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwgCi0weDc0LDB4MDAsIDB4RjYsMHhCMywgMHgyOCwweDAwLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDA0LCAweDNCLDB4QjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4MTYsIDB4RkYsMHhCNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQ0LDB4MkMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhCNCwgMHhGMCwweDA1LCAweDQwLDB4N0MsIDB4ODMsMHg5NiwgCi0weEZGLDB4QkMsIDB4MjMsMHgwMCwgMHgwMCwweDA3LCAweEYzLDB4MDUsIDB4NDIsMHg1OCwgMHhGNywweDA0LCAweDQyLDB4NTAsIDB4RjYsMHgwNiwgCi0weDQyLDB4NTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGMywweDA2LCAweDM5LDB4MzQsIDB4RjMsMHgwNSwgCi0weDQyLDB4NDQsIDB4RjUsMHgwNSwgMHg0MCwweDc0LCAweEYzLDB4ODUsIDB4NDIsMHg2MCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RjMsMHg4NSwgCi0weDQyLDB4NTQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhGNiwweDg0LCAweDJELDB4MzgsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzQsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNiwgCi0weDJDLDB4MjgsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEYzLDB4ODIsIDB4MDAsMHgxQywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weDg3LDB4NEMsIDB4QjMsMHhCNiwgMHg3MCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDA2LCAweDQyLDB4NDQsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUYsMHg0OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NDgsIDB4RjMsMHg4NiwgCi0weDQyLDB4NDQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODksMHhFRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweDg3LDB4QzksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzMsMHg0QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weDg5LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjYsMHgxNCwgMHgwMCwweDIwLCAweEYwLDB4MzMsIDB4MjgsMHgwMCwgMHgwNSwweEEwLCAweDAwLDB4MDIsIDB4RjAsMHgyRiwgCi0weDI4LDB4MDAsIDB4RjMsMHg4MiwgMHgwMCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyMiwgMHhGMywweEE3LCAweDI4LDB4MDAsIDB4MDQsMHhBMCwgCi0weDAwLDB4MUEsIDB4OTQsMHg5NiwgMHhGRiwweEQ0LCAweDIzLDB4OTQsIDB4MDAsMHgyMiwgMHg4MywweDlFLCAweDAwLDB4MDAsIDB4NzcsMHg5RCwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEMzLDB4OUMsIDB4N0YsMHhDMCwgMHg3MywweDlELCAweEZGLDB4RjAsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDA2LDB4QUMsIDB4MDAsMHgwMiwgMHgyMywweDE0LCAweDAwLDB4MUUsIDB4NzUsMHgxOSwgCi0weDAwLDB4MUUsIDB4RjMsMHhBNywgMHgyOCwweDAwLCAweEY0LDB4ODQsIDB4RTAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4OTQsMHhBMiwgCi0weDAwLDB4MUMsIDB4RjMsMHg4NCwgMHhFMCwweDA0LCAweDc0LDB4OTUsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4OTQsMHg5NiwgCi0weEZGLDB4QjQsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4Q0MsIDB4ODQsMHg5NiwgCi0weEZGLDB4QjQsIDB4OTMsMHhBMiwgMHgwMCwweDIwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg3MywweDk1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywgCi0weEZGLDB4RTUsIDB4OTMsMHg5NiwgMHhGRiwweEJDLCAweDczLDB4OTUsIDB4MDAsMHgxRSwgMHg3MywweDlDLCAweEZGLDB4RTUsIDB4OTMsMHg5NiwgCi0weEZGLDB4QzQsIDB4ODMsMHg5NiwgMHhGRiwweEJDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgCi0weDI4LDB4MDAsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHhDNSwweEEwLCAweDVBLDB4MDAsIDB4NzUsMHhBQywgCi0weEZGLDB4RkEsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4NDUsMHhBRCwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NCwweDk2LCAweEZGLDB4Q0MsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTgsIDB4MjMsMHgxNCwgMHgwMCwweDE2LCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDNGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDIzLDB4MTQsIDB4MDAsMHgxMiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDNGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4MDIsIDB4RjQsMHhBMywgCi0weDI4LDB4MDAsIDB4MDQsMHgyMCwgMHgwMCwweDE4LCAweDIzLDB4OTQsIDB4MDAsMHgyMiwgMHg4MywweDlFLCAweDAwLDB4MDAsIDB4NzcsMHg5RCwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEMzLDB4OUMsIDB4N0YsMHhDMCwgMHg3MywweDlELCAweEZGLDB4RjAsIDB4ODQsMHg5NiwgCi0weEZGLDB4RDQsIDB4RjMsMHhBMywgMHgyOCwweDAwLCAweEYzLDB4ODIsIDB4MDAsMHgwMSwgMHhGMywweEE3LCAweDI4LDB4MDAsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjQsMHg4NiwgMHhFMCwweDAwLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDg0LCAweDRGLDB4NUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIzLDB4NDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzgsMHhEOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjQsMHg4NiwgCi0weDM2LDB4NzgsIDB4RjQsMHg4NSwgMHg0MiwweDQ0LCAweEYwLDB4MDUsIDB4NDAsMHg4NCwgMHhGNiwweDg0LCAweDRGLDB4NUMsIDB4RjcsMHgwMiwgCi0weDAwLDB4NjQsIDB4OTcsMHgzNiwgMHgwMCwweDAwLCAweDkwLDB4MzYsIDB4MDAsMHgwNCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDQwLDB4ODQsIDB4RjMsMHg4NiwgMHgzNSwweEVDLCAweEYzLDB4ODUsIDB4NDIsMHgzMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg5MCwgMHhGNywweDA0LCAweDQyLDB4NjAsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MDUsMHhCOCwgMHgwMCwweDE4LCAweEY2LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDcsIDB4RUUsMHgwMCwgMHg4QSwweDcwLCAweEM3LDB4MzAsIDB4NjAsMHgwMCwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MEUsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4QzAsMHgzNiwgCi0weDUyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDhBLDB4NzEsIDB4MDcsMHgzMCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4OEEsMHgxOCwgMHhGNywweDA1LCAweDQyLDB4NTgsIDB4RjQsMHgwNCwgCi0weDQyLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MjIsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweDhELDB4OTQsIDB4MjQsMHg5NCwgCi0weDAwLDB4MzYsIDB4RjYsMHgwNCwgMHg0MiwweDYwLCAweDI1LDB4MTQsIDB4MDAsMHgzOCwgMHgyMywweDk0LCAweDAwLDB4MjAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgCi0weDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4MjgsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDk0LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4N0MsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHgwNCwgMHg0MiwweDYwLCAweDI0LDB4OTQsIDB4MDAsMHg3RSwgMHgyNSwweDE0LCAweDAwLDB4ODAsIDB4MjMsMHg5NCwgCi0weDAwLDB4NjgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4N0MsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4N0EsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NzgsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NzYsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NzQsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NzIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDcwLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4NzQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQyLDB4NTgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDc0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTgsIDB4MjMsMHg5NCwgMHgwMCwweDUwLCAweEM3LDB4MDAsIDB4NzIsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4NkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENGLDB4MjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDZDLCAweEY2LDB4ODYsIDB4NDIsMHg1MCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NCwgCi0weDQyLDB4NTgsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LCAweDQyLDB4NTAsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEYzLDB4MzgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDhELDB4OTUsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDQyLDB4NTgsIDB4RjcsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgCi0weDhELDB4RDQsIDB4RjMsMHg4MiwgMHgxNywweDcwLCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDgyLCAweDAwLDB4MUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg4RCwweEY0LCAweEIzLDB4QkEsIDB4NjgsMHgwMiwgMHhFMCwweDAwLCAweDhELDB4RjQsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NiwgCi0weDQyLDB4NDQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4ODgsIDB4RjcsMHgwNCwgMHg0MiwweDUwLCAweEY2LDB4ODYsIDB4NDIsMHg1MCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4RjMsMHg4NCwgCi0weDZGLDB4MzQsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4ODYsMHg5RSwgCi0weDAwLDB4MEMsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDhFLDB4NjUsIDB4RjYsMHgwNiwgCi0weDQyLDB4QTAsIDB4RjcsMHgwNCwgMHg0MiwweEEwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDk0LDB4RTQsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4RjYsMHgwNCwgMHg0MiwweDYwLCAweDI0LDB4OTQsIDB4MDAsMHgzNiwgMHg4NSwweDE2LCAweEZGLDB4QzQsIDB4MjMsMHg5NCwgCi0weDAwLDB4MzgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4ODUsMHgyQSwgMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDk1LDB4MTYsIDB4RkYsMHhCQywgMHhGNywweDFGLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4MjgsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDg3LDB4MkEsIDB4MDAsMHgyMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDI3LDB4MTQsIDB4MDAsMHgyMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhEMCwweERDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgxRSwgMHgwMCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDhGLDB4RjAsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDg3LDB4MUUsIDB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg4RiwweEY0LCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg5MCwweDQxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NSwweDE2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDUsMHgyOCwgMHgwMCwweDEwLCAweDk1LDB4MTYsIDB4RkYsMHhCNCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3MiwweDUwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QjQsIDB4MjcsMHgxNCwgCi0weDAwLDB4MjAsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEY5LDB4MzQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4OTQsMHhFNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHgxNiwgCi0weEZGLDB4QkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDk0LDB4QkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0IsMHhDQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDYyLCAweEY1LDB4MUYsIDB4MjgsMHgwMCwgMHg3NSwweDk1LCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4MDYsMHgyMCwgMHgwMCwweDAyLCAweDA2LDB4QjAsIDB4MDAsMHgwMiwgMHgyMywweDE0LCAweDAwLDB4MUUsIDB4NzMsMHg5OSwgCi0weDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHg3NCwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4OTUsMHgxNiwgMHhGRiwweDdDLCAweDczLDB4OTUsIDB4MDAsMHgxRSwgMHg3MywweDlDLCAweEZGLDB4RTUsIDB4OTMsMHg5NiwgCi0weEZGLDB4OEMsIDB4ODUsMHgxNiwgMHhGRiwweEM0LCAweDczLDB4OTUsIDB4MDAsMHgxRSwgMHg5MywweDk2LCAweEZGLDB4ODQsIDB4ODUsMHgyQSwgCi0weDAwLDB4MzQsIDB4MjMsMHg5NCwgMHgwMCwweDYyLCAweDk1LDB4MTYsIDB4RkYsMHhBQywgMHhGMCwweDMzLCAweDI4LDB4MDAsIDB4MDUsMHgyMCwgCi0weDAwLDB4MUEsIDB4OTUsMHgxNiwgMHhGRiwweDk0LCAweDgzLDB4OUUsIDB4MDAsMHgwMCwgMHg3NywweDlELCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzMsMHg5QywgMHg3RiwweEMwLCAweDczLDB4OUQsIDB4RkYsMHhGMCwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4RjMsMHhBQiwgCi0weDI4LDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweEM0LCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg4NSwweDJBLCAweDAwLDB4MTAsIDB4ODMsMHg5NiwgCi0weEZGLDB4QzQsIDB4OTUsMHgyMiwgMHgwMCwweDFDLCAweDgzLDB4OUUsIDB4MDAsMHgxNCwgMHg4NSwweDE2LCAweEZGLDB4ODQsIDB4OTMsMHhBMiwgCi0weDAwLDB4MjAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5NSwweDE2LCAweEZGLDB4ODQsIDB4RjMsMHg4NCwgCi0weDRGLDB4NTgsIDB4ODUsMHgxNiwgMHhGRiwweDc0LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDkzLDB4OTYsIDB4RkYsMHhBNCwgMHhDMCwweDIyLCAweDNBLDB4MDAsIDB4ODMsMHg5NiwgCi0weEZGLDB4N0MsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFOCwgMHgyMywweDE0LCAweDAwLDB4MTYsIDB4NzYsMHgxOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NSwweDE2LCAweEZGLDB4OEMsIDB4ODMsMHg5NiwgCi0weEZGLDB4ODQsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDIzLDB4MTQsIDB4MDAsMHgxMiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDNGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMiwgMHhGNSwweDIzLCAweDI4LDB4MDAsIDB4MjMsMHg5NCwgCi0weDAwLDB4NTIsIDB4ODMsMHg5RSwgMHgwMCwweDAwLCAweDc3LDB4OUQsIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzMsMHg5QywgCi0weDdGLDB4QzAsIDB4NzMsMHg5RCwgMHhGRiwweEYwLCAweDAzLDB4MjAsIDB4MDAsMHgxOCwgMHhFNiwweDAwLCAweDkyLDB4MzAsIDB4RjMsMHg5QiwgCi0weDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0MiwweDcwLCAweEUwLDB4MDAsIDB4OTIsMHg5QywgMHhGNiwweDA2LCAweDQyLDB4NzIsIDB4ODUsMHgxNiwgCi0weEZGLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4QUEsIDB4MDAsMHgyMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzNCwgCi0weDAwLDB4MDcsIDB4MjAsMHgzQSwgMHgwMCwweDBFLCAweEUyLDB4MDAsIDB4OTIsMHg5NCwgMHhDNywweDM0LCAweDY4LDB4MDAsIDB4RjUsMHg4NCwgCi0weDQyLDB4NjAsIDB4RjMsMHg4MiwgMHgwMCwweEZGLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweDc0LCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4M0MsMHgwMCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDkyLDB4QzksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDc0LCAweEY2LDB4MDYsIDB4NDIsMHg3NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzgsMHg5QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weDk0LDB4RTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg1LDB4MTYsIDB4RkYsMHhBNCwgMHg4MywweDk2LCAweEZGLDB4NzQsIDB4QzcsMHgyMCwgCi0weDUyLDB4MDAsIDB4NzQsMHhCOCwgMHhGRiwweEZBLCAweEM2LDB4MjQsIDB4MDAsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4NzYsMHg5RCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM1LDB4QUMsIDB4NTIsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RkEsIDB4NDYsMHgzMSwgCi0weDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweEZGLCAweEM2LDB4MzAsIDB4NTQsMHgwMCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4RjYsMHg4MiwgMHhGRiwweDAwLCAweEM3LDB4MzgsIDB4NkMsMHgwMCwgMHhDNiwweDMwLCAweDcwLDB4MDAsIDB4RjYsMHgxRiwgCi0weDI4LDB4MDAsIDB4ODMsMHg5NiwgMHhGRiwweDk0LCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHhGNSwweDlGLCAweDI4LDB4MDAsIDB4ODcsMHgyQSwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgyNCwgMHhFNiwweDAwLCAweDk0LDB4NjksIDB4RjYsMHg4NiwgCi0weDQwLDB4OTgsIDB4RjcsMHgwNCwgMHg2RSwweDUwLCAweDg2LDB4MkEsIDB4MDAsMHgyQywgMHhDNiwweEE0LCAweDAwLDB4MDAsIDB4MjMsMHg5NCwgCi0weDAwLDB4NjIsIDB4ODQsMHg5RSwgMHgwMCwweDAwLCAweDc3LDB4OUQsIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzQsMHhBNCwgCi0weDdGLDB4QzAsIDB4NzQsMHhBNSwgMHhGRiwweEYwLCAweDQ2LDB4QjUsIDB4MDAsMHgwMCwgMHg4NywweDNBLCAweDFELDB4REMsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNiwgMHg0MCwweDk4LCAweEU2LDB4MDAsIDB4OTQsMHgzNCwgMHhDMywweDM0LCAweDcwLDB4MDAsIDB4QzUsMHg4NCwgCi0weDAwLDB4MDAsIDB4ODYsMHhBQSwgMHgwMCwweDI0LCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4MDUsMHgyOCwgMHgwMCwweDI0LCAweEU2LDB4MDAsIDB4OTMsMHhDNCwgMHg5NSwweDE2LCAweEZGLDB4NzQsIDB4ODMsMHg5NiwgCi0weEZGLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4OUUsIDB4MDAsMHgyOCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4OTMsMHhDOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTMsMHhENSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweDc0LCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4OTQsMHgxNCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg5NCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDk0LDB4MUQsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDk0LDB4MkQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDk0LDB4MzksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHhGNCwweDlCLCAweDI4LDB4MDAsIDB4ODMsMHg5NiwgCi0weEZGLDB4QzQsIDB4RjYsMHg4NiwgMHg0MCwweDlBLCAweEM3LDB4MjAsIDB4NzIsMHgwMCwgMHg3NywweDM4LCAweEZGLDB4RkEsIDB4ODYsMHgxRSwgCi0weDAwLDB4MzAsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4RTAsMHgwMCwgCi0weDk0LDB4RTQsIDB4RjYsMHgzQiwgMHgyOCwweDAwLCAweDQ3LDB4MjUsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweEY1LDB4M0IsIDB4MjgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4MjMsMHg5NCwgCi0weDAwLDB4NjIsIDB4ODMsMHg5RSwgMHgwMCwweDAwLCAweDc3LDB4OUQsIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzMsMHg5QywgCi0weDdGLDB4QzAsIDB4NzMsMHg5RCwgMHhGRiwweEYwLCAweDI1LDB4MTQsIDB4MDAsMHg2MiwgMHhGMywweEJCLCAweDI4LDB4MDAsIDB4ODUsMHgyQSwgCi0weDAwLDB4MDAsIDB4NzcsMHhBOSwgMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNSwweDI4LCAweDdGLDB4QzAsIDB4NzUsMHgyOSwgCi0weEZGLDB4RjAsIDB4RTAsMHgwMCwgMHg5NCwweEU0LCAweEY1LDB4MUIsIDB4MjgsMHgwMCwgMHg4MywweDk2LCAweEZGLDB4QkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgxRSwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4OTQsMHhFNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDM1LDB4NjAsIDB4RjUsMHgwNSwgCi0weDQyLDB4MzAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjUsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTYsMHg4OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweDk1LDB4OEQsIDB4RjUsMHg4NiwgCi0weDQyLDB4NTAsIDB4RjcsMHgwNCwgMHg0MiwweDUwLCAweDc2LDB4MkQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4MjYsMHhCNCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NSwgMHg0MiwweDU0LCAweDI1LDB4MDAsIDB4MDAsMHgwNywgMHhGNSwweDA1LCAweDQyLDB4NTgsIDB4RjYsMHg4NCwgCi0weDJELDB4MzgsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgyRiwgCi0weDI4LDB4MDAsIDB4MDYsMHgzNCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA2LCAweDJDLDB4MjgsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4RjUsMHgwMiwgMHgwMCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDk2LDB4ODgsIDB4QjUsMHgzNiwgCi0weDcwLDB4MDIsIDB4RTAsMHgwMCwgMHg5NiwweDg4LCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNSwweDA0LCAweDQyLDB4NjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEIyLDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4NCwgMHg0RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM0LCAweDAwLDB4NDAsIDB4QzAsMHgyMiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg5NSwweEVDLCAweEY2LDB4MDYsIDB4NDIsMHg3NiwgMHhGNywweDA0LCAweDQyLDB4NzQsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHg5NiwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4NjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyMiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4OTYsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNCwgMHgzQiwweEIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhENCwweDJDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDk2LDB4NDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyMiwgMHg2QSwweDAwLCAweEU2LDB4MDAsIDB4OTYsMHg3MSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0MsMHg2MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDQwLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwNCwgCi0weDQwLDB4NzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEJFLDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4OTYsMHg4OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHgwNCwgCi0weDQwLDB4NzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEMxLDB4QjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDcwLCAweEY2LDB4MDQsIDB4NkYsMHgzNCwgMHhGNywweDA0LCAweDQyLDB4NjQsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDlCLDB4MTgsIDB4MDYsMHhCMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweEY0LDB4MDQsIDB4NDAsMHg3QywgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDMCwweDNBLCAweDQyLDB4MDAsIDB4RTYsMHgwMCwgCi0weDlCLDB4MTgsIDB4MjQsMHg5NCwgMHgwMCwweDM2LCAweEY2LDB4MDQsIDB4NDAsMHg3NCwgMHgyMywweDk0LCAweDAwLDB4MzgsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4MjgsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDk0LDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MjcsMHgxNCwgCi0weDAwLDB4MjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0IsMHhDQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNCwgCi0weDQwLDB4NzQsIDB4OTQsMHgxNiwgMHhGRiwweEM0LCAweDA3LDB4MjAsIDB4MDAsMHgwMiwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4MjQsMHg4MCwgCi0weDAwLDB4MDcsIDB4RjQsMHgwMiwgMHgwMCwweEZGLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHg5NSwweDE2LCAweEZGLDB4QkMsIDB4MDMsMHgxQywgCi0weDAwLDB4MEEsIDB4MjAsMHgyNiwgMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4OTgsMHhBOCwgMHgwNiwweDE4LCAweDAwLDB4MEUsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDAsIDB4NzcsMHgzMSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4MDMsMHgxOCwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgCi0weEZGLDB4MDAsIDB4QzYsMHhCNCwgMHg3NCwweDAwLCAweEY2LDB4QjMsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDNywweDM4LCAweDQ0LDB4MDAsIDB4RTAsMHgwMCwgCi0weDk4LDB4NTQsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgCi0weEZGLDB4RTUsIDB4ODMsMHg5NiwgMHhGRiwweEM0LCAweDIzLDB4MTQsIDB4MDAsMHgxRSwgMHg3NCwweDE5LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4MDUsMHgyOCwgMHgwMCwweDI2LCAweDk1LDB4MTYsIDB4RkYsMHg4QywgMHg4NSwweEFBLCAweDAwLDB4MDAsIDB4NzYsMHhBOSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDAzLDB4OUMsIDB4MDAsMHgwMiwgMHg5MywweDk2LCAweEZGLDB4QjQsIDB4MDYsMHgxQywgCi0weDAwLDB4MDIsIDB4NzMsMHg5NSwgMHgwMCwweDFFLCAweDczLDB4OUMsIDB4RkYsMHhFNSwgMHg5MywweDk2LCAweEZGLDB4QUMsIDB4NzMsMHg5NSwgCi0weDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHg5QywgMHg4MywweDk2LCAweEZGLDB4QkMsIDB4NzUsMHgxNSwgCi0weDAwLDB4MUUsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweDk1LDB4MTYsIDB4RkYsMHg5NCwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4OTUsMHgxNiwgMHhGRiwweEE0LCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHhDNSwweEFDLCAweDZGLDB4QzAsIDB4NzUsMHhBRCwgCi0weEZGLDB4RjAsIDB4RjUsMHgwNSwgMHg0MiwweDYwLCAweEY1LDB4MDQsIDB4NEYsMHg1OCwgMHhGNiwweDgyLCAweDAwLDB4RkYsIDB4QzcsMHgxQywgCi0weDUyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDZDLDB4MDAsIDB4RjYsMHg4MiwgCi0weEZGLDB4MDAsIDB4QzUsMHhBQywgMHg2QywweDAwLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHg4MywweDk2LCAweEZGLDB4OEMsIDB4RjUsMHg4NCwgCi0weDNCLDB4NkMsIDB4ODUsMHgxNiwgMHhGRiwweEI0LCAweEY3LDB4MUYsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RTAsIDB4MDYsMHhBQywgCi0weDAwLDB4MDEsIDB4RjYsMHg4NSwgMHgzQiwweDZDLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweEY1LDB4MDQsIDB4NEYsMHg1OCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4QzAsMHgxRSwgCi0weDUyLDB4MDAsIDB4QzcsMHgzOCwgMHg0NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDk5LCAweDAwLDB4MUUsIDB4ODMsMHg5NiwgCi0weEZGLDB4OTQsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RTgsIDB4MjMsMHgxNCwgCi0weDAwLDB4MTYsIDB4NzYsMHg5OSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHg4NSwweDE2LCAweEZGLDB4QUMsIDB4ODMsMHg5NiwgCi0weEZGLDB4QTQsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg1LDB4MTYsIDB4RkYsMHg5QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MjMsMHgxNCwgCi0weDAwLDB4MTIsIDB4NzYsMHg5OSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDNGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODMsMHg5NiwgCi0weEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RjAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4MDcsMHgxQywgMHgwMCwweDNBLCAweEY1LDB4QkIsIDB4MjgsMHgwMCwgMHgwNywweDFDLCAweDAwLDB4MzYsIDB4RjAsMHgzQiwgCi0weDI4LDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAzLCAweEU2LDB4MDAsIDB4OUEsMHhBNCwgMHhGNSwweDFGLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgCi0weDQyLDB4NzgsIDB4RjYsMHgwNiwgMHg0MiwweDc4LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDlCLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjMsMHg4NiwgMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDFGLDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDI1LDB4MDAsIDB4MDAsMHgwNywgMHhGNSwweDA1LCAweDQyLDB4NTgsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTAsIDB4RjYsMHgwNiwgMHg0MiwweDUwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDYsIDB4RjMsMHg4NSwgMHg0MiwweDU0LCAweEY1LDB4MDYsIDB4MzksMHgzNCwgMHhGNSwweDA1LCAweDQyLDB4NDQsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEY2LDB4ODQsIDB4MkQsMHgzOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4MDYsMHgzNCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA2LCAweDJDLDB4MjgsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4RjMsMHg4MiwgMHgwMCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDlCLDB4MTgsIDB4QjMsMHhCNiwgCi0weDcwLDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDc4LCAweEYzLDB4ODYsIDB4NDIsMHg0NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weDlFLDB4NDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RUUsMHgwMCwgMHg5RCwweDg1LCAweDI0LDB4OTQsIDB4MDAsMHgzNiwgMHhGNiwweDA0LCAweDQwLDB4NzQsIDB4MjUsMHgxNCwgCi0weDAwLDB4MzgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzQsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkMsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkEsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDI4LCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHhGMywweDg0LCAweDQwLDB4N0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4MjAsIDB4OTMsMHg5NiwgCi0weEZGLDB4OTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDk0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MjMsMHg5NCwgCi0weDAwLDB4NjgsIDB4OTMsMHg5NiwgMHhGRiwweDhDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQyLDB4NTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg4QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweDIzLDB4OTQsIDB4MDAsMHg1MCwgMHg5MywweDk2LCAweEZGLDB4ODQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0YsMHgyNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgwMiwgCi0weEZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg2NCwgMHhGMywweDg0LCAweDQwLDB4N0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4ODQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjcsMHhDOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg5RCwweDVELCAweEYzLDB4ODIsIDB4MTcsMHg3MCwgMHhGNywweDA0LCAweDQyLDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MUIsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODYsIDB4NDIsMHg0NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRSwweEMwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDlFLDB4NDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjUsMHgwNCwgMHg0MCwweDdDLCAweEY0LDB4ODQsIDB4NDAsMHg3NCwgMHhDNywweDI4LCAweDUwLDB4MDAsIDB4QzcsMHgyNCwgCi0weDcwLDB4MDAsIDB4MDUsMHhCOCwgMHgwMCwweDI2LCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg3NywweDJELCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc3LDB4QjQsIDB4MDAsMHgwOCwgMHg3MCwweDNFLCAweEZGLDB4RTgsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4RTYsMHgwMCwgCi0weDlELDB4RkQsIDB4RjYsMHgwMiwgMHgwMCwweEZGLCAweEY3LDB4MDQsIDB4NDIsMHg3OCwgMHhGNiwweDA2LCAweDQyLDB4N0EsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHg5RSwweDQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEFFLCAweDAwLDB4MDAsIDB4NzcsMHgyRCwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2NCwweDAwLCAweEY2LDB4MDIsIDB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDY0LDB4MDAsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA3LDB4MjgsIDB4MDAsMHgwMSwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4QkUsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4RDgsIDB4RjMsMHg4NiwgCi0weDQyLDB4NDQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QTIsMHhDOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweEEwLDB4MzUsIDB4MjQsMHg5NCwgCi0weDAwLDB4MzYsIDB4RjYsMHgwNCwgMHg0MCwweDc0LCAweDI1LDB4MTQsIDB4MDAsMHgzOCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4NzUsMHhCMSwgCi0weDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDM0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDMyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDMwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJFLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MjgsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4RjMsMHg4NCwgMHg0MCwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MjMsMHg5NCwgMHgwMCwweDIwLCAweDkzLDB4OTYsIDB4RkYsMHg0QywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhEMCwweERDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDIzLDB4OTQsIDB4MDAsMHg1MCwgMHg5MywweDk2LCAweEZGLDB4NDQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgwMiwgCi0weEZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg2NCwgMHhGMywweDg0LCAweDQwLDB4N0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4NDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg0QywgMHhFMCwweDAwLCAweEEyLDB4ODAsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjQsMHgwNCwgMHg0MCwweDdDLCAweEY2LDB4MDQsIDB4NDAsMHg3NCwgMHhGMywweDgyLCAweDAwLDB4MDAsIDB4QzcsMHgyMCwgCi0weDQwLDB4MDAsIDB4QzcsMHgzMCwgMHg3MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgyNiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NywweEI0LCAweDAwLDB4MDgsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTgsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEEwLDB4QUQsIDB4OTMsMHg5NiwgMHhGRiwweDNDLCAweEY3LDB4MDQsIDB4NDIsMHhBMCwgMHhGNiwweDA2LCAweDQyLDB4QTAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHhBMiwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgyNCwweDk0LCAweDAwLDB4N0UsIDB4MjUsMHgxNCwgCi0weDAwLDB4ODAsIDB4MjMsMHg5NCwgMHgwMCwweDY4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4N0MsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4N0EsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4NzgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4NzYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4NzQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4NzIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHg3MCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4OTQsMHgxMywgCi0weEZGLDB4RkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHgzNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhEMCwweERDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4MzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDIzLDB4OTQsIDB4MDAsMHhCMCwgMHg5MywweDk2LCAweEZGLDB4MkMsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4MkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4M0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDIzLDB4OTQsIDB4MDAsMHg5OCwgMHg5MywweDk2LCAweEZGLDB4MjQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0YsMHgyNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgCi0weDAwLDB4MDYsIDB4RjMsMHg4NSwgMHg0MiwweDU0LCAweDg3LDB4MDIsIDB4RkYsMHgzNCwgMHhGMywweDg2LCAweDM4LDB4QTgsIDB4RjMsMHg4NSwgCi0weDQyLDB4NDQsIDB4RjcsMHgwNSwgMHg0MiwweDY0LCAweEYzLDB4ODQsIDB4NDAsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGNywweEM4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEEyLDB4QTksIDB4RjMsMHg4MiwgMHgxNywweDcwLCAweEY3LDB4MDQsIDB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MUIsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4NiwgMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDFFLDB4QzAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjYsMHgwNCwgMHg2RiwweDM0LCAweEY3LDB4MDQsIDB4NDIsMHg2NCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QTMsMHhBQywgMHgwNiwweEIwLCAweDAwLDB4MDIsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4RjYsMHg4NCwgCi0weDQwLDB4N0MsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweEEzLDB4QUMsIDB4QzcsMHgzNCwgCi0weDY4LDB4MDAsIDB4RjUsMHg4NCwgMHg0MCwweDc0LCAweEY2LDB4MDQsIDB4NEYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzYsMHgyQywgCi0weDYyLDB4MDAsIDB4NzYsMHgzMCwgMHhGRiwweEZBLCAweEM1LDB4QUMsIDB4NzAsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MjYsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDAsIDB4NzcsMHgyRCwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHg0NiwweDMxLCAweDAwLDB4MDAsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweDMwLCAweDc0LDB4MDAsIDB4RjcsMHgwMiwgCi0weEZGLDB4MDAsIDB4QzYsMHhCNCwgMHg3NCwweDAwLCAweEM2LDB4MzAsIDB4NjgsMHgwMCwgMHhGNiwweDJGLCAweDI4LDB4MDAsIDB4RjUsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFGLDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNCwgMHg0MCwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNCwgMHg0MCwweDc0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhCRSwweEY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg4MCwgMHhGNywweDA0LCAweDQyLDB4NTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QTMsMHhGNCwgMHgyMCwweDNBLCAweDAwLDB4MDcsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjUsMHgwNSwgMHg0MiwweDU4LCAweEY3LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDcsIDB4RUUsMHgwMCwgMHhBNiwweEYwLCAweDIzLDB4OTQsIDB4MDAsMHgxRSwgMHhGNiwweDA0LCAweDQyLDB4NjAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NjYsIDB4RjQsMHg4NCwgMHg0MCwweDc4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA0LDB4QTQsIDB4MDAsMHgwMiwgMHg3NCwweDI1LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4MzEsIDB4MDAsMHgxRSwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4OTUsMHgxNiwgCi0weEZGLDB4N0MsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyNSwweDE0LCAweDAwLDB4MjAsIDB4OTUsMHgxNiwgCi0weEZGLDB4OTQsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg4NSwweDE2LCAweEZGLDB4N0MsIDB4MDUsMHhBNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLCAweDI4LDB4MDAsIDB4MjMsMHg5NCwgCi0weDAwLDB4MUMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MjUsMHgxNCwgMHgwMCwweDUwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDFBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDEyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDEwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHgyNiwweDE0LCAweDAwLDB4NjgsIDB4QzcsMHgzOCwgCi0weDQ3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NjQsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NjIsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NjAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NUUsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NUMsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NUEsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MDUsMHhBQywgCi0weDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDIzLDB4MTQsIDB4MDAsMHg1OCwgMHg3NSwweEFELCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4OTYsMHgxMywgCi0weEZGLDB4RkMsIDB4OTUsMHgxNiwgMHhGRiwweDhDLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQyLDB4NTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHg4QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MjUsMHgxNCwgCi0weDAwLDB4MzgsIDB4OTUsMHgxNiwgMHhGRiwweDg0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENGLDB4MjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNCwgMHg0MiwweDY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgCi0weEZGLDB4ODQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4OTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEY3LDB4QzgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QTYsMHhGMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDQyLDB4NTgsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweEE3LDB4MzAsIDB4RjUsMHgwMiwgCi0weDE3LDB4NzAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY1LDB4MDIsIDB4MDAsMHgxQywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgCi0weEE3LDB4NTAsIDB4QjUsMHgzQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4QTcsMHg1MCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwMiwgMHgwMCwweDFCLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDQyLDB4NDQsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHhDMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MzAsIDB4RjYsMHgwNCwgCi0weDZGLDB4MzQsIDB4RjcsMHgwNCwgMHg0MiwweDY0LCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhBOSwweEYwLCAweDA3LDB4MzAsIDB4MDAsMHgwMiwgMHg4NiwweDNBLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDAsIDB4RjYsMHg4NCwgMHg0MCwweDdDLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHgzMCwgCi0weDc3LDB4QzAsIDB4RjcsMHgwNCwgMHg0MCwweDc0LCAweEM2LDB4QjQsIDB4NjgsMHgwMCwgMHg3NiwweDMxLCAweEZGLDB4RjAsIDB4QzYsMHgwMCwgCi0weDYyLDB4MDAsIDB4OTYsMHgxNiwgMHhGRiwweEY0LCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzcsMHhCNCwgCi0weDAwLDB4MDgsIDB4NzAsMHgzRSwgMHhGRiwweEU4LCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhBOCwweDM0LCAweEY2LDB4MDIsIDB4MDAsMHhGRiwgMHg4MywweDE2LCAweEZGLDB4RjQsIDB4ODMsMHg5NiwgCi0weEZGLDB4RjQsIDB4RjcsMHgwNCwgMHg0MCwweDc4LCAweEM2LDB4OTgsIDB4MzgsMHgwMCwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MjYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NjQsMHgwMCwgMHhDMCwweDM2LCAweDVBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEE4LDB4M0QsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEE4LDB4NzUsIDB4RjYsMHgwNiwgCi0weDQyLDB4N0MsIDB4RjcsMHgwNCwgMHg0MiwweDdDLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweEE5LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjMsMHgwNCwgMHg0MiwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQywweDYwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDA0LCAweDQwLDB4NzgsIDB4RjcsMHgwNCwgCi0weDRGLDB4NTgsIDB4RjUsMHgwNCwgMHg0MCwweDc0LCAweEYzLDB4ODQsIDB4NDAsMHg3QywgMHhGMywweDA0LCAweDQwLDB4N0MsIDB4QzYsMHgyMCwgCi0weDcyLDB4MDAsIDB4NzYsMHgzMCwgMHhGRiwweEZBLCAweEM1LDB4OUMsIDB4MzAsMHgwMCwgMHhDNSwweEE4LCAweDU4LDB4MDAsIDB4MDUsMHhBQywgCi0weDAwLDB4MjYsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDc0LDB4QUQsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4NzMsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhENCwgMHhDNSwweDI4LCAweDcyLDB4MDAsIDB4NzUsMHgyOCwgCi0weEZGLDB4RkEsIDB4ODMsMHgxNiwgMHhGRiwweEY0LCAweDgzLDB4OTYsIDB4RkYsMHhGNCwgMHg0NiwweDMxLCAweDAwLDB4MDAsIDB4NDUsMHgyOSwgCi0weDAwLDB4MDAsIDB4QzcsMHgxOCwgMHgzOCwweDAwLCAweEM0LDB4MjAsIDB4NzAsMHgwMCwgMHgwNCwweDIwLCAweDAwLDB4MjYsIDB4NzMsMHgyMSwgCi0weDAwLDB4MUUsIDB4QzYsMHhCNCwgMHg0RiwweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNCwweDgyLCAweDAwLDB4RkYsIDB4QzYsMHgzMCwgCi0weDRDLDB4MDAsIDB4RjMsMHg4MiwgMHhGRiwweDAwLCAweEM2LDB4QjQsIDB4M0MsMHgwMCwgMHhDNiwweDMwLCAweDY4LDB4MDAsIDB4RjYsMHgyRiwgCi0weDI4LDB4MDAsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDczLDB4MTgsIDB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZGLDB4Q0MsIDB4ODMsMHgxNiwgCi0weEZGLDB4RDQsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweEM1LDB4MjgsIDB4NEMsMHgwMCwgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4NzYsMHg5RCwgMHgwMCwweDEwLCAweDc2LDB4QjUsIDB4RkYsMHhGOCwgMHhDNywweDM4LCAweDRDLDB4MDAsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4RjYsMHhBRiwgMHgyOCwweDAwLCAweDg3LDB4MjIsIDB4MDAsMHgwMCwgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4ODMsMHgxNiwgCi0weEZGLDB4Q0MsIDB4RjMsMHg4MiwgMHhGRiwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4QzcsMHgzOCwgMHgzQywweDAwLCAweEM1LDB4MjgsIDB4NzAsMHgwMCwgMHhGNSwweDIzLCAweDI4LDB4MDAsIDB4ODcsMHgyMiwgCi0weDAwLDB4MDAsIDB4RjMsMHgwNCwgMHg0MCwweDdDLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzMsMHgxOSwgCi0weDAwLDB4MTAsIDB4OTMsMHgxNiwgMHhGRiwweEVDLCAweDczLDB4OTksIDB4RkYsMHhGOCwgMHhDNywweDM4LCAweDRDLDB4MDAsIDB4QzcsMHgxQywgCi0weDcwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweERDLCAweDIzLDB4MTQsIDB4MDAsMHgyMiwgMHg4MywweDFBLCAweDAwLDB4MDAsIDB4NzcsMHg5OSwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEMzLDB4MTgsIDB4N0YsMHhDMCwgMHg3MywweDE5LCAweEZGLDB4RjAsIDB4RjMsMHgyMywgCi0weDI4LDB4MDAsIDB4RjMsMHg4NiwgMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDFGLDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NDAsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDQsIDB4NDAsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4QkUsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4OTgsIDB4RjMsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QUUsMHhFNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweEFELDB4ODksIDB4MjcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU0LCAweDIzLDB4OTQsIDB4MDAsMHgxRSwgMHhGNiwweDA0LCAweDQyLDB4NjAsIDB4MjQsMHg5NCwgCi0weDAwLDB4NjYsIDB4OTQsMHg5NiwgMHhGRiwweDY0LCAweEYzLDB4MDQsIDB4NDAsMHg3OCwgMHgyNCwweDk0LCAweDAwLDB4MjAsIDB4OTQsMHg5NiwgCi0weEZGLDB4OTQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDMsMHgxOCwgMHgwMCwweDAyLCAweDkzLDB4MTYsIDB4RkYsMHg3NCwgMHg3NCwweDE5LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4MDUsMHg5OCwgMHgwMCwweDAyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweDMxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLCAweDI4LDB4MDAsIDB4MjMsMHg5NCwgCi0weDAwLDB4MUMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4ODUsMHgxNiwgMHhGRiwweDY0LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDFBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDEyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDEwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgyNiwweDE0LCAweDAwLDB4NjgsIDB4QzcsMHgzOCwgCi0weDQ3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwgCi0weDAwLDB4NjQsIDB4OTMsMHgxNiwgMHhGRiwweDY0LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDYyLCAweDk0LDB4OTYsIDB4RkYsMHg2NCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHg2MCwgMHg5NSwweDE2LCAweEZGLDB4NjQsIDB4MDUsMHhBQywgCi0weDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4NUUsIDB4OTMsMHgxNiwgCi0weEZGLDB4NjQsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgCi0weDAwLDB4NUMsIDB4OTQsMHg5NiwgMHhGRiwweDY0LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDVBLCAweDk1LDB4MTYsIDB4RkYsMHg2NCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgyNCwweDk0LCAweDAwLDB4NTAsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4NTgsIDB4MDUsMHhBQywgCi0weDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDkzLDB4MTYsIDB4RkYsMHg2NCwgMHg3NSwweEFELCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4OTYsMHgxMywgCi0weEZGLDB4RkMsIDB4OTQsMHg5NiwgMHhGRiwweDhDLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQyLDB4NTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHg4QywgMHgyMywweDE0LCAweDAwLDB4MzgsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MjcsMHg4MCwgMHgwMCwweDA3LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDE2LCAweEZGLDB4ODQsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0YsMHgyNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjcsMHg4MCwgCi0weDAwLDB4MDcsIDB4RjcsMHg4NSwgMHg0MiwweDU4LCAweDI3LDB4ODAsIDB4MDAsMHgwNywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjQsMHg4NCwgCi0weDQyLDB4NjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4ODQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4MTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjcsMHhDOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhBRCwweDVELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4NTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg1OCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgCi0weDAwLDB4MUMsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4QUUsMHhFNCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgCi0weEFFLDB4RTQsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NDAsMHg3OCwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4MDcsMHgzOCwgCi0weDAwLDB4MTYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweEY0LDB4MDYsIDB4M0IsMHg5MCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHg3NiwweDM1LCAweDAwLDB4MDYsIDB4QTcsMHgyRSwgCi0weDYwLDB4MDIsIDB4QzUsMHgyQywgMHg2MCwweDAwLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDQwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDIsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzMsMHhCNywgMHhGRiwweEYwLCAweEVFLDB4MDAsIDB4QUUsMHg1NSwgMHg5NSwweDE2LCAweEZGLDB4NjQsIDB4QTcsMHgyRSwgCi0weDYwLDB4MDIsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NDAsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MDQsIDB4MjMsMHgxNCwgCi0weDAwLDB4ODgsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4QTYsMHhBQSwgMHg2OCwweDAyLCAweDc3LDB4MUQsIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDgsIDB4ODUsMHgzQSwgMHgwMCwweDA0LCAweDg0LDB4QkEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxQSwgCi0weDAwLDB4MDQsIDB4OTQsMHg5QSwgMHgwMCwweDAwLCAweDg1LDB4OTYsIDB4RkYsMHg3QywgMHhFMCwweDAwLCAweEFFLDB4NzgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODQsMHg5NiwgMHhGRiwweDY0LCAweEE3LDB4MkUsIDB4NjAsMHgwMiwgMHg3NiwweEE1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgCi0weDQwLDB4MDAsIDB4ODUsMHhCQSwgMHgwMCwweDA0LCAweDg1LDB4MTYsIDB4RkYsMHg2NCwgMHhGNiwweDA2LCAweDNCLDB4OTAsIDB4ODcsMHgyQSwgCi0weDAwLDB4MDAsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEE2LDB4QkEsIDB4NjAsMHgwMiwgMHgyMCwweDFFLCAweDAwLDB4MDAsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4RUUsMHgwMCwgCi0weEFFLDB4QzksIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweDgzLDB4MTYsIDB4RkYsMHg3OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgxOSwgCi0weEZGLDB4RjAsIDB4QzYsMHhCOCwgMHg2OCwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyNCwgCi0weDY4LDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhDMSwweDJDLCAweDAwLDB4MDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MTAsIDB4RjcsMHgwNCwgMHg0MCwweDg0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEFGLDB4M0MsIDB4RjYsMHgwNiwgMHg0MiwweEI4LCAweEY3LDB4MDQsIDB4NDIsMHhCOCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjMsMHgwNiwgMHgzNiwweDc4LCAweEYzLDB4MDUsIDB4NDIsMHg0NCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHhGNywweDA0LCAweDRGLDB4NUMsIDB4RjMsMHg4NCwgCi0weDQyLDB4NUMsIDB4ODMsMHgzQSwgMHgwMCwweDA0LCAweEM0LDB4MzgsIDB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZGLDB4RUMsIDB4NzcsMHgxRCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHgzOCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgwNCwweEI4LCAweDAwLDB4MEMsIDB4ODMsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MUUsIDB4MzIsMHgwMCwgMHhFQywweDAwLCAweEIwLDB4NzAsIDB4QzUsMHgwNCwgCi0weDAwLDB4MDAsIDB4QTYsMHhBMiwgMHg0OCwweDAyLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhBRiwweEE4LCAweEM2LDB4MjAsIDB4NDgsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEFGLDB4QUMsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEFGLDB4QjksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjUsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweEUwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4QUYsMHhGNCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhBRiwweEZDLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweEFGLDB4RkQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEIwLDB4MEQsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEIwLDB4NTksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3QSwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEIwLDB4NjQsIDB4QzcsMHgyMCwgMHg0OCwweDAwLCAweDg3LDB4M0EsIDB4MDAsMHgwOCwgMHhGNiwweDA2LCAweDQwLDB4OTgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QTYsMHhCQSwgMHg2MCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEIwLDB4NjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA0LDB4QTQsIDB4MDAsMHgwQywgMHhFMCwweDAwLCAweEFGLDB4NjAsIDB4MDMsMHg5QywgCi0weDAwLDB4MDEsIDB4ODMsMHgxNiwgMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDFFLCAweDMyLDB4MDAsIDB4RUMsMHgwMCwgCi0weEIxLDB4MDQsIDB4RjMsMHgwNiwgMHgzNiwweDc4LCAweEY2LDB4ODQsIDB4NEYsMHg1QywgMHg3NywweDFELCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDM4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDA3LDB4MzgsIDB4MDAsMHgwQywgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDgsIDB4RjYsMHg4NCwgMHg0RiwweDU4LCAweDc3LDB4MzksIDB4MDAsMHgwNiwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweEY0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEZBLDB4OTgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4NDIsMHg2QywgMHg4MywweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweEM3LDB4MUMsIDB4NzAsMHgwMCwgMHhGNywweDA1LCAweDQyLDB4NUMsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODUsIDB4NDIsMHg2QywgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMCwgMHhCMSwweDA4LCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhFMCwweDAwLCAweEIxLDB4MDgsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjMsMHgwNSwgMHg0MiwweDQ0LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM1LDB4QTAsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDA3LDB4NzAsIDB4RjcsMHgwNCwgCi0weDZFLDB4NTAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjEsMHg2RCwgMHgwNiwweDM4LCAweDAwLDB4MUMsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM0LDB4MjAsIDB4NzAsMHgwMCwgMHhDMCwweDIyLCAweDcyLDB4MDAsIDB4RTQsMHgwMCwgCi0weEIxLDB4NUQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA1LDB4QUMsIDB4MDAsMHgwMSwgMHgyNiwweEI0LCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCMSwweDQwLCAweDA2LDB4MzAsIDB4MDAsMHgwNCwgMHhDNCwweDIwLCAweDU4LDB4MDAsIDB4QzAsMHgyMiwgCi0weDVBLDB4MDAsIDB4RTQsMHgwMCwgMHhCMSwweDgxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNCwweDIwLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDc4LDB4RDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEIxLDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNCwgMHg0MCwweDk0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDIyLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEIxLDB4RUQsIDB4RjQsMHgwNSwgMHg0MCwweDkwLCAweEY3LDB4MDQsIDB4NkUsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHhCQSwgCi0weDFELDB4REMsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHg5NiwweEJBLCAweDFELDB4REMsIDB4ODcsMHgzQSwgCi0weDFELDB4REMsIDB4RTAsMHgwMCwgMHhCMSwweEYwLCAweEY1LDB4ODUsIDB4N0EsMHhEMCwgMHhGMCwweDA1LCAweDdBLDB4RDAsIDB4RjUsMHg4NCwgCi0weDQwLDB4OTAsIDB4RjAsMHgwNSwgMHg0MCwweDg0LCAweEY1LDB4ODUsIDB4NDAsMHg5NCwgMHhGNSwweDg2LCAweEUwLDB4MDAsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDUsMHhBMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDZFLDB4NTAsIDB4RjQsMHgwNSwgMHg0MCwweDg0LCAweDg1LDB4QkEsIDB4MUQsMHhEQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4NSwgCi0weDNCLDB4NjQsIDB4RjUsMHg4NCwgMHhFMCwweDAwLCAweEYwLDB4MDUsIDB4NDIsMHg1QywgMHg5NSwweEJBLCAweDAwLDB4MTAsIDB4RjUsMHg4NCwgCi0weEUwLDB4MDQsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDk1LDB4QkEsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjUsMHg4NiwgCi0weDNBLDB4NEMsIDB4RjUsMHg4NSwgMHg0MiwweDQ0LCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjUsMHg4MiwgMHgwMCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweEIyLDB4NjgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4ODYsIDB4MzUsMHhFQywgMHhGNSwweDg1LCAweDQyLDB4MzAsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4QzgsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDAsIDB4OTMsMHgxNiwgMHhGRiwweDk0LCAweDI0LDB4ODAsIDB4MDAsMHgwOCwgMHg5NCwweDk2LCAweEZGLDB4ODQsIDB4MjMsMHg4MCwgCi0weDAwLDB4MDcsIDB4ODMsMHgxNiwgMHhGRiwweDk0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4NTQsIDB4MjAsMHgxRSwgCi0weDAwLDB4MDcsIDB4RUUsMHgwMCwgMHhCNSwweDY0LCAweEM3LDB4MUMsIDB4MzgsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgyNCwgMHg3MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgyNiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4RjUsMHg4NCwgCi0weDRGLDB4NTgsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweEZGLCAweEM2LDB4QjYsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweEIzLDB4MkQsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDEsIDB4RTYsMHgwMCwgMHhCMywweDJELCAweDc3LDB4MzUsIDB4MDAsMHgwNiwgMHhBNiwweEJBLCAweDU4LDB4MDIsIDB4QzcsMHgzOCwgCi0weDU4LDB4MDAsIDB4NzYsMHgzOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDY3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzNiwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4QjMsMHgzMSwgMHhDNiwweEI4LCAweDAwLDB4MDAsIDB4QzcsMHgyQywgCi0weDAwLDB4MDAsIDB4RTAsMHgwMCwgMHhCMywweDMwLCAweEM2LDB4QjgsIDB4MDAsMHgwMCwgMHhGNiwweDg0LCAweDRGLDB4NTgsIDB4RjcsMHgwNCwgCi0weDRGLDB4NTgsIDB4QzUsMHgzNCwgMHgwMCwweDAwLCAweEMwLDB4MkEsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEI1LDB4NUQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzQiwweEJDLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZGLDB4M0MsIDB4MDQsMHgyOCwgCi0weDAwLDB4MUMsIDB4RjcsMHgwNCwgMHgzQiwweEI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgCi0weEI0LDB4NDAsIDB4OTYsMHg5NiwgMHhGRiwweEFDLCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjQsMHg4NiwgMHgzQiwweEI0LCAweEM2LDB4MzgsIDB4NDgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MEMsIDB4QzMsMHgwNCwgCi0weDAwLDB4MDAsIDB4OTMsMHgxNiwgMHhGRiwweDM0LCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDJBLCAweDAwLDB4MUMsIDB4ODUsMHg5NiwgCi0weEZGLDB4M0MsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QjMsMHhDMCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDQsIDB4ODcsMHgyQSwgMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEIzLDB4QzAsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEIzLDB4RDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg5NCwweDk2LCAweEZGLDB4MzQsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weEI0LDB4MEMsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEI0LDB4MTQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MjIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhCNCwweDE1LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCNCwweDI1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgCi0weEZGLDB4MzQsIDB4ODQsMHg5NiwgMHhGRiwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEI0LDB4NDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4M0MsIDB4ODQsMHg5NiwgCi0weEZGLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEI0LDB4ODEsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEFDLCAweEYzLDB4MDYsIDB4M0IsMHhCNCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEIwLCAweEUwLDB4MDAsIDB4QjQsMHhGNCwgMHg5NiwweDk2LCAweEZGLDB4QjQsIDB4MjcsMHgxNCwgCi0weDAwLDB4NTQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk0LDB4MTMsIDB4RkYsMHhGQywgMHhGNCwweDg2LCAweDNCLDB4QjQsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweDRDLCAweDk1LDB4MTYsIDB4RkYsMHg0NCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg0QywgMHg4NSwweDE2LCAweEZGLDB4NDQsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCNCwweEYxLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4QUMsIDB4RjMsMHgwNiwgCi0weDNCLDB4QjQsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDMwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4QjAsIDB4OTYsMHg5NiwgCi0weEZGLDB4QjQsIDB4RjcsMHgwNSwgMHgzQiwweEJDLCAweEUwLDB4MDAsIDB4QjQsMHhGOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjUsMHgyRCwgMHgyNywweDE0LCAweDAwLDB4MDgsIDB4ODQsMHg5NiwgCi0weEZGLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MjQsIDB4NzAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4QjQsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDQsIDB4OTQsMHg5NiwgMHhGRiwweDU0LCAweDg0LDB4OTYsIDB4RkYsMHg5NCwgMHg5MywweDNBLCAweEZGLDB4QzAsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhCNSwweDU0LCAweDk0LDB4OTYsIDB4RkYsMHg5NCwgMHg4MywweDE2LCAweEZGLDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgxOCwgMHg3MCwweDAwLCAweEY0LDB4ODQsIDB4NEYsMHg1OCwgMHgwMywweDE4LCAweDAwLDB4MDQsIDB4OTMsMHgxNiwgCi0weEZGLDB4NTQsIDB4ODMsMHgxNiwgMHhGRiwweDk0LCAweDk0LDB4QkEsIDB4RkYsMHhDMCwgMHgwMywweDE4LCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgCi0weEZGLDB4OTQsIDB4OTUsMHgxNiwgMHhGRiwweDNDLCAweDkzLDB4OTYsIDB4RkYsMHg4QywgMHhFMCwweDAwLCAweEIyLDB4QjAsIDB4MDMsMHg5QywgCi0weDAwLDB4MDEsIDB4ODQsMHg5NiwgMHhGRiwweDk0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEI1LDB4ODQsIDB4RjMsMHg4MiwgMHgwMCwweDAxLCAweEY0LDB4MDQsIDB4NEYsMHg1OCwgMHhFMCwweDAwLCAweEJFLDB4RTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODMsMHgxNiwgMHhGRiwweEI4LCAweDg0LDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwgCi0weDRBLDB4MDAsIDB4RUMsMHgwMCwgMHhCNSwweENDLCAweDkzLDB4MTYsIDB4RkYsMHg3QywgMHgyNiwweDk0LCAweDAwLDB4MDQsIDB4ODcsMHgzNiwgCi0weEZGLDB4QzAsIDB4ODMsMHgxNiwgMHhGRiwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEJCLDB4OTgsIDB4MDMsMHg5QywgMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwgCi0weDRBLDB4MDAsIDB4RUMsMHgwMCwgMHhCNSwweEExLCAweDA2LDB4QjQsIDB4MDAsMHgwNCwgMHhGNCwweDA0LCAweDRGLDB4NTgsIDB4ODMsMHgxNiwgCi0weEZGLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MUEsIDB4NDIsMHgwMCwgMHhFNiwweDAwLCAweEJBLDB4MkQsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweDc0LCAweDIzLDB4ODAsIDB4MDAsMHgwNywgMHgyMCwweDFFLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgCi0weEI3LDB4NDgsIDB4QzcsMHgxQywgMHgzOCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgxOCwgCi0weDcwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI2LCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgCi0weDAwLDB4RkYsIDB4QzYsMHhCNiwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4QjYsMHg2OSwgMHgyMCwweDM2LCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weEI2LDB4NjksIDB4NzcsMHgzNSwgMHgwMCwweDA2LCAweEE2LDB4QkEsIDB4NTgsMHgwMiwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4NzYsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NjcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHhCNiwweDZELCAweEM2LDB4QjgsIDB4MDAsMHgwMCwgMHhDNywweDJDLCAweDAwLDB4MDAsIDB4RTAsMHgwMCwgCi0weEI2LDB4NkMsIDB4QzYsMHhCOCwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4QzUsMHgzNCwgCi0weDAwLDB4MDAsIDB4QzAsMHgyQSwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QjcsMHg0MSwgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODQsMHg5NiwgCi0weEZGLDB4NzQsIDB4ODYsMHhBQSwgMHgwMCwweDFDLCAweDgzLDB4MTYsIDB4RkYsMHgzQywgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDEsIDB4OTQsMHg5NiwgMHhGRiwweDc0LCAweDg3LDB4MUEsIDB4MDAsMHgxQywgMHgwNCwweEE4LCAweDAwLDB4MUMsIDB4OTQsMHg5NiwgCi0weEZGLDB4MzQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QjYsMHhDQywgMHgwNCwweDE4LCAweDAwLDB4MUMsIDB4ODYsMHhBQSwgCi0weDAwLDB4MjAsIDB4ODcsMHgxQSwgMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEI2LDB4RDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEI2LDB4REQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4MzQsIDB4ODcsMHgyMiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5QSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weEI3LDB4MUMsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEI3LDB4MjQsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5QSwgMHgwMCwweDA0LCAweDg3LDB4MjIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhCNywweDI1LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCNywweDM1LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCNywweDQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDk2LCAweEZGLDB4ODQsIDB4RTAsMHgwMCwgCi0weEI1LDB4RUMsIDB4MDMsMHg5QywgMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg3NCwgMHg4MywweDE2LCAweEZGLDB4OTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyNiwgMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4QkIsMHg5OCwgMHgyMywweDAwLCAweDAwLDB4MDgsIDB4ODQsMHg5NiwgCi0weEZGLDB4ODQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MjYsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweEJCLDB4OTksIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4RjYsMHg4NCwgMHg0MCwweDdDLCAweEY3LDB4MDQsIDB4NDAsMHg3NCwgMHhDNiwweEI0LCAweDY4LDB4MDAsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI2LCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc3LDB4QjQsIDB4MDAsMHgwOCwgMHg3MCwweDNFLCAweEZGLDB4RTgsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEI4LDB4MDQsIDB4RjUsMHg4MiwgCi0weDAwLDB4RkYsIDB4ODQsMHg5NiwgMHhGRiwweDg0LCAweDgzLDB4MTYsIDB4RkYsMHg4QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyNCwgCi0weDMyLDB4MDAsIDB4ODQsMHg5NiwgMHhGRiwweDdDLCAweEM3LDB4MzgsIDB4NzAsMHgwMCwgMHhDNywweDI0LCAweDcwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MjYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NUMsMHgwMCwgMHhDMCwweDM2LCAweDYyLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEI4LDB4MEQsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEJCLDB4OTgsIDB4MjMsMHg4MCwgCi0weDAwLDB4MDcsIDB4MjAsMHgxRSwgMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4QjgsMHhDOCwgMHhDNywweDFDLCAweDM4LDB4MDAsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MTgsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweEI2LCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weEI4LDB4OTEsIDB4MjAsMHgzNiwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4QjgsMHg5MSwgMHg3NywweDM1LCAweDAwLDB4MDYsIDB4QTYsMHhCQSwgCi0weDU4LDB4MDIsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDc2LDB4MzksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDY3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweDIwLDB4MzYsIDB4MDAsMHgwMiwgMHhFNiwweDAwLCAweEI4LDB4OTUsIDB4QzYsMHhCOCwgCi0weDAwLDB4MDAsIDB4QzcsMHgyQywgMHgwMCwweDAwLCAweEUwLDB4MDAsIDB4QjgsMHg5NCwgMHhDNiwweEI4LCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgCi0weDRGLDB4NTgsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEM1LDB4MzQsIDB4MDAsMHgwMCwgMHhDMCwweDJBLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEI4LDB4QzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4NEMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQywweDYwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4NEMsIDB4RTAsMHgwMCwgCi0weEI4LDB4MTQsIDB4MDMsMHg5QywgMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg4NCwgMHg4MywweDE2LCAweEZGLDB4OEMsIDB4RjMsMHg4NCwgCi0weDQwLDB4N0MsIDB4RjUsMHgwNCwgMHg0MCwweDc0LCAweEM0LDB4QTQsIDB4MzIsMHgwMCwgMHg5NCwweDk2LCAweEZGLDB4MzQsIDB4ODMsMHgxNiwgCi0weEZGLDB4MzQsIDB4QzUsMHg5QywgMHgzOCwweDAwLCAweEM1LDB4QTgsIDB4NTgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MjYsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDAsIDB4NzcsMHgyRCwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHg3NCwweDJELCAweDAwLDB4MUUsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4NzMsMHg5RCwgMHgwMCwweDEwLCAweDczLDB4OUQsIDB4RkYsMHhGOCwgMHhDNCwweEE0LCAweDMwLDB4MDAsIDB4OTQsMHg5NiwgCi0weEZGLDB4M0MsIDB4ODMsMHgxNiwgMHhGRiwweDdDLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHhDNCwweDk4LCAweDQ4LDB4MDAsIDB4OTQsMHg5NiwgCi0weEZGLDB4M0MsIDB4MDQsMHhBNCwgMHgwMCwweDI2LCAweDk0LDB4OTYsIDB4RkYsMHgzQywgMHg3MywweDI1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwgCi0weEZGLDB4RTUsIDB4OTMsMHgxNiwgMHhGRiwweDZDLCAweDc0LDB4QTUsIDB4MDAsMHgxRSwgMHg5NCwweDk2LCAweEZGLDB4NjQsIDB4NzQsMHhBNCwgCi0weEZGLDB4RTUsIDB4OTQsMHg5NiwgMHhGRiwweDY0LCAweDgzLDB4MTYsIDB4RkYsMHg3QywgMHhGNCwweDg0LCAweDRGLDB4NTgsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4QzYsMHgxOCwgMHg0QSwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhGQSwgMHg0NiwweDMxLCAweDAwLDB4MDAsIDB4RjMsMHgwMiwgCi0weDAwLDB4RkYsIDB4QzYsMHgzMCwgMHgzNCwweDAwLCAweEY0LDB4ODIsIDB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDRDLDB4MDAsIDB4QzYsMHgzMCwgCi0weDY4LDB4MDAsIDB4RjYsMHgyRiwgMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4MzQsIDB4QzcsMHgzOCwgCi0weDQ3LDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDczLDB4MTksIDB4MDAsMHgxMCwgMHg5MywweDE2LCAweEZGLDB4MzQsIDB4NzQsMHg5OSwgCi0weEZGLDB4RjgsIDB4RjMsMHgwMiwgMHgwMCwweEZGLCAweEM3LDB4MzgsIDB4MzQsMHgwMCwgMHhDNywweDI0LCAweDcwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4MzQsIDB4MjQsMHg5NCwgMHgwMCwweENBLCAweDg0LDB4QTYsIDB4MDAsMHgwMCwgMHg3NywweEE1LCAweDAwLDB4MUUsIDB4NzcsMHhCQywgCi0weEZGLDB4RTUsIDB4QzQsMHhBNCwgMHg3RiwweEMwLCAweDc0LDB4QTUsIDB4RkYsMHhGMCwgMHg4MywweDE2LCAweEZGLDB4M0MsIDB4RjQsMHhBRiwgCi0weDI4LDB4MDAsIDB4RjQsMHg4NCwgMHg0RiwweDU4LCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHhDNSwweDI4LCAweDRBLDB4MDAsIDB4NzUsMHgyOCwgCi0weEZGLDB4RkEsIDB4ODMsMHgxNiwgMHhGRiwweDZDLCAweDQ1LDB4MjksIDB4MDAsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4RkYsIDB4QzUsMHgyOCwgCi0weDRDLDB4MDAsIDB4ODQsMHg5NiwgMHhGRiwweDNDLCAweEM3LDB4MzgsIDB4MzcsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4RjMsMHgwMiwgCi0weEZGLDB4MDAsIDB4QzcsMHgzOCwgMHgzNCwweDAwLCAweEM1LDB4MjgsIDB4NzAsMHgwMCwgMHhGNSwweDI3LCAweDI4LDB4MDAsIDB4ODcsMHgyNiwgCi0weDAwLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweDY0LCAweDg0LDB4MTYsIDB4RkYsMHg3QywgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4RjQsMHg4MiwgMHgwMCwweEZGLCAweEM3LDB4MzgsIDB4NEMsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4M0MsIDB4QzMsMHg5QywgCi0weDcwLDB4MDAsIDB4RTAsMHgwMCwgMHhCRSwweEU0LCAweEYzLDB4OUIsIDB4MjgsMHgwMCwgMHhGNywweDA0LCAweDQwLDB4N0MsIDB4RjYsMHgwNCwgCi0weDQwLDB4NzQsIDB4QzcsMHgzOCwgMHg3MCwweDAwLCAweEM3LDB4MzAsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzcsMHhCNCwgCi0weDAwLDB4MDgsIDB4NzAsMHgzRSwgMHhGRiwweEU4LCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCQSwweDdELCAweDI1LDB4ODAsIDB4MDAsMHgwNywgMHhFMCwweDAwLCAweEJFLDB4RTQsIDB4MDQsMHgyMCwgCi0weDAwLDB4NDAsIDB4RTAsMHgwMCwgMHhCQSwweEQ4LCAweEM0LDB4MkMsIDB4MDAsMHgwMCwgMHhDNywweDMwLCAweDQyLDB4MDAsIDB4ODQsMHg5NiwgCi0weDAwLDB4MDAsIDB4NzUsMHgzOCwgMHhGRiwweEZBLCAweDA2LDB4MjQsIDB4MDAsMHgwQSwgMHgyMCwweDJFLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgCi0weEJBLDB4RDQsIDB4MDcsMHgzMCwgMHgwMCwweDBFLCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweDAwLDB4RkYsIDB4QzYsMHhCNCwgCi0weDc0LDB4MDAsIDB4NDcsMHgyOSwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCQSwweDc0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhFMCwweDAwLCAweEJBLDB4OEMsIDB4MDUsMHhBQywgCi0weDAwLDB4MDEsIDB4RjQsMHgwMiwgMHgwMCwweDA4LCAweDA3LDB4MjAsIDB4MDAsMHgwNywgMHgyMCwweDNBLCAweDAwLDB4MEUsIDB4RTIsMHgwMCwgCi0weEJCLDB4QTQsIDB4QzUsMHhBMCwgMHg0MCwweDAwLCAweDgzLDB4MTYsIDB4MDAsMHgwMCwgMHhGNSwweDA0LCAweDQwLDB4N0MsIDB4RjQsMHg4MiwgCi0weDAwLDB4RkYsIDB4RjYsMHgwNCwgMHg0RiwweDU4LCAweEM1LDB4OTgsIDB4NTgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MjYsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDAsIDB4NzcsMHgyRCwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweDE4LCAweDYyLDB4MDAsIDB4NzYsMHgzMCwgCi0weEZGLDB4RkEsIDB4NDYsMHgzMSwgMHgwMCwweDAwLCAweEM2LDB4MzAsIDB4NEMsMHgwMCwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4NzcsMHgyOSwgMHgwMCwweDEwLCAweDc3LDB4MzksIDB4RkYsMHhGOCwgMHhDNiwweEI0LCAweDRDLDB4MDAsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweEY1LDB4ODQsIDB4NDAsMHg3NCwgMHhDNSwweDI4LCAweDUwLDB4MDAsIDB4QzUsMHhBQywgCi0weDUwLDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDI2LCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg3NywweDJELCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4NzUsMHgyRCwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4RjcsMHgwMiwgMHhGRiwweDAwLCAweEM2LDB4QjQsIDB4NzQsMHgwMCwgMHhDNiwweDMwLCAweDY4LDB4MDAsIDB4RjYsMHgyRiwgCi0weDI4LDB4MDAsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QTEsIDB4MDAsMHgxMCwgMHg3NiwweEI1LCAweEZGLDB4RjgsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4NEMsMHgwMCwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4RTAsMHgwMCwgCi0weEJCLDB4RjgsIDB4RjYsMHhBRiwgMHgyOCwweDAwLCAweEY0LDB4MDQsIDB4NEYsMHg1OCwgMHhFMCwweDAwLCAweEJFLDB4RTQsIDB4MDQsMHgyMCwgCi0weDAwLDB4NDAsIDB4RjYsMHgwNCwgMHg0RiwweDU4LCAweDgzLDB4MTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDQwLDB4N0MsIDB4RjUsMHg4NCwgCi0weDQwLDB4NzQsIDB4QzYsMHgxOCwgMHg2MiwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhGQSwgMHhDNywweDM4LCAweDcwLDB4MDAsIDB4QzUsMHhBQywgCi0weDcwLDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDI2LCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg3NywweDJELCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4NDYsMHgzMSwgMHgwMCwweDAwLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgCi0weDAwLDB4RkYsIDB4QzYsMHgzMCwgMHg3NCwweDAwLCAweEY3LDB4MDIsIDB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4QzYsMHgzMCwgCi0weDY4LDB4MDAsIDB4RjYsMHgyRiwgMHgyOCwweDAwLCAweDIzLDB4ODAsIDB4MDAsMHgwNywgMHgyMCwweDFFLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgCi0weEJFLDB4RTAsIDB4QzcsMHgxQywgMHgzOCwweDAwLCAweDg0LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyNCwgCi0weDcwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI2LCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgCi0weDAwLDB4RkYsIDB4QzYsMHhCNiwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4QkMsMHg3OSwgMHgyMCwweDM2LCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weEJDLDB4NzksIDB4NzcsMHgzNSwgMHgwMCwweDA2LCAweEE2LDB4QkEsIDB4NTgsMHgwMiwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4NzYsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NjcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHhCQywweDdELCAweEM2LDB4QjgsIDB4MDAsMHgwMCwgMHhDNywweDJDLCAweDAwLDB4MDAsIDB4RTAsMHgwMCwgCi0weEJDLDB4N0MsIDB4QzYsMHhCOCwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4QzUsMHgzNCwgCi0weDAwLDB4MDAsIDB4QzAsMHgyQSwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QkUsMHhEOSwgMHgwNiwweEE4LCAweDAwLDB4MUMsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjQsMHg4NiwgCi0weDNCLDB4QjQsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHg0QywgMHg5NSwweDE2LCAweEZGLDB4NDQsIDB4OTYsMHg5NiwgCi0weEZGLDB4NDAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjMsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHgwNCwgCi0weDRGLDB4NUMsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDk0LDB4OTYsIDB4RkYsMHg1QywgMHg4NiwweDk2LCAweEZGLDB4NDAsIDB4ODMsMHg5NiwgCi0weEZGLDB4NEMsIDB4ODUsMHgxNiwgMHhGRiwweDQ0LCAweDkzLDB4MTYsIDB4RkYsMHgzNCwgMHg4NiwweDFBLCAweDAwLDB4MDgsIDB4OTYsMHg5NiwgCi0weEZGLDB4M0MsIDB4ODcsMHgxQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDMyLCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgCi0weEJELDB4QjgsIDB4OTYsMHgxNiwgMHhGRiwweDlDLCAweDc3LDB4MzEsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QzYsMHgzOCwgMHgzMCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwQywgMHg4NiwweEIyLCAweDAwLDB4MDAsIDB4ODcsMHgyQSwgCi0weDAwLDB4MUMsIDB4ODUsMHg5NiwgMHhGRiwweDVDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEJELDB4NDAsIDB4QzQsMHgwNCwgCi0weDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MkEsIDB4MDAsMHgyMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhCRCwweDQ0LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCRCwweDUxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgCi0weEZGLDB4M0MsIDB4ODYsMHhCMiwgMHgwMCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhCRCwweDkwLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEJELDB4OTgsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHg4NywweDFBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4QkQsMHg5OSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QkQsMHhBOSwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QkQsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4OTQsMHg5NiwgMHhGRiwweDVDLCAweDgzLDB4MTYsIDB4RkYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCRCwweEY5LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4OUMsIDB4ODQsMHg5NiwgCi0weEZGLDB4MzQsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDQ4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4QTAsIDB4RTAsMHgwMCwgCi0weEJFLDB4NzAsIDB4OTYsMHg5NiwgMHhGRiwweEE0LCAweDI3LDB4MTQsIDB4MDAsMHg2NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgCi0weEZGLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg4NCwweDk2LCAweEZGLDB4MzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHg0QywgMHg5NSwweDE2LCAweEZGLDB4NDQsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4NEMsIDB4ODUsMHgxNiwgCi0weEZGLDB4NDQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QkUsMHg3MSwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4OUMsIDB4ODMsMHgxNiwgMHhGRiwweDM0LCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4QTAsIDB4OTYsMHg5NiwgMHhGRiwweEE0LCAweDk3LDB4MUEsIDB4MDAsMHgwOCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCRSwweDk5LCAweEY2LDB4MDYsIDB4NDIsMHg5QywgMHhGNywweDA0LCAweDQyLDB4OUMsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyOCwgCi0weDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHgyOCwgCi0weDAwLDB4MUMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY0LDB4ODQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweDRDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIzLDB4NDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDRDLCAweEUwLDB4MDAsIDB4QkIsMHhGQywgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4ODQsMHgxNiwgCi0weDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4NjAsIDB4ODUsMHgxNiwgMHgwMCwweDAwLCAweDg2LDB4MTYsIDB4MDAsMHgwNCwgMHgwNiwweEE4LCAweDAwLDB4MTgsIDB4QzcsMHgzMCwgCi0weDYwLDB4MDAsIDB4QzUsMHhCOCwgMHg2OCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweEJGLDB4NjQsIDB4MDcsMHgyQywgCi0weDAwLDB4MEUsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEJGLDB4NjEsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweEUwLDB4MDAsIDB4QkYsMHgxOCwgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDcsIDB4RUUsMHgwMCwgMHhDMCwweDRDLCAweDA2LDB4QTgsIDB4MDAsMHgxNiwgMHhGNSwweDA1LCAweDQwLDB4NzQsIDB4RjYsMHgwNSwgCi0weDQwLDB4N0MsIDB4RjMsMHgwMiwgMHgwMCwweDA2LCAweEYzLDB4MDUsIDB4NDIsMHg1NCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4MDUsMHgyOCwgCi0weDAwLDB4MDIsIDB4OTUsMHgxNiwgMHhGRiwweEM0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4MjAsIDB4OTMsMHg5NiwgCi0weEZGLDB4QkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk2LDB4MTYsIDB4RkYsMHhBQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQwLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHhDNCwgMHgyMywweDE0LCAweDAwLDB4MzgsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4OTMsMHgxNiwgMHhGRiwweEI0LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQyLDB4NTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4MDIsIDB4RkYsMHgzNCwgMHg4NiwweDE2LCAweEZGLDB4QUMsIDB4RjcsMHgwNSwgCi0weDQyLDB4NjQsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjcsMHhDOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhDMCwweDFELCAweEYzLDB4MDYsIDB4M0EsMHhEOCwgMHhGNywweDA0LCAweDQyLDB4NTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg1NCwgMHhGMywweDA1LCAweDQyLDB4NDQsIDB4RjMsMHg4MiwgCi0weDE3LDB4NzAsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4ODIsIDB4MDAsMHgxQiwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHhDMSwweEEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4RjUsMHg4NCwgCi0weDRGLDB4NTgsIDB4RjQsMHgwNiwgMHgzQiwweDcwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDc2LDB4MzksIDB4MDAsMHgwNiwgMHhBNywweDJFLCAweDYwLDB4MDIsIDB4QzUsMHgyQywgCi0weDYwLDB4MDAsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNywgCi0weEZGLDB4RjAsIDB4RUUsMHgwMCwgMHhDMSwweDE1LCAweDk2LDB4OTYsIDB4RkYsMHg5QywgMHhBNywweDJFLCAweDYwLDB4MDIsIDB4NzYsMHhBOSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDgzLDB4OTYsIDB4RkYsMHg5QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NDAsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MDQsIDB4MjQsMHg5NCwgCi0weDAwLDB4NjAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4QTYsMHhBQSwgMHg2OCwweDAyLCAweDc3LDB4MUQsIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDgsIDB4ODMsMHhCQSwgMHgwMCwweDA0LCAweDgzLDB4M0EsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHhBNiwgCi0weDAwLDB4MDQsIDB4OTMsMHgyNiwgMHgwMCwweDAwLCAweDg1LDB4OTYsIDB4RkYsMHhBNCwgMHhFMCwweDAwLCAweEMxLDB4MzgsIDB4MjMsMHgwMCwgCi0weDAwLDB4MDcsIDB4QTcsMHgyRSwgMHg2MCwweDAyLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDQwLDB4MDAsIDB4ODUsMHhCQSwgCi0weDAwLDB4MDQsIDB4MjMsMHgwMCwgMHgwMCwweDA3LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg4NywweDJBLCAweDAwLDB4MDAsIDB4NzYsMHhBOSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDgzLDB4OTYsIDB4RkYsMHg5QywgMHhGNiwweDA2LCAweDNCLDB4NzAsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhBNiwweEJBLCAweDYwLDB4MDIsIDB4MjAsMHgxRSwgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4RUUsMHgwMCwgMHhDMSwweDhELCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHg4NCwweDk2LCAweEZGLDB4QTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgyNSwgMHhGRiwweEYwLCAweEM2LDB4QjgsIDB4NjgsMHgwMCwgMHhDNywweDI4LCAweDY4LDB4MDAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEMxLDB4MkMsIDB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NzAsIDB4MjUsMHgwMCwgCi0weDAwLDB4MDcsIDB4MjAsMHgyQSwgMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4QzMsMHhCOCwgMHhDNywweDI4LCAweDUwLDB4MDAsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MTgsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweEI2LCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weEMyLDB4M0QsIDB4MjAsMHgzNiwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4QzIsMHgzRCwgMHg3NywweDM1LCAweDAwLDB4MDYsIDB4QTYsMHhCQSwgCi0weDU4LDB4MDIsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDc2LDB4MzksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDY3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweDIwLDB4MzYsIDB4MDAsMHgwMiwgMHhFNiwweDAwLCAweEMyLDB4NEQsIDB4QzAsMHgzQSwgCi0weDVBLDB4MDAsIDB4RTAsMHgwMCwgMHhDMiwweDQ4LCAweEM3LDB4MkMsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4RjUsMHg4NCwgCi0weDRGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NUEsMHgwMCwgMHhFNiwweDAwLCAweEMzLDB4QjEsIDB4RjQsMHg4NiwgCi0weDNCLDB4OTAsIDB4ODMsMHg5NiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDlDLCAweDAwLDB4MTYsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4NzYsMHgzOSwgMHgwMCwweDA2LCAweEE3LDB4MkUsIDB4NjAsMHgwMiwgMHhDNSwweDJDLCAweDYwLDB4MDAsIDB4NzYsMHhBOSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwMiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI3LCAweEZGLDB4RjAsIDB4RUUsMHgwMCwgCi0weEMzLDB4MjEsIDB4OTYsMHg5NiwgMHhGRiwweDhDLCAweEE3LDB4MkUsIDB4NjAsMHgwMiwgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4ODMsMHgxNiwgMHhGRiwweDhDLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweDg2LDB4QkEsIDB4MDAsMHgwNCwgMHgyNCwweDk0LCAweDAwLDB4NzAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4QTYsMHhBQSwgCi0weDY4LDB4MDIsIDB4NzcsMHgxOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHgyNywweDM4LCAweDAwLDB4MDgsIDB4ODMsMHhCQSwgCi0weDAwLDB4MDQsIDB4ODMsMHgzQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweEE2LCAweDAwLDB4MDQsIDB4OTMsMHgyNiwgCi0weDAwLDB4MDAsIDB4ODYsMHgxNiwgMHhGRiwweDk0LCAweEUwLDB4MDAsIDB4QzMsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QTcsMHgyRSwgCi0weDYwLDB4MDIsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGMywweDA2LCAweDNCLDB4OTAsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4ODYsMHgzQSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyQSwgMHgwMCwweDAwLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4ODMsMHg5NiwgCi0weEZGLDB4OEMsIDB4RjQsMHg4NiwgMHgzQiwweDkwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QTYsMHhCQSwgMHg0OCwweDAyLCAweDIwLDB4MUUsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDQ4LDB4MDAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHhFRSwweDAwLCAweEMzLDB4OTUsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4ODMsMHgxNiwgMHhGRiwweDkwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweDE5LCAweEZGLDB4RjAsIDB4QzYsMHhCOCwgCi0weDY4LDB4MDAsIDB4QzcsMHgyOCwgMHg2OCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzMCwgCi0weDAwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4QzUsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgCi0weEMxLDB4QzQsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDgzLDB4OTYsIDB4MDAsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4MDYsIDB4RjQsMHg4NSwgCi0weDQyLDB4NTQsIDB4RjYsMHgwNCwgMHg0MiwweDYwLCAweDI1LDB4MTQsIDB4MDAsMHgxRSwgMHgyMywweDE0LCAweDAwLDB4MjAsIDB4OTMsMHgxNiwgCi0weEZGLDB4QUMsIDB4RjMsMHg4NSwgMHg0MCwweDc4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgCi0weDAwLDB4MUMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgCi0weDAwLDB4MUEsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgCi0weDAwLDB4MTgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgCi0weDAwLDB4MTYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgCi0weDAwLDB4MTQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgCi0weDAwLDB4MTIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHgxMCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MDcsMHgxQywgCi0weDAwLDB4MDIsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDIzLDB4OTQsIDB4MDAsMHg1MCwgMHg5MywweDk2LCAweEZGLDB4QTQsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODQsMHg5NiwgCi0weEZGLDB4QTQsIDB4MjMsMHgxNCwgMHgwMCwweDM4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgyNywweDgwLCAweDAwLDB4MDcsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4OTMsMHgxNiwgMHhGRiwweDlDLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENGLDB4MjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4MDIsIDB4RkYsMHgzNCwgMHgyNywweDgwLCAweDAwLDB4MDcsIDB4RjcsMHg4NSwgCi0weDQyLDB4NTgsIDB4RjcsMHgwNSwgMHg0MiwweDY0LCAweDI3LDB4ODAsIDB4MDAsMHgwNywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDlDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4ODQsMHg5NiwgCi0weEZGLDB4QUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEY1LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEM1LDB4OTUsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDQyLDB4NTgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEYzLDB4MDYsIDB4MzksMHhDMCwgMHhGMywweDA1LCAweDQyLDB4NDQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHg4MiwgCi0weDAwLDB4MUMsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4QzUsMHhDNCwgMHhCMywweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjUsMHgwMCwgCi0weDAwLDB4MDcsIDB4RjcsMHgwNCwgMHg0MCwweDc0LCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHhGNiwweDA0LCAweDQyLDB4NjAsIDB4QzcsMHgzOCwgCi0weDZBLDB4MDAsIDB4NzUsMHhCOCwgMHhGRiwweEZBLCAweDA2LDB4MzAsIDB4MDAsMHgwQSwgMHgyMCwweDJBLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgCi0weEM2LDB4NDgsIDB4MDcsMHgzMCwgMHgwMCwweDBFLCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweDAwLDB4RkYsIDB4QzYsMHhCNCwgCi0weDc0LDB4MDAsIDB4NDcsMHgyRCwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhDNiwweDRDLCAweEMzLDB4MjgsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4RTAsMHgwMCwgCi0weEM1LDB4RkMsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweEYzLDB4MDIsIDB4MDAsMHgwOCwgMHhDNSwweDE4LCAweDMwLDB4MDAsIDB4RjMsMHg4NCwgCi0weDQyLDB4NjAsIDB4RjYsMHgwNCwgMHg0RiwweDU4LCAweEY3LDB4MDQsIDB4NDAsMHg3QywgMHhGNCwweDg0LCAweDQwLDB4NzQsIDB4QzUsMHgxQywgCi0weDUwLDB4MDAsIDB4MDUsMHgyOCwgMHgwMCwweDI2LCAweDg1LDB4QUEsIDB4MDAsMHgwMCwgMHg3NCwweDI5LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4QzYsMHgxQywgMHg2MiwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhGQSwgMHhDNiwweEI4LCAweDcwLDB4MDAsIDB4QzQsMHhBNCwgCi0weDY4LDB4MDAsIDB4MDQsMHhBNCwgMHgwMCwweDI2LCAweDc2LDB4QTUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4NzcsMHgzOSwgCi0weDAwLDB4MTAsIDB4NzcsMHgzOSwgMHhGRiwweEY4LCAweDQ2LDB4MzEsIDB4MDAsMHgwMCwgMHhDNSwweEFDLCAweDQ3LDB4QzAsIDB4NzUsMHhBRCwgCi0weEZGLDB4RjAsIDB4RjQsMHgwMiwgMHgwMCwweEZGLCAweEM1LDB4QUMsIDB4NDQsMHgwMCwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4RjcsMHgyQiwgCi0weDI4LDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDc1LDB4QTUsIDB4MDAsMHgxRSwgMHhDNiwweDMwLCAweDQ0LDB4MDAsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhGNiwweDgyLCAweEZGLDB4MDAsIDB4QzcsMHgzOCwgCi0weDZDLDB4MDAsIDB4QzYsMHgzMCwgMHg3MCwweDAwLCAweEY2LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDI2LCAweDAwLDB4MDAsIDB4NzYsMHg5OSwgCi0weDAwLDB4MTAsIDB4NzYsMHhCNSwgMHhGRiwweEY4LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzcsMHgzOCwgCi0weDQ0LDB4MDAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY2LDB4QTcsIDB4MjgsMHgwMCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NCwgCi0weDNCLDB4QjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQ0LDB4MkMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NDAsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4ODQsIDB4NDAsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4QkUsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgCi0weDQyLDB4MzAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzUsMHg2MCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDQyLDB4MzAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNSwweEVDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHg0NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDM2LDB4NzgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg0MiwweDQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM3LDB4MDQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzcsMHg5MCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDQyLDB4NDQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzOCwweDFDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHg0NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDM4LDB4QTgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg0MiwweDQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM5LDB4MzQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDQyLDB4NDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzksMHhDMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDQyLDB4NDQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzQSwweDRDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHg0NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDNBLDB4RDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwgCi0weDAwLDB4MDAsIDB4RjUsMHgwNiwgMHgzQiwweDkwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgCi0weDUwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAyLCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4MzcsIDB4RkYsMHhGMCwgMHhFRSwweDAwLCAweEM5LDB4OTUsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDUwLDB4MDAsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDQsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4QTYsMHhBRSwgMHg2OCwweDAyLCAweDc3LDB4MzEsIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDgsIDB4ODQsMHhCQSwgMHgwMCwweDA0LCAweDg0LDB4M0EsIDB4MDAsMHgwMCwgMHhFMCwweDAwLCAweEM5LDB4QjQsIDB4QzUsMHgyNCwgCi0weDAwLDB4MDAsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDUwLDB4MDAsIDB4ODUsMHgzQSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwNiwgMHgzQiwweDkwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QTYsMHhCQSwgMHg2MCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweEVFLDB4MDAsIDB4QzksMHhGOSwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4NzcsMHgyMSwgCi0weEZGLDB4RjAsIDB4QzYsMHhCOCwgMHg2OCwweDAwLCAweEM3LDB4MkMsIDB4NjgsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4QzEsMHgyOCwgMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHhGNSwweDA2LCAweDNCLDB4NzAsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHgzNywgCi0weEZGLDB4RjAsIDB4RUUsMHgwMCwgMHhDQSwweEJELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg1MCwweDAwLCAweDg2LDB4QkEsIDB4MDAsMHgwNCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhBNiwweEFFLCAweDY4LDB4MDIsIDB4NzcsMHgzMSwgCi0weDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgwOCwgMHg4NCwweEJBLCAweDAwLDB4MDQsIDB4ODQsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTAsMHgwMCwgMHhDQSwweERDLCAweEM1LDB4MjQsIDB4MDAsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg1MCwweDAwLCAweDg1LDB4M0EsIDB4MDAsMHgwNCwgMHg4MywweDk2LCAweDAwLDB4MDQsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjYsMHgwNiwgMHgzQiwweDcwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDMsIDB4QTYsMHhCQSwgMHg2MCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweEVFLDB4MDAsIDB4Q0IsMHgyOSwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4NzcsMHgyMSwgCi0weEZGLDB4RjAsIDB4QzYsMHhCOCwgMHg2OCwweDAwLCAweEM3LDB4MkMsIDB4NjgsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4QzEsMHgyOCwgMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY1LDB4MDQsIDB4NEYsMHg1OCwgMHhGNSwweDgyLCAweDAwLDB4MDIsIDB4MDYsMHgyOCwgCi0weDAwLDB4ODAsIDB4MjAsMHgyRSwgMHgwMCwweDYyLCAweEVFLDB4MDAsIDB4Q0IsMHg5MCwgMHgwNywweDMwLCAweDAwLDB4NDAsIDB4RjAsMHgzMywgCi0weDI4LDB4MDAsIDB4QzYsMHhCOCwgMHg1MiwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhGQSwgMHgwNiwweDMwLCAweDAwLDB4MTQsIDB4RjYsMHhCMywgCi0weDI4LDB4MDAsIDB4QzYsMHgzOCwgMHgwMCwweDAwLCAweEUwLDB4MDAsIDB4Q0IsMHg2NCwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDRGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4QjgsIDB4MTgsMHhENCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjQsMHhCNywgCi0weDI4LDB4MDAsIDB4MDcsMHgzOCwgMHgxOCwweEMwLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDQyLDB4QzAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDIsIDB4RjQsMHhCQiwgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjYsMHg4NCwgMHg0MiwweEMwLCAweEY2LDB4MDYsIDB4NDIsMHhDMCwgMHg3NywweDMxLCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4RjcsMHgwNCwgCi0weDRGLDB4NTgsIDB4NzYsMHhCNSwgMHgwMCwweDA2LCAweEM0LDB4MzgsIDB4NjgsMHgwMCwgMHg4NywweDIyLCAweDAwLDB4MTQsIDB4NzYsMHhBMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0MiwweEMwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4Q0MsMHg0QywgMHhGNiwweDA2LCAweDQyLDB4OTAsIDB4RjcsMHgwNCwgCi0weDQyLDB4OTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwNCwgMHg4NSwweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4MTYsIDB4RkYsMHhGNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENELDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhGNCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weENDLDB4QkMsIDB4RjUsMHg4NiwgMHg0MiwweEMwLCAweEY3LDB4MDQsIDB4NDIsMHg5MCwgMHhGNiwweDA2LCAweDQyLDB4OTIsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhDQywweEVDLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHhGMCwweDJCLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgCi0weDQyLDB4QzAsIDB4NzcsMHgyRCwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHgwNiwweDI4LCAweDAwLDB4MTQsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHhGNiwweEIzLCAweDI4LDB4MDAsIDB4QzcsMHgyOCwgCi0weDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4OTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzYsMHhCNCwgMHg3MiwweDAwLCAweDc3LDB4MzQsIDB4RkYsMHhGQSwgMHgyNywweDM4LCAweDAwLDB4MDIsIDB4MjAsMHgzQSwgCi0weDAwLDB4NjEsIDB4RjcsMHgwMiwgMHgwMCwweDNGLCAweEUyLDB4MDAsIDB4Q0QsMHg0MCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhDRCwweDQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDE2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weDAwLDB4MDgsIDB4ODUsMHg5NiwgMHgwMCwweDA0LCAweEM1LDB4MzAsIDB4NzAsMHgwMCwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTYsMHgwMCwgCi0weENELDB4QTEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg3NywweDMxLCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhFOCwgMHhGNiwweEFGLCAweDY4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg1MiwweDAwLCAweEU2LDB4MDAsIDB4Q0QsMHg3OCwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODQsMHg5NiwgCi0weDAwLDB4MDAsIDB4ODQsMHgxNiwgMHgwMCwweDA0LCAweDg1LDB4OTYsIDB4MDAsMHgwOCwgMHg4NiwweEE2LCAweDAwLDB4MDAsIDB4NzcsMHgyNSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NSwweDM1LCAweEZGLDB4RjAsIDB4MjAsMHgyQSwgCi0weDAwLDB4MTAsIDB4RTIsMHgwMCwgMHhDRSwweDBELCAweEY2LDB4MDYsIDB4NDIsMHg4RSwgMHhGNSwweDAyLCAweDAwLDB4MTAsIDB4RjcsMHgwNCwgCi0weDQyLDB4OEMsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHgyMCwweDJFLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weENFLDB4NzAsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4Q0UsMHg3MSwgMHgwNywweDI0LCAweDAwLDB4MDIsIDB4MjUsMHgyOCwgCi0weDAwLDB4MDEsIDB4QTUsMHhCQSwgMHg1MCwweDAyLCAweDg2LDB4MjIsIDB4MDAsMHgwMCwgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzUsMHhBQywgCi0weDc3LDB4QzAsIDB4QzYsMHgzMCwgMHg2RiwweEMwLCAweDc2LDB4MzEsIDB4RkYsMHhGMCwgMHg3NSwweEFELCAweEZGLDB4RTgsIDB4RjYsMHg4MiwgCi0weDAwLDB4RkYsIDB4RjcsMHgwMiwgMHhGMSwweDU0LCAweDc1LDB4QUQsIDB4MDAsMHgwMiwgMHhBNywweDJFLCAweDcwLDB4MDIsIDB4QzYsMHgzMCwgCi0weDZDLDB4MDAsIDB4QzYsMHgzMCwgMHg3NSwweDgwLCAweEY2LDB4MjMsIDB4MjgsMHgwMCwgMHgyNCwweDIwLCAweDAwLDB4MDIsIDB4MjUsMHhBOCwgCi0weDAwLDB4MDEsIDB4RjMsMHgwMiwgMHhGMiwweDQ2LCAweDAzLDB4QTQsIDB4MDAsMHgwMiwgMHhDNCwweEFDLCAweDM4LDB4MDAsIDB4MjUsMHgyQywgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEVDLDB4MDAsIDB4Q0YsMHgxMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgCi0weENFLDB4QTAsIDB4QzcsMHgxQywgMHg1MCwweDAwLCAweEUwLDB4MDAsIDB4Q0UsMHhCNCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QTYsMHg5RSwgCi0weDUwLDB4MDIsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHgzNSwgCi0weEZGLDB4RTgsIDB4ODYsMHhBNiwgMHgwMCwweDAwLCAweDc3LDB4MjUsIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4MjUsMHgyOCwgCi0weDAwLDB4MDIsIDB4MjUsMHhBQywgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RTgsIDB4NzcsMHgzMSwgCi0weDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2MiwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4QzYsMHhCNCwgCi0weDY4LDB4MDAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwRSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4MjQsMHhBNCwgCi0weDAwLDB4MDIsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweEUwLDB4MDAsIDB4Q0UsMHg4NCwgMHgyNCwweDIwLCAweDAwLDB4MDIsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDE2LCAweDAwLDB4MDgsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDQsIDB4ODMsMHg5NiwgMHgwMCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDUsMHg5QywgMHgwMCwweDAyLCAweDc0LDB4OUQsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4NzQsMHgxRCwgCi0weDAwLDB4MUUsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4MzEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgxRiwgCi0weDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDA0LDB4OUMsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDQ3LDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MjUsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweEQwLDB4QkQsIDB4MjYsMHgyOCwgCi0weDAwLDB4MDEsIDB4QTcsMHgyNiwgMHg2MCwweDAyLCAweEM2LDB4QTQsIDB4NjAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzUsMHhBNCwgMHg1MCwweDAwLCAweEM1LDB4MzAsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RTgsIDB4RTAsMHgwMCwgMHhEMCwweDg4LCAweEY3LDB4MkYsIDB4NjgsMHgwMCwgMHgwNywweDFDLCAweDAwLDB4MDIsIDB4RjMsMHgzQiwgCi0weDY4LDB4MDAsIDB4QzQsMHgxQywgMHgwMCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MEMsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDA0LCAweDg0LDB4MTYsIDB4MDAsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA1LDB4QTAsIDB4MDAsMHgwMiwgMHg3NCwweEExLCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgCi0weEZGLDB4RTUsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4MzEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDA2LDB4QTAsIDB4MDAsMHgwMiwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4ODcsMHgyMiwgCi0weDAwLDB4MDAsIDB4NzYsMHgyMSwgMHgwMCwweDFFLCAweDg1LDB4OTYsIDB4MDAsMHgwOCwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY1LDB4QjcsIDB4NjgsMHgwMCwgMHg4NywweDIyLCAweDAwLDB4MDAsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgyMywgCi0weDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MjAsIDB4MjcsMHgxNCwgMHgwMCwweDIwLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDQsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHhBNiwgMHgwMCwweDAwLCAweDc2LDB4MjUsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4MDQsMHgyNCwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2NywweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHhGNiwweEJCLCAweDI4LDB4MDAsIDB4ODcsMHgyNiwgCi0weDAwLDB4MDAsIDB4NzYsMHhBNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4QzAsMHgyQSwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4RDIsMHhGOCwgMHg3NiwweEE1LCAweDAwLDB4MUUsIDB4ODcsMHgyNiwgCi0weDAwLDB4MDAsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA2LDB4MjgsIDB4MDAsMHgwMSwgMHgyNSwweDk0LCAweDAwLDB4MUUsIDB4QzUsMHhBQywgCi0weDUwLDB4MDAsIDB4QzUsMHgzMCwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzcsMHgzOCwgCi0weDUyLDB4MDAsIDB4QTYsMHhBMiwgMHg3MCwweDAyLCAweEM3LDB4MjAsIDB4NzAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhFOCwgMHhDNiwweDgwLCAweDZBLDB4MDAsIDB4RTAsMHgwMCwgCi0weEQyLDB4OTAsIDB4RjYsMHhBRiwgMHg2OCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg3NiwweDE1LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4ODMsMHg5NiwgMHgwMCwweDAwLCAweDIzLDB4MTQsIDB4MDAsMHgxRSwgMHg3NSwweDk5LCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgCi0weEZGLDB4RTUsIDB4NzQsMHgxNSwgMHgwMCwweDFFLCAweDc0LDB4MjAsIDB4RkYsMHhFNSwgMHgwNiwweDlDLCAweDAwLDB4MDIsIDB4NzMsMHg5NSwgCi0weDAwLDB4MUUsIDB4OTMsMHg5NiwgMHhGRiwweERDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg4MywweDk2LCAweDAwLDB4MDAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDgzLDB4OTYsIDB4RkYsMHhEQywgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4NzMsMHg5QywgCi0weEZGLDB4RTUsIDB4OTMsMHg5NiwgMHhGRiwweERDLCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHgyMywweDE0LCAweDAwLDB4MUEsIDB4NzYsMHgxOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RTgsIDB4MjMsMHgxNCwgCi0weDAwLDB4MTYsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4RUMsIDB4MjMsMHgxNCwgMHgwMCwweDEyLCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDQ3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODQsMHgxNiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDNGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDgsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDAwLCAweDg0LDB4MTYsIDB4MDAsMHgwNCwgMHhGNiwweDg0LCAweDRGLDB4NTgsIDB4ODcsMHgzMiwgCi0weDAwLDB4MTQsIDB4MDMsMHgzMCwgMHgwMCwweDE0LCAweDc1LDB4MTksIDB4MDAsMHgxRSwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzMsMHhBMCwgCi0weDZBLDB4MDAsIDB4NzMsMHg5QywgMHhGRiwweEZBLCAweDA0LDB4QTAsIDB4MDAsMHgxNCwgMHg3NSwweEE1LCAweDAwLDB4MUUsIDB4QzYsMHgzMCwgCi0weDZBLDB4MDAsIDB4NzYsMHgzMCwgMHhGRiwweEZBLCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4RjMsMHg5QiwgMHgyOCwweDAwLCAweDA3LDB4MjAsIDB4MDAsMHgxNiwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4ODcsMHgyMiwgCi0weDAwLDB4MTQsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDYsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNiwgMHhGMywweEI3LCAweDI4LDB4MDAsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDE2LCAweDAwLDB4MDAsIDB4RjUsMHg4NCwgCi0weDRGLDB4NTgsIDB4MDUsMHgzMCwgMHgwMCwweDE2LCAweDg3LDB4MkEsIDB4MDAsMHgwMCwgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4QzQsMHgyQywgCi0weDcwLDB4MDAsIDB4QzAsMHgyMiwgMHg2MiwweDAwLCAweEU2LDB4MDAsIDB4RDUsMHgyOSwgMHgwNiwweEEwLCAweDAwLDB4MTYsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4QzYsMHgzMCwgMHg1QSwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhGQSwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4NzYsMHhCOCwgCi0weEZGLDB4RkEsIDB4RjYsMHhBQiwgMHgyOCwweDAwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTQsIDB4RTAsMHgwMCwgCi0weEQ1LDB4MkMsIDB4RjYsMHgzQiwgMHgyOCwweDAwLCAweEM0LDB4MkMsIDB4MDAsMHgwMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4NEYsMHg4NCwgMHg0NywweDM4LCAweEZGLDB4RkMsIDB4RjcsMHgwNSwgCi0weDZGLDB4MzAsIDB4RjYsMHg4NiwgMHg1MCwweDVDLCAweDQ2LDB4QjQsIDB4RkYsMHhGQywgMHhGNiwweDg1LCAweDZFLDB4NTAsIDB4RjcsMHgwNiwgCi0weDZFLDB4N0MsIDB4NDcsMHgzOCwgMHhGRiwweEZDLCAweEY3LDB4MDUsIDB4NkUsMHg1NCwgMHgwNywweDM0LCAweDE5LDB4MUMsIDB4RjcsMHgwNSwgCi0weDRGLDB4NUMsIDB4RjcsMHgwMiwgMHgwMCwweDY0LCAweDk3LDB4MzYsIDB4MTksMHgxQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4OTcsMHgzNiwgCi0weDE5LDB4MjAsIDB4MDYsMHhCNCwgMHgwMCwweDFDLCAweEY2LDB4ODUsIDB4NEYsMHg1OCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg5MCwgMHhGMywweDAyLCAweEZGLDB4RkYsIDB4RjMsMHgwNSwgCi0weDRGLDB4NTQsIDB4RjMsMHg4MiwgMHgwMCwweDAwLCAweDkzLDB4OTYsIDB4RkYsMHhBQywgMHgyMywweDE0LCAweDAwLDB4MjAsIDB4OTMsMHgxNiwgCi0weEZGLDB4OUMsIDB4MjMsMHg5NCwgMHgwMCwweDM4LCAweDkzLDB4OTYsIDB4RkYsMHg5NCwgMHg4MywweDE2LCAweEZGLDB4QUMsIDB4RjcsMHgwNCwgCi0weDRGLDB4NUMsIDB4RjMsMHg4MiwgMHgwMCwweDBDLCAweDkzLDB4OTYsIDB4RkYsMHg3NCwgMHg5MywweDE2LCAweEZGLDB4OEMsIDB4ODcsMHgzQSwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTYsIDB4RkYsMHhBNCwgMHg4MywweDE2LCAweEZGLDB4QUMsIDB4ODMsMHg5NiwgCi0weEZGLDB4QTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MUEsIDB4M0EsMHgwMCwgMHhFQywweDAwLCAweERCLDB4NzgsIDB4RjMsMHgwMiwgCi0weDA0LDB4QkMsIDB4RjcsMHgwNCwgMHg0RiwweDVDLCAweDgzLDB4MTYsIDB4RkYsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDMwLDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA4LCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4QzQsMHhCNCwgCi0weDcwLDB4MDAsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDk0LDB4OTYsIDB4RkYsMHg3QywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENELDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHg3QywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEQ2LDB4NTQsIDB4QzUsMHgwNCwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDIsMHg4OCwgMHhFMCwweDAwLCAweEQ4LDB4N0MsIDB4RjYsMHgwNiwgCi0weDQyLDB4ODgsIDB4RjYsMHgwNCwgMHg0RiwweDVDLCAweDgzLDB4OTYsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4NzQsIDB4ODYsMHg5RSwgCi0weDAwLDB4MDAsIDB4QTcsMHgzMiwgMHgzMCwweDAyLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEQ2LDB4OTQsIDB4QzYsMHgzMCwgMHgzMCwweDAwLCAweDg2LDB4OUUsIDB4MDAsMHgwNCwgMHg4NywweDMyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4RDYsMHg5OCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RDYsMHhBNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODMsMHg5NiwgMHgwMCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweDlFLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4RDYsMHhFNCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhENiwweEVDLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHg4NiwweDlFLCAweDAwLDB4MDQsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweEQ2LDB4RUQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEQ2LDB4RkQsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEQ3LDB4MjgsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDIsIDB4ODMsMHgxNiwgMHhGRiwweEFDLCAweEY3LDB4MDYsIDB4NDIsMHhDOCwgMHg4MywweDk2LCAweEZGLDB4OEMsIDB4RjMsMHgwNSwgCi0weDRGLDB4NTQsIDB4QzcsMHgxQywgMHg3MCwweDAwLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4RTAsMHgwMCwgCi0weERCLDB4NTAsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweDk0LDB4OTYsIDB4RkYsMHg2QywgMHg4NywweDI2LCAweDAwLDB4MDAsIDB4NzYsMHhBNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDgzLDB4MTYsIDB4RkYsMHg2QywgMHg4MywweDk2LCAweEZGLDB4OUMsIDB4MjQsMHg5NCwgCi0weDAwLDB4MUUsIDB4MDYsMHgxOCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUYsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHgxRCwgCi0weDAwLDB4MUUsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDFBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDE2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDE0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDEyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MTAsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweEY2LDB4ODIsIDB4RkYsMHhGQywgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAzLCAweEM0LDB4QjgsIDB4NkMsMHgwMCwgMHgyMCwweDI2LCAweDAwLDB4MTAsIDB4RTIsMHgwMCwgCi0weEQ4LDB4OUQsIDB4RjYsMHgwNiwgMHg0MiwweDhBLCAweEY3LDB4MDQsIDB4NDIsMHg4OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhEQiwweEEwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4NkMsIDB4MjUsMHgxNCwgCi0weDAwLDB4MzYsIDB4ODMsMHg5NiwgMHhGRiwweDk0LCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHg3NiwweDk5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4MDYsMHgxOCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MzQsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MzIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MzAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MkUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MkMsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MkEsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MjgsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDI2LDB4QTQsIDB4MDAsMHgwMiwgMHg3NCwweEE0LCAweEZGLDB4RkYsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgCi0weDI4LDB4MDAsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4MTYsIDB4RkYsMHg4QywgMHhGNywweDA2LCAweDQyLDB4Q0MsIDB4QzcsMHgxOCwgCi0weDcwLDB4MDAsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4OTQsMHg5NiwgCi0weEZGLDB4N0MsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4NkMsIDB4MjQsMHgxNCwgMHgwMCwweDRFLCAweDI1LDB4MTQsIDB4MDAsMHg1MCwgMHg4MywweDE2LCAweEZGLDB4OEMsIDB4ODQsMHg5NiwgCi0weEZGLDB4N0MsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDc2LDB4OUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDYsMHgxQywgCi0weDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweDI5LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4NEMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4NEEsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4NDgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4NDYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4NDQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4NDIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDI0LDB4MTQsIDB4MDAsMHg0MCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4ODYsMHg5NiwgCi0weEZGLDB4QjAsIDB4RjYsMHgwNiwgMHg0MiwweEM4LCAweEM2LDB4MTgsIDB4NjAsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDMsIDB4QzYsMHhCNCwgCi0weDU3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzQsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDZBLDB4MDAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhGNCwweEIzLCAweDI4LDB4MDAsIDB4ODMsMHg5NiwgCi0weEZGLDB4OEMsIDB4ODMsMHgxNiwgMHhGRiwweDc0LCAweDAzLDB4OUMsIDB4MDAsMHgxNCwgMHg5MywweDk2LCAweEZGLDB4OEMsIDB4MDMsMHgxOCwgCi0weDAwLDB4MEMsIDB4ODMsMHg5NiwgMHhGRiwweEFDLCAweDkzLDB4MTYsIDB4RkYsMHg3NCwgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgCi0weEQ1LDB4RUMsIDB4OTMsMHg5NiwgMHhGRiwweEFDLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDg0LCAweDRGLDB4NUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNiwweEY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAxLDB4QTAsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4RjMsMHg4NCwgMHg2RSwweDUwLCAweEY2LDB4MDIsIDB4MDAsMHgxQywgMHgyMCwweDJBLCAweDAwLDB4NjMsIDB4RUUsMHgwMCwgCi0weERDLDB4MDgsIDB4QzUsMHg5QywgMHg2MCwweDAwLCAweEE2LDB4OUUsIDB4NjAsMHgwMiwgMHg3NywweDJELCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHgyMCwweDM2LCAweDAwLDB4MDMsIDB4RTYsMHgwMCwgCi0weERCLDB4RkMsIDB4MDcsMHgyQywgMHgwMCwweDM2LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4NDAsIDB4RTAsMHgwMCwgCi0weERCLDB4Q0MsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweEY1LDB4ODQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDgsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RUMsMHgwMCwgMHhEQywweEYwLCAweDk2LDB4OTYsIDB4RkYsMHhFQywgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM2LDB4MzgsIDB4NTgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MEMsIDB4QzMsMHg4NCwgCi0weDAwLDB4MDAsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4REMsMHg3QywgMHhDNSwweDIwLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDQsIDB4ODcsMHgxQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weERDLDB4ODAsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weERDLDB4OEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEYzLDB4ODIsIDB4MDAsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgCi0weDAwLDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weERDLDB4Q0MsIDB4RjUsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweERDLDB4RDQsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MjYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhEQywweEQ1LCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhEQywweEU1LCAweDIwLDB4MUUsIDB4MDAsMHgwMCwgMHhGMywweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgxRSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhEQywweEY0LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhERCwweDI5LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDU4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4RTAsMHgwMCwgCi0weERELDB4OTgsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDI3LDB4MTQsIDB4MDAsMHgxNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgCi0weEZFLDB4NzAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weEZFLDB4NzAsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4REQsMHg5NSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg1OCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RjAsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDk3LDB4MkUsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweERELDB4OUMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweERELDB4QjAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg0MiwweDdDLCAweEUwLDB4MDAsIDB4RTAsMHg5QywgMHhGNiwweDA2LCAweDQyLDB4N0UsIDB4OTQsMHg5NiwgCi0weEZGLDB4NDQsIDB4ODcsMHgxNiwgMHhGRiwweEY0LCAweEY2LDB4MDQsIDB4NEYsMHg1OCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4QzcsMHgzMCwgCi0weDcwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweDU0LCAweDA2LDB4QjgsIDB4MDAsMHgxQSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgCi0weEZGLDB4NTQsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwNiwgMHhDNiwweDMwLCAweDcwLDB4MDAsIDB4OTYsMHgxNiwgCi0weEZGLDB4NEMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhERSwweDM1LCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg4NCwweDk2LCAweEZGLDB4NEMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4MDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4REUsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjMsMHgwMiwgCi0weDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweDQ0LCAweDg0LDB4OTYsIDB4RkYsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhERSwweDU5LCAweEY2LDB4MDYsIDB4NDIsMHhBNCwgMHhGNywweDA0LCAweDQyLDB4QTQsIDB4RTAsMHgwMCwgCi0weEUwLDB4QTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDgzLDB4MTYsIDB4RkYsMHg0QywgMHg4NiwweDE2LCAweEZGLDB4NEMsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4NzYsMHg5OSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4REUsMHg4NSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwNCwgCi0weDRGLDB4NTgsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDMyLCAweDVBLDB4MDAsIDB4RTYsMHgwMCwgCi0weEUwLDB4MjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHhBNCwgCi0weDAwLDB4MUEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHg1NCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4QzcsMHgyQywgCi0weDcwLDB4MDAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4REUsMHhERCwgMHhGNiwweDA2LCAweDQyLDB4ODAsIDB4RjcsMHgwNCwgCi0weDQyLDB4ODAsIDB4RTAsMHgwMCwgMHhFMCwweEEwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHgyNiwweDE0LCAweDAwLDB4MzAsIDB4RjAsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEQwLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4ODQsMHg5NiwgCi0weEZGLDB4NEMsIDB4MjMsMHgxNCwgMHgwMCwweDJFLCAweDkzLDB4MTYsIDB4RkUsMHg2NCwgMHg3NSwweDk5LCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwgCi0weEZGLDB4RTUsIDB4OTMsMHgxNiwgMHhGRiwweDM0LCAweDgzLDB4MTYsIDB4RkUsMHg2NCwgMHgwNCwweDI0LCAweDAwLDB4MDIsIDB4MDYsMHhBMCwgCi0weDAwLDB4MDIsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4M0MsIDB4NzQsMHg5NSwgCi0weDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkYsMHgyQywgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RDQsIDB4MjQsMHg5NCwgCi0weDAwLDB4MkEsIDB4OTQsMHg5NiwgMHhGRSwweDY0LCAweDc2LDB4MjUsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDI2LCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEQ4LCAweDIzLDB4MTQsIDB4MDAsMHgyNiwgMHg5MywweDE2LCAweEZFLDB4NjQsIDB4NzYsMHgxOSwgCi0weDAwLDB4MUUsIDB4ODQsMHg5NiwgMHhGRiwweDNDLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODQsMHg5NiwgCi0weEZGLDB4MzQsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweERDLCAweDIzLDB4MTQsIDB4MDAsMHgyMiwgMHg5MywweDE2LCAweEZFLDB4NjQsIDB4NzYsMHgxOSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg4MywweDE2LCAweEZGLDB4MkMsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhFMCwweDAwLCAweEVBLDB4QTAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0IsMHhDQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDYsMHhBMCwgCi0weDAwLDB4MDIsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEYwLDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEEwLCAweDAwLDB4MTQsIDB4OTQsMHgxNiwgCi0weEZGLDB4MjQsIDB4QzcsMHgyMCwgMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhBMCwgCi0weDAwLDB4MTYsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweEEzLCAweDI4LDB4MDAsIDB4OTQsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFMCwweEJDLCAweDI2LDB4OTQsIDB4MDAsMHg0OCwgMHhGNywweDA0LCAweDQyLDB4ODAsIDB4RTAsMHgwMCwgCi0weEUwLDB4OUMsIDB4RjYsMHgwNiwgMHg0MiwweDgyLCAweDg2LDB4OTYsIDB4RkUsMHhGNCwgMHhFMCwweDAwLCAweEUyLDB4OTQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDg0LCAweEY2LDB4MDYsIDB4NDIsMHg4NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhFQSwweEE0LCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4NEMsIDB4NzUsMHgxNSwgCi0weDAwLDB4MUUsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweDkzLDB4MTYsIDB4RkYsMHgxQywgMHgwNywweDE4LCAweDAwLDB4MzYsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjQsMHhCQiwgMHgyOCwweDAwLCAweEYwLDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4QjgsIDB4NzYsMHhCNSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA0LDB4MTgsIDB4MDAsMHgwMiwgMHgwNiwweDIwLCAweDAwLDB4MDIsIDB4MjMsMHgxNCwgCi0weDAwLDB4NDYsIDB4OTMsMHgxNiwgMHhGRiwweDE0LCAweDc1LDB4OTksIDB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4NzQsMHg5NSwgCi0weDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkYsMHgwQywgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwgCi0weEZGLDB4RTUsIDB4OTMsMHgxNiwgMHhGRiwweDA0LCAweDc0LDB4OTUsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4OTQsMHg5NiwgCi0weEZFLDB4RkMsIDB4MjMsMHgwMCwgMHgwMCwweDA3LCAweDkzLDB4MTYsIDB4RkUsMHhGNCwgMHg4NCwweDk2LCAweEZGLDB4MUMsIDB4ODMsMHgxNiwgCi0weEZGLDB4MTQsIDB4MDQsMHhBNCwgMHgwMCwweDBBLCAweDk0LDB4OTYsIDB4RkUsMHg3QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHg4NCwweDk2LCAweEZGLDB4NTQsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4QzYsMHhBNCwgMHg2QSwweDAwLCAweDc0LDB4MzQsIDB4RkYsMHhGQSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4QkMsIDB4MjMsMHgxNCwgCi0weDAwLDB4NDIsIDB4OTMsMHgxNiwgMHhGRiwweDE0LCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEMwLCAweDI0LDB4OTQsIDB4MDAsMHgzRSwgMHg5NCwweDk2LCAweEZGLDB4MTQsIDB4NzYsMHhBNSwgCi0weDAwLDB4MUUsIDB4ODMsMHgxNiwgMHhGRiwweDBDLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4QzQsIDB4MjQsMHg5NCwgMHgwMCwweDNBLCAweDk0LDB4OTYsIDB4RkYsMHgxNCwgMHg3NiwweEE1LCAweDAwLDB4MUUsIDB4ODMsMHgxNiwgCi0weEZGLDB4MDQsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4MzcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhDOCwgMHg4NCwweDk2LCAweEZFLDB4RkMsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODMsMHgxNiwgCi0weEZFLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweEUyLDB4OTQsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDgsIDB4ODQsMHg5NiwgMHhGRSwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDI0LCAweDAwLDB4MEUsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweEZGLCAweEM2LDB4QjQsIDB4NzQsMHgwMCwgMHg0NywweDIxLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEUwLDB4ODgsIDB4MDQsMHhBNCwgCi0weDAwLDB4MDIsIDB4OTQsMHg5NiwgMHhGRSwweDdDLCAweDAzLDB4MTgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweEUyLDB4MzAsIDB4OTMsMHgxNiwgCi0weEZFLDB4RjQsIDB4ODMsMHgxNiwgMHhGRiwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDE4LCAweDAwLDB4MzgsIDB4RjYsMHhCQiwgCi0weDI4LDB4MDAsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDQsMHgyQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjMsMHgxNCwgCi0weDAwLDB4NzgsIDB4OTMsMHgxNiwgMHhGRSwweEJDLCAweDg0LDB4OTYsIDB4MDAsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4QTgsIDB4ODYsMHhBNiwgCi0weDAwLDB4MDQsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDkzLDB4MTYsIDB4RkUsMHg5QywgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4OTYsMHg5NiwgCi0weEZFLDB4RUMsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEM3LDB4MzQsIDB4NzQsMHgwMCwgMHg5NywweDE2LCAweEZFLDB4RTQsIDB4ODQsMHg5NiwgCi0weEZGLDB4MjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQ0LDB4QjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgyMiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhFQSwweEExLCAweDk0LDB4MTYsIDB4RkYsMHgxQywgMHg4NiwweEEyLCAweDAwLDB4MzgsIDB4NzcsMHgyMSwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZFLDB4RDQsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweDk2LDB4OTYsIDB4RkUsMHhEQywgMHg4NCwweDk2LCAweEZFLDB4RDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDBFLCAweEVFLDB4MDAsIDB4RTIsMHhGMCwgMHhGMywweDAyLCAweDAwLDB4MEYsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDE4LCAweDQ4LDB4MDAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjcsMHhFOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4QzMsMHhBMCwgCi0weDAwLDB4MDAsIDB4ODQsMHg5NiwgMHhGRSwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEUzLDB4OEQsIDB4MjMsMHg5QywgMHgwMCwweDA3LCAweEMzLDB4ODAsIDB4M0EsMHgwMCwgMHhDNywweDFDLCAweDM4LDB4MDAsIDB4ODMsMHgxNiwgCi0weEZGLDB4MUMsIDB4RjQsMHg4MiwgMHgwMCwweEZGLCAweEY2LDB4MDQsIDB4NEYsMHg1OCwgMHhDNywweDE4LCAweDcwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MjYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkUsMHhDNCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhDNiwweEI0LCAweDRDLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDYsIDB4QzMsMHgzMCwgMHg2OCwweDAwLCAweDA3LDB4MzAsIDB4MDAsMHg0MCwgMHhDMCwweDFBLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEU0LDB4MEQsIDB4OTMsMHgxNiwgMHhGRSwweENDLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZFLDB4NzQsIDB4OTYsMHgxNiwgCi0weEZFLDB4NkMsIDB4OTYsMHg5NiwgMHhGRSwweDY4LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4MDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRSwweDc0LCAweDg2LDB4MTYsIDB4RkUsMHg2QywgMHg4NiwweDk2LCAweEZFLDB4NjgsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFMCwweDk1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4ODQsMHg5NiwgCi0weEZFLDB4Q0MsIDB4MDcsMHgyQywgMHgwMCwweDQwLCAweEMwLDB4MjYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEVBLDB4OEQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QTcsMHgzMiwgMHg2OCwweDAyLCAweDc2LDB4QTUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4ODYsMHgxNiwgCi0weEZFLDB4Q0MsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgCi0weEU0LDB4NTEsIDB4QzAsMHgzMiwgMHg1QSwweDAwLCAweEM2LDB4MkMsIDB4MDAsMHgwMCwgMHhDMCwweDMyLCAweDVBLDB4MDAsIDB4RTYsMHgwMCwgCi0weEU2LDB4RTUsIDB4MjUsMHgxNCwgMHgwMCwweDc2LCAweDgzLDB4MTYsIDB4RkYsMHgxQywgMHg4NCwweDk2LCAweEZFLDB4QkMsIDB4MDYsMHgxOCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4ODMsMHgxNiwgCi0weEZFLDB4REMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NzQsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NzIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NzAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NkUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NkMsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NkEsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDY4LCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHhDNywweDFDLCAweDMyLDB4MDAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDI2LDB4MTQsIDB4MDAsMHg2MCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4OTYsMHgxNiwgCi0weEZFLDB4NkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDAsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgxNiwgCi0weEZGLDB4QTAsIDB4ODYsMHgxNiwgMHhGRSwweDZDLCAweDg0LDB4OTYsIDB4RkUsMHhDQywgMHgyMywweDE0LCAweDAwLDB4NUUsIDB4OTMsMHgxNiwgCi0weEZFLDB4NUMsIDB4NzUsMHg5OSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHg3NCwweDE1LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwgCi0weEZGLDB4RTUsIDB4NzMsMHgxNSwgMHgwMCwweDFFLCAweDczLDB4MTgsIDB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZFLDB4QUMsIDB4ODMsMHgxNiwgCi0weEZFLDB4NUMsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHgwNSwweDI0LCAweDAwLDB4MDIsIDB4MDYsMHhBOCwgCi0weDAwLDB4MDIsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZFLDB4QjQsIDB4NzQsMHg5NSwgCi0weDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgCi0weDAwLDB4MDAsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkUsMHhBNCwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4QTQsIDB4MjQsMHg5NCwgCi0weDAwLDB4NUEsIDB4OTQsMHg5NiwgMHhGRSwweDVDLCAweDc2LDB4MjUsIDB4MDAsMHgxRSwgMHg4MywweDE2LCAweEZFLDB4QjQsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgyNiwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhBOCwgMHgyNCwweDk0LCAweDAwLDB4NTYsIDB4OTQsMHg5NiwgCi0weEZFLDB4NUMsIDB4NzYsMHgyNSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDQ3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4QUMsIDB4MjMsMHgxNCwgMHgwMCwweDUyLCAweDkzLDB4MTYsIDB4RkUsMHg1QywgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4ODQsMHg5NiwgCi0weEZFLDB4QUMsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhCMCwgMHg4MywweDE2LCAweEZFLDB4QTQsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhFMCwweDAwLCAweEVBLDB4OEMsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODQsMHg5NiwgMHhGRSwweENDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNCwweEE0LCAweDAwLDB4MzYsIDB4OTQsMHg5NiwgCi0weEZFLDB4NUMsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDc2LDB4QTUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFQSwweDhELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4MywweDE2LCAweEZFLDB4Q0MsIDB4ODQsMHg5NiwgCi0weEZGLDB4MUMsIDB4MDYsMHgxOCwgMHgwMCwweDNBLCAweDg1LDB4QjIsIDB4MDAsMHgwMCwgMHgwNywweDI0LCAweDAwLDB4M0EsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzUsMHhBQywgMHg2NywweEMwLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NSwweEFELCAweEZGLDB4RjAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4QzAsMHgyRSwgMHg2QSwweDAwLCAweEVDLDB4MDAsIDB4RTcsMHg2NCwgMHhGNSwweDAyLCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODMsMHgxNiwgMHhGRiwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDE4LCAweDAwLDB4MzYsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzNiwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4RTcsMHg5QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDEsIDB4RTYsMHgwMCwgMHhFQSwweDhELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NCwweDk2LCAweEZFLDB4NUMsIDB4ODMsMHgxNiwgCi0weEZGLDB4MUMsIDB4RjUsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MTgsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDI1LDB4MTQsIDB4MDAsMHhBNiwgMHg4NCwweDk2LCAweEZFLDB4OUMsIDB4ODMsMHgxNiwgCi0weEZFLDB4REMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4QTQsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4QTIsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4QTAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4OUUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4OUMsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4OUEsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgCi0weDAwLDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDk4LCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHhDNywweDFDLCAweDMyLDB4MDAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDI2LDB4MTQsIDB4MDAsMHg5MCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4OTYsMHgxNiwgCi0weEZFLDB4NkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDAsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgxNiwgCi0weEZGLDB4NzAsIDB4ODYsMHgxNiwgMHhGRSwweDZDLCAweDg0LDB4OTYsIDB4RkUsMHhDQywgMHgyMywweDk0LCAweDAwLDB4OEUsIDB4NzUsMHg5RCwgCi0weDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDczLDB4MTUsIDB4MDAsMHgxRSwgMHg3MywweDE4LCAweEZGLDB4RTUsIDB4OTMsMHgxNiwgCi0weEZFLDB4OTQsIDB4NzQsMHgxNSwgMHgwMCwweDFFLCAweDc0LDB4MjAsIDB4RkYsMHhFNSwgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwgCi0weEZGLDB4RTUsIDB4OTMsMHgxNiwgMHhGRSwweDg0LCAweDgzLDB4MTYsIDB4RkUsMHg5NCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4MDUsMHgyNCwgMHgwMCwweDAyLCAweDA2LDB4QTgsIDB4MDAsMHgwMiwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgCi0weEZGLDB4RTUsIDB4OTQsMHg5NiwgMHhGRSwweDhDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgCi0weDI4LDB4MDAsIDB4ODQsMHg5NiwgMHhGRSwweEM0LCAweDg3LDB4MUUsIDB4MDAsMHgwMCwgMHg3NSwweDI1LCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgCi0weDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4NzQsIDB4MjMsMHg5NCwgMHgwMCwweDhBLCAweDc2LDB4MUQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4ODQsMHg5NiwgCi0weEZFLDB4OEMsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4MzcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4MywweDE2LCAweEZFLDB4ODQsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4NzgsIDB4MjMsMHg5NCwgMHgwMCwweDg2LCAweDc2LDB4MUQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDQ3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweDdDLCAweDIzLDB4OTQsIDB4MDAsMHg4MiwgMHg3NiwweDFELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxRSwgCi0weDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg0LDB4OTYsIDB4RkUsMHhDNCwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHg4MCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgCi0weDM3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDI2LCAweDAwLDB4MDAsIDB4RjMsMHgwMiwgCi0weDAwLDB4RkYsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhFOCwgMHhDNiwweEI4LCAweDM0LDB4MDAsIDB4RjcsMHgwMiwgCi0weDAwLDB4ODAsIDB4QzcsMHgzNCwgMHg3NCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFQSwweDYxLCAweDI3LDB4MDAsIDB4MDEsMHgwMCwgMHhDNiwweEI0LCAweDc1LDB4ODAsIDB4ODQsMHg5NiwgCi0weEZFLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MjQsIDB4MDAsMHgzOCwgMHhGNiwweEJCLCAweDI4LDB4MDAsIDB4OTQsMHg5MywgCi0weEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRiwweDI0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhENCwweDJDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NCwweDk2LCAweEZFLDB4RDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDQsMHhBNCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4RTMsMHgzQywgMHg5NCwweDk2LCAweEZFLDB4RDQsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODYsMHgxNiwgCi0weDAwLDB4MDgsIDB4ODYsMHg5NiwgMHgwMCwweDBDLCAweEY1LDB4MDIsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweDAwLDB4MDQsIDB4ODQsMHgxNiwgCi0weDAwLDB4MTAsIDB4RjQsMHg4NCwgMHhFMCwweDAwLCAweDA3LDB4MzAsIDB4MDAsMHgwMiwgMHg5NCwweEIyLCAweDAwLDB4MTAsIDB4RjQsMHg4NCwgCi0weEUwLDB4MDQsIDB4MDYsMHhCNCwgMHgwMCwweDAzLCAweDk0LDB4QjIsIDB4MDAsMHgxNCwgMHhGNCwweDg0LCAweEUwLDB4MUMsIDB4QzYsMHhCNCwgCi0weDU0LDB4MDAsIDB4OTQsMHhCMiwgMHgwMCwweDE4LCAweEY0LDB4ODIsIDB4MDAsMHgwNSwgMHhGNCwweEIzLCAweDI4LDB4MDAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjQsMHhCQiwgMHgyOCwweDAwLCAweDI3LDB4MzQsIDB4MDAsMHgwOCwgMHg5NywweDMyLCAweDAwLDB4MDQsIDB4ODYsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDcsMHgyQywgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NTQsMHgwMCwgMHhDNiwweEI4LCAweDY4LDB4MDAsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4QzYsMHgzMCwgMHg3MiwweDAwLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDMsIDB4QzUsMHhBQywgCi0weDc0LDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NUEsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4QzEsMHgyMCwgMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDE0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgxOCwgMHg4NywweDE2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODMsMHhCQSwgMHgwMCwweDAwLCAweDg0LDB4OTYsIDB4MDAsMHgwMCwgMHg5MywweDk2LCAweEZGLDB4RjAsIDB4RjMsMHg4NCwgCi0weDZFLDB4NTQsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDkzLDB4OTYsIDB4RkYsMHhFQywgMHg5NywweDE2LCAweEZGLDB4RjQsIDB4OTAsMHgxMywgCi0weEZGLDB4RkMsIDB4MjcsMHgxQywgMHgwMCwweDAyLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDI0LCAweDAwLDB4MjAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTQsMHg5NiwgMHhGRiwweEU0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4QjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODQsMHg5NiwgMHhGRiwweEU0LCAweDgzLDB4OTYsIDB4MDAsMHgwOCwgMHg4NywweDI2LCAweDAwLDB4MTgsIDB4ODUsMHgxNiwgCi0weEZGLDB4RUMsIDB4QzAsMHgzQSwgMHgzQSwweDAwLCAweEVFLDB4MDAsIDB4RUMsMHg3QywgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4ODcsMHgyNiwgCi0weDAwLDB4MTgsIDB4ODMsMHg5NiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDFFLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVDLDB4N0MsIDB4QzUsMHg4NCwgMHgwMCwweDAwLCAweDg2LDB4QTYsIDB4MDAsMHgxMCwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4RUMsMHgxQywgMHgwNCwweDI0LCAweDAwLDB4MTAsIDB4ODYsMHhBNiwgCi0weDAwLDB4MTQsIDB4ODcsMHgxNiwgMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVDLDB4MjAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVDLDB4MkQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweEEyLCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweEVDLDB4NjgsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4RUMsMHg3MCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4ODYsMHhBMiwgCi0weDAwLDB4MDQsIDB4ODcsMHgxNiwgMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgCi0weEVDLDB4NzEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVDLDB4ODEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVDLDB4QUMsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg5QywgMHhGNiwweDA2LCAweDQyLDB4OUMsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHg5NywweDJBLCAweDAwLDB4MDgsIDB4ODMsMHhBNiwgCi0weDAwLDB4MEMsIDB4NzcsMHgyQywgMHhGRiwweEUxLCAweDkzLDB4QUEsIDB4MDAsMHgwQywgMHg5NywweDJBLCAweDAwLDB4MUMsIDB4ODMsMHhBNiwgCi0weDAwLDB4MUMsIDB4RjcsMHgwNCwgMHg2RSwweDUwLCAweDkzLDB4QUEsIDB4MDAsMHgyMCwgMHg4MywweEJBLCAweDFELDB4REMsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDAsIDB4OTMsMHhBQSwgMHgwMCwweDJDLCAweDgzLDB4OTYsIDB4MDAsMHgwQywgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4OTMsMHhBQSwgCi0weDAwLDB4MzAsIDB4ODMsMHhCQSwgMHgwMCwweDEwLCAweEM2LDB4MzQsIDB4MDAsMHgwMCwgMHg5MywweEFBLCAweDAwLDB4MjQsIDB4ODcsMHgzQSwgCi0weDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MkEsIDB4MDAsMHgyOCwgMHgyMCwweDM2LCAweDAwLDB4MUYsIDB4RUUsMHgwMCwgCi0weEVELDB4MUMsIDB4QzcsMHgzMCwgMHg1MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgzNCwgMHg5NSwweEJBLCAweDAwLDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDQsIDB4RTAsMHgwMCwgMHhFQywweEZDLCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHg4MywweDk2LCAweDAwLDB4MTAsIDB4NzYsMHhBNSwgCi0weDAwLDB4MUUsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHhCNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4ODcsMHgyNiwgMHgwMCwweDIwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUEsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgxNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTgsIDB4ODcsMHgxNiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4M0EsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTYsMHgxNiwgCi0weEZGLDB4RjAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDE2LCAweEZGLDB4RjQsIDB4RjYsMHgwMiwgCi0weDFELDB4RTAsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDg2LDB4MTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTYsMHgxMywgCi0weEZGLDB4RkMsIDB4RjYsMHgwNCwgMHg2RSwweDUwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4MjYsMHgxNCwgCi0weDAwLDB4MTAsIDB4OTYsMHgxNiwgMHhGRiwweEVDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4NCwgMHg2RSwweDUwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg4NywweDM2LCAweDFELDB4RDgsIDB4OTYsMHgxNiwgCi0weEZGLDB4RTQsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjYsMHg4NiwgMHg0MiwweEMwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NiwweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweERCLDB4QjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RUUsMHg0RCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgxNiwgCi0weEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEQ1LDB4QTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEVFLDB4NEQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDk2LDB4MTYsIDB4RkYsMHhFNCwgMHg4NCwweDE2LCAweEZGLDB4RTQsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDk2LCAweDAwLDB4MDQsIDB4ODYsMHgxNiwgCi0weDAwLDB4MDAsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweDg1LDB4OTYsIDB4MDAsMHgwOCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVFLDB4OTksIDB4MjAsMHgzQSwgMHgwMCwweDAzLCAweEU2LDB4MDAsIDB4RUUsMHhFOSwgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4RTAsMHgwMCwgCi0weEVGLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjAsIDB4MDAsMHgxRiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weEVGLDB4MEQsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweDg1LDB4MTYsIDB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4ODUsMHgxNiwgMHgwMCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgCi0weDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUIsMHg2MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weEVGLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjAsIDB4MDAsMHgxRSwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weEVGLDB4MEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhFRCwweDc0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDE4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgxOCwgMHhGNCwweDgyLCAweDAwLDB4MDAsIDB4ODYsMHg5NiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwNCwgMHg0QSwweEEwLCAweDIzLDB4OTQsIDB4MDAsMHgxMCwgMHg4NCwweDM2LCAweDAwLDB4MDAsIDB4OTYsMHgxNiwgCi0weEZGLDB4RTQsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDk0LDB4MTYsIDB4RkYsMHhGMCwgMHg4NSwweDM2LCAweDAwLDB4MDQsIDB4QzAsMHgzMiwgCi0weDcyLDB4MDAsIDB4RUMsMHgwMCwgMHhGMCwweDE0LCAweDk1LDB4MTYsIDB4RkYsMHhGNCwgMHg3NywweDMxLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHhDNiwweEI4LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MEMsIDB4QzUsMHg4NCwgMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDQyLDB4MDAsIDB4RTYsMHgwMCwgMHhFRiwweEE0LCAweEM2LDB4MjQsIDB4MDAsMHgwMCwgMHg4NywweDM2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg1MiwweDAwLCAweEU2LDB4MDAsIDB4RUYsMHhBOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RUYsMHhCNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDAsIDB4ODYsMHgzNiwgMHgwMCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhFRiwweEYwLCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDMyLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgCi0weEVGLDB4RjgsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweDg2LDB4QjYsIDB4MDAsMHgwNCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4RUYsMHhGOSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RjAsMHgwOSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RjAsMHgxOCwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RjAsMHg0RCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTQsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RTgsIDB4RTAsMHgwMCwgMHhGMCwweEIwLCAweDk2LDB4OTYsIDB4RkYsMHhFQywgMHgyNywweDE0LCAweDAwLDB4MUMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEYwLDB4QUQsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4NzYsMHhCOSwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhFOCwgMHg5NiwweDk2LCAweEZGLDB4RUMsIDB4RjcsMHgwNSwgCi0weDRBLDB4QTAsIDB4RTAsMHgwMCwgMHhGMCwweEI0LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhGMSwweDIxLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RTgsIDB4RjYsMHgwNiwgCi0weDQyLDB4QzgsIDB4NzYsMHhCOSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QTcsMHgzNiwgCi0weDYwLDB4MDIsIDB4ODMsMHgxNiwgMHgwMCwweDA0LCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHg3NiwweDM1LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4MDUsMHgzNCwgMHgwMCwweDAyLCAweDc1LDB4QTksIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4OTcsMHgxQSwgMHgwMCwweDAwLCAweDg3LDB4MkEsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDgsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg5NywweDFBLCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgCi0weDAwLDB4MEMsIDB4MDYsMHhCNCwgMHgwMCwweDA0LCAweEUwLDB4MDAsIDB4RjEsMHgyNCwgMHg5NiwweDlBLCAweDAwLDB4MDAsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MTAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDAwLDB4MDAsIDB4QjksMHgwMCwgMHgwMCwweDAwLCAweEJBLDB4MDAsIDB4MDAsMHgwMCwgCi0weEJCLDB4MDAsIDB4MDAsMHgwMCwgMHhCQywweDAwLCAweDAwLDB4MDAsIDB4QkQsMHgwMCwgMHgwMCwweDAwLCAweEJFLDB4MDAsIDB4MDAsMHgwMCwgCi0weEJGLDB4MDAsIDB4MDAsMHgwMCwgMHg4MCwweDAwLCAweDAwLDB4MDAsIDB4ODEsMHgwMCwgMHgwMCwweDAwLCAweDgyLDB4MDAsIDB4MDAsMHgwMCwgCi0weDgzLDB4MDAsIDB4MDAsMHgwMCwgMHg4NCwweDAwLCAweDAwLDB4MDAsIDB4ODUsMHgwMCwgMHgwMCwweDAwLCAweDg2LDB4MDAsIDB4MDAsMHgwMCwgCi0weDg3LDB4MDAsIDB4QjksMHhCOSwgMHhCOSwweEJBLCAweEI5LDB4QkIsIDB4QjksMHhCQywgMHhCOSwweEJELCAweEI5LDB4QkUsIDB4QjksMHhCRiwgCi0weEI5LDB4ODAsIDB4QjksMHg4MSwgMHhCOSwweDgyLCAweEI5LDB4ODMsIDB4QjksMHg4NCwgMHhCOSwweDg1LCAweEI5LDB4ODYsIDB4QjksMHg4NywgCi0weEJBLDB4QjksIDB4QkEsMHhCQSwgMHhCQSwweEJCLCAweEJBLDB4QkMsIDB4QkEsMHhCRCwgMHhCQSwweEJFLCAweEJBLDB4QkYsIDB4QkEsMHg4MCwgCi0weEJBLDB4ODEsIDB4QkEsMHg4MiwgMHhCQSwweDgzLCAweEJBLDB4ODQsIDB4QkEsMHg4NSwgMHhCQSwweDg2LCAweEJBLDB4ODcsIDB4QkIsMHhCOSwgCi0weEJCLDB4QkEsIDB4QkIsMHhCQiwgMHhCQiwweEJDLCAweEJCLDB4QkQsIDB4QkIsMHhCRSwgMHhCQiwweEJGLCAweEJCLDB4ODAsIDB4QkIsMHg4MSwgCi0weEJCLDB4ODIsIDB4QkIsMHg4MywgMHhCQiwweDg0LCAweEJCLDB4ODUsIDB4QkIsMHg4NiwgMHhCQiwweDg3LCAweEJDLDB4QjksIDB4QkMsMHhCQSwgCi0weEJDLDB4QkIsIDB4QkMsMHhCQywgMHhCQywweEJELCAweEJDLDB4QkUsIDB4QkMsMHhCRiwgMHhCQywweDgwLCAweEJDLDB4ODEsIDB4QkMsMHg4MiwgCi0weEJDLDB4ODMsIDB4QkMsMHg4NCwgMHhCQywweDg1LCAweEJDLDB4ODYsIDB4QkMsMHg4NywgMHhCRCwweEI5LCAweEJELDB4QkEsIDB4QkQsMHhCQiwgCi0weEJELDB4QkMsIDB4QkQsMHhCRCwgMHhCRCwweEJFLCAweEJELDB4QkYsIDB4QkQsMHg4MCwgMHhCRCwweDgxLCAweEJELDB4ODIsIDB4QkQsMHg4MywgCi0weEJELDB4ODQsIDB4QkQsMHg4NSwgMHhCRCwweDg2LCAweEJELDB4ODcsIDB4QkUsMHhCOSwgMHhCRSwweEJBLCAweEJFLDB4QkIsIDB4QkUsMHhCQywgCi0weEJFLDB4QkQsIDB4QkUsMHhCRSwgMHhCRSwweEJGLCAweEJFLDB4ODAsIDB4QkUsMHg4MSwgMHhCRSwweDgyLCAweEJFLDB4ODMsIDB4QkUsMHg4NCwgCi0weEJFLDB4ODUsIDB4QkUsMHg4NiwgMHhCRSwweDg3LCAweEJGLDB4QjksIDB4QkYsMHhCQSwgMHhCRiwweEJCLCAweEJGLDB4QkMsIDB4QkYsMHhCRCwgCi0weEJGLDB4QkUsIDB4QkYsMHhCRiwgMHhCRiwweDgwLCAweEJGLDB4ODEsIDB4QkYsMHg4MiwgMHhCRiwweDgzLCAweEJGLDB4ODQsIDB4QkYsMHg4NSwgCi0weEJGLDB4ODYsIDB4QkYsMHg4NywgMHg4MCwweEI5LCAweDgwLDB4QkEsIDB4ODAsMHhCQiwgMHg4MCwweEJDLCAweDgwLDB4QkQsIDB4ODAsMHhCRSwgCi0weDgwLDB4QkYsIDB4ODAsMHg4MCwgMHg4MCwweDgxLCAweDgwLDB4ODIsIDB4ODAsMHg4MywgMHg4MCwweDg0LCAweDgwLDB4ODUsIDB4ODAsMHg4NiwgCi0weDgwLDB4ODcsIDB4ODEsMHhCOSwgMHg4MSwweEJBLCAweDgxLDB4QkIsIDB4ODEsMHhCQywgMHg4MSwweEJELCAweDgxLDB4QkUsIDB4ODEsMHhCRiwgCi0weDgxLDB4ODAsIDB4ODEsMHg4MSwgMHg4MSwweDgyLCAweDgxLDB4ODMsIDB4ODEsMHg4NCwgMHg4MSwweDg1LCAweDgxLDB4ODYsIDB4ODEsMHg4NywgCi0weDgyLDB4QjksIDB4ODIsMHhCQSwgMHg4MiwweEJCLCAweDgyLDB4QkMsIDB4ODIsMHhCRCwgMHg4MiwweEJFLCAweDgyLDB4QkYsIDB4ODIsMHg4MCwgCi0weDgyLDB4ODEsIDB4ODIsMHg4MiwgMHg4MiwweDgzLCAweDgyLDB4ODQsIDB4ODIsMHg4NSwgMHg4MiwweDg2LCAweDgyLDB4ODcsIDB4ODMsMHhCOSwgCi0weDgzLDB4QkEsIDB4ODMsMHhCQiwgMHg4MywweEJDLCAweDgzLDB4QkQsIDB4ODMsMHhCRSwgMHg4MywweEJGLCAweDgzLDB4ODAsIDB4ODMsMHg4MSwgCi0weDgzLDB4ODIsIDB4ODMsMHg4MywgMHg4MywweDg0LCAweDgzLDB4ODUsIDB4ODMsMHg4NiwgMHg4MywweDg3LCAweDg0LDB4QjksIDB4ODQsMHhCQSwgCi0weDg0LDB4QkIsIDB4ODQsMHhCQywgMHg4NCwweEJELCAweDg0LDB4QkUsIDB4ODQsMHhCRiwgMHg4NCwweDgwLCAweDg0LDB4ODEsIDB4ODQsMHg4MiwgCi0weDg0LDB4ODMsIDB4ODQsMHg4NCwgMHg4NCwweDg1LCAweDg0LDB4ODYsIDB4ODQsMHg4NywgMHg4NSwweEI5LCAweDg1LDB4QkEsIDB4ODUsMHhCQiwgCi0weDg1LDB4QkMsIDB4ODUsMHhCRCwgMHg4NSwweEJFLCAweDg1LDB4QkYsIDB4ODUsMHg4MCwgMHg4NSwweDgxLCAweDg1LDB4ODIsIDB4ODUsMHg4MywgCi0weDg1LDB4ODQsIDB4ODUsMHg4NSwgMHg4NSwweDg2LCAweDg1LDB4ODcsIDB4ODYsMHhCOSwgMHg4NiwweEJBLCAweDg2LDB4QkIsIDB4ODYsMHhCQywgCi0weDg2LDB4QkQsIDB4ODYsMHhCRSwgMHg4NiwweEJGLCAweDg2LDB4ODAsIDB4ODYsMHg4MSwgMHg4NiwweDgyLCAweDg2LDB4ODMsIDB4ODYsMHg4NCwgCi0weDg2LDB4ODUsIDB4ODYsMHg4NiwgMHg4NiwweDg3LCAweDg3LDB4QjksIDB4ODcsMHhCQSwgMHg4NywweEJCLCAweDg3LDB4QkMsIDB4ODcsMHhCRCwgCi0weDg3LDB4QkUsIDB4ODcsMHhCRiwgMHg4NywweDgwLCAweDg3LDB4ODEsIDB4ODcsMHg4MiwgMHg4NywweDgzLCAweDg3LDB4ODQsIDB4ODcsMHg4NSwgCi0weDg3LDB4ODYsIDB4ODcsMHg4NywgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MTgsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEYzLDB4N0QsIDB4RjYsMHgwNiwgMHg0MiwweDk2LCAweEY3LDB4MDQsIDB4NDIsMHg5NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhGNSwweEUwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHhGMywweDg0LCAweDZGLDB4MzAsIDB4OTAsMHgxMywgCi0weEZGLDB4RkMsIDB4MjcsMHgxQywgMHgwMCwweDAyLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHhFQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENELDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhFQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4OTcsMHgxRSwgCi0weDAwLDB4MDgsIDB4ODMsMHgxNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDFFLCAweDAwLDB4MEMsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDgsIDB4MDQsMHg5QywgMHgwMCwweDIyLCAweDkzLDB4MUUsIDB4MDAsMHgxQywgMHg4MywweDE2LCAweDAwLDB4MEMsIDB4OTMsMHg5NiwgCi0weEZGLDB4RjQsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDYsMHgxOCwgCi0weDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4MDYsMHg5QywgMHgwMCwweDIwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4OTYsMHg5NiwgCi0weEZGLDB4RTQsIDB4NzUsMHgzNSwgMHgwMCwweDFFLCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDI0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDI2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDI4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDJBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDJDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDJFLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgwNCwweDlDLCAweDAwLDB4MzAsIDB4NzYsMHgzMSwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgCi0weDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDIwLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDA4LCAweEVFLDB4MDAsIDB4RjUsMHg5OCwgMHhGMywweDA2LCAweDE0LDB4RDgsIDB4ODMsMHgxNiwgCi0weEZGLDB4RTQsIDB4ODcsMHgxRSwgMHgwMCwweDIwLCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDI1LDB4QjgsIDB4MDAsMHgwMSwgMHhDNCwweEFDLCAweDU4LDB4MDAsIDB4MDQsMHgyNCwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEVDLDB4MDAsIDB4RjUsMHg5NSwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgCi0weEZGLDB4RTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MTgsIDB4MDAsMHgwMiwgMHhBNywweDMyLCAweDU4LDB4MDIsIDB4QzYsMHhCMCwgCi0weDU4LDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RTgsIDB4QzYsMHhCMCwgMHg0MCwweDAwLCAweDc3LDB4QjgsIDB4MDAsMHgxOCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgCi0weEY1LDB4N0QsIDB4RjcsMHgzNywgMHg2OCwweDAwLCAweEY1LDB4MDIsIDB4RkYsMHhGRiwgMHhDNywweDMwLCAweDQ4LDB4MDAsIDB4RjUsMHgzQiwgCi0weDY4LDB4MDAsIDB4MjQsMHhBNCwgMHgwMCwweDAyLCAweDI0LDB4MjAsIDB4MDAsMHgwMiwgMHhFMCwweDAwLCAweEY1LDB4MzQsIDB4MjUsMHhBQywgCi0weDAwLDB4MDEsIDB4RjMsMHgwNiwgMHgxNCwweEQ4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDAyLCAweDAwLDB4MzQsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHg3NiwweDk5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUEsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgxMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTAsIDB4RjcsMHgwNCwgCi0weDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEY2LDB4MzksIDB4RjYsMHgwNiwgCi0weDQyLDB4OTYsIDB4RjcsMHgwNCwgMHg0MiwweDk0LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgCi0weEY3LDB4NDgsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY1LDB4MDQsIDB4NkYsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxNiwgCi0weEZGLDB4RjQsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweDI3LDB4MjgsIDB4MDAsMHgwMiwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weENELDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4ODYsMHhBQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgyOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweEY2LDB4OTksIDB4OTYsMHg5NiwgCi0weEZGLDB4RUMsIDB4QzYsMHgzOCwgMHgwMCwweDAwLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RUMsIDB4ODUsMHgxNiwgCi0weEZGLDB4RjQsIDB4NDcsMHgyQywgMHhGRiwweEZFLCAweDA3LDB4MzgsIDB4MDAsMHgwMiwgMHhDNywweDI4LCAweDcyLDB4MDAsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4ODUsMHg5NiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDRCwweEI4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4RjQsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDIsIDB4OTcsMHgyQSwgMHgwMCwweDA4LCAweDg1LDB4OTYsIDB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHhBQSwgCi0weDAwLDB4MEMsIDB4ODUsMHg5NiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweEFBLCAweDAwLDB4MUMsIDB4RjUsMHgwNiwgCi0weDE0LDB4RDgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4MDAsMHgyMCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgCi0weEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4ODUsMHgxNiwgCi0weEZGLDB4RUMsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEVBLDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MTAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODUsMHg5NiwgMHgwMCwweDAwLCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHg4NywweDE2LCAweDAwLDB4MDgsIDB4RjYsMHgwMiwgCi0weEZGLDB4RkMsIDB4MDYsMHhBOCwgMHgwMCwweDAzLCAweEM2LDB4QjQsIDB4NjQsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgCi0weDY0LDB4MDAsIDB4QzcsMHgzNCwgMHg3MCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhDNSwweEFDLCAweDZBLDB4MDAsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgwMCwweDAzLCAweEM1LDB4MjgsIDB4NzQsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDUyLDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDE0LDB4RDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MTAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MTAsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEY4LDB4MEQsIDB4RjYsMHgwNiwgMHg0MiwweDk2LCAweEY3LDB4MDQsIDB4NDIsMHg5NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhGOSwweDIwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHhGNSwweDA0LCAweDZGLDB4MzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDkwLDB4MTMsIDB4RkYsMHhGQywgMHgyNywweDI4LCAweDAwLDB4MDIsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4ODUsMHg5NiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDRCwweEI4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweDAwLDB4MDQsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHhBQSwgMHgwMCwweDAwLCAweDc3LDB4MjksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgCi0weEY4LDB4NkQsIDB4OTYsMHg5NiwgMHhGRiwweEVDLCAweEM2LDB4MzgsIDB4MDAsMHgwMCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weEZGLDB4RUMsIDB4ODUsMHgxNiwgMHhGRiwweEY0LCAweDQ3LDB4MkMsIDB4RkYsMHhGRSwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4QzcsMHgyOCwgCi0weDcyLDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgCi0weEZGLDB4RjQsIDB4RjUsMHg4MiwgMHgwMCwweDA2LCAweEY1LDB4QUIsIDB4MjgsMHgwMCwgMHg4NSwweDk2LCAweDAwLDB4MDgsIDB4MDcsMHgyOCwgCi0weDAwLDB4MDIsIDB4OTUsMHhBQSwgMHgwMCwweDA0LCAweDA1LDB4MTQsIDB4MDAsMHgwRSwgMHg4NSwweDJBLCAweDAwLDB4MDAsIDB4NzcsMHhBOSwgCi0weDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEM1LDB4MjgsIDB4N0YsMHhDMCwgMHg3NSwweDI5LCAweEZGLDB4RjAsIDB4RjUsMHgzQiwgCi0weDI4LDB4MDAsIDB4RjUsMHg4NiwgMHgxNCwweEQ4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDAyLCAweDAwLDB4MDgsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4ODUsMHg5NiwgMHgwMCwweDAwLCAweDg1LDB4MTYsIDB4RkYsMHhFQywgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzcsMHgzOCwgCi0weDUwLDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjcsMHg1QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgxMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MDgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RUMsIDB4ODMsMHg5NiwgMHgwMCwweDA0LCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEZBLDB4NjQsIDB4RjYsMHgwNiwgCi0weDQyLDB4OTYsIDB4RjUsMHgwNCwgMHg2RiwweDMwLCAweDkwLDB4MTMsIDB4RkYsMHhGQywgMHgyNywweDI4LCAweDAwLDB4MDIsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4RjQsIDB4OTUsMHgxNiwgMHhGRiwweEYwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4QjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEYwLCAweEYzLDB4MDIsIDB4MDAsMHgwNywgMHg4MywweDk2LCAweEZGLDB4RjQsIDB4RjMsMHgyQiwgCi0weDI4LDB4MDAsIDB4MDcsMHgyOCwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDNCLCAweDI4LDB4MDAsIDB4ODcsMHgxRSwgCi0weDAwLDB4MDAsIDB4NzYsMHg5RCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNSwweDlDLCAweDAwLDB4MDIsIDB4NzYsMHgyRCwgCi0weDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDc0LDB4OUQsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4MDQsMHgxQywgCi0weDAwLDB4MDYsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MDYsMHhBOCwgCi0weDAwLDB4MDQsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgwNiwweEE4LCAweDAwLDB4MDYsIDB4NzUsMHhBMSwgCi0weDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxRSwgCi0weDAwLDB4MDQsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDA2LDB4QTgsIDB4MDAsMHgwOCwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgCi0weDRGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDIyLCAweDAwLDB4MDAsIDB4MDYsMHhBOCwgCi0weDAwLDB4MEEsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjMsMHgwNiwgCi0weDE0LDB4RDgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDIsIDB4MDAsMHgwQywgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGNywweDVDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweEZBLDB4ODQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDk0LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgCi0weDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4NDgsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEZELDB4OTgsIDB4RjYsMHgwNiwgMHg0MiwweDk2LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDI0LDB4MTQsIDB4MDAsMHgxRSwgMHgwNiwweDJDLCAweDAwLDB4MDIsIDB4NzUsMHgzMSwgCi0weDAwLDB4MUUsIDB4MjQsMHg5NCwgMHgwMCwweDIwLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHhGMywweDg0LCAweDZFLDB4NTAsIDB4QzcsMHgzOCwgCi0weDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4OTMsMHg5NiwgCi0weEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4MUMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4MUEsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4MTgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4MTYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4MTQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwgCi0weDAwLDB4MTIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDI0LDB4MTQsIDB4MDAsMHgxMCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4OTAsMHgxMywgCi0weEZGLDB4RkMsIDB4MjcsMHgxQywgMHgwMCwweDAyLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgCi0weEZGLDB4QkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgCi0weEZGLDB4QkMsIDB4MjMsMHgxNCwgMHgwMCwweDM2LCAweDI0LDB4OTQsIDB4MDAsMHgzOCwgMHg3MywweEE1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywgCi0weEZGLDB4RTUsIDB4RjQsMHgwNCwgMHg0MiwweEMwLCAweEY2LDB4ODYsIDB4NDIsMHhDMCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4MkQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzQsMHgyMCwgCi0weDZGLDB4QzAsIDB4NzQsMHgyMCwgMHhGRiwweEYwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg3NSwweDJELCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjYsMHgwNCwgMHg2RSwweDUwLCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDM0LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDMyLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDMwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDJFLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDJDLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDJBLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4MjgsIDB4NzUsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgCi0weDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEM4LCAweEY2LDB4ODIsIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDNGLDB4QzAsIDB4OTYsMHhCMiwgCi0weDAwLDB4MDgsIDB4MDYsMHhCMCwgMHgxRCwweEQ4LCAweEY0LDB4MzcsIDB4MjgsMHgwMCwgMHhGMywweDg2LCAweDE0LDB4RDgsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgxRCwweEUwLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUEsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgCi0weEZELDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg5NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDYsIDB4RTYsMHgwMCwgMHhGRSwweDIxLCAweEY1LDB4ODIsIDB4MDAsMHgxRSwgMHhGNywweDA0LCAweDQyLDB4QTgsIDB4RjYsMHgwNiwgCi0weDQyLDB4QTgsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgCi0weEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4RkUsMHgzNCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHgwNSwgCi0weDZGLDB4MzQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODYsMHgxNiwgCi0weDAwLDB4MDAsIDB4ODUsMHg5NiwgMHgwMCwweDA0LCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDcsIDB4RTYsMHgwMCwgCi0weEZFLDB4OUQsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDIsMHhBOCwgMHhGNiwweDA2LCAweDQyLDB4QUEsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhGRiwweDFDLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHgwNywweDMwLCAweDAwLDB4MDIsIDB4ODYsMHhCQSwgCi0weDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgCi0weEZGLDB4RjAsIDB4MjAsMHgzNiwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4RkUsMHhENSwgMHhGNiwweDA1LCAweDZGLDB4MzQsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMCwgMHhGRSwweEU1LCAweEY1LDB4MDIsIDB4MDAsMHgyMCwgMHhFMCwweDAwLCAweEZFLDB4RkMsIDB4RjYsMHgwNiwgCi0weDQyLDB4QUMsIDB4MjAsMHgyRSwgMHgwMCwweDBDLCAweEU2LDB4MDAsIDB4RkYsMHgxQywgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwgCi0weDAwLDB4MUYsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHhGRiwweDFDLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4QUMsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDQsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwOCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFQywweDAwLCAweEZGLDB4N0QsIDB4RjYsMHg4NSwgCi0weDZGLDB4MzQsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDMsIDB4RUUsMHgwMCwgCi0weEZGLDB4ODAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgCi0weEZGLDB4QkQsIDB4RjYsMHgwNiwgMHg0MiwweEFFLCAweEY3LDB4MDQsIDB4NkYsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzQSwgCi0weDAwLDB4MDgsIDB4RjYsMHg4MiwgMHhGRiwweEVDLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhBNywweDNBLCAweDY4LDB4MDIsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMCwgMHhGRiwweEQ4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4QUMsIDB4NzYsMHhCMSwgCi0weDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MTcsIDB4MDAsMHgwMCwgCi0weDAwLDB4MUEsIDB4MDAsMHgwMCwgMHgwMCwweDFELCAweDAwLDB4MDAsIDB4MDAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4NTYsMHg2NSwgCi0weDcyLDB4NzMsIDB4NjksMHg2RiwgMHg2RSwweDUzLCAweDc0LDB4NzIsIDB4NjksMHg2RSwgMHg2NywweDNBLCAweDIwLDB4NkQsIDB4NjMsMHg3MCwgCi0weDJELDB4NkMsIDB4MzQsMHg3NiwgMHgzMywweDIwLCAweDMzLDB4MkUsIDB4MzAsMHgzOCwgMHg2MywweDIwLCAweDQ0LDB4NjUsIDB4NjMsMHgyMCwgCi0weDMxLDB4MzEsIDB4MjAsMHgzMSwgMHgzOSwweDM5LCAweDM2LDB4MjAsIDB4MzEsMHgzMywgMHgzQSwweDMwLCAweDM2LDB4M0EsIDB4MzEsMHgzNiwgCi0weDAwLDB4MDAsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweEUwLDB4MEMsIDB4RkYsMHgwMiwgCi0weDAwLDB4MDAsIDB4OTcsMHgwMiwgMHhGRiwweDg0LCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDRiwweEZDLCAweDc1LDB4ODAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDIsIDB4OTYsMHgwMiwgMHhGRiwweDhDLCAweDkwLDB4MDIsIDB4RkYsMHg4OCwgMHhGNywweDA0LCAweEUwLDB4MjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDAsMHg3NCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDMsIDB4OTYsMHg4MiwgMHhGRiwweDk4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDBDLCAweEY1LDB4MDIsIDB4MTQsMHg5NCwgMHhGNSwweDA1LCAweDdCLDB4MDAsIDB4RjUsMHgwRSwgCi0weEYwLDB4MTQsIDB4RjUsMHgwNSwgMHg3QiwweDA4LCAweEY3LDB4MDYsIDB4RTAsMHgwMCwgMHhGNiwweDg2LCAweDdCLDB4NjgsIDB4QzcsMHgzOCwgCi0weDZBLDB4MDAsIDB4RjcsMHgwNSwgMHg3QSwweEYwLCAweEY1LDB4MDIsIDB4MDAsMHg0QywgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDIsIDB4RUUsMHgwMSwgMHgwMSwweDI0LCAweEY1LDB4MDUsIDB4N0EsMHhGOCwgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4QzYsMHgzNCwgCi0weDAwLDB4MDAsIDB4RjcsMHgwNiwgMHhFMCwweDMwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHhGNSwweDA2LCAweDZGLDB4NDQsIDB4QjcsMHgzMiwgCi0weDUwLDB4MDIsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RjQsIDB4OTYsMHgxNiwgCi0weEZGLDB4RjAsIDB4OTYsMHg5NiwgMHhGRiwweEVDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDAzLDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODUsMHg5NiwgMHhGRiwweEY0LCAweDg2LDB4MTYsIDB4RkYsMHhGMCwgMHg4NiwweDk2LCAweEZGLDB4RUMsIDB4MDUsMHhBQywgCi0weDE0LDB4OTQsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMiwgMHhFRSwweDAxLCAweDAwLDB4RDUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDQsIDB4RjUsMHgwMiwgMHgwMCwweDIyLCAweEY1LDB4MDUsIDB4NkYsMHg1OCwgMHhGMCwweDA1LCAweDZGLDB4NTQsIDB4RjAsMHgwNSwgCi0weDZGLDB4NTAsIDB4RjAsMHgwNSwgMHgyRCwweDQwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjksMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDMsIDB4RjcsMHgwNSwgMHhFMCwweDA4LCAweEY3LDB4MDQsIDB4N0EsMHhEOCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4OTYsMHgwMiwgCi0weEZGLDB4OTQsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDEsMHg5MSwgMHhGNywweDA2LCAweDdBLDB4RTgsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwMywweERDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDdBLDB4RTgsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDUsIDB4RjYsMHgzQiwgMHgyOCwweDAwLCAweEY3LDB4MDYsIDB4N0EsMHhFMCwgMHg4NiwweDgyLCAweEZGLDB4NDQsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDMsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDEsMHhDOSwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgCi0weDZGLDB4NjQsIDB4ODYsMHg4MiwgMHhGRiwweDQ0LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDAxLDB4QjAsIDB4RjcsMHgwNSwgMHg2RiwweDY0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDAwLDB4MzQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDAsMHg4QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0NCwweDI4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4RjAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDBDLDB4NjAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDQsMHgwOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgwMCwweDIwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDBCLDB4RDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFELDB4NjgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHg1MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg1RiwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDZELDB4RUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIxLDB4RDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjIsMHgyQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4OTAsMHgwMiwgCi0weEZGLDB4OTQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MEIsMHhGQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MDgsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEM1LDB4QjAsIDB4MDAsMHgwMCwgMHgyMCwweDMyLCAweDAwLDB4MDIsIDB4RUUsMHgwMSwgCi0weDAzLDB4MDgsIDB4RjUsMHgwNiwgMHg2RiwweDQ0LCAweEE2LDB4QUUsIDB4NTAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFNiwweDAxLCAweDAyLDB4RkMsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDIsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RjQsIDB4OTYsMHgxNiwgCi0weEZGLDB4RjAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDMsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgCi0weEZGLDB4RjAsIDB4ODUsMHg5NiwgMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNSwweEFDLCAweDAwLDB4MDQsIDB4RTAsMHgwMSwgCi0weDAyLDB4QUMsIDB4MDYsMHgzMCwgMHgwMCwweDAxLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4ODcsMHgxNiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDgsIDB4OTYsMHgzQSwgCi0weDAwLDB4MDgsIDB4OTYsMHgzQSwgMHgwMCwweDBDLCAweDk2LDB4M0EsIDB4MDksMHhEOCwgMHg5NiwweDNBLCAweDA5LDB4REMsIDB4OTYsMHgzQSwgCi0weDBFLDB4RjQsIDB4OTYsMHgzQSwgMHgwRSwweEY4LCAweDk2LDB4QkEsIDB4MTQsMHgyMCwgMHg5NiwweDNBLCAweDE0LDB4MjQsIDB4OTAsMHhCQSwgCi0weDE0LDB4OEMsIDB4ODYsMHg5NiwgMHgwMCwweDA0LCAweDkwLDB4QkEsIDB4MTQsMHg5MCwgMHg5NiwweEJBLCAweDAwLDB4MDAsIDB4OTYsMHgzQSwgCi0weDAwLDB4MDQsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwgCi0weDAwLDB4MDAsIDB4ODcsMHgxNiwgMHgwMCwweDA4LCAweDg2LDB4MTYsIDB4MDAsMHgwNCwgMHg3NywweDM4LCAweEZGLDB4RkYsIDB4QzUsMHgzMCwgCi0weDcwLDB4MDAsIDB4QzAsMHgzMiwgMHg1MiwweDAwLCAweEU0LDB4MDEsIDB4MDMsMHhDOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTQsMHgwMSwgCi0weDAzLDB4QTAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MEMsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEUwLDB4MDEsIDB4MDMsMHhFOCwgMHhGNywweDA1LCAweDdBLDB4RDgsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MEEsIDB4RjUsMHgwNSwgMHg3MSwweENDLCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwgCi0weDcxLDB4QzQsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHgyMCwweDM2LCAweDAwLDB4MEEsIDB4RUMsMHgwMSwgCi0weDA0LDB4NjQsIDB4RjUsMHgwNSwgMHg3MSwweEM4LCAweEY1LDB4OEEsIDB4MUUsMHgwMCwgMHhGNiwweDA2LCAweDcxLDB4QzQsIDB4NDcsMHgyQywgCi0weEZGLDB4RkMsIDB4OTcsMHgzMiwgMHgwMCwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwNCwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDcxLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAxLCAweDA0LDB4NDEsIDB4MDUsMHhBQywgCi0weDIxLDB4NEMsIDB4RjAsMHgwNSwgMHg3MSwweDk4LCAweEY1LDB4MDYsIDB4NkYsMHg2OCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDdCLDB4MTgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHgwNSwweEQ0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MDUsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg2RiwweDY4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4MEIsMHg3MCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MDYsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NkYsMHg2OCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDBCLDB4QTAsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDA1LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDcwLDB4ODAsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDBCLDB4NzAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwNiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDcwLDB4ODAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHgwNSwweDU4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDAyLCAweDAwLDB4MEEsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg3MSwweDBDLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDA1LDB4NTgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNCwgCi0weDcxLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDA1LDB4N0QsIDB4RjYsMHg4NiwgCi0weDcxLDB4QzQsIDB4RTAsMHgwMSwgMHgwNSwweDk0LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDUsMHhBQywgMHhGNywweDA1LCAweDdCLDB4MTAsIDB4RjYsMHgwNiwgCi0weDcxLDB4MEMsIDB4RTAsMHgwMSwgMHgwNSwweEMwLCAweEY2LDB4MDUsIDB4N0IsMHgxOCwgMHhGNiwweDA2LCAweDZGLDB4NjgsIDB4RjYsMHgwNSwgCi0weDdCLDB4MTgsIDB4OTcsMHgwMiwgMHhGRiwweDQ4LCAweDA3LDB4MzgsIDB4MjEsMHgyOCwgMHg5NywweDAyLCAweEZGLDB4NEMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTAsIDB4ODYsMHg4MiwgCi0weEZGLDB4NDgsIDB4RjQsMHg4NiwgMHg2RiwweDY4LCAweEY0LDB4ODUsIDB4N0IsMHgxOCwgMHhGNSwweDA0LCAweDdCLDB4MTAsIDB4MjYsMHhCNCwgCi0weDAwLDB4MDIsIDB4ODUsMHhCNiwgMHgwMCwweDAwLCAweDg3LDB4MkEsIDB4MDAsMHgwMCwgMHg3NiwweDI5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgCi0weEZGLDB4RTUsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNSwweEFDLCAweDZGLDB4QzAsIDB4QzcsMHgzOCwgCi0weDY3LDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4QjgsIDB4MDAsMHgxMCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA2LDB4NDUsIDB4NzUsMHhBQywgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4NzEsMHhBQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweEFDLCAweEY3LDB4MDQsIDB4NzEsMHhBQywgMHhFMCwweDAxLCAweDA4LDB4QzQsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4NzcsMHgyQywgMHhGRiwweEY4LCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDA2LDB4NzEsIDB4NzYsMHhBOSwgCi0weDAwLDB4MUUsIDB4RjcsMHgwNCwgMHg3MSwweEE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QTgsIDB4RjcsMHgwNCwgMHg3MSwweEE4LCAweEUwLDB4MDEsIDB4MDgsMHhDNCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgyQSwgCi0weDAwLDB4MDAsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDQsIDB4MjAsMHgzQSwgMHgwMCwweDAzLCAweEUyLDB4MDEsIDB4MDgsMHhBNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4RjYsMHg4NiwgMHgwNiwweEE0LCAweEE2LDB4QjYsIDB4NzAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzEsMHgzNCwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4MDcsMHg3QywgMHgwMCwweDAxLCAweDA3LDB4RUMsIDB4MDAsMHgwMSwgCi0weDA4LDB4NDQsIDB4ODcsMHgyQSwgMHgwMCwweDA0LCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMSwgCi0weDA2LDB4RDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MDIsIDB4RkYsMHg0OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDUyLDB4MDAsIDB4OTcsMHgyQSwgMHgwMCwweDA0LCAweDg3LDB4MkEsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDIxLDB4MDAsIDB4RUUsMHgwMSwgMHgwNywweDNDLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDQsIDB4ODcsMHgwMiwgCi0weEZGLDB4NDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NTIsMHgwMCwgMHgyNywweDM4LCAweDAwLDB4MjgsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMSwgMHgwNywweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLCAweDAwLDB4MUQsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMSwgMHgwNywweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLCAweDAwLDB4MTcsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMSwgMHgwNywweDNELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLCAweDAwLDB4MTYsIDB4NzAsMHgzRSwgCi0weEZGLDB4RTEsIDB4RTYsMHgwMSwgMHgwNywweDQ0LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwOCwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDJBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEVFLDB4MDEsIDB4MDgsMHhDMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDcxLDB4QTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDcxLDB4QTQsIDB4RjcsMHgwNCwgCi0weDcxLDB4QTQsIDB4RTAsMHgwMSwgMHgwOCwweEM0LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDJBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgyMSwweDAwLCAweEVFLDB4MDEsIDB4MDcsMHhFMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4ODYsMHhBQSwgCi0weDAwLDB4MDQsIDB4ODcsMHgwMiwgMHhGRiwweDQ4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDUyLDB4MDAsIDB4MjcsMHgzOCwgCi0weDAwLDB4MEMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDEsIDB4MDcsMHhFMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhGQywgCi0weDAwLDB4MUQsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsIDB4MDcsMHhFMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhGQywgCi0weDAwLDB4MTcsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsIDB4MDcsMHhFMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhGQywgCi0weDAwLDB4MTYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsIDB4MDgsMHg4MCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMSwgMHgwOCwweDgwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NywweDAyLCAweEZGLDB4NDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg1MiwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgwNCwgMHgyMCwweDNBLCAweDAwLDB4MDgsIDB4RTYsMHgwMSwgCi0weDA4LDB4MzgsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDc3LDB4RkMsIDB4MDAsMHgxRCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA4LDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsIDB4MDAsMHgxNywgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA4LDB4MzksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsIDB4MDAsMHgxNiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA4LDB4ODAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHhFMCwweDAxLCAweDA4LDB4ODAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc3LDB4RkMsIDB4MDAsMHgxRCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA4LDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsIDB4MDAsMHgxNywgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA4LDB4NzksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsIDB4MDAsMHgxNiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDA4LDB4ODAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDA4LDB4QzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzEsMHhBMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweEEwLCAweEY3LDB4MDQsIDB4NzEsMHhBMCwgMHhFMCwweDAxLCAweDA4LDB4QzQsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3MSwweDlDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDcxLDB4OUMsIDB4RjcsMHgwNCwgMHg3MSwweDlDLCAweEUwLDB4MDEsIDB4MDgsMHhDNCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDksMHg2OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgCi0weDdCLDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgCi0weEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgyNywweDM4LCAweDAwLDB4MDQsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDMsIDB4RTIsMHgwMSwgMHgwQiwweDUwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNiwweDg2LCAweDA5LDB4MEMsIDB4QTYsMHhCNiwgCi0weDcwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMxLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA5LDB4MUMsIDB4MDAsMHgwMSwgCi0weDBBLDB4RTAsIDB4MDAsMHgwMSwgMHgwQSwweEFDLCAweDAwLDB4MDEsIDB4MEIsMHgxNCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjYsMHgwNCwgCi0weDcxLDB4Q0MsIDB4MDYsMHhCOCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NjIsMHgwMCwgMHhFNiwweDAxLCAweDA5LDB4MzgsIDB4QzcsMHgzNCwgCi0weDAwLDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweEY1LDB4ODQsIDB4NzEsMHhENCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDVBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDA5LDB4ODUsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3MSwweEIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QjAsIDB4RjcsMHgwNCwgMHg3MSwweEIwLCAweEY3LDB4MDQsIDB4NzEsMHhCNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweEI0LCAweEY3LDB4MDQsIDB4NzEsMHhCNCwgMHhFMCwweDAxLCAweDBCLDB4NTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjQsMHg4NCwgMHg3MSwweEM4LCAweEY2LDB4ODUsIDB4NzEsMHhEMCwgMHg5NCwweDk2LCAweEZGLDB4RjQsIDB4RjQsMHg4NCwgCi0weDdCLDB4MTAsIDB4QzAsMHgzNiwgMHg2MiwweDAwLCAweEU2LDB4MDEsIDB4MDksMHhBNCwgMHg5NCwweDk2LCAweEZGLDB4RUMsIDB4RjAsMHgwNSwgCi0weDcxLDB4RDAsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEYwLDB4MDUsIDB4NzEsMHhDOCwgMHg4NCwweDk2LCAweEZGLDB4RUMsIDB4QzAsMHgzQSwgCi0weDVBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzEsMHhDNCwgMHg4NywweDI2LCAweDAwLDB4MDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzAsMHgzQSwgMHhGRiwweEUxLCAweEU2LDB4MDEsIDB4MDksMHhFMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDcxLDB4OTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDcxLDB4OTgsIDB4ODQsMHg5NiwgCi0weEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDBBLDB4NzEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDUsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDE0LCAweEU2LDB4MDEsIDB4MEEsMHg0RCwgMHgyNywweDAwLCAweDAwLDB4MEMsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDEsIDB4RTIsMHgwMSwgMHgwQSwweDRELCAweEY3LDB4MDYsIDB4MkQsMHhDQywgMHhGNiwweDg0LCAweDJFLDB4Q0MsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzUsMHhCNSwgMHgwMCwweDAyLCAweEI2LDB4MkUsIDB4NzAsMHgwMiwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4RjYsMHg4NSwgCi0weDJFLDB4Q0MsIDB4ODYsMHgwMiwgMHhGRiwweDM0LCAweEY3LDB4MDYsIDB4MkUsMHg0QywgMHgyMCwweDM2LCAweDAwLDB4MUYsIDB4RTIsMHgwMSwgCi0weDBBLDB4NEQsIDB4QjYsMHgyRSwgMHg3MCwweDAyLCAweEYwLDB4MDUsIDB4MkUsMHhDQywgMHhGNywweDA0LCAweDJELDB4NjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDNBLCAweDAwLDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEMxLDB4MzgsIDB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgCi0weDcxLDB4QkMsIDB4ODQsMHg5NiwgMHhGRiwweEVDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDcxLDB4QkMsIDB4RjcsMHgwNCwgCi0weDcxLDB4QkMsIDB4ODYsMHhBNiwgMHgwMCwweDA0LCAweDg0LDB4OTYsIDB4RkYsMHhGNCwgMHhGNywweDA0LCAweDcxLDB4QjgsIDB4MjAsMHgyNiwgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweEY3LDB4MDUsIDB4NzEsMHhCOCwgMHhFNiwweDAxLCAweDBCLDB4NTEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMSwgMHgwQiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDcxLDB4QzAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzEsMHhDMCwgMHhGNywweDA0LCAweDcxLDB4QzAsIDB4RjQsMHg4NCwgCi0weDdCLDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weEZELDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MEIsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDcxLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDcxLDB4QzAsIDB4RjcsMHgwNCwgCi0weDcxLDB4QzAsIDB4RjQsMHg4NCwgMHg3QiwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGRiwweDMwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAxLCAweDBCLDB4NTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3MSwweEMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDcxLDB4QzAsIDB4RjcsMHgwNCwgMHg3MSwweEMwLCAweEY2LDB4ODQsIDB4N0IsMHgxMCwgMHg4NywweDAyLCAweEZGLDB4NDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgwNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RkUsMHg0OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwNSwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4NzAsMHg4MCwgMHhGNywweDA1LCAweDdCLDB4MTgsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwNSwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4NkYsMHg2OCwgMHhGNywweDA1LCAweDdCLDB4MTgsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwNSwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4N0IsMHgxOCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDZGLDB4NjgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3QiwweDE4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDZGLDB4RjQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDdCLDB4MTgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzAsMHg4MCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDdCLDB4MTgsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3MSwweDBDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY1LDB4MDIsIDB4MDAsMHgwNCwgMHhGNSwweDA1LCAweDc2LDB4MDAsIDB4RjAsMHgwNSwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NiwweDA0LCAweEYwLDB4MDUsIDB4NzUsMHhGOCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzNiwgMHgwMCwweDA0LCAweEVDLDB4MDEsIDB4MEMsMHhCQywgMHhGNSwweDA1LCAweDc1LDB4RkMsIDB4RjUsMHg4RSwgCi0weDZBLDB4RjgsIDB4RjYsMHgwNiwgMHg3NSwweEY4LCAweDQ3LDB4MkMsIDB4RkYsMHhGQywgMHg5NywweDMyLCAweDAwLDB4MTgsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDQsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzYsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RUMsMHgwMSwgMHgwQywweDk5LCAweDA1LDB4QUMsIDB4MjEsMHg0QywgMHhGNSwweDA2LCAweDcyLDB4MTgsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg3NiwweDQ4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE1LDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4MEQsMHhGNCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MEUsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NzIsMHgxOCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDBELDB4RjQsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDBFLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDcyLDB4QTQsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDEzLDB4MkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwMSwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDczLDB4MzAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHgxNiwweEM4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MDEsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg3MywweEJDLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4MTgsMHgwMCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgCi0weDAwLDB4MTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NzQsMHg0OCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDE2LDB4NDAsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDc0LDB4RDQsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDEzLDB4MkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4MDIsIDB4MDAsMHgxMiwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgCi0weDc1LDB4NjAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjAsMHgwNSwgMHg3NSwweEYwLCAweEYwLDB4MDUsIDB4NzUsMHhFQywgMHhGMCwweDA1LCAweDc1LDB4RjQsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MzgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDBFLDB4MjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDBFLDB4M0QsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDE1LDB4RDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMSwgMHgxMywweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MEUsMHg1OSwgMHhGNiwweDg2LCAweDc1LDB4RjgsIDB4RTAsMHgwMSwgCi0weDBFLDB4NkMsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NzYsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDg2LDB4QkEsIDB4MDAsMHgxOCwgMHhGNywweDA0LCAweDc2LDB4RkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MEUsMHg5MCwgMHhGNiwweDg1LCAweDc2LDB4NjAsIDB4RjMsMHgwNiwgCi0weDc2LDB4NDgsIDB4RjMsMHgwNSwgMHg3NiwweEZDLCAweEUwLDB4MDEsIDB4MEUsMHhBNCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjMsMHgwMiwgCi0weDAwLDB4MTAsIDB4RjMsMHgwNSwgMHg3NiwweEY4LCAweEYzLDB4MDYsIDB4NzYsMHg0OCwgMHhGMywweDA1LCAweDc3LDB4MDAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTMsMHgxNSwgMHhGMywweDA2LCAweDc0LDB4NDgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDBFLDB4RDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDBFLDB4RUQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDE2LDB4NDAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMSwgMHgxMywweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDc2LDB4NjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3MCwweDNBLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgCi0weDBGLDB4MjEsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDAwLDB4QkMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MTMsMHgxNCwgMHhGMywweDA2LCAweDc1LDB4NjAsIDB4QzMsMHhCNCwgCi0weDAwLDB4MDAsIDB4ODQsMHgxRSwgMHgwMCwweDEwLCAweEY2LDB4ODQsIDB4NEEsMHhBMCwgMHgyMywweDE0LCAweDAwLDB4MjAsIDB4OTMsMHgxNiwgCi0weEZGLDB4QzQsIDB4OTQsMHgxNiwgMHhGRiwweEUwLCAweDk2LDB4OTYsIDB4RkYsMHhENCwgMHg4NSwweDFFLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgCi0weDRBLDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAxLCAweDEwLDB4MEMsIDB4OTUsMHgxNiwgCi0weEZGLDB4RTQsIDB4NzcsMHgzNSwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwNiwgCi0weDRBLDB4OTgsIDB4QzYsMHhCOCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwQywgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NDIsMHgwMCwgMHhFNiwweDAxLCAweDBGLDB4OUMsIDB4QzYsMHgyNCwgCi0weDAwLDB4MDAsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDUyLDB4MDAsIDB4RTYsMHgwMSwgCi0weDBGLDB4QTAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDBGLDB4QUQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzIsIDB4NzIsMHgwMCwgMHhFMiwweDAxLCAweDBGLDB4RTgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MDAsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEU2LDB4MDEsIDB4MEYsMHhGMCwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDQsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMSwgCi0weDBGLDB4RjEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDEwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDEwLDB4MTAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDEwLDB4NDUsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhENCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4NzYsMHhCOSwgCi0weDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgCi0weDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhEOCwgMHhFMCwweDAxLCAweDEwLDB4QjgsIDB4OTYsMHg5NiwgCi0weEZGLDB4REMsIDB4MjcsMHgxNCwgMHgwMCwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDE2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgCi0weEZGLDB4Q0MsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgCi0weEZGLDB4Q0MsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTAsMHhCNSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RDQsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgCi0weEZGLDB4RDgsIDB4OTYsMHg5NiwgMHhGRiwweERDLCAweEY3LDB4MDUsIDB4NEEsMHhBMCwgMHhFMCwweDAxLCAweDEwLDB4QkMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDEwLDB4Q0MsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDEsIDB4RTAsMHgwMSwgMHgxMSwweDI0LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LCAweEZGLDB4RDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4NzcsMHgzNSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjYsMHg4NiwgCi0weDQyLDB4QzgsIDB4QTYsMHgzQSwgMHg2OCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NSwweDM5LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgCi0weEZGLDB4RTUsIDB4MDUsMHhCOCwgMHgwMCwweDAyLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDQsIDB4OTcsMHgxNiwgCi0weEZGLDB4RUMsIDB4QzYsMHgzMCwgMHg1NywweEMwLCAweDc2LDB4MzAsIDB4RkYsMHhGMCwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4NzUsMHhBRCwgCi0weDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NUYsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4OTYsMHg5NiwgCi0weEZGLDB4RjAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTEsMHgzOCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4RTAsMHgwMSwgCi0weDExLDB4Q0MsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4OTYsIDB4RkYsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzNCwgCi0weDY4LDB4MDAsIDB4QzQsMHg5QywgMHg3MiwweDAwLCAweEMwLDB4MkUsIDB4NkEsMHgwMCwgMHhFQywweDAxLCAweDExLDB4OTgsIDB4QzUsMHgyNCwgCi0weDAwLDB4MDAsIDB4QzYsMHgyQywgMHgwMCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QTYsMHhCMiwgCi0weDcwLDB4MDIsIDB4MDUsMHhBQywgMHgwMCwweDAxLCAweEM3LDB4MzAsIDB4NzAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHhGNiwweEFCLCAweDI4LDB4MDAsIDB4MDUsMHgyOCwgCi0weDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDJFLCAweDcyLDB4MDAsIDB4RUMsMHgwMSwgCi0weDExLDB4NTksIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA1LCAweDc2LDB4RjQsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDg2LDB4OUUsIDB4MDAsMHgwNCwgMHhDNywweDM4LCAweDcwLDB4MDAsIDB4QzcsMHgzOCwgCi0weDQ4LDB4MDAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGNCwgMHgwNiwweEI0LCAweDAwLDB4MjAsIDB4OTcsMHgwMiwgCi0weEZGLDB4NkMsIDB4OTQsMHg4MiwgMHhGRiwweDUwLCAweDk2LDB4ODIsIDB4RkYsMHg1OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDEzLDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzYsMHg1QywgMHhGNSwweDg0LCAweDc2LDB4RjgsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3NiwweDVDLCAweEY3LDB4MDQsIDB4NzYsMHg1QywgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMSwgCi0weDEyLDB4MzAsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwgCi0weDEyLDB4MUMsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RjMsMHgwNSwgCi0weDc2LDB4RjgsIDB4RjMsMHgwNCwgMHg3NywweDAwLCAweEUwLDB4MDEsIDB4MTIsMHgzNCwgMHhGMywweDA1LCAweDc2LDB4RkMsIDB4RjAsMHgwNSwgCi0weDc2LDB4RkMsIDB4RjcsMHgwNCwgMHg3NSwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDEyLDB4NzEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEYsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMSwgMHgxMiwweDcwLCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4RjYsMHg4NCwgMHg3NiwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMSwgCi0weDEyLDB4OEMsIDB4RjcsMHgwNSwgMHg3NiwweDA4LCAweEYwLDB4MDUsIDB4NzYsMHgwOCwgMHhGNiwweDg0LCAweDc2LDB4MDgsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDQsIDB4RjAsMHgwNSwgMHg3NSwweEY4LCAweEY2LDB4MDYsIDB4NzUsMHhGOCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTIsMHhCOSwgMHhGNywweDA1LCAweDc1LDB4RkMsIDB4RTAsMHgwMSwgCi0weDEyLDB4QzgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4ODcsMHgzQSwgCi0weDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDEzLDB4MDksIDB4RjcsMHgwNSwgCi0weDc2LDB4NjAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEYzLDB4MDYsIDB4NzIsMHhBNCwgMHhGMywweDA1LCAweDc2LDB4NDgsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgCi0weDAwLDB4MEUsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDEsIDB4MTMsMHgxOCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RTAsMHgwMSwgCi0weDEzLDB4MTgsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEUwLDB4MDEsIDB4MTMsMHgxNCwgMHhGMywweDA2LCAweDcyLDB4MTgsIDB4RjMsMHgwNiwgCi0weDczLDB4MzAsIDB4RjMsMHgwNSwgMHg3NiwweDQ4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg3NiwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEJBLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgCi0weDc2LDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHhGNywweDA1LCAweDc2LDB4NTQsIDB4RjcsMHgwNCwgCi0weDc2LDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc2LDB4NTgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjgsIDB4RjYsMHg4NCwgMHg3NiwweDU4LCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDEzLDB4OUQsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY1LDB4MDIsIDB4MDAsMHgwRiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwgCi0weDEzLDB4OUMsIDB4QjUsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDc2LDB4MDgsIDB4RjYsMHg4NCwgCi0weDc2LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAxLCAweDEzLDB4QjgsIDB4RjcsMHgwNSwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NiwweDA4LCAweEY3LDB4MDQsIDB4NzYsMHgwOCwgMHhGNiwweDg0LCAweDc2LDB4MDQsIDB4RjAsMHgwNSwgCi0weDc1LDB4RjgsIDB4RjUsMHg4NCwgMHg3NiwweEY4LCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgCi0weDAwLDB4MjEsIDB4RTIsMHgwMSwgMHgxNCwweDE0LCAweEY3LDB4MDUsIDB4NzUsMHhGQywgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMSwgMHgxNCwweDAwLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwgCi0weDAwLDB4MjIsIDB4RjUsMHgwNSwgMHg3NiwweEY4LCAweEY1LDB4MDQsIDB4NzcsMHgwMCwgMHhFMCwweDAxLCAweDE0LDB4MTgsIDB4RjUsMHgwNSwgCi0weDc2LDB4RkMsIDB4RjAsMHgwNSwgMHg3NiwweEZDLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHhGNSwweDA2LCAweDcyLDB4MTgsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNCwweDQwLCAweEY1LDB4MDUsIDB4NzYsMHg0OCwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTQsMHg1NSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxNSwweEQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAxLCAweDE0LDB4QzQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEZDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDE0LDB4NzEsIDB4RjYsMHg4NiwgMHg3NSwweEY4LCAweEUwLDB4MDEsIDB4MTQsMHg4OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4ODcsMHgzQSwgCi0weDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE0LDB4QzUsIDB4RjcsMHgwNSwgCi0weDc2LDB4NjAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY1LDB4MDIsIDB4MDAsMHgwRSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwgCi0weDE0LDB4QkMsIDB4QjUsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNSwweDA2LCAweDcyLDB4QTQsIDB4RjUsMHgwNSwgCi0weDc2LDB4NDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE1LDB4NDAsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5NiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg1LCAweDc1LDB4RUMsIDB4ODYsMHg5NiwgCi0weDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4ODUsIDB4N0IsMHgzOCwgMHg4NiwweDk2LCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc2LDB4NDgsIDB4RjYsMHg4NSwgMHg3QiwweDMwLCAweEY2LDB4ODYsIDB4NzIsMHgxOCwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTUsMHg0MSwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxNSwweEQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweDc1LDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTUsMHhCQywgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4ODYsMHg5NiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4ODUsIDB4NzUsMHhGMCwgMHg4NiwweDk2LCAweDAwLDB4MDgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NSwgMHg3QiwweDQ4LCAweDg2LDB4OTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjYsMHg4NSwgCi0weDdCLDB4NDAsIDB4RjYsMHg4NiwgMHg3MiwweDE4LCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNSwweEJELCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDE1LDB4RDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDBDLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsIDB4NzYsMHhGQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNSwweEZDLCAweEY2LDB4ODIsIDB4MDAsMHgxMCwgMHhGNiwweDg2LCAweDc2LDB4NDgsIDB4RjYsMHg4NSwgCi0weDc2LDB4RkMsIDB4RTAsMHgwMSwgMHgxNiwweDBDLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNiwweDg1LCAweDc2LDB4RjgsIDB4RjYsMHg4NiwgCi0weDc2LDB4NDgsIDB4RjYsMHg4NSwgMHg3NywweDAwLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDE2LDB4MjAsIDB4RjYsMHg4NiwgMHg3NCwweEQ0LCAweEUwLDB4MDEsIDB4MTYsMHgyQywgMHhGNiwweDg1LCAweDc2LDB4NDgsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxNiwweDQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNiwweDg1LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc1LDB4RjQsIDB4RjYsMHg4NCwgCi0weDdCLDB4NDgsIDB4RjcsMHgwNSwgMHg3NiwweEY0LCAweEY3LDB4MDQsIDB4N0IsMHg0MCwgMHhDNiwweEIwLCAweDY4LDB4MDAsIDB4MjYsMHhCNCwgCi0weDAwLDB4MDQsIDB4OTcsMHgwMiwgMHhGRiwweDZDLCAweDk2LDB4MDIsIDB4RkYsMHg1MCwgMHhFMCwweDAxLCAweDE2LDB4QTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweEY2LDB4ODQsIDB4N0IsMHgzOCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4RjUsMHg4NSwgCi0weDc2LDB4RjQsIDB4RjYsMHgwNCwgMHg3QiwweDMwLCAweEM2LDB4QjgsIDB4NjgsMHgwMCwgMHgyNiwweEI0LCAweDAwLDB4MDQsIDB4OTYsMHgwMiwgCi0weEZGLDB4NkMsIDB4OTcsMHgwMiwgMHhGRiwweDUwLCAweDk2LDB4ODIsIDB4RkYsMHg1OCwgMHhGNSwweDg2LCAweDczLDB4QkMsIDB4RjUsMHg4NSwgCi0weDc2LDB4NDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNCwgCi0weDdCLDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDdCLDB4MjgsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjQsIDB4RjYsMHg4NCwgMHg3QiwweDI4LCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE3LDB4MjEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjAsMHgwNSwgMHg3NSwweEY0LCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNywweDI1LCAweEYwLDB4MDUsIDB4NzUsMHhGMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDE2LDB4NDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MTcsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjAsMHgwNSwgCi0weDc1LDB4RUMsIDB4RjcsMHgwNCwgMHg3NSwweEZDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDE3LDB4NDEsIDB4RjYsMHg4NiwgMHg3NSwweEY4LCAweEUwLDB4MDEsIDB4MTcsMHg1OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDc2LDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4ODcsMHgzQSwgCi0weDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE3LDB4OTUsIDB4RjcsMHgwNSwgCi0weDc2LDB4NjAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY1LDB4MDIsIDB4MDAsMHgwRSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwgCi0weDE3LDB4OEMsIDB4QjUsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhFMCwweDAxLCAweDE3LDB4OTgsIDB4RjUsMHgwNiwgCi0weDcyLDB4QTQsIDB4RjUsMHgwNiwgMHg3MiwweDE4LCAweEY1LDB4MDUsIDB4NzYsMHg0OCwgMHhGNSwweDg0LCAweDc2LDB4RjgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDEsIDB4MTcsMHhFOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDEsIDB4MTcsMHhENCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RjUsMHgwMiwgMHgwMCwweDIyLCAweEY1LDB4MDUsIDB4NzYsMHhGOCwgMHhGNSwweDA0LCAweDc3LDB4MDAsIDB4RTAsMHgwMSwgCi0weDE3LDB4RUMsIDB4RjUsMHgwNSwgMHg3NiwweEZDLCAweEYwLDB4MDUsIDB4NzYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgzOCwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTgsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE4LDB4NDksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MTYsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMSwgCi0weDFDLDB4NzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4NzYsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDcwLDB4M0EsIDB4RkYsMHhFMSwgMHhFNiwweDAxLCAweDE4LDB4N0QsIDB4RjQsMHg4MiwgCi0weDAwLDB4MDAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDAwLDB4QkMsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RTAsMHgwMSwgMHgxQywweDcwLCAweEYzLDB4MDYsIDB4NzUsMHg2MCwgMHhDMywweEI0LCAweDAwLDB4MDAsIDB4ODQsMHgxRSwgCi0weDAwLDB4MTAsIDB4RjYsMHg4NCwgMHg0QSwweEEwLCAweDIzLDB4MTQsIDB4MDAsMHgyMCwgMHg5MywweDE2LCAweEZGLDB4QzQsIDB4OTQsMHgxNiwgCi0weEZGLDB4RTAsIDB4OTYsMHg5NiwgMHhGRiwweEQ0LCAweDg1LDB4MUUsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweDRBLDB4OUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEVDLDB4MDEsIDB4MTksMHg2OCwgMHg5NSwweDE2LCAweEZGLDB4RTQsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4QzYsMHhCOCwgCi0weDMwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDBDLCAweEM1LDB4ODQsIDB4MDAsMHgwMCwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg0MiwweDAwLCAweEU2LDB4MDEsIDB4MTgsMHhGOCwgMHhDNiwweDI0LCAweDAwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NTIsMHgwMCwgMHhFNiwweDAxLCAweDE4LDB4RkMsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE5LDB4MDksIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4MzYsIDB4MDAsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEUyLDB4MDEsIDB4MTksMHg0NCwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzMiwgCi0weDcyLDB4MDAsIDB4RTYsMHgwMSwgMHgxOSwweDRDLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHg4NiwweEI2LCAweDAwLDB4MDQsIDB4ODcsMHgxNiwgCi0weEZGLDB4RTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAxLCAweDE5LDB4NEQsIDB4MjAsMHgyQSwgCi0weDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE5LDB4NUQsIDB4MjAsMHgyRSwgCi0weDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE5LDB4NkMsIDB4MjAsMHgyNiwgCi0weDAwLDB4MDAsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE5LDB4QTEsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEQ0LCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgCi0weDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEQ4LCAweEUwLDB4MDEsIDB4MUEsMHgxNCwgMHg5NiwweDk2LCAweEZGLDB4REMsIDB4MjcsMHgxNCwgCi0weDAwLDB4MkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4MTYsIDB4RkYsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgCi0weEZGLDB4RkMsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4Q0MsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4Q0MsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxQSwweDExLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RDQsIDB4RjMsMHgwNiwgCi0weDRBLDB4OTgsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgCi0weDMwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RDgsIDB4OTYsMHg5NiwgCi0weEZGLDB4REMsIDB4RjcsMHgwNSwgMHg0QSwweEEwLCAweEUwLDB4MDEsIDB4MUEsMHgxOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MUEsMHgyOCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RTAsMHgwMSwgCi0weDFBLDB4ODAsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4OTYsIDB4RkYsMHhEOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzNSwgCi0weDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNiwweDg2LCAweDQyLDB4QzgsIDB4QTYsMHgzQSwgCi0weDY4LDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc1LDB4MzksIDB4MDAsMHgxRSwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4MDUsMHhCOCwgCi0weDAwLDB4MDIsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwNCwgMHg5NywweDE2LCAweEZGLDB4RUMsIDB4QzYsMHgzMCwgCi0weDU3LDB4QzAsIDB4NzYsMHgzMCwgMHhGRiwweEYwLCAweDk2LDB4MTYsIDB4RkYsMHhGNCwgMHg3NSwweEFELCAweDAwLDB4MUUsIDB4NzUsMHhBQywgCi0weEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg1RiwweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHg5NiwweDk2LCAweEZGLDB4RjAsIDB4MjAsMHgyNiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxQSwweDk0LCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhFMCwweDAxLCAweDFCLDB4MjgsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5NiwgMHhGRiwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM0LCAweDY4LDB4MDAsIDB4QzQsMHg5QywgCi0weDcyLDB4MDAsIDB4QzAsMHgyRSwgMHg2QSwweDAwLCAweEVDLDB4MDEsIDB4MUEsMHhGNCwgMHhDNSwweDI0LCAweDAwLDB4MDAsIDB4QzYsMHgyQywgCi0weDAwLDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhBNiwweEIyLCAweDcwLDB4MDIsIDB4MDUsMHhBQywgCi0weDAwLDB4MDEsIDB4QzcsMHgzMCwgMHg3MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgCi0weDc3LDB4QzAsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY2LDB4QUIsIDB4MjgsMHgwMCwgMHgwNSwweDI4LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgCi0weEZGLDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MkUsIDB4NzIsMHgwMCwgMHhFQywweDAxLCAweDFBLDB4QjUsIDB4MDYsMHgzMCwgCi0weDAwLDB4MDIsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MDUsIDB4NzYsMHhGNCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgCi0weEZGLDB4RjAsIDB4ODYsMHg5RSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NzAsMHgwMCwgMHhDNywweDM4LCAweDQ4LDB4MDAsIDB4QzYsMHhCNCwgCi0weDcwLDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEY0LCAweDA2LDB4QjQsIDB4MDAsMHgyMCwgMHg5NywweDAyLCAweEZGLDB4NkMsIDB4OTQsMHg4MiwgCi0weEZGLDB4NTAsIDB4OTYsMHg4MiwgMHhGRiwweDU4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDFDLDB4NkMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NiwweDVDLCAweEY1LDB4ODQsIDB4NzYsMHhGOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgCi0weDc2LDB4NUMsIDB4RjcsMHgwNCwgMHg3NiwweDVDLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAxLCAweDFCLDB4OEMsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAxLCAweDFCLDB4NzgsIDB4QjUsMHhCQSwgCi0weDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDIsIDB4MDAsMHgyMiwgMHhGMywweDA1LCAweDc2LDB4RjgsIDB4RjMsMHgwNCwgCi0weDc3LDB4MDAsIDB4RTAsMHgwMSwgMHgxQiwweDkwLCAweEYzLDB4MDUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RjcsMHgwNCwgCi0weDc1LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDFCLDB4Q0QsIDB4RjYsMHg4NiwgCi0weDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgCi0weDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwRiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwgCi0weDFCLDB4Q0MsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDc2LDB4MDgsIDB4RjYsMHg4NCwgCi0weDc2LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAxLCAweDFCLDB4RTgsIDB4RjcsMHgwNSwgCi0weDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NiwweDA4LCAweEY2LDB4ODQsIDB4NzYsMHgwOCwgMHhGNywweDA0LCAweDc2LDB4MDQsIDB4RjAsMHgwNSwgCi0weDc1LDB4RjgsIDB4RjYsMHgwNiwgMHg3NSwweEY4LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxQywweDE1LCAweEY3LDB4MDUsIDB4NzUsMHhGQywgMHhFMCwweDAxLCAweDFDLDB4MjQsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MUMsMHg2NSwgMHhGNywweDA1LCAweDc2LDB4NjAsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4RjMsMHgwNiwgMHg3MiwweEE0LCAweEYzLDB4MDUsIDB4NzYsMHg0OCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMSwgMHgxQywweDc0LCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhFMCwweDAxLCAweDFDLDB4NzQsIDB4RjAsMHgwNSwgCi0weDJELDB4MzgsIDB4RTAsMHgwMSwgMHgxQywweDcwLCAweEYzLDB4MDYsIDB4NzIsMHgxOCwgMHhGMywweDA2LCAweDczLDB4MzAsIDB4RjMsMHgwNSwgCi0weDc2LDB4NDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgCi0weDc2LDB4NDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzIsMHgxOCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDc2LDB4NDgsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3MiwweEE0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzYsMHg0OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDczLDB4MzAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3NiwweDQ4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDczLDB4QkMsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDc2LDB4NDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzQsMHg0OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDc2LDB4NDgsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3NCwweEQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzYsMHg0OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDc1LDB4NjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjYsMHg4NiwgCi0weDc2LDB4NjgsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4NzcsMHgwNCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LCAweDFELDB4RDQsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4NzYsMHg2OCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MjIsIDB4RjcsMHgwNSwgCi0weDc2LDB4RjQsIDB4RjcsMHgwNSwgMHg3NiwweEY4LCAweEYwLDB4MDUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc3LDB4MDAsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweDc2LDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDIyLCAweEU2LDB4MDEsIDB4MUUsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA2LCAweDc3LDB4MDQsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3NiwweDY4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4ODYsIDB4NzgsMHgxMCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgCi0weDc4LDB4QTQsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgxRiwweEJDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDAwLDB4MTQsIDB4OTYsMHg5MywgCi0weEZGLDB4RkMsIDB4RjYsMHg4NiwgMHg3OCwweDEwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYwLDB4MDUsIDB4NzgsMHg5QywgMHg5MCwweDAyLCAweEZGLDB4MzQsIDB4RjcsMHgwMiwgCi0weDdGLDB4RkYsIDB4RjcsMHgwNSwgMHg3OCwweEEwLCAweDk3LDB4MDIsIDB4RkYsMHgzMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4MDQsIDB4NzgsMHg5QywgMHg4NywweDE2LCAweDAwLDB4MDAsIDB4ODQsMHg5NiwgCi0weDAwLDB4MDgsIDB4RjUsMHg4NiwgMHg3NywweDEwLCAweDg3LDB4M0EsIDB4MDAsMHgwOCwgMHhGNiwweDg2LCAweDIxLDB4OEMsIDB4NzUsMHgzOSwgCi0weDAwLDB4MDQsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEE3LDB4M0EsIDB4NjgsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4QzYsMHhBOCwgCi0weDU4LDB4MDAsIDB4ODQsMHgxNiwgMHgwMCwweDA0LCAweEM2LDB4MzAsIDB4NzUsMHg4MCwgMHg5NCwweDM2LCAweDAwLDB4MDQsIDB4QjQsMHhBQSwgCi0weDU4LDB4MDIsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweEY2LDB4MDUsIDB4NzgsMHg5QywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RTYsMHgwMSwgCi0weDFGLDB4MkQsIDB4OTcsMHgzNiwgMHgwMCwweDA4LCAweDg3LDB4MDIsIDB4RkYsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgCi0weDRBLDB4MDAsIDB4RUUsMHgwMSwgMHgxRiwweDM1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDg1LCAweDc4LDB4QTAsIDB4OTQsMHg4MiwgCi0weEZGLDB4MzAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MkUsIDB4MDAsMHgwOCwgMHhGNiwweDg2LCAweDIxLDB4OEMsIDB4NzcsMHgzOSwgCi0weDAwLDB4MDIsIDB4QTcsMHgzQSwgMHg2OCwweDAyLCAweEY2LDB4MDQsIDB4NzgsMHg5QywgMHhDNywweDA0LCAweDc2LDB4MDAsIDB4ODYsMHhBRSwgCi0weDAwLDB4MDgsIDB4QzYsMHgzMCwgMHg3NCwweDAwLCAweEY3LDB4MDYsIDB4NzcsMHgxMCwgMHhGNiwweDA1LCAweDc4LDB4OUMsIDB4NzYsMHhCNSwgCi0weDAwLDB4MDQsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RTYsMHgwMSwgMHgxRiwweEE4LCAweDk3LDB4MzYsIDB4MDAsMHgwOCwgMHhGNywweDAyLCAweDdGLDB4RkYsIDB4RjcsMHgwNSwgCi0weDc4LDB4QTAsIDB4OTcsMHgwMiwgMHhGRiwweDMwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDA4LCAweEY3LDB4MDQsIDB4NzgsMHg5QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgyMCwweEQxLCAweEY2LDB4MDIsIDB4N0YsMHhGRiwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4RjYsMHg4NCwgCi0weDJELDB4NDAsIDB4RjYsMHgwNiwgMHg3NywweDEwLCAweDI2LDB4QjQsIDB4MDAsMHgwMSwgMHg3NywweDM1LCAweDAwLDB4MDQsIDB4QzQsMHhCOCwgCi0weDYwLDB4MDAsIDB4QzMsMHgzOCwgMHgwMCwweDAwLCAweDc0LDB4MzUsIDB4MDAsMHgwMiwgMHhGNiwweDA2LCAweDc3LDB4MTAsIDB4QzAsMHgyNiwgCi0weDYyLDB4MDAsIDB4RUMsMHgwMSwgMHgyMCwweEMxLCAweEY2LDB4MDYsIDB4MjEsMHg4QywgMHhGMywweDg0LCAweDc4LDB4OUMsIDB4QTcsMHgyMiwgCi0weDYwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MUUsIDB4NzQsMHgwMCwgMHhFNiwweDAxLCAweDIwLDB4QjEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODYsMHhBNiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NzgsMHhBMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgCi0weDcyLDB4MDAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEVFLDB4MDEsIDB4MjAsMHg5OCwgMHg5NiwweEE2LCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgCi0weDJELDB4MzgsIDB4RjYsMHgwNiwgMHg3NywweDEwLCAweEM1LDB4MTgsIDB4NjAsMHgwMCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4ODYsMHgyQSwgCi0weDAwLDB4MDQsIDB4MDUsMHhCOCwgMHgwMCwweDAxLCAweEY1LDB4ODUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgyRSwgCi0weDAwLDB4NDQsIDB4RTYsMHgwMSwgMHgyMCwweDcwLCAweEI2LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4ODYsMHgyQSwgCi0weDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4MkEsIDB4MDAsMHgwQywgMHhGNiwweDA2LCAweDIxLDB4OEMsIDB4QTcsMHgyMiwgCi0weDYwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NzYsMHgwMCwgMHhDNywweDFDLCAweDc0LDB4MDAsIDB4RTAsMHgwMSwgCi0weDIwLDB4QjAsIDB4RjcsMHgwNSwgMHg3OCwweDlDLCAweDg2LDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDYyLDB4MDAsIDB4RUMsMHgwMSwgMHgyMCwweEIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MjQsMHhBNCwgCi0weDAwLDB4MTAsIDB4MjMsMHgxOCwgMHgwMCwweDEwLCAweEUwLDB4MDEsIDB4MUYsMHhGQywgMHgyNCwweDIwLCAweDAwLDB4MDQsIDB4ODYsMHgxNiwgCi0weEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4NzgsMHhBMCwgMHg5NiwweDAyLCAweEZGLDB4MzAsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NywweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgzQSwgMHgwMCwweDA4LCAweEY2LDB4ODYsIDB4NzcsMHgxMCwgMHg3NywweDM5LCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4ODYsMHhCQSwgMHgwMCwweDBDLCAweDg3LDB4M0EsIDB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4NDQsMHgwQywgMHgwMCwweDAxLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjcsMHgwMiwgMHgwMCwweDBGLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFQywweDAxLCAweDIxLDB4NUQsIDB4RjYsMHg4NiwgCi0weDc3LDB4MTgsIDB4OTAsMHgzNiwgMHgwMCwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgwMSwgMHhDNiwweDA0LCAweDAwLDB4MDAsIDB4QzAsMHgzQSwgCi0weDYyLDB4MDAsIDB4RTYsMHgwMSwgMHgyMSwweDQ0LCAweDA2LDB4QjQsIDB4MDAsMHgxMCwgMHhGNiwweDA2LCAweDc4LDB4QTQsIDB4OTYsMHgxMywgCi0weEZGLDB4RkMsIDB4RjYsMHgwNiwgMHg3OCwweDEwLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MTAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDQwLCAweDAwLDB4MDAsIDB4MDAsMHg4MCwgMHgwMCwweDAwLCAweDAxLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAyLDB4MDAsIDB4MDAsMHgwMCwgMHgwNCwweDAwLCAweDAwLDB4MDAsIDB4MDgsMHgwMCwgMHgwMCwweDAwLCAweDEwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDIwLDB4MDAsIDB4MDAsMHgwMCwgMHg0MCwweDAwLCAweDAwLDB4MDAsIDB4ODAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4NzgsMHhCMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDc5LDB4Q0MsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyMiwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MTUsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3OCwweEIwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgCi0weDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgCi0weDAwLDB4MDgsIDB4RjYsMHg4NCwgMHg2RiwweDQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDEsIDB4MjIsMHg3MCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4ODcsMHgzNiwgCi0weDBFLDB4RjQsIDB4ODYsMHhCNiwgMHgwRSwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjIsMHg3OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjIsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgCi0weDMyLDB4RTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDIyLDB4QjEsIDB4RjUsMHg4MiwgCi0weDAzLDB4RTgsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHhGNSwweDgyLCAweDAzLDB4RTgsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4RjUsMHg4MiwgMHgwMCwweDE1LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LCAweDc5LDB4Q0MsIDB4OTUsMHg5MywgCi0weEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHhDMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA2LCAweDc5LDB4Q0MsIDB4OTcsMHgxMywgCi0weEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3OCwweEIwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgCi0weDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzksMHhDQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgCi0weDc5LDB4M0MsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMiwweDEwLCAweDAwLDB4MDQsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwQywgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODYsMHhBRSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDIzLDB4ODQsIDB4MjcsMHgxNCwgMHgwMCwweDBDLCAweDg3LDB4MkUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDEsIDB4OTcsMHgyRSwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwNCwgMHhFMCwweDAxLCAweDI0LDB4MzQsIDB4OTYsMHg5NiwgCi0weEZGLDB4RjQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgCi0weEZGLDB4RkMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhFQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgCi0weDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhFQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI0LDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4QUUsIDB4MDAsMHgwNCwgMHg4NiwweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg2MiwweDAwLCAweEVFLDB4MDEsIDB4MjQsMHgyMSwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM2LDB4QjgsIDB4NTgsMHgwMCwgMHg3NywweDMxLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHg4NSwweDM2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgzNiwgMHgwMCwweDBDLCAweDg1LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgzNiwgCi0weDAwLDB4MTAsIDB4ODUsMHgzNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDM2LCAweDAwLDB4MTQsIDB4MjYsMHhCNCwgCi0weDAwLDB4MEMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEVFLDB4MDEsIDB4MjMsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDQsIDB4ODYsMHg5NiwgMHhGRiwweEY0LCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgCi0weDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHg4NSwweDJBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgzQSwgMHgwMCwweDBDLCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHgyQSwgCi0weDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4M0EsIDB4MDAsMHgxMCwgMHg4NSwweDE2LCAweDAwLDB4MDgsIDB4RjQsMHgwMiwgCi0weDAwLDB4MDEsIDB4OTUsMHgzQSwgMHgwMCwweDE0LCAweDk2LDB4QUUsIDB4MDAsMHgwOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDBDLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwQywgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODQsMHgyRSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI1LDB4NTUsIDB4MjcsMHgxNCwgMHgwMCwweDBDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RUMsIDB4MDcsMHg4OCwgCi0weDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RUMsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgyNSwweDU1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEVFLDB4MDEsIDB4MjUsMHg0NSwgMHg3NywweDMxLCAweDAwLDB4MDEsIDB4QzYsMHhBQywgCi0weDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4ODUsMHgzNiwgCi0weDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MzYsIDB4MDAsMHgwQywgMHg4NSwweDM2LCAweDAwLDB4MUMsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4OTUsMHgzNiwgMHgwMCwweDEwLCAweDg1LDB4MzYsIDB4MDAsMHgyMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgzNiwgCi0weDAwLDB4MTQsIDB4MDYsMHhCNCwgMHgwMCwweDBDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAxLCAweDI1LDB4MTEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHgyRSwgMHgwMCwweDA0LCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgyRSwgCi0weDAwLDB4MDQsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MDgsIDB4ODMsMHg5NiwgMHgwMCwweDA0LCAweDgzLDB4MTYsIDB4MDAsMHgwMCwgMHhDNSwweDAwLCAweDAwLDB4MDAsIDB4ODQsMHgxQSwgCi0weDAwLDB4MDQsIDB4QzQsMHhBOCwgMHgwMCwweDAwLCAweDk0LDB4MTYsIDB4RkYsMHhGNCwgMHhDMCwweDI2LCAweDQyLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI2LDB4RDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDgzLDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgyQSwgCi0weDMyLDB4MDAsIDB4RTYsMHgwMSwgMHgyNiwweEQxLCAweEM3LDB4MjAsIDB4NEEsMHgwMCwgMHg5NSwweDE2LCAweEZGLDB4RjQsIDB4NzYsMHhCOCwgCi0weEZGLDB4RTEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4RkYsMHhGRiwgMHhDNSwweDI0LCAweDcwLDB4MDAsIDB4NzcsMHgyOSwgCi0weDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg1MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4ODYsMHg5RSwgCi0weDAwLDB4MDAsIDB4QzUsMHhCOCwgMHgzMCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwQywgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4QzYsMHgwMCwgCi0weDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDEsIDB4MjYsMHgxMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4ODYsMHg5RSwgCi0weDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI2LDB4MTAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI2LDB4MjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MDAsIDB4MDAsMHgwMCwgMHhFMCwweDAxLCAweDI2LDB4NzgsIDB4MjAsMHgzQSwgCi0weDAwLDB4MDAsIDB4ODYsMHg5RSwgMHgwMCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgyNiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFNiwweDAxLCAweDI2LDB4NjQsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5RSwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgyNiwweDY1LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgCi0weDAwLDB4MDAsIDB4NDcsMHgwNCwgMHhGRiwweEZGLCAweEU2LDB4MDEsIDB4MjYsMHg3OSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjYsMHhCMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RUUsMHgwMSwgCi0weDI2LDB4QTAsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweDQzLDB4MDQsIDB4RkYsMHhGRiwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI2LDB4QzksIDB4QzAsMHgyNiwgMHg0MiwweDAwLCAweEUwLDB4MDEsIDB4MjUsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RTYsMHgwMSwgCi0weDI2LDB4QzEsIDB4QzAsMHgyNiwgMHg0MiwweDAwLCAweEUwLDB4MDEsIDB4MjUsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDgsIDB4RjQsMHgwMiwgMHgwMCwweDAxLCAweEUwLDB4MDEsIDB4MjYsMHhFMCwgMHg5NSwweDFBLCAweDAwLDB4MDAsIDB4RTAsMHgwMSwgCi0weDI1LDB4OEMsIDB4QzQsMHhBOCwgMHgwMCwweDAwLCAweEUwLDB4MDEsIDB4MjUsMHg4QywgMHhDNCwweDI4LCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgCi0weDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4MUEsIDB4MDAsMHgwMCwgMHhDNCwweDAwLCAweDAwLDB4MDAsIDB4ODcsMHg5NiwgCi0weEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwgCi0weDAwLDB4MDQsIDB4ODQsMHgxNiwgMHgwMCwweDAwLCAweDg0LDB4OTYsIDB4MDAsMHgwOCwgMHhGNywweDAyLCAweDAwLDB4MDMsIDB4QzYsMHhBMCwgCi0weDRELDB4ODAsIDB4QzYsMHhCNiwgMHg3NCwweDAwLCAweEU2LDB4MDEsIDB4MjcsMHg3MSwgMHhDNiwweDIwLCAweDAwLDB4MDAsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDIsIDB4RTYsMHgwMSwgMHgyNywweEEwLCAweEM1LDB4MjAsIDB4NDgsMHgwMCwgMHhDNywweDIwLCAweDQ4LDB4MDAsIDB4MjcsMHgzOCwgCi0weDAwLDB4MDIsIDB4QzAsMHgyMiwgMHg3MiwweDAwLCAweEUyLDB4MDEsIDB4MjcsMHg5QywgMHhDNSwweDM4LCAweDAwLDB4MDAsIDB4ODcsMHgyRSwgCi0weDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgCi0weEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTIsMHgwMSwgCi0weDI3LDB4NDEsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweEUwLDB4MDEsIDB4MjcsMHhBMCwgMHhDNSwweDIwLCAweDQ4LDB4MDAsIDB4QzcsMHgyMCwgCi0weDQ4LDB4MDAsIDB4MjcsMHgzOCwgMHgwMCwweDA0LCAweEMwLDB4MjIsIDB4NzIsMHgwMCwgMHhFMiwweDAxLCAweDI3LDB4QTAsIDB4QzUsMHgyMCwgCi0weDQ4LDB4MDAsIDB4ODMsMHhBRCwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweEIxLCAweDAwLDB4MDQsIDB4QzAsMHgzMiwgCi0weDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgyNywweDg1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNSwweDIwLCAweDQ4LDB4MDAsIDB4QzAsMHgzMiwgCi0weDUyLDB4MDAsIDB4RTQsMHgwMSwgMHgyNywweEQ1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEFFLCAweDAwLDB4MDAsIDB4NzcsMHgyRCwgCi0weDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RTgsIDB4RjYsMHhCMywgCi0weDY4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAxLCAweEMwLDB4MzIsIDB4NTIsMHgwMCwgMHhFNCwweDAxLCAweDI3LDB4QUMsIDB4MDUsMHhBQywgCi0weDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODQsMHgxNiwgCi0weDAwLDB4MDAsIDB4ODYsMHg5NiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDIyLCAweDZELDB4ODAsIDB4RTYsMHgwMSwgCi0weDI4LDB4MTAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEUwLDB4MDEsIDB4MjgsMHg3NCwgMHhDNCwweDM4LCAweDAwLDB4MDAsIDB4RjcsMHgwMiwgCi0weDAwLDB4MDEsIDB4RUUsMHgwMSwgMHgyOCwweDQxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgCi0weDAwLDB4MDAsIDB4RUUsMHgwMSwgMHgyOCwweDFDLCAweDc3LDB4MzksIDB4MDAsMHgwMSwgMHhFMCwweDAxLCAweDI4LDB4NDQsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4NzQsMHgyMSwgMHgwMCwweDAxLCAweDc3LDB4MzgsIDB4RkYsMHhGRiwgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4MjAsMHgyMiwgCi0weDAwLDB4MDAsIDB4RUUsMHgwMSwgMHgyOCwweDM0LCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDI4LDB4NzEsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4QzAsMHgyMiwgMHg2QSwweDAwLCAweEU0LDB4MDEsIDB4MjgsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzQsMHgyMCwgCi0weDZBLDB4MDAsIDB4NzcsMHgzQSwgMHhGRiwweEZGLCAweEU2LDB4MDEsIDB4MjgsMHg1NCwgMHg3NiwweEI0LCAweEZGLDB4RkYsIDB4RDQsMHgyMCwgCi0weDA3LDB4NjIsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgCi0weDAwLDB4MDQsIDB4RTAsMHgwMSwgMHgyOCwweENDLCAweEY3LDB4MDYsIDB4MjksMHhEQywgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjgsMHhDOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxNiwgCi0weEZGLDB4RjQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEMxLDB4MzQsIDB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgxNiwgCi0weEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDI3LDB4MzgsIDB4MDAsMHgwNCwgMHhGNiwweDA2LCAweDI5LDB4RTAsIDB4QzAsMHgzQSwgCi0weDYyLDB4MDAsIDB4RTQsMHgwMSwgMHgyOCwweDlELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgCi0weEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgCi0weEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwNCwgMHhFMCwweDAxLCAweDI5LDB4MzQsIDB4RjcsMHgwNiwgCi0weDI5LDB4OTgsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgCi0weDI5LDB4MzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTYsIDB4RkYsMHhGNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzNCwgCi0weDAwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgCi0weDAwLDB4MDQsIDB4RjYsMHgwNiwgMHgyOSwweEUwLCAweEMwLDB4M0EsIDB4NjIsMHgwMCwgMHhFNCwweDAxLCAweDI5LDB4MDQsIDB4MDAsMHgwMCwgCi0weDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNCwgCi0weDdCLDB4NTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDI5LDB4ODQsIDB4RjYsMHg4MiwgCi0weDAwLDB4MDEsIDB4RjYsMHg4NSwgMHg3QiwweDUwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI4LDB4RjAsIDB4OTcsMHg5MywgCi0weEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgCi0weDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDAwLDB4MDAsIDB4MEIsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weDQyLDB4ODgsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4NUUsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgCi0weEM3LDB4QTgsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MEIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgCi0weDFDLDB4ODgsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MUUsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgCisweEYyLDB4MEUsCisweEZFLDB4MDAsIDB4QzIsMHg5MCwgMHgwMCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDAxLDB4NEMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhFMCwweDAwLCAweDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA2LCAweDJBLDB4NkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDJDLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDAyLCAweDA1LDB4M0MsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MDAsMHgwMywgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MjksMHhFMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkIsMHg4NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MkMsMHgxQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg0OCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MEEsMHhCQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgwMCwweDAyLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyQSwweEY4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDg1LDB4MTYsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDEsIDB4RUUsMHgwMCwKKzB4MDEsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDEsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDEsMHgyRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LAorMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgxMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgwMSwweEUwLCAweEI0LDB4QkEsCisweDY4LDB4MDIsIDB4RTAsMHgwMCwgMHgwMSwweEUwLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDNCLDB4NjQsIDB4RjUsMHg4NCwKKzB4NEYsMHg1NCwgMHhGNywweDA1LCAweDdBLDB4MTAsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDEsMHg5OSwgMHg5NywweDJBLAorMHgwMCwweDIwLCAweDk1LDB4QUEsIDB4MDAsMHgxQywgMHhGNiwweDA2LCAweDRBLDB4OTgsIDB4MjYsMHhBQywgMHgwMCwweDAxLCAweDc3LDB4MzUsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgwNywweDM4LCAweDAwLDB4MEMsIDB4QTQsMHhCQSwKKzB4NjAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhBQSwgMHgwMCwweDEwLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg4NywweDNBLAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDJBLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4MkUsIDB4NzIsMHgwMCwgMHhENywweDAwLCAweDBBLDB4MDEsIDB4RTAsMHgwMCwKKzB4MDEsMHhEMCwgMHhGNywweDA1LCAweDdBLDB4MTgsIDB4OTUsMHhBQSwgMHgwMCwweDFDLCAweEY2LDB4MDYsIDB4NEEsMHg5OCwgMHgwNiwweEFDLAorMHgwMCwweDAxLCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDA3LDB4MzgsCisweDAwLDB4MEMsIDB4QTQsMHhCQSwgMHg2MCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEFBLCAweDAwLDB4MTAsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MDQsIDB4RjAsMHgwNSwgMHg3QSwweDE4LCAweDk3LDB4MkEsIDB4MDAsMHgxNCwgMHhGNSwweDA1LAorMHg3OSwweEQ4LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDAxLDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgzOCwgMHhGNywweDA0LAorMHg3QSwweDEwLCAweEY2LDB4ODQsIDB4M0IsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweDQ3LDB4MEMsCisweDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDAyLDB4NEMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgwMiwweDRDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwMiwweDg1LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLAorMHgwMCwweDEyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDAyLDB4NzQsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsCisweDJELDB4MzgsIDB4RjMsMHgwNiwgMHgyQSwweDZDLCAweEYzLDB4MDUsIDB4MkMsMHgxMCwgMHhFMCwweDAwLCAweDA1LDB4MjgsIDB4RjAsMHgwNSwKKzB4N0EsMHgxOCwgMHhGMywweDg0LCAweDc5LDB4RDgsIDB4RjYsMHg4NCwgMHg0QSwweEEwLCAweDIzLDB4MTQsIDB4MDAsMHgyMCwgMHg5MywweDE2LAorMHhGRiwweEM0LCAweDg0LDB4MUUsIDB4MDAsMHgxMCwgMHg5NiwweDk2LCAweEZGLDB4RDQsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDk0LDB4MTYsCisweEZGLDB4RTAsIDB4ODUsMHgxRSwgMHgwMCwweDE0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLCAweDAzLDB4NkMsIDB4OTUsMHgxNiwKKzB4RkYsMHhFNCwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDA2LAorMHg0QSwweDk4LCAweEM2LDB4QjgsIDB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MEMsIDB4QzUsMHg4NCwgMHgwMCwweDAwLCAweDg3LDB4MzYsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NDIsMHgwMCwgMHhFNiwweDAwLCAweDAyLDB4RkMsIDB4QzYsMHgyNCwKKzB4MDAsMHgwMCwgMHg4NywweDM2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NTIsMHgwMCwgMHhFNiwweDAwLAorMHgwMywweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDAzLDB4MEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwKKzB4RkYsMHhFMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4MDMsMHg0OCwgMHhGNSwweDAyLAorMHgwMCwweDAwLCAweEMwLDB4MzIsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDAzLDB4NTAsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweDg2LDB4QjYsCisweDAwLDB4MDQsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwKKzB4MDMsMHg1MSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgwMywweDYxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDAzLDB4NzAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MDMsMHhBNSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEQ0LCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg3NiwweEI5LAorMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhEOCwgMHhFMCwweDAwLCAweDA0LDB4MTgsIDB4OTYsMHg5NiwKKzB4RkYsMHhEQywgMHgyNywweDE0LCAweDAwLDB4MkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4MTYsIDB4RkYsMHhDNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsCisweEZGLDB4Q0MsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwKKzB4RkYsMHhDQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwNCwweDE1LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LAorMHhGRiwweEQ0LCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsCisweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwKKzB4RkYsMHhEOCwgMHg5NiwweDk2LCAweEZGLDB4REMsIDB4RjcsMHgwNSwgMHg0QSwweEEwLCAweEUwLDB4MDAsIDB4MDQsMHgxQywgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwNCwweDJDLCAweEY0LDB4ODIsCisweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgwNCwweDg0LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LCAweEZGLDB4RDgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg3NywweDM1LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNiwweDg2LAorMHg0MiwweEM4LCAweEE2LDB4M0EsIDB4NjgsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzUsMHgzOSwgMHgwMCwweDFFLCAweDc1LDB4MjgsCisweEZGLDB4RTUsIDB4MDUsMHhCOCwgMHgwMCwweDAyLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDQsIDB4OTcsMHgxNiwKKzB4RkYsMHhFQywgMHhDNiwweDMwLCAweDU3LDB4QzAsIDB4NzYsMHgzMCwgMHhGRiwweEYwLCAweDk2LDB4MTYsIDB4RkYsMHhGNCwgMHg3NSwweEFELAorMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDVGLDB4QzAsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweDk2LDB4OTYsCisweEZGLDB4RjAsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDUsMHgyNSwgMHhGMywweDA2LCAweDI5LDB4RTAsIDB4ODYsMHg5NiwKKzB4RkYsMHhGMCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzcsMHgzNCwgMHg2OCwweDAwLCAweEM0LDB4OUMsIDB4NzIsMHgwMCwgMHhDMCwweDJFLAorMHg2QSwweDAwLCAweEVDLDB4MDAsIDB4MDQsMHhGMCwgMHhDNSwweDI0LCAweDAwLDB4MDAsIDB4QzYsMHgyQywgMHgwMCwweDAwLCAweDg3LDB4MTYsCisweEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEE2LDB4QjIsIDB4NzAsMHgwMiwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4QzcsMHgzMCwKKzB4NzAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI0LAorMHhGRiwweEYwLCAweEY2LDB4QUIsIDB4MjgsMHgwMCwgMHgwNSwweDI4LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgyRSwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4MDQsMHhCMSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4RjMsMHgwMiwKKzB4MDAsMHgwMywgMHhGMywweDA1LCAweDc2LDB4RjQsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDg2LDB4OUUsIDB4MDAsMHgwNCwgMHhDNywweDM4LAorMHg3MCwweDAwLCAweEM3LDB4MzgsIDB4NDgsMHgwMCwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEY0LCAweDA2LDB4QjQsCisweDAwLDB4MjAsIDB4OTcsMHgwMiwgMHhGRiwweDZDLCAweDk0LDB4ODIsIDB4RkYsMHg1MCwgMHg5NiwweDgyLCAweEZGLDB4NTgsIDB4RjMsMHgwNiwKKzB4MjksMHhFMCwgMHhGMywweDA1LCAweDJDLDB4MTAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4RjcsMHgwNCwgMHg3QSwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MDUsMHhDRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3QSwweDEwLCAweEY2LDB4ODQsIDB4M0IsMHg2NCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDA1LDB4Q0QsIDB4RjUsMHg4NiwgMHg0QSwweDk4LCAweEY2LDB4MDQsIDB4NzksMHhEOCwgMHhGNiwweDg0LCAweDRGLDB4NTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NiwweEIyLCAweDAwLDB4MUMsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgwNywweDM4LCAweDAwLDB4MEMsIDB4QTUsMHgzQSwgMHg1OCwweDAyLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTUsMHgzMiwgMHgwMCwweDEwLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MDQsIDB4RjAsMHgwNSwKKzB4N0EsMHgxOCwgMHg5NywweDMyLCAweDAwLDB4MTQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MDEsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MDUsMHhGQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwKKzB4MDAsMHgxMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgwNSwweEY0LCAweEI1LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweEY1LDB4MDYsIDB4MkEsMHg2QywgMHhGNSwweDA1LCAweDJDLDB4MTAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHg4NSwweDJFLAorMHgwMCwweDIwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA2LDB4Q0MsIDB4RjUsMHgwNSwgMHg3QSwweDA4LCAweEY3LDB4MDQsCisweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA2LDB4Q0MsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDdBLDB4MDgsIDB4RjYsMHg4NCwgMHgzQiwweDY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHg2QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDA2LDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MkUsIDB4MDAsMHgxQywgMHhGNiwweDg0LCAweDRGLDB4NTQsIDB4RjcsMHgwNSwKKzB4N0EsMHgwMCwgMHhDNywweDM0LCAweDcyLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4MDYsMHg4RCwgMHhGNSwweDAyLAorMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4MDYsMHg5MCwgMHhGNSwweDA1LCAweDc5LDB4RjgsIDB4RjAsMHg4NSwgMHg3OSwweEY4LCAweEY2LDB4ODQsCisweDdBLDB4MDAsIDB4QzcsMHgzOCwgMHg3MCwweDAwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4RjgsIDB4RjYsMHg4NSwKKzB4NzksMHhFOCwgMHhDNywweDM4LCAweDcwLDB4MDAsIDB4QzYsMHgzNCwgMHg3MCwweDAwLCAweEY3LDB4MDQsIDB4NEEsMHg5QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLCAweDA2LDB4Q0MsIDB4RjYsMHgwNSwgMHg3OSwweEYwLCAweDIwLDB4MzYsCisweDAwLDB4MDAsIDB4RUMsMHgwMCwgMHgwNiwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNSwweDAyLAorMHgwMCwweDEzLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDA3LDB4MzgsIDB4QjUsMHgzQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsCisweDA3LDB4MzgsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NEEsMHg5QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwKKzB4NzIsMHgwMCwgMHhFRSwweDAwLCAweDA3LDB4MTksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NEEsMHg5QywgMHhFMCwweDAwLAorMHgwNywweDI4LCAweEY3LDB4MDUsIDB4NzksMHhGMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RUMsMHgwMCwgMHgwNywweDI4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjAsMHg4NSwgMHg3OSwweEYwLCAweEY1LDB4ODUsIDB4NzksMHhFMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MDcsMHg0QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDM4LCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA3LDB4QTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA3LDB4QTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDdBLDB4MDgsIDB4RjYsMHg4NCwgMHgzQiwweDY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywKKzB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MDcsMHhENSwgMHhGNCwweDAyLAorMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgxMywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4MDcsMHhDQywgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEUwLDB4MDAsIDB4MEEsMHhBNCwgMHhGMywweDA2LAorMHgyQiwweDg0LCAweEY2LDB4ODQsIDB4NzksMHhFOCwgMHhGNiwweDA2LCAweDRBLDB4OTgsIDB4NzcsMHgzNSwgMHgwMCwweDAxLCAweEM3LDB4MzgsCisweDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY2LDB4ODQsIDB4NzksMHhFMCwgMHgwNywweDM4LCAweDAwLDB4MEMsIDB4QTMsMHgzQSwKKzB4NjAsMHgwMiwgMHhDMywweEI0LCAweDAwLDB4MDAsIDB4OTMsMHgzNiwgMHgwMCwweDEwLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg4NywweDNBLAorMHgwMCwweDA0LCAweDIzLDB4MTQsIDB4MDAsMHgyMCwgMHg5MywweDE2LCAweEZGLDB4QzQsIDB4OTcsMHgzNiwgMHgwMCwweDE0LCAweDg0LDB4OUUsCisweDAwLDB4MTAsIDB4RjYsMHg4NCwgMHg0QSwweEEwLCAweDk0LDB4OTYsIDB4RkYsMHhFMCwgMHg5NiwweDk2LCAweEZGLDB4RDQsIDB4ODUsMHgxRSwKKzB4MDAsMHgxNCwgMHhGNywweDA0LCAweDRBLDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLAorMHgwOCwweEVDLCAweDk1LDB4MTYsIDB4RkYsMHhFNCwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4QzYsMHhCOCwgMHg2MCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwQywgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODcsMHgzNiwKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweEU2LDB4MDAsIDB4MDgsMHg3QywgMHhDNiwweDIwLAorMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg1MiwweDAwLCAweEU2LDB4MDAsCisweDA4LDB4ODAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MDgsMHg4RCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4MzYsIDB4MDAsMHgwMCwgMHg4NywweDE2LAorMHhGRiwweEUwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDMyLCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgwOCwweEM4LCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MDgsMHhEMCwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4ODYsMHhCNiwKKzB4MDAsMHgwNCwgMHg4NywweDE2LCAweEZGLDB4RTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLAorMHgwOCwweEQxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDA4LDB4RTEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MDgsMHhGMCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RjQsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgwOSwweDI1LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RDQsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDc2LDB4QjksCisweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEQ4LCAweEUwLDB4MDAsIDB4MDksMHg5OCwgMHg5NiwweDk2LAorMHhGRiwweERDLCAweDI3LDB4MTQsIDB4MDAsMHgyQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRiwweEM0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwKKzB4RkYsMHhDQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LAorMHhGRiwweENDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA5LDB4OTUsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsCisweEZGLDB4RDQsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwKKzB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LAorMHhGRiwweEQ4LCAweDk2LDB4OTYsIDB4RkYsMHhEQywgMHhGNywweDA1LCAweDRBLDB4QTAsIDB4RTAsMHgwMCwgMHgwOSwweDlDLCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDA5LDB4QUMsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDBBLDB4MDQsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4OTYsIDB4RkYsMHhEOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc3LDB4MzUsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY2LDB4ODYsCisweDQyLDB4QzgsIDB4QTYsMHgzQSwgMHg2OCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NSwweDM5LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwKKzB4RkYsMHhFNSwgMHgwNSwweEI4LCAweDAwLDB4MDIsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwNCwgMHg5NywweDE2LAorMHhGRiwweEVDLCAweEM2LDB4MzAsIDB4NTcsMHhDMCwgMHg3NiwweDMwLCAweEZGLDB4RjAsIDB4OTYsMHgxNiwgMHhGRiwweEY0LCAweDc1LDB4QUQsCisweDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NUYsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4OTYsMHg5NiwKKzB4RkYsMHhGMCwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgwQSwweEE1LCAweEYzLDB4MDYsIDB4MkEsMHhGOCwgMHg4NiwweDk2LAorMHhGRiwweEYwLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDNywweDM0LCAweDY4LDB4MDAsIDB4QzQsMHg5QywgMHg3MiwweDAwLCAweEMwLDB4MkUsCisweDZBLDB4MDAsIDB4RUMsMHgwMCwgMHgwQSwweDcwLCAweEM1LDB4MjQsIDB4MDAsMHgwMCwgMHhDNiwweDJDLCAweDAwLDB4MDAsIDB4ODcsMHgxNiwKKzB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QTYsMHhCMiwgMHg3MCwweDAyLCAweDA1LDB4QUMsIDB4MDAsMHgwMSwgMHhDNywweDMwLAorMHg3MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjQsCisweEZGLDB4RjAsIDB4RjYsMHhBQiwgMHgyOCwweDAwLCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDJFLCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgMHgwQSwweDMxLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhGMywweDAyLAorMHgwMCwweDAyLCAweEYzLDB4MDUsIDB4NzYsMHhGNCwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4ODYsMHg5RSwgMHgwMCwweDA0LCAweEM3LDB4MzgsCisweDcwLDB4MDAsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDYsMHhCNCwKKzB4MDAsMHgyMCwgMHg5NywweDAyLCAweEZGLDB4NkMsIDB4OTQsMHg4MiwgMHhGRiwweDUwLCAweDk2LDB4ODIsIDB4RkYsMHg1OCwgMHhGMywweDA2LAorMHgyQSwweEY4LCAweEYzLDB4MDUsIDB4MkMsMHgxQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHhGNiwweDg0LCAweDc5LDB4RTgsIDB4RjcsMHgwNCwgMHg3OSwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNiwweEI0LAorMHg3MCwweDAwLCAweEY3LDB4MDQsIDB4N0EsMHgyMCwgMHhGNiwweDg1LCAweDc5LDB4RTgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsCisweDdBLDB4MjAsIDB4RjcsMHgwNCwgMHg3OSwweEYwLCAweEY2LDB4MDQsIDB4N0EsMHgyMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwKKzB4MEIsMHgyQywgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHg4MiwgMHgwMCwweDEzLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgwQiwweDIwLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHg4NiwKKzB4MkIsMHg4NCwgMHhFMCwweDAwLCAweDBCLDB4MzgsIDB4RjUsMHg4NSwgMHgyQywweDFDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgwNywweDRDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHhGNywweDA2LCAweDJDLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MjksMHhFMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDJDLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkEsMHg2QywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkMsMHgxQywgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkEsMHhGOCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkMsMHgxQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MkIsMHg4NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjAsMHgwNSwKKzB4MkQsMHgzOCwgMHhGMCwweDA1LCAweDJELDB4M0MsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE4LCAweEZGLDB4ODUsIDB4MkUsMHhEQywgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzcsMHg3QywKKzB4NzQsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxNCwweDI5LCAweDk3LDB4MTYsIDB4RkYsMHhGNCwgMHg0NywweDM4LAorMHhGRiwweEZCLCAweEY2LDB4ODQsIDB4NkYsMHg1MCwgMHhDRiwweEI4LCAweDAwLDB4MDAsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweEY3LDB4MDIsCisweDAwLDB4M0YsIDB4QzMsMHg5QywgMHg2RCwweDgwLCAweEM3LDB4MUMsIDB4NzQsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4M0YsIDB4RTIsMHgwMCwKKzB4MTIsMHg2MCwgMHg5MywweDk2LCAweEZGLDB4RjQsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY2LDB4ODIsIDB4MEMsMHg1QywgMHhBNiwweEI2LAorMHg3MCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMSwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgxMiwweDYwLCAweDAwLDB4MDAsCisweDEyLDB4NjAsIDB4MDAsMHgwMCwgMHgwRCwweDY4LCAweDAwLDB4MDAsIDB4MEQsMHg2OCwgMHgwMCwweDAwLCAweDBELDB4NUMsIDB4MDAsMHgwMCwKKzB4MEQsMHg1QywgMHgwMCwweDAwLCAweDBELDB4NjgsIDB4MDAsMHgwMCwgMHgwRCwweDY4LCAweDAwLDB4MDAsIDB4MTIsMHg1MCwgMHgwMCwweDAwLAorMHgxMiwweDUwLCAweDAwLDB4MDAsIDB4MTIsMHgzQywgMHgwMCwweDAwLCAweDEyLDB4M0MsIDB4MDAsMHgwMCwgMHgwRCwweEUwLCAweDAwLDB4MDAsCisweDBELDB4RTAsIDB4MDAsMHgwMCwgMHgxMiwweDNDLCAweDAwLDB4MDAsIDB4MTIsMHgzQywgMHgwMCwweDAwLCAweDBELDB4RTgsIDB4MDAsMHgwMCwKKzB4MEQsMHhGNCwgMHgwMCwweDAwLCAweDBFLDB4MDAsIDB4MDAsMHgwMCwgMHgwRSwweDIwLCAweDAwLDB4MDAsIDB4MEUsMHg0MCwgMHgwMCwweDAwLAorMHgwRSwweDYwLCAweDAwLDB4MDAsIDB4MEUsMHg4MCwgMHgwMCwweDAwLCAweDBFLDB4QTAsIDB4MDAsMHgwMCwgMHgwRSwweEMwLCAweDAwLDB4MDAsCisweDBFLDB4QzgsIDB4MDAsMHgwMCwgMHgwRSwweEQwLCAweDAwLDB4MDAsIDB4MTIsMHgyOCwgMHgwMCwweDAwLCAweDBFLDB4RDgsIDB4MDAsMHgwMCwKKzB4MEUsMHhGNCwgMHgwMCwweDAwLCAweDBGLDB4MTAsIDB4MDAsMHgwMCwgMHgxMiwweDI4LCAweDAwLDB4MDAsIDB4MEYsMHgxOCwgMHgwMCwweDAwLAorMHgwRiwweDE4LCAweDAwLDB4MDAsIDB4MEYsMHgyNCwgMHgwMCwweDAwLCAweDBGLDB4MjQsIDB4MDAsMHgwMCwgMHgwRiwweDQ0LCAweDAwLDB4MDAsCisweDBGLDB4NDQsIDB4MDAsMHgwMCwgMHgwRiwweDY0LCAweDAwLDB4MDAsIDB4MEYsMHg2NCwgMHgwMCwweDAwLCAweDBGLDB4ODQsIDB4MDAsMHgwMCwKKzB4MEYsMHg4NCwgMHgwMCwweDAwLCAweDBGLDB4OEMsIDB4MDAsMHgwMCwgMHgwRiwweDhDLCAweDAwLDB4MDAsIDB4MEYsMHg5NCwgMHgwMCwweDAwLAorMHgwRiwweDk0LCAweDAwLDB4MDAsIDB4MEYsMHhCMCwgMHgwMCwweDAwLCAweDBGLDB4QjAsIDB4MDAsMHgwMCwgMHgwRiwweEI4LCAweDAwLDB4MDAsCisweDBGLDB4RDgsIDB4MDAsMHgwMCwgMHgwRiwweEY4LCAweDAwLDB4MDAsIDB4MTAsMHgyQywgMHgwMCwweDAwLCAweDEwLDB4NjAsIDB4MDAsMHgwMCwKKzB4MTAsMHg5NCwgMHgwMCwweDAwLCAweDEwLDB4QzgsIDB4MDAsMHgwMCwgMHgxMCwweEZDLCAweDAwLDB4MDAsIDB4MTEsMHgzMCwgMHgwMCwweDAwLAorMHgxMSwweDRDLCAweDAwLDB4MDAsIDB4MTEsMHg2OCwgMHgwMCwweDAwLCAweDEyLDB4MTQsIDB4MDAsMHgwMCwgMHgxMSwweDg0LCAweDAwLDB4MDAsCisweDExLDB4QjQsIDB4MDAsMHgwMCwgMHgxMSwweEU0LCAweDAwLDB4MDAsIDB4MTIsMHgxNCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwKKzB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHgwMiwgMHgwMCwweDA1LCAweDIwLDB4MzIsIDB4MDAsMHgxNCwgMHhFNiwweDAwLAorMHgwRCwweEI1LCAweDI3LDB4MDAsIDB4MDAsMHgxMCwgMHgyMCwweDNBLCAweDAwLDB4MDEsIDB4RTIsMHgwMCwgMHgwRCwweEI1LCAweEY3LDB4MDYsCisweDJELDB4Q0MsIDB4RjYsMHg4NCwgMHgyRSwweENDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NSwweEI1LCAweDAwLDB4MDIsIDB4QjYsMHgyRSwKKzB4NzAsMHgwMiwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4RjYsMHg4NSwgMHgyRSwweENDLCAweDg2LDB4MDIsIDB4RkYsMHgzNCwgMHhGNywweDA2LAorMHgyRSwweDRDLCAweDIwLDB4MzYsIDB4MDAsMHgxRiwgMHhFMiwweDAwLCAweDBELDB4QjUsIDB4QjYsMHgyRSwgMHg3MCwweDAyLCAweEYwLDB4MDUsCisweDJFLDB4Q0MsIDB4RjcsMHgwNCwgMHgyRCwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDNBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDNBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhDMSwweDM4LAorMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4NjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEUwLDB4MDAsCisweDEyLDB4NDAsIDB4RjMsMHg4MiwgMHgwMCwweDA2LCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDcsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLAorMHgwMCwweDBCLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgwNywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNSwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsCisweDAwLDB4MEIsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLAorMHgwMCwweDA3LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA2LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgwQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNSwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsCisweDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDUsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLAorMHgxMiwweDQwLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHhFMCwweDAwLCAweDEyLDB4NDAsIDB4RjMsMHg4MiwgMHgwMCwweDA3LCAweEUwLDB4MDAsCisweDEyLDB4MkMsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHg0MCwgMHhGMywweDgyLAorMHgwMCwweDA2LCAweEYzLDB4ODIsIDB4MDAsMHgwNywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHg0MCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwKKzB4MTIsMHgyQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNSwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4MTIsMHg0MCwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4RTAsMHgwMCwgMHgxMiwweDJDLCAweEYzLDB4ODIsCisweDAwLDB4MTQsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgxMiwweDQwLCAweEYzLDB4ODIsIDB4MDAsMHgwNiwgMHhFMCwweDAwLAorMHgxMiwweDJDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4RTAsMHgwMCwKKzB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA3LCAweEUwLDB4MDAsCisweDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsCisweDAwLDB4MDUsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLAorMHgwMCwweDA3LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDA1LCAweEUwLDB4MDAsIDB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgxNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwNiwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RTAsMHgwMCwKKzB4MTIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgwNSwgMHhFMCwweDAwLCAweDEyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxNCwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsCisweDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDUsIDB4RTAsMHgwMCwgMHgxMiwweDU0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLAorMHgwMCwweDE0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgxMiwweDQwLCAweEYzLDB4ODIsIDB4MDAsMHgwQiwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLAorMHgxMiwweDQwLCAweEYzLDB4ODIsIDB4MDAsMHgwNywgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4MkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgwQiwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MEIsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4NDAsIDB4RjMsMHg4MiwKKzB4MDAsMHgwNiwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4NDAsIDB4RjMsMHg4MiwKKzB4MDAsMHgwNiwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweDEyLDB4MkMsIDB4RjMsMHg4MiwgMHgwMCwweDBCLCAweEY3LDB4MDQsCisweDM1LDB4MjgsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDEzLDB4Q0MsIDB4RjcsMHgwNSwKKzB4MzUsMHg0NCwgMHhGMywweDgyLCAweDAwLDB4MTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDcsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4MDUsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDg0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg5MCwweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4ODQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsCisweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4OUMsIDB4MDAsMHgxNCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwKKzB4MTIsMHg5RCwgMHhGNywweDA2LCAweDA0LDB4MDAsIDB4RjcsMHgwNCwgMHg2RiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NkYsMHg1QywgMHhGNywweDA0LCAweDZGLDB4NUMsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweEY3LDB4MDYsIDB4MDQsMHgwMCwgMHhDMCwweDFFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwKKzB4MTQsMHgyOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgyRSwweEQwLCAweEY2LDB4ODQsIDB4MzUsMHgyNCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE0LDB4MDUsIDB4RjcsMHgwNSwgMHgyRSwweEQwLCAweEY3LDB4MDQsCisweEUwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE0LDB4MDUsIDB4RjYsMHg4MiwKKzB4MDAsMHgwMCwgMHhGNiwweDg1LCAweEUwLDB4MTQsIDB4RjcsMHgwNCwgMHgyRSwweEQ4LCAweEM1LDB4MzQsIDB4MDAsMHgwMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MkUsMHhEOCwgMHgyMCwweDJBLCAweDAwLDB4MDIsIDB4RUUsMHgwMCwgMHgxMywweENDLCAweEY2LDB4ODIsCisweDAwLDB4MDAsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgMHgxMywweEEwLCAweDA1LDB4QjQsIDB4MDAsMHgwOCwgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweDk1LDB4MTYsIDB4RkYsMHhFOCwgMHg5NSwweDk2LCAweEZGLDB4RTQsIDB4OTYsMHg5NiwgMHhGRiwweEUwLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4RTgsIDB4ODUsMHg5NiwKKzB4RkYsMHhFNCwgMHg4NiwweDk2LCAweEZGLDB4RTAsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MTMsMHg5MCwgMHhGNywweDAyLAorMHgwMCwweDAwLCAweDg2LDB4MzYsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDBGLCAweEUyLDB4MDAsCisweDEzLDB4NzUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHg5NywweDM2LCAweDAwLDB4MTQsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4MTMsMHg5MCwgMHhGNywweDAyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA1LCAweEM3LDB4MzgsCisweDZBLDB4MDAsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHhDNywweDJDLCAweDcwLDB4MDAsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDEyLDB4MDAsIDB4RjcsMHgwNSwgMHgzNSwweDJDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LAorMHg2RiwweDRDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgxMywweEMwLCAweDA3LDB4MzQsCisweDE0LDB4OTQsIDB4RjMsMHg4NCwgMHg2RiwweDQ0LCAweEUwLDB4MDAsIDB4MTMsMHhDNCwgMHhGMywweDg1LCAweDM1LDB4MjgsIDB4RjcsMHgwNSwKKzB4MzUsMHgyOCwgMHhFMCwweDAwLCAweDEyLDB4RTgsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgxNCwweDI5LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjAsMHgwNSwgMHgzNSwweDI0LCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDgyLCAweDAwLDB4MEQsIDB4MjAsMHgzMiwKKzB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDE0LDB4MjgsIDB4QjMsMHhCQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4MTQsMHgyOCwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4RTAsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDE0LDB4MjksIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweEY3LDB4MDUsIDB4RTAsMHgxMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwKKzB4MDIsMHg5OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjQsMHg4NCwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4MkQsMHgzQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDBDLDB4MDksIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4QTUsMHgzQSwgMHg2OCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MTQsIDB4RTYsMHgwMCwKKzB4MTQsMHg5MSwgMHgyNywweDI4LCAweDAwLDB4MTUsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweEUyLDB4MDAsIDB4MTQsMHg5MSwgMHhGNywweDA2LAorMHgyRCwweENDLCAweEY2LDB4ODQsIDB4MkUsMHhDQywgMHg4NiwweDAyLCAweEZGLDB4MzQsIDB4NzUsMHhCNSwgMHgwMCwweDAyLCAweEI1LDB4MkUsCisweDcwLDB4MDIsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEY2LDB4ODUsIDB4MkUsMHhDQywgMHhGNywweDA2LCAweDJFLDB4NEMsIDB4MjAsMHgzNiwKKzB4MDAsMHgxRiwgMHhFMiwweDAwLCAweDE0LDB4OTEsIDB4QjYsMHgyRSwgMHg3MCwweDAyLCAweEYwLDB4MDUsIDB4MkUsMHhDQywgMHhGNywweDA2LAorMHgyRCwweDQ0LCAweDc2LDB4QTksIDB4MDAsMHgwMiwgMHhBNywweDM2LCAweDcwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4M0EsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDM2LCAweDAwLDB4MDQsIDB4OTQsMHg5NiwKKzB4RkYsMHhFQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzOCwgMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LAorMHgyRCwweDNDLCAweDg0LDB4OTYsIDB4RkYsMHhFQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDQ0LCAweEU2LDB4MDAsCisweDE0LDB4MkMsIDB4RjcsMHgwNSwgMHgyRCwweDNDLCAweEUwLDB4MDAsIDB4MTQsMHgyQywgMHhGMCwweDA1LCAweDJELDB4M0MsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODQsMHgxNiwgMHgwMCwweDAwLCAweEY3LDB4MDIsCisweDAwLDB4MDAsIDB4ODUsMHg5NiwgMHgwMCwweDA0LCAweDIwLDB4M0EsIDB4MDAsMHgyMSwgMHhFRSwweDAwLCAweDE1LDB4MzQsIDB4OTUsMHhBMiwKKzB4MDAsMHgwMCwgMHhGNiwweDA2LCAweDIzLDB4MzgsIDB4MDcsMHgyMCwgMHgwMCwweDg0LCAweEM2LDB4QTAsIDB4MDAsMHgwMCwgMHg5NiwweDNBLAorMHgwMCwweDA0LCAweDI3LDB4MzgsIDB4MDAsMHgwNCwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RUMsMHgwMCwgMHgxNSwweDIwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDk2LAorMHgwMCwweDAwLCAweDg3LDB4MTYsIDB4MDAsMHgwNCwgMHhGNiwweDA0LCAweDJELDB4NDAsIDB4OTcsMHgzNiwgMHgwMCwweDAwLCAweDk3LDB4MzYsCisweDAwLDB4MDQsIDB4MDcsMHgzMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MkQsMHg0MCwgMHg5NiwweDM2LCAweDAwLDB4MDgsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDE0LCAweEU2LDB4MDAsIDB4MTUsMHhEOSwgMHgyNywweDI4LCAweDAwLDB4MTUsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMSwgMHhFMiwweDAwLCAweDE1LDB4RDksIDB4RjcsMHgwNiwgMHgyRCwweENDLCAweEY2LDB4ODQsIDB4MkUsMHhDQywgMHg4NiwweDAyLAorMHhGRiwweDM0LCAweDc1LDB4QjUsIDB4MDAsMHgwMiwgMHhCNSwweDJFLCAweDcwLDB4MDIsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEY2LDB4ODUsCisweDJFLDB4Q0MsIDB4RjcsMHgwNiwgMHgyRSwweDRDLCAweDIwLDB4MzYsIDB4MDAsMHgxRiwgMHhFMiwweDAwLCAweDE1LDB4RDksIDB4QjYsMHgyRSwKKzB4NzAsMHgwMiwgMHhGMCwweDA1LCAweDJFLDB4Q0MsIDB4RjYsMHg4NiwgMHgyRCwweDQ0LCAweDc3LDB4MjksIDB4MDAsMHgwMiwgMHhBNiwweEJBLAorMHg2OCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsCisweDY4LDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzOCwKKzB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4ODcsMHgxNiwgMHgwMCwweDAwLCAweDg2LDB4OTYsIDB4MDAsMHgwNCwgMHhGNiwweDA2LCAweDJELDB4NDQsIDB4NzYsMHhCNSwKKzB4MDAsMHgwMiwgMHg4NSwweEJBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEI1LDB4QjYsIDB4NjAsMHgwMiwgMHhDNiwweEI0LAorMHg3MCwweDAwLCAweDg1LDB4OTYsIDB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHhCNiwgMHgwMCwweDA0LCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4MTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg3LDB4MzIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDBGLCAweDg2LDB4QjIsCisweDAwLDB4MDAsIDB4QzUsMHgzOCwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4MTYsMHhCNCwgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4MjAsMHgzNiwKKzB4MDAsMHgwRiwgMHhFRSwweDAwLCAweDE2LDB4QjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFQywweDAwLAorMHgxNiwweEI1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RUMsMHgwMCwgMHgxNiwweEQwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzMiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzMiwKKzB4MDAsMHgwQywgMHg4NywweDMyLCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgMHgxNiwweEQ4LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDJBLAorMHg1QSwweDAwLCAweDQ0LDB4MEMsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgMHgyRSwweEUwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHgzMiwweEQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDQ4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgxOCwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MDksIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDJFLDB4RTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDM0LDB4NTgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDIsCisweDAwLDB4MEMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkYsMHg2QywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4M0YsMHg5NCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwQiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgyRiwweEY4LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwKKzB4M0IsMHg4NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDBCLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHgzMiwweDI4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgyNiwweEU0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MTMsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDMwLDB4ODQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDI2LDB4QTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDIsCisweDAwLDB4MTEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzEsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MTgsMHgyQywgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwOSwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMSwweDlDLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjAsMHgwNSwKKzB4N0EsMHg3OCwgMHhGMCwweDA1LCAweDMyLDB4RTgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDUwLCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE4LDB4NTUsIDB4RjYsMHg4NiwgMHg3MSwweEM0LCAweEUwLDB4MDAsIDB4MTgsMHg2QywgMHhGNiwweDAyLAorMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NzEsMHhENCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsCisweDY4LDB4MDAsIDB4ODYsMHgzQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDMyLDB4QzQsIDB4ODYsMHhCMiwKKzB4MDAsMHgwOCwgMHgwNywweDAxLCAweDgwLDB4MDAsIDB4QzUsMHhCNCwgMHg3NCwweDAwLCAweEY1LDB4ODUsIDB4MzIsMHhEMCwgMHg4NywweDMyLAorMHgwMCwweDE4LCAweEY2LDB4ODYsIDB4NkYsMHg0NCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QTcsMHgzQSwgMHg2OCwweDAyLCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEMwLCAweDA3LDB4MzgsIDB4MDksMHhEOCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjcsMHgwNSwKKzB4MzIsMHhDQywgMHhFNiwweDAwLCAweDE5LDB4NDEsIDB4RjYsMHg4NSwgMHgzMiwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHhGNiwweDg0LAorMHg3QSwweDc4LCAweDI3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxOSwweDEwLCAweEY3LDB4MDUsCisweDcxLDB4OTgsIDB4RjcsMHgwNCwgMHg3NiwweEZDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MTgsMHhFOCwgMHhGMywweDAyLCAweDAwLDB4MTEsIDB4RjMsMHgwNiwgMHgzMiwweEQ0LCAweEYzLDB4MDUsIDB4NzYsMHhGQywgMHhFMCwweDAwLAorMHgxOCwweEY4LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA1LCAweDc2LDB4RjgsIDB4RjMsMHgwNiwgMHgzMiwweEQ0LCAweEYzLDB4MDUsCisweDc3LDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDE5LDB4MTQsIDB4RjMsMHgwMiwKKzB4MDAsMHgwMSwgMHhGMywweDA2LCAweDMxLDB4MTAsIDB4RTAsMHgwMCwgMHgyNiwweDhDLCAweEYzLDB4MDUsIDB4MzIsMHhENCwgMHhGMywweDAyLAorMHgwMCwweDAxLCAweEYzLDB4MDUsIDB4N0EsMHg3OCwgMHhGMywweDA2LCAweDMwLDB4ODQsIDB4RjMsMHgwNSwgMHgzMiwweEQ0LCAweEYzLDB4MDQsCisweDMyLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MDYsMHgxMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgMHgyNiwweDhDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGMywweDAyLAorMHgwMCwweDAwLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFDLDB4QjksIDB4OTMsMHgxNiwgMHhGRiwweEU0LCAweDg3LDB4MzIsCisweDAwLDB4MDgsIDB4ODYsMHg5NiwgMHhGRiwweEU0LCAweEMzLDB4MDQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwKKzB4MTksMHg4NCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4MTksMHg4NCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MzYsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxQywweEI4LCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDMyLDB4QzAsIDB4OTMsMHgxNiwKKzB4RkYsMHhBQywgMHhGNSwweDg0LCAweDMyLDB4QzQsIDB4ODYsMHgzQSwgMHgxNCwweDI4LCAweDAzLDB4QjgsIDB4MTQsMHgyMCwgMHgwNCwweDJDLAorMHgwMCwweDA4LCAweDg2LDB4QkEsIDB4MTQsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg2QSwweDAwLCAweEVDLDB4MDAsCisweDFBLDB4NzAsIDB4OTYsMHgxNiwgMHhGRiwweEVDLCAweDc3LDB4MzEsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwKKzB4MDAsMHgwMiwgMHhDNiwweDM4LCAweDM4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDBDLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDJFLAorMHgwMCwweDA4LCAweDg1LDB4MTYsIDB4RkYsMHhBQywgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgxQSwweDAwLCAweEM0LDB4ODQsCisweDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDFBLDB4MDQsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUEsMHgxMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4QjIsCisweDAwLDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwKKzB4MUEsMHg0QywgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MUEsMHg1NCwgMHgyMCwweDJFLAorMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHg4NywweDIyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgxQSwweDU1LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFBLDB4NjUsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUEsMHg3MCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEFDLCAweDgzLDB4MTYsCisweEZGLDB4QUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFBLDB4QjEsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LAorMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDM4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsCisweDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEUwLDB4MDAsIDB4MUIsMHgxOCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MjcsMHgxNCwKKzB4MDAsMHgxNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTQsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDk2LAorMHhGRiwweEJDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsCisweEZGLDB4QkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUIsMHgxNSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwKKzB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LAorMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsCisweEZGLDB4RjAsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDk3LDB4MUUsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDFCLDB4MUMsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUMsMHhCOCwgMHhGMywweDAyLAorMHgwMCwweDAwLCAweEY2LDB4MDQsIDB4MzIsMHhDMCwgMHg5MywweDE2LCAweEZGLDB4QUMsIDB4ODYsMHhCMiwgMHgxNCwweDI4LCAweDAzLDB4QjAsCisweDE0LDB4MjAsIDB4MDQsMHgzMCwgMHgxNCwweDhDLCAweDg3LDB4MzIsIDB4MTQsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFQywweDAwLCAweDFDLDB4MDQsIDB4OTYsMHg5NiwgMHhGRiwweEVDLCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNSwweEI4LCAweDM4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDBDLCAweDg2LDB4QUUsCisweDAwLDB4MDAsIDB4ODcsMHgzMiwgMHgxNCwweDhDLCAweDg1LDB4MTYsIDB4RkYsMHhBQywgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwKKzB4MUIsMHg5NCwgMHhDNCwweDg0LCAweDAwLDB4MDAsIDB4ODYsMHhBRSwgMHgwMCwweDA0LCAweDg3LDB4MzIsIDB4MTQsMHg5MCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDFCLDB4OTgsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsCisweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUIsMHhBNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMCwgMHg4NiwweEFFLCAweDAwLDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4MUIsMHhFMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweDFCLDB4RTgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg2LDB4QUUsIDB4MDAsMHgwNCwgMHg4NywweDIyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgxQiwweEU5LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFCLDB4RjksIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsCisweDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUMsMHgwNCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwKKzB4RkYsMHhBQywgMHg4MywweDE2LCAweEZGLDB4QUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgxQywweDQ1LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc2LDB4QjksCisweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDM4LDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEUwLDB4MDAsIDB4MUMsMHhBQywgMHg5NiwweDk2LAorMHhGRiwweEY0LCAweDI3LDB4MTQsIDB4MDAsMHgxNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTQsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweEJDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI1LDB4NjgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUMsMHhBOSwgMHhGNiwweDAyLAorMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsCisweDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwKKzB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDk3LDB4MUUsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxQywweEIwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDFFLDB4MTUsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHhCNiwKKzB4MEUsMHhGNCwgMHg4NiwweDM2LCAweDBFLDB4RjgsIDB4MjAsMHgyRSwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MUMsMHhEQywgMHgyMCwweDMyLAorMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MUMsMHhGOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwRiwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MEYsMHgwMCwgMHg4NywweDM2LCAweDBGLDB4MDAsIDB4RTAsMHgwMCwKKzB4MUQsMHgyNCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4MDcsMHgzMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NUEsMHgwMCwgMHhFNiwweDAwLAorMHgxRCwweDFELCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHgyMCwweDMyLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgxRCwweDIwLCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxRCwweDI0LCAweEM3LDB4MzQsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4QzcsMHgzNCwKKzB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgxRSwweDE0LCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA0LAorMHgzMiwweENDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4REMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MUQsMHhGQywgMHhGMywweDAyLCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweERDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDFBLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgxRCwweDkxLCAweDc2LDB4QjEsCisweDAwLDB4MDIsIDB4ODcsMHgxQSwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgxQSwKKzB4MDAsMHgwQywgMHg4NywweDFBLCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgMHgxRCwweEZDLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHhGMywweDAyLAorMHgwMCwweDRDLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsCisweDZBLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweERDLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4MDcsMHgzOCwKKzB4MDAsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgMHg3QSwweDI4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NiwweDE2LAorMHhGRiwweEI0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsCisweEZGLDB4QjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwKKzB4MUQsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhEQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDk2LDB4MUEsIDB4MDAsMHgwMCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEQ0LCAweDgzLDB4MTYsCisweEZGLDB4RDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFFLDB4MTgsIDB4RjMsMHgwMiwKKzB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4RTQsIDB4ODMsMHgxNiwgMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDFBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUYsMHgzNSwgMHhGNiwweDgyLCAweDBDLDB4QUIsIDB4RjcsMHgwNCwgMHgzMiwweEI0LCAweDgzLDB4MTYsCisweEZGLDB4RDQsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzIsMHhCNCwgMHhGNywweDA0LCAweDMyLDB4QjQsIDB4MjAsMHgxQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFFLDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhDMCwgMHhGMywweDA2LAorMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweDFFLDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDMyLDB4RTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4RTgsIDB4RjcsMHgwNCwKKzB4NzEsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUUsMHhBRCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwQSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4MUUsMHhBQywgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NzEsMHhENCwgMHhGNiwweDg0LAorMHg3MSwweENDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgxRSwweEM4LCAweEY3LDB4MDUsCisweDcxLDB4RDQsIDB4RjAsMHgwNSwgMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhENCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwKKzB4NzEsMHhDNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhEMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4RDksIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsCisweDcxLDB4OTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4NzksIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgyNSwweDc4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweDc4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDI1LDB4REMsIDB4RjMsMHgwNiwKKzB4MzEsMHg5QywgMHhGMCwweDA1LCAweDMyLDB4RTgsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweEY2LDB4MDQsIDB4NkYsMHg1NCwgMHg5NiwweEJBLAorMHgwMCwweDA0LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDFGLDB4NjAsIDB4RjMsMHgwMiwgMHgwMCwweDBDLCAweEYzLDB4MDIsCisweDAwLDB4MDEsIDB4RjMsMHgwNSwgMHg2RiwweDU0LCAweEUwLDB4MDAsIDB4MUYsMHg2OCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjMsMHgwNSwKKzB4NkYsMHg1OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MUYsMHg3QywgMHhGMywweDA2LAorMHgyRiwweDZDLCAweEUwLDB4MDAsIDB4MjYsMHg4QywgMHhGMywweDA1LCAweDMyLDB4RDQsIDB4RjUsMHg4NCwgMHg3QSwweDcwLCAweDI0LDB4OTQsCisweDAwLDB4MTAsIDB4MjAsMHgyRSwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4MjIsMHg4NCwgMHhGNSwweDg1LCAweDdBLDB4QTAsIDB4RjcsMHgwMiwKKzB4MDAsMHgwMSwgMHhGNiwweDA0LCAweDMyLDB4QzgsIDB4RjcsMHgwNSwgMHg3QSwweDcwLCAweEY3LDB4MDQsIDB4MzIsMHhDNCwgMHhGNiwweDg0LAorMHgzMiwweEMwLCAweEY2LDB4MDUsIDB4N0EsMHgyQywgMHg5MCwweDAyLCAweEZGLDB4ODAsIDB4OTAsMHgwMiwgMHhGRiwweDM4LCAweEY1LDB4ODQsCisweDdBLDB4MjgsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweDk1LDB4ODIsIDB4RkYsMHgzQywgMHg5NywweDAyLCAweEZGLDB4NDAsIDB4OTYsMHgwMiwKKzB4RkYsMHg0NCwgMHg4NywweDM2LCAweDE0LDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg5NywweDM2LAorMHgxNCwweDEwLCAweDg3LDB4MzYsIDB4MTQsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDE0LDB4MTgsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweEYwLDB4MDUsIDB4NkYsMHg1MCwgMHhGNywweDA0LCAweDMyLDB4QjgsIDB4OTUsMHg5NiwKKzB4RkYsMHhFQywgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHhGMywweDA2LAorMHgyRiwweEY4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4QkMsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEYzLDB4MDUsCisweDMyLDB4RDQsIDB4RjcsMHgwNiwgMHgwQywweDNFLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDIwLDB4MzQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDdFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgMHgyMCwweDI1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA2LAorMHgwQywweDNFLCAweEM3LDB4N0MsIDB4NzQsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgyNiwweDhDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzMiwweEU0LCAweEZGLDB4ODIsIDB4MDAsMHgxMCwgMHhGNSwweDg0LCAweDZGLDB4NTgsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgMHgyMCwweDkwLCAweEY3LDB4MDUsIDB4MzIsMHhFNCwgMHhGNywweDA0LAorMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MjAsMHg4NCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwKKzB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgMHgyMCwweDk0LCAweEYzLDB4MDUsIDB4NkYsMHg1OCwgMHhGMCwweDA1LAorMHg2RiwweDU0LCAweEY1LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTAsMHgyRSwgMHgwMCwweDA0LCAweDg3LDB4MkUsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMiwgMHhFNiwweDAwLCAweDIxLDB4QzAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDAyLCAweEZGLDB4MzgsIDB4MDMsMHgyQywgMHgwRSwweEY0LCAweDkzLDB4MTYsIDB4RkYsMHhDQywgMHhGNywweDA1LAorMHg3QSwweDY4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4QjgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDQzLDB4QTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhCOCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MjEsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgyRSwgMHgwRSwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MjEsMHgxOSwgMHhGMywweDAyLCAweDAwLDB4NEMsIDB4ODcsMHgyRSwgMHgwRiwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MkUsIDB4MEYsMHgwMCwgMHg4NywweDJFLCAweDBGLDB4MDAsIDB4RTAsMHgwMCwKKzB4MjEsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4N0EsMHgyOCwgMHg5MywweDEzLAorMHhGRiwweEZDLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsCisweDZBLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweENDLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4MDcsMHgzOCwKKzB4MDAsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweEI4LCAweDk2LDB4MTYsIDB4RkYsMHhCNCwgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgMHhGRiwweEI0LCAweDg1LDB4OTYsCisweEZGLDB4QjgsIDB4MDYsMHgzMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMSwgMHhFNiwweDAwLCAweDIxLDB4NzgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4OTYsMHgyRSwgMHgwRSwweEY4LCAweEY3LDB4MDQsIDB4MzIsMHhDMCwgMHhGMywweDA2LAorMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweDIxLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweEUwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjgsIDB4MDAsMHgxRSwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwKKzB4MjEsMHhDMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweEY3LDB4MDQsCisweDcxLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDIxLDB4RkQsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LAorMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEEsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsCisweDIxLDB4RkMsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwKKzB4NzEsMHhDQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEU2LDB4MDAsIDB4MjIsMHgxOCwgMHhGNywweDA1LAorMHg3MSwweEQ0LCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4RDQsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEYwLDB4MDUsCisweDcxLDB4QzQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4RDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweEQ5LCAweEY3LDB4MDUsIDB4NzEsMHhDOCwgMHhGNywweDA0LAorMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweDc5LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MjUsMHg3OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjUsMHg3OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgyNSwweERDLCAweEYzLDB4MDYsCisweDMxLDB4OUMsIDB4RjAsMHgwNSwgMHg3QSwweDg4LCAweDkwLDB4MDIsIDB4RkYsMHgzOCwgMHhGMCwweDA1LCAweDZGLDB4NTAsIDB4OTAsMHgwMiwKKzB4RkYsMHg4MCwgMHhGNywweDA0LCAweDMyLDB4QzQsIDB4RjMsMHgwNiwgMHgzMiwweDI4LCAweEYzLDB4MDUsIDB4MzIsMHhENCwgMHhGNiwweDA0LAorMHgzMiwweEM4LCAweEY2LDB4ODQsIDB4N0EsMHgyQywgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweEY3LDB4MDUsCisweDdBLDB4OTgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjIsMHhENSwgMHhGNiwweDA1LCAweDdBLDB4OTAsIDB4QzAsMHgyQSwKKzB4NUEsMHgwMCwgMHhFNiwweDAwLCAweDI2LDB4MjAsIDB4QzAsMHgzMiwgMHg2QSwweDAwLCAweEVFLDB4MDAsIDB4MjYsMHgyMSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDk3LDB4MzYsIDB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgxNCwweDE4LCAweDg3LDB4MzYsIDB4MTQsMHgxOCwgMHhGNywweDA0LAorMHgzMiwweEI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsCisweDMyLDB4QkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4QkMsIDB4RjcsMHgwNCwKKzB4MzIsMHhCQywgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyMywweDQ1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHgzMiwweEUwLCAweEY1LDB4MDUsIDB4N0EsMHg3MCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgyMywweDQ4LCAweEY3LDB4MDUsCisweDMyLDB4RTAsIDB4RjUsMHgwNSwgMHg3QSwweDcwLCAweEY1LDB4ODQsIDB4NkYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwKKzB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDIzLDB4OEMsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgyMywweDgwLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwMiwKKzB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDIzLDB4OTAsIDB4RjMsMHgwNSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LAorMHgzMiwweEMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MCwweDJFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4MjQsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwKKzB4RkYsMHgzOCwgMHgwMywweDJDLCAweDBFLDB4RjQsIDB4OTMsMHgxNiwgMHhGRiwweEM0LCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5MywweDEzLAorMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhCOCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODUsMHg5NiwgMHhGRiwweEI4LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI0LDB4NzgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NiwweDJFLCAweDBFLDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLAorMHgyNCwweDE1LCAweEYzLDB4MDIsIDB4MDAsMHg0QywgMHg4NywweDJFLCAweDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4OTcsMHgyRSwgMHgwRiwweDAwLCAweDg3LDB4MkUsIDB4MEYsMHgwMCwgMHhFMCwweDAwLCAweDI0LDB4NzgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgMHg3QSwweDI4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLAorMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHg3NywweDM1LCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDgzLDB4MTYsCisweEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweEM3LDB4MzgsIDB4MzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4QjgsIDB4OTYsMHgxNiwgMHhGRiwweEI0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLAorMHgyNiwweEY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NiwweDE2LCAweEZGLDB4QjQsIDB4ODUsMHg5NiwgMHhGRiwweEI4LCAweDA2LDB4MzAsCisweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDExLCAweEU2LDB4MDAsIDB4MjQsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMCwgMHg5NiwweDJFLCAweDBFLDB4RjgsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweEYzLDB4MDYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLAorMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4MjQsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzcsMHhCOCwgMHgwMCwweDFFLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDI0LDB4QkQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwRiwweDgxLCAweDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjQsMHhGOSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwKKzB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LAorMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwQSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgyNCwweEY4LCAweEIzLDB4M0EsCisweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgyNSwweDE0LCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LAorMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhENCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4RDksIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4NzksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI1LDB4NzgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgyNSwweEQxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDg0LCAweDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsCisweDAwLDB4MjEsIDB4RTIsMHgwMCwgMHgyNSwweEM0LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLAorMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MjUsMHhCMCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDIsCisweDAwLDB4MjIsIDB4RjMsMHgwNSwgMHg3NiwweEY4LCAweEYzLDB4MDQsIDB4NzcsMHgwMCwgMHhFMCwweDAwLCAweDI1LDB4QzgsIDB4RjMsMHgwNSwKKzB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RTAsMHgwMCwgMHgyNSwweEQ4LCAweEYwLDB4MDUsIDB4N0EsMHg3OCwgMHhFMCwweDAwLAorMHgyNSwweERDLCAweEYzLDB4MDYsIDB4MzEsMHg5QywgMHhGMywweDA2LCAweDJFLDB4RTAsIDB4RjMsMHgwNSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsCisweDcxLDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI2LDB4OEMsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LAorMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsCisweDI2LDB4OEMsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEUwLDB4MDAsIDB4MjYsMHg4QywgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwKKzB4N0EsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEVFLDB4MDAsIDB4MjYsMHg0MSwgMHhDNSwweEI0LAorMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NUEsMHgwMCwgMHhFMCwweDAwLCAweDI2LDB4NDgsIDB4RjcsMHgwNSwgMHg3QSwweDkwLCAweEM1LDB4QjgsCisweDAwLDB4MDAsIDB4RjAsMHgwNSwgMHg3QSwweDkwLCAweEY2LDB4ODQsIDB4N0EsMHg4OCwgMHhGNywweDA2LCAweDdBLDB4MjgsIDB4NzYsMHgzNSwKKzB4MDAsMHgwMywgMHhBNywweDMyLCAweDcwLDB4MDIsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDk3LDB4MTYsIDB4RkYsMHhFQywgMHg4NCwweEE2LAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4N0EsMHgyQywgMHhGMywweDA0LCAweDdBLDB4OTgsIDB4OTQsMHg4MiwgMHhGRiwweDNDLCAweDkzLDB4MDIsCisweEZGLDB4NDAsIDB4OTUsMHg4MiwgMHhGRiwweDQ0LCAweEI1LDB4QjIsIDB4NzAsMHgwMiwgMHhGNywweDA0LCAweDdBLDB4OTgsIDB4RjYsMHg4NSwKKzB4N0EsMHg4OCwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4RjcsMHgwNSwgMHg3QSwweDk4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDdBLDB4NzgsIDB4RjcsMHgwNiwKKzB4MzAsMHg4NCwgMHhGNywweDA1LCAweDMyLDB4RDQsIDB4RjcsMHgwNCwgMHgzMiwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDA2LDB4MTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg1MCwgMHhGNywweDA0LAorMHgzMiwweEQwLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQSwweDcxLCAweDkzLDB4MTYsCisweEZGLDB4RTQsIDB4RjYsMHg4NCwgMHgzMiwweEM0LCAweDg2LDB4MTYsIDB4RkYsMHhFNCwgMHg4NywweDM2LCAweDAwLDB4MDgsIDB4QzMsMHgwNCwKKzB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgMHgyNywweDNDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NywweDM2LAorMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgMHgyNywweDNDLCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJBLDB4NzAsIDB4RjMsMHgwMiwKKzB4MDAsMHgwMCwgMHhGNywweDA0LCAweDMyLDB4QzAsIDB4OTMsMHgxNiwgMHhGRiwweEFDLCAweEY1LDB4ODQsIDB4MzIsMHhDNCwgMHg4NiwweDNBLAorMHgxNCwweDI4LCAweDAzLDB4QjgsIDB4MTQsMHgyMCwgMHgwNCwweDJDLCAweDAwLDB4MDgsIDB4ODYsMHhCQSwgMHgxNCwweDI0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg2QSwweDAwLCAweEVDLDB4MDAsIDB4MjgsMHgyOCwgMHg5NiwweDE2LCAweEZGLDB4RUMsIDB4NzcsMHgzMSwKKzB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM2LDB4MzgsIDB4MzgsMHgwMCwgMHgwNiwweDMwLAorMHgwMCwweDBDLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDgsIDB4ODUsMHgxNiwgMHhGRiwweEFDLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgyNywweEI4LCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwKKzB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MjcsMHhCQywgMHgyMCwweDJBLAorMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyNywweEM5LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDIyLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgyOCwweDA0LCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MjgsMHgwQywgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MjIsCisweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDI4LDB4MEQsIDB4MjAsMHgyRSwKKzB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MjgsMHgxRCwgMHgyMCwweDI2LAorMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyOCwweDI4LCAweEYzLDB4MDIsCisweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEFDLCAweDgzLDB4MTYsIDB4RkYsMHhBQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI4LDB4NjksIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsCisweDM4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4RTAsMHgwMCwKKzB4MjgsMHhEMCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MjcsMHgxNCwgMHgwMCwweDE0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NCwweDEzLAorMHhGRiwweEZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4QkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsCisweDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhCQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MjgsMHhDRCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NiwweEI5LAorMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzOCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhGMCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4OTcsMHgxRSwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDI4LDB4RDQsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkEsMHg3MCwgMHhGMywweDAyLCAweDAwLDB4MDAsIDB4RjYsMHgwNCwgMHgzMiwweEMwLCAweDkzLDB4MTYsCisweEZGLDB4QUMsIDB4ODYsMHhCMiwgMHgxNCwweDI4LCAweDAzLDB4QjAsIDB4MTQsMHgyMCwgMHgwNCwweDMwLCAweDE0LDB4OEMsIDB4ODcsMHgzMiwKKzB4MTQsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEVDLDB4MDAsIDB4MjksMHhCQywgMHg5NiwweDk2LAorMHhGRiwweEVDLCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM1LDB4QjgsCisweDM4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDBDLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg4NywweDMyLCAweDE0LDB4OEMsIDB4ODUsMHgxNiwKKzB4RkYsMHhBQywgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHgyOSwweDRDLCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHg4NiwweEFFLAorMHgwMCwweDA0LCAweDg3LDB4MzIsIDB4MTQsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweDI5LDB4NTAsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MjksMHg1RCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg4NywweDIyLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHgyOSwweDk4LCAweEY2LDB4MDIsCisweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4MjksMHhBMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4ODYsMHhBRSwKKzB4MDAsMHgwNCwgMHg4NywweDIyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLAorMHgyOSwweEExLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDI5LDB4QjEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MjksMHhCQywgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEFDLCAweDgzLDB4MTYsIDB4RkYsMHhBQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MUEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDI5LDB4RkQsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsCisweEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwKKzB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDM4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LAorMHhGRiwweEYwLCAweEUwLDB4MDAsIDB4MkEsMHg2NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MjcsMHgxNCwgMHgwMCwweDE0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4OTQsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4QkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhCQywgMHgyMCwweDIyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkEsMHg2MSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwKKzB4MzgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhGMCwgMHg5NiwweDk2LAorMHhGRiwweEY0LCAweDk3LDB4MUUsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDJBLDB4NjgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsCisweDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkIsMHhDRCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwKKzB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHhCNiwgMHgwRSwweEY0LCAweDg2LDB4MzYsIDB4MEUsMHhGOCwgMHgyMCwweDJFLAorMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MkEsMHg5NCwgMHgyMCwweDMyLCAweDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgyQSwweEIxLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwRiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwKKzB4MEYsMHgwMCwgMHg4NywweDM2LCAweDBGLDB4MDAsIDB4RTAsMHgwMCwgMHgyQSwweERDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHgwNywweDMwLAorMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NUEsMHgwMCwgMHhFNiwweDAwLCAweDJBLDB4RDUsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDIwLDB4MzIsCisweDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgyQSwweEQ4LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJBLDB4REMsIDB4QzcsMHgzNCwKKzB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4QzcsMHgzNCwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgyQiwweENDLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA0LCAweDMyLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTYsCisweEZGLDB4REMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDQzLDB4NjgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQiwweEI0LCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHg4MywweDE2LAorMHhGRiwweERDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDFBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsCisweDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgyQiwweDQ5LCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHg4NywweDFBLCAweDAwLDB4MEMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgxQSwgMHgwMCwweDBDLCAweDg3LDB4MUEsIDB4MDAsMHgwQywgMHhFMCwweDAwLAorMHgyQiwweEI0LCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHhGMywweDAyLCAweDAwLDB4NEMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEM2LDB4QjQsCisweDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4REMsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDA2LAorMHg3QSwweDI4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NiwweDE2LCAweEZGLDB4QjQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsCisweDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsIDB4RkYsMHhCNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwgMHgyQiwweEE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDAyLAorMHgwMCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhEQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTYsMHgxQSwgMHgwMCwweDAwLCAweEYzLDB4MDIsCisweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweEQ0LCAweDgzLDB4MTYsIDB4RkYsMHhENCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJCLDB4RDAsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweDkzLDB4MTYsIDB4RkYsMHhFNCwgMHg4MywweDE2LAorMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDFBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyQywweEVELCAweEY2LDB4ODIsCisweDBDLDB4QUIsIDB4RjcsMHgwNCwgMHgzMiwweEI0LCAweDgzLDB4MTYsIDB4RkYsMHhENCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4MzIsMHhCNCwgMHhGNywweDA0LCAweDMyLDB4QjQsIDB4MjAsMHgxQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkMsMHgyOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhDMCwgMHhGMywweDA2LCAweEUwLDB4MzAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsCisweDJDLDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhFOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4RTgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkMsMHg2NSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwKKzB4MDAsMHgwQSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgyQywweDY0LCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsCisweDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgyQywweDgwLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwKKzB4NzEsMHhENCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDMzLDB4OTEsIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4MzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4MzAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDMzLDB4OTQsIDB4RjMsMHgwNiwgMHgzMSwweDlDLCAweEYwLDB4MDUsIDB4MzIsMHhFOCwgMHhGNywweDA0LAorMHgzMiwweEMwLCAweEY2LDB4MDQsIDB4NkYsMHg1NCwgMHg5NiwweEJBLCAweDAwLDB4MDQsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDJELDB4MTgsIDB4RjMsMHgwMiwgMHgwMCwweDBDLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA1LCAweDZGLDB4NTQsIDB4RTAsMHgwMCwKKzB4MkQsMHgyMCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjMsMHgwNSwgMHg2RiwweDU4LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MkQsMHgzNCwgMHhGMywweDA2LCAweDJGLDB4NkMsIDB4RTAsMHgwMCwgMHgzNCwweDQ0LCAweEYzLDB4MDUsCisweDMyLDB4RDQsIDB4RjUsMHg4NCwgMHg3QSwweDcwLCAweDI0LDB4OTQsIDB4MDAsMHgxMCwgMHgyMCwweDJFLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwKKzB4MzAsMHgzQywgMHhGNSwweDg1LCAweDdBLDB4QTAsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEY2LDB4MDQsIDB4MzIsMHhDOCwgMHhGNywweDA1LAorMHg3QSwweDcwLCAweEY3LDB4MDQsIDB4MzIsMHhDNCwgMHhGNiwweDg0LCAweDMyLDB4QzAsIDB4RjYsMHgwNSwgMHg3QSwweDJDLCAweDkwLDB4MDIsCisweEZGLDB4ODAsIDB4OTAsMHgwMiwgMHhGRiwweDM4LCAweEY1LDB4ODQsIDB4N0EsMHgyOCwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4OTUsMHg4MiwKKzB4RkYsMHgzQywgMHg5NywweDAyLCAweEZGLDB4NDAsIDB4OTYsMHgwMiwgMHhGRiwweDQ0LCAweDg3LDB4MzYsIDB4MTQsMHgxMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg5NywweDM2LCAweDE0LDB4MTAsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MTQsMHgxOCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4RjAsMHgwNSwKKzB4NkYsMHg1MCwgMHhGNywweDA0LCAweDMyLDB4QjgsIDB4OTUsMHg5NiwgMHhGRiwweEVDLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhGNywweDA1LAorMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHhGMywweDA2LCAweDJGLDB4RjgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsCisweDMyLDB4QkMsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEYzLDB4MDUsIDB4MzIsMHhENCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwKKzB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDJELDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLAorMHgyRCwweERELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsCisweDAwLDB4MTAsIDB4RTYsMHgwMCwgMHgzNCwweDQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDMyLDB4RTQsIDB4RkYsMHg4MiwKKzB4MDAsMHgxMCwgMHhGNSwweDg0LCAweDZGLDB4NTgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLAorMHgyRSwweDQ4LCAweEY3LDB4MDUsIDB4MzIsMHhFNCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4MkUsMHgzQywgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLAorMHgyRSwweDRDLCAweEYzLDB4MDUsIDB4NkYsMHg1OCwgMHhGMCwweDA1LCAweDZGLDB4NTQsIDB4RjUsMHg4NCwgMHgzMiwweEMwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTAsMHgyRSwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMiwgMHhFNiwweDAwLCAweDJGLDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MDIsIDB4RkYsMHgzOCwgMHgwMywweDJDLAorMHgwRSwweEY0LCAweDkzLDB4MTYsIDB4RkYsMHhDQywgMHhGNywweDA1LCAweDdBLDB4NjgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsCisweEZGLDB4QjgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NDMsMHhBMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwKKzB4RkYsMHhCOCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgyRiwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDJFLAorMHgwRSwweEY4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTAsIDB4RTIsMHgwMCwgMHgyRSwweEQxLCAweEYzLDB4MDIsCisweDAwLDB4NEMsIDB4ODcsMHgyRSwgMHgwRiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgyRSwKKzB4MEYsMHgwMCwgMHg4NywweDJFLCAweDBGLDB4MDAsIDB4RTAsMHgwMCwgMHgyRiwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLAorMHhGRiwweEZDLCAweEYzLDB4MDYsIDB4N0EsMHgyOCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4NzYsMHhCMSwgMHgwMCwweDAyLCAweEM2LDB4QjQsCisweDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4Q0MsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LAorMHhGRiwweEI4LCAweDk2LDB4MTYsIDB4RkYsMHhCNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNiwweEY4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODYsMHgxNiwgMHhGRiwweEI0LCAweDg1LDB4OTYsIDB4RkYsMHhCOCwgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwKKzB4MDAsMHgxMSwgMHhFNiwweDAwLCAweDJGLDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg5NiwweDJFLAorMHgwRSwweEY4LCAweEY3LDB4MDQsIDB4MzIsMHhDMCwgMHhGMywweDA2LCAweEUwLDB4MzAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsCisweDJGLDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhCOCwKKzB4MDAsMHgxRSwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgMHgyRiwweDc5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwRiwweDgxLAorMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsCisweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDJGLDB4QjUsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsCisweDAwLDB4MEEsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MkYsMHhCNCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwKKzB4MkQsMHgzOCwgMHhGNywweDA0LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweENDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHg2QSwweDAwLCAweEU2LDB4MDAsIDB4MkYsMHhEMCwgMHhGNywweDA1LCAweDcxLDB4RDQsIDB4RjAsMHgwNSwgMHg3MSwweEQ0LCAweEY2LDB4ODQsCisweDcxLDB4RDQsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEYwLDB4MDUsIDB4NzEsMHhDNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywKKzB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgzMywweDkxLCAweEY3LDB4MDUsIDB4NzEsMHhDOCwgMHhGNywweDA0LCAweDcxLDB4OTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMywweDMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMywweDMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHg3NSwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzMywweDMwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzMywweDk0LCAweEYzLDB4MDYsIDB4MzEsMHg5QywgMHhGMCwweDA1LCAweDdBLDB4ODgsIDB4OTAsMHgwMiwKKzB4RkYsMHgzOCwgMHhGMCwweDA1LCAweDZGLDB4NTAsIDB4OTAsMHgwMiwgMHhGRiwweDgwLCAweEY3LDB4MDQsIDB4MzIsMHhDNCwgMHhGMywweDA2LAorMHgzMiwweDI4LCAweEYzLDB4MDUsIDB4MzIsMHhENCwgMHhGNiwweDA0LCAweDMyLDB4QzgsIDB4RjYsMHg4NCwgMHg3QSwweDJDLCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweEY3LDB4MDUsIDB4N0EsMHg5OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MzAsMHg4RCwgMHhGNiwweDA1LCAweDdBLDB4OTAsIDB4QzAsMHgyQSwgMHg1QSwweDAwLCAweEU2LDB4MDAsIDB4MzMsMHhEOCwgMHhDMCwweDMyLAorMHg2QSwweDAwLCAweEVFLDB4MDAsIDB4MzMsMHhEOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzMiwweEMwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4OTcsMHgzNiwKKzB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LAorMHgxNCwweDE4LCAweDg3LDB4MzYsIDB4MTQsMHgxOCwgMHhGNywweDA0LCAweDMyLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsCisweDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4QkMsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgzMCwweEZELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDMyLDB4RTAsIDB4RjUsMHgwNSwgMHg3QSwweDcwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzMSwweDAwLCAweEY3LDB4MDUsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4RjUsMHg4NCwKKzB4NkYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4MzEsMHg0NCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDMxLDB4MzgsIDB4QjUsMHhCQSwKKzB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwMiwgMHgwMCwweDIyLCAweEUwLDB4MDAsIDB4MzEsMHg0OCwgMHhGMywweDA1LAorMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkwLDB4MkUsCisweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwKKzB4MzIsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwgMHhGRiwweDM4LCAweDAzLDB4MkMsIDB4MEUsMHhGNCwgMHg5MywweDE2LAorMHhGRiwweEM0LCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweEI4LCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4QjgsIDB4MjAsMHgyMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMyLDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MkUsIDB4MEUsMHhGOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDMxLDB4Q0QsIDB4RjMsMHgwMiwgMHgwMCwweDRDLCAweDg3LDB4MkUsCisweDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwKKzB4MEYsMHgwMCwgMHhFMCwweDAwLCAweDMyLDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDA2LAorMHg3QSwweDI4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsCisweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwKKzB4MzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhCOCwgMHg5NiwweDE2LAorMHhGRiwweEI0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsCisweEZGLDB4QjQsIDB4ODUsMHg5NiwgMHhGRiwweEI4LCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwKKzB4MzIsMHgyQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDk2LDB4MkUsIDB4MEUsMHhGOCwgMHhGNywweDA0LAorMHgzMiwweEMwLCAweEYzLDB4MDYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4RTYsMHgwMCwgMHgzMiwweDc0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwKKzB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDMyLDB4NzUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LAorMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsCisweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4MzIsMHhCMSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgMHgwMCwweDBBLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzMiwweEIwLCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwKKzB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLAorMHgzMiwweENDLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweEQ0LCAweEY3LDB4MDQsCisweDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwKKzB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzMsMHg5MSwgMHhGNywweDA1LAorMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDMzLDB4MzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4MzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDMzLDB4ODksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODQsCisweDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDMzLDB4N0MsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LAorMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzMywweDY4LCAweEI1LDB4QkEsCisweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDIsIDB4MDAsMHgyMiwgMHhGMywweDA1LCAweDc2LDB4RjgsIDB4RjMsMHgwNCwKKzB4NzcsMHgwMCwgMHhFMCwweDAwLCAweDMzLDB4ODAsIDB4RjMsMHgwNSwgMHg3NiwweEZDLCAweEYwLDB4MDUsIDB4NzYsMHhGQywgMHhFMCwweDAwLAorMHgzMywweDkwLCAweEYwLDB4MDUsIDB4N0EsMHg3OCwgMHhFMCwweDAwLCAweDMzLDB4OTQsIDB4RjMsMHgwNiwgMHgzMSwweDlDLCAweEYzLDB4MDYsCisweDJFLDB4RTAsIDB4RjMsMHgwNSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDM0LDB4NDQsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsCisweDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MzQsMHg0NCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwKKzB4MzQsMHg0NCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgMHg3QSwweDkwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHg2QSwweDAwLCAweEVFLDB4MDAsIDB4MzMsMHhGOSwgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg1QSwweDAwLCAweEUwLDB4MDAsCisweDM0LDB4MDAsIDB4RjcsMHgwNSwgMHg3QSwweDkwLCAweEM1LDB4QjgsIDB4MDAsMHgwMCwgMHhGMCwweDA1LCAweDdBLDB4OTAsIDB4RjYsMHg4NCwKKzB4N0EsMHg4OCwgMHhGNywweDA2LCAweDdBLDB4MjgsIDB4NzYsMHgzNSwgMHgwMCwweDAzLCAweEE3LDB4MzIsIDB4NzAsMHgwMiwgMHgwNiwweEI0LAorMHgwMCwweDAxLCAweDk3LDB4MTYsIDB4RkYsMHhFQywgMHg4NCwweEE2LCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3QSwweDJDLCAweEYzLDB4MDQsCisweDdBLDB4OTgsIDB4OTQsMHg4MiwgMHhGRiwweDNDLCAweDkzLDB4MDIsIDB4RkYsMHg0MCwgMHg5NSwweDgyLCAweEZGLDB4NDQsIDB4QjUsMHhCMiwKKzB4NzAsMHgwMiwgMHhGNywweDA0LCAweDdBLDB4OTgsIDB4RjYsMHg4NSwgMHg3QSwweDg4LCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHhGNywweDA1LAorMHg3QSwweDk4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwKKzB4MDAsMHgyMCwgMHhGNSwweDg0LCAweDdBLDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMSwgMHhFNiwweDAwLAorMHgzNywweDZDLCAweEY1LDB4ODUsIDB4N0EsMHhBMCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjYsMHgwNCwgMHgzMiwweEM4LCAweEY3LDB4MDUsCisweDdBLDB4NzAsIDB4RjcsMHgwNCwgMHgzMiwweEM0LCAweEY2LDB4ODQsIDB4MzIsMHhDMCwgMHhGNiwweDA1LCAweDdBLDB4MkMsIDB4OTAsMHgwMiwKKzB4RkYsMHg4MCwgMHg5MCwweDAyLCAweEZGLDB4MzgsIDB4RjUsMHg4NCwgMHg3QSwweDI4LCAweDA3LDB4MzgsIDB4MDAsMHgyNCwgMHg5NSwweDgyLAorMHhGRiwweDNDLCAweDk3LDB4MDIsIDB4RkYsMHg0MCwgMHg5NiwweDAyLCAweEZGLDB4NDQsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDk3LDB4MzYsIDB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgxNCwweDE4LCAweDg3LDB4MzYsIDB4MTQsMHgxOCwgMHhGMCwweDA1LAorMHg2RiwweDUwLCAweEY3LDB4MDQsIDB4MzIsMHhCOCwgMHg5NSwweDk2LCAweEZGLDB4RjQsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweEY3LDB4MDUsCisweDMyLDB4QjgsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweEY0LDB4ODYsIDB4MkYsMHhGOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4MzIsMHhCQywgMHhGNywweDA0LCAweDMyLDB4QkMsIDB4RjQsMHg4NSwgMHgzMiwweEQ0LCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDMCwweDdFLAorMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4MzUsMHgxQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsCisweDM1LDB4MEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDNywweDdDLCAweDc0LDB4MDAsIDB4MjAsMHgzQSwKKzB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDNCLDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhFNCwgMHhGRiwweDgyLAorMHgwMCwweDEwLCAweEY1LDB4ODQsIDB4NkYsMHg1OCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsCisweDM1LDB4NzgsIDB4RjcsMHgwNSwgMHgzMiwweEU0LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLAorMHgzNSwweDZDLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjQsMHg4MiwgMHgwMCwweDIyLCAweEUwLDB4MDAsCisweDM1LDB4N0MsIDB4RjQsMHg4NSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MCwweDJFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4MzYsMHhBOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwgMHhGRiwweDM4LCAweDA0LDB4QUMsCisweDBFLDB4RjQsIDB4OTQsMHg5NiwgMHhGRiwweEVDLCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwKKzB4RkYsMHhEQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LAorMHhGRiwweERDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDM2LDB4NjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MkUsCisweDBFLDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDM2LDB4MDEsIDB4RjQsMHg4MiwKKzB4MDAsMHg0QywgMHg4NywweDJFLCAweDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLAorMHgwRiwweDAwLCAweDg3LDB4MkUsIDB4MEYsMHgwMCwgMHhFMCwweDAwLCAweDM2LDB4NjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsCisweEZGLDB4RkMsIDB4RjQsMHg4NiwgMHg3QSwweDI4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwKKzB4NjAsMHgwMCwgMHg3NywweDM1LCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHhFQywgMHhDNywweDM4LAorMHg2MCwweDAwLCAweEM3LDB4MzgsIDB4NDgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsCisweEZGLDB4REMsIDB4OTYsMHgxNiwgMHhGRiwweEQ4LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHg4NiwweDE2LCAweEZGLDB4RDgsIDB4ODUsMHg5NiwgMHhGRiwweERDLCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDExLCAweEU2LDB4MDAsIDB4MzYsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDk2LDB4MkUsCisweDBFLDB4RjgsIDB4RjcsMHgwNCwgMHgzMiwweEMwLCAweEY0LDB4ODYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMCwKKzB4MzYsMHhBOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LAorMHgwMCwweDFFLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDM2LDB4QTksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsCisweDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzYsMHhFNSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwKKzB4MDAsMHgwQSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzNiwweEU0LCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsCisweDZBLDB4MDAsIDB4RTYsMHgwMCwgMHgzNywweDAwLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwKKzB4NzEsMHhENCwgMHhGNywweDA0LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDNBLDB4QzEsIDB4RjcsMHgwNSwgMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNBLDB4NjEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNBLDB4NjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNBLDB4NjAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDNBLDB4QzQsIDB4RjQsMHg4NiwgMHgzMSwweDlDLCAweEYwLDB4MDUsIDB4N0EsMHg4OCwgMHg5MCwweDAyLAorMHhGRiwweDM4LCAweEYwLDB4MDUsIDB4NkYsMHg1MCwgMHg5MCwweDAyLCAweEZGLDB4ODAsIDB4RjcsMHgwNCwgMHgzMiwweEM0LCAweEY0LDB4ODYsCisweDMyLDB4MjgsIDB4RjQsMHg4NSwgMHgzMiwweEQ0LCAweEY2LDB4MDQsIDB4MzIsMHhDOCwgMHhGNiwweDg0LCAweDdBLDB4MkMsIDB4RjUsMHgwMiwKKzB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4RjcsMHgwNSwgMHg3QSwweDk4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgzNywweEJELCAweEY2LDB4MDUsIDB4N0EsMHg5MCwgMHhDMCwweDJBLCAweDVBLDB4MDAsIDB4RTYsMHgwMCwgMHgzQiwweDA4LCAweEMwLDB4MzIsCisweDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzQiwweDA5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDM2LCAweDE0LDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg5NywweDM2LAorMHgxNCwweDEwLCAweDg3LDB4MzYsIDB4MTQsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDE0LDB4MTgsIDB4ODcsMHgzNiwgMHgxNCwweDE4LCAweEY3LDB4MDQsIDB4MzIsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHhGNywweDA1LCAweDMyLDB4QjgsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzIsMHhCQywgMHhGNywweDA0LCAweDMyLDB4QkMsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDM4LDB4MkQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDM4LDB4MzAsIDB4RjcsMHgwNSwgMHgzMiwweEUwLCAweEY1LDB4MDUsIDB4N0EsMHg3MCwgMHhGNSwweDg0LAorMHg2RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwgMHgzOCwweDc0LCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4MzgsMHg2OCwgMHhCNSwweEJBLAorMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNCwweDgyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwgMHgzOCwweDc4LCAweEY0LDB4ODUsCisweDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY1LDB4ODQsIDB4MzIsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTAsMHgyRSwKKzB4MDAsMHgwNCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMiwgMHhFNiwweDAwLAorMHgzOSwweEE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDAyLCAweEZGLDB4MzgsIDB4MDQsMHhBQywgMHgwRSwweEY0LCAweDk0LDB4OTYsCisweEZGLDB4RTQsIDB4RjcsMHgwNSwgMHg3QSwweDY4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4REMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDQzLDB4QTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhEQywgMHgyMCwweDIyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4MzksMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgyRSwgMHgwRSwweEY4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDEwLCAweEUyLDB4MDAsIDB4MzgsMHhGRCwgMHhGNCwweDgyLCAweDAwLDB4NEMsIDB4ODcsMHgyRSwKKzB4MEYsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MkUsIDB4MEYsMHgwMCwgMHg4NywweDJFLAorMHgwRiwweDAwLCAweEUwLDB4MDAsIDB4MzksMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4ODYsCisweDdBLDB4MjgsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwKKzB4MDAsMHgwNCwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4ODQsMHg5NiwgMHhGRiwweEU0LCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHhDNywweDM4LAorMHg0OCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweERDLCAweDk2LDB4MTYsCisweEZGLDB4RDgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjYsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwKKzB4RkYsMHhEOCwgMHg4NSwweDk2LCAweEZGLDB4REMsIDB4MDYsMHgzMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMSwgMHhFNiwweDAwLAorMHgzOSwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4OTYsMHgyRSwgMHgwRSwweEY4LCAweEY3LDB4MDQsCisweDMyLDB4QzAsIDB4RjQsMHg4NiwgMHhFMCwweDMwLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDM5LDB4QTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweEUwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjgsIDB4MDAsMHgxRSwgMHg3MCwweDNFLAorMHhGRiwweEUxLCAweEU2LDB4MDAsIDB4MzksMHhBNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsCisweDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwKKzB4NzksMHhDOCwgMHhGNywweDA0LCAweDcxLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgzOSwweEUxLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MEEsIDB4MjAsMHgzMiwKKzB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDM5LDB4RTAsIDB4QjQsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LAorMHg3MSwweEQ0LCAweEY2LDB4ODQsIDB4NzEsMHhDQywgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEU2LDB4MDAsCisweDM5LDB4RkMsIDB4RjcsMHgwNSwgMHg3MSwweEQ0LCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4RDQsIDB4RjcsMHgwNCwKKzB4NzEsMHhEMCwgMHhGMCwweDA1LCAweDcxLDB4QzQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhGNiwweDg0LAorMHgzMiwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHgzQSwweEMxLCAweEY3LDB4MDUsCisweDcxLDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4M0EsMHg2MSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0EsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0EsMHhCOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4NCwKKzB4NzYsMHhGOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4M0EsMHhBQywgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNBLDB4OTgsIDB4QjUsMHhCQSwKKzB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjQsMHg4MiwgMHgwMCwweDIyLCAweEY0LDB4ODUsIDB4NzYsMHhGOCwgMHhGNCwweDg0LAorMHg3NywweDAwLCAweEUwLDB4MDAsIDB4M0EsMHhCMCwgMHhGNCwweDg1LCAweDc2LDB4RkMsIDB4RjAsMHgwNSwgMHg3NiwweEZDLCAweEUwLDB4MDAsCisweDNBLDB4QzAsIDB4RjAsMHgwNSwgMHg3QSwweDc4LCAweEUwLDB4MDAsIDB4M0EsMHhDNCwgMHhGNCwweDg2LCAweDMxLDB4OUMsIDB4RjQsMHg4NiwKKzB4MkUsMHhFMCwgMHhGNCwweDg1LCAweDMyLDB4RDQsIDB4RjcsMHgwNCwgMHg3MSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0IsMHg3MCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwKKzB4MDAsMHgwOSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzQiwweDcwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhFMCwweDAwLAorMHgzQiwweDcwLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LCAweDdBLDB4OTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsCisweDZBLDB4MDAsIDB4RUUsMHgwMCwgMHgzQiwweDI5LCAweEM1LDB4QjQsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDVBLDB4MDAsIDB4RTAsMHgwMCwKKzB4M0IsMHgzMCwgMHhGNywweDA1LCAweDdBLDB4OTAsIDB4QzUsMHhCOCwgMHgwMCwweDAwLCAweEYwLDB4MDUsIDB4N0EsMHg5MCwgMHhGNywweDA0LAorMHg3QSwweDg4LCAweEY2LDB4ODYsIDB4N0EsMHgyOCwgMHg3NiwweDM5LCAweDAwLDB4MDMsIDB4QTYsMHhCMiwgMHg2OCwweDAyLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3QSwweDg4LCAweEY3LDB4MDQsIDB4N0EsMHg5OCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4OTYsMHg4MiwKKzB4RkYsMHgzQywgMHhGNCwweDg0LCAweDdBLDB4OTgsIDB4RjYsMHg4NiwgMHg3QSwweDJDLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHg5NCwweDgyLAorMHhGRiwweDQwLCAweDk1LDB4ODIsIDB4RkYsMHg0NCwgMHhCNSwweEIyLCAweDY4LDB4MDIsIDB4RjcsMHgwNSwgMHg3QSwweDk4LCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgxOCwgMHhGNSwweDA0LAorMHg3QSwweDg4LCAweEY3LDB4MDYsIDB4N0EsMHgyQywgMHhGNSwweDg0LCAweDdBLDB4OTAsIDB4NzYsMHhBOSwgMHgwMCwweDAzLCAweEE2LDB4QjYsCisweDcwLDB4MDIsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0IsMHhDRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4N0EsMHhBMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgyQSwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4M0YsMHgxOCwgMHhDMCwweDJFLAorMHg2QSwweDAwLCAweEVFLDB4MDAsIDB4M0YsMHgxOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzMiwweEMwLCAweEY2LDB4MDQsCisweDMyLDB4QzgsIDB4ODcsMHgzNiwgMHgxNCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4OTcsMHgzNiwKKzB4MTQsMHgxMCwgMHg4NywweDM2LCAweDE0LDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LAorMHgxNCwweDE4LCAweDg3LDB4MzYsIDB4MTQsMHgxOCwgMHhGNywweDA0LCAweDMyLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsCisweDYwLDB4MDAsIDB4RjcsMHgwNSwgMHgzMiwweEI4LCAweEY3LDB4MDQsIDB4MzIsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDMyLDB4QkMsIDB4RjcsMHgwNCwgMHgzMiwweEJDLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHgzQywweDNELCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDMyLDB4RTAsIDB4RjYsMHg4NSwgMHg3QSwweDcwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHgzQywweDQwLCAweEY3LDB4MDUsIDB4MzIsMHhFMCwgMHhGNSwweDA1LCAweDdBLDB4NzAsIDB4RjUsMHg4NCwKKzB4NkYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4M0MsMHg4NCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNDLDB4NzgsIDB4QjUsMHhCQSwKKzB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjQsMHg4MiwgMHgwMCwweDIyLCAweEUwLDB4MDAsIDB4M0MsMHg4OCwgMHhGNCwweDg1LAorMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkwLDB4MkUsCisweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwKKzB4M0QsMHhCNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwgMHhGRiwweDM4LCAweDA0LDB4QUMsIDB4MEUsMHhGNCwgMHg5NCwweDk2LAorMHhGRiwweEVDLCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweEU0LCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RTQsIDB4MjAsMHgyMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNELDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MkUsIDB4MEUsMHhGOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDNELDB4MEQsIDB4RjQsMHg4MiwgMHgwMCwweDRDLCAweDg3LDB4MkUsCisweDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwKKzB4MEYsMHgwMCwgMHhFMCwweDAwLCAweDNELDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDg2LAorMHg3QSwweDI4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsCisweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHhFQywgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwKKzB4NDgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhFNCwgMHg5NiwweDE2LAorMHhGRiwweEUwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsCisweEZGLDB4RTAsIDB4ODUsMHg5NiwgMHhGRiwweEU0LCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwKKzB4M0QsMHg2QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDk2LDB4MkUsIDB4MEUsMHhGOCwgMHhGNywweDA0LAorMHgzMiwweEMwLCAweEY0LDB4ODYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMCwgMHgzRCwweEI0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwKKzB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDNELDB4QjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LAorMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsCisweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4M0QsMHhGMSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwgMHgwMCwweDBBLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzRCwweEYwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwKKzB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLAorMHgzRSwweDBDLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweEQ0LCAweEY3LDB4MDQsCisweDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwKKzB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4M0UsMHhEMSwgMHhGNywweDA1LAorMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDNFLDB4NzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNFLDB4NzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNFLDB4QzksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODQsCisweDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDNFLDB4QkMsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LAorMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHgzRSwweEE4LCAweEI1LDB4QkEsCisweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhGNCwweDg1LCAweDc2LDB4RjgsIDB4RjQsMHg4NCwKKzB4NzcsMHgwMCwgMHhFMCwweDAwLCAweDNFLDB4QzAsIDB4RjQsMHg4NSwgMHg3NiwweEZDLCAweEYwLDB4MDUsIDB4NzYsMHhGQywgMHhFMCwweDAwLAorMHgzRSwweEQwLCAweEYwLDB4MDUsIDB4N0EsMHg3OCwgMHhFMCwweDAwLCAweDNFLDB4RDQsIDB4RjQsMHg4NiwgMHgzMSwweDlDLCAweEY0LDB4ODYsCisweDJFLDB4RTAsIDB4RjQsMHg4NSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDNGLDB4ODAsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY0LDB4ODIsCisweDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4M0YsMHg4MCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwKKzB4M0YsMHg4MCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgMHg3QSwweDkwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHg2QSwweDAwLCAweEVFLDB4MDAsIDB4M0YsMHgzOSwgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg1QSwweDAwLCAweEUwLDB4MDAsCisweDNGLDB4NDAsIDB4RjcsMHgwNSwgMHg3QSwweDkwLCAweEM1LDB4QjgsIDB4MDAsMHgwMCwgMHhGMCwweDA1LCAweDdBLDB4OTAsIDB4RjcsMHgwNCwKKzB4N0EsMHg4OCwgMHhGNiwweDg2LCAweDdBLDB4MjgsIDB4NzYsMHgzOSwgMHgwMCwweDAzLCAweEE2LDB4QjIsIDB4NjgsMHgwMiwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4N0EsMHg4OCwgMHhGNywweDA0LCAweDdBLDB4OTgsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDk2LDB4ODIsCisweEZGLDB4M0MsIDB4RjQsMHg4NCwgMHg3QSwweDk4LCAweEY2LDB4ODYsIDB4N0EsMHgyQywgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4OTQsMHg4MiwKKzB4RkYsMHg0MCwgMHg5NSwweDgyLCAweEZGLDB4NDQsIDB4QjUsMHhCMiwgMHg2OCwweDAyLCAweEY3LDB4MDUsIDB4N0EsMHg5OCwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTAsIDB4RjUsMHg4NCwKKzB4NkYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4M0YsMHhFNCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDNGLDB4RDgsIDB4QjUsMHhCQSwKKzB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwgMHgwMCwweDIyLCAweEUwLDB4MDAsIDB4M0YsMHhFOCwgMHhGNSwweDA1LAorMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNSwweDg0LCAweDMyLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkwLDB4MkUsCisweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwKKzB4NDEsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwgMHhGRiwweDM4LCAweDA1LDB4MkMsIDB4MEUsMHhGNCwgMHg5NSwweDE2LAorMHhGRiwweEY0LCAweEY3LDB4MDUsIDB4N0EsMHg2OCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5NiwgMHhGRiwweEVDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg0MywweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RUMsIDB4MjAsMHgyMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQwLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MkUsIDB4MEUsMHhGOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDQwLDB4NkQsIDB4RjUsMHgwMiwgMHgwMCwweDRDLCAweDg3LDB4MkUsCisweDBGLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDBGLDB4MDAsIDB4ODcsMHgyRSwKKzB4MEYsMHgwMCwgMHhFMCwweDAwLCAweDQwLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LAorMHg3QSwweDI4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsCisweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDg1LDB4MTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4QzcsMHgzOCwKKzB4NTAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhFQywgMHg5NiwweDE2LAorMHhGRiwweEU4LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsCisweEZGLDB4RTgsIDB4ODUsMHg5NiwgMHhGRiwweEVDLCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MTEsIDB4RTYsMHgwMCwKKzB4NDAsMHhDQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDk2LDB4MkUsIDB4MEUsMHhGOCwgMHhGNywweDA0LAorMHgzMiwweEMwLCAweEY1LDB4MDYsIDB4RTAsMHgzMCwgMHhDMCwweDNBLCAweDUyLDB4MDAsIDB4RTYsMHgwMCwgMHg0MSwweDE0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUUsIDB4NzAsMHgzRSwKKzB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDQxLDB4MTUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LAorMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsCisweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3MSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NDEsMHg1MSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgMHgwMCwweDBBLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg0MSwweDUwLCAweEI1LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwKKzB4NzEsMHhENCwgMHhGNiwweDg0LCAweDcxLDB4Q0MsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLAorMHg0MSwweDZDLCAweEY3LDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDQsIDB4RjYsMHg4NCwgMHg3MSwweEQ0LCAweEY3LDB4MDQsCisweDcxLDB4RDAsIDB4RjAsMHgwNSwgMHg3MSwweEM0LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwKKzB4MzIsMHhEMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDIsMHgzMSwgMHhGNywweDA1LAorMHg3MSwweEM4LCAweEY3LDB4MDQsIDB4NzEsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDQxLDB4RDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQxLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQyLDB4MjksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODQsCisweDc2LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDQyLDB4MUMsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LAorMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg0MiwweDA4LCAweEI1LDB4QkEsCisweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsIDB4MDAsMHgyMiwgMHhGNSwweDA1LCAweDc2LDB4RjgsIDB4RjUsMHgwNCwKKzB4NzcsMHgwMCwgMHhFMCwweDAwLCAweDQyLDB4MjAsIDB4RjUsMHgwNSwgMHg3NiwweEZDLCAweEYwLDB4MDUsIDB4NzYsMHhGQywgMHhFMCwweDAwLAorMHg0MiwweDMwLCAweEYwLDB4MDUsIDB4N0EsMHg3OCwgMHhFMCwweDAwLCAweDQyLDB4MzQsIDB4RjUsMHgwNiwgMHgzMSwweDlDLCAweEY1LDB4MDYsCisweDJFLDB4RTAsIDB4RjUsMHgwNSwgMHgzMiwweEQ0LCAweEY3LDB4MDQsIDB4NzEsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQyLDB4NzQsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY1LDB4MDIsCisweDAwLDB4MDksIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NDIsMHg3NCwgMHhCNSwweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwKKzB4MkQsMHgzOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsCisweDMyLDB4RDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkUsMHhFMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzIsMHhENCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MkYsMHg2QywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzIsMHhENCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MkYsMHhGOCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzIsMHhENCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMCwweDg0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MzIsMHhENCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMSwweDEwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMiwweEQ0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMSwweDlDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMiwweEQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHgzMiwweDI4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NywweDE2LAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ0LDB4MEMsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MkUsCisweDAwLDB4MDAsIDB4ODYsMHhBRSwgMHgwMCwweDA0LCAweDIwLDB4MzIsIDB4MDAsMHgxMCwgMHhFMiwweDAwLCAweDQzLDB4RDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MTAsIDB4RTIsMHgwMCwgMHg0MywweEVELCAweDA3LDB4MzQsIDB4MDAsMHgwMSwgMHg4NywweDJFLAorMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgyRSwgMHgwMCwweDBDLCAweDg3LDB4MkUsCisweDAwLDB4MEMsIDB4RTAsMHgwMCwgMHg0NCwweDE0LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDYyLDB4MDAsIDB4RTYsMHgwMCwKKzB4NDQsMHgxMSwgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzNiwgMHgwMCwweDEwLCAweEU2LDB4MDAsIDB4NDQsMHgxNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDQ0LDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4MDIsCisweDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDAyLAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzUsMHgyNCwgMHhGNywweDA0LCAweDZGLDB4NDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsCisweDM1LDB4MjgsIDB4RjcsMHgwNiwgMHgzMiwweEY0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM1LDB4MzAsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLAorMHg0NSwweDA0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MEQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDMyLDB4RjQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDAyLCAweDRBLDB4MDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MDAsMHgwRiwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzMsMHg4MCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4NEUsMHhFQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwKKzB4MDAsMHgwOCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNCwweDBDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwMiwgMHg1NywweDY0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwMiwgMHgwMCwweDA3LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM0LDB4OTgsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwKKzB4NzUsMHhGOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDUsMHgyRCwgMHhGNiwweDg2LAorMHg3NSwweEY4LCAweEUwLDB4MDAsIDB4NDUsMHg0NCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0NSwweDVDLCAweEY3LDB4MDUsIDB4MzUsMHg0OCwgMHhGNCwweDg2LAorMHgzMywweDgwLCAweEUwLDB4MDAsIDB4NDksMHhGMCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjcsMHgwNCwgMHg2RiwweDU0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDUsMHg4MCwgMHhGNCwweDgyLCAweDAwLDB4MDgsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMSwgMHhGNCwweDg1LCAweDZGLDB4NTQsIDB4RTAsMHgwMCwgMHg0NSwweDg4LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNCwweDg1LAorMHg2RiwweDU4LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0NSwweEEwLCAweEY0LDB4ODIsCisweDAwLDB4MDQsIDB4RjQsMHg4NiwgMHgzNCwweDBDLCAweEUwLDB4MDAsIDB4NDksMHhGMCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjYsMHg4NCwKKzB4MzUsMHg0OCwgMHhGNiwweDA0LCAweDM1LDB4MkMsIDB4RjQsMHhCNywgMHgyOCwweDAwLCAweDA3LDB4MzQsIDB4MDAsMHgwMiwgMHhGNCwweDgyLAorMHgwMCwweDAxLCAweEY0LDB4QkIsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4OEMsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDAwLDB4MTgsIDB4ODcsMHgzMiwgMHgwMCwweDkwLCAweEY0LDB4ODUsIDB4NkYsMHg1MCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4ODQsMHhCMiwKKzB4MDAsMHg4NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhCNiwgMHgwMCwweDEwLCAweDg0LDB4QjIsIDB4MDAsMHg4OCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDk0LDB4QjYsIDB4MDAsMHgxNCwgMHg4NCwweEI2LCAweDAwLDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QjYsCisweDAwLDB4MDgsIDB4ODQsMHhCNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDAwLDB4MEMsIDB4ODQsMHhCMiwKKzB4MDAsMHg5OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjQsMHg4NSwgMHgzNSwweDU0LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHg5NCwweDgyLAorMHhGRiwweDgwLCAweEY1LDB4MDQsIDB4MzUsMHg1NCwgMHhGNCwweDg2LCAweDM0LDB4OTgsIDB4RjQsMHg4NSwgMHgzNSwweDMwLCAweDk1LDB4MDIsCisweEZGLDB4MzgsIDB4ODUsMHhCMiwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgyNCwgMHg5NSwweDgyLCAweEZGLDB4M0MsIDB4OTYsMHg4MiwKKzB4RkYsMHg0MCwgMHg4NywweDMyLCAweDAwLDB4MDQsIDB4RjYsMHg4NSwgMHgzNSwweDUwLCAweDk3LDB4MDIsIDB4RkYsMHg0NCwgMHg4NiwweEIyLAorMHgwMCwweDA0LCAweEYwLDB4MDUsIDB4MzUsMHg0QywgMHhGNywweDA0LCAweDM1LDB4NDAsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDk1LDB4OTYsCisweEZGLDB4RjQsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweEY3LDB4MDUsIDB4MzUsMHg0MCwgMHhGNSwweDg0LCAweDM1LDB4MjgsIDB4ODYsMHhCMiwKKzB4MDAsMHgwNCwgMHg4NywweDJFLCAweDE0LDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg5NywweDJFLAorMHgxNCwweDE0LCAweDg3LDB4MzIsIDB4MDAsMHg4MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweEVFLDB4MDAsCisweDQ5LDB4RjAsIDB4RjcsMHgwNiwgMHgwQywweDNFLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDQ2LDB4QTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDdFLCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgMHg0NiwweDk1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA2LAorMHgwQywweDNFLCAweEM3LDB4N0MsIDB4NzQsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwgMHg0OSwweEYwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RkYsMHg4MiwgMHgwMCwweDEwLCAweDg2LDB4ODIsIDB4RkYsMHgzOCwgMHhGNywweDA0LCAweDM1LDB4NTgsIDB4RjUsMHg4NCwKKzB4NkYsMHg1OCwgMHhGNiwweDg1LCAweDM1LDB4NTQsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLAorMHg0NywweDA4LCAweEY3LDB4MDUsIDB4MzUsMHg1OCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4NDYsMHhGQywgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLAorMHg0NywweDBDLCAweEY0LDB4ODUsIDB4NkYsMHg1OCwgMHhGMCwweDA1LCAweDZGLDB4NTQsIDB4RjYsMHg4NCwgMHgzNSwweDJDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDk0LCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMCwKKzB4NDcsMHg3MSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHgzNiwgMHgwMCwweDk0LCAweEY2LDB4ODQsIDB4MzUsMHg1NCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHhGNywweDA0LCAweDM1LDB4NTQsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDQ3LDB4MzksCisweDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNywweDA0LCAweDM1LDB4NDgsIDB4NzcsMHhCNCwKKzB4MDAsMHgwRiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4MDcsMHgzOCwgMHgwMCwweDI0LCAweEU2LDB4MDAsIDB4NDcsMHg2OSwgMHhDNiwweDM4LAorMHg2MCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHhDNywweDA0LCAweDZFLDB4MDAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY2LDB4ODQsCisweDM1LDB4NDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDQ3LDB4QkQsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDAwLDB4MEMsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweEUwLDB4MDAsCisweDQ3LDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4MzUsMHgyOCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDQ5LDB4NjgsIDB4RjcsMHgwNSwgMHgzNSwweDQ0LCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLAorMHg0NywweENDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4OTcsMHgzNiwgMHgwMCwweDA0LCAweEY3LDB4MDQsCisweDM1LDB4M0MsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDM1LDB4M0MsIDB4RjcsMHgwNCwKKzB4MzUsMHgzQywgMHg4NywweDM2LCAweDE0LDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LAorMHgxNCwweDFDLCAweEY3LDB4MDQsIDB4NzYsMHgwNCwgMHg4NiwweEI2LCAweDE0LDB4MUMsIDB4RjYsMHgwNCwgMHg3NSwweEZDLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHg4NCwgMHg3NiwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwKKzB4NDgsMHgxQywgMHhGNywweDA1LCAweDc2LDB4MDQsIDB4RjAsMHgwNSwgMHg3NiwweDA0LCAweEY2LDB4ODQsIDB4NzYsMHgwNCwgMHhGNywweDA0LAorMHg3NiwweDA4LCAweEYwLDB4MDUsIDB4NzUsMHhGQywgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0OCwweDgxLCAweEY3LDB4MDUsIDB4NzUsMHhGOCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjQsMHg4NiwKKzB4NzIsMHgxOCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg0OCwweDgxLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwKKzB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDQ4LDB4ODAsIDB4QjQsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNSwweDAyLAorMHgwMCwweDAwLCAweDIwLDB4MkEsIDB4MDAsMHgwMiwgMHhFRSwweDAwLCAweDQ5LDB4NjgsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweEY2LDB4ODQsCisweDM1LDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMiwgMHhFNiwweDAwLCAweDQ5LDB4M0MsIDB4MDUsMHhCNCwgMHgwMCwweDA4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDE2LAorMHhGRiwweEVDLCAweDk1LDB4OTYsIDB4RkYsMHhFOCwgMHg5NiwweDk2LCAweEZGLDB4RTQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDVFLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhFQywgMHg4NSwweDk2LCAweEZGLDB4RTgsIDB4ODYsMHg5NiwKKzB4RkYsMHhFNCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0OSwweDJDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LAorMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg0OSwweDExLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwKKzB4MDAsMHgxNCwgMHg4NywweDM2LCAweDAwLDB4MTQsIDB4RTAsMHgwMCwgMHg0OSwweDJDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHg3NywweDM1LCAweDAwLDB4MDUsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweEM3LDB4MzgsCisweDYwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDEwLCAweEM3LDB4MkMsIDB4NzAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NDcsMHhBOCwgMHhGNywweDA1LCAweDM1LDB4MkMsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweEY3LDB4MDQsIDB4NkYsMHg0QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDQ5LDB4NUMsIDB4MDcsMHgzNCwgMHgxNCwweDk0LCAweEY0LDB4ODQsCisweDZGLDB4NDQsIDB4RTAsMHgwMCwgMHg0OSwweDYwLCAweEY0LDB4ODUsIDB4MzUsMHgyOCwgMHhGNywweDA1LCAweDM1LDB4MjgsIDB4RTAsMHgwMCwKKzB4NDgsMHg4NCwgMHgwNSwweDI4LCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NDksMHhBMSwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgwRCwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4NDksMHhBOCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgMHg0OSwweEE4LCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNCwweDgyLAorMHgwMCwweDAxLCAweEY0LDB4ODUsIDB4MzUsMHgyNCwgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDQ0LCAweEY0LDB4ODYsCisweDMyLDB4RjQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NDksMHhGMCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjcsMHgwNCwKKzB4RTAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhCOCwgMHgwMCwweDFGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLAorMHg0OSwweEYxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwRiwweDgxLCAweDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE0LCAweEY3LDB4MDQsCisweDc1LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRBLDB4MkQsIDB4RjYsMHg4NiwKKzB4NzUsMHhGOCwgMHhFMCwweDAwLCAweDRBLDB4NDAsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NzYsMHgwNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4ODYsMHhCQSwgMHgwMCwweDE4LCAweEY3LDB4MDQsCisweDZGLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRBLDB4NjQsIDB4RjYsMHg4NSwKKzB4MzUsMHg0OCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjQsMHg4NSwgMHg2RiwweDU0LCAweEUwLDB4MDAsIDB4NEEsMHg3MCwgMHhGNywweDAyLAorMHgwMCwweDAxLCAweEY0LDB4ODIsIDB4MDAsMHgwOCwgMHhGNCwweDg1LCAweDZGLDB4NTgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0QSwweDg4LCAweEY0LDB4ODIsIDB4MDAsMHgwNCwgMHhGNCwweDg2LCAweDM0LDB4MEMsIDB4RTAsMHgwMCwKKzB4NEUsMHhEOCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjYsMHg4NCwgMHgzNSwweDQ4LCAweEY2LDB4MDQsIDB4MzUsMHgyQywgMHhGNCwweEI3LAorMHgyOCwweDAwLCAweDA3LDB4MzQsIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjQsMHhCQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsCisweDAwLDB4OEMsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgxOCwgMHg4NywweDMyLCAweDAwLDB4OTAsIDB4RjQsMHg4NSwKKzB4NkYsMHg1MCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4ODQsMHhCMiwgMHgwMCwweDg0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LAorMHgwMCwweDEwLCAweDg0LDB4QjIsIDB4MDAsMHg4OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhCNiwgMHgwMCwweDE0LCAweDg0LDB4QjYsCisweDAwLDB4MTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QjYsIDB4MDAsMHgwOCwgMHg4NCwweEI2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDAwLDB4MEMsIDB4ODQsMHhCMiwgMHgwMCwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDg1LAorMHgzNSwweDU0LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHg5NCwweDgyLCAweEZGLDB4ODAsIDB4RjUsMHgwNCwgMHgzNSwweDU0LCAweEY0LDB4ODYsCisweDM0LDB4OTgsIDB4RjQsMHg4NSwgMHgzNSwweDMwLCAweDk1LDB4MDIsIDB4RkYsMHgzOCwgMHg4NSwweEIyLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgyNCwgMHg5NSwweDgyLCAweEZGLDB4M0MsIDB4OTYsMHg4MiwgMHhGRiwweDQwLCAweDg3LDB4MzIsIDB4MDAsMHgwNCwgMHhGNiwweDg1LAorMHgzNSwweDUwLCAweDk3LDB4MDIsIDB4RkYsMHg0NCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjAsMHgwNSwgMHgzNSwweDRDLCAweEY3LDB4MDQsCisweDM1LDB4NDAsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDk1LDB4OTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4RjcsMHgwNSwKKzB4MzUsMHg0MCwgMHhGNSwweDg0LCAweDM1LDB4MjgsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MTQsMHgxNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg5NywweDJFLCAweDE0LDB4MTQsIDB4ODcsMHgzMiwgMHgwMCwweDgwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAxLCAweEVFLDB4MDAsIDB4NEUsMHhEOCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwKKzB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDRCLDB4OEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLAorMHg0QiwweDdELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsCisweDAwLDB4MTAsIDB4RTYsMHgwMCwgMHg0RSwweEQ4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGRiwweDgyLCAweDAwLDB4MTAsIDB4ODYsMHg4MiwKKzB4RkYsMHgzOCwgMHhGNywweDA0LCAweDM1LDB4NTgsIDB4RjUsMHg4NCwgMHg2RiwweDU4LCAweEY2LDB4ODUsIDB4MzUsMHg1NCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgyMSwgMHhFMiwweDAwLCAweDRCLDB4RjAsIDB4RjcsMHgwNSwgMHgzNSwweDU4LCAweEY3LDB4MDQsCisweDJELDB4MzgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwKKzB4MDAsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg0QiwweEU0LCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgyMiwgMHhFMCwweDAwLCAweDRCLDB4RjQsIDB4RjQsMHg4NSwgMHg2RiwweDU4LCAweEYwLDB4MDUsCisweDZGLDB4NTQsIDB4RjYsMHg4NCwgMHgzNSwweDJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4OTQsIDB4QzQsMHg4NCwKKzB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMCwgMHg0QywweDU5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDM2LAorMHgwMCwweDk0LCAweEY2LDB4ODQsIDB4MzUsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsCisweDM1LDB4NTQsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4QzYsMHhCNCwKKzB4NzAsMHgwMCwgMHhGNywweDA0LCAweDM1LDB4NDgsIDB4NzcsMHhCNCwgMHgwMCwweDBGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHgwNywweDM4LAorMHgwMCwweDI0LCAweEU2LDB4MDAsIDB4NEMsMHg1MSwgMHhDNiwweDM4LCAweDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsCisweDZFLDB4MDAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY2LDB4ODQsIDB4MzUsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwKKzB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDBGLCAweEUyLDB4MDAsIDB4NEMsMHhBNSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDAwLDB4MEMsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweEUwLDB4MDAsIDB4NEMsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4MzUsMHgyOCwgMHhGNiwweDgyLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NEUsMHg1MCwgMHhGNywweDA1LAorMHgzNSwweDQ0LCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDRDLDB4QjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsCisweDAwLDB4MDAsIDB4OTcsMHgzNiwgMHgwMCwweDA0LCAweEY3LDB4MDQsIDB4MzUsMHgzQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDM1LDB4M0MsIDB4RjcsMHgwNCwgMHgzNSwweDNDLCAweDg3LDB4MzYsIDB4MTQsMHgxQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsCisweDE0LDB4MUMsIDB4RjYsMHgwNCwgMHg3NSwweEZDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDc2LDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgMHg0RCwweDA0LCAweEY3LDB4MDUsIDB4NzYsMHgwNCwgMHhGMCwweDA1LAorMHg3NiwweDA0LCAweEY2LDB4ODQsIDB4NzYsMHgwNCwgMHhGNywweDA0LCAweDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRELDB4NjksIDB4RjcsMHgwNSwKKzB4NzUsMHhGOCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjQsMHg4NiwgMHg3MiwweDE4LCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDRELDB4NjksIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsCisweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwKKzB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NEQsMHg2OCwgMHhCNCwweEJBLAorMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsCisweDRFLDB4NTAsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4NEUsMHgyNCwgMHgwNSwweEI0LAorMHgwMCwweDA4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDE2LCAweEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsCisweEZGLDB4RTQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NUUsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwKKzB4RkYsMHhFQywgMHg4NSwweDk2LCAweEZGLDB4RTgsIDB4ODYsMHg5NiwgMHhGRiwweEU0LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg0RSwweDE0LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsCisweDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg0RCwweEY5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgwMCwweDE0LCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHhFMCwweDAwLAorMHg0RSwweDE0LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsCisweDAwLDB4MDUsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4QzcsMHgyQywKKzB4NzAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg0QywweDkwLCAweEY3LDB4MDUsIDB4MzUsMHgyQywgMHhGNiwweDg0LAorMHgzNSwweDI4LCAweEY3LDB4MDQsIDB4NkYsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweDRFLDB4NDQsIDB4MDcsMHgzNCwgMHgxNCwweDk0LCAweEY0LDB4ODQsIDB4NkYsMHg0NCwgMHhFMCwweDAwLCAweDRFLDB4NDgsIDB4RjQsMHg4NSwKKzB4MzUsMHgyOCwgMHhGNywweDA1LCAweDM1LDB4MjgsIDB4RTAsMHgwMCwgMHg0RCwweDZDLCAweDA1LDB4MjgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NEUsMHg4OSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjQsMHg4MiwKKzB4MDAsMHgwRCwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg0RSwweDkwLCAweEI0LDB4QkEsIDB4NjgsMHgwMiwgMHhFMCwweDAwLAorMHg0RSwweDkwLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjQsMHg4NSwgMHgzNSwweDI0LCAweEY2LDB4ODQsCisweDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDQ0LCAweEY0LDB4ODYsIDB4MzIsMHhGNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwKKzB4NEUsMHhEOCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4RjcsMHgwNCwgMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LAorMHgwMCwweDFGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLCAweDRFLDB4RDksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsCisweDQwLDB4MDAsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4NzksMHhDOCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE0LCAweEY2LDB4ODQsIDB4MzUsMHg0OCwgMHhGNiwweDA0LCAweDM1LDB4MkMsIDB4RjQsMHg4MiwKKzB4MDAsMHgwNCwgMHhGNCwweEI3LCAweDI4LDB4MDAsIDB4MDcsMHgzNCwgMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweEJCLAorMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHg4QywgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgwMCwweDE4LCAweDg3LDB4MzIsCisweDAwLDB4OTAsIDB4RjQsMHg4NSwgMHg2RiwweDUwLCAweDk3LDB4MzYsIDB4MDAsMHgwNCwgMHg4NCwweEIyLCAweDAwLDB4ODQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDAwLDB4MTAsIDB4ODQsMHhCMiwgMHgwMCwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LAorMHgwMCwweDE0LCAweDg0LDB4QjYsIDB4MDAsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHhCNiwgMHgwMCwweDA4LCAweDg0LDB4QjYsCisweDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4QjYsIDB4MDAsMHgwQywgMHg4NCwweEIyLCAweDAwLDB4OTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNCwweDg1LCAweDM1LDB4NTQsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweDk0LDB4ODIsIDB4RkYsMHg4MCwgMHhGNSwweDA0LAorMHgzNSwweDU0LCAweEY0LDB4ODYsIDB4MzQsMHg5OCwgMHhGNCwweDg1LCAweDM1LDB4MzAsIDB4OTUsMHgwMiwgMHhGRiwweDM4LCAweDg1LDB4QjIsCisweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDI0LCAweDk1LDB4ODIsIDB4RkYsMHgzQywgMHg5NiwweDgyLCAweEZGLDB4NDAsIDB4ODcsMHgzMiwKKzB4MDAsMHgwNCwgMHhGNiwweDg1LCAweDM1LDB4NTAsIDB4OTcsMHgwMiwgMHhGRiwweDQ0LCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHhGMCwweDA1LAorMHgzNSwweDRDLCAweEY3LDB4MDQsIDB4MzUsMHg0MCwgMHg5NSwweDE2LCAweEZGLDB4RjQsIDB4OTUsMHg5NiwgMHhGRiwweEY0LCAweEM3LDB4MzgsCisweDY4LDB4MDAsIDB4RjcsMHgwNSwgMHgzNSwweDQwLCAweEY1LDB4ODQsIDB4MzUsMHgyOCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwKKzB4MTQsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDk3LDB4MkUsIDB4MTQsMHgxNCwgMHg4NywweDMyLAorMHgwMCwweDgwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDEsIDB4RUUsMHgwMCwgMHg1MywweDRDLCAweEY3LDB4MDYsCisweDBDLDB4M0UsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHg3RSwKKzB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDRGLDB4RjEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsIDB4MEMsMHgzRSwgMHhDNywweDdDLAorMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDUzLDB4NEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEZGLDB4ODIsCisweDAwLDB4MTAsIDB4ODYsMHg4MiwgMHhGRiwweDM4LCAweEY3LDB4MDQsIDB4MzUsMHg1OCwgMHhGNSwweDg0LCAweDZGLDB4NTgsIDB4RjYsMHg4NSwKKzB4MzUsMHg1NCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsIDB4NTAsMHg2NCwgMHhGNywweDA1LAorMHgzNSwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDUwLDB4NTgsIDB4QjUsMHhCQSwKKzB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjQsMHg4MiwgMHgwMCwweDIyLCAweEUwLDB4MDAsIDB4NTAsMHg2OCwgMHhGNCwweDg1LAorMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsCisweDAwLDB4OTQsIDB4QzQsMHg4NCwgMHgwMCwweDAwLCAweEMwLDB4M0EsIDB4NEEsMHgwMCwgMHhFNiwweDAwLCAweDUwLDB4Q0QsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NiwweDM2LCAweDAwLDB4OTQsIDB4RjYsMHg4NCwgMHgzNSwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NiwweEI0LAorMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDk3LDB4MTYsCisweEZGLDB4RjAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY3LDB4MDQsIDB4MzUsMHg0OCwgMHg3NywweEI0LCAweDAwLDB4MEYsIDB4NzAsMHgzRSwKKzB4RkYsMHhFMSwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4RTYsMHgwMCwgMHg1MCwweEM1LCAweEM2LDB4MzgsIDB4NjAsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgMHgzNSwweDQ0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MEYsIDB4RTIsMHgwMCwKKzB4NTEsMHgxOSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwgMHg1MSwweDJDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzNSwweDI4LCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4NTIsMHhDNCwgMHhGNywweDA1LCAweDM1LDB4NDQsIDB4MjAsMHgzQSwgMHgwMCwweDEwLCAweEU2LDB4MDAsIDB4NTEsMHgyOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgMHgzNSwweDNDLCAweEY2LDB4ODQsCisweDM1LDB4MjgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzUsMHgzQywgMHhGNywweDA0LCAweDM1LDB4M0MsIDB4ODcsMHgzNiwKKzB4MTQsMHgxQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MTQsMHgxQywgMHhGNywweDA0LAorMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4ODQsCisweDc2LDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDUxLDB4NzgsIDB4RjcsMHgwNSwKKzB4NzYsMHgwNCwgMHhGMCwweDA1LCAweDc2LDB4MDQsIDB4RjYsMHg4NCwgMHg3NiwweDA0LCAweEY3LDB4MDQsIDB4NzYsMHgwOCwgMHhGMCwweDA1LAorMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDUxLDB4REQsIDB4RjcsMHgwNSwgMHg3NSwweEY4LCAweEY3LDB4MDQsIDB4NzYsMHg0OCwgMHhGNCwweDg2LCAweDcyLDB4MTgsIDB4QzAsMHgzQSwKKzB4NEEsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NTEsMHhERCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY0LDB4ODIsIDB4MDAsMHgwRSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4NTEsMHhEQywgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDJBLAorMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NTIsMHhDNCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwKKzB4NTIsMHg5OCwgMHgwNSwweEI0LCAweDAwLDB4MDgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTYsIDB4RkYsMHhFQywgMHg5NSwweDk2LAorMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg1RSwweERDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg1LDB4OTYsIDB4RkYsMHhFOCwgMHg4NiwweDk2LCAweEZGLDB4RTQsIDB4MjAsMHgyMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDUyLDB4ODgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4MzYsIDB4MDAsMHgwQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDUyLDB4NkQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsCisweDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LCAweDAwLDB4MTQsIDB4ODcsMHgzNiwKKzB4MDAsMHgxNCwgMHhFMCwweDAwLCAweDUyLDB4ODgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgwMiwgMHhDNiwweEI0LAorMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDA3LDB4MzgsCisweDAwLDB4MTAsIDB4QzcsMHgyQywgMHg3MCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDUxLDB4MDQsIDB4RjcsMHgwNSwKKzB4MzUsMHgyQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDRDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NTIsMHhCOCwgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjQsMHg4NCwgMHg2RiwweDQ0LCAweEUwLDB4MDAsCisweDUyLDB4QkMsIDB4RjQsMHg4NSwgMHgzNSwweDI4LCAweEY3LDB4MDUsIDB4MzUsMHgyOCwgMHhFMCwweDAwLCAweDUxLDB4RTAsIDB4MDUsMHgyOCwKKzB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1MiwweEZELCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LAorMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4RjQsMHg4MiwgMHgwMCwweDBELCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDUzLDB4MDQsIDB4QjQsMHhCQSwKKzB4NjgsMHgwMiwgMHhFMCwweDAwLCAweDUzLDB4MDQsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweDg1LAorMHgzNSwweDI0LCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NDQsIDB4RjQsMHg4NiwgMHgzMiwweEY0LCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1MywweDRDLCAweEY0LDB4ODUsIDB4MzUsMHgzMCwgMHhGNywweDA0LCAweEUwLDB4MTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDAsIDB4NTMsMHg0RCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTQsIDB4RjQsMHg4NCwgMHgzNSwweDU0LCAweEY2LDB4ODQsCisweDM1LDB4NEMsIDB4RjUsMHg4NCwgMHgzNSwweDJDLCAweDk0LDB4ODIsIDB4RkYsMHgzOCwgMHg3NiwweEI1LCAweDAwLDB4MDMsIDB4QTUsMHgyRSwKKzB4NjgsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgwMiwgMHhGRiwweDNDLCAweEYzLDB4ODQsIDB4MzUsMHg1MCwgMHhDNiwweEFDLAorMHg2OCwweDAwLCAweDkzLDB4ODIsIDB4RkYsMHg0MCwgMHg4NywweDM2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MDIsCisweEZGLDB4NDQsIDB4ODYsMHgzNiwgMHgwMCwweDA0LCAweEY3LDB4MDQsIDB4MzUsMHg0MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHhGNywweDA1LCAweDM1LDB4NDAsIDB4RjYsMHgwNCwgMHgzNSwweDI4LCAweDg2LDB4QjYsIDB4MDAsMHgwNCwgMHg4NywweDMyLAorMHgxNCwweDE0LCAweDk0LDB4OTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4OTcsMHgzMiwgMHgxNCwweDE0LCAweDg3LDB4MkUsCisweDAwLDB4ODAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFRSwweDAwLCAweDU3LDB4NTAsIDB4OTUsMHgxNiwKKzB4RkYsMHhGNCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NTQsMHgwNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDUzLDB4RjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsCisweDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDU3LDB4NTAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGRiwweDgyLCAweDAwLDB4MTAsIDB4ODYsMHg4MiwgMHhGRiwweDM4LCAweEY3LDB4MDQsIDB4MzUsMHg1OCwgMHhGNSwweDg0LAorMHg2RiwweDU4LCAweEY2LDB4ODUsIDB4MzUsMHg1NCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsCisweDU0LDB4NjgsIDB4RjcsMHgwNSwgMHgzNSwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLAorMHg1NCwweDVDLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHg4MiwgMHgwMCwweDIyLCAweEUwLDB4MDAsCisweDU0LDB4NkMsIDB4RjMsMHg4NSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4OTQsIDB4QzMsMHg4NCwgMHgwMCwweDAwLCAweEMwLDB4M0EsIDB4M0EsMHgwMCwgMHhFNiwweDAwLAorMHg1NCwweEQxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDM2LCAweDAwLDB4OTQsIDB4RjYsMHg4NCwgMHgzNSwweDU0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwKKzB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY3LDB4MDQsIDB4MzUsMHg0OCwgMHg3NywweEI0LAorMHgwMCwweDBGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4RTYsMHgwMCwgMHg1NCwweEM5LCAweEM2LDB4MzgsCisweDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwKKzB4MzUsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDBGLCAweEUyLDB4MDAsIDB4NTUsMHgxRCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwKKzB4NTUsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzNSwweDI4LCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NTYsMHhDOCwgMHhGNywweDA1LCAweDM1LDB4NDQsIDB4MjAsMHgzQSwgMHgwMCwweDEwLCAweEU2LDB4MDAsCisweDU1LDB4MkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwKKzB4MzUsMHgzQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzUsMHgzQywgMHhGNywweDA0LAorMHgzNSwweDNDLCAweDg3LDB4MzYsIDB4MTQsMHgxQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDc2LDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLAorMHg1NSwweDdDLCAweEY3LDB4MDUsIDB4NzYsMHgwNCwgMHhGMCwweDA1LCAweDc2LDB4MDQsIDB4RjYsMHg4NCwgMHg3NiwweDA0LCAweEY3LDB4MDQsCisweDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDU1LDB4RTEsIDB4RjcsMHgwNSwgMHg3NSwweEY4LCAweEY3LDB4MDQsIDB4NzYsMHg0OCwgMHhGMywweDg2LAorMHg3MiwweDE4LCAweEMwLDB4M0EsIDB4M0EsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDU1LDB4RTEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4ODIsIDB4MDAsMHgwRSwgMHgyMCwweDMyLAorMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NTUsMHhFMCwgMHhCMywweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NTYsMHhDOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwKKzB4MzUsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4NTYsMHg5QywgMHgwNSwweEI0LCAweDAwLDB4MDgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTYsCisweEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4NUUsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg1LDB4OTYsIDB4RkYsMHhFOCwgMHg4NiwweDk2LAorMHhGRiwweEU0LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDU2LDB4OEMsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4MzYsCisweDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDU2LDB4NzEsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LAorMHgwMCwweDE0LCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHhFMCwweDAwLCAweDU2LDB4OEMsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4QzcsMHgyQywgMHg3MCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg1NSwweDA4LCAweEY3LDB4MDUsIDB4MzUsMHgyQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDRDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NTYsMHhCQywgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjMsMHg4NCwKKzB4NkYsMHg0NCwgMHhFMCwweDAwLCAweDU2LDB4QzAsIDB4RjMsMHg4NSwgMHgzNSwweDI4LCAweEY3LDB4MDUsIDB4MzUsMHgyOCwgMHhFMCwweDAwLAorMHg1NSwweEU0LCAweDA1LDB4MjgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1NywweDAxLCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHg4MiwgMHgwMCwweDBELCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLAorMHg1NywweDA4LCAweEIzLDB4QkEsIDB4NjgsMHgwMiwgMHhFMCwweDAwLCAweDU3LDB4MDgsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4ODIsCisweDAwLDB4MDEsIDB4RjMsMHg4NSwgMHgzNSwweDI0LCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NDQsIDB4RjMsMHg4NiwKKzB4MzIsMHhGNCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1NywweDUwLCAweEYzLDB4ODUsIDB4MzUsMHgzMCwgMHhGNywweDA0LAorMHhFMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEI4LCAweDAwLDB4MUYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDAsCisweDU3LDB4NTEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MTQsIDB4ODcsMHgwMiwKKzB4RkYsMHgzOCwgMHhGMywweDg0LCAweDM1LDB4MkMsIDB4RjcsMHgwNSwgMHgzNSwweDU0LCAweDg3LDB4MUUsIDB4MDAsMHg4MCwgMHhGNSwweDA0LAorMHgzNSwweDRDLCAweDI3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDJBLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1QSwweDRDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjUsMHg4NCwgMHg2RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMCwKKzB4NTcsMHhEOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsCisweDU3LDB4Q0MsIDB4QjUsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RTAsMHgwMCwKKzB4NTcsMHhEQywgMHhGMywweDA1LCAweDZGLDB4NTgsIDB4RjAsMHgwNSwgMHg2RiwweDU0LCAweEY2LDB4ODQsIDB4MzUsMHgyQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHg5NCwgMHhDMywweDA0LCAweDAwLDB4MDAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsCisweDU4LDB4NDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MzYsIDB4MDAsMHg5NCwgMHhGNiwweDg0LCAweDM1LDB4NTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4RjcsMHgwNCwgMHgzNSwweDU0LCAweDk2LDB4OTYsIDB4RkYsMHhGNCwgMHg0NywweDM5LAorMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhGMCwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4RjcsMHgwNCwgMHgzNSwweDQ4LCAweDc3LDB4QjQsCisweDAwLDB4MEYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweDA3LDB4MzgsIDB4MDAsMHgyNCwgMHhFNiwweDAwLCAweDU4LDB4MzksIDB4QzYsMHgzOCwKKzB4NjAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4QzcsMHgwNCwgMHg2RSwweDAwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHhGNiwweDg0LAorMHgzNSwweDQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MEYsIDB4RTIsMHgwMCwgMHg1OCwweDhELCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwgMHgwMCwweDBDLCAweDg3LDB4MzYsIDB4MDAsMHgwQywgMHhFMCwweDAwLAorMHg1OCwweEEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDM1LDB4MjgsIDB4RjYsMHg4MiwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg1QSwweDM4LCAweEY3LDB4MDUsIDB4MzUsMHg0NCwgMHgyMCwweDNBLCAweDAwLDB4MTAsIDB4RTYsMHgwMCwKKzB4NTgsMHg5QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDk3LDB4MzYsIDB4MDAsMHgwNCwgMHhGNywweDA0LAorMHgzNSwweDNDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHgzNSwweDNDLCAweEY3LDB4MDQsCisweDM1LDB4M0MsIDB4ODcsMHgzNiwgMHgxNCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgzNiwKKzB4MTQsMHgxQywgMHhGNywweDA0LCAweDc2LDB4MDQsIDB4ODYsMHhCNiwgMHgxNCwweDFDLCAweEY2LDB4MDQsIDB4NzUsMHhGQywgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY2LDB4ODQsIDB4NzYsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEU2LDB4MDAsCisweDU4LDB4RUMsIDB4RjcsMHgwNSwgMHg3NiwweDA0LCAweEYwLDB4MDUsIDB4NzYsMHgwNCwgMHhGNiwweDg0LCAweDc2LDB4MDQsIDB4RjcsMHgwNCwKKzB4NzYsMHgwOCwgMHhGMCwweDA1LCAweDc1LDB4RkMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NTksMHg1MSwgMHhGNywweDA1LCAweDc1LDB4RjgsIDB4RjcsMHgwNCwgMHg3NiwweDQ4LCAweEYzLDB4MDYsCisweDcyLDB4MTgsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NTksMHg1MSwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgMHgwMCwweDBFLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg1OSwweDUwLCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwMiwKKzB4MDAsMHgwMCwgMHgyMCwweDJBLCAweDAwLDB4MDIsIDB4RUUsMHgwMCwgMHg1QSwweDM4LCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNiwweDg0LAorMHgzNSwweDI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDIsIDB4RTYsMHgwMCwgMHg1QSwweDBDLCAweDA1LDB4QjQsIDB4MDAsMHgwOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4OTUsMHgxNiwKKzB4RkYsMHhFQywgMHg5NSwweDk2LCAweEZGLDB4RTgsIDB4OTYsMHg5NiwgMHhGRiwweEU0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHg1RSwweERDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4RUMsIDB4ODUsMHg5NiwgMHhGRiwweEU4LCAweDg2LDB4OTYsCisweEZGLDB4RTQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NTksMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4ODYsMHgzNiwKKzB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDBGLCAweEUyLDB4MDAsIDB4NTksMHhFMSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDAwLDB4MTQsIDB4ODcsMHgzNiwgMHgwMCwweDE0LCAweEUwLDB4MDAsIDB4NTksMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDYwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDA1LCAweEM3LDB4MzgsIDB4NkEsMHgwMCwgMHhDNywweDM4LAorMHg2MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxMCwgMHhDNywweDJDLCAweDcwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDU4LDB4NzgsIDB4RjcsMHgwNSwgMHgzNSwweDJDLCAweEY2LDB4ODQsIDB4MzUsMHgyOCwgMHhGNywweDA0LCAweDZGLDB4NEMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg1QSwweDJDLCAweDA3LDB4MzQsIDB4MTQsMHg5NCwgMHhGMywweDA0LAorMHg2RiwweDQ0LCAweEUwLDB4MDAsIDB4NUEsMHgzMCwgMHhGMywweDA1LCAweDM1LDB4MjgsIDB4RjcsMHgwNSwgMHgzNSwweDI4LCAweEUwLDB4MDAsCisweDU5LDB4NTQsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDVELDB4QzQsIDB4RjMsMHgwMiwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDVELDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4MjksIDB4MDAsMHgwMywgMHhDNywweDFDLAorMHg3MCwweDAwLCAweDg3LDB4M0EsIDB4MDAsMHgwNCwgMHgwNSwweDI4LCAweDAwLDB4MDEsIDB4NzYsMHhBOSwgMHgwMCwweDAzLCAweEY0LDB4ODQsCisweDM1LDB4NTQsIDB4RjYsMHgwNCwgMHgzNSwweDUwLCAweDk0LDB4ODIsIDB4RkYsMHgzOCwgMHhBNCwweDFFLCAweDY4LDB4MDIsIDB4QzYsMHgzMCwKKzB4NzAsMHgwMCwgMHg5NCwweDAyLCAweEZGLDB4M0MsIDB4OTYsMHgwMiwgMHhGRiwweDQwLCAweEM2LDB4OUMsIDB4NjgsMHgwMCwgMHg4NywweDM2LAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDAyLCAweEZGLDB4NDQsIDB4ODUsMHhCNiwgMHgwMCwweDA0LCAweEY3LDB4MDQsCisweDM1LDB4NDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHhGNywweDA1LCAweDM1LDB4NDAsIDB4ODUsMHhCNiwKKzB4MDAsMHgwNCwgMHhGNSwweDA1LCAweDM1LDB4NEMsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweEY2LDB4MDUsIDB4MzUsMHg1MCwgMHg4NywweDM2LAorMHgxNCwweDE0LCAweDk0LDB4OTYsIDB4RkYsMHhGNCwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4OTcsMHgzNiwgMHgxNCwweDE0LCAweDg3LDB4MUUsCisweDAwLDB4ODAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFRSwweDAwLCAweDVFLDB4M0MsIDB4OTQsMHgxNiwKKzB4RkYsMHhGNCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4QzAsMHg3RSwgMHg3NCwweDAwLCAweEU2LDB4MDAsIDB4NUEsMHhGNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4N0UsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweDVBLDB4RTUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDYsCisweDBDLDB4M0UsIDB4QzcsMHg3QywgMHg3NCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgxMCwgMHhFNiwweDAwLCAweDVFLDB4M0MsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGRiwweDgyLCAweDAwLDB4MTAsIDB4ODYsMHg4MiwgMHhGRiwweDM4LCAweEY3LDB4MDQsIDB4MzUsMHg1OCwgMHhGNSwweDg0LAorMHg2RiwweDU4LCAweEY2LDB4ODUsIDB4MzUsMHg1NCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDAsCisweDVCLDB4NTgsIDB4RjcsMHgwNSwgMHgzNSwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLAorMHg1QiwweDRDLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwMiwgMHgwMCwweDIyLCAweEUwLDB4MDAsCisweDVCLDB4NUMsIDB4RjMsMHgwNSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGNiwweDg0LCAweDM1LDB4MkMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4OTQsIDB4QzMsMHgwNCwgMHgwMCwweDAwLCAweEMwLDB4M0EsIDB4MzIsMHgwMCwgMHhFNiwweDAwLAorMHg1QiwweEMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDM2LCAweDAwLDB4OTQsIDB4RjYsMHg4NCwgMHgzNSwweDU0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4MzUsMHg1NCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4NDcsMHgzOSwKKzB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY3LDB4MDQsIDB4MzUsMHg0OCwgMHg3NywweEI0LAorMHgwMCwweDBGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHgwNywweDM4LCAweDAwLDB4MjQsIDB4RTYsMHgwMCwgMHg1QiwweEI5LCAweEM2LDB4MzgsCisweDYwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweEM3LDB4MDQsIDB4NkUsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwKKzB4MzUsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDBGLCAweEUyLDB4MDAsIDB4NUMsMHgwRCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDBDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MDAsMHgwQywgMHg4NywweDM2LCAweDAwLDB4MEMsIDB4RTAsMHgwMCwKKzB4NUMsMHgyMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgzNSwweDI4LCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NUQsMHhCOCwgMHhGNywweDA1LCAweDM1LDB4NDQsIDB4MjAsMHgzQSwgMHgwMCwweDEwLCAweEU2LDB4MDAsCisweDVDLDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwKKzB4MzUsMHgzQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4MzUsMHgzQywgMHhGNywweDA0LAorMHgzNSwweDNDLCAweDg3LDB4MzYsIDB4MTQsMHgxQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsCisweDE0LDB4MUMsIDB4RjcsMHgwNCwgMHg3NiwweDA0LCAweDg2LDB4QjYsIDB4MTQsMHgxQywgMHhGNiwweDA0LCAweDc1LDB4RkMsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDc2LDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAwLAorMHg1QywweDZDLCAweEY3LDB4MDUsIDB4NzYsMHgwNCwgMHhGMCwweDA1LCAweDc2LDB4MDQsIDB4RjYsMHg4NCwgMHg3NiwweDA0LCAweEY3LDB4MDQsCisweDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NSwweEZDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDVDLDB4RDEsIDB4RjcsMHgwNSwgMHg3NSwweEY4LCAweEY3LDB4MDQsIDB4NzYsMHg0OCwgMHhGMywweDA2LAorMHg3MiwweDE4LCAweEMwLDB4M0EsIDB4MzIsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDVDLDB4RDEsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwRSwgMHgyMCwweDMyLAorMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4NUMsMHhEMCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4MjAsMHgyQSwgMHgwMCwweDAyLCAweEVFLDB4MDAsIDB4NUQsMHhCOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwKKzB4MzUsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4NUQsMHg4QywgMHgwNSwweEI0LCAweDAwLDB4MDgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTYsCisweEZGLDB4RUMsIDB4OTUsMHg5NiwgMHhGRiwweEU4LCAweDk2LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4NUUsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg1LDB4OTYsIDB4RkYsMHhFOCwgMHg4NiwweDk2LAorMHhGRiwweEU0LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDVELDB4N0MsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4MzYsCisweDAwLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwRiwgMHhFMiwweDAwLCAweDVELDB4NjEsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDM2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDM2LAorMHgwMCwweDE0LCAweDg3LDB4MzYsIDB4MDAsMHgxNCwgMHhFMCwweDAwLCAweDVELDB4N0MsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwNSwgMHhDNywweDM4LCAweDZBLDB4MDAsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MTAsIDB4QzcsMHgyQywgMHg3MCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg1QiwweEY4LCAweEY3LDB4MDUsIDB4MzUsMHgyQywgMHhGNiwweDg0LCAweDM1LDB4MjgsIDB4RjcsMHgwNCwgMHg2RiwweDRDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NUQsMHhBQywgMHgwNywweDM0LCAweDE0LDB4OTQsIDB4RjMsMHgwNCwKKzB4NkYsMHg0NCwgMHhFMCwweDAwLCAweDVELDB4QjAsIDB4RjMsMHgwNSwgMHgzNSwweDI4LCAweEY3LDB4MDUsIDB4MzUsMHgyOCwgMHhFMCwweDAwLAorMHg1QywweEQ0LCAweDA1LDB4MjgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg1RCwweEYxLCAweEYzLDB4MDIsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwgMHgwMCwweDBELCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLAorMHg1RCwweEY0LCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhFMCwweDAwLCAweDVELDB4RjQsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDUsCisweDM1LDB4MjQsIDB4RjYsMHg4NCwgMHgzNSwweDI4LCAweEY3LDB4MDQsIDB4NkYsMHg0NCwgMHhGMywweDA2LCAweDMyLDB4RjQsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDVFLDB4M0MsIDB4RjMsMHgwNSwgMHgzNSwweDMwLCAweEY3LDB4MDQsIDB4RTAsMHgxOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc3LDB4QjgsIDB4MDAsMHgxRiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwgMHg1RSwweDNELCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MEYsMHg4MSwgMHg0MCwweDAwLCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDc5LDB4QzgsIDB4RjcsMHgwNCwgMHg3OSwweEM4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4MzUsMHgzMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MzIsMHhGNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzUsMHgzMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzMywweDgwLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MzUsMHgzMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNCwweDBDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNSwweDMwLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNCwweDk4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDMyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MEYsIDB4ODYsMHhCMiwgMHgwMCwweDAwLCAweEM1LDB4MzgsIDB4MDAsMHgwMCwgMHhFRSwweDAwLAorMHg1RiwweDJDLCAweEM1LDB4QjQsIDB4MDAsMHgwMCwgMHgyMCwweDM2LCAweDAwLDB4MEYsIDB4RUUsMHgwMCwgMHg1RiwweDJDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVDLDB4MDAsIDB4NUYsMHgyRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMCwgMHhFQywweDAwLCAweDVGLDB4NDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzIsIDB4MDAsMHgwQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDMyLCAweDAwLDB4MEMsIDB4ODcsMHgzMiwgMHgwMCwweDBDLCAweEUwLDB4MDAsCisweDVGLDB4NTAsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MkEsIDB4NUEsMHgwMCwgMHg0NCwweDBDLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4ODYsCisweDM1LDB4NjAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4NDIsMHgzMCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODIsIDB4NjYsMHhGOCwgMHg5NiwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxNywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgzNSwweDYwLCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwKKzB4NjksMHg4MCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDE4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LAorMHgzNSwweDYwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjYsMHg4MiwgMHg2QiwweDUwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MTYsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNiwweDg2LCAweDM1LDB4NjAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDYxLDB4NzgsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MUYsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4MzUsMHg2MCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODIsIDB4NjIsMHg3QywgMHg5NiwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgyMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgzNSwweDYwLCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwKKzB4NjYsMHhGOCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDE3LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LAorMHgzNSwweEVDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjYsMHg4MiwgMHg2OSwweDgwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MTgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNiwweDg2LCAweDM1LDB4RUMsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDZCLDB4NTAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MTYsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4MzUsMHhFQywgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODIsIDB4NjEsMHg3OCwgMHg5NiwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxRiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgzNSwweEVDLCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwKKzB4NjIsMHg3QywgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDIwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDg2LAorMHgzNSwweEVDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNCwgMHhFMCwweDI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NjEsMHgxNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDI4LCAweEUwLDB4MDAsIDB4NjEsMHgxOCwgMHg3NywweDM5LAorMHgwMCwweDAyLCAweEY3LDB4MDIsIDB4MDAsMHhGMCwgMHhGNywweDA1LCAweDQyLDB4MjgsIDB4RjcsMHgwNiwgMHg0MCwweDhBLCAweEYwLDB4M0IsCisweDI4LDB4MDAsIDB4RjcsMHgwNiwgMHg0MCwweDhDLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNSwKKzB4N0EsMHhDMCwgMHhGNywweDA1LCAweDdBLDB4QjgsIDB4RjcsMHgwNSwgMHg3QSwweEIwLCAweEY3LDB4MDUsIDB4N0EsMHhDOCwgMHhGNiwweDgyLAorMHhDMywweDUwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDgyLCAweDAwLDB4MTYsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODYsCisweDQyLDB4MzAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4MDQsCisweDZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDYxLDB4RUQsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwNywgMHhFNiwweDAwLCAweDYxLDB4RUMsIDB4MDYsMHhCMCwgMHgwMCwweDAyLCAweDg3LDB4MzYsCisweDAwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgMHg2MSwweEVDLCAweEY1LDB4MDYsIDB4MzUsMHhFQywgMHhGNywweDA0LAorMHg0MiwweDMwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDUyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2MiwweDExLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDQyLDB4QTAsIDB4RjYsMHgwNiwKKzB4NDIsMHhBMiwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDYyLDB4NjgsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MzIsCisweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4RTAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDgsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDYyLDB4M0MsIDB4RjYsMHg4NSwgMHhFMCwweDA0LCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg2MiwweDQwLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDYyLDB4NjUsIDB4RjYsMHgwNiwgMHg0MiwweEEyLCAweEY3LDB4MDQsIDB4NDIsMHhBMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLAorMHgyOCwweDAwLCAweEYwLDB4MDUsIDB4NDIsMHgyOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHhGNywweDA0LCAweDQyLDB4M0MsIDB4RjYsMHg4NCwgMHg2RiwweDM0LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHgyMCwweDM2LAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NjIsMHhCMSwgMHhGNywweDA1LCAweDQyLDB4M0MsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweEY1LDB4OUUsCisweDAwLDB4MDIsIDB4QzAsMHgzQSwgMHg1QSwweDAwLCAweEU2LDB4MDAsIDB4NjIsMHhCRCwgMHhGNSwweDg2LCAweDM1LDB4RUMsIDB4RjcsMHgwNCwKKzB4NDIsMHhBMCwgMHhFMCwweDAwLCAweDYyLDB4REMsIDB4RjYsMHgwNiwgMHg0MiwweEEyLCAweEY3LDB4MDQsIDB4NDIsMHgzMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NUEsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDYyLDB4RjksIDB4RjYsMHgwNiwgMHg0MiwweEE0LCAweEY3LDB4MDQsIDB4NDIsMHhBNCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLAorMHg2MywweDBDLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDYzLDB4MjAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYwLDB4MDUsIDB4NDIsMHgyOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MjAsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgxQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NjMsMHg2QywgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4ODMsMHg5QSwgMHgwMCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGMywweDg1LAorMHg3QSwweEMwLCAweDg0LDB4OUEsIDB4MDAsMHgxNCwgMHhGNywweDA1LCAweDdBLDB4QzgsIDB4RjQsMHg4NSwgMHg3QSwweEIwLCAweEY3LDB4MDUsCisweDdBLDB4QjgsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDlBLCAweDAwLDB4MTQsIDB4RjcsMHgwNCwKKzB4N0EsMHhCMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NjMsMHhEMCwgMHhGNiwweDAyLAorMHgwMCwweDAwLCAweDg2LDB4OUEsIDB4MDAsMHgxQywgMHhGNywweDA0LCAweDdBLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2MywweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDlBLCAweDAwLDB4MTgsIDB4RjcsMHgwNCwKKzB4N0EsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NjMsMHhEMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg2LDB4OUEsIDB4MDAsMHgyMCwgMHhGNywweDA0LCAweDdBLDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsCisweDY4LDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDY0LCAweEVFLDB4MDAsIDB4NjMsMHhEOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NCwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4MywweDk2LAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDFFLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NCwweDNDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA1LCAweDQwLDB4ODAsIDB4RjcsMHgwNSwKKzB4NDAsMHg4NCwgMHhGNiwweDg0LCAweDZFLDB4NTAsIDB4RjQsMHg4MiwgMHhGRiwweEZGLCAweDgzLDB4MUUsIDB4MDAsMHgwQywgMHhGNCwweDg1LAorMHg0RiwweDU0LCAweDkzLDB4MzYsIDB4MDAsMHgxMCwgMHg4MywweDlFLCAweDAwLDB4MTAsIDB4ODQsMHg5NiwgMHgwMCwweDAwLCAweDkzLDB4QjYsCisweDAwLDB4MTQsIDB4ODQsMHhBNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweEI2LCAweDFELDB4REMsIDB4RjYsMHg4MiwKKzB4MDAsMHg2NCwgMHhGNiwweDg1LCAweDRBLDB4OTgsIDB4RjcsMHgwNSwgMHg0QSwweDlDLCAweDgzLDB4MTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg3LDB4MUEsIDB4MDAsMHgyMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVFLDB4MDAsCisweDY0LDB4N0MsIDB4RjMsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDIsMHhBNCwgMHhGNiwweDA2LCAweDQyLDB4QTYsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4NjYsMHhFNCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4OTMsMHg5NiwgMHhGRiwweEY0LCAweDg0LDB4MTYsCisweDAwLDB4MDAsIDB4RjQsMHg4NiwgMHg0MiwweEM4LCAweDk0LDB4OTYsIDB4RkYsMHhFQywgMHhGMywweDAyLCAweDAwLDB4MEMsIDB4OTMsMHgxNiwKKzB4RkYsMHhFNCwgMHg4MywweDk2LCAweDAwLDB4MDAsIDB4ODQsMHg5NiwgMHhGRiwweEY0LCAweDg3LDB4MUUsIDB4MDAsMHgyMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MjYsIDB4NzIsMHgwMCwgMHhFQywweDAwLCAweDY2LDB4NDgsIDB4RjMsMHg4NiwgMHg0QSwweDk4LCAweDg0LDB4QTIsCisweDAwLDB4MjQsIDB4ODMsMHgxNiwgMHhGRiwweEU0LCAweEM1LDB4MDQsIDB4MDAsMHgwMCwgMHhCNCwweDlBLCAweDM4LDB4MDIsIDB4QzcsMHgxOCwKKzB4MzgsMHgwMCwgMHg4MywweDIyLCAweDAwLDB4MjgsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweDg0LDB4OTYsIDB4RkYsMHhFNCwgMHg5MywweDNBLAorMHgwMCwweDA0LCAweDkzLDB4QkEsIDB4MDAsMHgwOCwgMHhGNiwweDA0LCAweEUwLDB4MDAsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweEE2LDB4QTYsCisweDMwLDB4MDIsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzIsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDY1LDB4MTAsIDB4QzYsMHgzOCwKKzB4MDAsMHgwMCwgMHhGNiwweDg0LCAweEUwLDB4MDQsIDB4ODcsMHgzMiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NjUsMHgxNCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDIxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwKKzB4RTAsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLAorMHg2NSwweDVDLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDY0LCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RjYsMHg4NCwgMHhFMCwweDA0LCAweDg3LDB4MzIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDY1LDB4NjUsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NjUsMHg3NSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NSwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4MywweDk2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGMywweDg1LCAweDRGLDB4NTQsIDB4ODcsMHgyMiwgMHgwMCwweDJDLCAweDc2LDB4QTEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweDA1LDB4QTAsIDB4MDAsMHgyRSwgMHg3NiwweDJELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEY0LDB4ODIsCisweDAwLDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweERDLCAweDgzLDB4MTYsIDB4RkYsMHhFQywgMHgyMCwweDI2LCAweDAwLDB4MDcsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgwNiwweDk4LAorMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RTIsMHgwMCwgMHg2NiwweDFDLCAweEY3LDB4MzcsCisweDI4LDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg1LDB4OTYsIDB4RkYsMHhEQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyQywKKzB4NDAsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MzAsIDB4MDYsMHgyOCwgMHgwMCwweDA0LCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHgwNSwweEFDLAorMHgwMCwweDAyLCAweDgzLDB4OTYsIDB4RkYsMHhEQywgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweDAzLDB4OUMsCisweDAwLDB4MDEsIDB4OTMsMHg5NiwgMHhGRiwweERDLCAweDIwLDB4MUUsIDB4MDAsMHgwNywgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNCwKKzB4RkYsMHhGMCwgMHhFMiwweDAwLCAweDY1LDB4RTEsIDB4RjYsMHhCMywgMHgyOCwweDAwLCAweDA0LDB4MjAsIDB4MDAsMHgxQywgMHg4NCwweDk2LAorMHhGRiwweEVDLCAweDgzLDB4MTYsIDB4RkYsMHhFNCwgMHg4MywweDk2LCAweEZGLDB4RjQsIDB4MDQsMHhBNCwgMHgwMCwweDE0LCAweDk0LDB4OTYsCisweEZGLDB4RUMsIDB4MDMsMHgxOCwgMHgwMCwweDBDLCAweDkzLDB4MTYsIDB4RkYsMHhFNCwgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwKKzB4NjQsMHg5NCwgMHg5MywweDk2LCAweEZGLDB4RjQsIDB4ODQsMHg5NiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDI2LAorMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDRBLDB4OUMsIDB4ODUsMHhBNiwgMHgwMCwweDIwLCAweEY3LDB4MDQsCisweDdBLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDdBLDB4QjgsIDB4RjcsMHgwNCwKKzB4N0EsMHhCOCwgMHhGNiwweDg0LCAweDdBLDB4QzgsIDB4ODYsMHgyNiwgMHgwMCwweDE4LCAweEM2LDB4QjQsIDB4NTgsMHgwMCwgMHg4NywweDI2LAorMHgwMCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NjYsMHhFNSwgMHhGNiwweDg1LCAweDdBLDB4QzgsIDB4ODMsMHgyNiwKKzB4MDAsMHgwOCwgMHhGNywweDA0LCAweDZFLDB4NTAsIDB4RjMsMHgwNSwgMHgzQiwweDY0LCAweDgzLDB4QTYsIDB4MDAsMHgwOCwgMHhGNiwweDgyLAorMHgwMCwweDAwLCAweDkzLDB4QkEsIDB4MUQsMHhEQywgMHg4NCwweEE2LCAweDAwLDB4MEMsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDk0LDB4QkEsCisweDAwLDB4MTAsIDB4ODMsMHgxQSwgMHgwMCwweDEwLCAweEY2LDB4ODUsIDB4N0EsMHhDOCwgMHg5MywweDNBLCAweDAwLDB4MTQsIDB4RjcsMHgwMiwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDQwLDB4ODQsIDB4RjYsMHg4NSwgMHg3QSwweEMwLCAweEY2LDB4ODUsIDB4N0EsMHhCOCwgMHhGNiwweDg1LAorMHg3QSwweEIwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwKKzB4MDAsMHgwOCwgMHhGMywweDg0LCAweDZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MUUsIDB4MDAsMHgxOCwgMHhGNiwweDg0LAorMHhFMCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgMHg2NywweDI5LCAweEY3LDB4MDIsCisweDAwLDB4MDEsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4RTgsIDB4RjUsMHg4MiwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweEUwLDB4MUMsIDB4ODYsMHg5RSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHg2QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NywweEU5LCAweEM1LDB4ODQsCisweDAwLDB4MDAsIDB4ODYsMHg5RSwgMHgwMCwweDEwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4ODgsIDB4MDUsMHgxQywgMHgwMCwweDEwLCAweDg2LDB4OUUsIDB4MDAsMHgxNCwgMHhGNywweDA0LAorMHhFMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2NywweDhDLCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY3LDB4OTksIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4ODYsMHhBQSwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDY3LDB4RDQsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2NywweERDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwKKzB4RTAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4NjcsMHhERCwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2NywweEVELCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY4LDB4MTAsIDB4RjYsMHgwNiwKKzB4NDIsMHg5QywgMHhGNywweDA0LCAweDQyLDB4OUMsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY3LDB4MDQsCisweDc1LDB4RjQsIDB4NzUsMHhBQywgMHhGRiwweEUxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDY4LDB4NDUsIDB4OTUsMHg5NiwKKzB4RkYsMHhGNCwgMHhGNywweDA0LCAweDQyLDB4OTgsIDB4RjYsMHgwNiwgMHg0MiwweDk4LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsCisweDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDIwLCAweDA0LDB4MUMsIDB4MDAsMHgyMCwgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwOCwgMHhFRSwweDAwLAorMHg2OCwweEM0LCAweEYzLDB4MDYsIDB4MTUsMHg1NCwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4MDUsMHg5QywgMHgwMCwweDIyLCAweEM0LDB4QUMsCisweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MjIsIDB4MDAsMHgwMCwgMHg3NiwweEExLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEMwLDB4MkEsIDB4NzIsMHgwMCwgMHhFQywweDAwLAorMHg2OCwweEMwLCAweEM2LDB4QTQsIDB4NjAsMHgwMCwgMHhBNywweDI2LCAweDYwLDB4MDIsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4MDUsMHgyOCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RTgsIDB4RjcsMHgyRiwKKzB4NjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHg2OCwweDc4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhGMywweDA2LAorMHgxNSwweDU0LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA0LCAweEUwLDB4MjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNCwgMHhFMCwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwKKzB4RTAsMHgwMCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEVFLDB4NjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2OSwweDI4LCAweEY2LDB4MDYsIDB4NDIsMHg5RSwgMHhGNywweDA0LCAweDQyLDB4OUMsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2OSwweDZDLCAweEYzLDB4MDYsIDB4MzUsMHhFQywgMHhGNywweDA0LCAweDQyLDB4MzAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDMyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg2OSwweDZELCAweEYwLDB4MDUsIDB4NDIsMHgyOCwgMHhGMywweDA2LCAweDM1LDB4NjAsIDB4RjMsMHgwNSwgMHg0MiwweDMwLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MDQsIDB4RjUsMHgwNCwgMHg2RiwweDM0LCAweEY3LDB4MDQsCisweDQyLDB4NDAsIDB4ODYsMHgyQSwgMHgwMCwweDE4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweEUwLDB4MUMsIDB4RjcsMHgwNSwKKzB4NDIsMHg0MCwgMHhDMCwweDM2LCAweDYyLDB4MDAsIDB4RUMsMHgwMCwgMHg2OSwweEI1LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhGNywweDAyLAorMHgwMCwweDAwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZBLDB4ODAsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweEUwLDB4MUMsIDB4ODYsMHhBQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QSwweDdELCAweEM1LDB4ODQsIDB4MDAsMHgwMCwgMHg4NiwweEFBLAorMHgwMCwweDEwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweDZBLDB4MTQsIDB4MDQsMHhBOCwgMHgwMCwweDEwLCAweDg2LDB4QUEsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg2QSwweDE4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZBLDB4MjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsCisweDAwLDB4MDAsIDB4ODYsMHhBNiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDZBLDB4NjAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHg2QSwweDY4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEE2LCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgMHhFMCwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4NkEsMHg2OSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QSwweDgxLCAweEM3LDB4MkMsIDB4MDAsMHgwMCwgMHhGNSwweDgyLAorMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4NkEsMHg4MCwgMHhDNywweDJDLCAweDAwLDB4MDAsIDB4QzcsMHgwNCwgMHgwMCwweDAwLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RUUsMHgwMCwgMHg2QiwweDNELCAweEY2LDB4ODYsIDB4NDAsMHg4QSwgMHhGNywweDA0LCAweDQwLDB4ODgsIDB4NzYsMHhCNSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkIsMHgzQywgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4RjYsMHg4NSwgMHg0MCwweDgwLCAweEY2LDB4ODUsCisweDQwLDB4ODQsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LCAweEUwLDB4MUMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHg4NiwgMHhFMCwweDAwLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgwMiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4OTYsMHg5NiwgMHhGRiwweEY0LCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhFRSwweDY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDA1LCAweDQwLDB4ODQsIDB4ODYsMHg5NiwKKzB4RkYsMHhGNCwgMHhGNywweDA0LCAweDZFLDB4NTAsIDB4RjMsMHg4NiwgMHgzNSwweEVDLCAweEY2LDB4ODUsIDB4NDAsMHg5MCwgMHhGNiwweDg1LAorMHg0MCwweDk0LCAweDg3LDB4M0EsIDB4MUQsMHhEQywgMHhGNiwweDg1LCAweDQyLDB4MjgsIDB4RjcsMHgwNSwgMHgzQiwweDY0LCAweEY3LDB4MDQsCisweDQyLDB4MzAsIDB4RjQsMHgwNSwgMHg0MCwweDgwLCAweEMwLDB4M0EsIDB4M0EsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZCLDB4M0QsIDB4RjMsMHg4NiwgMHgzNSwweDYwLCAweEYzLDB4ODUsIDB4NDIsMHgzMCwgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzgsMHg5QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjQsMHg4NiwgMHg0MiwweDMwLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjAsMHhFNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDZELDB4RDksIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDAsMHg4QywgMHhGNiwweDA2LCAweDQwLDB4OEMsIDB4NzYsMHgzMSwKKzB4MDAsMHgxRSwgMHhGNiwweDg0LCAweDQyLDB4MjgsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QiwweEM4LCAweEY2LDB4ODUsCisweDQyLDB4MjgsIDB4RjcsMHgwNCwgMHg0MCwweDg4LCAweEY2LDB4ODYsIDB4NDAsMHg4QSwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg2RCwweDBELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQwLDB4OEMsIDB4RjYsMHg4NiwgMHg0MCwweDhDLCAweDc2LDB4QjUsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZDLDB4MzUsIDB4RjYsMHgwNiwgMHg0MCwweDhBLCAweEY3LDB4MDQsIDB4NDAsMHg4OCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg2QywweDM0LCAweEY0LDB4ODYsIDB4MzYsMHg3OCwgMHhGNywweDA0LCAweDQyLDB4NDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg2QywweDM1LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweEIzLCAweDI4LDB4MDAsIDB4RTAsMHgwMCwgMHg2RCwweDEwLCAweEYwLDB4MDUsCisweDQyLDB4MkMsIDB4RjcsMHgwNCwgMHg0MCwweDhDLCAweEY1LDB4MDYsIDB4NDAsMHg4QywgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg2QywweEMxLCAweEY2LDB4MDYsIDB4NDAsMHg4QSwgMHhGNywweDA0LCAweDQwLDB4ODgsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NkMsMHhDMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwOSwgMHhFRSwweDAwLCAweDZELDB4MTEsIDB4RjcsMHgwNSwgMHg0MiwweDJDLCAweEYwLDB4MkIsCisweDI4LDB4MDAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4OTQsIDB4RjYsMHgwNiwKKzB4NDIsMHg5NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDZELDB4MTAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY3LDB4MDQsCisweDQwLDB4OEMsIDB4RjYsMHg4NiwgMHg0MCwweDhDLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkQsMHgxNCwgMHgyMCwweDJFLAorMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDAsMHg4OCwgMHhGNiwweDA2LCAweDQwLDB4OEEsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NkQsMHgxNSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkQsMHhCNSwgMHhGNCwweDg2LCAweDM1LDB4RUMsIDB4RjcsMHgwNCwgMHg0MiwweDMwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg0QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NkQsMHg1OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHhFMCwweDI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NkQsMHg3OSwgMHhGNiwweDgyLCAweDAwLDB4M0MsIDB4RjYsMHg4NCwgMHhFMCwweDI4LCAweEUwLDB4MDAsCisweDZELDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4RTAsMHgyOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDZELDB4NzksIDB4RjYsMHg4MiwgMHgwMCwweEYwLCAweEY3LDB4MDQsIDB4RTAsMHgyOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMiwgMHhGNywweDA0LCAweDQyLDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsCisweDZBLDB4MDAsIDB4RUMsMHgwMCwgMHg2RCwweEI1LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjAsMHgwNSwKKzB4NDIsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLAorMHgwMCwweDE5LCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDZELDB4QjQsIDB4QjQsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsCisweDJELDB4MzgsIDB4RjQsMHg4MiwgMHhDMywweDUwLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDgyLCAweDAwLDB4MTYsIDB4OTQsMHg5MywKKzB4RkYsMHhGQywgMHhGNCwweDg2LCAweDQyLDB4MzAsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLAorMHgxRSwweEMwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MDQsIDB4RjUsMHg4NiwgMHgzNiwweDc4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LAorMHg0MiwweDQ0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNSwweDQ4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHg4MiwgMHg3NCwweDE4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDAwLDB4MTksIDB4OTUsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM2LDB4NzgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDc0LDB4QUMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MUQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzcsMHgwNCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4NzgsMHgwMCwgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxQiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzNywweDA0LCAweDk1LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwKKzB4NzgsMHhGQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFBLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LAorMHgzNywweDkwLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHg4MiwgMHg4MCwweEQ4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUIsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM3LDB4OTAsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDgxLDB4NzQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MUQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzgsMHgxQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4ODcsMHg3NCwgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxQiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzOCwweDFDLCAweDk1LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwKKzB4OTQsMHhGOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFCLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LAorMHgzOSwweDM0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHg4MiwgMHg4QSwweDAwLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM5LDB4MzQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDhFLDB4MDgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MUEsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4MzksMHgzNCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4OTYsMHg5QywgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxRSwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzOCwweEE4LCAweDk1LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwKKzB4OUIsMHgyQywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFCLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LAorMHgzOCwweEE4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHg4MiwgMHhBMiwweERDLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUUsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDg2LCAweDNBLDB4RDgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweDlFLDB4NTQsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MUIsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4M0EsMHhEOCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4QTMsMHhDMCwgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4NiwgMHgzOSwweEMwLCAweDk1LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwKKzB4QTcsMHg2NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDFFLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LAorMHgzOSwweEMwLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHg4MiwgMHhBQSwweDA0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MUIsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM5LDB4QzAsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDgyLCAweEFFLDB4RjgsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4M0EsMHg0QywgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHg1MCwgMHhGMCwweDNCLAorMHgyOCwweDAwLCAweEY3LDB4MDYsIDB4NDAsMHg4OCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEY2LDB4MDUsCisweDQwLDB4ODAsIDB4RjYsMHgwNSwgMHg0MCwweDg0LCAweEY3LDB4MDYsIDB4M0IsMHg3MCwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwKKzB4M0IsMHg3MiwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgMHhDQSwweDIwLCAweEY1LDB4ODUsIDB4M0IsMHg3NCwgMHhGNywweDA2LAorMHgzQiwweDc4LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDNCLDB4N0EsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsCisweEIxLDB4OTQsIDB4RjUsMHg4NSwgMHgzQiwweDdDLCAweEY3LDB4MDYsIDB4M0IsMHg4MCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwKKzB4M0IsMHg4MiwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgMHhDNywweDU0LCAweEY1LDB4ODUsIDB4M0IsMHg4NCwgMHhGNywweDA2LAorMHgzQiwweDg4LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDNCLDB4OEEsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsCisweEJFLDB4RjgsIDB4RjUsMHg4NSwgMHgzQiwweDhDLCAweEY3LDB4MDYsIDB4M0IsMHg5MCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwKKzB4M0IsMHg5MiwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgMHhDOCwweEY4LCAweEY1LDB4ODUsIDB4M0IsMHg5NCwgMHhGNywweDA2LAorMHgzQiwweDk4LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDNCLDB4OUEsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsCisweEM1LDB4RDgsIDB4RjUsMHg4NSwgMHgzQiwweDlDLCAweEY3LDB4MDYsIDB4M0IsMHhBMCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwKKzB4M0IsMHhBMiwgMHhGMCwweEJCLCAweDI4LDB4MDAsIDB4RjUsMHg4MiwgMHhDNywweDcwLCAweEY1LDB4ODUsIDB4M0IsMHhBNCwgMHhGNywweDA2LAorMHgzQiwweEE4LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDNCLDB4QUEsIDB4RjAsMHhCQiwgMHgyOCwweDAwLCAweEY1LDB4ODIsCisweEMxLDB4QjQsIDB4RjUsMHg4NSwgMHgzQiwweEFDLCAweDk2LDB4MTYsIDB4RkYsMHhGNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4RDUsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NCwgMHg2RSwweDUwLCAweDg2LDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDk2LDB4MzYsIDB4MUQsMHhEQywgMHhGNiwweDA1LCAweDNCLDB4NjQsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDMwLCAweDI1LDB4OTQsIDB4MDAsMHgyMCwgMHhGMCwweDJGLAorMHgyOCwweDAwLCAweDI2LDB4MTQsIDB4MDAsMHgzOCwgMHhGMCwweDMzLCAweDI4LDB4MDAsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDQsCisweDQyLDB4NTAsIDB4RjYsMHg4NiwgMHg0MiwweDUwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEY1LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg3MiwweDFELCAweEY1LDB4MDIsIDB4MTcsMHg3MCwgMHhGNywweDA0LCAweDQyLDB4NTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDAyLAorMHgwMCwweDFCLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDQyLDB4NDQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRSwweEMwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4ODYsMHgxNiwgMHgwMCwweDAwLCAweEY2LDB4ODIsCisweDAwLDB4RkYsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4NkMsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjcsMHgwNiwKKzB4RTAsMHgwNiwgMHg4NywweDNBLCAweDAwLDB4MDAsIDB4MDYsMHhCMCwgMHgwMCwweDAyLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHhGNiwweDg0LAorMHgzQiwweDY0LCAweDA3LDB4MzAsIDB4MDAsMHgwNCwgMHhGNiwweEJCLCAweDI4LDB4MDAsIDB4ODcsMHgwMiwgMHhGRiwweDM0LCAweDA2LDB4MzAsCisweDAwLDB4MDYsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgzMCwgMHgyNiwweDE0LCAweDAwLDB4MjAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweDI3LDB4MTQsCisweDAwLDB4MzgsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5MCwweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwKKzB4NDIsMHg1MCwgMHhGNiwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGMywweDM4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4NzMsMHgxOSwgMHhGNSwweDgyLCAweDE3LDB4NzAsIDB4RjcsMHgwNCwgMHg0MiwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg1NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4RjUsMHg4MiwgMHgwMCwweDFCLCAweDk1LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHg4NiwgMHg0MiwweDQ0LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwKKzB4MUUsMHhDMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDQwLCAweDI2LDB4MTQsIDB4MDAsMHgyMCwgMHg5NiwweDE2LCAweEZGLDB4QzQsIDB4RjAsMHgzMywKKzB4MjgsMHgwMCwgMHg5MCwweDEzLCAweEZGLDB4RkMsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDI2LDB4MTQsIDB4MDAsMHgzOCwgMHg5NiwweDE2LAorMHhGRiwweEJDLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhEMCwweERDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNiwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhCNSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDg2LDB4MTYsIDB4RkYsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDg2LDB4MTYsCisweEZGLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4RjUsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NzMsMHhFNSwgMHhGNiwweDAyLAorMHgxNywweDcwLCAweEY3LDB4MDQsIDB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsCisweDQyLDB4NTQsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweEY2LDB4MDIsIDB4MDAsMHgxQiwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4RjYsMHgwNiwKKzB4NDIsMHg0NCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHhDMCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwKKzB4MDAsMHgwNCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4RjUsMHg4NSwgMHg0MCwweDgwLCAweDk1LDB4OTYsIDB4RkYsMHhGNCwgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0IsMHg1MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgMHhGRiwweEY0LCAweEY1LDB4MDIsCisweDAwLDB4NjQsIDB4RjUsMHgwNSwgMHgzQiwweEI0LCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNCwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhBNSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjYsMHgwNCwgMHg0RiwweDVDLCAweEY0LDB4MDIsIDB4MDAsMHgwNiwgMHhGNCwweDA1LAorMHg0MiwweDU0LCAweEY1LDB4ODUsIDB4M0IsMHg2QywgMHhGNSwweDg1LCAweDNCLDB4QjgsIDB4OTUsMHgzMiwgMHgwMCwweDAwLCAweDk1LDB4QjIsCisweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3MSwweEIwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDA2LAorMHgzNywweDA0LCAweEY0LDB4MDUsIDB4NDIsMHg0NCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NTAsIDB4RjcsMHgwNCwgMHg0MiwweDUwLCAweEY2LDB4ODYsIDB4NDIsMHg1MCwgMHg3NiwweEI1LAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGNiwweDA0LCAweDZGLDB4MzQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDg2LDB4QjIsCisweDAwLDB4MEMsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDc3LDB4RUMsIDB4QzUsMHgwNCwKKzB4MDAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MTAsIDB4RjcsMHgwNCwgMHhFMCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4NzUsMHgxOCwgMHgwNCwweEIwLCAweDAwLDB4MTAsIDB4ODYsMHhCMiwgMHgwMCwweDE0LCAweEY3LDB4MDQsCisweEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDc1LDB4MUMsIDB4MjAsMHgxQSwKKzB4MDAsMHgwMCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NzUsMHgyOSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweEE2LCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgMHhFMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4NzUsMHg2NCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDc1LDB4NkMsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg2LDB4QTYsIDB4MDAsMHgwNCwgMHhGNywweDA0LAorMHhFMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHg3NSwweDZELCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDc1LDB4N0QsIDB4MjAsMHgyQSwKKzB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NzcsMHhFQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDI2LDB4MTQsCisweDAwLDB4MjAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweDA0LDB4QTAsIDB4MDAsMHgwMiwgMHhGMCwweDI3LCAweDI4LDB4MDAsIDB4RjUsMHg4MiwKKzB4MDAsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MjIsIDB4RjUsMHg5RiwgMHgyOCwweDAwLCAweDAzLDB4QTAsIDB4MDAsMHgxQSwgMHg5MywweDk2LAorMHhGRiwweEQ0LCAweDI1LDB4OTQsIDB4MDAsMHgyMiwgMHg4NSwweEFFLCAweDAwLDB4MDAsIDB4NzcsMHhBRCwgMHgwMCwweDFFLCAweDc3LDB4QkMsCisweEZGLDB4RTUsIDB4QzUsMHhBQywgMHg3RiwweEMwLCAweDc1LDB4QUQsIDB4RkYsMHhGMCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHgwNiwweEE0LCAweDAwLDB4MDIsIDB4MjMsMHgxNCwgMHgwMCwweDFFLCAweDc1LDB4MTUsIDB4MDAsMHgxRSwgMHhGNSwweDlGLAorMHgyOCwweDAwLCAweEYzLDB4ODQsIDB4RTAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4OTMsMHhBMiwgMHgwMCwweDFDLCAweEY1LDB4ODQsCisweEUwLDB4MDQsIDB4NzMsMHg5OSwgMHgwMCwweDFFLCAweDczLDB4OUMsIDB4RkYsMHhFNSwgMHg5MywweDk2LCAweEZGLDB4QUMsIDB4NzMsMHg5NSwKKzB4MDAsMHgxRSwgMHg3MywweDlDLCAweEZGLDB4RTUsIDB4OTMsMHg5NiwgMHhGRiwweENDLCAweDIzLDB4OTQsIDB4MDAsMHg0MiwgMHg5NSwweEEyLAorMHgwMCwweDIwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg3NSwweDk1LCAweDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDk1LDB4OTYsCisweEZGLDB4QjQsIDB4NzUsMHg5NSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHg5NSwweDk2LCAweEZGLDB4QzQsIDB4QzcsMHgzOCwKKzB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweEY0LDB4ODQsIDB4NEYsMHg1OCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweEM0LDB4QTAsIDB4NEEsMHgwMCwgMHg3NCwweEE0LCAweEZGLDB4RkEsIDB4QzUsMHhBNCwgMHgwMCwweDAwLCAweEY1LDB4OUYsCisweDI4LDB4MDAsIDB4ODMsMHg5NiwgMHhGRiwweEFDLCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHg4NSwweDk2LCAweEZGLDB4QjQsIDB4QzcsMHgzOCwgMHgzRiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LAorMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RTQsIDB4ODMsMHg5NiwgMHhGRiwweENDLCAweEM3LDB4MzgsCisweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFOCwgMHgyMywweDE0LCAweDAwLDB4MTYsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwKKzB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LAorMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MjMsMHgxNCwgMHgwMCwweDEyLCAweDc2LDB4MTksCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg1LDB4OTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjMsMHg4MiwKKzB4MDAsMHgwMiwgMHhGMywweEEzLCAweDI4LDB4MDAsIDB4MDQsMHgyMCwgMHgwMCwweDE4LCAweDI1LDB4OTQsIDB4MDAsMHgyMiwgMHg4NSwweEFFLAorMHgwMCwweDAwLCAweDc3LDB4QUQsIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzUsMHhBQywgMHg3RiwweEMwLCAweDc1LDB4QUQsCisweEZGLDB4RjAsIDB4ODMsMHg5NiwgMHhGRiwweEQ0LCAweEY1LDB4QTMsIDB4MjgsMHgwMCwgMHhGNCwweDlGLCAweDI4LDB4MDAsIDB4MjUsMHg5NCwKKzB4MDAsMHg0MiwgMHg4NSwweEFFLCAweDAwLDB4MDAsIDB4NzcsMHhBRCwgMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNSwweEFDLAorMHg3RiwweEMwLCAweDc1LDB4QUQsIDB4RkYsMHhGMCwgMHg0NCwweEFELCAweDAwLDB4MDAsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4ODYsCisweEUwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMywweDQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzgsMHhEOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjAsMHgwNSwgMHg0MCwweDg0LCAweEY3LDB4ODYsCisweEUwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQ1LDB4QTAsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDA0LCAweDZFLDB4NTAsIDB4RjQsMHgwNSwgMHg0MCwweDg0LCAweDg3LDB4M0EsIDB4MUQsMHhEQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4M0IsMHg2NCwgMHhGNSwweDg2LCAweDM2LDB4NzgsIDB4RjUsMHg4NSwgMHg0MiwweDQ0LCAweEYzLDB4ODYsCisweDM1LDB4NjAsIDB4RjMsMHg4NSwgMHg0MiwweDMwLCAweEY1LDB4ODYsIDB4NDIsMHg0NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFGLDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY1LDB4ODYsIDB4NDIsMHg0NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHg3OCwweDg5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RUUsMHgwMCwgMHg3OCwweDUxLCAweEY2LDB4MDYsIDB4NDIsMHg1MCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4NzEsMHhCMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgMHg3OCwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHg0MiwweDUwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjUsMHg4MiwgMHgwMCwweDA2LCAweEY1LDB4ODUsCisweDQyLDB4NTQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywKKzB4MjgsMHgwMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3MiwweEFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LAorMHgzNywweDkwLCAweEY1LDB4ODUsIDB4NDIsMHg0NCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHhGNiwweDA2LCAweDM2LDB4NzgsIDB4RjYsMHgwNSwgMHg0MiwweDQ0LCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHhGNywweDA1LAorMHg0MCwweDgwLCAweEY3LDB4MDUsIDB4NDAsMHg5NCwgMHhGNiwweDg0LCAweDZFLDB4NTAsIDB4RjcsMHgwNSwgMHg0MCwweDkwLCAweDk3LDB4MzYsCisweDFELDB4REMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDAyLAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDAsMHg4MCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4QTgsIDB4RjcsMHgwNCwgMHg0MiwweDUwLCAweEY1LDB4ODYsIDB4NDIsMHg1MCwgMHg3NiwweEFELAorMHgwMCwweDFFLCAweEY0LDB4ODQsIDB4NkYsMHgzNCwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4OTQsMHg5NiwgMHhGRiwweEM0LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4ODYsMHhBNiwgMHgwMCwweDBDLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwKKzB4NzksMHg1NSwgMHhGNiwweDA2LCAweDQyLDB4OUEsIDB4RjcsMHgwNCwgMHg0MiwweDk4LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsCisweDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0MiwweDUwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4ODUsMHgxNiwKKzB4RkYsMHhDNCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4ODYsMHhBQSwgMHgwMCwweDBDLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4ODAsMHhBOCwgMHhGNiwweDA2LCAweDQyLDB4OUEsIDB4ODcsMHgyQSwgMHgwMCwweDEwLCAweDg2LDB4MkEsCisweDAwLDB4MUMsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NzksMHhBOCwgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4ODcsMHgyQSwKKzB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4NzksMHhBQywgMHgyMCwweDM2LAorMHgwMCwweDAwLCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg3QSwweDA1LCAweDI0LDB4OTQsCisweDAwLDB4MjAsIDB4OTQsMHg5NiwgMHhGRiwweEJDLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHhGMCwweDI3LCAweDI4LDB4MDAsIDB4MDUsMHgyOCwKKzB4MDAsMHgxMCwgMHg5NSwweDE2LCAweEZGLDB4QjQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHg3MiwweDUwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NCwweDk2LCAweEZGLDB4QjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsCisweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweEJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEY5LDB4MzQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4ODAsMHhDNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDgwLDB4NkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyNSwweDk0LCAweDAwLDB4MjAsIDB4RjAsMHgyRiwKKzB4MjgsMHgwMCwgMHgwNCwweEEwLCAweDAwLDB4MDIsIDB4OTQsMHg5NiwgMHhGRiwweDVDLCAweEYwLDB4MjcsIDB4MjgsMHgwMCwgMHhGNCwweDgyLAorMHgwMCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHg1QSwgMHhGNCwweEFCLCAweDI4LDB4MDAsIDB4MDcsMHgyMCwgMHgwMCwweDFBLCAweDI1LDB4MTQsCisweDAwLDB4NUEsIDB4ODUsMHgyQSwgMHgwMCwweDAwLCAweDc3LDB4QTksIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzUsMHgyOCwKKzB4N0YsMHhDMCwgMHg3NSwweDI5LCAweEZGLDB4RjAsIDB4NzUsMHhBRCwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHgyMywweDE0LAorMHgwMCwweDFFLCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHhGNSwweDNCLCAweDI4LDB4MDAsIDB4RjQsMHg4NCwgMHhFMCwweDAwLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4OTQsMHhBMiwgMHgwMCwweDFDLCAweEY1LDB4MDQsIDB4RTAsMHgwNCwgMHg4NCwweDk2LCAweEZGLDB4NUMsIDB4OTUsMHgyMiwKKzB4MDAsMHgyMCwgMHg4NywweDE2LCAweEZGLDB4RTAsIDB4MDYsMHhBNCwgMHgwMCwweDAyLCAweDc1LDB4MTUsIDB4MDAsMHgxRSwgMHg3NSwweDI4LAorMHhGRiwweEU1LCAweDk1LDB4MTYsIDB4RkYsMHg1NCwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsCisweEZGLDB4OUMsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5NSwweDE2LCAweEZGLDB4OTQsIDB4NzQsMHg5NSwKKzB4MDAsMHgxRSwgMHg4NSwweDE2LCAweEZGLDB4NUMsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkYsMHg4QywgMHg4NCwweDk2LAorMHhGRiwweDU0LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDg3LDB4MUEsCisweDAwLDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweDlDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDE5LAorMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsCisweDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NCwweDk2LCAweEZGLDB4OTQsIDB4QzcsMHgzOCwKKzB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LAorMHhGRiwweEU4LCAweDIzLDB4MTQsIDB4MDAsMHgxNiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgyMywweDE0LCAweDAwLDB4MTIsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwKKzB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODUsMHgxNiwgMHhGRiwweDhDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsCisweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4MDIsIDB4RjQsMHhBMywKKzB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NUEsIDB4ODUsMHgyQSwgMHgwMCwweDAwLCAweDc3LDB4QTksIDB4MDAsMHgxRSwgMHg3NywweEJDLAorMHhGRiwweEU1LCAweEM1LDB4MjgsIDB4N0YsMHhDMCwgMHg3NSwweDI5LCAweEZGLDB4RjAsIDB4MDcsMHgyMCwgMHgwMCwweDE4LCAweEY1LDB4M0IsCisweDI4LDB4MDAsIDB4OTQsMHgxNiwgMHhGRiwweEFDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgyNiwweDE0LCAweDAwLDB4MzgsIDB4MjQsMHg5NCwgMHgwMCwweDVBLCAweDg0LDB4QTYsIDB4MDAsMHgwMCwgMHg3NywweEE1LAorMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNCwweEE0LCAweDdGLDB4QzAsIDB4NzQsMHhBNSwgMHhGRiwweEYwLCAweDA1LDB4QTAsCisweDAwLDB4MDIsIDB4MDYsMHhBQywgMHgwMCwweDAyLCAweDIzLDB4OTQsIDB4MDAsMHgzNiwgMHg3NSwweDFELCAweDAwLDB4MUUsIDB4NzUsMHgyOCwKKzB4RkYsMHhFNSwgMHgwNywweDIwLCAweDAwLDB4MUEsIDB4RjQsMHhCMywgMHgyOCwweDAwLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLAorMHhGRiwweEU1LCAweDk1LDB4MTYsIDB4RkYsMHg1NCwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsCisweEZGLDB4NUMsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5NSwweDE2LCAweEZGLDB4N0MsIDB4NzQsMHg5NSwKKzB4MDAsMHgxRSwgMHg4NSwweDE2LCAweEZGLDB4QzQsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkYsMHg3NCwgMHg4NSwweDJBLAorMHgwMCwweDM0LCAweDI0LDB4OTQsIDB4MDAsMHg1QSwgMHg5NSwweDE2LCAweEZGLDB4ODQsIDB4ODQsMHhBNiwgMHgwMCwweDAwLCAweDc3LDB4QTUsCisweDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEM0LDB4QTQsIDB4N0YsMHhDMCwgMHg3NCwweEE1LCAweEZGLDB4RjAsIDB4MjUsMHgxNCwKKzB4MDAsMHg1QSwgMHhGNCwweEFGLCAweDI4LDB4MDAsIDB4ODUsMHgyQSwgMHgwMCwweDAwLCAweDc3LDB4QTksIDB4MDAsMHgxRSwgMHg3NywweEJDLAorMHhGRiwweEU1LCAweEM1LDB4MjgsIDB4N0YsMHhDMCwgMHg3NSwweDI5LCAweEZGLDB4RjAsIDB4ODQsMHg5NiwgMHhGRiwweEM0LCAweEY1LDB4M0IsCisweDI4LDB4MDAsIDB4ODQsMHhBNiwgMHgwMCwweDEwLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHg5NCwweEEyLCAweDAwLDB4MUMsIDB4ODUsMHgyQSwKKzB4MDAsMHgxNCwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkYsMHg2QywgMHg5NSwweDIyLAorMHgwMCwweDIwLCAweDg3LDB4MTYsIDB4RkYsMHhDOCwgMHg4NSwweDE2LCAweEZGLDB4NTQsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDg3LDB4MUUsIDB4MDAsMHgwMCwgMHg4NCwweDk2LCAweEZGLDB4NUMsIDB4QzcsMHgzOCwKKzB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LAorMHhGRiwweENDLCAweDIzLDB4OTQsIDB4MDAsMHgzMiwgMHg3NiwweDFELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDg1LDB4MTYsCisweEZGLDB4N0MsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxRSwKKzB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LAorMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RDAsIDB4MjMsMHg5NCwgMHgwMCwweDJFLCAweDc2LDB4MUQsCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg0LDB4OTYsIDB4RkYsMHg3NCwgMHg4NSwweDE2LAorMHhGRiwweDZDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEQ0LCAweDIzLDB4OTQsIDB4MDAsMHgyQSwgMHg3NiwweDFELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFFLAorMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsCisweDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEQ4LCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjQsMHg4MiwgMHgwMCwweDAyLCAweEY0LDB4QTMsIDB4MjgsMHgwMCwgMHgwNywweDIwLAorMHgwMCwweDE4LCAweDI1LDB4MTQsIDB4MDAsMHg3QSwgMHg4NSwweDJBLCAweDAwLDB4MDAsIDB4NzcsMHhBOSwgMHgwMCwweDFFLCAweDc3LDB4QkMsCisweEZGLDB4RTUsIDB4QzUsMHgyOCwgMHg3RiwweEMwLCAweDc1LDB4MjksIDB4RkYsMHhGMCwgMHg4NCwweDk2LCAweEZGLDB4QzQsIDB4RjUsMHgzQiwKKzB4MjgsMHgwMCwgMHg4NywweDI2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgyNCwgMHhGNywweDA0LAorMHg0RiwweDU4LCAweEU2LDB4MDAsIDB4N0UsMHhGOSwgMHg5NCwweDE2LCAweEZGLDB4NTQsIDB4QzcsMHgyMCwgMHg3MiwweDAwLCAweEY2LDB4ODQsCisweDZFLDB4NTAsIDB4ODYsMHgyNiwgMHgwMCwweDJDLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHgyNSwweDE0LCAweDAwLDB4NUEsIDB4ODQsMHgyQSwKKzB4MDAsMHgwMCwgMHg3NywweEE5LCAweDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEM0LDB4MjAsIDB4N0YsMHhDMCwgMHg3NCwweDIxLAorMHhGRiwweEYwLCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHg4NiwweEI2LCAweDFELDB4REMsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEMwLDB4MzIsCisweDZBLDB4MDAsIDB4NDYsMHg4QywgMHgwMCwweDAxLCAweEQ2LDB4ODAsIDB4MEEsMHg2OCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RjYsMHg4NiwKKzB4NDAsMHg5OCwgMHhFNiwweDAwLCAweDdFLDB4QzAsIDB4QzMsMHhCOCwgMHg2OCwweDAwLCAweEM1LDB4ODQsIDB4MDAsMHgwMCwgMHg4NiwweEE2LAorMHgwMCwweDI0LCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweDdFLDB4NTQsIDB4MDMsMHgyNCwgMHgwMCwweDI0LCAweDg2LDB4QTYsIDB4MDAsMHgyOCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg3RSwweDU4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLAorMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDdFLDB4NjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsCisweDAwLDB4MDAsIDB4ODYsMHg5QSwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDdFLDB4QTAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHg3RSwweEE4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweDlBLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgMHhFMCwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4N0UsMHhBOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg3RSwweEI5LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLAorMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDdFLDB4QzUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4MDIsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEY0LDB4MUYsIDB4MjgsMHgwMCwgMHg4NCwweDk2LCAweEZGLDB4NTQsIDB4ODUsMHgxNiwKKzB4RkYsMHhDNCwgMHhGNiwweDg2LCAweDQwLDB4OUEsIDB4QzcsMHgyNCwgMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHg4NiwweDJBLAorMHgwMCwweDMwLCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweEUwLDB4MDAsCisweDdGLDB4NEMsIDB4RjYsMHgzQiwgMHgyOCwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHg1NCwgMHhGNiwweDA2LCAweDQwLDB4OTgsIDB4QzcsMHgyNCwKKzB4NzIsMHgwMCwgMHg3NywweDM4LCAweEZGLDB4RkEsIDB4QzYsMHhCOCwgMHgwMCwweDAwLCAweDQ2LDB4QjUsIDB4MDAsMHgwMCwgMHg3NiwweEI1LAorMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NjAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4RjUsMHgzNywgMHgyOCwweDAwLCAweDQ3LDB4MzksCisweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NUEsIDB4ODQsMHhBNiwKKzB4MDAsMHgwMCwgMHg3NywweEE1LCAweDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEM0LDB4QTQsIDB4N0YsMHhDMCwgMHg3NCwweEE1LAorMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMiwgMHhGNCwweEJCLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweDg1LDB4MTYsCisweEZGLDB4NTQsIDB4ODQsMHg5NiwgMHhGRiwweEFDLCAweEM2LDB4QTgsIDB4NzIsMHgwMCwgMHg3NiwweEI0LCAweEZGLDB4RkEsIDB4MDYsMHgyNCwKKzB4MDAsMHgxQSwgMHhGNiwweEIzLCAweDI4LDB4MDAsIDB4QzcsMHgyNCwgMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHgwNiwweEE4LAorMHgwMCwweDFBLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg0NywweDM5LCAweDAwLDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4MjQsCisweDAwLDB4MUMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4MDQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMywweDQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LAorMHg0RiwweDU4LCAweDg0LDB4OTYsIDB4RkYsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyNCwgMHg3MiwweDAwLCAweDc3LDB4MzgsCisweEZGLDB4RkEsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDI0LCAweDAwLDB4MUMsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHhGNSwweDA0LCAweDRGLDB4NUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjMsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDc4LDB4RDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY2LDB4ODQsIDB4NkUsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwKKzB4MUQsMHhEQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MzYsIDB4MUQsMHhEQywgMHg4NywweDM2LAorMHgxRCwweERDLCAweEYwLDB4MDUsIDB4NDAsMHg4NCwgMHhGNCwweDg2LCAweEUwLDB4MDAsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhENSwweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDA1LCAweDQwLDB4ODQsIDB4RjcsMHgwNCwKKzB4NkUsMHg1MCwgMHhGMCwweDA1LCAweDQyLDB4NUMsIDB4ODcsMHgzQSwgMHgxRCwweERDLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA1LAorMHgzQiwweDY0LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNSwweDA2LCAweDNBLDB4NEMsIDB4RjUsMHgwNSwgMHg0MiwweDQ0LCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNCwweDgyLCAweDAwLDB4MUMsIDB4MjAsMHgzMiwKKzB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDgwLDB4NjAsIDB4QjQsMHhCQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNSwweDA2LAorMHgzNSwweEVDLCAweEUwLDB4MDAsIDB4ODAsMHg4QywgMHhGNSwweDA1LCAweDQyLDB4MzAsIDB4MjAsMHgzMiwgMHgwMCwweDAxLCAweEU2LDB4MDAsCisweDgwLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNCwweDg2LCAweDM1LDB4NjAsIDB4RjQsMHg4NSwgMHg0MiwweDMwLCAweEY1LDB4MDYsIDB4NDIsMHg0NCwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFGLDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsCisweDgwLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg5OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLAorMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjUsMHg4NiwKKzB4NDIsMHg0NCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjAsMHhFNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDgxLDB4NjEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDQyLDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweDgxLDB4MjksIDB4RjYsMHgwNiwKKzB4NDIsMHg1MCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3MiwweEFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLAorMHg4MSwweDYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4NTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4RjUsMHg4MiwgMHgwMCwweDA2LCAweEY1LDB4ODUsIDB4NDIsMHg1NCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHg3MywweDRDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDg2LCAweDM4LDB4MUMsIDB4RjUsMHg4NSwgMHg0MiwweDQ0LCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg1OCwgMHhGNywweDA0LAorMHg0MiwweDUwLCAweEY2LDB4ODYsIDB4NDIsMHg1MCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEY2LDB4MDQsCisweDZGLDB4MzQsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDg2LDB4QjIsIDB4MDAsMHgwQywgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDgyLDB4NTAsIDB4RjQsMHg4MiwgMHgwMCwweDAwLCAweEM1LDB4MDQsIDB4MDAsMHgwMCwgMHg4NiwweEIyLAorMHgwMCwweDEwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHhDNSwweEE0LCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweDgxLDB4RTQsIDB4MDQsMHgzMCwgMHgwMCwweDEwLCAweDg2LDB4QjIsIDB4MDAsMHgxNCwgMHhGNywweDA0LCAweEUwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg4MSwweEU4LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLAorMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDgxLDB4RjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4ODYsMHhBMiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4RTAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDgyLDB4MzAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHg4MiwweDM4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEEyLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwgMHhFMCwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4ODIsMHgzOSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg4MiwweDQ5LCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLAorMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDgyLDB4NTksIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEY0LDB4ODIsCisweDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODcsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4MjAsIDB4MDAsMHgwMiwgMHhGMCwweDNCLAorMHgyOCwweDAwLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHhGNCwweDA1LCAweDNCLDB4QjAsIDB4MDYsMHhBMCwgMHgwMCwweDE0LCAweEM3LDB4MjAsCisweDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEEwLCAweDAwLDB4MTYsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4RjMsMHgyMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyNiwweDE0LCAweDAwLDB4MjAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweDA0LDB4QTAsCisweDAwLDB4MDIsIDB4RjAsMHgyNywgMHgyOCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MkEsIDB4RjMsMHgxRiwKKzB4MjgsMHgwMCwgMHgwNywweDIwLCAweDAwLDB4MUEsIDB4MjMsMHg5NCwgMHgwMCwweDJBLCAweDgzLDB4OUUsIDB4MDAsMHgwMCwgMHg3NywweDlELAorMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDMywweDlDLCAweDdGLDB4QzAsIDB4NzMsMHg5RCwgMHhGRiwweEYwLCAweDc2LDB4MzEsCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDA2LDB4QTQsIDB4MDAsMHgwMiwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4RjMsMHhCQiwKKzB4MjgsMHgwMCwgMHhGMywweDA0LCAweEUwLDB4MDAsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweDkzLDB4MjIsIDB4MDAsMHgxQywgMHhGMywweDg0LAorMHhFMCwweDA0LCAweDIzLDB4MTQsIDB4MDAsMHgxRSwgMHg5MywweDE2LCAweEZGLDB4QTQsIDB4NzUsMHg5OSwgMHgwMCwweDFFLCAweDc1LDB4QUMsCisweEZGLDB4RTUsIDB4NzMsMHgxNSwgMHgwMCwweDFFLCAweDczLDB4MTgsIDB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZGLDB4Q0MsIDB4ODMsMHgxNiwKKzB4RkYsMHhBNCwgMHg5MywweEEyLCAweDAwLDB4MjAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweDczLDB4OTUsIDB4MDAsMHgxRSwgMHg3MywweDlDLAorMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhBQywgMHg3MywweDk1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4OTMsMHg5NiwKKzB4RkYsMHhDNCwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHgyMywweDk0LCAweDAwLDB4MUEsIDB4OTMsMHg5NiwgMHhGRiwweEE0LCAweDc2LDB4MUQsCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU4LCAweDIzLDB4MTQsCisweDAwLDB4MTYsIDB4OTMsMHgxNiwgMHhGRiwweEE0LCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg4MywweDk2LCAweEZGLDB4QUMsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDNGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsCisweDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgyMywweDE0LCAweDAwLDB4MTIsIDB4OTMsMHgxNiwKKzB4RkYsMHhBNCwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4ODMsMHg5NiwgMHhGRiwweENDLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHgzRiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxNiwKKzB4RkYsMHhGMCwgMHg4MywweDE2LCAweEZGLDB4QzQsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4MzcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHhGMywweDgyLCAweDAwLDB4MDIsIDB4RjMsMHhBMywgMHgyOCwweDAwLCAweDIzLDB4MTQsCisweDAwLDB4MkEsIDB4ODMsMHgxQSwgMHgwMCwweDAwLCAweDc3LDB4OTksIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzMsMHgxOCwKKzB4N0YsMHhDMCwgMHg3MywweDE5LCAweEZGLDB4RjAsIDB4MDcsMHgyMCwgMHgwMCwweDE4LCAweEYzLDB4M0IsIDB4MjgsMHgwMCwgMHg5NCwweDE2LAorMHhGRiwweERDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4MjAsCisweDAwLDB4MDIsIDB4MjMsMHg5NCwgMHgwMCwweDJBLCAweDgzLDB4OUUsIDB4MDAsMHgwMCwgMHg3NywweDlELCAweDAwLDB4MUUsIDB4NzcsMHhCQywKKzB4RkYsMHhFNSwgMHhDMywweDlDLCAweDdGLDB4QzAsIDB4NzMsMHg5RCwgMHhGRiwweEYwLCAweDI0LDB4ODAsIDB4MDAsMHgwNywgMHgwNSwweDIwLAorMHgwMCwweDBBLCAweEYzLDB4QkIsIDB4MjgsMHgwMCwgMHgyMCwweDI2LCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgMHg4NCwweEUwLCAweDA2LDB4MjgsCisweDAwLDB4MEUsIDB4ODYsMHhCMiwgMHgwMCwweDAwLCAweDc3LDB4MzEsIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4NzUsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4MDUsMHgyOCwgMHgwMCwweDAyLCAweDA0LDB4QTQsIDB4MDAsMHgwMSwgMHhDNiwweEI0LAorMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwgMHg3NCwweDAwLCAweEY2LDB4QjMsCisweDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHhGRiwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHhDNywweDM4LCAweDM0LDB4MDAsIDB4RTAsMHgwMCwgMHg4NCwweDg4LCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHgwNSwweDIwLAorMHgwMCwweDI2LCAweDg2LDB4MkEsIDB4MDAsMHgwMCwgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4ODMsMHg5NiwgMHhGRiwweERDLCAweEYzLDB4MDIsIDB4MDAsMHhGRiwgMHg5NCwweDE2LCAweEZGLDB4QkMsIDB4QzcsMHgxQywKKzB4NUEsMHgwMCwgMHg3NywweDM4LCAweEZGLDB4RkEsIDB4QzYsMHgzMCwgMHg2RiwweEMwLCAweDc2LDB4MzEsIDB4RkYsMHhGMCwgMHg0NywweDM5LAorMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4MzQsMHgwMCwgMHhGNiwweDgyLCAweEZGLDB4MDAsIDB4QzYsMHgzMCwgMHg2QywweDAwLCAweEM3LDB4MzgsCisweDYwLDB4MDAsIDB4RjYsMHg4NCwgMHgzQiwweDZDLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHhDNSwweEEwLCAweDVBLDB4MDAsIDB4NzUsMHhBQywKKzB4RkYsMHhGQSwgMHg4MywweDE2LCAweEZGLDB4REMsIDB4MDcsMHgzNCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4M0IsMHg2QywgMHgwNywweDIwLAorMHgwMCwweDNBLCAweEY2LDB4QkIsIDB4MjgsMHgwMCwgMHgwNywweDIwLCAweDAwLDB4MzYsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEYzLDB4ODIsCisweDAwLDB4MDMsIDB4RjMsMHhBMywgMHgyOCwweDAwLCAweDA3LDB4MTgsIDB4MDAsMHgxQSwgMHhGNSwweEJCLCAweDI4LDB4MDAsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4MjAsIDB4MDAsMHgwMiwgMHhGMCwweDNCLAorMHgyOCwweDAwLCAweDI0LDB4ODAsIDB4MDAsMHgwNywgMHgwNSwweDIwLCAweDAwLDB4MEEsIDB4MjAsMHgyNiwgMHgwMCwweDA3LCAweEVFLDB4MDAsCisweDg1LDB4RDQsIDB4MDYsMHgyOCwgMHgwMCwweDBFLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg3NywweDMxLCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHgwNCwweEE0LAorMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgMHhGRiwweDAwLCAweEM2LDB4QjQsCisweDc0LDB4MDAsIDB4RjYsMHhCMywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHhGMywweDgyLCAweDAwLDB4RkYsIDB4QzcsMHgzOCwKKzB4NUYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzcsMHgzOCwgMHgzQywweDAwLCAweEUwLDB4MDAsIDB4ODUsMHg3QywgMHhGNywweDMzLAorMHgyOCwweDAwLCAweDA1LDB4QTAsIDB4MDAsMHgyNiwgMHg4NiwweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzUsMHgyMCwgMHgwMCwweDAwLCAweDI0LDB4MDAsIDB4MDAsMHgwNywgMHhGMywweDAyLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwKKzB4RkYsMHhBNCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4ODMsMHg5NiwgMHhGRiwweEJDLCAweDI0LDB4ODAsIDB4MDAsMHgwRSwgMHhDNywweDFDLAorMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHhDNiwweDMwLCAweDZGLDB4QzAsIDB4NzYsMHgzMSwgMHhGRiwweEYwLCAweDQ3LDB4MzksCisweDAwLDB4MDAsIDB4RjYsMHg4MiwgMHgwMCwweEZGLCAweEM3LDB4MzgsIDB4NkMsMHgwMCwgMHhGNiwweDgyLCAweEZGLDB4MDAsIDB4QzYsMHgzMCwKKzB4NkMsMHgwMCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4RjYsMHg4NCwgMHgzQiwweDZDLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNywweDM0LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4M0IsMHg2QywgMHgwNywweDI4LCAweDAwLDB4M0EsIDB4RjYsMHhCQiwgMHgyOCwweDAwLCAweDA3LDB4MjgsCisweDAwLDB4MzYsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweEYzLDB4MDIsIDB4MDAsMHgwMywgMHhGMywweDJCLCAweDI4LDB4MDAsIDB4MjAsMHgyMiwKKzB4MDAsMHgwNywgMHhFRSwweDAwLCAweDg2LDB4OTQsIDB4QzYsMHgyOCwgMHg0OCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgyNiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDQsMHhBNCwgMHgwMCwweDAyLCAweDA0LDB4MjAsCisweDAwLDB4MDEsIDB4ODMsMHg5NiwgMHhGRiwweEE0LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4RjYsMHg4MiwKKzB4RkYsMHgwMCwgMHhDNywweDM4LCAweDZDLDB4MDAsIDB4QzcsMHgxQywgMHg3MCwweDAwLCAweEUwLDB4MDAsIDB4ODYsMHg1MCwgMHhGNywweDMzLAorMHgyOCwweDAwLCAweDA2LDB4MjgsIDB4MDAsMHgyNiwgMHg4NiwweEIyLCAweDAwLDB4MDAsIDB4NzcsMHgzMSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwKKzB4NzQsMHgwMCwgMHhGNiwweEIzLCAweDI4LDB4MDAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDQsIDB4M0IsMHhCMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDE2LCAweEZGLDB4QjQsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweEQ0LDB4MkMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhCNCwgMHhGMCwweDA1LCAweDQwLDB4N0MsIDB4ODMsMHg5NiwKKzB4RkYsMHhCQywgMHgyMywweDAwLCAweDAwLDB4MDcsIDB4RjMsMHgwNSwgMHg0MiwweDU4LCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNiwweDA2LAorMHg0MiwweDUwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjMsMHgwNiwgMHgzOSwweDM0LCAweEYzLDB4MDUsCisweDQyLDB4NDQsIDB4RjUsMHgwNSwgMHg0MCwweDc0LCAweEYzLDB4ODUsIDB4NDIsMHg2MCwgMHhGMywweDgyLCAweDAwLDB4MDYsIDB4RjMsMHg4NSwKKzB4NDIsMHg1NCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEY2LDB4ODQsIDB4MkQsMHgzOCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHgwNiwweDM0LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDYsCisweDJDLDB4MjgsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEYzLDB4ODIsIDB4MDAsMHgxQywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4ODcsMHg0QywgMHhCMywweEI2LCAweDcwLDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEYzLDB4MDYsIDB4NDIsMHg0NCwgMHg5MywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFGLDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg0OCwgMHhGMywweDg2LAorMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4ODksMHhFRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4ODcsMHhDOSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDczLDB4NEMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsCisweDg5LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgyNiwweDE0LCAweDAwLDB4MjAsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweDA1LDB4QTAsIDB4MDAsMHgwMiwgMHhGMCwweDJGLAorMHgyOCwweDAwLCAweEYzLDB4ODIsIDB4MDAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MjIsIDB4RjMsMHhBNywgMHgyOCwweDAwLCAweDA0LDB4QTAsCisweDAwLDB4MUEsIDB4OTQsMHg5NiwgMHhGRiwweEQ0LCAweDIzLDB4OTQsIDB4MDAsMHgyMiwgMHg4MywweDlFLCAweDAwLDB4MDAsIDB4NzcsMHg5RCwKKzB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzMsMHg5QywgMHg3RiwweEMwLCAweDczLDB4OUQsIDB4RkYsMHhGMCwgMHg3NiwweDMxLAorMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHgwNiwweEFDLCAweDAwLDB4MDIsIDB4MjMsMHgxNCwgMHgwMCwweDFFLCAweDc1LDB4MTksCisweDAwLDB4MUUsIDB4RjMsMHhBNywgMHgyOCwweDAwLCAweEY0LDB4ODQsIDB4RTAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4OTQsMHhBMiwKKzB4MDAsMHgxQywgMHhGMywweDg0LCAweEUwLDB4MDQsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LAorMHhGRiwweEI0LCAweDc0LDB4OTUsIDB4MDAsMHgxRSwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4OTQsMHg5NiwgMHhGRiwweENDLCAweDg0LDB4OTYsCisweEZGLDB4QjQsIDB4OTMsMHhBMiwgMHgwMCwweDIwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg3MywweDk1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywKKzB4RkYsMHhFNSwgMHg5MywweDk2LCAweEZGLDB4QkMsIDB4NzMsMHg5NSwgMHgwMCwweDFFLCAweDczLDB4OUMsIDB4RkYsMHhFNSwgMHg5MywweDk2LAorMHhGRiwweEM0LCAweDgzLDB4OTYsIDB4RkYsMHhCQywgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsCisweDI4LDB4MDAsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHhDNSwweEEwLCAweDVBLDB4MDAsIDB4NzUsMHhBQywKKzB4RkYsMHhGQSwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHgyMywweDE0LCAweDAwLDB4MUEsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4NDUsMHhBRCwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg0LDB4OTYsIDB4RkYsMHhDQywgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsCisweEZGLDB4RTgsIDB4MjMsMHgxNCwgMHgwMCwweDE2LCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDIzLDB4MTQsIDB4MDAsMHgxMiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4MywweDk2LCAweEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwKKzB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMiwgMHhGNCwweEEzLAorMHgyOCwweDAwLCAweDA0LDB4MjAsIDB4MDAsMHgxOCwgMHgyMywweDk0LCAweDAwLDB4MjIsIDB4ODMsMHg5RSwgMHgwMCwweDAwLCAweDc3LDB4OUQsCisweDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEMzLDB4OUMsIDB4N0YsMHhDMCwgMHg3MywweDlELCAweEZGLDB4RjAsIDB4ODQsMHg5NiwKKzB4RkYsMHhENCwgMHhGMywweEEzLCAweDI4LDB4MDAsIDB4RjMsMHg4MiwgMHgwMCwweDAxLCAweEYzLDB4QTcsIDB4MjgsMHgwMCwgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweEY0LDB4ODYsIDB4RTAsMHgwMCwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NCwgMHg0RiwweDVDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIzLDB4NDAsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweEQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDg2LAorMHgzNiwweDc4LCAweEY0LDB4ODUsIDB4NDIsMHg0NCwgMHhGMCwweDA1LCAweDQwLDB4ODQsIDB4RjYsMHg4NCwgMHg0RiwweDVDLCAweEY3LDB4MDIsCisweDAwLDB4NjQsIDB4OTcsMHgzNiwgMHgwMCwweDAwLCAweDkwLDB4MzYsIDB4MDAsMHgwNCwgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4NDAsMHg4NCwgMHhGMywweDg2LCAweDM1LDB4RUMsIDB4RjMsMHg4NSwgMHg0MiwweDMwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg5MCwgMHhGNywweDA0LCAweDQyLDB4NjAsIDB4RjUsMHgwMiwKKzB4MDAsMHgwMCwgMHgwNSwweEI4LCAweDAwLDB4MTgsIDB4RjYsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4OEEsMHg3MCwgMHhDNywweDMwLCAweDYwLDB4MDAsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDA3LDB4MzgsCisweDAwLDB4MEUsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweEZGLCAweEM2LDB4QjQsIDB4NzQsMHgwMCwgMHhDMCwweDM2LAorMHg1MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDhBLDB4NzEsIDB4MDcsMHgzMCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4OEEsMHgxOCwgMHhGNywweDA1LCAweDQyLDB4NTgsIDB4RjQsMHgwNCwKKzB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyMiwgMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4OEQsMHg5NCwgMHgyNCwweDk0LAorMHgwMCwweDM2LCAweEY2LDB4MDQsIDB4NDIsMHg2MCwgMHgyNSwweDE0LCAweDAwLDB4MzgsIDB4MjMsMHg5NCwgMHgwMCwweDIwLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLAorMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDMwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwKKzB4MDAsMHgyOCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg5NCwweDEzLCAweEZGLDB4RkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsCisweEZGLDB4N0MsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNiwweDA0LCAweDQyLDB4NjAsIDB4MjQsMHg5NCwgMHgwMCwweDdFLCAweDI1LDB4MTQsIDB4MDAsMHg4MCwgMHgyMywweDk0LAorMHgwMCwweDY4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDdDLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHg3QSwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NzgsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDc2LCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHg3NCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4NzIsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDcwLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LAorMHhGRiwweDc0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhEMiwweDU4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDc0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwKKzB4NDIsMHg1OCwgMHgyMywweDk0LCAweDAwLDB4NTAsIDB4QzcsMHgwMCwgMHg3MiwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LAorMHhGRiwweDZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDRiwweDI0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDZDLCAweEY2LDB4ODYsIDB4NDIsMHg1MCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NCwKKzB4NDIsMHg1OCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4OTYsCisweEZGLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4RjMsMHgzOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OEQsMHg5NSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsCisweDQyLDB4NTgsIDB4RjcsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwKKzB4OEQsMHhENCwgMHhGMywweDgyLCAweDE3LDB4NzAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LAorMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHg4MiwgMHgwMCwweDFDLCAweDIwLDB4MzIsCisweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg4RCwweEY0LCAweEIzLDB4QkEsIDB4NjgsMHgwMiwgMHhFMCwweDAwLCAweDhELDB4RjQsIDB4RjAsMHgwNSwKKzB4MkQsMHgzOCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwgMHgwMCwweDFCLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDg2LAorMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRSwweEMwLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLAorMHgwMCwweDg4LCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHhGNiwweDg2LCAweDQyLDB4NTAsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweEYzLDB4ODQsCisweDZGLDB4MzQsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4ODYsMHg5RSwKKzB4MDAsMHgwQywgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4OEUsMHg2NSwgMHhGNiwweDA2LAorMHg0MiwweEEwLCAweEY3LDB4MDQsIDB4NDIsMHhBMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweDk0LDB4RTQsIDB4RjcsMHgzMywKKzB4MjgsMHgwMCwgMHhGNiwweDA0LCAweDQyLDB4NjAsIDB4MjQsMHg5NCwgMHgwMCwweDM2LCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHgyMywweDk0LAorMHgwMCwweDM4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4ODUsMHgyQSwgMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4OTUsMHgxNiwgMHhGRiwweEJDLCAweEY3LDB4MUYsIDB4MjgsMHgwMCwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHg4NSwweDE2LCAweEZGLDB4QzQsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDMwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwKKzB4MDAsMHgyOCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDJBLCAweDAwLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDI3LDB4MTQsIDB4MDAsMHgyMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg3LDB4MUUsIDB4MDAsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweDhGLDB4RjAsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDg3LDB4MUUsIDB4MDAsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDhGLDB4RjQsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDM2LAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTAsMHg0MSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHgxNiwgMHhGRiwweEM0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDUsMHgyOCwgMHgwMCwweDEwLCAweDk1LDB4MTYsIDB4RkYsMHhCNCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDcyLDB4NTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHhCNCwgMHgyNywweDE0LAorMHgwMCwweDIwLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweEY5LDB4MzQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4OTQsMHhFNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHgxNiwKKzB4RkYsMHhCQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTQsMHhCQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENCLDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDYyLCAweEY1LDB4MUYsIDB4MjgsMHgwMCwgMHg3NSwweDk1LCAweDAwLDB4MUUsIDB4NzUsMHhBQywKKzB4RkYsMHhFNSwgMHgwNiwweDIwLCAweDAwLDB4MDIsIDB4MDYsMHhCMCwgMHgwMCwweDAyLCAweDIzLDB4MTQsIDB4MDAsMHgxRSwgMHg3MywweDk5LAorMHgwMCwweDFFLCAweDczLDB4OUMsIDB4RkYsMHhFNSwgMHg5MywweDk2LCAweEZGLDB4NzQsIDB4NzUsMHgxNSwgMHgwMCwweDFFLCAweDc1LDB4MjgsCisweEZGLDB4RTUsIDB4OTUsMHgxNiwgMHhGRiwweDdDLCAweDczLDB4OTUsIDB4MDAsMHgxRSwgMHg3MywweDlDLCAweEZGLDB4RTUsIDB4OTMsMHg5NiwKKzB4RkYsMHg4QywgMHg4NSwweDE2LCAweEZGLDB4QzQsIDB4NzMsMHg5NSwgMHgwMCwweDFFLCAweDkzLDB4OTYsIDB4RkYsMHg4NCwgMHg4NSwweDJBLAorMHgwMCwweDM0LCAweDIzLDB4OTQsIDB4MDAsMHg2MiwgMHg5NSwweDE2LCAweEZGLDB4QUMsIDB4RjAsMHgzMywgMHgyOCwweDAwLCAweDA1LDB4MjAsCisweDAwLDB4MUEsIDB4OTUsMHgxNiwgMHhGRiwweDk0LCAweDgzLDB4OUUsIDB4MDAsMHgwMCwgMHg3NywweDlELCAweDAwLDB4MUUsIDB4NzcsMHhCQywKKzB4RkYsMHhFNSwgMHhDMywweDlDLCAweDdGLDB4QzAsIDB4NzMsMHg5RCwgMHhGRiwweEYwLCAweDc0LDB4OTUsIDB4MDAsMHgxRSwgMHhGMywweEFCLAorMHgyOCwweDAwLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHg3NCwweEE0LCAweEZGLDB4RTUsIDB4ODUsMHgyQSwgMHgwMCwweDEwLCAweDgzLDB4OTYsCisweEZGLDB4QzQsIDB4OTUsMHgyMiwgMHgwMCwweDFDLCAweDgzLDB4OUUsIDB4MDAsMHgxNCwgMHg4NSwweDE2LCAweEZGLDB4ODQsIDB4OTMsMHhBMiwKKzB4MDAsMHgyMCwgMHg4NywweDE2LCAweEZGLDB4RTAsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweDk1LDB4MTYsIDB4RkYsMHg4NCwgMHhGMywweDg0LAorMHg0RiwweDU4LCAweDg1LDB4MTYsIDB4RkYsMHg3NCwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsCisweDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDkzLDB4OTYsIDB4RkYsMHhBNCwgMHhDMCwweDIyLCAweDNBLDB4MDAsIDB4ODMsMHg5NiwKKzB4RkYsMHg3QywgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHgyMywweDE0LCAweDAwLDB4MUEsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxQSwKKzB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LAorMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RTgsIDB4MjMsMHgxNCwgMHgwMCwweDE2LCAweDc2LDB4MTksCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4M0YsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg1LDB4MTYsIDB4RkYsMHg4QywgMHg4MywweDk2LAorMHhGRiwweDg0LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEVDLCAweDIzLDB4MTQsIDB4MDAsMHgxMiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsCisweDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDNGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAyLCAweEY1LDB4MjMsIDB4MjgsMHgwMCwgMHgyMywweDk0LAorMHgwMCwweDUyLCAweDgzLDB4OUUsIDB4MDAsMHgwMCwgMHg3NywweDlELCAweDAwLDB4MUUsIDB4NzcsMHhCQywgMHhGRiwweEU1LCAweEMzLDB4OUMsCisweDdGLDB4QzAsIDB4NzMsMHg5RCwgMHhGRiwweEYwLCAweDAzLDB4MjAsIDB4MDAsMHgxOCwgMHhFNiwweDAwLCAweDkyLDB4MzAsIDB4RjMsMHg5QiwKKzB4MjgsMHgwMCwgMHhGNywweDA0LCAweDQyLDB4NzAsIDB4RTAsMHgwMCwgMHg5MiwweDlDLCAweEY2LDB4MDYsIDB4NDIsMHg3MiwgMHg4NSwweDE2LAorMHhGRiwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEFBLCAweDAwLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzQsCisweDAwLDB4MDcsIDB4MjAsMHgzQSwgMHgwMCwweDBFLCAweEUyLDB4MDAsIDB4OTIsMHg5NCwgMHhDNywweDM0LCAweDY4LDB4MDAsIDB4RjUsMHg4NCwKKzB4NDIsMHg2MCwgMHhGMywweDgyLCAweDAwLDB4RkYsIDB4QzcsMHgyQywgMHg3MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgyNiwgMHg4NiwweEJBLAorMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHg3NCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsCisweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4M0MsMHgwMCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4NDcsMHgwQywKKzB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTIsMHhDOSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg3NCwgMHhGNiwweDA2LCAweDQyLDB4NzQsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywKKzB4MjgsMHgwMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLAorMHg5NCwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NSwweDE2LCAweEZGLDB4QTQsIDB4ODMsMHg5NiwgMHhGRiwweDc0LCAweEM3LDB4MjAsCisweDUyLDB4MDAsIDB4NzQsMHhCOCwgMHhGRiwweEZBLCAweEM2LDB4MjQsIDB4MDAsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4NzYsMHg5RCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzUsMHhBQywgMHg1MiwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhGQSwgMHg0NiwweDMxLAorMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweDMwLCAweDU0LDB4MDAsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4RjYsMHg4MiwgMHhGRiwweDAwLCAweEM3LDB4MzgsIDB4NkMsMHgwMCwgMHhDNiwweDMwLCAweDcwLDB4MDAsIDB4RjYsMHgxRiwKKzB4MjgsMHgwMCwgMHg4MywweDk2LCAweEZGLDB4OTQsIDB4ODUsMHgxNiwgMHhGRiwweEM0LCAweEY1LDB4OUYsIDB4MjgsMHgwMCwgMHg4NywweDJBLAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MjQsIDB4RTYsMHgwMCwgMHg5NCwweDY5LCAweEY2LDB4ODYsCisweDQwLDB4OTgsIDB4RjcsMHgwNCwgMHg2RSwweDUwLCAweDg2LDB4MkEsIDB4MDAsMHgyQywgMHhDNiwweEE0LCAweDAwLDB4MDAsIDB4MjMsMHg5NCwKKzB4MDAsMHg2MiwgMHg4NCwweDlFLCAweDAwLDB4MDAsIDB4NzcsMHg5RCwgMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNCwweEE0LAorMHg3RiwweEMwLCAweDc0LDB4QTUsIDB4RkYsMHhGMCwgMHg0NiwweEI1LCAweDAwLDB4MDAsIDB4ODcsMHgzQSwgMHgxRCwweERDLCAweDc2LDB4QjUsCisweDAwLDB4MDIsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhGNywweDA2LCAweDQwLDB4OTgsIDB4RTYsMHgwMCwgMHg5NCwweDM0LCAweEMzLDB4MzQsIDB4NzAsMHgwMCwgMHhDNSwweDg0LAorMHgwMCwweDAwLCAweDg2LDB4QUEsIDB4MDAsMHgyNCwgMHhGNywweDA0LCAweEUwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4MDUsMHgyOCwgMHgwMCwweDI0LCAweEU2LDB4MDAsIDB4OTMsMHhDNCwgMHg5NSwweDE2LCAweEZGLDB4NzQsIDB4ODMsMHg5NiwKKzB4RkYsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHg5RSwgMHgwMCwweDI4LCAweEY3LDB4MDQsIDB4RTAsMHgwNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDkzLDB4QzgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsCisweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTMsMHhENSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwKKzB4MDAsMHgwMCwgMHg4NSwweDE2LCAweEZGLDB4NzQsIDB4RjcsMHgwNCwgMHhFMCwweDAwLCAweDg2LDB4QUEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweDk0LDB4MTQsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg5NCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwKKzB4RTAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4OTQsMHgxRCwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHg5NCwweDJELCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweDk0LDB4MzksIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEY0LDB4OUIsIDB4MjgsMHgwMCwgMHg4MywweDk2LAorMHhGRiwweEM0LCAweEY2LDB4ODYsIDB4NDAsMHg5QSwgMHhDNywweDIwLCAweDcyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweDg2LDB4MUUsCisweDAwLDB4MzAsIDB4NDcsMHgzOSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4RTAsMHgwMCwKKzB4OTQsMHhFNCwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4NDcsMHgyNSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LAorMHg2OCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHhGNSwweDNCLCAweDI4LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAyLCAweDIzLDB4OTQsCisweDAwLDB4NjIsIDB4ODMsMHg5RSwgMHgwMCwweDAwLCAweDc3LDB4OUQsIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzMsMHg5QywKKzB4N0YsMHhDMCwgMHg3MywweDlELCAweEZGLDB4RjAsIDB4MjUsMHgxNCwgMHgwMCwweDYyLCAweEYzLDB4QkIsIDB4MjgsMHgwMCwgMHg4NSwweDJBLAorMHgwMCwweDAwLCAweDc3LDB4QTksIDB4MDAsMHgxRSwgMHg3NywweEJDLCAweEZGLDB4RTUsIDB4QzUsMHgyOCwgMHg3RiwweEMwLCAweDc1LDB4MjksCisweEZGLDB4RjAsIDB4RTAsMHgwMCwgMHg5NCwweEU0LCAweEY1LDB4MUIsIDB4MjgsMHgwMCwgMHg4MywweDk2LCAweEZGLDB4QkMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDFFLCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgMHg5NCwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzgsMHg5QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHgzNSwweDYwLCAweEY1LDB4MDUsCisweDQyLDB4MzAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNSwweDA2LAorMHg0MiwweDQ0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OTYsMHg4OSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwKKzB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4OTUsMHg4RCwgMHhGNSwweDg2LAorMHg0MiwweDUwLCAweEY3LDB4MDQsIDB4NDIsMHg1MCwgMHg3NiwweDJELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDI2LDB4QjQsCisweDAwLDB4MDEsIDB4RjYsMHg4NSwgMHg0MiwweDU0LCAweDI1LDB4MDAsIDB4MDAsMHgwNywgMHhGNSwweDA1LCAweDQyLDB4NTgsIDB4RjYsMHg4NCwKKzB4MkQsMHgzOCwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDJGLAorMHgyOCwweDAwLCAweDA2LDB4MzQsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNiwgMHgyQywweDI4LCAweDc2LDB4QjUsCisweDAwLDB4MDIsIDB4RjUsMHgwMiwgMHgwMCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweDk2LDB4ODgsIDB4QjUsMHgzNiwKKzB4NzAsMHgwMiwgMHhFMCwweDAwLCAweDk2LDB4ODgsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDQsIDB4NDIsMHg2MCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhCMiwweDg0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjYsMHg4NCwgMHg0RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM0LCAweDAwLDB4NDAsIDB4QzAsMHgyMiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDk1LDB4RUMsIDB4RjYsMHgwNiwgMHg0MiwweDc2LCAweEY3LDB4MDQsIDB4NDIsMHg3NCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhFMCwweDAwLCAweDk2LDB4ODgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg2MCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MjIsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweDk2LDB4MjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjUsMHgwNCwgMHgzQiwweEIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQ0LDB4MkMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4OTYsMHg0MCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MjIsIDB4NkEsMHgwMCwgMHhFNiwweDAwLCAweDk2LDB4NzEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0MsMHg2MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwKKzB4NDAsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDA0LAorMHg0MCwweDc0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweEJFLDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4OTYsMHg4OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHgwNCwKKzB4NDAsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhDMSwweEI0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NzAsIDB4RjYsMHgwNCwgMHg2RiwweDM0LCAweEY3LDB4MDQsIDB4NDIsMHg2NCwgMHg4NiwweEIyLAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHg5QiwweDE4LCAweDA2LDB4QjAsCisweDAwLDB4MDIsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweEY0LDB4MDQsIDB4NDAsMHg3QywgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEMwLDB4M0EsIDB4NDIsMHgwMCwgMHhFNiwweDAwLAorMHg5QiwweDE4LCAweDI0LDB4OTQsIDB4MDAsMHgzNiwgMHhGNiwweDA0LCAweDQwLDB4NzQsIDB4MjMsMHg5NCwgMHgwMCwweDM4LCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLAorMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDMwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwKKzB4MDAsMHgyOCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg5NCwweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDI3LDB4MTQsCisweDAwLDB4MjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA0LAorMHg0MCwweDc0LCAweDk0LDB4MTYsIDB4RkYsMHhDNCwgMHgwNywweDIwLCAweDAwLDB4MDIsIDB4RjAsMHgzQiwgMHgyOCwweDAwLCAweDI0LDB4ODAsCisweDAwLDB4MDcsIDB4RjQsMHgwMiwgMHgwMCwweEZGLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHg5NSwweDE2LCAweEZGLDB4QkMsIDB4MDMsMHgxQywKKzB4MDAsMHgwQSwgMHgyMCwweDI2LCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgMHg5OCwweEE4LCAweDA2LDB4MTgsIDB4MDAsMHgwRSwgMHg4NiwweEIyLAorMHgwMCwweDAwLCAweDc3LDB4MzEsIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweDc1LDB4QUMsCisweEZGLDB4RTUsIDB4MDMsMHgxOCwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwKKzB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4RjYsMHhCMywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgwNCwweEE0LAorMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzcsMHgzOCwgMHg0NCwweDAwLCAweEUwLDB4MDAsCisweDk4LDB4NTQsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg1LDB4MTYsIDB4RkYsMHhDNCwgMHg3NCwweDk1LCAweDAwLDB4MUUsIDB4NzQsMHhBNCwKKzB4RkYsMHhFNSwgMHg4MywweDk2LCAweEZGLDB4QzQsIDB4MjMsMHgxNCwgMHgwMCwweDFFLCAweDc0LDB4MTksIDB4MDAsMHgxRSwgMHg3NCwweDIwLAorMHhGRiwweEU1LCAweDA1LDB4MjgsIDB4MDAsMHgyNiwgMHg5NSwweDE2LCAweEZGLDB4OEMsIDB4ODUsMHhBQSwgMHgwMCwweDAwLCAweDc2LDB4QTksCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDAzLDB4OUMsIDB4MDAsMHgwMiwgMHg5MywweDk2LCAweEZGLDB4QjQsIDB4MDYsMHgxQywKKzB4MDAsMHgwMiwgMHg3MywweDk1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhBQywgMHg3MywweDk1LAorMHgwMCwweDFFLCAweDczLDB4OUMsIDB4RkYsMHhFNSwgMHg5MywweDk2LCAweEZGLDB4OUMsIDB4ODMsMHg5NiwgMHhGRiwweEJDLCAweDc1LDB4MTUsCisweDAwLDB4MUUsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweDk1LDB4MTYsIDB4RkYsMHg5NCwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwKKzB4RkYsMHhFNSwgMHg5NSwweDE2LCAweEZGLDB4QTQsIDB4ODUsMHgxNiwgMHhGRiwweEM0LCAweEM1LDB4QUMsIDB4NkYsMHhDMCwgMHg3NSwweEFELAorMHhGRiwweEYwLCAweEY1LDB4MDUsIDB4NDIsMHg2MCwgMHhGNSwweDA0LCAweDRGLDB4NTgsIDB4RjYsMHg4MiwgMHgwMCwweEZGLCAweEM3LDB4MUMsCisweDUyLDB4MDAsIDB4NzcsMHgzOCwgMHhGRiwweEZBLCAweDQ3LDB4MzksIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDZDLDB4MDAsIDB4RjYsMHg4MiwKKzB4RkYsMHgwMCwgMHhDNSwweEFDLCAweDZDLDB4MDAsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDgzLDB4OTYsIDB4RkYsMHg4QywgMHhGNSwweDg0LAorMHgzQiwweDZDLCAweDg1LDB4MTYsIDB4RkYsMHhCNCwgMHhGNywweDFGLCAweDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweDA2LDB4QUMsCisweDAwLDB4MDEsIDB4RjYsMHg4NSwgMHgzQiwweDZDLCAweDgzLDB4OTYsIDB4RkYsMHhDNCwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4RjUsMHgwNCwgMHg0RiwweDU4LCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHhDMCwweDFFLAorMHg1MiwweDAwLCAweEM3LDB4MzgsIDB4NDcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDk5LCAweDAwLDB4MUUsIDB4ODMsMHg5NiwKKzB4RkYsMHg5NCwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHgzRiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLAorMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RTgsIDB4MjMsMHgxNCwKKzB4MDAsMHgxNiwgMHg3NiwweDk5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDg1LDB4MTYsIDB4RkYsMHhBQywgMHg4MywweDk2LAorMHhGRiwweEE0LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MUEsCisweDAwLDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg1LDB4MTYsIDB4RkYsMHg5QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgyMywweDE0LAorMHgwMCwweDEyLCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHgzRiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODMsMHg5NiwKKzB4RkYsMHhDNCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4NywweDE2LAorMHhGRiwweEYwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzMsCisweDI4LDB4MDAsIDB4MDcsMHgxQywgMHgwMCwweDNBLCAweEY1LDB4QkIsIDB4MjgsMHgwMCwgMHgwNywweDFDLCAweDAwLDB4MzYsIDB4RjAsMHgzQiwKKzB4MjgsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDMsIDB4RTYsMHgwMCwgMHg5QSwweEE0LCAweEY1LDB4MUYsIDB4MjgsMHgwMCwgMHhGNywweDA0LAorMHg0MiwweDc4LCAweEY2LDB4MDYsIDB4NDIsMHg3OCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4OUIsMHgxOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEYzLDB4ODYsIDB4NDIsMHg0NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsCisweDFGLDB4NDgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDI1LDB4MDAsIDB4MDAsMHgwNywgMHhGNSwweDA1LCAweDQyLDB4NTgsIDB4RjcsMHgwNCwKKzB4NDIsMHg1MCwgMHhGNiwweDA2LCAweDQyLDB4NTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGMywweDgyLAorMHgwMCwweDA2LCAweEYzLDB4ODUsIDB4NDIsMHg1NCwgMHhGNSwweDA2LCAweDM5LDB4MzQsIDB4RjUsMHgwNSwgMHg0MiwweDQ0LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEY2LDB4ODQsIDB4MkQsMHgzOCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywKKzB4MjgsMHgwMCwgMHgwNiwweDM0LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDYsIDB4MkMsMHgyOCwgMHg3NiwweEI1LAorMHgwMCwweDAyLCAweEYzLDB4ODIsIDB4MDAsMHgxQywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHg5QiwweDE4LCAweEIzLDB4QjYsCisweDcwLDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHg3OCwgMHhGMywweDg2LCAweDQyLDB4NDQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4OUUsMHg0MSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4OUQsMHg4NSwgMHgyNCwweDk0LCAweDAwLDB4MzYsIDB4RjYsMHgwNCwgMHg0MCwweDc0LCAweDI1LDB4MTQsCisweDAwLDB4MzgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzQsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDMyLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkUsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJDLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQSwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MjgsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4RjMsMHg4NCwgMHg0MCwweDdDLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4MjAsIDB4OTMsMHg5NiwKKzB4RkYsMHg5NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDAsMHhEQywgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDIzLDB4OTQsCisweDAwLDB4NjgsIDB4OTMsMHg5NiwgMHhGRiwweDhDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDhDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweDkwLDB4MTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4NTAsIDB4OTMsMHg5NiwgMHhGRiwweDg0LCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0YsMHgyNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgwMiwKKzB4RkYsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDY0LCAweEYzLDB4ODQsIDB4NDAsMHg3QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDg0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGNywweEM4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4OUQsMHg1RCwgMHhGMywweDgyLCAweDE3LDB4NzAsIDB4RjcsMHgwNCwgMHg0MiwweDU0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NDIsMHg1NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgxQiwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NiwgMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHhDMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgMHg5RSwweDQwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjUsMHgwNCwgMHg0MCwweDdDLCAweEY0LDB4ODQsIDB4NDAsMHg3NCwgMHhDNywweDI4LCAweDUwLDB4MDAsIDB4QzcsMHgyNCwKKzB4NzAsMHgwMCwgMHgwNSwweEI4LCAweDAwLDB4MjYsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDc3LDB4MkQsIDB4MDAsMHgxRSwgMHg3NywweDM4LAorMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NywweEI0LCAweDAwLDB4MDgsIDB4NzAsMHgzRSwgMHhGRiwweEU4LCAweDQ3LDB4MEMsCisweDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4RTYsMHgwMCwKKzB4OUQsMHhGRCwgMHhGNiwweDAyLCAweDAwLDB4RkYsIDB4RjcsMHgwNCwgMHg0MiwweDc4LCAweEY2LDB4MDYsIDB4NDIsMHg3QSwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDc4LDB4OUMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhFMCwweDAwLCAweDlFLDB4NDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg3NywweDJELAorMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2NCwweDAwLCAweEY2LDB4MDIsIDB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDY0LDB4MDAsIDB4QzcsMHgzOCwKKzB4NjgsMHgwMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4MDcsMHgyOCwgMHgwMCwweDAxLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NCwweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEJFLDB4RjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHhEOCwgMHhGMywweDg2LAorMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMCwweEU0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QTIsMHhDOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4QTAsMHgzNSwgMHgyNCwweDk0LAorMHgwMCwweDM2LCAweEY2LDB4MDQsIDB4NDAsMHg3NCwgMHgyNSwweDE0LCAweDAwLDB4MzgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4NzUsMHhCMSwKKzB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDM0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgzMiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MzAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDJFLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgyQywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MkEsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MjgsIDB4NzYsMHgzMSwKKzB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweEYzLDB4ODQsIDB4NDAsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4MjMsMHg5NCwgMHgwMCwweDIwLCAweDkzLDB4OTYsIDB4RkYsMHg0QywgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg0QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4NTAsIDB4OTMsMHg5NiwgMHhGRiwweDQ0LCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgwMiwKKzB4RkYsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDY0LCAweEYzLDB4ODQsIDB4NDAsMHg3QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDQ0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg0QywgMHhFMCwweDAwLCAweEEyLDB4ODAsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHhGNCwweDA0LCAweDQwLDB4N0MsIDB4RjYsMHgwNCwgMHg0MCwweDc0LCAweEYzLDB4ODIsIDB4MDAsMHgwMCwgMHhDNywweDIwLAorMHg0MCwweDAwLCAweEM3LDB4MzAsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksCisweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NywweEI0LCAweDAwLDB4MDgsIDB4NzAsMHgzRSwKKzB4RkYsMHhFOCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhBMCwweEFELCAweDkzLDB4OTYsIDB4RkYsMHgzQywgMHhGNywweDA0LCAweDQyLDB4QTAsIDB4RjYsMHgwNiwgMHg0MiwweEEwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4NzgsMHg5QywgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4QTIsMHhDOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgyNCwweDk0LCAweDAwLDB4N0UsIDB4MjUsMHgxNCwKKzB4MDAsMHg4MCwgMHgyMywweDk0LCAweDAwLDB4NjgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4QUMsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwKKzB4MDAsMHg3QywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsCisweDAwLDB4N0EsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LAorMHgwMCwweDc4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjQsMHg5NCwKKzB4MDAsMHg3NiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDI0LDB4OTQsCisweDAwLDB4NzQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHgyNCwweDk0LAorMHgwMCwweDcyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDcwLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywgMHgyOCwweDAwLCAweDk0LDB4MTMsCisweEZGLDB4RkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHgzNCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQwLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHgzNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4QjAsIDB4OTMsMHg5NiwgMHhGRiwweDJDLCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwKKzB4RkYsMHgyQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHgzQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgyMywweDk0LCAweDAwLDB4OTgsIDB4OTMsMHg5NiwgMHhGRiwweDI0LCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0YsMHgyNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4MiwKKzB4MDAsMHgwNiwgMHhGMywweDg1LCAweDQyLDB4NTQsIDB4ODcsMHgwMiwgMHhGRiwweDM0LCAweEYzLDB4ODYsIDB4MzgsMHhBOCwgMHhGMywweDg1LAorMHg0MiwweDQ0LCAweEY3LDB4MDUsIDB4NDIsMHg2NCwgMHhGMywweDg0LCAweDQwLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjcsMHhDOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEEyLDB4QTksIDB4RjMsMHg4MiwgMHgxNywweDcwLCAweEY3LDB4MDQsIDB4NDIsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDQyLDB4NTQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4ODIsIDB4MDAsMHgxQiwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweEYzLDB4ODYsIDB4NDIsMHg0NCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsCisweDFFLDB4QzAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweEY2LDB4MDQsIDB4NkYsMHgzNCwgMHhGNywweDA0LCAweDQyLDB4NjQsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QTMsMHhBQywgMHgwNiwweEIwLCAweDAwLDB4MDIsIDB4ODcsMHgzNiwKKzB4MDAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHhGNiwweDg0LAorMHg0MCwweDdDLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMCwgMHhBMywweEFDLCAweEM3LDB4MzQsCisweDY4LDB4MDAsIDB4RjUsMHg4NCwgMHg0MCwweDc0LCAweEY2LDB4MDQsIDB4NEYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzYsMHgyQywKKzB4NjIsMHgwMCwgMHg3NiwweDMwLCAweEZGLDB4RkEsIDB4QzUsMHhBQywgMHg3MCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgyNiwgMHg4NiwweEFFLAorMHgwMCwweDAwLCAweDc3LDB4MkQsIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4NDYsMHgzMSwgMHgwMCwweDAwLCAweEM2LDB4QjQsCisweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweDMwLCAweDc0LDB4MDAsIDB4RjcsMHgwMiwKKzB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4QzYsMHgzMCwgMHg2OCwweDAwLCAweEY2LDB4MkYsIDB4MjgsMHgwMCwgMHhGNSwweDA2LAorMHg0MiwweDQ0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRiwweDQ4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNCwgMHg0MCwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHhGNSwweDA0LCAweDQwLDB4NzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4QkUsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDgwLCAweEY3LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEEzLDB4RjQsIDB4MjAsMHgzQSwgMHgwMCwweDA3LCAweEY1LDB4MDIsCisweDAwLDB4MDEsIDB4RjUsMHgwNSwgMHg0MiwweDU4LCAweEY3LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwNywgMHhFRSwweDAwLCAweEE2LDB4RjAsIDB4MjMsMHg5NCwgMHgwMCwweDFFLCAweEY2LDB4MDQsIDB4NDIsMHg2MCwgMHgyMywweDE0LAorMHgwMCwweDY2LCAweEY0LDB4ODQsIDB4NDAsMHg3OCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA0LDB4QTQsIDB4MDAsMHgwMiwgMHg3NCwweDI1LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwKKzB4RkYsMHhFNSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4NzUsMHgzMSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5NSwweDE2LAorMHhGRiwweDdDLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MjUsMHgxNCwgMHgwMCwweDIwLCAweDk1LDB4MTYsCisweEZGLDB4OTQsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg4NSwweDE2LCAweEZGLDB4N0MsIDB4MDUsMHhBNCwKKzB4MDAsMHgwMiwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUYsIDB4MjgsMHgwMCwgMHgyMywweDk0LAorMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4MjUsMHgxNCwgMHgwMCwweDUwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwKKzB4MjgsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MUEsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUYsCisweDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLAorMHgyOCwweDAwLCAweDIzLDB4OTQsIDB4MDAsMHgxNiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwKKzB4MjgsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MTQsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUYsCisweDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDEyLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLAorMHgyOCwweDAwLCAweDIzLDB4OTQsIDB4MDAsMHgxMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QUQsCisweDAwLDB4MUUsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDFGLCAweDI4LDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDI2LDB4MTQsIDB4MDAsMHg2OCwgMHhDNywweDM4LAorMHg0NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwKKzB4MDAsMHg2NCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgMHgyOCwweDAwLCAweDIzLDB4MTQsCisweDAwLDB4NjIsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsIDB4MjgsMHgwMCwgMHgyMywweDE0LAorMHgwMCwweDYwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MjMsMHgxNCwKKzB4MDAsMHg1RSwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgMHgyOCwweDAwLCAweDIzLDB4MTQsCisweDAwLDB4NUMsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsIDB4MjgsMHgwMCwgMHgyMywweDE0LAorMHgwMCwweDVBLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4MDUsMHhBQywKKzB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDU4LCAweDc1LDB4QUQsIDB4MDAsMHgxRSwgMHg3NSwweEFDLAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgMHgyOCwweDAwLCAweDk2LDB4MTMsCisweEZGLDB4RkMsIDB4OTUsMHgxNiwgMHhGRiwweDhDLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4RDIsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHhGRiwweDhDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEY1LDB4MDQsIDB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDI1LDB4MTQsCisweDAwLDB4MzgsIDB4OTUsMHgxNiwgMHhGRiwweDg0LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4Q0YsMHgyNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNCwgMHg0MiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEY1LDB4MDQsIDB4NDIsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4MTYsCisweEZGLDB4ODQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4OTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RjcsMHhDOCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEE2LDB4RjEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDQyLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDQyLDB4NTgsIDB4RjcsMHgwNCwKKzB4NDIsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4QTcsMHgzMCwgMHhGNSwweDAyLAorMHgxNywweDcwLCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY1LDB4MDIsIDB4MDAsMHgxQywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwKKzB4QTcsMHg1MCwgMHhCNSwweDNBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgMHhBNywweDUwLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEY1LDB4MDIsIDB4MDAsMHgxQiwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg0MiwweDQ0LCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHhDMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDMwLCAweEY2LDB4MDQsCisweDZGLDB4MzQsIDB4RjcsMHgwNCwgMHg0MiwweDY0LCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEE5LDB4RjAsIDB4MDcsMHgzMCwgMHgwMCwweDAyLCAweDg2LDB4M0EsIDB4MDAsMHgwMCwgMHhGNSwweDgyLAorMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4NDAsMHg3QywgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4MzAsCisweDc3LDB4QzAsIDB4RjcsMHgwNCwgMHg0MCwweDc0LCAweEM2LDB4QjQsIDB4NjgsMHgwMCwgMHg3NiwweDMxLCAweEZGLDB4RjAsIDB4QzYsMHgwMCwKKzB4NjIsMHgwMCwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgyNiwgMHg4NiwweEJBLAorMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc3LDB4QjQsCisweDAwLDB4MDgsIDB4NzAsMHgzRSwgMHhGRiwweEU4LCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEE4LDB4MzQsIDB4RjYsMHgwMiwgMHgwMCwweEZGLCAweDgzLDB4MTYsIDB4RkYsMHhGNCwgMHg4MywweDk2LAorMHhGRiwweEY0LCAweEY3LDB4MDQsIDB4NDAsMHg3OCwgMHhDNiwweDk4LCAweDM4LDB4MDAsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDA3LDB4MzgsCisweDAwLDB4MjYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4QzYsMHhCNCwgMHg2NCwweDAwLCAweEMwLDB4MzYsIDB4NUEsMHgwMCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhBOCwweDNELCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEE4LDB4NzUsIDB4RjYsMHgwNiwKKzB4NDIsMHg3QywgMHhGNywweDA0LCAweDQyLDB4N0MsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHg3OCwweDlDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweEE5LDB4RjAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGMywweDA0LCAweDQyLDB4NjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0MsMHg2MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjQsMHgwNCwgMHg0MCwweDc4LCAweEY3LDB4MDQsCisweDRGLDB4NTgsIDB4RjUsMHgwNCwgMHg0MCwweDc0LCAweEYzLDB4ODQsIDB4NDAsMHg3QywgMHhGMywweDA0LCAweDQwLDB4N0MsIDB4QzYsMHgyMCwKKzB4NzIsMHgwMCwgMHg3NiwweDMwLCAweEZGLDB4RkEsIDB4QzUsMHg5QywgMHgzMCwweDAwLCAweEM1LDB4QTgsIDB4NTgsMHgwMCwgMHgwNSwweEFDLAorMHgwMCwweDI2LCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHg3NCwweEFELCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDczLDB4QUQsCisweDAwLDB4MUUsIDB4NzMsMHg5QywgMHhGRiwweEU1LCAweDkzLDB4OTYsIDB4RkYsMHhENCwgMHhDNSwweDI4LCAweDcyLDB4MDAsIDB4NzUsMHgyOCwKKzB4RkYsMHhGQSwgMHg4MywweDE2LCAweEZGLDB4RjQsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweDQ2LDB4MzEsIDB4MDAsMHgwMCwgMHg0NSwweDI5LAorMHgwMCwweDAwLCAweEM3LDB4MTgsIDB4MzgsMHgwMCwgMHhDNCwweDIwLCAweDcwLDB4MDAsIDB4MDQsMHgyMCwgMHgwMCwweDI2LCAweDczLDB4MjEsCisweDAwLDB4MUUsIDB4QzYsMHhCNCwgMHg0RiwweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNCwweDgyLCAweDAwLDB4RkYsIDB4QzYsMHgzMCwKKzB4NEMsMHgwMCwgMHhGMywweDgyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwgMHgzQywweDAwLCAweEM2LDB4MzAsIDB4NjgsMHgwMCwgMHhGNiwweDJGLAorMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3MywweDE4LCAweEZGLDB4RTUsIDB4OTMsMHgxNiwgMHhGRiwweENDLCAweDgzLDB4MTYsCisweEZGLDB4RDQsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweEM1LDB4MjgsIDB4NEMsMHgwMCwgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHg3NiwweDlELCAweDAwLDB4MTAsIDB4NzYsMHhCNSwgMHhGRiwweEY4LCAweEM3LDB4MzgsIDB4NEMsMHgwMCwgMHhDNiwweEI0LAorMHg3MCwweDAwLCAweEY2LDB4QUYsIDB4MjgsMHgwMCwgMHg4NywweDIyLCAweDAwLDB4MDAsIDB4NzYsMHhBMSwgMHgwMCwweDFFLCAweDgzLDB4MTYsCisweEZGLDB4Q0MsIDB4RjMsMHg4MiwgMHhGRiwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHhDNywweDM4LCAweDNDLDB4MDAsIDB4QzUsMHgyOCwgMHg3MCwweDAwLCAweEY1LDB4MjMsIDB4MjgsMHgwMCwgMHg4NywweDIyLAorMHgwMCwweDAwLCAweEYzLDB4MDQsIDB4NDAsMHg3QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDczLDB4MTksCisweDAwLDB4MTAsIDB4OTMsMHgxNiwgMHhGRiwweEVDLCAweDczLDB4OTksIDB4RkYsMHhGOCwgMHhDNywweDM4LCAweDRDLDB4MDAsIDB4QzcsMHgxQywKKzB4NzAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4REMsIDB4MjMsMHgxNCwgMHgwMCwweDIyLCAweDgzLDB4MUEsIDB4MDAsMHgwMCwgMHg3NywweDk5LAorMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDMywweDE4LCAweDdGLDB4QzAsIDB4NzMsMHgxOSwgMHhGRiwweEYwLCAweEYzLDB4MjMsCisweDI4LDB4MDAsIDB4RjMsMHg4NiwgMHg0MiwweDQ0LCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwKKzB4MUYsMHg0OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNCwgMHg0MCwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGMywweDA0LCAweDQwLDB4NzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4QkUsMHhGOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDk4LCAweEYzLDB4MDYsCisweDQyLDB4NDQsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDIwLDB4RTQsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhBRSwweEU1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHg0MiwweDU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RUUsMHgwMCwgMHhBRCwweDg5LCAweDI3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU0LCAweDIzLDB4OTQsIDB4MDAsMHgxRSwgMHhGNiwweDA0LCAweDQyLDB4NjAsIDB4MjQsMHg5NCwKKzB4MDAsMHg2NiwgMHg5NCwweDk2LCAweEZGLDB4NjQsIDB4RjMsMHgwNCwgMHg0MCwweDc4LCAweDI0LDB4OTQsIDB4MDAsMHgyMCwgMHg5NCwweDk2LAorMHhGRiwweDk0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4MDMsMHgxOCwgMHgwMCwweDAyLCAweDkzLDB4MTYsIDB4RkYsMHg3NCwgMHg3NCwweDE5LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwKKzB4RkYsMHhFNSwgMHgwNSwweDk4LCAweDAwLDB4MDIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4MzEsIDB4MDAsMHgxRSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4MjgsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLCAweDI4LDB4MDAsIDB4MjMsMHg5NCwKKzB4MDAsMHgxQywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweDg1LDB4MTYsIDB4RkYsMHg2NCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUYsCisweDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDFBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLAorMHgyOCwweDAwLCAweDIzLDB4OTQsIDB4MDAsMHgxOCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwKKzB4MjgsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MTYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUYsCisweDI4LDB4MDAsIDB4MjMsMHg5NCwgMHgwMCwweDE0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFGLAorMHgyOCwweDAwLCAweDIzLDB4OTQsIDB4MDAsMHgxMiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwKKzB4MjgsMHgwMCwgMHgyMywweDk0LCAweDAwLDB4MTAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEFELAorMHgwMCwweDFFLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgyNiwweDE0LCAweDAwLDB4NjgsIDB4QzcsMHgzOCwKKzB4NDcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDIzLDB4MTQsCisweDAwLDB4NjQsIDB4OTMsMHgxNiwgMHhGRiwweDY0LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLAorMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHg2MiwgMHg5NCwweDk2LCAweEZGLDB4NjQsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsCisweDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDYwLCAweDk1LDB4MTYsIDB4RkYsMHg2NCwgMHgwNSwweEFDLAorMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4NUUsIDB4OTMsMHgxNiwKKzB4RkYsMHg2NCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwgMHgyOCwweDAwLCAweDI0LDB4OTQsCisweDAwLDB4NUMsIDB4OTQsMHg5NiwgMHhGRiwweDY0LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHg1QSwgMHg5NSwweDE2LCAweEZGLDB4NjQsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsCisweDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgyNCwweDk0LCAweDAwLDB4NTAsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDIzLDB4MTQsIDB4MDAsMHg1OCwgMHgwNSwweEFDLAorMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZGLDB4NjQsIDB4NzUsMHhBRCwgMHgwMCwweDFFLCAweDc1LDB4QUMsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLCAweDI4LDB4MDAsIDB4OTYsMHgxMywKKzB4RkYsMHhGQywgMHg5NCwweDk2LCAweEZGLDB4OEMsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhEMiwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4OEMsIDB4MjMsMHgxNCwgMHgwMCwweDM4LCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4MjcsMHg4MCwgMHgwMCwweDA3LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDE2LCAweEZGLDB4ODQsIDB4OTMsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDRiwweDI0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyNywweDgwLAorMHgwMCwweDA3LCAweEY3LDB4ODUsIDB4NDIsMHg1OCwgMHgyNywweDgwLCAweDAwLDB4MDcsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4ODQsCisweDQyLDB4NjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4ODQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRiwweDk0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEY3LDB4QzgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhBRCwweDVELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4NTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweDA2LDB4MzgsIDB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEY0LDB4ODIsCisweDAwLDB4MUMsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4QUUsMHhFNCwgMHhCNCwweEJBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwKKzB4QUUsMHhFNCwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgMHg0MCwweDc4LCAweEY1LDB4ODQsIDB4NEYsMHg1OCwgMHgwNywweDM4LAorMHgwMCwweDE2LCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHhGNCwweDA2LCAweDNCLDB4OTAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHg3NiwweDM1LCAweDAwLDB4MDYsIDB4QTcsMHgyRSwKKzB4NjAsMHgwMiwgMHhDNSwweDJDLCAweDYwLDB4MDAsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg0MCwweDAwLCAweDA3LDB4MzgsCisweDAwLDB4MDIsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3MywweEI3LCAweEZGLDB4RjAsIDB4RUUsMHgwMCwgMHhBRSwweDU1LCAweDk1LDB4MTYsIDB4RkYsMHg2NCwgMHhBNywweDJFLAorMHg2MCwweDAyLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NDAsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MDQsIDB4MjMsMHgxNCwKKzB4MDAsMHg4OCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LAorMHhGRiwweEYwLCAweEE2LDB4QUEsIDB4NjgsMHgwMiwgMHg3NywweDFELCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDI3LDB4MzgsCisweDAwLDB4MDgsIDB4ODUsMHgzQSwgMHgwMCwweDA0LCAweDg0LDB4QkEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxQSwKKzB4MDAsMHgwNCwgMHg5NCwweDlBLCAweDAwLDB4MDAsIDB4ODUsMHg5NiwgMHhGRiwweDdDLCAweEUwLDB4MDAsIDB4QUUsMHg3OCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg2NCwgMHhBNywweDJFLCAweDYwLDB4MDIsIDB4NzYsMHhBNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDMsIDB4QzcsMHgzOCwKKzB4NDAsMHgwMCwgMHg4NSwweEJBLCAweDAwLDB4MDQsIDB4ODUsMHgxNiwgMHhGRiwweDY0LCAweEY2LDB4MDYsIDB4M0IsMHg5MCwgMHg4NywweDJBLAorMHgwMCwweDAwLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEE2LDB4QkEsIDB4NjAsMHgwMiwgMHgyMCwweDFFLCAweDAwLDB4MDAsIDB4QzcsMHgzOCwKKzB4NjAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHhFRSwweDAwLAorMHhBRSwweEM5LCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHg4MywweDE2LCAweEZGLDB4NzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4MTksCisweEZGLDB4RjAsIDB4QzYsMHhCOCwgMHg2OCwweDAwLCAweDg0LDB4OTYsIDB4RkYsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyNCwKKzB4NjgsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEMxLDB4MkMsIDB4MDAsMHgwMCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwKKzB4MDAsMHgxMCwgMHhGNywweDA0LCAweDQwLDB4ODQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhBRiwweDNDLCAweEY2LDB4MDYsIDB4NDIsMHhCOCwgMHhGNywweDA0LCAweDQyLDB4QjgsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4RjMsMHgwNiwgMHgzNiwweDc4LCAweEYzLDB4MDUsIDB4NDIsMHg0NCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY3LDB4MDQsIDB4NEYsMHg1QywgMHhGMywweDg0LAorMHg0MiwweDVDLCAweDgzLDB4M0EsIDB4MDAsMHgwNCwgMHhDNCwweDM4LCAweDAwLDB4MDAsIDB4OTMsMHgxNiwgMHhGRiwweEVDLCAweDc3LDB4MUQsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHgzOCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgwNCwweEI4LCAweDAwLDB4MEMsIDB4ODMsMHgxNiwKKzB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwgMHgzMiwweDAwLCAweEVDLDB4MDAsIDB4QjAsMHg3MCwgMHhDNSwweDA0LAorMHgwMCwweDAwLCAweEE2LDB4QTIsIDB4NDgsMHgwMiwgMHhGNywweDA0LCAweEUwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhBRiwweEE4LCAweEM2LDB4MjAsIDB4NDgsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDQsIDB4RjcsMHgwNCwKKzB4RTAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QUYsMHhBQywgMHgyMCwweDJFLAorMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhBRiwweEI5LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjUsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweEUwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhBRiwweEY0LCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QUYsMHhGQywgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweEY3LDB4MDQsCisweEUwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweEFGLDB4RkQsIDB4MjAsMHgyRSwKKzB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjAsMHgwRCwgMHgyMCwweDJBLAorMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCMCwweDU5LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3QSwweEQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4QjAsMHg2NCwgMHhDNywweDIwLCAweDQ4LDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDA4LCAweEY2LDB4MDYsIDB4NDAsMHg5OCwgMHg3NywweDM5LAorMHgwMCwweDAyLCAweEE2LDB4QkEsIDB4NjAsMHgwMiwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4QjAsMHg2NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDQsMHhBNCwgMHgwMCwweDBDLCAweEUwLDB4MDAsIDB4QUYsMHg2MCwgMHgwMywweDlDLAorMHgwMCwweDAxLCAweDgzLDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwgMHgzMiwweDAwLCAweEVDLDB4MDAsCisweEIxLDB4MDQsIDB4RjMsMHgwNiwgMHgzNiwweDc4LCAweEY2LDB4ODQsIDB4NEYsMHg1QywgMHg3NywweDFELCAweDAwLDB4MDEsIDB4QzcsMHgzOCwKKzB4MzgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MDcsMHgzOCwgMHgwMCwweDBDLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDM2LAorMHgwMCwweDA4LCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweEY0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEZBLDB4OTgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RjYsMHg4NCwgMHg0MiwweDZDLCAweDgzLDB4OTYsIDB4RkYsMHhGNCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHhDNywweDFDLCAweDcwLDB4MDAsIDB4RjcsMHgwNSwgMHg0MiwweDVDLCAweDA2LDB4QjQsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODUsIDB4NDIsMHg2QywgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgxQywgMHgyMCwweDMyLAorMHgwMCwweDQ0LCAweEU2LDB4MDAsIDB4QjEsMHgwOCwgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RTAsMHgwMCwgMHhCMSwweDA4LCAweEYwLDB4MDUsCisweDJELDB4MzgsIDB4RjMsMHgwNSwgMHg0MiwweDQ0LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHhDNSwweEEwLCAweDAwLDB4MDAsIDB4RjYsMHg4MiwgMHgwNywweDcwLCAweEY3LDB4MDQsCisweDZFLDB4NTAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjEsMHg2RCwgMHgwNiwweDM4LCAweDAwLDB4MUMsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzQsMHgyMCwgMHg3MCwweDAwLCAweEMwLDB4MjIsIDB4NzIsMHgwMCwgMHhFNCwweDAwLAorMHhCMSwweDVELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNSwweEFDLCAweDAwLDB4MDEsIDB4MjYsMHhCNCwgMHgwMCwweDAxLCAweDIwLDB4MzYsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCMSwweDQwLCAweDA2LDB4MzAsIDB4MDAsMHgwNCwgMHhDNCwweDIwLCAweDU4LDB4MDAsIDB4QzAsMHgyMiwKKzB4NUEsMHgwMCwgMHhFNCwweDAwLCAweEIxLDB4ODEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA0LDB4MjAsIDB4MDAsMHgwMSwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4NzgsMHhEOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4QjEsMHgxQywgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY3LDB4MDQsIDB4NDAsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgyMiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweEIxLDB4RUQsIDB4RjQsMHgwNSwgMHg0MCwweDkwLCAweEY3LDB4MDQsIDB4NkUsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHhCQSwKKzB4MUQsMHhEQywgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDk2LDB4QkEsIDB4MUQsMHhEQywgMHg4NywweDNBLAorMHgxRCwweERDLCAweEUwLDB4MDAsIDB4QjEsMHhGMCwgMHhGNSwweDg1LCAweDdBLDB4RDAsIDB4RjAsMHgwNSwgMHg3QSwweEQwLCAweEY1LDB4ODQsCisweDQwLDB4OTAsIDB4RjAsMHgwNSwgMHg0MCwweDg0LCAweEY1LDB4ODUsIDB4NDAsMHg5NCwgMHhGNSwweDg2LCAweEUwLDB4MDAsIDB4OTUsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhENSwweEEwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LAorMHg2RSwweDUwLCAweEY0LDB4MDUsIDB4NDAsMHg4NCwgMHg4NSwweEJBLCAweDFELDB4REMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODUsCisweDNCLDB4NjQsIDB4RjUsMHg4NCwgMHhFMCwweDAwLCAweEYwLDB4MDUsIDB4NDIsMHg1QywgMHg5NSwweEJBLCAweDAwLDB4MTAsIDB4RjUsMHg4NCwKKzB4RTAsMHgwNCwgMHhGNiwweDg2LCAweDJDLDB4MjgsIDB4OTUsMHhCQSwgMHgwMCwweDE0LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGNSwweDg2LAorMHgzQSwweDRDLCAweEY1LDB4ODUsIDB4NDIsMHg0NCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4RjUsMHg4MiwgMHgwMCwweDFDLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAwLCAweEIyLDB4NjgsIDB4QjUsMHhCQSwKKzB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHg4NiwgMHgzNSwweEVDLCAweEY1LDB4ODUsIDB4NDIsMHgzMCwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4QzgsIDB4RjMsMHgwMiwKKzB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZGLDB4OTQsIDB4MjQsMHg4MCwgMHgwMCwweDA4LCAweDk0LDB4OTYsIDB4RkYsMHg4NCwgMHgyMywweDgwLAorMHgwMCwweDA3LCAweDgzLDB4MTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweDU0LCAweDIwLDB4MUUsCisweDAwLDB4MDcsIDB4RUUsMHgwMCwgMHhCNSwweDY0LCAweEM3LDB4MUMsIDB4MzgsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDNywweDI0LCAweDcwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI2LCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHhGNSwweDg0LAorMHg0RiwweDU4LCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsCisweEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweEZGLCAweEM2LDB4QjYsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweEIzLDB4MkQsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMSwgMHhFNiwweDAwLCAweEIzLDB4MkQsIDB4NzcsMHgzNSwgMHgwMCwweDA2LCAweEE2LDB4QkEsIDB4NTgsMHgwMiwgMHhDNywweDM4LAorMHg1OCwweDAwLCAweDc2LDB4MzksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg2NywweEMwLCAweDc2LDB4QjUsCisweEZGLDB4RjAsIDB4MjAsMHgzNiwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4QjMsMHgzMSwgMHhDNiwweEI4LCAweDAwLDB4MDAsIDB4QzcsMHgyQywKKzB4MDAsMHgwMCwgMHhFMCwweDAwLCAweEIzLDB4MzAsIDB4QzYsMHhCOCwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHhGNywweDA0LAorMHg0RiwweDU4LCAweEM1LDB4MzQsIDB4MDAsMHgwMCwgMHhDMCwweDJBLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhCNSwweDVELCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjYsMHg4NCwgMHgzQiwweEJDLCAweEYzLDB4MDIsIDB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZGLDB4M0MsIDB4MDQsMHgyOCwKKzB4MDAsMHgxQywgMHhGNywweDA0LCAweDNCLDB4QjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAwLAorMHhCNCwweDQwLCAweDk2LDB4OTYsIDB4RkYsMHhBQywgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4RjQsMHg4NiwgMHgzQiwweEI0LCAweEM2LDB4MzgsIDB4NDgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MEMsIDB4QzMsMHgwNCwKKzB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZGLDB4MzQsIDB4ODYsMHhCMiwgMHgwMCwweDAwLCAweDg3LDB4MkEsIDB4MDAsMHgxQywgMHg4NSwweDk2LAorMHhGRiwweDNDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEIzLDB4QzAsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweDg2LDB4QjIsCisweDAwLDB4MDQsIDB4ODcsMHgyQSwgMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwKKzB4QjMsMHhDMCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhCMywweEQxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDgyLCAweDAwLDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweDM0LCAweDg2LDB4QjIsCisweDAwLDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwKKzB4QjQsMHgwQywgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QjQsMHgxNCwgMHgyMCwweDJFLAorMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHg4NywweDIyLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhCNCwweDE1LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEI0LDB4MjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDE2LAorMHhGRiwweDM0LCAweDg0LDB4OTYsIDB4RkYsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEI0LDB4NDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg5MywweDE2LCAweEZGLDB4M0MsIDB4ODQsMHg5NiwKKzB4RkYsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjQsMHg4MSwgMHhGNiwweDAyLAorMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhBQywgMHhGMywweDA2LCAweDNCLDB4QjQsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsCisweDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwKKzB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4QjAsIDB4RTAsMHgwMCwgMHhCNCwweEY0LCAweDk2LDB4OTYsIDB4RkYsMHhCNCwgMHgyNywweDE0LAorMHgwMCwweDU0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NCwweDEzLCAweEZGLDB4RkMsIDB4RjQsMHg4NiwgMHgzQiwweEI0LCAweDk0LDB4OTMsCisweEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweDRDLCAweDk1LDB4MTYsIDB4RkYsMHg0NCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwKKzB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweDRDLCAweDg1LDB4MTYsIDB4RkYsMHg0NCwgMHgyMCwweDIyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjQsMHhGMSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEFDLCAweEYzLDB4MDYsCisweDNCLDB4QjQsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwKKzB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhCMCwgMHg5NiwweDk2LAorMHhGRiwweEI0LCAweEY3LDB4MDUsIDB4M0IsMHhCQywgMHhFMCwweDAwLCAweEI0LDB4RjgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsCisweDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjUsMHgyRCwgMHgyNywweDE0LCAweDAwLDB4MDgsIDB4ODQsMHg5NiwKKzB4RkYsMHg1NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgyNCwgMHg3MCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHhCNCwgMHgwNCwweEE0LAorMHgwMCwweDA0LCAweDk0LDB4OTYsIDB4RkYsMHg1NCwgMHg4NCwweDk2LCAweEZGLDB4OTQsIDB4OTMsMHgzQSwgMHhGRiwweEMwLCAweDA0LDB4QTQsCisweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhCNSwweDU0LCAweDk0LDB4OTYsIDB4RkYsMHg5NCwgMHg4MywweDE2LCAweEZGLDB4NTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDNywweDE4LCAweDcwLDB4MDAsIDB4RjQsMHg4NCwgMHg0RiwweDU4LCAweDAzLDB4MTgsIDB4MDAsMHgwNCwgMHg5MywweDE2LAorMHhGRiwweDU0LCAweDgzLDB4MTYsIDB4RkYsMHg5NCwgMHg5NCwweEJBLCAweEZGLDB4QzAsIDB4MDMsMHgxOCwgMHgwMCwweDAxLCAweDkzLDB4MTYsCisweEZGLDB4OTQsIDB4OTUsMHgxNiwgMHhGRiwweDNDLCAweDkzLDB4OTYsIDB4RkYsMHg4QywgMHhFMCwweDAwLCAweEIyLDB4QjAsIDB4MDMsMHg5QywKKzB4MDAsMHgwMSwgMHg4NCwweDk2LCAweEZGLDB4OTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhCNSwweDg0LCAweEYzLDB4ODIsIDB4MDAsMHgwMSwgMHhGNCwweDA0LCAweDRGLDB4NTgsIDB4RTAsMHgwMCwgMHhCRSwweEU0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODMsMHgxNiwgMHhGRiwweEI4LCAweDg0LDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwKKzB4NEEsMHgwMCwgMHhFQywweDAwLCAweEI1LDB4Q0MsIDB4OTMsMHgxNiwgMHhGRiwweDdDLCAweDI2LDB4OTQsIDB4MDAsMHgwNCwgMHg4NywweDM2LAorMHhGRiwweEMwLCAweDgzLDB4MTYsIDB4RkYsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsCisweEJCLDB4OTgsIDB4MDMsMHg5QywgMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwKKzB4NEEsMHgwMCwgMHhFQywweDAwLCAweEI1LDB4QTEsIDB4MDYsMHhCNCwgMHgwMCwweDA0LCAweEY0LDB4MDQsIDB4NEYsMHg1OCwgMHg4MywweDE2LAorMHhGRiwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDFBLCAweDQyLDB4MDAsIDB4RTYsMHgwMCwgMHhCQSwweDJELCAweEY0LDB4ODIsCisweDAwLDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweDc0LCAweDIzLDB4ODAsIDB4MDAsMHgwNywgMHgyMCwweDFFLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwKKzB4QjcsMHg0OCwgMHhDNywweDFDLCAweDM4LDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweDdDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDE4LAorMHg3MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgyNiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDc3LDB4MzksCisweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwKKzB4MDAsMHhGRiwgMHhDNiwweEI2LCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgMHhCNiwweDY5LCAweDIwLDB4MzYsIDB4MDAsMHgwMSwgMHhFNiwweDAwLAorMHhCNiwweDY5LCAweDc3LDB4MzUsIDB4MDAsMHgwNiwgMHhBNiwweEJBLCAweDU4LDB4MDIsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDc2LDB4MzksCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NjcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMiwgMHhFNiwweDAwLCAweEI2LDB4NkQsIDB4QzYsMHhCOCwgMHgwMCwweDAwLCAweEM3LDB4MkMsIDB4MDAsMHgwMCwgMHhFMCwweDAwLAorMHhCNiwweDZDLCAweEM2LDB4QjgsIDB4MDAsMHgwMCwgMHhGNiwweDg0LCAweDRGLDB4NTgsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEM1LDB4MzQsCisweDAwLDB4MDAsIDB4QzAsMHgyQSwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QjcsMHg0MSwgMHhDNSwweDg0LCAweDAwLDB4MDAsIDB4ODQsMHg5NiwKKzB4RkYsMHg3NCwgMHg4NiwweEFBLCAweDAwLDB4MUMsIDB4ODMsMHgxNiwgMHhGRiwweDNDLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHgwNCwweEE0LAorMHgwMCwweDAxLCAweDk0LDB4OTYsIDB4RkYsMHg3NCwgMHg4NywweDFBLCAweDAwLDB4MUMsIDB4MDQsMHhBOCwgMHgwMCwweDFDLCAweDk0LDB4OTYsCisweEZGLDB4MzQsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QjYsMHhDQywgMHgwNCwweDE4LCAweDAwLDB4MUMsIDB4ODYsMHhBQSwKKzB4MDAsMHgyMCwgMHg4NywweDFBLCAweDAwLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHhCNiwweEQwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEI2LDB4REQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4MzQsIDB4ODcsMHgyMiwKKzB4MDAsMHgwMCwgMHg4NiwweDlBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLAorMHhCNywweDFDLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhCNywweDI0LCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4ODYsMHg5QSwgMHgwMCwweDA0LCAweDg3LDB4MjIsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFMiwweDAwLCAweEI3LDB4MjUsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjcsMHgzNSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCNywweDQwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDk2LCAweEZGLDB4ODQsIDB4RTAsMHgwMCwKKzB4QjUsMHhFQywgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4ODQsMHg5NiwgMHhGRiwweDc0LCAweDgzLDB4MTYsIDB4RkYsMHg5NCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MjYsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweEJCLDB4OTgsIDB4MjMsMHgwMCwgMHgwMCwweDA4LCAweDg0LDB4OTYsCisweEZGLDB4ODQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MjYsIDB4MzIsMHgwMCwgMHhFNiwweDAwLCAweEJCLDB4OTksIDB4RjYsMHgwMiwKKzB4MDAsMHgwMCwgMHhGNiwweDg0LCAweDQwLDB4N0MsIDB4RjcsMHgwNCwgMHg0MCwweDc0LCAweEM2LDB4QjQsIDB4NjgsMHgwMCwgMHhDNywweDM4LAorMHg2OCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgyNiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc3LDB4QjQsIDB4MDAsMHgwOCwgMHg3MCwweDNFLCAweEZGLDB4RTgsIDB4NDcsMHgwQywKKzB4MDAsMHgwMSwgMHhENywweDAwLCAweDBBLDB4NzAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QjgsMHgwNCwgMHhGNSwweDgyLAorMHgwMCwweEZGLCAweDg0LDB4OTYsIDB4RkYsMHg4NCwgMHg4MywweDE2LCAweEZGLDB4OEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MjQsCisweDMyLDB4MDAsIDB4ODQsMHg5NiwgMHhGRiwweDdDLCAweEM3LDB4MzgsIDB4NzAsMHgwMCwgMHhDNywweDI0LCAweDcwLDB4MDAsIDB4MDcsMHgzOCwKKzB4MDAsMHgyNiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LAorMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhDNiwweEI0LCAweDVDLDB4MDAsIDB4QzAsMHgzNiwgMHg2MiwweDAwLCAweDQ3LDB4MEMsCisweDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEI4LDB4MEQsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QkIsMHg5OCwgMHgyMywweDgwLAorMHgwMCwweDA3LCAweDIwLDB4MUUsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweEI4LDB4QzgsIDB4QzcsMHgxQywgMHgzOCwweDAwLCAweDgzLDB4MTYsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MTgsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwKKzB4MDAsMHgwMCwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LAorMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweDAwLDB4RkYsIDB4QzYsMHhCNiwgMHg3NCwweDAwLCAweEU2LDB4MDAsCisweEI4LDB4OTEsIDB4MjAsMHgzNiwgMHgwMCwweDAxLCAweEU2LDB4MDAsIDB4QjgsMHg5MSwgMHg3NywweDM1LCAweDAwLDB4MDYsIDB4QTYsMHhCQSwKKzB4NTgsMHgwMiwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4NzYsMHgzOSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNiwweEI0LAorMHg2NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHgyMCwweDM2LCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgMHhCOCwweDk1LCAweEM2LDB4QjgsCisweDAwLDB4MDAsIDB4QzcsMHgyQywgMHgwMCwweDAwLCAweEUwLDB4MDAsIDB4QjgsMHg5NCwgMHhDNiwweEI4LCAweDAwLDB4MDAsIDB4RjYsMHg4NCwKKzB4NEYsMHg1OCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4QzUsMHgzNCwgMHgwMCwweDAwLCAweEMwLDB4MkEsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHhCOCwweEMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwgMHhGRiwweDRDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQywweDYwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4NEMsIDB4RTAsMHgwMCwKKzB4QjgsMHgxNCwgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4ODQsMHg5NiwgMHhGRiwweDg0LCAweDgzLDB4MTYsIDB4RkYsMHg4QywgMHhGMywweDg0LAorMHg0MCwweDdDLCAweEY1LDB4MDQsIDB4NDAsMHg3NCwgMHhDNCwweEE0LCAweDMyLDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweDM0LCAweDgzLDB4MTYsCisweEZGLDB4MzQsIDB4QzUsMHg5QywgMHgzOCwweDAwLCAweEM1LDB4QTgsIDB4NTgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MjYsIDB4ODYsMHhBRSwKKzB4MDAsMHgwMCwgMHg3NywweDJELCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweDc0LDB4MkQsIDB4MDAsMHgxRSwgMHg3NCwweDIwLAorMHhGRiwweEU1LCAweDczLDB4OUQsIDB4MDAsMHgxMCwgMHg3MywweDlELCAweEZGLDB4RjgsIDB4QzQsMHhBNCwgMHgzMCwweDAwLCAweDk0LDB4OTYsCisweEZGLDB4M0MsIDB4ODMsMHgxNiwgMHhGRiwweDdDLCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHhDNCwweDk4LCAweDQ4LDB4MDAsIDB4OTQsMHg5NiwKKzB4RkYsMHgzQywgMHgwNCwweEE0LCAweDAwLDB4MjYsIDB4OTQsMHg5NiwgMHhGRiwweDNDLCAweDczLDB4MjUsIDB4MDAsMHgxRSwgMHg3MywweDE4LAorMHhGRiwweEU1LCAweDkzLDB4MTYsIDB4RkYsMHg2QywgMHg3NCwweEE1LCAweDAwLDB4MUUsIDB4OTQsMHg5NiwgMHhGRiwweDY0LCAweDc0LDB4QTQsCisweEZGLDB4RTUsIDB4OTQsMHg5NiwgMHhGRiwweDY0LCAweDgzLDB4MTYsIDB4RkYsMHg3QywgMHhGNCwweDg0LCAweDRGLDB4NTgsIDB4NzYsMHhCNSwKKzB4RkYsMHhGMCwgMHhDNiwweDE4LCAweDRBLDB4MDAsIDB4NzYsMHgzMCwgMHhGRiwweEZBLCAweDQ2LDB4MzEsIDB4MDAsMHgwMCwgMHhGMywweDAyLAorMHgwMCwweEZGLCAweEM2LDB4MzAsIDB4MzQsMHgwMCwgMHhGNCwweDgyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwgMHg0QywweDAwLCAweEM2LDB4MzAsCisweDY4LDB4MDAsIDB4RjYsMHgyRiwgMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4MzQsIDB4QzcsMHgzOCwKKzB4NDcsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzMsMHgxOSwgMHgwMCwweDEwLCAweDkzLDB4MTYsIDB4RkYsMHgzNCwgMHg3NCwweDk5LAorMHhGRiwweEY4LCAweEYzLDB4MDIsIDB4MDAsMHhGRiwgMHhDNywweDM4LCAweDM0LDB4MDAsIDB4QzcsMHgyNCwgMHg3MCwweDAwLCAweDk3LDB4MTYsCisweEZGLDB4MzQsIDB4MjQsMHg5NCwgMHgwMCwweENBLCAweDg0LDB4QTYsIDB4MDAsMHgwMCwgMHg3NywweEE1LCAweDAwLDB4MUUsIDB4NzcsMHhCQywKKzB4RkYsMHhFNSwgMHhDNCwweEE0LCAweDdGLDB4QzAsIDB4NzQsMHhBNSwgMHhGRiwweEYwLCAweDgzLDB4MTYsIDB4RkYsMHgzQywgMHhGNCwweEFGLAorMHgyOCwweDAwLCAweEY0LDB4ODQsIDB4NEYsMHg1OCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4QzUsMHgyOCwgMHg0QSwweDAwLCAweDc1LDB4MjgsCisweEZGLDB4RkEsIDB4ODMsMHgxNiwgMHhGRiwweDZDLCAweDQ1LDB4MjksIDB4MDAsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4RkYsIDB4QzUsMHgyOCwKKzB4NEMsMHgwMCwgMHg4NCwweDk2LCAweEZGLDB4M0MsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhGMywweDAyLAorMHhGRiwweDAwLCAweEM3LDB4MzgsIDB4MzQsMHgwMCwgMHhDNSwweDI4LCAweDcwLDB4MDAsIDB4RjUsMHgyNywgMHgyOCwweDAwLCAweDg3LDB4MjYsCisweDAwLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweDY0LCAweDg0LDB4MTYsIDB4RkYsMHg3QywgMHhDNywweDM4LCAweDM3LDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHhGNCwweDgyLCAweDAwLDB4RkYsIDB4QzcsMHgzOCwgMHg0QywweDAwLCAweDgzLDB4MTYsIDB4RkYsMHgzQywgMHhDMywweDlDLAorMHg3MCwweDAwLCAweEUwLDB4MDAsIDB4QkUsMHhFNCwgMHhGMywweDlCLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0MCwweDdDLCAweEY2LDB4MDQsCisweDQwLDB4NzQsIDB4QzcsMHgzOCwgMHg3MCwweDAwLCAweEM3LDB4MzAsIDB4NzAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MjYsIDB4ODYsMHhCQSwKKzB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NywweEI0LAorMHgwMCwweDA4LCAweDcwLDB4M0UsIDB4RkYsMHhFOCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4RDcsMHgwMCwgMHgwQSwweDcwLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCQSwweDdELCAweDI1LDB4ODAsIDB4MDAsMHgwNywgMHhFMCwweDAwLCAweEJFLDB4RTQsIDB4MDQsMHgyMCwKKzB4MDAsMHg0MCwgMHhFMCwweDAwLCAweEJBLDB4RDgsIDB4QzQsMHgyQywgMHgwMCwweDAwLCAweEM3LDB4MzAsIDB4NDIsMHgwMCwgMHg4NCwweDk2LAorMHgwMCwweDAwLCAweDc1LDB4MzgsIDB4RkYsMHhGQSwgMHgwNiwweDI0LCAweDAwLDB4MEEsIDB4MjAsMHgyRSwgMHgwMCwweDA3LCAweEVFLDB4MDAsCisweEJBLDB4RDQsIDB4MDcsMHgzMCwgMHgwMCwweDBFLCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweEI0LAorMHg3NCwweDAwLCAweDQ3LDB4MjksIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCQSwweDc0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhFMCwweDAwLCAweEJBLDB4OEMsIDB4MDUsMHhBQywKKzB4MDAsMHgwMSwgMHhGNCwweDAyLCAweDAwLDB4MDgsIDB4MDcsMHgyMCwgMHgwMCwweDA3LCAweDIwLDB4M0EsIDB4MDAsMHgwRSwgMHhFMiwweDAwLAorMHhCQiwweEE0LCAweEM1LDB4QTAsIDB4NDAsMHgwMCwgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4RjUsMHgwNCwgMHg0MCwweDdDLCAweEY0LDB4ODIsCisweDAwLDB4RkYsIDB4RjYsMHgwNCwgMHg0RiwweDU4LCAweEM1LDB4OTgsIDB4NTgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MjYsIDB4ODYsMHhBRSwKKzB4MDAsMHgwMCwgMHg3NywweDJELCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4MTgsIDB4NjIsMHgwMCwgMHg3NiwweDMwLAorMHhGRiwweEZBLCAweDQ2LDB4MzEsIDB4MDAsMHgwMCwgMHhDNiwweDMwLCAweDRDLDB4MDAsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsCisweEZGLDB4RjAsIDB4NzcsMHgyOSwgMHgwMCwweDEwLCAweDc3LDB4MzksIDB4RkYsMHhGOCwgMHhDNiwweEI0LCAweDRDLDB4MDAsIDB4QzcsMHgzOCwKKzB4NjgsMHgwMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4RjUsMHg4NCwgMHg0MCwweDc0LCAweEM1LDB4MjgsIDB4NTAsMHgwMCwgMHhDNSwweEFDLAorMHg1MCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgyNiwgMHg4NiwweEFFLCAweDAwLDB4MDAsIDB4NzcsMHgyRCwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4NzUsMHgyRCwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwKKzB4RkYsMHhGMCwgMHhGNywweDAyLCAweEZGLDB4MDAsIDB4QzYsMHhCNCwgMHg3NCwweDAwLCAweEM2LDB4MzAsIDB4NjgsMHgwMCwgMHhGNiwweDJGLAorMHgyOCwweDAwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEExLCAweDAwLDB4MTAsIDB4NzYsMHhCNSwgMHhGRiwweEY4LCAweEM3LDB4MzgsCisweDU3LDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4NEMsMHgwMCwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4RTAsMHgwMCwKKzB4QkIsMHhGOCwgMHhGNiwweEFGLCAweDI4LDB4MDAsIDB4RjQsMHgwNCwgMHg0RiwweDU4LCAweEUwLDB4MDAsIDB4QkUsMHhFNCwgMHgwNCwweDIwLAorMHgwMCwweDQwLCAweEY2LDB4MDQsIDB4NEYsMHg1OCwgMHg4MywweDE2LCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg0MCwweDdDLCAweEY1LDB4ODQsCisweDQwLDB4NzQsIDB4QzYsMHgxOCwgMHg2MiwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhGQSwgMHhDNywweDM4LCAweDcwLDB4MDAsIDB4QzUsMHhBQywKKzB4NzAsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MjYsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDc3LDB4MkQsIDB4MDAsMHgxRSwgMHg3NywweDM4LAorMHhGRiwweEU1LCAweDQ2LDB4MzEsIDB4MDAsMHgwMCwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsCisweDAwLDB4RkYsIDB4QzYsMHgzMCwgMHg3NCwweDAwLCAweEY3LDB4MDIsIDB4RkYsMHgwMCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4QzYsMHgzMCwKKzB4NjgsMHgwMCwgMHhGNiwweDJGLCAweDI4LDB4MDAsIDB4MjMsMHg4MCwgMHgwMCwweDA3LCAweDIwLDB4MUUsIDB4MDAsMHgwNywgMHhFRSwweDAwLAorMHhCRSwweEUwLCAweEM3LDB4MUMsIDB4MzgsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MjQsCisweDcwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI2LCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4NzcsMHgzOSwKKzB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLAorMHgwMCwweEZGLCAweEM2LDB4QjYsIDB4NzQsMHgwMCwgMHhFNiwweDAwLCAweEJDLDB4NzksIDB4MjAsMHgzNiwgMHgwMCwweDAxLCAweEU2LDB4MDAsCisweEJDLDB4NzksIDB4NzcsMHgzNSwgMHgwMCwweDA2LCAweEE2LDB4QkEsIDB4NTgsMHgwMiwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4NzYsMHgzOSwKKzB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg2NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHgyMCwweDM2LAorMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4QkMsMHg3RCwgMHhDNiwweEI4LCAweDAwLDB4MDAsIDB4QzcsMHgyQywgMHgwMCwweDAwLCAweEUwLDB4MDAsCisweEJDLDB4N0MsIDB4QzYsMHhCOCwgMHgwMCwweDAwLCAweEY2LDB4ODQsIDB4NEYsMHg1OCwgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4QzUsMHgzNCwKKzB4MDAsMHgwMCwgMHhDMCwweDJBLCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhCRSwweEQ5LCAweDA2LDB4QTgsIDB4MDAsMHgxQywgMHg4MywweDE2LAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4ODYsCisweDNCLDB4QjQsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHg0QywgMHg5NSwweDE2LCAweEZGLDB4NDQsIDB4OTYsMHg5NiwKKzB4RkYsMHg0MCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMywweDQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDA0LAorMHg0RiwweDVDLCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg5NCwweDk2LCAweEZGLDB4NUMsIDB4ODYsMHg5NiwgMHhGRiwweDQwLCAweDgzLDB4OTYsCisweEZGLDB4NEMsIDB4ODUsMHgxNiwgMHhGRiwweDQ0LCAweDkzLDB4MTYsIDB4RkYsMHgzNCwgMHg4NiwweDFBLCAweDAwLDB4MDgsIDB4OTYsMHg5NiwKKzB4RkYsMHgzQywgMHg4NywweDFBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzIsIDB4NzIsMHgwMCwgMHhFQywweDAwLAorMHhCRCwweEI4LCAweDk2LDB4MTYsIDB4RkYsMHg5QywgMHg3NywweDMxLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4QzYsMHgzOCwgMHgzMCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwQywgMHg4NiwweEIyLCAweDAwLDB4MDAsIDB4ODcsMHgyQSwKKzB4MDAsMHgxQywgMHg4NSwweDk2LCAweEZGLDB4NUMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4QkQsMHg0MCwgMHhDNCwweDA0LAorMHgwMCwweDAwLCAweDg2LDB4QjIsIDB4MDAsMHgwNCwgMHg4NywweDJBLCAweDAwLDB4MjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhCRCwweDQ0LCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEJELDB4NTEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHg4MywweDE2LAorMHhGRiwweDNDLCAweDg2LDB4QjIsIDB4MDAsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhCRCwweDkwLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwKKzB4QkQsMHg5OCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MUEsIDB4MDAsMHgwNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLCAweEJELDB4OTksIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsCisweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QkQsMHhBOSwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RjQsMHgwMiwKKzB4MDAsMHgwMSwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCRCwweEI4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNCwweDgyLAorMHgwMCwweDAxLCAweDk0LDB4OTYsIDB4RkYsMHg1QywgMHg4MywweDE2LCAweEZGLDB4NUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MUEsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCRCwweEY5LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4OUMsIDB4ODQsMHg5NiwKKzB4RkYsMHgzNCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LAorMHg0OCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEEwLCAweEUwLDB4MDAsCisweEJFLDB4NzAsIDB4OTYsMHg5NiwgMHhGRiwweEE0LCAweDI3LDB4MTQsIDB4MDAsMHg2NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwKKzB4RkYsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHgzNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4NEMsIDB4OTUsMHgxNiwgMHhGRiwweDQ0LCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4NEMsIDB4ODUsMHgxNiwKKzB4RkYsMHg0NCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhCRSwweDcxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg4NywweDE2LAorMHhGRiwweDlDLCAweDgzLDB4MTYsIDB4RkYsMHgzNCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsCisweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwKKzB4RkYsMHhBMCwgMHg5NiwweDk2LCAweEZGLDB4QTQsIDB4OTcsMHgxQSwgMHgwMCwweDA4LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4QkUsMHg5OSwgMHhGNiwweDA2LCAweDQyLDB4OUMsIDB4RjcsMHgwNCwgMHg0MiwweDlDLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDI4LAorMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHg0NywweDM5LCAweDAwLDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4MjgsCisweDAwLDB4MUMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY0LDB4ODQsIDB4NEYsMHg1QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywKKzB4RkYsMHhGQywgMHg5MywweDk2LCAweEZGLDB4NEMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjMsMHg0MCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkYsMHg0QywgMHhFMCwweDAwLCAweEJCLDB4RkMsIDB4MDMsMHg5QywgMHgwMCwweDAxLCAweDg0LDB4MTYsCisweDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLAorMHgwMCwweDYwLCAweDg1LDB4MTYsIDB4MDAsMHgwMCwgMHg4NiwweDE2LCAweDAwLDB4MDQsIDB4MDYsMHhBOCwgMHgwMCwweDE4LCAweEM3LDB4MzAsCisweDYwLDB4MDAsIDB4QzUsMHhCOCwgMHg2OCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwNywgMHhFRSwweDAwLCAweEJGLDB4NjQsIDB4MDcsMHgyQywKKzB4MDAsMHgwRSwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LAorMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhGNywweDAyLCAweDAwLDB4RkYsIDB4QzYsMHhCNCwgMHg3NCwweDAwLCAweDIwLDB4MzYsCisweDAwLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEQ3LDB4MDAsIDB4MEEsMHg3MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4QkYsMHg2MSwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4RTAsMHgwMCwgMHhCRiwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwMSwgMHgyMCwweDMyLAorMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4QzAsMHg0QywgMHgwNiwweEE4LCAweDAwLDB4MTYsIDB4RjUsMHgwNSwgMHg0MCwweDc0LCAweEY2LDB4MDUsCisweDQwLDB4N0MsIDB4RjMsMHgwMiwgMHgwMCwweDA2LCAweEYzLDB4MDUsIDB4NDIsMHg1NCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4MDUsMHgyOCwKKzB4MDAsMHgwMiwgMHg5NSwweDE2LCAweEZGLDB4QzQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDIzLDB4OTQsIDB4MDAsMHgyMCwgMHg5MywweDk2LAorMHhGRiwweEJDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg5NiwweDE2LCAweEZGLDB4QUMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweEQwLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg0LDB4OTYsIDB4RkYsMHhDNCwgMHgyMywweDE0LCAweDAwLDB4MzgsIDB4OTQsMHg5MywKKzB4RkYsMHhGQywgMHg5MywweDE2LCAweEZGLDB4QjQsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhEMiwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDAyLCAweEZGLDB4MzQsIDB4ODYsMHgxNiwgMHhGRiwweEFDLCAweEY3LDB4MDUsCisweDQyLDB4NjQsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QjQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4ODQsMHg5NiwgMHhGRiwweEJDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEY3LDB4QzgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhDMCwweDFELCAweEYzLDB4MDYsIDB4M0EsMHhEOCwgMHhGNywweDA0LCAweDQyLDB4NTQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg0MiwweDU0LCAweEYzLDB4MDUsIDB4NDIsMHg0NCwgMHhGMywweDgyLAorMHgxNywweDcwLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDgyLCAweDAwLDB4MUIsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweEYzLDB4MDYsCisweDQyLDB4NDQsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhFMCwweDAwLCAweEMxLDB4QTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHhGNSwweDg0LAorMHg0RiwweDU4LCAweEY0LDB4MDYsIDB4M0IsMHg3MCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDc2LDB4MzksIDB4MDAsMHgwNiwgMHhBNywweDJFLCAweDYwLDB4MDIsIDB4QzUsMHgyQywKKzB4NjAsMHgwMCwgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDQwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAyLCAweDg2LDB4QkEsCisweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNywKKzB4RkYsMHhGMCwgMHhFRSwweDAwLCAweEMxLDB4MTUsIDB4OTYsMHg5NiwgMHhGRiwweDlDLCAweEE3LDB4MkUsIDB4NjAsMHgwMiwgMHg3NiwweEE5LAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHg4MywweDk2LCAweEZGLDB4OUMsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NDAsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MDQsIDB4MjQsMHg5NCwKKzB4MDAsMHg2MCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LAorMHhGRiwweEYwLCAweEE2LDB4QUEsIDB4NjgsMHgwMiwgMHg3NywweDFELCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDI3LDB4MzgsCisweDAwLDB4MDgsIDB4ODMsMHhCQSwgMHgwMCwweDA0LCAweDgzLDB4M0EsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHhBNiwKKzB4MDAsMHgwNCwgMHg5MywweDI2LCAweDAwLDB4MDAsIDB4ODUsMHg5NiwgMHhGRiwweEE0LCAweEUwLDB4MDAsIDB4QzEsMHgzOCwgMHgyMywweDAwLAorMHgwMCwweDA3LCAweEE3LDB4MkUsIDB4NjAsMHgwMiwgMHg3NiwweEE5LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDQwLDB4MDAsIDB4ODUsMHhCQSwKKzB4MDAsMHgwNCwgMHgyMywweDAwLCAweDAwLDB4MDcsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDg3LDB4MkEsIDB4MDAsMHgwMCwgMHg3NiwweEE5LAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHg4MywweDk2LCAweEZGLDB4OUMsIDB4RjYsMHgwNiwgMHgzQiwweDcwLCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhBNiwweEJBLCAweDYwLDB4MDIsIDB4MjAsMHgxRSwKKzB4MDAsMHgwMCwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LAorMHg3NywweEMwLCAweEVFLDB4MDAsIDB4QzEsMHg4RCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4ODQsMHg5NiwgMHhGRiwweEEwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzcsMHgyNSwgMHhGRiwweEYwLCAweEM2LDB4QjgsIDB4NjgsMHgwMCwgMHhDNywweDI4LCAweDY4LDB4MDAsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgyQywgMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4NzAsIDB4MjUsMHgwMCwKKzB4MDAsMHgwNywgMHgyMCwweDJBLCAweDAwLDB4MDcsIDB4RUUsMHgwMCwgMHhDMywweEI4LCAweEM3LDB4MjgsIDB4NTAsMHgwMCwgMHg4MywweDE2LAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDE4LCAweDcwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDI2LCAweDg2LDB4QkEsCisweDAwLDB4MDAsIDB4RjUsMHg4NCwgMHg0RiwweDU4LCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweEZGLCAweEM2LDB4QjYsIDB4NzQsMHgwMCwgMHhFNiwweDAwLAorMHhDMiwweDNELCAweDIwLDB4MzYsIDB4MDAsMHgwMSwgMHhFNiwweDAwLCAweEMyLDB4M0QsIDB4NzcsMHgzNSwgMHgwMCwweDA2LCAweEE2LDB4QkEsCisweDU4LDB4MDIsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDc2LDB4MzksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NjcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4MjAsMHgzNiwgMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4QzIsMHg0RCwgMHhDMCwweDNBLAorMHg1QSwweDAwLCAweEUwLDB4MDAsIDB4QzIsMHg0OCwgMHhDNywweDJDLCAweDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEY1LDB4ODQsCisweDRGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NUEsMHgwMCwgMHhFNiwweDAwLCAweEMzLDB4QjEsIDB4RjQsMHg4NiwKKzB4M0IsMHg5MCwgMHg4MywweDk2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4OUMsIDB4MDAsMHgxNiwgMHg4NywweDM2LAorMHgwMCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4NzYsMHgzOSwgMHgwMCwweDA2LCAweEE3LDB4MkUsIDB4NjAsMHgwMiwgMHhDNSwweDJDLCAweDYwLDB4MDAsIDB4NzYsMHhBOSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LAorMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NDgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDc3LDB4MzksCisweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI3LCAweEZGLDB4RjAsIDB4RUUsMHgwMCwKKzB4QzMsMHgyMSwgMHg5NiwweDk2LCAweEZGLDB4OEMsIDB4QTcsMHgyRSwgMHg2MCwweDAyLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweDgzLDB4MTYsIDB4RkYsMHg4QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksCisweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg0OCwweDAwLCAweDg2LDB4QkEsIDB4MDAsMHgwNCwgMHgyNCwweDk0LCAweDAwLDB4NzAsIDB4NzcsMHgzOSwKKzB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHhBNiwweEFBLAorMHg2OCwweDAyLCAweDc3LDB4MTksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4MjcsMHgzOCwgMHgwMCwweDA4LCAweDgzLDB4QkEsCisweDAwLDB4MDQsIDB4ODMsMHgzQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweEE2LCAweDAwLDB4MDQsIDB4OTMsMHgyNiwKKzB4MDAsMHgwMCwgMHg4NiwweDE2LCAweEZGLDB4OTQsIDB4RTAsMHgwMCwgMHhDMywweDQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhBNywweDJFLAorMHg2MCwweDAyLCAweDc2LDB4QTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4RjMsMHgwNiwgMHgzQiwweDkwLCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4ODYsMHgzQSwKKzB4MDAsMHgwNCwgMHg4NywweDJBLCAweDAwLDB4MDAsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHg4MywweDk2LAorMHhGRiwweDhDLCAweEY0LDB4ODYsIDB4M0IsMHg5MCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksCisweDAwLDB4MDMsIDB4QTYsMHhCQSwgMHg0OCwweDAyLCAweDIwLDB4MUUsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDQ4LDB4MDAsIDB4NzcsMHgzOSwKKzB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweEVFLDB4MDAsIDB4QzMsMHg5NSwgMHg3NiwweEI1LAorMHhGRiwweEYwLCAweDgzLDB4MTYsIDB4RkYsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgxOSwgMHhGRiwweEYwLCAweEM2LDB4QjgsCisweDY4LDB4MDAsIDB4QzcsMHgyOCwgMHg2OCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzMCwKKzB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwgMHhDNSwweEM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFMCwweDAwLAorMHhDMSwweEM0LCAweDA1LDB4MjgsIDB4MDAsMHgwMSwgMHg4MywweDk2LCAweDAwLDB4MDAsIDB4RjQsMHg4MiwgMHgwMCwweDA2LCAweEY0LDB4ODUsCisweDQyLDB4NTQsIDB4RjYsMHgwNCwgMHg0MiwweDYwLCAweDI1LDB4MTQsIDB4MDAsMHgxRSwgMHgyMywweDE0LCAweDAwLDB4MjAsIDB4OTMsMHgxNiwKKzB4RkYsMHhBQywgMHhGMywweDg1LCAweDQwLDB4NzgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHhBQywKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LAorMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwKKzB4MDAsMHgxQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsCisweDAwLDB4MTgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LAorMHgwMCwweDE2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwKKzB4MDAsMHgxNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsCisweDAwLDB4MTIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MTAsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MDcsMHgxQywKKzB4MDAsMHgwMiwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MjMsMHg5NCwgMHgwMCwweDUwLCAweDkzLDB4OTYsIDB4RkYsMHhBNCwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEQyLDB4NTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg0LDB4OTYsCisweEZGLDB4QTQsIDB4MjMsMHgxNCwgMHgwMCwweDM4LCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgyNywweDgwLCAweDAwLDB4MDcsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHg5MywweDE2LCAweEZGLDB4OUMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhDRiwweDI0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDAyLCAweEZGLDB4MzQsIDB4MjcsMHg4MCwgMHgwMCwweDA3LCAweEY3LDB4ODUsCisweDQyLDB4NTgsIDB4RjcsMHgwNSwgMHg0MiwweDY0LCAweDI3LDB4ODAsIDB4MDAsMHgwNywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHg4NCwweDk2LAorMHhGRiwweEFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweEY1LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEM1LDB4OTUsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LAorMHg0MiwweDU4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGMywweDA2LCAweDM5LDB4QzAsIDB4RjMsMHgwNSwgMHg0MiwweDQ0LCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHg4MiwKKzB4MDAsMHgxQywgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMCwgMHhDNSwweEM0LCAweEIzLDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjUsMHgwMCwKKzB4MDAsMHgwNywgMHhGNywweDA0LCAweDQwLDB4NzQsIDB4RjYsMHg4NCwgMHg0RiwweDU4LCAweEY2LDB4MDQsIDB4NDIsMHg2MCwgMHhDNywweDM4LAorMHg2QSwweDAwLCAweDc1LDB4QjgsIDB4RkYsMHhGQSwgMHgwNiwweDMwLCAweDAwLDB4MEEsIDB4MjAsMHgyQSwgMHgwMCwweDA3LCAweEVFLDB4MDAsCisweEM2LDB4NDgsIDB4MDcsMHgzMCwgMHgwMCwweDBFLCAweDg2LDB4QkEsIDB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHhGRiwgMHhDNiwweEI0LAorMHg3NCwweDAwLCAweDQ3LDB4MkQsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhDNiwweDRDLCAweEMzLDB4MjgsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4RTAsMHgwMCwKKzB4QzUsMHhGQywgMHgwNSwweDI4LCAweDAwLDB4MDEsIDB4RjMsMHgwMiwgMHgwMCwweDA4LCAweEM1LDB4MTgsIDB4MzAsMHgwMCwgMHhGMywweDg0LAorMHg0MiwweDYwLCAweEY2LDB4MDQsIDB4NEYsMHg1OCwgMHhGNywweDA0LCAweDQwLDB4N0MsIDB4RjQsMHg4NCwgMHg0MCwweDc0LCAweEM1LDB4MUMsCisweDUwLDB4MDAsIDB4MDUsMHgyOCwgMHgwMCwweDI2LCAweDg1LDB4QUEsIDB4MDAsMHgwMCwgMHg3NCwweDI5LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwKKzB4RkYsMHhFNSwgMHhDNiwweDFDLCAweDYyLDB4MDAsIDB4NzYsMHgzMCwgMHhGRiwweEZBLCAweEM2LDB4QjgsIDB4NzAsMHgwMCwgMHhDNCwweEE0LAorMHg2OCwweDAwLCAweDA0LDB4QTQsIDB4MDAsMHgyNiwgMHg3NiwweEE1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDc3LDB4MzksCisweDAwLDB4MTAsIDB4NzcsMHgzOSwgMHhGRiwweEY4LCAweDQ2LDB4MzEsIDB4MDAsMHgwMCwgMHhDNSwweEFDLCAweDQ3LDB4QzAsIDB4NzUsMHhBRCwKKzB4RkYsMHhGMCwgMHhGNCwweDAyLCAweDAwLDB4RkYsIDB4QzUsMHhBQywgMHg0NCwweDAwLCAweEM3LDB4MzgsIDB4NTgsMHgwMCwgMHhGNywweDJCLAorMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHg3NSwweEE1LCAweDAwLDB4MUUsIDB4QzYsMHgzMCwgMHg0NCwweDAwLCAweDc1LDB4QUMsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHhGNiwweDgyLCAweEZGLDB4MDAsIDB4QzcsMHgzOCwKKzB4NkMsMHgwMCwgMHhDNiwweDMwLCAweDcwLDB4MDAsIDB4RjYsMHgyNywgMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHg3NiwweDk5LAorMHgwMCwweDEwLCAweDc2LDB4QjUsIDB4RkYsMHhGOCwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsCisweDQ0LDB4MDAsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweEY2LDB4QTcsIDB4MjgsMHgwMCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4RjMsMHg4NCwKKzB4M0IsMHhCMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhENCwweDJDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LCAweDQwLDB4N0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4ODQsIDB4NDAsMHg3NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhCRSwweEY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsCisweDQyLDB4MzAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzUsMHg2MCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHgzMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4MzUsMHhFQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHg0NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4MzYsMHg3OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NDIsMHg0NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNywweDA0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4NDIsMHg0NCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzNywweDkwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg0MiwweDQ0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHgzOCwweDFDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg0MiwweDQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHgzOCwweEE4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg0MiwweDQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM5LDB4MzQsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHg0MiwweDQ0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDM5LDB4QzAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDQyLDB4NDQsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDNBLDB4NEMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDQyLDB4NDQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDNBLDB4RDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg1LDB4OTYsCisweDAwLDB4MDAsIDB4RjUsMHgwNiwgMHgzQiwweDkwLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LAorMHg1MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwMiwgMHg4NiwweEJBLCAweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4MzcsIDB4RkYsMHhGMCwgMHhFRSwweDAwLCAweEM5LDB4OTUsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg1MCwweDAwLCAweDg2LDB4QkEsCisweDAwLDB4MDQsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwKKzB4RkYsMHhGMCwgMHhBNiwweEFFLCAweDY4LDB4MDIsIDB4NzcsMHgzMSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHgyNywweDM4LAorMHgwMCwweDA4LCAweDg0LDB4QkEsIDB4MDAsMHgwNCwgMHg4NCwweDNBLCAweDAwLDB4MDAsIDB4RTAsMHgwMCwgMHhDOSwweEI0LCAweEM1LDB4MjQsCisweDAwLDB4MDAsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHg4NSwweDNBLAorMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RjYsMHgwNiwgMHgzQiwweDkwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwKKzB4MDAsMHgwMywgMHhBNiwweEJBLCAweDYwLDB4MDIsIDB4QzcsMHgzOCwgMHg2MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LAorMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHhFRSwweDAwLCAweEM5LDB4RjksIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweDc3LDB4MjEsCisweEZGLDB4RjAsIDB4QzYsMHhCOCwgMHg2OCwweDAwLCAweEM3LDB4MkMsIDB4NjgsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhDMSwweDI4LCAweDAwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHhGNSwweDA2LCAweDNCLDB4NzAsIDB4ODcsMHgyRSwKKzB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDc3LDB4MzksIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDUwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAyLCAweDg2LDB4QkEsCisweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHgzNywKKzB4RkYsMHhGMCwgMHhFRSwweDAwLCAweENBLDB4QkQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDc3LDB4MzksCisweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHg1MCwweDAwLCAweDg2LDB4QkEsIDB4MDAsMHgwNCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEE2LDB4QUUsIDB4NjgsMHgwMiwgMHg3NywweDMxLAorMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHgyNywweDM4LCAweDAwLDB4MDgsIDB4ODQsMHhCQSwgMHgwMCwweDA0LCAweDg0LDB4M0EsCisweDAwLDB4MDAsIDB4RTAsMHgwMCwgMHhDQSwweERDLCAweEM1LDB4MjQsIDB4MDAsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LAorMHgwMCwweDAzLCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHg4NSwweDNBLCAweDAwLDB4MDQsIDB4ODMsMHg5NiwgMHgwMCwweDA0LCAweDc2LDB4QUQsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg5MywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgyRSwKKzB4MDAsMHgwMCwgMHhGNiwweDA2LCAweDNCLDB4NzAsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweDM5LAorMHgwMCwweDAzLCAweEE2LDB4QkEsIDB4NjAsMHgwMiwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweEVFLDB4MDAsIDB4Q0IsMHgyOSwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4NzcsMHgyMSwKKzB4RkYsMHhGMCwgMHhDNiwweEI4LCAweDY4LDB4MDAsIDB4QzcsMHgyQywgMHg2OCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEMxLDB4MjgsIDB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjUsMHgwNCwgMHg0RiwweDU4LCAweEY1LDB4ODIsIDB4MDAsMHgwMiwgMHgwNiwweDI4LAorMHgwMCwweDgwLCAweDIwLDB4MkUsIDB4MDAsMHg2MiwgMHhFRSwweDAwLCAweENCLDB4OTAsIDB4MDcsMHgzMCwgMHgwMCwweDQwLCAweEYwLDB4MzMsCisweDI4LDB4MDAsIDB4QzYsMHhCOCwgMHg1MiwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhGQSwgMHgwNiwweDMwLCAweDAwLDB4MTQsIDB4RjYsMHhCMywKKzB4MjgsMHgwMCwgMHhDNiwweDM4LCAweDAwLDB4MDAsIDB4RTAsMHgwMCwgMHhDQiwweDY0LCAweDA1LDB4QUMsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHg0RiwweDU4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweEI4LCAweDE4LDB4RDQsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweEY0LDB4QjcsCisweDI4LDB4MDAsIDB4MDcsMHgzOCwgMHgxOCwweEMwLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDQyLDB4QzAsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMiwgMHhGNCwweEJCLCAweDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4RjYsMHg4NCwgMHg0MiwweEMwLCAweEY2LDB4MDYsIDB4NDIsMHhDMCwgMHg3NywweDMxLCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHhGNywweDA0LAorMHg0RiwweDU4LCAweDc2LDB4QjUsIDB4MDAsMHgwNiwgMHhDNCwweDM4LCAweDY4LDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDE0LCAweDc2LDB4QTEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywKKzB4MjgsMHgwMCwgMHhGNywweDA0LCAweDQyLDB4QzAsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFNiwweDAwLCAweENDLDB4NEMsIDB4RjYsMHgwNiwgMHg0MiwweDkwLCAweEY3LDB4MDQsCisweDQyLDB4OTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwNCwgMHg4NSwweDE2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhDRCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4RjQsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweENDLDB4QkMsIDB4RjUsMHg4NiwgMHg0MiwweEMwLCAweEY3LDB4MDQsIDB4NDIsMHg5MCwgMHhGNiwweDA2LCAweDQyLDB4OTIsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4Q0MsMHhFQywgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjAsMHgyQiwgMHgyOCwweDAwLCAweEY2LDB4ODQsCisweDQyLDB4QzAsIDB4NzcsMHgyRCwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHgwNiwweDI4LCAweDAwLDB4MTQsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4RjcsMHgwNCwgMHg0RiwweDU4LCAweEY2LDB4QjMsIDB4MjgsMHgwMCwgMHhDNywweDI4LAorMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODYsMHg5NiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHhGNCwweDAyLAorMHgwMCwweDAwLCAweEM2LDB4QjQsIDB4NzIsMHgwMCwgMHg3NywweDM0LCAweEZGLDB4RkEsIDB4MjcsMHgzOCwgMHgwMCwweDAyLCAweDIwLDB4M0EsCisweDAwLDB4NjEsIDB4RjcsMHgwMiwgMHgwMCwweDNGLCAweEUyLDB4MDAsIDB4Q0QsMHg0MCwgMHhDNiwweEI0LCAweDc0LDB4MDAsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweENELDB4NDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHg4NiwweDE2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwKKzB4MDAsMHgwOCwgMHg4NSwweDk2LCAweDAwLDB4MDQsIDB4QzUsMHgzMCwgMHg3MCwweDAwLCAweEMwLDB4MzIsIDB4NTIsMHgwMCwgMHhFNiwweDAwLAorMHhDRCwweEExLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEIyLCAweDAwLDB4MDAsIDB4NzcsMHgzMSwgMHgwMCwweDFFLCAweDc3LDB4MzgsCisweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhFOCwgMHhGNiwweEFGLCAweDY4LDB4MDAsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMSwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTYsMHgwMCwgMHhDRCwweDc4LCAweDA1LDB4QUMsIDB4MDAsMHgwMSwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODQsMHg5NiwKKzB4MDAsMHgwMCwgMHg4NCwweDE2LCAweDAwLDB4MDQsIDB4ODUsMHg5NiwgMHgwMCwweDA4LCAweDg2LDB4QTYsIDB4MDAsMHgwMCwgMHg3NywweDI1LAorMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzUsMHgzNSwgMHhGRiwweEYwLCAweDIwLDB4MkEsCisweDAwLDB4MTAsIDB4RTIsMHgwMCwgMHhDRSwweDBELCAweEY2LDB4MDYsIDB4NDIsMHg4RSwgMHhGNSwweDAyLCAweDAwLDB4MTAsIDB4RjcsMHgwNCwKKzB4NDIsMHg4QywgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MjAsMHgyRSwgMHgwMCwweDAxLCAweEU2LDB4MDAsCisweENFLDB4NzAsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEVFLDB4MDAsIDB4Q0UsMHg3MSwgMHgwNywweDI0LCAweDAwLDB4MDIsIDB4MjUsMHgyOCwKKzB4MDAsMHgwMSwgMHhBNSwweEJBLCAweDUwLDB4MDIsIDB4ODYsMHgyMiwgMHgwMCwweDAwLCAweDc2LDB4QTEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM1LDB4QUMsCisweDc3LDB4QzAsIDB4QzYsMHgzMCwgMHg2RiwweEMwLCAweDc2LDB4MzEsIDB4RkYsMHhGMCwgMHg3NSwweEFELCAweEZGLDB4RTgsIDB4RjYsMHg4MiwKKzB4MDAsMHhGRiwgMHhGNywweDAyLCAweEYxLDB4NTQsIDB4NzUsMHhBRCwgMHgwMCwweDAyLCAweEE3LDB4MkUsIDB4NzAsMHgwMiwgMHhDNiwweDMwLAorMHg2QywweDAwLCAweEM2LDB4MzAsIDB4NzUsMHg4MCwgMHhGNiwweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgyMCwgMHgwMCwweDAyLCAweDI1LDB4QTgsCisweDAwLDB4MDEsIDB4RjMsMHgwMiwgMHhGMiwweDQ2LCAweDAzLDB4QTQsIDB4MDAsMHgwMiwgMHhDNCwweEFDLCAweDM4LDB4MDAsIDB4MjUsMHgyQywKKzB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RUMsMHgwMCwgMHhDRiwweDExLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFNiwweDAwLAorMHhDRSwweEEwLCAweEM3LDB4MUMsIDB4NTAsMHgwMCwgMHhFMCwweDAwLCAweENFLDB4QjQsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweEE2LDB4OUUsCisweDUwLDB4MDIsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHgzNSwKKzB4RkYsMHhFOCwgMHg4NiwweEE2LCAweDAwLDB4MDAsIDB4NzcsMHgyNSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHgyNSwweDI4LAorMHgwMCwweDAyLCAweDI1LDB4QUMsIDB4MDAsMHgwMiwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEU4LCAweDc3LDB4MzEsCisweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg2MiwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMSwgMHhDNywweDM4LCAweDMwLDB4MDAsIDB4QzYsMHhCNCwKKzB4NjgsMHgwMCwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDBFLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgyNCwweEE0LAorMHgwMCwweDAyLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweEUwLDB4MDAsIDB4Q0UsMHg4NCwgMHgyNCwweDIwLCAweDAwLDB4MDIsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDBDLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDA4LCAweDgzLDB4MTYsCisweDAwLDB4MDQsIDB4ODMsMHg5NiwgMHgwMCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHgwNSwweDlDLCAweDAwLDB4MDIsIDB4NzQsMHg5RCwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg3NCwweDFELAorMHgwMCwweDFFLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweDMxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLAorMHgwMCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MDAsIDB4NzQsMHgyMCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDRGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDFGLAorMHgyOCwweDAwLCAweDg3LDB4MUUsIDB4MDAsMHgwMCwgMHgwNCwweDlDLCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg0NywweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4MjUsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFRSwweDAwLCAweEQwLDB4QkQsIDB4MjYsMHgyOCwKKzB4MDAsMHgwMSwgMHhBNywweDI2LCAweDYwLDB4MDIsIDB4QzYsMHhBNCwgMHg2MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM1LDB4QTQsIDB4NTAsMHgwMCwgMHhDNSwweDMwLCAweDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksCisweEZGLDB4RTgsIDB4RTAsMHgwMCwgMHhEMCwweDg4LCAweEY3LDB4MkYsIDB4NjgsMHgwMCwgMHgwNywweDFDLCAweDAwLDB4MDIsIDB4RjMsMHgzQiwKKzB4NjgsMHgwMCwgMHhDNCwweDFDLCAweDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDBDLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4ODYsMHgxNiwgMHgwMCwweDA0LCAweDg0LDB4MTYsIDB4MDAsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDUsMHhBMCwgMHgwMCwweDAyLCAweDc0LDB4QTEsIDB4MDAsMHgxRSwgMHg3NCwweEE0LAorMHhGRiwweEU1LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg3NSwweDMxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NTcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkYsIDB4MjgsMHgwMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyRiwgMHgyOCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgwNiwweEEwLCAweDAwLDB4MDIsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJGLCAweDI4LDB4MDAsIDB4ODcsMHgyMiwKKzB4MDAsMHgwMCwgMHg3NiwweDIxLCAweDAwLDB4MUUsIDB4ODUsMHg5NiwgMHgwMCwweDA4LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHhGNSwweEI3LCAweDY4LDB4MDAsIDB4ODcsMHgyMiwgMHgwMCwweDAwLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgyMywKKzB4MjgsMHgwMCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwQywgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsCisweDAwLDB4MjAsIDB4MjcsMHgxNCwgMHgwMCwweDIwLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDQsIDB4RjUsMHgwMiwKKzB4MDAsMHgwMCwgMHg4NiwweEE2LCAweDAwLDB4MDAsIDB4NzYsMHgyNSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHgwNCwweDI0LAorMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NjcsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4RjYsMHhCQiwgMHgyOCwweDAwLCAweDg3LDB4MjYsCisweDAwLDB4MDAsIDB4NzYsMHhBNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHhDMCwweDJBLCAweDcyLDB4MDAsIDB4RUMsMHgwMCwgMHhEMiwweEY4LCAweDc2LDB4QTUsIDB4MDAsMHgxRSwgMHg4NywweDI2LAorMHgwMCwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNiwweDI4LCAweDAwLDB4MDEsIDB4MjUsMHg5NCwgMHgwMCwweDFFLCAweEM1LDB4QUMsCisweDUwLDB4MDAsIDB4QzUsMHgzMCwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4QzcsMHgzOCwKKzB4NTIsMHgwMCwgMHhBNiwweEEyLCAweDcwLDB4MDIsIDB4QzcsMHgyMCwgMHg3MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LAorMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RTgsIDB4QzYsMHg4MCwgMHg2QSwweDAwLCAweEUwLDB4MDAsCisweEQyLDB4OTAsIDB4RjYsMHhBRiwgMHg2OCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHg3NiwweDE1LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHg4MywweDk2LCAweDAwLDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDFFLCAweDc1LDB4OTksIDB4MDAsMHgxRSwgMHg3NSwweEFDLAorMHhGRiwweEU1LCAweDc1LDB4MTUsIDB4MDAsMHgxRSwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsCisweEZGLDB4RTUsIDB4NzQsMHgxNSwgMHgwMCwweDFFLCAweDc0LDB4MjAsIDB4RkYsMHhFNSwgMHgwNiwweDlDLCAweDAwLDB4MDIsIDB4NzMsMHg5NSwKKzB4MDAsMHgxRSwgMHg5MywweDk2LCAweEZGLDB4REMsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDgzLDB4OTYsIDB4MDAsMHgwMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MUYsIDB4MjgsMHgwMCwgMHg4MywweDk2LCAweEZGLDB4REMsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDczLDB4OUMsCisweEZGLDB4RTUsIDB4OTMsMHg5NiwgMHhGRiwweERDLCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweDIzLDB4MTQsIDB4MDAsMHgxQSwgMHg3NiwweDE5LAorMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsCisweDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhFOCwgMHgyMywweDE0LAorMHgwMCwweDE2LCAweDc2LDB4MTksIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwKKzB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LAorMHhGRiwweEVDLCAweDIzLDB4MTQsIDB4MDAsMHgxMiwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDQ3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgwMiwgMHg4NCwweDE2LCAweDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LAorMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHgzRiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweDg2LDB4MTYsIDB4MDAsMHgwMCwgMHg4NCwweDE2LCAweDAwLDB4MDQsIDB4RjYsMHg4NCwgMHg0RiwweDU4LCAweDg3LDB4MzIsCisweDAwLDB4MTQsIDB4MDMsMHgzMCwgMHgwMCwweDE0LCAweDc1LDB4MTksIDB4MDAsMHgxRSwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzMsMHhBMCwKKzB4NkEsMHgwMCwgMHg3MywweDlDLCAweEZGLDB4RkEsIDB4MDQsMHhBMCwgMHgwMCwweDE0LCAweDc1LDB4QTUsIDB4MDAsMHgxRSwgMHhDNiwweDMwLAorMHg2QSwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhGQSwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4RjMsMHg5QiwgMHgyOCwweDAwLCAweDA3LDB4MjAsIDB4MDAsMHgxNiwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4ODcsMHgyMiwKKzB4MDAsMHgxNCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg3NywweDM5LAorMHgwMCwweDA2LCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTYsIDB4RjMsMHhCNywgMHgyOCwweDAwLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4MTYsIDB4MDAsMHgwMCwgMHhGNSwweDg0LAorMHg0RiwweDU4LCAweDA1LDB4MzAsIDB4MDAsMHgxNiwgMHg4NywweDJBLCAweDAwLDB4MDAsIDB4NzYsMHhBOSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4QzQsMHgyQywKKzB4NzAsMHgwMCwgMHhDMCwweDIyLCAweDYyLDB4MDAsIDB4RTYsMHgwMCwgMHhENSwweDI5LCAweDA2LDB4QTAsIDB4MDAsMHgxNiwgMHg4NywweDM2LAorMHgwMCwweDAwLCAweEM2LDB4MzAsIDB4NUEsMHgwMCwgMHg3NiwweDMwLCAweEZGLDB4RkEsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHg3NywweDM5LCAweDAwLDB4MDYsIDB4NzYsMHhCOCwKKzB4RkYsMHhGQSwgMHhGNiwweEFCLCAweDI4LDB4MDAsIDB4QzcsMHgyQywgMHg3MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgxNCwgMHhFMCwweDAwLAorMHhENSwweDJDLCAweEY2LDB4M0IsIDB4MjgsMHgwMCwgMHhDNCwweDJDLCAweDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgMHg0RiwweDg0LCAweDQ3LDB4MzgsIDB4RkYsMHhGQywgMHhGNywweDA1LAorMHg2RiwweDMwLCAweEY2LDB4ODYsIDB4NTAsMHg1QywgMHg0NiwweEI0LCAweEZGLDB4RkMsIDB4RjYsMHg4NSwgMHg2RSwweDUwLCAweEY3LDB4MDYsCisweDZFLDB4N0MsIDB4NDcsMHgzOCwgMHhGRiwweEZDLCAweEY3LDB4MDUsIDB4NkUsMHg1NCwgMHgwNywweDM0LCAweDE5LDB4MUMsIDB4RjcsMHgwNSwKKzB4NEYsMHg1QywgMHhGNywweDAyLCAweDAwLDB4NjQsIDB4OTcsMHgzNiwgMHgxOSwweDFDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDM2LAorMHgxOSwweDIwLCAweDA2LDB4QjQsIDB4MDAsMHgxQywgMHhGNiwweDg1LCAweDRGLDB4NTgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDkwLCAweEYzLDB4MDIsIDB4RkYsMHhGRiwgMHhGMywweDA1LAorMHg0RiwweDU0LCAweEYzLDB4ODIsIDB4MDAsMHgwMCwgMHg5MywweDk2LCAweEZGLDB4QUMsIDB4MjMsMHgxNCwgMHgwMCwweDIwLCAweDkzLDB4MTYsCisweEZGLDB4OUMsIDB4MjMsMHg5NCwgMHgwMCwweDM4LCAweDkzLDB4OTYsIDB4RkYsMHg5NCwgMHg4MywweDE2LCAweEZGLDB4QUMsIDB4RjcsMHgwNCwKKzB4NEYsMHg1QywgMHhGMywweDgyLCAweDAwLDB4MEMsIDB4OTMsMHg5NiwgMHhGRiwweDc0LCAweDkzLDB4MTYsIDB4RkYsMHg4QywgMHg4NywweDNBLAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDE2LCAweEZGLDB4QTQsIDB4ODMsMHgxNiwgMHhGRiwweEFDLCAweDgzLDB4OTYsCisweEZGLDB4QTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MUEsIDB4M0EsMHgwMCwgMHhFQywweDAwLCAweERCLDB4NzgsIDB4RjMsMHgwMiwKKzB4MDQsMHhCQywgMHhGNywweDA0LCAweDRGLDB4NUMsIDB4ODMsMHgxNiwgMHhGRiwweDc0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHgzMCwweDAwLCAweDg3LDB4M0EsIDB4MDAsMHgwOCwgMHhGNiwweDg0LCAweDRGLDB4NTgsIDB4NzcsMHgzOSwgMHgwMCwweDA2LCAweEM0LDB4QjQsCisweDcwLDB4MDAsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDk0LDB4OTYsIDB4RkYsMHg3QywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4Q0QsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODQsMHg5NiwgMHhGRiwweDdDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhENiwweDU0LCAweEM1LDB4MDQsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDQyLDB4ODgsIDB4RTAsMHgwMCwgMHhEOCwweDdDLCAweEY2LDB4MDYsCisweDQyLDB4ODgsIDB4RjYsMHgwNCwgMHg0RiwweDVDLCAweDgzLDB4OTYsIDB4MDAsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4NzQsIDB4ODYsMHg5RSwKKzB4MDAsMHgwMCwgMHhBNywweDMyLCAweDMwLDB4MDIsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHhENiwweDk0LCAweEM2LDB4MzAsIDB4MzAsMHgwMCwgMHg4NiwweDlFLCAweDAwLDB4MDQsIDB4ODcsMHgzMiwgMHgwMCwweDA0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4RDYsMHg5OCwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwKKzB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhENiwweEE1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDAyLAorMHgwMCwweDAwLCAweDgzLDB4OTYsIDB4MDAsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4ODYsMHg5RSwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4RDYsMHhFNCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFNiwweDAwLCAweEQ2LDB4RUMsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweDg2LDB4OUUsIDB4MDAsMHgwNCwgMHg4NywweDMyLAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhENiwweEVELCAweDIwLDB4MkUsCisweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEQ2LDB4RkQsIDB4MjAsMHgyQSwKKzB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RDcsMHgyOCwgMHgwNCwweEE0LAorMHgwMCwweDAyLCAweDgzLDB4MTYsIDB4RkYsMHhBQywgMHhGNywweDA2LCAweDQyLDB4QzgsIDB4ODMsMHg5NiwgMHhGRiwweDhDLCAweEYzLDB4MDUsCisweDRGLDB4NTQsIDB4QzcsMHgxQywgMHg3MCwweDAwLCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4RTAsMHgwMCwKKzB4REIsMHg1MCwgMHhGMCwweDNCLCAweDI4LDB4MDAsIDB4OTQsMHg5NiwgMHhGRiwweDZDLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHg3NiwweEE1LAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHg4MywweDE2LCAweEZGLDB4NkMsIDB4ODMsMHg5NiwgMHhGRiwweDlDLCAweDI0LDB4OTQsCisweDAwLDB4MUUsIDB4MDYsMHgxOCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweDFELAorMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgxQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MTgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MjQsMHg5NCwgMHgwMCwweDE2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDI0LDB4OTQsIDB4MDAsMHgxNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MTIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNCwweDk0LCAweDAwLDB4MTAsIDB4NzYsMHgzMSwKKzB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhFMCwgMHhGNiwweDgyLCAweEZGLDB4RkMsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAzLCAweEM0LDB4QjgsIDB4NkMsMHgwMCwgMHgyMCwweDI2LCAweDAwLDB4MTAsIDB4RTIsMHgwMCwKKzB4RDgsMHg5RCwgMHhGNiwweDA2LCAweDQyLDB4OEEsIDB4RjcsMHgwNCwgMHg0MiwweDg4LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RTAsMHgwMCwgMHhEQiwweEEwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4MywweDE2LCAweEZGLDB4NkMsIDB4MjUsMHgxNCwKKzB4MDAsMHgzNiwgMHg4MywweDk2LCAweEZGLDB4OTQsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweDA2LDB4MTgsIDB4MDAsMHgwMiwgMHg3NSwweEIxLCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgxRiwgMHgyOCwweDAwLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHgzNCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MzIsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDMwLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHgyRSwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4MkMsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDJBLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHgyOCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNiwweEE0LCAweDAwLDB4MDIsIDB4NzQsMHhBNCwgMHhGRiwweEZGLCAweDc2LDB4MzEsCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwKKzB4MjgsMHgwMCwgMHg5MCwweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRiwweDhDLCAweEY3LDB4MDYsIDB4NDIsMHhDQywgMHhDNywweDE4LAorMHg3MCwweDAwLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk0LDB4OTYsCisweEZGLDB4N0MsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwKKzB4RkYsMHg2QywgMHgyNCwweDE0LCAweDAwLDB4NEUsIDB4MjUsMHgxNCwgMHgwMCwweDUwLCAweDgzLDB4MTYsIDB4RkYsMHg4QywgMHg4NCwweDk2LAorMHhGRiwweDdDLCAweDg3LDB4MUUsIDB4MDAsMHgwMCwgMHg3NiwweDlELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA2LDB4MUMsCisweDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4MjksIDB4MDAsMHgxRSwgMHg3NSwweDI4LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDI0LDB4MTQsCisweDAwLDB4NEMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHgyNCwweDE0LAorMHgwMCwweDRBLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwKKzB4MDAsMHg0OCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDI0LDB4MTQsCisweDAwLDB4NDYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHgyNCwweDE0LAorMHgwMCwweDQ0LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwKKzB4MDAsMHg0MiwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDI0LDB4MTQsIDB4MDAsMHg0MCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHg4NiwweDk2LAorMHhGRiwweEIwLCAweEY2LDB4MDYsIDB4NDIsMHhDOCwgMHhDNiwweDE4LCAweDYwLDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDAzLCAweEM2LDB4QjQsCisweDU3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NzQsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwKKzB4NkEsMHgwMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweEY0LDB4QjMsIDB4MjgsMHgwMCwgMHg4MywweDk2LAorMHhGRiwweDhDLCAweDgzLDB4MTYsIDB4RkYsMHg3NCwgMHgwMywweDlDLCAweDAwLDB4MTQsIDB4OTMsMHg5NiwgMHhGRiwweDhDLCAweDAzLDB4MTgsCisweDAwLDB4MEMsIDB4ODMsMHg5NiwgMHhGRiwweEFDLCAweDkzLDB4MTYsIDB4RkYsMHg3NCwgMHgwMywweDlDLCAweDAwLDB4MDEsIDB4RTAsMHgwMCwKKzB4RDUsMHhFQywgMHg5MywweDk2LCAweEZGLDB4QUMsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4ODQsIDB4NEYsMHg1QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNiwweEY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMSwweEEwLCAweEY1LDB4MDIsCisweDAwLDB4MDAsIDB4RjMsMHg4NCwgMHg2RSwweDUwLCAweEY2LDB4MDIsIDB4MDAsMHgxQywgMHgyMCwweDJBLCAweDAwLDB4NjMsIDB4RUUsMHgwMCwKKzB4REMsMHgwOCwgMHhDNSwweDlDLCAweDYwLDB4MDAsIDB4QTYsMHg5RSwgMHg2MCwweDAyLCAweDc3LDB4MkQsIDB4MDAsMHgxRSwgMHg3NywweDM4LAorMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4MjAsMHgzNiwgMHgwMCwweDAzLCAweEU2LDB4MDAsCisweERCLDB4RkMsIDB4MDcsMHgyQywgMHgwMCwweDM2LCAweEYwLDB4M0IsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4NDAsIDB4RTAsMHgwMCwKKzB4REIsMHhDQywgMHgwNSwweDI4LCAweDAwLDB4MDEsIDB4RjUsMHg4NCwgMHg0RiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEFFLAorMHgwMCwweDA4LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RUMsMHgwMCwgMHhEQywweEYwLCAweDk2LDB4OTYsIDB4RkYsMHhFQywgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwKKzB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzYsMHgzOCwgMHg1OCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwQywgMHhDMywweDg0LAorMHgwMCwweDAwLCAweDgzLDB4MTYsIDB4MDAsMHgwMCwgMHg4NiwweEIyLCAweDAwLDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4REMsMHg3QywgMHhDNSwweDIwLCAweDAwLDB4MDAsIDB4ODYsMHhCMiwKKzB4MDAsMHgwNCwgMHg4NywweDFBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFNiwweDAwLAorMHhEQywweDgwLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweERDLDB4OEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEYzLDB4ODIsIDB4MDAsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4ODYsMHhCMiwKKzB4MDAsMHgwMCwgMHg4NywweDI2LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLAorMHhEQywweENDLCAweEY1LDB4MDIsIDB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhEQywweEQ0LCAweDIwLDB4MkEsCisweDAwLDB4MDAsIDB4ODYsMHhCMiwgMHgwMCwweDA0LCAweDg3LDB4MjYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NzIsMHgwMCwgMHhFMiwweDAwLCAweERDLDB4RDUsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4REMsMHhFNSwgMHgyMCwweDFFLCAweDAwLDB4MDAsIDB4RjMsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MUUsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhEQywweEY0LCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgyMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweERELDB4MjksIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc2LDB4QjksIDB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsCisweDU4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RjAsIDB4RTAsMHgwMCwKKzB4REQsMHg5OCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4MjcsMHgxNCwgMHgwMCwweDE0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDE2LAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4OTYsCisweEZFLDB4NzAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwKKzB4RkUsMHg3MCwgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhERCwweDk1LCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LAorMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsCisweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHg1OCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwKKzB4RkYsMHhGMCwgMHg5NiwweDk2LCAweEZGLDB4RjQsIDB4OTcsMHgyRSwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4REQsMHg5QywgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhERCwweEIwLCAweEY0LDB4ODIsCisweDAwLDB4MDAsIDB4RjcsMHgwNCwgMHg0MiwweDdDLCAweEUwLDB4MDAsIDB4RTAsMHg5QywgMHhGNiwweDA2LCAweDQyLDB4N0UsIDB4OTQsMHg5NiwKKzB4RkYsMHg0NCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4RjYsMHgwNCwgMHg0RiwweDU4LCAweDc3LDB4MzksIDB4MDAsMHgwNiwgMHhDNywweDMwLAorMHg3MCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHg1NCwgMHgwNiwweEI4LCAweDAwLDB4MUEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDgzLDB4MTYsCisweEZGLDB4NTQsIDB4NzYsMHhCNSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4OTMsMHgxMywKKzB4RkYsMHhGQywgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDA2LCAweEM2LDB4MzAsIDB4NzAsMHgwMCwgMHg5NiwweDE2LAorMHhGRiwweDRDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhERSwweDM1LCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHg4NCwweDk2LCAweEZGLDB4NEMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHgwMCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweERFLDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEYzLDB4MDIsCisweDAwLDB4MDEsIDB4OTMsMHgxNiwgMHhGRiwweDQ0LCAweDg0LDB4OTYsIDB4RkYsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyNiwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweERFLDB4NTksIDB4RjYsMHgwNiwgMHg0MiwweEE0LCAweEY3LDB4MDQsIDB4NDIsMHhBNCwgMHhFMCwweDAwLAorMHhFMCwweEEwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg4MywweDE2LCAweEZGLDB4NEMsIDB4ODYsMHgxNiwgMHhGRiwweDRDLCAweDg3LDB4MUEsCisweDAwLDB4MDAsIDB4NzYsMHg5OSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwgMHhERSwweDg1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDA0LAorMHg0RiwweDU4LCAweEY1LDB4ODQsIDB4NEYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg1QSwweDAwLCAweEU2LDB4MDAsCisweEUwLDB4MjUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg0LDB4OTYsIDB4RkYsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHhBNCwKKzB4MDAsMHgxQSwgMHg4NywweDM2LCAweDAwLDB4MDAsIDB4ODMsMHgxNiwgMHhGRiwweDU0LCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4NzcsMHgzOSwgMHgwMCwweDA2LCAweEM3LDB4MkMsCisweDcwLDB4MDAsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDAsIDB4REUsMHhERCwgMHhGNiwweDA2LCAweDQyLDB4ODAsIDB4RjcsMHgwNCwKKzB4NDIsMHg4MCwgMHhFMCwweDAwLCAweEUwLDB4QTAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDI2LDB4MTQsIDB4MDAsMHgzMCwgMHhGMCwweDMzLAorMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhEMCwgMHg3NiwweDMxLCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweDg0LDB4OTYsCisweEZGLDB4NEMsIDB4MjMsMHgxNCwgMHgwMCwweDJFLCAweDkzLDB4MTYsIDB4RkUsMHg2NCwgMHg3NSwweDk5LCAweDAwLDB4MUUsIDB4NzUsMHhBQywKKzB4RkYsMHhFNSwgMHg3NSwweDE1LCAweDAwLDB4MUUsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweDczLDB4MTUsIDB4MDAsMHgxRSwgMHg3MywweDE4LAorMHhGRiwweEU1LCAweDkzLDB4MTYsIDB4RkYsMHgzNCwgMHg4MywweDE2LCAweEZFLDB4NjQsIDB4MDQsMHgyNCwgMHgwMCwweDAyLCAweDA2LDB4QTAsCisweDAwLDB4MDIsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4M0MsIDB4NzQsMHg5NSwKKzB4MDAsMHgxRSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZGLDB4MkMsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RDQsIDB4MjQsMHg5NCwKKzB4MDAsMHgyQSwgMHg5NCwweDk2LCAweEZFLDB4NjQsIDB4NzYsMHgyNSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4RDgsIDB4MjMsMHgxNCwgMHgwMCwweDI2LCAweDkzLDB4MTYsIDB4RkUsMHg2NCwgMHg3NiwweDE5LAorMHgwMCwweDFFLCAweDg0LDB4OTYsIDB4RkYsMHgzQywgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUEsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODQsMHg5NiwKKzB4RkYsMHgzNCwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhEQywgMHgyMywweDE0LCAweDAwLDB4MjIsIDB4OTMsMHgxNiwgMHhGRSwweDY0LCAweDc2LDB4MTksCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RTAsIDB4ODMsMHgxNiwgMHhGRiwweDJDLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhFMCwweDAwLCAweEVBLDB4QTAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDQiwweENDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNiwweEEwLAorMHgwMCwweDAyLCAweEY3LDB4MDQsIDB4NEYsMHg1OCwgMHhGMCwweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhBMCwgMHgwMCwweDE0LCAweDk0LDB4MTYsCisweEZGLDB4MjQsIDB4QzcsMHgyMCwgMHg3MiwweDAwLCAweDc3LDB4MzgsIDB4RkYsMHhGQSwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhBMCwKKzB4MDAsMHgxNiwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4RjQsMHg4MiwgMHgwMCwweDAxLCAweEY0LDB4QTMsIDB4MjgsMHgwMCwgMHg5NCwweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFMCwweEJDLCAweDI2LDB4OTQsIDB4MDAsMHg0OCwgMHhGNywweDA0LCAweDQyLDB4ODAsIDB4RTAsMHgwMCwKKzB4RTAsMHg5QywgMHhGNiwweDA2LCAweDQyLDB4ODIsIDB4ODYsMHg5NiwgMHhGRSwweEY0LCAweEUwLDB4MDAsIDB4RTIsMHg5NCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NDIsMHg4NCwgMHhGNiwweDA2LCAweDQyLDB4ODQsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweEVBLDB4QTQsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDgzLDB4MTYsIDB4RkYsMHg0QywgMHg3NSwweDE1LAorMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZGLDB4MUMsIDB4MDcsMHgxOCwgMHgwMCwweDM2LCAweEY0LDB4ODIsCisweDAwLDB4MDEsIDB4RjQsMHhCQiwgMHgyOCwweDAwLCAweEYwLDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4QjgsIDB4NzYsMHhCNSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MDQsMHgxOCwgMHgwMCwweDAyLCAweDA2LDB4MjAsIDB4MDAsMHgwMiwgMHgyMywweDE0LAorMHgwMCwweDQ2LCAweDkzLDB4MTYsIDB4RkYsMHgxNCwgMHg3NSwweDk5LCAweDAwLDB4MUUsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDc0LDB4OTUsCisweDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDk0LDB4OTYsIDB4RkYsMHgwQywgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwKKzB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZGLDB4MDQsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LAorMHhGRSwweEZDLCAweDIzLDB4MDAsIDB4MDAsMHgwNywgMHg5MywweDE2LCAweEZFLDB4RjQsIDB4ODQsMHg5NiwgMHhGRiwweDFDLCAweDgzLDB4MTYsCisweEZGLDB4MTQsIDB4MDQsMHhBNCwgMHgwMCwweDBBLCAweDk0LDB4OTYsIDB4RkUsMHg3QywgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4RjYsMHg4NCwgMHg0RiwweDU4LCAweDg0LDB4OTYsIDB4RkYsMHg1NCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweEM2LDB4QTQsIDB4NkEsMHgwMCwgMHg3NCwweDM0LCAweEZGLDB4RkEsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4QkMsIDB4MjMsMHgxNCwKKzB4MDAsMHg0MiwgMHg5MywweDE2LCAweEZGLDB4MTQsIDB4NzYsMHg5OSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4QzAsIDB4MjQsMHg5NCwgMHgwMCwweDNFLCAweDk0LDB4OTYsIDB4RkYsMHgxNCwgMHg3NiwweEE1LAorMHgwMCwweDFFLCAweDgzLDB4MTYsIDB4RkYsMHgwQywgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDE2LAorMHhGRiwweEM0LCAweDI0LDB4OTQsIDB4MDAsMHgzQSwgMHg5NCwweDk2LCAweEZGLDB4MTQsIDB4NzYsMHhBNSwgMHgwMCwweDFFLCAweDgzLDB4MTYsCisweEZGLDB4MDQsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4MzcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzMywKKzB4MjgsMHgwMCwgMHg4NywweDI2LCAweDAwLDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MzMsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4QzgsIDB4ODQsMHg5NiwgMHhGRSwweEZDLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg0RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODMsMHgxNiwKKzB4RkUsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgxQSwgMHgwMCwweDA3LCAweEVFLDB4MDAsIDB4RTIsMHg5NCwgMHhGNiwweDgyLAorMHgwMCwweDA4LCAweDg0LDB4OTYsIDB4RkUsMHg3QywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgyNCwgMHgwMCwweDBFLCAweDg2LDB4QkEsCisweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwKKzB4RkYsMHhGMCwgMHhGNywweDAyLCAweDAwLDB4RkYsIDB4QzYsMHhCNCwgMHg3NCwweDAwLCAweDQ3LDB4MjEsIDB4MDAsMHgwMCwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFMCwweDg4LCAweDA0LDB4QTQsCisweDAwLDB4MDIsIDB4OTQsMHg5NiwgMHhGRSwweDdDLCAweDAzLDB4MTgsIDB4MDAsMHgwMSwgMHhFMCwweDAwLCAweEUyLDB4MzAsIDB4OTMsMHgxNiwKKzB4RkUsMHhGNCwgMHg4MywweDE2LCAweEZGLDB4MUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MTgsIDB4MDAsMHgzOCwgMHhGNiwweEJCLAorMHgyOCwweDAwLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg4NCwweDk2LCAweEZGLDB4MjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk0LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDQsMHgyQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjMsMHgxNCwKKzB4MDAsMHg3OCwgMHg5MywweDE2LCAweEZFLDB4QkMsIDB4ODQsMHg5NiwgMHgwMCwweDAwLCAweDIzLDB4MTQsIDB4MDAsMHhBOCwgMHg4NiwweEE2LAorMHgwMCwweDA0LCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHg5MywweDE2LCAweEZFLDB4OUMsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDk2LDB4OTYsCisweEZFLDB4RUMsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEM3LDB4MzQsIDB4NzQsMHgwMCwgMHg5NywweDE2LCAweEZFLDB4RTQsIDB4ODQsMHg5NiwKKzB4RkYsMHgyNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhENCwweEI0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA0LCAweDRGLDB4NTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MjIsCisweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhFQSwweEExLCAweDk0LDB4MTYsIDB4RkYsMHgxQywgMHg4NiwweEEyLCAweDAwLDB4MzgsIDB4NzcsMHgyMSwKKzB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4RjMsMHgwMiwgMHgwMCwweDAwLCAweDkzLDB4MTYsIDB4RkUsMHhENCwgMHhDNiwweEI0LAorMHg3NywweEMwLCAweDc2LDB4QjUsIDB4RkYsMHhGMCwgMHg5NiwweDk2LCAweEZFLDB4REMsIDB4ODQsMHg5NiwgMHhGRSwweEQ0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDBFLCAweEVFLDB4MDAsIDB4RTIsMHhGMCwgMHhGMywweDAyLCAweDAwLDB4MEYsIDB4OTMsMHgxMywKKzB4RkYsMHhGQywgMHg4MywweDE2LCAweEZFLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MTgsIDB4NDgsMHgwMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI3LDB4RTgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEMzLDB4QTAsCisweDAwLDB4MDAsIDB4ODQsMHg5NiwgMHhGRSwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4RTMsMHg4RCwgMHgyMywweDlDLCAweDAwLDB4MDcsIDB4QzMsMHg4MCwgMHgzQSwweDAwLCAweEM3LDB4MUMsIDB4MzgsMHgwMCwgMHg4MywweDE2LAorMHhGRiwweDFDLCAweEY0LDB4ODIsIDB4MDAsMHhGRiwgMHhGNiwweDA0LCAweDRGLDB4NTgsIDB4QzcsMHgxOCwgMHg3MCwweDAwLCAweDA3LDB4MzgsCisweDAwLDB4MjYsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkUsMHhDNCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwgMHhGRiwweEYwLCAweEM2LDB4QjQsIDB4NEMsMHgwMCwgMHg3NiwweEI1LAorMHgwMCwweDA2LCAweEMzLDB4MzAsIDB4NjgsMHgwMCwgMHgwNywweDMwLCAweDAwLDB4NDAsIDB4QzAsMHgxQSwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweEU0LDB4MEQsIDB4OTMsMHgxNiwgMHhGRSwweENDLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LCAweEZFLDB4NzQsIDB4OTYsMHgxNiwKKzB4RkUsMHg2QywgMHg5NiwweDk2LCAweEZFLDB4NjgsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHgwMCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDgzLDB4OTYsIDB4RkUsMHg3NCwgMHg4NiwweDE2LCAweEZFLDB4NkMsIDB4ODYsMHg5NiwgMHhGRSwweDY4LCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhFMCwweDk1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDg0LCAweDRGLDB4NTgsIDB4ODQsMHg5NiwKKzB4RkUsMHhDQywgMHgwNywweDJDLCAweDAwLDB4NDAsIDB4QzAsMHgyNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4RUEsMHg4RCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEE3LDB4MzIsIDB4NjgsMHgwMiwgMHg3NiwweEE1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDg2LDB4MTYsCisweEZFLDB4Q0MsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RTYsMHgwMCwKKzB4RTQsMHg1MSwgMHhDMCwweDMyLCAweDVBLDB4MDAsIDB4QzYsMHgyQywgMHgwMCwweDAwLCAweEMwLDB4MzIsIDB4NUEsMHgwMCwgMHhFNiwweDAwLAorMHhFNiwweEU1LCAweDI1LDB4MTQsIDB4MDAsMHg3NiwgMHg4MywweDE2LCAweEZGLDB4MUMsIDB4ODQsMHg5NiwgMHhGRSwweEJDLCAweDA2LDB4MTgsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4ODMsMHgxNiwKKzB4RkUsMHhEQywgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4NzUsMHhCMSwgMHgwMCwweDFFLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NzQsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDcyLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHg3MCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NkUsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDZDLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHg2QSwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwKKzB4MDAsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4NjgsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4QzcsMHgxQywgMHgzMiwweDAwLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDI2LDB4MTQsIDB4MDAsMHg2MCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4OTYsMHgxNiwKKzB4RkUsMHg2QywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhEMCwweERDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDE2LAorMHhGRiwweEEwLCAweDg2LDB4MTYsIDB4RkUsMHg2QywgMHg4NCwweDk2LCAweEZFLDB4Q0MsIDB4MjMsMHgxNCwgMHgwMCwweDVFLCAweDkzLDB4MTYsCisweEZFLDB4NUMsIDB4NzUsMHg5OSwgMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHg3NCwweDE1LCAweDAwLDB4MUUsIDB4NzQsMHgyMCwKKzB4RkYsMHhFNSwgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwgMHhGRiwweEU1LCAweDkzLDB4MTYsIDB4RkUsMHhBQywgMHg4MywweDE2LAorMHhGRSwweDVDLCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4MDUsMHgyNCwgMHgwMCwweDAyLCAweDA2LDB4QTgsCisweDAwLDB4MDIsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZFLDB4QjQsIDB4NzQsMHg5NSwKKzB4MDAsMHgxRSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHg4NywweDFBLAorMHgwMCwweDAwLCAweDc0LDB4QTQsIDB4RkYsMHhFNSwgMHg5NCwweDk2LCAweEZFLDB4QTQsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4QTQsIDB4MjQsMHg5NCwKKzB4MDAsMHg1QSwgMHg5NCwweDk2LCAweEZFLDB4NUMsIDB4NzYsMHgyNSwgMHgwMCwweDFFLCAweDgzLDB4MTYsIDB4RkUsMHhCNCwgMHg3NiwweDMwLAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4MzcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MjYsCisweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwgMHhGRiwweEE4LCAweDI0LDB4OTQsIDB4MDAsMHg1NiwgMHg5NCwweDk2LAorMHhGRSwweDVDLCAweDc2LDB4MjUsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg0NywweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwKKzB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHg4NywweDE2LAorMHhGRiwweEFDLCAweDIzLDB4MTQsIDB4MDAsMHg1MiwgMHg5MywweDE2LCAweEZFLDB4NUMsIDB4NzYsMHgxOSwgMHgwMCwweDFFLCAweDg0LDB4OTYsCisweEZFLDB4QUMsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LAorMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4QjAsIDB4ODMsMHgxNiwgMHhGRSwweEE0LCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhFMCwweDAwLCAweEVBLDB4OEMsIDB4RjcsMHgzNywKKzB4MjgsMHgwMCwgMHg4NCwweDk2LCAweEZFLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA0LDB4QTQsIDB4MDAsMHgzNiwgMHg5NCwweDk2LAorMHhGRSwweDVDLCAweDg3LDB4MjYsIDB4MDAsMHgwMCwgMHg3NiwweEE1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHg0NywweDBDLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwKKzB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEVBLDB4OEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDgzLDB4MTYsIDB4RkUsMHhDQywgMHg4NCwweDk2LAorMHhGRiwweDFDLCAweDA2LDB4MTgsIDB4MDAsMHgzQSwgMHg4NSwweEIyLCAweDAwLDB4MDAsIDB4MDcsMHgyNCwgMHgwMCwweDNBLCAweDg2LDB4QkEsCisweDAwLDB4MDAsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHhDNSwweEFDLCAweDY3LDB4QzAsIDB4QzYsMHhCNCwgMHg3NywweEMwLCAweDc1LDB4QUQsIDB4RkYsMHhGMCwgMHg3NiwweEI1LAorMHhGRiwweEYwLCAweEMwLDB4MkUsIDB4NkEsMHgwMCwgMHhFQywweDAwLCAweEU3LDB4NjQsIDB4RjUsMHgwMiwgMHgwMCwweDAyLCAweEY1LDB4MDIsCisweDAwLDB4MDEsIDB4ODMsMHgxNiwgMHhGRiwweDFDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDE4LCAweDAwLDB4MzYsIDB4ODYsMHhCQSwKKzB4MDAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LAorMHhGRiwweEYwLCAweDIwLDB4MzYsIDB4MDAsMHgwMiwgMHhFNiwweDAwLCAweEU3LDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MkEsCisweDAwLDB4MDEsIDB4RTYsMHgwMCwgMHhFQSwweDhELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NCwweDk2LCAweEZFLDB4NUMsIDB4ODMsMHgxNiwKKzB4RkYsMHgxQywgMHhGNSwweDI3LCAweDI4LDB4MDAsIDB4MDYsMHgxOCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgyNSwweDE0LCAweDAwLDB4QTYsIDB4ODQsMHg5NiwgMHhGRSwweDlDLCAweDgzLDB4MTYsCisweEZFLDB4REMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDI3LCAweDI4LDB4MDAsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweEE0LCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHhBMiwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4QTAsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDlFLCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweDI1LDB4MTQsIDB4MDAsMHg5QywgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MkIsIDB4MjgsMHgwMCwgMHgyNSwweDE0LCAweDAwLDB4OUEsIDB4MDYsMHgzMCwKKzB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDJCLCAweDI4LDB4MDAsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsCisweDAwLDB4MDAsIDB4MjUsMHgxNCwgMHgwMCwweDk4LCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwgMHgyOCwweDAwLCAweEM3LDB4MUMsIDB4MzIsMHgwMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHgyNiwweDE0LCAweDAwLDB4OTAsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDk2LDB4MTYsCisweEZFLDB4NkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDAsMHhEQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHgxNiwKKzB4RkYsMHg3MCwgMHg4NiwweDE2LCAweEZFLDB4NkMsIDB4ODQsMHg5NiwgMHhGRSwweENDLCAweDIzLDB4OTQsIDB4MDAsMHg4RSwgMHg3NSwweDlELAorMHgwMCwweDFFLCAweDc1LDB4QUMsIDB4RkYsMHhFNSwgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwgMHhGRiwweEU1LCAweDkzLDB4MTYsCisweEZFLDB4OTQsIDB4NzQsMHgxNSwgMHgwMCwweDFFLCAweDc0LDB4MjAsIDB4RkYsMHhFNSwgMHg3MywweDE1LCAweDAwLDB4MUUsIDB4NzMsMHgxOCwKKzB4RkYsMHhFNSwgMHg5MywweDE2LCAweEZFLDB4ODQsIDB4ODMsMHgxNiwgMHhGRSwweDk0LCAweDc2LDB4MzEsIDB4MDAsMHgxRSwgMHg3NiwweDMwLAorMHhGRiwweEU1LCAweDA1LDB4MjQsIDB4MDAsMHgwMiwgMHgwNiwweEE4LCAweDAwLDB4MDIsIDB4NzQsMHg5NSwgMHgwMCwweDFFLCAweDc0LDB4QTQsCisweEZGLDB4RTUsIDB4OTQsMHg5NiwgMHhGRSwweDhDLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyQiwKKzB4MjgsMHgwMCwgMHg4NCwweDk2LCAweEZFLDB4QzQsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDc1LDB4MjUsIDB4MDAsMHgxRSwgMHhDNywweDM4LAorMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg3LDB4MTYsCisweEZGLDB4NzQsIDB4MjMsMHg5NCwgMHgwMCwweDhBLCAweDc2LDB4MUQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLCAweEZGLDB4RTUsIDB4ODQsMHg5NiwKKzB4RkUsMHg4QywgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LAorMHgyOCwweDAwLCAweDg3LDB4MUUsIDB4MDAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODMsMHgxNiwgMHhGRSwweDg0LCAweEM3LDB4MzgsCisweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MDIsIDB4ODcsMHgxNiwKKzB4RkYsMHg3OCwgMHgyMywweDk0LCAweDAwLDB4ODYsIDB4NzYsMHgxRCwgMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg0NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxRSwgMHgwMCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4MDYsMHhCNCwKKzB4MDAsMHgwMiwgMHg4NywweDE2LCAweEZGLDB4N0MsIDB4MjMsMHg5NCwgMHgwMCwweDgyLCAweDc2LDB4MUQsIDB4MDAsMHgxRSwgMHg3NiwweDMwLAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUUsCisweDAwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDAyLCAweDg0LDB4OTYsIDB4RkUsMHhDNCwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwKKzB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweDgwLCAweDA2LDB4QjQsIDB4MDAsMHgwMiwgMHhDNywweDM4LAorMHgzNywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgyNiwgMHgwMCwweDAwLCAweEYzLDB4MDIsCisweDAwLDB4RkYsIDB4QzcsMHgzOCwgMHg1NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhFOCwgMHhDNiwweEI4LCAweDM0LDB4MDAsIDB4RjcsMHgwMiwKKzB4MDAsMHg4MCwgMHhDNywweDM0LCAweDc0LDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDEwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RUEsMHg2MSwgMHgyNywweDAwLCAweDAxLDB4MDAsIDB4QzYsMHhCNCwgMHg3NSwweDgwLCAweDg0LDB4OTYsCisweEZFLDB4Q0MsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MjQsIDB4MDAsMHgzOCwgMHhGNiwweEJCLCAweDI4LDB4MDAsIDB4OTQsMHg5MywKKzB4RkYsMHhGQywgMHg4MywweDE2LCAweEZGLDB4MjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RDQsMHgyQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODQsMHg5NiwgMHhGRSwweEQ0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDQsMHhBNCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4RTMsMHgzQywgMHg5NCwweDk2LCAweEZFLDB4RDQsIDB4RjQsMHgwMiwKKzB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwNCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4MTYsCisweDAwLDB4MDgsIDB4ODYsMHg5NiwgMHgwMCwweDBDLCAweEY1LDB4MDIsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweDAwLDB4MDQsIDB4ODQsMHgxNiwKKzB4MDAsMHgxMCwgMHhGNCwweDg0LCAweEUwLDB4MDAsIDB4MDcsMHgzMCwgMHgwMCwweDAyLCAweDk0LDB4QjIsIDB4MDAsMHgxMCwgMHhGNCwweDg0LAorMHhFMCwweDA0LCAweDA2LDB4QjQsIDB4MDAsMHgwMywgMHg5NCwweEIyLCAweDAwLDB4MTQsIDB4RjQsMHg4NCwgMHhFMCwweDFDLCAweEM2LDB4QjQsCisweDU0LDB4MDAsIDB4OTQsMHhCMiwgMHgwMCwweDE4LCAweEY0LDB4ODIsIDB4MDAsMHgwNSwgMHhGNCwweEIzLCAweDI4LDB4MDAsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMSwgMHhGNCwweEJCLCAweDI4LDB4MDAsIDB4MjcsMHgzNCwgMHgwMCwweDA4LCAweDk3LDB4MzIsIDB4MDAsMHgwNCwgMHg4NiwweDE2LAorMHgwMCwweDAwLCAweDA3LDB4MkMsIDB4MDAsMHgwMywgMHhDNywweDM4LCAweDU0LDB4MDAsIDB4QzYsMHhCOCwgMHg2OCwweDAwLCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4QzYsMHgzMCwgMHg3MiwweDAwLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDMsIDB4QzUsMHhBQywKKzB4NzQsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg1QSwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEMxLDB4MjAsIDB4MDAsMHgwMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDE0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE4LCAweDg3LDB4MTYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDgzLDB4QkEsIDB4MDAsMHgwMCwgMHg4NCwweDk2LCAweDAwLDB4MDAsIDB4OTMsMHg5NiwgMHhGRiwweEYwLCAweEYzLDB4ODQsCisweDZFLDB4NTQsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDkzLDB4OTYsIDB4RkYsMHhFQywgMHg5NywweDE2LCAweEZGLDB4RjQsIDB4OTAsMHgxMywKKzB4RkYsMHhGQywgMHgyNywweDFDLCAweDAwLDB4MDIsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4MjQsIDB4MDAsMHgyMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDk0LDB4OTYsIDB4RkYsMHhFNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDRCwweEI4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODQsMHg5NiwgMHhGRiwweEU0LCAweDgzLDB4OTYsIDB4MDAsMHgwOCwgMHg4NywweDI2LCAweDAwLDB4MTgsIDB4ODUsMHgxNiwKKzB4RkYsMHhFQywgMHhDMCwweDNBLCAweDNBLDB4MDAsIDB4RUUsMHgwMCwgMHhFQywweDdDLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHg4NywweDI2LAorMHgwMCwweDE4LCAweDgzLDB4OTYsIDB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweEVDLDB4N0MsIDB4QzUsMHg4NCwgMHgwMCwweDAwLCAweDg2LDB4QTYsIDB4MDAsMHgxMCwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMCwgMHhFQywweDFDLCAweDA0LDB4MjQsIDB4MDAsMHgxMCwgMHg4NiwweEE2LAorMHgwMCwweDE0LCAweDg3LDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweEVDLDB4MjAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4RUMsMHgyRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweDg2LDB4QTIsIDB4MDAsMHgwMCwgMHg4NywweDE2LAorMHhGRiwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhFQywweDY4LCAweEY2LDB4MDIsCisweDAwLDB4MDAsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDAsIDB4RUMsMHg3MCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4ODYsMHhBMiwKKzB4MDAsMHgwNCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFMiwweDAwLAorMHhFQywweDcxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEVDLDB4ODEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4RUMsMHhBQywgMHhGNywweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDlDLCAweEY2LDB4MDYsIDB4NDIsMHg5QywgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHg5NywweDJBLCAweDAwLDB4MDgsIDB4ODMsMHhBNiwKKzB4MDAsMHgwQywgMHg3NywweDJDLCAweEZGLDB4RTEsIDB4OTMsMHhBQSwgMHgwMCwweDBDLCAweDk3LDB4MkEsIDB4MDAsMHgxQywgMHg4MywweEE2LAorMHgwMCwweDFDLCAweEY3LDB4MDQsIDB4NkUsMHg1MCwgMHg5MywweEFBLCAweDAwLDB4MjAsIDB4ODMsMHhCQSwgMHgxRCwweERDLCAweEY2LDB4ODIsCisweDAwLDB4MDAsIDB4OTMsMHhBQSwgMHgwMCwweDJDLCAweDgzLDB4OTYsIDB4MDAsMHgwQywgMHhDNSwweEI0LCAweDAwLDB4MDAsIDB4OTMsMHhBQSwKKzB4MDAsMHgzMCwgMHg4MywweEJBLCAweDAwLDB4MTAsIDB4QzYsMHgzNCwgMHgwMCwweDAwLCAweDkzLDB4QUEsIDB4MDAsMHgyNCwgMHg4NywweDNBLAorMHgwMCwweDE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDJBLCAweDAwLDB4MjgsIDB4MjAsMHgzNiwgMHgwMCwweDFGLCAweEVFLDB4MDAsCisweEVELDB4MUMsIDB4QzcsMHgzMCwgMHg1MCwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgzNCwgMHg5NSwweEJBLCAweDAwLDB4MDAsIDB4MDYsMHgzMCwKKzB4MDAsMHgwNCwgMHhFMCwweDAwLCAweEVDLDB4RkMsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDgzLDB4OTYsIDB4MDAsMHgxMCwgMHg3NiwweEE1LAorMHgwMCwweDFFLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDgyLCAweDAwLDB4QjQsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4ODcsMHgyNiwgMHgwMCwweDIwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwKKzB4RkYsMHhGMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEVBLDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgxNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgxOCwgMHg4NywweDE2LAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDNBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4MTYsCisweEZGLDB4RjAsIDB4ODcsMHgzQSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NywweDE2LCAweEZGLDB4RjQsIDB4RjYsMHgwMiwKKzB4MUQsMHhFMCwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4ODYsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NiwweDEzLAorMHhGRiwweEZDLCAweEY2LDB4MDQsIDB4NkUsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDI2LDB4MTQsCisweDAwLDB4MTAsIDB4OTYsMHgxNiwgMHhGRiwweEVDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI2LDB4RjgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNiwweDg0LCAweDZFLDB4NTAsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MUQsMHhEOCwgMHg5NiwweDE2LAorMHhGRiwweEU0LCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjYsMHg4NiwgMHg0MiwweEMwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NiwweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NiwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4REIsMHhCNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEVFLDB4NEQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg2LDB4MTYsCisweEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4RDUsMHhBMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RUUsMHg0RCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg5NiwweDE2LCAweEZGLDB4RTQsIDB4ODQsMHgxNiwgMHhGRiwweEU0LCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4OTYsIDB4MDAsMHgwNCwgMHg4NiwweDE2LAorMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwOCwgMHg4NSwweDk2LCAweDAwLDB4MDgsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEVFLDB4OTksIDB4MjAsMHgzQSwgMHgwMCwweDAzLCAweEU2LDB4MDAsIDB4RUUsMHhFOSwgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4RTAsMHgwMCwKKzB4RUYsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhCMCwgMHgwMCwweDFGLCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAwLAorMHhFRiwweDBELCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHg4NSwweDE2LCAweDAwLDB4MTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHgwMCwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwKKzB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHg5NiwweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweEVCLDB4NjAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDAsCisweEVGLDB4MEMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4QjAsIDB4MDAsMHgxRSwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMCwKKzB4RUYsMHgwRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUQsMHg3NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDE4LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDE4LCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LAorMHgwMCwweDAwLCAweEY2LDB4MDQsIDB4NEEsMHhBMCwgMHgyMywweDk0LCAweDAwLDB4MTAsIDB4ODQsMHgzNiwgMHgwMCwweDAwLCAweDk2LDB4MTYsCisweEZGLDB4RTQsIDB4RjcsMHgwNCwgMHg0QSwweDlDLCAweDk0LDB4MTYsIDB4RkYsMHhGMCwgMHg4NSwweDM2LCAweDAwLDB4MDQsIDB4QzAsMHgzMiwKKzB4NzIsMHgwMCwgMHhFQywweDAwLCAweEYwLDB4MTQsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDc3LDB4MzEsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg2MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4QzYsMHhCOCwgMHgzMCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MEMsIDB4QzUsMHg4NCwgMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwKKzB4NDIsMHgwMCwgMHhFNiwweDAwLCAweEVGLDB4QTQsIDB4QzYsMHgyNCwgMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NTIsMHgwMCwgMHhFNiwweDAwLCAweEVGLDB4QTgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsCisweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RUYsMHhCNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjUsMHg4MiwKKzB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDMyLAorMHg3MiwweDAwLCAweEUyLDB4MDAsIDB4RUYsMHhGMCwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEU2LDB4MDAsCisweEVGLDB4RjgsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweDg2LDB4QjYsIDB4MDAsMHgwNCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMCwgMHhFRiwweEY5LCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhGNSwweDAyLAorMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEYwLDB4MDksIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEY1LDB4ODIsCisweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RjAsMHgxOCwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMCwgMHhGMCwweDRELCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LAorMHhGRiwweEU0LCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsCisweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwKKzB4RkYsMHhFOCwgMHhFMCwweDAwLCAweEYwLDB4QjAsIDB4OTYsMHg5NiwgMHhGRiwweEVDLCAweDI3LDB4MTQsIDB4MDAsMHgxQywgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDkzLDB4OTMsIDB4RkYsMHhGQywgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyNSwweDY4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgyMCwweDIyLCAweDAwLDB4MDAsIDB4RTYsMHgwMCwKKzB4RjAsMHhBRCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEU0LCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg3NiwweEI5LAorMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsCisweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhFOCwgMHg5NiwweDk2LCAweEZGLDB4RUMsIDB4RjcsMHgwNSwKKzB4NEEsMHhBMCwgMHhFMCwweDAwLCAweEYwLDB4QjQsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHgyMCwweDMyLAorMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RjEsMHgyMSwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEU4LCAweEY2LDB4MDYsCisweDQyLDB4QzgsIDB4NzYsMHhCOSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QTcsMHgzNiwKKzB4NjAsMHgwMiwgMHg4MywweDE2LCAweDAwLDB4MDQsIDB4QzYsMHhCNCwgMHg2MCwweDAwLCAweDc2LDB4MzUsIDB4MDAsMHgxRSwgMHg3NiwweDMwLAorMHhGRiwweEU1LCAweDA1LDB4MzQsIDB4MDAsMHgwMiwgMHg3NSwweEE5LCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4OTcsMHgxQSwgMHgwMCwweDAwLCAweDg3LDB4MkEsIDB4MDAsMHgwMCwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4ODMsMHgxNiwKKzB4MDAsMHgwOCwgMHhDNywweDM4LCAweDVGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweDk3LDB4MUEsIDB4MDAsMHgwMCwgMHg4MywweDE2LAorMHgwMCwweDBDLCAweDA2LDB4QjQsIDB4MDAsMHgwNCwgMHhFMCwweDAwLCAweEYxLDB4MjQsIDB4OTYsMHg5QSwgMHgwMCwweDAwLCAweEY0LDB4MDIsCisweDAwLDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MTAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDAsMHgwMCwgMHhCOSwweDAwLCAweDAwLDB4MDAsIDB4QkEsMHgwMCwgMHgwMCwweDAwLAorMHhCQiwweDAwLCAweDAwLDB4MDAsIDB4QkMsMHgwMCwgMHgwMCwweDAwLCAweEJELDB4MDAsIDB4MDAsMHgwMCwgMHhCRSwweDAwLCAweDAwLDB4MDAsCisweEJGLDB4MDAsIDB4MDAsMHgwMCwgMHg4MCwweDAwLCAweDAwLDB4MDAsIDB4ODEsMHgwMCwgMHgwMCwweDAwLCAweDgyLDB4MDAsIDB4MDAsMHgwMCwKKzB4ODMsMHgwMCwgMHgwMCwweDAwLCAweDg0LDB4MDAsIDB4MDAsMHgwMCwgMHg4NSwweDAwLCAweDAwLDB4MDAsIDB4ODYsMHgwMCwgMHgwMCwweDAwLAorMHg4NywweDAwLCAweEI5LDB4QjksIDB4QjksMHhCQSwgMHhCOSwweEJCLCAweEI5LDB4QkMsIDB4QjksMHhCRCwgMHhCOSwweEJFLCAweEI5LDB4QkYsCisweEI5LDB4ODAsIDB4QjksMHg4MSwgMHhCOSwweDgyLCAweEI5LDB4ODMsIDB4QjksMHg4NCwgMHhCOSwweDg1LCAweEI5LDB4ODYsIDB4QjksMHg4NywKKzB4QkEsMHhCOSwgMHhCQSwweEJBLCAweEJBLDB4QkIsIDB4QkEsMHhCQywgMHhCQSwweEJELCAweEJBLDB4QkUsIDB4QkEsMHhCRiwgMHhCQSwweDgwLAorMHhCQSwweDgxLCAweEJBLDB4ODIsIDB4QkEsMHg4MywgMHhCQSwweDg0LCAweEJBLDB4ODUsIDB4QkEsMHg4NiwgMHhCQSwweDg3LCAweEJCLDB4QjksCisweEJCLDB4QkEsIDB4QkIsMHhCQiwgMHhCQiwweEJDLCAweEJCLDB4QkQsIDB4QkIsMHhCRSwgMHhCQiwweEJGLCAweEJCLDB4ODAsIDB4QkIsMHg4MSwKKzB4QkIsMHg4MiwgMHhCQiwweDgzLCAweEJCLDB4ODQsIDB4QkIsMHg4NSwgMHhCQiwweDg2LCAweEJCLDB4ODcsIDB4QkMsMHhCOSwgMHhCQywweEJBLAorMHhCQywweEJCLCAweEJDLDB4QkMsIDB4QkMsMHhCRCwgMHhCQywweEJFLCAweEJDLDB4QkYsIDB4QkMsMHg4MCwgMHhCQywweDgxLCAweEJDLDB4ODIsCisweEJDLDB4ODMsIDB4QkMsMHg4NCwgMHhCQywweDg1LCAweEJDLDB4ODYsIDB4QkMsMHg4NywgMHhCRCwweEI5LCAweEJELDB4QkEsIDB4QkQsMHhCQiwKKzB4QkQsMHhCQywgMHhCRCwweEJELCAweEJELDB4QkUsIDB4QkQsMHhCRiwgMHhCRCwweDgwLCAweEJELDB4ODEsIDB4QkQsMHg4MiwgMHhCRCwweDgzLAorMHhCRCwweDg0LCAweEJELDB4ODUsIDB4QkQsMHg4NiwgMHhCRCwweDg3LCAweEJFLDB4QjksIDB4QkUsMHhCQSwgMHhCRSwweEJCLCAweEJFLDB4QkMsCisweEJFLDB4QkQsIDB4QkUsMHhCRSwgMHhCRSwweEJGLCAweEJFLDB4ODAsIDB4QkUsMHg4MSwgMHhCRSwweDgyLCAweEJFLDB4ODMsIDB4QkUsMHg4NCwKKzB4QkUsMHg4NSwgMHhCRSwweDg2LCAweEJFLDB4ODcsIDB4QkYsMHhCOSwgMHhCRiwweEJBLCAweEJGLDB4QkIsIDB4QkYsMHhCQywgMHhCRiwweEJELAorMHhCRiwweEJFLCAweEJGLDB4QkYsIDB4QkYsMHg4MCwgMHhCRiwweDgxLCAweEJGLDB4ODIsIDB4QkYsMHg4MywgMHhCRiwweDg0LCAweEJGLDB4ODUsCisweEJGLDB4ODYsIDB4QkYsMHg4NywgMHg4MCwweEI5LCAweDgwLDB4QkEsIDB4ODAsMHhCQiwgMHg4MCwweEJDLCAweDgwLDB4QkQsIDB4ODAsMHhCRSwKKzB4ODAsMHhCRiwgMHg4MCwweDgwLCAweDgwLDB4ODEsIDB4ODAsMHg4MiwgMHg4MCwweDgzLCAweDgwLDB4ODQsIDB4ODAsMHg4NSwgMHg4MCwweDg2LAorMHg4MCwweDg3LCAweDgxLDB4QjksIDB4ODEsMHhCQSwgMHg4MSwweEJCLCAweDgxLDB4QkMsIDB4ODEsMHhCRCwgMHg4MSwweEJFLCAweDgxLDB4QkYsCisweDgxLDB4ODAsIDB4ODEsMHg4MSwgMHg4MSwweDgyLCAweDgxLDB4ODMsIDB4ODEsMHg4NCwgMHg4MSwweDg1LCAweDgxLDB4ODYsIDB4ODEsMHg4NywKKzB4ODIsMHhCOSwgMHg4MiwweEJBLCAweDgyLDB4QkIsIDB4ODIsMHhCQywgMHg4MiwweEJELCAweDgyLDB4QkUsIDB4ODIsMHhCRiwgMHg4MiwweDgwLAorMHg4MiwweDgxLCAweDgyLDB4ODIsIDB4ODIsMHg4MywgMHg4MiwweDg0LCAweDgyLDB4ODUsIDB4ODIsMHg4NiwgMHg4MiwweDg3LCAweDgzLDB4QjksCisweDgzLDB4QkEsIDB4ODMsMHhCQiwgMHg4MywweEJDLCAweDgzLDB4QkQsIDB4ODMsMHhCRSwgMHg4MywweEJGLCAweDgzLDB4ODAsIDB4ODMsMHg4MSwKKzB4ODMsMHg4MiwgMHg4MywweDgzLCAweDgzLDB4ODQsIDB4ODMsMHg4NSwgMHg4MywweDg2LCAweDgzLDB4ODcsIDB4ODQsMHhCOSwgMHg4NCwweEJBLAorMHg4NCwweEJCLCAweDg0LDB4QkMsIDB4ODQsMHhCRCwgMHg4NCwweEJFLCAweDg0LDB4QkYsIDB4ODQsMHg4MCwgMHg4NCwweDgxLCAweDg0LDB4ODIsCisweDg0LDB4ODMsIDB4ODQsMHg4NCwgMHg4NCwweDg1LCAweDg0LDB4ODYsIDB4ODQsMHg4NywgMHg4NSwweEI5LCAweDg1LDB4QkEsIDB4ODUsMHhCQiwKKzB4ODUsMHhCQywgMHg4NSwweEJELCAweDg1LDB4QkUsIDB4ODUsMHhCRiwgMHg4NSwweDgwLCAweDg1LDB4ODEsIDB4ODUsMHg4MiwgMHg4NSwweDgzLAorMHg4NSwweDg0LCAweDg1LDB4ODUsIDB4ODUsMHg4NiwgMHg4NSwweDg3LCAweDg2LDB4QjksIDB4ODYsMHhCQSwgMHg4NiwweEJCLCAweDg2LDB4QkMsCisweDg2LDB4QkQsIDB4ODYsMHhCRSwgMHg4NiwweEJGLCAweDg2LDB4ODAsIDB4ODYsMHg4MSwgMHg4NiwweDgyLCAweDg2LDB4ODMsIDB4ODYsMHg4NCwKKzB4ODYsMHg4NSwgMHg4NiwweDg2LCAweDg2LDB4ODcsIDB4ODcsMHhCOSwgMHg4NywweEJBLCAweDg3LDB4QkIsIDB4ODcsMHhCQywgMHg4NywweEJELAorMHg4NywweEJFLCAweDg3LDB4QkYsIDB4ODcsMHg4MCwgMHg4NywweDgxLCAweDg3LDB4ODIsIDB4ODcsMHg4MywgMHg4NywweDg0LCAweDg3LDB4ODUsCisweDg3LDB4ODYsIDB4ODcsMHg4NywgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwKKzB4MDAsMHgxOCwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhGMywweDdELCAweEY2LDB4MDYsIDB4NDIsMHg5NiwgMHhGNywweDA0LCAweDQyLDB4OTQsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhFMCwweDAwLCAweEY1LDB4RTAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEYzLDB4ODQsIDB4NkYsMHgzMCwgMHg5MCwweDEzLAorMHhGRiwweEZDLCAweDI3LDB4MUMsIDB4MDAsMHgwMiwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHhFQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4Q0QsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweEVDLCAweEY3LDB4MDIsIDB4MDAsMHgwMCwgMHg5NywweDFFLAorMHgwMCwweDA4LCAweDgzLDB4MTYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxRSwgMHgwMCwweDBDLCAweDgzLDB4MTYsCisweDAwLDB4MDgsIDB4MDQsMHg5QywgMHgwMCwweDIyLCAweDkzLDB4MUUsIDB4MDAsMHgxQywgMHg4MywweDE2LCAweDAwLDB4MEMsIDB4OTMsMHg5NiwKKzB4RkYsMHhGNCwgMHg4NywweDFBLCAweDAwLDB4MDAsIDB4NzYsMHg5OSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHgwNiwweDE4LAorMHgwMCwweDAyLCAweDc1LDB4QjEsIDB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4MDYsMHg5QywgMHgwMCwweDIwLCAweEY3LDB4MzcsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4OTYsMHg5NiwKKzB4RkYsMHhFNCwgMHg3NSwweDM1LCAweDAwLDB4MUUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDA0LDB4OUMsIDB4MDAsMHgyNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgwNCwweDlDLCAweDAwLDB4MjYsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDI4LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDA0LDB4OUMsIDB4MDAsMHgyQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHgwNCwweDlDLCAweDAwLDB4MkMsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsCisweDI4LDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDJFLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDI3LAorMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4MDQsMHg5QywgMHgwMCwweDMwLCAweDc2LDB4MzEsCisweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyNywKKzB4MjgsMHgwMCwgMHg4NywweDFFLCAweDAwLDB4MjAsIDB4NzUsMHgyOCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NTcsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDIwLDB4M0EsIDB4MDAsMHgwOCwgMHhFRSwweDAwLCAweEY1LDB4OTgsIDB4RjMsMHgwNiwgMHgxNCwweEQ4LCAweDgzLDB4MTYsCisweEZGLDB4RTQsIDB4ODcsMHgxRSwgMHgwMCwweDIwLCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwKKzB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjUsMHhCOCwgMHgwMCwweDAxLCAweEM0LDB4QUMsIDB4NTgsMHgwMCwgMHgwNCwweDI0LAorMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFQywweDAwLCAweEY1LDB4OTUsIDB4RjUsMHgwMiwgMHgwMCwweDAwLCAweDgzLDB4MTYsCisweEZGLDB4RTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MTgsIDB4MDAsMHgwMiwgMHhBNywweDMyLCAweDU4LDB4MDIsIDB4QzYsMHhCMCwKKzB4NTgsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LAorMHhGRiwweEU4LCAweEM2LDB4QjAsIDB4NDAsMHgwMCwgMHg3NywweEI4LCAweDAwLDB4MTgsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDAsCisweEY1LDB4N0QsIDB4RjcsMHgzNywgMHg2OCwweDAwLCAweEY1LDB4MDIsIDB4RkYsMHhGRiwgMHhDNywweDMwLCAweDQ4LDB4MDAsIDB4RjUsMHgzQiwKKzB4NjgsMHgwMCwgMHgyNCwweEE0LCAweDAwLDB4MDIsIDB4MjQsMHgyMCwgMHgwMCwweDAyLCAweEUwLDB4MDAsIDB4RjUsMHgzNCwgMHgyNSwweEFDLAorMHgwMCwweDAxLCAweEYzLDB4MDYsIDB4MTQsMHhEOCwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwMiwgMHgwMCwweDM0LCAweDkzLDB4MTMsCisweEZGLDB4RkMsIDB4ODMsMHgxNiwgMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDc2LDB4OTksIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUEsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDEwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDEwLCAweEY3LDB4MDQsCisweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAwLCAweEY2LDB4MzksIDB4RjYsMHgwNiwKKzB4NDIsMHg5NiwgMHhGNywweDA0LCAweDQyLDB4OTQsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGNCwweDAyLAorMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEUwLDB4MDAsCisweEY3LDB4NDgsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweEY1LDB4MDQsIDB4NkYsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxNiwKKzB4RkYsMHhGNCwgMHg5MCwweDEzLCAweEZGLDB4RkMsIDB4MjcsMHgyOCwgMHgwMCwweDAyLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweENELDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4ODYsMHhBQSwKKzB4MDAsMHgwMCwgMHg3NywweDI5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LAorMHhGRiwweEYwLCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDc0LDB4MDAsIDB4RTYsMHgwMCwgMHhGNiwweDk5LCAweDk2LDB4OTYsCisweEZGLDB4RUMsIDB4QzYsMHgzOCwgMHgwMCwweDAwLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDk2LCAweEZGLDB4RUMsIDB4ODUsMHgxNiwKKzB4RkYsMHhGNCwgMHg0NywweDJDLCAweEZGLDB4RkUsIDB4MDcsMHgzOCwgMHgwMCwweDAyLCAweEM3LDB4MjgsIDB4NzIsMHgwMCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhDRCwweEI4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweEZGLDB4RjQsIDB4RjcsMHgwMiwKKzB4MDAsMHgwMiwgMHg5NywweDJBLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweEFBLAorMHgwMCwweDBDLCAweDg1LDB4OTYsIDB4MDAsMHgwQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHhBQSwgMHgwMCwweDFDLCAweEY1LDB4MDYsCisweDE0LDB4RDgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4ODIsIDB4MDAsMHgyMCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwKKzB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHg4NSwweDE2LAorMHhGRiwweEVDLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwKKzB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHhFQSwweEI4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MTAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4ODUsMHgxNiwgMHgwMCwweDA0LCAweDg3LDB4MTYsIDB4MDAsMHgwOCwgMHhGNiwweDAyLAorMHhGRiwweEZDLCAweDA2LDB4QTgsIDB4MDAsMHgwMywgMHhDNiwweEI0LCAweDY0LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAzLCAweEM3LDB4MzgsCisweDY0LDB4MDAsIDB4QzcsMHgzNCwgMHg3MCwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhDNSwweEFDLCAweDZBLDB4MDAsIDB4OTUsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDAyLCAweDAwLDB4MDMsIDB4QzUsMHgyOCwgMHg3NCwweDAwLCAweEY3LDB4MDIsIDB4MDAsMHgwNCwgMHhDNywweDM4LAorMHg1MiwweDAwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxNCwweEQ4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MTAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLAorMHgwMCwweDEwLCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEY4LDB4MEQsIDB4RjYsMHgwNiwgMHg0MiwweDk2LCAweEY3LDB4MDQsIDB4NDIsMHg5NCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4RjksMHgyMCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjUsMHgwNCwgMHg2RiwweDMwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTUsMHgxNiwgMHhGRiwweEY0LCAweDkwLDB4MTMsIDB4RkYsMHhGQywgMHgyNywweDI4LCAweDAwLDB4MDIsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHg4NSwweDk2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHgxNiwgMHgwMCwweDA0LCAweEY2LDB4MDIsCisweDAwLDB4MDAsIDB4ODYsMHhBQSwgMHgwMCwweDAwLCAweDc3LDB4MjksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RjAsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzQsMHgwMCwgMHhFNiwweDAwLAorMHhGOCwweDZELCAweDk2LDB4OTYsIDB4RkYsMHhFQywgMHhDNiwweDM4LCAweDAwLDB4MDAsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4OTYsCisweEZGLDB4RUMsIDB4ODUsMHgxNiwgMHhGRiwweEY0LCAweDQ3LDB4MkMsIDB4RkYsMHhGRSwgMHgwNywweDM4LCAweDAwLDB4MDIsIDB4QzcsMHgyOCwKKzB4NzIsMHgwMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4MTYsCisweEZGLDB4RjQsIDB4RjUsMHg4MiwgMHgwMCwweDA2LCAweEY1LDB4QUIsIDB4MjgsMHgwMCwgMHg4NSwweDk2LCAweDAwLDB4MDgsIDB4MDcsMHgyOCwKKzB4MDAsMHgwMiwgMHg5NSwweEFBLCAweDAwLDB4MDQsIDB4MDUsMHgxNCwgMHgwMCwweDBFLCAweDg1LDB4MkEsIDB4MDAsMHgwMCwgMHg3NywweEE5LAorMHgwMCwweDFFLCAweDc3LDB4QkMsIDB4RkYsMHhFNSwgMHhDNSwweDI4LCAweDdGLDB4QzAsIDB4NzUsMHgyOSwgMHhGRiwweEYwLCAweEY1LDB4M0IsCisweDI4LDB4MDAsIDB4RjUsMHg4NiwgMHgxNCwweEQ4LCAweDk1LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDAyLCAweDAwLDB4MDgsIDB4OTUsMHgxMywKKzB4RkYsMHhGQywgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4ODUsMHgxNiwgMHhGRiwweEVDLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweEM3LDB4MzgsCisweDUwLDB4MDAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGNywweDVDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MTAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MDgsIDB4RjcsMHgwNCwKKzB4NzUsMHhFQywgMHg4MywweDk2LCAweDAwLDB4MDQsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsIDB4RkEsMHg2NCwgMHhGNiwweDA2LAorMHg0MiwweDk2LCAweEY1LDB4MDQsIDB4NkYsMHgzMCwgMHg5MCwweDEzLCAweEZGLDB4RkMsIDB4MjcsMHgyOCwgMHgwMCwweDAyLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4OTMsMHg5NiwKKzB4RkYsMHhGNCwgMHg5NSwweDE2LCAweEZGLDB4RjAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4Q0QsMHhCOCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg1LDB4MTYsIDB4RkYsMHhGMCwgMHhGMywweDAyLCAweDAwLDB4MDcsIDB4ODMsMHg5NiwgMHhGRiwweEY0LCAweEYzLDB4MkIsCisweDI4LDB4MDAsIDB4MDcsMHgyOCwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDNCLCAweDI4LDB4MDAsIDB4ODcsMHgxRSwKKzB4MDAsMHgwMCwgMHg3NiwweDlELCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweDA1LDB4OUMsIDB4MDAsMHgwMiwgMHg3NiwweDJELAorMHgwMCwweDFFLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHg3NCwweDlELCAweDAwLDB4MUUsIDB4NzQsMHhBNCwgMHhGRiwweEU1LCAweDA0LDB4MUMsCisweDAwLDB4MDYsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4MDYsMHhBOCwKKzB4MDAsMHgwNCwgMHhGNywweDM3LCAweDI4LDB4MDAsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDA2LDB4QTgsIDB4MDAsMHgwNiwgMHg3NSwweEExLAorMHgwMCwweDFFLCAweEM3LDB4MzgsIDB4NjcsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MUUsCisweDAwLDB4MDQsIDB4NzUsMHhBQywgMHhGRiwweEU1LCAweDA2LDB4QTgsIDB4MDAsMHgwOCwgMHg3NiwweDE5LCAweDAwLDB4MUUsIDB4QzcsMHgzOCwKKzB4NEYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweDg3LDB4MjIsIDB4MDAsMHgwMCwgMHgwNiwweEE4LAorMHgwMCwweDBBLCAweEM3LDB4MzgsIDB4NUYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgzNywgMHgyOCwweDAwLCAweEYzLDB4MDYsCisweDE0LDB4RDgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweEYzLDB4MDIsIDB4MDAsMHgwQywgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4ODMsMHgxNiwKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgxQSwgMHgwMCwweDAwLCAweDc2LDB4MzAsIDB4RkYsMHhFNSwgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGNywweDVDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAwLCAweEZBLDB4ODQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDQyLDB4OTQsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhGNCwweDAyLAorMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MzMsCisweDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLAorMHgwMCwweDQ4LCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHg4NSwweDk2LCAweDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDAsCisweEZELDB4OTgsIDB4RjYsMHgwNiwgMHg0MiwweDk2LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4MjQsMHgxNCwgMHgwMCwweDFFLCAweDA2LDB4MkMsIDB4MDAsMHgwMiwgMHg3NSwweDMxLAorMHgwMCwweDFFLCAweDI0LDB4OTQsIDB4MDAsMHgyMCwgMHg3NSwweDI4LCAweEZGLDB4RTUsIDB4RjMsMHg4NCwgMHg2RSwweDUwLCAweEM3LDB4MzgsCisweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4OTMsMHg5NiwKKzB4RkYsMHhDNCwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHgyNCwweDE0LAorMHgwMCwweDFDLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwKKzB4MDAsMHgxQSwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDI0LDB4MTQsCisweDAwLDB4MTgsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHgyNCwweDE0LAorMHgwMCwweDE2LCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHg4NywweDMyLCAweDAwLDB4MDAsIDB4NzYsMHhCMSwgMHgwMCwweDFFLCAweDc2LDB4QjQsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4MjQsMHgxNCwKKzB4MDAsMHgxNCwgMHgwNiwweDMwLCAweDAwLDB4MDIsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgyMywgMHgyOCwweDAwLCAweDI0LDB4MTQsCisweDAwLDB4MTIsIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHg3NiwweEIxLCAweDAwLDB4MUUsIDB4NzYsMHhCNCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjMsIDB4MjgsMHgwMCwgMHgwNiwweDMwLAorMHgwMCwweDAyLCAweDg3LDB4MzIsIDB4MDAsMHgwMCwgMHgyNCwweDE0LCAweDAwLDB4MTAsIDB4NzYsMHgzMSwgMHgwMCwweDFFLCAweDc2LDB4MzAsCisweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2NywweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDIzLCAweDI4LDB4MDAsIDB4OTAsMHgxMywKKzB4RkYsMHhGQywgMHgyNywweDFDLCAweDAwLDB4MDIsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDk0LDB4OTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LAorMHhGRiwweEJDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweENELDB4QjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg1LDB4OTYsCisweEZGLDB4QkMsIDB4MjMsMHgxNCwgMHgwMCwweDM2LCAweDI0LDB4OTQsIDB4MDAsMHgzOCwgMHg3MywweEE1LCAweDAwLDB4MUUsIDB4NzMsMHg5QywKKzB4RkYsMHhFNSwgMHhGNCwweDA0LCAweDQyLDB4QzAsIDB4RjYsMHg4NiwgMHg0MiwweEMwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweDJELCAweDAwLDB4MUUsIDB4NzYsMHgzMCwgMHhGRiwweEU1LCAweEM0LDB4MjAsCisweDZGLDB4QzAsIDB4NzQsMHgyMCwgMHhGRiwweEYwLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg3NSwweDJELCAweDAwLDB4MUUsIDB4NzUsMHgyOCwKKzB4RkYsMHhFNSwgMHhDNywweDM4LCAweDY3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MjcsIDB4MjgsMHgwMCwgMHg4NywweDJFLAorMHgwMCwweDAwLCAweEY2LDB4MDQsIDB4NkUsMHg1MCwgMHhDNywweDM4LCAweDU3LDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsCisweDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDM0LCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLAorMHgyOCwweDAwLCAweDIzLDB4MTQsIDB4MDAsMHgzMiwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwKKzB4MjgsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4MzAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsCisweDI4LDB4MDAsIDB4MjMsMHgxNCwgMHgwMCwweDJFLCAweDA1LDB4QUMsIDB4MDAsMHgwMiwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4NzYsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLAorMHgyOCwweDAwLCAweDIzLDB4MTQsIDB4MDAsMHgyQywgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHgyRSwgMHgwMCwweDAwLCAweDc2LDB4QUQsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM4LCAweEZGLDB4RjAsIDB4RjcsMHgxQiwKKzB4MjgsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4MkEsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHg3NiwweEFELAorMHgwMCwweDFFLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOCwgMHhGRiwweEYwLCAweEY3LDB4MUIsCisweDI4LDB4MDAsIDB4MDUsMHhBQywgMHgwMCwweDAyLCAweDg3LDB4MkUsIDB4MDAsMHgwMCwgMHgyMywweDE0LCAweDAwLDB4MjgsIDB4NzUsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg1RiwweEMwLCAweDc3LDB4MzgsIDB4RkYsMHhGMCwgMHhGNywweDFCLAorMHgyOCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhDOCwgMHhGNiwweDgyLCAweDAwLDB4MDMsIDB4QzcsMHgzOCwgMHgzRiwweEMwLCAweDk2LDB4QjIsCisweDAwLDB4MDgsIDB4MDYsMHhCMCwgMHgxRCwweEQ4LCAweEY0LDB4MzcsIDB4MjgsMHgwMCwgMHhGMywweDg2LCAweDE0LDB4RDgsIDB4OTMsMHg5MywKKzB4RkYsMHhGQywgMHhGMywweDgyLCAweDFELDB4RTAsIDB4OTMsMHg5MywgMHhGRiwweEZDLCAweDk2LDB4MTMsIDB4RkYsMHhGQywgMHg3NywweDM5LAorMHhGRiwweEYwLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDk2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkzLDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4RUEsMHhCOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMCwKKzB4RkQsMHhCOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweDk0LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweDg2LDB4MTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwKKzB4MDAsMHgwNiwgMHhFNiwweDAwLCAweEZFLDB4MjEsIDB4RjUsMHg4MiwgMHgwMCwweDFFLCAweEY3LDB4MDQsIDB4NDIsMHhBOCwgMHhGNiwweDA2LAorMHg0MiwweEE4LCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksCisweEZGLDB4RjAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4RkUsMHgzNCwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjYsMHgwNSwKKzB4NkYsMHgzNCwgMHg5NSwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDA0LCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODYsMHgxNiwKKzB4MDAsMHgwMCwgMHg4NSwweDk2LCAweDAwLDB4MDQsIDB4ODcsMHgzMiwgMHgwMCwweDAwLCAweDc2LDB4QjEsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjAsMHgzQSwgMHgwMCwweDA3LCAweEU2LDB4MDAsCisweEZFLDB4OUQsIDB4RjQsMHgwMiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NDIsMHhBOCwgMHhGNiwweDA2LCAweDQyLDB4QUEsIDB4NzYsMHhCMSwKKzB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEUwLDB4MDAsIDB4RkYsMHgxQywgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4MDcsMHgzMCwgMHgwMCwweDAyLCAweDg2LDB4QkEsCisweDAwLDB4MDAsIDB4NzcsMHgzOSwgMHgwMCwweDFFLCAweDc3LDB4MzgsIDB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNSwKKzB4RkYsMHhGMCwgMHgyMCwweDM2LCAweDAwLDB4MDEsIDB4RTYsMHgwMCwgMHhGRSwweEQ1LCAweEY2LDB4MDUsIDB4NkYsMHgzNCwgMHgyMCwweDM2LAorMHgwMCwweDAyLCAweEU2LDB4MDAsIDB4RkUsMHhFNSwgMHhGNSwweDAyLCAweDAwLDB4MjAsIDB4RTAsMHgwMCwgMHhGRSwweEZDLCAweEY2LDB4MDYsCisweDQyLDB4QUMsIDB4MjAsMHgyRSwgMHgwMCwweDBDLCAweEU2LDB4MDAsIDB4RkYsMHgxQywgMHhGNCwweDAyLCAweDAwLDB4MDAsIDB4RjUsMHgwMiwKKzB4MDAsMHgxRiwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4RkYsMHgxQywgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweEFDLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4RjQsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg2LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwKKzB4MDAsMHgwNCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDA4LCAweDk3LDB4MzYsIDB4MDAsMHgwNCwgMHg4NywweDM2LAorMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RUMsMHgwMCwgMHhGRiwweDdELCAweEY2LDB4ODUsCisweDZGLDB4MzQsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDMsIDB4RUUsMHgwMCwKKzB4RkYsMHg4MCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAwLAorMHhGRiwweEJELCAweEY2LDB4MDYsIDB4NDIsMHhBRSwgMHhGNywweDA0LCAweDZGLDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4M0EsCisweDAwLDB4MDgsIDB4RjYsMHg4MiwgMHhGRiwweEVDLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhBNywweDNBLCAweDY4LDB4MDIsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDAsIDB4RkYsMHhEOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg0MiwweEFDLCAweDc2LDB4QjEsCisweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDMzLCAweDI4LDB4MDAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDA0LCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDE3LCAweDAwLDB4MDAsCisweDAwLDB4MUEsIDB4MDAsMHgwMCwgMHgwMCwweDFELCAweDAwLDB4MDAsIDB4MDAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4NTYsMHg2NSwKKzB4NzIsMHg3MywgMHg2OSwweDZGLCAweDZFLDB4NTMsIDB4NzQsMHg3MiwgMHg2OSwweDZFLCAweDY3LDB4M0EsIDB4MjAsMHg2RCwgMHg2MywweDcwLAorMHgyRCwweDZDLCAweDM0LDB4NzYsIDB4MzMsMHgyMCwgMHgzMywweDJFLCAweDMwLDB4MzgsIDB4NjMsMHgyMCwgMHg0NCwweDY1LCAweDYzLDB4MjAsCisweDMxLDB4MzEsIDB4MjAsMHgzMSwgMHgzOSwweDM5LCAweDM2LDB4MjAsIDB4MzEsMHgzMywgMHgzQSwweDMwLCAweDM2LDB4M0EsIDB4MzEsMHgzNiwKKzB4MDAsMHgwMCwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsIDB4RTAsMHgwQywgMHhGRiwweDAyLAorMHgwMCwweDAwLCAweDk3LDB4MDIsIDB4RkYsMHg4NCwgMHhGNywweDA2LCAweDBDLDB4M0UsIDB4Q0YsMHhGQywgMHg3NSwweDgwLCAweEY2LDB4MDIsCisweDAwLDB4MDIsIDB4OTYsMHgwMiwgMHhGRiwweDhDLCAweDkwLDB4MDIsIDB4RkYsMHg4OCwgMHhGNywweDA0LCAweEUwLDB4MjAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwMCwweDc0LCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNiwweDgyLAorMHgwMCwweDAzLCAweDk2LDB4ODIsIDB4RkYsMHg5OCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MEMsIDB4RjUsMHgwMiwgMHgxNCwweDk0LCAweEY1LDB4MDUsIDB4N0IsMHgwMCwgMHhGNSwweDBFLAorMHhGMCwweDE0LCAweEY1LDB4MDUsIDB4N0IsMHgwOCwgMHhGNywweDA2LCAweEUwLDB4MDAsIDB4RjYsMHg4NiwgMHg3QiwweDY4LCAweEM3LDB4MzgsCisweDZBLDB4MDAsIDB4RjcsMHgwNSwgMHg3QSwweEYwLCAweEY1LDB4MDIsIDB4MDAsMHg0QywgMHhGNiwweDgyLCAweDAwLDB4MDAsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMiwgMHhFRSwweDAxLCAweDAxLDB4MjQsIDB4RjUsMHgwNSwgMHg3QSwweEY4LCAweEM1LDB4QjQsIDB4MDAsMHgwMCwgMHhDNiwweDM0LAorMHgwMCwweDAwLCAweEY3LDB4MDYsIDB4RTAsMHgzMCwgMHhDNywweDJDLCAweDcwLDB4MDAsIDB4RjUsMHgwNiwgMHg2RiwweDQ0LCAweEI3LDB4MzIsCisweDUwLDB4MDIsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg5NSwweDk2LCAweEZGLDB4RjQsIDB4OTYsMHgxNiwKKzB4RkYsMHhGMCwgMHg5NiwweDk2LCAweEZGLDB4RUMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDMsMHgxQywgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg1LDB4OTYsIDB4RkYsMHhGNCwgMHg4NiwweDE2LCAweEZGLDB4RjAsIDB4ODYsMHg5NiwgMHhGRiwweEVDLCAweDA1LDB4QUMsCisweDE0LDB4OTQsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMiwgMHhFRSwweDAxLCAweDAwLDB4RDUsIDB4MDYsMHgzMCwKKzB4MDAsMHgwNCwgMHhGNSwweDAyLCAweDAwLDB4MjIsIDB4RjUsMHgwNSwgMHg2RiwweDU4LCAweEYwLDB4MDUsIDB4NkYsMHg1NCwgMHhGMCwweDA1LAorMHg2RiwweDUwLCAweEYwLDB4MDUsIDB4MkQsMHg0MCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyOSwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDAyLAorMHgwMCwweDAzLCAweEY3LDB4MDUsIDB4RTAsMHgwOCwgMHhGNywweDA0LCAweDdBLDB4RDgsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDk2LDB4MDIsCisweEZGLDB4OTQsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDEsMHg5MSwgMHhGNywweDA2LCAweDdBLDB4RTgsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDAzLDB4REMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4N0EsMHhFOCwgMHhGNiwweDAyLAorMHgwMCwweDA1LCAweEY2LDB4M0IsIDB4MjgsMHgwMCwgMHhGNywweDA2LCAweDdBLDB4RTAsIDB4ODYsMHg4MiwgMHhGRiwweDQ0LCAweEY2LDB4MDIsCisweDAwLDB4MDMsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDEsMHhDOSwgMHhGNiwweDNCLCAweDI4LDB4MDAsIDB4RjcsMHgwNCwKKzB4NkYsMHg2NCwgMHg4NiwweDgyLCAweEZGLDB4NDQsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgwMSwweEIwLCAweEY3LDB4MDUsIDB4NkYsMHg2NCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwMCwweDM0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDAsMHg4QywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDQ0LDB4MjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweEYwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwQywweDYwLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDQsMHgwOCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDAwLDB4MjAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgwQiwweEQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxRCwweDY4LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MUUsMHg1MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDVGLDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHg2RCwweEVDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgyMSwweEQwLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjIsMHgyQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4OTAsMHgwMiwKKzB4RkYsMHg5NCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgwQiwweEZDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNCwweDAyLAorMHgwMCwweDAwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwKKzB4MDAsMHgwOCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4QzUsMHhCMCwgMHgwMCwweDAwLCAweDIwLDB4MzIsIDB4MDAsMHgwMiwgMHhFRSwweDAxLAorMHgwMywweDA4LCAweEY1LDB4MDYsIDB4NkYsMHg0NCwgMHhBNiwweEFFLCAweDUwLDB4MDIsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHhFNiwweDAxLCAweDAyLDB4RkMsIDB4RjUsMHgwMiwKKzB4MDAsMHgwMiwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhGNCwgMHg5NiwweDE2LAorMHhGRiwweEYwLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDAzLDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg2LDB4MTYsCisweEZGLDB4RjAsIDB4ODUsMHg5NiwgMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNSwweEFDLCAweDAwLDB4MDQsIDB4RTAsMHgwMSwKKzB4MDIsMHhBQywgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4ODcsMHgxNiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHhGNiwweDgyLCAweDAwLDB4MDgsIDB4OTYsMHgzQSwKKzB4MDAsMHgwOCwgMHg5NiwweDNBLCAweDAwLDB4MEMsIDB4OTYsMHgzQSwgMHgwOSwweEQ4LCAweDk2LDB4M0EsIDB4MDksMHhEQywgMHg5NiwweDNBLAorMHgwRSwweEY0LCAweDk2LDB4M0EsIDB4MEUsMHhGOCwgMHg5NiwweEJBLCAweDE0LDB4MjAsIDB4OTYsMHgzQSwgMHgxNCwweDI0LCAweDkwLDB4QkEsCisweDE0LDB4OEMsIDB4ODYsMHg5NiwgMHgwMCwweDA0LCAweDkwLDB4QkEsIDB4MTQsMHg5MCwgMHg5NiwweEJBLCAweDAwLDB4MDAsIDB4OTYsMHgzQSwKKzB4MDAsMHgwNCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDg1LDB4OTYsCisweDAwLDB4MDAsIDB4ODcsMHgxNiwgMHgwMCwweDA4LCAweDg2LDB4MTYsIDB4MDAsMHgwNCwgMHg3NywweDM4LCAweEZGLDB4RkYsIDB4QzUsMHgzMCwKKzB4NzAsMHgwMCwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTQsMHgwMSwgMHgwMywweEM5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDJFLAorMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTQsMHgwMSwKKzB4MDMsMHhBMCwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDBDLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsCisweDAwLDB4MDgsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEUwLDB4MDEsIDB4MDMsMHhFOCwgMHhGNywweDA1LCAweDdBLDB4RDgsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY1LDB4MDIsCisweDAwLDB4MEEsIDB4RjUsMHgwNSwgMHg3MSwweENDLCAweEYwLDB4MDUsIDB4NzEsMHhENCwgMHhGMCwweDA1LCAweDcxLDB4RDAsIDB4RjAsMHgwNSwKKzB4NzEsMHhDNCwgMHhGNSwweDAyLCAweDAwLDB4MDEsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDIwLDB4MzYsIDB4MDAsMHgwQSwgMHhFQywweDAxLAorMHgwNCwweDY0LCAweEY1LDB4MDUsIDB4NzEsMHhDOCwgMHhGNSwweDhBLCAweDFFLDB4MDAsIDB4RjYsMHgwNiwgMHg3MSwweEM0LCAweDQ3LDB4MkMsCisweEZGLDB4RkMsIDB4OTcsMHgzMiwgMHgwMCwweDE4LCAweDA2LDB4MzAsIDB4MDAsMHgwNCwgMHgwNiwweEI0LCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4NzEsMHhDQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEVDLDB4MDEsIDB4MDQsMHg0MSwgMHgwNSwweEFDLAorMHgyMSwweDRDLCAweEYwLDB4MDUsIDB4NzEsMHg5OCwgMHhGNSwweDA2LCAweDZGLDB4NjgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4MDYsCisweDdCLDB4MTgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDA2LCAweDA1LDB4RDQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwNSwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NkYsMHg2OCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4MEIsMHg3MCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwKKzB4MDAsMHgwNiwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg2RiwweDY4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHgwQiwweEEwLCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDA1LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDcwLDB4ODAsIDB4OTUsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LAorMHgwQiwweDcwLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MDYsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsCisweDcwLDB4ODAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDA2LCAweDA1LDB4NTgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY1LDB4MDIsIDB4MDAsMHgwQSwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NzEsMHgwQywgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDA1LDB4NTgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsCisweDcxLDB4QzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDA1LDB4N0QsIDB4RjYsMHg4NiwKKzB4NzEsMHhDNCwgMHhFMCwweDAxLCAweDA1LDB4OTQsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweEY3LDB4MDQsIDB4NzEsMHhEMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4ODcsMHgzQSwgMHgwMCwweDE4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDUsMHhBQywgMHhGNywweDA1LCAweDdCLDB4MTAsIDB4RjYsMHgwNiwKKzB4NzEsMHgwQywgMHhFMCwweDAxLCAweDA1LDB4QzAsIDB4RjYsMHgwNSwgMHg3QiwweDE4LCAweEY2LDB4MDYsIDB4NkYsMHg2OCwgMHhGNiwweDA1LAorMHg3QiwweDE4LCAweDk3LDB4MDIsIDB4RkYsMHg0OCwgMHgwNywweDM4LCAweDIxLDB4MjgsIDB4OTcsMHgwMiwgMHhGRiwweDRDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgxMCwgMHg4NiwweDgyLAorMHhGRiwweDQ4LCAweEY0LDB4ODYsIDB4NkYsMHg2OCwgMHhGNCwweDg1LCAweDdCLDB4MTgsIDB4RjUsMHgwNCwgMHg3QiwweDEwLCAweDI2LDB4QjQsCisweDAwLDB4MDIsIDB4ODUsMHhCNiwgMHgwMCwweDAwLCAweDg3LDB4MkEsIDB4MDAsMHgwMCwgMHg3NiwweDI5LCAweDAwLDB4MUUsIDB4NzYsMHgzMCwKKzB4RkYsMHhFNSwgMHg3NiwweEI1LCAweDAwLDB4MUUsIDB4NzYsMHhCNCwgMHhGRiwweEU1LCAweEM1LDB4QUMsIDB4NkYsMHhDMCwgMHhDNywweDM4LAorMHg2NywweEMwLCAweDc3LDB4MzksIDB4RkYsMHhGMCwgMHg3NywweEI4LCAweDAwLDB4MTAsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsCisweDA2LDB4NDUsIDB4NzUsMHhBQywgMHhGRiwweEYwLCAweEY3LDB4MDQsIDB4NzEsMHhBQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNywweDA1LCAweDcxLDB4QUMsIDB4RjcsMHgwNCwgMHg3MSwweEFDLCAweEUwLDB4MDEsIDB4MDgsMHhDNCwgMHhGNywweDAyLAorMHgwMCwweDAxLCAweDc3LDB4MkMsIDB4RkYsMHhGOCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwNiwweDcxLCAweDc2LDB4QTksCisweDAwLDB4MUUsIDB4RjcsMHgwNCwgMHg3MSwweEE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4NzEsMHhBOCwgMHhGNywweDA0LCAweDcxLDB4QTgsIDB4RTAsMHgwMSwgMHgwOCwweEM0LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDJBLAorMHgwMCwweDAwLCAweDc2LDB4QjQsIDB4RkYsMHhFNSwgMHhDNywweDM4LCAweDZGLDB4QzAsIDB4NzcsMHgzOSwgMHhGRiwweEYwLCAweDI3LDB4MzgsCisweDAwLDB4MDQsIDB4MjAsMHgzQSwgMHgwMCwweDAzLCAweEUyLDB4MDEsIDB4MDgsMHhBNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzOSwKKzB4MDAsMHgwMiwgMHhGNiwweDg2LCAweDA2LDB4QTQsIDB4QTYsMHhCNiwgMHg3MCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMSwweDM0LAorMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHhCNCwgMHgwMCwweDAxLCAweDA3LDB4N0MsIDB4MDAsMHgwMSwgMHgwNywweEVDLCAweDAwLDB4MDEsCisweDA4LDB4NDQsIDB4ODcsMHgyQSwgMHgwMCwweDA0LCAweEM0LDB4ODQsIDB4MDAsMHgwMCwgMHhDMCwweDNBLCAweDRBLDB4MDAsIDB4RTYsMHgwMSwKKzB4MDYsMHhEOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgwMiwgMHhGRiwweDQ4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg1MiwweDAwLCAweDk3LDB4MkEsIDB4MDAsMHgwNCwgMHg4NywweDJBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDIxLDB4MDAsIDB4RUUsMHgwMSwgMHgwNywweDNDLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLCAweDAwLDB4MDQsIDB4ODcsMHgwMiwKKzB4RkYsMHg0OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg1MiwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgyOCwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEU2LDB4MDEsIDB4MDcsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhGQywgMHgwMCwweDFELCAweDcwLDB4M0UsCisweEZGLDB4RTEsIDB4RTYsMHgwMSwgMHgwNywweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLCAweDAwLDB4MTcsIDB4NzAsMHgzRSwKKzB4RkYsMHhFMSwgMHhFNiwweDAxLCAweDA3LDB4M0QsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsIDB4MDAsMHgxNiwgMHg3MCwweDNFLAorMHhGRiwweEUxLCAweEU2LDB4MDEsIDB4MDcsMHg0NCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwOCwweDg4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDJBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDIsIDB4RUUsMHgwMSwgMHgwOCwweEMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHg3MSwweEE0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweEE0LCAweEY3LDB4MDQsCisweDcxLDB4QTQsIDB4RTAsMHgwMSwgMHgwOCwweEM0LCAweEY3LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDJBLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDIxLDB4MDAsIDB4RUUsMHgwMSwgMHgwNywweEUwLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweEFBLAorMHgwMCwweDA0LCAweDg3LDB4MDIsIDB4RkYsMHg0OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg1MiwweDAwLCAweDI3LDB4MzgsCisweDAwLDB4MEMsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDEsIDB4MDcsMHhFMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhGQywKKzB4MDAsMHgxRCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgMHgwNywweEUwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLAorMHgwMCwweDE3LCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAxLCAweDA3LDB4RTEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsCisweDAwLDB4MTYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsIDB4MDgsMHg4MCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHhFMCwweDAxLCAweDA4LDB4ODAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweDg3LDB4MDIsIDB4RkYsMHg0OCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NTIsMHgwMCwgMHgyNywweDM4LCAweDAwLDB4MDQsIDB4MjAsMHgzQSwgMHgwMCwweDA4LCAweEU2LDB4MDEsCisweDA4LDB4MzgsIDB4RjYsMHg4MiwgMHgwMCwweDAwLCAweDc3LDB4RkMsIDB4MDAsMHgxRCwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwKKzB4MDgsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHhGQywgMHgwMCwweDE3LCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAxLAorMHgwOCwweDM5LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLCAweDAwLDB4MTYsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsCisweDA4LDB4ODAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEY2LDB4ODIsIDB4MDAsMHgwMSwgMHhFMCwweDAxLCAweDA4LDB4ODAsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4NzcsMHhGQywgMHgwMCwweDFELCAweDcwLDB4M0UsIDB4RkYsMHhFMSwgMHhFNiwweDAxLAorMHgwOCwweDc4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3NywweEZDLCAweDAwLDB4MTcsIDB4NzAsMHgzRSwgMHhGRiwweEUxLCAweEU2LDB4MDEsCisweDA4LDB4NzksIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4RkMsIDB4MDAsMHgxNiwgMHg3MCwweDNFLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwKKzB4MDgsMHg4MCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgwOCwweEMxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDcxLDB4QTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweEEwLCAweEY3LDB4MDQsIDB4NzEsMHhBMCwgMHhFMCwweDAxLCAweDA4LDB4QzQsIDB4RjcsMHgwMiwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDcxLDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LAorMHg3MSwweDlDLCAweEY3LDB4MDQsIDB4NzEsMHg5QywgMHhFMCwweDAxLCAweDA4LDB4QzQsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEY3LDB4MDIsCisweDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MDksMHg2OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwKKzB4N0IsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgxRSwgMHg3NiwweEI0LAorMHhGRiwweEU1LCAweEM3LDB4MzgsIDB4NkYsMHhDMCwgMHg3NywweDM5LCAweEZGLDB4RjAsIDB4MjcsMHgzOCwgMHgwMCwweDA0LCAweDIwLDB4M0EsCisweDAwLDB4MDMsIDB4RTIsMHgwMSwgMHgwQiwweDUwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNiwweDg2LCAweDA5LDB4MEMsIDB4QTYsMHhCNiwKKzB4NzAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzEsMHgzNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDksMHgxQywgMHgwMCwweDAxLAorMHgwQSwweEUwLCAweDAwLDB4MDEsIDB4MEEsMHhBQywgMHgwMCwweDAxLCAweDBCLDB4MTQsIDB4RjcsMHgwNCwgMHg3MSwweEQwLCAweEY2LDB4MDQsCisweDcxLDB4Q0MsIDB4MDYsMHhCOCwgMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NjIsMHgwMCwgMHhFNiwweDAxLCAweDA5LDB4MzgsIDB4QzcsMHgzNCwKKzB4MDAsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjUsMHg4NCwgMHg3MSwweEQ0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLAorMHg1QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwOSwweDg1LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3MSwweEIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwKKzB4NzEsMHhCMCwgMHhGNywweDA0LCAweDcxLDB4QjAsIDB4RjcsMHgwNCwgMHg3MSwweEI0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzEsMHhCNCwgMHhGNywweDA0LCAweDcxLDB4QjQsIDB4RTAsMHgwMSwgMHgwQiwweDUwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjQsMHg4NCwgMHg3MSwweEM4LCAweEY2LDB4ODUsIDB4NzEsMHhEMCwgMHg5NCwweDk2LCAweEZGLDB4RjQsIDB4RjQsMHg4NCwKKzB4N0IsMHgxMCwgMHhDMCwweDM2LCAweDYyLDB4MDAsIDB4RTYsMHgwMSwgMHgwOSwweEE0LCAweDk0LDB4OTYsIDB4RkYsMHhFQywgMHhGMCwweDA1LAorMHg3MSwweEQwLCAweEY3LDB4MDQsIDB4NzEsMHhEMCwgMHhGMCwweDA1LCAweDcxLDB4QzgsIDB4ODQsMHg5NiwgMHhGRiwweEVDLCAweEMwLDB4M0EsCisweDVBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzEsMHhDNCwgMHg4NywweDI2LCAweDAwLDB4MDgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg3MCwweDNBLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwgMHgwOSwweEUxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LAorMHg3MSwweDk4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweDk4LCAweDg0LDB4OTYsCisweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDBBLDB4NzEsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgwNSwweDU4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNiwweDAyLAorMHgwMCwweDA5LCAweDIwLDB4MzIsIDB4MDAsMHgxNCwgMHhFNiwweDAxLCAweDBBLDB4NEQsIDB4MjcsMHgwMCwgMHgwMCwweDBDLCAweDIwLDB4M0EsCisweDAwLDB4MDEsIDB4RTIsMHgwMSwgMHgwQSwweDRELCAweEY3LDB4MDYsIDB4MkQsMHhDQywgMHhGNiwweDg0LCAweDJFLDB4Q0MsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg3NSwweEI1LCAweDAwLDB4MDIsIDB4QjYsMHgyRSwgMHg3MCwweDAyLCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHhGNiwweDg1LAorMHgyRSwweENDLCAweDg2LDB4MDIsIDB4RkYsMHgzNCwgMHhGNywweDA2LCAweDJFLDB4NEMsIDB4MjAsMHgzNiwgMHgwMCwweDFGLCAweEUyLDB4MDEsCisweDBBLDB4NEQsIDB4QjYsMHgyRSwgMHg3MCwweDAyLCAweEYwLDB4MDUsIDB4MkUsMHhDQywgMHhGNywweDA0LCAweDJELDB4NjgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDNBLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4M0EsIDB4MDAsMHgyOCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhDMSwweDM4LCAweDAwLDB4MDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDQsCisweDcxLDB4QkMsIDB4ODQsMHg5NiwgMHhGRiwweEVDLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDcxLDB4QkMsIDB4RjcsMHgwNCwKKzB4NzEsMHhCQywgMHg4NiwweEE2LCAweDAwLDB4MDQsIDB4ODQsMHg5NiwgMHhGRiwweEY0LCAweEY3LDB4MDQsIDB4NzEsMHhCOCwgMHgyMCwweDI2LAorMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHhGNywweDA1LCAweDcxLDB4QjgsIDB4RTYsMHgwMSwgMHgwQiwweDUxLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RTAsMHgwMSwgMHgwQiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDcxLDB4QzAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3MSwweEMwLCAweEY3LDB4MDQsIDB4NzEsMHhDMCwgMHhGNCwweDg0LAorMHg3QiwweDEwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NCwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweEZELDB4Q0MsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MEIsMHg1MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4NzEsMHhDMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzEsMHhDMCwgMHhGNywweDA0LAorMHg3MSwweEMwLCAweEY0LDB4ODQsIDB4N0IsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGRiwweDMwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAxLCAweDBCLDB4NTAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDcxLDB4QzAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LAorMHg3MSwweEMwLCAweEY3LDB4MDQsIDB4NzEsMHhDMCwgMHhGNiwweDg0LCAweDdCLDB4MTAsIDB4ODcsMHgwMiwgMHhGRiwweDQ4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2QSwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgwNCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4OTYsMHg5MywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHhGRSwweDQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDUsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgMHg3MCwweDgwLCAweEY3LDB4MDUsIDB4N0IsMHgxOCwgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDUsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgMHg2RiwweDY4LCAweEY3LDB4MDUsIDB4N0IsMHgxOCwgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MDUsMHg1OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgMHg3QiwweDE4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHg2RiwweDY4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3QiwweDE4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDZGLDB4RjQsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LAorMHg3QiwweDE4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDcwLDB4ODAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDdCLDB4MTgsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDcxLDB4MEMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjUsMHgwMiwgMHgwMCwweDA0LCAweEY1LDB4MDUsIDB4NzYsMHgwMCwgMHhGMCwweDA1LAorMHg3NiwweDA4LCAweEYwLDB4MDUsIDB4NzYsMHgwNCwgMHhGMCwweDA1LCAweDc1LDB4RjgsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweEY2LDB4ODIsCisweDAwLDB4MDAsIDB4MjAsMHgzNiwgMHgwMCwweDA0LCAweEVDLDB4MDEsIDB4MEMsMHhCQywgMHhGNSwweDA1LCAweDc1LDB4RkMsIDB4RjUsMHg4RSwKKzB4NkEsMHhGOCwgMHhGNiwweDA2LCAweDc1LDB4RjgsIDB4NDcsMHgyQywgMHhGRiwweEZDLCAweDk3LDB4MzIsIDB4MDAsMHgxOCwgMHgwNiwweDMwLAorMHgwMCwweDA0LCAweDA2LDB4QjQsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc2LDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RUMsMHgwMSwgMHgwQywweDk5LCAweDA1LDB4QUMsIDB4MjEsMHg0QywgMHhGNSwweDA2LCAweDcyLDB4MTgsIDB4OTUsMHgxMywKKzB4RkYsMHhGQywgMHhGNSwweDA2LCAweDc2LDB4NDgsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNSwweDQ4LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDBELDB4RjQsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MEUsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NzIsMHgxOCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4MEQsMHhGNCwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgwRSwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg3MiwweEE0LCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwKKzB4MTMsMHgyQywgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjcsMHg4MiwgMHgwMCwweDAxLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LAorMHg3MywweDMwLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHgxNiwweEM4LCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDgyLCAweDAwLDB4MDEsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDA2LCAweDczLDB4QkMsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNiwweDFDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LCAweDE4LDB4MDAsIDB4OTUsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4ODIsCisweDAwLDB4MTAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4NzQsMHg0OCwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4MDYsIDB4MTYsMHg0MCwgMHg5NSwweDEzLAorMHhGRiwweEZDLCAweEY3LDB4ODIsIDB4MDAsMHgxMCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwgMHg3NCwweEQ0LCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjUsMHgwNiwKKzB4MTMsMHgyQywgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4RjUsMHgwMiwgMHgwMCwweDEyLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHhGNSwweDA2LAorMHg3NSwweDYwLCAweDk1LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNiwweDFDLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RjAsMHgwNSwgMHg3NSwweEYwLCAweEYwLDB4MDUsIDB4NzUsMHhFQywgMHhGMCwweDA1LCAweDc1LDB4RjQsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDM4LCAweEY3LDB4MDQsCisweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDBFLDB4MjgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgwRSwweDNELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxNSwweEQwLCAweDk3LDB4OTMsCisweEZGLDB4RkMsIDB4RTAsMHgwMSwgMHgxMywweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RkMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwRSwweDU5LCAweEY2LDB4ODYsIDB4NzUsMHhGOCwgMHhFMCwweDAxLAorMHgwRSwweDZDLCAweEY2LDB4ODIsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc2LDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDg2LDB4QkEsIDB4MDAsMHgxOCwgMHhGNywweDA0LCAweDc2LDB4RkMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwRSwweDkwLCAweEY2LDB4ODUsIDB4NzYsMHg2MCwgMHhGMywweDA2LAorMHg3NiwweDQ4LCAweEYzLDB4MDUsIDB4NzYsMHhGQywgMHhFMCwweDAxLCAweDBFLDB4QTQsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MDIsCisweDAwLDB4MTAsIDB4RjMsMHgwNSwgMHg3NiwweEY4LCAweEYzLDB4MDYsIDB4NzYsMHg0OCwgMHhGMywweDA1LCAweDc3LDB4MDAsIDB4RjcsMHgwMiwKKzB4MDAsMHgwMCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxMywweDE1LCAweEYzLDB4MDYsIDB4NzQsMHg0OCwgMHhGNywweDA0LAorMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgwRSwweEQ4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwKKzB4MEUsMHhFRCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MTYsMHg0MCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MTMsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NCwgMHg3NiwweDYwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg3MCwweDNBLCAweEZGLDB4RTEsIDB4RTYsMHgwMSwKKzB4MEYsMHgyMSwgMHhGNCwweDgyLCAweDAwLDB4MDAsIDB4OTYsMHg5MywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgwMCwweEJDLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAxLCAweDEzLDB4MTQsIDB4RjMsMHgwNiwgMHg3NSwweDYwLCAweEMzLDB4QjQsCisweDAwLDB4MDAsIDB4ODQsMHgxRSwgMHgwMCwweDEwLCAweEY2LDB4ODQsIDB4NEEsMHhBMCwgMHgyMywweDE0LCAweDAwLDB4MjAsIDB4OTMsMHgxNiwKKzB4RkYsMHhDNCwgMHg5NCwweDE2LCAweEZGLDB4RTAsIDB4OTYsMHg5NiwgMHhGRiwweEQ0LCAweDg1LDB4MUUsIDB4MDAsMHgxNCwgMHhGNywweDA0LAorMHg0QSwweDlDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RUMsMHgwMSwgMHgxMCwweDBDLCAweDk1LDB4MTYsCisweEZGLDB4RTQsIDB4NzcsMHgzNSwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwNiwKKzB4NEEsMHg5OCwgMHhDNiwweEI4LCAweDMwLDB4MDAsIDB4MDYsMHhCNCwgMHgwMCwweDBDLCAweEM1LDB4ODQsIDB4MDAsMHgwMCwgMHg4NywweDM2LAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDQyLDB4MDAsIDB4RTYsMHgwMSwgMHgwRiwweDlDLCAweEM2LDB4MjQsCisweDAwLDB4MDAsIDB4ODcsMHgzNiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDUyLDB4MDAsIDB4RTYsMHgwMSwKKzB4MEYsMHhBMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgwRiwweEFELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4ODYsMHgzNiwgMHgwMCwweDAwLCAweDg3LDB4MTYsCisweEZGLDB4RTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzIsIDB4NzIsMHgwMCwgMHhFMiwweDAxLCAweDBGLDB4RTgsIDB4RjUsMHgwMiwKKzB4MDAsMHgwMCwgMHhDMCwweDMyLCAweDcyLDB4MDAsIDB4RTYsMHgwMSwgMHgwRiwweEYwLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHg4NiwweEI2LAorMHgwMCwweDA0LCAweDg3LDB4MTYsIDB4RkYsMHhFNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEUyLDB4MDEsCisweDBGLDB4RjEsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweEY1LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDJBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwKKzB4MTAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MDAsIDB4RjUsMHg4MiwgMHgwMCwweDAxLCAweDIwLDB4MkUsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgxMCwweDEwLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhGNCwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsCisweDEwLDB4NDUsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDg3LDB4MTYsIDB4RkYsMHhENCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4NzYsMHhCOSwKKzB4MDAsMHgwMSwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4NzYsMHhCNSwgMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzAsMHgwMCwgMHgwNiwweEI0LAorMHgwMCwweDE0LCAweDg2LDB4QjYsIDB4MDAsMHgwMCwgMHg5NywweDE2LCAweEZGLDB4RDgsIDB4RTAsMHgwMSwgMHgxMCwweEI4LCAweDk2LDB4OTYsCisweEZGLDB4REMsIDB4MjcsMHgxNCwgMHgwMCwweDJDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4MywweDE2LCAweEZGLDB4QzQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MywweDEzLCAweEZGLDB4RkMsIDB4RjMsMHgwNiwgMHg0QSwweDk4LCAweDkzLDB4MTMsIDB4RkYsMHhGQywgMHg5MywweDk2LAorMHhGRiwweENDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDI1LDB4NjgsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDgzLDB4OTYsCisweEZGLDB4Q0MsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTAsMHhCNSwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwKKzB4RkYsMHhENCwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4NzYsMHhCOSwgMHgwMCwweDAxLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg3NiwweEI1LAorMHgwMCwweDAyLCAweEM2LDB4QjQsIDB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MTQsIDB4ODYsMHhCNiwgMHgwMCwweDAwLCAweDk3LDB4MTYsCisweEZGLDB4RDgsIDB4OTYsMHg5NiwgMHhGRiwweERDLCAweEY3LDB4MDUsIDB4NEEsMHhBMCwgMHhFMCwweDAxLCAweDEwLDB4QkMsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTAsMHhDQywgMHhGNCwweDgyLAorMHgwMCwweDAxLCAweEUwLDB4MDEsIDB4MTEsMHgyNCwgMHhGNCwweDgyLCAweDAwLDB4MDAsIDB4ODYsMHg5NiwgMHhGRiwweEQ4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4NzcsMHgzNSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjYsMHg4NiwKKzB4NDIsMHhDOCwgMHhBNiwweDNBLCAweDY4LDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc1LDB4MzksIDB4MDAsMHgxRSwgMHg3NSwweDI4LAorMHhGRiwweEU1LCAweDA1LDB4QjgsIDB4MDAsMHgwMiwgMHg4NiwweEFFLCAweDAwLDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDA0LCAweDk3LDB4MTYsCisweEZGLDB4RUMsIDB4QzYsMHgzMCwgMHg1NywweEMwLCAweDc2LDB4MzAsIDB4RkYsMHhGMCwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4NzUsMHhBRCwKKzB4MDAsMHgxRSwgMHg3NSwweEFDLCAweEZGLDB4RTUsIDB4QzYsMHhCNCwgMHg1RiwweEMwLCAweDc2LDB4QjQsIDB4RkYsMHhGMCwgMHg5NiwweDk2LAorMHhGRiwweEYwLCAweDIwLDB4MjYsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDExLDB4MzgsIDB4RjUsMHg4MiwgMHgwMCwweDAwLCAweEUwLDB4MDEsCisweDExLDB4Q0MsIDB4RjYsMHgwMiwgMHgwMCwweDAwLCAweDg2LDB4OTYsIDB4RkYsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgzNCwKKzB4NjgsMHgwMCwgMHhDNCwweDlDLCAweDcyLDB4MDAsIDB4QzAsMHgyRSwgMHg2QSwweDAwLCAweEVDLDB4MDEsIDB4MTEsMHg5OCwgMHhDNSwweDI0LAorMHgwMCwweDAwLCAweEM2LDB4MkMsIDB4MDAsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEE2LDB4QjIsCisweDcwLDB4MDIsIDB4MDUsMHhBQywgMHgwMCwweDAxLCAweEM3LDB4MzAsIDB4NzAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MUUsIDB4NzcsMHgzOCwKKzB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDc3LDB4QzAsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweEY2LDB4QUIsIDB4MjgsMHgwMCwgMHgwNSwweDI4LAorMHgwMCwweDAyLCAweDg3LDB4MTYsIDB4RkYsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgyRSwgMHg3MiwweDAwLCAweEVDLDB4MDEsCisweDExLDB4NTksIDB4MDYsMHgzMCwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwMSwgMHhGMywweDA1LCAweDc2LDB4RjQsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RjAsIDB4ODYsMHg5RSwgMHgwMCwweDA0LCAweEM3LDB4MzgsIDB4NzAsMHgwMCwgMHhDNywweDM4LAorMHg0OCwweDAwLCAweEM2LDB4QjQsIDB4NzAsMHgwMCwgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDYsMHhCNCwgMHgwMCwweDIwLCAweDk3LDB4MDIsCisweEZGLDB4NkMsIDB4OTQsMHg4MiwgMHhGRiwweDUwLCAweDk2LDB4ODIsIDB4RkYsMHg1OCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwKKzB4MTMsMHgxMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwgMHg3NiwweDVDLCAweEY1LDB4ODQsIDB4NzYsMHhGOCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzYsMHg1QywgMHhGNywweDA0LCAweDc2LDB4NUMsIDB4MjAsMHgyRSwgMHgwMCwweDIxLCAweEUyLDB4MDEsCisweDEyLDB4MzAsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwKKzB4MDAsMHgwMSwgMHhGNiwweDA1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAxLAorMHgxMiwweDFDLCAweEI1LDB4QkEsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjMsMHgwMiwgMHgwMCwweDIyLCAweEYzLDB4MDUsCisweDc2LDB4RjgsIDB4RjMsMHgwNCwgMHg3NywweDAwLCAweEUwLDB4MDEsIDB4MTIsMHgzNCwgMHhGMywweDA1LCAweDc2LDB4RkMsIDB4RjAsMHgwNSwKKzB4NzYsMHhGQywgMHhGNywweDA0LCAweDc1LDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgxMiwweDcxLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LCAweDJELDB4MzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEYsIDB4MjAsMHgzMiwKKzB4MDAsMHg0NCwgMHhFNiwweDAxLCAweDEyLDB4NzAsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGNywweDA0LAorMHg3NiwweDA4LCAweEY2LDB4ODQsIDB4NzYsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDEsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweEU2LDB4MDEsCisweDEyLDB4OEMsIDB4RjcsMHgwNSwgMHg3NiwweDA4LCAweEYwLDB4MDUsIDB4NzYsMHgwOCwgMHhGNiwweDg0LCAweDc2LDB4MDgsIDB4RjcsMHgwNCwKKzB4NzYsMHgwNCwgMHhGMCwweDA1LCAweDc1LDB4RjgsIDB4RjYsMHgwNiwgMHg3NSwweEY4LCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDEyLDB4QjksIDB4RjcsMHgwNSwgMHg3NSwweEZDLCAweEUwLDB4MDEsCisweDEyLDB4QzgsIDB4RjcsMHgwMiwgMHgwMCwweDAwLCAweDc3LDB4MzUsIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDYwLDB4MDAsIDB4ODcsMHgzQSwKKzB4MDAsMHgxOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTMsMHgwOSwgMHhGNywweDA1LAorMHg3NiwweDYwLCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHhGMywweDA2LCAweDcyLDB4QTQsIDB4RjMsMHgwNSwgMHg3NiwweDQ4LCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjMsMHgwMiwKKzB4MDAsMHgwRSwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwgMHgxMywweDE4LCAweEIzLDB4M0EsIDB4NjgsMHgwMiwgMHhFMCwweDAxLAorMHgxMywweDE4LCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhFMCwweDAxLCAweDEzLDB4MTQsIDB4RjMsMHgwNiwgMHg3MiwweDE4LCAweEYzLDB4MDYsCisweDczLDB4MzAsIDB4RjMsMHgwNSwgMHg3NiwweDQ4LCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweEY3LDB4MDQsIDB4NzYsMHg2MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHhCQSwgMHgwMCwweDA0LCAweEY3LDB4MDQsCisweDc2LDB4NTQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHhGNywweDA1LCAweDc2LDB4NTQsIDB4RjcsMHgwNCwKKzB4NzYsMHg1OCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzYsMHg1OCwgMHhGNywweDA0LAorMHg3NSwweEY4LCAweEY2LDB4ODQsIDB4NzYsMHg1OCwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxMywweDlELCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgMHgwMCwweDBGLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAxLAorMHgxMywweDlDLCAweEI1LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjcsMHgwNCwgMHg3NiwweDA4LCAweEY2LDB4ODQsCisweDc2LDB4MDAsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHhFNiwweDAxLCAweDEzLDB4QjgsIDB4RjcsMHgwNSwKKzB4NzYsMHgwOCwgMHhGMCwweDA1LCAweDc2LDB4MDgsIDB4RjcsMHgwNCwgMHg3NiwweDA4LCAweEY2LDB4ODQsIDB4NzYsMHgwNCwgMHhGMCwweDA1LAorMHg3NSwweEY4LCAweEY1LDB4ODQsIDB4NzYsMHhGOCwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4NDcsMHgwQywgMHgwMCwweDAxLCAweDIwLDB4MkUsCisweDAwLDB4MjEsIDB4RTIsMHgwMSwgMHgxNCwweDE0LCAweEY3LDB4MDUsIDB4NzUsMHhGQywgMHhGNywweDA0LCAweDJELDB4MzgsIDB4RjYsMHg4NiwKKzB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHgyMCwweDMyLAorMHgwMCwweDQ0LCAweEU2LDB4MDEsIDB4MTQsMHgwMCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY1LDB4MDIsCisweDAwLDB4MjIsIDB4RjUsMHgwNSwgMHg3NiwweEY4LCAweEY1LDB4MDQsIDB4NzcsMHgwMCwgMHhFMCwweDAxLCAweDE0LDB4MTgsIDB4RjUsMHgwNSwKKzB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RjcsMHgwNCwgMHg3NSwweEVDLCAweEY1LDB4MDYsIDB4NzIsMHgxOCwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTQsMHg0MCwgMHhGNSwweDA1LCAweDc2LDB4NDgsIDB4RjcsMHgwNCwgMHg3NSwweEYwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTQsMHg1NSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDE1LDB4RDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MTQsMHhDNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY3LDB4MDQsIDB4NzUsMHhGQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsCisweDE0LDB4NzEsIDB4RjYsMHg4NiwgMHg3NSwweEY4LCAweEUwLDB4MDEsIDB4MTQsMHg4OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNCwKKzB4NzYsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg4NywweDNBLAorMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNCwweEM1LCAweEY3LDB4MDUsCisweDc2LDB4NjAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgMHgwMCwweDBFLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAxLAorMHgxNCwweEJDLCAweEI1LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RjUsMHgwNiwgMHg3MiwweEE0LCAweEY1LDB4MDUsCisweDc2LDB4NDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LAorMHg3NSwweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNSwweDQwLCAweEY0LDB4MDIsCisweDAwLDB4MDAsIDB4ODYsMHg5NiwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg1LCAweDc1LDB4RUMsIDB4ODYsMHg5NiwKKzB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjYsMHg4NSwgMHg3QiwweDM4LCAweDg2LDB4OTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LAorMHg3NiwweDQ4LCAweEY2LDB4ODUsIDB4N0IsMHgzMCwgMHhGNiwweDg2LCAweDcyLDB4MTgsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweDQ3LDB4MEMsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTUsMHg0MSwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDE1LDB4RDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweDc1LDB4RjQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNSwweEJDLCAweEY0LDB4MDIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LAorMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg1LCAweDc1LDB4RjAsIDB4ODYsMHg5NiwgMHgwMCwweDA4LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4RjYsMHg4NSwgMHg3QiwweDQ4LCAweDg2LDB4OTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc2LDB4NDgsIDB4RjYsMHg4NSwKKzB4N0IsMHg0MCwgMHhGNiwweDg2LCAweDcyLDB4MTgsIDB4QzAsMHgzQSwgMHg2QSwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTUsMHhCRCwgMHhGNCwweDAyLCAweDAwLDB4MDEsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsCisweDE1LDB4RDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweDc2LDB4RkMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNSwweEZDLCAweEY2LDB4ODIsIDB4MDAsMHgxMCwgMHhGNiwweDg2LCAweDc2LDB4NDgsIDB4RjYsMHg4NSwKKzB4NzYsMHhGQywgMHhFMCwweDAxLCAweDE2LDB4MEMsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEY2LDB4ODUsIDB4NzYsMHhGOCwgMHhGNiwweDg2LAorMHg3NiwweDQ4LCAweEY2LDB4ODUsIDB4NzcsMHgwMCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsCisweDE2LDB4MjAsIDB4RjYsMHg4NiwgMHg3NCwweEQ0LCAweEUwLDB4MDEsIDB4MTYsMHgyQywgMHhGNiwweDg1LCAweDc2LDB4NDgsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDE2LDB4NDAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LAorMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4MDQsIDB4NzUsMHhGMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE2LDB4ODUsIDB4RjcsMHgwMiwgMHgwMCwweDAxLCAweEY3LDB4MDUsIDB4NzUsMHhGNCwgMHhGNiwweDg0LAorMHg3QiwweDQ4LCAweEY3LDB4MDUsIDB4NzYsMHhGNCwgMHhGNywweDA0LCAweDdCLDB4NDAsIDB4QzYsMHhCMCwgMHg2OCwweDAwLCAweDI2LDB4QjQsCisweDAwLDB4MDQsIDB4OTcsMHgwMiwgMHhGRiwweDZDLCAweDk2LDB4MDIsIDB4RkYsMHg1MCwgMHhFMCwweDAxLCAweDE2LDB4QTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4RjYsMHg4NCwgMHg3QiwweDM4LCAweEY1LDB4ODIsIDB4MDAsMHgwMSwgMHhGNSwweDg1LAorMHg3NiwweEY0LCAweEY2LDB4MDQsIDB4N0IsMHgzMCwgMHhDNiwweEI4LCAweDY4LDB4MDAsIDB4MjYsMHhCNCwgMHgwMCwweDA0LCAweDk2LDB4MDIsCisweEZGLDB4NkMsIDB4OTcsMHgwMiwgMHhGRiwweDUwLCAweDk2LDB4ODIsIDB4RkYsMHg1OCwgMHhGNSwweDg2LCAweDczLDB4QkMsIDB4RjUsMHg4NSwKKzB4NzYsMHg0OCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsCisweDdCLDB4MjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LCAweDdCLDB4MjgsIDB4RjcsMHgwNCwKKzB4NzUsMHhGNCwgMHhGNiwweDg0LCAweDdCLDB4MjgsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTcsMHgyMSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEYwLDB4MDUsIDB4NzUsMHhGNCwgMHhGNywweDA0LCAweDc1LDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNywweDI1LCAweEYwLDB4MDUsIDB4NzUsMHhGMCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwKKzB4MTYsMHg0MCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RTAsMHgwMSwgMHgxNywweEVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGMCwweDA1LAorMHg3NSwweEVDLCAweEY3LDB4MDQsIDB4NzUsMHhGQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsCisweDE3LDB4NDEsIDB4RjYsMHg4NiwgMHg3NSwweEY4LCAweEUwLDB4MDEsIDB4MTcsMHg1OCwgMHhGNywweDAyLCAweDAwLDB4MDAsIDB4RjcsMHgwNCwKKzB4NzYsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjgsMHgwMCwgMHg4NywweDNBLAorMHgwMCwweDE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxNywweDk1LCAweEY3LDB4MDUsCisweDc2LDB4NjAsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4RjUsMHgwMiwgMHgwMCwweDBFLCAweDIwLDB4MzIsIDB4MDAsMHg0NCwgMHhFNiwweDAxLAorMHgxNywweDhDLCAweEI1LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4RTAsMHgwMSwgMHgxNywweDk4LCAweEY1LDB4MDYsCisweDcyLDB4QTQsIDB4RjUsMHgwNiwgMHg3MiwweDE4LCAweEY1LDB4MDUsIDB4NzYsMHg0OCwgMHhGNSwweDg0LCAweDc2LDB4RjgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMSwgMHgxNywweEU4LCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHhGNywweDA0LAorMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksCisweDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDEsIDB4MTcsMHhENCwgMHhCNSwweEJBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwKKzB4MkQsMHgzOCwgMHhGNSwweDAyLCAweDAwLDB4MjIsIDB4RjUsMHgwNSwgMHg3NiwweEY4LCAweEY1LDB4MDQsIDB4NzcsMHgwMCwgMHhFMCwweDAxLAorMHgxNywweEVDLCAweEY1LDB4MDUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDM4LCAweEY3LDB4MDQsIDB4NzUsMHhFQywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE4LDB4MzQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY3LDB4MDQsCisweDc1LDB4RjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE4LDB4NDksIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwgMHgxNiwweDQwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhFMCwweDAxLAorMHgxQywweDc0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhGNiwweDg0LCAweDc2LDB4NjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MzYsCisweDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDcwLDB4M0EsIDB4RkYsMHhFMSwgMHhFNiwweDAxLCAweDE4LDB4N0QsIDB4RjQsMHg4MiwKKzB4MDAsMHgwMCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MDAsMHhCQywgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEUwLDB4MDEsIDB4MUMsMHg3MCwgMHhGMywweDA2LCAweDc1LDB4NjAsIDB4QzMsMHhCNCwgMHgwMCwweDAwLCAweDg0LDB4MUUsCisweDAwLDB4MTAsIDB4RjYsMHg4NCwgMHg0QSwweEEwLCAweDIzLDB4MTQsIDB4MDAsMHgyMCwgMHg5MywweDE2LCAweEZGLDB4QzQsIDB4OTQsMHgxNiwKKzB4RkYsMHhFMCwgMHg5NiwweDk2LCAweEZGLDB4RDQsIDB4ODUsMHgxRSwgMHgwMCwweDE0LCAweEY3LDB4MDQsIDB4NEEsMHg5QywgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFQywweDAxLCAweDE5LDB4NjgsIDB4OTUsMHgxNiwgMHhGRiwweEU0LCAweDc3LDB4MzUsCisweDAwLDB4MDEsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4QzYsMHhCOCwKKzB4MzAsMHgwMCwgMHgwNiwweEI0LCAweDAwLDB4MEMsIDB4QzUsMHg4NCwgMHgwMCwweDAwLCAweDg3LDB4MzYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NDIsMHgwMCwgMHhFNiwweDAxLCAweDE4LDB4RjgsIDB4QzYsMHgyNCwgMHgwMCwweDAwLCAweDg3LDB4MzYsCisweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NTIsMHgwMCwgMHhFNiwweDAxLCAweDE4LDB4RkMsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTksMHgwOSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweEY1LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDM2LCAweDAwLDB4MDAsIDB4ODcsMHgxNiwgMHhGRiwweEUwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg3MiwweDAwLCAweEUyLDB4MDEsIDB4MTksMHg0NCwgMHhGNSwweDAyLCAweDAwLDB4MDAsIDB4QzAsMHgzMiwKKzB4NzIsMHgwMCwgMHhFNiwweDAxLCAweDE5LDB4NEMsIDB4MjAsMHgyQSwgMHgwMCwweDAwLCAweDg2LDB4QjYsIDB4MDAsMHgwNCwgMHg4NywweDE2LAorMHhGRiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgxOSwweDRELCAweDIwLDB4MkEsCisweDAwLDB4MDAsIDB4RjUsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MkEsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDE5LDB4NUQsIDB4MjAsMHgyRSwKKzB4MDAsMHgwMCwgMHhGNSwweDgyLCAweDAwLDB4MDEsIDB4MjAsMHgyRSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MTksMHg2QywgMHgyMCwweDI2LAorMHgwMCwweDAwLCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHgyMCwweDI2LCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxOSwweEExLCAweEY2LDB4MDIsCisweDAwLDB4MDEsIDB4ODcsMHgxNiwgMHhGRiwweEQ0LCAweEYzLDB4MDYsIDB4NEEsMHg5OCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwKKzB4NzAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDIsIDB4QzYsMHhCNCwgMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LAorMHgwMCwweDAwLCAweDk3LDB4MTYsIDB4RkYsMHhEOCwgMHhFMCwweDAxLCAweDFBLDB4MTQsIDB4OTYsMHg5NiwgMHhGRiwweERDLCAweDI3LDB4MTQsCisweDAwLDB4MkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDgzLDB4MTYsIDB4RkYsMHhDNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTMsMHgxMywKKzB4RkYsMHhGQywgMHhGMywweDA2LCAweDRBLDB4OTgsIDB4OTMsMHgxMywgMHhGRiwweEZDLCAweDkzLDB4OTYsIDB4RkYsMHhDQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODMsMHg5NiwgMHhGRiwweENDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxQSwweDExLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHg4NywweDE2LCAweEZGLDB4RDQsIDB4RjMsMHgwNiwKKzB4NEEsMHg5OCwgMHg3NiwweEI5LCAweDAwLDB4MDEsIDB4QzYsMHhCNCwgMHg3MCwweDAwLCAweDc2LDB4QjUsIDB4MDAsMHgwMiwgMHhDNiwweEI0LAorMHgzMCwweDAwLCAweDA2LDB4QjQsIDB4MDAsMHgxNCwgMHg4NiwweEI2LCAweDAwLDB4MDAsIDB4OTcsMHgxNiwgMHhGRiwweEQ4LCAweDk2LDB4OTYsCisweEZGLDB4REMsIDB4RjcsMHgwNSwgMHg0QSwweEEwLCAweEUwLDB4MDEsIDB4MUEsMHgxOCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwKKzB4MDAsMHgwMCwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxQSwweDI4LCAweEY0LDB4ODIsIDB4MDAsMHgwMSwgMHhFMCwweDAxLAorMHgxQSwweDgwLCAweEY0LDB4ODIsIDB4MDAsMHgwMCwgMHg4NiwweDk2LCAweEZGLDB4RDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDc3LDB4MzUsCisweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGNiwweDg2LCAweDQyLDB4QzgsIDB4QTYsMHgzQSwKKzB4NjgsMHgwMiwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzUsMHgzOSwgMHgwMCwweDFFLCAweDc1LDB4MjgsIDB4RkYsMHhFNSwgMHgwNSwweEI4LAorMHgwMCwweDAyLCAweDg2LDB4QUUsIDB4MDAsMHgwMCwgMHgwNywweDM4LCAweDAwLDB4MDQsIDB4OTcsMHgxNiwgMHhGRiwweEVDLCAweEM2LDB4MzAsCisweDU3LDB4QzAsIDB4NzYsMHgzMCwgMHhGRiwweEYwLCAweDk2LDB4MTYsIDB4RkYsMHhGNCwgMHg3NSwweEFELCAweDAwLDB4MUUsIDB4NzUsMHhBQywKKzB4RkYsMHhFNSwgMHhDNiwweEI0LCAweDVGLDB4QzAsIDB4NzYsMHhCNCwgMHhGRiwweEYwLCAweDk2LDB4OTYsIDB4RkYsMHhGMCwgMHgyMCwweDI2LAorMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MUEsMHg5NCwgMHhGNSwweDgyLCAweDAwLDB4MDAsIDB4RTAsMHgwMSwgMHgxQiwweDI4LCAweEY2LDB4MDIsCisweDAwLDB4MDAsIDB4ODYsMHg5NiwgMHhGRiwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDM0LCAweDY4LDB4MDAsIDB4QzQsMHg5QywKKzB4NzIsMHgwMCwgMHhDMCwweDJFLCAweDZBLDB4MDAsIDB4RUMsMHgwMSwgMHgxQSwweEY0LCAweEM1LDB4MjQsIDB4MDAsMHgwMCwgMHhDNiwweDJDLAorMHgwMCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhFQywgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QTYsMHhCMiwgMHg3MCwweDAyLCAweDA1LDB4QUMsCisweDAwLDB4MDEsIDB4QzcsMHgzMCwgMHg3MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgxRSwgMHg3NywweDM4LCAweEZGLDB4RTUsIDB4QzYsMHhCNCwKKzB4NzcsMHhDMCwgMHg3NiwweEI0LCAweEZGLDB4RjAsIDB4RjYsMHhBQiwgMHgyOCwweDAwLCAweDA1LDB4MjgsIDB4MDAsMHgwMiwgMHg4NywweDE2LAorMHhGRiwweEYwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDJFLCAweDcyLDB4MDAsIDB4RUMsMHgwMSwgMHgxQSwweEI1LCAweDA2LDB4MzAsCisweDAwLDB4MDIsIDB4RjMsMHgwMiwgMHgwMCwweDAxLCAweEYzLDB4MDUsIDB4NzYsMHhGNCwgMHhGNiwweDAyLCAweDAwLDB4MDEsIDB4ODcsMHgxNiwKKzB4RkYsMHhGMCwgMHg4NiwweDlFLCAweDAwLDB4MDQsIDB4QzcsMHgzOCwgMHg3MCwweDAwLCAweEM3LDB4MzgsIDB4NDgsMHgwMCwgMHhDNiwweEI0LAorMHg3MCwweDAwLCAweDg3LDB4MTYsIDB4RkYsMHhGNCwgMHgwNiwweEI0LCAweDAwLDB4MjAsIDB4OTcsMHgwMiwgMHhGRiwweDZDLCAweDk0LDB4ODIsCisweEZGLDB4NTAsIDB4OTYsMHg4MiwgMHhGRiwweDU4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDFDLDB4NkMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhGNywweDA0LCAweDc2LDB4NUMsIDB4RjUsMHg4NCwgMHg3NiwweEY4LCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhGNywweDA1LAorMHg3NiwweDVDLCAweEY3LDB4MDQsIDB4NzYsMHg1QywgMHgyMCwweDJFLCAweDAwLDB4MjEsIDB4RTIsMHgwMSwgMHgxQiwweDhDLCAweEY2LDB4ODYsCisweDJDLDB4MjgsIDB4RjcsMHgwNCwgMHgyRCwweDM4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwNiwweDM4LCAweDAwLDB4MDEsIDB4RjYsMHgwNSwKKzB4MkQsMHgzOCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4MjAsMHgzMiwgMHgwMCwweDQ0LCAweEU2LDB4MDEsIDB4MUIsMHg3OCwgMHhCNSwweEJBLAorMHg2OCwweDAyLCAweEYwLDB4MDUsIDB4MkQsMHgzOCwgMHhGMywweDAyLCAweDAwLDB4MjIsIDB4RjMsMHgwNSwgMHg3NiwweEY4LCAweEYzLDB4MDQsCisweDc3LDB4MDAsIDB4RTAsMHgwMSwgMHgxQiwweDkwLCAweEYzLDB4MDUsIDB4NzYsMHhGQywgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RjcsMHgwNCwKKzB4NzUsMHhGOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MUIsMHhDRCwgMHhGNiwweDg2LAorMHgyQywweDI4LCAweEY3LDB4MDQsIDB4MkQsMHgzOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDYsMHgzOCwgMHgwMCwweDAxLCAweEY2LDB4MDUsCisweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEYzLDB4MDIsIDB4MDAsMHgwRiwgMHgyMCwweDMyLCAweDAwLDB4NDQsIDB4RTYsMHgwMSwKKzB4MUIsMHhDQywgMHhCMywweDNBLCAweDY4LDB4MDIsIDB4RjAsMHgwNSwgMHgyRCwweDM4LCAweEY3LDB4MDQsIDB4NzYsMHgwOCwgMHhGNiwweDg0LAorMHg3NiwweDAwLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHhDMCwweDNBLCAweDZBLDB4MDAsIDB4RTYsMHgwMSwgMHgxQiwweEU4LCAweEY3LDB4MDUsCisweDc2LDB4MDgsIDB4RjAsMHgwNSwgMHg3NiwweDA4LCAweEY2LDB4ODQsIDB4NzYsMHgwOCwgMHhGNywweDA0LCAweDc2LDB4MDQsIDB4RjAsMHgwNSwKKzB4NzUsMHhGOCwgMHhGNiwweDA2LCAweDc1LDB4RjgsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweDQ3LDB4MEMsIDB4MDAsMHgwMSwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MUMsMHgxNSwgMHhGNywweDA1LCAweDc1LDB4RkMsIDB4RTAsMHgwMSwgMHgxQywweDI0LCAweEY3LDB4MDIsCisweDAwLDB4MDAsIDB4NzcsMHgzNSwgMHgwMCwweDAyLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg4NywweDNBLCAweDAwLDB4MTgsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgxQywweDY1LCAweEY3LDB4MDUsIDB4NzYsMHg2MCwgMHhGNywweDA0LAorMHgyRCwweDM4LCAweEYzLDB4MDYsIDB4NzIsMHhBNCwgMHhGMywweDA1LCAweDc2LDB4NDgsIDB4RjYsMHg4NiwgMHgyQywweDI4LCAweDA2LDB4MzgsCisweDAwLDB4MDEsIDB4RjYsMHgwNSwgMHgyRCwweDM4LCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhGMywweDAyLCAweDAwLDB4MEUsIDB4MjAsMHgzMiwKKzB4MDAsMHg0NCwgMHhFNiwweDAxLCAweDFDLDB4NzQsIDB4QjMsMHgzQSwgMHg2OCwweDAyLCAweEUwLDB4MDEsIDB4MUMsMHg3NCwgMHhGMCwweDA1LAorMHgyRCwweDM4LCAweEUwLDB4MDEsIDB4MUMsMHg3MCwgMHhGMywweDA2LCAweDcyLDB4MTgsIDB4RjMsMHgwNiwgMHg3MywweDMwLCAweEYzLDB4MDUsCisweDc2LDB4NDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA2LAorMHg3NiwweDQ4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDcyLDB4MTgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsCisweDAwLDB4MDgsIDB4RTAsMHgwMCwgMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDc2LDB4NDgsIDB4OTcsMHgxMywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDcyLDB4QTQsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHhGNywweDA2LCAweDc2LDB4NDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDczLDB4MzAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDc2LDB4NDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzMsMHhCQywgMHg5NywweDEzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDc2LDB4NDgsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzQsMHg0OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzYsMHg0OCwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzQsMHhENCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzYsMHg0OCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4NzUsMHg2MCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjYsMHg4NiwKKzB4NzYsMHg2OCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgMHg3NywweDA0LCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg0OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwgMHgxRCwweEQ0LCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4OTAsMHgxMywgMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4NzYsMHg2OCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwKKzB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MDAsMHgyMiwgMHhGNywweDA1LAorMHg3NiwweEY0LCAweEY3LDB4MDUsIDB4NzYsMHhGOCwgMHhGMCwweDA1LCAweDc2LDB4RkMsIDB4RjAsMHgwNSwgMHg3NywweDAwLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsIDB4NzYsMHhGNCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgyMiwgMHhFNiwweDAxLCAweDFFLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg4NCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjcsMHgwNiwgMHg3NywweDA0LCAweDk3LDB4MTMsCisweEZGLDB4RkMsIDB4RjcsMHgwNiwgMHg3NiwweDY4LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTQsMHhGNCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LAorMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsCisweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY2LDB4ODYsIDB4NzgsMHgxMCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4NiwKKzB4NzgsMHhBNCwgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTUsMHg0OCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweEY2LDB4ODYsIDB4MUYsMHhCQywgMHg5NiwweDkzLCAweEZGLDB4RkMsIDB4RjYsMHg4MiwgMHgwMCwweDE0LCAweDk2LDB4OTMsCisweEZGLDB4RkMsIDB4RjYsMHg4NiwgMHg3OCwweDEwLCAweDk2LDB4OTMsIDB4RkYsMHhGQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMCwKKzB4MTYsMHgxQywgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4RjAsMHgwNSwgMHg3OCwweDlDLCAweDkwLDB4MDIsIDB4RkYsMHgzNCwgMHhGNywweDAyLAorMHg3RiwweEZGLCAweEY3LDB4MDUsIDB4NzgsMHhBMCwgMHg5NywweDAyLCAweEZGLDB4MzAsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4RjYsMHgwNCwgMHg3OCwweDlDLCAweDg3LDB4MTYsIDB4MDAsMHgwMCwgMHg4NCwweDk2LAorMHgwMCwweDA4LCAweEY1LDB4ODYsIDB4NzcsMHgxMCwgMHg4NywweDNBLCAweDAwLDB4MDgsIDB4RjYsMHg4NiwgMHgyMSwweDhDLCAweDc1LDB4MzksCisweDAwLDB4MDQsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweEE3LDB4M0EsIDB4NjgsMHgwMiwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4QzYsMHhBOCwKKzB4NTgsMHgwMCwgMHg4NCwweDE2LCAweDAwLDB4MDQsIDB4QzYsMHgzMCwgMHg3NSwweDgwLCAweDk0LDB4MzYsIDB4MDAsMHgwNCwgMHhCNCwweEFBLAorMHg1OCwweDAyLCAweDg3LDB4MzYsIDB4MDAsMHgwOCwgMHhGNiwweDA1LCAweDc4LDB4OUMsIDB4MDcsMHgzOCwgMHgwMCwweDAxLCAweEU2LDB4MDEsCisweDFGLDB4MkQsIDB4OTcsMHgzNiwgMHgwMCwweDA4LCAweDg3LDB4MDIsIDB4RkYsMHgzMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzQSwKKzB4NEEsMHgwMCwgMHhFRSwweDAxLCAweDFGLDB4MzUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY0LDB4ODUsIDB4NzgsMHhBMCwgMHg5NCwweDgyLAorMHhGRiwweDMwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDBDLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgyRSwgMHgwMCwweDA4LCAweEY2LDB4ODYsIDB4MjEsMHg4QywgMHg3NywweDM5LAorMHgwMCwweDAyLCAweEE3LDB4M0EsIDB4NjgsMHgwMiwgMHhGNiwweDA0LCAweDc4LDB4OUMsIDB4QzcsMHgwNCwgMHg3NiwweDAwLCAweDg2LDB4QUUsCisweDAwLDB4MDgsIDB4QzYsMHgzMCwgMHg3NCwweDAwLCAweEY3LDB4MDYsIDB4NzcsMHgxMCwgMHhGNiwweDA1LCAweDc4LDB4OUMsIDB4NzYsMHhCNSwKKzB4MDAsMHgwNCwgMHhDNiwweEI0LCAweDcwLDB4MDAsIDB4ODcsMHgzNiwgMHgwMCwweDA4LCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHgwNywweDM4LAorMHgwMCwweDAxLCAweEU2LDB4MDEsIDB4MUYsMHhBOCwgMHg5NywweDM2LCAweDAwLDB4MDgsIDB4RjcsMHgwMiwgMHg3RiwweEZGLCAweEY3LDB4MDUsCisweDc4LDB4QTAsIDB4OTcsMHgwMiwgMHhGRiwweDMwLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwNCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweDIyLDB4MTAsIDB4MDAsMHgwOCwgMHhGNywweDA0LCAweDc4LDB4OUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsCisweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgyMCwweEQxLCAweEY2LDB4MDIsIDB4N0YsMHhGRiwgMHg5NiwweDE2LCAweEZGLDB4RjQsIDB4RjYsMHg4NCwKKzB4MkQsMHg0MCwgMHhGNiwweDA2LCAweDc3LDB4MTAsIDB4MjYsMHhCNCwgMHgwMCwweDAxLCAweDc3LDB4MzUsIDB4MDAsMHgwNCwgMHhDNCwweEI4LAorMHg2MCwweDAwLCAweEMzLDB4MzgsIDB4MDAsMHgwMCwgMHg3NCwweDM1LCAweDAwLDB4MDIsIDB4RjYsMHgwNiwgMHg3NywweDEwLCAweEMwLDB4MjYsCisweDYyLDB4MDAsIDB4RUMsMHgwMSwgMHgyMCwweEMxLCAweEY2LDB4MDYsIDB4MjEsMHg4QywgMHhGMywweDg0LCAweDc4LDB4OUMsIDB4QTcsMHgyMiwKKzB4NjAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgxRSwgMHg3NCwweDAwLCAweEU2LDB4MDEsIDB4MjAsMHhCMSwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg2LDB4QTYsIDB4MDAsMHgwMCwgMHhGNywweDA0LCAweDc4LDB4QTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM2LDB4QjQsCisweDcyLDB4MDAsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEVFLDB4MDEsIDB4MjAsMHg5OCwgMHg5NiwweEE2LCAweDAwLDB4MDAsIDB4RjcsMHgwNCwKKzB4MkQsMHgzOCwgMHhGNiwweDA2LCAweDc3LDB4MTAsIDB4QzUsMHgxOCwgMHg2MCwweDAwLCAweEY2LDB4ODYsIDB4MkMsMHgyOCwgMHg4NiwweDJBLAorMHgwMCwweDA0LCAweDA1LDB4QjgsIDB4MDAsMHgwMSwgMHhGNSwweDg1LCAweDJELDB4MzgsIDB4NzcsMHgzOSwgMHgwMCwweDAyLCAweDIwLDB4MkUsCisweDAwLDB4NDQsIDB4RTYsMHgwMSwgMHgyMCwweDcwLCAweEI2LDB4M0EsIDB4NjgsMHgwMiwgMHhGMCwweDA1LCAweDJELDB4MzgsIDB4ODYsMHgyQSwKKzB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTYsMHgyQSwgMHgwMCwweDBDLCAweEY2LDB4MDYsIDB4MjEsMHg4QywgMHhBNywweDIyLAorMHg2MCwweDAyLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNywweDA0LCAweDc2LDB4MDAsIDB4QzcsMHgxQywgMHg3NCwweDAwLCAweEUwLDB4MDEsCisweDIwLDB4QjAsIDB4RjcsMHgwNSwgMHg3OCwweDlDLCAweDg2LDB4MTYsIDB4RkYsMHhGNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwKKzB4NjIsMHgwMCwgMHhFQywweDAxLCAweDIwLDB4QjAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk2LDB4OTYsIDB4RkYsMHhGNCwgMHgyNCwweEE0LAorMHgwMCwweDEwLCAweDIzLDB4MTgsIDB4MDAsMHgxMCwgMHhFMCwweDAxLCAweDFGLDB4RkMsIDB4MjQsMHgyMCwgMHgwMCwweDA0LCAweDg2LDB4MTYsCisweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEY2LDB4MDUsIDB4NzgsMHhBMCwgMHg5NiwweDAyLCAweEZGLDB4MzAsIDB4ODcsMHg5NiwKKzB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODcsMHgxNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgzQSwgMHgwMCwweDA4LCAweEY2LDB4ODYsIDB4NzcsMHgxMCwgMHg3NywweDM5LCAweDAwLDB4MDQsIDB4QzcsMHgzOCwKKzB4NjgsMHgwMCwgMHg4NiwweEJBLCAweDAwLDB4MEMsIDB4ODcsMHgzQSwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweDQ0LDB4MEMsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDQsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwKKzB4MDAsMHgwOCwgMHhGNywweDAyLCAweDAwLDB4MEYsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEVDLDB4MDEsIDB4MjEsMHg1RCwgMHhGNiwweDg2LAorMHg3NywweDE4LCAweDkwLDB4MzYsIDB4MDAsMHgwMCwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4QzYsMHgwNCwgMHgwMCwweDAwLCAweEMwLDB4M0EsCisweDYyLDB4MDAsIDB4RTYsMHgwMSwgMHgyMSwweDQ0LCAweDA2LDB4QjQsIDB4MDAsMHgxMCwgMHhGNiwweDA2LCAweDc4LDB4QTQsIDB4OTYsMHgxMywKKzB4RkYsMHhGQywgMHhGNiwweDA2LCAweDc4LDB4MTAsIDB4OTYsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLAorMHgxNCwweEY0LCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsCisweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMiwgMHgwMCwweDAwLCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDA4LCAweDAwLDB4MDAsIDB4MDAsMHgxMCwgMHgwMCwweDAwLAorMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHg0MCwgMHgwMCwweDAwLCAweDAwLDB4ODAsIDB4MDAsMHgwMCwgMHgwMSwweDAwLCAweDAwLDB4MDAsCisweDAyLDB4MDAsIDB4MDAsMHgwMCwgMHgwNCwweDAwLCAweDAwLDB4MDAsIDB4MDgsMHgwMCwgMHgwMCwweDAwLCAweDEwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MjAsMHgwMCwgMHgwMCwweDAwLCAweDQwLDB4MDAsIDB4MDAsMHgwMCwgMHg4MCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHhGNywweDA2LCAweDc4LDB4QjAsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDYsCisweDc5LDB4Q0MsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAwLCAweDE1LDB4NDgsIDB4OTcsMHg5MywKKzB4RkYsMHhGQywgMHhGNywweDA2LCAweDIyLDB4MkMsIDB4OTcsMHgxMywgMHhGRiwweEZDLCAweEY3LDB4MDIsIDB4MDAsMHgxNSwgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzgsMHhCMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE2LDB4MUMsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwKKzB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLAorMHgwMCwweDA4LCAweEY2LDB4ODQsIDB4NkYsMHg0NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODcsMHgzNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAyLCAweEU2LDB4MDEsIDB4MjIsMHg3MCwgMHhGNiwweDAyLCAweDAwLDB4MDAsIDB4ODcsMHgzNiwKKzB4MEUsMHhGNCwgMHg4NiwweEI2LCAweDBFLDB4RjgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4M0EsIDB4NkEsMHgwMCwgMHg0NywweDBDLAorMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDIyLDB4NzgsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsCisweDAwLDB4MDEsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjIsMHg5NCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RjcsMHgwNCwKKzB4MzIsMHhFOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzQSwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjIsMHhCMSwgMHhGNSwweDgyLAorMHgwMywweEU4LCAweDBGLDB4ODEsIDB4NDAsMHgwMCwgMHhGNywweDA0LCAweDc5LDB4QzgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDEsIDB4RjcsMHgwNSwgMHg3OSwweEM4LCAweEY3LDB4MDQsIDB4NzksMHhDOCwgMHhGNSwweDgyLCAweDAzLDB4RTgsIDB4OTUsMHg5MywKKzB4RkYsMHhGQywgMHhGNSwweDgyLCAweDAwLDB4MTUsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweEY1LDB4ODYsIDB4NzksMHhDQywgMHg5NSwweDkzLAorMHhGRiwweEZDLCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhFMCwweDAxLCAweDFFLDB4QzAsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweDg3LDB4OTYsCisweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDYsIDB4NzksMHhDQywgMHg5NywweDEzLAorMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzgsMHhCMCwgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsCisweDE0LDB4RjQsIDB4OTcsMHg5MywgMHhGRiwweEZDLCAweEY3LDB4MDYsIDB4NzksMHhDQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4RjcsMHgwNiwKKzB4NzksMHgzQywgMHg5NywweDEzLCAweEZGLDB4RkMsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDAsIDB4MTQsMHhGNCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMiwweDEwLCAweDAwLDB4MDQsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDBDLCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg2LDB4QUUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsCisweDIzLDB4ODQsIDB4MjcsMHgxNCwgMHgwMCwweDBDLCAweDg3LDB4MkUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MDcsMHgzOCwKKzB4MDAsMHgwMSwgMHg5NywweDJFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDA0LCAweEUwLDB4MDEsIDB4MjQsMHgzNCwgMHg5NiwweDk2LAorMHhGRiwweEY0LCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MTMsCisweEZGLDB4RkMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhFQywgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4RTAsMHgwMSwKKzB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgMHhGRiwweEVDLCAweDIwLDB4MjIsIDB4MDAsMHgwMCwgMHhFNiwweDAxLAorMHgyNCwweDM0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweEFFLCAweDAwLDB4MDQsIDB4ODYsMHgxNiwgMHhGRiwweEY0LCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg2MiwweDAwLCAweEVFLDB4MDEsIDB4MjQsMHgyMSwgMHg3NywweDM1LCAweDAwLDB4MDEsIDB4QzcsMHgzOCwKKzB4NjgsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzYsMHhCOCwgMHg1OCwweDAwLCAweDc3LDB4MzEsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg2MCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDM4LCAweDU4LDB4MDAsIDB4ODUsMHgzNiwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTUsMHgzNiwgMHgwMCwweDBDLCAweDg1LDB4MzYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgzNiwKKzB4MDAsMHgxMCwgMHg4NSwweDM2LCAweDAwLDB4MDgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MzYsIDB4MDAsMHgxNCwgMHgyNiwweEI0LAorMHgwMCwweDBDLCAweEMwLDB4MzYsIDB4NzIsMHgwMCwgMHhFRSwweDAxLCAweDIzLDB4RUMsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDg3LDB4MkUsCisweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsIDB4MDAsMHgwMSwgMHg5NywweDJFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwKKzB4MDAsMHgwNCwgMHg4NiwweDk2LCAweEZGLDB4RjQsIDB4ODUsMHgxNiwgMHgwMCwweDA0LCAweDc3LDB4MzUsIDB4MDAsMHgwMSwgMHhDNywweDM4LAorMHg2OCwweDAwLCAweDc3LDB4MzksIDB4MDAsMHgwMiwgMHhDNywweDJDLCAweDcwLDB4MDAsIDB4ODUsMHgyQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4OTUsMHgzQSwgMHgwMCwweDBDLCAweDg1LDB4MTYsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODUsMHgyQSwKKzB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTUsMHgzQSwgMHgwMCwweDEwLCAweDg1LDB4MTYsIDB4MDAsMHgwOCwgMHhGNCwweDAyLAorMHgwMCwweDAxLCAweDk1LDB4M0EsIDB4MDAsMHgxNCwgMHg5NiwweEFFLCAweDAwLDB4MDgsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsCisweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDBDLCAweDAxLDB4M0MsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywKKzB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4MjIsMHgxMCwgMHgwMCwweDBDLCAweDg1LDB4OTYsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHgwMCwweDAxLCAweDg0LDB4MkUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MjAsMHgyMiwgMHgwMCwweDAwLCAweEU2LDB4MDEsCisweDI1LDB4NTUsIDB4MjcsMHgxNCwgMHgwMCwweDBDLCAweDk3LDB4MTMsIDB4RkYsMHhGQywgMHg4NSwweDE2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NSwweDEzLCAweEZGLDB4RkMsIDB4OTUsMHg5MywgMHhGRiwweEZDLCAweDk1LDB4OTYsIDB4RkYsMHhFQywgMHgwNywweDg4LAorMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjUsMHg2OCwgMHg5NywweDkzLCAweEZGLDB4RkMsIDB4ODUsMHg5NiwgMHhGRiwweEVDLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgyNSwweDU1LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NiwweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RUUsMHgwMSwgMHgyNSwweDQ1LCAweDc3LDB4MzEsIDB4MDAsMHgwMSwgMHhDNiwweEFDLAorMHgwMCwweDAwLCAweEM3LDB4MzgsIDB4NjAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4QzcsMHgzOCwgMHg1OCwweDAwLCAweDg1LDB4MzYsCisweDAwLDB4MTgsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDk1LDB4MzYsIDB4MDAsMHgwQywgMHg4NSwweDM2LCAweDAwLDB4MUMsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg5NSwweDM2LCAweDAwLDB4MTAsIDB4ODUsMHgzNiwgMHgwMCwweDIwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5NSwweDM2LAorMHgwMCwweDE0LCAweDA2LDB4QjQsIDB4MDAsMHgwQywgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RUMsMHgwMSwgMHgyNSwweDExLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4ODcsMHgyRSwgMHgwMCwweDA0LCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDEsIDB4OTcsMHgyRSwKKzB4MDAsMHgwNCwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwOCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweDIyLDB4MTAsCisweDAwLDB4MDgsIDB4ODMsMHg5NiwgMHgwMCwweDA0LCAweDgzLDB4MTYsIDB4MDAsMHgwMCwgMHhDNSwweDAwLCAweDAwLDB4MDAsIDB4ODQsMHgxQSwKKzB4MDAsMHgwNCwgMHhDNCwweEE4LCAweDAwLDB4MDAsIDB4OTQsMHgxNiwgMHhGRiwweEY0LCAweEMwLDB4MjYsIDB4NDIsMHgwMCwgMHhFNiwweDAxLAorMHgyNiwweEQxLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4MywweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MkEsCisweDMyLDB4MDAsIDB4RTYsMHgwMSwgMHgyNiwweEQxLCAweEM3LDB4MjAsIDB4NEEsMHgwMCwgMHg5NSwweDE2LCAweEZGLDB4RjQsIDB4NzYsMHhCOCwKKzB4RkYsMHhFMSwgMHhDNywweDM4LCAweDY4LDB4MDAsIDB4NzcsMHgzOSwgMHhGRiwweEZGLCAweEM1LDB4MjQsIDB4NzAsMHgwMCwgMHg3NywweDI5LAorMHgwMCwweDAxLCAweEM3LDB4MzgsIDB4NTAsMHgwMCwgMHg3NywweDM5LCAweDAwLDB4MDIsIDB4ODMsMHgxNiwgMHgwMCwweDAwLCAweDg2LDB4OUUsCisweDAwLDB4MDAsIDB4QzUsMHhCOCwgMHgzMCwweDAwLCAweDA1LDB4QUMsIDB4MDAsMHgwQywgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4QzYsMHgwMCwKKzB4MDAsMHgwMCwgMHhDMCwweDM2LCAweDcyLDB4MDAsIDB4RTYsMHgwMSwgMHgyNiwweDEwLCAweDIwLDB4MzIsIDB4MDAsMHgwMCwgMHg4NiwweDlFLAorMHgwMCwweDA0LCAweDg3LDB4MkUsIDB4MDAsMHgwNCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzAsMHgzNiwgMHg3MiwweDAwLCAweEU2LDB4MDEsCisweDI2LDB4MTAsIDB4MjAsMHgzMiwgMHgwMCwweDAwLCAweEY2LDB4MDIsIDB4MDAsMHgwMSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwKKzB4MjYsMHgyNSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4QzcsMHgwMCwgMHgwMCwweDAwLCAweEUwLDB4MDEsIDB4MjYsMHg3OCwgMHgyMCwweDNBLAorMHgwMCwweDAwLCAweDg2LDB4OUUsIDB4MDAsMHgwMCwgMHg4NywweDJFLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEMwLDB4MzYsCisweDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgyNiwweDVDLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhFNiwweDAxLCAweDI2LDB4NjQsIDB4MjAsMHgzMiwKKzB4MDAsMHgwMCwgMHg4NiwweDlFLCAweDAwLDB4MDQsIDB4ODcsMHgyRSwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDMCwweDM2LAorMHg3MiwweDAwLCAweEUyLDB4MDEsIDB4MjYsMHg2NSwgMHgyMCwweDMyLCAweDAwLDB4MDAsIDB4RjYsMHgwMiwgMHgwMCwweDAxLCAweDIwLDB4MzIsCisweDAwLDB4MDAsIDB4NDcsMHgwNCwgMHhGRiwweEZGLCAweEU2LDB4MDEsIDB4MjYsMHg3OSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RjcsMHgwMiwKKzB4MDAsMHgwMSwgMHgyMCwweDNBLCAweDAwLDB4MDAsIDB4RTYsMHgwMSwgMHgyNiwweEIxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFRSwweDAxLAorMHgyNiwweEEwLCAweDIwLDB4M0EsIDB4MDAsMHgwMSwgMHg0MywweDA0LCAweEZGLDB4RkYsIDB4QzAsMHgzQSwgMHgzMiwweDAwLCAweEU2LDB4MDEsCisweDI2LDB4QzksIDB4QzAsMHgyNiwgMHg0MiwweDAwLCAweEUwLDB4MDEsIDB4MjUsMHg5MCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4RTYsMHgwMSwKKzB4MjYsMHhDMSwgMHhDMCwweDI2LCAweDQyLDB4MDAsIDB4RTAsMHgwMSwgMHgyNSwweDkwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4MywweDE2LAorMHgwMCwweDA4LCAweEY0LDB4MDIsIDB4MDAsMHgwMSwgMHhFMCwweDAxLCAweDI2LDB4RTAsIDB4OTUsMHgxQSwgMHgwMCwweDAwLCAweEUwLDB4MDEsCisweDI1LDB4OEMsIDB4QzQsMHhBOCwgMHgwMCwweDAwLCAweEUwLDB4MDEsIDB4MjUsMHg4QywgMHhDNCwweDI4LCAweDAwLDB4MDAsIDB4ODMsMHgxNiwKKzB4MDAsMHgwOCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTQsMHgxQSwgMHgwMCwweDAwLCAweEM0LDB4MDAsIDB4MDAsMHgwMCwgMHg4NywweDk2LAorMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MEMsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODUsMHg5NiwKKzB4MDAsMHgwNCwgMHg4NCwweDE2LCAweDAwLDB4MDAsIDB4ODQsMHg5NiwgMHgwMCwweDA4LCAweEY3LDB4MDIsIDB4MDAsMHgwMywgMHhDNiwweEEwLAorMHg0RCwweDgwLCAweEM2LDB4QjYsIDB4NzQsMHgwMCwgMHhFNiwweDAxLCAweDI3LDB4NzEsIDB4QzYsMHgyMCwgMHgwMCwweDAwLCAweDIwLDB4MzYsCisweDAwLDB4MDIsIDB4RTYsMHgwMSwgMHgyNywweEEwLCAweEM1LDB4MjAsIDB4NDgsMHgwMCwgMHhDNywweDIwLCAweDQ4LDB4MDAsIDB4MjcsMHgzOCwKKzB4MDAsMHgwMiwgMHhDMCwweDIyLCAweDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgyNywweDlDLCAweEM1LDB4MzgsIDB4MDAsMHgwMCwgMHg4NywweDJFLAorMHgwMCwweDAwLCAweDc2LDB4QUQsIDB4MDAsMHgxRSwgMHg3NiwweEI0LCAweEZGLDB4RTUsIDB4QzcsMHgzOCwgMHg2RiwweEMwLCAweDc3LDB4MzgsCisweEZGLDB4RjAsIDB4RjcsMHgzMywgMHgyOCwweDAwLCAweDA2LDB4MzAsIDB4MDAsMHgwMiwgMHhDMCwweDMyLCAweDUyLDB4MDAsIDB4RTIsMHgwMSwKKzB4MjcsMHg0MSwgMHgwNSwweEFDLCAweDAwLDB4MDIsIDB4RTAsMHgwMSwgMHgyNywweEEwLCAweEM1LDB4MjAsIDB4NDgsMHgwMCwgMHhDNywweDIwLAorMHg0OCwweDAwLCAweDI3LDB4MzgsIDB4MDAsMHgwNCwgMHhDMCwweDIyLCAweDcyLDB4MDAsIDB4RTIsMHgwMSwgMHgyNywweEEwLCAweEM1LDB4MjAsCisweDQ4LDB4MDAsIDB4ODMsMHhBRCwgMHgwMCwweDA0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MywweEIxLCAweDAwLDB4MDQsIDB4QzAsMHgzMiwKKzB4NzIsMHgwMCwgMHhFMiwweDAxLCAweDI3LDB4ODUsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM1LDB4MjAsIDB4NDgsMHgwMCwgMHhDMCwweDMyLAorMHg1MiwweDAwLCAweEU0LDB4MDEsIDB4MjcsMHhENSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4ODYsMHhBRSwgMHgwMCwweDAwLCAweDc3LDB4MkQsCisweDAwLDB4MUUsIDB4NzcsMHgzOCwgMHhGRiwweEU1LCAweEM2LDB4QjQsIDB4NzcsMHhDMCwgMHg3NiwweEI1LCAweEZGLDB4RTgsIDB4RjYsMHhCMywKKzB4NjgsMHgwMCwgMHgwNiwweDMwLCAweDAwLDB4MDEsIDB4QzAsMHgzMiwgMHg1MiwweDAwLCAweEU0LDB4MDEsIDB4MjcsMHhBQywgMHgwNSwweEFDLAorMHgwMCwweDAxLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDBDLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDkyLDB4OTMsIDB4RkYsMHhGQywgMHgwMiwweDkwLCAweDAwLDB4MDgsIDB4ODQsMHgxNiwKKzB4MDAsMHgwMCwgMHg4NiwweDk2LCAweDAwLDB4MDQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweEM3LDB4MjIsIDB4NkQsMHg4MCwgMHhFNiwweDAxLAorMHgyOCwweDEwLCAweDIwLDB4MzYsIDB4MDAsMHgwMCwgMHhFMCwweDAxLCAweDI4LDB4NzQsIDB4QzQsMHgzOCwgMHgwMCwweDAwLCAweEY3LDB4MDIsCisweDAwLDB4MDEsIDB4RUUsMHgwMSwgMHgyOCwweDQxLCAweEY2LDB4MDIsIDB4MDAsMHgwMCwgMHg3NiwweEI1LCAweDAwLDB4MDEsIDB4MjAsMHgzNiwKKzB4MDAsMHgwMCwgMHhFRSwweDAxLCAweDI4LDB4MUMsIDB4NzcsMHgzOSwgMHgwMCwweDAxLCAweEUwLDB4MDEsIDB4MjgsMHg0NCwgMHgyMCwweDIyLAorMHgwMCwweDAwLCAweDc0LDB4MjEsIDB4MDAsMHgwMSwgMHg3NywweDM4LCAweEZGLDB4RkYsIDB4MDYsMHgzMCwgMHgwMCwweDAxLCAweDIwLDB4MjIsCisweDAwLDB4MDAsIDB4RUUsMHgwMSwgMHgyOCwweDM0LCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDI4LDB4NzEsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHhDMCwweDIyLCAweDZBLDB4MDAsIDB4RTQsMHgwMSwgMHgyOCwweDY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHhDNCwweDIwLAorMHg2QSwweDAwLCAweDc3LDB4M0EsIDB4RkYsMHhGRiwgMHhFNiwweDAxLCAweDI4LDB4NTQsIDB4NzYsMHhCNCwgMHhGRiwweEZGLCAweEQ0LDB4MjAsCisweDA3LDB4NjIsIDB4ODcsMHg5NiwgMHhGRiwweEZDLCAweDgyLDB4OTYsIDB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDgsIDB4MDEsMHgzQywKKzB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTIsMHg5MywgMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLAorMHgwMCwweDA0LCAweEUwLDB4MDEsIDB4MjgsMHhDQywgMHhGNywweDA2LCAweDI5LDB4REMsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsCisweDAwLDB4MDEsIDB4MjAsMHgzNiwgMHgwMCwweDAwLCAweEU2LDB4MDEsIDB4MjgsMHhDOSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxNiwKKzB4RkYsMHhGNCwgMHgwNywweDg4LCAweDAwLDB4MDgsIDB4QzEsMHgzNCwgMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDE2LAorMHhGRiwweEY0LCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyNywweDM4LCAweDAwLDB4MDQsIDB4RjYsMHgwNiwgMHgyOSwweEUwLCAweEMwLDB4M0EsCisweDYyLDB4MDAsIDB4RTQsMHgwMSwgMHgyOCwweDlELCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwKKzB4RkYsMHhGOCwgMHgwMiwweDE0LCAweDAwLDB4MDAsIDB4MDEsMHgzQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLAorMHhGRiwweEZDLCAweDAyLDB4OTAsIDB4MDAsMHgwOCwgMHgyMiwweDEwLCAweDAwLDB4MDQsIDB4RTAsMHgwMSwgMHgyOSwweDM0LCAweEY3LDB4MDYsCisweDI5LDB4OTgsIDB4ODYsMHhCQSwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMCwweDM2LCAweDAwLDB4MDAsIDB4RTYsMHgwMSwKKzB4MjksMHgzMSwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4OTcsMHgxNiwgMHhGRiwweEY0LCAweDA3LDB4ODgsIDB4MDAsMHgwOCwgMHhDMSwweDM0LAorMHgwMCwweDAwLCAweDk3LDB4OTMsIDB4RkYsMHhGQywgMHg4NywweDE2LCAweEZGLDB4RjQsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDA3LDB4MzgsCisweDAwLDB4MDQsIDB4RjYsMHgwNiwgMHgyOSwweEUwLCAweEMwLDB4M0EsIDB4NjIsMHgwMCwgMHhFNCwweDAxLCAweDI5LDB4MDQsIDB4MDAsMHgwMCwKKzB4MDAsMHgwMSwgMHg4NywweDk2LCAweEZGLDB4RkMsIDB4ODIsMHg5NiwgMHhGRiwweEY4LCAweDAyLDB4MTQsIDB4MDAsMHgwMCwgMHgwMSwweDNDLAorMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHg5MiwweDkzLCAweEZGLDB4RkMsIDB4MDIsMHg5MCwgMHgwMCwweDA4LCAweEY3LDB4MDQsCisweDdCLDB4NTAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDIwLDB4M0EsIDB4MDAsMHgwMCwgMHhFNiwweDAxLCAweDI5LDB4ODQsIDB4RjYsMHg4MiwKKzB4MDAsMHgwMSwgMHhGNiwweDg1LCAweDdCLDB4NTAsIDB4MDcsMHg4OCwgMHgwMCwweDA4LCAweEUwLDB4MDEsIDB4MjgsMHhGMCwgMHg5NywweDkzLAorMHhGRiwweEZDLCAweDg3LDB4OTYsIDB4RkYsMHhGQywgMHg4MiwweDk2LCAweEZGLDB4RjgsIDB4MDIsMHgxNCwgMHgwMCwweDAwLCAweDAxLDB4M0MsCisweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDAwLDB4MDAsIDB4MEIsMHg0QywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwKKzB4NDIsMHg4OCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHg1RSwweDUwLCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAwLAorMHhDNywweEE4LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgMHgwMCwweDAxLCAweDBCLDB4RDAsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsCisweDFDLDB4ODgsIDB4MDAsMHgwMCwgMHgwMCwweDAwLCAweDAwLDB4MDEsIDB4MUUsMHgxNCwgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwKIDB4MjEsMHgyQywgMHgwMCwweDAwLCAweDAwLDB4MDAsIDB4MDAsMHgwMSwgMHgyMiwweEU0LCAweDAwLDB4MDAsIDB4MDAsMHgwMCwgfSA7CiAKIAotLyogVGhpcyBpcyB0aGUgTEFOYWkgZGF0YSAqLyAKKy8qIFRoaXMgaXMgdGhlIExBTmFpIGRhdGEgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBsYW5haTRfZGF0YV9vZmYgPSAweDk0RjA7IC8qIGhhbGYtd29yZCBvZmZzZXQgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGxhbmFpNF9kYXRhWzIwNDcyXSBfX2luaXRkYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbXlyaV9zYnVzLmMgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwppbmRleCAxYjk2NWEyLi5hOTI1YmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYworKysgYi9kcml2ZXJzL25ldC9teXJpX3NidXMuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJbXAtPnR4X29sZCA9IGVudHJ5OwogfQogCi0vKiBEZXRlcm1pbmUgdGhlIHBhY2tldCdzIHByb3RvY29sIElELiBUaGUgcnVsZSBoZXJlIGlzIHRoYXQgd2UgCisvKiBEZXRlcm1pbmUgdGhlIHBhY2tldCdzIHByb3RvY29sIElELiBUaGUgcnVsZSBoZXJlIGlzIHRoYXQgd2UKICAqIGFzc3VtZSA4MDIuMyBpZiB0aGUgdHlwZSBmaWVsZCBpcyBzaG9ydCBlbm91Z2ggdG8gYmUgYSBsZW5ndGguCiAgKiBUaGlzIGlzIG5vcm1hbCBwcmFjdGljZSBhbmQgd29ya3MgZm9yIGFueSAnbm93IGluIHVzZScgcHJvdG9jb2wuCiAgKi8KQEAgLTM2OCwxMSArMzY4LDExIEBACiB7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCXVuc2lnbmVkIGNoYXIgKnJhd3A7Ci0JCisKIAlza2ItPm1hYy5yYXcgPSAoKCh1bnNpZ25lZCBjaGFyICopc2tiLT5kYXRhKSArIE1ZUklfUEFEX0xFTik7CiAJc2tiX3B1bGwoc2tiLCBkZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAJZXRoID0gZXRoX2hkcihza2IpOwotCQorCiAjaWZkZWYgREVCVUdfSEVBREVSCiAJREhEUigoIm15cmlfdHlwZV90cmFuczogIikpOwogCWR1bXBfZWhkcihldGgpOwpAQCAtMzg2LDEyICszODYsMTIgQEAKIAkJaWYgKG1lbWNtcChldGgtPmhfZGVzdCwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQogCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9PVEhFUkhPU1Q7CiAJfQotCQorCiAJaWYgKG50b2hzKGV0aC0+aF9wcm90bykgPj0gMTUzNikKIAkJcmV0dXJuIGV0aC0+aF9wcm90bzsKLQkJCisKIAlyYXdwID0gc2tiLT5kYXRhOwotCQorCiAJLyogVGhpcyBpcyBhIG1hZ2ljIGhhY2sgdG8gc3BvdCBJUFggcGFja2V0cy4gT2xkZXIgTm92ZWxsIGJyZWFrcwogCSAqIHRoZSBwcm90b2NvbCBkZXNpZ24gYW5kIHJ1bnMgSVBYIG92ZXIgODAyLjMgd2l0aG91dCBhbiA4MDIuMiBMTEMKIAkgKiBsYXllci4gV2UgbG9vayBmb3IgRkZGRiB3aGljaCBpc24ndCBhIHVzZWQgODAyLjIgU1NBUC9EU0FQLiBUaGlzCkBAIC0zOTksNyArMzk5LDcgQEAKIAkgKi8KIAlpZiAoKih1bnNpZ25lZCBzaG9ydCAqKXJhd3AgPT0gMHhGRkZGKQogCQlyZXR1cm4gaHRvbnMoRVRIX1BfODAyXzMpOwotCQkKKwogCS8qIFJlYWwgODAyLjIgTExDICovCiAJcmV0dXJuIGh0b25zKEVUSF9QXzgwMl8yKTsKIH0KQEAgLTY3OCw3ICs2NzgsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiBDcmVhdGUgdGhlIE15cmlOZXQgTUFDIGhlYWRlciBmb3IgYW4gYXJiaXRyYXJ5IHByb3RvY29sIGxheWVyIAorLyogQ3JlYXRlIHRoZSBNeXJpTmV0IE1BQyBoZWFkZXIgZm9yIGFuIGFyYml0cmFyeSBwcm90b2NvbCBsYXllcgogICoKICAqIHNhZGRyPU5VTEwJbWVhbnMgdXNlIGRldmljZSBzb3VyY2UgYWRkcmVzcwogICogZGFkZHI9TlVMTAltZWFucyBsZWF2ZSBkZXN0aW5hdGlvbiBhZGRyZXNzIChlZyB1bnJlc29sdmVkIGFycCkKQEAgLTcwMSw3ICs3MDEsNyBAQAogCS8qIFNldCB0aGUgcHJvdG9jb2wgdHlwZS4gRm9yIGEgcGFja2V0IG9mIHR5cGUgRVRIX1BfODAyXzMgd2UgcHV0IHRoZSBsZW5ndGgKIAkgKiBpbiBoZXJlIGluc3RlYWQuIEl0IGlzIHVwIHRvIHRoZSA4MDIuMiBsYXllciB0byBjYXJyeSBwcm90b2NvbCBpbmZvcm1hdGlvbi4KIAkgKi8KLQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykgCisJaWYgKHR5cGUgIT0gRVRIX1BfODAyXzMpCiAJCWV0aC0+aF9wcm90byA9IGh0b25zKHR5cGUpOwogCWVsc2UKIAkJZXRoLT5oX3Byb3RvID0gaHRvbnMobGVuKTsKQEAgLTcxOSw3ICs3MTksNyBAQAogCQkJZXRoLT5oX2Rlc3RbaV0gPSAwOwogCQlyZXR1cm4oZGV2LT5oYXJkX2hlYWRlcl9sZW4pOwogCX0KLQkKKwogCWlmIChkYWRkcikgewogCQltZW1jcHkoZXRoLT5oX2Rlc3QsIGRhZGRyLCBkZXYtPmFkZHJfbGVuKTsKIAkJcmV0dXJuIGRldi0+aGFyZF9oZWFkZXJfbGVuOwpAQCAtNzU0LDE2ICs3NTQsMTYgQEAKICNlbmRpZgogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fREVCVUcgCi0JCSAgICAgICAiJXM6IHVuYWJsZSB0byByZXNvbHZlIHR5cGUgJVggYWRkcmVzc2VzLlxuIiwgCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAiJXM6IHVuYWJsZSB0byByZXNvbHZlIHR5cGUgJVggYWRkcmVzc2VzLlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgKGludClldGgtPmhfcHJvdG8pOwotCQkKKwogCQltZW1jcHkoZXRoLT5oX3NvdXJjZSwgZGV2LT5kZXZfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAJCXJldHVybiAwOwogCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gMDsJCisJcmV0dXJuIDA7CiB9CiAKIGludCBteXJpX2hlYWRlcl9jYWNoZShzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IGhoX2NhY2hlICpoaCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25hdHNlbWkuYyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwppbmRleCBkYjA0NzVhLi5kN2IyNDFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMKKysrIGIvZHJpdmVycy9uZXQvbmF0c2VtaS5jCkBAIC01NCw4ICs1NCw4IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkibmF0c2VtaSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMCIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIkp1bmUgMjcsIDIwMDYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIyLjEiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJTZXB0IDExLCAyMDA2IgogCiAjZGVmaW5lIFJYX09GRlNFVAkyCiAKQEAgLTE0Myw5ICsxNDMsOSBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGZ1bGxfZHVwbGV4LCBpbnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtdHUsICJEUDgzODF4IE1UVSAoYWxsIGJvYXJkcykiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEUDgzODF4IGRlZmF1bHQgZGVidWcgbGV2ZWwiKTsKLU1PRFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLCAKK01PRFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLAogCSJEUDgzODF4IGNvcHkgYnJlYWtwb2ludCBmb3IgY29weS1vbmx5LXRpbnktZnJhbWVzIik7Ci1NT0RVTEVfUEFSTV9ERVNDKG9wdGlvbnMsIAorTU9EVUxFX1BBUk1fREVTQyhvcHRpb25zLAogCSJEUDgzODF4OiBCaXRzIDAtMzogbWVkaWEgdHlwZSwgYml0IDE3OiBmdWxsIGR1cGxleCIpOwogTU9EVUxFX1BBUk1fREVTQyhmdWxsX2R1cGxleCwgIkRQODM4MXggZnVsbCBkdXBsZXggc2V0dGluZyhzKSAoMSkiKTsKIApAQCAtMjQ0LDcgKzI0NCw3IEBACiAJTUlJX0VOX1NDUk0JPSAweDAwMDQsCS8qIGVuYWJsZSBzY3JhbWJsZXIgKHRwKSAqLwogfTsKIAotIAorCiAvKiBhcnJheSBvZiBib2FyZCBkYXRhIGRpcmVjdGx5IGluZGV4ZWQgYnkgcGNpX3RibFt4XS5kcml2ZXJfZGF0YSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJY29uc3QgY2hhciAqbmFtZTsKQEAgLTQxNCw3ICs0MTQsNyBAQAogCVR4Q2FycmllcklnbgkJPSAweDgwMDAwMDAwCiB9OwogCi0vKiAKKy8qCiAgKiBUeCBDb25maWd1cmF0aW9uOgogICogLSAyNTYgYnl0ZSBETUEgYnVyc3QgbGVuZ3RoCiAgKiAtIGZpbGwgdGhyZXNob2xkIDUxMiBieXRlcyAoaS5lLiByZXN0YXJ0IERNQSB3aGVuIDUxMiBieXRlcyBhcmUgZnJlZSkKQEAgLTY0Nyw3ICs2NDcsNyBAQAogc3RhdGljIGludCBuZXRkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG5ldGRldl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqYnVmKTsKIHN0YXRpYyBpbnQgbmV0ZGV2X2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmJ1Zik7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKm5zX2lvYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNjcyLDcgKzY3Miw3IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBuc19pb2FkZHIoZGV2KTsKIAlpbnQgdGFyZ2V0ID0gMzE7CiAKLQkvKiAKKwkvKgogCSAqIFRoZSBpbnRlcm5hbCBwaHkgaXMgdmlzaWJsZSBvbiB0aGUgZXh0ZXJuYWwgbWlpIGJ1cy4gVGhlcmVmb3JlIHdlIG11c3QKIAkgKiBtb3ZlIGl0IGF3YXkgYmVmb3JlIHdlIGNhbiBzZW5kIGNvbW1hbmRzIHRvIGFuIGV4dGVybmFsIHBoeS4KIAkgKiBUaGVyZSBhcmUgdHdvIGFkZHJlc3NlcyB3ZSBtdXN0IGF2b2lkOgpAQCAtMTA5NSw3ICsxMDk1LDcgQEAKIAkJCXRtcCB8PSBCTUNSX1NQRUVEMTAwOwogCQlpZiAobnAtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKIAkJCXRtcCB8PSBCTUNSX0ZVTExEUExYOwotCQkvKiAKKwkJLyoKIAkJICogTm90ZTogdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gaW5mb3JtIHRoZSBsaW5rIHBhcnRuZXIKIAkJICogdGhhdCBvdXIgY2FwYWJpbGl0aWVzIGNoYW5nZWQuIFRoZSB1c2VyIGhhcyB0byB1bnBsdWcKIAkJICogYW5kIHJlcGx1ZyB0aGUgbmV0d29yayBjYWJsZSBhZnRlciBzb21lIGNoYW5nZXMsIGUuZy4KQEAgLTEyMzYsNyArMTIzNiw3IEBACiAJd3JpdGVsKGNmZywgaW9hZGRyICsgQ2hpcENvbmZpZyk7CiAJcmVhZGwoaW9hZGRyICsgQ2hpcENvbmZpZyk7CiAJdWRlbGF5KDEpOwotCQorCiAJLyogMikgcmVzZXQgdGhlIGludGVybmFsIHBoeTogKi8KIAlibWNyID0gcmVhZHcoaW9hZGRyK0Jhc2ljQ29udHJvbCsoTUlJX0JNQ1I8PDIpKTsKIAl3cml0ZWwoYm1jciB8IEJNQ1JfUkVTRVQsIGlvYWRkcitCYXNpY0NvbnRyb2wrKE1JSV9CTUNSPDwyKSk7CkBAIC0xMjc2LDcgKzEyNzYsNyBAQAogCiAJLyogU3dpdGNoIHRvIGV4dGVybmFsIHBoeSAqLwogCWRpZF9zd2l0Y2ggPSBzd2l0Y2hfcG9ydF9leHRlcm5hbChkZXYpOwotCQkKKwogCS8qIFNjYW4gdGhlIHBvc3NpYmxlIHBoeSBhZGRyZXNzZXM6CiAJICoKIAkgKiBQSFkgYWRkcmVzcyAwIG1lYW5zIHRoYXQgdGhlIHBoeSBpcyBpbiBpc29sYXRlIG1vZGUuIE5vdCB5ZXQKQEAgLTE1NzMsNyArMTU3Myw3IEBACiAJdm9pZCBfX2lvbWVtICogaW9hZGRyID0gbnNfaW9hZGRyKGRldik7CiAJaW50IGR1cGxleDsKIAl1MTYgYm1zcjsKLSAgICAgICAKKwogCS8qIFRoZSBsaW5rIHN0YXR1cyBmaWVsZCBpcyBsYXRjaGVkOiBpdCByZW1haW5zIGxvdyBhZnRlciBhIHRlbXBvcmFyeQogCSAqIGxpbmsgZmFpbHVyZSB1bnRpbCBpdCdzIHJlYWQuIFdlIG5lZWQgdGhlIGN1cnJlbnQgbGluayBzdGF0dXMsCiAJICogdGh1cyByZWFkIHR3aWNlLgpAQCAtMjA5Niw3ICsyMDk2LDcgQEAKIAogCWlmIChucC0+aGFuZHNfb2ZmKQogCQlyZXR1cm4gSVJRX05PTkU7Ci0JCisKIAkvKiBSZWFkaW5nIGF1dG9tYXRpY2FsbHkgYWNrbm93bGVkZ2VzLiAqLwogCW5wLT5pbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIEludHJTdGF0dXMpOwogCkBAIC0yMTA2LDcgKzIxMDYsNyBAQAogCQkgICAgICAgZGV2LT5uYW1lLCBucC0+aW50cl9zdGF0dXMsCiAJCSAgICAgICByZWFkbChpb2FkZHIgKyBJbnRyTWFzaykpOwogCi0JaWYgKCFucC0+aW50cl9zdGF0dXMpIAorCWlmICghbnAtPmludHJfc3RhdHVzKQogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlwcmVmZXRjaCgmbnAtPnJ4X3NrYnVmZltucC0+Y3VyX3J4ICUgUlhfUklOR19TSVpFXSk7CkBAIC0yMTQxLDEzICsyMTQxLDEzIEBACiAJCS8qIEFibm9ybWFsIGVycm9yIHN1bW1hcnkvdW5jb21tb24gZXZlbnRzIGhhbmRsZXJzLiAqLwogCQlpZiAobnAtPmludHJfc3RhdHVzICYgSW50ckFibm9ybWFsU3VtbWFyeSkKIAkJCW5ldGRldl9lcnJvcihkZXYsIG5wLT5pbnRyX3N0YXR1cyk7Ci0JCQorCiAJCWlmIChucC0+aW50cl9zdGF0dXMgJgogCQkgICAgKEludHJSeERvbmUgfCBJbnRyUnhJbnRyIHwgUnhTdGF0dXNGSUZPT3ZlciB8CiAJCSAgICAgSW50clJ4RXJyIHwgSW50clJ4T3ZlcnJ1bikpIHsKIAkJCW5ldGRldl9yeChkZXYsICZ3b3JrX2RvbmUsIHdvcmtfdG9fZG8pOwogCQl9Ci0JCQorCiAJCSpidWRnZXQgLT0gd29ya19kb25lOwogCQlkZXYtPnF1b3RhIC09IHdvcmtfZG9uZTsKIApAQCAtMjM4Nyw5ICsyMzg3LDYgQEAKIAl1MzIgcnhfbW9kZTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsgLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAotCQkJZGV2LT5uYW1lKTsKIAkJcnhfbW9kZSA9IFJ4RmlsdGVyRW5hYmxlIHwgQWNjZXB0QnJvYWRjYXN0CiAJCQl8IEFjY2VwdEFsbE11bHRpY2FzdCB8IEFjY2VwdEFsbFBoeXMgfCBBY2NlcHRNeVBoeXM7CiAJfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpCkBAIC0yNTc2LDcgKzI1NzMsNyBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IGdldF9kcnZpbmZvLAogCS5nZXRfcmVnc19sZW4gPSBnZXRfcmVnc19sZW4sCiAJLmdldF9lZXByb21fbGVuID0gZ2V0X2VlcHJvbV9sZW4sCkBAIC0yNzQ3LDcgKzI3NDQsNyBAQAogCSAqIHBoeSwgZXZlbiBpZiB0aGUgaW50ZXJuYWwgcGh5IGlzIHVzZWQuIFRoaXMgaXMgbmVjZXNzYXJ5CiAJICogdG8gd29yayBhcm91bmQgYSBkZWZpY2llbmN5IG9mIHRoZSBldGh0b29sIGludGVyZmFjZToKIAkgKiBJdCdzIG9ubHkgcG9zc2libGUgdG8gcXVlcnkgdGhlIHNldHRpbmdzIG9mIHRoZSBhY3RpdmUKLQkgKiBwb3J0LiBUaGVyZWZvcmUgCisJICogcG9ydC4gVGhlcmVmb3JlCiAJICogIyBldGh0b29sIC1zIGV0aFggcG9ydCBtaWkKIAkgKiBhY3R1YWxseSBzZW5kcyBhbiBpb2N0bCB0byBzd2l0Y2ggdG8gcG9ydCBtaWkgd2l0aCB0aGUKIAkgKiBzZXR0aW5ncyB0aGF0IGFyZSB1c2VkIGZvciB0aGUgY3VycmVudCBhY3RpdmUgcG9ydC4KQEAgLTMyNDYsNyArMzI0Myw3IEBACiAJcHJpbnRrKHZlcnNpb24pOwogI2VuZGlmCiAKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmbmF0c2VtaV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZuYXRzZW1pX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuYXRzZW1pX2V4aXRfbW9kICh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYyBiL2RyaXZlcnMvbmV0L25lLWg4MzAwLmMKaW5kZXggN2VhM2Q1OS4uZWI4OTNkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUtaDgzMDAuYworKysgYi9kcml2ZXJzL25ldC9uZS1oODMwMC5jCkBAIC01OTMsNyArNTkzLDcgQEAKIAlyZXR1cm47CiB9CiAKLQwKKwogI2lmZGVmIE1PRFVMRQogI2RlZmluZSBNQVhfTkVfQ0FSRFMJMQkvKiBNYXggbnVtYmVyIG9mIE5FIGNhcmRzIHBlciBtb2R1bGUgKi8KIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X25lW01BWF9ORV9DQVJEU107CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZS5jIGIvZHJpdmVycy9uZXQvbmUuYwppbmRleCA5NjNhMTFmLi43ODdhYTQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZS5jCisrKyBiL2RyaXZlcnMvbmV0L25lLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogc3RhdGljIHZvaWQgbmVfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGludCBjb3VudCwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBjb25zdCBpbnQgc3RhcnRfcGFnZSk7CiAKLQwKKwogLyogIFByb2JlIGZvciB2YXJpb3VzIG5vbi1zaGFyZWQtbWVtb3J5IGV0aGVyY2FyZHMuCiAKICAgIE5FeDAwMC1jbG9uZSBib2FyZHMgaGF2ZSBhIFN0YXRpb24gQWRkcmVzcyBQUk9NIChTQVBST00pIGluIHRoZSBwYWNrZXQKQEAgLTgwNyw3ICs4MDcsNyBAQAogCXJldHVybjsKIH0KIAotDAorCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIE1BWF9ORV9DQVJEUwk0CS8qIE1heCBudW1iZXIgb2YgTkUgY2FyZHMgcGVyIG1vZHVsZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfbmVbTUFYX05FX0NBUkRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMi5jIGIvZHJpdmVycy9uZXQvbmUyLmMKaW5kZXggZWViZjVmMC4uNWZjY2ZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmUyLmMKQEAgLTI4LDcgKzI4LDcgQEAKICAgIC0gYWRkZWQgc3VwcG9ydCBmb3IgQXJjbyBFbGVjdHJvbmljcyBBRS8yLWNhcmQgKGV4cGVyaW1lbnRhbCkKIAogICAgTW9uIFNlcCAxNCAwOTo1Mzo0MiBDRVQgMTk5OCAoRGF2aWQgV2VpbmVoYWxsKQotICAgLSBhZGRlZCBzdXBwb3J0IGZvciBDb21wZXggRU5FVC0xNk1DL1AgKGV4cGVyaW1lbnRhbCkgCisgICAtIGFkZGVkIHN1cHBvcnQgZm9yIENvbXBleCBFTkVULTE2TUMvUCAoZXhwZXJpbWVudGFsKQogCiAgICBUdWUgU2VwIDE1IDE2OjIxOjEyIENFVCAxOTk4IChEYXZpZCBXZWluZWhhbGwsIE1hZ251cyBKb25zc29uLCBUb21hcyBPZ3JlbikKICAgIC0gTWlzY2VsbGFuZW91cyBidWdmaXhlcwpAQCAtNDQsMTEgKzQ0LDExIEBACiAgICAtIFZlcnNpb24jIGJ1bXAKIAogICAgTW9uIE5vdiAxNiAxNToyODoyMyBDRVQgMTk5OCAoV2ltIER1bW9uKQotICAgLSBwYXNzICdkZXYnIGFzIGxhc3QgcGFyYW1ldGVyIG9mIHJlcXVlc3RfaXJxIGluIHN0ZWFkIG9mICdOVUxMJyAgIAorICAgLSBwYXNzICdkZXYnIGFzIGxhc3QgcGFyYW1ldGVyIG9mIHJlcXVlc3RfaXJxIGluIHN0ZWFkIG9mICdOVUxMJwogCiAgICBXZWQgRmViICA3IDIxOjI0OjAwIENFVCAyMDAxIChBbGZyZWQgQXJub2xkKQogICAgLSBhZGRlZCBzdXBwb3J0IGZvciB0aGUgRC1MaW5rIERFLTMyMENUCi0gICAKKwogICAgKiAgICBXQVJOSU5HCiAJLS0tLS0tLQogCVRoaXMgaXMgYWxwaGEtdGVzdCBzb2Z0d2FyZS4gIEl0IGlzIG5vdCBndWFyYW50ZWVkIHRvIHdvcmsuIEFzIGEKQEAgLTE1MCw5ICsxNTAsOSBAQAogCiAKIC8qCi0gKiBzcGVjaWFsIGNvZGUgdG8gcmVhZCB0aGUgREUtMzIwJ3MgTUFDIGFkZHJlc3MgRUVQUk9NLiAgSW4gY29udHJhc3QgdG8gYSAKKyAqIHNwZWNpYWwgY29kZSB0byByZWFkIHRoZSBERS0zMjAncyBNQUMgYWRkcmVzcyBFRVBST00uICBJbiBjb250cmFzdCB0byBhCiAgKiBzdGFuZGFyZCBORSBkZXNpZ24sIHRoaXMgaXMgYSBzZXJpYWwgRUVQUk9NICg5M0M0NikgdGhhdCBoYXMgdG8gYmUgcmVhZAotICogYml0IGJ5IGJpdC4gIFRoZSBFRVBST00gY290cm9sIHBvcnQgYXQgYmFzZSArIDB4MWUgaGFzIHRoZSBmb2xsb3dpbmcgCisgKiBiaXQgYnkgYml0LiAgVGhlIEVFUFJPTSBjb3Ryb2wgcG9ydCBhdCBiYXNlICsgMHgxZSBoYXMgdGhlIGZvbGxvd2luZwogICogbGF5b3V0OgogICoKICAqIEJpdCAwID0gRGF0YSBvdXQgKHJlYWQgZnJvbSBFRVBST00pCkBAIC0yMTgsNyArMjE4LDcgQEAKIHsKIAlpbnQgejsKIAl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwotIAorCiAJLyogcHVsbCB0aGUgQ1MgbGluZSBsb3cgZm9yIGEgbW9tZW50LiAgVGhpcyByZXNldHMgdGhlIEVFUFJPTS0KIAkgICBpbnRlcm5hbCBsb2dpYywgYW5kIG1ha2VzIGl0IHJlYWR5IGZvciBhIG5ldyBjb21tYW5kLiAqLwogCkBAIC0yNTMsMjMgKzI1MywyMyBAQAogCiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCi0JLyogRG8gbm90IGNoZWNrIGFueSBzdXBwbGllZCBpL28gbG9jYXRpb25zLiAKKwkvKiBEbyBub3QgY2hlY2sgYW55IHN1cHBsaWVkIGkvbyBsb2NhdGlvbnMuCiAJICAgUE9TIHJlZ2lzdGVycyB1c3VhbGx5IGRvbid0IGZhaWwgOikgKi8KIAotCS8qIE1DQSBjYXJkcyBoYXZlIFBPUyByZWdpc3RlcnMuICAKLQkgICBBdXRvZGV0ZWN0aW5nIE1DQSBjYXJkcyBpcyBleHRyZW1lbHkgc2ltcGxlLiAKKwkvKiBNQ0EgY2FyZHMgaGF2ZSBQT1MgcmVnaXN0ZXJzLgorCSAgIEF1dG9kZXRlY3RpbmcgTUNBIGNhcmRzIGlzIGV4dHJlbWVseSBzaW1wbGUuCiAJICAgSnVzdCBzZWFyY2ggZm9yIHRoZSBjYXJkLiAqLwogCiAJZm9yKGkgPSAwOyAobmUyX2FkYXB0ZXJzW2ldLm5hbWUgIT0gTlVMTCkgJiYgIWFkYXB0ZXJfZm91bmQ7IGkrKykgewotCQljdXJyZW50X21jYV9zbG90ID0gCisJCWN1cnJlbnRfbWNhX3Nsb3QgPQogCQkJbWNhX2ZpbmRfdW51c2VkX2FkYXB0ZXIobmUyX2FkYXB0ZXJzW2ldLmlkLCAwKTsKIAogCQlpZigoY3VycmVudF9tY2Ffc2xvdCAhPSBNQ0FfTk9URk9VTkQpICYmICFhZGFwdGVyX2ZvdW5kKSB7CiAJCQlpbnQgcmVzOwotCQkJbWNhX3NldF9hZGFwdGVyX25hbWUoY3VycmVudF9tY2Ffc2xvdCwgCisJCQltY2Ffc2V0X2FkYXB0ZXJfbmFtZShjdXJyZW50X21jYV9zbG90LAogCQkJCQluZTJfYWRhcHRlcnNbaV0ubmFtZSk7CiAJCQltY2FfbWFya19hc191c2VkKGN1cnJlbnRfbWNhX3Nsb3QpOwotCQkJCisKIAkJCXJlcyA9IG5lMl9wcm9iZTEoZGV2LCBjdXJyZW50X21jYV9zbG90KTsKIAkJCWlmIChyZXMpCiAJCQkJbWNhX21hcmtfYXNfdW51c2VkKGN1cnJlbnRfbWNhX3Nsb3QpOwpAQCAtMzA3LDcgKzMwNyw3IEBACiAKIAlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiVGhlIE5FLzIgRXRoZXJuZXQgQWRhcHRlclxuIiApOwogCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJEcml2ZXIgd3JpdHRlbiBieSBXaW0gRHVtb24gIik7Ci0JbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIjx3aW1waWVAa290bmV0Lm9yZz5cbiIpOyAKKwlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiPHdpbXBpZUBrb3RuZXQub3JnPlxuIik7CiAJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgIk1vZGlmaWVkIGJ5ICIpOwogCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJEYXZpZCBXZWluZWhhbGwgPHRhb0BhY2MudW11LnNlPlxuIik7CiAJbGVuICs9IHNwcmludGYoYnVmK2xlbiwgImFuZCBieSBNYWdudXMgSm9uc3NvbiA8YmlnZm9vdEBhY2MudW11LnNlPlxuIik7CkBAIC0zMTYsOCArMzE2LDggQEAKIAlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiSVJRICAgIDogJWRcbiIsIGRldi0+aXJxKTsKIAogI2RlZmluZSBIV19BRERSKGkpIGRldi0+ZGV2X2FkZHJbaV0KLQlsZW4gKz0gc3ByaW50ZihidWYrbGVuLCAiSFcgYWRkciA6ICV4OiV4OiV4OiV4OiV4OiV4XG4iLCAKLQkJCUhXX0FERFIoMCksIEhXX0FERFIoMSksIEhXX0FERFIoMiksIAorCWxlbiArPSBzcHJpbnRmKGJ1ZitsZW4sICJIVyBhZGRyIDogJXg6JXg6JXg6JXg6JXg6JXhcbiIsCisJCQlIV19BRERSKDApLCBIV19BRERSKDEpLCBIV19BRERSKDIpLAogCQkJSFdfQUREUigzKSwgSFdfQUREUig0KSwgSFdfQUREUig1KSApOwogI3VuZGVmIEhXX0FERFIKIApAQCAtMzcwLDcgKzM3MCw3IEBACiAKICNpZm5kZWYgQ1JZTldSX1dBWQogCS8qIFJlc2V0IHRoZSBjYXJkIHRoZSB3YXkgdGhleSBkbyBpdCBpbiB0aGUgQ3J5bndyIHBhY2tldCBkcml2ZXIgKi8KLQlmb3IgKGk9MDsgaTw4OyBpKyspIAorCWZvciAoaT0wOyBpPDg7IGkrKykKIAkJb3V0YigweDAsIGJhc2VfYWRkciArIE5FX1JFU0VUKTsKIAlpbmIoYmFzZV9hZGRyICsgTkVfUkVTRVQpOwogCW91dGIoMHgyMSwgYmFzZV9hZGRyICsgTkVfQ01EKTsKQEAgLTM4OCwxMCArMzg4LDEwIEBACiAKICNlbHNlICAvKiBfSV8gbmV2ZXIgdGVzdGVkIGl0IHRoaXMgd2F5IC4uIEdvIGFoZWFkIGFuZCB0cnkgLi4uKi8KIAkvKiBSZXNldCBjYXJkLiBXaG8ga25vd3Mgd2hhdCBkYWluLWJyYW1hZ2VkIHN0YXRlIGl0IHdhcyBsZWZ0IGluLiAqLwotCXsgCisJewogCQl1bnNpZ25lZCBsb25nIHJlc2V0X3N0YXJ0X3RpbWUgPSBqaWZmaWVzOwogCi0JCS8qIERPTidUIGNoYW5nZSB0aGVzZSB0byBpbmJfcC9vdXRiX3Agb3IgcmVzZXQgd2lsbCBmYWlsIG9uIAorCQkvKiBET04nVCBjaGFuZ2UgdGhlc2UgdG8gaW5iX3Avb3V0Yl9wIG9yIHJlc2V0IHdpbGwgZmFpbCBvbgogCQkgICBjbG9uZXMuLiAqLwogCQlvdXRiKGluYihiYXNlX2FkZHIgKyBORV9SRVNFVCksIGJhc2VfYWRkciArIE5FX1JFU0VUKTsKIApAQCAtNDA4LDE2ICs0MDgsMTYgQEAKIAogCiAJLyogUmVhZCB0aGUgMTYgYnl0ZXMgb2Ygc3RhdGlvbiBhZGRyZXNzIFBST00uCi0JICAgV2UgbXVzdCBmaXJzdCBpbml0aWFsaXplIHJlZ2lzdGVycywgc2ltaWxhciB0byAKKwkgICBXZSBtdXN0IGZpcnN0IGluaXRpYWxpemUgcmVnaXN0ZXJzLCBzaW1pbGFyIHRvCiAJICAgTlM4MzkwX2luaXQoZWlmZGV2LCAwKS4KIAkgICBXZSBjYW4ndCByZWxpYWJseSByZWFkIHRoZSBTQVBST00gYWRkcmVzcyB3aXRob3V0IHRoaXMuCiAJICAgKEkgbGVhcm5lZCB0aGUgaGFyZCB3YXkhKS4gKi8KIAl7Ci0JCXN0cnVjdCB7IAotCQkJdW5zaWduZWQgY2hhciB2YWx1ZSwgb2Zmc2V0OyAKKwkJc3RydWN0IHsKKwkJCXVuc2lnbmVkIGNoYXIgdmFsdWUsIG9mZnNldDsKIAkJfSBwcm9ncmFtX3NlcVtdID0gewogCQkJCQkJLyogU2VsZWN0IHBhZ2UgMCAqLwotCQkJe0U4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUT1AsIEU4MzkwX0NNRH0sIAorCQkJe0U4MzkwX05PRE1BK0U4MzkwX1BBR0UwK0U4MzkwX1NUT1AsIEU4MzkwX0NNRH0sCiAJCQl7MHg0OSwJRU4wX0RDRkd9LCAgLyogU2V0IFdPUkQtd2lkZSAoMHg0OSkgYWNjZXNzLiAqLwogCQkJezB4MDAsCUVOMF9SQ05UTE99LCAgLyogQ2xlYXIgdGhlIGNvdW50IHJlZ3MuICovCiAJCQl7MHgwMCwJRU4wX1JDTlRISX0sCkBAIC00MzMsNyArNDMzLDcgQEAKIAkJfTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHByb2dyYW1fc2VxKS9zaXplb2YocHJvZ3JhbV9zZXFbMF0pOyBpKyspCi0JCQlvdXRiX3AocHJvZ3JhbV9zZXFbaV0udmFsdWUsIGJhc2VfYWRkciArIAorCQkJb3V0Yl9wKHByb2dyYW1fc2VxW2ldLnZhbHVlLCBiYXNlX2FkZHIgKwogCQkJCXByb2dyYW1fc2VxW2ldLm9mZnNldCk7CiAKIAl9CkBAIC00NjQsNyArNDY0LDcgQEAKIAkgICBzaGFyZSBhbmQgdGhlIGJvYXJkIHdpbGwgdXN1YWxseSBiZSBlbmFibGVkLiAqLwogCXJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBlaV9pbnRlcnJ1cHQsIDAsIERSVl9OQU1FLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrICgiIHVuYWJsZSB0byBnZXQgSVJRICVkIChpcnF2YWw9JWQpLlxuIiwgCisJCXByaW50ayAoIiB1bmFibGUgdG8gZ2V0IElSUSAlZCAoaXJxdmFsPSVkKS5cbiIsCiAJCQkJZGV2LT5pcnEsIHJldHZhbCk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTQ5Niw5ICs0OTYsOSBAQAogCWVpX3N0YXR1cy5ibG9ja19pbnB1dCA9ICZuZV9ibG9ja19pbnB1dDsKIAllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJm5lX2Jsb2NrX291dHB1dDsKIAllaV9zdGF0dXMuZ2V0XzgzOTBfaGRyID0gJm5lX2dldF84MzkwX2hkcjsKLQkKKwogCWVpX3N0YXR1cy5wcml2ID0gc2xvdDsKLQkKKwogCWRldi0+b3BlbiA9ICZuZV9vcGVuOwogCWRldi0+c3RvcCA9ICZuZV9jbG9zZTsKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgpAQCAtNTM4LDcgKzUzOCw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyByZXNldF9zdGFydF90aW1lID0gamlmZmllczsKIAotCWlmIChlaV9kZWJ1ZyA+IDEpIAorCWlmIChlaV9kZWJ1ZyA+IDEpCiAJCXByaW50aygicmVzZXR0aW5nIHRoZSA4MzkwIHQ9JWxkLi4uIiwgamlmZmllcyk7CiAKIAkvKiBET04nVCBjaGFuZ2UgdGhlc2UgdG8gaW5iX3Avb3V0Yl9wIG9yIHJlc2V0IHdpbGwgZmFpbCBvbiBjbG9uZXMuICovCkBAIC01NTAsNyArNTUwLDcgQEAKIAkvKiBUaGlzIGNoZWNrIF9zaG91bGRfbm90XyBiZSBuZWNlc3NhcnksIG9taXQgZXZlbnR1YWxseS4gKi8KIAl3aGlsZSAoKGluYl9wKE5FX0JBU0UrRU4wX0lTUikgJiBFTklTUl9SRVNFVCkgPT0gMCkKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcmVzZXRfc3RhcnRfdGltZSArIDIqSFovMTAwKSkgewotCQkJcHJpbnRrKCIlczogbmVfcmVzZXRfODM5MCgpIGRpZCBub3QgY29tcGxldGUuXG4iLCAKKwkJCXByaW50aygiJXM6IG5lX3Jlc2V0XzgzOTAoKSBkaWQgbm90IGNvbXBsZXRlLlxuIiwKIAkJCQkJZGV2LT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CkBAIC01NjEsMTMgKzU2MSwxMyBAQAogICAgd2UgZG9uJ3QgbmVlZCB0byBiZSBjb25jZXJuZWQgd2l0aCByaW5nIHdyYXAgYXMgdGhlIGhlYWRlciB3aWxsIGJlIGF0CiAgICB0aGUgc3RhcnQgb2YgYSBwYWdlLCBzbyB3ZSBvcHRpbWl6ZSBhY2NvcmRpbmdseS4gKi8KIAotc3RhdGljIHZvaWQgbmVfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsIAorc3RhdGljIHZvaWQgbmVfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsCiAJCWludCByaW5nX3BhZ2UpCiB7CiAKIAlpbnQgbmljX2Jhc2UgPSBkZXYtPmJhc2VfYWRkcjsKIAotCS8qIFRoaXMgKnNob3VsZG4ndCogaGFwcGVuLiAKKwkvKiBUaGlzICpzaG91bGRuJ3QqIGhhcHBlbi4KIAkgICBJZiBpdCBkb2VzLCBpdCdzIHRoZSBsYXN0IHRoaW5nIHlvdSdsbCBzZWUgKi8KIAlpZiAoZWlfc3RhdHVzLmRtYWluZykgewogCQlwcmludGsoIiVzOiBETUFpbmcgY29uZmxpY3QgaW4gbmVfZ2V0XzgzOTBfaGRyICIKQEAgLTU4NSwxMCArNTg1LDEwIEBACiAJb3V0Yl9wKEU4MzkwX1JSRUFEK0U4MzkwX1NUQVJULCBuaWNfYmFzZSArIE5FX0NNRCk7CiAKIAlpZiAoZWlfc3RhdHVzLndvcmQxNikKLQkJaW5zdyhORV9CQVNFICsgTkVfREFUQVBPUlQsIGhkciwgCisJCWluc3coTkVfQkFTRSArIE5FX0RBVEFQT1JULCBoZHIsCiAJCQkJc2l6ZW9mKHN0cnVjdCBlODM5MF9wa3RfaGRyKT4+MSk7CiAJZWxzZQotCQlpbnNiKE5FX0JBU0UgKyBORV9EQVRBUE9SVCwgaGRyLCAKKwkJaW5zYihORV9CQVNFICsgTkVfREFUQVBPUlQsIGhkciwKIAkJCQlzaXplb2Yoc3RydWN0IGU4MzkwX3BrdF9oZHIpKTsKIAogCW91dGJfcChFTklTUl9SREMsIG5pY19iYXNlICsgRU4wX0lTUik7CS8qIEFjayBpbnRyLiAqLwpAQCAtNjAwLDcgKzYwMCw3IEBACiAgICBoaW50cy4gVGhlIE5FeDAwMCBkb2Vzbid0IHNoYXJlIHRoZSBvbi1ib2FyZCBwYWNrZXQgbWVtb3J5IC0tIHlvdSBoYXZlCiAgICB0byBwdXQgdGhlIHBhY2tldCBvdXQgdGhyb3VnaCB0aGUgInJlbW90ZSBETUEiIGRhdGFwb3J0IHVzaW5nIG91dGIuICovCiAKLXN0YXRpYyB2b2lkIG5lX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgCitzdGF0aWMgdm9pZCBuZV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCWludCByaW5nX29mZnNldCkKIHsKICNpZmRlZiBORV9TQU5JVFlfQ0hFQ0sKQEAgLTYwOSw3ICs2MDksNyBAQAogCWludCBuaWNfYmFzZSA9IGRldi0+YmFzZV9hZGRyOwogCWNoYXIgKmJ1ZiA9IHNrYi0+ZGF0YTsKIAotCS8qIFRoaXMgKnNob3VsZG4ndCogaGFwcGVuLiAKKwkvKiBUaGlzICpzaG91bGRuJ3QqIGhhcHBlbi4KIAkgICBJZiBpdCBkb2VzLCBpdCdzIHRoZSBsYXN0IHRoaW5nIHlvdSdsbCBzZWUgKi8KIAlpZiAoZWlfc3RhdHVzLmRtYWluZykgewogCQlwcmludGsoIiVzOiBETUFpbmcgY29uZmxpY3QgaW4gbmVfYmxvY2tfaW5wdXQgIgpAQCAtNjc3LDcgKzY3Nyw3IEBACiAJaWYgKGVpX3N0YXR1cy53b3JkMTYgJiYgKGNvdW50ICYgMHgwMSkpCiAJCWNvdW50Kys7CiAKLQkvKiBUaGlzICpzaG91bGRuJ3QqIGhhcHBlbi4gCisJLyogVGhpcyAqc2hvdWxkbid0KiBoYXBwZW4uCiAJICAgSWYgaXQgZG9lcywgaXQncyB0aGUgbGFzdCB0aGluZyB5b3UnbGwgc2VlICovCiAJaWYgKGVpX3N0YXR1cy5kbWFpbmcpIHsKIAkJcHJpbnRrKCIlczogRE1BaW5nIGNvbmZsaWN0IGluIG5lX2Jsb2NrX291dHB1dC4iCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwppbmRleCAzNGJkYmE5Li41ODk3ODVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKQEAgLTE3NSw5ICsxNzUsOSBAQAogCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpOwogc3RhdGljIHZvaWQgbmUya19wY2lfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IGludCBjb3VudCwKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBjb25zdCBpbnQgc3RhcnRfcGFnZSk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5lMmtfcGNpX2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZTJrX3BjaV9ldGh0b29sX29wczsKIAotDAorCiAKIC8qIFRoZXJlIGlzIG5vIHJvb20gaW4gdGhlIHN0YW5kYXJkIDgzOTAgc3RydWN0dXJlIGZvciBleHRyYSBpbmZvIHdlIG5lZWQsCiAgICBzbyB3ZSBidWlsZCBhIG1ldGEvb3V0ZXItd3JhcHBlciBzdHJ1Y3R1cmUuLiAqLwpAQCAtMzg2LDcgKzM4Niw3IEBACiAKIH0KIAotLyogCisvKgogICogTWFnaWMgaW5jYW50YXRpb24gc2VxdWVuY2UgZm9yIGZ1bGwgZHVwbGV4IG9uIHRoZSBzdXBwb3J0ZWQgY2FyZHMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNldF9yZWFsdGVrX2ZkeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNDExLDcgKzQxMSw3IEBACiAKIHN0YXRpYyBpbnQgbmUya19wY2lfc2V0X2ZkeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlmIChlaV9zdGF0dXMubmUya19mbGFncyAmIFJFQUxURUtfRkRYKSAKKwlpZiAoZWlfc3RhdHVzLm5lMmtfZmxhZ3MgJiBSRUFMVEVLX0ZEWCkKIAkJcmV0dXJuIHNldF9yZWFsdGVrX2ZkeChkZXYpOwogCWVsc2UgaWYgKGVpX3N0YXR1cy5uZTJrX2ZsYWdzICYgSE9MVEVLX0ZEWCkKIAkJcmV0dXJuIHNldF9ob2x0ZWtfZmR4KGRldik7CkBAIC02MzUsNyArNjM1LDcgQEAKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHBjaV9kZXYpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZTJrX3BjaV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmUya19wY2lfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5lMmtfcGNpX2dldF9kcnZpbmZvLAogCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAogCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLApAQCAtNzAyLDcgKzcwMiw3IEBACiAjaWZkZWYgTU9EVUxFCiAJcHJpbnRrKHZlcnNpb24pOwogI2VuZGlmCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJm5lMmtfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmUya19kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMzIxMC5jIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKaW5kZXggNzM1MDFkOC4uMGZhOGU0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUzMjEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKQEAgLTE0LDEwICsxNCwxMCBAQAogCTIpIFRoZSBleGlzdGluZyBteXJpYWQgb2Ygb3RoZXIgTGludXggODM5MCBkcml2ZXJzIGJ5IERvbmFsZCBCZWNrZXIuCiAJMykgSW5mbyBmb3IgZ2V0dGluZyBJUlEgYW5kIHNoLW1lbSBnbGVhbmVkIGZyb20gdGhlIEVJU0EgY2ZnIGZpbGUKIAotCVRoZSBORTMyMTAgaXMgYW4gRUlTQSBzaGFyZWQgbWVtb3J5IE5TODM5MCBpbXBsZW1lbnRhdGlvbi4gIFNoYXJlZCAKKwlUaGUgTkUzMjEwIGlzIGFuIEVJU0Egc2hhcmVkIG1lbW9yeSBOUzgzOTAgaW1wbGVtZW50YXRpb24uICBTaGFyZWQKIAltZW1vcnkgYWRkcmVzcyA+IDFNQiBzaG91bGQgd29yayB3aXRoIHRoaXMgZHJpdmVyLgogCi0JTm90ZSB0aGF0IHRoZSAuY2ZnIGZpbGUgKDMvMTEvOTMsIHYxLjApIGhhcyBBVUkgYW5kIEJOQyBzd2l0Y2hlZCAKKwlOb3RlIHRoYXQgdGhlIC5jZmcgZmlsZSAoMy8xMS85MywgdjEuMCkgaGFzIEFVSSBhbmQgQk5DIHN3aXRjaGVkCiAJYXJvdW5kIChvciBwZXJoYXBzIHRoZXJlIGFyZSBzb21lIGRlZmVjdGl2ZS9iYWNrd2FyZHMgY2FyZHMgPz8/KQogCiAJVGhpcyBkcml2ZXIgV0lMTCBOT1QgV09SSyBGT1IgVEhFIE5FMzIwMCAtIGl0IGlzIGNvbXBsZXRlbHkgZGlmZmVyZW50CkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJZWRldi0+c2xvdCwgaWZtYXBbcG9ydF9pbmRleF0pOwogCWZvcihpID0gMDsgaSA8IEVUSEVSX0FERFJfTEVOOyBpKyspCiAJCXByaW50aygiICUwMngiLCAoZGV2LT5kZXZfYWRkcltpXSA9IGluYihpb2FkZHIgKyBORTMyMTBfU0FfUFJPTSArIGkpKSk7Ci0JCisKIAogCS8qIFNuYXJmIHRoZSBpbnRlcnJ1cHQgbm93LiBDRkcgZmlsZSBoYXMgdGhlbSBhbGwgbGlzdGVkIGFzIGBlZGdlJyB3aXRoIHNoYXJlPU5PICovCiAJZGV2LT5pcnEgPSBpcnFfbWFwWyhpbmIoaW9hZGRyICsgTkUzMjEwX0NGRzIpID4+IDMpICYgMHgwN107CkBAIC0xNjEsMTMgKzE2MSwxMyBAQAogCQkJZ290byBvdXQzOwogCQl9CiAJfQotCQorCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24gKHBoeXNfbWVtLCBORTMyMTBfU1RPUF9QRyoweDEwMCwgRFJWX05BTUUpKSB7CiAJCXByaW50ayAoIm5lMzIxMC5jOiBVbmFibGUgdG8gcmVxdWVzdCBzaGFyZWQgbWVtb3J5IGF0IHBoeXNpY2FsIGFkZHJlc3MgJSNseFxuIiwKIAkJCXBoeXNfbWVtKTsKIAkJZ290byBvdXQzOwogCX0KLQkKKwogCXByaW50aygiJWRrQiBtZW1vcnkgYXQgcGh5c2ljYWwgYWRkcmVzcyAlI2x4XG4iLAogCSAgICAgICBORTMyMTBfU1RPUF9QRy80LCBwaHlzX21lbSk7CiAKQEAgLTIxMCw3ICsyMTAsNyBAQAogCiAJaWYgKChyZXR2YWwgPSByZWdpc3Rlcl9uZXRkZXYgKGRldikpKQogCQlnb3RvIG91dDU7Ci0JCQorCiAJTlM4MzkwX2luaXQoZGV2LCAwKTsKIAlyZXR1cm4gMDsKIApAQCAtMjI2LDcgKzIyNiw3IEBACiAJcmVsZWFzZV9yZWdpb24gKGlvYWRkciwgTkUzMjEwX0lPX0VYVEVOVCk7CiAgb3V0OgogCWZyZWVfbmV0ZGV2IChkZXYpOwotCQorCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjg5LDcgKzI4OSw3IEBACiAJaGRyLT5jb3VudCA9IChoZHItPmNvdW50ICsgMykgJiB+MzsgICAgIC8qIFJvdW5kIHVwIGFsbG9jYXRpb24uICovCiB9CiAKLS8qCQorLyoKICAqCUJsb2NrIGlucHV0IGFuZCBvdXRwdXQgYXJlIGVhc3kgb24gc2hhcmVkIG1lbW9yeSBldGhlcmNhcmRzLCB0aGUgb25seQogICoJY29tcGxpY2F0aW9uIGlzIHdoZW4gdGhlIHJpbmcgYnVmZmVyIHdyYXBzLiBUaGUgY291bnQgd2lsbCBhbHJlYWR5CiAgKgliZSByb3VuZGVkIHVwIHRvIGEgZG91Ymxld29yZCB2YWx1ZSB2aWEgbmUzMjEwX2dldF84MzkwX2hkcigpIGFib3ZlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eC1ldGguYyBiL2RyaXZlcnMvbmV0L25ldHgtZXRoLmMKaW5kZXggYjEzMTFhZS4uMzBlZDlhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eC1ldGguYworKysgYi9kcml2ZXJzL25ldC9uZXR4LWV0aC5jCkBAIC0xNyw3ICsxNyw2IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTAxMC5jIGIvZHJpdmVycy9uZXQvbmk1MDEwLmMKaW5kZXggZDRiZTIwNy4uMzgzYzY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1MDEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1MDEwLmMKQEAgLTQwLDcgKzQwLDcgQEAKICAqCiAgKglDb21waWxlIHdpdGg6CiAgKgkJZ2NjIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciAtbTQ4NiAtRF9fS0VSTkVMX18gXAotICoJCQktRE1PRFVMRSAtYyBuaTUwMTAuYyAKKyAqCQkJLURNT0RVTEUgLWMgbmk1MDEwLmMKICAqCiAgKglJbnNlcnQgd2l0aCBlLmcuOgogICoJCWluc21vZCBuaTUwMTAua28gaW89MHgzMDAgaXJxPTUKQEAgLTY4LDcgKzY4LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGJvYXJkbmFtZVtdID0gIk5JNTAxMCI7CiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CiAJIm5pNTAxMC5jOiB2MS4wMiAyMDA2MDYxMSBKYW4tUGFzY2FsIHZhbiBCZXN0IGFuZCBBbmRyZWFzIE1vaHJcbiI7Ci0JCisKIC8qIGJ1ZnNpemVfcmN2ID09IDAgbWVhbnMgYXV0b3Byb2JpbmcgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgYnVmc2l6ZV9yY3Y7CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogCSAqICAgLSBBbmRyZWFzCiAJICovCiAKLSAJUFJJTlRLMigoS0VSTl9ERUJVRyAiJXM6IGVudGVyaW5nIG5pNTAxMF9wcm9iZTEoJSMzeClcbiIsIAorIAlQUklOVEsyKChLRVJOX0RFQlVHICIlczogZW50ZXJpbmcgbmk1MDEwX3Byb2JlMSglIzN4KVxuIiwKICAJCWRldi0+bmFtZSwgaW9hZGRyKSk7CiAKIAlpZiAoaW5iKGlvYWRkciswKSA9PSAweGZmKQpAQCAtMzMyLDcgKzMzMiw3IEBACiAJfQogICAgICAgICBwcmludGsoIi0+IGJ1ZnNpemUgcmN2L3htdD0lZC8lZFxuIiwgYnVmc2l6ZV9yY3YsIE5JNTAxMF9CVUZTSVpFKTsKIAltZW1zZXQoZGV2LT5wcml2LCAwLCBzaXplb2Yoc3RydWN0IG5pNTAxMF9sb2NhbCkpOwotCQorCiAJZGV2LT5vcGVuCQk9IG5pNTAxMF9vcGVuOwogCWRldi0+c3RvcAkJPSBuaTUwMTBfY2xvc2U7CiAJZGV2LT5oYXJkX3N0YXJ0X3htaXQJPSBuaTUwMTBfc2VuZF9wYWNrZXQ7CkBAIC0zNTksNyArMzU5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiAKKy8qCiAgKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLiAgVGhpcyBpcyBjYWxsZWQgKGluIHRoZSBjdXJyZW50IGtlcm5lbCkKICAqIHNvbWV0aW1lIGFmdGVyIGJvb3Rpbmcgd2hlbiB0aGUgJ2lmY29uZmlnJyBwcm9ncmFtIGlzIHJ1bi4KICAqCkBAIC0zNjcsMTQgKzM2NywxNCBAQAogICogcmVnaXN0ZXJzIHRoYXQgInNob3VsZCIgb25seSBuZWVkIHRvIGJlIHNldCBvbmNlIGF0IGJvb3QsIHNvIHRoYXQKICAqIHRoZXJlIGlzIGEgbm9uLXJlYm9vdCB3YXkgdG8gcmVjb3ZlciBpZiBzb21ldGhpbmcgZ29lcyB3cm9uZy4KICAqLwotICAgCisKIHN0YXRpYyBpbnQgbmk1MDEwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IGk7CiAKLQlQUklOVEsyKChLRVJOX0RFQlVHICIlczogZW50ZXJpbmcgbmk1MDEwX29wZW4oKVxuIiwgZGV2LT5uYW1lKSk7IAotCQorCVBSSU5USzIoKEtFUk5fREVCVUcgIiVzOiBlbnRlcmluZyBuaTUwMTBfb3BlbigpXG4iLCBkZXYtPm5hbWUpKTsKKwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgJm5pNTAxMF9pbnRlcnJ1cHQsIDAsIGJvYXJkbmFtZSwgZGV2KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogQ2Fubm90IGdldCBpcnEgJSMyeFxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSk7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtNDA0LDIxICs0MDQsMjEgQEAKIAlmb3IoaSA9IDA7aSA8IDY7IGkrKykgewogCQlvdXRiKGRldi0+ZGV2X2FkZHJbaV0sIEVETENfQUREUiArIGkpOwogCX0KLQkKLQlQUklOVEszKChLRVJOX0RFQlVHICIlczogSW5pdGlhbGlzaW5nIG5pNTAxMFxuIiwgZGV2LT5uYW1lKSk7IAorCisJUFJJTlRLMygoS0VSTl9ERUJVRyAiJXM6IEluaXRpYWxpc2luZyBuaTUwMTBcbiIsIGRldi0+bmFtZSkpOwogCW91dGIoMCwgRURMQ19YTUFTSyk7CS8qIE5vIHhtaXQgaW50ZXJydXB0cyBmb3Igbm93ICovCi0Jb3V0YihYTURfSUdfUEFSIHwgWE1EX1RfTU9ERSB8IFhNRF9MQkMsIEVETENfWE1PREUpOyAKKwlvdXRiKFhNRF9JR19QQVIgfCBYTURfVF9NT0RFIHwgWE1EX0xCQywgRURMQ19YTU9ERSk7CiAJCQkJLyogTm9ybWFsIHBhY2tldCB4bWl0IG1vZGUgKi8KIAlvdXRiKDB4ZmYsIEVETENfWENMUik7CS8qIENsZWFyIGFsbCBwZW5kaW5nIHhtaXQgaW50ZXJydXB0cyAqLwogCW91dGIoUk1EX0JST0FEQ0FTVCwgRURMQ19STU9ERSk7CiAJCQkJLyogUmVjZWl2ZSBicm9hZGNhc3QgYW5kIG5vcm1hbCBwYWNrZXRzICovCiAJcmVzZXRfcmVjZWl2ZXIoZGV2KTsJLyogUmVhZHkgbmk1MDEwIGZvciByZWNlaXZpbmcgcGFja2V0cyAqLwotCQorCiAJb3V0YigwLCBFRExDX1JFU0VUKTsJLyogVW4tcmVzZXQgdGhlIG5pNTAxMCAqLwotCQorCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQkJCi0JaWYgKE5JNTAxMF9ERUJVRykgbmk1MDEwX3Nob3dfcmVnaXN0ZXJzKGRldik7IAorCisJaWYgKE5JNTAxMF9ERUJVRykgbmk1MDEwX3Nob3dfcmVnaXN0ZXJzKGRldik7CiAKIAlQUklOVEsoKEtFUk5fREVCVUcgIiVzOiBvcGVuIHN1Y2Nlc3NmdWxcbiIsIGRldi0+bmFtZSkpOwogICAgICAJcmV0dXJuIDA7CkBAIC00MjcsNyArNDI3LDcgQEAKIHN0YXRpYyB2b2lkIHJlc2V0X3JlY2VpdmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCQorCiAJUFJJTlRLMygoS0VSTl9ERUJVRyAiJXM6IHJlc2V0dGluZyByZWNlaXZlclxuIiwgZGV2LT5uYW1lKSk7CiAJb3V0dygwLCBJRV9HUCk7CQkvKiBSZWNlaXZlIHBhY2tldCBhdCBzdGFydCBvZiBidWZmZXIgKi8KIAlvdXRiKDB4ZmYsIEVETENfUkNMUik7CS8qIENsZWFyIGFsbCBwZW5kaW5nIHJjdiBpbnRlcnJ1cHRzICovCkBAIC00NTMsMTAgKzQ1MywxMCBAQAogCiAJUFJJTlRLMigoS0VSTl9ERUJVRyAiJXM6IGVudGVyaW5nIG5pNTAxMF9zZW5kX3BhY2tldFxuIiwgZGV2LT5uYW1lKSk7CiAKLQkvKiAKKwkvKgogICAgICAgICAgKiBCbG9jayBzZW5kaW5nCiAJICovCi0JCisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJaGFyZHdhcmVfc2VuZF9wYWNrZXQoZGV2LCAodW5zaWduZWQgY2hhciAqKXNrYi0+ZGF0YSwgc2tiLT5sZW4sIGxlbmd0aC1za2ItPmxlbik7CiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CkBAIC00NjQsOSArNDY0LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogCisvKgogICogVGhlIHR5cGljYWwgd29ya2xvYWQgb2YgdGhlIGRyaXZlcjoKLSAqIEhhbmRsZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0cy4gCisgKiBIYW5kbGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGludGVycnVwdHMuCiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBuaTUwMTBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC00NzksMTEgKzQ3OSwxMSBAQAogCiAJaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJc3Bpbl9sb2NrKCZscC0+bG9jayk7Ci0Jc3RhdHVzID0gaW5iKElFX0lTVEFUKTsgCisJc3RhdHVzID0gaW5iKElFX0lTVEFUKTsKIAlQUklOVEszKChLRVJOX0RFQlVHICIlczogSUVfSVNUQVQgPSAlIzAyeFxuIiwgZGV2LT5uYW1lLCBzdGF0dXMpKTsKLQkJCisKICAgICAgICAgaWYgKChzdGF0dXMgJiBJU19SX0lOVCkgPT0gMCkgbmk1MDEwX3J4KGRldik7CiAKICAgICAgICAgaWYgKChzdGF0dXMgJiBJU19YX0lOVCkgPT0gMCkgewpAQCAtNDk1LDggKzQ5NSw4IEBACiAgICAgICAgICAgICAgICAgb3V0YigwLCBJRV9ETUFfUlNUKTsgLyogUmVzZXQgRE1BIGludCAqLwogICAgICAgICB9CiAKLQlpZiAoIXhtaXRfd2FzX2Vycm9yKSAKLQkJcmVzZXRfcmVjZWl2ZXIoZGV2KTsgCisJaWYgKCF4bWl0X3dhc19lcnJvcikKKwkJcmVzZXRfcmVjZWl2ZXIoZGV2KTsKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTUwNSw3ICs1MDUsNyBAQAogc3RhdGljIHZvaWQgZHVtcF9wYWNrZXQodm9pZCAqYnVmLCBpbnQgbGVuKQogewogCWludCBpOwotCQorCiAJcHJpbnRrKEtFUk5fREVCVUcgIlBhY2tldCBsZW5ndGggPSAlIzR4XG4iLCBsZW4pOwogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKyl7CiAJCWlmIChpICUgMTYgPT0gMCkgcHJpbnRrKEtFUk5fREVCVUcgIiUjNC40eCIsIGkpOwpAQCAtNTE0LDcgKzUxNCw3IEBACiAJCWlmIChpICUgMTYgPT0gMTUpIHByaW50aygiXG4iKTsKIAl9CiAJcHJpbnRrKCJcbiIpOwotCQorCiAJcmV0dXJuOwogfQogCkBAIC01MjYsMTIgKzUyNiwxMiBAQAogCXVuc2lnbmVkIGNoYXIgcmN2X3N0YXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgaV9wa3Rfc2l6ZTsKLQkKLQlQUklOVEsyKChLRVJOX0RFQlVHICIlczogZW50ZXJpbmcgbmk1MDEwX3J4KClcbiIsIGRldi0+bmFtZSkpOyAKLQkKKworCVBSSU5USzIoKEtFUk5fREVCVUcgIiVzOiBlbnRlcmluZyBuaTUwMTBfcngoKVxuIiwgZGV2LT5uYW1lKSk7CisKIAlyY3Zfc3RhdCA9IGluYihFRExDX1JTVEFUKTsKLQlQUklOVEszKChLRVJOX0RFQlVHICIlczogRURMQ19SU1RBVCA9ICUjMnhcbiIsIGRldi0+bmFtZSwgcmN2X3N0YXQpKTsgCi0JCisJUFJJTlRLMygoS0VSTl9ERUJVRyAiJXM6IEVETENfUlNUQVQgPSAlIzJ4XG4iLCBkZXYtPm5hbWUsIHJjdl9zdGF0KSk7CisKIAlpZiAoIChyY3Zfc3RhdCAmIFJTX1ZBTElEX0JJVFMpICE9IFJTX1BLVF9PSykgewogCQlQUklOVEsoKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmUgZXJyb3IuXG4iLCBkZXYtPm5hbWUpKTsKIAkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwpAQCAtNTQyLDEyICs1NDIsMTIgQEAKICAgICAgICAgCW91dGIoMHhmZiwgRURMQ19SQ0xSKTsgLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwogCQlyZXR1cm47CiAJfQotCQorCiAgICAgICAgIG91dGIoMHhmZiwgRURMQ19SQ0xSKTsgIC8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgKi8KIAogCWlfcGt0X3NpemUgPSBpbncoSUVfUkNOVCk7CiAJaWYgKGlfcGt0X3NpemUgPiBFVEhfRlJBTUVfTEVOIHx8IGlfcGt0X3NpemUgPCAxMCApIHsKLQkJUFJJTlRLKChLRVJOX0RFQlVHICIlczogUGFja2V0IHNpemUgZXJyb3IsIHBhY2tldCBzaXplID0gJSM0LjR4XG4iLCAKKwkJUFJJTlRLKChLRVJOX0RFQlVHICIlczogUGFja2V0IHNpemUgZXJyb3IsIHBhY2tldCBzaXplID0gJSM0LjR4XG4iLAogCQkJZGV2LT5uYW1lLCBpX3BrdF9zaXplKSk7CiAJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJbHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTU2MSwyNyArNTYxLDI3IEBACiAJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybjsKIAl9Ci0JCisKIAlza2ItPmRldiA9IGRldjsKIAlza2JfcmVzZXJ2ZShza2IsIDIpOwotCQorCiAJLyogUmVhZCBwYWNrZXQgaW50byBidWZmZXIgKi8KICAgICAgICAgb3V0YihNTV9NVVgsIElFX01NT0RFKTsgLyogUmN2IGJ1ZmZlciB0byBzeXN0ZW0gYnVzICovCiAJb3V0dygwLCBJRV9HUCk7CS8qIFNlZWsgdG8gYmVnaW5uaW5nIG9mIHBhY2tldCAqLwotCWluc2IoSUVfUkJVRiwgc2tiX3B1dChza2IsIGlfcGt0X3NpemUpLCBpX3BrdF9zaXplKTsgCi0JCi0JaWYgKE5JNTAxMF9ERUJVRyA+PSA0KSAKLQkJZHVtcF9wYWNrZXQoc2tiLT5kYXRhLCBza2ItPmxlbik7IAotCQkKKwlpbnNiKElFX1JCVUYsIHNrYl9wdXQoc2tiLCBpX3BrdF9zaXplKSwgaV9wa3Rfc2l6ZSk7CisKKwlpZiAoTkk1MDEwX0RFQlVHID49IDQpCisJCWR1bXBfcGFja2V0KHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYixkZXYpOwogCW5ldGlmX3J4KHNrYik7CiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAlscC0+c3RhdHMucnhfcGFja2V0cysrOwogCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBpX3BrdF9zaXplOwogCi0JUFJJTlRLMigoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmVkIHBhY2tldCwgc2l6ZT0lIzQuNHhcbiIsIAorCVBSSU5USzIoKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlZCBwYWNrZXQsIHNpemU9JSM0LjR4XG4iLAogCQlkZXYtPm5hbWUsIGlfcGt0X3NpemUpKTsKLQkKKwogfQogCiBzdGF0aWMgaW50IHByb2Nlc3NfeG10X2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtNTk0LDEyICs1OTQsMTIgQEAKIAogCXhtaXRfc3RhdCA9IGluYihFRExDX1hTVEFUKTsKIAlQUklOVEszKChLRVJOX0RFQlVHICIlczogRURMQ19YU1RBVCA9ICUyLjJ4XG4iLCBkZXYtPm5hbWUsIHhtaXRfc3RhdCkpOwotCQorCiAJb3V0YigwLCBFRExDX1hNQVNLKTsJLyogRGlzYWJsZSB4bWl0IElSUSdzICovCiAJb3V0YigweGZmLCBFRExDX1hDTFIpOwkvKiBDbGVhciBhbGwgcGVuZGluZyB4bWl0IElSUSdzICovCi0JCisKIAlpZiAoeG1pdF9zdGF0ICYgWFNfQ09MTCl7Ci0JCVBSSU5USygoS0VSTl9ERUJVRyAiJXM6IGNvbGxpc2lvbiBkZXRlY3RlZCwgcmV0cmFuc21pdHRpbmdcbiIsIAorCQlQUklOVEsoKEtFUk5fREVCVUcgIiVzOiBjb2xsaXNpb24gZGV0ZWN0ZWQsIHJldHJhbnNtaXR0aW5nXG4iLAogCQkJZGV2LT5uYW1lKSk7CiAJCW91dHcoTkk1MDEwX0JVRlNJWkUgLSBscC0+b19wa3Rfc2l6ZSwgSUVfR1ApOwogCQkvKiBvdXRiKDAsIElFX01NT0RFKTsgKi8gLyogeG10IGJ1ZiBvbiBzeXNidXMgRklYTUU6IG5lZWRlZCA/ICovCkBAIC02MTQsOCArNjE0LDggQEAKIAlscC0+c3RhdHMudHhfcGFja2V0cysrOwogCWxwLT5zdGF0cy50eF9ieXRlcyArPSBscC0+b19wa3Rfc2l6ZTsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci0JCQkKLQlQUklOVEsyKChLRVJOX0RFQlVHICIlczogc2VudCBwYWNrZXQsIHNpemU9JSM0LjR4XG4iLCAKKworCVBSSU5USzIoKEtFUk5fREVCVUcgIiVzOiBzZW50IHBhY2tldCwgc2l6ZT0lIzQuNHhcbiIsCiAJCWRldi0+bmFtZSwgbHAtPm9fcGt0X3NpemUpKTsKIAogCXJldHVybiAwOwpAQCAtNjM1LDcgKzYzNSw3IEBACiAJb3V0YihSU19SRVNFVCwgRURMQ19SRVNFVCk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAlQUklOVEsoKEtFUk5fREVCVUcgIiVzOiAlcyBjbG9zZWQgZG93blxuIiwgZGV2LT5uYW1lLCBib2FyZG5hbWUpKTsKIAlyZXR1cm4gMDsKIApAQCAtNjQ4LDkgKzY0OCw5IEBACiAJc3RydWN0IG5pNTAxMF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJUFJJTlRLMigoS0VSTl9ERUJVRyAiJXM6IGVudGVyaW5nIG5pNTAxMF9nZXRfc3RhdHNcbiIsIGRldi0+bmFtZSkpOwotCQorCiAJaWYgKE5JNTAxMF9ERUJVRykgbmk1MDEwX3Nob3dfcmVnaXN0ZXJzKGRldik7Ci0JCisKIAkvKiBjbGkoKTsgKi8KIAkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gKi8KIAkvKiBXZSBkbyB0aGlzIGluIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwpAQCAtNjY3LDcgKzY2Nyw3IEBACiAqLwogc3RhdGljIHZvaWQgbmk1MDEwX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXNob3J0IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOyAgCisJc2hvcnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKIAlQUklOVEsyKChLRVJOX0RFQlVHICIlczogZW50ZXJpbmcgc2V0X211bHRpY2FzdF9saXN0XG4iLCBkZXYtPm5hbWUpKTsKIApAQCAtNjkzLDcgKzY5Myw3IEBACiAJdW5zaWduZWQgaW50IGJ1Zl9vZmZzOwogCiAJUFJJTlRLMigoS0VSTl9ERUJVRyAiJXM6IGVudGVyaW5nIGhhcmR3YXJlX3NlbmRfcGFja2V0XG4iLCBkZXYtPm5hbWUpKTsKLQkKKwogICAgICAgICBpZiAobGVuZ3RoID4gRVRIX0ZSQU1FX0xFTikgewogICAgICAgICAgICAgICAgIFBSSU5USygoS0VSTl9XQVJOSU5HICIlczogcGFja2V0IHRvbyBsYXJnZSwgbm90IHBvc3NpYmxlXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKSk7CkBAIC03MDMsMTEgKzcwMywxMSBAQAogCWlmIChOSTUwMTBfREVCVUcpIG5pNTAxMF9zaG93X3JlZ2lzdGVycyhkZXYpOwogCiAJaWYgKGluYihJRV9JU1RBVCkgJiBJU19FTl9YTVQpIHsKLQkJUFJJTlRLKChLRVJOX1dBUk5JTkcgIiVzOiBzZW5kaW5nIHBhY2tldCB3aGlsZSBhbHJlYWR5IHRyYW5zbWl0dGluZywgbm90IHBvc3NpYmxlXG4iLCAKKwkJUFJJTlRLKChLRVJOX1dBUk5JTkcgIiVzOiBzZW5kaW5nIHBhY2tldCB3aGlsZSBhbHJlYWR5IHRyYW5zbWl0dGluZywgbm90IHBvc3NpYmxlXG4iLAogCQkJZGV2LT5uYW1lKSk7CiAJCXJldHVybjsKIAl9Ci0JCisKIAlpZiAoTkk1MDEwX0RFQlVHID4gMykgZHVtcF9wYWNrZXQoYnVmLCBsZW5ndGgpOwogCiAJYnVmX29mZnMgPSBOSTUwMTBfQlVGU0laRSAtIGxlbmd0aCAtIHBhZDsKQEAgLTcyMyw3ICs3MjMsNyBAQAogCW91dHNiKElFX1hCVUYsIGJ1ZiwgbGVuZ3RoKTsgLyogUHV0IGRhdGEgaW4gYnVmZmVyICovCiAJd2hpbGUocGFkLS0pCiAJCW91dGIoMCwgSUVfWEJVRik7Ci0JCQorCiAJb3V0dyhidWZfb2ZmcywgSUVfR1ApOyAvKiBSZXdyaXRlIHdoZXJlIHBhY2tldCBzdGFydHMgKi8KIAogCS8qIHNob3VsZCB3b3JrIHdpdGhvdXQgdGhhdCBvdXRiKCkgKENyeW53ciB1c2VkIGl0KSAqLwpAQCAtNzM0LDggKzczNCw4IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQkKLQlpZiAoTkk1MDEwX0RFQlVHKSBuaTUwMTBfc2hvd19yZWdpc3RlcnMoZGV2KTsJCisKKwlpZiAoTkk1MDEwX0RFQlVHKSBuaTUwMTBfc2hvd19yZWdpc3RlcnMoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgY2hpcHNldF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdGFydHApCkBAIC03NDcsNyArNzQ3LDcgQEAKIHN0YXRpYyB2b2lkIG5pNTAxMF9zaG93X3JlZ2lzdGVycyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQkKKwogCVBSSU5USzMoKEtFUk5fREVCVUcgIiVzOiBYU1RBVCAlIzIuMnhcbiIsIGRldi0+bmFtZSwgaW5iKEVETENfWFNUQVQpKSk7CiAJUFJJTlRLMygoS0VSTl9ERUJVRyAiJXM6IFhNQVNLICUjMi4yeFxuIiwgZGV2LT5uYW1lLCBpbmIoRURMQ19YTUFTSykpKTsKIAlQUklOVEszKChLRVJOX0RFQlVHICIlczogUlNUQVQgJSMyLjJ4XG4iLCBkZXYtPm5hbWUsIGluYihFRExDX1JTVEFUKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk1Mi5jIGIvZHJpdmVycy9uZXQvbmk1Mi5jCmluZGV4IGZhODU0YzhmLi5lODg4OTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1Mi5jCkBAIC02MzksNyArNjM5LDcgQEAKIAkvKgogCSAqIFREUiwgd2lyZSBjaGVjayAuLiBlLmcuIG5vIHJlc2lzdG9yIGUudC5jCiAJICovCi0JIAorCiAJdGRyX2NtZCA9IChzdHJ1Y3QgdGRyX2NtZF9zdHJ1Y3QgKilwdHI7CiAKIAl0ZHJfY21kLT5jbWRfc3RhdHVzCT0gMDsKQEAgLTEzMjMsNyArMTMyMyw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKG1lbXN0YXJ0LCAiTkk1MjEwIG1lbW9yeSBiYXNlIGFkZHJlc3MscmVxdWlyZWQiKTsKIE1PRFVMRV9QQVJNX0RFU0MobWVtZW5kLCAiTkk1MjEwIG1lbW9yeSBlbmQgYWRkcmVzcyxyZXF1aXJlZCIpOwogCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpZihpbyA8PSAweDAgfHwgIW1lbWVuZCB8fCAhbWVtc3RhcnQgfHwgaXJxIDwgMikgewogCQlwcmludGsoIm5pNTI6IEF1dG9wcm9iaW5nIG5vdCBhbGxvd2VkIGZvciBtb2R1bGVzLlxubmk1MjogU2V0IHN5bWJvbHMgJ2lvJyAnaXJxJyAnbWVtc3RhcnQnIGFuZCAnbWVtZW5kJ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUyLmggYi9kcml2ZXJzL25ldC9uaTUyLmgKaW5kZXggNjhmMTkxNy4uYTMzZWEwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk1Mi5oCisrKyBiL2RyaXZlcnMvbmV0L25pNTIuaApAQCAtMTEsNyArMTEsNyBAQAogICogICBHYXJyZXQgQS4gV29sbG1hbidzIGk4MjU4Ni1kcml2ZXIgZm9yIEJTRAogICovCiAKLSAKKwogI2RlZmluZSBOSTUyX1JFU0VUICAgICAwICAvKiB3cml0aW5nIHRvIHRoaXMgYWRkcmVzcywgcmVzZXRzIHRoZSBpODI1ODYgKi8KICNkZWZpbmUgTkk1Ml9BVFRFTlRJT04gMSAgLyogY2hhbm5lbCBhdHRlbnRpb24sIGtpY2sgdGhlIDU4NiAqLwogI2RlZmluZSBOSTUyX1RFTkEgICAgICAzICAvKiAyLTUgcG9zc2libHkgd3JvbmcsIFhtaXQgZW5hYmxlICovCkBAIC0xNTEsNyArMTUxLDcgQEAKIC8qCiAgKiBSZWNlaXZlIEJ1ZmZlciBEZXNjcmlwdG9yIChSQkQpCiAgKi8KLXN0cnVjdCByYmRfc3RydWN0IAorc3RydWN0IHJiZF9zdHJ1Y3QKIHsKICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzOwkvKiBzdGF0dXMgd29yZCxudW1iZXIgb2YgdXNlZCBieXRlcyBpbiBidWZmICovCiAgIHVuc2lnbmVkIHNob3J0IG5leHQ7CQkvKiBwb2ludGVyb2Zmc2V0IHRvIG5leHQgUkJEICovCkBAIC0yMDMsNyArMjAzLDcgQEAKIC8qCiAgKiBJQSBTZXR1cCBjb21tYW5kCiAgKi8KLXN0cnVjdCBpYXNldHVwX2NtZF9zdHJ1Y3QgCitzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0CiB7CiAgIHVuc2lnbmVkIHNob3J0IGNtZF9zdGF0dXM7CiAgIHVuc2lnbmVkIHNob3J0IGNtZF9jbWQ7CkBAIC0yMTIsNyArMjEyLDcgQEAKIH07CiAKIC8qCi0gKiBDb25maWd1cmUgY29tbWFuZCAKKyAqIENvbmZpZ3VyZSBjb21tYW5kCiAgKi8KIHN0cnVjdCBjb25maWd1cmVfY21kX3N0cnVjdAogewpAQCAtMjM0LDkgKzIzNCw5IEBACiB9OwogCiAvKgotICogTXVsdGljYXN0IFNldHVwIGNvbW1hbmQgCisgKiBNdWx0aWNhc3QgU2V0dXAgY29tbWFuZAogICovCi1zdHJ1Y3QgbWNzZXR1cF9jbWRfc3RydWN0IAorc3RydWN0IG1jc2V0dXBfY21kX3N0cnVjdAogewogICB1bnNpZ25lZCBzaG9ydCBjbWRfc3RhdHVzOwogICB1bnNpZ25lZCBzaG9ydCBjbWRfY21kOwpAQCAtMjU3LDkgKzI1Nyw5IEBACiB9OwogCiAvKgotICogdHJhbnNtaXQgY29tbWFuZCAKKyAqIHRyYW5zbWl0IGNvbW1hbmQKICAqLwotc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QgCitzdHJ1Y3QgdHJhbnNtaXRfY21kX3N0cnVjdAogewogICB1bnNpZ25lZCBzaG9ydCBjbWRfc3RhdHVzOwogICB1bnNpZ25lZCBzaG9ydCBjbWRfY21kOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmk2NS5jIGIvZHJpdmVycy9uZXQvbmk2NS5jCmluZGV4IGJiNDJmZjIuLmZhYjNjODU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTY1LmMKKysrIGIvZHJpdmVycy9uZXQvbmk2NS5jCkBAIC0zMjQsNyArMzI0LDcgQEAKIAlzdHJ1Y3QgcHJpdiAqcCA9IChzdHJ1Y3QgcHJpdiAqKSBkZXYtPnByaXY7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAlvdXR3KGludyhQT1JUK0xfUkVTRVQpLFBPUlQrTF9SRVNFVCk7IC8qIHRoYXQncyB0aGUgaGFyZCB3YXkgKi8KIAogI2lmZGVmIFhNVF9WSUFfU0tCCkBAIC00ODksMjAgKzQ4OSwyMCBAQAogCQkJCWludCBkbWEgPSBkbWF0YWJbaV07CiAJCQkJaWYodGVzdF9iaXQoZG1hLCZkbWFfY2hhbm5lbHMpIHx8IHJlcXVlc3RfZG1hKGRtYSwibmk2NTEwIikpCiAJCQkJCWNvbnRpbnVlOwotCQkJCQkKKwogCQkJCWZsYWdzPWNsYWltX2RtYV9sb2NrKCk7CiAJCQkJZGlzYWJsZV9kbWEoZG1hKTsKIAkJCQlzZXRfZG1hX21vZGUoZG1hLERNQV9NT0RFX0NBU0NBREUpOwogCQkJCWVuYWJsZV9kbWEoZG1hKTsKIAkJCQlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKLQkJCQkKKwogCQkJCW5pNjVfaW5pdF9sYW5jZShwLGRldi0+ZGV2X2FkZHIsMCwwKTsgLyogdHJpZ2dlciBtZW1vcnkgYWNjZXNzICovCi0JCQkJCisKIAkJCQlmbGFncz1jbGFpbV9kbWFfbG9jaygpOwogCQkJCWRpc2FibGVfZG1hKGRtYSk7CiAJCQkJZnJlZV9kbWEoZG1hKTsKIAkJCQlyZWxlYXNlX2RtYV9sb2NrKGZsYWdzKTsKLQkJCQkKKwogCQkJCWlmKHJlYWRyZWcoQ1NSMCkgJiBDU1IwX0lET04pCiAJCQkJCWJyZWFrOwogCQkJfQpAQCAtODgxLDcgKzg4MSw3IEBACiAJcCA9IChzdHJ1Y3QgcHJpdiAqKSBkZXYtPnByaXY7CiAKIAlzcGluX2xvY2soJnAtPnJpbmdfbG9jayk7Ci0JCisKIAl3aGlsZSgtLWJjbnQpIHsKIAkJY3NyMCA9IGludyhQT1JUK0xfREFUQVJFRyk7CiAKQEAgLTExMzksNyArMTEzOSw3IEBACiAvKgogICoga2ljayB4bWl0dGVyIC4uCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgbmk2NV90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CkBAIC0xMTYzLDcgKzExNjMsNyBAQAogCXN0cnVjdCBwcml2ICpwID0gKHN0cnVjdCBwcml2ICopIGRldi0+cHJpdjsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KDAsICh2b2lkKikmcC0+bG9jaykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogUXVldWUgd2FzIGxvY2tlZC5cbiIsIGRldi0+bmFtZSk7CiAJCXJldHVybiAxOwpAQCAtMTIwOSwxMCArMTIwOSwxMCBAQAogCiAJCWlmKHAtPnRtZG51bSAhPSBwLT50bWRsYXN0KQogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJCisKIAkJcC0+bG9jayA9IDA7CiAJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwotCQkKKwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5yaW5nX2xvY2ssIGZsYWdzKTsKIAl9CiAKQEAgLTEyNTMsNyArMTI1Myw3IEBACiBNT0RVTEVfUEFSTV9ERVNDKGlvLCAibmk2NTEwIEkvTyBiYXNlIGFkZHJlc3MiKTsKIE1PRFVMRV9QQVJNX0RFU0MoZG1hLCAibmk2NTEwIElTQSBETUEgY2hhbm5lbCAoaWdub3JlZCBmb3Igc29tZSBjYXJkcykiKTsKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAgCWRldl9uaTY1ID0gbmk2NV9wcm9iZSgtMSk7CiAJcmV0dXJuIElTX0VSUihkZXZfbmk2NSkgPyBQVFJfRVJSKGRldl9uaTY1KSA6IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTY1LmggYi9kcml2ZXJzL25ldC9uaTY1LmgKaW5kZXggYjAxY2VmMS4uZTYyMTdlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmk2NS5oCisrKyBiL2RyaXZlcnMvbmV0L25pNjUuaApAQCAtMSwxMiArMSwxMiBAQAogLyogYW03OTkwIChsYW5jZSkgZGVmaW5pdGlvbnMKLSAqIAorICoKICAqIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtLCBhbmQgaXMgY292ZXJlZCBieQogICogc2FtZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGF0IGNvdmVycyB0aGF0IHdvcmsuCi0gKiAKKyAqCiAgKiBNaWNoYWVsIEhpcHAKICAqIGVtYWlsOiBtaGlwcEBzdHVkZW50LnVuaS10dWViaW5nZW4uZGUKICAqCi0gKiBzb3VyY2VzOiAobWFpbCBtZSBvciBhc2sgYXJjaGllIGlmIHlvdSBuZWVkIHRoZW0pIAorICogc291cmNlczogKG1haWwgbWUgb3IgYXNrIGFyY2hpZSBpZiB5b3UgbmVlZCB0aGVtKQogICogICAgY3J5bndyLXBhY2tldC1kcml2ZXIKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uczgzODIwLmMgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKaW5kZXggMGU3Njg1OS4uYTA1ZjZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jCisrKyBiL2RyaXZlcnMvbmV0L25zODM4MjAuYwpAQCAtNjUsNyArNjUsNyBAQAogICoJCQkwLjIwIC0JZml4IHN0dXBpZCBSRkVOIHRoaW5rby4gIGkgYW0gc3VjaCBhIHNtdXJmLgogICoJMjAwNDA4MjgJMC4yMSAtCWFkZCBoYXJkd2FyZSB2bGFuIGFjY2xlcmF0aW9uCiAgKgkJCQlieSBOZWlsIEhvcm1hbiA8bmhvcm1hbkByZWRoYXQuY29tPgotICoJMjAwNTA0MDYJMC4yMiAtCWltcHJvdmVkIERBQyBpZmRlZnMgZnJvbSBBbmRpIEtsZWVuCQorICoJMjAwNTA0MDYJMC4yMiAtCWltcHJvdmVkIERBQyBpZmRlZnMgZnJvbSBBbmRpIEtsZWVuCiAgKgkJCSAgICAgLQlyZW1vdmFsIG9mIGRlYWQgY29kZSBmcm9tIEFkcmlhbiBCdW5rCiAgKgkJCSAgICAgLQlmaXggaGFsZiBkdXBsZXggY29sbGlzaW9uIGJlaGF2aW91cgogICogRHJpdmVyIE92ZXJ2aWV3CkBAIC0zNzcsNyArMzc3LDcgQEAKICNkZWZpbmUgTElOS19ET1dOCQkweDAyCiAjZGVmaW5lIExJTktfVVAJCQkweDA0CiAKLSNkZWZpbmUgSFdfQUREUl9MRU4Jc2l6ZW9mKGRtYV9hZGRyX3QpIAorI2RlZmluZSBIV19BRERSX0xFTglzaXplb2YoZG1hX2FkZHJfdCkKICNkZWZpbmUgZGVzY19hZGRyX3NldChkZXNjLCBhZGRyKQkJCQlcCiAJZG8gewkJCQkJCQlcCiAJCSgoZGVzYylbMF0gPSBjcHVfdG9fbGUzMihhZGRyKSk7CQlcCkBAIC00OTMsNyArNDkzLDcgQEAKIAkoKChOUl9UWF9ERVNDLTIgKyBkZXYtPnR4X2RvbmVfaWR4IC0gZGV2LT50eF9mcmVlX2lkeCkgJSBOUl9UWF9ERVNDKSA+IE1JTl9UWF9ERVNDX0ZSRUUpCiAKIAotI2lmZGVmIE5TODM4MjBfVkxBTl9BQ0NFTF9TVVBQT1JUIAorI2lmZGVmIE5TODM4MjBfVkxBTl9BQ0NFTF9TVVBQT1JUCiBzdGF0aWMgdm9pZCBuczgzODIwX3ZsYW5fcnhfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCiB7CiAJc3RydWN0IG5zODM4MjAgKmRldiA9IFBSSVYobmRldik7CkBAIC04NjUsNyArODY1LDcgQEAKIH0KIAogLyogcnhfaXJxCi0gKgkKKyAqCiAgKi8KIHN0YXRpYyB2b2lkIEZBU1RDQUxMKHJ4X2lycShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikpOwogc3RhdGljIHZvaWQgZmFzdGNhbGwgcnhfaXJxKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQpAQCAtOTIxLDE0ICs5MjEsMTQgQEAKIAkJICogdGhhdCBhcmUgNjQgYnl0ZXMgd2l0aCBhIHZsYW4gaGVhZGVyIGFwcGVuZGVkCiAJCSAqIGxpa2UgYXJwIGZyYW1lcywgb3IgcGluZ3MsIGFyZSBmbGFnZ2VkIGFzIFJ1bnRzCiAJCSAqIHdoZW4gdGhlIHRhZyBpcyBzdHJpcHBlZCBhbmQgaGFyZHdhcmUuICBUaGlzCi0JCSAqIGFsc28gbWVhbnMgdGhhdCB0aGUgT0sgYml0IGluIHRoZSBkZXNjcmlwdG9yIAorCQkgKiBhbHNvIG1lYW5zIHRoYXQgdGhlIE9LIGJpdCBpbiB0aGUgZGVzY3JpcHRvcgogCQkgKiBpcyBjbGVhcmVkIHdoZW4gdGhlIGZyYW1lIGNvbWVzIGluIHNvIHdlIGhhdmUKIAkJICogdG8gZG8gYSBzcGVjaWZpYyBsZW5ndGggY2hlY2sgaGVyZSB0byBtYWtlIHN1cmUKIAkJICogdGhlIGZyYW1lIHdvdWxkIGhhdmUgYmVlbiBvaywgaGFkIHdlIG5vdCBzdHJpcHBlZAogCQkgKiB0aGUgdGFnLgotCQkgKi8gCisJCSAqLwogCQlpZiAobGlrZWx5KChDTURTVFNfT0sgJiBjbWRzdHMpIHx8Ci0JCQkoKGNtZHN0cyAmIENNRFNUU19SVU5UKSAmJiBsZW4gPj0gNTYpKSkgeyAgIAorCQkJKChjbWRzdHMgJiBDTURTVFNfUlVOVCkgJiYgbGVuID49IDU2KSkpIHsKICNlbHNlCiAJCWlmIChsaWtlbHkoQ01EU1RTX09LICYgY21kc3RzKSkgewogI2VuZGlmCkBAIC05NDUsNyArOTQ1LDcgQEAKIAkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CiAJCQl9CiAJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKLSNpZmRlZiBOUzgzODIwX1ZMQU5fQUNDRUxfU1VQUE9SVCAKKyNpZmRlZiBOUzgzODIwX1ZMQU5fQUNDRUxfU1VQUE9SVAogCQkJaWYoZXh0c3RzICYgRVhUU1RTX1ZQS1QpIHsKIAkJCQl1bnNpZ25lZCBzaG9ydCB0YWc7CiAJCQkJdGFnID0gbnRvaHMoZXh0c3RzICYgRVhUU1RTX1ZUR19NQVNLKTsKQEAgLTEwNDcsNyArMTA0Nyw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQkJYXRvbWljX2RlYygmZGV2LT5ucl90eF9za2JzKTsKIAkJfSBlbHNlCi0JCQlwY2lfdW5tYXBfcGFnZShkZXYtPnBjaV9kZXYsIAorCQkJcGNpX3VubWFwX3BhZ2UoZGV2LT5wY2lfZGV2LAogCQkJCQlhZGRyLAogCQkJCQlsZW4sCiAJCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwpAQCAtMTI3Myw3ICsxMjczLDcgQEAKIAlyZXR1cm4gY2ZnICYgQ0ZHX0xOS1NUUyA/IDEgOiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IG5zODM4MjBfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rID0gbnM4MzgyMF9nZXRfbGluawogfTsKQEAgLTEzNTksOCArMTM1OSw4IEBACiAJCQlkZXYtPnR4X2lkeCA9IDA7CiAJCX0KIAkJLyogVGhlIG1heSBoYXZlIGJlZW4gYSByYWNlIGJldHdlZW4gYSBwY2kgb3JpZ2luYXRlZCByZWFkCi0JCSAqIGFuZCB0aGUgZGVzY3JpcHRvciB1cGRhdGUgZnJvbSB0aGUgY3B1LiAgSnVzdCBpbiBjYXNlLCAKLQkJICoga2ljayB0aGUgdHJhbnNtaXR0ZXIgaWYgdGhlIGhhcmR3YXJlIHRoaW5rcyBpdCBpcyBvbiBhIAorCQkgKiBhbmQgdGhlIGRlc2NyaXB0b3IgdXBkYXRlIGZyb20gdGhlIGNwdS4gIEp1c3QgaW4gY2FzZSwKKwkJICoga2ljayB0aGUgdHJhbnNtaXR0ZXIgaWYgdGhlIGhhcmR3YXJlIHRoaW5rcyBpdCBpcyBvbiBhCiAJCSAqIGRpZmZlcmVudCBkZXNjcmlwdG9yIHRoYW4gd2UgYXJlLgogCQkgKi8KIAkJaWYgKGRldi0+dHhfaWR4ICE9IGRldi0+dHhfZnJlZV9pZHgpCkBAIC0xMzg4LDggKzEzODgsOCBAQAogCiAJLyogVGhlIFR4SWRsZSBpbnRlcnJ1cHQgY2FuIGNvbWUgaW4gYmVmb3JlIHRoZSB0cmFuc21pdCBoYXMKIAkgKiBjb21wbGV0ZWQuICBOb3JtYWxseSB3ZSByZWFwIHBhY2tldHMgb2ZmIG9mIHRoZSBjb21iaW5hdGlvbgotCSAqIG9mIFR4RGVzYyBhbmQgVHhJZGxlIGFuZCBsZWF2ZSBUeE9rIGRpc2FibGVkIChzaW5jZSBpdCAKLQkgKiBvY2N1cnMgb24gZXZlcnkgcGFja2V0KSwgYnV0IHdoZW4gbm8gZnVydGhlciBpcnFzIG9mIHRoaXMgCisJICogb2YgVHhEZXNjIGFuZCBUeElkbGUgYW5kIGxlYXZlIFR4T2sgZGlzYWJsZWQgKHNpbmNlIGl0CisJICogb2NjdXJzIG9uIGV2ZXJ5IHBhY2tldCksIGJ1dCB3aGVuIG5vIGZ1cnRoZXIgaXJxcyBvZiB0aGlzCiAJICogbmF0dXJlIGFyZSBleHBlY3RlZCwgd2UgbXVzdCBlbmFibGUgVHhPay4KIAkgKi8KIAlpZiAoKElTUl9UWElETEUgJiBpc3IpICYmIChkZXYtPnR4X2RvbmVfaWR4ICE9IGRldi0+dHhfZnJlZV9pZHgpKSB7CkBAIC0xOTU2LDcgKzE5NTYsNyBAQAogCS8qIFdoZW4gY29tcGlsZWQgd2l0aCA2NCBiaXQgYWRkcmVzc2luZywgd2UgbXVzdCBhbHdheXMgZW5hYmxlCiAJICogdGhlIDY0IGJpdCBkZXNjcmlwdG9yIGZvcm1hdC4KIAkgKi8KLQlpZiAoc2l6ZW9mKGRtYV9hZGRyX3QpID09IDgpIAorCWlmIChzaXplb2YoZG1hX2FkZHJfdCkgPT0gOCkKIAkJZGV2LT5DRkdfY2FjaGUgfD0gQ0ZHX002NEFERFI7CiAJaWYgKHVzaW5nX2RhYykKIAkJZGV2LT5DRkdfY2FjaGUgfD0gQ0ZHX1Q2NEFERFI7CkBAIC0xOTk0LDcgKzE5OTQsNyBAQAogCQl3cml0ZWwoZGV2LT5DRkdfY2FjaGUsIGRldi0+YmFzZSArIENGRyk7CiAJfQogCi0jaWYgMAkvKiBIdWg/ICBUaGlzIHNldHMgdGhlIFBDSSBsYXRlbmN5IHJlZ2lzdGVyLiAgU2hvdWxkIGJlIGRvbmUgdmlhIAorI2lmIDAJLyogSHVoPyAgVGhpcyBzZXRzIHRoZSBQQ0kgbGF0ZW5jeSByZWdpc3Rlci4gIFNob3VsZCBiZSBkb25lIHZpYQogCSAqIHRoZSBQQ0kgbGF5ZXIuICBGSVhNRS4KIAkgKi8KIAlpZiAocmVhZGwoZGV2LT5iYXNlICsgU1JSKSkKQEAgLTIwMDYsNyArMjAwNiw3IEBACiAJICogY2FuIGJlIHRyYW5zbWl0dGVkIGlzIDgxOTIgLSBGTFRIIC0gYnVyc3Qgc2l6ZS4KIAkgKiBJZiBvbmx5IHRoZSB0cmFuc21pdCBmaWZvIHdhcyBsYXJnZXIuLi4KIAkgKi8KLQkvKiBSYW1pdCA6IDEwMjQgRE1BIGlzIG5vdCBhIGdvb2QgaWRlYSwgaXQgZW5kcyB1cCBiYW5naW5nIAorCS8qIFJhbWl0IDogMTAyNCBETUEgaXMgbm90IGEgZ29vZCBpZGVhLCBpdCBlbmRzIHVwIGJhbmdpbmcKIAkgKiBzb21lIERFTEwgYW5kIENPTVBBUSBTTVAgc3lzdGVtcyAqLwogCXdyaXRlbChUWENGR19DU0kgfCBUWENGR19IQkkgfCBUWENGR19BVFAgfCBUWENGR19NWERNQTUxMgogCQl8ICgoMTYwMCAvIDMyKSAqIDB4MTAwKSwKQEAgLTIwMjAsOCArMjAyMCw4IEBACiAJLyogU2V0IFJ4IHRvIGZ1bGwgZHVwbGV4LCBkb24ndCBhY2NlcHQgcnVudCwgZXJyb3JlZCwgbG9uZyBvciBsZW5ndGgKIAkgKiByYW5nZSBlcnJvcmVkIHBhY2tldHMuICBVc2UgNTEyIGJ5dGUgRE1BLgogCSAqLwotCS8qIFJhbWl0IDogMTAyNCBETUEgaXMgbm90IGEgZ29vZCBpZGVhLCBpdCBlbmRzIHVwIGJhbmdpbmcgCi0JICogc29tZSBERUxMIGFuZCBDT01QQVEgU01QIHN5c3RlbXMgCisJLyogUmFtaXQgOiAxMDI0IERNQSBpcyBub3QgYSBnb29kIGlkZWEsIGl0IGVuZHMgdXAgYmFuZ2luZworCSAqIHNvbWUgREVMTCBhbmQgQ09NUEFRIFNNUCBzeXN0ZW1zCiAJICogVHVybiBvbiBBTFAsIG9ubHkgd2UgYXJlIGFjY3BldGluZyBKdW1ibyBQYWNrZXRzICovCiAJd3JpdGVsKFJYQ0ZHX0FFUCB8IFJYQ0ZHX0FSUCB8IFJYQ0ZHX0FJUkwgfCBSWENGR19SWF9GRAogCQl8IFJYQ0ZHX1NUUklQQ1JDCkBAIC0yMDQ1LDcgKzIwNDUsNyBAQAogCSAqIGFsc28gdHVybiBvbiB0YWcgc3RyaXBwaW5nIGlmIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiBpcyBlbmFibGVkCiAJICovCiAjaWZkZWYgTlM4MzgyMF9WTEFOX0FDQ0VMX1NVUFBPUlQKLSNkZWZpbmUgVlJDUl9JTklUX1ZBTFVFIChWUkNSX0lQRU58VlJDUl9WVERFTnxWUkNSX1ZUUkVOKSAKKyNkZWZpbmUgVlJDUl9JTklUX1ZBTFVFIChWUkNSX0lQRU58VlJDUl9WVERFTnxWUkNSX1ZUUkVOKQogI2Vsc2UKICNkZWZpbmUgVlJDUl9JTklUX1ZBTFVFIChWUkNSX0lQRU58VlJDUl9WVERFTikKICNlbmRpZgpAQCAtMjE3OCw3ICsyMTc4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5zODM4MjBfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0lORk8gIm5zODM4MjAuYzogTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBEUDgzODIwIDEwLzEwMC8xMDAwIGRyaXZlci5cbiIpOwotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBuczgzODIwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L29ha25ldC5jIGIvZHJpdmVycy9uZXQvb2FrbmV0LmMKaW5kZXggZDBmNjg2ZC4uNzAyZTNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvb2FrbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvb2FrbmV0LmMKQEAgLTksNyArOSw3IEBACiAgKiAgICAgIG9uLWJvYXJkIHRoZSBJQk0gUG93ZXJQQyAiT2FrIiBldmFsdWF0aW9uIGJvYXJkLiBBZGFwdGVkIGZyb20gdGhlCiAgKiAgICAgIHZhcmlvdXMgb3RoZXIgODM5MCBkcml2ZXJzIHdyaXR0ZW4gYnkgRG9uYWxkIEJlY2tlciBhbmQgUGF1bCBHb3J0bWFrZXIuCiAgKgotICogICAgICBBZGRpdGlvbmFsIGluc3BpcmF0aW9uIGZyb20gdGhlICJ0Y2Q4MzkwLmMiIGRyaXZlciBmcm9tIFRpVm8sIEluYy4gCisgKiAgICAgIEFkZGl0aW9uYWwgaW5zcGlyYXRpb24gZnJvbSB0aGUgInRjZDgzOTAuYyIgZHJpdmVyIGZyb20gVGlWbywgSW5jLgogICogICAgICBhbmQgImVuZXRMaWIuYyIgZnJvbSBJQk0uCiAgKgogICovCkBAIC05OCw3ICs5OCw3IEBACiAJaW50IHJldCA9IC1FTk9NRU07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICNpZiAwCi0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBPQUtORVRfSU9fQkFTRTsgCisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBPQUtORVRfSU9fQkFTRTsKICNlbHNlCiAJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBpb3JlbWFwKE9BS05FVF9JT19CQVNFLCBPQUtORVRfSU9fU0laRSk7CiAjZW5kaWYKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXJldCA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X2lycTsKLQkKKwogCW9ha25ldF9kZXZzID0gZGV2OwogCXJldHVybiAwOwogCkBAIC00NDcsOCArNDQ3LDggQEAKICAqIElucHV0KHMpOgogICogICpkZXYgICAgICAgIC0gUG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZSBmb3IgdGhpcyBkcml2ZXIuCiAgKiAgIGNvdW50ICAgICAgLSBOdW1iZXIgb2YgYnl0ZXMgdG8gYmUgdHJhbnNmZXJyZWQuCi0gKiAgKmJ1ZiAgICAgICAgLSAKLSAqICAgc3RhcnRfcGFnZSAtIAorICogICpidWYgICAgICAgIC0KKyAqICAgc3RhcnRfcGFnZSAtCiAgKgogICogT3V0cHV0KHMpOgogICogICBOL0EKQEAgLTU4NCw3ICs1ODQsNyBAQAogCSAqIFRoaXMgd2FzIGZvciB0aGUgQUxQSEEgdmVyc2lvbiBvbmx5LCBidXQgZW5vdWdoIHBlb3BsZSBoYXZlCiAJICogYmVlbiBlbmNvdW50ZXJpbmcgcHJvYmxlbXMgc28gaXQgaXMgc3RpbGwgaGVyZS4KIAkgKi8KLQkKKwogCXsKIAkJLyogRE1BIHRlcm1pbmF0aW9uIGFkZHJlc3MgY2hlY2suLi4gKi8KIAkJaW50IGFkZHIsIHRyaWVzID0gMjA7CkBAIC02MTQsNyArNjE0LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCQorCiAJZWlfb2JwKEVOSVNSX1JEQywgYmFzZSArIEVOMF9JU1IpOwkvKiBBY2sgaW50ci4gKi8KIAllaV9zdGF0dXMuZG1haW5nICY9IH4weDAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNpLXNrZWxldG9uLmMgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwppbmRleCBlMGUyOTM5Li4yNjg3ZTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYworKysgYi9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYwpAQCAtOTgsNyArOTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNkZWZpbmUgTkVURFJWX1ZFUlNJT04JCSIxLjAuMCIKKyNkZWZpbmUgTkVURFJWX1ZFUlNJT04JCSIxLjAuMSIKICNkZWZpbmUgTU9ETkFNRQkJCSJuZXRkcnYiCiAjZGVmaW5lIE5FVERSVl9EUklWRVJfTE9BRF9NU0cJIk15VmVuZG9yIEZhc3QgRXRoZXJuZXQgZHJpdmVyICIgTkVURFJWX1ZFUlNJT04gIiBsb2FkZWQiCiAjZGVmaW5lIFBGWAkJCU1PRE5BTUUgIjogIgpAQCAtMTMxOCw3ICsxMzE4LDcgQEAKIAogCS8qIFN0b3AgYSBzaGFyZWQgaW50ZXJydXB0IGZyb20gc2NhdmVuZ2luZyB3aGlsZSB3ZSBhcmUuICovCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9jaywgZmxhZ3MpOwotCQorCiAJbmV0ZHJ2X3R4X2NsZWFyICh0cCk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKQEAgLTE4NTMsOSArMTg1Myw2IEBACiAKIAkvKiBOb3RlOiBkbyBub3QgcmVvcmRlciwgR0NDIGlzIGNsZXZlciBhYm91dCBjb21tb24gc3RhdGVtZW50cy4gKi8KIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7Ci0JCS8qIFVuY29uZGl0aW9uYWxseSBsb2cgbmV0IHRhcHMuICovCi0JCXByaW50ayAoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAotCQkJZGV2LT5uYW1lKTsKIAkJcnhfbW9kZSA9CiAJCSAgICBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXMgfAogCQkgICAgQWNjZXB0QWxsUGh5czsKQEAgLTE5NjMsNyArMTk2MCw3IEBACiAjaWZkZWYgTU9EVUxFCiAJcHJpbnRrKHZlcnNpb24pOwogI2VuZGlmCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJm5ldGRydl9wY2lfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbmV0ZHJ2X3BjaV9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKaW5kZXggZmFiOTMzNi4uMjQxOGNkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTc0X2NzLmMKQEAgLTI0NSw3ICsyNDUsNyBAQAogc3RhdGljIGludCBlbDNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZWwzX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgdm9pZCB0YzU3NF9kZXRhY2goc3RydWN0IHBjbWNpYV9kZXZpY2UgKnBfZGV2KTsKQEAgLTEwOTUsNyArMTA5NSw3IEBACiAJc3RyY3B5KGluZm8tPmRyaXZlciwgIjNjNTc0X2NzIik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKaW5kZXggODc1YTBmZS4uYTBlMmIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhLzNjNTg5X2NzLmMKQEAgLTE1OCw3ICsxNTgsNyBAQAogc3RhdGljIGludCBlbDNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBlbDNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKIHN0YXRpYyB2b2lkIHRjNTg5X2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYpOwogCkBAIC01MzAsNyArNTMwLDcgQEAKIH0KICNlbmRpZiAvKiBQQ01DSUFfREVCVUcgKi8KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogI2lmZGVmIFBDTUNJQV9ERUJVRwogCS5nZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X2dldF9tc2dsZXZlbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKaW5kZXggMjk3ZTlmOC4uYTg4OTFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2F4bmV0X2NzLmMKQEAgLTkxLDcgKzkxLDcgQEAKIHN0YXRpYyBpbnQgYXhuZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgYXhuZXRfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGF4bmV0X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyBpcnFyZXR1cm5fdCBlaV9pcnFfd3JhcHBlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyB2b2lkIGVpX3dhdGNoZG9nKHVfbG9uZyBhcmcpOwogc3RhdGljIHZvaWQgYXhuZXRfcmVzZXRfODM5MChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKQEAgLTY3MSw3ICs2NzEsNyBAQAogCXN0cmNweShpbmZvLT5kcml2ZXIsICJheG5ldF9jcyIpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiB9OwogCkBAIC03NzEsNiArNzcxLDcgQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyNmYsIDB4MDMwOSksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHgwMjc0LCAweDExMDYpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4OGEwMSwgMHhjMWFiKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyMWIsIDB4MDIwMiksIAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBbWJpQ29tLEluYy4iLCAiRmFzdCBFdGhlcm5ldCBQQyBDYXJkKEFNQjgxMTApIiwgMHg0OWIwMjBhNywgMHgxMTljYzlmYyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTI0KCJGYXN0IEV0aGVybmV0IiwgIjE2LWJpdCBQQyBDYXJkIiwgIkFYODgxOTAiLCAweGI0YmUxNGUzLCAweDlhMTJlYjZhLCAweGFiOWJlNWVmKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVNJWCIsICJBWDg4MTkwIiwgMHgwOTU5ODIzYiwgMHhhYjliZTVlZiksCkBAIC03ODYsOCArNzg3LDYgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUENNQ0lBIiwgIkZhc3RFdGhlckNhcmQiLCAweDI4MWYxYzVkLCAweDdlZjI2MTE2KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUENNQ0lBIiwgIkZFUDUwMSIsIDB4MjgxZjFjNWQsIDB4MmUyNzIwNTgpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDE0KCJOZXR3b3JrIEV2ZXJ5d2hlcmUiLCAiQVg4ODE5MCIsIDB4ODIwYTY3YjYsICAweGFiOWJlNWVmKSwKLQkvKiB0aGlzIGlzIG5vdCBzcGVjaWZpYyBlbm91Z2ggKi8KLQkvKiBQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAyMWIsIDB4MDIwMiksICovCiAJUENNQ0lBX0RFVklDRV9OVUxMLAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBheG5ldF9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKaW5kZXggZWE5M2I4ZjEuLmQ2ODJmMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwpAQCAtMjksNyArMjksNyBAQAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKICNkZWZpbmUgRFJWX05BTUUJImZtdmoxOHhfY3MiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIyLjgiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIyLjkiCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTEwMyw3ICsxMDMsNyBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpmam5fZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBmam5fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiAKIC8qCiAgICAgY2FyZCB0eXBlCkBAIC0xMDkyLDcgKzEwOTIsNyBAQAogfQogI2VuZGlmIC8qIFBDTUNJQV9ERUJVRyAqLwogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAjaWZkZWYgUENNQ0lBX0RFQlVHCiAJLmdldF9tc2dsZXZlbAkJPSBuZXRkZXZfZ2V0X21zZ2xldmVsLApAQCAtMTE5Myw4ICsxMTkzLDYgQEAKIAlvdXRiKENPTkZJRzBfUlNUXzEsIGlvYWRkciArIENPTkZJR18wKTsKIAogICAgIGlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCXByaW50aygiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CiAJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCW91dGIoMywgaW9hZGRyICsgUlhfTU9ERSk7CS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAgICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gTUNfRklMVEVSQlJFQUsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9pYm10cl9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKaW5kZXggYjhmZTcwYi4uYmMwY2E0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL2libXRyX2NzLmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXN0cmNweShpbmZvLT5kcml2ZXIsICJpYm10cl9jcyIpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMgYi9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKaW5kZXggYThmNmJmYy4uN2Q1Njg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwpAQCAtNDMxLDcgKzQzMSw3IEBACiBzdGF0aWMgaW50IG1hY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBSeENudCk7CiBzdGF0aWMgdm9pZCByZXN0b3JlX211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIAogCiBzdGF0aWMgdm9pZCBubWNsYW5fZGV0YWNoKHN0cnVjdCBwY21jaWFfZGV2aWNlICpwX2Rldik7CkBAIC05MDcsNyArOTA3LDcgQEAKIH0KICNlbmRpZiAvKiBQQ01DSUFfREVCVUcgKi8KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogI2lmZGVmIFBDTUNJQV9ERUJVRwogCS5nZXRfbXNnbGV2ZWwJCT0gbmV0ZGV2X2dldF9tc2dsZXZlbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9wY25ldF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKaW5kZXggMGVjZWJmYy4uYTA5YzIyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3BjbmV0X2NzLmMKQEAgLTEwOCw3ICsxMDgsNyBAQAogc3RhdGljIGludCBwY25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBwY25ldF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgZWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGlycXJldHVybl90IGVpX2lycV93cmFwcGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgZWlfd2F0Y2hkb2codV9sb25nIGFyZyk7CiBzdGF0aWMgdm9pZCBwY25ldF9yZXNldF84MzkwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNjU0LDExICs2NTQsOCBAQAogICAgIFNFVF9FVEhUT09MX09QUyhkZXYsICZuZXRkZXZfZXRodG9vbF9vcHMpOwogCiAgICAgaWYgKGluZm8tPmZsYWdzICYgKElTX0RMMTAwMTl8SVNfREwxMDAyMikpIHsKLQl1X2NoYXIgaWQgPSBpbmIoZGV2LT5iYXNlX2FkZHIgKyAweDFhKTsKIAlkZXYtPmRvX2lvY3RsID0gJmVpX2lvY3RsOwogCW1paV9waHlfcHJvYmUoZGV2KTsKLQlpZiAoKGlkID09IDB4MzApICYmICFpbmZvLT5wbmFfcGh5ICYmIChpbmZvLT5ldGhfcGh5ID09IDQpKQotCSAgICBpbmZvLT5ldGhfcGh5ID0gMDsKICAgICB9CiAKICAgICBsaW5rLT5kZXZfbm9kZSA9ICZpbmZvLT5ub2RlOwpAQCAtODIxLDE1ICs4MTgsNiBAQAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgbWRpb19yZXNldChraW9fYWRkcl90IGFkZHIsIGludCBwaHlfaWQpCi17Ci0gICAgb3V0Yl9wKDB4MDgsIGFkZHIpOwotICAgIG91dGJfcCgweDBjLCBhZGRyKTsKLSAgICBvdXRiX3AoMHgwOCwgYWRkcik7Ci0gICAgb3V0Yl9wKDB4MGMsIGFkZHIpOwotICAgIG91dGJfcCgweDAwLCBhZGRyKTsKLX0KLQogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKICAgICBFRVBST00gYWNjZXNzIHJvdXRpbmVzIGZvciBETDEwMDE5IGFuZCBETDEwMDIyIGJhc2VkIGNhcmRzCkBAIC05NDIsNyArOTMwLDggQEAKICAgICB9CiAgICAgaWYgKGluZm8tPmZsYWdzICYgSVNfREwxMDAyMikgewogCWlmIChpbmZvLT5mbGFncyAmIEhBU19NSUkpIHsKLQkgICAgbWRpb19yZXNldChuaWNfYmFzZSArIERMSU5LX0dQSU8sIGluZm8tPmV0aF9waHkpOworCSAgICAvKiBBZHZlcnRpc2UgMTAwRiwgMTAwSCwgMTBGLCAxMEggKi8KKwkgICAgbWRpb193cml0ZShuaWNfYmFzZSArIERMSU5LX0dQSU8sIGluZm8tPmV0aF9waHksIDQsIDB4MDFlMSk7CiAJICAgIC8qIFJlc3RhcnQgTUlJIGF1dG9uZWdvdGlhdGlvbiAqLwogCSAgICBtZGlvX3dyaXRlKG5pY19iYXNlICsgRExJTktfR1BJTywgaW5mby0+ZXRoX3BoeSwgMCwgMHgwMDAwKTsKIAkgICAgbWRpb193cml0ZShuaWNfYmFzZSArIERMSU5LX0dQSU8sIGluZm8tPmV0aF9waHksIDAsIDB4MTIwMCk7CkBAIC0xMTkyLDcgKzExODEsNyBAQAogCXN0cmNweShpbmZvLT5kcml2ZXIsICJwY25ldF9jcyIpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IGE3M2Q1NDUuLmEyZjNhMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC04MCwxNCArODAsMTQgQEAKICNpZmRlZiBQQ01DSUFfREVCVUcKIElOVF9NT0RVTEVfUEFSTShwY19kZWJ1ZywgUENNQ0lBX0RFQlVHKTsKIHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0KLSJzbWM5MWM5Ml9jcy5jIDAuMDkgMTk5Ni84LzQgRG9uYWxkIEJlY2tlciwgYmVja2VyQHNjeWxkLmNvbS5cbiI7Cisic21jOTFjOTJfY3MuYyAxLjEyMyAyMDA2LzExLzA5IERvbmFsZCBCZWNrZXIsIGJlY2tlckBzY3lsZC5jb20uXG4iOwogI2RlZmluZSBERUJVRyhuLCBhcmdzLi4uKSBpZiAocGNfZGVidWc+KG4pKSBwcmludGsoS0VSTl9ERUJVRyBhcmdzKQogI2Vsc2UKICNkZWZpbmUgREVCVUcobiwgYXJncy4uLikKICNlbmRpZgogCiAjZGVmaW5lIERSVl9OQU1FCSJzbWM5MWM5Ml9jcyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMTIyIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4xMjMiCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCkBAIC0yOTksNyArMjk5LDcgQEAKIHN0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2MpOwogc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsdWUpOwogc3RhdGljIGludCBzbWNfbGlua19vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTc4MCw3ICsxNzgwLDYgQEAKICAgICB1X3Nob3J0IHJ4X2NmZ19zZXR0aW5nOwogCiAgICAgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHNldHRpbmcgUnggbW9kZSB0byBwcm9taXNjdW91cy5cbiIsIGRldi0+bmFtZSk7CiAJcnhfY2ZnX3NldHRpbmcgPSBSeFN0cmlwQ1JDIHwgUnhFbmFibGUgfCBSeFByb21pc2MgfCBSeEFsbE11bHRpOwogICAgIH0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKIAlyeF9jZmdfc2V0dGluZyA9IFJ4U3RyaXBDUkMgfCBSeEVuYWJsZSB8IFJ4QWxsTXVsdGk7CkBAIC0yMjA4LDcgKzIyMDcsNyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5iZWdpbiA9IGNoZWNrX2lmX3J1bm5pbmcsCiAJLmdldF9kcnZpbmZvID0gc21jX2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBzbWNfZ2V0X3NldHRpbmdzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggOWJhZTc3Yy4uNjI2NjRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEveGlyYzJwc19jcy5jCkBAIC0zNDUsNiArMzQ1LDcgQEAKICAgICB2b2lkIF9faW9tZW0gKmRpbmdvX2NjcjsgLyogb25seSB1c2VkIGZvciBDRU01NiBjYXJkcyAqLwogICAgIHVuc2lnbmVkIGxhc3RfcHRyX3ZhbHVlOyAvKiBsYXN0IHBhY2tldHMgdHJhbnNtaXR0ZWQgdmFsdWUgKi8KICAgICBjb25zdCBjaGFyICptYW5mX3N0cjsKKyAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF90YXNrOwogfSBsb2NhbF9pbmZvX3Q7CiAKIC8qKioqKioqKioqKioqKioqCkBAIC0zNTIsNiArMzUzLDcgQEAKICAqLwogc3RhdGljIGludCBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgZG9fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyB2b2lkIHhpcmMycHNfdHhfdGltZW91dF90YXNrKHZvaWQgKmRhdGEpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkb19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBzZXRfYWRkcmVzc2VzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMzU5LDcgKzM2MSw3IEBACiBzdGF0aWMgaW50IGRvX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZtYXAgKm1hcCk7CiBzdGF0aWMgaW50IGRvX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGRvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIGhhcmRyZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGRvX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmdWxsKTsKIHN0YXRpYyBpbnQgaW5pdF9taWkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC01ODksNiArNTkxLDcgQEAKICNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKICAgICBkZXYtPnR4X3RpbWVvdXQgPSBkb190eF90aW1lb3V0OwogICAgIGRldi0+d2F0Y2hkb2dfdGltZW8gPSBUWF9USU1FT1VUOworICAgIElOSVRfV09SSygmbG9jYWwtPnR4X3RpbWVvdXRfdGFzaywgeGlyYzJwc190eF90aW1lb3V0X3Rhc2ssIGRldik7CiAjZW5kaWYKIAogICAgIHJldHVybiB4aXJjMnBzX2NvbmZpZyhsaW5rKTsKQEAgLTEzNDEsMTcgKzEzNDQsMjQgQEAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdm9pZAotZG9fdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreGlyYzJwc190eF90aW1lb3V0X3Rhc2sodm9pZCAqZGF0YSkKIHsKLSAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB0cmFuc21pdCB0aW1lZCBvdXRcbiIsIGRldi0+bmFtZSk7Ci0gICAgbHAtPnN0YXRzLnR4X2Vycm9ycysrOworICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhOwogICAgIC8qIHJlc2V0IHRoZSBjYXJkICovCiAgICAgZG9fcmVzZXQoZGV2LDEpOwogICAgIGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogICAgIG5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQKK2RvX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKyAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKyAgICBscC0+c3RhdHMudHhfZXJyb3JzKys7CisgICAgcHJpbnRrKEtFUk5fTk9USUNFICIlczogdHJhbnNtaXQgdGltZWQgb3V0XG4iLCBkZXYtPm5hbWUpOworICAgIHNjaGVkdWxlX3dvcmsoJmxwLT50eF90aW1lb3V0X3Rhc2spOworfQorCiBzdGF0aWMgaW50CiBkb19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xNTQzLDcgKzE1NTMsNyBAQAogCXNwcmludGYoaW5mby0+YnVzX2luZm8sICJQQ01DSUEgMHglbHgiLCBkZXYtPmJhc2VfYWRkcik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCA0ZGFhZmUzLi4yMWRjNjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0yMSw5ICsyMSwxNSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKICNkZWZpbmUgRFJWX05BTUUJInBjbmV0MzIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjMyIgotI2RlZmluZSBEUlZfUkVMREFURQkiMTguTWFyLjIwMDYiCisjaWZkZWYgQ09ORklHX1BDTkVUMzJfTkFQSQorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4zMy1OQVBJIgorI2Vsc2UKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzMiCisjZW5kaWYKKyNkZWZpbmUgRFJWX1JFTERBVEUJIjI3Lkp1bi4yMDA2IgogI2RlZmluZSBQRlgJCURSVl9OQU1FICI6ICIKIAogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IHZlcnNpb24gPQpAQCAtMjAyLDEwICsyMDgsMTIgQEAKICNkZWZpbmUgQ1NSMTUJCTE1CiAjZGVmaW5lIFBDTkVUMzJfTUNfRklMVEVSCTgKIAorI2RlZmluZSBQQ05FVDMyXzc5Qzk3MEEJMHgyNjIxCisKIC8qIFRoZSBQQ05FVDMyIFJ4IGFuZCBUeCByaW5nIGRlc2NyaXB0b3JzLiAqLwogc3RydWN0IHBjbmV0MzJfcnhfaGVhZCB7CiAJdTMyCWJhc2U7Ci0JczE2CWJ1Zl9sZW5ndGg7CisJczE2CWJ1Zl9sZW5ndGg7CS8qIHR3b2BzIGNvbXBsZW1lbnQgb2YgbGVuZ3RoICovCiAJczE2CXN0YXR1czsKIAl1MzIJbXNnX2xlbmd0aDsKIAl1MzIJcmVzZXJ2ZWQ7CkBAIC0yMTMsNyArMjIxLDcgQEAKIAogc3RydWN0IHBjbmV0MzJfdHhfaGVhZCB7CiAJdTMyCWJhc2U7Ci0JczE2CWxlbmd0aDsKKwlzMTYJbGVuZ3RoOwkJLyogdHdvYHMgY29tcGxlbWVudCBvZiBsZW5ndGggKi8KIAlzMTYJc3RhdHVzOwogCXUzMgltaXNjOwogCXUzMglyZXNlcnZlZDsKQEAgLTI4OSw2ICsyOTcsNyBAQAogCiAJLyogZWFjaCBiaXQgaW5kaWNhdGVzIGFuIGF2YWlsYWJsZSBQSFkgKi8KIAl1MzIJCQlwaHltYXNrOworCXVuc2lnbmVkIHNob3J0CQljaGlwX3ZlcnNpb247CS8qIHdoaWNoIHZhcmlhbnQgdGhpcyBpcyAqLwogfTsKIAogc3RhdGljIGludCBwY25ldDMyX3Byb2JlX3BjaShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKTsKQEAgLTI5Niw3ICszMDUsNiBAQAogc3RhdGljIGludCBwY25ldDMyX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgaW50IHBjbmV0MzJfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIGludCBwY25ldDMyX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZpY2UgKik7Ci1zdGF0aWMgaW50IHBjbmV0MzJfcngoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBwY25ldDMyX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaXJxcmV0dXJuX3QgcGNuZXQzMl9pbnRlcnJ1cHQoaW50LCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOwogc3RhdGljIGludCBwY25ldDMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOwpAQCAtNzI0LDkgKzczMiwxMSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCWlmIChscC0+bWlpKSB7CiAJCXIgPSBtaWlfbGlua19vaygmbHAtPm1paV9pZik7Ci0JfSBlbHNlIHsKKwl9IGVsc2UgaWYgKGxwLT5jaGlwX3ZlcnNpb24gPj0gUENORVQzMl83OUM5NzBBKSB7CiAJCXVsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwkvKiBjYXJkIGJhc2UgSS9PIGFkZHJlc3MgKi8KIAkJciA9IChscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDQpICE9IDB4YzApOworCX0gZWxzZSB7CS8qIGNhbiBub3QgZGV0ZWN0IGxpbmsgb24gcmVhbGx5IG9sZCBjaGlwcyAqLworCQlyID0gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIApAQCAtNzk5LDcgKzgwOSw3IEBACiAJfQogCWlmICgoMSA8PCBpKSAhPSBscC0+dHhfcmluZ19zaXplKQogCQlwY25ldDMyX3JlYWxsb2NfdHhfcmluZyhkZXYsIGxwLCBpKTsKLQkKKwogCXNpemUgPSBtaW4oZXJpbmctPnJ4X3BlbmRpbmcsICh1bnNpZ25lZCBpbnQpUlhfTUFYX1JJTkdfU0laRSk7CiAJZm9yIChpID0gMjsgaSA8PSBQQ05FVDMyX0xPR19NQVhfUlhfQlVGRkVSUzsgaSsrKSB7CiAJCWlmIChzaXplIDw9ICgxIDw8IGkpKQpAQCAtODA3LDcgKzgxNyw3IEBACiAJfQogCWlmICgoMSA8PCBpKSAhPSBscC0+cnhfcmluZ19zaXplKQogCQlwY25ldDMyX3JlYWxsb2NfcnhfcmluZyhkZXYsIGxwLCBpKTsKLQkKKwogCWRldi0+d2VpZ2h0ID0gbHAtPnJ4X3Jpbmdfc2l6ZSAvIDI7CiAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CkBAIC04NzgsNyArODg4LDExIEBACiAJcmMgPSAxOwkJCS8qIGRlZmF1bHQgdG8gZmFpbCAqLwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKyNpZmRlZiBDT05GSUdfUENORVQzMl9OQVBJCisJCXBjbmV0MzJfbmV0aWZfc3RvcChkZXYpOworI2Vsc2UKIAkJcGNuZXQzMl9jbG9zZShkZXYpOworI2VuZGlmCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX1NUT1ApOwkvKiBzdG9wIHRoZSBjaGlwICovCkBAIC04ODcsNyArOTAxLDcgQEAKIAogCS8qIFJlc2V0IHRoZSBQQ05FVDMyICovCiAJbHAtPmEucmVzZXQoaW9hZGRyKTsKLQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1I0LCAweDA5MTUpOworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjQsIDB4MDkxNSk7CS8qIGF1dG8gdHggcGFkICovCiAKIAkvKiBzd2l0Y2ggcGNuZXQzMiB0byAzMmJpdCBtb2RlICovCiAJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMjAsIDIpOwpAQCAtMTAxMCw2ICsxMDI0LDE2IEBACiAJeCA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMzIpOwkvKiByZXNldCBpbnRlcm5hbCBsb29wYmFjayAqLwogCWEtPndyaXRlX2Jjcihpb2FkZHIsIDMyLCAoeCAmIH4weDAwMDIpKTsKIAorI2lmZGVmIENPTkZJR19QQ05FVDMyX05BUEkKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCXBjbmV0MzJfbmV0aWZfc3RhcnQoZGV2KTsKKwkJcGNuZXQzMl9yZXN0YXJ0KGRldiwgQ1NSMF9OT1JNQUwpOworCX0gZWxzZSB7CisJCXBjbmV0MzJfcHVyZ2VfcnhfcmluZyhkZXYpOworCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAyMCwgNCk7CS8qIHJldHVybiB0byAxNmJpdCBtb2RlICovCisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisjZWxzZQogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJcGNuZXQzMl9vcGVuKGRldik7CkBAIC0xMDE4LDYgKzEwNDIsNyBAQAogCQlscC0+YS53cml0ZV9iY3IoaW9hZGRyLCAyMCwgNCk7CS8qIHJldHVybiB0byAxNmJpdCBtb2RlICovCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJfQorI2VuZGlmCiAKIAlyZXR1cm4gKHJjKTsKIH0JCQkJLyogZW5kIHBjbmV0MzJfbG9vcGJhY2tfdGVzdCAgKi8KQEAgLTEwOTEsNiArMTExNiwxMCBAQAogCXVsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCWludCB0aWNrczsKIAorCS8qIHJlYWxseSBvbGQgY2hpcHMgaGF2ZSB0byBiZSBzdG9wcGVkLiAqLworCWlmIChscC0+Y2hpcF92ZXJzaW9uIDwgUENORVQzMl83OUM5NzBBKQorCQlyZXR1cm4gMDsKKwogCS8qIHNldCBTVVNQRU5EIChTUE5EKSAtIENTUjUgYml0IDAgKi8KIAljc3I1ID0gYS0+cmVhZF9jc3IoaW9hZGRyLCBDU1I1KTsKIAlhLT53cml0ZV9jc3IoaW9hZGRyLCBDU1I1LCBjc3I1IHwgQ1NSNV9TVVNQRU5EKTsKQEAgLTExMTYsNiArMTE0NSwyODggQEAKIAlyZXR1cm4gMTsKIH0KIAorLyoKKyAqIHByb2Nlc3Mgb25lIHJlY2VpdmUgZGVzY3JpcHRvciBlbnRyeQorICovCisKK3N0YXRpYyB2b2lkIHBjbmV0MzJfcnhfZW50cnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSAgICAgc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAsCisJCQkgICAgIHN0cnVjdCBwY25ldDMyX3J4X2hlYWQgKnJ4cCwKKwkJCSAgICAgaW50IGVudHJ5KQoreworCWludCBzdGF0dXMgPSAoc2hvcnQpbGUxNl90b19jcHUocnhwLT5zdGF0dXMpID4+IDg7CisJaW50IHJ4X2luX3BsYWNlID0gMDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXNob3J0IHBrdF9sZW47CisKKwlpZiAoc3RhdHVzICE9IDB4MDMpIHsJLyogVGhlcmUgd2FzIGFuIGVycm9yLiAqLworCQkvKgorCQkgKiBUaGVyZSBpcyBhIHRyaWNreSBlcnJvciBub3RlZCBieSBKb2huIE11cnBoeSwKKwkJICogPG11cmZAcGVyZnRlY2guY29tPiB0byBSdXNzIE5lbHNvbjogRXZlbiB3aXRoIGZ1bGwtc2l6ZWQKKwkJICogYnVmZmVycyBpdCdzIHBvc3NpYmxlIGZvciBhIGphYmJlciBwYWNrZXQgdG8gdXNlIHR3bworCQkgKiBidWZmZXJzLCB3aXRoIG9ubHkgdGhlIGxhc3QgY29ycmVjdGx5IG5vdGluZyB0aGUgZXJyb3IuCisJCSAqLworCQlpZiAoc3RhdHVzICYgMHgwMSkJLyogT25seSBjb3VudCBhIGdlbmVyYWwgZXJyb3IgYXQgdGhlICovCisJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CS8qIGVuZCBvZiBhIHBhY2tldC4gKi8KKwkJaWYgKHN0YXR1cyAmIDB4MjApCisJCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiAweDEwKQorCQkJbHAtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCWlmIChzdGF0dXMgJiAweDA4KQorCQkJbHAtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIDB4MDQpCisJCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKKwkJcmV0dXJuOworCX0KKworCXBrdF9sZW4gPSAobGUzMl90b19jcHUocnhwLT5tc2dfbGVuZ3RoKSAmIDB4ZmZmKSAtIDQ7CisKKwkvKiBEaXNjYXJkIG92ZXJzaXplIGZyYW1lcy4gKi8KKwlpZiAodW5saWtlbHkocGt0X2xlbiA+IFBLVF9CVUZfU1ogLSAyKSkgeworCQlpZiAobmV0aWZfbXNnX2RydihscCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbXBvc3NpYmxlIHBhY2tldCBzaXplICVkIVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOworCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CisJCXJldHVybjsKKwl9CisJaWYgKHBrdF9sZW4gPCA2MCkgeworCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSdW50IHBhY2tldCFcbiIsIGRldi0+bmFtZSk7CisJCWxwLT5zdGF0cy5yeF9lcnJvcnMrKzsKKwkJcmV0dXJuOworCX0KKworCWlmIChwa3RfbGVuID4gcnhfY29weWJyZWFrKSB7CisJCXN0cnVjdCBza19idWZmICpuZXdza2I7CisKKwkJaWYgKChuZXdza2IgPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU1opKSkgeworCQkJc2tiX3Jlc2VydmUobmV3c2tiLCAyKTsKKwkJCXNrYiA9IGxwLT5yeF9za2J1ZmZbZW50cnldOworCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwKKwkJCQkJIGxwLT5yeF9kbWFfYWRkcltlbnRyeV0sCisJCQkJCSBQS1RfQlVGX1NaIC0gMiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CisJCQlscC0+cnhfc2tidWZmW2VudHJ5XSA9IG5ld3NrYjsKKwkJCW5ld3NrYi0+ZGV2ID0gZGV2OworCQkJbHAtPnJ4X2RtYV9hZGRyW2VudHJ5XSA9CisJCQkJCSAgICBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2RldiwKKwkJCQkJCQkgICBuZXdza2ItPmRhdGEsCisJCQkJCQkJICAgUEtUX0JVRl9TWiAtIDIsCisJCQkJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4cC0+YmFzZSA9IGxlMzJfdG9fY3B1KGxwLT5yeF9kbWFfYWRkcltlbnRyeV0pOworCQkJcnhfaW5fcGxhY2UgPSAxOworCQl9IGVsc2UKKwkJCXNrYiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMik7CisJfQorCisJaWYgKHNrYiA9PSBOVUxMKSB7CisJCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbHAtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuOworCX0KKwlza2ItPmRldiA9IGRldjsKKwlpZiAoIXJ4X2luX3BsYWNlKSB7CisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIDE2IGJ5dGUgYWxpZ24gKi8KKwkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwkvKiBNYWtlIHJvb20gKi8KKwkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGxwLT5wY2lfZGV2LAorCQkJCQkgICAgbHAtPnJ4X2RtYV9hZGRyW2VudHJ5XSwKKwkJCQkJICAgIFBLVF9CVUZfU1ogLSAyLAorCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJZXRoX2NvcHlfYW5kX3N1bShza2IsCisJCQkJICh1bnNpZ25lZCBjaGFyICopKGxwLT5yeF9za2J1ZmZbZW50cnldLT5kYXRhKSwKKwkJCQkgcGt0X2xlbiwgMCk7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShscC0+cGNpX2RldiwKKwkJCQkJICAgICAgIGxwLT5yeF9kbWFfYWRkcltlbnRyeV0sCisJCQkJCSAgICAgICBQS1RfQlVGX1NaIC0gMiwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJfQorCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOworI2lmZGVmIENPTkZJR19QQ05FVDMyX05BUEkKKwluZXRpZl9yZWNlaXZlX3NrYihza2IpOworI2Vsc2UKKwluZXRpZl9yeChza2IpOworI2VuZGlmCisJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwlscC0+c3RhdHMucnhfcGFja2V0cysrOworCXJldHVybjsKK30KKworc3RhdGljIGludCBwY25ldDMyX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBxdW90YSkKK3sKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlpbnQgZW50cnkgPSBscC0+Y3VyX3J4ICYgbHAtPnJ4X21vZF9tYXNrOworCXN0cnVjdCBwY25ldDMyX3J4X2hlYWQgKnJ4cCA9ICZscC0+cnhfcmluZ1tlbnRyeV07CisJaW50IG5wYWNrZXRzID0gMDsKKworCS8qIElmIHdlIG93biB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCisJd2hpbGUgKHF1b3RhID4gbnBhY2tldHMgJiYgKHNob3J0KWxlMTZfdG9fY3B1KHJ4cC0+c3RhdHVzKSA+PSAwKSB7CisJCXBjbmV0MzJfcnhfZW50cnkoZGV2LCBscCwgcnhwLCBlbnRyeSk7CisJCW5wYWNrZXRzICs9IDE7CisJCS8qCisJCSAqIFRoZSBkb2NzIHNheSB0aGF0IHRoZSBidWZmZXIgbGVuZ3RoIGlzbid0IHRvdWNoZWQsIGJ1dCBBbmRyZXcKKwkJICogQm95ZCBvZiBRTlggcmVwb3J0cyB0aGF0IHNvbWUgcmV2cyBvZiB0aGUgNzlDOTY1IGNsZWFyIGl0LgorCQkgKi8KKwkJcnhwLT5idWZfbGVuZ3RoID0gbGUxNl90b19jcHUoMiAtIFBLVF9CVUZfU1opOworCQl3bWIoKTsJLyogTWFrZSBzdXJlIG93bmVyIGNoYW5nZXMgYWZ0ZXIgb3RoZXJzIGFyZSB2aXNpYmxlICovCisJCXJ4cC0+c3RhdHVzID0gbGUxNl90b19jcHUoMHg4MDAwKTsKKwkJZW50cnkgPSAoKytscC0+Y3VyX3J4KSAmIGxwLT5yeF9tb2RfbWFzazsKKwkJcnhwID0gJmxwLT5yeF9yaW5nW2VudHJ5XTsKKwl9CisKKwlyZXR1cm4gbnBhY2tldHM7Cit9CisKK3N0YXRpYyBpbnQgcGNuZXQzMl90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OworCXVuc2lnbmVkIGludCBkaXJ0eV90eCA9IGxwLT5kaXJ0eV90eDsKKwlpbnQgZGVsdGE7CisJaW50IG11c3RfcmVzdGFydCA9IDA7CisKKwl3aGlsZSAoZGlydHlfdHggIT0gbHAtPmN1cl90eCkgeworCQlpbnQgZW50cnkgPSBkaXJ0eV90eCAmIGxwLT50eF9tb2RfbWFzazsKKwkJaW50IHN0YXR1cyA9IChzaG9ydClsZTE2X3RvX2NwdShscC0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCWJyZWFrOwkvKiBJdCBzdGlsbCBoYXNuJ3QgYmVlbiBUeGVkICovCisKKwkJbHAtPnR4X3JpbmdbZW50cnldLmJhc2UgPSAwOworCisJCWlmIChzdGF0dXMgJiAweDQwMDApIHsKKwkJCS8qIFRoZXJlIHdhcyBhIG1ham9yIGVycm9yLCBsb2cgaXQuICovCisJCQlpbnQgZXJyX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS5taXNjKTsKKwkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCWlmIChuZXRpZl9tc2dfdHhfZXJyKGxwKSkKKwkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkgICAgICAgIiVzOiBUeCBlcnJvciBzdGF0dXM9JTA0eCBlcnJfc3RhdHVzPSUwOHhcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzLAorCQkJCSAgICAgICBlcnJfc3RhdHVzKTsKKwkJCWlmIChlcnJfc3RhdHVzICYgMHgwNDAwMDAwMCkKKwkJCQlscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKKwkJCWlmIChlcnJfc3RhdHVzICYgMHgwODAwMDAwMCkKKwkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJCWlmIChlcnJfc3RhdHVzICYgMHgxMDAwMDAwMCkKKwkJCQlscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOworI2lmbmRlZiBET19EWFNVRkxPCisJCQlpZiAoZXJyX3N0YXR1cyAmIDB4NDAwMDAwMDApIHsKKwkJCQlscC0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJCQkvKiBBY2trISAgT24gRklGTyBlcnJvcnMgdGhlIFR4IHVuaXQgaXMgdHVybmVkIG9mZiEgKi8KKwkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCisJCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQorCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJICAgICAgICIlczogVHggRklGTyBlcnJvciFcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCW11c3RfcmVzdGFydCA9IDE7CisJCQl9CisjZWxzZQorCQkJaWYgKGVycl9zdGF0dXMgJiAweDQwMDAwMDAwKSB7CisJCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCQkJaWYgKCFscC0+ZHhzdWZsbykgewkvKiBJZiBjb250cm9sbGVyIGRvZXNuJ3QgcmVjb3ZlciAuLi4gKi8KKwkJCQkJLyogQWNrayEgIE9uIEZJRk8gZXJyb3JzIHRoZSBUeCB1bml0IGlzIHR1cm5lZCBvZmYhICovCisJCQkJCS8qIFJlbW92ZSB0aGlzIHZlcmJvc2l0eSBsYXRlciEgKi8KKwkJCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQorCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkgICAgICAgIiVzOiBUeCBGSUZPIGVycm9yIVxuIiwKKwkJCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCQltdXN0X3Jlc3RhcnQgPSAxOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgeworCQkJaWYgKHN0YXR1cyAmIDB4MTgwMCkKKwkJCQlscC0+c3RhdHMuY29sbGlzaW9ucysrOworCQkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJfQorCisJCS8qIFdlIG11c3QgZnJlZSB0aGUgb3JpZ2luYWwgc2tiICovCisJCWlmIChscC0+dHhfc2tidWZmW2VudHJ5XSkgeworCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwKKwkJCQkJIGxwLT50eF9kbWFfYWRkcltlbnRyeV0sCisJCQkJCSBscC0+dHhfc2tidWZmW2VudHJ5XS0+CisJCQkJCSBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJZGV2X2tmcmVlX3NrYl9hbnkobHAtPnR4X3NrYnVmZltlbnRyeV0pOworCQkJbHAtPnR4X3NrYnVmZltlbnRyeV0gPSBOVUxMOworCQkJbHAtPnR4X2RtYV9hZGRyW2VudHJ5XSA9IDA7CisJCX0KKwkJZGlydHlfdHgrKzsKKwl9CisKKwlkZWx0YSA9IChscC0+Y3VyX3R4IC0gZGlydHlfdHgpICYgKGxwLT50eF9tb2RfbWFzayArIGxwLT50eF9yaW5nX3NpemUpOworCWlmIChkZWx0YSA+IGxwLT50eF9yaW5nX3NpemUpIHsKKwkJaWYgKG5ldGlmX21zZ19kcnYobHApKQorCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICAgICAgIiVzOiBvdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQsIGZ1bGw9JWQuXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIGxwLT5jdXJfdHgsCisJCQkgICAgICAgbHAtPnR4X2Z1bGwpOworCQlkaXJ0eV90eCArPSBscC0+dHhfcmluZ19zaXplOworCQlkZWx0YSAtPSBscC0+dHhfcmluZ19zaXplOworCX0KKworCWlmIChscC0+dHhfZnVsbCAmJgorCSAgICBuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYKKwkgICAgZGVsdGEgPCBscC0+dHhfcmluZ19zaXplIC0gMikgeworCQkvKiBUaGUgcmluZyBpcyBubyBsb25nZXIgZnVsbCwgY2xlYXIgdGJ1c3kuICovCisJCWxwLT50eF9mdWxsID0gMDsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KKwlscC0+ZGlydHlfdHggPSBkaXJ0eV90eDsKKworCXJldHVybiBtdXN0X3Jlc3RhcnQ7Cit9CisKKyNpZmRlZiBDT05GSUdfUENORVQzMl9OQVBJCitzdGF0aWMgaW50IHBjbmV0MzJfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKKwlpbnQgcXVvdGEgPSBtaW4oZGV2LT5xdW90YSwgKmJ1ZGdldCk7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUxNiB2YWw7CisKKwlxdW90YSA9IHBjbmV0MzJfcngoZGV2LCBxdW90YSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKKwlpZiAocGNuZXQzMl90eChkZXYpKSB7CisJCS8qIHJlc2V0IHRoZSBjaGlwIHRvIGNsZWFyIHRoZSBlcnJvciBjb25kaXRpb24sIHRoZW4gcmVzdGFydCAqLworCQlscC0+YS5yZXNldChpb2FkZHIpOworCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1I0LCAweDA5MTUpOwkvKiBhdXRvIHR4IHBhZCAqLworCQlwY25ldDMyX3Jlc3RhcnQoZGV2LCBDU1IwX1NUQVJUKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOworCisJKmJ1ZGdldCAtPSBxdW90YTsKKwlkZXYtPnF1b3RhIC09IHF1b3RhOworCisJaWYgKGRldi0+cXVvdGEgPT0gMCkgeworCQlyZXR1cm4gMTsKKwl9CisKKwluZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgbWFza3MgKi8KKwl2YWwgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjMpOworCXZhbCAmPSAweDAwZmY7CisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMywgdmFsKTsKKworCS8qIFNldCBpbnRlcnJ1cHQgZW5hYmxlLiAqLworCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjAsIENTUjBfSU5URU4pOworCW1taW93YigpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZGVmaW5lIFBDTkVUMzJfUkVHU19QRVJfUEhZCTMyCiAjZGVmaW5lIFBDTkVUMzJfTUFYX1BIWVMJMzIKIHN0YXRpYyBpbnQgcGNuZXQzMl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTExODgsNyArMTQ5OSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBwY25ldDMyX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBwY25ldDMyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gcGNuZXQzMl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBwY25ldDMyX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gcGNuZXQzMl9nZXRfZHJ2aW5mbywKQEAgLTE1MjksNiArMTg0MCw3IEBACiAJbHAtPm1paV9pZi5yZWdfbnVtX21hc2sgPSAweDFmOwogCWxwLT5keHN1ZmxvID0gZHhzdWZsbzsKIAlscC0+bWlpID0gbWlpOworCWxwLT5jaGlwX3ZlcnNpb24gPSBjaGlwX3ZlcnNpb247CiAJbHAtPm1zZ19lbmFibGUgPSBwY25ldDMyX2RlYnVnOwogCWlmICgoY2FyZHNfZm91bmQgPj0gTUFYX1VOSVRTKQogCSAgICB8fCAob3B0aW9uc1tjYXJkc19mb3VuZF0gPiBzaXplb2Yob3B0aW9uc19tYXBwaW5nKSkpCkBAIC0xNTkyLDcgKzE5MDQsNyBAQAogCQkgKiBib2FyZHMgd2lsbCB3b3JrLgogCQkgKi8KIAkJLyogVHJpZ2dlciBhbiBpbml0aWFsaXphdGlvbiBqdXN0IGZvciB0aGUgaW50ZXJydXB0LiAqLwotCQlhLT53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDQxKTsKKwkJYS0+d3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9JTlRFTiB8IENTUjBfSU5JVCk7CiAJCW1kZWxheSgxKTsKIAogCQlkZXYtPmlycSA9IHByb2JlX2lycV9vZmYoaXJxX21hc2spOwpAQCAtMTY1MSw2ICsxOTYzLDEwIEBACiAJZGV2LT5ldGh0b29sX29wcyA9ICZwY25ldDMyX2V0aHRvb2xfb3BzOwogCWRldi0+dHhfdGltZW91dCA9IHBjbmV0MzJfdHhfdGltZW91dDsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gKDUgKiBIWik7CisJZGV2LT53ZWlnaHQgPSBscC0+cnhfcmluZ19zaXplIC8gMjsKKyNpZmRlZiBDT05GSUdfUENORVQzMl9OQVBJCisJZGV2LT5wb2xsID0gcGNuZXQzMl9wb2xsOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogCWRldi0+cG9sbF9jb250cm9sbGVyID0gcGNuZXQzMl9wb2xsX2NvbnRyb2xsZXI7CkBAIC0xODM5LDEwICsyMTU1LDcgQEAKIAkJCQl2YWwgfD0gMjsKIAkJfSBlbHNlIGlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9BU0VMKSB7CiAJCQkvKiB3b3JrYXJvdW5kIG9mIHhTZXJpZXMyNTAsIHR1cm4gb24gZm9yIDc5Qzk3NSBvbmx5ICovCi0JCQlpID0gKChscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDg4KSB8Ci0JCQkgICAgICAobHAtPmEuCi0JCQkgICAgICAgcmVhZF9jc3IoaW9hZGRyLCA4OSkgPDwgMTYpKSA+PiAxMikgJiAweGZmZmY7Ci0JCQlpZiAoaSA9PSAweDI2MjcpCisJCQlpZiAobHAtPmNoaXBfdmVyc2lvbiA9PSAweDI2MjcpCiAJCQkJdmFsIHw9IDM7CiAJCX0KIAkJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgOSwgdmFsKTsKQEAgLTE5NTgsOSArMjI3MSw5IEBACiAKICNpZmRlZiBET19EWFNVRkxPCiAJaWYgKGxwLT5keHN1ZmxvKSB7CS8qIERpc2FibGUgdHJhbnNtaXQgc3RvcCBvbiB1bmRlcmZsb3cgKi8KLQkJdmFsID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAzKTsKKwkJdmFsID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IzKTsKIAkJdmFsIHw9IDB4NDA7Ci0JCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDMsIHZhbCk7CisJCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjMsIHZhbCk7CiAJfQogI2VuZGlmCiAKQEAgLTE5ODEsMjQgKzIyOTQsMjYgQEAKIAkJCShscC0+ZG1hX2FkZHIgKwogCQkJIG9mZnNldG9mKHN0cnVjdCBwY25ldDMyX3ByaXZhdGUsIGluaXRfYmxvY2spKSA+PiAxNik7CiAKLQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCA0LCAweDA5MTUpOwotCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDAwMSk7CisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSNCwgMHgwOTE1KTsJLyogYXV0byB0eCBwYWQgKi8KKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX0lOSVQpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCS8qIFByaW50IHRoZSBsaW5rIHN0YXR1cyBhbmQgc3RhcnQgdGhlIHdhdGNoZG9nICovCi0JcGNuZXQzMl9jaGVja19tZWRpYShkZXYsIDEpOwotCW1vZF90aW1lcigmKGxwLT53YXRjaGRvZ190aW1lciksIFBDTkVUMzJfV0FUQ0hET0dfVElNRU9VVCk7CisJaWYgKGxwLT5jaGlwX3ZlcnNpb24gPj0gUENORVQzMl83OUM5NzBBKSB7CisJCS8qIFByaW50IHRoZSBsaW5rIHN0YXR1cyBhbmQgc3RhcnQgdGhlIHdhdGNoZG9nICovCisJCXBjbmV0MzJfY2hlY2tfbWVkaWEoZGV2LCAxKTsKKwkJbW9kX3RpbWVyKCYobHAtPndhdGNoZG9nX3RpbWVyKSwgUENORVQzMl9XQVRDSERPR19USU1FT1VUKTsKKwl9CiAKIAlpID0gMDsKIAl3aGlsZSAoaSsrIDwgMTAwKQotCQlpZiAobHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSAmIDB4MDEwMCkKKwkJaWYgKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkgJiBDU1IwX0lET04pCiAJCQlicmVhazsKIAkvKgogCSAqIFdlIHVzZWQgdG8gY2xlYXIgdGhlIEluaXREb25lIGJpdCwgMHgwMTAwLCBoZXJlIGJ1dCBNYXJrIFN0b2NrdG9uCiAJICogcmVwb3J0cyB0aGF0IGRvaW5nIHNvIHRyaWdnZXJzIGEgYnVnIGluIHRoZSAnOTc0LgogCSAqLwotCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDA0Mik7CisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9OT1JNQUwpOwogCiAJaWYgKG5ldGlmX21zZ19pZnVwKGxwKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcKQEAgLTIwMDYsNyArMjMyMSw3IEBACiAJCSAgICAgICBkZXYtPm5hbWUsIGksCiAJCSAgICAgICAodTMyKSAobHAtPmRtYV9hZGRyICsKIAkJCSAgICAgIG9mZnNldG9mKHN0cnVjdCBwY25ldDMyX3ByaXZhdGUsIGluaXRfYmxvY2spKSwKLQkJICAgICAgIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgMCkpOworCQkgICAgICAgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCkBAIC0yMDc3LDcgKzIzOTIsNyBAQAogCQkJICAgIChyeF9za2J1ZmYgPSBscC0+cnhfc2tidWZmW2ldID0KIAkJCSAgICAgZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKSkpIHsKIAkJCQkvKiB0aGVyZSBpcyBub3QgbXVjaCwgd2UgY2FuIGRvIGF0IHRoaXMgcG9pbnQgKi8KLQkJCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19EUlYpCisJCQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQogCQkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJICAgICAgICIlczogcGNuZXQzMl9pbml0X3JpbmcgZGV2X2FsbG9jX3NrYiBmYWlsZWQuXG4iLAogCQkJCQkgICAgICAgZGV2LT5uYW1lKTsKQEAgLTIxMjcsNyArMjQ0Miw3IEBACiAKIAkvKiB3YWl0IGZvciBzdG9wICovCiAJZm9yIChpID0gMDsgaSA8IDEwMDsgaSsrKQotCQlpZiAobHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSAmIDB4MDAwNCkKKwkJaWYgKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkgJiBDU1IwX1NUT1ApCiAJCQlicmVhazsKIAogCWlmIChpID49IDEwMCAmJiBuZXRpZl9tc2dfZHJ2KGxwKSkKQEAgLTIxNDAsMTMgKzI0NTUsMTMgQEAKIAkJcmV0dXJuOwogCiAJLyogUmVJbml0IFJpbmcgKi8KLQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAxKTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX0lOSVQpOwogCWkgPSAwOwogCXdoaWxlIChpKysgPCAxMDAwKQotCQlpZiAobHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSAmIDB4MDEwMCkKKwkJaWYgKGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkgJiBDU1IwX0lET04pCiAJCQlicmVhazsKIAotCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIGNzcjBfYml0cyk7CisJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgY3NyMF9iaXRzKTsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yMTU5LDggKzI0NzQsOCBAQAogCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX0RSVikKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCByZXNldHRpbmcuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKLQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCAweDAwMDQpOworCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX1NUT1ApOwogCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKIAlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpIHsKIAkJaW50IGk7CkBAIC0yMTgyLDcgKzI0OTcsNyBAQAogCQkJICAgICAgIGxlMTZfdG9fY3B1KGxwLT50eF9yaW5nW2ldLnN0YXR1cykpOwogCQlwcmludGsoIlxuIik7CiAJfQotCXBjbmV0MzJfcmVzdGFydChkZXYsIDB4MDA0Mik7CisJcGNuZXQzMl9yZXN0YXJ0KGRldiwgQ1NSMF9OT1JNQUwpOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwpAQCAtMjIwMyw3ICsyNTE4LDcgQEAKIAlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChscCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICIlczogcGNuZXQzMl9zdGFydF94bWl0KCkgY2FsbGVkLCBjc3IwICU0LjR4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSk7CisJCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCX0KIAogCS8qIERlZmF1bHQgc3RhdHVzIC0tIHdpbGwgbm90IGVuYWJsZSBTdWNjZXNzZnVsLVR4RG9uZQpAQCAtMjIzNCw3ICsyNTQ5LDcgQEAKIAlscC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKIAkvKiBUcmlnZ2VyIGFuIGltbWVkaWF0ZSBzZW5kIHBvbGwuICovCi0JbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMCwgMHgwMDQ4KTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX0lOVEVOIHwgQ1NSMF9UWFBPTEwpOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKQEAgLTIyNTMsOSArMjU2OCw4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRldl9pZDsKIAlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscDsKIAl1bnNpZ25lZCBsb25nIGlvYWRkcjsKLQl1MTYgY3NyMCwgcmFwOworCXUxNiBjc3IwOwogCWludCBib2d1c2NudCA9IG1heF9pbnRlcnJ1cHRfd29yazsKLQlpbnQgbXVzdF9yZXN0YXJ0OwogCiAJaWYgKCFkZXYpIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfSU5UUikKQEAgLTIyNjksMTQxICsyNTgzLDM0IEBACiAKIAlzcGluX2xvY2soJmxwLT5sb2NrKTsKIAotCXJhcCA9IGxwLT5hLnJlYWRfcmFwKGlvYWRkcik7Ci0Jd2hpbGUgKChjc3IwID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSkgJiAweDhmMDAgJiYgLS1ib2d1c2NudCA+PSAwKSB7CisJY3NyMCA9IGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCk7CisJd2hpbGUgKChjc3IwICYgMHg4ZjAwKSAmJiAtLWJvZ3VzY250ID49IDApIHsKIAkJaWYgKGNzcjAgPT0gMHhmZmZmKSB7CiAJCQlicmVhazsJLyogUENNQ0lBIHJlbW92ZSBoYXBwZW5lZCAqLwogCQl9CiAJCS8qIEFja25vd2xlZGdlIGFsbCBvZiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc291cmNlcyBBU0FQLiAqLwotCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCAwLCBjc3IwICYgfjB4MDA0Zik7Ci0KLQkJbXVzdF9yZXN0YXJ0ID0gMDsKKwkJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgY3NyMCAmIH4weDAwNGYpOwogCiAJCWlmIChuZXRpZl9tc2dfaW50cihscCkpCiAJCQlwcmludGsoS0VSTl9ERUJVRwogCQkJICAgICAgICIlczogaW50ZXJydXB0ICBjc3IwPSUjMi4yeCBuZXcgY3NyPSUjMi4yeC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCBjc3IwLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKLQotCQlpZiAoY3NyMCAmIDB4MDQwMCkJLyogUnggaW50ZXJydXB0ICovCi0JCQlwY25ldDMyX3J4KGRldik7Ci0KLQkJaWYgKGNzcjAgJiAweDAyMDApIHsJLyogVHgtZG9uZSBpbnRlcnJ1cHQgKi8KLQkJCXVuc2lnbmVkIGludCBkaXJ0eV90eCA9IGxwLT5kaXJ0eV90eDsKLQkJCWludCBkZWx0YTsKLQotCQkJd2hpbGUgKGRpcnR5X3R4ICE9IGxwLT5jdXJfdHgpIHsKLQkJCQlpbnQgZW50cnkgPSBkaXJ0eV90eCAmIGxwLT50eF9tb2RfbWFzazsKLQkJCQlpbnQgc3RhdHVzID0KLQkJCQkgICAgKHNob3J0KWxlMTZfdG9fY3B1KGxwLT50eF9yaW5nW2VudHJ5XS4KLQkJCQkJCSAgICAgICBzdGF0dXMpOwotCi0JCQkJaWYgKHN0YXR1cyA8IDApCi0JCQkJCWJyZWFrOwkvKiBJdCBzdGlsbCBoYXNuJ3QgYmVlbiBUeGVkICovCi0KLQkJCQlscC0+dHhfcmluZ1tlbnRyeV0uYmFzZSA9IDA7Ci0KLQkJCQlpZiAoc3RhdHVzICYgMHg0MDAwKSB7Ci0JCQkJCS8qIFRoZXJlIHdhcyBhbiBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwotCQkJCQlpbnQgZXJyX3N0YXR1cyA9Ci0JCQkJCSAgICBsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tlbnRyeV0uCi0JCQkJCQkJbWlzYyk7Ci0JCQkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQkJCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQotCQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCQkgICAgICAgIiVzOiBUeCBlcnJvciBzdGF0dXM9JTA0eCBlcnJfc3RhdHVzPSUwOHhcbiIsCi0JCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsCi0JCQkJCQkgICAgICAgZXJyX3N0YXR1cyk7Ci0JCQkJCWlmIChlcnJfc3RhdHVzICYgMHgwNDAwMDAwMCkKLQkJCQkJCWxwLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJCQlpZiAoZXJyX3N0YXR1cyAmIDB4MDgwMDAwMDApCi0JCQkJCQlscC0+c3RhdHMudHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJCQkJaWYgKGVycl9zdGF0dXMgJiAweDEwMDAwMDAwKQotCQkJCQkJbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKLSNpZm5kZWYgRE9fRFhTVUZMTwotCQkJCQlpZiAoZXJyX3N0YXR1cyAmIDB4NDAwMDAwMDApIHsKLQkJCQkJCWxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwotCQkJCQkJLyogQWNrayEgIE9uIEZJRk8gZXJyb3JzIHRoZSBUeCB1bml0IGlzIHR1cm5lZCBvZmYhICovCi0JCQkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCi0JCQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpCi0JCQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCQkJICAgICAgICIlczogVHggRklGTyBlcnJvciEgQ1NSMD0lNC40eFxuIiwKLQkJCQkJCQkgICAgICAgZGV2LT5uYW1lLCBjc3IwKTsKLQkJCQkJCW11c3RfcmVzdGFydCA9IDE7Ci0JCQkJCX0KLSNlbHNlCi0JCQkJCWlmIChlcnJfc3RhdHVzICYgMHg0MDAwMDAwMCkgewotCQkJCQkJbHAtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7Ci0JCQkJCQlpZiAoIWxwLT5keHN1ZmxvKSB7CS8qIElmIGNvbnRyb2xsZXIgZG9lc24ndCByZWNvdmVyIC4uLiAqLwotCQkJCQkJCS8qIEFja2shICBPbiBGSUZPIGVycm9ycyB0aGUgVHggdW5pdCBpcyB0dXJuZWQgb2ZmISAqLwotCQkJCQkJCS8qIFJlbW92ZSB0aGlzIHZlcmJvc2l0eSBsYXRlciEgKi8KLQkJCQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycgotCQkJCQkJCSAgICAobHApKQotCQkJCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJCQkJICAgICAgICIlczogVHggRklGTyBlcnJvciEgQ1NSMD0lNC40eFxuIiwKLQkJCQkJCQkJICAgICAgIGRldi0+Ci0JCQkJCQkJCSAgICAgICBuYW1lLAotCQkJCQkJCQkgICAgICAgY3NyMCk7Ci0JCQkJCQkJbXVzdF9yZXN0YXJ0ID0gMTsKLQkJCQkJCX0KLQkJCQkJfQotI2VuZGlmCi0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHN0YXR1cyAmIDB4MTgwMCkKLQkJCQkJCWxwLT5zdGF0cy5jb2xsaXNpb25zKys7Ci0JCQkJCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7Ci0JCQkJfQotCi0JCQkJLyogV2UgbXVzdCBmcmVlIHRoZSBvcmlnaW5hbCBza2IgKi8KLQkJCQlpZiAobHAtPnR4X3NrYnVmZltlbnRyeV0pIHsKLQkJCQkJcGNpX3VubWFwX3NpbmdsZShscC0+cGNpX2RldiwKLQkJCQkJCQkgbHAtPnR4X2RtYV9hZGRyW2VudHJ5XSwKLQkJCQkJCQkgbHAtPnR4X3NrYnVmZltlbnRyeV0tPgotCQkJCQkJCSBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJCQlkZXZfa2ZyZWVfc2tiX2lycShscC0+dHhfc2tidWZmW2VudHJ5XSk7Ci0JCQkJCWxwLT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJCQkJbHAtPnR4X2RtYV9hZGRyW2VudHJ5XSA9IDA7Ci0JCQkJfQotCQkJCWRpcnR5X3R4Kys7Ci0JCQl9Ci0KLQkJCWRlbHRhID0KLQkJCSAgICAobHAtPmN1cl90eCAtIGRpcnR5X3R4KSAmIChscC0+dHhfbW9kX21hc2sgKwotCQkJCQkJICAgICAgIGxwLT50eF9yaW5nX3NpemUpOwotCQkJaWYgKGRlbHRhID4gbHAtPnR4X3Jpbmdfc2l6ZSkgewotCQkJCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSAgICAgICAiJXM6IG91dC1vZi1zeW5jIGRpcnR5IHBvaW50ZXIsICVkIHZzLiAlZCwgZnVsbD0lZC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIGRpcnR5X3R4LCBscC0+Y3VyX3R4LAotCQkJCQkgICAgICAgbHAtPnR4X2Z1bGwpOwotCQkJCWRpcnR5X3R4ICs9IGxwLT50eF9yaW5nX3NpemU7Ci0JCQkJZGVsdGEgLT0gbHAtPnR4X3Jpbmdfc2l6ZTsKLQkJCX0KLQotCQkJaWYgKGxwLT50eF9mdWxsICYmCi0JCQkgICAgbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCi0JCQkgICAgZGVsdGEgPCBscC0+dHhfcmluZ19zaXplIC0gMikgewotCQkJCS8qIFRoZSByaW5nIGlzIG5vIGxvbmdlciBmdWxsLCBjbGVhciB0YnVzeS4gKi8KLQkJCQlscC0+dHhfZnVsbCA9IDA7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCQkJfQotCQkJbHAtPmRpcnR5X3R4ID0gZGlydHlfdHg7Ci0JCX0KKwkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjAsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCiAJCS8qIExvZyBtaXNjIGVycm9ycy4gKi8KIAkJaWYgKGNzcjAgJiAweDQwMDApCiAJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CS8qIFR4IGJhYmJsZS4gKi8KIAkJaWYgKGNzcjAgJiAweDEwMDApIHsKIAkJCS8qCi0JCQkgKiB0aGlzIGhhcHBlbnMgd2hlbiBvdXIgcmVjZWl2ZSByaW5nIGlzIGZ1bGwuIFRoaXMgc2hvdWxkbid0Ci0JCQkgKiBiZSBhIHByb2JsZW0gYXMgd2Ugd2lsbCBzZWUgbm9ybWFsIHJ4IGludGVycnVwdHMgZm9yIHRoZSBmcmFtZXMKLQkJCSAqIGluIHRoZSByZWNlaXZlIHJpbmcuIEJ1dCB0aGVyZSBhcmUgc29tZSBQQ0kgY2hpcHNldHMgKEkgY2FuCi0JCQkgKiByZXByb2R1Y2UgdGhpcyBvbiBTUDNHIHdpdGggSW50ZWwgc2F0dXJuIGNoaXBzZXQpIHdoaWNoIGhhdmUKLQkJCSAqIHNvbWV0aW1lcyBwcm9ibGVtcyBhbmQgd2lsbCBmaWxsIHVwIHRoZSByZWNlaXZlIHJpbmcgd2l0aAotCQkJICogZXJyb3IgZGVzY3JpcHRvcnMuIEluIHRoaXMgc2l0dWF0aW9uIHdlIGRvbid0IGdldCBhIHJ4Ci0JCQkgKiBpbnRlcnJ1cHQsIGJ1dCBhIG1pc3NlZCBmcmFtZSBpbnRlcnJ1cHQgc29vbmVyIG9yIGxhdGVyLgotCQkJICogU28gd2UgdHJ5IHRvIGNsZWFuIHVwIG91ciByZWNlaXZlIHJpbmcgaGVyZS4KKwkJCSAqIFRoaXMgaGFwcGVucyB3aGVuIG91ciByZWNlaXZlIHJpbmcgaXMgZnVsbC4gVGhpcworCQkJICogc2hvdWxkbid0IGJlIGEgcHJvYmxlbSBhcyB3ZSB3aWxsIHNlZSBub3JtYWwgcngKKwkJCSAqIGludGVycnVwdHMgZm9yIHRoZSBmcmFtZXMgaW4gdGhlIHJlY2VpdmUgcmluZy4gIEJ1dAorCQkJICogdGhlcmUgYXJlIHNvbWUgUENJIGNoaXBzZXRzIChJIGNhbiByZXByb2R1Y2UgdGhpcworCQkJICogb24gU1AzRyB3aXRoIEludGVsIHNhdHVybiBjaGlwc2V0KSB3aGljaCBoYXZlCisJCQkgKiBzb21ldGltZXMgcHJvYmxlbXMgYW5kIHdpbGwgZmlsbCB1cCB0aGUgcmVjZWl2ZQorCQkJICogcmluZyB3aXRoIGVycm9yIGRlc2NyaXB0b3JzLiAgSW4gdGhpcyBzaXR1YXRpb24gd2UKKwkJCSAqIGRvbid0IGdldCBhIHJ4IGludGVycnVwdCwgYnV0IGEgbWlzc2VkIGZyYW1lCisJCQkgKiBpbnRlcnJ1cHQgc29vbmVyIG9yIGxhdGVyLgogCQkJICovCi0JCQlwY25ldDMyX3J4KGRldik7CiAJCQlscC0+c3RhdHMucnhfZXJyb3JzKys7CS8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLwogCQl9CiAJCWlmIChjc3IwICYgMHgwODAwKSB7CkBAIC0yNDEzLDE4NSArMjYyMCw0NCBAQAogCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjApOwogCQkJLyogdW5saWtlIGZvciB0aGUgbGFuY2UsIHRoZXJlIGlzIG5vIHJlc3RhcnQgbmVlZGVkICovCiAJCX0KLQotCQlpZiAobXVzdF9yZXN0YXJ0KSB7CisjaWZkZWYgQ09ORklHX1BDTkVUMzJfTkFQSQorCQlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CisJCQl1MTYgdmFsOworCQkJLyogc2V0IGludGVycnVwdCBtYXNrcyAqLworCQkJdmFsID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IzKTsKKwkJCXZhbCB8PSAweDVmMDA7CisJCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IzLCB2YWwpOworCQkJbW1pb3diKCk7CisJCQlfX25ldGlmX3J4X3NjaGVkdWxlKGRldik7CisJCQlicmVhazsKKwkJfQorI2Vsc2UKKwkJcGNuZXQzMl9yeChkZXYsIGRldi0+d2VpZ2h0KTsKKwkJaWYgKHBjbmV0MzJfdHgoZGV2KSkgewogCQkJLyogcmVzZXQgdGhlIGNoaXAgdG8gY2xlYXIgdGhlIGVycm9yIGNvbmRpdGlvbiwgdGhlbiByZXN0YXJ0ICovCiAJCQlscC0+YS5yZXNldChpb2FkZHIpOwotCQkJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgNCwgMHgwOTE1KTsKLQkJCXBjbmV0MzJfcmVzdGFydChkZXYsIDB4MDAwMik7CisJCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1I0LCAweDA5MTUpOyAvKiBhdXRvIHR4IHBhZCAqLworCQkJcGNuZXQzMl9yZXN0YXJ0KGRldiwgQ1NSMF9TVEFSVCk7CiAJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiAJCX0KKyNlbmRpZgorCQljc3IwID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKTsKIAl9CiAKKyNpZm5kZWYgQ09ORklHX1BDTkVUMzJfTkFQSQogCS8qIFNldCBpbnRlcnJ1cHQgZW5hYmxlLiAqLwotCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIDAsIDB4MDA0MCk7Ci0JbHAtPmEud3JpdGVfcmFwKGlvYWRkciwgcmFwKTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX0lOVEVOKTsKKyNlbmRpZgogCiAJaWYgKG5ldGlmX21zZ19pbnRyKGxwKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgY3NyMD0lIzQuNHguXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIDApKTsKKwkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CiAKIAlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IHBjbmV0MzJfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgcGNuZXQzMl9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKLQlpbnQgZW50cnkgPSBscC0+Y3VyX3J4ICYgbHAtPnJ4X21vZF9tYXNrOwotCWludCBib2d1c2NudCA9IGxwLT5yeF9yaW5nX3NpemUgLyAyOwotCi0JLyogSWYgd2Ugb3duIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KLQl3aGlsZSAoKHNob3J0KWxlMTZfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMpID49IDApIHsKLQkJaW50IHN0YXR1cyA9IChzaG9ydClsZTE2X3RvX2NwdShscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKSA+PiA4OwotCi0JCWlmIChzdGF0dXMgIT0gMHgwMykgewkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCi0JCQkvKgotCQkJICogVGhlcmUgaXMgYSB0cmlja3kgZXJyb3Igbm90ZWQgYnkgSm9obiBNdXJwaHksCi0JCQkgKiA8bXVyZkBwZXJmdGVjaC5jb20+IHRvIFJ1c3MgTmVsc29uOiBFdmVuIHdpdGggZnVsbC1zaXplZAotCQkJICogYnVmZmVycyBpdCdzIHBvc3NpYmxlIGZvciBhIGphYmJlciBwYWNrZXQgdG8gdXNlIHR3bwotCQkJICogYnVmZmVycywgd2l0aCBvbmx5IHRoZSBsYXN0IGNvcnJlY3RseSBub3RpbmcgdGhlIGVycm9yLgotCQkJICovCi0JCQlpZiAoc3RhdHVzICYgMHgwMSkJLyogT25seSBjb3VudCBhIGdlbmVyYWwgZXJyb3IgYXQgdGhlICovCi0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwkvKiBlbmQgb2YgYSBwYWNrZXQuICovCi0JCQlpZiAoc3RhdHVzICYgMHgyMCkKLQkJCQlscC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgxMCkKLQkJCQlscC0+c3RhdHMucnhfb3Zlcl9lcnJvcnMrKzsKLQkJCWlmIChzdGF0dXMgJiAweDA4KQotCQkJCWxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgwNCkKLQkJCQlscC0+c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKLQkJCWxwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJj0gbGUxNl90b19jcHUoMHgwM2ZmKTsKLQkJfSBlbHNlIHsKLQkJCS8qIE1hbGxvYyB1cCBuZXcgYnVmZmVyLCBjb21wYXRpYmxlIHdpdGggbmV0LTJlLiAqLwotCQkJc2hvcnQgcGt0X2xlbiA9Ci0JCQkgICAgKGxlMzJfdG9fY3B1KGxwLT5yeF9yaW5nW2VudHJ5XS5tc2dfbGVuZ3RoKSAmIDB4ZmZmKQotCQkJICAgIC0gNDsKLQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJCS8qIERpc2NhcmQgb3ZlcnNpemUgZnJhbWVzLiAqLwotCQkJaWYgKHVubGlrZWx5KHBrdF9sZW4gPiBQS1RfQlVGX1NaIC0gMikpIHsKLQkJCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCQkgICAgICAgIiVzOiBJbXBvc3NpYmxlIHBhY2tldCBzaXplICVkIVxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSwgcGt0X2xlbik7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJfSBlbHNlIGlmIChwa3RfbGVuIDwgNjApIHsKLQkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihscCkpCi0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFJ1bnQgcGFja2V0IVxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQkJbHAtPnN0YXRzLnJ4X2Vycm9ycysrOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgcnhfaW5fcGxhY2UgPSAwOwotCi0JCQkJaWYgKHBrdF9sZW4gPiByeF9jb3B5YnJlYWspIHsKLQkJCQkJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYjsKLQotCQkJCQlpZiAoKG5ld3NrYiA9Ci0JCQkJCSAgICAgZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NaKSkpIHsKLQkJCQkJCXNrYl9yZXNlcnZlKG5ld3NrYiwgMik7Ci0JCQkJCQlza2IgPSBscC0+cnhfc2tidWZmW2VudHJ5XTsKLQkJCQkJCXBjaV91bm1hcF9zaW5nbGUobHAtPnBjaV9kZXYsCi0JCQkJCQkJCSBscC0+Ci0JCQkJCQkJCSByeF9kbWFfYWRkcgotCQkJCQkJCQkgW2VudHJ5XSwKLQkJCQkJCQkJIFBLVF9CVUZfU1ogLSAyLAotCQkJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQkJCXNrYl9wdXQoc2tiLCBwa3RfbGVuKTsKLQkJCQkJCWxwLT5yeF9za2J1ZmZbZW50cnldID0gbmV3c2tiOwotCQkJCQkJbmV3c2tiLT5kZXYgPSBkZXY7Ci0JCQkJCQlscC0+cnhfZG1hX2FkZHJbZW50cnldID0KLQkJCQkJCSAgICBwY2lfbWFwX3NpbmdsZShscC0+cGNpX2RldiwKLQkJCQkJCQkJICAgbmV3c2tiLT5kYXRhLAotCQkJCQkJCQkgICBQS1RfQlVGX1NaIC0KLQkJCQkJCQkJICAgMiwKLQkJCQkJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCQkJCWxwLT5yeF9yaW5nW2VudHJ5XS5iYXNlID0KLQkJCQkJCSAgICBsZTMyX3RvX2NwdShscC0+Ci0JCQkJCQkJCXJ4X2RtYV9hZGRyCi0JCQkJCQkJCVtlbnRyeV0pOwotCQkJCQkJcnhfaW5fcGxhY2UgPSAxOwotCQkJCQl9IGVsc2UKLQkJCQkJCXNrYiA9IE5VTEw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgMik7Ci0JCQkJfQotCi0JCQkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQkJCWludCBpOwotCQkJCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJCSAgICAgICAiJXM6IE1lbW9yeSBzcXVlZXplLCBkZWZlcnJpbmcgcGFja2V0LlxuIiwKLQkJCQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJCQlmb3IgKGkgPSAwOyBpIDwgbHAtPnJ4X3Jpbmdfc2l6ZTsgaSsrKQotCQkJCQkJaWYgKChzaG9ydCkKLQkJCQkJCSAgICBsZTE2X3RvX2NwdShscC0+Ci0JCQkJCQkJCXJ4X3JpbmdbKGVudHJ5ICsKLQkJCQkJCQkJCSBpKQotCQkJCQkJCQkJJiBscC0+Ci0JCQkJCQkJCQlyeF9tb2RfbWFza10uCi0JCQkJCQkJCXN0YXR1cykgPCAwKQotCQkJCQkJCWJyZWFrOwotCi0JCQkJCWlmIChpID4gbHAtPnJ4X3Jpbmdfc2l6ZSAtIDIpIHsKLQkJCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJCQlscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzIHw9Ci0JCQkJCQkgICAgbGUxNl90b19jcHUoMHg4MDAwKTsKLQkJCQkJCXdtYigpOwkvKiBNYWtlIHN1cmUgYWRhcHRlciBzZWVzIG93bmVyIGNoYW5nZSAqLwotCQkJCQkJbHAtPmN1cl9yeCsrOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlza2ItPmRldiA9IGRldjsKLQkJCQlpZiAoIXJ4X2luX3BsYWNlKSB7Ci0JCQkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIDE2IGJ5dGUgYWxpZ24gKi8KLQkJCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOwkvKiBNYWtlIHJvb20gKi8KLQkJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGxwLT5wY2lfZGV2LAotCQkJCQkJCQkgICAgbHAtPgotCQkJCQkJCQkgICAgcnhfZG1hX2FkZHIKLQkJCQkJCQkJICAgIFtlbnRyeV0sCi0JCQkJCQkJCSAgICBQS1RfQlVGX1NaIC0KLQkJCQkJCQkJICAgIDIsCi0JCQkJCQkJCSAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQkJCQlldGhfY29weV9hbmRfc3VtKHNrYiwKLQkJCQkJCQkgKHVuc2lnbmVkIGNoYXIgKikobHAtPgotCQkJCQkJCQkJICAgcnhfc2tidWZmCi0JCQkJCQkJCQkgICBbZW50cnldLT4KLQkJCQkJCQkJCSAgIGRhdGEpLAotCQkJCQkJCSBwa3RfbGVuLCAwKTsKLQkJCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGxwLT4KLQkJCQkJCQkJICAgICAgIHBjaV9kZXYsCi0JCQkJCQkJCSAgICAgICBscC0+Ci0JCQkJCQkJCSAgICAgICByeF9kbWFfYWRkcgotCQkJCQkJCQkgICAgICAgW2VudHJ5XSwKLQkJCQkJCQkJICAgICAgIFBLVF9CVUZfU1oKLQkJCQkJCQkJICAgICAgIC0gMiwKLQkJCQkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JCQkJfQotCQkJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwotCQkJCW5ldGlmX3J4KHNrYik7Ci0JCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKLQkJCQlscC0+c3RhdHMucnhfcGFja2V0cysrOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIFRoZSBkb2NzIHNheSB0aGF0IHRoZSBidWZmZXIgbGVuZ3RoIGlzbid0IHRvdWNoZWQsIGJ1dCBBbmRyZXcgQm95ZAotCQkgKiBvZiBRTlggcmVwb3J0cyB0aGF0IHNvbWUgcmV2cyBvZiB0aGUgNzlDOTY1IGNsZWFyIGl0LgotCQkgKi8KLQkJbHAtPnJ4X3JpbmdbZW50cnldLmJ1Zl9sZW5ndGggPSBsZTE2X3RvX2NwdSgyIC0gUEtUX0JVRl9TWik7Ci0JCXdtYigpOwkJLyogTWFrZSBzdXJlIG93bmVyIGNoYW5nZXMgYWZ0ZXIgYWxsIG90aGVycyBhcmUgdmlzaWJsZSAqLwotCQlscC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzIHw9IGxlMTZfdG9fY3B1KDB4ODAwMCk7Ci0JCWVudHJ5ID0gKCsrbHAtPmN1cl9yeCkgJiBscC0+cnhfbW9kX21hc2s7Ci0JCWlmICgtLWJvZ3VzY250IDw9IDApCi0JCQlicmVhazsJLyogZG9uJ3Qgc3RheSBpbiBsb29wIGZvcmV2ZXIgKi8KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBwY25ldDMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKQEAgLTI2MDksMTAgKzI2NzUsMTAgQEAKIAlpZiAobmV0aWZfbXNnX2lmZG93bihscCkpCiAJCXByaW50ayhLRVJOX0RFQlVHCiAJCSAgICAgICAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUyLjJ4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAwKSk7CisJCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCiAJLyogV2Ugc3RvcCB0aGUgUENORVQzMiBoZXJlIC0tIGl0IG9jY2FzaW9uYWxseSBwb2xscyBtZW1vcnkgaWYgd2UgZG9uJ3QuICovCi0JbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgMCwgMHgwMDA0KTsKKwlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBDU1IwX1NUT1ApOwogCiAJLyoKIAkgKiBTd2l0Y2ggYmFjayB0byAxNmJpdCBtb2RlIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZHVtYgpAQCAtMjYzOCwxMyArMjcwNCwxMCBAQAogewogCXN0cnVjdCBwY25ldDMyX3ByaXZhdGUgKmxwID0gZGV2LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JdTE2IHNhdmVkX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCXNhdmVkX2FkZHIgPSBscC0+YS5yZWFkX3JhcChpb2FkZHIpOwogCWxwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAxMTIpOwotCWxwLT5hLndyaXRlX3JhcChpb2FkZHIsIHNhdmVkX2FkZHIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gJmxwLT5zdGF0czsKQEAgLTI3MzAsNyArMjc5Myw3IEBACiAJCS8qIGNsZWFyIFNVU1BFTkQgKFNQTkQpIC0gQ1NSNSBiaXQgMCAqLwogCQljc3I1ID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1I1KTsKIAkJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSNSwgY3NyNSAmICh+Q1NSNV9TVVNQRU5EKSk7Ci0JfSBlbHNlIHsgCisJfSBlbHNlIHsKIAkJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9TVE9QKTsKIAkJcGNuZXQzMl9yZXN0YXJ0KGRldiwgQ1NSMF9OT1JNQUwpOwogCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CkBAIC0yOTY5LDcgKzMwMzIsNyBAQAogCQl0eF9zdGFydCA9IHR4X3N0YXJ0X3B0OwogCiAJLyogZmluZCB0aGUgUENJIGRldmljZXMgKi8KLQlpZiAoIXBjaV9tb2R1bGVfaW5pdCgmcGNuZXQzMl9kcml2ZXIpKQorCWlmICghcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNuZXQzMl9kcml2ZXIpKQogCQlwY25ldDMyX2hhdmVfcGNpID0gMTsKIAogCS8qIHNob3VsZCB3ZSBmaW5kIGFueSByZW1haW5pbmcgVkxidXMgZGV2aWNlcyA/ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCmluZGV4IDJiYTZkM2EuLmI3OWVjMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnCkBAIC01Niw1ICs1NiwyMiBAQAogCS0tLWhlbHAtLS0KIAkgIEN1cnJlbnRseSBzdXBwb3J0cyB0aGUgTEFOODNDMTg1IFBIWQogCitjb25maWcgRklYRURfUEhZCisJdHJpc3RhdGUgIkRyaXZlcnMgZm9yIFBIWSBlbXVsYXRpb24gb24gZml4ZWQgc3BlZWQvbGluayIKKwlkZXBlbmRzIG9uIFBIWUxJQgorCS0tLWhlbHAtLS0KKwkgIEFkZHMgdGhlIGRyaXZlciB0byBQSFkgbGF5ZXIgdG8gY292ZXIgdGhlIGJvYXJkcyB0aGF0IGRvIG5vdCBoYXZlIGFueSBQSFkgYm91bmQsCisJICBidXQgd2l0aCB0aGUgYWJpbGl0eSB0byBtYW5pcHVsYXRlIHdpdGggc3BlZWQvbGluayBpbiBzb2Z0d2FyZS4gVGhlIHJlbGF2YW50IE1JSQorCSAgc3BlZWQvZHVwbGV4IHBhcmFtZXRlcnMgY291bGQgYmUgZWZmZWN0aXZlbHkgaGFuZGxlZCBpbiB1c2VyLXNwZWNpZmllZCAgZnVjdGlvbi4KKwkgIEN1cnJlbnRseSB0ZXN0ZWQgd2l0aCBtcGM4NjZhZHMuCisKK2NvbmZpZyBGSVhFRF9NSUlfMTBfRkRYCisJYm9vbCAiRW11bGF0aW9uIGZvciAxME0gRmR4IGZpeGVkIFBIWSBiZWhhdmlvciIKKwlkZXBlbmRzIG9uIEZJWEVEX1BIWQorCitjb25maWcgRklYRURfTUlJXzEwMF9GRFgKKwlib29sICJFbXVsYXRpb24gZm9yIDEwME0gRmR4IGZpeGVkIFBIWSBiZWhhdmlvciIKKwlkZXBlbmRzIG9uIEZJWEVEX1BIWQorCiBlbmRtZW51CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZQppbmRleCBhMDBlNjE5Li4zMjBmODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlCkBAIC0xMCwzICsxMCw0IEBACiBvYmotJChDT05GSUdfUVNFTUlfUEhZKQkJKz0gcXNlbWkubwogb2JqLSQoQ09ORklHX1NNU0NfUEhZKQkJKz0gc21zYy5vCiBvYmotJChDT05GSUdfVklURVNTRV9QSFkpCSs9IHZpdGVzc2Uubworb2JqLSQoQ09ORklHX0ZJWEVEX1BIWSkJCSs9IGZpeGVkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jIGIvZHJpdmVycy9uZXQvcGh5L2ZpeGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlmN2VlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9maXhlZC5jCkBAIC0wLDAgKzEsMzYyIEBACisvKgorICogZHJpdmVycy9uZXQvcGh5L2ZpeGVkLmMKKyAqCisgKiBEcml2ZXIgZm9yIGZpeGVkIFBIWXMsIHdoZW4gdHJhbnNjZWl2ZXIgaXMgYWJsZSB0byBvcGVyYXRlIGluIG9uZSBmaXhlZCBtb2RlLgorICoKKyAqIEF1dGhvcjogVml0YWx5IEJvcmR1ZworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9waHkuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjZGVmaW5lIE1JSV9SRUdTX05VTQk3CisKKy8qCisgICAgVGhlIGlkZWEgaXMgdG8gZW11bGF0ZSBub3JtYWwgcGh5IGJlaGF2aW9yIGJ5IHJlc3BvbmRpbmcgd2l0aAorICAgIHByZS1kZWZpbmVkIHZhbHVlcyB0byBtaWkgQk1DUiByZWFkLCBzbyB0aGF0IHJlYWRfc3RhdHVzIGhvb2sgY291bGQKKyAgICB0YWtlIGFsbCB0aGUgbmVlZGVkIGluZm8uCisqLworCitzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyB7CisJdTggCWxpbms7CisJdTE2CXNwZWVkOworCXU4IAlkdXBsZXg7Cit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgUHJpdmF0ZSBpbmZvcm1hdGlvbiBob2RlciBmb3IgbWlpX2J1cworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdHJ1Y3QgZml4ZWRfaW5mbyB7CisJdTE2ICpyZWdzOworCXU4IHJlZ3NfbnVtOworCXN0cnVjdCBmaXhlZF9waHlfc3RhdHVzIHBoeV9zdGF0dXM7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsgLyogcG9pbnRlciB0byB0aGUgY29udGFpbmVyICovCisJLyogbGluayAmIHNwZWVkIGNiICovCisJaW50KCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UqLCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyopOworCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSWYgc29tZXRoaW5nIHdlaXJkIGlzIHJlcXVpcmVkIHRvIGJlIGRvbmUgd2l0aCBsaW5rL3NwZWVkLAorICogbmV0d29yayBkcml2ZXIgaXMgYWJsZSB0byBhc3NpZ24gYSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgdGhpcy4KKyAqIE1heSBiZSB1c2VmdWwgZm9yIFBIWSdzIHRoYXQgbmVlZCB0byBiZSBzb2Z0d2FyZS1kcml2ZW4uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2ludCBmaXhlZF9tZGlvX3NldF9saW5rX3VwZGF0ZShzdHJ1Y3QgcGh5X2RldmljZSogcGh5ZGV2LAorCQlpbnQoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSosIHN0cnVjdCBmaXhlZF9waHlfc3RhdHVzKikpCit7CisJc3RydWN0IGZpeGVkX2luZm8gKmZpeGVkOworCisJaWYobGlua191cGRhdGUgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZihwaHlkZXYpIHsKKwkJaWYocGh5ZGV2LT5idXMpCXsKKwkJCWZpeGVkID0gcGh5ZGV2LT5idXMtPnByaXY7CisJCQlmaXhlZC0+bGlua191cGRhdGUgPSBsaW5rX3VwZGF0ZTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChmaXhlZF9tZGlvX3NldF9saW5rX3VwZGF0ZSk7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUaGlzIGlzIHVzZWQgZm9yIHVwZGF0aW5nIGludGVybmFsIG1paSByZWdzIGZyb20gdGhlIHN0YXR1cworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgaW50IGZpeGVkX21kaW9fdXBkYXRlX3JlZ3Moc3RydWN0IGZpeGVkX2luZm8gKmZpeGVkKQoreworCXUxNiAqcmVncyA9IGZpeGVkLT5yZWdzOworCXUxNiBibXNyID0gMDsKKwl1MTYgYm1jciA9IDA7CisKKwlpZighcmVncykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZWdzIG5vdCBzZXQgdXAiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZihmaXhlZC0+cGh5X3N0YXR1cy5saW5rKQorCQlibXNyIHw9IEJNU1JfTFNUQVRVUzsKKworCWlmKGZpeGVkLT5waHlfc3RhdHVzLmR1cGxleCkgeworCQlibWNyIHw9IEJNQ1JfRlVMTERQTFg7CisKKwkJc3dpdGNoICggZml4ZWQtPnBoeV9zdGF0dXMuc3BlZWQgKSB7CisJCWNhc2UgMTAwOgorCQkJYm1zciB8PSBCTVNSXzEwMEZVTEw7CisJCQlibWNyIHw9IEJNQ1JfU1BFRUQxMDA7CisJCWJyZWFrOworCisJCWNhc2UgMTA6CisJCQlibXNyIHw9IEJNU1JfMTBGVUxMOworCQlicmVhazsKKwkJfQorCX0gZWxzZSB7CisJCXN3aXRjaCAoIGZpeGVkLT5waHlfc3RhdHVzLnNwZWVkICkgeworCQljYXNlIDEwMDoKKwkJCWJtc3IgfD0gQk1TUl8xMDBIQUxGOworCQkJYm1jciB8PSBCTUNSX1NQRUVEMTAwOworCQlicmVhazsKKworCQljYXNlIDEwOgorCQkJYm1zciB8PSBCTVNSXzEwMEhBTEY7CisJCWJyZWFrOworCQl9CisJfQorCisJcmVnc1tNSUlfQk1DUl0gPSAgYm1jcjsKKwlyZWdzW01JSV9CTVNSXSA9ICBibXNyIHwgMHg4MDA7IC8qd2UgYXJlIGFsd2F5cyBjYXBhYmxlIG9mIDEwIGhkeCovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaXhlZF9taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pCit7CisJc3RydWN0IGZpeGVkX2luZm8gKmZpeGVkID0gYnVzLT5wcml2OworCisJLyogaWYgdXNlciBoYXMgcmVnaXN0ZXJlZCBsaW5rIHVwZGF0ZSBjYWxsYmFjaywgdXNlIGl0ICovCisJaWYoZml4ZWQtPnBoeWRldikKKwkJaWYoZml4ZWQtPnBoeWRldi0+YXR0YWNoZWRfZGV2KSB7CisJCQlpZihmaXhlZC0+bGlua191cGRhdGUpIHsKKwkJCQlmaXhlZC0+bGlua191cGRhdGUoZml4ZWQtPnBoeWRldi0+YXR0YWNoZWRfZGV2LAorCQkJCQkJJmZpeGVkLT5waHlfc3RhdHVzKTsKKwkJCQlmaXhlZF9tZGlvX3VwZGF0ZV9yZWdzKGZpeGVkKTsKKwkJCX0KKwl9CisKKwlpZiAoKHVuc2lnbmVkIGludClsb2NhdGlvbiA+PSBmaXhlZC0+cmVnc19udW0pCisJCXJldHVybiAtMTsKKwlyZXR1cm4gZml4ZWQtPnJlZ3NbbG9jYXRpb25dOworfQorCitzdGF0aWMgaW50IGZpeGVkX21paV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIHUxNiB2YWwpCit7CisJLyogZG8gbm90aGluZyBmb3Igbm93Ki8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaXhlZF9taWlfcmVzZXQoc3RydWN0IG1paV9idXMgKmJ1cykKK3sKKwkvKm5vdGhpbmcgaGVyZSAtIG5vIHdheS9uZWVkIHRvIHJlc2V0IGl0Ki8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaXhlZF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQoreworCS8qIDpUT0RPOjAzLzEzLzIwMDYgMDk6NDU6MzcgUE06OgorCSBUaGUgZnVsbCBhdXRvbmVnIGZ1bmNpb25hbGl0eSBjYW4gYmUgZW11bGF0ZWQsCisJIGJ1dCBubyBuZWVkIHRvIGhhdmUgYW55dGhpbmcgaGVyZSBmb3Igbm93CisJICovCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIHRoZSBtYW51YWwgYmluZCB3aWxsIGRvIHRoZSBtYWdpYyAtIHdpdGggcGh5X2lkX21hc2sgPT0gMAorICogbWF0Y2ggd2lsbCBuZXZlciByZXR1cm4gdHJ1ZS4uLgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgZml4ZWRfbWRpb19kcml2ZXIgPSB7CisJLm5hbWUJCT0gIkZpeGVkIFBIWSIsCisJLmZlYXR1cmVzCT0gUEhZX0JBU0lDX0ZFQVRVUkVTLAorCS5jb25maWdfYW5lZwk9IGZpeGVkX2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cwk9IGdlbnBoeV9yZWFkX3N0YXR1cywKKwkuZHJpdmVyIAk9IHsgLm93bmVyID0gVEhJU19NT0RVTEUsfSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUaGlzIGZ1bmMgaXMgdXNlZCB0byBjcmVhdGUgYWxsIHRoZSBuZWNlc3Nhcnkgc3R1ZmYsIGJpbmQKKyAqIHRoZSBmaXhlZCBwaHkgZHJpdmVyIGFuZCByZWdpc3RlciBhbGwgaXQgb24gdGhlIG1kaW9fYnVzX3R5cGUuCisgKiBzcGVlZCBpcyBlaXRoZXIgMTAgb3IgMTAwLCBkdXBsZXggaXMgYm9vbGVhbi4KKyAqIG51bWJlciBpcyB1c2VkIHRvIGNyZWF0ZSBtdWx0aXBsZSBmaXhlZCBQSFlzLCBzbyB0aGF0IHNldmVyYWwgZGV2aWNlcyBjYW4KKyAqIHV0aWxpemUgdGhlbSBzaW11bHRhbmVvdXNseS4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworc3RhdGljIGludCBmaXhlZF9tZGlvX3JlZ2lzdGVyX2RldmljZShpbnQgbnVtYmVyLCBpbnQgc3BlZWQsIGludCBkdXBsZXgpCit7CisJc3RydWN0IG1paV9idXMgKm5ld19idXM7CisJc3RydWN0IGZpeGVkX2luZm8gKmZpeGVkOworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CisJaW50IGVyciA9IDA7CisKKwlzdHJ1Y3QgZGV2aWNlKiBkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbmV3X2J1cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWlfYnVzKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSBuZXdfYnVzKSB7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlmaXhlZCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmaXhlZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSBmaXhlZCkgeworCQlrZnJlZShkZXYpOworCQlrZnJlZShuZXdfYnVzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZml4ZWQtPnJlZ3MgPSBremFsbG9jKE1JSV9SRUdTX05VTSpzaXplb2YoaW50KSwgR0ZQX0tFUk5FTCk7CisJZml4ZWQtPnJlZ3NfbnVtID0gTUlJX1JFR1NfTlVNOworCWZpeGVkLT5waHlfc3RhdHVzLnNwZWVkID0gc3BlZWQ7CisJZml4ZWQtPnBoeV9zdGF0dXMuZHVwbGV4ID0gZHVwbGV4OworCWZpeGVkLT5waHlfc3RhdHVzLmxpbmsgPSAxOworCisJbmV3X2J1cy0+bmFtZSA9ICJGaXhlZCBNSUkgQnVzIiwKKwluZXdfYnVzLT5yZWFkID0gJmZpeGVkX21paV9yZWFkLAorCW5ld19idXMtPndyaXRlID0gJmZpeGVkX21paV93cml0ZSwKKwluZXdfYnVzLT5yZXNldCA9ICZmaXhlZF9taWlfcmVzZXQsCisKKwkvKnNldCB1cCB3b3Jrc3BhY2UqLworCWZpeGVkX21kaW9fdXBkYXRlX3JlZ3MoZml4ZWQpOworCW5ld19idXMtPnByaXYgPSBmaXhlZDsKKworCW5ld19idXMtPmRldiA9IGRldjsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZXdfYnVzKTsKKworCS8qIGNyZWF0ZSBwaHlfZGV2aWNlIGFuZCByZWdpc3RlciBpdCBvbiB0aGUgbWRpbyBidXMgKi8KKwlwaHlkZXYgPSBwaHlfZGV2aWNlX2NyZWF0ZShuZXdfYnVzLCAwLCAwKTsKKworCS8qCisJIFB1dCB0aGUgcGh5ZGV2IHBvaW50ZXIgaW50byB0aGUgZml4ZWQgcGFjayBzbyB0aGF0IGJ1cyByZWFkL3dyaXRlIGNvZGUgY291bGQKKwkgYmUgYWJsZSB0byBhY2Nlc3MgZm9yIGluc3RhbmNlIGF0dGFjaGVkIG5ldGRldi4gV2VsbCBpdCBkb2Vzbid0IGhhdmUgdG8gZG8KKwkgc28sIG9ubHkgaW4gY2FzZSBvZiB1dGlsaXppbmcgdXNlci1zcGVjaWZpZWQgbGluay11cGRhdGUuLi4KKwkgKi8KKwlmaXhlZC0+cGh5ZGV2ID0gcGh5ZGV2OworCisJaWYoTlVMTCA9PSBwaHlkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBkZXZpY2VfY3JlYXRlX2ZhaWw7CisJfQorCisJcGh5ZGV2LT5pcnEgPSAtMTsKKwlwaHlkZXYtPmRldi5idXMgPSAmbWRpb19idXNfdHlwZTsKKworCWlmKG51bWJlcikKKwkJc25wcmludGYocGh5ZGV2LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwKKwkJCQkiZml4ZWRfJWRAJWQ6JWQiLCBudW1iZXIsIHNwZWVkLCBkdXBsZXgpOworCWVsc2UKKwkJc25wcmludGYocGh5ZGV2LT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwKKwkJCQkiZml4ZWRAJWQ6JWQiLCBzcGVlZCwgZHVwbGV4KTsKKwlwaHlkZXYtPmJ1cyA9IG5ld19idXM7CisKKwllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJnBoeWRldi0+ZGV2KTsKKwlpZihlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQaHkgJXMgZmFpbGVkIHRvIHJlZ2lzdGVyXG4iLAorCQkJCXBoeWRldi0+ZGV2LmJ1c19pZCk7CisJCWdvdG8gYnVzX3JlZ2lzdGVyX2ZhaWw7CisJfQorCisJLyoKKwkgICB0aGUgbWRpbyBidXMgaGFzIHBoeV9pZCBtYXRjaC4uLiBJbiBvcmRlciBub3QgdG8gZG8gaXQKKwkgICBhcnRpZmljaWFsbHksIHdlIGFyZSBiaW5kaW5nIHRoZSBkcml2ZXIgaGVyZSBieSBoYW5kOworCSAgIGl0IHdpbGwgYmUgdGhlIHNhbWUgZm9yIGFsbCB0aGUgZml4ZWQgcGh5cyBhbnl3YXkuCisJICovCisJZG93bl93cml0ZSgmcGh5ZGV2LT5kZXYuYnVzLT5zdWJzeXMucndzZW0pOworCisJcGh5ZGV2LT5kZXYuZHJpdmVyID0gJmZpeGVkX21kaW9fZHJpdmVyLmRyaXZlcjsKKworCWVyciA9IHBoeWRldi0+ZGV2LmRyaXZlci0+cHJvYmUoJnBoeWRldi0+ZGV2KTsKKwlpZihlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUGh5ICVzOiBwcm9ibGVtcyB3aXRoIGZpeGVkIGRyaXZlclxuIixwaHlkZXYtPmRldi5idXNfaWQpOworCQl1cF93cml0ZSgmcGh5ZGV2LT5kZXYuYnVzLT5zdWJzeXMucndzZW0pOworCQlnb3RvIHByb2JlX2ZhaWw7CisJfQorCisJZGV2aWNlX2JpbmRfZHJpdmVyKCZwaHlkZXYtPmRldik7CisJdXBfd3JpdGUoJnBoeWRldi0+ZGV2LmJ1cy0+c3Vic3lzLnJ3c2VtKTsKKworCXJldHVybiAwOworCitwcm9iZV9mYWlsOgorCWRldmljZV91bnJlZ2lzdGVyKCZwaHlkZXYtPmRldik7CitidXNfcmVnaXN0ZXJfZmFpbDoKKwlrZnJlZShwaHlkZXYpOworZGV2aWNlX2NyZWF0ZV9mYWlsOgorCWtmcmVlKGRldik7CisJa2ZyZWUobmV3X2J1cyk7CisJa2ZyZWUoZml4ZWQpOworCisJcmV0dXJuIGVycjsKK30KKworCitNT0RVTEVfREVTQ1JJUFRJT04oIkZpeGVkIFBIWSBkZXZpY2UgJiBkcml2ZXIgZm9yIFBBTCIpOworTU9EVUxFX0FVVEhPUigiVml0YWx5IEJvcmR1ZyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9faW5pdCBmaXhlZF9pbml0KHZvaWQpCit7CisjaWYgMAorCWludCByZXQ7CisJaW50IGR1cGxleCA9IDA7CisjZW5kaWYKKworCS8qIHJlZ2lzdGVyIG9uIHRoZSBidXMuLi4gTm90IGV4cGVjdGVkIHRvIGJlIG1hdGNoZWQgd2l0aCBhbnl0aGluZyB0aGVyZS4uLiAqLworCXBoeV9kcml2ZXJfcmVnaXN0ZXIoJmZpeGVkX21kaW9fZHJpdmVyKTsKKworCS8qIFNvIGxldCB0aGUgZnVuIGJlZ2luLi4uCisJICAgV2Ugd2lsbCBjcmVhdGUgc2V2ZXJhbCBtZGlvIGRldmljZXMgaGVyZSwgYW5kIHdpbGwgYm91bmQgdGhlIHVwcGVyCisJICAgZHJpdmVyIHRvIHRoZW0uCisKKwkgICBUaGVuIHRoZSBleHRlcm5hbCBzb2Z0d2FyZSBjYW4gbG9va3VwIHRoZSBwaHkgYnVzIGJ5IHNlYXJjaGluZworCSAgIGZpeGVkQHNwZWVkOmR1cGxleCwgZS5nLiBmaXhlZEAxMDA6MSwgdG8gYmUgY29ubmVjdGVkIHRvIHRoZQorCSAgIHZpcnR1YWwgMTAwTSBGZHggcGh5LgorCisJICAgSW4gY2FzZSBzZXZlcmFsIHZpcnR1YWwgUEhZcyByZXF1aXJlZCwgdGhlIGJ1c19pZCB3aWxsIGJlIGluIGZvcm0KKwkgICBmaXhlZF88bnVtPkA8c3BlZWQ+OjxkdXBsZXg+LCB3aGljaCBtYWtlIGl0IGFibGUgZXZlbiB0byBkZWZpbmUKKwkgICBkcml2ZXItc3BlY2lmaWMgbGluayBjb250cm9sIGNhbGxiYWNrLCBpZiBmb3IgaW5zdGFuY2UgUEhZIGlzIGNvbXBsZXRlbHkKKwkgICBTVy1kcml2ZW4uCisKKwkqLworCisjaWZkZWYgQ09ORklHX0ZJWEVEX01JSV9EVVBMRVgKKyNpZiAwCisJZHVwbGV4ID0gMTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfRklYRURfTUlJXzEwMF9GRFgKKwlmaXhlZF9tZGlvX3JlZ2lzdGVyX2RldmljZSgwLCAxMDAsIDEpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSVhfRklYRURfTUlJXzEwX0ZEWAorCWZpeGVkX21kaW9fcmVnaXN0ZXJfZGV2aWNlKDAsIDEwLCAxKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgZml4ZWRfZXhpdCh2b2lkKQoreworCXBoeV9kcml2ZXJfdW5yZWdpc3RlcigmZml4ZWRfbWRpb19kcml2ZXIpOworCS8qIDpXQVJOSU5HOjAyLzE4LzIwMDYgMDQ6MzI6NDAgQU06OiBDbGVhbnVwIGFsbCB0aGUgY3JlYXRlZCBzdHVmZiAqLworfQorCittb2R1bGVfaW5pdChmaXhlZF9pbml0KTsKK21vZHVsZV9leGl0KGZpeGVkX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21kaW9fYnVzLmMgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwppbmRleCAxZGRlMzkwLi5jZjY2NjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWRpb19idXMuYwpAQCAtMTU5LDYgKzE1OSw3IEBACiAJLnN1c3BlbmQJPSBtZGlvX2J1c19zdXNwZW5kLAogCS5yZXN1bWUJCT0gbWRpb19idXNfcmVzdW1lLAogfTsKK0VYUE9SVF9TWU1CT0wobWRpb19idXNfdHlwZSk7CiAKIGludCBfX2luaXQgbWRpb19idXNfaW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeS5jCmluZGV4IDdkNWMyMjMuLmY1YWFkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHkuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5LmMKQEAgLTQxOSw5ICs0MTksOCBAQAogCiAvKiBwaHlfc3RvcF9tYWNoaW5lCiAgKgotICogZGVzY3JpcHRpb246IFN0b3BzIHRoZSBzdGF0ZSBtYWNoaW5lIHRpbWVyLCBzZXRzIHRoZSBzdGF0ZSB0bwotICogICBVUCAodW5sZXNzIGl0IHdhc24ndCB1cCB5ZXQpLCBhbmQgdGhlbiBmcmVlcyB0aGUgaW50ZXJydXB0LAotICogICBpZiBpdCBpcyBpbiB1c2UuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgQkVGT1JFCisgKiBkZXNjcmlwdGlvbjogU3RvcHMgdGhlIHN0YXRlIG1hY2hpbmUgdGltZXIsIHNldHMgdGhlIHN0YXRlIHRvIFVQCisgKiAgICh1bmxlc3MgaXQgd2Fzbid0IHVwIHlldCkuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgQkVGT1JFCiAgKiAgIHBoeV9kZXRhY2guCiAgKi8KIHZvaWQgcGh5X3N0b3BfbWFjaGluZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQpAQCAtNDMzLDkgKzQzMiw2IEBACiAJCXBoeWRldi0+c3RhdGUgPSBQSFlfVVA7CiAJc3Bpbl91bmxvY2soJnBoeWRldi0+bG9jayk7CiAKLQlpZiAocGh5ZGV2LT5pcnEgIT0gUEhZX1BPTEwpCi0JCXBoeV9zdG9wX2ludGVycnVwdHMocGh5ZGV2KTsKLQogCXBoeWRldi0+YWRqdXN0X3N0YXRlID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKaW5kZXggMWJjMWUwMy4uMmQxZWNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYworKysgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC00NSw2ICs0NSwzNSBAQAogZXh0ZXJuIGludCBtZGlvX2J1c19pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbWRpb19idXNfZXhpdCh2b2lkKTsKIAorc3RydWN0IHBoeV9kZXZpY2UqIHBoeV9kZXZpY2VfY3JlYXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLCBpbnQgcGh5X2lkKQoreworCXN0cnVjdCBwaHlfZGV2aWNlICpkZXY7CisJLyogV2UgYWxsb2NhdGUgdGhlIGRldmljZSwgYW5kIGluaXRpYWxpemUgdGhlCisJICogZGVmYXVsdCB2YWx1ZXMgKi8KKwlkZXYgPSBrY2FsbG9jKDEsIHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoTlVMTCA9PSBkZXYpCisJCXJldHVybiAoc3RydWN0IHBoeV9kZXZpY2UqKSBQVFJfRVJSKCh2b2lkKiktRU5PTUVNKTsKKworCWRldi0+c3BlZWQgPSAwOworCWRldi0+ZHVwbGV4ID0gLTE7CisJZGV2LT5wYXVzZSA9IGRldi0+YXN5bV9wYXVzZSA9IDA7CisJZGV2LT5saW5rID0gMTsKKworCWRldi0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOworCisJZGV2LT5hZGRyID0gYWRkcjsKKwlkZXYtPnBoeV9pZCA9IHBoeV9pZDsKKwlkZXYtPmJ1cyA9IGJ1czsKKworCWRldi0+c3RhdGUgPSBQSFlfRE9XTjsKKworCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCisJcmV0dXJuIGRldjsKK30KK0VYUE9SVF9TWU1CT0wocGh5X2RldmljZV9jcmVhdGUpOworCiAvKiBnZXRfcGh5X2RldmljZQogICoKICAqIGRlc2NyaXB0aW9uOiBSZWFkcyB0aGUgSUQgcmVnaXN0ZXJzIG9mIHRoZSBQSFkgYXQgYWRkciBvbiB0aGUKQEAgLTc4LDI3ICsxMDcsNyBAQAogCWlmICgweGZmZmZmZmZmID09IHBoeV9pZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQkvKiBPdGhlcndpc2UsIHdlIGFsbG9jYXRlIHRoZSBkZXZpY2UsIGFuZCBpbml0aWFsaXplIHRoZQotCSAqIGRlZmF1bHQgdmFsdWVzICovCi0JZGV2ID0ga2NhbGxvYygxLCBzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwotCi0JaWYgKE5VTEwgPT0gZGV2KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCWRldi0+c3BlZWQgPSAwOwotCWRldi0+ZHVwbGV4ID0gLTE7Ci0JZGV2LT5wYXVzZSA9IGRldi0+YXN5bV9wYXVzZSA9IDA7Ci0JZGV2LT5saW5rID0gMTsKLQotCWRldi0+YXV0b25lZyA9IEFVVE9ORUdfRU5BQkxFOwotCi0JZGV2LT5hZGRyID0gYWRkcjsKLQlkZXYtPnBoeV9pZCA9IHBoeV9pZDsKLQlkZXYtPmJ1cyA9IGJ1czsKLQotCWRldi0+c3RhdGUgPSBQSFlfRE9XTjsKLQotCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOworCWRldiA9IHBoeV9kZXZpY2VfY3JlYXRlKGJ1cywgYWRkciwgcGh5X2lkKTsKIAogCXJldHVybiBkZXY7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc21zYy5jIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwppbmRleCAyNWUzMWZiLi5iMWQ4ZWQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvc21zYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKQEAgLTE0LDcgKzE0LDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21paS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYyBiL2RyaXZlcnMvbmV0L3BoeS92aXRlc3NlLmMKaW5kZXggZmZkMjE1ZC4uNzkyNzE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3ZpdGVzc2UuYworKysgYi9kcml2ZXJzL25ldC9waHkvdml0ZXNzZS5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9taWkuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BsaXAuYyBiL2RyaXZlcnMvbmV0L3BsaXAuYwppbmRleCBkNDQ0OWQ2Li5kNGY1NGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wbGlwLmMKKysrIGIvZHJpdmVycy9uZXQvcGxpcC5jCkBAIC0xNiw3ICsxNiw3IEBACiAgKgkJcGFycG9ydC1zaGFyaW5nIGF3YXJlbmVzcyBjb2RlIGJ5IFBoaWxpcCBCbHVuZGVsbC4KICAqCQlTTVAgbG9ja2luZyBieSBOaWliZSBZdXRha2EuCiAgKgkJU3VwcG9ydCBmb3IgcGFyYWxsZWwgcG9ydHMgd2l0aCBubyBJUlEgKHBvbGwgbW9kZSksCi0gKgkJTW9kaWZpY2F0aW9ucyB0byB1c2UgdGhlIHBhcmFsbGVsIHBvcnQgQVBJIAorICoJCU1vZGlmaWNhdGlvbnMgdG8gdXNlIHRoZSBwYXJhbGxlbCBwb3J0IEFQSQogICoJCWJ5IE5pbXJvZCBaaW1lcm1hbi4KICAqCiAgKiBGaXhlczoKQEAgLTM4Myw3ICszODMsNyBAQAogcGxpcF90aW1lcl9iaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRfbG9jYWwgKm5sID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCWlmICghKGF0b21pY19yZWFkICgmbmwtPmtpbGxfdGltZXIpKSkgewogCQlwbGlwX2ludGVycnVwdCAoLTEsIGRldiwgTlVMTCk7CiAKQEAgLTUyNyw3ICs1MjcsNyBAQAogfQogCiAvKgotICoJRGV0ZXJtaW5lIHRoZSBwYWNrZXQncyBwcm90b2NvbCBJRC4gVGhlIHJ1bGUgaGVyZSBpcyB0aGF0IHdlIAorICoJRGV0ZXJtaW5lIHRoZSBwYWNrZXQncyBwcm90b2NvbCBJRC4gVGhlIHJ1bGUgaGVyZSBpcyB0aGF0IHdlCiAgKglhc3N1bWUgODAyLjMgaWYgdGhlIHR5cGUgZmllbGQgaXMgc2hvcnQgZW5vdWdoIHRvIGJlIGEgbGVuZ3RoLgogICoJVGhpcyBpcyBub3JtYWwgcHJhY3RpY2UgYW5kIHdvcmtzIGZvciBhbnkgJ25vdyBpbiB1c2UnIHByb3RvY29sLgogICoKQEAgLTUzNywxNiArNTM3LDE2IEBACiAgKglXZSBjYW4ndCBmaXggdGhlIGRhZGRyIHRoaW5nIGFzIHRoYXQgcXVpcmsgKG1vcmUgYnVnKSBpcyBlbWJlZGRlZAogICoJaW4gZmFyIHRvbyBtYW55IG9sZCBzeXN0ZW1zIG5vdCBhbGwgZXZlbiBydW5uaW5nIExpbnV4LgogICovCi0gCisKIHN0YXRpYyBfX2JlMTYgcGxpcF90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCXVuc2lnbmVkIGNoYXIgKnJhd3A7Ci0JCisKIAlza2ItPm1hYy5yYXc9c2tiLT5kYXRhOwogCXNrYl9wdWxsKHNrYixkZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAJZXRoID0gZXRoX2hkcihza2IpOwotCQorCiAJaWYoKmV0aC0+aF9kZXN0JjEpCiAJewogCQlpZihtZW1jbXAoZXRoLT5oX2Rlc3QsZGV2LT5icm9hZGNhc3QsIEVUSF9BTEVOKT09MCkKQEAgLTU1NCwxNyArNTU0LDE3IEBACiAJCWVsc2UKIAkJCXNrYi0+cGt0X3R5cGU9UEFDS0VUX01VTFRJQ0FTVDsKIAl9Ci0JCisKIAkvKgogCSAqCVRoaXMgQUxMTVVMVEkgY2hlY2sgc2hvdWxkIGJlIHJlZHVuZGFudCBieSAxLjQKIAkgKglzbyBkb24ndCBmb3JnZXQgdG8gcmVtb3ZlIGl0LgogCSAqLwotCSAKKwogCWlmIChudG9ocyhldGgtPmhfcHJvdG8pID49IDE1MzYpCiAJCXJldHVybiBldGgtPmhfcHJvdG87Ci0JCQorCiAJcmF3cCA9IHNrYi0+ZGF0YTsKLQkKKwogCS8qCiAJICoJVGhpcyBpcyBhIG1hZ2ljIGhhY2sgdG8gc3BvdCBJUFggcGFja2V0cy4gT2xkZXIgTm92ZWxsIGJyZWFrcwogCSAqCXRoZSBwcm90b2NvbCBkZXNpZ24gYW5kIHJ1bnMgSVBYIG92ZXIgODAyLjMgd2l0aG91dCBhbiA4MDIuMiBMTEMKQEAgLTU3Myw3ICs1NzMsNyBAQAogCSAqLwogCWlmICgqKHVuc2lnbmVkIHNob3J0ICopcmF3cCA9PSAweEZGRkYpCiAJCXJldHVybiBodG9ucyhFVEhfUF84MDJfMyk7Ci0JCQorCiAJLyoKIAkgKglSZWFsIDgwMi4yIExMQwogCSAqLwpAQCAtOTcyLDcgKzk3Miw3IEBACiAJfQogCiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKLQkKKwogCWlmIChza2ItPmxlbiA+IGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBhY2tldCB0b28gYmlnLCAlZC5cbiIsIGRldi0+bmFtZSwgKGludClza2ItPmxlbik7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOwpAQCAtOTkzLDcgKzk5Myw3IEBACiAJfQogCXNjaGVkdWxlX3dvcmsoJm5sLT5pbW1lZGlhdGUpOwogCXNwaW5fdW5sb2NrX2lycSgmbmwtPmxvY2spOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMzIsNyArMTAzMiw3IEBACiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbmwgPSBuZWlnaC0+ZGV2LT5wcml2OwogCWludCByZXQ7Ci0JCisKIAlpZiAoKHJldCA9IG5sLT5vcmlnX2hhcmRfaGVhZGVyX2NhY2hlKG5laWdoLCBoaCkpID09IDApCiAJewogCQlzdHJ1Y3QgZXRoaGRyICpldGg7CkBAIC0xMDQxLDkgKzEwNDEsOSBAQAogCQkJCSAgICAgICBISF9EQVRBX09GRihzaXplb2YoKmV0aCkpKTsKIAkJcGxpcF9yZXdyaXRlX2FkZHJlc3MgKG5laWdoLT5kZXYsIGV0aCk7CiAJfQotCQorCiAJcmV0dXJuIHJldDsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgIAorfQogCiAvKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLiAgVGhpcyBpcyBjYWxsZWQgKGluIHRoZSBjdXJyZW50IGtlcm5lbCkKICAgIHNvbWV0aW1lIGFmdGVyIGJvb3Rpbmcgd2hlbiB0aGUgJ2lmY29uZmlnJyBwcm9ncmFtIGlzIHJ1bi4KQEAgLTExODcsNyArMTE4Nyw3IEBACiAJCWVsc2UKIAkJCXJldHVybjsKIAl9Ci0JCisKIAlpZiAoIShkZXYtPmZsYWdzICYgSUZGX1VQKSkKIAkJLyogRG9uJ3QgbmVlZCB0aGUgcG9ydCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZG93biAqLwogCQlyZXR1cm47CkBAIC0xMjY0LDcgKzEyNjQsNyBAQAogCXN0cnVjdCBuZXRfbG9jYWwgKm5sOwogCWNoYXIgbmFtZVtJRk5BTVNJWl07CiAKLQlpZiAoKHBhcnBvcnRbMF0gPT0gLTEgJiYgKCF0aW1pZCB8fCAhcG9ydC0+ZGV2aWNlcykpIHx8IAorCWlmICgocGFycG9ydFswXSA9PSAtMSAmJiAoIXRpbWlkIHx8ICFwb3J0LT5kZXZpY2VzKSkgfHwKIAkgICAgcGxpcF9zZWFyY2hmb3IocGFycG9ydCwgcG9ydC0+bnVtYmVyKSkgewogCQlpZiAodW5pdCA9PSBQTElQX01BWCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJwbGlwOiB0b28gbWFueSBkZXZpY2VzXG4iKTsKQEAgLTEyNzcsNyArMTI3Nyw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgInBsaXA6IG1lbW9yeSBzcXVlZXplXG4iKTsKIAkJCXJldHVybjsKIAkJfQotCQkKKwogCQlzdHJjcHkoZGV2LT5uYW1lLCBuYW1lKTsKIAogCQlTRVRfTU9EVUxFX09XTkVSKGRldik7CkBAIC0xMjkwLDcgKzEyOTAsNyBAQAogCiAJCW5sID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAkJbmwtPnBhcmRldiA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBvcnQsIG5hbWUsIHBsaXBfcHJlZW1wdCwKLQkJCQkJCSBwbGlwX3dha2V1cCwgcGxpcF9pbnRlcnJ1cHQsIAorCQkJCQkJIHBsaXBfd2FrZXVwLCBwbGlwX2ludGVycnVwdCwKIAkJCQkJCSAwLCBkZXYpOwogCiAJCWlmICghbmwtPnBhcmRldikgewpAQCAtMTM4NCw3ICsxMzg0LDcgQEAKIAkJCS8qIGRpc2FibGUgZHJpdmVyIG9uICJwbGlwPSIgb3IgInBsaXA9MCIgKi8KIAkJCXBhcnBvcnRbMF0gPSAtMjsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIndhcm5pbmc6ICdwbGlwPTB4JXgnIGlnbm9yZWRcbiIsIAorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAid2FybmluZzogJ3BsaXA9MHgleCcgaWdub3JlZFxuIiwKIAkJCSAgICAgICBpbnRzWzFdKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9hc3luYy5jIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKaW5kZXggMjM2NTlmZC4uOTMzZTJmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2FzeW5jLmMKQEAgLTEyNSw4ICsxMjUsOCBAQAogICogd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHVzZSBhIHJ3bG9jayBpbiB0aGUgdHR5IHN0cnVjdCwgYnV0IGZvciBub3cKICAqIHdlIHVzZSBhIHNpbmdsZSBnbG9iYWwgcndsb2NrIGZvciBhbGwgdHR5cyBpbiBwcHAgbGluZSBkaXNjaXBsaW5lLgogICoKLSAqIEZJWE1FOiB0aGlzIGlzIG5vIGxvbmdlciB0cnVlLiBUaGUgX2Nsb3NlIHBhdGggZm9yIHRoZSBsZGlzYyBpcyAKLSAqIG5vdyBndWFyYW50ZWVkIHRvIGJlIHNhbmUuIAorICogRklYTUU6IHRoaXMgaXMgbm8gbG9uZ2VyIHRydWUuIFRoZSBfY2xvc2UgcGF0aCBmb3IgdGhlIGxkaXNjIGlzCisgKiBub3cgZ3VhcmFudGVlZCB0byBiZSBzYW5lLgogICovCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhkaXNjX2RhdGFfbG9jayk7CiAKQEAgLTI3Nyw3ICsyNzcsNyBAQAogICogQ2FsbGVkIGluIHByb2Nlc3MgY29udGV4dCBvbmx5LiBNYXkgYmUgcmUtZW50ZXJlZCBieSBtdWx0aXBsZQogICogaW9jdGwgY2FsbGluZyB0aHJlYWRzLgogICovCi0gCisKIHN0YXRpYyBpbnQKIHBwcF9hc3luY3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jIGIvZHJpdmVycy9uZXQvcHBwX2RlZmxhdGUuYwppbmRleCAzODcyMDg4Li5mNTRjNTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBfZGVmbGF0ZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcF9kZWZsYXRlLmMKQEAgLTYzNSw3ICs2MzUsNyBAQAogfTsKIAogc3RhdGljIGludCBfX2luaXQgZGVmbGF0ZV9pbml0KHZvaWQpCi17ICAKK3sKICAgICAgICAgaW50IGFuc3dlciA9IHBwcF9yZWdpc3Rlcl9jb21wcmVzc29yKCZwcHBfZGVmbGF0ZSk7CiAgICAgICAgIGlmIChhbnN3ZXIgPT0gMCkKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPCkBAIC02NDMsNyArNjQzLDcgQEAKIAlwcHBfcmVnaXN0ZXJfY29tcHJlc3NvcigmcHBwX2RlZmxhdGVfZHJhZnQpOwogICAgICAgICByZXR1cm4gYW5zd2VyOwogfQotICAgICAKKwogc3RhdGljIHZvaWQgX19leGl0IGRlZmxhdGVfY2xlYW51cCh2b2lkKQogewogCXBwcF91bnJlZ2lzdGVyX2NvbXByZXNzb3IoJnBwcF9kZWZsYXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCmluZGV4IDBlYzZlOWQuLmY1ODAyZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJdm9pZCAqcHRyW0NBUkRNQVBfV0lEVEhdOwogfTsKIHN0YXRpYyB2b2lkICpjYXJkbWFwX2dldChzdHJ1Y3QgY2FyZG1hcCAqbWFwLCB1bnNpZ25lZCBpbnQgbnIpOwotc3RhdGljIHZvaWQgY2FyZG1hcF9zZXQoc3RydWN0IGNhcmRtYXAgKiptYXAsIHVuc2lnbmVkIGludCBuciwgdm9pZCAqcHRyKTsKK3N0YXRpYyBpbnQgY2FyZG1hcF9zZXQoc3RydWN0IGNhcmRtYXAgKiptYXAsIHVuc2lnbmVkIGludCBuciwgdm9pZCAqcHRyKTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2FyZG1hcF9maW5kX2ZpcnN0X2ZyZWUoc3RydWN0IGNhcmRtYXAgKm1hcCk7CiBzdGF0aWMgdm9pZCBjYXJkbWFwX2Rlc3Ryb3koc3RydWN0IGNhcmRtYXAgKiptYXApOwogCkBAIC0zMDQsNyArMzA0LDcgQEAKIAlQUFBfTVBMU19VQywKIAlQUFBfTVBMU19NQywKIH07Ci0JCisKIC8qIFRyYW5zbGF0ZXMgYW4gZXRoZXJ0eXBlIGludG8gYW4gTlAgaW5kZXggKi8KIHN0YXRpYyBpbmxpbmUgaW50IGV0aGVydHlwZV90b19ucGluZGV4KGludCBldGhlcnR5cGUpCiB7CkBAIC0xNjE5LDExICsxNjE5LDExIEBACiAJY2FzZSBQUFBfVkpDX1VOQ09NUDoKIAkJaWYgKHBwcC0+dmogPT0gMCB8fCAocHBwLT5mbGFncyAmIFNDX1JFSl9DT01QX1RDUCkpCiAJCQlnb3RvIGVycjsKLQkJCisKIAkJLyogVW50aWwgd2UgZml4IHRoZSBkZWNvbXByZXNzb3IgbmVlZCB0byBtYWtlIHN1cmUKIAkJICogZGF0YSBwb3J0aW9uIGlzIGxpbmVhci4KIAkJICovCi0JCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0+bGVuKSkgCisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNrYi0+bGVuKSkKIAkJCWdvdG8gZXJyOwogCiAJCWlmIChzbGhjX3JlbWVtYmVyKHBwcC0+dmosIHNrYi0+ZGF0YSArIDIsIHNrYi0+bGVuIC0gMikgPD0gMCkgewpAQCAtMTk5NSwxMCArMTk5NSw5IEBACiB7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKIAotCXBjaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjaGFubmVsKSwgR0ZQX0tFUk5FTCk7CisJcGNoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNoYW5uZWwpLCBHRlBfS0VSTkVMKTsKIAlpZiAocGNoID09IDApCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwY2gsIDAsIHNpemVvZihzdHJ1Y3QgY2hhbm5lbCkpOwogCXBjaC0+cHBwID0gTlVMTDsKIAlwY2gtPmNoYW4gPSBjaGFuOwogCWNoYW4tPnBwcCA9IHBjaDsKQEAgLTIxODYsNyArMjE4NSw3IEBACiAJc3dpdGNoIChDQ1BfQ09ERShkcCkpIHsKIAljYXNlIENDUF9DT05GUkVROgogCi0JCS8qIEEgQ29uZlJlcSBzdGFydHMgbmVnb3RpYXRpb24gb2YgY29tcHJlc3Npb24gCisJCS8qIEEgQ29uZlJlcSBzdGFydHMgbmVnb3RpYXRpb24gb2YgY29tcHJlc3Npb24KIAkJICogaW4gb25lIGRpcmVjdGlvbiBvZiB0cmFuc21pc3Npb24sCiAJCSAqIGFuZCBoZW5jZSBicmluZ3MgaXQgZG93bi4uLmJ1dCB3aGljaCB3YXk/CiAJCSAqCkBAIC0yMTk2LDE2ICsyMTk1LDE2IEBACiAJCWlmKGluYm91bmQpCiAJCQkvKiBIZSBpcyBwcm9wb3Npbmcgd2hhdCBJIHNob3VsZCBzZW5kICovCiAJCQlwcHAtPnhzdGF0ZSAmPSB+U0NfQ09NUF9SVU47Ci0JCWVsc2UJCisJCWVsc2UKIAkJCS8qIEkgYW0gcHJvcG9zaW5nIHRvIHdoYXQgaGUgc2hvdWxkIHNlbmQgKi8KIAkJCXBwcC0+cnN0YXRlICY9IH5TQ19ERUNPTVBfUlVOOwotCQkKKwogCQlicmVhazsKLQkJCisKIAljYXNlIENDUF9URVJNUkVROgogCWNhc2UgQ0NQX1RFUk1BQ0s6CiAJCS8qCi0JCSAqIENDUCBpcyBnb2luZyBkb3duLCBib3RoIGRpcmVjdGlvbnMgb2YgdHJhbnNtaXNzaW9uIAorCQkgKiBDQ1AgaXMgZ29pbmcgZG93biwgYm90aCBkaXJlY3Rpb25zIG9mIHRyYW5zbWlzc2lvbgogCQkgKi8KIAkJcHBwLT5yc3RhdGUgJj0gflNDX0RFQ09NUF9SVU47CiAJCXBwcC0+eHN0YXRlICY9IH5TQ19DT01QX1JVTjsKQEAgLTI0MDgsMTMgKzI0MDcsMTIgQEAKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlpbnQgaTsKIAotCXBwcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwcHApLCBHRlBfS0VSTkVMKTsKKwlwcHAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcHBwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcHApCiAJCWdvdG8gb3V0OwogCWRldiA9IGFsbG9jX25ldGRldigwLCAiIiwgcHBwX3NldHVwKTsKIAlpZiAoIWRldikKIAkJZ290byBvdXQxOwotCW1lbXNldChwcHAsIDAsIHNpemVvZihzdHJ1Y3QgcHBwKSk7CiAKIAlwcHAtPm1ydSA9IFBQUF9NUlU7CiAJaW5pdF9wcHBfZmlsZSgmcHBwLT5maWxlLCBJTlRFUkZBQ0UpOwpAQCAtMjQ1NCwxMSArMjQ1MiwxNiBAQAogCX0KIAogCWF0b21pY19pbmMoJnBwcF91bml0X2NvdW50KTsKLQljYXJkbWFwX3NldCgmYWxsX3BwcF91bml0cywgdW5pdCwgcHBwKTsKKwlyZXQgPSBjYXJkbWFwX3NldCgmYWxsX3BwcF91bml0cywgdW5pdCwgcHBwKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gb3V0MzsKKwogCW11dGV4X3VubG9jaygmYWxsX3BwcF9tdXRleCk7CiAJKnJldHAgPSAwOwogCXJldHVybiBwcHA7CiAKK291dDM6CisJYXRvbWljX2RlYygmcHBwX3VuaXRfY291bnQpOwogb3V0MjoKIAltdXRleF91bmxvY2soJmFsbF9wcHBfbXV0ZXgpOwogCWZyZWVfbmV0ZGV2KGRldik7CkBAIC0yNjk1LDcgKzI2OTgsNyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBjYXJkbWFwX3NldChzdHJ1Y3QgY2FyZG1hcCAqKnBtYXAsIHVuc2lnbmVkIGludCBuciwgdm9pZCAqcHRyKQorc3RhdGljIGludCBjYXJkbWFwX3NldChzdHJ1Y3QgY2FyZG1hcCAqKnBtYXAsIHVuc2lnbmVkIGludCBuciwgdm9pZCAqcHRyKQogewogCXN0cnVjdCBjYXJkbWFwICpwOwogCWludCBpOwpAQCAtMjcwNCw4ICsyNzA3LDkgQEAKIAlpZiAocCA9PSBOVUxMIHx8IChuciA+PiBwLT5zaGlmdCkgPj0gQ0FSRE1BUF9XSURUSCkgewogCQlkbyB7CiAJCQkvKiBuZWVkIGEgbmV3IHRvcCBsZXZlbCAqLwotCQkJc3RydWN0IGNhcmRtYXAgKm5wID0ga21hbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0tFUk5FTCk7Ci0JCQltZW1zZXQobnAsIDAsIHNpemVvZigqbnApKTsKKwkJCXN0cnVjdCBjYXJkbWFwICpucCA9IGt6YWxsb2Moc2l6ZW9mKCpucCksIEdGUF9LRVJORUwpOworCQkJaWYgKCFucCkKKwkJCQlnb3RvIGVub21lbTsKIAkJCW5wLT5wdHJbMF0gPSBwOwogCQkJaWYgKHAgIT0gTlVMTCkgewogCQkJCW5wLT5zaGlmdCA9IHAtPnNoaWZ0ICsgQ0FSRE1BUF9PUkRFUjsKQEAgLTI3MTksOCArMjcyMyw5IEBACiAJd2hpbGUgKHAtPnNoaWZ0ID4gMCkgewogCQlpID0gKG5yID4+IHAtPnNoaWZ0KSAmIENBUkRNQVBfTUFTSzsKIAkJaWYgKHAtPnB0cltpXSA9PSBOVUxMKSB7Ci0JCQlzdHJ1Y3QgY2FyZG1hcCAqbnAgPSBrbWFsbG9jKHNpemVvZigqbnApLCBHRlBfS0VSTkVMKTsKLQkJCW1lbXNldChucCwgMCwgc2l6ZW9mKCpucCkpOworCQkJc3RydWN0IGNhcmRtYXAgKm5wID0ga3phbGxvYyhzaXplb2YoKm5wKSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAoIW5wKQorCQkJCWdvdG8gZW5vbWVtOwogCQkJbnAtPnNoaWZ0ID0gcC0+c2hpZnQgLSBDQVJETUFQX09SREVSOwogCQkJbnAtPnBhcmVudCA9IHA7CiAJCQlwLT5wdHJbaV0gPSBucDsKQEAgLTI3MzUsNiArMjc0MCw5IEBACiAJCXNldF9iaXQoaSwgJnAtPmludXNlKTsKIAllbHNlCiAJCWNsZWFyX2JpdChpLCAmcC0+aW51c2UpOworCXJldHVybiAwOworIGVub21lbToKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCBjYXJkbWFwX2ZpbmRfZmlyc3RfZnJlZShzdHJ1Y3QgY2FyZG1hcCAqbWFwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX21wcGUuYyBiL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmMKaW5kZXggNTFmZjlhOWQuLmYzNjU1ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BwcF9tcHBlLmMKKysrIGIvZHJpdmVycy9uZXQvcHBwX21wcGUuYwpAQCAtNDMsNiArNDMsNyBAQAogICogICAgICAgICAgICAgICAgICAgIGRlcHJlY2F0ZWQgaW4gMi42CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KQEAgLTY0LDEyICs2NSwxMyBAQAogTU9EVUxFX0FMSUFTKCJwcHAtY29tcHJlc3MtIiBfX3N0cmluZ2lmeShDSV9NUFBFKSk7CiBNT0RVTEVfVkVSU0lPTigiMS4wLjIiKTsKIAotc3RhdGljIHZvaWQKK3N0YXRpYyB1bnNpZ25lZCBpbnQKIHNldHVwX3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGNvbnN0IHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7CiAJc2dbMF0ucGFnZSA9IHZpcnRfdG9fcGFnZShhZGRyZXNzKTsKIAlzZ1swXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShhZGRyZXNzKTsKIAlzZ1swXS5sZW5ndGggPSBsZW5ndGg7CisJcmV0dXJuIGxlbmd0aDsKIH0KIAogI2RlZmluZSBTSEExX1BBRF9TSVpFIDQwCkBAIC05NSw4ICs5Nyw4IEBACiAgKiBTdGF0ZSBmb3IgYW4gTVBQRSAoZGUpY29tcHJlc3Nvci4KICAqLwogc3RydWN0IHBwcF9tcHBlX3N0YXRlIHsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqYXJjNDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqc2hhMTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqYXJjNDsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnNoYTE7CiAJdW5zaWduZWQgY2hhciAqc2hhMV9kaWdlc3Q7CiAJdW5zaWduZWQgY2hhciBtYXN0ZXJfa2V5W01QUEVfTUFYX0tFWV9MRU5dOwogCXVuc2lnbmVkIGNoYXIgc2Vzc2lvbl9rZXlbTVBQRV9NQVhfS0VZX0xFTl07CkBAIC0xMzYsMTQgKzEzOCwyMSBAQAogICovCiBzdGF0aWMgdm9pZCBnZXRfbmV3X2tleV9mcm9tX3NoYShzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKiBzdGF0ZSwgdW5zaWduZWQgY2hhciAqSW50ZXJpbUtleSkKIHsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzRdOworCXVuc2lnbmVkIGludCBuYnl0ZXM7CiAKLQlzZXR1cF9zZygmc2dbMF0sIHN0YXRlLT5tYXN0ZXJfa2V5LCBzdGF0ZS0+a2V5bGVuKTsKLQlzZXR1cF9zZygmc2dbMV0sIHNoYV9wYWQtPnNoYV9wYWQxLCBzaXplb2Yoc2hhX3BhZC0+c2hhX3BhZDEpKTsKLQlzZXR1cF9zZygmc2dbMl0sIHN0YXRlLT5zZXNzaW9uX2tleSwgc3RhdGUtPmtleWxlbik7Ci0Jc2V0dXBfc2coJnNnWzNdLCBzaGFfcGFkLT5zaGFfcGFkMiwgc2l6ZW9mKHNoYV9wYWQtPnNoYV9wYWQyKSk7CisJbmJ5dGVzID0gc2V0dXBfc2coJnNnWzBdLCBzdGF0ZS0+bWFzdGVyX2tleSwgc3RhdGUtPmtleWxlbik7CisJbmJ5dGVzICs9IHNldHVwX3NnKCZzZ1sxXSwgc2hhX3BhZC0+c2hhX3BhZDEsCisJCQkgICBzaXplb2Yoc2hhX3BhZC0+c2hhX3BhZDEpKTsKKwluYnl0ZXMgKz0gc2V0dXBfc2coJnNnWzJdLCBzdGF0ZS0+c2Vzc2lvbl9rZXksIHN0YXRlLT5rZXlsZW4pOworCW5ieXRlcyArPSBzZXR1cF9zZygmc2dbM10sIHNoYV9wYWQtPnNoYV9wYWQyLAorCQkJICAgc2l6ZW9mKHNoYV9wYWQtPnNoYV9wYWQyKSk7CiAKLQljcnlwdG9fZGlnZXN0X2RpZ2VzdCAoc3RhdGUtPnNoYTEsIHNnLCA0LCBzdGF0ZS0+c2hhMV9kaWdlc3QpOworCWRlc2MudGZtID0gc3RhdGUtPnNoYTE7CisJZGVzYy5mbGFncyA9IDA7CisKKwljcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnLCBuYnl0ZXMsIHN0YXRlLT5zaGExX2RpZ2VzdCk7CiAKIAltZW1jcHkoSW50ZXJpbUtleSwgc3RhdGUtPnNoYTFfZGlnZXN0LCBzdGF0ZS0+a2V5bGVuKTsKIH0KQEAgLTE1NiwxNCArMTY1LDE1IEBACiB7CiAJdW5zaWduZWQgY2hhciBJbnRlcmltS2V5W01QUEVfTUFYX0tFWV9MRU5dOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ19pblsxXSwgc2dfb3V0WzFdOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gc3RhdGUtPmFyYzQgfTsKIAogCWdldF9uZXdfa2V5X2Zyb21fc2hhKHN0YXRlLCBJbnRlcmltS2V5KTsKIAlpZiAoIWluaXRpYWxfa2V5KSB7Ci0JCWNyeXB0b19jaXBoZXJfc2V0a2V5KHN0YXRlLT5hcmM0LCBJbnRlcmltS2V5LCBzdGF0ZS0+a2V5bGVuKTsKKwkJY3J5cHRvX2Jsa2NpcGhlcl9zZXRrZXkoc3RhdGUtPmFyYzQsIEludGVyaW1LZXksIHN0YXRlLT5rZXlsZW4pOwogCQlzZXR1cF9zZyhzZ19pbiwgSW50ZXJpbUtleSwgc3RhdGUtPmtleWxlbik7CiAJCXNldHVwX3NnKHNnX291dCwgc3RhdGUtPnNlc3Npb25fa2V5LCBzdGF0ZS0+a2V5bGVuKTsKLQkJaWYgKGNyeXB0b19jaXBoZXJfZW5jcnlwdChzdGF0ZS0+YXJjNCwgc2dfb3V0LCBzZ19pbiwKLQkJCQkgICAgICBzdGF0ZS0+a2V5bGVuKSAhPSAwKSB7CisJCWlmIChjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsIHNnX291dCwgc2dfaW4sCisJCQkJCSAgICAgc3RhdGUtPmtleWxlbikgIT0gMCkgewogICAgIAkJICAgIHByaW50ayhLRVJOX1dBUk5JTkcgIm1wcGVfcmVrZXk6IGNpcGhlcl9lbmNyeXB0IGZhaWxlZFxuIik7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTc1LDcgKzE4NSw3IEBACiAJCXN0YXRlLT5zZXNzaW9uX2tleVsxXSA9IDB4MjY7CiAJCXN0YXRlLT5zZXNzaW9uX2tleVsyXSA9IDB4OWU7CiAJfQotCWNyeXB0b19jaXBoZXJfc2V0a2V5KHN0YXRlLT5hcmM0LCBzdGF0ZS0+c2Vzc2lvbl9rZXksIHN0YXRlLT5rZXlsZW4pOworCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHN0YXRlLT5hcmM0LCBzdGF0ZS0+c2Vzc2lvbl9rZXksIHN0YXRlLT5rZXlsZW4pOwogfQogCiAvKgpAQCAtMTk2LDE1ICsyMDYsMTkgQEAKIAogCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKCpzdGF0ZSkpOwogCi0Jc3RhdGUtPmFyYzQgPSBjcnlwdG9fYWxsb2NfdGZtKCJhcmM0IiwgMCk7Ci0JaWYgKCFzdGF0ZS0+YXJjNCkKKwlzdGF0ZS0+YXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoc3RhdGUtPmFyYzQpKSB7CisJCXN0YXRlLT5hcmM0ID0gTlVMTDsKIAkJZ290byBvdXRfZnJlZTsKKwl9CiAKLQlzdGF0ZS0+c2hhMSA9IGNyeXB0b19hbGxvY190Zm0oInNoYTEiLCAwKTsKLQlpZiAoIXN0YXRlLT5zaGExKQorCXN0YXRlLT5zaGExID0gY3J5cHRvX2FsbG9jX2hhc2goInNoYTEiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHN0YXRlLT5zaGExKSkgeworCQlzdGF0ZS0+c2hhMSA9IE5VTEw7CiAJCWdvdG8gb3V0X2ZyZWU7CisJfQogCi0JZGlnZXN0c2l6ZSA9IGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUoc3RhdGUtPnNoYTEpOworCWRpZ2VzdHNpemUgPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHN0YXRlLT5zaGExKTsKIAlpZiAoZGlnZXN0c2l6ZSA8IE1QUEVfTUFYX0tFWV9MRU4pCiAJCWdvdG8gb3V0X2ZyZWU7CiAKQEAgLTIyOSw5ICsyNDMsOSBAQAogCSAgICBpZiAoc3RhdGUtPnNoYTFfZGlnZXN0KQogCQlrZnJlZShzdGF0ZS0+c2hhMV9kaWdlc3QpOwogCSAgICBpZiAoc3RhdGUtPnNoYTEpCi0JCWNyeXB0b19mcmVlX3RmbShzdGF0ZS0+c2hhMSk7CisJCWNyeXB0b19mcmVlX2hhc2goc3RhdGUtPnNoYTEpOwogCSAgICBpZiAoc3RhdGUtPmFyYzQpCi0JCWNyeXB0b19mcmVlX3RmbShzdGF0ZS0+YXJjNCk7CisJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihzdGF0ZS0+YXJjNCk7CiAJICAgIGtmcmVlKHN0YXRlKTsKIAlvdXQ6CiAJcmV0dXJuIE5VTEw7CkBAIC0yNDcsOSArMjYxLDkgQEAKIAkgICAgaWYgKHN0YXRlLT5zaGExX2RpZ2VzdCkKIAkJa2ZyZWUoc3RhdGUtPnNoYTFfZGlnZXN0KTsKIAkgICAgaWYgKHN0YXRlLT5zaGExKQotCQljcnlwdG9fZnJlZV90Zm0oc3RhdGUtPnNoYTEpOworCQljcnlwdG9fZnJlZV9oYXNoKHN0YXRlLT5zaGExKTsKIAkgICAgaWYgKHN0YXRlLT5hcmM0KQotCQljcnlwdG9fZnJlZV90Zm0oc3RhdGUtPmFyYzQpOworCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIoc3RhdGUtPmFyYzQpOwogCSAgICBrZnJlZShzdGF0ZSk7CiAJfQogfQpAQCAtMzU2LDYgKzM3MCw3IEBACiAJICAgICAgaW50IGlzaXplLCBpbnQgb3NpemUpCiB7CiAJc3RydWN0IHBwcF9tcHBlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKikgYXJnOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gc3RhdGUtPmFyYzQgfTsKIAlpbnQgcHJvdG87CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnX2luWzFdLCBzZ19vdXRbMV07CiAKQEAgLTQxMyw3ICs0MjgsNyBAQAogCS8qIEVuY3J5cHQgcGFja2V0ICovCiAJc2V0dXBfc2coc2dfaW4sIGlidWYsIGlzaXplKTsKIAlzZXR1cF9zZyhzZ19vdXQsIG9idWYsIG9zaXplKTsKLQlpZiAoY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHN0YXRlLT5hcmM0LCBzZ19vdXQsIHNnX2luLCBpc2l6ZSkgIT0gMCkgeworCWlmIChjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsIHNnX291dCwgc2dfaW4sIGlzaXplKSAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJjcnlwdG9fY3lwaGVyX2VuY3J5cHQgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTQ2Miw2ICs0NzcsNyBAQAogCQlpbnQgb3NpemUpCiB7CiAJc3RydWN0IHBwcF9tcHBlX3N0YXRlICpzdGF0ZSA9IChzdHJ1Y3QgcHBwX21wcGVfc3RhdGUgKikgYXJnOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gc3RhdGUtPmFyYzQgfTsKIAl1bnNpZ25lZCBjY291bnQ7CiAJaW50IGZsdXNoZWQgPSBNUFBFX0JJVFMoaWJ1ZikgJiBNUFBFX0JJVF9GTFVTSEVEOwogCWludCBzYW5pdHkgPSAwOwpAQCAtNTk5LDcgKzYxNSw3IEBACiAJICovCiAJc2V0dXBfc2coc2dfaW4sIGlidWYsIDEpOwogCXNldHVwX3NnKHNnX291dCwgb2J1ZiwgMSk7Ci0JaWYgKGNyeXB0b19jaXBoZXJfZGVjcnlwdChzdGF0ZS0+YXJjNCwgc2dfb3V0LCBzZ19pbiwgMSkgIT0gMCkgeworCWlmIChjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsIHNnX291dCwgc2dfaW4sIDEpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImNyeXB0b19jeXBoZXJfZGVjcnlwdCBmYWlsZWRcbiIpOwogCQlyZXR1cm4gREVDT01QX0VSUk9SOwogCX0KQEAgLTYxOSw3ICs2MzUsNyBAQAogCS8qIEFuZCBmaW5hbGx5LCBkZWNyeXB0IHRoZSByZXN0IG9mIHRoZSBwYWNrZXQuICovCiAJc2V0dXBfc2coc2dfaW4sIGlidWYgKyAxLCBpc2l6ZSAtIDEpOwogCXNldHVwX3NnKHNnX291dCwgb2J1ZiArIDEsIG9zaXplIC0gMSk7Ci0JaWYgKGNyeXB0b19jaXBoZXJfZGVjcnlwdChzdGF0ZS0+YXJjNCwgc2dfb3V0LCBzZ19pbiwgaXNpemUgLSAxKSAhPSAwKSB7CisJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgc2dfb3V0LCBzZ19pbiwgaXNpemUgLSAxKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiY3J5cHRvX2N5cGhlcl9kZWNyeXB0IGZhaWxlZFxuIik7CiAJCXJldHVybiBERUNPTVBfRVJST1I7CiAJfQpAQCAtNjk0LDggKzcxMCw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBwcHBfbXBwZV9pbml0KHZvaWQpCiB7CiAJaW50IGFuc3dlcjsKLQlpZiAoIShjcnlwdG9fYWxnX2F2YWlsYWJsZSgiYXJjNCIsIDApICYmCi0JICAgICAgY3J5cHRvX2FsZ19hdmFpbGFibGUoInNoYTEiLCAwKSkpCisJaWYgKCEoY3J5cHRvX2hhc19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpICYmCisJICAgICAgY3J5cHRvX2hhc19oYXNoKCJzaGExIiwgMCwgQ1JZUFRPX0FMR19BU1lOQykpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXNoYV9wYWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc2hhX3BhZCksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYyBiL2RyaXZlcnMvbmV0L3BwcF9zeW5jdHR5LmMKaW5kZXggMzMyNTVmZS4uYjZmMGU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX3N5bmN0dHkuYworKysgYi9kcml2ZXJzL25ldC9wcHBfc3luY3R0eS5jCkBAIC02LDcgKzYsNyBAQAogICoKICAqIENvbXBsZXRlIFBQUCBmcmFtZXMgd2l0aG91dCBlbmNvZGluZy9kZWNvZGluZyBhcmUgZXhjaGFuZ2VkIGJldHdlZW4KICAqIHRoZSBjaGFubmVsIGRyaXZlciBhbmQgdGhlIGRldmljZSBkcml2ZXIuCi0gKiAKKyAqCiAgKiBUaGUgYXN5bmMgbWFwIElPQ1RMIGNvZGVzIGFyZSBpbXBsZW1lbnRlZCB0byBrZWVwIHRoZSB1c2VyIG1vZGUKICAqIGFwcGxpY2F0aW9ucyBoYXBweSBpZiB0aGV5IGNhbGwgdGhlbS4gU3luY2hyb25vdXMgUFBQIGRvZXMgbm90IHVzZQogICogdGhlIGFzeW5jIG1hcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCAwZDEwMWExLi41NjY2ZWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTM4NiwxMyArMzg2LDEzIEBACiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpKSkKIAkJZ290byBkcm9wOwogCi0JaWYgKCEoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpKSAKKwlpZiAoIShza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkpCiAJCWdvdG8gb3V0OwogCiAJcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKSBza2ItPm5oLnJhdzsKIAogCXBvID0gZ2V0X2l0ZW0oKHVuc2lnbmVkIGxvbmcpIHBoLT5zaWQsIGV0aF9oZHIoc2tiKS0+aF9zb3VyY2UpOwotCWlmIChwbyAhPSBOVUxMKSAKKwlpZiAocG8gIT0gTlVMTCkKIAkJcmV0dXJuIHNrX3JlY2VpdmVfc2tiKHNrX3BwcG94KHBvKSwgc2tiKTsKIGRyb3A6CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC00MTgsNyArNDE4LDcgQEAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcikpKQogCQlnb3RvIGFib3J0OwogCi0JaWYgKCEoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpKSAKKwlpZiAoIShza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkpCiAJCWdvdG8gb3V0OwogCiAJcGggPSAoc3RydWN0IHBwcG9lX2hkciAqKSBza2ItPm5oLnJhdzsKQEAgLTc0NSw3ICs3NDUsNyBAQAogfQogCiAKLXN0YXRpYyBpbnQgcHBwb2Vfc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIAorc3RhdGljIGludCBwcHBvZV9zZW5kbXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKIAkJICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwpAQCAtOTA3LDggKzkwNyw4IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBwcHBfY2hhbm5lbF9vcHMgcHBwb2VfY2hhbl9vcHMgPSB7IAotCS5zdGFydF94bWl0ID0gcHBwb2VfeG1pdCwgCitzdGF0aWMgc3RydWN0IHBwcF9jaGFubmVsX29wcyBwcHBvZV9jaGFuX29wcyA9IHsKKwkuc3RhcnRfeG1pdCA9IHBwcG9lX3htaXQsCiB9OwogCiBzdGF0aWMgaW50IHBwcG9lX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLApAQCAtMTAxMCw3ICsxMDEwLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCXBvID0gdjsKLQlpZiAocG8tPm5leHQpIAorCWlmIChwby0+bmV4dCkKIAkJcG8gPSBwby0+bmV4dDsKIAllbHNlIHsKIAkJaW50IGhhc2ggPSBoYXNoX2l0ZW0ocG8tPnBwcG9lX3BhLnNpZCwgcG8tPnBwcG9lX3BhLnJlbW90ZSk7CkBAIC0xMTA2LDcgKzExMDYsNyBAQAogCWVyciA9IHBwcG9lX3Byb2NfaW5pdCgpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfcHBwb3hfcHJvdG87Ci0JCisKIAlkZXZfYWRkX3BhY2soJnBwcG9lc19wdHlwZSk7CiAJZGV2X2FkZF9wYWNrKCZwcHBvZWRfcHR5cGUpOwogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcHBwb2Vfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5jIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5YTQ4MWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmMKQEAgLTAsMCArMSwzNTM3IEBACisvKgorICogUUxvZ2ljIFFMQTN4eHggTklDIEhCQSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNiBRTG9naWMgQ29ycG9yYXRpb24KKyAqCisgKiBTZWUgTElDRU5TRS5xbGEzeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSAicWxhM3h4eC5oIgorCisjZGVmaW5lIERSVl9OQU1FICAJInFsYTN4eHgiCisjZGVmaW5lIERSVl9TVFJJTkcgCSJRTG9naWMgSVNQM1hYWCBOZXR3b3JrIERyaXZlciIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JInYyLjAyLjAwLWszNiIKKyNkZWZpbmUgUEZYCQlEUlZfTkFNRSAiICIKKworc3RhdGljIGNvbnN0IGNoYXIgcWwzeHh4X2RyaXZlcl9uYW1lW10gPSBEUlZfTkFNRTsKK3N0YXRpYyBjb25zdCBjaGFyIHFsM3h4eF9kcml2ZXJfdmVyc2lvbltdID0gRFJWX1ZFUlNJT047CisKK01PRFVMRV9BVVRIT1IoIlFMb2dpYyBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJRTG9naWMgSVNQM1hYWCBOZXR3b3JrIERyaXZlciAiIERSVl9WRVJTSU9OICIgIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKK3N0YXRpYyBjb25zdCB1MzIgZGVmYXVsdF9tc2cKKyAgICA9IE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSworICAgIHwgTkVUSUZfTVNHX0lGVVAgfCBORVRJRl9NU0dfSUZET1dOOworCitzdGF0aWMgaW50IGRlYnVnID0gLTE7CQkvKiBkZWZhdWx0cyBhYm92ZSAqLworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwPW5vbmUsLi4uLDE2PWFsbCkiKTsKKworc3RhdGljIGludCBtc2k7Cittb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhtc2ksICJUdXJuIG9uIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cy4iKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsM3h4eF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUwzMDIyX0RFVklDRV9JRCl9LAorCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcWwzeHh4X3BjaV90YmwpOworCisvKgorICogQ2FsbGVyIG11c3QgdGFrZSBod19sb2NrLgorICovCitzdGF0aWMgaW50IHFsX3NlbV9zcGlubG9jayhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsCisJCQkgICAgdTMyIHNlbV9tYXNrLCB1MzIgc2VtX2JpdHMpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgdmFsdWU7CisJdW5zaWduZWQgaW50IHNlY29uZHMgPSAzOworCisJZG8geworCQl3cml0ZWwoKHNlbV9tYXNrIHwgc2VtX2JpdHMpLAorCQkgICAgICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZW1hcGhvcmVSZWcpOworCQl2YWx1ZSA9IHJlYWRsKCZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VtYXBob3JlUmVnKTsKKwkJaWYgKCh2YWx1ZSAmIChzZW1fbWFzayA+PiAxNikpID09IHNlbV9iaXRzKQorCQkJcmV0dXJuIDA7CisJCXNzbGVlcCgxKTsKKwl9IHdoaWxlKC0tc2Vjb25kcyk7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBxbF9zZW1fdW5sb2NrKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIHNlbV9tYXNrKQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJd3JpdGVsKHNlbV9tYXNrLCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlbWFwaG9yZVJlZyk7CisJcmVhZGwoJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZW1hcGhvcmVSZWcpOworfQorCitzdGF0aWMgaW50IHFsX3NlbV9sb2NrKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIHNlbV9tYXNrLCB1MzIgc2VtX2JpdHMpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgdmFsdWU7CisKKwl3cml0ZWwoKHNlbV9tYXNrIHwgc2VtX2JpdHMpLCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlbWFwaG9yZVJlZyk7CisJdmFsdWUgPSByZWFkbCgmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlbWFwaG9yZVJlZyk7CisJcmV0dXJuICgodmFsdWUgJiAoc2VtX21hc2sgPj4gMTYpKSA9PSBzZW1fYml0cyk7Cit9CisKKy8qCisgKiBDYWxsZXIgaG9sZHMgaHdfbG9jay4KKyAqLworc3RhdGljIGludCBxbF93YWl0X2Zvcl9kcnZyX2xvY2soc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCWludCBpID0gMDsKKworCXdoaWxlICgxKSB7CisJCWlmICghcWxfc2VtX2xvY2socWRldiwKKwkJCQkgUUxfRFJWUl9TRU1fTUFTSywKKwkJCQkgKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIHwgKHFkZXYtPm1hY19pbmRleCkKKwkJCQkgICogMikgPDwgMSkpIHsKKwkJCWlmIChpIDwgMTApIHsKKwkJCQlzc2xlZXAoMSk7CisJCQkJaSsrOworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yICIKKwkJCQkgICAgICAgImRyaXZlciBsb2NrLi4uXG4iLAorCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJICAgICAgICIlczogZHJpdmVyIGxvY2sgYWNxdWlyZWQuXG4iLAorCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX3NldF9yZWdpc3Rlcl9wYWdlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIHBhZ2UpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCXdyaXRlbCgoKElTUF9DT05UUk9MX05QX01BU0sgPDwgMTYpIHwgcGFnZSksCisJCQkmcG9ydF9yZWdzLT5Db21tb25SZWdzLmlzcENvbnRyb2xTdGF0dXMpOworCXJlYWRsKCZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cyk7CisJcWRldi0+Y3VycmVudF9wYWdlID0gcGFnZTsKK30KKworc3RhdGljIHUzMiBxbF9yZWFkX2NvbW1vbl9yZWdfbChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsCisJCQkgICAgICB1MzIgX19pb21lbSAqIHJlZykKK3sKKwl1MzIgdmFsdWU7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJdmFsdWUgPSByZWFkbChyZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKworCXJldHVybiB2YWx1ZTsKK30KKworc3RhdGljIHUzMiBxbF9yZWFkX2NvbW1vbl9yZWcoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJICAgICAgdTMyIF9faW9tZW0gKiByZWcpCit7CisJcmV0dXJuIHJlYWRsKHJlZyk7Cit9CisKK3N0YXRpYyB1MzIgcWxfcmVhZF9wYWdlMF9yZWdfbChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBfX2lvbWVtICpyZWcpCit7CisJdTMyIHZhbHVlOworCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCisJaWYgKHFkZXYtPmN1cnJlbnRfcGFnZSAhPSAwKQorCQlxbF9zZXRfcmVnaXN0ZXJfcGFnZShxZGV2LDApOworCXZhbHVlID0gcmVhZGwocmVnKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3N0YXRpYyB1MzIgcWxfcmVhZF9wYWdlMF9yZWcoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgX19pb21lbSAqcmVnKQoreworCWlmIChxZGV2LT5jdXJyZW50X3BhZ2UgIT0gMCkKKwkJcWxfc2V0X3JlZ2lzdGVyX3BhZ2UocWRldiwwKTsKKwlyZXR1cm4gcmVhZGwocmVnKTsKK30KKworc3RhdGljIHZvaWQgcWxfd3JpdGVfY29tbW9uX3JlZ19sKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKKwkJCQl1MzIgKiByZWcsIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwl3cml0ZWwodmFsdWUsICh1MzIgKikgcmVnKTsKKwlyZWFkbChyZWcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHFsX3dyaXRlX2NvbW1vbl9yZWcoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJCXUzMiAqIHJlZywgdTMyIHZhbHVlKQoreworCXdyaXRlbCh2YWx1ZSwgKHUzMiAqKSByZWcpOworCXJlYWRsKHJlZyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBxbF93cml0ZV9wYWdlMF9yZWcoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJICAgICAgIHUzMiAqIHJlZywgdTMyIHZhbHVlKQoreworCWlmIChxZGV2LT5jdXJyZW50X3BhZ2UgIT0gMCkKKwkJcWxfc2V0X3JlZ2lzdGVyX3BhZ2UocWRldiwwKTsKKwl3cml0ZWwodmFsdWUsICh1MzIgKikgcmVnKTsKKwlyZWFkbChyZWcpOworCXJldHVybjsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLiBPbmx5IGNhbGxlZCBkdXJpbmcgaW5pdC4KKyAqLworc3RhdGljIHZvaWQgcWxfd3JpdGVfcGFnZTFfcmVnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKKwkJCSAgICAgICB1MzIgKiByZWcsIHUzMiB2YWx1ZSkKK3sKKwlpZiAocWRldi0+Y3VycmVudF9wYWdlICE9IDEpCisJCXFsX3NldF9yZWdpc3Rlcl9wYWdlKHFkZXYsMSk7CisJd3JpdGVsKHZhbHVlLCAodTMyICopIHJlZyk7CisJcmVhZGwocmVnKTsKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDYWxsZXIgaG9sZHMgaHdfbG9jay4gT25seSBjYWxsZWQgZHVyaW5nIGluaXQuCisgKi8KK3N0YXRpYyB2b2lkIHFsX3dyaXRlX3BhZ2UyX3JlZyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsCisJCQkgICAgICAgdTMyICogcmVnLCB1MzIgdmFsdWUpCit7CisJaWYgKHFkZXYtPmN1cnJlbnRfcGFnZSAhPSAyKQorCQlxbF9zZXRfcmVnaXN0ZXJfcGFnZShxZGV2LDIpOworCXdyaXRlbCh2YWx1ZSwgKHUzMiAqKSByZWcpOworCXJlYWRsKHJlZyk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBxbF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisKKwlxbF93cml0ZV9jb21tb25fcmVnX2wocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5pc3BJbnRlcnJ1cHRNYXNrUmVnLAorCQkJICAgIChJU1BfSU1SX0VOQUJMRV9JTlQgPDwgMTYpKTsKKworfQorCitzdGF0aWMgdm9pZCBxbF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCXFsX3dyaXRlX2NvbW1vbl9yZWdfbChxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLmlzcEludGVycnVwdE1hc2tSZWcsCisJCQkgICAgKCgweGZmIDw8IDE2KSB8IElTUF9JTVJfRU5BQkxFX0lOVCkpOworCit9CisKK3N0YXRpYyB2b2lkIHFsX3JlbGVhc2VfdG9fbHJnX2J1Zl9mcmVlX2xpc3Qoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJCQkgICAgc3RydWN0IHFsX3Jjdl9idWZfY2IgKmxyZ19idWZfY2IpCit7CisJdTY0IG1hcDsKKwlscmdfYnVmX2NiLT5uZXh0ID0gTlVMTDsKKworCWlmIChxZGV2LT5scmdfYnVmX2ZyZWVfdGFpbCA9PSBOVUxMKSB7CS8qIFRoZSBsaXN0IGlzIGVtcHR5ICAqLworCQlxZGV2LT5scmdfYnVmX2ZyZWVfaGVhZCA9IHFkZXYtPmxyZ19idWZfZnJlZV90YWlsID0gbHJnX2J1Zl9jYjsKKwl9IGVsc2UgeworCQlxZGV2LT5scmdfYnVmX2ZyZWVfdGFpbC0+bmV4dCA9IGxyZ19idWZfY2I7CisJCXFkZXYtPmxyZ19idWZfZnJlZV90YWlsID0gbHJnX2J1Zl9jYjsKKwl9CisKKwlpZiAoIWxyZ19idWZfY2ItPnNrYikgeworCQlscmdfYnVmX2NiLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHFkZXYtPmxyZ19idWZmZXJfbGVuKTsKKwkJaWYgKHVubGlrZWx5KCFscmdfYnVmX2NiLT5za2IpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogZmFpbGVkIGRldl9hbGxvY19za2IoKS5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCQlxZGV2LT5scmdfYnVmX3NrYl9jaGVjaysrOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIFdlIHNhdmUgc29tZSBzcGFjZSB0byBjb3B5IHRoZSBldGhoZHIgZnJvbSBmaXJzdAorCQkJICogYnVmZmVyCisJCQkgKi8KKwkJCXNrYl9yZXNlcnZlKGxyZ19idWZfY2ItPnNrYiwgUUxfSEVBREVSX1NQQUNFKTsKKwkJCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHFkZXYtPnBkZXYsCisJCQkJCSAgICAgbHJnX2J1Zl9jYi0+c2tiLT5kYXRhLAorCQkJCQkgICAgIHFkZXYtPmxyZ19idWZmZXJfbGVuIC0KKwkJCQkJICAgICBRTF9IRUFERVJfU1BBQ0UsCisJCQkJCSAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9sb3cgPQorCQkJICAgIGNwdV90b19sZTMyKExTXzY0QklUUyhtYXApKTsKKwkJCWxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9oaWdoID0KKwkJCSAgICBjcHVfdG9fbGUzMihNU182NEJJVFMobWFwKSk7CisJCQlwY2lfdW5tYXBfYWRkcl9zZXQobHJnX2J1Zl9jYiwgbWFwYWRkciwgbWFwKTsKKwkJCXBjaV91bm1hcF9sZW5fc2V0KGxyZ19idWZfY2IsIG1hcGxlbiwKKwkJCQkJICBxZGV2LT5scmdfYnVmZmVyX2xlbiAtCisJCQkJCSAgUUxfSEVBREVSX1NQQUNFKTsKKwkJfQorCX0KKworCXFkZXYtPmxyZ19idWZfZnJlZV9jb3VudCsrOworfQorCitzdGF0aWMgc3RydWN0IHFsX3Jjdl9idWZfY2IgKnFsX2dldF9mcm9tX2xyZ19idWZfZnJlZV9saXN0KHN0cnVjdCBxbDNfYWRhcHRlcgorCQkJCQkJCSAgICpxZGV2KQoreworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiOworCisJaWYgKChscmdfYnVmX2NiID0gcWRldi0+bHJnX2J1Zl9mcmVlX2hlYWQpICE9IE5VTEwpIHsKKwkJaWYgKChxZGV2LT5scmdfYnVmX2ZyZWVfaGVhZCA9IGxyZ19idWZfY2ItPm5leHQpID09IE5VTEwpCisJCQlxZGV2LT5scmdfYnVmX2ZyZWVfdGFpbCA9IE5VTEw7CisJCXFkZXYtPmxyZ19idWZfZnJlZV9jb3VudC0tOworCX0KKworCXJldHVybiBscmdfYnVmX2NiOworfQorCitzdGF0aWMgdTMyIGFkZHJCaXRzID0gRUVQUk9NX05PX0FERFJfQklUUzsKK3N0YXRpYyB1MzIgZGF0YUJpdHMgPSBFRVBST01fTk9fREFUQV9CSVRTOworCitzdGF0aWMgdm9pZCBmbTkzYzU2YV9kZXNlbGVjdChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpOworc3RhdGljIHZvaWQgZWVwcm9tX3JlYWR3b3JkKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIGVlcHJvbUFkZHIsCisJCQkgICAgdW5zaWduZWQgc2hvcnQgKnZhbHVlKTsKKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBmbTkzYzU2YV9zZWxlY3Qoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCXFkZXYtPmVlcHJvbV9jbWRfZGF0YSA9IEFVQlVSTl9FRVBST01fQ1NfMTsKKwlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSk7CisJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJCQkgICAgKChJU1BfTlZSQU1fTUFTSyA8PCAxNikgfCBxZGV2LT5lZXByb21fY21kX2RhdGEpKTsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBmbTkzYzU2YV9jbWQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgY21kLCB1MzIgZWVwcm9tQWRkcikKK3sKKwlpbnQgaTsKKwl1MzIgbWFzazsKKwl1MzIgZGF0YUJpdDsKKwl1MzIgcHJldmlvdXNCaXQ7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCisJLyogQ2xvY2sgaW4gYSB6ZXJvLCB0aGVuIGRvIHRoZSBzdGFydCBiaXQgKi8KKwlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8CisJCQkgICAgQVVCVVJOX0VFUFJPTV9ET18xKTsKKwlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgorCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IEFVQlVSTl9FRVBST01fRE9fMSB8CisJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfUklTRSk7CisJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLnNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJCQkgICAgSVNQX05WUkFNX01BU0sgfCBxZGV2LT4KKwkJCSAgICBlZXByb21fY21kX2RhdGEgfCBBVUJVUk5fRUVQUk9NX0RPXzEgfAorCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX0ZBTEwpOworCisJbWFzayA9IDEgPDwgKEZNOTNDNTZBX0NNRF9CSVRTIC0gMSk7CisJLyogRm9yY2UgdGhlIHByZXZpb3VzIGRhdGEgYml0IHRvIGJlIGRpZmZlcmVudCAqLworCXByZXZpb3VzQml0ID0gMHhmZmZmOworCWZvciAoaSA9IDA7IGkgPCBGTTkzQzU2QV9DTURfQklUUzsgaSsrKSB7CisJCWRhdGFCaXQgPQorCQkgICAgKGNtZCAmIG1hc2spID8gQVVCVVJOX0VFUFJPTV9ET18xIDogQVVCVVJOX0VFUFJPTV9ET18wOworCQlpZiAocHJldmlvdXNCaXQgIT0gZGF0YUJpdCkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBiaXQgY2hhbmdlZCwgdGhlbiBjaGFuZ2UgdGhlIERPIHN0YXRlIHRvCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwkJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+CisJCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0KTsKKwkJCXByZXZpb3VzQml0ID0gZGF0YUJpdDsKKwkJfQorCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCisJCQkJICAgIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+CisJCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IGRhdGFCaXQgfAorCQkJCSAgICBBVUJVUk5fRUVQUk9NX0NMS19SSVNFKTsKKwkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgorCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0IHwKKwkJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCk7CisJCWNtZCA9IGNtZCA8PCAxOworCX0KKworCW1hc2sgPSAxIDw8IChhZGRyQml0cyAtIDEpOworCS8qIEZvcmNlIHRoZSBwcmV2aW91cyBkYXRhIGJpdCB0byBiZSBkaWZmZXJlbnQgKi8KKwlwcmV2aW91c0JpdCA9IDB4ZmZmZjsKKwlmb3IgKGkgPSAwOyBpIDwgYWRkckJpdHM7IGkrKykgeworCQlkYXRhQml0ID0KKwkJICAgIChlZXByb21BZGRyICYgbWFzaykgPyBBVUJVUk5fRUVQUk9NX0RPXzEgOgorCQkgICAgQVVCVVJOX0VFUFJPTV9ET18wOworCQlpZiAocHJldmlvdXNCaXQgIT0gZGF0YUJpdCkgeworCQkJLyoKKwkJCSAqIElmIHRoZSBiaXQgY2hhbmdlZCwgdGhlbiBjaGFuZ2UgdGhlIERPIHN0YXRlIHRvCisJCQkgKiBtYXRjaAorCQkJICovCisJCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCQkgICAgc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwkJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+CisJCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0KTsKKwkJCXByZXZpb3VzQml0ID0gZGF0YUJpdDsKKwkJfQorCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCisJCQkJICAgIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+CisJCQkJICAgIGVlcHJvbV9jbWRfZGF0YSB8IGRhdGFCaXQgfAorCQkJCSAgICBBVUJVUk5fRUVQUk9NX0NMS19SSVNFKTsKKwkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPgorCQkJCSAgICBlZXByb21fY21kX2RhdGEgfCBkYXRhQml0IHwKKwkJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCk7CisJCWVlcHJvbUFkZHIgPSBlZXByb21BZGRyIDw8IDE7CisJfQorfQorCisvKgorICogQ2FsbGVyIGhvbGRzIGh3X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIGZtOTNjNTZhX2Rlc2VsZWN0KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJcWRldi0+ZWVwcm9tX2NtZF9kYXRhID0gQVVCVVJOX0VFUFJPTV9DU18wOworCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhKTsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBmbTkzYzU2YV9kYXRhaW4oc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1bnNpZ25lZCBzaG9ydCAqdmFsdWUpCit7CisJaW50IGk7CisJdTMyIGRhdGEgPSAwOworCXUzMiBkYXRhQml0OworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCS8qIFJlYWQgdGhlIGRhdGEgYml0cyAqLworCS8qIFRoZSBmaXJzdCBiaXQgaXMgYSBkdW1teS4gIENsb2NrIHJpZ2h0IG92ZXIgaXQuICovCisJZm9yIChpID0gMDsgaSA8IGRhdGFCaXRzOyBpKyspIHsKKwkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCSAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCQkJCSAgICBJU1BfTlZSQU1fTUFTSyB8IHFkZXYtPmVlcHJvbV9jbWRfZGF0YSB8CisJCQkJICAgIEFVQlVSTl9FRVBST01fQ0xLX1JJU0UpOworCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCisJCQkJICAgIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWcsCisJCQkJICAgIElTUF9OVlJBTV9NQVNLIHwgcWRldi0+ZWVwcm9tX2NtZF9kYXRhIHwKKwkJCQkgICAgQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCk7CisJCWRhdGFCaXQgPQorCQkgICAgKHFsX3JlYWRfY29tbW9uX3JlZworCQkgICAgIChxZGV2LAorCQkgICAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkgICAgICBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnKSAmIEFVQlVSTl9FRVBST01fRElfMSkgPyAxIDogMDsKKwkJZGF0YSA9IChkYXRhIDw8IDEpIHwgZGF0YUJpdDsKKwl9CisJKnZhbHVlID0gKHUxNikgZGF0YTsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBlZXByb21fcmVhZHdvcmQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJICAgIHUzMiBlZXByb21BZGRyLCB1bnNpZ25lZCBzaG9ydCAqdmFsdWUpCit7CisJZm05M2M1NmFfc2VsZWN0KHFkZXYpOworCWZtOTNjNTZhX2NtZChxZGV2LCAoaW50KUZNOTNDNTZBX1JFQUQsIGVlcHJvbUFkZHIpOworCWZtOTNjNTZhX2RhdGFpbihxZGV2LCB2YWx1ZSk7CisJZm05M2M1NmFfZGVzZWxlY3QocWRldik7Cit9CisKK3N0YXRpYyB2b2lkIHFsX3N3YXBfbWFjX2FkZHIodTggKiBtYWNBZGRyZXNzKQoreworI2lmZGVmIF9fQklHX0VORElBTgorCXU4IHRlbXA7CisJdGVtcCA9IG1hY0FkZHJlc3NbMF07CisJbWFjQWRkcmVzc1swXSA9IG1hY0FkZHJlc3NbMV07CisJbWFjQWRkcmVzc1sxXSA9IHRlbXA7CisJdGVtcCA9IG1hY0FkZHJlc3NbMl07CisJbWFjQWRkcmVzc1syXSA9IG1hY0FkZHJlc3NbM107CisJbWFjQWRkcmVzc1szXSA9IHRlbXA7CisJdGVtcCA9IG1hY0FkZHJlc3NbNF07CisJbWFjQWRkcmVzc1s0XSA9IG1hY0FkZHJlc3NbNV07CisJbWFjQWRkcmVzc1s1XSA9IHRlbXA7CisjZW5kaWYKK30KKworc3RhdGljIGludCBxbF9nZXRfbnZyYW1fcGFyYW1zKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwl1MTYgKnBFRVBST01EYXRhOworCXUxNiBjaGVja3N1bSA9IDA7CisJdTMyIGluZGV4OworCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCisJcEVFUFJPTURhdGEgPSAodTE2ICopICYgcWRldi0+bnZyYW1fZGF0YTsKKwlxZGV2LT5lZXByb21fY21kX2RhdGEgPSAwOworCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9OVlJBTV9TRU1fTUFTSywKKwkJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKKwkJCSAyKSA8PCAxMCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCIlczogRmFpbGVkIHFsX3NlbV9zcGlubG9jaygpLlxuIiwKKwkJCV9fZnVuY19fKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpbmRleCA9IDA7IGluZGV4IDwgRUVQUk9NX1NJWkU7IGluZGV4KyspIHsKKwkJZWVwcm9tX3JlYWR3b3JkKHFkZXYsIGluZGV4LCBwRUVQUk9NRGF0YSk7CisJCWNoZWNrc3VtICs9ICpwRUVQUk9NRGF0YTsKKwkJcEVFUFJPTURhdGErKzsKKwl9CisJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9OVlJBTV9TRU1fTUFTSyk7CisKKwlpZiAoY2hlY2tzdW0gIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2hlY2tzdW0gc2hvdWxkIGJlIHplcm8sIGlzICV4ISFcbiIsCisJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lLCBjaGVja3N1bSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qCisJICogV2UgaGF2ZSBhIHByb2JsZW0gd2l0aCBlbmRpYW5uZXNzIGZvciB0aGUgTUFDIGFkZHJlc3NlcworCSAqIGFuZCB0aGUgdHdvIDgtYml0IHZhbHVlcyB2ZXJzaW9uLCBhbmQgbnVtUG9ydHMuICBXZQorCSAqIGhhdmUgdG8gc3dhcCB0aGVtIG9uIGJpZyBlbmRpYW4gc3lzdGVtcy4KKwkgKi8KKwlxbF9zd2FwX21hY19hZGRyKHFkZXYtPm52cmFtX2RhdGEuZnVuY0NmZ19mbjAubWFjQWRkcmVzcyk7CisJcWxfc3dhcF9tYWNfYWRkcihxZGV2LT5udnJhbV9kYXRhLmZ1bmNDZmdfZm4xLm1hY0FkZHJlc3MpOworCXFsX3N3YXBfbWFjX2FkZHIocWRldi0+bnZyYW1fZGF0YS5mdW5jQ2ZnX2ZuMi5tYWNBZGRyZXNzKTsKKwlxbF9zd2FwX21hY19hZGRyKHFkZXYtPm52cmFtX2RhdGEuZnVuY0NmZ19mbjMubWFjQWRkcmVzcyk7CisJcEVFUFJPTURhdGEgPSAodTE2ICopICYgcWRldi0+bnZyYW1fZGF0YS52ZXJzaW9uOworCSpwRUVQUk9NRGF0YSA9IGxlMTZfdG9fY3B1KCpwRUVQUk9NRGF0YSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJcmV0dXJuIGNoZWNrc3VtOworfQorCitzdGF0aWMgY29uc3QgdTMyIFBIWUFkZHJbMl0gPSB7CisJUE9SVDBfUEhZX0FERFJFU1MsIFBPUlQxX1BIWV9BRERSRVNTCit9OworCitzdGF0aWMgaW50IHFsX3dhaXRfZm9yX21paV9yZWFkeShzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiB0ZW1wOworCWludCBjb3VudCA9IDEwMDA7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJdGVtcCA9IHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSVN0YXR1c1JlZyk7CisJCWlmICghKHRlbXAgJiBNQUNfTUlJX1NUQVRVU19CU1kpKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxMCk7CisJCWNvdW50LS07CisJfQorCXJldHVybiAtMTsKK30KKworc3RhdGljIHZvaWQgcWxfbWlpX2VuYWJsZV9zY2FuX21vZGUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgc2NhbkNvbnRyb2w7CisKKwlpZiAocWRldi0+bnVtUG9ydHMgPiAxKSB7CisJCS8qIEF1dG8gc2NhbiB3aWxsIGN5Y2xlIHRocm91Z2ggbXVsdGlwbGUgcG9ydHMgKi8KKwkJc2NhbkNvbnRyb2wgPSBNQUNfTUlJX0NPTlRST0xfQVMgfCBNQUNfTUlJX0NPTlRST0xfU0M7CisJfSBlbHNlIHsKKwkJc2NhbkNvbnRyb2wgPSBNQUNfTUlJX0NPTlRST0xfU0M7CisJfQorCisJLyoKKwkgKiBTY2FuIHJlZ2lzdGVyIDEgb2YgUEhZL1BFVEJJLAorCSAqIFNldCB1cCB0byBzY2FuIGJvdGggZGV2aWNlcworCSAqIFRoZSBhdXRvc2NhbiBzdGFydHMgZnJvbSB0aGUgZmlyc3QgcmVnaXN0ZXIsIGNvbXBsZXRlcworCSAqIHRoZSBsYXN0IG9uZSBiZWZvcmUgcm9sbGluZyBvdmVyIHRvIHRoZSBmaXJzdAorCSAqLworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210QWRkclJlZywKKwkJCSAgIFBIWUFkZHJbMF0gfCBNSUlfU0NBTl9SRUdJU1RFUik7CisKKwlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjTUlJTWdtdENvbnRyb2xSZWcsCisJCQkgICAoc2NhbkNvbnRyb2wpIHwKKwkJCSAgICgoTUFDX01JSV9DT05UUk9MX1NDIHwgTUFDX01JSV9DT05UUk9MX0FTKSA8PCAxNikpOworfQorCitzdGF0aWMgdTggcWxfbWlpX2Rpc2FibGVfc2Nhbl9tb2RlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwl1OCByZXQ7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCQkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisKKwkvKiBTZWUgaWYgc2NhbiBtb2RlIGlzIGVuYWJsZWQgYmVmb3JlIHdlIHR1cm4gaXQgb2ZmICovCisJaWYgKHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXRDb250cm9sUmVnKSAmCisJICAgIChNQUNfTUlJX0NPTlRST0xfQVMgfCBNQUNfTUlJX0NPTlRST0xfU0MpKSB7CisJCS8qIFNjYW4gaXMgZW5hYmxlZCAqLworCQlyZXQgPSAxOworCX0gZWxzZSB7CisJCS8qIFNjYW4gaXMgZGlzYWJsZWQgKi8KKwkJcmV0ID0gMDsKKwl9CisKKwkvKgorCSAqIFdoZW4gZGlzYWJsaW5nIHNjYW4gbW9kZSB5b3UgbXVzdCBmaXJzdCBjaGFuZ2UgdGhlIE1JSSByZWdpc3RlcgorCSAqIGFkZHJlc3MKKwkgKi8KKwlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjTUlJTWdtdEFkZHJSZWcsCisJCQkgICBQSFlBZGRyWzBdIHwgTUlJX1NDQU5fUkVHSVNURVIpOworCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXRDb250cm9sUmVnLAorCQkJICAgKChNQUNfTUlJX0NPTlRST0xfU0MgfCBNQUNfTUlJX0NPTlRST0xfQVMgfAorCQkJICAgICBNQUNfTUlJX0NPTlRST0xfUkMpIDw8IDE2KSk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHFsX21paV93cml0ZV9yZWdfZXgoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJICAgICAgIHUxNiByZWdBZGRyLCB1MTYgdmFsdWUsIHUzMiBtYWNfaW5kZXgpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXU4IHNjYW5XYXNFbmFibGVkOworCisJc2Nhbldhc0VuYWJsZWQgPSBxbF9taWlfZGlzYWJsZV9zY2FuX21vZGUocWRldik7CisKKwlpZiAocWxfd2FpdF9mb3JfbWlpX3JlYWR5KHFkZXYpKSB7CisJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgIiVzIFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8gIgorCQkJICAgICAgICJnZXQgZnJlZSBiZWZvcmUgaXNzdWluZyBjb21tYW5kLlxuIiwKKwkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210QWRkclJlZywKKwkJCSAgIFBIWUFkZHJbbWFjX2luZGV4XSB8IHJlZ0FkZHIpOworCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXREYXRhUmVnLCB2YWx1ZSk7CisKKwkvKiBXYWl0IGZvciB3cml0ZSB0byBjb21wbGV0ZSA5LzEwLzA0IFNKUCAqLworCWlmIChxbF93YWl0X2Zvcl9taWlfcmVhZHkocWRldikpIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSAgICAgICAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8iCisJCQkgICAgICAgImdldCBmcmVlIGJlZm9yZSBpc3N1aW5nIGNvbW1hbmQuXG4iLAorCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKHNjYW5XYXNFbmFibGVkKQorCQlxbF9taWlfZW5hYmxlX3NjYW5fbW9kZShxZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsX21paV9yZWFkX3JlZ19leChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUxNiByZWdBZGRyLAorCQkJICAgICAgdTE2ICogdmFsdWUsIHUzMiBtYWNfaW5kZXgpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXU4IHNjYW5XYXNFbmFibGVkOworCXUzMiB0ZW1wOworCisJc2Nhbldhc0VuYWJsZWQgPSBxbF9taWlfZGlzYWJsZV9zY2FuX21vZGUocWRldik7CisKKwlpZiAocWxfd2FpdF9mb3JfbWlpX3JlYWR5KHFkZXYpKSB7CisJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgIiVzOiBUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFuYWdlbWVudCBwb3J0IHRvICIKKwkJCSAgICAgICAiZ2V0IGZyZWUgYmVmb3JlIGlzc3VpbmcgY29tbWFuZC5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjTUlJTWdtdEFkZHJSZWcsCisJCQkgICBQSFlBZGRyW21hY19pbmRleF0gfCByZWdBZGRyKTsKKworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210Q29udHJvbFJlZywKKwkJCSAgIChNQUNfTUlJX0NPTlRST0xfUkMgPDwgMTYpKTsKKworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210Q29udHJvbFJlZywKKwkJCSAgIChNQUNfTUlJX0NPTlRST0xfUkMgPDwgMTYpIHwgTUFDX01JSV9DT05UUk9MX1JDKTsKKworCS8qIFdhaXQgZm9yIHRoZSByZWFkIHRvIGNvbXBsZXRlICovCisJaWYgKHFsX3dhaXRfZm9yX21paV9yZWFkeShxZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJICAgICAgICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byAiCisJCQkgICAgICAgImdldCBmcmVlIGFmdGVyIGlzc3VpbmcgY29tbWFuZC5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwl0ZW1wID0gcWxfcmVhZF9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjTUlJTWdtdERhdGFSZWcpOworCSp2YWx1ZSA9ICh1MTYpIHRlbXA7CisKKwlpZiAoc2Nhbldhc0VuYWJsZWQpCisJCXFsX21paV9lbmFibGVfc2Nhbl9tb2RlKHFkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWxfbWlpX3dyaXRlX3JlZyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUxNiByZWdBZGRyLCB1MTYgdmFsdWUpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCisJcWxfbWlpX2Rpc2FibGVfc2Nhbl9tb2RlKHFkZXYpOworCisJaWYgKHFsX3dhaXRfZm9yX21paV9yZWFkeShxZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJICAgICAgICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byAiCisJCQkgICAgICAgImdldCBmcmVlIGJlZm9yZSBpc3N1aW5nIGNvbW1hbmQuXG4iLAorCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXRBZGRyUmVnLAorCQkJICAgcWRldi0+UEhZQWRkciB8IHJlZ0FkZHIpOworCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXREYXRhUmVnLCB2YWx1ZSk7CisKKwkvKiBXYWl0IGZvciB3cml0ZSB0byBjb21wbGV0ZS4gKi8KKwlpZiAocWxfd2FpdF9mb3JfbWlpX3JlYWR5KHFkZXYpKSB7CisJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgIiVzOiBUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFuYWdlbWVudCBwb3J0IHRvICIKKwkJCSAgICAgICAiZ2V0IGZyZWUgYmVmb3JlIGlzc3VpbmcgY29tbWFuZC5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtMTsKKwl9CisKKwlxbF9taWlfZW5hYmxlX3NjYW5fbW9kZShxZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsX21paV9yZWFkX3JlZyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUxNiByZWdBZGRyLCB1MTYgKnZhbHVlKQoreworCXUzMiB0ZW1wOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCXFsX21paV9kaXNhYmxlX3NjYW5fbW9kZShxZGV2KTsKKworCWlmIChxbF93YWl0X2Zvcl9taWlfcmVhZHkocWRldikpIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSAgICAgICAiJXM6IFRpbWVkIG91dCB3YWl0aW5nIGZvciBtYW5hZ2VtZW50IHBvcnQgdG8gIgorCQkJICAgICAgICJnZXQgZnJlZSBiZWZvcmUgaXNzdWluZyBjb21tYW5kLlxuIiwKKwkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210QWRkclJlZywKKwkJCSAgIHFkZXYtPlBIWUFkZHIgfCByZWdBZGRyKTsKKworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210Q29udHJvbFJlZywKKwkJCSAgIChNQUNfTUlJX0NPTlRST0xfUkMgPDwgMTYpKTsKKworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNNSUlNZ210Q29udHJvbFJlZywKKwkJCSAgIChNQUNfTUlJX0NPTlRST0xfUkMgPDwgMTYpIHwgTUFDX01JSV9DT05UUk9MX1JDKTsKKworCS8qIFdhaXQgZm9yIHRoZSByZWFkIHRvIGNvbXBsZXRlICovCisJaWYgKHFsX3dhaXRfZm9yX21paV9yZWFkeShxZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJICAgICAgICIlczogVGltZWQgb3V0IHdhaXRpbmcgZm9yIG1hbmFnZW1lbnQgcG9ydCB0byAiCisJCQkgICAgICAgImdldCBmcmVlIGJlZm9yZSBpc3N1aW5nIGNvbW1hbmQuXG4iLAorCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm4gLTE7CisJfQorCisJdGVtcCA9IHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXREYXRhUmVnKTsKKwkqdmFsdWUgPSAodTE2KSB0ZW1wOworCisJcWxfbWlpX2VuYWJsZV9zY2FuX21vZGUocWRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcWxfcGV0YmlfcmVzZXQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXFsX21paV93cml0ZV9yZWcocWRldiwgUEVUQklfQ09OVFJPTF9SRUcsIFBFVEJJX0NUUkxfU09GVF9SRVNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHFsX3BldGJpX3N0YXJ0X25lZyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJdTE2IHJlZzsKKworCS8qIEVuYWJsZSBBdXRvLW5lZ290aWF0aW9uIHNlbnNlICovCisJcWxfbWlpX3JlYWRfcmVnKHFkZXYsIFBFVEJJX1RCSV9DVFJMLCAmcmVnKTsKKwlyZWcgfD0gUEVUQklfVEJJX0FVVE9fU0VOU0U7CisJcWxfbWlpX3dyaXRlX3JlZyhxZGV2LCBQRVRCSV9UQklfQ1RSTCwgcmVnKTsKKworCXFsX21paV93cml0ZV9yZWcocWRldiwgUEVUQklfTkVHX0FEVkVSLAorCQkJIFBFVEJJX05FR19QQVVTRSB8IFBFVEJJX05FR19EVVBMRVgpOworCisJcWxfbWlpX3dyaXRlX3JlZyhxZGV2LCBQRVRCSV9DT05UUk9MX1JFRywKKwkJCSBQRVRCSV9DVFJMX0FVVE9fTkVHIHwgUEVUQklfQ1RSTF9SRVNUQVJUX05FRyB8CisJCQkgUEVUQklfQ1RSTF9GVUxMX0RVUExFWCB8IFBFVEJJX0NUUkxfU1BFRURfMTAwMCk7CisKK30KKworc3RhdGljIHZvaWQgcWxfcGV0YmlfcmVzZXRfZXgoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgbWFjX2luZGV4KQoreworCXFsX21paV93cml0ZV9yZWdfZXgocWRldiwgUEVUQklfQ09OVFJPTF9SRUcsIFBFVEJJX0NUUkxfU09GVF9SRVNFVCwKKwkJCSAgICBtYWNfaW5kZXgpOworfQorCitzdGF0aWMgdm9pZCBxbF9wZXRiaV9zdGFydF9uZWdfZXgoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgbWFjX2luZGV4KQoreworCXUxNiByZWc7CisKKwkvKiBFbmFibGUgQXV0by1uZWdvdGlhdGlvbiBzZW5zZSAqLworCXFsX21paV9yZWFkX3JlZ19leChxZGV2LCBQRVRCSV9UQklfQ1RSTCwgJnJlZywgbWFjX2luZGV4KTsKKwlyZWcgfD0gUEVUQklfVEJJX0FVVE9fU0VOU0U7CisJcWxfbWlpX3dyaXRlX3JlZ19leChxZGV2LCBQRVRCSV9UQklfQ1RSTCwgcmVnLCBtYWNfaW5kZXgpOworCisJcWxfbWlpX3dyaXRlX3JlZ19leChxZGV2LCBQRVRCSV9ORUdfQURWRVIsCisJCQkgICAgUEVUQklfTkVHX1BBVVNFIHwgUEVUQklfTkVHX0RVUExFWCwgbWFjX2luZGV4KTsKKworCXFsX21paV93cml0ZV9yZWdfZXgocWRldiwgUEVUQklfQ09OVFJPTF9SRUcsCisJCQkgICAgUEVUQklfQ1RSTF9BVVRPX05FRyB8IFBFVEJJX0NUUkxfUkVTVEFSVF9ORUcgfAorCQkJICAgIFBFVEJJX0NUUkxfRlVMTF9EVVBMRVggfCBQRVRCSV9DVFJMX1NQRUVEXzEwMDAsCisJCQkgICAgbWFjX2luZGV4KTsKK30KKworc3RhdGljIHZvaWQgcWxfcGV0YmlfaW5pdChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJcWxfcGV0YmlfcmVzZXQocWRldik7CisJcWxfcGV0Ymlfc3RhcnRfbmVnKHFkZXYpOworfQorCitzdGF0aWMgdm9pZCBxbF9wZXRiaV9pbml0X2V4KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIG1hY19pbmRleCkKK3sKKwlxbF9wZXRiaV9yZXNldF9leChxZGV2LCBtYWNfaW5kZXgpOworCXFsX3BldGJpX3N0YXJ0X25lZ19leChxZGV2LCBtYWNfaW5kZXgpOworfQorCitzdGF0aWMgaW50IHFsX2lzX3BldGJpX25lZ19wYXVzZShzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJdTE2IHJlZzsKKworCWlmIChxbF9taWlfcmVhZF9yZWcocWRldiwgUEVUQklfTkVHX1BBUlRORVIsICZyZWcpIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKHJlZyAmIFBFVEJJX05FR19QQVVTRV9NQVNLKSA9PSBQRVRCSV9ORUdfUEFVU0U7Cit9CisKK3N0YXRpYyBpbnQgcWxfcGh5X2dldF9zcGVlZChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJdTE2IHJlZzsKKworCWlmIChxbF9taWlfcmVhZF9yZWcocWRldiwgQVVYX0NPTlRST0xfU1RBVFVTLCAmcmVnKSA8IDApCisJCXJldHVybiAwOworCisJcmVnID0gKCgocmVnICYgMHgxOCkgPj4gMykgJiAzKTsKKworCWlmIChyZWcgPT0gMikKKwkJcmV0dXJuIFNQRUVEXzEwMDA7CisJZWxzZSBpZiAocmVnID09IDEpCisJCXJldHVybiBTUEVFRF8xMDA7CisJZWxzZSBpZiAocmVnID09IDApCisJCXJldHVybiBTUEVFRF8xMDsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworc3RhdGljIGludCBxbF9pc19mdWxsX2R1cChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJdTE2IHJlZzsKKworCWlmIChxbF9taWlfcmVhZF9yZWcocWRldiwgQVVYX0NPTlRST0xfU1RBVFVTLCAmcmVnKSA8IDApCisJCXJldHVybiAwOworCisJcmV0dXJuIChyZWcgJiBQSFlfQVVYX0RVUExFWF9TVEFUKSAhPSAwOworfQorCitzdGF0aWMgaW50IHFsX2lzX3BoeV9uZWdfcGF1c2Uoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXUxNiByZWc7CisKKwlpZiAocWxfbWlpX3JlYWRfcmVnKHFkZXYsIFBIWV9ORUdfUEFSVE5FUiwgJnJlZykgPCAwKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAocmVnICYgUEhZX05FR19QQVVTRSkgIT0gMDsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBxbF9tYWNfZW5hYmxlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJdTMyIHZhbHVlOworCisJaWYgKGVuYWJsZSkKKwkJdmFsdWUgPSAoTUFDX0NPTkZJR19SRUdfUEUgfCAoTUFDX0NPTkZJR19SRUdfUEUgPDwgMTYpKTsKKwllbHNlCisJCXZhbHVlID0gKE1BQ19DT05GSUdfUkVHX1BFIDw8IDE2KTsKKworCWlmIChxZGV2LT5tYWNfaW5kZXgpCisJCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWMxQ29uZmlnUmVnLCB2YWx1ZSk7CisJZWxzZQorCQlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjMENvbmZpZ1JlZywgdmFsdWUpOworfQorCisvKgorICogQ2FsbGVyIGhvbGRzIGh3X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHFsX21hY19jZmdfc29mdF9yZXNldChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBlbmFibGUpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiB2YWx1ZTsKKworCWlmIChlbmFibGUpCisJCXZhbHVlID0gKE1BQ19DT05GSUdfUkVHX1NSIHwgKE1BQ19DT05GSUdfUkVHX1NSIDw8IDE2KSk7CisJZWxzZQorCQl2YWx1ZSA9IChNQUNfQ09ORklHX1JFR19TUiA8PCAxNik7CisKKwlpZiAocWRldi0+bWFjX2luZGV4KQorCQlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjMUNvbmZpZ1JlZywgdmFsdWUpOworCWVsc2UKKwkJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hYzBDb25maWdSZWcsIHZhbHVlKTsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBxbF9tYWNfY2ZnX2dpZyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBlbmFibGUpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiB2YWx1ZTsKKworCWlmIChlbmFibGUpCisJCXZhbHVlID0gKE1BQ19DT05GSUdfUkVHX0dNIHwgKE1BQ19DT05GSUdfUkVHX0dNIDw8IDE2KSk7CisJZWxzZQorCQl2YWx1ZSA9IChNQUNfQ09ORklHX1JFR19HTSA8PCAxNik7CisKKwlpZiAocWRldi0+bWFjX2luZGV4KQorCQlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjMUNvbmZpZ1JlZywgdmFsdWUpOworCWVsc2UKKwkJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hYzBDb25maWdSZWcsIHZhbHVlKTsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgdm9pZCBxbF9tYWNfY2ZnX2Z1bGxfZHVwKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJdTMyIHZhbHVlOworCisJaWYgKGVuYWJsZSkKKwkJdmFsdWUgPSAoTUFDX0NPTkZJR19SRUdfRkQgfCAoTUFDX0NPTkZJR19SRUdfRkQgPDwgMTYpKTsKKwllbHNlCisJCXZhbHVlID0gKE1BQ19DT05GSUdfUkVHX0ZEIDw8IDE2KTsKKworCWlmIChxZGV2LT5tYWNfaW5kZXgpCisJCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWMxQ29uZmlnUmVnLCB2YWx1ZSk7CisJZWxzZQorCQlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjMENvbmZpZ1JlZywgdmFsdWUpOworfQorCisvKgorICogQ2FsbGVyIGhvbGRzIGh3X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHFsX21hY19jZmdfcGF1c2Uoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCB1MzIgZW5hYmxlKQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgdmFsdWU7CisKKwlpZiAoZW5hYmxlKQorCQl2YWx1ZSA9CisJCSAgICAoKE1BQ19DT05GSUdfUkVHX1RGIHwgTUFDX0NPTkZJR19SRUdfUkYpIHwKKwkJICAgICAoKE1BQ19DT05GSUdfUkVHX1RGIHwgTUFDX0NPTkZJR19SRUdfUkYpIDw8IDE2KSk7CisJZWxzZQorCQl2YWx1ZSA9ICgoTUFDX0NPTkZJR19SRUdfVEYgfCBNQUNfQ09ORklHX1JFR19SRikgPDwgMTYpOworCisJaWYgKHFkZXYtPm1hY19pbmRleCkKKwkJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hYzFDb25maWdSZWcsIHZhbHVlKTsKKwllbHNlCisJCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWMwQ29uZmlnUmVnLCB2YWx1ZSk7Cit9CisKKy8qCisgKiBDYWxsZXIgaG9sZHMgaHdfbG9jay4KKyAqLworc3RhdGljIGludCBxbF9pc19maWJlcihzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiBiaXRUb0NoZWNrID0gMDsKKwl1MzIgdGVtcDsKKworCXN3aXRjaCAocWRldi0+bWFjX2luZGV4KSB7CisJY2FzZSAwOgorCQliaXRUb0NoZWNrID0gUE9SVF9TVEFUVVNfU00wOworCQlicmVhazsKKwljYXNlIDE6CisJCWJpdFRvQ2hlY2sgPSBQT1JUX1NUQVRVU19TTTE7CisJCWJyZWFrOworCX0KKworCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKKwlyZXR1cm4gKHRlbXAgJiBiaXRUb0NoZWNrKSAhPSAwOworfQorCitzdGF0aWMgaW50IHFsX2lzX2F1dG9fY2ZnKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwl1MTYgcmVnOworCXFsX21paV9yZWFkX3JlZyhxZGV2LCAweDAwLCAmcmVnKTsKKwlyZXR1cm4gKHJlZyAmIDB4MTAwMCkgIT0gMDsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgaW50IHFsX2lzX2F1dG9fbmVnX2NvbXBsZXRlKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJdTMyIGJpdFRvQ2hlY2sgPSAwOworCXUzMiB0ZW1wOworCisJc3dpdGNoIChxZGV2LT5tYWNfaW5kZXgpIHsKKwljYXNlIDA6CisJCWJpdFRvQ2hlY2sgPSBQT1JUX1NUQVRVU19BQzA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYml0VG9DaGVjayA9IFBPUlRfU1RBVFVTX0FDMTsKKwkJYnJlYWs7CisJfQorCisJdGVtcCA9IHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPnBvcnRTdGF0dXMpOworCWlmICh0ZW1wICYgYml0VG9DaGVjaykgeworCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJICAgICAgICIlczogQXV0by1OZWdvdGlhdGUgY29tcGxldGUuXG4iLAorCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWAorCQkJICAgICAgICIlczogQXV0by1OZWdvdGlhdGUgaW5jb21wbGV0ZS5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAwOworCX0KK30KKworLyoKKyAqICBxbF9pc19uZWdfcGF1c2UoKSByZXR1cm5zIDEgaWYgcGF1c2Ugd2FzIG5lZ290aWF0ZWQgdG8gYmUgb24KKyAqLworc3RhdGljIGludCBxbF9pc19uZWdfcGF1c2Uoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCWlmIChxbF9pc19maWJlcihxZGV2KSkKKwkJcmV0dXJuIHFsX2lzX3BldGJpX25lZ19wYXVzZShxZGV2KTsKKwllbHNlCisJCXJldHVybiBxbF9pc19waHlfbmVnX3BhdXNlKHFkZXYpOworfQorCitzdGF0aWMgaW50IHFsX2F1dG9fbmVnX2Vycm9yKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9CisJICAgIAkJcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJdTMyIGJpdFRvQ2hlY2sgPSAwOworCXUzMiB0ZW1wOworCisJc3dpdGNoIChxZGV2LT5tYWNfaW5kZXgpIHsKKwljYXNlIDA6CisJCWJpdFRvQ2hlY2sgPSBQT1JUX1NUQVRVU19BRTA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYml0VG9DaGVjayA9IFBPUlRfU1RBVFVTX0FFMTsKKwkJYnJlYWs7CisJfQorCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKKwlyZXR1cm4gKHRlbXAgJiBiaXRUb0NoZWNrKSAhPSAwOworfQorCitzdGF0aWMgdTMyIHFsX2dldF9saW5rX3NwZWVkKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlpZiAocWxfaXNfZmliZXIocWRldikpCisJCXJldHVybiBTUEVFRF8xMDAwOworCWVsc2UKKwkJcmV0dXJuIHFsX3BoeV9nZXRfc3BlZWQocWRldik7Cit9CisKK3N0YXRpYyBpbnQgcWxfaXNfbGlua19mdWxsX2R1cChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaWYgKHFsX2lzX2ZpYmVyKHFkZXYpKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiBxbF9pc19mdWxsX2R1cChxZGV2KTsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgaW50IHFsX2xpbmtfZG93bl9kZXRlY3Qoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgYml0VG9DaGVjayA9IDA7CisJdTMyIHRlbXA7CisKKwlzd2l0Y2ggKHFkZXYtPm1hY19pbmRleCkgeworCWNhc2UgMDoKKwkJYml0VG9DaGVjayA9IElTUF9DT05UUk9MX0xJTktfRE5fMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQliaXRUb0NoZWNrID0gSVNQX0NPTlRST0xfTElOS19ETl8xOworCQlicmVhazsKKwl9CisKKwl0ZW1wID0KKwkgICAgcWxfcmVhZF9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cyk7CisJcmV0dXJuICh0ZW1wICYgYml0VG9DaGVjaykgIT0gMDsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgaW50IHFsX2xpbmtfZG93bl9kZXRlY3RfY2xlYXIoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCXN3aXRjaCAocWRldi0+bWFjX2luZGV4KSB7CisJY2FzZSAwOgorCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cywKKwkJCQkgICAgKElTUF9DT05UUk9MX0xJTktfRE5fMCkgfAorCQkJCSAgICAoSVNQX0NPTlRST0xfTElOS19ETl8wIDw8IDE2KSk7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cywKKwkJCQkgICAgKElTUF9DT05UUk9MX0xJTktfRE5fMSkgfAorCQkJCSAgICAoSVNQX0NPTlRST0xfTElOS19ETl8xIDw8IDE2KSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZXIgaG9sZHMgaHdfbG9jay4KKyAqLworc3RhdGljIGludCBxbF90aGlzX2FkYXB0ZXJfY29udHJvbHNfcG9ydChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsCisJCQkJCSB1MzIgbWFjX2luZGV4KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgYml0VG9DaGVjayA9IDA7CisJdTMyIHRlbXA7CisKKwlzd2l0Y2ggKG1hY19pbmRleCkgeworCWNhc2UgMDoKKwkJYml0VG9DaGVjayA9IFBPUlRfU1RBVFVTX0YxX0VOQUJMRUQ7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYml0VG9DaGVjayA9IFBPUlRfU1RBVFVTX0YzX0VOQUJMRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKKwlpZiAodGVtcCAmIGJpdFRvQ2hlY2spIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkgICAgICAgIiVzOiBpcyBub3QgbGluayBtYXN0ZXIuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkgICAgICAgIiVzOiBpcyBsaW5rIG1hc3Rlci5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm4gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX3BoeV9yZXNldF9leChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBtYWNfaW5kZXgpCit7CisJcWxfbWlpX3dyaXRlX3JlZ19leChxZGV2LCBDT05UUk9MX1JFRywgUEhZX0NUUkxfU09GVF9SRVNFVCwgbWFjX2luZGV4KTsKK30KKworc3RhdGljIHZvaWQgcWxfcGh5X3N0YXJ0X25lZ19leChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYsIHUzMiBtYWNfaW5kZXgpCit7CisJdTE2IHJlZzsKKworCXFsX21paV93cml0ZV9yZWdfZXgocWRldiwgUEhZX05FR19BRFZFUiwKKwkJCSAgICBQSFlfTkVHX1BBVVNFIHwgUEhZX05FR19BRFZfU1BFRUQgfCAxLCBtYWNfaW5kZXgpOworCisJcWxfbWlpX3JlYWRfcmVnX2V4KHFkZXYsIENPTlRST0xfUkVHLCAmcmVnLCBtYWNfaW5kZXgpOworCXFsX21paV93cml0ZV9yZWdfZXgocWRldiwgQ09OVFJPTF9SRUcsIHJlZyB8IFBIWV9DVFJMX1JFU1RBUlRfTkVHLAorCQkJICAgIG1hY19pbmRleCk7Cit9CisKK3N0YXRpYyB2b2lkIHFsX3BoeV9pbml0X2V4KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgdTMyIG1hY19pbmRleCkKK3sKKwlxbF9waHlfcmVzZXRfZXgocWRldiwgbWFjX2luZGV4KTsKKwlxbF9waHlfc3RhcnRfbmVnX2V4KHFkZXYsIG1hY19pbmRleCk7Cit9CisKKy8qCisgKiBDYWxsZXIgaG9sZHMgaHdfbG9jay4KKyAqLworc3RhdGljIHUzMiBxbF9nZXRfbGlua19zdGF0ZShzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiBiaXRUb0NoZWNrID0gMDsKKwl1MzIgdGVtcCwgbGlua1N0YXRlOworCisJc3dpdGNoIChxZGV2LT5tYWNfaW5kZXgpIHsKKwljYXNlIDA6CisJCWJpdFRvQ2hlY2sgPSBQT1JUX1NUQVRVU19VUDA7CisJCWJyZWFrOworCWNhc2UgMToKKwkJYml0VG9DaGVjayA9IFBPUlRfU1RBVFVTX1VQMTsKKwkJYnJlYWs7CisJfQorCXRlbXAgPSBxbF9yZWFkX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5wb3J0U3RhdHVzKTsKKwlpZiAodGVtcCAmIGJpdFRvQ2hlY2spIHsKKwkJbGlua1N0YXRlID0gTFNfVVA7CisJfSBlbHNlIHsKKwkJbGlua1N0YXRlID0gTFNfRE9XTjsKKwkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKKwkJCSAgICAgICAiJXM6IExpbmsgaXMgZG93bi5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCX0KKwlyZXR1cm4gbGlua1N0YXRlOworfQorCitzdGF0aWMgaW50IHFsX3BvcnRfc3RhcnQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAorCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCisJCQkgMikgPDwgNykpCisJCXJldHVybiAtMTsKKworCWlmIChxbF9pc19maWJlcihxZGV2KSkgeworCQlxbF9wZXRiaV9pbml0KHFkZXYpOworCX0gZWxzZSB7CisJCS8qIENvcHBlciBwb3J0ICovCisJCXFsX3BoeV9pbml0X2V4KHFkZXYsIHFkZXYtPm1hY19pbmRleCk7CisJfQorCisJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbF9maW5pc2hfYXV0b19uZWcoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCisJaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCisJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKKwkJCSAyKSA8PCA3KSkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFxbF9hdXRvX25lZ19lcnJvcihxZGV2KSkgeworCQlpZiAodGVzdF9iaXQoUUxfTElOS19NQVNURVIsJnFkZXYtPmZsYWdzKSkgeworCQkJLyogY29uZmlndXJlIHRoZSBNQUMgKi8KKwkJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgIiVzOiBDb25maWd1cmluZyBsaW5rLlxuIiwKKwkJCQkgICAgICAgcWRldi0+bmRldi0+CisJCQkJICAgICAgIG5hbWUpOworCQkJcWxfbWFjX2NmZ19zb2Z0X3Jlc2V0KHFkZXYsIDEpOworCQkJcWxfbWFjX2NmZ19naWcocWRldiwKKwkJCQkgICAgICAgKHFsX2dldF9saW5rX3NwZWVkCisJCQkJCShxZGV2KSA9PQorCQkJCQlTUEVFRF8xMDAwKSk7CisJCQlxbF9tYWNfY2ZnX2Z1bGxfZHVwKHFkZXYsCisJCQkJCSAgICBxbF9pc19saW5rX2Z1bGxfZHVwCisJCQkJCSAgICAocWRldikpOworCQkJcWxfbWFjX2NmZ19wYXVzZShxZGV2LAorCQkJCQkgcWxfaXNfbmVnX3BhdXNlCisJCQkJCSAocWRldikpOworCQkJcWxfbWFjX2NmZ19zb2Z0X3Jlc2V0KHFkZXYsIDApOworCisJCQkvKiBlbmFibGUgdGhlIE1BQyAqLworCQkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJCSAgICAgICAiJXM6IEVuYWJsaW5nIG1hYy5cbiIsCisJCQkJICAgICAgIHFkZXYtPm5kZXYtPgorCQkJCQkgICAgICAgbmFtZSk7CisJCQlxbF9tYWNfZW5hYmxlKHFkZXYsIDEpOworCQl9CisKKwkJaWYgKG5ldGlmX21zZ19saW5rKHFkZXYpKQorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkgICAgICAgIiVzOiBDaGFuZ2UgcG9ydF9saW5rX3N0YXRlIExTX0RPV04gdG8gTFNfVVAuXG4iLAorCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlxZGV2LT5wb3J0X2xpbmtfc3RhdGUgPSBMU19VUDsKKwkJbmV0aWZfc3RhcnRfcXVldWUocWRldi0+bmRldik7CisJCW5ldGlmX2NhcnJpZXJfb24ocWRldi0+bmRldik7CisJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCQkgICAgICAgIiVzOiBMaW5rIGlzIHVwIGF0ICVkIE1icHMsICVzIGR1cGxleC5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwKKwkJCSAgICAgICBxbF9nZXRfbGlua19zcGVlZChxZGV2KSwKKwkJCSAgICAgICBxbF9pc19saW5rX2Z1bGxfZHVwKHFkZXYpCisJCQkgICAgICAgPyAiZnVsbCIgOiAiaGFsZiIpOworCisJfSBlbHNlIHsJLyogUmVtb3RlIGVycm9yIGRldGVjdGVkICovCisKKwkJaWYgKHRlc3RfYml0KFFMX0xJTktfTUFTVEVSLCZxZGV2LT5mbGFncykpIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgIiVzOiBSZW1vdGUgZXJyb3IgZGV0ZWN0ZWQuICIKKwkJCQkgICAgICAgIkNhbGxpbmcgcWxfcG9ydF9zdGFydCgpLlxuIiwKKwkJCQkgICAgICAgcWRldi0+bmRldi0+CisJCQkJICAgICAgIG5hbWUpOworCQkJLyoKKwkJCSAqIHFsX3BvcnRfc3RhcnQoKSBpcyBzaGFyZWQgY29kZSBhbmQgbmVlZHMKKwkJCSAqIHRvIGxvY2sgdGhlIFBIWSBvbiBpdCdzIG93bi4KKwkJCSAqLworCQkJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLKTsKKwkJCWlmKHFsX3BvcnRfc3RhcnQocWRldikpCXsvKiBSZXN0YXJ0IHBvcnQgKi8KKwkJCQlyZXR1cm4gLTE7CisJCQl9IGVsc2UKKwkJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxbF9saW5rX3N0YXRlX21hY2hpbmUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXUzMiBjdXJyX2xpbmtfc3RhdGU7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisKKwljdXJyX2xpbmtfc3RhdGUgPSBxbF9nZXRfbGlua19zdGF0ZShxZGV2KTsKKworCWlmICh0ZXN0X2JpdChRTF9SRVNFVF9BQ1RJVkUsJnFkZXYtPmZsYWdzKSkgeworCQlpZiAobmV0aWZfbXNnX2xpbmsocWRldikpCisJCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkJICAgICAgICIlczogUmVzZXQgaW4gcHJvZ3Jlc3MsIHNraXAgcHJvY2Vzc2luZyBsaW5rICIKKwkJCSAgICAgICAic3RhdGUuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaCAocWRldi0+cG9ydF9saW5rX3N0YXRlKSB7CisJZGVmYXVsdDoKKwkJaWYgKHRlc3RfYml0KFFMX0xJTktfTUFTVEVSLCZxZGV2LT5mbGFncykpIHsKKwkJCXFsX3BvcnRfc3RhcnQocWRldik7CisJCX0KKwkJcWRldi0+cG9ydF9saW5rX3N0YXRlID0gTFNfRE9XTjsKKwkJLyogRmFsbCBUaHJvdWdoICovCisKKwljYXNlIExTX0RPV046CisJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJICAgICAgICIlczogcG9ydF9saW5rX3N0YXRlID0gTFNfRE9XTi5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCWlmIChjdXJyX2xpbmtfc3RhdGUgPT0gTFNfVVApIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgIiVzOiBjdXJyX2xpbmtfc3RhdGUgPSBMU19VUC5cbiIsCisJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQkJaWYgKHFsX2lzX2F1dG9fbmVnX2NvbXBsZXRlKHFkZXYpKQorCQkJCXFsX2ZpbmlzaF9hdXRvX25lZyhxZGV2KTsKKworCQkJaWYgKHFkZXYtPnBvcnRfbGlua19zdGF0ZSA9PSBMU19VUCkKKwkJCQlxbF9saW5rX2Rvd25fZGV0ZWN0X2NsZWFyKHFkZXYpOworCisJCX0KKwkJYnJlYWs7CisKKwljYXNlIExTX1VQOgorCQkvKgorCQkgKiBTZWUgaWYgdGhlIGxpbmsgaXMgY3VycmVudGx5IGRvd24gb3Igd2VudCBkb3duIGFuZCBjYW1lCisJCSAqIGJhY2sgdXAKKwkJICovCisJCWlmICgoY3Vycl9saW5rX3N0YXRlID09IExTX0RPV04pIHx8IHFsX2xpbmtfZG93bl9kZXRlY3QocWRldikpIHsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhxZGV2KSkKKwkJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgZG93bi5cbiIsCisJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQkJcWRldi0+cG9ydF9saW5rX3N0YXRlID0gTFNfRE9XTjsKKwkJfQorCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworfQorCisvKgorICogQ2FsbGVyIG11c3QgdGFrZSBod19sb2NrIGFuZCBRTF9QSFlfR0lPX1NFTS4KKyAqLworc3RhdGljIHZvaWQgcWxfZ2V0X3BoeV9vd25lcihzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaWYgKHFsX3RoaXNfYWRhcHRlcl9jb250cm9sc19wb3J0KHFkZXYsIHFkZXYtPm1hY19pbmRleCkpCisJCXNldF9iaXQoUUxfTElOS19NQVNURVIsJnFkZXYtPmZsYWdzKTsKKwllbHNlCisJCWNsZWFyX2JpdChRTF9MSU5LX01BU1RFUiwmcWRldi0+ZmxhZ3MpOworfQorCisvKgorICogQ2FsbGVyIG11c3QgdGFrZSBod19sb2NrIGFuZCBRTF9QSFlfR0lPX1NFTS4KKyAqLworc3RhdGljIHZvaWQgcWxfaW5pdF9zY2FuX21vZGUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXFsX21paV9lbmFibGVfc2Nhbl9tb2RlKHFkZXYpOworCisJaWYgKHRlc3RfYml0KFFMX0xJTktfT1BUSUNBTCwmcWRldi0+ZmxhZ3MpKSB7CisJCWlmIChxbF90aGlzX2FkYXB0ZXJfY29udHJvbHNfcG9ydChxZGV2LCBxZGV2LT5tYWNfaW5kZXgpKQorCQkJcWxfcGV0YmlfaW5pdF9leChxZGV2LCBxZGV2LT5tYWNfaW5kZXgpOworCX0gZWxzZSB7CisJCWlmIChxbF90aGlzX2FkYXB0ZXJfY29udHJvbHNfcG9ydChxZGV2LCBxZGV2LT5tYWNfaW5kZXgpKQorCQkJcWxfcGh5X2luaXRfZXgocWRldiwgcWRldi0+bWFjX2luZGV4KTsKKwl9Cit9CisKKy8qCisgKiBNSUlfU2V0dXAgbmVlZHMgdG8gYmUgY2FsbGVkIGJlZm9yZSB0YWtpbmcgdGhlIFBIWSBvdXQgb2YgcmVzZXQgc28gdGhhdCB0aGUKKyAqIG1hbmFnZW1lbnQgaW50ZXJmYWNlIGNsb2NrIHNwZWVkIGNhbiBiZSBzZXQgcHJvcGVybHkuICBJdCB3b3VsZCBiZSBiZXR0ZXIgaWYKKyAqIHdlIGhhZCBhIHdheSB0byBkaXNhYmxlIE1EQyB1bnRpbCBhZnRlciB0aGUgUEhZIGlzIG91dCBvZiByZXNldCwgYnV0IHdlCisgKiBkb24ndCBoYXZlIHRoYXQgY2FwYWJpbGl0eS4KKyAqLworc3RhdGljIGludCBxbF9taWlfc2V0dXAoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXUzMiByZWc7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPQorCSAgICAJCXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCisJaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCisJCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCisJCQkgMikgPDwgNykpCisJCXJldHVybiAtMTsKKworCS8qIERpdmlkZSAxMjVNSHogY2xvY2sgYnkgMjggdG8gbWVldCBQSFkgdGltaW5nIHJlcXVpcmVtZW50cyAqLworCXJlZyA9IE1BQ19NSUlfQ09OVFJPTF9DTEtfU0VMX0RJVjI4OworCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY01JSU1nbXRDb250cm9sUmVnLAorCQkJICAgcmVnIHwgKChNQUNfTUlJX0NPTlRST0xfQ0xLX1NFTF9NQVNLKSA8PCAxNikpOworCisJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBxbF9zdXBwb3J0ZWRfbW9kZXMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXUzMiBzdXBwb3J0ZWQ7CisKKwlpZiAodGVzdF9iaXQoUUxfTElOS19PUFRJQ0FMLCZxZGV2LT5mbGFncykpIHsKKwkJc3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsIHwgU1VQUE9SVEVEX0ZJQlJFCisJCSAgICB8IFNVUFBPUlRFRF9BdXRvbmVnOworCX0gZWxzZSB7CisJCXN1cHBvcnRlZCA9IFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYKKwkJICAgIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAorCQkgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfSGFsZgorCQkgICAgfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbAorCQkgICAgfCBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYKKwkJICAgIHwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsCisJCSAgICB8IFNVUFBPUlRFRF9BdXRvbmVnIHwgU1VQUE9SVEVEX1RQOworCX0KKworCXJldHVybiBzdXBwb3J0ZWQ7Cit9CisKK3N0YXRpYyBpbnQgcWxfZ2V0X2F1dG9fY2ZnX3N0YXR1cyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOworCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCisJCShRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSB8IChxZGV2LT5tYWNfaW5kZXgpICoKKwkJCSAyKSA8PCA3KSkKKwkJcmV0dXJuIDA7CisJc3RhdHVzID0gcWxfaXNfYXV0b19jZmcocWRldik7CisJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHUzMiBxbF9nZXRfc3BlZWQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXUzMiBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCWlmKHFsX3NlbV9zcGlubG9jayhxZGV2LCBRTF9QSFlfR0lPX1NFTV9NQVNLLAorCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCisJCQkgMikgPDwgNykpCisJCXJldHVybiAwOworCXN0YXR1cyA9IHFsX2dldF9saW5rX3NwZWVkKHFkZXYpOworCXFsX3NlbV91bmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgcWxfZ2V0X2Z1bGxfZHVwKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwlpZihxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSywKKwkJKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIHwgKHFkZXYtPm1hY19pbmRleCkgKgorCQkJIDIpIDw8IDcpKQorCQlyZXR1cm4gMDsKKwlzdGF0dXMgPSBxbF9pc19saW5rX2Z1bGxfZHVwKHFkZXYpOworCXFsX3NlbV91bmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKKworc3RhdGljIGludCBxbF9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWVjbWQtPnRyYW5zY2VpdmVyID0gWENWUl9JTlRFUk5BTDsKKwllY21kLT5zdXBwb3J0ZWQgPSBxbF9zdXBwb3J0ZWRfbW9kZXMocWRldik7CisKKwlpZiAodGVzdF9iaXQoUUxfTElOS19PUFRJQ0FMLCZxZGV2LT5mbGFncykpIHsKKwkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJfSBlbHNlIHsKKwkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJCWVjbWQtPnBoeV9hZGRyZXNzID0gcWRldi0+UEhZQWRkcjsKKwl9CisJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBxbF9zdXBwb3J0ZWRfbW9kZXMocWRldik7CisJZWNtZC0+YXV0b25lZyA9IHFsX2dldF9hdXRvX2NmZ19zdGF0dXMocWRldik7CisJZWNtZC0+c3BlZWQgPSBxbF9nZXRfc3BlZWQocWRldik7CisJZWNtZC0+ZHVwbGV4ID0gcWxfZ2V0X2Z1bGxfZHVwKHFkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCSAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RybmNweShkcnZpbmZvLT5kcml2ZXIsIHFsM3h4eF9kcml2ZXJfbmFtZSwgMzIpOworCXN0cm5jcHkoZHJ2aW5mby0+dmVyc2lvbiwgcWwzeHh4X2RyaXZlcl92ZXJzaW9uLCAzMik7CisJc3RybmNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgMzIpOworCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHFkZXYtPnBkZXYpLCAzMik7CisJZHJ2aW5mby0+bl9zdGF0cyA9IDA7CisJZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gMDsKKwlkcnZpbmZvLT5yZWdkdW1wX2xlbiA9IDA7CisJZHJ2aW5mby0+ZWVkdW1wX2xlbiA9IDA7Cit9CisKK3N0YXRpYyB1MzIgcWxfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOworCXJldHVybiBxZGV2LT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBxbF9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlxZGV2LT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWwzeHh4X2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgPSBxbF9nZXRfc2V0dGluZ3MsCisJLmdldF9kcnZpbmZvID0gcWxfZ2V0X2RydmluZm8sCisJLmdldF9wZXJtX2FkZHIgPSBldGh0b29sX29wX2dldF9wZXJtX2FkZHIsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X21zZ2xldmVsID0gcWxfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwgPSBxbF9zZXRfbXNnbGV2ZWwsCit9OworCitzdGF0aWMgaW50IHFsX3BvcHVsYXRlX2ZyZWVfcXVldWUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiID0gcWRldi0+bHJnX2J1Zl9mcmVlX2hlYWQ7CisJdTY0IG1hcDsKKworCXdoaWxlIChscmdfYnVmX2NiKSB7CisJCWlmICghbHJnX2J1Zl9jYi0+c2tiKSB7CisJCQlscmdfYnVmX2NiLT5za2IgPSBkZXZfYWxsb2Nfc2tiKHFkZXYtPmxyZ19idWZmZXJfbGVuKTsKKwkJCWlmICh1bmxpa2VseSghbHJnX2J1Zl9jYi0+c2tiKSkgeworCQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWAorCQkJCSAgICAgICAiJXM6IEZhaWxlZCBkZXZfYWxsb2Nfc2tiKCkuXG4iLAorCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBXZSBzYXZlIHNvbWUgc3BhY2UgdG8gY29weSB0aGUgZXRoaGRyIGZyb20KKwkJCQkgKiBmaXJzdCBidWZmZXIKKwkJCQkgKi8KKwkJCQlza2JfcmVzZXJ2ZShscmdfYnVmX2NiLT5za2IsIFFMX0hFQURFUl9TUEFDRSk7CisJCQkJbWFwID0gcGNpX21hcF9zaW5nbGUocWRldi0+cGRldiwKKwkJCQkJCSAgICAgbHJnX2J1Zl9jYi0+c2tiLT5kYXRhLAorCQkJCQkJICAgICBxZGV2LT5scmdfYnVmZmVyX2xlbiAtCisJCQkJCQkgICAgIFFMX0hFQURFUl9TUEFDRSwKKwkJCQkJCSAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQlscmdfYnVmX2NiLT5idWZfcGh5X2FkZHJfbG93ID0KKwkJCQkgICAgY3B1X3RvX2xlMzIoTFNfNjRCSVRTKG1hcCkpOworCQkJCWxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9oaWdoID0KKwkJCQkgICAgY3B1X3RvX2xlMzIoTVNfNjRCSVRTKG1hcCkpOworCQkJCXBjaV91bm1hcF9hZGRyX3NldChscmdfYnVmX2NiLCBtYXBhZGRyLCBtYXApOworCQkJCXBjaV91bm1hcF9sZW5fc2V0KGxyZ19idWZfY2IsIG1hcGxlbiwKKwkJCQkJCSAgcWRldi0+bHJnX2J1ZmZlcl9sZW4gLQorCQkJCQkJICBRTF9IRUFERVJfU1BBQ0UpOworCQkJCS0tcWRldi0+bHJnX2J1Zl9za2JfY2hlY2s7CisJCQkJaWYgKCFxZGV2LT5scmdfYnVmX3NrYl9jaGVjaykKKwkJCQkJcmV0dXJuIDE7CisJCQl9CisJCX0KKwkJbHJnX2J1Zl9jYiA9IGxyZ19idWZfY2ItPm5leHQ7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogQ2FsbGVyIGhvbGRzIGh3X2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIHFsX3VwZGF0ZV9scmdfYnVmcV9wcm9kX2luZGV4KHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgYnVmcV9hZGRyX2VsZW1lbnQgKmxyZ19idWZfcV9lbGU7CisJaW50IGk7CisJc3RydWN0IHFsX3Jjdl9idWZfY2IgKmxyZ19idWZfY2I7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKworCWlmICgocWRldi0+bHJnX2J1Zl9mcmVlX2NvdW50ID49IDgpCisJICAgICYmIChxZGV2LT5scmdfYnVmX3JlbGVhc2VfY250ID49IDE2KSkgeworCisJCWlmIChxZGV2LT5scmdfYnVmX3NrYl9jaGVjaykKKwkJCWlmICghcWxfcG9wdWxhdGVfZnJlZV9xdWV1ZShxZGV2KSkKKwkJCQlyZXR1cm47CisKKwkJbHJnX2J1Zl9xX2VsZSA9IHFkZXYtPmxyZ19idWZfbmV4dF9mcmVlOworCisJCXdoaWxlICgocWRldi0+bHJnX2J1Zl9yZWxlYXNlX2NudCA+PSAxNikKKwkJICAgICAgICYmIChxZGV2LT5scmdfYnVmX2ZyZWVfY291bnQgPj0gOCkpIHsKKworCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQkJCWxyZ19idWZfY2IgPQorCQkJCSAgICBxbF9nZXRfZnJvbV9scmdfYnVmX2ZyZWVfbGlzdChxZGV2KTsKKwkJCQlscmdfYnVmX3FfZWxlLT5hZGRyX2hpZ2ggPQorCQkJCSAgICBscmdfYnVmX2NiLT5idWZfcGh5X2FkZHJfaGlnaDsKKwkJCQlscmdfYnVmX3FfZWxlLT5hZGRyX2xvdyA9CisJCQkJICAgIGxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9sb3c7CisJCQkJbHJnX2J1Zl9xX2VsZSsrOworCisJCQkJcWRldi0+bHJnX2J1Zl9yZWxlYXNlX2NudC0tOworCQkJfQorCisJCQlxZGV2LT5scmdfYnVmX3FfcHJvZHVjZXJfaW5kZXgrKzsKKworCQkJaWYgKHFkZXYtPmxyZ19idWZfcV9wcm9kdWNlcl9pbmRleCA9PSBOVU1fTEJVRlFfRU5UUklFUykKKwkJCQlxZGV2LT5scmdfYnVmX3FfcHJvZHVjZXJfaW5kZXggPSAwOworCisJCQlpZiAocWRldi0+bHJnX2J1Zl9xX3Byb2R1Y2VyX2luZGV4ID09CisJCQkgICAgKE5VTV9MQlVGUV9FTlRSSUVTIC0gMSkpIHsKKwkJCQlscmdfYnVmX3FfZWxlID0gcWRldi0+bHJnX2J1Zl9xX3ZpcnRfYWRkcjsKKwkJCX0KKwkJfQorCisJCXFkZXYtPmxyZ19idWZfbmV4dF9mcmVlID0gbHJnX2J1Zl9xX2VsZTsKKworCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICh1MzIgKikgJiBwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCisJCQkJICAgIHJ4TGFyZ2VRUHJvZHVjZXJJbmRleCwKKwkJCQkgICAgcWRldi0+bHJnX2J1Zl9xX3Byb2R1Y2VyX2luZGV4KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3R4X2ludHIoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJCSAgIHN0cnVjdCBvYl9tYWNfaW9jYl9yc3AgKm1hY19yc3ApCit7CisJc3RydWN0IHFsX3R4X2J1Zl9jYiAqdHhfY2I7CisKKwl0eF9jYiA9ICZxZGV2LT50eF9idWZbbWFjX3JzcC0+dHJhbnNhY3Rpb25faWRdOworCXBjaV91bm1hcF9zaW5nbGUocWRldi0+cGRldiwKKwkJCSBwY2lfdW5tYXBfYWRkcih0eF9jYiwgbWFwYWRkciksCisJCQkgcGNpX3VubWFwX2xlbih0eF9jYiwgbWFwbGVuKSwgUENJX0RNQV9UT0RFVklDRSk7CisJZGV2X2tmcmVlX3NrYl9pcnEodHhfY2ItPnNrYik7CisJcWRldi0+c3RhdHMudHhfcGFja2V0cysrOworCXFkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHR4X2NiLT5za2ItPmxlbjsKKwl0eF9jYi0+c2tiID0gTlVMTDsKKwlhdG9taWNfaW5jKCZxZGV2LT50eF9jb3VudCk7Cit9CisKK3N0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3J4X2ludHIoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LAorCQkJCSAgIHN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3BfcHRyKQoreworCWxvbmcgaW50IG9mZnNldDsKKwl1MzIgbHJnX2J1Zl9waHlfYWRkcl9sb3cgPSAwOworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiMSA9IE5VTEw7CisJc3RydWN0IHFsX3Jjdl9idWZfY2IgKmxyZ19idWZfY2IyID0gTlVMTDsKKwl1MzIgKmN1cnJfaWFsX3B0cjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUxNiBsZW5ndGggPSBsZTE2X3RvX2NwdShpYl9tYWNfcnNwX3B0ci0+bGVuZ3RoKTsKKworCS8qCisJICogR2V0IHRoZSBpbmJvdW5kIGFkZHJlc3MgbGlzdCAoc21hbGwgYnVmZmVyKS4KKwkgKi8KKwlvZmZzZXQgPSBxZGV2LT5zbWFsbF9idWZfaW5kZXggKiBRTF9TTUFMTF9CVUZGRVJfU0laRTsKKwlpZiAoKytxZGV2LT5zbWFsbF9idWZfaW5kZXggPT0gTlVNX1NNQUxMX0JVRkZFUlMpCisJCXFkZXYtPnNtYWxsX2J1Zl9pbmRleCA9IDA7CisKKwljdXJyX2lhbF9wdHIgPSAodTMyICopIChxZGV2LT5zbWFsbF9idWZfdmlydF9hZGRyICsgb2Zmc2V0KTsKKwlxZGV2LT5sYXN0X3JzcF9vZmZzZXQgPSBxZGV2LT5zbWFsbF9idWZfcGh5X2FkZHJfbG93ICsgb2Zmc2V0OworCXFkZXYtPnNtYWxsX2J1Zl9yZWxlYXNlX2NudCsrOworCisJLyogc3RhcnQgb2YgZmlyc3QgYnVmZmVyICovCisJbHJnX2J1Zl9waHlfYWRkcl9sb3cgPSBsZTMyX3RvX2NwdSgqY3Vycl9pYWxfcHRyKTsKKwlscmdfYnVmX2NiMSA9ICZxZGV2LT5scmdfYnVmW3FkZXYtPmxyZ19idWZfaW5kZXhdOworCXFkZXYtPmxyZ19idWZfcmVsZWFzZV9jbnQrKzsKKwlpZiAoKytxZGV2LT5scmdfYnVmX2luZGV4ID09IE5VTV9MQVJHRV9CVUZGRVJTKQorCQlxZGV2LT5scmdfYnVmX2luZGV4ID0gMDsKKwljdXJyX2lhbF9wdHIrKzsJCS8qIDY0LWJpdCBwb2ludGVycyByZXF1aXJlIHR3byBpbmNzLiAqLworCWN1cnJfaWFsX3B0cisrOworCisJLyogc3RhcnQgb2Ygc2Vjb25kIGJ1ZmZlciAqLworCWxyZ19idWZfcGh5X2FkZHJfbG93ID0gbGUzMl90b19jcHUoKmN1cnJfaWFsX3B0cik7CisJbHJnX2J1Zl9jYjIgPSAmcWRldi0+bHJnX2J1ZltxZGV2LT5scmdfYnVmX2luZGV4XTsKKworCS8qCisJICogU2Vjb25kIGJ1ZmZlciBnZXRzIHNlbnQgdXAgdGhlIHN0YWNrLgorCSAqLworCXFkZXYtPmxyZ19idWZfcmVsZWFzZV9jbnQrKzsKKwlpZiAoKytxZGV2LT5scmdfYnVmX2luZGV4ID09IE5VTV9MQVJHRV9CVUZGRVJTKQorCQlxZGV2LT5scmdfYnVmX2luZGV4ID0gMDsKKwlza2IgPSBscmdfYnVmX2NiMi0+c2tiOworCisJcWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCXFkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbmd0aDsKKworCXNrYl9wdXQoc2tiLCBsZW5ndGgpOworCXBjaV91bm1hcF9zaW5nbGUocWRldi0+cGRldiwKKwkJCSBwY2lfdW5tYXBfYWRkcihscmdfYnVmX2NiMiwgbWFwYWRkciksCisJCQkgcGNpX3VubWFwX2xlbihscmdfYnVmX2NiMiwgbWFwbGVuKSwKKwkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCXByZWZldGNoKHNrYi0+ZGF0YSk7CisJc2tiLT5kZXYgPSBxZGV2LT5uZGV2OworCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBxZGV2LT5uZGV2KTsKKworCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJcWRldi0+bmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisJbHJnX2J1Zl9jYjItPnNrYiA9IE5VTEw7CisKKwlxbF9yZWxlYXNlX3RvX2xyZ19idWZfZnJlZV9saXN0KHFkZXYsIGxyZ19idWZfY2IxKTsKKwlxbF9yZWxlYXNlX3RvX2xyZ19idWZfZnJlZV9saXN0KHFkZXYsIGxyZ19idWZfY2IyKTsKK30KKworc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNpcF9yeF9pbnRyKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKKwkJCQkgICAgIHN0cnVjdCBpYl9pcF9pb2NiX3JzcCAqaWJfaXBfcnNwX3B0cikKK3sKKwlsb25nIGludCBvZmZzZXQ7CisJdTMyIGxyZ19idWZfcGh5X2FkZHJfbG93ID0gMDsKKwlzdHJ1Y3QgcWxfcmN2X2J1Zl9jYiAqbHJnX2J1Zl9jYjEgPSBOVUxMOworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiMiA9IE5VTEw7CisJdTMyICpjdXJyX2lhbF9wdHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjEsICpza2IyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKKwl1MTYgbGVuZ3RoID0gbGUxNl90b19jcHUoaWJfaXBfcnNwX3B0ci0+bGVuZ3RoKTsKKwl1MTYgc2l6ZSA9IDA7CisKKwkvKgorCSAqIEdldCB0aGUgaW5ib3VuZCBhZGRyZXNzIGxpc3QgKHNtYWxsIGJ1ZmZlcikuCisJICovCisKKwlvZmZzZXQgPSBxZGV2LT5zbWFsbF9idWZfaW5kZXggKiBRTF9TTUFMTF9CVUZGRVJfU0laRTsKKwlpZiAoKytxZGV2LT5zbWFsbF9idWZfaW5kZXggPT0gTlVNX1NNQUxMX0JVRkZFUlMpCisJCXFkZXYtPnNtYWxsX2J1Zl9pbmRleCA9IDA7CisJY3Vycl9pYWxfcHRyID0gKHUzMiAqKSAocWRldi0+c21hbGxfYnVmX3ZpcnRfYWRkciArIG9mZnNldCk7CisJcWRldi0+bGFzdF9yc3Bfb2Zmc2V0ID0gcWRldi0+c21hbGxfYnVmX3BoeV9hZGRyX2xvdyArIG9mZnNldDsKKwlxZGV2LT5zbWFsbF9idWZfcmVsZWFzZV9jbnQrKzsKKworCS8qIHN0YXJ0IG9mIGZpcnN0IGJ1ZmZlciAqLworCWxyZ19idWZfcGh5X2FkZHJfbG93ID0gbGUzMl90b19jcHUoKmN1cnJfaWFsX3B0cik7CisJbHJnX2J1Zl9jYjEgPSAmcWRldi0+bHJnX2J1ZltxZGV2LT5scmdfYnVmX2luZGV4XTsKKworCXFkZXYtPmxyZ19idWZfcmVsZWFzZV9jbnQrKzsKKwlpZiAoKytxZGV2LT5scmdfYnVmX2luZGV4ID09IE5VTV9MQVJHRV9CVUZGRVJTKQorCQlxZGV2LT5scmdfYnVmX2luZGV4ID0gMDsKKwlza2IxID0gbHJnX2J1Zl9jYjEtPnNrYjsKKwljdXJyX2lhbF9wdHIrKzsJCS8qIDY0LWJpdCBwb2ludGVycyByZXF1aXJlIHR3byBpbmNzLiAqLworCWN1cnJfaWFsX3B0cisrOworCisJLyogc3RhcnQgb2Ygc2Vjb25kIGJ1ZmZlciAqLworCWxyZ19idWZfcGh5X2FkZHJfbG93ID0gbGUzMl90b19jcHUoKmN1cnJfaWFsX3B0cik7CisJbHJnX2J1Zl9jYjIgPSAmcWRldi0+bHJnX2J1ZltxZGV2LT5scmdfYnVmX2luZGV4XTsKKwlza2IyID0gbHJnX2J1Zl9jYjItPnNrYjsKKwlxZGV2LT5scmdfYnVmX3JlbGVhc2VfY250Kys7CisJaWYgKCsrcWRldi0+bHJnX2J1Zl9pbmRleCA9PSBOVU1fTEFSR0VfQlVGRkVSUykKKwkJcWRldi0+bHJnX2J1Zl9pbmRleCA9IDA7CisKKwlxZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJcWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCisJLyoKKwkgKiBDb3B5IHRoZSBldGhoZHIgZnJvbSBmaXJzdCBidWZmZXIgdG8gc2Vjb25kLiBUaGlzCisJICogaXMgbmVjZXNzYXJ5IGZvciBJUCBjb21wbGV0aW9ucy4KKwkgKi8KKwlpZiAoKigodTE2ICopIHNrYjEtPmRhdGEpICE9IDB4RkZGRikKKwkJc2l6ZSA9IFZMQU5fRVRIX0hMRU47CisJZWxzZQorCQlzaXplID0gRVRIX0hMRU47CisKKwlza2JfcHV0KHNrYjIsIGxlbmd0aCk7CS8qIEp1c3QgdGhlIHNlY29uZCBidWZmZXIgbGVuZ3RoIGhlcmUuICovCisJcGNpX3VubWFwX3NpbmdsZShxZGV2LT5wZGV2LAorCQkJIHBjaV91bm1hcF9hZGRyKGxyZ19idWZfY2IyLCBtYXBhZGRyKSwKKwkJCSBwY2lfdW5tYXBfbGVuKGxyZ19idWZfY2IyLCBtYXBsZW4pLAorCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJcHJlZmV0Y2goc2tiMi0+ZGF0YSk7CisKKwltZW1jcHkoc2tiX3B1c2goc2tiMiwgc2l6ZSksIHNrYjEtPmRhdGEgKyBWTEFOX0lEX0xFTiwgc2l6ZSk7CisJc2tiMi0+ZGV2ID0gcWRldi0+bmRldjsKKwlza2IyLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCXNrYjItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiMiwgcWRldi0+bmRldik7CisKKwluZXRpZl9yZWNlaXZlX3NrYihza2IyKTsKKwluZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKwlscmdfYnVmX2NiMi0+c2tiID0gTlVMTDsKKworCXFsX3JlbGVhc2VfdG9fbHJnX2J1Zl9mcmVlX2xpc3QocWRldiwgbHJnX2J1Zl9jYjEpOworCXFsX3JlbGVhc2VfdG9fbHJnX2J1Zl9mcmVlX2xpc3QocWRldiwgbHJnX2J1Zl9jYjIpOworfQorCitzdGF0aWMgaW50IHFsX3R4X3J4X2NsZWFuKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwKKwkJCSAgaW50ICp0eF9jbGVhbmVkLCBpbnQgKnJ4X2NsZWFuZWQsIGludCB3b3JrX3RvX2RvKQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IG5ldF9yc3BfaW9jYiAqbmV0X3JzcDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKworCS8qIFdoaWxlIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoZSBjb21wbGV0aW9uIHF1ZXVlLiAqLworCXdoaWxlICgoY3B1X3RvX2xlMzIoKihxZGV2LT5wcnNwX3Byb2R1Y2VyX2luZGV4KSkgIT0KKwkJcWRldi0+cnNwX2NvbnN1bWVyX2luZGV4KSAmJiAoKnJ4X2NsZWFuZWQgPCB3b3JrX3RvX2RvKSkgeworCisJCW5ldF9yc3AgPSBxZGV2LT5yc3BfY3VycmVudDsKKwkJc3dpdGNoIChuZXRfcnNwLT5vcGNvZGUpIHsKKworCQljYXNlIE9QQ09ERV9PQl9NQUNfSU9DQl9GTjA6CisJCWNhc2UgT1BDT0RFX09CX01BQ19JT0NCX0ZOMjoKKwkJCXFsX3Byb2Nlc3NfbWFjX3R4X2ludHIocWRldiwgKHN0cnVjdCBvYl9tYWNfaW9jYl9yc3AgKikKKwkJCQkJICAgICAgIG5ldF9yc3ApOworCQkJKCp0eF9jbGVhbmVkKSsrOworCQkJYnJlYWs7CisKKwkJY2FzZSBPUENPREVfSUJfTUFDX0lPQ0I6CisJCQlxbF9wcm9jZXNzX21hY19yeF9pbnRyKHFkZXYsIChzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICopCisJCQkJCSAgICAgICBuZXRfcnNwKTsKKwkJCSgqcnhfY2xlYW5lZCkrKzsKKwkJCWJyZWFrOworCisJCWNhc2UgT1BDT0RFX0lCX0lQX0lPQ0I6CisJCQlxbF9wcm9jZXNzX21hY2lwX3J4X2ludHIocWRldiwgKHN0cnVjdCBpYl9pcF9pb2NiX3JzcCAqKQorCQkJCQkJIG5ldF9yc3ApOworCQkJKCpyeF9jbGVhbmVkKSsrOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl7CisJCQkJdTMyICp0bXAgPSAodTMyICopIG5ldF9yc3A7CisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSAgICAgICAiJXM6IEhpdCBkZWZhdWx0IGNhc2UsIG5vdCAiCisJCQkJICAgICAgICJoYW5kbGVkIVxuIgorCQkJCSAgICAgICAiCWRyb3BwaW5nIHRoZSBwYWNrZXQsIG9wY29kZSA9ICIKKwkJCQkgICAgICAgIiV4LlxuIiwKKwkJCQkgICAgICAgbmRldi0+bmFtZSwgbmV0X3JzcC0+b3Bjb2RlKTsKKwkJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkJICAgICAgICIweCUwOGx4IDB4JTA4bHggMHglMDhseCAweCUwOGx4IFxuIiwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXRtcFswXSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXRtcFsxXSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXRtcFsyXSwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgaW50KXRtcFszXSk7CisJCQl9CisJCX0KKworCQlxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXgrKzsKKworCQlpZiAocWRldi0+cnNwX2NvbnN1bWVyX2luZGV4ID09IE5VTV9SU1BfUV9FTlRSSUVTKSB7CisJCQlxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXggPSAwOworCQkJcWRldi0+cnNwX2N1cnJlbnQgPSBxZGV2LT5yc3BfcV92aXJ0X2FkZHI7CisJCX0gZWxzZSB7CisJCQlxZGV2LT5yc3BfY3VycmVudCsrOworCQl9CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKworCXFsX3VwZGF0ZV9scmdfYnVmcV9wcm9kX2luZGV4KHFkZXYpOworCisJaWYgKHFkZXYtPnNtYWxsX2J1Zl9yZWxlYXNlX2NudCA+PSAxNikgeworCQl3aGlsZSAocWRldi0+c21hbGxfYnVmX3JlbGVhc2VfY250ID49IDE2KSB7CisJCQlxZGV2LT5zbWFsbF9idWZfcV9wcm9kdWNlcl9pbmRleCsrOworCisJCQlpZiAocWRldi0+c21hbGxfYnVmX3FfcHJvZHVjZXJfaW5kZXggPT0KKwkJCSAgICBOVU1fU0JVRlFfRU5UUklFUykKKwkJCQlxZGV2LT5zbWFsbF9idWZfcV9wcm9kdWNlcl9pbmRleCA9IDA7CisJCQlxZGV2LT5zbWFsbF9idWZfcmVsZWFzZV9jbnQgLT0gODsKKwkJfQorCisJCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwKKwkJCQkgICAgKHUzMiAqKSAmIHBvcnRfcmVncy0+Q29tbW9uUmVncy4KKwkJCQkgICAgcnhTbWFsbFFQcm9kdWNlckluZGV4LAorCQkJCSAgICBxZGV2LT5zbWFsbF9idWZfcV9wcm9kdWNlcl9pbmRleCk7CisJfQorCisJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJICAgICh1MzIgKikgJiBwb3J0X3JlZ3MtPkNvbW1vblJlZ3MucnNwUUNvbnN1bWVySW5kZXgsCisJCQkgICAgcWRldi0+cnNwX2NvbnN1bWVyX2luZGV4KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisKKwlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZChxZGV2LT5uZGV2KSkpIHsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQocWRldi0+bmRldikgJiYKKwkJICAgIChhdG9taWNfcmVhZCgmcWRldi0+dHhfY291bnQpID4gKE5VTV9SRVFfUV9FTlRSSUVTIC8gNCkpKQorCQkJbmV0aWZfd2FrZV9xdWV1ZShxZGV2LT5uZGV2KTsKKwl9CisKKwlyZXR1cm4gKnR4X2NsZWFuZWQgKyAqcnhfY2xlYW5lZDsKK30KKworc3RhdGljIGludCBxbF9wb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgd29ya190b19kbyA9IG1pbigqYnVkZ2V0LCBuZGV2LT5xdW90YSk7CisJaW50IHJ4X2NsZWFuZWQgPSAwLCB0eF9jbGVhbmVkID0gMDsKKworCWlmICghbmV0aWZfY2Fycmllcl9vayhuZGV2KSkKKwkJZ290byBxdWl0X3BvbGxpbmc7CisKKwlxbF90eF9yeF9jbGVhbihxZGV2LCAmdHhfY2xlYW5lZCwgJnJ4X2NsZWFuZWQsIHdvcmtfdG9fZG8pOworCSpidWRnZXQgLT0gcnhfY2xlYW5lZDsKKwluZGV2LT5xdW90YSAtPSByeF9jbGVhbmVkOworCisJaWYgKCghdHhfY2xlYW5lZCAmJiAhcnhfY2xlYW5lZCkgfHwgIW5ldGlmX3J1bm5pbmcobmRldikpIHsKK3F1aXRfcG9sbGluZzoKKwkJbmV0aWZfcnhfY29tcGxldGUobmRldik7CisJCXFsX2VuYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbDN4eHhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9pZDsKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXUzMiB2YWx1ZTsKKwlpbnQgaGFuZGxlZCA9IDE7CisJdTMyIHZhcjsKKworCXBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCisJdmFsdWUgPQorCSAgICBxbF9yZWFkX2NvbW1vbl9yZWdfbChxZGV2LCAmcG9ydF9yZWdzLT5Db21tb25SZWdzLmlzcENvbnRyb2xTdGF0dXMpOworCisJaWYgKHZhbHVlICYgKElTUF9DT05UUk9MX0ZFIHwgSVNQX0NPTlRST0xfUkkpKSB7CisJCXNwaW5fbG9jaygmcWRldi0+YWRhcHRlcl9sb2NrKTsKKwkJbmV0aWZfc3RvcF9xdWV1ZShxZGV2LT5uZGV2KTsKKwkJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CisJCXFsX2Rpc2FibGVfaW50ZXJydXB0cyhxZGV2KTsKKwkJcWRldi0+cG9ydF9saW5rX3N0YXRlID0gTFNfRE9XTjsKKwkJc2V0X2JpdChRTF9SRVNFVF9BQ1RJVkUsJnFkZXYtPmZsYWdzKSA7CisKKwkJaWYgKHZhbHVlICYgSVNQX0NPTlRST0xfRkUpIHsKKwkJCS8qCisJCQkgKiBDaGlwIEZhdGFsIEVycm9yLgorCQkJICovCisJCQl2YXIgPQorCQkJICAgIHFsX3JlYWRfcGFnZTBfcmVnX2wocWRldiwKKwkJCQkJICAgICAgJnBvcnRfcmVncy0+UG9ydEZhdGFsRXJyU3RhdHVzKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCisJCQkgICAgICAgIiVzOiBSZXNldHRpbmcgY2hpcC4gUG9ydEZhdGFsRXJyU3RhdHVzICIKKwkJCSAgICAgICAicmVnaXN0ZXIgPSAweCV4XG4iLCBuZGV2LT5uYW1lLCB2YXIpOworCQkJc2V0X2JpdChRTF9SRVNFVF9TVEFSVCwmcWRldi0+ZmxhZ3MpIDsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBTb2Z0IFJlc2V0IFJlcXVlc3RlZC4KKwkJCSAqLworCQkJc2V0X2JpdChRTF9SRVNFVF9QRVJfU0NTSSwmcWRldi0+ZmxhZ3MpIDsKKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSAgICAgICAiJXM6IEFub3RoZXIgZnVuY3Rpb24gaXNzdWVkIGEgcmVzZXQgdG8gdGhlICIKKwkJCSAgICAgICAiY2hpcC4gSVNSIHZhbHVlID0gJXguXG4iLCBuZGV2LT5uYW1lLCB2YWx1ZSk7CisJCX0KKwkJcXVldWVfd29yayhxZGV2LT53b3JrcXVldWUsICZxZGV2LT5yZXNldF93b3JrKTsKKwkJc3Bpbl91bmxvY2soJnFkZXYtPmFkYXB0ZXJfbG9jayk7CisJfSBlbHNlIGlmICh2YWx1ZSAmIElTUF9JTVJfRElTQUJMRV9DTVBMX0lOVCkgeworCQlxbF9kaXNhYmxlX2ludGVycnVwdHMocWRldik7CisJCWlmIChsaWtlbHkobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChuZGV2KSkpCisJCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5kZXYpOworCQllbHNlCisJCQlxbF9lbmFibGVfaW50ZXJydXB0cyhxZGV2KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gSVJRX05PTkU7CisJfQorCisJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7Cit9CisKK3N0YXRpYyBpbnQgcWwzeHh4X3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbDNfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJc3RydWN0IHFsX3R4X2J1Zl9jYiAqdHhfY2I7CisJc3RydWN0IG9iX21hY19pb2NiX3JlcSAqbWFjX2lvY2JfcHRyOworCXU2NCBtYXA7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJnFkZXYtPnR4X2NvdW50KSA8IDIpKSB7CisJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChuZGV2KSkKKwkJCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisJdHhfY2IgPSAmcWRldi0+dHhfYnVmW3FkZXYtPnJlcV9wcm9kdWNlcl9pbmRleF0gOworCW1hY19pb2NiX3B0ciA9IHR4X2NiLT5xdWV1ZV9lbnRyeTsKKwltZW1zZXQoKHZvaWQgKiltYWNfaW9jYl9wdHIsIDAsIHNpemVvZihzdHJ1Y3Qgb2JfbWFjX2lvY2JfcmVxKSk7CisJbWFjX2lvY2JfcHRyLT5vcGNvZGUgPSBxZGV2LT5tYWNfb2Jfb3Bjb2RlOworCW1hY19pb2NiX3B0ci0+ZmxhZ3MgfD0gcWRldi0+bWJfYml0X21hc2s7CisJbWFjX2lvY2JfcHRyLT50cmFuc2FjdGlvbl9pZCA9IHFkZXYtPnJlcV9wcm9kdWNlcl9pbmRleDsKKwltYWNfaW9jYl9wdHItPmRhdGFfbGVuID0gY3B1X3RvX2xlMTYoKHUxNikgc2tiLT5sZW4pOworCXR4X2NiLT5za2IgPSBza2I7CisJbWFwID0gcGNpX21hcF9zaW5nbGUocWRldi0+cGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJbWFjX2lvY2JfcHRyLT5idWZfYWRkcjBfbG93ID0gY3B1X3RvX2xlMzIoTFNfNjRCSVRTKG1hcCkpOworCW1hY19pb2NiX3B0ci0+YnVmX2FkZHIwX2hpZ2ggPSBjcHVfdG9fbGUzMihNU182NEJJVFMobWFwKSk7CisJbWFjX2lvY2JfcHRyLT5idWZfMF9sZW4gPSBjcHVfdG9fbGUzMihza2ItPmxlbiB8IE9CX01BQ19JT0NCX1JFUV9FKTsKKwlwY2lfdW5tYXBfYWRkcl9zZXQodHhfY2IsIG1hcGFkZHIsIG1hcCk7CisJcGNpX3VubWFwX2xlbl9zZXQodHhfY2IsIG1hcGxlbiwgc2tiLT5sZW4pOworCWF0b21pY19kZWMoJnFkZXYtPnR4X2NvdW50KTsKKworCXFkZXYtPnJlcV9wcm9kdWNlcl9pbmRleCsrOworCWlmIChxZGV2LT5yZXFfcHJvZHVjZXJfaW5kZXggPT0gTlVNX1JFUV9RX0VOVFJJRVMpCisJCXFkZXYtPnJlcV9wcm9kdWNlcl9pbmRleCA9IDA7CisJd21iKCk7CisJcWxfd3JpdGVfY29tbW9uX3JlZ19sKHFkZXYsCisJCQkgICAgKHUzMiAqKSAmIHBvcnRfcmVncy0+Q29tbW9uUmVncy5yZXFRUHJvZHVjZXJJbmRleCwKKwkJCSAgICBxZGV2LT5yZXFfcHJvZHVjZXJfaW5kZXgpOworCisJbmRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKHFkZXYpKQorCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJWQsIGxlbiAlZFxuIiwKKwkJICAgICAgIG5kZXYtPm5hbWUsIHFkZXYtPnJlcV9wcm9kdWNlcl9pbmRleCwgc2tiLT5sZW4pOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKK30KK3N0YXRpYyBpbnQgcWxfYWxsb2NfbmV0X3JlcV9yc3BfcXVldWVzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlxZGV2LT5yZXFfcV9zaXplID0KKwkgICAgKHUzMikgKE5VTV9SRVFfUV9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBvYl9tYWNfaW9jYl9yZXEpKTsKKworCXFkZXYtPnJlcV9xX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkJIChzaXplX3QpIHFkZXYtPnJlcV9xX3NpemUsCisJCQkJICZxZGV2LT5yZXFfcV9waHlfYWRkcik7CisKKwlpZiAoKHFkZXYtPnJlcV9xX3ZpcnRfYWRkciA9PSBOVUxMKSB8fAorCSAgICBMU182NEJJVFMocWRldi0+cmVxX3FfcGh5X2FkZHIpICYgKHFkZXYtPnJlcV9xX3NpemUgLSAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVxUSBmYWlsZWQuXG4iLAorCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXFkZXYtPnJzcF9xX3NpemUgPSBOVU1fUlNQX1FfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgbmV0X3JzcF9pb2NiKTsKKworCXFkZXYtPnJzcF9xX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkJIChzaXplX3QpIHFkZXYtPnJzcF9xX3NpemUsCisJCQkJICZxZGV2LT5yc3BfcV9waHlfYWRkcik7CisKKwlpZiAoKHFkZXYtPnJzcF9xX3ZpcnRfYWRkciA9PSBOVUxMKSB8fAorCSAgICBMU182NEJJVFMocWRldi0+cnNwX3FfcGh5X2FkZHIpICYgKHFkZXYtPnJzcF9xX3NpemUgLSAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICAiJXM6IHJzcFEgYWxsb2NhdGlvbiBmYWlsZWRcbiIsCisJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChxZGV2LT5wZGV2LCAoc2l6ZV90KSBxZGV2LT5yZXFfcV9zaXplLAorCQkJCSAgICBxZGV2LT5yZXFfcV92aXJ0X2FkZHIsCisJCQkJICAgIHFkZXYtPnJlcV9xX3BoeV9hZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJc2V0X2JpdChRTF9BTExPQ19SRVFfUlNQX1FfRE9ORSwmcWRldi0+ZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFsX2ZyZWVfbmV0X3JlcV9yc3BfcXVldWVzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlpZiAoIXRlc3RfYml0KFFMX0FMTE9DX1JFUV9SU1BfUV9ET05FLCZxZGV2LT5mbGFncykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJICAgICAgICIlczogQWxyZWFkeSBkb25lLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkgICAgcWRldi0+cmVxX3Ffc2l6ZSwKKwkJCSAgICBxZGV2LT5yZXFfcV92aXJ0X2FkZHIsIHFkZXYtPnJlcV9xX3BoeV9hZGRyKTsKKworCXFkZXYtPnJlcV9xX3ZpcnRfYWRkciA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkgICAgcWRldi0+cnNwX3Ffc2l6ZSwKKwkJCSAgICBxZGV2LT5yc3BfcV92aXJ0X2FkZHIsIHFkZXYtPnJzcF9xX3BoeV9hZGRyKTsKKworCXFkZXYtPnJzcF9xX3ZpcnRfYWRkciA9IE5VTEw7CisKKwljbGVhcl9iaXQoUUxfQUxMT0NfUkVRX1JTUF9RX0RPTkUsJnFkZXYtPmZsYWdzKTsKK30KKworc3RhdGljIGludCBxbF9hbGxvY19idWZmZXJfcXVldWVzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwkvKiBDcmVhdGUgTGFyZ2UgQnVmZmVyIFF1ZXVlICovCisJcWRldi0+bHJnX2J1Zl9xX3NpemUgPQorCSAgICBOVU1fTEJVRlFfRU5UUklFUyAqIHNpemVvZihzdHJ1Y3QgbHJnX2J1Zl9xX2VudHJ5KTsKKwlpZiAocWRldi0+bHJnX2J1Zl9xX3NpemUgPCBQQUdFX1NJWkUpCisJCXFkZXYtPmxyZ19idWZfcV9hbGxvY19zaXplID0gUEFHRV9TSVpFOworCWVsc2UKKwkJcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3NpemUgPSBxZGV2LT5scmdfYnVmX3Ffc2l6ZSAqIDI7CisKKwlxZGV2LT5scmdfYnVmX3FfYWxsb2NfdmlydF9hZGRyID0KKwkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwKKwkJCQkgcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3NpemUsCisJCQkJICZxZGV2LT5scmdfYnVmX3FfYWxsb2NfcGh5X2FkZHIpOworCisJaWYgKHFkZXYtPmxyZ19idWZfcV9hbGxvY192aXJ0X2FkZHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICAiJXM6IGxCdWZRIGZhaWxlZFxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxZGV2LT5scmdfYnVmX3FfdmlydF9hZGRyID0gcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3ZpcnRfYWRkcjsKKwlxZGV2LT5scmdfYnVmX3FfcGh5X2FkZHIgPSBxZGV2LT5scmdfYnVmX3FfYWxsb2NfcGh5X2FkZHI7CisKKwkvKiBDcmVhdGUgU21hbGwgQnVmZmVyIFF1ZXVlICovCisJcWRldi0+c21hbGxfYnVmX3Ffc2l6ZSA9CisJICAgIE5VTV9TQlVGUV9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCBscmdfYnVmX3FfZW50cnkpOworCWlmIChxZGV2LT5zbWFsbF9idWZfcV9zaXplIDwgUEFHRV9TSVpFKQorCQlxZGV2LT5zbWFsbF9idWZfcV9hbGxvY19zaXplID0gUEFHRV9TSVpFOworCWVsc2UKKwkJcWRldi0+c21hbGxfYnVmX3FfYWxsb2Nfc2l6ZSA9IHFkZXYtPnNtYWxsX2J1Zl9xX3NpemUgKiAyOworCisJcWRldi0+c21hbGxfYnVmX3FfYWxsb2NfdmlydF9hZGRyID0KKwkgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwKKwkJCQkgcWRldi0+c21hbGxfYnVmX3FfYWxsb2Nfc2l6ZSwKKwkJCQkgJnFkZXYtPnNtYWxsX2J1Zl9xX2FsbG9jX3BoeV9hZGRyKTsKKworCWlmIChxZGV2LT5zbWFsbF9idWZfcV9hbGxvY192aXJ0X2FkZHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICAiJXM6IFNtYWxsIEJ1ZmZlciBRdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsCisJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChxZGV2LT5wZGV2LCBxZGV2LT5scmdfYnVmX3FfYWxsb2Nfc2l6ZSwKKwkJCQkgICAgcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3ZpcnRfYWRkciwKKwkJCQkgICAgcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3BoeV9hZGRyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcWRldi0+c21hbGxfYnVmX3FfdmlydF9hZGRyID0gcWRldi0+c21hbGxfYnVmX3FfYWxsb2NfdmlydF9hZGRyOworCXFkZXYtPnNtYWxsX2J1Zl9xX3BoeV9hZGRyID0gcWRldi0+c21hbGxfYnVmX3FfYWxsb2NfcGh5X2FkZHI7CisJc2V0X2JpdChRTF9BTExPQ19CVUZRU19ET05FLCZxZGV2LT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFsX2ZyZWVfYnVmZmVyX3F1ZXVlcyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaWYgKCF0ZXN0X2JpdChRTF9BTExPQ19CVUZRU19ET05FLCZxZGV2LT5mbGFncykpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkJICAgICAgICIlczogQWxyZWFkeSBkb25lLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkgICAgcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3NpemUsCisJCQkgICAgcWRldi0+bHJnX2J1Zl9xX2FsbG9jX3ZpcnRfYWRkciwKKwkJCSAgICBxZGV2LT5scmdfYnVmX3FfYWxsb2NfcGh5X2FkZHIpOworCisJcWRldi0+bHJnX2J1Zl9xX3ZpcnRfYWRkciA9IE5VTEw7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkgICAgcWRldi0+c21hbGxfYnVmX3FfYWxsb2Nfc2l6ZSwKKwkJCSAgICBxZGV2LT5zbWFsbF9idWZfcV9hbGxvY192aXJ0X2FkZHIsCisJCQkgICAgcWRldi0+c21hbGxfYnVmX3FfYWxsb2NfcGh5X2FkZHIpOworCisJcWRldi0+c21hbGxfYnVmX3FfdmlydF9hZGRyID0gTlVMTDsKKworCWNsZWFyX2JpdChRTF9BTExPQ19CVUZRU19ET05FLCZxZGV2LT5mbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgcWxfYWxsb2Nfc21hbGxfYnVmZmVycyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGk7CisJc3RydWN0IGJ1ZnFfYWRkcl9lbGVtZW50ICpzbWFsbF9idWZfcV9lbnRyeTsKKworCS8qIEN1cnJlbnRseSB3ZSBhbGxvY2F0ZSBvbiBvbmUgb2YgbWVtb3J5IGFuZCB1c2UgaXQgZm9yIHNtYWxsYnVmZmVycyAqLworCXFkZXYtPnNtYWxsX2J1Zl90b3RhbF9zaXplID0KKwkgICAgKFFMX0FERFJfRUxFX1BFUl9CVUZRX0VOVFJZICogTlVNX1NCVUZRX0VOVFJJRVMgKgorCSAgICAgUUxfU01BTExfQlVGRkVSX1NJWkUpOworCisJcWRldi0+c21hbGxfYnVmX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkJIHFkZXYtPnNtYWxsX2J1Zl90b3RhbF9zaXplLAorCQkJCSAmcWRldi0+c21hbGxfYnVmX3BoeV9hZGRyKTsKKworCWlmIChxZGV2LT5zbWFsbF9idWZfdmlydF9hZGRyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAgIiVzOiBGYWlsZWQgdG8gZ2V0IHNtYWxsIGJ1ZmZlciBtZW1vcnkuXG4iLAorCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXFkZXYtPnNtYWxsX2J1Zl9waHlfYWRkcl9sb3cgPSBMU182NEJJVFMocWRldi0+c21hbGxfYnVmX3BoeV9hZGRyKTsKKwlxZGV2LT5zbWFsbF9idWZfcGh5X2FkZHJfaGlnaCA9IE1TXzY0QklUUyhxZGV2LT5zbWFsbF9idWZfcGh5X2FkZHIpOworCisJc21hbGxfYnVmX3FfZW50cnkgPSBxZGV2LT5zbWFsbF9idWZfcV92aXJ0X2FkZHI7CisKKwlxZGV2LT5sYXN0X3JzcF9vZmZzZXQgPSBxZGV2LT5zbWFsbF9idWZfcGh5X2FkZHJfbG93OworCisJLyogSW5pdGlhbGl6ZSB0aGUgc21hbGwgYnVmZmVyIHF1ZXVlLiAqLworCWZvciAoaSA9IDA7IGkgPCAoUUxfQUREUl9FTEVfUEVSX0JVRlFfRU5UUlkgKiBOVU1fU0JVRlFfRU5UUklFUyk7IGkrKykgeworCQlzbWFsbF9idWZfcV9lbnRyeS0+YWRkcl9oaWdoID0KKwkJICAgIGNwdV90b19sZTMyKHFkZXYtPnNtYWxsX2J1Zl9waHlfYWRkcl9oaWdoKTsKKwkJc21hbGxfYnVmX3FfZW50cnktPmFkZHJfbG93ID0KKwkJICAgIGNwdV90b19sZTMyKHFkZXYtPnNtYWxsX2J1Zl9waHlfYWRkcl9sb3cgKworCQkJCShpICogUUxfU01BTExfQlVGRkVSX1NJWkUpKTsKKwkJc21hbGxfYnVmX3FfZW50cnkrKzsKKwl9CisJcWRldi0+c21hbGxfYnVmX2luZGV4ID0gMDsKKwlzZXRfYml0KFFMX0FMTE9DX1NNQUxMX0JVRl9ET05FLCZxZGV2LT5mbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFsX2ZyZWVfc21hbGxfYnVmZmVycyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaWYgKCF0ZXN0X2JpdChRTF9BTExPQ19TTUFMTF9CVUZfRE9ORSwmcWRldi0+ZmxhZ3MpKSB7CisJCXByaW50ayhLRVJOX0lORk8gUEZYCisJCSAgICAgICAiJXM6IEFscmVhZHkgZG9uZS5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm47CisJfQorCWlmIChxZGV2LT5zbWFsbF9idWZfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChxZGV2LT5wZGV2LAorCQkJCSAgICBxZGV2LT5zbWFsbF9idWZfdG90YWxfc2l6ZSwKKwkJCQkgICAgcWRldi0+c21hbGxfYnVmX3ZpcnRfYWRkciwKKwkJCQkgICAgcWRldi0+c21hbGxfYnVmX3BoeV9hZGRyKTsKKworCQlxZGV2LT5zbWFsbF9idWZfdmlydF9hZGRyID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2ZyZWVfbGFyZ2VfYnVmZmVycyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaW50IGkgPSAwOworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9MQVJHRV9CVUZGRVJTOyBpKyspIHsKKwkJbHJnX2J1Zl9jYiA9ICZxZGV2LT5scmdfYnVmW2ldOworCQlpZiAobHJnX2J1Zl9jYi0+c2tiKSB7CisJCQlkZXZfa2ZyZWVfc2tiKGxyZ19idWZfY2ItPnNrYik7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHFkZXYtPnBkZXYsCisJCQkJCSBwY2lfdW5tYXBfYWRkcihscmdfYnVmX2NiLCBtYXBhZGRyKSwKKwkJCQkJIHBjaV91bm1hcF9sZW4obHJnX2J1Zl9jYiwgbWFwbGVuKSwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQltZW1zZXQobHJnX2J1Zl9jYiwgMCwgc2l6ZW9mKHN0cnVjdCBxbF9yY3ZfYnVmX2NiKSk7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcWxfaW5pdF9sYXJnZV9idWZmZXJzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcWxfcmN2X2J1Zl9jYiAqbHJnX2J1Zl9jYjsKKwlzdHJ1Y3QgYnVmcV9hZGRyX2VsZW1lbnQgKmJ1Zl9hZGRyX2VsZSA9IHFkZXYtPmxyZ19idWZfcV92aXJ0X2FkZHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0xBUkdFX0JVRkZFUlM7IGkrKykgeworCQlscmdfYnVmX2NiID0gJnFkZXYtPmxyZ19idWZbaV07CisJCWJ1Zl9hZGRyX2VsZS0+YWRkcl9oaWdoID0gbHJnX2J1Zl9jYi0+YnVmX3BoeV9hZGRyX2hpZ2g7CisJCWJ1Zl9hZGRyX2VsZS0+YWRkcl9sb3cgPSBscmdfYnVmX2NiLT5idWZfcGh5X2FkZHJfbG93OworCQlidWZfYWRkcl9lbGUrKzsKKwl9CisJcWRldi0+bHJnX2J1Zl9pbmRleCA9IDA7CisJcWRldi0+bHJnX2J1Zl9za2JfY2hlY2sgPSAwOworfQorCitzdGF0aWMgaW50IHFsX2FsbG9jX2xhcmdlX2J1ZmZlcnMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCWludCBpOworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2NiOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTY0IG1hcDsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fTEFSR0VfQlVGRkVSUzsgaSsrKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2IocWRldi0+bHJnX2J1ZmZlcl9sZW4pOworCQlpZiAodW5saWtlbHkoIXNrYikpIHsKKwkJCS8qIEJldHRlciBsdWNrIG5leHQgcm91bmQgKi8KKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCSAgICAgICAiJXM6IGxhcmdlIGJ1ZmYgYWxsb2MgZmFpbGVkLCAiCisJCQkgICAgICAgImZvciAlZCBieXRlcyBhdCBpbmRleCAlZC5cbiIsCisJCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSwKKwkJCSAgICAgICBxZGV2LT5scmdfYnVmZmVyX2xlbiAqIDIsIGkpOworCQkJcWxfZnJlZV9sYXJnZV9idWZmZXJzKHFkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0gZWxzZSB7CisKKwkJCWxyZ19idWZfY2IgPSAmcWRldi0+bHJnX2J1ZltpXTsKKwkJCW1lbXNldChscmdfYnVmX2NiLCAwLCBzaXplb2Yoc3RydWN0IHFsX3Jjdl9idWZfY2IpKTsKKwkJCWxyZ19idWZfY2ItPmluZGV4ID0gaTsKKwkJCWxyZ19idWZfY2ItPnNrYiA9IHNrYjsKKwkJCS8qCisJCQkgKiBXZSBzYXZlIHNvbWUgc3BhY2UgdG8gY29weSB0aGUgZXRoaGRyIGZyb20gZmlyc3QKKwkJCSAqIGJ1ZmZlcgorCQkJICovCisJCQlza2JfcmVzZXJ2ZShza2IsIFFMX0hFQURFUl9TUEFDRSk7CisJCQltYXAgPSBwY2lfbWFwX3NpbmdsZShxZGV2LT5wZGV2LAorCQkJCQkgICAgIHNrYi0+ZGF0YSwKKwkJCQkJICAgICBxZGV2LT5scmdfYnVmZmVyX2xlbiAtCisJCQkJCSAgICAgUUxfSEVBREVSX1NQQUNFLAorCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlwY2lfdW5tYXBfYWRkcl9zZXQobHJnX2J1Zl9jYiwgbWFwYWRkciwgbWFwKTsKKwkJCXBjaV91bm1hcF9sZW5fc2V0KGxyZ19idWZfY2IsIG1hcGxlbiwKKwkJCQkJICBxZGV2LT5scmdfYnVmZmVyX2xlbiAtCisJCQkJCSAgUUxfSEVBREVSX1NQQUNFKTsKKwkJCWxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9sb3cgPQorCQkJICAgIGNwdV90b19sZTMyKExTXzY0QklUUyhtYXApKTsKKwkJCWxyZ19idWZfY2ItPmJ1Zl9waHlfYWRkcl9oaWdoID0KKwkJCSAgICBjcHVfdG9fbGUzMihNU182NEJJVFMobWFwKSk7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFsX2NyZWF0ZV9zZW5kX2ZyZWVfbGlzdChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHFsX3R4X2J1Zl9jYiAqdHhfY2I7CisJaW50IGk7CisJc3RydWN0IG9iX21hY19pb2NiX3JlcSAqcmVxX3FfY3VyciA9CisJCQkJCXFkZXYtPnJlcV9xX3ZpcnRfYWRkcjsKKworCS8qIENyZWF0ZSBmcmVlIGxpc3Qgb2YgdHJhbnNtaXQgYnVmZmVycyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVRX1FfRU5UUklFUzsgaSsrKSB7CisJCXR4X2NiID0gJnFkZXYtPnR4X2J1ZltpXTsKKwkJdHhfY2ItPnNrYiA9IE5VTEw7CisJCXR4X2NiLT5xdWV1ZV9lbnRyeSA9IHJlcV9xX2N1cnI7CisJCXJlcV9xX2N1cnIrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgcWxfYWxsb2NfbWVtX3Jlc291cmNlcyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJaWYgKHFkZXYtPm5kZXYtPm10dSA9PSBOT1JNQUxfTVRVX1NJWkUpCisJCXFkZXYtPmxyZ19idWZmZXJfbGVuID0gTk9STUFMX01UVV9TSVpFOworCWVsc2UgaWYgKHFkZXYtPm5kZXYtPm10dSA9PSBKVU1CT19NVFVfU0laRSkgeworCQlxZGV2LT5scmdfYnVmZmVyX2xlbiA9IEpVTUJPX01UVV9TSVpFOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlczogSW52YWxpZCBtdHUgc2l6ZS4gIE9ubHkgMTUwMCBhbmQgOTAwMCBhcmUgYWNjZXB0ZWQuXG4iLAorCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlxZGV2LT5scmdfYnVmZmVyX2xlbiArPSBWTEFOX0VUSF9ITEVOICsgVkxBTl9JRF9MRU4gKyBRTF9IRUFERVJfU1BBQ0U7CisJcWRldi0+bWF4X2ZyYW1lX3NpemUgPQorCSAgICAocWRldi0+bHJnX2J1ZmZlcl9sZW4gLSBRTF9IRUFERVJfU1BBQ0UpICsgRVRIRVJORVRfQ1JDX1NJWkU7CisKKwkvKgorCSAqIEZpcnN0IGFsbG9jYXRlIGEgcGFnZSBvZiBzaGFyZWQgbWVtb3J5IGFuZCB1c2UgaXQgZm9yIHNoYWRvdworCSAqIGxvY2F0aW9ucyBvZiBOZXR3b3JrIFJlcXVlc3QgUXVldWUgQ29uc3VtZXIgQWRkcmVzcyBSZWdpc3RlciBhbmQKKwkgKiBOZXR3b3JrIENvbXBsZXRpb24gUXVldWUgUHJvZHVjZXIgSW5kZXggUmVnaXN0ZXIKKwkgKi8KKwlxZGV2LT5zaGFkb3dfcmVnX3ZpcnRfYWRkciA9CisJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkJIFBBR0VfU0laRSwgJnFkZXYtPnNoYWRvd19yZWdfcGh5X2FkZHIpOworCisJaWYgKHFkZXYtPnNoYWRvd19yZWdfdmlydF9hZGRyICE9IE5VTEwpIHsKKwkJcWRldi0+cHJlcV9jb25zdW1lcl9pbmRleCA9ICh1MTYgKikgcWRldi0+c2hhZG93X3JlZ192aXJ0X2FkZHI7CisJCXFkZXYtPnJlcV9jb25zdW1lcl9pbmRleF9waHlfYWRkcl9oaWdoID0KKwkJICAgIE1TXzY0QklUUyhxZGV2LT5zaGFkb3dfcmVnX3BoeV9hZGRyKTsKKwkJcWRldi0+cmVxX2NvbnN1bWVyX2luZGV4X3BoeV9hZGRyX2xvdyA9CisJCSAgICBMU182NEJJVFMocWRldi0+c2hhZG93X3JlZ19waHlfYWRkcik7CisKKwkJcWRldi0+cHJzcF9wcm9kdWNlcl9pbmRleCA9CisJCSAgICAodTMyICopICgoKHU4ICopIHFkZXYtPnByZXFfY29uc3VtZXJfaW5kZXgpICsgOCk7CisJCXFkZXYtPnJzcF9wcm9kdWNlcl9pbmRleF9waHlfYWRkcl9oaWdoID0KKwkJICAgIHFkZXYtPnJlcV9jb25zdW1lcl9pbmRleF9waHlfYWRkcl9oaWdoOworCQlxZGV2LT5yc3BfcHJvZHVjZXJfaW5kZXhfcGh5X2FkZHJfbG93ID0KKwkJICAgIHFkZXYtPnJlcV9jb25zdW1lcl9pbmRleF9waHlfYWRkcl9sb3cgKyA4OworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlczogc2hhZG93UmVnIEFsbG9jIGZhaWxlZC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocWxfYWxsb2NfbmV0X3JlcV9yc3BfcXVldWVzKHFkZXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAgIiVzOiBxbF9hbGxvY19uZXRfcmVxX3JzcF9xdWV1ZXMgZmFpbGVkLlxuIiwKKwkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlnb3RvIGVycl9yZXFfcnNwOworCX0KKworCWlmIChxbF9hbGxvY19idWZmZXJfcXVldWVzKHFkZXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAgIiVzOiBxbF9hbGxvY19idWZmZXJfcXVldWVzIGZhaWxlZC5cbiIsCisJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfYnVmZmVyX3F1ZXVlczsKKwl9CisKKwlpZiAocWxfYWxsb2Nfc21hbGxfYnVmZmVycyhxZGV2KSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlczogcWxfYWxsb2Nfc21hbGxfYnVmZmVycyBmYWlsZWRcbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQlnb3RvIGVycl9zbWFsbF9idWZmZXJzOworCX0KKworCWlmIChxbF9hbGxvY19sYXJnZV9idWZmZXJzKHFkZXYpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAgIiVzOiBxbF9hbGxvY19sYXJnZV9idWZmZXJzIGZhaWxlZFxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCWdvdG8gZXJyX3NtYWxsX2J1ZmZlcnM7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgbGFyZ2UgYnVmZmVyIHF1ZXVlLiAqLworCXFsX2luaXRfbGFyZ2VfYnVmZmVycyhxZGV2KTsKKwlxbF9jcmVhdGVfc2VuZF9mcmVlX2xpc3QocWRldik7CisKKwlxZGV2LT5yc3BfY3VycmVudCA9IHFkZXYtPnJzcF9xX3ZpcnRfYWRkcjsKKworCXJldHVybiAwOworCitlcnJfc21hbGxfYnVmZmVyczoKKwlxbF9mcmVlX2J1ZmZlcl9xdWV1ZXMocWRldik7CitlcnJfYnVmZmVyX3F1ZXVlczoKKwlxbF9mcmVlX25ldF9yZXFfcnNwX3F1ZXVlcyhxZGV2KTsKK2Vycl9yZXFfcnNwOgorCXBjaV9mcmVlX2NvbnNpc3RlbnQocWRldi0+cGRldiwKKwkJCSAgICBQQUdFX1NJWkUsCisJCQkgICAgcWRldi0+c2hhZG93X3JlZ192aXJ0X2FkZHIsCisJCQkgICAgcWRldi0+c2hhZG93X3JlZ19waHlfYWRkcik7CisKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIHZvaWQgcWxfZnJlZV9tZW1fcmVzb3VyY2VzKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlxbF9mcmVlX2xhcmdlX2J1ZmZlcnMocWRldik7CisJcWxfZnJlZV9zbWFsbF9idWZmZXJzKHFkZXYpOworCXFsX2ZyZWVfYnVmZmVyX3F1ZXVlcyhxZGV2KTsKKwlxbF9mcmVlX25ldF9yZXFfcnNwX3F1ZXVlcyhxZGV2KTsKKwlpZiAocWRldi0+c2hhZG93X3JlZ192aXJ0X2FkZHIgIT0gTlVMTCkgeworCQlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsCisJCQkJICAgIFBBR0VfU0laRSwKKwkJCQkgICAgcWRldi0+c2hhZG93X3JlZ192aXJ0X2FkZHIsCisJCQkJICAgIHFkZXYtPnNoYWRvd19yZWdfcGh5X2FkZHIpOworCQlxZGV2LT5zaGFkb3dfcmVnX3ZpcnRfYWRkciA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IHFsX2luaXRfbWlzY19yZWdpc3RlcnMoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfbG9jYWxfcmFtX3JlZ2lzdGVycyAqbG9jYWxfcmFtID0KKwkgICAgKHN0cnVjdCBxbDN4eHhfbG9jYWxfcmFtX3JlZ2lzdGVycyAqKXFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCisJaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX0REUl9SQU1fU0VNX01BU0ssCisJCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCisJCQkgMikgPDwgNCkpCisJCXJldHVybiAtMTsKKworCXFsX3dyaXRlX3BhZ2UyX3JlZyhxZGV2LAorCQkJICAgJmxvY2FsX3JhbS0+YnVmbGV0U2l6ZSwgcWRldi0+bnZyYW1fZGF0YS5idWZsZXRTaXplKTsKKworCXFsX3dyaXRlX3BhZ2UyX3JlZyhxZGV2LAorCQkJICAgJmxvY2FsX3JhbS0+bWF4QnVmbGV0Q291bnQsCisJCQkgICBxZGV2LT5udnJhbV9kYXRhLmJ1ZmxldENvdW50KTsKKworCXFsX3dyaXRlX3BhZ2UyX3JlZyhxZGV2LAorCQkJICAgJmxvY2FsX3JhbS0+ZnJlZUJ1ZmxldFRocmVzaG9sZExvdywKKwkJCSAgIChxZGV2LT5udnJhbV9kYXRhLnRjcFdpbmRvd1RocmVzaG9sZDI1IDw8IDE2KSB8CisJCQkgICAocWRldi0+bnZyYW1fZGF0YS50Y3BXaW5kb3dUaHJlc2hvbGQwKSk7CisKKwlxbF93cml0ZV9wYWdlMl9yZWcocWRldiwKKwkJCSAgICZsb2NhbF9yYW0tPmZyZWVCdWZsZXRUaHJlc2hvbGRIaWdoLAorCQkJICAgcWRldi0+bnZyYW1fZGF0YS50Y3BXaW5kb3dUaHJlc2hvbGQ1MCk7CisKKwlxbF93cml0ZV9wYWdlMl9yZWcocWRldiwKKwkJCSAgICZsb2NhbF9yYW0tPmlwSGFzaFRhYmxlQmFzZSwKKwkJCSAgIChxZGV2LT5udnJhbV9kYXRhLmlwSGFzaFRhYmxlQmFzZUhpIDw8IDE2KSB8CisJCQkgICBxZGV2LT5udnJhbV9kYXRhLmlwSGFzaFRhYmxlQmFzZUxvKTsKKwlxbF93cml0ZV9wYWdlMl9yZWcocWRldiwKKwkJCSAgICZsb2NhbF9yYW0tPmlwSGFzaFRhYmxlQ291bnQsCisJCQkgICBxZGV2LT5udnJhbV9kYXRhLmlwSGFzaFRhYmxlU2l6ZSk7CisJcWxfd3JpdGVfcGFnZTJfcmVnKHFkZXYsCisJCQkgICAmbG9jYWxfcmFtLT50Y3BIYXNoVGFibGVCYXNlLAorCQkJICAgKHFkZXYtPm52cmFtX2RhdGEudGNwSGFzaFRhYmxlQmFzZUhpIDw8IDE2KSB8CisJCQkgICBxZGV2LT5udnJhbV9kYXRhLnRjcEhhc2hUYWJsZUJhc2VMbyk7CisJcWxfd3JpdGVfcGFnZTJfcmVnKHFkZXYsCisJCQkgICAmbG9jYWxfcmFtLT50Y3BIYXNoVGFibGVDb3VudCwKKwkJCSAgIHFkZXYtPm52cmFtX2RhdGEudGNwSGFzaFRhYmxlU2l6ZSk7CisJcWxfd3JpdGVfcGFnZTJfcmVnKHFkZXYsCisJCQkgICAmbG9jYWxfcmFtLT5uY2JCYXNlLAorCQkJICAgKHFkZXYtPm52cmFtX2RhdGEubmNiVGFibGVCYXNlSGkgPDwgMTYpIHwKKwkJCSAgIHFkZXYtPm52cmFtX2RhdGEubmNiVGFibGVCYXNlTG8pOworCXFsX3dyaXRlX3BhZ2UyX3JlZyhxZGV2LAorCQkJICAgJmxvY2FsX3JhbS0+bWF4TmNiQ291bnQsCisJCQkgICBxZGV2LT5udnJhbV9kYXRhLm5jYlRhYmxlU2l6ZSk7CisJcWxfd3JpdGVfcGFnZTJfcmVnKHFkZXYsCisJCQkgICAmbG9jYWxfcmFtLT5kcmJCYXNlLAorCQkJICAgKHFkZXYtPm52cmFtX2RhdGEuZHJiVGFibGVCYXNlSGkgPDwgMTYpIHwKKwkJCSAgIHFkZXYtPm52cmFtX2RhdGEuZHJiVGFibGVCYXNlTG8pOworCXFsX3dyaXRlX3BhZ2UyX3JlZyhxZGV2LAorCQkJICAgJmxvY2FsX3JhbS0+bWF4RHJiQ291bnQsCisJCQkgICBxZGV2LT5udnJhbV9kYXRhLmRyYlRhYmxlU2l6ZSk7CisJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9ERFJfUkFNX1NFTV9NQVNLKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbF9hZGFwdGVyX2luaXRpYWxpemUoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXUzMiB2YWx1ZTsKKwlzdHJ1Y3QgcWwzeHh4X3BvcnRfcmVnaXN0ZXJzIF9faW9tZW0gKnBvcnRfcmVncyA9IHFkZXYtPm1lbV9tYXBfcmVnaXN0ZXJzOworCXN0cnVjdCBxbDN4eHhfaG9zdF9tZW1vcnlfcmVnaXN0ZXJzIF9faW9tZW0gKmhtZW1fcmVncyA9CisJICAgIChzdHJ1Y3QgcWwzeHh4X2hvc3RfbWVtb3J5X3JlZ2lzdGVycyAqKXBvcnRfcmVnczsKKwl1MzIgZGVsYXkgPSAxMDsKKwlpbnQgc3RhdHVzID0gMDsKKworCWlmKHFsX21paV9zZXR1cChxZGV2KSkKKwkJcmV0dXJuIC0xOworCisJLyogQnJpbmcgb3V0IFBIWSBvdXQgb2YgcmVzZXQgKi8KKwlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3Muc2VyaWFsUG9ydEludGVyZmFjZVJlZywKKwkJCSAgICAoSVNQX1NFUklBTF9QT1JUX0lGX1dFIHwKKwkJCSAgICAgKElTUF9TRVJJQUxfUE9SVF9JRl9XRSA8PCAxNikpKTsKKworCXFkZXYtPnBvcnRfbGlua19zdGF0ZSA9IExTX0RPV047CisJbmV0aWZfY2Fycmllcl9vZmYocWRldi0+bmRldik7CisKKwkvKiBWMiBjaGlwIGZpeCBmb3IgQVJTLTM5MTY4LiAqLworCXFsX3dyaXRlX2NvbW1vbl9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5zZXJpYWxQb3J0SW50ZXJmYWNlUmVnLAorCQkJICAgIChJU1BfU0VSSUFMX1BPUlRfSUZfU0RFIHwKKwkJCSAgICAgKElTUF9TRVJJQUxfUE9SVF9JRl9TREUgPDwgMTYpKSk7CisKKwkvKiBSZXF1ZXN0IFF1ZXVlIFJlZ2lzdGVycyAqLworCSooKHUzMiAqKSAocWRldi0+cHJlcV9jb25zdW1lcl9pbmRleCkpID0gMDsKKwlhdG9taWNfc2V0KCZxZGV2LT50eF9jb3VudCxOVU1fUkVRX1FfRU5UUklFUyk7CisJcWRldi0+cmVxX3Byb2R1Y2VyX2luZGV4ID0gMDsKKworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LAorCQkJICAgJmhtZW1fcmVncy0+cmVxQ29uc3VtZXJJbmRleEFkZHJIaWdoLAorCQkJICAgcWRldi0+cmVxX2NvbnN1bWVyX2luZGV4X3BoeV9hZGRyX2hpZ2gpOworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LAorCQkJICAgJmhtZW1fcmVncy0+cmVxQ29uc3VtZXJJbmRleEFkZHJMb3csCisJCQkgICBxZGV2LT5yZXFfY29uc3VtZXJfaW5kZXhfcGh5X2FkZHJfbG93KTsKKworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LAorCQkJICAgJmhtZW1fcmVncy0+cmVxQmFzZUFkZHJIaWdoLAorCQkJICAgTVNfNjRCSVRTKHFkZXYtPnJlcV9xX3BoeV9hZGRyKSk7CisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yZXFCYXNlQWRkckxvdywKKwkJCSAgIExTXzY0QklUUyhxZGV2LT5yZXFfcV9waHlfYWRkcikpOworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LCAmaG1lbV9yZWdzLT5yZXFMZW5ndGgsIE5VTV9SRVFfUV9FTlRSSUVTKTsKKworCS8qIFJlc3BvbnNlIFF1ZXVlIFJlZ2lzdGVycyAqLworCSooKHUxNiAqKSAocWRldi0+cHJzcF9wcm9kdWNlcl9pbmRleCkpID0gMDsKKwlxZGV2LT5yc3BfY29uc3VtZXJfaW5kZXggPSAwOworCXFkZXYtPnJzcF9jdXJyZW50ID0gcWRldi0+cnNwX3FfdmlydF9hZGRyOworCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yc3BQcm9kdWNlckluZGV4QWRkckhpZ2gsCisJCQkgICBxZGV2LT5yc3BfcHJvZHVjZXJfaW5kZXhfcGh5X2FkZHJfaGlnaCk7CisKKwlxbF93cml0ZV9wYWdlMV9yZWcocWRldiwKKwkJCSAgICZobWVtX3JlZ3MtPnJzcFByb2R1Y2VySW5kZXhBZGRyTG93LAorCQkJICAgcWRldi0+cnNwX3Byb2R1Y2VyX2luZGV4X3BoeV9hZGRyX2xvdyk7CisKKwlxbF93cml0ZV9wYWdlMV9yZWcocWRldiwKKwkJCSAgICZobWVtX3JlZ3MtPnJzcEJhc2VBZGRySGlnaCwKKwkJCSAgIE1TXzY0QklUUyhxZGV2LT5yc3BfcV9waHlfYWRkcikpOworCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yc3BCYXNlQWRkckxvdywKKwkJCSAgIExTXzY0QklUUyhxZGV2LT5yc3BfcV9waHlfYWRkcikpOworCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsICZobWVtX3JlZ3MtPnJzcExlbmd0aCwgTlVNX1JTUF9RX0VOVFJJRVMpOworCisJLyogTGFyZ2UgQnVmZmVyIFF1ZXVlICovCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yeExhcmdlUUJhc2VBZGRySGlnaCwKKwkJCSAgIE1TXzY0QklUUyhxZGV2LT5scmdfYnVmX3FfcGh5X2FkZHIpKTsKKworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LAorCQkJICAgJmhtZW1fcmVncy0+cnhMYXJnZVFCYXNlQWRkckxvdywKKwkJCSAgIExTXzY0QklUUyhxZGV2LT5scmdfYnVmX3FfcGh5X2FkZHIpKTsKKworCXFsX3dyaXRlX3BhZ2UxX3JlZyhxZGV2LCAmaG1lbV9yZWdzLT5yeExhcmdlUUxlbmd0aCwgTlVNX0xCVUZRX0VOVFJJRVMpOworCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yeExhcmdlQnVmZmVyTGVuZ3RoLAorCQkJICAgcWRldi0+bHJnX2J1ZmZlcl9sZW4pOworCisJLyogU21hbGwgQnVmZmVyIFF1ZXVlICovCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yeFNtYWxsUUJhc2VBZGRySGlnaCwKKwkJCSAgIE1TXzY0QklUUyhxZGV2LT5zbWFsbF9idWZfcV9waHlfYWRkcikpOworCisJcWxfd3JpdGVfcGFnZTFfcmVnKHFkZXYsCisJCQkgICAmaG1lbV9yZWdzLT5yeFNtYWxsUUJhc2VBZGRyTG93LAorCQkJICAgTFNfNjRCSVRTKHFkZXYtPnNtYWxsX2J1Zl9xX3BoeV9hZGRyKSk7CisKKwlxbF93cml0ZV9wYWdlMV9yZWcocWRldiwgJmhtZW1fcmVncy0+cnhTbWFsbFFMZW5ndGgsIE5VTV9TQlVGUV9FTlRSSUVTKTsKKwlxbF93cml0ZV9wYWdlMV9yZWcocWRldiwKKwkJCSAgICZobWVtX3JlZ3MtPnJ4U21hbGxCdWZmZXJMZW5ndGgsCisJCQkgICBRTF9TTUFMTF9CVUZGRVJfU0laRSk7CisKKwlxZGV2LT5zbWFsbF9idWZfcV9wcm9kdWNlcl9pbmRleCA9IE5VTV9TQlVGUV9FTlRSSUVTIC0gMTsKKwlxZGV2LT5zbWFsbF9idWZfcmVsZWFzZV9jbnQgPSA4OworCXFkZXYtPmxyZ19idWZfcV9wcm9kdWNlcl9pbmRleCA9IE5VTV9MQlVGUV9FTlRSSUVTIC0gMTsKKwlxZGV2LT5scmdfYnVmX3JlbGVhc2VfY250ID0gODsKKwlxZGV2LT5scmdfYnVmX25leHRfZnJlZSA9CisJICAgIChzdHJ1Y3QgYnVmcV9hZGRyX2VsZW1lbnQgKilxZGV2LT5scmdfYnVmX3FfdmlydF9hZGRyOworCXFkZXYtPnNtYWxsX2J1Zl9pbmRleCA9IDA7CisJcWRldi0+bHJnX2J1Zl9pbmRleCA9IDA7CisJcWRldi0+bHJnX2J1Zl9mcmVlX2NvdW50ID0gMDsKKwlxZGV2LT5scmdfYnVmX2ZyZWVfaGVhZCA9IE5VTEw7CisJcWRldi0+bHJnX2J1Zl9mcmVlX3RhaWwgPSBOVUxMOworCisJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJICAgICh1MzIgKikgJiBwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCisJCQkgICAgcnhTbWFsbFFQcm9kdWNlckluZGV4LAorCQkJICAgIHFkZXYtPnNtYWxsX2J1Zl9xX3Byb2R1Y2VyX2luZGV4KTsKKwlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkgICAgKHUzMiAqKSAmIHBvcnRfcmVncy0+Q29tbW9uUmVncy4KKwkJCSAgICByeExhcmdlUVByb2R1Y2VySW5kZXgsCisJCQkgICAgcWRldi0+bHJnX2J1Zl9xX3Byb2R1Y2VyX2luZGV4KTsKKworCS8qCisJICogRmluZCBvdXQgaWYgdGhlIGNoaXAgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC4gIElmIGl0IGhhcywgdGhlbgorCSAqIHdlIHNraXAgc29tZSBvZiB0aGUgaW5pdGlhbGl6YXRpb24uCisJICovCisJY2xlYXJfYml0KFFMX0xJTktfTUFTVEVSLCAmcWRldi0+ZmxhZ3MpOworCXZhbHVlID0gcWxfcmVhZF9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+cG9ydFN0YXR1cyk7CisJaWYgKCh2YWx1ZSAmIFBPUlRfU1RBVFVTX0lDKSA9PSAwKSB7CisKKwkJLyogQ2hpcCBoYXMgbm90IGJlZW4gY29uZmlndXJlZCB5ZXQsIHNvIGxldCBpdCByaXAuICovCisJCWlmKHFsX2luaXRfbWlzY19yZWdpc3RlcnMocWRldikpIHsKKwkJCXN0YXR1cyA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAocWRldi0+bWFjX2luZGV4KQorCQkJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsCisJCQkJCSAgICZwb3J0X3JlZ3MtPm1hYzFNYXhGcmFtZUxlbmd0aFJlZywKKwkJCQkJICAgcWRldi0+bWF4X2ZyYW1lX3NpemUpOworCQllbHNlCisJCQlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwKKwkJCQkJICAgJnBvcnRfcmVncy0+bWFjME1heEZyYW1lTGVuZ3RoUmVnLAorCQkJCQkgICBxZGV2LT5tYXhfZnJhbWVfc2l6ZSk7CisKKwkJdmFsdWUgPSBxZGV2LT5udnJhbV9kYXRhLnRjcE1heFdpbmRvd1NpemU7CisJCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT50Y3BNYXhXaW5kb3csIHZhbHVlKTsKKworCQl2YWx1ZSA9ICgweEZGRkYgPDwgMTYpIHwgcWRldi0+bnZyYW1fZGF0YS5leHRId0NvbmZpZzsKKworCQlpZihxbF9zZW1fc3BpbmxvY2socWRldiwgUUxfRkxBU0hfU0VNX01BU0ssCisJCQkJKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIHwgKHFkZXYtPm1hY19pbmRleCkKKwkJCQkgKiAyKSA8PCAxMykpIHsKKwkJCXN0YXR1cyA9IC0xOworCQkJZ290byBvdXQ7CisJCX0KKwkJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkV4dGVybmFsSFdDb25maWcsIHZhbHVlKTsKKwkJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPkludGVybmFsQ2hpcENvbmZpZywKKwkJCQkgICAoKChJTlRFUk5BTF9DSElQX1NEIHwgSU5URVJOQUxfQ0hJUF9XRSkgPDwKKwkJCQkgICAgIDE2KSB8IChJTlRFUk5BTF9DSElQX1NEIHwKKwkJCQkJICAgIElOVEVSTkFMX0NISVBfV0UpKSk7CisJCXFsX3NlbV91bmxvY2socWRldiwgUUxfRkxBU0hfU0VNX01BU0spOworCX0KKworCisJaWYocWxfc2VtX3NwaW5sb2NrKHFkZXYsIFFMX1BIWV9HSU9fU0VNX01BU0ssCisJCQkoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgfCAocWRldi0+bWFjX2luZGV4KSAqCisJCQkgMikgPDwgNykpIHsKKwkJc3RhdHVzID0gLTE7CisJCWdvdG8gb3V0OworCX0KKworCXFsX2luaXRfc2Nhbl9tb2RlKHFkZXYpOworCXFsX2dldF9waHlfb3duZXIocWRldik7CisKKwkvKiBMb2FkIHRoZSBNQUMgQ29uZmlndXJhdGlvbiAqLworCisJLyogUHJvZ3JhbSBsb3dlciAzMiBiaXRzIG9mIHRoZSBNQUMgYWRkcmVzcyAqLworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNBZGRySW5kaXJlY3RQdHJSZWcsCisJCQkgICAoTUFDX0FERFJfSU5ESVJFQ1RfUFRSX1JFR19SUF9NQVNLIDw8IDE2KSk7CisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY0FkZHJEYXRhUmVnLAorCQkJICAgKChxZGV2LT5uZGV2LT5kZXZfYWRkclsyXSA8PCAyNCkKKwkJCSAgICB8IChxZGV2LT5uZGV2LT5kZXZfYWRkclszXSA8PCAxNikKKwkJCSAgICB8IChxZGV2LT5uZGV2LT5kZXZfYWRkcls0XSA8PCA4KQorCQkJICAgIHwgcWRldi0+bmRldi0+ZGV2X2FkZHJbNV0pKTsKKworCS8qIFByb2dyYW0gdG9wIDE2IGJpdHMgb2YgdGhlIE1BQyBhZGRyZXNzICovCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY0FkZHJJbmRpcmVjdFB0clJlZywKKwkJCSAgICgoTUFDX0FERFJfSU5ESVJFQ1RfUFRSX1JFR19SUF9NQVNLIDw8IDE2KSB8IDEpKTsKKwlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjQWRkckRhdGFSZWcsCisJCQkgICAoKHFkZXYtPm5kZXYtPmRldl9hZGRyWzBdIDw8IDgpCisJCQkgICAgfCBxZGV2LT5uZGV2LT5kZXZfYWRkclsxXSkpOworCisJLyogRW5hYmxlIFByaW1hcnkgTUFDICovCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY0FkZHJJbmRpcmVjdFB0clJlZywKKwkJCSAgICgoTUFDX0FERFJfSU5ESVJFQ1RfUFRSX1JFR19QRSA8PCAxNikgfAorCQkJICAgIE1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfUEUpKTsKKworCS8qIENsZWFyIFByaW1hcnkgYW5kIFNlY29uZGFyeSBJUCBhZGRyZXNzZXMgKi8KKwlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+aXBBZGRySW5kZXhSZWcsCisJCQkgICAoKElQX0FERFJfSU5ERVhfUkVHX01BU0sgPDwgMTYpIHwKKwkJCSAgICAocWRldi0+bWFjX2luZGV4IDw8IDIpKSk7CisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPmlwQWRkckRhdGFSZWcsIDApOworCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPmlwQWRkckluZGV4UmVnLAorCQkJICAgKChJUF9BRERSX0lOREVYX1JFR19NQVNLIDw8IDE2KSB8CisJCQkgICAgKChxZGV2LT5tYWNfaW5kZXggPDwgMikgKyAxKSkpOworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5pcEFkZHJEYXRhUmVnLCAwKTsKKworCXFsX3NlbV91bmxvY2socWRldiwgUUxfUEhZX0dJT19TRU1fTUFTSyk7CisKKwkvKiBJbmRpY2F0ZSBDb25maWd1cmF0aW9uIENvbXBsZXRlICovCisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsCisJCQkgICAmcG9ydF9yZWdzLT5wb3J0Q29udHJvbCwKKwkJCSAgICgoUE9SVF9DT05UUk9MX0NDIDw8IDE2KSB8IFBPUlRfQ09OVFJPTF9DQykpOworCisJZG8geworCQl2YWx1ZSA9IHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPnBvcnRTdGF0dXMpOworCQlpZiAodmFsdWUgJiBQT1JUX1NUQVRVU19JQykKKwkJCWJyZWFrOworCQltc2xlZXAoNTAwKTsKKwl9IHdoaWxlICgtLWRlbGF5KTsKKworCWlmIChkZWxheSA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlczogSHcgSW5pdGlhbGl6YXRpb24gdGltZW91dC5cbiIsIHFkZXYtPm5kZXYtPm5hbWUpOworCQlzdGF0dXMgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRW5hYmxlIEV0aGVybmV0IEZ1bmN0aW9uICovCisJdmFsdWUgPQorCSAgICAoUE9SVF9DT05UUk9MX0VGIHwgUE9SVF9DT05UUk9MX0VUIHwgUE9SVF9DT05UUk9MX0VJIHwKKwkgICAgIFBPUlRfQ09OVFJPTF9ISCk7CisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPnBvcnRDb250cm9sLAorCQkJICAgKCh2YWx1ZSA8PCAxNikgfCB2YWx1ZSkpOworCitvdXQ6CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIENhbGxlciBob2xkcyBod19sb2NrLgorICovCitzdGF0aWMgaW50IHFsX2FkYXB0ZXJfcmVzZXQoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJaW50IHN0YXR1cyA9IDA7CisJdTE2IHZhbHVlOworCWludCBtYXhfd2FpdF90aW1lOworCisJc2V0X2JpdChRTF9SRVNFVF9BQ1RJVkUsICZxZGV2LT5mbGFncyk7CisJY2xlYXJfYml0KFFMX1JFU0VUX0RPTkUsICZxZGV2LT5mbGFncyk7CisKKwkvKgorCSAqIElzc3VlIHNvZnQgcmVzZXQgdG8gY2hpcC4KKwkgKi8KKwlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkgICAgICAgIiVzOiBJc3N1ZSBzb2Z0IHJlc2V0IHRvIGNoaXAuXG4iLAorCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkgICAgKHUzMiAqKSAmIHBvcnRfcmVncy0+Q29tbW9uUmVncy5pc3BDb250cm9sU3RhdHVzLAorCQkJICAgICgoSVNQX0NPTlRST0xfU1IgPDwgMTYpIHwgSVNQX0NPTlRST0xfU1IpKTsKKworCS8qIFdhaXQgMyBzZWNvbmRzIGZvciByZXNldCB0byBjb21wbGV0ZS4gKi8KKwlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkgICAgICAgIiVzOiBXYWl0IDEwIG1pbGxpc2Vjb25kcyBmb3IgcmVzZXQgdG8gY29tcGxldGUuXG4iLAorCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIGZpcm13YXJlIHRlbGxzIHVzIHRoZSBTb2Z0IFJlc2V0IGlzIGRvbmUgKi8KKwltYXhfd2FpdF90aW1lID0gNTsKKwlkbyB7CisJCXZhbHVlID0KKwkJICAgIHFsX3JlYWRfY29tbW9uX3JlZyhxZGV2LAorCQkJCSAgICAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLmlzcENvbnRyb2xTdGF0dXMpOworCQlpZiAoKHZhbHVlICYgSVNQX0NPTlRST0xfU1IpID09IDApCisJCQlicmVhazsKKworCQlzc2xlZXAoMSk7CisJfSB3aGlsZSAoKC0tbWF4X3dhaXRfdGltZSkpOworCisJLyoKKwkgKiBBbHNvLCBtYWtlIHN1cmUgdGhhdCB0aGUgTmV0d29yayBSZXNldCBJbnRlcnJ1cHQgYml0IGhhcyBiZWVuCisJICogY2xlYXJlZCBhZnRlciB0aGUgc29mdCByZXNldCBoYXMgdGFrZW4gcGxhY2UuCisJICovCisJdmFsdWUgPQorCSAgICBxbF9yZWFkX2NvbW1vbl9yZWcocWRldiwgJnBvcnRfcmVncy0+Q29tbW9uUmVncy5pc3BDb250cm9sU3RhdHVzKTsKKwlpZiAodmFsdWUgJiBJU1BfQ09OVFJPTF9SSSkgeworCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJICAgICAgICJxbF9hZGFwdGVyX3Jlc2V0OiBjbGVhcmluZyBSSSBhZnRlciByZXNldC5cbiIpOworCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJICAgICh1MzIgKikgJiBwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuCisJCQkJICAgIGlzcENvbnRyb2xTdGF0dXMsCisJCQkJICAgICgoSVNQX0NPTlRST0xfUkkgPDwgMTYpIHwgSVNQX0NPTlRST0xfUkkpKTsKKwl9CisKKwlpZiAobWF4X3dhaXRfdGltZSA9PSAwKSB7CisJCS8qIElzc3VlIEZvcmNlIFNvZnQgUmVzZXQgKi8KKwkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJCSAgICAodTMyICopICYgcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCSAgICBpc3BDb250cm9sU3RhdHVzLAorCQkJCSAgICAoKElTUF9DT05UUk9MX0ZTUiA8PCAxNikgfAorCQkJCSAgICAgSVNQX0NPTlRST0xfRlNSKSk7CisJCS8qCisJCSAqIFdhaXQgdW50aWwgdGhlIGZpcm13YXJlIHRlbGxzIHVzIHRoZSBGb3JjZSBTb2Z0IFJlc2V0IGlzCisJCSAqIGRvbmUKKwkJICovCisJCW1heF93YWl0X3RpbWUgPSA1OworCQlkbyB7CisJCQl2YWx1ZSA9CisJCQkgICAgcWxfcmVhZF9jb21tb25fcmVnKHFkZXYsCisJCQkJCSAgICAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCQkgICAgICAgaXNwQ29udHJvbFN0YXR1cyk7CisJCQlpZiAoKHZhbHVlICYgSVNQX0NPTlRST0xfRlNSKSA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzc2xlZXAoMSk7CisJCX0gd2hpbGUgKCgtLW1heF93YWl0X3RpbWUpKTsKKwl9CisJaWYgKG1heF93YWl0X3RpbWUgPT0gMCkKKwkJc3RhdHVzID0gMTsKKworCWNsZWFyX2JpdChRTF9SRVNFVF9BQ1RJVkUsICZxZGV2LT5mbGFncyk7CisJc2V0X2JpdChRTF9SRVNFVF9ET05FLCAmcWRldi0+ZmxhZ3MpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHFsX3NldF9tYWNfaW5mbyhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJc3RydWN0IHFsM3h4eF9wb3J0X3JlZ2lzdGVycyBfX2lvbWVtICpwb3J0X3JlZ3MgPSBxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwl1MzIgdmFsdWUsIHBvcnRfc3RhdHVzOworCXU4IGZ1bmNfbnVtYmVyOworCisJLyogR2V0IHRoZSBmdW5jdGlvbiBudW1iZXIgKi8KKwl2YWx1ZSA9CisJICAgIHFsX3JlYWRfY29tbW9uX3JlZ19sKHFkZXYsICZwb3J0X3JlZ3MtPkNvbW1vblJlZ3MuaXNwQ29udHJvbFN0YXR1cyk7CisJZnVuY19udW1iZXIgPSAodTgpICgodmFsdWUgPj4gNCkgJiBPUENPREVfRlVOQ19JRF9NQVNLKTsKKwlwb3J0X3N0YXR1cyA9IHFsX3JlYWRfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPnBvcnRTdGF0dXMpOworCXN3aXRjaCAodmFsdWUgJiBJU1BfQ09OVFJPTF9GTl9NQVNLKSB7CisJY2FzZSBJU1BfQ09OVFJPTF9GTjBfTkVUOgorCQlxZGV2LT5tYWNfaW5kZXggPSAwOworCQlxZGV2LT5tYWNfb2Jfb3Bjb2RlID0gT1VUQk9VTkRfTUFDX0lPQ0IgfCBmdW5jX251bWJlcjsKKwkJcWRldi0+dGNwX29iX29wY29kZSA9IE9VVEJPVU5EX1RDUF9JT0NCIHwgZnVuY19udW1iZXI7CisJCXFkZXYtPnVwZGF0ZV9vYl9vcGNvZGUgPSBVUERBVEVfTkNCX0lPQ0IgfCBmdW5jX251bWJlcjsKKwkJcWRldi0+bWJfYml0X21hc2sgPSBGTjBfTUFfQklUU19NQVNLOworCQlxZGV2LT5QSFlBZGRyID0gUE9SVDBfUEhZX0FERFJFU1M7CisJCWlmIChwb3J0X3N0YXR1cyAmIFBPUlRfU1RBVFVTX1NNMCkKKwkJCXNldF9iaXQoUUxfTElOS19PUFRJQ0FMLCZxZGV2LT5mbGFncyk7CisJCWVsc2UKKwkJCWNsZWFyX2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKTsKKwkJYnJlYWs7CisKKwljYXNlIElTUF9DT05UUk9MX0ZOMV9ORVQ6CisJCXFkZXYtPm1hY19pbmRleCA9IDE7CisJCXFkZXYtPm1hY19vYl9vcGNvZGUgPSBPVVRCT1VORF9NQUNfSU9DQiB8IGZ1bmNfbnVtYmVyOworCQlxZGV2LT50Y3Bfb2Jfb3Bjb2RlID0gT1VUQk9VTkRfVENQX0lPQ0IgfCBmdW5jX251bWJlcjsKKwkJcWRldi0+dXBkYXRlX29iX29wY29kZSA9IFVQREFURV9OQ0JfSU9DQiB8IGZ1bmNfbnVtYmVyOworCQlxZGV2LT5tYl9iaXRfbWFzayA9IEZOMV9NQV9CSVRTX01BU0s7CisJCXFkZXYtPlBIWUFkZHIgPSBQT1JUMV9QSFlfQUREUkVTUzsKKwkJaWYgKHBvcnRfc3RhdHVzICYgUE9SVF9TVEFUVVNfU00xKQorCQkJc2V0X2JpdChRTF9MSU5LX09QVElDQUwsJnFkZXYtPmZsYWdzKTsKKwkJZWxzZQorCQkJY2xlYXJfYml0KFFMX0xJTktfT1BUSUNBTCwmcWRldi0+ZmxhZ3MpOworCQlicmVhazsKKworCWNhc2UgSVNQX0NPTlRST0xfRk4wX1NDU0k6CisJY2FzZSBJU1BfQ09OVFJPTF9GTjFfU0NTSToKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJICAgICAgICIlczogSW52YWxpZCBmdW5jdGlvbiBudW1iZXIsIGlzcENvbnRyb2xTdGF0dXMgPSAweCV4XG4iLAorCQkgICAgICAgcWRldi0+bmRldi0+bmFtZSx2YWx1ZSk7CisJCWJyZWFrOworCX0KKwlxZGV2LT5udW1Qb3J0cyA9IHFkZXYtPm52cmFtX2RhdGEubnVtUG9ydHM7Cit9CisKK3N0YXRpYyB2b2lkIHFsX2Rpc3BsYXlfZGV2X2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbDNfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcWRldi0+cGRldjsKKworCXByaW50ayhLRVJOX0lORk8gUEZYCisJICAgICAgICJcbiVzIEFkYXB0ZXIgJWQgUmV2aXNpb25JRCAlZCBmb3VuZCBvbiBQQ0kgc2xvdCAlZC5cbiIsCisJICAgICAgIERSVl9OQU1FLCBxZGV2LT5pbmRleCwgcWRldi0+Y2hpcF9yZXZfaWQsIHFkZXYtPnBjaV9zbG90KTsKKwlwcmludGsoS0VSTl9JTkZPIFBGWAorCSAgICAgICAiJXMgSW50ZXJmYWNlLlxuIiwKKwkgICAgICAgdGVzdF9iaXQoUUxfTElOS19PUFRJQ0FMLCZxZGV2LT5mbGFncykgPyAiT1BUSUNBTCIgOiAiQ09QUEVSIik7CisKKwkvKgorCSAqIFByaW50IFBDSSBidXMgd2lkdGgvdHlwZS4KKwkgKi8KKwlwcmludGsoS0VSTl9JTkZPIFBGWAorCSAgICAgICAiQnVzIGludGVyZmFjZSBpcyAlcyAlcy5cbiIsCisJICAgICAgICgocWRldi0+cGNpX3dpZHRoID09IDY0KSA/ICI2NC1iaXQiIDogIjMyLWJpdCIpLAorCSAgICAgICAoKHFkZXYtPnBjaV94KSA/ICJQQ0ktWCIgOiAiUENJIikpOworCisJcHJpbnRrKEtFUk5fSU5GTyBQRlgKKwkgICAgICAgIm1lbSAgSU8gYmFzZSBhZGRyZXNzIGFkanVzdGVkID0gMHglcFxuIiwKKwkgICAgICAgcWRldi0+bWVtX21hcF9yZWdpc3RlcnMpOworCXByaW50ayhLRVJOX0lORk8gUEZYICJJbnRlcnJ1cHQgbnVtYmVyID0gJWRcbiIsIHBkZXYtPmlycSk7CisKKwlpZiAobmV0aWZfbXNnX3Byb2JlKHFkZXYpKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkgICAgICAgIiVzOiBNQUMgYWRkcmVzcyAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKKwkJICAgICAgIG5kZXYtPm5hbWUsIG5kZXYtPmRldl9hZGRyWzBdLCBuZGV2LT5kZXZfYWRkclsxXSwKKwkJICAgICAgIG5kZXYtPmRldl9hZGRyWzJdLCBuZGV2LT5kZXZfYWRkclszXSwgbmRldi0+ZGV2X2FkZHJbNF0sCisJCSAgICAgICBuZGV2LT5kZXZfYWRkcls1XSk7Cit9CisKK3N0YXRpYyBpbnQgcWxfYWRhcHRlcl9kb3duKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiwgaW50IGRvX3Jlc2V0KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKKwlpbnQgcmV0dmFsID0gMDsKKworCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisKKwljbGVhcl9iaXQoUUxfQURBUFRFUl9VUCwmcWRldi0+ZmxhZ3MpOworCWNsZWFyX2JpdChRTF9MSU5LX01BU1RFUiwmcWRldi0+ZmxhZ3MpOworCisJcWxfZGlzYWJsZV9pbnRlcnJ1cHRzKHFkZXYpOworCisJZnJlZV9pcnEocWRldi0+cGRldi0+aXJxLCBuZGV2KTsKKworCWlmIChxZGV2LT5tc2kgJiYgdGVzdF9iaXQoUUxfTVNJX0VOQUJMRUQsJnFkZXYtPmZsYWdzKSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkgICAgICAgIiVzOiBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaSgpLlxuIiwgcWRldi0+bmRldi0+bmFtZSk7CisJCWNsZWFyX2JpdChRTF9NU0lfRU5BQkxFRCwmcWRldi0+ZmxhZ3MpOworCQlwY2lfZGlzYWJsZV9tc2kocWRldi0+cGRldik7CisJfQorCisJZGVsX3RpbWVyX3N5bmMoJnFkZXYtPmFkYXB0ZXJfdGltZXIpOworCisJbmV0aWZfcG9sbF9kaXNhYmxlKG5kZXYpOworCisJaWYgKGRvX3Jlc2V0KSB7CisJCWludCBzb2Z0X3Jlc2V0OworCQl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisJCWlmIChxbF93YWl0X2Zvcl9kcnZyX2xvY2socWRldikpIHsKKwkJCWlmICgoc29mdF9yZXNldCA9IHFsX2FkYXB0ZXJfcmVzZXQocWRldikpKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJCSAgICAgICAiJXM6IHFsX2FkYXB0ZXJfcmVzZXQoJWQpIEZBSUxFRCFcbiIsCisJCQkJICAgICAgIG5kZXYtPm5hbWUsIHFkZXYtPmluZGV4KTsKKwkJCX0KKwkJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiJXM6IFJlbGVhc2VpbmcgZHJpdmVyIGxvY2sgdmlhIGNoaXAgcmVzZXQuXG4iLG5kZXYtPm5hbWUpOworCQl9IGVsc2UgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogQ291bGQgbm90IGFjcXVpcmUgZHJpdmVyIGxvY2sgdG8gZG8gIgorCQkJICAgICAgICJyZXNldCFcbiIsIG5kZXYtPm5hbWUpOworCQkJcmV0dmFsID0gLTE7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCX0KKwlxbF9mcmVlX21lbV9yZXNvdXJjZXMocWRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBxbF9hZGFwdGVyX3VwKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CisJaW50IGVycjsKKwl1bnNpZ25lZCBsb25nIGlycV9mbGFncyA9IFNBX1NBTVBMRV9SQU5ET00gfCBTQV9TSElSUTsKKwl1bnNpZ25lZCBsb25nIGh3X2ZsYWdzOworCisJaWYgKHFsX2FsbG9jX21lbV9yZXNvdXJjZXMocWRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAgIiVzIFVuYWJsZSB0byAgYWxsb2NhdGUgYnVmZmVycy5cbiIsIG5kZXYtPm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpZiAocWRldi0+bXNpKSB7CisJCWlmIChwY2lfZW5hYmxlX21zaShxZGV2LT5wZGV2KSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogVXNlciByZXF1ZXN0ZWQgTVNJLCBidXQgTVNJIGZhaWxlZCB0byAiCisJCQkgICAgICAgImluaXRpYWxpemUuICBDb250aW51aW5nIHdpdGhvdXQgTVNJLlxuIiwKKwkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXFkZXYtPm1zaSA9IDA7CisJCX0gZWxzZSB7CisJCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IE1TSSBFbmFibGVkLi4uXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCXNldF9iaXQoUUxfTVNJX0VOQUJMRUQsJnFkZXYtPmZsYWdzKTsKKwkJCWlycV9mbGFncyAmPSB+U0FfU0hJUlE7CisJCX0KKwl9CisKKwlpZiAoKGVyciA9IHJlcXVlc3RfaXJxKHFkZXYtPnBkZXYtPmlycSwKKwkJCSAgICAgICBxbDN4eHhfaXNyLAorCQkJICAgICAgIGlycV9mbGFncywgbmRldi0+bmFtZSwgbmRldikpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlczogRmFpbGVkIHRvIHJlc2VydmUgaW50ZXJydXB0ICVkIGFscmVhZHkgaW4gdXNlLlxuIiwKKwkJICAgICAgIG5kZXYtPm5hbWUsIHFkZXYtPnBkZXYtPmlycSk7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCisJaWYgKChlcnIgPSBxbF93YWl0X2Zvcl9kcnZyX2xvY2socWRldikpKSB7CisJCWlmICgoZXJyID0gcWxfYWRhcHRlcl9pbml0aWFsaXplKHFkZXYpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogVW5hYmxlIHRvIGluaXRpYWxpemUgYWRhcHRlci5cbiIsCisJCQkgICAgICAgbmRldi0+bmFtZSk7CisJCQlnb3RvIGVycl9pbml0OworCQl9CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiJXM6IFJlbGVhc2VpbmcgZHJpdmVyIGxvY2suXG4iLG5kZXYtPm5hbWUpOworCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFFMX0RSVlJfU0VNX01BU0spOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJICAgICAgICIlczogQ291bGQgbm90IGFxdWlyZSBkcml2ZXIgbG9jay5cbiIsCisJCSAgICAgICBuZGV2LT5uYW1lKTsKKwkJZ290byBlcnJfbG9jazsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisKKwlzZXRfYml0KFFMX0FEQVBURVJfVVAsJnFkZXYtPmZsYWdzKTsKKworCW1vZF90aW1lcigmcWRldi0+YWRhcHRlcl90aW1lciwgamlmZmllcyArIEhaICogMSk7CisKKwluZXRpZl9wb2xsX2VuYWJsZShuZGV2KTsKKwlxbF9lbmFibGVfaW50ZXJydXB0cyhxZGV2KTsKKwlyZXR1cm4gMDsKKworZXJyX2luaXQ6CisJcWxfc2VtX3VubG9jayhxZGV2LCBRTF9EUlZSX1NFTV9NQVNLKTsKK2Vycl9sb2NrOgorCWZyZWVfaXJxKHFkZXYtPnBkZXYtPmlycSwgbmRldik7CitlcnJfaXJxOgorCWlmIChxZGV2LT5tc2kgJiYgdGVzdF9iaXQoUUxfTVNJX0VOQUJMRUQsJnFkZXYtPmZsYWdzKSkgeworCQlwcmludGsoS0VSTl9JTkZPIFBGWAorCQkgICAgICAgIiVzOiBjYWxsaW5nIHBjaV9kaXNhYmxlX21zaSgpLlxuIiwKKwkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQljbGVhcl9iaXQoUUxfTVNJX0VOQUJMRUQsJnFkZXYtPmZsYWdzKTsKKwkJcGNpX2Rpc2FibGVfbXNpKHFkZXYtPnBkZXYpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHFsX2N5Y2xlX2FkYXB0ZXIoc3RydWN0IHFsM19hZGFwdGVyICpxZGV2LCBpbnQgcmVzZXQpCit7CisJaWYoIHFsX2FkYXB0ZXJfZG93bihxZGV2LHJlc2V0KSB8fCBxbF9hZGFwdGVyX3VwKHFkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlgKKwkJCQkiJXM6IERyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgIgorCQkJCSJjbG9zaW5nIGRldmljZVxuIixxZGV2LT5uZGV2LT5uYW1lKTsKKwkJZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHFsM3h4eF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCS8qCisJICogV2FpdCBmb3IgZGV2aWNlIHRvIHJlY292ZXIgZnJvbSBhIHJlc2V0LgorCSAqIChSYXJlbHkgaGFwcGVucywgYnV0IHBvc3NpYmxlLikKKwkgKi8KKwl3aGlsZSAoIXRlc3RfYml0KFFMX0FEQVBURVJfVVAsJnFkZXYtPmZsYWdzKSkKKwkJbXNsZWVwKDUwKTsKKworCXFsX2FkYXB0ZXJfZG93bihxZGV2LFFMX0RPX1JFU0VUKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbDN4eHhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlyZXR1cm4gKHFsX2FkYXB0ZXJfdXAocWRldikpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnFsM3h4eF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYgPSAoc3RydWN0IHFsM19hZGFwdGVyICopZGV2LT5wcml2OworCXJldHVybiAmcWRldi0+c3RhdHM7Cit9CisKK3N0YXRpYyBpbnQgcWwzeHh4X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOworCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAgbmV3IG10dSBzaXplID0gJWQuXG4iLCBuZGV2LT5uYW1lLCBuZXdfbXR1KTsKKwlpZiAobmV3X210dSAhPSBOT1JNQUxfTVRVX1NJWkUgJiYgbmV3X210dSAhPSBKVU1CT19NVFVfU0laRSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCSAgICAgICAiJXM6IG10dSBzaXplIG9mICVkIGlzIG5vdCB2YWxpZC4gIFVzZSBleGFjdGx5ICVkIG9yICIKKwkJICAgICAgICIlZC5cbiIsIG5kZXYtPm5hbWUsIG5ld19tdHUsIE5PUk1BTF9NVFVfU0laRSwKKwkJICAgICAgIEpVTUJPX01UVV9TSVpFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCW5kZXYtPm10dSA9IG5ld19tdHU7CisJCXJldHVybiAwOworCX0KKworCW5kZXYtPm10dSA9IG5ld19tdHU7CisJcmV0dXJuIHFsX2N5Y2xlX2FkYXB0ZXIocWRldixRTF9ET19SRVNFVCk7Cit9CisKK3N0YXRpYyB2b2lkIHFsM3h4eF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJLyoKKwkgKiBXZSBhcmUgbWFudWFsbHkgcGFyc2luZyB0aGUgbGlzdCBpbiB0aGUgbmV0X2RldmljZSBzdHJ1Y3R1cmUuCisJICovCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHFsM3h4eF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gKHN0cnVjdCBxbDNfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0KKwkgICAgCQlxZGV2LT5tZW1fbWFwX3JlZ2lzdGVyczsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCXVuc2lnbmVkIGxvbmcgaHdfZmxhZ3M7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihhZGRyLT5zYV9kYXRhKSkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZGV2LT5hZGRyX2xlbik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCS8qIFByb2dyYW0gbG93ZXIgMzIgYml0cyBvZiB0aGUgTUFDIGFkZHJlc3MgKi8KKwlxbF93cml0ZV9wYWdlMF9yZWcocWRldiwgJnBvcnRfcmVncy0+bWFjQWRkckluZGlyZWN0UHRyUmVnLAorCQkJICAgKE1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfUlBfTUFTSyA8PCAxNikpOworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNBZGRyRGF0YVJlZywKKwkJCSAgICgobmRldi0+ZGV2X2FkZHJbMl0gPDwgMjQpIHwgKG5kZXYtPgorCQkJCQkJCSBkZXZfYWRkclszXSA8PCAxNikgfAorCQkJICAgIChuZGV2LT5kZXZfYWRkcls0XSA8PCA4KSB8IG5kZXYtPmRldl9hZGRyWzVdKSk7CisKKwkvKiBQcm9ncmFtIHRvcCAxNiBiaXRzIG9mIHRoZSBNQUMgYWRkcmVzcyAqLworCXFsX3dyaXRlX3BhZ2UwX3JlZyhxZGV2LCAmcG9ydF9yZWdzLT5tYWNBZGRySW5kaXJlY3RQdHJSZWcsCisJCQkgICAoKE1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfUlBfTUFTSyA8PCAxNikgfCAxKSk7CisJcWxfd3JpdGVfcGFnZTBfcmVnKHFkZXYsICZwb3J0X3JlZ3MtPm1hY0FkZHJEYXRhUmVnLAorCQkJICAgKChuZGV2LT5kZXZfYWRkclswXSA8PCA4KSB8IG5kZXYtPmRldl9hZGRyWzFdKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWRldi0+aHdfbG9jaywgaHdfZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHFsM3h4eF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKiluZXRkZXZfcHJpdihuZGV2KTsKKworCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBSZXNldHRpbmcuLi5cbiIsIG5kZXYtPm5hbWUpOworCS8qCisJICogU3RvcCB0aGUgcXVldWVzLCB3ZSd2ZSBnb3QgYSBwcm9ibGVtLgorCSAqLworCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisKKwkvKgorCSAqIFdha2UgdXAgdGhlIHdvcmtlciB0byBwcm9jZXNzIHRoaXMgZXZlbnQuCisJICovCisJcXVldWVfd29yayhxZGV2LT53b3JrcXVldWUsICZxZGV2LT50eF90aW1lb3V0X3dvcmspOworfQorCitzdGF0aWMgdm9pZCBxbF9yZXNldF93b3JrKHN0cnVjdCBxbDNfYWRhcHRlciAqcWRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHFkZXYtPm5kZXY7CisJdTMyIHZhbHVlOworCXN0cnVjdCBxbF90eF9idWZfY2IgKnR4X2NiOworCWludCBtYXhfd2FpdF90aW1lLCBpOworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJdW5zaWduZWQgbG9uZyBod19mbGFnczsKKworCWlmICh0ZXN0X2JpdCgoUUxfUkVTRVRfUEVSX1NDU0kgfCBRTF9SRVNFVF9TVEFSVCksJnFkZXYtPmZsYWdzKSkgeworCQljbGVhcl9iaXQoUUxfTElOS19NQVNURVIsJnFkZXYtPmZsYWdzKTsKKworCQkvKgorCQkgKiBMb29wIHRocm91Z2ggdGhlIGFjdGl2ZSBsaXN0IGFuZCByZXR1cm4gdGhlIHNrYi4KKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVRX1FfRU5UUklFUzsgaSsrKSB7CisJCQl0eF9jYiA9ICZxZGV2LT50eF9idWZbaV07CisJCQlpZiAodHhfY2ItPnNrYikgeworCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCQkJICAgICAgICIlczogRnJlZWluZyBsb3N0IFNLQi5cbiIsCisJCQkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQkJCXBjaV91bm1hcF9zaW5nbGUocWRldi0+cGRldiwKKwkJCQkJcGNpX3VubWFwX2FkZHIodHhfY2IsIG1hcGFkZHIpLAorCQkJCQlwY2lfdW5tYXBfbGVuKHR4X2NiLCBtYXBsZW4pLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlkZXZfa2ZyZWVfc2tiKHR4X2NiLT5za2IpOworCQkJCXR4X2NiLT5za2IgPSBOVUxMOworCQkJfQorCQl9CisKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkgICAgICAgIiVzOiBDbGVhcmluZyBOUkkgYWZ0ZXIgcmVzZXQuXG4iLCBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnFkZXYtPmh3X2xvY2ssIGh3X2ZsYWdzKTsKKwkJcWxfd3JpdGVfY29tbW9uX3JlZyhxZGV2LAorCQkJCSAgICAmcG9ydF9yZWdzLT5Db21tb25SZWdzLgorCQkJCSAgICBpc3BDb250cm9sU3RhdHVzLAorCQkJCSAgICAoKElTUF9DT05UUk9MX1JJIDw8IDE2KSB8IElTUF9DT05UUk9MX1JJKSk7CisJCS8qCisJCSAqIFdhaXQgdGhlIGZvciBTb2Z0IFJlc2V0IHRvIENvbXBsZXRlLgorCQkgKi8KKwkJbWF4X3dhaXRfdGltZSA9IDEwOworCQlkbyB7CisJCQl2YWx1ZSA9IHFsX3JlYWRfY29tbW9uX3JlZyhxZGV2LAorCQkJCQkJICAgJnBvcnRfcmVncy0+Q29tbW9uUmVncy4KKworCQkJCQkJICAgaXNwQ29udHJvbFN0YXR1cyk7CisJCQlpZiAoKHZhbHVlICYgSVNQX0NPTlRST0xfU1IpID09IDApIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgIiVzOiByZXNldCBjb21wbGV0ZWQuXG4iLAorCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHZhbHVlICYgSVNQX0NPTlRST0xfUkkpIHsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyBQRlgKKwkJCQkgICAgICAgIiVzOiBjbGVhcmluZyBOUkkgYWZ0ZXIgcmVzZXQuXG4iLAorCQkJCSAgICAgICBxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCQlxbF93cml0ZV9jb21tb25fcmVnKHFkZXYsCisJCQkJCQkgICAgKHUzMiAqKSAmCisJCQkJCQkgICAgcG9ydF9yZWdzLT4KKwkJCQkJCSAgICBDb21tb25SZWdzLgorCQkJCQkJICAgIGlzcENvbnRyb2xTdGF0dXMsCisJCQkJCQkgICAgKChJU1BfQ09OVFJPTF9SSSA8PAorCQkJCQkJICAgICAgMTYpIHwgSVNQX0NPTlRST0xfUkkpKTsKKwkJCX0KKworCQkJc3NsZWVwKDEpOworCQl9IHdoaWxlICgtLW1heF93YWl0X3RpbWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZGV2LT5od19sb2NrLCBod19mbGFncyk7CisKKwkJaWYgKHZhbHVlICYgSVNQX0NPTlRST0xfU1IpIHsKKworCQkJLyoKKwkJCSAqIFNldCB0aGUgcmVzZXQgZmxhZ3MgYW5kIGNsZWFyIHRoZSBib2FyZCBhZ2Fpbi4KKwkJCSAqIE5vdGhpbmcgZWxzZSB0byBkby4uLgorCQkJICovCisJCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkgICAgICAgIiVzOiBUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVzZXQgdG8gIgorCQkJICAgICAgICJjb21wbGV0ZS5cbiIsIG5kZXYtPm5hbWUpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJICAgICAgICIlczogRG8gYSByZXNldC5cbiIsIG5kZXYtPm5hbWUpOworCQkJY2xlYXJfYml0KFFMX1JFU0VUX1BFUl9TQ1NJLCZxZGV2LT5mbGFncyk7CisJCQljbGVhcl9iaXQoUUxfUkVTRVRfU1RBUlQsJnFkZXYtPmZsYWdzKTsKKwkJCXFsX2N5Y2xlX2FkYXB0ZXIocWRldixRTF9ET19SRVNFVCk7CisJCQlyZXR1cm47CisJCX0KKworCQljbGVhcl9iaXQoUUxfUkVTRVRfQUNUSVZFLCZxZGV2LT5mbGFncyk7CisJCWNsZWFyX2JpdChRTF9SRVNFVF9QRVJfU0NTSSwmcWRldi0+ZmxhZ3MpOworCQljbGVhcl9iaXQoUUxfUkVTRVRfU1RBUlQsJnFkZXYtPmZsYWdzKTsKKwkJcWxfY3ljbGVfYWRhcHRlcihxZGV2LFFMX05PX1JFU0VUKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX3R4X3RpbWVvdXRfd29yayhzdHJ1Y3QgcWwzX2FkYXB0ZXIgKnFkZXYpCit7CisJcWxfY3ljbGVfYWRhcHRlcihxZGV2LFFMX0RPX1JFU0VUKTsKK30KKworc3RhdGljIHZvaWQgcWxfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsM19hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqcG9ydF9yZWdzID0gcWRldi0+bWVtX21hcF9yZWdpc3RlcnM7CisJdTMyIHZhbHVlOworCisJdmFsdWUgPSBxbF9yZWFkX3BhZ2UwX3JlZ19sKHFkZXYsICZwb3J0X3JlZ3MtPnBvcnRTdGF0dXMpOworCisJcWRldi0+Y2hpcF9yZXZfaWQgPSAoKHZhbHVlICYgUE9SVF9TVEFUVVNfUkVWX0lEX01BU0spID4+IDEyKTsKKwlpZiAodmFsdWUgJiBQT1JUX1NUQVRVU182NCkKKwkJcWRldi0+cGNpX3dpZHRoID0gNjQ7CisJZWxzZQorCQlxZGV2LT5wY2lfd2lkdGggPSAzMjsKKwlpZiAodmFsdWUgJiBQT1JUX1NUQVRVU19YKQorCQlxZGV2LT5wY2lfeCA9IDE7CisJZWxzZQorCQlxZGV2LT5wY2lfeCA9IDA7CisJcWRldi0+cGNpX3Nsb3QgPSAodTgpIFBDSV9TTE9UKHFkZXYtPnBkZXYtPmRldmZuKTsKK30KKworc3RhdGljIHZvaWQgcWwzeHh4X3RpbWVyKHVuc2lnbmVkIGxvbmcgcHRyKQoreworCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWwzX2FkYXB0ZXIgKilwdHI7CisKKwlpZiAodGVzdF9iaXQoUUxfUkVTRVRfQUNUSVZFLCZxZGV2LT5mbGFncykpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgUEZYCisJCSAgICAgICAiJXM6IFJlc2V0IGluIHByb2dyZXNzLlxuIiwKKwkJICAgICAgIHFkZXYtPm5kZXYtPm5hbWUpOworCQlnb3RvIGVuZDsKKwl9CisKKwlxbF9saW5rX3N0YXRlX21hY2hpbmUocWRldik7CisKKwkvKiBSZXN0YXJ0IHRpbWVyIG9uIDIgc2Vjb25kIGludGVydmFsLiAqLworZW5kOgorCW1vZF90aW1lcigmcWRldi0+YWRhcHRlcl90aW1lciwgamlmZmllcyArIEhaICogMSk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHFsM3h4eF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZW50cnkpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBOVUxMOworCXN0cnVjdCBxbDNfYWRhcHRlciAqcWRldiA9IE5VTEw7CisJc3RhdGljIGludCBjYXJkc19mb3VuZCA9IDA7CisJaW50IHBjaV91c2luZ19kYWMsIGVycjsKKworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXMgY2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlXG4iLAorCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spKSB7CisJCXBjaV91c2luZ19kYWMgPSAxOworCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BXzY0QklUX01BU0spOworCX0gZWxzZSBpZiAoIShlcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV8zMkJJVF9NQVNLKSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDA7CisJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfMzJCSVRfTUFTSyk7CisJfQorCisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisJfQorCisJbmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgcWwzX2FkYXB0ZXIpKTsKKwlpZiAoIW5kZXYpCisJCWdvdG8gZXJyX291dF9mcmVlX3JlZ2lvbnM7CisKKwlTRVRfTU9EVUxFX09XTkVSKG5kZXYpOworCVNFVF9ORVRERVZfREVWKG5kZXYsICZwZGV2LT5kZXYpOworCisJbmRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0xMVFg7CisJaWYgKHBjaV91c2luZ19kYWMpCisJCW5kZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKKworCXFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlxZGV2LT5pbmRleCA9IGNhcmRzX2ZvdW5kOworCXFkZXYtPm5kZXYgPSBuZGV2OworCXFkZXYtPnBkZXYgPSBwZGV2OworCXFkZXYtPnBvcnRfbGlua19zdGF0ZSA9IExTX0RPV047CisJaWYgKG1zaSkKKwkJcWRldi0+bXNpID0gMTsKKworCXFkZXYtPm1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgZGVmYXVsdF9tc2cpOworCisJcWRldi0+bWVtX21hcF9yZWdpc3RlcnMgPQorCSAgICBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpLAorCQkJICAgIHBjaV9yZXNvdXJjZV9sZW4ocWRldi0+cGRldiwgMSkpOworCWlmICghcWRldi0+bWVtX21hcF9yZWdpc3RlcnMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfbmRldjsKKwl9CisKKwlzcGluX2xvY2tfaW5pdCgmcWRldi0+YWRhcHRlcl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmcWRldi0+aHdfbG9jayk7CisKKwkvKiBTZXQgZHJpdmVyIGVudHJ5IHBvaW50cyAqLworCW5kZXYtPm9wZW4gPSBxbDN4eHhfb3BlbjsKKwluZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBxbDN4eHhfc2VuZDsKKwluZGV2LT5zdG9wID0gcWwzeHh4X2Nsb3NlOworCW5kZXYtPmdldF9zdGF0cyA9IHFsM3h4eF9nZXRfc3RhdHM7CisJbmRldi0+Y2hhbmdlX210dSA9IHFsM3h4eF9jaGFuZ2VfbXR1OworCW5kZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IHFsM3h4eF9zZXRfbXVsdGljYXN0X2xpc3Q7CisJU0VUX0VUSFRPT0xfT1BTKG5kZXYsICZxbDN4eHhfZXRodG9vbF9vcHMpOworCW5kZXYtPnNldF9tYWNfYWRkcmVzcyA9IHFsM3h4eF9zZXRfbWFjX2FkZHJlc3M7CisJbmRldi0+dHhfdGltZW91dCA9IHFsM3h4eF90eF90aW1lb3V0OworCW5kZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOworCisJbmRldi0+cG9sbCA9ICZxbF9wb2xsOworCW5kZXYtPndlaWdodCA9IDY0OworCisJbmRldi0+aXJxID0gcGRldi0+aXJxOworCisJLyogbWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLworCWlmIChxbF9nZXRfbnZyYW1fcGFyYW1zKHFkZXYpKSB7CisJCXByaW50ayhLRVJOX0FMRVJUIFBGWAorCQkgICAgICAgInFsM3h4eF9wcm9iZTogQWRhcHRlciAjJWQsIEludmFsaWQgTlZSQU0gcGFyYW1ldGVycy5cbiIsCisJCSAgICAgICBxZGV2LT5pbmRleCk7CisJCWdvdG8gZXJyX291dF9pb3VubWFwOworCX0KKworCXFsX3NldF9tYWNfaW5mbyhxZGV2KTsKKworCS8qIFZhbGlkYXRlIGFuZCBzZXQgcGFyYW1ldGVycyAqLworCWlmIChxZGV2LT5tYWNfaW5kZXgpIHsKKwkJbWVtY3B5KG5kZXYtPmRldl9hZGRyLCAmcWRldi0+bnZyYW1fZGF0YS5mdW5jQ2ZnX2ZuMi5tYWNBZGRyZXNzLAorCQkgICAgICAgRVRIX0FMRU4pOworCX0gZWxzZSB7CisJCW1lbWNweShuZGV2LT5kZXZfYWRkciwgJnFkZXYtPm52cmFtX2RhdGEuZnVuY0NmZ19mbjAubWFjQWRkcmVzcywKKwkJICAgICAgIEVUSF9BTEVOKTsKKwl9CisJbWVtY3B5KG5kZXYtPnBlcm1fYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKKworCW5kZXYtPnR4X3F1ZXVlX2xlbiA9IE5VTV9SRVFfUV9FTlRSSUVTOworCisJLyogVHVybiBvZmYgc3VwcG9ydCBmb3IgbXVsdGljYXN0aW5nICovCisJbmRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CisKKwkvKiBSZWNvcmQgUENJIGJ1cyBpbmZvcm1hdGlvbi4gKi8KKwlxbF9nZXRfYm9hcmRfaW5mbyhxZGV2KTsKKworCS8qCisJICogU2V0IHRoZSBNYXhpbXVtIE1lbW9yeSBSZWFkIEJ5dGUgQ291bnQgdmFsdWUuIFdlIGRvIHRoaXMgdG8gaGFuZGxlCisJICoganVtYm8gZnJhbWVzLgorCSAqLworCWlmIChxZGV2LT5wY2lfeCkgeworCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgKGludCkweDRlLCAodTE2KSAweDAwMzYpOworCX0KKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIiwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZ290byBlcnJfb3V0X2lvdW5tYXA7CisJfQorCisJLyogd2UncmUgZ29pbmcgdG8gcmVzZXQsIHNvIGFzc3VtZSB3ZSBoYXZlIG5vIGxpbmsgZm9yIG5vdyAqLworCisJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKworCXFkZXYtPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKG5kZXYtPm5hbWUpOworCUlOSVRfV09SSygmcWRldi0+cmVzZXRfd29yaywgKHZvaWQgKCopKHZvaWQgKikpcWxfcmVzZXRfd29yaywgcWRldik7CisJSU5JVF9XT1JLKCZxZGV2LT50eF90aW1lb3V0X3dvcmssCisJCSAgKHZvaWQgKCopKHZvaWQgKikpcWxfdHhfdGltZW91dF93b3JrLCBxZGV2KTsKKworCWluaXRfdGltZXIoJnFkZXYtPmFkYXB0ZXJfdGltZXIpOworCXFkZXYtPmFkYXB0ZXJfdGltZXIuZnVuY3Rpb24gPSBxbDN4eHhfdGltZXI7CisJcWRldi0+YWRhcHRlcl90aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaICogMjsJLyogdHdvIHNlY29uZCBkZWxheSAqLworCXFkZXYtPmFkYXB0ZXJfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXFkZXY7CisKKwlpZighY2FyZHNfZm91bmQpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICIlc1xuIiwgRFJWX1NUUklORyk7CisJCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiRHJpdmVyIG5hbWU6ICVzLCBWZXJzaW9uOiAlcy5cbiIsCisJICAgIAkgICBEUlZfTkFNRSwgRFJWX1ZFUlNJT04pOworCX0KKwlxbF9kaXNwbGF5X2Rldl9pbmZvKG5kZXYpOworCisJY2FyZHNfZm91bmQrKzsKKwlyZXR1cm4gMDsKKworZXJyX291dF9pb3VubWFwOgorCWlvdW5tYXAocWRldi0+bWVtX21hcF9yZWdpc3RlcnMpOworZXJyX291dF9mcmVlX25kZXY6CisJZnJlZV9uZXRkZXYobmRldik7CitlcnJfb3V0X2ZyZWVfcmVnaW9uczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworZXJyX291dF9kaXNhYmxlX3BkZXY6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKK2Vycl9vdXQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IHFsM3h4eF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwlxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlxbF9kaXNhYmxlX2ludGVycnVwdHMocWRldik7CisKKwlpZiAocWRldi0+d29ya3F1ZXVlKSB7CisJCWNhbmNlbF9kZWxheWVkX3dvcmsoJnFkZXYtPnJlc2V0X3dvcmspOworCQljYW5jZWxfZGVsYXllZF93b3JrKCZxZGV2LT50eF90aW1lb3V0X3dvcmspOworCQlkZXN0cm95X3dvcmtxdWV1ZShxZGV2LT53b3JrcXVldWUpOworCQlxZGV2LT53b3JrcXVldWUgPSBOVUxMOworCX0KKworCWlvdW5tYXAoKHZvaWQgKilxZGV2LT5tbWFwX3ZpcnRfYmFzZSk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJZnJlZV9uZXRkZXYobmRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBxbDN4eHhfZHJpdmVyID0geworCisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuaWRfdGFibGUgPSBxbDN4eHhfcGNpX3RibCwKKwkucHJvYmUgPSBxbDN4eHhfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHFsM3h4eF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcWwzeHh4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnFsM3h4eF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcWwzeHh4X2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnFsM3h4eF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChxbDN4eHhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQocWwzeHh4X2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxhM3h4eC5oIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OTJjZWUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9xbGEzeHh4LmgKQEAgLTAsMCArMSwxMTk0IEBACisvKgorICogUUxvZ2ljIFFMQTN4eHggTklDIEhCQSBEcml2ZXIKKyAqIENvcHlyaWdodCAoYykgIDIwMDMtMjAwNiBRTG9naWMgQ29ycG9yYXRpb24KKyAqCisgKiBTZWUgTElDRU5TRS5xbGEzeHh4IGZvciBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBkZXRhaWxzLgorICovCisjaWZuZGVmIF9RTEEzWFhYX0hfCisjZGVmaW5lIF9RTEEzWFhYX0hfCisKKy8qCisgKiBJT0NCIERlZmluaXRpb25zLi4uCisgKi8KKyNwcmFnbWEgcGFjaygxKQorCisjZGVmaW5lIE9QQ09ERV9PQl9NQUNfSU9DQl9GTjAgICAgICAgICAgMHgwMQorI2RlZmluZSBPUENPREVfT0JfTUFDX0lPQ0JfRk4yICAgICAgICAgIDB4MjEKKyNkZWZpbmUgT1BDT0RFX09CX1RDUF9JT0NCX0ZOMCAgICAgICAgICAweDAzCisjZGVmaW5lIE9QQ09ERV9PQl9UQ1BfSU9DQl9GTjIgICAgICAgICAgMHgyMworI2RlZmluZSBPUENPREVfVVBEQVRFX05DQl9JT0NCX0ZOMCAgICAgIDB4MDAKKyNkZWZpbmUgT1BDT0RFX1VQREFURV9OQ0JfSU9DQl9GTjIgICAgICAweDIwCisKKyNkZWZpbmUgT1BDT0RFX1VQREFURV9OQ0JfSU9DQiAgICAgIDB4RjAKKyNkZWZpbmUgT1BDT0RFX0lCX01BQ19JT0NCICAgICAgICAgIDB4RjkKKyNkZWZpbmUgT1BDT0RFX0lCX0lQX0lPQ0IgICAgICAgICAgIDB4RkEKKyNkZWZpbmUgT1BDT0RFX0lCX1RDUF9JT0NCICAgICAgICAgIDB4RkIKKyNkZWZpbmUgT1BDT0RFX0RVTVBfUFJPVE9fSU9DQiAgICAgIDB4RkUKKyNkZWZpbmUgT1BDT0RFX0JVRkZFUl9BTEVSVF9JT0NCICAgIDB4RkIKKworI2RlZmluZSBPUENPREVfRlVOQ19JRF9NQVNLICAgICAgICAgICAgICAgICAweDMwCisjZGVmaW5lIE9VVEJPVU5EX01BQ19JT0NCICAgICAgICAgICAgICAgICAgIDB4MDEJLyogcGx1cyBmdW5jdGlvbiBiaXRzICovCisjZGVmaW5lIE9VVEJPVU5EX1RDUF9JT0NCICAgICAgICAgICAgICAgICAgIDB4MDMJLyogcGx1cyBmdW5jdGlvbiBiaXRzICovCisjZGVmaW5lIFVQREFURV9OQ0JfSU9DQiAgICAgICAgICAgICAgICAgICAgIDB4MDAJLyogcGx1cyBmdW5jdGlvbiBiaXRzICovCisKKyNkZWZpbmUgRk4wX01BX0JJVFNfTUFTSyAgICAweDAwCisjZGVmaW5lIEZOMV9NQV9CSVRTX01BU0sgICAgMHg4MAorCitzdHJ1Y3Qgb2JfbWFjX2lvY2JfcmVxIHsKKwl1OCBvcGNvZGU7CisJdTggZmxhZ3M7CisjZGVmaW5lIE9CX01BQ19JT0NCX1JFUV9NQSAgMHhDMAorI2RlZmluZSBPQl9NQUNfSU9DQl9SRVFfRiAgIDB4MjAKKyNkZWZpbmUgT0JfTUFDX0lPQ0JfUkVRX1ggICAweDEwCisjZGVmaW5lIE9CX01BQ19JT0NCX1JFUV9EICAgMHgwMgorI2RlZmluZSBPQl9NQUNfSU9DQl9SRVFfSSAgIDB4MDEKKwlfX2xlMTYgcmVzZXJ2ZWQwOworCisJX19sZTMyIHRyYW5zYWN0aW9uX2lkOworCV9fbGUxNiBkYXRhX2xlbjsKKwlfX2xlMTYgcmVzZXJ2ZWQxOworCV9fbGUzMiByZXNlcnZlZDI7CisJX19sZTMyIHJlc2VydmVkMzsKKwlfX2xlMzIgYnVmX2FkZHIwX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIwX2hpZ2g7CisJX19sZTMyIGJ1Zl8wX2xlbjsKKwlfX2xlMzIgYnVmX2FkZHIxX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIxX2hpZ2g7CisJX19sZTMyIGJ1Zl8xX2xlbjsKKwlfX2xlMzIgYnVmX2FkZHIyX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIyX2hpZ2g7CisJX19sZTMyIGJ1Zl8yX2xlbjsKKwlfX2xlMzIgcmVzZXJ2ZWQ0OworCV9fbGUzMiByZXNlcnZlZDU7Cit9OworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGRlZmluZSBjb250cm9sIGJpdHMgZm9yIGJ1ZmZlcgorICogbGVuZ3RoIGZpZWxkcyBmb3IgYWxsIElPQ0Incy4KKyAqLworI2RlZmluZSBPQl9NQUNfSU9DQl9SRVFfRSAgIDB4ODAwMDAwMDAJLyogTGFzdCB2YWxpZCBidWZmZXIgaW4gbGlzdC4gKi8KKyNkZWZpbmUgT0JfTUFDX0lPQ0JfUkVRX0MgICAweDQwMDAwMDAwCS8qIHBvaW50cyB0byBhbiBPQUwuIChjb250aW51YXRpb24pICovCisjZGVmaW5lIE9CX01BQ19JT0NCX1JFUV9MICAgMHgyMDAwMDAwMAkvKiBBdWJ1cm4gbG9jYWwgYWRkcmVzcyBwb2ludGVyLiAqLworI2RlZmluZSBPQl9NQUNfSU9DQl9SRVFfUiAgIDB4MTAwMDAwMDAJLyogMzItYml0IGFkZHJlc3MgcG9pbnRlci4gKi8KKworc3RydWN0IG9iX21hY19pb2NiX3JzcCB7CisJdTggb3Bjb2RlOworCXU4IGZsYWdzOworI2RlZmluZSBPQl9NQUNfSU9DQl9SU1BfUCAgIDB4MDgKKyNkZWZpbmUgT0JfTUFDX0lPQ0JfUlNQX1MgICAweDAyCisjZGVmaW5lIE9CX01BQ19JT0NCX1JTUF9JICAgMHgwMQorCisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMzIgdHJhbnNhY3Rpb25faWQ7CisJX19sZTMyIHJlc2VydmVkMTsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworfTsKKworc3RydWN0IGliX21hY19pb2NiX3JzcCB7CisJdTggb3Bjb2RlOworCXU4IGZsYWdzOworI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfUyAgIDB4ODAKKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX0gxICAweDQwCisjZGVmaW5lIElCX01BQ19JT0NCX1JTUF9IMCAgMHgyMAorI2RlZmluZSBJQl9NQUNfSU9DQl9SU1BfQiAgIDB4MTAKKyNkZWZpbmUgSUJfTUFDX0lPQ0JfUlNQX00gICAweDA4CisjZGVmaW5lIElCX01BQ19JT0NCX1JTUF9NQSAgMHgwNworCisJX19sZTE2IGxlbmd0aDsKKwlfX2xlMzIgcmVzZXJ2ZWQ7CisJX19sZTMyIGlhbF9sb3c7CisJX19sZTMyIGlhbF9oaWdoOworCit9OworCitzdHJ1Y3Qgb2JfaXBfaW9jYl9yZXEgeworCXU4IG9wY29kZTsKKwlfX2xlMTYgZmxhZ3M7CisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX08gICAgICAgIDB4MTAwCisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX0ggICAgICAgIDB4MDA4CisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX1UgICAgICAgIDB4MDA0CisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX0QgICAgICAgIDB4MDAyCisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX0kgICAgICAgIDB4MDAxCisKKwl1OCByZXNlcnZlZDA7CisKKwlfX2xlMzIgdHJhbnNhY3Rpb25faWQ7CisJX19sZTE2IGRhdGFfbGVuOworCV9fbGUxNiByZXNlcnZlZDE7CisJX19sZTMyIGhuY2JfcHRyX2xvdzsKKwlfX2xlMzIgaG5jYl9wdHJfaGlnaDsKKwlfX2xlMzIgYnVmX2FkZHIwX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIwX2hpZ2g7CisJX19sZTMyIGJ1Zl8wX2xlbjsKKwlfX2xlMzIgYnVmX2FkZHIxX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIxX2hpZ2g7CisJX19sZTMyIGJ1Zl8xX2xlbjsKKwlfX2xlMzIgYnVmX2FkZHIyX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIyX2hpZ2g7CisJX19sZTMyIGJ1Zl8yX2xlbjsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworCV9fbGUzMiByZXNlcnZlZDM7Cit9OworCisvKiBkZWZpbmVzIGZvciBCdWZmZXJMZW5ndGggZmllbGRzIGFib3ZlICovCisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX0UgICAgMHg4MDAwMDAwMAorI2RlZmluZSBPQl9JUF9JT0NCX1JFUV9DICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgT0JfSVBfSU9DQl9SRVFfTCAgICAweDIwMDAwMDAwCisjZGVmaW5lIE9CX0lQX0lPQ0JfUkVRX1IgICAgMHgxMDAwMDAwMAorCitzdHJ1Y3Qgb2JfaXBfaW9jYl9yc3AgeworCXU4IG9wY29kZTsKKwl1OCBmbGFnczsKKyNkZWZpbmUgT0JfTUFDX0lPQ0JfUlNQX0UgICAgICAgMHgwOAorI2RlZmluZSBPQl9NQUNfSU9DQl9SU1BfTCAgICAgICAweDA0CisjZGVmaW5lIE9CX01BQ19JT0NCX1JTUF9TICAgICAgIDB4MDIKKyNkZWZpbmUgT0JfTUFDX0lPQ0JfUlNQX0kgICAgICAgMHgwMQorCisJX19sZTE2IHJlc2VydmVkMDsKKwlfX2xlMzIgdHJhbnNhY3Rpb25faWQ7CisJX19sZTMyIHJlc2VydmVkMTsKKwlfX2xlMzIgcmVzZXJ2ZWQyOworfTsKKworc3RydWN0IG9iX3RjcF9pb2NiX3JlcSB7CisJdTggb3Bjb2RlOworCisJdTggZmxhZ3MwOworI2RlZmluZSBPQl9UQ1BfSU9DQl9SRVFfUCAgICAgICAweDgwCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JFUV9DSSAgICAgIDB4MjAKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUkVRX0ggICAgICAgMHgxMAorI2RlZmluZSBPQl9UQ1BfSU9DQl9SRVFfTE4gICAgICAweDA4CisjZGVmaW5lIE9CX1RDUF9JT0NCX1JFUV9LICAgICAgIDB4MDQKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUkVRX0QgICAgICAgMHgwMgorI2RlZmluZSBPQl9UQ1BfSU9DQl9SRVFfSSAgICAgICAweDAxCisKKwl1OCBmbGFnczE7CisjZGVmaW5lIE9CX1RDUF9JT0NCX1JFUV9PU00gICAgIDB4NDAKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUkVRX1VSRyAgICAgMHgyMAorI2RlZmluZSBPQl9UQ1BfSU9DQl9SRVFfQUNLICAgICAweDEwCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JFUV9QU0ggICAgIDB4MDgKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUkVRX1JTVCAgICAgMHgwNAorI2RlZmluZSBPQl9UQ1BfSU9DQl9SRVFfU1lOICAgICAweDAyCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JFUV9GSU4gICAgIDB4MDEKKworCXU4IG9wdGlvbnNfbGVuOworI2RlZmluZSBPQl9UQ1BfSU9DQl9SRVFfT01BU0sgICAweEYwCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JFUV9TSElGVCAgIDQKKworCV9fbGUzMiB0cmFuc2FjdGlvbl9pZDsKKwlfX2xlMzIgZGF0YV9sZW47CisJX19sZTMyIGhuY2JfcHRyX2xvdzsKKwlfX2xlMzIgaG5jYl9wdHJfaGlnaDsKKwlfX2xlMzIgYnVmX2FkZHIwX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIwX2hpZ2g7CisJX19sZTMyIGJ1Zl8wX2xlbjsKKwlfX2xlMzIgYnVmX2FkZHIxX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIxX2hpZ2g7CisJX19sZTMyIGJ1Zl8xX2xlbjsKKwlfX2xlMzIgYnVmX2FkZHIyX2xvdzsKKwlfX2xlMzIgYnVmX2FkZHIyX2hpZ2g7CisJX19sZTMyIGJ1Zl8yX2xlbjsKKwlfX2xlMzIgdGltZV9zdGFtcDsKKwlfX2xlMzIgcmVzZXJ2ZWQxOworfTsKKworc3RydWN0IG9iX3RjcF9pb2NiX3JzcCB7CisJdTggb3Bjb2RlOworCisJdTggZmxhZ3MwOworI2RlZmluZSBPQl9UQ1BfSU9DQl9SU1BfQyAgICAgICAweDIwCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JTUF9IICAgICAgIDB4MTAKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUlNQX0xOICAgICAgMHgwOAorI2RlZmluZSBPQl9UQ1BfSU9DQl9SU1BfSyAgICAgICAweDA0CisjZGVmaW5lIE9CX1RDUF9JT0NCX1JTUF9EICAgICAgIDB4MDIKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUlNQX0kgICAgICAgMHgwMQorCisJdTggZmxhZ3MxOworI2RlZmluZSBPQl9UQ1BfSU9DQl9SU1BfRSAgICAgICAweDEwCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JTUF9XICAgICAgIDB4MDgKKyNkZWZpbmUgT0JfVENQX0lPQ0JfUlNQX1AgICAgICAgMHgwNAorI2RlZmluZSBPQl9UQ1BfSU9DQl9SU1BfVCAgICAgICAweDAyCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JTUF9GICAgICAgIDB4MDEKKworCXU4IHN0YXRlOworI2RlZmluZSBPQl9UQ1BfSU9DQl9SU1BfU01BU0sgICAweEYwCisjZGVmaW5lIE9CX1RDUF9JT0NCX1JTUF9TSElGVCAgIDQKKworCV9fbGUzMiB0cmFuc2FjdGlvbl9pZDsKKwlfX2xlMzIgbG9jYWxfbmNiX3B0cjsKKwlfX2xlMzIgcmVzZXJ2ZWQwOworfTsKKworc3RydWN0IGliX2lwX2lvY2JfcnNwIHsKKwl1OCBvcGNvZGU7CisJdTggZmxhZ3M7CisjZGVmaW5lIElCX0lQX0lPQ0JfUlNQX1MgICAgICAgIDB4ODAKKyNkZWZpbmUgSUJfSVBfSU9DQl9SU1BfSDEgICAgICAgMHg0MAorI2RlZmluZSBJQl9JUF9JT0NCX1JTUF9IMCAgICAgICAweDIwCisjZGVmaW5lIElCX0lQX0lPQ0JfUlNQX0IgICAgICAgIDB4MTAKKyNkZWZpbmUgSUJfSVBfSU9DQl9SU1BfTSAgICAgICAgMHgwOAorI2RlZmluZSBJQl9JUF9JT0NCX1JTUF9NQSAgICAgICAweDA3CisKKwlfX2xlMTYgbGVuZ3RoOworCV9fbGUxNiBjaGVja3N1bTsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisjZGVmaW5lIElCX0lQX0lPQ0JfUlNQX1IgICAgICAgIDB4MDEKKwlfX2xlMzIgaWFsX2xvdzsKKwlfX2xlMzIgaWFsX2hpZ2g7Cit9OworCitzdHJ1Y3QgaWJfdGNwX2lvY2JfcnNwIHsKKwl1OCBvcGNvZGU7CisJdTggZmxhZ3M7CisjZGVmaW5lIElCX1RDUF9JT0NCX1JTUF9QICAgICAgIDB4ODAKKyNkZWZpbmUgSUJfVENQX0lPQ0JfUlNQX1QgICAgICAgMHg0MAorI2RlZmluZSBJQl9UQ1BfSU9DQl9SU1BfRCAgICAgICAweDIwCisjZGVmaW5lIElCX1RDUF9JT0NCX1JTUF9OICAgICAgIDB4MTAKKyNkZWZpbmUgSUJfVENQX0lPQ0JfUlNQX0lQICAgICAgMHgwMworI2RlZmluZSBJQl9UQ1BfRkxBR19NQVNLICAgICAgICAweGYwCisjZGVmaW5lIElCX1RDUF9GTEFHX0lPQ0JfU1lOICAgIDB4MDAKKworI2RlZmluZSBUQ1BfSUJfUlNQX0ZMQUdTKHgpICh4LT5mbGFncyAmIH5JQl9UQ1BfRkxBR19NQVNLKQorCisJX19sZTE2IGxlbmd0aDsKKwlfX2xlMzIgaG5jYl9yZWZfbnVtOworCV9fbGUzMiBpYWxfbG93OworCV9fbGUzMiBpYWxfaGlnaDsKK307CisKK3N0cnVjdCBuZXRfcnNwX2lvY2IgeworCXU4IG9wY29kZTsKKwl1OCBmbGFnczsKKwlfX2xlMTYgcmVzZXJ2ZWQwOworCV9fbGUzMiByZXNlcnZlZFszXTsKK307CisjcHJhZ21hIHBhY2soKQorCisvKgorICogUmVnaXN0ZXIgRGVmaW5pdGlvbnMuLi4KKyAqLworI2RlZmluZSBQT1JUMF9QSFlfQUREUkVTUyAgIDB4MWUwMAorI2RlZmluZSBQT1JUMV9QSFlfQUREUkVTUyAgIDB4MWYwMAorCisjZGVmaW5lIEVUSEVSTkVUX0NSQ19TSVpFICAgNAorCisjZGVmaW5lIE1JSV9TQ0FOX1JFR0lTVEVSIDB4MDAwMDAwMDEKKworLyogMzItYml0IGlzcENvbnRyb2xTdGF0dXMgKi8KK2VudW0geworCUlTUF9DT05UUk9MX05QX01BU0sgPSAweDAwMDMsCisJSVNQX0NPTlRST0xfTlBfUENTUiA9IDB4MDAwMCwKKwlJU1BfQ09OVFJPTF9OUF9ITUNSID0gMHgwMDAxLAorCUlTUF9DT05UUk9MX05QX0xSQU1DUiA9IDB4MDAwMiwKKwlJU1BfQ09OVFJPTF9OUF9QU1IgPSAweDAwMDMsCisJSVNQX0NPTlRST0xfUkkgPSAweDAwMDgsCisJSVNQX0NPTlRST0xfQ0kgPSAweDAwMTAsCisJSVNQX0NPTlRST0xfUEkgPSAweDAwMjAsCisJSVNQX0NPTlRST0xfSU4gPSAweDAwNDAsCisJSVNQX0NPTlRST0xfQkUgPSAweDAwODAsCisJSVNQX0NPTlRST0xfRk5fTUFTSyA9IDB4MDcwMCwKKwlJU1BfQ09OVFJPTF9GTjBfTkVUID0gMHgwNDAwLAorCUlTUF9DT05UUk9MX0ZOMF9TQ1NJID0gMHgwNTAwLAorCUlTUF9DT05UUk9MX0ZOMV9ORVQgPSAweDA2MDAsCisJSVNQX0NPTlRST0xfRk4xX1NDU0kgPSAweDA3MDAsCisJSVNQX0NPTlRST0xfTElOS19ETl8wID0gMHgwODAwLAorCUlTUF9DT05UUk9MX0xJTktfRE5fMSA9IDB4MTAwMCwKKwlJU1BfQ09OVFJPTF9GU1IgPSAweDIwMDAsCisJSVNQX0NPTlRST0xfRkUgPSAweDQwMDAsCisJSVNQX0NPTlRST0xfU1IgPSAweDgwMDAsCit9OworCisvKiAzMi1iaXQgaXNwSW50ZXJydXB0TWFza1JlZyAqLworZW51bSB7CisJSVNQX0lNUl9FTkFCTEVfSU5UID0gMHgwMDA0LAorCUlTUF9JTVJfRElTQUJMRV9SRVNFVF9JTlQgPSAweDAwMDgsCisJSVNQX0lNUl9ESVNBQkxFX0NNUExfSU5UID0gMHgwMDEwLAorCUlTUF9JTVJfRElTQUJMRV9QUk9DX0lOVCA9IDB4MDAyMCwKK307CisKKy8qIDMyLWJpdCBzZXJpYWxQb3J0SW50ZXJmYWNlUmVnICovCitlbnVtIHsKKwlJU1BfU0VSSUFMX1BPUlRfSUZfQ0xLID0gMHgwMDAxLAorCUlTUF9TRVJJQUxfUE9SVF9JRl9DUyA9IDB4MDAwMiwKKwlJU1BfU0VSSUFMX1BPUlRfSUZfRDAgPSAweDAwMDQsCisJSVNQX1NFUklBTF9QT1JUX0lGX0RJID0gMHgwMDA4LAorCUlTUF9OVlJBTV9NQVNLID0gKDB4MDAwRiA8PCAxNiksCisJSVNQX1NFUklBTF9QT1JUX0lGX1dFID0gMHgwMDEwLAorCUlTUF9TRVJJQUxfUE9SVF9JRl9OVlJfTUFTSyA9IDB4MDAxRiwKKwlJU1BfU0VSSUFMX1BPUlRfSUZfU0NJID0gMHgwNDAwLAorCUlTUF9TRVJJQUxfUE9SVF9JRl9TQzAgPSAweDA4MDAsCisJSVNQX1NFUklBTF9QT1JUX0lGX1NDRSA9IDB4MTAwMCwKKwlJU1BfU0VSSUFMX1BPUlRfSUZfU0RJID0gMHgyMDAwLAorCUlTUF9TRVJJQUxfUE9SVF9JRl9TRE8gPSAweDQwMDAsCisJSVNQX1NFUklBTF9QT1JUX0lGX1NERSA9IDB4ODAwMCwKKwlJU1BfU0VSSUFMX1BPUlRfSUZfSTJDX01BU0sgPSAweEZDMDAsCit9OworCisvKiBzZW1hcGhvcmVSZWcgKi8KK2VudW0geworCVFMX1JFU09VUkNFX01BU0tfQkFTRV9DT0RFID0gMHg3LAorCVFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFID0gMHg0LAorCVFMX0RSVlJfU0VNX0JJVFMgPSAoUUxfUkVTT1VSQ0VfQklUU19CQVNFX0NPREUgPDwgMSksCisJUUxfRERSX1JBTV9TRU1fQklUUyA9IChRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSA8PCA0KSwKKwlRTF9QSFlfR0lPX1NFTV9CSVRTID0gKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIDw8IDcpLAorCVFMX05WUkFNX1NFTV9CSVRTID0gKFFMX1JFU09VUkNFX0JJVFNfQkFTRV9DT0RFIDw8IDEwKSwKKwlRTF9GTEFTSF9TRU1fQklUUyA9IChRTF9SRVNPVVJDRV9CSVRTX0JBU0VfQ09ERSA8PCAxMyksCisJUUxfRFJWUl9TRU1fTUFTSyA9IChRTF9SRVNPVVJDRV9NQVNLX0JBU0VfQ09ERSA8PCAoMSArIDE2KSksCisJUUxfRERSX1JBTV9TRU1fTUFTSyA9IChRTF9SRVNPVVJDRV9NQVNLX0JBU0VfQ09ERSA8PCAoNCArIDE2KSksCisJUUxfUEhZX0dJT19TRU1fTUFTSyA9IChRTF9SRVNPVVJDRV9NQVNLX0JBU0VfQ09ERSA8PCAoNyArIDE2KSksCisJUUxfTlZSQU1fU0VNX01BU0sgPSAoUUxfUkVTT1VSQ0VfTUFTS19CQVNFX0NPREUgPDwgKDEwICsgMTYpKSwKKwlRTF9GTEFTSF9TRU1fTUFTSyA9IChRTF9SRVNPVVJDRV9NQVNLX0JBU0VfQ09ERSA8PCAoMTMgKyAxNikpLAorfTsKKworIC8qCisgICogUUwzWFhYIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzCisgICogUUwzWFhYIGhhcyA0ICJwYWdlcyIgb2YgcmVnaXN0ZXJzLCBlYWNoIHBhZ2Ugb2NjdXB5aW5nCisgICogMjU2IGJ5dGVzLiAgRWFjaCBwYWdlIGhhcyBhICJjb21tb24iIGFyZWEgYXQgdGhlIHN0YXJ0IGFuZCB0aGVuCisgICogcGFnZS1zcGVjaWZpYyByZWdpc3RlcnMgYWZ0ZXIgdGhhdC4KKyAgKi8KK3N0cnVjdCBxbDN4eHhfY29tbW9uX3JlZ2lzdGVycyB7CisJdTMyIE1CMDsJCS8qIE9mZnNldCAweDAwICovCisJdTMyIE1CMTsJCS8qIE9mZnNldCAweDA0ICovCisJdTMyIE1CMjsJCS8qIE9mZnNldCAweDA4ICovCisJdTMyIE1CMzsJCS8qIE9mZnNldCAweDBjICovCisJdTMyIE1CNDsJCS8qIE9mZnNldCAweDEwICovCisJdTMyIE1CNTsJCS8qIE9mZnNldCAweDE0ICovCisJdTMyIE1CNjsJCS8qIE9mZnNldCAweDE4ICovCisJdTMyIE1CNzsJCS8qIE9mZnNldCAweDFjICovCisJdTMyIGZsYXNoQmlvc0FkZHI7CisJdTMyIGZsYXNoQmlvc0RhdGE7CisJdTMyIGlzcENvbnRyb2xTdGF0dXM7CisJdTMyIGlzcEludGVycnVwdE1hc2tSZWc7CisJdTMyIHNlcmlhbFBvcnRJbnRlcmZhY2VSZWc7CisJdTMyIHNlbWFwaG9yZVJlZzsKKwl1MzIgcmVxUVByb2R1Y2VySW5kZXg7CisJdTMyIHJzcFFDb25zdW1lckluZGV4OworCisJdTMyIHJ4TGFyZ2VRUHJvZHVjZXJJbmRleDsKKwl1MzIgcnhTbWFsbFFQcm9kdWNlckluZGV4OworCXUzMiBhcmNNYWRpQ29tbWFuZDsKKwl1MzIgYXJjTWFkaURhdGE7Cit9OworCitlbnVtIHsKKwlFWFRfSFdfQ09ORklHX1NQX01BU0sgPSAweDAwMDYsCisJRVhUX0hXX0NPTkZJR19TUF9OT05FID0gMHgwMDAwLAorCUVYVF9IV19DT05GSUdfU1BfQllURV9QQVJJVFkgPSAweDAwMDIsCisJRVhUX0hXX0NPTkZJR19TUF9FQ0MgPSAweDAwMDQsCisJRVhUX0hXX0NPTkZJR19TUF9FQ0N4ID0gMHgwMDA2LAorCUVYVF9IV19DT05GSUdfU0laRV9NQVNLID0gMHgwMDYwLAorCUVYVF9IV19DT05GSUdfU0laRV8xMjhNID0gMHgwMDAwLAorCUVYVF9IV19DT05GSUdfU0laRV8yNTZNID0gMHgwMDIwLAorCUVYVF9IV19DT05GSUdfU0laRV81MTJNID0gMHgwMDQwLAorCUVYVF9IV19DT05GSUdfU0laRV9JTlZBTElEID0gMHgwMDYwLAorCUVYVF9IV19DT05GSUdfUEQgPSAweDAwODAsCisJRVhUX0hXX0NPTkZJR19GVyA9IDB4MDIwMCwKKwlFWFRfSFdfQ09ORklHX1VTID0gMHgwNDAwLAorCUVYVF9IV19DT05GSUdfRENTX01BU0sgPSAweDE4MDAsCisJRVhUX0hXX0NPTkZJR19EQ1NfOU1BID0gMHgwMDAwLAorCUVYVF9IV19DT05GSUdfRENTXzE1TUEgPSAweDA4MDAsCisJRVhUX0hXX0NPTkZJR19EQ1NfMThNQSA9IDB4MTAwMCwKKwlFWFRfSFdfQ09ORklHX0RDU18yNE1BID0gMHgxODAwLAorCUVYVF9IV19DT05GSUdfRERTX01BU0sgPSAweDYwMDAsCisJRVhUX0hXX0NPTkZJR19ERFNfOU1BID0gMHgwMDAwLAorCUVYVF9IV19DT05GSUdfRERTXzE1TUEgPSAweDIwMDAsCisJRVhUX0hXX0NPTkZJR19ERFNfMThNQSA9IDB4NDAwMCwKKwlFWFRfSFdfQ09ORklHX0REU18yNE1BID0gMHg2MDAwLAorfTsKKworLyogSW50ZXJuYWxDaGlwQ29uZmlnICovCitlbnVtIHsKKwlJTlRFUk5BTF9DSElQX0RNID0gMHgwMDAxLAorCUlOVEVSTkFMX0NISVBfU0QgPSAweDAwMDIsCisJSU5URVJOQUxfQ0hJUF9SQVBfTUFTSyA9IDB4MDAwQywKKwlJTlRFUk5BTF9DSElQX1JBUF9SUiA9IDB4MDAwMCwKKwlJTlRFUk5BTF9DSElQX1JBUF9OUk0gPSAweDAwMDQsCisJSU5URVJOQUxfQ0hJUF9SQVBfRVJNID0gMHgwMDA4LAorCUlOVEVSTkFMX0NISVBfUkFQX0VSTXggPSAweDAwMEMsCisJSU5URVJOQUxfQ0hJUF9XRSA9IDB4MDAxMCwKKwlJTlRFUk5BTF9DSElQX0VGID0gMHgwMDIwLAorCUlOVEVSTkFMX0NISVBfRlIgPSAweDAwNDAsCisJSU5URVJOQUxfQ0hJUF9GVyA9IDB4MDA4MCwKKwlJTlRFUk5BTF9DSElQX0ZJID0gMHgwMTAwLAorCUlOVEVSTkFMX0NISVBfRlQgPSAweDAyMDAsCit9OworCisvKiBwb3J0Q29udHJvbCAqLworZW51bSB7CisJUE9SVF9DT05UUk9MX0RTID0gMHgwMDAxLAorCVBPUlRfQ09OVFJPTF9ISCA9IDB4MDAwMiwKKwlQT1JUX0NPTlRST0xfRUkgPSAweDAwMDQsCisJUE9SVF9DT05UUk9MX0VUID0gMHgwMDA4LAorCVBPUlRfQ09OVFJPTF9FRiA9IDB4MDAxMCwKKwlQT1JUX0NPTlRST0xfRFJNID0gMHgwMDIwLAorCVBPUlRfQ09OVFJPTF9STEIgPSAweDAwNDAsCisJUE9SVF9DT05UUk9MX1JDQiA9IDB4MDA4MCwKKwlQT1JUX0NPTlRST0xfTUFDID0gMHgwMTAwLAorCVBPUlRfQ09OVFJPTF9JUFYgPSAweDAyMDAsCisJUE9SVF9DT05UUk9MX0lGUCA9IDB4MDQwMCwKKwlQT1JUX0NPTlRST0xfSVRQID0gMHgwODAwLAorCVBPUlRfQ09OVFJPTF9GSSA9IDB4MTAwMCwKKwlQT1JUX0NPTlRST0xfREZQID0gMHgyMDAwLAorCVBPUlRfQ09OVFJPTF9PSSA9IDB4NDAwMCwKKwlQT1JUX0NPTlRST0xfQ0MgPSAweDgwMDAsCit9OworCisvKiBwb3J0U3RhdHVzICovCitlbnVtIHsKKwlQT1JUX1NUQVRVU19TTTAgPSAweDAwMDEsCisJUE9SVF9TVEFUVVNfU00xID0gMHgwMDAyLAorCVBPUlRfU1RBVFVTX1ggPSAweDAwMDgsCisJUE9SVF9TVEFUVVNfREwgPSAweDAwODAsCisJUE9SVF9TVEFUVVNfSUMgPSAweDAyMDAsCisJUE9SVF9TVEFUVVNfTVJDID0gMHgwNDAwLAorCVBPUlRfU1RBVFVTX05MID0gMHgwODAwLAorCVBPUlRfU1RBVFVTX1JFVl9JRF9NQVNLID0gMHg3MDAwLAorCVBPUlRfU1RBVFVTX1JFVl9JRF8xID0gMHgxMDAwLAorCVBPUlRfU1RBVFVTX1JFVl9JRF8yID0gMHgyMDAwLAorCVBPUlRfU1RBVFVTX1JFVl9JRF8zID0gMHgzMDAwLAorCVBPUlRfU1RBVFVTXzY0ID0gMHg4MDAwLAorCVBPUlRfU1RBVFVTX1VQMCA9IDB4MTAwMDAsCisJUE9SVF9TVEFUVVNfQUMwID0gMHgyMDAwMCwKKwlQT1JUX1NUQVRVU19BRTAgPSAweDQwMDAwLAorCVBPUlRfU1RBVFVTX1VQMSA9IDB4MTAwMDAwLAorCVBPUlRfU1RBVFVTX0FDMSA9IDB4MjAwMDAwLAorCVBPUlRfU1RBVFVTX0FFMSA9IDB4NDAwMDAwLAorCVBPUlRfU1RBVFVTX0YwX0VOQUJMRUQgPSAweDEwMDAwMDAsCisJUE9SVF9TVEFUVVNfRjFfRU5BQkxFRCA9IDB4MjAwMDAwMCwKKwlQT1JUX1NUQVRVU19GMl9FTkFCTEVEID0gMHg0MDAwMDAwLAorCVBPUlRfU1RBVFVTX0YzX0VOQUJMRUQgPSAweDgwMDAwMDAsCit9OworCisvKiBtYWNNSUlNZ210Q29udHJvbFJlZyAqLworZW51bSB7CisJTUFDX0FERFJfSU5ESVJFQ1RfUFRSX1JFR19SUF9NQVNLID0gMHgwMDAzLAorCU1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfUlBfUFJJX0xXUiA9IDB4MDAwMCwKKwlNQUNfQUREUl9JTkRJUkVDVF9QVFJfUkVHX1JQX1BSSV9VUFIgPSAweDAwMDEsCisJTUFDX0FERFJfSU5ESVJFQ1RfUFRSX1JFR19SUF9TRUNfTFdSID0gMHgwMDAyLAorCU1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfUlBfU0VDX1VQUiA9IDB4MDAwMywKKwlNQUNfQUREUl9JTkRJUkVDVF9QVFJfUkVHX1BSID0gMHgwMDA4LAorCU1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfU1MgPSAweDAwMTAsCisJTUFDX0FERFJfSU5ESVJFQ1RfUFRSX1JFR19TRSA9IDB4MDAyMCwKKwlNQUNfQUREUl9JTkRJUkVDVF9QVFJfUkVHX1NQID0gMHgwMDQwLAorCU1BQ19BRERSX0lORElSRUNUX1BUUl9SRUdfUEUgPSAweDAwODAsCit9OworCisvKiBtYWNNSUlNZ210Q29udHJvbFJlZyAqLworZW51bSB7CisJTUFDX01JSV9DT05UUk9MX1JDID0gMHgwMDAxLAorCU1BQ19NSUlfQ09OVFJPTF9TQyA9IDB4MDAwMiwKKwlNQUNfTUlJX0NPTlRST0xfQVMgPSAweDAwMDQsCisJTUFDX01JSV9DT05UUk9MX05QID0gMHgwMDA4LAorCU1BQ19NSUlfQ09OVFJPTF9DTEtfU0VMX01BU0sgPSAweDAwNzAsCisJTUFDX01JSV9DT05UUk9MX0NMS19TRUxfRElWMiA9IDB4MDAwMCwKKwlNQUNfTUlJX0NPTlRST0xfQ0xLX1NFTF9ESVY0ID0gMHgwMDEwLAorCU1BQ19NSUlfQ09OVFJPTF9DTEtfU0VMX0RJVjYgPSAweDAwMjAsCisJTUFDX01JSV9DT05UUk9MX0NMS19TRUxfRElWOCA9IDB4MDAzMCwKKwlNQUNfTUlJX0NPTlRST0xfQ0xLX1NFTF9ESVYxMCA9IDB4MDA0MCwKKwlNQUNfTUlJX0NPTlRST0xfQ0xLX1NFTF9ESVYxNCA9IDB4MDA1MCwKKwlNQUNfTUlJX0NPTlRST0xfQ0xLX1NFTF9ESVYyMCA9IDB4MDA2MCwKKwlNQUNfTUlJX0NPTlRST0xfQ0xLX1NFTF9ESVYyOCA9IDB4MDA3MCwKKwlNQUNfTUlJX0NPTlRST0xfUk0gPSAweDgwMDAsCit9OworCisvKiBtYWNNSUlTdGF0dXNSZWcgKi8KK2VudW0geworCU1BQ19NSUlfU1RBVFVTX0JTWSA9IDB4MDAwMSwKKwlNQUNfTUlJX1NUQVRVU19TQyA9IDB4MDAwMiwKKwlNQUNfTUlJX1NUQVRVU19OViA9IDB4MDAwNCwKK307CisKK2VudW0geworCU1BQ19DT05GSUdfUkVHX1BFID0gMHgwMDAxLAorCU1BQ19DT05GSUdfUkVHX1RGID0gMHgwMDAyLAorCU1BQ19DT05GSUdfUkVHX1JGID0gMHgwMDA0LAorCU1BQ19DT05GSUdfUkVHX0ZEID0gMHgwMDA4LAorCU1BQ19DT05GSUdfUkVHX0dNID0gMHgwMDEwLAorCU1BQ19DT05GSUdfUkVHX0xCID0gMHgwMDIwLAorCU1BQ19DT05GSUdfUkVHX1NSID0gMHg4MDAwLAorfTsKKworZW51bSB7CisJTUFDX0hBTEZfRFVQTEVYX1JFR19FRCA9IDB4MTAwMDAsCisJTUFDX0hBTEZfRFVQTEVYX1JFR19OQiA9IDB4MjAwMDAsCisJTUFDX0hBTEZfRFVQTEVYX1JFR19CTkIgPSAweDQwMDAwLAorCU1BQ19IQUxGX0RVUExFWF9SRUdfQUxUID0gMHg4MDAwMCwKK307CisKK2VudW0geworCUlQX0FERFJfSU5ERVhfUkVHX01BU0sgPSAweDAwMGYsCisJSVBfQUREUl9JTkRFWF9SRUdfRlVOQ18wX1BSSSA9IDB4MDAwMCwKKwlJUF9BRERSX0lOREVYX1JFR19GVU5DXzBfU0VDID0gMHgwMDAxLAorCUlQX0FERFJfSU5ERVhfUkVHX0ZVTkNfMV9QUkkgPSAweDAwMDIsCisJSVBfQUREUl9JTkRFWF9SRUdfRlVOQ18xX1NFQyA9IDB4MDAwMywKKwlJUF9BRERSX0lOREVYX1JFR19GVU5DXzJfUFJJID0gMHgwMDA0LAorCUlQX0FERFJfSU5ERVhfUkVHX0ZVTkNfMl9TRUMgPSAweDAwMDUsCisJSVBfQUREUl9JTkRFWF9SRUdfRlVOQ18zX1BSSSA9IDB4MDAwNiwKKwlJUF9BRERSX0lOREVYX1JFR19GVU5DXzNfU0VDID0gMHgwMDA3LAorfTsKKworZW51bSB7CisJUFJPQkVfTVVYX0FERFJfUkVHX01VWF9TRUxfTUFTSyA9IDB4MDAzZiwKKwlQUk9CRV9NVVhfQUREUl9SRUdfU1lTQ0xLID0gMHgwMDAwLAorCVBST0JFX01VWF9BRERSX1JFR19QQ0lDTEsgPSAweDAwNDAsCisJUFJPQkVfTVVYX0FERFJfUkVHX05SWENMSyA9IDB4MDA4MCwKKwlQUk9CRV9NVVhfQUREUl9SRUdfQ1BVQ0xLID0gMHgwMEMwLAorCVBST0JFX01VWF9BRERSX1JFR19NT0RVTEVfU0VMX01BU0sgPSAweDNmMDAsCisJUFJPQkVfTVVYX0FERFJfUkVHX1VQID0gMHg0MDAwLAorCVBST0JFX01VWF9BRERSX1JFR19SRSA9IDB4ODAwMCwKK307CisKK2VudW0geworCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BU0sgPSAweDAxZmYsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMF9UWF9GUkFNRSA9IDB4MDAwMCwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMwX1RYX0JZVEVTID0gMHgwMDAxLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzBfVFhfU1RBVDEgPSAweDAwMDIsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMF9UWF9TVEFUMiA9IDB4MDAwMywKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMwX1RYX1NUQVQzID0gMHgwMDA0LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzBfVFhfU1RBVDQgPSAweDAwMDUsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMF9UWF9TVEFUNSA9IDB4MDAwNiwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMwX1JYX0ZSQU1FID0gMHgwMDA3LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzBfUlhfQllURVMgPSAweDAwMDgsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMF9SWF9TVEFUMSA9IDB4MDAwOSwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMwX1JYX1NUQVQyID0gMHgwMDBhLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzBfUlhfU1RBVDMgPSAweDAwMGIsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMF9SWF9FUlJfQ1JDID0gMHgwMDBjLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzBfUlhfRVJSX0VOQyA9IDB4MDAwZCwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMwX1JYX0VSUl9MRU4gPSAweDAwMGUsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMF9SWF9TVEFUNCA9IDB4MDAwZiwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMxX1RYX0ZSQU1FID0gMHgwMDEwLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzFfVFhfQllURVMgPSAweDAwMTEsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMV9UWF9TVEFUMSA9IDB4MDAxMiwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMxX1RYX1NUQVQyID0gMHgwMDEzLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzFfVFhfU1RBVDMgPSAweDAwMTQsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMV9UWF9TVEFUNCA9IDB4MDAxNSwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMxX1RYX1NUQVQ1ID0gMHgwMDE2LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzFfUlhfRlJBTUUgPSAweDAwMTcsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMV9SWF9CWVRFUyA9IDB4MDAxOCwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMxX1JYX1NUQVQxID0gMHgwMDE5LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzFfUlhfU1RBVDIgPSAweDAwMWEsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMV9SWF9TVEFUMyA9IDB4MDAxYiwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMxX1JYX0VSUl9DUkMgPSAweDAwMWMsCisJU1RBVElTVElDU19JTkRFWF9SRUdfTUFDMV9SWF9FUlJfRU5DID0gMHgwMDFkLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX01BQzFfUlhfRVJSX0xFTiA9IDB4MDAxZSwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19NQUMxX1JYX1NUQVQ0ID0gMHgwMDFmLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX0lQX1RYX1BLVFMgPSAweDAwMjAsCisJU1RBVElTVElDU19JTkRFWF9SRUdfSVBfVFhfQllURVMgPSAweDAwMjEsCisJU1RBVElTVElDU19JTkRFWF9SRUdfSVBfVFhfRlJBRyA9IDB4MDAyMiwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19JUF9SWF9QS1RTID0gMHgwMDIzLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX0lQX1JYX0JZVEVTID0gMHgwMDI0LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX0lQX1JYX0ZSQUcgPSAweDAwMjUsCisJU1RBVElTVElDU19JTkRFWF9SRUdfSVBfREdSTV9SRUFTU0VNQkxZID0gMHgwMDI2LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX0lQX1Y2X1JYX1BLVFMgPSAweDAwMjcsCisJU1RBVElTVElDU19JTkRFWF9SRUdfSVBfUlhfUEtURVJSID0gMHgwMDI4LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX0lQX1JFQVNTRU1CTFlfRVJSID0gMHgwMDI5LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX1RDUF9UWF9TRUcgPSAweDAwMzAsCisJU1RBVElTVElDU19JTkRFWF9SRUdfVENQX1RYX0JZVEVTID0gMHgwMDMxLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX1RDUF9SWF9TRUcgPSAweDAwMzIsCisJU1RBVElTVElDU19JTkRFWF9SRUdfVENQX1JYX0JZVEVTID0gMHgwMDMzLAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX1RDUF9USU1FUl9FWFAgPSAweDAwMzQsCisJU1RBVElTVElDU19JTkRFWF9SRUdfVENQX1JYX0FDSyA9IDB4MDAzNSwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19UQ1BfVFhfQUNLID0gMHgwMDM2LAorCVNUQVRJU1RJQ1NfSU5ERVhfUkVHX1RDUF9SWF9FUlIgPSAweDAwMzcsCisJU1RBVElTVElDU19JTkRFWF9SRUdfVENQX1JYX1dJTl9QUk9CRSA9IDB4MDAzOCwKKwlTVEFUSVNUSUNTX0lOREVYX1JFR19UQ1BfRUNDX0VSUl9DT1JSID0gMHgwMDNmLAorfTsKKworZW51bSB7CisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfT0ZCX1JFX01BQzAgPSAweDAwMDAwMDAxLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX09GQl9SRV9NQUMxID0gMHgwMDAwMDAwMiwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19PRkJfV0UgPSAweDAwMDAwMDA0LAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX0lGQl9SRSA9IDB4MDAwMDAwMDgsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfSUZCX1dFX01BQzAgPSAweDAwMDAwMDEwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX0lGQl9XRV9NQUMxID0gMHgwMDAwMDAyMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19PREVfUkUgPSAweDAwMDAwMDQwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX09ERV9XRSA9IDB4MDAwMDAwODAsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfSURFX1JFID0gMHgwMDAwMDEwMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19JREVfV0UgPSAweDAwMDAwMjAwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX1NERV9SRSA9IDB4MDAwMDA0MDAsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfU0RFX1dFID0gMHgwMDAwMDgwMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19CTEUgPSAweDAwMDAxMDAwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX1NQRSA9IDB4MDAwMDIwMDAsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfRVAwID0gMHgwMDAwNDAwMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19FUDEgPSAweDAwMDA4MDAwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX0lDRSA9IDB4MDAwMTAwMDAsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfSUxFID0gMHgwMDAyMDAwMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19PUEUgPSAweDAwMDQwMDAwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX1RBID0gMHgwMDA4MDAwMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19NQSA9IDB4MDAxMDAwMDAsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfU0NFID0gMHgwMDIwMDAwMCwKKwlQT1JUX0ZBVEFMX0VSUk9SX1NUQVRVU19SUEUgPSAweDAwNDAwMDAwLAorCVBPUlRfRkFUQUxfRVJST1JfU1RBVFVTX01QRSA9IDB4MDA4MDAwMDAsCisJUE9SVF9GQVRBTF9FUlJPUl9TVEFUVVNfT0NFID0gMHgwMTAwMDAwMCwKK307CisKKy8qCisgKiAgcG9ydCBjb250cm9sIGFuZCBzdGF0dXMgcGFnZSAtIHBhZ2UgMAorICovCisKK3N0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgeworCXN0cnVjdCBxbDN4eHhfY29tbW9uX3JlZ2lzdGVycyBDb21tb25SZWdzOworCisJdTMyIEV4dGVybmFsSFdDb25maWc7CisJdTMyIEludGVybmFsQ2hpcENvbmZpZzsKKwl1MzIgcG9ydENvbnRyb2w7CisJdTMyIHBvcnRTdGF0dXM7CisJdTMyIG1hY0FkZHJJbmRpcmVjdFB0clJlZzsKKwl1MzIgbWFjQWRkckRhdGFSZWc7CisJdTMyIG1hY01JSU1nbXRDb250cm9sUmVnOworCXUzMiBtYWNNSUlNZ210QWRkclJlZzsKKwl1MzIgbWFjTUlJTWdtdERhdGFSZWc7CisJdTMyIG1hY01JSVN0YXR1c1JlZzsKKwl1MzIgbWFjMENvbmZpZ1JlZzsKKwl1MzIgbWFjMElwZ0lmZ1JlZzsKKwl1MzIgbWFjMEhhbGZEdXBsZXhSZWc7CisJdTMyIG1hYzBNYXhGcmFtZUxlbmd0aFJlZzsKKwl1MzIgbWFjMFBhdXNlVGhyZXNob2xkUmVnOworCXUzMiBtYWMxQ29uZmlnUmVnOworCXUzMiBtYWMxSXBnSWZnUmVnOworCXUzMiBtYWMxSGFsZkR1cGxleFJlZzsKKwl1MzIgbWFjMU1heEZyYW1lTGVuZ3RoUmVnOworCXUzMiBtYWMxUGF1c2VUaHJlc2hvbGRSZWc7CisJdTMyIGlwQWRkckluZGV4UmVnOworCXUzMiBpcEFkZHJEYXRhUmVnOworCXUzMiBpcFJlYXNzZW1ibHlUaW1lb3V0OworCXUzMiB0Y3BNYXhXaW5kb3c7CisJdTMyIGN1cnJlbnRUY3BUaW1lc3RhbXBbMl07CisJdTMyIGludGVybmFsUmFtUldBZGRyUmVnOworCXUzMiBpbnRlcm5hbFJhbVdEYXRhUmVnOworCXUzMiByZWNsYWltZWRCdWZmZXJBZGRyUmVnTG93OworCXUzMiByZWNsYWltZWRCdWZmZXJBZGRyUmVnSGlnaDsKKwl1MzIgcmVzZXJ2ZWRbMl07CisJdTMyIGZwZ2FSZXZJRDsKKwl1MzIgbG9jYWxSYW1BZGRyOworCXUzMiBsb2NhbFJhbURhdGFBdXRvSW5jcjsKKwl1MzIgbG9jYWxSYW1EYXRhTm9uSW5jcjsKKwl1MzIgZ3BPdXRwdXQ7CisJdTMyIGdwSW5wdXQ7CisJdTMyIHByb2JlTXV4QWRkcjsKKwl1MzIgcHJvYmVNdXhEYXRhOworCXUzMiBzdGF0aXN0aWNzSW5kZXhSZWc7CisJdTMyIHN0YXRpc3RpY3NSZWFkRGF0YVJlZ0F1dG9JbmNyOworCXUzMiBzdGF0aXN0aWNzUmVhZERhdGFSZWdOb0luY3I7CisJdTMyIFBvcnRGYXRhbEVyclN0YXR1czsKK307CisKKy8qCisgKiBwb3J0IGhvc3QgbWVtb3J5IGNvbmZpZyBwYWdlIC0gcGFnZSAxCisgKi8KK3N0cnVjdCBxbDN4eHhfaG9zdF9tZW1vcnlfcmVnaXN0ZXJzIHsKKwlzdHJ1Y3QgcWwzeHh4X2NvbW1vbl9yZWdpc3RlcnMgQ29tbW9uUmVnczsKKworCXUzMiByZXNlcnZlZFsxMl07CisKKwkvKiBOZXR3b3JrIFJlcXVlc3QgUXVldWUgKi8KKwl1MzIgcmVxQ29uc3VtZXJJbmRleDsKKwl1MzIgcmVxQ29uc3VtZXJJbmRleEFkZHJMb3c7CisJdTMyIHJlcUNvbnN1bWVySW5kZXhBZGRySGlnaDsKKwl1MzIgcmVxQmFzZUFkZHJMb3c7CisJdTMyIHJlcUJhc2VBZGRySGlnaDsKKwl1MzIgcmVxTGVuZ3RoOworCisJLyogTmV0d29yayBDb21wbGV0aW9uIFF1ZXVlICovCisJdTMyIHJzcFByb2R1Y2VySW5kZXg7CisJdTMyIHJzcFByb2R1Y2VySW5kZXhBZGRyTG93OworCXUzMiByc3BQcm9kdWNlckluZGV4QWRkckhpZ2g7CisJdTMyIHJzcEJhc2VBZGRyTG93OworCXUzMiByc3BCYXNlQWRkckhpZ2g7CisJdTMyIHJzcExlbmd0aDsKKworCS8qIFJYIExhcmdlIEJ1ZmZlciBRdWV1ZSAqLworCXUzMiByeExhcmdlUUNvbnN1bWVySW5kZXg7CisJdTMyIHJ4TGFyZ2VRQmFzZUFkZHJMb3c7CisJdTMyIHJ4TGFyZ2VRQmFzZUFkZHJIaWdoOworCXUzMiByeExhcmdlUUxlbmd0aDsKKwl1MzIgcnhMYXJnZUJ1ZmZlckxlbmd0aDsKKworCS8qIFJYIFNtYWxsIEJ1ZmZlciBRdWV1ZSAqLworCXUzMiByeFNtYWxsUUNvbnN1bWVySW5kZXg7CisJdTMyIHJ4U21hbGxRQmFzZUFkZHJMb3c7CisJdTMyIHJ4U21hbGxRQmFzZUFkZHJIaWdoOworCXUzMiByeFNtYWxsUUxlbmd0aDsKKwl1MzIgcnhTbWFsbEJ1ZmZlckxlbmd0aDsKKworfTsKKworLyoKKyAqICBwb3J0IGxvY2FsIFJBTSBwYWdlIC0gcGFnZSAyCisgKi8KK3N0cnVjdCBxbDN4eHhfbG9jYWxfcmFtX3JlZ2lzdGVycyB7CisJc3RydWN0IHFsM3h4eF9jb21tb25fcmVnaXN0ZXJzIENvbW1vblJlZ3M7CisJdTMyIGJ1ZmxldFNpemU7CisJdTMyIG1heEJ1ZmxldENvdW50OworCXUzMiBjdXJyZW50QnVmbGV0Q291bnQ7CisJdTMyIHJlc2VydmVkOworCXUzMiBmcmVlQnVmbGV0VGhyZXNob2xkTG93OworCXUzMiBmcmVlQnVmbGV0VGhyZXNob2xkSGlnaDsKKwl1MzIgaXBIYXNoVGFibGVCYXNlOworCXUzMiBpcEhhc2hUYWJsZUNvdW50OworCXUzMiB0Y3BIYXNoVGFibGVCYXNlOworCXUzMiB0Y3BIYXNoVGFibGVDb3VudDsKKwl1MzIgbmNiQmFzZTsKKwl1MzIgbWF4TmNiQ291bnQ7CisJdTMyIGN1cnJlbnROY2JDb3VudDsKKwl1MzIgZHJiQmFzZTsKKwl1MzIgbWF4RHJiQ291bnQ7CisJdTMyIGN1cnJlbnREcmJDb3VudDsKK307CisKKy8qCisgKiBkZWZpbml0aW9ucyBmb3IgU2VtYXBob3JlIGJpdHMgaW4gU2VtYXBob3JlL1NlcmlhbCBOVlJBTSBpbnRlcmZhY2UgcmVnaXN0ZXIKKyAqLworCisjZGVmaW5lIExTXzY0QklUUyh4KSAgICAodTMyKSgweGZmZmZmZmZmICYgKCh1NjQpeCkpCisjZGVmaW5lIE1TXzY0QklUUyh4KSAgICAodTMyKSgweGZmZmZmZmZmICYgKCgodTY0KXgpPj4xNj4+MTYpICkKKworLyoKKyAqIEkvTyByZWdpc3RlcgorICovCisKK2VudW0geworCUNPTlRST0xfUkVHID0gMCwKKwlTVEFUVVNfUkVHID0gMSwKKwlQSFlfU1RBVF9MSU5LX1VQID0gMHgwMDA0LAorCVBIWV9DVFJMX0xPT1BCQUNLID0gMHg0MDAwLAorCisJUEVUQklfQ09OVFJPTF9SRUcgPSAweDAwLAorCVBFVEJJX0NUUkxfU09GVF9SRVNFVCA9IDB4ODAwMCwKKwlQRVRCSV9DVFJMX0FVVE9fTkVHID0gMHgxMDAwLAorCVBFVEJJX0NUUkxfUkVTVEFSVF9ORUcgPSAweDAyMDAsCisJUEVUQklfQ1RSTF9GVUxMX0RVUExFWCA9IDB4MDEwMCwKKwlQRVRCSV9DVFJMX1NQRUVEXzEwMDAgPSAweDAwNDAsCisKKwlQRVRCSV9TVEFUVVNfUkVHID0gMHgwMSwKKwlQRVRCSV9TVEFUX05FR19ET05FID0gMHgwMDIwLAorCVBFVEJJX1NUQVRfTElOS19VUCA9IDB4MDAwNCwKKworCVBFVEJJX05FR19BRFZFUiA9IDB4MDQsCisJUEVUQklfTkVHX1BBVVNFID0gMHgwMDgwLAorCVBFVEJJX05FR19QQVVTRV9NQVNLID0gMHgwMTgwLAorCVBFVEJJX05FR19EVVBMRVggPSAweDAwMjAsCisJUEVUQklfTkVHX0RVUExFWF9NQVNLID0gMHgwMDYwLAorCisJUEVUQklfTkVHX1BBUlRORVIgPSAweDA1LAorCVBFVEJJX05FR19FUlJPUl9NQVNLID0gMHgzMDAwLAorCisJUEVUQklfRVhQQU5TSU9OX1JFRyA9IDB4MDYsCisJUEVUQklfRVhQX1BBR0VfUlggPSAweDAwMDIsCisKKwlQRVRCSV9UQklfQ1RSTCA9IDB4MTEsCisJUEVUQklfVEJJX1JFU0VUID0gMHg4MDAwLAorCVBFVEJJX1RCSV9BVVRPX1NFTlNFID0gMHgwMTAwLAorCVBFVEJJX1RCSV9TRVJERVNfTU9ERSA9IDB4MDAxMCwKKwlQRVRCSV9UQklfU0VSREVTX1dSQVAgPSAweDAwMDIsCisKKwlBVVhfQ09OVFJPTF9TVEFUVVMgPSAweDFjLAorCVBIWV9BVVhfTkVHX0RPTkUgPSAweDgwMDAsCisJUEhZX05FR19QQVJUTkVSID0gNSwKKwlQSFlfQVVYX0RVUExFWF9TVEFUID0gMHgwMDIwLAorCVBIWV9BVVhfU1BFRURfU1RBVCA9IDB4MDAxOCwKKwlQSFlfQVVYX05PX0hXX1NUUkFQID0gMHgwMDA0LAorCVBIWV9BVVhfUkVTRVRfU1RJQ0sgPSAweDAwMDIsCisJUEhZX05FR19QQVVTRSA9IDB4MDQwMCwKKwlQSFlfQ1RSTF9TT0ZUX1JFU0VUID0gMHg4MDAwLAorCVBIWV9ORUdfQURWRVIgPSA0LAorCVBIWV9ORUdfQURWX1NQRUVEID0gMHgwMWUwLAorCVBIWV9DVFJMX1JFU1RBUlRfTkVHID0gMHgwMjAwLAorfTsKK2VudW0geworLyogQU0yOUxWIEZsYXNoIGRlZmluaXRpb25zCSovCisJRk05M0M1NkFfU1RBUlQgPSAweDEsCisvKiBDb21tYW5kcyAqLworCUZNOTNDNTZBX1JFQUQgPSAweDIsCisJRk05M0M1NkFfV0VOID0gMHgwLAorCUZNOTNDNTZBX1dSSVRFID0gMHgxLAorCUZNOTNDNTZBX1dSSVRFX0FMTCA9IDB4MCwKKwlGTTkzQzU2QV9XRFMgPSAweDAsCisJRk05M0M1NkFfRVJBU0UgPSAweDMsCisJRk05M0M1NkFfRVJBU0VfQUxMID0gMHgwLAorLyogQ29tbWFuZCBFeHRlbnRpb25zICovCisJRk05M0M1NkFfV0VOX0VYVCA9IDB4MywKKwlGTTkzQzU2QV9XUklURV9BTExfRVhUID0gMHgxLAorCUZNOTNDNTZBX1dEU19FWFQgPSAweDAsCisJRk05M0M1NkFfRVJBU0VfQUxMX0VYVCA9IDB4MiwKKy8qIFNwZWNpYWwgQml0cyAqLworCUZNOTNDNTZBX1JFQURfRFVNTVlfQklUUyA9IDEsCisJRk05M0M1NkFfUkVBRFkgPSAwLAorCUZNOTNDNTZBX0JVU1kgPSAxLAorCUZNOTNDNTZBX0NNRF9CSVRTID0gMiwKKy8qIEFNMjlMViBGbGFzaCBkZWZpbml0aW9ucwkqLworCUZNOTNDNTZBX1NJWkVfOCA9IDB4MTAwLAorCUZNOTNDNTZBX1NJWkVfMTYgPSAweDgwLAorCUZNOTNDNjZBX1NJWkVfOCA9IDB4MjAwLAorCUZNOTNDNjZBX1NJWkVfMTYgPSAweDEwMCwKKwlGTTkzQzg2QV9TSVpFXzE2ID0gMHg0MDAsCisvKiBBZGRyZXNzIEJpdHMgKi8KKwlGTTkzQzU2QV9OT19BRERSX0JJVFNfMTYgPSA4LAorCUZNOTNDNTZBX05PX0FERFJfQklUU184ID0gOSwKKwlGTTkzQzg2QV9OT19BRERSX0JJVFNfMTYgPSAxMCwKKy8qIERhdGEgQml0cyAqLworCUZNOTNDNTZBX0RBVEFfQklUU18xNiA9IDE2LAorCUZNOTNDNTZBX0RBVEFfQklUU184ID0gOCwKK307CitlbnVtIHsKKy8qIEF1YnVybiBCaXRzICovCisJICAgIEFVQlVSTl9FRVBST01fREkgPSAweDgsCisJQVVCVVJOX0VFUFJPTV9ESV8wID0gMHgwLAorCUFVQlVSTl9FRVBST01fRElfMSA9IDB4OCwKKwlBVUJVUk5fRUVQUk9NX0RPID0gMHg0LAorCUFVQlVSTl9FRVBST01fRE9fMCA9IDB4MCwKKwlBVUJVUk5fRUVQUk9NX0RPXzEgPSAweDQsCisJQVVCVVJOX0VFUFJPTV9DUyA9IDB4MiwKKwlBVUJVUk5fRUVQUk9NX0NTXzAgPSAweDAsCisJQVVCVVJOX0VFUFJPTV9DU18xID0gMHgyLAorCUFVQlVSTl9FRVBST01fQ0xLX1JJU0UgPSAweDEsCisJQVVCVVJOX0VFUFJPTV9DTEtfRkFMTCA9IDB4MCwKK307CitlbnVtIHtFRVBST01fU0laRSA9IEZNOTNDODZBX1NJWkVfMTYsCisJRUVQUk9NX05PX0FERFJfQklUUyA9IEZNOTNDODZBX05PX0FERFJfQklUU18xNiwKKwlFRVBST01fTk9fREFUQV9CSVRTID0gRk05M0M1NkFfREFUQV9CSVRTXzE2LAorfTsKKworLyoKKyAqICBNQUMgQ29uZmlnIGRhdGEgc3RydWN0dXJlCisgKi8KKyAgICBzdHJ1Y3QgZWVwcm9tX3BvcnRfY2ZnIHsKKwl1MTYgZXRoZXJNdHVfbWFjOworCXUxNiBwYXVzZVRocmVzaG9sZF9tYWM7CisJdTE2IHJlc3VtZVRocmVzaG9sZF9tYWM7CisJdTE2IHBvcnRDb25maWd1cmF0aW9uOworI2RlZmluZSBQT1JUX0NPTkZJR19BVVRPX05FR19FTkFCTEVEICAgICAgICAweDgwMDAKKyNkZWZpbmUgUE9SVF9DT05GSUdfU1lNX1BBVVNFX0VOQUJMRUQgICAgICAgMHg0MDAwCisjZGVmaW5lIFBPUlRfQ09ORklHX0ZVTExfRFVQTEVYX0VOQUJMRUQgICAgIDB4MjAwMAorI2RlZmluZSBQT1JUX0NPTkZJR19IQUxGX0RVUExFWF9FTkFCTEVEICAgICAweDEwMDAKKyNkZWZpbmUgUE9SVF9DT05GSUdfMTAwME1CX1NQRUVEICAgICAgICAgICAgMHgwNDAwCisjZGVmaW5lIFBPUlRfQ09ORklHXzEwME1CX1NQRUVEICAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBQT1JUX0NPTkZJR18xME1CX1NQRUVEICAgICAgICAgICAgICAweDAxMDAKKyNkZWZpbmUgUE9SVF9DT05GSUdfTElOS19TUEVFRF9NQVNLICAgICAgICAgMHgwRjAwCisJdTE2IHJlc2VydmVkWzEyXTsKKworfTsKKworLyoKKyAqIEJJT1MgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGVlcHJvbV9iaW9zX2NmZyB7CisJdTE2IFNwaW5EbHlFbjoxLCBkaXNCaW9zOjEsIEVuTWVtTWFwOjEsIEVuU2VsZWN0Qm9vdDoxLCBSZXNlcnZlZDoxMjsKKworCXU4IGJvb3RJRDA6NywgYm9vZElEMFZhbGlkOjE7CisJdTggYm9vdEx1bjBbOF07CisKKwl1OCBib290SUQxOjcsIGJvb2RJRDFWYWxpZDoxOworCXU4IGJvb3RMdW4xWzhdOworCisJdTE2IE1heEx1bnNUcmd0OworCXU4IHJlc2VydmVkWzEwXTsKK307CisKKy8qCisgKiAgRnVuY3Rpb24gU3BlY2lmaWMgRGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RydWN0IGVlcHJvbV9mdW5jdGlvbl9jZmcgeworCXU4IHJlc2VydmVkWzMwXTsKKwl1OCBtYWNBZGRyZXNzWzZdOworCXU4IG1hY0FkZHJlc3NTZWNvbmRhcnlbNl07CisKKwl1MTYgc3Vic3lzVmVuZG9ySWQ7CisJdTE2IHN1YnN5c0RldmljZUlkOworfTsKKworLyoKKyAqICBFRVBST00gZm9ybWF0CisgKi8KK3N0cnVjdCBlZXByb21fZGF0YSB7CisJdTggYXNpY0lkWzRdOworCXU4IHZlcnNpb247CisJdTggbnVtUG9ydHM7CisJdTE2IGJvYXJkSWQ7CisKKyNkZWZpbmUgRUVQUk9NX0JPQVJESURfU1RSX1NJWkUgICAxNgorI2RlZmluZSBFRVBST01fU0VSSUFMX05VTV9TSVpFICAgIDE2CisKKwl1OCBib2FyZElkU3RyWzE2XTsKKwl1OCBzZXJpYWxOdW1iZXJbMTZdOworCXUxNiBleHRId0NvbmZpZzsKKwlzdHJ1Y3QgZWVwcm9tX3BvcnRfY2ZnIG1hY0NmZ19wb3J0MDsKKwlzdHJ1Y3QgZWVwcm9tX3BvcnRfY2ZnIG1hY0NmZ19wb3J0MTsKKwl1MTYgYnVmbGV0U2l6ZTsKKwl1MTYgYnVmbGV0Q291bnQ7CisJdTE2IHRjcFdpbmRvd1RocmVzaG9sZDUwOworCXUxNiB0Y3BXaW5kb3dUaHJlc2hvbGQyNTsKKwl1MTYgdGNwV2luZG93VGhyZXNob2xkMDsKKwl1MTYgaXBIYXNoVGFibGVCYXNlSGk7CisJdTE2IGlwSGFzaFRhYmxlQmFzZUxvOworCXUxNiBpcEhhc2hUYWJsZVNpemU7CisJdTE2IHRjcEhhc2hUYWJsZUJhc2VIaTsKKwl1MTYgdGNwSGFzaFRhYmxlQmFzZUxvOworCXUxNiB0Y3BIYXNoVGFibGVTaXplOworCXUxNiBuY2JUYWJsZUJhc2VIaTsKKwl1MTYgbmNiVGFibGVCYXNlTG87CisJdTE2IG5jYlRhYmxlU2l6ZTsKKwl1MTYgZHJiVGFibGVCYXNlSGk7CisJdTE2IGRyYlRhYmxlQmFzZUxvOworCXUxNiBkcmJUYWJsZVNpemU7CisJdTE2IHJlc2VydmVkXzE0Mls0XTsKKwl1MTYgaXBSZWFzc2VtYmx5VGltZW91dDsKKwl1MTYgdGNwTWF4V2luZG93U2l6ZTsKKwl1MTYgaXBTZWN1cml0eTsKKyNkZWZpbmUgSVBTRUNfQ09ORklHX1BSRVNFTlQgMHgwMDAxCisJdTggcmVzZXJ2ZWRfMTU2WzI5NF07CisJdTE2IHFEZWJ1Z1s4XTsKKwlzdHJ1Y3QgZWVwcm9tX2Z1bmN0aW9uX2NmZyBmdW5jQ2ZnX2ZuMDsKKwl1MTYgcmVzZXJ2ZWRfNTEwOworCXU4IG9lbVNwYWNlWzQzMl07CisJc3RydWN0IGVlcHJvbV9iaW9zX2NmZyBiaW9zQ2ZnX2ZuMTsKKwlzdHJ1Y3QgZWVwcm9tX2Z1bmN0aW9uX2NmZyBmdW5jQ2ZnX2ZuMTsKKwl1MTYgcmVzZXJ2ZWRfMTAyMjsKKwl1OCByZXNlcnZlZF8xMDI0WzQ2NF07CisJc3RydWN0IGVlcHJvbV9mdW5jdGlvbl9jZmcgZnVuY0NmZ19mbjI7CisJdTE2IHJlc2VydmVkXzE1MzQ7CisJdTggcmVzZXJ2ZWRfMTUzNls0MzJdOworCXN0cnVjdCBlZXByb21fYmlvc19jZmcgYmlvc0NmZ19mbjM7CisJc3RydWN0IGVlcHJvbV9mdW5jdGlvbl9jZmcgZnVuY0NmZ19mbjM7CisJdTE2IGNoZWNrc3VtOworfTsKKworLyoKKyAqIEdlbmVyYWwgZGVmaW5pdGlvbnMuLi4KKyAqLworCisvKgorICogQmVsb3cgYXJlIGEgbnVtYmVyIGNvbXBpbGVyIHN3aXRjaGVzIGZvciBjb250cm9sbGluZyBkcml2ZXIgYmVoYXZpb3IuCisgKiBTb21lIGFyZSBub3Qgc3VwcG9ydGVkIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyBhbmQgYXJlIG5vdGF0ZWQgYXMgc3VjaC4KKyAqLworCisjZGVmaW5lIFFMM1hYWF9WRU5ET1JfSUQgICAgMHgxMDc3CisjZGVmaW5lIFFMMzAyMl9ERVZJQ0VfSUQgICAgMHgzMDIyCisKKy8qIE1UVSAmIEZyYW1lIFNpemUgc3R1ZmYgKi8KKyNkZWZpbmUgTk9STUFMX01UVV9TSVpFIAkJRVRIX0RBVEFfTEVOCisjZGVmaW5lIEpVTUJPX01UVV9TSVpFIAkJCTkwMDAKKyNkZWZpbmUgVkxBTl9JRF9MRU4JCQkgICAgMgorCisvKiBSZXF1ZXN0IFF1ZXVlIFJlbGF0ZWQgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTlVNX1JFUV9RX0VOVFJJRVMgICAyNTYJLyogc28gdGhhdCA2NCAqIDY0ICA9IDQwOTYgKDEgcGFnZSkgKi8KKworLyogUmVzcG9uc2UgUXVldWUgUmVsYXRlZCBEZWZpbml0aW9ucyAqLworI2RlZmluZSBOVU1fUlNQX1FfRU5UUklFUyAgIDI1NgkvKiBzbyB0aGF0IDI1NiAqIDE2ICA9IDQwOTYgKDEgcGFnZSkgKi8KKworLyogVHJhbnNtaXQgYW5kIFJlY2VpdmUgQnVmZmVycyAqLworI2RlZmluZSBOVU1fTEJVRlFfRU5UUklFUyAgIAkxMjgKKyNkZWZpbmUgTlVNX1NCVUZRX0VOVFJJRVMgICAJNjQKKyNkZWZpbmUgUUxfU01BTExfQlVGRkVSX1NJWkUgICAgMzIKKyNkZWZpbmUgUUxfQUREUl9FTEVfUEVSX0JVRlFfRU5UUlkgXAorKHNpemVvZihzdHJ1Y3QgbHJnX2J1Zl9xX2VudHJ5KSAvIHNpemVvZihzdHJ1Y3QgYnVmcV9hZGRyX2VsZW1lbnQpKQorICAgIC8qIEVhY2ggc2VuZCBoYXMgYXQgbGVhc3QgY29udHJvbCBibG9jay4gIFRoaXMgaXMgaG93IG1hbnkgd2Uga2VlcC4gKi8KKyNkZWZpbmUgTlVNX1NNQUxMX0JVRkZFUlMgICAgIAlOVU1fU0JVRlFfRU5UUklFUyAqIFFMX0FERFJfRUxFX1BFUl9CVUZRX0VOVFJZCisjZGVmaW5lIE5VTV9MQVJHRV9CVUZGRVJTICAgICAJTlVNX0xCVUZRX0VOVFJJRVMgKiBRTF9BRERSX0VMRV9QRVJfQlVGUV9FTlRSWQorI2RlZmluZSBRTF9IRUFERVJfU1BBQ0UgMzIJLyogbWFrZSBoZWFkZXIgc3BhY2UgYXQgdG9wIG9mIHNrYi4gKi8KKy8qCisgKiBMYXJnZSAmIFNtYWxsIEJ1ZmZlcnMgZm9yIFJlY2VpdmVzCisgKi8KK3N0cnVjdCBscmdfYnVmX3FfZW50cnkgeworCisJdTMyIGFkZHIwX2xvd2VyOworI2RlZmluZSBJQUxfTEFTVF9FTlRSWSAweDAwMDAwMDAxCisjZGVmaW5lIElBTF9DT05UX0VOVFJZIDB4MDAwMDAwMDIKKyNkZWZpbmUgSUFMX0ZMQUdfTUFTSyAgMHgwMDAwMDAwMworCXUzMiBhZGRyMF91cHBlcjsKKwl1MzIgYWRkcjFfbG93ZXI7CisJdTMyIGFkZHIxX3VwcGVyOworCXUzMiBhZGRyMl9sb3dlcjsKKwl1MzIgYWRkcjJfdXBwZXI7CisJdTMyIGFkZHIzX2xvd2VyOworCXUzMiBhZGRyM191cHBlcjsKKwl1MzIgYWRkcjRfbG93ZXI7CisJdTMyIGFkZHI0X3VwcGVyOworCXUzMiBhZGRyNV9sb3dlcjsKKwl1MzIgYWRkcjVfdXBwZXI7CisJdTMyIGFkZHI2X2xvd2VyOworCXUzMiBhZGRyNl91cHBlcjsKKwl1MzIgYWRkcjdfbG93ZXI7CisJdTMyIGFkZHI3X3VwcGVyOworCit9OworCitzdHJ1Y3QgYnVmcV9hZGRyX2VsZW1lbnQgeworCXUzMiBhZGRyX2xvdzsKKwl1MzIgYWRkcl9oaWdoOworfTsKKworI2RlZmluZSBRTF9OT19SRVNFVAkJCTAKKyNkZWZpbmUgUUxfRE9fUkVTRVQJCQkxCisKK2VudW0gbGlua19zdGF0ZV90IHsKKwlMU19VTktOT1dOID0gMCwKKwlMU19ET1dOLAorCUxTX0RFR1JBREUsCisJTFNfUkVDT1ZFUiwKKwlMU19VUCwKK307CisKK3N0cnVjdCBxbF9yY3ZfYnVmX2NiIHsKKwlzdHJ1Y3QgcWxfcmN2X2J1Zl9jYiAqbmV4dDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKG1hcGFkZHIpOworCSBERUNMQVJFX1BDSV9VTk1BUF9MRU4obWFwbGVuKTsKKwlfX2xlMzIgYnVmX3BoeV9hZGRyX2xvdzsKKwlfX2xlMzIgYnVmX3BoeV9hZGRyX2hpZ2g7CisJaW50IGluZGV4OworfTsKKworc3RydWN0IHFsX3R4X2J1Zl9jYiB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3Qgb2JfbWFjX2lvY2JfcmVxICpxdWV1ZV9lbnRyeSA7CisJIERFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwYWRkcik7CisJIERFQ0xBUkVfUENJX1VOTUFQX0xFTihtYXBsZW4pOworfTsKKworLyogZGVmaW5pdGlvbnMgZm9yIHR5cGUgZmllbGQgKi8KKyNkZWZpbmUgUUxfQlVGX1RZUEVfTUFDSU9DQiAweDAxCisjZGVmaW5lIFFMX0JVRl9UWVBFX0lQSU9DQiAgMHgwMgorI2RlZmluZSBRTF9CVUZfVFlQRV9UQ1BJT0NCIDB4MDMKKworLyogcWRldi0+ZmxhZ3MgZGVmaW5pdGlvbnMuICovCitlbnVtIHsgUUxfUkVTRVRfRE9ORSA9IDEsCS8qIFJlc2V0IGZpbmlzaGVkLiAqLworCVFMX1JFU0VUX0FDVElWRSA9IDIsCS8qIFdhaXRpbmcgZm9yIHJlc2V0IHRvIGZpbmlzaC4gKi8KKwlRTF9SRVNFVF9TVEFSVCA9IDMsCS8qIFBsZWFzZSByZXNldCB0aGUgY2hpcC4gKi8KKwlRTF9SRVNFVF9QRVJfU0NTSSA9IDQsCS8qIFNDU0kgZHJpdmVyIHJlcXVlc3RzIHJlc2V0LiAqLworCVFMX1RYX1RJTUVPVVQgPSA1LAkvKiBUaW1lb3V0IGluIHByb2dyZXNzLiAqLworCVFMX0xJTktfTUFTVEVSID0gNiwJLyogVGhpcyBkcml2ZXIgY29udHJvbHMgdGhlIGxpbmsuICovCisJUUxfQURBUFRFUl9VUCA9IDcsCS8qIEFkYXB0ZXIgaGFzIGJlZW4gYnJvdWdodCB1cC4gKi8KKwlRTF9USFJFQURfVVAgPSA4LAkvKiBUaGlzIGZsYWcgaXMgYXZhaWxhYmxlLiAqLworCVFMX0xJTktfVVAgPSA5LAkvKiBMaW5rIFN0YXR1cy4gKi8KKwlRTF9BTExPQ19SRVFfUlNQX1FfRE9ORSA9IDEwLAorCVFMX0FMTE9DX0JVRlFTX0RPTkUgPSAxMSwKKwlRTF9BTExPQ19TTUFMTF9CVUZfRE9ORSA9IDEyLAorCVFMX0xJTktfT1BUSUNBTCA9IDEzLAorCVFMX01TSV9FTkFCTEVEID0gMTQsCit9OworCisvKgorICogcWwzX2FkYXB0ZXIgLSBUaGUgbWFpbiBBZGFwdGVyIHN0cnVjdHVyZSBkZWZpbml0aW9uLgorICogVGhpcyBzdHJ1Y3R1cmUgaGFzIGFsbCBmaWVsZHMgcmVsZXZhbnQgdG8gdGhlIGhhcmR3YXJlLgorICovCisKK3N0cnVjdCBxbDNfYWRhcHRlciB7CisJdTMyIHJlc2VydmVkXzAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBQQ0kgQ29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsJLyogUGFyZW50IE5FVCBkZXZpY2UgKi8KKworCS8qIEhhcmR3YXJlIGluZm9ybWF0aW9uICovCisJdTggY2hpcF9yZXZfaWQ7CisJdTggcGNpX3Nsb3Q7CisJdTggcGNpX3dpZHRoOworCXU4IHBjaV94OworCXUzMiBtc2k7CisJaW50IGluZGV4OworCXN0cnVjdCB0aW1lcl9saXN0IGFkYXB0ZXJfdGltZXI7CS8qIHRpbWVyIHVzZWQgZm9yIHZhcmlvdXMgZnVuY3Rpb25zICovCisKKwlzcGlubG9ja190IGFkYXB0ZXJfbG9jazsKKwlzcGlubG9ja190IGh3X2xvY2s7CisKKwkvKiBQQ0kgQnVzIFJlbGF0aXZlIFJlZ2lzdGVyIEFkZHJlc3NlcyAqLworCXU4ICptbWFwX3ZpcnRfYmFzZTsJLyogc3RvcmVzIHJldHVybiB2YWx1ZSBmcm9tIGlvcmVtYXAoKSAqLworCXN0cnVjdCBxbDN4eHhfcG9ydF9yZWdpc3RlcnMgX19pb21lbSAqbWVtX21hcF9yZWdpc3RlcnM7CisJdTMyIGN1cnJlbnRfcGFnZTsJLyogdHJhY2tzIGN1cnJlbnQgcmVnaXN0ZXIgcGFnZSAqLworCisJdTMyIG1zZ19lbmFibGU7CisJdTggcmVzZXJ2ZWRfMDFbMl07CisJdTggcmVzZXJ2ZWRfMDJbMl07CisKKwkvKiBQYWdlIGZvciBTaGFkb3cgUmVnaXN0ZXJzICovCisJdm9pZCAqc2hhZG93X3JlZ192aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBzaGFkb3dfcmVnX3BoeV9hZGRyOworCisJLyogTmV0IFJlcXVlc3QgUXVldWUgKi8KKwl1MzIgcmVxX3Ffc2l6ZTsKKwl1MzIgcmVzZXJ2ZWRfMDM7CisJc3RydWN0IG9iX21hY19pb2NiX3JlcSAqcmVxX3FfdmlydF9hZGRyOworCWRtYV9hZGRyX3QgcmVxX3FfcGh5X2FkZHI7CisJdTE2IHJlcV9wcm9kdWNlcl9pbmRleDsKKwl1MTYgcmVzZXJ2ZWRfMDQ7CisJdTE2ICpwcmVxX2NvbnN1bWVyX2luZGV4OworCXUzMiByZXFfY29uc3VtZXJfaW5kZXhfcGh5X2FkZHJfaGlnaDsKKwl1MzIgcmVxX2NvbnN1bWVyX2luZGV4X3BoeV9hZGRyX2xvdzsKKwlhdG9taWNfdCB0eF9jb3VudDsKKwlzdHJ1Y3QgcWxfdHhfYnVmX2NiIHR4X2J1ZltOVU1fUkVRX1FfRU5UUklFU107CisKKwkvKiBOZXQgUmVzcG9uc2UgUXVldWUgKi8KKwl1MzIgcnNwX3Ffc2l6ZTsKKwl1MzIgZWVwcm9tX2NtZF9kYXRhOworCXN0cnVjdCBuZXRfcnNwX2lvY2IgKnJzcF9xX3ZpcnRfYWRkcjsKKwlkbWFfYWRkcl90IHJzcF9xX3BoeV9hZGRyOworCXN0cnVjdCBuZXRfcnNwX2lvY2IgKnJzcF9jdXJyZW50OworCXUxNiByc3BfY29uc3VtZXJfaW5kZXg7CisJdTE2IHJlc2VydmVkXzA2OworCXUzMiAqcHJzcF9wcm9kdWNlcl9pbmRleDsKKwl1MzIgcnNwX3Byb2R1Y2VyX2luZGV4X3BoeV9hZGRyX2hpZ2g7CisJdTMyIHJzcF9wcm9kdWNlcl9pbmRleF9waHlfYWRkcl9sb3c7CisKKwkvKiBMYXJnZSBCdWZmZXIgUXVldWUgKi8KKwl1MzIgbHJnX2J1Zl9xX2FsbG9jX3NpemU7CisJdTMyIGxyZ19idWZfcV9zaXplOworCXZvaWQgKmxyZ19idWZfcV9hbGxvY192aXJ0X2FkZHI7CisJdm9pZCAqbHJnX2J1Zl9xX3ZpcnRfYWRkcjsKKwlkbWFfYWRkcl90IGxyZ19idWZfcV9hbGxvY19waHlfYWRkcjsKKwlkbWFfYWRkcl90IGxyZ19idWZfcV9waHlfYWRkcjsKKwl1MzIgbHJnX2J1Zl9xX3Byb2R1Y2VyX2luZGV4OworCXUzMiBscmdfYnVmX3JlbGVhc2VfY250OworCXN0cnVjdCBidWZxX2FkZHJfZWxlbWVudCAqbHJnX2J1Zl9uZXh0X2ZyZWU7CisKKwkvKiBMYXJnZSAoUmVjZWl2ZSkgQnVmZmVycyAqLworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiIGxyZ19idWZbTlVNX0xBUkdFX0JVRkZFUlNdOworCXN0cnVjdCBxbF9yY3ZfYnVmX2NiICpscmdfYnVmX2ZyZWVfaGVhZDsKKwlzdHJ1Y3QgcWxfcmN2X2J1Zl9jYiAqbHJnX2J1Zl9mcmVlX3RhaWw7CisJdTMyIGxyZ19idWZfZnJlZV9jb3VudDsKKwl1MzIgbHJnX2J1ZmZlcl9sZW47CisJdTMyIGxyZ19idWZfaW5kZXg7CisJdTMyIGxyZ19idWZfc2tiX2NoZWNrOworCisJLyogU21hbGwgQnVmZmVyIFF1ZXVlICovCisJdTMyIHNtYWxsX2J1Zl9xX2FsbG9jX3NpemU7CisJdTMyIHNtYWxsX2J1Zl9xX3NpemU7CisJdTMyIHNtYWxsX2J1Zl9xX3Byb2R1Y2VyX2luZGV4OworCXZvaWQgKnNtYWxsX2J1Zl9xX2FsbG9jX3ZpcnRfYWRkcjsKKwl2b2lkICpzbWFsbF9idWZfcV92aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBzbWFsbF9idWZfcV9hbGxvY19waHlfYWRkcjsKKwlkbWFfYWRkcl90IHNtYWxsX2J1Zl9xX3BoeV9hZGRyOworCXUzMiBzbWFsbF9idWZfaW5kZXg7CisKKwkvKiBTbWFsbCAoUmVjZWl2ZSkgQnVmZmVycyAqLworCXZvaWQgKnNtYWxsX2J1Zl92aXJ0X2FkZHI7CisJZG1hX2FkZHJfdCBzbWFsbF9idWZfcGh5X2FkZHI7CisJdTMyIHNtYWxsX2J1Zl9waHlfYWRkcl9sb3c7CisJdTMyIHNtYWxsX2J1Zl9waHlfYWRkcl9oaWdoOworCXUzMiBzbWFsbF9idWZfcmVsZWFzZV9jbnQ7CisJdTMyIHNtYWxsX2J1Zl90b3RhbF9zaXplOworCisJLyogSVNSIHJlbGF0ZWQsIHNhdmVzIHN0YXR1cyBmb3IgRFBDLiAqLworCXUzMiBjb250cm9sX3N0YXR1czsKKworCXN0cnVjdCBlZXByb21fZGF0YSBudnJhbV9kYXRhOworCXN0cnVjdCB0aW1lcl9saXN0IGlvY3RsX3RpbWVyOworCXUzMiBwb3J0X2xpbmtfc3RhdGU7CisJdTMyIGxhc3RfcnNwX29mZnNldDsKKworCS8qIDQwMjIgc3BlY2lmaWMgKi8KKwl1MzIgbWFjX2luZGV4OwkJLyogRHJpdmVyJ3MgTUFDIG51bWJlciBjYW4gYmUgMCBvciAxIGZvciBmaXJzdCBhbmQgc2Vjb25kIG5ldHdvcmtpbmcgZnVuY3Rpb25zIHJlc3BlY3RpdmVseSAqLworCXUzMiBQSFlBZGRyOwkJLyogQWRkcmVzcyBvZiBQSFkgMHgxZTAwIFBvcnQgMCBhbmQgMHgxZjAwIFBvcnQgMSAqLworCXUzMiBtYWNfb2Jfb3Bjb2RlOwkvKiBPcGNvZGUgdG8gdXNlIG9uIG1hYyB0cmFuc21pc3Npb24gKi8KKwl1MzIgdGNwX29iX29wY29kZTsJLyogT3Bjb2RlIHRvIHVzZSBvbiB0Y3AgdHJhbnNtaXNzaW9uICovCisJdTMyIHVwZGF0ZV9vYl9vcGNvZGU7CS8qIE9wY29kZSB0byB1c2UgZm9yIHVwZGF0aW5nIE5DQiAqLworCXUzMiBtYl9iaXRfbWFzazsJLyogTUEgQml0cyBtYXNrIHRvIHVzZSBvbiB0cmFuc21pc3Npb24gKi8KKwl1MzIgbnVtUG9ydHM7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzZXRfd29yazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfdGltZW91dF93b3JrOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKK307CisKKyNlbmRpZgkJCQkvKiBfUUxBM1hYWF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggOTNjZDFmNC4uN2FjNTk5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xMTI0LDcgKzExMjQsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gcnRsODE2OV9nZXRfZHJ2aW5mbywKIAkuZ2V0X3JlZ3NfbGVuCQk9IHJ0bDgxNjlfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLApAQCAtMjkxMyw3ICsyOTEzLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiBydGw4MTY5X2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcnRsODE2OV9wY2lfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnRsODE2OV9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9yaW9uZXQuYyBiL2RyaXZlcnMvbmV0L3Jpb25ldC5jCmluZGV4IDEyY2RlMDYuLmI3ZmY0ODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Jpb25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3Jpb25ldC5jCkBAIC00MjcsNyArNDI3LDcgQEAKIAlybmV0LT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgcmlvbmV0X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyByaW9uZXRfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gcmlvbmV0X2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwgPSByaW9uZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwgPSByaW9uZXRfc2V0X21zZ2xldmVsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcnJ1bm5lci5jIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5jCmluZGV4IGMzZWQ3MzQuLjYxMDhiYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3JydW5uZXIuYworKysgYi9kcml2ZXJzL25ldC9ycnVubmVyLmMKQEAgLTIxNCwxMyArMjE0LDEzIEBACiAKICBvdXQ6CiAJaWYgKHJycHJpdi0+cnhfcmluZykKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9UT1RBTF9TSVpFLCBycnByaXYtPnJ4X3JpbmcsIAorCQlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFJYX1RPVEFMX1NJWkUsIHJycHJpdi0+cnhfcmluZywKIAkJCQkgICAgcnJwcml2LT5yeF9yaW5nX2RtYSk7CiAJaWYgKHJycHJpdi0+dHhfcmluZykKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBUWF9UT1RBTF9TSVpFLCBycnByaXYtPnR4X3JpbmcsCiAJCQkJICAgIHJycHJpdi0+dHhfcmluZ19kbWEpOwogCWlmIChycnByaXYtPnJlZ3MpCi0JCWlvdW5tYXAocnJwcml2LT5yZWdzKTsJCisJCWlvdW5tYXAocnJwcml2LT5yZWdzKTsKIAlpZiAocGRldikgewogCQlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogCQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC01NTksNyArNTU5LDcgQEAKIAkgIGh0b25zKHJyX3JlYWRfZWVwcm9tX3dvcmQocnJwcml2LCAmaHctPm1hbmYuQm9hcmRVTEEpKTsKIAkqKHUzMiAqKShkZXYtPmRldl9hZGRyKzIpID0KIAkgIGh0b25sKHJyX3JlYWRfZWVwcm9tX3dvcmQocnJwcml2LCAmaHctPm1hbmYuQm9hcmRVTEFbNF0pKTsKLQkKKwogCXByaW50aygiICBNQUM6ICIpOwogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKQEAgLTczNiw4ICs3MzYsOCBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcnJwcml2LT5yeF9za2J1ZmZbaV07CiAKIAkJaWYgKHNrYikgewotCSAgICAgICAgCXBjaV91bm1hcF9zaW5nbGUocnJwcml2LT5wY2lfZGV2LCAKLQkJCQkJIHJycHJpdi0+cnhfcmluZ1tpXS5hZGRyLmFkZHJsbywgCisJICAgICAgICAJcGNpX3VubWFwX3NpbmdsZShycnByaXYtPnBjaV9kZXYsCisJCQkJCSBycnByaXYtPnJ4X3JpbmdbaV0uYWRkci5hZGRybG8sCiAJCQkJCSBkZXYtPm10dSArIEhJUFBJX0hMRU4sCiAJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJcnJwcml2LT5yeF9yaW5nW2ldLnNpemUgPSAwOwpAQCAtNzkyLDE0ICs3OTIsMTQgQEAKIAkJY2FzZSBFX0lOVEVSTl9FUlI6CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBISVBQSSBJbnRlcm5hbCBOSUMgZXJyb3JcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCXdyaXRlbChyZWFkbCgmcmVncy0+SG9zdEN0cmwpfEhBTFRfTklDfFJSX0NMRUFSX0lOVCwgCisJCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsCiAJCQkgICAgICAgJnJlZ3MtPkhvc3RDdHJsKTsKIAkJCXdtYigpOwogCQkJYnJlYWs7CiAJCWNhc2UgRV9IT1NUX0VSUjoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEhvc3Qgc29mdHdhcmUgZXJyb3JcbiIsCiAJCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCXdyaXRlbChyZWFkbCgmcmVncy0+SG9zdEN0cmwpfEhBTFRfTklDfFJSX0NMRUFSX0lOVCwgCisJCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsCiAJCQkgICAgICAgJnJlZ3MtPkhvc3RDdHJsKTsKIAkJCXdtYigpOwogCQkJYnJlYWs7CkBAIC04MjMsNyArODIzLDcgQEAKIAkJY2FzZSBFX0lOVF9QUlRZOgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSElQUEkgSW50ZXJuYWwgUGFyaXR5IGVycm9yXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsIAorCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULAogCQkJICAgICAgICZyZWdzLT5Ib3N0Q3RybCk7CiAJCQl3bWIoKTsKIAkJCWJyZWFrOwpAQCAtODM1LDI4ICs4MzUsMjggQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBMaW5rIGxvc3QgZHVyaW5nIHRyYW5zbWl0XG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQlycnByaXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7Ci0JCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsIAorCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULAogCQkJICAgICAgICZyZWdzLT5Ib3N0Q3RybCk7CiAJCQl3bWIoKTsKIAkJCWJyZWFrOwogCQljYXNlIEVfVFhfSU5WX1JORzoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgc2VuZCByaW5nIGJsb2NrXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsIAorCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULAogCQkJICAgICAgICZyZWdzLT5Ib3N0Q3RybCk7CiAJCQl3bWIoKTsKIAkJCWJyZWFrOwogCQljYXNlIEVfVFhfSU5WX0JVRjoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgc2VuZCBidWZmZXIgYWRkcmVzc1xuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULCAKKwkJCXdyaXRlbChyZWFkbCgmcmVncy0+SG9zdEN0cmwpfEhBTFRfTklDfFJSX0NMRUFSX0lOVCwKIAkJCSAgICAgICAmcmVncy0+SG9zdEN0cmwpOwogCQkJd21iKCk7CiAJCQlicmVhazsKIAkJY2FzZSBFX1RYX0lOVl9EU0M6CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGRlc2NyaXB0b3IgYWRkcmVzc1xuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUpOwotCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULCAKKwkJCXdyaXRlbChyZWFkbCgmcmVncy0+SG9zdEN0cmwpfEhBTFRfTklDfFJSX0NMRUFSX0lOVCwKIAkJCSAgICAgICAmcmVncy0+SG9zdEN0cmwpOwogCQkJd21iKCk7CiAJCQlicmVhazsKQEAgLTkxMCwyMSArOTEwLDIxIEBACiAJCWNhc2UgRV9SWF9JTlZfQlVGOgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCByZWNlaXZlIGJ1ZmZlciAiCiAJCQkgICAgICAgImFkZHJlc3NcbiIsIGRldi0+bmFtZSk7Ci0JCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsIAorCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULAogCQkJICAgICAgICZyZWdzLT5Ib3N0Q3RybCk7CiAJCQl3bWIoKTsKIAkJCWJyZWFrOwogCQljYXNlIEVfUlhfSU5WX0RTQzoKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgcmVjZWl2ZSBkZXNjcmlwdG9yICIKIAkJCSAgICAgICAiYWRkcmVzc1xuIiwgZGV2LT5uYW1lKTsKLQkJCXdyaXRlbChyZWFkbCgmcmVncy0+SG9zdEN0cmwpfEhBTFRfTklDfFJSX0NMRUFSX0lOVCwgCisJCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsCiAJCQkgICAgICAgJnJlZ3MtPkhvc3RDdHJsKTsKIAkJCXdtYigpOwogCQkJYnJlYWs7CiAJCWNhc2UgRV9STkdfQkxLOgogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCByaW5nIGJsb2NrXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsIAorCQkJd3JpdGVsKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCl8SEFMVF9OSUN8UlJfQ0xFQVJfSU5ULAogCQkJICAgICAgICZyZWdzLT5Ib3N0Q3RybCk7CiAJCQl3bWIoKTsKIAkJCWJyZWFrOwpAQCAtMTAxMSwxNSArMTAxMSwxNSBAQAogCQkJCWlmIChuZXdza2IpewogCQkJCQlkbWFfYWRkcl90IGFkZHI7CiAKLQkgICAgICAgIAkJCXBjaV91bm1hcF9zaW5nbGUocnJwcml2LT5wY2lfZGV2LCAKLQkJCQkJCWRlc2MtPmFkZHIuYWRkcmxvLCBkZXYtPm10dSArIAorCSAgICAgICAgCQkJcGNpX3VubWFwX3NpbmdsZShycnByaXYtPnBjaV9kZXYsCisJCQkJCQlkZXNjLT5hZGRyLmFkZHJsbywgZGV2LT5tdHUgKwogCQkJCQkJSElQUElfSExFTiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQkJc2tiID0gcnhfc2tiOwogCQkJCQlza2JfcHV0KHNrYiwgcGt0X2xlbik7CiAJCQkJCXJycHJpdi0+cnhfc2tidWZmW2luZGV4XSA9IG5ld3NrYjsKLQkgICAgICAgIAkJCWFkZHIgPSBwY2lfbWFwX3NpbmdsZShycnByaXYtPnBjaV9kZXYsIAotCQkJCQkJbmV3c2tiLT5kYXRhLCAKLQkJCQkJCWRldi0+bXR1ICsgSElQUElfSExFTiwgCisJICAgICAgICAJCQlhZGRyID0gcGNpX21hcF9zaW5nbGUocnJwcml2LT5wY2lfZGV2LAorCQkJCQkJbmV3c2tiLT5kYXRhLAorCQkJCQkJZGV2LT5tdHUgKyBISVBQSV9ITEVOLAogCQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQkJc2V0X3JyYWRkcigmZGVzYy0+YWRkciwgYWRkcik7CiAJCQkJfSBlbHNlIHsKQEAgLTExOTksNyArMTE5OSw3IEBACiAKIAkJaWYgKHJyX2luaXQxKGRldikpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZycnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCXdyaXRlbChyZWFkbCgmcmVncy0+SG9zdEN0cmwpfEhBTFRfTklDfFJSX0NMRUFSX0lOVCwgCisJCQl3cml0ZWwocmVhZGwoJnJlZ3MtPkhvc3RDdHJsKXxIQUxUX05JQ3xSUl9DTEVBUl9JTlQsCiAJCQkgICAgICAgJnJlZ3MtPkhvc3RDdHJsKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJycHJpdi0+bG9jaywgZmxhZ3MpOwogCQl9CkBAIC0xMjkxLDcgKzEyOTEsNyBAQAogCX0KIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkKKwogCXJldHVybiBlY29kZTsKIH0KIApAQCAtMTUyNyw3ICsxNTI3LDcgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghKHJlYWRsKCZyZWdzLT5Ib3N0Q3RybCkgJiBOSUNfSEFMVEVEKSl7Ci0JCXByaW50aygiJXM6IFRyeWluZyB0byBsb2FkIGZpcm13YXJlIHRvIGEgcnVubmluZyBOSUMuXG4iLCAKKwkJcHJpbnRrKCIlczogVHJ5aW5nIHRvIGxvYWQgZmlybXdhcmUgdG8gYSBydW5uaW5nIE5JQy5cbiIsCiAJCSAgICAgICBkZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTE2NjAsNyArMTY2MCw3IEBACiAJZ2Zfb3V0OgogCQlrZnJlZShpbWFnZSk7CiAJCXJldHVybiBlcnJvcjsKLQkJCisKIAljYXNlIFNJT0NSUlBGVzoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKXsKIAkJCXJldHVybiAtRVBFUk07CkBAIC0xNzEyLDcgKzE3MTIsNyBAQAogCQlrZnJlZShvbGRpbWFnZSk7CiAJCWtmcmVlKGltYWdlKTsKIAkJcmV0dXJuIGVycm9yOwotCQkKKwogCWNhc2UgU0lPQ1JSSUQ6CiAJCXJldHVybiBwdXRfdXNlcigweDUyNTIzMDMyLCAoaW50IF9fdXNlciAqKXJxLT5pZnJfZGF0YSk7CiAJZGVmYXVsdDoKQEAgLTE3MzYsNyArMTczNiw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHJyX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcnJfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnJfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHJyX2NsZWFudXBfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ycnVubmVyLmggYi9kcml2ZXJzL25ldC9ycnVubmVyLmgKaW5kZXggMmMzYzkxZS4uOTk0NTFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcnJ1bm5lci5oCisrKyBiL2RyaXZlcnMvbmV0L3JydW5uZXIuaApAQCAtMTY3LDcgKzE2Nyw3IEBACiAvKgogICogSG9zdCBjb250cm9sIHJlZ2lzdGVyIGJpdHMuCiAgKi8KLQkKKwogI2RlZmluZSBSUl9JTlQJCTB4MDEKICNkZWZpbmUgUlJfQ0xFQVJfSU5UCTB4MDIKICNkZWZpbmUgTk9fU1dBUAkJMHgwNDAwMDAwNApAQCAtMjM4LDkgKzIzOCw5IEBACiAvKgogICogUmVjZWl2ZSBzdGF0ZQogICoKLSAqIFJvYWRSdW5uZXIgSElQUEkgUmVjZWl2ZSBTdGF0ZSBSZWdpc3RlciBjb250cm9scyBhbmQgbW9uaXRvcnMgdGhlIAorICogUm9hZFJ1bm5lciBISVBQSSBSZWNlaXZlIFN0YXRlIFJlZ2lzdGVyIGNvbnRyb2xzIGFuZCBtb25pdG9ycyB0aGUKICAqIEhJUFBJIHJlY2VpdmUgaW50ZXJmYWNlIGluIHRoZSBOSUMuIExvb2sgYXQgZXJyIGJpdHMgd2hlbiBhIEhJUFBJCi0gKiByZWNlaXZlIEVycm9yIEV2ZW50IG9jY3Vycy4gCisgKiByZWNlaXZlIEVycm9yIEV2ZW50IG9jY3Vycy4KICAqLwogCiAjZGVmaW5lIEVOQUJMRV9ORVdfQ09OCQkweDAxCkBAIC03MDAsNyArNzAwLDcgQEAKIAl1MzIJU3RhdFVwZHRUOwogCXUzMglTdGF0VXBkdEM7CiAJdTMyCVdhdGNoRG9nOwotCXUzMglUcmFjZTsJCisJdTMyCVRyYWNlOwogCiAJLyogU2VyaWFsIEhJUFBJICovCiAJdTMyCUxua1JkeUVzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8tcmVncy5oIGIvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKaW5kZXggMGVmNTI1OC4uYTkxNGZlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvczJpby1yZWdzLmgKQEAgLTY1Niw4ICs2NTYsOCBAQAogICAgICAgICB1NjQgcm1hY19hZGRyX2NmZzsKICNkZWZpbmUgUk1BQ19BRERSX1VDQVNUbl9FTihuKSAgICAgbUJJVCgwKV9uKG4pCiAjZGVmaW5lIFJNQUNfQUREUl9NQ0FTVG5fRU4obikgICAgIG1CSVQoMClfbihuKQotI2RlZmluZSBSTUFDX0FERFJfQkNBU1RfRU4gICAgICAgICB2QklUKDApXzQ4IAotI2RlZmluZSBSTUFDX0FERFJfQUxMX0FERFJfRU4gICAgICB2QklUKDApXzQ5IAorI2RlZmluZSBSTUFDX0FERFJfQkNBU1RfRU4gICAgICAgICB2QklUKDApXzQ4CisjZGVmaW5lIFJNQUNfQUREUl9BTExfQUREUl9FTiAgICAgIHZCSVQoMClfNDkKICovCiAJdTY0IHRtYWNfaXBnX2NmZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5jIGIvZHJpdmVycy9uZXQvczJpby5jCmluZGV4IGUxZmUzYTAuLmQ1NzlhNDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC03MSwxMiArNzEsMTMgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogLyogbG9jYWwgaW5jbHVkZSAqLwogI2luY2x1ZGUgInMyaW8uaCIKICNpbmNsdWRlICJzMmlvLXJlZ3MuaCIKIAotI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4wLjE0LjIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIyLjAuMTUuMiIKIAogLyogUzJpbyBEcml2ZXIgbmFtZSAmIHZlcnNpb24uICovCiBzdGF0aWMgY2hhciBzMmlvX2RyaXZlcl9uYW1lW10gPSAiTmV0ZXJpb24iOwpAQCAtMzcwLDM4ICszNzEsNTAgQEAKIAlFTkRfU0lHTgogfTsKIAorTU9EVUxFX0FVVEhPUigiUmFnaGF2ZW5kcmEgS291c2hpayA8cmFnaGF2ZW5kcmEua291c2hpa0BuZXRlcmlvbi5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKKwogLyogTW9kdWxlIExvYWRhYmxlIHBhcmFtZXRlcnMuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHR4X2ZpZm9fbnVtID0gMTsKK1MySU9fUEFSTV9JTlQodHhfZmlmb19udW0sIDEpOworUzJJT19QQVJNX0lOVChyeF9yaW5nX251bSwgMSk7CisKKworUzJJT19QQVJNX0lOVChyeF9yaW5nX21vZGUsIDEpOworUzJJT19QQVJNX0lOVCh1c2VfY29udGludW91c190eF9pbnRycywgMSk7CitTMklPX1BBUk1fSU5UKHJtYWNfcGF1c2VfdGltZSwgMHgxMDApOworUzJJT19QQVJNX0lOVChtY19wYXVzZV90aHJlc2hvbGRfcTBxMywgMTg3KTsKK1MySU9fUEFSTV9JTlQobWNfcGF1c2VfdGhyZXNob2xkX3E0cTcsIDE4Nyk7CitTMklPX1BBUk1fSU5UKHNoYXJlZF9zcGxpdHMsIDApOworUzJJT19QQVJNX0lOVCh0bWFjX3V0aWxfcGVyaW9kLCA1KTsKK1MySU9fUEFSTV9JTlQocm1hY191dGlsX3BlcmlvZCwgNSk7CitTMklPX1BBUk1fSU5UKGJpbW9kYWwsIDApOworUzJJT19QQVJNX0lOVChsM2w0aGRyX3NpemUsIDEyOCk7CisvKiBGcmVxdWVuY3kgb2YgUnggZGVzYyBzeW5jcyBleHByZXNzZWQgYXMgcG93ZXIgb2YgMiAqLworUzJJT19QQVJNX0lOVChyeHN5bmNfZnJlcXVlbmN5LCAzKTsKKy8qIEludGVycnVwdCB0eXBlLiBWYWx1ZXMgY2FuIGJlIDAoSU5UQSksIDEoTVNJKSwgMihNU0lfWCkgKi8KK1MySU9fUEFSTV9JTlQoaW50cl90eXBlLCAwKTsKKy8qIExhcmdlIHJlY2VpdmUgb2ZmbG9hZCBmZWF0dXJlICovCitTMklPX1BBUk1fSU5UKGxybywgMCk7CisvKiBNYXggcGt0cyB0byBiZSBhZ2dyZWdhdGVkIGJ5IExSTyBhdCBvbmUgdGltZS4gSWYgbm90IHNwZWNpZmllZCwKKyAqIGFnZ3JlZ2F0aW9uIGhhcHBlbnMgdW50aWwgd2UgaGl0IG1heCBJUCBwa3Qgc2l6ZSg2NEspCisgKi8KK1MySU9fUEFSTV9JTlQobHJvX21heF9wa3RzLCAweEZGRkYpOworI2lmbmRlZiBDT05GSUdfUzJJT19OQVBJCitTMklPX1BBUk1fSU5UKGluZGljYXRlX21heF9wa3RzLCAwKTsKKyNlbmRpZgorCiBzdGF0aWMgdW5zaWduZWQgaW50IHR4X2ZpZm9fbGVuW01BWF9UWF9GSUZPU10gPQogICAgIHtERUZBVUxUX0ZJRk9fMF9MRU4sIFsxIC4uLihNQVhfVFhfRklGT1MgLSAxKV0gPSBERUZBVUxUX0ZJRk9fMV83X0xFTn07Ci1zdGF0aWMgdW5zaWduZWQgaW50IHJ4X3JpbmdfbnVtID0gMTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcnhfcmluZ19zeltNQVhfUlhfUklOR1NdID0KICAgICB7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IFNNQUxMX0JMS19DTlR9Owogc3RhdGljIHVuc2lnbmVkIGludCBydHNfZnJtX2xlbltNQVhfUlhfUklOR1NdID0KICAgICB7WzAgLi4uKE1BWF9SWF9SSU5HUyAtIDEpXSA9IDAgfTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcnhfcmluZ19tb2RlID0gMTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2NvbnRpbnVvdXNfdHhfaW50cnMgPSAxOwotc3RhdGljIHVuc2lnbmVkIGludCBybWFjX3BhdXNlX3RpbWUgPSAweDEwMDsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbWNfcGF1c2VfdGhyZXNob2xkX3EwcTMgPSAxODc7Ci1zdGF0aWMgdW5zaWduZWQgaW50IG1jX3BhdXNlX3RocmVzaG9sZF9xNHE3ID0gMTg3Owotc3RhdGljIHVuc2lnbmVkIGludCBzaGFyZWRfc3BsaXRzOwotc3RhdGljIHVuc2lnbmVkIGludCB0bWFjX3V0aWxfcGVyaW9kID0gNTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcm1hY191dGlsX3BlcmlvZCA9IDU7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGJpbW9kYWwgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBsM2w0aGRyX3NpemUgPSAxMjg7Ci0jaWZuZGVmIENPTkZJR19TMklPX05BUEkKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaW5kaWNhdGVfbWF4X3BrdHM7Ci0jZW5kaWYKLS8qIEZyZXF1ZW5jeSBvZiBSeCBkZXNjIHN5bmNzIGV4cHJlc3NlZCBhcyBwb3dlciBvZiAyICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHJ4c3luY19mcmVxdWVuY3kgPSAzOwotLyogSW50ZXJydXB0IHR5cGUuIFZhbHVlcyBjYW4gYmUgMChJTlRBKSwgMShNU0kpLCAyKE1TSV9YKSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpbnRyX3R5cGUgPSAwOwotLyogTGFyZ2UgcmVjZWl2ZSBvZmZsb2FkIGZlYXR1cmUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbHJvID0gMDsKLS8qIE1heCBwa3RzIHRvIGJlIGFnZ3JlZ2F0ZWQgYnkgTFJPIGF0IG9uZSB0aW1lLiBJZiBub3Qgc3BlY2lmaWVkLAotICogYWdncmVnYXRpb24gaGFwcGVucyB1bnRpbCB3ZSBoaXQgbWF4IElQIHBrdCBzaXplKDY0SykKLSAqLwotc3RhdGljIHVuc2lnbmVkIGludCBscm9fbWF4X3BrdHMgPSAweEZGRkY7CisKK21vZHVsZV9wYXJhbV9hcnJheSh0eF9maWZvX2xlbiwgdWludCwgTlVMTCwgMCk7Cittb2R1bGVfcGFyYW1fYXJyYXkocnhfcmluZ19zeiwgdWludCwgTlVMTCwgMCk7Cittb2R1bGVfcGFyYW1fYXJyYXkocnRzX2ZybV9sZW4sIHVpbnQsIE5VTEwsIDApOwogCiAvKgogICogUzJJTyBkZXZpY2UgdGFibGUuCkBAIC00NjQsMTAgKzQ3Nyw5IEBACiAJCXNpemUgKz0gY29uZmlnLT50eF9jZmdbaV0uZmlmb19sZW47CiAJfQogCWlmIChzaXplID4gTUFYX0FWQUlMQUJMRV9UWERTKSB7Ci0JCURCR19QUklOVChFUlJfREJHLCAiJXM6IFJlcXVlc3RlZCBUeERzIHRvbyBoaWdoLCAiLAotCQkJICBfX0ZVTkNUSU9OX18pOworCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFJlcXVlc3RlZCBUeERzIHRvbyBoaWdoLCAiKTsKIAkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXF1ZXN0ZWQ6ICVkLCBtYXggc3VwcG9ydGVkOiA4MTkyXG4iLCBzaXplKTsKLQkJcmV0dXJuIEZBSUxVUkU7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWxzdF9zaXplID0gKHNpemVvZihUeERfdCkgKiBjb25maWctPm1heF90eGRzKTsKQEAgLTUxOCw5ICs1MzAsOSBAQAogCQkJICovCiAJCQlpZiAoIXRtcF9wKSB7CiAJCQkJbWFjX2NvbnRyb2wtPnplcm9kbWFfdmlydF9hZGRyID0gdG1wX3Y7Ci0JCQkJREJHX1BSSU5UKElOSVRfREJHLCAKKwkJCQlEQkdfUFJJTlQoSU5JVF9EQkcsCiAJCQkJIiVzOiBaZXJvIERNQSBhZGRyZXNzIGZvciBUeERMLiAiLCBkZXYtPm5hbWUpOwotCQkJCURCR19QUklOVChJTklUX0RCRywgCisJCQkJREJHX1BSSU5UKElOSVRfREJHLAogCQkJCSJWaXJ0dWFsIGFkZHJlc3MgJXBcbiIsIHRtcF92KTsKIAkJCQl0bXBfdiA9IHBjaV9hbGxvY19jb25zaXN0ZW50KG5pYy0+cGRldiwKIAkJCQkJCSAgICAgUEFHRV9TSVpFLCAmdG1wX3ApOwpAQCAtNTQ3LDYgKzU1OSw3IEBACiAJbmljLT51Zm9faW5fYmFuZF92ID0ga21hbGxvYygoc2l6ZW9mKHU2NCkgKiBzaXplKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuaWMtPnVmb19pbl9iYW5kX3YpCiAJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChuaWMtPnVmb19pbl9iYW5kX3YsIDAsIHNpemUpOwogCiAJLyogQWxsb2NhdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gb2YgUlhEcyBpbiBSaW5ncyAqLwogCXNpemUgPSAwOwpAQCAtNzQzLDcgKzc1Niw3IEBACiAJCWZvciAoaiA9IDA7IGogPCBwYWdlX251bTsgaisrKSB7CiAJCQlpbnQgbWVtX2Jsa3MgPSAoaiAqIGxzdF9wZXJfcGFnZSk7CiAJCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm8pCi0JCQkJcmV0dXJuOwkKKwkJCQlyZXR1cm47CiAJCQlpZiAoIW1hY19jb250cm9sLT5maWZvc1tpXS5saXN0X2luZm9bbWVtX2Jsa3NdLgogCQkJCSBsaXN0X3ZpcnRfYWRkcikKIAkJCQlicmVhazsKQEAgLTc2Miw3ICs3NzUsNyBAQAogCQkJcGNpX2ZyZWVfY29uc2lzdGVudChuaWMtPnBkZXYsIFBBR0VfU0laRSwKIAkJCQkJICAgIG1hY19jb250cm9sLT56ZXJvZG1hX3ZpcnRfYWRkciwKIAkJCQkJICAgIChkbWFfYWRkcl90KTApOwotCQkJREJHX1BSSU5UKElOSVRfREJHLCAKKwkJCURCR19QUklOVChJTklUX0RCRywKIAkJCSAgCSIlczogRnJlZWluZyBUeERMIHdpdGggemVybyBETUEgYWRkci4gIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJREJHX1BSSU5UKElOSVRfREJHLCAiVmlydHVhbCBhZGRyZXNzICVwXG4iLApAQCAtODQyLDkgKzg1NSwxMCBAQAogc3RhdGljIGludCBzMmlvX29uX25lY19icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKnMyaW9fcGRldikKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqdGRldiA9IE5VTEw7Ci0Jd2hpbGUgKCh0ZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHRkZXYpKSAhPSBOVUxMKSB7Ci0JCWlmICgodGRldi0+dmVuZG9yID09IE5FQ19WRU5JRCkgJiYgKHRkZXYtPmRldmljZSA9PSBORUNfREVWSUQpKXsKKwl3aGlsZSAoKHRkZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB0ZGV2KSkgIT0gTlVMTCkgeworCQlpZiAodGRldi0+dmVuZG9yID09IE5FQ19WRU5JRCAmJiB0ZGV2LT5kZXZpY2UgPT0gTkVDX0RFVklEKSB7CiAJCQlpZiAodGRldi0+YnVzID09IHMyaW9fcGRldi0+YnVzLT5wYXJlbnQpCisJCQkJcGNpX2Rldl9wdXQodGRldik7CiAJCQkJcmV0dXJuIDE7CiAJCX0KIAl9CkBAIC0xMjEzLDcgKzEyMjcsNyBAQAogCQlicmVhazsKIAl9CiAKLQkvKiBFbmFibGUgVHggRklGTyBwYXJ0aXRpb24gMC4gKi8KKwkvKiBFbmFibGUgYWxsIGNvbmZpZ3VyZWQgVHggRklGTyBwYXJ0aXRpb25zICovCiAJdmFsNjQgPSByZWFkcSgmYmFyMC0+dHhfZmlmb19wYXJ0aXRpb25fMCk7CiAJdmFsNjQgfD0gKFRYX0ZJRk9fUEFSVElUSU9OX0VOKTsKIAl3cml0ZXEodmFsNjQsICZiYXIwLT50eF9maWZvX3BhcnRpdGlvbl8wKTsKQEAgLTEyNjMsNyArMTI3Nyw3IEBACiAJCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnJ4X3dfcm91bmRfcm9iaW5fMSk7CiAJCXZhbDY0ID0gMHgwMjAwMDEwMDAwMDEwMjAzVUxMOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5yeF93X3JvdW5kX3JvYmluXzIpOwotCQl2YWw2NCA9IDB4MDAwMTAyMDAwMTAwMDAwMVVMTDsJCisJCXZhbDY0ID0gMHgwMDAxMDIwMDAxMDAwMDAxVUxMOwogCQl3cml0ZXEodmFsNjQsICZiYXIwLT5yeF93X3JvdW5kX3JvYmluXzMpOwogCQl2YWw2NCA9IDB4MDIwMzAwMDEwMDAwMDAwMFVMTDsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfd19yb3VuZF9yb2Jpbl80KTsKQEAgLTE2NTAsNyArMTY2NCw3IEBACiAJCQl3cml0ZXEodGVtcDY0LCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CiAJCQkvKgogCQkJICogSWYgSGVyY3VsZXMgYWRhcHRlciBlbmFibGUgR1BJTyBvdGhlcndpc2UKLQkJCSAqIGRpc2FibGVkIGFsbCBQQ0lYLCBGbGFzaCwgTURJTywgSUlDIGFuZCBHUElPCisJCQkgKiBkaXNhYmxlIGFsbCBQQ0lYLCBGbGFzaCwgTURJTywgSUlDIGFuZCBHUElPCiAJCQkgKiBpbnRlcnJ1cHRzIGZvciBub3cuCiAJCQkgKiBUT0RPCiAJCQkgKi8KQEAgLTIxMTQsMTIgKzIxMjgsMTIgQEAKIAkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tqXTsKIAkJCWlmICghdHhkcy0+QnVmZmVyX1BvaW50ZXIpCiAJCQkJYnJlYWs7Ci0JCQlwY2lfdW5tYXBfcGFnZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KSAKKwkJCXBjaV91bm1hcF9wYWdlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCiAJCQkJCXR4ZHMtPkJ1ZmZlcl9Qb2ludGVyLAogCQkJCSAgICAgICBmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJfQogCX0KLQl0eGRscC0+SG9zdF9Db250cm9sID0gMDsKKwltZW1zZXQodHhkbHAsMCwgKHNpemVvZihUeERfdCkgKiBmaWZvX2RhdGEtPm1heF90eGRzKSk7CiAJcmV0dXJuKHNrYik7CiB9CiAKQEAgLTIzNzEsMjUgKzIzODUsMzMgQEAKIAkJCXNrYi0+ZGF0YSA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKXRtcDsKIAkJCXNrYi0+dGFpbCA9ICh2b2lkICopICh1bnNpZ25lZCBsb25nKXRtcDsKIAotCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciA9Ci0JCQkgICAgcGNpX21hcF9zaW5nbGUobmljLT5wZGV2LCBiYS0+YmFfMCwgQlVGMF9MRU4sCisJCQlpZiAoISgoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjBfcHRyKSkKKwkJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjBfcHRyID0KKwkJCQkgICBwY2lfbWFwX3NpbmdsZShuaWMtPnBkZXYsIGJhLT5iYV8wLCBCVUYwX0xFTiwKIAkJCQkJICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWVsc2UKKwkJCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UobmljLT5wZGV2LAorCQkJCSAgICAoZG1hX2FkZHJfdCkgKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciwKKwkJCQkgICAgQlVGMF9MRU4sIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlyeGRwLT5Db250cm9sXzIgPSBTRVRfQlVGRkVSMF9TSVpFXzMoQlVGMF9MRU4pOwogCQkJaWYgKG5pYy0+cnhkX21vZGUgPT0gUlhEX01PREVfM0IpIHsKIAkJCQkvKiBUd28gYnVmZmVyIG1vZGUgKi8KIAogCQkJCS8qCi0JCQkJICogQnVmZmVyMiB3aWxsIGhhdmUgTDMvTDQgaGVhZGVyIHBsdXMgCisJCQkJICogQnVmZmVyMiB3aWxsIGhhdmUgTDMvTDQgaGVhZGVyIHBsdXMKIAkJCQkgKiBMNCBwYXlsb2FkCiAJCQkJICovCiAJCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIyX3B0ciA9IHBjaV9tYXBfc2luZ2xlCiAJCQkJKG5pYy0+cGRldiwgc2tiLT5kYXRhLCBkZXYtPm10dSArIDQsCiAJCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCi0JCQkJLyogQnVmZmVyLTEgd2lsbCBiZSBkdW1teSBidWZmZXIgbm90IHVzZWQgKi8KLQkJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyID0KLQkJCQlwY2lfbWFwX3NpbmdsZShuaWMtPnBkZXYsIGJhLT5iYV8xLCBCVUYxX0xFTiwKLQkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCQkvKiBCdWZmZXItMSB3aWxsIGJlIGR1bW15IGJ1ZmZlci4gTm90IHVzZWQgKi8KKwkJCQlpZiAoISgoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyKSkgeworCQkJCQkoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyID0KKwkJCQkJCXBjaV9tYXBfc2luZ2xlKG5pYy0+cGRldiwKKwkJCQkJCWJhLT5iYV8xLCBCVUYxX0xFTiwKKwkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJfQogCQkJCXJ4ZHAtPkNvbnRyb2xfMiB8PSBTRVRfQlVGRkVSMV9TSVpFXzMoMSk7CiAJCQkJcnhkcC0+Q29udHJvbF8yIHw9IFNFVF9CVUZGRVIyX1NJWkVfMwogCQkJCQkJCQkoZGV2LT5tdHUgKyA0KTsKQEAgLTI0ODgsNyArMjUxMCw3IEBACiAJCQkJKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIwX3B0ciwgQlVGMF9MRU4sCiAJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXBjaV91bm1hcF9zaW5nbGUoc3AtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMV9wdHIsIAorCQkJCSgoUnhEM190KilyeGRwKS0+QnVmZmVyMV9wdHIsCiAJCQkJbDNsNGhkcl9zaXplICsgNCwKIAkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJcGNpX3VubWFwX3NpbmdsZShzcC0+cGRldiwgKGRtYV9hZGRyX3QpCkBAIC0yNjE0LDIzICsyNjM2LDIzIEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAvKioKLSAqIHMyaW9fbmV0cG9sbCAtIFJ4IGludGVycnVwdCBzZXJ2aWNlIGhhbmRsZXIgZm9yIG5ldHBvbGwgc3VwcG9ydAorICogczJpb19uZXRwb2xsIC0gbmV0cG9sbCBldmVudCBoYW5kbGVyIGVudHJ5IHBvaW50CiAgKiBAZGV2IDogcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdHVyZS4KICAqIERlc2NyaXB0aW9uOgotICogUG9sbGluZyAnaW50ZXJydXB0JyAtIHVzZWQgYnkgdGhpbmdzIGxpa2UgbmV0Y29uc29sZSB0byBzZW5kIHNrYnMKLSAqIHdpdGhvdXQgaGF2aW5nIHRvIHJlLWVuYWJsZSBpbnRlcnJ1cHRzLiBJdCdzIG5vdCBjYWxsZWQgd2hpbGUKLSAqIHRoZSBpbnRlcnJ1cHQgcm91dGluZSBpcyBleGVjdXRpbmcuCisgKiAJVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBieSB1cHBlciBsYXllciB0byBjaGVjayBmb3IgZXZlbnRzIG9uIHRoZQorICogaW50ZXJmYWNlIGluIHNpdHVhdGlvbnMgd2hlcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQuIEl0IGlzIHVzZWQgZm9yCisgKiBzcGVjaWZpYyBpbi1rZXJuZWwgbmV0d29ya2luZyB0YXNrcywgc3VjaCBhcyByZW1vdGUgY29uc29sZXMgYW5kIGtlcm5lbAorICogZGVidWdnaW5nIG92ZXIgdGhlIG5ldHdvcmsgKGV4YW1wbGUgbmV0ZHVtcCBpbiBSZWRIYXQpLgogICovCi0KLSNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgczJpb19uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJbmljX3QgKm5pYyA9IGRldi0+cHJpdjsKIAltYWNfaW5mb190ICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IG5pYy0+YmFyMDsKLQl1NjQgdmFsNjQ7CisJdTY0IHZhbDY0ID0gMHhGRkZGRkZGRkZGRkZGRkZGVUxMOwogCWludCBpOwogCiAJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwpAQCAtMjYzOSw5ICsyNjYxLDE3IEBACiAJbWFjX2NvbnRyb2wgPSAmbmljLT5tYWNfY29udHJvbDsKIAljb25maWcgPSAmbmljLT5jb25maWc7CiAKLQl2YWw2NCA9IHJlYWRxKCZiYXIwLT5yeF90cmFmZmljX2ludCk7CiAJd3JpdGVxKHZhbDY0LCAmYmFyMC0+cnhfdHJhZmZpY19pbnQpOworCXdyaXRlcSh2YWw2NCwgJmJhcjAtPnR4X3RyYWZmaWNfaW50KTsKIAorCS8qIHdlIG5lZWQgdG8gZnJlZSB1cCB0aGUgdHJhbnNtaXR0ZWQgc2tidWZzIG9yIGVsc2UgbmV0cG9sbCB3aWxsCisJICogcnVuIG91dCBvZiBza2JzIGFuZCB3aWxsIGZhaWwgYW5kIGV2ZW50dWFsbHkgbmV0cG9sbCBhcHBsaWNhdGlvbiBzdWNoCisJICogYXMgbmV0ZHVtcCB3aWxsIGZhaWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+dHhfZmlmb19udW07IGkrKykKKwkJdHhfaW50cl9oYW5kbGVyKCZtYWNfY29udHJvbC0+Zmlmb3NbaV0pOworCisJLyogY2hlY2sgZm9yIHJlY2VpdmVkIHBhY2tldCBhbmQgaW5kaWNhdGUgdXAgdG8gbmV0d29yayAqLwogCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspCiAJCXJ4X2ludHJfaGFuZGxlcigmbWFjX2NvbnRyb2wtPnJpbmdzW2ldKTsKIApAQCAtMjcwOCw3ICsyNzM4LDcgQEAKIAkJLyogSWYgeW91ciBhcmUgbmV4dCB0byBwdXQgaW5kZXggdGhlbiBpdCdzIEZJRk8gZnVsbCBjb25kaXRpb24gKi8KIAkJaWYgKChnZXRfYmxvY2sgPT0gcHV0X2Jsb2NrKSAmJgogCQkgICAgKGdldF9pbmZvLm9mZnNldCArIDEpID09IHB1dF9pbmZvLm9mZnNldCkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczogUmluZyBGdWxsXG4iLGRldi0+bmFtZSk7CisJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICIlczogUmluZyBGdWxsXG4iLGRldi0+bmFtZSk7CiAJCQlicmVhazsKIAkJfQogCQlza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgKCh1bnNpZ25lZCBsb25nKXJ4ZHAtPkhvc3RfQ29udHJvbCk7CkBAIC0yNzI4LDE4ICsyNzU4LDE1IEBACiAJCQkJIEhFQURFUl9TTkFQX1NJWkUsCiAJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCX0gZWxzZSBpZiAobmljLT5yeGRfbW9kZSA9PSBSWERfTU9ERV8zQikgewotCQkJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQorCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCiAJCQkJICgoUnhEM190KilyeGRwKS0+QnVmZmVyMF9wdHIsCiAJCQkJIEJVRjBfTEVOLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQotCQkJCSAoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjFfcHRyLAotCQkJCSBCVUYxX0xFTiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkJCXBjaV91bm1hcF9zaW5nbGUobmljLT5wZGV2LCAoZG1hX2FkZHJfdCkKIAkJCQkgKChSeEQzX3QqKXJ4ZHApLT5CdWZmZXIyX3B0ciwKIAkJCQkgZGV2LT5tdHUgKyA0LAogCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9IGVsc2UgewotCQkJcGNpX3VubWFwX3NpbmdsZShuaWMtPnBkZXYsIChkbWFfYWRkcl90KQorCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCiAJCQkJCSAoKFJ4RDNfdCopcnhkcCktPkJ1ZmZlcjBfcHRyLCBCVUYwX0xFTiwKIAkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKG5pYy0+cGRldiwgKGRtYV9hZGRyX3QpCkBAIC0zMTgzLDcgKzMyMTAsNyBAQAogCWlmICh2YWw2NCAmIFNFUlJfU09VUkNFX0FOWSkgewogCQluaWMtPm1hY19jb250cm9sLnN0YXRzX2luZm8tPnN3X3N0YXQuc2VyaW91c19lcnJfY250Kys7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IERldmljZSBpbmRpY2F0ZXMgIiwgZGV2LT5uYW1lKTsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzZXJpb3VzIGVycm9yICVsbHghIVxuIiwgCisJCURCR19QUklOVChFUlJfREJHLCAic2VyaW91cyBlcnJvciAlbGx4ISFcbiIsCiAJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsNjQpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJCXNjaGVkdWxlX3dvcmsoJm5pYy0+cnN0X3RpbWVyX3Rhc2spOwpAQCAtMzMyNyw3ICszMzU0LDcgQEAKIAogCS8qIENsZWFyIGNlcnRhaW4gUENJL1BDSS1YIGZpZWxkcyBhZnRlciByZXNldCAqLwogCWlmIChzcC0+ZGV2aWNlX3R5cGUgPT0gWEZSQU1FX0lJX0RFVklDRSkgewotCQkvKiBDbGVhciBwYXJpdHkgZXJyIGRldGVjdCBiaXQgKi8KKwkJLyogQ2xlYXIgImRldGVjdGVkIHBhcml0eSBlcnJvciIgYml0ICovCiAJCXBjaV93cml0ZV9jb25maWdfd29yZChzcC0+cGRldiwgUENJX1NUQVRVUywgMHg4MDAwKTsKIAogCQkvKiBDbGVhcmluZyBQQ0lYIEVjYyBzdGF0dXMgcmVnaXN0ZXIgKi8KQEAgLTM1MjgsNyArMzU1NSw3IEBACiAJdTY0IHZhbDY0OwogCWludCBpOwogCi0JZm9yIChpPTA7IGk8IG5pYy0+YXZhaWxfbXNpeF92ZWN0b3JzOyBpKyspIHsKKwlmb3IgKGk9MDsgaSA8IE1BWF9SRVFVRVNURURfTVNJX1g7IGkrKykgewogCQl3cml0ZXEobmljLT5tc2l4X2luZm9baV0uYWRkciwgJmJhcjAtPnhtc2lfYWRkcmVzcyk7CiAJCXdyaXRlcShuaWMtPm1zaXhfaW5mb1tpXS5kYXRhLCAmYmFyMC0+eG1zaV9kYXRhKTsKIAkJdmFsNjQgPSAoQklUKDcpIHwgQklUKDE1KSB8IHZCSVQoaSwgMjYsIDYpKTsKQEAgLTM1NDcsNyArMzU3NCw3IEBACiAJaW50IGk7CiAKIAkvKiBTdG9yZSBhbmQgZGlzcGxheSAqLwotCWZvciAoaT0wOyBpPCBuaWMtPmF2YWlsX21zaXhfdmVjdG9yczsgaSsrKSB7CisJZm9yIChpPTA7IGkgPCBNQVhfUkVRVUVTVEVEX01TSV9YOyBpKyspIHsKIAkJdmFsNjQgPSAoQklUKDE1KSB8IHZCSVQoaSwgMjYsIDYpKTsKIAkJd3JpdGVxKHZhbDY0LCAmYmFyMC0+eG1zaV9hY2Nlc3MpOwogCQlpZiAod2FpdF9mb3JfbXNpeF90cmFucyhuaWMsIGkpKSB7CkBAIC0zODA4LDEzICszODM1LDExIEBACiAJVHhEX3QgKnR4ZHA7CiAJVHhGSUZPX2VsZW1lbnRfdCBfX2lvbWVtICp0eF9maWZvOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0jaWZkZWYgTkVUSUZfRl9UU08KLQlpbnQgbXNzOwotI2VuZGlmCiAJdTE2IHZsYW5fdGFnID0gMDsKIAlpbnQgdmxhbl9wcmlvcml0eSA9IDA7CiAJbWFjX2luZm9fdCAqbWFjX2NvbnRyb2w7CiAJc3RydWN0IGNvbmZpZ19wYXJhbSAqY29uZmlnOworCWludCBvZmZsb2FkX3R5cGU7CiAKIAltYWNfY29udHJvbCA9ICZzcC0+bWFjX2NvbnRyb2w7CiAJY29uZmlnID0gJnNwLT5jb25maWc7CkBAIC0zODYyLDEzICszODg3LDExIEBACiAJCXJldHVybiAwOwogCX0KIAotCXR4ZHAtPkNvbnRyb2xfMSA9IDA7Ci0JdHhkcC0+Q29udHJvbF8yID0gMDsKKwlvZmZsb2FkX3R5cGUgPSBzMmlvX29mZmxvYWRfdHlwZShza2IpOwogI2lmZGVmIE5FVElGX0ZfVFNPCi0JbXNzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSAmIChTS0JfR1NPX1RDUFY0IHwgU0tCX0dTT19UQ1BWNikpIHsKKwlpZiAob2ZmbG9hZF90eXBlICYgKFNLQl9HU09fVENQVjQgfCBTS0JfR1NPX1RDUFY2KSkgewogCQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX1RDUF9MU09fRU47Ci0JCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVENQX0xTT19NU1MobXNzKTsKKwkJdHhkcC0+Q29udHJvbF8xIHw9IFRYRF9UQ1BfTFNPX01TUyhzMmlvX3RjcF9tc3Moc2tiKSk7CiAJfQogI2VuZGlmCiAJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX0hXKSB7CkBAIC0zODg2LDEwICszOTA5LDEwIEBACiAJfQogCiAJZnJnX2xlbiA9IHNrYi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUCkgeworCWlmIChvZmZsb2FkX3R5cGUgPT0gU0tCX0dTT19VRFApIHsKIAkJaW50IHVmb19zaXplOwogCi0JCXVmb19zaXplID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZTsKKwkJdWZvX3NpemUgPSBzMmlvX3VkcF9tc3Moc2tiKTsKIAkJdWZvX3NpemUgJj0gfjc7CiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwogCQl0eGRwLT5Db250cm9sXzEgfD0gVFhEX1VGT19NU1ModWZvX3NpemUpOwpAQCAtMzkwNiwxNiArMzkyOSwxMyBAQAogCQkJCQlzcC0+dWZvX2luX2JhbmRfdiwKIAkJCQkJc2l6ZW9mKHU2NCksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl0eGRwKys7Ci0JCXR4ZHAtPkNvbnRyb2xfMSA9IDA7Ci0JCXR4ZHAtPkNvbnRyb2xfMiA9IDA7CiAJfQogCiAJdHhkcC0+QnVmZmVyX1BvaW50ZXIgPSBwY2lfbWFwX3NpbmdsZQogCSAgICAoc3AtPnBkZXYsIHNrYi0+ZGF0YSwgZnJnX2xlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJdHhkcC0+SG9zdF9Db250cm9sID0gKHVuc2lnbmVkIGxvbmcpIHNrYjsKIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0JVRkZFUjBfU0laRShmcmdfbGVuKTsKLQotCWlmIChza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlID09IFNLQl9HU09fVURQKQorCWlmIChvZmZsb2FkX3R5cGUgPT0gU0tCX0dTT19VRFApCiAJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwogCiAJZnJnX2NudCA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CkBAIC0zOTMwLDEyICszOTUwLDEyIEBACiAJCSAgICAoc3AtPnBkZXYsIGZyYWctPnBhZ2UsIGZyYWctPnBhZ2Vfb2Zmc2V0LAogCQkgICAgIGZyYWctPnNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl0eGRwLT5Db250cm9sXzEgPSBUWERfQlVGRkVSMF9TSVpFKGZyYWctPnNpemUpOwotCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUCkKKwkJaWYgKG9mZmxvYWRfdHlwZSA9PSBTS0JfR1NPX1VEUCkKIAkJCXR4ZHAtPkNvbnRyb2xfMSB8PSBUWERfVUZPX0VOOwogCX0KIAl0eGRwLT5Db250cm9sXzEgfD0gVFhEX0dBVEhFUl9DT0RFX0xBU1Q7CiAKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUCkKKwlpZiAob2ZmbG9hZF90eXBlID09IFNLQl9HU09fVURQKQogCQlmcmdfY250Kys7IC8qIGFzIFR4ZDAgd2FzIHVzZWQgZm9yIGluYmFuZCBoZWFkZXIgKi8KIAogCXR4X2ZpZm8gPSBtYWNfY29udHJvbC0+dHhfRklGT19zdGFydFtxdWV1ZV07CkBAIC0zOTQ0LDEzICszOTY0LDkgQEAKIAogCXZhbDY0ID0gKFRYX0ZJRk9fTEFTVF9UWERfTlVNKGZyZ19jbnQpIHwgVFhfRklGT19GSVJTVF9MSVNUIHwKIAkJIFRYX0ZJRk9fTEFTVF9MSVNUKTsKKwlpZiAob2ZmbG9hZF90eXBlKQorCQl2YWw2NCB8PSBUWF9GSUZPX1NQRUNJQUxfRlVOQzsKIAotI2lmZGVmIE5FVElGX0ZfVFNPCi0JaWYgKG1zcykKLQkJdmFsNjQgfD0gVFhfRklGT19TUEVDSUFMX0ZVTkM7Ci0jZW5kaWYKLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9PSBTS0JfR1NPX1VEUCkKLQkJdmFsNjQgfD0gVFhfRklGT19TUEVDSUFMX0ZVTkM7CiAJd3JpdGVxKHZhbDY0LCAmdHhfZmlmby0+TGlzdF9Db250cm9sKTsKIAogCW1taW93YigpOwpAQCAtMzk4NCwxMyArNDAwMCw0MSBAQAogCW1vZF90aW1lcigmc3AtPmFsYXJtX3RpbWVyLCBqaWZmaWVzICsgSFogLyAyKTsKIH0KIAorc3RhdGljIGludCBzMmlvX2Noa19yeF9idWZmZXJzKG5pY190ICpzcCwgaW50IHJuZ19uKQoreworCWludCByeGJfc2l6ZSwgbGV2ZWw7CisKKwlpZiAoIXNwLT5scm8pIHsKKwkJcnhiX3NpemUgPSBhdG9taWNfcmVhZCgmc3AtPnJ4X2J1ZnNfbGVmdFtybmdfbl0pOworCQlsZXZlbCA9IHJ4X2J1ZmZlcl9sZXZlbChzcCwgcnhiX3NpemUsIHJuZ19uKTsKKworCQlpZiAoKGxldmVsID09IFBBTklDKSAmJiAoIVRBU0tMRVRfSU5fVVNFKSkgeworCQkJaW50IHJldDsKKwkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBSeCBCRCBoaXQgIiwgX19GVU5DVElPTl9fKTsKKwkJCURCR19QUklOVChJTlRSX0RCRywgIlBBTklDIGxldmVsc1xuIik7CisJCQlpZiAoKHJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgcm5nX24pKSA9PSAtRU5PTUVNKSB7CisJCQkJREJHX1BSSU5UKEVSUl9EQkcsICJPdXQgb2YgbWVtb3J5IGluICVzIiwKKwkJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOworCQl9IGVsc2UgaWYgKGxldmVsID09IExPVykKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJnNwLT50YXNrKTsKKworCX0gZWxzZSBpZiAoZmlsbF9yeF9idWZmZXJzKHNwLCBybmdfbikgPT0gLUVOT01FTSkgeworCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpPdXQgb2YgbWVtb3J5Iiwgc3AtPmRldi0+bmFtZSk7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBSeCBJbnRyISFcbiIpOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlycXJldHVybl90CiBzMmlvX21zaV9oYW5kbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRldl9pZDsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7CiAJaW50IGk7Ci0JaW50IHJldDsKIAltYWNfaW5mb190ICptYWNfY29udHJvbDsKIAlzdHJ1Y3QgY29uZmlnX3BhcmFtICpjb25maWc7CiAKQEAgLTQwMTIsMzUgKzQwNTYsOCBAQAogCSAqIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlcnMgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXRzZWxmLAogCSAqIGVsc2Ugc2NoZWR1bGUgYSB0YXNrbGV0IHRvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlcnMuCiAJICovCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlpZiAoIXNwLT5scm8pIHsKLQkJCWludCByeGJfc2l6ZSA9IGF0b21pY19yZWFkKCZzcC0+cnhfYnVmc19sZWZ0W2ldKTsKLQkJCWludCBsZXZlbCA9IHJ4X2J1ZmZlcl9sZXZlbChzcCwgcnhiX3NpemUsIGkpOwotCi0JCQlpZiAoKGxldmVsID09IFBBTklDKSAmJiAoIVRBU0tMRVRfSU5fVVNFKSkgewotCQkJCURCR19QUklOVChJTlRSX0RCRywgIiVzOiBSeCBCRCBoaXQgIiwgCi0JCQkJCQkJZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICJQQU5JQyBsZXZlbHNcbiIpOwotCQkJCWlmICgocmV0ID0gZmlsbF9yeF9idWZmZXJzKHNwLCBpKSkgPT0gLUVOT01FTSkgewotCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOk91dCBvZiBtZW1vcnkiLAotCQkJCQkJICBkZXYtPm5hbWUpOwotCQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBJU1IhIVxuIik7Ci0JCQkJCWNsZWFyX2JpdCgwLCAoJnNwLT50YXNrbGV0X3N0YXR1cykpOwotCQkJCQlhdG9taWNfZGVjKCZzcC0+aXNyX2NudCk7Ci0JCQkJCXJldHVybiBJUlFfSEFORExFRDsKLQkJCQl9Ci0JCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7Ci0JCQl9IGVsc2UgaWYgKGxldmVsID09IExPVykgewotCQkJCXRhc2tsZXRfc2NoZWR1bGUoJnNwLT50YXNrKTsKLQkJCX0KLQkJfQotCQllbHNlIGlmIChmaWxsX3J4X2J1ZmZlcnMoc3AsIGkpID09IC1FTk9NRU0pIHsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiVzOk91dCBvZiBtZW1vcnkiLAotCQkJCQkJCWRldi0+bmFtZSk7Ci0JCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgaW4gUnggSW50ciEhXG4iKTsKLQkJCQlicmVhazsKLQkJfQotCX0KKwlmb3IgKGkgPSAwOyBpIDwgY29uZmlnLT5yeF9yaW5nX251bTsgaSsrKQorCQlzMmlvX2Noa19yeF9idWZmZXJzKHNwLCBpKTsKIAogCWF0b21pY19kZWMoJnNwLT5pc3JfY250KTsKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC00MDUxLDM5ICs0MDY4LDEzIEBACiB7CiAJcmluZ19pbmZvX3QgKnJpbmcgPSAocmluZ19pbmZvX3QgKilkZXZfaWQ7CiAJbmljX3QgKnNwID0gcmluZy0+bmljOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOwotCWludCByeGJfc2l6ZSwgbGV2ZWwsIHJuZ19uOwogCiAJYXRvbWljX2luYygmc3AtPmlzcl9jbnQpOworCiAJcnhfaW50cl9oYW5kbGVyKHJpbmcpOwotCi0Jcm5nX24gPSByaW5nLT5yaW5nX25vOwotCWlmICghc3AtPmxybykgewotCQlyeGJfc2l6ZSA9IGF0b21pY19yZWFkKCZzcC0+cnhfYnVmc19sZWZ0W3JuZ19uXSk7Ci0JCWxldmVsID0gcnhfYnVmZmVyX2xldmVsKHNwLCByeGJfc2l6ZSwgcm5nX24pOwotCi0JCWlmICgobGV2ZWwgPT0gUEFOSUMpICYmICghVEFTS0xFVF9JTl9VU0UpKSB7Ci0JCQlpbnQgcmV0OwotCQkJREJHX1BSSU5UKElOVFJfREJHLCAiJXM6IFJ4IEJEIGhpdCAiLCBfX0ZVTkNUSU9OX18pOwotCQkJREJHX1BSSU5UKElOVFJfREJHLCAiUEFOSUMgbGV2ZWxzXG4iKTsKLQkJCWlmICgocmV0ID0gZmlsbF9yeF9idWZmZXJzKHNwLCBybmdfbikpID09IC1FTk9NRU0pIHsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIk91dCBvZiBtZW1vcnkgaW4gJXMiLAotCQkJCQkgIF9fRlVOQ1RJT05fXyk7Ci0JCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJfQotCQkJY2xlYXJfYml0KDAsICgmc3AtPnRhc2tsZXRfc3RhdHVzKSk7Ci0JCX0gZWxzZSBpZiAobGV2ZWwgPT0gTE9XKSB7Ci0JCQl0YXNrbGV0X3NjaGVkdWxlKCZzcC0+dGFzayk7Ci0JCX0KLQl9Ci0JZWxzZSBpZiAoZmlsbF9yeF9idWZmZXJzKHNwLCBybmdfbikgPT0gLUVOT01FTSkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwgZGV2LT5uYW1lKTsKLQkJCURCR19QUklOVChFUlJfREJHLCAiIGluIFJ4IEludHIhIVxuIik7Ci0JfQorCXMyaW9fY2hrX3J4X2J1ZmZlcnMoc3AsIHJpbmctPnJpbmdfbm8pOwogCiAJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOwotCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC00MjQ4LDM3ICs0MjM5LDggQEAKIAkgKiBlbHNlIHNjaGVkdWxlIGEgdGFza2xldCB0byByZWFsbG9jYXRlIHRoZSBidWZmZXJzLgogCSAqLwogI2lmbmRlZiBDT05GSUdfUzJJT19OQVBJCi0JZm9yIChpID0gMDsgaSA8IGNvbmZpZy0+cnhfcmluZ19udW07IGkrKykgewotCQlpZiAoIXNwLT5scm8pIHsKLQkJCWludCByZXQ7Ci0JCQlpbnQgcnhiX3NpemUgPSBhdG9taWNfcmVhZCgmc3AtPnJ4X2J1ZnNfbGVmdFtpXSk7Ci0JCQlpbnQgbGV2ZWwgPSByeF9idWZmZXJfbGV2ZWwoc3AsIHJ4Yl9zaXplLCBpKTsKLQotCQkJaWYgKChsZXZlbCA9PSBQQU5JQykgJiYgKCFUQVNLTEVUX0lOX1VTRSkpIHsKLQkJCQlEQkdfUFJJTlQoSU5UUl9EQkcsICIlczogUnggQkQgaGl0ICIsIAotCQkJCQkJCWRldi0+bmFtZSk7Ci0JCQkJREJHX1BSSU5UKElOVFJfREJHLCAiUEFOSUMgbGV2ZWxzXG4iKTsKLQkJCQlpZiAoKHJldCA9IGZpbGxfcnhfYnVmZmVycyhzcCwgaSkpID09IC1FTk9NRU0pIHsKLQkJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIlczpPdXQgb2YgbWVtb3J5IiwKLQkJCQkJCSAgZGV2LT5uYW1lKTsKLQkJCQkJREJHX1BSSU5UKEVSUl9EQkcsICIgaW4gSVNSISFcbiIpOwotCQkJCQljbGVhcl9iaXQoMCwgKCZzcC0+dGFza2xldF9zdGF0dXMpKTsKLQkJCQkJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOwotCQkJCQl3cml0ZXEob3JnX21hc2ssICZiYXIwLT5nZW5lcmFsX2ludF9tYXNrKTsKLQkJCQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCQkJCX0KLQkJCQljbGVhcl9iaXQoMCwgKCZzcC0+dGFza2xldF9zdGF0dXMpKTsKLQkJCX0gZWxzZSBpZiAobGV2ZWwgPT0gTE9XKSB7Ci0JCQkJdGFza2xldF9zY2hlZHVsZSgmc3AtPnRhc2spOwotCQkJfQotCQl9Ci0JCWVsc2UgaWYgKGZpbGxfcnhfYnVmZmVycyhzcCwgaSkgPT0gLUVOT01FTSkgewotCQkJCURCR19QUklOVChFUlJfREJHLCAiJXM6T3V0IG9mIG1lbW9yeSIsCi0JCQkJCQkJZGV2LT5uYW1lKTsKLQkJCQlEQkdfUFJJTlQoRVJSX0RCRywgIiBpbiBSeCBpbnRyISFcbiIpOwotCQkJCWJyZWFrOwotCQl9Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBjb25maWctPnJ4X3JpbmdfbnVtOyBpKyspCisJCXMyaW9fY2hrX3J4X2J1ZmZlcnMoc3AsIGkpOwogI2VuZGlmCiAJd3JpdGVxKG9yZ19tYXNrLCAmYmFyMC0+Z2VuZXJhbF9pbnRfbWFzayk7CiAJYXRvbWljX2RlYygmc3AtPmlzcl9jbnQpOwpAQCAtNDMwOCw2ICs0MjcwLDggQEAKIAkJCWlmIChjbnQgPT0gNSkKIAkJCQlicmVhazsgLyogVXBkdCBmYWlsZWQgKi8KIAkJfSB3aGlsZSgxKTsKKwl9IGVsc2UgeworCQltZW1zZXQoc3AtPm1hY19jb250cm9sLnN0YXRzX2luZm8sIDAsIHNpemVvZihTdGF0SW5mb190KSk7CiAJfQogfQogCkBAIC00ODUzLDcgKzQ4MTcsNyBAQAogCiAJaWYgKHNwLT5kZXZpY2VfdHlwZSA9PSBYRlJBTUVfSUlfREVWSUNFKSB7CiAJCXZhbDY0ID0gU1BJX0NPTlRST0xfS0VZKDB4OSkgfCBTUElfQ09OVFJPTF9TRUwxIHwKLQkJCVNQSV9DT05UUk9MX0JZVEVDTlQoMHgzKSB8IAorCQkJU1BJX0NPTlRST0xfQllURUNOVCgweDMpIHwKIAkJCVNQSV9DT05UUk9MX0NNRCgweDMpIHwgU1BJX0NPTlRST0xfQUREUihvZmYpOwogCQlTUEVDSUFMX1JFR19XUklURSh2YWw2NCwgJmJhcjAtPnNwaV9jb250cm9sLCBMRik7CiAJCXZhbDY0IHw9IFNQSV9DT05UUk9MX1JFUTsKQEAgLTQ5MjAsNyArNDg4NCw3IEBACiAJCXdyaXRlcShTUElfREFUQV9XUklURShkYXRhLChjbnQ8PDMpKSwgJmJhcjAtPnNwaV9kYXRhKTsKIAogCQl2YWw2NCA9IFNQSV9DT05UUk9MX0tFWSgweDkpIHwgU1BJX0NPTlRST0xfU0VMMSB8Ci0JCQlTUElfQ09OVFJPTF9CWVRFQ05UKHdyaXRlX2NudCkgfCAKKwkJCVNQSV9DT05UUk9MX0JZVEVDTlQod3JpdGVfY250KSB8CiAJCQlTUElfQ09OVFJPTF9DTUQoMHgyKSB8IFNQSV9DT05UUk9MX0FERFIob2ZmKTsKIAkJU1BFQ0lBTF9SRUdfV1JJVEUodmFsNjQsICZiYXIwLT5zcGlfY29udHJvbCwgTEYpOwogCQl2YWw2NCB8PSBTUElfQ09OVFJPTF9SRVE7CkBAIC00OTQyLDcgKzQ5MDYsOCBAQAogfQogc3RhdGljIHZvaWQgczJpb192cGRfcmVhZChuaWNfdCAqbmljKQogewotCXU4IHZwZF9kYXRhWzI1Nl0sZGF0YTsKKwl1OCAqdnBkX2RhdGE7CisJdTggZGF0YTsKIAlpbnQgaT0wLCBjbnQsIGZhaWwgPSAwOwogCWludCB2cGRfYWRkciA9IDB4ODA7CiAKQEAgLTQ5NTUsNiArNDkyMCwxMCBAQAogCQl2cGRfYWRkciA9IDB4NTA7CiAJfQogCisJdnBkX2RhdGEgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2cGRfZGF0YSkKKwkJcmV0dXJuOworCiAJZm9yIChpID0gMDsgaSA8IDI1NjsgaSArPTQgKSB7CiAJCXBjaV93cml0ZV9jb25maWdfYnl0ZShuaWMtPnBkZXYsICh2cGRfYWRkciArIDIpLCBpKTsKIAkJcGNpX3JlYWRfY29uZmlnX2J5dGUobmljLT5wZGV2LCAgKHZwZF9hZGRyICsgMiksICZkYXRhKTsKQEAgLTQ5NzcsNiArNDk0Niw3IEBACiAJCW1lbXNldChuaWMtPnByb2R1Y3RfbmFtZSwgMCwgdnBkX2RhdGFbMV0pOwogCQltZW1jcHkobmljLT5wcm9kdWN0X25hbWUsICZ2cGRfZGF0YVszXSwgdnBkX2RhdGFbMV0pOwogCX0KKwlrZnJlZSh2cGRfZGF0YSk7CiB9CiAKIC8qKgpAQCAtNTI5NSw3ICs1MjY1LDcgQEAKIAllbHNlCiAJCSpkYXRhID0gMDsKIAotCXJldHVybiAwOworCXJldHVybiAqZGF0YTsKIH0KIAogLyoqCkBAIC01Njc3LDcgKzU2NDcsNyBAQAogCWlmIChzdGF0X2luZm8tPnN3X3N0YXQubnVtX2FnZ3JlZ2F0aW9ucykgewogCQl1NjQgdG1wID0gc3RhdF9pbmZvLT5zd19zdGF0LnN1bV9hdmdfcGt0c19hZ2dyZWdhdGVkOwogCQlpbnQgY291bnQgPSAwOwotCQkvKiAKKwkJLyoKIAkJICogU2luY2UgNjQtYml0IGRpdmlkZSBkb2VzIG5vdCB3b3JrIG9uIGFsbCBwbGF0Zm9ybXMsCiAJCSAqIGRvIHJlcGVhdGVkIHN1YnRyYWN0aW9uLgogCQkgKi8KQEAgLTU3NTMsOCArNTcyMywyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTMyIHMyaW9fZXRodG9vbF9vcF9nZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9UU08pICE9IDA7Cit9CitzdGF0aWMgaW50IHMyaW9fZXRodG9vbF9vcF9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKQorCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJZWxzZQorCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOwogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IHMyaW9fZXRodG9vbF9nc2V0LAogCS5zZXRfc2V0dGluZ3MgPSBzMmlvX2V0aHRvb2xfc3NldCwKIAkuZ2V0X2RydmluZm8gPSBzMmlvX2V0aHRvb2xfZ2RydmluZm8sCkBAIC01NzczLDggKzU3NTYsOCBAQAogCS5nZXRfc2cgPSBldGh0b29sX29wX2dldF9zZywKIAkuc2V0X3NnID0gZXRodG9vbF9vcF9zZXRfc2csCiAjaWZkZWYgTkVUSUZfRl9UU08KLQkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKLQkuc2V0X3RzbyA9IGV0aHRvb2xfb3Bfc2V0X3RzbywKKwkuZ2V0X3RzbyA9IHMyaW9fZXRodG9vbF9vcF9nZXRfdHNvLAorCS5zZXRfdHNvID0gczJpb19ldGh0b29sX29wX3NldF90c28sCiAjZW5kaWYKIAkuZ2V0X3VmbyA9IGV0aHRvb2xfb3BfZ2V0X3VmbywKIAkuc2V0X3VmbyA9IGV0aHRvb2xfb3Bfc2V0X3VmbywKQEAgLTYzMzcsNyArNjMyMCw3IEBACiAJczJpb19zZXRfbXVsdGljYXN0KGRldik7CiAKIAlpZiAoc3AtPmxybykgewotCQkvKiBJbml0aWFsaXplIG1heCBhZ2dyZWdhdGFibGUgcGt0cyBiYXNlZCBvbiBNVFUgKi8KKwkJLyogSW5pdGlhbGl6ZSBtYXggYWdncmVnYXRhYmxlIHBrdHMgcGVyIHNlc3Npb24gYmFzZWQgb24gTVRVICovCiAJCXNwLT5scm9fbWF4X2FnZ3JfcGVyX3Nlc3MgPSAoKDE8PDE2KSAtIDEpIC8gZGV2LT5tdHU7CiAJCS8qIENoZWNrIGlmIHdlIGNhbiB1c2UoaWYgc3BlY2lmaWVkKSB1c2VyIHByb3ZpZGVkIHZhbHVlICovCiAJCWlmIChscm9fbWF4X3BrdHMgPCBzcC0+bHJvX21heF9hZ2dyX3Blcl9zZXNzKQpAQCAtNjQzOCw3ICs2NDIxLDcgQEAKICAqICAgQGNrc3VtIDogRkNTIGNoZWNrc3VtIG9mIHRoZSBmcmFtZS4KICAqICAgQHJpbmdfbm8gOiB0aGUgcmluZyBmcm9tIHdoaWNoIHRoaXMgUnhEIHdhcyBleHRyYWN0ZWQuCiAgKiAgIERlc2NyaXB0aW9uOgotICogICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgVHggaW50ZXJydXB0IHNlcml2Y2Ugcm91dGluZSB0byBwZXJmb3JtCisgKiAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSBSeCBpbnRlcnJ1cHQgc2VyaXZjZSByb3V0aW5lIHRvIHBlcmZvcm0KICAqICAgc29tZSBPUyByZWxhdGVkIG9wZXJhdGlvbnMgb24gdGhlIFNLQiBiZWZvcmUgcGFzc2luZyBpdCB0byB0aGUgdXBwZXIKICAqICAgbGF5ZXJzLiBJdCBtYWlubHkgY2hlY2tzIGlmIHRoZSBjaGVja3N1bSBpcyBPSywgaWYgc28gYWRkcyBpdCB0byB0aGUKICAqICAgU0tCcyBja3N1bSB2YXJpYWJsZSwgaW5jcmVtZW50cyB0aGUgUnggcGFja2V0IGNvdW50IGFuZCBwYXNzZXMgdGhlIFNLQgpAQCAtNjYxNSw3ICs2NTk4LDcgQEAKIAl9IGVsc2Ugewogc2VuZF91cDoKIAkJcXVldWVfcnhfZnJhbWUoc2tiKTsKLQl9CQkKKwl9CiAJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIGFnZ3JlZ2F0ZToKIAlhdG9taWNfZGVjKCZzcC0+cnhfYnVmc19sZWZ0W3Jpbmdfbm9dKTsKQEAgLTY2OTgsMzMgKzY2ODEsNiBAQAogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHNwLT5wZGV2LCBQQ0lfQ09NTUFORCwgJnBjaV9jbWQpOwogfQogCi1NT0RVTEVfQVVUSE9SKCJSYWdoYXZlbmRyYSBLb3VzaGlrIDxyYWdoYXZlbmRyYS5rb3VzaGlrQG5ldGVyaW9uLmNvbT4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9WRVJTSU9OKERSVl9WRVJTSU9OKTsKLQotbW9kdWxlX3BhcmFtKHR4X2ZpZm9fbnVtLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHJ4X3JpbmdfbnVtLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHJ4X3JpbmdfbW9kZSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbV9hcnJheSh0eF9maWZvX2xlbiwgdWludCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkocnhfcmluZ19zeiwgdWludCwgTlVMTCwgMCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkocnRzX2ZybV9sZW4sIHVpbnQsIE5VTEwsIDApOwotbW9kdWxlX3BhcmFtKHVzZV9jb250aW51b3VzX3R4X2ludHJzLCBpbnQsIDEpOwotbW9kdWxlX3BhcmFtKHJtYWNfcGF1c2VfdGltZSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShtY19wYXVzZV90aHJlc2hvbGRfcTBxMywgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShtY19wYXVzZV90aHJlc2hvbGRfcTRxNywgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShzaGFyZWRfc3BsaXRzLCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKHRtYWNfdXRpbF9wZXJpb2QsIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0ocm1hY191dGlsX3BlcmlvZCwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShiaW1vZGFsLCBib29sLCAwKTsKLW1vZHVsZV9wYXJhbShsM2w0aGRyX3NpemUsIGludCAsIDApOwotI2lmbmRlZiBDT05GSUdfUzJJT19OQVBJCi1tb2R1bGVfcGFyYW0oaW5kaWNhdGVfbWF4X3BrdHMsIGludCwgMCk7Ci0jZW5kaWYKLW1vZHVsZV9wYXJhbShyeHN5bmNfZnJlcXVlbmN5LCBpbnQsIDApOwotbW9kdWxlX3BhcmFtKGludHJfdHlwZSwgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShscm8sIGludCwgMCk7Ci1tb2R1bGVfcGFyYW0obHJvX21heF9wa3RzLCBpbnQsIDApOwotCiBzdGF0aWMgaW50IHMyaW9fdmVyaWZ5X3Bhcm0oc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4ICpkZXZfaW50cl90eXBlKQogewogCWlmICggdHhfZmlmb19udW0gPiA4KSB7CkBAIC02NzYyLDcgKzY3MTgsNyBAQAogCWlmICgoKmRldl9pbnRyX3R5cGUgPT0gTVNJX1gpICYmCiAJCQkoKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0hFUkNfV0lOKSAmJgogCQkJKHBkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX0hFUkNfVU5JKSkpIHsKLQkJREJHX1BSSU5UKEVSUl9EQkcsICJzMmlvOiBYZnJhbWUgSSBkb2VzIG5vdCBzdXBwb3J0IE1TSV9YLiAiIAorCQlEQkdfUFJJTlQoRVJSX0RCRywgInMyaW86IFhmcmFtZSBJIGRvZXMgbm90IHN1cHBvcnQgTVNJX1guICIKIAkJCQkJIkRlZmF1bHRpbmcgdG8gSU5UQVxuIik7CiAJCSpkZXZfaW50cl90eXBlID0gSU5UQTsKIAl9CkBAIC02ODMyLDggKzY3ODgsOCBAQAogCX0KIAlpZiAoZGV2X2ludHJfdHlwZSAhPSBNU0lfWCkgewogCQlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBzMmlvX2RyaXZlcl9uYW1lKSkgewotCQkJREJHX1BSSU5UKEVSUl9EQkcsICJSZXF1ZXN0IFJlZ2lvbnMgZmFpbGVkXG4iKSwKLQkJCSAgICBwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCQlEQkdfUFJJTlQoRVJSX0RCRywgIlJlcXVlc3QgUmVnaW9ucyBmYWlsZWRcbiIpOworCQkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC02ODkwLDcgKzY4NDYsNyBAQAogCQlzcC0+ZGV2aWNlX3R5cGUgPSBYRlJBTUVfSV9ERVZJQ0U7CiAKIAlzcC0+bHJvID0gbHJvOwotCQkKKwogCS8qIEluaXRpYWxpemUgc29tZSBQQ0kvUENJLVggZmllbGRzIG9mIHRoZSBOSUMuICovCiAJczJpb19pbml0X3BjaShzcCk7CiAKQEAgLTY5NTcsNyArNjkxMyw3IEBACiAJLyogIGluaXRpYWxpemUgdGhlIHNoYXJlZCBtZW1vcnkgdXNlZCBieSB0aGUgTklDIGFuZCB0aGUgaG9zdCAqLwogCWlmIChpbml0X3NoYXJlZF9tZW0oc3ApKSB7CiAJCURCR19QUklOVChFUlJfREJHLCAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwKLQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCSAgZGV2LT5uYW1lKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBtZW1fYWxsb2NfZmFpbGVkOwogCX0KQEAgLTcwOTQsNiArNzA1MCw5IEBACiAJZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBzcC0+ZGVmX21hY19hZGRyLCBFVEhfQUxFTik7CiAKKwkvKiByZXNldCBOaWMgYW5kIGJyaW5nIGl0IHRvIGtub3duIHN0YXRlICovCisJczJpb19yZXNldChzcCk7CisKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIHRhc2tsZXQgc3RhdHVzIGFuZCBsaW5rIHN0YXRlIGZsYWdzCiAJICogYW5kIHRoZSBjYXJkIHN0YXRlIHBhcmFtZXRlcgpAQCAtNzEzMSwxMSArNzA5MCwxMSBAQAogCQlnb3RvIHJlZ2lzdGVyX2ZhaWxlZDsKIAl9CiAJczJpb192cGRfcmVhZChzcCk7Ci0JREJHX1BSSU5UKEVSUl9EQkcsICIlczogTmV0ZXJpb24gJXMiLGRldi0+bmFtZSwgc3AtPnByb2R1Y3RfbmFtZSk7Ci0JREJHX1BSSU5UKEVSUl9EQkcsICIocmV2ICVkKSwgRHJpdmVyIHZlcnNpb24gJXNcbiIsCi0JCQkJZ2V0X3hlbmFfcmV2X2lkKHNwLT5wZGV2KSwKLQkJCQlzMmlvX2RyaXZlcl92ZXJzaW9uKTsKIAlEQkdfUFJJTlQoRVJSX0RCRywgIkNvcHlyaWdodChjKSAyMDAyLTIwMDUgTmV0ZXJpb24gSW5jLlxuIik7CisJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTmV0ZXJpb24gJXMgKHJldiAlZClcbiIsZGV2LT5uYW1lLAorCQkgIHNwLT5wcm9kdWN0X25hbWUsIGdldF94ZW5hX3Jldl9pZChzcC0+cGRldikpOworCURCR19QUklOVChFUlJfREJHLCAiJXM6IERyaXZlciB2ZXJzaW9uICVzXG4iLCBkZXYtPm5hbWUsCisJCSAgczJpb19kcml2ZXJfdmVyc2lvbik7CiAJREJHX1BSSU5UKEVSUl9EQkcsICIlczogTUFDIEFERFI6ICIKIAkJCSAgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCBkZXYtPm5hbWUsCiAJCQkgIHNwLT5kZWZfbWFjX2FkZHJbMF0ubWFjX2FkZHJbMF0sCkBAIC03Mjc1LDcgKzcyMzQsNyBAQAogCiBpbnQgX19pbml0IHMyaW9fc3RhcnRlcih2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnMyaW9fZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmczJpb19kcml2ZXIpOwogfQogCiAvKioKQEAgLTcyOTIsNyArNzI1MSw3IEBACiBtb2R1bGVfaW5pdChzMmlvX3N0YXJ0ZXIpOwogbW9kdWxlX2V4aXQoczJpb19jbG9zZXIpOwogCi1zdGF0aWMgaW50IGNoZWNrX0wyX2xyb19jYXBhYmxlKHU4ICpidWZmZXIsIHN0cnVjdCBpcGhkciAqKmlwLCAKK3N0YXRpYyBpbnQgY2hlY2tfTDJfbHJvX2NhcGFibGUodTggKmJ1ZmZlciwgc3RydWN0IGlwaGRyICoqaXAsCiAJCXN0cnVjdCB0Y3BoZHIgKip0Y3AsIFJ4RF90ICpyeGRwKQogewogCWludCBpcF9vZmY7CkBAIC03MzU0LDcgKzczMTMsNyBAQAogCWxyby0+c2dfbnVtID0gMTsKIAlscm8tPnRvdGFsX2xlbiA9IG50b2hzKGlwLT50b3RfbGVuKTsKIAlscm8tPmZyYWdzX2xlbiA9IDA7Ci0JLyogCisJLyoKIAkgKiBjaGVjayBpZiB3ZSBzYXcgVENQIHRpbWVzdGFtcC4gT3RoZXIgY29uc2lzdGVuY3kgY2hlY2tzIGhhdmUKIAkgKiBhbHJlYWR5IGJlZW4gZG9uZS4KICAJICovCkBAIC03NDExLDEyICs3MzcwLDEyIEBACiAJLyogVXBkYXRlIGFjayBzZXEgbm8uIGFuZCB3aW5kb3cgYWQoZnJvbSB0aGlzIHBrdCkgaW4gTFJPIG9iamVjdCAqLwogCWxyby0+dGNwX2FjayA9IHRjcC0+YWNrX3NlcTsKIAlscm8tPndpbmRvdyA9IHRjcC0+d2luZG93OwotCQorCiAJaWYgKGxyby0+c2F3X3RzKSB7CiAJCXUzMiAqcHRyOwogCQkvKiBVcGRhdGUgdHNlY3IgYW5kIHRzdmFsIGZyb20gdGhpcyBwYWNrZXQgKi8KIAkJcHRyID0gKHUzMiAqKSAodGNwICsgMSk7Ci0JCWxyby0+Y3VyX3RzdmFsID0gKihwdHIgKyAxKTsgCisJCWxyby0+Y3VyX3RzdmFsID0gKihwdHIgKyAxKTsKIAkJbHJvLT5jdXJfdHNlY3IgPSAqKHB0ciArIDIpOwogCX0KIH0KQEAgLTc0MzYsOCArNzM5NSwxMyBAQAogCWlmIChpcC0+aWhsICE9IDUpIC8qIElQIGhhcyBvcHRpb25zICovCiAJCXJldHVybiAtMTsKIAorCS8qIElmIHdlIHNlZSBDRSBjb2RlcG9pbnQgaW4gSVAgaGVhZGVyLCBwYWNrZXQgaXMgbm90IG1lcmdlYWJsZSAqLworCWlmIChJTkVUX0VDTl9pc19jZShpcHY0X2dldF9kc2ZpZWxkKGlwKSkpCisJCXJldHVybiAtMTsKKworCS8qIElmIHdlIHNlZSBFQ0Ugb3IgQ1dSIGZsYWdzIGluIFRDUCBoZWFkZXIsIHBhY2tldCBpcyBub3QgbWVyZ2VhYmxlICovCiAJaWYgKHRjcC0+dXJnIHx8IHRjcC0+cHNoIHx8IHRjcC0+cnN0IHx8IHRjcC0+c3luIHx8IHRjcC0+ZmluIHx8Ci0JCQkJCQkJCSF0Y3AtPmFjaykgeworCQkJCSAgICB0Y3AtPmVjZSB8fCB0Y3AtPmN3ciB8fCAhdGNwLT5hY2spIHsKIAkJLyoKIAkJICogQ3VycmVudGx5IHJlY29nbml6ZSBvbmx5IHRoZSBhY2sgY29udHJvbCB3b3JkIGFuZAogCQkgKiBhbnkgb3RoZXIgY29udHJvbCBmaWVsZCBiZWluZyBzZXQgd291bGQgcmVzdWx0IGluCkBAIC03NDQ2LDcgKzc0MTAsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCi0JLyogCisJLyoKIAkgKiBBbGxvdyBvbmx5IG9uZSBUQ1AgdGltZXN0YW1wIG9wdGlvbi4gRG9uJ3QgYWdncmVnYXRlIGlmCiAJICogYW55IG90aGVyIG9wdGlvbnMgYXJlIGRldGVjdGVkLgogCSAqLwpAQCAtNzQ1NCw3ICs3NDE4LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHRjcC0+ZG9mZiA9PSA4KSB7Ci0JCXB0ciA9ICh1OCAqKSh0Y3AgKyAxKTsJCisJCXB0ciA9ICh1OCAqKSh0Y3AgKyAxKTsKIAkJd2hpbGUgKCpwdHIgPT0gVENQT1BUX05PUCkKIAkJCXB0cisrOwogCQlpZiAoKnB0ciAhPSBUQ1BPUFRfVElNRVNUQU1QIHx8ICoocHRyKzEpICE9IFRDUE9MRU5fVElNRVNUQU1QKQpAQCAtNzQ2Niw3ICs3NDMwLDcgQEAKIAkJCQlyZXR1cm4gLTE7CiAKIAkJLyogdGltZXN0YW1wIGVjaG8gcmVwbHkgc2hvdWxkIGJlIG5vbi16ZXJvICovCi0JCWlmICgqKCh1MzIgKikocHRyKzYpKSA9PSAwKSAKKwkJaWYgKCooKHUzMiAqKShwdHIrNikpID09IDApCiAJCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03NTkxLDE4ICs3NTU1LDE2IEBACiBzdGF0aWMgdm9pZCBscm9fYXBwZW5kX3BrdChuaWNfdCAqc3AsIGxyb190ICpscm8sIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICB1MzIgdGNwX2xlbikKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqdG1wLCAqZmlyc3QgPSBscm8tPnBhcmVudDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqZmlyc3QgPSBscm8tPnBhcmVudDsKIAogCWZpcnN0LT5sZW4gKz0gdGNwX2xlbjsKIAlmaXJzdC0+ZGF0YV9sZW4gPSBscm8tPmZyYWdzX2xlbjsKIAlza2JfcHVsbChza2IsIChza2ItPmxlbiAtIHRjcF9sZW4pKTsKLQlpZiAoKHRtcCA9IHNrYl9zaGluZm8oZmlyc3QpLT5mcmFnX2xpc3QpKSB7Ci0JCXdoaWxlICh0bXAtPm5leHQpCi0JCQl0bXAgPSB0bXAtPm5leHQ7Ci0JCXRtcC0+bmV4dCA9IHNrYjsKLQl9CisJaWYgKHNrYl9zaGluZm8oZmlyc3QpLT5mcmFnX2xpc3QpCisJCWxyby0+bGFzdF9mcmFnLT5uZXh0ID0gc2tiOwogCWVsc2UKIAkJc2tiX3NoaW5mbyhmaXJzdCktPmZyYWdfbGlzdCA9IHNrYjsKKwlscm8tPmxhc3RfZnJhZyA9IHNrYjsKIAlzcC0+bWFjX2NvbnRyb2wuc3RhdHNfaW5mby0+c3dfc3RhdC5jbHViYmVkX2ZybXNfY250Kys7CiAJcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvczJpby5oIGIvZHJpdmVycy9uZXQvczJpby5oCmluZGV4IDIxNzA5N2IuLjNhZmQ5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3MyaW8uaAorKysgYi9kcml2ZXJzL25ldC9zMmlvLmgKQEAgLTcxOSw2ICs3MTksNyBAQAogLyogRGF0YSBzdHJ1Y3R1cmUgdG8gcmVwcmVzZW50IGEgTFJPIHNlc3Npb24gKi8KIHR5cGVkZWYgc3RydWN0IGxybyB7CiAJc3RydWN0IHNrX2J1ZmYJKnBhcmVudDsKKwlzdHJ1Y3Qgc2tfYnVmZiAgKmxhc3RfZnJhZzsKIAl1OAkJKmwyaDsKIAlzdHJ1Y3QgaXBoZHIJKmlwaDsKIAlzdHJ1Y3QgdGNwaGRyCSp0Y3BoOwpAQCAtODgyLDEwICs4ODMsMTAgQEAKIH0KICNlbmRpZgogCi0vKiAKLSAqIFNvbWUgcmVnaXN0ZXJzIGhhdmUgdG8gYmUgd3JpdHRlbiBpbiBhIHBhcnRpY3VsYXIgb3JkZXIgdG8gCi0gKiBleHBlY3QgY29ycmVjdCBoYXJkd2FyZSBvcGVyYXRpb24uIFRoZSBtYWNybyBTUEVDSUFMX1JFR19XUklURSAKLSAqIGlzIHVzZWQgdG8gcGVyZm9ybSBzdWNoIG9yZGVyZWQgd3JpdGVzLiBEZWZpbmVzIFVGIChVcHBlciBGaXJzdCkgCisvKgorICogU29tZSByZWdpc3RlcnMgaGF2ZSB0byBiZSB3cml0dGVuIGluIGEgcGFydGljdWxhciBvcmRlciB0bworICogZXhwZWN0IGNvcnJlY3QgaGFyZHdhcmUgb3BlcmF0aW9uLiBUaGUgbWFjcm8gU1BFQ0lBTF9SRUdfV1JJVEUKKyAqIGlzIHVzZWQgdG8gcGVyZm9ybSBzdWNoIG9yZGVyZWQgd3JpdGVzLiBEZWZpbmVzIFVGIChVcHBlciBGaXJzdCkKICAqIGFuZCBMRiAoTG93ZXIgRmlyc3QpIHdpbGwgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSByZXF1aXJlZCB3cml0ZSBvcmRlci4KICAqLwogI2RlZmluZSBVRgkxCkBAIC05OTgsNyArOTk5LDcgQEAKIHMyaW9fbXNpeF9maWZvX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyBpcnFyZXR1cm5fdCBzMmlvX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyBpbnQgdmVyaWZ5X3hlbmFfcXVpZXNjZW5jZShuaWNfdCAqc3AsIHU2NCB2YWw2NCwgaW50IGZsYWcpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB2b2lkIHMyaW9fc2V0X2xpbmsodW5zaWduZWQgbG9uZyBkYXRhKTsKIHN0YXRpYyBpbnQgczJpb19zZXRfc3dhcHBlcihuaWNfdCAqIHNwKTsKIHN0YXRpYyB2b2lkIHMyaW9fY2FyZF9kb3duKG5pY190ICpuaWMpOwpAQCAtMTAxMSw0ICsxMDEyLDEzIEBACiBzdGF0aWMgdm9pZCBxdWV1ZV9yeF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9MM0w0X2hlYWRlcihuaWNfdCAqc3AsIGxyb190ICpscm8pOwogc3RhdGljIHZvaWQgbHJvX2FwcGVuZF9wa3QobmljX3QgKnNwLCBscm9fdCAqbHJvLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgdGNwX2xlbik7CisKKyNkZWZpbmUgczJpb190Y3BfbXNzKHNrYikgc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZQorI2RlZmluZSBzMmlvX3VkcF9tc3Moc2tiKSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplCisjZGVmaW5lIHMyaW9fb2ZmbG9hZF90eXBlKHNrYikgc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZQorCisjZGVmaW5lIFMySU9fUEFSTV9JTlQoWCwgZGVmX3ZhbCkgXAorCXN0YXRpYyB1bnNpZ25lZCBpbnQgWCA9IGRlZl92YWw7XAorCQltb2R1bGVfcGFyYW0oWCAsIHVpbnQsIDApOworCiAjZW5kaWYJCQkJLyogX1MySU9fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2FhOTczMC5jIGIvZHJpdmVycy9uZXQvc2FhOTczMC5jCmluZGV4IGIyYWNlZGIuLmM0NzliMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NhYTk3MzAuYworKysgYi9kcml2ZXJzL25ldC9zYWE5NzMwLmMKQEAgLTExMzEsNyArMTEzMSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNhYTk3MzBfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNhYTk3MzBfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2FhOTczMF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2FhOTczMF9jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYWE5NzMwLmggYi9kcml2ZXJzL25ldC9zYWE5NzMwLmgKaW5kZXggYTdlOWQyOS4uZjY1NmYyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2FhOTczMC5oCisrKyBiL2RyaXZlcnMvbmV0L3NhYTk3MzAuaApAQCAtMzQsOSArMzQsOSBAQAogLyogVFggYW5kIFJYIHBhY2tldCBzaXplOiBmaXhlZCB0byAyMDQ4IGJ5dGVzLCBhY2NvcmRpbmcgdG8gSFcgcmVxdWlyZW1lbnRzLiAqLwogI2RlZmluZSBMQU5fU0FBOTczMF9QQUNLRVRfU0laRSAgICAgICAgICAgICAgICAgICAgICAgMjA0OAogCi0vKiAKLSAqIE51bWJlciBvZiBUWCBidWZmZXJzID0gbnVtYmVyIG9mIFJYIGJ1ZmZlcnMgPSAyLCB3aGljaCBpcyBmaXhlZCBhY2NvcmRpbmcgCi0gKiB0byBIVyByZXF1aXJlbWVudHMuIAorLyoKKyAqIE51bWJlciBvZiBUWCBidWZmZXJzID0gbnVtYmVyIG9mIFJYIGJ1ZmZlcnMgPSAyLCB3aGljaCBpcyBmaXhlZCBhY2NvcmRpbmcKKyAqIHRvIEhXIHJlcXVpcmVtZW50cy4KICAqLwogI2RlZmluZSBMQU5fU0FBOTczMF9CVUZGRVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgMgogCkBAIC00NywxMCArNDcsMTAgQEAKICNkZWZpbmUgTEFOX1NBQTk3MzBfVFhNX1FfU0laRSAgICAgICAgICAgICAgICAgICAgICAgIDE1CiAKIC8qCi0gKiBXZSBnZXQgYW4gaW50ZXJydXB0IGZvciBlYWNoIExBTl9TQUE5NzMwX0RFRkFVTFRfUkNWX1FfSU5UX1RIUkVTSE9MRCAKLSAqIHBhY2tldHMgcmVjZWl2ZWQuIAorICogV2UgZ2V0IGFuIGludGVycnVwdCBmb3IgZWFjaCBMQU5fU0FBOTczMF9ERUZBVUxUX1JDVl9RX0lOVF9USFJFU0hPTEQKKyAqIHBhY2tldHMgcmVjZWl2ZWQuCiAgKiBJZiBob3dldmVyIHdlIHJlY2VpdmUgbGVzcyB0aGFuICBMQU5fU0FBOTczMF9ERUZBVUxUX1JDVl9RX0lOVF9USFJFU0hPTEQKLSAqIHBhY2tldHMsIHRoZSBoYXJkd2FyZSBjYW4gdGltZW91dCBhZnRlciBhIGNlcnRhaW4gdGltZSBhbmQgc3RpbGwgdGVsbCAKKyAqIHBhY2tldHMsIHRoZSBoYXJkd2FyZSBjYW4gdGltZW91dCBhZnRlciBhIGNlcnRhaW4gdGltZSBhbmQgc3RpbGwgdGVsbAogICogdXMgcGFja2V0cyBoYXZlIGFycml2ZWQuCiAgKiBUaGUgdGltZW91dCB2YWx1ZSBpbiB1bml0IG9mIDMyIFBDSSBjbG9ja3MgKDMzTWh6KS4KICAqIFRoZSB2YWx1ZSAyMDAgYXBwcm94aW1hdGVzIDAuMDAwMiBzZWNvbmRzLgpAQCAtNzksOCArNzksOCBAQAogI2RlZmluZSBNQUNDTV8xME1CICAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgTUFDQ01fTUlJICAgICAgICAgICAgICAgICAgICAgICAyCiAKLS8qIAotICogUEhZIGRlZmluaXRpb25zIGZvciBCYXNpYyByZWdpc3RlcnMgb2YgUVM2NjEyICh1c2VkIG9uIE1JUFMgQVRMQVMgYm9hcmQpIAorLyoKKyAqIFBIWSBkZWZpbml0aW9ucyBmb3IgQmFzaWMgcmVnaXN0ZXJzIG9mIFFTNjYxMiAodXNlZCBvbiBNSVBTIEFUTEFTIGJvYXJkKQogICovCiAjZGVmaW5lIFBIWV9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgMHgwCiAjZGVmaW5lIFBIWV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zYjEwMDAuYyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCmluZGV4IDY2Y2YyMjYuLmExNzg5YWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTAwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3NiMTAwMC5jCkBAIC0yOCw3ICsyOCw3IEBACiAKIAlTbWFsbCBjaGFuZ2VzIHRvIG1ha2UgaXQgd29yayB3aXRoIDIuMS54IGtlcm5lbHMuIEhvcGVmdWxseSwKIAlub3RoaW5nIG1ham9yIHdpbGwgY2hhbmdlIGJlZm9yZSBvZmZpY2lhbCByZWxlYXNlIG9mIExpbnV4IDIuMi4KLQkKKwogCU1lcmdlZCB3aXRoIDIuMiAtIEFsYW4gQ294CiAqLwogCkBAIC0xNDMsNyArMTQzLDcgQEAKIAl1bnNpZ25lZCBzaG9ydCBpb2FkZHJbMl0sIGlycTsKIAl1bnNpZ25lZCBpbnQgc2VyaWFsX251bWJlcjsKIAlpbnQgZXJyb3IgPSAtRU5PREVWOwotCQorCiAJaWYgKHBucF9kZXZpY2VfYXR0YWNoKHBkZXYpIDwgMCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKHBucF9hY3RpdmF0ZV9kZXYocGRldikgPCAwKQpAQCAtMTUzLDEyICsxNTMsMTIgQEAKIAkJZ290byBvdXRfZGlzYWJsZTsKIAlpZiAoIXBucF9pcnFfdmFsaWQocGRldiwgMCkpCiAJCWdvdG8gb3V0X2Rpc2FibGU7Ci0JCQorCiAJc2VyaWFsX251bWJlciA9IHBkZXYtPmNhcmQtPnNlcmlhbDsKLQkJCisKIAlpb2FkZHJbMF0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKIAlpb2FkZHJbMV0gPSBwbnBfcG9ydF9zdGFydChwZGV2LCAwKTsKLQkJCisKIAlpcnEgPSBwbnBfaXJxKHBkZXYsIDApOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHJbMF0sIDE2LCAic2IxMDAwIikpCkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJZ290byBvdXRfcmVsZWFzZV9yZWdpb25zOwogCX0KIAotCQkgCisKIAlkZXYtPmJhc2VfYWRkciA9IGlvYWRkclswXTsKIAkvKiBtZW1fc3RhcnQgaG9sZHMgdGhlIHNlY29uZCBJL08gYWRkcmVzcyAqLwogCWRldi0+bWVtX3N0YXJ0ID0gaW9hZGRyWzFdOwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJLnJlbW92ZQkJPSBzYjEwMDBfcmVtb3ZlX29uZSwKIH07CiAKLQwKKwogLyoKICAqIFNCMTAwMCBoYXJkd2FyZSByb3V0aW5lcyB0byBiZSB1c2VkIGR1cmluZyBvcGVuL2NvbmZpZ3VyYXRpb24gcGhhc2VzCiAgKi8KQEAgLTM1MSw3ICszNTEsNyBAQAogCXJldHVybiAwOwogfQogCi0MCisKIC8qCiAgKiBTQjEwMDAgaGFyZHdhcmUgcm91dGluZXMgdG8gYmUgdXNlZCBkdXJpbmcgZnJhbWUgcnggaW50ZXJydXB0CiAgKi8KQEAgLTQ0OSw3ICs0NDksNyBAQAogCXJldHVybjsKIH0KIAotDAorCiAvKgogICogU0IxMDAwIGNvbW1hbmRzIGZvciBvcGVuL2NvbmZpZ3VyYXRpb24KICAqLwpAQCAtNjk3LDcgKzY5Nyw3IEBACiAJcmV0dXJuIHNiMTAwMF9lbmRfZ2V0X3NldF9jb21tYW5kKGlvYWRkciwgbmFtZSk7CiB9CiAKLQwKKwogc3RhdGljIGlubGluZSB2b2lkCiBzYjEwMDBfcHJpbnRfc3RhdHVzX2J1ZmZlcihjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBjaGFyIHN0W10sCiAJdW5zaWduZWQgY2hhciBidWZmZXJbXSwgaW50IHNpemUpCkBAIC05MTYsNyArOTE2LDcgQEAKIAlyZXR1cm47CiB9CiAKLQwKKwogLyoKICAqIExpbnV4IGludGVyZmFjZSBmdW5jdGlvbnMKICAqLwpAQCAtMTE1NSw3ICsxMTU1LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTaHV0dGluZyBkb3duIHNiMTAwMC5cbiIsIGRldi0+bmFtZSk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAlpb2FkZHJbMF0gPSBkZXYtPmJhc2VfYWRkcjsKIAkvKiBtZW1fc3RhcnQgaG9sZHMgdGhlIHNlY29uZCBJL08gYWRkcmVzcyAqLwogCWlvYWRkclsxXSA9IGRldi0+bWVtX3N0YXJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCmluZGV4IDlhYjE2MTguLmU0Yzg4OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYworKysgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKQEAgLTI3MDgsNyArMjcwOCw2IEBACiBzdGF0aWMgdm9pZCBzYm1hY19zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IG1zZ19mbGFnID0gMDsKIAlzdHJ1Y3Qgc2JtYWNfc29mdGMgKnNjID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2JtX2xvY2ssIGZsYWdzKTsKQEAgLTI3MTgsMjIgKzI3MTcsMTQgQEAKIAkJICovCiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJCW1zZ19mbGFnID0gMTsKIAkJCXNibWFjX3Byb21pc2N1b3VzX21vZGUoc2MsMSk7CiAJCX0KIAkJZWxzZSB7Ci0JCQltc2dfZmxhZyA9IDI7CiAJCQlzYm1hY19wcm9taXNjdW91c19tb2RlKHNjLDApOwogCQl9CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjLT5zYm1fbG9jaywgZmxhZ3MpOwogCi0JaWYgKG1zZ19mbGFnKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFByb21pc2N1b3VzIG1vZGUgJXNhYmxlZC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsKG1zZ19mbGFnPT0xKT8iZW4iOiJkaXMiKTsKLQl9Ci0KIAkvKgogCSAqIFByb2dyYW0gdGhlIG11bHRpY2FzdHMuICBEbyB0aGlzIGV2ZXJ5IHRpbWUuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZWVxODAwNS5jIGIvZHJpdmVycy9uZXQvc2VlcTgwMDUuYwppbmRleCBlZmQwZjIzLi4yMGFmZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZWVxODAwNS5jCisrKyBiL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmMKQEAgLTIwLDcgKzIwLDcgQEAKIC8qCiAgIFNvdXJjZXM6CiAgIAlTRUVRIDgwMDUgZGF0YWJvb2sKLSAgCQorCiAgIFZlcnNpb24gaGlzdG9yeToKICAgCTEuMDAJUHVibGljIHJlbGVhc2UuIGNvc21ldGljIGNoYW5nZXMgKG5vIHdhcm5pbmdzIG5vdykKICAgCTAuNjgJVHVybmluZyBwZXItIHBhY2tldCxpbnRlcnJ1cHQgZGVidWcgbWVzc2FnZXMgb2ZmIC0gdGVzdGluZyBmb3IgcmVsZWFzZS4KQEAgLTk1LDcgKzk1LDcgQEAKIGV4dGVybiB2b2lkIHNlZXE4MDA1X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHN0YXJ0cCk7CiBzdGF0aWMgaW5saW5lIHZvaWQgd2FpdF9mb3JfYnVmZmVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCi0MCisKIC8qIENoZWNrIGZvciBhIG5ldHdvcmsgYWRhcHRvciBvZiB0aGlzIHR5cGUsIGFuZCByZXR1cm4gJzAnIGlmZiBvbmUgZXhpc3RzLgogICAgSWYgZGV2LT5iYXNlX2FkZHIgPT0gMCwgcHJvYmUgYWxsIGxpa2VseSBsb2NhdGlvbnMuCiAgICBJZiBkZXYtPmJhc2VfYWRkciA9PSAxLCBhbHdheXMgcmV0dXJuIGZhaWx1cmUuCkBAIC0xOTYsMTEgKzE5NiwxMSBAQAogCQlyZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIG91dDsKIAl9Ci0JCisKIAlvbGRfY2ZnMiA9IGludyhTRUVRX0NGRzIpOwkJCQkJLyogcmVhZCBDRkcyIHJlZ2lzdGVyICovCiAJb2xkX2NmZzEgPSBpbncoU0VFUV9DRkcxKTsKIAlvbGRfZG1hYXIgPSBpbncoU0VFUV9ETUFBUik7Ci0JCisKIAlpZiAobmV0X2RlYnVnPjQpIHsKIAkJcHJpbnRrKCJzZWVxODAwNTogc3RhdCA9IDB4JTA0eFxuIixvbGRfc3RhdCk7CiAJCXByaW50aygic2VlcTgwMDU6IGNmZzEgPSAweCUwNHhcbiIsb2xkX2NmZzEpOwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJCXByaW50aygic2VlcTgwMDU6IHJhZXIgPSAweCUwNHhcbiIsb2xkX3JlYXIpOwogCQlwcmludGsoInNlZXE4MDA1OiBkbWFhcj0gMHglMDR4XG4iLG9sZF9kbWFhcik7CiAJfQotCQorCiAJb3V0dyggU0VFUUNNRF9GSUZPX1dSSVRFIHwgU0VFUUNNRF9TRVRfQUxMX09GRiwgU0VFUV9DTUQpOwkvKiBzZXR1cCBmb3IgcmVhZGluZyBQUk9NICovCiAJb3V0dyggMCwgU0VFUV9ETUFBUik7CQkJCQkJLyogc2V0IHN0YXJ0aW5nIFBST00gYWRkcmVzcyAqLwogCW91dHcoIFNFRVFDRkcxX0JVRkZFUl9QUk9NLCBTRUVRX0NGRzEpOwkJCQkvKiBzZXQgYnVmZmVyIHRvIGxvb2sgYXQgUFJPTSAqLwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJb3V0dyggU0VFUUNGRzJfUkVTRVQsIFNFRVFfQ0ZHMik7CQkJCS8qIHJlc2V0IHRoZSBjYXJkICovCiAJdWRlbGF5KDUpOwogCW91dHcoIFNFRVFDTURfU0VUX0FMTF9PRkYsIFNFRVFfQ01EKTsKLQkKKwogCWlmIChuZXRfZGVidWcpIHsKIAkJcHJpbnRrKCJzZWVxODAwNTogcHJvbSBzdW0gPSAweCUwOHhcbiIsaik7CiAJCWZvcihqPTA7IGo8MzI7IGorPTE2KSB7CkBAIC0yNTYsMTAgKzI1NiwxMCBAQAogCQl9CiAJfQogCi0jaWYgMAkKLQkvKiAKKyNpZiAwCisJLyoKIAkgKiB0ZXN0aW5nIHRoZSBwYWNrZXQgYnVmZmVyIG1lbW9yeSBkb2Vzbid0IHdvcmsgeWV0Ci0JICogYnV0IGFsbCBvdGhlciBidWZmZXIgYWNjZXNzZXMgZG8gCisJICogYnV0IGFsbCBvdGhlciBidWZmZXIgYWNjZXNzZXMgZG8KIAkgKgkJCS0gZml4aW5nIGlzIG5vdCBhIHByaW9yaXR5CiAJICovCiAJaWYgKG5ldF9kZWJ1Zz4xKSB7CQkJCQkvKiB0ZXN0IHBhY2tldCBidWZmZXIgbWVtb3J5ICovCkBAIC0zMDksMTYgKzMwOSwxNiBAQAogCQk7CQkJLyogRG8gbm90aGluZzogYSB1c2VyLWxldmVsIHByb2dyYW0gd2lsbCBzZXQgaXQuICovCiAJZWxzZSBpZiAoZGV2LT5pcnEgPCAyKSB7CS8qICJBdXRvLUlSUSIgKi8KIAkJdW5zaWduZWQgbG9uZyBjb29raWUgPSBwcm9iZV9pcnFfb24oKTsKLQkJCisKIAkJb3V0dyggU0VFUUNNRF9SWF9JTlRfRU4gfCBTRUVRQ01EX1NFVF9SWF9PTiB8IFNFRVFDTURfU0VUX1JYX09GRiwgU0VFUV9DTUQgKTsKIAogCQlkZXYtPmlycSA9IHByb2JlX2lycV9vZmYoY29va2llKTsKLQkJCisKIAkJaWYgKG5ldF9kZWJ1ZyA+PSAyKQogCQkJcHJpbnRrKCIgYXV0b2lycSBpcyAlZFxuIiwgZGV2LT5pcnEpOwogCX0gZWxzZSBpZiAoZGV2LT5pcnEgPT0gMikKIAkgIC8qIEZpeHVwIGZvciB1c2VycyB0aGF0IGRvbid0IGtub3cgdGhhdCBJUlEgMiBpcyByZWFsbHkgSVJRIDksCi0JICAgKiBvciBkb24ndCBrbm93IHdoaWNoIG9uZSB0byBzZXQuIAorCSAgICogb3IgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gc2V0LgogCSAgICovCiAJICBkZXYtPmlycSA9IDk7CiAKQEAgLTM0OCw3ICszNDgsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQwKKwogLyogT3Blbi9pbml0aWFsaXplIHRoZSBib2FyZC4gIFRoaXMgaXMgY2FsbGVkIChpbiB0aGUgY3VycmVudCBrZXJuZWwpCiAgICBzb21ldGltZSBhZnRlciBib290aW5nIHdoZW4gdGhlICdpZmNvbmZpZycgcHJvZ3JhbSBpcyBydW4uCiAKQEAgLTQwNCw4ICs0MDQsOCBAQAogCiAJLyogQmxvY2sgYSB0aW1lci1iYXNlZCB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQotCWhhcmR3YXJlX3NlbmRfcGFja2V0KGRldiwgYnVmLCBsZW5ndGgpOyAKKworCWhhcmR3YXJlX3NlbmRfcGFja2V0KGRldiwgYnVmLCBsZW5ndGgpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCWxwLT5zdGF0cy50eF9ieXRlcyArPSBsZW5ndGg7CiAJZGV2X2tmcmVlX3NrYiAoc2tiKTsKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0MCisKIC8qCiAgKiB3YWl0X2Zvcl9idWZmZXIKICAqCkBAIC00MjYsMTUgKzQyNiwxNSBAQAogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAlpbnQgc3RhdHVzOwotCQorCiAJdG1wID0gamlmZmllcyArIEhaOwogCXdoaWxlICggKCAoKHN0YXR1cz1pbncoU0VFUV9TVEFUVVMpKSAmIFNFRVFTVEFUX1dJTkRPV19JTlQpICE9IFNFRVFTVEFUX1dJTkRPV19JTlQpICYmIHRpbWVfYmVmb3JlKGppZmZpZXMsIHRtcCkpCiAJCWNwdV9yZWxheCgpOwotCQkKKwogCWlmICggKHN0YXR1cyAmIFNFRVFTVEFUX1dJTkRPV19JTlQpID09IFNFRVFTVEFUX1dJTkRPV19JTlQpCiAJCW91dHcoIFNFRVFDTURfV0lORE9XX0lOVF9BQ0sgfCAoc3RhdHVzICYgU0VFUUNNRF9JTlRfTUFTSyksIFNFRVFfQ01EKTsKIH0KLQwKKwogLyogVGhlIHR5cGljYWwgd29ya2xvYWQgb2YgdGhlIGRyaXZlcjoKICAgIEhhbmRsZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaW50ZXJydXB0cy4gKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBzZWVxODAwNV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MpCkBAIC00NTIsNyArNDUyLDcgQEAKIAkJaWYgKG5ldF9kZWJ1ZyA+MikgewogCQkJcHJpbnRrKCIlczogaW50LCBzdGF0dXM9MHglMDR4XG4iLGRldi0+bmFtZSxzdGF0dXMpOwogCQl9Ci0JCQorCiAJCWlmIChzdGF0dXMgJiBTRUVRU1RBVF9XSU5ET1dfSU5UKSB7CiAJCQloYW5kbGVkID0gMTsKIAkJCW91dHcoIFNFRVFDTURfV0lORE9XX0lOVF9BQ0sgfCAoc3RhdHVzICYgU0VFUUNNRF9JTlRfTUFTSyksIFNFRVFfQ01EKTsKQEAgLTUwMCwzMiArNTAwLDMyIEBACiAJICAJd2FpdF9mb3JfYnVmZmVyKGRldik7CiAJICAJbmV4dF9wYWNrZXQgPSBudG9ocyhpbncoU0VFUV9CVUZGRVIpKTsKIAkgIAlwa3RfaGRyID0gaW53KFNFRVFfQlVGRkVSKTsKLQkgIAkKKwogCQlpZiAobmV0X2RlYnVnPjIpIHsKIAkJCXByaW50aygiJXM6IDB4JTA0eCByZWN2IG5leHQ9MHglMDR4LCBoZHI9MHglMDR4XG4iLGRldi0+bmFtZSxscC0+cmVjZWl2ZV9wdHIsbmV4dF9wYWNrZXQscGt0X2hkcik7CiAJCX0KLQkJCQorCiAJCWlmICgobmV4dF9wYWNrZXQgPT0gMCkgfHwgKChwa3RfaGRyICYgU0VFUVBLVEhfQ0hBSU4pPT0wKSkgewkvKiBSZWFkIGFsbCB0aGUgZnJhbWVzPyAqLwogCQkJcmV0dXJuOwkJCQkJCQkvKiBEb25lIGZvciBub3cgKi8KIAkJfQotCQkJCisKIAkJaWYgKChwa3RfaGRyICYgU0VFUVBLVFNfRE9ORSk9PTApCiAJCQlicmVhazsKLQkJCQorCiAJCWlmIChuZXh0X3BhY2tldCA8IGxwLT5yZWNlaXZlX3B0cikgewogCQkJcGt0X2xlbiA9IChuZXh0X3BhY2tldCArIDB4MTAwMDAgLSAoKERFRkFVTFRfVEVBKzEpPDw4KSkgLSBscC0+cmVjZWl2ZV9wdHIgLSA0OwogCQl9IGVsc2UgewogCQkJcGt0X2xlbiA9IG5leHRfcGFja2V0IC0gbHAtPnJlY2VpdmVfcHRyIC0gNDsKIAkJfQotCQkKKwogCQlpZiAobmV4dF9wYWNrZXQgPCAoKERFRkFVTFRfVEVBKzEpPDw4KSkgewkJCS8qIGlzIHRoZSBuZXh0X3BhY2tldCBhZGRyZXNzIHNhbmU/ICovCiAJCQlwcmludGsoIiVzOiByZWN2IHBhY2tldCByaW5nIGNvcnJ1cHQsIHJlc2V0dGluZyBib2FyZFxuIixkZXYtPm5hbWUpOwogCQkJc2VlcTgwMDVfaW5pdChkZXYsMSk7CiAJCQlyZXR1cm47CiAJCX0KLQkJCisKIAkJbHAtPnJlY2VpdmVfcHRyID0gbmV4dF9wYWNrZXQ7Ci0JCQorCiAJCWlmIChuZXRfZGVidWc+MikgewogCQkJcHJpbnRrKCIlczogcmVjdiBsZW49MHglMDR4XG4iLGRldi0+bmFtZSxwa3RfbGVuKTsKIAkJfQpAQCAtNTUzLDkgKzU1Myw5IEBACiAJCQlza2ItPmRldiA9IGRldjsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgMik7CS8qIGFsaWduIGRhdGEgb24gMTYgYnl0ZSAqLwogCQkJYnVmID0gc2tiX3B1dChza2IscGt0X2xlbik7Ci0JCQkKKwogCQkJaW5zdyhTRUVRX0JVRkZFUiwgYnVmLCAocGt0X2xlbiArIDEpID4+IDEpOwotCQkJCisKIAkJCWlmIChuZXRfZGVidWc+MikgewogCQkJCWNoYXIgKiBwID0gYnVmOwogCQkJCXByaW50aygiJXM6IHJlY3YgIixkZXYtPm5hbWUpOwpAQCAtNTg4LDcgKzU4OCw3IEBACiAJbHAtPm9wZW5fdGltZSA9IDA7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAkvKiBGbHVzaCB0aGUgVHggYW5kIGRpc2FibGUgUnggaGVyZS4gKi8KIAlvdXR3KCBTRUVRQ01EX1NFVF9BTExfT0ZGLCBTRUVRX0NNRCk7CiAKQEAgLTYyNyw3ICs2MjcsNyBAQAogICogaG1tLCBub3QgZXZlbiBzdXJlIGlmIG15IG1hdGNoaW5nIHdvcmtzIF9hbnl3YXlfIC0gc2VlbSB0byBiZSByZWNlaXZpbmcKICAqIF9ldmVyeXRoaW5nXyAuIC4gLgogICovCi0gCisKIAlpZiAobnVtX2FkZHJzKSB7CQkJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJb3V0dyggKGludyhTRUVRX0NGRzEpICYgflNFRVFDRkcxX01BVENIX01BU0spfCBTRUVRQ0ZHMV9NQVRDSF9BTEwsICBTRUVRX0NGRzEpOwogCQlkZXYtPmZsYWdzfD1JRkZfUFJPTUlTQzsKQEAgLTY0MiwyNiArNjQyLDI2IEBACiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAlpbnQgaTsKLQkKKwogCW91dHcoU0VFUUNGRzJfUkVTRVQsIFNFRVFfQ0ZHMik7CS8qIHJlc2V0IGRldmljZSAqLwogCXVkZWxheSg1KTsKLQkKKwogCW91dHcoIFNFRVFDTURfRklGT19XUklURSB8IFNFRVFDTURfU0VUX0FMTF9PRkYsIFNFRVFfQ01EKTsKIAlvdXR3KCAwLCBTRUVRX0RNQUFSKTsJCQkvKiBsb2FkIHN0YXJ0IGFkZHJlc3MgaW50byBib3RoIGxvdyBhbmQgaGlnaCBieXRlICovCiAvKgl3YWl0X2Zvcl9idWZmZXIoZGV2KTsgKi8JCS8qIEkgdGhpbmsgdGhhdCB5b3Ugb25seSBuZWVkIGEgd2FpdCBmb3IgbWVtb3J5IGJ1ZmZlciAqLwogCW91dHcoIFNFRVFDRkcxX0JVRkZFUl9NQUMwLCBTRUVRX0NGRzEpOwotCQorCiAJZm9yKGk9MDtpPDY7aSsrKSB7CQkJLyogc2V0IFN0YXRpb24gYWRkcmVzcyAqLwogCQlvdXRiKGRldi0+ZGV2X2FkZHJbaV0sIFNFRVFfQlVGRkVSKTsKIAkJdWRlbGF5KDIpOwogCX0KLQkKKwogCW91dHcoIFNFRVFDRkcxX0JVRkZFUl9URUEsIFNFRVFfQ0ZHMSk7CS8qIHNldCB4bWl0IGVuZCBhcmVhIHBvaW50ZXIgdG8gMTZLICovCiAJb3V0YiggREVGQVVMVF9URUEsIFNFRVFfQlVGRkVSKTsJLyogdGhpcyBnaXZlcyB1cyAxNksgb2Ygc2VuZCBidWZmZXIgYW5kIDQ4SyBvZiByZWN2IGJ1ZmZlciAqLwotCQorCiAJbHAtPnJlY2VpdmVfcHRyID0gKERFRkFVTFRfVEVBKzEpPDw4OwkvKiBzbyB3ZSBjYW4gZmluZCBvdXIgcGFja2V0X2hlYWRlciAqLwogCW91dHcoIGxwLT5yZWNlaXZlX3B0ciwgU0VFUV9SUFIpOwkvKiBSZWNlaXZlIFBvaW50ZXIgUmVnaXN0ZXIgaXMgc2V0IHRvIHJlY3YgYnVmZmVyIG1lbW9yeSAqLwotCQorCiAJb3V0dyggMHgwMGZmLCBTRUVRX1JFQSk7CQkvKiBSZWNlaXZlIEFyZWEgRW5kICovCiAKIAlpZiAobmV0X2RlYnVnPjQpIHsKQEAgLTY3MCwxMyArNjcwLDEzIEBACiAJCW91dHcoIFNFRVFDTURfRklGT19SRUFEIHwgU0VFUUNNRF9TRVRfQUxMX09GRiwgU0VFUV9DTUQpOwogCQlvdXR3KCAwLCBTRUVRX0RNQUFSKTsKIAkJb3V0dyggU0VFUUNGRzFfQlVGRkVSX01BQzAsIFNFRVFfQ0ZHMSk7Ci0JCQorCiAJCWZvcihpPTA7aTw2O2krKykgewogCQkJcHJpbnRrKCIlMDJ4ICIsaW5iKFNFRVFfQlVGRkVSKSk7CiAJCX0KIAkJcHJpbnRrKCJcbiIpOwogCX0KLQkKKwogCW91dHcoIFNFRVFDRkcxX01BQzBfRU4gfCBTRUVRQ0ZHMV9NQVRDSF9CUk9BRCB8IFNFRVFDRkcxX0JVRkZFUl9CVUZGRVIsIFNFRVFfQ0ZHMSk7CiAJb3V0dyggU0VFUUNGRzJfQVVUT19SRUEgfCBTRUVRQ0ZHMl9DVFJMTywgU0VFUV9DRkcyKTsKIAlvdXR3KCBTRUVRQ01EX1NFVF9SWF9PTiB8IFNFRVFDTURfVFhfSU5UX0VOIHwgU0VFUUNNRF9SWF9JTlRfRU4sIFNFRVFfQ01EKTsKQEAgLTY4OSw5ICs2ODksOSBAQAogCQlwcmludGsoIiVzOiBjZmcyID0gMHglMDR4XG4iLGRldi0+bmFtZSxpbncoU0VFUV9DRkcyKSk7CiAJCXByaW50aygiJXM6IHJhZXIgPSAweCUwNHhcbiIsZGV2LT5uYW1lLGludyhTRUVRX1JFQSkpOwogCQlwcmludGsoIiVzOiBkbWFhcj0gMHglMDR4XG4iLGRldi0+bmFtZSxpbncoU0VFUV9ETUFBUikpOwotCQkKKwogCX0KLX0JCit9CiAKIAogc3RhdGljIHZvaWQgaGFyZHdhcmVfc2VuZF9wYWNrZXQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGNoYXIgKmJ1ZiwgaW50IGxlbmd0aCkKQEAgLTcwNCwzMiArNzA0LDMyIEBACiAJaWYgKG5ldF9kZWJ1Zz40KSB7CiAJCXByaW50aygiJXM6IHNlbmQgMHglMDR4XG4iLGRldi0+bmFtZSxsZW5ndGgpOwogCX0KLQkKKwogCS8qIFNldCBGSUZPIHRvIHdyaXRlbW9kZSBhbmQgc2V0IHBhY2tldC1idWZmZXIgYWRkcmVzcyAqLwogCW91dHcoIFNFRVFDTURfRklGT19XUklURSB8IChzdGF0dXMgJiBTRUVRQ01EX0lOVF9NQVNLKSwgU0VFUV9DTUQpOwogCW91dHcoIHRyYW5zbWl0X3B0ciwgU0VFUV9ETUFBUik7Ci0JCisKIAkvKiBvdXRwdXQgU0VFUSBQYWNrZXQgaGVhZGVyIGJhcmZhZ2UgKi8KIAlvdXR3KCBodG9ucyhsZW5ndGggKyA0KSwgU0VFUV9CVUZGRVIpOwogCW91dHcoIFNFRVFQS1RIX1hNSVQgfCBTRUVRUEtUSF9EQVRBX0ZPTExPV1MgfCBTRUVRUEtUSF9YTUlUX0lOVF9FTiwgU0VFUV9CVUZGRVIgKTsKLQkKKwogCS8qIGJsYXQgdGhlIGJ1ZmZlciAqLwogCW91dHN3KCBTRUVRX0JVRkZFUiwgYnVmLCAobGVuZ3RoICsxKSA+PiAxKTsKIAkvKiBwYXJhbm9pYSAhISAqLwogCW91dHcoIDAsIFNFRVFfQlVGRkVSKTsKIAlvdXR3KCAwLCBTRUVRX0JVRkZFUik7Ci0JCisKIAkvKiBzZXQgYWRkcmVzcyBvZiBzdGFydCBvZiB0cmFuc21pdCBjaGFpbiAqLwogCW91dHcoIHRyYW5zbWl0X3B0ciwgU0VFUV9UUFIpOwotCQorCiAJLyogZHJhaW4gRklGTyAqLwogCXRtcCA9IGppZmZpZXM7CiAJd2hpbGUgKCAoKChzdGF0dXM9aW53KFNFRVFfU1RBVFVTKSkgJiBTRUVRU1RBVF9GSUZPX0VNUFRZKSA9PSAwKSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCB0bXAgKyBIWikpCiAJCW1iKCk7Ci0JCisKIAkvKiBkb2l0ICEgKi8KIAlvdXR3KCBTRUVRQ01EX1dJTkRPV19JTlRfQUNLIHwgU0VFUUNNRF9TRVRfVFhfT04gfCAoc3RhdHVzICYgU0VFUUNNRF9JTlRfTUFTSyksIFNFRVFfQ01EKTsKLQkKKwogfQogCiAKQEAgLTc0Miw3ICs3NDIsNyBAQAogTU9EVUxFX1BBUk1fREVTQyhpbywgIlNFRVEgODAwNSBJL08gYmFzZSBhZGRyZXNzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlycSwgIlNFRVEgODAwNSBJUlEgbnVtYmVyIik7CiAKLWludCBpbml0X21vZHVsZSh2b2lkKQoraW50IF9faW5pdCBpbml0X21vZHVsZSh2b2lkKQogewogCWRldl9zZWVxID0gc2VlcTgwMDVfcHJvYmUoLTEpOwogCWlmIChJU19FUlIoZGV2X3NlZXEpKQpAQCAtNzU4LDcgKzc1OCw3IEBACiB9CiAKICNlbmRpZiAvKiBNT0RVTEUgKi8KLQwKKwogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqICBjb21waWxlLWNvbW1hbmQ6ICJnY2MgLURfX0tFUk5FTF9fIC1JL3Vzci9zcmMvbGludXgvbmV0L2luZXQgLVdhbGwgLVdzdHJpY3QtcHJvdG90eXBlcyAtTzYgLW00ODYgLWMgc2tlbGV0b24uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmggYi9kcml2ZXJzL25ldC9zZWVxODAwNS5oCmluZGV4IDgwOWJhNmQuLjVkZmIwMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NlZXE4MDA1LmgKKysrIGIvZHJpdmVycy9uZXQvc2VlcTgwMDUuaApAQCAtMSw3ICsxLDcgQEAKLS8qIAorLyoKICAqIGRlZmluZXMsIGV0YyBmb3IgdGhlIHNlZXE4MDA1CiAgKi8KLSAKKwogLyoKICAqIFRoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCB1bmRlciBHUEwuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2dpc2VlcS5oIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5oCmluZGV4IGViY2NhNjguLjUyMzEwNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuaAorKysgYi9kcml2ZXJzL25ldC9zZ2lzZWVxLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgY29sbGlzaW9uX3R4WzJdOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBjb2xsaXNpb25fYWxsWzJdOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCBfdW51c2VkMDsKLQl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmZsYWdzOyAKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgcmZsYWdzOwogfTsKIAogc3RydWN0IHNnaXNlZXFfcmVncyB7CkBAIC03Myw3ICs3Myw3IEBACiAjZGVmaW5lIFNFRVFfVENNRF9JQyAgICAgICAweDAyIC8qIElSUSBvbiBjb2xsaXNpb25zICovCiAjZGVmaW5lIFNFRVFfVENNRF9JMTYgICAgICAweDA0IC8qIElSUSBhZnRlciAxNiBmYWlsZWQgYXR0ZW1wdHMgdG8gdHggZnJhbWUgKi8KICNkZWZpbmUgU0VFUV9UQ01EX0lQVCAgICAgIDB4MDggLyogSVJRIHdoZW4gcGFja2V0IHN1Y2Nlc3NmdWxseSB0cmFuc21pdHRlZCAqLwotI2RlZmluZSBTRUVRX1RDTURfUkIxICAgICAgMHgyMCAvKiBSZWdpc3RlciBiYW5rIG9uZSB3L211bHRpLWNhc3QgbG93IGJ5dGUgKi8gCisjZGVmaW5lIFNFRVFfVENNRF9SQjEgICAgICAweDIwIC8qIFJlZ2lzdGVyIGJhbmsgb25lIHcvbXVsdGktY2FzdCBsb3cgYnl0ZSAqLwogI2RlZmluZSBTRUVRX1RDTURfUkIyICAgICAgMHg0MCAvKiBSZWdpc3RlciBiYW5rIHR3byB3L211bHRpLWNhc3QgaGlnaCBieXRlICovCiAKIC8qIFNlZXE4MDAzIGNvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NoYXBlci5jIGIvZHJpdmVycy9uZXQvc2hhcGVyLmMKaW5kZXggYzc4MzJlNi4uZTg4NmU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2hhcGVyLmMKKysrIGIvZHJpdmVycy9uZXQvc2hhcGVyLmMKQEAgLTgsMTIgKzgsMTIgQEAKICAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKglhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KICAqCTIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgkKLSAqCU5laXRoZXIgQWxhbiBDb3ggbm9yIEN5bXJ1TmV0IEx0ZC4gYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlIAotICoJd2FycmFudHkgZm9yIGFueSBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIG1hdGVyaWFsIGlzIHByb3ZpZGVkIAotICoJIkFTLUlTIiBhbmQgYXQgbm8gY2hhcmdlLgkKICAqCi0gKgkKKyAqCU5laXRoZXIgQWxhbiBDb3ggbm9yIEN5bXJ1TmV0IEx0ZC4gYWRtaXQgbGlhYmlsaXR5IG5vciBwcm92aWRlCisgKgl3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgcHJvdmlkZWQKKyAqCSJBUy1JUyIgYW5kIGF0IG5vIGNoYXJnZS4KKyAqCisgKgogICoJQWxnb3JpdGhtOgogICoKICAqCVF1ZXVlIEZyYW1lOgpAQCAtMjYsNyArMjYsNyBAQAogICoKICAqCQlTSEFQRVJfUUxFTglNYXhpbXVtIHF1ZXVlZCBmcmFtZXMKICAqCQlTSEFQRVJfTEFURU5DWQlCb3VuZGluZyBsYXRlbmN5IG9uIGEgZnJhbWUuIExlYXZpbmcgdGhpcyBsYXRlbmN5Ci0gKgkJCQl3aW5kb3cgZHJvcHMgdGhlIGZyYW1lLiBUaGlzIHN0b3BzIHVzIHF1ZXVlaW5nIAorICoJCQkJd2luZG93IGRyb3BzIHRoZSBmcmFtZS4gVGhpcyBzdG9wcyB1cyBxdWV1ZWluZwogICoJCQkJZnJhbWVzIGZvciBhIGxvbmcgdGltZSBhbmQgY29uZnVzaW5nIGEgcmVtb3RlCiAgKgkJCQlob3N0LgogICoJCVNIQVBFUl9NQVhTTElQCU1heGltdW0gdGltZSBhIHByaW9yaXR5IGZyYW1lIG1heSBqdW1wIGZvcndhcmQuCkBAIC00Miw4ICs0Miw4IEBACiAgKglydW4gb2ZmIGEgMTAwLTE1MEh6IGJhc2UgY2xvY2sgdHlwaWNhbGx5LiBUaGlzIGdpdmVzIHVzIGEgcmVzb2x1dGlvbiBhdAogICoJMjAwS2JpdC9zZWNvbmQgb2YgYWJvdXQgMktiaXQgb3IgMjU2IGJ5dGVzLiBBYm92ZSB0aGF0IG91ciB0aW1lcgogICoJcmVzb2x1dGlvbiBtYXkgc3RhcnQgdG8gY2F1c2UgbXVjaCBtb3JlIGJ1cnN0aW5lc3MgaW4gdGhlIHRyYWZmaWMuIFdlCi0gKgljb3VsZCBhdm9pZCBhIGxvdCBvZiB0aGF0IGJ5IGNhbGxpbmcga2lja19zaGFwZXIoKSBhdCB0aGUgZW5kIG9mIHRoZSAKLSAqCXRpZWQgZGV2aWNlIHRyYW5zbWlzc2lvbnMuIElmIHlvdSBydW4gYWJvdmUgYWJvdXQgMTAwSyBzZWNvbmQgeW91IAorICoJY291bGQgYXZvaWQgYSBsb3Qgb2YgdGhhdCBieSBjYWxsaW5nIGtpY2tfc2hhcGVyKCkgYXQgdGhlIGVuZCBvZiB0aGUKKyAqCXRpZWQgZGV2aWNlIHRyYW5zbWlzc2lvbnMuIElmIHlvdSBydW4gYWJvdmUgYWJvdXQgMTAwSyBzZWNvbmQgeW91CiAgKgltYXkgbmVlZCB0byB0dW5lIHRoZSBzdXBwb3NlZCBzcGVlZCByYXRlIGZvciB0aGUgcmlnaHQgdmFsdWVzLgogICoKICAqCUJVR1M6CkBAIC02OCw3ICs2OCw3IEBACiAgKgkJVXNlIHNrYi0+Y2IgZm9yIHByaXZhdGUgZGF0YS4KICAqCQkJCSAyMDAwLzAzIEFuZGkgS2xlZW4KICAqLwotIAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KQEAgLTg3LDEzICs4NywxMyBAQAogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQvYXJwLmg+CiAKLXN0cnVjdCBzaGFwZXJfY2IgeyAKK3N0cnVjdCBzaGFwZXJfY2IgewogCXVuc2lnbmVkIGxvbmcJc2hhcGVjbG9jazsJCS8qIFRpbWUgaXQgc2hvdWxkIGdvIG91dCAqLwogCXVuc2lnbmVkIGxvbmcJc2hhcGVzdGFtcDsJCS8qIFN0YW1wIGZvciBzaGFwZXIgICAgKi8KIAlfX3UzMgkJc2hhcGVsYXRlbmN5OwkJLyogTGF0ZW5jeSBvbiBmcmFtZSAqLwogCV9fdTMyCQlzaGFwZWxlbjsJCS8qIEZyYW1lIGxlbmd0aCBpbiBjbG9ja3MgKi8KIAlfX3UxNgkJc2hhcGVwZW5kOwkJLyogUGVuZGluZyAqLwotfTsgCit9OwogI2RlZmluZSBTSEFQRVJDQihza2IpICgoc3RydWN0IHNoYXBlcl9jYiAqKSAoKHNrYiktPmNiKSkKIAogc3RhdGljIGludCBzaF9kZWJ1ZzsJCS8qIERlYnVnIGZsYWcgKi8KQEAgLTEwNSw3ICsxMDUsNyBAQAogLyoKICAqCUNvbXB1dGUgY2xvY2tzIG9uIGEgYnVmZmVyCiAgKi8KLSAgCisKIHN0YXRpYyBpbnQgc2hhcGVyX2Nsb2NrcyhzdHJ1Y3Qgc2hhcGVyICpzaGFwZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAgCWludCB0PXNrYi0+bGVuL3NoYXBlci0+Ynl0ZXNwZXJ0aWNrOwpAQCAtMTE1LDkgKzExNSw5IEBACiAvKgogICoJU2V0IHRoZSBzcGVlZCBvZiBhIHNoYXBlci4gV2UgY29tcHV0ZSB0aGlzIGluIGJ5dGVzIHBlciB0aWNrIHNpbmNlCiAgKgl0aGF0cyBob3cgdGhlIG1hY2hpbmUgd2FudHMgdG8gcnVuLiBRdW90ZWQgaW5wdXQgaXMgaW4gYml0cyBwZXIgc2Vjb25kCi0gKglhcyBpcyB0cmFkaXRpb25hbCAobm90ZSBub3QgQkFVRCkuIFdlIGFzc3VtZSA4IGJpdCBieXRlcy4gCisgKglhcyBpcyB0cmFkaXRpb25hbCAobm90ZSBub3QgQkFVRCkuIFdlIGFzc3VtZSA4IGJpdCBieXRlcy4KICAqLwotICAKKwogc3RhdGljIHZvaWQgc2hhcGVyX3NldHNwZWVkKHN0cnVjdCBzaGFwZXIgKnNoYXBlciwgaW50IGJpdHNwZXJzZWMpCiB7CiAJc2hhcGVyLT5iaXRzcGVyc2VjPWJpdHNwZXJzZWM7CkBAIC0xMjksNDAgKzEyOSw0MCBAQAogLyoKICAqCVRocm93IGEgZnJhbWUgYXQgYSBzaGFwZXIuCiAgKi8KLSAgCisKIAogc3RhdGljIGludCBzaGFwZXJfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzaGFwZXIgKnNoYXBlciA9IGRldi0+cHJpdjsKICAJc3RydWN0IHNrX2J1ZmYgKnB0cjsKLSAgCisKIAlzcGluX2xvY2soJnNoYXBlci0+bG9jayk7CiAgCXB0cj1zaGFwZXItPnNlbmRxLnByZXY7Ci0gCQorCiAgCS8qCiAgCSAqCVNldCB1cCBvdXIgcGFja2V0IGRldGFpbHMKICAJICovCi0gCSAKKwogIAlTSEFQRVJDQihza2IpLT5zaGFwZWxhdGVuY3k9MDsKICAJU0hBUEVSQ0Ioc2tiKS0+c2hhcGVjbG9jaz1zaGFwZXItPnJlY292ZXJ5OwogIAlpZih0aW1lX2JlZm9yZShTSEFQRVJDQihza2IpLT5zaGFwZWNsb2NrLCBqaWZmaWVzKSkKICAJCVNIQVBFUkNCKHNrYiktPnNoYXBlY2xvY2s9amlmZmllczsKICAJc2tiLT5wcmlvcml0eT0wOwkvKiBzaG9ydCB0ZXJtIGJ1ZyBmaXggKi8KICAJU0hBUEVSQ0Ioc2tiKS0+c2hhcGVzdGFtcD1qaWZmaWVzOwotIAkKKwogIAkvKgogIAkgKglUaW1lIHNsb3RzIGZvciB0aGlzIHBhY2tldC4KICAJICovCi0gCSAKKwogIAlTSEFQRVJDQihza2IpLT5zaGFwZWxlbj0gc2hhcGVyX2Nsb2NrcyhzaGFwZXIsc2tiKTsKLSAJCisKIAl7CiAJCXN0cnVjdCBza19idWZmICp0bXA7CiAJCS8qCiAJCSAqCVVwIG91ciBzaGFwZSBjbG9jayBieSB0aGUgdGltZSBwZW5kaW5nIG9uIHRoZSBxdWV1ZQogCQkgKgkoU2hvdWxkIGtlZXAgdGhpcyBpbiB0aGUgc2hhcGVyIGFzIGEgdmFyaWFibGUuLikKIAkJICovCi0JCWZvcih0bXA9c2tiX3BlZWsoJnNoYXBlci0+c2VuZHEpOyB0bXAhPU5VTEwgJiYgCisJCWZvcih0bXA9c2tiX3BlZWsoJnNoYXBlci0+c2VuZHEpOyB0bXAhPU5VTEwgJiYKIAkJCXRtcCE9KHN0cnVjdCBza19idWZmICopJnNoYXBlci0+c2VuZHE7IHRtcD10bXAtPm5leHQpCiAJCQlTSEFQRVJDQihza2IpLT5zaGFwZWNsb2NrKz1TSEFQRVJDQih0bXApLT5zaGFwZWxlbjsKIAkJLyoKQEAgLTE5MSw3ICsxOTEsNyBAQAogLyoKICAqCVRyYW5zbWl0IGZyb20gYSBzaGFwZXIKICAqLwotIAorCiBzdGF0aWMgdm9pZCBzaGFwZXJfcXVldWVfeG1pdChzdHJ1Y3Qgc2hhcGVyICpzaGFwZXIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYj1za2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKQEAgLTIxOCw3ICsyMTgsNyBAQAogLyoKICAqCVRpbWVyIGhhbmRsZXIgZm9yIHNoYXBpbmcgY2xvY2sKICAqLwotIAorCiBzdGF0aWMgdm9pZCBzaGFwZXJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBzaGFwZXIgKnNoYXBlciA9IChzdHJ1Y3Qgc2hhcGVyICopZGF0YTsKQEAgLTIyOSwyNSArMjI5LDI1IEBACiB9CiAKIC8qCi0gKglLaWNrIGEgc2hhcGVyIHF1ZXVlIGFuZCB0cnkgYW5kIGRvIHNvbWV0aGluZyBzZW5zaWJsZSB3aXRoIHRoZSAKLSAqCXF1ZXVlLiAKKyAqCUtpY2sgYSBzaGFwZXIgcXVldWUgYW5kIHRyeSBhbmQgZG8gc29tZXRoaW5nIHNlbnNpYmxlIHdpdGggdGhlCisgKglxdWV1ZS4KICAqLwogCiBzdGF0aWMgdm9pZCBzaGFwZXJfa2ljayhzdHJ1Y3Qgc2hhcGVyICpzaGFwZXIpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkKKwogCS8qCiAJICoJV2FsayB0aGUgbGlzdCAobWF5IGJlIGVtcHR5KQogCSAqLwotCSAKKwogCXdoaWxlKChza2I9c2tiX3BlZWsoJnNoYXBlci0+c2VuZHEpKSE9TlVMTCkKIAl7CiAJCS8qCiAJCSAqCUVhY2ggcGFja2V0IGR1ZSB0byBnbyBvdXQgYnkgbm93ICh3aXRoaW4gYW4gZXJyb3IKLQkJICoJb2YgU0hBUEVSX0JVUlNUKSBnZXRzIGtpY2tlZCBvbnRvIHRoZSBsaW5rIAorCQkgKglvZiBTSEFQRVJfQlVSU1QpIGdldHMga2lja2VkIG9udG8gdGhlIGxpbmsKIAkJICovCi0JCSAKKwogCQlpZihzaF9kZWJ1ZykKIAkJCXByaW50aygiQ2xvY2sgPSAlbGQsIGppZmZpZXMgPSAlbGRcbiIsIFNIQVBFUkNCKHNrYiktPnNoYXBlY2xvY2ssIGppZmZpZXMpOwogCQlpZih0aW1lX2JlZm9yZV9lcShTSEFQRVJDQihza2IpLT5zaGFwZWNsb2NrLCBqaWZmaWVzICsgU0hBUEVSX0JVUlNUKSkKQEAgLTI1NSwxNiArMjU1LDE2IEBACiAJCQkvKgogCQkJICoJUHVsbCB0aGUgZnJhbWUgYW5kIGdldCBpbnRlcnJ1cHRzIGJhY2sgb24uCiAJCQkgKi8KLQkJCSAKKwogCQkJc2tiX3VubGluayhza2IsICZzaGFwZXItPnNlbmRxKTsKLQkJCWlmIChzaGFwZXItPnJlY292ZXJ5IDwgCisJCQlpZiAoc2hhcGVyLT5yZWNvdmVyeSA8CiAJCQkgICAgU0hBUEVSQ0Ioc2tiKS0+c2hhcGVjbG9jayArIFNIQVBFUkNCKHNrYiktPnNoYXBlbGVuKQogCQkJCXNoYXBlci0+cmVjb3ZlcnkgPSBTSEFQRVJDQihza2IpLT5zaGFwZWNsb2NrICsgU0hBUEVSQ0Ioc2tiKS0+c2hhcGVsZW47CiAJCQkvKgogCQkJICoJUGFzcyBvbiB0byB0aGUgcGh5c2ljYWwgdGFyZ2V0IGRldmljZSB2aWEKIAkJCSAqCW91ciBsb3cgbGV2ZWwgcGFja2V0IHRocm93ZXIuCiAJCQkgKi8KLQkJCQorCiAJCQlTSEFQRVJDQihza2IpLT5zaGFwZXBlbmQ9MDsKIAkJCXNoYXBlcl9xdWV1ZV94bWl0KHNoYXBlciwgc2tiKTsJLyogRmlyZSAqLwogCQl9CkBAIC0yNzUsMjcgKzI3NSwyNyBAQAogCS8qCiAJICoJTmV4dCBraWNrLgogCSAqLwotCSAKKwogCWlmKHNrYiE9TlVMTCkKIAkJbW9kX3RpbWVyKCZzaGFwZXItPnRpbWVyLCBTSEFQRVJDQihza2IpLT5zaGFwZWNsb2NrKTsKIH0KIAogCiAvKgotICoJQnJpbmcgdGhlIGludGVyZmFjZSB1cC4gV2UganVzdCBkaXNhbGxvdyB0aGlzIHVudGlsIGEgCisgKglCcmluZyB0aGUgaW50ZXJmYWNlIHVwLiBXZSBqdXN0IGRpc2FsbG93IHRoaXMgdW50aWwgYQogICoJYmluZC4KICAqLwogCiBzdGF0aWMgaW50IHNoYXBlcl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNoYXBlciAqc2hhcGVyPWRldi0+cHJpdjsKLQkKKwogCS8qCiAJICoJQ2FuJ3Qgb3BlbiB1bnRpbCBhdHRhY2hlZC4KIAkgKglBbHNvIGNhbid0IG9wZW4gdW50aWwgc3BlZWQgaXMgc2V0LCBvciB3ZSdsbCBnZXQKIAkgKglhIGRpdmlzaW9uIGJ5IHplcm8uCiAJICovCi0JIAorCiAJaWYoc2hhcGVyLT5kZXY9PU5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCWlmKHNoYXBlci0+Yml0c3BlcnNlYz09MCkKQEAgLTMwNiw3ICszMDYsNyBAQAogLyoKICAqCUNsb3NpbmcgYSBzaGFwZXIgZmx1c2hlcyB0aGUgcXVldWVzLgogICovCi0gCisKIHN0YXRpYyBpbnQgc2hhcGVyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHNoYXBlciAqc2hhcGVyPWRldi0+cHJpdjsKQEAgLTMzNSw3ICszMzUsNyBAQAogCXJldHVybiAmc2gtPnN0YXRzOwogfQogCi1zdGF0aWMgaW50IHNoYXBlcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCitzdGF0aWMgaW50IHNoYXBlcl9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl1bnNpZ25lZCBzaG9ydCB0eXBlLCB2b2lkICpkYWRkciwgdm9pZCAqc2FkZHIsIHVuc2lnbmVkIGxlbikKIHsKIAlzdHJ1Y3Qgc2hhcGVyICpzaD1kZXYtPnByaXY7CkBAIC0zOTUsNyArMzk1LDcgQEAKIAkJbi0+b3BzID0gJmFycF9icm9rZW5fb3BzOwogCQluLT5vdXRwdXQgPSBuLT5vcHMtPm91dHB1dDsKIAl9Ci0jZW5kaWYJCisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA3LDcgKzQwNyw3IEBACiAJCXAtPnVjYXN0X3Byb2JlcyA9IDA7CiAJCXAtPm1jYXN0X3Byb2JlcyA9IDA7CiAJfQotI2VuZGlmCQorI2VuZGlmCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzMiw3ICs0MzIsNyBAQAogCX0KIAllbHNlCiAJCXNoZGV2LT5oYXJkX2hlYWRlciA9IE5VTEw7Ci0JCQorCiAJaWYoZGV2LT5yZWJ1aWxkX2hlYWRlcikKIAl7CiAJCXNoLT5yZWJ1aWxkX2hlYWRlcgk9IGRldi0+cmVidWlsZF9oZWFkZXI7CkBAIC00NDAsNyArNDQwLDcgQEAKIAl9CiAJZWxzZQogCQlzaGRldi0+cmVidWlsZF9oZWFkZXIJPSBOVUxMOwotCQorCiAjaWYgMAogCWlmKGRldi0+aGFyZF9oZWFkZXJfY2FjaGUpCiAJewpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJewogCQlzaGRldi0+aGFyZF9oZWFkZXJfY2FjaGU9IE5VTEw7CiAJfQotCQkJCisKIAlpZihkZXYtPmhlYWRlcl9jYWNoZV91cGRhdGUpCiAJewogCQlzaC0+aGVhZGVyX2NhY2hlX3VwZGF0ZQk9IGRldi0+aGVhZGVyX2NhY2hlX3VwZGF0ZTsKQEAgLTQ2NCw3ICs0NjQsNyBAQAogCXNoZGV2LT5oYXJkX2hlYWRlcl9jYWNoZSA9IE5VTEw7CiAjZW5kaWYKIAlzaGRldi0+bmVpZ2hfc2V0dXAgPSBzaGFwZXJfbmVpZ2hfc2V0dXBfZGV2OwotCQorCiAJc2hkZXYtPmhhcmRfaGVhZGVyX2xlbj1kZXYtPmhhcmRfaGVhZGVyX2xlbjsKIAlzaGRldi0+dHlwZT1kZXYtPnR5cGU7CiAJc2hkZXYtPmFkZHJfbGVuPWRldi0+YWRkcl9sZW47CkBAIC00NzcsMTMgKzQ3NywxMyBAQAogewogCXN0cnVjdCBzaGFwZXJjb25mICpzcz0gKHN0cnVjdCBzaGFwZXJjb25mICopJmlmci0+aWZyX2lmcnU7CiAJc3RydWN0IHNoYXBlciAqc2g9ZGV2LT5wcml2OwotCQorCiAJaWYoc3MtPnNzX2NtZCA9PSBTSEFQRVJfU0VUX0RFViB8fCBzcy0+c3NfY21kID09IFNIQVBFUl9TRVRfU1BFRUQpCiAJewogCQlpZighY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CiAJfQotCQorCiAJc3dpdGNoKHNzLT5zc19jbWQpCiAJewogCQljYXNlIFNIQVBFUl9TRVRfREVWOgpAQCAtNTI1LDcgKzUyNSw3IEBACiAvKgogICoJQWRkIGEgc2hhcGVyIGRldmljZSB0byB0aGUgc3lzdGVtCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgX19pbml0IHNoYXBlcl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCS8qCkBAIC01NDEsMTEgKzU0MSwxMSBAQAogCWRldi0+aGFyZF9zdGFydF94bWl0IAk9IHNoYXBlcl9zdGFydF94bWl0OwogCWRldi0+Z2V0X3N0YXRzIAkJPSBzaGFwZXJfZ2V0X3N0YXRzOwogCWRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gTlVMTDsKLQkKKwogCS8qCiAJICoJSW50aWFsaXNlIHRoZSBwYWNrZXQgcXVldWVzCiAJICovCi0JIAorCiAJLyoKIAkgKglIYW5kbGVycyBmb3Igd2hlbiB3ZSBhdHRhY2ggdG8gYSBkZXZpY2UuCiAJICovCkBAIC01NjYsNyArNTY2LDcgQEAKIAlkZXYtPnR4X3F1ZXVlX2xlbgk9IDEwOwogCWRldi0+ZmxhZ3MJCT0gMDsKIH0KLSAKKwogc3RhdGljIGludCBzaGFwZXJzID0gMTsKICNpZmRlZiBNT0RVTEUKIApAQCAtNjEwLDcgKzYxMCw3IEBACiAJCXNucHJpbnRmKG5hbWUsIElGTkFNU0laLCAic2hhcGVyJWQiLCBpKTsKIAkJZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3Qgc2hhcGVyKSwgbmFtZSwKIAkJCQkgICBzaGFwZXJfc2V0dXApOwotCQlpZiAoIWRldikgCisJCWlmICghZGV2KQogCQkJYnJlYWs7CiAKIAkJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IGRmMGNiZWIuLmU4ZjI2YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC04MjEsOSArODIxLDYgQEAKIAl1MTYgcnhfbW9kZTsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJbmV0X2Rydih0cCwgS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAotCQkJZGV2LT5uYW1lKTsKIAkJcnhfbW9kZSA9CiAJCQlBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXMgfAogCQkJQWNjZXB0QWxsUGh5czsKQEAgLTE3NTAsNyArMTc0Nyw3IEBACiAJdHAtPm1zZ19lbmFibGUgPSB2YWx1ZTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBzaXMxOTBfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNpczE5MF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCT0gc2lzMTkwX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gc2lzMTkwX3NldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JPSBzaXMxOTBfZ2V0X2RydmluZm8sCkBAIC0xODcxLDcgKzE4NjgsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBzaXMxOTBfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZzaXMxOTBfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpczE5MF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNpczE5MF9jbGVhbnVwX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCAyOWVlN2ZmLi4yODYwNmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMSwxNCArMSwxNCBAQAogLyogc2lzOTAwLmM6IEEgU2lTIDkwMC83MDE2IFBDSSBGYXN0IEV0aGVybmV0IGRyaXZlciBmb3IgTGludXguCi0gICBDb3B5cmlnaHQgMTk5OSBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnBvcmF0aW9uIAorICAgQ29weXJpZ2h0IDE5OTkgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbSBDb3Jwb3JhdGlvbgogICAgUmV2aXNpb246CTEuMDguMTAgQXByLiAyIDIwMDYKLSAgIAorCiAgICBNb2RpZmllZCBmcm9tIHRoZSBkcml2ZXIgd2hpY2ggaXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IERvbmFsZCBCZWNrZXIuCi0gICAKKwogICAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogICAgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAgIERyaXZlcnMgYmFzZWQgb24gdGhpcyBza2VsZXRvbiBmYWxsIHVuZGVyIHRoZSBHUEwgYW5kIG11c3QgcmV0YWluCiAgICB0aGUgYXV0aG9yc2hpcCAoaW1wbGljaXQgY29weXJpZ2h0KSBub3RpY2UuCi0gICAKKwogICAgUmVmZXJlbmNlczoKICAgIFNpUyA3MDE2IEZhc3QgRXRoZXJuZXQgUENJIEJ1cyAxMC8xMDAgTWJwcyBMQU4gQ29udHJvbGxlciB3aXRoIE9uTm93IFN1cHBvcnQsCiAgICBwcmVsaW1pbmFyeSBSZXYuIDEuMCBKYW4uIDE0LCAxOTk4CkBAIC0yOSw3ICsyOSw3IEBACiAgICBSZXYgMS4wOC4wMSBBdWcuIDI1IDIwMDEgSHVpLUZlbiBIc3UgdXBkYXRlIGZvciA2MzBFVCAmIHdvcmthcm91bmQgZm9yIElDUzE4OTMgUEhZCiAgICBSZXYgMS4wOC4wMCBKdW4uIDExIDIwMDEgSHVpLUZlbiBIc3Ugd29ya2Fyb3VuZCBmb3IgUlRMODIwMSBQSFkgYW5kIHNvbWUgYnVnIGZpeAogICAgUmV2IDEuMDcuMTEgQXByLiAgMiAyMDAxIEh1aS1GZW4gSHN1IHVwZGF0ZXMgUENJIGRyaXZlcnMgdG8gdXNlIHRoZSBuZXcgcGNpX3NldF9kbWFfbWFzayBmb3Iga2VybmVsIDIuNC4zCi0gICBSZXYgMS4wNy4xMCBNYXIuICAxIDIwMDEgSHVpLUZlbiBIc3UgPGhmaHN1QHNpcy5jb20udHc+IHNvbWUgYnVnIGZpeCAmIDYzNU0vQiBzdXBwb3J0IAorICAgUmV2IDEuMDcuMTAgTWFyLiAgMSAyMDAxIEh1aS1GZW4gSHN1IDxoZmhzdUBzaXMuY29tLnR3PiBzb21lIGJ1ZyBmaXggJiA2MzVNL0Igc3VwcG9ydAogICAgUmV2IDEuMDcuMDkgRmViLiAgOSAyMDAxIERhdmUgSm9uZXMgPGRhdmVqQHN1c2UuZGU+IFBDSSBlbmFibGUgY2xlYW51cAogICAgUmV2IDEuMDcuMDggSmFuLiAgOCAyMDAxIExlaS1DaHVuIENoYW5nIGFkZGVkIFJUTDgyMDEgUEhZIHN1cHBvcnQKICAgIFJldiAxLjA3LjA3IE5vdi4gMjkgMjAwMCBMZWktQ2h1biBDaGFuZyBhZGRlZCBrZXJuZWwtZG9jIGV4dHJhY3RhYmxlIGRvY3VtZW50YXRpb24gYW5kIDYzMCB3b3JrYXJvdW5kIGZpeApAQCAtMTM0LDYgKzEzNCw3IEBACiAJeyAiQU1EIDc5QzkwMSAxMEJBU0UtVCBQSFkiLCAgCQkweDAwMDAsIDB4NkI3MCwgTEFOIH0sCiAJeyAiQU1EIDc5QzkwMSBIb21lUE5BIFBIWSIsCQkweDAwMDAsIDB4NkI5MCwgSE9NRX0sCiAJeyAiSUNTIExBTiBQSFkiLAkJCTB4MDAxNSwgMHhGNDQwLCBMQU4gfSwKKwl7ICJJQ1MgTEFOIFBIWSIsCQkJMHgwMTQzLCAweEJDNzAsIExBTiB9LAogCXsgIk5TIDgzODUxIFBIWSIsCQkJMHgyMDAwLCAweDVDMjAsIE1JWCB9LAogCXsgIk5TIDgzODQ3IFBIWSIsICAgICAgICAgICAgICAgICAgICAgICAweDIwMDAsIDB4NUMzMCwgTUlYIH0sCiAJeyAiUmVhbHRlayBSVEw4MjAxIFBIWSIsCQkweDAwMDAsIDB4ODIwMCwgTEFOIH0sCkBAIC0yMzEsMTIgKzIzMiwxMiBAQAogc3RhdGljIHUxNiBzaXM5MDBfcmVzZXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBpbnQgcGh5X2FkZHIpOwogc3RhdGljIHZvaWQgc2lzOTAwX2F1dG9fbmVnb3RpYXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LCBpbnQgcGh5X2FkZHIpOwogc3RhdGljIHZvaWQgc2lzOTAwX3NldF9tb2RlIChsb25nIGlvYWRkciwgaW50IHNwZWVkLCBpbnQgZHVwbGV4KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgc2lzOTAwX2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzaXM5MDBfZXRodG9vbF9vcHM7CiAKIC8qKgogICoJc2lzOTAwX2dldF9tYWNfYWRkciAtIEdldCBNQUMgYWRkcmVzcyBmb3Igc3RhbmQgYWxvbmUgU2lTOTAwIG1vZGVsCiAgKglAcGNpX2RldjogdGhlIHNpczkwMCBwY2kgZGV2aWNlCi0gKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gZ2V0IGFkZHJlc3MgZm9yIAorICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHRvIGdldCBhZGRyZXNzIGZvcgogICoKICAqCU9sZGVyIFNpUzkwMCBhbmQgZnJpZW5kcywgdXNlIEVFUFJPTSB0byBzdG9yZSBNQUMgYWRkcmVzcy4KICAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgZnJvbSByZWFkX2VlcHJvbSgpIGludG8gQG5ldF9kZXYtPmRldl9hZGRyLgpAQCAtMjQ5LDkgKzI1MCw5IEBACiAJaW50IGk7CiAKIAkvKiBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBzYW5lIEVFUFJPTSAqLwotCXNpZ25hdHVyZSA9ICh1MTYpIHJlYWRfZWVwcm9tKGlvYWRkciwgRUVQUk9NU2lnbmF0dXJlKTsgICAgCisJc2lnbmF0dXJlID0gKHUxNikgcmVhZF9lZXByb20oaW9hZGRyLCBFRVBST01TaWduYXR1cmUpOwogCWlmIChzaWduYXR1cmUgPT0gMHhmZmZmIHx8IHNpZ25hdHVyZSA9PSAweDAwMDApIHsKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgIiVzOiBFcnJvciBFRVJQT00gcmVhZCAleFxuIiwgCisJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogRXJyb3IgRUVSUE9NIHJlYWQgJXhcbiIsCiAJCQlwY2lfbmFtZShwY2lfZGV2KSwgc2lnbmF0dXJlKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjY2LDcgKzI2Nyw3IEBACiAvKioKICAqCXNpczYzMGVfZ2V0X21hY19hZGRyIC0gR2V0IE1BQyBhZGRyZXNzIGZvciBTaVM2MzBFIG1vZGVsCiAgKglAcGNpX2RldjogdGhlIHNpczkwMCBwY2kgZGV2aWNlCi0gKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gZ2V0IGFkZHJlc3MgZm9yIAorICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHRvIGdldCBhZGRyZXNzIGZvcgogICoKICAqCVNpUzYzMEUgbW9kZWwsIHVzZSBBUEMgQ01PUyBSQU0gdG8gc3RvcmUgTUFDIGFkZHJlc3MuCiAgKglBUEMgQ01PUyBSQU0gaXMgYWNjZXNzZWQgdGhyb3VnaCBJU0EgYnJpZGdlLgpAQCAtMjkzLDcgKzI5NCw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCW91dGIoMHgwOSArIGksIDB4NzApOwotCQkoKHU4ICopKG5ldF9kZXYtPmRldl9hZGRyKSlbaV0gPSBpbmIoMHg3MSk7IAorCQkoKHU4ICopKG5ldF9kZXYtPmRldl9hZGRyKSlbaV0gPSBpbmIoMHg3MSk7CiAJfQogCXBjaV93cml0ZV9jb25maWdfYnl0ZShpc2FfYnJpZGdlLCAweDQ4LCByZWcgJiB+MHg0MCk7CiAJcGNpX2Rldl9wdXQoaXNhX2JyaWRnZSk7CkBAIC0zMDUsMTAgKzMwNiwxMCBAQAogLyoqCiAgKglzaXM2MzVfZ2V0X21hY19hZGRyIC0gR2V0IE1BQyBhZGRyZXNzIGZvciBTSVM2MzUgbW9kZWwKICAqCUBwY2lfZGV2OiB0aGUgc2lzOTAwIHBjaSBkZXZpY2UKLSAqCUBuZXRfZGV2OiB0aGUgbmV0IGRldmljZSB0byBnZXQgYWRkcmVzcyBmb3IgCisgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gZ2V0IGFkZHJlc3MgZm9yCiAgKgogICoJU2lTNjM1IG1vZGVsLCBzZXQgTUFDIFJlbG9hZCBCaXQgdG8gbG9hZCBNYWMgYWRkcmVzcyBmcm9tIEFQQwotICoJdG8gcmZkci4gcmZkciBpcyBhY2Nlc3NlZCB0aHJvdWdoIHJmY3IuIE1BQyBhZGRyZXNzIGlzIHJlYWQgaW50byAKKyAqCXRvIHJmZHIuIHJmZHIgaXMgYWNjZXNzZWQgdGhyb3VnaCByZmNyLiBNQUMgYWRkcmVzcyBpcyByZWFkIGludG8KICAqCUBuZXRfZGV2LT5kZXZfYWRkci4KICAqLwogCkBAIC0zNDIsMTYgKzM0MywxNiBAQAogLyoqCiAgKglzaXM5NnhfZ2V0X21hY19hZGRyIC0gR2V0IE1BQyBhZGRyZXNzIGZvciBTaVM5NjIgb3IgU2lTOTYzIG1vZGVsCiAgKglAcGNpX2RldjogdGhlIHNpczkwMCBwY2kgZGV2aWNlCi0gKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gZ2V0IGFkZHJlc3MgZm9yIAorICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHRvIGdldCBhZGRyZXNzIGZvcgogICoKLSAqCVNpUzk2MiBvciBTaVM5NjMgbW9kZWwsIHVzZSBFRVBST00gdG8gc3RvcmUgTUFDIGFkZHJlc3MuIEFuZCBFRVBST00gCisgKglTaVM5NjIgb3IgU2lTOTYzIG1vZGVsLCB1c2UgRUVQUk9NIHRvIHN0b3JlIE1BQyBhZGRyZXNzLiBBbmQgRUVQUk9NCiAgKglpcyBzaGFyZWQgYnkKLSAqCUxBTiBhbmQgMTM5NC4gV2hlbiBhY2Nlc3MgRUVQUk9NLCBzZW5kIEVFUkVRIHNpZ25hbCB0byBoYXJkd2FyZSBmaXJzdCAKLSAqCWFuZCB3YWl0IGZvciBFRUdOVC4gSWYgRUVHTlQgaXMgT04sIEVFUFJPTSBpcyBwZXJtaXR0ZWQgdG8gYmUgYWNjZXNzIAorICoJTEFOIGFuZCAxMzk0LiBXaGVuIGFjY2VzcyBFRVBST00sIHNlbmQgRUVSRVEgc2lnbmFsIHRvIGhhcmR3YXJlIGZpcnN0CisgKglhbmQgd2FpdCBmb3IgRUVHTlQuIElmIEVFR05UIGlzIE9OLCBFRVBST00gaXMgcGVybWl0dGVkIHRvIGJlIGFjY2VzcwogICoJYnkgTEFOLCBvdGhlcndpc2UgaXMgbm90LiBBZnRlciBNQUMgYWRkcmVzcyBpcyByZWFkIGZyb20gRUVQUk9NLCBzZW5kCi0gKglFRURPTkUgc2lnbmFsIHRvIHJlZnVzZSBFRVBST00gYWNjZXNzIGJ5IExBTi4gCi0gKglUaGUgRUVQUk9NIG1hcCBvZiBTaVM5NjIgb3IgU2lTOTYzIGlzIGRpZmZlcmVudCB0byBTaVM5MDAuIAotICoJVGhlIHNpZ25hdHVyZSBmaWVsZCBpbiBTaVM5NjIgb3IgU2lTOTYzIHNwZWMgaXMgbWVhbmluZ2xlc3MuIAorICoJRUVET05FIHNpZ25hbCB0byByZWZ1c2UgRUVQUk9NIGFjY2VzcyBieSBMQU4uCisgKglUaGUgRUVQUk9NIG1hcCBvZiBTaVM5NjIgb3IgU2lTOTYzIGlzIGRpZmZlcmVudCB0byBTaVM5MDAuCisgKglUaGUgc2lnbmF0dXJlIGZpZWxkIGluIFNpUzk2MiBvciBTaVM5NjMgc3BlYyBpcyBtZWFuaW5nbGVzcy4KICAqCU1BQyBhZGRyZXNzIGlzIHJlYWQgaW50byBAbmV0X2Rldi0+ZGV2X2FkZHIuCiAgKi8KIApAQCAtMzYyLDcgKzM2Myw3IEBACiAJbG9uZyBlZV9hZGRyID0gaW9hZGRyICsgbWVhcjsKIAl1MzIgd2FpdHRpbWUgPSAwOwogCWludCBpOwotCQorCiAJb3V0bChFRVJFUSwgZWVfYWRkcik7CiAJd2hpbGUod2FpdHRpbWUgPCAyMDAwKSB7CiAJCWlmKGlubChlZV9hZGRyKSAmIEVFR05UKSB7CkBAIC0zNzQsNyArMzc1LDcgQEAKIAkJCW91dGwoRUVET05FLCBlZV9hZGRyKTsKIAkJCXJldHVybiAxOwogCQl9IGVsc2UgewotCQkJdWRlbGF5KDEpOwkKKwkJCXVkZWxheSgxKTsKIAkJCXdhaXR0aW1lICsrOwogCQl9CiAJfQpAQCAtMzg4LDcgKzM4OSw3IEBACiAgKglAcGNpX2lkOiB0aGUgcGNpIGRldmljZSBJRAogICoKICAqCUNoZWNrIGFuZCBwcm9iZSBzaXM5MDAgbmV0IGRldmljZSBmb3IgQHBjaV9kZXYuCi0gKglHZXQgbWFjIGFkZHJlc3MgYWNjb3JkaW5nIHRvIHRoZSBjaGlwIHJldmlzaW9uLCAKKyAqCUdldCBtYWMgYWRkcmVzcyBhY2NvcmRpbmcgdG8gdGhlIGNoaXAgcmV2aXNpb24sCiAgKglhbmQgYXNzaWduIFNpUzkwMC1zcGVjaWZpYyBlbnRyaWVzIGluIHRoZSBkZXZpY2Ugc3RydWN0dXJlLgogICoJaWU6IHNpczkwMF9vcGVuKCksIHNpczkwMF9zdGFydF94bWl0KCksIHNpczkwMF9jbG9zZSgpLCBldGMuCiAgKi8KQEAgLTQxNiwxNiArNDE3LDE2IEBACiAJLyogc2V0dXAgdmFyaW91cyBiaXRzIGluIFBDSSBjb21tYW5kIHJlZ2lzdGVyICovCiAJcmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGNpX2Rldik7CiAJaWYocmV0KSByZXR1cm4gcmV0OwotCQorCiAJaSA9IHBjaV9zZXRfZG1hX21hc2socGNpX2RldiwgRE1BXzMyQklUX01BU0spOwogCWlmKGkpewogCQlwcmludGsoS0VSTl9FUlIgInNpczkwMC5jOiBhcmNoaXRlY3R1cmUgZG9lcyBub3Qgc3VwcG9ydCIKIAkJCSIzMmJpdCBQQ0kgYnVzbWFzdGVyIERNQVxuIik7CiAJCXJldHVybiBpOwogCX0KLQkKKwogCXBjaV9zZXRfbWFzdGVyKHBjaV9kZXYpOwotCQorCiAJbmV0X2RldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3Qgc2lzOTAwX3ByaXZhdGUpKTsKIAlpZiAoIW5ldF9kZXYpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNDMzLDcgKzQzNCw3IEBACiAJU0VUX05FVERFVl9ERVYobmV0X2RldiwgJnBjaV9kZXYtPmRldik7CiAKIAkvKiBXZSBkbyBhIHJlcXVlc3RfcmVnaW9uKCkgdG8gcmVnaXN0ZXIgL3Byb2MvaW9wb3J0cyBpbmZvLiAqLwotCWlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwY2lfZGV2LCAwKTsJCisJaW9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaV9kZXYsIDApOwogCXJldCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpX2RldiwgInNpczkwMCIpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX291dDsKQEAgLTQ2MSw3ICs0NjIsNyBAQAogCX0KIAlzaXNfcHJpdi0+cnhfcmluZyA9IChCdWZmZXJEZXNjICopcmluZ19zcGFjZTsKIAlzaXNfcHJpdi0+cnhfcmluZ19kbWEgPSByaW5nX2RtYTsKLQkJCisKIAkvKiBUaGUgU2lTOTAwLXNwZWNpZmljIGVudHJpZXMgaW4gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCiAJbmV0X2Rldi0+b3BlbiA9ICZzaXM5MDBfb3BlbjsKIAluZXRfZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSAmc2lzOTAwX3N0YXJ0X3htaXQ7CkBAIC00OTUsNyArNDk2LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZXRlY3RlZCByZXZpc2lvbiAlMi4yeCwgIgogCQkJCSJ0cnlpbmcgdG8gZ2V0IE1BQyBhZGRyZXNzLi4uXG4iLAogCQkJCWRldl9uYW1lLCBzaXNfcHJpdi0+Y2hpcHNldF9yZXYpOwotCQorCiAJcmV0ID0gMDsKIAlpZiAoc2lzX3ByaXYtPmNoaXBzZXRfcmV2ID09IFNJUzYzMEVfOTAwX1JFVikKIAkJcmV0ID0gc2lzNjMwZV9nZXRfbWFjX2FkZHIocGNpX2RldiwgbmV0X2Rldik7CkBAIC01MTEsNyArNTEyLDcgQEAKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnJfdW5tYXBfcng7CiAJfQotCQorCiAJLyogNjMwRVQgOiBzZXQgdGhlIG1paSBhY2Nlc3MgbW9kZSBhcyBzb2Z0d2FyZS1tb2RlICovCiAJaWYgKHNpc19wcml2LT5jaGlwc2V0X3JldiA9PSBTSVM2MzBFVF85MDBfUkVWKQogCQlvdXRsKEFDQ0VTU01PREUgfCBpbmwoaW9hZGRyICsgY3IpLCBpb2FkZHIgKyBjcik7CkBAIC01NjYsNyArNTY3LDcgQEAKIC8qKgogICoJc2lzOTAwX21paV9wcm9iZSAtIFByb2JlIE1JSSBQSFkgZm9yIHNpczkwMAogICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHRvIHByb2JlIGZvcgotICoJCisgKgogICoJU2VhcmNoIGZvciB0b3RhbCBvZiAzMiBwb3NzaWJsZSBtaWkgcGh5IGFkZHJlc3Nlcy4KICAqCUlkZW50aWZ5IGFuZCBzZXQgY3VycmVudCBwaHkgaWYgZm91bmQgb25lLAogICoJcmV0dXJuIGVycm9yIGlmIGl0IGZhaWxlZCB0byBmb3VuZC4KQEAgLTU4Myw3ICs1ODQsNyBAQAogCXNpc19wcml2LT5taWkgPSBOVUxMOwogCiAJLyogc2VhcmNoIGZvciB0b3RhbCBvZiAzMiBwb3NzaWJsZSBtaWkgcGh5IGFkZHJlc3NlcyAqLwotCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IDMyOyBwaHlfYWRkcisrKSB7CQorCWZvciAocGh5X2FkZHIgPSAwOyBwaHlfYWRkciA8IDMyOyBwaHlfYWRkcisrKSB7CiAJCXN0cnVjdCBtaWlfcGh5ICogbWlpX3BoeSA9IE5VTEw7CiAJCXUxNiBtaWlfc3RhdHVzOwogCQlpbnQgaTsKQEAgLTU5OSw3ICs2MDAsNyBAQAogCQkJCQkJZGV2X25hbWUsIHBoeV9hZGRyKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCQorCiAJCWlmICgobWlpX3BoeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaWlfcGh5KSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbm5vdCBhbGxvY2F0ZSBtZW0gZm9yIHN0cnVjdCBtaWlfcGh5XG4iKTsKIAkJCW1paV9waHkgPSBzaXNfcHJpdi0+Zmlyc3RfbWlpOwpAQCAtNjExLDkgKzYxMiw5IEBACiAJCQl9CiAJCQlyZXR1cm4gMDsKIAkJfQotCQkKKwogCQltaWlfcGh5LT5waHlfaWQwID0gbWRpb19yZWFkKG5ldF9kZXYsIHBoeV9hZGRyLCBNSUlfUEhZX0lEMCk7Ci0JCW1paV9waHktPnBoeV9pZDEgPSBtZGlvX3JlYWQobmV0X2RldiwgcGh5X2FkZHIsIE1JSV9QSFlfSUQxKTsJCQorCQltaWlfcGh5LT5waHlfaWQxID0gbWRpb19yZWFkKG5ldF9kZXYsIHBoeV9hZGRyLCBNSUlfUEhZX0lEMSk7CiAJCW1paV9waHktPnBoeV9hZGRyID0gcGh5X2FkZHI7CiAJCW1paV9waHktPnN0YXR1cyA9IG1paV9zdGF0dXM7CiAJCW1paV9waHktPm5leHQgPSBzaXNfcHJpdi0+bWlpOwpAQCAtNjM0LDE0ICs2MzUsMTQgQEAKIAkJCQkJCQlwaHlfYWRkcik7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQkKKwogCQlpZiggIW1paV9jaGlwX3RhYmxlW2ldLnBoeV9pZDEgKSB7CiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogVW5rbm93biBQSFkgdHJhbnNjZWl2ZXIgZm91bmQgYXQgYWRkcmVzcyAlZC5cbiIsCiAJCQkgICAgICAgZGV2X25hbWUsIHBoeV9hZGRyKTsKIAkJCW1paV9waHktPnBoeV90eXBlcyA9IFVOS05PV047CiAJCX0KIAl9Ci0JCisKIAlpZiAoc2lzX3ByaXYtPm1paSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBNSUkgdHJhbnNjZWl2ZXJzIGZvdW5kIVxuIiwgZGV2X25hbWUpOwogCQlyZXR1cm4gMDsKQEAgLTY1NSw3ICs2NTYsNyBAQAogICAgICAgICBpZiAoKHNpc19wcml2LT5taWktPnBoeV9pZDAgPT0gMHgwMDFEKSAmJgogCSAgICAoKHNpc19wcml2LT5taWktPnBoeV9pZDEmMHhGRkYwKSA9PSAweDgwMDApKQogICAgICAgICAJc3RhdHVzID0gc2lzOTAwX3Jlc2V0X3BoeShuZXRfZGV2LCBzaXNfcHJpdi0+Y3VyX3BoeSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8qIHdvcmthcm91bmQgZm9yIElDUzE4OTMgUEhZICovCiAgICAgICAgIGlmICgoc2lzX3ByaXYtPm1paS0+cGh5X2lkMCA9PSAweDAwMTUpICYmCiAgICAgICAgICAgICAoKHNpc19wcml2LT5taWktPnBoeV9pZDEmMHhGRkYwKSA9PSAweEY0NDApKQpAQCAtNjgwLDcgKzY4MSw3IEBACiAJCW1kaW9fd3JpdGUobmV0X2Rldiwgc2lzX3ByaXYtPmN1cl9waHksIE1JSV9DT05GSUcxLCAweDIyKTsKIAkJbWRpb193cml0ZShuZXRfZGV2LCBzaXNfcHJpdi0+Y3VyX3BoeSwgTUlJX0NPTkZJRzIsIDB4ZmYwMCk7CiAJCW1kaW9fd3JpdGUobmV0X2Rldiwgc2lzX3ByaXYtPmN1cl9waHksIE1JSV9NQVNLLCAweGZmYzApOwotCQkvL21kaW9fd3JpdGUobmV0X2Rldiwgc2lzX3ByaXYtPmN1cl9waHksIE1JSV9DT05UUk9MLCAweDEwMDApOwkKKwkJLy9tZGlvX3dyaXRlKG5ldF9kZXYsIHNpc19wcml2LT5jdXJfcGh5LCBNSUlfQ09OVFJPTCwgMHgxMDAwKTsKIAl9CiAKIAlpZiAoc2lzX3ByaXYtPm1paS0+c3RhdHVzICYgTUlJX1NUQVRfTElOSykKQEAgLTcwMyw3ICs3MDQsNyBAQAogc3RhdGljIHUxNiBzaXM5MDBfZGVmYXVsdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKiBuZXRfZGV2KQogewogCXN0cnVjdCBzaXM5MDBfcHJpdmF0ZSAqIHNpc19wcml2ID0gbmV0X2Rldi0+cHJpdjsKLSAJc3RydWN0IG1paV9waHkgKnBoeSA9IE5VTEwsICpwaHlfaG9tZSA9IE5VTEwsIAorIAlzdHJ1Y3QgbWlpX3BoeSAqcGh5ID0gTlVMTCwgKnBoeV9ob21lID0gTlVMTCwKIAkJKmRlZmF1bHRfcGh5ID0gTlVMTCwgKnBoeV9sYW4gPSBOVUxMOwogCXUxNiBzdGF0dXM7CiAKQEAgLTczOSwxNyArNzQwLDE3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyB0cmFuc2NlaXZlciBmb3VuZCBhdCBhZGRyZXNzICVkIGFzIGRlZmF1bHRcbiIsCiAJCSAgICAgICBwY2lfbmFtZShzaXNfcHJpdi0+cGNpX2RldiksIHNpc19wcml2LT5jdXJfcGh5KTsKIAl9Ci0JCisKIAlzaXNfcHJpdi0+bWlpX2luZm8ucGh5X2lkID0gc2lzX3ByaXYtPmN1cl9waHk7CiAKIAlzdGF0dXMgPSBtZGlvX3JlYWQobmV0X2Rldiwgc2lzX3ByaXYtPmN1cl9waHksIE1JSV9DT05UUk9MKTsKIAlzdGF0dXMgJj0gKH5NSUlfQ05UTF9JU09MQVRFKTsKIAotCW1kaW9fd3JpdGUobmV0X2Rldiwgc2lzX3ByaXYtPmN1cl9waHksIE1JSV9DT05UUk9MLCBzdGF0dXMpOwkKKwltZGlvX3dyaXRlKG5ldF9kZXYsIHNpc19wcml2LT5jdXJfcGh5LCBNSUlfQ09OVFJPTCwgc3RhdHVzKTsKIAlzdGF0dXMgPSBtZGlvX3JlYWQobmV0X2Rldiwgc2lzX3ByaXYtPmN1cl9waHksIE1JSV9TVEFUVVMpOwogCXN0YXR1cyA9IG1kaW9fcmVhZChuZXRfZGV2LCBzaXNfcHJpdi0+Y3VyX3BoeSwgTUlJX1NUQVRVUyk7CiAKLQlyZXR1cm4gc3RhdHVzOwkKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAKQEAgLTc2MSwxNSArNzYyLDE1IEBACiAgKglTZXQgdGhlIG1lZGlhIGNhcGFiaWxpdHkgb2YgbmV0d29yayBhZGFwdGVyIGFjY29yZGluZyB0bwogICoJbWlpIHN0YXR1cyByZWdpc3Rlci4gSXQncyBuZWNlc3NhcnkgYmVmb3JlIGF1dG8tbmVnb3RpYXRlLgogICovCi0gCisKIHN0YXRpYyB2b2lkIHNpczkwMF9zZXRfY2FwYWJpbGl0eShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldiwgc3RydWN0IG1paV9waHkgKnBoeSkKIHsKIAl1MTYgY2FwOwogCXUxNiBzdGF0dXM7Ci0JCisKIAlzdGF0dXMgPSBtZGlvX3JlYWQobmV0X2RldiwgcGh5LT5waHlfYWRkciwgTUlJX1NUQVRVUyk7CiAJc3RhdHVzID0gbWRpb19yZWFkKG5ldF9kZXYsIHBoeS0+cGh5X2FkZHIsIE1JSV9TVEFUVVMpOwotCQorCiAJY2FwID0gTUlJX05XQVlfQ1NNQV9DRCB8CiAJCSgocGh5LT5zdGF0dXMgJiBNSUlfU1RBVF9DQU5fVFhfRkRYKT8gTUlJX05XQVlfVFhfRkRYOjApIHwKIAkJKChwaHktPnN0YXR1cyAmIE1JSV9TVEFUX0NBTl9UWCkgICAgPyBNSUlfTldBWV9UWDowKSB8CkBAIC05NzQsNyArOTc1LDcgQEAKIAkJc3RhdHVzID0gbWRpb19yZWFkKG5ldF9kZXYsIHBoeV9hZGRyLCBNSUlfU1RBVFVTKTsKIAogCW1kaW9fd3JpdGUoIG5ldF9kZXYsIHBoeV9hZGRyLCBNSUlfQ09OVFJPTCwgTUlJX0NOVExfUkVTRVQgKTsKLQkKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEwOTEsNyArMTA5Miw3IEBACiAgKglzaXM5MDBfaW5pdF90eF9yaW5nIC0gSW5pdGlhbGl6ZSB0aGUgVHggZGVzY3JpcHRvciByaW5nCiAgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gaW5pdGlhbGl6ZSBmb3IKICAqCi0gKglJbml0aWFsaXplIHRoZSBUeCBkZXNjcmlwdG9yIHJpbmcsIAorICoJSW5pdGlhbGl6ZSB0aGUgVHggZGVzY3JpcHRvciByaW5nLAogICovCiAKIHN0YXRpYyB2b2lkCkBAIC0xMTI0LDExICsxMTI1LDExIEBACiAgKglzaXM5MDBfaW5pdF9yeF9yaW5nIC0gSW5pdGlhbGl6ZSB0aGUgUnggZGVzY3JpcHRvciByaW5nCiAgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gaW5pdGlhbGl6ZSBmb3IKICAqCi0gKglJbml0aWFsaXplIHRoZSBSeCBkZXNjcmlwdG9yIHJpbmcsIAorICoJSW5pdGlhbGl6ZSB0aGUgUnggZGVzY3JpcHRvciByaW5nLAogICoJYW5kIHByZS1hbGxvY2F0ZSByZWNldmllIGJ1ZmZlcnMgKHNvY2tldCBidWZmZXIpCiAgKi8KIAotc3RhdGljIHZvaWQgCitzdGF0aWMgdm9pZAogc2lzOTAwX2luaXRfcnhfcmluZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKIHsKIAlzdHJ1Y3Qgc2lzOTAwX3ByaXZhdGUgKnNpc19wcml2ID0gbmV0X2Rldi0+cHJpdjsKQEAgLTEyMzgsOCArMTIzOSw4IEBACiAJCQkJCQltYXhfdmFsdWUrNiA6IG1heF92YWx1ZSs1OwogCQl9CiAJCS8qIDYzMEIwJkIxIHJ1bGUgdG8gZGV0ZXJtaW5lIHRoZSBlcXVhbGl6ZXIgdmFsdWUgKi8KLQkJaWYgKHJldmlzaW9uID09IFNJUzYzMEFfOTAwX1JFViAmJiAKLQkJICAgIChzaXNfcHJpdi0+aG9zdF9icmlkZ2VfcmV2ID09IFNJUzYzMEIwIHx8IAorCQlpZiAocmV2aXNpb24gPT0gU0lTNjMwQV85MDBfUkVWICYmCisJCSAgICAoc2lzX3ByaXYtPmhvc3RfYnJpZGdlX3JldiA9PSBTSVM2MzBCMCB8fAogCQkgICAgIHNpc19wcml2LT5ob3N0X2JyaWRnZV9yZXYgPT0gU0lTNjMwQjEpKSB7CiAJCQlpZiAobWF4X3ZhbHVlID09IDApCiAJCQkJZXFfdmFsdWUgPSAzOwpAQCAtMTI1Myw5ICsxMjU0LDkgQEAKIAkJbWRpb193cml0ZShuZXRfZGV2LCBzaXNfcHJpdi0+Y3VyX3BoeSwgTUlJX1JFU1YsIHJlZzE0aCk7CiAJfSBlbHNlIHsKIAkJcmVnMTRoID0gbWRpb19yZWFkKG5ldF9kZXYsIHNpc19wcml2LT5jdXJfcGh5LCBNSUlfUkVTVik7Ci0JCWlmIChyZXZpc2lvbiA9PSBTSVM2MzBBXzkwMF9SRVYgJiYgCi0JCSAgICAoc2lzX3ByaXYtPmhvc3RfYnJpZGdlX3JldiA9PSBTSVM2MzBCMCB8fCAKLQkJICAgICBzaXNfcHJpdi0+aG9zdF9icmlkZ2VfcmV2ID09IFNJUzYzMEIxKSkgCisJCWlmIChyZXZpc2lvbiA9PSBTSVM2MzBBXzkwMF9SRVYgJiYKKwkJICAgIChzaXNfcHJpdi0+aG9zdF9icmlkZ2VfcmV2ID09IFNJUzYzMEIwIHx8CisJCSAgICAgc2lzX3ByaXYtPmhvc3RfYnJpZGdlX3JldiA9PSBTSVM2MzBCMSkpCiAJCQltZGlvX3dyaXRlKG5ldF9kZXYsIHNpc19wcml2LT5jdXJfcGh5LCBNSUlfUkVTViwKIAkJCQkJCShyZWcxNGggfCAweDIyMDApICYgMHhCRkZGKTsKIAkJZWxzZQpAQCAtMTI2OSw3ICsxMjcwLDcgQEAKICAqCXNpczkwMF90aW1lciAtIHNpczkwMCB0aW1lciByb3V0aW5lCiAgKglAZGF0YTogcG9pbnRlciB0byBzaXM5MDAgbmV0IGRldmljZQogICoKLSAqCU9uIGVhY2ggdGltZXIgdGlja3Mgd2UgY2hlY2sgdHdvIHRoaW5ncywgCisgKglPbiBlYWNoIHRpbWVyIHRpY2tzIHdlIGNoZWNrIHR3byB0aGluZ3MsCiAgKglsaW5rIHN0YXR1cyAoT04vT0ZGKSBhbmQgbGluayBtb2RlICgxMC8xMDAvRnVsbC9IYWxmKQogICovCiAKQEAgLTEzMTgsMTIgKzEzMTksMTIgQEAKICAgICAgICAgICAgICAgICAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNZWRpYSBMaW5rIE9mZlxuIiwgbmV0X2Rldi0+bmFtZSk7CiAKICAgICAgICAgICAgICAgICAJLyogQ2hhbmdlIG1vZGUgaXNzdWUgKi8KLSAgICAgICAgICAgICAgICAJaWYgKChtaWlfcGh5LT5waHlfaWQwID09IDB4MDAxRCkgJiYgCisgICAgICAgICAgICAgICAgCWlmICgobWlpX3BoeS0+cGh5X2lkMCA9PSAweDAwMUQpICYmCiAJCQkgICAgKChtaWlfcGh5LT5waHlfaWQxICYgMHhGRkYwKSA9PSAweDgwMDApKQogICAgICAgICAgICAgICAgCQkJc2lzOTAwX3Jlc2V0X3BoeShuZXRfZGV2LCAgc2lzX3ByaXYtPmN1cl9waHkpOwotICAKKwogCQkJc2lzNjMwX3NldF9lcShuZXRfZGV2LCBzaXNfcHJpdi0+Y2hpcHNldF9yZXYpOwotICAKKwogICAgICAgICAgICAgICAgIAlnb3RvIExvb2tGb3JMaW5rOwogICAgICAgICAgICAgICAgIH0KIAl9CkBAIC0xNDI4LDcgKzE0MjksNyBAQAogCXN0cnVjdCBzaXM5MDBfcHJpdmF0ZSAqc2lzX3ByaXYgPSBuZXRfZGV2LT5wcml2OwogCWludCBpID0gMDsKIAl1MzIgc3RhdHVzOwotCQorCiAJd2hpbGUgKGkrKyA8IDIpCiAJCXN0YXR1cyA9IG1kaW9fcmVhZChuZXRfZGV2LCBwaHlfYWRkciwgTUlJX1NUQVRVUyk7CiAKQEAgLTE0NzcsNyArMTQ3OCw3IEBACiAJYXV0b2FkdiA9IG1kaW9fcmVhZChuZXRfZGV2LCBwaHlfYWRkciwgTUlJX0FOQURWKTsKIAlhdXRvcmVjID0gbWRpb19yZWFkKG5ldF9kZXYsIHBoeV9hZGRyLCBNSUlfQU5MUEFSKTsKIAlzdGF0dXMgPSBhdXRvYWR2ICYgYXV0b3JlYzsKLQkKKwogCSpzcGVlZCA9IEhXX1NQRUVEXzEwX01CUFM7CiAJKmR1cGxleCA9IEZEWF9DQVBBQkxFX0hBTEZfU0VMRUNURUQ7CiAKQEAgLTE0ODUsNyArMTQ4Niw3IEBACiAJCSpzcGVlZCA9IEhXX1NQRUVEXzEwMF9NQlBTOwogCWlmIChzdGF0dXMgJiAoIE1JSV9OV0FZX1RYX0ZEWCB8IE1JSV9OV0FZX1RfRkRYKSkKIAkJKmR1cGxleCA9IEZEWF9DQVBBQkxFX0ZVTExfU0VMRUNURUQ7Ci0JCisKIAlzaXNfcHJpdi0+YXV0b25nX2NvbXBsZXRlID0gMTsKIAogCS8qIFdvcmthcm91bmQgZm9yIFJlYWx0ZWsgUlRMODIwMSBQSFkgaXNzdWUgKi8KQEAgLTE1MzYsNyArMTUzNyw3IEBACiAJCXN0cnVjdCBza19idWZmICpza2IgPSBzaXNfcHJpdi0+dHhfc2tidWZmW2ldOwogCiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc2lzX3ByaXYtPnBjaV9kZXYsIAorCQkJcGNpX3VubWFwX3NpbmdsZShzaXNfcHJpdi0+cGNpX2RldiwKIAkJCQlzaXNfcHJpdi0+dHhfcmluZ1tpXS5idWZwdHIsIHNrYi0+bGVuLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKQEAgLTE1NjYsNyArMTU2Nyw3IEBACiAgKglAc2tiOiBzb2NrZXQgYnVmZmVyIHBvaW50ZXIgdG8gcHV0IHRoZSBkYXRhIGJlaW5nIHRyYW5zbWl0dGVkCiAgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gdHJhbnNtaXQgd2l0aAogICoKLSAqCVNldCB0aGUgdHJhbnNtaXQgYnVmZmVyIGRlc2NyaXB0b3IsIAorICoJU2V0IHRoZSB0cmFuc21pdCBidWZmZXIgZGVzY3JpcHRvciwKICAqCWFuZCB3cml0ZSBUeEVOQSB0byBlbmFibGUgdHJhbnNtaXQgc3RhdGUgbWFjaGluZS4KICAqCXRlbGwgdXBwZXIgbGF5ZXIgaWYgdGhlIGJ1ZmZlciBpcyBmdWxsCiAgKi8KQEAgLTE2MTAsNyArMTYxMSw3IEBACiAJCS8qIGRpcnR5X3R4IGlzIG1ldCBpbiB0aGUgY3ljbGUgb2YgY3VyX3R4LCBidWZmZXIgZnVsbCAqLwogCQlzaXNfcHJpdi0+dHhfZnVsbCA9IDE7CiAJCW5ldGlmX3N0b3BfcXVldWUobmV0X2Rldik7Ci0JfSBlbHNlIGlmIChjb3VudF9kaXJ0eV90eCA8IE5VTV9UWF9ERVNDKSB7IAorCX0gZWxzZSBpZiAoY291bnRfZGlydHlfdHggPCBOVU1fVFhfREVTQykgewogCQkvKiBUeXBpY2FsIHBhdGgsIHRlbGwgdXBwZXIgbGF5ZXIgdGhhdCBtb3JlIHRyYW5zbWlzc2lvbiBpcyBwb3NzaWJsZSAqLwogCQluZXRpZl9zdGFydF9xdWV1ZShuZXRfZGV2KTsKIAl9IGVsc2UgewpAQCAtMTYzNyw3ICsxNjM4LDcgQEAKICAqCUBkZXZfaW5zdGFuY2U6IHRoZSBjbGllbnQgZGF0YSBvYmplY3QKICAqCUByZWdzOiBzbmFwc2hvdCBvZiBwcm9jZXNzb3IgY29udGV4dAogICoKLSAqCVRoZSBpbnRlcnJ1cHQgaGFuZGxlciBkb2VzIGFsbCBvZiB0aGUgUnggdGhyZWFkIHdvcmssIAorICoJVGhlIGludGVycnVwdCBoYW5kbGVyIGRvZXMgYWxsIG9mIHRoZSBSeCB0aHJlYWQgd29yaywKICAqCWFuZCBjbGVhbnMgdXAgYWZ0ZXIgdGhlIFR4IHRocmVhZAogICovCiAKQEAgLTE2ODksNyArMTY5MCw3IEBACiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsICIKIAkJICAgICAgICJpbnRlcnJ1cHQgc3RhdHVzID0gMHglIzguOHguXG4iLAogCQkgICAgICAgbmV0X2Rldi0+bmFtZSwgaW5sKGlvYWRkciArIGlzcikpOwotCQorCiAJc3Bpbl91bmxvY2sgKCZzaXNfcHJpdi0+bG9jayk7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CkBAIC0xNjk4LDcgKzE2OTksNyBAQAogICoJc2lzOTAwX3J4IC0gc2lzOTAwIHJlY2VpdmUgcm91dGluZQogICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHdoaWNoIHJlY2VpdmVzIGRhdGEKICAqCi0gKglQcm9jZXNzIHJlY2VpdmUgaW50ZXJydXB0IGV2ZW50cywgCisgKglQcm9jZXNzIHJlY2VpdmUgaW50ZXJydXB0IGV2ZW50cywKICAqCXB1dCBidWZmZXIgdG8gaGlnaGVyIGxheWVyIGFuZCByZWZpbGwgYnVmZmVyIHBvb2wKICAqCU5vdGU6IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGludGVycnVwdCBoYW5kbGVyLAogICoJZG9uJ3QgZG8gInRvbyBtdWNoIiB3b3JrIGhlcmUKQEAgLTE3NDcsNyArMTc0OCw3IEBACiAJCQkJc2lzX3ByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCWlmIChyeF9zdGF0dXMgJiAoUlhJU0VSUiB8IEZBRVJSKSkKIAkJCQlzaXNfcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQlpZiAocnhfc3RhdHVzICYgQ1JDRVJSKSAKKwkJCWlmIChyeF9zdGF0dXMgJiBDUkNFUlIpCiAJCQkJc2lzX3ByaXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKIAkJCS8qIHJlc2V0IGJ1ZmZlciBkZXNjcmlwdG9yIHN0YXRlICovCiAJCQlzaXNfcHJpdi0+cnhfcmluZ1tlbnRyeV0uY21kc3RzID0gUlhfQlVGX1NJWkU7CkBAIC0xNzU5LDcgKzE3NjAsNyBAQAogCQkJICAgd2UgYXJlIHdvcmtpbmcgb24gTlVMTCBza19idWZmIDotKCAqLwogCQkJaWYgKHNpc19wcml2LT5yeF9za2J1ZmZbZW50cnldID09IE5VTEwpIHsKIAkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihzaXNfcHJpdikpCi0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBOVUxMIHBvaW50ZXIgIiAKKwkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5VTEwgcG9pbnRlciAiCiAJCQkJCSAgICAgICJlbmNvdW50ZXJlZCBpbiBSeCByaW5nXG4iCiAJCQkJCSAgICAgICJjdXJfcng6JTQuNGQsIGRpcnR5X3J4OiU0LjRkXG4iLAogCQkJCQkgICAgICBuZXRfZGV2LT5uYW1lLCBzaXNfcHJpdi0+Y3VyX3J4LApAQCAtMTc2Nyw4ICsxNzY4LDggQEAKIAkJCQlicmVhazsKIAkJCX0KIAotCQkJcGNpX3VubWFwX3NpbmdsZShzaXNfcHJpdi0+cGNpX2RldiwgCi0JCQkJc2lzX3ByaXYtPnJ4X3JpbmdbZW50cnldLmJ1ZnB0ciwgUlhfQlVGX1NJWkUsIAorCQkJcGNpX3VubWFwX3NpbmdsZShzaXNfcHJpdi0+cGNpX2RldiwKKwkJCQlzaXNfcHJpdi0+cnhfcmluZ1tlbnRyeV0uYnVmcHRyLCBSWF9CVUZfU0laRSwKIAkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJLyogZ2l2ZSB0aGUgc29ja2V0IGJ1ZmZlciB0byB1cHBlciBsYXllcnMgKi8KIAkJCXNrYiA9IHNpc19wcml2LT5yeF9za2J1ZmZbZW50cnldOwpAQCAtMTgwNSw4ICsxODA2LDggQEAKIAkJCXNrYi0+ZGV2ID0gbmV0X2RldjsKIAkJCXNpc19wcml2LT5yeF9za2J1ZmZbZW50cnldID0gc2tiOwogCQkJc2lzX3ByaXYtPnJ4X3JpbmdbZW50cnldLmNtZHN0cyA9IFJYX0JVRl9TSVpFOwotICAgICAgICAgICAgICAgIAlzaXNfcHJpdi0+cnhfcmluZ1tlbnRyeV0uYnVmcHRyID0gCi0JCQkJcGNpX21hcF9zaW5nbGUoc2lzX3ByaXYtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgCisgICAgICAgICAgICAgICAgCXNpc19wcml2LT5yeF9yaW5nW2VudHJ5XS5idWZwdHIgPQorCQkJCXBjaV9tYXBfc2luZ2xlKHNpc19wcml2LT5wY2lfZGV2LCBza2ItPmRhdGEsCiAJCQkJCVJYX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJc2lzX3ByaXYtPmRpcnR5X3J4Kys7CiAJCX0KQEAgLTE4NTMsNyArMTg1NCw3IEBACiAgKglzaXM5MDBfZmluaXNoX3htaXQgLSBmaW5pc2ggdXAgdHJhbnNtaXNzaW9uIG9mIHBhY2tldHMKICAqCUBuZXRfZGV2OiB0aGUgbmV0IGRldmljZSB0byBiZSB0cmFuc21pdHRlZCBvbgogICoKLSAqCUNoZWNrIGZvciBlcnJvciBjb25kaXRpb24gYW5kIGZyZWUgc29ja2V0IGJ1ZmZlciBldGMgCisgKglDaGVjayBmb3IgZXJyb3IgY29uZGl0aW9uIGFuZCBmcmVlIHNvY2tldCBidWZmZXIgZXRjCiAgKglzY2hlZHVsZSBmb3IgbW9yZSB0cmFuc21pc3Npb24gYXMgbmVlZGVkCiAgKglOb3RlOiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpbnRlcnJ1cHQgaGFuZGxlciwKICAqCWRvbid0IGRvICJ0b28gbXVjaCIgd29yayBoZXJlCkBAIC0xOTAxLDcgKzE5MDIsNyBAQAogCQl9CiAJCS8qIEZyZWUgdGhlIG9yaWdpbmFsIHNrYi4gKi8KIAkJc2tiID0gc2lzX3ByaXYtPnR4X3NrYnVmZltlbnRyeV07Ci0JCXBjaV91bm1hcF9zaW5nbGUoc2lzX3ByaXYtPnBjaV9kZXYsIAorCQlwY2lfdW5tYXBfc2luZ2xlKHNpc19wcml2LT5wY2lfZGV2LAogCQkJc2lzX3ByaXYtPnR4X3JpbmdbZW50cnldLmJ1ZnB0ciwgc2tiLT5sZW4sCiAJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKQEAgLTE5MjAsMTAgKzE5MjEsMTAgQEAKIH0KIAogLyoqCi0gKglzaXM5MDBfY2xvc2UgLSBjbG9zZSBzaXM5MDAgZGV2aWNlIAorICoJc2lzOTAwX2Nsb3NlIC0gY2xvc2Ugc2lzOTAwIGRldmljZQogICoJQG5ldF9kZXY6IHRoZSBuZXQgZGV2aWNlIHRvIGJlIGNsb3NlZAogICoKLSAqCURpc2FibGUgaW50ZXJydXB0cywgc3RvcCB0aGUgVHggYW5kIFJ4IFN0YXR1cyBNYWNoaW5lIAorICoJRGlzYWJsZSBpbnRlcnJ1cHRzLCBzdG9wIHRoZSBUeCBhbmQgUnggU3RhdHVzIE1hY2hpbmUKICAqCWZyZWUgVHggYW5kIFJYIHNvY2tldCBidWZmZXIKICAqLwogCkBAIC0xOTUxLDcgKzE5NTIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fUlhfREVTQzsgaSsrKSB7CiAJCXNrYiA9IHNpc19wcml2LT5yeF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc2lzX3ByaXYtPnBjaV9kZXYsIAorCQkJcGNpX3VubWFwX3NpbmdsZShzaXNfcHJpdi0+cGNpX2RldiwKIAkJCQlzaXNfcHJpdi0+cnhfcmluZ1tpXS5idWZwdHIsCiAJCQkJUlhfQlVGX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CkBAIC0xOTYxLDcgKzE5NjIsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREVTQzsgaSsrKSB7CiAJCXNrYiA9IHNpc19wcml2LT50eF9za2J1ZmZbaV07CiAJCWlmIChza2IpIHsKLQkJCXBjaV91bm1hcF9zaW5nbGUoc2lzX3ByaXYtPnBjaV9kZXYsIAorCQkJcGNpX3VubWFwX3NpbmdsZShzaXNfcHJpdi0+cGNpX2RldiwKIAkJCQlzaXNfcHJpdi0+dHhfcmluZ1tpXS5idWZwdHIsIHNrYi0+bGVuLAogCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwpAQCAtMTk4MSw3ICsxOTgyLDcgQEAKICAqCiAgKglQcm9jZXNzIGV0aHRvb2wgY29tbWFuZCBzdWNoIGFzICJlaHRvb2wgLWkiIHRvIHNob3cgaW5mb3JtYXRpb24KICAqLwotIAorCiBzdGF0aWMgdm9pZCBzaXM5MDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCiAJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKQEAgLTE5OTcsNyArMTk5OCw3IEBACiAJc3RydWN0IHNpczkwMF9wcml2YXRlICpzaXNfcHJpdiA9IG5ldF9kZXYtPnByaXY7CiAJcmV0dXJuIHNpc19wcml2LT5tc2dfZW5hYmxlOwogfQotICAKKwogc3RhdGljIHZvaWQgc2lzOTAwX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwgdTMyIHZhbHVlKQogewogCXN0cnVjdCBzaXM5MDBfcHJpdmF0ZSAqc2lzX3ByaXYgPSBuZXRfZGV2LT5wcml2OwpAQCAtMjA0Nyw3ICsyMDQ4LDcgQEAKICAqCWJ1dCB0aGVyZSBpcyBubyBzaW1wbGUgd2F5IHRvIGZpbHRlciB0aGVtIHRvIG9ubHkgYSBzdWJzZXQgKGJyb2FkY2FzdCwKICAqCW11bHRpY2FzdCwgdW5pY2FzdCBvciBhcnApLgogICovCi0gCisKIHN0YXRpYyBpbnQgc2lzOTAwX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKIAlzdHJ1Y3Qgc2lzOTAwX3ByaXZhdGUgKnNpc19wcml2ID0gbmV0X2Rldi0+cHJpdjsKQEAgLTIwNzIsNyArMjA3Myw3IEBACiAJCXBtY3RybF9iaXRzIHw9IE1BR0lDUEtUOwogCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1BIWSkKIAkJcG1jdHJsX2JpdHMgfD0gTElOS09OOwotCQorCiAJb3V0bChwbWN0cmxfYml0cywgcG1jdHJsX2FkZHIpOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHNpc19wcml2LT5wY2lfZGV2LCBDRkdQTUNTUiwgJmNmZ3BtY3NyKTsKQEAgLTIwOTgsNyArMjA5OSw3IEBACiAJd29sLT5zdXBwb3J0ZWQgPSAoV0FLRV9QSFkgfCBXQUtFX01BR0lDKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBzaXM5MDBfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHNpczkwMF9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8gCT0gc2lzOTAwX2dldF9kcnZpbmZvLAogCS5nZXRfbXNnbGV2ZWwJPSBzaXM5MDBfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJPSBzaXM5MDBfc2V0X21zZ2xldmVsLApAQCAtMjExMSw3ICsyMTEyLDcgQEAKIH07CiAKIC8qKgotICoJbWlpX2lvY3RsIC0gcHJvY2VzcyBNSUkgaS9vIGNvbnRyb2wgY29tbWFuZCAKKyAqCW1paV9pb2N0bCAtIHByb2Nlc3MgTUlJIGkvbyBjb250cm9sIGNvbW1hbmQKICAqCUBuZXRfZGV2OiB0aGUgbmV0IGRldmljZSB0byBjb21tYW5kIGZvcgogICoJQHJxOiBwYXJhbWV0ZXIgZm9yIGNvbW1hbmQKICAqCUBjbWQ6IHRoZSBpL28gY29tbWFuZApAQCAtMjE0NCw3ICsyMTQ1LDcgQEAKIH0KIAogLyoqCi0gKglzaXM5MDBfZ2V0X3N0YXRzIC0gR2V0IHNpczkwMCByZWFkL3dyaXRlIHN0YXRpc3RpY3MgCisgKglzaXM5MDBfZ2V0X3N0YXRzIC0gR2V0IHNpczkwMCByZWFkL3dyaXRlIHN0YXRpc3RpY3MKICAqCUBuZXRfZGV2OiB0aGUgbmV0IGRldmljZSB0byBnZXQgc3RhdGlzdGljcyBmb3IKICAqCiAgKglnZXQgdHgvcnggc3RhdGlzdGljcyBmb3Igc2lzOTAwCkBAIC0yMTU5LDcgKzIxNjAsNyBAQAogfQogCiAvKioKLSAqCXNpczkwMF9zZXRfY29uZmlnIC0gU2V0IG1lZGlhIHR5cGUgYnkgbmV0X2RldmljZS5zZXRfY29uZmlnIAorICoJc2lzOTAwX3NldF9jb25maWcgLSBTZXQgbWVkaWEgdHlwZSBieSBuZXRfZGV2aWNlLnNldF9jb25maWcKICAqCUBkZXY6IHRoZSBuZXQgZGV2aWNlIGZvciBtZWRpYSB0eXBlIGNoYW5nZQogICoJQG1hcDogaWZtYXAgcGFzc2VkIGJ5IGlmY29uZmlnCiAgKgpAQCAtMjE2OSwxMCArMjE3MCwxMCBAQAogICovCiAKIHN0YXRpYyBpbnQgc2lzOTAwX3NldF9jb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmbWFwICptYXApCi17ICAgIAorewogCXN0cnVjdCBzaXM5MDBfcHJpdmF0ZSAqc2lzX3ByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IG1paV9waHkgKm1paV9waHkgPSBzaXNfcHJpdi0+bWlpOwotICAgICAgICAKKwogCXUxNiBzdGF0dXM7CiAKIAlpZiAoKG1hcC0+cG9ydCAhPSAodV9jaGFyKSgtMSkpICYmIChtYXAtPnBvcnQgIT0gZGV2LT5pZl9wb3J0KSkgewpAQCAtMjE4MCwxMCArMjE4MSwxMCBAQAogCQkgKiBsaWtlIGEgZGVmaW5pdGlvbiBvciBzdGFuZGFyZCBmb3IgdGhlIHZhbHVlcyBvZiB0aGF0IGZpZWxkLgogCQkgKiBJIHRoaW5rIHRoZSBtZWFuaW5nIG9mIHRob3NlIHZhbHVlcyBpcyBkZXZpY2Ugc3BlY2lmaWMuIEJ1dAogCQkgKiBzaW5jZSBJIHdvdWxkIGxpa2UgdG8gY2hhbmdlIHRoZSBtZWRpYSB0eXBlIHZpYSB0aGUgaWZjb25maWcKLQkJICogY29tbWFuZCBJIHVzZSB0aGUgZGVmaW5pdGlvbiBmcm9tIGxpbnV4L25ldGRldmljZS5oIAorCQkgKiBjb21tYW5kIEkgdXNlIHRoZSBkZWZpbml0aW9uIGZyb20gbGludXgvbmV0ZGV2aWNlLmgKIAkJICogKHdoaWNoIHNlZW1zIHRvIGJlIGRpZmZlcmVudCBmcm9tIHRoZSBpZnBvcnQocGNtY2lhKSBkZWZpbml0aW9uKSAqLwogCQlzd2l0Y2gobWFwLT5wb3J0KXsKLQkJY2FzZSBJRl9QT1JUX1VOS05PV046IC8qIHVzZSBhdXRvIGhlcmUgKi8gICAKKwkJY2FzZSBJRl9QT1JUX1VOS05PV046IC8qIHVzZSBhdXRvIGhlcmUgKi8KIAkJCWRldi0+aWZfcG9ydCA9IG1hcC0+cG9ydDsKIAkJCS8qIHdlIGFyZSBnb2luZyB0byBjaGFuZ2UgdGhlIG1lZGlhIHR5cGUsIHNvIHRoZSBMaW5rCiAJCQkgKiB3aWxsIGJlIHRlbXBvcmFyeSBkb3duIGFuZCB3ZSBuZWVkIHRvIHJlZmxlY3QgdGhhdApAQCAtMjE5MSwxMCArMjE5MiwxMCBAQAogCQkJICogc2Vuc2VkIGJ5IHRoZSBzaXNfdGltZXIgcHJvY2VkdXJlLCB3aGljaCBhbHNvIGRvZXMKIAkJCSAqIGFsbCB0aGUgcmVzdCBmb3IgdXMgKi8KIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0gICAgICAgICAgICAgICAgCisKIAkJCS8qIHJlYWQgY3VycmVudCBzdGF0ZSAqLwogCQkJc3RhdHVzID0gbWRpb19yZWFkKGRldiwgbWlpX3BoeS0+cGh5X2FkZHIsIE1JSV9DT05UUk9MKTsKLSAgICAgICAgICAgICAgICAKKwogCQkJLyogZW5hYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIHJlc2V0IHRoZSBuZWdvdGlvYXRpb24KIAkJCSAqIChJIGRvbid0IHJlYWxseSBrbm93IHdoYXQgdGhlIGF1dG8gbmVnYXRpb3RpYXRpb24KIAkJCSAqIHJlc2V0IHJlYWxseSBtZWFucywgYnV0IGl0IHNvdW5kcyBmb3IgbWUgcmlnaHQgdG8KQEAgLTIyMDMsNTQgKzIyMDQsNTQgQEAKIAkJCQkgICBNSUlfQ09OVFJPTCwgc3RhdHVzIHwgTUlJX0NOVExfQVVUTyB8IE1JSV9DTlRMX1JTVF9BVVRPKTsKIAogCQkJYnJlYWs7Ci0gICAgICAgICAgICAKLQkJY2FzZSBJRl9QT1JUXzEwQkFTRVQ6IC8qIDEwQmFzZVQgKi8gICAgICAgICAKKworCQljYXNlIElGX1BPUlRfMTBCQVNFVDogLyogMTBCYXNlVCAqLwogCQkJZGV2LT5pZl9wb3J0ID0gbWFwLT5wb3J0OwotICAgICAgICAgICAgICAgIAorCiAJCQkvKiB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlIHRoZSBtZWRpYSB0eXBlLCBzbyB0aGUgTGluawogCQkJICogd2lsbCBiZSB0ZW1wb3JhcnkgZG93biBhbmQgd2UgbmVlZCB0byByZWZsZWN0IHRoYXQKIAkJCSAqIGhlcmUuIFdoZW4gdGhlIExpbmsgY29tZXMgdXAgYWdhaW4sIGl0IHdpbGwgYmUKIAkJCSAqIHNlbnNlZCBieSB0aGUgc2lzX3RpbWVyIHByb2NlZHVyZSwgd2hpY2ggYWxzbyBkb2VzCiAJCQkgKiBhbGwgdGhlIHJlc3QgZm9yIHVzICovCiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotICAgICAgICAKKwogCQkJLyogc2V0IFNwZWVkIHRvIDEwTWJwcyAqLwogCQkJLyogcmVhZCBjdXJyZW50IHN0YXRlICovCiAJCQlzdGF0dXMgPSBtZGlvX3JlYWQoZGV2LCBtaWlfcGh5LT5waHlfYWRkciwgTUlJX0NPTlRST0wpOwotICAgICAgICAgICAgICAgIAorCiAJCQkvKiBkaXNhYmxlIGF1dG8gbmVnb3RpYXRpb24gYW5kIGZvcmNlIDEwTUJpdCBtb2RlKi8KIAkJCW1kaW9fd3JpdGUoZGV2LCBtaWlfcGh5LT5waHlfYWRkciwKIAkJCQkgICBNSUlfQ09OVFJPTCwgc3RhdHVzICYgfihNSUlfQ05UTF9TUEVFRCB8CiAJCQkJCU1JSV9DTlRMX0FVVE8pKTsKIAkJCWJyZWFrOwotICAgICAgICAgICAgCisKIAkJY2FzZSBJRl9QT1JUXzEwMEJBU0VUOiAvKiAxMDBCYXNlVCAqLwotCQljYXNlIElGX1BPUlRfMTAwQkFTRVRYOiAvKiAxMDBCYXNlVHggKi8gCisJCWNhc2UgSUZfUE9SVF8xMDBCQVNFVFg6IC8qIDEwMEJhc2VUeCAqLwogCQkJZGV2LT5pZl9wb3J0ID0gbWFwLT5wb3J0OwotICAgICAgICAgICAgICAgIAorCiAJCQkvKiB3ZSBhcmUgZ29pbmcgdG8gY2hhbmdlIHRoZSBtZWRpYSB0eXBlLCBzbyB0aGUgTGluawogCQkJICogd2lsbCBiZSB0ZW1wb3JhcnkgZG93biBhbmQgd2UgbmVlZCB0byByZWZsZWN0IHRoYXQKIAkJCSAqIGhlcmUuIFdoZW4gdGhlIExpbmsgY29tZXMgdXAgYWdhaW4sIGl0IHdpbGwgYmUKIAkJCSAqIHNlbnNlZCBieSB0aGUgc2lzX3RpbWVyIHByb2NlZHVyZSwgd2hpY2ggYWxzbyBkb2VzCiAJCQkgKiBhbGwgdGhlIHJlc3QgZm9yIHVzICovCiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotICAgICAgICAgICAgICAgIAorCiAJCQkvKiBzZXQgU3BlZWQgdG8gMTAwTWJwcyAqLwogCQkJLyogZGlzYWJsZSBhdXRvIG5lZ290aWF0aW9uIGFuZCBlbmFibGUgMTAwTUJpdCBNb2RlICovCiAJCQlzdGF0dXMgPSBtZGlvX3JlYWQoZGV2LCBtaWlfcGh5LT5waHlfYWRkciwgTUlJX0NPTlRST0wpOwogCQkJbWRpb193cml0ZShkZXYsIG1paV9waHktPnBoeV9hZGRyLAogCQkJCSAgIE1JSV9DT05UUk9MLCAoc3RhdHVzICYgfk1JSV9DTlRMX1NQRUVEKSB8CiAJCQkJICAgTUlJX0NOVExfU1BFRUQpOwotICAgICAgICAgICAgICAgIAorCiAJCQlicmVhazsKLSAgICAgICAgICAgIAorCiAJCWNhc2UgSUZfUE9SVF8xMEJBU0UyOiAvKiAxMEJhc2UyICovCiAJCWNhc2UgSUZfUE9SVF9BVUk6IC8qIEFVSSAqLwogCQljYXNlIElGX1BPUlRfMTAwQkFTRUZYOiAvKiAxMDBCYXNlRnggKi8KICAgICAgICAgICAgICAgICAJLyogVGhlc2UgTW9kZXMgYXJlIG5vdCBzdXBwb3J0ZWQgKGFyZSB0aGV5PykqLwogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQkJYnJlYWs7Ci0gICAgICAgICAgICAKKwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTIyNTksMTQgKzIyNjAsMTQgQEAKIH0KIAogLyoqCi0gKglzaXM5MDBfbWNhc3RfYml0bnIgLSBjb21wdXRlIGhhc2h0YWJsZSBpbmRleCAKKyAqCXNpczkwMF9tY2FzdF9iaXRuciAtIGNvbXB1dGUgaGFzaHRhYmxlIGluZGV4CiAgKglAYWRkcjogbXVsdGljYXN0IGFkZHJlc3MKICAqCUByZXZpc2lvbjogcmV2aXNpb24gaWQgb2YgY2hpcAogICoKICAqCVNpUyA5MDAgdXNlcyB0aGUgbW9zdCBzaWdpZmljYW50IDcgYml0cyB0byBpbmRleCBhIDEyOCBiaXRzIG11bHRpY2FzdAogICoJaGFzaCB0YWJsZSwgd2hpY2ggbWFrZXMgdGhpcyBmdW5jdGlvbiBhIGxpdHRsZSBiaXQgZGlmZmVyZW50IGZyb20gb3RoZXIgZHJpdmVycwogICoJU2lTIDkwMCBCMCAmIDYzNSBNL0IgdXNlcyB0aGUgbW9zdCBzaWduaWZpY2F0IDggYml0cyB0byBpbmRleCAyNTYgYml0cwotICogICAJbXVsdGljYXN0IGhhc2ggdGFibGUuIAorICogICAJbXVsdGljYXN0IGhhc2ggdGFibGUuCiAgKi8KIAogc3RhdGljIGlubGluZSB1MTYgc2lzOTAwX21jYXN0X2JpdG5yKHU4ICphZGRyLCB1OCByZXZpc2lvbikKQEAgLTIyODIsNyArMjI4Myw3IEBACiB9CiAKIC8qKgotICoJc2V0X3J4X21vZGUgLSBTZXQgU2lTOTAwIHJlY2VpdmUgbW9kZSAKKyAqCXNldF9yeF9tb2RlIC0gU2V0IFNpUzkwMCByZWNlaXZlIG1vZGUKICAqCUBuZXRfZGV2OiB0aGUgbmV0IGRldmljZSB0byBiZSBzZXQKICAqCiAgKglTZXQgU2lTOTAwIHJlY2VpdmUgbW9kZSBmb3IgcHJvbWlzY3VvdXMsIG11bHRpY2FzdCwgb3IgYnJvYWRjYXN0IG1vZGUuCkBAIC0yMzU4LDcgKzIzNTksNyBAQAogfQogCiAvKioKLSAqCXNpczkwMF9yZXNldCAtIFJlc2V0IHNpczkwMCBNQUMgCisgKglzaXM5MDBfcmVzZXQgLSBSZXNldCBzaXM5MDAgTUFDCiAgKglAbmV0X2RldjogdGhlIG5ldCBkZXZpY2UgdG8gcmVzZXQKICAqCiAgKglyZXNldCBzaXM5MDAgTUFDIGFuZCB3YWl0IHVudGlsIGZpbmlzaGVkCkBAIC0yMzc4LDcgKzIzNzksNyBAQAogCW91dGwoMCwgaW9hZGRyICsgcmZjcik7CiAKIAlvdXRsKFJ4UkVTRVQgfCBUeFJFU0VUIHwgUkVTRVQgfCBpbmwoaW9hZGRyICsgY3IpLCBpb2FkZHIgKyBjcik7Ci0JCisKIAkvKiBDaGVjayB0aGF0IHRoZSBjaGlwIGhhcyBmaW5pc2hlZCB0aGUgcmVzZXQuICovCiAJd2hpbGUgKHN0YXR1cyAmJiAoaSsrIDwgMTAwMCkpIHsKIAkJc3RhdHVzIF49IChpbmwoaXNyICsgaW9hZGRyKSAmIHN0YXR1cyk7CkBAIC0yMzkyLDcgKzIzOTMsNyBAQAogfQogCiAvKioKLSAqCXNpczkwMF9yZW1vdmUgLSBSZW1vdmUgc2lzOTAwIGRldmljZSAKKyAqCXNpczkwMF9yZW1vdmUgLSBSZW1vdmUgc2lzOTAwIGRldmljZQogICoJQHBjaV9kZXY6IHRoZSBwY2kgZGV2aWNlIHRvIGJlIHJlbW92ZWQKICAqCiAgKglyZW1vdmUgYW5kIHJlbGVhc2UgU2lTOTAwIG5ldCBkZXZpY2UKQEAgLTI0OTUsNyArMjQ5Niw3IEBACiAJcHJpbnRrKHZlcnNpb24pOwogI2VuZGlmCiAKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZzaXM5MDBfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNpczkwMF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNpczkwMF9jbGVhbnVwX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmggYi9kcml2ZXJzL25ldC9zaXM5MDAuaAppbmRleCA0ODM0ZTNhLi4xNTA1MTFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2lzOTAwLmgKKysrIGIvZHJpdmVycy9uZXQvc2lzOTAwLmgKQEAgLTEsNCArMSw0IEBACi0vKiBzaXM5MDAuaCBEZWZpbml0aW9ucyBmb3IgU2lTIGV0aGVybmV0IGNvbnRyb2xsZXJzIGluY2x1ZGluZyA3MDE0LzcwMTYgYW5kIDkwMCAKKy8qIHNpczkwMC5oIERlZmluaXRpb25zIGZvciBTaVMgZXRoZXJuZXQgY29udHJvbGxlcnMgaW5jbHVkaW5nIDcwMTQvNzAxNiBhbmQgOTAwCiAgKiBDb3B5cmlnaHQgMTk5OSBTaWxpY29uIEludGVncmF0ZWQgU3lzdGVtIENvcnBvcmF0aW9uCiAgKiBSZWZlcmVuY2VzOgogICogICBTaVMgNzAxNiBGYXN0IEV0aGVybmV0IFBDSSBCdXMgMTAvMTAwIE1icHMgTEFOIENvbnRyb2xsZXIgd2l0aCBPbk5vdyBTdXBwb3J0LApAQCAtNDksNyArNDksNyBAQAogCiBlbnVtIHNpczkwMF9jb25maWd1cmF0aW9uX3JlZ2lzdGVyX2JpdHMgewogCURFU0NSRk1UID0gMHgwMDAwMDEwMCAvKiA3MDE2IHNwZWNpZmljICovLCBSRVFBTEcgPSAweDAwMDAwMDgwLAotCVNCICAgID0gMHgwMDAwMDA0MCwgUE9XID0gMHgwMDAwMDAyMCwgRVhEID0gMHgwMDAwMDAxMCwgCisJU0IgICAgPSAweDAwMDAwMDQwLCBQT1cgPSAweDAwMDAwMDIwLCBFWEQgPSAweDAwMDAwMDEwLAogCVBFU0VMID0gMHgwMDAwMDAwOCwgTFBNID0gMHgwMDAwMDAwNCwgQkVNID0gMHgwMDAwMDAwMSwKIAkvKiA2MzUgJiA5MDBCIFNwZWNpZmljICovCiAJUk5EX0NOVCA9IDB4MDAwMDA0MDAsIEZBSVJfQkFDS09GRiA9IDB4MDAwMDAyMDAsCkBAIC01Nyw3ICs1Nyw3IEBACiB9OwogCiBlbnVtIHNpczkwMF9lZXByb21fYWNjZXNzX3JlaWdzdGVyX2JpdHMgewotCU1EQyAgPSAweDAwMDAwMDQwLCBNRERJUiA9IDB4MDAwMDAwMjAsIE1ESU8gPSAweDAwMDAwMDEwLCAvKiA3MDE2IHNwZWNpZmljICovIAorCU1EQyAgPSAweDAwMDAwMDQwLCBNRERJUiA9IDB4MDAwMDAwMjAsIE1ESU8gPSAweDAwMDAwMDEwLCAvKiA3MDE2IHNwZWNpZmljICovCiAJRUVDUyA9IDB4MDAwMDAwMDgsIEVFQ0xLID0gMHgwMDAwMDAwNCwgRUVETyA9IDB4MDAwMDAwMDIsCiAJRUVESSA9IDB4MDAwMDAwMDEKIH07CkBAIC0xMjksOSArMTI5LDkgQEAKIAogLyogVGhlIEVFUFJPTSBjb21tYW5kcyBpbmNsdWRlIHRoZSBhbHdheS1zZXQgbGVhZGluZyBiaXQuIFJlZmVyIHRvIE5NOTNDeHggZGF0YXNoZWV0ICovCiBlbnVtIHNpczkwMF9lZXByb21fY29tbWFuZCB7Ci0JRUVyZWFkICAgICA9IDB4MDE4MCwgRUV3cml0ZSAgICA9IDB4MDE0MCwgRUVlcmFzZSA9IDB4MDFDMCwgCisJRUVyZWFkICAgICA9IDB4MDE4MCwgRUV3cml0ZSAgICA9IDB4MDE0MCwgRUVlcmFzZSA9IDB4MDFDMCwKIAlFRXdyaXRlRW5hYmxlID0gMHgwMTMwLCBFRXdyaXRlRGlzYWJsZSA9IDB4MDEwMCwKLQlFRWVyYXNlQWxsID0gMHgwMTIwLCBFRXdyaXRlQWxsID0gMHgwMTEwLCAKKwlFRWVyYXNlQWxsID0gMHgwMTIwLCBFRXdyaXRlQWxsID0gMHgwMTEwLAogCUVFYWRkck1hc2sgPSAweDAxM0YsIEVFY21kU2hpZnQgPSAxNgogfTsKIApAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzIGJpdHMgKi8KIGVudW0gc2lzOTAwX2NmZ3BtY19yZWdpc3Rlcl9iaXRzIHsKLQlQTVZFUgk9IDB4MDAwNzAwMDAsIAorCVBNVkVSCT0gMHgwMDA3MDAwMCwKIAlEU0kJPSAweDAwMTAwMDAwLAogCVBNRVNQCT0gMHhmODAwMDAwMAogfTsKQEAgLTIzOCw3ICsyMzgsNyBAQAogCiAvKiBNSUkgQ29udHJvbCByZWdpc3RlciBiaXQgZGVmaW5pdGlvbnMuICovCiBlbnVtIG1paV9jb250cm9sX3JlZ2lzdGVyX2JpdHMgewotCU1JSV9DTlRMX0ZEWCAgICAgPSAweDAxMDAsIE1JSV9DTlRMX1JTVF9BVVRPID0gMHgwMjAwLCAKKwlNSUlfQ05UTF9GRFggICAgID0gMHgwMTAwLCBNSUlfQ05UTF9SU1RfQVVUTyA9IDB4MDIwMCwKIAlNSUlfQ05UTF9JU09MQVRFID0gMHgwNDAwLCBNSUlfQ05UTF9QV1JEV04gICA9IDB4MDgwMCwKIAlNSUlfQ05UTF9BVVRPICAgID0gMHgxMDAwLCBNSUlfQ05UTF9TUEVFRCAgICA9IDB4MjAwMCwKIAlNSUlfQ05UTF9MUEJLICAgID0gMHg0MDAwLCBNSUlfQ05UTF9SRVNFVCAgICA9IDB4ODAwMApAQCAtMjQ2LDggKzI0Niw4IEBACiAKIC8qIE1JSSBTdGF0dXMgcmVnaXN0ZXIgYml0ICAqLwogZW51bSBtaWlfc3RhdHVzX3JlZ2lzdGVyX2JpdHMgewotCU1JSV9TVEFUX0VYVCAgICA9IDB4MDAwMSwgTUlJX1NUQVRfSkFCICAgICAgICA9IDB4MDAwMiwgCi0JTUlJX1NUQVRfTElOSyAgID0gMHgwMDA0LCBNSUlfU1RBVF9DQU5fQVVUTyAgID0gMHgwMDA4LCAKKwlNSUlfU1RBVF9FWFQgICAgPSAweDAwMDEsIE1JSV9TVEFUX0pBQiAgICAgICAgPSAweDAwMDIsCisJTUlJX1NUQVRfTElOSyAgID0gMHgwMDA0LCBNSUlfU1RBVF9DQU5fQVVUTyAgID0gMHgwMDA4LAogCU1JSV9TVEFUX0ZBVUxUICA9IDB4MDAxMCwgTUlJX1NUQVRfQVVUT19ET05FICA9IDB4MDAyMCwKIAlNSUlfU1RBVF9DQU5fVCAgPSAweDA4MDAsIE1JSV9TVEFUX0NBTl9UX0ZEWCAgPSAweDEwMDAsCiAJTUlJX1NUQVRfQ0FOX1RYID0gMHgyMDAwLCBNSUlfU1RBVF9DQU5fVFhfRkRYID0gMHg0MDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tldGh0b29sLmMKaW5kZXggNDI2NWVkOS4uZTVjYjViNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9zazk4bGluL3NrZXRodG9vbC5jCkBAIC01ODEsNyArNTgxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RydWN0IGV0aHRvb2xfb3BzIFNrR2VFdGh0b29sT3BzID0geworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIFNrR2VFdGh0b29sT3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gZ2V0U2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBzZXRTZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gZ2V0RHJpdmVySW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrOThsaW4vc2tnZS5jIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKaW5kZXggZWU2Mjg0NS4uMGVjZmMxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKKysrIGIvZHJpdmVycy9uZXQvc2s5OGxpbi9za2dlLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAvKiBnbG9iYWwgdmFyaWFibGVzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBTS19CT09MIERvUHJpbnRJbnRlcmZhY2VDaGFuZ2UgPSBTS19UUlVFOwotZXh0ZXJuICBzdHJ1Y3QgZXRodG9vbF9vcHMgU2tHZUV0aHRvb2xPcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIFNrR2VFdGh0b29sT3BzOwogCiAvKiBsb2NhbCB2YXJpYWJsZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB1aW50cHRyX3QgVHhRdWV1ZUFkZHJbU0tfTUFYX01BQ1NdWzJdID0ge3sweDY4MCwgMHg2MDB9LHsweDc4MCwgMHg3MDB9fTsKQEAgLTUxMzMsNyArNTEzMyw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNrZ2VfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnNrZ2VfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2tnZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc2tnZV9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za19tY2EuYyBiL2RyaXZlcnMvbmV0L3NrX21jYS5jCmluZGV4IDc5OWUwOTguLjM3Yjg4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrX21jYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrX21jYS5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogbmV0LTMtZHJpdmVyIGZvciB0aGUgU0tORVQgTUNBLWJhc2VkIGNhcmRzCiAKIFRoaXMgaXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBMaW51eCBvcGVyYXRpbmcgc3lzdGVtLCBhbmQgaXMgY292ZXJlZCBieSB0aGUKQEAgLTEwLDkgKzEwLDkgQEAKIFRoaXMgZHJpdmVyIGlzIGJhc2VkIGJvdGggb24gdGhlIDNDNTIzIGRyaXZlciBhbmQgdGhlIFNLX0cxNiBkcml2ZXIuCiAKIHBhcGVyIHNvdXJjZXM6Ci0gICdQQyBIYXJkd2FyZTogQXVmYmF1LCBGdW5rdGlvbnN3ZWlzZSwgUHJvZ3JhbW1pZXJ1bmcnIGJ5IAorICAnUEMgSGFyZHdhcmU6IEF1ZmJhdSwgRnVua3Rpb25zd2Vpc2UsIFByb2dyYW1taWVydW5nJyBieQogICBIYW5zLVBldGVyIE1lc3NtZXIgZm9yIHRoZSBiYXNpYyBNaWNyb2NoYW5uZWwgc3R1ZmYKLSAgCisKICAgJ0xpbnV4IEdlcmFldGV0cmVpYmVyJyBieSBBbGxlc2FuZHJvIFJ1YmluaSwgS2FsbGUgRGFsaGVpbWVyCiAgIGZvciBoZWxwIG9uIEV0aGVybmV0IGRyaXZlciBwcm9ncmFtbWluZwogCkBAIC0yNCw3ICsyNCw3IEBACiAKICAgJ1NLLU5FVCBNQzIrIFRlY2huaWNhbCBNYW51YWwiLCBWZXJzaW9uIDEuMSBieSBTY2huZWlkZXImS29jaCBmb3IKICAgZG9jdW1lbnRhdGlvbiBvbiB0aGUgTUMyIGJvcmQKLSAgCisKICAgQSBiaWcgdGhhbmsgeW91IHRvIHRoZSBTJksgc3VwcG9ydCBmb3IgcHJvdmlkaW5nIG1lIHNvIHF1aWNrbHkgd2l0aAogICBkb2N1bWVudGF0aW9uIQogCkBAIC0zNCw3ICszNCw3IEBACiAKICAgLT4gc2V0IGRlYnVnIGxldmVsIHZpYSBpb2N0bCBpbnN0ZWFkIG9mIGNvbXBpbGUtdGltZSBzd2l0Y2hlcwogICAtPiBJIGRpZG4ndCBmb2xsb3cgdGhlIGRldmVsb3BtZW50IG9mIHRoZSAyLjEueCBrZXJuZWxzLCBzbyBteQotICAgICBhc3N1bXB0aW9ucyBhYm91dCB3aGljaCB0aGluZ3MgY2hhbmdlZCB3aXRoIHdoaWNoIGtlcm5lbCB2ZXJzaW9uIAorICAgICBhc3N1bXB0aW9ucyBhYm91dCB3aGljaCB0aGluZ3MgY2hhbmdlZCB3aXRoIHdoaWNoIGtlcm5lbCB2ZXJzaW9uCiAgICAgIGFyZSBwcm9iYWJseSBub25zZW5zZQogCiBIaXN0b3J5OgpAQCAtNTcsNyArNTcsNyBAQAogCWZpeGVkIHByb2JsZW0gaW4gR2V0TEFOQ0UgbGVhdmluZyBpbnRlcnJ1cHRzIHR1cm5lZCBvZmYKICAgICAgICAgaW5jcmVhc2UgVFggcXVldWUgdG8gNCBwYWNrZXRzIHRvIGltcHJvdmUgc2VuZCBwZXJmb3JtYW5jZQogICBNYXkgMjl0aCwgMTk5OQotCWEgZmV3IGNvcnJlY3Rpb25zIGluIHN0YXRpc3RpY3MsIGNhdWdodCByY3ZyIG92ZXJydW5zIAorCWEgZmV3IGNvcnJlY3Rpb25zIGluIHN0YXRpc3RpY3MsIGNhdWdodCByY3ZyIG92ZXJydW5zCiAgICAgICAgIHJlaW5pdGlhbGl6YXRpb24gb2YgTEFOQ0UvYm9hcmQgaW4gY3JpdGljYWwgc2l0dWF0aW9ucwogICAgICAgICBNQ0EgaW5mbyBpbXBsZW1lbnRlZAogCWltcGxlbWVudGVkIExBTkNFIG11bHRpY2FzdCBmaWx0ZXIKQEAgLTQyNyw3ICs0MjcsNyBAQAogCUluaXREc2NycyhkZXYpOwogCiAJLyogbmV4dCBSWCBkZXNjcmlwdG9yIHRvIGJlIHJlYWQgaXMgdGhlIGZpcnN0IG9uZS4gIFNpbmNlIHRoZSBMQU5DRQotCSAgIHdpbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIGFmdGVyIGluaXRpYWxpemF0aW9uLCB3ZSBoYXZlIHRvIAorCSAgIHdpbGwgc3RhcnQgZnJvbSB0aGUgYmVnaW5uaW5nIGFmdGVyIGluaXRpYWxpemF0aW9uLCB3ZSBoYXZlIHRvCiAJICAgcmVzZXQgb3V0IHBvaW50ZXJzIHRvby4gKi8KIAogCXByaXYtPm5leHRyeCA9IDA7CkBAIC04NjgsNyArODY4LDcgQEAKIAlpbnQgdG1wbGVuLCByZXR2YWwgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQkvKiBpZiB3ZSBnZXQgY2FsbGVkIHdpdGggYSBOVUxMIGRlc2NyaXB0b3IsIHRoZSBFdGhlcm5ldCBsYXllciB0aGlua3MgCisJLyogaWYgd2UgZ2V0IGNhbGxlZCB3aXRoIGEgTlVMTCBkZXNjcmlwdG9yLCB0aGUgRXRoZXJuZXQgbGF5ZXIgdGhpbmtzCiAJICAgb3VyIGNhcmQgaXMgc3R1Y2sgYW4gd2Ugc2hvdWxkIHJlc2V0IGl0LiAgV2UnbGwgZG8gdGhpcyBjb21wbGV0ZWx5OiAqLwogCiAJaWYgKHNrYiA9PSBOVUxMKSB7CkBAIC04OTYsNyArODk2LDcgQEAKIAkJdG1wbGVuID0gNjA7CiAJZGVzY3IuTGVuID0gNjU1MzYgLSB0bXBsZW47CiAKLQkvKiBjb3B5IGZpbGxlciBpbnRvIFJBTSAtIGluIGNhc2Ugd2UncmUgZmlsbGluZyB1cC4uLiAKKwkvKiBjb3B5IGZpbGxlciBpbnRvIFJBTSAtIGluIGNhc2Ugd2UncmUgZmlsbGluZyB1cC4uLgogCSAgIHdlJ3JlIGZpbGxpbmcgYSBiaXQgbW9yZSB0aGFuIG5lY2Vzc2FyeSwgYnV0IHRoYXQgZG9lc24ndCBoYXJtCiAJICAgc2luY2UgdGhlIGJ1ZmZlciBpcyBmYXIgbGFyZ2VyLi4uICovCiAJaWYgKHRtcGxlbiA+IHNrYi0+bGVuKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za19tY2EuaCBiL2RyaXZlcnMvbmV0L3NrX21jYS5oCmluZGV4IGQ2ZmExODIuLjBkYWUwNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrX21jYS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrX21jYS5oCkBAIC0yNSwxMSArMjUsMTEgQEAKIAlpbnQgbmV4dHJ4OwkJLyogaW5kZXggb2YgbmV4dCBSWCBkZXNjcmlwdG9yIHRvCiAJCQkJICAgYmUgcmVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAlpbnQgbmV4dHR4cHV0OwkJLyogaW5kZXggb2YgbmV4dCBmcmVlIFRYIGRlc2NyaXB0b3IgKi8KLQlpbnQgbmV4dHR4ZG9uZTsJCS8qIGluZGV4IG9mIG5leHQgVFggZGVzY3JpcHRvciB0byAKKwlpbnQgbmV4dHR4ZG9uZTsJCS8qIGluZGV4IG9mIG5leHQgVFggZGVzY3JpcHRvciB0bwogCQkJCSAgIGJlIGZpbmlzaGVkICAgICAgICAgICAgICAgICAgICAgICovCiAJaW50IHR4YnVzeTsJCS8qICMgb2YgYnVzeSBUWCBkZXNjcmlwdG9ycyAgICAgICAgICovCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdDsJLyogcGFja2V0IHN0YXRpc3RpY3MgICAgICAgICAgICAqLwotCWludCByZWFsaXJxOwkJLyogbWVtb3JpemVzIGFjdHVhbCBJUlEsIGV2ZW4gd2hlbiAKKwlpbnQgcmVhbGlycTsJCS8qIG1lbW9yaXplcyBhY3R1YWwgSVJRLCBldmVuIHdoZW4KIAkJCQkgICBjdXJyZW50bHkgbm90IGFsbG9jYXRlZCAgICAgICAgICAqLwogCXNrbWNhX21lZGl1bSBtZWRpdW07CS8qIHBoeXNpY2FsIGNhbm5lY3RvciAgICAgICAgICAgICAgICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggYjU3MTRhNjAuLjhlNGQxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKKysrIGIvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYwpAQCAtMjI4MCw3ICsyMjgwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2tmZF9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmc2tmZGRpX3BjaV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZza2ZkZGlfcGNpX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBza2ZkX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuYyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwppbmRleCA4MjIwMGJmLi40YjI2N2I4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5jCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuYwpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgInNrZ2UuaCIKIAogI2RlZmluZSBEUlZfTkFNRQkJInNrZ2UiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS42IgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuOCIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIiAiCiAKICNkZWZpbmUgREVGQVVMVF9UWF9SSU5HX1NJWkUJMTI4CkBAIC05MSw3ICs5MSw3IEBACiBzdGF0aWMgaW50IHNrZ2VfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHNrZ2VfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNrZ2VfcGh5X3Jlc2V0KHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpOwotc3RhdGljIHZvaWQgc2tnZV90eF9jbGVhbihzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlKTsKK3N0YXRpYyB2b2lkIHNrZ2VfdHhfY2xlYW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHhtX3BoeV93cml0ZShzdHJ1Y3Qgc2tnZV9odyAqaHcsIGludCBwb3J0LCB1MTYgcmVnLCB1MTYgdmFsKTsKIHN0YXRpYyBpbnQgZ21fcGh5X3dyaXRlKHN0cnVjdCBza2dlX2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpOwogc3RhdGljIHZvaWQgZ2VuZXNpc19nZXRfc3RhdHMoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSwgdTY0ICpkYXRhKTsKQEAgLTEwNSw2ICsxMDUsNyBAQAogc3RhdGljIGNvbnN0IGludCByeHFhZGRyW10gPSB7IFFfUjEsIFFfUjIgfTsKIHN0YXRpYyBjb25zdCB1MzIgcnhpcnFtYXNrW10gPSB7IElTX1IxX0YsIElTX1IyX0YgfTsKIHN0YXRpYyBjb25zdCB1MzIgdHhpcnFtYXNrW10gPSB7IElTX1hBMV9GLCBJU19YQTJfRiB9Oworc3RhdGljIGNvbnN0IHUzMiBpcnFtYXNrW10gPSB7IElTX1IxX0Z8SVNfWEExX0YsIElTX1IyX0Z8SVNfWEEyX0YgfTsKIAogc3RhdGljIGludCBza2dlX2dldF9yZWdzX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNTE2LDEwICs1MTcsNyBAQAogLyogQ2hpcCBpbnRlcm5hbCBmcmVxdWVuY3kgZm9yIGNsb2NrIGNhbGN1bGF0aW9ucyAqLwogc3RhdGljIGlubGluZSB1MzIgaHdraHooY29uc3Qgc3RydWN0IHNrZ2VfaHcgKmh3KQogewotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCi0JCXJldHVybiA1MzIxNTsgLyogb3I6ICA1My4xMjUgTUh6ICovCi0JZWxzZQotCQlyZXR1cm4gNzgyMTU7IC8qIG9yOiAgNzguMTI1IE1IeiAqLworCXJldHVybiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSA/IDUzMTI1IDogNzgxMjU7CiB9CiAKIC8qIENoaXAgSFogdG8gbWljcm9zZWNvbmRzICovCkBAIC02OTMsNyArNjkxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBza2dlX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBza2dlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJPSBza2dlX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCT0gc2tnZV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCT0gc2tnZV9nZXRfZHJ2aW5mbywKQEAgLTgyMSw4ICs4MTksOSBAQAogLyogQWxsb2NhdGUgYnVmZmVycyBmb3IgcmVjZWl2ZSByaW5nCiAgKiBGb3IgcmVjZWl2ZTogIHRvX2NsZWFuIGlzIG5leHQgcmVjZWl2ZWQgZnJhbWUuCiAgKi8KLXN0YXRpYyBpbnQgc2tnZV9yeF9maWxsKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpCitzdGF0aWMgaW50IHNrZ2VfcnhfZmlsbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza2dlX3JpbmcgKnJpbmcgPSAmc2tnZS0+cnhfcmluZzsKIAlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplOwogCkBAIC04MzAsNyArODI5LDggQEAKIAlkbyB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJc2tiID0gYWxsb2Nfc2tiKHNrZ2UtPnJ4X2J1Zl9zaXplICsgTkVUX0lQX0FMSUdOLCBHRlBfS0VSTkVMKTsKKwkJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldiwgc2tnZS0+cnhfYnVmX3NpemUgKyBORVRfSVBfQUxJR04sCisJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKCFza2IpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjE4MSw3ICsyMTgxLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfcGNpX21lbTsKIAotCWVyciA9IHNrZ2VfcnhfZmlsbChza2dlKTsKKwllcnIgPSBza2dlX3J4X2ZpbGwoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIGZyZWVfcnhfcmluZzsKIApAQCAtMjIxNCw2ICsyMjE0LDcgQEAKIAlza2dlX3dyaXRlOChodywgUV9BRERSKHJ4cWFkZHJbcG9ydF0sIFFfQ1NSKSwgQ1NSX1NUQVJUIHwgQ1NSX0lSUV9DTF9GKTsKIAlza2dlX2xlZChza2dlLCBMRURfTU9ERV9PTik7CiAKKwluZXRpZl9wb2xsX2VuYWJsZShkZXYpOwogCXJldHVybiAwOwogCiAgZnJlZV9yeF9yaW5nOgpAQCAtMjI4Miw3ICsyMjgzLDggQEAKIAogCXNrZ2VfbGVkKHNrZ2UsIExFRF9NT0RFX09GRik7CiAKLQlza2dlX3R4X2NsZWFuKHNrZ2UpOworCW5ldGlmX3BvbGxfZGlzYWJsZShkZXYpOworCXNrZ2VfdHhfY2xlYW4oZGV2KTsKIAlza2dlX3J4X2NsZWFuKHNrZ2UpOwogCiAJa2ZyZWUoc2tnZS0+cnhfcmluZy5zdGFydCk7CkBAIC0yMzA3LDI1ICsyMzA5LDEyIEBACiAJaW50IGk7CiAJdTMyIGNvbnRyb2wsIGxlbjsKIAl1NjQgbWFwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoc2tiX3BhZHRvKHNrYiwgRVRIX1pMRU4pKQogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCi0JaWYgKCFzcGluX3RyeWxvY2tfaXJxc2F2ZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpKQotCQkvKiBDb2xsaXNpb24gLSB0ZWxsIHVwcGVyIGxheWVyIHRvIHJlcXVldWUgKi8KLQkJcmV0dXJuIE5FVERFVl9UWF9MT0NLRUQ7Ci0KLQlpZiAodW5saWtlbHkoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKLQkJaWYgKCFuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpIHsKLQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza2dlLT50eF9sb2NrLCBmbGFncyk7CisJaWYgKHVubGlrZWx5KHNrZ2VfYXZhaWwoJnNrZ2UtPnR4X3JpbmcpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKQogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7Ci0JfQogCiAJZSA9IHNrZ2UtPnR4X3JpbmcudG9fdXNlOwogCXRkID0gZS0+ZGVzYzsKQEAgLTI0MDAsOCArMjM4OSw2IEBACiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAl9CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZza2dlLT50eF9sb2NrLCBmbGFncyk7Ci0KIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0yNDMxLDE4ICsyNDE4LDE4IEBACiAJCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0eCBkb25lIHNsb3QgJXRkXG4iLAogCQkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgZSAtIHNrZ2UtPnR4X3Jpbmcuc3RhcnQpOwogCi0JCWRldl9rZnJlZV9za2JfYW55KGUtPnNrYik7CisJCWRldl9rZnJlZV9za2IoZS0+c2tiKTsKIAl9CiAJZS0+c2tiID0gTlVMTDsKIH0KIAogLyogRnJlZSBhbGwgYnVmZmVycyBpbiB0cmFuc21pdCByaW5nICovCi1zdGF0aWMgdm9pZCBza2dlX3R4X2NsZWFuKHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UpCitzdGF0aWMgdm9pZCBza2dlX3R4X2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNrZ2VfZWxlbWVudCAqZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNrZ2UtPnR4X2xvY2ssIGZsYWdzKTsKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CiAJZm9yIChlID0gc2tnZS0+dHhfcmluZy50b19jbGVhbjsgZSAhPSBza2dlLT50eF9yaW5nLnRvX3VzZTsgZSA9IGUtPm5leHQpIHsKIAkJc3RydWN0IHNrZ2VfdHhfZGVzYyAqdGQgPSBlLT5kZXNjOwogCQlza2dlX3R4X2ZyZWUoc2tnZSwgZSwgdGQtPmNvbnRyb2wpOwpAQCAtMjQ1MCw4ICsyNDM3LDggQEAKIAl9CiAKIAlza2dlLT50eF9yaW5nLnRvX2NsZWFuID0gZTsKLQluZXRpZl93YWtlX3F1ZXVlKHNrZ2UtPm5ldGRldik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2tnZS0+dHhfbG9jaywgZmxhZ3MpOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwluZXRpZl90eF91bmxvY2tfYmgoZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgc2tnZV90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0yNDYyLDcgKzI0NDksNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiB0eCB0aW1lb3V0XG4iLCBkZXYtPm5hbWUpOwogCiAJc2tnZV93cml0ZTgoc2tnZS0+aHcsIFFfQUREUih0eHFhZGRyW3NrZ2UtPnBvcnRdLCBRX0NTUiksIENTUl9TVE9QKTsKLQlza2dlX3R4X2NsZWFuKHNrZ2UpOworCXNrZ2VfdHhfY2xlYW4oZGV2KTsKIH0KIAogc3RhdGljIGludCBza2dlX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCkBAIC0yNTg1LDE2ICsyNTcyLDE3IEBACiAvKiBHZXQgcmVjZWl2ZSBidWZmZXIgZnJvbSBkZXNjcmlwdG9yLgogICogSGFuZGxlcyBjb3B5IG9mIHNtYWxsIGJ1ZmZlcnMgYW5kIHJlYWxsb2NhdGlvbiBmYWlsdXJlcwogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2dlX3J4X2dldChzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlLAotCQkJCQkgIHN0cnVjdCBza2dlX2VsZW1lbnQgKmUsCi0JCQkJCSAgdTMyIGNvbnRyb2wsIHUzMiBzdGF0dXMsIHUxNiBjc3VtKQorc3RhdGljIHN0cnVjdCBza19idWZmICpza2dlX3J4X2dldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBza2dlX2VsZW1lbnQgKmUsCisJCQkJICAgdTMyIGNvbnRyb2wsIHUzMiBzdGF0dXMsIHUxNiBjc3VtKQogeworCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTE2IGxlbiA9IGNvbnRyb2wgJiBCTVVfQkJDOwogCiAJaWYgKHVubGlrZWx5KG5ldGlmX21zZ19yeF9zdGF0dXMoc2tnZSkpKQogCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiByeCBzbG90ICV0ZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIGUgLSBza2dlLT5yeF9yaW5nLnN0YXJ0LAorCQkgICAgICAgZGV2LT5uYW1lLCBlIC0gc2tnZS0+cnhfcmluZy5zdGFydCwKIAkJICAgICAgIHN0YXR1cywgbGVuKTsKIAogCWlmIChsZW4gPiBza2dlLT5yeF9idWZfc2l6ZSkKQEAgLTI2MTAsNyArMjU5OCw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlpZiAobGVuIDwgUlhfQ09QWV9USFJFU0hPTEQpIHsKLQkJc2tiID0gYWxsb2Nfc2tiKGxlbiArIDIsIEdGUF9BVE9NSUMpOworCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgbGVuICsgMik7CiAJCWlmICghc2tiKQogCQkJZ290byByZXN1Ym1pdDsKIApAQCAtMjYyNSw3ICsyNjEzLDcgQEAKIAkJc2tnZV9yeF9yZXVzZShlLCBza2dlLT5yeF9idWZfc2l6ZSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2I7Ci0JCW5za2IgPSBhbGxvY19za2Ioc2tnZS0+cnhfYnVmX3NpemUgKyBORVRfSVBfQUxJR04sIEdGUF9BVE9NSUMpOworCQluc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIHNrZ2UtPnJ4X2J1Zl9zaXplICsgTkVUX0lQX0FMSUdOKTsKIAkJaWYgKCFuc2tiKQogCQkJZ290byByZXN1Ym1pdDsKIApAQCAtMjY0MCwyMCArMjYyOCwxOSBAQAogCX0KIAogCXNrYl9wdXQoc2tiLCBsZW4pOwotCXNrYi0+ZGV2ID0gc2tnZS0+bmV0ZGV2OwogCWlmIChza2dlLT5yeF9jc3VtKSB7CiAJCXNrYi0+Y3N1bSA9IGNzdW07CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fSFc7CiAJfQogCi0Jc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tnZS0+bmV0ZGV2KTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBkZXYpOwogCiAJcmV0dXJuIHNrYjsKIGVycm9yOgogCiAJaWYgKG5ldGlmX21zZ19yeF9lcnIoc2tnZSkpCiAJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJ4IGVyciwgc2xvdCAldGQgY29udHJvbCAweCV4IHN0YXR1cyAweCV4XG4iLAotCQkgICAgICAgc2tnZS0+bmV0ZGV2LT5uYW1lLCBlIC0gc2tnZS0+cnhfcmluZy5zdGFydCwKKwkJICAgICAgIGRldi0+bmFtZSwgZSAtIHNrZ2UtPnJ4X3Jpbmcuc3RhcnQsCiAJCSAgICAgICBjb250cm9sLCBzdGF0dXMpOwogCiAJaWYgKHNrZ2UtPmh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykgewpAQCAtMjY3OCwxNSArMjY2NSwxNSBAQAogfQogCiAvKiBGcmVlIGFsbCBidWZmZXJzIGluIFR4IHJpbmcgd2hpY2ggYXJlIG5vIGxvbmdlciBvd25lZCBieSBkZXZpY2UgKi8KLXN0YXRpYyB2b2lkIHNrZ2VfdHhpcnEoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNrZ2VfdHhfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza2dlX3JpbmcgKnJpbmcgPSAmc2tnZS0+dHhfcmluZzsKIAlzdHJ1Y3Qgc2tnZV9lbGVtZW50ICplOwogCi0Jcm1iKCk7CisJc2tnZV93cml0ZTgoc2tnZS0+aHcsIFFfQUREUih0eHFhZGRyW3NrZ2UtPnBvcnRdLCBRX0NTUiksIENTUl9JUlFfQ0xfRik7CiAKLQlzcGluX2xvY2soJnNrZ2UtPnR4X2xvY2spOworCW5ldGlmX3R4X2xvY2soZGV2KTsKIAlmb3IgKGUgPSByaW5nLT50b19jbGVhbjsgZSAhPSByaW5nLT50b191c2U7IGUgPSBlLT5uZXh0KSB7CiAJCXN0cnVjdCBza2dlX3R4X2Rlc2MgKnRkID0gZS0+ZGVzYzsKIApAQCAtMjY5NywxMSArMjY4NCwxMCBAQAogCX0KIAlza2dlLT50eF9yaW5nLnRvX2NsZWFuID0gZTsKIAotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKHNrZ2UtPm5ldGRldikKLQkgICAgJiYgc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPiBUWF9MT1dfV0FURVIpCi0JCW5ldGlmX3dha2VfcXVldWUoc2tnZS0+bmV0ZGV2KTsKKwlpZiAoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPiBUWF9MT1dfV0FURVIpCisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAotCXNwaW5fdW5sb2NrKCZza2dlLT50eF9sb2NrKTsKKwluZXRpZl90eF91bmxvY2soZGV2KTsKIH0KIAogc3RhdGljIGludCBza2dlX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50ICpidWRnZXQpCkBAIC0yNzEzLDYgKzI2OTksMTAgQEAKIAlpbnQgdG9fZG8gPSBtaW4oZGV2LT5xdW90YSwgKmJ1ZGdldCk7CiAJaW50IHdvcmtfZG9uZSA9IDA7CiAKKwlza2dlX3R4X2RvbmUoZGV2KTsKKworCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIocnhxYWRkcltza2dlLT5wb3J0XSwgUV9DU1IpLCBDU1JfSVJRX0NMX0YpOworCiAJZm9yIChlID0gcmluZy0+dG9fY2xlYW47IHByZWZldGNoKGUtPm5leHQpLCB3b3JrX2RvbmUgPCB0b19kbzsgZSA9IGUtPm5leHQpIHsKIAkJc3RydWN0IHNrZ2VfcnhfZGVzYyAqcmQgPSBlLT5kZXNjOwogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMjcyMyw3ICsyNzEzLDcgQEAKIAkJaWYgKGNvbnRyb2wgJiBCTVVfT1dOKQogCQkJYnJlYWs7CiAKLQkJc2tiID0gc2tnZV9yeF9nZXQoc2tnZSwgZSwgY29udHJvbCwgcmQtPnN0YXR1cywgcmQtPmNzdW0yKTsKKwkJc2tiID0gc2tnZV9yeF9nZXQoZGV2LCBlLCBjb250cm9sLCByZC0+c3RhdHVzLCByZC0+Y3N1bTIpOwogCQlpZiAobGlrZWx5KHNrYikpIHsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwpAQCAtMjc0MywxMiArMjczMywxMSBAQAogCWlmICh3b3JrX2RvbmUgPj0gIHRvX2RvKQogCQlyZXR1cm4gMTsgLyogbm90IGRvbmUgKi8KIAotCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7Ci0KIAlzcGluX2xvY2tfaXJxKCZody0+aHdfbG9jayk7Ci0JaHctPmludHJfbWFzayB8PSByeGlycW1hc2tbc2tnZS0+cG9ydF07CisJX19uZXRpZl9yeF9jb21wbGV0ZShkZXYpOworCWh3LT5pbnRyX21hc2sgfD0gaXJxbWFza1tza2dlLT5wb3J0XTsKICAgCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgaHctPmludHJfbWFzayk7Ci0JbW1pb3diKCk7CisJc2tnZV9yZWFkMzIoaHcsIEIwX0lNU0spOwogCXNwaW5fdW5sb2NrX2lycSgmaHctPmh3X2xvY2spOwogCiAJcmV0dXJuIDA7CkBAIC0yODgyLDYgKzI4NzEsNyBAQAogCXNwaW5fbG9ja19pcnEoJmh3LT5od19sb2NrKTsKIAlody0+aW50cl9tYXNrIHw9IElTX0VYVF9SRUc7CiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlza2dlX3JlYWQzMihodywgQjBfSU1TSyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZody0+aHdfbG9jayk7CiB9CiAKQEAgLTI4ODksMjcgKzI4NzksMjMgQEAKIHsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBkZXZfaWQ7CiAJdTMyIHN0YXR1czsKLQotCS8qIFJlYWRpbmcgdGhpcyByZWdpc3RlciBtYXNrcyBJUlEgKi8KLQlzdGF0dXMgPSBza2dlX3JlYWQzMihodywgQjBfU1BfSVNSQyk7Ci0JaWYgKHN0YXR1cyA9PSAwKQotCQlyZXR1cm4gSVJRX05PTkU7CisJaW50IGhhbmRsZWQgPSAwOwogCiAJc3Bpbl9sb2NrKCZody0+aHdfbG9jayk7CisJLyogUmVhZGluZyB0aGlzIHJlZ2lzdGVyIG1hc2tzIElSUSAqLworCXN0YXR1cyA9IHNrZ2VfcmVhZDMyKGh3LCBCMF9TUF9JU1JDKTsKKwlpZiAoc3RhdHVzID09IDAgfHwgc3RhdHVzID09IH4wKQorCQlnb3RvIG91dDsKKworCWhhbmRsZWQgPSAxOwogCXN0YXR1cyAmPSBody0+aW50cl9tYXNrOwogCWlmIChzdGF0dXMgJiBJU19FWFRfUkVHKSB7CiAJCWh3LT5pbnRyX21hc2sgJj0gfklTX0VYVF9SRUc7CiAJCXNjaGVkdWxlX3dvcmsoJmh3LT5waHlfd29yayk7CiAJfQogCi0JaWYgKHN0YXR1cyAmIElTX1hBMV9GKSB7Ci0JCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9YQTEsIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKLQkJc2tnZV90eGlycShody0+ZGV2WzBdKTsKLQl9Ci0KLQlpZiAoc3RhdHVzICYgSVNfUjFfRikgewotCQlza2dlX3dyaXRlOChodywgUV9BRERSKFFfUjEsIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKLQkJaHctPmludHJfbWFzayAmPSB+SVNfUjFfRjsKKwlpZiAoc3RhdHVzICYgKElTX1hBMV9GfElTX1IxX0YpKSB7CisJCWh3LT5pbnRyX21hc2sgJj0gfihJU19YQTFfRnxJU19SMV9GKTsKIAkJbmV0aWZfcnhfc2NoZWR1bGUoaHctPmRldlswXSk7CiAJfQogCkBAIC0yOTI4LDE0ICsyOTE0LDggQEAKIAkJc2tnZV9tYWNfaW50cihodywgMCk7CiAKIAlpZiAoaHctPmRldlsxXSkgewotCQlpZiAoc3RhdHVzICYgSVNfWEEyX0YpIHsKLQkJCXNrZ2Vfd3JpdGU4KGh3LCBRX0FERFIoUV9YQTIsIFFfQ1NSKSwgQ1NSX0lSUV9DTF9GKTsKLQkJCXNrZ2VfdHhpcnEoaHctPmRldlsxXSk7Ci0JCX0KLQotCQlpZiAoc3RhdHVzICYgSVNfUjJfRikgewotCQkJc2tnZV93cml0ZTgoaHcsIFFfQUREUihRX1IyLCBRX0NTUiksIENTUl9JUlFfQ0xfRik7Ci0JCQlody0+aW50cl9tYXNrICY9IH5JU19SMl9GOworCQlpZiAoc3RhdHVzICYgKElTX1hBMl9GfElTX1IyX0YpKSB7CisJCQlody0+aW50cl9tYXNrICY9IH4oSVNfWEEyX0Z8SVNfUjJfRik7CiAJCQluZXRpZl9yeF9zY2hlZHVsZShody0+ZGV2WzFdKTsKIAkJfQogCkBAIC0yOTU2LDkgKzI5MzYsMTEgQEAKIAkJc2tnZV9lcnJvcl9pcnEoaHcpOwogCiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCBody0+aW50cl9tYXNrKTsKKwlza2dlX3JlYWQzMihodywgQjBfSU1TSyk7CitvdXQ6CiAJc3Bpbl91bmxvY2soJmh3LT5od19sb2NrKTsKIAotCXJldHVybiBJUlFfSEFORExFRDsKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0zMTA3LDcgKzMwODksNiBAQAogCWVsc2UKIAkJaHctPnJhbV9zaXplID0gdDggKiA0MDk2OwogCi0Jc3Bpbl9sb2NrX2luaXQoJmh3LT5od19sb2NrKTsKIAlody0+aW50cl9tYXNrID0gSVNfSFdfRVJSIHwgSVNfRVhUX1JFRyB8IElTX1BPUlRfMTsKIAlpZiAoaHctPnBvcnRzID4gMSkKIAkJaHctPmludHJfbWFzayB8PSBJU19QT1JUXzI7CkBAIC0zMjIzLDcgKzMyMDQsNyBAQAogCWRldi0+cG9sbF9jb250cm9sbGVyID0gc2tnZV9uZXRwb2xsOwogI2VuZGlmCiAJZGV2LT5pcnEgPSBody0+cGRldi0+aXJxOwotCWRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX0xMVFg7CisKIAlpZiAoaGlnaG1lbSkKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKQEAgLTMyNDUsOCArMzIyNiw2IEBACiAKIAlza2dlLT5wb3J0ID0gcG9ydDsKIAotCXNwaW5fbG9ja19pbml0KCZza2dlLT50eF9sb2NrKTsKLQogCWlmIChody0+Y2hpcF9pZCAhPSBDSElQX0lEX0dFTkVTSVMpIHsKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwogCQlza2dlLT5yeF9jc3VtID0gMTsKQEAgLTMzMzMsNiArMzMxMiw3IEBACiAJaHctPnBkZXYgPSBwZGV2OwogCW11dGV4X2luaXQoJmh3LT5waHlfbXV0ZXgpOwogCUlOSVRfV09SSygmaHctPnBoeV93b3JrLCBza2dlX2V4dGlycSwgaHcpOworCXNwaW5fbG9ja19pbml0KCZody0+aHdfbG9jayk7CiAKIAlody0+cmVncyA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDB4NDAwMCk7CiAJaWYgKCFody0+cmVncykgewpAQCAtMzM0MSwyMyArMzMyMSwxNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9odzsKIAl9CiAKLQllcnIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIHNrZ2VfaW50ciwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBodyk7Ci0JaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY2Fubm90IGFzc2lnbiBpcnEgJWRcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSwgcGRldi0+aXJxKTsKLQkJZ290byBlcnJfb3V0X2lvdW5tYXA7Ci0JfQotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7Ci0KIAllcnIgPSBza2dlX3Jlc2V0KGh3KTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9pcnE7CisJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJWX1ZFUlNJT04gIiBhZGRyIDB4JWxseCBpcnEgJWQgY2hpcCAlcyByZXYgJWRcbiIsCiAJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsCiAJICAgICAgIHNrZ2VfYm9hcmRfbmFtZShodyksIGh3LT5jaGlwX3Jldik7CiAKLQlpZiAoKGRldiA9IHNrZ2VfZGV2aW5pdChodywgMCwgdXNpbmdfZGFjKSkgPT0gTlVMTCkKKwlkZXYgPSBza2dlX2RldmluaXQoaHcsIDAsIHVzaW5nX2RhYyk7CisJaWYgKCFkZXYpCiAJCWdvdG8gZXJyX291dF9sZWRfb2ZmOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGRldi0+ZGV2X2FkZHIpKSB7CkBAIC0zMzY3LDcgKzMzNDAsNiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCi0KIAllcnIgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZVxuIiwKQEAgLTMzNzUsNiArMzM0NywxMiBAQAogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCisJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBza2dlX2ludHIsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGh3KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjYW5ub3QgYXNzaWduIGlycSAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgcGRldi0+aXJxKTsKKwkJZ290byBlcnJfb3V0X3VucmVnaXN0ZXI7CisJfQogCXNrZ2Vfc2hvd19hZGRyKGRldik7CiAKIAlpZiAoaHctPnBvcnRzID4gMSAmJiAoZGV2MSA9IHNrZ2VfZGV2aW5pdChodywgMSwgdXNpbmdfZGFjKSkpIHsKQEAgLTMzODcsMTUgKzMzNjUsMTYgQEAKIAkJCWZyZWVfbmV0ZGV2KGRldjEpOwogCQl9CiAJfQorCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CiAKIAlyZXR1cm4gMDsKIAorZXJyX291dF91bnJlZ2lzdGVyOgorCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiBlcnJfb3V0X2ZyZWVfbmV0ZGV2OgogCWZyZWVfbmV0ZGV2KGRldik7CiBlcnJfb3V0X2xlZF9vZmY6CiAJc2tnZV93cml0ZTE2KGh3LCBCMF9MRUQsIExFRF9TVEFUX09GRik7Ci1lcnJfb3V0X2ZyZWVfaXJxOgotCWZyZWVfaXJxKHBkZXYtPmlycSwgaHcpOwogZXJyX291dF9pb3VubWFwOgogCWlvdW5tYXAoaHctPnJlZ3MpOwogZXJyX291dF9mcmVlX2h3OgpAQCAtMzQyNSw2ICszNDA0LDcgQEAKIAlzcGluX2xvY2tfaXJxKCZody0+aHdfbG9jayk7CiAJaHctPmludHJfbWFzayA9IDA7CiAJc2tnZV93cml0ZTMyKGh3LCBCMF9JTVNLLCAwKTsKKwlza2dlX3JlYWQzMihodywgQjBfSU1TSyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZody0+aHdfbG9jayk7CiAKIAlza2dlX3dyaXRlMTYoaHcsIEIwX0xFRCwgTEVEX1NUQVRfT0ZGKTsKQEAgLTM0NTAsMjYgKzM0MzAsMjUgQEAKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCWludCBpLCB3b2wgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaHctPmRldltpXTsKIAotCQlpZiAoZGV2KSB7CisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJCXN0cnVjdCBza2dlX3BvcnQgKnNrZ2UgPSBuZXRkZXZfcHJpdihkZXYpOwotCQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7Ci0JCQkJaWYgKHNrZ2UtPndvbCkKLQkJCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQkJCWVsc2UKLQkJCQkJc2tnZV9kb3duKGRldik7Ci0JCQl9Ci0JCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisKKwkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CisJCQlpZiAoc2tnZS0+d29sKQorCQkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJCWVsc2UKKwkJCQlza2dlX2Rvd24oZGV2KTsKIAkJCXdvbCB8PSBza2dlLT53b2w7CiAJCX0KKwkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCX0KIAotCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCXNrZ2Vfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCB3b2wpOwotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKIAogCXJldHVybiAwOwpAQCAtMzQ3OCwyMyArMzQ1NywzMyBAQAogc3RhdGljIGludCBza2dlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpOworCWludCBpLCBlcnI7CiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CiAKLQlza2dlX3Jlc2V0KGh3KTsKKwllcnIgPSBza2dlX3Jlc2V0KGh3KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKIAotCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07Ci0JCWlmIChkZXYpIHsKLQkJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQkJCWlmIChuZXRpZl9ydW5uaW5nKGRldikgJiYgc2tnZV91cChkZXYpKQorCisJCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJZXJyID0gc2tnZV91cChkZXYpOworCisJCQlpZiAoZXJyKSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNvdWxkIG5vdCB1cDogJWRcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgZXJyKTsKIAkJCQlkZXZfY2xvc2UoZGV2KTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KIAkJfQogCX0KLQlyZXR1cm4gMDsKK291dDoKKwlyZXR1cm4gZXJyOwogfQogI2VuZGlmCiAKQEAgLTM1MTEsNyArMzUwMCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNrZ2VfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZza2dlX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnNrZ2VfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNrZ2VfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NrZ2UuaCBiL2RyaXZlcnMvbmV0L3NrZ2UuaAppbmRleCA1OTMzODdiLi43OWUwOTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za2dlLmgKKysrIGIvZHJpdmVycy9uZXQvc2tnZS5oCkBAIC0yNDE3LDcgKzI0MTcsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICAgICpuZXRkZXY7CiAJaW50CQkgICAgIHBvcnQ7CiAKLQlzcGlubG9ja190CSAgICAgdHhfbG9jazsKIAlzdHJ1Y3Qgc2tnZV9yaW5nICAgICB0eF9yaW5nOwogCXN0cnVjdCBza2dlX3JpbmcgICAgIHJ4X3Jpbmc7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuYyBiL2RyaXZlcnMvbmV0L3NreTIuYwppbmRleCBkZTkxNjA5Li5jNGM1MWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmMKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSAic2t5Mi5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2t5MiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjUiCisjZGVmaW5lIERSVl9WRVJTSU9OCQkiMS43IgogI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKIAogLyoKQEAgLTEwNiw2ICsxMDYsNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIDB4OTAwMCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCAweDlFMDApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRExJTkssIDB4NGIwMCkgfSwJLyogREdFLTU2MFQgKi8KKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ETElOSywgMHg0MDAxKSB9LCAJLyogREdFLTU1MFNYICovCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzQwKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM0MSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNDIpIH0sCkBAIC0xMTcsMTAgKzExOCwxNyBAQAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM1MCkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNTEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzUyKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM1MykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzYxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2MikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjMpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzY0KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2NSkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjYpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTUFSVkVMTCwgMHg0MzY3KSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX01BUlZFTEwsIDB4NDM2OCkgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NQVJWRUxMLCAweDQzNjkpIH0sCiAJeyAwIH0KIH07CiAKQEAgLTE5MCw3ICsxOTgsNiBAQAogc3RhdGljIHZvaWQgc2t5Ml9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHNreTJfaHcgKmh3LCBwY2lfcG93ZXJfdCBzdGF0ZSkKIHsKIAl1MTYgcG93ZXJfY29udHJvbDsKLQl1MzIgcmVnMTsKIAlpbnQgdmF1eDsKIAogCXByX2RlYnVnKCJza3kyX3NldF9wb3dlcl9zdGF0ZSAlZFxuIiwgc3RhdGUpOwpAQCAtMjIzLDE4ICsyMzAsOSBAQAogCQllbHNlCiAJCQlza3kyX3dyaXRlOChodywgQjJfWTJfQ0xLX0dBVEUsIDApOwogCi0JCS8qIFR1cm4gb2ZmIHBoeSBwb3dlciBzYXZpbmcgKi8KLQkJcmVnMSA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcxKTsKLQkJcmVnMSAmPSB+KFBDSV9ZMl9QSFkxX1BPV0QgfCBQQ0lfWTJfUEhZMl9QT1dEKTsKLQotCQkvKiBsb29rcyBsaWtlIHRoaXMgWEwgaXMgYmFjayBhc3N3YXJkcyAuLiAqLwotCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKSB7Ci0JCQlyZWcxIHw9IFBDSV9ZMl9QSFkxX0NPTUE7Ci0JCQlpZiAoaHctPnBvcnRzID4gMSkKLQkJCQlyZWcxIHw9IFBDSV9ZMl9QSFkyX0NPTUE7Ci0JCX0KLQogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSB7CisJCQl1MzIgcmVnMTsKKwogCQkJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUczLCAwKTsKIAkJCXJlZzEgPSBza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHNCk7CiAJCQlyZWcxICY9IFBfQVNQTV9DT05UUk9MX01TSzsKQEAgLTI0MiwyMiArMjQwLDEwIEBACiAJCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzUsIDApOwogCQl9CiAKLQkJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcxLCByZWcxKTsKLQkJdWRlbGF5KDEwMCk7Ci0KIAkJYnJlYWs7CiAKIAljYXNlIFBDSV9EM2hvdDoKIAljYXNlIFBDSV9EM2NvbGQ6Ci0JCS8qIFR1cm4gb24gcGh5IHBvd2VyIHNhdmluZyAqLwotCQlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzEpOwotCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKQotCQkJcmVnMSAmPSB+KFBDSV9ZMl9QSFkxX1BPV0QgfCBQQ0lfWTJfUEhZMl9QT1dEKTsKLQkJZWxzZQotCQkJcmVnMSB8PSAoUENJX1kyX1BIWTFfUE9XRCB8IFBDSV9ZMl9QSFkyX1BPV0QpOwotCQlza3kyX3BjaV93cml0ZTMyKGh3LCBQQ0lfREVWX1JFRzEsIHJlZzEpOwotCQl1ZGVsYXkoMTAwKTsKLQogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCAmJiBody0+Y2hpcF9yZXYgPiAxKQogCQkJc2t5Ml93cml0ZTgoaHcsIEIyX1kyX0NMS19HQVRFLCAwKTsKIAkJZWxzZQpAQCAtMjgxLDcgKzI2Nyw3IEBACiAJc2t5Ml93cml0ZTgoaHcsIEIyX1RTVF9DVFJMMSwgVFNUX0NGR19XUklURV9PRkYpOwogfQogCi1zdGF0aWMgdm9pZCBza3kyX3BoeV9yZXNldChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCitzdGF0aWMgdm9pZCBza3kyX2dtYWNfcmVzZXQoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0KQogewogCXUxNiByZWc7CiAKQEAgLTMwMyw3ICsyODksNyBAQAogc3RhdGljIHZvaWQgc2t5Ml9waHlfaW5pdChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCiB7CiAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGh3LT5kZXZbcG9ydF0pOwotCXUxNiBjdHJsLCBjdDEwMDAsIGFkdiwgcGcsIGxlZGN0cmwsIGxlZG92ZXI7CisJdTE2IGN0cmwsIGN0MTAwMCwgYWR2LCBwZywgbGVkY3RybCwgbGVkb3ZlciwgcmVnOwogCiAJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKIAkgICAgIShody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX1hMIHx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSkpIHsKQEAgLTMyMiw3ICszMDgsNyBAQAogCX0KIAogCWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwpOwotCWlmIChody0+Y29wcGVyKSB7CisJaWYgKHNreTJfaXNfY29wcGVyKGh3KSkgewogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRSkgewogCQkJLyogZW5hYmxlIGF1dG9tYXRpYyBjcm9zc292ZXIgKi8KIAkJCWN0cmwgfD0gUEhZX01fUENfTURJX1hNT0RFKFBIWV9NX1BDX0VOQV9BVVRPKSA+PiAxOwpAQCAtMzM5LDI1ICszMjUsMzcgQEAKIAkJCQljdHJsIHw9IFBIWV9NX1BDX0RTQygyKSB8IFBIWV9NX1BDX0RPV05fU19FTkE7CiAJCQl9CiAJCX0KLQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCwgY3RybCk7CiAJfSBlbHNlIHsKIAkJLyogd29ya2Fyb3VuZCBmb3IgZGV2aWF0aW9uICM0Ljg4IChDUkMgZXJyb3JzKSAqLwogCQkvKiBkaXNhYmxlIEF1dG9tYXRpYyBDcm9zc292ZXIgKi8KIAogCQljdHJsICY9IH5QSFlfTV9QQ19NRElYX01TSzsKKwl9CisKKwlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBjdHJsKTsKKworCS8qIHNwZWNpYWwgc2V0dXAgZm9yIFBIWSA4OEUxMTEyIEZpYmVyICovCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgJiYgIXNreTJfaXNfY29wcGVyKGh3KSkgeworCQlwZyA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSKTsKKworCQkvKiBGaWJlcjogc2VsZWN0IDEwMDBCQVNFLVggb25seSBtb2RlIE1BQyBTcGVjaWZpYyBDdHJsIFJlZy4gKi8KKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAyKTsKKwkJY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCk7CisJCWN0cmwgJj0gflBIWV9NX01BQ19NRF9NU0s7CisJCWN0cmwgfD0gUEhZX01fTUFDX01PREVfU0VMKFBIWV9NX01BQ19NRF8xMDAwQlgpOwogCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBjdHJsKTsKIAotCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9YTCkgewotCQkJLyogRmliZXI6IHNlbGVjdCAxMDAwQkFTRS1YIG9ubHkgbW9kZSBNQUMgU3BlY2lmaWMgQ3RybCBSZWcuICovCi0JCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0VYVF9BRFIsIDIpOwotCQkJY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfQ1RSTCk7Ci0JCQljdHJsICY9IH5QSFlfTV9NQUNfTURfTVNLOwotCQkJY3RybCB8PSBQSFlfTV9NQUNfTU9ERV9TRUwoUEhZX01fTUFDX01EXzEwMDBCWCk7Ci0JCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9DVFJMLCBjdHJsKTsKLQorCQlpZiAoaHctPnBtZF90eXBlICA9PSAnUCcpIHsKIAkJCS8qIHNlbGVjdCBwYWdlIDEgdG8gYWNjZXNzIEZpYmVyIHJlZ2lzdGVycyAqLwogCQkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCAxKTsKKworCQkJLyogZm9yIFNGUC1tb2R1bGUgc2V0IFNJR0RFVCBwb2xhcml0eSB0byBsb3cgKi8KKwkJCWN0cmwgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfUEhZX0NUUkwpOworCQkJY3RybCB8PSBQSFlfTV9GSUJfU0lHRF9QT0w7CisJCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0NUUkwsIGN0cmwpOwogCQl9CisKKwkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9FWFRfQURSLCBwZyk7CiAJfQogCiAJY3RybCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9DVFJMKTsKQEAgLTM3Miw5ICszNzAsMTAgQEAKIAljdHJsID0gMDsKIAljdDEwMDAgPSAwOwogCWFkdiA9IFBIWV9BTl9DU01BOworCXJlZyA9IDA7CiAKIAlpZiAoc2t5Mi0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewotCQlpZiAoaHctPmNvcHBlcikgeworCQlpZiAoc2t5Ml9pc19jb3BwZXIoaHcpKSB7CiAJCQlpZiAoc2t5Mi0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKQogCQkJCWN0MTAwMCB8PSBQSFlfTV8xMDAwQ19BRkQ7CiAJCQlpZiAoc2t5Mi0+YWR2ZXJ0aXNpbmcgJiBBRFZFUlRJU0VEXzEwMDBiYXNlVF9IYWxmKQpAQCAtMzg3LDggKzM4NiwxMiBAQAogCQkJCWFkdiB8PSBQSFlfTV9BTl8xMF9GRDsKIAkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQogCQkJCWFkdiB8PSBQSFlfTV9BTl8xMF9IRDsKLQkJfSBlbHNlCQkvKiBzcGVjaWFsIGRlZmluZXMgZm9yIEZJQkVSICg4OEUxMDExUyBvbmx5KSAqLwotCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FIRCB8IFBIWV9NX0FOXzEwMDBYX0FGRDsKKwkJfSBlbHNlIHsJLyogc3BlY2lhbCBkZWZpbmVzIGZvciBGSUJFUiAoODhFMTA0MFMgb25seSkgKi8KKwkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCisJCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FGRDsKKwkJCWlmIChza3kyLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYpCisJCQkJYWR2IHw9IFBIWV9NX0FOXzEwMDBYX0FIRDsKKwkJfQogCiAJCS8qIFNldCBGbG93LWNvbnRyb2wgY2FwYWJpbGl0aWVzICovCiAJCWlmIChza3kyLT50eF9wYXVzZSAmJiBza3kyLT5yeF9wYXVzZSkKQEAgLTQwNCwyMSArNDA3LDQ2IEBACiAJCS8qIGZvcmNlZCBzcGVlZC9kdXBsZXggc2V0dGluZ3MgKi8KIAkJY3QxMDAwID0gUEhZX01fMTAwMENfTVNFOwogCi0JCWlmIChza3kyLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQljdHJsIHw9IFBIWV9DVF9EVVBfTUQ7CisJCS8qIERpc2FibGUgYXV0byB1cGRhdGUgZm9yIGR1cGxleCBmbG93IGNvbnRyb2wgYW5kIHNwZWVkICovCisJCXJlZyB8PSBHTV9HUENSX0FVX0FMTF9ESVM7CiAKIAkJc3dpdGNoIChza3kyLT5zcGVlZCkgewogCQljYXNlIFNQRUVEXzEwMDA6CiAJCQljdHJsIHw9IFBIWV9DVF9TUDEwMDA7CisJCQlyZWcgfD0gR01fR1BDUl9TUEVFRF8xMDAwOwogCQkJYnJlYWs7CiAJCWNhc2UgU1BFRURfMTAwOgogCQkJY3RybCB8PSBQSFlfQ1RfU1AxMDA7CisJCQlyZWcgfD0gR01fR1BDUl9TUEVFRF8xMDA7CiAJCQlicmVhazsKIAkJfQogCisJCWlmIChza3kyLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpIHsKKwkJCXJlZyB8PSBHTV9HUENSX0RVUF9GVUxMOworCQkJY3RybCB8PSBQSFlfQ1RfRFVQX01EOworCQl9IGVsc2UgaWYgKHNreTItPnNwZWVkICE9IFNQRUVEXzEwMDAgJiYgaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKSB7CisJCQkvKiBUdXJuIG9mZiBmbG93IGNvbnRyb2wgZm9yIDEwLzEwMG1icHMgKi8KKwkJCXNreTItPnJ4X3BhdXNlID0gMDsKKwkJCXNreTItPnR4X3BhdXNlID0gMDsKKwkJfQorCisJCWlmICghc2t5Mi0+cnhfcGF1c2UpCisJCQlyZWcgfD0gR01fR1BDUl9GQ19SWF9ESVM7CisKKwkJaWYgKCFza3kyLT50eF9wYXVzZSkKKwkJCXJlZyB8PSBHTV9HUENSX0ZDX1RYX0RJUzsKKworCQkvKiBGb3J3YXJkIHBhdXNlIHBhY2tldHMgdG8gR01BQz8gKi8KKwkJaWYgKHNreTItPnR4X3BhdXNlIHx8IHNreTItPnJ4X3BhdXNlKQorCQkJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0NUUkwpLCBHTUNfUEFVU0VfT04pOworCQllbHNlCisJCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19QQVVTRV9PRkYpOworCiAJCWN0cmwgfD0gUEhZX0NUX1JFU0VUOwogCX0KIAorCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOworCiAJaWYgKGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fRkUpCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfMTAwMFRfQ1RSTCwgY3QxMDAwKTsKIApAQCAtNTIyLDYgKzU1MCw3IEBACiAJCQlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0xFRF9PVkVSLCBsZWRvdmVyKTsKIAogCX0KKwogCS8qIEVuYWJsZSBwaHkgaW50ZXJydXB0IG9uIGF1dG8tbmVnb3RpYXRpb24gY29tcGxldGUgKG9yIGxpbmsgdXApICovCiAJaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpCiAJCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfSU5UX01BU0ssIFBIWV9NX0lTX0FOX0NPTVBMKTsKQEAgLTUyOSw2ICs1NTgsMjkgQEAKIAkJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fREVGX01TSyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNreTJfcGh5X3Bvd2VyKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgcG9ydCwgaW50IG9ub2ZmKQoreworCXUzMiByZWcxOworCXN0YXRpYyBjb25zdCB1MzIgcGh5X3Bvd2VyW10KKwkJPSB7IFBDSV9ZMl9QSFkxX1BPV0QsIFBDSV9ZMl9QSFkyX1BPV0QgfTsKKworCS8qIGxvb2tzIGxpa2UgdGhpcyBYTCBpcyBiYWNrIGFzc3dhcmRzIC4uICovCisJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fWEwgJiYgaHctPmNoaXBfcmV2ID4gMSkKKwkJb25vZmYgPSAhb25vZmY7CisKKwlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzEpOworCisJaWYgKG9ub2ZmKQorCQkvKiBUdXJuIG9mZiBwaHkgcG93ZXIgc2F2aW5nICovCisJCXJlZzEgJj0gfnBoeV9wb3dlcltwb3J0XTsKKwllbHNlCisJCXJlZzEgfD0gcGh5X3Bvd2VyW3BvcnRdOworCisJc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcxLCByZWcxKTsKKwlza3kyX3BjaV9yZWFkMzIoaHcsIFBDSV9ERVZfUkVHMSk7CisJdWRlbGF5KDEwMCk7Cit9CisKIC8qIEZvcmNlIGEgcmVuZWdvdGlhdGlvbiAqLwogc3RhdGljIHZvaWQgc2t5Ml9waHlfcmVpbml0KHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCiB7CkBAIC01NjEsNDkgKzYxMywxMSBAQAogCQkJIGdtX3BoeV9yZWFkKGh3LCAxLCBQSFlfTUFSVl9JTlRfTUFTSykgIT0gMCk7CiAJfQogCi0JaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCXJlZyA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwotCQlyZWcgfD0gR01fR1BDUl9BVV9BTExfRElTOwotCQlnbWFfd3JpdGUxNihodywgcG9ydCwgR01fR1BfQ1RSTCwgcmVnKTsKLQkJZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7Ci0KLQkJc3dpdGNoIChza3kyLT5zcGVlZCkgewotCQljYXNlIFNQRUVEXzEwMDA6Ci0JCQlyZWcgJj0gfkdNX0dQQ1JfU1BFRURfMTAwOwotCQkJcmVnIHw9IEdNX0dQQ1JfU1BFRURfMTAwMDsKLQkJCWJyZWFrOwotCQljYXNlIFNQRUVEXzEwMDoKLQkJCXJlZyAmPSB+R01fR1BDUl9TUEVFRF8xMDAwOwotCQkJcmVnIHw9IEdNX0dQQ1JfU1BFRURfMTAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTA6Ci0JCQlyZWcgJj0gfihHTV9HUENSX1NQRUVEXzEwMDAgfCBHTV9HUENSX1NQRUVEXzEwMCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChza3kyLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCi0JCQlyZWcgfD0gR01fR1BDUl9EVVBfRlVMTDsKLQotCQkvKiB0dXJuIG9mZiBwYXVzZSBpbiAxMC8xMDBtYnBzIGhhbGYgZHVwbGV4ICovCi0JCWVsc2UgaWYgKHNreTItPnNwZWVkICE9IFNQRUVEXzEwMDAgJiYKLQkJCSBody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX0VDX1UpCi0JCQlza3kyLT50eF9wYXVzZSA9IHNreTItPnJ4X3BhdXNlID0gMDsKLQl9IGVsc2UKLQkJcmVnID0gR01fR1BDUl9TUEVFRF8xMDAwIHwgR01fR1BDUl9TUEVFRF8xMDAgfCBHTV9HUENSX0RVUF9GVUxMOwotCi0JaWYgKCFza3kyLT50eF9wYXVzZSAmJiAhc2t5Mi0+cnhfcGF1c2UpIHsKLQkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgR01BQ19DVFJMKSwgR01DX1BBVVNFX09GRik7Ci0JCXJlZyB8PQotCQkgICAgR01fR1BDUl9GQ19UWF9ESVMgfCBHTV9HUENSX0ZDX1JYX0RJUyB8IEdNX0dQQ1JfQVVfRkNUX0RJUzsKLQl9IGVsc2UgaWYgKHNreTItPnR4X3BhdXNlICYmICFza3kyLT5yeF9wYXVzZSkgewotCQkvKiBkaXNhYmxlIFJ4IGZsb3ctY29udHJvbCAqLwotCQlyZWcgfD0gR01fR1BDUl9GQ19SWF9ESVMgfCBHTV9HUENSX0FVX0ZDVF9ESVM7Ci0JfQotCi0JZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwsIHJlZyk7Ci0KIAlza3kyX3JlYWQxNihodywgU0tfUkVHKHBvcnQsIEdNQUNfSVJRX1NSQykpOwogCisJLyogRW5hYmxlIFRyYW5zbWl0IEZJRk8gVW5kZXJydW4gKi8KKwlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfSVJRX01TSyksIEdNQUNfREVGX01TSyk7CisKIAlzcGluX2xvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKIAlza3kyX3BoeV9pbml0KGh3LCBwb3J0KTsKIAlzcGluX3VubG9ja19iaCgmc2t5Mi0+cGh5X2xvY2spOwpAQCAtNzYxLDkgKzc3NSwxMCBAQAogLyogVXBkYXRlIGNoaXAncyBuZXh0IHBvaW50ZXIgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBza3kyX3B1dF9pZHgoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBxLCB1MTYgaWR4KQogeworCXEgPSBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCk7CiAJd21iKCk7Ci0Jc2t5Ml93cml0ZTE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCksIGlkeCk7Ci0JbW1pb3diKCk7CisJc2t5Ml93cml0ZTE2KGh3LCBxLCBpZHgpOworCXNreTJfcmVhZDE2KGh3LCBxKTsKIH0KIAogCkBAIC04MTIsNyArODI3LDcgQEAKIAlzdHJ1Y3Qgc2t5Ml9yeF9sZSAqbGU7CiAKIAlsZSA9IHNreTJfbmV4dF9yeChza3kyKTsKLQlsZS0+YWRkciA9IChFVEhfSExFTiA8PCAxNikgfCBFVEhfSExFTjsKKwlsZS0+YWRkciA9IGNwdV90b19sZTMyKChFVEhfSExFTiA8PCAxNikgfCBFVEhfSExFTik7CiAJbGUtPmN0cmwgPSAwOwogCWxlLT5vcGNvZGUgPSBPUF9UQ1BTVEFSVCB8IEhXX09XTkVSOwogCkBAIC05NTAsMTQgKzk2NSwxNiBAQAogLyoKICAqIEl0IGFwcGVhcnMgdGhlIGhhcmR3YXJlIGhhcyBhIGJ1ZyBpbiB0aGUgRklGTyBsb2dpYyB0aGF0CiAgKiBjYXVzZSBpdCB0byBoYW5nIGlmIHRoZSBGSUZPIGdldHMgb3ZlcnJ1biBhbmQgdGhlIHJlY2VpdmUgYnVmZmVyCi0gKiBpcyBub3QgYWxpZ25lZC4gQUxzbyBhbGxvY19za2IoKSB3b24ndCBhbGlnbiBwcm9wZXJseSBpZiBzbGFiCi0gKiBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4KKyAqIGlzIG5vdCA2NCBieXRlIGFsaWduZWQuIFRoZSBidWZmZXIgcmV0dXJuZWQgZnJvbSBuZXRkZXZfYWxsb2Nfc2tiIGlzCisgKiBhbGlnbmVkIGV4Y2VwdCBpZiBzbGFiIGRlYnVnZ2luZyBpcyBlbmFibGVkLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza3kyX2FsbG9jX3NrYih1bnNpZ25lZCBpbnQgc2l6ZSwgZ2ZwX3QgZ2ZwX21hc2spCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza3kyX2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHVuc2lnbmVkIGludCBsZW5ndGgsCisJCQkJCSAgICAgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCXNrYiA9IGFsbG9jX3NrYihzaXplICsgUlhfU0tCX0FMSUdOLCBnZnBfbWFzayk7CisJc2tiID0gX19uZXRkZXZfYWxsb2Nfc2tiKGRldiwgbGVuZ3RoICsgUlhfU0tCX0FMSUdOLCBnZnBfbWFzayk7CiAJaWYgKGxpa2VseShza2IpKSB7CiAJCXVuc2lnbmVkIGxvbmcgcAk9ICh1bnNpZ25lZCBsb25nKSBza2ItPmRhdGE7CiAJCXNrYl9yZXNlcnZlKHNrYiwgQUxJR04ocCwgUlhfU0tCX0FMSUdOKSAtIHApOwpAQCAtOTkzLDcgKzEwMTAsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBza3kyLT5yeF9wZW5kaW5nOyBpKyspIHsKIAkJc3RydWN0IHJpbmdfaW5mbyAqcmUgPSBza3kyLT5yeF9yaW5nICsgaTsKIAotCQlyZS0+c2tiID0gc2t5Ml9hbGxvY19za2Ioc2t5Mi0+cnhfYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCXJlLT5za2IgPSBza3kyX2FsbG9jX3NrYihza3kyLT5uZXRkZXYsIHNreTItPnJ4X2J1ZnNpemUsCisJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyZS0+c2tiKQogCQkJZ290byBub21lbTsKIApAQCAtMTA4MSw2ICsxMDk5LDggQEAKIAlpZiAoIXNreTItPnJ4X3JpbmcpCiAJCWdvdG8gZXJyX291dDsKIAorCXNreTJfcGh5X3Bvd2VyKGh3LCBwb3J0LCAxKTsKKwogCXNreTJfbWFjX2luaXQoaHcsIHBvcnQpOwogCiAJLyogRGV0ZXJtaW5lIGF2YWlsYWJsZSByYW0gYnVmZmVyIHNwYWNlIChpbiA0SyBibG9ja3MpLgpAQCAtMTE4NSw3ICsxMjA1LDYgQEAKIAlzdHJ1Y3Qgc2t5Ml90eF9sZSAqbGUgPSBOVUxMOwogCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJlOwogCXVuc2lnbmVkIGksIGxlbjsKLQlpbnQgYXZhaWw7CiAJZG1hX2FkZHJfdCBtYXBwaW5nOwogCXUzMiBhZGRyNjQ7CiAJdTE2IG1zczsKQEAgLTEyMjYsNyArMTI0NSw3IEBACiAJLyogU2VuZCBoaWdoIGJpdHMgaWYgY2hhbmdlZCBvciBjcm9zc2VzIGJvdW5kYXJ5ICovCiAJaWYgKGFkZHI2NCAhPSBza3kyLT50eF9hZGRyNjQgfHwgaGlnaDMyKG1hcHBpbmcgKyBsZW4pICE9IHNreTItPnR4X2FkZHI2NCkgewogCQlsZSA9IGdldF90eF9sZShza3kyKTsKLQkJbGUtPnR4LmFkZHIgPSBjcHVfdG9fbGUzMihhZGRyNjQpOworCQlsZS0+YWRkciA9IGNwdV90b19sZTMyKGFkZHI2NCk7CiAJCWxlLT5jdHJsID0gMDsKIAkJbGUtPm9wY29kZSA9IE9QX0FERFI2NCB8IEhXX09XTkVSOwogCQlza3kyLT50eF9hZGRyNjQgPSBoaWdoMzIobWFwcGluZyArIGxlbik7CkBAIC0xMjM1LDI1ICsxMjU0LDE3IEBACiAJLyogQ2hlY2sgZm9yIFRDUCBTZWdtZW50YXRpb24gT2ZmbG9hZCAqLwogCW1zcyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemU7CiAJaWYgKG1zcyAhPSAwKSB7Ci0JCS8qIGp1c3QgZHJvcCB0aGUgcGFja2V0IGlmIG5vbi1saW5lYXIgZXhwYW5zaW9uIGZhaWxzICovCi0JCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpICYmCi0JCSAgICBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpIHsKLQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKLQkJCWdvdG8gb3V0X3VubG9jazsKLQkJfQotCiAJCW1zcyArPSAoKHNrYi0+aC50aC0+ZG9mZiAtIDUpICogNCk7CS8qIFRDUCBvcHRpb25zICovCiAJCW1zcyArPSAoc2tiLT5uaC5pcGgtPmlobCAqIDQpICsgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpOwogCQltc3MgKz0gRVRIX0hMRU47Ci0JfQogCi0JaWYgKG1zcyAhPSBza3kyLT50eF9sYXN0X21zcykgewotCQlsZSA9IGdldF90eF9sZShza3kyKTsKLQkJbGUtPnR4LnRzby5zaXplID0gY3B1X3RvX2xlMTYobXNzKTsKLQkJbGUtPnR4LnRzby5yc3ZkID0gMDsKLQkJbGUtPm9wY29kZSA9IE9QX0xSR0xFTiB8IEhXX09XTkVSOwotCQlsZS0+Y3RybCA9IDA7Ci0JCXNreTItPnR4X2xhc3RfbXNzID0gbXNzOworCQlpZiAobXNzICE9IHNreTItPnR4X2xhc3RfbXNzKSB7CisJCQlsZSA9IGdldF90eF9sZShza3kyKTsKKwkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIobXNzKTsKKwkJCWxlLT5vcGNvZGUgPSBPUF9MUkdMRU4gfCBIV19PV05FUjsKKwkJCWxlLT5jdHJsID0gMDsKKwkJCXNreTItPnR4X2xhc3RfbXNzID0gbXNzOworCQl9CiAJfQogCiAJY3RybCA9IDA7CkBAIC0xMjYyLDcgKzEyNzMsNyBAQAogCWlmIChza3kyLT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKIAkJaWYgKCFsZSkgewogCQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7Ci0JCQlsZS0+dHguYWRkciA9IDA7CisJCQlsZS0+YWRkciA9IDA7CiAJCQlsZS0+b3Bjb2RlID0gT1BfVkxBTnxIV19PV05FUjsKIAkJCWxlLT5jdHJsID0gMDsKIAkJfSBlbHNlCkBAIC0xMjc0LDIzICsxMjg1LDI5IEBACiAKIAkvKiBIYW5kbGUgVENQIGNoZWNrc3VtIG9mZmxvYWQgKi8KIAlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fSFcpIHsKLQkJdTE2IGhkciA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7Ci0JCXUxNiBvZmZzZXQgPSBoZHIgKyBza2ItPmNzdW07CisJCXVuc2lnbmVkIG9mZnNldCA9IHNrYi0+aC5yYXcgLSBza2ItPmRhdGE7CisJCXUzMiB0Y3BzdW07CisKKwkJdGNwc3VtID0gb2Zmc2V0IDw8IDE2OwkJLyogc3VtIHN0YXJ0ICovCisJCXRjcHN1bSB8PSBvZmZzZXQgKyBza2ItPmNzdW07CS8qIHN1bSB3cml0ZSAqLwogCiAJCWN0cmwgPSBDQUxTVU0gfCBXUl9TVU0gfCBJTklUX1NVTSB8IExPQ0tfU1VNOwogCQlpZiAoc2tiLT5uaC5pcGgtPnByb3RvY29sID09IElQUFJPVE9fVURQKQogCQkJY3RybCB8PSBVRFBUQ1A7CiAKLQkJbGUgPSBnZXRfdHhfbGUoc2t5Mik7Ci0JCWxlLT50eC5jc3VtLnN0YXJ0ID0gY3B1X3RvX2xlMTYoaGRyKTsKLQkJbGUtPnR4LmNzdW0ub2Zmc2V0ID0gY3B1X3RvX2xlMTYob2Zmc2V0KTsKLQkJbGUtPmxlbmd0aCA9IDA7CS8qIGluaXRpYWwgY2hlY2tzdW0gdmFsdWUgKi8KLQkJbGUtPmN0cmwgPSAxOwkvKiBvbmUgcGFja2V0ICovCi0JCWxlLT5vcGNvZGUgPSBPUF9UQ1BMSVNXIHwgSFdfT1dORVI7CisJCWlmICh0Y3BzdW0gIT0gc2t5Mi0+dHhfdGNwc3VtKSB7CisJCQlza3kyLT50eF90Y3BzdW0gPSB0Y3BzdW07CisKKwkJCWxlID0gZ2V0X3R4X2xlKHNreTIpOworCQkJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMih0Y3BzdW0pOworCQkJbGUtPmxlbmd0aCA9IDA7CS8qIGluaXRpYWwgY2hlY2tzdW0gdmFsdWUgKi8KKwkJCWxlLT5jdHJsID0gMTsJLyogb25lIHBhY2tldCAqLworCQkJbGUtPm9wY29kZSA9IE9QX1RDUExJU1cgfCBIV19PV05FUjsKKwkJfQogCX0KIAogCWxlID0gZ2V0X3R4X2xlKHNreTIpOwotCWxlLT50eC5hZGRyID0gY3B1X3RvX2xlMzIoKHUzMikgbWFwcGluZyk7CisJbGUtPmFkZHIgPSBjcHVfdG9fbGUzMigodTMyKSBtYXBwaW5nKTsKIAlsZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYobGVuKTsKIAlsZS0+Y3RybCA9IGN0cmw7CiAJbGUtPm9wY29kZSA9IG1zcyA/IChPUF9MQVJHRVNFTkQgfCBIV19PV05FUikgOiAoT1BfUEFDS0VUIHwgSFdfT1dORVIpOwpAQCAtMTMwOCwzNiArMTMyNSwzMSBAQAogCQlhZGRyNjQgPSBoaWdoMzIobWFwcGluZyk7CiAJCWlmIChhZGRyNjQgIT0gc2t5Mi0+dHhfYWRkcjY0KSB7CiAJCQlsZSA9IGdldF90eF9sZShza3kyKTsKLQkJCWxlLT50eC5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcjY0KTsKKwkJCWxlLT5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcjY0KTsKIAkJCWxlLT5jdHJsID0gMDsKIAkJCWxlLT5vcGNvZGUgPSBPUF9BRERSNjQgfCBIV19PV05FUjsKIAkJCXNreTItPnR4X2FkZHI2NCA9IGFkZHI2NDsKIAkJfQogCiAJCWxlID0gZ2V0X3R4X2xlKHNreTIpOwotCQlsZS0+dHguYWRkciA9IGNwdV90b19sZTMyKCh1MzIpIG1hcHBpbmcpOworCQlsZS0+YWRkciA9IGNwdV90b19sZTMyKCh1MzIpIG1hcHBpbmcpOwogCQlsZS0+bGVuZ3RoID0gY3B1X3RvX2xlMTYoZnJhZy0+c2l6ZSk7CiAJCWxlLT5jdHJsID0gY3RybDsKIAkJbGUtPm9wY29kZSA9IE9QX0JVRkZFUiB8IEhXX09XTkVSOwogCiAJCWZyZSA9IHNreTItPnR4X3JpbmcKLQkJICAgICsgUklOR19ORVhUKChyZSAtIHNreTItPnR4X3JpbmcpICsgaSwgVFhfUklOR19TSVpFKTsKKwkJCSsgUklOR19ORVhUKChyZSAtIHNreTItPnR4X3JpbmcpICsgaSwgVFhfUklOR19TSVpFKTsKIAkJcGNpX3VubWFwX2FkZHJfc2V0KGZyZSwgbWFwYWRkciwgbWFwcGluZyk7CiAJfQogCiAJcmUtPmlkeCA9IHNreTItPnR4X3Byb2Q7CiAJbGUtPmN0cmwgfD0gRU9QOwogCi0JYXZhaWwgPSB0eF9hdmFpbChza3kyKTsKLQlpZiAobXNzICE9IDAgfHwgYXZhaWwgPCBUWF9NSU5fUEVORElORykgewotIAkJbGUtPmN0cmwgfD0gRlJDX1NUQVQ7Ci0JCWlmIChhdmFpbCA8PSBNQVhfU0tCX1RYX0xFKQotCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCX0KKwlpZiAodHhfYXZhaWwoc2t5MikgPD0gTUFYX1NLQl9UWF9MRSkKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJc2t5Ml9wdXRfaWR4KGh3LCB0eHFhZGRyW3NreTItPnBvcnRdLCBza3kyLT50eF9wcm9kKTsKIAotb3V0X3VubG9jazoKIAlzcGluX3VubG9jaygmc2t5Mi0+dHhfbG9jayk7CiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTE0MjIsNyArMTQzNCw3IEBACiAJLyogU3RvcCBtb3JlIHBhY2tldHMgZnJvbSBiZWluZyBxdWV1ZWQgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlza3kyX3BoeV9yZXNldChodywgcG9ydCk7CisJc2t5Ml9nbWFjX3Jlc2V0KGh3LCBwb3J0KTsKIAogCS8qIFN0b3AgdHJhbnNtaXR0ZXIgKi8KIAlza3kyX3dyaXRlMzIoaHcsIFFfQUREUih0eHFhZGRyW3BvcnRdLCBRX0NTUiksIEJNVV9TVE9QKTsKQEAgLTE0NzAsNiArMTQ4Miw4IEBACiAJaW1hc2sgJj0gfnBvcnRpcnFfbXNrW3BvcnRdOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCisJc2t5Ml9waHlfcG93ZXIoaHcsIHBvcnQsIDApOworCiAJLyogdHVybiBvZmYgTEVEJ3MgKi8KIAlza3kyX3dyaXRlMTYoaHcsIEIwX1kyTEVELCBMRURfU1RBVF9PRkYpOwogCkBAIC0xNDk4LDcgKzE1MTIsNyBAQAogCiBzdGF0aWMgdTE2IHNreTJfcGh5X3NwZWVkKGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodywgdTE2IGF1eCkKIHsKLQlpZiAoIWh3LT5jb3BwZXIpCisJaWYgKCFza3kyX2lzX2NvcHBlcihodykpCiAJCXJldHVybiBTUEVFRF8xMDAwOwogCiAJaWYgKGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRkUpCkBAIC0xNTIwLDQwICsxNTM0LDEwIEBACiAJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7CiAJdTE2IHJlZzsKIAotCS8qIEVuYWJsZSBUcmFuc21pdCBGSUZPIFVuZGVycnVuICovCi0Jc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0lSUV9NU0spLCBHTUFDX0RFRl9NU0spOwotCi0JcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7Ci0JaWYgKHNreTItPmF1dG9uZWcgPT0gQVVUT05FR19ESVNBQkxFKSB7Ci0JCXJlZyB8PSBHTV9HUENSX0FVX0FMTF9ESVM7Ci0KLQkJLyogSXMgd3JpdGUvcmVhZCBuZWNlc3Nhcnk/ICBDb3BpZWQgZnJvbSBza3kyX21hY19pbml0ICovCi0JCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOwotCQlnbWFfcmVhZDE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMKTsKLQotCQlzd2l0Y2ggKHNreTItPnNwZWVkKSB7Ci0JCWNhc2UgU1BFRURfMTAwMDoKLQkJCXJlZyAmPSB+R01fR1BDUl9TUEVFRF8xMDA7Ci0JCQlyZWcgfD0gR01fR1BDUl9TUEVFRF8xMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgU1BFRURfMTAwOgotCQkJcmVnICY9IH5HTV9HUENSX1NQRUVEXzEwMDA7Ci0JCQlyZWcgfD0gR01fR1BDUl9TUEVFRF8xMDA7Ci0JCQlicmVhazsKLQkJY2FzZSBTUEVFRF8xMDoKLQkJCXJlZyAmPSB+KEdNX0dQQ1JfU1BFRURfMTAwMCB8IEdNX0dQQ1JfU1BFRURfMTAwKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlCi0JCXJlZyAmPSB+R01fR1BDUl9BVV9BTExfRElTOwotCi0JaWYgKHNreTItPmR1cGxleCA9PSBEVVBMRVhfRlVMTCB8fCBza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKQotCQlyZWcgfD0gR01fR1BDUl9EVVBfRlVMTDsKLQogCS8qIGVuYWJsZSBSeC9UeCAqLworCXJlZyA9IGdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwogCXJlZyB8PSBHTV9HUENSX1JYX0VOQSB8IEdNX0dQQ1JfVFhfRU5BOwogCWdtYV93cml0ZTE2KGh3LCBwb3J0LCBHTV9HUF9DVFJMLCByZWcpOwotCWdtYV9yZWFkMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwpOwogCiAJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfTUFTSywgUEhZX01fREVGX01TSyk7CiAKQEAgLTE2MDcsNyArMTU5MSw2IEBACiAJcmVnID0gZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CiAJcmVnICY9IH4oR01fR1BDUl9SWF9FTkEgfCBHTV9HUENSX1RYX0VOQSk7CiAJZ21hX3dyaXRlMTYoaHcsIHBvcnQsIEdNX0dQX0NUUkwsIHJlZyk7Ci0JZ21hX3JlYWQxNihodywgcG9ydCwgR01fR1BfQ1RSTCk7CS8qIFBDSSBwb3N0ICovCiAKIAlpZiAoc2t5Mi0+cnhfcGF1c2UgJiYgIXNreTItPnR4X3BhdXNlKSB7CiAJCS8qIHJlc3RvcmUgQXN5bW1ldHJpYyBQYXVzZSBiaXQgKi8KQEAgLTE2MjQsNiArMTYwNyw3IEBACiAKIAlpZiAobmV0aWZfbXNnX2xpbmsoc2t5MikpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyBkb3duLlxuIiwgc2t5Mi0+bmV0ZGV2LT5uYW1lKTsKKwogCXNreTJfcGh5X2luaXQoaHcsIHBvcnQpOwogfQogCkBAIC0xNjY0LDggKzE2NDgsMTEgQEAKIAlza3kyLT5yeF9wYXVzZSA9IChhdXggJiBQSFlfTV9QU19SWF9QX0VOKSAhPSAwOwogCXNreTItPnR4X3BhdXNlID0gKGF1eCAmIFBIWV9NX1BTX1RYX1BfRU4pICE9IDA7CiAKLQlpZiAoKHNreTItPnR4X3BhdXNlIHx8IHNreTItPnJ4X3BhdXNlKQotCSAgICAmJiAhKHNreTItPnNwZWVkIDwgU1BFRURfMTAwMCAmJiBza3kyLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYpKQorCWlmIChza3kyLT5kdXBsZXggPT0gRFVQTEVYX0hBTEYgJiYgc2t5Mi0+c3BlZWQgIT0gU1BFRURfMTAwMAorCSAgICAmJiBody0+Y2hpcF9pZCAhPSBDSElQX0lEX1lVS09OX0VDX1UpCisJCXNreTItPnJ4X3BhdXNlID0gc2t5Mi0+dHhfcGF1c2UgPSAwOworCisJaWYgKHNreTItPnJ4X3BhdXNlIHx8IHNreTItPnR4X3BhdXNlKQogCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19QQVVTRV9PTik7CiAJZWxzZQogCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIEdNQUNfQ1RSTCksIEdNQ19QQVVTRV9PRkYpOwpAQCAtMTY5MSw3ICsxNjc4LDcgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBwaHkgaW50ZXJydXB0IHN0YXR1cyAweCV4IDB4JXhcbiIsCiAJCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUsIGlzdGF0dXMsIHBoeXN0YXQpOwogCi0JaWYgKGlzdGF0dXMgJiBQSFlfTV9JU19BTl9DT01QTCkgeworCWlmIChza3kyLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmIChpc3RhdHVzICYgUEhZX01fSVNfQU5fQ09NUEwpKSB7CiAJCWlmIChza3kyX2F1dG9uZWdfZG9uZShza3kyLCBwaHlzdGF0KSA9PSAwKQogCQkJc2t5Ml9saW5rX3VwKHNreTIpOwogCQlnb3RvIG91dDsKQEAgLTE4MzMsMTUgKzE4MjAsMTYgQEAKICAqIEZvciBzbWFsbCBwYWNrZXRzIG9yIGVycm9ycywganVzdCByZXVzZSBleGlzdGluZyBza2IuCiAgKiBGb3IgbGFyZ2VyIHBhY2tldHMsIGdldCBuZXcgYnVmZmVyLgogICovCi1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnNreTJfcmVjZWl2ZShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLAorc3RhdGljIHN0cnVjdCBza19idWZmICpza3kyX3JlY2VpdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgdTE2IGxlbmd0aCwgdTMyIHN0YXR1cykKIHsKKyAJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHJpbmdfaW5mbyAqcmUgPSBza3kyLT5yeF9yaW5nICsgc2t5Mi0+cnhfbmV4dDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKIAogCWlmICh1bmxpa2VseShuZXRpZl9tc2dfcnhfc3RhdHVzKHNreTIpKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogcnggc2xvdCAldSBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUsIHNreTItPnJ4X25leHQsIHN0YXR1cywgbGVuZ3RoKTsKKwkJICAgICAgIGRldi0+bmFtZSwgc2t5Mi0+cnhfbmV4dCwgc3RhdHVzLCBsZW5ndGgpOwogCiAJc2t5Mi0+cnhfbmV4dCA9IChza3kyLT5yeF9uZXh0ICsgMSkgJSBza3kyLT5yeF9wZW5kaW5nOwogCXByZWZldGNoKHNreTItPnJ4X3JpbmcgKyBza3kyLT5yeF9uZXh0KTsKQEAgLTE4NTIsMTEgKzE4NDAsMTEgQEAKIAlpZiAoIShzdGF0dXMgJiBHTVJfRlNfUlhfT0spKQogCQlnb3RvIHJlc3VibWl0OwogCi0JaWYgKGxlbmd0aCA+IHNreTItPm5ldGRldi0+bXR1ICsgRVRIX0hMRU4pCisJaWYgKGxlbmd0aCA+IGRldi0+bXR1ICsgRVRIX0hMRU4pCiAJCWdvdG8gb3ZlcnNpemU7CiAKIAlpZiAobGVuZ3RoIDwgY29weWJyZWFrKSB7Ci0JCXNrYiA9IGFsbG9jX3NrYihsZW5ndGggKyAyLCBHRlBfQVRPTUlDKTsKKwkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYihkZXYsIGxlbmd0aCArIDIpOwogCQlpZiAoIXNrYikKIAkJCWdvdG8gcmVzdWJtaXQ7CiAKQEAgLTE4NzEsNyArMTg1OSw3IEBACiAJfSBlbHNlIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5za2I7CiAKLQkJbnNrYiA9IHNreTJfYWxsb2Nfc2tiKHNreTItPnJ4X2J1ZnNpemUsIEdGUF9BVE9NSUMpOworCQluc2tiID0gc2t5Ml9hbGxvY19za2IoZGV2LCBza3kyLT5yeF9idWZzaXplLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFuc2tiKQogCQkJZ290byByZXN1Ym1pdDsKIApAQCAtMTkwMSw3ICsxODg5LDcgQEAKIAogCWlmIChuZXRpZl9tc2dfcnhfZXJyKHNreTIpICYmIG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiByeCBlcnJvciwgc3RhdHVzIDB4JXggbGVuZ3RoICVkXG4iLAotCQkgICAgICAgc2t5Mi0+bmV0ZGV2LT5uYW1lLCBzdGF0dXMsIGxlbmd0aCk7CisJCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywgbGVuZ3RoKTsKIAogCWlmIChzdGF0dXMgJiAoR01SX0ZTX0xPTkdfRVJSIHwgR01SX0ZTX1VOX1NJWkUpKQogCQlza3kyLT5uZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwpAQCAtMTkyNywxMiArMTkxNSw2IEBACiAJfQogfQogCi0vKiBJcyBzdGF0dXMgcmluZyBlbXB0eSBvciBpcyB0aGVyZSBtb3JlIHRvIGRvPyAqLwotc3RhdGljIGlubGluZSBpbnQgc2t5Ml9tb3JlX3dvcmsoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3KQotewotCXJldHVybiAoaHctPnN0X2lkeCAhPSBza3kyX3JlYWQxNihodywgU1RBVF9QVVRfSURYKSk7Ci19Ci0KIC8qIFByb2Nlc3Mgc3RhdHVzIHJlc3BvbnNlIHJpbmcgKi8KIHN0YXRpYyBpbnQgc2t5Ml9zdGF0dXNfaW50cihzdHJ1Y3Qgc2t5Ml9odyAqaHcsIGludCB0b19kbykKIHsKQEAgLTE5NTYsMTYgKzE5MzgsMTUgQEAKIAkJZGV2ID0gaHctPmRldltsZS0+bGlua107CiAKIAkJc2t5MiA9IG5ldGRldl9wcml2KGRldik7Ci0JCWxlbmd0aCA9IGxlLT5sZW5ndGg7Ci0JCXN0YXR1cyA9IGxlLT5zdGF0dXM7CisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KGxlLT5sZW5ndGgpOworCQlzdGF0dXMgPSBsZTMyX3RvX2NwdShsZS0+c3RhdHVzKTsKIAogCQlzd2l0Y2ggKGxlLT5vcGNvZGUgJiB+SFdfT1dORVIpIHsKIAkJY2FzZSBPUF9SWFNUQVQ6Ci0JCQlza2IgPSBza3kyX3JlY2VpdmUoc2t5MiwgbGVuZ3RoLCBzdGF0dXMpOworCQkJc2tiID0gc2t5Ml9yZWNlaXZlKGRldiwgbGVuZ3RoLCBzdGF0dXMpOwogCQkJaWYgKCFza2IpCiAJCQkJYnJlYWs7CiAKLQkJCXNrYi0+ZGV2ID0gZGV2OwogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAkJCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAKQEAgLTIwMDIsNyArMTk4Myw3IEBACiAJCWNhc2UgT1BfUlhDSEtTOgogCQkJc2tiID0gc2t5Mi0+cnhfcmluZ1tza3kyLT5yeF9uZXh0XS5za2I7CiAJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0hXOwotCQkJc2tiLT5jc3VtID0gbGUxNl90b19jcHUoc3RhdHVzKTsKKwkJCXNrYi0+Y3N1bSA9IHN0YXR1cyAmIDB4ZmZmZjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgT1BfVFhJTkRFWExFOgpAQCAtMjAyMyw2ICsyMDA0LDkgQEAKIAkJfQogCX0KIAorCS8qIEZ1bGx5IHByb2Nlc3NlZCBzdGF0dXMgcmluZyBzbyBjbGVhciBpcnEgKi8KKwlza3kyX3dyaXRlMzIoaHcsIFNUQVRfQ1RSTCwgU0NfU1RBVF9DTFJfSVJRKTsKKwogZXhpdF9sb29wOgogCWlmIChidWZfd3JpdGVbMF0pIHsKIAkJc2t5MiA9IG5ldGRldl9wcml2KGh3LT5kZXZbMF0pOwpAQCAtMjIzMiwxOSArMjIxNiwxNiBAQAogCQlza3kyX2Rlc2NyaXB0b3JfZXJyb3IoaHcsIDEsICJ0cmFuc21pdCIsIFkyX0lTX0NIS19UWEEyKTsKIAogCXdvcmtfZG9uZSA9IHNreTJfc3RhdHVzX2ludHIoaHcsIHdvcmtfbGltaXQpOwotCSpidWRnZXQgLT0gd29ya19kb25lOwotCWRldjAtPnF1b3RhIC09IHdvcmtfZG9uZTsKKwlpZiAod29ya19kb25lIDwgd29ya19saW1pdCkgeworCQluZXRpZl9yeF9jb21wbGV0ZShkZXYwKTsKIAotCWlmIChzdGF0dXMgJiBZMl9JU19TVEFUX0JNVSkKLQkJc2t5Ml93cml0ZTMyKGh3LCBTVEFUX0NUUkwsIFNDX1NUQVRfQ0xSX0lSUSk7Ci0KLQlpZiAoc2t5Ml9tb3JlX3dvcmsoaHcpKQorCQlza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7CisJCXJldHVybiAwOworCX0gZWxzZSB7CisJCSpidWRnZXQgLT0gd29ya19kb25lOworCQlkZXYwLT5xdW90YSAtPSB3b3JrX2RvbmU7CiAJCXJldHVybiAxOwotCi0JbmV0aWZfcnhfY29tcGxldGUoZGV2MCk7Ci0KLQlza3kyX3JlYWQzMihodywgQjBfWTJfU1BfTElTUik7Ci0JcmV0dXJuIDA7CisJfQogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2t5Ml9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0yMzA0LDcgKzIyODUsNyBAQAogc3RhdGljIGludCBza3kyX3Jlc2V0KHN0cnVjdCBza3kyX2h3ICpodykKIHsKIAl1MTYgc3RhdHVzOwotCXU4IHQ4LCBwbWRfdHlwZTsKKwl1OCB0ODsKIAlpbnQgaTsKIAogCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19SU1RfQ0xSKTsKQEAgLTIzNTAsOSArMjMzMSw3IEBACiAJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBFWF9VTkNfRVJSX1NUQVQsIDB4ZmZmZmZmZmZVTCk7CiAKIAotCXBtZF90eXBlID0gc2t5Ml9yZWFkOChodywgQjJfUE1EX1RZUCk7Ci0JaHctPmNvcHBlciA9ICEocG1kX3R5cGUgPT0gJ0wnIHx8IHBtZF90eXBlID09ICdTJyk7Ci0KKwlody0+cG1kX3R5cGUgPSBza3kyX3JlYWQ4KGh3LCBCMl9QTURfVFlQKTsKIAlody0+cG9ydHMgPSAxOwogCXQ4ID0gc2t5Ml9yZWFkOChodywgQjJfWTJfSFdfUkVTKTsKIAlpZiAoKHQ4ICYgQ0ZHX0RVQUxfTUFDX01TSykgPT0gQ0ZHX0RVQUxfTUFDX01TSykgewpAQCAtMjQxMCw3ICsyMzg5LDcgQEAKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0hXRV9JTVNLLCBZMl9IV0VfQUxMX01BU0spOwogCiAJZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKQotCQlza3kyX3BoeV9yZXNldChodywgaSk7CisJCXNreTJfZ21hY19yZXNldChodywgaSk7CiAKIAltZW1zZXQoaHctPnN0X2xlLCAwLCBTVEFUVVNfTEVfQllURVMpOwogCWh3LT5zdF9pZHggPSAwOwpAQCAtMjQ0OSwyMSArMjQyOCwyMiBAQAogCiBzdGF0aWMgdTMyIHNreTJfc3VwcG9ydGVkX21vZGVzKGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodykKIHsKLQl1MzIgbW9kZXM7Ci0JaWYgKGh3LT5jb3BwZXIpIHsKLQkJbW9kZXMgPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmCi0JCSAgICB8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKLQkJICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKLQkJICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwKLQkJICAgIHwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFA7CisJaWYgKHNreTJfaXNfY29wcGVyKGh3KSkgeworCQl1MzIgbW9kZXMgPSBTVVBQT1JURURfMTBiYXNlVF9IYWxmCisJCQl8IFNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwKKwkJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKKwkJCXwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwKKwkJCXwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfVFA7CiAKIAkJaWYgKGh3LT5jaGlwX2lkICE9IENISVBfSURfWVVLT05fRkUpCiAJCQltb2RlcyB8PSBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYKLQkJCSAgICB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKwkJCQl8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKwkJcmV0dXJuIG1vZGVzOwogCX0gZWxzZQotCQltb2RlcyA9IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF9GSUJSRQotCQkgICAgfCBTVVBQT1JURURfQXV0b25lZzsKLQlyZXR1cm4gbW9kZXM7CisJCXJldHVybiAgU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmCisJCQl8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbAorCQkJfCBTVVBQT1JURURfQXV0b25lZworCQkJfCBTVVBQT1JURURfRklCUkU7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9nZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQpAQCAtMjQ3NCw3ICsyNDU0LDcgQEAKIAllY21kLT50cmFuc2NlaXZlciA9IFhDVlJfSU5URVJOQUw7CiAJZWNtZC0+c3VwcG9ydGVkID0gc2t5Ml9zdXBwb3J0ZWRfbW9kZXMoaHcpOwogCWVjbWQtPnBoeV9hZGRyZXNzID0gUEhZX0FERFJfTUFSVjsKLQlpZiAoaHctPmNvcHBlcikgeworCWlmIChza3kyX2lzX2NvcHBlcihodykpIHsKIAkJZWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgogCQkgICAgfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCiAJCSAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCkBAIC0yNDgzLDEyICsyNDYzLDE0IEBACiAJCSAgICB8IFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbAogCQkgICAgfCBTVVBQT1JURURfQXV0b25lZyB8IFNVUFBPUlRFRF9UUDsKIAkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7Ci0JfSBlbHNlCisJCWVjbWQtPnNwZWVkID0gc2t5Mi0+c3BlZWQ7CisJfSBlbHNlIHsKKwkJZWNtZC0+c3BlZWQgPSBTUEVFRF8xMDAwOwogCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwl9CiAKIAllY21kLT5hZHZlcnRpc2luZyA9IHNreTItPmFkdmVydGlzaW5nOwogCWVjbWQtPmF1dG9uZWcgPSBza3kyLT5hdXRvbmVnOwotCWVjbWQtPnNwZWVkID0gc2t5Mi0+c3BlZWQ7CiAJZWNtZC0+ZHVwbGV4ID0gc2t5Mi0+ZHVwbGV4OwogCXJldHVybiAwOwogfQpAQCAtMjg4Nyw3ICsyODY5LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplY21kKQogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBlcnIgPSAwOwogCiAJc2t5Mi0+YXV0b25lZyA9IGVjbWQtPmF1dG9uZWc7CiAJc2t5Mi0+dHhfcGF1c2UgPSBlY21kLT50eF9wYXVzZSAhPSAwOwpAQCAtMjg5NSw3ICsyODc2LDcgQEAKIAogCXNreTJfcGh5X3JlaW5pdChza3kyKTsKIAotCXJldHVybiBlcnI7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2t5Ml9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTMwNTIsNyArMzAzMyw3IEBACiAJCSAgICAgIHJlZ3MtPmxlbiAtIEIzX1JJX1dUT19SMSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgc2t5Ml9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgc2t5Ml9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gc2t5Ml9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHNreTJfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbyA9IHNreTJfZ2V0X2RydmluZm8sCkBAIC0zMjAxLDYgKzMxODIsOCBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHctPnBkZXY7CiAJaW50IGVycjsKIAorCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZody0+bXNpX3dhaXQpOworCiAJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLCBZMl9JU19JUlFfU1cpOwogCiAJZXJyID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBza3kyX3Rlc3RfaW50ciwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCBodyk7CkBAIC0zMjEwLDEwICszMTkzLDggQEAKIAkJcmV0dXJuIGVycjsKIAl9CiAKLQlpbml0X3dhaXRxdWV1ZV9oZWFkICgmaHctPm1zaV93YWl0KTsKLQogCXNreTJfd3JpdGU4KGh3LCBCMF9DVFNULCBDU19TVF9TV19JUlEpOwotCXdtYigpOworCXNreTJfcmVhZDgoaHcsIEIwX0NUU1QpOwogCiAJd2FpdF9ldmVudF90aW1lb3V0KGh3LT5tc2lfd2FpdCwgaHctPm1zaV9kZXRlY3RlZCwgSFovMTApOwogCkBAIC0zMzA1LDEyICszMjg2LDEzIEBACiAJaHctPnBtX2NhcCA9IHBtX2NhcDsKIAogI2lmZGVmIF9fQklHX0VORElBTgotCS8qIGJ5dGUgc3dhcCBkZXNjcmlwdG9ycyBpbiBoYXJkd2FyZSAqLworCS8qIFRoZSBzazk4bGluIHZlbmRvciBkcml2ZXIgdXNlcyBoYXJkd2FyZSBieXRlIHN3YXBwaW5nIGJ1dAorCSAqIHRoaXMgZHJpdmVyIHVzZXMgc29mdHdhcmUgc3dhcHBpbmcuCisJICovCiAJewogCQl1MzIgcmVnOwotCiAJCXJlZyA9IHNreTJfcGNpX3JlYWQzMihodywgUENJX0RFVl9SRUcyKTsKLQkJcmVnIHw9IFBDSV9SRVZfREVTQzsKKwkJcmVnICY9IH5QQ0lfUkVWX0RFU0M7CiAJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMiwgcmVnKTsKIAl9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NreTIuaCBiL2RyaXZlcnMvbmV0L3NreTIuaAppbmRleCAyZGI4ZDE5Li40YzEzYzM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9za3kyLmgKKysrIGIvZHJpdmVycy9uZXQvc2t5Mi5oCkBAIC0xMzE4LDYgKzEzMTgsMTQgQEAKIH07CiAKIC8qIGZvciBZdWtvbi0yIEdpZ2FiaXQgRXRoZXJuZXQgUEhZICg4OEUxMTEyIG9ubHkpICovCisvKioqKiogIFBIWV9NQVJWX1BIWV9DVFJMIChwYWdlIDEpCQkxNiBiaXQgci93CUZpYmVyIFNwZWNpZmljIEN0cmwgKioqKiovCitlbnVtIHsKKwlQSFlfTV9GSUJfRk9SQ0VfTE5LCT0gMTw8MTAsLyogRm9yY2UgTGluayBHb29kICovCisJUEhZX01fRklCX1NJR0RfUE9MCT0gMTw8OSwJLyogU0lHREVUIFBvbGFyaXR5ICovCisJUEhZX01fRklCX1RYX0RJUwk9IDE8PDMsCS8qIFRyYW5zbWl0dGVyIERpc2FibGUgKi8KK307CisKKy8qIGZvciBZdWtvbi0yIEdpZ2FiaXQgRXRoZXJuZXQgUEhZICg4OEUxMTEyIG9ubHkpICovCiAvKioqKiogIFBIWV9NQVJWX1BIWV9DVFJMIChwYWdlIDIpCQkxNiBiaXQgci93CU1BQyBTcGVjaWZpYyBDdHJsICoqKioqLwogZW51bSB7CiAJUEhZX01fTUFDX01EX01TSwk9IDc8PDcsIC8qIEJpdCAgOS4uIDc6IE1vZGUgU2VsZWN0IE1hc2sgKi8KQEAgLTE1NjYsNyArMTU3NCw3IEBACiAKIAlHTVJfRlNfQU5ZX0VSUgk9IEdNUl9GU19SWF9GRl9PViB8IEdNUl9GU19DUkNfRVJSIHwKIAkJCSAgR01SX0ZTX0ZSQUdNRU5UIHwgR01SX0ZTX0xPTkdfRVJSIHwKLQkJICAJICBHTVJfRlNfTUlJX0VSUiB8IEdNUl9GU19CQURfRkMgfCBHTVJfRlNfR09PRF9GQyB8CisJCSAgCSAgR01SX0ZTX01JSV9FUlIgfCBHTVJfRlNfQkFEX0ZDIHwKIAkJCSAgR01SX0ZTX1VOX1NJWkUgfCBHTVJfRlNfSkFCQkVSLAogfTsKIApAQCAtMTc0OCw3ICsxNzU2LDYgQEAKIAlJTklUX1NVTT0gMTw8MywKIAlMT0NLX1NVTT0gMTw8NCwKIAlJTlNfVkxBTj0gMTw8NSwKLQlGUkNfU1RBVD0gMTw8NiwKIAlFT1AJPSAxPDw3LAogfTsKIApAQCAtMTc4NCwyMSArMTc5MSw5IEBACiAJT1BfVFhJTkRFWExFCT0gMHg2OCwKIH07CiAKLS8qIFl1a29uIDIgaGFyZHdhcmUgaW50ZXJmYWNlCi0gKiBOb3QgdGVzdGVkIG9uIGJpZyBlbmRpYW4KLSAqLworLyogWXVrb24gMiBoYXJkd2FyZSBpbnRlcmZhY2UgKi8KIHN0cnVjdCBza3kyX3R4X2xlIHsKLQl1bmlvbiB7Ci0JCV9fbGUzMglhZGRyOwotCQlzdHJ1Y3QgewotCQkJX19sZTE2CW9mZnNldDsKLQkJCV9fbGUxNglzdGFydDsKLQkJfSBjc3VtICBfX2F0dHJpYnV0ZSgocGFja2VkKSk7Ci0JCXN0cnVjdCB7Ci0JCQlfX2xlMTYJc2l6ZTsKLQkJCV9fbGUxNglyc3ZkOwotCQl9IHRzbyAgX19hdHRyaWJ1dGUoKHBhY2tlZCkpOwotCX0gdHg7CisJX19sZTMyCWFkZHI7CiAJX19sZTE2CWxlbmd0aDsJLyogYWxzbyB2bGFuIHRhZyBvciBjaGVja3N1bSBzdGFydCAqLwogCXU4CWN0cmw7CiAJdTgJb3Bjb2RlOwpAQCAtMTg0NCw2ICsxODM5LDcgQEAKIAl1MzIJCSAgICAgdHhfYWRkcjY0OwogCXUxNgkJICAgICB0eF9wZW5kaW5nOwogCXUxNgkJICAgICB0eF9sYXN0X21zczsKKwl1MzIJCSAgICAgdHhfdGNwc3VtOwogCiAJc3RydWN0IHJpbmdfaW5mbyAgICAgKnJ4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAlzdHJ1Y3Qgc2t5Ml9yeF9sZSAgICAqcnhfbGU7CkBAIC0xODc5LDcgKzE4NzUsNyBAQAogCWludAkJICAgICBwbV9jYXA7CiAJdTgJICAgICAJICAgICBjaGlwX2lkOwogCXU4CQkgICAgIGNoaXBfcmV2OwotCXU4CQkgICAgIGNvcHBlcjsKKwl1OAkJICAgICBwbWRfdHlwZTsKIAl1OAkJICAgICBwb3J0czsKIAogCXN0cnVjdCBza3kyX3N0YXR1c19sZSAqc3RfbGU7CkBAIC0xODkxLDYgKzE4ODcsMTEgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCAgICBtc2lfd2FpdDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNreTJfaXNfY29wcGVyKGNvbnN0IHN0cnVjdCBza3kyX2h3ICpodykKK3sKKwlyZXR1cm4gIShody0+cG1kX3R5cGUgPT0gJ0wnIHx8IGh3LT5wbWRfdHlwZSA9PSAnUycgfHwgaHctPnBtZF90eXBlID09ICdQJyk7Cit9CisKIC8qIFJlZ2lzdGVyIGFjY2Vzc29yIGZvciBtZW1vcnkgbWFwcGVkIGRldmljZSAqLwogc3RhdGljIGlubGluZSB1MzIgc2t5Ml9yZWFkMzIoY29uc3Qgc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCByZWcpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbGhjLmMgYi9kcml2ZXJzL25ldC9zbGhjLmMKaW5kZXggM2ExYjcxMy4uMGFkYWI3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2xoYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NsaGMuYwpAQCAtNDIsNyArNDIsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgTW9kdWxhcml6YXRpb24uCiAgKgktIEphbiAxOTk1CUJqb3JuIEVrd2FsbAogICoJCQlVc2UgaXBfZmFzdF9jc3VtIGZyb20gaXAuaAotICoJLSBKdWx5IDE5OTUJQ2hyaXN0b3MgQS4gUG9seXpvbHMgCisgKgktIEp1bHkgMTk5NQlDaHJpc3RvcyBBLiBQb2x5em9scwogICoJCQlTcG90dGVkIGJ1ZyBpbiB0Y3Agb3B0aW9uIGNoZWNraW5nCiAgKgogICoKQEAgLTk0LDI3ICs5NCwyMyBAQAogCXJlZ2lzdGVyIHN0cnVjdCBjc3RhdGUgKnRzOwogCXN0cnVjdCBzbGNvbXByZXNzICpjb21wOwogCi0JY29tcCA9IChzdHJ1Y3Qgc2xjb21wcmVzcyAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbGNvbXByZXNzKSwKLQkJCQkJICAgIEdGUF9LRVJORUwpOworCWNvbXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2xjb21wcmVzcyksIEdGUF9LRVJORUwpOwogCWlmICghIGNvbXApCiAJCWdvdG8gb3V0X2ZhaWw7Ci0JbWVtc2V0KGNvbXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2xjb21wcmVzcykpOwogCiAJaWYgKCByc2xvdHMgPiAwICAmJiAgcnNsb3RzIDwgMjU2ICkgewogCQlzaXplX3QgcnNpemUgPSByc2xvdHMgKiBzaXplb2Yoc3RydWN0IGNzdGF0ZSk7Ci0JCWNvbXAtPnJzdGF0ZSA9IChzdHJ1Y3QgY3N0YXRlICopIGttYWxsb2MocnNpemUsIEdGUF9LRVJORUwpOworCQljb21wLT5yc3RhdGUgPSBremFsbG9jKHJzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgY29tcC0+cnN0YXRlKQogCQkJZ290byBvdXRfZnJlZTsKLQkJbWVtc2V0KGNvbXAtPnJzdGF0ZSwgMCwgcnNpemUpOwogCQljb21wLT5yc2xvdF9saW1pdCA9IHJzbG90cyAtIDE7CiAJfQogCiAJaWYgKCB0c2xvdHMgPiAwICAmJiAgdHNsb3RzIDwgMjU2ICkgewogCQlzaXplX3QgdHNpemUgPSB0c2xvdHMgKiBzaXplb2Yoc3RydWN0IGNzdGF0ZSk7Ci0JCWNvbXAtPnRzdGF0ZSA9IChzdHJ1Y3QgY3N0YXRlICopIGttYWxsb2ModHNpemUsIEdGUF9LRVJORUwpOworCQljb21wLT50c3RhdGUgPSBremFsbG9jKHRzaXplLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgY29tcC0+dHN0YXRlKQogCQkJZ290byBvdXRfZnJlZTI7Ci0JCW1lbXNldChjb21wLT50c3RhdGUsIDAsIHRzaXplKTsKIAkJY29tcC0+dHNsb3RfbGltaXQgPSB0c2xvdHMgLSAxOwogCX0KIApAQCAtMTQxLDkgKzEzNyw5IEBACiAJcmV0dXJuIGNvbXA7CiAKIG91dF9mcmVlMjoKLQlrZnJlZSgodW5zaWduZWQgY2hhciAqKWNvbXAtPnJzdGF0ZSk7CisJa2ZyZWUoY29tcC0+cnN0YXRlKTsKIG91dF9mcmVlOgotCWtmcmVlKCh1bnNpZ25lZCBjaGFyICopY29tcCk7CisJa2ZyZWUoY29tcCk7CiBvdXRfZmFpbDoKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI0MiwxMCArMjM4LDEwIEBACiAJLyoKIAkgKglEb24ndCBwbGF5IHdpdGggcnVudCBwYWNrZXRzLgogCSAqLwotCSAKKwogCWlmKGlzaXplPHNpemVvZihzdHJ1Y3QgaXBoZHIpKQogCQlyZXR1cm4gaXNpemU7Ci0JCQorCiAJaXAgPSAoc3RydWN0IGlwaGRyICopIGljcDsKIAogCS8qIEJhaWwgaWYgdGhpcyBwYWNrZXQgaXNuJ3QgVENQLCBvciBpcyBhbiBJUCBmcmFnbWVudCAqLwpAQCAtNzAwLDIwICs2OTYsNiBAQAogRVhQT1JUX1NZTUJPTChzbGhjX3VuY29tcHJlc3MpOwogRVhQT1JUX1NZTUJPTChzbGhjX3Rvc3MpOwogCi0jaWZkZWYgTU9EVUxFCi0KLWludCBpbml0X21vZHVsZSh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gIkNTTElQOiBjb2RlIGNvcHlyaWdodCAxOTg5IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm47Ci19Ci0KLSNlbmRpZiAvKiBNT0RVTEUgKi8KICNlbHNlIC8qIENPTkZJR19JTkVUICovCiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5jIGIvZHJpdmVycy9uZXQvc2xpcC5jCmluZGV4IDE1ODhjYjcuLjM5YzIxNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuYworKysgYi9kcml2ZXJzL25ldC9zbGlwLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogKglvbiBhY3RpdmVseSBydW5uaW5nIGRldmljZS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogCisvKgogICAgQWxsb2NhdGUgY2hhbm5lbCBidWZmZXJzLgogICovCiAKQEAgLTIwNyw3ICsyMDcsNyBAQAogI2VuZGlmCiB9CiAKLS8qIAorLyoKICAgIFJlYWxsb2NhdGUgc2xpcCBjaGFubmVsIGJ1ZmZlcnMuCiAgKi8KIApAQCAtMzU0LDcgKzM1NCw3IEBACiAjZW5kaWYgIC8qIFNMX0lOQ0xVREVfQ1NMSVAgKi8KIAogCXNsLT5yeF9ieXRlcys9Y291bnQ7Ci0JCisKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGNvdW50KTsKIAlpZiAoc2tiID09IE5VTEwpICB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwgc2wtPmRldi0+bmFtZSk7CkBAIC02MDIsNyArNjAyLDcgQEAKIAlzdHJ1Y3Qgc2xpcCAqc2wgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJLyoKLQkgKglGaW5pc2ggc2V0dGluZyB1cCB0aGUgREVWSUNFIGluZm8uIAorCSAqCUZpbmlzaCBzZXR0aW5nIHVwIHRoZSBERVZJQ0UgaW5mby4KIAkgKi8KIAogCWRldi0+bXR1CQk9IHNsLT5tdHU7CkBAIC02NTgsNyArNjU4LDcgQEAKICAqIGJlIHJlLWVudGVyZWQgd2hpbGUgcnVubmluZyBidXQgb3RoZXIgbGRpc2MgZnVuY3Rpb25zIG1heSBiZSBjYWxsZWQKICAqIGluIHBhcmFsbGVsCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgc2xpcF9yZWNlaXZlX2J1ZihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwgY2hhciAqZnAsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3Qgc2xpcCAqc2wgPSAoc3RydWN0IHNsaXAgKikgdHR5LT5kaXNjX2RhdGE7CkBAIC03MjAsNyArNzIwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2xpcCAgICAgICAqc2w7CiAKLQlpZiAoc2xpcF9kZXZzID09IE5VTEwpIAorCWlmIChzbGlwX2RldnMgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7CS8qIE1hc3RlciBhcnJheSBtaXNzaW5nICEgKi8KIAogCWZvciAoaSA9IDA7IGkgPCBzbGlwX21heGRldjsgaSsrKSB7CkBAIC03ODgsNyArNzg4LDcgQEAKIAkJCXNsaXBfZGV2c1tpXSA9IE5VTEw7CiAJCX0KIAl9Ci0JCisKIAlpZiAoIWRldikgewogCQljaGFyIG5hbWVbSUZOQU1TSVpdOwogCQlzcHJpbnRmKG5hbWUsICJzbCVkIiwgaSk7CkBAIC04MTUsNyArODE1LDcgQEAKIAlzbC0+b3V0ZmlsbF90aW1lci5mdW5jdGlvbj1zbF9vdXRmaWxsOwogI2VuZGlmCiAJc2xpcF9kZXZzW2ldID0gZGV2OwotCQkJCSAgIAorCiAJcmV0dXJuIHNsOwogfQogCkBAIC04MzYsNyArODM2LDcgQEAKIAogCWlmKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwotCQkKKwogCS8qIFJUbmV0bGluayBsb2NrIGlzIG1pc3VzZWQgaGVyZSB0byBzZXJpYWxpemUgY29uY3VycmVudAogCSAgIG9wZW5zIG9mIHNsaXAgY2hhbm5lbHMuIFRoZXJlIGFyZSBiZXR0ZXIgd2F5cywgYnV0IGl0IGlzCiAJICAgdGhlIHNpbXBsZXN0IG9uZS4KQEAgLTg2Miw3ICs4NjIsNyBAQAogCXR0eS0+ZGlzY19kYXRhID0gc2w7CiAJc2wtPmxpbmUgPSB0dHlfZGV2bnVtKHR0eSk7CiAJc2wtPnBpZCA9IGN1cnJlbnQtPnBpZDsKLQkKKwogCWlmICghdGVzdF9iaXQoU0xGX0lOVVNFLCAmc2wtPmZsYWdzKSkgewogCQkvKiBQZXJmb3JtIHRoZSBsb3ctbGV2ZWwgU0xJUCBpbml0aWFsaXphdGlvbi4gKi8KIAkJaWYgKChlcnIgPSBzbF9hbGxvY19idWZzKHNsLCBTTF9NVFUpKSAhPSAwKQpAQCAtOTA4LDcgKzkwOCw3IEBACiAvKgogCiAgIEZJWE1FOiAxLDIgYXJlIGZpeGVkIDMgd2FzIG5ldmVyIHRydWUgYW55d2F5LgotICAKKwogICAgTGV0IG1lIHRvIGJsYW1lIGEgYml0LgogICAgMS4gVFRZIG1vZHVsZSBjYWxscyB0aGlzIGZ1bnN0aW9uIG9uIHNvZnQgaW50ZXJydXB0LgogICAgMi4gVFRZIG1vZHVsZSBjYWxscyB0aGlzIGZ1bmN0aW9uIFdJVEggTUFTS0VEIElOVEVSUlVQVFMhCkBAIC05MjAsNyArOTIwLDcgQEAKIAogICAgQnktcHJvZHVjdCAobm90IGRlc2lyZWQpOiBzbD8gZG9lcyBub3QgZmVlbCBoYW5ndXBzIGFuZCByZW1haW5zIG9wZW4uCiAgICBJdCBpcyBzdXBwb3NlZCwgdGhhdCB1c2VyIGxldmVsIHByb2dyYW0gKGRpcCwgZGlhbGQsIHNsYXR0YWNoLi4uKQotICAgd2lsbCBjYXRjaCBTSUdIVVAgYW5kIG1ha2UgdGhlIHJlc3Qgb2Ygd29yay4gCisgICB3aWxsIGNhdGNoIFNJR0hVUCBhbmQgbWFrZSB0aGUgcmVzdCBvZiB3b3JrLgogCiAgICBJIHNlZSBubyB3YXkgdG8gbWFrZSBtb3JlIHdpdGggY3VycmVudCB0dHkgY29kZS4gLS1BTksKICAqLwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIAkJYnJlYWs7CiAKICAgICAgICAgY2FzZSBTSU9DU0xFQVNFOgotCQkvKiBSZXNvbHZlIHJhY2UgY29uZGl0aW9uLCB3aGVuIGlvY3RsJ2luZyBoYW5nZWQgdXAgCisJCS8qIFJlc29sdmUgcmFjZSBjb25kaXRpb24sIHdoZW4gaW9jdGwnaW5nIGhhbmdlZCB1cAogCQkgICBhbmQgb3BlbmVkIGJ5IGFub3RoZXIgcHJvY2VzcyBkZXZpY2UuCiAJCSAqLwogCQlpZiAoc2wtPnR0eSAhPSBjdXJyZW50LT5zaWduYWwtPnR0eSAmJiBzbC0+cGlkICE9IGN1cnJlbnQtPnBpZCkgewpAQCAtMTM1MCw3ICsxMzUwLDcgQEAKIAl9CiAKIAkvKiBDbGVhciB0aGUgcG9pbnRlciBhcnJheSwgd2UgYWxsb2NhdGUgZGV2aWNlcyB3aGVuIHdlIG5lZWQgdGhlbSAqLwotCW1lbXNldChzbGlwX2RldnMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSAqKSpzbGlwX21heGRldik7IAorCW1lbXNldChzbGlwX2RldnMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSAqKSpzbGlwX21heGRldik7CiAKIAkvKiBGaWxsIGluIG91ciBsaW5lIHByb3RvY29sIGRpc2NpcGxpbmUsIGFuZCByZWdpc3RlciBpdCAqLwogCWlmICgoc3RhdHVzID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fU0xJUCwgJnNsX2xkaXNjKSkgIT0gMCkgIHsKQEAgLTEzNjgsNyArMTM2OCw3IEBACiAJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIEhaOwogCWludCBidXN5ID0gMDsKIAotCWlmIChzbGlwX2RldnMgPT0gTlVMTCkgCisJaWYgKHNsaXBfZGV2cyA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAkvKiBGaXJzdCBvZiBhbGw6IGNoZWNrIGZvciBhY3RpdmUgZGlzY2lwbGluZXMgYW5kIGhhbmd1cCB0aGVtLgpAQCAtMTQwNSw3ICsxNDA1LDcgQEAKIAkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJLyogSW50ZW50aW9uYWxseSBsZWFrIHRoZSBjb250cm9sIGJsb2NrLiAqLwogCQkJZGV2LT5kZXN0cnVjdG9yID0gTlVMTDsKLQkJfSAKKwkJfQogCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2xpcC5oIGIvZHJpdmVycy9uZXQvc2xpcC5oCmluZGV4IDI5ZDg3ZGQuLjg1M2UwZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NsaXAuaAorKysgYi9kcml2ZXJzL25ldC9zbGlwLmgKQEAgLTEwNywxMiArMTA3LDEyIEBACiAjZGVmaW5lIFNMX01PREVfQ1NMSVA2CShTTF9NT0RFX1NMSVA2fFNMX01PREVfQ1NMSVApCiAjZGVmaW5lIFNMX01PREVfQVgyNQk0CiAjZGVmaW5lIFNMX01PREVfQURBUFRJVkUgOAotI2lmZGVmIENPTkZJR19TTElQX1NNQVJUICAKKyNpZmRlZiBDT05GSUdfU0xJUF9TTUFSVAogICB1bnNpZ25lZCBjaGFyCQlvdXRmaWxsOwkvKiAjIG9mIHNlYyBiZXR3ZWVuIG91dGZpbGwgcGFja2V0ICovCiAgIHVuc2lnbmVkIGNoYXIJCWtlZXBhbGl2ZTsJLyoga2VlcGFsaXZlIHNlY29uZHMJCSovCiAgIHN0cnVjdCB0aW1lcl9saXN0CW91dGZpbGxfdGltZXI7CiAgIHN0cnVjdCB0aW1lcl9saXN0CWtlZXBhbGl2ZV90aW1lcjsKLSNlbmRpZiAgCisjZW5kaWYKIH07CiAKICNkZWZpbmUgU0xJUF9NQUdJQyAweDUzMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYy1tY2EuYyBiL2RyaXZlcnMvbmV0L3NtYy1tY2EuYwppbmRleCBmMDBjNDc2Li43MTIyOTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWMtbWNhLmMKKysrIGIvZHJpdmVycy9uZXQvc21jLW1jYS5jCkBAIC0yNTAsOSArMjUwLDkgQEAKIAkJCWJyZWFrOwogCQl9CiAJfQotCQotCWlmKCF0aXJxIHx8ICF0YmFzZSAKLQkgICB8fCAoaXJxICYmIGlycSAhPSB0aXJxKSAKKworCWlmKCF0aXJxIHx8ICF0YmFzZQorCSAgIHx8IChpcnEgJiYgaXJxICE9IHRpcnEpCiAJICAgfHwgKGJhc2VfYWRkciAmJiB0YmFzZSAhPSBiYXNlX2FkZHIpKQogCQkvKiBGSVhNRTogd2UncmUgdHJ5aW5nIHRvIGZvcmNlIHRoZSBvcmRlcmluZyBvZiB0aGUKIAkJICogZGV2aWNlcyBoZXJlLCB0aGVyZSBzaG91bGQgYmUgYSB3YXkgb2YgZ2V0dGluZyB0aGlzCkBAIC0zMTAsNyArMzEwLDcgQEAKIAkJCSAqIHRoZSBpbmRleCBvZiB0aGUgMHgyMDAwIHN0ZXAuCiAJCQkgKiBiZXdhcmUgZGlmZmVyZW50IG51bWJlciBvZiBwYWdlcyBbaHNdCiAJCQkgKi8KLQkJCWRldi0+bWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpIAorCQkJZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykKIAkJCSAgbWNhX2RldmljZV90cmFuc2Zvcm1fbWVtb3J5KG1jYV9kZXYsICh2b2lkICopKDB4YzAwMDAgKyAoMHgyMDAwICogKHBvczMgJiAweGYpKSkpOwogCQkJbnVtX3BhZ2VzID0gMHgyMCArICgyICogKHBvczMgJiAweDEwKSk7CiAJCQlicmVhazsKQEAgLTUwMSw3ICs1MDEsNyBAQAogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkciAtIFVMVFJBX05JQ19PRkZTRVQ7IC8qIEFTSUMgYWRkciAqLwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQorCiAJaWYgKGVpX2RlYnVnID4gMSkKIAkJcHJpbnRrKCIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQuXG4iLCBkZXYtPm5hbWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWMtdWx0cmEuYyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCmluZGV4IDQ1NDQ5MzUuLjc5ODY1MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaXNhcG5wLCB1bHRyYV9kZXZpY2VfaWRzKTsKICNlbmRpZgogCi0MCisKICNkZWZpbmUgU1RBUlRfUEcJCTB4MDAJLyogRmlyc3QgcGFnZSBvZiBUWCBidWZmZXIgKi8KIAogI2RlZmluZSBVTFRSQV9DTURSRUcJMAkJLyogT2Zmc2V0IHRvIEFTSUMgY29tbWFuZCByZWdpc3Rlci4gKi8KQEAgLTEyMiw3ICsxMjIsNyBAQAogI2RlZmluZSBVTFRSQV9OSUNfT0ZGU0VUICAxNgkvKiBOSUMgcmVnaXN0ZXIgb2Zmc2V0IGZyb20gdGhlIGJhc2VfYWRkci4gKi8KICNkZWZpbmUgVUxUUkFfSU9fRVhURU5UIDMyCiAjZGVmaW5lIEVOMF9FUldDTlQJCTB4MDgJLyogRWFybHkgcmVjZWl2ZSB3YXJuaW5nIGNvdW50LiAqLwotDAorCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIHN0YXRpYyB2b2lkIHVsdHJhX3BvbGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTUzNiw3ICs1MzYsNyBAQAogCXJldHVybiAwOwogfQogCi0MCisKICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgTUFYX1VMVFJBX0NBUkRTCTQJLyogTWF4IG51bWJlciBvZiBVbHRyYSBjYXJkcyBwZXIgbW9kdWxlICovCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKmRldl91bHRyYVtNQVhfVUxUUkFfQ0FSRFNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYyBiL2RyaXZlcnMvbmV0L3NtYy11bHRyYTMyLmMKaW5kZXggODViZTIyYS4uZTEwNzU1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jLXVsdHJhMzIuYworKysgYi9kcml2ZXJzL25ldC9zbWMtdWx0cmEzMi5jCkBAIC03NCw3ICs3NCw3IEBACiAJCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkJCQkgY29uc3QgaW50IHN0YXJ0X3BhZ2UpOwogc3RhdGljIGludCB1bHRyYTMyX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotDAorCiAjZGVmaW5lIFVMVFJBMzJfQ01EUkVHCTAJLyogT2Zmc2V0IHRvIEFTSUMgY29tbWFuZCByZWdpc3Rlci4gKi8KICNkZWZpbmUJIFVMVFJBMzJfUkVTRVQJMHg4MAkvKiBCb2FyZCByZXNldCwgaW4gVUxUUkEzMl9DTURSRUcuICovCiAjZGVmaW5lCSBVTFRSQTMyX01FTUVOQgkweDQwCS8qIEVuYWJsZSB0aGUgc2hhcmVkIG1lbW9yeS4gKi8KQEAgLTMxNCw3ICszMTQsNyBAQAogCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkciAtIFVMVFJBMzJfTklDX09GRlNFVDsgLyogQ01EUkVHICovCiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0JCisKIAlpZiAoZWlfZGVidWcgPiAxKQogCQlwcmludGsoIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZC5cbiIsIGRldi0+bmFtZSk7CiAKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiAJbWVtY3B5X3RvaW8oeGZlcl9zdGFydCwgYnVmLCBjb3VudCk7CiB9Ci0MCisKICNpZmRlZiBNT0RVTEUKICNkZWZpbmUgTUFYX1VMVFJBMzJfQ0FSRFMgICA0CS8qIE1heCBudW1iZXIgb2YgVWx0cmEgY2FyZHMgcGVyIG1vZHVsZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfdWx0cmFbTUFYX1VMVFJBMzJfQ0FSRFNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IGQzN2JkODYuLmE2MjFiMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTU1LDggKzU1LDYgQEAKIAkJCSApCiAjZW5kaWYKIAotCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMTA5Miw2ICsxMDkwLDcgQEAKIAkvKiBTcHVyaW91cyBpbnRlcnJ1cHQgY2hlY2sgKi8KIAlpZiAoKFNNQ19HRVRfSVJRX0NGRygpICYgKElOVF9DRkdfSVJRX0lOVF8gfCBJTlRfQ0ZHX0lSUV9FTl8pKSAhPQogCQkoSU5UX0NGR19JUlFfSU5UXyB8IElOVF9DRkdfSVJRX0VOXykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIApAQCAtMTgyMiw3ICsxODIxLDcgQEAKIAkgcmV0dXJuIFNNQzkxMVhfRUVQUk9NX0xFTjsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBzbWM5MTF4X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzbWM5MTF4X2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJID0gc21jOTExeF9ldGh0b29sX2dldHNldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJID0gc21jOTExeF9ldGh0b29sX3NldHNldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkgPSBzbWM5MTF4X2V0aHRvb2xfZ2V0ZHJ2aW5mbywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuYyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwppbmRleCA4YjAzMjFmLi41NTA2YTBkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTE5NC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwpAQCAtNTI5LDcgKzUyOSw3IEBACiAJCX0KIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQotCQkKKwogCS8qCiAJKiogVGhlIE1NVSB3YW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VzIHRvIGJlIHRoZSBudW1iZXIgb2YgMjU2IGJ5dGVzCiAJKiogJ3BhZ2VzJywgbWludXMgMSAoIHNpbmNlIGEgcGFja2V0IGNhbid0IGV2ZXIgaGF2ZSAwIHBhZ2VzIDopICkKQEAgLTExNTksNyArMTE1OSw3IEBACiAJCWFkZHJlc3MgIHw9IGRldi0+ZGV2X2FkZHJbIGkgXTsKIAkJb3V0dyggYWRkcmVzcywgaW9hZGRyICsgQUREUjAgKyBpICk7CiAJfQotCQorCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxOTQuaCBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuaAppbmRleCAzOTNhYjkwLi5jZjY5ZDBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTk0LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTE5NC5oCkBAIC0xLDE4ICsxLDE4IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC4gc21jOTE5NC5oCi0gLiBDb3B5cmlnaHQgKEMpIDE5OTYgYnkgRXJpayBTdGFobG1hbiAKKyAuIENvcHlyaWdodCAoQykgMTk5NiBieSBFcmlrIFN0YWhsbWFuCiAgLgogIC4gVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogIC4gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAuCi0gLiBUaGlzIGZpbGUgY29udGFpbnMgcmVnaXN0ZXIgaW5mb3JtYXRpb24gYW5kIGFjY2VzcyBtYWNyb3MgZm9yIAotIC4gdGhlIFNNQzkxeHh4IGNoaXBzZXQuICAgCi0gLiAKLSAuIEluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiB0aGlzIGZpbGUgd2FzIG9idGFpbmVkIGZyb20gdGhlIFNNQzkxQzk0IAotIC4gbWFudWFsIGZyb20gU01DLiAgVG8gZ2V0IGEgY29weSwgaWYgeW91IHJlYWxseSB3YW50IG9uZSwgeW91IGNhbiBmaW5kIAorIC4gVGhpcyBmaWxlIGNvbnRhaW5zIHJlZ2lzdGVyIGluZm9ybWF0aW9uIGFuZCBhY2Nlc3MgbWFjcm9zIGZvcgorIC4gdGhlIFNNQzkxeHh4IGNoaXBzZXQuCisgLgorIC4gSW5mb3JtYXRpb24gY29udGFpbmVkIGluIHRoaXMgZmlsZSB3YXMgb2J0YWluZWQgZnJvbSB0aGUgU01DOTFDOTQKKyAuIG1hbnVhbCBmcm9tIFNNQy4gIFRvIGdldCBhIGNvcHksIGlmIHlvdSByZWFsbHkgd2FudCBvbmUsIHlvdSBjYW4gZmluZAogIC4gaW5mb3JtYXRpb24gdW5kZXIgd3d3LnNtYy5jb20gaW4gdGhlIGNvbXBvbmVudHMgZGl2aXNpb24uCiAgLiAoIHRoaXMgdGhhbmtzIHRvIGFkdmljZSBmcm9tIERvbmFsZCBCZWNrZXIgKS4KLSAuIAorIC4KICAuIEF1dGhvcnMKICAuIAlFcmlrIFN0YWhsbWFuCQkJCSggZXJpa0B2dC5lZHUgKQogIC4KQEAgLTM4LDIyICszOCwyMiBAQAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gLiAgCisgLgogIC4gQSBkZXNjcmlwdGlvbiBvZiB0aGUgU01DIHJlZ2lzdGVycyBpcyBwcm9iYWJseSBpbiBvcmRlciBoZXJlLAotIC4gYWx0aG91Z2ggZm9yIGRldGFpbHMsIHRoZSBTTUMgZGF0YXNoZWV0IGlzIGludmFsdWFibGUuICAKLSAuIAorIC4gYWx0aG91Z2ggZm9yIGRldGFpbHMsIHRoZSBTTUMgZGF0YXNoZWV0IGlzIGludmFsdWFibGUuCisgLgogIC4gQmFzaWNhbGx5LCB0aGUgY2hpcCBoYXMgNCBiYW5rcyBvZiByZWdpc3RlcnMgKCAwIHRvIDMgKSwgd2hpY2gKICAuIGFyZSBhY2Nlc3NlZCBieSB3cml0aW5nIGEgbnVtYmVyIGludG8gdGhlIEJBTktfU0VMRUNUIHJlZ2lzdGVyCiAgLiAoIEkgYWxzbyB1c2UgYSBTTUNfU0VMRUNUX0JBTksgbWFjcm8gZm9yIHRoaXMgKS4KLSAuIAorIC4KICAuIFRoZSBiYW5rcyBhcmUgY29uZmlndXJlZCBzbyB0aGF0IGZvciBtb3N0IHB1cnBvc2VzLCBiYW5rIDIgaXMgYWxsCi0gLiB0aGF0IGlzIG5lZWRlZCBmb3Igc2ltcGxlIHJ1biB0aW1lIHRhc2tzLiAgCisgLiB0aGF0IGlzIG5lZWRlZCBmb3Igc2ltcGxlIHJ1biB0aW1lIHRhc2tzLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKLSAuIEJhbmsgU2VsZWN0IFJlZ2lzdGVyOiAKKyAuIEJhbmsgU2VsZWN0IFJlZ2lzdGVyOgogIC4KLSAuCQl5eXl5IHl5eXkgMDAwMCAwMHh4ICAKKyAuCQl5eXl5IHl5eXkgMDAwMCAwMHh4CiAgLgkJeHggCQk9IGJhbmsgbnVtYmVyCiAgLgkJeXl5eSB5eXl5CT0gMHgzMywgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzLgogKi8KQEAgLTYyLDIzICs2MiwyMyBAQAogLyogQkFOSyAwICAqLwogCiAjZGVmaW5lCVRDUiAJCTAgICAgCS8qIHRyYW5zbWl0IGNvbnRyb2wgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgVENSX0VOQUJMRQkweDAwMDEJLyogaWYgdGhpcyBpcyAxLCB3ZSBjYW4gdHJhbnNtaXQgKi8gCisjZGVmaW5lIFRDUl9FTkFCTEUJMHgwMDAxCS8qIGlmIHRoaXMgaXMgMSwgd2UgY2FuIHRyYW5zbWl0ICovCiAjZGVmaW5lIFRDUl9GRFVQTFggICAgCTB4MDgwMCAgLyogcmVjZWl2ZSBwYWNrZXRzIHNlbnQgb3V0ICovCiAjZGVmaW5lIFRDUl9TVFBfU1FFVAkweDEwMDAJLyogc3RvcCB0cmFuc21pdHRpbmcgaWYgU2lnbmFsIHF1YWxpdHkgZXJyb3IgKi8KICNkZWZpbmUJVENSX01PTl9DTlMJMHgwNDAwCS8qIG1vbml0b3JzIHRoZSBjYXJyaWVyIHN0YXR1cyAqLwogI2RlZmluZQlUQ1JfUEFEX0VOQUJMRQkweDAwODAJLyogcGFkcyBzaG9ydCBwYWNrZXRzIHRvIDY0IGJ5dGVzICovCiAKICNkZWZpbmUJVENSX0NMRUFSCTAJLyogZG8gTk9USElORyAqLwotLyogdGhlIG5vcm1hbCBzZXR0aW5ncyBmb3IgdGhlIFRDUiByZWdpc3RlciA6ICovIAorLyogdGhlIG5vcm1hbCBzZXR0aW5ncyBmb3IgdGhlIFRDUiByZWdpc3RlciA6ICovCiAvKiBRVUVTVElPTjogZG8gSSB3YW50IHRvIGVuYWJsZSBwYWRkaW5nIG9mIHNob3J0IHBhY2tldHMgPyAqLwotI2RlZmluZQlUQ1JfTk9STUFMICAJVENSX0VOQUJMRSAKKyNkZWZpbmUJVENSX05PUk1BTCAgCVRDUl9FTkFCTEUKIAogCiAjZGVmaW5lIEVQSF9TVEFUVVMJMgogI2RlZmluZSBFU19MSU5LX09LCTB4NDAwMAkvKiBpcyB0aGUgbGluayBpbnRlZ3JpdHkgb2sgPyAqLwogCiAjZGVmaW5lCVJDUgkJNAotI2RlZmluZSBSQ1JfU09GVFJFU0VUCTB4ODAwMCAJLyogcmVzZXRzIHRoZSBjaGlwICovCQorI2RlZmluZSBSQ1JfU09GVFJFU0VUCTB4ODAwMCAJLyogcmVzZXRzIHRoZSBjaGlwICovCiAjZGVmaW5lCVJDUl9TVFJJUF9DUkMJMHgyMDAJLyogc3RyaXBzIENSQyAqLwogI2RlZmluZSBSQ1JfRU5BQkxFCTB4MTAwCS8qIElGRiB0aGlzIGlzIHNldCwgd2UgY2FuIHJlY2VpdmUgcGFja2V0cyAqLwogI2RlZmluZSBSQ1JfQUxNVUwJMHg0IAkvKiByZWNlaXZlIGFsbCBtdWx0aWNhc3QgcGFja2V0cyAqLwpAQCAtMTE0LDEyICsxMTQsMTIgQEAKICNkZWZpbmUgTUNfQlVTWQkJMQkvKiBvbmx5IHJlYWRhYmxlIGJpdCBpbiB0aGUgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTUNfTk9QCQkwCiAjZGVmaW5lCU1DX0FMTE9DCTB4MjAgIAkvKiBvciB3aXRoIG51bWJlciBvZiAyNTYgYnl0ZSBwYWNrZXRzICovCi0jZGVmaW5lCU1DX1JFU0VUCTB4NDAJCisjZGVmaW5lCU1DX1JFU0VUCTB4NDAKICNkZWZpbmUJTUNfUkVNT1ZFCTB4NjAgIAkvKiByZW1vdmUgdGhlIGN1cnJlbnQgcnggcGFja2V0ICovCiAjZGVmaW5lIE1DX1JFTEVBU0UgIAkweDgwICAJLyogcmVtb3ZlIGFuZCByZWxlYXNlIHRoZSBjdXJyZW50IHJ4IHBhY2tldCAqLwogI2RlZmluZSBNQ19GUkVFUEtUICAJMHhBMCAgCS8qIFJlbGVhc2UgcGFja2V0IGluIFBOUiByZWdpc3RlciAqLwogI2RlZmluZSBNQ19FTlFVRVVFCTB4QzAgCS8qIEVucXVldWUgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXQgKi8KLSAJCisKICNkZWZpbmUJUE5SX0FSUgkJMgogI2RlZmluZSBGSUZPX1BPUlRTCTQKIApAQCAtMTM5LDExICsxMzksMTEgQEAKICNkZWZpbmUgSU5UX01BU0sJMTMKICNkZWZpbmUgSU1fUkNWX0lOVAkweDEKICNkZWZpbmUJSU1fVFhfSU5UCTB4MgotI2RlZmluZQlJTV9UWF9FTVBUWV9JTlQJMHg0CQorI2RlZmluZQlJTV9UWF9FTVBUWV9JTlQJMHg0CiAjZGVmaW5lCUlNX0FMTE9DX0lOVAkweDgKICNkZWZpbmUJSU1fUlhfT1ZSTl9JTlQJMHgxMAogI2RlZmluZQlJTV9FUEhfSU5UCTB4MjAKLSNkZWZpbmUJSU1fRVJDVl9JTlQJMHg0MCAvKiBub3Qgb24gU01DOTE5MiAqLwkJCisjZGVmaW5lCUlNX0VSQ1ZfSU5UCTB4NDAgLyogbm90IG9uIFNNQzkxOTIgKi8KIAogLyogQkFOSyAzICovCiAjZGVmaW5lCU1VTFRJQ0FTVDEJMApAQCAtMTYyLDE5ICsxNjIsMTkgQEAKICNkZWZpbmUgQ0hJUF85MTk1CTUKICNkZWZpbmUgQ0hJUF85MTEwMAk3CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY2hpcF9pZHNbIDE1IF0gPSAgeyAKLQlOVUxMLCBOVUxMLCBOVUxMLCAKK3N0YXRpYyBjb25zdCBjaGFyICogY2hpcF9pZHNbIDE1IF0gPSAgeworCU5VTEwsIE5VTEwsIE5VTEwsCiAJLyogMyAqLyAiU01DOTFDOTAvOTFDOTIiLAogCS8qIDQgKi8gIlNNQzkxQzk0IiwKIAkvKiA1ICovICJTTUM5MUM5NSIsCiAJTlVMTCwKLQkvKiA3ICovICJTTUM5MUMxMDAiLCAKLQkvKiA4ICovICJTTUM5MUMxMDBGRCIsIAotCU5VTEwsIE5VTEwsIE5VTEwsIAotCU5VTEwsIE5VTEwsIE5VTEx9OyAgCisJLyogNyAqLyAiU01DOTFDMTAwIiwKKwkvKiA4ICovICJTTUM5MUMxMDBGRCIsCisJTlVMTCwgTlVMTCwgTlVMTCwKKwlOVUxMLCBOVUxMLCBOVUxMfTsKIAotLyogCi0gLiBUcmFuc21pdCBzdGF0dXMgYml0cyAKKy8qCisgLiBUcmFuc21pdCBzdGF0dXMgYml0cwogKi8KICNkZWZpbmUgVFNfU1VDQ0VTUyAweDAwMDEKICNkZWZpbmUgVFNfTE9TVENBUiAweDA0MDAKQEAgLTE5MCwxOCArMTkwLDE4IEBACiAjZGVmaW5lIFJTX1RPT0xPTkcJMHgwODAwCiAjZGVmaW5lIFJTX1RPT1NIT1JUCTB4MDQwMAogI2RlZmluZSBSU19NVUxUSUNBU1QJMHgwMDAxCi0jZGVmaW5lIFJTX0VSUk9SUwkoUlNfQUxHTkVSUiB8IFJTX0JBRENSQyB8IFJTX1RPT0xPTkcgfCBSU19UT09TSE9SVCkgCisjZGVmaW5lIFJTX0VSUk9SUwkoUlNfQUxHTkVSUiB8IFJTX0JBRENSQyB8IFJTX1RPT0xPTkcgfCBSU19UT09TSE9SVCkKIAogc3RhdGljIGNvbnN0IGNoYXIgKiBpbnRlcmZhY2VzWyAyIF0gPSB7ICJUUCIsICJBVUkiIH07CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIC4gIEkgZGVmaW5lIHNvbWUgbWFjcm9zIHRvIG1ha2UgaXQgZWFzaWVyIHRvIGRvIHNvbWV3aGF0IGNvbW1vbgotIC4gb3Igc2xpZ2h0bHkgY29tcGxpY2F0ZWQsIHJlcGVhdGVkIHRhc2tzLiAKKyAuIG9yIHNsaWdodGx5IGNvbXBsaWNhdGVkLCByZXBlYXRlZCB0YXNrcy4KICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIHNlbGVjdCBhIHJlZ2lzdGVyIGJhbmssIDAgdG8gMyAgKi8KIAotI2RlZmluZSBTTUNfU0VMRUNUX0JBTksoeCkgIHsgb3V0dyggeCwgaW9hZGRyICsgQkFOS19TRUxFQ1QgKTsgfSAKKyNkZWZpbmUgU01DX1NFTEVDVF9CQU5LKHgpICB7IG91dHcoIHgsIGlvYWRkciArIEJBTktfU0VMRUNUICk7IH0KIAogLyogZGVmaW5lIGEgc21hbGwgZGVsYXkgZm9yIHRoZSByZXNldCAqLwogI2RlZmluZSBTTUNfREVMQVkoKSB7IGludyggaW9hZGRyICsgUkNSICk7XApAQCAtMjI5LDEzICsyMjksMTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgLiBEZWZpbmUgdGhlIGludGVycnVwdHMgdGhhdCBJIHdhbnQgdG8gcmVjZWl2ZSBmcm9tIHRoZSBjYXJkCi0gLiAKLSAuIEkgd2FudDogCisgLgorIC4gSSB3YW50OgogIC4gIElNX0VQSF9JTlQsIGZvciBuYXN0eSBlcnJvcnMKICAuICBJTV9SQ1ZfSU5ULCBmb3IgaGFwcHkgcmVjZWl2ZWQgcGFja2V0cwogIC4gIElNX1JYX09WUk5fSU5ULCBiZWNhdXNlIEkgaGF2ZSB0byBraWNrIHRoZSByZWNlaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUgU01DX0lOVEVSUlVQVF9NQVNLICAgKElNX0VQSF9JTlQgfCBJTV9SWF9PVlJOX0lOVCB8IElNX1JDVl9JTlQpIAorI2RlZmluZSBTTUNfSU5URVJSVVBUX01BU0sgICAoSU1fRVBIX0lOVCB8IElNX1JYX09WUk5fSU5UIHwgSU1fUkNWX0lOVCkKIAogI2VuZGlmICAvKiBfU01DXzkxOTRfSF8gKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmMgYi9kcml2ZXJzL25ldC9zbWM5MXguYwppbmRleCAzZDhkY2I2Li5kN2U1NjQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MXguYwpAQCAtMTU0LDcgKzE1NCw3IEBACiAKIC8qCiAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcHJvY2Vzc2luZyBsb29wcyBhbGxvd2VkIGZvciBlYWNoIGNhbGwgdG8gdGhlCi0gKiBJUlEgaGFuZGxlci4gIAorICogSVJRIGhhbmRsZXIuCiAgKi8KICNkZWZpbmUgTUFYX0lSUV9MT09QUwkJOAogCkBAIC0zMjEsMTIgKzMyMSwxMiBAQAogCURCRygyLCAiJXM6ICVzXG4iLCBkZXYtPm5hbWUsIF9fRlVOQ1RJT05fXyk7CiAKIAkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzLCBibG9jayBUWCB0YXNrbGV0ICovCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCVNNQ19TRUxFQ1RfQkFOSygyKTsKIAlTTUNfU0VUX0lOVF9NQVNLKDApOwogCXBlbmRpbmdfc2tiID0gbHAtPnBlbmRpbmdfdHhfc2tiOwogCWxwLT5wZW5kaW5nX3R4X3NrYiA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKIAogCS8qIGZyZWUgYW55IHBlbmRpbmcgdHggc2tiICovCiAJaWYgKHBlbmRpbmdfc2tiKSB7CkBAIC00NDgsMTIgKzQ0OCwxMiBAQAogCURCRygyLCAiJXM6ICVzXG4iLCBDQVJETkFNRSwgX19GVU5DVElPTl9fKTsKIAogCS8qIG5vIG1vcmUgaW50ZXJydXB0cyBmb3IgbWUgKi8KLQlzcGluX2xvY2soJmxwLT5sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZscC0+bG9jayk7CiAJU01DX1NFTEVDVF9CQU5LKDIpOwogCVNNQ19TRVRfSU5UX01BU0soMCk7CiAJcGVuZGluZ19za2IgPSBscC0+cGVuZGluZ190eF9za2I7CiAJbHAtPnBlbmRpbmdfdHhfc2tiID0gTlVMTDsKLQlzcGluX3VubG9jaygmbHAtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCWlmIChwZW5kaW5nX3NrYikKIAkJZGV2X2tmcmVlX3NrYihwZW5kaW5nX3NrYik7CiAKQEAgLTc2NSw3ICs3NjUsNyBAQAogCQkvKgogCQkgKiBBbGxvY2F0aW9uIHN1Y2NlZWRlZDogcHVzaCBwYWNrZXQgdG8gdGhlIGNoaXAncyBvd24gbWVtb3J5CiAJCSAqIGltbWVkaWF0ZWx5LgotCQkgKi8gIAorCQkgKi8KIAkJc21jX2hhcmR3YXJlX3NlbmRfcGt0KCh1bnNpZ25lZCBsb25nKWRldik7CiAJfQogCkBAIC0xNzM5LDcgKzE3MzksNyBAQAogCWxwLT5tc2dfZW5hYmxlID0gbGV2ZWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgc21jX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzbWNfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwk9IHNtY19ldGh0b29sX2dldHNldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJPSBzbWNfZXRodG9vbF9zZXRzZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JPSBzbWNfZXRodG9vbF9nZXRkcnZpbmZvLApAQCAtMjM0NCw3ICsyMzQ0LDcgQEAKICNpZmRlZiBNT0RVTEUKICNpZmRlZiBDT05GSUdfSVNBCiAJaWYgKGlvID09IC0xKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIAorCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkiJXM6IFlvdSBzaG91bGRuJ3QgdXNlIGF1dG8tcHJvYmluZyB3aXRoIGluc21vZCFcbiIsCiAJCQlDQVJETkFNRSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5oIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKaW5kZXggNGVjNGI0ZC4uN2FhN2ZiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmgKQEAgLTEzNiwxNCArMTM2LDkgQEAKICNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMAogI2RlZmluZSBTTUNfSU9fU0hJRlQJCTAKICNkZWZpbmUgU01DX05PV0FJVAkJMQotI2RlZmluZSBTTUNfVVNFX1BYQV9ETUEJCTEKIAotI2RlZmluZSBTTUNfaW5iKGEsIHIpCQlyZWFkYigoYSkgKyAocikpCiAjZGVmaW5lIFNNQ19pbncoYSwgcikJCXJlYWR3KChhKSArIChyKSkKLSNkZWZpbmUgU01DX2lubChhLCByKQkJcmVhZGwoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKQl3cml0ZWIodiwgKGEpICsgKHIpKQogI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQl3cml0ZXcodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQl3cml0ZWwodiwgKGEpICsgKHIpKQogI2RlZmluZSBTTUNfaW5zdyhhLCByLCBwLCBsKQlyZWFkc3coKGEpICsgKHIpLCBwLCBsKQogI2RlZmluZSBTTUNfb3V0c3coYSwgciwgcCwgbCkJd3JpdGVzdygoYSkgKyAociksIHAsIGwpCiAKQEAgLTE4OSwxNiArMTg0LDEwIEBACiAjZGVmaW5lIFNNQ19JT19TSElGVAkJMAogI2RlZmluZSBTTUNfTk9XQUlUCQkxCiAKLSNkZWZpbmUgU01DX2luYihhLCByKQkJcmVhZGIoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKQl3cml0ZWIodiwgKGEpICsgKHIpKQogI2RlZmluZSBTTUNfaW53KGEsIHIpCQlyZWFkdygoYSkgKyAocikpCiAjZGVmaW5lIFNNQ19vdXR3KHYsIGEsIHIpCXdyaXRldyh2LCAoYSkgKyAocikpCiAjZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpCXJlYWRzdygoYSkgKyAociksIHAsIGwpCiAjZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKQl3cml0ZXN3KChhKSArIChyKSwgcCwgbCkKLSNkZWZpbmUgU01DX2lubChhLCByKQkJcmVhZGwoKGEpICsgKHIpKQotI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQl3cml0ZWwodiwgKGEpICsgKHIpKQotI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKQlyZWFkc2woKGEpICsgKHIpLCBwLCBsKQotI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJd3JpdGVzbCgoYSkgKyAociksIHAsIGwpCiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2NwdS5oPgpAQCAtMzcyLDYgKzM2MSwyNCBAQAogCiAjZGVmaW5lIFNNQ19JUlFfRkxBR1MJCSgwKQogCisjZWxpZglkZWZpbmVkKENPTkZJR19BUkNIX1ZFUlNBVElMRSkKKworI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTEKKyNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQorI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkxCisjZGVmaW5lIFNNQ19OT1dBSVQJCTEKKworI2RlZmluZSBTTUNfaW5iKGEsIHIpCQlyZWFkYigoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbncoYSwgcikJCXJlYWR3KChhKSArIChyKSkKKyNkZWZpbmUgU01DX2lubChhLCByKQkJcmVhZGwoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0Yih2LCBhLCByKQl3cml0ZWIodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQl3cml0ZXcodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfb3V0bCh2LCBhLCByKQl3cml0ZWwodiwgKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW5zbChhLCByLCBwLCBsKQlyZWFkc2woKGEpICsgKHIpLCBwLCBsKQorI2RlZmluZSBTTUNfb3V0c2woYSwgciwgcCwgbCkJd3JpdGVzbCgoYSkgKyAociksIHAsIGwpCisKKyNkZWZpbmUgU01DX0lSUV9GTEFHUwkJKDApCisKICNlbHNlCiAKICNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zb25pYy5jIGIvZHJpdmVycy9uZXQvc29uaWMuYwppbmRleCBjYWIwZGQ5Li44NzBjZjZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zb25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NvbmljLmMKQEAgLTcsMTAgKzcsMTAgQEAKICAqIChmcm9tIHRoZSBtYWM2OGsgcHJvamVjdCkgaW50cm9kdWNlZCBkaGQncyBzdXBwb3J0IGZvciAxNi1iaXQgY2FyZHMuCiAgKgogICogKEMpIDE5OTYsMTk5OCBieSBUaG9tYXMgQm9nZW5kb2VyZmVyICh0c2JvZ2VuZEBhbHBoYS5mcmFua2VuLmRlKQotICogCisgKgogICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gd29yayBmcm9tIEFuZHJlYXMgQnVzc2UsIGJ1dCBtb3N0IG9mCiAgKiB0aGUgY29kZSBpcyByZXdyaXR0ZW4uCi0gKiAKKyAqCiAgKiAoQykgMTk5NSBieSBBbmRyZWFzIEJ1c3NlIChhbmR5QHdhbGRvcmYtZ21iaC5kZSkKICAqCiAgKiAgICBDb3JlIGNvZGUgaW5jbHVkZWQgYnkgc3lzdGVtIHNvbmljIGRyaXZlcnMKQEAgLTQ2LDcgKzQ2LDcgQEAKIHsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKLQkKKwogCWlmIChzb25pY19kZWJ1ZyA+IDIpCiAJCXByaW50aygic29uaWNfb3BlbjogaW5pdGlhbGl6aW5nIHNvbmljIGRyaXZlci5cbiIpOwogCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAkJZGV2X2tmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gMTsKIAl9Ci0gICAKKwogCXNvbmljX3RkYV9wdXQoZGV2LCBlbnRyeSwgU09OSUNfVERfU1RBVFVTLCAwKTsgICAgICAgLyogY2xlYXIgc3RhdHVzICovCiAJc29uaWNfdGRhX3B1dChkZXYsIGVudHJ5LCBTT05JQ19URF9GUkFHX0NPVU5ULCAxKTsgICAvKiBzaW5nbGUgZnJhZ21lbnQgKi8KIAlzb25pY190ZGFfcHV0KGRldiwgZW50cnksIFNPTklDX1REX1BLVFNJWkUsIGxlbmd0aCk7IC8qIGxlbmd0aCBvZiBwYWNrZXQgKi8KQEAgLTQ1OSw3ICs0NTksNyBAQAogCQkJbmV3X3NrYi0+ZGV2ID0gZGV2OwogCQkJLyogcHJvdmlkZSAxNiBieXRlIElQIGhlYWRlciBhbGlnbm1lbnQgdW5sZXNzIERNQSByZXF1aXJlcyBvdGhlcndpc2UgKi8KIAkJCWlmKFNPTklDX0JVU19TQ0FMRShscC0+ZG1hX2JpdG1vZGUpID09IDIpCi0JCQkJc2tiX3Jlc2VydmUobmV3X3NrYiwgMik7IAorCQkJCXNrYl9yZXNlcnZlKG5ld19za2IsIDIpOwogCiAJCQluZXdfbGFkZHIgPSBkbWFfbWFwX3NpbmdsZShscC0+ZGV2aWNlLCBza2JfcHV0KG5ld19za2IsIFNPTklDX1JCU0laRSksCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT05JQ19SQlNJWkUsIERNQV9GUk9NX0RFVklDRSk7CkBAIC02NDEsNyArNjQxLDcgQEAKIAkJCQkJU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSkpICYgMHhmZmZmOwogCWxwLT5jdXJfcndwID0gKGxwLT5ycmFfbGFkZHIgKyAoU09OSUNfTlVNX1JSUyAtIDEpICogU0laRU9GX1NPTklDX1JSICoKIAkJCQkJU09OSUNfQlVTX1NDQUxFKGxwLT5kbWFfYml0bW9kZSkpICYgMHhmZmZmOwotICAKKwogCVNPTklDX1dSSVRFKFNPTklDX1JTQSwgbHAtPnJyYV9sYWRkciAmIDB4ZmZmZik7CiAJU09OSUNfV1JJVEUoU09OSUNfUkVBLCBscC0+cnJhX2VuZCk7CiAJU09OSUNfV1JJVEUoU09OSUNfUlJQLCBscC0+cnJhX2xhZGRyICYgMHhmZmZmKTsKQEAgLTY1Miw3ICs2NTIsNyBAQAogCS8qIGxvYWQgdGhlIHJlc291cmNlIHBvaW50ZXJzICovCiAJaWYgKHNvbmljX2RlYnVnID4gMykKIAkJcHJpbnRrKCJzb25pY19pbml0OiBpc3N1aW5nIFJSUkEgY29tbWFuZFxuIik7Ci0gIAorCiAJU09OSUNfV1JJVEUoU09OSUNfQ01ELCBTT05JQ19DUl9SUlJBKTsKIAlpID0gMDsKIAl3aGlsZSAoaSsrIDwgMTAwKSB7CkBAIC02NjIsMTQgKzY2MiwxNCBAQAogCiAJaWYgKHNvbmljX2RlYnVnID4gMikKIAkJcHJpbnRrKCJzb25pY19pbml0OiBzdGF0dXM9JXggaT0lZFxuIiwgU09OSUNfUkVBRChTT05JQ19DTUQpLCBpKTsKLSAgICAKKwogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBkZXNjcmlwdG9ycyBzbyB0aGF0IHRoZXkKIAkgKiBiZWNvbWUgYSBjaXJjdWxhciBsaW5rZWQgbGlzdCwgaWUuIGxldCB0aGUgbGFzdAogCSAqIGRlc2NyaXB0b3IgcG9pbnQgdG8gdGhlIGZpcnN0IGFnYWluLgogCSAqLwogCWlmIChzb25pY19kZWJ1ZyA+IDIpCi0JCXByaW50aygic29uaWNfaW5pdDogaW5pdGlhbGl6ZSByZWNlaXZlIGRlc2NyaXB0b3JzXG4iKTsgICAgICAKKwkJcHJpbnRrKCJzb25pY19pbml0OiBpbml0aWFsaXplIHJlY2VpdmUgZGVzY3JpcHRvcnNcbiIpOwogCWZvciAoaT0wOyBpPFNPTklDX05VTV9SRFM7IGkrKykgewogCQlzb25pY19yZGFfcHV0KGRldiwgaSwgU09OSUNfUkRfU1RBVFVTLCAwKTsKIAkJc29uaWNfcmRhX3B1dChkZXYsIGksIFNPTklDX1JEX1BLVExFTiwgMCk7CkBAIC02ODksNyArNjg5LDcgQEAKIAlTT05JQ19XUklURShTT05JQ19VUkRBLCBscC0+cmRhX2xhZGRyID4+IDE2KTsKIAlTT05JQ19XUklURShTT05JQ19DUkRBLCBscC0+cmRhX2xhZGRyICYgMHhmZmZmKTsKIAotCS8qIAorCS8qCiAJICogaW5pdGlhbGl6ZSB0cmFuc21pdCBkZXNjcmlwdG9ycwogCSAqLwogCWlmIChzb25pY19kZWJ1ZyA+IDIpCkBAIC03MTIsNyArNzEyLDcgQEAKIAlTT05JQ19XUklURShTT05JQ19DVERBLCBscC0+dGRhX2xhZGRyICYgMHhmZmZmKTsKIAlscC0+Y3VyX3R4ID0gbHAtPm5leHRfdHggPSAwOwogCWxwLT5lb2xfdHggPSBTT05JQ19OVU1fVERTIC0gMTsKLSAgICAKKwogCS8qCiAJICogcHV0IG91ciBvd24gYWRkcmVzcyB0byBDQU0gZGVzY1swXQogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc29uaWMuaCBiL2RyaXZlcnMvbmV0L3NvbmljLmgKaW5kZXggN2Y1YzRlYi4uN2Y4ODZlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc29uaWMuaAorKysgYi9kcml2ZXJzL25ldC9zb25pYy5oCkBAIC03LDcgKzcsNyBAQAogICogTk9URTogbW9zdCBvZiB0aGUgc3RydWN0dXJlIGRlZmluaXRpb25zIGhlcmUgYXJlIGVuZGlhbiBkZXBlbmRlbnQuCiAgKiBJZiB5b3Ugd2FudCB0byB1c2UgdGhpcyBkcml2ZXIgb24gYmlnIGVuZGlhbiBtYWNoaW5lcywgdGhlIGRhdGEKICAqIGFuZCBwYWQgc3RydWN0dXJlIG1lbWJlcnMgbXVzdCBiZSBleGNoYW5nZWQuIEFsc28sIHRoZSBzdHJ1Y3R1cmVzCi0gKiBuZWVkIHRvIGJlIGNoYW5nZWQgYWNjb3JkaW5nbHkgdG8gdGhlIGJ1cyBzaXplLiAKKyAqIG5lZWQgdG8gYmUgY2hhbmdlZCBhY2NvcmRpbmdseSB0byB0aGUgYnVzIHNpemUuCiAgKgogICogOTgxMjI5IE1TY2g6CWRpZCBqdXN0IHRoYXQgZm9yIHRoZSA2OGsgTWFjIHBvcnQgKDMyIGJpdCwgYmlnIGVuZGlhbikKICAqCkBAIC0xODEsNyArMTgxLDcgQEAKIAogI2RlZmluZSBTT05JQ19UQ1JfREVGQVVMVCAgICAgICAweDAwMDAKIAotLyogCisvKgogICogQ29uc3RhbnRzIGZvciB0aGUgU09OSUNfSU5URVJSVVBUX01BU0sgYW5kCiAgKiBTT05JQ19JTlRFUlJVUFRfU1RBVFVTIHJlZ2lzdGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCmluZGV4IDY0N2Y2MmUuLmQ2NGU3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYworKysgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKQEAgLTE2MTEsMTMgKzE2MTEsMTIgQEAKIAlpbnQgcmVzdWx0OwogCiAJcmVzdWx0ID0gLUVOT01FTTsKLQlpZiAoc3BpZGVyX25ldF9pbml0X2NoYWluKGNhcmQsICZjYXJkLT50eF9jaGFpbiwKLQkJCWNhcmQtPmRlc2NyLAotCQkJUENJX0RNQV9UT0RFVklDRSwgdHhfZGVzY3JpcHRvcnMpKQorCWlmIChzcGlkZXJfbmV0X2luaXRfY2hhaW4oY2FyZCwgJmNhcmQtPnR4X2NoYWluLCBjYXJkLT5kZXNjciwKKwkJCVBDSV9ETUFfVE9ERVZJQ0UsIGNhcmQtPnR4X2Rlc2MpKQogCQlnb3RvIGFsbG9jX3R4X2ZhaWxlZDsKIAlpZiAoc3BpZGVyX25ldF9pbml0X2NoYWluKGNhcmQsICZjYXJkLT5yeF9jaGFpbiwKLQkJCWNhcmQtPmRlc2NyICsgdHhfZGVzY3JpcHRvcnMsCi0JCQlQQ0lfRE1BX0ZST01ERVZJQ0UsIHJ4X2Rlc2NyaXB0b3JzKSkKKwkJCWNhcmQtPmRlc2NyICsgY2FyZC0+cnhfZGVzYywKKwkJCVBDSV9ETUFfRlJPTURFVklDRSwgY2FyZC0+cnhfZGVzYykpCiAJCWdvdG8gYWxsb2NfcnhfZmFpbGVkOwogCiAJLyogYWxsb2NhdGUgcnggc2ticyAqLwpAQCAtMTY5OCwxMCArMTY5NywxMCBAQAogICovCiBzdGF0aWMgaW50CiBzcGlkZXJfbmV0X2Rvd25sb2FkX2Zpcm13YXJlKHN0cnVjdCBzcGlkZXJfbmV0X2NhcmQgKmNhcmQsCi0JCQkgICAgIHU4ICpmaXJtd2FyZV9wdHIpCisJCQkgICAgIGNvbnN0IHZvaWQgKmZpcm13YXJlX3B0cikKIHsKIAlpbnQgc2VxdWVuY2VyLCBpOwotCXUzMiAqZndfcHRyID0gKHUzMiAqKWZpcm13YXJlX3B0cjsKKwljb25zdCB1MzIgKmZ3X3B0ciA9IGZpcm13YXJlX3B0cjsKIAogCS8qIHN0b3Agc2VxdWVuY2VycyAqLwogCXNwaWRlcl9uZXRfd3JpdGVfcmVnKGNhcmQsIFNQSURFUl9ORVRfR1NJTklULApAQCAtMTc1OCw3ICsxNzU3LDcgQEAKIHsKIAlzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlID0gTlVMTDsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOwotCXU4ICpmd19wcm9wID0gTlVMTDsKKwljb25zdCB1OCAqZndfcHJvcCA9IE5VTEw7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAJaW50IGZ3X3NpemU7CiAKQEAgLTE3ODQsNyArMTc4Myw3IEBACiAJaWYgKCFkbikKIAkJZ290byBvdXRfZXJyOwogCi0JZndfcHJvcCA9ICh1OCAqKWdldF9wcm9wZXJ0eShkbiwgImZpcm13YXJlIiwgJmZ3X3NpemUpOworCWZ3X3Byb3AgPSBnZXRfcHJvcGVydHkoZG4sICJmaXJtd2FyZSIsICZmd19zaXplKTsKIAlpZiAoIWZ3X3Byb3ApCiAJCWdvdG8gb3V0X2VycjsKIApAQCAtMTk4Nyw3ICsxOTg2LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gY2FyZC0+bmV0ZGV2OwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHNvY2thZGRyIGFkZHI7Ci0JdTggKm1hYzsKKwljb25zdCB1OCAqbWFjOwogCiAJU0VUX01PRFVMRV9PV05FUihuZXRkZXYpOwogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmNhcmQtPnBkZXYtPmRldik7CkBAIC0yMDA1LDYgKzIwMDQsOSBAQAogCiAJY2FyZC0+b3B0aW9ucy5yeF9jc3VtID0gU1BJREVSX05FVF9SWF9DU1VNX0RFRkFVTFQ7CiAKKwljYXJkLT50eF9kZXNjID0gdHhfZGVzY3JpcHRvcnM7CisJY2FyZC0+cnhfZGVzYyA9IHJ4X2Rlc2NyaXB0b3JzOworCiAJc3BpZGVyX25ldF9zZXR1cF9uZXRkZXZfb3BzKG5ldGRldik7CiAKIAluZXRkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9IV19DU1VNIHwgTkVUSUZfRl9MTFRYOwpAQCAtMjAxNyw3ICsyMDE5LDcgQEAKIAlpZiAoIWRuKQogCQlyZXR1cm4gLUVJTzsKIAotCW1hYyA9ICh1OCAqKWdldF9wcm9wZXJ0eShkbiwgImxvY2FsLW1hYy1hZGRyZXNzIiwgTlVMTCk7CisJbWFjID0gZ2V0X3Byb3BlcnR5KGRuLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKTsKIAlpZiAoIW1hYykKIAkJcmV0dXJuIC1FSU87CiAJbWVtY3B5KGFkZHIuc2FfZGF0YSwgbWFjLCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmggYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmgKaW5kZXggZjZkY2YxOC4uMmU4MDg4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5oCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuaApAQCAtMjksNyArMjksNyBAQAogZXh0ZXJuIGludCBzcGlkZXJfbmV0X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBleHRlcm4gaW50IHNwaWRlcl9uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBzcGlkZXJfbmV0X2V0aHRvb2xfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzcGlkZXJfbmV0X2V0aHRvb2xfb3BzOwogCiBleHRlcm4gY2hhciBzcGlkZXJfbmV0X2RyaXZlcl9uYW1lW107CiAKQEAgLTQ0MCw2ICs0NDAsOSBAQAogCS8qIGZvciBldGh0b29sICovCiAJaW50IG1zZ19lbmFibGU7CiAKKwlpbnQgcnhfZGVzYzsKKwlpbnQgdHhfZGVzYzsKKwogCXN0cnVjdCBzcGlkZXJfbmV0X2Rlc2NyIGRlc2NyWzBdOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0X2V0aHRvb2wuYwppbmRleCBhNWJiMGI3Ni4uYjBlNjVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc3BpZGVyX25ldF9ldGh0b29sLmMKQEAgLTEzMCw3ICsxMzAsMTkgQEAKICAgICAgICAgcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBldGh0b29sX29wcyBzcGlkZXJfbmV0X2V0aHRvb2xfb3BzID0geworc3RhdGljIHZvaWQKK3NwaWRlcl9uZXRfZXRodG9vbF9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqZXJpbmcpCit7CisJc3RydWN0IHNwaWRlcl9uZXRfY2FyZCAqY2FyZCA9IG5ldGRldi0+cHJpdjsKKworCWVyaW5nLT50eF9tYXhfcGVuZGluZyA9IFNQSURFUl9ORVRfVFhfREVTQ1JJUFRPUlNfTUFYOworCWVyaW5nLT50eF9wZW5kaW5nID0gY2FyZC0+dHhfZGVzYzsKKwllcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBTUElERVJfTkVUX1JYX0RFU0NSSVBUT1JTX01BWDsKKwllcmluZy0+cnhfcGVuZGluZyA9IGNhcmQtPnJ4X2Rlc2M7Cit9CisKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzcGlkZXJfbmV0X2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gc3BpZGVyX25ldF9ldGh0b29sX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JCT0gc3BpZGVyX25ldF9ldGh0b29sX2dldF9kcnZpbmZvLAogCS5nZXRfd29sCQk9IHNwaWRlcl9uZXRfZXRodG9vbF9nZXRfd29sLApAQCAtMTQxLDUgKzE1Myw2IEBACiAJLnNldF9yeF9jc3VtCQk9IHNwaWRlcl9uZXRfZXRodG9vbF9zZXRfcnhfY3N1bSwKIAkuZ2V0X3R4X2NzdW0JCT0gc3BpZGVyX25ldF9ldGh0b29sX2dldF90eF9jc3VtLAogCS5zZXRfdHhfY3N1bQkJPSBzcGlkZXJfbmV0X2V0aHRvb2xfc2V0X3R4X2NzdW0sCisJLmdldF9yaW5ncGFyYW0gICAgICAgICAgPSBzcGlkZXJfbmV0X2V0aHRvb2xfZ2V0X3JpbmdwYXJhbSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMgYi9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCmluZGV4IGMwYTYyYjAuLjMzN2MzYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKKysrIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwpAQCAtNjQyLDcgKzY0Miw3IEBACiBzdGF0aWMgaW50CW5ldGRldl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBpbnQJbmV0ZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQJbmV0ZGV2X21lZGlhX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogCiAKICNpZmRlZiBWTEFOX1NVUFBPUlQKQEAgLTE4NjgsNyArMTg2OCw3IEBACiAJZGVidWcgPSB2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0gewogCS5iZWdpbiA9IGNoZWNrX2lmX3J1bm5pbmcsCiAJLmdldF9kcnZpbmZvID0gZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncyA9IGdldF9zZXR0aW5ncywKQEAgLTE5ODQsNyArMTk4NCw3IEBACiBzdGF0aWMgaW50IHN0YXJmaXJlX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCQorCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCkBAIC0yMDUzLDcgKzIwNTMsNyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmc3RhcmZpcmVfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc3RhcmZpcmVfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG5pYy5jIGIvZHJpdmVycy9uZXQvc3RuaWMuYwppbmRleCA3NDIyODM0Li4zZmQ3YTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG5pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3N0bmljLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2Uvc2UuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIAorI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCiAjaW5jbHVkZSA8YXNtL3NoX2Jpb3MuaD4KICNlbmRpZgogCkBAIC05OCw3ICs5OCw3IEBACiAgICoodmhhbGYgKikgKFBBXzgzOTAyICsgKChyZWcpIDw8IDEpKSA9ICgoaGFsZikgKHZhbCkgPDwgOCk7CiAgIFNUTklDX0RFTEFZICgpOwogfQotDAorCiBzdGF0aWMgaW50IF9faW5pdCBzdG5pY19wcm9iZSh2b2lkKQogewogICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTE0LDcgKzExNCw3IEBACiAgIAlyZXR1cm4gLUVOT01FTTsKICAgU0VUX01PRFVMRV9PV05FUihkZXYpOwogCi0jaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgCisjaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKICAgc2hfYmlvc19nZXRfbm9kZV9hZGRyIChzdG5pY19lYWRyKTsKICNlbmRpZgogICBmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiAgIGVpX3N0YXR1cy5uYW1lID0gZGV2LT5uYW1lOwogICBlaV9zdGF0dXMud29yZDE2ID0gMTsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXyAKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fXwogICBlaV9zdGF0dXMuYmlnZW5kaWFuID0gMDsKICNlbHNlCiAgIGVpX3N0YXR1cy5iaWdlbmRpYW4gPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jIGIvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jCmluZGV4IGQ1YTU4ZmIuLjA2MDU0NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYworKysgYi9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMKQEAgLTE0LDEwICsxNCwxMCBAQAogICogQWxwaGFjb2RlIDAuODIgKDk2LzA5LzI5KSBmb3IgTGludXggMi4wLjAgKG9yIGxhdGVyKQogICogQ29weXJpZ2h0cyAoYykgMTk5NCwxOTk1LDE5OTYgYnkgTS5IaXBwIChoaXBwbUBpbmZvcm1hdGlrLnVuaS10dWViaW5nZW4uZGUpCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogCisgKgogICogQ29uc3VsdCBuaTUyLmMgZm9yIGZ1cnRoZXIgbm90ZXMgZnJvbSB0aGUgb3JpZ2luYWwgZHJpdmVyLgogICoKLSAqIFRoaXMgaW5jYXJuYXRpb24gY3VycmVudGx5IHN1cHBvcnRzIHRoZSBPQklPIHZlcnNpb24gb2YgdGhlIGk4MjU4NiBjaGlwIAorICogVGhpcyBpbmNhcm5hdGlvbiBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIE9CSU8gdmVyc2lvbiBvZiB0aGUgaTgyNTg2IGNoaXAKICAqIHVzZWQgaW4gY2VydGFpbiBzdW4zIG1vZGVscy4gIEl0IHNob3VsZCBiZSBmYWlybHkgZG9hYmxlIHRvIGV4cGFuZCB0aGlzCiAgKiB0byBzdXBwb3J0IFZNRSBpZiBJIHNob3VsZCBldmVyeSBhY3F1aXJlIHN1Y2ggYSBib2FyZC4KICAqCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpc2NwX2FkZHIgPSAoY2hhciAqKWR2bWFfYnRvdigodW5zaWduZWQgbG9uZyl3aGVyZSk7Ci0JCisKIAlwLT5pc2NwID0gKHN0cnVjdCBpc2NwX3N0cnVjdCAqKSBpc2NwX2FkZHI7CiAJbWVtc2V0KChjaGFyICopcC0+aXNjcCwwLCBzaXplb2Yoc3RydWN0IGlzY3Bfc3RydWN0KSk7CiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXN1bjNfcmVzZXQ1ODYoKTsKIAlzdW4zX2F0dG41ODYoKTsKIAlERUxBWSgxKTsJLyogd2FpdCBhIHdoaWxlLi4uICovCi0JCisKIAlpZihwLT5pc2NwLT5idXN5KSAvKiBpODI1ODYgY2xlYXJzICdidXN5JyBhZnRlciBzdWNjZXNzZnVsIGluaXQgKi8KIAkJcmV0dXJuIDA7CiAKQEAgLTI4Niw3ICsyODYsNyBAQAogCXVuc2lnbmVkIGxvbmcgaW9hZGRyOwogCXN0YXRpYyBpbnQgZm91bmQgPSAwOwogCWludCBlcnIgPSAtRU5PTUVNOwotCQorCiAJLyogY2hlY2sgdGhhdCB0aGlzIG1hY2hpbmUgaGFzIGFuIG9uYm9hcmQgODI1ODYgKi8KIAlzd2l0Y2goaWRwcm9tLT5pZF9tYWNodHlwZSkgewogCWNhc2UgU01fU1VOM3xTTV8zXzE2MDoKQEAgLTMwMCwxMiArMzAwLDEyIEBACiAKIAlpZiAoZm91bmQpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOwotCQorCiAJaW9hZGRyID0gKHVuc2lnbmVkIGxvbmcpaW9yZW1hcChJRV9PQklPLCBTVU4zXzgyNTg2X1RPVEFMX1NJWkUpOwogCWlmICghaW9hZGRyKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAlmb3VuZCA9IDE7Ci0JCisKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHByaXYpKTsKIAlpZiAoIWRldikKIAkJZ290byBvdXQ7CkBAIC0zNzksNyArMzc5LDcgQEAKIAkJKChzdHJ1Y3QgcHJpdiAqKSBkZXYtPnByaXYpLT5udW1fcmVjdl9idWZmcyA9IE5VTV9SRUNWX0JVRkZTXzMyOwogCiAJcHJpbnRrKCJNZW1hZGRyOiAweCVseCwgTWVtc2l6ZTogJWQsIElSUSAlZFxuIixkZXYtPm1lbV9zdGFydCxzaXplLCBkZXYtPmlycSk7Ci0JCisKIAlkZXYtPm9wZW4JCT0gc3VuM184MjU4Nl9vcGVuOwogCWRldi0+c3RvcAkJPSBzdW4zXzgyNTg2X2Nsb3NlOwogCWRldi0+Z2V0X3N0YXRzCQk9IHN1bjNfODI1ODZfZ2V0X3N0YXRzOwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAJLyoKIAkgKiBURFIsIHdpcmUgY2hlY2sgLi4gZS5nLiBubyByZXNpc3RvciBlLnQuYwogCSAqLwotCSAKKwogCXRkcl9jbWQgPSAoc3RydWN0IHRkcl9jbWRfc3RydWN0ICopcHRyOwogCiAJdGRyX2NtZC0+Y21kX3N0YXR1cwk9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmggYi9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmgKaW5kZXggODFjZmIwOS4uOTMzNDZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5oCisrKyBiL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuaApAQCAtMTIsMTMgKzEyLDEzIEBACiAgKi8KIAogLyoKLSAqIENsb25lZCBmcm9tIG5pNTIuaCwgY29weXJpZ2h0IGFzIGFib3ZlLiAgCisgKiBDbG9uZWQgZnJvbSBuaTUyLmgsIGNvcHlyaWdodCBhcyBhYm92ZS4KICAqCiAgKiBNb2RpZmllZCBmb3IgU3VuMyBPQklPIGk4MjU4NiBieSBTYW0gQ3JlYXNleSAoc2FtbXlAc2FtbXkubmV0KQogICovCiAKIAotLyogZGVmaW5lcyBmb3IgdGhlIG9iaW8gY2hpcCAobm90IHZtZSkgKi8gCisvKiBkZWZpbmVzIGZvciB0aGUgb2JpbyBjaGlwIChub3Qgdm1lKSAqLwogI2RlZmluZSBJRU9CX05PUlNFVCAweDgwICAgICAgICAvKiBkb24ndCByZXNldCB0aGUgYm9hcmQgKi8KICNkZWZpbmUgSUVPQl9PTkFJUiAgMHg0MCAgICAgICAgLyogcHV0IHVzIG9uIHRoZSBhaXIgKi8KICNkZWZpbmUgSUVPQl9BVFRFTiAgMHgyMCAgICAgICAgLyogYXR0ZW50aW9uISAqLwpAQCAtMTU5LDcgKzE1OSw3IEBACiAvKgogICogUmVjZWl2ZSBCdWZmZXIgRGVzY3JpcHRvciAoUkJEKQogICovCi1zdHJ1Y3QgcmJkX3N0cnVjdCAKK3N0cnVjdCByYmRfc3RydWN0CiB7CiAgIHVuc2lnbmVkIHNob3J0IHN0YXR1czsJLyogc3RhdHVzIHdvcmQsbnVtYmVyIG9mIHVzZWQgYnl0ZXMgaW4gYnVmZiAqLwogICB1bnNpZ25lZCBzaG9ydCBuZXh0OwkJLyogcG9pbnRlcm9mZnNldCB0byBuZXh0IFJCRCAqLwpAQCAtMjExLDcgKzIxMSw3IEBACiAvKgogICogSUEgU2V0dXAgY29tbWFuZAogICovCi1zdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0IAorc3RydWN0IGlhc2V0dXBfY21kX3N0cnVjdAogewogICB1bnNpZ25lZCBzaG9ydCBjbWRfc3RhdHVzOwogICB1bnNpZ25lZCBzaG9ydCBjbWRfY21kOwpAQCAtMjIwLDcgKzIyMCw3IEBACiB9OwogCiAvKgotICogQ29uZmlndXJlIGNvbW1hbmQgCisgKiBDb25maWd1cmUgY29tbWFuZAogICovCiBzdHJ1Y3QgY29uZmlndXJlX2NtZF9zdHJ1Y3QKIHsKQEAgLTI0Miw5ICsyNDIsOSBAQAogfTsKIAogLyoKLSAqIE11bHRpY2FzdCBTZXR1cCBjb21tYW5kIAorICogTXVsdGljYXN0IFNldHVwIGNvbW1hbmQKICAqLwotc3RydWN0IG1jc2V0dXBfY21kX3N0cnVjdCAKK3N0cnVjdCBtY3NldHVwX2NtZF9zdHJ1Y3QKIHsKICAgdW5zaWduZWQgc2hvcnQgY21kX3N0YXR1czsKICAgdW5zaWduZWQgc2hvcnQgY21kX2NtZDsKQEAgLTI2NSw5ICsyNjUsOSBAQAogfTsKIAogLyoKLSAqIHRyYW5zbWl0IGNvbW1hbmQgCisgKiB0cmFuc21pdCBjb21tYW5kCiAgKi8KLXN0cnVjdCB0cmFuc21pdF9jbWRfc3RydWN0IAorc3RydWN0IHRyYW5zbWl0X2NtZF9zdHJ1Y3QKIHsKICAgdW5zaWduZWQgc2hvcnQgY21kX3N0YXR1czsKICAgdW5zaWduZWQgc2hvcnQgY21kX2NtZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bjNsYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VuM2xhbmNlLmMKaW5kZXggMmRjYWRiMS4uNjFhODMyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuM2xhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuM2xhbmNlLmMKQEAgLTEsMjQgKzEsMjQgQEAKIC8qIHN1bjNsYW5jZS5jOiBFdGhlcm5ldCBkcml2ZXIgZm9yIFNVTjMgTGFuY2UgY2hpcCAqLwogLyoKIAotICBTdW4zIExhbmNlIGV0aGVybmV0IGRyaXZlciwgYnkgU2FtIENyZWFzZXkgKHNhbW15QHVzZXJzLnF1YWwubmV0KS4gIAorICBTdW4zIExhbmNlIGV0aGVybmV0IGRyaXZlciwgYnkgU2FtIENyZWFzZXkgKHNhbW15QHVzZXJzLnF1YWwubmV0KS4KICAgVGhpcyBkcml2ZXIgaXMgYSBwYXJ0IG9mIHRoZSBsaW51eCBrZXJuZWwsIGFuZCBpcyB0aHVzIGRpc3RyaWJ1dGVkCiAgIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KLSAgCisKICAgVGhlIHZhbHVlcyB1c2VkIGluIExBTkNFX09CSU8gYW5kIExBTkNFX0lSUSBzZWVtIHRvIGJlIGVtcGlyaWNhbGx5CiAgIHRydWUgZm9yIHRoZSBjb3JyZWN0IElSUSBhbmQgYWRkcmVzcyBvZiB0aGUgbGFuY2UgcmVnaXN0ZXJzLiAgVGhleQogICBoYXZlIG5vdCBiZWVuIHdpZGVseSB0ZXN0ZWQsIGhvd2V2ZXIuICBXaGF0IHdlIHByb2JhYmx5IG5lZWQgaXMgYQogICAicHJvcGVyIiB3YXkgdG8gc2VhcmNoIGZvciBhIGRldmljZSBpbiB0aGUgc3VuMydzIHByb20sIGJ1dCwgYWxhcywKLSAgbGludXggaGFzIG5vIHN1Y2ggdGhpbmcuICAKKyAgbGludXggaGFzIG5vIHN1Y2ggdGhpbmcuCiAKICAgVGhpcyBkcml2ZXIgaXMgbGFyZ2VseSBiYXNlZCBvbiBhdGFyaWxhbmNlLmMsIGJ5IFJvbWFuIEhvZGVrLiAgT3RoZXIKICAgc291cmNlcyBvZiBpbnNwaXJhdGlvbiB3ZXJlIHRoZSBOZXRCU0Qgc3VuMyBhbTc5OTAgZHJpdmVyLCBhbmQgdGhlCi0gIGxpbnV4IHNwYXJjIGxhbmNlIGRyaXZlciAoc3VubGFuY2UuYykuICAKKyAgbGludXggc3BhcmMgbGFuY2UgZHJpdmVyIChzdW5sYW5jZS5jKS4KIAogICBUaGVyZSBhcmUgbW9yZSBhc3N1bXB0aW9ucyBtYWRlIHRocm91Z2hvdXQgdGhpcyBkcml2ZXIsIGl0IGFsbW9zdAogICBjZXJ0YWlubHkgc3RpbGwgbmVlZHMgd29yaywgYnV0IGl0IGRvZXMgd29yayBhdCBsZWFzdCBmb3IgUkFSUC9CT09UUCBhbmQKICAgbW91bnRpbmcgdGhlIHJvb3QgTkZTIGZpbGVzeXN0ZW0uCi0gIAorCiAqLwogCiBzdGF0aWMgY2hhciAqdmVyc2lvbiA9ICJzdW4zbGFuY2UuYzogdjEuMiAxLzEyLzIwMDEgIFNhbSBDcmVhc2V5IChzYW1teUBzYW1teS5uZXQpXG4iOwpAQCAtMjk0LDkgKzI5NCw5IEBACiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGxhbmNlX3Byb2JlKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewkKK3sKIAl1bnNpZ25lZCBsb25nIGlvYWRkcjsKLQkKKwogCXN0cnVjdCBsYW5jZV9wcml2YXRlCSpscDsKIAlpbnQgCQkJaTsKIAlzdGF0aWMgaW50IAkJZGlkX3ZlcnNpb247CkBAIC0zMTMsNyArMzEzLDcgQEAKIAogCS8qIHRlc3QgdG8gc2VlIGlmIHRoZXJlJ3MgcmVhbGx5IGEgbGFuY2UgaGVyZSAqLwogCS8qIChDU1JPX0lOSVQgc2hvdWxkbid0IGJlIHJlYWRhYmxlKSAqLwotCQorCiAJaW9hZGRyX3Byb2JlID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopaW9hZGRyOwogCXRtcDEgPSBpb2FkZHJfcHJvYmVbMF07CiAJdG1wMiA9IGlvYWRkcl9wcm9iZVsxXTsKQEAgLTMzOSw3ICszMzksNyBAQAogCWxwLT5pb2Jhc2UgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilpb2FkZHI7CiAJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylpb2FkZHI7IC8qIGluZm9ybWF0aW9uYWwgb25seSAqLwogCi0JUkVHQShDU1IwKSA9IENTUjBfU1RPUDsgCisJUkVHQShDU1IwKSA9IENTUjBfU1RPUDsKIAogCXJlcXVlc3RfaXJxKExBTkNFX0lSUSwgbGFuY2VfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELCAiU1VOMyBMYW5jZSIsIGRldik7CiAJZGV2LT5pcnEgPSAodW5zaWduZWQgc2hvcnQpTEFOQ0VfSVJROwpAQCAtMzc4LDcgKzM3OCw3IEBACiAKIAlEUFJJTlRLKDIsICgiaW5pdGFkZHI6ICUwOGx4IHJ4X3Jpbmc6ICUwOGx4IHR4X3Jpbmc6ICUwOGx4XG4iLAogCSAgICAgICBkdm1hX3Z0b2IoJihNRU0tPmluaXQpKSwgZHZtYV92dG9iKE1FTS0+cnhfaGVhZCksCi0JICAgICAgIChkdm1hX3Z0b2IoTUVNLT50eF9oZWFkKSkpKTsgIAorCSAgICAgICAoZHZtYV92dG9iKE1FTS0+dHhfaGVhZCkpKSk7CiAKIAlpZiAoZGlkX3ZlcnNpb24rKyA9PSAwKQogCQlwcmludGsoIHZlcnNpb24gKTsKQEAgLTQyNyw3ICs0MjcsNyBAQAogCURSRUcgPSBDU1IwX0lET04gfCBDU1IwX1NUUlQgfCBDU1IwX0lORUE7CiAKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotCQorCiAJRFBSSU5USyggMiwgKCAiJXM6IExBTkNFIGlzIG9wZW4sIGNzcjAgJTA0eFxuIiwgZGV2LT5uYW1lLCBEUkVHICkpOwogCiAJcmV0dXJuKCAwICk7CkBAIC00NDksNyArNDQ5LDcgQEAKIAlmb3IoIGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKysgKSB7CiAJCU1FTS0+dHhfaGVhZFtpXS5iYXNlID0gZHZtYV92dG9iKE1FTS0+dHhfZGF0YVtpXSk7CiAJCU1FTS0+dHhfaGVhZFtpXS5mbGFnID0gMDsKLSAJCU1FTS0+dHhfaGVhZFtpXS5iYXNlX2hpID0gCisgCQlNRU0tPnR4X2hlYWRbaV0uYmFzZV9oaSA9CiAJCQkoZHZtYV92dG9iKE1FTS0+dHhfZGF0YVtpXSkpID4+MTY7CiAJCU1FTS0+dHhfaGVhZFtpXS5sZW5ndGggPSAwOwogCQlNRU0tPnR4X2hlYWRbaV0ubWlzYyA9IDA7CkBAIC00NTgsNyArNDU4LDcgQEAKIAlmb3IoIGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKysgKSB7CiAJCU1FTS0+cnhfaGVhZFtpXS5iYXNlID0gZHZtYV92dG9iKE1FTS0+cnhfZGF0YVtpXSk7CiAJCU1FTS0+cnhfaGVhZFtpXS5mbGFnID0gUk1EMV9PV05fQ0hJUDsKLQkJTUVNLT5yeF9oZWFkW2ldLmJhc2VfaGkgPSAKKwkJTUVNLT5yeF9oZWFkW2ldLmJhc2VfaGkgPQogCQkJKGR2bWFfdnRvYihNRU0tPnJ4X2RhdGFbaV0pKSA+PiAxNjsKIAkJTUVNLT5yeF9oZWFkW2ldLmJ1Zl9sZW5ndGggPSAtUEtUX0JVRl9TWiB8IDB4ZjAwMDsKIAkJTUVNLT5yeF9oZWFkW2ldLm1zZ19sZW5ndGggPSAwOwpAQCAtNTQyLDIyICs1NDIsMjIgQEAKIAogCQlsYW5jZV9pbml0X3JpbmcoZGV2KTsKIAkJUkVHQSggQ1NSMCApID0gQ1NSMF9JTkVBIHwgQ1NSMF9JTklUIHwgQ1NSMF9TVFJUOwotCQkKKwogCQluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQkJCisKIAkJcmV0dXJuIDA7CiAJfQogCi0JCisKIAkvKiBCbG9jayBhIHRpbWVyLWJhc2VkIHRyYW5zbWl0IGZyb20gb3ZlcmxhcHBpbmcuICBUaGlzIGNvdWxkIGJldHRlciBiZQogCSAgIGRvbmUgd2l0aCBhdG9taWNfc3dhcCgxLCBkZXYtPnRidXN5KSwgYnV0IHNldF9iaXQoKSB3b3JrcyBhcyB3ZWxsLiAqLwogCiAJLyogQmxvY2sgYSB0aW1lci1iYXNlZCB0cmFuc21pdCBmcm9tIG92ZXJsYXBwaW5nIHdpdGggdXMgYnkKIAkgICBzdG9wcGluZyB0aGUgcXVldWUgZm9yIGEgYml0Li4uICovCi0gICAgIAorCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQorCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoIDAsICh2b2lkKikmbHAtPmxvY2sgKSAhPSAwKSB7CiAJCXByaW50ayggIiVzOiB0eCBxdWV1ZSBsb2NrIS5cbiIsIGRldi0+bmFtZSk7CiAJCS8qIGRvbid0IGNsZWFyIGRldi0+dGJ1c3kgZmxhZy4gKi8KQEAgLTU5Myw3ICs1OTMsNyBAQAogCQlwcmludGsoIiBkYXRhIGF0IDB4JTA4eCBsZW4gJWRcbiIsIChpbnQpc2tiLT5kYXRhLAogCQkgICAgICAgKGludClza2ItPmxlbiApOwogCX0KLSNlbmRpZgkKKyNlbmRpZgogCS8qIFdlJ3JlIG5vdCBwcmVwYXJlZCBmb3IgdGhlIGludCB1bnRpbCB0aGUgbGFzdCBmbGFncyBhcmUgc2V0L3Jlc2V0LgogCSAqIEFuZCB0aGUgaW50IG1heSBoYXBwZW4gYWxyZWFkeSBhZnRlciBzZXR0aW5nIHRoZSBPV05fQ0hJUC4uLiAqLwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTYzMiw3ICs2MzIsNyBAQAogCiAJbHAtPmxvY2sgPSAwOwogCWlmICgoTUVNLT50eF9oZWFkWyhlbnRyeSsxKSAmIFRYX1JJTkdfTU9EX01BU0tdLmZsYWcgJiBUTUQxX09XTikgPT0KLQkgICAgVE1EMV9PV05fSE9TVCkgCisJICAgIFRNRDFfT1dOX0hPU1QpCiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC02NTcsMTAgKzY1NywxMCBAQAogCWlmIChpbl9pbnRlcnJ1cHQpCiAJCURQUklOVEsoIDIsICggIiVzOiBSZS1lbnRlcmluZyB0aGUgaW50ZXJydXB0IGhhbmRsZXIuXG4iLCBkZXYtPm5hbWUgKSk7CiAJaW5faW50ZXJydXB0ID0gMTsKLQkKKwogIHN0aWxsX21vcmU6CiAJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JCisKIAlBUkVHID0gQ1NSMDsKIAljc3IwID0gRFJFRzsKIApAQCAtNjgwLDIyICs2ODAsMjIgQEAKIAogLy8JCWlmKGxhbmNlX2RlYnVnID49IDMpIHsKIC8vCQkJaW50IGk7Ci0vLwkJCQorLy8KIC8vCQkJcHJpbnRrKCIlczogdHggaW50XG4iLCBkZXYtPm5hbWUpOwotLy8JCQkKKy8vCiAvLwkJCWZvcihpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKQogLy8JCQkJcHJpbnRrKCJyaW5nICVkIGZsYWc9JTA0eFxuIiwgaSwKIC8vCQkJCSAgICAgICBNRU0tPnR4X2hlYWRbaV0uZmxhZyk7CiAvLwkJfQotCQkKKwogCQl3aGlsZSggb2xkX3R4ICE9IGxwLT5uZXdfdHgpIHsKLQkJCXN0cnVjdCBsYW5jZV90eF9oZWFkICpoZWFkID0gJihNRU0tPnR4X2hlYWRbb2xkX3R4XSk7IAotCQkJCisJCQlzdHJ1Y3QgbGFuY2VfdHhfaGVhZCAqaGVhZCA9ICYoTUVNLT50eF9oZWFkW29sZF90eF0pOworCiAJCQlEUFJJTlRLKDMsICgib24gdHhfcmluZyAlZFxuIiwgb2xkX3R4KSk7CiAKIAkJCWlmIChoZWFkLT5mbGFnICYgVE1EMV9PV05fQ0hJUCkKIAkJCQlicmVhazsgLyogSXQgc3RpbGwgaGFzbid0IGJlZW4gVHhlZCAqLwotCQkJCQorCiAJCQlpZiAoaGVhZC0+ZmxhZyAmIFRNRDFfRVJSKSB7CiAJCQkJaW50IHN0YXR1cyA9IGhlYWQtPm1pc2M7CiAJCQkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwpAQCAtNzA1LDcgKzcwNSw3IEBACiAJCQkJaWYgKHN0YXR1cyAmIChUTUQzX1VGTE8gfCBUTUQzX0JVRkYpKSB7CiAJCQkJCWxwLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwogCQkJCQlwcmludGsoIiVzOiBUeCBGSUZPIGVycm9yXG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lKTsgCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJCQlSRUdBKENTUjApID0gQ1NSMF9TVE9QOwogCQkJCQlSRUdBKENTUjMpID0gQ1NSM19CU1dQOwogCQkJCQlsYW5jZV9pbml0X3JpbmcoZGV2KTsKQEAgLTcxMywxMSArNzEzLDExIEBACiAJCQkJCXJldHVybiBJUlFfSEFORExFRDsKIAkJCQl9CiAJCQl9IGVsc2UgaWYoaGVhZC0+ZmxhZyAmIChUTUQxX0VOUCB8IFRNRDFfU1RQKSkgewotCQkJCQorCiAJCQkJaGVhZC0+ZmxhZyAmPSB+KFRNRDFfRU5QIHwgVE1EMV9TVFApOwogCQkJCWlmKGhlYWQtPmZsYWcgJiAoVE1EMV9PTkUgfCBUTUQxX01PUkUpKQogCQkJCQlscC0+c3RhdHMuY29sbGlzaW9ucysrOwotCQkJCQorCiAJCQkJbHAtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQlEUFJJTlRLKDMsICgiY2xlYXJlZCB0eCByaW5nICVkXG4iLCBvbGRfdHgpKTsKIAkJCX0KQEAgLTczNiw3ICs3MzYsNyBAQAogCiAJaWYgKGNzcjAgJiBDU1IwX1JJTlQpCQkJLyogUnggaW50ZXJydXB0ICovCiAJCWxhbmNlX3J4KCBkZXYgKTsKLQkKKwogCS8qIExvZyBtaXNjIGVycm9ycy4gKi8KIAlpZiAoY3NyMCAmIENTUjBfQkFCTCkgbHAtPnN0YXRzLnR4X2Vycm9ycysrOyAvKiBUeCBiYWJibGUuICovCiAJaWYgKGNzcjAgJiBDU1IwX01JU1MpIGxwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogTWlzc2VkIGEgUnggZnJhbWUuICovCkBAIC03NzgsMTAgKzc3OCwxMCBAQAogCXdoaWxlKCAoTUVNLT5yeF9oZWFkW2VudHJ5XS5mbGFnICYgUk1EMV9PV04pID09IFJNRDFfT1dOX0hPU1QgKSB7CiAJCXN0cnVjdCBsYW5jZV9yeF9oZWFkICpoZWFkID0gJihNRU0tPnJ4X2hlYWRbZW50cnldKTsKIAkJaW50IHN0YXR1cyA9IGhlYWQtPmZsYWc7Ci0JCQorCiAJCWlmIChzdGF0dXMgIT0gKFJNRDFfRU5QfFJNRDFfU1RQKSkgeyAgLyogVGhlcmUgd2FzIGFuIGVycm9yLiAqLwogCQkJLyogVGhlcmUgaXMgYSB0cmlja3kgZXJyb3Igbm90ZWQgYnkgSm9obiBNdXJwaHksCi0JCQkgICA8bXVyZkBwZXJmdGVjaC5jb20+IHRvIFJ1c3MgTmVsc29uOiBFdmVuIHdpdGggCisJCQkgICA8bXVyZkBwZXJmdGVjaC5jb20+IHRvIFJ1c3MgTmVsc29uOiBFdmVuIHdpdGgKIAkJCSAgIGZ1bGwtc2l6ZWQgYnVmZmVycyBpdCdzIHBvc3NpYmxlIGZvciBhIGphYmJlciBwYWNrZXQgdG8gdXNlIHR3bwogCQkJICAgYnVmZmVycywgd2l0aCBvbmx5IHRoZSBsYXN0IGNvcnJlY3RseSBub3RpbmcgdGhlIGVycm9yLiAqLwogCQkJaWYgKHN0YXR1cyAmIFJNRDFfRU5QKQkvKiBPbmx5IGNvdW50IGEgZ2VuZXJhbCBlcnJvciBhdCB0aGUgKi8KQEAgLTgwNiw3ICs4MDYsNyBAQAogCQkJCWlmIChza2IgPT0gTlVMTCkgewogCQkJCQlEUFJJTlRLKCAxLCAoICIlczogTWVtb3J5IHNxdWVlemUsIGRlZmVycmluZyBwYWNrZXQuXG4iLAogCQkJCQkJICAgICAgZGV2LT5uYW1lICkpOwotCQkJCQkKKwogCQkJCQlscC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCQloZWFkLT5tc2dfbGVuZ3RoID0gMDsKIAkJCQkJaGVhZC0+ZmxhZyB8PSBSTUQxX09XTl9DSElQOwpAQCAtODMzLDcgKzgzMyw3IEBACiAJCQkJaWYgKGxhbmNlX2RlYnVnID49IDMpIHsKIAkJCQkJdV9jaGFyICpkYXRhID0gUEtUQlVGX0FERFIoaGVhZCk7CiAJCQkJCXByaW50ayggIiVzOiBSWCBwa3QgJWQgdHlwZSAweCUwNHggbGVuICVkXG4gIiwgZGV2LT5uYW1lLCBlbnRyeSwgKCh1X3Nob3J0ICopZGF0YSlbNl0sIHBrdF9sZW4pOwotCQkJCX0JCQkJCisJCQkJfQogCiAKIAkJCQlza2ItPmRldiA9IGRldjsKQEAgLTkxNCw3ICs5MTQsNyBAQAogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBMb2cgYW55IG5ldCB0YXBzLiAqLwotCQlEUFJJTlRLKCAxLCAoICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lICkpOworCQlEUFJJTlRLKCAzLCAoICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lICkpOwogCQlSRUdBKCBDU1IxNSApID0gMHg4MDAwOyAvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwogCX0gZWxzZSB7CiAJCXNob3J0IG11bHRpY2FzdF90YWJsZVs0XTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCBkNDY4OTE1Li45ZTRiZTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC0xMDcxLDcgKzEwNzEsNyBAQAogCXJldHVybiAoYnAtPnN3X2Jtc3IgJiBCTVNSX0xTVEFUVVMpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGJpZ21hY19ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgYmlnbWFjX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBiaWdtYWNfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGJpZ21hY19nZXRfbGluaywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwppbmRleCBhYzE3Mzc3Li42YjhmNGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKQEAgLTE3LDEyICsxNywxNCBAQAogCVN1cHBvcnQgYW5kIHVwZGF0ZXMgYXZhaWxhYmxlIGF0CiAJaHR0cDovL3d3dy5zY3lsZC5jb20vbmV0d29yay9zdW5kYW5jZS5odG1sCiAJW2xpbmsgbm8gbG9uZ2VyIHByb3ZpZGVzIHVzZWZ1bCBpbmZvIC1qZ2FyemlrXQorCUFyY2hpdmVzIG9mIHRoZSBtYWlsaW5nIGxpc3QgYXJlIHN0aWxsIGF2YWlsYWJsZSBhdAorCWh0dHA6Ly93d3cuYmVvd3VsZi5vcmcvcGlwZXJtYWlsL25ldGRyaXZlcnMvCiAKICovCiAKICNkZWZpbmUgRFJWX05BTUUJInN1bmRhbmNlIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4xIgotI2RlZmluZSBEUlZfUkVMREFURQkiMjctSnVuLTIwMDYiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjIiCisjZGVmaW5lIERSVl9SRUxEQVRFCSIxMS1TZXAtMjAwNiIKIAogCiAvKiBUaGUgdXNlci1jb25maWd1cmFibGUgdmFsdWVzLgpAQCAtMTA3LDcgKzEwOSw3IEBACiAjZW5kaWYKIAogLyogVGhlc2UgaWRlbnRpZnkgdGhlIGRyaXZlciBiYXNlIHZlcnNpb24gYW5kIG1heSBub3QgYmUgcmVtb3ZlZC4gKi8KLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KK3N0YXRpYyBjaGFyIHZlcnNpb25bXSA9CiBLRVJOX0lORk8gRFJWX05BTUUgIi5jOnYiIERSVl9WRVJTSU9OICIgIiBEUlZfUkVMREFURSAiICBXcml0dGVuIGJ5IERvbmFsZCBCZWNrZXJcbiIKIEtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL3N1bmRhbmNlLmh0bWxcbiI7CiAKQEAgLTQyOSw3ICs0MzEsNyBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG5ldGRldl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyBpbnQgIG5ldGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzOwogCiBzdGF0aWMgdm9pZCBzdW5kYW5jZV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIHJlc2V0X2NtZCkKIHsKQEAgLTY0Niw3ICs2NDgsNyBAQAogCS8qIFJlc2V0IHRoZSBjaGlwIHRvIGVyYXNlIHByZXZpb3VzIG1pc2NvbmZpZ3VyYXRpb24uICovCiAJaWYgKG5ldGlmX21zZ19odyhucCkpCiAJCXByaW50aygiQVNJQyBDb250cm9sIGlzICV4LlxuIiwgaW9yZWFkMzIoaW9hZGRyICsgQVNJQ0N0cmwpKTsKLQlpb3dyaXRlMTYoMHgwMGZmLCBpb2FkZHIgKyBBU0lDQ3RybCArIDIpOworCXN1bmRhbmNlX3Jlc2V0KGRldiwgMHgwMGZmIDw8IDE2KTsKIAlpZiAobmV0aWZfbXNnX2h3KG5wKSkKIAkJcHJpbnRrKCJBU0lDIENvbnRyb2wgaXMgbm93ICV4LlxuIiwgaW9yZWFkMzIoaW9hZGRyICsgQVNJQ0N0cmwpKTsKIApAQCAtOTA1LDcgKzkwNyw3IEBACiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBucC0+YmFzZTsKIAl1bnNpZ25lZCBsb25nIGZsYWc7Ci0JCisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJdGFza2xldF9kaXNhYmxlKCZucC0+dHhfdGFza2xldCk7CiAJaW93cml0ZTE2KDAsIGlvYWRkciArIEludHJFbmFibGUpOwpAQCAtOTIyLDEzICs5MjQsMTMgQEAKIAkJCQlsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tpXS5uZXh0X2Rlc2MpLAogCQkJCWxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2ldLnN0YXR1cyksCiAJCQkJKGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2ldLnN0YXR1cykgPj4gMikgJiAweGZmLAotCQkJCWxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2ldLmZyYWdbMF0uYWRkciksIAorCQkJCWxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2ldLmZyYWdbMF0uYWRkciksCiAJCQkJbGUzMl90b19jcHUobnAtPnR4X3JpbmdbaV0uZnJhZ1swXS5sZW5ndGgpKTsKIAkJfQotCQlwcmludGsoS0VSTl9ERUJVRyAiVHhMaXN0UHRyPSUwOHggbmV0aWZfcXVldWVfc3RvcHBlZD0lZFxuIiwgCi0JCQlpb3JlYWQzMihucC0+YmFzZSArIFR4TGlzdFB0ciksIAorCQlwcmludGsoS0VSTl9ERUJVRyAiVHhMaXN0UHRyPSUwOHggbmV0aWZfcXVldWVfc3RvcHBlZD0lZFxuIiwKKwkJCWlvcmVhZDMyKG5wLT5iYXNlICsgVHhMaXN0UHRyKSwKIAkJCW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJjdXJfdHg9JWQoJTAyeCkgZGlydHlfdHg9JWQoJTAyeClcbiIsIAorCQlwcmludGsoS0VSTl9ERUJVRyAiY3VyX3R4PSVkKCUwMngpIGRpcnR5X3R4PSVkKCUwMngpXG4iLAogCQkJbnAtPmN1cl90eCwgbnAtPmN1cl90eCAlIFRYX1JJTkdfU0laRSwKIAkJCW5wLT5kaXJ0eV90eCwgbnAtPmRpcnR5X3R4ICUgVFhfUklOR19TSVpFKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgImN1cl9yeD0lZCBkaXJ0eV9yeD0lZFxuIiwgbnAtPmN1cl9yeCwgbnAtPmRpcnR5X3J4KTsKQEAgLTEwMDAsOSArMTAwMiw5IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgaGVhZCA9IG5wLT5jdXJfdGFzayAlIFRYX1JJTkdfU0laRTsKLQlzdHJ1Y3QgbmV0ZGV2X2Rlc2MgKnR4ZGVzYyA9IAorCXN0cnVjdCBuZXRkZXZfZGVzYyAqdHhkZXNjID0KIAkJJm5wLT50eF9yaW5nWyhucC0+Y3VyX3R4IC0gMSkgJSBUWF9SSU5HX1NJWkVdOwotCQorCiAJLyogQ2hhaW4gdGhlIG5leHQgcG9pbnRlciAqLwogCWZvciAoOyBucC0+Y3VyX3R4IC0gbnAtPmN1cl90YXNrID4gMDsgbnAtPmN1cl90YXNrKyspIHsKIAkJaW50IGVudHJ5ID0gbnAtPmN1cl90YXNrICUgVFhfUklOR19TSVpFOwpAQCAtMTA3MiwyMSArMTA3NCwxNiBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGk7CiAJaW50IGlycSA9IGluX2ludGVycnVwdCgpOwotCQorCiAJLyogUmVzZXQgdHggbG9naWMsIFR4TGlzdFB0ciB3aWxsIGJlIGNsZWFuZWQgKi8KIAlpb3dyaXRlMTYgKFR4RGlzYWJsZSwgaW9hZGRyICsgTUFDQ3RybDEpOwotCWlvd3JpdGUxNiAoVHhSZXNldCB8IERNQVJlc2V0IHwgRklGT1Jlc2V0IHwgTmV0d29ya1Jlc2V0LAotCQkJaW9hZGRyICsgQVNJQ0N0cmwgKyAyKTsKLQlmb3IgKGk9NTA7IGkgPiAwOyBpLS0pIHsKLQkJaWYgKChpb3JlYWQxNihpb2FkZHIgKyBBU0lDQ3RybCArIDIpICYgUmVzZXRCdXN5KSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1kZWxheSgxKTsKLQl9CisJc3VuZGFuY2VfcmVzZXQoZGV2LCAoTmV0d29ya1Jlc2V0fEZJRk9SZXNldHxETUFSZXNldHxUeFJlc2V0KSA8PCAxNik7CisKIAkvKiBmcmVlIGFsbCB0eCBza2J1ZmYgKi8KIAlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKIAkJc2tiID0gbnAtPnR4X3NrYnVmZltpXTsKIAkJaWYgKHNrYikgewotCQkJcGNpX3VubWFwX3NpbmdsZShucC0+cGNpX2RldiwgCisJCQlwY2lfdW5tYXBfc2luZ2xlKG5wLT5wY2lfZGV2LAogCQkJCW5wLT50eF9yaW5nW2ldLmZyYWdbMF0uYWRkciwgc2tiLT5sZW4sCiAJCQkJUENJX0RNQV9UT0RFVklDRSk7CiAJCQlpZiAoaXJxKQpAQCAtMTEwMyw3ICsxMTAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVGhlIGludGVycnVwdCBoYW5kbGVyIGNsZWFucyB1cCBhZnRlciB0aGUgVHggdGhyZWFkLCAKKy8qIFRoZSBpbnRlcnJ1cHQgaGFuZGxlciBjbGVhbnMgdXAgYWZ0ZXIgdGhlIFR4IHRocmVhZCwKICAgIGFuZCBzY2hlZHVsZSBhIFJ4IHRocmVhZCB3b3JrICovCiBzdGF0aWMgaXJxcmV0dXJuX3QgaW50cl9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSwgc3RydWN0IHB0X3JlZ3MgKnJncykKIHsKQEAgLTExODQsOCArMTE4MSw4IEBACiAJCX0gZWxzZSAJewogCQkJaHdfZnJhbWVfaWQgPSBpb3JlYWQ4KGlvYWRkciArIFR4RnJhbWVJZCk7CiAJCX0KLQkJCQotCQlpZiAobnAtPnBjaV9yZXZfaWQgPj0gMHgxNCkgewkKKworCQlpZiAobnAtPnBjaV9yZXZfaWQgPj0gMHgxNCkgewogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CiAJCQlmb3IgKDsgbnAtPmN1cl90eCAtIG5wLT5kaXJ0eV90eCA+IDA7IG5wLT5kaXJ0eV90eCsrKSB7CiAJCQkJaW50IGVudHJ5ID0gbnAtPmRpcnR5X3R4ICUgVFhfUklOR19TSVpFOwpAQCAtMTE5Nyw3ICsxMTk0LDcgQEAKIAkJCQkJIShsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tlbnRyeV0uc3RhdHVzKQogCQkJCQkmIDB4MDAwMTAwMDApKQogCQkJCQkJYnJlYWs7Ci0JCQkJaWYgKHN3X2ZyYW1lX2lkID09IChod19mcmFtZV9pZCArIDEpICUgCisJCQkJaWYgKHN3X2ZyYW1lX2lkID09IChod19mcmFtZV9pZCArIDEpICUKIAkJCQkJVFhfUklOR19TSVpFKQogCQkJCQkJYnJlYWs7CiAJCQkJc2tiID0gbnAtPnR4X3NrYnVmZltlbnRyeV07CkBAIC0xMjE2LDcgKzEyMTMsNyBAQAogCQkJZm9yICg7IG5wLT5jdXJfdHggLSBucC0+ZGlydHlfdHggPiAwOyBucC0+ZGlydHlfdHgrKykgewogCQkJCWludCBlbnRyeSA9IG5wLT5kaXJ0eV90eCAlIFRYX1JJTkdfU0laRTsKIAkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJCWlmICghKGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMpIAorCQkJCWlmICghKGxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMpCiAJCQkJCQkJJiAweDAwMDEwMDAwKSkKIAkJCQkJYnJlYWs7CiAJCQkJc2tiID0gbnAtPnR4X3NrYnVmZltlbnRyeV07CkBAIC0xMjMxLDcgKzEyMjgsNyBAQAogCQkJfQogCQkJc3Bpbl91bmxvY2soJm5wLT5sb2NrKTsKIAkJfQotCQkKKwogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpICYmCiAJCQlucC0+Y3VyX3R4IC0gbnAtPmRpcnR5X3R4IDwgVFhfUVVFVUVfTEVOIC0gNCkgewogCQkJLyogVGhlIHJpbmcgaXMgbm8gbG9uZ2VyIGZ1bGwsIGNsZWFyIGJ1c3kgZmxhZy4gKi8KQEAgLTE0NjcsOCArMTQ2NCw2IEBACiAJaW50IGk7CiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRBbGwgfCBBY2NlcHRNeVBoeXM7CiAJfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpCkBAIC0xNTc0LDcgKzE1NjksNyBAQAogCW5wLT5tc2dfZW5hYmxlID0gdmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGV0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wcyA9IHsKIAkuYmVnaW4gPSBjaGVja19pZl9ydW5uaW5nLAogCS5nZXRfZHJ2aW5mbyA9IGdldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MgPSBnZXRfc2V0dGluZ3MsCkBAIC0xNjAzLDE4ICsxNTk4LDE4IEBACiAJCWNhc2UgU0lPQ0RFVlBSSVZBVEU6CiAJCWZvciAoaT0wOyBpPFRYX1JJTkdfU0laRTsgaSsrKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAlMDhsbHggJTA4eCAlMDh4KCUwMngpICUwOHggJTA4eFxuIiwgaSwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKShucC0+dHhfcmluZ19kbWEgKyBpKnNpemVvZigqbnAtPnR4X3JpbmcpKSwJCisJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykobnAtPnR4X3JpbmdfZG1hICsgaSpzaXplb2YoKm5wLT50eF9yaW5nKSksCiAJCQkJbGUzMl90b19jcHUobnAtPnR4X3JpbmdbaV0ubmV4dF9kZXNjKSwKIAkJCQlsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tpXS5zdGF0dXMpLAotCQkJCShsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tpXS5zdGF0dXMpID4+IDIpIAorCQkJCShsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tpXS5zdGF0dXMpID4+IDIpCiAJCQkJCSYgMHhmZiwKLQkJCQlsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tpXS5mcmFnWzBdLmFkZHIpLCAKKwkJCQlsZTMyX3RvX2NwdShucC0+dHhfcmluZ1tpXS5mcmFnWzBdLmFkZHIpLAogCQkJCWxlMzJfdG9fY3B1KG5wLT50eF9yaW5nW2ldLmZyYWdbMF0ubGVuZ3RoKSk7CiAJCX0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIlR4TGlzdFB0cj0lMDh4IG5ldGlmX3F1ZXVlX3N0b3BwZWQ9JWRcbiIsIAotCQkJaW9yZWFkMzIobnAtPmJhc2UgKyBUeExpc3RQdHIpLCAKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlR4TGlzdFB0cj0lMDh4IG5ldGlmX3F1ZXVlX3N0b3BwZWQ9JWRcbiIsCisJCQlpb3JlYWQzMihucC0+YmFzZSArIFR4TGlzdFB0ciksCiAJCQluZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiY3VyX3R4PSVkKCUwMngpIGRpcnR5X3R4PSVkKCUwMngpXG4iLCAKKwkJcHJpbnRrKEtFUk5fREVCVUcgImN1cl90eD0lZCglMDJ4KSBkaXJ0eV90eD0lZCglMDJ4KVxuIiwKIAkJCW5wLT5jdXJfdHgsIG5wLT5jdXJfdHggJSBUWF9SSU5HX1NJWkUsCiAJCQlucC0+ZGlydHlfdHgsIG5wLT5kaXJ0eV90eCAlIFRYX1JJTkdfU0laRSk7CiAJCXByaW50ayhLRVJOX0RFQlVHICJjdXJfcng9JWQgZGlydHlfcng9JWRcbiIsIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CkBAIC0xNjIyLDcgKzE2MTcsNyBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiVHhTdGF0dXM9JTA0eFxuIiwgaW9yZWFkMTYoaW9hZGRyICsgVHhTdGF0dXMpKTsKIAkJCXJldHVybiAwOwogCX0KLQkJCQkKKwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMTczNiw3ICsxNzMxLDcgQEAKICNpZmRlZiBNT0RVTEUKIAlwcmludGsodmVyc2lvbik7CiAjZW5kaWYKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZzdW5kYW5jZV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzdW5kYW5jZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3VuZGFuY2VfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBiNzBiYmQ3Li5lMDZjNTlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMiwyMSArMiwyMSBAQAogICogc3VuZ2VtLmM6IFN1biBHRU0gZXRoZXJuZXQgZHJpdmVyLgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCi0gKiAKKyAqCiAgKiBTdXBwb3J0IGZvciBBcHBsZSBHTUFDIGFuZCBhc3NvcnRlZCBQSFlzLCBXT0wsIFBvd2VyIE1hbmFnZW1lbnQKICAqIChDKSAyMDAxLDIwMDIsMjAwMyBCZW5qYW1pbiBIZXJyZW5zY21pZHQgKGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZykKICAqIChDKSAyMDA0LDIwMDUgQmVuamFtaW4gSGVycmVuc2NtaWR0LCBJQk0gQ29ycC4KICAqCiAgKiBOQVBJIGFuZCBORVRQT0xMIHN1cHBvcnQKICAqIChDKSAyMDA0IGJ5IEVyaWMgTGVtb2luZSAoZXJpYy5sZW1vaW5lQGdtYWlsLmNvbSkKLSAqIAotICogVE9ETzogCisgKgorICogVE9ETzoKICAqICAtIE5vdyB0aGF0IHRoZSBkcml2ZXIgd2FzIHNpZ25pZmljYW50bHkgc2ltcGxpZmllZCwgSSBuZWVkIHRvIHJld29yawogICogICAgdGhlIGxvY2tpbmcuIEknbSBzdXJlIHdlIGRvbid0IG5lZWQgXzJfIHNwaW5sb2NrcywgYW5kIHdlIHByb2JhYmx5CiAgKiAgICBjYW4gYXZvaWQgdGFraW5nIG1vc3Qgb2YgdGhlbSBmb3Igc28gbG9uZyBwZXJpb2Qgb2YgdGltZSAoYW5kIHNjaGVkdWxlCiAgKiAgICBpbnN0ZWFkKS4gVGhlIG1haW4gaXNzdWVzIGF0IHRoaXMgcG9pbnQgYXJlIGNhdXNlZCBieSB0aGUgbmV0ZGV2IGxheWVyCiAgKiAgICB0aG91Z2g6Ci0gKiAgICAKKyAqCiAgKiAgICBnZW1fY2hhbmdlX210dSgpIGFuZCBnZW1fc2V0X211bHRpY2FzdCgpIGFyZSBjYWxsZWQgd2l0aCBhIHJlYWRfbG9jaygpCiAgKiAgICBoZWxwIGJ5IG5ldC9jb3JlL2Rldi5jLCB0aHVzIHRoZXkgY2FuJ3Qgc2NoZWR1bGUuIFRoYXQgbWVhbnMgdGhleSBjYW4ndAogICogICAgY2FsbCBuZXRpZl9wb2xsX2Rpc2FibGUoKSBuZWl0aGVyLCB0aHVzIGZvcmNlIGdlbV9wb2xsKCkgdG8ga2VlcCBhIHNwaW5sb2NrCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkvKiBUaGVzZSBtb2RlbHMgb25seSBkaWZmZXIgZnJvbSB0aGUgb3JpZ2luYWwgR0VNIGluCiAJICogdGhhdCB0aGVpciB0eC9yeCBmaWZvcyBhcmUgb2YgYSBkaWZmZXJlbnQgc2l6ZSBhbmQKIAkgKiB0aGV5IG9ubHkgc3VwcG9ydCAxMC8xMDAgc3BlZWRzLiAtRGF2ZU0KLQkgKiAKKwkgKgogCSAqIEFwcGxlJ3MgR01BQyBkb2VzIHN1cHBvcnQgZ2lnYWJpdCBvbiBtYWNoaW5lcyB3aXRoCiAJICogdGhlIEJDTTU0eHggUEhZcy4gLUJlbkgKIAkgKi8KQEAgLTg4NSw3ICs4ODUsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKgotCSAqIE5BUEkgbG9ja2luZyBuaWdodG1hcmU6IFNlZSBjb21tZW50IGF0IGhlYWQgb2YgZHJpdmVyIAorCSAqIE5BUEkgbG9ja2luZyBuaWdodG1hcmU6IFNlZSBjb21tZW50IGF0IGhlYWQgb2YgZHJpdmVyCiAJICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTkwNSw4ICs5MDUsOCBAQAogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKLQkJLyogUnVuIFJYIHRocmVhZC4gV2UgZG9uJ3QgdXNlIGFueSBsb2NraW5nIGhlcmUsIAotCQkgKiBjb2RlIHdpbGxpbmcgdG8gZG8gYmFkIHRoaW5ncyAtIGxpa2UgY2xlYW5pbmcgdGhlIAorCQkvKiBSdW4gUlggdGhyZWFkLiBXZSBkb24ndCB1c2UgYW55IGxvY2tpbmcgaGVyZSwKKwkJICogY29kZSB3aWxsaW5nIHRvIGRvIGJhZCB0aGluZ3MgLSBsaWtlIGNsZWFuaW5nIHRoZQogCQkgKiByeCByaW5nIC0gbXVzdCBjYWxsIG5ldGlmX3BvbGxfZGlzYWJsZSgpLCB3aGljaAogCQkgKiBzY2hlZHVsZV90aW1lb3V0KCkncyBpZiBwb2xsaW5nIGlzIGFscmVhZHkgZGlzYWJsZWQuCiAJCSAqLwpAQCAtOTIxLDcgKzkyMSw3IEBACiAJCQlyZXR1cm4gMTsKIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKLQkJCisKIAkJZ3AtPnN0YXR1cyA9IHJlYWRsKGdwLT5yZWdzICsgR1JFR19TVEFUKTsKIAl9IHdoaWxlIChncC0+c3RhdHVzICYgR1JFR19TVEFUX05BUEkpOwogCkBAIC05NDYsNyArOTQ2LDcgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7Ci0JCisKIAlpZiAobmV0aWZfcnhfc2NoZWR1bGVfcHJlcChkZXYpKSB7CiAJCXUzMiBnZW1fc3RhdHVzID0gcmVhZGwoZ3AtPnJlZ3MgKyBHUkVHX1NUQVQpOwogCkBAIC05NjEsOSArOTYxLDkgQEAKIAl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncC0+bG9jaywgZmxhZ3MpOwotICAKKwogCS8qIElmIHBvbGxpbmcgd2FzIGRpc2FibGVkIGF0IHRoZSB0aW1lIHdlIHJlY2VpdmVkIHRoYXQKLQkgKiBpbnRlcnJ1cHQsIHdlIG1heSByZXR1cm4gSVJRX0hBTkRMRUQgaGVyZSB3aGlsZSB3ZSAKKwkgKiBpbnRlcnJ1cHQsIHdlIG1heSByZXR1cm4gSVJRX0hBTkRMRUQgaGVyZSB3aGlsZSB3ZQogCSAqIHNob3VsZCByZXR1cm4gSVJRX05PTkUuIE5vIGJpZyBkZWFsLi4uCiAJICovCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTExMiw3ICsxMTEyLDcgQEAKIAkJCXRoaXNfY3RybCA9IGN0cmw7CiAJCQlpZiAoZnJhZyA9PSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzIC0gMSkKIAkJCQl0aGlzX2N0cmwgfD0gVFhEQ1RSTF9FT0Y7Ci0JCQkKKwogCQkJdHhkID0gJmdwLT5pbml0X2Jsb2NrLT50eGRbZW50cnldOwogCQkJdHhkLT5idWZmZXIgPSBjcHVfdG9fbGU2NChtYXBwaW5nKTsKIAkJCXdtYigpOwpAQCAtMTE3OCw3ICsxMTc4LDcgQEAKIHN0YXRpYyB2b2lkIGdlbV9zdGFydF9kbWEoc3RydWN0IGdlbSAqZ3ApCiB7CiAJdTMyIHZhbDsKLQkKKwogCS8qIFdlIGFyZSByZWFkeSB0byByb2NrLCB0dXJuIGV2ZXJ5dGhpbmcgb24uICovCiAJdmFsID0gcmVhZGwoZ3AtPnJlZ3MgKyBUWERNQV9DRkcpOwogCXdyaXRlbCh2YWwgfCBUWERNQV9DRkdfRU5BQkxFLCBncC0+cmVncyArIFRYRE1BX0NGRyk7CkBAIC0xMjQ2LDcgKzEyNDYsNyBAQAogCWF1dG9uZWcgPSBncC0+d2FudF9hdXRvbmVnOwogCXNwZWVkID0gZ3AtPnBoeV9taWkuc3BlZWQ7CiAJZHVwbGV4ID0gZ3AtPnBoeV9taWkuZHVwbGV4OwotCQorCiAJLyogU2V0dXAgbGluayBwYXJhbWV0ZXJzICovCiAJaWYgKCFlcCkKIAkJZ290byBzdGFydF9hbmVnOwpAQCAtMTI3Niw3ICsxMjc2LDcgQEAKIAkgICAgCWR1cGxleCA9IERVUExFWF9IQUxGOwogCWlmIChzcGVlZCA9PSAwKQogCQlzcGVlZCA9IFNQRUVEXzEwOwotCQorCiAJLyogSWYgd2UgYXJlIGFzbGVlcCwgd2UgZG9uJ3QgdHJ5IHRvIGFjdHVhbGx5IHNldHVwIHRoZSBQSFksIHdlCiAJICoganVzdCBzdG9yZSB0aGUgc2V0dGluZ3MKIAkgKi8KQEAgLTEzNDUsNyArMTM0NSw3IEBACiAJCXZhbCB8PSAoTUFDX1RYQ0ZHX0lDUyB8IE1BQ19UWENGR19JQ09MTCk7CiAJfSBlbHNlIHsKIAkJLyogTUFDX1RYQ0ZHX05CTyBtdXN0IGJlIHplcm8uICovCi0JfQkKKwl9CiAJd3JpdGVsKHZhbCwgZ3AtPnJlZ3MgKyBNQUNfVFhDRkcpOwogCiAJdmFsID0gKE1BQ19YSUZDRkdfT0UgfCBNQUNfWElGQ0ZHX0xMRUQpOwpAQCAtMTQ3MCw3ICsxNDcwLDcgQEAKIHsKIAlzdHJ1Y3QgZ2VtICpncCA9IChzdHJ1Y3QgZ2VtICopIGRhdGE7CiAJaW50IHJlc3RhcnRfYW5lZyA9IDA7Ci0JCQorCiAJaWYgKGdwLT5hc2xlZXApCiAJCXJldHVybjsKIApAQCAtMTQ4Myw3ICsxNDgzLDcgQEAKIAkgKi8KIAlpZiAoZ3AtPnJlc2V0X3Rhc2tfcGVuZGluZykKIAkJZ290byByZXN0YXJ0OwotCSAgICAJCisKIAlpZiAoZ3AtPnBoeV90eXBlID09IHBoeV9zZXJpYWxpbmsgfHwKIAkgICAgZ3AtPnBoeV90eXBlID09IHBoeV9zZXJkZXMpIHsKIAkJdTMyIHZhbCA9IHJlYWRsKGdwLT5yZWdzICsgUENTX01JSVNUQVQpOwpAQCAtMTY2MCw3ICsxNjYwLDcgQEAKIAltaWZjZmcgPSByZWFkbChncC0+cmVncyArIE1JRl9DRkcpOwogCW1pZmNmZyAmPSB+TUlGX0NGR19CQk1PREU7CiAJd3JpdGVsKG1pZmNmZywgZ3AtPnJlZ3MgKyBNSUZfQ0ZHKTsKLQkKKwogCWlmIChncC0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVBQTEUpIHsKIAkJaW50IGk7CiAKQEAgLTE4MjMsNyArMTgyMyw3IEBACiB7CiAJdTMyIHJ4Y2ZnID0gMDsKIAlpbnQgaTsKLQkKKwogCWlmICgoZ3AtPmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CiAJICAgIChncC0+ZGV2LT5tY19jb3VudCA+IDI1NikpIHsKIAkgICAgCWZvciAoaT0wOyBpPDE2OyBpKyspCkBAIC0xOTg1LDcgKzE5ODUsNyBAQAogCQljZmcgPSAoKDIgPDwgMSkgJiBHUkVHX0NGR19UWERNQUxJTSk7CiAJCWNmZyB8PSAoKDggPDwgNikgJiBHUkVHX0NGR19SWERNQUxJTSk7CiAJCXdyaXRlbChjZmcsIGdwLT5yZWdzICsgR1JFR19DRkcpOwotCX0JCisJfQogfQogCiBzdGF0aWMgaW50IGdlbV9jaGVja19pbnZhcmlhbnRzKHN0cnVjdCBnZW0gKmdwKQpAQCAtMjAzOSw3ICsyMDM5LDcgQEAKIAkvKiBEZXRlcm1pbmUgaW5pdGlhbCBQSFkgaW50ZXJmYWNlIHR5cGUgZ3Vlc3MuICBNRElPMSBpcyB0aGUKIAkgKiBleHRlcm5hbCBQSFkgYW5kIHRodXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIE1ESU8wLgogCSAqLwotCQorCiAJaWYgKG1pZl9jZmcgJiBNSUZfQ0ZHX01ESTEpIHsKIAkJZ3AtPnBoeV90eXBlID0gcGh5X21paV9tZGlvMTsKIAkJbWlmX2NmZyB8PSBNSUZfQ0ZHX1BTRUxFQ1Q7CkBAIC0yMTQxLDcgKzIxNDEsNyBAQAogCiAJCS8qIFNldHVwIHdha2Utb24tbGFuIGZvciBNQUdJQyBwYWNrZXQgKi8KIAkJd3JpdGVsKE1BQ19SWENGR19IRkUgfCBNQUNfUlhDRkdfU0ZDUyB8IE1BQ19SWENGR19FTkFCLAotCQkgICAgICAgZ3AtPnJlZ3MgKyBNQUNfUlhDRkcpOwkKKwkJICAgICAgIGdwLT5yZWdzICsgTUFDX1JYQ0ZHKTsKIAkJd3JpdGVsKChlWzRdIDw8IDgpIHwgZVs1XSwgZ3AtPnJlZ3MgKyBXT0xfTUFUQ0gwKTsKIAkJd3JpdGVsKChlWzJdIDw8IDgpIHwgZVszXSwgZ3AtPnJlZ3MgKyBXT0xfTUFUQ0gxKTsKIAkJd3JpdGVsKChlWzBdIDw8IDgpIHwgZVsxXSwgZ3AtPnJlZ3MgKyBXT0xfTUFUQ0gyKTsKQEAgLTIyMzAsNyArMjIzMCw3IEBACiAJCWdlbV9yZXNldChncCk7CiAJCWdlbV9jbGVhbl9yaW5ncyhncCk7CiAJCWdlbV9wdXRfY2VsbChncCk7Ci0JCQorCiAJCXNwaW5fdW5sb2NrKCZncC0+dHhfbG9jayk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTIzNDMsMTIgKzIzNDMsMTIgQEAKIAogCW11dGV4X2xvY2soJmdwLT5wbV9tdXRleCk7CiAKLQlncC0+b3BlbmVkID0gMDsJCisJZ3AtPm9wZW5lZCA9IDA7CiAJaWYgKCFncC0+YXNsZWVwKQogCQlnZW1fZG9fc3RvcChkZXYsIDApOwogCiAJbXV0ZXhfdW5sb2NrKCZncC0+cG1fbXV0ZXgpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIzNjYsNyArMjM2Niw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHN1c3BlbmRpbmcsIFdha2VPbkxhbiAlc1xuIiwKIAkgICAgICAgZGV2LT5uYW1lLAogCSAgICAgICAoZ3AtPndha2Vfb25fbGFuICYmIGdwLT5vcGVuZWQpID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7Ci0JCisKIAkvKiBLZWVwIHRoZSBjZWxsIGVuYWJsZWQgZHVyaW5nIHRoZSBlbnRpcmUgb3BlcmF0aW9uICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmdwLT5sb2NrLCBmbGFncyk7CiAJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CkBAIC0yNDg2LDcgKzI0ODYsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CiAKIAluZXRpZl9wb2xsX2VuYWJsZShkZXYpOwotCQorCiAJbXV0ZXhfdW5sb2NrKCZncC0+cG1fbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0yNTMzLDcgKzI1MzMsNyBAQAogCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OwogCXUzMiByeGNmZywgcnhjZmdfbmV3OwogCWludCBsaW1pdCA9IDEwMDAwOwotCQorCiAKIAlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7CiAJc3Bpbl9sb2NrKCZncC0+dHhfbG9jayk7CkBAIC0yNTQ5LDcgKzI1NDksNyBAQAogCXJ4Y2ZnX25ldyB8PSBNQUNfUlhDRkdfU0ZDUzsKICNlbmRpZgogCWdwLT5tYWNfcnhfY2ZnID0gcnhjZmdfbmV3OwotCQorCiAJd3JpdGVsKHJ4Y2ZnICYgfk1BQ19SWENGR19FTkFCLCBncC0+cmVncyArIE1BQ19SWENGRyk7CiAJd2hpbGUgKHJlYWRsKGdwLT5yZWdzICsgTUFDX1JYQ0ZHKSAmIE1BQ19SWENGR19FTkFCKSB7CiAJCWlmICghbGltaXQtLSkKQEAgLTI2MTEsMTIgKzI2MTEsMTIgQEAKIHN0YXRpYyB2b2lkIGdlbV9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogewogCXN0cnVjdCBnZW0gKmdwID0gZGV2LT5wcml2OwotICAKKwogCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9OQU1FKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX1ZFUlNJT04pOwogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoZ3AtPnBkZXYpKTsKIH0KLSAgCisKIHN0YXRpYyBpbnQgZ2VtX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgZ2VtICpncCA9IGRldi0+cHJpdjsKQEAgLTI2MzgsNyArMjYzOCw3IEBACiAJCXNwaW5fbG9ja19pcnEoJmdwLT5sb2NrKTsKIAkJY21kLT5hdXRvbmVnID0gZ3AtPndhbnRfYXV0b25lZzsKIAkJY21kLT5zcGVlZCA9IGdwLT5waHlfbWlpLnNwZWVkOwotCQljbWQtPmR1cGxleCA9IGdwLT5waHlfbWlpLmR1cGxleDsJCQkKKwkJY21kLT5kdXBsZXggPSBncC0+cGh5X21paS5kdXBsZXg7CiAJCWNtZC0+YWR2ZXJ0aXNpbmcgPSBncC0+cGh5X21paS5hZHZlcnRpc2luZzsKIAogCQkvKiBJZiB3ZSBzdGFydGVkIHdpdGggYSBmb3JjZWQgbW9kZSwgd2UgZG9uJ3QgaGF2ZSBhIGRlZmF1bHQKQEAgLTI2ODMsNyArMjY4Myw3IEBACiAJICAgICAoY21kLT5kdXBsZXggIT0gRFVQTEVYX0hBTEYgJiYKIAkgICAgICBjbWQtPmR1cGxleCAhPSBEVVBMRVhfRlVMTCkpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkgICAgICAKKwogCS8qIEFwcGx5IHNldHRpbmdzIGFuZCByZXN0YXJ0IGxpbmsgcHJvY2Vzcy4gKi8KIAlzcGluX2xvY2tfaXJxKCZncC0+bG9jayk7CiAJZ2VtX2dldF9jZWxsKGdwKTsKQEAgLTI3MTYsNyArMjcxNiw3IEBACiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CiAJcmV0dXJuIGdwLT5tc2dfZW5hYmxlOwogfQotICAKKwogc3RhdGljIHZvaWQgZ2VtX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IGdlbSAqZ3AgPSBkZXYtPnByaXY7CkBAIC0yNzUzLDcgKzI3NTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGdlbV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZ2VtX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBnZW1fZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCiAJLmdldF9zZXR0aW5ncwkJPSBnZW1fZ2V0X3NldHRpbmdzLApAQCAtMjc3Niw3ICsyNzc2LDcgQEAKIAkgKiB3aXRoIHBvd2VyIG1hbmFnZW1lbnQuCiAJICovCiAJbXV0ZXhfbG9jaygmZ3AtPnBtX211dGV4KTsKLQkJCisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAlnZW1fZ2V0X2NlbGwoZ3ApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwLT5sb2NrLCBmbGFncyk7CkBAIC0yODA4LDEzICsyODA4LDEzIEBACiAJCX0KIAkJYnJlYWs7CiAJfTsKLQkKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZncC0+bG9jaywgZmxhZ3MpOwogCWdlbV9wdXRfY2VsbChncCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3AtPmxvY2ssIGZsYWdzKTsKIAogCW11dGV4X3VubG9jaygmZ3AtPnBtX211dGV4KTsKLQkKKwogCXJldHVybiByYzsKIH0KIApAQCAtMjg5Niw3ICsyODk2LDcgQEAKIAlpZiAodXNlX2lkcHJvbSkKIAkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGlkcHJvbS0+aWRfZXRoYWRkciwgNik7CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykKLQl1bnNpZ25lZCBjaGFyICphZGRyOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmFkZHI7CiAKIAlhZGRyID0gZ2V0X3Byb3BlcnR5KGdwLT5vZl9ub2RlLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKTsKIAlpZiAoYWRkciA9PSBOVUxMKSB7CkBAIC0zMDAwLDcgKzMwMDAsNyBAQAogCQl9CiAJCXBjaV91c2luZ19kYWMgPSAwOwogCX0KLQkKKwogCWdlbXJlZ19iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwogCWdlbXJlZ19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCkBAIC0zMDQ0LDcgKzMwNDQsNyBAQAogCWdwLT5saW5rX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZ3A7CiAKIAlJTklUX1dPUksoJmdwLT5yZXNldF90YXNrLCBnZW1fcmVzZXRfdGFzaywgZ3ApOwotCQorCiAJZ3AtPmxzdGF0ZSA9IGxpbmtfZG93bjsKIAlncC0+dGltZXJfdGlja3MgPSAwOwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CkBAIC0zMTUzLDcgKzMxNTMsNyBAQAogCiAJaWYgKGdwLT5waHlfdHlwZSA9PSBwaHlfbWlpX21kaW8wIHx8CiAgICAgIAkgICAgZ3AtPnBoeV90eXBlID09IHBoeV9taWlfbWRpbzEpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlcyBQSFlcbiIsIGRldi0+bmFtZSwgCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBGb3VuZCAlcyBQSFlcbiIsIGRldi0+bmFtZSwKIAkJCWdwLT5waHlfbWlpLmRlZiA/IGdwLT5waHlfbWlpLmRlZi0+bmFtZSA6ICJubyIpOwogCiAJLyogR0VNIGNhbiBkbyBpdCBhbGwuLi4gKi8KQEAgLTMxOTQsNyArMzE5NCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGdlbV9pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmZ2VtX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmdlbV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VtX2NsZWFudXAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmdlbS5oIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKaW5kZXggODk4NDcyMS4uYTcwMDY3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuZ2VtLmgKKysrIGIvZHJpdmVycy9uZXQvc3VuZ2VtLmgKQEAgLTgxMyw3ICs4MTMsNyBAQAogLyogTUlJIEJDTTU0MDAgQVVYU1RBVFVTIHJlZ2lzdGVyICovCiAjZGVmaW5lIE1JSV9CQ001NDAwX0FVWFNUQVRVUyAgICAgICAgICAgICAgICAgICAweDE5CiAjZGVmaW5lIE1JSV9CQ001NDAwX0FVWFNUQVRVU19MSU5LTU9ERV9NQVNLICAgICAweDA3MDAKLSNkZWZpbmUgTUlJX0JDTTU0MDBfQVVYU1RBVFVTX0xJTktNT0RFX1NISUZUICAgIDggIAorI2RlZmluZSBNSUlfQkNNNTQwMF9BVVhTVEFUVVNfTElOS01PREVfU0hJRlQgICAgOAogCiAvKiBXaGVuIGl0IGNhbiwgR0VNIGludGVybmFsbHkgY2FjaGVzIDQgYWxpZ25lZCBUWCBkZXNjcmlwdG9ycwogICogYXQgYSB0aW1lLCBzbyB0aGF0IGl0IGNhbiB1c2UgZnVsbCBjYWNoZWxpbmUgRE1BIHJlYWRzLgpAQCAtOTg0LDEwICs5ODQsMTAgQEAKIAl1bnNpZ25lZCBpbnQgYXNsZWVwX3dvbCA6IDE7CS8qIHdhcyBhc2xlZXAgd2l0aCBXT0wgZW5hYmxlZCAqLwogCXVuc2lnbmVkIGludCBvcGVuZWQgOiAxOwkvKiBkcml2ZXIgb3BlbmVkLCBwcm90ZWN0ZWQgYnkgcG1fbXV0ZXggKi8KIAl1bnNpZ25lZCBpbnQgcnVubmluZyA6IDE7CS8qIGNoaXAgcnVubmluZywgcHJvdGVjdGVkIGJ5IGxvY2sgKi8KLQkKKwogCS8qIGNlbGwgZW5hYmxlIGNvdW50LCBwcm90ZWN0ZWQgYnkgbG9jayAqLwotCWludAkJCWNlbGxfZW5hYmxlZDsgIAotCQorCWludAkJCWNlbGxfZW5hYmxlZDsKKwogCXN0cnVjdCBtdXRleAkJcG1fbXV0ZXg7CiAKIAl1MzIJCQltc2dfZW5hYmxlOwpAQCAtMTAxNyw3ICsxMDE3LDcgQEAKIAllbnVtIGdlbV9waHlfdHlwZQlwaHlfdHlwZTsKIAlzdHJ1Y3QgbWlpX3BoeQkJcGh5X21paTsKIAlpbnQJCQltaWlfcGh5X2FkZHI7Ci0JCQorCiAJc3RydWN0IGdlbV9pbml0X2Jsb2NrCSppbml0X2Jsb2NrOwogCXN0cnVjdCBza19idWZmCQkqcnhfc2tic1tSWF9SSU5HX1NJWkVdOwogCXN0cnVjdCBza19idWZmCQkqdHhfc2tic1tUWF9SSU5HX1NJWkVdOwpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIAogI2RlZmluZSBmb3VuZF9taWlfcGh5KGdwKSAoKGdwLT5waHlfdHlwZSA9PSBwaHlfbWlpX21kaW8wIHx8IGdwLT5waHlfdHlwZSA9PSBwaHlfbWlpX21kaW8xKSBcCiAJCQkJJiYgZ3AtPnBoeV9taWkuZGVmICYmIGdwLT5waHlfbWlpLmRlZi0+b3BzKQotCQkJCisKICNkZWZpbmUgQUxJR05FRF9SWF9TS0JfQUREUihhZGRyKSBcCiAgICAgICAgICgoKCh1bnNpZ25lZCBsb25nKShhZGRyKSArICg2NFVMIC0gMVVMKSkgJiB+KDY0VUwgLSAxVUwpKSAtICh1bnNpZ25lZCBsb25nKShhZGRyKSkKIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBza19idWZmICpnZW1fYWxsb2Nfc2tiKGludCBzaXplLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5jCmluZGV4IDI3OGM3Y2IuLjQ5ODAwYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmMKQEAgLTEsOCArMSw4IEBACiAvKgogICogUEhZIGRyaXZlcnMgZm9yIHRoZSBzdW5nZW0gZXRoZXJuZXQgZHJpdmVyLgotICogCisgKgogICogVGhpcyBmaWxlIGNvdWxkIGJlIHNoYXJlZCB3aXRoIG90aGVyIGRyaXZlcnMuCi0gKiAKKyAqCiAgKiAoYykgMjAwMiwgQmVuamFtaW4gSGVycmVuc2NtaWR0IChiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmcpCiAgKgogICogVE9ETzoKQEAgLTczLDcgKzczLDcgQEAKIHsKIAl1MTYgdmFsOwogCWludCBsaW1pdCA9IDEwMDAwOwotCQorCiAJdmFsID0gX19waHlfcmVhZChwaHksIHBoeV9pZCwgTUlJX0JNQ1IpOwogCXZhbCAmPSB+KEJNQ1JfSVNPTEFURSB8IEJNQ1JfUERPV04pOwogCXZhbCB8PSBCTUNSX1JFU0VUOwpAQCAtODksNyArODksNyBAQAogCX0KIAlpZiAoKHZhbCAmIEJNQ1JfSVNPTEFURSkgJiYgbGltaXQgPiAwKQogCQlfX3BoeV93cml0ZShwaHksIHBoeV9pZCwgTUlJX0JNQ1IsIHZhbCAmIH5CTUNSX0lTT0xBVEUpOwotCQorCiAJcmV0dXJuIChsaW1pdCA8PSAwKTsKIH0KIApAQCAtMTYwLDE2ICsxNjAsMTYgQEAKIAlkYXRhID0gcGh5X3JlYWQocGh5LCBNSUlfQkNNNTQwMF9BVVhDT05UUk9MKTsKIAlkYXRhIHw9IE1JSV9CQ001NDAwX0FVWENPTlRST0xfUFdSMTBCQVNFVDsKIAlwaHlfd3JpdGUocGh5LCBNSUlfQkNNNTQwMF9BVVhDT05UUk9MLCBkYXRhKTsKLQkKKwogCWRhdGEgPSBwaHlfcmVhZChwaHksIE1JSV9CQ001NDAwX0dCX0NPTlRST0wpOwogCWRhdGEgfD0gTUlJX0JDTTU0MDBfR0JfQ09OVFJPTF9GVUxMRFVQTEVYQ0FQOwogCXBoeV93cml0ZShwaHksIE1JSV9CQ001NDAwX0dCX0NPTlRST0wsIGRhdGEpOwotCQorCiAJdWRlbGF5KDEwMCk7CiAKIAkvKiBSZXNldCBhbmQgY29uZmlndXJlIGNhc2NhZGVkIDEwLzEwMCBQSFkgKi8KIAkodm9pZClyZXNldF9vbmVfbWlpX3BoeShwaHksIDB4MWYpOwotCQorCiAJZGF0YSA9IF9fcGh5X3JlYWQocGh5LCAweDFmLCBNSUlfQkNNNTIwMV9NVUxUSVBIWSk7CiAJZGF0YSB8PSBNSUlfQkNNNTIwMV9NVUxUSVBIWV9TRVJJQUxNT0RFOwogCV9fcGh5X3dyaXRlKHBoeSwgMHgxZiwgTUlJX0JDTTUyMDFfTVVMVElQSFksIGRhdGEpOwpAQCAtMTk5LDcgKzE5OSw3IEBACiAJCS8qIFNvbWUgcmV2aXNpb25zIG9mIDU0MDEgYXBwZWFyIHRvIG5lZWQgdGhpcwogCQkgKiBpbml0aWFsaXNhdGlvbiBzZXF1ZW5jZSB0byBkaXNhYmxlLCBhY2NvcmRpbmcKIAkJICogdG8gT0YsICJ0YXAgcG93ZXIgbWFuYWdlbWVudCIKLQkJICogCisJCSAqCiAJCSAqIFdBUk5JTkcgISBPRiBhbmQgRGFyd2luIGRvbid0IGFncmVlIG9uIHRoZQogCQkgKiByZWdpc3RlciBhZGRyZXNzZXMuIE9GIHNlZW0gdG8gaW50ZXJwcmV0IHRoZQogCQkgKiByZWdpc3RlciBudW1iZXJzIGJlbG93IGFzIGRlY2ltYWwKQEAgLTIxOSw3ICsyMTksNyBAQAogCQlwaHlfd3JpdGUocGh5LCAweDE3LCAweDIwMWYpOwogCQlwaHlfd3JpdGUocGh5LCAweDE1LCAweDBhMjApOwogCX0KLQkKKwogCS8qIENvbmZpZ3VyZSBmb3IgZ2lnYWJpdCBmdWxsIGR1cGxleCAqLwogCWRhdGEgPSBwaHlfcmVhZChwaHksIE1JSV9CQ001NDAwX0dCX0NPTlRST0wpOwogCWRhdGEgfD0gTUlJX0JDTTU0MDBfR0JfQ09OVFJPTF9GVUxMRFVQTEVYQ0FQOwpAQCAtMjI5LDcgKzIyOSw3IEBACiAKIAkvKiBSZXNldCBhbmQgY29uZmlndXJlIGNhc2NhZGVkIDEwLzEwMCBQSFkgKi8KIAkodm9pZClyZXNldF9vbmVfbWlpX3BoeShwaHksIDB4MWYpOwotCQorCiAJZGF0YSA9IF9fcGh5X3JlYWQocGh5LCAweDFmLCBNSUlfQkNNNTIwMV9NVUxUSVBIWSk7CiAJZGF0YSB8PSBNSUlfQkNNNTIwMV9NVUxUSVBIWV9TRVJJQUxNT0RFOwogCV9fcGh5X3dyaXRlKHBoeSwgMHgxZiwgTUlJX0JDTTUyMDFfTVVMVElQSFksIGRhdGEpOwpAQCAtMjcwLDcgKzI3MCw3IEBACiAKIAkvKiBSZXNldCBhbmQgY29uZmlndXJlIGNhc2NhZGVkIDEwLzEwMCBQSFkgKi8KIAkodm9pZClyZXNldF9vbmVfbWlpX3BoeShwaHksIDB4MWYpOwotCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM1NSw3ICszNTUsNyBAQAogc3RhdGljIGludCBiY201NHh4X3NldHVwX2FuZWcoc3RydWN0IG1paV9waHkgKnBoeSwgdTMyIGFkdmVydGlzZSkKIHsKIAl1MTYgY3RsLCBhZHY7Ci0JCisKIAlwaHktPmF1dG9uZWcgPSAxOwogCXBoeS0+c3BlZWQgPSBTUEVFRF8xMDsKIAlwaHktPmR1cGxleCA9IERVUExFWF9IQUxGOwpAQCAtMzk1LDcgKzM5NSw3IEBACiBzdGF0aWMgaW50IGJjbTU0eHhfc2V0dXBfZm9yY2VkKHN0cnVjdCBtaWlfcGh5ICpwaHksIGludCBzcGVlZCwgaW50IGZkKQogewogCXUxNiBjdGw7Ci0JCisKIAlwaHktPmF1dG9uZWcgPSAwOwogCXBoeS0+c3BlZWQgPSBzcGVlZDsKIAlwaHktPmR1cGxleCA9IGZkOwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCWN0bCB8PSBCTUNSX0ZVTExEUExYOwogCiAJLy8gWFhYIFNob3VsZCB3ZSBzZXQgdGhlIHN1bmdlbSB0byBHSUkgbm93IG9uIDEwMDBCVCA/Ci0JCisKIAlwaHlfd3JpdGUocGh5LCBNSUlfQk1DUiwgY3RsKTsKIAogCXJldHVybiAwOwpAQCAtNDI5LDkgKzQyOSw5IEBACiAKIHN0YXRpYyBpbnQgYmNtNTR4eF9yZWFkX2xpbmsoc3RydWN0IG1paV9waHkgKnBoeSkKIHsKLQlpbnQgbGlua19tb2RlOwkKKwlpbnQgbGlua19tb2RlOwogCXUxNiB2YWw7Ci0JCisKIAlpZiAocGh5LT5hdXRvbmVnKSB7CiAJICAgIAl2YWwgPSBwaHlfcmVhZChwaHksIE1JSV9CQ001NDAwX0FVWFNUQVRVUyk7CiAJCWxpbmtfbW9kZSA9ICgodmFsICYgTUlJX0JDTTU0MDBfQVVYU1RBVFVTX0xJTktNT0RFX01BU0spID4+CkBAIC00NTMsNyArNDUzLDcgQEAKIHN0YXRpYyBpbnQgbWFydmVsbF9zZXR1cF9hbmVnKHN0cnVjdCBtaWlfcGh5ICpwaHksIHUzMiBhZHZlcnRpc2UpCiB7CiAJdTE2IGN0bCwgYWR2OwotCQorCiAJcGh5LT5hdXRvbmVnID0gMTsKIAlwaHktPnNwZWVkID0gU1BFRURfMTA7CiAJcGh5LT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKQEAgLTUwMCw3ICs1MDAsNyBAQAogc3RhdGljIGludCBtYXJ2ZWxsX3NldHVwX2ZvcmNlZChzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgc3BlZWQsIGludCBmZCkKIHsKIAl1MTYgY3RsLCBjdGwyOwotCQorCiAJcGh5LT5hdXRvbmVnID0gMDsKIAlwaHktPnNwZWVkID0gc3BlZWQ7CiAJcGh5LT5kdXBsZXggPSBmZDsKQEAgLTU0MSw3ICs1NDEsNyBAQAogCXBoeV93cml0ZShwaHksIE1JSV8xMDAwQkFTRVRDT05UUk9MLCBjdGwyKTsKIAogCS8vIFhYWCBTaG91bGQgd2Ugc2V0IHRoZSBzdW5nZW0gdG8gR0lJIG5vdyBvbiAxMDAwQlQgPwotCQorCiAJcGh5X3dyaXRlKHBoeSwgTUlJX0JNQ1IsIGN0bCk7CiAKIAlyZXR1cm4gMDsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogc3RhdGljIGludCBnZW5taWlfc2V0dXBfYW5lZyhzdHJ1Y3QgbWlpX3BoeSAqcGh5LCB1MzIgYWR2ZXJ0aXNlKQogewogCXUxNiBjdGwsIGFkdjsKLQkKKwogCXBoeS0+YXV0b25lZyA9IDE7CiAJcGh5LT5zcGVlZCA9IFNQRUVEXzEwOwogCXBoeS0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CkBAIC02MDgsNyArNjA4LDcgQEAKIHN0YXRpYyBpbnQgZ2VubWlpX3NldHVwX2ZvcmNlZChzdHJ1Y3QgbWlpX3BoeSAqcGh5LCBpbnQgc3BlZWQsIGludCBmZCkKIHsKIAl1MTYgY3RsOwotCQorCiAJcGh5LT5hdXRvbmVnID0gMDsKIAlwaHktPnNwZWVkID0gc3BlZWQ7CiAJcGh5LT5kdXBsZXggPSBmZDsKQEAgLTY0MSw3ICs2NDEsNyBAQAogc3RhdGljIGludCBnZW5taWlfcG9sbF9saW5rKHN0cnVjdCBtaWlfcGh5ICpwaHkpCiB7CiAJdTE2IHN0YXR1czsKLQkKKwogCSh2b2lkKXBoeV9yZWFkKHBoeSwgTUlJX0JNU1IpOwogCXN0YXR1cyA9IHBoeV9yZWFkKHBoeSwgTUlJX0JNU1IpOwogCWlmICgoc3RhdHVzICYgQk1TUl9MU1RBVFVTKSA9PSAwKQpAQCAtOTE4LDEzICs5MTgsMTMgQEAKIAkgKiBtYXkgcmUtcHJvYmUgdGhlIFBIWSByZWd1bGFyeQogCSAqLwogCXBoeS0+bWlpX2lkID0gbWlpX2lkOwotCQorCiAJLyogVGFrZSBQSFkgb3V0IG9mIGlzbG9hdGUgbW9kZSBhbmQgcmVzZXQgaXQuICovCiAJcmMgPSByZXNldF9vbmVfbWlpX3BoeShwaHksIG1paV9pZCk7CiAJaWYgKHJjKQogCQlnb3RvIGZhaWw7CiAKLQkvKiBSZWFkIElEIGFuZCBmaW5kIG1hdGNoaW5nIGVudHJ5ICovCQorCS8qIFJlYWQgSUQgYW5kIGZpbmQgbWF0Y2hpbmcgZW50cnkgKi8KIAlpZCA9IChwaHlfcmVhZChwaHksIE1JSV9QSFlTSUQxKSA8PCAxNiB8IHBoeV9yZWFkKHBoeSwgTUlJX1BIWVNJRDIpKTsKIAlwcmludGsoS0VSTl9ERUJVRyAiUEhZIElEOiAleCwgYWRkcjogJXhcbiIsIGlkLCBtaWlfaWQpOwogCWZvciAoaT0wOyAoZGVmID0gbWlpX3BoeV90YWJsZVtpXSkgIT0gTlVMTDsgaSsrKQpAQCAtOTM1LDcgKzkzNSw3IEBACiAJCWdvdG8gZmFpbDsKIAogCXBoeS0+ZGVmID0gZGVmOwotCQorCiAJcmV0dXJuIDA7CiBmYWlsOgogCXBoeS0+c3BlZWQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oIGIvZHJpdmVycy9uZXQvc3VuZ2VtX3BoeS5oCmluZGV4IDY5ZTEyNTEuLjhlZTFjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bmdlbV9waHkuaAorKysgYi9kcml2ZXJzL25ldC9zdW5nZW1fcGh5LmgKQEAgLTk2LDcgKzk2LDcgQEAKIC8qIE1JSSBCQ001NDAwIEFVWFNUQVRVUyByZWdpc3RlciAqLwogI2RlZmluZSBNSUlfQkNNNTQwMF9BVVhTVEFUVVMgICAgICAgICAgICAgICAgICAgMHgxOQogI2RlZmluZSBNSUlfQkNNNTQwMF9BVVhTVEFUVVNfTElOS01PREVfTUFTSyAgICAgMHgwNzAwCi0jZGVmaW5lIE1JSV9CQ001NDAwX0FVWFNUQVRVU19MSU5LTU9ERV9TSElGVCAgICA4ICAKKyNkZWZpbmUgTUlJX0JDTTU0MDBfQVVYU1RBVFVTX0xJTktNT0RFX1NISUZUICAgIDgKIAogLyogMTAwMEJUIGNvbnRyb2wgKE1hcnZlbGwgJiBCQ001NHh4IGF0IGxlYXN0KSAqLwogI2RlZmluZSBNSUlfMTAwMEJBU0VUQ09OVFJPTAkJCTB4MDkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmhtZS5jIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKaW5kZXggYzZmNWJjMy4uMmZmMGRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VuaG1lLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuaG1lLmMKQEAgLTUwNSw3ICs1MDUsNyBAQAogCQkJCSAgdW5zaWduZWQgc2hvcnQgdmFsdWUpCiB7CiAJaW50IHRyaWVzID0gVENWUl9XUklURV9UUklFUzsKLQkKKwogCUFTRCgoImhhcHB5X21lYWxfdGN2cl93cml0ZTogcmVnPTB4JTAyeCB2YWx1ZT0lMDR4XG4iLCByZWcsIHZhbHVlKSk7CiAKIAkvKiBXZWxjb21lIHRvIFN1biBNaWNyb3N5c3RlbXMsIGNhbiBJIHRha2UgeW91ciBvcmRlciBwbGVhc2U/ICovCkBAIC0xNzc4LDcgKzE3NzgsNyBAQAogc3RhdGljIGludCBoYXBweV9tZWFsX2lzX25vdF9zb19oYXBweShzdHJ1Y3QgaGFwcHlfbWVhbCAqaHAsIHUzMiBzdGF0dXMpCiB7CiAJaW50IHJlc2V0ID0gMDsKLQkKKwogCS8qIE9ubHkgcHJpbnQgbWVzc2FnZXMgZm9yIG5vbi1jb3VudGVyIHJlbGF0ZWQgaW50ZXJydXB0cy4gKi8KIAlpZiAoc3RhdHVzICYgKEdSRUdfU1RBVF9TVFNURVJSIHwgR1JFR19TVEFUX1RGSUZPX1VORCB8CiAJCSAgICAgIEdSRUdfU1RBVF9NQVhQS1RFUlIgfCBHUkVHX1NUQVRfUlhFUlIgfApAQCAtMjUxMiw3ICsyNTEyLDcgQEAKIAlyZXR1cm4gKGhwLT5zd19ibXNyICYgQk1TUl9MU1RBVFVTKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBobWVfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhtZV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCQk9IGhtZV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBobWVfc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSBobWVfZ2V0X2RydmluZm8sCkBAIC0zMDAyLDcgKzMwMDIsNyBAQAogCQlwcmludGsoS0VSTl9FUlIgImhhcHB5bWVhbChQQ0kpOiBTb21lIFBDSSBkZXZpY2UgaW5mbyBtaXNzaW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCQorCiAJc3RyY3B5KHByb21fbmFtZSwgcGNwLT5wcm9tX25vZGUtPm5hbWUpOwogI2Vsc2UKIAlpZiAoaXNfcXVhdHRyb19wKHBkZXYpKQpAQCAtMzA0Niw3ICszMDQ2LDcgQEAKIAkJaHAtPnFmZV9wYXJlbnQgPSBxcDsKIAkJaHAtPnFmZV9lbnQgPSBxZmVfc2xvdDsKIAkJcXAtPmhhcHB5X21lYWxzW3FmZV9zbG90XSA9IGRldjsKLQl9CQkKKwl9CiAKIAlocHJlZ19yZXMgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJZXJyID0gLUVOT0RFVjsKQEAgLTMwOTAsNyArMzA5MCw3IEBACiAJCWdldF9obWVfbWFjX25vbnNwYXJjKHBkZXYsICZkZXYtPmRldl9hZGRyWzBdKTsKICNlbmRpZgogCX0KLQkKKwogCS8qIExheW91dCByZWdpc3RlcnMuICovCiAJaHAtPmdyZWdzICAgICAgPSAoaHByZWdfYmFzZSArIDB4MDAwMFVMKTsKIAlocC0+ZXR4cmVncyAgICA9IChocHJlZ19iYXNlICsgMHgyMDAwVUwpOwpAQCAtMzIwMSw3ICszMjAxLDcgQEAKIAkJICAgIHFwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ERUNfMjExNTMpCiAJCQlwcmludGsoIkRFQyAyMTE1MyBQQ0kgQnJpZGdlXG4iKTsKIAkJZWxzZQotCQkJcHJpbnRrKCJ1bmtub3duIGJyaWRnZSAlMDR4LiUwNHhcbiIsIAorCQkJcHJpbnRrKCJ1bmtub3duIGJyaWRnZSAlMDR4LiUwNHhcbiIsCiAJCQkJcXBkZXYtPnZlbmRvciwgcXBkZXYtPmRldmljZSk7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VubGFuY2UuYwppbmRleCAxZWY5ZmQzLi43NzY3MDc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKQEAgLTY0LDcgKzY0LDcgQEAKICAqCQkgIERhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkKICAqIDIuMDE6CiAgKiAgICAgIDExLzA4LzAxOiBVc2UgbGlicmFyeSBjcmMzMiBmdW5jdGlvbnMgKE1hdHRfRG9tc2NoQGRlbGwuY29tKQotICoJCSAgCisgKgogICovCiAKICN1bmRlZiBERUJVR19EUklWRVIKQEAgLTIwOSw3ICsyMDksNyBAQAogCXMxNiAJbGVuZ3RoOwkJLyogTGVuZ3RoIGlzIDJzIGNvbXBsZW1lbnQgKG5lZ2F0aXZlKSEgKi8KIAl1MTYgCW1pc2M7CiB9OwotCQkKKwogLyogVGhlIExBTkNFIGluaXRpYWxpemF0aW9uIGJsb2NrLCBkZXNjcmliZWQgaW4gZGF0YWJvb2suICovCiAvKiBPbiB0aGUgU3BhcmMsIHRoaXMgYmxvY2sgc2hvdWxkIGJlIG9uIGEgRE1BIHJlZ2lvbiAgICAgKi8KIHN0cnVjdCBsYW5jZV9pbml0X2Jsb2NrIHsKQEAgLTIyMiwxMSArMjIyLDExIEBACiAJdTE2CXJ4X2xlbjsJCS8qIHJlY2VpdmUgbGVuIGFuZCBoaWdoIGFkZHIgKi8KIAl1MTYJdHhfcHRyOwkJLyogdHJhbnNtaXQgZGVzY3JpcHRvciBhZGRyICovCiAJdTE2CXR4X2xlbjsJCS8qIHRyYW5zbWl0IGxlbiBhbmQgaGlnaCBhZGRyICovCi0gICAgCisKIAkvKiBUaGUgVHggYW5kIFJ4IHJpbmcgZW50cmllcyBtdXN0IGFsaWduZWQgb24gOC1ieXRlIGJvdW5kYXJpZXMuICovCiAJc3RydWN0IGxhbmNlX3J4X2Rlc2MgYnJ4X3JpbmdbUlhfUklOR19TSVpFXTsKIAlzdHJ1Y3QgbGFuY2VfdHhfZGVzYyBidHhfcmluZ1tUWF9SSU5HX1NJWkVdOwotICAgIAorCiAJdTgJdHhfYnVmIFtUWF9SSU5HX1NJWkVdW1RYX0JVRkZfU0laRV07CiAJdTgJcGFkWzJdOwkJLyogYWxpZ24gcnhfYnVmIGZvciBjb3B5X2FuZF9zdW0oKS4gKi8KIAl1OAlyeF9idWYgW1JYX1JJTkdfU0laRV1bUlhfQlVGRl9TSVpFXTsKQEAgLTI0MywxMiArMjQzLDEyIEBACiAJdm9pZCBfX2lvbWVtCSpkcmVnczsJCS8qIERNQSBjb250cm9sbGVyIHJlZ3MuCQkqLwogCXN0cnVjdCBsYW5jZV9pbml0X2Jsb2NrIF9faW9tZW0gKmluaXRfYmxvY2tfaW9tZW07CiAJc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmluaXRfYmxvY2tfbWVtOwotICAgIAorCiAJc3BpbmxvY2tfdAlsb2NrOwogCiAJaW50CQlyeF9uZXcsIHR4X25ldzsKIAlpbnQJCXJ4X29sZCwgdHhfb2xkOwotICAgIAorCiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CiAJc3RydWN0IHNidXNfZG1hICpsZWRtYTsJLyogSWYgc2V0IHRoaXMgcG9pbnRzIHRvIGxlZG1hCSovCiAJY2hhcgkJdHBlOwkJLyogY2FibGUtc2VsZWN0aW9uIGlzIFRQRQkqLwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJZG1hX2FkZHJfdCBhaWIgPSBscC0+aW5pdF9ibG9ja19kdm1hOwogCV9fdTMyIGxlcHRyOwogCWludCBpOwotICAgIAorCiAJLyogTG9jayBvdXQgb3RoZXIgcHJvY2Vzc2VzIHdoaWxlIHNldHRpbmcgdXAgaGFyZHdhcmUgKi8KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJbHAtPnJ4X25ldyA9IGxwLT50eF9uZXcgPSAwOwpAQCAtMzYzLDEyICszNjMsMTIgQEAKIAl9CiAKIAkvKiBTZXR1cCB0aGUgaW5pdGlhbGl6YXRpb24gYmxvY2sgKi8KLSAgICAKKwogCS8qIFNldHVwIHJ4IGRlc2NyaXB0b3IgcG9pbnRlciAqLwogCWxlcHRyID0gTEFOQ0VfQUREUihhaWIgKyBsaWJkZXNjX29mZnNldChicnhfcmluZywgMCkpOwogCWliLT5yeF9sZW4gPSAoTEFOQ0VfTE9HX1JYX0JVRkZFUlMgPDwgMTMpIHwgKGxlcHRyID4+IDE2KTsKIAlpYi0+cnhfcHRyID0gbGVwdHI7Ci0gICAgCisKIAkvKiBTZXR1cCB0eCBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KIAlsZXB0ciA9IExBTkNFX0FERFIoYWliICsgbGliZGVzY19vZmZzZXQoYnR4X3JpbmcsIDApKTsKIAlpYi0+dHhfbGVuID0gKExBTkNFX0xPR19UWF9CVUZGRVJTIDw8IDEzKSB8IChsZXB0ciA+PiAxNik7CkBAIC0zODEsNyArMzgxLDcgQEAKIAlzdHJ1Y3QgbGFuY2VfaW5pdF9ibG9jayBfX2lvbWVtICppYiA9IGxwLT5pbml0X2Jsb2NrX2lvbWVtOwogCXUzMiBsZXB0cjsKIAlpbnQgaTsKLSAgICAKKwogCS8qIExvY2sgb3V0IG90aGVyIHByb2Nlc3NlcyB3aGlsZSBzZXR0aW5nIHVwIGhhcmR3YXJlICovCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCWxwLT5yeF9uZXcgPSBscC0+dHhfbmV3ID0gMDsKQEAgLTQyMiwxMyArNDIyLDEzIEBACiAJfQogCiAJLyogU2V0dXAgdGhlIGluaXRpYWxpemF0aW9uIGJsb2NrICovCi0gICAgCisKIAkvKiBTZXR1cCByeCBkZXNjcmlwdG9yIHBvaW50ZXIgKi8KIAlsZXB0ciA9IGxpYmRlc2Nfb2Zmc2V0KGJyeF9yaW5nLCAwKTsKIAlzYnVzX3dyaXRldygoTEFOQ0VfTE9HX1JYX0JVRkZFUlMgPDwgMTMpIHwgKGxlcHRyID4+IDE2KSwKIAkJICAgICZpYi0+cnhfbGVuKTsKIAlzYnVzX3dyaXRldyhsZXB0ciwgJmliLT5yeF9wdHIpOwotICAgIAorCiAJLyogU2V0dXAgdHggZGVzY3JpcHRvciBwb2ludGVyICovCiAJbGVwdHIgPSBsaWJkZXNjX29mZnNldChidHhfcmluZywgMCk7CiAJc2J1c193cml0ZXcoKExBTkNFX0xPR19UWF9CVUZGRVJTIDw8IDEzKSB8IChsZXB0ciA+PiAxNiksCkBAIC01NDQsNyArNTQ0LDcgQEAKIAkJCQlscC0+cnhfbmV3ID0gUlhfTkVYVChlbnRyeSk7CiAJCQkJcmV0dXJuOwogCQkJfQotCSAgICAKKwogCQkJbHAtPnN0YXRzLnJ4X2J5dGVzICs9IGxlbjsKIAogCQkJc2tiLT5kZXYgPSBkZXY7CkBAIC01ODQsMTAgKzU4NCwxMCBAQAogCQkvKiBJZiB3ZSBoaXQgYSBwYWNrZXQgbm90IG93bmVkIGJ5IHVzLCBzdG9wICovCiAJCWlmIChiaXRzICYgTEVfVDFfT1dOKQogCQkJYnJlYWs7Ci0JCQorCiAJCWlmIChiaXRzICYgTEVfVDFfRVJSKSB7CiAJCQl1MTYgc3RhdHVzID0gdGQtPm1pc2M7Ci0JICAgIAorCiAJCQlscC0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQlpZiAoc3RhdHVzICYgTEVfVDNfUlRZKSAgbHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CiAJCQlpZiAoc3RhdHVzICYgTEVfVDNfTENPTCkgbHAtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMrKzsKQEAgLTYzNiw3ICs2MzYsNyBAQAogCiAJCQlscC0+c3RhdHMudHhfcGFja2V0cysrOwogCQl9Ci0JCisKIAkJaiA9IFRYX05FWFQoaik7CiAJfQogCWxwLT50eF9vbGQgPSBqOwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJCQkJbHAtPnJ4X25ldyA9IFJYX05FWFQoZW50cnkpOwogCQkJCXJldHVybjsKIAkJCX0KLQkgICAgCisKIAkJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBsZW47CiAKIAkJCXNrYi0+ZGV2ID0gZGV2OwpAQCAtNzU2LDEwICs3NTYsMTAgQEAKIAkJLyogSWYgd2UgaGl0IGEgcGFja2V0IG5vdCBvd25lZCBieSB1cywgc3RvcCAqLwogCQlpZiAoYml0cyAmIExFX1QxX09XTikKIAkJCWJyZWFrOwotCQkKKwogCQlpZiAoYml0cyAmIExFX1QxX0VSUikgewogCQkJdTE2IHN0YXR1cyA9IHNidXNfcmVhZHcoJnRkLT5taXNjKTsKLQkgICAgCisKIAkJCWxwLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmIChzdGF0dXMgJiBMRV9UM19SVFkpICBscC0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCWlmIChzdGF0dXMgJiBMRV9UM19MQ09MKSBscC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwpAQCAtODA4LDcgKzgwOCw3IEBACiAKIAkJCWxwLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCX0KLQkKKwogCQlqID0gVFhfTkVYVChqKTsKIAl9CiAJbHAtPnR4X29sZCA9IGo7CkBAIC04MjUsMjcgKzgyNSwyNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkZXZfaWQ7CiAJc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgY3NyMDsKLSAgICAKKwogCXNidXNfd3JpdGV3KExFX0NTUjAsIGxwLT5scmVncyArIFJBUCk7CiAJY3NyMCA9IHNidXNfcmVhZHcobHAtPmxyZWdzICsgUkRQKTsKIAogCS8qIEFja25vd2xlZGdlIGFsbCB0aGUgaW50ZXJydXB0IHNvdXJjZXMgQVNBUCAqLwogCXNidXNfd3JpdGV3KGNzcjAgJiAoTEVfQzBfSU5UUiB8IExFX0MwX1RJTlQgfCBMRV9DMF9SSU5UKSwKIAkJICAgIGxwLT5scmVncyArIFJEUCk7Ci0gICAgCisKIAlpZiAoKGNzcjAgJiBMRV9DMF9FUlIpICE9IDApIHsKIAkJLyogQ2xlYXIgdGhlIGVycm9yIGNvbmRpdGlvbiAqLwogCQlzYnVzX3dyaXRldygoTEVfQzBfQkFCTCB8IExFX0MwX0VSUiB8IExFX0MwX01JU1MgfAogCQkJICAgICBMRV9DMF9DRVJSIHwgTEVfQzBfTUVSUiksCiAJCQkgICAgbHAtPmxyZWdzICsgUkRQKTsKIAl9Ci0gICAgCisKIAlpZiAoY3NyMCAmIExFX0MwX1JJTlQpCiAJCWxwLT5yeChkZXYpOwotICAgIAorCiAJaWYgKGNzcjAgJiBMRV9DMF9USU5UKQogCQlscC0+dHgoZGV2KTsKLSAgICAKKwogCWlmIChjc3IwICYgTEVfQzBfQkFCTCkKIAkJbHAtPnN0YXRzLnR4X2Vycm9ycysrOwogCkBAIC05OTIsNyArOTkyLDcgQEAKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBzdGF0dXM7Ci0gICAgCisKIAlTVE9QX0xBTkNFKGxwKTsKIAogCS8qIE9uIHRoZSA0bSwgcmVzZXQgdGhlIGRtYSB0b28gKi8KQEAgLTExNjksNyArMTE2OSw3IEBACiAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0gICAgCisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE4OSw3ICsxMTg5LDcgQEAKIAlpbnQgaTsKIAl1MzIgY3JjOwogCXUzMiB2YWw7Ci0JCisKIAkvKiBzZXQgYWxsIG11bHRpY2FzdCBiaXRzICovCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCXZhbCA9IH4wOwpAQCAtMTIwOCw3ICsxMjA4LDcgQEAKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCQlyZXR1cm47Ci0JCisKIAkvKiBBZGQgYWRkcmVzc2VzICovCiAJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgewogCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7CkBAIC0xMzE4LDcgKzEzMTgsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHNwYXJjX2xhbmNlX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBzcGFyY19sYW5jZV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gc3BhcmNfbGFuY2VfZ2V0X2RydmluZm8sCiAJLmdldF9saW5rCQk9IHNwYXJjX2xhbmNlX2dldF9saW5rLAogfTsKQEAgLTE1MzcsNyArMTUzNyw3IEBACiB7CiAJaWYgKChpZHByb20tPmlkX21hY2h0eXBlID09IChTTV9TVU40fFNNXzRfMzMwKSkgfHwKIAkgICAgKGlkcHJvbS0+aWRfbWFjaHR5cGUgPT0gKFNNX1NVTjR8U01fNF80NzApKSkgewotCQltZW1zZXQoJnN1bjRfc2RldiwgMCwgc2l6ZW9mKHNkZXYpKTsKKwkJbWVtc2V0KCZzdW40X3NkZXYsIDAsIHNpemVvZihzdHJ1Y3Qgc2J1c19kZXYpKTsKIAkJc3VuNF9zZGV2LnJlZ19hZGRyc1swXS5waHlzX2FkZHIgPSBzdW40X2V0aF9waHlzYWRkcjsKIAkJc3VuNF9zZGV2LmlycXNbMF0gPSA2OwogCQlyZXR1cm4gc3BhcmNfbGFuY2VfcHJvYmVfb25lKCZzdW40X3NkZXYsIE5VTEwsIE5VTEwpOwpAQCAtMTU0NywxNiArMTU0NywxNiBAQAogCiBzdGF0aWMgaW50IF9fZXhpdCBzdW5sYW5jZV9zdW40X3JlbW92ZSh2b2lkKQogewotCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3VuNF9zZGV2LT5kZXYpOworCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IGRldl9nZXRfZHJ2ZGF0YSgmc3VuNF9zZGV2Lm9mZGV2LmRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBscC0+ZGV2OwogCiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UobmV0X2Rldik7CiAKLQlsYW5jZV9mcmVlX2h3cmVzb3VyY2VzKHJvb3RfbGFuY2VfZGV2KTsKKwlsYW5jZV9mcmVlX2h3cmVzb3VyY2VzKGxwKTsKIAogCWZyZWVfbmV0ZGV2KG5ldF9kZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCZzdW40X3NkZXYtPmRldiwgTlVMTCk7CisJZGV2X3NldF9kcnZkYXRhKCZzdW40X3NkZXYub2ZkZXYuZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU2NiwyMCArMTU2NiwyMSBAQAogc3RhdGljIGludCBfX2RldmluaXQgc3VubGFuY2Vfc2J1c19wcm9iZShzdHJ1Y3Qgb2ZfZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQogewogCXN0cnVjdCBzYnVzX2RldiAqc2RldiA9IHRvX3NidXNfZGV2aWNlKCZkZXYtPmRldik7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkcCA9IGRldi0+bm9kZTsKIAlpbnQgZXJyOwogCi0JaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJsZSIpKSB7CisJaWYgKHNkZXYtPnBhcmVudCkgeworCQlzdHJ1Y3Qgb2ZfZGV2aWNlICpwYXJlbnQgPSAmc2Rldi0+cGFyZW50LT5vZmRldjsKKworCQlpZiAoIXN0cmNtcChwYXJlbnQtPm5vZGUtPm5hbWUsICJsZWRtYSIpKSB7CisJCQlzdHJ1Y3Qgc2J1c19kbWEgKmxlZG1hID0gZmluZF9sZWRtYSh0b19zYnVzX2RldmljZSgmcGFyZW50LT5kZXYpKTsKKworCQkJZXJyID0gc3BhcmNfbGFuY2VfcHJvYmVfb25lKHNkZXYsIGxlZG1hLCBOVUxMKTsKKwkJfSBlbHNlIGlmICghc3RyY21wKHBhcmVudC0+bm9kZS0+bmFtZSwgImxlYnVmZmVyIikpIHsKKwkJCWVyciA9IHNwYXJjX2xhbmNlX3Byb2JlX29uZShzZGV2LCBOVUxMLCB0b19zYnVzX2RldmljZSgmcGFyZW50LT5kZXYpKTsKKwkJfSBlbHNlCisJCQllcnIgPSBzcGFyY19sYW5jZV9wcm9iZV9vbmUoc2RldiwgTlVMTCwgTlVMTCk7CisJfSBlbHNlCiAJCWVyciA9IHNwYXJjX2xhbmNlX3Byb2JlX29uZShzZGV2LCBOVUxMLCBOVUxMKTsKLQl9IGVsc2UgaWYgKCFzdHJjbXAoZHAtPm5hbWUsICJsZWRtYSIpKSB7Ci0JCXN0cnVjdCBzYnVzX2RtYSAqbGVkbWEgPSBmaW5kX2xlZG1hKHNkZXYpOwotCi0JCWVyciA9IHNwYXJjX2xhbmNlX3Byb2JlX29uZShzZGV2LT5jaGlsZCwgbGVkbWEsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCUJVR19PTihzdHJjbXAoZHAtPm5hbWUsICJsZWJ1ZmZlciIpKTsKLQotCQllcnIgPSBzcGFyY19sYW5jZV9wcm9iZV9vbmUoc2Rldi0+Y2hpbGQsIE5VTEwsIHNkZXYpOwotCX0KIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNjA0LDEyICsxNjA1LDYgQEAKIAl7CiAJCS5uYW1lID0gImxlIiwKIAl9LAotCXsKLQkJLm5hbWUgPSAibGVkbWEiLAotCX0sCi0JewotCQkubmFtZSA9ICJsZWJ1ZmZlciIsCi0JfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnFlLmMgYi9kcml2ZXJzL25ldC9zdW5xZS5jCmluZGV4IDgxN2E0MGIuLjkyMDJhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnFlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VucWUuYwpAQCAtNDUxLDcgKzQ1MSw3IEBACiAJCX0KIAkJZW5kX3J4ZC0+cnhfYWRkciA9IHRoaXNfcWJ1Zl9kdm1hOwogCQllbmRfcnhkLT5yeF9mbGFncyA9IChSWERfT1dOIHwgKChSWERfUEtUX1NaKSAmIFJYRF9MRU5HVEgpKTsKLQkJCisKIAkJZWxlbSA9IE5FWFRfUlgoZWxlbSk7CiAJCXRoaXMgPSAmcnhiYXNlW2VsZW1dOwogCX0KQEAgLTcxOCw3ICs3MTgsNyBAQAogCXJldHVybiAocGh5Y29uZmlnICYgTVJFR1NfUEhZQ09ORklHX0xTVEFUKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBxZV9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWVfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHFlX2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBxZV9nZXRfbGluaywKIH07CkBAIC04NTgsNyArODU4LDcgQEAKIAl9CiAJcWUtPmNoYW5uZWwgPSBpOwogCXNwaW5fbG9ja19pbml0KCZxZS0+bG9jayk7Ci0JCisKIAlyZXMgPSAtRU5PREVWOwogCXFlY3AgPSBnZXRfcWVjKHNkZXYpOwogCWlmICghcWVjcCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RjMzU4MTUuYyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwppbmRleCA4YjUzZGVkLi42MGYwMjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90YzM1ODE1LmMKKysrIGIvZHJpdmVycy9uZXQvdGMzNTgxNS5jCkBAIC0xLDcgKzEsNyBAQAogLyogdGMzNTgxNS5jOiBBIFRPU0hJQkEgVEMzNTgxNUNGIFBDSSAxMC8xMDBNYnBzIGV0aGVybmV0IGRyaXZlciBmb3IgbGludXguCiAgKgogICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gCisgKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqICAgICAgICAgICAgICAgIGFoZW5uZXNzeUBtdmlzdGEuY29tCiAgKgogICogQmFzZWQgb24gc2tlbHRvbi5jIGJ5IERvbmFsZCBCZWNrZXIuCkBAIC02NjMsNyArNjYzLDcgQEAKICNlbmRpZgogCX0KICNpZmRlZiBfX21pcHNfXwotCWZkX2FkZHIgPSAodW5zaWduZWQgbG9uZyl2dG9ub2NhY2hlKGxwLT5mZF9idWYpOyAgCisJZmRfYWRkciA9ICh1bnNpZ25lZCBsb25nKXZ0b25vY2FjaGUobHAtPmZkX2J1Zik7CiAjZWxzZQogCWZkX2FkZHIgPSAodW5zaWduZWQgbG9uZylscC0+ZmRfYnVmOwogI2VuZGlmCkBAIC0xMTM2LDcgKzExMzYsNyBAQAogCQkJaW50IGN1cl9iZCwgb2Zmc2V0OwogCiAJCQlscC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X2xlbjsKLQkJCQorCiAJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9sZW4gKyAyKTsgLyogKzI6IGZvciByZXNlcnZlICovCiAJCQlpZiAoc2tiID09IE5VTEwpIHsKIAkJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKQEAgLTE1MjMsNyArMTUyMyw3IEBACiAJc3RydWN0IHRjMzU4MTVfbG9jYWwgKmxwID0gZGV2LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQorCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAl0Y193cml0ZWwoTURfQ0FfQnVzeSB8IChwaHkgPDwgNSkgfCBwaHlfcmVnLCAmdHItPk1EX0NBKTsKQEAgLTE3MjUsNyArMTcyNSw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHRjMzU4MTVfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZ0YzM1ODE1X2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnRjMzU4MTVfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHRjMzU4MTVfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5jIGIvZHJpdmVycy9uZXQvdGczLmMKaW5kZXggMWI4MTM4Zi4uM2I4NGFjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmMKKysrIGIvZHJpdmVycy9uZXQvdGczLmMKQEAgLTY4LDggKzY4LDggQEAKIAogI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0ZzMiCiAjZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuNjMiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiSnVseSAyNSwgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjY1IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkF1Z3VzdCAwNywgMjAwNiIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC0xMjMsOSArMTIzLDYgQEAKIAkJCSAgICAgICAgICAgVEczX1JYX1JDQl9SSU5HX1NJWkUodHApKQogI2RlZmluZSBURzNfVFhfUklOR19CWVRFUwkoc2l6ZW9mKHN0cnVjdCB0ZzNfdHhfYnVmZmVyX2Rlc2MpICogXAogCQkJCSBURzNfVFhfUklOR19TSVpFKQotI2RlZmluZSBUWF9CVUZGU19BVkFJTChUUCkJCQkJCQlcCi0JKChUUCktPnR4X3BlbmRpbmcgLQkJCQkJCVwKLQkgKCgoVFApLT50eF9wcm9kIC0gKFRQKS0+dHhfY29ucykgJiAoVEczX1RYX1JJTkdfU0laRSAtIDEpKSkKICNkZWZpbmUgTkVYVF9UWChOKQkJKCgoTikgKyAxKSAmIChURzNfVFhfUklOR19TSVpFIC0gMSkpCiAKICNkZWZpbmUgUlhfUEtUX0JVRl9TWgkJKDE1MzYgKyB0cC0+cnhfb2Zmc2V0ICsgNjQpCkBAIC0zNjYsNyArMzYzLDcgQEAKIAogc3RhdGljIHUzMiB0ZzNfcmVhZDMyKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2ZmKQogewotCXJldHVybiAocmVhZGwodHAtPnJlZ3MgKyBvZmYpKTsgCisJcmV0dXJuIChyZWFkbCh0cC0+cmVncyArIG9mZikpOwogfQogCiBzdGF0aWMgdm9pZCB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmYsIHUzMiB2YWwpCkBAIC01ODcsNyArNTg0LDcgQEAKIC8qIHRnM19yZXN0YXJ0X2ludHMKICAqICBzaW1pbGFyIHRvIHRnM19lbmFibGVfaW50cywgYnV0IGl0IGFjY3VyYXRlbHkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZXJlCiAgKiAgaXMgbmV3IHdvcmsgcGVuZGluZyBhbmQgY2FuIHJldHVybiB3aXRob3V0IGZsdXNoaW5nIHRoZSBQSU8gd3JpdGUKLSAqICB3aGljaCByZWVuYWJsZXMgaW50ZXJydXB0cyAKKyAqICB3aGljaCByZWVuYWJsZXMgaW50ZXJydXB0cwogICovCiBzdGF0aWMgdm9pZCB0ZzNfcmVzdGFydF9pbnRzKHN0cnVjdCB0ZzMgKnRwKQogewpAQCAtNjc2LDcgKzY3Myw3IEBACiAJZnJhbWVfdmFsIHw9ICgocmVnIDw8IE1JX0NPTV9SRUdfQUREUl9TSElGVCkgJgogCQkgICAgICBNSV9DT01fUkVHX0FERFJfTUFTSyk7CiAJZnJhbWVfdmFsIHw9IChNSV9DT01fQ01EX1JFQUQgfCBNSV9DT01fU1RBUlQpOwotCQorCiAJdHczMl9mKE1BQ19NSV9DT00sIGZyYW1lX3ZhbCk7CiAKIAlsb29wcyA9IFBIWV9CVVNZX0xPT1BTOwpAQCAtNzI0LDcgKzcyMSw3IEBACiAJCSAgICAgIE1JX0NPTV9SRUdfQUREUl9NQVNLKTsKIAlmcmFtZV92YWwgfD0gKHZhbCAmIE1JX0NPTV9EQVRBX01BU0spOwogCWZyYW1lX3ZhbCB8PSAoTUlfQ09NX0NNRF9XUklURSB8IE1JX0NPTV9TVEFSVCk7Ci0JCisKIAl0dzMyX2YoTUFDX01JX0NPTSwgZnJhbWVfdmFsKTsKIAogCWxvb3BzID0gUEhZX0JVU1lfTE9PUFM7CkBAIC0xNDgwLDcgKzE0NzcsNyBAQAogCWlmIChvbGRfcnhfbW9kZSAhPSB0cC0+cnhfbW9kZSkgewogCQl0dzMyX2YoTUFDX1JYX01PREUsIHRwLT5yeF9tb2RlKTsKIAl9Ci0JCisKIAlpZiAobmV3X3RnM19mbGFncyAmIFRHM19GTEFHX1RYX1BBVVNFKQogCQl0cC0+dHhfbW9kZSB8PSBUWF9NT0RFX0ZMT1dfQ1RSTF9FTkFCTEU7CiAJZWxzZQpAQCAtMjU0NSw3ICsyNTQyLDcgQEAKIAlpZiAodHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKIAkJdTMyIGZsYWdzOwogCQlpbnQgaTsKLSAgCisKIAkJaWYgKGZpYmVyX2F1dG9uZWcodHAsICZmbGFncykpIHsKIAkJCXUzMiBsb2NhbF9hZHYsIHJlbW90ZV9hZHY7CiAKQEAgLTI5ODcsNiArMjk4NCwxMyBAQAogCXNwaW5fdW5sb2NrKCZ0cC0+bG9jayk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTMyIHRnM190eF9hdmFpbChzdHJ1Y3QgdGczICp0cCkKK3sKKwlzbXBfbWIoKTsKKwlyZXR1cm4gKHRwLT50eF9wZW5kaW5nIC0KKwkJKCh0cC0+dHhfcHJvZCAtIHRwLT50eF9jb25zKSAmIChURzNfVFhfUklOR19TSVpFIC0gMSkpKTsKK30KKwogLyogVGlnb24zIG5ldmVyIHJlcG9ydHMgcGFydGlhbCBwYWNrZXQgc2VuZHMuICBTbyB3ZSBkbyBub3QKICAqIG5lZWQgc3BlY2lhbCBsb2dpYyB0byBoYW5kbGUgU0tCcyB0aGF0IGhhdmUgbm90IGhhZCBhbGwKICAqIG9mIHRoZWlyIGZyYWdzIHNlbnQgeWV0LCBsaWtlIFN1bkdFTSBkb2VzLgpAQCAtMzAzOCwxMiArMzA0MiwyMCBAQAogCiAJdHAtPnR4X2NvbnMgPSBzd19pZHg7CiAKLQlpZiAodW5saWtlbHkobmV0aWZfcXVldWVfc3RvcHBlZCh0cC0+ZGV2KSkpIHsKLQkJc3Bpbl9sb2NrKCZ0cC0+dHhfbG9jayk7CisJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHRnM19zdGFydF94bWl0KCkKKwkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCisJICogbWVtb3J5IGJhcnJpZXIsIHRoZXJlIGlzIGEgc21hbGwgcG9zc2liaWxpdHkgdGhhdCB0ZzNfc3RhcnRfeG1pdCgpCisJICogd2lsbCBtaXNzIGl0IGFuZCBjYXVzZSB0aGUgcXVldWUgdG8gYmUgc3RvcHBlZCBmb3JldmVyLgorCSAqLworCXNtcF9tYigpOworCisJaWYgKHVubGlrZWx5KG5ldGlmX3F1ZXVlX3N0b3BwZWQodHAtPmRldikgJiYKKwkJICAgICAodGczX3R4X2F2YWlsKHRwKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKSkpIHsKKwkJbmV0aWZfdHhfbG9jayh0cC0+ZGV2KTsKIAkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQodHAtPmRldikgJiYKLQkJICAgIChUWF9CVUZGU19BVkFJTCh0cCkgPiBURzNfVFhfV0FLRVVQX1RIUkVTSCkpCisJCSAgICAodGczX3R4X2F2YWlsKHRwKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKSkKIAkJCW5ldGlmX3dha2VfcXVldWUodHAtPmRldik7Ci0JCXNwaW5fdW5sb2NrKCZ0cC0+dHhfbG9jayk7CisJCW5ldGlmX3R4X3VubG9jayh0cC0+ZGV2KTsKIAl9CiB9CiAKQEAgLTMwOTcsMTEgKzMxMDksMTAgQEAKIAkgKiBDYWxsZXJzIGRlcGVuZCB1cG9uIHRoaXMgYmVoYXZpb3IgYW5kIGFzc3VtZSB0aGF0CiAJICogd2UgbGVhdmUgZXZlcnl0aGluZyB1bmNoYW5nZWQgaWYgd2UgZmFpbC4KIAkgKi8KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKHNrYl9zaXplKTsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHRwLT5kZXYsIHNrYl9zaXplKTsKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc2tiLT5kZXYgPSB0cC0+ZGV2OwogCXNrYl9yZXNlcnZlKHNrYiwgdHAtPnJ4X29mZnNldCk7CiAKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUodHAtPnBkZXYsIHNrYi0+ZGF0YSwKQEAgLTMyNDcsNyArMzI1OCw3IEBACiAKIAkJbGVuID0gKChkZXNjLT5pZHhfbGVuICYgUlhEX0xFTl9NQVNLKSA+PiBSWERfTEVOX1NISUZUKSAtIDQ7IC8qIG9taXQgY3JjICovCiAKLQkJaWYgKGxlbiA+IFJYX0NPUFlfVEhSRVNIT0xEIAorCQlpZiAobGVuID4gUlhfQ09QWV9USFJFU0hPTEQKIAkJCSYmIHRwLT5yeF9vZmZzZXQgPT0gMgogCQkJLyogcnhfb2Zmc2V0ICE9IDIgaWZmIHRoaXMgaXMgYSA1NzAxIGNhcmQgcnVubmluZwogCQkJICogaW4gUENJLVggbW9kZSBbc2VlIHRnM19nZXRfaW52YXJpYW50cygpXSAqLwpAQCAtMzI3MCwxMSArMzI4MSwxMCBAQAogCQkJdGczX3JlY3ljbGVfcngodHAsIG9wYXF1ZV9rZXksCiAJCQkJICAgICAgIGRlc2NfaWR4LCAqcG9zdF9wdHIpOwogCi0JCQljb3B5X3NrYiA9IGRldl9hbGxvY19za2IobGVuICsgMik7CisJCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgbGVuICsgMik7CiAJCQlpZiAoY29weV9za2IgPT0gTlVMTCkKIAkJCQlnb3RvIGRyb3BfaXRfbm9fcmVjeWNsZTsKIAotCQkJY29weV9za2ItPmRldiA9IHRwLT5kZXY7CiAJCQlza2JfcmVzZXJ2ZShjb3B5X3NrYiwgMik7CiAJCQlza2JfcHV0KGNvcHlfc2tiLCBsZW4pOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHRwLT5wZGV2LCBkbWFfYWRkciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtMzc5Nyw3ICszODA3LDcgQEAKIAkgKiBpbnRlcnJ1cHQuICBGdXJ0aGVybW9yZSwgSVJRIHByb2Nlc3NpbmcgcnVucyBsb2NrbGVzcyBzbyB3ZSBoYXZlCiAJICogbm8gSVJRIGNvbnRleHQgZGVhZGxvY2tzIHRvIHdvcnJ5IGFib3V0IGVpdGhlci4gIFJlam9pY2UhCiAJICovCi0JaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgeworCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodHApIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpKSB7CiAJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKSB7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKQEAgLTM4OTMsMTIgKzM5MDMsMTAgQEAKIAl0dzMyX3R4X21ib3goKE1BSUxCT1hfU05ESE9TVF9QUk9EX0lEWF8wICsgVEczXzY0QklUX1JFR19MT1cpLCBlbnRyeSk7CiAKIAl0cC0+dHhfcHJvZCA9IGVudHJ5OwotCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKLQkJc3Bpbl9sb2NrKCZ0cC0+dHhfbG9jayk7CisJaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0cCkgPD0gKE1BWF9TS0JfRlJBR1MgKyAxKSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCQlpZiAoVFhfQlVGRlNfQVZBSUwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0gpCisJCWlmICh0ZzNfdHhfYXZhaWwodHApID4gVEczX1RYX1dBS0VVUF9USFJFU0gpCiAJCQluZXRpZl93YWtlX3F1ZXVlKHRwLT5kZXYpOwotCQlzcGluX3VubG9jaygmdHAtPnR4X2xvY2spOwogCX0KIAogb3V0X3VubG9jazoKQEAgLTM5MjAsNyArMzkyOCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuc2tiOwogCiAJLyogRXN0aW1hdGUgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgaW4gdGhlIHdvcnN0IGNhc2UgKi8KLQlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDw9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzICogMykpKSB7CisJaWYgKHVubGlrZWx5KHRnM190eF9hdmFpbCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgKiAzKSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZSh0cC0+ZGV2KTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTM5NjAsNyArMzk2OCw3IEBACiAJICogaW50ZXJydXB0LiAgRnVydGhlcm1vcmUsIElSUSBwcm9jZXNzaW5nIHJ1bnMgbG9ja2xlc3Mgc28gd2UgaGF2ZQogCSAqIG5vIElSUSBjb250ZXh0IGRlYWRsb2NrcyB0byB3b3JyeSBhYm91dCBlaXRoZXIuICBSZWpvaWNlIQogCSAqLwotCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPD0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKSkpIHsKKwlpZiAodW5saWtlbHkodGczX3R4X2F2YWlsKHRwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgewogCQlpZiAoIW5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkgewogCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCkBAIC00MTEwLDEyICs0MTE4LDEwIEBACiAJdHczMl90eF9tYm94KChNQUlMQk9YX1NOREhPU1RfUFJPRF9JRFhfMCArIFRHM182NEJJVF9SRUdfTE9XKSwgZW50cnkpOwogCiAJdHAtPnR4X3Byb2QgPSBlbnRyeTsKLQlpZiAodW5saWtlbHkoVFhfQlVGRlNfQVZBSUwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7Ci0JCXNwaW5fbG9jaygmdHAtPnR4X2xvY2spOworCWlmICh1bmxpa2VseSh0ZzNfdHhfYXZhaWwodHApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJaWYgKFRYX0JVRkZTX0FWQUlMKHRwKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKQorCQlpZiAodGczX3R4X2F2YWlsKHRwKSA+IFRHM19UWF9XQUtFVVBfVEhSRVNIKQogCQkJbmV0aWZfd2FrZV9xdWV1ZSh0cC0+ZGV2KTsKLQkJc3Bpbl91bmxvY2soJnRwLT50eF9sb2NrKTsKIAl9CiAKIG91dF91bmxvY2s6CkBAIC02ODAyLDcgKzY4MDgsNyBAQAogCXRnM19kaXNhYmxlX2ludHModHApOwogCiAJZnJlZV9pcnEodHAtPnBkZXYtPmlycSwgZGV2KTsKLQkKKwogCWVyciA9IHRnM19yZXF1ZXN0X2lycSh0cCk7CiAKIAlpZiAoZXJyKQpAQCAtNzQyOSw3ICs3NDM1LDcgQEAKIAkJZ2V0X3N0YXQ2NCgmaHdfc3RhdHMtPnJ4X3VjYXN0X3BhY2tldHMpICsKIAkJZ2V0X3N0YXQ2NCgmaHdfc3RhdHMtPnJ4X21jYXN0X3BhY2tldHMpICsKIAkJZ2V0X3N0YXQ2NCgmaHdfc3RhdHMtPnJ4X2JjYXN0X3BhY2tldHMpOwotCQkKKwogCXN0YXRzLT50eF9wYWNrZXRzID0gb2xkX3N0YXRzLT50eF9wYWNrZXRzICsKIAkJZ2V0X3N0YXQ2NCgmaHdfc3RhdHMtPnR4X3VjYXN0X3BhY2tldHMpICsKIAkJZ2V0X3N0YXQ2NCgmaHdfc3RhdHMtPnR4X21jYXN0X3BhY2tldHMpICsKQEAgLTc3MzcsNyArNzc0Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGczX252cmFtX3dyaXRlX2Jsb2NrKHN0cnVjdCB0ZzMgKnRwLCB1MzIgb2Zmc2V0LCB1MzIgbGVuLCB1OCAqYnVmKTsgCitzdGF0aWMgaW50IHRnM19udnJhbV93cml0ZV9ibG9jayhzdHJ1Y3QgdGczICp0cCwgdTMyIG9mZnNldCwgdTMyIGxlbiwgdTggKmJ1Zik7CiAKIHN0YXRpYyBpbnQgdGczX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQogewpAQCAtNzgwMSw3ICs3ODA3LDcgQEAKIHN0YXRpYyBpbnQgdGczX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKICAgCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgCisKIAljbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfQXV0b25lZyk7CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpKQpAQCAtNzgxOSw3ICs3ODI1LDcgQEAKIAkJY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX0ZJQlJFOwogCQljbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOwogCX0KLSAgCisKIAljbWQtPmFkdmVydGlzaW5nID0gdHAtPmxpbmtfY29uZmlnLmFkdmVydGlzaW5nOwogCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKIAkJY21kLT5zcGVlZCA9IHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQ7CkBAIC03ODMyLDEyICs3ODM4LDEyIEBACiAJY21kLT5tYXhyeHBrdCA9IDA7CiAJcmV0dXJuIDA7CiB9Ci0gIAorCiBzdGF0aWMgaW50IHRnM19zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSB7IAorCisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgewogCQkvKiBUaGVzZSBhcmUgdGhlIG9ubHkgdmFsaWQgYWR2ZXJ0aXNlbWVudCBiaXRzIGFsbG93ZWQuICAqLwogCQlpZiAoY21kLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCiAJCSAgICAoY21kLT5hZHZlcnRpc2luZyAmIH4oQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZiB8CkBAIC03ODY5LDY5ICs3ODc1LDY5IEBACiAJCXRwLT5saW5rX2NvbmZpZy5zcGVlZCA9IGNtZC0+c3BlZWQ7CiAJCXRwLT5saW5rX2NvbmZpZy5kdXBsZXggPSBjbWQtPmR1cGxleDsKICAgCX0KLSAgCisKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKQogCQl0ZzNfc2V0dXBfcGh5KHRwLCAxKTsKIAogCXRnM19mdWxsX3VubG9jayh0cCk7Ci0gIAorCiAJcmV0dXJuIDA7CiB9Ci0gIAorCiBzdGF0aWMgdm9pZCB0ZzNfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0gIAorCiAJc3RyY3B5KGluZm8tPmRyaXZlciwgRFJWX01PRFVMRV9OQU1FKTsKIAlzdHJjcHkoaW5mby0+dmVyc2lvbiwgRFJWX01PRFVMRV9WRVJTSU9OKTsKIAlzdHJjcHkoaW5mby0+ZndfdmVyc2lvbiwgdHAtPmZ3X3Zlcik7CiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZSh0cC0+cGRldikpOwogfQotICAKKwogc3RhdGljIHZvaWQgdGczX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgCisKIAl3b2wtPnN1cHBvcnRlZCA9IFdBS0VfTUFHSUM7CiAJd29sLT53b2xvcHRzID0gMDsKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9FTkFCTEUpCiAJCXdvbC0+d29sb3B0cyA9IFdBS0VfTUFHSUM7CiAJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7CiB9Ci0gIAorCiBzdGF0aWMgaW50IHRnM19zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0gIAorCiAJaWYgKHdvbC0+d29sb3B0cyAmIH5XQUtFX01BR0lDKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpICYmCiAJICAgIHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUyAmJgogCSAgICAhKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19TRVJERVNfV09MX0NBUCkpCiAJCXJldHVybiAtRUlOVkFMOwotICAKKwogCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwogCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1dPTF9FTkFCTEU7CiAJZWxzZQogCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19XT0xfRU5BQkxFOwogCXNwaW5fdW5sb2NrX2JoKCZ0cC0+bG9jayk7Ci0gIAorCiAJcmV0dXJuIDA7CiB9Ci0gIAorCiBzdGF0aWMgdTMyIHRnM19nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJcmV0dXJuIHRwLT5tc2dfZW5hYmxlOwogfQotICAKKwogc3RhdGljIHZvaWQgdGczX3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXRwLT5tc2dfZW5hYmxlID0gdmFsdWU7CiB9Ci0gIAorCiAjaWYgVEczX1RTT19TVVBQT1JUICE9IDAKIHN0YXRpYyBpbnQgdGczX3NldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQogewpAQCAtNzk1MSwxMyArNzk1NywxMyBAQAogCXJldHVybiBldGh0b29sX29wX3NldF90c28oZGV2LCB2YWx1ZSk7CiB9CiAjZW5kaWYKLSAgCisKIHN0YXRpYyBpbnQgdGczX253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIGJtY3I7CiAJaW50IHI7Ci0gIAorCiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC03OTc1LDE0ICs3OTgxLDE0IEBACiAJCXIgPSAwOwogCX0KIAlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOwotICAKKwogCXJldHVybiByOwogfQotICAKKwogc3RhdGljIHZvaWQgdGczX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICplcmluZykKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7Ci0gIAorCiAJZXJpbmctPnJ4X21heF9wZW5kaW5nID0gVEczX1JYX1JJTkdfU0laRSAtIDE7CiAJZXJpbmctPnJ4X21pbmlfbWF4X3BlbmRpbmcgPSAwOwogCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fUklOR19FTkFCTEUpCkBAIC04MDAxLDI0ICs4MDA3LDI0IEBACiAKIAllcmluZy0+dHhfcGVuZGluZyA9IHRwLT50eF9wZW5kaW5nOwogfQotICAKKwogc3RhdGljIGludCB0ZzNfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKmVyaW5nKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaXJxX3N5bmMgPSAwLCBlcnIgPSAwOwotICAKKwogCWlmICgoZXJpbmctPnJ4X3BlbmRpbmcgPiBURzNfUlhfUklOR19TSVpFIC0gMSkgfHwKIAkgICAgKGVyaW5nLT5yeF9qdW1ib19wZW5kaW5nID4gVEczX1JYX0pVTUJPX1JJTkdfU0laRSAtIDEpIHx8CiAJICAgIChlcmluZy0+dHhfcGVuZGluZyA+IFRHM19UWF9SSU5HX1NJWkUgLSAxKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0gIAorCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQl0ZzNfbmV0aWZfc3RvcCh0cCk7CiAJCWlycV9zeW5jID0gMTsKIAl9CiAKIAl0ZzNfZnVsbF9sb2NrKHRwLCBpcnFfc3luYyk7Ci0gIAorCiAJdHAtPnJ4X3BlbmRpbmcgPSBlcmluZy0+cnhfcGVuZGluZzsKIAogCWlmICgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NQVhfUlhQRU5EXzY0KSAmJgpAQCAtODAzNSwyNCArODA0MSwyNCBAQAogCX0KIAogCXRnM19mdWxsX3VubG9jayh0cCk7Ci0gIAorCiAJcmV0dXJuIGVycjsKIH0KLSAgCisKIHN0YXRpYyB2b2lkIHRnM19nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICplcGF1c2UpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAKKwogCWVwYXVzZS0+YXV0b25lZyA9ICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUEFVU0VfQVVUT05FRykgIT0gMDsKIAllcGF1c2UtPnJ4X3BhdXNlID0gKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19SWF9QQVVTRSkgIT0gMDsKIAllcGF1c2UtPnR4X3BhdXNlID0gKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19UWF9QQVVTRSkgIT0gMDsKIH0KLSAgCisKIHN0YXRpYyBpbnQgdGczX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmVwYXVzZSkKIHsKIAlzdHJ1Y3QgdGczICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGlycV9zeW5jID0gMCwgZXJyID0gMDsKLSAgCisKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXRnM19uZXRpZl9zdG9wKHRwKTsKIAkJaXJxX3N5bmMgPSAxOwpAQCAtODA4MSw0NiArODA4Nyw0NiBAQAogCX0KIAogCXRnM19mdWxsX3VubG9jayh0cCk7Ci0gIAorCiAJcmV0dXJuIGVycjsKIH0KLSAgCisKIHN0YXRpYyB1MzIgdGczX2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXJldHVybiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1JYX0NIRUNLU1VNUykgIT0gMDsKIH0KLSAgCisKIHN0YXRpYyBpbnQgdGczX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgCisKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0JST0tFTl9DSEVDS1NVTVMpIHsKIAkJaWYgKGRhdGEgIT0gMCkKIAkJCXJldHVybiAtRUlOVkFMOwogICAJCXJldHVybiAwOwogICAJfQotICAKKwogCXNwaW5fbG9ja19iaCgmdHAtPmxvY2spOwogCWlmIChkYXRhKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1JYX0NIRUNLU1VNUzsKIAllbHNlCiAJCXRwLT50ZzNfZmxhZ3MgJj0gflRHM19GTEFHX1JYX0NIRUNLU1VNUzsKIAlzcGluX3VubG9ja19iaCgmdHAtPmxvY2spOwotICAKKwogCXJldHVybiAwOwogfQotICAKKwogc3RhdGljIGludCB0ZzNfc2V0X3R4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7CiAJc3RydWN0IHRnMyAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAKKwogCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfQlJPS0VOX0NIRUNLU1VNUykgewogCQlpZiAoZGF0YSAhPSAwKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAgIAkJcmV0dXJuIDA7CiAgIAl9Ci0gIAorCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg3KQogCQlldGh0b29sX29wX3NldF90eF9od19jc3VtKGRldiwgZGF0YSk7CkBAIC04MTc1LDcgKzgxODEsNyBAQAogCQkJCQkgICBMRURfQ1RSTF9UUkFGRklDX09WRVJSSURFIHwKIAkJCQkJICAgTEVEX0NUUkxfVFJBRkZJQ19CTElOSyB8CiAJCQkJCSAgIExFRF9DVFJMX1RSQUZGSUNfTEVEKTsKLQkKKwogCQllbHNlCiAJCQl0dzMyKE1BQ19MRURfQ1RSTCwgTEVEX0NUUkxfTE5LTEVEX09WRVJSSURFIHwKIAkJCQkJICAgTEVEX0NUUkxfVFJBRkZJQ19PVkVSUklERSk7CkBAIC04MzUyLDcgKzgzNTgsNyBAQAogCQkJMHgwMDAwMDAwMCwgMHhmZmZmMDAwMiB9LAogCQl7IFJDVkRCRElfU1REX0JEKzB4YywgMHgwMDAwLAogCQkJMHgwMDAwMDAwMCwgMHhmZmZmZmZmZiB9LAotCQorCiAJCS8qIFJlY2VpdmUgQkQgSW5pdGlhdG9yIENvbnRyb2wgUmVnaXN0ZXJzLiAqLwogCQl7IFJDVkJESV9TVERfVEhSRVNILCBURzNfRkxfTk9UXzU3MDUsCiAJCQkweDAwMDAwMDAwLCAweGZmZmZmZmZmIH0sCkBAIC04MzYwLDcgKzgzNjYsNyBAQAogCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDNmZiB9LAogCQl7IFJDVkJESV9KVU1CT19USFJFU0gsIFRHM19GTF9OT1RfNTcwNSwKIAkJCTB4MDAwMDAwMDAsIDB4ZmZmZmZmZmYgfSwKLQkKKwogCQkvKiBIb3N0IENvYWxlc2NpbmcgQ29udHJvbCBSZWdpc3RlcnMuICovCiAJCXsgSE9TVENDX01PREUsIFRHM19GTF9OT1RfNTcwNSwKIAkJCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDQgfSwKQEAgLTg0MjQsNyArODQzMCw3IEBACiAJCQkweGZmZmZmZmZmLCAweDAwMDAwMDAwIH0sCiAJCXsgQlVGTUdSX0RNQV9ERVNDX1BPT0xfU0laRSwgVEczX0ZMX05PVF81NzA1LAogCQkJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAotCQorCiAJCS8qIE1haWxib3ggUmVnaXN0ZXJzICovCiAJCXsgR1JDTUJPWF9SQ1ZTVERfUFJPRF9JRFgrNCwgMHgwMDAwLAogCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDFmZiB9LApAQCAtODU2NCw3ICs4NTcwLDcgQEAKIAkJICAgIG1lbV90YmxbaV0ubGVuKSkgIT0gMCkKIAkJCWJyZWFrOwogCX0KLQkKKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTg2MTgsNyArODYyNCw3IEBACiAJZXJyID0gLUVJTzsKIAogCXR4X2xlbiA9IDE1MTQ7Ci0Jc2tiID0gZGV2X2FsbG9jX3NrYih0eF9sZW4pOworCXNrYiA9IG5ldGRldl9hbGxvY19za2IodHAtPmRldiwgdHhfbGVuKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTg2OTksNyArODcwNSw3IEBACiAJCQlnb3RvIG91dDsKIAl9CiAJZXJyID0gMDsKLQkKKwogCS8qIHRnM19mcmVlX3JpbmdzIHdpbGwgdW5tYXAgYW5kIGZyZWUgdGhlIHJ4X3NrYiAqLwogb3V0OgogCXJldHVybiBlcnI7CkBAIC04OTU2LDcgKzg5NjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHRnM19ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdGczX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MJCT0gdGczX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IHRnM19zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCQk9IHRnM19nZXRfZHJ2aW5mbywKQEAgLTkwMjcsNyArOTAzMyw3IEBACiAKIAl0cC0+bnZyYW1fc2l6ZSA9IGN1cnNpemU7CiB9Ci0JCQorCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX2dldF9udnJhbV9zaXplKHN0cnVjdCB0ZzMgKnRwKQogewogCXUzMiB2YWw7CkBAIC05NDQzLDcgKzk0NDksNyBAQAogCQkJKGFkZHIgJiBFRVBST01fQUREUl9BRERSX01BU0spIHwKIAkJCUVFUFJPTV9BRERSX1NUQVJUIHwKIAkJCUVFUFJPTV9BRERSX1dSSVRFKTsKLQkJCisKIAkJZm9yIChqID0gMDsgaiA8IDEwMDAwOyBqKyspIHsKIAkJCXZhbCA9IHRyMzIoR1JDX0VFUFJPTV9BRERSKTsKIApAQCAtOTQ3OSw3ICs5NDg1LDcgQEAKIAkJdTMyIHBoeV9hZGRyLCBwYWdlX29mZiwgc2l6ZTsKIAogCQlwaHlfYWRkciA9IG9mZnNldCAmIH5wYWdlbWFzazsKLQkKKwogCQlmb3IgKGogPSAwOyBqIDwgcGFnZXNpemU7IGogKz0gNCkgewogCQkJaWYgKChyZXQgPSB0ZzNfbnZyYW1fcmVhZCh0cCwgcGh5X2FkZHIgKyBqLAogCQkJCQkJKHUzMiAqKSAodG1wICsgaikpKSkKQEAgLTk5MzUsNyArOTk0MSw3IEBACiAJCWlmICghdGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcikgJiYKIAkJICAgIChibXNyICYgQk1TUl9MU1RBVFVTKSkKIAkJCWdvdG8gc2tpcF9waHlfcmVzZXQ7Ci0JCSAgICAKKwogCQllcnIgPSB0ZzNfcGh5X3Jlc2V0KHRwKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CkBAIC0xMDQ1NSw3ICsxMDQ2MSw3IEBACiAJICogV2hlbiB0aGUgZmxhZyBpcyBzZXQsIGl0IG1lYW5zIHRoYXQgR1BJTzEgaXMgdXNlZCBmb3IgZWVwcm9tCiAJICogd3JpdGUgcHJvdGVjdCBhbmQgYWxzbyBpbXBsaWVzIHRoYXQgaXQgaXMgYSBMT00gd2hlcmUgR1BJT3MKIAkgKiBhcmUgbm90IHVzZWQgdG8gc3dpdGNoIHBvd2VyLgotCSAqLyAKKwkgKi8KIAl0ZzNfZ2V0X2VlcHJvbV9od19jZmcodHApOwogCiAJLyogU2V0IHVwIHRwLT5ncmNfbG9jYWxfY3RybCBiZWZvcmUgY2FsbGluZyB0ZzNfc2V0X3Bvd2VyX3N0YXRlKCkuCkBAIC0xMTQ3NCw3ICsxMTQ4MCw2IEBACiAJdHAtPmdyY19tb2RlIHw9IEdSQ19NT0RFX0JTV0FQX05PTkZSTV9EQVRBOwogI2VuZGlmCiAJc3Bpbl9sb2NrX2luaXQoJnRwLT5sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmdHAtPnR4X2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZ0cC0+aW5kaXJlY3RfbG9jayk7CiAJSU5JVF9XT1JLKCZ0cC0+cmVzZXRfdGFzaywgdGczX3Jlc2V0X3Rhc2ssIHRwKTsKIApAQCAtMTE4MTQsNyArMTE4MTksNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB0ZzNfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJnRnM19kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ0ZzNfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHRnM19jbGVhbnVwKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuaCBiL2RyaXZlcnMvbmV0L3RnMy5oCmluZGV4IGJhMmM5ODcxLi4zZWNmMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMjA3OSw5ICsyMDc5LDkgQEAKIAkgKiBsb2NrOiBIZWxkIGR1cmluZyByZXNldCwgUEhZIGFjY2VzcywgdGltZXIsIGFuZCB3aGVuCiAJICogICAgICAgdXBkYXRpbmcgdGczX2ZsYWdzIGFuZCB0ZzNfZmxhZ3MyLgogCSAqCi0JICogdHhfbG9jazogSGVsZCBkdXJpbmcgdGczX3N0YXJ0X3htaXQgYW5kIHRnM190eCBvbmx5Ci0JICogICAgICAgICAgd2hlbiBjYWxsaW5nIG5ldGlmX1tzdGFydHxzdG9wXV9xdWV1ZS4KLQkgKiAgICAgICAgICB0ZzNfc3RhcnRfeG1pdCBpcyBwcm90ZWN0ZWQgYnkgbmV0aWZfdHhfbG9jay4KKwkgKiBuZXRpZl90eF9sb2NrOiBIZWxkIGR1cmluZyB0ZzNfc3RhcnRfeG1pdC4gdGczX3R4IGhvbGRzCisJICogICAgICAgICAgICAgICAgbmV0aWZfdHhfbG9jayB3aGVuIGl0IG5lZWRzIHRvIGNhbGwKKwkgKiAgICAgICAgICAgICAgICBuZXRpZl93YWtlX3F1ZXVlLgogCSAqCiAJICogQm90aCBvZiB0aGVzZSBsb2NrcyBhcmUgdG8gYmUgaGVsZCB3aXRoIEJIIHNhZmV0eS4KIAkgKgpAQCAtMjExOCw4ICsyMTE4LDYgQEAKIAl1MzIJCQkJdHhfY29uczsKIAl1MzIJCQkJdHhfcGVuZGluZzsKIAotCXNwaW5sb2NrX3QJCQl0eF9sb2NrOwotCiAJc3RydWN0IHRnM190eF9idWZmZXJfZGVzYwkqdHhfcmluZzsKIAlzdHJ1Y3QgdHhfcmluZ19pbmZvCQkqdHhfYnVmZmVyczsKIAlkbWFfYWRkcl90CQkJdHhfZGVzY19tYXBwaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGxhbi5jIGIvZHJpdmVycy9uZXQvdGxhbi5jCmluZGV4IDIzYzAwMTcuLjhkODA3YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RsYW4uYworKysgYi9kcml2ZXJzL25ldC90bGFuLmMKQEAgLTMzLDMzICszMywzMyBAQAogICoJCQkJCQluZXcgUENJIEJJT1MgaW50ZXJmYWNlLgogICoJQWxhbiBDb3gJPGFsYW5AcmVkaGF0LmNvbT46CUZpeGVkIHRoZSBvdXQgb2YgbWVtb3J5CiAgKgkJCQkJCWhhbmRsaW5nLgotICogICAgICAKKyAqCiAgKglUb3JiZW4gTWF0aGlhc2VuIDx0b3JiZW4ubWF0aGlhc2VuQGNvbXBhcS5jb20+IE5ldyBNYWludGFpbmVyIQogICoKICAqCXYxLjEgRGVjIDIwLCAxOTk5ICAgIC0gUmVtb3ZlZCBsaW51eCB2ZXJzaW9uIGNoZWNraW5nCi0gKgkJCSAgICAgICBQYXRjaCBmcm9tIFRpZ3JhbiBBaXZhemlhbi4gCisgKgkJCSAgICAgICBQYXRjaCBmcm9tIFRpZ3JhbiBBaXZhemlhbi4KICAqCQkJICAgICAtIHYxLjEgaW5jbHVkZXMgQWxhbidzIFNNUCB1cGRhdGVzLgogICoJCQkgICAgIC0gV2Ugc3RpbGwgaGF2ZSBwcm9ibGVtcyBvbiBTTVAgdGhvdWdoLAotICoJCQkgICAgICAgYnV0IEknbSBsb29raW5nIGludG8gdGhhdC4gCi0gKgkJCQorICoJCQkgICAgICAgYnV0IEknbSBsb29raW5nIGludG8gdGhhdC4KKyAqCiAgKgl2MS4yIEphbiAwMiwgMjAwMCAgICAtIEhvcGVmdWxseSBmaXhlZCB0aGUgU01QIGRlYWRsb2NrLgogICoJCQkgICAgIC0gUmVtb3ZlZCBkZXBlbmRlbmN5IG9mIEhaIGJlaW5nIDEwMC4KLSAqCQkJICAgICAtIFdlIG5vdyBhbGxvdyBoaWdoZXIgcHJpb3JpdHkgdGltZXJzIHRvIAorICoJCQkgICAgIC0gV2Ugbm93IGFsbG93IGhpZ2hlciBwcmlvcml0eSB0aW1lcnMgdG8KICAqCQkJICAgICAgIG92ZXJ3cml0ZSB0aW1lcnMgbGlrZSBUTEFOX1RJTUVSX0FDVElWSVRZCiAgKgkJCSAgICAgICBQYXRjaCBmcm9tIEpvaG4gQ2FnbGUgPGpvaG4uY2FnbGVAY29tcGFxLmNvbT4uCiAgKgkJCSAgICAgLSBGaXhlZCBhIGZldyBjb21waWxlciB3YXJuaW5ncy4KICAqCiAgKgl2MS4zIEZlYiAwNCwgMjAwMCAgICAtIEZpeGVkIHRoZSByZW1haW5pbmcgSFogaXNzdWVzLgotICoJCQkgICAgIC0gUmVtb3ZlZCBjYWxsIHRvIHBjaV9wcmVzZW50KCkuIAorICoJCQkgICAgIC0gUmVtb3ZlZCBjYWxsIHRvIHBjaV9wcmVzZW50KCkuCiAgKgkJCSAgICAgLSBSZW1vdmVkIFNBX0lOVEVSUlVQVCBmbGFnIGZyb20gaXJxIGhhbmRsZXIuCi0gKgkJCSAgICAgLSBBZGRlZCBfX2luaXQgYW5kIF9faW5pdGRhdGEgdG8gcmVkdWNlIHJlc2lzZGVudCAKKyAqCQkJICAgICAtIEFkZGVkIF9faW5pdCBhbmQgX19pbml0ZGF0YSB0byByZWR1Y2UgcmVzaXNkZW50CiAgKgkJCSAgICAgICBjb2RlIHNpemUuCiAgKgkJCSAgICAgLSBEcml2ZXIgbm93IHVzZXMgbW9kdWxlX2luaXQvbW9kdWxlX2V4aXQuCiAgKgkJCSAgICAgLSBSZXdyb3RlIGluaXRfbW9kdWxlIGFuZCB0bGFuX3Byb2JlIHRvCiAgKgkJCSAgICAgICBzaGFyZSBhIGxvdCBtb3JlIGNvZGUuIFdlIG5vdyB1c2UgdGxhbl9wcm9iZQogICoJCQkgICAgICAgd2l0aCBidWlsdGluIGFuZCBtb2R1bGUgZHJpdmVyLgotICoJCQkgICAgIC0gRHJpdmVyIHBvcnRlZCB0byBuZXcgbmV0IEFQSS4gCi0gKgkJCSAgICAgLSB0bGFuLnR4dCBoYXMgYmVlbiByZXdvcmtlZCB0byByZWZsZWN0IGN1cnJlbnQgCisgKgkJCSAgICAgLSBEcml2ZXIgcG9ydGVkIHRvIG5ldyBuZXQgQVBJLgorICoJCQkgICAgIC0gdGxhbi50eHQgaGFzIGJlZW4gcmV3b3JrZWQgdG8gcmVmbGVjdCBjdXJyZW50CiAgKgkJCSAgICAgICBkcml2ZXIgKGFsbW9zdCkKICAqCQkJICAgICAtIE90aGVyIG1pbm9yIHN0dWZmCiAgKgpAQCAtNzQsMTEgKzc0LDExIEBACiAgKgkJCSAgICAgCSAgICAgQXV0by1OZWcgZmFsbGJhY2suCiAgKgogICogCXYxLjYgQXByaWwgMDQsIDIwMDAgIC0gRml4ZWQgZHJpdmVyIHN1cHBvcnQgZm9yIGtlcm5lbC1wYXJhbWV0ZXJzLiBIYXZlbid0Ci0gKiAJCQkgICAgICAgdGVzdGVkIGl0IHRob3VnaCwgYXMgdGhlIGtlcm5lbCBzdXBwb3J0IGlzIGN1cnJlbnRseSAKKyAqIAkJCSAgICAgICB0ZXN0ZWQgaXQgdGhvdWdoLCBhcyB0aGUga2VybmVsIHN1cHBvcnQgaXMgY3VycmVudGx5CiAgKiAJCQkgICAgICAgYnJva2VuICgyLjMuOTlwNHAzKS4KICAqIAkJCSAgICAgLSBVcGRhdGVkIHRsYW4udHh0IGFjY29yZGluZ2x5LgogICogCQkJICAgICAtIEFkanVzdGVkIG1pbmltdW0vbWF4aW11bSBmcmFtZSBsZW5ndGguCi0gKiAJCQkgICAgIC0gVGhlcmUgaXMgbm93IGEgVExBTiB3ZWJzaXRlIHVwIGF0IAorICogCQkJICAgICAtIFRoZXJlIGlzIG5vdyBhIFRMQU4gd2Vic2l0ZSB1cCBhdAogICogCQkJICAgICAgIGh0dHA6Ly90bGFuLmtlcm5lbC5kawogICoKICAqIAl2MS43IEFwcmlsIDA3LCAyMDAwICAtIFN0YXJ0ZWQgdG8gaW1wbGVtZW50IGN1c3RvbSBpb2N0bHMuIERyaXZlciBub3cKQEAgLTkyLDEwICs5MiwxMCBAQAogICogCQkJICAgICAgIGxpbmsgcGFydG5lciBhYmlsaXRpZXMuIFdoZW4gZm9yY2VkIGxpbmsgaXMgdXNlZCwKICAqIAkJCSAgICAgICB0aGUgZHJpdmVyIHdpbGwgcmVwb3J0IHN0YXR1cyBvZiB0aGUgZXN0YWJsaXNoZWQKICAqIAkJCSAgICAgICBsaW5rLgotICogCQkJICAgICAgIFBsZWFzZSByZWFkIHRsYW4udHh0IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiAKLSAqIAkJCSAgICAgLSBSZW1vdmVkIGNhbGwgdG8gY2hlY2tfcmVnaW9uKCksIGFuZCB1c2VkIAorICogCQkJICAgICAgIFBsZWFzZSByZWFkIHRsYW4udHh0IGZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgorICogCQkJICAgICAtIFJlbW92ZWQgY2FsbCB0byBjaGVja19yZWdpb24oKSwgYW5kIHVzZWQKICAqIAkJCSAgICAgICByZXR1cm4gdmFsdWUgb2YgcmVxdWVzdF9yZWdpb24oKSBpbnN0ZWFkLgotICoJCisgKgogICoJdjEuOGEgTWF5IDI4LCAyMDAwICAgLSBNaW5vciB1cGRhdGVzLgogICoKICAqCXYxLjkgSnVseSAyNSwgMjAwMCAgIC0gRml4ZWQgYSBmZXcgcmVtYWluaW5nIEZ1bGwtRHVwbGV4IGlzc3Vlcy4KQEAgLTEwNCwyNSArMTA0LDI1IEBACiAgKgkgICAgICAgICAgICAgICAgICAgICAtIEFkZGVkIHJvdXRpbmUgdG8gbW9uaXRvciBQSFkgc3RhdHVzLgogICoJICAgICAgICAgICAgICAgICAgICAgLSBBZGRlZCBhY3Rpdml0eSBsZWQgc3VwcG9ydCBmb3IgUHJvbGlhbnQgZGV2aWNlcy4KICAqCi0gKgl2MS4xMCBBdWcgMzAsIDIwMDAgICAtIEFkZGVkIHN1cHBvcnQgZm9yIEVJU0EgYmFzZWQgdGxhbiBjb250cm9sbGVycyAKLSAqCQkJICAgICAgIGxpa2UgdGhlIENvbXBhcSBOZXRGbGV4My9FLiAKKyAqCXYxLjEwIEF1ZyAzMCwgMjAwMCAgIC0gQWRkZWQgc3VwcG9ydCBmb3IgRUlTQSBiYXNlZCB0bGFuIGNvbnRyb2xsZXJzCisgKgkJCSAgICAgICBsaWtlIHRoZSBDb21wYXEgTmV0RmxleDMvRS4KICAqCQkJICAgICAtIFJld3JvdGUgdGxhbl9wcm9iZSB0byBiZXR0ZXIgaGFuZGxlIG11bHRpcGxlCiAgKgkJCSAgICAgICBidXMgcHJvYmVzLiBQcm9iaW5nIGFuZCBkZXZpY2Ugc2V0dXAgaXMgbm93CiAgKgkJCSAgICAgICBkb25lIHRocm91Z2ggVExhbl9Qcm9iZSBhbmQgVExhbl9pbml0X29uZS4gQWN0dWFsCi0gKgkJCSAgICAgICBoYXJkd2FyZSBwcm9iZSBpcyBkb25lIHdpdGgga2VybmVsIEFQSSBhbmQgCisgKgkJCSAgICAgICBoYXJkd2FyZSBwcm9iZSBpcyBkb25lIHdpdGgga2VybmVsIEFQSSBhbmQKICAqCQkJICAgICAgIFRMYW5fRWlzYVByb2JlLgogICoJCQkgICAgIC0gQWRqdXN0ZWQgZGVidWcgaW5mb3JtYXRpb24gZm9yIHByb2JpbmcuCi0gKgkJCSAgICAgLSBGaXhlZCBidWcgdGhhdCB3b3VsZCBjYXVzZSBnZW5lcmFsIGRlYnVnIGluZm9ybWF0aW9uIAotICoJCQkgICAgICAgdG8gYmUgcHJpbnRlZCBhZnRlciBkcml2ZXIgcmVtb3ZhbC4gCisgKgkJCSAgICAgLSBGaXhlZCBidWcgdGhhdCB3b3VsZCBjYXVzZSBnZW5lcmFsIGRlYnVnIGluZm9ybWF0aW9uCisgKgkJCSAgICAgICB0byBiZSBwcmludGVkIGFmdGVyIGRyaXZlciByZW1vdmFsLgogICoJCQkgICAgIC0gQWRkZWQgdHJhbnNtaXQgdGltZW91dCBoYW5kbGluZy4KLSAqCQkJICAgICAtIEZpeGVkIE9PTSByZXR1cm4gdmFsdWVzIGluIHRsYW5fcHJvYmUuIAotICoJCQkgICAgIC0gRml4ZWQgcG9zc2libGUgbWVtIGxlYWsgaW4gdGxhbl9leGl0IAorICoJCQkgICAgIC0gRml4ZWQgT09NIHJldHVybiB2YWx1ZXMgaW4gdGxhbl9wcm9iZS4KKyAqCQkJICAgICAtIEZpeGVkIHBvc3NpYmxlIG1lbSBsZWFrIGluIHRsYW5fZXhpdAogICoJCQkgICAgICAgKG5vdyB0bGFuX3JlbW92ZV9vbmUpLgogICoJCQkgICAgIC0gRml4ZWQgdGltZXIgYnVnIGluIFRMYW5fcGh5TW9uaXRvci4KICAqCQkJICAgICAtIFRoaXMgZHJpdmVyIHZlcnNpb24gaXMgYWxwaGEgcXVhbGl0eSwgcGxlYXNlCiAgKgkJCSAgICAgICBzZW5kIG1lIGFueSBidWcgaXNzdWVzIHlvdSBtYXkgZW5jb3VudGVyLgogICoKLSAqCXYxLjExIEF1ZyAzMSwgMjAwMCAgIC0gRG8gbm90IHRyeSB0byByZWdpc3RlciBpcnEgMCBpZiBubyBpcnEgbGluZSB3YXMgCisgKgl2MS4xMSBBdWcgMzEsIDIwMDAgICAtIERvIG5vdCB0cnkgdG8gcmVnaXN0ZXIgaXJxIDAgaWYgbm8gaXJxIGxpbmUgd2FzCiAgKgkJCSAgICAgICBzZXQgZm9yIEVJU0EgY2FyZHMuCiAgKgkJCSAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBOZXRGbGV4My9FIHdpdGggbmliYmxlLXJhdGUKICAqCQkJICAgICAgIDEwQmFzZS1UIFBIWS4gVGhpcyBpcyB1bnRlc3RldCBhcyBJIGhhdmVuJ3QgZ290CkBAIC0xNDIsNyArMTQyLDcgQEAKICAqCQkJICAgICAtIEFkZGVkIHRoZSBiYnVmIG9wdGlvbiBhcyBhIGtlcm5lbCBwYXJhbWV0ZXIuCiAgKgkJCSAgICAgLSBGaXhlZCBpb2FkZHIgcHJvYmUgYnVnLgogICoJCQkgICAgIC0gRml4ZWQgc3R1cGlkIGRlYWRsb2NrIHdpdGggTUlJIGludGVycnVwdHMuCi0gKgkJCSAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBzcGVlZC9kdXBsZXggc2VsZWN0aW9uIHdpdGggCisgKgkJCSAgICAgLSBBZGRlZCBzdXBwb3J0IGZvciBzcGVlZC9kdXBsZXggc2VsZWN0aW9uIHdpdGgKICAqCQkJICAgICAgIG11bHRpcGxlIG5pY3MuCiAgKgkJCSAgICAgLSBBZGRlZCBwYXJ0bHkgZml4IGZvciBUWCBDaGFubmVsIGxvY2t1cCB3aXRoCiAgKgkJCSAgICAgICBUTEFOIHYxLjAgc2lsaWNvbi4gVGhpcyBuZWVkcyB0byBiZSBpbnZlc3RpZ2F0ZWQKQEAgLTIyNiw3ICsyMjYsNyBAQAogc3RhdGljICBpbnQgdGxhbl9oYXZlX2Vpc2E7CiAKIHN0YXRpYyBjb25zdCBjaGFyICptZWRpYVtdID0gewotCSIxMEJhc2VULUhEICIsICIxMEJhc2VULUZEICIsIjEwMGJhc2VUeC1IRCAiLCAKKwkiMTBCYXNlVC1IRCAiLCAiMTBCYXNlVC1GRCAiLCIxMDBiYXNlVHgtSEQgIiwKIAkiMTAwYmFzZVR4LUZEIiwgIjEwMGJhc2VUNCIsIE5VTEwKIH07CiAKQEAgLTI0OSw3ICsyNDksNyBAQAogCXsgIkNvbXBhcSBOZXRlbGxpZ2VudCAxMC8xMDAgVFggVVRQIiwgVExBTl9BREFQVEVSX0FDVElWSVRZX0xFRCwgMHg4MyB9LAogCXsgIkNvbXBhcSBOZXRlbGxpZ2VudCAxMCBULzIgUENJIFVUUC9Db2F4IiwgVExBTl9BREFQVEVSX05PTkUsIDB4ODMgfSwKIAl7ICJDb21wYXEgTmV0RmxleC0zL0UiLCBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVEIHwgCS8qIEVJU0EgY2FyZCAqLwotCSAgICAgICAgICAgICAgICAgICAgICAgIFRMQU5fQURBUFRFUl9VTk1BTkFHRURfUEhZIHwgVExBTl9BREFQVEVSX0JJVF9SQVRFX1BIWSwgMHg4MyB9LAkKKwkgICAgICAgICAgICAgICAgICAgICAgICBUTEFOX0FEQVBURVJfVU5NQU5BR0VEX1BIWSB8IFRMQU5fQURBUFRFUl9CSVRfUkFURV9QSFksIDB4ODMgfSwKIAl7ICJDb21wYXEgTmV0RmxleC0zL0UiLCBUTEFOX0FEQVBURVJfQUNUSVZJVFlfTEVELCAweDgzIH0sIC8qIEVJU0EgY2FyZCAqLwogfTsKIApAQCAtMjgyLDcgKzI4Miw3IEBACiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDEyIH0sCiAJeyAwLH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgdGxhbl9wY2lfdGJsKTsJCQorTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHRsYW5fcGNpX3RibCk7CiAKIHN0YXRpYyB2b2lkCVRMYW5fRWlzYVByb2JlKCB2b2lkICk7CiBzdGF0aWMgdm9pZAlUTGFuX0Vpc2FfQ2xlYW51cCggdm9pZCApOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiBzdGF0aWMgaW50CVRMYW5fRWVSZWFkQnl0ZSggc3RydWN0IG5ldF9kZXZpY2UgKiwgdTgsIHU4ICogKTsKIAogCi1zdGF0aWMgdm9pZCAKK3N0YXRpYyB2b2lkCiBUTGFuX1N0b3JlU0tCKCBzdHJ1Y3QgdGxhbl9saXN0X3RhZyAqdGFnLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXNrYjsKQEAgLTM4NCwxMSArMzg0LDExIEBACiB7CiAJVExhblByaXZhdGVJbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQkKKwogCWlmICghaW5faXJxKCkpCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKCBwcml2LT50aW1lci5mdW5jdGlvbiAhPSBOVUxMICYmCi0JCXByaXYtPnRpbWVyVHlwZSAhPSBUTEFOX1RJTUVSX0FDVElWSVRZICkgeyAKKwkJcHJpdi0+dGltZXJUeXBlICE9IFRMQU5fVElNRVJfQUNUSVZJVFkgKSB7CiAJCWlmICghaW5faXJxKCkpCiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKQEAgLTQwMSw3ICs0MDEsNyBAQAogCXByaXYtPnRpbWVyU2V0QXQgPSBqaWZmaWVzOwogCXByaXYtPnRpbWVyVHlwZSA9IHR5cGU7CiAJbW9kX3RpbWVyKCZwcml2LT50aW1lciwgamlmZmllcyArIHRpY2tzKTsKLQkKKwogfSAvKiBUTGFuX1NldFRpbWVyICovCiAKIApAQCAtNDM5LDcgKzQzOSw3IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSggcGRldiApOwogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JCisKIAl1bnJlZ2lzdGVyX25ldGRldiggZGV2ICk7CiAKIAlpZiAoIHByaXYtPmRtYVN0b3JhZ2UgKSB7CkBAIC00NDksMjUgKzQ0OSwyNSBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogI2VuZGlmCi0JCisKIAlmcmVlX25ldGRldiggZGV2ICk7Ci0JCQorCiAJcGNpX3NldF9kcnZkYXRhKCBwZGV2LCBOVUxMICk7Ci19IAorfQogCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdGxhbl9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInRsYW4iLAogCS5pZF90YWJsZQk9IHRsYW5fcGNpX3RibCwKIAkucHJvYmUJCT0gdGxhbl9pbml0X29uZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRsYW5fcmVtb3ZlX29uZSksCQorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AodGxhbl9yZW1vdmVfb25lKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHRsYW5fcHJvYmUodm9pZCkKIHsKIAlzdGF0aWMgaW50CXBhZF9hbGxvY2F0ZWQ7Ci0JCisKIAlwcmludGsoS0VSTl9JTkZPICIlcyIsIHRsYW5fYmFubmVyKTsKLQkKKwogCVRMYW5QYWRCdWZmZXIgPSAodTggKikgcGNpX2FsbG9jX2NvbnNpc3RlbnQoTlVMTCwgVExBTl9NSU5fRlJBTUVfU0laRSwgJlRMYW5QYWRCdWZmZXJETUEpOwogCiAJaWYgKFRMYW5QYWRCdWZmZXIgPT0gTlVMTCkgewpAQCAtNDc5LDE1ICs0NzksMTUgQEAKIAlwYWRfYWxsb2NhdGVkID0gMTsKIAogCVRMQU5fREJHKFRMQU5fREVCVUdfUFJPQkUsICJTdGFydGluZyBQQ0kgUHJvYmUuLi4uXG4iKTsKLQkKKwogCS8qIFVzZSBuZXcgc3R5bGUgUENJIHByb2JpbmcuIE5vdyB0aGUga2VybmVsIHdpbGwKIAkgICBkbyBtb3N0IG9mIHRoaXMgZm9yIHVzICovCiAJcGNpX3JlZ2lzdGVyX2RyaXZlcigmdGxhbl9kcml2ZXIpOwogCiAJVExBTl9EQkcoVExBTl9ERUJVR19QUk9CRSwgIlN0YXJ0aW5nIEVJU0EgUHJvYmUuLi4uXG4iKTsKIAlUTGFuX0Vpc2FQcm9iZSgpOwotCQkKLQlwcmludGsoS0VSTl9JTkZPICJUTEFOOiAlZCBkZXZpY2UlcyBpbnN0YWxsZWQsIFBDSTogJWQgIEVJU0E6ICVkXG4iLCAKKworCXByaW50ayhLRVJOX0lORk8gIlRMQU46ICVkIGRldmljZSVzIGluc3RhbGxlZCwgUENJOiAlZCAgRUlTQTogJWRcbiIsCiAJCSBUTGFuRGV2aWNlc0luc3RhbGxlZCwgVExhbkRldmljZXNJbnN0YWxsZWQgPT0gMSA/ICIiIDogInMiLAogCQkgdGxhbl9oYXZlX3BjaSwgdGxhbl9oYXZlX2Vpc2EpOwogCkBAIC00OTgsNyArNDk4LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9Ci0JCisKIAogc3RhdGljIGludCBfX2RldmluaXQgdGxhbl9pbml0X29uZSggc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCkBAIC01MTMsMTEgKzUxMywxMSBAQAogCSAqCiAJICoJUmV0dXJuczoKIAkgKgkJMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG9uIGVycm9yCi0JICoJUGFybXM6IAorCSAqCVBhcm1zOgogCSAqCQlub25lCiAJICoKIAkgKglUaGUgbmFtZSBpcyBsb3dlciBjYXNlIHRvIGZpdCBpbiB3aXRoIGFsbCB0aGUgcmVzdCBvZgotCSAqCXRoZSBuZXRjYXJkX3Byb2JlIG5hbWVzLiAgVGhpcyBmdW5jdGlvbiBsb29rcyBmb3IgCisJICoJdGhlIG5ldGNhcmRfcHJvYmUgbmFtZXMuICBUaGlzIGZ1bmN0aW9uIGxvb2tzIGZvcgogCSAqCWFub3RoZXIgVExhbiBiYXNlZCBhZGFwdGVyLCBzZXR0aW5nIGl0IHVwIHdpdGggdGhlCiAJICoJYWxsb2NhdGVkIGRldmljZSBzdHJ1Y3QgaWYgb25lIGlzIGZvdW5kLgogCSAqCXRsYW5fcHJvYmUgaGFzIGJlZW4gcG9ydGVkIHRvIHRoZSBuZXcgbmV0IEFQSSBhbmQKQEAgLTUyNiw3ICs1MjYsNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBUTGFuX3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgCitzdGF0aWMgaW50IF9fZGV2aW5pdCBUTGFuX3Byb2JlMShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQlsb25nIGlvYWRkciwgaW50IGlycSwgaW50IHJldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCApCiB7CiAKQEAgLTU1OCwxMSArNTU4LDExIEBACiAJfQogCVNFVF9NT0RVTEVfT1dORVIoZGV2KTsKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwotCQorCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAKIAlwcml2LT5wY2lEZXYgPSBwZGV2OwotCQorCiAJLyogSXMgdGhpcyBhIFBDSSBkZXZpY2U/ICovCiAJaWYgKHBkZXYpIHsKIAkJdTMyIAkJICAgcGNpX2lvX2Jhc2UgPSAwOwpAQCAtNTkwLDEwICs1OTAsMTAgQEAKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX291dF9mcmVlX2RldjsKIAkJfQotCQkKKwogCQlkZXYtPmJhc2VfYWRkciA9IHBjaV9pb19iYXNlOwogCQlkZXYtPmlycSA9IHBkZXYtPmlycTsKLQkJcHJpdi0+YWRhcHRlclJldiA9IHBjaV9yZXY7IAorCQlwcml2LT5hZGFwdGVyUmV2ID0gcGNpX3JldjsKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCkBAIC02MTgsNyArNjE4LDcgQEAKIAkJcHJpdi0+YXVpICAgID0gZGV2LT5tZW1fc3RhcnQgJiAweDAxOwogCQlwcml2LT5kdXBsZXggPSAoKGRldi0+bWVtX3N0YXJ0ICYgMHgwNikgPT0gMHgwNikgPyAwIDogKGRldi0+bWVtX3N0YXJ0ICYgMHgwNikgPj4gMTsKIAkJcHJpdi0+c3BlZWQgID0gKChkZXYtPm1lbV9zdGFydCAmIDB4MTgpID09IDB4MTgpID8gMCA6IChkZXYtPm1lbV9zdGFydCAmIDB4MTgpID4+IDM7Ci0JCisKIAkJaWYgKHByaXYtPnNwZWVkID09IDB4MSkgewogCQkJcHJpdi0+c3BlZWQgPSBUTEFOX1NQRUVEXzEwOwogCQl9IGVsc2UgaWYgKHByaXYtPnNwZWVkID09IDB4MikgewpAQCAtNjMxLDEzICs2MzEsMTMgQEAKIAkJcHJpdi0+ZHVwbGV4ID0gZHVwbGV4W2JvYXJkc19mb3VuZF07CiAJCXByaXYtPmRlYnVnID0gZGVidWc7CiAJfQotCQorCiAJLyogVGhpcyB3aWxsIGJlIHVzZWQgd2hlbiB3ZSBnZXQgYW4gYWRhcHRlciBlcnJvciBmcm9tCiAJICogd2l0aGluIG91ciBpcnEgaGFuZGxlciAqLwogCUlOSVRfV09SSygmcHJpdi0+dGxhbl90cXVldWUsICh2b2lkICopKHZvaWQqKVRMYW5fdHhfdGltZW91dCwgZGV2KTsKIAogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKLQkKKwogCXJjID0gVExhbl9Jbml0KGRldik7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVExBTjogQ291bGQgbm90IHNldCB1cCBkZXZpY2UuXG4iKTsKQEAgLTY1MCwxMCArNjUwLDEwIEBACiAJCWdvdG8gZXJyX291dF91bmluaXQ7CiAJfQogCi0JCisKIAlUTGFuRGV2aWNlc0luc3RhbGxlZCsrOwogCWJvYXJkc19mb3VuZCsrOwotCQorCiAJLyogcGRldiBpcyBOVUxMIGlmIHRoaXMgaXMgYW4gRUlTQSBkZXZpY2UgKi8KIAlpZiAocGRldikKIAkJdGxhbl9oYXZlX3BjaSsrOwpAQCAtNjYyLDcgKzY2Miw3IEBACiAJCVRMYW5fRWlzYV9EZXZpY2VzID0gZGV2OwogCQl0bGFuX2hhdmVfZWlzYSsrOwogCX0KLQkKKwogCXByaW50ayhLRVJOX0lORk8gIlRMQU46ICVzIGlycT0lMmQsIGlvPSUwNHgsICVzLCBSZXYuICVkXG4iLAogCQkJZGV2LT5uYW1lLAogCQkJKGludCkgZGV2LT5pcnEsCkBAIC02OTIsNyArNjkyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCVRMYW5Qcml2YXRlSW5mbyAqcHJpdjsKLQkKKwogCXdoaWxlKCB0bGFuX2hhdmVfZWlzYSApIHsKIAkJZGV2ID0gVExhbl9FaXNhX0RldmljZXM7CiAJCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzA2LDggKzcwNiw4IEBACiAJCXRsYW5faGF2ZV9laXNhLS07CiAJfQogfQotCQotCQkKKworCiBzdGF0aWMgdm9pZCBfX2V4aXQgdGxhbl9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZ0bGFuX2RyaXZlcik7CkBAIC03MzQsNTIgKzczNCw1MiBAQAogCSAqICAJUGFybXM6CSBOb25lCiAJICoKIAkgKgotCSAqICAJVGhpcyBmdW5jdGlvbnMgcHJvYmVzIGZvciBFSVNBIGRldmljZXMgYW5kIGNhbGxzIAotCSAqICAJVExhbl9wcm9iZTEgd2hlbiBvbmUgaXMgZm91bmQuIAorCSAqICAJVGhpcyBmdW5jdGlvbnMgcHJvYmVzIGZvciBFSVNBIGRldmljZXMgYW5kIGNhbGxzCisJICogIAlUTGFuX3Byb2JlMSB3aGVuIG9uZSBpcyBmb3VuZC4KIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdm9pZCAgX19pbml0IFRMYW5fRWlzYVByb2JlICh2b2lkKSAKK3N0YXRpYyB2b2lkICBfX2luaXQgVExhbl9FaXNhUHJvYmUgKHZvaWQpCiB7CiAJbG9uZyAJaW9hZGRyOwogCWludCAJcmMgPSAtRU5PREVWOwogCWludCAJaXJxOwogCXUxNglkZXZpY2VfaWQ7CiAKLQlpZiAoIUVJU0FfYnVzKSB7CQorCWlmICghRUlTQV9idXMpIHsKIAkJVExBTl9EQkcoVExBTl9ERUJVR19QUk9CRSwgIk5vIEVJU0EgYnVzIHByZXNlbnRcbiIpOwogCQlyZXR1cm47CiAJfQotCQorCiAJLyogTG9vcCB0aHJvdWdoIGFsbCBzbG90cyBvZiB0aGUgRUlTQSBidXMgKi8KIAlmb3IgKGlvYWRkciA9IDB4MTAwMDsgaW9hZGRyIDwgMHg5MDAwOyBpb2FkZHIgKz0gMHgxMDAwKSB7Ci0JCQotCVRMQU5fREJHKFRMQU5fREVCVUdfUFJPQkUsIkVJU0FfSUQgMHglNHg6IDB4JTR4XG4iLCAoaW50KSBpb2FkZHIgKyAweEM4MCwgaW53KGlvYWRkciArIEVJU0FfSUQpKTsJCisKKwlUTEFOX0RCRyhUTEFOX0RFQlVHX1BST0JFLCJFSVNBX0lEIDB4JTR4OiAweCU0eFxuIiwgKGludCkgaW9hZGRyICsgMHhDODAsIGludyhpb2FkZHIgKyBFSVNBX0lEKSk7CiAJVExBTl9EQkcoVExBTl9ERUJVR19QUk9CRSwiRUlTQV9JRCAweCU0eDogMHglNHhcbiIsIChpbnQpIGlvYWRkciArIDB4QzgyLCBpbncoaW9hZGRyICsgRUlTQV9JRDIpKTsKIAogCiAJCVRMQU5fREJHKFRMQU5fREVCVUdfUFJPQkUsICJQcm9iaW5nIGZvciBFSVNBIGFkYXB0ZXIgYXQgSU86IDB4JTR4IDogIiwKIAkJCQkgICAJKGludCkgaW9hZGRyKTsKLQkJaWYgKHJlcXVlc3RfcmVnaW9uKGlvYWRkciwgMHgxMCwgVExhblNpZ25hdHVyZSkgPT0gTlVMTCkgCisJCWlmIChyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIDB4MTAsIFRMYW5TaWduYXR1cmUpID09IE5VTEwpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoaW53KGlvYWRkciArIEVJU0FfSUQpICE9IDB4MTEwRSkgewkJCisJCWlmIChpbncoaW9hZGRyICsgRUlTQV9JRCkgIT0gMHgxMTBFKSB7CiAJCQlyZWxlYXNlX3JlZ2lvbihpb2FkZHIsIDB4MTApOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJCisKIAkJZGV2aWNlX2lkID0gaW53KGlvYWRkciArIEVJU0FfSUQyKTsKLQkJaWYgKGRldmljZV9pZCAhPSAgMHgyMEYxICYmIGRldmljZV9pZCAhPSAweDQwRjEpIHsgCQkKKwkJaWYgKGRldmljZV9pZCAhPSAgMHgyMEYxICYmIGRldmljZV9pZCAhPSAweDQwRjEpIHsKIAkJCXJlbGVhc2VfcmVnaW9uIChpb2FkZHIsIDB4MTApOwogCQkJZ290byBvdXQ7CiAJCX0KLQkJCisKIAkgCWlmIChpbmIoaW9hZGRyICsgRUlTQV9DUikgIT0gMHgxKSB7IAkvKiBDaGVjayBpZiBhZGFwdGVyIGlzIGVuYWJsZWQgKi8KIAkJCXJlbGVhc2VfcmVnaW9uIChpb2FkZHIsIDB4MTApOwogCQkJZ290byBvdXQyOwogCQl9Ci0JCQotCQlpZiAoZGVidWcgPT0gMHgxMCkJCQorCisJCWlmIChkZWJ1ZyA9PSAweDEwKQogCQkJcHJpbnRrKCJGb3VuZCBvbmVcbiIpOwogCiAKQEAgLTc5OSwxNCArNzk5LDE0IEBACiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWdvdG8gb3V0OwotCQl9ICAgICAgICAgICAgICAgCi0JCQotCQkKKwkJfQorCisKIAkJLyogU2V0dXAgdGhlIG5ld2x5IGZvdW5kIGVpc2EgYWRhcHRlciAqLwogCQlyYyA9IFRMYW5fcHJvYmUxKCBOVUxMLCBpb2FkZHIsIGlycSwKIAkJCQkJMTIsIE5VTEwpOwogCQljb250aW51ZTsKLQkJCisKIAkJb3V0OgogCQkJaWYgKGRlYnVnID09IDB4MTApCiAJCQkJcHJpbnRrKCJOb25lIGZvdW5kXG4iKTsKQEAgLTgxNSw3ICs4MTUsNyBAQAogCQlvdXQyOglpZiAoZGVidWcgPT0gMHgxMCkKIAkJCQlwcmludGsoIkNhcmQgZm91bmQgYnV0IGl0IGlzIG5vdCBlbmFibGVkLCBza2lwcGluZ1xuIik7CiAJCQljb250aW51ZTsKLQkJCisKIAl9CiAKIH0gLyogVExhbl9FaXNhUHJvYmUgKi8KQEAgLTgyOSw3ICs4MjksNyBAQAogfQogI2VuZGlmCiAKLQkKKwogCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04NDYsNyArODQ2LDcgQEAKIAkgKglhZGRyZXNzZXMsIGFsbG9jYXRlcyBtZW1vcnkgZm9yIHRoZSBsaXN0cyBhbmQgYm91bmNlCiAJICoJYnVmZmVycywgcmV0cmlldmVzIHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBlZXByb20KIAkgKglhbmQgYXNzaWduZXMgdGhlIGRldmljZSdzIG1ldGhvZHMuCi0JICoJCisJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0YXRpYyBpbnQgVExhbl9Jbml0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKQEAgLTg1Nyw3ICs4NTcsNyBAQAogCVRMYW5Qcml2YXRlSW5mbwkqcHJpdjsKIAogCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwotCQorCiAJaWYgKCBiYnVmICkgewogCQlkbWFfc2l6ZSA9ICggVExBTl9OVU1fUlhfTElTVFMgKyBUTEFOX05VTV9UWF9MSVNUUyApCiAJICAgICAgICAgICAqICggc2l6ZW9mKFRMYW5MaXN0KSArIFRMQU5fTUFYX0ZSQU1FX1NJWkUgKTsKQEAgLTg2NywxNCArODY3LDE0IEBACiAJfQogCXByaXYtPmRtYVN0b3JhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lEZXYsIGRtYV9zaXplLCAmcHJpdi0+ZG1hU3RvcmFnZURNQSk7CiAJcHJpdi0+ZG1hU2l6ZSA9IGRtYV9zaXplOwotCQorCiAJaWYgKCBwcml2LT5kbWFTdG9yYWdlID09IE5VTEwgKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVExBTjogIENvdWxkIG5vdCBhbGxvY2F0ZSBsaXN0cyBhbmQgYnVmZmVycyBmb3IgJXMuXG4iLAogCQkJZGV2LT5uYW1lICk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQoIHByaXYtPmRtYVN0b3JhZ2UsIDAsIGRtYV9zaXplICk7Ci0JcHJpdi0+cnhMaXN0ID0gKFRMYW5MaXN0ICopIAorCXByaXYtPnJ4TGlzdCA9IChUTGFuTGlzdCAqKQogCQkgICAgICAgKCAoICggKHUzMikgcHJpdi0+ZG1hU3RvcmFnZSApICsgNyApICYgMHhGRkZGRkZGOCApOwogCXByaXYtPnJ4TGlzdERNQSA9ICggKCAoICh1MzIpIHByaXYtPmRtYVN0b3JhZ2VETUEgKSArIDcgKSAmIDB4RkZGRkZGRjggKTsKIAlwcml2LT50eExpc3QgPSBwcml2LT5yeExpc3QgKyBUTEFOX05VTV9SWF9MSVNUUzsKQEAgLTk0MSwxOCArOTQxLDE4IEBACiB7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQJCWVycjsKLQkKKwogCXByaXYtPnRsYW5SZXYgPSBUTGFuX0Rpb1JlYWQ4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9ERUZfUkVWSVNJT04gKTsKIAllcnIgPSByZXF1ZXN0X2lycSggZGV2LT5pcnEsIFRMYW5fSGFuZGxlSW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgVExhblNpZ25hdHVyZSwgZGV2ICk7Ci0JCisKIAlpZiAoIGVyciApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJUTEFOOiAgQ2Fubm90IG9wZW4gJXMgYmVjYXVzZSBJUlEgJWQgaXMgYWxyZWFkeSBpbiB1c2UuXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxICk7CiAJCXJldHVybiBlcnI7CiAJfQotCQorCiAJaW5pdF90aW1lcigmcHJpdi0+dGltZXIpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0JCisKIAkvKiBOT1RFOiBJdCBtaWdodCBub3QgYmUgbmVjZXNzYXJ5IHRvIHJlYWQgdGhlIHN0YXRzIGJlZm9yZSBhCiAJCQkgcmVzZXQgaWYgeW91IGRvbid0IGNhcmUgd2hhdCB0aGUgdmFsdWVzIGFyZS4KIAkqLwpAQCAtOTcwLDEyICs5NzAsMTIgQEAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqCVRMYW5faW9jdGwKLQkgKgkKKwkgKgogCSAqCVJldHVybnM6CiAJICoJCTAgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UKIAkgKglQYXJhbXM6CiAJICoJCWRldglzdHJ1Y3R1cmUgb2YgZGV2aWNlIHRvIHJlY2VpdmUgaW9jdGwuCi0JICoJCQorCSAqCiAJICoJCXJxCWlmcmVxIHN0cnVjdHVyZSB0byBob2xkIHVzZXJzcGFjZSBkYXRhLgogCSAqCiAJICoJCWNtZAlpb2N0bCBjb21tYW5kLgpAQCAtOTg4LDcgKzk4OCw3IEBACiAJVExhblByaXZhdGVJbmZvICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWlpX2lvY3RsX2RhdGEgKmRhdGEgPSBpZl9taWkocnEpOwogCXUzMiBwaHkgICA9IHByaXYtPnBoeVtwcml2LT5waHlOdW1dOwotCQorCiAJaWYgKCFwcml2LT5waHlPbmxpbmUpCiAJCXJldHVybiAtRUFHQUlOOwogCkBAIC0xMDAwLDcgKzEwMDAsNyBAQAogCWNhc2UgU0lPQ0dNSUlSRUc6CQkvKiBSZWFkIE1JSSBQSFkgcmVnaXN0ZXIuICovCiAJCQlUTGFuX01paVJlYWRSZWcoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgJmRhdGEtPnZhbF9vdXQpOwogCQkJcmV0dXJuIDA7Ci0JCQorCiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KIAkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKQEAgLTEwMTksMzEgKzEwMTksMzEgQEAKIAkgKiAJUmV0dXJuczogbm90aGluZwogCSAqCiAJICogCVBhcmFtczoKLQkgKiAJCWRldglzdHJ1Y3R1cmUgb2YgZGV2aWNlIHdoaWNoIHRpbWVkIG91dCAKKwkgKiAJCWRldglzdHJ1Y3R1cmUgb2YgZGV2aWNlIHdoaWNoIHRpbWVkIG91dAogCSAqIAkJCWR1cmluZyB0cmFuc21pdC4KIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgVExhbl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JCisKIAlUTEFOX0RCRyggVExBTl9ERUJVR19HTlJMLCAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dC5cbiIsIGRldi0+bmFtZSk7Ci0JCisKIAkvKiBPayBzbyB3ZSB0aW1lZCBvdXQsIGxldHMgc2VlIHdoYXQgd2UgY2FuIGRvIGFib3V0IGl0Li4uKi8KIAlUTGFuX0ZyZWVMaXN0cyggZGV2ICk7Ci0JVExhbl9SZXNldExpc3RzKCBkZXYgKTsJCQorCVRMYW5fUmVzZXRMaXN0cyggZGV2ICk7CiAJVExhbl9SZWFkQW5kQ2xlYXJTdGF0cyggZGV2LCBUTEFOX0lHTk9SRSApOwogCVRMYW5fUmVzZXRBZGFwdGVyKCBkZXYgKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQluZXRpZl93YWtlX3F1ZXVlKCBkZXYgKTsJCisJbmV0aWZfd2FrZV9xdWV1ZSggZGV2ICk7CiAKIH0KLQkKKwogCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICoJVExhbl9TdGFydFR4Ci0JICogIAorCSAqCiAJICoJUmV0dXJuczoKIAkgKgkJMCBvbiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgogCSAqCVBhcm1zOgpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAogCXRhaWxfbGlzdCA9IHByaXYtPnR4TGlzdCArIHByaXYtPnR4VGFpbDsKIAl0YWlsX2xpc3RfcGh5cyA9IHByaXYtPnR4TGlzdERNQSArIHNpemVvZihUTGFuTGlzdCkgKiBwcml2LT50eFRhaWw7Ci0JCisKIAlpZiAoIHRhaWxfbGlzdC0+Y1N0YXQgIT0gVExBTl9DU1RBVF9VTlVTRUQgKSB7CiAJCVRMQU5fREJHKCBUTEFOX0RFQlVHX1RYLCAiVFJBTlNNSVQ6ICAlcyBpcyBidXN5IChIZWFkPSVkIFRhaWw9JWQpXG4iLCBkZXYtPm5hbWUsIHByaXYtPnR4SGVhZCwgcHJpdi0+dHhUYWlsICk7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKQEAgLTExMzIsNyArMTEzMiw3IEBACiAKIAlpZiAoIGJidWYgKQogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkKKwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCXJldHVybiAwOwogCkBAIC0xMTQzLDggKzExNDMsOCBAQAogCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCSAqCVRMYW5fSGFuZGxlSW50ZXJydXB0Ci0JICogIAotCSAqCVJldHVybnM6CQorCSAqCisJICoJUmV0dXJuczoKIAkgKgkJTm90aGluZwogCSAqCVBhcm1zOgogCSAqCQlpcnEJVGhlIGxpbmUgb24gd2hpY2ggdGhlIGludGVycnVwdApAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKglUTGFuX0Nsb3NlCi0JICogIAorCSAqCiAJICogCVJldHVybnM6CiAJICoJCUFuIGVycm9yIGNvZGUuCiAJICoJUGFybXM6CkBAIC0xMjI0LDcgKzEyMjQsNyBAQAogCQlkZWxfdGltZXJfc3luYyggJnByaXYtPnRpbWVyICk7CiAJCXByaXYtPnRpbWVyLmZ1bmN0aW9uID0gTlVMTDsKIAl9Ci0JCisKIAlmcmVlX2lycSggZGV2LT5pcnEsIGRldiApOwogCVRMYW5fRnJlZUxpc3RzKCBkZXYgKTsKIAlUTEFOX0RCRyggVExBTl9ERUJVR19HTlJMLCAiRGV2aWNlICVzIGNsb3NlZC5cbiIsIGRldi0+bmFtZSApOwpAQCAtMTIzOCw3ICsxMjM4LDcgQEAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKglUTGFuX0dldFN0YXRzCi0JICogIAorCSAqCiAJICoJUmV0dXJuczoKIAkgKgkJQSBwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KIAkgKglQYXJtczoKQEAgLTEyNjMsNyArMTI2Myw3IEBACiAJVExBTl9EQkcoIFRMQU5fREVCVUdfVFgsICJUUkFOU01JVDogICVzIEJ1c3kgY291bnQgPSAlZFxuIiwgZGV2LT5uYW1lLCBwcml2LT50eEJ1c3lDb3VudCApOwogCWlmICggZGVidWcgJiBUTEFOX0RFQlVHX0dOUkwgKSB7CiAJCVRMYW5fUHJpbnREaW8oIGRldi0+YmFzZV9hZGRyICk7Ci0JCVRMYW5fUGh5UHJpbnQoIGRldiApOwkJCisJCVRMYW5fUGh5UHJpbnQoIGRldiApOwogCX0KIAlpZiAoIGRlYnVnICYgVExBTl9ERUJVR19MSVNUICkgewogCQlmb3IgKCBpID0gMDsgaSA8IFRMQU5fTlVNX1JYX0xJU1RTOyBpKysgKQpAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIAkJZm9yICggaSA9IDA7IGkgPCBUTEFOX05VTV9UWF9MSVNUUzsgaSsrICkKIAkJCVRMYW5fUHJpbnRMaXN0KCBwcml2LT50eExpc3QgKyBpLCAiVFgiLCBpICk7CiAJfQotCQorCiAJcmV0dXJuICggJiggKFRMYW5Qcml2YXRlSW5mbyAqKSBuZXRkZXZfcHJpdihkZXYpICktPnN0YXRzICk7CiAKIH0gLyogVExhbl9HZXRTdGF0cyAqLwpAQCAtMTI4MSw3ICsxMjgxLDcgQEAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKglUTGFuX1NldE11bHRpY2FzdExpc3QKLQkgKiAgCisJICoKIAkgKglSZXR1cm5zOgogCSAqCQlOb3RoaW5nCiAJICoJUGFybXM6CkBAIC0xMzAwLDcgKzEzMDAsNyBAQAogCSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHZvaWQgVExhbl9TZXRNdWx0aWNhc3RMaXN0KCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ICkKLXsJCit7CiAJc3RydWN0IGRldl9tY19saXN0CSpkbWkgPSBkZXYtPm1jX2xpc3Q7CiAJdTMyCQkJaGFzaDEgPSAwOwogCXUzMgkJCWhhc2gyID0gMDsKQEAgLTEzMTUsNyArMTMxNSw3IEBACiAJCXRtcCA9IFRMYW5fRGlvUmVhZDgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX05FVF9DTUQgKTsKIAkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX05FVF9DTUQsIHRtcCAmIH5UTEFOX05FVF9DTURfQ0FGICk7CiAJCWlmICggZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSApIHsKLQkJCWZvciAoIGkgPSAwOyBpIDwgMzsgaSsrICkgCisJCQlmb3IgKCBpID0gMDsgaSA8IDM7IGkrKyApCiAJCQkJVExhbl9TZXRNYWMoIGRldiwgaSArIDEsIE5VTEwgKTsKIAkJCVRMYW5fRGlvV3JpdGUzMiggZGV2LT5iYXNlX2FkZHIsIFRMQU5fSEFTSF8xLCAweEZGRkZGRkZGICk7CiAJCQlUTGFuX0Rpb1dyaXRlMzIoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0hBU0hfMiwgMHhGRkZGRkZGRiApOwpAQCAtMTMyNSwxNCArMTMyNSwxNCBAQAogCQkJCQlUTGFuX1NldE1hYyggZGV2LCBpICsgMSwgKGNoYXIgKikgJmRtaS0+ZG1pX2FkZHIgKTsKIAkJCQl9IGVsc2UgewogCQkJCQlvZmZzZXQgPSBUTGFuX0hhc2hGdW5jKCAodTggKikgJmRtaS0+ZG1pX2FkZHIgKTsKLQkJCQkJaWYgKCBvZmZzZXQgPCAzMiApIAorCQkJCQlpZiAoIG9mZnNldCA8IDMyICkKIAkJCQkJCWhhc2gxIHw9ICggMSA8PCBvZmZzZXQgKTsKIAkJCQkJZWxzZQogCQkJCQkJaGFzaDIgfD0gKCAxIDw8ICggb2Zmc2V0IC0gMzIgKSApOwogCQkJCX0KIAkJCQlkbWkgPSBkbWktPm5leHQ7CiAJCQl9Ci0JCQlmb3IgKCA7IGkgPCAzOyBpKysgKSAKKwkJCWZvciAoIDsgaSA8IDM7IGkrKyApCiAJCQkJVExhbl9TZXRNYWMoIGRldiwgaSArIDEsIE5VTEwgKTsKIAkJCVRMYW5fRGlvV3JpdGUzMiggZGV2LT5iYXNlX2FkZHIsIFRMQU5fSEFTSF8xLCBoYXNoMSApOwogCQkJVExhbl9EaW9Xcml0ZTMyKCBkZXYtPmJhc2VfYWRkciwgVExBTl9IQVNIXzIsIGhhc2gyICk7CkBAIC0xMzUwLDcgKzEzNTAsNyBAQAogCiAJUGxlYXNlIHNlZSBDaGFwLiA0LCAiSW50ZXJydXB0IEhhbmRsaW5nIiBvZiB0aGUgIlRodW5kZXJMQU4KIAlQcm9ncmFtbWVyJ3MgR3VpZGUiIGZvciBtb3JlIGluZm9ybWF0aW9ucyBvbiBoYW5kbGluZyBpbnRlcnJ1cHRzCi0JZ2VuZXJhdGVkIGJ5IFRMQU4gYmFzZWQgYWRhcHRlcnMuICAKKwlnZW5lcmF0ZWQgYnkgVExBTiBiYXNlZCBhZGFwdGVycy4KIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTE0MTMsNyArMTQxMyw3IEBACiAJZG1hX2FkZHJfdAloZWFkX2xpc3RfcGh5czsKIAl1MzIJCWFjayA9IDA7CiAJdTE2CQl0bXBDU3RhdDsKLQkKKwogCVRMQU5fREJHKCBUTEFOX0RFQlVHX1RYLCAiVFJBTlNNSVQ6ICBIYW5kbGluZyBUWCBFT0YgKEhlYWQ9JWQgVGFpbD0lZClcbiIsIHByaXYtPnR4SGVhZCwgcHJpdi0+dHhUYWlsICk7CiAJaGVhZF9saXN0ID0gcHJpdi0+dHhMaXN0ICsgcHJpdi0+dHhIZWFkOwogCkBAIC0xNDI2LDIxICsxNDI2LDIxIEBACiAJCQloZWFkX2xpc3QtPmJ1ZmZlcls4XS5hZGRyZXNzID0gMDsKIAkJCWhlYWRfbGlzdC0+YnVmZmVyWzldLmFkZHJlc3MgPSAwOwogCQl9Ci0JCisKIAkJaWYgKCB0bXBDU3RhdCAmIFRMQU5fQ1NUQVRfRU9DICkKIAkJCWVvYyA9IDE7Ci0JCQkKKwogCQlwcml2LT5zdGF0cy50eF9ieXRlcyArPSBoZWFkX2xpc3QtPmZyYW1lU2l6ZTsKIAogCQloZWFkX2xpc3QtPmNTdGF0ID0gVExBTl9DU1RBVF9VTlVTRUQ7Ci0JCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CQkKLQkJQ0lSQ19JTkMoIHByaXYtPnR4SGVhZCwgVExBTl9OVU1fVFhfTElTVFMgKTsgCisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJCUNJUkNfSU5DKCBwcml2LT50eEhlYWQsIFRMQU5fTlVNX1RYX0xJU1RTICk7CiAJCWhlYWRfbGlzdCA9IHByaXYtPnR4TGlzdCArIHByaXYtPnR4SGVhZDsKIAl9CiAKIAlpZiAoIWFjaykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiVExBTjogUmVjZWl2ZWQgaW50ZXJydXB0IGZvciB1bmNvbXBsZXRlZCBUWCBmcmFtZS5cbiIpOwotCQorCiAJaWYgKCBlb2MgKSB7CiAJCVRMQU5fREJHKCBUTEFOX0RFQlVHX1RYLCAiVFJBTlNNSVQ6ICBIYW5kbGluZyBUWCBFT0MgKEhlYWQ9JWQgVGFpbD0lZClcbiIsIHByaXYtPnR4SGVhZCwgcHJpdi0+dHhUYWlsICk7CiAJCWhlYWRfbGlzdCA9IHByaXYtPnR4TGlzdCArIHByaXYtPnR4SGVhZDsKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAJCQlwcml2LT50eEluUHJvZ3Jlc3MgPSAwOwogCQl9CiAJfQotCQorCiAJaWYgKCBwcml2LT5hZGFwdGVyLT5mbGFncyAmIFRMQU5fQURBUFRFUl9BQ1RJVklUWV9MRUQgKSB7CiAJCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9MRURfUkVHLCBUTEFOX0xFRF9MSU5LIHwgVExBTl9MRURfQUNUICk7CiAJCWlmICggcHJpdi0+dGltZXIuZnVuY3Rpb24gPT0gTlVMTCApIHsKQEAgLTE1NDQsMTMgKzE1NDQsMTMgQEAKIAlUTEFOX0RCRyggVExBTl9ERUJVR19SWCwgIlJFQ0VJVkU6ICBIYW5kbGluZyBSWCBFT0YgKEhlYWQ9JWQgVGFpbD0lZClcbiIsIHByaXYtPnJ4SGVhZCwgcHJpdi0+cnhUYWlsICk7CiAJaGVhZF9saXN0ID0gcHJpdi0+cnhMaXN0ICsgcHJpdi0+cnhIZWFkOwogCWhlYWRfbGlzdF9waHlzID0gcHJpdi0+cnhMaXN0RE1BICsgc2l6ZW9mKFRMYW5MaXN0KSAqIHByaXYtPnJ4SGVhZDsKLQkKKwogCXdoaWxlICgoKHRtcENTdGF0ID0gaGVhZF9saXN0LT5jU3RhdCkgJiBUTEFOX0NTVEFUX0ZSTV9DTVApICYmIChhY2sgPCAyNTUpKSB7CiAJCWZyYW1lU2l6ZSA9IGhlYWRfbGlzdC0+ZnJhbWVTaXplOwogCQlhY2srKzsKIAkJaWYgKHRtcENTdGF0ICYgVExBTl9DU1RBVF9FT0MpCiAJCQllb2MgPSAxOwotCQkKKwogCQlpZiAoYmJ1ZikgewogCQkJc2tiID0gZGV2X2FsbG9jX3NrYihmcmFtZVNpemUgKyA3KTsKIAkJCWlmIChza2IgPT0gTlVMTCkKQEAgLTE1NjAsNyArMTU2MCw3IEBACiAJCQkJc2tiLT5kZXYgPSBkZXY7CiAJCQkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKIAkJCQl0ID0gKHZvaWQgKikgc2tiX3B1dChza2IsIGZyYW1lU2l6ZSk7Ci0JCQorCiAJCQkJcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gaGVhZF9saXN0LT5mcmFtZVNpemU7CiAKIAkJCQltZW1jcHkoIHQsIGhlYWRfYnVmZmVyLCBmcmFtZVNpemUgKTsKQEAgLTE1NjksMTUgKzE1NjksMTUgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpuZXdfc2tiOwotCQkKKwogCQkJLyoKIAkJIAkgKglJIGNoYW5nZWQgdGhlIGFsZ29yaXRobSBoZXJlLiBXaGF0IHdlIG5vdyBkbwogCQkgCSAqCWlzIGFsbG9jYXRlIHRoZSBuZXcgZnJhbWUuIElmIHRoaXMgZmFpbHMgd2UKIAkJIAkgKglzaW1wbHkgcmVjeWNsZSB0aGUgZnJhbWUuCiAJCSAJICovCi0JCQorCiAJCQluZXdfc2tiID0gZGV2X2FsbG9jX3NrYiggVExBTl9NQVhfRlJBTUVfU0laRSArIDcgKTsKLQkJCQorCiAJCQlpZiAoIG5ld19za2IgIT0gTlVMTCApIHsKIAkJCQlza2IgPSBUTGFuX0dldFNLQihoZWFkX2xpc3QpOwogCQkJCXBjaV91bm1hcF9zaW5nbGUocHJpdi0+cGNpRGV2LCBoZWFkX2xpc3QtPmJ1ZmZlclswXS5hZGRyZXNzLCBUTEFOX01BWF9GUkFNRV9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtMTU4NywxNCArMTU4NywxNCBAQAogCiAJCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKCBza2IsIGRldiApOwogCQkJCW5ldGlmX3J4KCBza2IgKTsKLQkKKwogCQkJCW5ld19za2ItPmRldiA9IGRldjsKIAkJCQlza2JfcmVzZXJ2ZSggbmV3X3NrYiwgMiApOwogCQkJCXQgPSAodm9pZCAqKSBza2JfcHV0KCBuZXdfc2tiLCBUTEFOX01BWF9GUkFNRV9TSVpFICk7CiAJCQkJaGVhZF9saXN0LT5idWZmZXJbMF0uYWRkcmVzcyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaURldiwgbmV3X3NrYi0+ZGF0YSwgVExBTl9NQVhfRlJBTUVfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQloZWFkX2xpc3QtPmJ1ZmZlcls4XS5hZGRyZXNzID0gKHUzMikgdDsKIAkJCQlUTGFuX1N0b3JlU0tCKGhlYWRfbGlzdCwgbmV3X3NrYik7Ci0JCQl9IGVsc2UgCisJCQl9IGVsc2UKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJUTEFOOiAgQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciByZWNlaXZlZCBkYXRhLlxuIiApOwogCQl9CiAKQEAgLTE2MTEsMTEgKzE2MTEsMTEgQEAKIAogCWlmICghYWNrKQogCQlwcmludGsoS0VSTl9JTkZPICJUTEFOOiBSZWNlaXZlZCBpbnRlcnJ1cHQgZm9yIHVuY29tcGxldGVkIFJYIGZyYW1lLlxuIik7Ci0JCiAKIAogCi0JaWYgKCBlb2MgKSB7IAorCisJaWYgKCBlb2MgKSB7CiAJCVRMQU5fREJHKCBUTEFOX0RFQlVHX1JYLCAiUkVDRUlWRTogIEhhbmRsaW5nIFJYIEVPQyAoSGVhZD0lZCBUYWlsPSVkKVxuIiwgcHJpdi0+cnhIZWFkLCBwcml2LT5yeFRhaWwgKTsKIAkJaGVhZF9saXN0ID0gcHJpdi0+cnhMaXN0ICsgcHJpdi0+cnhIZWFkOwogCQloZWFkX2xpc3RfcGh5cyA9IHByaXYtPnJ4TGlzdERNQSArIHNpemVvZihUTGFuTGlzdCkgKiBwcml2LT5yeEhlYWQ7CkBAIC0xNjM5LDcgKzE2MzksNyBAQAogCX0KIAogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0JCisKIAlyZXR1cm4gYWNrOwogCiB9IC8qIFRMYW5fSGFuZGxlUnhFT0YgKi8KQEAgLTE3MDAsNyArMTcwMCw3IEBACiAJVExhbkxpc3QJCSpoZWFkX2xpc3Q7CiAJZG1hX2FkZHJfdAkJaGVhZF9saXN0X3BoeXM7CiAJdTMyCQkJYWNrID0gMTsKLQkKKwogCWhvc3RfaW50ID0gMDsKIAlpZiAoIHByaXYtPnRsYW5SZXYgPCAweDMwICkgewogCQlUTEFOX0RCRyggVExBTl9ERUJVR19UWCwgIlRSQU5TTUlUOiAgSGFuZGxpbmcgVFggRU9DIChIZWFkPSVkIFRhaWw9JWQpIC0tIElSUVxuIiwgcHJpdi0+dHhIZWFkLCBwcml2LT50eFRhaWwgKTsKQEAgLTE3NDMsNyArMTc0Myw3IEBACiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiB1MzIgVExhbl9IYW5kbGVTdGF0dXNDaGVjayggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGhvc3RfaW50ICkKLXsJCit7CiAJVExhblByaXZhdGVJbmZvCSpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIJCWFjazsKIAl1MzIJCWVycm9yOwpAQCAtMTc1MSw3ICsxNzUxLDcgQEAKIAl1MzIJCXBoeTsKIAl1MTYJCXRscGh5X2N0bDsKIAl1MTYJCXRscGh5X3N0czsKLQkKKwogCWFjayA9IDE7CiAJaWYgKCBob3N0X2ludCAmIFRMQU5fSElfSVZfTUFTSyApIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZSggZGV2ICk7CkBAIC0xNzg1LDcgKzE3ODUsNyBAQAogICAgICAgICAJCX0KIAogCQkJaWYgKGRlYnVnKSB7Ci0JCQkJVExhbl9QaHlQcmludCggZGV2ICk7CQkKKwkJCQlUTGFuX1BoeVByaW50KCBkZXYgKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE4ODcsNyArMTg4Nyw3IEBACiAJcHJpdi0+dGltZXIuZnVuY3Rpb24gPSBOVUxMOwogCiAJc3dpdGNoICggcHJpdi0+dGltZXJUeXBlICkgewotI2lmZGVmIE1PTklUT1IJCQorI2lmZGVmIE1PTklUT1IKIAkJY2FzZSBUTEFOX1RJTUVSX0xJTktfQkVBVDoKIAkJCVRMYW5fUGh5TW9uaXRvciggZGV2ICk7CiAJCQlicmVhazsKQEAgLTE5NDYsNyArMTk0Niw3IEBACiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJICoJVExhbl9SZXNldExpc3RzCi0JICogIAorCSAqCiAJICoJUmV0dXJuczoKIAkgKgkJTm90aGluZwogCSAqCVBhcm1zOgpAQCAtMjA1NSw3ICsyMDU1LDcgQEAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKglUTGFuX1ByaW50RGlvCi0JICogIAorCSAqCiAJICoJUmV0dXJuczoKIAkgKgkJTm90aGluZwogCSAqCVBhcm1zOgpAQCAtMjA4Nyw3ICsyMDg3LDcgQEAKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkgKglUTGFuX1ByaW50TGlzdAotCSAqICAKKwkgKgogCSAqCVJldHVybnM6CiAJICoJCU5vdGhpbmcKIAkgKglQYXJtczoKQEAgLTIxMjgsNyArMjEyOCw3IEBACiAJICoJUGFybXM6CiAJICoJCWRldglQb2ludGVyIHRvIGRldmljZSBzdHJ1Y3R1cmUgb2YgYWRhcHRlcgogCSAqCQkJdG8gd2hpY2ggdG8gcmVhZCBzdGF0cy4KLQkgKgkJcmVjb3JkCUZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGFkZCAKKwkgKgkJcmVjb3JkCUZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGFkZAogCSAqCiAJICoJVGhpcyBmdW5jdGlvbnMgcmVhZHMgYWxsIHRoZSBpbnRlcm5hbCBzdGF0dXMgcmVnaXN0ZXJzCiAJICoJb2YgdGhlIFRMQU4gY2hpcCwgd2hpY2ggY2xlYXJzIHRoZW0gYXMgYSBzaWRlIGVmZmVjdC4KQEAgLTIxNTgsMTMgKzIxNTgsMTMgQEAKIAlyeF9nb29kICs9IGluYiggZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICsgMSApIDw8IDg7CiAJcnhfZ29vZCArPSBpbmIoIGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fREFUQSArIDIgKSA8PCAxNjsKIAlyeF9vdmVyICA9IGluYiggZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICsgMyApOwotCQkKKwogCW91dHcoIFRMQU5fREVGRVJSRURfVFgsIGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fQURSICk7CiAJZGVmX3R4ICA9IGluYiggZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICk7CiAJZGVmX3R4ICs9IGluYiggZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICsgMSApIDw8IDg7CiAJY3JjICAgICA9IGluYiggZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICsgMiApOwogCWNvZGUgICAgPSBpbmIoIGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fREFUQSArIDMgKTsKLQkKKwogCW91dHcoIFRMQU5fTVVMVElDT0xfRlJNUywgZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19BRFIgKTsKIAltdWx0aV9jb2wgICA9IGluYiggZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICk7CiAJbXVsdGlfY29sICArPSBpbmIoIGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fREFUQSArIDEgKSA8PCA4OwpAQCAtMjE5MCw3ICsyMTkwLDcgQEAKIAkJcHJpdi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgKz0gdHhfdW5kZXI7CiAJCXByaXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzICs9IGxvc3M7CiAJfQotCQkJCisKIH0gLyogVExhbl9SZWFkQW5kQ2xlYXJTdGF0cyAqLwogCiAKQEAgLTIyMzEsNyArMjIzMSw3IEBACiAJZGF0YSA9IGlubChkZXYtPmJhc2VfYWRkciArIFRMQU5fSE9TVF9DTUQpOwogCWRhdGEgfD0gVExBTl9IQ19BRF9SU1Q7CiAJb3V0bChkYXRhLCBkZXYtPmJhc2VfYWRkciArIFRMQU5fSE9TVF9DTUQpOwotCQorCiAJdWRlbGF5KDEwMDApOwogCiAvKiAgMi4JVHVybiBvZmYgaW50ZXJydXB0cy4gKCBQcm9iYWJseSBpc24ndCBuZWNlc3NhcnkgKSAqLwpAQCAtMjI3MCw3ICsyMjcwLDcgQEAKIAl9CiAJVExhbl9QaHlEZXRlY3QoIGRldiApOwogCWRhdGEgPSBUTEFOX05FVF9DRkdfMUZSQUcgfCBUTEFOX05FVF9DRkdfMUNIQU47Ci0JCisKIAlpZiAoIHByaXYtPmFkYXB0ZXItPmZsYWdzICYgVExBTl9BREFQVEVSX0JJVF9SQVRFX1BIWSApIHsKIAkJZGF0YSB8PSBUTEFOX05FVF9DRkdfQklUOwogCQlpZiAoIHByaXYtPmF1aSA9PSAxICkgewpAQCAtMjMyMCwxNSArMjMyMCwxNSBAQAogCQlkYXRhIHw9IFRMQU5fTkVUX0NNRF9EVVBMRVg7CiAJfQogCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9ORVRfQ01ELCBkYXRhICk7Ci0JZGF0YSA9IFRMQU5fTkVUX01BU0tfTUFTSzQgfCBUTEFOX05FVF9NQVNLX01BU0s1OyAKKwlkYXRhID0gVExBTl9ORVRfTUFTS19NQVNLNCB8IFRMQU5fTkVUX01BU0tfTUFTSzU7CiAJaWYgKCBwcml2LT5waHlOdW0gPT0gMCApIHsKLQkJZGF0YSB8PSBUTEFOX05FVF9NQVNLX01BU0s3OyAKKwkJZGF0YSB8PSBUTEFOX05FVF9NQVNLX01BU0s3OwogCX0KIAlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fTkVUX01BU0ssIGRhdGEgKTsKIAlUTGFuX0Rpb1dyaXRlMTYoIGRldi0+YmFzZV9hZGRyLCBUTEFOX01BWF9SWCwgKCgxNTM2KSs3KSZ+NyApOwogCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIE1JSV9HRU5fSURfSEksICZ0bHBoeV9pZDEgKTsKIAlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0lEX0xPLCAmdGxwaHlfaWQyICk7Ci0JCisKIAlpZiAoICggcHJpdi0+YWRhcHRlci0+ZmxhZ3MgJiBUTEFOX0FEQVBURVJfVU5NQU5BR0VEX1BIWSApIHx8ICggcHJpdi0+YXVpICkgKSB7CiAJCXN0YXR1cyA9IE1JSV9HU19MSU5LOwogCQlwcmludGsoICJUTEFOOiAgJXM6IExpbmsgZm9yY2VkLlxuIiwgZGV2LT5uYW1lICk7CkBAIC0yMzM2LDE1ICsyMzM2LDE1IEBACiAJCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIE1JSV9HRU5fU1RTLCAmc3RhdHVzICk7CiAJCXVkZWxheSggMTAwMCApOwogCQlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfR0VOX1NUUywgJnN0YXR1cyApOwotCQlpZiAoIChzdGF0dXMgJiBNSUlfR1NfTElOSykgJiYJIC8qIFdlIG9ubHkgc3VwcG9ydCBsaW5rIGluZm8gb24gTmF0LlNlbS4gUEhZJ3MgKi8gCisJCWlmICggKHN0YXR1cyAmIE1JSV9HU19MSU5LKSAmJgkgLyogV2Ugb25seSBzdXBwb3J0IGxpbmsgaW5mbyBvbiBOYXQuU2VtLiBQSFkncyAqLwogCQkJKHRscGh5X2lkMSA9PSBOQVRfU0VNX0lEMSkgJiYKIAkJCSh0bHBoeV9pZDIgPT0gTkFUX1NFTV9JRDIpICkgewogCQkJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgTUlJX0FOX0xQQSwgJnBhcnRuZXIgKTsKIAkJCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIFRMQU5fVExQSFlfUEFSLCAmdGxwaHlfcGFyICk7Ci0JCQkKKwogCQkJcHJpbnRrKCAiVExBTjogJXM6IExpbmsgYWN0aXZlIHdpdGggIiwgZGV2LT5uYW1lICk7CiAJCQlpZiAoISh0bHBoeV9wYXIgJiBUTEFOX1BIWV9BTl9FTl9TVEFUKSkgewotCQkJICAgICAgCSBwcmludGsoICJmb3JjZWQgMTAlc01icHMgJXMtRHVwbGV4XG4iLCAKKwkJCSAgICAgIAkgcHJpbnRrKCAiZm9yY2VkIDEwJXNNYnBzICVzLUR1cGxleFxuIiwKIAkJCQkJCXRscGh5X3BhciAmIFRMQU5fUEhZX1NQRUVEXzEwMCA/ICIiIDogIjAiLAogCQkJCQkJdGxwaHlfcGFyICYgVExBTl9QSFlfRFVQTEVYX0ZVTEwgPyAiRnVsbCIgOiAiSGFsZiIpOwogCQkJfSBlbHNlIHsKQEAgLTIzNTksMTIgKzIzNTksMTIgQEAKIAkJCX0KIAogCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0xFRF9SRUcsIFRMQU5fTEVEX0xJTksgKTsKLSNpZmRlZiBNT05JVE9SCQkJCisjaWZkZWYgTU9OSVRPUgogCQkJLyogV2UgaGF2ZSBsaW5rIGJlYXQuLmZvciBub3cgYW55d2F5ICovCiAJICAgICAgICAJcHJpdi0+bGluayA9IDE7CiAJICAgICAgICAJLypFbmFibGluZyBsaW5rIGJlYXQgbW9uaXRvcmluZyAqLwogCQkJVExhbl9TZXRUaW1lciggZGV2LCAoMTAqSFopLCBUTEFOX1RJTUVSX0xJTktfQkVBVCApOwotI2VuZGlmIAorI2VuZGlmCiAJCX0gZWxzZSBpZiAoc3RhdHVzICYgTUlJX0dTX0xJTkspICB7CiAJCQlwcmludGsoICJUTEFOOiAlczogTGluayBhY3RpdmVcbiIsIGRldi0+bmFtZSApOwogCQkJVExhbl9EaW9Xcml0ZTgoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0xFRF9SRUcsIFRMQU5fTEVEX0xJTksgKTsKQEAgLTI0MjYsNyArMjQyNiw3IEBACiB2b2lkIFRMYW5fU2V0TWFjKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgYXJlZywgY2hhciAqbWFjICkKIHsKIAlpbnQgaTsKLQkJCQorCiAJYXJlZyAqPSA2OwogCiAJaWYgKCBtYWMgIT0gTlVMTCApIHsKQEAgLTI0NjAsNyArMjQ2MCw3IEBACiAJICoJUGFybXM6CiAJICoJCWRldglBIHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUgb2YgdGhlCiAJICoJCQlUTEFOIGRldmljZSBoYXZpbmcgdGhlIFBIWXMgdG8gYmUgZGV0YWlsZWQuCi0JICoJCQkJCisJICoKIAkgKglUaGlzIGZ1bmN0aW9uIHByaW50cyB0aGUgcmVnaXN0ZXJzIGEgUEhZIChha2EgdHJhbnNjZWl2ZXIpLgogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjUyOCw3ICsyNTI4LDcgQEAKIAl9CiAKIAlUTGFuX01paVJlYWRSZWcoIGRldiwgVExBTl9QSFlfTUFYX0FERFIsIE1JSV9HRU5fSURfSEksICZoaSApOwotCQorCiAJaWYgKCBoaSAhPSAweEZGRkYgKSB7CiAJCXByaXYtPnBoeVswXSA9IFRMQU5fUEhZX01BWF9BRERSOwogCX0gZWxzZSB7CkBAIC0yNjUwLDEwICsyNjUwLDEwIEBACiAJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9TVFMsICZzdGF0dXMgKTsKIAlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfR0VOX1NUUywgJmFiaWxpdHkgKTsKIAotCWlmICggKCBzdGF0dXMgJiBNSUlfR1NfQVVUT05FRyApICYmIAorCWlmICggKCBzdGF0dXMgJiBNSUlfR1NfQVVUT05FRyApICYmCiAJICAgICAoICEgcHJpdi0+YXVpICkgKSB7CiAJCWFiaWxpdHkgPSBzdGF0dXMgPj4gMTE7Ci0JCWlmICggcHJpdi0+c3BlZWQgID09IFRMQU5fU1BFRURfMTAgJiYgCisJCWlmICggcHJpdi0+c3BlZWQgID09IFRMQU5fU1BFRURfMTAgJiYKIAkJICAgICBwcml2LT5kdXBsZXggPT0gVExBTl9EVVBMRVhfSEFMRikgewogCQkJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwaHksIE1JSV9HRU5fQ1RMLCAweDAwMDApOwogCQl9IGVsc2UgaWYgKCBwcml2LT5zcGVlZCA9PSBUTEFOX1NQRUVEXzEwICYmCkBAIC0yNjY4LDcgKzI2NjgsNyBAQAogCQkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSBUUlVFOwogCQkJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwaHksIE1JSV9HRU5fQ1RMLCAweDIxMDApOwogCQl9IGVsc2UgewotCQorCiAJCQkvKiBTZXQgQXV0by1OZWcgYWR2ZXJ0aXNlbWVudCAqLwogCQkJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwaHksIE1JSV9BTl9BRFYsIChhYmlsaXR5IDw8IDUpIHwgMSk7CiAJCQkvKiBFbmFibGVlIEF1dG8tTmVnICovCkBAIC0yNjg0LDkgKzI2ODQsOSBAQAogCQkJVExhbl9TZXRUaW1lciggZGV2LCAoMipIWiksIFRMQU5fVElNRVJfUEhZX0ZJTklTSF9BTiApOwogCQkJcmV0dXJuOwogCQl9Ci0JCQotCX0JCi0JCisKKwl9CisKIAlpZiAoICggcHJpdi0+YXVpICkgJiYgKCBwcml2LT5waHlOdW0gIT0gMCApICkgewogCQlwcml2LT5waHlOdW0gPSAwOwogCQlkYXRhID0gVExBTl9ORVRfQ0ZHXzFGUkFHIHwgVExBTl9ORVRfQ0ZHXzFDSEFOIHwgVExBTl9ORVRfQ0ZHX1BIWV9FTjsKQEAgLTI2OTgsNyArMjY5OCw3IEBACiAgICAgICAgIAlUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBUTEFOX1RMUEhZX0NUTCwgJnRjdGwgKTsKIAkJaWYgKCBwcml2LT5hdWkgKSB7CiAgICAgICAgICAgICAgICAgCXRjdGwgfD0gVExBTl9UQ19BVUlTRUw7Ci0JCX0gZWxzZSB7IAorCQl9IGVsc2UgewogICAgICAgICAgICAgICAgIAl0Y3RsICY9IH5UTEFOX1RDX0FVSVNFTDsKIAkJCWlmICggcHJpdi0+ZHVwbGV4ID09IFRMQU5fRFVQTEVYX0ZVTEwgKSB7CiAJCQkJY29udHJvbCB8PSBNSUlfR0NfRFVQTEVYOwpAQCAtMjczMSw3ICsyNzMxLDcgQEAKIAl1MTYJCW1vZGU7CiAJdTE2CQlwaHk7CiAJdTE2CQlzdGF0dXM7Ci0JCisKIAlwaHkgPSBwcml2LT5waHlbcHJpdi0+cGh5TnVtXTsKIAogCVRMYW5fTWlpUmVhZFJlZyggZGV2LCBwaHksIE1JSV9HRU5fU1RTLCAmc3RhdHVzICk7CkBAIC0yNzgzLDcgKzI3ODMsNyBAQAogCS8qIFdhaXQgZm9yIDEwMCBtcy4gIE5vIHJlYXNvbiBpbiBwYXJ0aXRpY3VsYXIuCiAJICovCiAJVExhbl9TZXRUaW1lciggZGV2LCAoSFovMTApLCBUTEFOX1RJTUVSX0ZJTklTSF9SRVNFVCApOwotCQkKKwogfSAvKiBUTGFuX1BoeUZpbmlzaEF1dG9OZWcgKi8KIAogI2lmZGVmIE1PTklUT1IKQEAgLTI3OTIsMTMgKzI3OTIsMTMgQEAKICAgICAgICAgKgogICAgICAgICAqICAgICAgVExhbl9waHlNb25pdG9yCiAgICAgICAgICoKLSAgICAgICAgKiAgICAgIFJldHVybnM6IAorICAgICAgICAqICAgICAgUmV0dXJuczoKICAgICAgICAgKiAgICAgICAgICAgICAgTm9uZQogICAgICAgICAqCiAgICAgICAgICogICAgICBQYXJhbXM6CiAgICAgICAgICogICAgICAgICAgICAgIGRldiAgICAgICAgICAgICBUaGUgZGV2aWNlIHN0cnVjdHVyZSBvZiB0aGlzIGRldmljZS4KICAgICAgICAgKgotICAgICAgICAqICAgICAgCisgICAgICAgICoKICAgICAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gbW9uaXRvcnMgUEhZIGNvbmRpdGlvbiBieSByZWFkaW5nIHRoZSBzdGF0dXMKICAgICAgICAgKiAgICAgIHJlZ2lzdGVyIHZpYSB0aGUgTUlJIGJ1cy4gVGhpcyBjYW4gYmUgdXNlZCB0byBnaXZlIGluZm8KICAgICAgICAgKiAgICAgIGFib3V0IGxpbmsgY2hhbmdlcyAodXAvZG93biksIGFuZCBwb3NzaWJsZSBzd2l0Y2ggdG8gYWx0ZXJuYXRlCkBAIC0yODE4LDcgKzI4MTgsNyBAQAogICAgICAgICBUTGFuX01paVJlYWRSZWcoIGRldiwgcGh5LCBNSUlfR0VOX1NUUywgJnBoeV9zdGF0dXMgKTsKIAogICAgICAgICAvKiBDaGVjayBpZiBsaW5rIGhhcyBiZWVuIGxvc3QgKi8KLSAgICAgICAgaWYgKCEocGh5X3N0YXR1cyAmIE1JSV9HU19MSU5LKSkgeyAKKyAgICAgICAgaWYgKCEocGh5X3N0YXR1cyAmIE1JSV9HU19MSU5LKSkgewogIAkgICAgICAgaWYgKHByaXYtPmxpbmspIHsKIAkJICAgICAgcHJpdi0+bGluayA9IDA7CiAJICAgICAgICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiVExBTjogJXMgaGFzIGxvc3QgbGlua1xuIiwgZGV2LT5uYW1lKTsKQEAgLTI4MzcsNyArMjgzNyw3IEBACiAKIAkvKiBTZXR1cCBhIG5ldyBtb25pdG9yICovCiAJVExhbl9TZXRUaW1lciggZGV2LCAoMipIWiksIFRMQU5fVElNRVJfTElOS19CRUFUICk7Ci19CQorfQogCiAjZW5kaWYgLyogTU9OSVRPUiAqLwogCkBAIC0yODkxLDcgKzI4OTEsNyBAQAogCWVyciA9IEZBTFNFOwogCW91dHcoVExBTl9ORVRfU0lPLCBkZXYtPmJhc2VfYWRkciArIFRMQU5fRElPX0FEUik7CiAJc2lvID0gZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19EQVRBICsgVExBTl9ORVRfU0lPOwotCQorCiAJaWYgKCFpbl9pcnEoKSkKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjkzOSw3ICsyOTM5LDcgQEAKIAkJVExhbl9TZXRCaXQoVExBTl9ORVRfU0lPX01JTlRFTiwgc2lvKTsKIAogCSp2YWwgPSB0bXA7Ci0JCisKIAlpZiAoIWluX2lycSgpKQogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTMwNTgsNyArMzA1OCw3IEBACiAKIAlvdXR3KFRMQU5fTkVUX1NJTywgZGV2LT5iYXNlX2FkZHIgKyBUTEFOX0RJT19BRFIpOwogCXNpbyA9IGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fREFUQSArIFRMQU5fTkVUX1NJTzsKLQkKKwogCWlmICghaW5faXJxKCkpCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTMwODEsNyArMzA4MSw3IEBACiAKIAlpZiAoIG1pbnRlbiApCiAJCVRMYW5fU2V0Qml0KCBUTEFOX05FVF9TSU9fTUlOVEVOLCBzaW8gKTsKLQkKKwogCWlmICghaW5faXJxKCkpCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApAQCAtMzEwOSw3ICszMTA5LDcgQEAKIAkgKgogCSAqCVJldHVybnM6CiAJICoJCU5vdGhpbmcKLQkgKglQYXJtczoJCisJICoJUGFybXM6CiAJICoJCWlvX2Jhc2UJCVRoZSBJTyBwb3J0IGJhc2UgYWRkcmVzcyBmb3IgdGhlCiAJICoJCQkJVExBTiBkZXZpY2Ugd2l0aCB0aGUgRUVQUk9NIHRvCiAJICoJCQkJdXNlLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGxhbi5oIGIvZHJpdmVycy9uZXQvdGxhbi5oCmluZGV4IDVkMzJiYzYuLmE0NGUyZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RsYW4uaAorKysgYi9kcml2ZXJzL25ldC90bGFuLmgKQEAgLTksMTMgKzksMTMgQEAKICAqCiAgKiAgKEMpIDE5OTctMTk5OCBDYWxkZXJhLCBJbmMuCiAgKiAgKEMpIDE5OTktMjAwMSBUb3JiZW4gTWF0aGlhc2VuCi0gKiAKKyAqCiAgKiAgVGhpcyBzb2Z0d2FyZSBtYXkgYmUgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcwogICogIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UuCiAgKgogICoqIFRoaXMgZmlsZSBpcyBiZXN0IHZpZXdlZC9lZGl0ZWQgd2l0aCB0YWJzdG9wPTQsIGNvbHVtcz49MTMyCiAgKgotICogIAorICoKICAqICBEZWMgMTAsIDE5OTkJVG9yYmVuIE1hdGhpYXNlbiA8dG9yYmVuLm1hdGhpYXNlbkBjb21wYXEuY29tPgogICoJCQlOZXcgTWFpbnRhaW5lcgogICoKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgVExBTl9EQkcobHZsLCBmb3JtYXQsIGFyZ3MuLi4pCWlmIChkZWJ1ZyZsdmwpIHByaW50ayhLRVJOX0RFQlVHICJUTEFOOiAiIGZvcm1hdCwgIyNhcmdzICk7CiAjZGVmaW5lIFRMQU5fREVCVUdfR05STAkJMHgwMDAxCiAjZGVmaW5lIFRMQU5fREVCVUdfVFgJCTB4MDAwMgotI2RlZmluZSBUTEFOX0RFQlVHX1JYCQkweDAwMDQgCisjZGVmaW5lIFRMQU5fREVCVUdfUlgJCTB4MDAwNAogI2RlZmluZSBUTEFOX0RFQlVHX0xJU1QJCTB4MDAwOAogI2RlZmluZSBUTEFOX0RFQlVHX1BST0JFCTB4MDAxMAogCkBAIC02MCw3ICs2MCw3IEBACiAJICogRGV2aWNlIElkZW50aWZpY2F0aW9uIERlZmluaXRpb25zCiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJCisKICNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRFTExJR0VOVF8xMF9UMgkJCTB4QjAxMgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVEVMTElHRU5UXzEwXzEwMF9XU181MTAwCTB4QjAzMAogI2lmbmRlZiBQQ0lfREVWSUNFX0lEX09MSUNPTV9PQzIxODMKQEAgLTEwMiwxMSArMTAyLDExIEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBFSVNBX0lEICAgICAgMHhjODAgICAvKiBFSVNBIElEIFJlZ2lzdGVycyAqLyAKLSNkZWZpbmUgRUlTQV9JRDAgICAgIDB4YzgwICAgLyogRUlTQSBJRCBSZWdpc3RlciAwICovIAotI2RlZmluZSBFSVNBX0lEMSAgICAgMHhjODEgICAvKiBFSVNBIElEIFJlZ2lzdGVyIDEgKi8gCi0jZGVmaW5lIEVJU0FfSUQyICAgICAweGM4MiAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMiAqLyAKLSNkZWZpbmUgRUlTQV9JRDMgICAgIDB4YzgzICAgLyogRUlTQSBJRCBSZWdpc3RlciAzICovIAorI2RlZmluZSBFSVNBX0lEICAgICAgMHhjODAgICAvKiBFSVNBIElEIFJlZ2lzdGVycyAqLworI2RlZmluZSBFSVNBX0lEMCAgICAgMHhjODAgICAvKiBFSVNBIElEIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgRUlTQV9JRDEgICAgIDB4YzgxICAgLyogRUlTQSBJRCBSZWdpc3RlciAxICovCisjZGVmaW5lIEVJU0FfSUQyICAgICAweGM4MiAgIC8qIEVJU0EgSUQgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBFSVNBX0lEMyAgICAgMHhjODMgICAvKiBFSVNBIElEIFJlZ2lzdGVyIDMgKi8KICNkZWZpbmUgRUlTQV9DUiAgICAgIDB4Yzg0ICAgLyogRUlTQSBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIEVJU0FfUkVHMCAgICAweGM4OCAgIC8qIEVJU0EgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAwICovCiAjZGVmaW5lIEVJU0FfUkVHMSAgICAweGM4OSAgIC8qIEVJU0EgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAxICovCkBAIC00NDcsNyArNDQ3LDcgQEAKIHsKIAlvdXR3KGludGVybmFsX2FkZHIsIGJhc2VfYWRkciArIFRMQU5fRElPX0FEUik7CiAJcmV0dXJuIChpbmIoKGJhc2VfYWRkciArIFRMQU5fRElPX0RBVEEpICsgKGludGVybmFsX2FkZHIgJiAweDMpKSk7Ci0JCisKIH0gLyogVExhbl9EaW9SZWFkOCAqLwogCiAKQEAgLTUwNSw4ICs1MDUsOCBAQAogI2RlZmluZSBUTGFuX1NldEJpdCggYml0LCBwb3J0ICkJb3V0Yl9wKGluYl9wKHBvcnQpIHwgYml0LCBwb3J0KQogCiAvKgotICogZ2l2ZW4gNiBieXRlcywgdmlldyB0aGVtIGFzIDggNi1iaXQgbnVtYmVycyBhbmQgcmV0dXJuIHRoZSBYT1Igb2YgdGhvc2UgCi0gKiB0aGUgY29kZSBiZWxvdyBpcyBhYm91dCBzZXZlbiB0aW1lcyBhcyBmYXN0IGFzIHRoZSBvcmlnaW5hbCBjb2RlIAorICogZ2l2ZW4gNiBieXRlcywgdmlldyB0aGVtIGFzIDggNi1iaXQgbnVtYmVycyBhbmQgcmV0dXJuIHRoZSBYT1Igb2YgdGhvc2UKKyAqIHRoZSBjb2RlIGJlbG93IGlzIGFib3V0IHNldmVuIHRpbWVzIGFzIGZhc3QgYXMgdGhlIG9yaWdpbmFsIGNvZGUKICAqCiAgKiBUaGUgb3JpZ2luYWwgY29kZSB3YXM6CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nLzNjMzU5LmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwppbmRleCA0NjU5MjFlLi40MTIzOTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYwpAQCAtMTgxNSw3ICsxODE1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgeGxfcGNpX2luaXQgKHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJnhsXzNjMzU5X2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnhsXzNjMzU5X2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2libXRyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwppbmRleCA5ZjQ5MTU2Li40NDcwMDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAKIC8qIHZlcnNpb24gYW5kIGNyZWRpdHMgKi8KICNpZm5kZWYgUENNQ0lBCi1zdGF0aWMgY2hhciB2ZXJzaW9uW10gX19pbml0ZGF0YSA9CitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAgICAgIlxuaWJtdHIuYzogdjEuMy41NyAgIDgvIDcvOTQgUGV0ZXIgRGUgU2NocmlqdmVyIGFuZCBNYXJrIFN3YW5zb25cbiIKICAgICAiICAgICAgICAgdjIuMS4xMjUgMTAvMjAvOTggUGF1bCBOb3J0b24gICAgPHBub3J0b25AaWVlZS5vcmc+XG4iCiAgICAgIiAgICAgICAgIHYyLjIuMCAgIDEyLzMwLzk4IEpvZWwgU2xvYW4gICAgIDxqanNAYy1tZS5jb20+XG4iCkBAIC0yMTYsNyArMjE2LDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0ZGF0YSB0dXJib19zZWFyY2hlZCA9IDA7CiAKICNpZm5kZWYgUENNQ0lBCi1zdGF0aWMgX191MzIgaWJtdHJfbWVtX2Jhc2UgX19pbml0ZGF0YSA9IDB4ZDAwMDA7CitzdGF0aWMgX191MzIgaWJtdHJfbWVtX2Jhc2UgX19kZXZpbml0ZGF0YSA9IDB4ZDAwMDA7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgX19kZXZpbml0IFBydENoYW5JRChjaGFyICpwY2lkLCBzaG9ydCBzdHJpZGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCmluZGV4IDI4ZDk2OGYuLjBkNjY3MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jCkBAIC0xOTk4LDcgKzE5OTgsNyBAQAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc3RyZWFtZXJfaW5pdF9tb2R1bGUodm9pZCkgewotICByZXR1cm4gcGNpX21vZHVsZV9pbml0KCZzdHJlYW1lcl9wY2lfZHJpdmVyKTsKKyAgcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnN0cmVhbWVyX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgc3RyZWFtZXJfY2xlYW51cF9tb2R1bGUodm9pZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3NtY3RyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwppbmRleCBjZDJlMDI1Li44NWE3Zjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvc21jdHIuYwpAQCAtNTY2Niw3ICs1NjY2LDcgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMCk7CiBtb2R1bGVfcGFyYW0ocmluZ3NwZWVkLCBpbnQsIDApOwogCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnNldHVwX2NhcmQoaW50IG4pCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgc2V0dXBfY2FyZChpbnQgbikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfdHJkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsKIAlpbnQgZXJyOwpAQCAtNTY5Niw5ICs1Njk2LDggQEAKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBFUlJfUFRSKGVycik7CiB9Ci0JCQkKIAotaW50IGluaXRfbW9kdWxlKHZvaWQpCitpbnQgX19pbml0IGluaXRfbW9kdWxlKHZvaWQpCiB7CiAgICAgICAgIGludCBpLCBmb3VuZCA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMgYi9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCmluZGV4IDY4M2YxNGIuLmZhM2EyYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAJZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYwogCi0JTWFpbnRhaW5lZCBieSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CisJTWFpbnRhaW5lZCBieSBWYWxlcmllIEhlbnNvbiA8dmFsX2hlbnNvbkBsaW51eC5pbnRlbC5jb20+CiAJQ29weXJpZ2h0IDIwMDAsMjAwMSAgVGhlIExpbnV4IEtlcm5lbCBUZWFtCiAJV3JpdHRlbi9jb3B5cmlnaHQgMTk5NC0yMDAxIGJ5IERvbmFsZCBCZWNrZXIuCiAKQEAgLTI2LDkgKzI2LDkgQEAKIAogLyogSGFuZGxlIHRoZSAyMTE0MyB1bmlxdWVseTogZG8gYXV0b3NlbGVjdCB3aXRoIE5XYXksIG5vdCB0aGUgRUVQUk9NIGxpc3QKICAgIG9mIGF2YWlsYWJsZSB0cmFuc2NlaXZlcnMuICAqLwotdm9pZCB0MjExNDJfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCB0MjExNDJfbWVkaWFfdGFzayh2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhOwogCXN0cnVjdCB0dWxpcF9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+YmFzZV9hZGRyOwogCWludCBjc3IxMiA9IGlvcmVhZDMyKGlvYWRkciArIENTUjEyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYwppbmRleCBkMDVjNWFhLi5lMWI0OGJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCkBAIC0xNjcwLDcgKzE2NzAsNyBAQAogCXNwaW5fdW5sb2NrX2lycSgmZGUtPmxvY2spOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGRlX2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBkZV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKIAkuZ2V0X3R4X2NzdW0JCT0gZXRodG9vbF9vcF9nZXRfdHhfY3N1bSwKIAkuZ2V0X3NnCQkJPSBldGh0b29sX29wX2dldF9zZywKQEAgLTIxMzgsMTcgKzIxMzgsMjEgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKIAlzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUgPSBkZXYtPnByaXY7CisJaW50IHJldHZhbCA9IDA7CiAKIAlydG5sX2xvY2soKTsKIAlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKIAkJZ290byBvdXQ7Ci0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQkJZGVfaW5pdF9odyhkZSk7Ci0JCW5ldGlmX2RldmljZV9hdHRhY2goZGV2KTsKLQl9IGVsc2UgewotCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gb3V0X2F0dGFjaDsKKwlpZiAoKHJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgeworCQlwcmludGsgKEtFUk5fRVJSICIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIiwKKwkJCWRldi0+bmFtZSk7CisJCWdvdG8gb3V0OwogCX0KKwlkZV9pbml0X2h3KGRlKTsKK291dF9hdHRhY2g6CisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwogb3V0OgogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CkBAIC0yMTcyLDcgKzIxNzYsNyBAQAogI2lmZGVmIE1PRFVMRQogCXByaW50aygiJXMiLCB2ZXJzaW9uKTsKICNlbmRpZgotCXJldHVybiBwY2lfbW9kdWxlX2luaXQgKCZkZV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkZV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVfZXhpdCAodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IDc1ZmYxNGEuLmU2NjFkMGE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTU3NTQsNyArNTc1NCw3IEBACiAJaW50IGVyciA9IDA7CiAKICNpZmRlZiBDT05GSUdfUENJCi0JZXJyID0gcGNpX21vZHVsZV9pbml0ICgmZGU0eDVfcGNpX2RyaXZlcik7CisJZXJyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmZGU0eDVfcGNpX2RyaXZlcik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRUlTQQogCWVyciB8PSBlaXNhX2RyaXZlcl9yZWdpc3RlciAoJmRlNHg1X2Vpc2FfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCA0ZTViMGYyLi5jY2YyYzIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwpAQCAtMjk4LDcgKzI5OCw3IEBACiBzdGF0aWMgaW50IGRtZmVfc3RvcChzdHJ1Y3QgREVWSUNFICopOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICogZG1mZV9nZXRfc3RhdHMoc3RydWN0IERFVklDRSAqKTsKIHN0YXRpYyB2b2lkIGRtZmVfc2V0X2ZpbHRlcl9tb2RlKHN0cnVjdCBERVZJQ0UgKik7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIHUxNiByZWFkX3Nyb21fd29yZChsb25nICxpbnQpOwogc3RhdGljIGlycXJldHVybl90IGRtZmVfaW50ZXJydXB0KGludCAsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKQEAgLTEwNDgsNyArMTA0OCw3IEBACiAJCQlkZXYtPmJhc2VfYWRkciwgZGV2LT5pcnEpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiB9OwogCkBAIC0yMDM5LDcgKzIwMzksNyBAQAogCWlmIChIUE5BX05vaXNlRmxvb3IgPiAxNSkKIAkJSFBOQV9Ob2lzZUZsb29yID0gMDsKIAotCXJjID0gcGNpX21vZHVsZV9pbml0KCZkbWZlX2RyaXZlcik7CisJcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZkbWZlX2RyaXZlcik7CiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCmluZGV4IDVmZmJkNWIuLjIwNjkxOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKIAlkcml2ZXJzL25ldC90dWxpcC9lZXByb20uYwogCi0JTWFpbnRhaW5lZCBieSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CisJTWFpbnRhaW5lZCBieSBWYWxlcmllIEhlbnNvbiA8dmFsX2hlbnNvbkBsaW51eC5pbnRlbC5jb20+CiAJQ29weXJpZ2h0IDIwMDAsMjAwMSAgVGhlIExpbnV4IEtlcm5lbCBUZWFtCiAJV3JpdHRlbi9jb3B5cmlnaHQgMTk5NC0yMDAxIGJ5IERvbmFsZCBCZWNrZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKaW5kZXggOTljY2YyZS4uN2Y4ZjVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMKQEAgLTEsNyArMSw3IEBACiAvKgogCWRyaXZlcnMvbmV0L3R1bGlwL2ludGVycnVwdC5jCiAKLQlNYWludGFpbmVkIGJ5IEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKwlNYWludGFpbmVkIGJ5IFZhbGVyaWUgSGVuc29uIDx2YWxfaGVuc29uQGxpbnV4LmludGVsLmNvbT4KIAlDb3B5cmlnaHQgMjAwMCwyMDAxICBUaGUgTGludXggS2VybmVsIFRlYW0KIAlXcml0dGVuL2NvcHlyaWdodCAxOTk0LTIwMDEgYnkgRG9uYWxkIEJlY2tlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKaW5kZXggZTliYzJhOS4uMjBiZDUyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKIAlkcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCiAKLQlNYWludGFpbmVkIGJ5IEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KKwlNYWludGFpbmVkIGJ5IFZhbGVyaWUgSGVuc29uIDx2YWxfaGVuc29uQGxpbnV4LmludGVsLmNvbT4KIAlDb3B5cmlnaHQgMjAwMCwyMDAxICBUaGUgTGludXggS2VybmVsIFRlYW0KIAlXcml0dGVuL2NvcHlyaWdodCAxOTk0LTIwMDEgYnkgRG9uYWxkIEJlY2tlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCmluZGV4IGNhN2U1MzIuLjg1YTUyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKQEAgLTEsNyArMSw3IEBACiAvKgogCWRyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYwogCi0JTWFpbnRhaW5lZCBieSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CisJTWFpbnRhaW5lZCBieSBWYWxlcmllIEhlbnNvbiA8dmFsX2hlbnNvbkBsaW51eC5pbnRlbC5jb20+CiAJQ29weXJpZ2h0IDIwMDAsMjAwMSAgVGhlIExpbnV4IEtlcm5lbCBUZWFtCiAJV3JpdHRlbi9jb3B5cmlnaHQgMTk5NC0yMDAxIGJ5IERvbmFsZCBCZWNrZXIuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMgYi9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jCmluZGV4IGFiOTg1MDIuLmMzMWJlMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAJZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYwogCi0JTWFpbnRhaW5lZCBieSBKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+CisJTWFpbnRhaW5lZCBieSBWYWxlcmllIEhlbnNvbiA8dmFsX2hlbnNvbkBsaW51eC5pbnRlbC5jb20+CiAJQ29weXJpZ2h0IDIwMDAsMjAwMSAgVGhlIExpbnV4IEtlcm5lbCBUZWFtCiAJV3JpdHRlbi9jb3B5cmlnaHQgMTk5NC0yMDAxIGJ5IERvbmFsZCBCZWNrZXIuCiAgICAgICAgIE1vZGlmaWVkIHRvIGhlcCBzdXBwb3J0IFBOSUNfSUkgYnkgS2V2aW4gQi4gSGVuZHJpY2tzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYwppbmRleCBlMDU4YTlmLi4wNjZlNWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKQEAgLTEsNyArMSw3IEBACiAvKgogCWRyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKIAotCU1haW50YWluZWQgYnkgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorCU1haW50YWluZWQgYnkgVmFsZXJpZSBIZW5zb24gPHZhbF9oZW5zb25AbGludXguaW50ZWwuY29tPgogCUNvcHlyaWdodCAyMDAwLDIwMDEgIFRoZSBMaW51eCBLZXJuZWwgVGVhbQogCVdyaXR0ZW4vY29weXJpZ2h0IDE5OTQtMjAwMSBieSBEb25hbGQgQmVja2VyLgogCkBAIC0xOCwxMyArMTgsMTQgQEAKICNpbmNsdWRlICJ0dWxpcC5oIgogCiAKLXZvaWQgdHVsaXBfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCB0dWxpcF9tZWRpYV90YXNrKHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CiAJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5iYXNlX2FkZHI7CiAJdTMyIGNzcjEyID0gaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpOwogCWludCBuZXh0X3RpY2sgPSAyKkhaOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAyKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTguOHggbW9kZSIKQEAgLTEyNiw2ICsxMjcsMTUgQEAKIAl9CiAJYnJlYWs7CiAJfQorCisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKKwlpZiAodHAtPnRpbWVvdXRfcmVjb3ZlcnkpIHsKKwkJdHVsaXBfdHhfdGltZW91dF9jb21wbGV0ZSh0cCwgaW9hZGRyKTsKKwkJdHAtPnRpbWVvdXRfcmVjb3ZlcnkgPSAwOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOworCiAJLyogbW9kX3RpbWVyIHN5bmNocm9uaXplcyB1cyB3aXRoIHBvdGVudGlhbCBhZGRfdGltZXIgY2FsbHMKIAkgKiBmcm9tIGludGVycnVwdHMuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXAuaAppbmRleCAzYmNmYmYzLi4yNTY2OGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcC5oCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwLmgKQEAgLTMwLDExICszMCwxMCBAQAogLyogdW5kZWZpbmUsIG9yIGRlZmluZSB0byB2YXJpb3VzIGRlYnVnZ2luZyBsZXZlbHMgKD40ID09IG9ic2NlbmUgbGV2ZWxzKSAqLwogI2RlZmluZSBUVUxJUF9ERUJVRyAxCiAKLS8qIHVuZGVmaW5lIFVTRV9JT19PUFMgZm9yIE1NSU8sIGRlZmluZSBmb3IgUElPICovCiAjaWZkZWYgQ09ORklHX1RVTElQX01NSU8KLSMgdW5kZWYgVVNFX0lPX09QUworI2RlZmluZSBUVUxJUF9CQVIJMQkvKiBDQk1BICovCiAjZWxzZQotIyBkZWZpbmUgVVNFX0lPX09QUyAxCisjZGVmaW5lIFRVTElQX0JBUgkwCS8qIENCSU8gKi8KICNlbmRpZgogCiAKQEAgLTQ0LDcgKzQzLDggQEAKIAlpbnQgaW9fc2l6ZTsKIAlpbnQgdmFsaWRfaW50cnM7CS8qIENTUjcgaW50ZXJydXB0IGVuYWJsZSBzZXR0aW5ncyAqLwogCWludCBmbGFnczsKLQl2b2lkICgqbWVkaWFfdGltZXIpICh1bnNpZ25lZCBsb25nIGRhdGEpOworCXZvaWQgKCptZWRpYV90aW1lcikgKHVuc2lnbmVkIGxvbmcpOworCXZvaWQgKCptZWRpYV90YXNrKSAodm9pZCAqKTsKIH07CiAKIApAQCAtMTQyLDYgKzE0Miw3IEBACiAJUnhOb0J1ZiA9IDB4ODAsCiAJUnhJbnRyID0gMHg0MCwKIAlUeEZJRk9VbmRlcmZsb3cgPSAweDIwLAorCVJ4RXJySW50ciA9IDB4MTAsCiAJVHhKYWJiZXIgPSAweDA4LAogCVR4Tm9CdWYgPSAweDA0LAogCVR4RGllZCA9IDB4MDIsCkBAIC0xOTIsOSArMTkzLDE0IEBACiAKIAogZW51bSBkZXNjX3N0YXR1c19iaXRzIHsKLQlEZXNjT3duZWQgPSAweDgwMDAwMDAwLAotCVJ4RGVzY0ZhdGFsRXJyID0gMHg4MDAwLAotCVJ4V2hvbGVQa3QgPSAweDAzMDAsCisJRGVzY093bmVkICAgID0gMHg4MDAwMDAwMCwKKwlEZXNjV2hvbGVQa3QgPSAweDYwMDAwMDAwLAorCURlc2NFbmRQa3QgICA9IDB4NDAwMDAwMDAsCisJRGVzY1N0YXJ0UGt0ID0gMHgyMDAwMDAwMCwKKwlEZXNjRW5kUmluZyAgPSAweDAyMDAwMDAwLAorCURlc2NVc2VMaW5rICA9IDB4MDEwMDAwMDAsCisJUnhEZXNjRmF0YWxFcnIgPSAweDAwODAwMCwKKwlSeFdob2xlUGt0ICAgPSAweDAwMDAwMzAwLAogfTsKIAogCkBAIC0zNjYsNiArMzcyLDcgQEAKIAl1bnNpZ25lZCBpbnQgbWVkaWFsb2NrOjE7CS8qIERvbid0IHNlbnNlIG1lZGlhIHR5cGUuICovCiAJdW5zaWduZWQgaW50IG1lZGlhc2Vuc2U6MTsJLyogTWVkaWEgc2Vuc2luZyBpbiBwcm9ncmVzcy4gKi8KIAl1bnNpZ25lZCBpbnQgbndheToxLCBud2F5c2V0OjE7CQkvKiAyMTE0MyBpbnRlcm5hbCBOV2F5LiAqLworCXVuc2lnbmVkIGludCB0aW1lb3V0X3JlY292ZXJ5OjE7CiAJdW5zaWduZWQgaW50IGNzcjA7CS8qIENTUjAgc2V0dGluZy4gKi8KIAl1bnNpZ25lZCBpbnQgY3NyNjsJLyogQ3VycmVudCBDU1I2IGNvbnRyb2wgc2V0dGluZ3MuICovCiAJdW5zaWduZWQgY2hhciBlZXByb21bRUVQUk9NX1NJWkVdOwkvKiBTZXJpYWwgRUVQUk9NIGNvbnRlbnRzLiAqLwpAQCAtMzg0LDYgKzM5MSw3IEBACiAJdm9pZCBfX2lvbWVtICpiYXNlX2FkZHI7CiAJaW50IGNzcjEyX3NoYWRvdzsKIAlpbnQgcGFkMDsJCS8qIFVzZWQgZm9yIDgtYnl0ZSBhbGlnbm1lbnQgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgbWVkaWFfd29yazsKIH07CiAKIApAQCAtMzk4LDcgKzQwNiw3IEBACiAKIC8qIDIxMTQyLmMgKi8KIGV4dGVybiB1MTYgdDIxMTQyX2NzcjE0W107Ci12b2lkIHQyMTE0Ml90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCB0MjExNDJfbWVkaWFfdGFzayh2b2lkICpkYXRhKTsKIHZvaWQgdDIxMTQyX3N0YXJ0X253YXkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiB2b2lkIHQyMTE0Ml9sbmtfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjc3I1KTsKIApAQCAtNDM2LDcgKzQ0NCw3IEBACiB2b2lkIHBuaWNfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKTsKIAogLyogdGltZXIuYyAqLwotdm9pZCB0dWxpcF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOwordm9pZCB0dWxpcF9tZWRpYV90YXNrKHZvaWQgKmRhdGEpOwogdm9pZCBteGljX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiB2b2lkIGNvbWV0X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKQEAgLTQ4NSw0ICs0OTMsMTQgQEAKIAl0dWxpcF9zdGFydF9yeHR4KHRwKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHR1bGlwX3R4X3RpbWVvdXRfY29tcGxldGUoc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwLCB2b2lkIF9faW9tZW0gKmlvYWRkcikKK3sKKwkvKiBTdG9wIGFuZCByZXN0YXJ0IHRoZSBjaGlwJ3MgVHggcHJvY2Vzc2VzLiAqLworCXR1bGlwX3Jlc3RhcnRfcnh0eCh0cCk7CisJLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgdHJhbnNtaXQgZGVtYW5kLiAqLworCWlvd3JpdGUzMigwLCBpb2FkZHIgKyBDU1IxKTsKKworCXRwLT5zdGF0cy50eF9lcnJvcnMrKzsKK30KKwogI2VuZGlmIC8qIF9fTkVUX1RVTElQX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCmluZGV4IDczNTE4MzEuLjgzMTkxOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKQEAgLTEsNyArMSw3IEBACiAvKiB0dWxpcF9jb3JlLmM6IEEgREVDIDIxeDR4LWZhbWlseSBldGhlcm5ldCBkcml2ZXIgZm9yIExpbnV4LiAqLwogCiAvKgotCU1haW50YWluZWQgYnkgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgorCU1haW50YWluZWQgYnkgVmFsZXJpZSBIZW5zb24gPHZhbF9oZW5zb25AbGludXguaW50ZWwuY29tPgogCUNvcHlyaWdodCAyMDAwLDIwMDEgIFRoZSBMaW51eCBLZXJuZWwgVGVhbQogCVdyaXR0ZW4vY29weXJpZ2h0IDE5OTQtMjAwMSBieSBEb25hbGQgQmVja2VyLgogCkBAIC0xNyw5ICsxNyw5IEBACiAKICNkZWZpbmUgRFJWX05BTUUJInR1bGlwIgogI2lmZGVmIENPTkZJR19UVUxJUF9OQVBJCi0jZGVmaW5lIERSVl9WRVJTSU9OICAgICIxLjEuMTMtTkFQSSIgLyogS2VlcCBhdCBsZWFzdCBmb3IgdGVzdCAqLworI2RlZmluZSBEUlZfVkVSU0lPTiAgICAiMS4xLjE0LU5BUEkiIC8qIEtlZXAgYXQgbGVhc3QgZm9yIHRlc3QgKi8KICNlbHNlCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIxLjEuMTMiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjEuMTQiCiAjZW5kaWYKICNkZWZpbmUgRFJWX1JFTERBVEUJIk1heSAxMSwgMjAwMiIKIApAQCAtMTMwLDcgKzEzMCwxNCBAQAogaW50IHR1bGlwX2RlYnVnID0gMTsKICNlbmRpZgogCitzdGF0aWMgdm9pZCB0dWxpcF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGE7CisJc3RydWN0IHR1bGlwX3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAorCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXNjaGVkdWxlX3dvcmsoJnRwLT5tZWRpYV93b3JrKTsKK30KIAogLyoKICAqIFRoaXMgdGFibGUgdXNlIGR1cmluZyBvcGVyYXRpb24gZm9yIGNhcGFiaWxpdGllcyBhbmQgbWVkaWEgdGltZXIuCkBAIC0xNDQsNTkgKzE1MSw2MCBAQAogCiAgIC8qIERDMjExNDAgKi8KICAgeyAiRGlnaXRhbCBEUzIxMTQwIFR1bGlwIiwgMTI4LCAweDAwMDFlYmVmLAotCUhBU19NSUkgfCBIQVNfTUVESUFfVEFCTEUgfCBDU1IxMl9JTl9TUk9NIHwgSEFTX1BDSV9NV0ksIHR1bGlwX3RpbWVyIH0sCisJSEFTX01JSSB8IEhBU19NRURJQV9UQUJMRSB8IENTUjEyX0lOX1NST00gfCBIQVNfUENJX01XSSwgdHVsaXBfdGltZXIsCisJdHVsaXBfbWVkaWFfdGFzayB9LAogCiAgIC8qIERDMjExNDIsIERDMjExNDMgKi8KLSAgeyAiRGlnaXRhbCBEUzIxMTQzIFR1bGlwIiwgMTI4LCAweDA4MDFmYmZmLAorICB7ICJEaWdpdGFsIERTMjExNDIvNDMgVHVsaXAiLCAxMjgsIDB4MDgwMWZiZmYsCiAJSEFTX01JSSB8IEhBU19NRURJQV9UQUJMRSB8IEFMV0FZU19DSEVDS19NSUkgfCBIQVNfQUNQSSB8IEhBU19OV0FZCi0JfCBIQVNfSU5UUl9NSVRJR0FUSU9OIHwgSEFTX1BDSV9NV0ksIHQyMTE0Ml90aW1lciB9LAorCXwgSEFTX0lOVFJfTUlUSUdBVElPTiB8IEhBU19QQ0lfTVdJLCB0dWxpcF90aW1lciwgdDIxMTQyX21lZGlhX3Rhc2sgfSwKIAogICAvKiBMQzgyQzE2OCAqLwogICB7ICJMaXRlLU9uIDgyYzE2OCBQTklDIiwgMjU2LCAweDAwMDFmYmVmLAotCUhBU19NSUkgfCBIQVNfUE5JQ05XQVksIHBuaWNfdGltZXIgfSwKKwlIQVNfTUlJIHwgSEFTX1BOSUNOV0FZLCBwbmljX3RpbWVyLCB9LAogCiAgIC8qIE1YOTg3MTMgKi8KICAgeyAiTWFjcm9uaXggOTg3MTMgUE1BQyIsIDEyOCwgMHgwMDAxZWJlZiwKLQlIQVNfTUlJIHwgSEFTX01FRElBX1RBQkxFIHwgQ1NSMTJfSU5fU1JPTSwgbXhpY190aW1lciB9LAorCUhBU19NSUkgfCBIQVNfTUVESUFfVEFCTEUgfCBDU1IxMl9JTl9TUk9NLCBteGljX3RpbWVyLCB9LAogCiAgIC8qIE1YOTg3MTUgKi8KICAgeyAiTWFjcm9uaXggOTg3MTUgUE1BQyIsIDI1NiwgMHgwMDAxZWJlZiwKLQlIQVNfTUVESUFfVEFCTEUsIG14aWNfdGltZXIgfSwKKwlIQVNfTUVESUFfVEFCTEUsIG14aWNfdGltZXIsIH0sCiAKICAgLyogTVg5ODcyNSAqLwogICB7ICJNYWNyb25peCA5ODcyNSBQTUFDIiwgMjU2LCAweDAwMDFlYmVmLAotCUhBU19NRURJQV9UQUJMRSwgbXhpY190aW1lciB9LAorCUhBU19NRURJQV9UQUJMRSwgbXhpY190aW1lciwgfSwKIAogICAvKiBBWDg4MTQwICovCiAgIHsgIkFTSVggQVg4ODE0MCIsIDEyOCwgMHgwMDAxZmJmZiwKIAlIQVNfTUlJIHwgSEFTX01FRElBX1RBQkxFIHwgQ1NSMTJfSU5fU1JPTSB8IE1DX0hBU0hfT05MWQotCXwgSVNfQVNJWCwgdHVsaXBfdGltZXIgfSwKKwl8IElTX0FTSVgsIHR1bGlwX3RpbWVyLCB0dWxpcF9tZWRpYV90YXNrIH0sCiAKICAgLyogUE5JQzIgKi8KICAgeyAiTGl0ZS1PbiBQTklDLUlJIiwgMjU2LCAweDA4MDFmYmZmLAotCUhBU19NSUkgfCBIQVNfTldBWSB8IEhBU184MDIzWCB8IEhBU19QQ0lfTVdJLCBwbmljMl90aW1lciB9LAorCUhBU19NSUkgfCBIQVNfTldBWSB8IEhBU184MDIzWCB8IEhBU19QQ0lfTVdJLCBwbmljMl90aW1lciwgfSwKIAogICAvKiBDT01FVCAqLwogICB7ICJBRE10ZWsgQ29tZXQiLCAyNTYsIDB4MDAwMWFiZWYsCi0JSEFTX01JSSB8IE1DX0hBU0hfT05MWSB8IENPTUVUX01BQ19BRERSLCBjb21ldF90aW1lciB9LAorCUhBU19NSUkgfCBNQ19IQVNIX09OTFkgfCBDT01FVF9NQUNfQUREUiwgY29tZXRfdGltZXIsIH0sCiAKICAgLyogQ09NUEVYOTg4MSAqLwogICB7ICJDb21wZXggOTg4MSBQTUFDIiwgMTI4LCAweDAwMDFlYmVmLAotCUhBU19NSUkgfCBIQVNfTUVESUFfVEFCTEUgfCBDU1IxMl9JTl9TUk9NLCBteGljX3RpbWVyIH0sCisJSEFTX01JSSB8IEhBU19NRURJQV9UQUJMRSB8IENTUjEyX0lOX1NST00sIG14aWNfdGltZXIsIH0sCiAKICAgLyogSTIxMTQ1ICovCiAgIHsgIkludGVsIERTMjExNDUgVHVsaXAiLCAxMjgsIDB4MDgwMWZiZmYsCiAJSEFTX01JSSB8IEhBU19NRURJQV9UQUJMRSB8IEFMV0FZU19DSEVDS19NSUkgfCBIQVNfQUNQSQotCXwgSEFTX05XQVkgfCBIQVNfUENJX01XSSwgdDIxMTQyX3RpbWVyIH0sCisJfCBIQVNfTldBWSB8IEhBU19QQ0lfTVdJLCB0dWxpcF90aW1lciwgdHVsaXBfbWVkaWFfdGFzayB9LAogCiAgIC8qIERNOTEwWCAqLwogICB7ICJEYXZpY29tIERNOTEwMi9ETTkxMDJBIiwgMTI4LCAweDAwMDFlYmVmLAogCUhBU19NSUkgfCBIQVNfTUVESUFfVEFCTEUgfCBDU1IxMl9JTl9TUk9NIHwgSEFTX0FDUEksCi0JdHVsaXBfdGltZXIgfSwKKwl0dWxpcF90aW1lciwgdHVsaXBfbWVkaWFfdGFzayB9LAogCiAgIC8qIFJTNzExMiAqLwogICB7ICJDb25leGFudCBMQU5maW5pdHkiLCAyNTYsIDB4MDAwMWViZWYsCi0JSEFTX01JSSB8IEhBU19BQ1BJLCB0dWxpcF90aW1lciB9LAorCUhBU19NSUkgfCBIQVNfQUNQSSwgdHVsaXBfdGltZXIsIHR1bGlwX21lZGlhX3Rhc2sgfSwKIAogfTsKIApAQCAtMjk1LDEyICszMDMsMTQgQEAKIAogCS8qIFJlc2V0IHRoZSBjaGlwLCBob2xkaW5nIGJpdCAwIHNldCBhdCBsZWFzdCA1MCBQQ0kgY3ljbGVzLiAqLwogCWlvd3JpdGUzMigweDAwMDAwMDAxLCBpb2FkZHIgKyBDU1IwKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELCAmaSk7ICAvKiBmbHVzaCB3cml0ZSAqLwogCXVkZWxheSgxMDApOwogCiAJLyogRGVhc3NlcnQgcmVzZXQuCiAJICAgV2FpdCB0aGUgc3BlY2lmaWVkIDUwIFBDSSBjeWNsZXMgYWZ0ZXIgYSByZXNldCBieSBpbml0aWFsaXppbmcKIAkgICBUeCBhbmQgUnggcXVldWVzIGFuZCB0aGUgYWRkcmVzcyBmaWx0ZXIgbGlzdC4gKi8KIAlpb3dyaXRlMzIodHAtPmNzcjAsIGlvYWRkciArIENTUjApOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZCh0cC0+cGRldiwgUENJX0NPTU1BTkQsICZpKTsgIC8qIGZsdXNoIHdyaXRlICovCiAJdWRlbGF5KDEwMCk7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQpAQCAtNTIyLDIwICs1MzIsOSBAQAogCQkJICAgIlNJQSAlOC44eCAlOC44eCAlOC44eCAlOC44eCwgcmVzZXR0aW5nLi4uXG4iLAogCQkJICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpLAogCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTMpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7Ci0JCWlmICggISB0cC0+bWVkaWFsb2NrICAmJiAgdHAtPm10YWJsZSkgewotCQkJZG8KLQkJCQktLXRwLT5jdXJfaW5kZXg7Ci0JCQl3aGlsZSAodHAtPmN1cl9pbmRleCA+PSAwCi0JCQkJICAgJiYgKHR1bGlwX21lZGlhX2NhcFt0cC0+bXRhYmxlLT5tbGVhZlt0cC0+Y3VyX2luZGV4XS5tZWRpYV0KLQkJCQkJICAgJiBNZWRpYUlzRkQpKTsKLQkJCWlmICgtLXRwLT5jdXJfaW5kZXggPCAwKSB7Ci0JCQkJLyogV2Ugc3RhcnQgYWdhaW4sIGJ1dCBzaG91bGQgaW5zdGVhZCBsb29rIGZvciBkZWZhdWx0LiAqLwotCQkJCXRwLT5jdXJfaW5kZXggPSB0cC0+bXRhYmxlLT5sZWFmY291bnQgLSAxOwotCQkJfQotCQkJdHVsaXBfc2VsZWN0X21lZGlhKGRldiwgMCk7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCBzd2l0Y2hpbmcgdG8gJXMgIgotCQkJCSAgICJtZWRpYS5cbiIsIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwotCQl9CisJCXRwLT50aW1lb3V0X3JlY292ZXJ5ID0gMTsKKwkJc2NoZWR1bGVfd29yaygmdHAtPm1lZGlhX3dvcmspOworCQlnb3RvIG91dF91bmxvY2s7CiAJfSBlbHNlIGlmICh0cC0+Y2hpcF9pZCA9PSBQTklDMikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUE5JQzIgdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTguOHgsICIKIAkJICAgICAgICJDU1I2LzcgJTguOHggLyAlOC44eCBDU1IxMiAlOC44eCwgcmVzZXR0aW5nLi4uXG4iLApAQCAtNTc1LDE0ICs1NzQsOSBAQAogCX0KICNlbmRpZgogCi0JLyogU3RvcCBhbmQgcmVzdGFydCB0aGUgY2hpcCdzIFR4IHByb2Nlc3NlcyAuICovCisJdHVsaXBfdHhfdGltZW91dF9jb21wbGV0ZSh0cCwgaW9hZGRyKTsKIAotCXR1bGlwX3Jlc3RhcnRfcnh0eCh0cCk7Ci0JLyogVHJpZ2dlciBhbiBpbW1lZGlhdGUgdHJhbnNtaXQgZGVtYW5kLiAqLwotCWlvd3JpdGUzMigwLCBpb2FkZHIgKyBDU1IxKTsKLQotCXRwLT5zdGF0cy50eF9lcnJvcnMrKzsKLQorb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAluZXRpZl93YWtlX3F1ZXVlIChkZXYpOwpAQCAtNzMyLDYgKzcyNiw4IEBACiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB0cC0+YmFzZV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCiAJZGVsX3RpbWVyX3N5bmMgKCZ0cC0+dGltZXIpOwogI2lmZGVmIENPTkZJR19UVUxJUF9OQVBJCiAJZGVsX3RpbWVyX3N5bmMgKCZ0cC0+b29tX3RpbWVyKTsKQEAgLTg0MSw3ICs4MzcsNyBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobnAtPnBkZXYpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKIAkuZ2V0X2RydmluZm8gPSB0dWxpcF9nZXRfZHJ2aW5mbwogfTsKIApAQCAtMTAyMyw4ICsxMDE5LDYgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQl0cC0+Y3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3QgfCBBY2NlcHRBbGxQaHlzOwogCQljc3I2IHw9IEFjY2VwdEFsbE11bHRpY2FzdCB8IEFjY2VwdEFsbFBoeXM7Ci0JCS8qIFVuY29uZGl0aW9uYWxseSBsb2cgbmV0IHRhcHMuICovCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiAxMDAwKSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgd2VsbCAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCXRwLT5jc3I2IHw9IEFjY2VwdEFsbE11bHRpY2FzdDsKQEAgLTEzNjEsMTEgKzEzNTUsOCBAQAogCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zIChwZGV2LCAidHVsaXAiKSkKIAkJZ290byBlcnJfb3V0X2ZyZWVfbmV0ZGV2OwogCi0jaWZuZGVmIFVTRV9JT19PUFMKLQlpb2FkZHIgPSAgcGNpX2lvbWFwKHBkZXYsIDEsIHR1bGlwX3RibFtjaGlwX2lkeF0uaW9fc2l6ZSk7Ci0jZWxzZQotCWlvYWRkciA9ICBwY2lfaW9tYXAocGRldiwgMCwgdHVsaXBfdGJsW2NoaXBfaWR4XS5pb19zaXplKTsKLSNlbmRpZgorCWlvYWRkciA9ICBwY2lfaW9tYXAocGRldiwgVFVMSVBfQkFSLCB0dWxpcF90YmxbY2hpcF9pZHhdLmlvX3NpemUpOworCiAJaWYgKCFpb2FkZHIpCiAJCWdvdG8gZXJyX291dF9mcmVlX3JlczsKIApAQCAtMTM5OCw2ICsxMzg5LDggQEAKIAl0cC0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKIAl0cC0+dGltZXIuZnVuY3Rpb24gPSB0dWxpcF90YmxbdHAtPmNoaXBfaWRdLm1lZGlhX3RpbWVyOwogCisJSU5JVF9XT1JLKCZ0cC0+bWVkaWFfd29yaywgdHVsaXBfdGJsW3RwLT5jaGlwX2lkXS5tZWRpYV90YXNrLCBkZXYpOworCiAJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylpb2FkZHI7CiAKICNpZmRlZiBDT05GSUdfVFVMSVBfTVdJCkBAIC0xNTUyLDcgKzE1NDUsNyBAQAogCQlpZiAocGNwKSB7CiAJCQl1bnNpZ25lZCBjaGFyICphZGRyOwogCQkJaW50IGxlbjsKLQkJICAKKwogCQkJYWRkciA9IG9mX2dldF9wcm9wZXJ0eShwY3AtPnByb21fbm9kZSwKIAkJCQkJICAgICAgICJsb2NhbC1tYWMtYWRkcmVzcyIsICZsZW4pOwogCQkJaWYgKGFkZHIgJiYgbGVuID09IDYpCkBAIC0xNjQ0LDggKzE2MzcsMTQgQEAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpCiAJCWdvdG8gZXJyX291dF9mcmVlX3Jpbmc7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgcmV2ICVkIGF0ICVwLCIsCi0JICAgICAgIGRldi0+bmFtZSwgY2hpcF9uYW1lLCBjaGlwX3JldiwgaW9hZGRyKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogJXMgcmV2ICVkIGF0ICIKKyNpZmRlZiBDT05GSUdfVFVMSVBfTU1JTworCQkiTU1JTyIKKyNlbHNlCisJCSJQb3J0IgorI2VuZGlmCisJCSIgJSNsbHgsIiwgZGV2LT5uYW1lLCBjaGlwX25hbWUsIGNoaXBfcmV2LAorCQkodW5zaWduZWQgbG9uZyBsb25nKSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgVFVMSVBfQkFSKSk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKIAlpZiAoZWVwcm9tX21pc3NpbmcpCkBAIC0xNzY4LDcgKzE3NjcsMTAgQEAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAKLQlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoKHJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgeworCQlwcmludGsgKEtFUk5fRVJSICJ0dWxpcDogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQogCiAJaWYgKChyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgJnR1bGlwX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KSkpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAidHVsaXA6IHJlcXVlc3RfaXJxIGZhaWxlZCBpbiByZXN1bWVcbiIpOwpAQCAtMTg0OSw3ICsxODUxLDcgQEAKIAl0dWxpcF9tYXhfaW50ZXJydXB0X3dvcmsgPSBtYXhfaW50ZXJydXB0X3dvcms7CiAKIAkvKiBwcm9iZSBmb3IgYW5kIGluaXQgYm9hcmRzICovCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCAoJnR1bGlwX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnR1bGlwX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCmluZGV4IGZkNjRiMmIuLjBiMTc2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogc3RhdGljIGludCB1bGk1MjZ4X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKik7CiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKiB1bGk1MjZ4X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIHN0YXRpYyB2b2lkIHVsaTUyNnhfc2V0X2ZpbHRlcl9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICopOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIHN0YXRpYyB1MTYgcmVhZF9zcm9tX3dvcmQobG9uZywgaW50KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCB1bGk1MjZ4X2ludGVycnVwdChpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBzdGF0aWMgdm9pZCB1bGk1MjZ4X2Rlc2NyaXB0b3JfaW5pdChzdHJ1Y3QgdWxpNTI2eF9ib2FyZF9pbmZvICosIHVuc2lnbmVkIGxvbmcpOwpAQCAtOTg1LDcgKzk4NSw3IEBACiAJd29sLT53b2xvcHRzID0gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogCS5nZXRfc2V0dGluZ3MJCT0gbmV0ZGV2X2dldF9zZXR0aW5ncywKIAkuZ2V0X2xpbmsJCT0gbmV0ZGV2X2dldF9saW5rLApAQCAtMTcwMiw3ICsxNzAyLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgdWxpNTI2eF9pbml0X21vZHVsZSh2b2lkKQogewotCWludCByYzsKIAogCXByaW50ayh2ZXJzaW9uKTsKIAlwcmludGVkX3ZlcnNpb24gPSAxOwpAQCAtMTcxNCwyMiArMTcxMywxOSBAQAogCWlmIChjcjZzZXQpCiAJCXVsaTUyNnhfY3I2X3VzZXJfc2V0ID0gY3I2c2V0OwogCi0gCXN3aXRjaChtb2RlKSB7CisgCXN3aXRjaCAobW9kZSkgewogICAgCWNhc2UgVUxJNTI2WF8xME1IRjoKIAljYXNlIFVMSTUyNlhfMTAwTUhGOgogCWNhc2UgVUxJNTI2WF8xME1GRDoKIAljYXNlIFVMSTUyNlhfMTAwTUZEOgogCQl1bGk1MjZ4X21lZGlhX21vZGUgPSBtb2RlOwogCQlicmVhazsKLQlkZWZhdWx0OnVsaTUyNnhfbWVkaWFfbW9kZSA9IFVMSTUyNlhfQVVUTzsKKwlkZWZhdWx0OgorCQl1bGk1MjZ4X21lZGlhX21vZGUgPSBVTEk1MjZYX0FVVE87CiAJCWJyZWFrOwogCX0KIAotCXJjID0gcGNpX21vZHVsZV9pbml0KCZ1bGk1MjZ4X2RyaXZlcik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnVsaTUyNnhfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCA3ZjQxNDgxLi4yZmNhMWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTQ1LDggKzQ1LDggQEAKICovCiAKICNkZWZpbmUgRFJWX05BTUUJIndpbmJvbmQtODQwIgotI2RlZmluZSBEUlZfVkVSU0lPTgkiMS4wMS1kIgotI2RlZmluZSBEUlZfUkVMREFURQkiTm92LTE3LTIwMDEiCisjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjAxLWUiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJTZXAtMTEtMjAwNiIKIAogCiAvKiBBdXRvbWF0aWNhbGx5IGV4dHJhY3RlZCBjb25maWd1cmF0aW9uIGluZm86CkBAIC05MCwxMCArOTAsOCBAQAogICAgTWFraW5nIHRoZSBUeCByaW5nIHRvbyBsYXJnZSBkZWNyZWFzZXMgdGhlIGVmZmVjdGl2ZW5lc3Mgb2YgY2hhbm5lbAogICAgYm9uZGluZyBhbmQgcGFja2V0IHByaW9yaXR5LgogICAgVGhlcmUgYXJlIG5vIGlsbCBlZmZlY3RzIGZyb20gdG9vLWxhcmdlIHJlY2VpdmUgcmluZ3MuICovCi0jZGVmaW5lIFRYX1JJTkdfU0laRQkxNgogI2RlZmluZSBUWF9RVUVVRV9MRU4JMTAJCS8qIExpbWl0IHJpbmcgZW50cmllcyBhY3R1YWxseSB1c2VkLiAgKi8KICNkZWZpbmUgVFhfUVVFVUVfTEVOX1JFU1RBUlQJNQotI2RlZmluZSBSWF9SSU5HX1NJWkUJMzIKIAogI2RlZmluZSBUWF9CVUZMSU1JVAkoMTAyNC0xMjgpCiAKQEAgLTEzNyw4ICsxMzUsMTAgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKKyNpbmNsdWRlICJ0dWxpcC5oIgorCiAvKiBUaGVzZSBpZGVudGlmeSB0aGUgZHJpdmVyIGJhc2UgdmVyc2lvbiBhbmQgbWF5IG5vdCBiZSByZW1vdmVkLiAqLwotc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQorc3RhdGljIGNoYXIgdmVyc2lvbltdID0KIEtFUk5fSU5GTyBEUlZfTkFNRSAiLmM6diIgRFJWX1ZFUlNJT04gIiAoMi40IHBvcnQpICIgRFJWX1JFTERBVEUgIiAgRG9uYWxkIEJlY2tlciA8YmVja2VyQHNjeWxkLmNvbT5cbiIKIEtFUk5fSU5GTyAiICBodHRwOi8vd3d3LnNjeWxkLmNvbS9uZXR3b3JrL2RyaXZlcnMuaHRtbFxuIjsKIApAQCAtMjQyLDggKzI0Miw4IEBACiB9OwogCiAvKiBUaGlzIGRyaXZlciB3YXMgd3JpdHRlbiB0byB1c2UgUENJIG1lbW9yeSBzcGFjZSwgaG93ZXZlciBzb21lIHg4NiBzeXN0ZW1zCi0gICB3b3JrIG9ubHkgd2l0aCBJL08gc3BhY2UgYWNjZXNzZXMuICBQYXNzIC1EVVNFX0lPX09QUyB0byB1c2UgUENJIEkvTyBzcGFjZQotICAgYWNjZXNzZXMgaW5zdGVhZCBvZiBtZW1vcnkgc3BhY2UuICovCisgICB3b3JrIG9ubHkgd2l0aCBJL08gc3BhY2UgYWNjZXNzZXMuIFNlZSBDT05GSUdfVFVMSVBfTU1JTyBpbiAuY29uZmlnCisqLwogCiAvKiBPZmZzZXRzIHRvIHRoZSBDb21tYW5kIGFuZCBTdGF0dXMgUmVnaXN0ZXJzLCAiQ1NScyIuCiAgICBXaGlsZSBzaW1pbGFyIHRvIHRoZSBUdWxpcCwgdGhlc2UgcmVnaXN0ZXJzIGFyZSBsb25nd29yZCBhbGlnbmVkLgpAQCAtMjYxLDIxICsyNjEsMTEgQEAKIAlDdXJUeERlc2NBZGRyPTB4NEMsIEN1clR4QnVmQWRkcj0weDUwLAogfTsKIAotLyogQml0cyBpbiB0aGUgaW50ZXJydXB0IHN0YXR1cy9lbmFibGUgcmVnaXN0ZXJzLiAqLwotLyogVGhlIGJpdHMgaW4gdGhlIEludHIgU3RhdHVzL0VuYWJsZSByZWdpc3RlcnMsIG1vc3RseSBpbnRlcnJ1cHQgc291cmNlcy4gKi8KLWVudW0gaW50cl9zdGF0dXNfYml0cyB7Ci0JTm9ybWFsSW50cj0weDEwMDAwLCBBYm5vcm1hbEludHI9MHg4MDAwLAotCUludHJQQ0lFcnI9MHgyMDAwLCBUaW1lckludD0weDgwMCwKLQlJbnRyUnhEaWVkPTB4MTAwLCBSeE5vQnVmPTB4ODAsIEludHJSeERvbmU9MHg0MCwKLQlUeEZJRk9VbmRlcmZsb3c9MHgyMCwgUnhFcnJJbnRyPTB4MTAsCi0JVHhJZGxlPTB4MDQsIEludHJUeFN0b3BwZWQ9MHgwMiwgSW50clR4RG9uZT0weDAxLAotfTsKLQogLyogQml0cyBpbiB0aGUgTmV0d29ya0NvbmZpZyByZWdpc3Rlci4gKi8KIGVudW0gcnhfbW9kZV9iaXRzIHsKLQlBY2NlcHRFcnI9MHg4MCwgQWNjZXB0UnVudD0weDQwLAotCUFjY2VwdEJyb2FkY2FzdD0weDIwLCBBY2NlcHRNdWx0aWNhc3Q9MHgxMCwKLQlBY2NlcHRBbGxQaHlzPTB4MDgsIEFjY2VwdE15UGh5cz0weDAyLAorCUFjY2VwdEVycj0weDgwLAorCVJ4QWNjZXB0QnJvYWRjYXN0PTB4MjAsIEFjY2VwdE11bHRpY2FzdD0weDEwLAorCVJ4QWNjZXB0QWxsUGh5cz0weDA4LCBBY2NlcHRNeVBoeXM9MHgwMiwKIH07CiAKIGVudW0gbWlpX3JlZ19iaXRzIHsKQEAgLTI5NywxMyArMjg3LDYgQEAKIAl1MzIgYnVmZmVyMSwgYnVmZmVyMjsKIH07CiAKLS8qIEJpdHMgaW4gbmV0d29ya19kZXNjLnN0YXR1cyAqLwotZW51bSBkZXNjX3N0YXR1c19iaXRzIHsKLQlEZXNjT3duPTB4ODAwMDAwMDAsIERlc2NFbmRSaW5nPTB4MDIwMDAwMDAsIERlc2NVc2VMaW5rPTB4MDEwMDAwMDAsCi0JRGVzY1dob2xlUGt0PTB4NjAwMDAwMDAsIERlc2NTdGFydFBrdD0weDIwMDAwMDAwLCBEZXNjRW5kUGt0PTB4NDAwMDAwMDAsCi0JRGVzY0ludHI9MHg4MDAwMDAwMCwKLX07Ci0KICNkZWZpbmUgTUlJX0NOVAkJMSAvKiB3aW5ib25kIG9ubHkgc3VwcG9ydHMgb25lIE1JSSAqLwogc3RydWN0IG5ldGRldl9wcml2YXRlIHsKIAlzdHJ1Y3Qgdzg0MF9yeF9kZXNjICpyeF9yaW5nOwpAQCAtMzU2LDcgKzMzOSw3IEBACiBzdGF0aWMgdm9pZCBzZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBuZXRkZXZfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOwogc3RhdGljIGludCAgbmV0ZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAKQEAgLTM3MSw3ICszNTQsNiBAQAogCWludCBpcnE7CiAJaW50IGksIG9wdGlvbiA9IGZpbmRfY250IDwgTUFYX1VOSVRTID8gb3B0aW9uc1tmaW5kX2NudF0gOiAwOwogCXZvaWQgX19pb21lbSAqaW9hZGRyOwotCWludCBiYXIgPSAxOwogCiAJaSA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChpKSByZXR1cm4gaTsKQEAgLTM5MywxMCArMzc1LDggQEAKIAogCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIERSVl9OQU1FKSkKIAkJZ290byBlcnJfb3V0X25ldGRldjsKLSNpZmRlZiBVU0VfSU9fT1BTCi0JYmFyID0gMDsKLSNlbmRpZgotCWlvYWRkciA9IHBjaV9pb21hcChwZGV2LCBiYXIsIG5ldGRldl9yZXNfc2l6ZSk7CisKKwlpb2FkZHIgPSBwY2lfaW9tYXAocGRldiwgVFVMSVBfQkFSLCBuZXRkZXZfcmVzX3NpemUpOwogCWlmICghaW9hZGRyKQogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAKQEAgLTgzOCw3ICs4MTgsNyBAQAogCQkJCQlucC0+cnhfYnVmX3N6LFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAkJbnAtPnJ4X3JpbmdbaV0uYnVmZmVyMSA9IG5wLT5yeF9hZGRyW2ldOwotCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBEZXNjT3duOworCQlucC0+cnhfcmluZ1tpXS5zdGF0dXMgPSBEZXNjT3duZWQ7CiAJfQogCiAJbnAtPmN1cl9yeCA9IDA7CkBAIC05MjMsNyArOTAzLDcgQEAKIAl9CiAjZWxpZiBkZWZpbmVkKF9fcG93ZXJwY19fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQogCWkgfD0gMHhFMDAwOwotI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pCisjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZCAoQ09ORklHX1BBUklTQykKIAlpIHw9IDB4NDgwMDsKICNlbHNlCiAjd2FybmluZyBQcm9jZXNzb3IgYXJjaGl0ZWN0dXJlIHVuZGVmaW5lZApAQCAtMTA0MywxMSArMTAyMywxMSBAQAogCiAJLyogTm93IGFjcXVpcmUgdGhlIGlycSBzcGlubG9jay4KIAkgKiBUaGUgZGlmZmljdWx0IHJhY2UgaXMgdGhlIHRoZSBvcmRlcmluZyBiZXR3ZWVuCi0JICogaW5jcmVhc2luZyBucC0+Y3VyX3R4IGFuZCBzZXR0aW5nIERlc2NPd246CisJICogaW5jcmVhc2luZyBucC0+Y3VyX3R4IGFuZCBzZXR0aW5nIERlc2NPd25lZDoKIAkgKiAtIGlmIG5wLT5jdXJfdHggaXMgaW5jcmVhc2VkIGZpcnN0IHRoZSBpbnRlcnJ1cHQKIAkgKiAgIGhhbmRsZXIgY291bGQgY29uc2lkZXIgdGhlIHBhY2tldCBhcyB0cmFuc21pdHRlZAotCSAqICAgc2luY2UgRGVzY093biBpcyBjbGVhcmVkLgotCSAqIC0gSWYgRGVzY093biBpcyBzZXQgZmlyc3QgdGhlIE5JQyBjb3VsZCByZXBvcnQgdGhlCisJICogICBzaW5jZSBEZXNjT3duZWQgaXMgY2xlYXJlZC4KKwkgKiAtIElmIERlc2NPd25lZCBpcyBzZXQgZmlyc3QgdGhlIE5JQyBjb3VsZCByZXBvcnQgdGhlCiAJICogICBwYWNrZXQgYXMgc2VudCwgYnV0IHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB3b3VsZCBpZ25vcmUgaXQKIAkgKiAgIHNpbmNlIHRoZSBucC0+Y3VyX3R4IHdhcyBub3QgeWV0IGluY3JlYXNlZC4KIAkgKi8KQEAgLTEwNTUsNyArMTAzNSw3IEBACiAJbnAtPmN1cl90eCsrOwogCiAJd21iKCk7IC8qIGZsdXNoIGxlbmd0aCwgYnVmZmVyMSwgYnVmZmVyMiAqLwotCW5wLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBEZXNjT3duOworCW5wLT50eF9yaW5nW2VudHJ5XS5zdGF0dXMgPSBEZXNjT3duZWQ7CiAJd21iKCk7IC8qIGZsdXNoIHN0YXR1cyBhbmQga2ljayB0aGUgaGFyZHdhcmUgKi8KIAlpb3dyaXRlMzIoMCwgbnAtPmJhc2VfYWRkciArIFR4U3RhcnREZW1hbmQpOwogCW5wLT50eF9xX2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMTE1NSwxMiArMTEzNSwxMiBAQAogCiAJCWhhbmRsZWQgPSAxOwogCi0JCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgUnhOb0J1ZikpCisJCWlmIChpbnRyX3N0YXR1cyAmIChSeEludHIgfCBSeE5vQnVmKSkKIAkJCW5ldGRldl9yeChkZXYpOwogCQlpZiAoaW50cl9zdGF0dXMgJiBSeE5vQnVmKQogCQkJaW93cml0ZTMyKDAsIGlvYWRkciArIFJ4U3RhcnREZW1hbmQpOwogCi0JCWlmIChpbnRyX3N0YXR1cyAmIChUeElkbGUgfCBJbnRyVHhEb25lKSAmJgorCQlpZiAoaW50cl9zdGF0dXMgJiAoVHhOb0J1ZiB8IFR4SW50cikgJiYKIAkJCW5wLT5jdXJfdHggIT0gbnAtPmRpcnR5X3R4KSB7CiAJCQlzcGluX2xvY2soJm5wLT5sb2NrKTsKIAkJCW5ldGRldl90eF9kb25lKGRldik7CkBAIC0xMTY4LDggKzExNDgsOCBAQAogCQl9CiAKIAkJLyogQWJub3JtYWwgZXJyb3Igc3VtbWFyeS91bmNvbW1vbiBldmVudHMgaGFuZGxlcnMuICovCi0JCWlmIChpbnRyX3N0YXR1cyAmIChBYm5vcm1hbEludHIgfCBUeEZJRk9VbmRlcmZsb3cgfCBJbnRyUENJRXJyIHwKLQkJCQkJCSAgIFRpbWVySW50IHwgSW50clR4U3RvcHBlZCkpCisJCWlmIChpbnRyX3N0YXR1cyAmIChBYm5vcm1hbEludHIgfCBUeEZJRk9VbmRlcmZsb3cgfCBTeXRlbUVycm9yIHwKKwkJCQkJCSAgIFRpbWVySW50IHwgVHhEaWVkKSkKIAkJCW5ldGRldl9lcnJvcihkZXYsIGludHJfc3RhdHVzKTsKIAogCQlpZiAoLS13b3JrX2xpbWl0IDwgMCkgewpAQCAtMTMwNSw3ICsxMjg1LDcgQEAKIAkJCW5wLT5yeF9yaW5nW2VudHJ5XS5idWZmZXIxID0gbnAtPnJ4X2FkZHJbZW50cnldOwogCQl9CiAJCXdtYigpOwotCQlucC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzID0gRGVzY093bjsKKwkJbnAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyA9IERlc2NPd25lZDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTEzNDIsNyArMTMyMiw3IEBACiAJCQkgICBkZXYtPm5hbWUsIG5ldyk7CiAJCXVwZGF0ZV9jc3I2KGRldiwgbmV3KTsKIAl9Ci0JaWYgKGludHJfc3RhdHVzICYgSW50clJ4RGllZCkgewkJLyogTWlzc2VkIGEgUnggZnJhbWUuICovCisJaWYgKGludHJfc3RhdHVzICYgUnhEaWVkKSB7CQkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KIAkJbnAtPnN0YXRzLnJ4X2Vycm9ycysrOwogCX0KIAlpZiAoaW50cl9zdGF0dXMgJiBUaW1lckludCkgewpAQCAtMTM3OCwxNiArMTM1OCwxNCBAQAogCXUzMiByeF9tb2RlOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KLQkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgZGV2LT5uYW1lKTsKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0QWxsUGh5cworCQlyeF9tb2RlID0gUnhBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBSeEFjY2VwdEFsbFBoeXMKIAkJCXwgQWNjZXB0TXlQaHlzOwogCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KQogCQkJICAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CisJCXJ4X21vZGUgPSBSeEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5czsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJaW50IGk7CkBAIC0xMzk4LDcgKzEzNzYsNyBAQAogCQkJZmlsdGVyYml0ICY9IDB4M2Y7CiAJCQltY19maWx0ZXJbZmlsdGVyYml0ID4+IDVdIHw9IDEgPDwgKGZpbHRlcmJpdCAmIDMxKTsKIAkJfQotCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOworCQlyeF9tb2RlID0gUnhBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CiAJfQogCWlvd3JpdGUzMihtY19maWx0ZXJbMF0sIGlvYWRkciArIE11bHRpY2FzdEZpbHRlcjApOwogCWlvd3JpdGUzMihtY19maWx0ZXJbMV0sIGlvYWRkciArIE11bHRpY2FzdEZpbHRlcjEpOwpAQCAtMTQ2OSw3ICsxNDQ3LDcgQEAKIAlkZWJ1ZyA9IHZhbHVlOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBuZXRkZXZfZ2V0X2RydmluZm8sCiAJLmdldF9zZXR0aW5ncwkJPSBuZXRkZXZfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJCT0gbmV0ZGV2X3NldF9zZXR0aW5ncywKQEAgLTE2MjQsNyArMTYwMiw3IEBACiAKIAkJc3luY2hyb25pemVfaXJxKGRldi0+aXJxKTsKIAkJbmV0aWZfdHhfZGlzYWJsZShkZXYpOwotCQorCiAJCW5wLT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzICs9IGlvcmVhZDMyKGlvYWRkciArIFJ4TWlzc2VkKSAmIDB4ZmZmZjsKIAogCQkvKiBubyBtb3JlIGhhcmR3YXJlIGFjY2Vzc2VzIGJlaGluZCB0aGlzIGxpbmUuICovCkBAIC0xNjQ2LDE0ICsxNjI0LDE4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CiAJc3RydWN0IG5ldGRldl9wcml2YXRlICpucCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldHZhbCA9IDA7CiAKIAlydG5sX2xvY2soKTsKIAlpZiAobmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKIAkJZ290byBvdXQ7IC8qIGRldmljZSBub3Qgc3VzcGVuZGVkICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewotCQlwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQkvKglwY2lfcG93ZXJfb24ocGRldik7ICovCi0KKwkJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKKwkJCXByaW50ayAoS0VSTl9FUlIKKwkJCQkiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIsCisJCQkJZGV2LT5uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CiAJCXNwaW5fbG9ja19pcnEoJm5wLT5sb2NrKTsKIAkJaW93cml0ZTMyKDEsIG5wLT5iYXNlX2FkZHIrUENJQnVzQ2ZnKTsKIAkJaW9yZWFkMzIobnAtPmJhc2VfYWRkcitQQ0lCdXNDZmcpOwpAQCAtMTY3MSw3ICsxNjUzLDcgQEAKIAl9CiBvdXQ6CiAJcnRubF91bmxvY2soKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0dmFsOwogfQogI2VuZGlmCiAKQEAgLTE2ODksNyArMTY3MSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCB3ODQwX2luaXQodm9pZCkKIHsKIAlwcmludGsodmVyc2lvbik7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmdzg0MF9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ3ODQwX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB3ODQwX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jIGIvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMKaW5kZXggZjg3NGU0ZjYuLjYyOWVhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3hpcmNvbV9jYi5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHByaXZhdGUtPnBkZXYpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gbmV0ZGV2X2dldF9kcnZpbmZvLAogfTsKIApAQCAtMTI2NCw4ICsxMjY0LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgeGlyY29tX2luaXQodm9pZCkKIHsKLQlwY2lfcmVnaXN0ZXJfZHJpdmVyKCZ4aXJjb21fb3BzKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmeGlyY29tX29wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB4aXJjb21fZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX3R1bGlwX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fdHVsaXBfY2IuYwppbmRleCAxN2NhN2RjLi4zMTI3ODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fdHVsaXBfY2IuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fdHVsaXBfY2IuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiBzdGF0aWMgaW50IHhpcmNvbV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgY2hlY2tfZHVwbGV4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9wczsKIAogCiAvKiBUaGUgWGlyY29tIGNhcmRzIGFyZSBwaWNreSBhYm91dCB3aGVuIGNlcnRhaW4gYml0cyBpbiBDU1I2IGNhbiBiZQpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKHRwLT5wZGV2KSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CiAJLmdldF9zZXR0aW5ncyA9IHhpcmNvbV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncyA9IHhpcmNvbV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0geGlyY29tX2dldF9kcnZpbmZvLApAQCAtMTcwNyw3ICsxNzA3LDcgQEAKICNpZmRlZiBNT0RVTEUKIAlwcmludGsodmVyc2lvbik7CiAjZW5kaWYKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZ4aXJjb21fZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmeGlyY29tX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCAzMjlkOWZlLi5kZThkYTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtNjksNyArNjksNyBAQAogLyogTmV0d29yayBkZXZpY2UgcGFydCBvZiB0aGUgZHJpdmVyICovCiAKIHN0YXRpYyBMSVNUX0hFQUQodHVuX2Rldl9saXN0KTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgdHVuX2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHM7CiAKIC8qIE5ldCBkZXZpY2Ugb3Blbi4gKi8KIHN0YXRpYyBpbnQgdHVuX25ldF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNzcsNyArMTc3LDcgQEAKIHN0YXRpYyB2b2lkIHR1bl9uZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwotICAgCisKIAlzd2l0Y2ggKHR1bi0+ZmxhZ3MgJiBUVU5fVFlQRV9NQVNLKSB7CiAJY2FzZSBUVU5fVFVOX0RFVjoKIAkJLyogUG9pbnQtdG8tUG9pbnQgVFVOIERldmljZSAqLwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCWRldi0+bXR1ID0gMTUwMDsKIAogCQkvKiBaZXJvIGhlYWRlciBsZW5ndGggKi8KLQkJZGV2LT50eXBlID0gQVJQSFJEX05PTkU7IAorCQlkZXYtPnR5cGUgPSBBUlBIUkRfTk9ORTsKIAkJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUCB8IElGRl9NVUxUSUNBU1Q7CiAJCWRldi0+dHhfcXVldWVfbGVuID0gVFVOX1JFQURRX1NJWkU7ICAvKiBXZSBwcmVmZXIgb3VyIG93biBxdWV1ZSBsZW5ndGggKi8KIAkJYnJlYWs7CkBAIC0yMDYsNyArMjA2LDcgQEAKIAogLyogUG9sbCAqLwogc3RhdGljIHVuc2lnbmVkIGludCB0dW5fY2hyX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKiB3YWl0KQoteyAgCit7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwogCkBAIC0yMTYsNyArMjE2LDcgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9wb2xsXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJnR1bi0+cmVhZF93YWl0LCB3YWl0KTsKLSAKKwogCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZ0dW4tPnJlYWRxKSkKIAkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOwogCkBAIC0yNDAsNyArMjQwLDcgQEAKIAogCWlmICgodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spID09IFRVTl9UQVBfREVWKQogCQlhbGlnbiA9IE5FVF9JUF9BTElHTjsKLSAKKwogCWlmICghKHNrYiA9IGFsbG9jX3NrYihsZW4gKyBhbGlnbiwgR0ZQX0tFUk5FTCkpKSB7CiAJCXR1bi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTI2NywyOSArMjY3LDI5IEBACiAKIAlpZiAodHVuLT5mbGFncyAmIFRVTl9OT0NIRUNLU1VNKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOwotIAorCiAJbmV0aWZfcnhfbmkoc2tiKTsKIAl0dW4tPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7Ci0gICAKKwogCXR1bi0+c3RhdHMucnhfcGFja2V0cysrOwogCXR1bi0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOwogCiAJcmV0dXJuIGNvdW50OwotfSAKK30KIAogc3RhdGljIGlubGluZSBzaXplX3QgaW92X3RvdGFsKGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCXNpemVfdCBsZW47CiAKLQlmb3IgKGkgPSAwLCBsZW4gPSAwOyBpIDwgY291bnQ7IGkrKykgCisJZm9yIChpID0gMCwgbGVuID0gMDsgaSA8IGNvdW50OyBpKyspCiAJCWxlbiArPSBpdltpXS5pb3ZfbGVuOwogCiAJcmV0dXJuIGxlbjsKIH0KIAogLyogV3JpdGV2ICovCi1zdGF0aWMgc3NpemVfdCB0dW5fY2hyX3dyaXRldihzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsIAorc3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZXYoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTMwMyw3ICszMDMsNyBAQAogfQogCiAvKiBXcml0ZSAqLwotc3RhdGljIHNzaXplX3QgdHVuX2Nocl93cml0ZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLCAKK3N0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKIAkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlzdHJ1Y3QgaW92ZWMgaXYgPSB7ICh2b2lkIF9fdXNlciAqKSBidWYsIGNvdW50IH07CkBAIC0zMjYsMTEgKzMyNiwxMSBAQAogCQkJLyogUGFja2V0IHdpbGwgYmUgc3RyaXBlZCAqLwogCQkJcGkuZmxhZ3MgfD0gVFVOX1BLVF9TVFJJUDsKIAkJfQotIAorCiAJCWlmIChtZW1jcHlfdG9pb3ZlYyhpdiwgKHZvaWQgKikgJnBpLCBzaXplb2YocGkpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQl0b3RhbCArPSBzaXplb2YocGkpOwotCX0gICAgICAgCisJfQogCiAJbGVuID0gbWluX3QoaW50LCBza2ItPmxlbiwgbGVuKTsKIApAQCAtNDI3LDcgKzQyNyw3IEBACiB9CiAKIC8qIFJlYWQgKi8KLXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLCAKK3N0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLAogCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IGlvdmVjIGl2ID0geyBidWYsIGNvdW50IH07CkBAIC00ODAsOCArNDgwLDggQEAKIAkJaWYgKHR1bi0+b3duZXIgIT0gLTEgJiYKIAkJICAgIGN1cnJlbnQtPmV1aWQgIT0gdHVuLT5vd25lciAmJiAhY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07Ci0JfSAKLQllbHNlIGlmIChfX2Rldl9nZXRfYnlfbmFtZShpZnItPmlmcl9uYW1lKSkgCisJfQorCWVsc2UgaWYgKF9fZGV2X2dldF9ieV9uYW1lKGlmci0+aWZyX25hbWUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAllbHNlIHsKIAkJY2hhciAqbmFtZTsKQEAgLTUwMSw5ICs1MDEsOSBAQAogCQkJLyogVEFQIGRldmljZSAqLwogCQkJZmxhZ3MgfD0gVFVOX1RBUF9ERVY7CiAJCQluYW1lID0gInRhcCVkIjsKLQkJfSBlbHNlIAorCQl9IGVsc2UKIAkJCWdvdG8gZmFpbGVkOwotICAgCisKIAkJaWYgKCppZnItPmlmcl9uYW1lKQogCQkJbmFtZSA9IGlmci0+aWZyX25hbWU7CiAKQEAgLTUzMyw3ICs1MzMsNyBAQAogCQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2UodHVuLT5kZXYpOwogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyX2ZyZWVfZGV2OwotCQorCiAJCWxpc3RfYWRkKCZ0dW4tPmxpc3QsICZ0dW5fZGV2X2xpc3QpOwogCX0KIApAQCAtNTU3LDcgKzU1Nyw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB0dW5fY2hyX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCAKK3N0YXRpYyBpbnQgdHVuX2Nocl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtNzExLDE0ICs3MTEsMTQgQEAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9mYXN5bmMgJWRcbiIsIHR1bi0+ZGV2LT5uYW1lLCBvbik7CiAKIAlpZiAoKHJldCA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmdHVuLT5mYXN5bmMpKSA8IDApCi0JCXJldHVybiByZXQ7IAotIAorCQlyZXR1cm4gcmV0OworCiAJaWYgKG9uKSB7CiAJCXJldCA9IGZfc2V0b3duKGZpbGUsIGN1cnJlbnQtPnBpZCwgMCk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCQl0dW4tPmZsYWdzIHw9IFRVTl9GQVNZTkM7Ci0JfSBlbHNlIAorCX0gZWxzZQogCQl0dW4tPmZsYWdzICY9IH5UVU5fRkFTWU5DOwogCiAJcmV0dXJuIDA7CkBAIC03NjIsNyArNzYyLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHVuX2ZvcHMgPSB7Ci0JLm93bmVyCT0gVEhJU19NT0RVTEUsCQorCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCiAJLnJlYWQJPSB0dW5fY2hyX3JlYWQsCiAJLnJlYWR2CT0gdHVuX2Nocl9yZWFkdiwKQEAgLTc3Miw3ICs3NzIsNyBAQAogCS5pb2N0bAk9IHR1bl9jaHJfaW9jdGwsCiAJLm9wZW4JPSB0dW5fY2hyX29wZW4sCiAJLnJlbGVhc2UgPSB0dW5fY2hyX2Nsb3NlLAotCS5mYXN5bmMgPSB0dW5fY2hyX2Zhc3luYwkJCisJLmZhc3luYyA9IHR1bl9jaHJfZmFzeW5jCiB9OwogCiBzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdHVuX21pc2NkZXYgPSB7CkBAIC04NTYsNyArODU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyB0dW5fZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHR1bl9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCT0gdHVuX2dldF9zZXR0aW5ncywKIAkuZ2V0X2RydmluZm8JPSB0dW5fZ2V0X2RydmluZm8sCiAJLmdldF9tc2dsZXZlbAk9IHR1bl9nZXRfbXNnbGV2ZWwsCkBAIC04ODMsNyArODgzLDcgQEAKIHsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuLCAqbnh0OwogCi0JbWlzY19kZXJlZ2lzdGVyKCZ0dW5fbWlzY2Rldik7ICAKKwltaXNjX2RlcmVnaXN0ZXIoJnR1bl9taXNjZGV2KTsKIAogCXJ0bmxfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0dW4sIG54dCwgJnR1bl9kZXZfbGlzdCwgbGlzdCkgewpAQCAtODkxLDcgKzg5MSw3IEBACiAJCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKHR1bi0+ZGV2KTsKIAl9CiAJcnRubF91bmxvY2soKTsKLQkKKwogfQogCiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmggYi9kcml2ZXJzL25ldC90eXBob29uLWZpcm13YXJlLmgKaW5kZXggMmJmNDdkOS4uMTgyZDY5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi1maXJtd2FyZS5oCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24tZmlybXdhcmUuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgMTk5OS0yMDA0IDNDb20gQ29ycG9yYXRpb24uICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAKKyAqIENvcHlyaWdodCAxOTk5LTIwMDQgM0NvbSBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBvZiB0aGUgM2M5OTBpbWcuaAogICogbWljcm9jb2RlIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDM3NTAgKzI5LDM3NTAgQEAKICAqIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKQogICogRU1CT0RJRUQgSU4gQU5ZIE9USEVSIDNDT00gSEFSRFdBUkUgT1IgU09GVFdBUkUgRUlUSEVSIFNPTEVMWSBPUiBJTgogICogQ09NQklOQVRJT04gV0lUSCBUSEUgM2M5OTBpbWcuaCBNSUNST0NPREUgU09GVFdBUkUKLSAqLyAKKyAqLwogCiAgLyogdmVyIDAzLjAwMS4wMDggKi8KIHN0YXRpYyBjb25zdCB1OCB0eXBob29uX2Zpcm13YXJlX2ltYWdlW10gPSB7Ci0weDU0LCAweDU5LCAweDUwLCAweDQ4LCAweDRmLCAweDRmLCAweDRlLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAKLTB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4Y2IsIDB4OTksIDB4YjEsIDB4ZDQsIAotMHg0YywgMHhiOCwgMHhkMCwgMHg0YiwgMHgzMiwgMHgwMiwgMHhkNCwgMHhlZSwgMHg3MywgMHg3ZSwgMHgwYiwgMHgxMywgCi0weDliLCAweGMwLCAweGFlLCAweGY0LCAweDQwLCAweDAxLCAweDAwLCAweDAwLCAweGU4LCAweGZjLCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MzksIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4ZWEsIAotMHgwNCwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlYSwgCi0weDAxLCAweDAwLCAweDAwLCAweGVhLCAweDMyLCAweDAyLCAweDAwLCAweGVhLCAweGM1LCAweDE0LCAweDAwLCAweGVhLCAKLTB4MDcsIDB4MDAsIDB4MmQsIDB4ZTksIDB4MGUsIDB4MDAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4MGYsIDB4ZTEsIAotMHhkMCwgMHgyMCwgMHg5ZiwgMHhlNSwgMHgxMiwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwgCi0weDAxLCAweDAwLCAweDgwLCAweGUwLCAweDA0LCAweDIwLCAweDgxLCAweGU0LCAweDAxLCAweDAwLCAweDUwLCAweGUxLCAKLTB4ZmMsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4YTAsIDB4ZTEsIAotMHgwZSwgMHhiMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywgMHhhOCwgMHgxMCwgMHg5ZiwgMHhlNSwgCi0weDAwLCAweDAwLCAweDgxLCAweGU1LCAweGE0LCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDgxLCAweGU1LCAKLTB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTMsIAotMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHhkNywgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgCi0weDg4LCAweGQwLCAweDlmLCAweGU1LCAweGRiLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAKLTB4N2MsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZDIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIAotMHg3NCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkMSwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgCi0weDZjLCAweGQwLCAweDlmLCAweGU1LCAweDliLCAweDE0LCAweDAwLCAweGViLCAweGQzLCAweDAwLCAweGEwLCAweGUzLCAKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4NjAsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4NjAsIDB4MDAsIDB4OWYsIDB4ZTUsIAotMHg2MCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHg2MCwgMHgyMCwgMHg5ZiwgMHhlNSwgMHhkYiwgMHhmZiwgMHhmZiwgMHhlYiwgCi0weDVjLCAweDAwLCAweDlmLCAweGU1LCAweDVjLCAweDEwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweGEwLCAweGUzLCAKLTB4ZDcsIDB4ZmYsIDB4ZmYsIDB4ZWIsIDB4NTQsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NTQsIDB4MTAsIDB4OWYsIDB4ZTUsIAotMHhkNCwgMHhmZiwgMHhmZiwgMHhlYiwgMHgwYSwgMHgwMCwgMHhhMCwgMHhlMSwgMHgwYiwgMHhmMCwgMHhhMCwgMHhlMSwgCi0weGQzLCAweDEwLCAweGEwLCAweGUzLCAweDAxLCAweGYwLCAweDIxLCAweGUxLCAweGQ0LCAweGZmLCAweGZmLCAweGViLCAKLTB4M2MsIDB4YTAsIDB4OWYsIDB4ZTUsIDB4MWEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4YzYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIAotMHgxNSwgMHgyMSwgMHhmZiwgMHhmZiwgMHgwYywgMHgwMCwgMHgxMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxMCwgMHgwMCwgCi0weDNjLCAweDM4LCAweDAwLCAweDgwLCAweGZjLCAweDM3LCAweDAwLCAweDgwLCAweGZjLCAweDNmLCAweDAwLCAweDgwLCAKLTB4N2MsIDB4MzQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MGYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsIAotMHhhZCwgMHhkZSwgMHhhZCwgMHhkZSwgMHhiMCwgMHhiYiwgMHgwMCwgMHgwMCwgMHgyNCwgMHhhYiwgMHgyMCwgMHg0MCwgCi0weDQ4LCAweDI5LCAweDAwLCAweDAwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweGJkLCAweGJhLCAweDIxLCAweDQwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDU4LCAweDU3LCAweDAwLCAweDAwLCAweDg2LCAweDRiLCAweDAwLCAweDAwLCAweDYwLCAweDAxLCAweGZmLCAweGZmLCAKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NGQsIDB4MDAsIDB4MjQsIDB4MjgsIDB4NjgsIDB4MDAsIDB4MjgsIAotMHgxZSwgMHhkMCwgMHgzOCwgMHgxYywgMHgxMCwgMHg0OSwgMHgwNCwgMHhmMCwgMHg3YiwgMHhmZCwgMHgyOSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweDI4LCAweDE1LCAweGQwLCAweDM4LCAweDAxLCAweDBkLCAweDQ5LCAKLTB4NDAsIDB4MTgsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4NDEsIDB4NmIsIDB4ODAsIDB4MjksIAotMHgwYywgMHhkMiwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywgMHgyOCwgMHg2OCwgMHhjMSwgMHg2OSwgMHhjMCwgMHg0NiwgCi0weDI5LCAweDYwLCAweDM5LCAweDA3LCAweDQxLCAweDYwLCAweDA0LCAweDYyLCAweGM3LCAweDYyLCAweGIwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsIAotMHhlZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMiwgMHg0OSwgMHgwYSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweGMyLCAweDYxLCAweDA4LCAweDYwLCAweDcwLCAweDQ3LCAKLTB4ZTgsIDB4MTcsIDB4MDAsIDB4ODAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMSwgCi0weGMwLCAweDEwLCAweDgxLCAweGUzLCAweDAxLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIAotMHhjMCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgCi0weDAwLCAweDAwLCAweDBmLCAweGUxLCAweGMwLCAweDAwLCAweGMwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4NDAsIDB4MDAsIDB4ODAsIDB4ZTMsIAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgCi0weDgwLCAweDAwLCAweDEwLCAweGUzLCAweDgwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MTIsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsIAotMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweGUzLCAKLTB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4OTEsIDB4MDAsIDB4MDAsIDB4ZTAsIAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHgyMCwgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMCwgCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweGI1LCAweDA4LCAweDRmLCAweDY0LCAweDI4LCAweDA0LCAweGQzLCAKLTB4NjQsIDB4MjAsIDB4MzgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDMsIDB4ZTAsIDB4MzgsIDB4NjMsIAotMHgwNCwgMHg0OSwgMHgwNSwgMHhmMCwgMHgwMSwgMHhmYiwgMHg3OCwgMHg2MywgMHhiOCwgMHg2MywgMHg4MCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDg4LCAweDEzLCAweDAwLCAweDAwLCAKLTB4ODAsIDB4YjQsIDB4MTAsIDB4NGIsIDB4MDAsIDB4MjIsIDB4MWYsIDB4NmIsIDB4NjQsIDB4MmYsIDB4MDMsIDB4ZDIsIAotMHgwOSwgMHg2OCwgMHgwOSwgMHg2OCwgMHg0OSwgMHgwOCwgMHgwMiwgMHhkMiwgMHgxMCwgMHgxYywgMHg4MCwgMHhiYywgCi0weDcwLCAweDQ3LCAweDE5LCAweDFjLCAweGRiLCAweDZiLCAweDRmLCAweDZiLCAweGJiLCAweDQyLCAweDA1LCAweGQyLCAKLTB4NDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTgsIDB4MTgsIDB4YzgsIDB4NjMsIDB4ZjEsIDB4ZTcsIAotMHg0MSwgMHg2OCwgMHgwNSwgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHgwNCwgMHg0OCwgMHhjMSwgMHg2YiwgCi0weDAxLCAweDMxLCAweGMxLCAweDYzLCAweDAyLCAweDIwLCAweGU4LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIAotMHgxNSwgMHg0YywgMHgwMCwgMHgyMCwgMHgyMSwgMHg2YiwgMHg2NCwgMHgyOSwgMHgwYiwgMHhkMiwgMHhiOSwgMHg2ZSwgCi0weDQ5LCAweDA4LCAweDA4LCAweGQzLCAweDIxLCAweDZjLCAweGEyLCAweDZiLCAweDkxLCAweDQyLCAweDA3LCAweGQyLCAKLTB4ZmEsIDB4MWQsIDB4MzksIDB4MzIsIDB4NTIsIDB4OGIsIDB4ODksIDB4MTgsIDB4MjEsIDB4NjQsIDB4OTAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgCi0weDM4LCAweDZiLCAweDAyLCAweGYwLCAweDJkLCAweGZlLCAweDM4LCAweDFjLCAweDAyLCAweGYwLCAweGU4LCAweGZhLCAKLTB4MDEsIDB4MjAsIDB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsIDB4YzgsIDB4NzMsIDB4MDUsIDB4NDksIAotMHgwYSwgMHg2YywgMHgxMiwgMHgxOCwgMHgwYSwgMHg2NCwgMHgwNCwgMHg0OSwgMHg4YSwgMHg2ZCwgMHgxMiwgMHgxOCwgCi0weDhhLCAweDY1LCAweGU0LCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAKLTB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MGEsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDIsIDB4MjMsIAotMHgxOCwgMHg0MCwgMHgwOSwgMHg0YSwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHhkMSwgMHg2MywgCi0weDExLCAweDY0LCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDA2LCAweDQ4LCAweDA3LCAweDY4LCAweDdiLCAweDFjLCAKLTB4MDMsIDB4NjAsIDB4MGEsIDB4MmYsIDB4ZjcsIDB4ZDMsIDB4MDEsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsIAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4MCwgCi0weDcwLCAweDQ3LCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDAwLCAweDBjLCAweDEwLCAweDE4LCAweDBhLCAweDA0LCAKLTB4MTIsIDB4MGMsIDB4MDksIDB4MGMsIDB4NTEsIDB4MTgsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MGMsIDB4MDUsIDB4ZDAsIAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMCwgMHgwYywgMHgwOCwgMHgxOCwgMHgwMSwgMHgwYywgMHhmOSwgMHhkMSwgCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LCAweDAwLCAweDIyLCAweDAwLCAweDI5LCAKLTB4MTgsIDB4ZDAsIDB4NGYsIDB4MDgsIDB4N2IsIDB4MWUsIDB4MDAsIDB4MmYsIAotMHgwNiwgMHhkMCwgMHgwNywgMHg4OCwgMHhiYSwgMHgxOCwgMHgwMiwgMHgzMCwgMHgxZiwgMHgxYywgMHgwMSwgMHgzYiwgCi0weDAwLCAweDJmLCAweGY4LCAweGQxLCAweDQ5LCAweDA4LCAweDAzLCAweGQzLCAweDAwLCAweDg4LCAweDAwLCAweDA2LCAKLTB4MDAsIDB4MGUsIDB4ODIsIDB4MTgsIDB4MTAsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIAotMHgxMSwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywgMHhmOSwgMHhkMSwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywgCi0weDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDgzLCAweDg5LCAweGM3LCAweDg5LCAweGZiLCAweDE4LCAKLTB4MDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDcsIDB4OGEsIDB4ZmIsIDB4MTgsIDB4NDAsIDB4N2EsIDB4MDAsIDB4MDIsIAotMHhjNywgMHgxOCwgMHgzOCwgMHgwYywgMHgwNSwgMHhkMCwgMHgzOCwgMHgwNCwgMHgwMCwgMHgwYywgMHgzYiwgMHgwYywgCi0weGM3LCAweDE4LCAweDM4LCAweDBjLCAweGY5LCAweGQxLCAweDA4LCAweDFjLCAweDExLCAweDFjLCAweGZmLCAweGY3LCAKLTB4YzgsIDB4ZmYsIDB4MDEsIDB4MWMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YjAsIDB4ZmYsIDB4ODAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHgwMiwgMHgyMywgMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwgCi0weDAwLCAweDI3LCAweDAwLCAweDJhLCAweDBmLCAweGQwLCAweDBhLCAweDRhLCAweDkzLCAweDY5LCAweDAxLCAweDMzLCAKLTB4OTMsIDB4NjEsIDB4MGEsIDB4NjgsIDB4OGIsIDB4NjgsIDB4OWEsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MWMsIDB4MTgsIAotMHg1NywgMHg4MSwgMHgwOSwgMHg2OSwgMHgxMCwgMHgxYywgMHhmZiwgMHhmNywgMHhhYywgMHhmZiwgMHhjMCwgMHg0MywgCi0weDYwLCAweDgxLCAweDM4LCAweDFjLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDQsIDB4MjMsIDB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsIAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgxMSwgMHhkMCwgMHg0YSwgMHg2OCwgMHg1MiwgMHgwOSwgMHgwZSwgMHhkMywgCi0weDA5LCAweDRhLCAweDEzLCAweDZhLCAweDAxLCAweDMzLCAweDEzLCAweDYyLCAweGNiLCAweDY4LCAweDAyLCAweDY4LCAKLTB4OWMsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4M2EsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIAotMHgwMCwgMHhmMCwgMHgyZSwgMHhmOCwgMHgyMCwgMHg4MiwgMHgzOCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDgwLCAweDIzLCAKLTB4ODIsIDB4NjgsIDB4MWEsIDB4NDAsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MTUsIDB4ZDAsIDB4NGEsIDB4NjgsIAotMHg5MiwgMHgwOSwgMHgxMiwgMHhkMywgMHgwYiwgMHg0YSwgMHhkMywgMHg2OSwgMHgwMSwgMHgzMywgMHhkMywgMHg2MSwgCi0weGNiLCAweDY4LCAweDAyLCAweDY4LCAweDlmLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDNhLCAKLTB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDEsIAotMHgwNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhmOCwgMHg4MCwgMHgyMCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAKLTB4YjAsIDB4YjUsIDB4MTQsIDB4MWMsIDB4MDUsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MzgsIDB4NjksIDB4YjksIDB4NjgsIAotMHg0MSwgMHgxOCwgMHgzOCwgMHg2OCwgMHhmZiwgMHhmNywgMHg1MywgMHhmZiwgMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwgCi0weDA5LCAweDBjLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDM5LCAweGZmLCAweDA0LCAweDFjLCAweGI4LCAweDY4LCAKLTB4NzksIDB4NjksIDB4NDAsIDB4MTgsIDB4NjksIDB4NjgsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4MmEsIDB4NjgsIAotMHgxMiwgMHgxOCwgMHgwOSwgMHgxYSwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNSwgMHhmOSwgMHhjMCwgMHg0MywgCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDI2LCAweGZmLCAweDA0LCAweDFjLCAKLTB4ZTAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHhjMCwgMHgwOCwgMHgxYSwgMHhkMywgMHhiOCwgMHg2YSwgCi0weGY5LCAweDZiLCAweDQwLCAweDE4LCAweDc5LCAweDZjLCAweDAwLCAweGYwLCAweGVkLCAweGY4LCAweGMwLCAweDQzLCAKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4NDgsIDB4MDcsIDB4ZDAsIDB4MjAsIDB4MjMsIDB4YjksIDB4NjksIAotMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2MywgMHgwNywgMHhlMCwgCi0weGZmLCAweDIzLCAweDAxLCAweDMzLCAweGI5LCAweDY5LCAweDE5LCAweDQzLCAweGI5LCAweDYxLCAweDQxLCAweDZhLCAKLTB4MDEsIDB4MzEsIDB4NDEsIDB4NjIsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHg0MSwgMHgwOSwgCi0weDFjLCAweGQzLCAweGMwLCAweDA4LCAweDFhLCAweGQzLCAweGY4LCAweDFkLCAweDM5LCAweDMwLCAweDAwLCAweDdiLCAKLTB4MDYsIDB4MjgsIDB4MTUsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4ZjgsIDB4MDEsIDB4MWMsIAotMHgwYSwgMHg0OCwgMHgwNywgMHhkMCwgMHg0MCwgMHgyMywgMHhiOSwgMHg2OSwgCi0weDE5LCAweDQzLCAweGI5LCAweDYxLCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLCAweDA3LCAweGUwLCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4YjksIDB4NjksIDB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4YzEsIDB4NmEsIAotMHgwMSwgMHgzMSwgMHhjMSwgMHg2MiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDBjLCAweDJiLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDZiLCAweDgxLCAweDA5LCAKLTB4MmMsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MmEsIDB4ZDMsIDB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4MDAsIDB4N2IsIAotMHgxMSwgMHgyOCwgMHgyNSwgMHhkMSwgMHhiOCwgMHg2YSwgMHgzOSwgMHg2YywgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweDA2LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDA1LCAweDA0LCAweDJkLCAweDBjLCAKLTB4MGYsIDB4NGMsIDB4MTEsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWYsIDB4ZjgsIDB4MDAsIDB4MjgsIAotMHgwYywgMHhkMCwgMHhhOCwgMHg0MiwgMHgwMiwgMHhkMSwgMHgwYywgMHg0YiwgMHg5OCwgMHg0MiwgMHgwNywgMHhkMCwgCi0weDgwLCAweDIzLCAweGI4LCAweDY5LCAweDE4LCAweDQzLCAweGI4LCAweDYxLCAweDYwLCAweDZiLCAweDAxLCAweDMwLCAKLTB4NjAsIDB4NjMsIDB4MDcsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsIAotMHhiOCwgMHg2MSwgMHhhMCwgMHg2YSwgMHgwMSwgMHgzMCwgMHhhMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHhiMCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAKLTB4ZjAsIDB4YjUsIDB4ZmYsIDB4YjAsIDB4OTksIDB4YjAsIDB4MDQsIDB4MWMsIDB4ZTAsIDB4NmIsIDB4NjEsIDB4NmMsIAotMHgwOSwgMHgxOCwgMHgwMywgMHhhYSwgMHg4NSwgMHgxOCwgMHhhMywgMHg2YSwgMHgwMCwgMHgyMCwgMHg4YSwgMHgwOCwgCi0weDAxLCAweDMyLCAweDk3LCAweDkyLCAweDA3LCAweGQwLCAweDgyLCAweDAwLCAweDlmLCAweDU4LCAweDAzLCAweGFlLCAKLTB4YjcsIDB4NTAsIDB4OTcsIDB4OWEsIDB4MDEsIDB4MzAsIDB4ODIsIDB4NDIsIDB4ZjcsIDB4ZDgsIDB4NjAsIDB4NmEsIAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwNCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgCi0weDAyLCAweDkwLCAweDAyLCAweGFmLCAweDNmLCAweDg4LCAweDAzLCAweGE4LCAweGZmLCAweGY3LCAweDg3LCAweGZlLCAKLTB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmQsIDB4ZmUsIAotMHgwNywgMHgxYywgMHhlMCwgMHg2YiwgMHhhMSwgMHg2YywgMHg0MCwgMHgxOCwgMHg2MSwgMHg2YSwgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweDA4LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDAxLCAweDkxLCAKLTB4MDEsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4ODgsIDB4NDIsIDB4MGMsIDB4ZDIsIDB4YTIsIDB4NmEsIAotMHgxMiwgMHgxOCwgMHgwOSwgMHgxYSwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyZiwgMHhmOCwgMHhjMCwgMHg0MywgCi0weDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDUwLCAweGZlLCAweDA3LCAweDFjLCAKLTB4YTgsIDB4ODksIDB4ZTksIDB4ODksIDB4MDgsIDB4MTgsIDB4MjksIDB4OGEsIDB4MDgsIDB4MTgsIDB4NjksIDB4OGEsIAotMHgwOCwgMHgxOCwgMHg2OSwgMHg3YSwgMHgwOSwgMHgwMiwgMHgwOCwgMHgxOCwgMHhhMSwgMHg2YywgMHg2MiwgMHg2YywgCi0weDg5LCAweDFhLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDExLCAweDAyLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDksIDB4MTgsIDB4MDgsIDB4MGMsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4MDQsIAotMHgwMCwgMHgwYywgMHgwOSwgMHgwYywgMHg0MSwgMHgxOCwgMHgwOCwgMHgwYywgMHhmOSwgMHhkMSwgMHgzOCwgMHgxYywgCi0weGZmLCAweGY3LCAweDJmLCAweGZlLCAweGMwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDdmLCAweGIwLCAKLTB4MTksIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsIAotMHgwMCwgMHgyOSwgMHgyZSwgMHhkMCwgMHg4MywgMHgwNywgMHg5YiwgMHgwZiwgMHhkYywgMHgwMCwgMHg0NywgMHgxOCwgCi0weDA0LCAweDI1LCAweGVmLCAweDFiLCAweGJmLCAweDA3LCAweGJmLCAweDBmLCAweGZmLCAweDAwLCAweDgwLCAweDA4LCAKLTB4ODAsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDMsIDB4MzEsIDB4ODksIDB4MDgsIDB4NGQsIDB4MWUsIDB4MDIsIDB4YzgsIAotMHhlMSwgMHg0MCwgMHhhMSwgMHg0MCwgMHg2YiwgMHgxZSwgMHgwMCwgMHgyZCwgMHgwOSwgMHhkMCwgMHgwYywgMHgwNCwgCi0weDI0LCAweDBjLCAweGEyLCAweDE4LCAweDA5LCAweDBjLCAweDhhLCAweDE4LCAweDAyLCAweGM4LCAweDFjLCAweDFjLCAKLTB4MDEsIDB4M2IsIDB4MDAsIDB4MmMsIDB4ZjUsIDB4ZDEsIDB4YjksIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZjgsIDB4NDAsIAotMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHg4OSwgMHgxOCwgMHgwMCwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywgCi0weDA1LCAweGQwLCAweDEwLCAweDA0LCAweDAwLCAweDBjLCAweDExLCAweDBjLCAweDQyLCAweDE4LCAweDEwLCAweDBjLCAKLTB4ZjksIDB4ZDEsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg5MCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgMHgxMSwgMHg0OSwgMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwgCi0weGQyLCAweDAwLCAweDUzLCAweDE4LCAweDljLCAweDY4LCAweDAxLCAweDIzLCAKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDMsIDB4MWIsIDB4MGIsIDB4OGEsIDB4NTgsIAotMHgxMiwgMHgwMywgMHgxMiwgMHgwYiwgMHg5MywgMHg0MiwgMHgwYywgMHhkMSwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgCi0weGVjLCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDZhLCAweDAxLCAweDAzLCAweDA5LCAweDBiLCAweDA3LCAweDQ4LCAKLTB4MDAsIDB4NmYsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYiwgMHhlNywgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgCi0weDAwLCAweDQwLCAweDE0LCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDk4LCAweGI0LCAweDE0LCAweDRhLCAKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4ODMsIDB4MDAsIDB4MTMsIDB4NDgsIDB4YzAsIDB4NTgsIDB4MDcsIDB4MDMsIAotMHgzZiwgMHgwYiwgMHgxMiwgMHg0OCwgMHhjMCwgMHg1OCwgMHgwMiwgMHgwMywgMHgxMiwgMHgwYiwgMHgxMSwgMHg0OCwgCi0weGMwLCAweDU4LCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDEwLCAweDRjLCAweGU0LCAweDU4LCAweDAxLCAweDIzLCAKLTB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsIDB4Y2MsIDB4MDAsIDB4MDEsIDB4MjEsIAotMHg5OCwgMHg0MiwgMHgwMSwgMHhkMSwgMHgwOCwgMHgxYywgMHgwOSwgMHhlMCwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgCi0weDEwLCAweDFhLCAweGRhLCAweDFiLCAweDgwLCAweDE4LCAweDAwLCAweGUwLCAweDE4LCAweDFhLCAweDg0LCAweDQyLCAKLTB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4OTgsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIAotMHgyMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgCi0weDE4LCAweDA0LCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDEzLCAweDA0LCAweDAwLCAweGQwLCAweDAxLCAweDNhLCAKLTB4ODAsIDB4MDAsIDB4MGIsIDB4MWMsIDB4MTMsIDB4NDksIDB4MGYsIDB4NTgsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsIAotMHgwYiwgMHg1OCwgMHhjMCwgMHg0NiwgMHg1YSwgMHg2MCwgMHgwYSwgMHg1OCwgMHgwOCwgMHgzMiwgMHgxMCwgMHg0YiwgCi0weDFiLCAweDU4LCAweDlhLCAweDQyLCAweDAxLCAweGQzLCAweDBmLCAweDRhLCAweDEyLCAweDU4LCAweDBmLCAweDRiLCAKLTB4MWYsIDB4NTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OWIsIDB4MDAsIAotMHgxNywgMHgwMywgMHgzZiwgMHgwYiwgMHg5ZiwgMHg0MiwgMHgwNiwgMHhkMSwgMHgwYSwgMHg0OCwgMHhjMSwgMHg2OCwgCi0weDAxLCAweDMxLCAweGMxLCAweDYwLCAweDAxLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDA4LCAweDRiLCAKLTB4MWIsIDB4NTgsIDB4YzAsIDB4NDYsIDB4MWEsIDB4NjAsIDB4MGEsIDB4NTAsIDB4MDAsIDB4MjAsIDB4ZjYsIDB4ZTcsIAotMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg4MCwgCi0weDE4LCAweDA0LCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDEwLCAweDA0LCAweDAwLCAweDgwLCAKLTB4ZmYsIDB4NWYsIDB4MmQsIDB4ZTksIDB4NDgsIDB4ZmUsIDB4ZmYsIDB4ZWIsIDB4MDEsIDB4YjYsIDB4YTAsIDB4ZTMsIAotMHgwMSwgMHhiMSwgMHg4YiwgMHhlMiwgMHgwMiwgMHg4YSwgMHhhMCwgMHhlMywgMHgwMSwgMHg3YSwgMHhhMCwgMHhlMywgCi0weDAxLCAweGE5LCAweGEwLCAweGUzLCAweDAxLCAweDU2LCAweGEwLCAweGUzLCAweGM4LCAweDYwLCAweDlmLCAweGU1LCAKLTB4YzgsIDB4OTAsIDB4OWYsIDB4ZTUsIDB4MTQsIDB4NDAsIDB4OWIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NTQsIDB4ZTMsIAotMHgyYywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMywgMHgwYSwgMHgxNCwgMHhlMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwYSwgCi0weDBjLCAweDAwLCAweDk2LCAweGU1LCAweDAwLCAweDAwLCAweDUwLCAweGUzLCAweDIxLCAweDAwLCAweDAwLCAweDBhLCAKLTB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIAotMHgwMSwgMHgwYSwgMHhjMCwgMHhlMywgMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwgCi0weDE0LCAweDcwLCAweDg1LCAweGU1LCAweDA2LCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDBhLCAweDE0LCAweGUzLCAKLTB4MDQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDIsIDB4MGEsIDB4YzAsIDB4ZTMsIAotMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwgMHgxNCwgMHg4MCwgMHg4NSwgMHhlNSwgCi0weDAxLCAweDA5LCAweDE0LCAweGUzLCAweDA0LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LCAKLTB4MDEsIDB4MDksIDB4YzAsIDB4ZTMsIDB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsIAotMHgxNCwgMHhhMCwgMHg4NSwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYiwgCi0weDAxLCAweDAwLCAweDE0LCAweGUzLCAweDU0LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDBiLCAweDE0LCAweGUzLCAKLTB4NjcsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDEsIDB4MGIsIDB4MTQsIDB4ZTMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MWIsIAotMHgxOCwgMHgwMCwgMHg5OSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHgxOCwgMHgwMCwgMHg4OSwgMHhlNSwgCi0weGQ1LCAweGZmLCAweGZmLCAweGVhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LCAweDAxLCAweDBhLCAweGMwLCAweGUzLCAKLTB4MWMsIDB4MDAsIDB4ODYsIDB4ZTUsIDB4MWMsIDB4MDAsIDB4ODUsIDB4ZTUsIAotMHgxNCwgMHg3MCwgMHg4NSwgMHhlNSwgMHhlMSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmZiwgMHg1ZiwgMHhiZCwgMHhlOCwgCi0weDA0LCAweGYwLCAweDVlLCAweGUyLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLCAKLTB4MTAsIDB4MTAsIDB4MWYsIDB4ZTUsIDB4MTQsIDB4MzAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4YzMsIDB4ZTEsIAotMHgxNCwgMHgyMCwgMHg4MSwgMHhlNSwgMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgwYywgMHgyMCwgMHg4MSwgMHhlNSwgCi0weDBiLCAweDEyLCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDgxLCAweGU1LCAweDE4LCAweDEwLCAweDlmLCAweGU1LCAKLTB4YjAsIDB4MjQsIDB4ZDEsIDB4ZTEsIDB4MDEsIDB4MjAsIDB4ODIsIDB4ZTIsIDB4YjAsIDB4MjQsIDB4YzEsIDB4ZTEsIAotMHgzYywgMHgyMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHg4MiwgMHhlMSwgMHgzYywgMHgwMCwgMHg4MSwgMHhlNSwgCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAKLTB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDEsIDB4MGIsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MTYsIDB4YTAsIDB4ZTMsIAotMHgxNCwgMHgwMCwgMHg4MSwgMHhlNSwgMHgwMCwgMHgxYSwgMHg4MSwgMHhlMSwgMHgyNCwgMHgyMCwgMHg5MSwgMHhlNSwgCi0weDcwLCAweDAwLCAweDFmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDIwLCAweDgwLCAweGU1LCAKLTB4MjgsIDB4MTAsIDB4OTEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MTAsIDB4ODAsIDB4ZTUsIAotMHgyYywgMHgyMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgyMCwgMHg4MiwgMHhlMiwgMHgyYywgMHgyMCwgMHg4MCwgMHhlNSwgCi0weDNmLCAweDAwLCAweDAxLCAweGUyLCAweDNmLCAweDAwLCAweDUwLCAweGUzLCAweDFlLCAweGZmLCAweDJmLCAweDExLCAKLTB4MTgsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4ODEsIDB4ZTIsIAotMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMiwgMHgxOCwgMHhhMCwgMHhlMywgMHgwYiwgMHgwMiwgMHhhMCwgMHhlMywgCi0weDAwLCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDA0LCAweDAwLCAweDgwLCAKLTB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDEsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIAotMHgwMSwgMHgwOCwgMHgxMSwgMHhlMywgMHgwYiwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMiwgMHgxOSwgMHg4MSwgMHhlMiwgCi0weDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDIwLCAweDkwLCAweGU1LCAweDQyLCAweDI4LCAweGIwLCAweGUxLCAKLTB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4ZTUsIDB4MDIsIDB4MGMsIDB4MTAsIDB4ZTMsIAotMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNiwgMHgwNywgMHhhMCwgMHhlMywgMHg0YywgMHgxMSwgMHg4MCwgMHhlNSwgCi0weDAzLCAweDAwLCAweDAwLCAweGVhLCAweDBjLCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLTB4NDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMiwgCi0weDAwLCAweDEwLCAweDkwLCAweGU1LCAweDAxLCAweDA4LCAweDExLCAweGUzLCAweDBjLCAweDEwLCAweGEwLCAweGUzLCAKLTB4MDIsIDB4MTksIDB4ODEsIDB4ZTIsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MjAsIDB4OTAsIDB4ZTUsIAotMHg0MiwgMHgyOCwgMHhiMCwgMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhlNSwgCi0weDAyLCAweDBjLCAweDEwLCAweGUzLCAweDAyLCAweDAwLCAweDAwLCAweDBhLCAweDA2LCAweDA3LCAweGEwLCAweGUzLCAKLTB4NGMsIDB4MTEsIDB4ODAsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4NGMsIDB4MDAsIDB4MWYsIDB4ZTUsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHg4MCwgMHhlNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwgCi0weGZlLCAweGZmLCAweGZmLCAweGVhLCAweDAyLCAweDFiLCAweGEwLCAweGUzLCAweDAxLCAweDA2LCAweGEwLCAweGUzLCAKLTB4MTQsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4MjEsIDB4MWYsIDB4ZTUsIAotMHgxNCwgMHgzMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHhlNSwgCi0weDFjLCAweDAwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgxLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MTQsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsIAotMHgxYywgMHgxMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgxYywgMHgxMCwgMHg5MiwgMHhlNSwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAKLTB4YzAsIDB4MjEsIDB4MWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgxNCwgMHgwMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwgCi0weDFjLCAweDAwLCAweDkyLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDAwLCAweDgxLCAweGU1LCAKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHgxNywgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgCi0weDAwLCAweGYwLCAweDkyLCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4ODAsIDB4YjUsIDB4MGYsIDB4MWMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDksIDB4ZjgsIDB4MDAsIDB4MjgsIAotMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg4NCwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI0LCAweDA3LCAweDY4LCAweDNhLCAweDc4LCAweGQyLCAweDA3LCAKLTB4ZDIsIDB4MGYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4ZmYsIDB4MjIsIDB4MDEsIDB4MzIsIAotMHg0MiwgMHg2MCwgMHgwMCwgMHhlMCwgMHg0NCwgMHg2MCwgMHgzYSwgMHg3YiwgMHg3YiwgMHg3YiwgMHgxYiwgMHgwMiwgCi0weDFhLCAweDQzLCAweDgxLCAweDJhLCAweDA4LCAweGQxLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDQyLCAweDY4LCAKLTB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4MDQsIDB4MjIsIDB4YmYsIDB4MTgsIDB4ODIsIDB4NjAsIDB4MDAsIDB4ZTAsIAotMHg4NCwgMHg2MCwgMHgzYSwgMHg3YiwgMHg3YiwgMHg3YiwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgwOCwgMHgyYSwgCi0weDA2LCAweGQxLCAweDA2LCAweDIzLCAweDQxLCAweDY4LCAweDE5LCAweDQzLCAweDQxLCAweDYwLCAweDgxLCAweDY4LCAKLTB4MGUsIDB4MzEsIDB4M2MsIDB4ZTAsIDB4YzEsIDB4MjMsIDB4ZGIsIDB4MDAsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDEsIAotMHg0MSwgMHg2OCwgMHgyNCwgMHg0YiwgMHgxOSwgMHg0MywgMHgzZSwgMHhlMCwgMHgyMywgMHg0YiwgMHg5YSwgMHg0MiwgCi0weDA0LCAweGQxLCAweDAxLCAweDIzLCAweDFiLCAweDAzLCAweDQxLCAweDY4LCAweDE5LCAweDQzLCAweDM2LCAweGUwLCAKLTB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsIAotMHgxMiwgMHgwYywgMHgyZSwgMHgzYSwgMHgxYywgMHg0YiwgMHg5YSwgMHg0MiwgMHgyZCwgMHhkOCwgMHgwMSwgMHgyNSwgCi0weDQyLCAweDY4LCAweDE1LCAweDQzLCAweDQ1LCAweDYwLCAweGJhLCAweDdiLCAweGZiLCAweDdiLCAweDFiLCAweDAyLCAKLTB4MWEsIDB4NDMsIDB4MTgsIDB4NGIsIDB4OWEsIDB4NDIsIDB4MjIsIDB4ZDEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIAotMHg0NCwgMHhjYiwgMHg5YiwgMHgwNywgMHhkYiwgMHgwZSwgMHhkYSwgMHg0MCwgMHg1YiwgMHg0MiwgMHgyMCwgMHgzMywgCi0weDllLCAweDQwLCAweDE2LCAweDQzLCAweDAzLCAweDJlLCAweDE4LCAweGQxLCAweDM5LCAweDdkLCAweDdiLCAweDdkLCAKLTB4MWIsIDB4MDIsIDB4MTksIDB4NDMsIDB4MDgsIDB4MjksIDB4MDcsIDB4ZDEsIDB4MDQsIDB4MjEsIDB4MjksIDB4NDMsIAotMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwgMHgxNiwgMHgzMSwgMHg4MSwgMHg2MCwgMHgwMSwgMHgyMSwgMHgwYSwgMHhlMCwgCi0weGMxLCAweDIzLCAweGRiLCAweDAwLCAweDk5LCAweDQyLCAweDA0LCAweGQxLCAweDAxLCAweDIxLCAweDg5LCAweDAzLCAKLTB4MjksIDB4NDMsIDB4NDEsIDB4NjAsIDB4MDAsIDB4ZTAsIDB4ODQsIDB4NjAsIDB4MDAsIDB4MjEsIDB4MDgsIDB4MWMsIAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHgwMCwgCi0weGFlLCAweDA1LCAweDAwLCAweDAwLCAweGFhLCAweGFhLCAweDAwLCAweDAwLCAweDgwLCAweGI0LCAweDQyLCAweDY4LCAKLTB4ZDEsIDB4MDgsIDB4M2YsIDB4ZDMsIDB4MDEsIDB4NjgsIDB4ODMsIDB4NjgsIDB4NTksIDB4MTgsIDB4MDIsIDB4MzksIAotMHg4ZiwgMHg3OCwgMHgzZiwgMHgwNywgMHgzZiwgMHgwZiwgMHgwNSwgMHgyZiwgMHgwMywgMHhkMSwgMHhkYSwgMHgxZCwgCi0weDBkLCAweDMyLCAweGMyLCAweDYwLCAweDA1LCAweGUwLCAweGJmLCAweDAwLCAweGRiLCAweDE5LCAweGMzLCAweDYwLCAKLTB4MDgsIDB4MjMsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4OGEsIDB4NzgsIDB4MTIsIDB4MDcsIDB4MTIsIDB4MGYsIAotMHg5MiwgMHgwMCwgMHgwMiwgMHg2MSwgMHgwYSwgMHg3OSwgMHg0YiwgMHg3OSwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgCi0weDEzLCAweDAyLCAweDEyLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LCAKLTB4MTIsIDB4MGMsIDB4NDIsIDB4NjEsIDB4Y2EsIDB4N2EsIDB4MDYsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4MTAsIDB4MjMsIAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgxMCwgMHhlMCwgMHgxMSwgMHgyYSwgMHgwMywgMHhkMSwgMHgyMCwgMHgyMywgCi0weDQyLCAweDY4LCAweDFhLCAweDQzLCAweDBhLCAweGUwLCAweDMzLCAweDJhLCAweDAzLCAweGQxLCAweDQwLCAweDIzLCAKLTB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MzIsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4ODAsIDB4MjMsIAotMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHhjOSwgMHg3YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg3NiwgCi0weDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDBhLCAweDc4LCAweGMwLCAweDQ2LCAweDAyLCAweDYwLCAweDRiLCAweDc4LCAKLTB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4OGIsIDB4NzgsIDB4MWIsIDB4MDQsIDB4MWEsIDB4NDMsIAotMHgwMiwgMHg2MCwgMHhjOSwgMHg3OCwgMHgwOSwgMHgwNiwgMHgxMSwgMHg0MywgMHgwMSwgMHg2MCwgMHg3MCwgMHg0NywgCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweDQ4LCAweDY4LCAweDgwLCAweDA5LCAweDI2LCAweGQzLCAweGI4LCAweDZhLCAKLTB4YzksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDIsIDB4MzAsIDB4MTgsIDB4NDMsIAotMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMSwgMHgyMywgMHg5YiwgMHgwMiwgMHg5OCwgMHg0MiwgCi0weDE4LCAweGQxLCAweDc4LCAweDZhLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAKLTB4NDgsIDB4NjIsIDB4MzgsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4ZGEsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIAotMHg5NSwgMHhmZCwgMHgwMSwgMHgyMCwgMHgwNywgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg3MywgMHgwNywgMHg0OSwgCi0weDRhLCAweDZjLCAweDEyLCAweDE4LCAweDRhLCAweDY0LCAweDA2LCAweDQ5LCAweDhhLCAweDZkLCAweDEyLCAweDE4LCAKLTB4OGEsIDB4NjUsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmEsIDB4ZTcsIAotMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgCi0weDgxLCAweDA3LCAweDE5LCAweGQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4MDEsIDB4MWQsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDIsIDB4MDIsIAotMHgxMiwgMHgwZSwgMHgxMiwgMHgwNiwgMHgwMCwgMHgwYSwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgMHgxOCwgMHg0MCwgCi0weDEwLCAweDQzLCAweDBhLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDEwLCAweDQzLCAweDA5LCAweDAyLCAKLTB4MWIsIDB4MGEsIDB4MTksIDB4NDAsIDB4MDgsIDB4NDMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMSwgMHgwNiwgMHgwMiwgMHgwMiwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgCi0weDFhLCAweDQwLCAweDExLCAweDQzLCAweDAyLCAweDBhLCAweDFiLCAweDBhLCAweDFhLCAweDQwLCAweDExLCAweDQzLCAKLTB4MDAsIDB4MGUsIDB4MDgsIDB4NDMsIDB4ZWQsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MjMsIAotMHg4MSwgMHg2YiwgMHgxOSwgMHg0MCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0NiwgMHhkMCwgMHhjNywgMHgxZCwgCi0weDM5LCAweDM3LCAweDM5LCAweDdiLCAweDMzLCAweDI5LCAweDAxLCAweGQwLCAweDMyLCAweDI5LCAweDNmLCAweGQxLCAKLTB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGEsIDB4NjUsIDB4YzQsIDB4MWQsIDB4MmQsIDB4MzQsIDB4Y2QsIDB4MWQsIAotMHgyZCwgMHgzNSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHhlNiwgMHg1OCwgMHhjMCwgMHg0NiwgMHhlZSwgMHg1MCwgCi0weDAxLCAweDMyLCAweDA3LCAweDJhLCAweGY4LCAweGQzLCAweDgyLCAweDZhLCAweGMwLCAweDQ2LCAweDRhLCAweDYzLCAKLTB4ODIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjIsIDB4N2EsIDB4OGIsIDB4Y2IsIDB4MWQsIDB4MzksIDB4MzMsIAotMHg1YSwgMHg4MywgMHg0MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgMHgxMiwgMHg0OCwgMHgwMSwgMHgyNywgCi0weDQyLCAweDY4LCAweDAwLCAweDJhLCAweDEwLCAweGQxLCAweGMyLCAweDY4LCAweDAwLCAweDJhLCAweDEzLCAweGQxLCAKLTB4NDIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsIDB4MDEsIDB4NjEsIDB4YzEsIDB4NjAsIDB4MDEsIDB4NmEsIAotMHgwMiwgMHgyOSwgMHgwMiwgMHhkMywgMHgyMCwgMHgzMCwgMHgwNywgMHg3MSwgMHgwYywgMHhlMCwgMHgwMCwgMHhmMCwgCi0weDEzLCAweGY4LCAweDA5LCAweGUwLCAweGMyLCAweDY4LCAweDAwLCAweDJhLCAweDAyLCAweGQxLCAweDAxLCAweDYxLCAKLTB4YzEsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4MDIsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTEsIDB4NjUsIDB4MDEsIDB4NjEsIAotMHgzOCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYSwgMHhlNywgCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDFlLCAweDQ5LCAweDAwLCAweDIyLCAweGNiLCAweDY4LCAKLTB4MDAsIDB4MmIsIDB4MzQsIDB4ZDAsIDB4YzgsIDB4MWQsIDB4ZjksIDB4MzAsIDB4ODMsIDB4NjIsIDB4Y2IsIDB4NjgsIAotMHg5YiwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjMywgMHg2MiwgMHhjZiwgMHg2OSwgMHg3YiwgMHgwMCwgMHhkZiwgMHgxOSwgCi0weDdmLCAweDAyLCAweDE3LCAweDRiLCAweGZmLCAweDE4LCAweGZmLCAweDM3LCAweDY1LCAweDM3LCAweDgzLCAweDYzLCAKLTB4MDcsIDB4NjMsIDB4Y2IsIDB4MWQsIDB4ZmYsIDB4MzMsIDB4NWEsIDB4MzMsIDB4MWEsIDB4NzIsIDB4Y2IsIDB4NjksIAotMHgwMCwgMHgyYiwgMHgwMSwgMHhkMCwgMHhjYSwgMHg2MSwgMHgwMSwgMHhlMCwgMHgwMSwgMHgyMywgMHhjYiwgMHg2MSwgCi0weDBmLCAweDFjLCAweGM5LCAweDY4LCAweDQ5LCAweDZhLCAweDA5LCAweDg5LCAweDAxLCAweDMxLCAweDQxLCAweDYzLCAKLTB4ZjgsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4M2EsIDB4MzAsIDB4NDIsIDB4NjAsIDB4MDIsIDB4ODIsIDB4ODIsIDB4NjAsIAotMHhjMiwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZSwgMHhmYSwgMHgzOCwgMHg2YSwgMHgwMSwgMHgzMCwgCi0weDM4LCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBhLCAweGY4LCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgMHhmOSwgMHgxZCwgMHhmOSwgMHgzMSwgCi0weDg4LCAweDZhLCAweGMyLCAweDFkLCAweDJkLCAweDMyLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMyLCAKLTB4MWEsIDB4NDMsIDB4YzgsIDB4NmEsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4ODAsIDB4MTgsIAotMHg4MiwgMHg3OSwgMHhjMywgMHg3OSwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwgCi0weDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDAyLCAweDM4LCAKLTB4OTIsIDB4MDQsIDB4OTIsIDB4MGMsIDB4MDAsIDB4MjYsIDB4MjUsIDB4NGQsIAotMHhlYywgMHgxZCwgMHhmZiwgMHgzNCwgMHgzYSwgMHgzNCwgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMCwgMHgyMCwgMHg4YSwgCi0weDAxLCAweDIzLCAweDliLCAweDAyLCAweDE4LCAweDQzLCAweDJiLCAweGUwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4YzIsIDB4MWQsIDB4MGQsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MzAsIAotMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMCwgMHg0MywgMHgwMywgMHgxYywgCi0weGY4LCAweDFkLCAweGZmLCAweDMwLCAweDRhLCAweDMwLCAweDgyLCAweDc4LCAweGM4LCAweDZiLCAweDE5LCAweDFjLCAKLTB4MDIsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZGEsIDB4MjAsIDB4OGEsIDB4ZmYsIDB4MjMsIAotMHgwMSwgMHgzMywgMHgxOCwgMHg0MywgMHgwZSwgMHhlMCwgMHhmOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwgCi0weDA4LCAweDYwLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDFjLCAweGY4LCAKLTB4MDAsIDB4MjgsIDB4MTQsIDB4ZDEsIDB4MjAsIDB4OGEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4MTgsIDB4NDMsIAotMHgyMCwgMHg4MiwgMHgyMSwgMHg4YSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhMiwgMHhmYiwgMHhlOCwgMHg2OCwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDU0LCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAKLTB4ZTgsIDB4NjAsIDB4MzAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIAotMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgwNywgMHgxYywgCi0weGZjLCAweDFkLCAweGY5LCAweDM0LCAweGEwLCAweDZiLCAweGE2LCAweDZhLCAweGM1LCAweDFkLCAweDBkLCAweDM1LCAKLTB4MzgsIDB4NDgsIDB4YzAsIDB4NmEsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDIsIDB4MTgsIAotMHgwMSwgMHgyMCwgMHg4MCwgMHgwNywgMHgxMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgCi0weDAwLCAweDkwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQwLCAweDFkLCAweDA1LCAweDMwLCAweDE4LCAweDQzLCAKLTB4MDAsIDB4NjgsIDB4MzgsIDB4MWMsIDB4MjksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZmEsIDB4YTgsIDB4ODgsIAotMHg0MSwgMHgwNywgMHgwMSwgMHhkMCwgMHgwMCwgMHgyMCwgMHg1MSwgMHhlMCwgMHgyOSwgMHg4OSwgMHgwOSwgMHgxOCwgCi0weDYwLCAweDZiLCAweDgxLCAweDQyLCAweGY4LCAweGQ4LCAweDY5LCAweDg5LCAweGVhLCAweDg4LCAweDg5LCAweDE4LCAKLTB4ODEsIDB4NDIsIDB4ZjMsIDB4ZDgsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsIDB4MjUsIDB4ZDEsIDB4ZTAsIDB4NmEsIAotMHhmMSwgMHg2YiwgMHg0MCwgMHgxOCwgMHg3MSwgMHg2YywgMHhmYSwgMHgxZCwgMHhjZCwgMHgzMiwgMHgwMSwgMHhmMCwgCi0weDMzLCAweGY5LCAweGZhLCAweDFkLCAweGZmLCAweDMyLCAweDNhLCAweDMyLCAweGUwLCAweDZhLCAweDUxLCAweDY5LCAKLTB4NDAsIDB4MTgsIDB4YzMsIDB4MWQsIDB4MDMsIDB4MzMsIDB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NWUsIDB4NTgsIAotMHhjOSwgMHgxOSwgMHhmZiwgMHgzMSwgMHgwMSwgMHgzMSwgMHg0ZSwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgCi0weGY2LCAweGQzLCAweGUwLCAweDZhLCAweDUxLCAweDY5LCAweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAKLTB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4NDMsIDB4MDAsIDB4Y2EsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIAotMHhmYSwgMHhkMywgMHgyOSwgMHgxYywgMHgxMSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHhhZSwgMHhmYiwgCi0weDAxLCAweDIyLCAweDUyLCAweDA0LCAweDYwLCAweDZiLCAweDAyLCAweDQzLCAweDAxLCAweDIwLCAweDIxLCAweDZiLCAKLTB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmIsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NjAsIDB4NmIsIDB4MDIsIDB4NDMsIAotMHgwMCwgMHgyMCwgMHhlMSwgMHg2YSwgMHhmZiwgMHhmNywgMHg5ZSwgMHhmYiwgMHhhMSwgMHg2YiwgMHgwOCwgMHg0YSwgCi0weDAxLCAweDIwLCAweGZmLCAweGY3LCAweDk5LCAweGZiLCAweDAzLCAweDIwLCAweDA2LCAweDQ5LCAweGMwLCAweDQ2LCAKLTB4NDgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxNCwgMHgwMCwgMHgwZiwgMHgwMCwgCi0weDZjLCAweDA3LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDhkLCAweGIwLCAweDAwLCAweDIwLCAweGI1LCAweDRhLCAKLTB4ZDUsIDB4MWQsIDB4ZjksIDB4MzUsIDB4NjgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4YjMsIDB4NDksIAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhhOCwgMHg2YSwgMHhjNCwgMHgxZCwgMHgyZCwgMHgzNCwgMHhiMSwgMHg0OCwgCi0weGMwLCAweDZhLCAweGQ3LCAweDFkLCAweGZmLCAweDM3LCAweDNhLCAweDM3LCAweDM5LCAweDY4LCAweDRiLCAweDAwLCAKLTB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsIAotMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDA5LCAweDkwLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDE4LCAweDQwLCAweDAwLCAweDBhLCAKLTB4MGEsIDB4OTAsIDB4MGEsIDB4OTgsIDB4YTQsIDB4NGUsIDB4MDEsIDB4MjgsIDB4NTksIDB4ZDEsIDB4MjgsIDB4NmIsIAotMHhhMiwgMHg2OCwgMHg4MCwgMHgxOCwgMHhhMiwgMHg0YSwgMHgyMSwgMHg2OSwgCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweGYwLCAweDI2LCAweGY5LCAweDI4LCAweDZiLCAweDc5LCAweDY5LCAKLTB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4OTgsIDB4NGIsIAotMHhkMywgMHgxOCwgMHhmZiwgMHgzMywgMHgwMSwgMHgzMywgMHg1YiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4YiwgMHg1MCwgCi0weDAxLCAweDMwLCAweDA0LCAweDI4LCAweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDMxLCAweDFjLCAweDgyLCAweDAwLCAKLTB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDQsIDB4YWUsIAotMHhiMywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMywgMHgyOCwgMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwOCwgMHg5MCwgCi0weDkwLCAweDQ5LCAweDQyLCAweDAwLCAweDhiLCAweDVhLCAweGIyLCAweDVhLCAweDkzLCAweDQyLCAweDEzLCAweGQwLCAKLTB4OGUsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4YjgsIDB4NjgsIDB4MDAsIDB4MjgsIAotMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHg3MSwgMHhlMCwgMHgzOCwgMHg4YSwgCi0weDQwLCAweDIzLCAweDE4LCAweDQzLCAweDZkLCAweGUwLCAweDAwLCAweGYwLCAweDExLCAweGY5LCAweDAxLCAweGYwLCAKLTB4NjcsIDB4ZmYsIDB4ZjUsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZTMsIDB4ZDMsIDB4MDgsIDB4OTgsIAotMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwgMHhiOCwgMHg2OCwgMHg0MSwgMHgxYywgMHhiOSwgMHg2MCwgMHgwMCwgMHgyOCwgCi0weDAzLCAweGQxLCAweDM4LCAweDhhLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweDAyLCAweGUwLCAweDM4LCAweDhhLCAKLTB4MDQsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODIsIDB4NzgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4NzgsIDB4NjAsIAotMHg2MiwgMHhlMCwgMHgwYSwgMHg5OCwgMHgwMiwgMHgyOCwgMHg1ZiwgMHhkMSwgMHgwOSwgMHg5OCwgMHg0MCwgMHgwYywgCi0weDczLCAweGQzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLCAKLTB4MDAsIDB4NjgsIDB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsIAotMHgwYywgMHgzOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMSwgMHg4YSwgMHgwMCwgMHg2YiwgMHg0YiwgCi0weGQ2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA0LCAweGFlLCAKLTB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjMsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4ODMsIDB4MWUsIAotMHgwYywgMHg5MywgMHg2OCwgMHg0YSwgMHgxNiwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwYiwgMHg5NiwgMHg4YSwgMHgwMCwgCi0weDBjLCAweDliLCAweDliLCAweDE4LCAweDBiLCAweDllLCAweDllLCAweDE5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksIAotMHhmMSwgMHhkMywgMHg2OSwgMHg0NiwgMHg4YiwgMHgxYywgMHgwNywgMHg5MywgMHgwMCwgMHgyMSwgMHgwOCwgMHg5MSwgCi0weDA0LCAweGFlLCAweDRhLCAweDAwLCAweDA3LCAweDliLCAweDliLCAweDVhLCAweGIyLCAweDVhLCAweDkzLCAweDQyLCAKLTB4MTEsIDB4ZDAsIDB4NTgsIDB4NDgsIDB4YzEsIDB4ODksIDB4MDEsIDB4MzEsIDB4YzEsIDB4ODEsIDB4ZjgsIDB4NjgsIAotMHg0MSwgMHgxYywgMHhmOSwgMHg2MCwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgyMCwgMHgyMywgCi0weDE4LCAweDQzLCAweDAyLCAweGUwLCAweDM4LCAweDhhLCAweDgwLCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgyLCAKLTB4OGYsIDB4ZTcsIDB4MDEsIDB4MzEsIDB4MDYsIDB4MjksIDB4ZTQsIDB4ZDMsIDB4MDgsIDB4OTksIDB4MDAsIDB4MjksIAotMHgwZCwgMHhkMSwgMHhmOSwgMHg2OCwgMHg0YSwgMHgxYywgMHhmYSwgMHg2MCwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwgCi0weDM5LCAweDhhLCAweDAyLCAweDIzLCAweDE5LCAweDQzLCAweDAzLCAweGUwLCAweDBjLCAweGUwLCAweDM5LCAweDhhLCAKLTB4MDgsIDB4MjMsIDB4MTksIDB4NDMsIDB4MzksIDB4ODIsIDB4MjksIDB4NmIsIDB4MDgsIDB4MTgsIDB4MDEsIDB4MjMsIAotMHg5YiwgMHgwNywgMHgwMSwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg3NiwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDExLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAKLTB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDAsIDB4ZTAsIDB4MTksIDB4ZTAsIDB4MzUsIDB4NDgsIDB4MmEsIDB4NmIsIAotMHhjMCwgMHg0NiwgMHhlYSwgMHg2MiwgMHgwNCwgMHgyOSwgMHg0ZiwgMHhkMSwgMHgwMSwgMHgyMSwgMHhjNiwgMHgxZCwgCi0weGZmLCAweDM2LCAweDVhLCAweDM2LCAweDMxLCAweDcyLCAweDBhLCAweDk5LCAweDAyLCAweDI5LCAweDFlLCAweGQxLCAKLTB4MDksIDB4OTksIDB4MDksIDB4MGUsIDB4NDksIDB4MDYsIDB4MWEsIDB4ZDEsIDB4ZTEsIDB4MWQsIDB4MDUsIDB4MzEsIAotMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHgzOSwgMHgxYSwgMHhlMCwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGUwLCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAKLTB4ZTEsIDB4MWQsIDB4MGQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDAsIDB4MDQsIAotMHgwMCwgMHgwYywgMHhmOSwgMHg2OCwgMHg0YSwgMHgxYywgMHhmYSwgMHg2MCwgMHgwMCwgMHgyOSwgMHhiYywgMHhkMSwgCi0weGI2LCAweGU3LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGUxLCAweDFkLCAKLTB4MDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4YTEsIDB4NjAsIAotMHhlOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHg4OCwgMHhmYywgCi0weDIwLCAweDdlLCAweDMzLCAweDI4LCAweDAxLCAweGQwLCAweDMyLCAweDI4LCAweDExLCAweGQxLCAweDAxLCAweDIxLCAKLTB4MTQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YjksIDB4NjAsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHg4NSwgMHhmOCwgMHgyOCwgMHg2YiwgMHhhOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHgyMCwgMHgxYywgCi0weGZmLCAweGY3LCAweGMwLCAweGZkLCAweDAwLCAweDI4LCAweDExLCAweGQxLCAweDBlLCAweGUwLCAweDAwLCAweDIwLCAKLTB4MzAsIDB4NzIsIDB4MTEsIDB4ZTAsIDB4MzMsIDB4MjksIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjksIDB4MGQsIDB4ZDEsIAotMHgwNywgMHgxYywgMHgwMCwgMHhmMCwgMHg3MSwgMHhmOCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhiMCwgMHhmZCwgCi0weDAwLCAweDI4LCAweDAxLCAweGQxLCAweDAxLCAweGYwLCAweDcwLCAweGZlLCAweDBkLCAweGIwLCAweGYwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4ZjYsIDB4ZTcsIDB4MDAsIDB4MDAsIAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDQwLCAweDA3LCAweDAwLCAweDgwLCAweDgyLCAweDA3LCAweDAwLCAweDgwLCAKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MjUsIDB4NDgsIAotMHg0MSwgMHg2OCwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MCwgMHgyNCwgMHg0ZiwgMHhmOSwgMHgxZCwgMHhmOSwgMHgzMSwgCi0weDAwLCAweDI0LCAweDg4LCAweDZhLCAweGZhLCAweDY4LCAweGMwLCAweDQ2LCAweDk0LCAweDYxLCAweDA0LCAweDIyLCAKLTB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NjAsIDB4MTAsIDB4MjIsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIAotMHg5YSwgMHg2MSwgMHhmYSwgMHgxZCwgMHhmZiwgMHgzMiwgMHg1YSwgMHgzMiwgMHgxMywgMHg3YSwgMHgxYiwgMHg0YSwgCi0weDAwLCAweDJiLCAweDBiLCAweGQwLCAweDE1LCAweDhhLCAweDJlLCAweDBhLCAweDM2LCAweDAyLCAweDMzLCAweDIzLCAKLTB4MmIsIDB4NDAsIDB4OWIsIDB4MDAsIDB4MWUsIDB4NDMsIDB4Y2MsIDB4MjMsIDB4MmIsIDB4NDAsIDB4OWIsIDB4MDgsIAotMHgzMywgMHg0MywgMHgxMywgMHg4MiwgMHgxMiwgMHg4YSwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MywgCi0weDRhLCAweDZiLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDgxLCAweDBhLCAweDZiLCAweGMwLCAweDQ2LCAKLTB4ODIsIDB4NjIsIDB4YzQsIDB4NjIsIDB4YzMsIDB4MWQsIDB4MzksIDB4MzMsIDB4NGEsIDB4NmIsIDB4YzAsIDB4NDYsIAotMHg1YSwgMHg4MywgMHgwNCwgMHgyMywgMHgwMiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHg4OCwgMHg2YSwgCi0weDAxLCAweGYwLCAweDMyLCAweGZhLCAweGY4LCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDU0LCAweDMwLCAKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjgsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgCi0weGFjLCAweDA3LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweGMxLCAweDFkLCAweGY5LCAweDMxLCAweDhhLCAweDZhLCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDEsIDB4MWQsIDB4NDUsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIAotMHgwYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMSwgMHgyNywgMHhjMSwgMHgxZCwgMHhmZiwgMHgzMSwgMHg0YSwgMHgzMSwgCi0weDMzLCAweDJiLCAweDA1LCAweGQxLCAweDhiLCAweDcwLCAweDAxLCAweDFjLCAweDEwLCAweDFjLCAweDAwLCAweGYwLCAKLTB4MGYsIDB4ZjgsIDB4MDYsIDB4ZTAsIDB4MzIsIDB4MmIsIDB4MDgsIDB4ZDEsIDB4OGIsIDB4NzAsIDB4MDEsIDB4MWMsIAotMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzYywgMHhmOCwgMHgzOCwgMHgxYywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDg4LCAweDcwLCAweGY5LCAweGU3LCAweDkwLCAweGI0LCAweGNhLCAweDFkLCAKLTB4ZjksIDB4MzIsIDB4MzMsIDB4MjcsIDB4Y2MsIDB4MWQsIDB4ZmYsIDB4MzQsIDB4NGEsIDB4MzQsIDB4ZDMsIDB4NmEsIAotMHhjMCwgMHg0NiwgMHhhNywgMHg3MCwgMHhmZiwgMHgzMSwgMHg0MSwgMHgzMSwgMHgwNywgMHg2YywgMHhjMCwgMHg0NiwgCi0weDRmLCAweDYxLCAweGZiLCAweDE4LCAweDM5LCAweDFjLCAweDlmLCAweDFlLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4ZmMsIDB4MWMsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4OWIsIDB4MDAsIAotMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHhjOSwgMHgxOCwgMHgwOCwgMHgzMSwgMHgwMSwgMHg2NCwgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweGI5LCAweDFjLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDM0LCAweDMwLCAweDAxLCAweDc2LCAKLTB4ZjgsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MDQsIDB4YjksIDB4MWQsIAotMHgxOSwgMHg0MywgMHhkMCwgMHg2MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHg0MywgCi0weGQwLCAweDYzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweGIwLCAweGI1LCAweGNhLCAweDFkLCAweGY5LCAweDMyLCAKLTB4YzUsIDB4MWQsIDB4MmQsIDB4MzUsIDB4MzIsIDB4MjAsIDB4Y2YsIDB4MWQsIAotMHhmZiwgMHgzNywgMHg0YSwgMHgzNywgMHhkMywgMHg2YSwgMHhjMCwgMHg0NiwgMHhiOCwgMHg3MCwgMHhjYywgMHgxZCwgCi0weGZmLCAweDM0LCAweDNhLCAweDM0LCAweGU4LCAweDY4LCAweGMwLCAweDQ2LCAweDYwLCAweDYxLCAweDEwLCAweDMwLCAKLTB4ZTgsIDB4NjAsIDB4NjAsIDB4NjksIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIAotMHgzOCwgMHgxZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHhiOSwgMHgxYywgMHgxOSwgMHg0MywgCi0weGQwLCAweDYzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDQzLCAweGQwLCAweDYzLCAKLTB4ZjgsIDB4MWQsIDB4MDMsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4ZmMsIDB4ZmIsIDB4MjAsIDB4NjIsIDB4ZjgsIDB4MWQsIAotMHgwNywgMHgzMCwgMHhmZiwgMHhmNywgMHhmNywgMHhmYiwgMHg2MCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgyOCwgMHg3NiwgCi0weGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY3LCAweGI1LCAweDgxLCAweGIwLCAweDAxLCAweDk4LCAKLTB4YzcsIDB4MWQsIDB4ZjksIDB4MzcsIDB4YjgsIDB4NmEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIAotMHgwNSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYywgMHg2OCwgMHhmZiwgMHgyMywgMHhmZSwgMHgzMywgMHgyMywgMHg0MCwgCi0weDdmLCAweDZiLCAweDNmLCAweDA0LCAweDNiLCAweDQzLCAweDBiLCAweDYwLCAweDM0LCAweDMwLCAweDFjLCAweDFjLCAKLTB4ODAsIDB4MjMsIDB4MjMsIDB4NDAsIDB4MDEsIDB4OWYsIDB4ZmYsIDB4MzcsIDB4NDEsIDB4MzcsIDB4MDAsIDB4MmIsIAotMHgzYywgMHhkMCwgMHgwYywgMHgyMywgMHgwMCwgMHg5MywgMHgwMCwgMHgyMywgMHg5ZCwgMHgwMCwgMHhhZSwgMHgxOCwgCi0weDM2LCAweDY5LCAweDZkLCAweDE4LCAweDZlLCAweDYxLCAweDAxLCAweDMzLCAweDA1LCAweDJiLCAweGY3LCAweGQzLCAKLTB4MDAsIDB4MjMsIDB4OWQsIDB4MDAsIDB4YWUsIDB4MTgsIDB4NzYsIDB4NmEsIDB4NmQsIDB4MTgsIDB4YWUsIDB4NjIsIAotMHgwMSwgMHgzMywgMHgwNSwgMHgyYiwgMHhmNywgMHhkMywgMHgwMSwgMHg5YiwgMHhmZiwgMHgzMywgMHg1MSwgMHgzMywgCi0weDliLCAweDc4LCAweDMzLCAweDJiLCAweDBlLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM1LCAweDFkLCAKLTB4MDEsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4MDEsIDB4MjMsIAotMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwgMHgwZCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgxNiwgMHhlMCwgCi0weDdiLCAweDY5LCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM1LCAweDFkLCAKLTB4MGQsIDB4MzUsIDB4MmIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4N2QsIDB4NjksIDB4NWQsIDB4MWIsIDB4MDEsIDB4MjMsIAotMHg5YiwgMHgwNywgMHhjNiwgMHgxZCwgMHgwMSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHhlYiwgMHgxOCwgCi0weDBjLCAweDNiLCAweDAyLCAweGUwLCAweDAwLCAweDIzLCAweDAwLCAweDkzLCAweDRiLCAweDgxLCAweGNiLCAweDgwLCAKLTB4NjMsIDB4MDksIDB4NDksIDB4ZDMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzQsIDB4MWQsIDB4MDUsIDB4MzQsIAotMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg4MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgCi0weGM0LCAweDFkLCAweDBkLCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDBjLCAweDg5LCAweDFiLCAweDFiLCAKLTB4MDAsIDB4OWMsIDB4MWMsIDB4MWIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzAsIDB4MTgsIDB4NDMsIAotMHgwMCwgMHg2OCwgMHgyMCwgMHgxOCwgMHg4OCwgMHg4MCwgMHgzOCwgMHg2YSwgMHgwNCwgMHgwZSwgMHhmZiwgMHgyMywgCi0weDFiLCAweDA0LCAweDAzLCAweDQwLCAweDFiLCAweDBhLCAweDFjLCAweDQzLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAKLTB4MDMsIDB4NDAsIDB4MWIsIDB4MDIsIDB4MjMsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4YzgsIDB4NjAsIAotMHg3OCwgMHg2YSwgMHgwNywgMHgwZSwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgMHgwMywgMHg0MCwgMHgxYiwgMHgwYSwgCi0weDFmLCAweDQzLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDAzLCAweDQwLCAweDFiLCAweDAyLCAweDNiLCAweDQzLCAKLTB4MDAsIDB4MDYsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NjEsIDB4ZDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjMsIAotMHg5MCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwgMHg1MCwgMHg2YywgMHhjMCwgMHg0NiwgMHg0OCwgMHg2NCwgCi0weDEwLCAweDZjLCAweGMwLCAweDQ2LCAweDg4LCAweDY0LCAweGQwLCAweDZjLCAweGMwLCAweDQ2LCAweGM4LCAweDY0LCAKLTB4OTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjUsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MGIsIDB4ODEsIAotMHg4YiwgMHg4MCwgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgCi0weDBmLCAweDRhLCAweDkzLCAweDg5LCAweDAxLCAweDMzLCAweDkzLCAweDgxLCAweGMyLCAweDFkLCAweGY5LCAweDMyLCAKLTB4MDQsIDB4MjMsIDB4OTAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4YzMsIDB4NjAsIDB4MTAsIDB4MjMsIDB4ODMsIDB4NjEsIAotMHhjYiwgMHgwYSwgMHgwMSwgMHhkMywgMHgxOCwgMHgyMywgMHg4MywgMHg2MSwgMHhjMSwgMHg4MywgMHg1MSwgMHg2YiwgCi0weGMwLCAweDQ2LCAweGMxLCAweDgxLCAweDUxLCAweDZiLCAweGMyLCAweDFkLCAweDM5LCAweDMyLCAweDUxLCAweDgzLCAKLTB4MDQsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4ZjgsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgCi0weGIwLCAweGI1LCAweDFiLCAweDRjLCAweDIwLCAweDZhLCAweDAyLCAweDI4LCAweDFiLCAweGQyLCAweDAwLCAweDIwLCAKLTB4ZTcsIDB4MWQsIDB4MTksIDB4MzcsIDB4MzgsIDB4NzEsIDB4ZTEsIDB4NjgsIDB4ZTAsIDB4MWQsIDB4ZjksIDB4MzAsIAotMHgwMCwgMHgyOSwgMHgxNSwgMHhkMCwgMHg0MiwgMHg2YSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMSwgMHgwMSwgMHgyNSwgCi0weDBhLCAweGUwLCAweGZmLCAweGY3LCAweDg5LCAweGZiLCAweDAwLCAweDI4LCAweDA5LCAweGQxLCAweDIwLCAweDZhLCAKLTB4MDIsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4M2QsIDB4NzEsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIAotMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHhmMSwgMHhkMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDQwLCAweDZhLCAweDAwLCAweDI4LCAweGY5LCAweGQxLCAweDAwLCAweDI5LCAweGY3LCAweGQxLCAweDYwLCAweDY5LCAKLTB4MDAsIDB4MjgsIDB4MDQsIDB4ZDAsIDB4MDYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsIDB4YTgsIDB4ZmMsIAotMHhlZiwgMHhlNywgMHg2MCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhlYywgMHhkMCwgMHgwMCwgMHhmMCwgMHg1YSwgMHhmOCwgCi0weGU5LCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDM0LCAweDA0LCAweDAwLCAweDgwLCAKLTB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MjAsIDB4MjMsIDB4YjgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4MDEsIDB4MjQsIAotMHgwMCwgMHgyNSwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMSwgMHgzOCwgMHg2YSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgCi0weDI4LCAweDFjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDFmLCAweDQ4LCAweDAxLCAweDZlLCAKLTB4MDEsIDB4MzEsIDB4MDEsIDB4NjYsIDB4MDMsIDB4ZTAsIDB4NDgsIDB4NjgsIDB4YzQsIDB4MjMsIDB4MTgsIDB4NDAsIAotMHgwMywgMHhkMSwgMHgzOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHgwYywgMHhmYywgMHgyZiwgMHhlMCwgMHgzOCwgMHgxYywgCi0weDAwLCAweGYwLCAweDFjLCAweGZjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDdiLCAweGZhLCAweGI4LCAweDY4LCAKLTB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4ZDEsIDB4ZmIsIDB4YjgsIDB4NjgsIAotMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MCwgMHgzOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjNSwgMHg2MCwgCi0weDEwLCAweDQ4LCAweDQxLCAweDY4LCAweDAwLCAweDI5LCAweDExLCAweGQxLCAweGMxLCAweDY4LCAweDAwLCAweDI5LCAKLTB4MDksIDB4ZDEsIDB4NDEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDYsIDB4ZDEsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIAotMHg4MSwgMHg2MCwgMHg0MSwgMHg2MCwgMHgwMCwgMHhmMCwgMHgxNCwgMHhmOCwgMHgwYiwgMHhlMCwgMHgzOSwgMHg2YSwgCi0weGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDQxLCAweDYwLCAweDA2LCAweGUwLCAweDM5LCAweDZhLCAweDgyLCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4ZDEsIDB4NjAsIDB4MzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4MjAsIDB4MWMsIAotMHhiZCwgMHhlNywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgCi0weDkwLCAweGI1LCAweDBiLCAweDRjLCAweDY3LCAweDY4LCAweDAwLCAweDJmLCAweDBmLCAweGQwLCAweDM4LCAweDFjLCAKLTB4MDAsIDB4ZjAsIDB4MTIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGEsIDB4ZDEsIDB4NjAsIDB4NjgsIDB4YzAsIDB4NjgsIAotMHhjMCwgMHg0NiwgMHg2MCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjMywgMHhmYiwgMHgwMCwgMHgyMCwgCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLCAweGZhLCAweGU3LCAweDAwLCAweDAwLCAKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZmUsIDB4MWQsIDB4NDksIDB4MzYsIAotMHgzMCwgMHg3OCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgxOSwgMHg4NSwgMHg4YiwgMHgzMywgMHg0YywgMHgzNCwgMHg0YiwgCi0weDlkLCAweDQyLCAweDNjLCAweGQwLCAweDM4LCAweDFjLCAweDIxLCAweDFjLCAweDJhLCAweDFjLCAweDAwLCAweGYwLCAKLTB4MWQsIDB4ZjksIDB4MzEsIDB4NDgsIDB4ODAsIDB4NmEsIDB4NTgsIDB4MjEsIDB4NjksIDB4NDMsIDB4NDAsIDB4MTgsIAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgCi0weDJjLCAweDRkLCAweDAxLCAweDI4LCAweDFhLCAweGQxLCAweDMwLCAweDc4LCAweGMwLCAweDE5LCAweGMxLCAweDFkLCAKLTB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsIDB4ODAsIDB4MTgsIDB4MDksIDB4N2IsIDB4ZWEsIDB4MWQsIAotMHgyMSwgMHgzMiwgMHgwMCwgMHhmMCwgMHhlMywgMHhmYywgMHgzMCwgMHg3OCwgMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwgCi0weDAwLCAweDc5LCAweDM5LCAweDY4LCAweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDAwLCAweDIwLCAKLTB4MDAsIDB4MjMsIDB4NDIsIDB4MDAsIDB4OGIsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsIDB4ZmEsIDB4ZDMsIAotMHhhMCwgMHg4OCwgMHg0MSwgMHgwNywgMHgwYiwgMHhkMSwgMHgyMSwgMHg4OSwgMHgwOSwgMHgxOCwgMHg3OCwgMHg2OCwgCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDgxLCAweDQyLCAweDA0LCAweGQ4LCAweDYxLCAweDg5LCAweGUyLCAweDg4LCAKLTB4ODksIDB4MTgsIDB4ODEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDAsIDB4MjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHgyMSwgMHgxYywgMHgxNCwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmZSwgMHhmNywgMHg1YSwgMHhmZiwgCi0weDAxLCAweDIyLCAweDUyLCAweDA0LCAweDc4LCAweDY4LCAweDAyLCAweDQzLCAKLTB4MDEsIDB4MjAsIDB4MzksIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NTIsIDB4ZmYsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIAotMHg3OCwgMHg2OCwgMHgwMiwgMHg0MywgMHgwMCwgMHgyMCwgMHgzOSwgMHg2OCwgMHhmZSwgMHhmNywgMHg0YSwgMHhmZiwgCi0weDBiLCAweDQ5LCAweDBjLCAweDRhLCAweDAxLCAweDIwLCAweGZlLCAweGY3LCAweDQ1LCAweGZmLCAweDAxLCAweDIwLCAKLTB4ZTksIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4MDIsIDB4MjEsIDB4ZWEsIDB4MWQsIDB4ZjksIDB4MzIsIAotMHg1MSwgMHg2MiwgMHhkOSwgMHhlNywgMHgyOCwgMHhhYywgMHgyMCwgMHg0MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDU0LCAweDAwLCAweDAzLCAweDAwLCAKLTB4MTQsIDB4YWMsIDB4MjAsIDB4NDAsIDB4MTQsIDB4MDAsIDB4MDcsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsIAotMHgwMCwgMHgyMSwgMHg0ZiwgMHg0OCwgMHhjMiwgMHgxZCwgMHhmOSwgMHgzMiwgMHg1MSwgMHg2MiwgMHgwMSwgMHgyMSwgCi0weGM5LCAweDA0LCAweDRkLCAweDRhLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGMxLCAweDFkLCAweDE5LCAweDMxLCAKLTB4NDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4NGEsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDMsIDB4ZjAsIAotMHg5YiwgMHhmYiwgMHg4NywgMHhlMCwgMHg0NSwgMHg0OCwgMHg0NywgMHg2OCwgMHhmYywgMHgxZCwgMHg0OSwgMHgzNCwgCi0weDIxLCAweDc4LCAweDQ4LCAweDAwLCAweGMwLCAweDE5LCAweDgwLCAweDhiLCAweDQ0LCAweDRhLCAweDkyLCAweDZhLCAKLTB4NTgsIDB4MjMsIDB4NTgsIDB4NDMsIDB4MTUsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZWEsIDB4MWQsIAotMHgwNSwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgwOCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwgCi0weGZmLCAweDIzLCAweDFiLCAweDAyLCAweDJiLCAweDQwLCAweDFiLCAweDBhLCAweDNjLCAweDRkLCAweDAxLCAweDJiLCAKLTB4MjQsIDB4ZDEsIDB4YzgsIDB4MTksIDB4YzEsIDB4MWQsIDB4MTksIDB4MzEsIDB4MDgsIDB4N2EsIDB4M2EsIDB4NjgsIAotMHg4MCwgMHgxOCwgMHgzOSwgMHg0YSwgMHgwOSwgMHg3YiwgMHgwMCwgMHhmMCwgMHhjNSwgMHhmYywgMHgyMCwgMHg3OCwgCi0weGMwLCAweDE5LCAweDIwLCAweDMwLCAweDAwLCAweDc5LCAweDM5LCAweDY4LCAweDQxLCAweDE4LCAweDAwLCAweDIwLCAKLTB4ODIsIDB4MDAsIDB4NTMsIDB4MTksIDB4OWIsIDB4NmUsIDB4NmUsIDB4NDYsIDB4YjMsIDB4NTAsIDB4MDEsIDB4MzAsIAotMHgwMywgMHgyOCwgMHhmNywgMHhkMywgMHhjYSwgMHgxZCwgMHgwNSwgMHgzMiwgMHg2OSwgMHg0NiwgMHgwMCwgMHgyMCwgCi0weDQzLCAweDAwLCAweGNkLCAweDVhLCAweGMwLCAweDQ2LCAweGQ1LCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LCAKLTB4ZjgsIDB4ZDMsIDB4MmQsIDB4ZTAsIDB4MDIsIDB4MmIsIDB4MmIsIDB4ZDEsIDB4MTEsIDB4MGEsIDB4MjksIDB4ZDMsIAotMHgwMCwgMHgyMSwgMHg4YSwgMHgwMCwgMHg1MywgMHgxOSwgMHg5YiwgMHg2ZSwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwgCi0weDAxLCAweDMxLCAweDAzLCAweDI5LCAweGY3LCAweGQzLCAweDIxLCAweDc4LCAweDQ5LCAweDAwLCAweGM5LCAweDE5LCAKLTB4MDksIDB4OGYsIDB4M2EsIDB4NjgsIDB4OGIsIDB4MTgsIDB4NmEsIDB4NDYsIDB4MDAsIDB4MjEsIDB4NGQsIDB4MDAsIAotMHg1NiwgMHg1YiwgMHhjMCwgMHg0NiwgMHg1ZSwgMHg1MywgMHgwMSwgMHgzMSwgMHgwNiwgMHgyOSwgMHhmOCwgMHhkMywgCi0weDE5LCAweDQ5LCAweDhhLCAweDZhLCAweDEzLCAweDE4LCAweDFhLCAweDZkLCAweDAwLCAweDlkLCAweDU1LCAweDQwLCAKLTB4MTksIDB4NGEsIDB4ZDYsIDB4NjgsIDB4NzUsIDB4NDAsIDB4MWQsIDB4NjUsIDB4ODksIDB4NmEsIDB4MDgsIDB4MTgsIAotMHg0MSwgMHg2ZCwgMHgwMiwgMHg5YiwgMHg1OSwgMHg0MCwgMHg5MiwgMHg2OSwgMHg1MSwgMHg0MCwgMHg0MSwgMHg2NSwgCi0weDIwLCAweDc4LCAweDQxLCAweDFlLCAweDIxLCAweDcwLCAweDAwLCAweDI4LCAweDBkLCAweGQwLCAweDM4LCAweDFjLCAKLTB4ZmYsIDB4ZjcsIDB4ZjQsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MGQsIDB4ZDEsIDB4MDgsIDB4NGEsIDB4NTAsIDB4NjgsIAotMHhjMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhNCwgMHhmYSwgCi0weDAyLCAweGUwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDczLCAweGZhLCAweDAxLCAweGYwLCAweGRlLCAweGZhLCAKLTB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgzOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgCi0weGFjLCAweGFiLCAweDIwLCAweDQwLCAweDk0LCAweDA2LCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLCAKLTB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4NjksIDB4NGIsIDB4OWYsIDB4NmEsIDB4NTgsIDB4MjMsIDB4NWEsIDB4NDMsIAotMHhiYSwgMHgxOCwgMHhjMywgMHgxZCwgMHg0OSwgMHgzMywgMHgxZiwgMHg3OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgCi0weGQ0LCAweDFkLCAweDAxLCAweDM0LCAweDIzLCAweDQzLCAweDFkLCAweDY4LCAweDQzLCAweDY4LCAweDFjLCAweDA0LCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4MDUsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIAotMHgxYywgMHg0MywgMHg0MiwgMHgyMywgMHgxYywgMHg0MywgMHgwYywgMHg2MCwgMHhmZiwgMHgyNiwgMHgzNiwgMHgwMiwgCi0weDJlLCAweDQwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDllLCAweDQyLCAweDc0LCAweGQxLCAweDZiLCAweDBjLCAKLTB4MmIsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksIAotMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHg3YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHgxYiwgMHg4ZiwgMHg0YywgMHg4OSwgCi0weDFiLCAweDFiLCAweGNiLCAweDgwLCAweDAwLCAweDI0LCAweGE2LCAweDAwLCAweDAxLCAweDk2LCAweGIzLCAweDE4LCAKLTB4ZGUsIDB4MWQsIDB4MDksIDB4MzYsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIAotMHgwMSwgMHg5ZSwgMHg3NiwgMHgxOCwgMHg3MywgMHg2MSwgMHgwMSwgMHgzNCwgMHgwNSwgMHgyYywgMHhmMCwgMHhkMywgCi0weDAwLCAweDI0LCAweGE2LCAweDAwLCAweDAwLCAweDk2LCAweGIzLCAweDE4LCAweGRlLCAweDFkLCAweDFkLCAweDM2LCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDAsIDB4OWUsIDB4NzYsIDB4MTgsIAotMHhiMywgMHg2MiwgMHgwMSwgMHgzNCwgMHgwNSwgMHgyYywgMHhmMCwgMHhkMywgMHgwNiwgMHhlMCwgMHgwMCwgMHgyMywgCi0weDRiLCAweDgxLCAweGNiLCAweDgwLCAweDQwLCAweDIzLCAweDljLCAweDQzLCAweDBjLCAweDYwLCAweDIzLCAweDFjLCAKLTB4NmIsIDB4MGUsIDB4NGEsIDB4ZDMsIDB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4NzksIDB4MTAsIDB4MzMsIAotMHgwYiwgMHg4MSwgMHg3YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHgxYiwgMHg4ZiwgMHgwZiwgMHg4OSwgMHhkYiwgMHgxYiwgCi0weDhiLCAweDgwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDM1LCAweDM0LCAweDIzLCAweDQzLCAKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIAotMHgzMSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg2NCwgMHhhYiwgMHgwZSwgCi0weDIxLCAweGQyLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDNkLCAweDM0LCAweDIzLCAweDQzLCAKLTB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NGIsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIAotMHgzOSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg4YiwgMHg2NCwgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweGQ0LCAweDFkLCAweDQ1LCAweDM0LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAKLTB4Y2IsIDB4NjQsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4NDEsIDB4MzQsIDB4MjMsIDB4NDMsIAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg2NSwgMHgwMCwgMHhlMCwgMHgwZiwgMHhlMCwgMHhmYiwgMHgxZiwgCi0weDAxLCAweDNiLCAweDFiLCAweDA0LCAweDFiLCAweDBjLCAweDA3LCAweDY4LCAweGZmLCAweDE4LCAweDAzLCAweDY5LCAKLTB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MmMsIDB4ZTAsIDB4MDAsIDB4MjMsIAotMHgwYiwgMHg4MSwgMHg4YiwgMHg4MCwgMHgyOCwgMHhlMCwgMHgwMCwgMHgyMywgMHg4YiwgMHg4MCwgMHgwYiwgMHg4MSwgCi0weGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDdhLCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDdiLCAweDAwLCAKLTB4MTgsIDB4MTgsIDB4MDAsIDB4OGUsIDB4YzAsIDB4NDYsIDB4YzgsIDB4ODAsIDB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsIAotMHhiYiwgMHgxOCwgMHhkYywgMHgxZCwgMHgwOSwgMHgzNCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMywgMHg0MywgCi0weDFiLCAweDY4LCAweDdmLCAweDE4LCAweDdiLCAweDYxLCAweDAxLCAweDMwLCAweDA1LCAweDI4LCAweGYyLCAweGQzLCAKLTB4MDAsIDB4MjAsIDB4ODcsIDB4MDAsIDB4YmIsIDB4MTgsIDB4ZGMsIDB4MWQsIDB4MWQsIDB4MzQsIDB4MDEsIDB4MjMsIAotMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg3ZiwgMHgxOCwgMHhiYiwgMHg2MiwgMHgwMSwgMHgzMCwgCi0weDA1LCAweDI4LCAweGYyLCAweGQzLCAweDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MWYsIDB4MWMsIDB4M2IsIDB4MGMsIDB4MTgsIDB4ZDIsIAotMHgxNywgMHg2ZCwgMHgxMSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhkZiwgMHg2MCwgMHg1MiwgMHg2ZCwgMHhjMCwgMHg0NiwgCi0weDFhLCAweDYxLCAweGM3LCAweDYwLCAweDFhLCAweDY5LCAweGMwLCAweDQ2LCAweDAyLCAweDYxLCAweGQ4LCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4ZDgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ODAsIDB4MTgsIDB4NjksIAotMHhjMCwgMHg0NiwgMHg4OCwgMHg4MCwgMHgxOCwgMHg2OSwgMHgwMCwgMHgwYywgMHhjOCwgMHg4MCwgMHg4MCwgMHhiYywgCi0weDcwLCAweDQ3LCAweDRhLCAweDg4LCAweDEyLCAweDA0LCAweDBiLCAweDg4LCAweDFhLCAweDQzLCAweGMyLCAweDYwLCAKLTB4OGEsIDB4ODgsIDB4YzksIDB4ODgsIDB4MDksIDB4MDQsIDB4MTEsIDB4NDMsIDB4MDEsIDB4NjEsIDB4ZjIsIDB4ZTcsIAotMHgyYywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMSwgMHhiNSwgMHg4OCwgMHhiMCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg5OCwgCi0weDAwLCAweDZhLCAweDA4LCAweDliLCAweDk5LCAweDY4LCAweDQ5LCAweDBhLCAweDAyLCAweGQzLCAweDAxLCAweDI3LCAKLTB4ZmYsIDB4MDMsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjcsIDB4MDMsIDB4OGIsIDB4MDAsIDB4MmIsIDB4MTksIDB4ZDAsIAotMHhhMywgMHg0OSwgMHg4OSwgMHg2YSwgMHgxYywgMHgxYywgMHg1OCwgMHgyMywgMHg2MywgMHg0MywgMHhjOSwgMHgxOCwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDU4LCAweDM5LCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAKLTB4MDksIDB4MGMsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDcsIDB4ZTAsIAotMHg0MSwgMHg4YiwgMHgwMCwgMHgyOSwgMHgwMiwgMHhkMCwgMHgwYywgMHgyMywgCi0weDFmLCAweDQzLCAweDAxLCAweGUwLCAweDA0LCAweDIzLCAweDFmLCAweDQzLCAweDgzLCAweDhhLCAweDAwLCAweDJiLCAKLTB4MTgsIDB4ZDAsIDB4OTUsIDB4NDksIDB4ODksIDB4NmEsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIDB4NjMsIDB4NDMsIAotMHhjOSwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1OCwgMHgzOSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAyLCAweDI5LCAweDAxLCAweGQxLCAweDBmLCAweDQzLCAweDA3LCAweGUwLCAKLTB4YzEsIDB4OGEsIDB4MDAsIDB4MjksIDB4MDIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWYsIDB4NDMsIDB4MDEsIDB4ZTAsIAotMHgwMSwgMHgyMywgMHgxZiwgMHg0MywgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwNywgMHg5MSwgMHg0YiwgMHg4OSwgCi0weDBjLCAweDg5LCAweDFjLCAweDE5LCAweDI0LCAweDA0LCAweDI0LCAweDBjLCAweDA4LCAweDlkLCAweDJkLCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4MDEsIDB4OTUsIDB4YzksIDB4ODgsIDB4N2QsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4MWEsIDB4MWMsIAotMHhjMywgMHgxZCwgMHgxOSwgMHgzMywgMHgxYSwgMHg3MiwgMHgwNywgMHg5YSwgMHg5MiwgMHg4OSwgMHhjMCwgMHg0NiwgCi0weDFhLCAweDczLCAweDA3LCAweDlhLCAweDEyLCAweDg5LCAweGMwLCAweDQ2LCAweDAyLCAweDg2LCAweDA0LCAweDg3LCAKLTB4ODIsIDB4OGEsIDB4MDEsIDB4M2EsIDB4ODIsIDB4ODMsIDB4MDEsIDB4MjIsIDB4MTksIDB4NzEsIDB4MDgsIDB4OWIsIAotMHgxYiwgMHg2OCwgMHg1YiwgMHgxOCwgMHg1YiwgMHg3OCwgMHg5YiwgMHgwMCwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgCi0weDA4LCAweDMzLCAweDU5LCAweDE4LCAweGJiLCAweDA4LCAweDQ3LCAweGQzLCAweDA3LCAweDliLCAweDViLCAweDg5LCAKLTB4ODUsIDB4MTgsIDB4MDYsIDB4OTUsIDB4MjAsIDB4MzUsIDB4MmIsIDB4NzIsIDB4MDcsIDB4OWIsIDB4OWIsIDB4ODksIAotMHhjMCwgMHg0NiwgMHgyYiwgMHg3MywgMHgwNywgMHg5YiwgMHgxYiwgMHg4OSwgMHgyZSwgMHgxYywgMHg1NSwgMHgwMCwgCi0weDJkLCAweDE4LCAweDA1LCAweDk1LCAweDJiLCAweDg2LCAweDAwLCAweDJhLCAweDAxLCAweGQwLCAweGMzLCAweDhhLCAKLTB4MDAsIDB4ZTAsIDB4ODMsIDB4OGEsIDB4MDEsIDB4M2IsIDB4MDUsIDB4OWQsIDB4YzAsIDB4NDYsIDB4YWIsIDB4ODMsIAotMHgzMSwgMHg3MSwgMHg2NSwgMHg0YiwgMHg5ZCwgMHg2YSwgMHgwNSwgMHg5YiwgMHg5ZSwgMHg4YiwgMHg1OCwgMHgyMywgCi0weDczLCAweDQzLCAweGViLCAweDE4LCAweGRkLCAweDFkLCAweDAxLCAweDM1LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsIDB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDEsIDB4ZDEsIDB4MDgsIDB4MzEsIAotMHgwMCwgMHhlMCwgMHgxMCwgMHgzMSwgMHg4MSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxZCwgMHg0MCwgMHg5ZCwgMHg0MiwgCi0weDAzLCAweGQxLCAweGUzLCAweDFmLCAweDA1LCAweDNiLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDA1LCAweDliLCAKLTB4YzAsIDB4NDYsIDB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsIAotMHg5YiwgMHg3YiwgMHgwNiwgMHg5ZCwgMHg0MCwgMHgzNSwgMHgyYiwgMHg3MCwgMHgyYiwgMHg3OCwgMHgwMiwgMHgzMywgCi0weGUzLCAweDFhLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDAxLCAweDMyLCAweGJiLCAweDA4LCAweDliLCAweDA3LCAKLTB4NmQsIDB4ZDAsIDB4ODMsIDB4MTgsIDB4MjAsIDB4MzMsIDB4MDQsIDB4OTMsIDB4MTksIDB4NzIsIDB4MDEsIDB4OWIsIAotMHg1ZCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNywgCi0weDFiLCAweDBmLCAweDliLCAweDAwLCAweDA0LCAweDllLCAweGMwLCAweDQ2LCAweDMzLCAweDczLCAweDAwLCAweDk1LCAKLTB4MmIsIDB4NzgsIDB4MWIsIDB4MDcsIDB4MWIsIDB4MGYsIDB4OWIsIDB4MDAsIDB4MDQsIDB4OWQsIDB4YzAsIDB4NDYsIAotMHgyYiwgMHg3MywgMHgwMCwgMHg5ZCwgMHhlYiwgMHg3OCwgMHhhZCwgMHg3OCwgMHgxYiwgMHgwMiwgMHgxZCwgMHg0MywgCi0weDJiLCAweDAyLCAweDJkLCAweDBhLCAweDJkLCAweDA2LCAweDJkLCAweDBlLCAweDJiLCAweDQzLCAweDU1LCAweDAwLCAKLTB4MmQsIDB4MTgsIDB4MmIsIDB4ODYsIDB4MDQsIDB4OWIsIDB4YzAsIDB4NDYsIDB4NTksIDB4NzIsIDB4MDQsIDB4OWIsIAotMHgxYiwgMHg3YiwgMHgyZSwgMHgxYywgMHgwNCwgMHg5ZCwgMHhjMCwgMHg0NiwgMHg2YiwgMHg3MywgMHgzMywgMHg4ZSwgCi0weGMwLCAweDQ2LCAweDczLCAweDg2LCAweDAwLCAweDlkLCAweDJiLCAweDc4LCAweDFiLCAweDA3LCAweDFiLCAweDBmLCAKLTB4OWIsIDB4MDAsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4NTksIDB4MTgsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NDAsIAotMHgwZSwgMHhkMCwgMHgzNCwgMHg4NywgMHgwMywgMHg4YiwgMHgwMSwgMHgzYiwgMHhiMywgMHg4MywgMHgxMywgMHgxYywgCi0weDFiLCAweDE4LCAweDIwLCAweDMzLCAweDE5LCAweDcxLCAweDAxLCAweDliLCAweDViLCAweDE4LCAweDViLCAweDc4LCAKLTB4OWIsIDB4MDAsIDB4NTksIDB4MTgsIDB4MDgsIDB4MzEsIDB4MDEsIDB4MzIsIDB4M2IsIDB4MDksIDB4MzcsIDB4ZDMsIAotMHgwMCwgMHgyZCwgMHgwMSwgMHhkMCwgMHg0MywgMHg4YiwgMHgwMCwgMHhlMCwgMHgwMywgMHg4YiwgMHg1NSwgMHgwMCwgCi0weDJkLCAweDE4LCAweDAxLCAweDNiLCAweGFiLCAweDgzLCAweDgzLCAweDE4LCAweDAzLCAweDkzLCAweDIwLCAweDMzLCAKLTB4MTksIDB4NzEsIDB4MjAsIDB4NGIsIDB4OWQsIDB4NmEsIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4MDIsIDB4OTMsIAotMHg5ZSwgMHg4YiwgMHg1OCwgMHgyMywgMHg3MywgMHg0MywgMHhlYiwgMHgxOCwgMHhkZCwgMHgxZCwgMHgwMSwgMHgzNSwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLCAweDFkLCAweDY4LCAKLTB4MmIsIDB4MGUsIDB4NWIsIDB4MDYsIDB4MDIsIDB4ZDEsIDB4MDgsIDB4MzEsIDB4MDEsIDB4ZTAsIDB4MTUsIDB4ZTAsIAotMHgxMCwgMHgzMSwgMHg4MSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxZCwgMHg0MCwgMHg5ZCwgMHg0MiwgMHgwMywgMHhkMSwgCi0weGUzLCAweDFmLCAweDA1LCAweDNiLCAweDFjLCAweDA0LCAweDI0LCAweDBjLCAweDAyLCAweDliLCAweGMwLCAweDQ2LCAKLTB4MWMsIDB4ODcsIDB4MDgsIDB4OWIsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MTksIDB4MTAsIDB4M2IsIDB4OWIsIDB4N2IsIAotMHgwMywgMHg5YywgMHg0MCwgMHgzNCwgMHgyMywgMHg3MCwgMHgwMSwgMHgzMiwgMHgwNywgMHg5YiwgMHhjMCwgMHg0NiwgCi0weGQ5LCAweDgwLCAweDUxLCAweDFlLCAweGMzLCAweDFkLCAweDQ5LCAweDMzLCAweDE5LCAweDcwLCAweDA3LCAweDYxLCAKLTB4MDQsIDB4MmEsIDB4MDYsIDB4ZDIsIDB4MDYsIDB4NDksIDB4NTMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4OTksIDB4ODMsIAotMHgwMSwgMHgzMiwgMHgwNCwgMHgyYSwgMHhmOSwgMHhkMywgMHgwOSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAKLTB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MTIsIDB4NDgsIDB4MDEsIDB4NjgsIAotMHgwMSwgMHgzMSwgMHgwMSwgMHg2MCwgMHgzOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHg3OCwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDAxLCAweDkwLCAweGI4LCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDBkLCAweDQ4LCAKLTB4NDEsIDB4NjgsIDB4YzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHg0ZiwgMHhmOCwgMHhiOCwgMHg2OCwgMHg0MCwgMHgwOSwgMHgwNiwgMHhkMywgMHgxMCwgMHgyMywgMHgwMiwgMHg5OCwgCi0weDE4LCAweDQzLCAweDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAyLCAweGYwLCAweGUxLCAweGZmLCAweDY4LCAweDQ2LCAKLTB4MDIsIDB4ZjAsIDB4OWEsIDB4ZmUsIDB4MGMsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4YywgMHhiMCwgCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY4LCAweDA1LCAweDRiLCAweDE5LCAweDQzLCAKLTB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4MmYsIDB4ZjgsIDB4NjgsIDB4NDYsIDB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmUsIAotMHgwYywgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwgCi0weDAyLCAweDZhLCAweDAzLCAweDY4LCAweGMwLCAweDQ2LCAweDEzLCAweDYwLCAweDQwLCAweDY4LCAweGMwLCAweDQ2LCAKLTB4NTAsIDB4NjAsIDB4NDAsIDB4MzIsIDB4NDgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTAsIDB4ODAsIDB4YzgsIDB4NjgsIAotMHhjMCwgMHg0NiwgMHhkMCwgMHg4MCwgMHg0OCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg4MSwgMHg4OCwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDUwLCAweDgxLCAweDA4LCAweDdlLCAweGMwLCAweDQ2LCAweDkwLCAweDczLCAweDA4LCAweDY5LCAKLTB4YzAsIDB4NDYsIDB4OTAsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDQsIDB4NDksIDB4MDgsIDB4NjgsIDB4MDAsIDB4MjgsIAotMHgwMCwgMHhkMSwgMHg3MCwgMHg0NywgMHhjMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MCwgMHhmYSwgMHhlNywgCi0weDZjLCAweDA2LCAweDAwLCAweDgwLCAweDAyLCAweDQ5LCAweDBhLCAweDY4LCAweGMwLCAweDQ2LCAweGMyLCAweDYwLCAKLTB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDAsIDB4MjIsIAotMHgxMiwgMHg0ZiwgMHg3YywgMHg3ZiwgMHgwMSwgMHgzNCwgMHg3YywgMHg3NywgMHgwMywgMHgyMywgMHhmYywgMHgxZCwgCi0weDE5LCAweDM0LCAweDM4LCAweDYyLCAweDc5LCAweDYyLCAweDIzLCAweDcyLCAweDBlLCAweDRjLCAweDI1LCAweDY4LCAKLTB4NmIsIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MjMsIDB4NjgsIDB4MWIsIDB4MGMsIDB4MTAsIDB4ZDEsIDB4MjQsIDB4NjgsIAotMHhhMywgMHgwYSwgMHgwZCwgMHhkMywgMHgwMSwgMHgyMywgMHgwYSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHhmYiwgMHg2MiwgCi0weDA5LCAweDRmLCAweDBhLCAweDRiLCAweGMwLCAweDQ2LCAweGRmLCAweDYwLCAweDk5LCAweDYwLCAweDU4LCAweDYwLCAKLTB4MTAsIDB4MWMsIDB4MTgsIDB4NjAsIDB4MDEsIDB4MzIsIDB4ZmIsIDB4ZTcsIDB4MTAsIDB4MWMsIDB4MzgsIDB4NjQsIAotMHgwMSwgMHgzMiwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgCi0weGMwLCAweDAwLCAweDE4LCAweDAwLCAweDAyLCAweDgxLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAKLTB4ZjAsIDB4YjUsIDB4NDcsIDB4NGYsIDB4MzgsIDB4NjgsIDB4NDcsIDB4NGUsIDB4NDcsIDB4NGQsIDB4MDcsIDB4MjMsIAotMHg1YiwgMHgwMiwgMHhlYywgMHgxOCwgMHgwMCwgMHgyOCwgMHgxZCwgMHhkMSwgMHgyMCwgMHg2YiwgMHgwMSwgMHgzMCwgCi0weDIwLCAweDYzLCAweDQ0LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDQzLCAweDQ4LCAweDQxLCAweDY5LCAKLTB4MDAsIDB4MjksIDB4MTMsIDB4ZDAsIDB4YzEsIDB4MWQsIDB4NjksIDB4MzEsIDB4MDksIDB4N2IsIDB4MDAsIDB4MjksIAotMHgwZSwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMSwgMHg2ZCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDgxLCAweDYxLCAweGMyLCAweDY5LCAweDkxLCAweDQyLCAweDA0LCAweGQwLCAweGYxLCAweDZjLCAKLTB4MDEsIDB4MzEsIDB4ZjEsIDB4NjQsIDB4MDEsIDB4ZjAsIDB4NTAsIDB4ZmUsIAotMHgzOCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgxNywgMHhkMSwgMHgzNywgMHg0OCwgMHg0MSwgMHg2OSwgMHgwMCwgMHgyOSwgCi0weDEzLCAweGQwLCAweGMxLCAweDFkLCAweDY5LCAweDMxLCAweDA5LCAweDdiLCAweDAwLCAweDI5LCAweDBlLCAweGQwLCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDEsIDB4NmQsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIAotMHg4MSwgMHg2MSwgMHhjMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHgwNCwgMHhkMCwgMHhmMSwgMHg2YywgMHgwMSwgMHgzMSwgCi0weGYxLCAweDY0LCAweDAxLCAweGYwLCAweDM1LCAweGZlLCAweDM4LCAweDY4LCAweDAyLCAweDI4LCAweDJmLCAweGQxLCAKLTB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZWUsIDB4MTgsIDB4NzAsIDB4N2IsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIAotMHgwMCwgMHgyMCwgMHg3MCwgMHg3MywgMHgwMCwgMHhmMCwgMHg0YSwgMHhmZCwgMHgzMCwgMHg3YiwgMHgwMCwgMHgyOCwgCi0weDAyLCAweGQwLCAweDc4LCAweDY4LCAweDAyLCAweGYwLCAweGFhLCAweGZmLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAKLTB4ZTgsIDB4MTgsIDB4YzAsIDB4OGIsIDB4MDQsIDB4MjYsIDB4MDYsIDB4NDAsIDB4ZTAsIDB4NmEsIDB4YjAsIDB4NDIsIAotMHgxNCwgMHhkMCwgMHhmOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHhmOCwgMHg2MCwgMHgxOSwgMHgyOCwgMHgxMSwgMHhkMywgCi0weDFiLCAweDQ4LCAweDAxLCAweDdiLCAweDAwLCAweDI5LCAweDBkLCAweGQxLCAweGZmLCAweDMwLCAweDQxLCAweDMwLCAKLTB4NDAsIDB4NzgsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4YjgsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4OTAsIDB4ZmYsIAotMHgwMCwgMHgyMCwgMHhmOCwgMHg2MCwgMHhlNiwgMHg2MiwgMHgwMSwgMHhlMCwgMHgwMCwgMHgyMCwgMHhmOCwgMHg2MCwgCi0weDM4LCAweDY4LCAweDAzLCAweDI4LCAweDBiLCAweGQxLCAweGVjLCAweDFkLCAweDc5LCAweDM0LCAweGUwLCAweDZiLCAKLTB4ODAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MDcsIDB4ZmMsIDB4MDIsIDB4MjMsIAotMHhlMCwgMHg2YiwgMHg5OCwgMHg0MywgMHhlMCwgMHg2MywgMHgzOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHgzOCwgMHg2MCwgCi0weDAzLCAweDI4LCAweDAxLCAweGQ5LCAweDAwLCAweDIwLCAweDM4LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4M2MsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgCi0weGU0LCAweDJjLCAweDAwLCAweDgwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDFkLCAweDQ4LCAKLTB4ODQsIDB4OGEsIDB4MWQsIDB4NGEsIDB4MTMsIDB4OGEsIDB4YzEsIDB4MWQsIDB4MDksIDB4MzEsIDB4MDEsIDB4MjcsIAotMHg5YywgMHg0MiwgMHgwMywgMHhkMSwgMHg0MywgMHg4YSwgMHg1NCwgMHg4YSwgMHhhMywgMHg0MiwgMHgxMCwgMHhkMCwgCi0weDBiLCAweDc4LCAweDAwLCAweDJiLCAweDBkLCAweGQwLCAweDRiLCAweDc4LCAweDAwLCAweDJiLCAweDBhLCAweGQwLCAKLTB4NDQsIDB4OGIsIDB4OTMsIDB4OGEsIDB4OWMsIDB4NDIsIDB4MDQsIDB4ZGMsIDB4MTMsIDB4NGIsIDB4YzAsIDB4NDYsIAotMHg1ZiwgMHg2MCwgMHg5NywgMHg4MiwgMHgwMSwgMHhlMCwgMHgwMSwgMHgzMywgMHg5MywgMHg4MiwgMHhjMywgMHg4YiwgCi0weDVjLCAweDFjLCAweGM0LCAweDgzLCAweDg0LCAweDhiLCAweGEzLCAweDQyLCAweDBlLCAweGRiLCAweDg0LCAweDhhLCAKLTB4MDUsIDB4OGIsIDB4MDAsIDB4MjMsIDB4YWMsIDB4NDIsIDB4MDUsIDB4ZGEsIDB4NDQsIDB4OGEsIDB4YzUsIDB4OGEsIAotMHhhYywgMHg0MiwgMHgwMSwgMHhkYSwgMHg0YiwgMHg3MCwgMHgwMCwgMHhlMCwgMHg0ZiwgMHg3MCwgMHg0MywgMHg4MiwgCi0weDgzLCAweDgyLCAweGMzLCAweDgzLCAweDQxLCAweDhhLCAweGMwLCAweDQ2LCAweDUxLCAweDgyLCAweDgwLCAweDhhLCAKLTB4YzAsIDB4NDYsIDB4MTAsIDB4ODIsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHgzYywgMHgwNCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHhmNywgMHhiNSwgMHg5MSwgMHhiMCwgCi0weDZiLCAweDQ2LCAweDg0LCAweDFlLCAweDEyLCAweDk5LCAweDE0LCAweDI5LCAweDFhLCAweGQ5LCAweDAwLCAweDIwLCAKLTB4ODEsIDB4MDAsIDB4NjcsIDB4NTgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIAotMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwgMHhmNiwgMHhkMywgMHgwMCwgMHgyMSwgMHgwNSwgMHgyMCwgMHg4NywgMHgwMCwgCi0weGQ2LCAweDU5LCAweDRmLCAweDFjLCAweDNkLCAweDA2LCAweDJkLCAweDBlLCAweDBmLCAweDFjLCAweGJmLCAweDAwLCAKLTB4ZGUsIDB4NTEsIDB4MjksIDB4MWMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4MjgsIAotMHhmMSwgMHhkMywgMHgwOSwgMHhlMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg2MywgMHg1OCwgMHhjMCwgMHg0NiwgCi0weDUzLCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA2LCAweDI4LCAweGY2LCAweGQzLCAKLTB4MDAsIDB4MjAsIDB4ZTAsIDB4NzAsIDB4MjAsIDB4NzIsIDB4NjAsIDB4NzIsIDB4YTAsIDB4NzIsIDB4MjAsIDB4NzMsIAotMHg2MCwgMHg3MywgMHgxMiwgMHg5OSwgMHgxNCwgMHgyOSwgMHgzNywgMHhkOSwgMHg2OSwgMHg0NiwgMHg4ZSwgMHgxYywgCi0weDkxLCAweDc4LCAweDA5LCAweDA3LCAweDA5LCAweDBmLCAweDg5LCAweDAwLCAweDE0LCAweDM5LCAweDBkLCAweDA2LCAKLTB4MmQsIDB4MTYsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmQsIDB4MWIsIDB4ZGQsIDB4ZjAsIDB4MTksIDB4MTAsIDB4YTksIAotMHgwMCwgMHhmMCwgMHgzZCwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgCi0weDAwLCAweDIwLCAweDEwLCAweGE5LCAweDA5LCAweDc4LCAweDAwLCAweDI5LCAweDA5LCAweGRkLCAweDAwLCAweDIyLCAKLTB4MzksIDB4MTgsIDB4NzIsIDB4NTQsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MTAsIDB4YTksIAotMHgwOSwgMHg3OCwgMHg4OCwgMHg0MiwgMHhmNiwgMHhkYiwgMHgxMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHgzOCwgMHgxOCwgCi0weDA3LCAweDA2LCAweDNmLCAweDBlLCAweGFmLCAweDQyLCAweGUzLCAweGRiLCAweDY4LCAweDQ2LCAweGUyLCAweDFkLCAKLTB4MGQsIDB4MzIsIDB4MDAsIDB4MjEsIDB4YWIsIDB4MDgsIDB4NWYsIDB4MWMsIDB4MDgsIDB4ZDAsIDB4OGIsIDB4MDAsIAotMHhjNCwgMHg1OCwgMHhjMCwgMHg0NiwgMHhkNCwgMHg1MCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgCi0weDhmLCAweDQyLCAweGY2LCAweGQ4LCAweDE0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4OTAsIDB4YjQsIDB4ODcsIDB4MWUsIDB4MDAsIDB4MjAsIDB4ODksIDB4MDgsIDB4NGIsIDB4MWMsIDB4MDgsIDB4ZDAsIAotMHg4MSwgMHgwMCwgMHg1NCwgMHg1OCwgMHhjMCwgMHg0NiwgMHg3YywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgCi0weDAwLCAweDBlLCAweDgzLCAweDQyLCAweGY2LCAweGQ4LCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweGI0LCAKLTB4MDIsIDB4NzgsIDB4ZDIsIDB4MDYsIDB4ZDIsIDB4MGUsIDB4MDAsIDB4MjMsIDB4MDEsIDB4MjcsIDB4MDEsIDB4MmEsIAotMHgwMSwgMHhkYywgMHgwZiwgMHg3MCwgMHgxMSwgMHhlMCwgMHg0MCwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MCwgCi0weDE0LCAweDJhLCAweDA0LCAweGQxLCAweDA4LCAweDQ4LCAweDAxLCAweDdhLCAweDAxLCAweDMxLCAweDAxLCAweDcyLCAKLTB4MDcsIDB4ZTAsIDB4MDIsIDB4MmEsIDB4MDUsIDB4ZDAsIDB4MDUsIDB4MmEsIDB4MDMsIDB4ZDAsIDB4MDYsIDB4MmEsIAotMHgwMSwgMHhkMCwgMHgxNSwgMHgyYSwgMHgwMiwgMHhkMSwgMHgxOCwgMHgxYywgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgCi0weDM4LCAweDFjLCAweGZiLCAweGU3LCAweGUwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDBmLCAweDQ4LCAKLTB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksIDB4NDEsIDB4NjEsIAotMHhkMSwgMHg2MCwgMHgwMCwgMHgyMSwgMHhhMSwgMHgyMiwgMHg1MiwgMHgwMywgMHg5MSwgMHg2MSwgMHgxOSwgMHgxYywgCi0weDA5LCAweDRhLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAKLTB4ODAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NjEsIDB4ZmUsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHgwNCwgMHg0OCwgMHg0MSwgMHg4OCwgMHgwMSwgMHgzMSwgMHg0MSwgMHg4MCwgMHhmOCwgMHhlNywgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGUwLCAweDgyLCAweDIwLCAweDQwLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ODYsIDB4YjAsIDB4OTUsIDB4NGEsIDB4ZDAsIDB4NjgsIAotMHhkNywgMHgxZCwgMHg3OSwgMHgzNywgMHgwMSwgMHgyOCwgMHgwOSwgMHhkMSwgMHgzOCwgMHg4OSwgMHgwMCwgMHgyOCwgCi0weDA2LCAweGQxLCAweGQwLCAweDZmLCAweDAyLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAKLTB4MTQsIDB4MjAsIDB4MzgsIDB4ODEsIDB4OGUsIDB4NGMsIDB4NjEsIDB4NmEsIDB4OGUsIDB4NDgsIDB4YzMsIDB4NmIsIAotMHg1OSwgMHgxOCwgMHhjMSwgMHg2MywgMHhhMCwgMHg2YSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhkNCwgMHgxOCwgCi0weGEwLCAweDYyLCAweDIxLCAweDZhLCAweDA5LCAweDAzLCAweDA5LCAweDBiLCAweDgxLCAweDQyLCAweDA1LCAweGQxLCAKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsIDB4ODcsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTAsIAotMHhiYiwgMHg4YSwgMHg1OCwgMHgxYywgMHhiOCwgMHg4MiwgMHgzZCwgMHg4YiwgMHgwMSwgMHgyMCwgMHgwMCwgMHgyMSwgCi0weGFiLCAweDQyLCAweDA0LCAweGRiLCAweGQzLCAweDFkLCAweDg5LCAweDMzLCAweDU4LCAweDcwLCAweGI5LCAweDgyLCAKLTB4ZjksIDB4ODMsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MDUsIDB4OTMsIDB4NWIsIDB4NjksIAotMHgwZiwgMHgyYiwgMHg3MywgMHhkMiwgMHgwMCwgMHgyMSwgMHg3YywgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MSwgCi0weDIxLCAweDZhLCAweDhhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDRiLCAweDY4LCAweDFlLCAweDBjLCAKLTB4MzYsIDB4MDQsIDB4ZmQsIDB4MWYsIDB4MDksIDB4M2QsIDB4MDAsIDB4MmUsIDB4MDUsIDB4ZDEsIDB4M2IsIDB4MmEsIAotMHgwMywgMHhkMywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHg5YSwgMHg0MiwgMHgwMSwgMHhkOSwgMHhhOCwgMHg3MywgCi0weGM4LCAweGUwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsIDB4MDMsIDB4YTksIDB4MDksIDB4ODgsIDB4MDEsIDB4MzEsIDB4MDksIDB4MDQsIAotMHgwOSwgMHgwYywgMHg3OSwgMHg4MiwgMHg0OSwgMHgwOSwgMHgwNSwgMHgzMSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgCi0weDY5LCAweDRlLCAweGMwLCAweDQ2LCAweDAyLCAweDk2LCAweDY5LCAweDQ4LCAweDQzLCAweDZhLCAweGMwLCAweDQ2LCAKLTB4MDEsIDB4OTMsIDB4ODMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTMsIDB4YzIsIDB4MWQsIDB4MTEsIDB4MzIsIAotMHg4MCwgMHg2OSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg5MiwgMHg2OCwgMHhiMywgMHgwNywgMHgxYSwgMHg0MywgCi0weDEyLCAweDY4LCAweDkwLCAweDQyLCAweDAxLCAweGQxLCAweDAxLCAweDIwLCAKLTB4MGQsIDB4ZTAsIDB4OTAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4OWIsIDB4MTgsIDB4MWEsIDB4MDEsIDB4OWIsIAotMHhkMiwgMHgxYSwgMHg4MiwgMHgxOCwgMHgwMCwgMHhlMCwgMHgxMiwgMHgxYSwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMSwgCi0weDkxLCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDIwLCAweDAxLCAweDI4LCAweDY1LCAweGQxLCAweDUxLCAweDQ5LCAKLTB4MjAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NjIsIDB4ZDAsIDB4MDUsIDB4OTksIDB4NDgsIDB4NjksIDB4MDEsIDB4MzAsIAotMHg0OCwgMHg2MSwgMHgwMiwgMHgyMCwgMHgyMSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwgCi0weGE3LCAweGZjLCAweDc4LCAweDYzLCAweGJlLCAweDYwLCAweDQ5LCAweDQ5LCAweDIyLCAweDZhLCAweGEzLCAweDZiLCAKLTB4ZDMsIDB4MTgsIDB4NjYsIDB4NmIsIDB4YjMsIDB4NDIsIDB4MDAsIDB4ZDksIDB4MjIsIDB4NmIsIDB4YzAsIDB4NDYsIAotMHhiYSwgMHg2MiwgMHhiYSwgMHg2YSwgMHgwYywgMHgzMiwgMHhmYSwgMHg2MiwgMHgwMCwgMHgyMiwgMHhmYSwgMHg2MSwgCi0weDAzLCAweGFhLCAweDUyLCAweDg4LCAweGQyLCAweDA5LCAweDAzLCAweGQzLCAweDAxLCAweDIyLCAweDAwLCAweGUwLCAKLTB4N2IsIDB4ZTAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjIsIDB4N2EsIDB4NjAsIDB4N2EsIDB4NjgsIDB4YzAsIDB4NDYsIAotMHgwMiwgMHg2MCwgMHg3OCwgMHg4YSwgMHg0MSwgMHg0ZSwgMHg2MCwgMHgyOCwgMHgwNCwgMHhkYywgMHhiMCwgMHg4MywgCi0weDc4LCAweDhhLCAweGMwLCAweDQ2LCAweGYwLCAweDgzLCAweDA4LCAweGUwLCAweDYwLCAweDIwLCAweGIwLCAweDgzLCAKLTB4NzksIDB4OGEsIDB4ZjgsIDB4NmEsIDB4NDIsIDB4MTgsIDB4NjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDMsIDB4ZDgsIAotMHhmMSwgMHg4MywgMHgwMCwgMHgyMiwgMHgzYSwgMHg2MywgMHgwNSwgMHhlMCwgMHgyMSwgMHg2YiwgMHhjMCwgMHg0NiwgCi0weDM5LCAweDYzLCAweDYxLCAweDZiLCAweDA4LCAweDFhLCAweGYwLCAweDgzLCAweDJkLCAweDQ5LCAweDc4LCAweDZiLCAKLTB4NDIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YmEsIDB4NjAsIDB4ODIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NjAsIAotMHgwMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg3YSwgMHg2MSwgMHg0MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MSwgCi0weDJlLCAweDRiLCAweGM4LCAweDE4LCAweDA0LCAweDkwLCAweDAwLCAweGYwLCAweDM3LCAweGY5LCAweDA0LCAweDk4LCAKLTB4MDAsIDB4ZjAsIDB4ODgsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4ZjYsIDB4ZmEsIDB4NzgsIDB4OGEsIDB4ZjEsIDB4OGIsIAotMHg4OCwgMHg0MiwgMHgwNCwgMHhkMSwgMHhmOSwgMHg2YSwgMHgwOCwgMHgxOCwgMHgwNCwgMHhlMCwgMHgzOCwgMHhlMCwgCi0weDMyLCAweGUwLCAweDNhLCAweDZiLCAweDEwLCAweDE4LCAweDQwLCAweDFhLCAweDgxLCAweDA3LCAweDAyLCAweGQwLCAKLTB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDQsIDB4MzAsIDB4NjEsIDB4NmIsIDB4MDksIDB4MWEsIDB4YTIsIDB4NmIsIAotMHg5MSwgMHg0MiwgMHgwMCwgMHhkMiwgMHgyMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MiwgMHhlOCwgMHg3YiwgCi0weDAwLCAweDI4LCAweDA4LCAweGQwLCAweDAwLCAweDIyLCAweGVhLCAweDczLCAweDA1LCAweDk5LCAweDQ4LCAweDY5LCAKLTB4MDEsIDB4MzgsIDB4NDgsIDB4NjEsIDB4NzgsIDB4NmIsIDB4MDAsIDB4ZjAsIDB4NzMsIDB4ZmEsIDB4MTgsIDB4NDgsIAotMHg4MCwgMHg2YSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgwZSwgMHgwMSwgMHgyOCwgMHgwYSwgMHhkMSwgMHgyMCwgMHg2YSwgCi0weDAwLCAweDAzLCAweDAwLCAweDBiLCAweDBiLCAweDRjLCAweGExLCAweDZhLCAweDg4LCAweDQyLCAweDAzLCAweGQwLCAKLTB4MDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDQsIAotMHgwOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwNiwgMHhlMCwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwgCi0weDAxLCAweGQwLCAweDAwLCAweGYwLCAweGI1LCAweGZhLCAweDAxLCAweDIwLCAweGE4LCAweDczLCAweGVkLCAweGU3LCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwgCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDY4LCAweDFhLCAweDAwLCAweDgwLCAweGM0LCAweDBiLCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NzgsIDB4NmEsIDB4NDAsIDB4ODksIAotMHhmZiwgMHgyMSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg0MCwgMHgxMCwgMHg0OCwgMHgwMiwgMHhkMSwgMHg4MSwgMHg2YywgCi0weDAxLCAweDMxLCAweDgxLCAweDY0LCAweDc5LCAweDZhLCAweDQ5LCAweDg5LCAweDQ5LCAweDBiLCAweDAyLCAweGQyLCAKLTB4NDEsIDB4NmMsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjQsIDB4MGIsIDB4NDgsIDB4NDEsIDB4NmEsIDB4MDEsIDB4MzEsIAotMHg0MSwgMHg2MiwgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgMHgzOCwgMHg2YiwgCi0weDAwLCAweGYwLCAweGY4LCAweGZiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGIzLCAweGY4LCAweDAxLCAweDIwLCAKLTB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NzMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwgCi0weGY4LCAweGI1LCAweDA3LCAweDFjLCAweDAwLCAweDIyLCAweGY5LCAweDFkLCAweDYxLCAweDMxLCAweDBkLCAweDFjLCAKLTB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4NDAsIDB4ODksIAotMHgwMywgMHgwYywgMHgwMSwgMHhkMiwgMHg0MCwgMHgwYSwgMHgwMywgMHhkMiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgCi0weGMxLCAweGZmLCAweDY3LCAweGUwLCAweDM1LCAweDQ4LCAweGMwLCAweDZiLCAweDAwLCAweDA5LCAweDFmLCAweGQzLCAKLTB4MDgsIDB4NzgsIDB4NDAsIDB4MDgsIDB4MWMsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NDMsIDB4MDAsIDB4Y2MsIDB4NWEsIAotMHgzMSwgMHg0ZSwgMHg5ZSwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHgxYiwgMHg4OCwgCi0weDljLCAweDQyLCAweDBlLCAweGQwLCAweGI4LCAweDY5LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDg4LCAweDYxLCAKLTB4ZjgsIDB4NjgsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHgyNywgMHhmOSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3NCwgMHhmOCwgMHg0NiwgMHhlMCwgMHgwMSwgMHgzMCwgCi0weDAzLCAweDI4LCAweGUzLCAweGRiLCAweDAyLCAweDIwLCAweDQzLCAweDAwLCAweDVjLCAweDE4LCAweGU0LCAweDg4LCAKLTB4MjIsIDB4NGUsIDB4OWUsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjMsIDB4MTgsIDB4MWIsIDB4ODgsIAotMHg5YywgMHg0MiwgMHgwMywgMHhkMSwgMHgwMSwgMHgyMywgMHgwMSwgMHgzOCwgMHhkOCwgMHg0MiwgMHhmMCwgMHhkYywgCi0weDAxLCAweDIzLCAweGQ4LCAweDQyLCAweGM0LCAweGQwLCAweDFiLCAweDRlLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAKLTB4ZjAsIDB4MTgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MjQsIDB4ZDAsIDB4N2QsIDB4NjMsIDB4MDAsIDB4OTgsIAotMHg0MCwgMHg4OSwgMHgwMCwgMHgwYywgMHgxZiwgMHhkMiwgMHgwMCwgMHgyNCwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgCi0weGYwLCAweDE4LCAweGMwLCAweDZiLCAweDM1LCAweDFjLCAweDAwLCAweDI4LCAweDE3LCAweGQwLCAweGZlLCAweDFkLCAKLTB4MmQsIDB4MzYsIDB4YTIsIDB4MDAsIDB4NTIsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIAotMHhkMiwgMHg2YiwgMHgzOCwgMHgxYywgMHgzMSwgMHgxYywgMHgwMiwgMHhmMCwgMHg3YiwgMHhmYywgMHgwMSwgMHgyOCwgCi0weDBlLCAweGQwLCAweDAxLCAweDM0LCAweGEwLCAweDAwLCAweDQwLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAKLTB4YzAsIDB4MTgsIDB4YzAsIDB4NmIsIDB4MDAsIDB4MjgsIDB4ZWEsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDEsIDB4MmEsIAotMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOCwgMHhmOCwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NjksIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjEsIAotMHhmOCwgMHg2OCwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHg3OCwgMHg2YSwgMHg0MCwgMHg4OSwgCi0weDAxLCAweDBjLCAweDBlLCAweGQyLCAweDQwLCAweDBhLCAweDBjLCAweGQzLCAweDM4LCAweDY4LCAweDQwLCAweDA4LCAKLTB4MDIsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGMsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHhiYiwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOCwgMHhmOCwgMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywgCi0weGZmLCAweGY3LCAweDMwLCAweGZmLCAweDAxLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MDEsIDB4MjEsIDB4MDAsIDB4NmIsIDB4NDAsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4NzAsIDB4NDcsIAotMHhiMCwgMHhiNCwgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwOSwgMHg4YiwgMHg4OSwgMHgwOCwgMHgwOSwgMHgwNCwgCi0weDA5LCAweDBjLCAweDg0LCAweDZhLCAweGMyLCAweDFkLCAweDYxLCAweDMyLCAweDAwLCAweDIwLCAweDAwLCAweDI5LCAKLTB4MGMsIDB4ZGQsIDB4ODcsIDB4MDAsIDB4M2QsIDB4MTksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsIAotMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMywgMHg1MSwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgCi0weDg4LCAweDQyLCAweGYyLCAweGRiLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweGEwLCAweGIwLCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzEsIDB4MWQsIDB4MjEsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIAotMHhjMCwgMHg0NiwgMHgwYiwgMHg5MSwgMHhjMSwgMHgxZCwgMHg1MywgMHgzMSwgMHgxOSwgMHg0MywgMHgxZiwgMHg5MSwgCi0weDA5LCAweDY4LCAweDAxLCAweGFmLCAweGZhLCAweDFkLCAweDM5LCAweDMyLCAweDFlLCAweDkyLCAweDE3LCAweGFiLCAKLTB4NTksIDB4ODAsIDB4M2EsIDB4NDksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGEsIDB4NmEsIDB4MTMsIDB4NDMsIAotMHhjYywgMHgxZCwgMHgxMSwgMHgzNCwgMHg4OSwgMHg2OSwgMHgwOSwgMHgwMywgMHgwOSwgMHgwYiwgMHgyMiwgMHg2OSwgCi0weGU1LCAweDY4LCAweGMwLCAweDQ2LCAweDFkLCAweDk1LCAweGZjLCAweDFkLCAweDM5LCAweDM0LCAweDY0LCAweDhiLCAKLTB4NjQsIDB4MDksIDB4MDUsIDB4MzQsIDB4MjQsIDB4MDYsIDB4MjQsIDB4MGUsIDB4MWMsIDB4OTQsIDB4NTYsIDB4MWEsIAotMHgxYiwgMHg5NiwgMHgxYywgMHg5YywgMHgyZSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwMSwgMHgyNiwgCi0weDFkLCAweDlkLCAweDFhLCAweDY4LCAweDkxLCAweDQyLCAweDAxLCAweGQxLCAweDMyLCAweDFjLCAweDBiLCAweGUwLCAKLTB4OTEsIDB4NDIsIDB4MDMsIDB4ZDksIDB4NTIsIDB4MWIsIDB4MWIsIDB4OWUsIDB4YjUsIDB4MTgsIDB4MDAsIDB4ZTAsIAotMHg1NSwgMHgxYSwgMHgwMSwgMHgyMiwgMHgyNCwgMHgwMSwgMHhhYywgMHg0MiwgCi0weDAwLCAweGQzLCAweDAwLCAweDIyLCAweDAxLCAweDJhLCAweGU2LCAweGQxLCAweDkxLCAweDA3LCAweDAxLCAweDQzLCAKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4OTMsIDB4MDcsIDB4MDEsIDB4MWQsIDB4MTksIDB4NDMsIAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgMHgxOSwgMHg0MywgCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYwLCAweDFmLCAweDk5LCAweDA5LCAweDY4LCAweDFlLCAweDlhLCAKLTB4YzAsIDB4NDYsIDB4NTEsIDB4ODMsIDB4YzEsIDB4MWQsIDB4MWQsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIAotMHhjMCwgMHg0NiwgMHgzOCwgMHg2MywgMHg3OSwgMHg2MiwgMHhjMSwgMHgxZCwgMHgxMSwgMHgzMSwgMHgxOSwgMHg0MywgCi0weDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGI5LCAweDYxLCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDE5LCAweDQzLCAKLTB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4YzEsIDB4MWQsIDB4MTcsIDB4MzEsIDB4MTksIDB4NDMsIAotMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg4MywgMHgwZSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgCi0weGMwLCAweDQ2LCAweGY4LCAweDgxLCAweDM4LCAweDY4LCAweDQwLCAweDA4LCAweDAyLCAweGQzLCAweDM4LCAweDFjLCAKLTB4MDIsIDB4ZjAsIDB4NWMsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MzgsIDB4MWMsIAotMHhmZiwgMHhmNywgMHg1OCwgMHhmZiwgMHgyMCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weGE4LCAweDAzLCAweDAwLCAweDgwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LCAweGY4LCAweGI1LCAweDA3LCAweDFjLCAKLTB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4NDEsIDB4OGIsIDB4MzksIDB4NGEsIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZGQsIAotMHg0MiwgMHg4MywgMHg0MiwgMHg4YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwMSwgMHgyMCwgMHgzYSwgMHgxZCwgCi0weDA2LCAweGNhLCAweGJiLCAweDZhLCAweDAyLCAweGYwLCAweDBlLCAweGZmLCAweDMzLCAweDRhLCAweGMwLCAweDQ2LCAKLTB4MDAsIDB4OTIsIDB4MzMsIDB4NGUsIDB4MzAsIDB4NmEsIDB4MzMsIDB4NGMsIDB4ZTEsIDB4NmQsIDB4NDEsIDB4MTgsIAotMHgzOCwgMHg2YiwgMHhjMywgMHgxZCwgMHgwNSwgMHgzMywgMHgwMSwgMHgyMCwgMHg3MiwgMHg2YSwgMHgwMiwgMHhmMCwgCi0weGZiLCAweGZlLCAweGUwLCAweDZkLCAweDE4LCAweDMwLCAweDAwLCAweDI1LCAweGIxLCAweDZhLCAweDgxLCAweDQyLCAKLTB4MDEsIDB4ZDgsIDB4ZTUsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4ZTAsIDB4NjUsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsIAotMHgyMCwgMHgxYywgMHhlMSwgMHg2ZCwgMHhlNCwgMHgxOCwgMHgyMiwgMHg2OCwgMHg5MiwgMHgwMCwgMHgyNywgMHg0YiwgCi0weGMwLCAweDQ2LCAweDk5LCAweDUwLCAweDI2LCAweDQ4LCAweGMxLCAweDZiLCAweDRhLCAweDA4LCAweDA1LCAweGQzLCAKLTB4NDksIDB4MDgsIDB4NDksIDB4MDAsIDB4YzEsIDB4NjMsIDB4MDEsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZDYsIDB4ZmYsIAotMHgyMiwgMHg0YSwgMHgxZiwgMHg0OCwgMHhjMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHgwYiwgMHg3OCwgMHgwMCwgMHgyYiwgCi0weDAyLCAweGQwLCAweDQ5LCAweDc4LCAweDAwLCAweDI5LCAweDAwLCAweGQxLCAweDFlLCAweDRhLCAweGMwLCAweDQ2LCAKLTB4MDAsIDB4OTIsIDB4MjAsIDB4NjgsIDB4ODAsIDB4MDAsIDB4MTksIDB4NGIsIDB4YzMsIDB4MTgsIDB4MDUsIDB4Y2UsIAotMHhjMSwgMHgxZCwgMHgxMSwgMHgzMSwgMHgwMSwgMHgyMCwgMHgwMiwgMHhmMCwgMHhjNywgMHhmZSwgMHgxNCwgMHg0OCwgCi0weDIxLCAweDY4LCAweDAxLCAweDMxLCAweDIxLCAweDYwLCAweDE3LCAweDI5LCAweDAwLCAweGQzLCAweDI1LCAweDYwLCAKLTB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGQsIDB4NjUsIDB4NzksIDB4NmEsIDB4M2EsIDB4NmIsIDB4YzAsIDB4NDYsIAotMHg1MSwgMHg2MiwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2OCwgMHgwMCwgMHgyOSwgCi0weDAzLCAweGQxLCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDA0LCAweGUwLCAweDM5LCAweDZiLCAKLTB4YzIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjUsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIAotMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNSwgMHgwMCwgMHgwMCwgCi0weDE4LCAweDAwLCAweDE0LCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4NDQsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDIsIAotMHgwNCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiNSwgMHgxMSwgMHg0ZSwgMHhmZiwgMHgyNSwgMHgwMSwgMHgzNSwgCi0weDEwLCAweDRmLCAweGMwLCAweDQ2LCAweDM1LCAweDYwLCAweDc4LCAweDY5LCAweDAxLCAweDM4LCAweDc4LCAweDYxLCAKLTB4YmMsIDB4NjgsIDB4MDAsIDB4MmMsIDB4MTAsIDB4ZDAsIDB4MjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjAsIAotMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyMSwgMHhmOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNCwgMHhmYSwgCi0weDA4LCAweDQ4LCAweDgwLCAweDZhLCAweDAwLCAweDBjLCAweDAwLCAweDA3LCAweGU5LCAweGQxLCAweGYwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4NDgsIDB4YzEsIDB4NzksIDB4MDEsIDB4MzEsIDB4YzEsIDB4NzEsIAotMHhmNywgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwgCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAKLTB4MDEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4MDEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgzOCwgMHg2OCwgMHhjMCwgMHgwOCwgCi0weDA5LCAweGQzLCAweDFkLCAweDQ4LCAweDAxLCAweDZhLCAweDAxLCAweDM5LCAweDAxLCAweDYyLCAweDIwLCAweDMwLCAKLTB4MDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZmUsIDB4ZjcsIDB4ZTksIDB4ZmQsIDB4MDEsIDB4MjMsIAotMHg5YiwgMHgwNywgMHhmOCwgMHgxZCwgMHgxZCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgxNiwgMHg0YywgCi0weDYxLCAweDZhLCAweDgxLCAweDQyLCAweDIxLCAweGQxLCAweDAxLCAweDFjLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjksIDB4MWEsIDB4ZDEsIDB4MDAsIDB4ZjAsIDB4MjIsIDB4ZjgsIAotMHg2MCwgMHg2MiwgMHg2MCwgMHg2YSwgMHgyMSwgMHg2YSwgMHg4OCwgMHg0MiwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMSwgCi0weDg5LCAweDA3LCAweDAxLCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA0LCAweGYyLCAweGQwLCAweDUxLCAweDIxLCAKLTB4ODksIDB4MDMsIDB4NjIsIDB4NmEsIDB4MjMsIDB4NmIsIDB4OWEsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4NjAsIDB4NmIsIAotMHhhMiwgMHg2YiwgMHg4MCwgMHgxYSwgMHgwNCwgMHgzOCwgMHhjOCwgMHg2MCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDc5LCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGY3LCAweGU3LCAKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIAotMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgCi0weDA4LCAweDE4LCAweDBkLCAweDMwLCAweDgxLCAweDA3LCAweDAyLCAweGQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAKLTB4MDQsIDB4MzAsIDB4MDQsIDB4NDksIDB4OGEsIDB4NmIsIDB4MTIsIDB4MTgsIDB4NGIsIDB4NmIsIDB4OWEsIDB4NDIsIAotMHgwMCwgMHhkOSwgMHgwOCwgMHg2YiwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgCi0weDAwLCAweGI1LCAweDA0LCAweDQ4LCAweGMwLCAweDY4LCAweDEwLCAweDI4LCAweDAxLCAweGQzLCAweDAwLCAweGYwLCAKLTB4MDUsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIAotMHg4OCwgMHhiNSwgMHgwYywgMHg0ZiwgMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwYiwgMHg0OSwgCi0weDEwLCAweDIwLCAweDAyLCAweGYwLCAweGY1LCAweGZkLCAweDAwLCAweDI4LCAweDBiLCAweGQwLCAweDAxLCAweDIwLCAKLTB4MzgsIDB4NzEsIDB4MDgsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDcsIDB4NDgsIDB4NDIsIDB4NjgsIAotMHgwNywgMHg0YiwgMHgwMSwgMHg2OCwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhkZiwgMHhmZCwgMHg4OCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY4LCAweDFhLCAweDAwLCAweDgwLCAweGY1LCAweDJjLCAweGZmLCAweGZmLCAKLTB4MTAsIDB4MDAsIDB4MzUsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIAotMHg5MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHgxMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgCi0weDBmLCAweDRmLCAweDEwLCAweDIxLCAweGY4LCAweDFkLCAweDNkLCAweDMwLCAweDAyLCAweGYwLCAweDRjLCAweGZjLCAKLTB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZmMsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIAotMHgwMCwgMHhmMCwgMHgxNCwgMHhmOCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgyMywgMHgxYiwgMHgwMSwgMHhmOSwgMHgxOCwgCi0weDA4LCAweDcxLCAweGUwLCAweDY4LCAweDEwLCAweDI4LCAweDA0LCAweGQzLCAweDAxLCAweDIwLCAweGJiLCAweDIzLCAKLTB4MWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4NDgsIDB4NzMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgzNywgMHg0OCwgCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMxLCAweDE4LCAweGM5LCAweDY4LCAweDM1LCAweDRkLCAweDEwLCAweDI5LCAKLTB4MDAsIDB4ZDksIDB4MTAsIDB4MjEsIDB4NjksIDB4NjIsIDB4MzIsIDB4NDgsIDB4YzEsIDB4NmMsIDB4MDAsIDB4NmUsIAotMHg4MSwgMHg0MiwgMHgwNywgMHhkOSwgMHgwOCwgMHgxYSwgMHgwNywgMHgwOSwgMHgwMCwgMHgyNCwgMHg2OCwgMHg2YSwgCi0weGI4LCAweDQyLCAweDEyLCAweGQyLCAweDA3LCAweDFjLCAweDEwLCAweGUwLCAweDgxLCAweDQyLCAweDJhLCAweGQyLCAKLTB4MmMsIDB4NGEsIDB4NTIsIDB4NmIsIDB4MTAsIDB4MWEsIDB4MDcsIDB4MDksIDB4NjgsIDB4NmEsIDB4YjgsIDB4NDIsIAotMHgwNSwgMHhkOSwgMHgwYywgMHgwOSwgMHgzOSwgMHgxOSwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMiwgMHhjNCwgMHgxYiwgCi0weDAxLCAweGUwLCAweDAwLCAweDI0LCAweDA3LCAweDFjLCAweDNlLCAweDE5LCAweDMwLCAweDAxLCAweDI1LCAweDQ5LCAKLTB4MDIsIDB4ZjAsIDB4ODQsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4M2QsIDB4ZDAsIDB4MjMsIDB4NDgsIDB4MDAsIDB4MmMsIAotMHgxYSwgMHhkMSwgMHgxZSwgMHg0OSwgMHgzYSwgMHgwMSwgMHg2ZiwgMHg2MiwgMHgwOSwgMHg2ZSwgMHg4YywgMHgxOCwgCi0weDFkLCAweDRkLCAweDZiLCAweDZiLCAweGEzLCAweDQyLCAweDAwLCAweGQ4LCAweGU0LCAweDFhLCAweDFlLCAweDRiLCAKLTB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4ZWEsIDB4NmEsIDB4NTEsIDB4MTgsIAotMHgyYSwgMHg2YiwgMHgwMywgMHgxYywgMHgyMCwgMHhlMCwgMHgxYiwgMHg0OCwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwgCi0weDAxLCAweDYzLCAweDAwLCAweDIwLCAweDY4LCAweDYyLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MTAsIDB4NDksIDB4MjQsIDB4MDEsIDB4M2YsIDB4MDEsIDB4MTEsIDB4MjIsIDB4NTIsIDB4MDUsIDB4M2EsIDB4NDMsIAotMHg2ZSwgMHg2MiwgMHgwMCwgMHg5MiwgMHgwZSwgMHg0ZCwgMHhlYSwgMHg2YSwgMHgwOSwgMHg2ZSwgMHg1MSwgMHgxOCwgCi0weDAzLCAweDFjLCAweDA2LCAweDFjLCAweDAwLCAweDIwLCAweDJhLCAweDZiLCAweDAyLCAweGYwLCAweDRhLCAweGZkLCAKLTB4MGMsIDB4NGEsIDB4MjIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YmIsIDB4MTksIDB4ZTksIDB4NmEsIDB4MmEsIDB4NmIsIAotMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg0MSwgMHhmZCwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg2NiwgCi0weDAwLCAweGYwLCAweDEwLCAweGY4LCAweDAxLCAweDIwLCAweGRhLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NWQsIDB4MmUsIDB4ZmYsIDB4ZmYsIAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgCi0weDA0LCAweDQ4LCAweDAxLCAweDZlLCAweDA0LCAweDRhLCAweDgwLCAweDMwLCAweGQxLCAweDYwLCAweDAyLCAweDIzLCAKLTB4YzEsIDB4NmIsIDB4MTksIDB4NDMsIDB4YzEsIDB4NjMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgyMCwgMHg4MCwgMHgwMiwgCi0weDFjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweDI3LCAweDFiLCAweDRlLCAweDMzLCAweDIzLCAKLTB4OWIsIDB4MDEsIDB4ZjUsIDB4MTgsIDB4NjgsIDB4NmEsIDB4MDAsIDB4MjgsIDB4MWQsIDB4ZDksIDB4MTksIDB4NGMsIAotMHg2OCwgMHg0NiwgMHgxMCwgMHgyMSwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmYiwgMHg2OCwgMHg0NiwgMHgwMCwgMHhmMCwgCi0weDMzLCAweGY4LCAweDAwLCAweDI4LCAweDA0LCAweGQwLCAweDE1LCAweDQ5LCAweDQ4LCAweDY5LCAweDAxLCAweDMwLCAKLTB4NDgsIDB4NjEsIDB4MGEsIDB4ZTAsIDB4MTMsIDB4NDksIDB4NjAsIDB4N2IsIDB4MDEsIDB4MzAsIDB4NjAsIDB4NzMsIAotMHg4OCwgMHg3OSwgMHgwMSwgMHgzMCwgMHg4OCwgMHg3MSwgMHgxMSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhmMCwgCi0weDY1LCAweGY5LCAweDY4LCAweDZhLCAweDAxLCAweDM3LCAweGI4LCAweDQyLCAweGUyLCAweGQ4LCAweGJiLCAweDIzLCAKLTB4MWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4ODEsIDB4N2IsIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDAsIDB4MDAsIDB4MjEsIAotMHg4MSwgMHg3MywgMHhmZiwgMHhmNywgMHgwNSwgMHhmYiwgMHhmZiwgMHhmNywgMHhlMywgMHhmZSwgMHgwNCwgMHhiMCwgCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg1OCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgxNywgMHg0ZiwgCi0weDE5LCAweDIzLCAweGRiLCAweDAxLCAweGY5LCAweDE4LCAweDAwLCAweDIyLCAweGNiLCAweDY4LCAweDAwLCAweDJiLCAKLTB4MjMsIDB4ZDAsIDB4MDEsIDB4M2IsIDB4Y2IsIDB4NjAsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZmYsIDB4MTgsIAotMHhiYiwgMHg2OSwgMHgxYywgMHg2ZCwgMHhjMCwgMHg0NiwgMHhiYywgMHg2MSwgMHgwNCwgMHg2OCwgMHhjMCwgMHg0NiwgCi0weDVjLCAweDYwLCAweDQ0LCAweDY4LCAweGMwLCAweDQ2LCAweDljLCAweDYwLCAweDg0LCAweDY4LCAweGMwLCAweDQ2LCAKLTB4MWMsIDB4NjEsIDB4YzAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTgsIDB4NjEsIDB4MWEsIDB4NjUsIDB4MDgsIDB4NjksIAotMHg0MiwgMHgxYywgMHgwYSwgMHg2MSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgzOCwgMHg2YSwgMHhjMCwgMHg0NiwgCi0weDAzLCAweDY1LCAweDAwLCAweGUwLCAweGZiLCAweDYxLCAweDNiLCAweDYyLCAweDE4LCAweDFjLCAweDkwLCAweGJjLCAKLTB4NzAsIDB4NDcsIDB4MTAsIDB4MWMsIDB4ZmIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHgwYSwgMHg0YSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMSwgMHgxOCwgMHhjOCwgMHg2OSwgMHgxOSwgMHgyMywgCi0weGRiLCAweDAxLCAweGQyLCAweDE4LCAweDEzLCAweDY5LCAweDAwLCAweDJiLCAweDA2LCAweGQwLCAweDAxLCAweDNiLCAKLTB4MTMsIDB4NjEsIDB4Y2EsIDB4NjksIDB4MTIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4Y2EsIDB4NjEsIDB4NzAsIDB4NDcsIAotMHgwMCwgMHgyMSwgMHgxMSwgMHg2MSwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgCi0weDA2LCAweDRhLCAweDExLCAweDY5LCAweDRiLCAweDFjLCAweDEzLCAweDYxLCAweDQwLCAweDMyLCAweDAwLCAweDI5LCAKLTB4MDEsIDB4ZDAsIDB4ZDEsIDB4NjksIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4ZDAsIDB4NjEsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwNiwgMHg0YSwgMHhkMSwgMHg2OCwgCi0weDRiLCAweDFjLCAweGQzLCAweDYwLCAweDQwLCAweDMyLCAweDAwLCAweDI5LCAweDAxLCAweGQwLCAweDkxLCAweDY5LCAKLTB4MDAsIDB4ZTAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjUsIDB4OTAsIDB4NjEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgCi0weDBmLCAweDRhLCAweDk3LCAweDg5LCAweDkyLCAweDZhLCAweDRiLCAweDAwLCAweDFiLCAweDE4LCAweDliLCAweDhhLCAKLTB4MDAsIDB4MmIsIDB4MTIsIDB4ZDAsIDB4YmIsIDB4NDIsIDB4MTAsIDB4ZGMsIDB4MWMsIDB4MWMsIDB4NTgsIDB4MjMsIAotMHg2MywgMHg0MywgMHhkMywgMHgxOCwgMHhkYywgMHgxZiwgMHg0OSwgMHgzYywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgCi0weDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDAzLCAweDJiLCAweDAyLCAweGQwLCAKLTB4MDAsIDB4MjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDEsIDB4MzEsIDB4MDQsIDB4MjksIDB4ZTQsIDB4ZDMsIAotMHgwMSwgMHgyMCwgMHhmOCwgMHhlNywgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHhmNywgMHhiNSwgMHg4NiwgMHhiMCwgCi0weDNkLCAweDRhLCAweDA3LCAweDFjLCAweGQxLCAweDY5LCAweDhmLCAweDQwLCAweDAzLCAweDFjLCAweDE0LCAweDZhLCAKLTB4ZTMsIDB4NDAsIDB4NWYsIDB4NDAsIDB4MDcsIDB4OWUsIDB4OGUsIDB4NDAsIDB4NzcsIDB4NDAsIDB4Y2YsIDB4NDAsIAotMHg5NCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5NCwgMHgwMywgMHgxYywgMHhhMywgMHg0MCwgMHgwMCwgMHgyNSwgCi0weDE0LCAweDY5LCAweGMwLCAweDQ2LCAweDA0LCAweDk0LCAweDAwLCAweDJjLCAweDVkLCAweGQ5LCAweDFjLCAweDFjLCAKLTB4MzIsIDB4NGUsIDB4MjYsIDB4NDMsIDB4OTQsIDB4NjksIDB4ZTYsIDB4NDAsIDB4MzMsIDB4MWMsIDB4MDMsIDB4OTYsIAotMHg1MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MywgMHhkMiwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MiwgCi0weGJiLCAweDAwLCAweDAyLCAweDlhLCAweGQyLCAweDU4LCAweDEzLCAweDFjLCAweDA1LCAweDljLCAweGUzLCAweDQwLCAKLTB4MDMsIDB4OWMsIDB4YTMsIDB4NDIsIDB4M2UsIDB4ZDEsIDB4OGEsIDB4NDAsIDB4Y2EsIDB4NDAsIDB4MTQsIDB4MWMsIAotMHg2MywgMHgwMCwgMHgxYiwgMHgxOSwgMHg1YiwgMHgwMSwgMHgwMSwgMHg5YSwgMHhkMiwgMHgxOCwgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweGQ2LCAweDFkLCAweDAxLCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAKLTB4MWIsIDB4MGUsIDB4MDMsIDB4MmIsIDB4MmMsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIAotMHg1MSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNywgMHg5ZSwgMHgxZSwgMHg0MCwgMHgwMCwgMHg5NiwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDQ5LCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAKLTB4ODMsIDB4NDIsIDB4MWIsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4NGQsIDB4MzYsIAotMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwMCwgMHg5ZSwgMHhiMywgMHg0MiwgMHgxMiwgMHhkMSwgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDA4LCAweDliLCAKLTB4MzIsIDB4MmIsIDB4MDQsIDB4ZDEsIDB4MDIsIDB4MmEsIDB4MDcsIDB4ZDEsIDB4MjAsIDB4MDQsIDB4MDAsIDB4MTQsIAotMHgwZiwgMHhlMCwgMHgwOCwgMHg5YiwgMHgzMywgMHgyYiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyYSwgMHhmNywgMHhkMCwgCi0weDA0LCAweDlhLCAweDAxLCAweDM3LCAweDk3LCAweDQyLCAweDAwLCAweGQzLCAweDAwLCAweDI3LCAweDA0LCAweDlhLCAKLTB4MDEsIDB4MzUsIDB4YWEsIDB4NDIsIDB4YWUsIDB4ZDgsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4MDksIDB4YjAsIAotMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgCi0weDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDI3LCAweDRkLCAweDY4LCAweDY5LCAweDAwLCAweDI4LCAKLTB4MDYsIDB4ZDAsIDB4MjYsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4MmIsIDB4ZjgsIDB4ZjAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMywgMHg0YywgMHgwMCwgMHgyNiwgMHhhMCwgMHg2OCwgMHgyMywgMHg0ZiwgCi0weDAwLCAweDI4LCAweDE2LCAweGQwLCAweDBmLCAweGUwLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAweDAyLCAweGQzLCAKLTB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4MGYsIDB4ZTAsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsIDB4ZGUsIDB4ZmUsIAotMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMSwgMHhkMywgMHgwMSwgMHgyMCwgCi0weDM4LCAweDcxLCAweGU4LCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDc5LCAweDAwLCAweDI4LCAKLTB4ZTksIDB4ZDAsIDB4NjgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NjAsIAotMHhmZSwgMHhmNywgMHhiYywgMHhmYiwgMHgwMCwgMHgyOCwgMHhkNiwgMHhkMSwgMHg2OCwgMHg2OCwgMHgwMCwgMHgyOCwgCi0weGY2LCAweGQxLCAweDExLCAweGUwLCAweDAwLCAweDI4LCAweGQwLCAweGQxLCAweDI4LCAweDZhLCAweDAyLCAweDI4LCAKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4Y2EsIDB4ZTcsIDB4YTYsIDB4NjAsIDB4ZmQsIDB4ZjcsIAotMHhiOSwgMHhmZSwgMHgwMCwgMHgyOCwgMHhjNSwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMSwgMHhkMywgCi0weDAxLCAweDIwLCAweDM4LCAweDcxLCAweGU4LCAweDY4LCAweDAwLCAweDI4LCAweGJkLCAweGQwLCAweDM4LCAweDc5LCAKLTB4MDAsIDB4MjgsIDB4ZTcsIDB4ZDAsIDB4YjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIAotMHg1YywgMHgwNCwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg4YywgMHgwNiwgMHgwMCwgMHg4MCwgCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MWQsIDB4NDksIDB4YzAsIDB4NDYsIAotMHgwOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHg5ZCwgMHhmYywgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg0MSwgMHg2OCwgCi0weDE5LCAweDQwLCAweDBjLCAweDBmLCAweDYxLCAweDAxLCAweDA5LCAweDFiLCAweDg5LCAweDAwLCAweDE4LCAweDRhLCAKLTB4OGYsIDB4MTgsIDB4MDEsIDB4MjEsIDB4MzksIDB4ODAsIDB4ODEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzksIDB4NjUsIAotMHg0MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2NywgMHhiOSwgMHg2YywgMHhmYSwgMHg2YywgMHg4OSwgMHgxOCwgCi0weGI5LCAweDY0LCAweDAwLCAweDIxLCAweGY5LCAweDY0LCAweGJhLCAweDZiLCAweDNiLCAweDZkLCAweGQyLCAweDE4LCAKLTB4YmEsIDB4NjMsIDB4MzksIDB4NjUsIDB4NDIsIDB4NmEsIDB4MjAsIDB4MzIsIDB4NTEsIDB4NzEsIDB4NzksIDB4NmQsIAotMHg3YSwgMHg2ZiwgMHhkMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhmYywgMHhmNywgMHhjYSwgMHhmZiwgCi0weDIwLCAweDAxLCAweDA5LCAweDQ5LCAweDQwLCAweDE4LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4NzgsIDB4NmYsIDB4MDEsIDB4ZjAsIDB4YzYsIDB4ZmIsIAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgCi0weDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDQwLCAweDIwLCAKLTB4MTIsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4NTksIDB4ZmMsIDB4MDcsIDB4MWMsIAotMHg0MCwgMHg2OCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwgMHgwNiwgMHgwZiwgMHg3MCwgMHgwMSwgCi0weDgwLCAweDFiLCAweDgwLCAweDAwLCAweDBjLCAweDQ5LCAweDQ0LCAweDE4LCAweGI4LCAweDZhLCAweGMwLCAweDQ2LCAKLTB4NjAsIDB4NjUsIDB4NzgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjcsIDB4ODAsIDB4NmYsIDB4MDUsIDB4MWQsIAotMHhlNSwgMHg2MywgMHhiOSwgMHg2OSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4OSwgMHhmOSwgMHgzOCwgMHgxYywgCi0weDIxLCAweDFjLCAweDMyLCAweDFjLCAweDJiLCAweDFjLCAweDAwLCAweGYwLCAweDIwLCAweGY4LCAweGYwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIAotMHhmMCwgMHhiNSwgMHg0YiwgMHg2ZiwgMHg5YiwgMHg2ZiwgMHgxZiwgMHgxZCwgMHhjZiwgMHg2MywgMHgwNSwgMHg2OCwgCi0weDAwLCAweDIzLCAweDg0LCAweDY5LCAweGE0LCAweDA4LCAweDA4LCAweGQwLCAweDljLCAweDAwLCAweDJlLCAweDU5LCAKLTB4YzAsIDB4NDYsIDB4M2UsIDB4NTEsIDB4ODQsIDB4NjksIDB4YTQsIDB4MDgsIDB4MDEsIDB4MzMsIDB4OWMsIDB4NDIsIAotMHhmNiwgMHhkOCwgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHgwMywgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweGZmLCAweGI1LCAweDgxLCAweGIwLCAweDA0LCAweDFjLCAweDFkLCAweDFjLCAweDBmLCAweDFjLCAKLTB4NDYsIDB4NDgsIDB4MDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjEsIDB4ZjksIDB4MWQsIDB4NTEsIDB4MzEsIAotMHhiZCwgMHg2NSwgMHgwMCwgMHg5MSwgMHgyMCwgMHgxYywgMHhmZCwgMHhmNywgMHg1ZCwgMHhmYywgMHhmOCwgMHg2ZCwgCi0weDQwLCAweDA5LCAweDM2LCAweGQyLCAweGI4LCAweDZkLCAweDA2LCAweDdiLCAweDQzLCAweDdiLCAweDFiLCAweDAyLCAKLTB4MWUsIDB4NDMsIDB4MTcsIDB4MjEsIDB4NDksIDB4MDIsIDB4MDEsIDB4NzMsIDB4MGIsIDB4MGEsIDB4NDMsIDB4NzMsIAotMHgwMCwgMHg5OSwgMHgyMCwgMHgxYywgMHhmZCwgMHhmNywgMHg0YywgMHhmYywgMHhiOCwgMHg2ZCwgMHhjMCwgMHg0NiwgCi0weDA2LCAweDczLCAweDMzLCAweDBhLCAweDQzLCAweDczLCAweGY4LCAweDZkLCAweDQwLCAweDA5LCAweDIwLCAweGQyLCAKLTB4NjAsIDB4NjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDMsIDB4OTgsIDB4MDEsIDB4ZjAsIDB4Y2MsIDB4ZmMsIAotMHg2MCwgMHg2OCwgMHgzMiwgMHg0YiwgMHgxOCwgMHg0MywgMHg2MCwgMHg2MCwgMHgyMCwgMHgxYywgMHgwMSwgMHhmMCwgCi0weDM1LCAweGZkLCAweDAwLCAweDI1LCAweDdkLCAweDYwLCAweGJkLCAweDYwLCAweDNkLCAweDY0LCAweDdkLCAweDY0LCAKLTB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzEsIDB4ZmYsIDB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIAotMHgzOCwgMHg4MCwgMHg3ZCwgMHg2MiwgMHgyOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHgzOCwgMHgxYywgCi0weDAwLCAweGYwLCAweGEwLCAweGZiLCAweDQ0LCAweGUwLCAweDIwLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4MDgsIDB4MzgsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjQsIDB4NjAsIDB4NjgsIAotMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg3OCwgMHg2ZSwgMHgwMSwgMHgyNiwgMHhjMSwgMHgxZCwgMHgwZCwgMHgzMSwgCi0weDhhLCAweDQyLCAweDAyLCAweGQyLCAweDNhLCAweDY0LCAweDA4LCAweDFjLCAweDBlLCAweGUwLCAweDQxLCAweDE5LCAKLTB4ODksIDB4ODksIDB4ZjAsIDB4MjMsIDB4MTksIDB4NDAsIDB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsIAotMHhmOCwgMHg2MCwgMHhmOSwgMHg2MSwgMHg2MSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg4MSwgMHg0MiwgCi0weDE2LCAweGQyLCAweDM5LCAweDY0LCAweDYzLCAweDY4LCAweDE5LCAweDA0LCAweDA5LCAweDBjLCAweDQwLCAweDFhLCAKLTB4MDMsIDB4MzAsIDB4ODAsIDB4MDgsIDB4ODIsIDB4MDAsIDB4YTAsIDB4NjEsIAotMHgyMCwgMHg2OCwgMHgwOSwgMHgxOCwgMHg5YiwgMHgxOCwgMHg2MywgMHg2MCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgCi0weDM4LCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGZhLCAweDdlLCAweDgwLCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAKLTB4YmYsIDB4ZmIsIDB4MGIsIDB4ZTAsIDB4YjksIDB4NjgsIDB4MDgsIDB4MWEsIDB4MDAsIDB4MjUsIDB4NzgsIDB4NjIsIAotMHhiZCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzYywgMHhmYywgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywgCi0weDAwLCAweGYwLCAweDY0LCAweGY4LCAweDA1LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4YzAsIAotMHhmMCwgMHhiNSwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHg2YywgMHhmOSwgMHg2YiwgMHgwZCwgMHgxOCwgCi0weDIxLCAweDY4LCAweDQxLCAweDE4LCAweDAwLCAweDIwLCAweGEyLCAweDY5LCAweDAwLCAweDJhLCAweDBiLCAweGQ5LCAKLTB4ODIsIDB4MDAsIDB4NTYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIAotMHhjMCwgMHg0NiwgMHhhYiwgMHg1MCwgMHhhMiwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4MiwgMHg0MiwgMHhmMywgMHhkOCwgCi0weDc4LCAweDZlLCAweGY5LCAweDZiLCAweDA5LCAweDE4LCAweDg5LCAweDg5LCAweGYwLCAweDIzLCAweDE5LCAweDQwLCAKLTB4MDksIDB4MDksIDB4ODksIDB4MDAsIDB4NDAsIDB4MTgsIDB4ZjgsIDB4NjAsIDB4ZjksIDB4NjEsIDB4MjAsIDB4NjgsIAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMSwgMHg2OCwgMHg3OCwgMHg2YywgCi0weGZjLCAweGY3LCAweDk1LCAweGZmLCAweDc4LCAweDY0LCAweDYwLCAweDY4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAKLTB4ZjgsIDB4NjgsIDB4ODEsIDB4NDIsIDB4MTksIDB4ZDIsIDB4MzksIDB4NjQsIDB4NjMsIDB4NjgsIDB4MTksIDB4MDQsIAotMHgwOSwgMHgwYywgMHg0MCwgMHgxYSwgMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MiwgMHgwMCwgMHhhMCwgMHg2MSwgCi0weDIwLCAweDY4LCAweDA5LCAweDE4LCAweDliLCAweDE4LCAweDYzLCAweDYwLCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAKLTB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTYsIDB4ZmEsIDB4MDEsIDB4MjAsIDB4NzgsIDB4ODAsIDB4MjAsIDB4MWMsIAotMHgwMCwgMHhmMCwgMHg1ZSwgMHhmYiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiOSwgMHg2OCwgCi0weDA4LCAweDFhLCAweDc4LCAweDYyLCAweDAwLCAweDIwLCAweGI4LCAweDYyLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAKLTB4ZDksIDB4ZmIsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MDEsIDB4ZjgsIDB4ZWYsIDB4ZTcsIAotMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHg4ZSwgMHg0OCwgMHg0MSwgMHg2OSwgCi0weDAxLCAweDMxLCAweDQxLCAweDYxLCAweDAzLCAweDIwLCAweDAwLCAweDA3LCAweDYxLCAweDY4LCAweDA4LCAweDQwLCAKLTB4MDYsIDB4MGYsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4NjgsIDB4MTEsIDB4MTgsIDB4ZmIsIDB4NjgsIAotMHhkMiwgMHgxYSwgMHg3YiwgMHg2OCwgMHg5ZCwgMHgxYSwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgzOCwgMHgxYywgCi0weDJhLCAweDFjLCAweDAwLCAweGYwLCAweDI2LCAweGZhLCAweDAwLCAweDIwLCAweDc4LCAweDgwLCAweDIwLCAweDFjLCAKLTB4MDAsIDB4ZjAsIDB4MmUsIDB4ZmIsIDB4NjAsIDB4NjgsIDB4NDAsIDB4MTksIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIAotMHg2MCwgMHg2MCwgMHgzMCwgMHgxYywgMHgwMSwgMHhmMCwgMHhlMCwgMHhmYiwgMHg3ZCwgMHg0ZSwgMHgwYiwgMHgyMywgCi0weDFiLCAweDAyLCAweGYwLCAweDE4LCAweDAwLCAweDY5LCAweDAwLCAweDI4LCAweDE5LCAweGQwLCAweDAwLCAweDI1LCAKLTB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MTIsIDB4ZDAsIAotMHhhYSwgMHgwMCwgMHg5MiwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwgMHhkMiwgMHg2OCwgCi0weDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAxLCAweGYwLCAweDFjLCAweGZlLCAweDAxLCAweDM1LCAweGE4LCAweDAwLCAKLTB4ODAsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIAotMHhlYywgMHhkMSwgMHhmOCwgMHg2YiwgMHgwMSwgMHgxZiwgMHg4YSwgMHgxYywgMHhmYSwgMHg2MywgMHhmYSwgMHg2OCwgCi0weDdkLCAweDZjLCAweDAwLCAweGYwLCAweGJiLCAweGY5LCAweGMwLCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAKLTB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTAsIDB4ZmYsIDB4MDMsIDB4OTAsIDB4ZjksIDB4NmIsIDB4M2EsIDB4NmUsIAotMHg4ZSwgMHgxOCwgMHgyMCwgMHg2OCwgMHgxMiwgMHgxOCwgMHgwMSwgMHg5MiwgMHg3YSwgMHg2ZSwgMHg4ZCwgMHgxOCwgCi0weDExLCAweDE4LCAweDAyLCAweDkxLCAweGM4LCAweDFkLCAweDA5LCAweDMwLCAweGUwLCAweDYwLCAweGIxLCAweDg4LCAKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MDQsIAotMHgwMCwgMHgwYywgMHg3OCwgMHg2MSwgMHg2OCwgMHg2OCwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwgCi0weDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLCAweDAyLCAweDQwLCAKLTB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDgsIDB4NDMsIDB4MzgsIDB4NjEsIDB4YTgsIDB4ODksIAotMHgwOSwgMHgyMywgMHgxYiwgMHgwMiwgMHgxOCwgMHg0MCwgMHhiOCwgMHg2MSwgCi0weGE4LCAweDg5LCAweDk4LCAweDQzLCAweGE4LCAweDgxLCAweGE4LCAweDg5LCAweDAyLCAweDk5LCAweGMwLCAweDQ2LCAKLTB4ODgsIDB4ODEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4ODAsIDB4YjAsIDB4ODAsIDB4NzAsIDB4ODEsIDB4NjgsIDB4NjAsIAotMHgyOCwgMHg4MiwgMHhiOSwgMHg2ZSwgMHgzMCwgMHgxYywgMHhmYywgMHhmNywgMHhlOCwgMHhmZSwgMHgzOCwgMHg4NiwgCi0weGZhLCAweDY5LCAweDMwLCAweDFjLCAweDI5LCAweDFjLCAweGZjLCAweGY3LCAweDAzLCAweGZmLCAweDc4LCAweDg2LCAKLTB4M2QsIDB4OGUsIDB4NzgsIDB4OGUsIDB4MDMsIDB4OTksIDB4ZmMsIDB4ZjcsIDB4YzgsIDB4ZmUsIDB4MDAsIDB4OTAsIAotMHg2MCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgzOSwgMHg2ZSwgMHg0MSwgMHgxYSwgMHgwOSwgMHgwNCwgCi0weDA5LCAweDBjLCAweDdhLCAweDZlLCAweDgyLCAweDFhLCAweDEzLCAweDA0LCAweDFiLCAweDBjLCAweDFhLCAweDAyLCAKLTB4MWIsIDB4MGEsIDB4MWEsIDB4NDMsIDB4MTYsIDB4MDQsIDB4MzYsIDB4MGMsIDB4YmEsIDB4NjgsIDB4ODIsIDB4NDIsIAotMHgwMSwgMHhkMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgxMCwgMHgxYSwgMHhiOCwgMHg2MCwgMHgwOCwgMHgwMiwgCi0weDA5LCAweDEyLCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAKLTB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4YTMsIDB4ZmUsIAotMHgwNSwgMHgxYywgMHgwMCwgMHg5OCwgMHgzMSwgMHgxYywgMHhmYywgMHhmNywgMHg5ZSwgMHhmZSwgMHgwNiwgMHgxYywgCi0weDc4LCAweDY5LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDAxLCAweDAyLCAweDAwLCAweDBhLCAweDA4LCAweDQzLCAKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4ODAsIDB4MjgsIDB4MWMsIAotMHhmYywgMHhmNywgMHg4ZiwgMHhmZSwgMHg3OSwgMHg2OSwgMHgwMSwgMHgzMSwgMHhjMCwgMHg0MywgMHg3OSwgMHg2MSwgCi0weDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDgxLCAweDM4LCAweDY5LCAweDAxLCAweDBlLCAweGZmLCAweDIyLCAKLTB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMSwgMHg0MywgMHgzMCwgMHgxYywgCi0weGZjLCAweGY3LCAweDc3LCAweGZlLCAweDM5LCAweDY5LCAweDdhLCAweDY4LCAweDg5LCAweDE4LCAweDM5LCAweDYxLCAKLTB4YjksIDB4NjgsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDEsIDB4MDIsIDB4OTksIDB4ODksIDB4ODksIDB4YmEsIDB4NjksIAotMHgxMSwgMHg0MywgMHgwMiwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MSwgMHg4MSwgMHhiOSwgMHg2OSwgMHhmYywgMHhmNywgCi0weDY2LCAweGZlLCAweDIwLCAweDgyLCAweDAwLCAweDIwLCAweDYwLCAweDgyLCAweGY4LCAweDZkLCAweDQxLCAweDA4LCAKLTB4MTYsIDB4ZDMsIDB4ODAsIDB4MGEsIDB4MGEsIDB4ZDMsIDB4NjAsIDB4NjgsIDB4MTAsIDB4MzgsIDB4MDEsIDB4MDQsIAotMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwgCi0weDA4LCAweDgyLCAweDA5LCAweGUwLCAweDYwLCAweDY4LCAweDBjLCAweDM4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAKLTB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ODgsIDB4ODEsIAotMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYxLCAweGI1LCAweDg0LCAweGIwLCAweDZlLCAweDRkLCAweDI4LCAweDY5LCAKLTB4MDEsIDB4MjIsIDB4MDQsIDB4OTksIDB4OGEsIDB4NDAsIDB4OTAsIDB4NDMsIDB4MjgsIDB4NjEsIDB4MDQsIDB4OTgsIAotMHg0MywgMHgwMSwgMHgxOCwgMHgxYSwgMHg4MCwgMHgwMCwgMHgxNiwgMHgxYywgMHg2OSwgMHg0OSwgMHg0NCwgMHgxOCwgCi0weGUwLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweGEwLCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQxLCAKLTB4MDAsIDB4MjYsIDB4MjYsIDB4ZTAsIDB4NjUsIDB4NDgsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjEsIAotMHgwNCwgMHg5OCwgMHhmYywgMHhmNywgMHgwOSwgMHhmZCwgMHgwNywgMHgxYywgMHgwMywgMHhkMSwgMHgyOCwgMHg2OSwgCi0weDMwLCAweDQzLCAweDI4LCAweDYxLCAweGI1LCAweGUwLCAweGEwLCAweDY4LCAweDY1LCAweDY4LCAweGE4LCAweDQyLCAKLTB4MDAsIDB4ZDIsIDB4MDUsIDB4MWMsIDB4YTEsIDB4NmMsIDB4YTksIDB4NDIsIDB4MTYsIDB4ZDIsIDB4NDAsIDB4MWEsIAotMHg2MiwgMHg2YSwgMHgxMCwgMHgxYSwgMHgwMCwgMHgyNiwgMHg2MCwgMHg2MiwgMHhhNiwgMHg2MCwgMHhhNiwgMHg2MiwgCi0weDIwLCAweDg4LCAweDQ4LCAweDIzLCAweDE4LCAweDQzLCAweDIwLCAweDgwLCAweDBkLCAweDFjLCAweDA5LCAweGQxLCAKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MTksIDB4ZmQsIDB4MDMsIDB4MjAsIDB4NjAsIDB4ODAsIDB4NjYsIDB4NjAsIAotMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg4ZCwgMHhmOSwgMHg5NiwgMHhlMCwgMHhlMSwgMHg2OCwgMHgzOCwgMHg2OCwgCi0weDA5LCAweDE4LCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDIwLCAweDFjLCAweDAyLCAweDM5LCAweDJhLCAweDFjLCAKLTB4MDAsIDB4ZjAsIDB4Y2QsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZDcsIDB4ZjksIDB4ZTAsIDB4NjgsIAotMHg0NiwgMHgxOSwgMHg3OCwgMHg2OCwgMHgzMCwgMHg0MywgMHg3OCwgMHg2MCwgMHgwNCwgMHg5OCwgMHgzMSwgMHgxYywgCi0weDAxLCAweGYwLCAweDg4LCAweGZhLCAweDIxLCAweDZlLCAweDAwLCAweDk4LCAKLTB4MDgsIDB4MTgsIDB4MDEsIDB4OTAsIDB4NzAsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NjEsIDB4NmUsIAotMHg3MSwgMHgxYSwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMSwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgCi0weDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAyLCAweDkxLCAweDAxLCAweDAyLCAweDAwLCAweDBhLCAweDA4LCAweDQzLCAKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODAsIDB4MjAsIDB4OGUsIAotMHhmYywgMHhmNywgMHhjYiwgMHhmZCwgMHgwNiwgMHgxYywgMHg2MCwgMHg4ZSwgMHgwMiwgMHg5OSwgMHhmYywgMHhmNywgCi0weGM2LCAweGZkLCAweDAzLCAweDkwLCAweDYwLCAweDY5LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDAyLCAKLTB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4OTgsIDB4YzAsIDB4NDYsIAotMHg4MSwgMHg4MCwgMHgzMCwgMHgxYywgMHhmYywgMHhmNywgMHhiNywgMHhmZCwgMHg2MSwgMHg2OSwgMHgwMSwgMHgzMSwgCi0weGMwLCAweDQzLCAweDYxLCAweDYxLCAweDAxLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDgxLCAweDYwLCAweDZlLCAKLTB4MDAsIDB4OTksIDB4NDYsIDB4MTgsIDB4MjAsIDB4NjksIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsIAotMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwgCi0weDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDAxLCAweDQzLCAweDcxLCAweDYwLCAweDAzLCAweDk4LCAKLTB4ZmMsIDB4ZjcsIDB4OWIsIDB4ZmQsIDB4MjEsIDB4NjksIDB4NDksIDB4MTksIDB4MjEsIDB4NjEsIDB4YTEsIDB4NjgsIAotMHg0OSwgMHgxYiwgMHhhMSwgMHg2MCwgMHgwNiwgMHhkMSwgMHhiMSwgMHg4OSwgMHhhMiwgMHg2OSwgMHgxMSwgMHg0MywgCi0weGIxLCAweDgxLCAweGExLCAweDY5LCAweGZjLCAweGY3LCAweDhkLCAweGZkLCAweDM4LCAweDgyLCAweDYxLCAweDZlLCAKLTB4MzgsIDB4NjgsIDB4MDksIDB4MTgsIDB4MGUsIDB4MzEsIDB4ZjksIDB4NjAsIDB4ZTIsIDB4NjgsIDB4MDAsIDB4OTksIAotMHgwNCwgMHgzOCwgMHgwMCwgMHhmMCwgMHg0YywgMHhmOCwgMHgwMiwgMHgyMCwgMHg3OCwgMHg4MiwgMHhlMCwgMHg2ZCwgCi0weDQxLCAweDA4LCAweDE2LCAweGQzLCAweDgwLCAweDBhLCAweDBhLCAweGQzLCAweDc4LCAweDY4LCAweDEwLCAweDM4LCAKLTB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MzksIDB4NjgsIAotMHhjMCwgMHg0NiwgMHhjOCwgMHg4MSwgMHgwOSwgMHhlMCwgMHg3OCwgMHg2OCwgMHgwYywgMHgzOCwgMHgwMSwgMHgwNCwgCi0weDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDM5LCAweDY4LCAweGMwLCAweDQ2LCAKLTB4NDgsIDB4ODEsIDB4MDUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgCi0weGY3LCAweGI1LCAweDAzLCAweDFjLCAweDBmLCAweDFjLCAweDAwLCAweDIwLCAweDFjLCAweDY4LCAweDI2LCAweDA0LCAKLTB4MzEsIDB4MWMsIDB4MWQsIDB4MWQsIDB4ZmMsIDB4ZjcsIDB4NTEsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OWEsIAotMHhkMSwgMHgxYywgMHg4OSwgMHgwOCwgMHgwMSwgMHgzOSwgMHg0YSwgMHgxZSwgMHgwMiwgMHg5MiwgMHgwMCwgMHgyOSwgCi0weDBkLCAweGQwLCAweDIxLCAweDBjLCAweDEwLCAweGNkLCAweDIyLCAweDA0LCAweDBhLCAweDQzLCAweDExLCAweDFjLCAKLTB4MTYsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4NDAsIDB4ZmQsIDB4NDAsIDB4YzcsIDB4MDIsIDB4OTksIDB4NGEsIDB4MWUsIAotMHgwMiwgMHg5MiwgMHgwMCwgMHgyOSwgMHhmMSwgMHhkMSwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDg5LCAweDA4LCAweDg5LCAweDAwLCAweDAzLCAweDMyLCAKLTB4OTMsIDB4MDgsIDB4NWEsIDB4MWUsIDB4MDAsIDB4MmIsIDB4MDUsIDB4ZDAsIDB4MDgsIDB4YzksIDB4MDgsIDB4YzAsIAotMHgxMywgMHgxYywgMHgwMSwgMHgzYSwgMHgwMCwgMHgyYiwgMHhmOSwgMHhkMSwgMHg3MCwgMHg0NywgMHhmZiwgMHhiNSwgCi0weDg2LCAweGIwLCAweDE3LCAweDFjLCAweDAwLCAweDI2LCAweDA2LCAweDk4LCAweDgwLCAweDZjLCAweGMwLCAweDFiLCAKLTB4MDYsIDB4OTksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjQsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MDYsIDB4OTksIAotMHg4OSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwgMHgwNiwgMHg5OSwgMHg0YywgMHg2YiwgMHg2NywgMHhlMCwgCi0weDIxLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkxLCAweDYxLCAweDY4LCAweGMwLCAweDQ2LCAweDAzLCAweDkxLCAKLTB4YTEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTEsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsIDB4YjksIDB4NDIsIAotMHgwOCwgMHhkMiwgMHgwMiwgMHhhZCwgMHg2ZCwgMHg4OCwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwgMHg3ZiwgMHgxYSwgCi0weDAwLCAweDIxLCAweDAyLCAweGFiLCAweDU5LCAweDgwLCAweDE5LCAweGUwLCAweDAyLCAweGE5LCAweDQ5LCAweDg4LCAKLTB4YzksIDB4MWIsIDB4MDIsIDB4YWIsIDB4NTksIDB4ODAsIDB4M2QsIDB4MWMsIDB4MDAsIDB4MjcsIDB4MDEsIDB4MjEsIAotMHg0OSwgMHgwNiwgMHgwNywgMHg5YiwgMHg5YSwgMHgwNywgMHg5MiwgMHgwZiwgMHgwZCwgMHhkMCwgMHhlYiwgMHgwNiwgCi0weGRiLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDJiLCAweDA4LCAweGQzLCAweDFlLCAweDJiLCAweDAyLCAweGQxLCAKLTB4MDMsIDB4MmEsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MmEsIAotMHgwMSwgMHhkMywgMHgwMSwgMHgyNiwgMHgwMCwgMHgyMSwgMHgyOSwgMHg0MywgMHgwMSwgMHg0MywgMHgwYSwgMHgxYywgCi0weDAwLCAweDkxLCAweDAwLCAweDIwLCAweDAzLCAweDk5LCAweDA0LCAweDlhLCAweDA3LCAweDliLCAweDAxLCAweGYwLCAKLTB4NWIsIDB4ZmYsIDB4MDcsIDB4OTksIDB4NDksIDB4MTksIDB4MDcsIDB4OTEsIDB4MDAsIDB4MmUsIDB4MGEsIDB4ZDAsIAotMHgxZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgxZCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgCi0weDAwLCAweDIwLCAweDA3LCAweDliLCAweDAxLCAweGYwLCAweDRjLCAweGZmLCAweDAwLCAweDI2LCAweDAyLCAweGE4LCAKLTB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDAsIDB4MDMsIDB4OTgsIDB4NDAsIDB4MTksIDB4MDMsIDB4OTAsIAotMHgwMiwgMHg5OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MCwgMHgwMywgMHg5OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MCwgCi0weDA0LCAweDk4LCAweGMwLCAweDQ2LCAweGEwLCAweDYwLCAweDAzLCAweGUwLCAweDAxLCAweDk4LCAweDAxLCAweDM4LCAKLTB4MDEsIDB4OTAsIDB4MTAsIDB4MzQsIDB4MDYsIDB4OTgsIDB4YzAsIDB4NDYsIDB4NDQsIDB4NjMsIDB4MDEsIDB4OTgsIAotMHgwNiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MywgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwMiwgMHhkMCwgCi0weDAxLCAweDk5LCAweDAwLCAweDI5LCAweDkyLCAweGQxLCAweDA5LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAKLTB4MDYsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDksIDB4OWIsIDB4MDEsIDB4ZjAsIAotMHgxZiwgMHhmZiwgMHgwYSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgCi0weDAxLCAweDAwLCAweDAwLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDUzLCAweDAyLCAKLTB4OTAsIDB4YjUsIDB4MGMsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MzgsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIAotMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMSwgMHg2OCwgMHgzOCwgMHg4YSwgMHhmYywgMHhmNywgMHg4NSwgMHhmYywgCi0weGMwLCAweDQzLCAweGY5LCAweDY4LCAweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDc4LCAweDhhLCAweDM5LCAweDY4LCAKLTB4MDgsIDB4MWEsIDB4MzgsIDB4NjAsIDB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4OGIsIDB4ZjksIDB4MzgsIDB4MWMsIAotMHhmYywgMHhmNywgMHg4YywgMHhmYiwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzMywgMHhmZSwgMHg5MCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDAxLCAweDg4LCAweDhhLCAweDA5LCAweDIxLCAweGQzLCAKLTB4Y2EsIDB4MDksIDB4MWYsIDB4ZDIsIDB4OGEsIDB4MDgsIDB4MWQsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4ODAsIAotMHg0MSwgMHg4MCwgMHg0NywgMHg2ZiwgMHg0MCwgMHg2ZCwgMHhmYSwgMHgxZCwgMHgxOSwgMHgzMiwgMHg1MSwgMHg3MSwgCi0weGZhLCAweDZkLCAweGMwLCAweDQ2LCAweDEwLCAweDYwLCAweDNhLCAweDZlLCAweGMwLCAweDQ2LCAweDEwLCAweDYwLCAKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjMsIDB4YzEsIDB4NmIsIDB4NDksIDB4MDgsIDB4NDksIDB4MDAsIAotMHhjMSwgMHg2MywgMHgwMSwgMHgyMCwgMHgwMCwgMHhmMCwgMHhjYywgMHhmZiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgCi0weDZiLCAweGZmLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweDIzLCAweDE5LCAweDQzLCAKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4NDksIDB4MDksIDB4ZjYsIDB4ZDIsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjgsIAotMHhmMywgMHhlNywgMHgwMCwgMHgwMCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgCi0weDEwLCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDI0LCAweDVlLCAweDFlLCAweDAwLCAweDJiLCAweDE5LCAweGQwLCAKLTB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4NDEsIDB4ODgsIDB4MGMsIDB4MTksIDB4NDEsIDB4NjgsIAotMHhjMCwgMHg0NiwgMHg3OSwgMHg2MCwgMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MCwgMHhjMSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDEwLCAweDMwLCAweDEwLCAweDM3LCAweGU5LCAweDZhLCAweDgxLCAweDQyLCAKLTB4MDIsIDB4ZDgsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZWMsIDB4ZmYsIDB4MzEsIDB4MWMsIDB4MDEsIDB4M2UsIAotMHgwMCwgMHgyOSwgMHhlNSwgMHhkMSwgMHgyMCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDAwLCAweDIxLCAweGMxLCAweDYxLCAweDA1LCAweDQ5LCAweDBhLCAweDY4LCAweDAwLCAweDJhLCAweDAxLCAweGQxLCAKLTB4MDgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4NGEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDAsIDB4NjEsIDB4NDgsIDB4NjAsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHgwMywgMHg0OSwgMHgwOCwgMHg2OCwgCi0weDAwLCAweDI4LCAweDAyLCAweGQwLCAweGMyLCAweDY5LCAweGMwLCAweDQ2LCAweDBhLCAweDYwLCAweDcwLCAweDQ3LCAKLTB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4ODEsIDB4NjcsIDB4MDUsIDB4NDksIDB4OGEsIDB4NjgsIAotMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwgMHg4OCwgMHg2MCwgMHgwMiwgMHhlMCwgMHhjYSwgMHg2OCwgMHhjMCwgMHg0NiwgCi0weDkwLCAweDY3LCAweGM4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGQwLCAweDJjLCAweDAwLCAweDgwLCAKLTB4MDMsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4ODIsIDB4NmYsIDB4YzAsIDB4NDYsIAotMHg4YSwgMHg2MCwgMHg3MCwgMHg0NywgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgCi0weDAwLCAweGI1LCAweDgwLCAweDIwLCAweDEzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGZmLCAweGY3LCAKLTB4ZDUsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MWIsIDB4ZDAsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NDEsIDB4NjgsIAotMHgxOSwgMHg0MCwgMHgwYSwgMHgwZiwgMHg1MSwgMHgwMSwgMHg4OSwgMHgxYSwgMHg4OSwgMHgwMCwgMHgwZCwgMHg0YiwgCi0weGM5LCAweDE4LCAweDRiLCAweDg4LCAweDAwLCAweDJiLCAweDA0LCAweGQxLCAweDExLCAweDFjLCAweGZmLCAweGY3LCAKLTB4M2IsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4ZmYsIDB4ZjcsIAotMHgwNSwgMHhmYywgMHhmOCwgMHhlNywgMHgwMiwgMHgyYiwgMHhmNiwgMHhkMSwgMHhmZiwgMHhmNywgMHg0ZSwgMHhmYiwgCi0weGYzLCAweGU3LCAweDA0LCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweGVlLCAweGU3LCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIAotMHgwMCwgMHhiNSwgMHgyMCwgMHgyMCwgMHgwZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmZiwgMHhmNywgCi0weGJmLCAweGZmLCAweDAwLCAweDI4LCAweDBlLCAweGQwLCAweDAxLCAweDg4LCAweDIwLCAweDIzLCAweDE5LCAweDQzLCAKLTB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIDB4MTAsIDB4MjMsIDB4OTksIDB4NDMsIDB4MDEsIDB4ODAsIDB4MDEsIDB4ODgsIAotMHgwOSwgMHgwYSwgMHgwMSwgMHhkMywgMHhmZiwgMHhmNywgMHgyZSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDAzLCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweGY4LCAweGU3LCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4OTgsIDB4YjUsIDB4MDcsIDB4MWMsIAotMHgyMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgyMiwgMHg0OCwgMHhjMywgMHgxZCwgMHg0MSwgMHgzMywgCi0weDQxLCAweDZkLCAweDgyLCAweDZkLCAweDgwLCAweDZjLCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDljLCAweDY4LCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4OTgsIDB4NDIsIDB4MDAsIDB4ZDEsIAotMHgwYywgMHhlMCwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgxMCwgMHgxYSwgMHg1OSwgMHgxYSwgMHg0MSwgMHgxOCwgCi0weDAwLCAweGUwLCAweDE5LCAweDFhLCAweDAxLCAweDIwLCAweDEwLCAweDI5LCAweDAwLCAweGQ4LCAweDAwLCAweDIwLCAKLTB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsIDB4NzgsIDB4NmEsIDB4ZjksIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIAotMHhiOCwgMHg2YSwgMHhmOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MCwgMHgxMCwgMHg0YSwgMHhjMCwgMHg0NiwgCi0weDAwLCAweDkyLCAweGZiLCAweDZhLCAweDBmLCAweDQ4LCAweDQyLCAweDZkLCAweDAzLCAweDIwLCAweDM5LCAweDZhLCAKLTB4MDEsIDB4ZjAsIDB4ZTIsIDB4ZmQsIDB4MzgsIDB4ODgsIDB4MTAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsIAotMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywgMHg5OCwgMHg0MywgMHgzOCwgMHg4MCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgCi0weDU1LCAweGZmLCAweDk4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDM4LCAweDg4LCAweDQwLCAweDIzLCAKLTB4MTgsIDB4NDMsIDB4MzgsIDB4ODAsIDB4ZjcsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIAotMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwOCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgCi0weGIwLCAweGI1LCAweDQwLCAweDIwLCAweDJjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAwLCAweGYwLCAKLTB4ZmQsIDB4ZmUsIDB4MDcsIDB4MWMsIDB4NDAsIDB4NjgsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsIAotMHgwNSwgMHgwZiwgMHg2OCwgMHgwMSwgMHg0MCwgMHgxYiwgMHg4MCwgMHgwMCwgMHgyNiwgMHg0OSwgMHg0NCwgMHgxOCwgCi0weDIwLCAweDg4LCAweDAyLCAweDIzLCAweDE4LCAweDQzLCAweDIwLCAweDgwLCAweDIwLCAweDg4LCAweDQxLCAweDA4LCAKLTB4MzQsIDB4ZDMsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YTAsIDB4NmMsIDB4ZTEsIDB4NmMsIAotMHg0MCwgMHgxOCwgMHhhMCwgMHg2NCwgMHgwMCwgMHgyMCwgMHhlMCwgMHg2NCwgMHhhMSwgMHg2YiwgMHgyMiwgMHg2ZCwgCi0weDg5LCAweDE4LCAweGExLCAweDYzLCAweDIwLCAweDY1LCAweGI4LCAweDZhLCAweGMwLCAweDQ2LCAweDYwLCAweDY1LCAKLTB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NzgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4NzgsIDB4NjAsIDB4NjEsIDB4NjgsIAotMHgzNiwgMHgzMSwgMHg5NCwgMHgyOSwgMHgwNCwgMHhkOCwgMHgzOCwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MCwgCi0weDM4LCAweDIwLCAweDAzLCAweGUwLCAweDk0LCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYwLCAweDk0LCAweDIwLCAKLTB4YjgsIDB4NjEsIDB4MzksIDB4NjgsIDB4NzgsIDB4NjgsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MjAsIDB4MWMsIAotMHhjYiwgMHgxZiwgMHgwNSwgMHgzYiwgMHhmZiwgMHhmNywgMHhkNywgMHhmZCwgMHgwMiwgMHgyMCwgMHg2MCwgMHg4MCwgCi0weDM4LCAweDFjLCAweGZmLCAweGY3LCAweGRmLCAweGZlLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MzgsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MDcsIDB4ZmEsIDB4MjgsIDB4MDEsIDB4MDYsIDB4NDksIDB4NDAsIDB4MTgsIAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywgCi0weGVmLCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAKLTB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDAsIDB4MjcsIAotMHgwZiwgMHg0YywgMHgwZCwgMHhlMCwgMHg0MiwgMHg2YiwgMHgwMSwgMHgzYSwgMHg0MiwgMHg2MywgMHgwMCwgMHgyYSwgCi0weDA1LCAweGRjLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDQyLCAweDYzLCAweGMwLCAweDZhLCAweDAxLCAweGYwLCAKLTB4YzYsIDB4ZjksIDB4MDEsIDB4MzcsIDB4MGIsIDB4MmYsIDB4MDcsIDB4ZDIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTksIAotMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2YSwgMHgwMCwgMHgyOSwgMHhlOSwgMHhkMSwgCi0weDAxLCAweDIwLCAweDQwLCAweDA2LCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDkwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIAotMHgxMCwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgzMSwgMHhjMSwgMHg2MCwgMHgwZiwgMHg0OSwgMHhjOCwgMHg2OCwgCi0weDAxLCAweDI4LCAweDE3LCAweGQxLCAweGM4LCAweDFkLCAweDc5LCAweDMwLCAweDAyLCAweDg5LCAweDAwLCAweDJhLCAKLTB4MTIsIDB4ZDAsIDB4MDEsIDB4M2EsIDB4MDIsIDB4ODEsIDB4MDIsIDB4ODksIDB4MDAsIDB4MmEsIDB4MGQsIDB4ZDEsIAotMHg0MiwgMHg4OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHhkMSwgMHhjOSwgMHg2ZiwgMHgwMiwgMHgyMywgMHgwYSwgMHg2OCwgCi0weDFhLCAweDQzLCAweDBhLCAweDYwLCAweDA0LCAweDIxLCAweDAxLCAweDgxLCAweDAxLCAweDIxLCAweDAwLCAweGUwLCAKLTB4MDAsIDB4MjEsIDB4NDEsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgwMSwgMHgyMywgMHhmOCwgMHgxZCwgCi0weDY5LCAweDMwLCAweDAzLCAweDczLCAweDFlLCAweDQ4LCAweGMyLCAweDFkLCAweDc5LCAweDMyLCAweDU0LCAweDhhLCAKLTB4NjEsIDB4MWMsIDB4NTEsIDB4ODIsIDB4ZDUsIDB4OGEsIDB4MDAsIDB4MjEsIDB4YWMsIDB4NDIsIDB4MDQsIDB4ZGIsIAotMHhjNCwgMHgxZCwgMHg4OSwgMHgzNCwgMHg2MywgMHg3MCwgMHg1MSwgMHg4MiwgMHhkMSwgMHg4MywgMHgwMSwgMHgyMywgCi0weDliLCAweDA3LCAweDNhLCAweDZkLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweGMwLCAweDQ2LCAweGJhLCAweDYxLCAKLTB4ZmIsIDB4NjksIDB4OWEsIDB4NDIsIDB4MDYsIDB4ZDEsIDB4ZjgsIDB4NmMsIDB4MTIsIDB4NDksIDB4YzAsIDB4NDYsIAotMHgwOCwgMHg2MCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OSwgMHg2MSwgMHg0MSwgMHg2OSwgCi0weGZhLCAweDZjLCAweDkxLCAweDQzLCAweDQxLCAweDYxLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweGMxLCAweDYwLCAKLTB4MzgsIDB4NjksIDB4MDIsIDB4MjgsIDB4ZjEsIDB4ZDAsIDB4YjgsIDB4NjksIDB4ZjksIDB4NjksIDB4NDEsIDB4MWEsIAotMHgwMSwgMHhkNSwgMHg3OCwgMHg2ZCwgMHg0MSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwgCi0weGY5LCAweDY5LCAweDA5LCAweDE4LCAweGY5LCAweDYxLCAweDc4LCAweDZkLCAweDgxLCAweDQyLCAweGUyLCAweGQzLCAKLTB4MDgsIDB4MWEsIDB4ZjgsIDB4NjEsIDB4ZGYsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhmOCwgMHhiNSwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHhmZiwgMHgyMywgCi0weDIxLCAweDMzLCAweDlmLCAweDQyLCAweDAxLCAweGQ5LCAweGZmLCAweDI3LCAweDIxLCAweDM3LCAweGUxLCAweDZlLCAKLTB4MzgsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4Y2IsIDB4ZmMsIDB4MmQsIDB4NGQsIDB4MDAsIDB4MjgsIDB4MTMsIDB4ZDEsIAotMHhlMCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMSwgMHg3YSwgMHgwMSwgMHgyMywgMHgxOSwgMHg0MywgMHgwMSwgMHg3MiwgCi0weDI5LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDI5LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAKLTB4MDAsIDB4MjAsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsIDB4YjAsIDB4ZmMsIDB4MDAsIDB4MjAsIDB4ZjgsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMCwgMHg2OSwgMHgwMSwgMHgzMCwgMHgyMCwgMHg2MSwgMHgyMywgMHg0OSwgCi0weGM4LCAweDFkLCAweGI5LCAweDMwLCAweDAyLCAweDZiLCAweDkyLCAweDAwLCAweDUxLCAweDE4LCAweGMwLCAweDMxLCAKLTB4MGYsIDB4NjEsIDB4MDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODksIDB4MDcsIDB4ODksIDB4MGYsIDB4MDEsIDB4NjMsIAotMHgyMCwgMHg2YiwgMHhjMiwgMHgxOSwgMHg2MSwgMHg2ZCwgMHg4YSwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMywgMHgyMiwgCi0weDEyLCAweDA1LCAweDNhLCAweDQzLCAweDA1LCAweGUwLCAweDA5LCAweDFhLCAweDdlLCAweDFhLCAweDA3LCAweGQxLCAKLTB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsIDB4MDksIDB4MTgsIAotMHhhMiwgMHg2ZSwgMHgxMCwgMHhlMCwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwgCi0weDYxLCAweDZlLCAweDA5LCAweDE4LCAweDAwLCAweDIwLCAweGEyLCAweDZlLCAweDJiLCAweDFjLCAweDAxLCAweGYwLCAKLTB4N2QsIDB4ZmMsIDB4MjMsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MzIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NjEsIDB4NmUsIAotMHhhMiwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwgMHg3MywgMHhmYywgMHgyMCwgMHg2YiwgCi0weGMwLCAweDE5LCAweDAwLCAweDA5LCAweDAwLCAweDAxLCAweDYxLCAweDZkLCAweDgxLCAweDQyLCAweDAwLCAweGQ4LCAKLTB4NDAsIDB4MWEsIDB4MjAsIDB4NjMsIDB4MzgsIDB4MWMsIDB4YjgsIDB4ZTcsIAotMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxYiwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDAxLCAweDIwLCAweGMwLCAweDAzLCAweDBkLCAweDQ5LCAKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MGMsIDB4NDksIDB4YzgsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDIsIDB4N2EsIAotMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwgMHgwNywgMHg3MiwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywgCi0weDM3LCAweGZmLCAweDA4LCAweDQ5LCAweGM4LCAweDFkLCAweDQ5LCAweDMwLCAweDAyLCAweDdhLCAweDAwLCAweDJhLCAKLTB4MDMsIDB4ZDAsIDB4MDcsIDB4NzIsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MmQsIDB4ZmYsIDB4ODAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgCi0weGU0LCAweDJjLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDEwLCAweDIwLCAweDE4LCAweDQ5LCAKLTB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MzAsIDB4ZjgsIDB4NjAsIDB4MTYsIDB4NDgsIAotMHhjNCwgMHgxZCwgMHhiOSwgMHgzNCwgMHg2MSwgMHg2YiwgMHg4OSwgMHgwMCwgMHgwOSwgMHgxOCwgMHhjMCwgMHgzMSwgCi0weDA5LCAweDY5LCAweDdhLCAweDY4LCAweDkyLCAweDAwLCAweGQyLCAweDE5LCAweDUxLCAweDY0LCAweDYxLCAweDZiLCAKLTB4ODksIDB4MDAsIDB4MDgsIDB4MTgsIDB4YzAsIDB4MzAsIDB4MDEsIDB4NjksIDB4NzgsIDB4NjgsIDB4ODAsIDB4MDAsIAotMHhjMCwgMHgxOSwgMHhjMCwgMHg2YiwgMHgwMSwgMHhmMCwgMHhhMiwgMHhmYSwgMHgwMSwgMHgyMywgMHg3OCwgMHg2OCwgCi0weDU4LCAweDQwLCAweDc4LCAweDYwLCAweDYwLCAweDZiLCAweDAxLCAweDMwLCAweDgwLCAweDA3LCAweDgwLCAweDBmLCAKLTB4NjAsIDB4NjMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsIDB4NDAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNywgMHhmOCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAKLTB4MzksIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NjgsIAotMHg4MCwgMHgwOSwgMHgwMSwgMHhkMywgMHgwMiwgMHgyMCwgMHgwMCwgMHhlMCwgMHg3OCwgMHg2ZiwgMHhmYywgMHhmNywgCi0weDU5LCAweGY4LCAweDA0LCAweDFjLCAweDA2LCAweGQxLCAweDAxLCAweDIwLCAweGY5LCAweDFkLCAweDE5LCAweDMxLCAKLTB4MDgsIDB4NzEsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjgsIDB4NmMsIDB4MmYsIDB4NDksIAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhiYSwgMHg2YSwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHgwMCwgMHhmMCwgCi0weDU5LCAweGY4LCAweDY3LCAweDYyLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAKLTB4MGIsIDB4ZmQsIDB4ZWMsIDB4ZTcsIDB4ZjksIDB4NmQsIDB4MDksIDB4NjgsIDB4MDksIDB4MTgsIDB4MDksIDB4MDksIAotMHgwOSwgMHgwMSwgMHg3YSwgMHg2ZCwgMHg4YSwgMHg0MiwgMHgwMCwgMHhkOCwgMHg4OSwgMHgxYSwgMHhhMSwgMHg2MiwgCi0weGI5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweDRhLCAweDZjLCAweDAwLCAweDJhLCAweDA3LCAweGQwLCAKLTB4NGEsIDB4NmMsIDB4MTIsIDB4MWEsIDB4NGEsIDB4NjQsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4YjksIDB4NmEsIAotMHgwOCwgMHgxOCwgMHhiOCwgMHg2MiwgMHgzOCwgMHg2OCwgMHhiOSwgMHg2YSwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwgCi0weDQyLCAweDZiLCAweDkxLCAweDQyLCAweDBlLCAweGQzLCAweDAwLCAweDIxLCAweDQxLCAweDY0LCAweGI4LCAweDZhLCAKLTB4MzksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4NDksIDB4NmIsIDB4NDAsIDB4MWEsIDB4YjgsIDB4NjIsIAotMHhiOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHhjOSwgMHg2YiwgMHg0MCwgMHgxOCwgMHhiOCwgMHg2MiwgCi0weGI4LCAweDY4LCAweDgxLCAweDAwLCAweGM5LCAweDE5LCAweDQ5LCAweDZjLCAweDAwLCAweDI5LCAweGI4LCAweGQxLCAKLTB4YjksIDB4NmEsIDB4ZmEsIDB4NmIsIDB4OTEsIDB4NDIsIDB4YjQsIDB4ZDAsIDB4M2EsIDB4NmMsIDB4OTEsIDB4NDIsIAotMHhiMSwgMHhkMCwgMHgwMSwgMHgyMywgMHg1OCwgMHg0MCwgMHhiOCwgMHg2MCwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwgCi0weGMwLCAweDZiLCAweGMwLCAweDQ2LCAweGI4LCAweDYyLCAweGY4LCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQwLCAKLTB4MDEsIDB4MzgsIDB4ZjgsIDB4NjAsIDB4MzgsIDB4NjksIDB4MDAsIDB4MjgsIDB4YTEsIDB4ZDAsIDB4MDEsIDB4MzgsIAotMHgzOCwgMHg2MSwgMHg5ZSwgMHhlNywgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgCi0weGY3LCAweGI1LCAweDkwLCAweGIwLCAweDA0LCAweDFjLCAweDBkLCAweDFjLCAweDAwLCAweDIwLCAweDA1LCAweDkwLCAKLTB4MDIsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MDEsIDB4OTIsIDB4ZjksIDB4NDgsIDB4YzAsIDB4NmEsIDB4YzAsIDB4NDYsIAotMHhhOCwgMHg2MSwgMHhhMCwgMHg2OCwgMHg4MSwgMHgwMCwgMHgwOSwgMHgxOSwgMHg0OSwgMHg2YiwgMHhjMCwgMHg0NiwgCi0weDIwLCAweDYwLCAweGUxLCAweDYyLCAweDEyLCAweDlhLCAweGQwLCAweDY4LCAweGMwLCAweDQ2LCAweGE4LCAweDYwLCAKLTB4MTIsIDB4OWEsIDB4NTEsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MGMsIDB4OTEsIDB4ZjAsIDB4NDgsIDB4YzAsIDB4NDYsIAotMHgwMywgMHg5MCwgMHhkNywgMHgxZCwgMHgwOSwgMHgzNywgMHhlMCwgMHg2YSwgCi0weGMxLCAweDFiLCAweDA5LCAweDA5LCAweGUzLCAweDFkLCAweDE5LCAweDMzLCAweDBjLCAweDlhLCAweGMwLCAweDQ2LCAKLTB4MGYsIDB4OTMsIDB4ZWIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MGUsIDB4OTMsIDB4OTEsIDB4NDIsIDB4MDEsIDB4ZDMsIAotMHhiOCwgMHg0MiwgMHgyMSwgMHhkOCwgMHhlMSwgMHg2OCwgMHgwMiwgMHgyOSwgMHgxZSwgMHhkMiwgMHgwMSwgMHgyMCwgCi0weDBmLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcxLCAweDAwLCAweDIwLCAweDAzLCAweDk5LCAweDAxLCAweGYwLCAKLTB4NTcsIDB4ZmIsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsIDB4MDEsIDB4MzAsIAotMHhkOCwgMHg2MywgMHgwMSwgMHgyMCwgMHg4MCwgMHgwNiwgMHgwMCwgMHgyNywgMHg2OCwgMHg2MCwgMHhhZiwgMHg2MSwgCi0weGRkLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweGRkLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAKLTB4ZGMsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4M2EsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4NWMsIDB4ZTMsIAotMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYywgMHgwNywgMHgxYywgCi0weGQ3LCAweDQ4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDY0LCAweGQwLCAweDM4LCAweDc4LCAweDQwLCAweDA3LCAKLTB4NDAsIDB4MGYsIDB4MDMsIDB4MjgsIDB4NjAsIDB4ZDEsIDB4MDUsIDB4OTgsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIAotMHgwMCwgMHgwZSwgMHgwNSwgMHg5MCwgMHgzOCwgMHg3OCwgMHhmMCwgMHgyMywgMHgxOCwgMHg0MCwgMHg1OCwgMHhkMSwgCi0weGUwLCAweDZhLCAweGMwLCAweDFiLCAweDAwLCAweDA5LCAweDBjLCAweDk5LCAweDg4LCAweDQyLCAweDAyLCAweGQyLCAKLTB4ZTAsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MDUsIDB4ZDMsIDB4Y2IsIDB4NDksIDB4ODgsIDB4NjgsIDB4MDAsIDB4ZjAsIAotMHg4MywgMHhmZiwgMHgwNiwgMHgxYywgMHgwNiwgMHhkMSwgMHgwMywgMHg5YiwgMHgyOCwgMHgxYywgMHgzOSwgMHgxYywgCi0weDIyLCAweDFjLCAweDAwLCAweGYwLCAweDhiLCAweGZjLCAweDE2LCAweGUxLCAweDJlLCAweDYyLCAweGY4LCAweDY4LCAKLTB4MDAsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4YjgsIDB4ODksIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4YzEsIDB4NDksIAotMHhjOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg3MCwgMHhmZiwgMHhmOCwgMHg4OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgCi0weGJkLCAweDQ5LCAweGM5LCAweDY4LCAweDAwLCAweGYwLCAweDY5LCAweGZmLCAweDdhLCAweDY4LCAweGMwLCAweDQ2LCAKLTB4NzIsIDB4NjEsIDB4YjksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjEsIDB4NjEsIDB4MzAsIDB4MWMsIDB4YjgsIDB4NDksIAotMHgwOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg1ZSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgxNywgMHhkMSwgMHgzMCwgMHgxYywgCi0weGI0LCAweDQ5LCAweDQ5LCAweDY4LCAweDAwLCAweGYwLCAweDU3LCAweGZmLCAweDEwLCAweDM3LCAweGUwLCAweDZhLCAKLTB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjcsIDB4ZmMsIDB4MDcsIDB4MWMsIAotMHg2OCwgMHg2OCwgMHhhZiwgMHg0YiwgMHgxOCwgMHg0MywgMHg2OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhhOCwgMHg2MSwgCi0weGFjLCAweDIzLCAweGE4LCAweDY4LCAweDk4LCAweDQzLCAweGE4LCAweDYwLCAweGIwLCAweGUwLCAweGE4LCAweDY5LCAKLTB4YTgsIDB4MjgsIDB4MDEsIDB4ZDIsIDB4YTgsIDB4MjAsIDB4YTgsIDB4NjEsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIAotMHhiOCwgMHg0MiwgMHg2YywgMHhkOCwgMHg5YywgMHhlMCwgMHhhNSwgMHhlMCwgMHhhNCwgMHhlMCwgMHgxMCwgMHgyOCwgCi0weDY4LCAweGQxLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDY4LCAweDY4LCAweDE4LCAweDQwLCAweDAxLCAweDBmLCAKLTB4NDgsIDB4MDEsIDB4NDAsIDB4MWEsIDB4ODAsIDB4MDAsIDB4YTAsIDB4NGEsIDB4ODIsIDB4MTgsIDB4MDEsIDB4OTIsIAotMHg3OCwgMHg4OCwgMHg0MiwgMHgwYiwgMHgzMSwgMHhkMywgMHg4MiwgMHgwYiwgMHgyZiwgMHhkMywgMHg5ZCwgMHg0OCwgCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDAyLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDEwLCAweDgwLCAKLTB4NzgsIDB4ODgsIDB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIAotMHhiOCwgMHg2OCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MCwgMHg3OCwgMHg2OCwgMHgwMSwgMHg5YSwgCi0weGMwLCAweDQ2LCAweDEwLCAweDYyLCAweDAwLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDY0LCAKLTB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4OGYsIDB4NDksIDB4NDAsIDB4MTgsIAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MywgMHgwMSwgMHg5YSwgMHg1MCwgMHg2OCwgMHgzNiwgMHgzMCwgCi0weDk0LCAweDI4LCAweDAxLCAweGQ4LCAweDM4LCAweDIwLCAweDAwLCAweGUwLCAweDk0LCAweDIwLCAweGE4LCAweDYxLCAKLTB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MjgsIDB4ZDgsIDB4NTgsIDB4ZTAsIDB4N2EsIDB4ODgsIAotMHg5MiwgMHgwYiwgMHgwMywgMHhkMywgMHg4NSwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgyMywgMHhlMCwgCi0weDAxLCAweDIyLCAweDEyLCAweDAzLCAweDAyLCAweDQwLCAweDgzLCAweDRiLCAweDFkLCAweGQwLCAweDAzLCAweDkzLCAKLTB4MDAsIDB4MDUsIDB4MDAsIDB4MGQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NjAsIDB4YjgsIDB4NjgsIAotMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MCwgMHg3OCwgMHg2OCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgCi0weDEwLCAweDYyLCAweDAwLCAweDIwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAKLTB4OTAsIDB4NjQsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjMsIDB4ODgsIDB4MDIsIDB4NzUsIDB4NDksIAotMHg0MCwgMHgxOCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MywgMHgwMiwgMHhlMCwgMHgzMywgMHhlMCwgCi0weDJhLCAweGUwLCAweDAzLCAweDkzLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcxLCAKLTB4MTIsIDB4OWEsIDB4NTAsIDB4NzgsIDB4MDUsIDB4OTksIDB4NDMsIDB4MWEsIDB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsIAotMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5MiwgMHhmYiwgCi0weDA3LCAweDFjLCAweDAxLCAweDlhLCAweDUwLCAweDZiLCAweDkxLCAweDZiLCAweDA5LCAweDAxLCAweDQwLCAweDE4LCAKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4N2QsIDB4ZmIsIDB4MDEsIDB4OWEsIAotMHhjMCwgMHg0NiwgMHhkMCwgMHg2NCwgMHgwMSwgMHg5YSwgMHgwYiwgMHg5YiwgMHhjMCwgMHg0NiwgMHgxMywgMHg2NSwgCi0weDAxLCAweDIzLCAweDViLCAweDA2LCAweDY4LCAweDY4LCAweDE4LCAweDQzLCAweDY4LCAweDYwLCAweDAwLCAweDIwLCAKLTB4YTgsIDB4NjEsIDB4MGQsIDB4ZTAsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIAotMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3MSwgMHhmYiwgMHgwNywgMHgxYywgMHgzOCwgMHg3OCwgMHg0MCwgMHgwNywgCi0weDQwLCAweDBmLCAweDAzLCAweDI4LCAweDAwLCAweGQxLCAweGY4LCAweGU2LCAweGE4LCAweDY5LCAweDAzLCAweDk5LCAKLTB4MDEsIDB4ZjAsIDB4MjYsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MmEsIDB4ZDEsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIAotMHgwMCwgMHhmMCwgMHg3OSwgMHhmYiwgMHhhOCwgMHg2OCwgMHg4MCwgMHgwOSwgMHgwNCwgMHhkMywgMHgzMCwgMHgxYywgCi0weDQ5LCAweDQ5LCAweDQ5LCAweDY4LCAweDAwLCAweGYwLCAweDgxLCAweGZlLCAweDQxLCAweDQ5LCAweDAwLCAweDIwLCAKLTB4MDEsIDB4ZjAsIDB4MTQsIDB4ZmEsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MGUsIDB4OWIsIDB4ZDgsIDB4NmIsIAotMHgwMSwgMHgzMCwgMHhkOCwgMHg2MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwgCi0weDQ4LCAweDcxLCAweDgwLCAweDA2LCAweDAwLCAweDI3LCAweDY4LCAweDYwLCAweGFmLCAweDYxLCAweDNhLCAweDRhLCAKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MzksIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIDB4MzksIDB4NGIsIAotMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHhmMywgMHhmOSwgMHgwMCwgMHgyMCwgMHgxNSwgMHhlMiwgMHgwNSwgMHg5OCwgCi0weDBjLCAweDk5LCAweDA4LCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDBjLCAweDkwLCAweDBiLCAweDkwLCAKLTB4MGMsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsIAotMHg0OCwgMHg3MSwgMHgyOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgyMCwgCi0weDA4LCAweDkwLCAweDAwLCAweDIyLCAweDBhLCAweDkyLCAweDBjLCAweDk4LCAweDAxLCAweDM4LCAweDBkLCAweDkwLCAKLTB4YTMsIDB4ZTAsIDB4NzgsIDB4ODgsIDB4OGEsIDB4MWIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4OTAsIDB4NDIsIAotMHgwNSwgMHhkZCwgMHgwNywgMHg5MiwgMHg4MCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHg5MCwgCi0weDAwLCAweGUwLCAweDA3LCAweDkwLCAweDA4LCAweDk4LCAweDAwLCAweDI4LCAweDA3LCAweGQxLCAweDBkLCAweDk4LCAKLTB4MGEsIDB4OWEsIDB4OTAsIDB4NDIsIDB4MDcsIDB4ZGQsIDB4MDcsIDB4OTgsIDB4MzAsIDB4MTgsIDB4ODgsIDB4NDIsIAotMHgwMywgMHhkOCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNSwgMHgwNiwgMHg5MCwgMHgxYywgMHhlMCwgMHgxMSwgMHgyMCwgCi0weDQwLCAweDA1LCAweDA2LCAweDkwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQxLCAKLTB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDYsIDB4OTAsIDB4YjEsIDB4MDcsIDB4ODksIDB4MGYsIDB4MGYsIDB4ZDAsIAotMHgwNywgMHg5OCwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyOCwgMHgwOSwgMHhkYiwgCi0weDFlLCAweDI4LCAweDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQxLCAweDAxLCAweGUwLCAweDAyLCAweDI5LCAKLTB4MDIsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4MDIsIDB4OTAsIDB4ZGUsIDB4ZTcsIDB4MGEsIDB4OWEsIDB4MDAsIDB4MmEsIAotMHgwNCwgMHhkMSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwNSwgMHgwNiwgMHg5OCwgMHgxOCwgMHg0MywgMHgwNiwgMHg5MCwgCi0weDA3LCAweDk4LCAweDA2LCAweDk5LCAweDA4LCAweDQzLCAweDAyLCAweDFjLCAweDAwLCAweDkwLCAweDA0LCAweDk4LCAKLTB4ODMsIDB4MTksIDB4MWQsIDB4ZTAsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDEsIDB4NDksIDB4ZmYsIDB4ZmYsIAotMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgCi0weDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDY4LCAweDE5LCAweDAwLCAweDgwLCAweDYwLCAweDA0LCAweDAwLCAweDgwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NTUsIDB4MzIsIDB4ZmYsIDB4ZmYsIAotMHhhYywgMHg1ZSwgMHgyMSwgMHg0MCwgMHgwZCwgMHgzZCwgMHhmZiwgMHhmZiwgMHhjZCwgMHgzMSwgMHhmZiwgMHhmZiwgCi0weDAwLCAweDAwLCAweDMyLCAweDAyLCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLCAKLTB4NmIsIDB4ZjksIDB4MDcsIDB4OTgsIDB4MzYsIDB4MTgsIDB4MDIsIDB4OTgsIAotMHgwMCwgMHgyOCwgMHgxNiwgMHhkMCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwNCwgMHhkMSwgCi0weDA5LCAweDIzLCAweDViLCAweDA0LCAweDA2LCAweDk4LCAweDE4LCAweDQzLCAweDA2LCAweDkwLCAweDA2LCAweDk4LCAKLTB4YzIsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4YzEsIDB4NDgsIAotMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHg1MSwgMHhmOSwgMHgwMCwgMHgyMCwgCi0weDAyLCAweDkwLCAweDA4LCAweDk4LCAweDAwLCAweDI4LCAweDBiLCAweGQxLCAweDBiLCAweDliLCAweDAxLCAweDNiLCAKLTB4MGIsIDB4OTMsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MGMsIDB4ZDgsIDB4MjAsIDB4MWMsIAotMHgwMCwgMHhmMCwgMHg4YSwgMHhmYSwgMHgwNywgMHgxYywgMHgwNywgMHhlMCwgMHg3OCwgMHg2OCwgMHgwNywgMHg5YSwgCi0weDgwLCAweDE4LCAweDc4LCAweDYwLCAweDc4LCAweDg4LCAweDA3LCAweDlhLCAweDgwLCAweDFhLCAweDc4LCAweDgwLCAKLTB4MGEsIDB4OWEsIDB4NTAsIDB4MWMsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGEsIDB4OTIsIDB4MGMsIDB4OTgsIAotMHgwYSwgMHg5YSwgMHg4MiwgMHg0MiwgMHgwMywgMHhkYSwgMHhhOSwgMHg2OSwgMHhiMSwgMHg0MiwgMHgwMCwgMHhkOSwgCi0weDUzLCAweGU3LCAweGE4LCAweDY5LCAweGIwLCAweDQyLCAweDZiLCAweGQxLCAweGE4LCAweDY4LCAweDAxLCAweDA5LCAKLTB4NjksIDB4ZDIsIDB4MDgsIDB4OWEsIDB4MDAsIDB4MmEsIDB4NTYsIDB4ZDAsIDB4MGMsIDB4OTksIDB4MGEsIDB4OWEsIAotMHg4YSwgMHg0MiwgMHgzZSwgMHhkYiwgMHhiMSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwYywgMHhkMCwgMHgwOCwgMHg5YSwgCi0weGQyLCAweDA2LCAweGQyLCAweDBlLCAweDBiLCAweGQwLCAweDFlLCAweDJhLCAweDA2LCAweGRiLCAweDFlLCAweDJhLCAKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDAsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MjksIDB4MDIsIDB4ZDIsIAotMHgwMiwgMHg5OSwgMHgwMCwgMHgyOSwgMHgyMSwgMHhkMCwgMHgwOCwgMHg5YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgCi0weDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLCAKLTB4MDEsIDB4ZjksIDB4MDgsIDB4OTgsIDB4MzYsIDB4MTgsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIAotMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgMHgwMCwgMHhlMCwgMHg5MiwgMHg0OCwgMHgwMSwgMHgyMiwgCi0weDAyLCAweDQzLCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweDhlLCAweDQ4LCAweDAxLCAweDZkLCAKLTB4NDIsIDB4NmQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4ZjAsIDB4ZWMsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4OTAsIAotMHgxNSwgMHhlMCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgCi0weDAwLCAweGUwLCAweDg4LCAweDQ4LCAweDA4LCAweDlhLCAweDAyLCAweDQzLCAweDAwLCAweGUwLCAweDA4LCAweDlhLCAKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIAotMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwgMHhkNSwgMHhmOCwgMHgwOCwgMHg5OCwgMHgzNiwgMHgxOCwgMHgxMCwgMHgzNywgCi0weGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDE0LCAweGZhLCAKLTB4MDcsIDB4MWMsIDB4NjgsIDB4NjgsIDB4ODAsIDB4MGUsIDB4NmIsIDB4ZDIsIDB4MGEsIDB4OTgsIDB4YzAsIDB4NDYsIAotMHgwOSwgMHg5MCwgMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHg1YywgMHhkYSwgMHgwZCwgMHg5OCwgMHgwOSwgMHg5OSwgCi0weDg4LCAweDQyLCAweDAzLCAweGQwLCAweDdhLCAweDg4LCAweDFlLCAweGUwLCAweDVmLCAweGUwLCAweDVlLCAweGUwLCAKLTB4NzgsIDB4ODgsIDB4MDEsIDB4MjIsIDB4NTIsIDB4MDYsIDB4MDIsIDB4NDMsIDB4YTksIDB4NjgsIDB4OGMsIDB4MjMsIAotMHgxOSwgMHg0MCwgMHgwMiwgMHhkMSwgMHgwOSwgMHgyMywgMHg1YiwgMHgwNCwgMHgxYSwgMHg0MywgMHhiMSwgMHgwNywgCi0weDg5LCAweDBmLCAweDBlLCAweGQwLCAweGMzLCAweDA2LCAweGRiLCAweDBlLCAweDA4LCAweGQwLCAweDFlLCAweDJiLCAKLTB4MDksIDB4ZGIsIDB4MWUsIDB4MmIsIDB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MDEsIDB4ZTAsIAotMHgwMiwgMHgyOSwgMHgwMiwgMHhkMywgMHgwMSwgMHgyMSwgMHgwMiwgMHg5MSwgMHgwMiwgMHgxYywgMHgwOSwgMHg5OCwgCi0weDAwLCAweDI4LCAweDAyLCAweGQxLCAweDAxLCAweDIzLCAweGRiLCAweDA1LCAweDFhLCAweDQzLCAweDAwLCAweDkyLCAKLTB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsIAotMHg4ZiwgMHhmOCwgMHg3OCwgMHg4OCwgMHg4NiwgMHgxOSwgMHgxMCwgMHgzNywgMHgwMiwgMHg5OCwgMHgwMCwgMHgyOCwgCi0weDE0LCAweGQwLCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLCAweDAyLCAweGQwLCAweDAxLCAweDIwLCAKLTB4NDAsIDB4MDYsIDB4MDAsIDB4ZTAsIDB4NTcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIAotMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHg1MywgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgCi0weDAxLCAweGYwLCAweDc2LCAweGY4LCAweDAwLCAweDIwLCAweDAyLCAweDkwLCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAKLTB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDksIDB4OTgsIAotMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOSwgMHg5MCwgCi0weDBjLCAweDk5LCAweDg4LCAweDQyLCAweGEyLCAweGRiLCAweDY4LCAweDY4LCAweDMwLCAweDQzLCAweDAxLCAweDA0LCAKLTB4MDksIDB4MGMsIDB4NjgsIDB4NjAsIDB4ZTgsIDB4NmEsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmEsIDB4MjgsIDB4ZTAsIAotMHgyNywgMHhlMCwgMHhhOCwgMHg2OCwgMHgwMCwgMHgwOSwgMHgxNCwgMHhkMywgMHg2OCwgMHg2OCwgMHg4MCwgMHgwZSwgCi0weDE1LCAweGQyLCAweDAxLCAweDlhLCAweDAwLCAweDJhLCAweDEyLCAweGQwLCAweDAxLCAweDlhLCAweDUwLCAweDZiLCAKLTB4MGIsIDB4OWIsIDB4MjEsIDB4MWMsIDB4M2EsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODksIDB4ZjksIDB4MDEsIDB4OWEsIAotMHhjMCwgMHg0NiwgMHg5MCwgMHg2NCwgMHgwMSwgMHg5YSwgMHgwYiwgMHg5YiwgMHhjMCwgMHg0NiwgMHg5MywgMHg2MywgCi0weDAzLCAweGUwLCAweGU4LCAweDZhLCAweDMxLCAweDFjLCAweDAwLCAweGYwLCAweDVkLCAweGZhLCAweDY4LCAweDY4LCAKLTB4MzAsIDB4NDMsIDB4NjgsIDB4NjAsIDB4YTgsIDB4NjksIDB4YjAsIDB4NDIsIDB4MDUsIDB4ZDksIDB4MDAsIDB4MDQsIAotMHgwMCwgMHgwYywgMHg4MCwgMHgxYiwgMHgwMCwgMHhmMCwgMHhlZSwgMHhmOSwgMHhhZSwgMHg2MSwgMHhhOCwgMHg2OCwgCi0weDhjLCAweDIzLCAweDE4LCAweDQwLCAweDBiLCAweGQwLCAweDJmLCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAKLTB4MDQsIDB4OTgsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MmEsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsIAotMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHgyMywgMHhmOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMCwgMHg2ZCwgCi0weDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLCAweGUxLCAweDY5LCAweDgxLCAweDQyLCAKLTB4MTIsIDB4ZDAsIDB4MjIsIDB4NjksIDB4MDIsIDB4MmEsIDB4MGYsIDB4ZDIsIDB4NDEsIDB4MWEsIDB4MDEsIDB4ZDUsIAotMHg2MCwgMHg2ZCwgMHg0MSwgMHgxOCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzZiwgMHhmYiwgMHhlMSwgMHg2OSwgCi0weDQwLCAweDE4LCAweGUwLCAweDYxLCAweDYxLCAweDZkLCAweDg4LCAweDQyLCAweDI0LCAweGQzLCAweDQwLCAweDFhLCAKLTB4ZTAsIDB4NjEsIDB4MjEsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MWYsIDB4ZDEsIDB4MjAsIDB4NjksIDB4MDIsIDB4MjgsIAotMHgxYywgMHhkMiwgMHgwMSwgMHgyMCwgMHg2MCwgMHg2MSwgMHgxOCwgMHg0OCwgMHg0MSwgMHg2OSwgMHhlMiwgMHg2YywgCi0weDBhLCAweDQzLCAweDQyLCAweDYxLCAweDgxLCAweDY5LCAweGUzLCAweDZjLCAweDk5LCAweDQzLCAweDgxLCAweDYxLCAKLTB4MDEsIDB4MjEsIDB4MDksIDB4MDUsIDB4Y2EsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjEsIAotMHg4YiwgMHgwMiwgMHgyMCwgMHg2ZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwgCi0weGUxLCAweDY5LCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweGNjLCAweGZhLCAKLTB4MjgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGYsIDB4ZjksIDB4MGMsIDB4OTgsIDB4MDUsIDB4OTksIDB4NDAsIDB4MTgsIAotMHgwMCwgMHgwMSwgMHgxMCwgMHgzMCwgMHg2OCwgMHg2MSwgMHgxMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAKLTB4MDAsIDB4MDAsIDB4MTIsIDB4MDIsIDB4MDQsIDB4MDAsIDB4NTIsIDB4MDIsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHhmMCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgyZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwgCi0weDAzLCAweGY5LCAweDA3LCAweDFjLCAweDgxLCAweDY5LCAweDQ0LCAweDZhLCAweGEwLCAweDZmLCAweDAwLCAweGYwLCAKLTB4NDUsIDB4ZmUsIDB4MDAsIDB4MjAsIDB4ZTEsIDB4MWQsIDB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4NzksIDB4NjgsIAotMHhjOSwgMHgwZSwgMHgwOSwgMHhkMywgMHhmOCwgMHg2YSwgMHgwMCwgMHgwMSwgMHgyNCwgMHg0OSwgMHg0MCwgMHgxOCwgCi0weDI0LCAweDRiLCAweGMwLCAweDE4LCAweDAxLCAweDY4LCAweDAxLCAweDM5LCAweDAxLCAweDYwLCAweDM2LCAweGUwLCAKLTB4ZTEsIDB4NmQsIDB4MDksIDB4NjgsIDB4MjIsIDB4NmUsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4MjAsIDB4NGUsIAotMHhmNSwgMHgxZCwgMHg3OSwgMHgzNSwgMHgwMSwgMHgyMywgMHhlOSwgMHg2YiwgMHgxOSwgMHg0MywgMHhlOSwgMHg2MywgCi0weGI5LCAweDZhLCAweGUyLCAweDZkLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweGI5LCAweDZhLCAweDIyLCAweDZlLCAKLTB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4NjEsIDB4NjksIDB4MDAsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YTksIDB4NmIsIAotMHgwMSwgMHgzMSwgMHhhOSwgMHg2MywgMHgwOCwgMHgyOSwgMHgwNywgMHhkMywgMHhhOCwgMHg2MywgMHgwMSwgMHgyMCwgCi0weDAwLCAweGYwLCAweDg2LCAweGY4LCAweGU4LCAweDZiLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweGU4LCAweDYzLCAKLTB4NzgsIDB4NjgsIDB4ODEsIDB4MGUsIDB4MGYsIDB4ZDIsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjEsIDB4MTgsIAotMHhjOSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkMCwgMHgwMCwgMHgwOCwgMHgwNCwgMHhkMiwgMHgyMCwgMHgxYywgCi0weDM5LCAweDFjLCAweDAwLCAweGYwLCAweDQzLCAweGY4LCAweDAyLCAweGUwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAKLTB4MDUsIDB4ZmEsIDB4MzgsIDB4MWMsIDB4ZmIsIDB4ZjcsIDB4MDYsIDB4ZmMsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHgwYiwgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgCi0weGEwLCAweDFjLCAweDAwLCAweDgwLCAweGI0LCAweDBjLCAweDAwLCAweDAwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZjgsIDB4MWQsIDB4MTksIDB4MzAsIAotMHgwMSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg3MSwgMHgzOCwgMHgxYywgCi0weGZmLCAweGY3LCAweDU2LCAweGZiLCAweGY4LCAweDY4LCAweDAyLCAweDI4LCAweDBkLCAweGQwLCAweGI4LCAweDY4LCAKLTB4ODAsIDB4MDAsIDB4YzIsIDB4MTksIDB4NTAsIDB4NmMsIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDAsIDB4YjgsIDB4NmEsIAotMHg0MSwgMHg3OCwgMHgwOSwgMHgwMSwgMHgxMCwgMHgzMSwgMHg1MiwgMHg2YiwgMHgxMCwgMHgxYSwgMHg4OCwgMHg0MiwgCi0weDA1LCAweGQzLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDQyLCAweGZiLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MjgsIDB4ZmEsIDB4ZjgsIDB4ZTcsIDB4NzgsIDB4NjgsIAotMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwgMHhjMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHhmMSwgMHhlNywgCi0weGIwLCAweGI1LCAweDg3LCAweGIwLCAweDBmLCAweDFjLCAweDgwLCAweDZmLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAKLTB4MDAsIDB4MjQsIDB4MTMsIDB4NGQsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZTgsIDB4MTgsIDB4ODAsIDB4NjksIAotMHgwMCwgMHgyOCwgMHgxNywgMHhkMCwgMHg2OSwgMHg0NiwgMHhhMiwgMHgwMCwgMHg1MiwgMHgxOSwgMHgwYiwgMHgyMywgCi0weDFiLCAweDAyLCAweGQyLCAweDE4LCAweDkyLCAweDY5LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDkyLCAweGZiLCAKLTB4MDAsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MDEsIDB4MzQsIDB4YTAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MGIsIDB4MjMsIAotMHgxYiwgMHgwMiwgMHhjMCwgMHgxOCwgMHg4MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgwMSwgMHhlMCwgCi0weDAxLCAweDI4LCAweDAyLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDlkLCAweGY5LCAweDA3LCAweGIwLCAKLTB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHhiOCwgMHhiNSwgMHhjMiwgMHgwNywgMHhkMiwgMHgwZiwgMHgxNiwgMHg0YywgMHgxNiwgMHg0OSwgMHgwMSwgMHhkMCwgCi0weDA4LCAweDIyLCAweDA4LCAweGUwLCAweDgyLCAweDA4LCAweDA1LCAweGQzLCAweDBjLCAweDIyLCAweGE0LCAweDE4LCAKLTB4MGIsIDB4NjgsIDB4ZGYsIDB4MWQsIDB4MTUsIDB4MzcsIDB4MDMsIDB4ZTAsIDB4MWMsIDB4MjIsIDB4MGIsIDB4NjgsIAotMHhkZiwgMHgxZCwgMHgwOSwgMHgzNywgMHgwZiwgMHg0YiwgMHgxZCwgMHg3OCwgMHgwMCwgMHgyZCwgMHgxMywgMHhkMCwgCi0weDViLCAweDc4LCAweDAwLCAweDJiLCAweDEwLCAweGQwLCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDFhLCAweDQzLCAKLTB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4NWIsIDB4MDgsIDB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4NGEsIDB4NjgsIAotMHgwMSwgMHgyMCwgMHgzOSwgMHgxYywgMHgyMywgMHgxYywgMHgwMCwgMHhmMCwgMHhkZiwgMHhmZSwgMHhiOCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAzLCAweDIzLCAweDFiLCAweDA2LCAweDFhLCAweDQzLCAweGYxLCAweGU3LCAKLTB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4ZjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHgwMCwgMHgyMSwgMHhjMSwgMHg2MSwgMHgwNSwgMHg0OSwgMHg4YSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwgCi0weDg4LCAweDYwLCAweDAyLCAweGUwLCAweGNhLCAweDY4LCAweGMwLCAweDQ2LCAweGQwLCAweDYxLCAweGM4LCAweDYwLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDMsIDB4NDksIDB4ODgsIDB4NjgsIAotMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHhjMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MCwgMHg3MCwgMHg0NywgCi0weDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAxLCAweDFjLCAweDAxLCAweDIzLCAweDg4LCAweDY4LCAweDU4LCAweDQwLCAKLTB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4M2EsIDB4Y2EsIDB4NjAsIDB4MGEsIDB4NjksIDB4MDEsIDB4M2EsIAotMHg4MCwgMHgwMCwgMHgwYSwgMHg2MSwgMHg0MiwgMHgxOCwgMHhkMCwgMHg2YiwgMHg1MywgMHg2YiwgMHhjMCwgMHg0NiwgCi0weGNiLCAweDYyLCAweDBiLCAweDY4LCAweDliLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDZjLCAweDUzLCAweDZjLCAKLTB4YzksIDB4MTgsIDB4NTEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4OGEsIDB4NjgsIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsIAotMHhkMywgMHg2YiwgMHg4MywgMHg0MiwgMHgxNywgMHhkMSwgMHhkMCwgMHgxZCwgMHgzZCwgMHgzMCwgMHgwYSwgMHg2OCwgCi0weDkyLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDZjLCAweDAzLCAweDY4LCAweDlhLCAweDFhLCAweDAyLCAweDYwLCAKLTB4MDEsIDB4MjMsIDB4ODgsIDB4NjgsIDB4NTgsIDB4NDAsIDB4ODgsIDB4NjAsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4MzIsIAotMHhjYSwgMHg2MCwgMHgwYSwgMHg2OSwgMHgwMSwgMHgzMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwYSwgMHg2MSwgCi0weDQwLCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDcwLCAweDQ3LCAweGI4LCAweGI1LCAweDA0LCAweDFjLCAKLTB4MWQsIDB4MWMsIDB4MTcsIDB4MWMsIDB4MDgsIDB4MWMsIDB4MzksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDksIDB4ZmYsIAotMHgwMCwgMHgyMCwgMHgyOSwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YywgMHhmZSwgMHgwMSwgMHgyMCwgMHhmOSwgMHgxZCwgCi0weDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDgwLCAweDA2LCAweDYwLCAweDYwLCAweDAwLCAweDIwLCAweGEwLCAweDYxLCAKLTB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MDYsIDB4NDgsIAotMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwNSwgMHg0YiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHg2MiwgMHhmZSwgCi0weGI4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDA0LCAweDAwLCAweDEyLCAweDAyLCAKLTB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4MDYsIDB4NDksIDB4MGEsIDB4NjgsIAotMHgxMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgCi0weDAzLCAweDQ5LCAweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAKLTB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIAotMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgCi0weDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDAzLCAweDQ5LCAweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIAotMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMCwgMHgxOCwgCi0weDA4LCAweDYwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDk4LCAweDQyLCAweDAzLCAweGQ5LCAweDAzLCAweDQ5LCAKLTB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsIDB4NzAsIDB4NDcsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIAotMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMiwgMHg0OCwgMHg0MSwgMHg3OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg3MSwgCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDkwLCAweGI0LCAweDgyLCAweDAwLCAKLTB4MTcsIDB4NGIsIDB4OWEsIDB4NTgsIDB4OGIsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODksIDB4MDgsIDB4MGIsIDB4MWQsIAotMHgwMSwgMHhlMCwgMHg4OSwgMHgwOCwgMHhjYiwgMHgxYywgMHgxMSwgMHg2OSwgMHhkNywgMHg2OCwgMHgxMiwgMHg0YywgCi0weDgwLCAweDAwLCAweDIwLCAweDU4LCAweDQwLCAweDY4LCAweGI5LCAweDQyLCAweDAzLCAweGQxLCAweDgxLCAweDQyLCAKLTB4MTksIDB4ZDksIDB4MTEsIDB4NjgsIDB4MTcsIDB4ZTAsIDB4MDAsIDB4MjQsIDB4YjksIDB4NDIsIDB4MDksIDB4ZDksIAotMHg4MSwgMHg0MiwgMHgxMiwgMHhkOSwgMHgxMSwgMHg2OCwgMHg3OCwgMHgxYSwgMHgwMCwgMHhkNSwgMHgwMywgMHgzMCwgCi0weDgwLCAweDEwLCAweDk4LCAweDQyLCAweDBiLCAweGQ4LCAweDA3LCAweGUwLCAweDgxLCAweDQyLCAweDA1LCAweGQ4LCAKLTB4NzgsIDB4MWEsIDB4MDAsIDB4ZDUsIDB4MDMsIDB4MzAsIDB4ODAsIDB4MTAsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDgsIAotMHgyMCwgMHgxYywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHhjOCwgMHgxZCwgMHgwNSwgMHgzMCwgMHhmYSwgMHhlNywgCi0weDcwLCAweDA0LCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDgwLCAweDAwLCAweDBmLCAweDRhLCAweDE3LCAweDU4LCAKLTB4ODgsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODgsIDB4MDgsIDB4MDQsIDB4MzAsIDB4MDEsIDB4ZTAsIDB4ODgsIDB4MDgsIAotMHgwMywgMHgzMCwgMHgzOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwOSwgMHhkOSwgMHgzOSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDM5LCAweDYxLCAweGY5LCAweDY4LCAweDdhLCAweDY4LCAweDkxLCAweDQyLCAweDAyLCAweGQ5LCAKLTB4MzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4ODEsIDB4MDAsIDB4MzgsIDB4NjksIDB4MDAsIDB4ZjAsIAotMHhkMSwgMHhmZCwgMHgzOCwgMHg2MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgCi0weDcwLCAweDA0LCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDAzLCAweDIxLCAweDA5LCAweDA3LCAweDAxLCAweDQwLCAKLTB4MGMsIDB4MGYsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4MjIsIDB4OTIsIDB4MDcsIDB4MDIsIDB4NDAsIAotMHhhMywgMHgwMCwgMHgxYywgMHg0ZiwgMHhmZiwgMHg1OCwgMHg4OSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwMCwgMHgwNCwgCi0weDAwLCAweDBjLCAweDgwLCAweDA4LCAweDAwLCAweDI5LCAweDAwLCAweGQwLCAweDAxLCAweDMwLCAweDAwLCAweDJhLCAKLTB4MDEsIDB4ZDAsIDB4MDIsIDB4MzAsIDB4MDAsIDB4ZTAsIDB4MDMsIDB4MzAsIDB4ZjksIDB4NjgsIDB4N2EsIDB4NjgsIAotMHg5MSwgMHg0MiwgMHgwMiwgMHhkOSwgMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHg4MSwgMHgwMCwgCi0weGY4LCAweDY4LCAweDAwLCAweGYwLCAweGE1LCAweGZkLCAweGY4LCAweDYwLCAweDBmLCAweDQ4LCAweDAwLCAweDY5LCAKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjAsIDB4YTAsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MjAsIDB4MWMsIAotMHhmZSwgMHhmNywgMHhjYSwgMHhmYywgMHgwYiwgMHg0OSwgMHhjOCwgMHgxZCwgMHgxOSwgMHgzMCwgMHgwMywgMHg3OSwgCi0weDAwLCAweDIyLCAweDAwLCAweDJiLCAweDA1LCAweGQxLCAweDA5LCAweDQ5LCAweGM4LCAweDFkLCAweDE5LCAweDMwLCAKLTB4MDMsIDB4NzksIDB4MDAsIDB4MmIsIDB4MDMsIDB4ZDAsIDB4MDIsIDB4NzEsIDB4MDgsIDB4MWMsIDB4ZmYsIDB4ZjcsIAotMHg3OSwgMHhmOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwgCi0weGQwLCAweDJjLCAweDAwLCAweDgwLCAweDY0LCAweDJkLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLCAKLTB4YjAsIDB4YjUsIDB4MmIsIDB4NDksIDB4MDksIDB4NzksIDB4MDAsIDB4MjksIDB4MDMsIDB4ZDEsIDB4NDEsIDB4NjgsIAotMHgyOSwgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwgCi0weDQ5LCAweDA4LCAweDAyLCAweGQzLCAweDA5LCAweDIxLCAweDA5LCAweDA0LCAweDAxLCAweGUwLCAweDBkLCAweDIxLCAKLTB4MDksIDB4MDQsIDB4MGMsIDB4YzgsIDB4MDgsIDB4MzgsIDB4MTksIDB4NDMsIDB4ODcsIDB4NjgsIDB4YmIsIDB4MGEsIAotMHgwMywgMHhkMywgMHg0MywgMHg2OCwgMHg1YiwgMHgwOCwgMHgwMCwgMHhkMywgMHgwMSwgMHgzMSwgMHg0MCwgMHg2OCwgCi0weDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLCAweDA3LCAweDBmLCAweGY4LCAweDAwLCAweDFkLCAweDRjLCAKLTB4MDAsIDB4MTksIDB4MjMsIDB4NjgsIDB4YzAsIDB4MTgsIDB4NTAsIDB4MzAsIDB4MDAsIDB4NzksIDB4MDEsIDB4MjgsIAotMHgxMCwgMHhkMSwgMHg2MCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwZCwgMHhkMCwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgCi0weDcxLCAweGY4LCAweDM4LCAweDAxLCAweDAwLCAweDE5LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzksIDB4NDEsIDB4NjMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHgwMywgMHg2YiwgCi0weDVkLCAweDFjLCAweDA1LCAweDYzLCAweGJkLCAweDAyLCAweDJkLCAweDE5LCAweGRiLCAweDAwLCAweGViLCAweDE4LCAKLTB4ODAsIDB4MzMsIDB4MTksIDB4NjMsIDB4ZGEsIDB4NjIsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsIAotMHgwMSwgMHgyMSwgMHhiOSwgMHg0MCwgMHgyMiwgMHg2OCwgMHgxMSwgMHg0MywgMHgyMSwgMHg2MCwgMHgwMSwgMHg2YiwgCi0weDgwLCAweDI5LCAweGUyLCAweGQzLCAweDAwLCAweDIxLCAweDAxLCAweDYzLCAweGRmLCAweGU3LCAweDAwLCAweDAwLCAKLTB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIAotMHhmMCwgMHhiNSwgMHgxZiwgMHg0ZSwgMHg3MCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgzNiwgMHhkMSwgMHgwMCwgMHgyNCwgCi0weGIxLCAweDY4LCAweDQ4LCAweDFjLCAweGM5LCAweDAwLCAweDg5LCAweDE5LCAweGIwLCAweDYwLCAweDMyLCAweDY4LCAKLTB4ODksIDB4MTgsIDB4NjAsIDB4MzEsIDB4MGQsIDB4N2IsIDB4MDgsIDB4MjgsIDB4MDAsIDB4ZDMsIDB4YjQsIDB4NjAsIAotMHgyOCwgMHgwMSwgMHg4MCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4NywgMHg2YiwgCi0weDAwLCAweDJmLCAweDIxLCAweGQwLCAweGMxLCAweDZhLCAweDRiLCAweDFjLCAweGFhLCAweDAyLCAweDkyLCAweDE5LCAKLTB4YzksIDB4MDAsIDB4NTEsIDB4MTgsIDB4ODAsIDB4MzEsIDB4YzMsIDB4NjIsIDB4Y2EsIDB4NmEsIDB4MDksIDB4NmIsIAotMHgwMSwgMHgzZiwgMHg4NywgMHg2MywgMHg4MCwgMHgyYiwgMHgwMCwgMHhkMywgMHhjNCwgMHg2MiwgMHgwMCwgMHgyZiwgCi0weDA2LCAweGQxLCAweDAxLCAweDI3LCAweGFmLCAweDQwLCAweDNiLCAweDFjLCAweGRiLCAweDQzLCAweDM3LCAweDY4LCAKLTB4M2IsIDB4NDAsIDB4MzMsIDB4NjAsIDB4NDMsIDB4NmIsIDB4MDEsIDB4M2IsIDB4NDMsIDB4NjMsIDB4MTAsIDB4MWMsIAotMHgzNywgMHgxYywgMHgwMCwgMHhmMCwgMHgwOSwgMHhmOCwgMHg3OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhjOSwgMHhkMCwgCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAKLTB4ZjAsIDB4YjUsIDB4Y2QsIDB4MGYsIDB4ZWQsIDB4MDcsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MjcsIDB4MmUsIDB4NGIsIAotMHgyZSwgMHg0YSwgMHgwMCwgMHgyZCwgMHgxZCwgMHhkMCwgMHhkOCwgMHg2YSwgMHgwMSwgMHgzMCwgMHhkOCwgMHg2MiwgCi0weDEwLCAweDFjLCAweDUyLCAweDY5LCAweDAwLCAweDJhLCAweDEyLCAweGQwLCAweDAyLCAweDY5LCAweDUzLCAweDFjLCAKLTB4OTIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4MDMsIDB4NjEsIDB4OTEsIDB4NjEsIDB4NDEsIDB4NjksIDB4MDEsIDB4MzEsIAotMHg0MSwgMHg2MSwgMHgwMiwgMHg2OSwgMHgwZiwgMHgyYSwgMHgwMCwgMHhkMywgMHgwNywgMHg2MSwgMHgwZiwgMHgyOSwgCi0weDAwLCAweGQzLCAweDQ0LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA4LCAweDFjLCAKLTB4ZmYsIDB4ZjcsIDB4ZWUsIDB4ZmUsIDB4ZjgsIDB4ZTcsIDB4MTUsIDB4NjksIDB4NmUsIDB4MWMsIDB4YWQsIDB4MDAsIAotMHhhZCwgMHgxOCwgMHgxNiwgMHg2MSwgMHhhOSwgMHg2MSwgMHg1NSwgMHg2OSwgMHgwMSwgMHgzNSwgMHg1NSwgMHg2MSwgCi0weDE2LCAweDY5LCAweDBmLCAweDJlLCAweDAwLCAweGQzLCAweDE3LCAweDYxLCAweDBmLCAweDJkLCAweDAwLCAweGQzLCAKLTB4NTQsIDB4NjAsIDB4OGMsIDB4MDIsIDB4YTQsIDB4MGEsIDB4MTYsIDB4NGYsIDB4M2EsIDB4NmYsIDB4ZmQsIDB4NjgsIAotMHhmOSwgMHgxZCwgMHg3OSwgMHgzMSwgMHgwMSwgMHgyZCwgMHgwYywgMHhkMSwgMHhkYiwgMHg2ZCwgMHg1YiwgMHgwOCwgCi0weDA5LCAweGQzLCAweDBiLCAweDg5LCAweDAwLCAweDJiLCAweDA2LCAweGQxLCAweGZkLCAweDZmLCAweDAzLCAweDNiLCAKLTB4MmUsIDB4NjgsIDB4MzMsIDB4NDAsIDB4MmIsIDB4NjAsIDB4MTQsIDB4MjMsIDB4MGIsIDB4ODEsIDB4MTAsIDB4NjAsIAotMHg4MCwgMHgwNywgMHg4MCwgMHgwYSwgMHgyMCwgMHg0MywgMHgwMywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzOCwgCi0weDUwLCAweDYwLCAweDA5LCAweDZhLCAweDA4LCAweDMyLCAweDkxLCAweDQyLCAweDAwLCAweGQ4LCAweDA3LCAweDRhLCAKLTB4MDAsIDB4MGQsIDB4MDIsIDB4ZDMsIDB4NTEsIDB4MjAsIDB4ODAsIDB4MDMsIDB4ODIsIDB4NjEsIDB4M2EsIDB4NjcsIAotMHhiZSwgMHhlNywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLCAKLTB4YjAsIDB4YjUsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDUsIDB4MTYsIDB4NDksIAotMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgxNSwgMHg0YywgMHgwMCwgMHgyNSwgMHg2NywgMHg2OSwgMHgwMCwgMHgyZiwgCi0weDE2LCAweGQwLCAweGUwLCAweDY4LCAweDQxLCAweDFjLCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweGUxLCAweDYwLCAKLTB4ODAsIDB4NjksIDB4MDEsIDB4M2YsIDB4ZmYsIDB4ZjcsIDB4OTQsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MGYsIDB4MjgsIAotMHgwMCwgMHhkMywgMHhlNSwgMHg2MCwgMHhlMCwgMHg2OCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg4MCwgMHg2OSwgCi0weDAwLCAweDA4LCAweDAxLCAweGQzLCAweDAwLCAweDJmLCAweGVhLCAweGQxLCAweDY3LCAweDYxLCAweDAzLCAweGUwLCAKLTB4MDgsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4NjUsIDB4NjAsIDB4MjAsIDB4NjgsIAotMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhmZiwgMHhmNywgMHgyNiwgMHhmZiwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4YjAsIDB4YjQsIDB4MTAsIDB4MjMsIAotMHg4MiwgMHg2OCwgMHgxMywgMHg0MCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyYiwgMHgxNSwgMHhkMCwgMHgwYywgMHg0YiwgCi0weDFhLCAweDQwLCAweDEyLCAweDAxLCAweDgxLCAweDI0LCAweDE0LCAweDQzLCAweDAyLCAweDY4LCAweDE1LCAweDY4LCAKLTB4MTMsIDB4MWQsIDB4ODAsIDB4Y2IsIDB4MWIsIDB4NjgsIDB4MDQsIDB4M2EsIDB4MDIsIDB4NjAsIDB4MjAsIDB4YzIsIAotMHg4MCwgMHhjMiwgMHgwOCwgMHhjMiwgMHgxNCwgMHg2MCwgMHg0MiwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgCi0weDA0LCAweDMyLCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweDA4LCAweDFjLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAKLTB4MDAsIDB4ZjAsIDB4ZmYsIDB4MGYsIDB4ZjAsIDB4YjQsIDB4ODIsIDB4NjgsIDB4NTMsIDB4MDksIDB4MzQsIDB4ZDMsIAotMHgxYiwgMHg0YiwgMHgxYSwgMHg0MCwgMHgxMiwgMHgwMSwgMHg4MSwgMHgyNiwgMHgxNiwgMHg0MywgMHgwMywgMHg2OCwgCi0weDFkLCAweDY4LCAweDFmLCAweDFkLCAweDEwLCAweGNmLCAweDNmLCAweDY4LCAweDA0LCAweDNiLCAweDAzLCAweDYwLCAKLTB4MjAsIDB4YzMsIDB4MTAsIDB4YzMsIDB4ODAsIDB4YzMsIDB4MWUsIDB4NjAsIDB4NDMsIDB4NjgsIDB4MWYsIDB4MWQsIAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzYiwgMHg0MywgMHg0MywgMHg2MCwgMHhjYiwgMHg2YiwgMHgxOCwgMHgxZiwgCi0weGM4LCAweDYzLCAweDgwLCAweGNiLCAweDgwLCAweGMwLCAweDFjLCAweDY4LCAweDFmLCAweDFkLCAweDAzLCAweDFkLCAKLTB4MDQsIDB4NjAsIDB4MzgsIDB4MWMsIDB4M2YsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MWYsIDB4NjAsIDB4MWYsIDB4MWQsIAotMHg0MywgMHg2OCwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHg4MSwgMHgyMywgMHgyMywgMHg0MywgMHgzYiwgMHg2MCwgCi0weDQwLCAweDY4LCAweDAwLCAweDBjLCAweDAwLCAweDA0LCAweDEwLCAweDQzLCAweDc4LCAweDYwLCAweDA4LCAweDZlLCAKLTB4MDQsIDB4MzAsIDB4MDgsIDB4NjYsIDB4NDgsIDB4NmUsIDB4MDQsIDB4MzAsIDB4NDgsIDB4NjYsIDB4MDAsIDB4MjAsIAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHhmMCwgMHhmZiwgMHgwZiwgMHg4MCwgMHhiNCwgMHg4MSwgMHg2YSwgCi0weDAxLCAweDIzLCAweDliLCAweDA3LCAweGNhLCAweDFkLCAweDA1LCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAKLTB4Y2YsIDB4MWQsIDB4MDEsIDB4MzcsIDB4M2IsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4Y2IsIDB4NjAsIAotMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwZiwgMHgxZCwgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgCi0weDhiLCAweDYwLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDBiLCAweDQzLCAweDFiLCAweDY4LCAweDBjLCAweGMxLCAKLTB4MDIsIDB4NjIsIDB4MDEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjIsIDB4MDQsIDB4MjMsIDB4ODEsIDB4NjksIAotMHgxOSwgMHg0MywgMHg4MSwgMHg2MSwgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2MSwgMHg4MSwgMHg2YSwgCi0weDA0LCAweDMxLCAweDgxLCAweDYyLCAweDAyLCAweDZiLCAweGMwLCAweDQ2LCAweDkxLCAweDYyLCAweGMxLCAweDFkLCAKLTB4MzksIDB4MzEsIDB4NGEsIDB4OGIsIDB4MDQsIDB4M2EsIDB4NGEsIDB4ODMsIDB4NDksIDB4OGIsIDB4MDIsIDB4NmIsIAotMHg0MCwgMHgzMiwgMHg1MSwgMHg4MywgMHhjMSwgMHg4OSwgMHgwNCwgMHgzOSwgMHhjMSwgMHg4MSwgMHhjMSwgMHg2OCwgCi0weDAwLCAweDZiLCAweGMwLCAweDQ2LCAweGMxLCAweDYwLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4MjAsIDB4NDcsIDB4MjgsIDB4NDcsIAotMHgzMCwgMHg0NywgMHgzOCwgMHg0NywgMHgzMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgwYywgMHhjMCwgMHg5ZCwgMHhlNSwgCi0weDBjLCAweDQ4LCAweGEwLCAweGUxLCAweDI0LCAweDQ4LCAweGIwLCAweGUxLCAweDFlLCAweDAwLCAweDAwLCAweDBhLCAKLTB4MDEsIDB4YzAsIDB4NGMsIDB4ZTIsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4NjQsIDB4NTEsIDB4OWYsIDB4ZTUsIAotMHg5NCwgMHg1MCwgMHgyMCwgMHhlMCwgMHgwMCwgMHg1MCwgMHg5MCwgMHhlNSwgMHgxNCwgMHg0MCwgMHg5MCwgMHhlNSwgCi0weDAwLCAweDMwLCAweDg1LCAweGU1LCAweDA0LCAweGMwLCAweDg1LCAweGU1LCAweDA4LCAweDEwLCAweDg1LCAweGU1LCAKLTB4MGMsIDB4MjAsIDB4ODUsIDB4ZTUsIDB4MTAsIDB4MTAsIDB4OTAsIDB4ZTUsIAotMHgxMCwgMHg1MCwgMHg4NSwgMHhlMiwgMHgwMSwgMHgwMCwgMHg1NSwgMHhlMSwgMHgwYywgMHg1MCwgMHg5MCwgMHg1NSwgCi0weDA0LCAweDAwLCAweDU1LCAweGUxLCAweDA1LCAweDAwLCAweDAwLCAweDBhLCAweDA0LCAweDEwLCAweDkwLCAweGU1LCAKLTB4MDAsIDB4NTAsIDB4ODAsIDB4ZTUsIDB4MDAsIDB4NTAsIDB4ODEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsIAotMHgzMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgzMCwgMHg5MywgMHhlNSwgCi0weDA4LCAweDIwLCAweDkwLCAweGU1LCAweDAxLCAweDMxLCAweDgzLCAweGUzLCAweDAyLCAweDM2LCAweDgzLCAweGUzLCAKLTB4MDMsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTQsIDB4MzAsIDB4ODAsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4MWEsIAotMHgwMSwgMHgwMCwgMHhhMCwgMHhlMywgMHhmNCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMSwgMHgwNiwgMHgxYywgMHhlMywgCi0weGYxLCAweGZmLCAweGZmLCAweDBhLCAweGVjLCAweDEwLCAweDlmLCAweGU1LCAweDAyLCAweGM2LCAweGNjLCAweGUzLCAKLTB4NTQsIDB4MjAsIDB4OTEsIDB4ZTUsIDB4ZTQsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4NTAsIDB4MTAsIDB4OTEsIDB4ZTUsIAotMHhkOSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmMCwgMHg0NywgMHgyZCwgMHhlOSwgMHgyMCwgMHhjMCwgMHg5ZCwgMHhlNSwgCi0weDBjLCAweDY4LCAweGEwLCAweGUxLCAweDI2LCAweDY4LCAweGIwLCAweGUxLCAweDI1LCAweDAwLCAweDAwLCAweDBhLCAKLTB4MTgsIDB4NDAsIDB4YTAsIDB4ZTMsIDB4YjgsIDB4NTAsIDB4OWYsIDB4ZTUsIDB4OTQsIDB4MDAsIDB4MDAsIDB4ZTAsIAotMHgwNSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwOCwgMHg0MCwgMHg5MCwgMHhlNSwgMHgwNCwgMHg4MCwgMHg5MCwgMHhlNSwgCi0weDAwLCAweDcwLCAweGEwLCAweGUzLCAweDFmLCAweGMwLCAweGEwLCAweGUzLCAweDAyLCAweGM0LCAweDhjLCAweGUzLCAKLTB4MDAsIDB4NTAsIDB4OTAsIDB4ZTUsIDB4MTAsIDB4OTAsIDB4OTAsIDB4ZTUsIDB4MTQsIDB4YTAsIDB4OTAsIDB4ZTUsIAotMHgwMCwgMHgzMCwgMHg4NSwgMHhlNSwgMHgwNCwgMHhjMCwgMHg4NSwgMHhlNSwgMHgwOCwgMHgxMCwgMHg4NSwgMHhlNSwgCi0weDBjLCAweDIwLCAweDg1LCAweGU1LCAweDEwLCAweDUwLCAweDg1LCAweGUyLCAweDA5LCAweDAwLCAweDU1LCAweGUxLCAKLTB4MGMsIDB4NTAsIDB4OTAsIDB4NTUsIDB4MGEsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MTUsIDB4MDAsIDB4MDAsIDB4MGEsIAotMHgwMywgMHg3MCwgMHgxNywgMHhlMiwgMHgyMCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgyMCwgMHgzMCwgMHg4MywgMHhlMiwgCi0weDBhLCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDYwLCAweDk2LCAweGUyLCAweDAxLCAweDcwLCAweDg3LCAweGUyLCAKLTB4MDksIDB4MDAsIDB4MDAsIDB4MGEsIDB4MjAsIDB4NjAsIDB4NDYsIDB4ZTIsIDB4MjAsIDB4MDAsIDB4NTYsIDB4ZTMsIAotMHhlYywgMHhmZiwgMHhmZiwgMHhjYSwgMHgwMCwgMHg3MCwgMHhhMCwgMHhlMywgMHgwMSwgMHhjMCwgMHg0NiwgMHhlMiwgCi0weDAyLCAweGM0LCAweDhjLCAweGUzLCAweDAwLCAweDYwLCAweGEwLCAweGUzLCAweGU3LCAweGZmLCAweGZmLCAweGVhLCAKLTB4MDAsIDB4NTAsIDB4ODgsIDB4ZTUsIDB4ZjIsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIAotMHgwMCwgMHg1MCwgMHg4MCwgMHhlNSwgMHgwMSwgMHgwMCwgMHhhMCwgMHhlMSwgMHhmMCwgMHg0NywgMHhiZCwgMHhlOCwgCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweGEwLCAweDk0LCAweGU1LCAweDBhLCAweDAwLCAweDU1LCAweGUxLCAKLTB4MTQsIDB4YTAsIDB4ODAsIDB4ZTUsIDB4ZTUsIDB4ZmYsIDB4ZmYsIDB4MWEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIAotMHhmNSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgCi0weDAwLCAweDgwLCAweDIwLCAweDQwLCAweDY4LCAweDgyLCAweDlmLCAweGU1LCAweDBiLCAweDkyLCAweGEwLCAweGUzLCAKLTB4NjQsIDB4YTIsIDB4OWYsIDB4ZTUsIDB4NTgsIDB4YjAsIDB4OWEsIDB4ZTUsIDB4MGUsIDB4ZjAsIDB4YTAsIDB4ZTEsIAotMHg1NCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzZiwgMHg0MCwgMHgyZCwgMHhlOSwgCi0weDAwLCAweDAwLCAweDRmLCAweGUxLCAweDFmLCAweDAwLCAweDAwLCAweGUyLCAweDEyLCAweDAwLCAweDUwLCAweGUzLCAKLTB4NTQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4ZTMsIAotMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgwNCwgMHg1MCwgMHhhMCwgMHhlMywgMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwgCi0weDA5LCAweDAwLCAweDAwLCAweGVhLCAweDAyLCAweDAwLCAweDE0LCAweGUzLCAweDUzLCAweDAwLCAweDAwLCAweDFiLCAKLTB4ODAsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MjAsIDB4MDAsIDB4MTQsIDB4ZTMsIAotMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwNywgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgCi0weDAxLCAweDA2LCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLCAweDA4LCAweDAwLCAweDE0LCAweGUzLCAKLTB4NDUsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MDUsIDB4MTQsIDB4ZTMsIDB4NGEsIDB4MDAsIDB4MDAsIDB4MWIsIAotMHgwMiwgMHgwOCwgMHgxNCwgMHhlMywgMHg0YiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhlNSwgMHgwZSwgMHgxNCwgMHhlMywgCi0weDA3LCAweDAwLCAweDAwLCAweDBhLCAweDA0LCAweDIwLCAweDk4LCAweGU1LCAweDBjLCAweDEwLCAweDk4LCAweGU1LCAKLTB4MDQsIDB4MzAsIDB4NTIsIDB4ZTIsIDB4M2MsIDB4MzAsIDB4YTAsIDB4YjMsIDB4MDQsIDB4MzAsIDB4ODgsIDB4ZTUsIAotMHgwMiwgMHgwMCwgMHg5MSwgMHhlNywgMHgwZiwgMHhlMCwgMHhhMCwgMHhlMSwgCi0weDEwLCAweGZmLCAweDJmLCAweGUxLCAweDAxLCAweDUwLCAweDU1LCAweGUyLCAweDAzLCAweDAwLCAweDAwLCAweDBhLCAKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MGMsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsIAotMHgxYiwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwOCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwgCi0weDBiLCAweDAwLCAweDAwLCAweDBhLCAweDAxLCAweDBjLCAweDE0LCAweGUzLCAweDk4LCAweDAxLCAweDlmLCAweDE1LCAKLTB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDQsIDB4MTQsIDB4ZTMsIAotMHg4YywgMHgwMSwgMHg5ZiwgMHgxNSwgMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgCi0weDAxLCAweDA5LCAweDE0LCAweGUzLCAweDgwLCAweDAxLCAweDlmLCAweDE1LCAweDBmLCAweGUwLCAweGEwLCAweDExLCAKLTB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsIAotMHgxNiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg1NCwgMHhlMCwgMHg4ZiwgMHhlMiwgMHgwNCwgMHgwMCwgMHgxNCwgMHhlMywgCi0weDQwLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDBhLCAweDE0LCAweGUzLCAKLTB4NDQsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MDksIDB4MTQsIDB4ZTMsIAotMHg0OCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwMiwgMHgxNCwgMHhlMywgCi0weDRjLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDA0LCAweDE0LCAweGUzLCAKLTB4NTAsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MGEsIDB4MTQsIDB4ZTMsIAotMHgyMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgxYiwgCi0weDEwLCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLCAweDFjLCAweDAwLCAweDAwLCAweDFiLCAKLTB4MDAsIDB4NDAsIDB4OTksIDB4ZTUsIDB4MDQsIDB4NTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4NDAsIDB4OTQsIDB4ZTIsIAotMHgxYiwgMHhmZiwgMHgyZiwgMHgxMSwgMHgzZiwgMHg0MCwgMHhiZCwgMHhlOCwgMHgwNCwgMHhmMCwgMHg1ZSwgMHhlMiwgCi0weGMwLCAweDAwLCAweDgwLCAweGUzLCAweDAwLCAweGYwLCAweDYxLCAweGUxLCAweGZhLCAweGZmLCAweGZmLCAweGVhLCAKLTB4MTgsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MWMsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIAotMHg1NCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgxYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxNCwgMHgwMCwgMHg5YSwgMHhlNSwgCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDIwLCAweDEwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweGEwLCAweGUzLCAKLTB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MjQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIAotMHgyOCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyYywgMHgxMCwgMHg5YSwgMHhlNSwgCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDMwLCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAKLTB4MzQsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIAotMHgzOCwgMHhlMCwgMHg5YSwgMHhlNSwgMHgzYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxOCwgMHgwMCwgMHg5YSwgMHhlNSwgCi0weDExLCAweGZmLCAweDJmLCAweGUxLCAweDM4LCAweGUwLCAweDlhLCAweGU1LCAweDNjLCAweDEwLCAweDlhLCAweGU1LCAKLTB4MTQsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NjQsIDB4MjAsIDB4OWYsIDB4ZTUsIAotMHgwMCwgMHgzMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgzMCwgMHg1MywgMHhlMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhiYSwgCi0weDAwLCAweDMwLCAweDgyLCAweGU1LCAweDBjLCAweDAwLCAweDkyLCAweGU1LCAweDA4LCAweDMwLCAweDkyLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4OTEsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDMsIDB4MTAsIDB4ODAsIDB4ZTcsIAotMHgwNCwgMHgzMCwgMHg1MywgMHhlMiwgMHgzYywgMHgzMCwgMHhhMCwgMHhiMywgMHgwOCwgMHgzMCwgMHg4MiwgMHhlNSwgCi0weDAxLCAweDAwLCAweGEwLCAweGUzLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDNjLCAweDEwLCAweDlmLCAweGU1LCAKLTB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIAotMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgxMCwgMHgwMCwgMHg5ZiwgMHhlNSwgCi0weDA4LCAweDEwLCAweDkwLCAweGU1LCAweDA0LCAweDEwLCAweDUxLCAweGUyLCAweDNjLCAweDEwLCAweGEwLCAweGIzLCAKLTB4MDgsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIAotMHhjYywgMHgwNCwgMHgwMCwgMHg4MCwgMHg3MSwgMHgyYiwgMHhmZiwgMHhmZiwgMHhkMSwgMHgzZCwgMHhmZiwgMHhmZiwgCi0weGM5LCAweDJiLCAweGZmLCAweGZmLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweGM5LCAweDFjLCAweDg5LCAweDA4LCAKLTB4ODksIDB4MDAsIDB4MDEsIDB4MjMsIDB4ODUsIDB4NGEsIDB4NWIsIDB4MDcsIDB4MTgsIDB4NDMsIDB4MTMsIDB4NjgsIAotMHg1YiwgMHgxOCwgMHgxMywgMHg2MCwgMHgwMCwgMHgxZiwgMHg4MSwgMHhhMywgMHg1YiwgMHgxYSwgMHgxOCwgMHg0NywgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIAotMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgCi0weDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZTQsIDB4MmQsIDB4MDAsIDB4ODAsIAotMHg5OCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg5OCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwgCi0weDk0LCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAzLCAweDAwLCAweDUwLCAweGUxLCAKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHg3OCwgMHgwMCwgMHg5ZiwgMHhlNSwgCi0weDAwLCAweDIwLCAweDgwLCAweGU1LCAweDc0LCAweDAwLCAweDlmLCAweGU1LCAweDc0LCAweDEwLCAweDlmLCAweGU1LCAKLTB4MDEsIDB4MjAsIDB4NDAsIDB4ZTAsIDB4NjAsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIAotMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwgMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwgCi0weDA0LCAweDIwLCAweDUyLCAweGUyLCAweDAwLCAweDAwLCAweDAwLCAweDBhLCAweGY4LCAweGZmLCAweGZmLCAweGVhLCAKLTB4NTAsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsIDB4NGMsIDB4MDAsIDB4OWYsIDB4ZTUsIAotMHg0YywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwgMHgyYywgMHgzMCwgMHg5ZiwgMHhlNSwgCi0weDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAzLCAweDAwLCAweDUwLCAweGUxLCAweDAzLCAweDAwLCAweDAwLCAweDFhLCAKLTB4MDQsIDB4MTAsIDB4ODEsIDB4ZTIsIDB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIAotMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgyOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwgCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweDdjLCAweDM0LCAweDAwLCAweDgwLCAweDgwLCAweDMwLCAweDAwLCAweDgwLCAKLTB4YWQsIDB4ZGUsIDB4YWQsIDB4ZGUsIDB4YzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MzcsIDB4MDAsIDB4ODAsIAotMHg4MCwgMHgzNCwgMHgwMCwgMHg4MCwgMHhjNCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzZiwgMHgwMCwgMHg4MCwgCi0weDQwLCAweDM4LCAweDAwLCAweDgwLCAweGM4LCAweDA0LCAweDAwLCAweDgwLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLCAKLTB4NzEsIDB4ZWEsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MzksIDB4ZmUsIDB4ZmYsIDB4ZWEsIAotMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2MywgMHhmZSwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgCi0weDFiLCAweGZmLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDZiLCAweGVhLCAweGZmLCAweGVhLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIAotMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwgCi0weDAwLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGI5LCAweDBiLCAweGZmLCAweGZmLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZDUsIDB4MGIsIDB4ZmYsIDB4ZmYsIDB4MDMsIDB4ZmYsIDB4MDYsIDB4NTQsIAotMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwNCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weGExLCAweDA1LCAweGZmLCAweGZmLCAweDA0LCAweGZmLCAweDA3LCAweDU0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAKLTB4YjUsIDB4MDQsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDUsIDB4ZmYsIDB4ZmYsIAotMHgwNSwgMHhmZiwgMHgwNSwgMHg1NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwNCwgMHhmZiwgMHhmZiwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDU1LCAweDA1LCAweGZmLCAweGZmLCAweDAxLCAweGZmLCAweDA0LCAweDAwLCAKLTB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NDEsIDB4MTgsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHg2MSwgMHgwZSwgMHhmZiwgMHhmZiwgMHgwMiwgMHhmZiwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weGExLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDAyLCAweGZmLCAweGZmLCAKLTB4ZmYsIDB4ZmYsIDB4MDEsIDB4NDQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwZCwgMHhmZiwgMHhmZiwgMHgwNiwgMHgwMCwgMHhmZiwgMHgwMCwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDNkLCAweDUwLCAweGZmLCAweGZmLCAweDgxLCAweDUwLCAweGZmLCAweGZmLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLTB4NDgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MTEsIDB4NzUsIDB4MjEsIDB4NDAsIDB4MWIsIDB4NzUsIDB4MjEsIDB4NDAsIAotMHgzMSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg0OSwgMHg3NSwgMHgyMSwgMHg0MCwgCi0weDU1LCAweDc1LCAweDIxLCAweDQwLCAweDYzLCAweDc1LCAweDIxLCAweDQwLCAweDdkLCAweDc1LCAweDIxLCAweDQwLCAKLTB4YTksIDB4NzUsIDB4MjEsIDB4NDAsIDB4NmQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzUsIDB4NzYsIDB4MjEsIDB4NDAsIAotMHhkMywgMHg3NiwgMHgyMSwgMHg0MCwgMHhkZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhlNywgMHg3NiwgMHgyMSwgMHg0MCwgCi0weDk5LCAweDc3LCAweDIxLCAweDQwLCAweGE3LCAweDc3LCAweDIxLCAweDQwLCAweGI1LCAweDc3LCAweDIxLCAweDQwLCAKLTB4NjEsIDB4NzgsIDB4MjEsIDB4NDAsIDB4NWYsIDB4N2MsIDB4MjEsIDB4NDAsIDB4ZTksIDB4N2MsIDB4MjEsIDB4NDAsIAotMHg4OSwgMHg3ZCwgMHgyMSwgMHg0MCwgMHhiZCwgMHg3ZSwgMHgyMSwgMHg0MCwgMHhjOSwgMHg3ZSwgMHgyMSwgMHg0MCwgCi0weDI5LCAweDdmLCAweDIxLCAweDQwLCAweDhkLCAweDdmLCAweDIxLCAweDQwLCAweGI5LCAweDdmLCAweDIxLCAweDQwLCAKLTB4ZGQsIDB4N2YsIDB4MjEsIDB4NDAsIDB4MWQsIDB4ODAsIDB4MjEsIDB4NDAsIDB4NDUsIDB4ODAsIDB4MjEsIDB4NDAsIAotMHg4ZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHhjNSwgMHg4MCwgMHgyMSwgMHg0MCwgCi0weGQ1LCAweDgwLCAweDIxLCAweDQwLCAweDFkLCAweDgxLCAweDIxLCAweDQwLCAweDViLCAweDgxLCAweDIxLCAweDQwLCAKLTB4YjEsIDB4ODEsIDB4MjEsIDB4NDAsIDB4MTEsIDB4ODIsIDB4MjEsIDB4NDAsIDB4MWIsIDB4ODIsIDB4MjEsIDB4NDAsIAotMHgxZiwgMHg4MiwgMHgyMSwgMHg0MCwgMHg4ZCwgMHg4MiwgMHgyMSwgMHg0MCwgMHhkOSwgMHg4MiwgMHgyMSwgMHg0MCwgCi0weDMxLCAweDgzLCAweDIxLCAweDQwLCAweDZkLCAweDgzLCAweDIxLCAweDQwLCAweGQxLCAweDgzLCAweDIxLCAweDQwLCAKLTB4MDksIDB4ODQsIDB4MjEsIDB4NDAsIDB4MTksIDB4ODQsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODQsIDB4MjEsIDB4NDAsIAotMHg2MSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg3NSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg4NCwgMHgyMSwgMHg0MCwgCi0weGE3LCAweDg0LCAweDIxLCAweDQwLCAweGIxLCAweDg0LCAweDIxLCAweDQwLCAweDE1LCAweDg1LCAweDIxLCAweDQwLCAKLTB4NDUsIDB4ODUsIDB4MjEsIDB4NDAsIDB4NTEsIDB4ODUsIDB4MjEsIDB4NDAsIDB4YzUsIDB4ODUsIDB4MjEsIDB4NDAsIAotMHhjZiwgMHg4NSwgMHgyMSwgMHg0MCwgMHhkOSwgMHg4NSwgMHgyMSwgMHg0MCwgMHhlMywgMHg4NSwgMHgyMSwgMHg0MCwgCi0weGVkLCAweDg1LCAweDIxLCAweDQwLCAweGY3LCAweDg1LCAweDIxLCAweDQwLCAweDAxLCAweDg2LCAweDIxLCAweDQwLCAKLTB4MGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MTUsIDB4ODYsIDB4MjEsIDB4NDAsIDB4MDEsIDB4ODksIDB4MjEsIDB4NDAsIAotMHgxZiwgMHg4NiwgMHgyMSwgMHg0MCwgMHgyOSwgMHg4NiwgMHgyMSwgMHg0MCwgMHgzMywgMHg4NiwgMHgyMSwgMHg0MCwgCi0weDNkLCAweDg2LCAweDIxLCAweDQwLCAweDY1LCAweDg2LCAweDIxLCAweDQwLCAweDZmLCAweDg2LCAweDIxLCAweDQwLCAKLTB4ZDEsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZGIsIDB4ODYsIDB4MjEsIDB4NDAsIDB4ZTUsIDB4ODYsIDB4MjEsIDB4NDAsIAotMHhlZiwgMHg4NiwgMHgyMSwgMHg0MCwgMHhmOSwgMHg4NiwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgCi0weDAzLCAweDg3LCAweDIxLCAweDQwLCAweDY5LCAweDg3LCAweDIxLCAweDQwLCAweGI1LCAweDg3LCAweDIxLCAweDQwLCAKLTB4ZjksIDB4ODcsIDB4MjEsIDB4NDAsIDB4MDksIDB4ODgsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIAotMHg1NSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg1OSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg1ZCwgMHg4OCwgMHgyMSwgMHg0MCwgCi0weGI1LCAweDg4LCAweDIxLCAweDQwLCAweGRkLCAweDg4LCAweDIxLCAweDQwLCAweGU5LCAweDg4LCAweDIxLCAweDQwLCAKLTB4ZWQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjEsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4ODgsIDB4MjEsIDB4NDAsIAotMHhmOSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHgyZCwgMHg4NSwgMHgyMSwgMHg0MCwgCi0weDg5LCAweDg1LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAKLTB4MGQsIDB4ODksIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4ZTEsIDB4NzQsIDB4MjEsIDB4NDAsIAotMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgCi0weDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAKLTB4NmIsIDB4NzgsIDB4MjEsIDB4NDAsIDB4ZjUsIDB4N2IsIDB4MjEsIDB4NDAsIDB4MzEsIDB4N2MsIDB4MjEsIDB4NDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDVjLCAweDAxLCAweDE4LCAweDQwLCAweDU4LCAweDAxLCAweDE4LCAweDQwLCAKLTB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwMSwgMHgxOCwgMHg0MCwgCi0weDI0LCAweDgzLCAweDIwLCAweDQwLCAweDI0LCAweGEzLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NzgsIDB4MDEsIDB4MTgsIDB4NDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDAxLCAweDE4LCAweDQwLCAKLTB4ODgsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsIDB4MjQsIDB4YWIsIDB4MjAsIDB4NDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDA4LCAweDAwLCAweDEyLCAweDAwLCAweDE4LCAweDAwLCAweDEyLCAweDAwLCAweDBjLCAweDAwLCAweDEyLCAweDAwLCAKLTB4MWMsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MjQsIDB4YTgsIDB4MjAsIDB4NDAsIDB4YTQsIDB4YTgsIDB4MjAsIDB4NDAsIAotMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weGQxLCAweGE4LCAweDIxLCAweDQwLCAweDJkLCAweGFhLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLTB4ODksIDB4NzAsIDB4MjEsIDB4NDAsIDB4YzksIDB4YTEsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDU3LCAweDg5LCAweDIxLCAweDQwLCAweGQxLCAweGE4LCAweDIxLCAweDQwLCAweGM1LCAweDJmLCAweGZmLCAweGZmLCAKLTB4MDUsIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4ZWYsIDB4MjAsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YTcsIDB4MjEsIDB4NDAsIAotMHgzNCwgMHgyZSwgMHgwMCwgMHg4MCwgMHg0OCwgMHgyZSwgMHgwMCwgMHg4MCwgMHg1YywgMHgyZSwgMHgwMCwgMHg4MCwgCi0weDMwLCAweDMzLCAweDNhLCAweDMxLCAweDMxLCAweDNhLCAweDMxLCAweDMxLCAweDAwLCAweDMwLCAweDM3LCAweDJmLCAKLTB4MzIsIDB4MzMsIDB4MmYsIDB4MzAsIDB4MzEsIDB4MDAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MzUsIAotMHgzNiwgMHgzOSwgMHgwMCwgMHg0MywgMHg2ZiwgMHg3MCwgMHg3OSwgMHg3MiwgMHg2OSwgMHg2NywgMHg2OCwgMHg3NCwgCi0weDIwLCAweDI4LCAweDYzLCAweDI5LCAweDIwLCAweDMyLCAweDMwLCAweDMwLCAweDMxLCAweDIwLCAweDMzLCAweDQzLCAKLTB4NmYsIDB4NmQsIDB4MjAsIDB4NDMsIDB4NmYsIDB4NzIsIDB4NzAsIDB4NmYsIDB4NzIsIDB4NjEsIDB4NzQsIDB4NjksIAotMHg2ZiwgMHg2ZSwgMHgwYSwgMHgwMCwgMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDhjLCAweDUzLCAweGZmLCAweGZmLCAKLTB4MjcsIDB4ZjAsIDB4N2QsIDB4ZmQsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDIsIDB4ZGEsIDB4MGUsIDB4ODIsIDB4MDAsIAotMHgwMSwgMHg0MCwgMHg2NCwgMHgwNCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwgCi0weDY5LCAweDNlLCAweGZmLCAweGZmLCAweGM5LCAweDRmLCAweGZmLCAweGZmLCAweGQ1LCAweDI0LCAweGZmLCAweGZmLCAKLTB4YzksIDB4M2IsIDB4ZmYsIDB4ZmYsIDB4MjksIDB4M2MsIDB4ZmYsIDB4ZmYsIDB4MTksIDB4MWEsIDB4ZmYsIDB4ZmYsIAotMHg2NSwgMHgxMSwgMHhmZiwgMHhmZiwgMHhjYywgMHg1MywgMHhmZiwgMHhmZiwgMHgyMSwgMHg0MCwgMHhmZiwgMHhmZiwgCi0weDg5LCAweDcwLCAweDIxLCAweDQwLCAweDQ5LCAweDcyLCAweDIxLCAweDQwLCAweGQ5LCAweDNmLCAweGZmLCAweGZmLCAKLTB4MjEsIDB4OWEsIDB4MjEsIDB4NDAsIDB4ODUsIDB4MjQsIDB4ZmYsIDB4ZmYsIDB4NjQsIDB4NTMsIDB4ZmYsIDB4ZmYsIAotMHg4YywgMHg1MywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgCi0weDgwLCAweDMwLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4YjAsIDB4NTAsIDB4MDAsIDB4MDAsIDB4N2IsIDB4MGUsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHg2ZSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weGVkLCAweDg5LCAweDIxLCAweDQwLCAweDhiLCAweDg5LCAweDIxLCAweDQwLCAweGE1LCAweDhjLCAweDIxLCAweDQwLCAKLTB4MDUsIDB4OGQsIDB4MjEsIDB4NDAsIDB4Y2QsIDB4OGQsIDB4MjEsIDB4NDAsIDB4OGIsIDB4OGIsIDB4MjEsIDB4NDAsIAotMHhhOSwgMHg4ZSwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4ZiwgMHgyMSwgMHg0MCwgMHg2OSwgMHg4YiwgMHgyMSwgMHg0MCwgCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgCi0weDU5LCAweGJkLCAweDIxLCAweDQwLCAweGMxLCAweGJkLCAweDIxLCAweDQwLCAweDJkLCAweGJlLCAweDIxLCAweDQwLCAKLTB4MDAsIDB4MjAsIDB4MGEsIDB4NGEsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZDEsIDB4MTgsIDB4MmQsIDB4MjMsIAotMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHg4OCwgMHg2MSwgMHhkOCwgMHg2MCwgMHhkOCwgMHg2MywgMHg4MCwgMHgzMiwgCi0weGM4LCAweDYwLCAweDA4LCAweDYxLCAweDQ4LCAweDYxLCAweGQwLCAweDYyLCAweDAzLCAweDQ4LCAweGMwLCAweDQ2LCAKLTB4NDgsIDB4NjAsIDB4ODgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYywgMHgxYywgMHgwNSwgMHgxYywgCi0weDAwLCAweDIzLCAweDAwLCAweDkzLCAweGZmLCAweGY3LCAweGRlLCAweGZmLCAweDY4LCAweDQ5LCAweDBiLCAweDIzLCAKLTB4MWIsIDB4MDIsIDB4Y2YsIDB4MTgsIDB4NzgsIDB4NjgsIDB4MjgsIDB4NDAsIAotMHgwMCwgMHgyMiwgMHhmOCwgMHg2MCwgMHgzYSwgMHg2MSwgMHhiYSwgMHg2OCwgMHgyMiwgMHg0MCwgMHg3YSwgMHg2MSwgCi0weDBjLCAweDFjLCAweDQxLCAweDA5LCAweDAzLCAweGQyLCAweDUxLCAweDA5LCAweDAxLCAweGQyLCAweDgwLCAweDBhLCAKLTB4MDIsIDB4ZDMsIDB4NjAsIDB4NDgsIDB4MDAsIDB4ZjAsIDB4YzIsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4ZjksIDB4NjgsIAotMHg0OSwgMHgwOSwgMHgwMywgMHhkMiwgMHg3OSwgMHg2OSwgMHg0OSwgMHgwOSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwgCi0weDAwLCAweDA2LCAweDAwLCAweDBlLCAweDAzLCAweGYwLCAweGQ0LCAweGZhLCAweGY4LCAweDY4LCAweDAwLCAweDI4LCAKLTB4NzAsIDB4ZDAsIDB4MDAsIDB4MjMsIDB4MDIsIDB4OTMsIDB4MDEsIDB4OTMsIDB4NTQsIDB4NGEsIDB4MDEsIDB4MjMsIAotMHgxOCwgMHg0MywgMHhmOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhkNSwgMHgxZCwgMHg3OSwgMHgzNSwgMHgwMywgMHg5NSwgCi0weDAxLCAweDI0LCAweDAwLCAweDIxLCAweDRmLCAweDRkLCAweGZhLCAweDY4LCAweDIyLCAweDQwLCAweDM5LCAweGQwLCAKLTB4OGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4OTIsIDB4MDAsIDB4NGUsIDB4NGIsIDB4OWIsIDB4NWMsIDB4MWUsIDB4MWMsIAotMHg4MywgMHg0MiwgMHgwNCwgMHhkMCwgMHg0YiwgMHg0YiwgMHhkMywgMHgxOCwgMHg1YiwgMHg3OCwgMHg4MywgMHg0MiwgCi0weDJjLCAweGQxLCAweDQ5LCAweDRiLCAweGQyLCAweDE4LCAweGQzLCAweDc4LCAweDAzLCAweDlkLCAweGVkLCAweDZhLCAKLTB4YWIsIDB4NDIsIDB4MDIsIDB4ZDksIDB4MDMsIDB4OWQsIDB4YzAsIDB4NDYsIDB4ZWIsIDB4NjIsIDB4NTMsIDB4NjgsIAotMHg1YiwgMHgwOCwgMHgwMSwgMHhkMywgMHgwMSwgMHgyMywgMHgwMCwgMHg5MywgMHg4NiwgMHg0MiwgMHgwYSwgMHhkMSwgCi0weDk1LCAweDY4LCAweDAyLCAweDliLCAweDVlLCAweDFjLCAweDAyLCAweDk2LCAweDliLCAweDAwLCAweDNjLCAweDRlLCAKLTB4OWUsIDB4MTksIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4ZjMsIDB4MTgsIDB4OWQsIDB4NjEsIDB4NTMsIDB4NzgsIAotMHg4MywgMHg0MiwgMHgwZCwgMHhkMSwgMHhkMiwgMHg2OCwgMHgwMSwgMHg5YiwgMHg1ZCwgMHgxYywgMHgwMSwgMHg5NSwgCi0weDliLCAweDAwLCAweDM1LCAweDRkLCAweDVkLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGViLCAweDE4LCAKLTB4ZGEsIDB4NjAsIDB4M2EsIDB4NjksIDB4MDEsIDB4MzIsIDB4M2EsIDB4NjEsIDB4NjQsIDB4MDAsIDB4MDEsIDB4MzEsIAotMHgwYiwgMHgyOSwgMHhiZCwgMHhkMywgMHgwMSwgMHgzMCwgMHgwOSwgMHgyOCwgMHhiOCwgMHhkMywgMHgwMCwgMHgyMCwgCi0weDAyLCAweDliLCAweDk5LCAweDAwLCAweDJiLCAweDRhLCAweDg5LCAweDE4LCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAKLTB4YzksIDB4MTgsIDB4ODgsIDB4NjEsIDB4MDEsIDB4OWIsIDB4OTksIDB4MDAsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsIAotMHg5YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHhjOCwgMHg2MCwgMHgwMCwgMHg5YiwgMHgwMCwgMHgyYiwgMHgwYywgMHhkMSwgCi0weDgxLCAweDAwLCAweDg5LCAweDE4LCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGM5LCAweDE4LCAweGNiLCAweDY5LCAKLTB4YzAsIDB4NDYsIDB4OGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDgsIDB4ZTAsIAotMHgwNywgMHhlMCwgMHgwMywgMHg5ZCwgMHhlOCwgMHg2YSwgMHgzMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgzMCwgMHgyMCwgCi0weDAzLCAweDlkLCAweGMwLCAweDQ2LCAweGU4LCAweDYyLCAweDE5LCAweDRhLCAweDc4LCAweDY5LCAweDAwLCAweDI4LCAKLTB4MmEsIDB4ZDAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjEsIDB4MDAsIDB4MjAsIAotMHgwMSwgMHgyNCwgMHgwMCwgMHgyMiwgMHgxMywgMHg0ZSwgMHg3YiwgMHg2OSwgMHgyMywgMHg0MCwgMHgxMCwgMHhkMCwgCi0weDkzLCAweDAwLCAweDliLCAweDE4LCAweDliLCAweDAwLCAweDEyLCAweDRkLCAweDViLCAweDE5LCAweDlkLCAweDc4LCAKLTB4ODUsIDB4NDIsIDB4MDgsIDB4ZDEsIDB4MWQsIDB4NjksIDB4MGIsIDB4MWMsIDB4OWIsIDB4MDAsIDB4OWUsIDB4MTksIAotMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHhkZCwgMHg2MywgMHgwMSwgMHgzMSwgMHg2NCwgMHgwMCwgCi0weDAxLCAweDMyLCAweDBiLCAweDJhLCAweGU2LCAweGQzLCAweDAxLCAweDMwLCAweDA5LCAweDI4LCAweGUxLCAweGQzLCAKLTB4MDAsIDB4MjAsIDB4ODksIDB4MDAsIDB4MDQsIDB4NGEsIDB4ODksIDB4MTgsIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIAotMHhjOSwgMHgxOCwgMHhjOCwgMHg2MywgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDMwLCAweDUzLCAweGZmLCAweGZmLCAweDAwLCAweDAxLCAweDAwLCAweDgwLCAKLTB4MDAsIDB4NDcsIDB4MDgsIDB4NDcsIDB4MTAsIDB4NDcsIDB4MTgsIDB4NDcsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsIAotMHgxOCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwgCi0weDEwLCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LCAKLTB4MDgsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzgsIDB4NTIsIDB4ZmYsIDB4ZmYsIAotMHg4OCwgMHg1MSwgMHhmZiwgMHhmZiwgMHhkNSwgMHhiMCwgMHgyMSwgMHg0MCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgyMCwgCi0weDFhLCAweDQ5LCAweDAxLCAweDI1LCAweDA4LCAweDYwLCAweDFhLCAweDRmLCAweGJiLCAweDIzLCAweDFiLCAweDAxLCAKLTB4ZjgsIDB4MTgsIDB4MDUsIDB4NzMsIDB4MTgsIDB4NDgsIDB4NDEsIDB4NmIsIDB4MmMsIDB4MDUsIDB4MDAsIDB4MjAsIAotMHg3YSwgMHg2ZSwgMHgxNywgMHg0YiwgMHg4YSwgMHg0MiwgMHgxZCwgMHhkMCwgCi0weDE5LCAweDdiLCAweDAwLCAweDI5LCAweDE3LCAweGQxLCAweGQ5LCAweDFkLCAweGZmLCAweDMxLCAweDNhLCAweDMxLCAKLTB4NDksIDB4NzgsIDB4MWUsIDB4MWMsIDB4MDAsIDB4MjksIDB4MTAsIDB4ZDEsIDB4YjAsIDB4NjAsIDB4MTAsIDB4MjAsIAotMHg3MCwgMHg2MCwgMHgxMCwgMHg0YSwgMHgxMCwgMHg0OSwgMHhmZiwgMHhmNywgMHhjMywgMHhmZiwgMHgwMCwgMHgyOCwgCi0weDA3LCAweGQwLCAweDM1LCAweDczLCAweDA0LCAweDIzLCAweGI4LCAweDY5LCAweDE4LCAweDQzLCAweGI4LCAweDYxLCAKLTB4MjAsIDB4NjEsIDB4MDAsIDB4ZjAsIDB4MTcsIDB4ZjgsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHgxOCwgMHg3MywgMHgwNCwgMHgyMywgMHhiOCwgMHg2OSwgMHg5OCwgMHg0MywgMHhiOCwgMHg2MSwgMHgyMCwgMHg2MSwgCi0weGY1LCAweGU3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsIAotMHg3ZCwgMHg3MSwgMHgyMSwgMHg0MCwgMHhmOCwgMHhiNSwgMHgxNSwgMHg0ZiwgMHgzOSwgMHg2YywgMHgxNSwgMHg0OCwgCi0weDQwLCAweDZlLCAweDBjLCAweDFhLCAweDE0LCAweDRlLCAweDcxLCAweDY4LCAweDE0LCAweDRkLCAweGExLCAweDQyLCAKLTB4MDYsIDB4ZDgsIDB4MTQsIDB4NGEsIDB4MGEsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YjksIDB4NmIsIDB4MDksIDB4MTgsIAotMHhmYSwgMHg2YiwgMHgxMSwgMHhlMCwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgyMiwgMHg0MywgMHgwMCwgMHg5MiwgCi0weGI5LCAweDZiLCAweDA5LCAweDE4LCAweDAwLCAweDIwLCAweGZhLCAweDZiLCAweDJiLCAweDFjLCAweGZmLCAweGY3LCAKLTB4OGQsIDB4ZmYsIDB4NzAsIDB4NjgsIDB4MDAsIDB4MWIsIDB4MGEsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIAotMHhiOSwgMHg2YiwgMHhmYSwgMHg2YiwgMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywgMHg4MiwgMHhmZiwgCi0weGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIAotMHgwMCwgMHgwMCwgMHgzNywgMHgwMiwgMHhmMCwgMHhiNSwgMHgyYiwgMHg0ZiwgMHhiOCwgMHg2OCwgMHg3OSwgMHg2OCwgCi0weGMwLCAweDE5LCAweDIwLCAweDMwLCAweDI5LCAweDRhLCAweGZmLCAweGY3LCAweDYzLCAweGZmLCAweDAxLCAweDIwLCAKLTB4YzAsIDB4MDIsIDB4MjgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4YjksIDB4NjgsIDB4MzgsIDB4MWMsIAotMHgyNiwgMHg0ZCwgMHgwMCwgMHgyNCwgMHgyNiwgMHg0ZSwgMHhlZiwgMHgxZCwgMHg3OSwgMHgzNywgMHgwMCwgMHgyOSwgCi0weDMxLCAweGQxLCAweDMxLCAweDY4LCAweDBhLCAweDc4LCAweDEyLCAweDBhLCAweDAzLCAweGQyLCAweDA0LCAweDczLCAKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MGMsIDB4ZDEsIAotMHgwNSwgMHgxYywgMHg0MCwgMHg2OCwgMHgwMCwgMHhmMCwgMHgzZSwgMHhmOSwgMHgzMCwgMHg2OCwgMHgwMCwgMHhmMCwgCi0weDY3LCAweGY4LCAweDAwLCAweDI4LCAweDI2LCAweGQxLCAweDJjLCAweDczLCAweGZmLCAweGY3LCAweDU4LCAweGZmLCAKLTB4MjIsIDB4ZTAsIDB4MDksIDB4MDEsIDB4MDcsIDB4MWMsIDB4NDEsIDB4NjAsIDB4MDgsIDB4MWMsIDB4MTcsIDB4NGEsIAotMHgxNywgMHg0OSwgMHhmZiwgMHhmNywgMHgzNSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNywgMHhkMSwgMHgzYywgMHg3MywgCi0weDA0LCAweDIzLCAweGE4LCAweDY5LCAweDk4LCAweDQzLCAweDk5LCAweDA0LCAweGE4LCAweDYxLCAweDA4LCAweDYxLCAKLTB4ZGEsIDB4ZTcsIDB4MTAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MTAsIDB4MjAsIDB4YjgsIDB4NjAsIAotMHhmZiwgMHhmNywgMHg4MiwgMHhmZiwgMHhkMiwgMHhlNywgMHgwNSwgMHgxYywgMHg0MCwgMHg2OCwgMHgwMCwgMHhmMCwgCi0weDE3LCAweGY5LCAweDMwLCAweDY4LCAweDAwLCAweGYwLCAweDQwLCAweGY4LCAweDAwLCAweDI4LCAweGQ4LCAweGQwLCAKLTB4MDIsIDB4MjMsIDB4ZjgsIDB4NmIsIDB4MTgsIDB4NDMsIDB4ZjgsIDB4NjMsIDB4YzQsIDB4ZTcsIDB4MDAsIDB4MDAsIAotMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhhNSwgMHg1NSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU0LCAweDAxLCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLCAKLTB4N2QsIDB4NzEsIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4NDAsIDB4MDMsIDB4MTAsIDB4NDksIAotMHgwMCwgMHgyNywgMHgwOCwgMHg2MCwgMHgwZiwgMHg0YywgMHhlMCwgMHgxZCwgMHhmZiwgMHgzMCwgMHgzYSwgMHgzMCwgCi0weDQ3LCAweDcwLCAweGUwLCAweDY5LCAweDgwLCAweDAwLCAweDAwLCAweDE5LCAweDAwLCAweDY5LCAweDAwLCAweGYwLCAKLTB4ZDcsIDB4ZjgsIDB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4ZTcsIDB4NjEsIDB4MDEsIDB4ZTAsIAotMHgwMSwgMHgyMCwgMHhlMCwgMHg2MSwgMHgwNywgMHg0OCwgMHgwMiwgMHgyMywgMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywgCi0weGMxLCAweDYzLCAweDI3LCAweDczLCAweGZmLCAweGY3LCAweDAwLCAweGZmLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIAotMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg3OCwgMHg4OCwgCi0weDZkLCAweDI4LCAweDAzLCAweGRiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAKLTB4ZjcsIDB4ZjgsIDB4MTcsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MGQsIDB4NDksIDB4MDksIDB4NTgsIDB4MzgsIDB4MWMsIAotMHhmZiwgMHhmNywgMHhjYiwgMHhmZSwgMHgwMCwgMHgyOCwgMHgwZiwgMHhkMSwgMHgzOSwgMHg3OCwgMHhjOSwgMHgwOSwgCi0weDBjLCAweGQzLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGY4LCAweDY4LCAweDQ2LCAKLTB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MGIsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsIAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weGU4LCAweDAxLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDgyLCAweGIwLCAweDAyLCAweDFjLCAweDQxLCAweDRiLCAKLTB4ZGQsIDB4MWQsIDB4ZmYsIDB4MzUsIDB4M2EsIDB4MzUsIDB4MmYsIDB4NzgsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDAsIAotMHgwMCwgMHgyNywgMHgwMCwgMHhlMCwgMHgwMSwgMHgyNywgMHgyZiwgMHg3MCwgMHgyZiwgMHg3OCwgMHhmYiwgMHgwMCwgCi0weGRiLCAweDE5LCAweDViLCAweDAxLCAweDNhLCAweDRmLCAweGRjLCAweDE5LCAweDQwLCAweDc4LCAweDAwLCAweDAxLCAKLTB4YzcsIDB4MWQsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjAsIDB4ODMsIDB4MDAsIDB4ZDYsIDB4NTgsIDB4YzAsIDB4NDYsIAotMHhlNiwgMHg1MCwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwMCwgMHgyOSwgMHgwZiwgMHhkMCwgCi0weDAwLCAweDIyLCAweGJiLCAweDA4LCAweDAxLCAweDkzLCAweDgzLCAweDQyLCAweDBiLCAweGQ5LCAweDEzLCAweDFjLCAKLTB4OWIsIDB4MDAsIDB4Y2IsIDB4NTgsIDB4ODYsIDB4MDAsIDB4YTMsIDB4NTEsIDB4MDEsIDB4OWIsIDB4MDEsIDB4MzAsIAotMHgwMSwgMHgzMiwgMHg4MywgMHg0MiwgMHhmNSwgMHhkOCwgMHgwMCwgMHhlMCwgMHgxMCwgMHgyNywgMHgyYiwgMHg0OCwgCi0weDAyLCAweDZkLCAweDgwLCAweDZlLCAweDJhLCAweDQ5LCAweDgyLCAweDQyLCAweDAzLCAweGQ4LCAweDgyLCAweDFhLCAKLTB4Y2IsIDB4NmMsIDB4OWEsIDB4MWEsIDB4MDAsIDB4ZTAsIDB4MTIsIDB4MWEsIDB4YmEsIDB4NDIsIDB4MDUsIDB4ZDgsIAotMHgyNiwgMHg0OCwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywgMHgwMSwgMHgyMCwgMHgzNywgMHhlMCwgCi0weGMzLCAweDE5LCAweGNhLCAweDZjLCAweDkzLCAweDQyLCAweDA4LCAweGQ4LCAweDIyLCAweDRhLCAweDNhLCAweDQzLCAKLTB4MDAsIDB4OTIsIDB4MGEsIDB4MWMsIDB4NDksIDB4NmMsIDB4MDksIDB4MTgsIDB4OTIsIDB4NmMsIDB4MjMsIDB4MWMsIAotMHgxMiwgMHhlMCwgMHgxNiwgMHgxYSwgMHgwMCwgMHg5NiwgMHgxYiwgMHg0OSwgMHg0OSwgMHg2YywgMHgwOSwgMHgxOCwgCi0weDE5LCAweDQ4LCAweDgyLCAweDZjLCAweDAzLCAweDIwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDVlLCAweGZlLCAKLTB4YjgsIDB4MWIsIDB4MTgsIDB4NGEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4YTMsIDB4MTksIDB4MTQsIDB4NDgsIAotMHg4MiwgMHg2YywgMHg0MSwgMHg2YywgMHgwMywgMHgyMCwgMHhmZiwgMHhmNywgMHg1MywgMHhmZSwgMHgwMSwgMHgyMCwgCi0weDBkLCAweDQ5LCAweGMwLCAweDQ2LCAweDY4LCAweDcwLCAweDhhLCAweDY5LCAweDkyLCAweDAwLCAweDUyLCAweDE4LCAKLTB4MTcsIDB4NjEsIDB4OGEsIDB4NjksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDAsIDB4MjcsIDB4OGYsIDB4NjEsIAotMHgwMCwgMHhlMCwgMHg4OCwgMHg2MSwgMHgwYywgMHg0OCwgMHgwMiwgMHgyMywgMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywgCi0weGMxLCAweDYzLCAweDAwLCAweDIwLCAweDAxLCAweDI3LCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDRmLCAweDczLCAKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIAotMHg1MCwgMHhiYSwgMHgyMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDE5LCAweDAyLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4MTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4MDcsIDB4NDksIDB4OGEsIDB4NmUsIDB4MTAsIDB4MTgsIDB4MDcsIDB4NGEsIAotMHhkMiwgMHg2YywgMHgxMywgMHgwNCwgMHgxYiwgMHgwYywgMHg4MywgMHg0MiwgMHgwMCwgMHhkOCwgMHg4MCwgMHgxYSwgCi0weDg4LCAweDY2LCAweDg4LCAweDZlLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAweDcwLCAweDQ3LCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIAotMHgwNiwgMHg0OSwgMHg0YSwgMHg2ZSwgMHgxMCwgMHgxOCwgMHgwNiwgMHg0YSwgMHgxMiwgMHg2YywgMHg4MiwgMHg0MiwgCi0weDAwLCAweGQ4LCAweDgwLCAweDFhLCAweDQ4LCAweDY2LCAweDQ4LCAweDZlLCAweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAKLTB4MDgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHgwNSwgMHgyMiwgMHgwYSwgMHg2MCwgMHg4MiwgMHg4OCwgMHhjMCwgMHg0NiwgCi0weDhhLCAweDgwLCAweDAwLCAweDIyLCAweDRhLCAweDcwLCAweDQwLCAweDg4LCAweGMwLCAweDQ2LCAweDQ4LCAweDgwLCAKLTB4Y2EsIDB4ODAsIDB4OGEsIDB4NjAsIDB4Y2EsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDUsIDB4MjIsIDB4MDIsIDB4NjAsIAotMHgwMCwgMHgyMiwgMHg4MiwgMHg4MCwgMHg0MiwgMHg3MCwgMHg0MSwgMHg4MCwgMHhjMiwgMHg4MCwgMHg4MiwgMHg2MCwgCi0weGMyLCAweDYwLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDBlLCAweDQ4LCAKLTB4NDEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsIDB4NjksIDB4NDYsIAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkZCwgMHhmZiwgMHgzOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgCi0weDQ1LCAweDIwLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAxLCAweDI3LCAweGRmLCAweDgwLCAweDY4LCAweDQ2LCAKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4MTEsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MzgsIDB4MWMsIAotMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweGMxLCAweDg4LCAweDA5LCAweDRhLCAKLTB4YzAsIDB4NDYsIDB4OTEsIDB4ODEsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4YmQsIDB4ZmYsIDB4MDEsIDB4MjAsIAotMHg0MCwgMHgwMiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgCi0weGY1LCAweGZlLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAKLTB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzMsIDB4ZmYsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MSwgMHhhMSwgMHgyMSwgCi0weDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDI4LCAweDBmLCAweDAwLCAweDgwLCAKLTB4MDAsIDB4MjAsIDB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzEsIDB4ZmYsIDB4MjEsIDB4YTEsIDB4MjIsIAotMHg1MiwgMHgwMywgMHgwMSwgMHgzMSwgMHg5MSwgMHg2MCwgMHg3MCwgMHg0NywgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgCi0weDAyLCAweDIwLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAKLTB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsIAotMHg3MCwgMHg0NywgMHhjMCwgMHg4OCwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgCi0weDQ4LCAweDYxLCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYzLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAKLTB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDgsIDB4NDksIDB4MGYsIDB4NmIsIAotMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg3MSwgMHhmZiwgMHhmOCwgMHgwNiwgMHhjMCwgMHgwZSwgMHgwMSwgMHhhYiwgCi0weDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweGE5LCAweGZlLCAweDAxLCAweDIwLCAKLTB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHg4MCwgMHhiNSwgMHg4NSwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgCi0weDViLCAweGZmLCAweGY4LCAweDg4LCAweDA0LCAweGE5LCAweDAzLCAweGYwLCAweGM5LCAweGZmLCAweDAxLCAweGFiLCAKLTB4NTgsIDB4ODAsIDB4MDEsIDB4YTgsIDB4NDAsIDB4ODgsIDB4MDAsIDB4MjgsIDB4MGYsIDB4ZDAsIDB4MDEsIDB4YTgsIAotMHg0MCwgMHg4OCwgMHg4MCwgMHgwOCwgMHgwMywgMHgzOCwgMHg4MCwgMHgwOCwgMHgwMSwgMHgzMCwgMHgwNCwgMHgzYiwgCi0weDU4LCAweDcwLCAweDA0LCAweDk4LCAweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkxLCAweDQwLCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDUsIDB4ZTAsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIAotMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNCwgMHg5OCwgMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgCi0weDY4LCAweDQ2LCAweGZmLCAweGY3LCAweDc1LCAweGZlLCAweDAxLCAweDIwLCAweDA1LCAweGIwLCAweDgwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTQsIDB4NGYsIDB4MzksIDB4N2IsIAotMHgwMCwgMHgyOSwgMHgyMCwgMHhkMSwgMHhmOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwgMHg0OSwgMHg3OCwgCi0weDAwLCAweDI5LCAweDFhLCAweGQxLCAweDEwLCAweDQ5LCAweDA1LCAweDIyLCAweDAwLCAweDkyLCAweDA4LCAweDIyLCAKLTB4MDAsIDB4YWIsIDB4NWEsIDB4ODAsIDB4OTgsIDB4ODAsIDB4MDYsIDB4MjAsIDB4MDAsIDB4YWIsIDB4NTgsIDB4NzAsIAotMHgwMCwgMHgyNCwgMHhkYywgMHg4MCwgMHgwOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHg0OCwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDAxLCAweDIwLCAweDM4LCAweDczLCAweDY4LCAweDQ2LCAweDA4LCAweDMxLCAKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmUsIDB4MDAsIDB4MjgsIDB4MDAsIDB4ZDAsIDB4M2MsIDB4NzMsIDB4MDQsIDB4YjAsIAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgCi0weGE0LCAweDJhLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAKLTB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZjksIDB4ZmUsIDB4YmEsIDB4NjgsIDB4MGQsIDB4NGMsIDB4MGUsIDB4NDgsIAotMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwZCwgMHg0OSwgMHhmZiwgMHhmNywgMHhlNCwgMHhmYywgMHgwMCwgMHgyOCwgCi0weDBjLCAweGRhLCAweDA1LCAweGUwLCAweGI5LCAweDg4LCAweDBiLCAweDRiLCAweGZmLCAweGY3LCAweGRmLCAweGZjLCAKLTB4MDAsIDB4MjgsIDB4MDUsIDB4ZGEsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIAotMHhmZiwgMHhmNywgMHgyMiwgMHhmZSwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgCi0weDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAKLTB4MGQsIDB4NzYsIDB4MjEsIDB4NDAsIDB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NTksIDB4YmQsIDB4MjEsIDB4NDAsIAotMHgwMCwgMHhiNSwgMHhjMCwgMHg4OCwgMHgwMywgMHhmMCwgMHgyZSwgMHhmZiwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGUyLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZGQsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIAotMHgwMSwgMHgxYywgMHgwMiwgMHgyMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weGIwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweDA4LCAweDFjLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAKLTB4YjUsIDB4ZmUsIDB4MjEsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4YTQsIDB4ZmMsIDB4MDQsIDB4MWMsIDB4MjAsIDB4NGEsIAotMHgwMCwgMHgyMSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhhMCwgMHhmYywgMHgwMCwgMHgyOCwgMHgyNywgMHhkMCwgCi0weDA0LCAweGE5LCAweDFkLCAweDRhLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDk5LCAweGZjLCAweDA0LCAweGE4LCAKLTB4MDAsIDB4MjMsIDB4MDEsIDB4MmYsIDB4MDYsIDB4ZDEsIDB4MGMsIDB4YWEsIDB4MDIsIDB4MzIsIDB4MDAsIDB4MjEsIAotMHgxMywgMHg2MCwgMHgwMSwgMHgzMSwgMHgxMCwgMHgyOSwgMHhmYiwgMHhkMywgMHgwMSwgMHg2OCwgMHgwNCwgMHgyOSwgCi0weDA0LCAweGQ5LCAweDg5LCAweDA4LCAweDAzLCAweDM5LCAweDg5LCAweDA4LCAweDAxLCAweDMxLCAweDAwLCAweGUwLCAKLTB4MTksIDB4MWMsIDB4MDAsIDB4YWIsIDB4NTksIDB4NzAsIDB4MDYsIDB4YTksIDB4MDksIDB4NzgsIDB4YzAsIDB4NDYsIAotMHhkOSwgMHg4MCwgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNywgMHg5OCwgMHhjMCwgMHg0NiwgCi0weDAzLCAweDkwLCAweDA0LCAweDMzLCAweDA4LCAweGFkLCAweDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLCAKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NmUsIDB4ZmMsIDB4NjgsIDB4NDYsIAotMHgyOSwgMHgxYywgMHhmZiwgMHhmNywgMHhiNywgMHhmZCwgMHgwMSwgMHgyMCwgMHg0NiwgMHhiMCwgMHhiMCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDU5LCAweGIxLCAweDIxLCAweDQwLCAKLTB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIAotMHgwMiwgMHgyMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgCi0weDAxLCAweDFjLCAweDAxLCAweDIwLCAweGZmLCAweGY3LCAweGEyLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MDIsIDB4ZjgsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNywgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywgCi0weDAxLCAweGE5LCAweGZmLCAweGY3LCAweDRkLCAweGZlLCAweDIxLCAweDQ4LCAweGZmLCAweGY3LCAweDNjLCAweGZjLCAKLTB4MDAsIDB4OTAsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MDEsIDB4YmEsIDB4NjgsIDB4MDQsIDB4MzAsIDB4ZmMsIDB4MmEsIAotMHgyNSwgMHhkOCwgMHhmZiwgMHgyMywgMHgwOSwgMHgzMywgMHg5OCwgMHg0MiwgMHgyMSwgMHhkOCwgMHgxOSwgMHgyYywgCi0weDFmLCAweGQ4LCAweGZkLCAweDg4LCAweGY4LCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkwLCAweGY5LCAweDFkLCAKLTB4MDksIDB4MzEsIDB4MDYsIDB4YWIsIDB4MDAsIDB4MjAsIDB4N2UsIDB4NzgsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZGQsIAotMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgCi0weDQwLCAweGM5LCAweDQwLCAweGMzLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDdlLCAweDc4LCAKLTB4ODYsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MjAsIDB4MWMsIDB4MDUsIDB4YTksIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsIAotMHgyMSwgMHhmYywgMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHgwMSwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgCi0weDE4LCAweDQzLCAweDAxLCAweGFiLCAweDE4LCAweDcwLCAweDA3LCAweDQ5LCAweDAwLCAweDk4LCAweGZmLCAweGY3LCAKLTB4MDYsIDB4ZmMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4NGYsIDB4ZmQsIDB4MDEsIDB4MjAsIAotMHg0NywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgCi0weDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweDFiLCAweGZlLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4ZmMsIDB4ODgsIDB4MjUsIDB4NGQsIAotMHg2OCwgMHg2OCwgMHgwMSwgMHgzMCwgMHg2OSwgMHg0NiwgMHg2OCwgMHg2MCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgCi0weGY1LCAweGZkLCAweDEwLCAweDJjLCAweDA4LCAweGQzLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAKLTB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MTcsIDB4ZTAsIAotMHg3OCwgMHg3OCwgMHg4MiwgMHgwMCwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywgMHgwMCwgMHgyMCwgMHhiOSwgMHg2OCwgCi0weDAwLCAweDJhLCAweDE1LCAweGQ5LCAweDQwLCAweGNiLCAweDBmLCAweDFjLCAKLTB4MDEsIDB4MzEsIDB4YmUsIDB4NDIsIDB4MGQsIDB4ZDAsIDB4MDAsIDB4YWEsIDB4MTIsIDB4NzgsIDB4NDAsIDB4MjMsIAotMHgxYSwgMHg0MywgMHgwMCwgMHhhYiwgMHgxYSwgMHg3MCwgMHgwNCwgMHgyMiwgMHhkYSwgMHg4MCwgMHgwMiwgMHg5MCwgCi0weDAzLCAweDkxLCAweDA0LCAweDMzLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDE1LCAweGUwLCAweDAxLCAweDMwLCAKLTB4OTAsIDB4NDIsIDB4ZTksIDB4ZDMsIDB4MDAsIDB4YWIsIDB4NWMsIDB4NzAsIDB4MDIsIDB4OTQsIDB4NjksIDB4NjgsIAotMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHgzMywgMHgwMCwgMHgyYSwgCi0weDA1LCAweGQ5LCAweDBmLCAweDFjLCAweDgwLCAweGMzLCAweDAxLCAweDMwLCAweDAxLCAweDMxLCAweDkwLCAweDQyLCAKLTB4ZjksIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4ZjcsIDB4ZmMsIDB4MDEsIDB4MjAsIAotMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5YywgMHgwMywgMHgwMCwgMHg4MCwgCi0weDkwLCAweGI0LCAweDIzLCAweDQ4LCAweDAwLCAweDY4LCAweDAxLCAweDIxLCAweDQyLCAweDA5LCAweDAwLCAweGQzLCAKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MjcsIDB4M2EsIDB4MWMsIDB4NDMsIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDIsIDB4MjIsIAotMHgxMSwgMHg0MywgMHgxZSwgMHg0YSwgMHgyMCwgMHgyNCwgMHhkMywgMHg2OCwgMHgwMSwgMHgyYiwgMHgyZSwgMHhkMSwgCi0weDgwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDI0LCAweDBjLCAweDQzLCAweDIwLCAweDFjLCAweDFiLCAweDIzLCAKLTB4ZGIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4OGIsIDB4MDksIDB4MGIsIDB4MDAsIDB4ZDIsIDB4MDQsIDB4MjcsIAotMHgzOCwgMHg0MywgMHhkMSwgMHg2ZiwgMHgwOSwgMHg2OCwgMHgwOSwgMHgwYSwgMHgwNywgMHhkMiwgMHhkMSwgMHgxZCwgCi0weDc5LCAweDMxLCAweDA5LCAweDY4LCAweDA5LCAweDY4LCAweDA5LCAweDBhLCAweDAxLCAweGQzLCAweDA4LCAweDIzLCAKLTB4MTgsIDB4NDMsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4ODksIDB4NzksIDB4MDMsIDB4MjksIAotMHgwMiwgMHhkMSwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHgxOCwgMHg0MywgMHgwYiwgMHg0OSwgMHgwOSwgMHg2YSwgCi0weDEwLCAweDIyLCAweDRiLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIyLCAweDEwLCAweDQzLCAweDg5LCAweDA3LCAKLTB4ODksIDB4MGYsIDB4ODksIDB4MDEsIDB4MDgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MGMsIAotMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgwYywgMHg0MywgMHgyMCwgMHgxYywgMHhlYywgMHhlNywgMHgwMCwgMHgwMCwgCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGMwLCAweDAwLCAweDE4LCAweDQwLCAKLTB4ZjAsIDB4YjUsIDB4M2EsIDB4NGMsIDB4MjAsIDB4MWMsIDB4MDQsIDB4ZjAsIDB4MDcsIDB4ZmEsIDB4MzksIDB4NDgsIAotMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhjNywgMHgxOCwgMHhiOSwgMHg3OSwgMHgzNywgMHg0ZSwgMHhjNSwgMHgxZCwgCi0weDc5LCAweDM1LCAweDA2LCAweDI5LCAweDYyLCAweGQyLCAweDAyLCAweGEzLCAweDViLCAweDVjLCAweDViLCAweDAwLCAKLTB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsIDB4MDMsIDB4MGUsIDB4MWUsIDB4MzcsIDB4NGUsIDB4NTUsIDB4MDEsIDB4MjAsIAotMHhiOCwgMHg3MSwgMHgwMCwgMHgyMCwgMHhiMCwgMHg2MCwgMHhmZiwgMHhmNywgMHg5NSwgMHhmZiwgMHgwNSwgMHgyMywgCi0weDk4LCAweDQzLCAweDAwLCAweGYwLCAweDZmLCAweGY4LCAweDBjLCAweGUwLCAweGZmLCAweGY3LCAweDhlLCAweGZmLCAKLTB4YzAsIDB4MDgsIDB4MDYsIDB4ZDMsIDB4YjAsIDB4NjgsIDB4NDEsIDB4MWMsIDB4YjEsIDB4NjAsIDB4MGEsIDB4MjgsIAotMHgwMywgMHhkOSwgMHgwNCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwMiwgMHgyMCwgMHhiOCwgMHg3MSwgMHg2NCwgMHgyMiwgCi0weDIwLCAweDFjLCAweDJiLCAweGUwLCAweDA2LCAweDFjLCAweGMwLCAweDZmLCAweDgwLCAweDIzLCAweDAxLCAweDY4LCAKLTB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDMsIDB4MjAsIDB4YjgsIDB4NzEsIDB4MjAsIDB4MWMsIDB4MjAsIDB4NGEsIAotMHgwMCwgMHgyMSwgMHgwNCwgMHhmMCwgMHg5OSwgMHhmOSwgMHhmMCwgMHg2ZiwgMHgwNCwgMHgyMywgMHgwMSwgMHg2OCwgCi0weDk5LCAweDQzLCAweDAxLCAweDYwLCAweDI4LCAweDY4LCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDUsIDB4MjEsIDB4YjksIDB4NzEsIDB4MjksIDB4NjgsIAotMHgwNCwgMHgyMywgMHgwYSwgMHg2OCwgMHg5YSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMCwgMHg2ZiwgMHgwMSwgMHg2OCwgCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweGZmLCAweGY3LCAweDVhLCAweGZmLCAweDA4LCAweDIzLCAweDE4LCAweDQzLCAKLTB4MDAsIDB4ZjAsIDB4MzQsIDB4ZjgsIDB4MjAsIDB4MWMsIDB4MTAsIDB4NGEsIDB4MDAsIDB4MjEsIDB4MDQsIDB4ZjAsIAotMHg3NywgMHhmOSwgMHhlNSwgMHhlNywgMHhmZiwgMHhmNywgMHg0ZSwgMHhmZiwgMHgwNCwgMHgyMywgMHgxOCwgMHg0MywgCi0weDAwLCAweGYwLCAweDI4LCAweGY4LCAweGRlLCAweGU3LCAweDAwLCAweDIwLCAweDI5LCAweDY4LCAweDYwLCAweDIzLCAKLTB4MGEsIDB4NjgsIDB4OWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmEsIDB4ZDUsIDB4ZTcsIAotMHgwNiwgMHgyMCwgMHhiOCwgMHg3MSwgMHhkMiwgMHhlNywgMHgwMCwgMHgwMCwgMHhhOSwgMHg3OSwgMHgyMSwgMHg0MCwgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDljLCAweDAzLCAweDAwLCAweDgwLCAweDMwLCAweDc1LCAweDAwLCAweDAwLCAKLTB4MTAsIDB4MjcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MjAsIAotMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg3MSwgMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwgCi0weDA0LCAweGYwLCAweDRlLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDk4LCAweDFjLCAweDAwLCAweDgwLCAKLTB4YTksIDB4NzksIDB4MjEsIDB4NDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MzEsIDB4NDgsIDB4MDAsIDB4NjgsIAotMHg3OSwgMHgwOCwgMHgwMywgMHhkMywgMHgxMCwgMHgyMywgMHgwMSwgMHgxYywgMHg5OSwgMHg0MywgMHgwMSwgMHhlMCwgCi0weDEwLCAweDIxLCAweDAxLCAweDQzLCAweDJkLCAweDRjLCAweGUyLCAweDY4LCAweDAxLCAweDJhLCAweDA1LCAweGQxLCAKLTB4MjIsIDB4NzksIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTksIDB4NDMsIAotMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHgwMSwgMHg2MCwgMHhlMCwgMHg2OCwgCi0weDAxLCAweDI4LCAweDIwLCAweGQxLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGUwLCAweDE4LCAweDgwLCAweDhiLCAKLTB4ZjksIDB4MDgsIDB4MDQsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4MDEsIDB4MWMsIDB4OTksIDB4NDMsIAotMHgwMSwgMHhlMCwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMiwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMCwgMHgyMCwgCi0weDAyLCAweGYwLCAweDFhLCAweGZiLCAweDM4LCAweDA5LCAweDA3LCAweGQzLCAweGUwLCAweDZmLCAweDgwLCAweDIzLCAKLTB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZTAsIDB4MTgsIDB4MDAsIDB4NjgsIDB4MDAsIDB4ZTAsIAotMHhlMCwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgxNSwgMHg0OCwgCi0weDAxLCAweDZhLCAweDc4LCAweDA5LCAweDAzLCAweGQzLCAweGZmLCAweDIwLCAweDAxLCAweDMwLCAweDA4LCAweDQzLCAKLTB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDgsIDB4MWMsIDB4MDEsIDB4MzMsIDB4OTgsIDB4NDMsIDB4ODAsIDB4MDgsIAotMHg4MCwgMHgwMCwgMHhiYSwgMHgwOSwgMHg5MiwgMHgwNywgMHg5MiwgMHgwZiwgMHgxMCwgMHg0MywgMHg4OCwgMHg0MiwgCi0weDAyLCAweGQwLCAweDBjLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLCAweGUxLCAweDY4LCAweDAxLCAweDI5LCAKLTB4MDgsIDB4ZDEsIDB4NzksIDB4MGEsIDB4MDYsIDB4ZDMsIDB4ZmYsIDB4MjMsIDB4MDQsIDB4MzMsIDB4MTgsIDB4NDAsIAotMHgwMywgMHgyOCwgMHgwMSwgMHhkMSwgMHhmZiwgMHhmNywgMHg4ZSwgMHhmZiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsIAotMHhiMSwgMHhmZSwgMHg4MCwgMHgwOSwgMHgxYiwgMHhkMiwgMHgwZiwgMHg0OCwgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgCi0weGMxLCAweDE4LCAweDRhLCAweDc5LCAweDAwLCAweDJhLCAweDE0LCAweGQxLCAweDAxLCAweDIyLCAweDRhLCAweDcxLCAKLTB4MDAsIDB4MjcsIDB4ODAsIDB4MzAsIDB4MDAsIDB4NjgsIDB4NjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIAotMHgwMSwgMHg2MCwgMHgwOCwgMHg0OCwgMHgwNiwgMHhlMCwgMHgwMiwgMHgyMCwgMHgwMiwgMHhmMCwgMHg4YywgMHhmYywgCi0weDA3LCAweDIwLCAweDAyLCAweGYwLCAweDViLCAweGZjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDM2LCAweGZhLCAKLTB4ZjUsIDB4ZTcsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgCi0weDM3LCAweGZjLCAweGZmLCAweGY3LCAweDg1LCAweGZlLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDA4LCAweDQ4LCAKLTB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDcsIDB4NDgsIDB4MDAsIDB4NmEsIDB4YzAsIDB4NDYsIAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg2NywgMHhmYiwgMHgwMSwgMHgyMCwgCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIAotMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgxNywgMHhmYywgMHhmOCwgMHg4OCwgMHhmZiwgMHhmNywgMHg0MiwgMHhmZiwgCi0weGZmLCAweGY3LCAweDYyLCAweGZlLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAKLTB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHhjNywgMHg4OCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgCi0weDAxLCAweGZjLCAweDAxLCAweDI0LCAweDFhLCAweDRiLCAweDlmLCAweDQyLCAweDBhLCAweGQ5LCAweDAwLCAweGE4LCAKLTB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDIsIDB4MjAsIAotMHhkOCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgyMCwgMHhlMCwgMHgxNCwgMHg0OCwgMHhmZiwgMHhmNywgCi0weGUxLCAweGY5LCAweDA1LCAweDFjLCAweDEzLCAweDRhLCAweDM4LCAweDFjLCAweDA0LCAweGE5LCAweGZmLCAweGY3LCAKLTB4ZGQsIDB4ZjksIDB4MTIsIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZDgsIDB4ZjksIDB4MDEsIDB4MmYsIAotMHgwNiwgMHhkMSwgMHgwYywgMHhhOSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgCi0weDBhLCAweDYwLCAweDAxLCAweDMwLCAweDEwLCAweDI4LCAweGZiLCAweGQzLCAweDEwLCAweDIwLCAweDAwLCAweGFiLCAKLTB4NTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MDUsIDB4OTgsIDB4YzAsIDB4NDYsIAotMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwNiwgMHhhOSwgMHhmZiwgMHhmNywgMHgwZiwgMHhmYiwgMHgyMCwgMHgxYywgCi0weDQ2LCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGZmLCAweDAxLCAweDAwLCAweDAwLCAKLTB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4OWQsIDB4YWYsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIAotMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgCi0weGJiLCAweGZiLCAweGZjLCAweDg4LCAweDc4LCAweDc4LCAweDAxLCAweDI1LCAweDEwLCAweDI4LCAweDAxLCAweGQxLCAKLTB4MTksIDB4MmMsIDB4MDksIDB4ZDksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIAotMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHgwNCwgMHgzMywgMHgyNywgMHhlMCwgCi0weGI4LCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkwLCAweGY4LCAweDY4LCAweGMwLCAweDQ2LCAweDA1LCAweDkwLCAKLTB4MDYsIDB4YWEsIDB4ZmIsIDB4MWQsIDB4MDksIDB4MzMsIDB4MDAsIDB4MjEsIDB4NzgsIDB4NzgsIDB4MDAsIDB4MjgsIAotMHgwZCwgMHhkZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhjYiwgMHg0MCwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgCi0weDAwLCAweDBjLCAweDA0LCAweDI4LCAweGY4LCAweGRiLCAweDQ4LCAweDFjLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAKLTB4NzgsIDB4NzgsIDB4ODgsIDB4NDIsIDB4ZjEsIDB4ZGMsIDB4MGIsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4N2UsIDB4ZjksIAotMHgwNywgMHgxYywgMHgwYSwgMHg0YSwgMHgyMCwgMHgxYywgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywgMHg3YSwgMHhmOSwgCi0weDA4LCAweDQ5LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDc1LCAweGY5LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAKLTB4ZmYsIDB4ZjcsIDB4YmUsIDB4ZmEsIDB4MjgsIDB4MWMsIDB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhjNSwgMHhhZiwgMHgyMSwgMHg0MCwgCi0weDNjLCAweDAyLCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDAwLCAweDI3LCAKLTB4ZTYsIDB4ODgsIDB4YTIsIDB4NjgsIDB4NDcsIDB4NDksIDB4MDgsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDAsIAotMHgwMCwgMHgyZSwgMHgwMSwgMHhkMCwgMHgwMSwgMHgyZSwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyNywgMHgwMSwgMHhlMCwgCi0weDA0LCAweDJlLCAweDAwLCAweGQxLCAweDAzLCAweDI2LCAweDAxLCAweDI1LCAweDQxLCAweDQ4LCAweDA1LCAweDJlLCAKLTB4NjYsIDB4ZDIsIDB4MDIsIDB4YTMsIDB4OWIsIDB4NWQsIDB4NWIsIDB4MDAsIDB4OWYsIDB4NDQsIDB4MDAsIDB4MWMsIAotMHgwMywgMHgwNiwgMHgwOCwgMHgwYywgMHgxMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgwMCwgMHgyMywgMHgwMywgMHhlMCwgCi0weDA1LCAweDgwLCAweDA1LCAweGUwLCAweDAwLCAweDIzLCAweDAzLCAweDgwLCAweDQzLCAweDgwLCAweDA2LCAweGUwLCAKLTB4MDAsIDB4MjMsIDB4MDMsIDB4ODAsIDB4NDUsIDB4ODAsIDB4MDIsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIAotMHgwMywgMHg4MCwgMHhjYiwgMHgxZCwgMHg3OSwgMHgzMywgMHg5ZSwgMHg4OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgCi0weDllLCAweDQyLCAweDAyLCAweGRiLCAweGQyLCAweDA3LCAweGQyLCAweDBmLCAweDAwLCAweGUwLCAweDAxLCAweDIyLCAKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4ODksIDB4ODgsIDB4ZmYsIDB4MjMsIDB4ZTEsIDB4MzMsIAotMHg5OSwgMHg0MywgMHgwMSwgMHgyMywgMHgxOSwgMHg0MywgMHgwNiwgMHg4OCwgMHhmZiwgMHgzMywgMHg5ZSwgMHg0MiwgCi0weDBkLCAweGQxLCAweGZmLCAweDIwLCAweGUxLCAweDMwLCAweDA4LCAweDQzLCAweDAwLCAweDJhLCAweDA0LCAweGQxLCAKLTB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MjAsIDB4ZTAsIDB4MDEsIDB4MjEsIAotMHg4OSwgMHgwMiwgMHgwMSwgMHg0MywgMHgxYywgMHhlMCwgMHgwMSwgMHgyZSwgMHgwYSwgMHhkMSwgMHg0MCwgMHg4OCwgCi0weDAxLCAweDI4LCAweDA0LCAweGQxLCAweDYwLCAweDIzLCAweDE5LCAweDQzLCAweDAwLCAweDJhLCAweDEzLCAweGQwLCAKLTB4MGMsIDB4ZTAsIDB4MjAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MGYsIDB4ZTAsIDB4MDAsIDB4MmUsIDB4MGQsIDB4ZDEsIAotMHg0MCwgMHg4OCwgMHgwMSwgMHgyOCwgMHgwOCwgMHhkMSwgMHhmZiwgMHgyMywgMHg4MSwgMHgzMywgMHgxOSwgMHg0MywgCi0weDAwLCAweDJhLCAweDA1LCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE5LCAweDQzLCAweDAxLCAweGUwLCAKLTB4ODAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDksIDB4MjEsIAotMHg0OSwgMHgwMiwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3MCwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhkMSwgCi0weDAwLCAweDIwLCAweDEyLCAweGUwLCAweGZmLCAweGU3LCAweDY5LCAweDQ2LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAKLTB4ZWYsIDB4ZmEsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDAsIDB4YWIsIAotMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgwNCwgMHgzMywgCi0weGZmLCAweGY3LCAweDIyLCAweGZhLCAweDI4LCAweDFjLCAweDA0LCAweGIwLCAKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHhjMCwgMHg4OCwgMHg1MSwgMHgyMSwgMHg4OSwgMHgwMywgMHgwOCwgMHg2MiwgCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDE2LCAweDRmLCAweGY4LCAweDY4LCAweDAxLCAweDI4LCAKLTB4MDcsIDB4ZDEsIDB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4NDAsIDB4OGEsIDB4ODAsIDB4MjEsIAotMHgwMSwgMHg0MywgMHgxYiwgMHgyMCwgMHgwNywgMHhlMCwgMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhmOCwgMHgxOCwgCi0weDgwLCAweDhiLCAweDAxLCAweDIxLCAweDQ5LCAweDAzLCAweDAxLCAweDQzLCAweDEwLCAweDIwLCAweDAyLCAweGYwLCAKLTB4MzMsIDB4ZjksIDB4MDEsIDB4MjAsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4MDgsIDB4ODAsIAotMHg0OCwgMHg4MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwMSwgMHgyMywgCi0weDFiLCAweDAzLCAweDk4LCAweDQzLCAweDQxLCAweDIxLCAweDA5LCAweDAyLCAweDAxLCAweDQzLCAweDAwLCAweDIwLCAKLTB4MDIsIDB4ZjAsIDB4MjAsIDB4ZjksIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgxNywgMHg0ZiwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwgCi0weDA4LCAweGQxLCAweDM3LCAweDIzLCAweDliLCAweDAxLCAweGY4LCAweDE4LCAweDQwLCAweDhhLCAweDgwLCAweDIzLCAKLTB4OTgsIDB4NDMsIDB4MDEsIDB4MWMsIDB4MWIsIDB4MjAsIDB4MDgsIDB4ZTAsIDB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIAotMHhmOCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMywgMHg5OCwgMHg0MywgMHgwMSwgMHgxYywgCi0weDEwLCAweDIwLCAweDAyLCAweGYwLCAweDAxLCAweGY5LCAweGZmLCAweDIwLCAweDcxLCAweDIzLCAweDViLCAweDAxLCAKLTB4ZjksIDB4MTgsIDB4MDEsIDB4MzAsIDB4MDgsIDB4ODAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjgsIDB4MTgsIAotMHg4MCwgMHg4YiwgMHg0MSwgMHgyMywgMHgxYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwgCi0weDAxLCAweDQzLCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweGVlLCAweGY4LCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIAotMHgwOCwgMHg0OSwgMHhjZiwgMHg2YSwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg2OSwgMHhmYSwgMHhiOCwgMHgwNSwgCi0weDgwLCAweDBkLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAKLTB4YTEsIDB4ZjksIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHhjMCwgMHg4OCwgMHg5ZiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwNSwgMHg0OSwgCi0weGM5LCAweDZhLCAweDFiLCAweDIzLCAweDViLCAweDAxLCAweDE5LCAweDQwLCAweDA4LCAweDQzLCAweDAzLCAweDQ5LCAKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwZCwgMHg0OSwgMHgwZiwgMHg2YSwgCi0weDAxLCAweDJmLCAweDAxLCAweGQxLCAweGZmLCAweDAzLCAweDA3LCAweGUwLCAweDAyLCAweDJmLCAweDAxLCAweGQxLCAKLTB4M2YsIDB4MDMsIDB4MDMsIDB4ZTAsIDB4MDAsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4ZmYsIDB4MDIsIAotMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHgzNSwgMHhmYSwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHg2OCwgMHg0NiwgCi0weDAwLCAweDIxLCAweGZmLCAweGY3LCAweDZmLCAweGY5LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NDAsIDB4YzIsIDB4ODgsIDB4YTEsIDB4MjAsIAotMHg0MCwgMHgwMywgMHgwMCwgMHgyMSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMywgMHg5YSwgMHg0MiwgMHgwMSwgMHhkMSwgCi0weDAyLCAweDIyLCAweDA0LCAweGUwLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDlhLCAweDQyLCAweDAyLCAweGQxLCAKLTB4MDEsIDB4MjIsIDB4MDIsIDB4NjIsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4NjIsIDB4MDgsIDB4MWMsIDB4NzAsIDB4NDcsIAotMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHgwMiwgMHhmMCwgMHg5ZiwgMHhmOCwgMHg2OSwgMHg0NiwgCi0weDA0LCAweDFjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDBhLCAweGZhLCAweDAxLCAweGFiLCAweDVjLCAweDgwLCAKLTB4MDksIDB4NGYsIDB4ZjgsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIAotMHhmZiwgMHhmNywgMHg0MCwgMHhmOSwgMHhmOCwgMHg2ZCwgMHhjMCwgMHgwNywgMHhjMCwgMHgwZiwgMHgwNSwgMHg0OSwgCi0weGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWMsIDB4MDAsIDB4ODAsIAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgCi0weDgwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAKLTB4ZTMsIDB4ZjksIDB4MDYsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDEsIDB4YWIsIAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHgxYiwgMHhmOSwgMHgwMSwgMHgyMCwgCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLCAKLTB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIAotMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHg4NywgMHg2OCwgCi0weGZmLCAweGY3LCAweGM2LCAweGY5LCAweDIwLCAweDJmLCAweDA3LCAweGQyLCAweDc4LCAweDAwLCAweDBjLCAweDQ5LCAKLTB4NDAsIDB4MTgsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODAsIDB4OGIsIDB4MDYsIDB4ZTAsIAotMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgCi0weDAyLCAweDIwLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAKLTB4ZWYsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjMSwgMHg4OCwgMHg4MiwgMHg2OCwgCi0weDIwLCAweDJhLCAweDA0LCAweGQyLCAweDEwLCAweDFjLCAweDAyLCAweGYwLCAweDE3LCAweGY4LCAweDAwLCAweDIwLCAKLTB4MTAsIDB4ZTAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4OWEsIDB4ZjksIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIAotMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweDA0LCAweDMzLCAweGZmLCAweGY3LCAweGNkLCAweGY4LCAweDAxLCAweDIwLCAKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzcsIDB4ODgsIAotMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg4MywgMHhmOSwgMHgxMCwgMHg0OCwgMHhmZSwgMHhmNywgMHg3MiwgMHhmZiwgCi0weDAyLCAweDIwLCAweDM5LCAweDFjLCAweDAyLCAweGYwLCAweGYyLCAweGZmLCAweDAwLCAweDI4LCAweDA2LCAweGQwLCAKLTB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MzYsIDB4ZmYsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIAotMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNywgMHg0OSwgMHgyMCwgMHgxYywgCi0weGZlLCAweGY3LCAweDVmLCAweGZmLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZmLCAweGY3LCAweGE4LCAweGY4LCAKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHhiMCwgMHhiNSwgMHg4NCwgMHhiMCwgCi0weGM3LCAweDg4LCAweDY5LCAweDQ2LCAweDg0LCAweDY4LCAweGZmLCAweGY3LCAweDU3LCAweGY5LCAweDEwLCAweDQ4LCAKLTB4ZmUsIDB4ZjcsIDB4NDYsIDB4ZmYsIDB4MGYsIDB4NGEsIDB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4ZmUsIDB4ZjcsIAotMHg0MywgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNiwgMHhkMCwgMHgwZCwgMHg0YiwgMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywgCi0weDIyLCAweDFjLCAweGZlLCAweGY3LCAweDNjLCAweGZmLCAweDAyLCAweGUwLCAweDQ1LCAweDIwLCAweDAwLCAweGFiLCAKLTB4MTgsIDB4NzAsIDB4MDksIDB4NDksIDB4MjgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4MzIsIDB4ZmYsIDB4NjgsIDB4NDYsIAotMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg3YiwgMHhmOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHhiMCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDU5LCAweGIxLCAweDIxLCAweDQwLCAKLTB4NTksIDB4YjAsIDB4MjEsIDB4NDAsIDB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIAotMHg0MywgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwgCi0weGMyLCAweDg4LCAweDE5LCAweDRiLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDAwLCAweDJhLCAweDAzLCAweGQxLCAKLTB4MTgsIDB4NmIsIDB4MTAsIDB4MjMsIDB4OTgsIDB4NDMsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MmEsIDB4MDQsIDB4ZDEsIAotMHgxOCwgMHg2YiwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHg0OCwgMHg2MSwgMHgxZiwgMHhlMCwgMHgwMiwgMHgyYSwgCi0weDFkLCAweGQxLCAweGMyLCAweDY4LCAweDg3LCAweDY4LCAweDAwLCAweDIwLCAweDNiLCAweDFjLCAweGMzLCAweDQwLCAKLTB4ZGIsIDB4MDcsIDB4ZGIsIDB4MGYsIDB4OWIsIDB4MDIsIDB4MDMsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsIAotMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgyMCwgMHgyOCwgMHhmMywgMHhkYiwgMHgwMCwgMHgyMCwgMHgxMywgMHgxYywgCi0weGMzLCAweDQwLCAweGRiLCAweDA3LCAweGRiLCAweDBmLCAweDliLCAweDAyLCAweGM3LCAweDFkLCAweDE5LCAweDM3LCAKLTB4M2IsIDB4NDMsIDB4MGIsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MjAsIDB4MjgsIAotMHhmMSwgMHhkYiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwgCi0weDgwLCAweGI0LCAweGMyLCAweDg4LCAweDgxLCAweDY4LCAweDEwLCAweDAyLCAweDEyLCAweDBhLCAweDEwLCAweDQzLCAKLTB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjAsIDB4MGMsIDB4NGIsIAotMHhjMCwgMHg0NiwgMHgxYSwgMHg4MCwgMHgwYSwgMHgwYywgMHgxNywgMHgwMiwgCi0weDEyLCAweDEyLCAweDNhLCAweDQzLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDQyLCAweDYwLCAweDVhLCAweDgwLCAKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4MDIsIDB4MDksIDB4MGEsIDB4MTEsIDB4NDMsIDB4MDksIDB4MDQsIAotMHgwOSwgMHgwYywgMHg4MSwgMHg2MCwgMHg5OSwgMHg4MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgCi0weDQwLCAweDAwLCAweDE0LCAweDAwLCAweDI4LCAweDFiLCAweDAwLCAweDgwLCAweGIwLCAweGI1LCAweDg0LCAweGIwLCAKLTB4MTMsIDB4NDksIDB4MGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTMsIDB4MDIsIDB4MTIsIDB4MTIsIAotMHgxMywgMHg0MywgMHg0YSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgxZiwgMHgxYywgMHgxMywgMHgwMiwgCi0weDEyLCAweDEyLCAweDEzLCAweDQzLCAweDg5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDAyLCAKLTB4MDksIDB4MTIsIDB4MTEsIDB4NDMsIDB4MGMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4NjksIDB4NDYsIDB4MWQsIDB4MWMsIAotMHhmZiwgMHhmNywgMHhhZSwgMHhmOCwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHgyOCwgMHgwNCwgMHgyMCwgMHg0MywgCi0weDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweGU1LCAweGZmLCAweDAxLCAweDIwLCAKLTB4MDQsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHhjMSwgMHg4OCwgMHg4MiwgMHg2OCwgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNCwgCi0weDAwLCAweDBjLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDEwLCAweDBjLCAweDAzLCAweDAyLCAKLTB4MDAsIDB4MTIsIDB4MTgsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4NjEsIDB4MTAsIDB4MDQsIAotMHgwMCwgMHgwYywgMHgwMiwgMHgwMiwgMHgwMCwgMHgwYSwgMHgxMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgCi0weDQ4LCAweDYxLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDQwLCAweDAwLCAweDE0LCAweDAwLCAKLTB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTYsIDB4NGIsIDB4ZDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIAotMHgwYSwgMHgwMiwgMHgwOSwgMHgxMiwgMHgxMSwgMHg0MywgMHgxYSwgMHg2OSwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgCi0weDE3LCAweDAyLCAweDEyLCAweDEyLCAweDNhLCAweDQzLCAweDViLCAweDY5LCAweDFiLCAweDA0LCAweDFiLCAweDBjLCAKLTB4MWYsIDB4MDIsIDB4MWIsIDB4MTIsIDB4M2IsIDB4NDMsIDB4MWYsIDB4MDQsIDB4M2YsIDB4MGMsIDB4MDUsIDB4MjMsIAotMHgwMCwgMHg5MywgMHg4NCwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxYywgMHg4MCwgMHgwMCwgMHgyNCwgMHgwNCwgMHgzYiwgCi0weDVjLCAweDcwLCAweDQwLCAweDg4LCAweDAwLCAweGFiLCAweDU4LCAweDgwLCAweGQ5LCAweDgwLCAweDEwLCAweDA0LCAKLTB4MzgsIDB4NDMsIDB4MDIsIDB4OTAsIDB4MDMsIDB4OTQsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIAotMHg5NSwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDQwLCAweDAwLCAweDE0LCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDBiLCAweDQ5LCAweDhhLCAweDZhLCAKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsIAotMHgwNCwgMHgzYiwgMHg1OSwgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkYSwgMHg4MCwgCi0weDAyLCAweDkxLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweGZlLCAweGY3LCAweDc5LCAweGZmLCAweDAxLCAweDIwLCAKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgCi0weGMwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAweDBiLCAweDQ5LCAweDBhLCAweDZhLCAKLTB4MDUsIDB4MjEsIDB4MDAsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDEsIDB4YWIsIDB4MTksIDB4ODAsIDB4MDAsIDB4MjEsIAotMHgwNCwgMHgzYiwgMHg1OSwgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkYSwgMHg4MCwgCi0weDAyLCAweDkxLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweGZlLCAweGY3LCAweDU1LCAweGZmLCAweDAxLCAweDIwLCAKLTB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgCi0weGMwLCAweDAwLCAweDE0LCAweDAwLCAweDAwLCAweGI1LCAweGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGZlLCAweGY3LCAKLTB4ZjQsIDB4ZmQsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzUsIDB4MDIsIDB4ZmYsIDB4ZmYsIAotMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhmNywgMHhmZiwgMHgwNiwgMHg0OCwgCi0weDAwLCAweDZiLCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAKLTB4MmYsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmZCwgMHhmZiwgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGY4LCAweGZmLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZjMsIDB4ZmYsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMCwgMHg0OCwgMHhmZSwgMHhmNywgMHhjNiwgMHhmZCwgCi0weDAxLCAweDIwLCAweDQwLCAweDAyLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIxLCAKLTB4MGMsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NzEsIDB4MGMsIDB4NDgsIDB4MDIsIDB4NjgsIDB4NTIsIDB4MGMsIAotMHgwNSwgMHhkMiwgMHgwMiwgMHg2OCwgMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgCi0weDAzLCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAweGM3LCAweDYwLCAweDAyLCAweGUwLCAweDA3LCAweDQ4LCAKLTB4YzAsIDB4NDYsIDB4MDcsIDB4NjQsIDB4MDgsIDB4MWMsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHhkNSwgMHg5NCwgMHgyMSwgMHg0MCwgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIwLCAKLTB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzIsIDB4MTIsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4Y2IsIDB4ZmYsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMCwgCi0weDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDcyLCAweDE1LCAweDIwLCAweGZmLCAweGY3LCAweGJmLCAweGZmLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4ZjAsIAotMHhmOSwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgCi0weDA3LCAweDFjLCAweGY4LCAweDg4LCAweDAyLCAweGYwLCAweGZlLCAweGY4LCAweDAwLCAweDI4LCAweDBjLCAweGQxLCAKLTB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4ODIsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4MDEsIDB4YWIsIAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhiYiwgMHhmZSwgMHgwMSwgMHgyMCwgCi0weDAwLCAweGUwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIAotMHg2ZCwgMHhmZiwgMHgwMSwgMHgyNywgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHgwOSwgMHg0OCwgMHg4MSwgMHg4OSwgCi0weDA5LCAweDA0LCAweGMyLCAweDg5LCAweDExLCAweDQzLCAweDAyLCAweDkxLCAweDgxLCAweDg4LCAweDA5LCAweDA0LCAKLTB4YzAsIDB4ODgsIDB4MDgsIDB4NDMsIDB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIAotMHg5YiwgMHhmZSwgMHgzOCwgMHgxYywgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDY5LCAweGZmLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NjQsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg1ZiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgCi0weGZlLCAweGY3LCAweDVhLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAKLTB4NTUsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NTAsIDB4ZmYsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0YiwgMHhmZiwgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDQ2LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NDEsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIAotMHhmZSwgMHhmNywgMHgzYywgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgCi0weDM3LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDMyLCAweGZmLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4OGMsIDB4YjAsIDB4MDgsIDB4YTksIDB4ZmUsIDB4ZjcsIAotMHgxMywgMHhmZiwgMHg2OSwgMHg0NiwgMHgwOCwgMHhhOCwgMHgwMiwgMHhmMCwgMHhhOSwgMHhmZiwgMHgwMiwgMHgyMCwgCi0weDA4LCAweGFiLCAweDU4LCAweDcwLCAweDY5LCAweDQ2LCAweDA4LCAweGE4LCAweGZlLCAweGY3LCAweDQ4LCAweGZlLCAKLTB4MDEsIDB4MjAsIDB4MGMsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIAotMHgxOSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgCi0weDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweGY4LCAweGZlLCAweGZhLCAweDg4LCAweDEyLCAweDQ5LCAKLTB4MDEsIDB4MjQsIDB4YzgsIDB4MWQsIDB4ODksIDB4MzAsIDB4MDAsIDB4MmEsIDB4MGYsIDB4ZDAsIDB4MDQsIDB4NzAsIAotMHg0NCwgMHg3MCwgMHhiOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg4MCwgMHgzMSwgMHhjOCwgMHg4MiwgMHhiOCwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDA4LCAweDgzLCAweGY4LCAweDY4LCAweDAwLCAweDBjLCAweDQ4LCAweDgzLCAweGY4LCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4ODgsIDB4ODMsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjEsIAotMHgwMSwgMHg3MCwgMHg0MSwgMHg3MCwgMHgwNiwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgCi0weDAwLCAweDIxLCAweGZlLCAweGY3LCAweDE3LCAweGZlLCAweDIwLCAweDFjLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIAotMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhlMywgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgCi0weGZlLCAweGY3LCAweGRlLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAKLTB4ZDksIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZDQsIDB4ZmUsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhjZiwgMHhmZSwgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAKLTB4ZmUsIDB4ZjcsIDB4YWUsIDB4ZmUsIDB4ZjgsIDB4ODgsIDB4MDMsIDB4MjQsIDB4ZTQsIDB4MDQsIDB4MDQsIDB4NDMsIAotMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHg5YywgMHg0MiwgMHgwMiwgMHhkMywgMHgwZiwgMHg0YiwgMHg5YywgMHg0MiwgCi0weDA2LCAweGQ5LCAweDBmLCAweDQ4LCAweDAxLCAweGFiLCAweDU4LCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAKLTB4ZmUsIDB4ZjcsIDB4ZGMsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4ODAsIDB4MDcsIDB4MjAsIDB4NDMsIDB4MDAsIDB4NjgsIAotMHgwMCwgMHgyMSwgMHgwMCwgMHhhYiwgMHg1OSwgMHg3MCwgMHhmYSwgMHg4OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MCwgCi0weDAyLCAweDkwLCAweDAzLCAweDkxLCAweDY4LCAweDQ2LCAweDA0LCAweDMzLCAweGZlLCAweGY3LCAweGNjLCAweGZkLCAKLTB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHhlMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgCi0weDA3LCAweDFjLCAweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweDdiLCAweGZlLCAweGY4LCAweDg4LCAKLTB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MTgsIDB4NDMsIDB4OTgsIDB4NDIsIDB4MDIsIDB4ZDMsIDB4MGEsIDB4NGIsIAotMHg5OCwgMHg0MiwgMHgwOCwgMHhkOSwgMHgwOSwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgCi0weDAwLCAweDIxLCAweGZlLCAweGY3LCAweGFiLCAweGZkLCAweDAxLCAweDIwLCAweDAzLCAweGUwLCAweGI5LCAweDY4LCAKLTB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIAotMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgCi0weDgwLCAweGI1LCAweDg2LCAweGIwLCAweDAyLCAweGE5LCAweGZlLCAweGY3LCAweDU3LCAweGZlLCAweDAxLCAweDI3LCAKLTB4MDIsIDB4YWIsIDB4NWYsIDB4NzAsIDB4MDAsIDB4MjAsIDB4ZDgsIDB4ODAsIDB4MGEsIDB4NDgsIDB4NDEsIDB4NjgsIAotMHhjMCwgMHg0NiwgMHgwNCwgMHg5MSwgMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MSwgMHhjMSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQwLCAweDY5LCAweGMwLCAweDQ2LCAweDAxLCAweDkwLCAweDY5LCAweDQ2LCAKLTB4MDIsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4ODEsIDB4ZmQsIDB4MzgsIDB4MWMsIDB4MDYsIDB4YjAsIDB4ODAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhjMSwgMHg2OCwgCi0weDgwLCAweDY4LCAweGZlLCAweGY3LCAweDQ3LCAweGZiLCAweDAwLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIAotMHg2OCwgMHg0NiwgMHg1MCwgMHgyMSwgMHhmZSwgMHhmNywgMHgzNiwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwgCi0weDAyLCAweDk3LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDYxLCAweGZkLCAweDA0LCAweGIwLCAKLTB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIAotMHg2OCwgMHg0NiwgMHg1MSwgMHgyMSwgMHhmZSwgMHhmNywgMHgyNCwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgCi0weDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDUwLCAweGZkLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIAotMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwMCwgMHgyNywgMHgxMiwgMHg0OSwgMHgwOSwgMHg2OCwgMHgxMiwgMHg0YSwgCi0weDEyLCAweDZiLCAweDEwLCAweDIzLCAweDFhLCAweDQwLCAweDAxLCAweDI0LCAweDAwLCAweDJhLCAweDAwLCAweGQwLCAKLTB4MDEsIDB4MjcsIDB4OGEsIDB4MGMsIDB4MDMsIDB4ZDMsIDB4M2EsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDIsIDB4MjcsIAotMHgxNywgMHg0MywgMHhjOSwgMHgwYywgMHgwMywgMHhkMywgMHgzOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwNCwgMHgyNywgCi0weDBmLCAweDQzLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGVjLCAweGZkLCAweDAxLCAweGFiLCAweDVmLCAweDgwLCAKLTB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MjYsIDB4ZmQsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YjAsIAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgCi0weDAwLCAweDAwLCAweDEwLCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweGI1LCAweDg0LCAweGIwLCAKLTB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZDcsIDB4ZmQsIDB4MDYsIDB4NDgsIDB4YzAsIDB4NmQsIDB4MDEsIDB4YWIsIAotMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgwZiwgMHhmZCwgMHgwMSwgMHgyMCwgCi0weDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZGQsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzAsIDB4NDcsIAotMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgCi0weDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAKLTB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4Y2IsIDB4ZmQsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg4MCwgMHhiNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHhhOSwgMHhmZSwgMHhmNywgMHhhYiwgMHhmZCwgMHgwMCwgMHgyMCwgCi0weDAxLCAweGFiLCAweDU4LCAweDcwLCAweDBjLCAweDQ5LCAweGM5LCAweDY4LCAweDAxLCAweDI3LCAweDAxLCAweDI5LCAKLTB4MDIsIDB4ZDEsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTcsIDB4MDEsIDB4ZTAsIDB4MDMsIDB4OTcsIDB4MDQsIDB4OTAsIAotMHg2OCwgMHg0NiwgMHgwMSwgMHhmMCwgMHgzMywgMHhmZCwgMHgwMiwgMHhhYiwgMHgwMCwgMHg5OCwgMHhjMCwgMHg0NiwgCi0weDU4LCAweDgwLCAweDAwLCAweDIxLCAweDAxLCAweGE4LCAweGZlLCAweGY3LCAweGQzLCAweGZjLCAweDM4LCAweDFjLCAKLTB4MDUsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHg3MCwgMHg0NywgMHgwNCwgMHg0OSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMCwgCi0weDAxLCAweDMxLCAweDY4LCAweDI4LCAweGZhLCAweGQzLCAweDcwLCAweDQ3LCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAKLTB4MDAsIDB4MjIsIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDMsIDB4NDAsIDB4MWEsIDB4MDEsIDB4MzIsIDB4ODgsIDB4NDIsIAotMHhmYiwgMHhkMiwgMHgxMCwgMHgxYywgMHg3MCwgMHg0NywgMHg4OCwgMHg0MiwgMHgwMiwgMHhkMywgMHg0MCwgMHgxYSwgCi0weDg4LCAweDQyLCAweGZjLCAweGQyLCAweDcwLCAweDQ3LCAweDkwLCAweGI0LCAweDAxLCAweDFjLCAweGZmLCAweDI3LCAKLTB4MDQsIDB4MjksIDB4MjcsIDB4ZGEsIDB4MDAsIDB4MjAsIDB4MTQsIDB4NGEsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsIAotMHhkYiwgMHgwMCwgMHhkNCwgMHg1OCwgMHg2MywgMHgwYywgMHgxYSwgMHhkMiwgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwgCi0weGM5LCAweDAwLCAweDU3LCAweDU4LCAweDQzLCAweDAwLCAweDFiLCAweDE4LCAweGRiLCAweDAwLCAweGQ3LCAweDUwLCAKLTB4ODksIDB4MTgsIDB4OWEsIDB4MTgsIDB4NGYsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NTcsIDB4NjAsIDB4OGIsIDB4NjgsIAotMHhjMCwgMHg0NiwgMHg5MywgMHg2MCwgMHgwYiwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MSwgMHg0YiwgMHg2OSwgCi0weGMwLCAweDQ2LCAweDUzLCAweDYxLCAweGM5LCAweDY4LCAweGMwLCAweDQ2LCAweGQxLCAweDYwLCAweDkwLCAweGJjLCAKLTB4NzAsIDB4NDcsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDQsIDB4MjgsIDB4ZDksIDB4ZGIsIAotMHgzOCwgMHgxYywgMHhmNiwgMHhlNywgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhmNywgMHhiNSwgMHhjNCwgMHhiMCwgCi0weDA0LCAweDFjLCAweDAwLCAweDIwLCAweDQ2LCAweDlhLCAweDExLCAweDIxLCAweDExLCAweDQwLCAweDZlLCAweGQwLCAKLTB4MDAsIDB4MjcsIDB4NzksIDB4MDAsIDB4YzksIDB4MTksIDB4YzksIDB4MDAsIDB4NTcsIDB4NGEsIDB4NTEsIDB4NTgsIAotMHg0OSwgMHgwYywgMHgwMywgMHhkMiwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNCwgMHhlMCwgCi0weDc5LCAweDFjLCAweDBmLCAweDA2LCAweDNmLCAweDBlLCAweDA0LCAweDJmLCAweGVmLCAweGRiLCAweDAwLCAweDI4LCAKLTB4NWIsIDB4ZDAsIDB4MDAsIDB4MjYsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4NDAsIDB4MjMsIDB4MDAsIDB4MjEsIAotMHgwMCwgMHgyMCwgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg4OCwgMHhmYSwgMHgwNCwgMHhhOSwgMHgwMCwgMHgyMCwgCi0weDgyLCAweDAwLCAweDhhLCAweDU4LCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweGEyLCAweDQyLCAweDAzLCAweGQxLCAKLTB4NzIsIDB4MWMsIDB4MTYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIAotMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwgMHhmMCwgMHhkYiwgMHgwMCwgMHgyZSwgMHgzZCwgMHhkMCwgMHgwNCwgMHgyYywgCi0weDNlLCAweGQxLCAweDgwLCAweDAwLCAweDA4LCAweDU4LCAweDQwLCAweDAxLCAweDgwLCAweDBkLCAweDAwLCAweDIyLCAKLTB4MDAsIDB4OTIsIDB4MTAsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmEsIAotMHgwMCwgMHgyMSwgMHgwMSwgMHg5MSwgMHgwMiwgMHhhOCwgMHgwNSwgMHg5OSwgMHg0OSwgMHgwYywgMHg4OSwgMHgwNSwgCi0weDI5LCAweGQwLCAweGMxLCAweDY4LCAweDBhLCAweDA2LCAweDEyLCAweDBlLCAweDQ1LCAweDliLCAweDlhLCAweDQyLCAKLTB4MTEsIDB4ZDEsIDB4YzAsIDB4NjgsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIAotMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg1MCwgMHhmYSwgCi0weDAxLCAweDk5LCAweDAyLCAweDlkLCAweDQ4LCAweDFjLCAweDAxLCAweDA2LCAKLTB4MDksIDB4MGUsIDB4MDEsIDB4OTEsIDB4MGUsIDB4ZTAsIDB4NDgsIDB4MDEsIDB4ODYsIDB4MGQsIDB4MDAsIDB4MjIsIAotMHgwMCwgMHg5MiwgMHgxMCwgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgCi0weDNmLCAweGZhLCAweDAyLCAweGE4LCAweDA1LCAweDk5LCAweDQ5LCAweDBjLCAweDg5LCAweDA1LCAweGQ4LCAweGQxLCAKLTB4MDEsIDB4OTksIDB4MDAsIDB4MjksIDB4MGYsIDB4ZDEsIDB4ZmYsIDB4MjAsIDB4M2QsIDB4ZTAsIDB4NDAsIDB4ZTAsIAotMHg4MCwgMHgwMCwgMHgwOCwgMHg1OCwgMHg0MCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwgCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDMwLCAweDFjLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDI4LCAweGZhLCAKLTB4MDIsIDB4OWQsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDQsIDB4NDYsIDB4OWEsIDB4MTAsIDB4NDMsIDB4NzksIDB4MDAsIAotMHhjOSwgMHgxOSwgMHhjOSwgMHgwMCwgMHgxNywgMHg0YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg1MCwgMHgzMCwgMHgxYywgCi0weDhlLCAweDE4LCAweDcwLCAweDYwLCAweDEwLCAweDIwLCAweDA0LCAweDJjLCAweDAwLCAweGQwLCAweDBjLCAweDIwLCAKLTB4MDQsIDB4MWMsIDB4YjAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MjAsIDB4MjEsIDB4NDYsIDB4OWEsIDB4MTEsIDB4NDAsIAotMHgyMCwgMHgyOSwgMHgwMCwgMHhkMCwgMHgyOCwgMHgxYywgMHgzMCwgMHg2MSwgMHgyOCwgMHgxOSwgMHhmZiwgMHgyMSwgCi0weGZmLCAweDMwLCAweDA4LCAweDMwLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweDE5LCAweGZmLCAweDQzLCAweDAxLCAKLTB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MWIsIDB4NzAsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NTAsIDB4MjEsIAotMHg0NiwgMHg5YSwgMHgxMSwgMHg0MCwgMHg1MCwgMHgyOSwgMHgwMCwgMHhkMSwgMHgyOCwgMHgxYywgMHhmMCwgMHg2MCwgCi0weDM4LCAweDFjLCAweDQ3LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGZmLCAweDIwLCAKLTB4ZjksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4YjQsIDB4MDAsIDB4MjMsIAotMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkOSwgMHg4NywgMHg1YywgMHg3YiwgMHg0MCwgMHgxYiwgMHgwNiwgCi0weDFiLCAweDBlLCAweDAxLCAweDMyLCAweDhhLCAweDQyLCAweGY4LCAweGQzLCAweGQ4LCAweDQzLCAweDAwLCAweDA2LCAKLTB4MDAsIDB4MGUsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDQsIDB4MjgsIAotMHgwNywgMHhkYSwgMHg0MSwgMHgwMCwgMHgwOSwgMHgxOCwgMHhjOSwgMHgwMCwgMHg0NSwgMHg5MSwgMHg0MSwgMHg0YSwgCi0weDUxLCAweDU4LCAweDRiLCAweDBjLCAweDAyLCAweGQyLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDc2LCAweGUwLCAKLTB4MDEsIDB4MjMsIDB4NWIsIDB4MDQsIDB4MTksIDB4NDAsIDB4NDMsIDB4MDAsIDB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIAotMHgzYSwgMHg0YSwgMHgxNCwgMHgxOCwgMHgwMCwgMHgyOSwgMHg2MSwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMiwgMHg5MSwgCi0weDIwLCAweDY5LCAweGExLCAweDY4LCAweDQ1LCAweDE4LCAweDMwLCAweGQwLCAweGZmLCAweDIxLCAweDY4LCAweDFlLCAKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZmUsIDB4NjEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4MDEsIDB4OTAsIAotMHgwMSwgMHg5OCwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMSwgMHhhNiwgMHg2OCwgMHhhZiwgMHgxYiwgMHgwOSwgMHhlMCwgCi0weDAwLCAweDI2LCAweGZmLCAweDIxLCAweDI4LCAweDFjLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGM3LCAweGZlLCAKLTB4MDcsIDB4MWMsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4MjcsIDB4MDksIDB4MzcsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIAotMHgwMSwgMHg5OCwgMHgzMSwgMHgxYywgMHgwMywgMHhhYSwgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHg5ZSwgMHhmOSwgCi0weDAzLCAweGE4LCAweDM5LCAweDFjLCAweGZmLCAweGY3LCAweGFjLCAweGZmLCAweGMwLCAweDQzLCAweDAyLCAweDk5LCAKLTB4NDgsIDB4NDAsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MDIsIDB4OTEsIDB4ZWQsIDB4MWIsIDB4YTAsIDB4NjgsIAotMHhhOCwgMHg0MiwgMHgwMCwgMHhkMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyZCwgMHhjZSwgMHhkOCwgMHgwMiwgMHg5OSwgCi0weGNmLCAweDQzLCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDBjLCAweDIzLCAweDAwLCAweDIxLCAweDYwLCAweDY4LCAKLTB4MDMsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4ODMsIDB4ZjksIDB4MjAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIAotMHgwNSwgMHg5OCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgzOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywgCi0weDA1LCAweDkwLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDk4LCAweDQzLCAweDA1LCAweDkwLCAweDBjLCAweDIxLCAKLTB4MDMsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmYsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MDUsIDB4OTksIAotMHg5OSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMiwgMHgwOCwgMHg0MywgMHgwNSwgMHg5MCwgCi0weDBjLCAweDIzLCAweDAwLCAweDIxLCAweDYwLCAweDY4LCAweDAzLCAweGFhLCAweDAwLCAweGYwLCAweGNhLCAweGY5LCAKLTB4MDAsIDB4MjAsIDB4NDUsIDB4OTksIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4NTAsIDB4YzEsIDB4NDMsIAotMHg2MSwgMHg2MCwgMHhhMSwgMHg2MCwgMHhlMSwgMHg2MCwgMHgyMSwgMHg2MSwgMHg2MSwgMHg2MSwgMHg0NiwgMHhiMCwgCi0weGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAKLTB4YjAsIDB4YjQsIDB4NGMsIDB4NDIsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZGIsIAotMHgwYywgMHgxYywgMHgwMCwgMHgyNywgMHhmZiwgMHg0MywgMHgwNCwgMHgyOCwgMHgyMSwgMHhkYSwgMHgxMiwgMHg0ZCwgCi0weDQzLCAweDAwLCAweDE4LCAweDE4LCAweGMwLCAweDAwLCAweDQwLCAweDE5LCAweDAxLCAweDJhLCAweDA1LCAweGQwLCAKLTB4MDIsIDB4MmEsIDB4MDksIDB4ZDAsIDB4MDMsIDB4MmEsIDB4MTYsIDB4ZDEsIDB4MDEsIDB4NjksIDB4MGIsIDB4ZTAsIAotMHgwMCwgMHgyOSwgMHgxMiwgMHhkYiwgMHgwMiwgMHg2OSwgMHg4YSwgMHg0MiwgMHgwZiwgMHhkMywgMHgwNSwgMHhlMCwgCi0weDAwLCAweDI5LCAweDA3LCAweGRhLCAweGMxLCAweDY4LCAweGExLCAweDQyLCAweDA5LCAweGQzLCAweDA5LCAweDFiLCAKLTB4YzEsIDB4NjAsIDB4YzAsIDB4NjgsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YzEsIDB4NjgsIDB4MDksIDB4MTksIAotMHgwMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHhmNiwgMHhkOSwgMHgzOCwgMHgxYywgMHhmNiwgMHhlNywgMHgwMCwgMHgwMCwgCi0weDQwLCAweGFiLCAweDIwLCAweDQwLCAweGYwLCAweGI1LCAweDg0LCAweGIwLCAweDE3LCAweDFjLCAweDBkLCAweDFjLCAKLTB4MDAsIDB4MjEsIDB4MDIsIDB4OTEsIDB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZDIsIDB4MDAsIDB4MmMsIDB4NDksIAotMHg4YiwgMHg1OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMSwgMHg5MywgMHgwMCwgMHgyMywgMHhkYiwgMHg0MywgCi0weDA0LCAweDI4LCAweDAyLCAweGRhLCAweDAxLCAweDk4LCAweDQwLCAweDA4LCAweDAxLCAweGQyLCAweDE4LCAweDFjLCAKLTB4NDYsIDB4ZTAsIDB4NTQsIDB4MTgsIDB4ZTAsIDB4NjgsIDB4YzIsIDB4MTksIDB4MjEsIDB4NjksIDB4OGEsIDB4NDIsIAotMHgwMCwgMHhkOSwgMHgwZiwgMHgxYSwgMHgwMCwgMHgyZiwgMHgzYywgMHhkOSwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwgCi0weDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLCAweGZmLCAweGY3LCAweDBkLCAweGZlLCAweDYxLCAweDY4LCAKLTB4NDYsIDB4MTgsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIAotMHhmZiwgMHhmNywgMHgwZCwgMHhmZSwgMHhjMiwgMHgxOSwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHg4YSwgMHg0MiwgCi0weDE0LCAweGQ5LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDBiLCAweDFhLCAweDAzLCAweDkzLCAKLTB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZTEsIDB4ZjgsIDB4ZTAsIDB4NjgsIAotMHgwMywgMHg5YiwgMHhjMCwgMHgxOCwgMHhlMCwgMHg2MCwgMHgwMywgMHg5YiwgMHg1ZCwgMHgxOSwgMHhmZiwgMHgxYSwgCi0weDAyLCAweDk4LCAweDE4LCAweDE4LCAweDAyLCAweDkwLCAweDEwLCAweGUwLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAKLTB4MDAsIDB4OTIsIDB4MDEsIDB4MWMsIDB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHhjZCwgMHhmOCwgMHhlMCwgMHg2OCwgMHhjMCwgMHgxOSwgMHhlZCwgMHgxOSwgMHhlMCwgMHg2MCwgMHgwMiwgMHg5OCwgCi0weGMwLCAweDE5LCAweDAyLCAweDkwLCAweDAwLCAweDI3LCAweDAwLCAweDJmLCAweGMyLCAweGQ4LCAweDAyLCAweDk4LCAKLTB4MDQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIAotMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwgMHgxNywgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyMSwgMHgwMSwgMHg5MSwgCi0weDQyLCAweDAwLCAweDEyLCAweDE4LCAweGQyLCAweDAwLCAweDAyLCAweDkyLCAweDMwLCAweDQ5LCAweDhhLCAweDU4LCAKLTB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MDAsIDB4MjQsIDB4ZTQsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MDEsIDB4ZGEsIAotMHg1MCwgMHgwOSwgMHgwMSwgMHhkMiwgMHgyMCwgMHgxYywgMHg1MSwgMHhlMCwgMHgwMiwgMHg5YSwgMHg1NCwgMHgxOCwgCi0weGUwLCAweDY4LCAweGMyLCAweDE5LCAweDYwLCAweDY5LCAweDgyLCAweDQyLCAweDAxLCAweGQ5LCAweDIyLCAweDY5LCAKLTB4ODcsIDB4MWEsIDB4MDAsIDB4MmYsIDB4NDUsIDB4ZDksIDB4MjUsIDB4NGUsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIAotMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhhNywgMHhmZCwgMHg2MSwgMHg2OCwgCi0weDQwLCAweDE4LCAweDAwLCAweDkwLCAweGEwLCAweDY4LCAweGUxLCAweDY4LCAweDQwLCAweDE4LCAweGZmLCAweDIxLCAKLTB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YTYsIDB4ZmQsIDB4MDIsIDB4OWEsIDB4YjEsIDB4NTgsIDB4MDEsIDB4MjMsIAotMHg1YiwgMHgwNCwgMHgxOSwgMHg0MywgMHhiMSwgMHg1MCwgMHhjMSwgMHgxOSwgMHhmZiwgMHgyMiwgMHgwOSwgMHgzMiwgCi0weDkxLCAweDQyLCAweDEzLCAweGQ5LCAweDEzLCAweDFhLCAweDAxLCAweDFjLCAweDAwLCAweDk4LCAweDJhLCAweDFjLCAKLTB4MWUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4ZGYsIDB4ZjgsIDB4ZTAsIDB4NjgsIDB4ODAsIDB4MTksIDB4NzUsIDB4MTksIAotMHhlMCwgMHg2MCwgMHgyMSwgMHg2OSwgMHg4OCwgMHg0MiwgMHgwMCwgMHhkOSwgMHgyMCwgMHg2MSwgMHhiZiwgMHgxYiwgCi0weDAxLCAweDk4LCAweDMwLCAweDE4LCAweDAxLCAweDkwLCAweDEyLCAweGUwLCAweDAxLCAweDFjLCAweDAwLCAweDllLCAKLTB4MzAsIDB4MWMsIDB4MmEsIDB4MWMsIDB4M2IsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2IsIDB4ZjgsIDB4ZTAsIDB4NjgsIAotMHhjMCwgMHgxOSwgMHhlZCwgMHgxOSwgMHhlMCwgMHg2MCwgMHgyMSwgMHg2OSwgMHg4OCwgMHg0MiwgMHgwMCwgMHhkOSwgCi0weDIwLCAweDYxLCAweDAxLCAweDk4LCAweGMwLCAweDE5LCAweDAxLCAweDkwLCAweDAwLCAweDI3LCAweDAwLCAweDJmLCAKLTB4YjksIDB4ZDgsIDB4MDEsIDB4OTgsIDB4MDMsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhiMCwgMHhiNSwgMHhjMywgMHhiMCwgCi0weDBjLCAweDFjLCAweDAwLCAweDI3LCAweGZhLCAweDQzLCAweDA0LCAweDI4LCAweDA2LCAweGRhLCAweDQxLCAweDAwLCAKLTB4MDksIDB4MTgsIDB4YzksIDB4MDAsIDB4MTQsIDB4NDgsIDB4NDUsIDB4NTgsIDB4NmIsIDB4MGMsIDB4MDQsIDB4ZDIsIAotMHgxMCwgMHgxYywgMHg0MywgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2MiwgMHgwOSwgCi0weDFiLCAweGQzLCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDA4LCAweDE4LCAweDQwLCAweDY4LCAweDBjLCAweDIzLCAKLTB4MDAsIDB4MjEsIDB4MDEsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4MzAsIDB4ZjgsIDB4MTEsIDB4MmMsIDB4MGQsIDB4ZDAsIAotMHgxMiwgMHgyYywgMHgwZCwgMHhkMCwgMHgxMywgMHgyYywgMHgwNSwgMHhkMCwgMHgxNCwgMHgyYywgMHgwYSwgMHhkMSwgCi0weDAzLCAweDk4LCAweDAwLCAweDA0LCAweDA3LCAweDBlLCAweDA2LCAweGUwLCAweDAzLCAweDk4LCAweDA3LCAweDA2LCAKLTB4M2YsIDB4MGUsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4OWYsIDB4MDAsIDB4ZTAsIDB4MDIsIDB4OWYsIDB4MzgsIDB4MWMsIAotMHhkYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHgwMywgMHg0OSwgMHgwMCwgMHgyMCwgCi0weDAwLCAweDIyLCAweDBhLCAweDU0LCAweDAxLCAweDMwLCAweDYwLCAweDI4LCAweGZiLCAweGQzLCAweDcwLCAweDQ3LCAKLTB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4MDIsIDB4ZjAsIDB4NmYsIDB4ZmEsIDB4NTcsIDB4MjAsIAotMHgwMiwgMHhmMCwgMHhjYywgMHhmOSwgMHgwMiwgMHhmMCwgMHg0MCwgMHhmOSwgMHgwMCwgMHgwYSwgMHhmYiwgMHhkMywgCi0weDAyLCAweGYwLCAweDRlLCAweGZhLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGYwLCAweGI1LCAweDgyLCAweGIwLCAKLTB4MDcsIDB4OWQsIDB4MTQsIDB4MWMsIDB4MWYsIDB4MWMsIDB4MzAsIDB4NGEsIDB4ZDIsIDB4NmYsIDB4MjAsIDB4MjMsIAotMHgxNiwgMHg2OCwgMHg5ZSwgMHg0MywgMHgxNiwgMHg2MCwgMHgzMywgMHgxYywgMHhmZiwgMHgyMiwgMHgwMSwgMHgzMiwgCi0weDJhLCAweDQwLCAweDQwLCAweDAyLCAweDA4LCAweDQzLCAweDA1LCAweDBhLCAweDA2LCAweDFjLCAweDAwLCAweDBjLCAKLTB4MDEsIDB4OTAsIDB4MDAsIDB4MmEsIDB4MjAsIDB4ZDAsIDB4MDIsIDB4ZjAsIDB4NGIsIDB4ZmEsIDB4NTMsIDB4MjAsIAotMHgwMiwgMHhmMCwgMHhhOCwgMHhmOSwgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgwMiwgMHhmMCwgCi0weGEzLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweGEwLCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLCAKLTB4OWQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4MjMsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmYsIDB4MDIsIDB4ZjAsIAotMHgzNywgMHhmYSwgMHg1NCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg5NCwgMHhmOSwgMHgwMCwgMHg5OCwgMHgwMiwgMHhmMCwgCi0weDkxLCAweGY5LCAweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDhlLCAweGY5LCAweDMwLCAweDFjLCAweDE0LCAweGUwLCAKLTB4MDIsIDB4ZjAsIDB4MmEsIDB4ZmEsIDB4NTIsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ODcsIDB4ZjksIDB4MDEsIDB4OTgsIAotMHgwMiwgMHhmMCwgMHg4NCwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4MSwgMHhmOSwgMHgzMCwgMHgxYywgCi0weDAyLCAweGYwLCAweDdlLCAweGY5LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDdiLCAweGY5LCAweDAwLCAweDIwLCAKLTB4MDIsIDB4ZjAsIDB4NzgsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NzUsIDB4ZjksIDB4MDAsIDB4MjAsIAotMHgwMiwgMHhmMCwgMHg3MiwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwNSwgMHhkOSwgMHgwMiwgMHhmMCwgMHhlNCwgMHhmOCwgCi0weDIwLCAweDcwLCAweDAxLCAweDM0LCAweDAxLCAweDNmLCAweGY5LCAweGQxLCAweDAyLCAweGYwLCAweGYwLCAweGY5LCAKLTB4MDQsIDB4NGEsIDB4ZDAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIAotMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgCi0weGYwLCAweGI1LCAweDgyLCAweGIwLCAweDE0LCAweDFjLCAweDFmLCAweDFjLCAweDQyLCAweDAyLCAweDBhLCAweDQzLCAKLTB4MTUsIDB4MWMsIDB4MDEsIDB4MjgsIDB4NTQsIDB4ZDAsIDB4MmMsIDB4NDksIDB4YzgsIDB4NmYsIDB4MjAsIDB4MjMsIAotMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwgMHhjOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwgCi0weDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAyLCAweGYwLCAweGU2LCAweGY5LCAweDUzLCAweDIwLCAweDAyLCAweGYwLCAKLTB4NDMsIDB4ZjksIDB4MjgsIDB4MGMsIDB4MDYsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4M2YsIDB4ZjksIDB4MjgsIDB4MGEsIAotMHgwMSwgMHg5MCwgMHgwMCwgMHg5MCwgMHgwMiwgMHhmMCwgMHgzYSwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgCi0weDM3LCAweGY5LCAweDAyLCAweGYwLCAweGJkLCAweGY5LCAweGZmLCAweGY3LCAweDYxLCAweGZmLCAweDAyLCAweGYwLCAKLTB4ZDEsIDB4ZjksIDB4ODQsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MmUsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsIAotMHgyYiwgMHhmOSwgMHgwMCwgMHg5OCwgMHgwMiwgMHhmMCwgMHgyOCwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgCi0weDI1LCAweGY5LCAweDAwLCAweDJmLCAweDA1LCAweGQ5LCAweDIwLCAweDc4LCAweDAxLCAweDM0LCAweDAyLCAweGYwLCAKLTB4MWYsIDB4ZjksIDB4MDEsIDB4M2YsIDB4ZjksIDB4ZDEsIDB4MDIsIDB4ZjAsIDB4YTMsIDB4ZjksIDB4MDIsIDB4ZjAsIAotMHhiOSwgMHhmOSwgMHg4MywgMHgyMCwgMHgwMiwgMHhmMCwgMHgxNiwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwgCi0weDEzLCAweGY5LCAweDAxLCAweDk4LCAweDAyLCAweGYwLCAweDEwLCAweGY5LCAKLTB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MGQsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4OTMsIDB4ZjksIDB4ZmYsIDB4ZjcsIAotMHgzNywgMHhmZiwgMHgwNywgMHg0OSwgMHhjOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgCi0weDAyLCAweDYwLCAweGM4LCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHgwMSwgMHhmMCwgMHg4ZiwgMHhmOCwgMHgwNiwgMHg0ZiwgCi0weGMwLCAweDQ2LCAweGY4LCAweDYwLCAweDAxLCAweGYwLCAweGYyLCAweGY4LCAweDc4LCAweDgwLCAweDAxLCAweGYwLCAKLTB4YjEsIDB4ZjgsIDB4MzgsIDB4NzEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHhmMCwgMHgwNSwgMHhmOSwgMHgwMiwgMHg0OSwgCi0weGMwLCAweDQ2LCAweDA4LCAweDgwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4MGIsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MTEsIDB4ZDEsIDB4YzEsIDB4NmYsIDB4MDIsIDB4MjMsIAotMHgwYSwgMHg2OCwgMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMSwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwYSwgMHg2OCwgCi0weDFhLCAweDQzLCAweDBhLCAweDYwLCAweGMxLCAweDE4LCAweDA4LCAweDY4LCAweDgyLCAweDIzLCAweDAyLCAweDY4LCAKLTB4MWEsIDB4NDMsIDB4MDIsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDgsIDB4ODEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHg0YSwgMHg0OSwgMHhjYSwgMHgxZCwgMHg5ZCwgMHgzMiwgCi0weDAwLCAweDIwLCAweDAwLCAweDI3LCAweDgzLCAweDAwLCAweGQ3LCAweDUwLCAweDAxLCAweDMwLCAweDE3LCAweDI4LCAKLTB4ZmEsIDB4ZDMsIDB4NDYsIDB4NGMsIDB4MDAsIDB4MjAsIDB4ODIsIDB4MDAsIDB4YTcsIDB4NTAsIDB4MDEsIDB4MzAsIAotMHgyMCwgMHgyOCwgMHhmYSwgMHhkMywgMHg0MywgMHg0YSwgMHgwMCwgMHgyMCwgMHg4MywgMHgwMCwgMHhkNywgMHg1MCwgCi0weDAxLCAweDMwLCAweDIwLCAweDI4LCAweGZhLCAweGQzLCAweGE3LCAweDYxLCAweDk3LCAweDYxLCAweDRmLCAweDY1LCAKLTB4OGYsIDB4NjUsIDB4M2YsIDB4NGQsIDB4YzAsIDB4NDYsIDB4MmYsIDB4NjAsIDB4NmYsIDB4NjAsIDB4YWYsIDB4NjAsIAotMHhhZiwgMHg2MSwgMHhlZiwgMHg2MCwgMHgyZiwgMHg2MSwgMHg2ZiwgMHg2MSwgMHgwMCwgMHgyMCwgMHhjMSwgMHgwMCwgCi0weDA5LCAweDE4LCAweDQ5LCAweDAxLCAweDM1LCAweDRiLCAweGM5LCAweDE4LCAweDg2LCAweDAwLCAweGNiLCAweDFkLCAKLTB4ZjksIDB4MzMsIDB4MzQsIDB4NGMsIDB4MzQsIDB4MTksIDB4ZTMsIDB4NjMsIDB4MTEsIDB4MjMsIDB4NWIsIDB4MDEsIAotMHhjYiwgMHgxOCwgMHg2MywgMHg2MywgMHgwZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhjYiwgMHgxOCwgMHhiNCwgMHgxOCwgCi0weGUzLCAweDYzLCAweDIzLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDYxLCAweDYzLCAweDAxLCAweDMwLCAKLTB4MDIsIDB4MjgsIDB4ZTQsIDB4ZGIsIDB4MjksIDB4NDgsIDB4YzEsIDB4MWQsIDB4ZjksIDB4MzEsIDB4MjksIDB4NGMsIAotMHhjMCwgMHg0NiwgMHhhMSwgMHg2MiwgMHg2MSwgMHg2YiwgMHgwZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhlMSwgMHg2MiwgCi0weGMxLCAweDE4LCAweDkxLCAweDYyLCAweDUxLCAweDZiLCAweGMwLCAweDQ2LCAweGQxLCAweDYyLCAweDA4LCAweDIxLCAKLTB4ZTEsIDB4NjQsIDB4MjUsIDB4NDksIDB4YzAsIDB4NDYsIDB4MjEsIDB4NjUsIDB4MjQsIDB4NDksIDB4MGIsIDB4NjksIAotMHhjMCwgMHg0NiwgMHg2MywgMHg2NSwgMHhjMywgMHgxZCwgMHg0ZCwgMHgzMywgMHhlMywgMHg2NSwgMHgyNSwgMHg2NiwgCi0weDhiLCAweDY4LCAweGMwLCAweDQ2LCAweDYzLCAweDY2LCAweGNiLCAweDY4LCAweGMwLCAweDQ2LCAweGEzLCAweDY2LCAKLTB4MWUsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZTMsIDB4NjYsIDB4MjcsIDB4NjcsIDB4MGIsIDB4MjMsIDB4ZGIsIDB4MDEsIAotMHhjMywgMHgxOCwgMHhhMywgMHg2NywgMHg2NywgMHg2NywgMHgwMSwgMHgyNiwgMHhlMywgMHgxZCwgMHg2OSwgMHgzMywgCi0weDY2LCAweDYxLCAweGU3LCAweDYxLCAweDFmLCAweDczLCAweDAyLCAweDIzLCAweGQzLCAweDY0LCAweDE3LCAweDRiLCAKLTB4YzAsIDB4NDYsIDB4MTMsIDB4NjUsIDB4Y2IsIDB4NjksIDB4YzAsIDB4NDYsIDB4NTMsIDB4NjUsIDB4YzMsIDB4MWQsIAotMHg1MSwgMHgzMywgMHhkMywgMHg2NSwgMHgyYiwgMHgxZCwgMHgxMywgMHg2NiwgMHg0YiwgMHg2OSwgMHhjMCwgMHg0NiwgCi0weDUzLCAweDY2LCAweDg5LCAweDY5LCAweGMwLCAweDQ2LCAweDkxLCAweDY2LCAweDBmLCAweDQ5LCAweGMwLCAweDQ2LCAKLTB4ZDEsIDB4NjYsIDB4MTYsIDB4NjcsIDB4MGYsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4OTAsIDB4NjcsIAotMHg1NiwgMHg2NywgMHhkNywgMHg2MSwgMHhkMCwgMHgxZCwgMHg2OSwgMHgzMCwgMHg1NiwgMHg2MSwgMHgwNywgMHg3MywgCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU0LCAweDJjLCAweDAwLCAweDgwLCAKLTB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4ZWUsIDB4MjAsIDB4NDAsIDB4MzAsIDB4MDEsIDB4MTgsIDB4MDAsIAotMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHg1NSwgMHhmZiwgMHhmZiwgMHgzOCwgMHgwMSwgMHgxOCwgMHgwMCwgCi0weDEwLCAweDU1LCAweGZmLCAweGZmLCAweDkwLCAweGI0LCAweDAwLCAweDIxLCAweDFlLCAweDRhLCAweGJiLCAweDIzLCAKLTB4MWIsIDB4MDEsIDB4ZDcsIDB4MTgsIDB4ZjksIDB4NzMsIDB4MTksIDB4MjMsIAotMHhkYiwgMHgwMSwgMHhkMCwgMHgxOCwgMHgwMSwgMHgyNCwgMHhjZCwgMHgyMywgMHgxYiwgMHgwMSwgMHhkMywgMHgxOCwgCi0weGMxLCAweDYxLCAweDFjLCAweDcwLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDk5LCAweDYwLCAKLTB4YjksIDB4NzMsIDB4NTksIDB4NjEsIDB4MmYsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4MTksIDB4NjAsIAotMHgxMywgMHg0YiwgMHg1MSwgMHgyNywgMHhiZiwgMHgwMywgMHgwMywgMHg2MywgMHgzYiwgMHg2MCwgMHg4NCwgMHg2OSwgCi0weGU0LCAweDE4LCAweDQ0LCAweDYzLCAweDA0LCAweDNjLCAweDdjLCAweDYwLCAweDAxLCAweDI0LCAweGU0LCAweDAyLCAKLTB4ODQsIDB4NjMsIDB4MGUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4YmMsIDB4NjAsIDB4MDQsIDB4NmIsIDB4YzAsIDB4NDYsIAotMHg0NCwgMHg2MiwgMHg4NCwgMHg2OSwgMHhlNCwgMHgxOCwgMHgwYiwgMHg0YiwgMHhlMywgMHgxOCwgMHhmYiwgMHg2MCwgCi0weDAzLCAweDZiLCAweGMwLCAweDQ2LCAweDgzLCAweDYyLCAweDQzLCAweDZhLCAweGMwLCAweDQ2LCAweDAzLCAweDYyLCAKLTB4YzEsIDB4NjMsIDB4NTEsIDB4NjQsIDB4OTEsIDB4NjQsIDB4ZDEsIDB4NjUsIDB4ZDEsIDB4NjYsIDB4OTAsIDB4YmMsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgCi0weGZjLCAweDA3LCAweDAwLCAweDAwLCAweGZjLCAweGY3LCAweGZmLCAweGZmLCAweDkwLCAweGI0LCAweDAwLCAweDIyLCAKLTB4MWIsIDB4NDksIDB4YzksIDB4MjMsIDB4MWIsIDB4MDEsIDB4YzgsIDB4MTgsIDB4MDIsIDB4NzEsIDB4MDEsIDB4MjAsIAotMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhjYiwgMHgxOCwgMHg1OCwgMHg3MywgMHgxNywgMHg0OCwgMHgwMywgMHgxYywgCi0weDAwLCAweDI3LCAweGRjLCAweDFkLCAweGMxLCAweDM0LCAweDFjLCAweDY1LCAweDIzLCAweDFjLCAweDAxLCAweDM3LCAKLTB4M2YsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MWEsIDB4NjUsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4Y2YsIDB4MTgsIAotMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYiwgMHgxOCwgMHgzYSwgMHg2MSwgMHg5OCwgMHg2MSwgMHg0MCwgMHgyMCwgCi0weGY4LCAweDYwLCAweGRhLCAweDYxLCAweDFhLCAweDYyLCAweGNhLCAweDY0LCAweDBhLCAweDY2LCAweDBjLCAweDQ4LCAKLTB4YzAsIDB4NDYsIDB4YzIsIDB4NjAsIDB4MGIsIDB4NDgsIDB4MDAsIDB4NmIsIDB4YzAsIDB4MDYsIDB4YzAsIDB4MGUsIAotMHhmOCwgMHg2MywgMHgwYSwgMHg0OCwgMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxOSwgMHg4MCwgMHg0MSwgMHg2OCwgCi0weGMwLCAweDQ2LCAweDU5LCAweDgwLCAweDgwLCAweDY4LCAweGMwLCAweDQ2LCAweDk4LCAweDgwLCAweDkwLCAweGJjLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YmMsIDB4MjAsIDB4NDAsIAotMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgCi0weDAwLCAweDIwLCAweDBhLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDczLCAweGNiLCAweDFkLCAweGZmLCAweDMzLCAKLTB4M2EsIDB4MzMsIDB4ODgsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MTgsIDB4NzAsIDB4MDYsIDB4NGEsIDB4YzAsIDB4NDYsIAotMHgxMCwgMHg2NSwgMHg1MCwgMHg2NiwgMHg5MCwgMHg2NiwgMHgwOCwgMHg3MCwgMHg1OCwgMHg3MCwgMHhiYiwgMHgyMywgCi0weDFiLCAweDAxLCAweGQxLCAweDE4LCAweDA4LCAweDczLCAweDcwLCAweDQ3LCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjQsIDB4MmYsIDB4NDksIDB4MmYsIDB4NGEsIDB4YzAsIDB4NDYsIAotMHgxMSwgMHg2MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHhjOCwgMHgxOCwgMHg1MCwgMHg2MSwgMHgyZCwgMHg0OCwgCi0weGMwLCAweDQ2LCAweDEwLCAweDYyLCAweGRiLCAweDAwLCAweGMzLCAweDE4LCAweDUzLCAweDYyLCAweDAwLCAweDIzLCAKLTB4MTMsIDB4NjMsIDB4NTMsIDB4NjMsIDB4MjksIDB4NGEsIDB4MmEsIDB4NGYsIDB4ZDQsIDB4MWQsIDB4ZmYsIDB4MzQsIAotMHhmYSwgMHgzNCwgMHgxNCwgMHhjNywgMHgwOCwgMHgzZiwgMHgzYiwgMHg2MSwgMHgxYywgMHgxZiwgMHg3YywgMHg2MSwgCi0weDI2LCAweDRmLCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweGI4LCAweDYxLCAweDc5LCAweDYxLCAweGY4LCAweDYyLCAKLTB4M2IsIDB4NjMsIDB4N2IsIDB4NjQsIDB4YmEsIDB4NjQsIDB4ZmEsIDB4NjUsIDB4MjIsIDB4NGYsIDB4ZmUsIDB4MWQsIAotMHhmOSwgMHgzNiwgMHgyMiwgMHg0ZCwgMHhlYywgMHgxZCwgMHg3OSwgMHgzNCwgMHgyNiwgMHg2MiwgMHg1MSwgMHgyNiwgCi0weGI2LCAweDAzLCAweDM3LCAweDYxLCAweDI0LCAweDZhLCAweGMwLCAweDQ2LCAweDc0LCAweDYxLCAweDJmLCAweDY3LCAKLTB4MWQsIDB4NGQsIDB4MDksIDB4MjcsIDB4N2YsIDB4MDQsIDB4ZWMsIDB4MWQsIDB4NzUsIDB4MzQsIDB4N2MsIDB4NjAsIAotMHgzZCwgMHg2MCwgMHgxYiwgMHg0YywgMHhjMCwgMHg0NiwgMHgzYywgMHg2MSwgMHhlNiwgMHgxZCwgMHg3NSwgMHgzNiwgCi0weDdlLCAweDYxLCAweDE5LCAweDRmLCAweGMwLCAweDQ2LCAweDdjLCAweDYwLCAweDNkLCAweDYwLCAweDBmLCAweDFjLCAKLTB4MDAsIDB4MjEsIDB4ZmYsIDB4MjQsIDB4MDEsIDB4MzQsIDB4MWQsIDB4MWMsIDB4OGIsIDB4MDAsIDB4ZmQsIDB4NTAsIAotMHgwMSwgMHgzMSwgMHhhMSwgMHg0MiwgMHhmYSwgMHhkMywgMHgwMSwgMHgxYywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgCi0weGZmLCAweDAyLCAweDgzLCAweDAwLCAweGNkLCAweDUwLCAweDAxLCAweDMwLCAweGI4LCAweDQyLCAweGZhLCAweGQzLCAKLTB4MDAsIDB4MjAsIDB4ODEsIDB4MDAsIDB4NTUsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODAsIDB4MjgsIDB4ZmEsIDB4ZDMsIAotMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwgCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDI0LCAweDgzLCAweDIwLCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLCAKLTB4ODAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwgCi0weDA4LCAweDA0LCAweDAwLCAweDgwLCAweGI4LCAweGI1LCAweDJjLCAweDQ4LCAweGZkLCAweGY3LCAweGJhLCAweGZkLCAKLTB4MDEsIDB4MjAsIDB4MmIsIDB4NDksIDB4MGEsIDB4NjgsIDB4NTIsIDB4MGMsIDB4MDYsIDB4ZDIsIDB4MGEsIDB4NjgsIAotMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwYSwgMHg2OCwgMHg5MiwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwgCi0weDA0LCAweDA2LCAweDI0LCAweDBlLCAweDI1LCAweDRhLCAweGQ3LCAweDFkLCAweDBkLCAweDM3LCAweDAwLCAweDIzLCAKLTB4MDAsIDB4MjAsIDB4OWQsIDB4MDAsIDB4NzgsIDB4NTEsIDB4MDEsIDB4MzMsIDB4MDQsIDB4MmIsIDB4ZmEsIDB4ZDMsIAotMHgwMSwgMHgyNywgMHgzZiwgMHgwNSwgMHg1MCwgMHg2MSwgMHhmOCwgMHg2MCwgMHhkMCwgMHg2MSwgMHhmOCwgMHg2MSwgCi0weDAwLCAweDIzLCAweGRiLCAweDQzLCAweDkzLCAweDYxLCAweDNiLCAweDYxLCAweDEzLCAweDYyLCAweDNiLCAweDYyLCAKLTB4MDAsIDB4MjcsIDB4MWIsIDB4NGIsIDB4OGQsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4OGQsIDB4NjksIAotMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHgwMCwgMHgyYywgMHgwYiwgMHhkMCwgMHhkZCwgMHg2YiwgMHhjMCwgMHg0NiwgCi0weDAwLCAweDk1LCAweDlkLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDVkLCAweDZiLCAweGMwLCAweDQ2LCAKLTB4MDAsIDB4OTUsIDB4MWQsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4MDEsIDB4MzcsIDB4NDAsIDB4MmYsIAotMHhlOCwgMHhkMywgMHgwMCwgMHgyNywgMHg2YywgMHg0NiwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNywgMHgxYywgMHg0MywgCi0weDAxLCAweGUwLCAweDIwLCAweDYwLCAweDAxLCAweDM3LCAweDBkLCAweDY4LCAweDJiLCAweDA5LCAweDAyLCAweGQyLCAKLTB4ODAsIDB4MmYsIDB4ZjgsIDB4ZDMsIDB4MDEsIDB4ZTAsIDB4ODAsIDB4MmYsIDB4MDMsIDB4ZDMsIDB4MDgsIDB4NDksIAotMHg0YiwgMHg2ZSwgMHgwMSwgMHgzMywgMHg0YiwgMHg2NiwgMHhkMCwgMHg2MiwgMHhiOCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIAotMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgwZSwgMHg0ZiwgMHgwZiwgMHg0YSwgMHgwMCwgMHgyMCwgMHg0YywgMHgwMSwgCi0weDY0LCAweDFhLCAweGE0LCAweDAwLCAweGEzLCAweDE4LCAweDU4LCAweDYwLCAweDk4LCAweDYwLCAweDE4LCAweDY0LCAKLTB4NTgsIDB4NjQsIDB4MTAsIDB4NTMsIDB4NTgsIDB4ODAsIDB4Y2MsIDB4MDAsIDB4ZTQsIDB4MTksIDB4OTgsIDB4NjcsIAotMHhkYywgMHg2MiwgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhlZSwgMHhkMywgMHgwNiwgMHg0OSwgMHhjMCwgMHg0NiwgCi0weDA4LCAweDYwLCAweDQ4LCAweDYwLCAweDg4LCAweDYwLCAweGM4LCAweDYwLCAweDA4LCAweDYxLCAweDkwLCAweGJjLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YWMsIDB4NjYsIDB4MjEsIDB4NDAsIDB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIAotMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg2NCwgMHgyMSwgMHgwNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2MywgCi0weDAwLCAweDIxLCAweGM5LCAweDQzLCAweDQxLCAweDYzLCAweDgxLCAweDYzLCAweDAwLCAweDIxLCAweGMxLCAweDYzLCAKLTB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjAsIAotMHg0MCwgMHgwMiwgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgzYywgMHgyMCwgMHg0OCwgMHg2MCwgCi0weDg4LCAweDYwLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAwLCAweDIwLCAweDA3LCAweDRhLCAKLTB4ODcsIDB4MDAsIDB4Y2IsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4NTEsIDB4MDEsIDB4MzAsIDB4MTAsIDB4MjgsIAotMHhmOCwgMHhkMywgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwgCi0weGY0LCAweDJkLCAweDAwLCAweDgwLCAweDVkLCAweDRjLCAweGZmLCAweGZmLCAweDEyLCAweDQ5LCAweDEzLCAweDQ4LCAKLTB4NjcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2EsIDB4MTgsIDB4MDYsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MTEsIDB4NGIsIAotMHhjYSwgMHgxOCwgMHhjMSwgMHg2MCwgMHg4MiwgMHg2MCwgMHgwMSwgMHg2MSwgMHgwZiwgMHg0OSwgMHgxMCwgMHg0OCwgCi0weGE3LCAweDIzLCAweDliLCAweDAxLCAweGNhLCAweDE4LCAweDA2LCAweGMwLCAweDA4LCAweDM4LCAweDBlLCAweDRiLCAKLTB4Y2EsIDB4MTgsIDB4YzEsIDB4NjAsIDB4ODIsIDB4NjAsIDB4MDEsIDB4NjEsIDB4MGMsIDB4NDgsIDB4MGQsIDB4NDksIAotMHg2NywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMiwgMHgxOCwgMHgwNSwgMHhjMSwgMHgwOCwgMHgzOSwgMHgwNSwgMHg0YiwgCi0weGMyLCAweDE4LCAweGM4LCAweDYwLCAweDhhLCAweDYwLCAweDA4LCAweDYxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAKLTB4YWMsIDB4MWUsIDB4MjEsIDB4NDAsIDB4NDgsIDB4MmUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MWYsIDB4MDAsIDB4MDAsIAotMHhhYywgMHhlZSwgMHgyMCwgMHg0MCwgMHgzNCwgMHgyZSwgMHgwMCwgMHg4MCwgMHhmYywgMHgyZiwgMHgwMCwgMHgwMCwgCi0weGFjLCAweDNlLCAweDIxLCAweDQwLCAweDVjLCAweDJlLCAweDAwLCAweDgwLCAKLTB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4NDAsIDB4NGMsIDB4MDAsIDB4MjAsIDB4MGEsIDB4MDEsIDB4MTIsIDB4MTksIAotMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2MiwgMHgxMCwgMHg2MywgMHg1MCwgMHg2MywgCi0weDkwLCAweDYzLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGYzLCAweGQzLCAweDNhLCAweDQ5LCAweGMwLCAweDQ2LCAKLTB4MDgsIDB4NjMsIDB4NDgsIDB4NjMsIDB4ODgsIDB4NjMsIDB4MjAsIDB4NjAsIDB4MDEsIDB4MjEsIDB4ZTMsIDB4MWQsIAotMHg1OSwgMHgzMywgMHg2MCwgMHg2MCwgMHgxOSwgMHg3MSwgMHgxOCwgMHg3MiwgMHg5OCwgMHg3MSwgMHg5OCwgMHg3MiwgCi0weDU5LCAweDcxLCAweDU4LCAweDcyLCAweGQ4LCAweDcxLCAweGQ4LCAweDcyLCAweGUyLCAweDFkLCAweDQ5LCAweDMyLCAKLTB4MTEsIDB4NzMsIDB4MTksIDB4NzAsIDB4OTAsIDB4NzMsIDB4OTgsIDB4NzAsIDB4NTEsIDB4NzMsIDB4NTksIDB4NzAsIAotMHhkMCwgMHg3MywgMHhkOCwgMHg3MCwgMHgxMSwgMHg3MSwgMHgxMSwgMHg3MiwgMHg5MCwgMHg3MSwgMHg5MCwgMHg3MiwgCi0weDUwLCAweDcxLCAweDUwLCAweDcyLCAweGQwLCAweDcxLCAweGQwLCAweDcyLCAweDE4LCAweDczLCAweDAyLCAweDIyLCAKLTB4ZTcsIDB4MWQsIDB4NjksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YmEsIDB4NzAsIDB4NTgsIDB4NzMsIAotMHg3OCwgMHg3MCwgMHhkOCwgMHg3MywgMHhmOCwgMHg3MCwgMHgzOSwgMHg3MSwgMHgzYSwgMHg3MiwgMHhiOSwgMHg3MSwgCi0weGI5LCAweDcyLCAweDc4LCAweDcxLCAweDdhLCAweDcyLCAweGY5LCAweDcxLCAweGY5LCAweDcyLCAweDM5LCAweDczLCAKLTB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OTksIDB4NzAsIDB4NzgsIDB4NzMsIAotMHg1YSwgMHg3MCwgMHhmOSwgMHg3MywgMHhkOSwgMHg3MCwgMHgxYSwgMHg3MSwgMHgxYSwgMHg3MiwgMHg5OSwgMHg3MSwgCi0weDlhLCAweDcyLCAweDU4LCAweDcxLCAweDVhLCAweDcyLCAweGQ5LCAweDcxLCAweGRhLCAweDcyLCAweDE5LCAweDczLCAKLTB4ZTcsIDB4MWQsIDB4ODksIDB4MzcsIDB4M2EsIDB4NzAsIDB4OTksIDB4NzMsIDB4YjksIDB4NzAsIDB4NTgsIDB4NzMsIAotMHg3YSwgMHg3MCwgMHhkOSwgMHg3MywgMHhmOSwgMHg3MCwgMHgzOSwgMHg3MSwgMHgzYSwgMHg3MiwgMHhiOSwgMHg3MSwgCi0weGI5LCAweDcyLCAweDc4LCAweDcxLCAweDdhLCAweDcyLCAweGY5LCAweDcxLCAweGY5LCAweDcyLCAweDNhLCAweDczLCAKLTB4ZTMsIDB4MWQsIDB4OTksIDB4MzMsIDB4MWEsIDB4NzAsIDB4YjksIDB4NzMsIDB4OWEsIDB4NzAsIDB4NzgsIDB4NzMsIAotMHg1YSwgMHg3MCwgMHhmOSwgMHg3MywgMHhkYSwgMHg3MCwgMHgxOSwgMHg3MSwgMHgxYSwgMHg3MiwgMHg5OSwgMHg3MSwgCi0weDk5LCAweDcyLCAweDU4LCAweDcxLCAweDVhLCAweDcyLCAweGQ5LCAweDcxLCAweGQ5LCAweDcyLCAweDIwLCAweDYxLCAKLTB4ZTAsIDB4NjAsIDB4NjAsIDB4NjEsIDB4YTAsIDB4NjAsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhlOCwgMHgxOSwgMHgwMCwgMHg4MCwgMHg4MSwgMHgyMCwgMHgwMCwgMHgwMiwgCi0weDAxLCAweDQ5LCAweGMwLCAweDQ2LCAweDg4LCAweDYyLCAweDcwLCAweDQ3LCAweGMwLCAweDAwLCAweDE0LCAweDAwLCAKLTB4MDksIDB4NDksIDB4MGEsIDB4NGIsIDB4YzgsIDB4MTgsIDB4MDQsIDB4M2IsIDB4YzksIDB4MTgsIDB4MDgsIDB4NjAsIAotMHgwMCwgMHgyMSwgMHhjMiwgMHgxZCwgMHgyOSwgMHgzMiwgMHhjMiwgMHg2MSwgMHgxMCwgMHgxYywgMHgwMSwgMHgzMSwgCi0weDA4LCAweDI5LCAweGY4LCAweGQzLCAweGMxLCAweDFmLCAweDI5LCAweDM5LCAweDAwLCAweDIwLCAweGM4LCAweDYxLCAKLTB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODQsIDB4MDksIDB4MDAsIDB4MDAsIAotMHgwNiwgMHg0OCwgMHgwNywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHg0OCwgMHg4MCwgMHgwMCwgMHgyMCwgCi0weDg4LCAweDgwLCAweGM4LCAweDgwLCAweDg4LCAweDYwLCAweDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDQ4LCAweDYxLCAKLTB4ODgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIAotMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgwNiwgMHg0OCwgMHhjMiwgMHgxZCwgMHgxOSwgMHgzMiwgCi0weGMxLCAweDYwLCAweDAxLCAweDYxLCAweGMxLCAweDYxLCAweDAxLCAweDYyLCAweDExLCAweDcxLCAweGZmLCAweDMwLCAKLTB4MDEsIDB4MzAsIDB4NDEsIDB4NjIsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIAotMHgwOSwgMHg0OCwgMHgwYSwgMHg0YiwgMHhjMCwgMHg0NiwgMHgxOCwgMHg2MCwgMHgwMCwgMHgyMSwgMHhjMiwgMHgxZCwgCi0weDRkLCAweDMyLCAweGMyLCAweDYwLCAweDEwLCAweDFjLCAweDAxLCAweDMxLCAweDE0LCAweDI5LCAweGY4LCAweGQzLCAKLTB4YzEsIDB4MWYsIDB4NGQsIDB4MzksIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjAsIDB4NTgsIDB4NjAsIDB4OTgsIDB4NjAsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkOCwgMHgwNywgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgCi0weDAwLCAweGI1LCAweDBiLCAweDQ5LCAweDBiLCAweDQ4LCAweGZkLCAweGY3LCAweGVhLCAweGZiLCAweDBiLCAweDQ4LCAKLTB4MDAsIDB4NmEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsIAotMHgwOCwgMHg2MiwgMHgwOSwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgwNCwgMHhkMSwgMHhjMCwgMHg2ZiwgCi0weDgwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4NzUsIDB4OTgsIDB4MjEsIDB4NDAsIAotMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgCi0weDAwLCAweGI1LCAweDBmLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDA0LCAweGQxLCAweGMwLCAweDZmLCAKLTB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MGIsIDB4NGIsIDB4MGMsIDB4NDgsIAotMHgwYywgMHg0YSwgMHgwMCwgMHgyMSwgMHhmZCwgMHhmNywgMHhiZiwgMHhmYiwgMHgwYiwgMHg0OCwgMHg0MSwgMHg4ZCwgCi0weDAxLCAweDMxLCAweDQxLCAweDg1LCAweDAwLCAweDIxLCAweGMxLCAweDg1LCAweDA5LCAweDQ4LCAweDAwLCAweDZhLCAKLTB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4MTgsIDB4NDMsIDB4MDgsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwgCi0weDc1LCAweDk4LCAweDIxLCAweDQwLCAweGI4LCAweDBiLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAKLTB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4MWIsIDB4NGMsIAotMHgxMCwgMHgyNiwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwOCwgMHhkMSwgMHg2MCwgMHg4OCwgMHgwMCwgMHgyOCwgCi0weDA1LCAweGQxLCAweDIwLCAweDc5LCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDE5LCAweDIwLCAweGEwLCAweDY3LCAKLTB4MDAsIDB4ZTAsIDB4YTYsIDB4NjcsIDB4MDAsIDB4MjAsIDB4MDcsIDB4MjMsIDB4NWIsIDB4MDIsIDB4ZTUsIDB4MTgsIAotMHhjMSwgMHg0MywgMHhlOCwgMHg2MSwgMHg2OSwgMHg2MiwgMHg1OSwgMHgwOCwgMHhhMSwgMHgyNywgMHg3ZiwgMHgwMywgCi0weDc5LCAweDYwLCAweDBmLCAweDIxLCAweDc5LCAweDYwLCAweGUxLCAweDFkLCAweGI5LCAweDMxLCAweDA4LCAweDcxLCAKLTB4MDEsIDB4MjAsIDB4YjgsIDB4NjAsIDB4NDAsIDB4MDIsIDB4YjgsIDB4NjAsIDB4MDAsIDB4ZjAsIDB4NGMsIDB4ZmEsIAotMHgwMCwgMHhmMCwgMHhmMCwgMHhmYSwgMHgwNCwgMHgyMCwgMHhiOCwgMHg2MCwgMHgwNywgMHgyMCwgMHg3OCwgMHg2MSwgCi0weDdlLCAweDYwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGUwLCAweDE4LCAweGMwLCAweDhiLCAweDA0LCAweDIzLCAKLTB4MTgsIDB4NDAsIDB4ZTgsIDB4NjIsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgwMiwgMHgxYywgMHgwMCwgMHgyMCwgMHhmZiwgMHgyMywgCi0weDAxLCAweDMzLCAweDlhLCAweDQyLCAweDA4LCAweGQwLCAweDAxLCAweDI5LCAweDAwLCAweGQxLCAweDAxLCAweDIwLCAKLTB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIAotMHgxYiwgMHg0YSwgMHhkNywgMHg2OCwgMHgxYSwgMHg0YiwgMHgxOSwgMHg3OSwgMHgxYywgMHgxYywgMHgzNywgMHgyMywgCi0weDliLCAweDAxLCAweGUzLCAweDE4LCAweDAxLCAweDJmLCAweDBkLCAweGQxLCAweDU3LCAweDg4LCAweDAwLCAweDJmLCAKLTB4MGEsIDB4ZDEsIDB4MDAsIDB4MjksIDB4MGEsIDB4ZDEsIDB4NTksIDB4OGIsIDB4MGEsIDB4MDksIDB4MDAsIDB4ZDMsIAotMHgwMiwgMHgyMCwgMHg0OSwgMHgwOSwgMHhlOCwgMHhkMywgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHhlNSwgMHhlNywgCi0weDAwLCAweDI5LCAweDAzLCAweGQwLCAweDk4LCAweDhhLCAweDgwLCAweDA3LCAweDgwLCAweDBmLCAweGRmLCAweGU3LCAKLTB4NmQsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4OGEsIDB4ODgsIDB4ZmYsIDB4MjcsIDB4MDEsIDB4MzcsIAotMHgxNywgMHg0MCwgMHgwYSwgMHg0OSwgMHhjOSwgMHg4OCwgMHgwMywgMHhkMCwgMHg0YiwgMHgwYSwgMHgwMSwgMHhkMywgCi0weDAzLCAweDIwLCAweGQxLCAweGU3LCAweDEzLCAweDBhLCAweDAzLCAweGQzLCAweDBiLCAweDBhLCAweDAxLCAweGQzLCAKLTB4MDIsIDB4MjAsIDB4Y2IsIDB4ZTcsIDB4ZDIsIDB4MDksIDB4YzksIDB4ZDMsIDB4YzksIDB4MDksIDB4YzcsIDB4ZDMsIAotMHgwMSwgMHgyMCwgMHhjNSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwOCwgMHgxYywgMHgwMCwgMHg4MCwgCi0weGYwLCAweGI1LCAweGMxLCAweGIwLCAweDAxLCAweDIwLCAweDAwLCAweDA3LCAweDUyLCAweDQ5LCAweGMwLCAweDQ2LCAKLTB4MDgsIDB4NjAsIDB4NTIsIDB4NDgsIDB4NDIsIDB4NjksIDB4NDAsIDB4MGQsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIAotMHg0OCwgMHg2MCwgMHg1MCwgMHg0OCwgMHhjMCwgMHg2YSwgMHg1MCwgMHg0YiwgMHgxOCwgMHg0MywgMHgwMCwgMHgyMSwgCi0weDAzLCAweDAzLCAweDFiLCAweDBiLCAweDRlLCAweDRjLCAweDI3LCAweDZmLCAweDNkLCAweDAzLCAweDJkLCAweDBiLCAKLTB4ZTcsIDB4MWQsIDB4NzksIDB4MzcsIDB4YWIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIAotMHgxYiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0MCwgMHg5MywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMywgMHg0MywgCi0weDFiLCAweDY4LCAweGNjLCAweDAwLCAweDZlLCAweDQ2LCAweDMzLCAweDUxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAKLTB4MDYsIDB4MWQsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4NmMsIDB4NDQsIDB4NjMsIDB4NjAsIDB4MDgsIDB4MzAsIAotMHgwMSwgMHgzMSwgMHg0MCwgMHg5YiwgMHg4MywgMHg0MiwgMHgwMCwgMHhkOCwgMHgzZiwgMHg0OCwgMHgwMywgMHgwMywgCi0weDFiLCAweDBiLCAweGFiLCAweDQyLCAweGU3LCAweGQxLCAweDAwLCAweDIwLCAweDAxLCAweDIzLCAweDFiLCAweDAzLCAKLTB4MTMsIDB4NDAsIDB4M2MsIDB4NGMsIDB4MDMsIDB4ZDAsIDB4NjMsIDB4NmEsIDB4MDEsIDB4MzMsIDB4NjMsIDB4NjIsIAotMHgwOSwgMHhlMCwgMHgxMywgMHgwYiwgMHgwMywgMHhkMywgMHgyMywgMHg2YSwgCi0weDAxLCAweDMzLCAweDIzLCAweDYyLCAweDAzLCAweGUwLCAweDM3LCAweDRiLCAweDVjLCAweDZkLCAweDAxLCAweDM0LCAKLTB4NWMsIDB4NjUsIDB4MDAsIDB4MjksIDB4MDksIDB4ZDAsIDB4MDMsIDB4MWMsIDB4ZGMsIDB4MDAsIDB4MjMsIDB4MWMsIAotMHg2YiwgMHg0NCwgMHg1YywgMHg2OCwgMHgwMSwgMHgzMCwgMHgyMywgMHgwZCwgMHgwMSwgMHhkMiwgMHg4OCwgMHg0MiwgCi0weGY1LCAweGQxLCAweDMwLCAweDRjLCAweDI1LCAweDY4LCAweDZiLCAweDBjLCAweDA1LCAweGQyLCAweDIzLCAweDY4LCAKLTB4MWIsIDB4MGMsIDB4MDgsIDB4ZDEsIDB4MjQsIDB4NjgsIDB4YTMsIDB4MGEsIDB4MDUsIDB4ZDMsIDB4MjAsIDB4MjQsIAotMHgyYiwgMHg0YiwgMHhjMCwgMHg0NiwgMHg1YywgMHg2MiwgMHgwMCwgMHgyNCwgMHg1YywgMHg2MiwgMHgyNSwgMHg0YiwgCi0weDIzLCAweDRjLCAweDUxLCAweDI2LCAweGI2LCAweDAzLCAweDIzLCAweDY3LCAweDMzLCAweDYxLCAweDNkLCAweDZhLCAKLTB4YzAsIDB4NDYsIDB4NzUsIDB4NjEsIDB4MDIsIDB4MjUsIDB4YTEsIDB4MjYsIDB4NzYsIDB4MDMsIDB4NzUsIDB4NjAsIAotMHgwMSwgMHgyNSwgMHhiNSwgMHg2MCwgMHhlNiwgMHgxZCwgMHhiOSwgMHgzNiwgMHgzNSwgMHg3MSwgMHg4OCwgMHg0MiwgCi0weDIxLCAweGQwLCAweDI1LCAweDFjLCAweGMzLCAweDAwLCAweDZjLCAweDQ2LCAweGU0LCAweDU4LCAweDJlLCAweDZmLCAKLTB4NmIsIDB4NDQsIDB4MzQsIDB4NjAsIDB4NWIsIDB4NjgsIDB4MmMsIDB4NmYsIDB4YzAsIDB4NDYsIDB4NjMsIDB4NjAsIAotMHgyYiwgMHg2ZiwgMHgwOCwgMHgzMywgMHgyYiwgMHg2NywgMHgzYywgMHg2YSwgMHhhMywgMHg0MiwgMHgwMiwgMHhkMywgCi0weDEyLCAweDRiLCAweGMwLCAweDQ2LCAweDJiLCAweDY3LCAweDAzLCAweDFjLCAweGRiLCAweDAwLCAweDZiLCAweDQ0LCAKLTB4NWMsIDB4NjgsIDB4MDEsIDB4MzAsIDB4MjMsIDB4MGQsIDB4MDQsIDB4ZDMsIDB4NTEsIDB4MjQsIDB4YTQsIDB4MDMsIAotMHgyYiwgMHg2ZiwgMHhjMCwgMHg0NiwgMHhhMywgMHg2MSwgMHg4OCwgMHg0MiwgMHhkZSwgMHhkMSwgMHgxMCwgMHgwYiwgCi0weDAzLCAweGQzLCAweDBlLCAweDQ5LCAweDAxLCAweDIwLCAweGZkLCAweGY3LCAweDc0LCAweGZhLCAweDQxLCAweGIwLCAKLTB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIAotMHgwMCwgMHgwMSwgMHgxNCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAKLTB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIAotMHhjOSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyMywgMHgwNywgMHgyMiwgCi0weDA2LCAweDI0LCAweDQ3LCAweDRmLCAweGMwLCAweDQ2LCAweDNjLCAweDYxLCAweDNhLCAweDYxLCAweDAxLCAweDMzLCAKLTB4MjAsIDB4MmIsIDB4ZjksIDB4ZDMsIDB4MDQsIDB4MjUsIDB4M2QsIDB4NjEsIDB4MDUsIDB4MjMsIDB4M2IsIDB4NjEsIAotMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzZCwgMHg2MSwgMHgzYiwgMHg2MSwgCi0weDNmLCAweDRkLCAweGFiLCAweDZmLCAweGRlLCAweDA4LCAweDAyLCAweDIzLCAweDFlLCAweDQwLCAweDA0LCAweDIzLCAKLTB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsIAotMHg5ZSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwgCi0weDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLCAweDVlLCAweDA4LCAweDAyLCAweDIzLCAKLTB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIAotMHgzYiwgMHg2MSwgMHgwMiwgMHgyMywgMHhhZSwgMHg2ZiwgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywgCi0weDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLCAweDVkLCAweDAwLCAKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHhjNSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDg1LCAweDA4LCAKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIAotMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHg0NSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywgCi0weDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDAyLCAweDI1LCAKLTB4MDUsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIAotMHgzYiwgMHg2MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwNCwgMHgyMywgMHgwMywgMHg0MywgCi0weDNiLCAweDYxLCAweDA1LCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDYxLCAweDAwLCAweDI1LCAweDNkLCAweDYxLCAKLTB4MDEsIDB4MjMsIDB4M2IsIDB4NjEsIDB4M2QsIDB4NjEsIDB4M2IsIDB4NjEsIDB4MDAsIDB4MjAsIDB4M2QsIDB4NjEsIAotMHgwZCwgMHg0YiwgMHgxYiwgMHg2OSwgMHg0OSwgMHgwMCwgMHgxZSwgMHgxYywgMHgwMiwgMHgyMywgMHgzMywgMHg0MCwgCi0weDE5LCAweDQzLCAweDAxLCAweDIzLCAweDNiLCAweDYxLCAweDAxLCAweDMwLCAKLTB4MTAsIDB4MjgsIDB4ZjIsIDB4ZDMsIDB4MDIsIDB4MjAsIDB4MzgsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MzgsIDB4NjEsIAotMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzOCwgMHg2MSwgMHg0OCwgMHgwOCwgCi0weGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4ZjAsIDB4YjQsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MjMsIDB4MDYsIDB4MjcsIAotMHg0NCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxNywgMHg2MSwgMHgxMywgMHg2MSwgMHgwMSwgMHgzNCwgMHgyMCwgMHgyYywgCi0weGY5LCAweGQzLCAweDA0LCAweDI2LCAweDE2LCAweDYxLCAweDA1LCAweDI0LCAweDE0LCAweDYxLCAweDE3LCAweDYxLCAKLTB4MDcsIDB4MjMsIDB4MTMsIDB4NjEsIDB4MTYsIDB4NjEsIDB4MTQsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MTMsIDB4NjEsIAotMHgzYywgMHg0YiwgMHg5YiwgMHg2ZiwgMHhkZCwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywgCi0weDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDM3LCAweDRiLCAweDliLCAweDZmLCAKLTB4OWQsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIAotMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgzMiwgMHg0YiwgMHg5YiwgMHg2ZiwgMHg1ZCwgMHgwOCwgMHgwMiwgMHgyMywgCi0weDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAKLTB4MmQsIDB4NGIsIDB4OWQsIDB4NmYsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIAotMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgyOSwgMHg0YiwgMHg5YiwgMHg2ZiwgMHg1ZCwgMHgwMCwgCi0weDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAKLTB4MTUsIDB4NjEsIDB4YzUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIAotMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg4NSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgCi0weDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLCAweDE1LCAweDYxLCAweDQ1LCAweDA4LCAKLTB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIAotMHgxNSwgMHg2MSwgMHgwMiwgMHgyNSwgMHgwNSwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwgCi0weDI1LCAweDQzLCAweDE1LCAweDYxLCAweDQwLCAweDAwLCAweDAyLCAweDIzLCAweDE4LCAweDQwLCAweDAzLCAweDFjLCAKLTB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjAsIDB4NDMsIDB4MTAsIDB4NjEsIDB4MTcsIDB4NjEsIDB4MDcsIDB4MjMsIAotMHgxMywgMHg2MSwgMHgxNiwgMHg2MSwgMHgxNCwgMHg2MSwgMHg0YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwZiwgMHgyMSwgCi0weDI1LCAweDFjLCAweGNkLCAweDQwLCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAKLTB4MTMsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzksIAotMHgxMCwgMHgyOCwgMHhmMSwgMHhkMywgMHgxNywgMHg2MSwgMHgwNywgMHgyMywgMHgxMywgMHg2MSwgMHgxNywgMHg2MSwgCi0weDEzLCAweDYxLCAweDAzLCAweDIwLCAweDEwLCAweDYxLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAKLTB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4NGYsIDB4NGQsIAotMHgwOCwgMHgyMSwgMHgwMiwgMHgyMCwgMHgyYSwgMHgxYywgMHhmZCwgMHhmNywgMHgyNywgMHhmOSwgMHg0ZCwgMHg0YywgCi0weDcxLCAweDIzLCAweDViLCAweDAxLCAweGU3LCAweDE4LCAweDM4LCAweDgwLCAweDFhLCAweDIxLCAweDAyLCAweDIwLCAKLTB4MmEsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4MWQsIDB4ZjksIDB4NzgsIDB4ODAsIDB4MjAsIDB4NzksIDB4MDAsIDB4MjgsIAotMHgwYiwgMHhkMCwgMHgwMCwgMHgyMCwgMHgzOCwgMHg4MCwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgxMCwgMHhkMSwgCi0weDQ0LCAweDQ4LCAweDAwLCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE4LCAweDQzLCAweDk5LCAweDAyLCAKLTB4MDgsIDB4NjAsIDB4ZTAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDYsIDB4ZDEsIDB4NjAsIDB4ODgsIDB4MDAsIDB4MjgsIAotMHgwMywgMHhkMSwgMHhmOSwgMHgyMSwgMHgxMiwgMHgyMCwgMHhmZiwgMHhmNywgMHg0MywgMHhmZiwgMHgwMSwgMHgyMSwgCi0weGM5LCAweDAzLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDNlLCAweGZmLCAweDAwLCAweDI1LCAweDdkLCAweDI2LCAKLTB4ZjYsIDB4MDAsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MzUsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OWMsIDB4ZmUsIAotMHgwMCwgMHgwYywgMHgwMSwgMHhkMywgMHhiNSwgMHg0MiwgMHhmNywgMHhkMywgMHgwMCwgMHgyNSwgMHgwNSwgMHhlMCwgCi0weDAzLCAweDIxLCAweDA5LCAweDAzLCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDJiLCAweGZmLCAweDAxLCAweDM1LCAKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OGQsIDB4ZmUsIDB4NDAsIDB4MGIsIDB4MDEsIDB4ZDIsIDB4YjUsIDB4NDIsIAotMHhmMiwgMHhkMywgMHgwNCwgMHgyMCwgMHhmZiwgMHhmNywgMHg4NiwgMHhmZSwgMHhmZiwgMHgyMywgMHhlMSwgMHgzMywgCi0weDk4LCAweDQzLCAweDAxLCAweDIxLCAweDAxLCAweDQzLCAweDM4LCAweDg4LCAweGZmLCAweDIzLCAweDAxLCAweDMzLCAKLTB4OTgsIDB4NDIsIDB4MDMsIDB4ZDEsIDB4MmYsIDB4MjMsIDB4NWIsIDB4MDEsIAotMHgxOSwgMHg0MywgMHgxNiwgMHhlMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHhkMSwgMHg3OCwgMHg4OCwgMHgwMSwgMHgyOCwgCi0weDAzLCAweGQxLCAweDIzLCAweDIzLCAweDViLCAweDAxLCAweDE5LCAweDQzLCAweDBkLCAweGUwLCAweDIwLCAweDIzLCAKLTB4MTksIDB4NDMsIDB4MGEsIDB4ZTAsIDB4MDAsIDB4MjgsIDB4MDgsIDB4ZDEsIDB4NzgsIDB4ODgsIDB4MDEsIDB4MjgsIAotMHgwMywgMHhkMSwgMHgwYiwgMHgyMywgMHhkYiwgMHgwMSwgMHgxOSwgMHg0MywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyMywgCi0weDE5LCAweDQzLCAweDA0LCAweDIwLCAweGZmLCAweGY3LCAweGY4LCAweGZlLCAweDA5LCAweDIxLCAweDQ5LCAweDAyLCAKLTB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZjMsIDB4ZmUsIDB4ZTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsIAotMHgwMCwgMHgyMSwgMHgxYiwgMHgyMCwgMHhmZiwgMHhmNywgMHhlYywgMHhmZSwgMHgxYSwgMHgyMCwgMHhmZiwgMHhmNywgCi0weDRmLCAweGZlLCAweDAxLCAweDIxLCAweGM5LCAweDAzLCAweDAxLCAweDQzLCAweDFhLCAweDIwLCAweGZmLCAweGY3LCAKLTB4ZTMsIDB4ZmUsIDB4MDAsIDB4MjcsIDB4MDMsIDB4ZTAsIDB4MDgsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmYsIAotMHgwOCwgMHhkOSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0MCwgMHhmZSwgMHg3OSwgMHgwMCwgMHgwOSwgMHgxOSwgCi0weDFiLCAweDIzLCAweGRiLCAweDAxLCAweGM5LCAweDE4LCAweDg4LCAweDgzLCAweDAxLCAweDM3LCAweDIwLCAweDJmLCAKLTB4ZWYsIDB4ZDMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZWQsIDB4YWYsIDB4MjEsIDB4NDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgxMywgMHg0OCwgCi0weDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAKLTB4ODEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIAotMHgwMSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgCi0weDgxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMxLCAweDY5LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAKLTB4MDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIAotMHg4MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgCi0weDAxLCAweGIwLCAweDcwLCAweDQ3LCAweDAwLCAweDA4LCAweDE0LCAweDQwLCAweGYwLCAweGI1LCAweDgzLCAweGIwLCAKLTB4NjgsIDB4NGQsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZWYsIDB4MTgsIDB4ZjgsIDB4OGIsIDB4MDQsIDB4MjIsIAotMHgwMiwgMHg0MCwgMHgwMiwgMHg5MiwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhlOCwgMHgxOCwgMHgwMSwgMHg4OCwgCi0weGMwLCAweDQ2LCAweDAxLCAweDkxLCAweDQwLCAweDg4LCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDAwLCAweDI0LCAKLTB4MDMsIDB4ZTAsIDB4MDgsIDB4MmMsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4MmMsIDB4MDgsIDB4ZDksIDB4MjAsIDB4MWMsIAotMHhmZiwgMHhmNywgMHhlOCwgMHhmZCwgMHg2MSwgMHgwMCwgMHg0OSwgMHgxOSwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgCi0weGM5LCAweDE4LCAweDg4LCAweDgzLCAweDAxLCAweDM0LCAweDIwLCAweDJjLCAweGVmLCAweGQzLCAweDU4LCAweDRjLCAKLTB4ZTAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MTUsIDB4ZDAsIDB4NTcsIDB4NGUsIDB4MjAsIDB4MjUsIDB4MDEsIDB4M2QsIAotMHg1MywgMHg0OSwgMHhlMCwgMHg2OSwgMHgzMCwgMHg0MCwgMHgwYiwgMHhkMCwgMHg2OCwgMHgwMCwgMHg0MCwgMHgxOCwgCi0weDM3LCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDhiLCAweDI4LCAweDFjLCAweGZmLCAweGY3LCAKLTB4NjUsIDB4ZmUsIDB4ZTAsIDB4NjksIDB4YjAsIDB4NDMsIDB4ZTAsIDB4NjEsIDB4NzYsIDB4MDgsIDB4MDAsIDB4MmQsIAotMHhlYiwgMHhkMSwgMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHhjMiwgMHhmZCwgMHg0OCwgMHg0OSwgMHhjMCwgMHg0NiwgCi0weGY4LCAweDgzLCAweGY4LCAweDhiLCAweGMyLCAweDA4LCAweDI1LCAweGQzLCAweGNhLCAweDY4LCAweDAxLCAweDJhLCAKLTB4MTMsIDB4ZDEsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MWYsIDB4ZDEsIDB4NDksIDB4ODgsIDB4MDAsIDB4MjksIAotMHgxYywgMHhkMSwgMHgwMSwgMHg5OSwgMHg0MywgMHg0YSwgMHgwMCwgMHgyOSwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyOSwgCi0weDE2LCAweGQxLCAweDUxLCAweDhiLCAweGM5LCAweDA4LCAweDEzLCAweGQyLCAweDBmLCAweGUwLCAweDUxLCAweDhiLCAKLTB4MDksIDB4MDksIDB4MGYsIDB4ZDIsIDB4MGIsIDB4ZTAsIDB4MGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MGIsIDB4ZDEsIAotMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4YSwgMHg4OCwgMHhjOSwgMHg4OCwgMHgxMSwgMHg0MCwgCi0weDQ5LCAweDA5LCAweDA5LCAweDA3LCAweDAyLCAweGQxLCAweDA0LCAweDIzLCAweDk4LCAweDQzLCAweGY4LCAweDgzLCAKLTB4ZjgsIDB4OGIsIDB4MDQsIDB4MjEsIDB4MDEsIDB4NDAsIDB4MDIsIDB4OWEsIDB4MWYsIDB4ZDAsIDB4YjksIDB4OGIsIAotMHg0YSwgMHgwYiwgMHgyNywgMHhkMywgMHg4MCwgMHgwOSwgMHgyNSwgMHhkMywgMHhmZiwgMHgyMywgMHgwMSwgMHg5OCwgCi0weDAxLCAweDMzLCAweDk4LCAweDQyLCAweDIwLCAweGQwLCAweDAwLCAweDI1LCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAKLTB4MDAsIDB4ZDEsIDB4MDUsIDB4MDIsIDB4MDEsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4MjMsIAotMHg1YiwgMHgwMywgMHgxZCwgMHg0MywgMHhhOSwgMHg0MiwgMHgxMywgMHhkMCwgCi0weDAwLCAweDIwLCAweDI5LCAweDFjLCAweGZmLCAweGY3LCAweDEwLCAweGZlLCAweGJkLCAweDgzLCAweDAwLCAweDIwLCAKLTB4YzAsIDB4NDMsIDB4NjAsIDB4NjIsIDB4MGEsIDB4ZTAsIDB4YjgsIDB4OGIsIDB4NDAsIDB4MGIsIDB4MDcsIDB4ZDIsIAotMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgwMywgMHhmZSwgMHgwOSwgMHgyMCwgCi0weDQwLCAweDAyLCAweGI4LCAweDgzLCAweGY4LCAweDhiLCAweGMwLCAweDA4LCAweDJkLCAweGQzLCAweDFkLCAweDQ4LCAKLTB4YzcsIDB4NmEsIDB4MDEsIDB4OTgsIDB4MDAsIDB4OTksIDB4ZmYsIDB4ZjcsIDB4NTEsIDB4ZmMsIDB4YzIsIDB4MDcsIAotMHhkMiwgMHgwZiwgMHgxYSwgMHg0OSwgMHgwMywgMHhkMCwgMHgwNCwgMHgyMywgMHhjZCwgMHg2ZCwgMHgyYiwgMHg0MywgCi0weDAzLCAweGUwLCAweDA0LCAweDIzLCAweGNkLCAweDZkLCAweDlkLCAweDQzLCAweDJiLCAweDFjLCAweGNiLCAweDY1LCAKLTB4ODMsIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MDIsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4MmIsIDB4NDMsIDB4MDMsIDB4ZTAsIAotMHgwMiwgMHgyMywgMHhjZCwgMHg2ZCwgMHg5ZCwgMHg0MywgMHgyYiwgMHgxYywgMHhjYiwgMHg2NSwgMHg2MSwgMHg2YSwgCi0weDgxLCAweDQyLCAweDBjLCAweGQwLCAweDYwLCAweDYyLCAweDBlLCAweDQ4LCAweDAwLCAweDJhLCAweDAzLCAweGQwLCAKLTB4ZmYsIDB4MjEsIDB4MjEsIDB4MzEsIDB4MzksIDB4NDMsIDB4MDMsIDB4ZTAsIDB4ZmYsIDB4MjMsIDB4MjEsIDB4MzMsIAotMHg5ZiwgMHg0MywgMHgzOSwgMHgxYywgMHhjMSwgMHg2MiwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDY4LCAweDFjLCAweDAwLCAweDgwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg5MCwgMHhiNCwgMHgwMSwgMHgyMiwgCi0weDIwLCAweDI4LCAweDBmLCAweGQyLCAweDQzLCAweDAwLCAweDBmLCAweDFjLCAweDA3LCAweDQ5LCAweDVjLCAweDE4LCAKLTB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4OWYsIDB4ODMsIDB4ODIsIDB4NDAsIDB4MDcsIDB4MjMsIAotMHg1YiwgMHgwMiwgMHhjOSwgMHgxOCwgMHgxMCwgMHgxYywgMHhjYSwgMHg2OSwgMHgxMCwgMHg0MywgMHhjOCwgMHg2MSwgCi0weDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDBiLCAweDQ4LCAweDQwLCAweDY5LCAKLTB4MGIsIDB4NDksIDB4YzksIDB4OGIsIDB4MDQsIDB4MjIsIDB4MGEsIDB4NDAsIDB4MGEsIDB4NDksIDB4MDYsIDB4ZDAsIAotMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwMSwgMHgyMywgMHhjYSwgMHg2ZCwgMHgxYSwgMHg0MywgCi0weDA1LCAweGUwLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDE4LCAweDQzLCAweGNhLCAweDZkLCAweDUyLCAweDA4LCAKLTB4NTIsIDB4MDAsIDB4Y2EsIDB4NjUsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsIAotMHhlOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgCi0weGZmLCAweGY3LCAweGRlLCAweGZmLCAweDAxLCAweDFjLCAweDA1LCAweDIwLCAweDAwLCAweDkwLCAweDAwLCAweDIwLCAKLTB4MDEsIDB4YWIsIDB4MTgsIDB4ODAsIDB4MDQsIDB4M2IsIDB4NTgsIDB4NzAsIDB4MWIsIDB4MjIsIDB4MDAsIDB4YWIsIAotMHg1YSwgMHg4MCwgMHhkOSwgMHg4MCwgMHgwNSwgMHg0OSwgMHhjOSwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwgCi0weDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZkLCAweGY3LCAweDc5LCAweGY4LCAweDA0LCAweGIwLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MGYsIDB4NDgsIDB4MDEsIDB4NjgsIAotMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwgMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgCi0weDgwLCAweDBhLCAweDAzLCAweGQzLCAweDBiLCAweDQ4LCAweDAwLCAweDY4LCAweDAwLCAweDBjLCAweDAxLCAweGUwLCAKLTB4MGEsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDksIDB4NGIsIDB4OTgsIDB4NDIsIAotMHgwNSwgMHhkMCwgMHgwMiwgMHgzMywgMHg5OCwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwNywgMHg0YiwgMHg5OCwgMHg0MiwgCi0weDAxLCAweGQxLCAweDAxLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweGZjLCAweGU3LCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIAotMHgwNCwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNCwgMHgwMSwgMHgyNCwgCi0weDIxLCAweDFjLCAweDE4LCAweDQ4LCAweDAyLCAweDY4LCAweDUyLCAweDBjLCAweDA2LCAweGQyLCAweDAyLCAweDY4LCAKLTB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjEsIAotMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgxMiwgMHg0ZiwgMHgxMywgMHg0YSwgMHgwMiwgMHhkMCwgMHgzOCwgMHg2OCwgCi0weDAwLCAweDBjLCAweDAwLCAweGUwLCAweDkwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDEwLCAweDRiLCAKLTB4OTgsIDB4NDIsIDB4MDgsIDB4ZDAsIDB4MDIsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MDUsIDB4ZDAsIDB4MGUsIDB4NGIsIAotMHg5OCwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMiwgMHgzYiwgMHg5OCwgMHg0MiwgMHgwYywgMHhkMSwgMHgwMCwgMHgyOSwgCi0weDAyLCAweGQwLCAweGY4LCAweDZhLCAweDAwLCAweDBjLCAweDAwLCAweGUwLCAKLTB4ZDAsIDB4NmMsIDB4NDAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MjAsIDB4MDYsIDB4MDAsIDB4MGUsIAotMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgCi0weDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDk5LCAweDAwLCAweDAwLCAKLTB4MDcsIDB4OTksIDB4MDAsIDB4MDAsIDB4MGMsIDB4NDgsIDB4MDEsIDB4NjgsIDB4NDksIDB4MGMsIDB4MDUsIDB4ZDIsIAotMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNSwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMiwgMHhkMywgCi0weDA4LCAweDQ4LCAweDgwLCAweDY4LCAweDAxLCAweGUwLCAweDA4LCAweDQ4LCAweDQwLCAweDZjLCAweDAwLCAweDA0LCAKLTB4MDAsIDB4MGMsIDB4MDAsIDB4MjEsIDB4MDMsIDB4MjgsIDB4MDMsIDB4ZDAsIDB4NDAsIDB4MDgsIDB4MDEsIDB4ZDMsIAotMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwOCwgMHgxYywgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgCi0weDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDAxLCAweDI3LCAKLTB4MWEsIDB4NGMsIDB4MjUsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NzIsIDB4ZmYsIDB4MDMsIDB4MWMsIDB4MTksIDB4NGEsIAotMHgwMiwgMHgyMSwgMHgwMSwgMHgyNiwgMHgxOCwgMHg0OCwgMHgwMSwgMHgyYiwgMHgxYiwgMHhkMSwgMHhjYiwgMHgwNCwgCi0weDFlLCAweDYwLCAweDU1LCAweDIzLCAweDAzLCAweDYwLCAweDAwLCAweDIzLCAweDQzLCAweDYwLCAweDA2LCAweDY4LCAKLTB4NTUsIDB4MmUsIDB4MWIsIDB4ZDEsIDB4YWEsIDB4MjYsIDB4MDYsIDB4NjAsIDB4NDMsIDB4NjAsIDB4MDMsIDB4NjgsIAotMHhhYSwgMHgyYiwgMHgxNSwgMHhkMSwgMHgwOSwgMHgyMywgMHgwMywgMHg2MCwgMHgwNSwgMHgyMywgMHgwZiwgMHg0ZiwgCi0weGMwLCAweDQ2LCAweDNiLCAweDYwLCAweDAzLCAweDIzLCAweDBlLCAweDRmLCAweGMwLCAweDQ2LCAweDNiLCAweDYwLCAKLTB4MTEsIDB4NjAsIDB4MDcsIDB4NjgsIDB4MDgsIDB4ZTAsIDB4MDgsIDB4MjMsIDB4MjMsIDB4NjAsIDB4MDQsIDB4MjMsIAotMHgwYSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwgMHgxMSwgMHg2MCwgMHgwNiwgMHg2MCwgMHgyNywgMHg2OCwgCi0weGMwLCAweDQ2LCAweDI1LCAweDYwLCAweDM4LCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MjIsIDB4NDAsIAotMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg0MCwgCi0weDgwLCAweGI1LCAweDA3LCAweDFjLCAweGZmLCAweGY3LCAweDMwLCAweGZmLCAweDAxLCAweDI4LCAweDA1LCAweGQxLCAKLTB4MTksIDB4NDgsIDB4MDAsIDB4NjgsIDB4MTksIDB4NDksIDB4NDksIDB4NmIsIDB4MDgsIDB4NDAsIDB4MjIsIDB4ZTAsIAotMHgxOCwgMHg0OCwgMHgwMSwgMHg2OCwgMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwgMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgCi0weDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAzLCAweGQzLCAweDE0LCAweDQ4LCAweDAwLCAweDY4LCAKLTB4MDAsIDB4MGMsIDB4MDEsIDB4ZTAsIDB4MTMsIDB4NDgsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIAotMHgxMiwgMHg0YiwgMHhjMCwgMHgxOCwgMHgwOCwgMHgyOCwgMHgwYiwgMHhkMiwgMHgwMSwgMHhhMywgMHgxYiwgMHg1YywgCi0weDViLCAweDAwLCAweDlmLCAweDQ0LCAweDA1LCAweDAzLCAweDA3LCAweDAzLCAweDA3LCAweDA3LCAweDA1LCAweDAzLCAKLTB4MDMsIDB4MjAsIDB4MDIsIDB4ZTAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjEsIAotMHgzOCwgMHg2MCwgMHg4MCwgMHgwNywgMHgwMCwgMHhkMSwgMHgwMCwgMHgyMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwZSwgCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDM0LCAweDZlLCAweDIxLCAweDQwLCAKLTB4MDAsIDB4MDAsIDB4MTEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmZSwgMHg2NiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwgCi0weDA3LCAweDFjLCAweDAxLCAweDIwLCAweDAxLCAweDkwLCAweGZmLCAweGY3LCAweGU3LCAweGZlLCAweDAxLCAweDI4LCAKLTB4MTMsIDB4ZDEsIDB4MzgsIDB4MmYsIDB4MDEsIDB4ZDAsIDB4YTgsIDB4MmYsIDB4MDcsIDB4ZDEsIDB4MDAsIDB4MjYsIAotMHhmNiwgMHg0MywgMHgzNCwgMHgxYywgMHhhOCwgMHgyZiwgMHgwMiwgMHhkMSwgMHgzMCwgMHgxYywgMHgwMCwgMHg5NiwgCi0weDM1LCAweDFjLCAweDExLCAweDIwLCAweDAwLCAweDA0LCAweDA2LCAweDYyLCAweDQ0LCAweDYyLCAweDg1LCAweDYyLCAKLTB4MDAsIDB4OTksIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjIsIDB4MDAsIDB4MjEsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsIAotMHgwMSwgMHg2MCwgMHgzOCwgMHgyZiwgMHgwMSwgMHhkMCwgMHhhOCwgMHgyZiwgMHgwNSwgMHhkMSwgMHgwMSwgMHgyMSwgCi0weDAxLCAweDYwLCAweGE4LCAweDJmLCAweDAxLCAweGQxLCAweDAzLCAweDIxLCAweDAxLCAweDYwLCAweDAxLCAweDk4LCAKLTB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MzQsIDB4NmUsIDB4MjEsIDB4NDAsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgCi0weDEyLCAweDRjLCAweDIxLCAweDY4LCAweDEyLCAweDQ4LCAweDgxLCAweDQyLCAweDBiLCAweGQwLCAweDAwLCAweDIzLCAKLTB4MjEsIDB4MWMsIDB4ZTIsIDB4MWQsIDB4YzEsIDB4MzIsIDB4MDAsIDB4ZTAsIAotMHgwOCwgMHhjMSwgMHg5MSwgMHg0MiwgMHhmYywgMHhkMywgMHgyMCwgMHg2MCwgMHhjOCwgMHgyMCwgMHhhMCwgMHg4MCwgCi0weDY3LCAweDcyLCAweDM4LCAweDAxLCAweDAwLCAweGYwLCAweDE4LCAweGY4LCAweDI3LCAweDcyLCAweDBhLCAweDQ4LCAKLTB4YzAsIDB4NDYsIDB4ZTAsIDB4NjAsIDB4MDksIDB4MmYsIDB4MDAsIDB4ZGIsIDB4MDAsIDB4MjcsIDB4ZTAsIDB4MTksIAotMHgwMSwgMHg3ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg3NSwgMHhlMCwgMHg4OCwgMHgwMSwgMHgzMCwgMHhlMCwgMHg4MCwgCi0weDAxLCAweDIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAKLTB4ZWUsIDB4ZmYsIDB4YzAsIDB4ZDAsIDB4MDgsIDB4MTAsIDB4MDAsIDB4MDMsIDB4ODAsIDB4YjQsIDB4MDgsIDB4NGEsIAotMHhkMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHgwYiwgMHg3YSwgMHgyMCwgMHgyYiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyMywgCi0weDBiLCAweDcyLCAweDA3LCAweDFjLCAweDA4LCAweDdhLCAweDQzLCAweDFjLCAweDBiLCAweDcyLCAweDgwLCAweDE4LCAKLTB4OTAsIDB4MzAsIDB4NDcsIDB4NzIsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIAotMHgwNywgMHg0OSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwMSwgMHgyMCwgCi0weDAwLCAweDJhLCAweDA2LCAweGQxLCAweDBhLCAweDY4LCAweDEyLCAweDBjLCAweDAyLCAweGQxLCAweDA5LCAweDY4LCAKLTB4ODksIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIAotMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgwOSwgMHg0YywgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHhmYywgMHhmNywgCi0weDkxLCAweGZmLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBlLCAweGY4LCAweDAxLCAweDIzLCAweGQ4LCAweDQyLCAKLTB4MDEsIDB4ZDEsIDB4MDAsIDB4MGMsIDB4ZTAsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MjAsIDB4MWMsIDB4ZmMsIDB4ZjcsIAotMHhjNSwgMHhmZSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhjNCwgMHg2NiwgMHgyMSwgMHg0MCwgCi0weGY4LCAweGI1LCAweDA3LCAweDFjLCAweDc5LCAweDdhLCAweDc2LCAweDQ4LCAweDAwLCAweDIzLCAweDc2LCAweDRjLCAKLTB4MDEsIDB4MjksIDB4NWQsIDB4ZDEsIDB4YTIsIDB4ODgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4YTEsIDB4ODksIAotMHg4YSwgMHg0MiwgMHg3NCwgMHhkYSwgMHhmYSwgMHg3YSwgMHgwMCwgMHgyYSwgMHgxNSwgMHhkMCwgMHg3YSwgMHg2YywgCi0weDAwLCAweDJhLCAweDEyLCAweGQwLCAweDhhLCAweDQyLCAweDEwLCAweGQ4LCAweDAwLCAweDlhLCAweDUxLCAweDFjLCAKLTB4YTEsIDB4ODAsIDB4YTEsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDEsIDB4ODEsIDB4NzgsIDB4NmMsIDB4NmIsIDB4NGUsIAotMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHhhMCwgMHg2YSwgMHg1OCwgMHgyMywgMHg3OSwgMHg2YywgMHg1OSwgMHg0MywgCi0weDQwLCAweDE4LCAweGMxLCAweDFhLCAweDI4LCAweGUwLCAweDIyLCAweDg4LCAweDAxLCAweDMyLCAweDEyLCAweDA0LCAKLTB4MTIsIDB4MGMsIDB4MjIsIDB4ODAsIDB4OGEsIDB4NDIsIDB4MDAsIDB4ZGIsIDB4MjMsIDB4ODAsIDB4MDAsIDB4MjIsIAotMHgwMCwgMHgyOSwgMHg2OSwgMHhkZCwgMHg1ZiwgMHg0YywgMHhhNCwgMHg2YSwgMHg1ZSwgMHg0YiwgMHgxZCwgMHg4OCwgCi0weDU4LCAweDIzLCAweDZiLCAweDQzLCAweGUzLCAweDE4LCAweGRlLCAweDFkLCAweDAxLCAweDM2LCAweDAxLCAweDIzLCAKLTB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MTUsIDB4ZDEsIDB4NTgsIDB4NDksIAotMHgwMCwgMHg5YSwgMHgwMSwgMHgzMiwgMHg4YSwgMHg4MCwgMHg4YSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0MiwgMHg4MSwgCi0weDA4LCAweDg4LCAweDAxLCAweDMwLCAweDU0LCAweDRlLCAweGMwLCAweDQ2LCAweGYwLCAweDgwLCAweDU4LCAweDIwLCAKLTB4NjgsIDB4NDMsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MzksIDB4ZmIsIDB4ZjAsIDB4ODgsIAotMHgwMCwgMHgwNCwgMHgwMCwgMHgxNCwgMHg5NSwgMHhlMCwgMHg0ZCwgMHg0YiwgMHgwMSwgMHgzNSwgMHgyZCwgMHgwNCwgCi0weDJkLCAweDBjLCAweDFkLCAweDgwLCAweDhkLCAweDQyLCAweDAxLCAweGRiLCAweDAwLCAweDI1LCAweDFkLCAweDgwLCAKLTB4MDEsIDB4MzIsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MTQsIDB4OTEsIDB4NDIsIDB4Y2UsIDB4ZGMsIDB4ODEsIDB4ZTAsIAotMHhlMSwgMHg4OCwgMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgxOCwgMHhkYSwgMHhmOSwgMHg3YSwgMHgwMCwgMHgyOSwgCi0weDJmLCAweGQwLCAweDc5LCAweDZjLCAweDQ5LCAweDA0LCAweDQ5LCAweDBjLCAweDc5LCAweDY0LCAweDJhLCAweGQwLCAKLTB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MjcsIDB4ZDgsIDB4ZTEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZTEsIDB4ODAsIAotMHhlMSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg4MSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg3OCwgMHg2YywgCi0weDE4LCAweDQzLCAweDNhLCAweDRlLCAweGMwLCAweDQ2LCAweGYwLCAweDgwLCAweDAwLCAweGUwLCAweDYzLCAweGUwLCAKLTB4ZTAsIDB4NmEsIDB4NzksIDB4NmMsIDB4NGIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4MDEsIDB4NDAsIDB4MTgsIAotMHhjMSwgMHgxZiwgMHg1OSwgMHgzOSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZiwgMHhmYiwgMHhlMCwgMHg2YSwgCi0weDc5LCAweDZjLCAweDRhLCAweDAwLCAweDUyLCAweDE4LCAweDUyLCAweDAxLCAweDgwLCAweDE4LCAweDAxLCAweDM5LCAKLTB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4NjAsIDB4MzgsIDB4MDAsIDB4ZjAsIDB4ODksIDB4ZmIsIDB4YjYsIDB4ZTcsIAotMHg0YSwgMHhlMCwgMHg2MSwgMHg4OCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwgCi0weDA5LCAweDBjLCAweDYxLCAweDgwLCAweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDAwLCAweGRiLCAweDYzLCAweDgwLCAKLTB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4M2UsIDB4ZGQsIDB4MjQsIDB4NGMsIDB4ZTQsIDB4NmEsIDB4MjMsIDB4NGIsIAotMHg1ZCwgMHg4OCwgMHg2YiwgMHgwMCwgMHg1YiwgMHgxOSwgMHg1YiwgMHgwMSwgMHhlMywgMHgxOCwgMHhkZSwgMHgxZCwgCi0weDAxLCAweDM2LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAKLTB4MjAsIDB4ZDEsIDB4MWMsIDB4NGUsIDB4ZjEsIDB4ODgsIDB4MDEsIDB4MzEsIDB4ZjEsIDB4ODAsIDB4ZjEsIDB4ODgsIAotMHhjMCwgMHg0NiwgMHg4MSwgMHg4MSwgMHg3MCwgMHg4OCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHgwMSwgMHgzMCwgCi0weDE4LCAweDQzLCAweDE3LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDgwLCAweDY4LCAweDAwLCAweDQwLCAweDE5LCAKLTB4NDAsIDB4MDEsIDB4MjEsIDB4MTgsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZmEsIDB4NzEsIDB4ODgsIAotMHg0YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHgwMSwgMHhmMCwgMHg2YSwgMHg4MCwgMHgxOCwgMHgwMCwgMHhmMCwgCi0weDRkLCAweGZiLCAweDBlLCAweDQ5LCAweGM4LCAweDg4LCAweDc5LCAweGU3LCAweDBiLCAweDRiLCAweDAxLCAweDM1LCAKLTB4MmQsIDB4MDQsIDB4MmQsIDB4MGMsIDB4NWQsIDB4ODAsIDB4OTUsIDB4NDIsIDB4MDEsIDB4ZGIsIDB4MDAsIDB4MjUsIAotMHg1ZCwgMHg4MCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwgMHgwOSwgMHgxNCwgMHg4YSwgMHg0MiwgMHhjMiwgMHhkYywgCi0weDAxLCAweDg5LCAweDAxLCAweDMxLCAweDAxLCAweDgxLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweGY4LCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIAotMHhjNCwgMHg2NiwgMHgyMSwgMHg0MCwgMHhmMCwgMHhiNCwgMHgwNiwgMHgxYywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgCi0weDMzLCAweDQwLCAweDAxLCAweDI0LCAweDQ0LCAweDRmLCAweDAwLCAweDIwLCAweDQ0LCAweDRhLCAweDQ1LCAweDRkLCAKLTB4ZDEsIDB4MWQsIDB4MzksIDB4MzEsIDB4MDAsIDB4MmIsIDB4NDEsIDB4ZDAsIDB4ZTMsIDB4MDMsIDB4ZjMsIDB4MWEsIAotMHg3MywgMHhkMCwgMHhlZSwgMHg4OSwgMHg5ZSwgMHg0MiwgMHg3MSwgMHhkMywgMHhlZSwgMHg4OCwgMHgwMCwgMHgyZSwgCi0weDZkLCAweGQwLCAweGVkLCAweDZhLCAweDVlLCAweDFlLCAweDczLCAweDAwLCAweDliLCAweDE5LCAweDViLCAweDAxLCAKLTB4ZWQsIDB4MTgsIDB4YWUsIDB4NjgsIDB4MzYsIDB4MDYsIDB4MzYsIDB4MGUsIDB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsIAotMHhjZSwgMHg4OSwgMHgwMSwgMHgzNiwgMHhjZSwgMHg4MSwgMHg0MCwgMHgzNSwgMHhhZCwgMHg4YiwgMHhhZCwgMHgwMCwgCi0weDM1LCAweDRlLCAweDc2LCAweDZhLCAweGMwLCAweDQ2LCAweDcwLCAweDUxLCAweDU1LCAweDg5LCAweDAxLCAweDM1LCAKLTB4NTUsIDB4ODEsIDB4MzIsIDB4NGUsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4OTAsIDB4NjAsIDB4ZjIsIDB4NmEsIAotMHhkMiwgMHgxOCwgMHg5MCwgMHg2MywgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2MywgMHhmMiwgMHg2YSwgCi0weGQyLCAweDE4LCAweDEwLCAweDY0LCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweDUwLCAweDY0LCAweGYyLCAweDZhLCAKLTB4ZDIsIDB4MTgsIDB4OTAsIDB4NjQsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4ZDAsIDB4NjQsIDB4ZjAsIDB4ODgsIAotMHgwMSwgMHgzOCwgMHhmMCwgMHg4MCwgMHhmMCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg4OCwgMHg4MSwgMHgyNCwgMHg0OSwgCi0weDAwLCAweDI4LCAweDM5LCAweGQxLCAweDRmLCAweDgwLCAweDM3LCAweGUwLCAweDAwLCAweDJlLCAweDM4LCAweGQ5LCAKLTB4YWIsIDB4ODksIDB4YjMsIDB4NDIsIDB4MzAsIDB4ZDMsIDB4YWIsIDB4ODgsIDB4MDAsIDB4MmIsIDB4MmMsIDB4ZDAsIAotMHg1MywgMHg4OSwgMHgwMSwgMHgzMywgMHg1MywgMHg4MSwgMHgyYSwgMHgxYywgMHhhZCwgMHg2YSwgMHg1OCwgMHgyMywgCi0weDAxLCAweDNlLCAweDczLCAweDQzLCAweGVkLCAweDE4LCAweGFlLCAweDY4LCAweDM2LCAweDA2LCAweDM2LCAweDBlLCAKLTB4MDMsIDB4MmUsIDB4MDIsIDB4ZDAsIDB4Y2UsIDB4ODksIDB4MDEsIDB4MzYsIDB4Y2UsIDB4ODEsIDB4YTgsIDB4NjAsIAotMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhhOCwgMHg2MywgMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhlOCwgMHg2MywgCi0weDk1LCAweDZhLCAweGVkLCAweDE4LCAweDI4LCAweDY0LCAweDk1LCAweDZhLCAweGVkLCAweDE4LCAweDY4LCAweDY0LCAKLTB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4YTgsIDB4NjQsIDB4OTUsIDB4NmEsIDB4ZWIsIDB4MTgsIDB4ZDgsIDB4NjQsIAotMHg5MCwgMHg4OCwgMHgwMSwgMHgzOCwgMHg5MCwgMHg4MCwgMHg5MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MSwgCi0weDAwLCAweDI4LCAweDAzLCAweGQxLCAweDAxLCAweGUwLCAweDA0LCAweGUwLCAweDAzLCAweGUwLCAweDE3LCAweDgwLCAKLTB4MjAsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4Y2EsIDB4ODksIDB4MDEsIDB4MzIsIDB4Y2EsIDB4ODEsIAotMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAwLCAweDIxLCAweDQxLCAweDYwLCAweDEwLCAweDQ5LCAKLTB4NGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTAsIDB4ZDEsIDB4Y2EsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDAsIAotMHhjYSwgMHgxZCwgMHgxOSwgMHgzMiwgMHgxMiwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHhkMCwgMHg0YSwgMHg2OSwgCi0weDAwLCAweDJhLCAweDBiLCAweGQxLCAweDg4LCAweDYxLCAweDQ4LCAweDYxLCAKLTB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NGEsIDB4NjksIDB4MDAsIDB4MmEsIAotMHgwMiwgMHhkMSwgMHg4OCwgMHg2MSwgMHg0OCwgMHg2MSwgMHhmNywgMHhlNywgMHg4YSwgMHg2OSwgMHhjMCwgMHg0NiwgCi0weDUwLCAweDYwLCAweDg4LCAweDYxLCAweGYyLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAKLTB4YjAsIDB4YjUsIDB4MmEsIDB4NDgsIDB4NDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4NGMsIDB4ZDAsIDB4MDgsIDB4MjIsIAotMHhjMSwgMHg2OCwgMHgwYSwgMHg0MCwgMHgwMCwgMHgyNywgMHgyNywgMHg0YiwgMHhkOSwgMHgxZCwgMHhiOSwgMHgzMSwgCi0weDAwLCAweDJhLCAweDExLCAweGQwLCAweDA0LCAweDIyLCAweDI1LCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYxLCAKLTB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjQsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsIAotMHgyMywgMHg0YywgMHhjMCwgMHg0NiwgMHhjYywgMHg2MiwgMHgyMywgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MywgCi0weDRmLCAweDYzLCAweDEyLCAweGUwLCAweDA1LCAweDIyLCAweDIxLCAweDRjLCAweGMwLCAweDQ2LCAweDBjLCAweDYxLCAKLTB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjIsIDB4MjAsIDB4NGMsIDB4YzAsIDB4NDYsIDB4OGMsIDB4NjIsIAotMHgxZiwgMHg0YywgMHhjMCwgMHg0NiwgMHhjYywgMHg2MiwgMHgxZiwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MywgCi0weDFlLCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYzLCAweDQwLCAweDI0LCAweGNjLCAweDgyLCAweDRmLCAweDgzLCAKLTB4MWMsIDB4NGYsIDB4MDAsIDB4MjEsIDB4MDAsIDB4MmEsIDB4MGMsIDB4ZDksIDB4OGMsIDB4MDAsIDB4MDUsIDB4MTksIAotMHg2ZCwgMHg2YSwgMHg3ZCwgMHg0MCwgMHhlNCwgMHgxOCwgMHhmZiwgMHgzNCwgMHgwMSwgMHgzNCwgMHg2NSwgMHg2MiwgCi0weDAxLCAweDMxLCAweDkxLCAweDQyLCAweGY0LCAweGQzLCAweDEwLCAweDI5LCAweDA3LCAweGQyLCAweDhhLCAweDAwLCAKLTB4ZDIsIDB4MTgsIDB4ZmYsIDB4MzIsIDB4MDEsIDB4MzIsIDB4NTcsIDB4NjIsIDB4MDEsIDB4MzEsIDB4MTAsIDB4MjksIAotMHhmNywgMHhkMywgMHgxMSwgMHg0OSwgMHgwMCwgMHhmMCwgMHgyMiwgMHhmOCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGFjLCAweGFiLCAweDIwLCAweDQwLCAKLTB4MjgsIDB4MDEsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MjMsIDB4NDUsIDB4NjcsIDB4ODksIDB4YWIsIDB4Y2QsIDB4ZWYsIAotMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwgMHgyMCwgMHgwMSwgMHg0MCwgMHgwMCwgCi0weDY3LCAweDQ1LCAweDIzLCAweDAxLCAweGVmLCAweGNkLCAweGFiLCAweDg5LCAweDk4LCAweGJhLCAweGRjLCAweGZlLCAKLTB4MTAsIDB4MzIsIDB4NTQsIDB4NzYsIDB4YzMsIDB4ZDIsIDB4ZTEsIDB4ZjAsIDB4MzYsIDB4MzYsIDB4MzYsIDB4MzYsIAotMHgzMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHhiMCwgMHhiNSwgMHgwZiwgMHgxYywgMHgxNSwgMHg0ZCwgMHhlOSwgMHgxZCwgCi0weGM5LCAweDMxLCAweDE1LCAweDRjLCAweDIzLCAweDFjLCAweDE1LCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LCAKLTB4NDQsIDB4ZmIsIDB4ZTksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4MWUsIDB4MzEsIDB4MjMsIDB4MWMsIDB4MGQsIDB4MWMsIAotMHgxMSwgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgzYiwgMHhmYiwgMHgyOSwgMHgxYywgMHgyMywgMHgxYywgCi0weDBlLCAweDRhLCAweDAwLCAweDIwLCAweGZjLCAweGY3LCAweDM1LCAweGZiLCAweDM5LCAweDFjLCAweDIzLCAweDFjLCAKLTB4MGMsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MmYsIDB4ZmIsIDB4MDAsIDB4MjEsIDB4MGIsIDB4NDgsIAotMHhjMiwgMHgxZCwgMHgxOSwgMHgzMiwgMHg1MSwgMHg3MSwgMHgwMSwgMHgyMSwgMHhmZiwgMHgzMCwgMHgwMSwgMHgzMCwgCi0weDQxLCAweDYyLCAweDA4LCAweDFjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAKLTB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4MjgsIDB4MDAsIDB4MDMsIDB4MDAsIAotMHg0MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgCi0weGYwLCAweGI1LCAweDM3LCAweDRhLCAweDUwLCAweDY5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMwLCAKLTB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MDYsIDB4MDksIDB4MGUsIDB4MzMsIDB4NGIsIDB4MDEsIDB4MjksIAotMHg0OSwgMHhkMSwgMHgxZiwgMHg2OCwgMHgxOSwgMHgxYywgMHgzMiwgMHg0YiwgMHg5ZiwgMHg0MiwgMHgwNCwgMHhkMSwgCi0weGZmLCAweGY3LCAweDNlLCAweGZmLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIzLCAKLTB4OWYsIDB4MDAsIDB4Y2MsIDB4NTksIDB4NTUsIDB4NjksIDB4ZWYsIDB4MTksIDB4M2MsIDB4NjEsIDB4MDEsIDB4MzMsIAotMHgwNSwgMHgyYiwgMHhmNywgMHhkMywgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywgCi0weDUzLCAweDY5LCAweGMwLCAweDQ2LCAweDk4LCAweDYwLCAweDUwLCAweDY5LCAweDA4LCAweDIzLCAweGMyLCAweDY4LCAKLTB4MTMsIDB4NDAsIDB4MjUsIDB4NGYsIDB4ZmEsIDB4MWQsIDB4YjksIDB4MzIsIDB4MDAsIDB4MmIsIDB4MDIsIDB4ZDAsIAotMHgwNCwgMHgyMywgMHgyMywgMHg0YywgMHgwMSwgMHhlMCwgMHgwNSwgMHgyMywgMHgyMiwgMHg0YywgMHhjMCwgMHg0NiwgCi0weDE0LCAweDYxLCAweDQwLCAweDI0LCAweGQ0LCAweDgyLCAweDAwLCAweDI0LCAweDU0LCAweDgzLCAweDIwLCAweDRjLCAKLTB4MDAsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MGMsIDB4ZDksIDB4OTUsIDB4MDAsIAotMHg0NiwgMHgxOSwgMHg3NiwgMHg2YSwgMHg2NiwgMHg0MCwgMHhlZCwgMHgxOSwgMHhmZiwgMHgzNSwgMHgwMSwgMHgzNSwgCi0weDZlLCAweDYyLCAweDAxLCAweDMyLCAweDlhLCAweDQyLCAweGY0LCAweGQzLCAweDEwLCAweDJhLCAweDA3LCAweGQyLCAKLTB4OTMsIDB4MDAsIDB4ZGIsIDB4MTksIDB4ZmYsIDB4MzMsIDB4MDEsIDB4MzMsIDB4NWMsIDB4NjIsIDB4MDEsIDB4MzIsIAotMHgxMCwgMHgyYSwgMHhmNywgMHhkMywgMHhmZiwgMHhmNywgMHg3MCwgMHhmZiwgMHhiYywgMHhlNywgMHgwMCwgMHgyMSwgCi0weDhmLCAweDAwLCAweGRjLCAweDU5LCAweDU1LCAweDY5LCAweGVmLCAweDE5LCAweDdjLCAweDYyLCAweDAxLCAweDMxLCAKLTB4MDUsIDB4MjksIDB4ZjcsIDB4ZDMsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsIDB4MTgsIDB4NDMsIAotMHg1MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MCwgMHg1MCwgMHg2OSwgMHg0MCwgMHg2OCwgMHhjMCwgMHg0NiwgCi0weDUwLCAweDYxLCAweDA5LCAweDQ4LCAweGZjLCAweGY3LCAweGE0LCAweGZhLCAweGE0LCAweGU3LCAweDAwLCAweDAwLCAKLTB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjcsIDB4NDUsIDB4MjMsIDB4MDEsIAotMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHgyOCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg0MCwgMHgwMCwgCi0weDVjLCAweDVjLCAweDVjLCAweDVjLCAweDExLCAweDMxLCAweGZmLCAweGZmLCAweGYwLCAweGI1LCAweDA3LCAweDFjLCAKLTB4M2IsIDB4NDgsIDB4M2MsIDB4NGMsIDB4MDgsIDB4MjEsIDB4MjAsIDB4NjAsIDB4YTEsIDB4ODAsIDB4MDAsIDB4MjAsIAotMHgyMCwgMHg4MSwgMHhlMSwgMHg4MCwgMHg2MCwgMHg4MSwgMHgzOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MCwgCi0weDM4LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYxLCAweDM4LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYxLCAKLTB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsIDB4MzcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjEsIAotMHgzNiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MiwgMHgzNiwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MiwgCi0weDM1LCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYyLCAweDM1LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYyLCAKLTB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjMsIDB4MzQsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjMsIAotMHgzMywgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MywgMHgzMywgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MywgCi0weDMyLCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDY0LCAweDMyLCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDY0LCAKLTB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjQsIDB4MzEsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjQsIAotMHgzMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2NSwgMHgzMCwgMHg0OSwgMHhjOCwgMHg2OCwgMHgwMiwgMHgwNCwgCi0weDg5LCAweDY5LCAweDRhLCAweDQwLCAweGUzLCAweDFkLCAweDc5LCAweDMzLCAweDA5LCAweDA0LCAweGM5LCAweDQzLCAKLTB4YzAsIDB4NDMsIDB4NDgsIDB4NDAsIDB4ZTEsIDB4MWQsIDB4YjksIDB4MzEsIDB4ZGEsIDB4NjMsIDB4MDgsIDB4NjAsIAotMHgyOSwgMHg0ZCwgMHgyMSwgMHgxYywgMHgyYiwgMHgxYywgMHgyOSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywgCi0weDNlLCAweGZhLCAweDI4LCAweDRhLCAweGUxLCAweDFkLCAweGI1LCAweDMxLCAweDAxLCAweDIwLCAweDJiLCAweDFjLCAKLTB4MGUsIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MzYsIDB4ZmEsIDB4MjQsIDB4NGEsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MWMsIAotMHgyYiwgMHgxYywgMHhmYywgMHhmNywgMHgzMCwgMHhmYSwgMHhlMSwgMHgxZCwgMHg0ZCwgMHgzMSwgMHgyYiwgMHgxYywgCi0weDIwLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDI5LCAweGZhLCAweGUwLCAweDFkLCAweDVkLCAweDMwLCAKLTB4MDEsIDB4NjgsIDB4MDAsIDB4MjksIDB4ZmMsIDB4ZDAsIDB4NjAsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MzgsIDB4NjUsIAotMHgyMCwgMHg2ZSwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NSwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDgwLCAweDAwLCAweDA4LCAweDAwLCAweDhjLCAweGI5LCAweDIwLCAweDQwLCAweDgxLCAweDgxLCAweDQ4LCAweGJkLCAKLTB4NzksIDB4NTYsIDB4MjMsIDB4OGMsIDB4OTMsIDB4MGMsIDB4ODIsIDB4OTUsIDB4MWQsIDB4MGUsIDB4MTIsIDB4Y2YsIAotMHg5YiwgMHgzYiwgMHhjMCwgMHhlOSwgMHhlNiwgMHg1NSwgMHg3YywgMHg4MiwgMHg5OSwgMHhmNiwgMHg3OCwgMHgwMiwgCi0weGQxLCAweGQ3LCAweDI1LCAweDczLCAweDcyLCAweDhjLCAweDMzLCAweDEwLCAweGY3LCAweDAzLCAweGYxLCAweDQyLCAKLTB4NmMsIDB4OWIsIDB4NGEsIDB4YTcsIDB4ODIsIDB4OGUsIDB4MjMsIDB4YTksIDB4OTAsIDB4YjEsIDB4ODIsIDB4OGUsIAotMHhkYywgMHgzZiwgMHhmYiwgMHgyOSwgMHgwMCwgMHg2MiwgMHgyMiwgMHg0NSwgMHg4OCwgMHgyYiwgMHhmMSwgMHg4NSwgCi0weDEyLCAweDYxLCAweGQxLCAweDczLCAweDZlLCAweGIxLCAweDExLCAweDE2LCAweDA4LCAweDgzLCAweDIwLCAweDQwLCAKLTB4NzUsIDB4MDgsIDB4ZmYsIDB4ZmYsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDIsIDB4MDAsIAotMHgxNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwgCi0weDMzLCAweGY4LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDRjLCAweGZmLCAweDAzLCAweDQ4LCAweDAxLCAweDg5LCAKLTB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgxYywgCi0weDBmLCAweDFjLCAweDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDFmLCAweGY4LCAweGUwLCAweDY4LCAKLTB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIAotMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgCi0weDA4LCAweDQzLCAweDM4LCAweDY1LCAweDIwLCAweDY5LCAweGMwLCAweDQ2LCAweDc4LCAweDY1LCAweDYwLCAweDY5LCAKLTB4YzAsIDB4NDYsIDB4YjgsIDB4NjUsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksIDB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIAotMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgCi0weDkwLCAweGI1LCAweDAwLCAweDIyLCAweDkzLCAweDAwLCAweDFmLCAweDE4LCAweGJmLCAweDY5LCAweDViLCAweDE4LCAKLTB4NWYsIDB4NjIsIDB4MDEsIDB4MzIsIDB4MDUsIDB4MmEsIDB4ZjcsIDB4ZDMsIDB4MDcsIDB4N2EsIDB4ZmIsIDB4MDgsIAotMHgwMywgMHhkMywgMHgwMCwgMHgyMywgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwgMHgxMywgMHg2MiwgMHgwNywgMHg2YiwgCi0weGMwLCAweDQ2LCAweDhmLCAweDYzLCAweGM3LCAweDZhLCAweGMwLCAweDQ2LCAweGNmLCAweDYzLCAweDg3LCAweDZiLCAKLTB4YzAsIDB4NDYsIDB4MGYsIDB4NjQsIDB4NDcsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NGYsIDB4NjQsIDB4MDcsIDB4NmMsIAotMHhjMCwgMHg0NiwgMHg4ZiwgMHg2NCwgMHhjMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjYSwgMHg2NCwgMHhjMiwgMHg4OCwgCi0weGMwLCAweDQ2LCAweDBhLCAweDgwLCAweDgyLCAweDdhLCAweDEyLCAweDA2LCAweDAzLCAweDdhLCAweDFiLCAweDA0LCAKLTB4MWEsIDB4NDMsIDB4YzMsIDB4ODgsIDB4MWIsIDB4MDIsIDB4MWEsIDB4NDMsIDB4NDMsIDB4N2EsIDB4ZGIsIDB4MDcsIAotMHgxYSwgMHg0MywgMHg4YSwgMHg2MCwgMHgxNywgMHgxYywgMHg4MywgMHg3YSwgMHg1YSwgMHgwOCwgMHgwNSwgMHhkMywgCi0weDE0LCAweDIyLCAweDFjLCAweDFjLCAweGEzLCAweDA4LCAweDAyLCAweGQyLCAweDE1LCAweDIyLCAweDAwLCAweGUwLCAKLTB4MDAsIDB4MjIsIDB4MDAsIDB4N2EsIDB4NDMsIDB4MDgsIDB4MTAsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MDIsIDB4ZDMsIAotMHg4OCwgMHgyMCwgMHgxMCwgMHg0MywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyMCwgMHgxMCwgMHg0MywgMHgzYSwgMHgwYSwgCi0weDEyLCAweDAyLCAweDAxLCAweDIzLCAweDFhLCAweDQzLCAweGM4LCAweDYwLCAweDhhLCAweDYwLCAweDA4LCAweDFjLCAKLTB4ZmYsIDB4ZjcsIDB4NzgsIDB4ZmQsIDB4MDUsIDB4ZTAsIDB4MzgsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDMsIDB4MjMsIAotMHgxOCwgMHg0MywgMHg4OCwgMHg2MCwgMHhjYSwgMHg2MCwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwgCi0weDAxLCAweDgxLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAKLTB4ZjAsIDB4YjQsIDB4MDIsIDB4NmQsIDB4MTQsIDB4NGMsIDB4MTUsIDB4MWMsIDB4ZTcsIDB4NjksIDB4YmQsIDB4NDAsIAotMHgxMywgMHgxYywgMHgyNiwgMHg2YSwgMHhmMywgMHg0MCwgMHg1ZCwgMHg0MCwgMHgyZSwgMHgxYywgMHg0NSwgMHg2ZCwgCi0weGJkLCAweDQwLCAweDZlLCAweDQwLCAweDJiLCAweDFjLCAweDM1LCAweDFjLCAweGZkLCAweDQwLCAweDJmLCAweDFjLCAKLTB4YmIsIDB4MDAsIDB4NjUsIDB4NmEsIDB4ZWIsIDB4NTgsIDB4MDAsIDB4MmIsIDB4MDgsIDB4ZDAsIDB4MjMsIDB4NjksIAotMHgwMSwgMHgzNywgMHg5ZiwgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyNywgMHhiZSwgMHgwMCwgMHhhZSwgMHg1OSwgCi0weDAwLCAweDJlLCAweGY3LCAweGQxLCAweGE0LCAweDY5LCAweGEyLCAweDQwLCAweDExLCAweDQzLCAweDA1LCAweDRiLCAKLTB4MTksIDB4NDMsIDB4YmEsIDB4MDAsIDB4YTksIDB4NTAsIDB4NDAsIDB4MzAsIDB4ODcsIDB4ODMsIDB4ZjAsIDB4YmMsIAotMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgCi0weDgwLCAweGI0LCAweDAwLCAweDIyLCAweDAwLCAweDIzLCAweDAwLCAweDI5LCAweDA1LCAweGQ5LCAweDA3LCAweDc4LCAKLTB4N2EsIDB4NDAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzMsIDB4OGIsIDB4NDIsIDB4ZjksIDB4ZDMsIDB4ZDAsIDB4NDMsIAotMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgCi0weDAwLCAweDI0LCAweGZmLCAweDI2LCAweDA5LCAweDM2LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDlhLCAweGY4LCAKLTB4MDAsIDB4ZjAsIDB4YjgsIDB4ZjksIDB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YzcsIDB4ZmEsIDB4M2QsIDB4NzAsIAotMHgyOCwgMHgxYywgMHgwMSwgMHgzNywgMHgwMSwgMHgzNCwgMHhiNCwgMHg0MiwgMHhmMSwgMHhkMywgMHhmMCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDAwLCAweGYwLCAweDkzLCAweGY4LCAweDAwLCAweGYwLCAKLTB4YTcsIDB4ZjksIDB4MDcsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZmEsIDB4MzgsIDB4MGEsIDB4ZjYsIDB4ZDMsIAotMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMywgMHhiNSwgMHg4MiwgMHhiMCwgMHgwMiwgMHg5OCwgCi0weDQxLCAweDAyLCAweDUzLCAweDIwLCAweDAwLCAweGYwLCAweDY0LCAweGY4LCAweDAwLCAweGYwLCAweGE4LCAweGZhLCAKLTB4ZmYsIDB4ZjcsIDB4ZTgsIDB4ZmYsIDB4MDAsIDB4MjQsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OTAsIDB4MmUsIDB4MjAsIAotMHgwMCwgMHg5MCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyNywgMHgwMiwgMHg5OCwgMHgwMSwgMHgyOCwgMHgwNCwgMHhkMSwgCi0weDAwLCAweDk4LCAweDg0LCAweDQyLCAweDAxLCAweGQzLCAweDAwLCAweDI2LCAKLTB4MDksIDB4ZTAsIDB4MDEsIDB4OTgsIDB4NDEsIDB4MWMsIDB4MDEsIDB4OTEsIDB4MDAsIDB4ZjAsIDB4NjAsIDB4ZjgsIAotMHgwMCwgMHhmMCwgMHg3ZSwgMHhmOSwgMHgwNiwgMHgxYywgMHgwMCwgMHhmMCwgMHg4ZCwgMHhmYSwgMHhmOCwgMHgwMCwgCi0weDg2LCAweDQwLCAweDM1LCAweDQzLCAweDAxLCAweDM0LCAweDAxLCAweDM3LCAweDA0LCAweDJmLCAweGU2LCAweGQzLCAKLTB4MDMsIDB4OTksIDB4MjAsIDB4YzEsIDB4MDMsIDB4OTEsIDB4ZmYsIDB4MjMsIDB4MDksIDB4MzMsIDB4OWMsIDB4NDIsIAotMHhkZCwgMHhkMywgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgCi0weDA0LCAweDFjLCAweDBmLCAweDFjLCAweDAxLCAweDJjLCAweDJhLCAweGQwLCAweDE2LCAweDQ4LCAweGMwLCAweDZmLCAKLTB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDAsIDB4MjYsIDB4MjAsIDB4Y2YsIAotMHhiMSwgMHgwMCwgMHg4NCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhmOCwgMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwgCi0weGRmLCAweGY5LCAweDI4LCAweDBhLCAweDAwLCAweGYwLCAweGRjLCAweGY5LCAweDI4LCAweDBjLCAweDAwLCAweGYwLCAKLTB4ZDksIDB4ZjksIDB4MjgsIDB4MGUsIDB4MDAsIDB4ZjAsIDB4ZDYsIDB4ZjksIDB4MDAsIDB4ZjAsIDB4NWMsIDB4ZmEsIAotMHgwMSwgMHgzNiwgMHg0MiwgMHgyZSwgMHhlOSwgMHhkMywgMHg2MSwgMHgwMiwgMHg4MywgMHgyMCwgMHgwMCwgMHhmMCwgCi0weDBmLCAweGY4LCAweDAwLCAweGYwLCAweDUzLCAweGZhLCAweGZmLCAweGY3LCAweDkzLCAweGZmLCAweDA0LCAweDQ4LCAKLTB4YzAsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgxYywgCi0weDBmLCAweDFjLCAweDAwLCAweGYwLCAweDU5LCAweGZhLCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGY5LCAKLTB4MzgsIDB4MGMsIDB4MDAsIDB4ZjAsIDB4YjMsIDB4ZjksIDB4MzgsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4YjAsIDB4ZjksIAotMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhZCwgMHhmOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDAwLCAweGI1LCAweDAxLCAweDFjLCAweDU0LCAweDIwLCAweGZmLCAweGY3LCAweGU3LCAweGZmLCAweDAwLCAweDIwLCAKLTB4MDAsIDB4ZjAsIDB4YTIsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4MDAsIDB4ZjAsIAotMHgzZCwgMHhmYSwgMHg1NywgMHgyMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDkwLCAweGI1LCAweDA4LCAweDRmLCAweGZhLCAweDZmLCAweDIwLCAweDIzLCAweDE0LCAweDY4LCAweDljLCAweDQzLCAKLTB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmYsIDB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsIAotMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA4LCAweDRmLCAweGZhLCAweDZmLCAweDIwLCAweDIzLCAKLTB4MTQsIDB4NjgsIDB4OWMsIDB4NDMsIDB4MTQsIDB4NjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ODcsIDB4ZmYsIAotMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHg5MCwgMHhiYywgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA0LCAweDFjLCAKLTB4MGYsIDB4MWMsIDB4MTgsIDB4NGUsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIAotMHgwMSwgMHg2MCwgMHg2MSwgMHgwMiwgMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHhhNSwgMHhmZiwgMHgwMCwgMHhmMCwgCi0weGU5LCAweGY5LCAweGZmLCAweGY3LCAweDI5LCAweGZmLCAweGY4LCAweDFkLCAweDA1LCAweDMwLCAweDAxLCAweDJjLCAKLTB4MDMsIDB4ZDEsIDB4MjIsIDB4MmYsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4MGYsIDB4ZTAsIDB4NDQsIDB4MWMsIAotMHhmZiwgMHhmNywgMHhhYSwgMHhmZiwgMHgwMCwgMHhmMCwgMHhjOCwgMHhmOCwgMHgwNywgMHgxYywgMHgwMCwgMHhmMCwgCi0weGQ3LCAweGY5LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweGEyLCAweGZmLCAweDAwLCAweGYwLCAweGMwLCAweGY4LCAKLTB4MDUsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZjksIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIAotMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgyOCwgMHgwMiwgMHgzOCwgMHg0MywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweGMyLCAweGIwLCAKLTB4MTQsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDcsIDB4MWMsIDB4MDEsIDB4MmYsIDB4MmYsIDB4ZDAsIDB4NzksIDB4MDIsIAotMHgxOSwgMHg0ZSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwgCi0weDUzLCAweDIwLCAweGZmLCAweGY3LCAweDZiLCAweGZmLCAweDAwLCAweGYwLCAweGFmLCAweGY5LCAweGZmLCAweGY3LCAKLTB4ZWYsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4ZDYsIDB4ZmUsIDB4NmEsIDB4NDYsIDB4ZTgsIDB4MWQsIAotMHgwNSwgMHgzMCwgMHgxNCwgMHg1NCwgMHgyMSwgMHgwYSwgMHg2OCwgMHg0NCwgMHg0MSwgMHg3MCwgMHg2OCwgMHg0NiwgCi0weDAwLCAweDk5LCAweDBjLCAweDMwLCAweGZmLCAweGY3LCAweGJhLCAweGZlLCAweDAyLCAweGFiLCAweDE4LCAweDcwLCAKLTB4MDAsIDB4MjAsIDB4NTgsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsIAotMHhmZiwgMHhmNywgMHhiMiwgMHhmZSwgMHgwMiwgMHhhYiwgMHg1OCwgMHg3MCwgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgCi0weGZmLCAweGY3LCAweDE1LCAweGZmLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAKLTB4MDEsIDB4NjAsIDB4NDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhiNSwgMHhjMiwgMHhiMCwgMHgwNywgMHgxYywgMHgwMSwgMHgyZiwgCi0weDAxLCAweGQxLCAweDAxLCAweDIwLCAweDM2LCAweGUwLCAweDZiLCAweDQ2LCAweDAwLCAweDIwLCAweGM0LCAweDQzLCAKLTB4MTAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4NDIsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MzAsIAotMHgwMywgMHgxYywgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwYSwgMHhkOSwgMHgwZSwgMHg4OCwgMHhjMCwgMHg0NiwgCi0weDA2LCAweDcwLCAweDBlLCAweDg4LCAweDM2LCAweDEyLCAweDQ2LCAweDcwLCAweDAyLCAweDMwLCAweDAyLCAweDMxLCAKLTB4MDIsIDB4MzQsIDB4OTQsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4OTIsIDB4MTgsIDB4MWMsIDB4MTEsIDB4MWMsIAotMHhmZiwgMHhmNywgMHg3YywgMHhmZSwgMHgwNCwgMHgxYywgMHgwMCwgMHgyMCwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhYiwgCi0weDFjLCAweDcwLCAweDU4LCAweDcwLCAweDlkLCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLCAweGZmLCAweGY3LCAKLTB4NzEsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NDUsIDB4OWIsIDB4MWQsIDB4MDYsIDB4MmQsIDB4MGUsIAotMHhhYywgMHg0MiwgMHgwMywgMHhkMSwgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwgCi0weDAxLCAweDIwLCAweGFjLCAweDQyLCAweDAwLCAweGQxLCAweDAwLCAweDIwLCAweDQ2LCAweGIwLCAweGYwLCAweGJjLCAKLTB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4YjAsIDB4YjUsIDB4YzIsIDB4YjAsIDB4MGYsIDB4MWMsIDB4NDEsIDB4MDIsIAotMHgxNCwgMHg0YywgMHhlMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwgCi0weDUzLCAweDIwLCAweGZmLCAweGY3LCAweGVmLCAweGZlLCAweDAwLCAweGYwLCAweDMzLCAweGY5LCAweGZmLCAweGY3LCAKLTB4NzMsIDB4ZmUsIDB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NWEsIDB4ZmUsIDB4ZTAsIDB4NmYsIDB4MjAsIDB4MjMsIAotMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMiwgMHhhZCwgMHgwMSwgMHg2MCwgMHg2ZCwgMHg3OCwgMHgwMCwgMHgyNCwgCi0weDAyLCAweGFiLCAweDVjLCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLCAweGZmLCAweGY3LCAweDNjLCAweGZlLCAKLTB4YTgsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4MDAsIDB4OTgsIDB4ODcsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MjAsIDB4MWMsIAotMHgwMCwgMHhlMCwgMHgwMSwgMHgyMCwgMHg0MiwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgCi0weDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDAwLCAweDAwLCAweGEwLCAweGUzLCAKLTB4YjQsIDB4MjIsIDB4OWYsIDB4ZTUsIDB4YjQsIDB4MzIsIDB4OWYsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAKLTB4ODEsIDB4MDMsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LCAweDAxLCAweDAzLCAweDgwLCAweGUxLCAKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgCi0weDAwLCAweDEwLCAweDkzLCAweGU1LCAweDgxLCAweDAyLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgCi0weDAxLCAweDAyLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHg4MSwgMHgwMSwgMHg4MCwgMHhlMSwgCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIAotMHg4MSwgMHgwMCwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIAotMHgwMSwgMHgwMCwgMHg4MCwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgCi0weGE0LCAweDIxLCAweDlmLCAweGU1LCAweGE4LCAweDMxLCAweDlmLCAweGU1LCAweGEwLCAweDEzLCAweGEwLCAweGUxLCAKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDIwLCAweDEzLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAKLTB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgCi0weGEwLCAweDEyLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgyMCwgMHgxMiwgMHhhMCwgMHhlMSwgCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHhhMCwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgCi0weDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgyMCwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4YTAsIDB4MTAsIDB4YTAsIDB4ZTEsIAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgCi0weDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAKLTB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4YTAsIDB4MzAsIDB4OWYsIDB4ZTUsIAotMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIAotMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHg3MCwgMHgzMCwgMHg5ZiwgMHhlNSwgCi0weDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgCi0weDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweDM0LCAweDIwLCAweDlmLCAweGU1LCAKLTB4M2MsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgCi0weDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAKLTB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIAotMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmOCwgMHgwMCwgMHgxOCwgMHg0MCwgCi0weDA0LCAweDAxLCAweDE4LCAweDQwLCAweDAwLCAweDAxLCAweDE4LCAweDQwLCAweGZjLCAweDAwLCAweDE4LCAweDQwLCAKLTB4ODAsIDB4YjUsIDB4MDAsIDB4ZjAsIDB4MGMsIDB4ZjgsIDB4MDAsIDB4MjcsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIAotMHg0NywgMHhmOCwgMHg3OCwgMHgxYywgMHgwNywgMHgwNCwgMHgzZiwgMHgwYywgMHgwYywgMHgyZiwgMHhmNywgMHhkZCwgCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDFkLCAweDQ4LCAKLTB4MDIsIDB4NjgsIDB4MWQsIDB4NDksIDB4OGIsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjAsIDB4MDIsIDB4NjYsIAotMHg4YSwgMHg2YSwgMHg0MywgMHg2OCwgMHg5YiwgMHgxOCwgMHg0MywgMHg2MCwgMHg5MywgMHg0MiwgMHgwMiwgMHhkMiwgCi0weDgyLCAweDY4LCAweDAxLCAweDMyLCAweDgyLCAweDYwLCAweGMyLCAweDY4LCAweDBiLCAweDZhLCAweGQyLCAweDE4LCAKLTB4YzIsIDB4NjAsIDB4NDIsIDB4NjksIDB4Y2IsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4NDIsIDB4NjEsIDB4YzIsIDB4NjksIAotMHg4YiwgMHg2OCwgMHhkMiwgMHgxOCwgMHhjMiwgMHg2MSwgMHgwMiwgMHg2OSwgMHgwYiwgMHg2OSwgMHhkMiwgMHgxOCwgCi0weDAyLCAweDYxLCAweDgyLCAweDY5LCAweDBiLCAweDY4LCAweGQyLCAweDE4LCAweDgyLCAweDYxLCAweDAyLCAweDZiLCAKLTB4Y2IsIDB4NjksIDB4ZDIsIDB4MTgsIDB4MDIsIDB4NjMsIDB4NGEsIDB4NmEsIDB4NDMsIDB4NmIsIDB4OWIsIDB4MTgsIAotMHg0MywgMHg2MywgMHg5MywgMHg0MiwgMHgwMiwgMHhkMiwgMHg4MiwgMHg2YiwgMHgwMSwgMHgzMiwgMHg4MiwgMHg2MywgCi0weGMyLCAweDZiLCAweDRiLCAweDY5LCAweGQyLCAweDE4LCAweGMyLCAweDYzLCAweDAyLCAweDZjLCAweGM5LCAweDZhLCAKLTB4NTEsIDB4MTgsIDB4MDEsIDB4NjQsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIAotMHgwMCwgMHgwOCwgMHgxNCwgMHg0MCwgMHg4OCwgMHhiNSwgMHg2OSwgMHg0NiwgMHgwMCwgMHhmMCwgMHgxNywgMHhmOCwgCi0weDgxLCAweDA4LCAweDBhLCAweGQwLCAweDAwLCAweDIwLCAweDAwLCAweDI5LCAweDA3LCAweGQ5LCAweDAwLCAweDIyLCAKLTB4ODMsIDB4MDAsIDB4MDAsIDB4OWYsIDB4YzAsIDB4NDYsIDB4ZmEsIDB4NTAsIDB4MDEsIDB4MzAsIDB4ODgsIDB4NDIsIAotMHhmOCwgMHhkMywgMHg4OCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHgwMCwgMHhmMCwgCi0weDA0LCAweGY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIyLCAKLTB4MDAsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDEsIDB4MjgsIDB4MGEsIDB4ZDAsIDB4MDIsIDB4MjgsIDB4MGMsIDB4ZDAsIAotMHgwMywgMHgyOCwgMHgwMiwgMHhkMSwgMHgwNywgMHg0OCwgMHgxYywgMHgyMiwgMHgwOCwgMHg2MCwgMHgxMCwgMHgxYywgCi0weDcwLCAweDQ3LCAweDA2LCAweDQ4LCAweDA0LCAweGUwLCAweDA2LCAweDQ4LCAweDUwLCAweDIyLCAweDA4LCAweDYwLCAKLTB4ZjcsIDB4ZTcsIDB4MDUsIDB4NDgsIDB4NjgsIDB4MjIsIDB4MDgsIDB4NjAsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsIAotMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgCi0weGEwLCAweDgyLCAweDIwLCAweDQwLCAweDgwLCAweGI0LCAweDAzLCAweDIyLCAweGMyLCAweDgwLCAweDE1LCAweDRhLCAKLTB4YzAsIDB4NDYsIDB4ODIsIDB4NjAsIDB4MTQsIDB4NGEsIDB4MTIsIDB4ODgsIDB4MDEsIDB4MzIsIDB4YzIsIDB4NjAsIAotMHgwMCwgMHgyMCwgMHgxMywgMHg0YSwgMHgxMywgMHg1YywgMHhjMCwgMHg0NiwgMHgwYiwgMHg3MCwgMHgwMSwgMHgzMCwgCi0weDAxLCAweDMxLCAweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDIwLCAweDIyLCAweDBhLCAweDcwLCAweDAxLCAweDMxLCAKLTB4MDAsIDB4MjAsIDB4MGUsIDB4NGIsIDB4MWYsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGYsIDB4NzAsIDB4MDEsIDB4MzAsIAotMHgwMSwgMHgzMSwgMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMSwgMHgwMCwgMHgyMCwgCi0weDA5LCAweDRhLCAweDEzLCAweDVjLCAweGMwLCAweDQ2LCAweDBiLCAweDcwLCAweDAxLCAweDMwLCAweDAxLCAweDMxLCAKLTB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDgsIDB4NzAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIAotMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgwNCwgMHgwMCwgMHg4MCwgCi0weDg1LCAweDA0LCAweDAwLCAweDgwLCAweDhlLCAweDA0LCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweDIzLCAKLTB4MGEsIDB4NDgsIDB4YzEsIDB4MWQsIDB4ODksIDB4MzEsIDB4NGIsIDB4NzAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4NzAsIAotMHg2NCwgMHgyMSwgMHg4MCwgMHgzMCwgMHhjMSwgMHg4MiwgMHgwMSwgMHg4MywgMHg0MywgMHg4MywgMHg3ZCwgMHgyMSwgCi0weGM5LCAweDAwLCAweDgxLCAweDgzLCAweGMyLCAweDgzLCAweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLCAKLTB4MDAsIDB4ZjAsIDB4OGUsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHhiNSwgMHgyMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhlMSwgMHhmZiwgMHgxMywgMHg0OCwgCi0weDAyLCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDgwLCAweGZiLCAweDAxLCAweDIzLCAweGQ4LCAweDQyLCAKLTB4MGEsIDB4ZDEsIDB4MTAsIDB4NDgsIDB4YzEsIDB4MWQsIDB4MzksIDB4MzEsIDB4Y2EsIDB4ODgsIDB4MDEsIDB4MzIsIAotMHhjYSwgMHg4MCwgMHg4MSwgMHg3OSwgMHgwMSwgMHgzMSwgMHg4MSwgMHg3MSwgMHhmZCwgMHhmNywgMHg3MCwgMHhmOSwgCi0weDBiLCAweDQ4LCAweGMwLCAweDY4LCAweDAxLCAweDI4LCAweDA1LCAweGQxLCAweDBhLCAweDQ4LCAweDdkLCAweDIyLCAKLTB4ZDIsIDB4MDAsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4NjgsIDB4ZmIsIDB4MDgsIDB4NDgsIDB4ZmIsIDB4ZjcsIAotMHhlMSwgMHhmYywgMHgwOCwgMHg0OCwgMHgyOCwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg2MCwgMHhmYiwgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc5LCAweDIxLCAweGZmLCAweGZmLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YTUsIDB4N2IsIDB4MjEsIDB4NDAsIAotMHg5NSwgMHgyYywgMHhmZiwgMHhmZiwgMHg1OSwgMHgwMywgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHgxMCwgMHgyMCwgCi0weDBmLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDBmLCAweDRhLCAweDBmLCAweDQ4LCAweDY0LCAweDIxLCAKLTB4ZmIsIDB4ZjcsIDB4YzYsIDB4ZmMsIDB4MGUsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIDB4MDEsIDB4NjgsIAotMHgwYSwgMHg0MCwgMHgwOCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwMiwgMHg2OCwgMHgxMiwgMHgwYywgCi0weDA3LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDA0LCAweGQzLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LCAKLTB4YzEsIDB4NjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDcsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsIAotMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhNSwgMHg1NSwgMHhmZiwgMHhmZiwgCi0weDdjLCAweDI5LCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjgsIDB4YjUsIDB4MjcsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDQsIAotMHgwMSwgMHg2OCwgMHgwYSwgMHg0MCwgMHgwNywgMHgyMSwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwMiwgMHg2OCwgCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAzLCAweGQzLCAweDIxLCAweDQ4LCAKLTB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MjAsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4NjQsIAotMHgxZiwgMHg0OCwgMHhmYiwgMHhmNywgMHg4NywgMHhmYywgMHgxZiwgMHg0OCwgMHhjMSwgMHg2YiwgMHhmZiwgMHgyOSwgCi0weGZjLCAweGQxLCAweDgxLCAweDZiLCAweDQyLCAweDZiLCAweDE2LCAweDFjLCAweDBmLCAweDFjLCAweDFjLCAweDRjLCAKLTB4MTAsIDB4MjMsIDB4NjAsIDB4NjksIDB4MTgsIDB4NDMsIDB4NjAsIDB4NjEsIDB4YTEsIDB4NjksIDB4OTksIDB4NDMsIAotMHgxZCwgMHgwNCwgMHhhMSwgMHg2MSwgMHhlOCwgMHg2MCwgMHhhMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgyOCwgMHg2MSwgCi0weDE2LCAweDRhLCAweDE3LCAweDQ5LCAweDY0LCAweDIwLCAweGZiLCAweGY3LCAweDZmLCAweGZjLCAweDE2LCAweDRhLCAKLTB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MTUsIDB4NGIsIDB4MDAsIDB4MjAsIDB4MzksIDB4MWMsIDB4MzIsIDB4MWMsIAotMHhmYiwgMHhmNywgMHg2ZSwgMHhmYywgMHgxMywgMHg0OCwgMHhjMSwgMHg2OCwgMHgwOCwgMHgyOSwgMHhmYywgMHhkMSwgCi0weDEyLCAweDQ4LCAweGZiLCAweGY3LCAweDVkLCAweGZjLCAweDEwLCAweDIzLCAweDYwLCAweDY5LCAweDk4LCAweDQzLCAKLTB4NjAsIDB4NjEsIDB4ZTgsIDB4NjAsIDB4MDEsIDB4MjAsIDB4ZTMsIDB4MjMsIDB4MWIsIDB4MDEsIDB4ZTEsIDB4MTgsIAotMHhjOCwgMHg3MSwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAyLCAweGZmLCAweGZmLCAKLTB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsIAotMHhiNSwgMHhiNiwgMHgyMSwgMHg0MCwgMHg2NCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgCi0weDQwLCAweDAxLCAweDE4LCAweDQwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZkLCAweGY3LCAKLTB4MDEsIDB4ZmYsIDB4MDYsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4MzIsIDB4ZmMsIDB4ZmQsIDB4ZjcsIDB4ZDYsIDB4ZmUsIAotMHhmZSwgMHhmNywgMHgwNCwgMHhmOCwgMHhmZSwgMHhmNywgMHgxNiwgMHhmOCwgMHhmZSwgMHhmNywgMHgyNCwgMHhmOCwgCi0weDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkxLCAweDAzLCAweGZmLCAweGZmLCAweDkwLCAweGI1LCAweGZkLCAweGY3LCAKLTB4NmIsIDB4ZmMsIDB4MzQsIDB4NGYsIDB4MDAsIDB4MjQsIDB4ZjksIDB4NjgsIDB4ZjgsIDB4MWQsIDB4NzksIDB4MzAsIAotMHgwMSwgMHgyOSwgMHgwZiwgMHhkMSwgMHgzMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2NywgMHgzMSwgMHg0OSwgCi0weGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDMwLCAweDQ5LCAweGMwLCAweDQ2LCAweDBjLCAweDYwLCAweDRjLCAweDYwLCAKLTB4OGMsIDB4NjAsIDB4Y2MsIDB4NjAsIDB4MGMsIDB4NjEsIDB4NGMsIDB4NjEsIDB4OGMsIDB4NjEsIDB4MDQsIDB4ZTAsIAotMHhmOSwgMHgxZCwgMHg3ZCwgMHgzMSwgMHhmOSwgMHg2NywgMHgxMiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgwMCwgMHg2OCwgCi0weDYwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweGY4LCAweDZmLCAweDIwLCAweDIzLCAKLTB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjgsIDB4NmYsIDB4NDAsIDB4MjMsIDB4MDEsIDB4NjgsIAotMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMCwgMHhmMCwgMHg1NCwgMHhmOCwgMHhmZCwgMHhmNywgMHg0ZSwgMHhmYywgCi0weDAwLCAweGYwLCAweDVlLCAweGY5LCAweGZkLCAweGY3LCAweDczLCAweGY4LCAweGZmLCAweGY3LCAweDBjLCAweGZlLCAKLTB4ZmQsIDB4ZjcsIDB4MmUsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4YjYsIDB4ZmQsIDB4ZmQsIDB4ZjcsIDB4YzIsIDB4ZmUsIAotMHhmZCwgMHhmNywgMHg1NCwgMHhmZCwgMHhmZCwgMHhmNywgMHgwYSwgMHhmZCwgMHhmZCwgMHhmNywgMHg5NCwgMHhmZCwgCi0weDAwLCAweGYwLCAweDFhLCAweGZhLCAweGZkLCAweGY3LCAweDljLCAweGZmLCAweGZkLCAweGY3LCAweDBhLCAweGZmLCAKLTB4ZmQsIDB4ZjcsIDB4ZDIsIDB4ZmUsIDB4ZmQsIDB4ZjcsIDB4M2MsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4ZGMsIDB4ZmEsIAotMHhmZiwgMHhmNywgMHg5YywgMHhmZiwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgCi0weGY4LCAweDE4LCAweDA0LCAweDcyLCAweDQ0LCAweDcyLCAweDA3LCAweDIzLCAweDViLCAweDAyLCAweGY4LCAweDE4LCAKLTB4MDQsIDB4NjMsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4YTgsIDB4MjAsIDB4ZmUsIDB4ZjcsIAotMHhiMSwgMHhmZCwgMHgwOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHg0NCwgMHg2MiwgMHgwMCwgMHhmMCwgMHgxOCwgMHhmYSwgCi0weDA3LCAweDQ4LCAweGZiLCAweGY3LCAweGJkLCAweGZiLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MTEsIDB4NDAsIDB4MDQsIDB4MDEsIDB4MTEsIDB4NDAsIAotMHgwMCwgMHgwMSwgMHgxMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxNSwgMHg4ZiwgMHgyMSwgMHg0MCwgCi0weDAwLCAweGI1LCAweDA0LCAweDQ4LCAweGZiLCAweGY3LCAweGFhLCAweGZiLCAweGZkLCAweGY3LCAweDVlLCAweGZmLCAKLTB4ZmQsIDB4ZjcsIDB4MjQsIDB4ZmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MTUsIDB4OTksIDB4MjEsIDB4NDAsIAotMHhmYSwgMHgyMSwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg2MiwgMHg0MCwgMHgyMSwgMHg0MSwgMHg2MiwgCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDA3LCAweDQ4LCAweDQxLCAweDY5LCAKLTB4MDcsIDB4NGIsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjEsIDB4ODIsIDB4NjksIDB4OWEsIDB4NDMsIDB4ODIsIDB4NjEsIAotMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHhkMSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MSwgCi0weDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZlLCAweGFmLCAweDlhLCAweDEwLCAKLTB4MDAsIDB4YjUsIDB4MDIsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4ODAsIDB4ZmIsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIAotMHhjOCwgMHg1NywgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHgyNCwgMHg0YywgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNCwgCi0weDIwLCAweDY4LCAweDAxLCAweDQwLCAweDA5LCAweDIwLCAweDIyLCAweDRlLCAweDIyLCAweDRkLCAweDAwLCAweDI5LCAKLTB4MDUsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4MDksIDB4MGMsIDB4MDQsIDB4ZDEsIDB4MjEsIDB4NjgsIDB4ODksIDB4MGEsIAotMHgwMSwgMHhkMywgMHhmMCwgMHg2MCwgMHgwMCwgMHhlMCwgMHgyOCwgMHg2NCwgMHgxZCwgMHg0OCwgMHhmYiwgMHhmNywgCi0weDY1LCAweGZiLCAweDFkLCAweDRmLCAweDFkLCAweDQ5LCAweDg4LCAweDY5LCAweDAxLCAweDMwLCAweDg4LCAweDYxLCAKLTB4MzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4NzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MWYsIDB4ZDAsIAotMHgxOSwgMHg0OCwgMHhmYiwgMHhmNywgMHg1NywgMHhmYiwgMHgxOSwgMHg0OCwgMHhmYiwgMHhmNywgMHg1NCwgMHhmYiwgCi0weDAwLCAweDI4LCAweGZhLCAweGQxLCAweDM4LCAweDdhLCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDE2LCAweDQ4LCAKLTB4ZmIsIDB4ZjcsIDB4NGMsIDB4ZmIsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDQsIDB4MjAsIDB4NjgsIDB4MDEsIDB4NDAsIAotMHgxNCwgMHgyMCwgMHgwMCwgMHgyOSwgMHgwNSwgMHhkMSwgMHgyMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNCwgMHhkMSwgCi0weDIxLCAweDY4LCAweDg5LCAweDBhLCAweDAxLCAweGQzLCAweGYwLCAweDYwLCAweDAxLCAweGUwLCAweDI4LCAweDY0LCAKLTB4ZmYsIDB4ZTcsIDB4ZmUsIDB4ZTcsIDB4ZmYsIDB4ZjcsIDB4NjUsIDB4ZmQsIDB4MGIsIDB4NDgsIDB4ZmIsIDB4ZjcsIAotMHgzNSwgMHhmYiwgMHhmZiwgMHhmNywgMHhhZiwgMHhmZiwgMHhjZCwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgCi0weDQwLCAweDAxLCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDA0LCAweDAyLCAweGZmLCAweGZmLCAKLTB4ODgsIDB4MWMsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIAotMHhiNSwgMHgwNywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5OSwgMHg5ZiwgMHgyMSwgMHg0MCwgCi0weDAwLCAweDIwLCAweDA3LCAweDRhLCAweDAxLCAweDIxLCAweDA5LCAweDA1LCAweDUwLCAweDYxLCAweGM4LCAweDYwLCAKLTB4ZDAsIDB4NjEsIDB4YzgsIDB4NjEsIDB4MDMsIDB4MjMsIDB4ZGIsIDB4MDQsIDB4MDMsIDB4NGEsIDB4MDEsIDB4MjEsIAotMHhkMSwgMHg2MywgMHg1OCwgMHg2MCwgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgCi0weGMwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweGI1LCAweGMwLCAweGIwLCAweDAxLCAweDIyLCAweDAwLCAweDIxLCAKLTB4MGEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4ZDEsIDB4ZmYsIDB4MDcsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4MjgsIDB4ZDAsIAotMHg2OSwgMHg0NiwgMHhmZiwgMHgyMiwgMHgzOCwgMHgxYywgMHgwMSwgMHgzMiwgMHhmZCwgMHhmNywgMHg1NCwgMHhmOSwgCi0weGZmLCAweDIzLCAweDAxLCAweDMzLCAweDk4LCAweDQyLCAweDFiLCAweGQxLCAweDBkLCAweDk4LCAweDAwLCAweDA5LCAKLTB4MTgsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4ZmQsIDB4ZjcsIDB4OGQsIDB4ZjgsIDB4MGUsIDB4NDksIDB4MDEsIDB4MjIsIAotMHgxMiwgMHgwNCwgMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwZCwgMHg0OCwgMHgwNSwgMHhkMSwgMHgwYSwgMHg2OCwgCi0weDEyLCAweDBjLCAweDA2LCAweGQxLCAweDA5LCAweDY4LCAweDg5LCAweDBhLCAweDAzLCAweGQzLCAweDBhLCAweDQ5LCAKLTB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MDksIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjQsIAotMHhmZiwgMHhmNywgMHhiYywgMHhmZiwgMHgzOCwgMHgxYywgMHhmZCwgMHhmNywgMHg3NCwgMHhmOCwgMHg0MCwgMHhiMCwgCi0weDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAKLTB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4MDcsIDB4ODAsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgxNywgMHg0OSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwgCi0weDA4LCAweDY4LCAweDAyLCAweDQwLCAweDA2LCAweDIwLCAweDAwLCAweDJhLCAweDA1LCAweGQxLCAweDBhLCAweDY4LCAKLTB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDksIDB4NjgsIDB4ODksIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MTEsIDB4NDksIAotMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHgxMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwgCi0weDAzLCAweDIwLCAweGZlLCAweGY3LCAweGQzLCAweGZjLCAweGZiLCAweGY3LCAweDBkLCAweGZmLCAweDAxLCAweDIzLCAKLTB4MTgsIDB4NDMsIDB4ZmIsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4ODMsIDB4ZmUsIDB4ZmYsIDB4ZjcsIAotMHg5ZCwgMHhmZiwgMHhmZiwgMHhmNywgMHgwNSwgMHhmZSwgMHhmZiwgMHhmNywgMHhmNSwgMHhmZSwgMHhmZiwgMHhmNywgCi0weDA5LCAweGZmLCAweGZmLCAweGY3LCAweDliLCAweGZkLCAweGZmLCAweGY3LCAweDIxLCAweGZmLCAweDA4LCAweGJjLCAKLTB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIAotMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHg0NiwgMHg0YSwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMywgCi0weDQ1LCAweDRkLCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGVjLCAweDE4LCAweGExLCAweDYxLCAweDI4LCAweDg4LCAKLTB4NDAsIDB4MDQsIDB4NDMsIDB4NGIsIDB4YzAsIDB4MTgsIDB4ODcsIDB4MWEsIDB4MDQsIDB4MjAsIDB4YWYsIDB4NjAsIAotMHg0MSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhiMCwgMHg2MSwgMHgwOCwgMHgyMCwgMHhjOCwgMHgyMywgMHg0MywgMHg0MywgCi0weGJiLCAweDQyLCAweDIxLCAweGQ5LCAweDQxLCAweDAwLCAweDNkLCAweDRlLCAweGMwLCAweDQ2LCAweDMxLCAweDYxLCAKLTB4YjYsIDB4NjksIDB4MjAsIDB4MjMsIDB4OWIsIDB4MWIsIDB4M2EsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjMsIDB4NjEsIAotMHgxMCwgMHgzYiwgMHgzMywgMHg2MiwgMHg4YiwgMHgwMCwgMHhmZiwgMHgxYSwgMHg0MCwgMHgwOCwgMHg4MSwgMHg0MiwgCi0weDE3LCAweGQzLCAweGI4LCAweDIzLCAweDQzLCAweDQzLCAweGJiLCAweDQyLCAweDA4LCAweGQ5LCAweDQxLCAweDFlLCAKLTB4MzIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4OTksIDB4ODEsIDB4ZDksIDB4ODEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MzgsIAotMHg1OCwgMHg2MSwgMHgwYSwgMHhlMCwgMHgwMSwgMHgzMCwgMHg4MSwgMHg0MiwgMHhlZiwgMHhkMiwgMHgwNiwgMHhlMCwgCi0weDJjLCAweDRlLCAweGIzLCAweDY5LCAweDAxLCAweDMzLCAweGIzLCAweDYxLCAweDQwLCAweDAwLCAweDg4LCAweDQyLCAKLTB4ZDIsIDB4ZDksIDB4MmEsIDB4NDksIDB4MDAsIDB4MjAsIDB4YTMsIDB4NjksIDB4OWIsIDB4MDgsIDB4MDcsIDB4ZDAsIAotMHgyOCwgMHg0YiwgMHg4NywgMHgwMCwgMHhjYiwgMHg1MSwgMHhhNywgMHg2OSwgMHhiZiwgMHgwOCwgMHgwMSwgMHgzMCwgCi0weDg3LCAweDQyLCAweGY4LCAweGQ4LCAweDIyLCAweDQ5LCAweGMwLCAweDQ2LCAweDhhLCAweDYyLCAweDhjLCAweDg5LCAKLTB4NTgsIDB4MjAsIDB4NjAsIDB4NDMsIDB4ODcsIDB4MTgsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MmMsIAotMHgwYSwgMHhkZCwgMHg1OCwgMHgyMywgMHg0MywgMHg0MywgMHg4YywgMHg2YSwgMHhlMywgMHgxOCwgMHgwMSwgMHgzMCwgCi0weDAwLCAweDA0LCAweDAwLCAweDBjLCAweDlhLCAweDYwLCAweDhiLCAweDg5LCAweDgzLCAweDQyLCAweGY0LCAweGRjLCAKLTB4Y2YsIDB4NjIsIDB4Y2MsIDB4ODksIDB4NjAsIDB4MDAsIDB4MDAsIDB4MTksIDB4NDAsIDB4MDEsIDB4YzcsIDB4MTksIAotMHgwMCwgMHgyMCwgMHgwMCwgMHgyYywgMHgwYiwgMHhkZCwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwgMHg1YiwgMHgwMSwgCi0weGNjLCAweDZhLCAweGUzLCAweDE4LCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDlhLCAweDYwLCAKLTB4Y2IsIDB4ODksIDB4ODMsIDB4NDIsIDB4ZjMsIDB4ZGMsIDB4NGYsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MGIsIDB4NjksIAotMHgwMCwgMHgyYiwgMHgwNywgMHhkOSwgMHg4NywgMHgwMCwgMHg0YiwgMHg2YSwgMHhjMCwgMHg0NiwgMHhkYSwgMHg1MSwgCi0weDBiLCAweDY5LCAweDAxLCAweDMwLCAweDgzLCAweDQyLCAweGY3LCAweGQ4LCAweDQ5LCAweDZhLCAweDgwLCAweDAwLCAKLTB4MDgsIDB4MTgsIDB4MDQsIDB4MzgsIDB4MjgsIDB4NjEsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIAotMHhiMCwgMHhiZSwgMHgyMSwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwgCi0weDRjLCAweDJhLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweGFkLCAweGRlLCAweDAwLCAKLTB4MGEsIDB4NDgsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDEsIDB4NjksIDB4OTksIDB4NDMsIDB4MWEsIDB4MDksIAotMHg0MSwgMHg2MSwgMHhkMSwgMHg2MCwgMHgwMCwgMHgyMSwgMHhhMSwgMHgyMiwgMHg1MiwgMHgwMywgMHg5MSwgMHg2MSwgCi0weDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDgxLCAweDYxLCAweDAxLCAweDIwLCAweDAwLCAweDA2LCAKLTB4NTksIDB4MDUsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIAotMHg4MCwgMHhiNCwgMHgwMiwgMHgxYywgMHgwYiwgMHg0OCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMywgMHgxOCwgCi0weDlhLCAweDYxLCAweDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQyLCAweDY5LCAweDFhLCAweDQzLCAweDQyLCAweDYxLCAKLTB4ODcsIDB4NjksIDB4OWYsIDB4NDMsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDUsIAotMHg4NywgMHg2MSwgMHhkYSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxOCwgMHg2MSwgMHhhMSwgMHgyMCwgCi0weDQwLCAweDAzLCAweDgxLCAweDYxLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4ODAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4YzksIDB4ZmYsIDB4MDAsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjgsIAotMHgwMCwgMHgyMCwgMHgwOSwgMHg0OSwgMHgwMCwgMHgyMiwgMHgwMywgMHgwMSwgMHg1ZiwgMHgxOCwgMHgzMywgMHgyMywgCi0weDliLCAweDAxLCAweGZiLCAweDE4LCAweDlhLCAweDYyLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGY2LCAweGQzLCAKLTB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4MzMsIDB4ZjgsIDB4ODAsIDB4YmMsIAotMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgxZCwgMHgzZSwgMHhmZiwgMHhmZiwgCi0weDAwLCAweGI1LCAweDAyLCAweDQ4LCAweDAwLCAweGYwLCAweDA0LCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAKLTB4YTgsIDB4NjEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjQsIDB4MDEsIDB4MjIsIDB4MTIsIDB4MDUsIDB4MGYsIDB4NGIsIAotMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgMHhjOCwgMHg2MSwgMHgxOCwgMHgxYywgCi0weDU5LCAweDY5LCAweDUzLCAweDAxLCAweDE5LCAweDQzLCAweDQxLCAweDYxLCAweDg3LCAweDY5LCAweDlmLCAweDQzLCAKLTB4ODcsIDB4NjEsIDB4ZDEsIDB4NjAsIDB4ODAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjEsIDB4ODAsIDB4YmMsIAotMHg3MCwgMHg0NywgMHgxOCwgMHgxYywgMHg1ZiwgMHg2OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg5ZiwgMHg0MywgCi0weDQ3LCAweDYxLCAweGQ3LCAweDYwLCAweDAwLCAweDIwLCAweGM4LCAweDYxLCAweGYzLCAweGU3LCAweDAwLCAweDAwLCAKLTB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MDcsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MTcsIDB4NGMsIAotMHgwMywgMHgwMSwgMHgxZCwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwgMHg5ZCwgMHg2YSwgCi0weGJkLCAweDQyLCAweDA1LCAweGQxLCAweDFkLCAweDZiLCAweDk1LCAweDQyLCAweDAyLCAweGQxLCAweGRiLCAweDZhLCAKLTB4OGIsIDB4NDIsIDB4MWMsIDB4ZDAsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZWUsIDB4ZDMsIDB4MDAsIDB4MjAsIAotMHgwMywgMHgwMSwgMHgxZCwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwgMHg5YiwgMHg2YSwgCi0weDAwLCAweDJiLCAweDA5LCAweGQxLCAweDAzLCAweDAxLCAweDFjLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAKLTB4ZTMsIDB4MTgsIDB4MWEsIDB4NjMsIDB4ZDksIDB4NjIsIDB4NWEsIDB4NjMsIDB4OWYsIDB4NjIsIDB4MDIsIDB4ZTAsIAotMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhlYSwgMHhkMywgMHgwYiwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMCwgMHgyMCwgCi0weGMwLCAweDQzLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAKLTB4OTAsIDB4YjQsIDB4MDEsIDB4MWMsIDB4MDAsIDB4MjIsIDB4MDEsIDB4MjAsIDB4MTYsIDB4NGYsIDB4MDEsIDB4ZTAsIAotMHgwMCwgMHgyYSwgMHgwNywgMHhkMSwgMHgwMywgMHgwMSwgMHhkYywgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgCi0weGUzLCAweDE4LCAweDliLCAweDY5LCAweDhiLCAweDQyLCAweDExLCAweGQxLCAweDAyLCAweDAxLCAweGQyLCAweDE5LCAKLTB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4OTMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4OTMsIDB4NjEsIAotMHhkMywgMHg2YSwgMHhjMCwgMHg0NiwgMHhkMywgMHg2MSwgMHgxMywgMHg2YiwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MiwgCi0weDUzLCAweDZiLCAweGMwLCAweDQ2LCAweDUzLCAweDYyLCAweDAxLCAweDIyLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAKLTB4ZTAsIDB4ZDMsIDB4MDcsIDB4NGIsIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4OWEsIDB4NjgsIDB4OGEsIDB4NDIsIAotMHgwMywgMHhkMSwgMHgwMCwgMHgyMSwgMHg5OSwgMHg2MCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgCi0weGMwLCAweDQzLCAweGZhLCAweGU3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGU4LCAweDFiLCAweDAwLCAweDgwLCAKLTB4MGIsIDB4MjgsIDB4MTcsIDB4ZGEsIDB4MGMsIDB4NDksIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4OGEsIDB4NjksIAotMHgxMywgMHg0MywgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHg4YiwgMHg2MSwgMHgxMywgMHg2MSwgMHgwMCwgMHgwMSwgCi0weDQwLCAweDE4LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweDAzLCAweDZiLCAweGMwLCAweDQ2LCAKLTB4NDMsIDB4NjMsIDB4NTMsIDB4MDEsIDB4ODgsIDB4NjksIDB4OTgsIDB4NDMsIDB4ODgsIDB4NjEsIDB4MTAsIDB4NjEsIAotMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYywgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgCi0weDkwLCAweGI0LCAweDA4LCAweDRhLCAweGQwLCAweDY5LCAweDAwLCAweDIxLCAweDA3LCAweDRmLCAweGQzLCAweDY5LCAKLTB4ODMsIDB4NDIsIDB4MDIsIDB4ZDksIDB4ZmMsIDB4MWEsIDB4MjAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4YzAsIDB4MWEsIAotMHgwOSwgMHgxOCwgMHgxOCwgMHgxYywgMHhiOSwgMHg0MiwgMHhmNCwgMHhkOSwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgCi0weDAwLCAweDIwLCAweDE0LCAweDQwLCAweGE4LCAweDYxLCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAKLTB4MDAsIDB4MjQsIDB4MDAsIDB4MmYsIDB4MDQsIDB4ZDMsIDB4ZmYsIDB4ZjcsIDB4ZTMsIDB4ZmYsIDB4MDEsIDB4MzQsIAotMHhiYywgMHg0MiwgMHhmYSwgMHhkOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgCi0weDE4LCAweDQ3LCAweDAwLCAweDAwLCAKKzB4NTQsIDB4NTksIDB4NTAsIDB4NDgsIDB4NGYsIDB4NGYsIDB4NGUsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsCisweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGNiLCAweDk5LCAweGIxLCAweGQ0LAorMHg0YywgMHhiOCwgMHhkMCwgMHg0YiwgMHgzMiwgMHgwMiwgMHhkNCwgMHhlZSwgMHg3MywgMHg3ZSwgMHgwYiwgMHgxMywKKzB4OWIsIDB4YzAsIDB4YWUsIDB4ZjQsIDB4NDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4ZmMsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDM5LCAweDAwLCAweDAwLCAweGVhLCAweDA1LCAweDAwLCAweDAwLCAweGVhLAorMHgwNCwgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwMiwgMHgwMCwgMHgwMCwgMHhlYSwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MzIsIDB4MDIsIDB4MDAsIDB4ZWEsIDB4YzUsIDB4MTQsIDB4MDAsIDB4ZWEsCisweDA3LCAweDAwLCAweDJkLCAweGU5LCAweDBlLCAweDAwLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDBmLCAweGUxLAorMHhkMCwgMHgyMCwgMHg5ZiwgMHhlNSwgMHgxMiwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmZSwgMHhmZiwgMHhmZiwgMHhlYSwKKzB4MDEsIDB4MDAsIDB4ODAsIDB4ZTAsIDB4MDQsIDB4MjAsIDB4ODEsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4NTAsIDB4ZTEsCisweGZjLCAweGZmLCAweGZmLCAweDFhLCAweDBlLCAweGYwLCAweGEwLCAweGUxLCAweDAwLCAweGEwLCAweGEwLCAweGUxLAorMHgwZSwgMHhiMCwgMHhhMCwgMHhlMSwgMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywgMHhhOCwgMHgxMCwgMHg5ZiwgMHhlNSwKKzB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4YTQsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCisweDAxLCAweDE2LCAweGEwLCAweGUzLCAweDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUzLAorMHgwMCwgMHgwMCwgMHg4MSwgMHhlNSwgMHhkNywgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKKzB4ODgsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4ZGIsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCisweDdjLCAweGQwLCAweDlmLCAweGU1LCAweGQyLCAweDAwLCAweGEwLCAweGUzLCAweDAwLCAweGYwLCAweDIxLCAweGUxLAorMHg3NCwgMHhkMCwgMHg5ZiwgMHhlNSwgMHhkMSwgMHgwMCwgMHhhMCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKKzB4NmMsIDB4ZDAsIDB4OWYsIDB4ZTUsIDB4OWIsIDB4MTQsIDB4MDAsIDB4ZWIsIDB4ZDMsIDB4MDAsIDB4YTAsIDB4ZTMsCisweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDYwLCAweGQwLCAweDlmLCAweGU1LCAweDYwLCAweDAwLCAweDlmLCAweGU1LAorMHg2MCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHg2MCwgMHgyMCwgMHg5ZiwgMHhlNSwgMHhkYiwgMHhmZiwgMHhmZiwgMHhlYiwKKzB4NWMsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NWMsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MjAsIDB4YTAsIDB4ZTMsCisweGQ3LCAweGZmLCAweGZmLCAweGViLCAweDU0LCAweDAwLCAweDlmLCAweGU1LCAweDU0LCAweDEwLCAweDlmLCAweGU1LAorMHhkNCwgMHhmZiwgMHhmZiwgMHhlYiwgMHgwYSwgMHgwMCwgMHhhMCwgMHhlMSwgMHgwYiwgMHhmMCwgMHhhMCwgMHhlMSwKKzB4ZDMsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4ZDQsIDB4ZmYsIDB4ZmYsIDB4ZWIsCisweDNjLCAweGEwLCAweDlmLCAweGU1LCAweDFhLCAweGZmLCAweDJmLCAweGUxLCAweGM2LCAweGZmLCAweGZmLCAweGVhLAorMHgxNSwgMHgyMSwgMHhmZiwgMHhmZiwgMHgwYywgMHgwMCwgMHgxMCwgMHgwMCwgMHgxYywgMHgwMCwgMHgxMCwgMHgwMCwKKzB4M2MsIDB4MzgsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4MzcsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4M2YsIDB4MDAsIDB4ODAsCisweDdjLCAweDM0LCAweDAwLCAweDgwLCAweDgwLCAweDBmLCAweDAwLCAweDAwLCAweDgwLCAweDMwLCAweDAwLCAweDgwLAorMHhhZCwgMHhkZSwgMHhhZCwgMHhkZSwgMHhiMCwgMHhiYiwgMHgwMCwgMHgwMCwgMHgyNCwgMHhhYiwgMHgyMCwgMHg0MCwKKzB4NDgsIDB4MjksIDB4MDAsIDB4MDAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4YmQsIDB4YmEsIDB4MjEsIDB4NDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NTgsIDB4NTcsIDB4MDAsIDB4MDAsIDB4ODYsIDB4NGIsIDB4MDAsIDB4MDAsIDB4NjAsIDB4MDEsIDB4ZmYsIDB4ZmYsCisweGIwLCAweGI1LCAweDA3LCAweDFjLCAweDEyLCAweDRkLCAweDAwLCAweDI0LCAweDI4LCAweDY4LCAweDAwLCAweDI4LAorMHgxZSwgMHhkMCwgMHgzOCwgMHgxYywgMHgxMCwgMHg0OSwgMHgwNCwgMHhmMCwgMHg3YiwgMHhmZCwgMHgyOSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4MjgsIDB4MTUsIDB4ZDAsIDB4MzgsIDB4MDEsIDB4MGQsIDB4NDksCisweDQwLCAweDE4LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDQxLCAweDZiLCAweDgwLCAweDI5LAorMHgwYywgMHhkMiwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MywgMHgyOCwgMHg2OCwgMHhjMSwgMHg2OSwgMHhjMCwgMHg0NiwKKzB4MjksIDB4NjAsIDB4MzksIDB4MDcsIDB4NDEsIDB4NjAsIDB4MDQsIDB4NjIsIDB4YzcsIDB4NjIsIDB4YjAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDIwLCAweDFjLCAweGZhLCAweGU3LCAweGU4LCAweDE3LCAweDAwLCAweDgwLAorMHhlZSwgMHgwNSwgMHgwMCwgMHgwMCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMiwgMHg0OSwgMHgwYSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4YzIsIDB4NjEsIDB4MDgsIDB4NjAsIDB4NzAsIDB4NDcsCisweGU4LCAweDE3LCAweDAwLCAweDgwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMSwKKzB4YzAsIDB4MTAsIDB4ODEsIDB4ZTMsIDB4MDEsIDB4ZjAsIDB4MjEsIDB4ZTEsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLAorMHhjMCwgMHgwMCwgMHg4MCwgMHhlMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwKKzB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4YzAsIDB4MDAsIDB4YzAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCisweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDQwLCAweDAwLCAweDgwLCAweGUzLAorMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwKKzB4ODAsIDB4MDAsIDB4MTAsIDB4ZTMsIDB4ODAsIDB4MDAsIDB4ODAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4MjEsIDB4ZTEsCisweDAwLCAweDAwLCAweDAwLCAweDEyLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDAwLCAweDAwLCAweDUwLCAweGUzLAorMHgwMCwgMHgwMCwgMHgwZiwgMHhlMSwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxMywgMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwKKzB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4MDAsIDB4MGYsIDB4ZTEsIDB4ODAsIDB4MDAsIDB4YzAsIDB4ZTMsCisweDAwLCAweGYwLCAweDIxLCAweGUxLCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDkxLCAweDAwLCAweDAwLCAweGUwLAorMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMSwgMHgyMCwgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMCwKKzB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ODAsIDB4YjUsIDB4MDgsIDB4NGYsIDB4NjQsIDB4MjgsIDB4MDQsIDB4ZDMsCisweDY0LCAweDIwLCAweDM4LCAweDYzLCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDAzLCAweGUwLCAweDM4LCAweDYzLAorMHgwNCwgMHg0OSwgMHgwNSwgMHhmMCwgMHgwMSwgMHhmYiwgMHg3OCwgMHg2MywgMHhiOCwgMHg2MywgMHg4MCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODgsIDB4MTMsIDB4MDAsIDB4MDAsCisweDgwLCAweGI0LCAweDEwLCAweDRiLCAweDAwLCAweDIyLCAweDFmLCAweDZiLCAweDY0LCAweDJmLCAweDAzLCAweGQyLAorMHgwOSwgMHg2OCwgMHgwOSwgMHg2OCwgMHg0OSwgMHgwOCwgMHgwMiwgMHhkMiwgMHgxMCwgMHgxYywgMHg4MCwgMHhiYywKKzB4NzAsIDB4NDcsIDB4MTksIDB4MWMsIDB4ZGIsIDB4NmIsIDB4NGYsIDB4NmIsIDB4YmIsIDB4NDIsIDB4MDUsIDB4ZDIsCisweDQwLCAweDY4LCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDE4LCAweDE4LCAweGM4LCAweDYzLCAweGYxLCAweGU3LAorMHg0MSwgMHg2OCwgMHgwNSwgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHgwNCwgMHg0OCwgMHhjMSwgMHg2YiwKKzB4MDEsIDB4MzEsIDB4YzEsIDB4NjMsIDB4MDIsIDB4MjAsIDB4ZTgsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLAorMHgxNSwgMHg0YywgMHgwMCwgMHgyMCwgMHgyMSwgMHg2YiwgMHg2NCwgMHgyOSwgMHgwYiwgMHhkMiwgMHhiOSwgMHg2ZSwKKzB4NDksIDB4MDgsIDB4MDgsIDB4ZDMsIDB4MjEsIDB4NmMsIDB4YTIsIDB4NmIsIDB4OTEsIDB4NDIsIDB4MDcsIDB4ZDIsCisweGZhLCAweDFkLCAweDM5LCAweDMyLCAweDUyLCAweDhiLCAweDg5LCAweDE4LCAweDIxLCAweDY0LCAweDkwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwKKzB4MzgsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4MmQsIDB4ZmUsIDB4MzgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ZTgsIDB4ZmEsCisweDAxLCAweDIwLCAweGJiLCAweDIzLCAweDFiLCAweDAxLCAweGUxLCAweDE4LCAweGM4LCAweDczLCAweDA1LCAweDQ5LAorMHgwYSwgMHg2YywgMHgxMiwgMHgxOCwgMHgwYSwgMHg2NCwgMHgwNCwgMHg0OSwgMHg4YSwgMHg2ZCwgMHgxMiwgMHgxOCwKKzB4OGEsIDB4NjUsIDB4ZTQsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCisweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDBhLCAweDQ4LCAweGMwLCAweDZkLCAweDAyLCAweDIzLAorMHgxOCwgMHg0MCwgMHgwOSwgMHg0YSwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHhkMSwgMHg2MywKKzB4MTEsIDB4NjQsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDYsIDB4NDgsIDB4MDcsIDB4NjgsIDB4N2IsIDB4MWMsCisweDAzLCAweDYwLCAweDBhLCAweDJmLCAweGY3LCAweGQzLCAweDAxLCAweDYwLCAweGYzLCAweGU3LCAweDAwLCAweDAwLAorMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwMSwgMHgwMCwgMHg4MCwKKzB4NzAsIDB4NDcsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDAsIDB4MGMsIDB4MTAsIDB4MTgsIDB4MGEsIDB4MDQsCisweDEyLCAweDBjLCAweDA5LCAweDBjLCAweDUxLCAweDE4LCAweDA4LCAweDE4LCAweDAxLCAweDBjLCAweDA1LCAweGQwLAorMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwMCwgMHgwYywgMHgwOCwgMHgxOCwgMHgwMSwgMHgwYywgMHhmOSwgMHhkMSwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjksCisweDE4LCAweGQwLCAweDRmLCAweDA4LCAweDdiLCAweDFlLCAweDAwLCAweDJmLAorMHgwNiwgMHhkMCwgMHgwNywgMHg4OCwgMHhiYSwgMHgxOCwgMHgwMiwgMHgzMCwgMHgxZiwgMHgxYywgMHgwMSwgMHgzYiwKKzB4MDAsIDB4MmYsIDB4ZjgsIDB4ZDEsIDB4NDksIDB4MDgsIDB4MDMsIDB4ZDMsIDB4MDAsIDB4ODgsIDB4MDAsIDB4MDYsCisweDAwLCAweDBlLCAweDgyLCAweDE4LCAweDEwLCAweDBjLCAweDA1LCAweGQwLCAweDEwLCAweDA0LCAweDAwLCAweDBjLAorMHgxMSwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywgMHhmOSwgMHhkMSwgMHgxMCwgMHgwNCwgMHgwMCwgMHgwYywKKzB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODMsIDB4ODksIDB4YzcsIDB4ODksIDB4ZmIsIDB4MTgsCisweDA3LCAweDhhLCAweGZiLCAweDE4LCAweDQ3LCAweDhhLCAweGZiLCAweDE4LCAweDQwLCAweDdhLCAweDAwLCAweDAyLAorMHhjNywgMHgxOCwgMHgzOCwgMHgwYywgMHgwNSwgMHhkMCwgMHgzOCwgMHgwNCwgMHgwMCwgMHgwYywgMHgzYiwgMHgwYywKKzB4YzcsIDB4MTgsIDB4MzgsIDB4MGMsIDB4ZjksIDB4ZDEsIDB4MDgsIDB4MWMsIDB4MTEsIDB4MWMsIDB4ZmYsIDB4ZjcsCisweGM4LCAweGZmLCAweDAxLCAweDFjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGIwLCAweGZmLCAweDgwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHgwMiwgMHgyMywgMHg4MiwgMHg2OCwgMHgxYSwgMHg0MCwKKzB4MDAsIDB4MjcsIDB4MDAsIDB4MmEsIDB4MGYsIDB4ZDAsIDB4MGEsIDB4NGEsIDB4OTMsIDB4NjksIDB4MDEsIDB4MzMsCisweDkzLCAweDYxLCAweDBhLCAweDY4LCAweDhiLCAweDY4LCAweDlhLCAweDE4LCAweDAwLCAweDY4LCAweDFjLCAweDE4LAorMHg1NywgMHg4MSwgMHgwOSwgMHg2OSwgMHgxMCwgMHgxYywgMHhmZiwgMHhmNywgMHhhYywgMHhmZiwgMHhjMCwgMHg0MywKKzB4NjAsIDB4ODEsIDB4MzgsIDB4MWMsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCisweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDA0LCAweDIzLCAweDgyLCAweDY4LCAweDFhLCAweDQwLAorMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgxMSwgMHhkMCwgMHg0YSwgMHg2OCwgMHg1MiwgMHgwOSwgMHgwZSwgMHhkMywKKzB4MDksIDB4NGEsIDB4MTMsIDB4NmEsIDB4MDEsIDB4MzMsIDB4MTMsIDB4NjIsIDB4Y2IsIDB4NjgsIDB4MDIsIDB4NjgsCisweDljLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDNhLCAweDFhLCAweDQzLCAweDEyLCAweDY4LAorMHgwMCwgMHhmMCwgMHgyZSwgMHhmOCwgMHgyMCwgMHg4MiwgMHgzOCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4ODAsIDB4MjMsCisweDgyLCAweDY4LCAweDFhLCAweDQwLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDE1LCAweGQwLCAweDRhLCAweDY4LAorMHg5MiwgMHgwOSwgMHgxMiwgMHhkMywgMHgwYiwgMHg0YSwgMHhkMywgMHg2OSwgMHgwMSwgMHgzMywgMHhkMywgMHg2MSwKKzB4Y2IsIDB4NjgsIDB4MDIsIDB4NjgsIDB4OWYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4M2EsCisweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDAwLCAweGYwLCAweDBlLCAweGY4LCAweDAwLCAweDI4LCAweDAwLCAweGQxLAorMHgwNCwgMHg0OCwgMHhjMCwgMHg0NiwgMHhmOCwgMHg4MCwgMHgyMCwgMHgxYywgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisweGIwLCAweGI1LCAweDE0LCAweDFjLCAweDA1LCAweDFjLCAweDBmLCAweDFjLCAweDM4LCAweDY5LCAweGI5LCAweDY4LAorMHg0MSwgMHgxOCwgMHgzOCwgMHg2OCwgMHhmZiwgMHhmNywgMHg1MywgMHhmZiwgMHhjMCwgMHg0MywgMHgwMSwgMHgwNCwKKzB4MDksIDB4MGMsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzksIDB4ZmYsIDB4MDQsIDB4MWMsIDB4YjgsIDB4NjgsCisweDc5LCAweDY5LCAweDQwLCAweDE4LCAweDY5LCAweDY4LCAweDg4LCAweDQyLCAweDBjLCAweGQyLCAweDJhLCAweDY4LAorMHgxMiwgMHgxOCwgMHgwOSwgMHgxYSwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNSwgMHhmOSwgMHhjMCwgMHg0MywKKzB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MjYsIDB4ZmYsIDB4MDQsIDB4MWMsCisweGUwLCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHhjMCwgMHgwOCwgMHgxYSwgMHhkMywgMHhiOCwgMHg2YSwKKzB4ZjksIDB4NmIsIDB4NDAsIDB4MTgsIDB4NzksIDB4NmMsIDB4MDAsIDB4ZjAsIDB4ZWQsIDB4ZjgsIDB4YzAsIDB4NDMsCisweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDQ4LCAweDA3LCAweGQwLCAweDIwLCAweDIzLCAweGI5LCAweDY5LAorMHgxOSwgMHg0MywgMHhiOSwgMHg2MSwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwgMHgwMSwgMHg2MywgMHgwNywgMHhlMCwKKzB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIDB4YjksIDB4NjksIDB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4NDEsIDB4NmEsCisweDAxLCAweDMxLCAweDQxLCAweDYyLCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHhiOCwgMHg2YiwgMHg0MSwgMHgwOSwKKzB4MWMsIDB4ZDMsIDB4YzAsIDB4MDgsIDB4MWEsIDB4ZDMsIDB4ZjgsIDB4MWQsIDB4MzksIDB4MzAsIDB4MDAsIDB4N2IsCisweDA2LCAweDI4LCAweDE1LCAweGQxLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDUzLCAweGY4LCAweDAxLCAweDFjLAorMHgwYSwgMHg0OCwgMHgwNywgMHhkMCwgMHg0MCwgMHgyMywgMHhiOSwgMHg2OSwKKzB4MTksIDB4NDMsIDB4YjksIDB4NjEsIDB4ODEsIDB4NmIsIDB4MDEsIDB4MzEsIDB4ODEsIDB4NjMsIDB4MDcsIDB4ZTAsCisweDAxLCAweDIzLCAweDliLCAweDAyLCAweGI5LCAweDY5LCAweDE5LCAweDQzLCAweGI5LCAweDYxLCAweGMxLCAweDZhLAorMHgwMSwgMHgzMSwgMHhjMSwgMHg2MiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4YjgsIDB4NmIsIDB4ODEsIDB4MDksCisweDJjLCAweGQzLCAweGMwLCAweDA4LCAweDJhLCAweGQzLCAweGY4LCAweDFkLCAweDM5LCAweDMwLCAweDAwLCAweDdiLAorMHgxMSwgMHgyOCwgMHgyNSwgMHhkMSwgMHhiOCwgMHg2YSwgMHgzOSwgMHg2YywgMHg0MCwgMHgxOCwgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4MDYsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4MDUsIDB4MDQsIDB4MmQsIDB4MGMsCisweDBmLCAweDRjLCAweDExLCAweGQwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDFmLCAweGY4LCAweDAwLCAweDI4LAorMHgwYywgMHhkMCwgMHhhOCwgMHg0MiwgMHgwMiwgMHhkMSwgMHgwYywgMHg0YiwgMHg5OCwgMHg0MiwgMHgwNywgMHhkMCwKKzB4ODAsIDB4MjMsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsIDB4YjgsIDB4NjEsIDB4NjAsIDB4NmIsIDB4MDEsIDB4MzAsCisweDYwLCAweDYzLCAweDA3LCAweGUwLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweGI4LCAweDY5LCAweDE4LCAweDQzLAorMHhiOCwgMHg2MSwgMHhhMCwgMHg2YSwgMHgwMSwgMHgzMCwgMHhhMCwgMHg2MiwgMHgwMCwgMHgyMCwgMHhiMCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisweGYwLCAweGI1LCAweGZmLCAweGIwLCAweDk5LCAweGIwLCAweDA0LCAweDFjLCAweGUwLCAweDZiLCAweDYxLCAweDZjLAorMHgwOSwgMHgxOCwgMHgwMywgMHhhYSwgMHg4NSwgMHgxOCwgMHhhMywgMHg2YSwgMHgwMCwgMHgyMCwgMHg4YSwgMHgwOCwKKzB4MDEsIDB4MzIsIDB4OTcsIDB4OTIsIDB4MDcsIDB4ZDAsIDB4ODIsIDB4MDAsIDB4OWYsIDB4NTgsIDB4MDMsIDB4YWUsCisweGI3LCAweDUwLCAweDk3LCAweDlhLCAweDAxLCAweDMwLCAweDgyLCAweDQyLCAweGY3LCAweGQ4LCAweDYwLCAweDZhLAorMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwNCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwKKzB4MDIsIDB4OTAsIDB4MDIsIDB4YWYsIDB4M2YsIDB4ODgsIDB4MDMsIDB4YTgsIDB4ZmYsIDB4ZjcsIDB4ODcsIDB4ZmUsCisweGMwLCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDZkLCAweGZlLAorMHgwNywgMHgxYywgMHhlMCwgMHg2YiwgMHhhMSwgMHg2YywgMHg0MCwgMHgxOCwgMHg2MSwgMHg2YSwgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4MDgsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTEsCisweDAxLCAweGE5LCAweDA5LCAweDg4LCAweDAxLCAweDMxLCAweDg4LCAweDQyLCAweDBjLCAweGQyLCAweGEyLCAweDZhLAorMHgxMiwgMHgxOCwgMHgwOSwgMHgxYSwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyZiwgMHhmOCwgMHhjMCwgMHg0MywKKzB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NTAsIDB4ZmUsIDB4MDcsIDB4MWMsCisweGE4LCAweDg5LCAweGU5LCAweDg5LCAweDA4LCAweDE4LCAweDI5LCAweDhhLCAweDA4LCAweDE4LCAweDY5LCAweDhhLAorMHgwOCwgMHgxOCwgMHg2OSwgMHg3YSwgMHgwOSwgMHgwMiwgMHgwOCwgMHgxOCwgMHhhMSwgMHg2YywgMHg2MiwgMHg2YywKKzB4ODksIDB4MWEsIDB4MGEsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MTEsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsCisweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDA5LCAweDE4LCAweDA4LCAweDBjLCAweDA1LCAweGQwLCAweDA4LCAweDA0LAorMHgwMCwgMHgwYywgMHgwOSwgMHgwYywgMHg0MSwgMHgxOCwgMHgwOCwgMHgwYywgMHhmOSwgMHhkMSwgMHgzOCwgMHgxYywKKzB4ZmYsIDB4ZjcsIDB4MmYsIDB4ZmUsIDB4YzAsIDB4NDMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4N2YsIDB4YjAsCisweDE5LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGIwLCAweGI0LCAweDAwLCAweDIyLAorMHgwMCwgMHgyOSwgMHgyZSwgMHhkMCwgMHg4MywgMHgwNywgMHg5YiwgMHgwZiwgMHhkYywgMHgwMCwgMHg0NywgMHgxOCwKKzB4MDQsIDB4MjUsIDB4ZWYsIDB4MWIsIDB4YmYsIDB4MDcsIDB4YmYsIDB4MGYsIDB4ZmYsIDB4MDAsIDB4ODAsIDB4MDgsCisweDgwLCAweDAwLCAweDU5LCAweDE4LCAweDAzLCAweDMxLCAweDg5LCAweDA4LCAweDRkLCAweDFlLCAweDAyLCAweGM4LAorMHhlMSwgMHg0MCwgMHhhMSwgMHg0MCwgMHg2YiwgMHgxZSwgMHgwMCwgMHgyZCwgMHgwOSwgMHhkMCwgMHgwYywgMHgwNCwKKzB4MjQsIDB4MGMsIDB4YTIsIDB4MTgsIDB4MDksIDB4MGMsIDB4OGEsIDB4MTgsIDB4MDIsIDB4YzgsIDB4MWMsIDB4MWMsCisweDAxLCAweDNiLCAweDAwLCAweDJjLCAweGY1LCAweGQxLCAweGI5LCAweDQwLCAweDA4LCAweDFjLCAweGY4LCAweDQwLAorMHgwMSwgMHgwNCwgMHgwOSwgMHgwYywgMHg4OSwgMHgxOCwgMHgwMCwgMHgwYywgMHg0MiwgMHgxOCwgMHgxMCwgMHgwYywKKzB4MDUsIDB4ZDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTEsIDB4MGMsIDB4NDIsIDB4MTgsIDB4MTAsIDB4MGMsCisweGY5LCAweGQxLCAweDEwLCAweDA0LCAweDAwLCAweDBjLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAorMHg5MCwgMHhiNCwgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywgMHgxMSwgMHg0OSwgMHg0MiwgMHgwMCwgMHgxMiwgMHgxOCwKKzB4ZDIsIDB4MDAsIDB4NTMsIDB4MTgsIDB4OWMsIDB4NjgsIDB4MDEsIDB4MjMsCisweDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDAzLCAweDFiLCAweDBiLCAweDhhLCAweDU4LAorMHgxMiwgMHgwMywgMHgxMiwgMHgwYiwgMHg5MywgMHg0MiwgMHgwYywgMHhkMSwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwKKzB4ZWMsIDB4ZDMsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NmEsIDB4MDEsIDB4MDMsIDB4MDksIDB4MGIsIDB4MDcsIDB4NDgsCisweDAwLCAweDZmLCAweDAwLCAweDAzLCAweDAwLCAweDBiLCAweDgxLCAweDQyLCAweDAyLCAweGQwLCAweDM4LCAweDFjLAorMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYiwgMHhlNywgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwKKzB4MDAsIDB4NDAsIDB4MTQsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTgsIDB4YjQsIDB4MTQsIDB4NGEsCisweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDgzLCAweDAwLCAweDEzLCAweDQ4LCAweGMwLCAweDU4LCAweDA3LCAweDAzLAorMHgzZiwgMHgwYiwgMHgxMiwgMHg0OCwgMHhjMCwgMHg1OCwgMHgwMiwgMHgwMywgMHgxMiwgMHgwYiwgMHgxMSwgMHg0OCwKKzB4YzAsIDB4NTgsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4MTAsIDB4NGMsIDB4ZTQsIDB4NTgsIDB4MDEsIDB4MjMsCisweDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDliLCAweDAwLCAweGNjLCAweDAwLCAweDAxLCAweDIxLAorMHg5OCwgMHg0MiwgMHgwMSwgMHhkMSwgMHgwOCwgMHgxYywgMHgwOSwgMHhlMCwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwKKzB4MTAsIDB4MWEsIDB4ZGEsIDB4MWIsIDB4ODAsIDB4MTgsIDB4MDAsIDB4ZTAsIDB4MTgsIDB4MWEsIDB4ODQsIDB4NDIsCisweGY0LCAweGQzLCAweDAwLCAweDIwLCAweDk4LCAweGJjLCAweDcwLCAweDQ3LCAweDU1LCAweDU1LCAweDU1LCAweDU1LAorMHgyMCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwKKzB4MTgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjQsIDB4MTMsIDB4MDQsIDB4MDAsIDB4ZDAsIDB4MDEsIDB4M2EsCisweDgwLCAweDAwLCAweDBiLCAweDFjLCAweDEzLCAweDQ5LCAweDBmLCAweDU4LCAweGMwLCAweDQ2LCAweDNiLCAweDYwLAorMHgwYiwgMHg1OCwgMHhjMCwgMHg0NiwgMHg1YSwgMHg2MCwgMHgwYSwgMHg1OCwgMHgwOCwgMHgzMiwgMHgxMCwgMHg0YiwKKzB4MWIsIDB4NTgsIDB4OWEsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MGYsIDB4NGEsIDB4MTIsIDB4NTgsIDB4MGYsIDB4NGIsCisweDFmLCAweDU4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweDliLCAweDAwLAorMHgxNywgMHgwMywgMHgzZiwgMHgwYiwgMHg5ZiwgMHg0MiwgMHgwNiwgMHhkMSwgMHgwYSwgMHg0OCwgMHhjMSwgMHg2OCwKKzB4MDEsIDB4MzEsIDB4YzEsIDB4NjAsIDB4MDEsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDgsIDB4NGIsCisweDFiLCAweDU4LCAweGMwLCAweDQ2LCAweDFhLCAweDYwLCAweDBhLCAweDUwLCAweDAwLCAweDIwLCAweGY2LCAweGU3LAorMHgwOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHgyMCwgMHgwNCwgMHgwMCwgMHg4MCwKKzB4MTgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MTAsIDB4MDQsIDB4MDAsIDB4ODAsCisweGZmLCAweDVmLCAweDJkLCAweGU5LCAweDQ4LCAweGZlLCAweGZmLCAweGViLCAweDAxLCAweGI2LCAweGEwLCAweGUzLAorMHgwMSwgMHhiMSwgMHg4YiwgMHhlMiwgMHgwMiwgMHg4YSwgMHhhMCwgMHhlMywgMHgwMSwgMHg3YSwgMHhhMCwgMHhlMywKKzB4MDEsIDB4YTksIDB4YTAsIDB4ZTMsIDB4MDEsIDB4NTYsIDB4YTAsIDB4ZTMsIDB4YzgsIDB4NjAsIDB4OWYsIDB4ZTUsCisweGM4LCAweDkwLCAweDlmLCAweGU1LCAweDE0LCAweDQwLCAweDliLCAweGU1LCAweDAwLCAweDAwLCAweDU0LCAweGUzLAorMHgyYywgMHgwMCwgMHgwMCwgMHgwYSwgMHgwMywgMHgwYSwgMHgxNCwgMHhlMywgMHgxMSwgMHgwMCwgMHgwMCwgMHgwYSwKKzB4MGMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4NTAsIDB4ZTMsIDB4MjEsIDB4MDAsIDB4MDAsIDB4MGEsCisweDAxLCAweDBhLCAweDE0LCAweGUzLCAweDA1LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LAorMHgwMSwgMHgwYSwgMHhjMCwgMHhlMywgMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwKKzB4MTQsIDB4NzAsIDB4ODUsIDB4ZTUsIDB4MDYsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MGEsIDB4MTQsIDB4ZTMsCisweDA0LCAweDAwLCAweDAwLCAweDBhLCAweDFjLCAweDAwLCAweDk2LCAweGU1LCAweDAyLCAweDBhLCAweGMwLCAweGUzLAorMHgxYywgMHgwMCwgMHg4NiwgMHhlNSwgMHgxYywgMHgwMCwgMHg4NSwgMHhlNSwgMHgxNCwgMHg4MCwgMHg4NSwgMHhlNSwKKzB4MDEsIDB4MDksIDB4MTQsIDB4ZTMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsCisweDAxLCAweDA5LCAweGMwLCAweGUzLCAweDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAorMHgxNCwgMHhhMCwgMHg4NSwgMHhlNSwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHg0MCwgMHgwMCwgMHgwMCwgMHgxYiwKKzB4MDEsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTQsIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDIsIDB4MGIsIDB4MTQsIDB4ZTMsCisweDY3LCAweDAwLCAweDAwLCAweDFiLCAweDAxLCAweDBiLCAweDE0LCAweGUzLCAweDIwLCAweDAwLCAweDAwLCAweDFiLAorMHgxOCwgMHgwMCwgMHg5OSwgMHhlNSwgMHgwMSwgMHgwMCwgMHg4MCwgMHhlMiwgMHgxOCwgMHgwMCwgMHg4OSwgMHhlNSwKKzB4ZDUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MWMsIDB4MDAsIDB4OTYsIDB4ZTUsIDB4MDEsIDB4MGEsIDB4YzAsIDB4ZTMsCisweDFjLCAweDAwLCAweDg2LCAweGU1LCAweDFjLCAweDAwLCAweDg1LCAweGU1LAorMHgxNCwgMHg3MCwgMHg4NSwgMHhlNSwgMHhlMSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmZiwgMHg1ZiwgMHhiZCwgMHhlOCwKKzB4MDQsIDB4ZjAsIDB4NWUsIDB4ZTIsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCisweDEwLCAweDEwLCAweDFmLCAweGU1LCAweDE0LCAweDMwLCAweDkxLCAweGU1LCAweDAwLCAweDIwLCAweGMzLCAweGUxLAorMHgxNCwgMHgyMCwgMHg4MSwgMHhlNSwgMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgwYywgMHgyMCwgMHg4MSwgMHhlNSwKKzB4MGIsIDB4MTIsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsIDB4MTgsIDB4MTAsIDB4OWYsIDB4ZTUsCisweGIwLCAweDI0LCAweGQxLCAweGUxLCAweDAxLCAweDIwLCAweDgyLCAweGUyLCAweGIwLCAweDI0LCAweGMxLCAweGUxLAorMHgzYywgMHgyMCwgMHg5MSwgMHhlNSwgMHgwMCwgMHgwMCwgMHg4MiwgMHhlMSwgMHgzYywgMHgwMCwgMHg4MSwgMHhlNSwKKzB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisweGZlLCAweGZmLCAweGZmLCAweGVhLCAweDAxLCAweDBiLCAweGEwLCAweGUzLCAweDAxLCAweDE2LCAweGEwLCAweGUzLAorMHgxNCwgMHgwMCwgMHg4MSwgMHhlNSwgMHgwMCwgMHgxYSwgMHg4MSwgMHhlMSwgMHgyNCwgMHgyMCwgMHg5MSwgMHhlNSwKKzB4NzAsIDB4MDAsIDB4MWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MjQsIDB4MjAsIDB4ODAsIDB4ZTUsCisweDI4LCAweDEwLCAweDkxLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDI4LCAweDEwLCAweDgwLCAweGU1LAorMHgyYywgMHgyMCwgMHg5MCwgMHhlNSwgMHgwMSwgMHgyMCwgMHg4MiwgMHhlMiwgMHgyYywgMHgyMCwgMHg4MCwgMHhlNSwKKzB4M2YsIDB4MDAsIDB4MDEsIDB4ZTIsIDB4M2YsIDB4MDAsIDB4NTAsIDB4ZTMsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4MTEsCisweDE4LCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDEwLCAweDkwLCAweGU1LCAweDAxLCAweDEwLCAweDgxLCAweGUyLAorMHgwMCwgMHgxMCwgMHg4MCwgMHhlNSwgMHgwMiwgMHgxOCwgMHhhMCwgMHhlMywgMHgwYiwgMHgwMiwgMHhhMCwgMHhlMywKKzB4MDAsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzAsIDB4MDQsIDB4MDAsIDB4ODAsCisweDAxLCAweDA2LCAweGEwLCAweGUzLCAweDAxLCAweDAxLCAweDgwLCAweGUyLCAweDAwLCAweDEwLCAweDkwLCAweGU1LAorMHgwMSwgMHgwOCwgMHgxMSwgMHhlMywgMHgwYiwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMiwgMHgxOSwgMHg4MSwgMHhlMiwKKzB4MDUsIDB4MDAsIDB4MDAsIDB4MWEsIDB4MDAsIDB4MjAsIDB4OTAsIDB4ZTUsIDB4NDIsIDB4MjgsIDB4YjAsIDB4ZTEsCisweDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDAwLCAweDkwLCAweGU1LCAweDAyLCAweDBjLCAweDEwLCAweGUzLAorMHgwMiwgMHgwMCwgMHgwMCwgMHgwYSwgMHgwNiwgMHgwNywgMHhhMCwgMHhlMywgMHg0YywgMHgxMSwgMHg4MCwgMHhlNSwKKzB4MDMsIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MGMsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQwLCAweDEwLCAweDgwLCAweGU1LCAweGZmLCAweGZmLCAweGZmLCAweGVhLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMSwgMHgwNiwgMHhhMCwgMHhlMywgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMiwKKzB4MDAsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MDgsIDB4MTEsIDB4ZTMsIDB4MGMsIDB4MTAsIDB4YTAsIDB4ZTMsCisweDAyLCAweDE5LCAweDgxLCAweGUyLCAweDA1LCAweDAwLCAweDAwLCAweDFhLCAweDAwLCAweDIwLCAweDkwLCAweGU1LAorMHg0MiwgMHgyOCwgMHhiMCwgMHhlMSwgMHgwNSwgMHgwMCwgMHgwMCwgMHgxYSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhlNSwKKzB4MDIsIDB4MGMsIDB4MTAsIDB4ZTMsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDYsIDB4MDcsIDB4YTAsIDB4ZTMsCisweDRjLCAweDExLCAweDgwLCAweGU1LCAweDAzLCAweDAwLCAweDAwLCAweGVhLCAweDRjLCAweDAwLCAweDFmLCAweGU1LAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg0MCwgMHgxMCwgMHg4MCwgMHhlNSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhlYSwKKzB4ZmUsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4MDIsIDB4MWIsIDB4YTAsIDB4ZTMsIDB4MDEsIDB4MDYsIDB4YTAsIDB4ZTMsCisweDE0LCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweDIxLCAweDFmLCAweGU1LAorMHgxNCwgMHgzMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgzMCwgMHg4MCwgMHhlNSwKKzB4MWMsIDB4MDAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODEsIDB4ZTUsCisweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDE0LCAweDEwLCAweDgyLCAweGU1LCAweDAxLCAweDA2LCAweGEwLCAweGUzLAorMHgxYywgMHgxMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgxMCwgMHg4MCwgMHhlNSwgMHgxYywgMHgxMCwgMHg5MiwgMHhlNSwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MTAsIDB4ODAsIDB4ZTUsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsCisweGMwLCAweDIxLCAweDFmLCAweGU1LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDFjLCAweDEwLCAweDgyLCAweGU1LAorMHgwMSwgMHgxNiwgMHhhMCwgMHhlMywgMHgxNCwgMHgwMCwgMHg4MiwgMHhlNSwgMHgwYywgMHgwMCwgMHg4MSwgMHhlNSwKKzB4MWMsIDB4MDAsIDB4OTIsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWMsIDB4MDAsIDB4ODEsIDB4ZTUsCisweDFlLCAweGZmLCAweDJmLCAweGUxLCAweDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAorMHgxNywgMHhmOCwgMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywKKzB4MDAsIDB4ZjAsIDB4OTIsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDgwLCAweGI1LCAweDBmLCAweDFjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDA5LCAweGY4LCAweDAwLCAweDI4LAorMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg4NCwgMHhmOCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjAsIDB4YjQsIDB4MDcsIDB4NjgsIDB4M2EsIDB4NzgsIDB4ZDIsIDB4MDcsCisweGQyLCAweDBmLCAweDAwLCAweDI0LCAweDAwLCAweDJhLCAweDAzLCAweGQwLCAweGZmLCAweDIyLCAweDAxLCAweDMyLAorMHg0MiwgMHg2MCwgMHgwMCwgMHhlMCwgMHg0NCwgMHg2MCwgMHgzYSwgMHg3YiwgMHg3YiwgMHg3YiwgMHgxYiwgMHgwMiwKKzB4MWEsIDB4NDMsIDB4ODEsIDB4MmEsIDB4MDgsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4NDIsIDB4NjgsCisweDFhLCAweDQzLCAweDQyLCAweDYwLCAweDA0LCAweDIyLCAweGJmLCAweDE4LCAweDgyLCAweDYwLCAweDAwLCAweGUwLAorMHg4NCwgMHg2MCwgMHgzYSwgMHg3YiwgMHg3YiwgMHg3YiwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgwOCwgMHgyYSwKKzB4MDYsIDB4ZDEsIDB4MDYsIDB4MjMsIDB4NDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjAsIDB4ODEsIDB4NjgsCisweDBlLCAweDMxLCAweDNjLCAweGUwLCAweGMxLCAweDIzLCAweGRiLCAweDAwLCAweDlhLCAweDQyLCAweDAzLCAweGQxLAorMHg0MSwgMHg2OCwgMHgyNCwgMHg0YiwgMHgxOSwgMHg0MywgMHgzZSwgMHhlMCwgMHgyMywgMHg0YiwgMHg5YSwgMHg0MiwKKzB4MDQsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDMsIDB4NDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MzYsIDB4ZTAsCisweDEzLCAweDAyLCAweDEyLCAweDBhLCAweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDFhLCAweDQzLCAweDEyLCAweDA0LAorMHgxMiwgMHgwYywgMHgyZSwgMHgzYSwgMHgxYywgMHg0YiwgMHg5YSwgMHg0MiwgMHgyZCwgMHhkOCwgMHgwMSwgMHgyNSwKKzB4NDIsIDB4NjgsIDB4MTUsIDB4NDMsIDB4NDUsIDB4NjAsIDB4YmEsIDB4N2IsIDB4ZmIsIDB4N2IsIDB4MWIsIDB4MDIsCisweDFhLCAweDQzLCAweDE4LCAweDRiLCAweDlhLCAweDQyLCAweDIyLCAweGQxLCAweGZiLCAweDFkLCAweDA5LCAweDMzLAorMHg0NCwgMHhjYiwgMHg5YiwgMHgwNywgMHhkYiwgMHgwZSwgMHhkYSwgMHg0MCwgMHg1YiwgMHg0MiwgMHgyMCwgMHgzMywKKzB4OWUsIDB4NDAsIDB4MTYsIDB4NDMsIDB4MDMsIDB4MmUsIDB4MTgsIDB4ZDEsIDB4MzksIDB4N2QsIDB4N2IsIDB4N2QsCisweDFiLCAweDAyLCAweDE5LCAweDQzLCAweDA4LCAweDI5LCAweDA3LCAweGQxLCAweDA0LCAweDIxLCAweDI5LCAweDQzLAorMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwgMHgxNiwgMHgzMSwgMHg4MSwgMHg2MCwgMHgwMSwgMHgyMSwgMHgwYSwgMHhlMCwKKzB4YzEsIDB4MjMsIDB4ZGIsIDB4MDAsIDB4OTksIDB4NDIsIDB4MDQsIDB4ZDEsIDB4MDEsIDB4MjEsIDB4ODksIDB4MDMsCisweDI5LCAweDQzLCAweDQxLCAweDYwLCAweDAwLCAweGUwLCAweDg0LCAweDYwLCAweDAwLCAweDIxLCAweDA4LCAweDFjLAorMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMiwgMHg0MCwgMHgwMCwgMHgwMCwgMHg4MSwgMHg4MCwgMHgwMCwgMHgwMCwKKzB4YWUsIDB4MDUsIDB4MDAsIDB4MDAsIDB4YWEsIDB4YWEsIDB4MDAsIDB4MDAsIDB4ODAsIDB4YjQsIDB4NDIsIDB4NjgsCisweGQxLCAweDA4LCAweDNmLCAweGQzLCAweDAxLCAweDY4LCAweDgzLCAweDY4LCAweDU5LCAweDE4LCAweDAyLCAweDM5LAorMHg4ZiwgMHg3OCwgMHgzZiwgMHgwNywgMHgzZiwgMHgwZiwgMHgwNSwgMHgyZiwgMHgwMywgMHhkMSwgMHhkYSwgMHgxZCwKKzB4MGQsIDB4MzIsIDB4YzIsIDB4NjAsIDB4MDUsIDB4ZTAsIDB4YmYsIDB4MDAsIDB4ZGIsIDB4MTksIDB4YzMsIDB4NjAsCisweDA4LCAweDIzLCAweDFhLCAweDQzLCAweDQyLCAweDYwLCAweDhhLCAweDc4LCAweDEyLCAweDA3LCAweDEyLCAweDBmLAorMHg5MiwgMHgwMCwgMHgwMiwgMHg2MSwgMHgwYSwgMHg3OSwgMHg0YiwgMHg3OSwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywKKzB4MTMsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsCisweDEyLCAweDBjLCAweDQyLCAweDYxLCAweGNhLCAweDdhLCAweDA2LCAweDJhLCAweDAzLCAweGQxLCAweDEwLCAweDIzLAorMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHgxMCwgMHhlMCwgMHgxMSwgMHgyYSwgMHgwMywgMHhkMSwgMHgyMCwgMHgyMywKKzB4NDIsIDB4NjgsIDB4MWEsIDB4NDMsIDB4MGEsIDB4ZTAsIDB4MzMsIDB4MmEsIDB4MDMsIDB4ZDEsIDB4NDAsIDB4MjMsCisweDQyLCAweDY4LCAweDFhLCAweDQzLCAweDA0LCAweGUwLCAweDMyLCAweDJhLCAweDAzLCAweGQxLCAweDgwLCAweDIzLAorMHg0MiwgMHg2OCwgMHgxYSwgMHg0MywgMHg0MiwgMHg2MCwgMHhjOSwgMHg3YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg3NiwKKzB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MGEsIDB4NzgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjAsIDB4NGIsIDB4NzgsCisweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDAyLCAweDYwLCAweDhiLCAweDc4LCAweDFiLCAweDA0LCAweDFhLCAweDQzLAorMHgwMiwgMHg2MCwgMHhjOSwgMHg3OCwgMHgwOSwgMHgwNiwgMHgxMSwgMHg0MywgMHgwMSwgMHg2MCwgMHg3MCwgMHg0NywKKzB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NDgsIDB4NjgsIDB4ODAsIDB4MDksIDB4MjYsIDB4ZDMsIDB4YjgsIDB4NmEsCisweGM5LCAweDY4LCAweDQwLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAyLCAweDMwLCAweDE4LCAweDQzLAorMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMSwgMHgyMywgMHg5YiwgMHgwMiwgMHg5OCwgMHg0MiwKKzB4MTgsIDB4ZDEsIDB4NzgsIDB4NmEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsCisweDQ4LCAweDYyLCAweDM4LCAweDZiLCAweDAyLCAweGYwLCAweGRhLCAweGY4LCAweDM4LCAweDFjLCAweDAxLCAweGYwLAorMHg5NSwgMHhmZCwgMHgwMSwgMHgyMCwgMHgwNywgMHg0OSwgMHhjMCwgMHg0NiwgMHhjOCwgMHg3MywgMHgwNywgMHg0OSwKKzB4NGEsIDB4NmMsIDB4MTIsIDB4MTgsIDB4NGEsIDB4NjQsIDB4MDYsIDB4NDksIDB4OGEsIDB4NmQsIDB4MTIsIDB4MTgsCisweDhhLCAweDY1LCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweGZhLCAweGU3LAorMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwKKzB4ODEsIDB4MDcsIDB4MTksIDB4ZDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweDAxLCAweDFkLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDAyLCAweDAyLAorMHgxMiwgMHgwZSwgMHgxMiwgMHgwNiwgMHgwMCwgMHgwYSwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgMHgxOCwgMHg0MCwKKzB4MTAsIDB4NDMsIDB4MGEsIDB4MGEsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MTAsIDB4NDMsIDB4MDksIDB4MDIsCisweDFiLCAweDBhLCAweDE5LCAweDQwLCAweDA4LCAweDQzLCAweDcwLCAweDQ3LCAweDAxLCAweDIzLCAweDliLCAweDA3LAorMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMSwgMHgwNiwgMHgwMiwgMHgwMiwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwKKzB4MWEsIDB4NDAsIDB4MTEsIDB4NDMsIDB4MDIsIDB4MGEsIDB4MWIsIDB4MGEsIDB4MWEsIDB4NDAsIDB4MTEsIDB4NDMsCisweDAwLCAweDBlLCAweDA4LCAweDQzLCAweGVkLCAweGU3LCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDA0LCAweDIzLAorMHg4MSwgMHg2YiwgMHgxOSwgMHg0MCwgMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHg0NiwgMHhkMCwgMHhjNywgMHgxZCwKKzB4MzksIDB4MzcsIDB4MzksIDB4N2IsIDB4MzMsIDB4MjksIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjksIDB4M2YsIDB4ZDEsCisweDAxLCAweDZiLCAweGMwLCAweDQ2LCAweDRhLCAweDY1LCAweGM0LCAweDFkLCAweDJkLCAweDM0LCAweGNkLCAweDFkLAorMHgyZCwgMHgzNSwgMHgwMCwgMHgyMiwgMHg5MywgMHgwMCwgMHhlNiwgMHg1OCwgMHhjMCwgMHg0NiwgMHhlZSwgMHg1MCwKKzB4MDEsIDB4MzIsIDB4MDcsIDB4MmEsIDB4ZjgsIDB4ZDMsIDB4ODIsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NGEsIDB4NjMsCisweDgyLCAweDZhLCAweGMwLCAweDQ2LCAweDhhLCAweDYyLCAweDdhLCAweDhiLCAweGNiLCAweDFkLCAweDM5LCAweDMzLAorMHg1YSwgMHg4MywgMHg0MCwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgMHgxMiwgMHg0OCwgMHgwMSwgMHgyNywKKzB4NDIsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTAsIDB4ZDEsIDB4YzIsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MTMsIDB4ZDEsCisweDQyLCAweDY5LCAweDAwLCAweDJhLCAweDBkLCAweGQxLCAweDAxLCAweDYxLCAweGMxLCAweDYwLCAweDAxLCAweDZhLAorMHgwMiwgMHgyOSwgMHgwMiwgMHhkMywgMHgyMCwgMHgzMCwgMHgwNywgMHg3MSwgMHgwYywgMHhlMCwgMHgwMCwgMHhmMCwKKzB4MTMsIDB4ZjgsIDB4MDksIDB4ZTAsIDB4YzIsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4NjEsCisweGMxLCAweDYwLCAweDAzLCAweGUwLCAweDAyLCAweDY5LCAweGMwLCAweDQ2LCAweDUxLCAweDY1LCAweDAxLCAweDYxLAorMHgzOCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgxMCwgMHgxYywgMHhmYSwgMHhlNywKKzB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MWUsIDB4NDksIDB4MDAsIDB4MjIsIDB4Y2IsIDB4NjgsCisweDAwLCAweDJiLCAweDM0LCAweGQwLCAweGM4LCAweDFkLCAweGY5LCAweDMwLCAweDgzLCAweDYyLCAweGNiLCAweDY4LAorMHg5YiwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjMywgMHg2MiwgMHhjZiwgMHg2OSwgMHg3YiwgMHgwMCwgMHhkZiwgMHgxOSwKKzB4N2YsIDB4MDIsIDB4MTcsIDB4NGIsIDB4ZmYsIDB4MTgsIDB4ZmYsIDB4MzcsIDB4NjUsIDB4MzcsIDB4ODMsIDB4NjMsCisweDA3LCAweDYzLCAweGNiLCAweDFkLCAweGZmLCAweDMzLCAweDVhLCAweDMzLCAweDFhLCAweDcyLCAweGNiLCAweDY5LAorMHgwMCwgMHgyYiwgMHgwMSwgMHhkMCwgMHhjYSwgMHg2MSwgMHgwMSwgMHhlMCwgMHgwMSwgMHgyMywgMHhjYiwgMHg2MSwKKzB4MGYsIDB4MWMsIDB4YzksIDB4NjgsIDB4NDksIDB4NmEsIDB4MDksIDB4ODksIDB4MDEsIDB4MzEsIDB4NDEsIDB4NjMsCisweGY4LCAweDFkLCAweGZmLCAweDMwLCAweDNhLCAweDMwLCAweDQyLCAweDYwLCAweDAyLCAweDgyLCAweDgyLCAweDYwLAorMHhjMiwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjZSwgMHhmYSwgMHgzOCwgMHg2YSwgMHgwMSwgMHgzMCwKKzB4MzgsIDB4NjIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGEsIDB4ZjgsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDEwLCAweDFjLCAweGZhLCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAorMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywgMHhmOSwgMHgxZCwgMHhmOSwgMHgzMSwKKzB4ODgsIDB4NmEsIDB4YzIsIDB4MWQsIDB4MmQsIDB4MzIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzIsCisweDFhLCAweDQzLCAweGM4LCAweDZhLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDgwLCAweDE4LAorMHg4MiwgMHg3OSwgMHhjMywgMHg3OSwgMHgxYiwgMHgwMiwgMHgxYSwgMHg0MywgMHgxMywgMHgwMiwgMHgxMiwgMHgwYSwKKzB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4MWEsIDB4NDMsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDIsIDB4MzgsCisweDkyLCAweDA0LCAweDkyLCAweDBjLCAweDAwLCAweDI2LCAweDI1LCAweDRkLAorMHhlYywgMHgxZCwgMHhmZiwgMHgzNCwgMHgzYSwgMHgzNCwgMHgwMCwgMHgyYSwgMHgwNCwgMHhkMCwgMHgyMCwgMHg4YSwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTgsIDB4NDMsIDB4MmIsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweGMyLCAweDFkLCAweDBkLCAweDMyLCAweDFhLCAweDQzLCAweDEyLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDMwLAorMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgxMCwgMHg0MywgMHgwMywgMHgxYywKKzB4ZjgsIDB4MWQsIDB4ZmYsIDB4MzAsIDB4NGEsIDB4MzAsIDB4ODIsIDB4NzgsIDB4YzgsIDB4NmIsIDB4MTksIDB4MWMsCisweDAyLCAweGYwLCAweDAyLCAweGY4LCAweDAwLCAweDI4LCAweDA0LCAweGRhLCAweDIwLCAweDhhLCAweGZmLCAweDIzLAorMHgwMSwgMHgzMywgMHgxOCwgMHg0MywgMHgwZSwgMHhlMCwgMHhmOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwKKzB4MDgsIDB4NjAsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWMsIDB4ZjgsCisweDAwLCAweDI4LCAweDE0LCAweGQxLCAweDIwLCAweDhhLCAweDAxLCAweDIzLCAweDViLCAweDAyLCAweDE4LCAweDQzLAorMHgyMCwgMHg4MiwgMHgyMSwgMHg4YSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhMiwgMHhmYiwgMHhlOCwgMHg2OCwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTQsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsCisweGU4LCAweDYwLCAweDMwLCAweDFjLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLAorMHhmYSwgMHhlNywgMHgwMCwgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgwNywgMHgxYywKKzB4ZmMsIDB4MWQsIDB4ZjksIDB4MzQsIDB4YTAsIDB4NmIsIDB4YTYsIDB4NmEsIDB4YzUsIDB4MWQsIDB4MGQsIDB4MzUsCisweDM4LCAweDQ4LCAweGMwLCAweDZhLCAweDRiLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDAxLCAweDQyLCAweDE4LAorMHgwMSwgMHgyMCwgMHg4MCwgMHgwNywgMHgxMCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKKzB4MDAsIDB4OTAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDAsIDB4MWQsIDB4MDUsIDB4MzAsIDB4MTgsIDB4NDMsCisweDAwLCAweDY4LCAweDM4LCAweDFjLCAweDI5LCAweDFjLCAweDAwLCAweGYwLCAweGMyLCAweGZhLCAweGE4LCAweDg4LAorMHg0MSwgMHgwNywgMHgwMSwgMHhkMCwgMHgwMCwgMHgyMCwgMHg1MSwgMHhlMCwgMHgyOSwgMHg4OSwgMHgwOSwgMHgxOCwKKzB4NjAsIDB4NmIsIDB4ODEsIDB4NDIsIDB4ZjgsIDB4ZDgsIDB4NjksIDB4ODksIDB4ZWEsIDB4ODgsIDB4ODksIDB4MTgsCisweDgxLCAweDQyLCAweGYzLCAweGQ4LCAweDAwLCAweDk4LCAweDAxLCAweDI4LCAweDI1LCAweGQxLCAweGUwLCAweDZhLAorMHhmMSwgMHg2YiwgMHg0MCwgMHgxOCwgMHg3MSwgMHg2YywgMHhmYSwgMHgxZCwgMHhjZCwgMHgzMiwgMHgwMSwgMHhmMCwKKzB4MzMsIDB4ZjksIDB4ZmEsIDB4MWQsIDB4ZmYsIDB4MzIsIDB4M2EsIDB4MzIsIDB4ZTAsIDB4NmEsIDB4NTEsIDB4NjksCisweDQwLCAweDE4LCAweGMzLCAweDFkLCAweDAzLCAweDMzLCAweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDVlLCAweDU4LAorMHhjOSwgMHgxOSwgMHhmZiwgMHgzMSwgMHgwMSwgMHgzMSwgMHg0ZSwgMHg2MSwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwKKzB4ZjYsIDB4ZDMsIDB4ZTAsIDB4NmEsIDB4NTEsIDB4NjksIDB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsCisweDAwLCAweDIwLCAweDAwLCAweDIyLCAweDQzLCAweDAwLCAweGNhLCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LAorMHhmYSwgMHhkMywgMHgyOSwgMHgxYywgMHgxMSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHhhZSwgMHhmYiwKKzB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NjAsIDB4NmIsIDB4MDIsIDB4NDMsIDB4MDEsIDB4MjAsIDB4MjEsIDB4NmIsCisweGZmLCAweGY3LCAweGE2LCAweGZiLCAweDAxLCAweDIyLCAweDUyLCAweDA0LCAweDYwLCAweDZiLCAweDAyLCAweDQzLAorMHgwMCwgMHgyMCwgMHhlMSwgMHg2YSwgMHhmZiwgMHhmNywgMHg5ZSwgMHhmYiwgMHhhMSwgMHg2YiwgMHgwOCwgMHg0YSwKKzB4MDEsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4OTksIDB4ZmIsIDB4MDMsIDB4MjAsIDB4MDYsIDB4NDksIDB4YzAsIDB4NDYsCisweDQ4LCAweDYyLCAweDAxLCAweDIwLCAweGY4LCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg1NCwgMHgwMCwgMHgwMywgMHgwMCwgMHgxNCwgMHgwMCwgMHgwZiwgMHgwMCwKKzB4NmMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4OGQsIDB4YjAsIDB4MDAsIDB4MjAsIDB4YjUsIDB4NGEsCisweGQ1LCAweDFkLCAweGY5LCAweDM1LCAweDY4LCAweDYyLCAweDAxLCAweDIwLCAweDAwLCAweDA1LCAweGIzLCAweDQ5LAorMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhhOCwgMHg2YSwgMHhjNCwgMHgxZCwgMHgyZCwgMHgzNCwgMHhiMSwgMHg0OCwKKzB4YzAsIDB4NmEsIDB4ZDcsIDB4MWQsIDB4ZmYsIDB4MzcsIDB4M2EsIDB4MzcsIDB4MzksIDB4NjgsIDB4NGIsIDB4MDAsCisweDU5LCAweDE4LCAweDQ5LCAweDAxLCAweDQwLCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGMxLCAweDFkLAorMHgwNSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MDksIDB4OTAsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MGEsCisweDBhLCAweDkwLCAweDBhLCAweDk4LCAweGE0LCAweDRlLCAweDAxLCAweDI4LCAweDU5LCAweGQxLCAweDI4LCAweDZiLAorMHhhMiwgMHg2OCwgMHg4MCwgMHgxOCwgMHhhMiwgMHg0YSwgMHgyMSwgMHg2OSwKKzB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDEsIDB4ZjAsIDB4MjYsIDB4ZjksIDB4MjgsIDB4NmIsIDB4NzksIDB4NjksCisweDQwLCAweDE4LCAweGMxLCAweDFkLCAweDA1LCAweDMxLCAweDAwLCAweDIwLCAweDgyLCAweDAwLCAweDk4LCAweDRiLAorMHhkMywgMHgxOCwgMHhmZiwgMHgzMywgMHgwMSwgMHgzMywgMHg1YiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4YiwgMHg1MCwKKzB4MDEsIDB4MzAsIDB4MDQsIDB4MjgsIDB4ZjQsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MzEsIDB4MWMsIDB4ODIsIDB4MDAsCisweDU2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDA0LCAweGFlLAorMHhiMywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMywgMHgyOCwgMHhmNCwgMHhkMywgMHgwMCwgMHgyMCwgMHgwOCwgMHg5MCwKKzB4OTAsIDB4NDksIDB4NDIsIDB4MDAsIDB4OGIsIDB4NWEsIDB4YjIsIDB4NWEsIDB4OTMsIDB4NDIsIDB4MTMsIDB4ZDAsCisweDhlLCAweDQ4LCAweGMxLCAweDg5LCAweDAxLCAweDMxLCAweGMxLCAweDgxLCAweGI4LCAweDY4LCAweDAwLCAweDI4LAorMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHg3MSwgMHhlMCwgMHgzOCwgMHg4YSwKKzB4NDAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NmQsIDB4ZTAsIDB4MDAsIDB4ZjAsIDB4MTEsIDB4ZjksIDB4MDEsIDB4ZjAsCisweDY3LCAweGZmLCAweGY1LCAweGUwLCAweDAxLCAweDMwLCAweDA2LCAweDI4LCAweGUzLCAweGQzLCAweDA4LCAweDk4LAorMHgwMCwgMHgyOCwgMHgwYywgMHhkMSwgMHhiOCwgMHg2OCwgMHg0MSwgMHgxYywgMHhiOSwgMHg2MCwgMHgwMCwgMHgyOCwKKzB4MDMsIDB4ZDEsIDB4MzgsIDB4OGEsIDB4MDEsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4OGEsCisweDA0LCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgyLCAweDc4LCAweDY4LCAweDAxLCAweDMwLCAweDc4LCAweDYwLAorMHg2MiwgMHhlMCwgMHgwYSwgMHg5OCwgMHgwMiwgMHgyOCwgMHg1ZiwgMHhkMSwgMHgwOSwgMHg5OCwgMHg0MCwgMHgwYywKKzB4NzMsIDB4ZDMsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTAsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsCisweDAwLCAweDY4LCAweGUxLCAweDFkLCAweDBkLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDQwLCAweDE4LAorMHgwYywgMHgzOCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwMCwgMHgyMSwgMHg4YSwgMHgwMCwgMHg2YiwgMHg0YiwKKzB4ZDYsIDB4MTgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MDQsIDB4YWUsCisweGIzLCAweDUwLCAweDAxLCAweDMxLCAweDAzLCAweDI5LCAweGYzLCAweGQzLCAweDAwLCAweDIxLCAweDgzLCAweDFlLAorMHgwYywgMHg5MywgMHg2OCwgMHg0YSwgMHgxNiwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwYiwgMHg5NiwgMHg4YSwgMHgwMCwKKzB4MGMsIDB4OWIsIDB4OWIsIDB4MTgsIDB4MGIsIDB4OWUsIDB4OWUsIDB4MTksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDZlLCAweDQ2LCAweGIzLCAweDUwLCAweDAxLCAweDMxLCAweDA0LCAweDI5LAorMHhmMSwgMHhkMywgMHg2OSwgMHg0NiwgMHg4YiwgMHgxYywgMHgwNywgMHg5MywgMHgwMCwgMHgyMSwgMHgwOCwgMHg5MSwKKzB4MDQsIDB4YWUsIDB4NGEsIDB4MDAsIDB4MDcsIDB4OWIsIDB4OWIsIDB4NWEsIDB4YjIsIDB4NWEsIDB4OTMsIDB4NDIsCisweDExLCAweGQwLCAweDU4LCAweDQ4LCAweGMxLCAweDg5LCAweDAxLCAweDMxLCAweGMxLCAweDgxLCAweGY4LCAweDY4LAorMHg0MSwgMHgxYywgMHhmOSwgMHg2MCwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwgMHgzOCwgMHg4YSwgMHgyMCwgMHgyMywKKzB4MTgsIDB4NDMsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4OGEsIDB4ODAsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4ODIsCisweDhmLCAweGU3LCAweDAxLCAweDMxLCAweDA2LCAweDI5LCAweGU0LCAweGQzLCAweDA4LCAweDk5LCAweDAwLCAweDI5LAorMHgwZCwgMHhkMSwgMHhmOSwgMHg2OCwgMHg0YSwgMHgxYywgMHhmYSwgMHg2MCwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMSwKKzB4MzksIDB4OGEsIDB4MDIsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDMsIDB4ZTAsIDB4MGMsIDB4ZTAsIDB4MzksIDB4OGEsCisweDA4LCAweDIzLCAweDE5LCAweDQzLCAweDM5LCAweDgyLCAweDI5LCAweDZiLCAweDA4LCAweDE4LCAweDAxLCAweDIzLAorMHg5YiwgMHgwNywgMHgwMSwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg3NiwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTAsIDB4MWQsIDB4MTEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCisweDAxLCAweDA2LCAweDA5LCAweDBlLCAweDAwLCAweGUwLCAweDE5LCAweGUwLCAweDM1LCAweDQ4LCAweDJhLCAweDZiLAorMHhjMCwgMHg0NiwgMHhlYSwgMHg2MiwgMHgwNCwgMHgyOSwgMHg0ZiwgMHhkMSwgMHgwMSwgMHgyMSwgMHhjNiwgMHgxZCwKKzB4ZmYsIDB4MzYsIDB4NWEsIDB4MzYsIDB4MzEsIDB4NzIsIDB4MGEsIDB4OTksIDB4MDIsIDB4MjksIDB4MWUsIDB4ZDEsCisweDA5LCAweDk5LCAweDA5LCAweDBlLCAweDQ5LCAweDA2LCAweDFhLCAweGQxLCAweGUxLCAweDFkLCAweDA1LCAweDMxLAorMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHgzOSwgMHgxYSwgMHhlMCwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTAsIDB4MWQsIDB4MDEsIDB4MzAsIDB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsCisweGUxLCAweDFkLCAweDBkLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDQwLCAweDE4LCAweDAwLCAweDA0LAorMHgwMCwgMHgwYywgMHhmOSwgMHg2OCwgMHg0YSwgMHgxYywgMHhmYSwgMHg2MCwgMHgwMCwgMHgyOSwgMHhiYywgMHhkMSwKKzB4YjYsIDB4ZTcsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZTEsIDB4MWQsCisweDA1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweGExLCAweDYwLAorMHhlOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHg4OCwgMHhmYywKKzB4MjAsIDB4N2UsIDB4MzMsIDB4MjgsIDB4MDEsIDB4ZDAsIDB4MzIsIDB4MjgsIDB4MTEsIDB4ZDEsIDB4MDEsIDB4MjEsCisweDE0LCAweDRjLCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweGI5LCAweDYwLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAorMHg4NSwgMHhmOCwgMHgyOCwgMHg2YiwgMHhhOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHgyMCwgMHgxYywKKzB4ZmYsIDB4ZjcsIDB4YzAsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4MTEsIDB4ZDEsIDB4MGUsIDB4ZTAsIDB4MDAsIDB4MjAsCisweDMwLCAweDcyLCAweDExLCAweGUwLCAweDMzLCAweDI5LCAweDAxLCAweGQwLCAweDMyLCAweDI5LCAweDBkLCAweGQxLAorMHgwNywgMHgxYywgMHgwMCwgMHhmMCwgMHg3MSwgMHhmOCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhiMCwgMHhmZCwKKzB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4ZjAsIDB4NzAsIDB4ZmUsIDB4MGQsIDB4YjAsIDB4ZjAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGYwLCAweDEyLCAweGY4LCAweGY2LCAweGU3LCAweDAwLCAweDAwLAorMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKKzB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4NDAsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ODIsIDB4MDcsIDB4MDAsIDB4ODAsCisweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDZjLCAweDA3LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDI1LCAweDQ4LAorMHg0MSwgMHg2OCwgMHgwMSwgMHgzMSwgMHg0MSwgMHg2MCwgMHgyNCwgMHg0ZiwgMHhmOSwgMHgxZCwgMHhmOSwgMHgzMSwKKzB4MDAsIDB4MjQsIDB4ODgsIDB4NmEsIDB4ZmEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTQsIDB4NjEsIDB4MDQsIDB4MjIsCisweGZiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDYwLCAweDEwLCAweDIyLCAweGZiLCAweDY4LCAweGMwLCAweDQ2LAorMHg5YSwgMHg2MSwgMHhmYSwgMHgxZCwgMHhmZiwgMHgzMiwgMHg1YSwgMHgzMiwgMHgxMywgMHg3YSwgMHgxYiwgMHg0YSwKKzB4MDAsIDB4MmIsIDB4MGIsIDB4ZDAsIDB4MTUsIDB4OGEsIDB4MmUsIDB4MGEsIDB4MzYsIDB4MDIsIDB4MzMsIDB4MjMsCisweDJiLCAweDQwLCAweDliLCAweDAwLCAweDFlLCAweDQzLCAweGNjLCAweDIzLCAweDJiLCAweDQwLCAweDliLCAweDA4LAorMHgzMywgMHg0MywgMHgxMywgMHg4MiwgMHgxMiwgMHg4YSwgMHhmYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MywKKzB4NGEsIDB4NmIsIDB4ZmIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZGEsIDB4ODEsIDB4MGEsIDB4NmIsIDB4YzAsIDB4NDYsCisweDgyLCAweDYyLCAweGM0LCAweDYyLCAweGMzLCAweDFkLCAweDM5LCAweDMzLCAweDRhLCAweDZiLCAweGMwLCAweDQ2LAorMHg1YSwgMHg4MywgMHgwNCwgMHgyMywgMHgwMiwgMHg2OCwgMHgxYSwgMHg0MywgMHgwMiwgMHg2MCwgMHg4OCwgMHg2YSwKKzB4MDEsIDB4ZjAsIDB4MzIsIDB4ZmEsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTQsIDB4MzAsCisweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweGY4LCAweDYwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKKzB4YWMsIDB4MDcsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4YzEsIDB4MWQsIDB4ZjksIDB4MzEsIDB4OGEsIDB4NmEsCisweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQxLCAweDFkLCAweDQ1LCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAorMHgwYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMSwgMHgyNywgMHhjMSwgMHgxZCwgMHhmZiwgMHgzMSwgMHg0YSwgMHgzMSwKKzB4MzMsIDB4MmIsIDB4MDUsIDB4ZDEsIDB4OGIsIDB4NzAsIDB4MDEsIDB4MWMsIDB4MTAsIDB4MWMsIDB4MDAsIDB4ZjAsCisweDBmLCAweGY4LCAweDA2LCAweGUwLCAweDMyLCAweDJiLCAweDA4LCAweGQxLCAweDhiLCAweDcwLCAweDAxLCAweDFjLAorMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzYywgMHhmOCwgMHgzOCwgMHgxYywgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ODgsIDB4NzAsIDB4ZjksIDB4ZTcsIDB4OTAsIDB4YjQsIDB4Y2EsIDB4MWQsCisweGY5LCAweDMyLCAweDMzLCAweDI3LCAweGNjLCAweDFkLCAweGZmLCAweDM0LCAweDRhLCAweDM0LCAweGQzLCAweDZhLAorMHhjMCwgMHg0NiwgMHhhNywgMHg3MCwgMHhmZiwgMHgzMSwgMHg0MSwgMHgzMSwgMHgwNywgMHg2YywgMHhjMCwgMHg0NiwKKzB4NGYsIDB4NjEsIDB4ZmIsIDB4MTgsIDB4MzksIDB4MWMsIDB4OWYsIDB4MWUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweGZjLCAweDFjLCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDFiLCAweDBlLCAweDliLCAweDAwLAorMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywgMHhjOSwgMHgxOCwgMHgwOCwgMHgzMSwgMHgwMSwgMHg2NCwgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4YjksIDB4MWMsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MzQsIDB4MzAsIDB4MDEsIDB4NzYsCisweGY4LCAweDFkLCAweDAxLCAweDMwLCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAwLCAweDA0LCAweGI5LCAweDFkLAorMHgxOSwgMHg0MywgMHhkMCwgMHg2MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwOCwgMHg0MywKKzB4ZDAsIDB4NjMsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4YjAsIDB4YjUsIDB4Y2EsIDB4MWQsIDB4ZjksIDB4MzIsCisweGM1LCAweDFkLCAweDJkLCAweDM1LCAweDMyLCAweDIwLCAweGNmLCAweDFkLAorMHhmZiwgMHgzNywgMHg0YSwgMHgzNywgMHhkMywgMHg2YSwgMHhjMCwgMHg0NiwgMHhiOCwgMHg3MCwgMHhjYywgMHgxZCwKKzB4ZmYsIDB4MzQsIDB4M2EsIDB4MzQsIDB4ZTgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjEsIDB4MTAsIDB4MzAsCisweGU4LCAweDYwLCAweDYwLCAweDY5LCAweGMwLCAweDE4LCAweDg3LCAweDFlLCAweDAxLCAweDIzLCAweDliLCAweDA3LAorMHgzOCwgMHgxZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHhiOSwgMHgxYywgMHgxOSwgMHg0MywKKzB4ZDAsIDB4NjMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4NDMsIDB4ZDAsIDB4NjMsCisweGY4LCAweDFkLCAweDAzLCAweDMwLCAweGZmLCAweGY3LCAweGZjLCAweGZiLCAweDIwLCAweDYyLCAweGY4LCAweDFkLAorMHgwNywgMHgzMCwgMHhmZiwgMHhmNywgMHhmNywgMHhmYiwgMHg2MCwgMHg2MiwgMHgwMCwgMHgyMCwgMHgyOCwgMHg3NiwKKzB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjcsIDB4YjUsIDB4ODEsIDB4YjAsIDB4MDEsIDB4OTgsCisweGM3LCAweDFkLCAweGY5LCAweDM3LCAweGI4LCAweDZhLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLAorMHgwNSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYywgMHg2OCwgMHhmZiwgMHgyMywgMHhmZSwgMHgzMywgMHgyMywgMHg0MCwKKzB4N2YsIDB4NmIsIDB4M2YsIDB4MDQsIDB4M2IsIDB4NDMsIDB4MGIsIDB4NjAsIDB4MzQsIDB4MzAsIDB4MWMsIDB4MWMsCisweDgwLCAweDIzLCAweDIzLCAweDQwLCAweDAxLCAweDlmLCAweGZmLCAweDM3LCAweDQxLCAweDM3LCAweDAwLCAweDJiLAorMHgzYywgMHhkMCwgMHgwYywgMHgyMywgMHgwMCwgMHg5MywgMHgwMCwgMHgyMywgMHg5ZCwgMHgwMCwgMHhhZSwgMHgxOCwKKzB4MzYsIDB4NjksIDB4NmQsIDB4MTgsIDB4NmUsIDB4NjEsIDB4MDEsIDB4MzMsIDB4MDUsIDB4MmIsIDB4ZjcsIDB4ZDMsCisweDAwLCAweDIzLCAweDlkLCAweDAwLCAweGFlLCAweDE4LCAweDc2LCAweDZhLCAweDZkLCAweDE4LCAweGFlLCAweDYyLAorMHgwMSwgMHgzMywgMHgwNSwgMHgyYiwgMHhmNywgMHhkMywgMHgwMSwgMHg5YiwgMHhmZiwgMHgzMywgMHg1MSwgMHgzMywKKzB4OWIsIDB4NzgsIDB4MzMsIDB4MmIsIDB4MGUsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzUsIDB4MWQsCisweDAxLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDRiLCAweDgxLCAweDAxLCAweDIzLAorMHg5YiwgMHgwNywgMHhjNSwgMHgxZCwgMHgwZCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgxNiwgMHhlMCwKKzB4N2IsIDB4NjksIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4YzUsIDB4MWQsCisweDBkLCAweDM1LCAweDJiLCAweDQzLCAweDFiLCAweDY4LCAweDdkLCAweDY5LCAweDVkLCAweDFiLCAweDAxLCAweDIzLAorMHg5YiwgMHgwNywgMHhjNiwgMHgxZCwgMHgwMSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHhlYiwgMHgxOCwKKzB4MGMsIDB4M2IsIDB4MDIsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MDAsIDB4OTMsIDB4NGIsIDB4ODEsIDB4Y2IsIDB4ODAsCisweDYzLCAweDA5LCAweDQ5LCAweGQzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGM0LCAweDFkLCAweDA1LCAweDM0LAorMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg4MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKKzB4YzQsIDB4MWQsIDB4MGQsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MGMsIDB4ODksIDB4MWIsIDB4MWIsCisweDAwLCAweDljLCAweDFjLCAweDFiLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDA4LCAweDMwLCAweDE4LCAweDQzLAorMHgwMCwgMHg2OCwgMHgyMCwgMHgxOCwgMHg4OCwgMHg4MCwgMHgzOCwgMHg2YSwgMHgwNCwgMHgwZSwgMHhmZiwgMHgyMywKKzB4MWIsIDB4MDQsIDB4MDMsIDB4NDAsIDB4MWIsIDB4MGEsIDB4MWMsIDB4NDMsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsCisweDAzLCAweDQwLCAweDFiLCAweDAyLCAweDIzLCAweDQzLCAweDAwLCAweDA2LCAweDE4LCAweDQzLCAweGM4LCAweDYwLAorMHg3OCwgMHg2YSwgMHgwNywgMHgwZSwgMHhmZiwgMHgyMywgMHgxYiwgMHgwNCwgMHgwMywgMHg0MCwgMHgxYiwgMHgwYSwKKzB4MWYsIDB4NDMsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MDMsIDB4NDAsIDB4MWIsIDB4MDIsIDB4M2IsIDB4NDMsCisweDAwLCAweDA2LCAweDE4LCAweDQzLCAweDA4LCAweDYxLCAweGQwLCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYzLAorMHg5MCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwgMHg1MCwgMHg2YywgMHhjMCwgMHg0NiwgMHg0OCwgMHg2NCwKKzB4MTAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjQsIDB4ZDAsIDB4NmMsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjQsCisweDkwLCAweDZjLCAweGMwLCAweDQ2LCAweDA4LCAweDY1LCAweDAyLCAweGUwLCAweDAwLCAweDIzLCAweDBiLCAweDgxLAorMHg4YiwgMHg4MCwgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKKzB4MGYsIDB4NGEsIDB4OTMsIDB4ODksIDB4MDEsIDB4MzMsIDB4OTMsIDB4ODEsIDB4YzIsIDB4MWQsIDB4ZjksIDB4MzIsCisweDA0LCAweDIzLCAweDkwLCAweDZhLCAweGMwLCAweDQ2LCAweGMzLCAweDYwLCAweDEwLCAweDIzLCAweDgzLCAweDYxLAorMHhjYiwgMHgwYSwgMHgwMSwgMHhkMywgMHgxOCwgMHgyMywgMHg4MywgMHg2MSwgMHhjMSwgMHg4MywgMHg1MSwgMHg2YiwKKzB4YzAsIDB4NDYsIDB4YzEsIDB4ODEsIDB4NTEsIDB4NmIsIDB4YzIsIDB4MWQsIDB4MzksIDB4MzIsIDB4NTEsIDB4ODMsCisweDA0LCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAxLCAweGYwLCAweGMyLCAweGY4LAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKKzB4YjAsIDB4YjUsIDB4MWIsIDB4NGMsIDB4MjAsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MWIsIDB4ZDIsIDB4MDAsIDB4MjAsCisweGU3LCAweDFkLCAweDE5LCAweDM3LCAweDM4LCAweDcxLCAweGUxLCAweDY4LCAweGUwLCAweDFkLCAweGY5LCAweDMwLAorMHgwMCwgMHgyOSwgMHgxNSwgMHhkMCwgMHg0MiwgMHg2YSwgMHgwMCwgMHgyYSwgMHgxMiwgMHhkMSwgMHgwMSwgMHgyNSwKKzB4MGEsIDB4ZTAsIDB4ZmYsIDB4ZjcsIDB4ODksIDB4ZmIsIDB4MDAsIDB4MjgsIDB4MDksIDB4ZDEsIDB4MjAsIDB4NmEsCisweDAyLCAweDI4LCAweDAwLCAweGQzLCAweDNkLCAweDcxLCAweGUwLCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLAorMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHhmMSwgMHhkMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4NDAsIDB4NmEsIDB4MDAsIDB4MjgsIDB4ZjksIDB4ZDEsIDB4MDAsIDB4MjksIDB4ZjcsIDB4ZDEsIDB4NjAsIDB4NjksCisweDAwLCAweDI4LCAweDA0LCAweGQwLCAweDA2LCAweDQ4LCAweDAwLCAweDY4LCAweDAzLCAweGYwLCAweGE4LCAweGZjLAorMHhlZiwgMHhlNywgMHg2MCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhlYywgMHhkMCwgMHgwMCwgMHhmMCwgMHg1YSwgMHhmOCwKKzB4ZTksIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MzQsIDB4MDQsIDB4MDAsIDB4ODAsCisweGIwLCAweGI1LCAweDA3LCAweDFjLCAweDIwLCAweDIzLCAweGI4LCAweDY4LCAweDE4LCAweDQwLCAweDAxLCAweDI0LAorMHgwMCwgMHgyNSwgMHgwMCwgMHgyOCwgMHgwYiwgMHhkMSwgMHgzOCwgMHg2YSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMSwKKzB4MjgsIDB4MWMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MWYsIDB4NDgsIDB4MDEsIDB4NmUsCisweDAxLCAweDMxLCAweDAxLCAweDY2LCAweDAzLCAweGUwLCAweDQ4LCAweDY4LCAweGM0LCAweDIzLCAweDE4LCAweDQwLAorMHgwMywgMHhkMSwgMHgzOCwgMHg2YSwgMHgwMCwgMHhmMCwgMHgwYywgMHhmYywgMHgyZiwgMHhlMCwgMHgzOCwgMHgxYywKKzB4MDAsIDB4ZjAsIDB4MWMsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4N2IsIDB4ZmEsIDB4YjgsIDB4NjgsCisweGMwLCAweDA4LCAweDAyLCAweGQzLCAweDM4LCAweDZhLCAweDAwLCAweGYwLCAweGQxLCAweGZiLCAweGI4LCAweDY4LAorMHgzOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MCwgMHgzOCwgMHg2YSwgMHhjMCwgMHg0NiwgMHhjNSwgMHg2MCwKKzB4MTAsIDB4NDgsIDB4NDEsIDB4NjgsIDB4MDAsIDB4MjksIDB4MTEsIDB4ZDEsIDB4YzEsIDB4NjgsIDB4MDAsIDB4MjksCisweDA5LCAweGQxLCAweDQxLCAweDY5LCAweDAwLCAweDI5LCAweDA2LCAweGQxLCAweDM5LCAweDZhLCAweGMwLCAweDQ2LAorMHg4MSwgMHg2MCwgMHg0MSwgMHg2MCwgMHgwMCwgMHhmMCwgMHgxNCwgMHhmOCwgMHgwYiwgMHhlMCwgMHgzOSwgMHg2YSwKKzB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4NDEsIDB4NjAsIDB4MDYsIDB4ZTAsIDB4MzksIDB4NmEsIDB4ODIsIDB4NjgsCisweGMwLCAweDQ2LCAweGQxLCAweDYwLCAweDM5LCAweDZhLCAweGMwLCAweDQ2LCAweDgxLCAweDYwLCAweDIwLCAweDFjLAorMHhiZCwgMHhlNywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKKzB4OTAsIDB4YjUsIDB4MGIsIDB4NGMsIDB4NjcsIDB4NjgsIDB4MDAsIDB4MmYsIDB4MGYsIDB4ZDAsIDB4MzgsIDB4MWMsCisweDAwLCAweGYwLCAweDEyLCAweGY4LCAweDAwLCAweDI4LCAweDBhLCAweGQxLCAweDYwLCAweDY4LCAweGMwLCAweDY4LAorMHhjMCwgMHg0NiwgMHg2MCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhjMywgMHhmYiwgMHgwMCwgMHgyMCwKKzB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDEsIDB4MjAsIDB4ZmEsIDB4ZTcsIDB4MDAsIDB4MDAsCisweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDA3LCAweDFjLCAweGZlLCAweDFkLCAweDQ5LCAweDM2LAorMHgzMCwgMHg3OCwgMHg0MCwgMHgwMCwgMHhjMCwgMHgxOSwgMHg4NSwgMHg4YiwgMHgzMywgMHg0YywgMHgzNCwgMHg0YiwKKzB4OWQsIDB4NDIsIDB4M2MsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MjEsIDB4MWMsIDB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsCisweDFkLCAweGY5LCAweDMxLCAweDQ4LCAweDgwLCAweDZhLCAweDU4LCAweDIxLCAweDY5LCAweDQzLCAweDQwLCAweDE4LAorMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKKzB4MmMsIDB4NGQsIDB4MDEsIDB4MjgsIDB4MWEsIDB4ZDEsIDB4MzAsIDB4NzgsIDB4YzAsIDB4MTksIDB4YzEsIDB4MWQsCisweDE5LCAweDMxLCAweDA4LCAweDdhLCAweDNhLCAweDY4LCAweDgwLCAweDE4LCAweDA5LCAweDdiLCAweGVhLCAweDFkLAorMHgyMSwgMHgzMiwgMHgwMCwgMHhmMCwgMHhlMywgMHhmYywgMHgzMCwgMHg3OCwgMHhjMCwgMHgxOSwgMHgyMCwgMHgzMCwKKzB4MDAsIDB4NzksIDB4MzksIDB4NjgsIDB4NDAsIDB4MTgsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MDAsIDB4MjAsCisweDAwLCAweDIzLCAweDQyLCAweDAwLCAweDhiLCAweDUyLCAweDAxLCAweDMwLCAweDA2LCAweDI4LCAweGZhLCAweGQzLAorMHhhMCwgMHg4OCwgMHg0MSwgMHgwNywgMHgwYiwgMHhkMSwgMHgyMSwgMHg4OSwgMHgwOSwgMHgxOCwgMHg3OCwgMHg2OCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4ODEsIDB4NDIsIDB4MDQsIDB4ZDgsIDB4NjEsIDB4ODksIDB4ZTIsIDB4ODgsCisweDg5LCAweDE4LCAweDgxLCAweDQyLCAweDAzLCAweGQ5LCAweDAwLCAweDIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHgyMSwgMHgxYywgMHgxNCwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmZSwgMHhmNywgMHg1YSwgMHhmZiwKKzB4MDEsIDB4MjIsIDB4NTIsIDB4MDQsIDB4NzgsIDB4NjgsIDB4MDIsIDB4NDMsCisweDAxLCAweDIwLCAweDM5LCAweDY4LCAweGZlLCAweGY3LCAweDUyLCAweGZmLCAweDAxLCAweDIyLCAweDUyLCAweDA0LAorMHg3OCwgMHg2OCwgMHgwMiwgMHg0MywgMHgwMCwgMHgyMCwgMHgzOSwgMHg2OCwgMHhmZSwgMHhmNywgMHg0YSwgMHhmZiwKKzB4MGIsIDB4NDksIDB4MGMsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmUsIDB4ZjcsIDB4NDUsIDB4ZmYsIDB4MDEsIDB4MjAsCisweGU5LCAweDFkLCAweDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDAyLCAweDIxLCAweGVhLCAweDFkLCAweGY5LCAweDMyLAorMHg1MSwgMHg2MiwgMHhkOSwgMHhlNywgMHgyOCwgMHhhYywgMHgyMCwgMHg0MCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKKzB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4NTQsIDB4MDAsIDB4MDMsIDB4MDAsCisweDE0LCAweGFjLCAweDIwLCAweDQwLCAweDE0LCAweDAwLCAweDA3LCAweDAwLCAweGYwLCAweGI1LCAweDgzLCAweGIwLAorMHgwMCwgMHgyMSwgMHg0ZiwgMHg0OCwgMHhjMiwgMHgxZCwgMHhmOSwgMHgzMiwgMHg1MSwgMHg2MiwgMHgwMSwgMHgyMSwKKzB4YzksIDB4MDQsIDB4NGQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4YzEsIDB4MWQsIDB4MTksIDB4MzEsCisweDQ5LCAweDc5LCAweDAwLCAweDI5LCAweDA0LCAweGQxLCAweDRhLCAweDQ4LCAweDAwLCAweDY4LCAweDAzLCAweGYwLAorMHg5YiwgMHhmYiwgMHg4NywgMHhlMCwgMHg0NSwgMHg0OCwgMHg0NywgMHg2OCwgMHhmYywgMHgxZCwgMHg0OSwgMHgzNCwKKzB4MjEsIDB4NzgsIDB4NDgsIDB4MDAsIDB4YzAsIDB4MTksIDB4ODAsIDB4OGIsIDB4NDQsIDB4NGEsIDB4OTIsIDB4NmEsCisweDU4LCAweDIzLCAweDU4LCAweDQzLCAweDE1LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGVhLCAweDFkLAorMHgwNSwgMHgzMiwgMHgxYSwgMHg0MywgMHgxMiwgMHg2OCwgMHgwOCwgMHgzNSwgMHgyYiwgMHg0MywgMHgxZCwgMHg2OCwKKzB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4MmIsIDB4NDAsIDB4MWIsIDB4MGEsIDB4M2MsIDB4NGQsIDB4MDEsIDB4MmIsCisweDI0LCAweGQxLCAweGM4LCAweDE5LCAweGMxLCAweDFkLCAweDE5LCAweDMxLCAweDA4LCAweDdhLCAweDNhLCAweDY4LAorMHg4MCwgMHgxOCwgMHgzOSwgMHg0YSwgMHgwOSwgMHg3YiwgMHgwMCwgMHhmMCwgMHhjNSwgMHhmYywgMHgyMCwgMHg3OCwKKzB4YzAsIDB4MTksIDB4MjAsIDB4MzAsIDB4MDAsIDB4NzksIDB4MzksIDB4NjgsIDB4NDEsIDB4MTgsIDB4MDAsIDB4MjAsCisweDgyLCAweDAwLCAweDUzLCAweDE5LCAweDliLCAweDZlLCAweDZlLCAweDQ2LCAweGIzLCAweDUwLCAweDAxLCAweDMwLAorMHgwMywgMHgyOCwgMHhmNywgMHhkMywgMHhjYSwgMHgxZCwgMHgwNSwgMHgzMiwgMHg2OSwgMHg0NiwgMHgwMCwgMHgyMCwKKzB4NDMsIDB4MDAsIDB4Y2QsIDB4NWEsIDB4YzAsIDB4NDYsIDB4ZDUsIDB4NTIsIDB4MDEsIDB4MzAsIDB4MDYsIDB4MjgsCisweGY4LCAweGQzLCAweDJkLCAweGUwLCAweDAyLCAweDJiLCAweDJiLCAweGQxLCAweDExLCAweDBhLCAweDI5LCAweGQzLAorMHgwMCwgMHgyMSwgMHg4YSwgMHgwMCwgMHg1MywgMHgxOSwgMHg5YiwgMHg2ZSwgMHg2ZSwgMHg0NiwgMHhiMywgMHg1MCwKKzB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjcsIDB4ZDMsIDB4MjEsIDB4NzgsIDB4NDksIDB4MDAsIDB4YzksIDB4MTksCisweDA5LCAweDhmLCAweDNhLCAweDY4LCAweDhiLCAweDE4LCAweDZhLCAweDQ2LCAweDAwLCAweDIxLCAweDRkLCAweDAwLAorMHg1NiwgMHg1YiwgMHhjMCwgMHg0NiwgMHg1ZSwgMHg1MywgMHgwMSwgMHgzMSwgMHgwNiwgMHgyOSwgMHhmOCwgMHhkMywKKzB4MTksIDB4NDksIDB4OGEsIDB4NmEsIDB4MTMsIDB4MTgsIDB4MWEsIDB4NmQsIDB4MDAsIDB4OWQsIDB4NTUsIDB4NDAsCisweDE5LCAweDRhLCAweGQ2LCAweDY4LCAweDc1LCAweDQwLCAweDFkLCAweDY1LCAweDg5LCAweDZhLCAweDA4LCAweDE4LAorMHg0MSwgMHg2ZCwgMHgwMiwgMHg5YiwgMHg1OSwgMHg0MCwgMHg5MiwgMHg2OSwgMHg1MSwgMHg0MCwgMHg0MSwgMHg2NSwKKzB4MjAsIDB4NzgsIDB4NDEsIDB4MWUsIDB4MjEsIDB4NzAsIDB4MDAsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4MzgsIDB4MWMsCisweGZmLCAweGY3LCAweGY0LCAweGZlLCAweDAwLCAweDI4LCAweDBkLCAweGQxLCAweDA4LCAweDRhLCAweDUwLCAweDY4LAorMHhjMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhNCwgMHhmYSwKKzB4MDIsIDB4ZTAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NzMsIDB4ZmEsIDB4MDEsIDB4ZjAsIDB4ZGUsIDB4ZmEsCisweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDZjLCAweDA2LCAweDAwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgzOCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKKzB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsIDB4OTQsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCisweGYwLCAweGI1LCAweDgyLCAweGIwLCAweDY5LCAweDRiLCAweDlmLCAweDZhLCAweDU4LCAweDIzLCAweDVhLCAweDQzLAorMHhiYSwgMHgxOCwgMHhjMywgMHgxZCwgMHg0OSwgMHgzMywgMHgxZiwgMHg3OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKKzB4ZDQsIDB4MWQsIDB4MDEsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWQsIDB4NjgsIDB4NDMsIDB4NjgsIDB4MWMsIDB4MDQsCisweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDA1LCAweDM2LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAorMHgxYywgMHg0MywgMHg0MiwgMHgyMywgMHgxYywgMHg0MywgMHgwYywgMHg2MCwgMHhmZiwgMHgyNiwgMHgzNiwgMHgwMiwKKzB4MmUsIDB4NDAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4OWUsIDB4NDIsIDB4NzQsIDB4ZDEsIDB4NmIsIDB4MGMsCisweDJiLCAweGQzLCAweGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDc5LAorMHhjMCwgMHg0NiwgMHg0YiwgMHg4MSwgMHg3YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHgxYiwgMHg4ZiwgMHg0YywgMHg4OSwKKzB4MWIsIDB4MWIsIDB4Y2IsIDB4ODAsIDB4MDAsIDB4MjQsIDB4YTYsIDB4MDAsIDB4MDEsIDB4OTYsIDB4YjMsIDB4MTgsCisweGRlLCAweDFkLCAweDA5LCAweDM2LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAorMHgwMSwgMHg5ZSwgMHg3NiwgMHgxOCwgMHg3MywgMHg2MSwgMHgwMSwgMHgzNCwgMHgwNSwgMHgyYywgMHhmMCwgMHhkMywKKzB4MDAsIDB4MjQsIDB4YTYsIDB4MDAsIDB4MDAsIDB4OTYsIDB4YjMsIDB4MTgsIDB4ZGUsIDB4MWQsIDB4MWQsIDB4MzYsCisweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDAwLCAweDllLCAweDc2LCAweDE4LAorMHhiMywgMHg2MiwgMHgwMSwgMHgzNCwgMHgwNSwgMHgyYywgMHhmMCwgMHhkMywgMHgwNiwgMHhlMCwgMHgwMCwgMHgyMywKKzB4NGIsIDB4ODEsIDB4Y2IsIDB4ODAsIDB4NDAsIDB4MjMsIDB4OWMsIDB4NDMsIDB4MGMsIDB4NjAsIDB4MjMsIDB4MWMsCisweDZiLCAweDBlLCAweDRhLCAweGQzLCAweGMzLCAweDE5LCAweDIwLCAweDMzLCAweDFiLCAweDc5LCAweDEwLCAweDMzLAorMHgwYiwgMHg4MSwgMHg3YiwgMHgwMCwgMHgxYiwgMHgxOCwgMHgxYiwgMHg4ZiwgMHgwZiwgMHg4OSwgMHhkYiwgMHgxYiwKKzB4OGIsIDB4ODAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4MzUsIDB4MzQsIDB4MjMsIDB4NDMsCisweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGNiLCAweDYzLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLAorMHgzMSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg2NCwgMHhhYiwgMHgwZSwKKzB4MjEsIDB4ZDIsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4M2QsIDB4MzQsIDB4MjMsIDB4NDMsCisweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweDRiLCAweDY0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLAorMHgzOSwgMHgzNCwgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHg4YiwgMHg2NCwgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4ZDQsIDB4MWQsIDB4NDUsIDB4MzQsIDB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4YzAsIDB4NDYsCisweGNiLCAweDY0LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ0LCAweDFkLCAweDQxLCAweDM0LCAweDIzLCAweDQzLAorMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYiwgMHg2NSwgMHgwMCwgMHhlMCwgMHgwZiwgMHhlMCwgMHhmYiwgMHgxZiwKKzB4MDEsIDB4M2IsIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsIDB4MDcsIDB4NjgsIDB4ZmYsIDB4MTgsIDB4MDMsIDB4NjksCisweDA4LCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDM0LCAweGY4LCAweDJjLCAweGUwLCAweDAwLCAweDIzLAorMHgwYiwgMHg4MSwgMHg4YiwgMHg4MCwgMHgyOCwgMHhlMCwgMHgwMCwgMHgyMywgMHg4YiwgMHg4MCwgMHgwYiwgMHg4MSwKKzB4YzMsIDB4MTksIDB4MjAsIDB4MzMsIDB4MWIsIDB4N2EsIDB4YzAsIDB4NDYsIDB4NGIsIDB4ODEsIDB4N2IsIDB4MDAsCisweDE4LCAweDE4LCAweDAwLCAweDhlLCAweGMwLCAweDQ2LCAweGM4LCAweDgwLCAweDAwLCAweDIwLCAweDg3LCAweDAwLAorMHhiYiwgMHgxOCwgMHhkYywgMHgxZCwgMHgwOSwgMHgzNCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMywgMHg0MywKKzB4MWIsIDB4NjgsIDB4N2YsIDB4MTgsIDB4N2IsIDB4NjEsIDB4MDEsIDB4MzAsIDB4MDUsIDB4MjgsIDB4ZjIsIDB4ZDMsCisweDAwLCAweDIwLCAweDg3LCAweDAwLCAweGJiLCAweDE4LCAweGRjLCAweDFkLCAweDFkLCAweDM0LCAweDAxLCAweDIzLAorMHg5YiwgMHgwNywgMHgyMywgMHg0MywgMHgxYiwgMHg2OCwgMHg3ZiwgMHgxOCwgMHhiYiwgMHg2MiwgMHgwMSwgMHgzMCwKKzB4MDUsIDB4MjgsIDB4ZjIsIDB4ZDMsIDB4MDIsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDRjLCAweDJhLCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDFmLCAweDFjLCAweDNiLCAweDBjLCAweDE4LCAweGQyLAorMHgxNywgMHg2ZCwgMHgxMSwgMHg0YiwgMHhjMCwgMHg0NiwgMHhkZiwgMHg2MCwgMHg1MiwgMHg2ZCwgMHhjMCwgMHg0NiwKKzB4MWEsIDB4NjEsIDB4YzcsIDB4NjAsIDB4MWEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDIsIDB4NjEsIDB4ZDgsIDB4NjgsCisweGMwLCAweDQ2LCAweDA4LCAweDgwLCAweGQ4LCAweDY4LCAweDAwLCAweDBjLCAweDQ4LCAweDgwLCAweDE4LCAweDY5LAorMHhjMCwgMHg0NiwgMHg4OCwgMHg4MCwgMHgxOCwgMHg2OSwgMHgwMCwgMHgwYywgMHhjOCwgMHg4MCwgMHg4MCwgMHhiYywKKzB4NzAsIDB4NDcsIDB4NGEsIDB4ODgsIDB4MTIsIDB4MDQsIDB4MGIsIDB4ODgsIDB4MWEsIDB4NDMsIDB4YzIsIDB4NjAsCisweDhhLCAweDg4LCAweGM5LCAweDg4LCAweDA5LCAweDA0LCAweDExLCAweDQzLCAweDAxLCAweDYxLCAweGYyLCAweGU3LAorMHgyYywgMHgwNywgMHgwMCwgMHg4MCwgMHhmMSwgMHhiNSwgMHg4OCwgMHhiMCwgMHgwMCwgMHgyMiwgMHgwOCwgMHg5OCwKKzB4MDAsIDB4NmEsIDB4MDgsIDB4OWIsIDB4OTksIDB4NjgsIDB4NDksIDB4MGEsIDB4MDIsIDB4ZDMsIDB4MDEsIDB4MjcsCisweGZmLCAweDAzLCAweDAwLCAweGUwLCAweDAwLCAweDI3LCAweDAzLCAweDhiLCAweDAwLCAweDJiLCAweDE5LCAweGQwLAorMHhhMywgMHg0OSwgMHg4OSwgMHg2YSwgMHgxYywgMHgxYywgMHg1OCwgMHgyMywgMHg2MywgMHg0MywgMHhjOSwgMHgxOCwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4NTgsIDB4MzksIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsCisweDA5LCAweDBjLCAweDAyLCAweDI5LCAweDAyLCAweGQxLCAweDA4LCAweDIzLCAweDFmLCAweDQzLCAweDA3LCAweGUwLAorMHg0MSwgMHg4YiwgMHgwMCwgMHgyOSwgMHgwMiwgMHhkMCwgMHgwYywgMHgyMywKKzB4MWYsIDB4NDMsIDB4MDEsIDB4ZTAsIDB4MDQsIDB4MjMsIDB4MWYsIDB4NDMsIDB4ODMsIDB4OGEsIDB4MDAsIDB4MmIsCisweDE4LCAweGQwLCAweDk1LCAweDQ5LCAweDg5LCAweDZhLCAweDFjLCAweDFjLCAweDU4LCAweDIzLCAweDYzLCAweDQzLAorMHhjOSwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHg1OCwgMHgzOSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKKzB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDIsIDB4MjksIDB4MDEsIDB4ZDEsIDB4MGYsIDB4NDMsIDB4MDcsIDB4ZTAsCisweGMxLCAweDhhLCAweDAwLCAweDI5LCAweDAyLCAweGQwLCAweDAzLCAweDIzLCAweDFmLCAweDQzLCAweDAxLCAweGUwLAorMHgwMSwgMHgyMywgMHgxZiwgMHg0MywgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwNywgMHg5MSwgMHg0YiwgMHg4OSwKKzB4MGMsIDB4ODksIDB4MWMsIDB4MTksIDB4MjQsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDgsIDB4OWQsIDB4MmQsIDB4NjgsCisweGMwLCAweDQ2LCAweDAxLCAweDk1LCAweGM5LCAweDg4LCAweDdkLCAweDA4LCAweDFhLCAweGQzLCAweDFhLCAweDFjLAorMHhjMywgMHgxZCwgMHgxOSwgMHgzMywgMHgxYSwgMHg3MiwgMHgwNywgMHg5YSwgMHg5MiwgMHg4OSwgMHhjMCwgMHg0NiwKKzB4MWEsIDB4NzMsIDB4MDcsIDB4OWEsIDB4MTIsIDB4ODksIDB4YzAsIDB4NDYsIDB4MDIsIDB4ODYsIDB4MDQsIDB4ODcsCisweDgyLCAweDhhLCAweDAxLCAweDNhLCAweDgyLCAweDgzLCAweDAxLCAweDIyLCAweDE5LCAweDcxLCAweDA4LCAweDliLAorMHgxYiwgMHg2OCwgMHg1YiwgMHgxOCwgMHg1YiwgMHg3OCwgMHg5YiwgMHgwMCwgMHgxYiwgMHgwNCwgMHgxYiwgMHgwYywKKzB4MDgsIDB4MzMsIDB4NTksIDB4MTgsIDB4YmIsIDB4MDgsIDB4NDcsIDB4ZDMsIDB4MDcsIDB4OWIsIDB4NWIsIDB4ODksCisweDg1LCAweDE4LCAweDA2LCAweDk1LCAweDIwLCAweDM1LCAweDJiLCAweDcyLCAweDA3LCAweDliLCAweDliLCAweDg5LAorMHhjMCwgMHg0NiwgMHgyYiwgMHg3MywgMHgwNywgMHg5YiwgMHgxYiwgMHg4OSwgMHgyZSwgMHgxYywgMHg1NSwgMHgwMCwKKzB4MmQsIDB4MTgsIDB4MDUsIDB4OTUsIDB4MmIsIDB4ODYsIDB4MDAsIDB4MmEsIDB4MDEsIDB4ZDAsIDB4YzMsIDB4OGEsCisweDAwLCAweGUwLCAweDgzLCAweDhhLCAweDAxLCAweDNiLCAweDA1LCAweDlkLCAweGMwLCAweDQ2LCAweGFiLCAweDgzLAorMHgzMSwgMHg3MSwgMHg2NSwgMHg0YiwgMHg5ZCwgMHg2YSwgMHgwNSwgMHg5YiwgMHg5ZSwgMHg4YiwgMHg1OCwgMHgyMywKKzB4NzMsIDB4NDMsIDB4ZWIsIDB4MTgsIDB4ZGQsIDB4MWQsIDB4MDEsIDB4MzUsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweDJiLCAweDQzLCAweDFkLCAweDY4LCAweDJiLCAweDBlLCAweDViLCAweDA2LCAweDAxLCAweGQxLCAweDA4LCAweDMxLAorMHgwMCwgMHhlMCwgMHgxMCwgMHgzMSwgMHg4MSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxZCwgMHg0MCwgMHg5ZCwgMHg0MiwKKzB4MDMsIDB4ZDEsIDB4ZTMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDUsIDB4OWIsCisweGMwLCAweDQ2LCAweDFjLCAweDg3LCAweDA4LCAweDliLCAweDFiLCAweDY4LCAweDFiLCAweDE5LCAweDEwLCAweDNiLAorMHg5YiwgMHg3YiwgMHgwNiwgMHg5ZCwgMHg0MCwgMHgzNSwgMHgyYiwgMHg3MCwgMHgyYiwgMHg3OCwgMHgwMiwgMHgzMywKKzB4ZTMsIDB4MWEsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDEsIDB4MzIsIDB4YmIsIDB4MDgsIDB4OWIsIDB4MDcsCisweDZkLCAweGQwLCAweDgzLCAweDE4LCAweDIwLCAweDMzLCAweDA0LCAweDkzLCAweDE5LCAweDcyLCAweDAxLCAweDliLAorMHg1ZCwgMHgxOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyYiwgMHg0MywgMHgxYiwgMHg2OCwgMHgxYiwgMHgwNywKKzB4MWIsIDB4MGYsIDB4OWIsIDB4MDAsIDB4MDQsIDB4OWUsIDB4YzAsIDB4NDYsIDB4MzMsIDB4NzMsIDB4MDAsIDB4OTUsCisweDJiLCAweDc4LCAweDFiLCAweDA3LCAweDFiLCAweDBmLCAweDliLCAweDAwLCAweDA0LCAweDlkLCAweGMwLCAweDQ2LAorMHgyYiwgMHg3MywgMHgwMCwgMHg5ZCwgMHhlYiwgMHg3OCwgMHhhZCwgMHg3OCwgMHgxYiwgMHgwMiwgMHgxZCwgMHg0MywKKzB4MmIsIDB4MDIsIDB4MmQsIDB4MGEsIDB4MmQsIDB4MDYsIDB4MmQsIDB4MGUsIDB4MmIsIDB4NDMsIDB4NTUsIDB4MDAsCisweDJkLCAweDE4LCAweDJiLCAweDg2LCAweDA0LCAweDliLCAweGMwLCAweDQ2LCAweDU5LCAweDcyLCAweDA0LCAweDliLAorMHgxYiwgMHg3YiwgMHgyZSwgMHgxYywgMHgwNCwgMHg5ZCwgMHhjMCwgMHg0NiwgMHg2YiwgMHg3MywgMHgzMywgMHg4ZSwKKzB4YzAsIDB4NDYsIDB4NzMsIDB4ODYsIDB4MDAsIDB4OWQsIDB4MmIsIDB4NzgsIDB4MWIsIDB4MDcsIDB4MWIsIDB4MGYsCisweDliLCAweDAwLCAweDFiLCAweDA0LCAweDFiLCAweDBjLCAweDU5LCAweDE4LCAweDA0LCAweDI1LCAweDNkLCAweDQwLAorMHgwZSwgMHhkMCwgMHgzNCwgMHg4NywgMHgwMywgMHg4YiwgMHgwMSwgMHgzYiwgMHhiMywgMHg4MywgMHgxMywgMHgxYywKKzB4MWIsIDB4MTgsIDB4MjAsIDB4MzMsIDB4MTksIDB4NzEsIDB4MDEsIDB4OWIsIDB4NWIsIDB4MTgsIDB4NWIsIDB4NzgsCisweDliLCAweDAwLCAweDU5LCAweDE4LCAweDA4LCAweDMxLCAweDAxLCAweDMyLCAweDNiLCAweDA5LCAweDM3LCAweGQzLAorMHgwMCwgMHgyZCwgMHgwMSwgMHhkMCwgMHg0MywgMHg4YiwgMHgwMCwgMHhlMCwgMHgwMywgMHg4YiwgMHg1NSwgMHgwMCwKKzB4MmQsIDB4MTgsIDB4MDEsIDB4M2IsIDB4YWIsIDB4ODMsIDB4ODMsIDB4MTgsIDB4MDMsIDB4OTMsIDB4MjAsIDB4MzMsCisweDE5LCAweDcxLCAweDIwLCAweDRiLCAweDlkLCAweDZhLCAweDUzLCAweDAwLCAweDFiLCAweDE4LCAweDAyLCAweDkzLAorMHg5ZSwgMHg4YiwgMHg1OCwgMHgyMywgMHg3MywgMHg0MywgMHhlYiwgMHgxOCwgMHhkZCwgMHgxZCwgMHgwMSwgMHgzNSwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MmIsIDB4NDMsIDB4MWQsIDB4NjgsCisweDJiLCAweDBlLCAweDViLCAweDA2LCAweDAyLCAweGQxLCAweDA4LCAweDMxLCAweDAxLCAweGUwLCAweDE1LCAweGUwLAorMHgxMCwgMHgzMSwgMHg4MSwgMHgyMywgMHg1YiwgMHgwMiwgMHgxZCwgMHg0MCwgMHg5ZCwgMHg0MiwgMHgwMywgMHhkMSwKKzB4ZTMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MWMsIDB4MDQsIDB4MjQsIDB4MGMsIDB4MDIsIDB4OWIsIDB4YzAsIDB4NDYsCisweDFjLCAweDg3LCAweDA4LCAweDliLCAweDFiLCAweDY4LCAweDFiLCAweDE5LCAweDEwLCAweDNiLCAweDliLCAweDdiLAorMHgwMywgMHg5YywgMHg0MCwgMHgzNCwgMHgyMywgMHg3MCwgMHgwMSwgMHgzMiwgMHgwNywgMHg5YiwgMHhjMCwgMHg0NiwKKzB4ZDksIDB4ODAsIDB4NTEsIDB4MWUsIDB4YzMsIDB4MWQsIDB4NDksIDB4MzMsIDB4MTksIDB4NzAsIDB4MDcsIDB4NjEsCisweDA0LCAweDJhLCAweDA2LCAweGQyLCAweDA2LCAweDQ5LCAweDUzLCAweDAwLCAweDFiLCAweDE4LCAweDk5LCAweDgzLAorMHgwMSwgMHgzMiwgMHgwNCwgMHgyYSwgMHhmOSwgMHhkMywgMHgwOSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisweDcwLCAweDQ3LCAweDgwLCAweGI1LCAweDhjLCAweGIwLCAweDA3LCAweDFjLCAweDEyLCAweDQ4LCAweDAxLCAweDY4LAorMHgwMSwgMHgzMSwgMHgwMSwgMHg2MCwgMHgzOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHg3OCwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MDEsIDB4OTAsIDB4YjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTAsIDB4MGQsIDB4NDgsCisweDQxLCAweDY4LCAweGM5LCAweDY4LCAweGMwLCAweDQ2LCAweDQxLCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAorMHg0ZiwgMHhmOCwgMHhiOCwgMHg2OCwgMHg0MCwgMHgwOSwgMHgwNiwgMHhkMywgMHgxMCwgMHgyMywgMHgwMiwgMHg5OCwKKzB4MTgsIDB4NDMsIDB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDIsIDB4ZjAsIDB4ZTEsIDB4ZmYsIDB4NjgsIDB4NDYsCisweDAyLCAweGYwLCAweDlhLCAweGZlLCAweDBjLCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4YywgMHhiMCwKKzB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NjgsIDB4MDUsIDB4NGIsIDB4MTksIDB4NDMsCisweDAxLCAweDkxLCAweDAwLCAweGYwLCAweDJmLCAweGY4LCAweDY4LCAweDQ2LCAweDAyLCAweGYwLCAweDg0LCAweGZlLAorMHgwYywgMHhiMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhhMCwKKzB4MDIsIDB4NmEsIDB4MDMsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MTMsIDB4NjAsIDB4NDAsIDB4NjgsIDB4YzAsIDB4NDYsCisweDUwLCAweDYwLCAweDQwLCAweDMyLCAweDQ4LCAweDY4LCAweGMwLCAweDQ2LCAweDkwLCAweDgwLCAweGM4LCAweDY4LAorMHhjMCwgMHg0NiwgMHhkMCwgMHg4MCwgMHg0OCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg4MSwgMHg4OCwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4NTAsIDB4ODEsIDB4MDgsIDB4N2UsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NzMsIDB4MDgsIDB4NjksCisweGMwLCAweDQ2LCAweDkwLCAweDgxLCAweDcwLCAweDQ3LCAweDA0LCAweDQ5LCAweDA4LCAweDY4LCAweDAwLCAweDI4LAorMHgwMCwgMHhkMSwgMHg3MCwgMHg0NywgMHhjMiwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwYSwgMHg2MCwgMHhmYSwgMHhlNywKKzB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4MDIsIDB4NDksIDB4MGEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YzIsIDB4NjAsCisweDA4LCAweDYwLCAweDcwLCAweDQ3LCAweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDAwLCAweDIyLAorMHgxMiwgMHg0ZiwgMHg3YywgMHg3ZiwgMHgwMSwgMHgzNCwgMHg3YywgMHg3NywgMHgwMywgMHgyMywgMHhmYywgMHgxZCwKKzB4MTksIDB4MzQsIDB4MzgsIDB4NjIsIDB4NzksIDB4NjIsIDB4MjMsIDB4NzIsIDB4MGUsIDB4NGMsIDB4MjUsIDB4NjgsCisweDZiLCAweDBjLCAweDA1LCAweGQyLCAweDIzLCAweDY4LCAweDFiLCAweDBjLCAweDEwLCAweGQxLCAweDI0LCAweDY4LAorMHhhMywgMHgwYSwgMHgwZCwgMHhkMywgMHgwMSwgMHgyMywgMHgwYSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHhmYiwgMHg2MiwKKzB4MDksIDB4NGYsIDB4MGEsIDB4NGIsIDB4YzAsIDB4NDYsIDB4ZGYsIDB4NjAsIDB4OTksIDB4NjAsIDB4NTgsIDB4NjAsCisweDEwLCAweDFjLCAweDE4LCAweDYwLCAweDAxLCAweDMyLCAweGZiLCAweGU3LCAweDEwLCAweDFjLCAweDM4LCAweDY0LAorMHgwMSwgMHgzMiwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKzB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCisweGYwLCAweGI1LCAweDQ3LCAweDRmLCAweDM4LCAweDY4LCAweDQ3LCAweDRlLCAweDQ3LCAweDRkLCAweDA3LCAweDIzLAorMHg1YiwgMHgwMiwgMHhlYywgMHgxOCwgMHgwMCwgMHgyOCwgMHgxZCwgMHhkMSwgMHgyMCwgMHg2YiwgMHgwMSwgMHgzMCwKKzB4MjAsIDB4NjMsIDB4NDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4NDMsIDB4NDgsIDB4NDEsIDB4NjksCisweDAwLCAweDI5LCAweDEzLCAweGQwLCAweGMxLCAweDFkLCAweDY5LCAweDMxLCAweDA5LCAweDdiLCAweDAwLCAweDI5LAorMHgwZSwgMHhkMCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMSwgMHg2ZCwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4ODEsIDB4NjEsIDB4YzIsIDB4NjksIDB4OTEsIDB4NDIsIDB4MDQsIDB4ZDAsIDB4ZjEsIDB4NmMsCisweDAxLCAweDMxLCAweGYxLCAweDY0LCAweDAxLCAweGYwLCAweDUwLCAweGZlLAorMHgzOCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgxNywgMHhkMSwgMHgzNywgMHg0OCwgMHg0MSwgMHg2OSwgMHgwMCwgMHgyOSwKKzB4MTMsIDB4ZDAsIDB4YzEsIDB4MWQsIDB4NjksIDB4MzEsIDB4MDksIDB4N2IsIDB4MDAsIDB4MjksIDB4MGUsIDB4ZDAsCisweDAxLCAweDIzLCAweDliLCAweDA3LCAweDAxLCAweDZkLCAweDE5LCAweDQzLCAweDA5LCAweDY4LCAweGMwLCAweDQ2LAorMHg4MSwgMHg2MSwgMHhjMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHgwNCwgMHhkMCwgMHhmMSwgMHg2YywgMHgwMSwgMHgzMSwKKzB4ZjEsIDB4NjQsIDB4MDEsIDB4ZjAsIDB4MzUsIDB4ZmUsIDB4MzgsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MmYsIDB4ZDEsCisweGJiLCAweDIzLCAweDFiLCAweDAxLCAweGVlLCAweDE4LCAweDcwLCAweDdiLCAweDAwLCAweDI4LCAweDAzLCAweGQwLAorMHgwMCwgMHgyMCwgMHg3MCwgMHg3MywgMHgwMCwgMHhmMCwgMHg0YSwgMHhmZCwgMHgzMCwgMHg3YiwgMHgwMCwgMHgyOCwKKzB4MDIsIDB4ZDAsIDB4NzgsIDB4NjgsIDB4MDIsIDB4ZjAsIDB4YWEsIDB4ZmYsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsCisweGU4LCAweDE4LCAweGMwLCAweDhiLCAweDA0LCAweDI2LCAweDA2LCAweDQwLCAweGUwLCAweDZhLCAweGIwLCAweDQyLAorMHgxNCwgMHhkMCwgMHhmOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHhmOCwgMHg2MCwgMHgxOSwgMHgyOCwgMHgxMSwgMHhkMywKKzB4MWIsIDB4NDgsIDB4MDEsIDB4N2IsIDB4MDAsIDB4MjksIDB4MGQsIDB4ZDEsIDB4ZmYsIDB4MzAsIDB4NDEsIDB4MzAsCisweDQwLCAweDc4LCAweDAwLCAweDI4LCAweDA4LCAweGQxLCAweGI4LCAweDY4LCAweDAyLCAweGYwLCAweDkwLCAweGZmLAorMHgwMCwgMHgyMCwgMHhmOCwgMHg2MCwgMHhlNiwgMHg2MiwgMHgwMSwgMHhlMCwgMHgwMCwgMHgyMCwgMHhmOCwgMHg2MCwKKzB4MzgsIDB4NjgsIDB4MDMsIDB4MjgsIDB4MGIsIDB4ZDEsIDB4ZWMsIDB4MWQsIDB4NzksIDB4MzQsIDB4ZTAsIDB4NmIsCisweDgwLCAweDA4LCAweDAyLCAweGQzLCAweDAyLCAweDIwLCAweDAyLCAweGYwLCAweDA3LCAweGZjLCAweDAyLCAweDIzLAorMHhlMCwgMHg2YiwgMHg5OCwgMHg0MywgMHhlMCwgMHg2MywgMHgzOCwgMHg2OCwgMHgwMSwgMHgzMCwgMHgzOCwgMHg2MCwKKzB4MDMsIDB4MjgsIDB4MDEsIDB4ZDksIDB4MDAsIDB4MjAsIDB4MzgsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDNjLCAweDA0LCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwKKzB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjQsIDB4MWQsIDB4NDgsCisweDg0LCAweDhhLCAweDFkLCAweDRhLCAweDEzLCAweDhhLCAweGMxLCAweDFkLCAweDA5LCAweDMxLCAweDAxLCAweDI3LAorMHg5YywgMHg0MiwgMHgwMywgMHhkMSwgMHg0MywgMHg4YSwgMHg1NCwgMHg4YSwgMHhhMywgMHg0MiwgMHgxMCwgMHhkMCwKKzB4MGIsIDB4NzgsIDB4MDAsIDB4MmIsIDB4MGQsIDB4ZDAsIDB4NGIsIDB4NzgsIDB4MDAsIDB4MmIsIDB4MGEsIDB4ZDAsCisweDQ0LCAweDhiLCAweDkzLCAweDhhLCAweDljLCAweDQyLCAweDA0LCAweGRjLCAweDEzLCAweDRiLCAweGMwLCAweDQ2LAorMHg1ZiwgMHg2MCwgMHg5NywgMHg4MiwgMHgwMSwgMHhlMCwgMHgwMSwgMHgzMywgMHg5MywgMHg4MiwgMHhjMywgMHg4YiwKKzB4NWMsIDB4MWMsIDB4YzQsIDB4ODMsIDB4ODQsIDB4OGIsIDB4YTMsIDB4NDIsIDB4MGUsIDB4ZGIsIDB4ODQsIDB4OGEsCisweDA1LCAweDhiLCAweDAwLCAweDIzLCAweGFjLCAweDQyLCAweDA1LCAweGRhLCAweDQ0LCAweDhhLCAweGM1LCAweDhhLAorMHhhYywgMHg0MiwgMHgwMSwgMHhkYSwgMHg0YiwgMHg3MCwgMHgwMCwgMHhlMCwgMHg0ZiwgMHg3MCwgMHg0MywgMHg4MiwKKzB4ODMsIDB4ODIsIDB4YzMsIDB4ODMsIDB4NDEsIDB4OGEsIDB4YzAsIDB4NDYsIDB4NTEsIDB4ODIsIDB4ODAsIDB4OGEsCisweGMwLCAweDQ2LCAweDEwLCAweDgyLCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGU4LCAweDBlLCAweDAwLCAweDgwLAorMHgzYywgMHgwNCwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMSwgMHgxOCwgMHgwMCwgMHhmNywgMHhiNSwgMHg5MSwgMHhiMCwKKzB4NmIsIDB4NDYsIDB4ODQsIDB4MWUsIDB4MTIsIDB4OTksIDB4MTQsIDB4MjksIDB4MWEsIDB4ZDksIDB4MDAsIDB4MjAsCisweDgxLCAweDAwLCAweDY3LCAweDU4LCAweGMwLCAweDQ2LCAweDU3LCAweDUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAorMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwgMHhmNiwgMHhkMywgMHgwMCwgMHgyMSwgMHgwNSwgMHgyMCwgMHg4NywgMHgwMCwKKzB4ZDYsIDB4NTksIDB4NGYsIDB4MWMsIDB4M2QsIDB4MDYsIDB4MmQsIDB4MGUsIDB4MGYsIDB4MWMsIDB4YmYsIDB4MDAsCisweGRlLCAweDUxLCAweDI5LCAweDFjLCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDEwLCAweDI4LAorMHhmMSwgMHhkMywgMHgwOSwgMHhlMCwgMHgwMCwgMHgyMCwgMHg4MSwgMHgwMCwgMHg2MywgMHg1OCwgMHhjMCwgMHg0NiwKKzB4NTMsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDYsIDB4MjgsIDB4ZjYsIDB4ZDMsCisweDAwLCAweDIwLCAweGUwLCAweDcwLCAweDIwLCAweDcyLCAweDYwLCAweDcyLCAweGEwLCAweDcyLCAweDIwLCAweDczLAorMHg2MCwgMHg3MywgMHgxMiwgMHg5OSwgMHgxNCwgMHgyOSwgMHgzNywgMHhkOSwgMHg2OSwgMHg0NiwgMHg4ZSwgMHgxYywKKzB4OTEsIDB4NzgsIDB4MDksIDB4MDcsIDB4MDksIDB4MGYsIDB4ODksIDB4MDAsIDB4MTQsIDB4MzksIDB4MGQsIDB4MDYsCisweDJkLCAweDE2LCAweDAwLCAweDI3LCAweDAwLCAweDJkLCAweDFiLCAweGRkLCAweGYwLCAweDE5LCAweDEwLCAweGE5LAorMHgwMCwgMHhmMCwgMHgzZCwgMHhmOCwgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwKKzB4MDAsIDB4MjAsIDB4MTAsIDB4YTksIDB4MDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MDksIDB4ZGQsIDB4MDAsIDB4MjIsCisweDM5LCAweDE4LCAweDcyLCAweDU0LCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDEwLCAweGE5LAorMHgwOSwgMHg3OCwgMHg4OCwgMHg0MiwgMHhmNiwgMHhkYiwgMHgxMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHgzOCwgMHgxOCwKKzB4MDcsIDB4MDYsIDB4M2YsIDB4MGUsIDB4YWYsIDB4NDIsIDB4ZTMsIDB4ZGIsIDB4NjgsIDB4NDYsIDB4ZTIsIDB4MWQsCisweDBkLCAweDMyLCAweDAwLCAweDIxLCAweGFiLCAweDA4LCAweDVmLCAweDFjLCAweDA4LCAweGQwLCAweDhiLCAweDAwLAorMHhjNCwgMHg1OCwgMHhjMCwgMHg0NiwgMHhkNCwgMHg1MCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwKKzB4OGYsIDB4NDIsIDB4ZjYsIDB4ZDgsIDB4MTQsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDkwLCAweGI0LCAweDg3LCAweDFlLCAweDAwLCAweDIwLCAweDg5LCAweDA4LCAweDRiLCAweDFjLCAweDA4LCAweGQwLAorMHg4MSwgMHgwMCwgMHg1NCwgMHg1OCwgMHhjMCwgMHg0NiwgMHg3YywgMHg1MCwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwKKzB4MDAsIDB4MGUsIDB4ODMsIDB4NDIsIDB4ZjYsIDB4ZDgsIDB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjQsCisweDAyLCAweDc4LCAweGQyLCAweDA2LCAweGQyLCAweDBlLCAweDAwLCAweDIzLCAweDAxLCAweDI3LCAweDAxLCAweDJhLAorMHgwMSwgMHhkYywgMHgwZiwgMHg3MCwgMHgxMSwgMHhlMCwgMHg0MCwgMHg3OCwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MCwKKzB4MTQsIDB4MmEsIDB4MDQsIDB4ZDEsIDB4MDgsIDB4NDgsIDB4MDEsIDB4N2EsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NzIsCisweDA3LCAweGUwLCAweDAyLCAweDJhLCAweDA1LCAweGQwLCAweDA1LCAweDJhLCAweDAzLCAweGQwLCAweDA2LCAweDJhLAorMHgwMSwgMHhkMCwgMHgxNSwgMHgyYSwgMHgwMiwgMHhkMSwgMHgxOCwgMHgxYywgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKKzB4MzgsIDB4MWMsIDB4ZmIsIDB4ZTcsIDB4ZTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4MGYsIDB4NDgsCisweDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQxLCAweDY5LCAweDk5LCAweDQzLCAweDFhLCAweDA5LCAweDQxLCAweDYxLAorMHhkMSwgMHg2MCwgMHgwMCwgMHgyMSwgMHhhMSwgMHgyMiwgMHg1MiwgMHgwMywgMHg5MSwgMHg2MSwgMHgxOSwgMHgxYywKKzB4MDksIDB4NGEsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsCisweDgwLCAweDY5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDAyLCAweGYwLCAweDYxLCAweGZlLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHgwNCwgMHg0OCwgMHg0MSwgMHg4OCwgMHgwMSwgMHgzMSwgMHg0MSwgMHg4MCwgMHhmOCwgMHhlNywKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4ZTAsIDB4ODIsIDB4MjAsIDB4NDAsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGYwLCAweGI1LCAweDg2LCAweGIwLCAweDk1LCAweDRhLCAweGQwLCAweDY4LAorMHhkNywgMHgxZCwgMHg3OSwgMHgzNywgMHgwMSwgMHgyOCwgMHgwOSwgMHhkMSwgMHgzOCwgMHg4OSwgMHgwMCwgMHgyOCwKKzB4MDYsIDB4ZDEsIDB4ZDAsIDB4NmYsIDB4MDIsIDB4MjMsIDB4MDEsIDB4NjgsIDB4OTksIDB4NDMsIDB4MDEsIDB4NjAsCisweDE0LCAweDIwLCAweDM4LCAweDgxLCAweDhlLCAweDRjLCAweDYxLCAweDZhLCAweDhlLCAweDQ4LCAweGMzLCAweDZiLAorMHg1OSwgMHgxOCwgMHhjMSwgMHg2MywgMHhhMCwgMHg2YSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhkNCwgMHgxOCwKKzB4YTAsIDB4NjIsIDB4MjEsIDB4NmEsIDB4MDksIDB4MDMsIDB4MDksIDB4MGIsIDB4ODEsIDB4NDIsIDB4MDUsIDB4ZDEsCisweDAxLCAweDIwLCAweDQwLCAweDA0LCAweDg3LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGYzLCAweGUwLAorMHhiYiwgMHg4YSwgMHg1OCwgMHgxYywgMHhiOCwgMHg4MiwgMHgzZCwgMHg4YiwgMHgwMSwgMHgyMCwgMHgwMCwgMHgyMSwKKzB4YWIsIDB4NDIsIDB4MDQsIDB4ZGIsIDB4ZDMsIDB4MWQsIDB4ODksIDB4MzMsIDB4NTgsIDB4NzAsIDB4YjksIDB4ODIsCisweGY5LCAweDgzLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDA1LCAweDkzLCAweDViLCAweDY5LAorMHgwZiwgMHgyYiwgMHg3MywgMHhkMiwgMHgwMCwgMHgyMSwgMHg3YywgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzOSwgMHg2MSwKKzB4MjEsIDB4NmEsIDB4OGEsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NGIsIDB4NjgsIDB4MWUsIDB4MGMsCisweDM2LCAweDA0LCAweGZkLCAweDFmLCAweDA5LCAweDNkLCAweDAwLCAweDJlLCAweDA1LCAweGQxLCAweDNiLCAweDJhLAorMHgwMywgMHhkMywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHg5YSwgMHg0MiwgMHgwMSwgMHhkOSwgMHhhOCwgMHg3MywKKzB4YzgsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzEsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCisweGMwLCAweDQ2LCAweDAzLCAweDkxLCAweDAzLCAweGE5LCAweDA5LCAweDg4LCAweDAxLCAweDMxLCAweDA5LCAweDA0LAorMHgwOSwgMHgwYywgMHg3OSwgMHg4MiwgMHg0OSwgMHgwOSwgMHgwNSwgMHgzMSwgMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwKKzB4NjksIDB4NGUsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTYsIDB4NjksIDB4NDgsIDB4NDMsIDB4NmEsIDB4YzAsIDB4NDYsCisweDAxLCAweDkzLCAweDgzLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkzLCAweGMyLCAweDFkLCAweDExLCAweDMyLAorMHg4MCwgMHg2OSwgMHgwMCwgMHgwMywgMHgwMCwgMHgwYiwgMHg5MiwgMHg2OCwgMHhiMywgMHgwNywgMHgxYSwgMHg0MywKKzB4MTIsIDB4NjgsIDB4OTAsIDB4NDIsIDB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsCisweDBkLCAweGUwLCAweDkwLCAweDQyLCAweDA1LCAweGQ5LCAweDAwLCAweDliLCAweDE4LCAweDFhLCAweDAxLCAweDliLAorMHhkMiwgMHgxYSwgMHg4MiwgMHgxOCwgMHgwMCwgMHhlMCwgMHgxMiwgMHgxYSwgMHgwMSwgMHgyMCwgMHgwOSwgMHgwMSwKKzB4OTEsIDB4NDIsIDB4MDAsIDB4ZDMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjgsIDB4NjUsIDB4ZDEsIDB4NTEsIDB4NDksCisweDIwLCAweDY5LCAweDAwLCAweDI4LCAweDYyLCAweGQwLCAweDA1LCAweDk5LCAweDQ4LCAweDY5LCAweDAxLCAweDMwLAorMHg0OCwgMHg2MSwgMHgwMiwgMHgyMCwgMHgyMSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKKzB4YTcsIDB4ZmMsIDB4NzgsIDB4NjMsIDB4YmUsIDB4NjAsIDB4NDksIDB4NDksIDB4MjIsIDB4NmEsIDB4YTMsIDB4NmIsCisweGQzLCAweDE4LCAweDY2LCAweDZiLCAweGIzLCAweDQyLCAweDAwLCAweGQ5LCAweDIyLCAweDZiLCAweGMwLCAweDQ2LAorMHhiYSwgMHg2MiwgMHhiYSwgMHg2YSwgMHgwYywgMHgzMiwgMHhmYSwgMHg2MiwgMHgwMCwgMHgyMiwgMHhmYSwgMHg2MSwKKzB4MDMsIDB4YWEsIDB4NTIsIDB4ODgsIDB4ZDIsIDB4MDksIDB4MDMsIDB4ZDMsIDB4MDEsIDB4MjIsIDB4MDAsIDB4ZTAsCisweDdiLCAweGUwLCAweDAwLCAweGUwLCAweDAwLCAweDIyLCAweDdhLCAweDYwLCAweDdhLCAweDY4LCAweGMwLCAweDQ2LAorMHgwMiwgMHg2MCwgMHg3OCwgMHg4YSwgMHg0MSwgMHg0ZSwgMHg2MCwgMHgyOCwgMHgwNCwgMHhkYywgMHhiMCwgMHg4MywKKzB4NzgsIDB4OGEsIDB4YzAsIDB4NDYsIDB4ZjAsIDB4ODMsIDB4MDgsIDB4ZTAsIDB4NjAsIDB4MjAsIDB4YjAsIDB4ODMsCisweDc5LCAweDhhLCAweGY4LCAweDZhLCAweDQyLCAweDE4LCAweDYzLCAweDZiLCAweDlhLCAweDQyLCAweDAzLCAweGQ4LAorMHhmMSwgMHg4MywgMHgwMCwgMHgyMiwgMHgzYSwgMHg2MywgMHgwNSwgMHhlMCwgMHgyMSwgMHg2YiwgMHhjMCwgMHg0NiwKKzB4MzksIDB4NjMsIDB4NjEsIDB4NmIsIDB4MDgsIDB4MWEsIDB4ZjAsIDB4ODMsIDB4MmQsIDB4NDksIDB4NzgsIDB4NmIsCisweDQyLCAweDY4LCAweGMwLCAweDQ2LCAweGJhLCAweDYwLCAweDgyLCAweDY4LCAweGMwLCAweDQ2LCAweGZhLCAweDYwLAorMHgwMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg3YSwgMHg2MSwgMHg0MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MSwKKzB4MmUsIDB4NGIsIDB4YzgsIDB4MTgsIDB4MDQsIDB4OTAsIDB4MDAsIDB4ZjAsIDB4MzcsIDB4ZjksIDB4MDQsIDB4OTgsCisweDAwLCAweGYwLCAweDg4LCAweGY4LCAweDAwLCAweGYwLCAweGY2LCAweGZhLCAweDc4LCAweDhhLCAweGYxLCAweDhiLAorMHg4OCwgMHg0MiwgMHgwNCwgMHhkMSwgMHhmOSwgMHg2YSwgMHgwOCwgMHgxOCwgMHgwNCwgMHhlMCwgMHgzOCwgMHhlMCwKKzB4MzIsIDB4ZTAsIDB4M2EsIDB4NmIsIDB4MTAsIDB4MTgsIDB4NDAsIDB4MWEsIDB4ODEsIDB4MDcsIDB4MDIsIDB4ZDAsCisweDgwLCAweDA4LCAweDgwLCAweDAwLCAweDA0LCAweDMwLCAweDYxLCAweDZiLCAweDA5LCAweDFhLCAweGEyLCAweDZiLAorMHg5MSwgMHg0MiwgMHgwMCwgMHhkMiwgMHgyMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MiwgMHhlOCwgMHg3YiwKKzB4MDAsIDB4MjgsIDB4MDgsIDB4ZDAsIDB4MDAsIDB4MjIsIDB4ZWEsIDB4NzMsIDB4MDUsIDB4OTksIDB4NDgsIDB4NjksCisweDAxLCAweDM4LCAweDQ4LCAweDYxLCAweDc4LCAweDZiLCAweDAwLCAweGYwLCAweDczLCAweGZhLCAweDE4LCAweDQ4LAorMHg4MCwgMHg2YSwgMHg4MCwgMHgwNiwgMHg4MCwgMHgwZSwgMHgwMSwgMHgyOCwgMHgwYSwgMHhkMSwgMHgyMCwgMHg2YSwKKzB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4MGIsIDB4NGMsIDB4YTEsIDB4NmEsIDB4ODgsIDB4NDIsIDB4MDMsIDB4ZDAsCisweDA2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDIwLCAweDQwLCAweDA0LAorMHgwOCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwNiwgMHhlMCwgMHhlMCwgMHg2OCwgMHgwMCwgMHgyOCwKKzB4MDEsIDB4ZDAsIDB4MDAsIDB4ZjAsIDB4YjUsIDB4ZmEsIDB4MDEsIDB4MjAsIDB4YTgsIDB4NzMsIDB4ZWQsIDB4ZTcsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDQwLCAweDE0LCAweDQwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg1NSwgMHg1NSwgMHg1NSwgMHg1NSwKKzB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4YzQsIDB4MGIsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweDc4LCAweDZhLCAweDQwLCAweDg5LAorMHhmZiwgMHgyMSwgMHgwMSwgMHgzMSwgMHgwMSwgMHg0MCwgMHgxMCwgMHg0OCwgMHgwMiwgMHhkMSwgMHg4MSwgMHg2YywKKzB4MDEsIDB4MzEsIDB4ODEsIDB4NjQsIDB4NzksIDB4NmEsIDB4NDksIDB4ODksIDB4NDksIDB4MGIsIDB4MDIsIDB4ZDIsCisweDQxLCAweDZjLCAweDAxLCAweDMxLCAweDQxLCAweDY0LCAweDBiLCAweDQ4LCAweDQxLCAweDZhLCAweDAxLCAweDMxLAorMHg0MSwgMHg2MiwgMHg3OCwgMHg2YSwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MiwgMHgzOCwgMHg2YiwKKzB4MDAsIDB4ZjAsIDB4ZjgsIDB4ZmIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjMsIDB4ZjgsIDB4MDEsIDB4MjAsCisweDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDczLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgxOCwgMHgxYSwgMHgwMCwgMHg4MCwKKzB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MDAsIDB4MjIsIDB4ZjksIDB4MWQsIDB4NjEsIDB4MzEsIDB4MGQsIDB4MWMsCisweDc4LCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkwLCAweDQwLCAweDg5LAorMHgwMywgMHgwYywgMHgwMSwgMHhkMiwgMHg0MCwgMHgwYSwgMHgwMywgMHhkMiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKKzB4YzEsIDB4ZmYsIDB4NjcsIDB4ZTAsIDB4MzUsIDB4NDgsIDB4YzAsIDB4NmIsIDB4MDAsIDB4MDksIDB4MWYsIDB4ZDMsCisweDA4LCAweDc4LCAweDQwLCAweDA4LCAweDFjLCAweGQyLCAweDAwLCAweDIwLCAweDQzLCAweDAwLCAweGNjLCAweDVhLAorMHgzMSwgMHg0ZSwgMHg5ZSwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHgxYiwgMHg4OCwKKzB4OWMsIDB4NDIsIDB4MGUsIDB4ZDAsIDB4YjgsIDB4NjksIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjEsCisweGY4LCAweDY4LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAorMHgyNywgMHhmOSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3NCwgMHhmOCwgMHg0NiwgMHhlMCwgMHgwMSwgMHgzMCwKKzB4MDMsIDB4MjgsIDB4ZTMsIDB4ZGIsIDB4MDIsIDB4MjAsIDB4NDMsIDB4MDAsIDB4NWMsIDB4MTgsIDB4ZTQsIDB4ODgsCisweDIyLCAweDRlLCAweDllLCAweDE5LCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGYzLCAweDE4LCAweDFiLCAweDg4LAorMHg5YywgMHg0MiwgMHgwMywgMHhkMSwgMHgwMSwgMHgyMywgMHgwMSwgMHgzOCwgMHhkOCwgMHg0MiwgMHhmMCwgMHhkYywKKzB4MDEsIDB4MjMsIDB4ZDgsIDB4NDIsIDB4YzQsIDB4ZDAsIDB4MWIsIDB4NGUsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsCisweGYwLCAweDE4LCAweDQwLCAweDY5LCAweDAwLCAweDI4LCAweDI0LCAweGQwLCAweDdkLCAweDYzLCAweDAwLCAweDk4LAorMHg0MCwgMHg4OSwgMHgwMCwgMHgwYywgMHgxZiwgMHhkMiwgMHgwMCwgMHgyNCwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwKKzB4ZjAsIDB4MTgsIDB4YzAsIDB4NmIsIDB4MzUsIDB4MWMsIDB4MDAsIDB4MjgsIDB4MTcsIDB4ZDAsIDB4ZmUsIDB4MWQsCisweDJkLCAweDM2LCAweGEyLCAweDAwLCAweDUyLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LAorMHhkMiwgMHg2YiwgMHgzOCwgMHgxYywgMHgzMSwgMHgxYywgMHgwMiwgMHhmMCwgMHg3YiwgMHhmYywgMHgwMSwgMHgyOCwKKzB4MGUsIDB4ZDAsIDB4MDEsIDB4MzQsIDB4YTAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsCisweGMwLCAweDE4LCAweGMwLCAweDZiLCAweDAwLCAweDI4LCAweGVhLCAweGQxLCAweDAxLCAweGUwLCAweDAxLCAweDJhLAorMHgwMiwgMHhkMCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOCwgMHhmOCwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZTgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDgwLCAweGI1LCAweDA3LCAweDFjLCAweGI4LCAweDY5LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDg4LCAweDYxLAorMHhmOCwgMHg2OCwgMHgzOSwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHg3OCwgMHg2YSwgMHg0MCwgMHg4OSwKKzB4MDEsIDB4MGMsIDB4MGUsIDB4ZDIsIDB4NDAsIDB4MGEsIDB4MGMsIDB4ZDMsIDB4MzgsIDB4NjgsIDB4NDAsIDB4MDgsCisweDAyLCAweGQzLCAweDM4LCAweDFjLCAweDAyLCAweGYwLCAweDBjLCAweGZjLCAweDM4LCAweDFjLCAweDAwLCAweGYwLAorMHhiYiwgMHhmOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwOCwgMHhmOCwgMHgwMiwgMHhlMCwgMHgzOCwgMHgxYywKKzB4ZmYsIDB4ZjcsIDB4MzAsIDB4ZmYsIDB4MDEsIDB4MjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDAxLCAweDIxLCAweDAwLCAweDZiLCAweDQwLCAweDZhLCAweGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDcwLCAweDQ3LAorMHhiMCwgMHhiNCwgMHhjMSwgMHgxZCwgMHgzOSwgMHgzMSwgMHgwOSwgMHg4YiwgMHg4OSwgMHgwOCwgMHgwOSwgMHgwNCwKKzB4MDksIDB4MGMsIDB4ODQsIDB4NmEsIDB4YzIsIDB4MWQsIDB4NjEsIDB4MzIsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjksCisweDBjLCAweGRkLCAweDg3LCAweDAwLCAweDNkLCAweDE5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDJiLCAweDQzLAorMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwgMHhkMywgMHg1MSwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKKzB4ODgsIDB4NDIsIDB4ZjIsIDB4ZGIsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4YTAsIDB4YjAsCisweDAxLCAweDIzLCAweDliLCAweDA3LCAweGMxLCAweDFkLCAweDIxLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAorMHhjMCwgMHg0NiwgMHgwYiwgMHg5MSwgMHhjMSwgMHgxZCwgMHg1MywgMHgzMSwgMHgxOSwgMHg0MywgMHgxZiwgMHg5MSwKKzB4MDksIDB4NjgsIDB4MDEsIDB4YWYsIDB4ZmEsIDB4MWQsIDB4MzksIDB4MzIsIDB4MWUsIDB4OTIsIDB4MTcsIDB4YWIsCisweDU5LCAweDgwLCAweDNhLCAweDQ5LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDBhLCAweDZhLCAweDEzLCAweDQzLAorMHhjYywgMHgxZCwgMHgxMSwgMHgzNCwgMHg4OSwgMHg2OSwgMHgwOSwgMHgwMywgMHgwOSwgMHgwYiwgMHgyMiwgMHg2OSwKKzB4ZTUsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MWQsIDB4OTUsIDB4ZmMsIDB4MWQsIDB4MzksIDB4MzQsIDB4NjQsIDB4OGIsCisweDY0LCAweDA5LCAweDA1LCAweDM0LCAweDI0LCAweDA2LCAweDI0LCAweDBlLCAweDFjLCAweDk0LCAweDU2LCAweDFhLAorMHgxYiwgMHg5NiwgMHgxYywgMHg5YywgMHgyZSwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwMSwgMHgyNiwKKzB4MWQsIDB4OWQsIDB4MWEsIDB4NjgsIDB4OTEsIDB4NDIsIDB4MDEsIDB4ZDEsIDB4MzIsIDB4MWMsIDB4MGIsIDB4ZTAsCisweDkxLCAweDQyLCAweDAzLCAweGQ5LCAweDUyLCAweDFiLCAweDFiLCAweDllLCAweGI1LCAweDE4LCAweDAwLCAweGUwLAorMHg1NSwgMHgxYSwgMHgwMSwgMHgyMiwgMHgyNCwgMHgwMSwgMHhhYywgMHg0MiwKKzB4MDAsIDB4ZDMsIDB4MDAsIDB4MjIsIDB4MDEsIDB4MmEsIDB4ZTYsIDB4ZDEsIDB4OTEsIDB4MDcsIDB4MDEsIDB4NDMsCisweDA5LCAweDY4LCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweDkzLCAweDA3LCAweDAxLCAweDFkLCAweDE5LCAweDQzLAorMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2MCwgMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgMHgxOSwgMHg0MywKKzB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjksIDB4NjAsIDB4MWYsIDB4OTksIDB4MDksIDB4NjgsIDB4MWUsIDB4OWEsCisweGMwLCAweDQ2LCAweDUxLCAweDgzLCAweGMxLCAweDFkLCAweDFkLCAweDMxLCAweDE5LCAweDQzLCAweDA5LCAweDY4LAorMHhjMCwgMHg0NiwgMHgzOCwgMHg2MywgMHg3OSwgMHg2MiwgMHhjMSwgMHgxZCwgMHgxMSwgMHgzMSwgMHgxOSwgMHg0MywKKzB4MDksIDB4NjgsIDB4YzAsIDB4NDYsIDB4YjksIDB4NjEsIDB4YzEsIDB4MWQsIDB4MDUsIDB4MzEsIDB4MTksIDB4NDMsCisweDA5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweGMxLCAweDFkLCAweDE3LCAweDMxLCAweDE5LCAweDQzLAorMHgwOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg4MywgMHgwZSwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4ZjgsIDB4ODEsIDB4MzgsIDB4NjgsIDB4NDAsIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MzgsIDB4MWMsCisweDAyLCAweGYwLCAweDVjLCAweGZiLCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDBiLCAweGY4LCAweDM4LCAweDFjLAorMHhmZiwgMHhmNywgMHg1OCwgMHhmZiwgMHgyMCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4YTgsIDB4MDMsIDB4MDAsIDB4ODAsIDB4NTUsIDB4NTUsIDB4NTUsIDB4NTUsIDB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsCisweGY4LCAweDFkLCAweDM5LCAweDMwLCAweDQxLCAweDhiLCAweDM5LCAweDRhLCAweDkxLCAweDQyLCAweDAwLCAweGRkLAorMHg0MiwgMHg4MywgMHg0MiwgMHg4YiwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgwMSwgMHgyMCwgMHgzYSwgMHgxZCwKKzB4MDYsIDB4Y2EsIDB4YmIsIDB4NmEsIDB4MDIsIDB4ZjAsIDB4MGUsIDB4ZmYsIDB4MzMsIDB4NGEsIDB4YzAsIDB4NDYsCisweDAwLCAweDkyLCAweDMzLCAweDRlLCAweDMwLCAweDZhLCAweDMzLCAweDRjLCAweGUxLCAweDZkLCAweDQxLCAweDE4LAorMHgzOCwgMHg2YiwgMHhjMywgMHgxZCwgMHgwNSwgMHgzMywgMHgwMSwgMHgyMCwgMHg3MiwgMHg2YSwgMHgwMiwgMHhmMCwKKzB4ZmIsIDB4ZmUsIDB4ZTAsIDB4NmQsIDB4MTgsIDB4MzAsIDB4MDAsIDB4MjUsIDB4YjEsIDB4NmEsIDB4ODEsIDB4NDIsCisweDAxLCAweGQ4LCAweGU1LCAweDY1LCAweDAwLCAweGUwLCAweGUwLCAweDY1LCAweDJmLCAweDIzLCAweDliLCAweDAxLAorMHgyMCwgMHgxYywgMHhlMSwgMHg2ZCwgMHhlNCwgMHgxOCwgMHgyMiwgMHg2OCwgMHg5MiwgMHgwMCwgMHgyNywgMHg0YiwKKzB4YzAsIDB4NDYsIDB4OTksIDB4NTAsIDB4MjYsIDB4NDgsIDB4YzEsIDB4NmIsIDB4NGEsIDB4MDgsIDB4MDUsIDB4ZDMsCisweDQ5LCAweDA4LCAweDQ5LCAweDAwLCAweGMxLCAweDYzLCAweDAxLCAweDIwLCAweDAxLCAweGYwLCAweGQ2LCAweGZmLAorMHgyMiwgMHg0YSwgMHgxZiwgMHg0OCwgMHhjMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHgwYiwgMHg3OCwgMHgwMCwgMHgyYiwKKzB4MDIsIDB4ZDAsIDB4NDksIDB4NzgsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZDEsIDB4MWUsIDB4NGEsIDB4YzAsIDB4NDYsCisweDAwLCAweDkyLCAweDIwLCAweDY4LCAweDgwLCAweDAwLCAweDE5LCAweDRiLCAweGMzLCAweDE4LCAweDA1LCAweGNlLAorMHhjMSwgMHgxZCwgMHgxMSwgMHgzMSwgMHgwMSwgMHgyMCwgMHgwMiwgMHhmMCwgMHhjNywgMHhmZSwgMHgxNCwgMHg0OCwKKzB4MjEsIDB4NjgsIDB4MDEsIDB4MzEsIDB4MjEsIDB4NjAsIDB4MTcsIDB4MjksIDB4MDAsIDB4ZDMsIDB4MjUsIDB4NjAsCisweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweDBkLCAweDY1LCAweDc5LCAweDZhLCAweDNhLCAweDZiLCAweGMwLCAweDQ2LAorMHg1MSwgMHg2MiwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2OCwgMHgwMCwgMHgyOSwKKzB4MDMsIDB4ZDEsIDB4MzksIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODEsIDB4NjAsIDB4MDQsIDB4ZTAsIDB4MzksIDB4NmIsCisweGMyLCAweDY4LCAweGMwLCAweDQ2LCAweDExLCAweDY1LCAweDM5LCAweDZiLCAweGMwLCAweDQ2LCAweGMxLCAweDYwLAorMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlYSwgMHgwNSwgMHgwMCwgMHgwMCwKKzB4MTgsIDB4MDAsIDB4MTQsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDQ0LCAweDgyLCAweDIwLCAweDQwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweDA0LCAweDAwLCAweDAwLCAweDAyLAorMHgwNCwgMHgwMCwgMHgwMCwgMHgwMywgMHhmMCwgMHhiNSwgMHgxMSwgMHg0ZSwgMHhmZiwgMHgyNSwgMHgwMSwgMHgzNSwKKzB4MTAsIDB4NGYsIDB4YzAsIDB4NDYsIDB4MzUsIDB4NjAsIDB4NzgsIDB4NjksIDB4MDEsIDB4MzgsIDB4NzgsIDB4NjEsCisweGJjLCAweDY4LCAweDAwLCAweDJjLCAweDEwLCAweGQwLCAweDIwLCAweDZkLCAweGMwLCAweDQ2LCAweGI4LCAweDYwLAorMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgyMSwgMHhmOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNCwgMHhmYSwKKzB4MDgsIDB4NDgsIDB4ODAsIDB4NmEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDcsIDB4ZTksIDB4ZDEsIDB4ZjAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA1LCAweDQ4LCAweGMxLCAweDc5LCAweDAxLCAweDMxLCAweGMxLCAweDcxLAorMHhmNywgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHgyOCwgMHgxYiwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCisweDAxLCAweDIwLCAweDgwLCAweDAzLCAweDAxLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDcwLCAweDQ3LAorMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgzOCwgMHg2OCwgMHhjMCwgMHgwOCwKKzB4MDksIDB4ZDMsIDB4MWQsIDB4NDgsIDB4MDEsIDB4NmEsIDB4MDEsIDB4MzksIDB4MDEsIDB4NjIsIDB4MjAsIDB4MzAsCisweDAwLCAweDc5LCAweDAwLCAweDI4LCAweDAxLCAweGQwLCAweGZlLCAweGY3LCAweGU5LCAweGZkLCAweDAxLCAweDIzLAorMHg5YiwgMHgwNywgMHhmOCwgMHgxZCwgMHgxZCwgMHgzMCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHgxNiwgMHg0YywKKzB4NjEsIDB4NmEsIDB4ODEsIDB4NDIsIDB4MjEsIDB4ZDEsIDB4MDEsIDB4MWMsIDB4MTksIDB4NDMsIDB4MDksIDB4NjgsCisweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDI5LCAweDFhLCAweGQxLCAweDAwLCAweGYwLCAweDIyLCAweGY4LAorMHg2MCwgMHg2MiwgMHg2MCwgMHg2YSwgMHgyMSwgMHg2YSwgMHg4OCwgMHg0MiwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyMSwKKzB4ODksIDB4MDcsIDB4MDEsIDB4NDMsIDB4MDksIDB4NjgsIDB4MDksIDB4MDQsIDB4ZjIsIDB4ZDAsIDB4NTEsIDB4MjEsCisweDg5LCAweDAzLCAweDYyLCAweDZhLCAweDIzLCAweDZiLCAweDlhLCAweDQyLCAweDAyLCAweGQxLCAweDYwLCAweDZiLAorMHhhMiwgMHg2YiwgMHg4MCwgMHgxYSwgMHgwNCwgMHgzOCwgMHhjOCwgMHg2MCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzksIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZjcsIDB4ZTcsCisweDZjLCAweDA2LCAweDAwLCAweDgwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDAxLCAweDIzLCAweDliLCAweDA3LAorMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwgMHgxOSwgMHg0MywgMHgwOSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywKKzB4MDgsIDB4MTgsIDB4MGQsIDB4MzAsIDB4ODEsIDB4MDcsIDB4MDIsIDB4ZDAsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsCisweDA0LCAweDMwLCAweDA0LCAweDQ5LCAweDhhLCAweDZiLCAweDEyLCAweDE4LCAweDRiLCAweDZiLCAweDlhLCAweDQyLAorMHgwMCwgMHhkOSwgMHgwOCwgMHg2YiwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4YjUsIDB4MDQsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MTAsIDB4MjgsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4ZjAsCisweDA1LCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGU4LCAweDFhLCAweDAwLCAweDgwLAorMHg4OCwgMHhiNSwgMHgwYywgMHg0ZiwgMHgzOCwgMHg3OSwgMHgwMCwgMHgyOCwgMHgxMSwgMHhkMSwgMHgwYiwgMHg0OSwKKzB4MTAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ZjUsIDB4ZmQsIDB4MDAsIDB4MjgsIDB4MGIsIDB4ZDAsIDB4MDEsIDB4MjAsCisweDM4LCAweDcxLCAweDA4LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDA3LCAweDQ4LCAweDQyLCAweDY4LAorMHgwNywgMHg0YiwgMHgwMSwgMHg2OCwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHhkZiwgMHhmZCwgMHg4OCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjgsIDB4MWEsIDB4MDAsIDB4ODAsIDB4ZjUsIDB4MmMsIDB4ZmYsIDB4ZmYsCisweDEwLCAweDAwLCAweDM1LCAweDAyLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAorMHg5MCwgMHhiNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwMiwgMHgxMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwKKzB4MGYsIDB4NGYsIDB4MTAsIDB4MjEsIDB4ZjgsIDB4MWQsIDB4M2QsIDB4MzAsIDB4MDIsIDB4ZjAsIDB4NGMsIDB4ZmMsCisweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGZjLCAweDE4LCAweGUwLCAweDY4LCAweDAwLCAweDI4LCAweDAxLCAweGQwLAorMHgwMCwgMHhmMCwgMHgxNCwgMHhmOCwgMHgwMCwgMHgyMCwgMHhjOSwgMHgyMywgMHgxYiwgMHgwMSwgMHhmOSwgMHgxOCwKKzB4MDgsIDB4NzEsIDB4ZTAsIDB4NjgsIDB4MTAsIDB4MjgsIDB4MDQsIDB4ZDMsIDB4MDEsIDB4MjAsIDB4YmIsIDB4MjMsCisweDFiLCAweDAxLCAweGY5LCAweDE4LCAweDQ4LCAweDczLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmOCwgMHhiNSwgMHgzNywgMHg0OCwKKzB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzEsIDB4MTgsIDB4YzksIDB4NjgsIDB4MzUsIDB4NGQsIDB4MTAsIDB4MjksCisweDAwLCAweGQ5LCAweDEwLCAweDIxLCAweDY5LCAweDYyLCAweDMyLCAweDQ4LCAweGMxLCAweDZjLCAweDAwLCAweDZlLAorMHg4MSwgMHg0MiwgMHgwNywgMHhkOSwgMHgwOCwgMHgxYSwgMHgwNywgMHgwOSwgMHgwMCwgMHgyNCwgMHg2OCwgMHg2YSwKKzB4YjgsIDB4NDIsIDB4MTIsIDB4ZDIsIDB4MDcsIDB4MWMsIDB4MTAsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MmEsIDB4ZDIsCisweDJjLCAweDRhLCAweDUyLCAweDZiLCAweDEwLCAweDFhLCAweDA3LCAweDA5LCAweDY4LCAweDZhLCAweGI4LCAweDQyLAorMHgwNSwgMHhkOSwgMHgwYywgMHgwOSwgMHgzOSwgMHgxOSwgMHg4OCwgMHg0MiwgMHgwMywgMHhkMiwgMHhjNCwgMHgxYiwKKzB4MDEsIDB4ZTAsIDB4MDAsIDB4MjQsIDB4MDcsIDB4MWMsIDB4M2UsIDB4MTksIDB4MzAsIDB4MDEsIDB4MjUsIDB4NDksCisweDAyLCAweGYwLCAweDg0LCAweGZkLCAweDAwLCAweDI4LCAweDNkLCAweGQwLCAweDIzLCAweDQ4LCAweDAwLCAweDJjLAorMHgxYSwgMHhkMSwgMHgxZSwgMHg0OSwgMHgzYSwgMHgwMSwgMHg2ZiwgMHg2MiwgMHgwOSwgMHg2ZSwgMHg4YywgMHgxOCwKKzB4MWQsIDB4NGQsIDB4NmIsIDB4NmIsIDB4YTMsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4ZTQsIDB4MWEsIDB4MWUsIDB4NGIsCisweDFhLCAweDQzLCAweDAwLCAweDkyLCAweGVhLCAweDZhLCAweDUxLCAweDE4LAorMHgyYSwgMHg2YiwgMHgwMywgMHgxYywgMHgyMCwgMHhlMCwgMHgxYiwgMHg0OCwgMHgwMSwgMHg2YiwgMHgwMSwgMHgzMSwKKzB4MDEsIDB4NjMsIDB4MDAsIDB4MjAsIDB4NjgsIDB4NjIsIDB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDEwLCAweDQ5LCAweDI0LCAweDAxLCAweDNmLCAweDAxLCAweDExLCAweDIyLCAweDUyLCAweDA1LCAweDNhLCAweDQzLAorMHg2ZSwgMHg2MiwgMHgwMCwgMHg5MiwgMHgwZSwgMHg0ZCwgMHhlYSwgMHg2YSwgMHgwOSwgMHg2ZSwgMHg1MSwgMHgxOCwKKzB4MDMsIDB4MWMsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MmEsIDB4NmIsIDB4MDIsIDB4ZjAsIDB4NGEsIDB4ZmQsCisweDBjLCAweDRhLCAweDIyLCAweDQzLCAweDAwLCAweDkyLCAweGJiLCAweDE5LCAweGU5LCAweDZhLCAweDJhLCAweDZiLAorMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg0MSwgMHhmZCwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg2NiwKKzB4MDAsIDB4ZjAsIDB4MTAsIDB4ZjgsIDB4MDEsIDB4MjAsIDB4ZGEsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDI4LCAweDFiLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDVkLCAweDJlLCAweGZmLCAweGZmLAorMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgzNiwgMHgwMiwgMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwKKzB4MDQsIDB4NDgsIDB4MDEsIDB4NmUsIDB4MDQsIDB4NGEsIDB4ODAsIDB4MzAsIDB4ZDEsIDB4NjAsIDB4MDIsIDB4MjMsCisweGMxLCAweDZiLCAweDE5LCAweDQzLCAweGMxLCAweDYzLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwMSwgMHgyMCwgMHg4MCwgMHgwMiwKKzB4MWMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4MjcsIDB4MWIsIDB4NGUsIDB4MzMsIDB4MjMsCisweDliLCAweDAxLCAweGY1LCAweDE4LCAweDY4LCAweDZhLCAweDAwLCAweDI4LCAweDFkLCAweGQ5LCAweDE5LCAweDRjLAorMHg2OCwgMHg0NiwgMHgxMCwgMHgyMSwgMHgwMiwgMHhmMCwgMHg5MCwgMHhmYiwgMHg2OCwgMHg0NiwgMHgwMCwgMHhmMCwKKzB4MzMsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MDQsIDB4ZDAsIDB4MTUsIDB4NDksIDB4NDgsIDB4NjksIDB4MDEsIDB4MzAsCisweDQ4LCAweDYxLCAweDBhLCAweGUwLCAweDEzLCAweDQ5LCAweDYwLCAweDdiLCAweDAxLCAweDMwLCAweDYwLCAweDczLAorMHg4OCwgMHg3OSwgMHgwMSwgMHgzMCwgMHg4OCwgMHg3MSwgMHgxMSwgMHg0OCwgMHgwMCwgMHg2OCwgMHgwMiwgMHhmMCwKKzB4NjUsIDB4ZjksIDB4NjgsIDB4NmEsIDB4MDEsIDB4MzcsIDB4YjgsIDB4NDIsIDB4ZTIsIDB4ZDgsIDB4YmIsIDB4MjMsCisweDFiLCAweDAxLCAweGYwLCAweDE4LCAweDgxLCAweDdiLCAweDAwLCAweDI5LCAweDAzLCAweGQwLCAweDAwLCAweDIxLAorMHg4MSwgMHg3MywgMHhmZiwgMHhmNywgMHgwNSwgMHhmYiwgMHhmZiwgMHhmNywgMHhlMywgMHhmZSwgMHgwNCwgMHhiMCwKKzB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweDgyLCAweDIwLCAweDQwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAorMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHg1OCwgMHgwNCwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgxNywgMHg0ZiwKKzB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZjksIDB4MTgsIDB4MDAsIDB4MjIsIDB4Y2IsIDB4NjgsIDB4MDAsIDB4MmIsCisweDIzLCAweGQwLCAweDAxLCAweDNiLCAweGNiLCAweDYwLCAweDMzLCAweDIzLCAweDliLCAweDAxLCAweGZmLCAweDE4LAorMHhiYiwgMHg2OSwgMHgxYywgMHg2ZCwgMHhjMCwgMHg0NiwgMHhiYywgMHg2MSwgMHgwNCwgMHg2OCwgMHhjMCwgMHg0NiwKKzB4NWMsIDB4NjAsIDB4NDQsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OWMsIDB4NjAsIDB4ODQsIDB4NjgsIDB4YzAsIDB4NDYsCisweDFjLCAweDYxLCAweGMwLCAweDY4LCAweGMwLCAweDQ2LCAweDU4LCAweDYxLCAweDFhLCAweDY1LCAweDA4LCAweDY5LAorMHg0MiwgMHgxYywgMHgwYSwgMHg2MSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwgMHgzOCwgMHg2YSwgMHhjMCwgMHg0NiwKKzB4MDMsIDB4NjUsIDB4MDAsIDB4ZTAsIDB4ZmIsIDB4NjEsIDB4M2IsIDB4NjIsIDB4MTgsIDB4MWMsIDB4OTAsIDB4YmMsCisweDcwLCAweDQ3LCAweDEwLCAweDFjLCAweGZiLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHgwYSwgMHg0YSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhkMSwgMHgxOCwgMHhjOCwgMHg2OSwgMHgxOSwgMHgyMywKKzB4ZGIsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4MTMsIDB4NjksIDB4MDAsIDB4MmIsIDB4MDYsIDB4ZDAsIDB4MDEsIDB4M2IsCisweDEzLCAweDYxLCAweGNhLCAweDY5LCAweDEyLCAweDZkLCAweGMwLCAweDQ2LCAweGNhLCAweDYxLCAweDcwLCAweDQ3LAorMHgwMCwgMHgyMSwgMHgxMSwgMHg2MSwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKKzB4MDYsIDB4NGEsIDB4MTEsIDB4NjksIDB4NGIsIDB4MWMsIDB4MTMsIDB4NjEsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MjksCisweDAxLCAweGQwLCAweGQxLCAweDY5LCAweDAwLCAweGUwLCAweDAwLCAweDIxLCAweDAxLCAweDY1LCAweGQwLCAweDYxLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHgwNiwgMHg0YSwgMHhkMSwgMHg2OCwKKzB4NGIsIDB4MWMsIDB4ZDMsIDB4NjAsIDB4NDAsIDB4MzIsIDB4MDAsIDB4MjksIDB4MDEsIDB4ZDAsIDB4OTEsIDB4NjksCisweDAwLCAweGUwLCAweDAwLCAweDIxLCAweDAxLCAweDY1LCAweDkwLCAweDYxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAorMHhlOCwgMHgxYSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwKKzB4MGYsIDB4NGEsIDB4OTcsIDB4ODksIDB4OTIsIDB4NmEsIDB4NGIsIDB4MDAsIDB4MWIsIDB4MTgsIDB4OWIsIDB4OGEsCisweDAwLCAweDJiLCAweDEyLCAweGQwLCAweGJiLCAweDQyLCAweDEwLCAweGRjLCAweDFjLCAweDFjLCAweDU4LCAweDIzLAorMHg2MywgMHg0MywgMHhkMywgMHgxOCwgMHhkYywgMHgxZiwgMHg0OSwgMHgzYywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKKzB4MjMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsIDB4MWIsIDB4MGUsIDB4MDMsIDB4MmIsIDB4MDIsIDB4ZDAsCisweDAwLCAweDIwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAxLCAweDMxLCAweDA0LCAweDI5LCAweGU0LCAweGQzLAorMHgwMSwgMHgyMCwgMHhmOCwgMHhlNywgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHhmNywgMHhiNSwgMHg4NiwgMHhiMCwKKzB4M2QsIDB4NGEsIDB4MDcsIDB4MWMsIDB4ZDEsIDB4NjksIDB4OGYsIDB4NDAsIDB4MDMsIDB4MWMsIDB4MTQsIDB4NmEsCisweGUzLCAweDQwLCAweDVmLCAweDQwLCAweDA3LCAweDllLCAweDhlLCAweDQwLCAweDc3LCAweDQwLCAweGNmLCAweDQwLAorMHg5NCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5NCwgMHgwMywgMHgxYywgMHhhMywgMHg0MCwgMHgwMCwgMHgyNSwKKzB4MTQsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTQsIDB4MDAsIDB4MmMsIDB4NWQsIDB4ZDksIDB4MWMsIDB4MWMsCisweDMyLCAweDRlLCAweDI2LCAweDQzLCAweDk0LCAweDY5LCAweGU2LCAweDQwLCAweDMzLCAweDFjLCAweDAzLCAweDk2LAorMHg1MywgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MywgMHhkMiwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MiwKKzB4YmIsIDB4MDAsIDB4MDIsIDB4OWEsIDB4ZDIsIDB4NTgsIDB4MTMsIDB4MWMsIDB4MDUsIDB4OWMsIDB4ZTMsIDB4NDAsCisweDAzLCAweDljLCAweGEzLCAweDQyLCAweDNlLCAweGQxLCAweDhhLCAweDQwLCAweGNhLCAweDQwLCAweDE0LCAweDFjLAorMHg2MywgMHgwMCwgMHgxYiwgMHgxOSwgMHg1YiwgMHgwMSwgMHgwMSwgMHg5YSwgMHhkMiwgMHgxOCwgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4MDEsIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsCisweDFiLCAweDBlLCAweDAzLCAweDJiLCAweDJjLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLAorMHg1MSwgMHgzNiwgMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwNywgMHg5ZSwgMHgxZSwgMHg0MCwgMHgwMCwgMHg5NiwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4ZDYsIDB4MWQsIDB4NDksIDB4MzYsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsCisweDgzLCAweDQyLCAweDFiLCAweGQxLCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweGQ2LCAweDFkLCAweDRkLCAweDM2LAorMHgzMywgMHg0MywgMHgxYiwgMHg2OCwgMHgwMCwgMHg5ZSwgMHhiMywgMHg0MiwgMHgxMiwgMHhkMSwgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4MDgsIDB4OWIsCisweDMyLCAweDJiLCAweDA0LCAweGQxLCAweDAyLCAweDJhLCAweDA3LCAweGQxLCAweDIwLCAweDA0LCAweDAwLCAweDE0LAorMHgwZiwgMHhlMCwgMHgwOCwgMHg5YiwgMHgzMywgMHgyYiwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyYSwgMHhmNywgMHhkMCwKKzB4MDQsIDB4OWEsIDB4MDEsIDB4MzcsIDB4OTcsIDB4NDIsIDB4MDAsIDB4ZDMsIDB4MDAsIDB4MjcsIDB4MDQsIDB4OWEsCisweDAxLCAweDM1LCAweGFhLCAweDQyLCAweGFlLCAweGQ4LCAweDAwLCAweDIwLCAweGMwLCAweDQzLCAweDA5LCAweGIwLAorMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MjcsIDB4NGQsIDB4NjgsIDB4NjksIDB4MDAsIDB4MjgsCisweDA2LCAweGQwLCAweDI2LCAweDQ4LCAweDAwLCAweDY4LCAweDAyLCAweGYwLCAweDJiLCAweGY4LCAweGYwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMywgMHg0YywgMHgwMCwgMHgyNiwgMHhhMCwgMHg2OCwgMHgyMywgMHg0ZiwKKzB4MDAsIDB4MjgsIDB4MTYsIDB4ZDAsIDB4MGYsIDB4ZTAsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsIDB4MDIsIDB4ZDMsCisweDAxLCAweDIwLCAweDM4LCAweDcxLCAweDBmLCAweGUwLCAweGE2LCAweDYwLCAweGZkLCAweGY3LCAweGRlLCAweGZlLAorMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMSwgMHhkMywgMHgwMSwgMHgyMCwKKzB4MzgsIDB4NzEsIDB4ZTgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4NzksIDB4MDAsIDB4MjgsCisweGU5LCAweGQwLCAweDY4LCAweDY4LCAweDAwLCAweDI4LCAweDFiLCAweGQwLCAweDAxLCAweDIwLCAweGEwLCAweDYwLAorMHhmZSwgMHhmNywgMHhiYywgMHhmYiwgMHgwMCwgMHgyOCwgMHhkNiwgMHhkMSwgMHg2OCwgMHg2OCwgMHgwMCwgMHgyOCwKKzB4ZjYsIDB4ZDEsIDB4MTEsIDB4ZTAsIDB4MDAsIDB4MjgsIDB4ZDAsIDB4ZDEsIDB4MjgsIDB4NmEsIDB4MDIsIDB4MjgsCisweDAyLCAweGQzLCAweDAxLCAweDIwLCAweDM4LCAweDcxLCAweGNhLCAweGU3LCAweGE2LCAweDYwLCAweGZkLCAweGY3LAorMHhiOSwgMHhmZSwgMHgwMCwgMHgyOCwgMHhjNSwgMHhkMSwgMHgyOCwgMHg2YSwgMHgwMiwgMHgyOCwgMHgwMSwgMHhkMywKKzB4MDEsIDB4MjAsIDB4MzgsIDB4NzEsIDB4ZTgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4YmQsIDB4ZDAsIDB4MzgsIDB4NzksCisweDAwLCAweDI4LCAweGU3LCAweGQwLCAweGI5LCAweGU3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAorMHg1YywgMHgwNCwgMHgwMCwgMHg4MCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHg4YywgMHgwNiwgMHgwMCwgMHg4MCwKKzB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDkwLCAweGI1LCAweDQwLCAweDIwLCAweDFkLCAweDQ5LCAweGMwLCAweDQ2LAorMHgwOCwgMHg2MCwgMHgwMSwgMHhmMCwgMHg5ZCwgMHhmYywgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHg0MSwgMHg2OCwKKzB4MTksIDB4NDAsIDB4MGMsIDB4MGYsIDB4NjEsIDB4MDEsIDB4MDksIDB4MWIsIDB4ODksIDB4MDAsIDB4MTgsIDB4NGEsCisweDhmLCAweDE4LCAweDAxLCAweDIxLCAweDM5LCAweDgwLCAweDgxLCAweDZhLCAweGMwLCAweDQ2LCAweDc5LCAweDY1LAorMHg0MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg3OSwgMHg2NywgMHhiOSwgMHg2YywgMHhmYSwgMHg2YywgMHg4OSwgMHgxOCwKKzB4YjksIDB4NjQsIDB4MDAsIDB4MjEsIDB4ZjksIDB4NjQsIDB4YmEsIDB4NmIsIDB4M2IsIDB4NmQsIDB4ZDIsIDB4MTgsCisweGJhLCAweDYzLCAweDM5LCAweDY1LCAweDQyLCAweDZhLCAweDIwLCAweDMyLCAweDUxLCAweDcxLCAweDc5LCAweDZkLAorMHg3YSwgMHg2ZiwgMHhkMiwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgxMSwgMHg2MCwgMHhmYywgMHhmNywgMHhjYSwgMHhmZiwKKzB4MjAsIDB4MDEsIDB4MDksIDB4NDksIDB4NDAsIDB4MTgsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsCisweDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLCAweDc4LCAweDZmLCAweDAxLCAweGYwLCAweGM2LCAweGZiLAorMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKKzB4NWMsIDB4MmIsIDB4MDAsIDB4ODAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4NDAsIDB4MjAsCisweDEyLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDAxLCAweGYwLCAweDU5LCAweGZjLCAweDA3LCAweDFjLAorMHg0MCwgMHg2OCwgMHgwMywgMHgyMywgMHgxYiwgMHgwNywgMHgxOCwgMHg0MCwgMHgwNiwgMHgwZiwgMHg3MCwgMHgwMSwKKzB4ODAsIDB4MWIsIDB4ODAsIDB4MDAsIDB4MGMsIDB4NDksIDB4NDQsIDB4MTgsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NDYsCisweDYwLCAweDY1LCAweDc4LCAweDZhLCAweGMwLCAweDQ2LCAweDYwLCAweDY3LCAweDgwLCAweDZmLCAweDA1LCAweDFkLAorMHhlNSwgMHg2MywgMHhiOSwgMHg2OSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4OSwgMHhmOSwgMHgzOCwgMHgxYywKKzB4MjEsIDB4MWMsIDB4MzIsIDB4MWMsIDB4MmIsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjAsIDB4ZjgsIDB4ZjAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLAorMHhmMCwgMHhiNSwgMHg0YiwgMHg2ZiwgMHg5YiwgMHg2ZiwgMHgxZiwgMHgxZCwgMHhjZiwgMHg2MywgMHgwNSwgMHg2OCwKKzB4MDAsIDB4MjMsIDB4ODQsIDB4NjksIDB4YTQsIDB4MDgsIDB4MDgsIDB4ZDAsIDB4OWMsIDB4MDAsIDB4MmUsIDB4NTksCisweGMwLCAweDQ2LCAweDNlLCAweDUxLCAweDg0LCAweDY5LCAweGE0LCAweDA4LCAweDAxLCAweDMzLCAweDljLCAweDQyLAorMHhmNiwgMHhkOCwgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHgwMywgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4ZmYsIDB4YjUsIDB4ODEsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MWQsIDB4MWMsIDB4MGYsIDB4MWMsCisweDQ2LCAweDQ4LCAweDAxLCAweDY5LCAweDAxLCAweDMxLCAweDAxLCAweDYxLCAweGY5LCAweDFkLCAweDUxLCAweDMxLAorMHhiZCwgMHg2NSwgMHgwMCwgMHg5MSwgMHgyMCwgMHgxYywgMHhmZCwgMHhmNywgMHg1ZCwgMHhmYywgMHhmOCwgMHg2ZCwKKzB4NDAsIDB4MDksIDB4MzYsIDB4ZDIsIDB4YjgsIDB4NmQsIDB4MDYsIDB4N2IsIDB4NDMsIDB4N2IsIDB4MWIsIDB4MDIsCisweDFlLCAweDQzLCAweDE3LCAweDIxLCAweDQ5LCAweDAyLCAweDAxLCAweDczLCAweDBiLCAweDBhLCAweDQzLCAweDczLAorMHgwMCwgMHg5OSwgMHgyMCwgMHgxYywgMHhmZCwgMHhmNywgMHg0YywgMHhmYywgMHhiOCwgMHg2ZCwgMHhjMCwgMHg0NiwKKzB4MDYsIDB4NzMsIDB4MzMsIDB4MGEsIDB4NDMsIDB4NzMsIDB4ZjgsIDB4NmQsIDB4NDAsIDB4MDksIDB4MjAsIDB4ZDIsCisweDYwLCAweDY4LCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAzLCAweDk4LCAweDAxLCAweGYwLCAweGNjLCAweGZjLAorMHg2MCwgMHg2OCwgMHgzMiwgMHg0YiwgMHgxOCwgMHg0MywgMHg2MCwgMHg2MCwgMHgyMCwgMHgxYywgMHgwMSwgMHhmMCwKKzB4MzUsIDB4ZmQsIDB4MDAsIDB4MjUsIDB4N2QsIDB4NjAsIDB4YmQsIDB4NjAsIDB4M2QsIDB4NjQsIDB4N2QsIDB4NjQsCisweDIwLCAweDFjLCAweGZjLCAweGY3LCAweDMxLCAweGZmLCAweDM4LCAweDg4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLAorMHgzOCwgMHg4MCwgMHg3ZCwgMHg2MiwgMHgyOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHgzOCwgMHgxYywKKzB4MDAsIDB4ZjAsIDB4YTAsIDB4ZmIsIDB4NDQsIDB4ZTAsIDB4MjAsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweDA4LCAweDM4LCAweDE4LCAweDQzLCAweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDc4LCAweDY0LCAweDYwLCAweDY4LAorMHgwMiwgMHgwNCwgMHgxMiwgMHgwYywgMHg3OCwgMHg2ZSwgMHgwMSwgMHgyNiwgMHhjMSwgMHgxZCwgMHgwZCwgMHgzMSwKKzB4OGEsIDB4NDIsIDB4MDIsIDB4ZDIsIDB4M2EsIDB4NjQsIDB4MDgsIDB4MWMsIDB4MGUsIDB4ZTAsIDB4NDEsIDB4MTksCisweDg5LCAweDg5LCAweGYwLCAweDIzLCAweDE5LCAweDQwLCAweDA5LCAweDA5LCAweDg5LCAweDAwLCAweDQwLCAweDE4LAorMHhmOCwgMHg2MCwgMHhmOSwgMHg2MSwgMHg2MSwgMHg2OCwgMHgwOSwgMHgwNCwgMHgwOSwgMHgwYywgMHg4MSwgMHg0MiwKKzB4MTYsIDB4ZDIsIDB4MzksIDB4NjQsIDB4NjMsIDB4NjgsIDB4MTksIDB4MDQsIDB4MDksIDB4MGMsIDB4NDAsIDB4MWEsCisweDAzLCAweDMwLCAweDgwLCAweDA4LCAweDgyLCAweDAwLCAweGEwLCAweDYxLAorMHgyMCwgMHg2OCwgMHgwOSwgMHgxOCwgMHg5YiwgMHgxOCwgMHg2MywgMHg2MCwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwKKzB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZmEsIDB4N2UsIDB4ODAsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCisweGJmLCAweGZiLCAweDBiLCAweGUwLCAweGI5LCAweDY4LCAweDA4LCAweDFhLCAweDAwLCAweDI1LCAweDc4LCAweDYyLAorMHhiZCwgMHg2MiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgzYywgMHhmYywgMHgyMCwgMHgxYywgMHgzOSwgMHgxYywKKzB4MDAsIDB4ZjAsIDB4NjQsIDB4ZjgsIDB4MDUsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDBjLCAweDJiLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDAxLCAweDAwLCAweDAwLCAweGMwLAorMHhmMCwgMHhiNSwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHg2YywgMHhmOSwgMHg2YiwgMHgwZCwgMHgxOCwKKzB4MjEsIDB4NjgsIDB4NDEsIDB4MTgsIDB4MDAsIDB4MjAsIDB4YTIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MGIsIDB4ZDksCisweDgyLCAweDAwLCAweDU2LCAweDE4LCAweDAxLCAweDIzLCAweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LAorMHhjMCwgMHg0NiwgMHhhYiwgMHg1MCwgMHhhMiwgMHg2OSwgMHgwMSwgMHgzMCwgMHg4MiwgMHg0MiwgMHhmMywgMHhkOCwKKzB4NzgsIDB4NmUsIDB4ZjksIDB4NmIsIDB4MDksIDB4MTgsIDB4ODksIDB4ODksIDB4ZjAsIDB4MjMsIDB4MTksIDB4NDAsCisweDA5LCAweDA5LCAweDg5LCAweDAwLCAweDQwLCAweDE4LCAweGY4LCAweDYwLCAweGY5LCAweDYxLCAweDIwLCAweDY4LAorMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMSwgMHg2OCwgMHg3OCwgMHg2YywKKzB4ZmMsIDB4ZjcsIDB4OTUsIDB4ZmYsIDB4NzgsIDB4NjQsIDB4NjAsIDB4NjgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCisweGY4LCAweDY4LCAweDgxLCAweDQyLCAweDE5LCAweGQyLCAweDM5LCAweDY0LCAweDYzLCAweDY4LCAweDE5LCAweDA0LAorMHgwOSwgMHgwYywgMHg0MCwgMHgxYSwgMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MiwgMHgwMCwgMHhhMCwgMHg2MSwKKzB4MjAsIDB4NjgsIDB4MDksIDB4MTgsIDB4OWIsIDB4MTgsIDB4NjMsIDB4NjAsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsCisweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDU2LCAweGZhLCAweDAxLCAweDIwLCAweDc4LCAweDgwLCAweDIwLCAweDFjLAorMHgwMCwgMHhmMCwgMHg1ZSwgMHhmYiwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhiOSwgMHg2OCwKKzB4MDgsIDB4MWEsIDB4NzgsIDB4NjIsIDB4MDAsIDB4MjAsIDB4YjgsIDB4NjIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCisweGQ5LCAweGZiLCAweDIwLCAweDFjLCAweDM5LCAweDFjLCAweDAwLCAweGYwLCAweDAxLCAweGY4LCAweGVmLCAweGU3LAorMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHg4ZSwgMHg0OCwgMHg0MSwgMHg2OSwKKzB4MDEsIDB4MzEsIDB4NDEsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MDAsIDB4MDcsIDB4NjEsIDB4NjgsIDB4MDgsIDB4NDAsCisweDA2LCAweDBmLCAweDBhLCAweDA0LCAweDEyLCAweDBjLCAweDIwLCAweDY4LCAweDExLCAweDE4LCAweGZiLCAweDY4LAorMHhkMiwgMHgxYSwgMHg3YiwgMHg2OCwgMHg5ZCwgMHgxYSwgMHhjMywgMHgxZiwgMHgwNSwgMHgzYiwgMHgzOCwgMHgxYywKKzB4MmEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MjYsIDB4ZmEsIDB4MDAsIDB4MjAsIDB4NzgsIDB4ODAsIDB4MjAsIDB4MWMsCisweDAwLCAweGYwLCAweDJlLCAweGZiLCAweDYwLCAweDY4LCAweDQwLCAweDE5LCAweDAxLCAweDA0LCAweDA5LCAweDBjLAorMHg2MCwgMHg2MCwgMHgzMCwgMHgxYywgMHgwMSwgMHhmMCwgMHhlMCwgMHhmYiwgMHg3ZCwgMHg0ZSwgMHgwYiwgMHgyMywKKzB4MWIsIDB4MDIsIDB4ZjAsIDB4MTgsIDB4MDAsIDB4NjksIDB4MDAsIDB4MjgsIDB4MTksIDB4ZDAsIDB4MDAsIDB4MjUsCisweDJkLCAweDIzLCAweDliLCAweDAxLCAweGYwLCAweDE4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDEyLCAweGQwLAorMHhhYSwgMHgwMCwgMHg5MiwgMHgxOSwgMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhkMiwgMHgxOCwgMHhkMiwgMHg2OCwKKzB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDEsIDB4ZjAsIDB4MWMsIDB4ZmUsIDB4MDEsIDB4MzUsIDB4YTgsIDB4MDAsCisweDgwLCAweDE5LCAweDJkLCAweDIzLCAweDliLCAweDAxLCAweGMwLCAweDE4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LAorMHhlYywgMHhkMSwgMHhmOCwgMHg2YiwgMHgwMSwgMHgxZiwgMHg4YSwgMHgxYywgMHhmYSwgMHg2MywgMHhmYSwgMHg2OCwKKzB4N2QsIDB4NmMsIDB4MDAsIDB4ZjAsIDB4YmIsIDB4ZjksIDB4YzAsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCisweDI4LCAweDFjLCAweGZjLCAweGY3LCAweDEwLCAweGZmLCAweDAzLCAweDkwLCAweGY5LCAweDZiLCAweDNhLCAweDZlLAorMHg4ZSwgMHgxOCwgMHgyMCwgMHg2OCwgMHgxMiwgMHgxOCwgMHgwMSwgMHg5MiwgMHg3YSwgMHg2ZSwgMHg4ZCwgMHgxOCwKKzB4MTEsIDB4MTgsIDB4MDIsIDB4OTEsIDB4YzgsIDB4MWQsIDB4MDksIDB4MzAsIDB4ZTAsIDB4NjAsIDB4YjEsIDB4ODgsCisweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA5LCAweDA2LCAweDA5LCAweDBlLCAweDA4LCAweDQzLCAweDAwLCAweDA0LAorMHgwMCwgMHgwYywgMHg3OCwgMHg2MSwgMHg2OCwgMHg2OCwgMHgwMSwgMHgwZSwgMHhmZiwgMHgyMiwgMHgxMiwgMHgwNCwKKzB4MDIsIDB4NDAsIDB4MTIsIDB4MGEsIDB4MTEsIDB4NDMsIDB4ZmYsIDB4MjIsIDB4MTIsIDB4MDIsIDB4MDIsIDB4NDAsCisweDEyLCAweDAyLCAweDExLCAweDQzLCAweDAwLCAweDA2LCAweDA4LCAweDQzLCAweDM4LCAweDYxLCAweGE4LCAweDg5LAorMHgwOSwgMHgyMywgMHgxYiwgMHgwMiwgMHgxOCwgMHg0MCwgMHhiOCwgMHg2MSwKKzB4YTgsIDB4ODksIDB4OTgsIDB4NDMsIDB4YTgsIDB4ODEsIDB4YTgsIDB4ODksIDB4MDIsIDB4OTksIDB4YzAsIDB4NDYsCisweDg4LCAweDgxLCAweDAwLCAweDIwLCAweDcwLCAweDgwLCAweGIwLCAweDgwLCAweDcwLCAweDgxLCAweDY4LCAweDYwLAorMHgyOCwgMHg4MiwgMHhiOSwgMHg2ZSwgMHgzMCwgMHgxYywgMHhmYywgMHhmNywgMHhlOCwgMHhmZSwgMHgzOCwgMHg4NiwKKzB4ZmEsIDB4NjksIDB4MzAsIDB4MWMsIDB4MjksIDB4MWMsIDB4ZmMsIDB4ZjcsIDB4MDMsIDB4ZmYsIDB4NzgsIDB4ODYsCisweDNkLCAweDhlLCAweDc4LCAweDhlLCAweDAzLCAweDk5LCAweGZjLCAweGY3LCAweGM4LCAweGZlLCAweDAwLCAweDkwLAorMHg2MCwgMHg2OCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgzOSwgMHg2ZSwgMHg0MSwgMHgxYSwgMHgwOSwgMHgwNCwKKzB4MDksIDB4MGMsIDB4N2EsIDB4NmUsIDB4ODIsIDB4MWEsIDB4MTMsIDB4MDQsIDB4MWIsIDB4MGMsIDB4MWEsIDB4MDIsCisweDFiLCAweDBhLCAweDFhLCAweDQzLCAweDE2LCAweDA0LCAweDM2LCAweDBjLCAweGJhLCAweDY4LCAweDgyLCAweDQyLAorMHgwMSwgMHhkMiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgxMCwgMHgxYSwgMHhiOCwgMHg2MCwgMHgwOCwgMHgwMiwKKzB4MDksIDB4MTIsIDB4MDksIDB4MDYsIDB4MDksIDB4MGUsIDB4MDgsIDB4NDMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCisweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDQxLCAweDgwLCAweDI4LCAweDFjLCAweGZjLCAweGY3LCAweGEzLCAweGZlLAorMHgwNSwgMHgxYywgMHgwMCwgMHg5OCwgMHgzMSwgMHgxYywgMHhmYywgMHhmNywgMHg5ZSwgMHhmZSwgMHgwNiwgMHgxYywKKzB4NzgsIDB4NjksIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MGEsIDB4MDgsIDB4NDMsCisweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDgxLCAweDgwLCAweDI4LCAweDFjLAorMHhmYywgMHhmNywgMHg4ZiwgMHhmZSwgMHg3OSwgMHg2OSwgMHgwMSwgMHgzMSwgMHhjMCwgMHg0MywgMHg3OSwgMHg2MSwKKzB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4NTAsIDB4ODEsIDB4MzgsIDB4NjksIDB4MDEsIDB4MGUsIDB4ZmYsIDB4MjIsCisweDEyLCAweDA0LCAweDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLCAweGZmLCAweDIyLCAweDEyLCAweDAyLAorMHgwMiwgMHg0MCwgMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMSwgMHg0MywgMHgzMCwgMHgxYywKKzB4ZmMsIDB4ZjcsIDB4NzcsIDB4ZmUsIDB4MzksIDB4NjksIDB4N2EsIDB4NjgsIDB4ODksIDB4MTgsIDB4MzksIDB4NjEsCisweGI5LCAweDY4LCAweDAwLCAweDI5LCAweDA5LCAweGQxLCAweDAyLCAweDk5LCAweDg5LCAweDg5LCAweGJhLCAweDY5LAorMHgxMSwgMHg0MywgMHgwMiwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MSwgMHg4MSwgMHhiOSwgMHg2OSwgMHhmYywgMHhmNywKKzB4NjYsIDB4ZmUsIDB4MjAsIDB4ODIsIDB4MDAsIDB4MjAsIDB4NjAsIDB4ODIsIDB4ZjgsIDB4NmQsIDB4NDEsIDB4MDgsCisweDE2LCAweGQzLCAweDgwLCAweDBhLCAweDBhLCAweGQzLCAweDYwLCAweDY4LCAweDEwLCAweDM4LCAweDAxLCAweDA0LAorMHgwOSwgMHgwYywgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgyMSwgMHg2OCwgMHhjMCwgMHg0NiwKKzB4MDgsIDB4ODIsIDB4MDksIDB4ZTAsIDB4NjAsIDB4NjgsIDB4MGMsIDB4MzgsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCisweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDIxLCAweDY4LCAweGMwLCAweDQ2LCAweDg4LCAweDgxLAorMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjEsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NmUsIDB4NGQsIDB4MjgsIDB4NjksCisweDAxLCAweDIyLCAweDA0LCAweDk5LCAweDhhLCAweDQwLCAweDkwLCAweDQzLCAweDI4LCAweDYxLCAweDA0LCAweDk4LAorMHg0MywgMHgwMSwgMHgxOCwgMHgxYSwgMHg4MCwgMHgwMCwgMHgxNiwgMHgxYywgMHg2OSwgMHg0OSwgMHg0NCwgMHgxOCwKKzB4ZTAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4YTAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDEsCisweDAwLCAweDI2LCAweDI2LCAweGUwLCAweDY1LCAweDQ4LCAweDQxLCAweDY5LCAweDAxLCAweDMxLCAweDQxLCAweDYxLAorMHgwNCwgMHg5OCwgMHhmYywgMHhmNywgMHgwOSwgMHhmZCwgMHgwNywgMHgxYywgMHgwMywgMHhkMSwgMHgyOCwgMHg2OSwKKzB4MzAsIDB4NDMsIDB4MjgsIDB4NjEsIDB4YjUsIDB4ZTAsIDB4YTAsIDB4NjgsIDB4NjUsIDB4NjgsIDB4YTgsIDB4NDIsCisweDAwLCAweGQyLCAweDA1LCAweDFjLCAweGExLCAweDZjLCAweGE5LCAweDQyLCAweDE2LCAweGQyLCAweDQwLCAweDFhLAorMHg2MiwgMHg2YSwgMHgxMCwgMHgxYSwgMHgwMCwgMHgyNiwgMHg2MCwgMHg2MiwgMHhhNiwgMHg2MCwgMHhhNiwgMHg2MiwKKzB4MjAsIDB4ODgsIDB4NDgsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MjAsIDB4ODAsIDB4MGQsIDB4MWMsIDB4MDksIDB4ZDEsCisweDM4LCAweDFjLCAweGZjLCAweGY3LCAweDE5LCAweGZkLCAweDAzLCAweDIwLCAweDYwLCAweDgwLCAweDY2LCAweDYwLAorMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg4ZCwgMHhmOSwgMHg5NiwgMHhlMCwgMHhlMSwgMHg2OCwgMHgzOCwgMHg2OCwKKzB4MDksIDB4MTgsIDB4YzMsIDB4MWYsIDB4MDUsIDB4M2IsIDB4MjAsIDB4MWMsIDB4MDIsIDB4MzksIDB4MmEsIDB4MWMsCisweDAwLCAweGYwLCAweGNkLCAweGY4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGQ3LCAweGY5LCAweGUwLCAweDY4LAorMHg0NiwgMHgxOSwgMHg3OCwgMHg2OCwgMHgzMCwgMHg0MywgMHg3OCwgMHg2MCwgMHgwNCwgMHg5OCwgMHgzMSwgMHgxYywKKzB4MDEsIDB4ZjAsIDB4ODgsIDB4ZmEsIDB4MjEsIDB4NmUsIDB4MDAsIDB4OTgsCisweDA4LCAweDE4LCAweDAxLCAweDkwLCAweDcwLCAweDFhLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDYxLCAweDZlLAorMHg3MSwgMHgxYSwgMHgwYSwgMHgwNCwgMHgxMiwgMHgwYywgMHgxMSwgMHgwMiwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywKKzB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MDIsIDB4OTEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MGEsIDB4MDgsIDB4NDMsCisweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDk4LCAweGMwLCAweDQ2LCAweDQxLCAweDgwLCAweDIwLCAweDhlLAorMHhmYywgMHhmNywgMHhjYiwgMHhmZCwgMHgwNiwgMHgxYywgMHg2MCwgMHg4ZSwgMHgwMiwgMHg5OSwgMHhmYywgMHhmNywKKzB4YzYsIDB4ZmQsIDB4MDMsIDB4OTAsIDB4NjAsIDB4NjksIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsIDB4MDgsIDB4MDIsCisweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDk4LCAweGMwLCAweDQ2LAorMHg4MSwgMHg4MCwgMHgzMCwgMHgxYywgMHhmYywgMHhmNywgMHhiNywgMHhmZCwgMHg2MSwgMHg2OSwgMHgwMSwgMHgzMSwKKzB4YzAsIDB4NDMsIDB4NjEsIDB4NjEsIDB4MDEsIDB4OTksIDB4YzAsIDB4NDYsIDB4NDgsIDB4ODEsIDB4NjAsIDB4NmUsCisweDAwLCAweDk5LCAweDQ2LCAweDE4LCAweDIwLCAweDY5LCAweDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LAorMHgwMiwgMHg0MCwgMHgxMiwgMHgwYSwgMHgxMSwgMHg0MywgMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwKKzB4MTIsIDB4MDIsIDB4MTEsIDB4NDMsIDB4MDAsIDB4MDYsIDB4MDEsIDB4NDMsIDB4NzEsIDB4NjAsIDB4MDMsIDB4OTgsCisweGZjLCAweGY3LCAweDliLCAweGZkLCAweDIxLCAweDY5LCAweDQ5LCAweDE5LCAweDIxLCAweDYxLCAweGExLCAweDY4LAorMHg0OSwgMHgxYiwgMHhhMSwgMHg2MCwgMHgwNiwgMHhkMSwgMHhiMSwgMHg4OSwgMHhhMiwgMHg2OSwgMHgxMSwgMHg0MywKKzB4YjEsIDB4ODEsIDB4YTEsIDB4NjksIDB4ZmMsIDB4ZjcsIDB4OGQsIDB4ZmQsIDB4MzgsIDB4ODIsIDB4NjEsIDB4NmUsCisweDM4LCAweDY4LCAweDA5LCAweDE4LCAweDBlLCAweDMxLCAweGY5LCAweDYwLCAweGUyLCAweDY4LCAweDAwLCAweDk5LAorMHgwNCwgMHgzOCwgMHgwMCwgMHhmMCwgMHg0YywgMHhmOCwgMHgwMiwgMHgyMCwgMHg3OCwgMHg4MiwgMHhlMCwgMHg2ZCwKKzB4NDEsIDB4MDgsIDB4MTYsIDB4ZDMsIDB4ODAsIDB4MGEsIDB4MGEsIDB4ZDMsIDB4NzgsIDB4NjgsIDB4MTAsIDB4MzgsCisweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDA4LCAweDAyLCAweDA5LCAweDBhLCAweDA4LCAweDQzLCAweDM5LCAweDY4LAorMHhjMCwgMHg0NiwgMHhjOCwgMHg4MSwgMHgwOSwgMHhlMCwgMHg3OCwgMHg2OCwgMHgwYywgMHgzOCwgMHgwMSwgMHgwNCwKKzB4MDksIDB4MGMsIDB4MDgsIDB4MDIsIDB4MDksIDB4MGEsIDB4MDgsIDB4NDMsIDB4MzksIDB4NjgsIDB4YzAsIDB4NDYsCisweDQ4LCAweDgxLCAweDA1LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg1YywgMHgyYiwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKKzB4ZjcsIDB4YjUsIDB4MDMsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MWMsIDB4NjgsIDB4MjYsIDB4MDQsCisweDMxLCAweDFjLCAweDFkLCAweDFkLCAweGZjLCAweGY3LCAweDUxLCAweGZkLCAweDQwLCAweGM3LCAweDAyLCAweDlhLAorMHhkMSwgMHgxYywgMHg4OSwgMHgwOCwgMHgwMSwgMHgzOSwgMHg0YSwgMHgxZSwgMHgwMiwgMHg5MiwgMHgwMCwgMHgyOSwKKzB4MGQsIDB4ZDAsIDB4MjEsIDB4MGMsIDB4MTAsIDB4Y2QsIDB4MjIsIDB4MDQsIDB4MGEsIDB4NDMsIDB4MTEsIDB4MWMsCisweDE2LCAweDFjLCAweGZjLCAweGY3LCAweDQwLCAweGZkLCAweDQwLCAweGM3LCAweDAyLCAweDk5LCAweDRhLCAweDFlLAorMHgwMiwgMHg5MiwgMHgwMCwgMHgyOSwgMHhmMSwgMHhkMSwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4ODAsIDB4MDgsIDB4ODAsIDB4MDAsIDB4ODksIDB4MDgsIDB4ODksIDB4MDAsIDB4MDMsIDB4MzIsCisweDkzLCAweDA4LCAweDVhLCAweDFlLCAweDAwLCAweDJiLCAweDA1LCAweGQwLCAweDA4LCAweGM5LCAweDA4LCAweGMwLAorMHgxMywgMHgxYywgMHgwMSwgMHgzYSwgMHgwMCwgMHgyYiwgMHhmOSwgMHhkMSwgMHg3MCwgMHg0NywgMHhmZiwgMHhiNSwKKzB4ODYsIDB4YjAsIDB4MTcsIDB4MWMsIDB4MDAsIDB4MjYsIDB4MDYsIDB4OTgsIDB4ODAsIDB4NmMsIDB4YzAsIDB4MWIsCisweDA2LCAweDk5LCAweGMwLCAweDQ2LCAweDg4LCAweDY0LCAweDAxLCAweDIwLCAweGMwLCAweDA1LCAweDA2LCAweDk5LAorMHg4OSwgMHg2YiwgMHhjMCwgMHg0NiwgMHgwMSwgMHg5MSwgMHgwNiwgMHg5OSwgMHg0YywgMHg2YiwgMHg2NywgMHhlMCwKKzB4MjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTEsIDB4NjEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDMsIDB4OTEsCisweGExLCAweDY4LCAweGMwLCAweDQ2LCAweDA0LCAweDkxLCAweDAyLCAweGE5LCAweDQ5LCAweDg4LCAweGI5LCAweDQyLAorMHgwOCwgMHhkMiwgMHgwMiwgMHhhZCwgMHg2ZCwgMHg4OCwgMHgwMiwgMHhhOSwgMHg0OSwgMHg4OCwgMHg3ZiwgMHgxYSwKKzB4MDAsIDB4MjEsIDB4MDIsIDB4YWIsIDB4NTksIDB4ODAsIDB4MTksIDB4ZTAsIDB4MDIsIDB4YTksIDB4NDksIDB4ODgsCisweGM5LCAweDFiLCAweDAyLCAweGFiLCAweDU5LCAweDgwLCAweDNkLCAweDFjLCAweDAwLCAweDI3LCAweDAxLCAweDIxLAorMHg0OSwgMHgwNiwgMHgwNywgMHg5YiwgMHg5YSwgMHgwNywgMHg5MiwgMHgwZiwgMHgwZCwgMHhkMCwgMHhlYiwgMHgwNiwKKzB4ZGIsIDB4MGUsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4MmIsIDB4MDgsIDB4ZDMsIDB4MWUsIDB4MmIsIDB4MDIsIDB4ZDEsCisweDAzLCAweDJhLCAweDA0LCAweGQxLCAweDAxLCAweGUwLCAweDAyLCAweDJhLAorMHgwMSwgMHhkMywgMHgwMSwgMHgyNiwgMHgwMCwgMHgyMSwgMHgyOSwgMHg0MywgMHgwMSwgMHg0MywgMHgwYSwgMHgxYywKKzB4MDAsIDB4OTEsIDB4MDAsIDB4MjAsIDB4MDMsIDB4OTksIDB4MDQsIDB4OWEsIDB4MDcsIDB4OWIsIDB4MDEsIDB4ZjAsCisweDViLCAweGZmLCAweDA3LCAweDk5LCAweDQ5LCAweDE5LCAweDA3LCAweDkxLCAweDAwLCAweDJlLCAweDBhLCAweGQwLAorMHgxZCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwgMHgxZCwgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwKKzB4MDAsIDB4MjAsIDB4MDcsIDB4OWIsIDB4MDEsIDB4ZjAsIDB4NGMsIDB4ZmYsIDB4MDAsIDB4MjYsIDB4MDIsIDB4YTgsCisweDQwLCAweDg4LCAweDAwLCAweDI4LCAweDBjLCAweGQwLCAweDAzLCAweDk4LCAweDQwLCAweDE5LCAweDAzLCAweDkwLAorMHgwMiwgMHg5OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MCwgMHgwMywgMHg5OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MCwKKzB4MDQsIDB4OTgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjAsIDB4MDMsIDB4ZTAsIDB4MDEsIDB4OTgsIDB4MDEsIDB4MzgsCisweDAxLCAweDkwLCAweDEwLCAweDM0LCAweDA2LCAweDk4LCAweGMwLCAweDQ2LCAweDQ0LCAweDYzLCAweDAxLCAweDk4LAorMHgwNiwgMHg5OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MywgMHgwMCwgMHgyMCwgMHgwMCwgMHgyZiwgMHgwMiwgMHhkMCwKKzB4MDEsIDB4OTksIDB4MDAsIDB4MjksIDB4OTIsIDB4ZDEsIDB4MDksIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsCisweDA2LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDAwLCAweDIwLCAweDA5LCAweDliLCAweDAxLCAweGYwLAorMHgxZiwgMHhmZiwgMHgwYSwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKKzB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDAsIDB4NTMsIDB4MDIsCisweDkwLCAweGI1LCAweDBjLCAweDFjLCAweDA3LCAweDFjLCAweDM4LCAweDY4LCAweDAxLCAweDIzLCAweDliLCAweDA3LAorMHgwOCwgMHgzOCwgMHgxOCwgMHg0MywgMHgwMSwgMHg2OCwgMHgzOCwgMHg4YSwgMHhmYywgMHhmNywgMHg4NSwgMHhmYywKKzB4YzAsIDB4NDMsIDB4ZjksIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4NzgsIDB4OGEsIDB4MzksIDB4NjgsCisweDA4LCAweDFhLCAweDM4LCAweDYwLCAweDM4LCAweDFjLCAweDAxLCAweGYwLCAweDhiLCAweGY5LCAweDM4LCAweDFjLAorMHhmYywgMHhmNywgMHg4YywgMHhmYiwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzMywgMHhmZSwgMHg5MCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MDEsIDB4ODgsIDB4OGEsIDB4MDksIDB4MjEsIDB4ZDMsCisweGNhLCAweDA5LCAweDFmLCAweGQyLCAweDhhLCAweDA4LCAweDFkLCAweGQzLCAweDAwLCAweDIxLCAweDAxLCAweDgwLAorMHg0MSwgMHg4MCwgMHg0NywgMHg2ZiwgMHg0MCwgMHg2ZCwgMHhmYSwgMHgxZCwgMHgxOSwgMHgzMiwgMHg1MSwgMHg3MSwKKzB4ZmEsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjAsIDB4M2EsIDB4NmUsIDB4YzAsIDB4NDYsIDB4MTAsIDB4NjAsCisweDBjLCAweDQ4LCAweGMwLCAweDQ2LCAweDgxLCAweDYzLCAweGMxLCAweDZiLCAweDQ5LCAweDA4LCAweDQ5LCAweDAwLAorMHhjMSwgMHg2MywgMHgwMSwgMHgyMCwgMHgwMCwgMHhmMCwgMHhjYywgMHhmZiwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwKKzB4NmIsIDB4ZmYsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4MjMsIDB4MTksIDB4NDMsCisweDAxLCAweDgwLCAweDAxLCAweDg4LCAweDQ5LCAweDA5LCAweGY2LCAweGQyLCAweDAwLCAweGYwLCAweGIwLCAweGY4LAorMHhmMywgMHhlNywgMHgwMCwgMHgwMCwgMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKKzB4MTAsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDAsIDB4MjQsIDB4NWUsIDB4MWUsIDB4MDAsIDB4MmIsIDB4MTksIDB4ZDAsCisweDAxLCAweDY4LCAweGMwLCAweDQ2LCAweDM5LCAweDYwLCAweDQxLCAweDg4LCAweDBjLCAweDE5LCAweDQxLCAweDY4LAorMHhjMCwgMHg0NiwgMHg3OSwgMHg2MCwgMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhiOSwgMHg2MCwgMHhjMSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4ZjksIDB4NjAsIDB4MTAsIDB4MzAsIDB4MTAsIDB4MzcsIDB4ZTksIDB4NmEsIDB4ODEsIDB4NDIsCisweDAyLCAweGQ4LCAweDI4LCAweDFjLCAweDAwLCAweGYwLCAweGVjLCAweGZmLCAweDMxLCAweDFjLCAweDAxLCAweDNlLAorMHgwMCwgMHgyOSwgMHhlNSwgMHhkMSwgMHgyMCwgMHgxYywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4MDAsIDB4MjEsIDB4YzEsIDB4NjEsIDB4MDUsIDB4NDksIDB4MGEsIDB4NjgsIDB4MDAsIDB4MmEsIDB4MDEsIDB4ZDEsCisweDA4LCAweDYwLCAweDAyLCAweGUwLCAweDRhLCAweDY4LCAweGMwLCAweDQ2LCAweGQwLCAweDYxLCAweDQ4LCAweDYwLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHgwMywgMHg0OSwgMHgwOCwgMHg2OCwKKzB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4YzIsIDB4NjksIDB4YzAsIDB4NDYsIDB4MGEsIDB4NjAsIDB4NzAsIDB4NDcsCisweGQwLCAweDJjLCAweDAwLCAweDgwLCAweDAwLCAweDIxLCAweDgxLCAweDY3LCAweDA1LCAweDQ5LCAweDhhLCAweDY4LAorMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwgMHg4OCwgMHg2MCwgMHgwMiwgMHhlMCwgMHhjYSwgMHg2OCwgMHhjMCwgMHg0NiwKKzB4OTAsIDB4NjcsIDB4YzgsIDB4NjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsCisweDAzLCAweDQ5LCAweDg4LCAweDY4LCAweDAwLCAweDI4LCAweDAyLCAweGQwLCAweDgyLCAweDZmLCAweGMwLCAweDQ2LAorMHg4YSwgMHg2MCwgMHg3MCwgMHg0NywgMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwKKzB4MDAsIDB4YjUsIDB4ODAsIDB4MjAsIDB4MTMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4ZmYsIDB4ZjcsCisweGQ1LCAweGZmLCAweDAwLCAweDI4LCAweDFiLCAweGQwLCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDQxLCAweDY4LAorMHgxOSwgMHg0MCwgMHgwYSwgMHgwZiwgMHg1MSwgMHgwMSwgMHg4OSwgMHgxYSwgMHg4OSwgMHgwMCwgMHgwZCwgMHg0YiwKKzB4YzksIDB4MTgsIDB4NGIsIDB4ODgsIDB4MDAsIDB4MmIsIDB4MDQsIDB4ZDEsIDB4MTEsIDB4MWMsIDB4ZmYsIDB4ZjcsCisweDNiLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAxLCAweDJiLCAweDAyLCAweGQxLCAweGZmLCAweGY3LAorMHgwNSwgMHhmYywgMHhmOCwgMHhlNywgMHgwMiwgMHgyYiwgMHhmNiwgMHhkMSwgMHhmZiwgMHhmNywgMHg0ZSwgMHhmYiwKKzB4ZjMsIDB4ZTcsIDB4MDQsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4ZWUsIDB4ZTcsCisweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAorMHgwMCwgMHhiNSwgMHgyMCwgMHgyMCwgMHgwZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhmZiwgMHhmNywKKzB4YmYsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MGUsIDB4ZDAsIDB4MDEsIDB4ODgsIDB4MjAsIDB4MjMsIDB4MTksIDB4NDMsCisweDAxLCAweDgwLCAweDAxLCAweDg4LCAweDEwLCAweDIzLCAweDk5LCAweDQzLCAweDAxLCAweDgwLCAweDAxLCAweDg4LAorMHgwOSwgMHgwYSwgMHgwMSwgMHhkMywgMHhmZiwgMHhmNywgMHgyZSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4MDMsIDB4NDgsIDB4MDEsIDB4NmQsIDB4MDEsIDB4MzEsIDB4MDEsIDB4NjUsIDB4ZjgsIDB4ZTcsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweGIwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDk4LCAweGI1LCAweDA3LCAweDFjLAorMHgyMiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgyMiwgMHg0OCwgMHhjMywgMHgxZCwgMHg0MSwgMHgzMywKKzB4NDEsIDB4NmQsIDB4ODIsIDB4NmQsIDB4ODAsIDB4NmMsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MGIsIDB4OWMsIDB4NjgsCisweDAxLCAweDIzLCAweDliLCAweDA3LCAweDIzLCAweDQzLCAweDFiLCAweDY4LCAweDk4LCAweDQyLCAweDAwLCAweGQxLAorMHgwYywgMHhlMCwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwgMHgxMCwgMHgxYSwgMHg1OSwgMHgxYSwgMHg0MSwgMHgxOCwKKzB4MDAsIDB4ZTAsIDB4MTksIDB4MWEsIDB4MDEsIDB4MjAsIDB4MTAsIDB4MjksIDB4MDAsIDB4ZDgsIDB4MDAsIDB4MjAsCisweDAwLCAweDI4LCAweDFmLCAweGQwLCAweDc4LCAweDZhLCAweGY5LCAweDZhLCAweGMwLCAweDQ2LCAweDA4LCAweDYwLAorMHhiOCwgMHg2YSwgMHhmOSwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MCwgMHgxMCwgMHg0YSwgMHhjMCwgMHg0NiwKKzB4MDAsIDB4OTIsIDB4ZmIsIDB4NmEsIDB4MGYsIDB4NDgsIDB4NDIsIDB4NmQsIDB4MDMsIDB4MjAsIDB4MzksIDB4NmEsCisweDAxLCAweGYwLCAweGUyLCAweGZkLCAweDM4LCAweDg4LCAweDEwLCAweDIzLCAweDE4LCAweDQzLCAweDM4LCAweDgwLAorMHgzOCwgMHg4OCwgMHg0MCwgMHgyMywgMHg5OCwgMHg0MywgMHgzOCwgMHg4MCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKKzB4NTUsIDB4ZmYsIDB4OTgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MzgsIDB4ODgsIDB4NDAsIDB4MjMsCisweDE4LCAweDQzLCAweDM4LCAweDgwLCAweGY3LCAweGU3LCAweDAwLCAweDAwLCAweDU1LCAweDU1LCAweDU1LCAweDU1LAorMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwOCwgMHgwMCwgMHgxMSwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKKzB4YjAsIDB4YjUsIDB4NDAsIDB4MjAsIDB4MmMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MDAsIDB4ZjAsCisweGZkLCAweGZlLCAweDA3LCAweDFjLCAweDQwLCAweDY4LCAweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDE4LCAweDQwLAorMHgwNSwgMHgwZiwgMHg2OCwgMHgwMSwgMHg0MCwgMHgxYiwgMHg4MCwgMHgwMCwgMHgyNiwgMHg0OSwgMHg0NCwgMHgxOCwKKzB4MjAsIDB4ODgsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MjAsIDB4ODAsIDB4MjAsIDB4ODgsIDB4NDEsIDB4MDgsCisweDM0LCAweGQzLCAweDQwLCAweDA4LCAweDQwLCAweDAwLCAweDIwLCAweDgwLCAweGEwLCAweDZjLCAweGUxLCAweDZjLAorMHg0MCwgMHgxOCwgMHhhMCwgMHg2NCwgMHgwMCwgMHgyMCwgMHhlMCwgMHg2NCwgMHhhMSwgMHg2YiwgMHgyMiwgMHg2ZCwKKzB4ODksIDB4MTgsIDB4YTEsIDB4NjMsIDB4MjAsIDB4NjUsIDB4YjgsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjUsCisweDAzLCAweDIzLCAweDFiLCAweDA3LCAweDc4LCAweDY4LCAweDE4LCAweDQwLCAweDc4LCAweDYwLCAweDYxLCAweDY4LAorMHgzNiwgMHgzMSwgMHg5NCwgMHgyOSwgMHgwNCwgMHhkOCwgMHgzOCwgMHgyMywgMHgxOCwgMHg0MywgMHg3OCwgMHg2MCwKKzB4MzgsIDB4MjAsIDB4MDMsIDB4ZTAsIDB4OTQsIDB4MjMsIDB4MTgsIDB4NDMsIDB4NzgsIDB4NjAsIDB4OTQsIDB4MjAsCisweGI4LCAweDYxLCAweDM5LCAweDY4LCAweDc4LCAweDY4LCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDIwLCAweDFjLAorMHhjYiwgMHgxZiwgMHgwNSwgMHgzYiwgMHhmZiwgMHhmNywgMHhkNywgMHhmZCwgMHgwMiwgMHgyMCwgMHg2MCwgMHg4MCwKKzB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmUsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDM4LCAweDFjLCAweGZjLCAweGY3LCAweDA3LCAweGZhLCAweDI4LCAweDAxLCAweDA2LCAweDQ5LCAweDQwLCAweDE4LAorMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg0MSwgMHg2YiwgMHgwMSwgMHgzOSwgMHg0MSwgMHg2MywKKzB4ZWYsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsCisweDVjLCAweDJiLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLCAweDkwLCAweGI1LCAweDAwLCAweDI3LAorMHgwZiwgMHg0YywgMHgwZCwgMHhlMCwgMHg0MiwgMHg2YiwgMHgwMSwgMHgzYSwgMHg0MiwgMHg2MywgMHgwMCwgMHgyYSwKKzB4MDUsIDB4ZGMsIDB4MDIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NDIsIDB4NjMsIDB4YzAsIDB4NmEsIDB4MDEsIDB4ZjAsCisweGM2LCAweGY5LCAweDAxLCAweDM3LCAweDBiLCAweDJmLCAweDA3LCAweGQyLCAweDM4LCAweDAxLCAweDAwLCAweDE5LAorMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4MSwgMHg2YSwgMHgwMCwgMHgyOSwgMHhlOSwgMHhkMSwKKzB4MDEsIDB4MjAsIDB4NDAsIDB4MDYsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4OTAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAorMHgxMCwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgzMSwgMHhjMSwgMHg2MCwgMHgwZiwgMHg0OSwgMHhjOCwgMHg2OCwKKzB4MDEsIDB4MjgsIDB4MTcsIDB4ZDEsIDB4YzgsIDB4MWQsIDB4NzksIDB4MzAsIDB4MDIsIDB4ODksIDB4MDAsIDB4MmEsCisweDEyLCAweGQwLCAweDAxLCAweDNhLCAweDAyLCAweDgxLCAweDAyLCAweDg5LCAweDAwLCAweDJhLCAweDBkLCAweGQxLAorMHg0MiwgMHg4OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHhkMSwgMHhjOSwgMHg2ZiwgMHgwMiwgMHgyMywgMHgwYSwgMHg2OCwKKzB4MWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4MDQsIDB4MjEsIDB4MDEsIDB4ODEsIDB4MDEsIDB4MjEsIDB4MDAsIDB4ZTAsCisweDAwLCAweDIxLCAweDQxLCAweDgxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhiMCwgMHhiNSwgMHgwNywgMHgxYywgMHgwMSwgMHgyMywgMHhmOCwgMHgxZCwKKzB4NjksIDB4MzAsIDB4MDMsIDB4NzMsIDB4MWUsIDB4NDgsIDB4YzIsIDB4MWQsIDB4NzksIDB4MzIsIDB4NTQsIDB4OGEsCisweDYxLCAweDFjLCAweDUxLCAweDgyLCAweGQ1LCAweDhhLCAweDAwLCAweDIxLCAweGFjLCAweDQyLCAweDA0LCAweGRiLAorMHhjNCwgMHgxZCwgMHg4OSwgMHgzNCwgMHg2MywgMHg3MCwgMHg1MSwgMHg4MiwgMHhkMSwgMHg4MywgMHgwMSwgMHgyMywKKzB4OWIsIDB4MDcsIDB4M2EsIDB4NmQsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YmEsIDB4NjEsCisweGZiLCAweDY5LCAweDlhLCAweDQyLCAweDA2LCAweGQxLCAweGY4LCAweDZjLCAweDEyLCAweDQ5LCAweGMwLCAweDQ2LAorMHgwOCwgMHg2MCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3OSwgMHg2MSwgMHg0MSwgMHg2OSwKKzB4ZmEsIDB4NmMsIDB4OTEsIDB4NDMsIDB4NDEsIDB4NjEsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDUsIDB4YzEsIDB4NjAsCisweDM4LCAweDY5LCAweDAyLCAweDI4LCAweGYxLCAweGQwLCAweGI4LCAweDY5LCAweGY5LCAweDY5LCAweDQxLCAweDFhLAorMHgwMSwgMHhkNSwgMHg3OCwgMHg2ZCwgMHg0MSwgMHgxOCwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZSwgMHhmOCwKKzB4ZjksIDB4NjksIDB4MDksIDB4MTgsIDB4ZjksIDB4NjEsIDB4NzgsIDB4NmQsIDB4ODEsIDB4NDIsIDB4ZTIsIDB4ZDMsCisweDA4LCAweDFhLCAweGY4LCAweDYxLCAweGRmLCAweGU3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhmOCwgMHhiNSwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHhmZiwgMHgyMywKKzB4MjEsIDB4MzMsIDB4OWYsIDB4NDIsIDB4MDEsIDB4ZDksIDB4ZmYsIDB4MjcsIDB4MjEsIDB4MzcsIDB4ZTEsIDB4NmUsCisweDM4LCAweDFjLCAweDAxLCAweGYwLCAweGNiLCAweGZjLCAweDJkLCAweDRkLCAweDAwLCAweDI4LCAweDEzLCAweGQxLAorMHhlMCwgMHgxZCwgMHg0OSwgMHgzMCwgMHgwMSwgMHg3YSwgMHgwMSwgMHgyMywgMHgxOSwgMHg0MywgMHgwMSwgMHg3MiwKKzB4MjksIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MjksIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCisweDAwLCAweDIwLCAweDJiLCAweDFjLCAweDAxLCAweGYwLCAweGIwLCAweGZjLCAweDAwLCAweDIwLCAweGY4LCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyMCwgMHg2OSwgMHgwMSwgMHgzMCwgMHgyMCwgMHg2MSwgMHgyMywgMHg0OSwKKzB4YzgsIDB4MWQsIDB4YjksIDB4MzAsIDB4MDIsIDB4NmIsIDB4OTIsIDB4MDAsIDB4NTEsIDB4MTgsIDB4YzAsIDB4MzEsCisweDBmLCAweDYxLCAweDAxLCAweDZiLCAweDAxLCAweDMxLCAweDg5LCAweDA3LCAweDg5LCAweDBmLCAweDAxLCAweDYzLAorMHgyMCwgMHg2YiwgMHhjMiwgMHgxOSwgMHg2MSwgMHg2ZCwgMHg4YSwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMywgMHgyMiwKKzB4MTIsIDB4MDUsIDB4M2EsIDB4NDMsIDB4MDUsIDB4ZTAsIDB4MDksIDB4MWEsIDB4N2UsIDB4MWEsIDB4MDcsIDB4ZDEsCisweDIzLCAweDIyLCAweDEyLCAweDA1LCAweDBhLCAweDQzLCAweDAwLCAweDkyLCAweDYxLCAweDZlLCAweDA5LCAweDE4LAorMHhhMiwgMHg2ZSwgMHgxMCwgMHhlMCwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgwYSwgMHg0MywgMHgwMCwgMHg5MiwKKzB4NjEsIDB4NmUsIDB4MDksIDB4MTgsIDB4MDAsIDB4MjAsIDB4YTIsIDB4NmUsIDB4MmIsIDB4MWMsIDB4MDEsIDB4ZjAsCisweDdkLCAweGZjLCAweDIzLCAweDIyLCAweDEyLCAweDA1LCAweDMyLCAweDQzLCAweDAwLCAweDkyLCAweDYxLCAweDZlLAorMHhhMiwgMHg2ZSwgMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHgwMSwgMHhmMCwgMHg3MywgMHhmYywgMHgyMCwgMHg2YiwKKzB4YzAsIDB4MTksIDB4MDAsIDB4MDksIDB4MDAsIDB4MDEsIDB4NjEsIDB4NmQsIDB4ODEsIDB4NDIsIDB4MDAsIDB4ZDgsCisweDQwLCAweDFhLCAweDIwLCAweDYzLCAweDM4LCAweDFjLCAweGI4LCAweGU3LAorMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwgMHgwNCwgMHgwMCwgMHgxYiwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4MDEsIDB4MjAsIDB4YzAsIDB4MDMsIDB4MGQsIDB4NDksCisweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweDBjLCAweDQ5LCAweGM4LCAweDFkLCAweDQ5LCAweDMwLCAweDAyLCAweDdhLAorMHgwMCwgMHgyNywgMHgwMCwgMHgyYSwgMHgwMywgMHhkMCwgMHgwNywgMHg3MiwgMHgwOCwgMHgxYywgMHhmZiwgMHhmNywKKzB4MzcsIDB4ZmYsIDB4MDgsIDB4NDksIDB4YzgsIDB4MWQsIDB4NDksIDB4MzAsIDB4MDIsIDB4N2EsIDB4MDAsIDB4MmEsCisweDAzLCAweGQwLCAweDA3LCAweDcyLCAweDA4LCAweDFjLCAweGZmLCAweGY3LCAweDJkLCAweGZmLCAweDgwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwKKzB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4MTAsIDB4MjAsIDB4MTgsIDB4NDksCisweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGY4LCAweDY4LCAweDAxLCAweDMwLCAweGY4LCAweDYwLCAweDE2LCAweDQ4LAorMHhjNCwgMHgxZCwgMHhiOSwgMHgzNCwgMHg2MSwgMHg2YiwgMHg4OSwgMHgwMCwgMHgwOSwgMHgxOCwgMHhjMCwgMHgzMSwKKzB4MDksIDB4NjksIDB4N2EsIDB4NjgsIDB4OTIsIDB4MDAsIDB4ZDIsIDB4MTksIDB4NTEsIDB4NjQsIDB4NjEsIDB4NmIsCisweDg5LCAweDAwLCAweDA4LCAweDE4LCAweGMwLCAweDMwLCAweDAxLCAweDY5LCAweDc4LCAweDY4LCAweDgwLCAweDAwLAorMHhjMCwgMHgxOSwgMHhjMCwgMHg2YiwgMHgwMSwgMHhmMCwgMHhhMiwgMHhmYSwgMHgwMSwgMHgyMywgMHg3OCwgMHg2OCwKKzB4NTgsIDB4NDAsIDB4NzgsIDB4NjAsIDB4NjAsIDB4NmIsIDB4MDEsIDB4MzAsIDB4ODAsIDB4MDcsIDB4ODAsIDB4MGYsCisweDYwLCAweDYzLCAweGY4LCAweDFkLCAweDE5LCAweDMwLCAweDQwLCAweDc5LCAweDAwLCAweDI4LCAweDAyLCAweGQxLAorMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwNywgMHhmOCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCisweDM5LCAweDQ4LCAweGMwLCAweDY4LCAweDAwLCAweDI4LCAweDA1LCAweGQwLCAweGI4LCAweDZhLCAweGMwLCAweDY4LAorMHg4MCwgMHgwOSwgMHgwMSwgMHhkMywgMHgwMiwgMHgyMCwgMHgwMCwgMHhlMCwgMHg3OCwgMHg2ZiwgMHhmYywgMHhmNywKKzB4NTksIDB4ZjgsIDB4MDQsIDB4MWMsIDB4MDYsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4ZjksIDB4MWQsIDB4MTksIDB4MzEsCisweDA4LCAweDcxLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGY4LCAweDZjLCAweDJmLCAweDQ5LAorMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHhiYSwgMHg2YSwgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHgwMCwgMHhmMCwKKzB4NTksIDB4ZjgsIDB4NjcsIDB4NjIsIDB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsCisweDBiLCAweGZkLCAweGVjLCAweGU3LCAweGY5LCAweDZkLCAweDA5LCAweDY4LCAweDA5LCAweDE4LCAweDA5LCAweDA5LAorMHgwOSwgMHgwMSwgMHg3YSwgMHg2ZCwgMHg4YSwgMHg0MiwgMHgwMCwgMHhkOCwgMHg4OSwgMHgxYSwgMHhhMSwgMHg2MiwKKzB4YjksIDB4NjgsIDB4ODksIDB4MDAsIDB4YzksIDB4MTksIDB4NGEsIDB4NmMsIDB4MDAsIDB4MmEsIDB4MDcsIDB4ZDAsCisweDRhLCAweDZjLCAweDEyLCAweDFhLCAweDRhLCAweDY0LCAweDgwLCAweDA4LCAweDgwLCAweDAwLCAweGI5LCAweDZhLAorMHgwOCwgMHgxOCwgMHhiOCwgMHg2MiwgMHgzOCwgMHg2OCwgMHhiOSwgMHg2YSwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwKKzB4NDIsIDB4NmIsIDB4OTEsIDB4NDIsIDB4MGUsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4NDEsIDB4NjQsIDB4YjgsIDB4NmEsCisweDM5LCAweDY4LCAweDg5LCAweDAwLCAweGM5LCAweDE5LCAweDQ5LCAweDZiLCAweDQwLCAweDFhLCAweGI4LCAweDYyLAorMHhiOSwgMHg2OCwgMHg4OSwgMHgwMCwgMHhjOSwgMHgxOSwgMHhjOSwgMHg2YiwgMHg0MCwgMHgxOCwgMHhiOCwgMHg2MiwKKzB4YjgsIDB4NjgsIDB4ODEsIDB4MDAsIDB4YzksIDB4MTksIDB4NDksIDB4NmMsIDB4MDAsIDB4MjksIDB4YjgsIDB4ZDEsCisweGI5LCAweDZhLCAweGZhLCAweDZiLCAweDkxLCAweDQyLCAweGI0LCAweGQwLCAweDNhLCAweDZjLCAweDkxLCAweDQyLAorMHhiMSwgMHhkMCwgMHgwMSwgMHgyMywgMHg1OCwgMHg0MCwgMHhiOCwgMHg2MCwgMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwKKzB4YzAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YjgsIDB4NjIsIDB4ZjgsIDB4NjgsIDB4MDAsIDB4MjgsIDB4MDEsIDB4ZDAsCisweDAxLCAweDM4LCAweGY4LCAweDYwLCAweDM4LCAweDY5LCAweDAwLCAweDI4LCAweGExLCAweGQwLCAweDAxLCAweDM4LAorMHgzOCwgMHg2MSwgMHg5ZSwgMHhlNywgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKKzB4ZjcsIDB4YjUsIDB4OTAsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MGQsIDB4MWMsIDB4MDAsIDB4MjAsIDB4MDUsIDB4OTAsCisweDAyLCAweDkwLCAweDAwLCAweDIyLCAweDAxLCAweDkyLCAweGY5LCAweDQ4LCAweGMwLCAweDZhLCAweGMwLCAweDQ2LAorMHhhOCwgMHg2MSwgMHhhMCwgMHg2OCwgMHg4MSwgMHgwMCwgMHgwOSwgMHgxOSwgMHg0OSwgMHg2YiwgMHhjMCwgMHg0NiwKKzB4MjAsIDB4NjAsIDB4ZTEsIDB4NjIsIDB4MTIsIDB4OWEsIDB4ZDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTgsIDB4NjAsCisweDEyLCAweDlhLCAweDUxLCAweDc4LCAweGMwLCAweDQ2LCAweDBjLCAweDkxLCAweGYwLCAweDQ4LCAweGMwLCAweDQ2LAorMHgwMywgMHg5MCwgMHhkNywgMHgxZCwgMHgwOSwgMHgzNywgMHhlMCwgMHg2YSwKKzB4YzEsIDB4MWIsIDB4MDksIDB4MDksIDB4ZTMsIDB4MWQsIDB4MTksIDB4MzMsIDB4MGMsIDB4OWEsIDB4YzAsIDB4NDYsCisweDBmLCAweDkzLCAweGViLCAweDRiLCAweGMwLCAweDQ2LCAweDBlLCAweDkzLCAweDkxLCAweDQyLCAweDAxLCAweGQzLAorMHhiOCwgMHg0MiwgMHgyMSwgMHhkOCwgMHhlMSwgMHg2OCwgMHgwMiwgMHgyOSwgMHgxZSwgMHhkMiwgMHgwMSwgMHgyMCwKKzB4MGYsIDB4OTksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NzEsIDB4MDAsIDB4MjAsIDB4MDMsIDB4OTksIDB4MDEsIDB4ZjAsCisweDU3LCAweGZiLCAweDAwLCAweDI4LCAweDAzLCAweGQxLCAweDBlLCAweDliLCAweGQ4LCAweDZiLCAweDAxLCAweDMwLAorMHhkOCwgMHg2MywgMHgwMSwgMHgyMCwgMHg4MCwgMHgwNiwgMHgwMCwgMHgyNywgMHg2OCwgMHg2MCwgMHhhZiwgMHg2MSwKKzB4ZGQsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4ZGQsIDB4NDgsIDB4MDEsIDB4NmQsIDB4NDIsIDB4NmQsCisweGRjLCAweDRiLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweDNhLCAweGZiLCAweDM4LCAweDFjLCAweDVjLCAweGUzLAorMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YiwgMHhmYywgMHgwNywgMHgxYywKKzB4ZDcsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDAsIDB4MjgsIDB4NjQsIDB4ZDAsIDB4MzgsIDB4NzgsIDB4NDAsIDB4MDcsCisweDQwLCAweDBmLCAweDAzLCAweDI4LCAweDYwLCAweGQxLCAweDA1LCAweDk4LCAweDAxLCAweDMwLCAweDAwLCAweDA2LAorMHgwMCwgMHgwZSwgMHgwNSwgMHg5MCwgMHgzOCwgMHg3OCwgMHhmMCwgMHgyMywgMHgxOCwgMHg0MCwgMHg1OCwgMHhkMSwKKzB4ZTAsIDB4NmEsIDB4YzAsIDB4MWIsIDB4MDAsIDB4MDksIDB4MGMsIDB4OTksIDB4ODgsIDB4NDIsIDB4MDIsIDB4ZDIsCisweGUwLCAweDY4LCAweDAyLCAweDI4LCAweDA1LCAweGQzLCAweGNiLCAweDQ5LCAweDg4LCAweDY4LCAweDAwLCAweGYwLAorMHg4MywgMHhmZiwgMHgwNiwgMHgxYywgMHgwNiwgMHhkMSwgMHgwMywgMHg5YiwgMHgyOCwgMHgxYywgMHgzOSwgMHgxYywKKzB4MjIsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OGIsIDB4ZmMsIDB4MTYsIDB4ZTEsIDB4MmUsIDB4NjIsIDB4ZjgsIDB4NjgsCisweDAwLCAweDI4LCAweDBkLCAweGQwLCAweGI4LCAweDg5LCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweGMxLCAweDQ5LAorMHhjOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg3MCwgMHhmZiwgMHhmOCwgMHg4OSwgMHgwMCwgMHgyOCwgMHgwMywgMHhkMCwKKzB4YmQsIDB4NDksIDB4YzksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NjksIDB4ZmYsIDB4N2EsIDB4NjgsIDB4YzAsIDB4NDYsCisweDcyLCAweDYxLCAweGI5LCAweDY4LCAweGMwLCAweDQ2LCAweGIxLCAweDYxLCAweDMwLCAweDFjLCAweGI4LCAweDQ5LAorMHgwOSwgMHg2OCwgMHgwMCwgMHhmMCwgMHg1ZSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgxNywgMHhkMSwgMHgzMCwgMHgxYywKKzB4YjQsIDB4NDksIDB4NDksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NTcsIDB4ZmYsIDB4MTAsIDB4MzcsIDB4ZTAsIDB4NmEsCisweGI4LCAweDQyLCAweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweDI3LCAweGZjLCAweDA3LCAweDFjLAorMHg2OCwgMHg2OCwgMHhhZiwgMHg0YiwgMHgxOCwgMHg0MywgMHg2OCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhhOCwgMHg2MSwKKzB4YWMsIDB4MjMsIDB4YTgsIDB4NjgsIDB4OTgsIDB4NDMsIDB4YTgsIDB4NjAsIDB4YjAsIDB4ZTAsIDB4YTgsIDB4NjksCisweGE4LCAweDI4LCAweDAxLCAweGQyLCAweGE4LCAweDIwLCAweGE4LCAweDYxLCAweDEwLCAweDM3LCAweGUwLCAweDZhLAorMHhiOCwgMHg0MiwgMHg2YywgMHhkOCwgMHg5YywgMHhlMCwgMHhhNSwgMHhlMCwgMHhhNCwgMHhlMCwgMHgxMCwgMHgyOCwKKzB4NjgsIDB4ZDEsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4NjgsIDB4NjgsIDB4MTgsIDB4NDAsIDB4MDEsIDB4MGYsCisweDQ4LCAweDAxLCAweDQwLCAweDFhLCAweDgwLCAweDAwLCAweGEwLCAweDRhLCAweDgyLCAweDE4LCAweDAxLCAweDkyLAorMHg3OCwgMHg4OCwgMHg0MiwgMHgwYiwgMHgzMSwgMHhkMywgMHg4MiwgMHgwYiwgMHgyZiwgMHhkMywgMHg5ZCwgMHg0OCwKKzB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDIsIDB4MjAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4MTAsIDB4ODAsCisweDc4LCAweDg4LCAweDAwLCAweDA1LCAweDAwLCAweDBkLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYwLAorMHhiOCwgMHg2OCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MCwgMHg3OCwgMHg2OCwgMHgwMSwgMHg5YSwKKzB4YzAsIDB4NDYsIDB4MTAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4OTAsIDB4NjQsCisweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYzLCAweDg4LCAweDAyLCAweDhmLCAweDQ5LCAweDQwLCAweDE4LAorMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MywgMHgwMSwgMHg5YSwgMHg1MCwgMHg2OCwgMHgzNiwgMHgzMCwKKzB4OTQsIDB4MjgsIDB4MDEsIDB4ZDgsIDB4MzgsIDB4MjAsIDB4MDAsIDB4ZTAsIDB4OTQsIDB4MjAsIDB4YTgsIDB4NjEsCisweDEwLCAweDM3LCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAweDI4LCAweGQ4LCAweDU4LCAweGUwLCAweDdhLCAweDg4LAorMHg5MiwgMHgwYiwgMHgwMywgMHhkMywgMHg4NSwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMywgMHg5MCwgMHgyMywgMHhlMCwKKzB4MDEsIDB4MjIsIDB4MTIsIDB4MDMsIDB4MDIsIDB4NDAsIDB4ODMsIDB4NGIsIDB4MWQsIDB4ZDAsIDB4MDMsIDB4OTMsCisweDAwLCAweDA1LCAweDAwLCAweDBkLCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDUwLCAweDYwLCAweGI4LCAweDY4LAorMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg5MCwgMHg2MCwgMHg3OCwgMHg2OCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwKKzB4MTAsIDB4NjIsIDB4MDAsIDB4MjAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsCisweDkwLCAweDY0LCAweDAxLCAweDlhLCAweGMwLCAweDQ2LCAweDkwLCAweDYzLCAweDg4LCAweDAyLCAweDc1LCAweDQ5LAorMHg0MCwgMHgxOCwgMHgwMSwgMHg5YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg2MywgMHgwMiwgMHhlMCwgMHgzMywgMHhlMCwKKzB4MmEsIDB4ZTAsIDB4MDMsIDB4OTMsIDB4MDEsIDB4MjAsIDB4MGYsIDB4OTksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NzEsCisweDEyLCAweDlhLCAweDUwLCAweDc4LCAweDA1LCAweDk5LCAweDQzLCAweDFhLCAweDBiLCAweDkzLCAweDEwLCAweDM3LAorMHhlMCwgMHg2YSwgMHhiOCwgMHg0MiwgMHgwMywgMHhkOCwgMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg5MiwgMHhmYiwKKzB4MDcsIDB4MWMsIDB4MDEsIDB4OWEsIDB4NTAsIDB4NmIsIDB4OTEsIDB4NmIsIDB4MDksIDB4MDEsIDB4NDAsIDB4MTgsCisweDBiLCAweDliLCAweDIxLCAweDFjLCAweDNhLCAweDFjLCAweGZmLCAweGY3LCAweDdkLCAweGZiLCAweDAxLCAweDlhLAorMHhjMCwgMHg0NiwgMHhkMCwgMHg2NCwgMHgwMSwgMHg5YSwgMHgwYiwgMHg5YiwgMHhjMCwgMHg0NiwgMHgxMywgMHg2NSwKKzB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4NjgsIDB4NjgsIDB4MTgsIDB4NDMsIDB4NjgsIDB4NjAsIDB4MDAsIDB4MjAsCisweGE4LCAweDYxLCAweDBkLCAweGUwLCAweDEwLCAweDM3LCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAweDAzLCAweGQ4LAorMHgyMCwgMHgxYywgMHgwMCwgMHhmMCwgMHg3MSwgMHhmYiwgMHgwNywgMHgxYywgMHgzOCwgMHg3OCwgMHg0MCwgMHgwNywKKzB4NDAsIDB4MGYsIDB4MDMsIDB4MjgsIDB4MDAsIDB4ZDEsIDB4ZjgsIDB4ZTYsIDB4YTgsIDB4NjksIDB4MDMsIDB4OTksCisweDAxLCAweGYwLCAweDI2LCAweGZhLCAweDAwLCAweDI4LCAweDJhLCAweGQxLCAweDM4LCAweDFjLCAweDIxLCAweDFjLAorMHgwMCwgMHhmMCwgMHg3OSwgMHhmYiwgMHhhOCwgMHg2OCwgMHg4MCwgMHgwOSwgMHgwNCwgMHhkMywgMHgzMCwgMHgxYywKKzB4NDksIDB4NDksIDB4NDksIDB4NjgsIDB4MDAsIDB4ZjAsIDB4ODEsIDB4ZmUsIDB4NDEsIDB4NDksIDB4MDAsIDB4MjAsCisweDAxLCAweGYwLCAweDE0LCAweGZhLCAweDAwLCAweDI4LCAweDA0LCAweGQxLCAweDBlLCAweDliLCAweGQ4LCAweDZiLAorMHgwMSwgMHgzMCwgMHhkOCwgMHg2MywgMHgxMSwgMHhlMCwgMHgwMSwgMHgyMCwgMHgwZiwgMHg5OSwgMHhjMCwgMHg0NiwKKzB4NDgsIDB4NzEsIDB4ODAsIDB4MDYsIDB4MDAsIDB4MjcsIDB4NjgsIDB4NjAsIDB4YWYsIDB4NjEsIDB4M2EsIDB4NGEsCisweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDM5LCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLCAweDM5LCAweDRiLAorMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHhmMywgMHhmOSwgMHgwMCwgMHgyMCwgMHgxNSwgMHhlMiwgMHgwNSwgMHg5OCwKKzB4MGMsIDB4OTksIDB4MDgsIDB4MWEsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MGMsIDB4OTAsIDB4MGIsIDB4OTAsCisweDBjLCAweDk4LCAweDAwLCAweDI4LCAweDAzLCAweGQwLCAweDAxLCAweDIwLCAweDBmLCAweDk5LCAweGMwLCAweDQ2LAorMHg0OCwgMHg3MSwgMHgyOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNCwgMHg5MCwgMHgwMCwgMHgyNiwgMHgwMCwgMHgyMCwKKzB4MDgsIDB4OTAsIDB4MDAsIDB4MjIsIDB4MGEsIDB4OTIsIDB4MGMsIDB4OTgsIDB4MDEsIDB4MzgsIDB4MGQsIDB4OTAsCisweGEzLCAweGUwLCAweDc4LCAweDg4LCAweDhhLCAweDFiLCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDkwLCAweDQyLAorMHgwNSwgMHhkZCwgMHgwNywgMHg5MiwgMHg4MCwgMHgxYSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOCwgMHg5MCwKKzB4MDAsIDB4ZTAsIDB4MDcsIDB4OTAsIDB4MDgsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MDcsIDB4ZDEsIDB4MGQsIDB4OTgsCisweDBhLCAweDlhLCAweDkwLCAweDQyLCAweDA3LCAweGRkLCAweDA3LCAweDk4LCAweDMwLCAweDE4LCAweDg4LCAweDQyLAorMHgwMywgMHhkOCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNSwgMHgwNiwgMHg5MCwgMHgxYywgMHhlMCwgMHgxMSwgMHgyMCwKKzB4NDAsIDB4MDUsIDB4MDYsIDB4OTAsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDIsIDB4ZDEsCisweDIwLCAweDQ4LCAweGMwLCAweDQ2LCAweDA2LCAweDkwLCAweGIxLCAweDA3LCAweDg5LCAweDBmLCAweDBmLCAweGQwLAorMHgwNywgMHg5OCwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwgMHgwOCwgMHhkMCwgMHgxZSwgMHgyOCwgMHgwOSwgMHhkYiwKKzB4MWUsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDMsIDB4MjksIDB4MDUsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDIsIDB4MjksCisweDAyLCAweGQzLCAweDAxLCAweDIwLCAweDAyLCAweDkwLCAweGRlLCAweGU3LCAweDBhLCAweDlhLCAweDAwLCAweDJhLAorMHgwNCwgMHhkMSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwNSwgMHgwNiwgMHg5OCwgMHgxOCwgMHg0MywgMHgwNiwgMHg5MCwKKzB4MDcsIDB4OTgsIDB4MDYsIDB4OTksIDB4MDgsIDB4NDMsIDB4MDIsIDB4MWMsIDB4MDAsIDB4OTAsIDB4MDQsIDB4OTgsCisweDgzLCAweDE5LCAweDFkLCAweGUwLCAweGU4LCAweDBlLCAweDAwLCAweDgwLCAweDAxLCAweDQ5LCAweGZmLCAweGZmLAorMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwNCwgMHgwMCwgMHgxMiwgMHgwMiwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKKzB4NDQsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjgsIDB4MTksIDB4MDAsIDB4ODAsIDB4NjAsIDB4MDQsIDB4MDAsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLCAweDU1LCAweDMyLCAweGZmLCAweGZmLAorMHhhYywgMHg1ZSwgMHgyMSwgMHg0MCwgMHgwZCwgMHgzZCwgMHhmZiwgMHhmZiwgMHhjZCwgMHgzMSwgMHhmZiwgMHhmZiwKKzB4MDAsIDB4MDAsIDB4MzIsIDB4MDIsIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCisweDZiLCAweGY5LCAweDA3LCAweDk4LCAweDM2LCAweDE4LCAweDAyLCAweDk4LAorMHgwMCwgMHgyOCwgMHgxNiwgMHhkMCwgMHhhOCwgMHg2OCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwNCwgMHhkMSwKKzB4MDksIDB4MjMsIDB4NWIsIDB4MDQsIDB4MDYsIDB4OTgsIDB4MTgsIDB4NDMsIDB4MDYsIDB4OTAsIDB4MDYsIDB4OTgsCisweGMyLCAweDRhLCAweDAyLCAweDQzLCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweGMxLCAweDQ4LAorMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHg1MSwgMHhmOSwgMHgwMCwgMHgyMCwKKzB4MDIsIDB4OTAsIDB4MDgsIDB4OTgsIDB4MDAsIDB4MjgsIDB4MGIsIDB4ZDEsIDB4MGIsIDB4OWIsIDB4MDEsIDB4M2IsCisweDBiLCAweDkzLCAweDEwLCAweDM3LCAweGUwLCAweDZhLCAweGI4LCAweDQyLCAweDBjLCAweGQ4LCAweDIwLCAweDFjLAorMHgwMCwgMHhmMCwgMHg4YSwgMHhmYSwgMHgwNywgMHgxYywgMHgwNywgMHhlMCwgMHg3OCwgMHg2OCwgMHgwNywgMHg5YSwKKzB4ODAsIDB4MTgsIDB4NzgsIDB4NjAsIDB4NzgsIDB4ODgsIDB4MDcsIDB4OWEsIDB4ODAsIDB4MWEsIDB4NzgsIDB4ODAsCisweDBhLCAweDlhLCAweDUwLCAweDFjLCAweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDBhLCAweDkyLCAweDBjLCAweDk4LAorMHgwYSwgMHg5YSwgMHg4MiwgMHg0MiwgMHgwMywgMHhkYSwgMHhhOSwgMHg2OSwgMHhiMSwgMHg0MiwgMHgwMCwgMHhkOSwKKzB4NTMsIDB4ZTcsIDB4YTgsIDB4NjksIDB4YjAsIDB4NDIsIDB4NmIsIDB4ZDEsIDB4YTgsIDB4NjgsIDB4MDEsIDB4MDksCisweDY5LCAweGQyLCAweDA4LCAweDlhLCAweDAwLCAweDJhLCAweDU2LCAweGQwLCAweDBjLCAweDk5LCAweDBhLCAweDlhLAorMHg4YSwgMHg0MiwgMHgzZSwgMHhkYiwgMHhiMSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwYywgMHhkMCwgMHgwOCwgMHg5YSwKKzB4ZDIsIDB4MDYsIDB4ZDIsIDB4MGUsIDB4MGIsIDB4ZDAsIDB4MWUsIDB4MmEsIDB4MDYsIDB4ZGIsIDB4MWUsIDB4MmEsCisweDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQwLCAweDAxLCAweGUwLCAweDAyLCAweDI5LCAweDAyLCAweGQyLAorMHgwMiwgMHg5OSwgMHgwMCwgMHgyOSwgMHgyMSwgMHhkMCwgMHgwOCwgMHg5YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MiwKKzB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4MDAsIDB4MjAsIDB4M2EsIDB4MWQsIDB4MDYsIDB4Y2EsIDB4MDEsIDB4ZjAsCisweDAxLCAweGY5LCAweDA4LCAweDk4LCAweDM2LCAweDE4LCAweGE4LCAweDY4LCAweDhjLCAweDIzLCAweDE4LCAweDQwLAorMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwgMHgwMCwgMHhlMCwgMHg5MiwgMHg0OCwgMHgwMSwgMHgyMiwKKzB4MDIsIDB4NDMsIDB4MDAsIDB4OTIsIDB4MDQsIDB4OTgsIDB4ODMsIDB4MTksIDB4OGUsIDB4NDgsIDB4MDEsIDB4NmQsCisweDQyLCAweDZkLCAweDAwLCAweDIwLCAweDAxLCAweGYwLCAweGVjLCAweGY4LCAweDAwLCAweDIwLCAweDAyLCAweDkwLAorMHgxNSwgMHhlMCwgMHg4YywgMHgyMywgMHgxOCwgMHg0MCwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHg0MCwgMHgwNiwKKzB4MDAsIDB4ZTAsIDB4ODgsIDB4NDgsIDB4MDgsIDB4OWEsIDB4MDIsIDB4NDMsIDB4MDAsIDB4ZTAsIDB4MDgsIDB4OWEsCisweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLAorMHgwNiwgMHhjYSwgMHgwMSwgMHhmMCwgMHhkNSwgMHhmOCwgMHgwOCwgMHg5OCwgMHgzNiwgMHgxOCwgMHgxMCwgMHgzNywKKzB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MTQsIDB4ZmEsCisweDA3LCAweDFjLCAweDY4LCAweDY4LCAweDgwLCAweDBlLCAweDZiLCAweGQyLCAweDBhLCAweDk4LCAweGMwLCAweDQ2LAorMHgwOSwgMHg5MCwgMHgwYywgMHg5OSwgMHg4OCwgMHg0MiwgMHg1YywgMHhkYSwgMHgwZCwgMHg5OCwgMHgwOSwgMHg5OSwKKzB4ODgsIDB4NDIsIDB4MDMsIDB4ZDAsIDB4N2EsIDB4ODgsIDB4MWUsIDB4ZTAsIDB4NWYsIDB4ZTAsIDB4NWUsIDB4ZTAsCisweDc4LCAweDg4LCAweDAxLCAweDIyLCAweDUyLCAweDA2LCAweDAyLCAweDQzLCAweGE5LCAweDY4LCAweDhjLCAweDIzLAorMHgxOSwgMHg0MCwgMHgwMiwgMHhkMSwgMHgwOSwgMHgyMywgMHg1YiwgMHgwNCwgMHgxYSwgMHg0MywgMHhiMSwgMHgwNywKKzB4ODksIDB4MGYsIDB4MGUsIDB4ZDAsIDB4YzMsIDB4MDYsIDB4ZGIsIDB4MGUsIDB4MDgsIDB4ZDAsIDB4MWUsIDB4MmIsCisweDA5LCAweGRiLCAweDFlLCAweDJiLCAweDAyLCAweGQxLCAweDAzLCAweDI5LCAweDA1LCAweGQxLCAweDAxLCAweGUwLAorMHgwMiwgMHgyOSwgMHgwMiwgMHhkMywgMHgwMSwgMHgyMSwgMHgwMiwgMHg5MSwgMHgwMiwgMHgxYywgMHgwOSwgMHg5OCwKKzB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDUsIDB4MWEsIDB4NDMsIDB4MDAsIDB4OTIsCisweDA0LCAweDk4LCAweDgzLCAweDE5LCAweDAwLCAweDIwLCAweDNhLCAweDFkLCAweDA2LCAweGNhLCAweDAxLCAweGYwLAorMHg4ZiwgMHhmOCwgMHg3OCwgMHg4OCwgMHg4NiwgMHgxOSwgMHgxMCwgMHgzNywgMHgwMiwgMHg5OCwgMHgwMCwgMHgyOCwKKzB4MTQsIDB4ZDAsIDB4YTgsIDB4NjgsIDB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDIsIDB4ZDAsIDB4MDEsIDB4MjAsCisweDQwLCAweDA2LCAweDAwLCAweGUwLCAweDU3LCAweDQ4LCAweDAxLCAweDIyLCAweDAyLCAweDQzLCAweDAwLCAweDkyLAorMHgwNCwgMHg5OCwgMHg4MywgMHgxOSwgMHg1MywgMHg0OCwgMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwMCwgMHgyMCwKKzB4MDEsIDB4ZjAsIDB4NzYsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4MDIsIDB4OTAsIDB4ZTAsIDB4NmEsIDB4YjgsIDB4NDIsCisweDAzLCAweGQ4LCAweDIwLCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGY5LCAweDA3LCAweDFjLCAweDA5LCAweDk4LAorMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgwOSwgMHg5MCwKKzB4MGMsIDB4OTksIDB4ODgsIDB4NDIsIDB4YTIsIDB4ZGIsIDB4NjgsIDB4NjgsIDB4MzAsIDB4NDMsIDB4MDEsIDB4MDQsCisweDA5LCAweDBjLCAweDY4LCAweDYwLCAweGU4LCAweDZhLCAweDAwLCAweGYwLCAweDdiLCAweGZhLCAweDI4LCAweGUwLAorMHgyNywgMHhlMCwgMHhhOCwgMHg2OCwgMHgwMCwgMHgwOSwgMHgxNCwgMHhkMywgMHg2OCwgMHg2OCwgMHg4MCwgMHgwZSwKKzB4MTUsIDB4ZDIsIDB4MDEsIDB4OWEsIDB4MDAsIDB4MmEsIDB4MTIsIDB4ZDAsIDB4MDEsIDB4OWEsIDB4NTAsIDB4NmIsCisweDBiLCAweDliLCAweDIxLCAweDFjLCAweDNhLCAweDFjLCAweGZmLCAweGY3LCAweDg5LCAweGY5LCAweDAxLCAweDlhLAorMHhjMCwgMHg0NiwgMHg5MCwgMHg2NCwgMHgwMSwgMHg5YSwgMHgwYiwgMHg5YiwgMHhjMCwgMHg0NiwgMHg5MywgMHg2MywKKzB4MDMsIDB4ZTAsIDB4ZTgsIDB4NmEsIDB4MzEsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NWQsIDB4ZmEsIDB4NjgsIDB4NjgsCisweDMwLCAweDQzLCAweDY4LCAweDYwLCAweGE4LCAweDY5LCAweGIwLCAweDQyLCAweDA1LCAweGQ5LCAweDAwLCAweDA0LAorMHgwMCwgMHgwYywgMHg4MCwgMHgxYiwgMHgwMCwgMHhmMCwgMHhlZSwgMHhmOSwgMHhhZSwgMHg2MSwgMHhhOCwgMHg2OCwKKzB4OGMsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MGIsIDB4ZDAsIDB4MmYsIDB4NGEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsCisweDA0LCAweDk4LCAweGMzLCAweDFmLCAweDA1LCAweDNiLCAweDJhLCAweDQ4LCAweDAxLCAweDZkLCAweDQyLCAweDZkLAorMHgwMCwgMHgyMCwgMHgwMSwgMHhmMCwgMHgyMywgMHhmOCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgyMCwgMHg2ZCwKKzB4MTgsIDB4NDMsIDB4MDAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjEsIDB4ZTEsIDB4NjksIDB4ODEsIDB4NDIsCisweDEyLCAweGQwLCAweDIyLCAweDY5LCAweDAyLCAweDJhLCAweDBmLCAweGQyLCAweDQxLCAweDFhLCAweDAxLCAweGQ1LAorMHg2MCwgMHg2ZCwgMHg0MSwgMHgxOCwgMHgyMCwgMHgxYywgMHhmZiwgMHhmNywgMHgzZiwgMHhmYiwgMHhlMSwgMHg2OSwKKzB4NDAsIDB4MTgsIDB4ZTAsIDB4NjEsIDB4NjEsIDB4NmQsIDB4ODgsIDB4NDIsIDB4MjQsIDB4ZDMsIDB4NDAsIDB4MWEsCisweGUwLCAweDYxLCAweDIxLCAweGUwLCAweDgxLCAweDQyLCAweDFmLCAweGQxLCAweDIwLCAweDY5LCAweDAyLCAweDI4LAorMHgxYywgMHhkMiwgMHgwMSwgMHgyMCwgMHg2MCwgMHg2MSwgMHgxOCwgMHg0OCwgMHg0MSwgMHg2OSwgMHhlMiwgMHg2YywKKzB4MGEsIDB4NDMsIDB4NDIsIDB4NjEsIDB4ODEsIDB4NjksIDB4ZTMsIDB4NmMsIDB4OTksIDB4NDMsIDB4ODEsIDB4NjEsCisweDAxLCAweDIxLCAweDA5LCAweDA1LCAweGNhLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDA4LCAweDYxLAorMHg4YiwgMHgwMiwgMHgyMCwgMHg2ZCwgMHgxOCwgMHg0MywgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MSwKKzB4ZTEsIDB4NjksIDB4ODEsIDB4NDIsIDB4MDIsIDB4ZDAsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4Y2MsIDB4ZmEsCisweDI4LCAweDFjLCAweDAwLCAweGYwLCAweDBmLCAweGY5LCAweDBjLCAweDk4LCAweDA1LCAweDk5LCAweDQwLCAweDE4LAorMHgwMCwgMHgwMSwgMHgxMCwgMHgzMCwgMHg2OCwgMHg2MSwgMHgxMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDIsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCisweDAwLCAweDAwLCAweDEyLCAweDAyLCAweDA0LCAweDAwLCAweDUyLCAweDAyLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHhmMCwgMHhiNSwgMHg0MCwgMHgyMCwgMHgyZCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgwMCwgMHhmMCwKKzB4MDMsIDB4ZjksIDB4MDcsIDB4MWMsIDB4ODEsIDB4NjksIDB4NDQsIDB4NmEsIDB4YTAsIDB4NmYsIDB4MDAsIDB4ZjAsCisweDQ1LCAweGZlLCAweDAwLCAweDIwLCAweGUxLCAweDFkLCAweDE5LCAweDMxLCAweDQ4LCAweDcxLCAweDc5LCAweDY4LAorMHhjOSwgMHgwZSwgMHgwOSwgMHhkMywgMHhmOCwgMHg2YSwgMHgwMCwgMHgwMSwgMHgyNCwgMHg0OSwgMHg0MCwgMHgxOCwKKzB4MjQsIDB4NGIsIDB4YzAsIDB4MTgsIDB4MDEsIDB4NjgsIDB4MDEsIDB4MzksIDB4MDEsIDB4NjAsIDB4MzYsIDB4ZTAsCisweGUxLCAweDZkLCAweDA5LCAweDY4LCAweDIyLCAweDZlLCAweGMwLCAweDQ2LCAweDExLCAweDYwLCAweDIwLCAweDRlLAorMHhmNSwgMHgxZCwgMHg3OSwgMHgzNSwgMHgwMSwgMHgyMywgMHhlOSwgMHg2YiwgMHgxOSwgMHg0MywgMHhlOSwgMHg2MywKKzB4YjksIDB4NmEsIDB4ZTIsIDB4NmQsIDB4YzAsIDB4NDYsIDB4MTEsIDB4NjAsIDB4YjksIDB4NmEsIDB4MjIsIDB4NmUsCisweGMwLCAweDQ2LCAweDExLCAweDYwLCAweDYxLCAweDY5LCAweDAwLCAweDI5LCAweDA0LCAweGQxLCAweGE5LCAweDZiLAorMHgwMSwgMHgzMSwgMHhhOSwgMHg2MywgMHgwOCwgMHgyOSwgMHgwNywgMHhkMywgMHhhOCwgMHg2MywgMHgwMSwgMHgyMCwKKzB4MDAsIDB4ZjAsIDB4ODYsIDB4ZjgsIDB4ZTgsIDB4NmIsIDB4NDAsIDB4MDgsIDB4NDAsIDB4MDAsIDB4ZTgsIDB4NjMsCisweDc4LCAweDY4LCAweDgxLCAweDBlLCAweDBmLCAweGQyLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGYxLCAweDE4LAorMHhjOSwgMHg2OCwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkMCwgMHgwMCwgMHgwOCwgMHgwNCwgMHhkMiwgMHgyMCwgMHgxYywKKzB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NDMsIDB4ZjgsIDB4MDIsIDB4ZTAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCisweDA1LCAweGZhLCAweDM4LCAweDFjLCAweGZiLCAweGY3LCAweDA2LCAweGZjLCAweDIwLCAweDFjLCAweDAwLCAweGYwLAorMHgwYiwgMHhmOCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKKzB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsIDB4YjQsIDB4MGMsIDB4MDAsIDB4MDAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDA3LCAweDFjLCAweGY4LCAweDFkLCAweDE5LCAweDMwLAorMHgwMSwgMHg3OSwgMHgwMCwgMHgyOSwgMHgwNCwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMSwgMHg3MSwgMHgzOCwgMHgxYywKKzB4ZmYsIDB4ZjcsIDB4NTYsIDB4ZmIsIDB4ZjgsIDB4NjgsIDB4MDIsIDB4MjgsIDB4MGQsIDB4ZDAsIDB4YjgsIDB4NjgsCisweDgwLCAweDAwLCAweGMyLCAweDE5LCAweDUwLCAweDZjLCAweDAwLCAweDI4LCAweDExLCAweGQwLCAweGI4LCAweDZhLAorMHg0MSwgMHg3OCwgMHgwOSwgMHgwMSwgMHgxMCwgMHgzMSwgMHg1MiwgMHg2YiwgMHgxMCwgMHgxYSwgMHg4OCwgMHg0MiwKKzB4MDUsIDB4ZDMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NDIsIDB4ZmIsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDM4LCAweDFjLCAweGZmLCAweGY3LCAweDI4LCAweGZhLCAweGY4LCAweGU3LCAweDc4LCAweDY4LAorMHg4MCwgMHgwMCwgMHhjMCwgMHgxOSwgMHhjMCwgMHg2YiwgMHhjMCwgMHg0NiwgMHhiOCwgMHg2MiwgMHhmMSwgMHhlNywKKzB4YjAsIDB4YjUsIDB4ODcsIDB4YjAsIDB4MGYsIDB4MWMsIDB4ODAsIDB4NmYsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsCisweDAwLCAweDI0LCAweDEzLCAweDRkLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGU4LCAweDE4LCAweDgwLCAweDY5LAorMHgwMCwgMHgyOCwgMHgxNywgMHhkMCwgMHg2OSwgMHg0NiwgMHhhMiwgMHgwMCwgMHg1MiwgMHgxOSwgMHgwYiwgMHgyMywKKzB4MWIsIDB4MDIsIDB4ZDIsIDB4MTgsIDB4OTIsIDB4NjksIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OTIsIDB4ZmIsCisweDAwLCAweDI4LCAweDA5LCAweGQxLCAweDAxLCAweDM0LCAweGEwLCAweDAwLCAweDQwLCAweDE5LCAweDBiLCAweDIzLAorMHgxYiwgMHgwMiwgMHhjMCwgMHgxOCwgMHg4MCwgMHg2OSwgMHgwMCwgMHgyOCwgMHhlYSwgMHhkMSwgMHgwMSwgMHhlMCwKKzB4MDEsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OWQsIDB4ZjksIDB4MDcsIDB4YjAsCisweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHhiOCwgMHhiNSwgMHhjMiwgMHgwNywgMHhkMiwgMHgwZiwgMHgxNiwgMHg0YywgMHgxNiwgMHg0OSwgMHgwMSwgMHhkMCwKKzB4MDgsIDB4MjIsIDB4MDgsIDB4ZTAsIDB4ODIsIDB4MDgsIDB4MDUsIDB4ZDMsIDB4MGMsIDB4MjIsIDB4YTQsIDB4MTgsCisweDBiLCAweDY4LCAweGRmLCAweDFkLCAweDE1LCAweDM3LCAweDAzLCAweGUwLCAweDFjLCAweDIyLCAweDBiLCAweDY4LAorMHhkZiwgMHgxZCwgMHgwOSwgMHgzNywgMHgwZiwgMHg0YiwgMHgxZCwgMHg3OCwgMHgwMCwgMHgyZCwgMHgxMywgMHhkMCwKKzB4NWIsIDB4NzgsIDB4MDAsIDB4MmIsIDB4MTAsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDYsIDB4MWEsIDB4NDMsCisweDAwLCAweDI4LCAweDAxLCAweGQxLCAweDViLCAweDA4LCAweDFhLCAweDQzLCAweDAwLCAweDkyLCAweDRhLCAweDY4LAorMHgwMSwgMHgyMCwgMHgzOSwgMHgxYywgMHgyMywgMHgxYywgMHgwMCwgMHhmMCwgMHhkZiwgMHhmZSwgMHhiOCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDMsIDB4MjMsIDB4MWIsIDB4MDYsIDB4MWEsIDB4NDMsIDB4ZjEsIDB4ZTcsCisweDkwLCAweGVlLCAweDIwLCAweDQwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweGY4LCAweDBlLCAweDAwLCAweDgwLAorMHgwMCwgMHgyMSwgMHhjMSwgMHg2MSwgMHgwNSwgMHg0OSwgMHg4YSwgMHg2OCwgMHgwMCwgMHgyYSwgMHgwMSwgMHhkMSwKKzB4ODgsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4Y2EsIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDAsIDB4NjEsIDB4YzgsIDB4NjAsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAzLCAweDQ5LCAweDg4LCAweDY4LAorMHgwMCwgMHgyOCwgMHgwMiwgMHhkMCwgMHhjMiwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4YSwgMHg2MCwgMHg3MCwgMHg0NywKKzB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsIDB4MDEsIDB4MWMsIDB4MDEsIDB4MjMsIDB4ODgsIDB4NjgsIDB4NTgsIDB4NDAsCisweDg4LCAweDYwLCAweGNhLCAweDY4LCAweDAxLCAweDNhLCAweGNhLCAweDYwLCAweDBhLCAweDY5LCAweDAxLCAweDNhLAorMHg4MCwgMHgwMCwgMHgwYSwgMHg2MSwgMHg0MiwgMHgxOCwgMHhkMCwgMHg2YiwgMHg1MywgMHg2YiwgMHhjMCwgMHg0NiwKKzB4Y2IsIDB4NjIsIDB4MGIsIDB4NjgsIDB4OWIsIDB4MDAsIDB4NTksIDB4MTgsIDB4NDksIDB4NmMsIDB4NTMsIDB4NmMsCisweGM5LCAweDE4LCAweDUxLCAweDY0LCAweDcwLCAweDQ3LCAweDhhLCAweDY4LCAweDkyLCAweDAwLCAweDUyLCAweDE4LAorMHhkMywgMHg2YiwgMHg4MywgMHg0MiwgMHgxNywgMHhkMSwgMHhkMCwgMHgxZCwgMHgzZCwgMHgzMCwgMHgwYSwgMHg2OCwKKzB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsIDB4NTIsIDB4NmMsIDB4MDMsIDB4NjgsIDB4OWEsIDB4MWEsIDB4MDIsIDB4NjAsCisweDAxLCAweDIzLCAweDg4LCAweDY4LCAweDU4LCAweDQwLCAweDg4LCAweDYwLCAweGNhLCAweDY4LCAweDAxLCAweDMyLAorMHhjYSwgMHg2MCwgMHgwYSwgMHg2OSwgMHgwMSwgMHgzMiwgMHg4MCwgMHgwMCwgMHg0MCwgMHgxOCwgMHgwYSwgMHg2MSwKKzB4NDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4NzAsIDB4NDcsIDB4YjgsIDB4YjUsIDB4MDQsIDB4MWMsCisweDFkLCAweDFjLCAweDE3LCAweDFjLCAweDA4LCAweDFjLCAweDM5LCAweDFjLCAweGZmLCAweGY3LCAweGQ5LCAweGZmLAorMHgwMCwgMHgyMCwgMHgyOSwgMHgxYywgMHgwMCwgMHhmMCwgMHg3YywgMHhmZSwgMHgwMSwgMHgyMCwgMHhmOSwgMHgxZCwKKzB4MTksIDB4MzEsIDB4NDgsIDB4NzEsIDB4ODAsIDB4MDYsIDB4NjAsIDB4NjAsIDB4MDAsIDB4MjAsIDB4YTAsIDB4NjEsCisweDA2LCAweDRhLCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDA2LCAweDQ4LAorMHgwMSwgMHg2ZCwgMHg0MiwgMHg2ZCwgMHgwNSwgMHg0YiwgMHgwMCwgMHgyMCwgMHgwMCwgMHhmMCwgMHg2MiwgMHhmZSwKKzB4YjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MTIsIDB4MDIsCisweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLCAweDA2LCAweDQ5LCAweDBhLCAweDY4LAorMHgxMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwgMHg5OCwgMHg0MiwgMHgwMywgMHhkOSwKKzB4MDMsIDB4NDksIDB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCisweGU0LCAweDJkLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDgwLCAweDA4LCAweDgwLCAweDAwLAorMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMCwgMHgxOCwgMHgwOCwgMHg2MCwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwKKzB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDMsIDB4NDksIDB4MGEsIDB4NzksIDB4MDEsIDB4MzIsIDB4MGEsIDB4NzEsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGU0LCAweDJkLCAweDAwLCAweDgwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAorMHgwMywgMHgzMCwgMHg4MCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwNiwgMHg0OSwgMHgwYSwgMHg2OCwgMHgxMCwgMHgxOCwKKzB4MDgsIDB4NjAsIDB4MDEsIDB4MjMsIDB4NWIsIDB4MDIsIDB4OTgsIDB4NDIsIDB4MDMsIDB4ZDksIDB4MDMsIDB4NDksCisweDBhLCAweDc5LCAweDAxLCAweDMyLCAweDBhLCAweDcxLCAweDcwLCAweDQ3LCAweGU0LCAweDJkLCAweDAwLCAweDgwLAorMHhhMCwgMHg4MiwgMHgyMCwgMHg0MCwgMHgwMiwgMHg0OCwgMHg0MSwgMHg3OSwgMHgwMSwgMHgzMSwgMHg0MSwgMHg3MSwKKzB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4OTAsIDB4YjQsIDB4ODIsIDB4MDAsCisweDE3LCAweDRiLCAweDlhLCAweDU4LCAweDhiLCAweDA3LCAweDAyLCAweGQwLCAweDg5LCAweDA4LCAweDBiLCAweDFkLAorMHgwMSwgMHhlMCwgMHg4OSwgMHgwOCwgMHhjYiwgMHgxYywgMHgxMSwgMHg2OSwgMHhkNywgMHg2OCwgMHgxMiwgMHg0YywKKzB4ODAsIDB4MDAsIDB4MjAsIDB4NTgsIDB4NDAsIDB4NjgsIDB4YjksIDB4NDIsIDB4MDMsIDB4ZDEsIDB4ODEsIDB4NDIsCisweDE5LCAweGQ5LCAweDExLCAweDY4LCAweDE3LCAweGUwLCAweDAwLCAweDI0LCAweGI5LCAweDQyLCAweDA5LCAweGQ5LAorMHg4MSwgMHg0MiwgMHgxMiwgMHhkOSwgMHgxMSwgMHg2OCwgMHg3OCwgMHgxYSwgMHgwMCwgMHhkNSwgMHgwMywgMHgzMCwKKzB4ODAsIDB4MTAsIDB4OTgsIDB4NDIsIDB4MGIsIDB4ZDgsIDB4MDcsIDB4ZTAsIDB4ODEsIDB4NDIsIDB4MDUsIDB4ZDgsCisweDc4LCAweDFhLCAweDAwLCAweGQ1LCAweDAzLCAweDMwLCAweDgwLCAweDEwLCAweDk4LCAweDQyLCAweDAyLCAweGQ4LAorMHgyMCwgMHgxYywgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHhjOCwgMHgxZCwgMHgwNSwgMHgzMCwgMHhmYSwgMHhlNywKKzB4NzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4YjUsIDB4ODAsIDB4MDAsIDB4MGYsIDB4NGEsIDB4MTcsIDB4NTgsCisweDg4LCAweDA3LCAweDAyLCAweGQwLCAweDg4LCAweDA4LCAweDA0LCAweDMwLCAweDAxLCAweGUwLCAweDg4LCAweDA4LAorMHgwMywgMHgzMCwgMHgzOSwgMHg2OSwgMHg3YSwgMHg2OCwgMHg5MSwgMHg0MiwgMHgwOSwgMHhkOSwgMHgzOSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MzksIDB4NjEsIDB4ZjksIDB4NjgsIDB4N2EsIDB4NjgsIDB4OTEsIDB4NDIsIDB4MDIsIDB4ZDksCisweDM5LCAweDY4LCAweGMwLCAweDQ2LCAweGY5LCAweDYwLCAweDgxLCAweDAwLCAweDM4LCAweDY5LCAweDAwLCAweGYwLAorMHhkMSwgMHhmZCwgMHgzOCwgMHg2MSwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKKzB4NzAsIDB4MDQsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDMsIDB4MjEsIDB4MDksIDB4MDcsIDB4MDEsIDB4NDAsCisweDBjLCAweDBmLCAweDAxLCAweDA0LCAweDA5LCAweDBjLCAweDAxLCAweDIyLCAweDkyLCAweDA3LCAweDAyLCAweDQwLAorMHhhMywgMHgwMCwgMHgxYywgMHg0ZiwgMHhmZiwgMHg1OCwgMHg4OSwgMHgwNywgMHg4OSwgMHgwZiwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MGMsIDB4ODAsIDB4MDgsIDB4MDAsIDB4MjksIDB4MDAsIDB4ZDAsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MmEsCisweDAxLCAweGQwLCAweDAyLCAweDMwLCAweDAwLCAweGUwLCAweDAzLCAweDMwLCAweGY5LCAweDY4LCAweDdhLCAweDY4LAorMHg5MSwgMHg0MiwgMHgwMiwgMHhkOSwgMHgzOSwgMHg2OCwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2MCwgMHg4MSwgMHgwMCwKKzB4ZjgsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4YTUsIDB4ZmQsIDB4ZjgsIDB4NjAsIDB4MGYsIDB4NDgsIDB4MDAsIDB4NjksCisweDAwLCAweDI4LCAweDA1LCAweGQwLCAweDAxLCAweDIwLCAweGEwLCAweDQwLCAweDAyLCAweGQwLCAweDIwLCAweDFjLAorMHhmZSwgMHhmNywgMHhjYSwgMHhmYywgMHgwYiwgMHg0OSwgMHhjOCwgMHgxZCwgMHgxOSwgMHgzMCwgMHgwMywgMHg3OSwKKzB4MDAsIDB4MjIsIDB4MDAsIDB4MmIsIDB4MDUsIDB4ZDEsIDB4MDksIDB4NDksIDB4YzgsIDB4MWQsIDB4MTksIDB4MzAsCisweDAzLCAweDc5LCAweDAwLCAweDJiLCAweDAzLCAweGQwLCAweDAyLCAweDcxLCAweDA4LCAweDFjLCAweGZmLCAweGY3LAorMHg3OSwgMHhmOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg3MCwgMHgwNCwgMHgwMCwgMHg4MCwKKzB4ZDAsIDB4MmMsIDB4MDAsIDB4ODAsIDB4NjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsCisweGIwLCAweGI1LCAweDJiLCAweDQ5LCAweDA5LCAweDc5LCAweDAwLCAweDI5LCAweDAzLCAweGQxLCAweDQxLCAweDY4LAorMHgyOSwgMHg0YiwgMHgxOSwgMHg0MywgMHg0MSwgMHg2MCwgMHg4MSwgMHg2OCwKKzB4NDksIDB4MDgsIDB4MDIsIDB4ZDMsIDB4MDksIDB4MjEsIDB4MDksIDB4MDQsIDB4MDEsIDB4ZTAsIDB4MGQsIDB4MjEsCisweDA5LCAweDA0LCAweDBjLCAweGM4LCAweDA4LCAweDM4LCAweDE5LCAweDQzLCAweDg3LCAweDY4LCAweGJiLCAweDBhLAorMHgwMywgMHhkMywgMHg0MywgMHg2OCwgMHg1YiwgMHgwOCwgMHgwMCwgMHhkMywgMHgwMSwgMHgzMSwgMHg0MCwgMHg2OCwKKzB4MDMsIDB4MjMsIDB4MWIsIDB4MDcsIDB4MTgsIDB4NDAsIDB4MDcsIDB4MGYsIDB4ZjgsIDB4MDAsIDB4MWQsIDB4NGMsCisweDAwLCAweDE5LCAweDIzLCAweDY4LCAweGMwLCAweDE4LCAweDUwLCAweDMwLCAweDAwLCAweDc5LCAweDAxLCAweDI4LAorMHgxMCwgMHhkMSwgMHg2MCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwZCwgMHhkMCwgMHgxMCwgMHgxYywgMHgwMCwgMHhmMCwKKzB4NzEsIDB4ZjgsIDB4MzgsIDB4MDEsIDB4MDAsIDB4MTksIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsCisweDQxLCAweDZiLCAweDAxLCAweDM5LCAweDQxLCAweDYzLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHgzOCwgMHgwMSwgMHgwMCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHgwMywgMHg2YiwKKzB4NWQsIDB4MWMsIDB4MDUsIDB4NjMsIDB4YmQsIDB4MDIsIDB4MmQsIDB4MTksIDB4ZGIsIDB4MDAsIDB4ZWIsIDB4MTgsCisweDgwLCAweDMzLCAweDE5LCAweDYzLCAweGRhLCAweDYyLCAweDgxLCAweDZiLCAweDAxLCAweDMxLCAweDgxLCAweDYzLAorMHgwMSwgMHgyMSwgMHhiOSwgMHg0MCwgMHgyMiwgMHg2OCwgMHgxMSwgMHg0MywgMHgyMSwgMHg2MCwgMHgwMSwgMHg2YiwKKzB4ODAsIDB4MjksIDB4ZTIsIDB4ZDMsIDB4MDAsIDB4MjEsIDB4MDEsIDB4NjMsIDB4ZGYsIDB4ZTcsIDB4MDAsIDB4MDAsCisweDI4LCAweDBmLCAweDAwLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGEwLCAweDFjLCAweDAwLCAweDgwLAorMHhmMCwgMHhiNSwgMHgxZiwgMHg0ZSwgMHg3MCwgMHg2OCwgMHgwMCwgMHgyOCwgMHgzNiwgMHhkMSwgMHgwMCwgMHgyNCwKKzB4YjEsIDB4NjgsIDB4NDgsIDB4MWMsIDB4YzksIDB4MDAsIDB4ODksIDB4MTksIDB4YjAsIDB4NjAsIDB4MzIsIDB4NjgsCisweDg5LCAweDE4LCAweDYwLCAweDMxLCAweDBkLCAweDdiLCAweDA4LCAweDI4LCAweDAwLCAweGQzLCAweGI0LCAweDYwLAorMHgyOCwgMHgwMSwgMHg4MCwgMHgxOSwgMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMCwgMHgxOCwgMHg4NywgMHg2YiwKKzB4MDAsIDB4MmYsIDB4MjEsIDB4ZDAsIDB4YzEsIDB4NmEsIDB4NGIsIDB4MWMsIDB4YWEsIDB4MDIsIDB4OTIsIDB4MTksCisweGM5LCAweDAwLCAweDUxLCAweDE4LCAweDgwLCAweDMxLCAweGMzLCAweDYyLCAweGNhLCAweDZhLCAweDA5LCAweDZiLAorMHgwMSwgMHgzZiwgMHg4NywgMHg2MywgMHg4MCwgMHgyYiwgMHgwMCwgMHhkMywgMHhjNCwgMHg2MiwgMHgwMCwgMHgyZiwKKzB4MDYsIDB4ZDEsIDB4MDEsIDB4MjcsIDB4YWYsIDB4NDAsIDB4M2IsIDB4MWMsIDB4ZGIsIDB4NDMsIDB4MzcsIDB4NjgsCisweDNiLCAweDQwLCAweDMzLCAweDYwLCAweDQzLCAweDZiLCAweDAxLCAweDNiLCAweDQzLCAweDYzLCAweDEwLCAweDFjLAorMHgzNywgMHgxYywgMHgwMCwgMHhmMCwgMHgwOSwgMHhmOCwgMHg3OCwgMHg2OCwgMHgwMCwgMHgyOCwgMHhjOSwgMHhkMCwKKzB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCisweGYwLCAweGI1LCAweGNkLCAweDBmLCAweGVkLCAweDA3LCAweDAxLCAweDI0LCAweDAwLCAweDI3LCAweDJlLCAweDRiLAorMHgyZSwgMHg0YSwgMHgwMCwgMHgyZCwgMHgxZCwgMHhkMCwgMHhkOCwgMHg2YSwgMHgwMSwgMHgzMCwgMHhkOCwgMHg2MiwKKzB4MTAsIDB4MWMsIDB4NTIsIDB4NjksIDB4MDAsIDB4MmEsIDB4MTIsIDB4ZDAsIDB4MDIsIDB4NjksIDB4NTMsIDB4MWMsCisweDkyLCAweDAwLCAweDEyLCAweDE4LCAweDAzLCAweDYxLCAweDkxLCAweDYxLCAweDQxLCAweDY5LCAweDAxLCAweDMxLAorMHg0MSwgMHg2MSwgMHgwMiwgMHg2OSwgMHgwZiwgMHgyYSwgMHgwMCwgMHhkMywgMHgwNywgMHg2MSwgMHgwZiwgMHgyOSwKKzB4MDAsIDB4ZDMsIDB4NDQsIDB4NjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDgsIDB4MWMsCisweGZmLCAweGY3LCAweGVlLCAweGZlLCAweGY4LCAweGU3LCAweDE1LCAweDY5LCAweDZlLCAweDFjLCAweGFkLCAweDAwLAorMHhhZCwgMHgxOCwgMHgxNiwgMHg2MSwgMHhhOSwgMHg2MSwgMHg1NSwgMHg2OSwgMHgwMSwgMHgzNSwgMHg1NSwgMHg2MSwKKzB4MTYsIDB4NjksIDB4MGYsIDB4MmUsIDB4MDAsIDB4ZDMsIDB4MTcsIDB4NjEsIDB4MGYsIDB4MmQsIDB4MDAsIDB4ZDMsCisweDU0LCAweDYwLCAweDhjLCAweDAyLCAweGE0LCAweDBhLCAweDE2LCAweDRmLCAweDNhLCAweDZmLCAweGZkLCAweDY4LAorMHhmOSwgMHgxZCwgMHg3OSwgMHgzMSwgMHgwMSwgMHgyZCwgMHgwYywgMHhkMSwgMHhkYiwgMHg2ZCwgMHg1YiwgMHgwOCwKKzB4MDksIDB4ZDMsIDB4MGIsIDB4ODksIDB4MDAsIDB4MmIsIDB4MDYsIDB4ZDEsIDB4ZmQsIDB4NmYsIDB4MDMsIDB4M2IsCisweDJlLCAweDY4LCAweDMzLCAweDQwLCAweDJiLCAweDYwLCAweDE0LCAweDIzLCAweDBiLCAweDgxLCAweDEwLCAweDYwLAorMHg4MCwgMHgwNywgMHg4MCwgMHgwYSwgMHgyMCwgMHg0MywgMHgwMywgMHgwNCwgMHgwMCwgMHhkMCwgMHgwMSwgMHgzOCwKKzB4NTAsIDB4NjAsIDB4MDksIDB4NmEsIDB4MDgsIDB4MzIsIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZDgsIDB4MDcsIDB4NGEsCisweDAwLCAweDBkLCAweDAyLCAweGQzLCAweDUxLCAweDIwLCAweDgwLCAweDAzLCAweDgyLCAweDYxLCAweDNhLCAweDY3LAorMHhiZSwgMHhlNywgMHgwMCwgMHgwMCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsCisweGIwLCAweGI1LCAweDAwLCAweDI4LCAweDA0LCAweGQxLCAweDAxLCAweDIwLCAweGMwLCAweDA1LCAweDE2LCAweDQ5LAorMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgxNSwgMHg0YywgMHgwMCwgMHgyNSwgMHg2NywgMHg2OSwgMHgwMCwgMHgyZiwKKzB4MTYsIDB4ZDAsIDB4ZTAsIDB4NjgsIDB4NDEsIDB4MWMsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4ZTEsIDB4NjAsCisweDgwLCAweDY5LCAweDAxLCAweDNmLCAweGZmLCAweGY3LCAweDk0LCAweGZlLCAweGUwLCAweDY4LCAweDBmLCAweDI4LAorMHgwMCwgMHhkMywgMHhlNSwgMHg2MCwgMHhlMCwgMHg2OCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHg4MCwgMHg2OSwKKzB4MDAsIDB4MDgsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MmYsIDB4ZWEsIDB4ZDEsIDB4NjcsIDB4NjEsIDB4MDMsIDB4ZTAsCisweDA4LCAweDQ4LCAweDAxLCAweDZkLCAweDAxLCAweDMxLCAweDAxLCAweDY1LCAweDY1LCAweDYwLCAweDIwLCAweDY4LAorMHgwMCwgMHgyOCwgMHgwMSwgMHhkMCwgMHhmZiwgMHhmNywgMHgyNiwgMHhmZiwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4YTAsIDB4MWMsIDB4MDAsIDB4ODAsCisweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweGIwLCAweGI0LCAweDEwLCAweDIzLAorMHg4MiwgMHg2OCwgMHgxMywgMHg0MCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyYiwgMHgxNSwgMHhkMCwgMHgwYywgMHg0YiwKKzB4MWEsIDB4NDAsIDB4MTIsIDB4MDEsIDB4ODEsIDB4MjQsIDB4MTQsIDB4NDMsIDB4MDIsIDB4NjgsIDB4MTUsIDB4NjgsCisweDEzLCAweDFkLCAweDgwLCAweGNiLCAweDFiLCAweDY4LCAweDA0LCAweDNhLCAweDAyLCAweDYwLCAweDIwLCAweGMyLAorMHg4MCwgMHhjMiwgMHgwOCwgMHhjMiwgMHgxNCwgMHg2MCwgMHg0MiwgMHg2OCwgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywKKzB4MDQsIDB4MzIsIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjAsIDB4MDgsIDB4MWMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsCisweDAwLCAweGYwLCAweGZmLCAweDBmLCAweGYwLCAweGI0LCAweDgyLCAweDY4LCAweDUzLCAweDA5LCAweDM0LCAweGQzLAorMHgxYiwgMHg0YiwgMHgxYSwgMHg0MCwgMHgxMiwgMHgwMSwgMHg4MSwgMHgyNiwgMHgxNiwgMHg0MywgMHgwMywgMHg2OCwKKzB4MWQsIDB4NjgsIDB4MWYsIDB4MWQsIDB4MTAsIDB4Y2YsIDB4M2YsIDB4NjgsIDB4MDQsIDB4M2IsIDB4MDMsIDB4NjAsCisweDIwLCAweGMzLCAweDEwLCAweGMzLCAweDgwLCAweGMzLCAweDFlLCAweDYwLCAweDQzLCAweDY4LCAweDFmLCAweDFkLAorMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgzYiwgMHg0MywgMHg0MywgMHg2MCwgMHhjYiwgMHg2YiwgMHgxOCwgMHgxZiwKKzB4YzgsIDB4NjMsIDB4ODAsIDB4Y2IsIDB4ODAsIDB4YzAsIDB4MWMsIDB4NjgsIDB4MWYsIDB4MWQsIDB4MDMsIDB4MWQsCisweDA0LCAweDYwLCAweDM4LCAweDFjLCAweDNmLCAweDY4LCAweGMwLCAweDQ2LCAweDFmLCAweDYwLCAweDFmLCAweDFkLAorMHg0MywgMHg2OCwgMHgxYywgMHgwNCwgMHgyNCwgMHgwYywgMHg4MSwgMHgyMywgMHgyMywgMHg0MywgMHgzYiwgMHg2MCwKKzB4NDAsIDB4NjgsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MDQsIDB4MTAsIDB4NDMsIDB4NzgsIDB4NjAsIDB4MDgsIDB4NmUsCisweDA0LCAweDMwLCAweDA4LCAweDY2LCAweDQ4LCAweDZlLCAweDA0LCAweDMwLCAweDQ4LCAweDY2LCAweDAwLCAweDIwLAorMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHhmMCwgMHhmZiwgMHgwZiwgMHg4MCwgMHhiNCwgMHg4MSwgMHg2YSwKKzB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4Y2EsIDB4MWQsIDB4MDUsIDB4MzIsIDB4MWEsIDB4NDMsIDB4MTIsIDB4NjgsCisweGNmLCAweDFkLCAweDAxLCAweDM3LCAweDNiLCAweDQzLCAweDFiLCAweDY4LCAweGMwLCAweDQ2LCAweGNiLCAweDYwLAorMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwZiwgMHgxZCwgMHgzYiwgMHg0MywgMHgxYiwgMHg2OCwgMHhjMCwgMHg0NiwKKzB4OGIsIDB4NjAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MGIsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MGMsIDB4YzEsCisweDAyLCAweDYyLCAweDAxLCAweDZiLCAweGMwLCAweDQ2LCAweDBhLCAweDYyLCAweDA0LCAweDIzLCAweDgxLCAweDY5LAorMHgxOSwgMHg0MywgMHg4MSwgMHg2MSwgMHgwMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHg5MSwgMHg2MSwgMHg4MSwgMHg2YSwKKzB4MDQsIDB4MzEsIDB4ODEsIDB4NjIsIDB4MDIsIDB4NmIsIDB4YzAsIDB4NDYsIDB4OTEsIDB4NjIsIDB4YzEsIDB4MWQsCisweDM5LCAweDMxLCAweDRhLCAweDhiLCAweDA0LCAweDNhLCAweDRhLCAweDgzLCAweDQ5LCAweDhiLCAweDAyLCAweDZiLAorMHg0MCwgMHgzMiwgMHg1MSwgMHg4MywgMHhjMSwgMHg4OSwgMHgwNCwgMHgzOSwgMHhjMSwgMHg4MSwgMHhjMSwgMHg2OCwKKzB4MDAsIDB4NmIsIDB4YzAsIDB4NDYsIDB4YzEsIDB4NjAsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsCisweDAwLCAweDQ3LCAweDA4LCAweDQ3LCAweDEwLCAweDQ3LCAweDE4LCAweDQ3LCAweDIwLCAweDQ3LCAweDI4LCAweDQ3LAorMHgzMCwgMHg0NywgMHgzOCwgMHg0NywgMHgzMCwgMHg0MCwgMHgyZCwgMHhlOSwgMHgwYywgMHhjMCwgMHg5ZCwgMHhlNSwKKzB4MGMsIDB4NDgsIDB4YTAsIDB4ZTEsIDB4MjQsIDB4NDgsIDB4YjAsIDB4ZTEsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MGEsCisweDAxLCAweGMwLCAweDRjLCAweGUyLCAweDE4LCAweDQwLCAweGEwLCAweGUzLCAweDY0LCAweDUxLCAweDlmLCAweGU1LAorMHg5NCwgMHg1MCwgMHgyMCwgMHhlMCwgMHgwMCwgMHg1MCwgMHg5MCwgMHhlNSwgMHgxNCwgMHg0MCwgMHg5MCwgMHhlNSwKKzB4MDAsIDB4MzAsIDB4ODUsIDB4ZTUsIDB4MDQsIDB4YzAsIDB4ODUsIDB4ZTUsIDB4MDgsIDB4MTAsIDB4ODUsIDB4ZTUsCisweDBjLCAweDIwLCAweDg1LCAweGU1LCAweDEwLCAweDEwLCAweDkwLCAweGU1LAorMHgxMCwgMHg1MCwgMHg4NSwgMHhlMiwgMHgwMSwgMHgwMCwgMHg1NSwgMHhlMSwgMHgwYywgMHg1MCwgMHg5MCwgMHg1NSwKKzB4MDQsIDB4MDAsIDB4NTUsIDB4ZTEsIDB4MDUsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MTAsIDB4OTAsIDB4ZTUsCisweDAwLCAweDUwLCAweDgwLCAweGU1LCAweDAwLCAweDUwLCAweDgxLCAweGU1LCAweDAwLCAweDAwLCAweGEwLCAweGUzLAorMHgzMCwgMHg0MCwgMHhiZCwgMHhlOCwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgwMCwgMHgzMCwgMHg5MywgMHhlNSwKKzB4MDgsIDB4MjAsIDB4OTAsIDB4ZTUsIDB4MDEsIDB4MzEsIDB4ODMsIDB4ZTMsIDB4MDIsIDB4MzYsIDB4ODMsIDB4ZTMsCisweDAzLCAweDAwLCAweDU1LCAweGUxLCAweDE0LCAweDMwLCAweDgwLCAweGU1LCAweGYyLCAweGZmLCAweGZmLCAweDFhLAorMHgwMSwgMHgwMCwgMHhhMCwgMHhlMywgMHhmNCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgwMSwgMHgwNiwgMHgxYywgMHhlMywKKzB4ZjEsIDB4ZmYsIDB4ZmYsIDB4MGEsIDB4ZWMsIDB4MTAsIDB4OWYsIDB4ZTUsIDB4MDIsIDB4YzYsIDB4Y2MsIDB4ZTMsCisweDU0LCAweDIwLCAweDkxLCAweGU1LCAweGU0LCAweDMwLCAweDlmLCAweGU1LCAweDUwLCAweDEwLCAweDkxLCAweGU1LAorMHhkOSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhmMCwgMHg0NywgMHgyZCwgMHhlOSwgMHgyMCwgMHhjMCwgMHg5ZCwgMHhlNSwKKzB4MGMsIDB4NjgsIDB4YTAsIDB4ZTEsIDB4MjYsIDB4NjgsIDB4YjAsIDB4ZTEsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MGEsCisweDE4LCAweDQwLCAweGEwLCAweGUzLCAweGI4LCAweDUwLCAweDlmLCAweGU1LCAweDk0LCAweDAwLCAweDAwLCAweGUwLAorMHgwNSwgMHgwMCwgMHg4MCwgMHhlMCwgMHgwOCwgMHg0MCwgMHg5MCwgMHhlNSwgMHgwNCwgMHg4MCwgMHg5MCwgMHhlNSwKKzB4MDAsIDB4NzAsIDB4YTAsIDB4ZTMsIDB4MWYsIDB4YzAsIDB4YTAsIDB4ZTMsIDB4MDIsIDB4YzQsIDB4OGMsIDB4ZTMsCisweDAwLCAweDUwLCAweDkwLCAweGU1LCAweDEwLCAweDkwLCAweDkwLCAweGU1LCAweDE0LCAweGEwLCAweDkwLCAweGU1LAorMHgwMCwgMHgzMCwgMHg4NSwgMHhlNSwgMHgwNCwgMHhjMCwgMHg4NSwgMHhlNSwgMHgwOCwgMHgxMCwgMHg4NSwgMHhlNSwKKzB4MGMsIDB4MjAsIDB4ODUsIDB4ZTUsIDB4MTAsIDB4NTAsIDB4ODUsIDB4ZTIsIDB4MDksIDB4MDAsIDB4NTUsIDB4ZTEsCisweDBjLCAweDUwLCAweDkwLCAweDU1LCAweDBhLCAweDAwLCAweDU1LCAweGUxLCAweDE1LCAweDAwLCAweDAwLCAweDBhLAorMHgwMywgMHg3MCwgMHgxNywgMHhlMiwgMHgyMCwgMHgxMCwgMHg4MSwgMHhlMiwgMHgyMCwgMHgzMCwgMHg4MywgMHhlMiwKKzB4MGEsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDAsIDB4NjAsIDB4OTYsIDB4ZTIsIDB4MDEsIDB4NzAsIDB4ODcsIDB4ZTIsCisweDA5LCAweDAwLCAweDAwLCAweDBhLCAweDIwLCAweDYwLCAweDQ2LCAweGUyLCAweDIwLCAweDAwLCAweDU2LCAweGUzLAorMHhlYywgMHhmZiwgMHhmZiwgMHhjYSwgMHgwMCwgMHg3MCwgMHhhMCwgMHhlMywgMHgwMSwgMHhjMCwgMHg0NiwgMHhlMiwKKzB4MDIsIDB4YzQsIDB4OGMsIDB4ZTMsIDB4MDAsIDB4NjAsIDB4YTAsIDB4ZTMsIDB4ZTcsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisweDAwLCAweDUwLCAweDg4LCAweGU1LCAweGYyLCAweGZmLCAweGZmLCAweGVhLCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorMHgwMCwgMHg1MCwgMHg4MCwgMHhlNSwgMHgwMSwgMHgwMCwgMHhhMCwgMHhlMSwgMHhmMCwgMHg0NywgMHhiZCwgMHhlOCwKKzB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDAsIDB4YTAsIDB4OTQsIDB4ZTUsIDB4MGEsIDB4MDAsIDB4NTUsIDB4ZTEsCisweDE0LCAweGEwLCAweDgwLCAweGU1LCAweGU1LCAweGZmLCAweGZmLCAweDFhLCAweDAxLCAweDEwLCAweGEwLCAweGUzLAorMHhmNSwgMHhmZiwgMHhmZiwgMHhlYSwgMHhhOCwgMHgwMywgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4ODAsIDB4MjAsIDB4NDAsIDB4NjgsIDB4ODIsIDB4OWYsIDB4ZTUsIDB4MGIsIDB4OTIsIDB4YTAsIDB4ZTMsCisweDY0LCAweGEyLCAweDlmLCAweGU1LCAweDU4LCAweGIwLCAweDlhLCAweGU1LCAweDBlLCAweGYwLCAweGEwLCAweGUxLAorMHg1NCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgzZiwgMHg0MCwgMHgyZCwgMHhlOSwKKzB4MDAsIDB4MDAsIDB4NGYsIDB4ZTEsIDB4MWYsIDB4MDAsIDB4MDAsIDB4ZTIsIDB4MTIsIDB4MDAsIDB4NTAsIDB4ZTMsCisweDU0LCAweDAwLCAweDAwLCAweDBhLCAweDAwLCAweDAwLCAweDBmLCAweGUxLCAweDgwLCAweDAwLCAweGMwLCAweGUzLAorMHgwMCwgMHhmMCwgMHgyMSwgMHhlMSwgMHgwNCwgMHg1MCwgMHhhMCwgMHhlMywgMHgwMCwgMHg0MCwgMHg5OSwgMHhlNSwKKzB4MDksIDB4MDAsIDB4MDAsIDB4ZWEsIDB4MDIsIDB4MDAsIDB4MTQsIDB4ZTMsIDB4NTMsIDB4MDAsIDB4MDAsIDB4MWIsCisweDgwLCAweDAwLCAweDE0LCAweGUzLCAweDU5LCAweDAwLCAweDAwLCAweDFiLCAweDIwLCAweDAwLCAweDE0LCAweGUzLAorMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwNywgMHgxNCwgMHhlMywgMHg1OSwgMHgwMCwgMHgwMCwgMHgxYiwKKzB4MDEsIDB4MDYsIDB4MTQsIDB4ZTMsIDB4NTksIDB4MDAsIDB4MDAsIDB4MWIsIDB4MDgsIDB4MDAsIDB4MTQsIDB4ZTMsCisweDQ1LCAweDAwLCAweDAwLCAweDFiLCAweDAyLCAweDA1LCAweDE0LCAweGUzLCAweDRhLCAweDAwLCAweDAwLCAweDFiLAorMHgwMiwgMHgwOCwgMHgxNCwgMHhlMywgMHg0YiwgMHgwMCwgMHgwMCwgMHgxYiwgMHhlNSwgMHgwZSwgMHgxNCwgMHhlMywKKzB4MDcsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDQsIDB4MjAsIDB4OTgsIDB4ZTUsIDB4MGMsIDB4MTAsIDB4OTgsIDB4ZTUsCisweDA0LCAweDMwLCAweDUyLCAweGUyLCAweDNjLCAweDMwLCAweGEwLCAweGIzLCAweDA0LCAweDMwLCAweDg4LCAweGU1LAorMHgwMiwgMHgwMCwgMHg5MSwgMHhlNywgMHgwZiwgMHhlMCwgMHhhMCwgMHhlMSwKKzB4MTAsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MDEsIDB4NTAsIDB4NTUsIDB4ZTIsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MGEsCisweDAwLCAweDQwLCAweDk5LCAweGU1LCAweDBjLCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAorMHgxYiwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwOCwgMHgwMCwgMHg5YSwgMHhlNSwgMHgwMCwgMHgwMCwgMHgxNCwgMHhlMSwKKzB4MGIsIDB4MDAsIDB4MDAsIDB4MGEsIDB4MDEsIDB4MGMsIDB4MTQsIDB4ZTMsIDB4OTgsIDB4MDEsIDB4OWYsIDB4MTUsCisweDBmLCAweGUwLCAweGEwLCAweDExLCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDA0LCAweDE0LCAweGUzLAorMHg4YywgMHgwMSwgMHg5ZiwgMHgxNSwgMHgwZiwgMHhlMCwgMHhhMCwgMHgxMSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwKKzB4MDEsIDB4MDksIDB4MTQsIDB4ZTMsIDB4ODAsIDB4MDEsIDB4OWYsIDB4MTUsIDB4MGYsIDB4ZTAsIDB4YTAsIDB4MTEsCisweDEwLCAweGZmLCAweDJmLCAweDExLCAweDA0LCAweDAwLCAweDlhLCAweGU1LCAweDAwLCAweDAwLCAweDE0LCAweGUxLAorMHgxNiwgMHgwMCwgMHgwMCwgMHgwYSwgMHg1NCwgMHhlMCwgMHg4ZiwgMHhlMiwgMHgwNCwgMHgwMCwgMHgxNCwgMHhlMywKKzB4NDAsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDIsIDB4MGEsIDB4MTQsIDB4ZTMsCisweDQ0LCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAyLCAweDA5LCAweDE0LCAweGUzLAorMHg0OCwgMHgwMCwgMHg5YSwgMHgxNSwgMHgxMCwgMHhmZiwgMHgyZiwgMHgxMSwgMHgwMSwgMHgwMiwgMHgxNCwgMHhlMywKKzB4NGMsIDB4MDAsIDB4OWEsIDB4MTUsIDB4MTAsIDB4ZmYsIDB4MmYsIDB4MTEsIDB4MDEsIDB4MDQsIDB4MTQsIDB4ZTMsCisweDUwLCAweDAwLCAweDlhLCAweDE1LCAweDEwLCAweGZmLCAweDJmLCAweDExLCAweDAxLCAweDBhLCAweDE0LCAweGUzLAorMHgyMSwgMHgwMCwgMHgwMCwgMHgxYiwgMHgwMiwgMHgwMCwgMHgxNCwgMHhlMywgMHgwZSwgMHgwMCwgMHgwMCwgMHgxYiwKKzB4MTAsIDB4MDAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MTQsIDB4ZTEsIDB4MWMsIDB4MDAsIDB4MDAsIDB4MWIsCisweDAwLCAweDQwLCAweDk5LCAweGU1LCAweDA0LCAweDUwLCAweGEwLCAweGUzLCAweDAwLCAweDQwLCAweDk0LCAweGUyLAorMHgxYiwgMHhmZiwgMHgyZiwgMHgxMSwgMHgzZiwgMHg0MCwgMHhiZCwgMHhlOCwgMHgwNCwgMHhmMCwgMHg1ZSwgMHhlMiwKKzB4YzAsIDB4MDAsIDB4ODAsIDB4ZTMsIDB4MDAsIDB4ZjAsIDB4NjEsIDB4ZTEsIDB4ZmEsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisweDE4LCAweDAwLCAweDlhLCAweGU1LCAweDFjLCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLAorMHg1NCwgMHhiMCwgMHg5YSwgMHhlNSwgMHgxYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxNCwgMHgwMCwgMHg5YSwgMHhlNSwKKzB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MjAsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCisweDExLCAweGZmLCAweDJmLCAweGUxLCAweDI0LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLAorMHgyOCwgMHgxMCwgMHg5YSwgMHhlNSwgMHgxMSwgMHhmZiwgMHgyZiwgMHhlMSwgMHgyYywgMHgxMCwgMHg5YSwgMHhlNSwKKzB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzAsIDB4MTAsIDB4OWEsIDB4ZTUsIDB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsCisweDM0LCAweDEwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweGZlLCAweGZmLCAweGZmLCAweGVhLAorMHgzOCwgMHhlMCwgMHg5YSwgMHhlNSwgMHgzYywgMHgxMCwgMHg5YSwgMHhlNSwgMHgxOCwgMHgwMCwgMHg5YSwgMHhlNSwKKzB4MTEsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4MzgsIDB4ZTAsIDB4OWEsIDB4ZTUsIDB4M2MsIDB4MTAsIDB4OWEsIDB4ZTUsCisweDE0LCAweDAwLCAweDlhLCAweGU1LCAweDExLCAweGZmLCAweDJmLCAweGUxLCAweDY0LCAweDIwLCAweDlmLCAweGU1LAorMHgwMCwgMHgzMCwgMHg5MiwgMHhlNSwgMHgwMCwgMHgzMCwgMHg1MywgMHhlMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHhiYSwKKzB4MDAsIDB4MzAsIDB4ODIsIDB4ZTUsIDB4MGMsIDB4MDAsIDB4OTIsIDB4ZTUsIDB4MDgsIDB4MzAsIDB4OTIsIDB4ZTUsCisweDAwLCAweDEwLCAweDkxLCAweGUyLCAweDAzLCAweDAwLCAweDAwLCAweDBhLCAweDAzLCAweDEwLCAweDgwLCAweGU3LAorMHgwNCwgMHgzMCwgMHg1MywgMHhlMiwgMHgzYywgMHgzMCwgMHhhMCwgMHhiMywgMHgwOCwgMHgzMCwgMHg4MiwgMHhlNSwKKzB4MDEsIDB4MDAsIDB4YTAsIDB4ZTMsIDB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4M2MsIDB4MTAsIDB4OWYsIDB4ZTUsCisweDAwLCAweDAwLCAweDkxLCAweGU1LCAweDAxLCAweDAwLCAweDgwLCAweGUyLCAweDAwLCAweDAwLCAweDgxLCAweGU1LAorMHgwMCwgMHgwMCwgMHhhMCwgMHhlMywgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgxMCwgMHgwMCwgMHg5ZiwgMHhlNSwKKzB4MDgsIDB4MTAsIDB4OTAsIDB4ZTUsIDB4MDQsIDB4MTAsIDB4NTEsIDB4ZTIsIDB4M2MsIDB4MTAsIDB4YTAsIDB4YjMsCisweDA4LCAweDEwLCAweDgwLCAweGU1LCAweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAorMHhjYywgMHgwNCwgMHgwMCwgMHg4MCwgMHg3MSwgMHgyYiwgMHhmZiwgMHhmZiwgMHhkMSwgMHgzZCwgMHhmZiwgMHhmZiwKKzB4YzksIDB4MmIsIDB4ZmYsIDB4ZmYsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4YzksIDB4MWMsIDB4ODksIDB4MDgsCisweDg5LCAweDAwLCAweDAxLCAweDIzLCAweDg1LCAweDRhLCAweDViLCAweDA3LCAweDE4LCAweDQzLCAweDEzLCAweDY4LAorMHg1YiwgMHgxOCwgMHgxMywgMHg2MCwgMHgwMCwgMHgxZiwgMHg4MSwgMHhhMywgMHg1YiwgMHgxYSwgMHgxOCwgMHg0NywKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LCAweDA0LCAweDIwLCAweGEwLCAweGU1LAorMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwgMHgwNCwgMHgyMCwgMHhhMCwgMHhlNSwKKzB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsIDB4MDQsIDB4MjAsIDB4YTAsIDB4ZTUsCisweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGU0LCAweDJkLCAweDAwLCAweDgwLAorMHg5OCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHg5OCwgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwKKzB4OTQsIDB4MzAsIDB4OWYsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ZTEsCisweDAzLCAweDAwLCAweDAwLCAweDFhLCAweDA0LCAweDEwLCAweDgxLCAweGUyLCAweDA0LCAweDIwLCAweDUyLCAweGUyLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwYSwgMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHg3OCwgMHgwMCwgMHg5ZiwgMHhlNSwKKzB4MDAsIDB4MjAsIDB4ODAsIDB4ZTUsIDB4NzQsIDB4MDAsIDB4OWYsIDB4ZTUsIDB4NzQsIDB4MTAsIDB4OWYsIDB4ZTUsCisweDAxLCAweDIwLCAweDQwLCAweGUwLCAweDYwLCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDAwLCAweDkxLCAweGU1LAorMHgwMywgMHgwMCwgMHg1MCwgMHhlMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgxYSwgMHgwNCwgMHgxMCwgMHg4MSwgMHhlMiwKKzB4MDQsIDB4MjAsIDB4NTIsIDB4ZTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MGEsIDB4ZjgsIDB4ZmYsIDB4ZmYsIDB4ZWEsCisweDUwLCAweDAwLCAweDlmLCAweGU1LCAweDAwLCAweDIwLCAweDgwLCAweGU1LCAweDRjLCAweDAwLCAweDlmLCAweGU1LAorMHg0YywgMHgxMCwgMHg5ZiwgMHhlNSwgMHgwMSwgMHgyMCwgMHg0MCwgMHhlMCwgMHgyYywgMHgzMCwgMHg5ZiwgMHhlNSwKKzB4MDAsIDB4MDAsIDB4OTEsIDB4ZTUsIDB4MDMsIDB4MDAsIDB4NTAsIDB4ZTEsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MWEsCisweDA0LCAweDEwLCAweDgxLCAweGUyLCAweDA0LCAweDIwLCAweDUyLCAweGUyLCAweDAwLCAweDAwLCAweDAwLCAweDBhLAorMHhmOCwgMHhmZiwgMHhmZiwgMHhlYSwgMHgyOCwgMHgwMCwgMHg5ZiwgMHhlNSwgMHgwMCwgMHgyMCwgMHg4MCwgMHhlNSwKKzB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4N2MsIDB4MzQsIDB4MDAsIDB4ODAsIDB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsCisweGFkLCAweGRlLCAweGFkLCAweGRlLCAweGMwLCAweDA0LCAweDAwLCAweDgwLCAweGZjLCAweDM3LCAweDAwLCAweDgwLAorMHg4MCwgMHgzNCwgMHgwMCwgMHg4MCwgMHhjNCwgMHgwNCwgMHgwMCwgMHg4MCwgMHhmYywgMHgzZiwgMHgwMCwgMHg4MCwKKzB4NDAsIDB4MzgsIDB4MDAsIDB4ODAsIDB4YzgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsCisweDcxLCAweGVhLCAweGZmLCAweGVhLCAweDc4LCAweDQ3LCAweDAwLCAweDAwLCAweDM5LCAweGZlLCAweGZmLCAweGVhLAorMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2MywgMHhmZSwgMHhmZiwgMHhlYSwgMHg3OCwgMHg0NywgMHgwMCwgMHgwMCwKKzB4MWIsIDB4ZmYsIDB4ZmYsIDB4ZWEsIDB4NzgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmIsIDB4ZWEsIDB4ZmYsIDB4ZWEsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgyOCwgMHgwNCwgMHgwMCwgMHgwMCwgMHhmOCwgMHgzZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjksIDB4MGIsIDB4ZmYsIDB4ZmYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGQ1LCAweDBiLCAweGZmLCAweGZmLCAweDAzLCAweGZmLCAweDA2LCAweDU0LAorMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg3NSwgMHgwNCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4YTEsIDB4MDUsIDB4ZmYsIDB4ZmYsIDB4MDQsIDB4ZmYsIDB4MDcsIDB4NTQsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsCisweGI1LCAweDA0LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGYxLCAweDA1LCAweGZmLCAweGZmLAorMHgwNSwgMHhmZiwgMHgwNSwgMHg1NCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgzOSwgMHgwNCwgMHhmZiwgMHhmZiwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NTUsIDB4MDUsIDB4ZmYsIDB4ZmYsIDB4MDEsIDB4ZmYsIDB4MDQsIDB4MDAsCisweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDQxLCAweDE4LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHg2MSwgMHgwZSwgMHhmZiwgMHhmZiwgMHgwMiwgMHhmZiwgMHgwMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4YTEsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZjEsIDB4MDIsIDB4ZmYsIDB4ZmYsCisweGZmLCAweGZmLCAweDAxLCAweDQ0LCAweDAzLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg5ZCwgMHgwZCwgMHhmZiwgMHhmZiwgMHgwNiwgMHgwMCwgMHhmZiwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M2QsIDB4NTAsIDB4ZmYsIDB4ZmYsIDB4ODEsIDB4NTAsIDB4ZmYsIDB4ZmYsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGZmLCAweGZmLCAweGZmLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDQ4LCAweDA1LCAweDAwLCAweDgwLCAweDExLCAweDc1LCAweDIxLCAweDQwLCAweDFiLCAweDc1LCAweDIxLCAweDQwLAorMHgzMSwgMHg3NSwgMHgyMSwgMHg0MCwgMHg0OSwgMHg3NSwgMHgyMSwgMHg0MCwKKzB4NTUsIDB4NzUsIDB4MjEsIDB4NDAsIDB4NjMsIDB4NzUsIDB4MjEsIDB4NDAsIDB4N2QsIDB4NzUsIDB4MjEsIDB4NDAsCisweGE5LCAweDc1LCAweDIxLCAweDQwLCAweDZkLCAweDc2LCAweDIxLCAweDQwLCAweGM1LCAweDc2LCAweDIxLCAweDQwLAorMHhkMywgMHg3NiwgMHgyMSwgMHg0MCwgMHhkZCwgMHg3NiwgMHgyMSwgMHg0MCwgMHhlNywgMHg3NiwgMHgyMSwgMHg0MCwKKzB4OTksIDB4NzcsIDB4MjEsIDB4NDAsIDB4YTcsIDB4NzcsIDB4MjEsIDB4NDAsIDB4YjUsIDB4NzcsIDB4MjEsIDB4NDAsCisweDYxLCAweDc4LCAweDIxLCAweDQwLCAweDVmLCAweDdjLCAweDIxLCAweDQwLCAweGU5LCAweDdjLCAweDIxLCAweDQwLAorMHg4OSwgMHg3ZCwgMHgyMSwgMHg0MCwgMHhiZCwgMHg3ZSwgMHgyMSwgMHg0MCwgMHhjOSwgMHg3ZSwgMHgyMSwgMHg0MCwKKzB4MjksIDB4N2YsIDB4MjEsIDB4NDAsIDB4OGQsIDB4N2YsIDB4MjEsIDB4NDAsIDB4YjksIDB4N2YsIDB4MjEsIDB4NDAsCisweGRkLCAweDdmLCAweDIxLCAweDQwLCAweDFkLCAweDgwLCAweDIxLCAweDQwLCAweDQ1LCAweDgwLCAweDIxLCAweDQwLAorMHg4ZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg4MCwgMHgyMSwgMHg0MCwgMHhjNSwgMHg4MCwgMHgyMSwgMHg0MCwKKzB4ZDUsIDB4ODAsIDB4MjEsIDB4NDAsIDB4MWQsIDB4ODEsIDB4MjEsIDB4NDAsIDB4NWIsIDB4ODEsIDB4MjEsIDB4NDAsCisweGIxLCAweDgxLCAweDIxLCAweDQwLCAweDExLCAweDgyLCAweDIxLCAweDQwLCAweDFiLCAweDgyLCAweDIxLCAweDQwLAorMHgxZiwgMHg4MiwgMHgyMSwgMHg0MCwgMHg4ZCwgMHg4MiwgMHgyMSwgMHg0MCwgMHhkOSwgMHg4MiwgMHgyMSwgMHg0MCwKKzB4MzEsIDB4ODMsIDB4MjEsIDB4NDAsIDB4NmQsIDB4ODMsIDB4MjEsIDB4NDAsIDB4ZDEsIDB4ODMsIDB4MjEsIDB4NDAsCisweDA5LCAweDg0LCAweDIxLCAweDQwLCAweDE5LCAweDg0LCAweDIxLCAweDQwLCAweDUxLCAweDg0LCAweDIxLCAweDQwLAorMHg2MSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg3NSwgMHg4NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg4NCwgMHgyMSwgMHg0MCwKKzB4YTcsIDB4ODQsIDB4MjEsIDB4NDAsIDB4YjEsIDB4ODQsIDB4MjEsIDB4NDAsIDB4MTUsIDB4ODUsIDB4MjEsIDB4NDAsCisweDQ1LCAweDg1LCAweDIxLCAweDQwLCAweDUxLCAweDg1LCAweDIxLCAweDQwLCAweGM1LCAweDg1LCAweDIxLCAweDQwLAorMHhjZiwgMHg4NSwgMHgyMSwgMHg0MCwgMHhkOSwgMHg4NSwgMHgyMSwgMHg0MCwgMHhlMywgMHg4NSwgMHgyMSwgMHg0MCwKKzB4ZWQsIDB4ODUsIDB4MjEsIDB4NDAsIDB4ZjcsIDB4ODUsIDB4MjEsIDB4NDAsIDB4MDEsIDB4ODYsIDB4MjEsIDB4NDAsCisweDBiLCAweDg2LCAweDIxLCAweDQwLCAweDE1LCAweDg2LCAweDIxLCAweDQwLCAweDAxLCAweDg5LCAweDIxLCAweDQwLAorMHgxZiwgMHg4NiwgMHgyMSwgMHg0MCwgMHgyOSwgMHg4NiwgMHgyMSwgMHg0MCwgMHgzMywgMHg4NiwgMHgyMSwgMHg0MCwKKzB4M2QsIDB4ODYsIDB4MjEsIDB4NDAsIDB4NjUsIDB4ODYsIDB4MjEsIDB4NDAsIDB4NmYsIDB4ODYsIDB4MjEsIDB4NDAsCisweGQxLCAweDg2LCAweDIxLCAweDQwLCAweGRiLCAweDg2LCAweDIxLCAweDQwLCAweGU1LCAweDg2LCAweDIxLCAweDQwLAorMHhlZiwgMHg4NiwgMHgyMSwgMHg0MCwgMHhmOSwgMHg4NiwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKKzB4MDMsIDB4ODcsIDB4MjEsIDB4NDAsIDB4NjksIDB4ODcsIDB4MjEsIDB4NDAsIDB4YjUsIDB4ODcsIDB4MjEsIDB4NDAsCisweGY5LCAweDg3LCAweDIxLCAweDQwLCAweDA5LCAweDg4LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLAorMHg1NSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg1OSwgMHg4OCwgMHgyMSwgMHg0MCwgMHg1ZCwgMHg4OCwgMHgyMSwgMHg0MCwKKzB4YjUsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZGQsIDB4ODgsIDB4MjEsIDB4NDAsIDB4ZTksIDB4ODgsIDB4MjEsIDB4NDAsCisweGVkLCAweDg4LCAweDIxLCAweDQwLCAweGYxLCAweDg4LCAweDIxLCAweDQwLCAweGY1LCAweDg4LCAweDIxLCAweDQwLAorMHhmOSwgMHg4OCwgMHgyMSwgMHg0MCwgMHhmZCwgMHg4OCwgMHgyMSwgMHg0MCwgMHgyZCwgMHg4NSwgMHgyMSwgMHg0MCwKKzB4ODksIDB4ODUsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCisweDBkLCAweDg5LCAweDIxLCAweDQwLCAweDlkLCAweDc0LCAweDIxLCAweDQwLCAweGUxLCAweDc0LCAweDIxLCAweDQwLAorMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwgMHg5ZCwgMHg3NCwgMHgyMSwgMHg0MCwKKzB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsIDB4OWQsIDB4NzQsIDB4MjEsIDB4NDAsCisweDZiLCAweDc4LCAweDIxLCAweDQwLCAweGY1LCAweDdiLCAweDIxLCAweDQwLCAweDMxLCAweDdjLCAweDIxLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4NWMsIDB4MDEsIDB4MTgsIDB4NDAsIDB4NTgsIDB4MDEsIDB4MTgsIDB4NDAsCisweDI0LCAweGEzLCAweDIwLCAweDQwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg2YywgMHgwMSwgMHgxOCwgMHg0MCwgMHg2OCwgMHgwMSwgMHgxOCwgMHg0MCwKKzB4MjQsIDB4ODMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTMsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDdjLCAweDAxLCAweDE4LCAweDQwLCAweDc4LCAweDAxLCAweDE4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4MDEsIDB4MTgsIDB4NDAsCisweDg4LCAweDAxLCAweDE4LCAweDQwLCAweDI0LCAweGE5LCAweDIwLCAweDQwLCAweDI0LCAweGFiLCAweDIwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDgsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MTIsIDB4MDAsIDB4MGMsIDB4MDAsIDB4MTIsIDB4MDAsCisweDFjLCAweDAwLCAweDEyLCAweDAwLCAweDI0LCAweGE4LCAweDIwLCAweDQwLCAweGE0LCAweGE4LCAweDIwLCAweDQwLAorMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHgyNCwgMHhhOSwgMHgyMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ZDEsIDB4YTgsIDB4MjEsIDB4NDAsIDB4MmQsIDB4YWEsIDB4MjEsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDg5LCAweDcwLCAweDIxLCAweDQwLCAweGM5LCAweGExLCAweDIxLCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NTcsIDB4ODksIDB4MjEsIDB4NDAsIDB4ZDEsIDB4YTgsIDB4MjEsIDB4NDAsIDB4YzUsIDB4MmYsIDB4ZmYsIDB4ZmYsCisweDA1LCAweDIxLCAweGZmLCAweGZmLCAweGVmLCAweDIwLCAweGZmLCAweGZmLCAweDU5LCAweGE3LCAweDIxLCAweDQwLAorMHgzNCwgMHgyZSwgMHgwMCwgMHg4MCwgMHg0OCwgMHgyZSwgMHgwMCwgMHg4MCwgMHg1YywgMHgyZSwgMHgwMCwgMHg4MCwKKzB4MzAsIDB4MzMsIDB4M2EsIDB4MzEsIDB4MzEsIDB4M2EsIDB4MzEsIDB4MzEsIDB4MDAsIDB4MzAsIDB4MzcsIDB4MmYsCisweDMyLCAweDMzLCAweDJmLCAweDMwLCAweDMxLCAweDAwLCAweDMwLCAweDMwLCAweDMwLCAweDMwLCAweDMxLCAweDM1LAorMHgzNiwgMHgzOSwgMHgwMCwgMHg0MywgMHg2ZiwgMHg3MCwgMHg3OSwgMHg3MiwgMHg2OSwgMHg2NywgMHg2OCwgMHg3NCwKKzB4MjAsIDB4MjgsIDB4NjMsIDB4MjksIDB4MjAsIDB4MzIsIDB4MzAsIDB4MzAsIDB4MzEsIDB4MjAsIDB4MzMsIDB4NDMsCisweDZmLCAweDZkLCAweDIwLCAweDQzLCAweDZmLCAweDcyLCAweDcwLCAweDZmLCAweDcyLCAweDYxLCAweDc0LCAweDY5LAorMHg2ZiwgMHg2ZSwgMHgwYSwgMHgwMCwgMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4OGMsIDB4NTMsIDB4ZmYsIDB4ZmYsCisweDI3LCAweGYwLCAweDdkLCAweGZkLCAweDAwLCAweDAxLCAweDAwLCAweDAyLCAweGRhLCAweDBlLCAweDgyLCAweDAwLAorMHgwMSwgMHg0MCwgMHg2NCwgMHgwNCwgMHg2NCwgMHgyZCwgMHgwMCwgMHg4MCwgMHhlNCwgMHgyYywgMHgwMCwgMHg4MCwKKzB4NjksIDB4M2UsIDB4ZmYsIDB4ZmYsIDB4YzksIDB4NGYsIDB4ZmYsIDB4ZmYsIDB4ZDUsIDB4MjQsIDB4ZmYsIDB4ZmYsCisweGM5LCAweDNiLCAweGZmLCAweGZmLCAweDI5LCAweDNjLCAweGZmLCAweGZmLCAweDE5LCAweDFhLCAweGZmLCAweGZmLAorMHg2NSwgMHgxMSwgMHhmZiwgMHhmZiwgMHhjYywgMHg1MywgMHhmZiwgMHhmZiwgMHgyMSwgMHg0MCwgMHhmZiwgMHhmZiwKKzB4ODksIDB4NzAsIDB4MjEsIDB4NDAsIDB4NDksIDB4NzIsIDB4MjEsIDB4NDAsIDB4ZDksIDB4M2YsIDB4ZmYsIDB4ZmYsCisweDIxLCAweDlhLCAweDIxLCAweDQwLCAweDg1LCAweDI0LCAweGZmLCAweGZmLCAweDY0LCAweDUzLCAweGZmLCAweGZmLAorMHg4YywgMHg1MywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKKzB4ODAsIDB4MzAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDIwLCAweDQwLCAweGIwLCAweDUwLCAweDAwLCAweDAwLCAweDdiLCAweDBlLCAweDAwLCAweDAwLAorMHgwMCwgMHg2ZSwgMHgyMSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4ZWQsIDB4ODksIDB4MjEsIDB4NDAsIDB4OGIsIDB4ODksIDB4MjEsIDB4NDAsIDB4YTUsIDB4OGMsIDB4MjEsIDB4NDAsCisweDA1LCAweDhkLCAweDIxLCAweDQwLCAweGNkLCAweDhkLCAweDIxLCAweDQwLCAweDhiLCAweDhiLCAweDIxLCAweDQwLAorMHhhOSwgMHg4ZSwgMHgyMSwgMHg0MCwgMHgxNSwgMHg4ZiwgMHgyMSwgMHg0MCwgMHg2OSwgMHg4YiwgMHgyMSwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKKzB4NTksIDB4YmQsIDB4MjEsIDB4NDAsIDB4YzEsIDB4YmQsIDB4MjEsIDB4NDAsIDB4MmQsIDB4YmUsIDB4MjEsIDB4NDAsCisweDAwLCAweDIwLCAweDBhLCAweDRhLCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGQxLCAweDE4LCAweDJkLCAweDIzLAorMHg5YiwgMHgwMSwgMHhkMywgMHgxOCwgMHg4OCwgMHg2MSwgMHhkOCwgMHg2MCwgMHhkOCwgMHg2MywgMHg4MCwgMHgzMiwKKzB4YzgsIDB4NjAsIDB4MDgsIDB4NjEsIDB4NDgsIDB4NjEsIDB4ZDAsIDB4NjIsIDB4MDMsIDB4NDgsIDB4YzAsIDB4NDYsCisweDQ4LCAweDYwLCAweDg4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHhmZSwgMHgwMywgMHgwMCwgMHgwMCwgMHhmMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwYywgMHgxYywgMHgwNSwgMHgxYywKKzB4MDAsIDB4MjMsIDB4MDAsIDB4OTMsIDB4ZmYsIDB4ZjcsIDB4ZGUsIDB4ZmYsIDB4NjgsIDB4NDksIDB4MGIsIDB4MjMsCisweDFiLCAweDAyLCAweGNmLCAweDE4LCAweDc4LCAweDY4LCAweDI4LCAweDQwLAorMHgwMCwgMHgyMiwgMHhmOCwgMHg2MCwgMHgzYSwgMHg2MSwgMHhiYSwgMHg2OCwgMHgyMiwgMHg0MCwgMHg3YSwgMHg2MSwKKzB4MGMsIDB4MWMsIDB4NDEsIDB4MDksIDB4MDMsIDB4ZDIsIDB4NTEsIDB4MDksIDB4MDEsIDB4ZDIsIDB4ODAsIDB4MGEsCisweDAyLCAweGQzLCAweDYwLCAweDQ4LCAweDAwLCAweGYwLCAweGMyLCAweGY4LCAweDAxLCAweDIwLCAweGY5LCAweDY4LAorMHg0OSwgMHgwOSwgMHgwMywgMHhkMiwgMHg3OSwgMHg2OSwgMHg0OSwgMHgwOSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwKKzB4MDAsIDB4MDYsIDB4MDAsIDB4MGUsIDB4MDMsIDB4ZjAsIDB4ZDQsIDB4ZmEsIDB4ZjgsIDB4NjgsIDB4MDAsIDB4MjgsCisweDcwLCAweGQwLCAweDAwLCAweDIzLCAweDAyLCAweDkzLCAweDAxLCAweDkzLCAweDU0LCAweDRhLCAweDAxLCAweDIzLAorMHgxOCwgMHg0MywgMHhmOCwgMHg2MCwgMHgwMCwgMHgyMCwgMHhkNSwgMHgxZCwgMHg3OSwgMHgzNSwgMHgwMywgMHg5NSwKKzB4MDEsIDB4MjQsIDB4MDAsIDB4MjEsIDB4NGYsIDB4NGQsIDB4ZmEsIDB4NjgsIDB4MjIsIDB4NDAsIDB4MzksIDB4ZDAsCisweDhhLCAweDAwLCAweDUyLCAweDE4LCAweDkyLCAweDAwLCAweDRlLCAweDRiLCAweDliLCAweDVjLCAweDFlLCAweDFjLAorMHg4MywgMHg0MiwgMHgwNCwgMHhkMCwgMHg0YiwgMHg0YiwgMHhkMywgMHgxOCwgMHg1YiwgMHg3OCwgMHg4MywgMHg0MiwKKzB4MmMsIDB4ZDEsIDB4NDksIDB4NGIsIDB4ZDIsIDB4MTgsIDB4ZDMsIDB4NzgsIDB4MDMsIDB4OWQsIDB4ZWQsIDB4NmEsCisweGFiLCAweDQyLCAweDAyLCAweGQ5LCAweDAzLCAweDlkLCAweGMwLCAweDQ2LCAweGViLCAweDYyLCAweDUzLCAweDY4LAorMHg1YiwgMHgwOCwgMHgwMSwgMHhkMywgMHgwMSwgMHgyMywgMHgwMCwgMHg5MywgMHg4NiwgMHg0MiwgMHgwYSwgMHhkMSwKKzB4OTUsIDB4NjgsIDB4MDIsIDB4OWIsIDB4NWUsIDB4MWMsIDB4MDIsIDB4OTYsIDB4OWIsIDB4MDAsIDB4M2MsIDB4NGUsCisweDllLCAweDE5LCAweDBiLCAweDIzLCAweDFiLCAweDAyLCAweGYzLCAweDE4LCAweDlkLCAweDYxLCAweDUzLCAweDc4LAorMHg4MywgMHg0MiwgMHgwZCwgMHhkMSwgMHhkMiwgMHg2OCwgMHgwMSwgMHg5YiwgMHg1ZCwgMHgxYywgMHgwMSwgMHg5NSwKKzB4OWIsIDB4MDAsIDB4MzUsIDB4NGQsIDB4NWQsIDB4MTksIDB4MmQsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZWIsIDB4MTgsCisweGRhLCAweDYwLCAweDNhLCAweDY5LCAweDAxLCAweDMyLCAweDNhLCAweDYxLCAweDY0LCAweDAwLCAweDAxLCAweDMxLAorMHgwYiwgMHgyOSwgMHhiZCwgMHhkMywgMHgwMSwgMHgzMCwgMHgwOSwgMHgyOCwgMHhiOCwgMHhkMywgMHgwMCwgMHgyMCwKKzB4MDIsIDB4OWIsIDB4OTksIDB4MDAsIDB4MmIsIDB4NGEsIDB4ODksIDB4MTgsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsCisweGM5LCAweDE4LCAweDg4LCAweDYxLCAweDAxLCAweDliLCAweDk5LCAweDAwLCAweDg5LCAweDE4LCAweDJkLCAweDIzLAorMHg5YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHhjOCwgMHg2MCwgMHgwMCwgMHg5YiwgMHgwMCwgMHgyYiwgMHgwYywgMHhkMSwKKzB4ODEsIDB4MDAsIDB4ODksIDB4MTgsIDB4MGIsIDB4MjMsIDB4MWIsIDB4MDIsIDB4YzksIDB4MTgsIDB4Y2IsIDB4NjksCisweGMwLCAweDQ2LCAweDhiLCAweDYxLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGY0LCAweGQzLCAweDA4LCAweGUwLAorMHgwNywgMHhlMCwgMHgwMywgMHg5ZCwgMHhlOCwgMHg2YSwgMHgzMCwgMHgyOCwgMHgwMywgMHhkMiwgMHgzMCwgMHgyMCwKKzB4MDMsIDB4OWQsIDB4YzAsIDB4NDYsIDB4ZTgsIDB4NjIsIDB4MTksIDB4NGEsIDB4NzgsIDB4NjksIDB4MDAsIDB4MjgsCisweDJhLCAweGQwLCAweDAwLCAweDIxLCAweDAxLCAweDIzLCAweDE4LCAweDQzLCAweDc4LCAweDYxLCAweDAwLCAweDIwLAorMHgwMSwgMHgyNCwgMHgwMCwgMHgyMiwgMHgxMywgMHg0ZSwgMHg3YiwgMHg2OSwgMHgyMywgMHg0MCwgMHgxMCwgMHhkMCwKKzB4OTMsIDB4MDAsIDB4OWIsIDB4MTgsIDB4OWIsIDB4MDAsIDB4MTIsIDB4NGQsIDB4NWIsIDB4MTksIDB4OWQsIDB4NzgsCisweDg1LCAweDQyLCAweDA4LCAweGQxLCAweDFkLCAweDY5LCAweDBiLCAweDFjLCAweDliLCAweDAwLCAweDllLCAweDE5LAorMHgyZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhmMywgMHgxOCwgMHhkZCwgMHg2MywgMHgwMSwgMHgzMSwgMHg2NCwgMHgwMCwKKzB4MDEsIDB4MzIsIDB4MGIsIDB4MmEsIDB4ZTYsIDB4ZDMsIDB4MDEsIDB4MzAsIDB4MDksIDB4MjgsIDB4ZTEsIDB4ZDMsCisweDAwLCAweDIwLCAweDg5LCAweDAwLCAweDA0LCAweDRhLCAweDg5LCAweDE4LCAweDJkLCAweDIzLCAweDliLCAweDAxLAorMHhjOSwgMHgxOCwgMHhjOCwgMHg2MywgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MzAsIDB4NTMsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDEsIDB4MDAsIDB4ODAsCisweDAwLCAweDQ3LCAweDA4LCAweDQ3LCAweDEwLCAweDQ3LCAweDE4LCAweDQ3LCAweDc4LCAweDQ3LCAweGMwLCAweDQ2LAorMHgxOCwgMHhjMCwgMHg5ZiwgMHhlNSwgMHgxYywgMHhmZiwgMHgyZiwgMHhlMSwgMHg3OCwgMHg0NywgMHhjMCwgMHg0NiwKKzB4MTAsIDB4YzAsIDB4OWYsIDB4ZTUsIDB4MWMsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4NzgsIDB4NDcsIDB4YzAsIDB4NDYsCisweDA4LCAweGMwLCAweDlmLCAweGU1LCAweDFjLCAweGZmLCAweDJmLCAweGUxLCAweDM4LCAweDUyLCAweGZmLCAweGZmLAorMHg4OCwgMHg1MSwgMHhmZiwgMHhmZiwgMHhkNSwgMHhiMCwgMHgyMSwgMHg0MCwgMHhmMCwgMHhiNSwgMHgwNCwgMHgyMCwKKzB4MWEsIDB4NDksIDB4MDEsIDB4MjUsIDB4MDgsIDB4NjAsIDB4MWEsIDB4NGYsIDB4YmIsIDB4MjMsIDB4MWIsIDB4MDEsCisweGY4LCAweDE4LCAweDA1LCAweDczLCAweDE4LCAweDQ4LCAweDQxLCAweDZiLCAweDJjLCAweDA1LCAweDAwLCAweDIwLAorMHg3YSwgMHg2ZSwgMHgxNywgMHg0YiwgMHg4YSwgMHg0MiwgMHgxZCwgMHhkMCwKKzB4MTksIDB4N2IsIDB4MDAsIDB4MjksIDB4MTcsIDB4ZDEsIDB4ZDksIDB4MWQsIDB4ZmYsIDB4MzEsIDB4M2EsIDB4MzEsCisweDQ5LCAweDc4LCAweDFlLCAweDFjLCAweDAwLCAweDI5LCAweDEwLCAweGQxLCAweGIwLCAweDYwLCAweDEwLCAweDIwLAorMHg3MCwgMHg2MCwgMHgxMCwgMHg0YSwgMHgxMCwgMHg0OSwgMHhmZiwgMHhmNywgMHhjMywgMHhmZiwgMHgwMCwgMHgyOCwKKzB4MDcsIDB4ZDAsIDB4MzUsIDB4NzMsIDB4MDQsIDB4MjMsIDB4YjgsIDB4NjksIDB4MTgsIDB4NDMsIDB4YjgsIDB4NjEsCisweDIwLCAweDYxLCAweDAwLCAweGYwLCAweDE3LCAweGY4LCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHgxOCwgMHg3MywgMHgwNCwgMHgyMywgMHhiOCwgMHg2OSwgMHg5OCwgMHg0MywgMHhiOCwgMHg2MSwgMHgyMCwgMHg2MSwKKzB4ZjUsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4YjAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDAwLCAweDAxLCAweDE4LCAweDQwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLAorMHg3ZCwgMHg3MSwgMHgyMSwgMHg0MCwgMHhmOCwgMHhiNSwgMHgxNSwgMHg0ZiwgMHgzOSwgMHg2YywgMHgxNSwgMHg0OCwKKzB4NDAsIDB4NmUsIDB4MGMsIDB4MWEsIDB4MTQsIDB4NGUsIDB4NzEsIDB4NjgsIDB4MTQsIDB4NGQsIDB4YTEsIDB4NDIsCisweDA2LCAweGQ4LCAweDE0LCAweDRhLCAweDBhLCAweDQzLCAweDAwLCAweDkyLCAweGI5LCAweDZiLCAweDA5LCAweDE4LAorMHhmYSwgMHg2YiwgMHgxMSwgMHhlMCwgMHgxMSwgMHgyMiwgMHg1MiwgMHgwNSwgMHgyMiwgMHg0MywgMHgwMCwgMHg5MiwKKzB4YjksIDB4NmIsIDB4MDksIDB4MTgsIDB4MDAsIDB4MjAsIDB4ZmEsIDB4NmIsIDB4MmIsIDB4MWMsIDB4ZmYsIDB4ZjcsCisweDhkLCAweGZmLCAweDcwLCAweDY4LCAweDAwLCAweDFiLCAweDBhLCAweDRhLCAweDAyLCAweDQzLCAweDAwLCAweDkyLAorMHhiOSwgMHg2YiwgMHhmYSwgMHg2YiwgMHgwMCwgMHgyMCwgMHgyYiwgMHgxYywgMHhmZiwgMHhmNywgMHg4MiwgMHhmZiwKKzB4ZjgsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4N2MsIDB4MjksIDB4MDAsIDB4ODAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLCAweDQ0LCAweDgwLCAweDIwLCAweDQwLAorMHgwMCwgMHgwMCwgMHgzNywgMHgwMiwgMHhmMCwgMHhiNSwgMHgyYiwgMHg0ZiwgMHhiOCwgMHg2OCwgMHg3OSwgMHg2OCwKKzB4YzAsIDB4MTksIDB4MjAsIDB4MzAsIDB4MjksIDB4NGEsIDB4ZmYsIDB4ZjcsIDB4NjMsIDB4ZmYsIDB4MDEsIDB4MjAsCisweGMwLCAweDAyLCAweDI4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYwLCAweGI5LCAweDY4LCAweDM4LCAweDFjLAorMHgyNiwgMHg0ZCwgMHgwMCwgMHgyNCwgMHgyNiwgMHg0ZSwgMHhlZiwgMHgxZCwgMHg3OSwgMHgzNywgMHgwMCwgMHgyOSwKKzB4MzEsIDB4ZDEsIDB4MzEsIDB4NjgsIDB4MGEsIDB4NzgsIDB4MTIsIDB4MGEsIDB4MDMsIDB4ZDIsIDB4MDQsIDB4NzMsCisweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDQ5LCAweDc4LCAweDAwLCAweDI5LCAweDBjLCAweGQxLAorMHgwNSwgMHgxYywgMHg0MCwgMHg2OCwgMHgwMCwgMHhmMCwgMHgzZSwgMHhmOSwgMHgzMCwgMHg2OCwgMHgwMCwgMHhmMCwKKzB4NjcsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MjYsIDB4ZDEsIDB4MmMsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4NTgsIDB4ZmYsCisweDIyLCAweGUwLCAweDA5LCAweDAxLCAweDA3LCAweDFjLCAweDQxLCAweDYwLCAweDA4LCAweDFjLCAweDE3LCAweDRhLAorMHgxNywgMHg0OSwgMHhmZiwgMHhmNywgMHgzNSwgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNywgMHhkMSwgMHgzYywgMHg3MywKKzB4MDQsIDB4MjMsIDB4YTgsIDB4NjksIDB4OTgsIDB4NDMsIDB4OTksIDB4MDQsIDB4YTgsIDB4NjEsIDB4MDgsIDB4NjEsCisweGRhLCAweGU3LCAweDEwLCAweDIwLCAweDAwLCAweGYwLCAweDIwLCAweGY5LCAweDEwLCAweDIwLCAweGI4LCAweDYwLAorMHhmZiwgMHhmNywgMHg4MiwgMHhmZiwgMHhkMiwgMHhlNywgMHgwNSwgMHgxYywgMHg0MCwgMHg2OCwgMHgwMCwgMHhmMCwKKzB4MTcsIDB4ZjksIDB4MzAsIDB4NjgsIDB4MDAsIDB4ZjAsIDB4NDAsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4ZDgsIDB4ZDAsCisweDAyLCAweDIzLCAweGY4LCAweDZiLCAweDE4LCAweDQzLCAweGY4LCAweDYzLCAweGM0LCAweGU3LCAweDAwLCAweDAwLAorMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwgMHhhNSwgMHg1NSwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MDEsIDB4MDAsIDB4ODAsIDB4MjAsIDB4NTUsIDB4ZmYsIDB4ZmYsCisweDdkLCAweDcxLCAweDIxLCAweDQwLCAweDkwLCAweGI1LCAweDAxLCAweDIwLCAweDQwLCAweDAzLCAweDEwLCAweDQ5LAorMHgwMCwgMHgyNywgMHgwOCwgMHg2MCwgMHgwZiwgMHg0YywgMHhlMCwgMHgxZCwgMHhmZiwgMHgzMCwgMHgzYSwgMHgzMCwKKzB4NDcsIDB4NzAsIDB4ZTAsIDB4NjksIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDAsIDB4NjksIDB4MDAsIDB4ZjAsCisweGQ3LCAweGY4LCAweGUwLCAweDY5LCAweDAwLCAweDI4LCAweDAxLCAweGQwLCAweGU3LCAweDYxLCAweDAxLCAweGUwLAorMHgwMSwgMHgyMCwgMHhlMCwgMHg2MSwgMHgwNywgMHg0OCwgMHgwMiwgMHgyMywgMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywKKzB4YzEsIDB4NjMsIDB4MjcsIDB4NzMsIDB4ZmYsIDB4ZjcsIDB4MDAsIDB4ZmYsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLCAweDI4LCAweDA1LCAweDAwLCAweDgwLAorMHhlOCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHg3OCwgMHg4OCwKKzB4NmQsIDB4MjgsIDB4MDMsIDB4ZGIsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsCisweGY3LCAweGY4LCAweDE3LCAweGUwLCAweDgwLCAweDAwLCAweDBkLCAweDQ5LCAweDA5LCAweDU4LCAweDM4LCAweDFjLAorMHhmZiwgMHhmNywgMHhjYiwgMHhmZSwgMHgwMCwgMHgyOCwgMHgwZiwgMHhkMSwgMHgzOSwgMHg3OCwgMHhjOSwgMHgwOSwKKzB4MGMsIDB4ZDMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4Y2YsIDB4ZjgsIDB4NjgsIDB4NDYsCisweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDBiLCAweGY4LCAweDAwLCAweDI4LCAweDAxLCAweGQxLCAweDAxLCAweDIwLAorMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4ZTgsIDB4MDEsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4MDIsIDB4MWMsIDB4NDEsIDB4NGIsCisweGRkLCAweDFkLCAweGZmLCAweDM1LCAweDNhLCAweDM1LCAweDJmLCAweDc4LCAweDAwLCAweDJmLCAweDAxLCAweGQwLAorMHgwMCwgMHgyNywgMHgwMCwgMHhlMCwgMHgwMSwgMHgyNywgMHgyZiwgMHg3MCwgMHgyZiwgMHg3OCwgMHhmYiwgMHgwMCwKKzB4ZGIsIDB4MTksIDB4NWIsIDB4MDEsIDB4M2EsIDB4NGYsIDB4ZGMsIDB4MTksIDB4NDAsIDB4NzgsIDB4MDAsIDB4MDEsCisweGM3LCAweDFkLCAweDA5LCAweDM3LCAweDAwLCAweDIwLCAweDgzLCAweDAwLCAweGQ2LCAweDU4LCAweGMwLCAweDQ2LAorMHhlNiwgMHg1MCwgMHgwMSwgMHgzMCwgMHgwNCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwMCwgMHgyOSwgMHgwZiwgMHhkMCwKKzB4MDAsIDB4MjIsIDB4YmIsIDB4MDgsIDB4MDEsIDB4OTMsIDB4ODMsIDB4NDIsIDB4MGIsIDB4ZDksIDB4MTMsIDB4MWMsCisweDliLCAweDAwLCAweGNiLCAweDU4LCAweDg2LCAweDAwLCAweGEzLCAweDUxLCAweDAxLCAweDliLCAweDAxLCAweDMwLAorMHgwMSwgMHgzMiwgMHg4MywgMHg0MiwgMHhmNSwgMHhkOCwgMHgwMCwgMHhlMCwgMHgxMCwgMHgyNywgMHgyYiwgMHg0OCwKKzB4MDIsIDB4NmQsIDB4ODAsIDB4NmUsIDB4MmEsIDB4NDksIDB4ODIsIDB4NDIsIDB4MDMsIDB4ZDgsIDB4ODIsIDB4MWEsCisweGNiLCAweDZjLCAweDlhLCAweDFhLCAweDAwLCAweGUwLCAweDEyLCAweDFhLCAweGJhLCAweDQyLCAweDA1LCAweGQ4LAorMHgyNiwgMHg0OCwgMHg4MSwgMHg2YiwgMHgwMSwgMHgzMSwgMHg4MSwgMHg2MywgMHgwMSwgMHgyMCwgMHgzNywgMHhlMCwKKzB4YzMsIDB4MTksIDB4Y2EsIDB4NmMsIDB4OTMsIDB4NDIsIDB4MDgsIDB4ZDgsIDB4MjIsIDB4NGEsIDB4M2EsIDB4NDMsCisweDAwLCAweDkyLCAweDBhLCAweDFjLCAweDQ5LCAweDZjLCAweDA5LCAweDE4LCAweDkyLCAweDZjLCAweDIzLCAweDFjLAorMHgxMiwgMHhlMCwgMHgxNiwgMHgxYSwgMHgwMCwgMHg5NiwgMHgxYiwgMHg0OSwgMHg0OSwgMHg2YywgMHgwOSwgMHgxOCwKKzB4MTksIDB4NDgsIDB4ODIsIDB4NmMsIDB4MDMsIDB4MjAsIDB4MjMsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NWUsIDB4ZmUsCisweGI4LCAweDFiLCAweDE4LCAweDRhLCAweDAyLCAweDQzLCAweDAwLCAweDkyLCAweGEzLCAweDE5LCAweDE0LCAweDQ4LAorMHg4MiwgMHg2YywgMHg0MSwgMHg2YywgMHgwMywgMHgyMCwgMHhmZiwgMHhmNywgMHg1MywgMHhmZSwgMHgwMSwgMHgyMCwKKzB4MGQsIDB4NDksIDB4YzAsIDB4NDYsIDB4NjgsIDB4NzAsIDB4OGEsIDB4NjksIDB4OTIsIDB4MDAsIDB4NTIsIDB4MTgsCisweDE3LCAweDYxLCAweDhhLCAweDY5LCAweDAwLCAweDJhLCAweDAyLCAweGQwLCAweDAwLCAweDI3LCAweDhmLCAweDYxLAorMHgwMCwgMHhlMCwgMHg4OCwgMHg2MSwgMHgwYywgMHg0OCwgMHgwMiwgMHgyMywgMHhjMSwgMHg2YiwgMHgxOSwgMHg0MywKKzB4YzEsIDB4NjMsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjcsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4NGYsIDB4NzMsCisweDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDI4LCAweDA1LCAweDAwLCAweDgwLAorMHg1MCwgMHhiYSwgMHgyMCwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwKKzB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MTksIDB4MDIsIDB4ZTgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDE4LCAweDFhLCAweDAwLCAweDgwLCAweDA3LCAweDQ5LCAweDhhLCAweDZlLCAweDEwLCAweDE4LCAweDA3LCAweDRhLAorMHhkMiwgMHg2YywgMHgxMywgMHgwNCwgMHgxYiwgMHgwYywgMHg4MywgMHg0MiwgMHgwMCwgMHhkOCwgMHg4MCwgMHgxYSwKKzB4ODgsIDB4NjYsIDB4ODgsIDB4NmUsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjEsIDB4NzAsIDB4NDcsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLCAweDkwLCAweGVlLCAweDIwLCAweDQwLAorMHgwNiwgMHg0OSwgMHg0YSwgMHg2ZSwgMHgxMCwgMHgxOCwgMHgwNiwgMHg0YSwgMHgxMiwgMHg2YywgMHg4MiwgMHg0MiwKKzB4MDAsIDB4ZDgsIDB4ODAsIDB4MWEsIDB4NDgsIDB4NjYsIDB4NDgsIDB4NmUsIDB4MDMsIDB4NDksIDB4YzAsIDB4NDYsCisweDA4LCAweDYxLCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDdjLCAweDI5LCAweDAwLCAweDgwLAorMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHgwNSwgMHgyMiwgMHgwYSwgMHg2MCwgMHg4MiwgMHg4OCwgMHhjMCwgMHg0NiwKKzB4OGEsIDB4ODAsIDB4MDAsIDB4MjIsIDB4NGEsIDB4NzAsIDB4NDAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4NDgsIDB4ODAsCisweGNhLCAweDgwLCAweDhhLCAweDYwLCAweGNhLCAweDYwLCAweDcwLCAweDQ3LCAweDA1LCAweDIyLCAweDAyLCAweDYwLAorMHgwMCwgMHgyMiwgMHg4MiwgMHg4MCwgMHg0MiwgMHg3MCwgMHg0MSwgMHg4MCwgMHhjMiwgMHg4MCwgMHg4MiwgMHg2MCwKKzB4YzIsIDB4NjAsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MGUsIDB4NDgsCisweDQxLCAweDZiLCAweDAxLCAweDMxLCAweDQxLCAweDYzLCAweDY5LCAweDQ2LAorMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhkZCwgMHhmZiwgMHgzOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKKzB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDEsIDB4MjcsIDB4ZGYsIDB4ODAsIDB4NjgsIDB4NDYsCisweDAwLCAweDIxLCAweGZmLCAweGY3LCAweDExLCAweGZmLCAweDAwLCAweDI4LCAweDAxLCAweGQxLCAweDM4LCAweDFjLAorMHgwMCwgMHhlMCwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4YzEsIDB4ODgsIDB4MDksIDB4NGEsCisweGMwLCAweDQ2LCAweDkxLCAweDgxLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweGJkLCAweGZmLCAweDAxLCAweDIwLAorMHg0MCwgMHgwMiwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywKKzB4ZjUsIDB4ZmUsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCisweGU4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGMzLCAweGZmLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHgwMSwgMHgyMCwgMHgwMywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg3MSwgMHhhMSwgMHgyMSwKKzB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MjgsIDB4MGYsIDB4MDAsIDB4ODAsCisweDAwLCAweDIwLCAweDA0LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcxLCAweGZmLCAweDIxLCAweGExLCAweDIyLAorMHg1MiwgMHgwMywgMHgwMSwgMHgzMSwgMHg5MSwgMHg2MCwgMHg3MCwgMHg0NywgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwKKzB4MDIsIDB4MjAsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCisweDAxLCAweDIwLCAweDQwLCAweDAyLCAweGExLCAweDIxLCAweDQ5LCAweDAzLCAweDg4LCAweDYwLCAweDAwLCAweDIwLAorMHg3MCwgMHg0NywgMHhjMCwgMHg4OCwgMHhjMCwgMHgwNiwgMHhjMCwgMHgwZSwgMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywKKzB4NDgsIDB4NjEsIDB4MDIsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjMsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCisweGU4LCAweDFhLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA4LCAweDQ5LCAweDBmLCAweDZiLAorMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg3MSwgMHhmZiwgMHhmOCwgMHgwNiwgMHhjMCwgMHgwZSwgMHgwMSwgMHhhYiwKKzB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4YTksIDB4ZmUsIDB4MDEsIDB4MjAsCisweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweDAwLCAweDE0LCAweDQwLAorMHg4MCwgMHhiNSwgMHg4NSwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKKzB4NWIsIDB4ZmYsIDB4ZjgsIDB4ODgsIDB4MDQsIDB4YTksIDB4MDMsIDB4ZjAsIDB4YzksIDB4ZmYsIDB4MDEsIDB4YWIsCisweDU4LCAweDgwLCAweDAxLCAweGE4LCAweDQwLCAweDg4LCAweDAwLCAweDI4LCAweDBmLCAweGQwLCAweDAxLCAweGE4LAorMHg0MCwgMHg4OCwgMHg4MCwgMHgwOCwgMHgwMywgMHgzOCwgMHg4MCwgMHgwOCwgMHgwMSwgMHgzMCwgMHgwNCwgMHgzYiwKKzB4NTgsIDB4NzAsIDB4MDQsIDB4OTgsIDB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDIsIDB4OTEsIDB4NDAsIDB4NjgsCisweGMwLCAweDQ2LCAweDAzLCAweDkwLCAweDA1LCAweGUwLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLAorMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNCwgMHg5OCwgMHhjMSwgMHgxZCwgMHgwMSwgMHgzMSwKKzB4NjgsIDB4NDYsIDB4ZmYsIDB4ZjcsIDB4NzUsIDB4ZmUsIDB4MDEsIDB4MjAsIDB4MDUsIDB4YjAsIDB4ODAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDE0LCAweDRmLCAweDM5LCAweDdiLAorMHgwMCwgMHgyOSwgMHgyMCwgMHhkMSwgMHhmOSwgMHgxZCwgMHhmZiwgMHgzMSwgMHgzYSwgMHgzMSwgMHg0OSwgMHg3OCwKKzB4MDAsIDB4MjksIDB4MWEsIDB4ZDEsIDB4MTAsIDB4NDksIDB4MDUsIDB4MjIsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MjIsCisweDAwLCAweGFiLCAweDVhLCAweDgwLCAweDk4LCAweDgwLCAweDA2LCAweDIwLCAweDAwLCAweGFiLCAweDU4LCAweDcwLAorMHgwMCwgMHgyNCwgMHhkYywgMHg4MCwgMHgwOCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHg0OCwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MDMsIDB4OTAsIDB4MDEsIDB4MjAsIDB4MzgsIDB4NzMsIDB4NjgsIDB4NDYsIDB4MDgsIDB4MzEsCisweGZmLCAweGY3LCAweDRjLCAweGZlLCAweDAwLCAweDI4LCAweDAwLCAweGQwLCAweDNjLCAweDczLCAweDA0LCAweGIwLAorMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyOCwgMHgwNSwgMHgwMCwgMHg4MCwKKzB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsCisweDM4LCAweDFjLCAweGZmLCAweGY3LCAweGY5LCAweGZlLCAweGJhLCAweDY4LCAweDBkLCAweDRjLCAweDBlLCAweDQ4LAorMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwZCwgMHg0OSwgMHhmZiwgMHhmNywgMHhlNCwgMHhmYywgMHgwMCwgMHgyOCwKKzB4MGMsIDB4ZGEsIDB4MDUsIDB4ZTAsIDB4YjksIDB4ODgsIDB4MGIsIDB4NGIsIDB4ZmYsIDB4ZjcsIDB4ZGYsIDB4ZmMsCisweDAwLCAweDI4LCAweDA1LCAweGRhLCAweDAxLCAweGFiLCAweDVjLCAweDgwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAorMHhmZiwgMHhmNywgMHgyMiwgMHhmZSwgMHgwMCwgMHgyMCwgMHgwNCwgMHhiMCwKKzB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsCisweDBkLCAweDc2LCAweDIxLCAweDQwLCAweGMxLCAweGJkLCAweDIxLCAweDQwLCAweDU5LCAweGJkLCAweDIxLCAweDQwLAorMHgwMCwgMHhiNSwgMHhjMCwgMHg4OCwgMHgwMywgMHhmMCwgMHgyZSwgMHhmZiwgMHgwMCwgMHgyMCwgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4ZTIsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDAwLCAweGI1LCAweGZmLCAweGY3LCAweGRkLCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAorMHgwMSwgMHgxYywgMHgwMiwgMHgyMCwgMHgwMCwgMHhmMCwgMHgwMiwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4YjAsIDB4YjUsIDB4YzYsIDB4YjAsIDB4MDcsIDB4MWMsIDB4MDgsIDB4MWMsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCisweGI1LCAweGZlLCAweDIxLCAweDQ4LCAweGZmLCAweGY3LCAweGE0LCAweGZjLCAweDA0LCAweDFjLCAweDIwLCAweDRhLAorMHgwMCwgMHgyMSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHhhMCwgMHhmYywgMHgwMCwgMHgyOCwgMHgyNywgMHhkMCwKKzB4MDQsIDB4YTksIDB4MWQsIDB4NGEsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4OTksIDB4ZmMsIDB4MDQsIDB4YTgsCisweDAwLCAweDIzLCAweDAxLCAweDJmLCAweDA2LCAweGQxLCAweDBjLCAweGFhLCAweDAyLCAweDMyLCAweDAwLCAweDIxLAorMHgxMywgMHg2MCwgMHgwMSwgMHgzMSwgMHgxMCwgMHgyOSwgMHhmYiwgMHhkMywgMHgwMSwgMHg2OCwgMHgwNCwgMHgyOSwKKzB4MDQsIDB4ZDksIDB4ODksIDB4MDgsIDB4MDMsIDB4MzksIDB4ODksIDB4MDgsIDB4MDEsIDB4MzEsIDB4MDAsIDB4ZTAsCisweDE5LCAweDFjLCAweDAwLCAweGFiLCAweDU5LCAweDcwLCAweDA2LCAweGE5LCAweDA5LCAweDc4LCAweGMwLCAweDQ2LAorMHhkOSwgMHg4MCwgMHgwMCwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MCwgMHgwNywgMHg5OCwgMHhjMCwgMHg0NiwKKzB4MDMsIDB4OTAsIDB4MDQsIDB4MzMsIDB4MDgsIDB4YWQsIDB4MDIsIDB4ZTAsIDB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsCisweDE4LCAweDcwLCAweDA5LCAweDQ5LCAweDIwLCAweDFjLCAweGZmLCAweGY3LCAweDZlLCAweGZjLCAweDY4LCAweDQ2LAorMHgyOSwgMHgxYywgMHhmZiwgMHhmNywgMHhiNywgMHhmZCwgMHgwMSwgMHgyMCwgMHg0NiwgMHhiMCwgMHhiMCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YjEsIDB4MjEsIDB4NDAsCisweDlkLCAweGFmLCAweDIxLCAweDQwLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweDAxLCAweDFjLAorMHgwMiwgMHgyMCwgMHgwMCwgMHhmMCwgMHgxMCwgMHhmOCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKKzB4MDEsIDB4MWMsIDB4MDEsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YTIsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDAwLCAweGI1LCAweDAxLCAweDFjLCAweDAxLCAweDIwLCAweDAwLCAweGYwLCAweDAyLCAweGY4LCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwgMHhjNywgMHhiMCwgMHgwNCwgMHgxYywgMHgwZiwgMHgxYywgMHgzOCwgMHgxYywKKzB4MDEsIDB4YTksIDB4ZmYsIDB4ZjcsIDB4NGQsIDB4ZmUsIDB4MjEsIDB4NDgsIDB4ZmYsIDB4ZjcsIDB4M2MsIDB4ZmMsCisweDAwLCAweDkwLCAweDc4LCAweDc4LCAweDAwLCAweDAxLCAweGJhLCAweDY4LCAweDA0LCAweDMwLCAweGZjLCAweDJhLAorMHgyNSwgMHhkOCwgMHhmZiwgMHgyMywgMHgwOSwgMHgzMywgMHg5OCwgMHg0MiwgMHgyMSwgMHhkOCwgMHgxOSwgMHgyYywKKzB4MWYsIDB4ZDgsIDB4ZmQsIDB4ODgsIDB4ZjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTAsIDB4ZjksIDB4MWQsCisweDA5LCAweDMxLCAweDA2LCAweGFiLCAweDAwLCAweDIwLCAweDdlLCAweDc4LCAweDAwLCAweDJlLCAweDBkLCAweGRkLAorMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywgMHg0MCwgMHhjOSwgMHg0MCwgMHhjMywKKzB4NDAsIDB4YzksIDB4NDAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4N2UsIDB4NzgsCisweDg2LCAweDQyLCAweGYxLCAweGRjLCAweDIwLCAweDFjLCAweDA1LCAweGE5LCAweDJiLCAweDFjLCAweGZmLCAweGY3LAorMHgyMSwgMHhmYywgMHgwMCwgMHgyOCwgMHgwNSwgMHhkMCwgMHgwMSwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywKKzB4MTgsIDB4NDMsIDB4MDEsIDB4YWIsIDB4MTgsIDB4NzAsIDB4MDcsIDB4NDksIDB4MDAsIDB4OTgsIDB4ZmYsIDB4ZjcsCisweDA2LCAweGZjLCAweDAwLCAweDIxLCAweDAxLCAweGE4LCAweGZmLCAweGY3LCAweDRmLCAweGZkLCAweDAxLCAweDIwLAorMHg0NywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwKKzB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmYsIDB4ZjcsIDB4MWIsIDB4ZmUsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA3LCAweDFjLCAweGZjLCAweDg4LCAweDI1LCAweDRkLAorMHg2OCwgMHg2OCwgMHgwMSwgMHgzMCwgMHg2OSwgMHg0NiwgMHg2OCwgMHg2MCwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKKzB4ZjUsIDB4ZmQsIDB4MTAsIDB4MmMsIDB4MDgsIDB4ZDMsIDB4MDAsIDB4YTgsIDB4MDAsIDB4NzgsIDB4NDAsIDB4MjMsCisweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLCAweGQ4LCAweDgwLCAweDE3LCAweGUwLAorMHg3OCwgMHg3OCwgMHg4MiwgMHgwMCwgMHhmYiwgMHgxZCwgMHgwOSwgMHgzMywgMHgwMCwgMHgyMCwgMHhiOSwgMHg2OCwKKzB4MDAsIDB4MmEsIDB4MTUsIDB4ZDksIDB4NDAsIDB4Y2IsIDB4MGYsIDB4MWMsCisweDAxLCAweDMxLCAweGJlLCAweDQyLCAweDBkLCAweGQwLCAweDAwLCAweGFhLCAweDEyLCAweDc4LCAweDQwLCAweDIzLAorMHgxYSwgMHg0MywgMHgwMCwgMHhhYiwgMHgxYSwgMHg3MCwgMHgwNCwgMHgyMiwgMHhkYSwgMHg4MCwgMHgwMiwgMHg5MCwKKzB4MDMsIDB4OTEsIDB4MDQsIDB4MzMsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MTUsIDB4ZTAsIDB4MDEsIDB4MzAsCisweDkwLCAweDQyLCAweGU5LCAweGQzLCAweDAwLCAweGFiLCAweDVjLCAweDcwLCAweDAyLCAweDk0LCAweDY5LCAweDY4LAorMHhjMCwgMHg0NiwgMHgwMywgMHg5MSwgMHhhMiwgMHgwMCwgMHgwMCwgMHgyMCwgMHgxMCwgMHgzMywgMHgwMCwgMHgyYSwKKzB4MDUsIDB4ZDksIDB4MGYsIDB4MWMsIDB4ODAsIDB4YzMsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzEsIDB4OTAsIDB4NDIsCisweGY5LCAweGQzLCAweDY4LCAweDQ2LCAweDA0LCAweGE5LCAweGZmLCAweGY3LCAweGY3LCAweGZjLCAweDAxLCAweDIwLAorMHg0NiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5YywgMHgwMywgMHgwMCwgMHg4MCwKKzB4OTAsIDB4YjQsIDB4MjMsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjEsIDB4NDIsIDB4MDksIDB4MDAsIDB4ZDMsCisweDAwLCAweDIxLCAweDAwLCAweDI3LCAweDNhLCAweDFjLCAweDQzLCAweDBiLCAweDAwLCAweGQyLCAweDAyLCAweDIyLAorMHgxMSwgMHg0MywgMHgxZSwgMHg0YSwgMHgyMCwgMHgyNCwgMHhkMywgMHg2OCwgMHgwMSwgMHgyYiwgMHgyZSwgMHhkMSwKKzB4ODAsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjQsIDB4MGMsIDB4NDMsIDB4MjAsIDB4MWMsIDB4MWIsIDB4MjMsCisweGRiLCAweDAxLCAweGQxLCAweDE4LCAweDg5LCAweDhiLCAweDA5LCAweDBiLCAweDAwLCAweGQyLCAweDA0LCAweDI3LAorMHgzOCwgMHg0MywgMHhkMSwgMHg2ZiwgMHgwOSwgMHg2OCwgMHgwOSwgMHgwYSwgMHgwNywgMHhkMiwgMHhkMSwgMHgxZCwKKzB4NzksIDB4MzEsIDB4MDksIDB4NjgsIDB4MDksIDB4NjgsIDB4MDksIDB4MGEsIDB4MDEsIDB4ZDMsIDB4MDgsIDB4MjMsCisweDE4LCAweDQzLCAweGUzLCAweDIzLCAweDFiLCAweDAxLCAweGQxLCAweDE4LCAweDg5LCAweDc5LCAweDAzLCAweDI5LAorMHgwMiwgMHhkMSwgMHhmZiwgMHgyMywgMHgwMSwgMHgzMywgMHgxOCwgMHg0MywgMHgwYiwgMHg0OSwgMHgwOSwgMHg2YSwKKzB4MTAsIDB4MjIsIDB4NGIsIDB4MGEsIDB4MDAsIDB4ZDIsIDB4MDAsIDB4MjIsIDB4MTAsIDB4NDMsIDB4ODksIDB4MDcsCisweDg5LCAweDBmLCAweDg5LCAweDAxLCAweDA4LCAweDQzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDQwLCAweDBjLAorMHgwMCwgMHhkMiwgMHgwMCwgMHgyNCwgMHgwYywgMHg0MywgMHgyMCwgMHgxYywgMHhlYywgMHhlNywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsCisweGYwLCAweGI1LCAweDNhLCAweDRjLCAweDIwLCAweDFjLCAweDA0LCAweGYwLCAweDA3LCAweGZhLCAweDM5LCAweDQ4LAorMHhlMywgMHgyMywgMHgxYiwgMHgwMSwgMHhjNywgMHgxOCwgMHhiOSwgMHg3OSwgMHgzNywgMHg0ZSwgMHhjNSwgMHgxZCwKKzB4NzksIDB4MzUsIDB4MDYsIDB4MjksIDB4NjIsIDB4ZDIsIDB4MDIsIDB4YTMsIDB4NWIsIDB4NWMsIDB4NWIsIDB4MDAsCisweDlmLCAweDQ0LCAweDAwLCAweDFjLCAweDAzLCAweDBlLCAweDFlLCAweDM3LCAweDRlLCAweDU1LCAweDAxLCAweDIwLAorMHhiOCwgMHg3MSwgMHgwMCwgMHgyMCwgMHhiMCwgMHg2MCwgMHhmZiwgMHhmNywgMHg5NSwgMHhmZiwgMHgwNSwgMHgyMywKKzB4OTgsIDB4NDMsIDB4MDAsIDB4ZjAsIDB4NmYsIDB4ZjgsIDB4MGMsIDB4ZTAsIDB4ZmYsIDB4ZjcsIDB4OGUsIDB4ZmYsCisweGMwLCAweDA4LCAweDA2LCAweGQzLCAweGIwLCAweDY4LCAweDQxLCAweDFjLCAweGIxLCAweDYwLCAweDBhLCAweDI4LAorMHgwMywgMHhkOSwgMHgwNCwgMHgyMCwgMHgwMCwgMHhlMCwgMHgwMiwgMHgyMCwgMHhiOCwgMHg3MSwgMHg2NCwgMHgyMiwKKzB4MjAsIDB4MWMsIDB4MmIsIDB4ZTAsIDB4MDYsIDB4MWMsIDB4YzAsIDB4NmYsIDB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsCisweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAzLCAweDIwLCAweGI4LCAweDcxLCAweDIwLCAweDFjLCAweDIwLCAweDRhLAorMHgwMCwgMHgyMSwgMHgwNCwgMHhmMCwgMHg5OSwgMHhmOSwgMHhmMCwgMHg2ZiwgMHgwNCwgMHgyMywgMHgwMSwgMHg2OCwKKzB4OTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MjgsIDB4NjgsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCisweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA1LCAweDIxLCAweGI5LCAweDcxLCAweDI5LCAweDY4LAorMHgwNCwgMHgyMywgMHgwYSwgMHg2OCwgMHg5YSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMCwgMHg2ZiwgMHgwMSwgMHg2OCwKKzB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZmYsIDB4ZjcsIDB4NWEsIDB4ZmYsIDB4MDgsIDB4MjMsIDB4MTgsIDB4NDMsCisweDAwLCAweGYwLCAweDM0LCAweGY4LCAweDIwLCAweDFjLCAweDEwLCAweDRhLCAweDAwLCAweDIxLCAweDA0LCAweGYwLAorMHg3NywgMHhmOSwgMHhlNSwgMHhlNywgMHhmZiwgMHhmNywgMHg0ZSwgMHhmZiwgMHgwNCwgMHgyMywgMHgxOCwgMHg0MywKKzB4MDAsIDB4ZjAsIDB4MjgsIDB4ZjgsIDB4ZGUsIDB4ZTcsIDB4MDAsIDB4MjAsIDB4MjksIDB4NjgsIDB4NjAsIDB4MjMsCisweDBhLCAweDY4LCAweDlhLCAweDQzLCAweDBhLCAweDYwLCAweGZmLCAweGY3LCAweGUzLCAweGZhLCAweGQ1LCAweGU3LAorMHgwNiwgMHgyMCwgMHhiOCwgMHg3MSwgMHhkMiwgMHhlNywgMHgwMCwgMHgwMCwgMHhhOSwgMHg3OSwgMHgyMSwgMHg0MCwKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OWMsIDB4MDMsIDB4MDAsIDB4ODAsIDB4MzAsIDB4NzUsIDB4MDAsIDB4MDAsCisweDEwLCAweDI3LCAweDAwLCAweDAwLCAweDAwLCAweGI1LCAweDAwLCAweDIwLAorMHgwNCwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg3MSwgMHgwNCwgMHg0OCwgMHgwMSwgMHgyMiwgMHgwMCwgMHgyMSwKKzB4MDQsIDB4ZjAsIDB4NGUsIDB4ZjksIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTgsIDB4MWMsIDB4MDAsIDB4ODAsCisweGE5LCAweDc5LCAweDIxLCAweDQwLCAweDkwLCAweGI1LCAweDA3LCAweDFjLCAweDMxLCAweDQ4LCAweDAwLCAweDY4LAorMHg3OSwgMHgwOCwgMHgwMywgMHhkMywgMHgxMCwgMHgyMywgMHgwMSwgMHgxYywgMHg5OSwgMHg0MywgMHgwMSwgMHhlMCwKKzB4MTAsIDB4MjEsIDB4MDEsIDB4NDMsIDB4MmQsIDB4NGMsIDB4ZTIsIDB4NjgsIDB4MDEsIDB4MmEsIDB4MDUsIDB4ZDEsCisweDIyLCAweDc5LCAweDAwLCAweDJhLCAweDAyLCAweGQwLCAweDAxLCAweDIzLCAweDliLCAweDAyLCAweDE5LCAweDQzLAorMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMSwgMHgyMCwgMHgwMCwgMHgwNSwgMHgwMSwgMHg2MCwgMHhlMCwgMHg2OCwKKzB4MDEsIDB4MjgsIDB4MjAsIDB4ZDEsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZTAsIDB4MTgsIDB4ODAsIDB4OGIsCisweGY5LCAweDA4LCAweDA0LCAweGQzLCAweDAxLCAweDIzLCAweGRiLCAweDAyLCAweDAxLCAweDFjLCAweDk5LCAweDQzLAorMHgwMSwgMHhlMCwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMiwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMCwgMHgyMCwKKzB4MDIsIDB4ZjAsIDB4MWEsIDB4ZmIsIDB4MzgsIDB4MDksIDB4MDcsIDB4ZDMsIDB4ZTAsIDB4NmYsIDB4ODAsIDB4MjMsCisweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAweGUwLCAweDE4LCAweDAwLCAweDY4LCAweDAwLCAweGUwLAorMHhlMCwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgxNSwgMHg0OCwKKzB4MDEsIDB4NmEsIDB4NzgsIDB4MDksIDB4MDMsIDB4ZDMsIDB4ZmYsIDB4MjAsIDB4MDEsIDB4MzAsIDB4MDgsIDB4NDMsCisweDAzLCAweGUwLCAweGZmLCAweDIzLCAweDA4LCAweDFjLCAweDAxLCAweDMzLCAweDk4LCAweDQzLCAweDgwLCAweDA4LAorMHg4MCwgMHgwMCwgMHhiYSwgMHgwOSwgMHg5MiwgMHgwNywgMHg5MiwgMHgwZiwgMHgxMCwgMHg0MywgMHg4OCwgMHg0MiwKKzB4MDIsIDB4ZDAsIDB4MGMsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjIsIDB4ZTEsIDB4NjgsIDB4MDEsIDB4MjksCisweDA4LCAweGQxLCAweDc5LCAweDBhLCAweDA2LCAweGQzLCAweGZmLCAweDIzLCAweDA0LCAweDMzLCAweDE4LCAweDQwLAorMHgwMywgMHgyOCwgMHgwMSwgMHhkMSwgMHhmZiwgMHhmNywgMHg4ZSwgMHhmZiwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweDgwLCAweGI1LCAweGZmLCAweGY3LAorMHhiMSwgMHhmZSwgMHg4MCwgMHgwOSwgMHgxYiwgMHhkMiwgMHgwZiwgMHg0OCwgMHhlMywgMHgyMywgMHgxYiwgMHgwMSwKKzB4YzEsIDB4MTgsIDB4NGEsIDB4NzksIDB4MDAsIDB4MmEsIDB4MTQsIDB4ZDEsIDB4MDEsIDB4MjIsIDB4NGEsIDB4NzEsCisweDAwLCAweDI3LCAweDgwLCAweDMwLCAweDAwLCAweDY4LCAweDYwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLAorMHgwMSwgMHg2MCwgMHgwOCwgMHg0OCwgMHgwNiwgMHhlMCwgMHgwMiwgMHgyMCwgMHgwMiwgMHhmMCwgMHg4YywgMHhmYywKKzB4MDcsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4NWIsIDB4ZmMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzYsIDB4ZmEsCisweGY1LCAweGU3LCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHhmNCwgMHgwMSwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKKzB4MzcsIDB4ZmMsIDB4ZmYsIDB4ZjcsIDB4ODUsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4MDgsIDB4NDgsCisweDAwLCAweDY4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA3LCAweDQ4LCAweDAwLCAweDZhLCAweGMwLCAweDQ2LAorMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg2NywgMHhmYiwgMHgwMSwgMHgyMCwKKzB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCisweGMwLCAweDAwLCAweDE4LCAweDQwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLCAweDY5LCAweDQ2LAorMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgxNywgMHhmYywgMHhmOCwgMHg4OCwgMHhmZiwgMHhmNywgMHg0MiwgMHhmZiwKKzB4ZmYsIDB4ZjcsIDB4NjIsIDB4ZmUsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCisweGZmLCAweGY3LCAweDRjLCAweGZiLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHhiMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHhjNywgMHg4OCwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywKKzB4MDEsIDB4ZmMsIDB4MDEsIDB4MjQsIDB4MWEsIDB4NGIsIDB4OWYsIDB4NDIsIDB4MGEsIDB4ZDksIDB4MDAsIDB4YTgsCisweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLCAweDE4LCAweDcwLCAweDAyLCAweDIwLAorMHhkOCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgyMCwgMHhlMCwgMHgxNCwgMHg0OCwgMHhmZiwgMHhmNywKKzB4ZTEsIDB4ZjksIDB4MDUsIDB4MWMsIDB4MTMsIDB4NGEsIDB4MzgsIDB4MWMsIDB4MDQsIDB4YTksIDB4ZmYsIDB4ZjcsCisweGRkLCAweGY5LCAweDEyLCAweDQ5LCAweDI4LCAweDFjLCAweGZmLCAweGY3LCAweGQ4LCAweGY5LCAweDAxLCAweDJmLAorMHgwNiwgMHhkMSwgMHgwYywgMHhhOSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwKKzB4MGEsIDB4NjAsIDB4MDEsIDB4MzAsIDB4MTAsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4MTAsIDB4MjAsIDB4MDAsIDB4YWIsCisweDU4LCAweDcwLCAweDA0LCAweDk4LCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDA1LCAweDk4LCAweGMwLCAweDQ2LAorMHgwMywgMHg5MCwgMHg2OCwgMHg0NiwgMHgwNiwgMHhhOSwgMHhmZiwgMHhmNywgMHgwZiwgMHhmYiwgMHgyMCwgMHgxYywKKzB4NDYsIDB4YjAsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZmYsIDB4MDEsIDB4MDAsIDB4MDAsCisweDI0LCAweDAyLCAweGZmLCAweGZmLCAweDlkLCAweGFmLCAweDIxLCAweDQwLCAweDNjLCAweDAyLCAweGZmLCAweGZmLAorMHhmMCwgMHhiNSwgMHhjNiwgMHhiMCwgMHgwNywgMHgxYywgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywKKzB4YmIsIDB4ZmIsIDB4ZmMsIDB4ODgsIDB4NzgsIDB4NzgsIDB4MDEsIDB4MjUsIDB4MTAsIDB4MjgsIDB4MDEsIDB4ZDEsCisweDE5LCAweDJjLCAweDA5LCAweGQ5LCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLAorMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHgwNCwgMHgzMywgMHgyNywgMHhlMCwKKzB4YjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDQsIDB4OTAsIDB4ZjgsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDUsIDB4OTAsCisweDA2LCAweGFhLCAweGZiLCAweDFkLCAweDA5LCAweDMzLCAweDAwLCAweDIxLCAweDc4LCAweDc4LCAweDAwLCAweDI4LAorMHgwZCwgMHhkZCwgMHgwMCwgMHgyMCwgMHg0MCwgMHhjYiwgMHg0MCwgMHhjMiwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MGMsIDB4MDQsIDB4MjgsIDB4ZjgsIDB4ZGIsIDB4NDgsIDB4MWMsIDB4MDEsIDB4MDQsIDB4MDksIDB4MGMsCisweDc4LCAweDc4LCAweDg4LCAweDQyLCAweGYxLCAweGRjLCAweDBiLCAweDQ4LCAweGZmLCAweGY3LCAweDdlLCAweGY5LAorMHgwNywgMHgxYywgMHgwYSwgMHg0YSwgMHgyMCwgMHgxYywgMHgwNCwgMHhhOSwgMHhmZiwgMHhmNywgMHg3YSwgMHhmOSwKKzB4MDgsIDB4NDksIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NzUsIDB4ZjksIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCisweGZmLCAweGY3LCAweGJlLCAweGZhLCAweDI4LCAweDFjLCAweDQ2LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHhjNSwgMHhhZiwgMHgyMSwgMHg0MCwKKzB4M2MsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDQsIDB4MWMsIDB4MDAsIDB4MjcsCisweGU2LCAweDg4LCAweGEyLCAweDY4LCAweDQ3LCAweDQ5LCAweDA4LCAweDc5LCAweDAwLCAweDI4LCAweDA4LCAweGQwLAorMHgwMCwgMHgyZSwgMHgwMSwgMHhkMCwgMHgwMSwgMHgyZSwgMHgwMSwgMHhkMSwgMHgwMSwgMHgyNywgMHgwMSwgMHhlMCwKKzB4MDQsIDB4MmUsIDB4MDAsIDB4ZDEsIDB4MDMsIDB4MjYsIDB4MDEsIDB4MjUsIDB4NDEsIDB4NDgsIDB4MDUsIDB4MmUsCisweDY2LCAweGQyLCAweDAyLCAweGEzLCAweDliLCAweDVkLCAweDViLCAweDAwLCAweDlmLCAweDQ0LCAweDAwLCAweDFjLAorMHgwMywgMHgwNiwgMHgwOCwgMHgwYywgMHgxMCwgMHgwMCwgMHgwNSwgMHg4MCwgMHgwMCwgMHgyMywgMHgwMywgMHhlMCwKKzB4MDUsIDB4ODAsIDB4MDUsIDB4ZTAsIDB4MDAsIDB4MjMsIDB4MDMsIDB4ODAsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZTAsCisweDAwLCAweDIzLCAweDAzLCAweDgwLCAweDQ1LCAweDgwLCAweDAyLCAweGUwLCAweGZmLCAweDIzLCAweDAxLCAweDMzLAorMHgwMywgMHg4MCwgMHhjYiwgMHgxZCwgMHg3OSwgMHgzMywgMHg5ZSwgMHg4OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMiwKKzB4OWUsIDB4NDIsIDB4MDIsIDB4ZGIsIDB4ZDIsIDB4MDcsIDB4ZDIsIDB4MGYsIDB4MDAsIDB4ZTAsIDB4MDEsIDB4MjIsCisweDZkLCAweDIzLCAweDViLCAweDAxLCAweGM5LCAweDE4LCAweDg5LCAweDg4LCAweGZmLCAweDIzLCAweGUxLCAweDMzLAorMHg5OSwgMHg0MywgMHgwMSwgMHgyMywgMHgxOSwgMHg0MywgMHgwNiwgMHg4OCwgMHhmZiwgMHgzMywgMHg5ZSwgMHg0MiwKKzB4MGQsIDB4ZDEsIDB4ZmYsIDB4MjAsIDB4ZTEsIDB4MzAsIDB4MDgsIDB4NDMsIDB4MDAsIDB4MmEsIDB4MDQsIDB4ZDEsCisweDAxLCAweDIzLCAweDliLCAweDAyLCAweDk4LCAweDQzLCAweDAxLCAweDFjLCAweDIwLCAweGUwLCAweDAxLCAweDIxLAorMHg4OSwgMHgwMiwgMHgwMSwgMHg0MywgMHgxYywgMHhlMCwgMHgwMSwgMHgyZSwgMHgwYSwgMHhkMSwgMHg0MCwgMHg4OCwKKzB4MDEsIDB4MjgsIDB4MDQsIDB4ZDEsIDB4NjAsIDB4MjMsIDB4MTksIDB4NDMsIDB4MDAsIDB4MmEsIDB4MTMsIDB4ZDAsCisweDBjLCAweGUwLCAweDIwLCAweDIzLCAweDE5LCAweDQzLCAweDBmLCAweGUwLCAweDAwLCAweDJlLCAweDBkLCAweGQxLAorMHg0MCwgMHg4OCwgMHgwMSwgMHgyOCwgMHgwOCwgMHhkMSwgMHhmZiwgMHgyMywgMHg4MSwgMHgzMywgMHgxOSwgMHg0MywKKzB4MDAsIDB4MmEsIDB4MDUsIDB4ZDAsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTksIDB4NDMsIDB4MDEsIDB4ZTAsCisweDgwLCAweDIzLCAweDE5LCAweDQzLCAweDA0LCAweDIwLCAweDAyLCAweGYwLCAweDc1LCAweGY5LCAweDA5LCAweDIxLAorMHg0OSwgMHgwMiwgMHgwMCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg3MCwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwMiwgMHhkMSwKKzB4MDAsIDB4MjAsIDB4MTIsIDB4ZTAsIDB4ZmYsIDB4ZTcsIDB4NjksIDB4NDYsIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsCisweGVmLCAweGZhLCAweDAwLCAweGE4LCAweDAwLCAweDc4LCAweDQwLCAweDIzLCAweDE4LCAweDQzLCAweDAwLCAweGFiLAorMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHgwNCwgMHgzMywKKzB4ZmYsIDB4ZjcsIDB4MjIsIDB4ZmEsIDB4MjgsIDB4MWMsIDB4MDQsIDB4YjAsCisweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHhjMCwgMHg4OCwgMHg1MSwgMHgyMSwgMHg4OSwgMHgwMywgMHgwOCwgMHg2MiwKKzB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MTYsIDB4NGYsIDB4ZjgsIDB4NjgsIDB4MDEsIDB4MjgsCisweDA3LCAweGQxLCAweDM3LCAweDIzLCAweDliLCAweDAxLCAweGY4LCAweDE4LCAweDQwLCAweDhhLCAweDgwLCAweDIxLAorMHgwMSwgMHg0MywgMHgxYiwgMHgyMCwgMHgwNywgMHhlMCwgMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhmOCwgMHgxOCwKKzB4ODAsIDB4OGIsIDB4MDEsIDB4MjEsIDB4NDksIDB4MDMsIDB4MDEsIDB4NDMsIDB4MTAsIDB4MjAsIDB4MDIsIDB4ZjAsCisweDMzLCAweGY5LCAweDAxLCAweDIwLCAweDcxLCAweDIzLCAweDViLCAweDAxLCAweGY5LCAweDE4LCAweDA4LCAweDgwLAorMHg0OCwgMHg4MCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhmOCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwMSwgMHgyMywKKzB4MWIsIDB4MDMsIDB4OTgsIDB4NDMsIDB4NDEsIDB4MjEsIDB4MDksIDB4MDIsIDB4MDEsIDB4NDMsIDB4MDAsIDB4MjAsCisweDAyLCAweGYwLCAweDIwLCAweGY5LCAweDAwLCAweDIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg4MCwgMHhiNSwgMHgxNywgMHg0ZiwgMHhmOCwgMHg2OCwgMHgwMSwgMHgyOCwKKzB4MDgsIDB4ZDEsIDB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZjgsIDB4MTgsIDB4NDAsIDB4OGEsIDB4ODAsIDB4MjMsCisweDk4LCAweDQzLCAweDAxLCAweDFjLCAweDFiLCAweDIwLCAweDA4LCAweGUwLCAweDZkLCAweDIzLCAweDViLCAweDAxLAorMHhmOCwgMHgxOCwgMHg4MCwgMHg4YiwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMywgMHg5OCwgMHg0MywgMHgwMSwgMHgxYywKKzB4MTAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4MDEsIDB4ZjksIDB4ZmYsIDB4MjAsIDB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsCisweGY5LCAweDE4LCAweDAxLCAweDMwLCAweDA4LCAweDgwLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGY4LCAweDE4LAorMHg4MCwgMHg4YiwgMHg0MSwgMHgyMywgMHgxYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwKKzB4MDEsIDB4NDMsIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4ZWUsIDB4ZjgsIDB4MDAsIDB4MjAsIDB4ODAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLAorMHgwOCwgMHg0OSwgMHhjZiwgMHg2YSwgMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg2OSwgMHhmYSwgMHhiOCwgMHgwNSwKKzB4ODAsIDB4MGQsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsCisweGExLCAweGY5LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHhjMCwgMHg4OCwgMHg5ZiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwNSwgMHg0OSwKKzB4YzksIDB4NmEsIDB4MWIsIDB4MjMsIDB4NWIsIDB4MDEsIDB4MTksIDB4NDAsIDB4MDgsIDB4NDMsIDB4MDMsIDB4NDksCisweGMwLCAweDQ2LCAweGM4LCAweDYyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDQwLCAweDAwLCAweDE0LCAweDQwLAorMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwZCwgMHg0OSwgMHgwZiwgMHg2YSwKKzB4MDEsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4ZmYsIDB4MDMsIDB4MDcsIDB4ZTAsIDB4MDIsIDB4MmYsIDB4MDEsIDB4ZDEsCisweDNmLCAweDAzLCAweDAzLCAweGUwLCAweDAwLCAweDJmLCAweDAxLCAweGQxLCAweDAxLCAweDI3LCAweGZmLCAweDAyLAorMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHgzNSwgMHhmYSwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHg2OCwgMHg0NiwKKzB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4NmYsIDB4ZjksIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDE0LCAweDQwLCAweGMyLCAweDg4LCAweGExLCAweDIwLAorMHg0MCwgMHgwMywgMHgwMCwgMHgyMSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwMywgMHg5YSwgMHg0MiwgMHgwMSwgMHhkMSwKKzB4MDIsIDB4MjIsIDB4MDQsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDMsIDB4OWEsIDB4NDIsIDB4MDIsIDB4ZDEsCisweDAxLCAweDIyLCAweDAyLCAweDYyLCAweDAwLCAweGUwLCAweDAxLCAweDYyLCAweDA4LCAweDFjLCAweDcwLCAweDQ3LAorMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywgMHgwMiwgMHhmMCwgMHg5ZiwgMHhmOCwgMHg2OSwgMHg0NiwKKzB4MDQsIDB4MWMsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MGEsIDB4ZmEsIDB4MDEsIDB4YWIsIDB4NWMsIDB4ODAsCisweDA5LCAweDRmLCAweGY4LCAweDZkLCAweGMwLCAweDQ2LCAweDAyLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLAorMHhmZiwgMHhmNywgMHg0MCwgMHhmOSwgMHhmOCwgMHg2ZCwgMHhjMCwgMHgwNywgMHhjMCwgMHgwZiwgMHgwNSwgMHg0OSwKKzB4YzAsIDB4NDYsIDB4YzgsIDB4NjIsIDB4MDEsIDB4MjAsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDY4LCAweDFjLCAweDAwLCAweDgwLAorMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg0OCwgMHg2MSwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKKzB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4NjksIDB4NDYsIDB4ZmYsIDB4ZjcsCisweGUzLCAweGY5LCAweDA2LCAweDQ4LCAweGMwLCAweDY4LCAweDAxLCAweGFiLAorMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHgxYiwgMHhmOSwgMHgwMSwgMHgyMCwKKzB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MTQsIDB4NDAsCisweGMwLCAweDg4LCAweDAyLCAweDQ5LCAweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAorMHg4MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHg4NywgMHg2OCwKKzB4ZmYsIDB4ZjcsIDB4YzYsIDB4ZjksIDB4MjAsIDB4MmYsIDB4MDcsIDB4ZDIsIDB4NzgsIDB4MDAsIDB4MGMsIDB4NDksCisweDQwLCAweDE4LCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDgwLCAweDhiLCAweDA2LCAweGUwLAorMHgwMCwgMHhhOCwgMHgwMCwgMHg3OCwgMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwKKzB4MDIsIDB4MjAsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsCisweGVmLCAweGY4LCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHhjMSwgMHg4OCwgMHg4MiwgMHg2OCwKKzB4MjAsIDB4MmEsIDB4MDQsIDB4ZDIsIDB4MTAsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4MTcsIDB4ZjgsIDB4MDAsIDB4MjAsCisweDEwLCAweGUwLCAweDY5LCAweDQ2LCAweGZmLCAweGY3LCAweDlhLCAweGY5LCAweDAwLCAweGE4LCAweDAwLCAweDc4LAorMHg0MCwgMHgyMywgMHgxOCwgMHg0MywgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwMiwgMHgyMCwgMHhkOCwgMHg4MCwKKzB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4MDQsIDB4MzMsIDB4ZmYsIDB4ZjcsIDB4Y2QsIDB4ZjgsIDB4MDEsIDB4MjAsCisweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweGM3LCAweDg4LAorMHg2OSwgMHg0NiwgMHhmZiwgMHhmNywgMHg4MywgMHhmOSwgMHgxMCwgMHg0OCwgMHhmZSwgMHhmNywgMHg3MiwgMHhmZiwKKzB4MDIsIDB4MjAsIDB4MzksIDB4MWMsIDB4MDIsIDB4ZjAsIDB4ZjIsIDB4ZmYsIDB4MDAsIDB4MjgsIDB4MDYsIDB4ZDAsCisweDAyLCAweDIwLCAweDM5LCAweDFjLCAweDAyLCAweGYwLCAweDM2LCAweGZmLCAweDAxLCAweGFiLCAweDU4LCAweDgwLAorMHgwMiwgMHhlMCwgMHg0NSwgMHgyMCwgMHgwMCwgMHhhYiwgMHgxOCwgMHg3MCwgMHgwNywgMHg0OSwgMHgyMCwgMHgxYywKKzB4ZmUsIDB4ZjcsIDB4NWYsIDB4ZmYsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4YTgsIDB4ZjgsCisweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHgyNCwgMHgwMiwgMHhmZiwgMHhmZiwgMHgzYywgMHgwMiwgMHhmZiwgMHhmZiwgMHhiMCwgMHhiNSwgMHg4NCwgMHhiMCwKKzB4YzcsIDB4ODgsIDB4NjksIDB4NDYsIDB4ODQsIDB4NjgsIDB4ZmYsIDB4ZjcsIDB4NTcsIDB4ZjksIDB4MTAsIDB4NDgsCisweGZlLCAweGY3LCAweDQ2LCAweGZmLCAweDBmLCAweDRhLCAweDAyLCAweDIwLCAweDM5LCAweDFjLCAweGZlLCAweGY3LAorMHg0MywgMHhmZiwgMHgwMCwgMHgyOCwgMHgwNiwgMHhkMCwgMHgwZCwgMHg0YiwgMHgwMiwgMHgyMCwgMHgzOSwgMHgxYywKKzB4MjIsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4M2MsIDB4ZmYsIDB4MDIsIDB4ZTAsIDB4NDUsIDB4MjAsIDB4MDAsIDB4YWIsCisweDE4LCAweDcwLCAweDA5LCAweDQ5LCAweDI4LCAweDFjLCAweGZlLCAweGY3LCAweDMyLCAweGZmLCAweDY4LCAweDQ2LAorMHgwMCwgMHgyMSwgMHhmZiwgMHhmNywgMHg3YiwgMHhmOCwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHhiMCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MjQsIDB4MDIsIDB4ZmYsIDB4ZmYsIDB4NTksIDB4YjEsIDB4MjEsIDB4NDAsCisweDU5LCAweGIwLCAweDIxLCAweDQwLCAweDNjLCAweDAyLCAweGZmLCAweGZmLCAweDAwLCAweGI1LCAweGZmLCAweGY3LAorMHg0MywgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHg4MCwgMHhiNCwKKzB4YzIsIDB4ODgsIDB4MTksIDB4NGIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDEsCisweDE4LCAweDZiLCAweDEwLCAweDIzLCAweDk4LCAweDQzLCAweDA0LCAweGUwLCAweDAxLCAweDJhLCAweDA0LCAweGQxLAorMHgxOCwgMHg2YiwgMHgxMCwgMHgyMywgMHgxOCwgMHg0MywgMHg0OCwgMHg2MSwgMHgxZiwgMHhlMCwgMHgwMiwgMHgyYSwKKzB4MWQsIDB4ZDEsIDB4YzIsIDB4NjgsIDB4ODcsIDB4NjgsIDB4MDAsIDB4MjAsIDB4M2IsIDB4MWMsIDB4YzMsIDB4NDAsCisweGRiLCAweDA3LCAweGRiLCAweDBmLCAweDliLCAweDAyLCAweDAzLCAweDQzLCAweDBiLCAweDYxLCAweDAxLCAweDMwLAorMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywgMHgyMCwgMHgyOCwgMHhmMywgMHhkYiwgMHgwMCwgMHgyMCwgMHgxMywgMHgxYywKKzB4YzMsIDB4NDAsIDB4ZGIsIDB4MDcsIDB4ZGIsIDB4MGYsIDB4OWIsIDB4MDIsIDB4YzcsIDB4MWQsIDB4MTksIDB4MzcsCisweDNiLCAweDQzLCAweDBiLCAweDYxLCAweDAxLCAweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDIwLCAweDI4LAorMHhmMSwgMHhkYiwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwKKzB4ODAsIDB4YjQsIDB4YzIsIDB4ODgsIDB4ODEsIDB4NjgsIDB4MTAsIDB4MDIsIDB4MTIsIDB4MGEsIDB4MTAsIDB4NDMsCisweDAyLCAweDA0LCAweDEyLCAweDBjLCAweDBjLCAweDQ4LCAweGMwLCAweDQ2LCAweDAyLCAweDYwLCAweDBjLCAweDRiLAorMHhjMCwgMHg0NiwgMHgxYSwgMHg4MCwgMHgwYSwgMHgwYywgMHgxNywgMHgwMiwKKzB4MTIsIDB4MTIsIDB4M2EsIDB4NDMsIDB4MTIsIDB4MDQsIDB4MTIsIDB4MGMsIDB4NDIsIDB4NjAsIDB4NWEsIDB4ODAsCisweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDBhLCAweDAyLCAweDA5LCAweDBhLCAweDExLCAweDQzLCAweDA5LCAweDA0LAorMHgwOSwgMHgwYywgMHg4MSwgMHg2MCwgMHg5OSwgMHg4MCwgMHgwMCwgMHgyMCwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywKKzB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MjgsIDB4MWIsIDB4MDAsIDB4ODAsIDB4YjAsIDB4YjUsIDB4ODQsIDB4YjAsCisweDEzLCAweDQ5LCAweDBhLCAweDY4LCAweDEyLCAweDA0LCAweDEyLCAweDBjLCAweDEzLCAweDAyLCAweDEyLCAweDEyLAorMHgxMywgMHg0MywgMHg0YSwgMHg2OCwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywgMHgxZiwgMHgxYywgMHgxMywgMHgwMiwKKzB4MTIsIDB4MTIsIDB4MTMsIDB4NDMsIDB4ODksIDB4NjgsIDB4MDksIDB4MDQsIDB4MDksIDB4MGMsIDB4MGEsIDB4MDIsCisweDA5LCAweDEyLCAweDExLCAweDQzLCAweDBjLCAweDA0LCAweDI0LCAweDBjLCAweDY5LCAweDQ2LCAweDFkLCAweDFjLAorMHhmZiwgMHhmNywgMHhhZSwgMHhmOCwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHgyOCwgMHgwNCwgMHgyMCwgMHg0MywKKzB4MDIsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4ZTUsIDB4ZmYsIDB4MDEsIDB4MjAsCisweDA0LCAweGIwLCAweGIwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDQwLCAweDAwLCAweDE0LCAweDQwLAorMHhjMSwgMHg4OCwgMHg4MiwgMHg2OCwgMHgwOCwgMHgwMiwgMHgwOSwgMHgwYSwgMHgwOCwgMHg0MywgMHgwMCwgMHgwNCwKKzB4MDAsIDB4MGMsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MTAsIDB4MGMsIDB4MDMsIDB4MDIsCisweDAwLCAweDEyLCAweDE4LCAweDQzLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA4LCAweDYxLCAweDEwLCAweDA0LAorMHgwMCwgMHgwYywgMHgwMiwgMHgwMiwgMHgwMCwgMHgwYSwgMHgxMCwgMHg0MywgMHgwMCwgMHgwNCwgMHgwMCwgMHgwYywKKzB4NDgsIDB4NjEsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4MDAsIDB4MTQsIDB4MDAsCisweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDE2LCAweDRiLCAweGQ5LCAweDY4LCAweDA5LCAweDA0LCAweDA5LCAweDBjLAorMHgwYSwgMHgwMiwgMHgwOSwgMHgxMiwgMHgxMSwgMHg0MywgMHgxYSwgMHg2OSwgMHgxMiwgMHgwNCwgMHgxMiwgMHgwYywKKzB4MTcsIDB4MDIsIDB4MTIsIDB4MTIsIDB4M2EsIDB4NDMsIDB4NWIsIDB4NjksIDB4MWIsIDB4MDQsIDB4MWIsIDB4MGMsCisweDFmLCAweDAyLCAweDFiLCAweDEyLCAweDNiLCAweDQzLCAweDFmLCAweDA0LCAweDNmLCAweDBjLCAweDA1LCAweDIzLAorMHgwMCwgMHg5MywgMHg4NCwgMHg4OCwgMHgwMSwgMHhhYiwgMHgxYywgMHg4MCwgMHgwMCwgMHgyNCwgMHgwNCwgMHgzYiwKKzB4NWMsIDB4NzAsIDB4NDAsIDB4ODgsIDB4MDAsIDB4YWIsIDB4NTgsIDB4ODAsIDB4ZDksIDB4ODAsIDB4MTAsIDB4MDQsCisweDM4LCAweDQzLCAweDAyLCAweDkwLCAweDAzLCAweDk0LCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LAorMHg5NSwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwNCwgMHhiMCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4NDAsIDB4MDAsIDB4MTQsIDB4NDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGIsIDB4NDksIDB4OGEsIDB4NmEsCisweDA1LCAweDIxLCAweDAwLCAweDkxLCAweDgxLCAweDg4LCAweDAxLCAweGFiLCAweDE5LCAweDgwLCAweDAwLCAweDIxLAorMHgwNCwgMHgzYiwgMHg1OSwgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkYSwgMHg4MCwKKzB4MDIsIDB4OTEsIDB4MDMsIDB4OTEsIDB4NjgsIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4NzksIDB4ZmYsIDB4MDEsIDB4MjAsCisweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE0LCAweDQwLAorMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKKzB4YzAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MGIsIDB4NDksIDB4MGEsIDB4NmEsCisweDA1LCAweDIxLCAweDAwLCAweDkxLCAweDgxLCAweDg4LCAweDAxLCAweGFiLCAweDE5LCAweDgwLCAweDAwLCAweDIxLAorMHgwNCwgMHgzYiwgMHg1OSwgMHg3MCwgMHg0MCwgMHg4OCwgMHgwMCwgMHhhYiwgMHg1OCwgMHg4MCwgMHhkYSwgMHg4MCwKKzB4MDIsIDB4OTEsIDB4MDMsIDB4OTEsIDB4NjgsIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4NTUsIDB4ZmYsIDB4MDEsIDB4MjAsCisweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweGMwLCAweDAwLCAweDE0LCAweDQwLAorMHhjMCwgMHg4OCwgMHgwMiwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MiwgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKKzB4YzAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4MDAsIDB4YjUsIDB4YzAsIDB4ODgsIDB4MDIsIDB4NDksIDB4ZmUsIDB4ZjcsCisweGY0LCAweGZkLCAweDAwLCAweDIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDc1LCAweDAyLCAweGZmLCAweGZmLAorMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwgMHg2OSwgMHg0NiwgMHhmZSwgMHhmNywgMHhmNywgMHhmZiwgMHgwNiwgMHg0OCwKKzB4MDAsIDB4NmIsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsCisweDJmLCAweGZmLCAweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhmZCwgMHhmZiwgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4ZjgsIDB4ZmYsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGYzLCAweGZmLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHgwNywgMHgxYywgMHgxMCwgMHg0OCwgMHhmZSwgMHhmNywgMHhjNiwgMHhmZCwKKzB4MDEsIDB4MjAsIDB4NDAsIDB4MDIsIDB4YTEsIDB4MjEsIDB4NDksIDB4MDMsIDB4ODgsIDB4NjAsIDB4MDAsIDB4MjEsCisweDBjLCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDcxLCAweDBjLCAweDQ4LCAweDAyLCAweDY4LCAweDUyLCAweDBjLAorMHgwNSwgMHhkMiwgMHgwMiwgMHg2OCwgMHgxMiwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwKKzB4MDMsIDB4ZDMsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YzcsIDB4NjAsIDB4MDIsIDB4ZTAsIDB4MDcsIDB4NDgsCisweGMwLCAweDQ2LCAweDA3LCAweDY0LCAweDA4LCAweDFjLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHhkNSwgMHg5NCwgMHgyMSwgMHg0MCwgMHgyOCwgMHgwZiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKzB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjAsCisweDAzLCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDcyLCAweDEyLCAweDIwLCAweGZmLCAweGY3LCAweGNiLCAweGZmLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4OCwgMHgxYywgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHgyMCwKKzB4MDMsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NzIsIDB4MTUsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4YmYsIDB4ZmYsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDg4LCAweDFjLCAweDAwLCAweDgwLCAweDAwLCAweGI1LCAweDAxLCAweGYwLAorMHhmOSwgMHhmZiwgMHgwMSwgMHgyMCwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwKKzB4MDcsIDB4MWMsIDB4ZjgsIDB4ODgsIDB4MDIsIDB4ZjAsIDB4ZmUsIDB4ZjgsIDB4MDAsIDB4MjgsIDB4MGMsIDB4ZDEsCisweDY5LCAweDQ2LCAweDM4LCAweDFjLCAweGZlLCAweGY3LCAweDgyLCAweGZmLCAweDA2LCAweDQ4LCAweDAxLCAweGFiLAorMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHhiYiwgMHhmZSwgMHgwMSwgMHgyMCwKKzB4MDAsIDB4ZTAsIDB4MDAsIDB4MjAsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDY5LCAweDQ2LCAweGZlLCAweGY3LAorMHg2ZCwgMHhmZiwgMHgwMSwgMHgyNywgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwgMHgwOSwgMHg0OCwgMHg4MSwgMHg4OSwKKzB4MDksIDB4MDQsIDB4YzIsIDB4ODksIDB4MTEsIDB4NDMsIDB4MDIsIDB4OTEsIDB4ODEsIDB4ODgsIDB4MDksIDB4MDQsCisweGMwLCAweDg4LCAweDA4LCAweDQzLCAweDAzLCAweDkwLCAweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LAorMHg5YiwgMHhmZSwgMHgzOCwgMHgxYywgMHgwNCwgMHhiMCwgMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NjksIDB4ZmYsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDY0LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg1ZiwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKKzB4ZmUsIDB4ZjcsIDB4NWEsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCisweDU1LCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDUwLCAweGZmLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHg0YiwgMHhmZiwgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4NDYsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDAwLCAweGI1LCAweGZlLCAweGY3LCAweDQxLCAweGZmLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LAorMHhmZSwgMHhmNywgMHgzYywgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywKKzB4MzcsIDB4ZmYsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsIDB4MzIsIDB4ZmYsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDhjLCAweGIwLCAweDA4LCAweGE5LCAweGZlLCAweGY3LAorMHgxMywgMHhmZiwgMHg2OSwgMHg0NiwgMHgwOCwgMHhhOCwgMHgwMiwgMHhmMCwgMHhhOSwgMHhmZiwgMHgwMiwgMHgyMCwKKzB4MDgsIDB4YWIsIDB4NTgsIDB4NzAsIDB4NjksIDB4NDYsIDB4MDgsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4NDgsIDB4ZmUsCisweDAxLCAweDIwLCAweDBjLCAweGIwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LAorMHgxOSwgMHhmZiwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwNywgMHgxYywKKzB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4ZjgsIDB4ZmUsIDB4ZmEsIDB4ODgsIDB4MTIsIDB4NDksCisweDAxLCAweDI0LCAweGM4LCAweDFkLCAweDg5LCAweDMwLCAweDAwLCAweDJhLCAweDBmLCAweGQwLCAweDA0LCAweDcwLAorMHg0NCwgMHg3MCwgMHhiOCwgMHg2OCwgMHgwMCwgMHgwYywgMHg4MCwgMHgzMSwgMHhjOCwgMHg4MiwgMHhiOCwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MDgsIDB4ODMsIDB4ZjgsIDB4NjgsIDB4MDAsIDB4MGMsIDB4NDgsIDB4ODMsIDB4ZjgsIDB4NjgsCisweGMwLCAweDQ2LCAweDg4LCAweDgzLCAweDAyLCAweGUwLCAweDAwLCAweDIxLAorMHgwMSwgMHg3MCwgMHg0MSwgMHg3MCwgMHgwNiwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwKKzB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4MTcsIDB4ZmUsIDB4MjAsIDB4MWMsIDB4MDQsIDB4YjAsIDB4OTAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGZmLCAweGZmLCAweDAwLCAweDAwLAorMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhlMywgMHhmZSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwKKzB4ZmUsIDB4ZjcsIDB4ZGUsIDB4ZmUsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4YjUsIDB4ZmUsIDB4ZjcsCisweGQ5LCAweGZlLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGQ0LCAweGZlLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHhmZSwgMHhmNywgMHhjZiwgMHhmZSwgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4OTAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsCisweGZlLCAweGY3LCAweGFlLCAweGZlLCAweGY4LCAweDg4LCAweDAzLCAweDI0LCAweGU0LCAweDA0LCAweDA0LCAweDQzLAorMHgwMywgMHgyMywgMHhkYiwgMHgwNCwgMHg5YywgMHg0MiwgMHgwMiwgMHhkMywgMHgwZiwgMHg0YiwgMHg5YywgMHg0MiwKKzB4MDYsIDB4ZDksIDB4MGYsIDB4NDgsIDB4MDEsIDB4YWIsIDB4NTgsIDB4ODAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsCisweGZlLCAweGY3LCAweGRjLCAweGZkLCAweDAxLCAweDIwLCAweDgwLCAweDA3LCAweDIwLCAweDQzLCAweDAwLCAweDY4LAorMHgwMCwgMHgyMSwgMHgwMCwgMHhhYiwgMHg1OSwgMHg3MCwgMHhmYSwgMHg4OCwgMHhjMCwgMHg0NiwgMHhkYSwgMHg4MCwKKzB4MDIsIDB4OTAsIDB4MDMsIDB4OTEsIDB4NjgsIDB4NDYsIDB4MDQsIDB4MzMsIDB4ZmUsIDB4ZjcsIDB4Y2MsIDB4ZmQsCisweDAxLCAweDIwLCAweDA0LCAweGIwLCAweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHhlMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHg4NCwgMHhiMCwKKzB4MDcsIDB4MWMsIDB4NjksIDB4NDYsIDB4MzgsIDB4MWMsIDB4ZmUsIDB4ZjcsIDB4N2IsIDB4ZmUsIDB4ZjgsIDB4ODgsCisweDAzLCAweDIzLCAweGRiLCAweDA0LCAweDE4LCAweDQzLCAweDk4LCAweDQyLCAweDAyLCAweGQzLCAweDBhLCAweDRiLAorMHg5OCwgMHg0MiwgMHgwOCwgMHhkOSwgMHgwOSwgMHg0OCwgMHgwMSwgMHhhYiwgMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwKKzB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4YWIsIDB4ZmQsIDB4MDEsIDB4MjAsIDB4MDMsIDB4ZTAsIDB4YjksIDB4NjgsCisweGMwLCAweDQ2LCAweDAxLCAweDYwLCAweDAwLCAweDIwLCAweDA0LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLAorMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwKKzB4ODAsIDB4YjUsIDB4ODYsIDB4YjAsIDB4MDIsIDB4YTksIDB4ZmUsIDB4ZjcsIDB4NTcsIDB4ZmUsIDB4MDEsIDB4MjcsCisweDAyLCAweGFiLCAweDVmLCAweDcwLCAweDAwLCAweDIwLCAweGQ4LCAweDgwLCAweDBhLCAweDQ4LCAweDQxLCAweDY4LAorMHhjMCwgMHg0NiwgMHgwNCwgMHg5MSwgMHg4MSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgwNSwgMHg5MSwgMHhjMSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDAsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDEsIDB4OTAsIDB4NjksIDB4NDYsCisweDAyLCAweGE4LCAweGZlLCAweGY3LCAweDgxLCAweGZkLCAweDM4LCAweDFjLCAweDA2LCAweGIwLCAweDgwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgxOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHhjMSwgMHg2OCwKKzB4ODAsIDB4NjgsIDB4ZmUsIDB4ZjcsIDB4NDcsIDB4ZmIsIDB4MDAsIDB4MjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDkwLCAweGI1LCAweDg0LCAweGIwLCAweDA0LCAweDFjLCAweDBmLCAweDFjLAorMHg2OCwgMHg0NiwgMHg1MCwgMHgyMSwgMHhmZSwgMHhmNywgMHgzNiwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1YywgMHg4MCwKKzB4MDIsIDB4OTcsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4NjEsIDB4ZmQsIDB4MDQsIDB4YjAsCisweDkwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDgwLCAweGI1LCAweDg0LCAweGIwLCAweDA3LCAweDFjLAorMHg2OCwgMHg0NiwgMHg1MSwgMHgyMSwgMHhmZSwgMHhmNywgMHgyNCwgMHhmZSwgMHgwMSwgMHhhYiwgMHg1ZiwgMHg4MCwKKzB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmUsIDB4ZjcsIDB4NTAsIDB4ZmQsIDB4MDQsIDB4YjAsIDB4ODAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDIwLCAweDcwLCAweDQ3LAorMHg5MCwgMHhiNSwgMHg4NCwgMHhiMCwgMHgwMCwgMHgyNywgMHgxMiwgMHg0OSwgMHgwOSwgMHg2OCwgMHgxMiwgMHg0YSwKKzB4MTIsIDB4NmIsIDB4MTAsIDB4MjMsIDB4MWEsIDB4NDAsIDB4MDEsIDB4MjQsIDB4MDAsIDB4MmEsIDB4MDAsIDB4ZDAsCisweDAxLCAweDI3LCAweDhhLCAweDBjLCAweDAzLCAweGQzLCAweDNhLCAweDA0LCAweDEyLCAweDBjLCAweDAyLCAweDI3LAorMHgxNywgMHg0MywgMHhjOSwgMHgwYywgMHgwMywgMHhkMywgMHgzOSwgMHgwNCwgMHgwOSwgMHgwYywgMHgwNCwgMHgyNywKKzB4MGYsIDB4NDMsIDB4NjksIDB4NDYsIDB4ZmUsIDB4ZjcsIDB4ZWMsIDB4ZmQsIDB4MDEsIDB4YWIsIDB4NWYsIDB4ODAsCisweDY4LCAweDQ2LCAweDAwLCAweDIxLCAweGZlLCAweGY3LCAweDI2LCAweGZkLCAweDIwLCAweDFjLCAweDA0LCAweGIwLAorMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwKKzB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4YjUsIDB4ODQsIDB4YjAsCisweDY5LCAweDQ2LCAweGZlLCAweGY3LCAweGQ3LCAweGZkLCAweDA2LCAweDQ4LCAweGMwLCAweDZkLCAweDAxLCAweGFiLAorMHg1OCwgMHg4MCwgMHg2OCwgMHg0NiwgMHgwMCwgMHgyMSwgMHhmZSwgMHhmNywgMHgwZiwgMHhmZCwgMHgwMSwgMHgyMCwKKzB4MDQsIDB4YjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCisweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGRkLCAweGZkLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDcwLCAweDQ3LAorMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHg3MCwgMHg0NywKKzB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4NzAsIDB4NDcsCisweDAwLCAweGI1LCAweGZlLCAweGY3LCAweGNiLCAweGZkLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHg4MCwgMHhiNSwgMHg4NSwgMHhiMCwgMHgwMSwgMHhhOSwgMHhmZSwgMHhmNywgMHhhYiwgMHhmZCwgMHgwMCwgMHgyMCwKKzB4MDEsIDB4YWIsIDB4NTgsIDB4NzAsIDB4MGMsIDB4NDksIDB4YzksIDB4NjgsIDB4MDEsIDB4MjcsIDB4MDEsIDB4MjksCisweDAyLCAweGQxLCAweDAzLCAweDk3LCAweDA0LCAweDk3LCAweDAxLCAweGUwLCAweDAzLCAweDk3LCAweDA0LCAweDkwLAorMHg2OCwgMHg0NiwgMHgwMSwgMHhmMCwgMHgzMywgMHhmZCwgMHgwMiwgMHhhYiwgMHgwMCwgMHg5OCwgMHhjMCwgMHg0NiwKKzB4NTgsIDB4ODAsIDB4MDAsIDB4MjEsIDB4MDEsIDB4YTgsIDB4ZmUsIDB4ZjcsIDB4ZDMsIDB4ZmMsIDB4MzgsIDB4MWMsCisweDA1LCAweGIwLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHg3MCwgMHg0NywgMHgwNCwgMHg0OSwgMHgwMCwgMHgyMCwgMHgwMCwgMHgyMiwgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMCwKKzB4MDEsIDB4MzEsIDB4NjgsIDB4MjgsIDB4ZmEsIDB4ZDMsIDB4NzAsIDB4NDcsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCisweDAwLCAweDIyLCAweDg4LCAweDQyLCAweDAzLCAweGQzLCAweDQwLCAweDFhLCAweDAxLCAweDMyLCAweDg4LCAweDQyLAorMHhmYiwgMHhkMiwgMHgxMCwgMHgxYywgMHg3MCwgMHg0NywgMHg4OCwgMHg0MiwgMHgwMiwgMHhkMywgMHg0MCwgMHgxYSwKKzB4ODgsIDB4NDIsIDB4ZmMsIDB4ZDIsIDB4NzAsIDB4NDcsIDB4OTAsIDB4YjQsIDB4MDEsIDB4MWMsIDB4ZmYsIDB4MjcsCisweDA0LCAweDI5LCAweDI3LCAweGRhLCAweDAwLCAweDIwLCAweDE0LCAweDRhLCAweDQzLCAweDAwLCAweDFiLCAweDE4LAorMHhkYiwgMHgwMCwgMHhkNCwgMHg1OCwgMHg2MywgMHgwYywgMHgxYSwgMHhkMiwgMHg0YiwgMHgwMCwgMHg1OSwgMHgxOCwKKzB4YzksIDB4MDAsIDB4NTcsIDB4NTgsIDB4NDMsIDB4MDAsIDB4MWIsIDB4MTgsIDB4ZGIsIDB4MDAsIDB4ZDcsIDB4NTAsCisweDg5LCAweDE4LCAweDlhLCAweDE4LCAweDRmLCAweDY4LCAweGMwLCAweDQ2LCAweDU3LCAweDYwLCAweDhiLCAweDY4LAorMHhjMCwgMHg0NiwgMHg5MywgMHg2MCwgMHgwYiwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MSwgMHg0YiwgMHg2OSwKKzB4YzAsIDB4NDYsIDB4NTMsIDB4NjEsIDB4YzksIDB4NjgsIDB4YzAsIDB4NDYsIDB4ZDEsIDB4NjAsIDB4OTAsIDB4YmMsCisweDcwLCAweDQ3LCAweDAxLCAweDMwLCAweDAwLCAweDA2LCAweDAwLCAweDBlLCAweDA0LCAweDI4LCAweGQ5LCAweGRiLAorMHgzOCwgMHgxYywgMHhmNiwgMHhlNywgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhmNywgMHhiNSwgMHhjNCwgMHhiMCwKKzB4MDQsIDB4MWMsIDB4MDAsIDB4MjAsIDB4NDYsIDB4OWEsIDB4MTEsIDB4MjEsIDB4MTEsIDB4NDAsIDB4NmUsIDB4ZDAsCisweDAwLCAweDI3LCAweDc5LCAweDAwLCAweGM5LCAweDE5LCAweGM5LCAweDAwLCAweDU3LCAweDRhLCAweDUxLCAweDU4LAorMHg0OSwgMHgwYywgMHgwMywgMHhkMiwgMHgwMSwgMHgzMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwNCwgMHhlMCwKKzB4NzksIDB4MWMsIDB4MGYsIDB4MDYsIDB4M2YsIDB4MGUsIDB4MDQsIDB4MmYsIDB4ZWYsIDB4ZGIsIDB4MDAsIDB4MjgsCisweDViLCAweGQwLCAweDAwLCAweDI2LCAweDAwLCAweDIyLCAweDAwLCAweDkyLCAweDQwLCAweDIzLCAweDAwLCAweDIxLAorMHgwMCwgMHgyMCwgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg4OCwgMHhmYSwgMHgwNCwgMHhhOSwgMHgwMCwgMHgyMCwKKzB4ODIsIDB4MDAsIDB4OGEsIDB4NTgsIDB4MTIsIDB4MDYsIDB4MTIsIDB4MGUsIDB4YTIsIDB4NDIsIDB4MDMsIDB4ZDEsCisweDcyLCAweDFjLCAweDE2LCAweDA2LCAweDM2LCAweDBlLCAweDA0LCAweGUwLCAweDAxLCAweDMwLCAweDAwLCAweDA2LAorMHgwMCwgMHgwZSwgMHgxMCwgMHgyOCwgMHhmMCwgMHhkYiwgMHgwMCwgMHgyZSwgMHgzZCwgMHhkMCwgMHgwNCwgMHgyYywKKzB4M2UsIDB4ZDEsIDB4ODAsIDB4MDAsIDB4MDgsIDB4NTgsIDB4NDAsIDB4MDEsIDB4ODAsIDB4MGQsIDB4MDAsIDB4MjIsCisweDAwLCAweDkyLCAweDEwLCAweDIzLCAweDAwLCAweDIxLCAweDAyLCAweGFhLCAweDAwLCAweGYwLCAweDY4LCAweGZhLAorMHgwMCwgMHgyMSwgMHgwMSwgMHg5MSwgMHgwMiwgMHhhOCwgMHgwNSwgMHg5OSwgMHg0OSwgMHgwYywgMHg4OSwgMHgwNSwKKzB4MjksIDB4ZDAsIDB4YzEsIDB4NjgsIDB4MGEsIDB4MDYsIDB4MTIsIDB4MGUsIDB4NDUsIDB4OWIsIDB4OWEsIDB4NDIsCisweDExLCAweGQxLCAweGMwLCAweDY4LCAweDQwLCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLCAweDAwLCAweDkyLAorMHgwYywgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwgMHg1MCwgMHhmYSwKKzB4MDEsIDB4OTksIDB4MDIsIDB4OWQsIDB4NDgsIDB4MWMsIDB4MDEsIDB4MDYsCisweDA5LCAweDBlLCAweDAxLCAweDkxLCAweDBlLCAweGUwLCAweDQ4LCAweDAxLCAweDg2LCAweDBkLCAweDAwLCAweDIyLAorMHgwMCwgMHg5MiwgMHgxMCwgMHgyMywgMHgwMCwgMHgyMSwgMHgzMCwgMHgxYywgMHgwMiwgMHhhYSwgMHgwMCwgMHhmMCwKKzB4M2YsIDB4ZmEsIDB4MDIsIDB4YTgsIDB4MDUsIDB4OTksIDB4NDksIDB4MGMsIDB4ODksIDB4MDUsIDB4ZDgsIDB4ZDEsCisweDAxLCAweDk5LCAweDAwLCAweDI5LCAweDBmLCAweGQxLCAweGZmLCAweDIwLCAweDNkLCAweGUwLCAweDQwLCAweGUwLAorMHg4MCwgMHgwMCwgMHgwOCwgMHg1OCwgMHg0MCwgMHgwMSwgMHg4NiwgMHgwZCwgMHgwMCwgMHgyMiwgMHgwMCwgMHg5MiwKKzB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4MzAsIDB4MWMsIDB4MDIsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4MjgsIDB4ZmEsCisweDAyLCAweDlkLCAweDAxLCAweDIwLCAweDAwLCAweDA0LCAweDQ2LCAweDlhLCAweDEwLCAweDQzLCAweDc5LCAweDAwLAorMHhjOSwgMHgxOSwgMHhjOSwgMHgwMCwgMHgxNywgMHg0YSwgMHhjMCwgMHg0NiwgMHg1MCwgMHg1MCwgMHgzMCwgMHgxYywKKzB4OGUsIDB4MTgsIDB4NzAsIDB4NjAsIDB4MTAsIDB4MjAsIDB4MDQsIDB4MmMsIDB4MDAsIDB4ZDAsIDB4MGMsIDB4MjAsCisweDA0LCAweDFjLCAweGIwLCAweDYwLCAweDAwLCAweDIwLCAweDIwLCAweDIxLCAweDQ2LCAweDlhLCAweDExLCAweDQwLAorMHgyMCwgMHgyOSwgMHgwMCwgMHhkMCwgMHgyOCwgMHgxYywgMHgzMCwgMHg2MSwgMHgyOCwgMHgxOSwgMHhmZiwgMHgyMSwKKzB4ZmYsIDB4MzAsIDB4MDgsIDB4MzAsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4MTksIDB4ZmYsIDB4NDMsIDB4MDEsCisweDE4LCAweDE4LCAweGMwLCAweDAwLCAweDAwLCAweDFiLCAweDcwLCAweDYxLCAweDAwLCAweDIwLCAweDUwLCAweDIxLAorMHg0NiwgMHg5YSwgMHgxMSwgMHg0MCwgMHg1MCwgMHgyOSwgMHgwMCwgMHhkMSwgMHgyOCwgMHgxYywgMHhmMCwgMHg2MCwKKzB4MzgsIDB4MWMsIDB4NDcsIDB4YjAsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZmYsIDB4MjAsCisweGY5LCAweGU3LCAweDAwLCAweDAwLCAweDQwLCAweGFiLCAweDIwLCAweDQwLCAweDgwLCAweGI0LCAweDAwLCAweDIzLAorMHgwMCwgMHgyMiwgMHgwMCwgMHgyOSwgMHgwNiwgMHhkOSwgMHg4NywgMHg1YywgMHg3YiwgMHg0MCwgMHgxYiwgMHgwNiwKKzB4MWIsIDB4MGUsIDB4MDEsIDB4MzIsIDB4OGEsIDB4NDIsIDB4ZjgsIDB4ZDMsIDB4ZDgsIDB4NDMsIDB4MDAsIDB4MDYsCisweDAwLCAweDBlLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweGYwLCAweGI1LCAweGM2LCAweGIwLCAweDA0LCAweDI4LAorMHgwNywgMHhkYSwgMHg0MSwgMHgwMCwgMHgwOSwgMHgxOCwgMHhjOSwgMHgwMCwgMHg0NSwgMHg5MSwgMHg0MSwgMHg0YSwKKzB4NTEsIDB4NTgsIDB4NGIsIDB4MGMsIDB4MDIsIDB4ZDIsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4NzYsIDB4ZTAsCisweDAxLCAweDIzLCAweDViLCAweDA0LCAweDE5LCAweDQwLCAweDQzLCAweDAwLCAweDE4LCAweDE4LCAweGMwLCAweDAwLAorMHgzYSwgMHg0YSwgMHgxNCwgMHgxOCwgMHgwMCwgMHgyOSwgMHg2MSwgMHhkMCwgMHgwMCwgMHgyMSwgMHgwMiwgMHg5MSwKKzB4MjAsIDB4NjksIDB4YTEsIDB4NjgsIDB4NDUsIDB4MTgsIDB4MzAsIDB4ZDAsIDB4ZmYsIDB4MjEsIDB4NjgsIDB4MWUsCisweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGNkLCAweGZlLCAweDYxLCAweDY4LCAweDQwLCAweDE4LCAweDAxLCAweDkwLAorMHgwMSwgMHg5OCwgMHg4MSwgMHg0MiwgMHgwMiwgMHhkMSwgMHhhNiwgMHg2OCwgMHhhZiwgMHgxYiwgMHgwOSwgMHhlMCwKKzB4MDAsIDB4MjYsIDB4ZmYsIDB4MjEsIDB4MjgsIDB4MWMsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4YzcsIDB4ZmUsCisweDA3LCAweDFjLCAweDAxLCAweGQxLCAweGZmLCAweDI3LCAweDA5LCAweDM3LCAweDAwLCAweDIyLCAweDAwLCAweDkyLAorMHgwMSwgMHg5OCwgMHgzMSwgMHgxYywgMHgwMywgMHhhYSwgMHgzYiwgMHgxYywgMHgwMCwgMHhmMCwgMHg5ZSwgMHhmOSwKKzB4MDMsIDB4YTgsIDB4MzksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YWMsIDB4ZmYsIDB4YzAsIDB4NDMsIDB4MDIsIDB4OTksCisweDQ4LCAweDQwLCAweDAxLCAweDA2LCAweDA5LCAweDBlLCAweDAyLCAweDkxLCAweGVkLCAweDFiLCAweGEwLCAweDY4LAorMHhhOCwgMHg0MiwgMHgwMCwgMHhkMSwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyZCwgMHhjZSwgMHhkOCwgMHgwMiwgMHg5OSwKKzB4Y2YsIDB4NDMsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4NjAsIDB4NjgsCisweDAzLCAweGFhLCAweDAwLCAweGYwLCAweDgzLCAweGY5LCAweDIwLCAweDY5LCAweGMwLCAweDQ2LCAweDAzLCAweDkwLAorMHgwNSwgMHg5OCwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgzOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgwOCwgMHg0MywKKzB4MDUsIDB4OTAsIDB4ZmYsIDB4MjMsIDB4MWIsIDB4MDIsIDB4OTgsIDB4NDMsIDB4MDUsIDB4OTAsIDB4MGMsIDB4MjEsCisweDAzLCAweGE4LCAweGZmLCAweGY3LCAweDgzLCAweGZmLCAweGZmLCAweDIzLCAweDFiLCAweDAyLCAweDA1LCAweDk5LAorMHg5OSwgMHg0MywgMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHgwMCwgMHgwMiwgMHgwOCwgMHg0MywgMHgwNSwgMHg5MCwKKzB4MGMsIDB4MjMsIDB4MDAsIDB4MjEsIDB4NjAsIDB4NjgsIDB4MDMsIDB4YWEsIDB4MDAsIDB4ZjAsIDB4Y2EsIDB4ZjksCisweDAwLCAweDIwLCAweDQ1LCAweDk5LCAweDA2LCAweDRhLCAweGMwLCAweDQ2LCAweDUwLCAweDUwLCAweGMxLCAweDQzLAorMHg2MSwgMHg2MCwgMHhhMSwgMHg2MCwgMHhlMSwgMHg2MCwgMHgyMSwgMHg2MSwgMHg2MSwgMHg2MSwgMHg0NiwgMHhiMCwKKzB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsCisweGIwLCAweGI0LCAweDRjLCAweDQyLCAweDAwLCAweDI5LCAweDAwLCAweGRiLAorMHgwYywgMHgxYywgMHgwMCwgMHgyNywgMHhmZiwgMHg0MywgMHgwNCwgMHgyOCwgMHgyMSwgMHhkYSwgMHgxMiwgMHg0ZCwKKzB4NDMsIDB4MDAsIDB4MTgsIDB4MTgsIDB4YzAsIDB4MDAsIDB4NDAsIDB4MTksIDB4MDEsIDB4MmEsIDB4MDUsIDB4ZDAsCisweDAyLCAweDJhLCAweDA5LCAweGQwLCAweDAzLCAweDJhLCAweDE2LCAweGQxLCAweDAxLCAweDY5LCAweDBiLCAweGUwLAorMHgwMCwgMHgyOSwgMHgxMiwgMHhkYiwgMHgwMiwgMHg2OSwgMHg4YSwgMHg0MiwgMHgwZiwgMHhkMywgMHgwNSwgMHhlMCwKKzB4MDAsIDB4MjksIDB4MDcsIDB4ZGEsIDB4YzEsIDB4NjgsIDB4YTEsIDB4NDIsIDB4MDksIDB4ZDMsIDB4MDksIDB4MWIsCisweGMxLCAweDYwLCAweGMwLCAweDY4LCAweGIwLCAweGJjLCAweDcwLCAweDQ3LCAweGMxLCAweDY4LCAweDA5LCAweDE5LAorMHgwMiwgMHg2OSwgMHg5MSwgMHg0MiwgMHhmNiwgMHhkOSwgMHgzOCwgMHgxYywgMHhmNiwgMHhlNywgMHgwMCwgMHgwMCwKKzB4NDAsIDB4YWIsIDB4MjAsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4ODQsIDB4YjAsIDB4MTcsIDB4MWMsIDB4MGQsIDB4MWMsCisweDAwLCAweDIxLCAweDAyLCAweDkxLCAweDQyLCAweDAwLCAweDEyLCAweDE4LCAweGQyLCAweDAwLCAweDJjLCAweDQ5LAorMHg4YiwgMHg1OCwgMHgxYiwgMHgwNiwgMHgxYiwgMHgwZSwgMHgwMSwgMHg5MywgMHgwMCwgMHgyMywgMHhkYiwgMHg0MywKKzB4MDQsIDB4MjgsIDB4MDIsIDB4ZGEsIDB4MDEsIDB4OTgsIDB4NDAsIDB4MDgsIDB4MDEsIDB4ZDIsIDB4MTgsIDB4MWMsCisweDQ2LCAweGUwLCAweDU0LCAweDE4LCAweGUwLCAweDY4LCAweGMyLCAweDE5LCAweDIxLCAweDY5LCAweDhhLCAweDQyLAorMHgwMCwgMHhkOSwgMHgwZiwgMHgxYSwgMHgwMCwgMHgyZiwgMHgzYywgMHhkOSwgMHhhMCwgMHg2OCwgMHhlMSwgMHg2OCwKKzB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsIDB4MDksIDB4MzEsIDB4ZmYsIDB4ZjcsIDB4MGQsIDB4ZmUsIDB4NjEsIDB4NjgsCisweDQ2LCAweDE4LCAweGEwLCAweDY4LCAweGUxLCAweDY4LCAweDQwLCAweDE4LCAweGZmLCAweDIxLCAweDA5LCAweDMxLAorMHhmZiwgMHhmNywgMHgwZCwgMHhmZSwgMHhjMiwgMHgxOSwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHg4YSwgMHg0MiwKKzB4MTQsIDB4ZDksIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTIsIDB4MGIsIDB4MWEsIDB4MDMsIDB4OTMsCisweDAxLCAweDFjLCAweDMwLCAweDFjLCAweDJhLCAweDFjLCAweDAwLCAweGYwLCAweGUxLCAweGY4LCAweGUwLCAweDY4LAorMHgwMywgMHg5YiwgMHhjMCwgMHgxOCwgMHhlMCwgMHg2MCwgMHgwMywgMHg5YiwgMHg1ZCwgMHgxOSwgMHhmZiwgMHgxYSwKKzB4MDIsIDB4OTgsIDB4MTgsIDB4MTgsIDB4MDIsIDB4OTAsIDB4MTAsIDB4ZTAsIDB4MDEsIDB4OWEsIDB4YzAsIDB4NDYsCisweDAwLCAweDkyLCAweDAxLCAweDFjLCAweDMwLCAweDFjLCAweDJhLCAweDFjLCAweDNiLCAweDFjLCAweDAwLCAweGYwLAorMHhjZCwgMHhmOCwgMHhlMCwgMHg2OCwgMHhjMCwgMHgxOSwgMHhlZCwgMHgxOSwgMHhlMCwgMHg2MCwgMHgwMiwgMHg5OCwKKzB4YzAsIDB4MTksIDB4MDIsIDB4OTAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmYsIDB4YzIsIDB4ZDgsIDB4MDIsIDB4OTgsCisweDA0LCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDQwLCAweGFiLCAweDIwLCAweDQwLAorMHhmMCwgMHhiNSwgMHg4MywgMHhiMCwgMHgxNywgMHgxYywgMHgwZCwgMHgxYywgMHgwMCwgMHgyMSwgMHgwMSwgMHg5MSwKKzB4NDIsIDB4MDAsIDB4MTIsIDB4MTgsIDB4ZDIsIDB4MDAsIDB4MDIsIDB4OTIsIDB4MzAsIDB4NDksIDB4OGEsIDB4NTgsCisweDEyLCAweDA2LCAweDEyLCAweDBlLCAweDAwLCAweDI0LCAweGU0LCAweDQzLCAweDA0LCAweDI4LCAweDAxLCAweGRhLAorMHg1MCwgMHgwOSwgMHgwMSwgMHhkMiwgMHgyMCwgMHgxYywgMHg1MSwgMHhlMCwgMHgwMiwgMHg5YSwgMHg1NCwgMHgxOCwKKzB4ZTAsIDB4NjgsIDB4YzIsIDB4MTksIDB4NjAsIDB4NjksIDB4ODIsIDB4NDIsIDB4MDEsIDB4ZDksIDB4MjIsIDB4NjksCisweDg3LCAweDFhLCAweDAwLCAweDJmLCAweDQ1LCAweGQ5LCAweDI1LCAweDRlLCAweGEwLCAweDY4LCAweGUxLCAweDY4LAorMHg0MCwgMHgxOCwgMHhmZiwgMHgyMSwgMHgwOSwgMHgzMSwgMHhmZiwgMHhmNywgMHhhNywgMHhmZCwgMHg2MSwgMHg2OCwKKzB4NDAsIDB4MTgsIDB4MDAsIDB4OTAsIDB4YTAsIDB4NjgsIDB4ZTEsIDB4NjgsIDB4NDAsIDB4MTgsIDB4ZmYsIDB4MjEsCisweDA5LCAweDMxLCAweGZmLCAweGY3LCAweGE2LCAweGZkLCAweDAyLCAweDlhLCAweGIxLCAweDU4LCAweDAxLCAweDIzLAorMHg1YiwgMHgwNCwgMHgxOSwgMHg0MywgMHhiMSwgMHg1MCwgMHhjMSwgMHgxOSwgMHhmZiwgMHgyMiwgMHgwOSwgMHgzMiwKKzB4OTEsIDB4NDIsIDB4MTMsIDB4ZDksIDB4MTMsIDB4MWEsIDB4MDEsIDB4MWMsIDB4MDAsIDB4OTgsIDB4MmEsIDB4MWMsCisweDFlLCAweDFjLCAweDAwLCAweGYwLCAweGRmLCAweGY4LCAweGUwLCAweDY4LCAweDgwLCAweDE5LCAweDc1LCAweDE5LAorMHhlMCwgMHg2MCwgMHgyMSwgMHg2OSwgMHg4OCwgMHg0MiwgMHgwMCwgMHhkOSwgMHgyMCwgMHg2MSwgMHhiZiwgMHgxYiwKKzB4MDEsIDB4OTgsIDB4MzAsIDB4MTgsIDB4MDEsIDB4OTAsIDB4MTIsIDB4ZTAsIDB4MDEsIDB4MWMsIDB4MDAsIDB4OWUsCisweDMwLCAweDFjLCAweDJhLCAweDFjLCAweDNiLCAweDFjLCAweDAwLCAweGYwLCAweGNiLCAweGY4LCAweGUwLCAweDY4LAorMHhjMCwgMHgxOSwgMHhlZCwgMHgxOSwgMHhlMCwgMHg2MCwgMHgyMSwgMHg2OSwgMHg4OCwgMHg0MiwgMHgwMCwgMHhkOSwKKzB4MjAsIDB4NjEsIDB4MDEsIDB4OTgsIDB4YzAsIDB4MTksIDB4MDEsIDB4OTAsIDB4MDAsIDB4MjcsIDB4MDAsIDB4MmYsCisweGI5LCAweGQ4LCAweDAxLCAweDk4LCAweDAzLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHhiMCwgMHhiNSwgMHhjMywgMHhiMCwKKzB4MGMsIDB4MWMsIDB4MDAsIDB4MjcsIDB4ZmEsIDB4NDMsIDB4MDQsIDB4MjgsIDB4MDYsIDB4ZGEsIDB4NDEsIDB4MDAsCisweDA5LCAweDE4LCAweGM5LCAweDAwLCAweDE0LCAweDQ4LCAweDQ1LCAweDU4LCAweDZiLCAweDBjLCAweDA0LCAweGQyLAorMHgxMCwgMHgxYywgMHg0MywgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2MiwgMHgwOSwKKzB4MWIsIDB4ZDMsIDB4MDAsIDB4MjIsIDB4MDAsIDB4OTIsIDB4MDgsIDB4MTgsIDB4NDAsIDB4NjgsIDB4MGMsIDB4MjMsCisweDAwLCAweDIxLCAweDAxLCAweGFhLCAweDAwLCAweGYwLCAweDMwLCAweGY4LCAweDExLCAweDJjLCAweDBkLCAweGQwLAorMHgxMiwgMHgyYywgMHgwZCwgMHhkMCwgMHgxMywgMHgyYywgMHgwNSwgMHhkMCwgMHgxNCwgMHgyYywgMHgwYSwgMHhkMSwKKzB4MDMsIDB4OTgsIDB4MDAsIDB4MDQsIDB4MDcsIDB4MGUsIDB4MDYsIDB4ZTAsIDB4MDMsIDB4OTgsIDB4MDcsIDB4MDYsCisweDNmLCAweDBlLCAweDAyLCAweGUwLCAweDAxLCAweDlmLCAweDAwLCAweGUwLCAweDAyLCAweDlmLCAweDM4LCAweDFjLAorMHhkYiwgMHhlNywgMHgwMCwgMHgwMCwgMHg0MCwgMHhhYiwgMHgyMCwgMHg0MCwgMHgwMywgMHg0OSwgMHgwMCwgMHgyMCwKKzB4MDAsIDB4MjIsIDB4MGEsIDB4NTQsIDB4MDEsIDB4MzAsIDB4NjAsIDB4MjgsIDB4ZmIsIDB4ZDMsIDB4NzAsIDB4NDcsCisweDQwLCAweGFiLCAweDIwLCAweDQwLCAweDAwLCAweGI1LCAweDAyLCAweGYwLCAweDZmLCAweGZhLCAweDU3LCAweDIwLAorMHgwMiwgMHhmMCwgMHhjYywgMHhmOSwgMHgwMiwgMHhmMCwgMHg0MCwgMHhmOSwgMHgwMCwgMHgwYSwgMHhmYiwgMHhkMywKKzB4MDIsIDB4ZjAsIDB4NGUsIDB4ZmEsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsCisweDA3LCAweDlkLCAweDE0LCAweDFjLCAweDFmLCAweDFjLCAweDMwLCAweDRhLCAweGQyLCAweDZmLCAweDIwLCAweDIzLAorMHgxNiwgMHg2OCwgMHg5ZSwgMHg0MywgMHgxNiwgMHg2MCwgMHgzMywgMHgxYywgMHhmZiwgMHgyMiwgMHgwMSwgMHgzMiwKKzB4MmEsIDB4NDAsIDB4NDAsIDB4MDIsIDB4MDgsIDB4NDMsIDB4MDUsIDB4MGEsIDB4MDYsIDB4MWMsIDB4MDAsIDB4MGMsCisweDAxLCAweDkwLCAweDAwLCAweDJhLCAweDIwLCAweGQwLCAweDAyLCAweGYwLCAweDRiLCAweGZhLCAweDUzLCAweDIwLAorMHgwMiwgMHhmMCwgMHhhOCwgMHhmOSwgMHgwMSwgMHg5OCwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwgMHgwMiwgMHhmMCwKKzB4YTMsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4YTAsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MDIsIDB4ZjAsCisweDlkLCAweGY5LCAweDAyLCAweGYwLCAweDIzLCAweGZhLCAweGZmLCAweGY3LCAweGM3LCAweGZmLCAweDAyLCAweGYwLAorMHgzNywgMHhmYSwgMHg1NCwgMHgyMCwgMHgwMiwgMHhmMCwgMHg5NCwgMHhmOSwgMHgwMCwgMHg5OCwgMHgwMiwgMHhmMCwKKzB4OTEsIDB4ZjksIDB4MjgsIDB4MWMsIDB4MDIsIDB4ZjAsIDB4OGUsIDB4ZjksIDB4MzAsIDB4MWMsIDB4MTQsIDB4ZTAsCisweDAyLCAweGYwLCAweDJhLCAweGZhLCAweDUyLCAweDIwLCAweDAyLCAweGYwLCAweDg3LCAweGY5LCAweDAxLCAweDk4LAorMHgwMiwgMHhmMCwgMHg4NCwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwgMHg4MSwgMHhmOSwgMHgzMCwgMHgxYywKKzB4MDIsIDB4ZjAsIDB4N2UsIDB4ZjksIDB4MDAsIDB4MjAsIDB4MDIsIDB4ZjAsIDB4N2IsIDB4ZjksIDB4MDAsIDB4MjAsCisweDAyLCAweGYwLCAweDc4LCAweGY5LCAweDAwLCAweDIwLCAweDAyLCAweGYwLCAweDc1LCAweGY5LCAweDAwLCAweDIwLAorMHgwMiwgMHhmMCwgMHg3MiwgMHhmOSwgMHgwMCwgMHgyZiwgMHgwNSwgMHhkOSwgMHgwMiwgMHhmMCwgMHhlNCwgMHhmOCwKKzB4MjAsIDB4NzAsIDB4MDEsIDB4MzQsIDB4MDEsIDB4M2YsIDB4ZjksIDB4ZDEsIDB4MDIsIDB4ZjAsIDB4ZjAsIDB4ZjksCisweDA0LCAweDRhLCAweGQwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLAorMHgwMiwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKKzB4ZjAsIDB4YjUsIDB4ODIsIDB4YjAsIDB4MTQsIDB4MWMsIDB4MWYsIDB4MWMsIDB4NDIsIDB4MDIsIDB4MGEsIDB4NDMsCisweDE1LCAweDFjLCAweDAxLCAweDI4LCAweDU0LCAweGQwLCAweDJjLCAweDQ5LCAweGM4LCAweDZmLCAweDIwLCAweDIzLAorMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwgMHhjOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMSwgMHg2OCwKKzB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDIsIDB4ZjAsIDB4ZTYsIDB4ZjksIDB4NTMsIDB4MjAsIDB4MDIsIDB4ZjAsCisweDQzLCAweGY5LCAweDI4LCAweDBjLCAweDA2LCAweDFjLCAweDAyLCAweGYwLCAweDNmLCAweGY5LCAweDI4LCAweDBhLAorMHgwMSwgMHg5MCwgMHgwMCwgMHg5MCwgMHgwMiwgMHhmMCwgMHgzYSwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwKKzB4MzcsIDB4ZjksIDB4MDIsIDB4ZjAsIDB4YmQsIDB4ZjksIDB4ZmYsIDB4ZjcsIDB4NjEsIDB4ZmYsIDB4MDIsIDB4ZjAsCisweGQxLCAweGY5LCAweDg0LCAweDIwLCAweDAyLCAweGYwLCAweDJlLCAweGY5LCAweDMwLCAweDFjLCAweDAyLCAweGYwLAorMHgyYiwgMHhmOSwgMHgwMCwgMHg5OCwgMHgwMiwgMHhmMCwgMHgyOCwgMHhmOSwgMHgyOCwgMHgxYywgMHgwMiwgMHhmMCwKKzB4MjUsIDB4ZjksIDB4MDAsIDB4MmYsIDB4MDUsIDB4ZDksIDB4MjAsIDB4NzgsIDB4MDEsIDB4MzQsIDB4MDIsIDB4ZjAsCisweDFmLCAweGY5LCAweDAxLCAweDNmLCAweGY5LCAweGQxLCAweDAyLCAweGYwLCAweGEzLCAweGY5LCAweDAyLCAweGYwLAorMHhiOSwgMHhmOSwgMHg4MywgMHgyMCwgMHgwMiwgMHhmMCwgMHgxNiwgMHhmOSwgMHgzMCwgMHgxYywgMHgwMiwgMHhmMCwKKzB4MTMsIDB4ZjksIDB4MDEsIDB4OTgsIDB4MDIsIDB4ZjAsIDB4MTAsIDB4ZjksCisweDI4LCAweDFjLCAweDAyLCAweGYwLCAweDBkLCAweGY5LCAweDAyLCAweGYwLCAweDkzLCAweGY5LCAweGZmLCAweGY3LAorMHgzNywgMHhmZiwgMHgwNywgMHg0OSwgMHhjOCwgMHg2ZiwgMHg0MCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywKKzB4MDIsIDB4NjAsIDB4YzgsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsCisweDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg4MCwgMHhiNSwgMHgwMSwgMHhmMCwgMHg4ZiwgMHhmOCwgMHgwNiwgMHg0ZiwKKzB4YzAsIDB4NDYsIDB4ZjgsIDB4NjAsIDB4MDEsIDB4ZjAsIDB4ZjIsIDB4ZjgsIDB4NzgsIDB4ODAsIDB4MDEsIDB4ZjAsCisweGIxLCAweGY4LCAweDM4LCAweDcxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgwMSwgMHhmMCwgMHgwNSwgMHhmOSwgMHgwMiwgMHg0OSwKKzB4YzAsIDB4NDYsIDB4MDgsIDB4ODAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDBiLCAweDQ4LCAweGMxLCAweDY4LCAweDAxLCAweDI5LCAweDExLCAweGQxLCAweGMxLCAweDZmLCAweDAyLCAweDIzLAorMHgwYSwgMHg2OCwgMHgxYSwgMHg0MywgMHgwYSwgMHg2MCwgMHhjMSwgMHg2ZiwgMHg4MCwgMHgyMywgMHgwYSwgMHg2OCwKKzB4MWEsIDB4NDMsIDB4MGEsIDB4NjAsIDB4YzEsIDB4MTgsIDB4MDgsIDB4NjgsIDB4ODIsIDB4MjMsIDB4MDIsIDB4NjgsCisweDFhLCAweDQzLCAweDAyLCAweDYwLCAweDAwLCAweDIwLCAweDA4LCAweDgxLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHg0YSwgMHg0OSwgMHhjYSwgMHgxZCwgMHg5ZCwgMHgzMiwKKzB4MDAsIDB4MjAsIDB4MDAsIDB4MjcsIDB4ODMsIDB4MDAsIDB4ZDcsIDB4NTAsIDB4MDEsIDB4MzAsIDB4MTcsIDB4MjgsCisweGZhLCAweGQzLCAweDQ2LCAweDRjLCAweDAwLCAweDIwLCAweDgyLCAweDAwLCAweGE3LCAweDUwLCAweDAxLCAweDMwLAorMHgyMCwgMHgyOCwgMHhmYSwgMHhkMywgMHg0MywgMHg0YSwgMHgwMCwgMHgyMCwgMHg4MywgMHgwMCwgMHhkNywgMHg1MCwKKzB4MDEsIDB4MzAsIDB4MjAsIDB4MjgsIDB4ZmEsIDB4ZDMsIDB4YTcsIDB4NjEsIDB4OTcsIDB4NjEsIDB4NGYsIDB4NjUsCisweDhmLCAweDY1LCAweDNmLCAweDRkLCAweGMwLCAweDQ2LCAweDJmLCAweDYwLCAweDZmLCAweDYwLCAweGFmLCAweDYwLAorMHhhZiwgMHg2MSwgMHhlZiwgMHg2MCwgMHgyZiwgMHg2MSwgMHg2ZiwgMHg2MSwgMHgwMCwgMHgyMCwgMHhjMSwgMHgwMCwKKzB4MDksIDB4MTgsIDB4NDksIDB4MDEsIDB4MzUsIDB4NGIsIDB4YzksIDB4MTgsIDB4ODYsIDB4MDAsIDB4Y2IsIDB4MWQsCisweGY5LCAweDMzLCAweDM0LCAweDRjLCAweDM0LCAweDE5LCAweGUzLCAweDYzLCAweDExLCAweDIzLCAweDViLCAweDAxLAorMHhjYiwgMHgxOCwgMHg2MywgMHg2MywgMHgwZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhjYiwgMHgxOCwgMHhiNCwgMHgxOCwKKzB4ZTMsIDB4NjMsIDB4MjMsIDB4MjMsIDB4NWIsIDB4MDEsIDB4YzksIDB4MTgsIDB4NjEsIDB4NjMsIDB4MDEsIDB4MzAsCisweDAyLCAweDI4LCAweGU0LCAweGRiLCAweDI5LCAweDQ4LCAweGMxLCAweDFkLCAweGY5LCAweDMxLCAweDI5LCAweDRjLAorMHhjMCwgMHg0NiwgMHhhMSwgMHg2MiwgMHg2MSwgMHg2YiwgMHgwZCwgMHgyMywgMHg5YiwgMHgwMSwgMHhlMSwgMHg2MiwKKzB4YzEsIDB4MTgsIDB4OTEsIDB4NjIsIDB4NTEsIDB4NmIsIDB4YzAsIDB4NDYsIDB4ZDEsIDB4NjIsIDB4MDgsIDB4MjEsCisweGUxLCAweDY0LCAweDI1LCAweDQ5LCAweGMwLCAweDQ2LCAweDIxLCAweDY1LCAweDI0LCAweDQ5LCAweDBiLCAweDY5LAorMHhjMCwgMHg0NiwgMHg2MywgMHg2NSwgMHhjMywgMHgxZCwgMHg0ZCwgMHgzMywgMHhlMywgMHg2NSwgMHgyNSwgMHg2NiwKKzB4OGIsIDB4NjgsIDB4YzAsIDB4NDYsIDB4NjMsIDB4NjYsIDB4Y2IsIDB4NjgsIDB4YzAsIDB4NDYsIDB4YTMsIDB4NjYsCisweDFlLCAweDRiLCAweGMwLCAweDQ2LCAweGUzLCAweDY2LCAweDI3LCAweDY3LCAweDBiLCAweDIzLCAweGRiLCAweDAxLAorMHhjMywgMHgxOCwgMHhhMywgMHg2NywgMHg2NywgMHg2NywgMHgwMSwgMHgyNiwgMHhlMywgMHgxZCwgMHg2OSwgMHgzMywKKzB4NjYsIDB4NjEsIDB4ZTcsIDB4NjEsIDB4MWYsIDB4NzMsIDB4MDIsIDB4MjMsIDB4ZDMsIDB4NjQsIDB4MTcsIDB4NGIsCisweGMwLCAweDQ2LCAweDEzLCAweDY1LCAweGNiLCAweDY5LCAweGMwLCAweDQ2LCAweDUzLCAweDY1LCAweGMzLCAweDFkLAorMHg1MSwgMHgzMywgMHhkMywgMHg2NSwgMHgyYiwgMHgxZCwgMHgxMywgMHg2NiwgMHg0YiwgMHg2OSwgMHhjMCwgMHg0NiwKKzB4NTMsIDB4NjYsIDB4ODksIDB4NjksIDB4YzAsIDB4NDYsIDB4OTEsIDB4NjYsIDB4MGYsIDB4NDksIDB4YzAsIDB4NDYsCisweGQxLCAweDY2LCAweDE2LCAweDY3LCAweDBmLCAweDIzLCAweGRiLCAweDAxLCAweGMwLCAweDE4LCAweDkwLCAweDY3LAorMHg1NiwgMHg2NywgMHhkNywgMHg2MSwgMHhkMCwgMHgxZCwgMHg2OSwgMHgzMCwgMHg1NiwgMHg2MSwgMHgwNywgMHg3MywKKzB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTQsIDB4MmMsIDB4MDAsIDB4ODAsCisweDY0LCAweDJkLCAweDAwLCAweDgwLCAweDkwLCAweGVlLCAweDIwLCAweDQwLCAweDMwLCAweDAxLCAweDE4LCAweDAwLAorMHg3YywgMHgyOSwgMHgwMCwgMHg4MCwgMHgwMCwgMHg1NSwgMHhmZiwgMHhmZiwgMHgzOCwgMHgwMSwgMHgxOCwgMHgwMCwKKzB4MTAsIDB4NTUsIDB4ZmYsIDB4ZmYsIDB4OTAsIDB4YjQsIDB4MDAsIDB4MjEsIDB4MWUsIDB4NGEsIDB4YmIsIDB4MjMsCisweDFiLCAweDAxLCAweGQ3LCAweDE4LCAweGY5LCAweDczLCAweDE5LCAweDIzLAorMHhkYiwgMHgwMSwgMHhkMCwgMHgxOCwgMHgwMSwgMHgyNCwgMHhjZCwgMHgyMywgMHgxYiwgMHgwMSwgMHhkMywgMHgxOCwKKzB4YzEsIDB4NjEsIDB4MWMsIDB4NzAsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4ZDMsIDB4MTgsIDB4OTksIDB4NjAsCisweGI5LCAweDczLCAweDU5LCAweDYxLCAweDJmLCAweDIzLCAweDliLCAweDAxLCAweGQzLCAweDE4LCAweDE5LCAweDYwLAorMHgxMywgMHg0YiwgMHg1MSwgMHgyNywgMHhiZiwgMHgwMywgMHgwMywgMHg2MywgMHgzYiwgMHg2MCwgMHg4NCwgMHg2OSwKKzB4ZTQsIDB4MTgsIDB4NDQsIDB4NjMsIDB4MDQsIDB4M2MsIDB4N2MsIDB4NjAsIDB4MDEsIDB4MjQsIDB4ZTQsIDB4MDIsCisweDg0LCAweDYzLCAweDBlLCAweDRjLCAweGMwLCAweDQ2LCAweGJjLCAweDYwLCAweDA0LCAweDZiLCAweGMwLCAweDQ2LAorMHg0NCwgMHg2MiwgMHg4NCwgMHg2OSwgMHhlNCwgMHgxOCwgMHgwYiwgMHg0YiwgMHhlMywgMHgxOCwgMHhmYiwgMHg2MCwKKzB4MDMsIDB4NmIsIDB4YzAsIDB4NDYsIDB4ODMsIDB4NjIsIDB4NDMsIDB4NmEsIDB4YzAsIDB4NDYsIDB4MDMsIDB4NjIsCisweGMxLCAweDYzLCAweDUxLCAweDY0LCAweDkxLCAweDY0LCAweGQxLCAweDY1LCAweGQxLCAweDY2LCAweDkwLCAweGJjLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwKKzB4ZmMsIDB4MDcsIDB4MDAsIDB4MDAsIDB4ZmMsIDB4ZjcsIDB4ZmYsIDB4ZmYsIDB4OTAsIDB4YjQsIDB4MDAsIDB4MjIsCisweDFiLCAweDQ5LCAweGM5LCAweDIzLCAweDFiLCAweDAxLCAweGM4LCAweDE4LCAweDAyLCAweDcxLCAweDAxLCAweDIwLAorMHhiYiwgMHgyMywgMHgxYiwgMHgwMSwgMHhjYiwgMHgxOCwgMHg1OCwgMHg3MywgMHgxNywgMHg0OCwgMHgwMywgMHgxYywKKzB4MDAsIDB4MjcsIDB4ZGMsIDB4MWQsIDB4YzEsIDB4MzQsIDB4MWMsIDB4NjUsIDB4MjMsIDB4MWMsIDB4MDEsIDB4MzcsCisweDNmLCAweDJmLCAweGY4LCAweGQzLCAweDFhLCAweDY1LCAweDE5LCAweDIzLCAweGRiLCAweDAxLCAweGNmLCAweDE4LAorMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhjYiwgMHgxOCwgMHgzYSwgMHg2MSwgMHg5OCwgMHg2MSwgMHg0MCwgMHgyMCwKKzB4ZjgsIDB4NjAsIDB4ZGEsIDB4NjEsIDB4MWEsIDB4NjIsIDB4Y2EsIDB4NjQsIDB4MGEsIDB4NjYsIDB4MGMsIDB4NDgsCisweGMwLCAweDQ2LCAweGMyLCAweDYwLCAweDBiLCAweDQ4LCAweDAwLCAweDZiLCAweGMwLCAweDA2LCAweGMwLCAweDBlLAorMHhmOCwgMHg2MywgMHgwYSwgMHg0OCwgMHgwMSwgMHg2OCwgMHhjMCwgMHg0NiwgMHgxOSwgMHg4MCwgMHg0MSwgMHg2OCwKKzB4YzAsIDB4NDYsIDB4NTksIDB4ODAsIDB4ODAsIDB4NjgsIDB4YzAsIDB4NDYsIDB4OTgsIDB4ODAsIDB4OTAsIDB4YmMsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDkwLCAweGJjLCAweDIwLCAweDQwLAorMHg5MCwgMHhlZSwgMHgyMCwgMHg0MCwgMHg4MCwgMHgwMCwgMHgxNCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHg0MCwKKzB4MDAsIDB4MjAsIDB4MGEsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NzMsIDB4Y2IsIDB4MWQsIDB4ZmYsIDB4MzMsCisweDNhLCAweDMzLCAweDg4LCAweDYxLCAweGM4LCAweDYxLCAweDE4LCAweDcwLCAweDA2LCAweDRhLCAweGMwLCAweDQ2LAorMHgxMCwgMHg2NSwgMHg1MCwgMHg2NiwgMHg5MCwgMHg2NiwgMHgwOCwgMHg3MCwgMHg1OCwgMHg3MCwgMHhiYiwgMHgyMywKKzB4MWIsIDB4MDEsIDB4ZDEsIDB4MTgsIDB4MDgsIDB4NzMsIDB4NzAsIDB4NDcsIDB4MjgsIDB4MDUsIDB4MDAsIDB4ODAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI0LCAweDJmLCAweDQ5LCAweDJmLCAweDRhLCAweGMwLCAweDQ2LAorMHgxMSwgMHg2MSwgMHgwMSwgMHgyMywgMHg5YiwgMHgwMiwgMHhjOCwgMHgxOCwgMHg1MCwgMHg2MSwgMHgyZCwgMHg0OCwKKzB4YzAsIDB4NDYsIDB4MTAsIDB4NjIsIDB4ZGIsIDB4MDAsIDB4YzMsIDB4MTgsIDB4NTMsIDB4NjIsIDB4MDAsIDB4MjMsCisweDEzLCAweDYzLCAweDUzLCAweDYzLCAweDI5LCAweDRhLCAweDJhLCAweDRmLCAweGQ0LCAweDFkLCAweGZmLCAweDM0LAorMHhmYSwgMHgzNCwgMHgxNCwgMHhjNywgMHgwOCwgMHgzZiwgMHgzYiwgMHg2MSwgMHgxYywgMHgxZiwgMHg3YywgMHg2MSwKKzB4MjYsIDB4NGYsIDB4YzAsIDB4NDYsIDB4MzksIDB4NjAsIDB4YjgsIDB4NjEsIDB4NzksIDB4NjEsIDB4ZjgsIDB4NjIsCisweDNiLCAweDYzLCAweDdiLCAweDY0LCAweGJhLCAweDY0LCAweGZhLCAweDY1LCAweDIyLCAweDRmLCAweGZlLCAweDFkLAorMHhmOSwgMHgzNiwgMHgyMiwgMHg0ZCwgMHhlYywgMHgxZCwgMHg3OSwgMHgzNCwgMHgyNiwgMHg2MiwgMHg1MSwgMHgyNiwKKzB4YjYsIDB4MDMsIDB4MzcsIDB4NjEsIDB4MjQsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzQsIDB4NjEsIDB4MmYsIDB4NjcsCisweDFkLCAweDRkLCAweDA5LCAweDI3LCAweDdmLCAweDA0LCAweGVjLCAweDFkLCAweDc1LCAweDM0LCAweDdjLCAweDYwLAorMHgzZCwgMHg2MCwgMHgxYiwgMHg0YywgMHhjMCwgMHg0NiwgMHgzYywgMHg2MSwgMHhlNiwgMHgxZCwgMHg3NSwgMHgzNiwKKzB4N2UsIDB4NjEsIDB4MTksIDB4NGYsIDB4YzAsIDB4NDYsIDB4N2MsIDB4NjAsIDB4M2QsIDB4NjAsIDB4MGYsIDB4MWMsCisweDAwLCAweDIxLCAweGZmLCAweDI0LCAweDAxLCAweDM0LCAweDFkLCAweDFjLCAweDhiLCAweDAwLCAweGZkLCAweDUwLAorMHgwMSwgMHgzMSwgMHhhMSwgMHg0MiwgMHhmYSwgMHhkMywgMHgwMSwgMHgxYywgMHgwMCwgMHgyMCwgMHgwMSwgMHgyNywKKzB4ZmYsIDB4MDIsIDB4ODMsIDB4MDAsIDB4Y2QsIDB4NTAsIDB4MDEsIDB4MzAsIDB4YjgsIDB4NDIsIDB4ZmEsIDB4ZDMsCisweDAwLCAweDIwLCAweDgxLCAweDAwLCAweDU1LCAweDUwLCAweDAxLCAweDMwLCAweDgwLCAweDI4LCAweGZhLCAweGQzLAorMHhmMCwgMHhiYywgMHg3MCwgMHg0NywgMHgyNCwgMHhhMywgMHgyMCwgMHg0MCwKKzB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MjQsIDB4ODMsIDB4MjAsIDB4NDAsIDB4MjQsIDB4YTksIDB4MjAsIDB4NDAsCisweDgwLCAweDAxLCAweDE4LCAweDAwLCAweGE4LCAweDAzLCAweDAwLCAweDgwLCAweDI0LCAweGE3LCAweDIwLCAweDQwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgyNCwgMHhhOCwgMHgyMCwgMHg0MCwgMHhhNCwgMHhhOCwgMHgyMCwgMHg0MCwKKzB4MDgsIDB4MDQsIDB4MDAsIDB4ODAsIDB4YjgsIDB4YjUsIDB4MmMsIDB4NDgsIDB4ZmQsIDB4ZjcsIDB4YmEsIDB4ZmQsCisweDAxLCAweDIwLCAweDJiLCAweDQ5LCAweDBhLCAweDY4LCAweDUyLCAweDBjLCAweDA2LCAweGQyLCAweDBhLCAweDY4LAorMHgxMiwgMHgwYywgMHgwMiwgMHhkMSwgMHgwYSwgMHg2OCwgMHg5MiwgMHgwYSwgMHgwMCwgMHhkMiwgMHgwMCwgMHgyMCwKKzB4MDQsIDB4MDYsIDB4MjQsIDB4MGUsIDB4MjUsIDB4NGEsIDB4ZDcsIDB4MWQsIDB4MGQsIDB4MzcsIDB4MDAsIDB4MjMsCisweDAwLCAweDIwLCAweDlkLCAweDAwLCAweDc4LCAweDUxLCAweDAxLCAweDMzLCAweDA0LCAweDJiLCAweGZhLCAweGQzLAorMHgwMSwgMHgyNywgMHgzZiwgMHgwNSwgMHg1MCwgMHg2MSwgMHhmOCwgMHg2MCwgMHhkMCwgMHg2MSwgMHhmOCwgMHg2MSwKKzB4MDAsIDB4MjMsIDB4ZGIsIDB4NDMsIDB4OTMsIDB4NjEsIDB4M2IsIDB4NjEsIDB4MTMsIDB4NjIsIDB4M2IsIDB4NjIsCisweDAwLCAweDI3LCAweDFiLCAweDRiLCAweDhkLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDhkLCAweDY5LAorMHhjMCwgMHg0NiwgMHgwMCwgMHg5NSwgMHgwMCwgMHgyYywgMHgwYiwgMHhkMCwgMHhkZCwgMHg2YiwgMHhjMCwgMHg0NiwKKzB4MDAsIDB4OTUsIDB4OWQsIDB4NmIsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTUsIDB4NWQsIDB4NmIsIDB4YzAsIDB4NDYsCisweDAwLCAweDk1LCAweDFkLCAweDZiLCAweGMwLCAweDQ2LCAweDAwLCAweDk1LCAweDAxLCAweDM3LCAweDQwLCAweDJmLAorMHhlOCwgMHhkMywgMHgwMCwgMHgyNywgMHg2YywgMHg0NiwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNywgMHgxYywgMHg0MywKKzB4MDEsIDB4ZTAsIDB4MjAsIDB4NjAsIDB4MDEsIDB4MzcsIDB4MGQsIDB4NjgsIDB4MmIsIDB4MDksIDB4MDIsIDB4ZDIsCisweDgwLCAweDJmLCAweGY4LCAweGQzLCAweDAxLCAweGUwLCAweDgwLCAweDJmLCAweDAzLCAweGQzLCAweDA4LCAweDQ5LAorMHg0YiwgMHg2ZSwgMHgwMSwgMHgzMywgMHg0YiwgMHg2NiwgMHhkMCwgMHg2MiwgMHhiOCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDE4LCAweDQwLCAweGEwLCAweDgyLCAweDIwLCAweDQwLAorMHg5MCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgwZSwgMHg0ZiwgMHgwZiwgMHg0YSwgMHgwMCwgMHgyMCwgMHg0YywgMHgwMSwKKzB4NjQsIDB4MWEsIDB4YTQsIDB4MDAsIDB4YTMsIDB4MTgsIDB4NTgsIDB4NjAsIDB4OTgsIDB4NjAsIDB4MTgsIDB4NjQsCisweDU4LCAweDY0LCAweDEwLCAweDUzLCAweDU4LCAweDgwLCAweGNjLCAweDAwLCAweGU0LCAweDE5LCAweDk4LCAweDY3LAorMHhkYywgMHg2MiwgMHgwMSwgMHgzMSwgMHgwMywgMHgyOSwgMHhlZSwgMHhkMywgMHgwNiwgMHg0OSwgMHhjMCwgMHg0NiwKKzB4MDgsIDB4NjAsIDB4NDgsIDB4NjAsIDB4ODgsIDB4NjAsIDB4YzgsIDB4NjAsIDB4MDgsIDB4NjEsIDB4OTAsIDB4YmMsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGFjLCAweDY2LCAweDIxLCAweDQwLCAweDVjLCAweDJiLCAweDAwLCAweDgwLAorMHhkMCwgMHgyYywgMHgwMCwgMHg4MCwgMHg2NCwgMHgyMSwgMHgwNSwgMHg0OCwgMHhjMCwgMHg0NiwgMHgwMSwgMHg2MywKKzB4MDAsIDB4MjEsIDB4YzksIDB4NDMsIDB4NDEsIDB4NjMsIDB4ODEsIDB4NjMsIDB4MDAsIDB4MjEsIDB4YzEsIDB4NjMsCisweDAxLCAweDY0LCAweDcwLCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDgwLCAweGI0LCAweDAxLCAweDIwLAorMHg0MCwgMHgwMiwgMHgwYSwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2MCwgMHgzYywgMHgyMCwgMHg0OCwgMHg2MCwKKzB4ODgsIDB4NjAsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YzgsIDB4NjAsIDB4MDAsIDB4MjAsIDB4MDcsIDB4NGEsCisweDg3LCAweDAwLCAweGNiLCAweDY4LCAweGMwLCAweDQ2LCAweGRhLCAweDUxLCAweDAxLCAweDMwLCAweDEwLCAweDI4LAorMHhmOCwgMHhkMywgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhlNCwgMHgyZCwgMHgwMCwgMHg4MCwKKzB4ZjQsIDB4MmQsIDB4MDAsIDB4ODAsIDB4NWQsIDB4NGMsIDB4ZmYsIDB4ZmYsIDB4MTIsIDB4NDksIDB4MTMsIDB4NDgsCisweDY3LCAweDIzLCAweDliLCAweDAxLCAweGNhLCAweDE4LCAweDA2LCAweGMwLCAweDA4LCAweDM4LCAweDExLCAweDRiLAorMHhjYSwgMHgxOCwgMHhjMSwgMHg2MCwgMHg4MiwgMHg2MCwgMHgwMSwgMHg2MSwgMHgwZiwgMHg0OSwgMHgxMCwgMHg0OCwKKzB4YTcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4Y2EsIDB4MTgsIDB4MDYsIDB4YzAsIDB4MDgsIDB4MzgsIDB4MGUsIDB4NGIsCisweGNhLCAweDE4LCAweGMxLCAweDYwLCAweDgyLCAweDYwLCAweDAxLCAweDYxLCAweDBjLCAweDQ4LCAweDBkLCAweDQ5LAorMHg2NywgMHgyMywgMHg5YiwgMHgwMSwgMHhjMiwgMHgxOCwgMHgwNSwgMHhjMSwgMHgwOCwgMHgzOSwgMHgwNSwgMHg0YiwKKzB4YzIsIDB4MTgsIDB4YzgsIDB4NjAsIDB4OGEsIDB4NjAsIDB4MDgsIDB4NjEsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCisweGFjLCAweDFlLCAweDIxLCAweDQwLCAweDQ4LCAweDJlLCAweDAwLCAweDgwLCAweGZjLCAweDFmLCAweDAwLCAweDAwLAorMHhhYywgMHhlZSwgMHgyMCwgMHg0MCwgMHgzNCwgMHgyZSwgMHgwMCwgMHg4MCwgMHhmYywgMHgyZiwgMHgwMCwgMHgwMCwKKzB4YWMsIDB4M2UsIDB4MjEsIDB4NDAsIDB4NWMsIDB4MmUsIDB4MDAsIDB4ODAsCisweDkwLCAweGI0LCAweDAwLCAweDIxLCAweDQwLCAweDRjLCAweDAwLCAweDIwLCAweDBhLCAweDAxLCAweDEyLCAweDE5LAorMHgxOSwgMHgyMywgMHhkYiwgMHgwMSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2MiwgMHgxMCwgMHg2MywgMHg1MCwgMHg2MywKKzB4OTAsIDB4NjMsIDB4MDEsIDB4MzEsIDB4MDMsIDB4MjksIDB4ZjMsIDB4ZDMsIDB4M2EsIDB4NDksIDB4YzAsIDB4NDYsCisweDA4LCAweDYzLCAweDQ4LCAweDYzLCAweDg4LCAweDYzLCAweDIwLCAweDYwLCAweDAxLCAweDIxLCAweGUzLCAweDFkLAorMHg1OSwgMHgzMywgMHg2MCwgMHg2MCwgMHgxOSwgMHg3MSwgMHgxOCwgMHg3MiwgMHg5OCwgMHg3MSwgMHg5OCwgMHg3MiwKKzB4NTksIDB4NzEsIDB4NTgsIDB4NzIsIDB4ZDgsIDB4NzEsIDB4ZDgsIDB4NzIsIDB4ZTIsIDB4MWQsIDB4NDksIDB4MzIsCisweDExLCAweDczLCAweDE5LCAweDcwLCAweDkwLCAweDczLCAweDk4LCAweDcwLCAweDUxLCAweDczLCAweDU5LCAweDcwLAorMHhkMCwgMHg3MywgMHhkOCwgMHg3MCwgMHgxMSwgMHg3MSwgMHgxMSwgMHg3MiwgMHg5MCwgMHg3MSwgMHg5MCwgMHg3MiwKKzB4NTAsIDB4NzEsIDB4NTAsIDB4NzIsIDB4ZDAsIDB4NzEsIDB4ZDAsIDB4NzIsIDB4MTgsIDB4NzMsIDB4MDIsIDB4MjIsCisweGU3LCAweDFkLCAweDY5LCAweDM3LCAweDNhLCAweDcwLCAweDk5LCAweDczLCAweGJhLCAweDcwLCAweDU4LCAweDczLAorMHg3OCwgMHg3MCwgMHhkOCwgMHg3MywgMHhmOCwgMHg3MCwgMHgzOSwgMHg3MSwgMHgzYSwgMHg3MiwgMHhiOSwgMHg3MSwKKzB4YjksIDB4NzIsIDB4NzgsIDB4NzEsIDB4N2EsIDB4NzIsIDB4ZjksIDB4NzEsIDB4ZjksIDB4NzIsIDB4MzksIDB4NzMsCisweGUzLCAweDFkLCAweDc5LCAweDMzLCAweDFhLCAweDcwLCAweGI5LCAweDczLCAweDk5LCAweDcwLCAweDc4LCAweDczLAorMHg1YSwgMHg3MCwgMHhmOSwgMHg3MywgMHhkOSwgMHg3MCwgMHgxYSwgMHg3MSwgMHgxYSwgMHg3MiwgMHg5OSwgMHg3MSwKKzB4OWEsIDB4NzIsIDB4NTgsIDB4NzEsIDB4NWEsIDB4NzIsIDB4ZDksIDB4NzEsIDB4ZGEsIDB4NzIsIDB4MTksIDB4NzMsCisweGU3LCAweDFkLCAweDg5LCAweDM3LCAweDNhLCAweDcwLCAweDk5LCAweDczLCAweGI5LCAweDcwLCAweDU4LCAweDczLAorMHg3YSwgMHg3MCwgMHhkOSwgMHg3MywgMHhmOSwgMHg3MCwgMHgzOSwgMHg3MSwgMHgzYSwgMHg3MiwgMHhiOSwgMHg3MSwKKzB4YjksIDB4NzIsIDB4NzgsIDB4NzEsIDB4N2EsIDB4NzIsIDB4ZjksIDB4NzEsIDB4ZjksIDB4NzIsIDB4M2EsIDB4NzMsCisweGUzLCAweDFkLCAweDk5LCAweDMzLCAweDFhLCAweDcwLCAweGI5LCAweDczLCAweDlhLCAweDcwLCAweDc4LCAweDczLAorMHg1YSwgMHg3MCwgMHhmOSwgMHg3MywgMHhkYSwgMHg3MCwgMHgxOSwgMHg3MSwgMHgxYSwgMHg3MiwgMHg5OSwgMHg3MSwKKzB4OTksIDB4NzIsIDB4NTgsIDB4NzEsIDB4NWEsIDB4NzIsIDB4ZDksIDB4NzEsIDB4ZDksIDB4NzIsIDB4MjAsIDB4NjEsCisweGUwLCAweDYwLCAweDYwLCAweDYxLCAweGEwLCAweDYwLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAorMHhhMCwgMHgxYywgMHgwMCwgMHg4MCwgMHhlOCwgMHgxOSwgMHgwMCwgMHg4MCwgMHg4MSwgMHgyMCwgMHgwMCwgMHgwMiwKKzB4MDEsIDB4NDksIDB4YzAsIDB4NDYsIDB4ODgsIDB4NjIsIDB4NzAsIDB4NDcsIDB4YzAsIDB4MDAsIDB4MTQsIDB4MDAsCisweDA5LCAweDQ5LCAweDBhLCAweDRiLCAweGM4LCAweDE4LCAweDA0LCAweDNiLCAweGM5LCAweDE4LCAweDA4LCAweDYwLAorMHgwMCwgMHgyMSwgMHhjMiwgMHgxZCwgMHgyOSwgMHgzMiwgMHhjMiwgMHg2MSwgMHgxMCwgMHgxYywgMHgwMSwgMHgzMSwKKzB4MDgsIDB4MjksIDB4ZjgsIDB4ZDMsIDB4YzEsIDB4MWYsIDB4MjksIDB4MzksIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjEsCisweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDg0LCAweDA5LCAweDAwLCAweDAwLAorMHgwNiwgMHg0OCwgMHgwNywgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg4MCwgMHg0OCwgMHg4MCwgMHgwMCwgMHgyMCwKKzB4ODgsIDB4ODAsIDB4YzgsIDB4ODAsIDB4ODgsIDB4NjAsIDB4MDQsIDB4NDksIDB4YzAsIDB4NDYsIDB4NDgsIDB4NjEsCisweDg4LCAweDYxLCAweDcwLCAweDQ3LCAweGZmLCAweGZmLCAweDAwLCAweDAwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAorMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwgMHgwMCwgMHgyMSwgMHgwNiwgMHg0OCwgMHhjMiwgMHgxZCwgMHgxOSwgMHgzMiwKKzB4YzEsIDB4NjAsIDB4MDEsIDB4NjEsIDB4YzEsIDB4NjEsIDB4MDEsIDB4NjIsIDB4MTEsIDB4NzEsIDB4ZmYsIDB4MzAsCisweDAxLCAweDMwLCAweDQxLCAweDYyLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDZjLCAweDA2LCAweDAwLCAweDgwLAorMHgwOSwgMHg0OCwgMHgwYSwgMHg0YiwgMHhjMCwgMHg0NiwgMHgxOCwgMHg2MCwgMHgwMCwgMHgyMSwgMHhjMiwgMHgxZCwKKzB4NGQsIDB4MzIsIDB4YzIsIDB4NjAsIDB4MTAsIDB4MWMsIDB4MDEsIDB4MzEsIDB4MTQsIDB4MjksIDB4ZjgsIDB4ZDMsCisweGMxLCAweDFmLCAweDRkLCAweDM5LCAweDAwLCAweDIwLCAweGM4LCAweDYwLCAweDU4LCAweDYwLCAweDk4LCAweDYwLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHhkOCwgMHgwNywgMHgwMCwgMHg4MCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4YjUsIDB4MGIsIDB4NDksIDB4MGIsIDB4NDgsIDB4ZmQsIDB4ZjcsIDB4ZWEsIDB4ZmIsIDB4MGIsIDB4NDgsCisweDAwLCAweDZhLCAweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDk4LCAweDQzLCAweDA5LCAweDQ5LCAweGMwLCAweDQ2LAorMHgwOCwgMHg2MiwgMHgwOSwgMHg0OCwgMHhjMSwgMHg2OCwgMHgwMSwgMHgyOSwgMHgwNCwgMHhkMSwgMHhjMCwgMHg2ZiwKKzB4ODAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweGMxLCAweGJkLCAweDIxLCAweDQwLCAweDc1LCAweDk4LCAweDIxLCAweDQwLAorMHhjMCwgMHgwMCwgMHgxOCwgMHg0MCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKKzB4MDAsIDB4YjUsIDB4MGYsIDB4NDgsIDB4YzEsIDB4NjgsIDB4MDEsIDB4MjksIDB4MDQsIDB4ZDEsIDB4YzAsIDB4NmYsCisweDgwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAweDBiLCAweDRiLCAweDBjLCAweDQ4LAorMHgwYywgMHg0YSwgMHgwMCwgMHgyMSwgMHhmZCwgMHhmNywgMHhiZiwgMHhmYiwgMHgwYiwgMHg0OCwgMHg0MSwgMHg4ZCwKKzB4MDEsIDB4MzEsIDB4NDEsIDB4ODUsIDB4MDAsIDB4MjEsIDB4YzEsIDB4ODUsIDB4MDksIDB4NDgsIDB4MDAsIDB4NmEsCisweDAxLCAweDIzLCAweGRiLCAweDAzLCAweDE4LCAweDQzLCAweDA4LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDYyLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg1OSwgMHhiZCwgMHgyMSwgMHg0MCwKKzB4NzUsIDB4OTgsIDB4MjEsIDB4NDAsIDB4YjgsIDB4MGIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisweGMwLCAweDAwLCAweDE4LCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLCAweGYwLCAweGI1LCAweDFiLCAweDRjLAorMHgxMCwgMHgyNiwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgwOCwgMHhkMSwgMHg2MCwgMHg4OCwgMHgwMCwgMHgyOCwKKzB4MDUsIDB4ZDEsIDB4MjAsIDB4NzksIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDEsIDB4MTksIDB4MjAsIDB4YTAsIDB4NjcsCisweDAwLCAweGUwLCAweGE2LCAweDY3LCAweDAwLCAweDIwLCAweDA3LCAweDIzLCAweDViLCAweDAyLCAweGU1LCAweDE4LAorMHhjMSwgMHg0MywgMHhlOCwgMHg2MSwgMHg2OSwgMHg2MiwgMHg1OSwgMHgwOCwgMHhhMSwgMHgyNywgMHg3ZiwgMHgwMywKKzB4NzksIDB4NjAsIDB4MGYsIDB4MjEsIDB4NzksIDB4NjAsIDB4ZTEsIDB4MWQsIDB4YjksIDB4MzEsIDB4MDgsIDB4NzEsCisweDAxLCAweDIwLCAweGI4LCAweDYwLCAweDQwLCAweDAyLCAweGI4LCAweDYwLCAweDAwLCAweGYwLCAweDRjLCAweGZhLAorMHgwMCwgMHhmMCwgMHhmMCwgMHhmYSwgMHgwNCwgMHgyMCwgMHhiOCwgMHg2MCwgMHgwNywgMHgyMCwgMHg3OCwgMHg2MSwKKzB4N2UsIDB4NjAsIDB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZTAsIDB4MTgsIDB4YzAsIDB4OGIsIDB4MDQsIDB4MjMsCisweDE4LCAweDQwLCAweGU4LCAweDYyLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNCwgMHgwMiwgMHgxYywgMHgwMCwgMHgyMCwgMHhmZiwgMHgyMywKKzB4MDEsIDB4MzMsIDB4OWEsIDB4NDIsIDB4MDgsIDB4ZDAsIDB4MDEsIDB4MjksIDB4MDAsIDB4ZDEsIDB4MDEsIDB4MjAsCisweDAwLCAweDJhLCAweDAxLCAweGQxLCAweDAyLCAweDIzLCAweDE4LCAweDQzLCAweDkwLCAweGJjLCAweDcwLCAweDQ3LAorMHgxYiwgMHg0YSwgMHhkNywgMHg2OCwgMHgxYSwgMHg0YiwgMHgxOSwgMHg3OSwgMHgxYywgMHgxYywgMHgzNywgMHgyMywKKzB4OWIsIDB4MDEsIDB4ZTMsIDB4MTgsIDB4MDEsIDB4MmYsIDB4MGQsIDB4ZDEsIDB4NTcsIDB4ODgsIDB4MDAsIDB4MmYsCisweDBhLCAweGQxLCAweDAwLCAweDI5LCAweDBhLCAweGQxLCAweDU5LCAweDhiLCAweDBhLCAweDA5LCAweDAwLCAweGQzLAorMHgwMiwgMHgyMCwgMHg0OSwgMHgwOSwgMHhlOCwgMHhkMywgMHgwMSwgMHgyMywgMHgxOCwgMHg0MywgMHhlNSwgMHhlNywKKzB4MDAsIDB4MjksIDB4MDMsIDB4ZDAsIDB4OTgsIDB4OGEsIDB4ODAsIDB4MDcsIDB4ODAsIDB4MGYsIDB4ZGYsIDB4ZTcsCisweDZkLCAweDIzLCAweDViLCAweDAxLCAweGQxLCAweDE4LCAweDhhLCAweDg4LCAweGZmLCAweDI3LCAweDAxLCAweDM3LAorMHgxNywgMHg0MCwgMHgwYSwgMHg0OSwgMHhjOSwgMHg4OCwgMHgwMywgMHhkMCwgMHg0YiwgMHgwYSwgMHgwMSwgMHhkMywKKzB4MDMsIDB4MjAsIDB4ZDEsIDB4ZTcsIDB4MTMsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MGIsIDB4MGEsIDB4MDEsIDB4ZDMsCisweDAyLCAweDIwLCAweGNiLCAweGU3LCAweGQyLCAweDA5LCAweGM5LCAweGQzLCAweGM5LCAweDA5LCAweGM3LCAweGQzLAorMHgwMSwgMHgyMCwgMHhjNSwgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwOCwgMHgxYywgMHgwMCwgMHg4MCwKKzB4ZjAsIDB4YjUsIDB4YzEsIDB4YjAsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDcsIDB4NTIsIDB4NDksIDB4YzAsIDB4NDYsCisweDA4LCAweDYwLCAweDUyLCAweDQ4LCAweDQyLCAweDY5LCAweDQwLCAweDBkLCAweGExLCAweDIxLCAweDQ5LCAweDAzLAorMHg0OCwgMHg2MCwgMHg1MCwgMHg0OCwgMHhjMCwgMHg2YSwgMHg1MCwgMHg0YiwgMHgxOCwgMHg0MywgMHgwMCwgMHgyMSwKKzB4MDMsIDB4MDMsIDB4MWIsIDB4MGIsIDB4NGUsIDB4NGMsIDB4MjcsIDB4NmYsIDB4M2QsIDB4MDMsIDB4MmQsIDB4MGIsCisweGU3LCAweDFkLCAweDc5LCAweDM3LCAweGFiLCAweDQyLCAweDFjLCAweGQwLCAweGUzLCAweDFkLCAweDc5LCAweDMzLAorMHgxYiwgMHg2YSwgMHhjMCwgMHg0NiwgMHg0MCwgMHg5MywgMHgwMSwgMHgyMywgMHg5YiwgMHgwNywgMHgwMywgMHg0MywKKzB4MWIsIDB4NjgsIDB4Y2MsIDB4MDAsIDB4NmUsIDB4NDYsIDB4MzMsIDB4NTEsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsCisweDA2LCAweDFkLCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDZjLCAweDQ0LCAweDYzLCAweDYwLCAweDA4LCAweDMwLAorMHgwMSwgMHgzMSwgMHg0MCwgMHg5YiwgMHg4MywgMHg0MiwgMHgwMCwgMHhkOCwgMHgzZiwgMHg0OCwgMHgwMywgMHgwMywKKzB4MWIsIDB4MGIsIDB4YWIsIDB4NDIsIDB4ZTcsIDB4ZDEsIDB4MDAsIDB4MjAsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDMsCisweDEzLCAweDQwLCAweDNjLCAweDRjLCAweDAzLCAweGQwLCAweDYzLCAweDZhLCAweDAxLCAweDMzLCAweDYzLCAweDYyLAorMHgwOSwgMHhlMCwgMHgxMywgMHgwYiwgMHgwMywgMHhkMywgMHgyMywgMHg2YSwKKzB4MDEsIDB4MzMsIDB4MjMsIDB4NjIsIDB4MDMsIDB4ZTAsIDB4MzcsIDB4NGIsIDB4NWMsIDB4NmQsIDB4MDEsIDB4MzQsCisweDVjLCAweDY1LCAweDAwLCAweDI5LCAweDA5LCAweGQwLCAweDAzLCAweDFjLCAweGRjLCAweDAwLCAweDIzLCAweDFjLAorMHg2YiwgMHg0NCwgMHg1YywgMHg2OCwgMHgwMSwgMHgzMCwgMHgyMywgMHgwZCwgMHgwMSwgMHhkMiwgMHg4OCwgMHg0MiwKKzB4ZjUsIDB4ZDEsIDB4MzAsIDB4NGMsIDB4MjUsIDB4NjgsIDB4NmIsIDB4MGMsIDB4MDUsIDB4ZDIsIDB4MjMsIDB4NjgsCisweDFiLCAweDBjLCAweDA4LCAweGQxLCAweDI0LCAweDY4LCAweGEzLCAweDBhLCAweDA1LCAweGQzLCAweDIwLCAweDI0LAorMHgyYiwgMHg0YiwgMHhjMCwgMHg0NiwgMHg1YywgMHg2MiwgMHgwMCwgMHgyNCwgMHg1YywgMHg2MiwgMHgyNSwgMHg0YiwKKzB4MjMsIDB4NGMsIDB4NTEsIDB4MjYsIDB4YjYsIDB4MDMsIDB4MjMsIDB4NjcsIDB4MzMsIDB4NjEsIDB4M2QsIDB4NmEsCisweGMwLCAweDQ2LCAweDc1LCAweDYxLCAweDAyLCAweDI1LCAweGExLCAweDI2LCAweDc2LCAweDAzLCAweDc1LCAweDYwLAorMHgwMSwgMHgyNSwgMHhiNSwgMHg2MCwgMHhlNiwgMHgxZCwgMHhiOSwgMHgzNiwgMHgzNSwgMHg3MSwgMHg4OCwgMHg0MiwKKzB4MjEsIDB4ZDAsIDB4MjUsIDB4MWMsIDB4YzMsIDB4MDAsIDB4NmMsIDB4NDYsIDB4ZTQsIDB4NTgsIDB4MmUsIDB4NmYsCisweDZiLCAweDQ0LCAweDM0LCAweDYwLCAweDViLCAweDY4LCAweDJjLCAweDZmLCAweGMwLCAweDQ2LCAweDYzLCAweDYwLAorMHgyYiwgMHg2ZiwgMHgwOCwgMHgzMywgMHgyYiwgMHg2NywgMHgzYywgMHg2YSwgMHhhMywgMHg0MiwgMHgwMiwgMHhkMywKKzB4MTIsIDB4NGIsIDB4YzAsIDB4NDYsIDB4MmIsIDB4NjcsIDB4MDMsIDB4MWMsIDB4ZGIsIDB4MDAsIDB4NmIsIDB4NDQsCisweDVjLCAweDY4LCAweDAxLCAweDMwLCAweDIzLCAweDBkLCAweDA0LCAweGQzLCAweDUxLCAweDI0LCAweGE0LCAweDAzLAorMHgyYiwgMHg2ZiwgMHhjMCwgMHg0NiwgMHhhMywgMHg2MSwgMHg4OCwgMHg0MiwgMHhkZSwgMHhkMSwgMHgxMCwgMHgwYiwKKzB4MDMsIDB4ZDMsIDB4MGUsIDB4NDksIDB4MDEsIDB4MjAsIDB4ZmQsIDB4ZjcsIDB4NzQsIDB4ZmEsIDB4NDEsIDB4YjAsCisweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweGIwLAorMHgwMCwgMHgwMSwgMHgxNCwgMHg0MCwgMHgwMCwgMHg0MCwgMHgxNCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MjQsIDB4YTcsIDB4MjAsIDB4NDAsIDB4YTQsIDB4MmEsIDB4MDAsIDB4ODAsCisweGEwLCAweDgyLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweGMwLCAweDAwLCAweDE4LCAweDAwLAorMHhjOSwgMHg0ZiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNCwgMHgwMCwgMHgyMSwgMHgwMCwgMHgyMywgMHgwNywgMHgyMiwKKzB4MDYsIDB4MjQsIDB4NDcsIDB4NGYsIDB4YzAsIDB4NDYsIDB4M2MsIDB4NjEsIDB4M2EsIDB4NjEsIDB4MDEsIDB4MzMsCisweDIwLCAweDJiLCAweGY5LCAweGQzLCAweDA0LCAweDI1LCAweDNkLCAweDYxLCAweDA1LCAweDIzLCAweDNiLCAweDYxLAorMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzZCwgMHg2MSwgMHgzYiwgMHg2MSwKKzB4M2YsIDB4NGQsIDB4YWIsIDB4NmYsIDB4ZGUsIDB4MDgsIDB4MDIsIDB4MjMsIDB4MWUsIDB4NDAsIDB4MDQsIDB4MjMsCisweDMzLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweGFiLCAweDZmLAorMHg5ZSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywgMHgzYiwgMHg2MSwKKzB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsIDB4NWUsIDB4MDgsIDB4MDIsIDB4MjMsCisweDFlLCAweDQwLCAweDA0LCAweDIzLCAweDMzLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDMzLCAweDQzLAorMHgzYiwgMHg2MSwgMHgwMiwgMHgyMywgMHhhZSwgMHg2ZiwgMHgxZSwgMHg0MCwgMHgwNCwgMHgyMywgMHgzMywgMHg0MywKKzB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MzMsIDB4NDMsIDB4M2IsIDB4NjEsIDB4YWIsIDB4NmYsIDB4NWQsIDB4MDAsCisweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLAorMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHhjNSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywKKzB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4ODUsIDB4MDgsCisweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLAorMHgyYiwgMHg0MywgMHgzYiwgMHg2MSwgMHg0NSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgwNCwgMHgyMywKKzB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MmIsIDB4NDMsIDB4M2IsIDB4NjEsIDB4MDIsIDB4MjUsCisweDA1LCAweDQwLCAweDA0LCAweDIzLCAweDJiLCAweDQzLCAweDNiLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLAorMHgzYiwgMHg2MSwgMHg0MCwgMHgwMCwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MCwgMHgwNCwgMHgyMywgMHgwMywgMHg0MywKKzB4M2IsIDB4NjEsIDB4MDUsIDB4MjMsIDB4MTgsIDB4NDMsIDB4MzgsIDB4NjEsIDB4MDAsIDB4MjUsIDB4M2QsIDB4NjEsCisweDAxLCAweDIzLCAweDNiLCAweDYxLCAweDNkLCAweDYxLCAweDNiLCAweDYxLCAweDAwLCAweDIwLCAweDNkLCAweDYxLAorMHgwZCwgMHg0YiwgMHgxYiwgMHg2OSwgMHg0OSwgMHgwMCwgMHgxZSwgMHgxYywgMHgwMiwgMHgyMywgMHgzMywgMHg0MCwKKzB4MTksIDB4NDMsIDB4MDEsIDB4MjMsIDB4M2IsIDB4NjEsIDB4MDEsIDB4MzAsCisweDEwLCAweDI4LCAweGYyLCAweGQzLCAweDAyLCAweDIwLCAweDM4LCAweDYxLCAweDAzLCAweDIwLCAweDM4LCAweDYxLAorMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzYywgMHg2MSwgMHgzYSwgMHg2MSwgMHgzOCwgMHg2MSwgMHg0OCwgMHgwOCwKKzB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4ODAsIDB4MDAsIDB4MTQsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDgwLCAweDAwLCAweDE0LCAweDQwLCAweGYwLCAweGI0LCAweDAwLCAweDI0LCAweDA3LCAweDIzLCAweDA2LCAweDI3LAorMHg0NCwgMHg0YSwgMHhjMCwgMHg0NiwgMHgxNywgMHg2MSwgMHgxMywgMHg2MSwgMHgwMSwgMHgzNCwgMHgyMCwgMHgyYywKKzB4ZjksIDB4ZDMsIDB4MDQsIDB4MjYsIDB4MTYsIDB4NjEsIDB4MDUsIDB4MjQsIDB4MTQsIDB4NjEsIDB4MTcsIDB4NjEsCisweDA3LCAweDIzLCAweDEzLCAweDYxLCAweDE2LCAweDYxLCAweDE0LCAweDYxLCAweDE3LCAweDYxLCAweDEzLCAweDYxLAorMHgzYywgMHg0YiwgMHg5YiwgMHg2ZiwgMHhkZCwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwgMHgyYiwgMHgxYywKKzB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4MzcsIDB4NGIsIDB4OWIsIDB4NmYsCisweDlkLCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLAorMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgzMiwgMHg0YiwgMHg5YiwgMHg2ZiwgMHg1ZCwgMHgwOCwgMHgwMiwgMHgyMywKKzB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsCisweDJkLCAweDRiLCAweDlkLCAweDZmLCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLAorMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHgyOSwgMHg0YiwgMHg5YiwgMHg2ZiwgMHg1ZCwgMHgwMCwKKzB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsCisweDE1LCAweDYxLCAweGM1LCAweDA4LCAweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLAorMHgxMywgMHg2MSwgMHgyNSwgMHg0MywgMHgxNSwgMHg2MSwgMHg4NSwgMHgwOCwgMHgwMiwgMHgyMywgMHgxZCwgMHg0MCwKKzB4MmIsIDB4MWMsIDB4MzMsIDB4NDMsIDB4MTMsIDB4NjEsIDB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4NDUsIDB4MDgsCisweDAyLCAweDIzLCAweDFkLCAweDQwLCAweDJiLCAweDFjLCAweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDI1LCAweDQzLAorMHgxNSwgMHg2MSwgMHgwMiwgMHgyNSwgMHgwNSwgMHg0MCwgMHgyYiwgMHgxYywgMHgzMywgMHg0MywgMHgxMywgMHg2MSwKKzB4MjUsIDB4NDMsIDB4MTUsIDB4NjEsIDB4NDAsIDB4MDAsIDB4MDIsIDB4MjMsIDB4MTgsIDB4NDAsIDB4MDMsIDB4MWMsCisweDMzLCAweDQzLCAweDEzLCAweDYxLCAweDIwLCAweDQzLCAweDEwLCAweDYxLCAweDE3LCAweDYxLCAweDA3LCAweDIzLAorMHgxMywgMHg2MSwgMHgxNiwgMHg2MSwgMHgxNCwgMHg2MSwgMHg0YywgMHgwMCwgMHgwMCwgMHgyMCwgMHgwZiwgMHgyMSwKKzB4MjUsIDB4MWMsIDB4Y2QsIDB4NDAsIDB4MDIsIDB4MjMsIDB4MWQsIDB4NDAsIDB4MDQsIDB4MjMsIDB4MmIsIDB4NDMsCisweDEzLCAweDYxLCAweDA1LCAweDIzLCAweDJiLCAweDQzLCAweDEzLCAweDYxLCAweDAxLCAweDMwLCAweDAxLCAweDM5LAorMHgxMCwgMHgyOCwgMHhmMSwgMHhkMywgMHgxNywgMHg2MSwgMHgwNywgMHgyMywgMHgxMywgMHg2MSwgMHgxNywgMHg2MSwKKzB4MTMsIDB4NjEsIDB4MDMsIDB4MjAsIDB4MTAsIDB4NjEsIDB4ZjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsCisweDgwLCAweDAwLCAweDE0LCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGYwLCAweGI1LCAweDRmLCAweDRkLAorMHgwOCwgMHgyMSwgMHgwMiwgMHgyMCwgMHgyYSwgMHgxYywgMHhmZCwgMHhmNywgMHgyNywgMHhmOSwgMHg0ZCwgMHg0YywKKzB4NzEsIDB4MjMsIDB4NWIsIDB4MDEsIDB4ZTcsIDB4MTgsIDB4MzgsIDB4ODAsIDB4MWEsIDB4MjEsIDB4MDIsIDB4MjAsCisweDJhLCAweDFjLCAweGZkLCAweGY3LCAweDFkLCAweGY5LCAweDc4LCAweDgwLCAweDIwLCAweDc5LCAweDAwLCAweDI4LAorMHgwYiwgMHhkMCwgMHgwMCwgMHgyMCwgMHgzOCwgMHg4MCwgMHhlMCwgMHg2OCwgMHgwMSwgMHgyOCwgMHgxMCwgMHhkMSwKKzB4NDQsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDIsIDB4MTgsIDB4NDMsIDB4OTksIDB4MDIsCisweDA4LCAweDYwLCAweGUwLCAweDY4LCAweDAxLCAweDI4LCAweDA2LCAweGQxLCAweDYwLCAweDg4LCAweDAwLCAweDI4LAorMHgwMywgMHhkMSwgMHhmOSwgMHgyMSwgMHgxMiwgMHgyMCwgMHhmZiwgMHhmNywgMHg0MywgMHhmZiwgMHgwMSwgMHgyMSwKKzB4YzksIDB4MDMsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4M2UsIDB4ZmYsIDB4MDAsIDB4MjUsIDB4N2QsIDB4MjYsCisweGY2LCAweDAwLCAweDAwLCAweGUwLCAweDAxLCAweDM1LCAweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDljLCAweGZlLAorMHgwMCwgMHgwYywgMHgwMSwgMHhkMywgMHhiNSwgMHg0MiwgMHhmNywgMHhkMywgMHgwMCwgMHgyNSwgMHgwNSwgMHhlMCwKKzB4MDMsIDB4MjEsIDB4MDksIDB4MDMsIDB4MDAsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4MmIsIDB4ZmYsIDB4MDEsIDB4MzUsCisweDAwLCAweDIwLCAweGZmLCAweGY3LCAweDhkLCAweGZlLCAweDQwLCAweDBiLCAweDAxLCAweGQyLCAweGI1LCAweDQyLAorMHhmMiwgMHhkMywgMHgwNCwgMHgyMCwgMHhmZiwgMHhmNywgMHg4NiwgMHhmZSwgMHhmZiwgMHgyMywgMHhlMSwgMHgzMywKKzB4OTgsIDB4NDMsIDB4MDEsIDB4MjEsIDB4MDEsIDB4NDMsIDB4MzgsIDB4ODgsIDB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsCisweDk4LCAweDQyLCAweDAzLCAweGQxLCAweDJmLCAweDIzLCAweDViLCAweDAxLAorMHgxOSwgMHg0MywgMHgxNiwgMHhlMCwgMHgwMSwgMHgyOCwgMHgwOSwgMHhkMSwgMHg3OCwgMHg4OCwgMHgwMSwgMHgyOCwKKzB4MDMsIDB4ZDEsIDB4MjMsIDB4MjMsIDB4NWIsIDB4MDEsIDB4MTksIDB4NDMsIDB4MGQsIDB4ZTAsIDB4MjAsIDB4MjMsCisweDE5LCAweDQzLCAweDBhLCAweGUwLCAweDAwLCAweDI4LCAweDA4LCAweGQxLCAweDc4LCAweDg4LCAweDAxLCAweDI4LAorMHgwMywgMHhkMSwgMHgwYiwgMHgyMywgMHhkYiwgMHgwMSwgMHgxOSwgMHg0MywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyMywKKzB4MTksIDB4NDMsIDB4MDQsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZjgsIDB4ZmUsIDB4MDksIDB4MjEsIDB4NDksIDB4MDIsCisweDAwLCAweDIwLCAweGZmLCAweGY3LCAweGYzLCAweGZlLCAweGUwLCAweDY4LCAweDAwLCAweDI4LCAweDBjLCAweGQxLAorMHgwMCwgMHgyMSwgMHgxYiwgMHgyMCwgMHhmZiwgMHhmNywgMHhlYywgMHhmZSwgMHgxYSwgMHgyMCwgMHhmZiwgMHhmNywKKzB4NGYsIDB4ZmUsIDB4MDEsIDB4MjEsIDB4YzksIDB4MDMsIDB4MDEsIDB4NDMsIDB4MWEsIDB4MjAsIDB4ZmYsIDB4ZjcsCisweGUzLCAweGZlLCAweDAwLCAweDI3LCAweDAzLCAweGUwLCAweDA4LCAweDJmLCAweDAxLCAweGQzLCAweDBmLCAweDJmLAorMHgwOCwgMHhkOSwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHg0MCwgMHhmZSwgMHg3OSwgMHgwMCwgMHgwOSwgMHgxOSwKKzB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzksIDB4MTgsIDB4ODgsIDB4ODMsIDB4MDEsIDB4MzcsIDB4MjAsIDB4MmYsCisweGVmLCAweGQzLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGVkLCAweGFmLCAweDIxLCAweDQwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwgMHg4MSwgMHhiMCwgMHgxMywgMHg0OCwKKzB4MDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4NDEsIDB4NjgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCisweDgxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweGMxLCAweDY4LCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAorMHgwMSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHg0MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwKKzB4ODEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsIDB4YzEsIDB4NjksIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTEsCisweDAxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLCAweDQxLCAweDZhLCAweGMwLCAweDQ2LCAweDAwLCAweDkxLAorMHg4MSwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MSwgMHhjMCwgMHg2YSwgMHhjMCwgMHg0NiwgMHgwMCwgMHg5MCwKKzB4MDEsIDB4YjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDgsIDB4MTQsIDB4NDAsIDB4ZjAsIDB4YjUsIDB4ODMsIDB4YjAsCisweDY4LCAweDRkLCAweDFiLCAweDIzLCAweGRiLCAweDAxLCAweGVmLCAweDE4LCAweGY4LCAweDhiLCAweDA0LCAweDIyLAorMHgwMiwgMHg0MCwgMHgwMiwgMHg5MiwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwgMHhlOCwgMHgxOCwgMHgwMSwgMHg4OCwKKzB4YzAsIDB4NDYsIDB4MDEsIDB4OTEsIDB4NDAsIDB4ODgsIDB4YzAsIDB4NDYsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjQsCisweDAzLCAweGUwLCAweDA4LCAweDJjLCAweDAxLCAweGQzLCAweDBmLCAweDJjLCAweDA4LCAweGQ5LCAweDIwLCAweDFjLAorMHhmZiwgMHhmNywgMHhlOCwgMHhmZCwgMHg2MSwgMHgwMCwgMHg0OSwgMHgxOSwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwKKzB4YzksIDB4MTgsIDB4ODgsIDB4ODMsIDB4MDEsIDB4MzQsIDB4MjAsIDB4MmMsIDB4ZWYsIDB4ZDMsIDB4NTgsIDB4NGMsCisweGUwLCAweDY5LCAweDAwLCAweDI4LCAweDE1LCAweGQwLCAweDU3LCAweDRlLCAweDIwLCAweDI1LCAweDAxLCAweDNkLAorMHg1MywgMHg0OSwgMHhlMCwgMHg2OSwgMHgzMCwgMHg0MCwgMHgwYiwgMHhkMCwgMHg2OCwgMHgwMCwgMHg0MCwgMHgxOCwKKzB4MzcsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4OGIsIDB4MjgsIDB4MWMsIDB4ZmYsIDB4ZjcsCisweDY1LCAweGZlLCAweGUwLCAweDY5LCAweGIwLCAweDQzLCAweGUwLCAweDYxLCAweDc2LCAweDA4LCAweDAwLCAweDJkLAorMHhlYiwgMHhkMSwgMHgwMSwgMHgyMCwgMHhmZiwgMHhmNywgMHhjMiwgMHhmZCwgMHg0OCwgMHg0OSwgMHhjMCwgMHg0NiwKKzB4ZjgsIDB4ODMsIDB4ZjgsIDB4OGIsIDB4YzIsIDB4MDgsIDB4MjUsIDB4ZDMsIDB4Y2EsIDB4NjgsIDB4MDEsIDB4MmEsCisweDEzLCAweGQxLCAweDBhLCAweDc5LCAweDAwLCAweDJhLCAweDFmLCAweGQxLCAweDQ5LCAweDg4LCAweDAwLCAweDI5LAorMHgxYywgMHhkMSwgMHgwMSwgMHg5OSwgMHg0MywgMHg0YSwgMHgwMCwgMHgyOSwgMHgwNSwgMHhkMCwgMHgwMSwgMHgyOSwKKzB4MTYsIDB4ZDEsIDB4NTEsIDB4OGIsIDB4YzksIDB4MDgsIDB4MTMsIDB4ZDIsIDB4MGYsIDB4ZTAsIDB4NTEsIDB4OGIsCisweDA5LCAweDA5LCAweDBmLCAweGQyLCAweDBiLCAweGUwLCAweDBhLCAweDc5LCAweDAwLCAweDJhLCAweDBiLCAweGQxLAorMHg2ZCwgMHgyMywgMHg1YiwgMHgwMSwgMHhjOSwgMHgxOCwgMHg4YSwgMHg4OCwgMHhjOSwgMHg4OCwgMHgxMSwgMHg0MCwKKzB4NDksIDB4MDksIDB4MDksIDB4MDcsIDB4MDIsIDB4ZDEsIDB4MDQsIDB4MjMsIDB4OTgsIDB4NDMsIDB4ZjgsIDB4ODMsCisweGY4LCAweDhiLCAweDA0LCAweDIxLCAweDAxLCAweDQwLCAweDAyLCAweDlhLCAweDFmLCAweGQwLCAweGI5LCAweDhiLAorMHg0YSwgMHgwYiwgMHgyNywgMHhkMywgMHg4MCwgMHgwOSwgMHgyNSwgMHhkMywgMHhmZiwgMHgyMywgMHgwMSwgMHg5OCwKKzB4MDEsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MjAsIDB4ZDAsIDB4MDAsIDB4MjUsIDB4MDAsIDB4OTgsIDB4MDEsIDB4MjgsCisweDAwLCAweGQxLCAweDA1LCAweDAyLCAweDAxLCAweDk4LCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDAxLCAweDIzLAorMHg1YiwgMHgwMywgMHgxZCwgMHg0MywgMHhhOSwgMHg0MiwgMHgxMywgMHhkMCwKKzB4MDAsIDB4MjAsIDB4MjksIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MTAsIDB4ZmUsIDB4YmQsIDB4ODMsIDB4MDAsIDB4MjAsCisweGMwLCAweDQzLCAweDYwLCAweDYyLCAweDBhLCAweGUwLCAweGI4LCAweDhiLCAweDQwLCAweDBiLCAweDA3LCAweGQyLAorMHgwOSwgMHgyMSwgMHg0OSwgMHgwMiwgMHgwMCwgMHgyMCwgMHhmZiwgMHhmNywgMHgwMywgMHhmZSwgMHgwOSwgMHgyMCwKKzB4NDAsIDB4MDIsIDB4YjgsIDB4ODMsIDB4ZjgsIDB4OGIsIDB4YzAsIDB4MDgsIDB4MmQsIDB4ZDMsIDB4MWQsIDB4NDgsCisweGM3LCAweDZhLCAweDAxLCAweDk4LCAweDAwLCAweDk5LCAweGZmLCAweGY3LCAweDUxLCAweGZjLCAweGMyLCAweDA3LAorMHhkMiwgMHgwZiwgMHgxYSwgMHg0OSwgMHgwMywgMHhkMCwgMHgwNCwgMHgyMywgMHhjZCwgMHg2ZCwgMHgyYiwgMHg0MywKKzB4MDMsIDB4ZTAsIDB4MDQsIDB4MjMsIDB4Y2QsIDB4NmQsIDB4OWQsIDB4NDMsIDB4MmIsIDB4MWMsIDB4Y2IsIDB4NjUsCisweDgzLCAweDA4LCAweDAzLCAweGQzLCAweDAyLCAweDIzLCAweGNkLCAweDZkLCAweDJiLCAweDQzLCAweDAzLCAweGUwLAorMHgwMiwgMHgyMywgMHhjZCwgMHg2ZCwgMHg5ZCwgMHg0MywgMHgyYiwgMHgxYywgMHhjYiwgMHg2NSwgMHg2MSwgMHg2YSwKKzB4ODEsIDB4NDIsIDB4MGMsIDB4ZDAsIDB4NjAsIDB4NjIsIDB4MGUsIDB4NDgsIDB4MDAsIDB4MmEsIDB4MDMsIDB4ZDAsCisweGZmLCAweDIxLCAweDIxLCAweDMxLCAweDM5LCAweDQzLCAweDAzLCAweGUwLCAweGZmLCAweDIzLCAweDIxLCAweDMzLAorMHg5ZiwgMHg0MywgMHgzOSwgMHgxYywgMHhjMSwgMHg2MiwgMHgwMywgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4NjgsIDB4MWMsIDB4MDAsIDB4ODAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweDI4LCAweDFjLCAweDAwLCAweDgwLCAweDQwLCAweDAwLCAweDE0LCAweDQwLAorMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHg0MCwgMHgwMCwgMHgxNCwgMHgwMCwgMHg5MCwgMHhiNCwgMHgwMSwgMHgyMiwKKzB4MjAsIDB4MjgsIDB4MGYsIDB4ZDIsIDB4NDMsIDB4MDAsIDB4MGYsIDB4MWMsIDB4MDcsIDB4NDksIDB4NWMsIDB4MTgsCisweDM3LCAweDIzLCAweDliLCAweDAxLCAweGUzLCAweDE4LCAweDlmLCAweDgzLCAweDgyLCAweDQwLCAweDA3LCAweDIzLAorMHg1YiwgMHgwMiwgMHhjOSwgMHgxOCwgMHgxMCwgMHgxYywgMHhjYSwgMHg2OSwgMHgxMCwgMHg0MywgMHhjOCwgMHg2MSwKKzB4OTAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4MGIsIDB4NDgsIDB4NDAsIDB4NjksCisweDBiLCAweDQ5LCAweGM5LCAweDhiLCAweDA0LCAweDIyLCAweDBhLCAweDQwLCAweDBhLCAweDQ5LCAweDA2LCAweGQwLAorMHgwMSwgMHgyMywgMHhkYiwgMHgwMiwgMHg5OCwgMHg0MywgMHgwMSwgMHgyMywgMHhjYSwgMHg2ZCwgMHgxYSwgMHg0MywKKzB4MDUsIDB4ZTAsIDB4MDEsIDB4MjMsIDB4ZGIsIDB4MDIsIDB4MTgsIDB4NDMsIDB4Y2EsIDB4NmQsIDB4NTIsIDB4MDgsCisweDUyLCAweDAwLCAweGNhLCAweDY1LCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDgwLCAweDAwLCAweDE0LCAweDQwLAorMHhlOCwgMHgxYiwgMHgwMCwgMHg4MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHg4NCwgMHhiMCwKKzB4ZmYsIDB4ZjcsIDB4ZGUsIDB4ZmYsIDB4MDEsIDB4MWMsIDB4MDUsIDB4MjAsIDB4MDAsIDB4OTAsIDB4MDAsIDB4MjAsCisweDAxLCAweGFiLCAweDE4LCAweDgwLCAweDA0LCAweDNiLCAweDU4LCAweDcwLCAweDFiLCAweDIyLCAweDAwLCAweGFiLAorMHg1YSwgMHg4MCwgMHhkOSwgMHg4MCwgMHgwNSwgMHg0OSwgMHhjOSwgMHg2ZCwgMHhjMCwgMHg0NiwgMHgwMiwgMHg5MSwKKzB4MDMsIDB4OTAsIDB4NjgsIDB4NDYsIDB4MDAsIDB4MjEsIDB4ZmQsIDB4ZjcsIDB4NzksIDB4ZjgsIDB4MDQsIDB4YjAsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGE0LCAweDJhLCAweDAwLCAweDgwLCAweDBmLCAweDQ4LCAweDAxLCAweDY4LAorMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwgMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNiwgMHhkMSwgMHgwMCwgMHg2OCwKKzB4ODAsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MGIsIDB4NDgsIDB4MDAsIDB4NjgsIDB4MDAsIDB4MGMsIDB4MDEsIDB4ZTAsCisweDBhLCAweDQ4LCAweDgwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLCAweDA5LCAweDRiLCAweDk4LCAweDQyLAorMHgwNSwgMHhkMCwgMHgwMiwgMHgzMywgMHg5OCwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwNywgMHg0YiwgMHg5OCwgMHg0MiwKKzB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZTcsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwNCwgMHg5OSwgMHgwMCwgMHgwMCwgMHgwNywgMHg5OSwgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNCwgMHgwMSwgMHgyNCwKKzB4MjEsIDB4MWMsIDB4MTgsIDB4NDgsIDB4MDIsIDB4NjgsIDB4NTIsIDB4MGMsIDB4MDYsIDB4ZDIsIDB4MDIsIDB4NjgsCisweDEyLCAweDBjLCAweDAyLCAweGQxLCAweDAwLCAweDY4LCAweDgwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIxLAorMHgwOSwgMHgwNiwgMHgwOSwgMHgwZSwgMHgxMiwgMHg0ZiwgMHgxMywgMHg0YSwgMHgwMiwgMHhkMCwgMHgzOCwgMHg2OCwKKzB4MDAsIDB4MGMsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4NmMsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MTAsIDB4NGIsCisweDk4LCAweDQyLCAweDA4LCAweGQwLCAweDAyLCAweDMzLCAweDk4LCAweDQyLCAweDA1LCAweGQwLCAweDBlLCAweDRiLAorMHg5OCwgMHg0MiwgMHgwMiwgMHhkMCwgMHgwMiwgMHgzYiwgMHg5OCwgMHg0MiwgMHgwYywgMHhkMSwgMHgwMCwgMHgyOSwKKzB4MDIsIDB4ZDAsIDB4ZjgsIDB4NmEsIDB4MDAsIDB4MGMsIDB4MDAsIDB4ZTAsCisweGQwLCAweDZjLCAweDQwLCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDI0LCAweDIwLCAweDA2LCAweDAwLCAweDBlLAorMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYiwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4OTksIDB4MDAsIDB4MDAsCisweDA3LCAweDk5LCAweDAwLCAweDAwLCAweDBjLCAweDQ4LCAweDAxLCAweDY4LCAweDQ5LCAweDBjLCAweDA1LCAweGQyLAorMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNSwgMHhkMSwgMHgwMCwgMHg2OCwgMHg4MCwgMHgwYSwgMHgwMiwgMHhkMywKKzB4MDgsIDB4NDgsIDB4ODAsIDB4NjgsIDB4MDEsIDB4ZTAsIDB4MDgsIDB4NDgsIDB4NDAsIDB4NmMsIDB4MDAsIDB4MDQsCisweDAwLCAweDBjLCAweDAwLCAweDIxLCAweDAzLCAweDI4LCAweDAzLCAweGQwLCAweDQwLCAweDA4LCAweDAxLCAweGQzLAorMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwOCwgMHgxYywgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKzB4MDAsIDB4MDAsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDEsIDB4MjcsCisweDFhLCAweDRjLCAweDI1LCAweDY4LCAweGZmLCAweGY3LCAweDcyLCAweGZmLCAweDAzLCAweDFjLCAweDE5LCAweDRhLAorMHgwMiwgMHgyMSwgMHgwMSwgMHgyNiwgMHgxOCwgMHg0OCwgMHgwMSwgMHgyYiwgMHgxYiwgMHhkMSwgMHhjYiwgMHgwNCwKKzB4MWUsIDB4NjAsIDB4NTUsIDB4MjMsIDB4MDMsIDB4NjAsIDB4MDAsIDB4MjMsIDB4NDMsIDB4NjAsIDB4MDYsIDB4NjgsCisweDU1LCAweDJlLCAweDFiLCAweGQxLCAweGFhLCAweDI2LCAweDA2LCAweDYwLCAweDQzLCAweDYwLCAweDAzLCAweDY4LAorMHhhYSwgMHgyYiwgMHgxNSwgMHhkMSwgMHgwOSwgMHgyMywgMHgwMywgMHg2MCwgMHgwNSwgMHgyMywgMHgwZiwgMHg0ZiwKKzB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsIDB4MDMsIDB4MjMsIDB4MGUsIDB4NGYsIDB4YzAsIDB4NDYsIDB4M2IsIDB4NjAsCisweDExLCAweDYwLCAweDA3LCAweDY4LCAweDA4LCAweGUwLCAweDA4LCAweDIzLCAweDIzLCAweDYwLCAweDA0LCAweDIzLAorMHgwYSwgMHg0ZiwgMHhjMCwgMHg0NiwgMHgzYiwgMHg2MCwgMHgxMSwgMHg2MCwgMHgwNiwgMHg2MCwgMHgyNywgMHg2OCwKKzB4YzAsIDB4NDYsIDB4MjUsIDB4NjAsIDB4MzgsIDB4MWMsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDAwLCAweDAwLCAweDIwLCAweDQwLCAweDAwLCAweDAwLCAweDI0LCAweDQwLCAweDAwLCAweDAwLCAweDIyLCAweDQwLAorMHgwMCwgMHgwMCwgMHgyYSwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyNiwgMHg0MCwgMHgwMCwgMHgwMCwgMHgyOCwgMHg0MCwKKzB4ODAsIDB4YjUsIDB4MDcsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4MzAsIDB4ZmYsIDB4MDEsIDB4MjgsIDB4MDUsIDB4ZDEsCisweDE5LCAweDQ4LCAweDAwLCAweDY4LCAweDE5LCAweDQ5LCAweDQ5LCAweDZiLCAweDA4LCAweDQwLCAweDIyLCAweGUwLAorMHgxOCwgMHg0OCwgMHgwMSwgMHg2OCwgMHg0OSwgMHgwYywgMHgwNSwgMHhkMiwgMHgwMSwgMHg2OCwgMHgwOSwgMHgwYywKKzB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MTQsIDB4NDgsIDB4MDAsIDB4NjgsCisweDAwLCAweDBjLCAweDAxLCAweGUwLCAweDEzLCAweDQ4LCAweDgwLCAweDZjLCAweDAwLCAweDA0LCAweDAwLCAweDBjLAorMHgxMiwgMHg0YiwgMHhjMCwgMHgxOCwgMHgwOCwgMHgyOCwgMHgwYiwgMHhkMiwgMHgwMSwgMHhhMywgMHgxYiwgMHg1YywKKzB4NWIsIDB4MDAsIDB4OWYsIDB4NDQsIDB4MDUsIDB4MDMsIDB4MDcsIDB4MDMsIDB4MDcsIDB4MDcsIDB4MDUsIDB4MDMsCisweDAzLCAweDIwLCAweDAyLCAweGUwLCAweDAxLCAweDIwLCAweDAwLCAweGUwLCAweDAwLCAweDIwLCAweDAxLCAweDIxLAorMHgzOCwgMHg2MCwgMHg4MCwgMHgwNywgMHgwMCwgMHhkMSwgMHgwMCwgMHgyMSwgMHgwOCwgMHgwNiwgMHgwMCwgMHgwZSwKKzB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MzQsIDB4NmUsIDB4MjEsIDB4NDAsCisweDAwLCAweDAwLCAweDExLCAweDQwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDAwLCAweDAwLCAweDE4LCAweDQwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmZSwgMHg2NiwgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHg4MiwgMHhiMCwKKzB4MDcsIDB4MWMsIDB4MDEsIDB4MjAsIDB4MDEsIDB4OTAsIDB4ZmYsIDB4ZjcsIDB4ZTcsIDB4ZmUsIDB4MDEsIDB4MjgsCisweDEzLCAweGQxLCAweDM4LCAweDJmLCAweDAxLCAweGQwLCAweGE4LCAweDJmLCAweDA3LCAweGQxLCAweDAwLCAweDI2LAorMHhmNiwgMHg0MywgMHgzNCwgMHgxYywgMHhhOCwgMHgyZiwgMHgwMiwgMHhkMSwgMHgzMCwgMHgxYywgMHgwMCwgMHg5NiwKKzB4MzUsIDB4MWMsIDB4MTEsIDB4MjAsIDB4MDAsIDB4MDQsIDB4MDYsIDB4NjIsIDB4NDQsIDB4NjIsIDB4ODUsIDB4NjIsCisweDAwLCAweDk5LCAweGMwLCAweDQ2LCAweGMxLCAweDYyLCAweDAwLCAweDIxLCAweDA4LCAweDQ4LCAweGMwLCAweDQ2LAorMHgwMSwgMHg2MCwgMHgzOCwgMHgyZiwgMHgwMSwgMHhkMCwgMHhhOCwgMHgyZiwgMHgwNSwgMHhkMSwgMHgwMSwgMHgyMSwKKzB4MDEsIDB4NjAsIDB4YTgsIDB4MmYsIDB4MDEsIDB4ZDEsIDB4MDMsIDB4MjEsIDB4MDEsIDB4NjAsIDB4MDEsIDB4OTgsCisweDAyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDM0LCAweDZlLCAweDIxLCAweDQwLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg5MCwgMHhiNSwgMHgwNywgMHgxYywKKzB4MTIsIDB4NGMsIDB4MjEsIDB4NjgsIDB4MTIsIDB4NDgsIDB4ODEsIDB4NDIsIDB4MGIsIDB4ZDAsIDB4MDAsIDB4MjMsCisweDIxLCAweDFjLCAweGUyLCAweDFkLCAweGMxLCAweDMyLCAweDAwLCAweGUwLAorMHgwOCwgMHhjMSwgMHg5MSwgMHg0MiwgMHhmYywgMHhkMywgMHgyMCwgMHg2MCwgMHhjOCwgMHgyMCwgMHhhMCwgMHg4MCwKKzB4NjcsIDB4NzIsIDB4MzgsIDB4MDEsIDB4MDAsIDB4ZjAsIDB4MTgsIDB4ZjgsIDB4MjcsIDB4NzIsIDB4MGEsIDB4NDgsCisweGMwLCAweDQ2LCAweGUwLCAweDYwLCAweDA5LCAweDJmLCAweDAwLCAweGRiLCAweDAwLCAweDI3LCAweGUwLCAweDE5LAorMHgwMSwgMHg3ZCwgMHgwMSwgMHgzMSwgMHgwMSwgMHg3NSwgMHhlMCwgMHg4OCwgMHgwMSwgMHgzMCwgMHhlMCwgMHg4MCwKKzB4MDEsIDB4MjAsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsCisweGVlLCAweGZmLCAweGMwLCAweGQwLCAweDA4LCAweDEwLCAweDAwLCAweDAzLCAweDgwLCAweGI0LCAweDA4LCAweDRhLAorMHhkMSwgMHgxZCwgMHg4OSwgMHgzMSwgMHgwYiwgMHg3YSwgMHgyMCwgMHgyYiwgMHgwMSwgMHhkMywgMHgwMCwgMHgyMywKKzB4MGIsIDB4NzIsIDB4MDcsIDB4MWMsIDB4MDgsIDB4N2EsIDB4NDMsIDB4MWMsIDB4MGIsIDB4NzIsIDB4ODAsIDB4MTgsCisweDkwLCAweDMwLCAweDQ3LCAweDcyLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDgwLAorMHgwNywgMHg0OSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwgMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwMSwgMHgyMCwKKzB4MDAsIDB4MmEsIDB4MDYsIDB4ZDEsIDB4MGEsIDB4NjgsIDB4MTIsIDB4MGMsIDB4MDIsIDB4ZDEsIDB4MDksIDB4NjgsCisweDg5LCAweDBhLCAweDAwLCAweGQyLCAweDAwLCAweDIwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDEwLCAweDQwLAorMHg5MCwgMHhiNSwgMHgwNywgMHgxYywgMHgwOSwgMHg0YywgMHgzOCwgMHgxYywgMHgyMSwgMHgxYywgMHhmYywgMHhmNywKKzB4OTEsIDB4ZmYsIDB4MzgsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MGUsIDB4ZjgsIDB4MDEsIDB4MjMsIDB4ZDgsIDB4NDIsCisweDAxLCAweGQxLCAweDAwLCAweDBjLCAweGUwLCAweDgwLCAweDAwLCAweDIxLCAweDIwLCAweDFjLCAweGZjLCAweGY3LAorMHhjNSwgMHhmZSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhjNCwgMHg2NiwgMHgyMSwgMHg0MCwKKzB4ZjgsIDB4YjUsIDB4MDcsIDB4MWMsIDB4NzksIDB4N2EsIDB4NzYsIDB4NDgsIDB4MDAsIDB4MjMsIDB4NzYsIDB4NGMsCisweDAxLCAweDI5LCAweDVkLCAweGQxLCAweGEyLCAweDg4LCAweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweGExLCAweDg5LAorMHg4YSwgMHg0MiwgMHg3NCwgMHhkYSwgMHhmYSwgMHg3YSwgMHgwMCwgMHgyYSwgMHgxNSwgMHhkMCwgMHg3YSwgMHg2YywKKzB4MDAsIDB4MmEsIDB4MTIsIDB4ZDAsIDB4OGEsIDB4NDIsIDB4MTAsIDB4ZDgsIDB4MDAsIDB4OWEsIDB4NTEsIDB4MWMsCisweGExLCAweDgwLCAweGExLCAweDg4LCAweGMwLCAweDQ2LCAweDQxLCAweDgxLCAweDc4LCAweDZjLCAweDZiLCAweDRlLAorMHhjMCwgMHg0NiwgMHhmMCwgMHg4MCwgMHhhMCwgMHg2YSwgMHg1OCwgMHgyMywgMHg3OSwgMHg2YywgMHg1OSwgMHg0MywKKzB4NDAsIDB4MTgsIDB4YzEsIDB4MWEsIDB4MjgsIDB4ZTAsIDB4MjIsIDB4ODgsIDB4MDEsIDB4MzIsIDB4MTIsIDB4MDQsCisweDEyLCAweDBjLCAweDIyLCAweDgwLCAweDhhLCAweDQyLCAweDAwLCAweGRiLCAweDIzLCAweDgwLCAweDAwLCAweDIyLAorMHgwMCwgMHgyOSwgMHg2OSwgMHhkZCwgMHg1ZiwgMHg0YywgMHhhNCwgMHg2YSwgMHg1ZSwgMHg0YiwgMHgxZCwgMHg4OCwKKzB4NTgsIDB4MjMsIDB4NmIsIDB4NDMsIDB4ZTMsIDB4MTgsIDB4ZGUsIDB4MWQsIDB4MDEsIDB4MzYsIDB4MDEsIDB4MjMsCisweDliLCAweDA3LCAweDMzLCAweDQzLCAweDFiLCAweDY4LCAweDFiLCAweDA2LCAweDE1LCAweGQxLCAweDU4LCAweDQ5LAorMHgwMCwgMHg5YSwgMHgwMSwgMHgzMiwgMHg4YSwgMHg4MCwgMHg4YSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0MiwgMHg4MSwKKzB4MDgsIDB4ODgsIDB4MDEsIDB4MzAsIDB4NTQsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjAsIDB4ODAsIDB4NTgsIDB4MjAsCisweDY4LCAweDQzLCAweDIxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweDM5LCAweGZiLCAweGYwLCAweDg4LAorMHgwMCwgMHgwNCwgMHgwMCwgMHgxNCwgMHg5NSwgMHhlMCwgMHg0ZCwgMHg0YiwgMHgwMSwgMHgzNSwgMHgyZCwgMHgwNCwKKzB4MmQsIDB4MGMsIDB4MWQsIDB4ODAsIDB4OGQsIDB4NDIsIDB4MDEsIDB4ZGIsIDB4MDAsIDB4MjUsIDB4MWQsIDB4ODAsCisweDAxLCAweDMyLCAweDEyLCAweDA0LCAweDEyLCAweDE0LCAweDkxLCAweDQyLCAweGNlLCAweGRjLCAweDgxLCAweGUwLAorMHhlMSwgMHg4OCwgMHhlMiwgMHg4OSwgMHg5MSwgMHg0MiwgMHgxOCwgMHhkYSwgMHhmOSwgMHg3YSwgMHgwMCwgMHgyOSwKKzB4MmYsIDB4ZDAsIDB4NzksIDB4NmMsIDB4NDksIDB4MDQsIDB4NDksIDB4MGMsIDB4NzksIDB4NjQsIDB4MmEsIDB4ZDAsCisweGUyLCAweDg5LCAweDkxLCAweDQyLCAweDI3LCAweGQ4LCAweGUxLCAweDg4LCAweDAxLCAweDMxLCAweGUxLCAweDgwLAorMHhlMSwgMHg4OCwgMHhjMCwgMHg0NiwgMHg4MSwgMHg4MSwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHg3OCwgMHg2YywKKzB4MTgsIDB4NDMsIDB4M2EsIDB4NGUsIDB4YzAsIDB4NDYsIDB4ZjAsIDB4ODAsIDB4MDAsIDB4ZTAsIDB4NjMsIDB4ZTAsCisweGUwLCAweDZhLCAweDc5LCAweDZjLCAweDRiLCAweDAwLCAweDU5LCAweDE4LCAweDQ5LCAweDAxLCAweDQwLCAweDE4LAorMHhjMSwgMHgxZiwgMHg1OSwgMHgzOSwgMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHgwZiwgMHhmYiwgMHhlMCwgMHg2YSwKKzB4NzksIDB4NmMsIDB4NGEsIDB4MDAsIDB4NTIsIDB4MTgsIDB4NTIsIDB4MDEsIDB4ODAsIDB4MTgsIDB4MDEsIDB4MzksCisweDA5LCAweDA0LCAweDA5LCAweDBjLCAweDYwLCAweDM4LCAweDAwLCAweGYwLCAweDg5LCAweGZiLCAweGI2LCAweGU3LAorMHg0YSwgMHhlMCwgMHg2MSwgMHg4OCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwKKzB4MDksIDB4MGMsIDB4NjEsIDB4ODAsIDB4ZTIsIDB4ODksIDB4OTEsIDB4NDIsIDB4MDAsIDB4ZGIsIDB4NjMsIDB4ODAsCisweDAwLCAweDIxLCAweDAwLCAweDJhLCAweDNlLCAweGRkLCAweDI0LCAweDRjLCAweGU0LCAweDZhLCAweDIzLCAweDRiLAorMHg1ZCwgMHg4OCwgMHg2YiwgMHgwMCwgMHg1YiwgMHgxOSwgMHg1YiwgMHgwMSwgMHhlMywgMHgxOCwgMHhkZSwgMHgxZCwKKzB4MDEsIDB4MzYsIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MzMsIDB4NDMsIDB4MWIsIDB4NjgsIDB4MWIsIDB4MDYsCisweDIwLCAweGQxLCAweDFjLCAweDRlLCAweGYxLCAweDg4LCAweDAxLCAweDMxLCAweGYxLCAweDgwLCAweGYxLCAweDg4LAorMHhjMCwgMHg0NiwgMHg4MSwgMHg4MSwgMHg3MCwgMHg4OCwgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywgMHgwMSwgMHgzMCwKKzB4MTgsIDB4NDMsIDB4MTcsIDB4NDksIDB4YzAsIDB4NDYsIDB4YzgsIDB4ODAsIDB4NjgsIDB4MDAsIDB4NDAsIDB4MTksCisweDQwLCAweDAxLCAweDIxLCAweDE4LCAweDM4LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGZhLCAweDcxLCAweDg4LAorMHg0YSwgMHgwMCwgMHg1MiwgMHgxOCwgMHg1MiwgMHgwMSwgMHhmMCwgMHg2YSwgMHg4MCwgMHgxOCwgMHgwMCwgMHhmMCwKKzB4NGQsIDB4ZmIsIDB4MGUsIDB4NDksIDB4YzgsIDB4ODgsIDB4NzksIDB4ZTcsIDB4MGIsIDB4NGIsIDB4MDEsIDB4MzUsCisweDJkLCAweDA0LCAweDJkLCAweDBjLCAweDVkLCAweDgwLCAweDk1LCAweDQyLCAweDAxLCAweGRiLCAweDAwLCAweDI1LAorMHg1ZCwgMHg4MCwgMHgwMSwgMHgzMSwgMHgwOSwgMHgwNCwgMHgwOSwgMHgxNCwgMHg4YSwgMHg0MiwgMHhjMiwgMHhkYywKKzB4MDEsIDB4ODksIDB4MDEsIDB4MzEsIDB4MDEsIDB4ODEsIDB4MDAsIDB4MjAsIDB4YzAsIDB4NDMsIDB4ZjgsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDRjLCAweDJiLCAweDAwLCAweDgwLCAweDRjLCAweDJhLCAweDAwLCAweDgwLAorMHhjNCwgMHg2NiwgMHgyMSwgMHg0MCwgMHhmMCwgMHhiNCwgMHgwNiwgMHgxYywgMHgwMSwgMHgyMywgMHhkYiwgMHgwMywKKzB4MzMsIDB4NDAsIDB4MDEsIDB4MjQsIDB4NDQsIDB4NGYsIDB4MDAsIDB4MjAsIDB4NDQsIDB4NGEsIDB4NDUsIDB4NGQsCisweGQxLCAweDFkLCAweDM5LCAweDMxLCAweDAwLCAweDJiLCAweDQxLCAweGQwLCAweGUzLCAweDAzLCAweGYzLCAweDFhLAorMHg3MywgMHhkMCwgMHhlZSwgMHg4OSwgMHg5ZSwgMHg0MiwgMHg3MSwgMHhkMywgMHhlZSwgMHg4OCwgMHgwMCwgMHgyZSwKKzB4NmQsIDB4ZDAsIDB4ZWQsIDB4NmEsIDB4NWUsIDB4MWUsIDB4NzMsIDB4MDAsIDB4OWIsIDB4MTksIDB4NWIsIDB4MDEsCisweGVkLCAweDE4LCAweGFlLCAweDY4LCAweDM2LCAweDA2LCAweDM2LCAweDBlLCAweDAzLCAweDJlLCAweDAyLCAweGQwLAorMHhjZSwgMHg4OSwgMHgwMSwgMHgzNiwgMHhjZSwgMHg4MSwgMHg0MCwgMHgzNSwgMHhhZCwgMHg4YiwgMHhhZCwgMHgwMCwKKzB4MzUsIDB4NGUsIDB4NzYsIDB4NmEsIDB4YzAsIDB4NDYsIDB4NzAsIDB4NTEsIDB4NTUsIDB4ODksIDB4MDEsIDB4MzUsCisweDU1LCAweDgxLCAweDMyLCAweDRlLCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweDkwLCAweDYwLCAweGYyLCAweDZhLAorMHhkMiwgMHgxOCwgMHg5MCwgMHg2MywgMHhmMiwgMHg2YSwgMHhkMiwgMHgxOCwgMHhkMCwgMHg2MywgMHhmMiwgMHg2YSwKKzB4ZDIsIDB4MTgsIDB4MTAsIDB4NjQsIDB4ZjIsIDB4NmEsIDB4ZDIsIDB4MTgsIDB4NTAsIDB4NjQsIDB4ZjIsIDB4NmEsCisweGQyLCAweDE4LCAweDkwLCAweDY0LCAweGYyLCAweDZhLCAweGQyLCAweDE4LCAweGQwLCAweDY0LCAweGYwLCAweDg4LAorMHgwMSwgMHgzOCwgMHhmMCwgMHg4MCwgMHhmMCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg4OCwgMHg4MSwgMHgyNCwgMHg0OSwKKzB4MDAsIDB4MjgsIDB4MzksIDB4ZDEsIDB4NGYsIDB4ODAsIDB4MzcsIDB4ZTAsIDB4MDAsIDB4MmUsIDB4MzgsIDB4ZDksCisweGFiLCAweDg5LCAweGIzLCAweDQyLCAweDMwLCAweGQzLCAweGFiLCAweDg4LCAweDAwLCAweDJiLCAweDJjLCAweGQwLAorMHg1MywgMHg4OSwgMHgwMSwgMHgzMywgMHg1MywgMHg4MSwgMHgyYSwgMHgxYywgMHhhZCwgMHg2YSwgMHg1OCwgMHgyMywKKzB4MDEsIDB4M2UsIDB4NzMsIDB4NDMsIDB4ZWQsIDB4MTgsIDB4YWUsIDB4NjgsIDB4MzYsIDB4MDYsIDB4MzYsIDB4MGUsCisweDAzLCAweDJlLCAweDAyLCAweGQwLCAweGNlLCAweDg5LCAweDAxLCAweDM2LCAweGNlLCAweDgxLCAweGE4LCAweDYwLAorMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhhOCwgMHg2MywgMHg5NSwgMHg2YSwgMHhlZCwgMHgxOCwgMHhlOCwgMHg2MywKKzB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4MjgsIDB4NjQsIDB4OTUsIDB4NmEsIDB4ZWQsIDB4MTgsIDB4NjgsIDB4NjQsCisweDk1LCAweDZhLCAweGVkLCAweDE4LCAweGE4LCAweDY0LCAweDk1LCAweDZhLCAweGViLCAweDE4LCAweGQ4LCAweDY0LAorMHg5MCwgMHg4OCwgMHgwMSwgMHgzOCwgMHg5MCwgMHg4MCwgMHg5MCwgMHg4OCwgMHhjMCwgMHg0NiwgMHg0OCwgMHg4MSwKKzB4MDAsIDB4MjgsIDB4MDMsIDB4ZDEsIDB4MDEsIDB4ZTAsIDB4MDQsIDB4ZTAsIDB4MDMsIDB4ZTAsIDB4MTcsIDB4ODAsCisweDIwLCAweDFjLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweGNhLCAweDg5LCAweDAxLCAweDMyLCAweGNhLCAweDgxLAorMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKKzB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDAsIDB4MjEsIDB4NDEsIDB4NjAsIDB4MTAsIDB4NDksCisweDRhLCAweDY4LCAweDAwLCAweDJhLCAweDEwLCAweGQxLCAweGNhLCAweDY4LCAweDAwLCAweDJhLCAweDA0LCAweGQwLAorMHhjYSwgMHgxZCwgMHgxOSwgMHgzMiwgMHgxMiwgMHg3OSwgMHgwMCwgMHgyYSwgMHgwOCwgMHhkMCwgMHg0YSwgMHg2OSwKKzB4MDAsIDB4MmEsIDB4MGIsIDB4ZDEsIDB4ODgsIDB4NjEsIDB4NDgsIDB4NjEsCisweDAwLCAweGYwLCAweDEwLCAweGY4LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDRhLCAweDY5LCAweDAwLCAweDJhLAorMHgwMiwgMHhkMSwgMHg4OCwgMHg2MSwgMHg0OCwgMHg2MSwgMHhmNywgMHhlNywgMHg4YSwgMHg2OSwgMHhjMCwgMHg0NiwKKzB4NTAsIDB4NjAsIDB4ODgsIDB4NjEsIDB4ZjIsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsCisweGIwLCAweGI1LCAweDJhLCAweDQ4LCAweDQwLCAweDY5LCAweDAwLCAweDI4LCAweDRjLCAweGQwLCAweDA4LCAweDIyLAorMHhjMSwgMHg2OCwgMHgwYSwgMHg0MCwgMHgwMCwgMHgyNywgMHgyNywgMHg0YiwgMHhkOSwgMHgxZCwgMHhiOSwgMHgzMSwKKzB4MDAsIDB4MmEsIDB4MTEsIDB4ZDAsIDB4MDQsIDB4MjIsIDB4MjUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjEsCisweDI0LCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYyLCAweDI0LCAweDRjLCAweGMwLCAweDQ2LCAweDhjLCAweDYyLAorMHgyMywgMHg0YywgMHhjMCwgMHg0NiwgMHhjYywgMHg2MiwgMHgyMywgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MywKKzB4NGYsIDB4NjMsIDB4MTIsIDB4ZTAsIDB4MDUsIDB4MjIsIDB4MjEsIDB4NGMsIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjEsCisweDIwLCAweDRjLCAweGMwLCAweDQ2LCAweDRjLCAweDYyLCAweDIwLCAweDRjLCAweGMwLCAweDQ2LCAweDhjLCAweDYyLAorMHgxZiwgMHg0YywgMHhjMCwgMHg0NiwgMHhjYywgMHg2MiwgMHgxZiwgMHg0YywgMHhjMCwgMHg0NiwgMHgwYywgMHg2MywKKzB4MWUsIDB4NGMsIDB4YzAsIDB4NDYsIDB4NGMsIDB4NjMsIDB4NDAsIDB4MjQsIDB4Y2MsIDB4ODIsIDB4NGYsIDB4ODMsCisweDFjLCAweDRmLCAweDAwLCAweDIxLCAweDAwLCAweDJhLCAweDBjLCAweGQ5LCAweDhjLCAweDAwLCAweDA1LCAweDE5LAorMHg2ZCwgMHg2YSwgMHg3ZCwgMHg0MCwgMHhlNCwgMHgxOCwgMHhmZiwgMHgzNCwgMHgwMSwgMHgzNCwgMHg2NSwgMHg2MiwKKzB4MDEsIDB4MzEsIDB4OTEsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MTAsIDB4MjksIDB4MDcsIDB4ZDIsIDB4OGEsIDB4MDAsCisweGQyLCAweDE4LCAweGZmLCAweDMyLCAweDAxLCAweDMyLCAweDU3LCAweDYyLCAweDAxLCAweDMxLCAweDEwLCAweDI5LAorMHhmNywgMHhkMywgMHgxMSwgMHg0OSwgMHgwMCwgMHhmMCwgMHgyMiwgMHhmOCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NmMsIDB4MDYsIDB4MDAsIDB4ODAsIDB4YWMsIDB4YWIsIDB4MjAsIDB4NDAsCisweDI4LCAweDAxLCAweDQwLCAweDAwLCAweDAxLCAweDIzLCAweDQ1LCAweDY3LCAweDg5LCAweGFiLCAweGNkLCAweGVmLAorMHhmZSwgMHhkYywgMHhiYSwgMHg5OCwgMHg3NiwgMHg1NCwgMHgzMiwgMHgxMCwgMHgyMCwgMHgwMSwgMHg0MCwgMHgwMCwKKzB4NjcsIDB4NDUsIDB4MjMsIDB4MDEsIDB4ZWYsIDB4Y2QsIDB4YWIsIDB4ODksIDB4OTgsIDB4YmEsIDB4ZGMsIDB4ZmUsCisweDEwLCAweDMyLCAweDU0LCAweDc2LCAweGMzLCAweGQyLCAweGUxLCAweGYwLCAweDM2LCAweDM2LCAweDM2LCAweDM2LAorMHgzMCwgMHg4MCwgMHgyMCwgMHg0MCwgMHhiMCwgMHhiNSwgMHgwZiwgMHgxYywgMHgxNSwgMHg0ZCwgMHhlOSwgMHgxZCwKKzB4YzksIDB4MzEsIDB4MTUsIDB4NGMsIDB4MjMsIDB4MWMsIDB4MTUsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZjcsCisweDQ0LCAweGZiLCAweGU5LCAweDFkLCAweGZmLCAweDMxLCAweDFlLCAweDMxLCAweDIzLCAweDFjLCAweDBkLCAweDFjLAorMHgxMSwgMHg0YSwgMHgwMSwgMHgyMCwgMHhmYywgMHhmNywgMHgzYiwgMHhmYiwgMHgyOSwgMHgxYywgMHgyMywgMHgxYywKKzB4MGUsIDB4NGEsIDB4MDAsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MzUsIDB4ZmIsIDB4MzksIDB4MWMsIDB4MjMsIDB4MWMsCisweDBjLCAweDRhLCAweDAxLCAweDIwLCAweGZjLCAweGY3LCAweDJmLCAweGZiLCAweDAwLCAweDIxLCAweDBiLCAweDQ4LAorMHhjMiwgMHgxZCwgMHgxOSwgMHgzMiwgMHg1MSwgMHg3MSwgMHgwMSwgMHgyMSwgMHhmZiwgMHgzMCwgMHgwMSwgMHgzMCwKKzB4NDEsIDB4NjIsIDB4MDgsIDB4MWMsIDB4YjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCisweGFjLCAweGFiLCAweDIwLCAweDQwLCAweDc1LCAweDA4LCAweGZmLCAweGZmLCAweDI4LCAweDAwLCAweDAzLCAweDAwLAorMHg0MCwgMHgwMCwgMHgwMiwgMHgwMCwgMHgxNCwgMHgwMCwgMHgwNywgMHgwMCwgMHg2YywgMHgwNiwgMHgwMCwgMHg4MCwKKzB4ZjAsIDB4YjUsIDB4MzcsIDB4NGEsIDB4NTAsIDB4NjksIDB4MDEsIDB4MjMsIDB4OWIsIDB4MDcsIDB4MDgsIDB4MzAsCisweDE4LCAweDQzLCAweDAwLCAweDY4LCAweDAxLCAweDA2LCAweDA5LCAweDBlLCAweDMzLCAweDRiLCAweDAxLCAweDI5LAorMHg0OSwgMHhkMSwgMHgxZiwgMHg2OCwgMHgxOSwgMHgxYywgMHgzMiwgMHg0YiwgMHg5ZiwgMHg0MiwgMHgwNCwgMHhkMSwKKzB4ZmYsIDB4ZjcsIDB4M2UsIDB4ZmYsIDB4ZjAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjMsCisweDlmLCAweDAwLCAweGNjLCAweDU5LCAweDU1LCAweDY5LCAweGVmLCAweDE5LCAweDNjLCAweDYxLCAweDAxLCAweDMzLAorMHgwNSwgMHgyYiwgMHhmNywgMHhkMywgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMiwgMHgwMiwgMHgyMywgMHgxOCwgMHg0MywKKzB4NTMsIDB4NjksIDB4YzAsIDB4NDYsIDB4OTgsIDB4NjAsIDB4NTAsIDB4NjksIDB4MDgsIDB4MjMsIDB4YzIsIDB4NjgsCisweDEzLCAweDQwLCAweDI1LCAweDRmLCAweGZhLCAweDFkLCAweGI5LCAweDMyLCAweDAwLCAweDJiLCAweDAyLCAweGQwLAorMHgwNCwgMHgyMywgMHgyMywgMHg0YywgMHgwMSwgMHhlMCwgMHgwNSwgMHgyMywgMHgyMiwgMHg0YywgMHhjMCwgMHg0NiwKKzB4MTQsIDB4NjEsIDB4NDAsIDB4MjQsIDB4ZDQsIDB4ODIsIDB4MDAsIDB4MjQsIDB4NTQsIDB4ODMsIDB4MjAsIDB4NGMsCisweDAwLCAweDIyLCAweDAwLCAweDJiLCAweDBjLCAweGQ5LCAweDk1LCAweDAwLAorMHg0NiwgMHgxOSwgMHg3NiwgMHg2YSwgMHg2NiwgMHg0MCwgMHhlZCwgMHgxOSwgMHhmZiwgMHgzNSwgMHgwMSwgMHgzNSwKKzB4NmUsIDB4NjIsIDB4MDEsIDB4MzIsIDB4OWEsIDB4NDIsIDB4ZjQsIDB4ZDMsIDB4MTAsIDB4MmEsIDB4MDcsIDB4ZDIsCisweDkzLCAweDAwLCAweGRiLCAweDE5LCAweGZmLCAweDMzLCAweDAxLCAweDMzLCAweDVjLCAweDYyLCAweDAxLCAweDMyLAorMHgxMCwgMHgyYSwgMHhmNywgMHhkMywgMHhmZiwgMHhmNywgMHg3MCwgMHhmZiwgMHhiYywgMHhlNywgMHgwMCwgMHgyMSwKKzB4OGYsIDB4MDAsIDB4ZGMsIDB4NTksIDB4NTUsIDB4NjksIDB4ZWYsIDB4MTksIDB4N2MsIDB4NjIsIDB4MDEsIDB4MzEsCisweDA1LCAweDI5LCAweGY3LCAweGQzLCAweDAwLCAweDBhLCAweDAwLCAweDAyLCAweDAzLCAweDIzLCAweDE4LCAweDQzLAorMHg1MSwgMHg2OSwgMHhjMCwgMHg0NiwgMHg4OCwgMHg2MCwgMHg1MCwgMHg2OSwgMHg0MCwgMHg2OCwgMHhjMCwgMHg0NiwKKzB4NTAsIDB4NjEsIDB4MDksIDB4NDgsIDB4ZmMsIDB4ZjcsIDB4YTQsIDB4ZmEsIDB4YTQsIDB4ZTcsIDB4MDAsIDB4MDAsCisweDZjLCAweDA2LCAweDAwLCAweDgwLCAweDMwLCAweDgwLCAweDIwLCAweDQwLCAweDY3LCAweDQ1LCAweDIzLCAweDAxLAorMHhhYywgMHhhYiwgMHgyMCwgMHg0MCwgMHgyOCwgMHgwMSwgMHg0MCwgMHgwMCwgMHgyMCwgMHgwMSwgMHg0MCwgMHgwMCwKKzB4NWMsIDB4NWMsIDB4NWMsIDB4NWMsIDB4MTEsIDB4MzEsIDB4ZmYsIDB4ZmYsIDB4ZjAsIDB4YjUsIDB4MDcsIDB4MWMsCisweDNiLCAweDQ4LCAweDNjLCAweDRjLCAweDA4LCAweDIxLCAweDIwLCAweDYwLCAweGExLCAweDgwLCAweDAwLCAweDIwLAorMHgyMCwgMHg4MSwgMHhlMSwgMHg4MCwgMHg2MCwgMHg4MSwgMHgzOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MCwKKzB4MzgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjEsIDB4MzgsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjEsCisweDM3LCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDYxLCAweDM3LCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDYxLAorMHgzNiwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2MiwgMHgzNiwgMHg0OCwgMHhjMCwgMHg0NiwgMHg2MCwgMHg2MiwKKzB4MzUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4YTAsIDB4NjIsIDB4MzUsIDB4NDgsIDB4YzAsIDB4NDYsIDB4ZTAsIDB4NjIsCisweDM0LCAweDQ4LCAweGMwLCAweDQ2LCAweDIwLCAweDYzLCAweDM0LCAweDQ4LCAweGMwLCAweDQ2LCAweDYwLCAweDYzLAorMHgzMywgMHg0OCwgMHhjMCwgMHg0NiwgMHhhMCwgMHg2MywgMHgzMywgMHg0OCwgMHhjMCwgMHg0NiwgMHhlMCwgMHg2MywKKzB4MzIsIDB4NDgsIDB4YzAsIDB4NDYsIDB4MjAsIDB4NjQsIDB4MzIsIDB4NDgsIDB4YzAsIDB4NDYsIDB4NjAsIDB4NjQsCisweDMxLCAweDQ4LCAweGMwLCAweDQ2LCAweGEwLCAweDY0LCAweDMxLCAweDQ4LCAweGMwLCAweDQ2LCAweGUwLCAweDY0LAorMHgzMCwgMHg0OCwgMHhjMCwgMHg0NiwgMHgyMCwgMHg2NSwgMHgzMCwgMHg0OSwgMHhjOCwgMHg2OCwgMHgwMiwgMHgwNCwKKzB4ODksIDB4NjksIDB4NGEsIDB4NDAsIDB4ZTMsIDB4MWQsIDB4NzksIDB4MzMsIDB4MDksIDB4MDQsIDB4YzksIDB4NDMsCisweGMwLCAweDQzLCAweDQ4LCAweDQwLCAweGUxLCAweDFkLCAweGI5LCAweDMxLCAweGRhLCAweDYzLCAweDA4LCAweDYwLAorMHgyOSwgMHg0ZCwgMHgyMSwgMHgxYywgMHgyYiwgMHgxYywgMHgyOSwgMHg0YSwgMHgwMCwgMHgyMCwgMHhmYywgMHhmNywKKzB4M2UsIDB4ZmEsIDB4MjgsIDB4NGEsIDB4ZTEsIDB4MWQsIDB4YjUsIDB4MzEsIDB4MDEsIDB4MjAsIDB4MmIsIDB4MWMsCisweDBlLCAweDFjLCAweGZjLCAweGY3LCAweDM2LCAweGZhLCAweDI0LCAweDRhLCAweDAwLCAweDIwLCAweDMxLCAweDFjLAorMHgyYiwgMHgxYywgMHhmYywgMHhmNywgMHgzMCwgMHhmYSwgMHhlMSwgMHgxZCwgMHg0ZCwgMHgzMSwgMHgyYiwgMHgxYywKKzB4MjAsIDB4NGEsIDB4MDEsIDB4MjAsIDB4ZmMsIDB4ZjcsIDB4MjksIDB4ZmEsIDB4ZTAsIDB4MWQsIDB4NWQsIDB4MzAsCisweDAxLCAweDY4LCAweDAwLCAweDI5LCAweGZjLCAweGQwLCAweDYwLCAweDZkLCAweGMwLCAweDQ2LCAweDM4LCAweDY1LAorMHgyMCwgMHg2ZSwgMHhjMCwgMHg0NiwgMHg3OCwgMHg2NSwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4ODAsIDB4MDAsIDB4MDgsIDB4MDAsIDB4OGMsIDB4YjksIDB4MjAsIDB4NDAsIDB4ODEsIDB4ODEsIDB4NDgsIDB4YmQsCisweDc5LCAweDU2LCAweDIzLCAweDhjLCAweDkzLCAweDBjLCAweDgyLCAweDk1LCAweDFkLCAweDBlLCAweDEyLCAweGNmLAorMHg5YiwgMHgzYiwgMHhjMCwgMHhlOSwgMHhlNiwgMHg1NSwgMHg3YywgMHg4MiwgMHg5OSwgMHhmNiwgMHg3OCwgMHgwMiwKKzB4ZDEsIDB4ZDcsIDB4MjUsIDB4NzMsIDB4NzIsIDB4OGMsIDB4MzMsIDB4MTAsIDB4ZjcsIDB4MDMsIDB4ZjEsIDB4NDIsCisweDZjLCAweDliLCAweDRhLCAweGE3LCAweDgyLCAweDhlLCAweDIzLCAweGE5LCAweDkwLCAweGIxLCAweDgyLCAweDhlLAorMHhkYywgMHgzZiwgMHhmYiwgMHgyOSwgMHgwMCwgMHg2MiwgMHgyMiwgMHg0NSwgMHg4OCwgMHgyYiwgMHhmMSwgMHg4NSwKKzB4MTIsIDB4NjEsIDB4ZDEsIDB4NzMsIDB4NmUsIDB4YjEsIDB4MTEsIDB4MTYsIDB4MDgsIDB4ODMsIDB4MjAsIDB4NDAsCisweDc1LCAweDA4LCAweGZmLCAweGZmLCAweDU0LCAweDAwLCAweDAzLCAweDAwLCAweDA4LCAweDAwLCAweDAyLCAweDAwLAorMHgxNCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHhiNSwgMHgwZiwgMHgxYywgMHgzOSwgMHgxYywgMHgwMCwgMHhmMCwKKzB4MzMsIDB4ZjgsIDB4MzgsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4NGMsIDB4ZmYsIDB4MDMsIDB4NDgsIDB4MDEsIDB4ODksCisweDAxLCAweDMxLCAweDAxLCAweDgxLCAweDgwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgxYywKKzB4MGYsIDB4MWMsIDB4MjAsIDB4MWMsIDB4MzksIDB4MWMsIDB4MDAsIDB4ZjAsIDB4MWYsIDB4ZjgsIDB4ZTAsIDB4NjgsCisweDAxLCAweDBlLCAweGZmLCAweDIyLCAweDEyLCAweDA0LCAweDAyLCAweDQwLCAweDEyLCAweDBhLCAweDExLCAweDQzLAorMHhmZiwgMHgyMiwgMHgxMiwgMHgwMiwgMHgwMiwgMHg0MCwgMHgxMiwgMHgwMiwgMHgxMSwgMHg0MywgMHgwMCwgMHgwNiwKKzB4MDgsIDB4NDMsIDB4MzgsIDB4NjUsIDB4MjAsIDB4NjksIDB4YzAsIDB4NDYsIDB4NzgsIDB4NjUsIDB4NjAsIDB4NjksCisweGMwLCAweDQ2LCAweGI4LCAweDY1LCAweDAzLCAweDQ4LCAweDAxLCAweDg5LCAweDAxLCAweDMxLCAweDAxLCAweDgxLAorMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKKzB4OTAsIDB4YjUsIDB4MDAsIDB4MjIsIDB4OTMsIDB4MDAsIDB4MWYsIDB4MTgsIDB4YmYsIDB4NjksIDB4NWIsIDB4MTgsCisweDVmLCAweDYyLCAweDAxLCAweDMyLCAweDA1LCAweDJhLCAweGY3LCAweGQzLCAweDA3LCAweDdhLCAweGZiLCAweDA4LAorMHgwMywgMHhkMywgMHgwMCwgMHgyMywgMHg5MiwgMHgwMCwgMHg1MiwgMHgxOCwgMHgxMywgMHg2MiwgMHgwNywgMHg2YiwKKzB4YzAsIDB4NDYsIDB4OGYsIDB4NjMsIDB4YzcsIDB4NmEsIDB4YzAsIDB4NDYsIDB4Y2YsIDB4NjMsIDB4ODcsIDB4NmIsCisweGMwLCAweDQ2LCAweDBmLCAweDY0LCAweDQ3LCAweDZiLCAweGMwLCAweDQ2LCAweDRmLCAweDY0LCAweDA3LCAweDZjLAorMHhjMCwgMHg0NiwgMHg4ZiwgMHg2NCwgMHhjMiwgMHg2YiwgMHhjMCwgMHg0NiwgMHhjYSwgMHg2NCwgMHhjMiwgMHg4OCwKKzB4YzAsIDB4NDYsIDB4MGEsIDB4ODAsIDB4ODIsIDB4N2EsIDB4MTIsIDB4MDYsIDB4MDMsIDB4N2EsIDB4MWIsIDB4MDQsCisweDFhLCAweDQzLCAweGMzLCAweDg4LCAweDFiLCAweDAyLCAweDFhLCAweDQzLCAweDQzLCAweDdhLCAweGRiLCAweDA3LAorMHgxYSwgMHg0MywgMHg4YSwgMHg2MCwgMHgxNywgMHgxYywgMHg4MywgMHg3YSwgMHg1YSwgMHgwOCwgMHgwNSwgMHhkMywKKzB4MTQsIDB4MjIsIDB4MWMsIDB4MWMsIDB4YTMsIDB4MDgsIDB4MDIsIDB4ZDIsIDB4MTUsIDB4MjIsIDB4MDAsIDB4ZTAsCisweDAwLCAweDIyLCAweDAwLCAweDdhLCAweDQzLCAweDA4LCAweDEwLCAweGQzLCAweGMwLCAweDA4LCAweDAyLCAweGQzLAorMHg4OCwgMHgyMCwgMHgxMCwgMHg0MywgMHgwMSwgMHhlMCwgMHg4MCwgMHgyMCwgMHgxMCwgMHg0MywgMHgzYSwgMHgwYSwKKzB4MTIsIDB4MDIsIDB4MDEsIDB4MjMsIDB4MWEsIDB4NDMsIDB4YzgsIDB4NjAsIDB4OGEsIDB4NjAsIDB4MDgsIDB4MWMsCisweGZmLCAweGY3LCAweDc4LCAweGZkLCAweDA1LCAweGUwLCAweDM4LCAweDBhLCAweDAwLCAweDAyLCAweDAzLCAweDIzLAorMHgxOCwgMHg0MywgMHg4OCwgMHg2MCwgMHhjYSwgMHg2MCwgMHgwMywgMHg0OCwgMHgwMSwgMHg4OSwgMHgwMSwgMHgzMSwKKzB4MDEsIDB4ODEsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MGMsIDB4MmIsIDB4MDAsIDB4ODAsCisweGYwLCAweGI0LCAweDAyLCAweDZkLCAweDE0LCAweDRjLCAweDE1LCAweDFjLCAweGU3LCAweDY5LCAweGJkLCAweDQwLAorMHgxMywgMHgxYywgMHgyNiwgMHg2YSwgMHhmMywgMHg0MCwgMHg1ZCwgMHg0MCwgMHgyZSwgMHgxYywgMHg0NSwgMHg2ZCwKKzB4YmQsIDB4NDAsIDB4NmUsIDB4NDAsIDB4MmIsIDB4MWMsIDB4MzUsIDB4MWMsIDB4ZmQsIDB4NDAsIDB4MmYsIDB4MWMsCisweGJiLCAweDAwLCAweDY1LCAweDZhLCAweGViLCAweDU4LCAweDAwLCAweDJiLCAweDA4LCAweGQwLCAweDIzLCAweDY5LAorMHgwMSwgMHgzNywgMHg5ZiwgMHg0MiwgMHgwMCwgMHhkMywgMHgwMCwgMHgyNywgMHhiZSwgMHgwMCwgMHhhZSwgMHg1OSwKKzB4MDAsIDB4MmUsIDB4ZjcsIDB4ZDEsIDB4YTQsIDB4NjksIDB4YTIsIDB4NDAsIDB4MTEsIDB4NDMsIDB4MDUsIDB4NGIsCisweDE5LCAweDQzLCAweGJhLCAweDAwLCAweGE5LCAweDUwLCAweDQwLCAweDMwLCAweDg3LCAweDgzLCAweGYwLCAweGJjLAorMHg3MCwgMHg0NywgMHgwMCwgMHgwMCwgMHg0YywgMHgyYSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwKKzB4ODAsIDB4YjQsIDB4MDAsIDB4MjIsIDB4MDAsIDB4MjMsIDB4MDAsIDB4MjksIDB4MDUsIDB4ZDksIDB4MDcsIDB4NzgsCisweDdhLCAweDQwLCAweDAxLCAweDMwLCAweDAxLCAweDMzLCAweDhiLCAweDQyLCAweGY5LCAweGQzLCAweGQwLCAweDQzLAorMHgwMCwgMHgwNiwgMHgwMCwgMHgwZSwgMHg4MCwgMHhiYywgMHg3MCwgMHg0NywgMHhmMCwgMHhiNSwgMHgwNywgMHgxYywKKzB4MDAsIDB4MjQsIDB4ZmYsIDB4MjYsIDB4MDksIDB4MzYsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4OWEsIDB4ZjgsCisweDAwLCAweGYwLCAweGI4LCAweGY5LCAweDA1LCAweDFjLCAweDAwLCAweGYwLCAweGM3LCAweGZhLCAweDNkLCAweDcwLAorMHgyOCwgMHgxYywgMHgwMSwgMHgzNywgMHgwMSwgMHgzNCwgMHhiNCwgMHg0MiwgMHhmMSwgMHhkMywgMHhmMCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4ODAsIDB4YjUsIDB4MDAsIDB4ZjAsIDB4OTMsIDB4ZjgsIDB4MDAsIDB4ZjAsCisweGE3LCAweGY5LCAweDA3LCAweDFjLCAweDAwLCAweGYwLCAweGI2LCAweGZhLCAweDM4LCAweDBhLCAweGY2LCAweGQzLAorMHg4MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMywgMHhiNSwgMHg4MiwgMHhiMCwgMHgwMiwgMHg5OCwKKzB4NDEsIDB4MDIsIDB4NTMsIDB4MjAsIDB4MDAsIDB4ZjAsIDB4NjQsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4YTgsIDB4ZmEsCisweGZmLCAweGY3LCAweGU4LCAweGZmLCAweDAwLCAweDI0LCAweDAwLCAweDIwLCAweDAxLCAweDkwLCAweDJlLCAweDIwLAorMHgwMCwgMHg5MCwgMHgwMCwgMHgyNSwgMHgwMCwgMHgyNywgMHgwMiwgMHg5OCwgMHgwMSwgMHgyOCwgMHgwNCwgMHhkMSwKKzB4MDAsIDB4OTgsIDB4ODQsIDB4NDIsIDB4MDEsIDB4ZDMsIDB4MDAsIDB4MjYsCisweDA5LCAweGUwLCAweDAxLCAweDk4LCAweDQxLCAweDFjLCAweDAxLCAweDkxLCAweDAwLCAweGYwLCAweDYwLCAweGY4LAorMHgwMCwgMHhmMCwgMHg3ZSwgMHhmOSwgMHgwNiwgMHgxYywgMHgwMCwgMHhmMCwgMHg4ZCwgMHhmYSwgMHhmOCwgMHgwMCwKKzB4ODYsIDB4NDAsIDB4MzUsIDB4NDMsIDB4MDEsIDB4MzQsIDB4MDEsIDB4MzcsIDB4MDQsIDB4MmYsIDB4ZTYsIDB4ZDMsCisweDAzLCAweDk5LCAweDIwLCAweGMxLCAweDAzLCAweDkxLCAweGZmLCAweDIzLCAweDA5LCAweDMzLCAweDljLCAweDQyLAorMHhkZCwgMHhkMywgMHgwNCwgMHhiMCwgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHhmMCwgMHhiNSwKKzB4MDQsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MDEsIDB4MmMsIDB4MmEsIDB4ZDAsIDB4MTYsIDB4NDgsIDB4YzAsIDB4NmYsCisweDQwLCAweDIzLCAweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweDAwLCAweDI2LCAweDIwLCAweGNmLAorMHhiMSwgMHgwMCwgMHg4NCwgMHgyMCwgMHgwMCwgMHhmMCwgMHgyNCwgMHhmOCwgMHgyOCwgMHgxYywgMHgwMCwgMHhmMCwKKzB4ZGYsIDB4ZjksIDB4MjgsIDB4MGEsIDB4MDAsIDB4ZjAsIDB4ZGMsIDB4ZjksIDB4MjgsIDB4MGMsIDB4MDAsIDB4ZjAsCisweGQ5LCAweGY5LCAweDI4LCAweDBlLCAweDAwLCAweGYwLCAweGQ2LCAweGY5LCAweDAwLCAweGYwLCAweDVjLCAweGZhLAorMHgwMSwgMHgzNiwgMHg0MiwgMHgyZSwgMHhlOSwgMHhkMywgMHg2MSwgMHgwMiwgMHg4MywgMHgyMCwgMHgwMCwgMHhmMCwKKzB4MGYsIDB4ZjgsIDB4MDAsIDB4ZjAsIDB4NTMsIDB4ZmEsIDB4ZmYsIDB4ZjcsIDB4OTMsIDB4ZmYsIDB4MDQsIDB4NDgsCisweGMwLCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLCAweDAxLCAweDYwLCAweGYwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg5MCwgMHhiNSwgMHgwNCwgMHgxYywKKzB4MGYsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4NTksIDB4ZmEsIDB4MjAsIDB4MWMsIDB4MDAsIDB4ZjAsIDB4YjYsIDB4ZjksCisweDM4LCAweDBjLCAweDAwLCAweGYwLCAweGIzLCAweGY5LCAweDM4LCAweDBhLCAweDAwLCAweGYwLCAweGIwLCAweGY5LAorMHgzOCwgMHgxYywgMHgwMCwgMHhmMCwgMHhhZCwgMHhmOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4MDAsIDB4YjUsIDB4MDEsIDB4MWMsIDB4NTQsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZTcsIDB4ZmYsIDB4MDAsIDB4MjAsCisweDAwLCAweGYwLCAweGEyLCAweGY5LCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweGI1LCAweDAwLCAweGYwLAorMHgzZCwgMHhmYSwgMHg1NywgMHgyMCwgMHgwMCwgMHhmMCwgMHg5YSwgMHhmOSwgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4OTAsIDB4YjUsIDB4MDgsIDB4NGYsIDB4ZmEsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MTQsIDB4NjgsIDB4OWMsIDB4NDMsCisweDE0LCAweDYwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDY1LCAweGZmLCAweGY4LCAweDZmLCAweDIwLCAweDIzLAorMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4OTAsIDB4YjUsIDB4MDgsIDB4NGYsIDB4ZmEsIDB4NmYsIDB4MjAsIDB4MjMsCisweDE0LCAweDY4LCAweDljLCAweDQzLCAweDE0LCAweDYwLCAweDIzLCAweDFjLCAweGZmLCAweGY3LCAweDg3LCAweGZmLAorMHhmOCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHg5MCwgMHhiYywKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4MDQsIDB4MWMsCisweDBmLCAweDFjLCAweDE4LCAweDRlLCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LCAweDk5LCAweDQzLAorMHgwMSwgMHg2MCwgMHg2MSwgMHgwMiwgMHg1MywgMHgyMCwgMHhmZiwgMHhmNywgMHhhNSwgMHhmZiwgMHgwMCwgMHhmMCwKKzB4ZTksIDB4ZjksIDB4ZmYsIDB4ZjcsIDB4MjksIDB4ZmYsIDB4ZjgsIDB4MWQsIDB4MDUsIDB4MzAsIDB4MDEsIDB4MmMsCisweDAzLCAweGQxLCAweDIyLCAweDJmLCAweDAxLCAweGQzLCAweDAwLCAweDI3LCAweDBmLCAweGUwLCAweDQ0LCAweDFjLAorMHhmZiwgMHhmNywgMHhhYSwgMHhmZiwgMHgwMCwgMHhmMCwgMHhjOCwgMHhmOCwgMHgwNywgMHgxYywgMHgwMCwgMHhmMCwKKzB4ZDcsIDB4ZjksIDB4MjAsIDB4MWMsIDB4ZmYsIDB4ZjcsIDB4YTIsIDB4ZmYsIDB4MDAsIDB4ZjAsIDB4YzAsIDB4ZjgsCisweDA1LCAweDFjLCAweDAwLCAweGYwLCAweGNmLCAweGY5LCAweGYwLCAweDZmLCAweDIwLCAweDIzLCAweDAxLCAweDY4LAorMHgxOSwgMHg0MywgMHgwMSwgMHg2MCwgMHgyOCwgMHgwMiwgMHgzOCwgMHg0MywgMHhmMCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZjAsIDB4YjUsIDB4YzIsIDB4YjAsCisweDE0LCAweDFjLCAweDBkLCAweDFjLCAweDA3LCAweDFjLCAweDAxLCAweDJmLCAweDJmLCAweGQwLCAweDc5LCAweDAyLAorMHgxOSwgMHg0ZSwgMHhmMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwKKzB4NTMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4NmIsIDB4ZmYsIDB4MDAsIDB4ZjAsIDB4YWYsIDB4ZjksIDB4ZmYsIDB4ZjcsCisweGVmLCAweGZlLCAweDY4LCAweDQ2LCAweGZmLCAweGY3LCAweGQ2LCAweGZlLCAweDZhLCAweDQ2LCAweGU4LCAweDFkLAorMHgwNSwgMHgzMCwgMHgxNCwgMHg1NCwgMHgyMSwgMHgwYSwgMHg2OCwgMHg0NCwgMHg0MSwgMHg3MCwgMHg2OCwgMHg0NiwKKzB4MDAsIDB4OTksIDB4MGMsIDB4MzAsIDB4ZmYsIDB4ZjcsIDB4YmEsIDB4ZmUsIDB4MDIsIDB4YWIsIDB4MTgsIDB4NzAsCisweDAwLCAweDIwLCAweDU4LCAweDcwLCAweDY4LCAweDQ2LCAweDBjLCAweDIxLAorMHhmZiwgMHhmNywgMHhiMiwgMHhmZSwgMHgwMiwgMHhhYiwgMHg1OCwgMHg3MCwgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywKKzB4ZmYsIDB4ZjcsIDB4MTUsIDB4ZmYsIDB4ZjAsIDB4NmYsIDB4MjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsCisweDAxLCAweDYwLCAweDQyLCAweGIwLCAweGYwLCAweGJjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDAwLCAweDAwLAorMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHhmZiwgMHhiNSwgMHhjMiwgMHhiMCwgMHgwNywgMHgxYywgMHgwMSwgMHgyZiwKKzB4MDEsIDB4ZDEsIDB4MDEsIDB4MjAsIDB4MzYsIDB4ZTAsIDB4NmIsIDB4NDYsIDB4MDAsIDB4MjAsIDB4YzQsIDB4NDMsCisweDEwLCAweGMzLCAweDAxLCAweDMwLCAweDQyLCAweDI4LCAweGZiLCAweGQzLCAweDY4LCAweDQ2LCAweDBjLCAweDMwLAorMHgwMywgMHgxYywgMHgwMCwgMHgyNCwgMHgwMCwgMHgyYSwgMHgwYSwgMHhkOSwgMHgwZSwgMHg4OCwgMHhjMCwgMHg0NiwKKzB4MDYsIDB4NzAsIDB4MGUsIDB4ODgsIDB4MzYsIDB4MTIsIDB4NDYsIDB4NzAsIDB4MDIsIDB4MzAsIDB4MDIsIDB4MzEsCisweDAyLCAweDM0LCAweDk0LCAweDQyLCAweGY0LCAweGQzLCAweDAwLCAweDkyLCAweDE4LCAweDFjLCAweDExLCAweDFjLAorMHhmZiwgMHhmNywgMHg3YywgMHhmZSwgMHgwNCwgMHgxYywgMHgwMCwgMHgyMCwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhYiwKKzB4MWMsIDB4NzAsIDB4NTgsIDB4NzAsIDB4OWQsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsIDB4ZmYsIDB4ZjcsCisweDcxLCAweGZlLCAweDAyLCAweGFiLCAweDU4LCAweDcwLCAweDQ1LCAweDliLCAweDFkLCAweDA2LCAweDJkLCAweDBlLAorMHhhYywgMHg0MiwgMHgwMywgMHhkMSwgMHg2OSwgMHg0NiwgMHgzOCwgMHgxYywgMHhmZiwgMHhmNywgMHgzZSwgMHhmZiwKKzB4MDEsIDB4MjAsIDB4YWMsIDB4NDIsIDB4MDAsIDB4ZDEsIDB4MDAsIDB4MjAsIDB4NDYsIDB4YjAsIDB4ZjAsIDB4YmMsCisweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweGIwLCAweGI1LCAweGMyLCAweGIwLCAweDBmLCAweDFjLCAweDQxLCAweDAyLAorMHgxNCwgMHg0YywgMHhlMCwgMHg2ZiwgMHgyMCwgMHgyMywgMHgwMiwgMHg2OCwgMHg5YSwgMHg0MywgMHgwMiwgMHg2MCwKKzB4NTMsIDB4MjAsIDB4ZmYsIDB4ZjcsIDB4ZWYsIDB4ZmUsIDB4MDAsIDB4ZjAsIDB4MzMsIDB4ZjksIDB4ZmYsIDB4ZjcsCisweDczLCAweGZlLCAweDY4LCAweDQ2LCAweGZmLCAweGY3LCAweDVhLCAweGZlLCAweGUwLCAweDZmLCAweDIwLCAweDIzLAorMHgwMSwgMHg2OCwgMHgxOSwgMHg0MywgMHgwMiwgMHhhZCwgMHgwMSwgMHg2MCwgMHg2ZCwgMHg3OCwgMHgwMCwgMHgyNCwKKzB4MDIsIDB4YWIsIDB4NWMsIDB4NzAsIDB4NjgsIDB4NDYsIDB4MGMsIDB4MjEsIDB4ZmYsIDB4ZjcsIDB4M2MsIDB4ZmUsCisweGE4LCAweDQyLCAweDAyLCAweGQxLCAweDAwLCAweDk4LCAweDg3LCAweDQyLCAweDAxLCAweGQzLCAweDIwLCAweDFjLAorMHgwMCwgMHhlMCwgMHgwMSwgMHgyMCwgMHg0MiwgMHhiMCwgMHhiMCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywKKzB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YTAsIDB4ZTMsCisweGI0LCAweDIyLCAweDlmLCAweGU1LCAweGI0LCAweDMyLCAweDlmLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsCisweDgxLCAweDAzLCAweDgwLCAweGUxLCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4MDEsIDB4MDMsIDB4ODAsIDB4ZTEsCisweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKKzB4MDAsIDB4MTAsIDB4OTMsIDB4ZTUsIDB4ODEsIDB4MDIsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwKKzB4MDEsIDB4MDIsIDB4ODAsIDB4ZTEsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHg4MSwgMHgwMSwgMHg4MCwgMHhlMSwKKzB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCisweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHg5MywgMHhlNSwgMHgwMSwgMHgwMSwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAorMHg4MSwgMHgwMCwgMHg4MCwgMHhlMSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDkzLCAweGU1LAorMHgwMSwgMHgwMCwgMHg4MCwgMHhlMSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywKKzB4YTQsIDB4MjEsIDB4OWYsIDB4ZTUsIDB4YTgsIDB4MzEsIDB4OWYsIDB4ZTUsIDB4YTAsIDB4MTMsIDB4YTAsIDB4ZTEsCisweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MjAsIDB4MTMsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCisweDAxLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKKzB4YTAsIDB4MTIsIDB4YTAsIDB4ZTEsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgyMCwgMHgxMiwgMHhhMCwgMHhlMSwKKzB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHhhMCwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKKzB4MDEsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCisweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgyMCwgMHgxMSwgMHhhMCwgMHhlMSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweDgyLCAweGU1LCAweGEwLCAweDEwLCAweGEwLCAweGUxLAorMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKKzB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCisweDAwLCAweDEwLCAweDgyLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUxLCAweDAwLCAweDEwLCAweDgzLCAweGU1LAorMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwKKzB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODIsIDB4ZTUsCisweDFlLCAweGZmLCAweDJmLCAweGUxLCAweGZjLCAweDQ2LCAweDYwLCAweDQ3LCAweGEwLCAweDMwLCAweDlmLCAweGU1LAorMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKKzB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCisweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAorMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmYywgMHg0NiwgMHg2MCwgMHg0NywgMHg3MCwgMHgzMCwgMHg5ZiwgMHhlNSwKKzB4MDAsIDB4MTAsIDB4YTAsIDB4ZTMsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCisweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKKzB4MWUsIDB4ZmYsIDB4MmYsIDB4ZTEsIDB4ZmMsIDB4NDYsIDB4NjAsIDB4NDcsIDB4MzQsIDB4MjAsIDB4OWYsIDB4ZTUsCisweDNjLCAweDMwLCAweDlmLCAweGU1LCAweDAwLCAweDEwLCAweGEwLCAweGUzLCAweDAwLCAweDEwLCAweDgyLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MiwgMHhlNSwgMHgwMSwgMHgxMCwgMHhhMCwgMHhlMywgMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwKKzB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsIDB4MDAsIDB4MTAsIDB4ODMsIDB4ZTUsCisweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LCAweDAwLCAweDEwLCAweDgzLCAweGU1LAorMHgwMCwgMHgxMCwgMHg4MywgMHhlNSwgMHgxZSwgMHhmZiwgMHgyZiwgMHhlMSwgMHhmOCwgMHgwMCwgMHgxOCwgMHg0MCwKKzB4MDQsIDB4MDEsIDB4MTgsIDB4NDAsIDB4MDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4ZmMsIDB4MDAsIDB4MTgsIDB4NDAsCisweDgwLCAweGI1LCAweDAwLCAweGYwLCAweDBjLCAweGY4LCAweDAwLCAweDI3LCAweDM4LCAweDFjLCAweDAwLCAweGYwLAorMHg0NywgMHhmOCwgMHg3OCwgMHgxYywgMHgwNywgMHgwNCwgMHgzZiwgMHgwYywgMHgwYywgMHgyZiwgMHhmNywgMHhkZCwKKzB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MWQsIDB4NDgsCisweDAyLCAweDY4LCAweDFkLCAweDQ5LCAweDhiLCAweDY5LCAweGQyLCAweDE4LCAweDAyLCAweDYwLCAweDAyLCAweDY2LAorMHg4YSwgMHg2YSwgMHg0MywgMHg2OCwgMHg5YiwgMHgxOCwgMHg0MywgMHg2MCwgMHg5MywgMHg0MiwgMHgwMiwgMHhkMiwKKzB4ODIsIDB4NjgsIDB4MDEsIDB4MzIsIDB4ODIsIDB4NjAsIDB4YzIsIDB4NjgsIDB4MGIsIDB4NmEsIDB4ZDIsIDB4MTgsCisweGMyLCAweDYwLCAweDQyLCAweDY5LCAweGNiLCAweDY4LCAweGQyLCAweDE4LCAweDQyLCAweDYxLCAweGMyLCAweDY5LAorMHg4YiwgMHg2OCwgMHhkMiwgMHgxOCwgMHhjMiwgMHg2MSwgMHgwMiwgMHg2OSwgMHgwYiwgMHg2OSwgMHhkMiwgMHgxOCwKKzB4MDIsIDB4NjEsIDB4ODIsIDB4NjksIDB4MGIsIDB4NjgsIDB4ZDIsIDB4MTgsIDB4ODIsIDB4NjEsIDB4MDIsIDB4NmIsCisweGNiLCAweDY5LCAweGQyLCAweDE4LCAweDAyLCAweDYzLCAweDRhLCAweDZhLCAweDQzLCAweDZiLCAweDliLCAweDE4LAorMHg0MywgMHg2MywgMHg5MywgMHg0MiwgMHgwMiwgMHhkMiwgMHg4MiwgMHg2YiwgMHgwMSwgMHgzMiwgMHg4MiwgMHg2MywKKzB4YzIsIDB4NmIsIDB4NGIsIDB4NjksIDB4ZDIsIDB4MTgsIDB4YzIsIDB4NjMsIDB4MDIsIDB4NmMsIDB4YzksIDB4NmEsCisweDUxLCAweDE4LCAweDAxLCAweDY0LCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweGE0LCAweDJhLCAweDAwLCAweDgwLAorMHgwMCwgMHgwOCwgMHgxNCwgMHg0MCwgMHg4OCwgMHhiNSwgMHg2OSwgMHg0NiwgMHgwMCwgMHhmMCwgMHgxNywgMHhmOCwKKzB4ODEsIDB4MDgsIDB4MGEsIDB4ZDAsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MjksIDB4MDcsIDB4ZDksIDB4MDAsIDB4MjIsCisweDgzLCAweDAwLCAweDAwLCAweDlmLCAweGMwLCAweDQ2LCAweGZhLCAweDUwLCAweDAxLCAweDMwLCAweDg4LCAweDQyLAorMHhmOCwgMHhkMywgMHg4OCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHhiNSwgMHgwMCwgMHhmMCwKKzB4MDQsIDB4ZjgsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MjIsCisweDAwLCAweDI4LCAweDBhLCAweGQwLCAweDAxLCAweDI4LCAweDBhLCAweGQwLCAweDAyLCAweDI4LCAweDBjLCAweGQwLAorMHgwMywgMHgyOCwgMHgwMiwgMHhkMSwgMHgwNywgMHg0OCwgMHgxYywgMHgyMiwgMHgwOCwgMHg2MCwgMHgxMCwgMHgxYywKKzB4NzAsIDB4NDcsIDB4MDYsIDB4NDgsIDB4MDQsIDB4ZTAsIDB4MDYsIDB4NDgsIDB4NTAsIDB4MjIsIDB4MDgsIDB4NjAsCisweGY3LCAweGU3LCAweDA1LCAweDQ4LCAweDY4LCAweDIyLCAweDA4LCAweDYwLCAweGYzLCAweGU3LCAweDAwLCAweDAwLAorMHgwOCwgMHg4MywgMHgyMCwgMHg0MCwgMHhhNCwgMHgyYSwgMHgwMCwgMHg4MCwgMHgwYywgMHgyYiwgMHgwMCwgMHg4MCwKKzB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsIDB4ODAsIDB4YjQsIDB4MDMsIDB4MjIsIDB4YzIsIDB4ODAsIDB4MTUsIDB4NGEsCisweGMwLCAweDQ2LCAweDgyLCAweDYwLCAweDE0LCAweDRhLCAweDEyLCAweDg4LCAweDAxLCAweDMyLCAweGMyLCAweDYwLAorMHgwMCwgMHgyMCwgMHgxMywgMHg0YSwgMHgxMywgMHg1YywgMHhjMCwgMHg0NiwgMHgwYiwgMHg3MCwgMHgwMSwgMHgzMCwKKzB4MDEsIDB4MzEsIDB4MDgsIDB4MjgsIDB4ZjgsIDB4ZDMsIDB4MjAsIDB4MjIsIDB4MGEsIDB4NzAsIDB4MDEsIDB4MzEsCisweDAwLCAweDIwLCAweDBlLCAweDRiLCAweDFmLCAweDVjLCAweGMwLCAweDQ2LCAweDBmLCAweDcwLCAweDAxLCAweDMwLAorMHgwMSwgMHgzMSwgMHgwOCwgMHgyOCwgMHhmOCwgMHhkMywgMHgwYSwgMHg3MCwgMHgwMSwgMHgzMSwgMHgwMCwgMHgyMCwKKzB4MDksIDB4NGEsIDB4MTMsIDB4NWMsIDB4YzAsIDB4NDYsIDB4MGIsIDB4NzAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzEsCisweDA4LCAweDI4LCAweGY4LCAweGQzLCAweDAwLCAweDIwLCAweDA4LCAweDcwLCAweDgwLCAweGJjLCAweDcwLCAweDQ3LAorMHgwOCwgMHgxMCwgMHgwMCwgMHgwMywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHg3YywgMHgwNCwgMHgwMCwgMHg4MCwKKzB4ODUsIDB4MDQsIDB4MDAsIDB4ODAsIDB4OGUsIDB4MDQsIDB4MDAsIDB4ODAsIDB4MDAsIDB4YjUsIDB4MDEsIDB4MjMsCisweDBhLCAweDQ4LCAweGMxLCAweDFkLCAweDg5LCAweDMxLCAweDRiLCAweDcwLCAweDAwLCAweDIyLCAweDBhLCAweDcwLAorMHg2NCwgMHgyMSwgMHg4MCwgMHgzMCwgMHhjMSwgMHg4MiwgMHgwMSwgMHg4MywgMHg0MywgMHg4MywgMHg3ZCwgMHgyMSwKKzB4YzksIDB4MDAsIDB4ODEsIDB4ODMsIDB4YzIsIDB4ODMsIDB4MDQsIDB4NDgsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsCisweDAwLCAweGYwLCAweDhlLCAweGZiLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHhiNSwgMHgyMiwgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHhmZiwgMHhmNywgMHhlMSwgMHhmZiwgMHgxMywgMHg0OCwKKzB4MDIsIDB4MjIsIDB4MDAsIDB4MjEsIDB4MDAsIDB4ZjAsIDB4ODAsIDB4ZmIsIDB4MDEsIDB4MjMsIDB4ZDgsIDB4NDIsCisweDBhLCAweGQxLCAweDEwLCAweDQ4LCAweGMxLCAweDFkLCAweDM5LCAweDMxLCAweGNhLCAweDg4LCAweDAxLCAweDMyLAorMHhjYSwgMHg4MCwgMHg4MSwgMHg3OSwgMHgwMSwgMHgzMSwgMHg4MSwgMHg3MSwgMHhmZCwgMHhmNywgMHg3MCwgMHhmOSwKKzB4MGIsIDB4NDgsIDB4YzAsIDB4NjgsIDB4MDEsIDB4MjgsIDB4MDUsIDB4ZDEsIDB4MGEsIDB4NDgsIDB4N2QsIDB4MjIsCisweGQyLCAweDAwLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDY4LCAweGZiLCAweDA4LCAweDQ4LCAweGZiLCAweGY3LAorMHhlMSwgMHhmYywgMHgwOCwgMHg0OCwgMHgyOCwgMHgyMiwgMHgwMCwgMHgyMSwgMHgwMCwgMHhmMCwgMHg2MCwgMHhmYiwKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4NzksIDB4MjEsIDB4ZmYsIDB4ZmYsIDB4YTAsIDB4ODIsIDB4MjAsIDB4NDAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGE1LCAweDdiLCAweDIxLCAweDQwLAorMHg5NSwgMHgyYywgMHhmZiwgMHhmZiwgMHg1OSwgMHgwMywgMHhmZiwgMHhmZiwgMHgwMCwgMHhiNSwgMHgxMCwgMHgyMCwKKzB4MGYsIDB4NDksIDB4YzAsIDB4NDYsIDB4MDgsIDB4NjAsIDB4MGYsIDB4NGEsIDB4MGYsIDB4NDgsIDB4NjQsIDB4MjEsCisweGZiLCAweGY3LCAweGM2LCAweGZjLCAweDBlLCAweDQ4LCAweDAxLCAweDIyLCAweDEyLCAweDA0LCAweDAxLCAweDY4LAorMHgwYSwgMHg0MCwgMHgwOCwgMHgyMSwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwMiwgMHg2OCwgMHgxMiwgMHgwYywKKzB4MDcsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDQsIDB4ZDMsIDB4MDgsIDB4NDgsIDB4YzAsIDB4NDYsCisweGMxLCAweDYwLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDA3LCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDY0LAorMHhmOSwgMHhlNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHhiMCwgMHhhNSwgMHg1NSwgMHhmZiwgMHhmZiwKKzB4N2MsIDB4MjksIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTAsIDB4NDAsIDB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsCisweDAwLCAweDAwLCAweDAwLCAweDgwLCAweGY4LCAweGI1LCAweDI3LCAweDQ4LCAweDAxLCAweDIyLCAweDEyLCAweDA0LAorMHgwMSwgMHg2OCwgMHgwYSwgMHg0MCwgMHgwNywgMHgyMSwgMHgwMCwgMHgyYSwgMHgwNSwgMHhkMSwgMHgwMiwgMHg2OCwKKzB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDAsIDB4NjgsIDB4ODAsIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MjEsIDB4NDgsCisweGMwLCAweDQ2LCAweGMxLCAweDYwLCAweDAyLCAweGUwLCAweDIwLCAweDQ4LCAweGMwLCAweDQ2LCAweDAxLCAweDY0LAorMHgxZiwgMHg0OCwgMHhmYiwgMHhmNywgMHg4NywgMHhmYywgMHgxZiwgMHg0OCwgMHhjMSwgMHg2YiwgMHhmZiwgMHgyOSwKKzB4ZmMsIDB4ZDEsIDB4ODEsIDB4NmIsIDB4NDIsIDB4NmIsIDB4MTYsIDB4MWMsIDB4MGYsIDB4MWMsIDB4MWMsIDB4NGMsCisweDEwLCAweDIzLCAweDYwLCAweDY5LCAweDE4LCAweDQzLCAweDYwLCAweDYxLCAweGExLCAweDY5LCAweDk5LCAweDQzLAorMHgxZCwgMHgwNCwgMHhhMSwgMHg2MSwgMHhlOCwgMHg2MCwgMHhhMCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgyOCwgMHg2MSwKKzB4MTYsIDB4NGEsIDB4MTcsIDB4NDksIDB4NjQsIDB4MjAsIDB4ZmIsIDB4ZjcsIDB4NmYsIDB4ZmMsIDB4MTYsIDB4NGEsCisweGMwLCAweDQ2LCAweDAwLCAweDkyLCAweDE1LCAweDRiLCAweDAwLCAweDIwLCAweDM5LCAweDFjLCAweDMyLCAweDFjLAorMHhmYiwgMHhmNywgMHg2ZSwgMHhmYywgMHgxMywgMHg0OCwgMHhjMSwgMHg2OCwgMHgwOCwgMHgyOSwgMHhmYywgMHhkMSwKKzB4MTIsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4NWQsIDB4ZmMsIDB4MTAsIDB4MjMsIDB4NjAsIDB4NjksIDB4OTgsIDB4NDMsCisweDYwLCAweDYxLCAweGU4LCAweDYwLCAweDAxLCAweDIwLCAweGUzLCAweDIzLCAweDFiLCAweDAxLCAweGUxLCAweDE4LAorMHhjOCwgMHg3MSwgMHhmOCwgMHhiYywgMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKzB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDIsIDB4ZmYsIDB4ZmYsCisweDAwLCAweDAxLCAweDE4LCAweDQwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDIwLCAweDU1LCAweGZmLCAweGZmLAorMHhiNSwgMHhiNiwgMHgyMSwgMHg0MCwgMHg2NCwgMHgwMCwgMHgzMCwgMHgwMiwgMHg0NCwgMHg4MCwgMHgyMCwgMHg0MCwKKzB4NDAsIDB4MDEsIDB4MTgsIDB4NDAsIDB4ZjQsIDB4MDEsIDB4ZmYsIDB4ZmYsIDB4MDAsIDB4YjUsIDB4ZmQsIDB4ZjcsCisweDAxLCAweGZmLCAweDA2LCAweDQ4LCAweGZiLCAweGY3LCAweDMyLCAweGZjLCAweGZkLCAweGY3LCAweGQ2LCAweGZlLAorMHhmZSwgMHhmNywgMHgwNCwgMHhmOCwgMHhmZSwgMHhmNywgMHgxNiwgMHhmOCwgMHhmZSwgMHhmNywgMHgyNCwgMHhmOCwKKzB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4OTEsIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4OTAsIDB4YjUsIDB4ZmQsIDB4ZjcsCisweDZiLCAweGZjLCAweDM0LCAweDRmLCAweDAwLCAweDI0LCAweGY5LCAweDY4LCAweGY4LCAweDFkLCAweDc5LCAweDMwLAorMHgwMSwgMHgyOSwgMHgwZiwgMHhkMSwgMHgzMSwgMHg0OSwgMHhjMCwgMHg0NiwgMHhmOSwgMHg2NywgMHgzMSwgMHg0OSwKKzB4YzAsIDB4NDYsIDB4MDEsIDB4NjAsIDB4MzAsIDB4NDksIDB4YzAsIDB4NDYsIDB4MGMsIDB4NjAsIDB4NGMsIDB4NjAsCisweDhjLCAweDYwLCAweGNjLCAweDYwLCAweDBjLCAweDYxLCAweDRjLCAweDYxLCAweDhjLCAweDYxLCAweDA0LCAweGUwLAorMHhmOSwgMHgxZCwgMHg3ZCwgMHgzMSwgMHhmOSwgMHg2NywgMHgxMiwgMHhjMCwgMHgwOCwgMHgzOCwgMHgwMCwgMHg2OCwKKzB4NjAsIDB4MjMsIDB4MDEsIDB4NjgsIDB4MTksIDB4NDMsIDB4MDEsIDB4NjAsIDB4ZjgsIDB4NmYsIDB4MjAsIDB4MjMsCisweDAxLCAweDY4LCAweDE5LCAweDQzLCAweDAxLCAweDYwLCAweGY4LCAweDZmLCAweDQwLCAweDIzLCAweDAxLCAweDY4LAorMHg5OSwgMHg0MywgMHgwMSwgMHg2MCwgMHgwMCwgMHhmMCwgMHg1NCwgMHhmOCwgMHhmZCwgMHhmNywgMHg0ZSwgMHhmYywKKzB4MDAsIDB4ZjAsIDB4NWUsIDB4ZjksIDB4ZmQsIDB4ZjcsIDB4NzMsIDB4ZjgsIDB4ZmYsIDB4ZjcsIDB4MGMsIDB4ZmUsCisweGZkLCAweGY3LCAweDJlLCAweGZlLCAweGZkLCAweGY3LCAweGI2LCAweGZkLCAweGZkLCAweGY3LCAweGMyLCAweGZlLAorMHhmZCwgMHhmNywgMHg1NCwgMHhmZCwgMHhmZCwgMHhmNywgMHgwYSwgMHhmZCwgMHhmZCwgMHhmNywgMHg5NCwgMHhmZCwKKzB4MDAsIDB4ZjAsIDB4MWEsIDB4ZmEsIDB4ZmQsIDB4ZjcsIDB4OWMsIDB4ZmYsIDB4ZmQsIDB4ZjcsIDB4MGEsIDB4ZmYsCisweGZkLCAweGY3LCAweGQyLCAweGZlLCAweGZkLCAweGY3LCAweDNjLCAweGZjLCAweGZiLCAweGY3LCAweGRjLCAweGZhLAorMHhmZiwgMHhmNywgMHg5YywgMHhmZiwgMHg3MSwgMHgyMywgMHg1YiwgMHgwMSwKKzB4ZjgsIDB4MTgsIDB4MDQsIDB4NzIsIDB4NDQsIDB4NzIsIDB4MDcsIDB4MjMsIDB4NWIsIDB4MDIsIDB4ZjgsIDB4MTgsCisweDA0LCAweDYzLCAweGY4LCAweDY4LCAweDAxLCAweDI4LCAweDAyLCAweGQxLCAweGE4LCAweDIwLCAweGZlLCAweGY3LAorMHhiMSwgMHhmZCwgMHgwOSwgMHg0OCwgMHhjMCwgMHg0NiwgMHg0NCwgMHg2MiwgMHgwMCwgMHhmMCwgMHgxOCwgMHhmYSwKKzB4MDcsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4YmQsIDB4ZmIsIDB4OTAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweDAwLCAweDAxLCAweDExLCAweDQwLCAweDA0LCAweDAxLCAweDExLCAweDQwLAorMHgwMCwgMHgwMSwgMHgxMSwgMHgwMCwgMHhjMCwgMHgwMCwgMHgxOCwgMHgwMCwgMHgxNSwgMHg4ZiwgMHgyMSwgMHg0MCwKKzB4MDAsIDB4YjUsIDB4MDQsIDB4NDgsIDB4ZmIsIDB4ZjcsIDB4YWEsIDB4ZmIsIDB4ZmQsIDB4ZjcsIDB4NWUsIDB4ZmYsCisweGZkLCAweGY3LCAweDI0LCAweGZjLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LCAweDE1LCAweDk5LCAweDIxLCAweDQwLAorMHhmYSwgMHgyMSwgMHgwMywgMHg0OCwgMHhjMCwgMHg0NiwgMHg0MSwgMHg2MiwgMHg0MCwgMHgyMSwgMHg0MSwgMHg2MiwKKzB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4MDcsIDB4NDgsIDB4NDEsIDB4NjksCisweDA3LCAweDRiLCAweDE5LCAweDQzLCAweDQxLCAweDYxLCAweDgyLCAweDY5LCAweDlhLCAweDQzLCAweDgyLCAweDYxLAorMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHhkMSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxMCwgMHg2MSwKKzB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZmUsIDB4YWYsIDB4OWEsIDB4MTAsCisweDAwLCAweGI1LCAweDAyLCAweDQ4LCAweGZiLCAweGY3LCAweDgwLCAweGZiLCAweDA4LCAweGJjLCAweDE4LCAweDQ3LAorMHhjOCwgMHg1NywgMHhmZiwgMHhmZiwgMHhmMCwgMHhiNSwgMHgyNCwgMHg0YywgMHgwMSwgMHgyMSwgMHgwOSwgMHgwNCwKKzB4MjAsIDB4NjgsIDB4MDEsIDB4NDAsIDB4MDksIDB4MjAsIDB4MjIsIDB4NGUsIDB4MjIsIDB4NGQsIDB4MDAsIDB4MjksCisweDA1LCAweGQxLCAweDIxLCAweDY4LCAweDA5LCAweDBjLCAweDA0LCAweGQxLCAweDIxLCAweDY4LCAweDg5LCAweDBhLAorMHgwMSwgMHhkMywgMHhmMCwgMHg2MCwgMHgwMCwgMHhlMCwgMHgyOCwgMHg2NCwgMHgxZCwgMHg0OCwgMHhmYiwgMHhmNywKKzB4NjUsIDB4ZmIsIDB4MWQsIDB4NGYsIDB4MWQsIDB4NDksIDB4ODgsIDB4NjksIDB4MDEsIDB4MzAsIDB4ODgsIDB4NjEsCisweDM4LCAweDdhLCAweDAwLCAweDI4LCAweDAyLCAweGQxLCAweDc4LCAweDdhLCAweDAwLCAweDI4LCAweDFmLCAweGQwLAorMHgxOSwgMHg0OCwgMHhmYiwgMHhmNywgMHg1NywgMHhmYiwgMHgxOSwgMHg0OCwgMHhmYiwgMHhmNywgMHg1NCwgMHhmYiwKKzB4MDAsIDB4MjgsIDB4ZmEsIDB4ZDEsIDB4MzgsIDB4N2EsIDB4MDAsIDB4MjgsIDB4MDIsIDB4ZDAsIDB4MTYsIDB4NDgsCisweGZiLCAweGY3LCAweDRjLCAweGZiLCAweDAxLCAweDIxLCAweDA5LCAweDA0LCAweDIwLCAweDY4LCAweDAxLCAweDQwLAorMHgxNCwgMHgyMCwgMHgwMCwgMHgyOSwgMHgwNSwgMHhkMSwgMHgyMSwgMHg2OCwgMHgwOSwgMHgwYywgMHgwNCwgMHhkMSwKKzB4MjEsIDB4NjgsIDB4ODksIDB4MGEsIDB4MDEsIDB4ZDMsIDB4ZjAsIDB4NjAsIDB4MDEsIDB4ZTAsIDB4MjgsIDB4NjQsCisweGZmLCAweGU3LCAweGZlLCAweGU3LCAweGZmLCAweGY3LCAweDY1LCAweGZkLCAweDBiLCAweDQ4LCAweGZiLCAweGY3LAorMHgzNSwgMHhmYiwgMHhmZiwgMHhmNywgMHhhZiwgMHhmZiwgMHhjZCwgMHhlNywgMHgwMCwgMHgwMCwgMHgxMCwgMHg0MCwKKzB4NDAsIDB4MDEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4ODAsIDB4MDQsIDB4MDIsIDB4ZmYsIDB4ZmYsCisweDg4LCAweDFjLCAweDAwLCAweDgwLCAweDA4LCAweDgzLCAweDIwLCAweDQwLCAweGY0LCAweDAxLCAweGZmLCAweGZmLAorMHhiNSwgMHgwNywgMHhmZiwgMHhmZiwgMHgwMCwgMHgwMCwgMHhmZiwgMHhmZiwgMHg5OSwgMHg5ZiwgMHgyMSwgMHg0MCwKKzB4MDAsIDB4MjAsIDB4MDcsIDB4NGEsIDB4MDEsIDB4MjEsIDB4MDksIDB4MDUsIDB4NTAsIDB4NjEsIDB4YzgsIDB4NjAsCisweGQwLCAweDYxLCAweGM4LCAweDYxLCAweDAzLCAweDIzLCAweGRiLCAweDA0LCAweDAzLCAweDRhLCAweDAxLCAweDIxLAorMHhkMSwgMHg2MywgMHg1OCwgMHg2MCwgMHhmYywgMHhlNywgMHgwMCwgMHgwMCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKKzB4YzAsIDB4MDAsIDB4MTgsIDB4MDAsIDB4ODAsIDB4YjUsIDB4YzAsIDB4YjAsIDB4MDEsIDB4MjIsIDB4MDAsIDB4MjEsCisweDBhLCAweDIwLCAweGZjLCAweGY3LCAweGQxLCAweGZmLCAweDA3LCAweDFjLCAweGZmLCAweDJmLCAweDI4LCAweGQwLAorMHg2OSwgMHg0NiwgMHhmZiwgMHgyMiwgMHgzOCwgMHgxYywgMHgwMSwgMHgzMiwgMHhmZCwgMHhmNywgMHg1NCwgMHhmOSwKKzB4ZmYsIDB4MjMsIDB4MDEsIDB4MzMsIDB4OTgsIDB4NDIsIDB4MWIsIDB4ZDEsIDB4MGQsIDB4OTgsIDB4MDAsIDB4MDksCisweDE4LCAweGQzLCAweDM4LCAweDFjLCAweGZkLCAweGY3LCAweDhkLCAweGY4LCAweDBlLCAweDQ5LCAweDAxLCAweDIyLAorMHgxMiwgMHgwNCwgMHgwOCwgMHg2OCwgMHgwMiwgMHg0MCwgMHgwZCwgMHg0OCwgMHgwNSwgMHhkMSwgMHgwYSwgMHg2OCwKKzB4MTIsIDB4MGMsIDB4MDYsIDB4ZDEsIDB4MDksIDB4NjgsIDB4ODksIDB4MGEsIDB4MDMsIDB4ZDMsIDB4MGEsIDB4NDksCisweGMwLCAweDQ2LCAweGM4LCAweDYwLCAweDAyLCAweGUwLCAweDA5LCAweDQ5LCAweGMwLCAweDQ2LCAweDA4LCAweDY0LAorMHhmZiwgMHhmNywgMHhiYywgMHhmZiwgMHgzOCwgMHgxYywgMHhmZCwgMHhmNywgMHg3NCwgMHhmOCwgMHg0MCwgMHhiMCwKKzB4ODAsIDB4YmMsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCisweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDA3LCAweDgwLCAweDAwLCAweDAwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHgwMCwgMHhiNSwgMHgxNywgMHg0OSwgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNCwKKzB4MDgsIDB4NjgsIDB4MDIsIDB4NDAsIDB4MDYsIDB4MjAsIDB4MDAsIDB4MmEsIDB4MDUsIDB4ZDEsIDB4MGEsIDB4NjgsCisweDEyLCAweDBjLCAweDA2LCAweGQxLCAweDA5LCAweDY4LCAweDg5LCAweDBhLCAweDAzLCAweGQzLCAweDExLCAweDQ5LAorMHhjMCwgMHg0NiwgMHhjOCwgMHg2MCwgMHgwMiwgMHhlMCwgMHgxMCwgMHg0OSwgMHhjMCwgMHg0NiwgMHgwOCwgMHg2NCwKKzB4MDMsIDB4MjAsIDB4ZmUsIDB4ZjcsIDB4ZDMsIDB4ZmMsIDB4ZmIsIDB4ZjcsIDB4MGQsIDB4ZmYsIDB4MDEsIDB4MjMsCisweDE4LCAweDQzLCAweGZiLCAweGY3LCAweGU3LCAweGZmLCAweGZmLCAweGY3LCAweDgzLCAweGZlLCAweGZmLCAweGY3LAorMHg5ZCwgMHhmZiwgMHhmZiwgMHhmNywgMHgwNSwgMHhmZSwgMHhmZiwgMHhmNywgMHhmNSwgMHhmZSwgMHhmZiwgMHhmNywKKzB4MDksIDB4ZmYsIDB4ZmYsIDB4ZjcsIDB4OWIsIDB4ZmQsIDB4ZmYsIDB4ZjcsIDB4MjEsIDB4ZmYsIDB4MDgsIDB4YmMsCisweDE4LCAweDQ3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwLCAweDQwLCAweDQwLCAweDAxLCAweDE4LCAweDAwLAorMHgwMCwgMHgwMCwgMHgwMCwgMHg4MCwgMHhmMCwgMHhiNCwgMHg0NiwgMHg0YSwgMHgwMSwgMHgyMSwgMHhjOSwgMHgwMywKKzB4NDUsIDB4NGQsIDB4MTksIDB4MjMsIDB4ZGIsIDB4MDEsIDB4ZWMsIDB4MTgsIDB4YTEsIDB4NjEsIDB4MjgsIDB4ODgsCisweDQwLCAweDA0LCAweDQzLCAweDRiLCAweGMwLCAweDE4LCAweDg3LCAweDFhLCAweDA0LCAweDIwLCAweGFmLCAweDYwLAorMHg0MSwgMHg0ZSwgMHhjMCwgMHg0NiwgMHhiMCwgMHg2MSwgMHgwOCwgMHgyMCwgMHhjOCwgMHgyMywgMHg0MywgMHg0MywKKzB4YmIsIDB4NDIsIDB4MjEsIDB4ZDksIDB4NDEsIDB4MDAsIDB4M2QsIDB4NGUsIDB4YzAsIDB4NDYsIDB4MzEsIDB4NjEsCisweGI2LCAweDY5LCAweDIwLCAweDIzLCAweDliLCAweDFiLCAweDNhLCAweDRlLCAweGMwLCAweDQ2LCAweGYzLCAweDYxLAorMHgxMCwgMHgzYiwgMHgzMywgMHg2MiwgMHg4YiwgMHgwMCwgMHhmZiwgMHgxYSwgMHg0MCwgMHgwOCwgMHg4MSwgMHg0MiwKKzB4MTcsIDB4ZDMsIDB4YjgsIDB4MjMsIDB4NDMsIDB4NDMsIDB4YmIsIDB4NDIsIDB4MDgsIDB4ZDksIDB4NDEsIDB4MWUsCisweDMyLCAweDRiLCAweGMwLCAweDQ2LCAweDk5LCAweDgxLCAweGQ5LCAweDgxLCAweDQwLCAweDAwLCAweDAyLCAweDM4LAorMHg1OCwgMHg2MSwgMHgwYSwgMHhlMCwgMHgwMSwgMHgzMCwgMHg4MSwgMHg0MiwgMHhlZiwgMHhkMiwgMHgwNiwgMHhlMCwKKzB4MmMsIDB4NGUsIDB4YjMsIDB4NjksIDB4MDEsIDB4MzMsIDB4YjMsIDB4NjEsIDB4NDAsIDB4MDAsIDB4ODgsIDB4NDIsCisweGQyLCAweGQ5LCAweDJhLCAweDQ5LCAweDAwLCAweDIwLCAweGEzLCAweDY5LCAweDliLCAweDA4LCAweDA3LCAweGQwLAorMHgyOCwgMHg0YiwgMHg4NywgMHgwMCwgMHhjYiwgMHg1MSwgMHhhNywgMHg2OSwgMHhiZiwgMHgwOCwgMHgwMSwgMHgzMCwKKzB4ODcsIDB4NDIsIDB4ZjgsIDB4ZDgsIDB4MjIsIDB4NDksIDB4YzAsIDB4NDYsIDB4OGEsIDB4NjIsIDB4OGMsIDB4ODksCisweDU4LCAweDIwLCAweDYwLCAweDQzLCAweDg3LCAweDE4LCAweDAwLCAweDIwLCAweDAwLCAweDIyLCAweDAwLCAweDJjLAorMHgwYSwgMHhkZCwgMHg1OCwgMHgyMywgMHg0MywgMHg0MywgMHg4YywgMHg2YSwgMHhlMywgMHgxOCwgMHgwMSwgMHgzMCwKKzB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4OWEsIDB4NjAsIDB4OGIsIDB4ODksIDB4ODMsIDB4NDIsIDB4ZjQsIDB4ZGMsCisweGNmLCAweDYyLCAweGNjLCAweDg5LCAweDYwLCAweDAwLCAweDAwLCAweDE5LCAweDQwLCAweDAxLCAweGM3LCAweDE5LAorMHgwMCwgMHgyMCwgMHgwMCwgMHgyYywgMHgwYiwgMHhkZCwgMHg0MywgMHgwMCwgMHgxYiwgMHgxOCwgMHg1YiwgMHgwMSwKKzB4Y2MsIDB4NmEsIDB4ZTMsIDB4MTgsIDB4MDEsIDB4MzAsIDB4MDAsIDB4MDQsIDB4MDAsIDB4MGMsIDB4OWEsIDB4NjAsCisweGNiLCAweDg5LCAweDgzLCAweDQyLCAweGYzLCAweGRjLCAweDRmLCAweDYyLCAweDAwLCAweDIwLCAweDBiLCAweDY5LAorMHgwMCwgMHgyYiwgMHgwNywgMHhkOSwgMHg4NywgMHgwMCwgMHg0YiwgMHg2YSwgMHhjMCwgMHg0NiwgMHhkYSwgMHg1MSwKKzB4MGIsIDB4NjksIDB4MDEsIDB4MzAsIDB4ODMsIDB4NDIsIDB4ZjcsIDB4ZDgsIDB4NDksIDB4NmEsIDB4ODAsIDB4MDAsCisweDA4LCAweDE4LCAweDA0LCAweDM4LCAweDI4LCAweDYxLCAweGYwLCAweGJjLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLAorMHhiMCwgMHhiZSwgMHgyMSwgMHg0MCwgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgyMCwgMHg0MCwKKzB4NGMsIDB4MmEsIDB4MDAsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4YWQsIDB4ZGUsIDB4MDAsCisweDBhLCAweDQ4LCAweDAxLCAweDIzLCAweDFiLCAweDA2LCAweDQxLCAweDY5LCAweDk5LCAweDQzLCAweDFhLCAweDA5LAorMHg0MSwgMHg2MSwgMHhkMSwgMHg2MCwgMHgwMCwgMHgyMSwgMHhhMSwgMHgyMiwgMHg1MiwgMHgwMywgMHg5MSwgMHg2MSwKKzB4MWIsIDB4MjMsIDB4ZGIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4ODEsIDB4NjEsIDB4MDEsIDB4MjAsIDB4MDAsIDB4MDYsCisweDU5LCAweDA1LCAweDA4LCAweDYwLCAweDcwLCAweDQ3LCAweDAwLCAweDAwLCAweDY4LCAweDBlLCAweDAwLCAweDgwLAorMHg4MCwgMHhiNCwgMHgwMiwgMHgxYywgMHgwYiwgMHg0OCwgMHgxYiwgMHgyMywgMHhkYiwgMHgwMSwgMHhjMywgMHgxOCwKKzB4OWEsIDB4NjEsIDB4MDEsIDB4MjMsIDB4MWIsIDB4MDYsIDB4NDIsIDB4NjksIDB4MWEsIDB4NDMsIDB4NDIsIDB4NjEsCisweDg3LCAweDY5LCAweDlmLCAweDQzLCAweDAxLCAweDIzLCAweDFiLCAweDA1LAorMHg4NywgMHg2MSwgMHhkYSwgMHg2MCwgMHg4MCwgMHg2OSwgMHhjMCwgMHg0NiwgMHgxOCwgMHg2MSwgMHhhMSwgMHgyMCwKKzB4NDAsIDB4MDMsIDB4ODEsIDB4NjEsIDB4ODAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDgwLCAweGI1LCAweGZmLCAweGY3LCAweGM5LCAweGZmLCAweDAwLCAweDIwLCAweDAwLCAweGYwLCAweDIwLCAweGY4LAorMHgwMCwgMHgyMCwgMHgwOSwgMHg0OSwgMHgwMCwgMHgyMiwgMHgwMywgMHgwMSwgMHg1ZiwgMHgxOCwgMHgzMywgMHgyMywKKzB4OWIsIDB4MDEsIDB4ZmIsIDB4MTgsIDB4OWEsIDB4NjIsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsIDB4ZjYsIDB4ZDMsCisweDA0LCAweDQ4LCAweDAxLCAweDIyLCAweDAwLCAweDIxLCAweDAwLCAweGYwLCAweDMzLCAweGY4LCAweDgwLCAweGJjLAorMHgwOCwgMHhiYywgMHgxOCwgMHg0NywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwgMHgxZCwgMHgzZSwgMHhmZiwgMHhmZiwKKzB4MDAsIDB4YjUsIDB4MDIsIDB4NDgsIDB4MDAsIDB4ZjAsIDB4MDQsIDB4ZjgsIDB4MDgsIDB4YmMsIDB4MTgsIDB4NDcsCisweGE4LCAweDYxLCAweDAwLCAweDAwLCAweDgwLCAweGI0LCAweDAxLCAweDIyLCAweDEyLCAweDA1LCAweDBmLCAweDRiLAorMHhhMSwgMHgyMSwgMHg0OSwgMHgwMywgMHgwMCwgMHgyOCwgMHgwZSwgMHhkMCwgMHhjOCwgMHg2MSwgMHgxOCwgMHgxYywKKzB4NTksIDB4NjksIDB4NTMsIDB4MDEsIDB4MTksIDB4NDMsIDB4NDEsIDB4NjEsIDB4ODcsIDB4NjksIDB4OWYsIDB4NDMsCisweDg3LCAweDYxLCAweGQxLCAweDYwLCAweDgwLCAweDY5LCAweGMwLCAweDQ2LCAweDEwLCAweDYxLCAweDgwLCAweGJjLAorMHg3MCwgMHg0NywgMHgxOCwgMHgxYywgMHg1ZiwgMHg2OSwgMHgwMSwgMHgyMywgMHg1YiwgMHgwNiwgMHg5ZiwgMHg0MywKKzB4NDcsIDB4NjEsIDB4ZDcsIDB4NjAsIDB4MDAsIDB4MjAsIDB4YzgsIDB4NjEsIDB4ZjMsIDB4ZTcsIDB4MDAsIDB4MDAsCisweDY4LCAweDBlLCAweDAwLCAweDgwLCAweGIwLCAweGI0LCAweDA3LCAweDFjLCAweDAwLCAweDIwLCAweDE3LCAweDRjLAorMHgwMywgMHgwMSwgMHgxZCwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwgMHg5ZCwgMHg2YSwKKzB4YmQsIDB4NDIsIDB4MDUsIDB4ZDEsIDB4MWQsIDB4NmIsIDB4OTUsIDB4NDIsIDB4MDIsIDB4ZDEsIDB4ZGIsIDB4NmEsCisweDhiLCAweDQyLCAweDFjLCAweGQwLCAweDAxLCAweDMwLCAweDBiLCAweDI4LCAweGVlLCAweGQzLCAweDAwLCAweDIwLAorMHgwMywgMHgwMSwgMHgxZCwgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwgMHhlYiwgMHgxOCwgMHg5YiwgMHg2YSwKKzB4MDAsIDB4MmIsIDB4MDksIDB4ZDEsIDB4MDMsIDB4MDEsIDB4MWMsIDB4MTksIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsCisweGUzLCAweDE4LCAweDFhLCAweDYzLCAweGQ5LCAweDYyLCAweDVhLCAweDYzLCAweDlmLCAweDYyLCAweDAyLCAweGUwLAorMHgwMSwgMHgzMCwgMHgwYiwgMHgyOCwgMHhlYSwgMHhkMywgMHgwYiwgMHgyOCwgMHgwMSwgMHhkMSwgMHgwMCwgMHgyMCwKKzB4YzAsIDB4NDMsIDB4YjAsIDB4YmMsIDB4NzAsIDB4NDcsIDB4MDAsIDB4MDAsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsCisweDkwLCAweGI0LCAweDAxLCAweDFjLCAweDAwLCAweDIyLCAweDAxLCAweDIwLCAweDE2LCAweDRmLCAweDAxLCAweGUwLAorMHgwMCwgMHgyYSwgMHgwNywgMHhkMSwgMHgwMywgMHgwMSwgMHhkYywgMHgxOSwgMHgzMywgMHgyMywgMHg5YiwgMHgwMSwKKzB4ZTMsIDB4MTgsIDB4OWIsIDB4NjksIDB4OGIsIDB4NDIsIDB4MTEsIDB4ZDEsIDB4MDIsIDB4MDEsIDB4ZDIsIDB4MTksCisweDMzLCAweDIzLCAweDliLCAweDAxLCAweGQyLCAweDE4LCAweDkzLCAweDZhLCAweGMwLCAweDQ2LCAweDkzLCAweDYxLAorMHhkMywgMHg2YSwgMHhjMCwgMHg0NiwgMHhkMywgMHg2MSwgMHgxMywgMHg2YiwgMHhjMCwgMHg0NiwgMHgxMywgMHg2MiwKKzB4NTMsIDB4NmIsIDB4YzAsIDB4NDYsIDB4NTMsIDB4NjIsIDB4MDEsIDB4MjIsIDB4MDEsIDB4MzAsIDB4MGIsIDB4MjgsCisweGUwLCAweGQzLCAweDA3LCAweDRiLCAweDAwLCAweDJhLCAweDAyLCAweGQxLCAweDlhLCAweDY4LCAweDhhLCAweDQyLAorMHgwMywgMHhkMSwgMHgwMCwgMHgyMSwgMHg5OSwgMHg2MCwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwKKzB4YzAsIDB4NDMsIDB4ZmEsIDB4ZTcsIDB4NjgsIDB4MGUsIDB4MDAsIDB4ODAsIDB4ZTgsIDB4MWIsIDB4MDAsIDB4ODAsCisweDBiLCAweDI4LCAweDE3LCAweGRhLCAweDBjLCAweDQ5LCAweDAxLCAweDIzLCAweDViLCAweDA2LCAweDhhLCAweDY5LAorMHgxMywgMHg0MywgMHgwMSwgMHgyMiwgMHgxMiwgMHgwNSwgMHg4YiwgMHg2MSwgMHgxMywgMHg2MSwgMHgwMCwgMHgwMSwKKzB4NDAsIDB4MTgsIDB4MzMsIDB4MjMsIDB4OWIsIDB4MDEsIDB4YzAsIDB4MTgsIDB4MDMsIDB4NmIsIDB4YzAsIDB4NDYsCisweDQzLCAweDYzLCAweDUzLCAweDAxLCAweDg4LCAweDY5LCAweDk4LCAweDQzLCAweDg4LCAweDYxLCAweDEwLCAweDYxLAorMHgwMSwgMHgyMCwgMHg3MCwgMHg0NywgMHgwMCwgMHgyMCwgMHhmYywgMHhlNywgMHg2OCwgMHgwZSwgMHgwMCwgMHg4MCwKKzB4OTAsIDB4YjQsIDB4MDgsIDB4NGEsIDB4ZDAsIDB4NjksIDB4MDAsIDB4MjEsIDB4MDcsIDB4NGYsIDB4ZDMsIDB4NjksCisweDgzLCAweDQyLCAweDAyLCAweGQ5LCAweGZjLCAweDFhLCAweDIwLCAweDE4LCAweDAwLCAweGUwLCAweGMwLCAweDFhLAorMHgwOSwgMHgxOCwgMHgxOCwgMHgxYywgMHhiOSwgMHg0MiwgMHhmNCwgMHhkOSwgMHg5MCwgMHhiYywgMHg3MCwgMHg0NywKKzB4MDAsIDB4MjAsIDB4MTQsIDB4NDAsIDB4YTgsIDB4NjEsIDB4MDAsIDB4MDAsIDB4OTAsIDB4YjUsIDB4MDcsIDB4MWMsCisweDAwLCAweDI0LCAweDAwLCAweDJmLCAweDA0LCAweGQzLCAweGZmLCAweGY3LCAweGUzLCAweGZmLCAweDAxLCAweDM0LAorMHhiYywgMHg0MiwgMHhmYSwgMHhkOSwgMHg5MCwgMHhiYywgMHgwOCwgMHhiYywKKzB4MTgsIDB4NDcsIDB4MDAsIDB4MDAsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCmluZGV4IDQxMDNjMzcuLjJmYjRmOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYworKysgYi9kcml2ZXJzL25ldC90eXBob29uLmMKQEAgLTg2LDcgKzg2LDcgQEAKICNkZWZpbmUgUkVTUE9OU0VfUklOR19TSVpFCShSRVNQT05TRV9FTlRSSUVTICogc2l6ZW9mKHN0cnVjdCByZXNwX2Rlc2MpKQogCiAvKiBUaGUgM1hQIHdpbGwgcHJlbG9hZCBhbmQgcmVtb3ZlIDY0IGVudHJpZXMgZnJvbSB0aGUgZnJlZSBidWZmZXIKLSAqIGxpc3QsIGFuZCB3ZSBuZWVkIG9uZSBlbnRyeSB0byBrZWVwIHRoZSByaW5nIGZyb20gd3JhcHBpbmcsIHNvIAorICogbGlzdCwgYW5kIHdlIG5lZWQgb25lIGVudHJ5IHRvIGtlZXAgdGhlIHJpbmcgZnJvbSB3cmFwcGluZywgc28KICAqIHRvIGtlZXAgdGhpcyBhIHBvd2VyIG9mIHR3bywgd2UgdXNlIDEyOCBlbnRyaWVzLgogICovCiAjZGVmaW5lIFJYRlJFRV9FTlRSSUVTCQkxMjgKQEAgLTEwMCw4ICsxMDAsOCBAQAogI2RlZmluZSBQS1RfQlVGX1NaCQkxNTM2CiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidHlwaG9vbiIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OIAkiMS41LjciCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMDUvMDEvMDciCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTiAJIjEuNS44IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjA2LzExLzA5IgogI2RlZmluZSBQRlgJCQlEUlZfTU9EVUxFX05BTUUgIjogIgogI2RlZmluZSBFUlJfUEZYCQkJS0VSTl9FUlIgUEZYCiAKQEAgLTI2OSw3ICsyNjksNyBAQAogCiBzdHJ1Y3QgdHlwaG9vbiB7CiAJLyogVHggY2FjaGUgbGluZSBzZWN0aW9uICovCi0Jc3RydWN0IHRyYW5zbWl0X3JpbmcgCXR4TG9SaW5nCV9fX19jYWNoZWxpbmVfYWxpZ25lZDsJCisJc3RydWN0IHRyYW5zbWl0X3JpbmcgCXR4TG9SaW5nCV9fX19jYWNoZWxpbmVfYWxpZ25lZDsKIAlzdHJ1Y3QgcGNpX2RldiAqCXR4X3BkZXY7CiAJdm9pZCBfX2lvbWVtCQkqdHhfaW9hZGRyOwogCXUzMgkJCXR4bG9fZG1hX2FkZHI7CkBAIC05MzcsOCArOTM3LDYgQEAKIAogCWZpbHRlciA9IFRZUEhPT05fUlhfRklMVEVSX0RJUkVDVEVEIHwgVFlQSE9PTl9SWF9GSUxURVJfQlJPQURDQVNUOwogCWlmKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJZmlsdGVyIHw9IFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVM7CiAJfSBlbHNlIGlmKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKQEAgLTEwNzMsNyArMTA3MSw3IEBACiAJCX0gZWxzZSB7CiAJCQl1MzIgc2xlZXBfdmVyID0geHBfcmVzcFswXS5wYXJtMjsKIAkJCXNucHJpbnRmKGluZm8tPmZ3X3ZlcnNpb24sIDMyLCAiJTAyeC4lMDN4LiUwM3giLAotCQkJCSBzbGVlcF92ZXIgPj4gMjQsIChzbGVlcF92ZXIgPj4gMTIpICYgMHhmZmYsIAorCQkJCSBzbGVlcF92ZXIgPj4gMjQsIChzbGVlcF92ZXIgPj4gMTIpICYgMHhmZmYsCiAJCQkJIHNsZWVwX3ZlciAmIDB4ZmZmKTsKIAkJfQogCX0KQEAgLTEyNDMsNyArMTI0MSw3IEBACiAJZXJpbmctPnR4X3BlbmRpbmcgPSBUWExPX0VOVFJJRVMgLSAxOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHR5cGhvb25fZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHR5cGhvb25fZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zZXR0aW5ncwkJPSB0eXBob29uX2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCQk9IHR5cGhvb25fc2V0X3NldHRpbmdzLAogCS5nZXRfZHJ2aW5mbwkJPSB0eXBob29uX2dldF9kcnZpbmZvLApAQCAtMjE1NCw3ICsyMTUyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYodHlwaG9vbl9zbGVlcCh0cCwgUENJX0QzaG90LCAwKSA8IDApIAorCWlmKHR5cGhvb25fc2xlZXAodHAsIFBDSV9EM2hvdCwgMCkgPCAwKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ28gYmFjayB0byBzbGVlcFxuIiwgZGV2LT5uYW1lKTsKIAogb3V0OgpAQCAtMjYwMiw3ICsyNjAwLDcgQEAKIAkJCSIoJXU6JTA0eClcbiIsIGRldi0+bmFtZSwgeHBfcmVzcFswXS5udW1EZXNjLAogCQkJbGUzMl90b19jcHUoeHBfcmVzcFswXS5wYXJtMikpOwogCX0KLQkJCisKIAlyZXR1cm4gMDsKIAogZXJyb3Jfb3V0X3Jlc2V0OgpAQCAtMjY2MCw3ICsyNjU4LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0CiB0eXBob29uX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZ0eXBob29uX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnR5cGhvb25fZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90eXBob29uLmggYi9kcml2ZXJzL25ldC90eXBob29uLmgKaW5kZXggNzM4ZWU3MS4uMmYxNGEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uaApAQCAtNDYsNyArNDYsNyBAQAogCiAvKiBUaGUgaG9zdDwtPlR5cGhvb24gcmluZyBpbmRleCBzdHJ1Y3R1cmUKICAqIFRoaXMgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHBvc2l0aW9ucyBpbiB0aGUgcmluZ3MKLSAqIAorICoKICAqIEFsbCB2YWx1ZXMgbXVzdCBiZSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCBmb3IgdGhlIDNYUAogICoKICAqIHJ4SGlDbGVhcmVkOiAgIGVudHJ5IHdlJ3ZlIGNsZWFyZWQgdG8gaW4gdGhlIEhpIHJlY2VpdmUgcmluZwpAQCAtMTMxLDcgKzEzMSw3IEBACiAgKgogICogQSBwYWNrZXQgaXMgZGVzY3JpYmVkIGJ5IGEgcGFja2V0IGRlc2NyaXB0b3IsIGZvbGxvd2VkIGJ5IG9wdGlvbiBkZXNjcmlwdG9ycywKICAqIGlmIGFueSwgdGhlbiBvbmUgb3IgbW9yZSBmcmFnbWVudCBkZXNjcmlwdG9ycy4KLSAqIAorICoKICAqIFBhY2tldCBkZXNjcmlwdG9yOgogICogZmxhZ3M6CURlc2NyaXB0b3IgdHlwZQogICogbGVuOmkJemVybywgb3IgbGVuZ3RoIG9mIHRoaXMgcGFja2V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDBlYmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGguYwpAQCAtMCwwICsxLDQyNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHV0b3IsIEluYy4gMjAwNi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFNobG9taSBHcmlkaXNoIDxncmlkaXNoQGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBRRSBVQ0MgR2lnYWJpdCBFdGhlcm5ldCBEcml2ZXIKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiBKdWwgNiwgMjAwNiBMaSBZYW5nIDxMZW9MaUBmcmVlc2NhbGUuY29tPgorICogLSBSZWFycmFuZ2UgY29kZSBhbmQgc3R5bGUgZml4ZXMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaW1tYXBfcWUuaD4KKyNpbmNsdWRlIDxhc20vcWUuaD4KKyNpbmNsdWRlIDxhc20vdWNjLmg+CisjaW5jbHVkZSA8YXNtL3VjY19mYXN0Lmg+CisKKyNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgorI2luY2x1ZGUgInVjY19nZXRoX3BoeS5oIgorCisjdW5kZWYgREVCVUcKKworI2RlZmluZSBEUlZfREVTQyAiUUUgVUNDIEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlciB2ZXJzaW9uOlNlcHQgMTEsIDIwMDYiCisjZGVmaW5lIERSVl9OQU1FICJ1Y2NfZ2V0aCIKKworI2RlZmluZSB1Z2V0aF9wcmludGsobGV2ZWwsIGZvcm1hdCwgYXJnLi4uKSAgXAorICAgICAgICBwcmludGsobGV2ZWwgZm9ybWF0ICJcbiIsICMjIGFyZykKKworI2RlZmluZSB1Z2V0aF9kYmcoZm9ybWF0LCBhcmcuLi4pICAgICAgICAgICAgXAorICAgICAgICB1Z2V0aF9wcmludGsoS0VSTl9ERUJVRyAsIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgdWdldGhfZXJyKGZvcm1hdCwgYXJnLi4uKSAgICAgICAgICAgIFwKKyAgICAgICAgdWdldGhfcHJpbnRrKEtFUk5fRVJSICwgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSB1Z2V0aF9pbmZvKGZvcm1hdCwgYXJnLi4uKSAgICAgICAgICAgXAorICAgICAgICB1Z2V0aF9wcmludGsoS0VSTl9JTkZPICwgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSB1Z2V0aF93YXJuKGZvcm1hdCwgYXJnLi4uKSAgICAgICAgICAgXAorICAgICAgICB1Z2V0aF9wcmludGsoS0VSTl9XQVJOSU5HICwgZm9ybWF0ICwgIyMgYXJnKQorCisjaWZkZWYgVUdFVEhfVkVSQk9TRV9ERUJVRworI2RlZmluZSB1Z2V0aF92ZGJnIHVnZXRoX2RiZworI2Vsc2UKKyNkZWZpbmUgdWdldGhfdmRiZyhmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkJCQkvKiBVR0VUSF9WRVJCT1NFX0RFQlVHICovCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWdldGhfbG9jayk7CisKK3N0YXRpYyB1Y2NfZ2V0aF9pbmZvX3QgdWdldGhfcHJpbWFyeV9pbmZvID0geworCS51Zl9pbmZvID0geworCQkgICAgLmJkX21lbV9wYXJ0ID0gTUVNX1BBUlRfU1lTVEVNLAorCQkgICAgLnJ0c20gPSBVQ0NfRkFTVF9TRU5EX0lETEVTX0JFVFdFRU5fRlJBTUVTLAorCQkgICAgLm1heF9yeF9idWZfbGVuZ3RoID0gMTUzNiwKKy8qIEZJWE1FOiBzaG91bGQgYmUgY2hhbmdlZCBpbiBydW4gdGltZSBmb3IgMUcgYW5kIDEwME0gKi8KKyNpZmRlZiBDT05GSUdfVUdFVEhfSEFTX0dJR0EKKwkJICAgIC51cmZzID0gVUNDX0dFVEhfVVJGU19HSUdBX0lOSVQsCisJCSAgICAudXJmZXQgPSBVQ0NfR0VUSF9VUkZFVF9HSUdBX0lOSVQsCisJCSAgICAudXJmc2V0ID0gVUNDX0dFVEhfVVJGU0VUX0dJR0FfSU5JVCwKKwkJICAgIC51dGZzID0gVUNDX0dFVEhfVVRGU19HSUdBX0lOSVQsCisJCSAgICAudXRmZXQgPSBVQ0NfR0VUSF9VVEZFVF9HSUdBX0lOSVQsCisJCSAgICAudXRmdHQgPSBVQ0NfR0VUSF9VVEZUVF9HSUdBX0lOSVQsCisjZWxzZQorCQkgICAgLnVyZnMgPSBVQ0NfR0VUSF9VUkZTX0lOSVQsCisJCSAgICAudXJmZXQgPSBVQ0NfR0VUSF9VUkZFVF9JTklULAorCQkgICAgLnVyZnNldCA9IFVDQ19HRVRIX1VSRlNFVF9JTklULAorCQkgICAgLnV0ZnMgPSBVQ0NfR0VUSF9VVEZTX0lOSVQsCisJCSAgICAudXRmZXQgPSBVQ0NfR0VUSF9VVEZFVF9JTklULAorCQkgICAgLnV0ZnR0ID0gVUNDX0dFVEhfVVRGVFRfSU5JVCwKKyNlbmRpZgorCQkgICAgLnVmcHQgPSAyNTYsCisJCSAgICAubW9kZSA9IFVDQ19GQVNUX1BST1RPQ09MX01PREVfRVRIRVJORVQsCisJCSAgICAudHR4X3RyeCA9IFVDQ19GQVNUX0dVTVJfVFJBTlNQQVJFTlRfVFRYX1RSWF9OT1JNQUwsCisJCSAgICAudGVuYyA9IFVDQ19GQVNUX1RYX0VOQ09ESU5HX05SWiwKKwkJICAgIC5yZW5jID0gVUNDX0ZBU1RfUlhfRU5DT0RJTkdfTlJaLAorCQkgICAgLnRjcmMgPSBVQ0NfRkFTVF8xNl9CSVRfQ1JDLAorCQkgICAgLnN5bmwgPSBVQ0NfRkFTVF9TWU5DX0xFTl9OT1RfVVNFRCwKKwkJICAgIH0sCisJLm51bVF1ZXVlc1R4ID0gMSwKKwkubnVtUXVldWVzUnggPSAxLAorCS5leHRlbmRlZEZpbHRlcmluZ0NoYWluUG9pbnRlciA9ICgodWludDMyX3QpIE5VTEwpLAorCS50eXBlb3JsZW4gPSAzMDcyIC8qMTUzNiAqLyAsCisJLm5vbkJhY2tUb0JhY2tJZmdQYXJ0MSA9IDB4NDAsCisJLm5vbkJhY2tUb0JhY2tJZmdQYXJ0MiA9IDB4NjAsCisJLm1pbWludW1JbnRlckZyYW1lR2FwRW5mb3JjZW1lbnQgPSAweDUwLAorCS5iYWNrVG9CYWNrSW50ZXJGcmFtZUdhcCA9IDB4NjAsCisJLm1ibGludGVydmFsID0gMTI4LAorCS5ub3J0c3JieXRldGltZSA9IDUsCisJLmZyYWNzaXogPSAxLAorCS5zdHJpY3Rwcmlvcml0eXEgPSAweGZmLAorCS5hbHRCZWJUcnVuY2F0aW9uID0gMHhhLAorCS5leGNlc3NEZWZlciA9IDEsCisJLm1heFJldHJhbnNtaXNzaW9uID0gMHhmLAorCS5jb2xsaXNpb25XaW5kb3cgPSAweDM3LAorCS5yZWNlaXZlRmxvd0NvbnRyb2wgPSAxLAorCS5tYXhHcm91cEFkZHJJbkhhc2ggPSA0LAorCS5tYXhJbmRBZGRySW5IYXNoID0gNCwKKwkucHJlbCA9IDcsCisJLm1heEZyYW1lTGVuZ3RoID0gMTUxOCwKKwkubWluRnJhbWVMZW5ndGggPSA2NCwKKwkubWF4RDFMZW5ndGggPSAxNTIwLAorCS5tYXhEMkxlbmd0aCA9IDE1MjAsCisJLnZsYW50eXBlID0gMHg4MTAwLAorCS5lY2FtcHRyID0gKCh1aW50MzJfdCkgTlVMTCksCisJLmV2ZW50UmVnTWFzayA9IFVDQ0VfT1RIRVIsCisJLnBhdXNlUGVyaW9kID0gMHhmMDAwLAorCS5pbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWUgPSB7MSwgMSwgMSwgMSwgMSwgMSwgMSwgMX0sCisJLmJkUmluZ0xlblR4ID0geworCQkJVFhfQkRfUklOR19MRU4sCisJCQlUWF9CRF9SSU5HX0xFTiwKKwkJCVRYX0JEX1JJTkdfTEVOLAorCQkJVFhfQkRfUklOR19MRU4sCisJCQlUWF9CRF9SSU5HX0xFTiwKKwkJCVRYX0JEX1JJTkdfTEVOLAorCQkJVFhfQkRfUklOR19MRU4sCisJCQlUWF9CRF9SSU5HX0xFTn0sCisKKwkuYmRSaW5nTGVuUnggPSB7CisJCQlSWF9CRF9SSU5HX0xFTiwKKwkJCVJYX0JEX1JJTkdfTEVOLAorCQkJUlhfQkRfUklOR19MRU4sCisJCQlSWF9CRF9SSU5HX0xFTiwKKwkJCVJYX0JEX1JJTkdfTEVOLAorCQkJUlhfQkRfUklOR19MRU4sCisJCQlSWF9CRF9SSU5HX0xFTiwKKwkJCVJYX0JEX1JJTkdfTEVOfSwKKworCS5udW1TdGF0aW9uQWRkcmVzc2VzID0gVUNDX0dFVEhfTlVNX09GX1NUQVRJT05fQUREUkVTU0VTXzEsCisJLmxhcmdlc3RleHRlcm5hbGxvb2t1cGtleXNpemUgPQorCSAgICBRRV9GTFRSX0xBUkdFU1RfRVhURVJOQUxfVEFCTEVfTE9PS1VQX0tFWV9TSVpFX05PTkUsCisJLnN0YXRpc3RpY3NNb2RlID0gVUNDX0dFVEhfU1RBVElTVElDU19HQVRIRVJJTkdfTU9ERV9OT05FLAorCS52bGFuT3BlcmF0aW9uVGFnZ2VkID0gVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fVEFHR0VEX05PUCwKKwkudmxhbk9wZXJhdGlvbk5vblRhZ2dlZCA9IFVDQ19HRVRIX1ZMQU5fT1BFUkFUSU9OX05PTl9UQUdHRURfTk9QLAorCS5yeFFvU01vZGUgPSBVQ0NfR0VUSF9RT1NfTU9ERV9ERUZBVUxULAorCS5hdWZjID0gVVBTTVJfQVVUT01BVElDX0ZMT1dfQ09OVFJPTF9NT0RFX05PTkUsCisJLnBhZEFuZENyYyA9IE1BQ0NGRzJfUEFEX0FORF9DUkNfTU9ERV9QQURfQU5EX0NSQywKKwkubnVtVGhyZWFkc1R4ID0gVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNCwKKwkubnVtVGhyZWFkc1J4ID0gVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNCwKKwkucmlzY1R4ID0gUUVfUklTQ19BTExPQ0FUSU9OX1JJU0MxX0FORF9SSVNDMiwKKwkucmlzY1J4ID0gUUVfUklTQ19BTExPQ0FUSU9OX1JJU0MxX0FORF9SSVNDMiwKK307CisKK3N0YXRpYyB1Y2NfZ2V0aF9pbmZvX3QgdWdldGhfaW5mb1s4XTsKKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBtZW1fZGlzcCh1OCAqYWRkciwgaW50IHNpemUpCit7CisJdTggKmk7CisJaW50IHNpemUxNkFsaW5nID0gKHNpemUgPj4gNCkgPDwgNDsKKwlpbnQgc2l6ZTRBbGluZyA9IChzaXplID4+IDIpIDw8IDI7CisJaW50IG5vdEFsaWduID0gMDsKKwlpZiAoc2l6ZSAlIDE2KQorCQlub3RBbGlnbiA9IDE7CisKKwlmb3IgKGkgPSBhZGRyOyAodTMyKSBpIDwgKHUzMikgYWRkciArIHNpemUxNkFsaW5nOyBpICs9IDE2KQorCQlwcmludGsoIjB4JTA4eDogJTA4eCAlMDh4ICUwOHggJTA4eFxyXG4iLAorCQkgICAgICAgKHUzMikgaSwKKwkJICAgICAgICooKHUzMiAqKSAoaSkpLAorCQkgICAgICAgKigodTMyICopIChpICsgNCkpLAorCQkgICAgICAgKigodTMyICopIChpICsgOCkpLCAqKCh1MzIgKikgKGkgKyAxMikpKTsKKwlpZiAobm90QWxpZ24gPT0gMSkKKwkJcHJpbnRrKCIweCUwOHg6ICIsICh1MzIpIGkpOworCWZvciAoOyAodTMyKSBpIDwgKHUzMikgYWRkciArIHNpemU0QWxpbmc7IGkgKz0gNCkKKwkJcHJpbnRrKCIlMDh4ICIsICooKHUzMiAqKSAoaSkpKTsKKwlmb3IgKDsgKHUzMikgaSA8ICh1MzIpIGFkZHIgKyBzaXplOyBpKyspCisJCXByaW50aygiJTAyeCIsICooKHU4ICopIChpKSkpOworCWlmIChub3RBbGlnbiA9PSAxKQorCQlwcmludGsoIlxyXG4iKTsKK30KKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgQ09ORklHX1VHRVRIX0ZJTFRFUklORworc3RhdGljIHZvaWQgZW5xdWV1ZShzdHJ1Y3QgbGlzdF9oZWFkICpub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUodWdldGhfbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwobm9kZSwgbGgpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWdldGhfbG9jaywgZmxhZ3MpOworfQorI2VuZGlmIC8qIENPTkZJR19VR0VUSF9GSUxURVJJTkcgKi8KKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgKmRlcXVldWUoc3RydWN0IGxpc3RfaGVhZCAqbGgpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKHVnZXRoX2xvY2ssIGZsYWdzKTsKKwlpZiAoIWxpc3RfZW1wdHkobGgpKSB7CisJCXN0cnVjdCBsaXN0X2hlYWQgKm5vZGUgPSBsaC0+bmV4dDsKKwkJbGlzdF9kZWwobm9kZSk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUodWdldGhfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gbm9kZTsKKwl9IGVsc2UgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKHVnZXRoX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGdldF9pbnRlcmZhY2VfZGV0YWlscyhlbmV0X2ludGVyZmFjZV9lIGVuZXRfaW50ZXJmYWNlLAorCQkJCSBlbmV0X3NwZWVkX2UgKnNwZWVkLAorCQkJCSBpbnQgKnIxMG0sCisJCQkJIGludCAqcm1tLAorCQkJCSBpbnQgKnJwbSwKKwkJCQkgaW50ICp0YmksIGludCAqbGltaXRlZF90b19mdWxsX2R1cGxleCkKK3sKKwkvKiBBbmFseXplIGVuZXRfaW50ZXJmYWNlIGFjY29yZGluZyB0byBJbnRlcmZhY2UgTW9kZQorCUNvbmZpZ3VyYXRpb24gdGFibGUgKi8KKwlzd2l0Y2ggKGVuZXRfaW50ZXJmYWNlKSB7CisJY2FzZSBFTkVUXzEwX01JSToKKwkJKnNwZWVkID0gRU5FVF9TUEVFRF8xMEJUOworCQlicmVhazsKKwljYXNlIEVORVRfMTBfUk1JSToKKwkJKnNwZWVkID0gRU5FVF9TUEVFRF8xMEJUOworCQkqcjEwbSA9IDE7CisJCSpybW0gPSAxOworCQlicmVhazsKKwljYXNlIEVORVRfMTBfUkdNSUk6CisJCSpzcGVlZCA9IEVORVRfU1BFRURfMTBCVDsKKwkJKnJwbSA9IDE7CisJCSpyMTBtID0gMTsKKwkJKmxpbWl0ZWRfdG9fZnVsbF9kdXBsZXggPSAxOworCQlicmVhazsKKwljYXNlIEVORVRfMTAwX01JSToKKwkJKnNwZWVkID0gRU5FVF9TUEVFRF8xMDBCVDsKKwkJYnJlYWs7CisJY2FzZSBFTkVUXzEwMF9STUlJOgorCQkqc3BlZWQgPSBFTkVUX1NQRUVEXzEwMEJUOworCQkqcm1tID0gMTsKKwkJYnJlYWs7CisJY2FzZSBFTkVUXzEwMF9SR01JSToKKwkJKnNwZWVkID0gRU5FVF9TUEVFRF8xMDBCVDsKKwkJKnJwbSA9IDE7CisJCSpsaW1pdGVkX3RvX2Z1bGxfZHVwbGV4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBFTkVUXzEwMDBfR01JSToKKwkJKnNwZWVkID0gRU5FVF9TUEVFRF8xMDAwQlQ7CisJCSpsaW1pdGVkX3RvX2Z1bGxfZHVwbGV4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBFTkVUXzEwMDBfUkdNSUk6CisJCSpzcGVlZCA9IEVORVRfU1BFRURfMTAwMEJUOworCQkqcnBtID0gMTsKKwkJKmxpbWl0ZWRfdG9fZnVsbF9kdXBsZXggPSAxOworCQlicmVhazsKKwljYXNlIEVORVRfMTAwMF9UQkk6CisJCSpzcGVlZCA9IEVORVRfU1BFRURfMTAwMEJUOworCQkqdGJpID0gMTsKKwkJKmxpbWl0ZWRfdG9fZnVsbF9kdXBsZXggPSAxOworCQlicmVhazsKKwljYXNlIEVORVRfMTAwMF9SVEJJOgorCQkqc3BlZWQgPSBFTkVUX1NQRUVEXzEwMDBCVDsKKwkJKnJwbSA9IDE7CisJCSp0YmkgPSAxOworCQkqbGltaXRlZF90b19mdWxsX2R1cGxleCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBza19idWZmICpnZXRfbmV3X3NrYih1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLCB1OCAqYmQpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLm1heF9yeF9idWZfbGVuZ3RoICsKKwkJCQkgIFVDQ19HRVRIX1JYX0RBVEFfQlVGX0FMSUdOTUVOVCk7CisKKwlpZiAoc2tiID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyogV2UgbmVlZCB0aGUgZGF0YSBidWZmZXIgdG8gYmUgYWxpZ25lZCBwcm9wZXJseS4gIFdlIHdpbGwgcmVzZXJ2ZQorCSAqIGFzIG1hbnkgYnl0ZXMgYXMgbmVlZGVkIHRvIGFsaWduIHRoZSBkYXRhIHByb3Blcmx5CisJICovCisJc2tiX3Jlc2VydmUoc2tiLAorCQkgICAgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UIC0KKwkJICAgICgoKHVuc2lnbmVkKXNrYi0+ZGF0YSkgJiAoVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UIC0KKwkJCQkJICAgICAgMSkpKTsKKworCXNrYi0+ZGV2ID0gdWdldGgtPmRldjsKKworCUJEX0JVRkZFUl9TRVQoYmQsCisJCSAgICAgIGRtYV9tYXBfc2luZ2xlKE5VTEwsCisJCQkJICAgICBza2ItPmRhdGEsCisJCQkJICAgICB1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5tYXhfcnhfYnVmX2xlbmd0aCArCisJCQkJICAgICBVQ0NfR0VUSF9SWF9EQVRBX0JVRl9BTElHTk1FTlQsCisJCQkJICAgICBETUFfRlJPTV9ERVZJQ0UpKTsKKworCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwKKwkJCQkgKFJfRSB8IFJfSSB8CisJCQkJICAoQkRfU1RBVFVTX0FORF9MRU5HVEgoYmQpICYgUl9XKSkpOworCisJcmV0dXJuIHNrYjsKK30KKworc3RhdGljIGludCByeF9iZF9idWZmZXJfc2V0KHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsIHU4IHJ4USkKK3sKKwl1OCAqYmQ7CisJdTMyIGJkX3N0YXR1czsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBpOworCisJYmQgPSB1Z2V0aC0+cF9yeF9iZF9yaW5nW3J4UV07CisJaSA9IDA7CisKKwlkbyB7CisJCWJkX3N0YXR1cyA9IEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKTsKKwkJc2tiID0gZ2V0X25ld19za2IodWdldGgsIGJkKTsKKworCQlpZiAoIXNrYikJLyogSWYgY2FuIG5vdCBhbGxvY2F0ZSBkYXRhIGJ1ZmZlciwKKwkJCQlhYm9ydC4gQ2xlYW51cCB3aWxsIGJlIGVsc2V3aGVyZSAqLworCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJdWdldGgtPnJ4X3NrYnVmZltyeFFdW2ldID0gc2tiOworCisJCS8qIGFkdmFuY2UgdGhlIEJEIHBvaW50ZXIgKi8KKwkJYmQgKz0gVUNDX0dFVEhfU0laRV9PRl9CRDsKKwkJaSsrOworCX0gd2hpbGUgKCEoYmRfc3RhdHVzICYgUl9XKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxsX2luaXRfZW5ldF9lbnRyaWVzKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsCisJCQkJICB2b2xhdGlsZSB1MzIgKnBfc3RhcnQsCisJCQkJICB1OCBudW1fZW50cmllcywKKwkJCQkgIHUzMiB0aHJlYWRfc2l6ZSwKKwkJCQkgIHUzMiB0aHJlYWRfYWxpZ25tZW50LAorCQkJCSAgcWVfcmlzY19hbGxvY2F0aW9uX2UgcmlzYywKKwkJCQkgIGludCBza2lwX3BhZ2VfZm9yX2ZpcnN0X2VudHJ5KQoreworCXUzMiBpbml0X2VuZXRfb2Zmc2V0OworCXU4IGk7CisJaW50IHNudW07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgeworCQlpZiAoKHNudW0gPSBxZV9nZXRfc251bSgpKSA8IDApIHsKKwkJCXVnZXRoX2VycigiZmlsbF9pbml0X2VuZXRfZW50cmllczogQ2FuIG5vdCBnZXQgU05VTS4iKTsKKwkJCXJldHVybiBzbnVtOworCQl9CisJCWlmICgoaSA9PSAwKSAmJiBza2lwX3BhZ2VfZm9yX2ZpcnN0X2VudHJ5KQorCQkvKiBGaXJzdCBlbnRyeSBvZiBSeCBkb2VzIG5vdCBoYXZlIHBhZ2UgKi8KKwkJCWluaXRfZW5ldF9vZmZzZXQgPSAwOworCQllbHNlIHsKKwkJCWluaXRfZW5ldF9vZmZzZXQgPQorCQkJICAgIHFlX211cmFtX2FsbG9jKHRocmVhZF9zaXplLCB0aHJlYWRfYWxpZ25tZW50KTsKKwkJCWlmIChJU19NVVJBTV9FUlIoaW5pdF9lbmV0X29mZnNldCkpIHsKKwkJCQl1Z2V0aF9lcnIKKwkJKCJmaWxsX2luaXRfZW5ldF9lbnRyaWVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeS4iKTsKKwkJCQlxZV9wdXRfc251bSgodTgpIHNudW0pOworCQkJCXJldHVybiAtRU5PTUVNOworCQkJfQorCQl9CisJCSoocF9zdGFydCsrKSA9CisJCSAgICAoKHU4KSBzbnVtIDw8IEVORVRfSU5JVF9QQVJBTV9TTlVNX1NISUZUKSB8IGluaXRfZW5ldF9vZmZzZXQKKwkJICAgIHwgcmlzYzsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByZXR1cm5faW5pdF9lbmV0X2VudHJpZXModWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKKwkJCQkgICAgdm9sYXRpbGUgdTMyICpwX3N0YXJ0LAorCQkJCSAgICB1OCBudW1fZW50cmllcywKKwkJCQkgICAgcWVfcmlzY19hbGxvY2F0aW9uX2UgcmlzYywKKwkJCQkgICAgaW50IHNraXBfcGFnZV9mb3JfZmlyc3RfZW50cnkpCit7CisJdTMyIGluaXRfZW5ldF9vZmZzZXQ7CisJdTggaTsKKwlpbnQgc251bTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7CisJCS8qIENoZWNrIHRoYXQgdGhpcyBlbnRyeSB3YXMgYWN0dWFsbHkgdmFsaWQgLS0KKwkJbmVlZGVkIGluIGNhc2UgZmFpbGVkIGluIGFsbG9jYXRpb25zICovCisJCWlmICgoKnBfc3RhcnQgJiBFTkVUX0lOSVRfUEFSQU1fUklTQ19NQVNLKSA9PSByaXNjKSB7CisJCQlzbnVtID0KKwkJCSAgICAodTMyKSAoKnBfc3RhcnQgJiBFTkVUX0lOSVRfUEFSQU1fU05VTV9NQVNLKSA+PgorCQkJICAgIEVORVRfSU5JVF9QQVJBTV9TTlVNX1NISUZUOworCQkJcWVfcHV0X3NudW0oKHU4KSBzbnVtKTsKKwkJCWlmICghKChpID09IDApICYmIHNraXBfcGFnZV9mb3JfZmlyc3RfZW50cnkpKSB7CisJCQkvKiBGaXJzdCBlbnRyeSBvZiBSeCBkb2VzIG5vdCBoYXZlIHBhZ2UgKi8KKwkJCQlpbml0X2VuZXRfb2Zmc2V0ID0KKwkJCQkgICAgKGluX2JlMzIocF9zdGFydCkgJgorCQkJCSAgICAgRU5FVF9JTklUX1BBUkFNX1BUUl9NQVNLKTsKKwkJCQlxZV9tdXJhbV9mcmVlKGluaXRfZW5ldF9vZmZzZXQpOworCQkJfQorCQkJKihwX3N0YXJ0KyspID0gMDsJLyogSnVzdCBmb3IgY29zbWV0aWNzICovCisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgaW50IGR1bXBfaW5pdF9lbmV0X2VudHJpZXModWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKKwkJCQkgIHZvbGF0aWxlIHUzMiAqcF9zdGFydCwKKwkJCQkgIHU4IG51bV9lbnRyaWVzLAorCQkJCSAgdTMyIHRocmVhZF9zaXplLAorCQkJCSAgcWVfcmlzY19hbGxvY2F0aW9uX2UgcmlzYywKKwkJCQkgIGludCBza2lwX3BhZ2VfZm9yX2ZpcnN0X2VudHJ5KQoreworCXUzMiBpbml0X2VuZXRfb2Zmc2V0OworCXU4IGk7CisJaW50IHNudW07CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudHJpZXM7IGkrKykgeworCQkvKiBDaGVjayB0aGF0IHRoaXMgZW50cnkgd2FzIGFjdHVhbGx5IHZhbGlkIC0tCisJCW5lZWRlZCBpbiBjYXNlIGZhaWxlZCBpbiBhbGxvY2F0aW9ucyAqLworCQlpZiAoKCpwX3N0YXJ0ICYgRU5FVF9JTklUX1BBUkFNX1JJU0NfTUFTSykgPT0gcmlzYykgeworCQkJc251bSA9CisJCQkgICAgKHUzMikgKCpwX3N0YXJ0ICYgRU5FVF9JTklUX1BBUkFNX1NOVU1fTUFTSykgPj4KKwkJCSAgICBFTkVUX0lOSVRfUEFSQU1fU05VTV9TSElGVDsKKwkJCXFlX3B1dF9zbnVtKCh1OCkgc251bSk7CisJCQlpZiAoISgoaSA9PSAwKSAmJiBza2lwX3BhZ2VfZm9yX2ZpcnN0X2VudHJ5KSkgeworCQkJLyogRmlyc3QgZW50cnkgb2YgUnggZG9lcyBub3QgaGF2ZSBwYWdlICovCisJCQkJaW5pdF9lbmV0X29mZnNldCA9CisJCQkJICAgIChpbl9iZTMyKHBfc3RhcnQpICYKKwkJCQkgICAgIEVORVRfSU5JVF9QQVJBTV9QVFJfTUFTSyk7CisJCQkJdWdldGhfaW5mbygiSW5pdCBlbmV0IGVudHJ5ICVkOiIsIGkpOworCQkJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwKKwkJCQkJICAgKHUzMikKKwkJCQkJICAgcWVfbXVyYW1fYWRkcihpbml0X2VuZXRfb2Zmc2V0KSk7CisJCQkJbWVtX2Rpc3AocWVfbXVyYW1fYWRkcihpbml0X2VuZXRfb2Zmc2V0KSwKKwkJCQkJIHRocmVhZF9zaXplKTsKKwkJCX0KKwkJCXBfc3RhcnQrKzsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVUdFVEhfRklMVEVSSU5HCitzdGF0aWMgZW5ldF9hZGRyX2NvbnRhaW5lcl90ICpnZXRfZW5ldF9hZGRyX2NvbnRhaW5lcih2b2lkKQoreworCWVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQ7CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgKi8KKwllbmV0X2FkZHJfY29udCA9IGttYWxsb2Moc2l6ZW9mKGVuZXRfYWRkcl9jb250YWluZXJfdCksIEdGUF9LRVJORUwpOworCWlmICghZW5ldF9hZGRyX2NvbnQpIHsKKwkJdWdldGhfZXJyKCIlczogTm8gbWVtb3J5IGZvciBlbmV0X2FkZHJfY29udGFpbmVyX3Qgb2JqZWN0LiIsCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBlbmV0X2FkZHJfY29udDsKK30KKyNlbmRpZiAvKiBDT05GSUdfVUdFVEhfRklMVEVSSU5HICovCisKK3N0YXRpYyB2b2lkIHB1dF9lbmV0X2FkZHJfY29udGFpbmVyKGVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQpCit7CisJa2ZyZWUoZW5ldF9hZGRyX2NvbnQpOworfQorCisjaWZkZWYgQ09ORklHX1VHRVRIX0ZJTFRFUklORworc3RhdGljIGludCBod19hZGRfYWRkcl9pbl9wYWRkcih1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorCQkJCWVuZXRfYWRkcl90ICpwX2VuZXRfYWRkciwgdTggcGFkZHJfbnVtKQoreworCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OworCisJaWYgKCEocGFkZHJfbnVtIDwgTlVNX09GX1BBRERSUykpIHsKKwkJdWdldGhfd2FybigiJXM6IElsbGFnZWwgcGFkZHJfbnVtLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXBfODJ4eF9hZGRyX2ZpbHQgPQorCSAgICAodWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3QgKikgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT4KKwkgICAgYWRkcmVzc2ZpbHRlcmluZzsKKworCS8qIEV0aGVybmV0IGZyYW1lcyBhcmUgZGVmaW5lZCBpbiBMaXR0bGUgRW5kaWFuIG1vZGUsICAgICovCisJLyogdGhlcmVmb3JlIHRvIGluc2VydCB0aGUgYWRkcmVzcyB3ZSByZXZlcnNlIHRoZSBieXRlcy4gKi8KKwlvdXRfYmUxNigmcF84Mnh4X2FkZHJfZmlsdC0+cGFkZHJbcGFkZHJfbnVtXS5oLAorCQkgKHUxNikgKCgodTE2KSAoKCh1MTYpICgoKnBfZW5ldF9hZGRyKVs1XSkpIDw8IDgpKSB8CisJCQkodTE2KSAoKnBfZW5ldF9hZGRyKVs0XSkpOworCW91dF9iZTE2KCZwXzgyeHhfYWRkcl9maWx0LT5wYWRkcltwYWRkcl9udW1dLm0sCisJCSAodTE2KSAoKCh1MTYpICgoKHUxNikgKCgqcF9lbmV0X2FkZHIpWzNdKSkgPDwgOCkpIHwKKwkJCSh1MTYpICgqcF9lbmV0X2FkZHIpWzJdKSk7CisJb3V0X2JlMTYoJnBfODJ4eF9hZGRyX2ZpbHQtPnBhZGRyW3BhZGRyX251bV0ubCwKKwkJICh1MTYpICgoKHUxNikgKCgodTE2KSAoKCpwX2VuZXRfYWRkcilbMV0pKSA8PCA4KSkgfAorCQkJKHUxNikgKCpwX2VuZXRfYWRkcilbMF0pKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19VR0VUSF9GSUxURVJJTkcgKi8KKworc3RhdGljIGludCBod19jbGVhcl9hZGRyX2luX3BhZGRyKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsIHU4IHBhZGRyX251bSkKK3sKKwl1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqcF84Mnh4X2FkZHJfZmlsdDsKKworCWlmICghKHBhZGRyX251bSA8IE5VTV9PRl9QQUREUlMpKSB7CisJCXVnZXRoX3dhcm4oIiVzOiBJbGxhZ2VsIHBhZGRyX251bS4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwXzgyeHhfYWRkcl9maWx0ID0KKwkgICAgKHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICopIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+CisJICAgIGFkZHJlc3NmaWx0ZXJpbmc7CisKKwkvKiBXcml0aW5nIGFkZHJlc3MgZmYuZmYuZmYuZmYuZmYuZmYgZGlzYWJsZXMgYWRkcmVzcworCXJlY29nbml0aW9uIGZvciB0aGlzIHJlZ2lzdGVyICovCisJb3V0X2JlMTYoJnBfODJ4eF9hZGRyX2ZpbHQtPnBhZGRyW3BhZGRyX251bV0uaCwgMHhmZmZmKTsKKwlvdXRfYmUxNigmcF84Mnh4X2FkZHJfZmlsdC0+cGFkZHJbcGFkZHJfbnVtXS5tLCAweGZmZmYpOworCW91dF9iZTE2KCZwXzgyeHhfYWRkcl9maWx0LT5wYWRkcltwYWRkcl9udW1dLmwsIDB4ZmZmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHdfYWRkX2FkZHJfaW5faGFzaCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorCQkJCWVuZXRfYWRkcl90ICpwX2VuZXRfYWRkcikKK3sKKwl1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqcF84Mnh4X2FkZHJfZmlsdDsKKwl1MzIgY2Vjcl9zdWJibG9jazsKKworCXBfODJ4eF9hZGRyX2ZpbHQgPQorCSAgICAodWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtX3QgKikgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT4KKwkgICAgYWRkcmVzc2ZpbHRlcmluZzsKKworCWNlY3Jfc3ViYmxvY2sgPQorCSAgICB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2sodWdldGgtPnVnX2luZm8tPnVmX2luZm8udWNjX251bSk7CisKKwkvKiBFdGhlcm5ldCBmcmFtZXMgYXJlIGRlZmluZWQgaW4gTGl0dGxlIEVuZGlhbiBtb2RlLAorCXRoZXJlZm9yIHRvIGluc2VydCAqLworCS8qIHRoZSBhZGRyZXNzIHRvIHRoZSBoYXNoIChCaWcgRW5kaWFuIG1vZGUpLCB3ZSByZXZlcnNlIHRoZSBieXRlcy4qLworCW91dF9iZTE2KCZwXzgyeHhfYWRkcl9maWx0LT50YWRkci5oLAorCQkgKHUxNikgKCgodTE2KSAoKCh1MTYpICgoKnBfZW5ldF9hZGRyKVs1XSkpIDw8IDgpKSB8CisJCQkodTE2KSAoKnBfZW5ldF9hZGRyKVs0XSkpOworCW91dF9iZTE2KCZwXzgyeHhfYWRkcl9maWx0LT50YWRkci5tLAorCQkgKHUxNikgKCgodTE2KSAoKCh1MTYpICgoKnBfZW5ldF9hZGRyKVszXSkpIDw8IDgpKSB8CisJCQkodTE2KSAoKnBfZW5ldF9hZGRyKVsyXSkpOworCW91dF9iZTE2KCZwXzgyeHhfYWRkcl9maWx0LT50YWRkci5sLAorCQkgKHUxNikgKCgodTE2KSAoKCh1MTYpICgoKnBfZW5ldF9hZGRyKVsxXSkpIDw8IDgpKSB8CisJCQkodTE2KSAoKnBfZW5ldF9hZGRyKVswXSkpOworCisJcWVfaXNzdWVfY21kKFFFX1NFVF9HUk9VUF9BRERSRVNTLCBjZWNyX3N1YmJsb2NrLAorCQkgICAgICh1OCkgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsIDApOworfQorCisjaWZkZWYgQ09ORklHX1VHRVRIX01BR0lDX1BBQ0tFVAorc3RhdGljIHZvaWQgbWFnaWNfcGFja2V0X2RldGVjdGlvbl9lbmFibGUodWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCkKK3sKKwl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7CisJdWNjX2dldGhfdCAqdWdfcmVnczsKKwl1MzIgbWFjY2ZnMiwgdWNjbTsKKworCXVjY2YgPSB1Z2V0aC0+dWNjZjsKKwl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7CisKKwkvKiBFbmFibGUgaW50ZXJydXB0cyBmb3IgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqLworCXVjY20gPSBpbl9iZTMyKHVjY2YtPnBfdWNjbSk7CisJdWNjbSB8PSBVQ0NFX01QRDsKKwlvdXRfYmUzMih1Y2NmLT5wX3VjY20sIHVjY20pOworCisJLyogRW5hYmxlIG1hZ2ljIHBhY2tldCBkZXRlY3Rpb24gKi8KKwltYWNjZmcyID0gaW5fYmUzMigmdWdfcmVncy0+bWFjY2ZnMik7CisJbWFjY2ZnMiB8PSBNQUNDRkcyX01QRTsKKwlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgbWFjY2ZnMik7Cit9CisKK3N0YXRpYyB2b2lkIG1hZ2ljX3BhY2tldF9kZXRlY3Rpb25fZGlzYWJsZSh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQoreworCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwl1Y2NfZ2V0aF90ICp1Z19yZWdzOworCXUzMiBtYWNjZmcyLCB1Y2NtOworCisJdWNjZiA9IHVnZXRoLT51Y2NmOworCXVnX3JlZ3MgPSB1Z2V0aC0+dWdfcmVnczsKKworCS8qIERpc2FibGUgaW50ZXJydXB0cyBmb3IgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqLworCXVjY20gPSBpbl9iZTMyKHVjY2YtPnBfdWNjbSk7CisJdWNjbSAmPSB+VUNDRV9NUEQ7CisJb3V0X2JlMzIodWNjZi0+cF91Y2NtLCB1Y2NtKTsKKworCS8qIERpc2FibGUgbWFnaWMgcGFja2V0IGRldGVjdGlvbiAqLworCW1hY2NmZzIgPSBpbl9iZTMyKCZ1Z19yZWdzLT5tYWNjZmcyKTsKKwltYWNjZmcyICY9IH5NQUNDRkcyX01QRTsKKwlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgbWFjY2ZnMik7Cit9CisjZW5kaWYgLyogTUFHSUNfUEFDS0VUICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNvbXBhcmVfYWRkcihlbmV0X2FkZHJfdCAqYWRkcjEsIGVuZXRfYWRkcl90ICphZGRyMikKK3sKKwlyZXR1cm4gbWVtY21wKGFkZHIxLCBhZGRyMiwgRU5FVF9OVU1fT0NURVRTX1BFUl9BRERSRVNTKTsKK30KKworI2lmZGVmIERFQlVHCitzdGF0aWMgdm9pZCBnZXRfc3RhdGlzdGljcyh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorCQkJICAgdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc190ICoKKwkJCSAgIHR4X2Zpcm13YXJlX3N0YXRpc3RpY3MsCisJCQkgICB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3QgKgorCQkJICAgcnhfZmlybXdhcmVfc3RhdGlzdGljcywKKwkJCSAgIHVjY19nZXRoX2hhcmR3YXJlX3N0YXRpc3RpY3NfdCAqaGFyZHdhcmVfc3RhdGlzdGljcykKK3sKKwl1Y2NfZmFzdF90ICp1Zl9yZWdzOworCXVjY19nZXRoX3QgKnVnX3JlZ3M7CisJdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QgKnBfdHhfZndfc3RhdGlzdGljc19wcmFtOworCXVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90ICpwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKKworCXVnX3JlZ3MgPSB1Z2V0aC0+dWdfcmVnczsKKwl1Zl9yZWdzID0gKHVjY19mYXN0X3QgKikgdWdfcmVnczsKKwlwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9IHVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKKwlwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9IHVnZXRoLT5wX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbTsKKworCS8qIFR4IGZpcm13YXJlIG9ubHkgaWYgdXNlciBoYW5kZWQgcG9pbnRlciBhbmQgZHJpdmVyIGFjdHVhbGx5CisJZ2F0aGVycyBUeCBmaXJtd2FyZSBzdGF0aXN0aWNzICovCisJaWYgKHR4X2Zpcm13YXJlX3N0YXRpc3RpY3MgJiYgcF90eF9md19zdGF0aXN0aWNzX3ByYW0pIHsKKwkJdHhfZmlybXdhcmVfc3RhdGlzdGljcy0+c2ljb2x0eCA9CisJCSAgICBpbl9iZTMyKCZwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+c2ljb2x0eCk7CisJCXR4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPm11bGNvbHR4ID0KKwkJICAgIGluX2JlMzIoJnBfdHhfZndfc3RhdGlzdGljc19wcmFtLT5tdWxjb2x0eCk7CisJCXR4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPmxhdGVjb2x0eGZyID0KKwkJICAgIGluX2JlMzIoJnBfdHhfZndfc3RhdGlzdGljc19wcmFtLT5sYXRlY29sdHhmcik7CisJCXR4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPmZyYWJvcnRkdWVjb2wgPQorCQkgICAgaW5fYmUzMigmcF90eF9md19zdGF0aXN0aWNzX3ByYW0tPmZyYWJvcnRkdWVjb2wpOworCQl0eF9maXJtd2FyZV9zdGF0aXN0aWNzLT5mcmxvc3Rpbm1hY3R4ZXIgPQorCQkgICAgaW5fYmUzMigmcF90eF9md19zdGF0aXN0aWNzX3ByYW0tPmZybG9zdGlubWFjdHhlcik7CisJCXR4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPmNhcnJpZXJzZW5zZWVydHggPQorCQkgICAgaW5fYmUzMigmcF90eF9md19zdGF0aXN0aWNzX3ByYW0tPmNhcnJpZXJzZW5zZWVydHgpOworCQl0eF9maXJtd2FyZV9zdGF0aXN0aWNzLT5mcnR4b2sgPQorCQkgICAgaW5fYmUzMigmcF90eF9md19zdGF0aXN0aWNzX3ByYW0tPmZydHhvayk7CisJCXR4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnR4ZnJleGNlc3NpdmVkZWZlciA9CisJCSAgICBpbl9iZTMyKCZwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+dHhmcmV4Y2Vzc2l2ZWRlZmVyKTsKKwkJdHhfZmlybXdhcmVfc3RhdGlzdGljcy0+dHhwa3RzMjU2ID0KKwkJICAgIGluX2JlMzIoJnBfdHhfZndfc3RhdGlzdGljc19wcmFtLT50eHBrdHMyNTYpOworCQl0eF9maXJtd2FyZV9zdGF0aXN0aWNzLT50eHBrdHM1MTIgPQorCQkgICAgaW5fYmUzMigmcF90eF9md19zdGF0aXN0aWNzX3ByYW0tPnR4cGt0czUxMik7CisJCXR4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnR4cGt0czEwMjQgPQorCQkgICAgaW5fYmUzMigmcF90eF9md19zdGF0aXN0aWNzX3ByYW0tPnR4cGt0czEwMjQpOworCQl0eF9maXJtd2FyZV9zdGF0aXN0aWNzLT50eHBrdHNqdW1ibyA9CisJCSAgICBpbl9iZTMyKCZwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+dHhwa3RzanVtYm8pOworCX0KKworCS8qIFJ4IGZpcm13YXJlIG9ubHkgaWYgdXNlciBoYW5kZWQgcG9pbnRlciBhbmQgZHJpdmVyIGFjdHVhbGx5CisJICogZ2F0aGVycyBSeCBmaXJtd2FyZSBzdGF0aXN0aWNzICovCisJaWYgKHJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MgJiYgcF9yeF9md19zdGF0aXN0aWNzX3ByYW0pIHsKKwkJaW50IGk7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPmZycnhmY3NlciA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+ZnJyeGZjc2VyKTsKKwkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+ZnJhbGlnbmVyID0KKwkJICAgIGluX2JlMzIoJnBfcnhfZndfc3RhdGlzdGljc19wcmFtLT5mcmFsaWduZXIpOworCQlyeF9maXJtd2FyZV9zdGF0aXN0aWNzLT5pbnJhbmdlbGVucnhlciA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+aW5yYW5nZWxlbnJ4ZXIpOworCQlyeF9maXJtd2FyZV9zdGF0aXN0aWNzLT5vdXRyYW5nZWxlbnJ4ZXIgPQorCQkgICAgaW5fYmUzMigmcF9yeF9md19zdGF0aXN0aWNzX3ByYW0tPm91dHJhbmdlbGVucnhlcik7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPmZydG9vbG9uZyA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+ZnJ0b29sb25nKTsKKwkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+cnVudCA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+cnVudCk7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnZlcnlsb25nZXZlbnQgPQorCQkgICAgaW5fYmUzMigmcF9yeF9md19zdGF0aXN0aWNzX3ByYW0tPnZlcnlsb25nZXZlbnQpOworCQlyeF9maXJtd2FyZV9zdGF0aXN0aWNzLT5zeW1ib2xlcnJvciA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+c3ltYm9sZXJyb3IpOworCQlyeF9maXJtd2FyZV9zdGF0aXN0aWNzLT5kcm9wYnN5ID0KKwkJICAgIGluX2JlMzIoJnBfcnhfZndfc3RhdGlzdGljc19wcmFtLT5kcm9wYnN5KTsKKwkJZm9yIChpID0gMDsgaSA8IDB4ODsgaSsrKQorCQkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+cmVzMFtpXSA9CisJCQkgICAgcF9yeF9md19zdGF0aXN0aWNzX3ByYW0tPnJlczBbaV07CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPm1pc21hdGNoZHJvcCA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+bWlzbWF0Y2hkcm9wKTsKKwkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+dW5kZXJwa3RzID0KKwkJICAgIGluX2JlMzIoJnBfcnhfZndfc3RhdGlzdGljc19wcmFtLT51bmRlcnBrdHMpOworCQlyeF9maXJtd2FyZV9zdGF0aXN0aWNzLT5wa3RzMjU2ID0KKwkJICAgIGluX2JlMzIoJnBfcnhfZndfc3RhdGlzdGljc19wcmFtLT5wa3RzMjU2KTsKKwkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+cGt0czUxMiA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+cGt0czUxMik7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnBrdHMxMDI0ID0KKwkJICAgIGluX2JlMzIoJnBfcnhfZndfc3RhdGlzdGljc19wcmFtLT5wa3RzMTAyNCk7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnBrdHNqdW1ibyA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+cGt0c2p1bWJvKTsKKwkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+ZnJsb3NzaW5tYWNlciA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+ZnJsb3NzaW5tYWNlcik7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnBhdXNlZnIgPQorCQkgICAgaW5fYmUzMigmcF9yeF9md19zdGF0aXN0aWNzX3ByYW0tPnBhdXNlZnIpOworCQlmb3IgKGkgPSAwOyBpIDwgMHg0OyBpKyspCisJCQlyeF9maXJtd2FyZV9zdGF0aXN0aWNzLT5yZXMxW2ldID0KKwkJCSAgICBwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+cmVzMVtpXTsKKwkJcnhfZmlybXdhcmVfc3RhdGlzdGljcy0+cmVtb3ZldmxhbiA9CisJCSAgICBpbl9iZTMyKCZwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbS0+cmVtb3Zldmxhbik7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPnJlcGxhY2V2bGFuID0KKwkJICAgIGluX2JlMzIoJnBfcnhfZndfc3RhdGlzdGljc19wcmFtLT5yZXBsYWNldmxhbik7CisJCXJ4X2Zpcm13YXJlX3N0YXRpc3RpY3MtPmluc2VydHZsYW4gPQorCQkgICAgaW5fYmUzMigmcF9yeF9md19zdGF0aXN0aWNzX3ByYW0tPmluc2VydHZsYW4pOworCX0KKworCS8qIEhhcmR3YXJlIG9ubHkgaWYgdXNlciBoYW5kZWQgcG9pbnRlciBhbmQgZHJpdmVyIGFjdHVhbGx5CisJZ2F0aGVycyBoYXJkd2FyZSBzdGF0aXN0aWNzICovCisJaWYgKGhhcmR3YXJlX3N0YXRpc3RpY3MgJiYgKGluX2JlMzIoJnVmX3JlZ3MtPnVwc21yKSAmIFVQU01SX0hTRSkpIHsKKwkJaGFyZHdhcmVfc3RhdGlzdGljcy0+dHg2NCA9IGluX2JlMzIoJnVnX3JlZ3MtPnR4NjQpOworCQloYXJkd2FyZV9zdGF0aXN0aWNzLT50eDEyNyA9IGluX2JlMzIoJnVnX3JlZ3MtPnR4MTI3KTsKKwkJaGFyZHdhcmVfc3RhdGlzdGljcy0+dHgyNTUgPSBpbl9iZTMyKCZ1Z19yZWdzLT50eDI1NSk7CisJCWhhcmR3YXJlX3N0YXRpc3RpY3MtPnJ4NjQgPSBpbl9iZTMyKCZ1Z19yZWdzLT5yeDY0KTsKKwkJaGFyZHdhcmVfc3RhdGlzdGljcy0+cngxMjcgPSBpbl9iZTMyKCZ1Z19yZWdzLT5yeDEyNyk7CisJCWhhcmR3YXJlX3N0YXRpc3RpY3MtPnJ4MjU1ID0gaW5fYmUzMigmdWdfcmVncy0+cngyNTUpOworCQloYXJkd2FyZV9zdGF0aXN0aWNzLT50eG9rID0gaW5fYmUzMigmdWdfcmVncy0+dHhvayk7CisJCWhhcmR3YXJlX3N0YXRpc3RpY3MtPnR4Y2YgPSBpbl9iZTE2KCZ1Z19yZWdzLT50eGNmKTsKKwkJaGFyZHdhcmVfc3RhdGlzdGljcy0+dG1jYSA9IGluX2JlMzIoJnVnX3JlZ3MtPnRtY2EpOworCQloYXJkd2FyZV9zdGF0aXN0aWNzLT50YmNhID0gaW5fYmUzMigmdWdfcmVncy0+dGJjYSk7CisJCWhhcmR3YXJlX3N0YXRpc3RpY3MtPnJ4Zm9rID0gaW5fYmUzMigmdWdfcmVncy0+cnhmb2spOworCQloYXJkd2FyZV9zdGF0aXN0aWNzLT5yeGJvayA9IGluX2JlMzIoJnVnX3JlZ3MtPnJ4Ym9rKTsKKwkJaGFyZHdhcmVfc3RhdGlzdGljcy0+cmJ5dCA9IGluX2JlMzIoJnVnX3JlZ3MtPnJieXQpOworCQloYXJkd2FyZV9zdGF0aXN0aWNzLT5ybWNhID0gaW5fYmUzMigmdWdfcmVncy0+cm1jYSk7CisJCWhhcmR3YXJlX3N0YXRpc3RpY3MtPnJiY2EgPSBpbl9iZTMyKCZ1Z19yZWdzLT5yYmNhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfYmRzKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCit7CisJaW50IGk7CisJaW50IGxlbmd0aDsKKworCWZvciAoaSA9IDA7IGkgPCB1Z2V0aC0+dWdfaW5mby0+bnVtUXVldWVzVHg7IGkrKykgeworCQlpZiAodWdldGgtPnBfdHhfYmRfcmluZ1tpXSkgeworCQkJbGVuZ3RoID0KKwkJCSAgICAodWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblR4W2ldICoKKwkJCSAgICAgVUNDX0dFVEhfU0laRV9PRl9CRCk7CisJCQl1Z2V0aF9pbmZvKCJUWCBCRHNbJWRdIiwgaSk7CisJCQltZW1fZGlzcCh1Z2V0aC0+cF90eF9iZF9yaW5nW2ldLCBsZW5ndGgpOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCB1Z2V0aC0+dWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgeworCQlpZiAodWdldGgtPnBfcnhfYmRfcmluZ1tpXSkgeworCQkJbGVuZ3RoID0KKwkJCSAgICAodWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblJ4W2ldICoKKwkJCSAgICAgVUNDX0dFVEhfU0laRV9PRl9CRCk7CisJCQl1Z2V0aF9pbmZvKCJSWCBCRHNbJWRdIiwgaSk7CisJCQltZW1fZGlzcCh1Z2V0aC0+cF9yeF9iZF9yaW5nW2ldLCBsZW5ndGgpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkdW1wX3JlZ3ModWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCkKK3sKKwlpbnQgaTsKKworCXVnZXRoX2luZm8oIlVDQyVkIEdldGggcmVnaXN0ZXJzOiIsIHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLnVjY19udW0pOworCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwgKHUzMikgdWdldGgtPnVnX3JlZ3MpOworCisJdWdldGhfaW5mbygibWFjY2ZnMSAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPm1hY2NmZzEsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5tYWNjZmcxKSk7CisJdWdldGhfaW5mbygibWFjY2ZnMiAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPm1hY2NmZzIsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5tYWNjZmcyKSk7CisJdWdldGhfaW5mbygiaXBnaWZnICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPmlwZ2lmZywKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPmlwZ2lmZykpOworCXVnZXRoX2luZm8oImhhZmR1cCAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5oYWZkdXAsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5oYWZkdXApKTsKKwl1Z2V0aF9pbmZvKCJtaWltY2ZnICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+bWlpbW5nLm1paW1jZmcsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5taWltbmcubWlpbWNmZykpOworCXVnZXRoX2luZm8oIm1paW1jb20gICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5taWltbmcubWlpbWNvbSwKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPm1paW1uZy5taWltY29tKSk7CisJdWdldGhfaW5mbygibWlpbWFkZCAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPm1paW1uZy5taWltYWRkLAorCQkgICBpbl9iZTMyKCZ1Z2V0aC0+dWdfcmVncy0+bWlpbW5nLm1paW1hZGQpKTsKKwl1Z2V0aF9pbmZvKCJtaWltY29uICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+bWlpbW5nLm1paW1jb24sCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5taWltbmcubWlpbWNvbikpOworCXVnZXRoX2luZm8oIm1paW1zdGF0ICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5taWltbmcubWlpbXN0YXQsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5taWltbmcubWlpbXN0YXQpKTsKKwl1Z2V0aF9pbmZvKCJtaWltbWluZCAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+bWlpbW5nLm1paW1pbmQsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5taWltbmcubWlpbWluZCkpOworCXVnZXRoX2luZm8oImlmY3RsICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5pZmN0bCwKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPmlmY3RsKSk7CisJdWdldGhfaW5mbygiaWZzdGF0ICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPmlmc3RhdCwKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPmlmc3RhdCkpOworCXVnZXRoX2luZm8oIm1hY3N0bmFkZHIxOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5tYWNzdG5hZGRyMSwKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPm1hY3N0bmFkZHIxKSk7CisJdWdldGhfaW5mbygibWFjc3RuYWRkcjI6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPm1hY3N0bmFkZHIyLAorCQkgICBpbl9iZTMyKCZ1Z2V0aC0+dWdfcmVncy0+bWFjc3RuYWRkcjIpKTsKKwl1Z2V0aF9pbmZvKCJ1ZW1wciAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+dWVtcHIsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT51ZW1wcikpOworCXVnZXRoX2luZm8oInV0YmlwYXIgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT51dGJpcGFyLAorCQkgICBpbl9iZTMyKCZ1Z2V0aC0+dWdfcmVncy0+dXRiaXBhcikpOworCXVnZXRoX2luZm8oInVlc2NyICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT51ZXNjciwKKwkJICAgaW5fYmUxNigmdWdldGgtPnVnX3JlZ3MtPnVlc2NyKSk7CisJdWdldGhfaW5mbygidHg2NCAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnR4NjQsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT50eDY0KSk7CisJdWdldGhfaW5mbygidHgxMjcgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnR4MTI3LAorCQkgICBpbl9iZTMyKCZ1Z2V0aC0+dWdfcmVncy0+dHgxMjcpKTsKKwl1Z2V0aF9pbmZvKCJ0eDI1NSAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+dHgyNTUsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT50eDI1NSkpOworCXVnZXRoX2luZm8oInJ4NjQgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5yeDY0LAorCQkgICBpbl9iZTMyKCZ1Z2V0aC0+dWdfcmVncy0+cng2NCkpOworCXVnZXRoX2luZm8oInJ4MTI3ICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5yeDEyNywKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPnJ4MTI3KSk7CisJdWdldGhfaW5mbygicngyNTUgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnJ4MjU1LAorCQkgICBpbl9iZTMyKCZ1Z2V0aC0+dWdfcmVncy0+cngyNTUpKTsKKwl1Z2V0aF9pbmZvKCJ0eG9rICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+dHhvaywKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPnR4b2spKTsKKwl1Z2V0aF9pbmZvKCJ0eGNmICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+dHhjZiwKKwkJICAgaW5fYmUxNigmdWdldGgtPnVnX3JlZ3MtPnR4Y2YpKTsKKwl1Z2V0aF9pbmZvKCJ0bWNhICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+dG1jYSwKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPnRtY2EpKTsKKwl1Z2V0aF9pbmZvKCJ0YmNhICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+dGJjYSwKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPnRiY2EpKTsKKwl1Z2V0aF9pbmZvKCJyeGZvayAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJICAgKHUzMikgJiB1Z2V0aC0+dWdfcmVncy0+cnhmb2ssCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5yeGZvaykpOworCXVnZXRoX2luZm8oInJ4Ym9rICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkgICAodTMyKSAmIHVnZXRoLT51Z19yZWdzLT5yeGJvaywKKwkJICAgaW5fYmUzMigmdWdldGgtPnVnX3JlZ3MtPnJ4Ym9rKSk7CisJdWdldGhfaW5mbygicmJ5dCAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnJieXQsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5yYnl0KSk7CisJdWdldGhfaW5mbygicm1jYSAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnJtY2EsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5ybWNhKSk7CisJdWdldGhfaW5mbygicmJjYSAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnJiY2EsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5yYmNhKSk7CisJdWdldGhfaW5mbygic2NhciAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnNjYXIsCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5zY2FyKSk7CisJdWdldGhfaW5mbygic2NhbSAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCSAgICh1MzIpICYgdWdldGgtPnVnX3JlZ3MtPnNjYW0sCisJCSAgIGluX2JlMzIoJnVnZXRoLT51Z19yZWdzLT5zY2FtKSk7CisKKwlpZiAodWdldGgtPnBfdGhyZWFkX2RhdGFfdHgpIHsKKwkJaW50IG51bVRocmVhZHNUeE51bWVyaWNhbDsKKwkJc3dpdGNoICh1Z2V0aC0+dWdfaW5mby0+bnVtVGhyZWFkc1R4KSB7CisJCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfMToKKwkJCW51bVRocmVhZHNUeE51bWVyaWNhbCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU18yOgorCQkJbnVtVGhyZWFkc1R4TnVtZXJpY2FsID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzQ6CisJCQludW1UaHJlYWRzVHhOdW1lcmljYWwgPSA0OworCQkJYnJlYWs7CisJCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNjoKKwkJCW51bVRocmVhZHNUeE51bWVyaWNhbCA9IDY7CisJCQlicmVhazsKKwkJY2FzZSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU184OgorCQkJbnVtVGhyZWFkc1R4TnVtZXJpY2FsID0gODsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbnVtVGhyZWFkc1R4TnVtZXJpY2FsID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJdWdldGhfaW5mbygiVGhyZWFkIGRhdGEgVFhzOiIpOworCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCisJCQkgICAodTMyKSB1Z2V0aC0+cF90aHJlYWRfZGF0YV90eCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1UaHJlYWRzVHhOdW1lcmljYWw7IGkrKykgeworCQkJdWdldGhfaW5mbygiVGhyZWFkIGRhdGEgVFhbJWRdOiIsIGkpOworCQkJdWdldGhfaW5mbygiQmFzZSBhZGRyZXNzOiAweCUwOHgiLAorCQkJCSAgICh1MzIpICYgdWdldGgtPnBfdGhyZWFkX2RhdGFfdHhbaV0pOworCQkJbWVtX2Rpc3AoKHU4ICopICYgdWdldGgtPnBfdGhyZWFkX2RhdGFfdHhbaV0sCisJCQkJIHNpemVvZih1Y2NfZ2V0aF90aHJlYWRfZGF0YV90eF90KSk7CisJCX0KKwl9CisJaWYgKHVnZXRoLT5wX3RocmVhZF9kYXRhX3J4KSB7CisJCWludCBudW1UaHJlYWRzUnhOdW1lcmljYWw7CisJCXN3aXRjaCAodWdldGgtPnVnX2luZm8tPm51bVRocmVhZHNSeCkgeworCQljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzE6CisJCQludW1UaHJlYWRzUnhOdW1lcmljYWwgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfMjoKKwkJCW51bVRocmVhZHNSeE51bWVyaWNhbCA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU180OgorCQkJbnVtVGhyZWFkc1J4TnVtZXJpY2FsID0gNDsKKwkJCWJyZWFrOworCQljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzY6CisJCQludW1UaHJlYWRzUnhOdW1lcmljYWwgPSA2OworCQkJYnJlYWs7CisJCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfODoKKwkJCW51bVRocmVhZHNSeE51bWVyaWNhbCA9IDg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW51bVRocmVhZHNSeE51bWVyaWNhbCA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCXVnZXRoX2luZm8oIlRocmVhZCBkYXRhIFJYOiIpOworCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCisJCQkgICAodTMyKSB1Z2V0aC0+cF90aHJlYWRfZGF0YV9yeCk7CisJCWZvciAoaSA9IDA7IGkgPCBudW1UaHJlYWRzUnhOdW1lcmljYWw7IGkrKykgeworCQkJdWdldGhfaW5mbygiVGhyZWFkIGRhdGEgUlhbJWRdOiIsIGkpOworCQkJdWdldGhfaW5mbygiQmFzZSBhZGRyZXNzOiAweCUwOHgiLAorCQkJCSAgICh1MzIpICYgdWdldGgtPnBfdGhyZWFkX2RhdGFfcnhbaV0pOworCQkJbWVtX2Rpc3AoKHU4ICopICYgdWdldGgtPnBfdGhyZWFkX2RhdGFfcnhbaV0sCisJCQkJIHNpemVvZih1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeF90KSk7CisJCX0KKwl9CisJaWYgKHVnZXRoLT5wX2V4Zl9nbGJsX3BhcmFtKSB7CisJCXVnZXRoX2luZm8oIkVYRiBnbG9iYWwgcGFyYW06Iik7CisJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwKKwkJCSAgICh1MzIpIHVnZXRoLT5wX2V4Zl9nbGJsX3BhcmFtKTsKKwkJbWVtX2Rpc3AoKHU4ICopIHVnZXRoLT5wX2V4Zl9nbGJsX3BhcmFtLAorCQkJIHNpemVvZigqdWdldGgtPnBfZXhmX2dsYmxfcGFyYW0pKTsKKwl9CisJaWYgKHVnZXRoLT5wX3R4X2dsYmxfcHJhbSkgeworCQl1Z2V0aF9pbmZvKCJUWCBnbG9iYWwgcGFyYW06Iik7CisJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwgKHUzMikgdWdldGgtPnBfdHhfZ2xibF9wcmFtKTsKKwkJdWdldGhfaW5mbygidGVtb2RlciAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50ZW1vZGVyLAorCQkJICAgaW5fYmUxNigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50ZW1vZGVyKSk7CisJCXVnZXRoX2luZm8oInNxcHRyICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+c3FwdHIsCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnNxcHRyKSk7CisJCXVnZXRoX2luZm8oInNjaGVkdWxlcmJhc2Vwb2ludGVyOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnNjaGVkdWxlcmJhc2Vwb2ludGVyLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT4KKwkJCQkgICBzY2hlZHVsZXJiYXNlcG9pbnRlcikpOworCQl1Z2V0aF9pbmZvKCJ0eHJtb25iYXNlcHRyOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnR4cm1vbmJhc2VwdHIsCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnR4cm1vbmJhc2VwdHIpKTsKKwkJdWdldGhfaW5mbygidHN0YXRlICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50c3RhdGUsCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnRzdGF0ZSkpOworCQl1Z2V0aF9pbmZvKCJpcGhvZmZzZXRbMF0gOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwMngiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFswXSwKKwkJCSAgIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+aXBob2Zmc2V0WzBdKTsKKwkJdWdldGhfaW5mbygiaXBob2Zmc2V0WzFdIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDJ4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT5pcGhvZmZzZXRbMV0sCisJCQkgICB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFsxXSk7CisJCXVnZXRoX2luZm8oImlwaG9mZnNldFsyXSA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTAyeCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+aXBob2Zmc2V0WzJdLAorCQkJICAgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT5pcGhvZmZzZXRbMl0pOworCQl1Z2V0aF9pbmZvKCJpcGhvZmZzZXRbM10gOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwMngiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFszXSwKKwkJCSAgIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+aXBob2Zmc2V0WzNdKTsKKwkJdWdldGhfaW5mbygiaXBob2Zmc2V0WzRdIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDJ4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT5pcGhvZmZzZXRbNF0sCisJCQkgICB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFs0XSk7CisJCXVnZXRoX2luZm8oImlwaG9mZnNldFs1XSA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTAyeCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+aXBob2Zmc2V0WzVdLAorCQkJICAgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT5pcGhvZmZzZXRbNV0pOworCQl1Z2V0aF9pbmZvKCJpcGhvZmZzZXRbNl0gOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwMngiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFs2XSwKKwkJCSAgIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+aXBob2Zmc2V0WzZdKTsKKwkJdWdldGhfaW5mbygiaXBob2Zmc2V0WzddIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDJ4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT5pcGhvZmZzZXRbN10sCisJCQkgICB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFs3XSk7CisJCXVnZXRoX2luZm8oInZ0YWd0YWJsZVswXSA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dnRhZ3RhYmxlWzBdLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT52dGFndGFibGVbMF0pKTsKKwkJdWdldGhfaW5mbygidnRhZ3RhYmxlWzFdIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT52dGFndGFibGVbMV0sCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnZ0YWd0YWJsZVsxXSkpOworCQl1Z2V0aF9pbmZvKCJ2dGFndGFibGVbMl0gOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnZ0YWd0YWJsZVsyXSwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dnRhZ3RhYmxlWzJdKSk7CisJCXVnZXRoX2luZm8oInZ0YWd0YWJsZVszXSA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dnRhZ3RhYmxlWzNdLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT52dGFndGFibGVbM10pKTsKKwkJdWdldGhfaW5mbygidnRhZ3RhYmxlWzRdIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT52dGFndGFibGVbNF0sCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnZ0YWd0YWJsZVs0XSkpOworCQl1Z2V0aF9pbmZvKCJ2dGFndGFibGVbNV0gOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnZ0YWd0YWJsZVs1XSwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dnRhZ3RhYmxlWzVdKSk7CisJCXVnZXRoX2luZm8oInZ0YWd0YWJsZVs2XSA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dnRhZ3RhYmxlWzZdLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT52dGFndGFibGVbNl0pKTsKKwkJdWdldGhfaW5mbygidnRhZ3RhYmxlWzddIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfdHhfZ2xibF9wcmFtLT52dGFndGFibGVbN10sCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnZ0YWd0YWJsZVs3XSkpOworCQl1Z2V0aF9pbmZvKCJ0cXB0ciAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnRxcHRyLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50cXB0cikpOworCX0KKwlpZiAodWdldGgtPnBfcnhfZ2xibF9wcmFtKSB7CisJCXVnZXRoX2luZm8oIlJYIGdsb2JhbCBwYXJhbToiKTsKKwkJdWdldGhfaW5mbygiQmFzZSBhZGRyZXNzOiAweCUwOHgiLCAodTMyKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0pOworCQl1Z2V0aF9pbmZvKCJyZW1vZGVyICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJlbW9kZXIsCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJlbW9kZXIpKTsKKwkJdWdldGhfaW5mbygicnFwdHIgICAgICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5ycXB0ciwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnFwdHIpKTsKKwkJdWdldGhfaW5mbygidHlwZW9ybGVuICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT50eXBlb3JsZW4sCisJCQkgICBpbl9iZTE2KCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnR5cGVvcmxlbikpOworCQl1Z2V0aF9pbmZvKCJyeGdzdHBhY2sgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwMngiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJ4Z3N0cGFjaywKKwkJCSAgIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnhnc3RwYWNrKTsKKwkJdWdldGhfaW5mbygicnhybW9uYmFzZXB0ciAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5yeHJtb25iYXNlcHRyLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5yeHJtb25iYXNlcHRyKSk7CisJCXVnZXRoX2luZm8oImludGNvYWxlc2NpbmdwdHI6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+aW50Y29hbGVzY2luZ3B0ciwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+aW50Y29hbGVzY2luZ3B0cikpOworCQl1Z2V0aF9pbmZvKCJyc3RhdGUgICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwMngiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJzdGF0ZSwKKwkJCSAgIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnN0YXRlKTsKKwkJdWdldGhfaW5mbygibXJibHIgICAgICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDR4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5tcmJsciwKKwkJCSAgIGluX2JlMTYoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bXJibHIpKTsKKwkJdWdldGhfaW5mbygicmJkcXB0ciAgICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5yYmRxcHRyLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5yYmRxcHRyKSk7CisJCXVnZXRoX2luZm8oIm1mbHIgICAgICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bWZsciwKKwkJCSAgIGluX2JlMTYoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bWZscikpOworCQl1Z2V0aF9pbmZvKCJtaW5mbHIgICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPm1pbmZsciwKKwkJCSAgIGluX2JlMTYoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bWluZmxyKSk7CisJCXVnZXRoX2luZm8oIm1heGQxICAgICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bWF4ZDEsCisJCQkgICBpbl9iZTE2KCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPm1heGQxKSk7CisJCXVnZXRoX2luZm8oIm1heGQyICAgICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA0eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bWF4ZDIsCisJCQkgICBpbl9iZTE2KCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPm1heGQyKSk7CisJCXVnZXRoX2luZm8oImVjYW1wdHIgICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+ZWNhbXB0ciwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+ZWNhbXB0cikpOworCQl1Z2V0aF9pbmZvKCJsMnF0ICAgICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwycXQsCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwycXQpKTsKKwkJdWdldGhfaW5mbygibDNxdFswXSAgICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0WzBdLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0WzBdKSk7CisJCXVnZXRoX2luZm8oImwzcXRbMV0gICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFsxXSwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFsxXSkpOworCQl1Z2V0aF9pbmZvKCJsM3F0WzJdICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwzcXRbMl0sCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwzcXRbMl0pKTsKKwkJdWdldGhfaW5mbygibDNxdFszXSAgICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0WzNdLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0WzNdKSk7CisJCXVnZXRoX2luZm8oImwzcXRbNF0gICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFs0XSwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFs0XSkpOworCQl1Z2V0aF9pbmZvKCJsM3F0WzVdICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwzcXRbNV0sCisJCQkgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwzcXRbNV0pKTsKKwkJdWdldGhfaW5mbygibDNxdFs2XSAgICAgICAgIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0WzZdLAorCQkJICAgaW5fYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5sM3F0WzZdKSk7CisJCXVnZXRoX2luZm8oImwzcXRbN10gICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFs3XSwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bDNxdFs3XSkpOworCQl1Z2V0aF9pbmZvKCJ2bGFudHlwZSAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnZsYW50eXBlLAorCQkJICAgaW5fYmUxNigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT52bGFudHlwZSkpOworCQl1Z2V0aF9pbmZvKCJ2bGFudGNpICAgICAgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwNHgiLAorCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnZsYW50Y2ksCisJCQkgICBpbl9iZTE2KCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnZsYW50Y2kpKTsKKwkJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCQl1Z2V0aF9pbmZvCisJCSAgICAoImFkZHJlc3NmaWx0ZXJpbmdbJWRdOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwMngiLAorCQkJICAgICBpLAorCQkJICAgICAodTMyKSAmIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+YWRkcmVzc2ZpbHRlcmluZ1tpXSwKKwkJCSAgICAgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5hZGRyZXNzZmlsdGVyaW5nW2ldKTsKKwkJdWdldGhfaW5mbygiZXhmR2xvYmFsUGFyYW0gIDogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5leGZHbG9iYWxQYXJhbSwKKwkJCSAgIGluX2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+ZXhmR2xvYmFsUGFyYW0pKTsKKwl9CisJaWYgKHVnZXRoLT5wX3NlbmRfcV9tZW1fcmVnKSB7CisJCXVnZXRoX2luZm8oIlNlbmQgUSBtZW1vcnkgcmVnaXN0ZXJzOiIpOworCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCisJCQkgICAodTMyKSB1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZyk7CisJCWZvciAoaSA9IDA7IGkgPCB1Z2V0aC0+dWdfaW5mby0+bnVtUXVldWVzVHg7IGkrKykgeworCQkJdWdldGhfaW5mbygiU1FRRFslZF06IiwgaSk7CisJCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCisJCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZy0+c3FxZFtpXSk7CisJCQltZW1fZGlzcCgodTggKikgJiB1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZy0+c3FxZFtpXSwKKwkJCQkgc2l6ZW9mKHVjY19nZXRoX3NlbmRfcXVldWVfcWRfdCkpOworCQl9CisJfQorCWlmICh1Z2V0aC0+cF9zY2hlZHVsZXIpIHsKKwkJdWdldGhfaW5mbygiU2NoZWR1bGVyOiIpOworCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsICh1MzIpIHVnZXRoLT5wX3NjaGVkdWxlcik7CisJCW1lbV9kaXNwKCh1OCAqKSB1Z2V0aC0+cF9zY2hlZHVsZXIsCisJCQkgc2l6ZW9mKCp1Z2V0aC0+cF9zY2hlZHVsZXIpKTsKKwl9CisJaWYgKHVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSkgeworCQl1Z2V0aF9pbmZvKCJUWCBGVyBzdGF0aXN0aWNzIHByYW06Iik7CisJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwKKwkJCSAgICh1MzIpIHVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSk7CisJCW1lbV9kaXNwKCh1OCAqKSB1Z2V0aC0+cF90eF9md19zdGF0aXN0aWNzX3ByYW0sCisJCQkgc2l6ZW9mKCp1Z2V0aC0+cF90eF9md19zdGF0aXN0aWNzX3ByYW0pKTsKKwl9CisJaWYgKHVnZXRoLT5wX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSkgeworCQl1Z2V0aF9pbmZvKCJSWCBGVyBzdGF0aXN0aWNzIHByYW06Iik7CisJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwKKwkJCSAgICh1MzIpIHVnZXRoLT5wX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSk7CisJCW1lbV9kaXNwKCh1OCAqKSB1Z2V0aC0+cF9yeF9md19zdGF0aXN0aWNzX3ByYW0sCisJCQkgc2l6ZW9mKCp1Z2V0aC0+cF9yeF9md19zdGF0aXN0aWNzX3ByYW0pKTsKKwl9CisJaWYgKHVnZXRoLT5wX3J4X2lycV9jb2FsZXNjaW5nX3RibCkgeworCQl1Z2V0aF9pbmZvKCJSWCBJUlEgY29hbGVzY2luZyB0YWJsZXM6Iik7CisJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwKKwkJCSAgICh1MzIpIHVnZXRoLT5wX3J4X2lycV9jb2FsZXNjaW5nX3RibCk7CisJCWZvciAoaSA9IDA7IGkgPCB1Z2V0aC0+dWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgeworCQkJdWdldGhfaW5mbygiUlggSVJRIGNvYWxlc2NpbmcgdGFibGUgZW50cnlbJWRdOiIsIGkpOworCQkJdWdldGhfaW5mbygiQmFzZSBhZGRyZXNzOiAweCUwOHgiLAorCQkJCSAgICh1MzIpICYgdWdldGgtPnBfcnhfaXJxX2NvYWxlc2NpbmdfdGJsLT4KKwkJCQkgICBjb2FsZXNjaW5nZW50cnlbaV0pOworCQkJdWdldGhfaW5mbworCQkoImludGVycnVwdGNvYWxlc2NpbmdtYXh2YWx1ZTogYWRkciAtIDB4JTA4eCwgdmFsIC0gMHglMDh4IiwKKwkJCSAgICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9pcnFfY29hbGVzY2luZ190YmwtPgorCQkJICAgICBjb2FsZXNjaW5nZW50cnlbaV0uaW50ZXJydXB0Y29hbGVzY2luZ21heHZhbHVlLAorCQkJICAgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9pcnFfY29hbGVzY2luZ190YmwtPgorCQkJCSAgICAgY29hbGVzY2luZ2VudHJ5W2ldLgorCQkJCSAgICAgaW50ZXJydXB0Y29hbGVzY2luZ21heHZhbHVlKSk7CisJCQl1Z2V0aF9pbmZvCisJCSgiaW50ZXJydXB0Y29hbGVzY2luZ2NvdW50ZXIgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgICAodTMyKSAmIHVnZXRoLT5wX3J4X2lycV9jb2FsZXNjaW5nX3RibC0+CisJCQkgICAgIGNvYWxlc2NpbmdlbnRyeVtpXS5pbnRlcnJ1cHRjb2FsZXNjaW5nY291bnRlciwKKwkJCSAgICAgaW5fYmUzMigmdWdldGgtPnBfcnhfaXJxX2NvYWxlc2NpbmdfdGJsLT4KKwkJCQkgICAgIGNvYWxlc2NpbmdlbnRyeVtpXS4KKwkJCQkgICAgIGludGVycnVwdGNvYWxlc2Npbmdjb3VudGVyKSk7CisJCX0KKwl9CisJaWYgKHVnZXRoLT5wX3J4X2JkX3FzX3RibCkgeworCQl1Z2V0aF9pbmZvKCJSWCBCRCBRUyB0YWJsZXM6Iik7CisJCXVnZXRoX2luZm8oIkJhc2UgYWRkcmVzczogMHglMDh4IiwgKHUzMikgdWdldGgtPnBfcnhfYmRfcXNfdGJsKTsKKwkJZm9yIChpID0gMDsgaSA8IHVnZXRoLT51Z19pbmZvLT5udW1RdWV1ZXNSeDsgaSsrKSB7CisJCQl1Z2V0aF9pbmZvKCJSWCBCRCBRUyB0YWJsZVslZF06IiwgaSk7CisJCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCisJCQkJICAgKHUzMikgJiB1Z2V0aC0+cF9yeF9iZF9xc190YmxbaV0pOworCQkJdWdldGhfaW5mbworCQkJICAgICgiYmRiYXNlcHRyICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAgICh1MzIpICYgdWdldGgtPnBfcnhfYmRfcXNfdGJsW2ldLmJkYmFzZXB0ciwKKwkJCSAgICAgaW5fYmUzMigmdWdldGgtPnBfcnhfYmRfcXNfdGJsW2ldLmJkYmFzZXB0cikpOworCQkJdWdldGhfaW5mbworCQkJICAgICgiYmRwdHIgICAgICAgICAgICA6IGFkZHIgLSAweCUwOHgsIHZhbCAtIDB4JTA4eCIsCisJCQkgICAgICh1MzIpICYgdWdldGgtPnBfcnhfYmRfcXNfdGJsW2ldLmJkcHRyLAorCQkJICAgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9iZF9xc190YmxbaV0uYmRwdHIpKTsKKwkJCXVnZXRoX2luZm8KKwkJCSAgICAoImV4dGVybmFsYmRiYXNlcHRyOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgICAodTMyKSAmIHVnZXRoLT5wX3J4X2JkX3FzX3RibFtpXS5leHRlcm5hbGJkYmFzZXB0ciwKKwkJCSAgICAgaW5fYmUzMigmdWdldGgtPnBfcnhfYmRfcXNfdGJsW2ldLgorCQkJCSAgICAgZXh0ZXJuYWxiZGJhc2VwdHIpKTsKKwkJCXVnZXRoX2luZm8KKwkJCSAgICAoImV4dGVybmFsYmRwdHIgICAgOiBhZGRyIC0gMHglMDh4LCB2YWwgLSAweCUwOHgiLAorCQkJICAgICAodTMyKSAmIHVnZXRoLT5wX3J4X2JkX3FzX3RibFtpXS5leHRlcm5hbGJkcHRyLAorCQkJICAgICBpbl9iZTMyKCZ1Z2V0aC0+cF9yeF9iZF9xc190YmxbaV0uZXh0ZXJuYWxiZHB0cikpOworCQkJdWdldGhfaW5mbygidWNvZGUgUlggUHJlZmV0Y2hlZCBCRHM6Iik7CisJCQl1Z2V0aF9pbmZvKCJCYXNlIGFkZHJlc3M6IDB4JTA4eCIsCisJCQkJICAgKHUzMikKKwkJCQkgICBxZV9tdXJhbV9hZGRyKGluX2JlMzIKKwkJCQkJCSAoJnVnZXRoLT5wX3J4X2JkX3FzX3RibFtpXS4KKwkJCQkJCSAgYmRiYXNlcHRyKSkpOworCQkJbWVtX2Rpc3AoKHU4ICopCisJCQkJIHFlX211cmFtX2FkZHIoaW5fYmUzMgorCQkJCQkgICAgICAgKCZ1Z2V0aC0+cF9yeF9iZF9xc190YmxbaV0uCisJCQkJCQliZGJhc2VwdHIpKSwKKwkJCQkgc2l6ZW9mKHVjY19nZXRoX3J4X3ByZWZldGNoZWRfYmRzX3QpKTsKKwkJfQorCX0KKwlpZiAodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdykgeworCQlpbnQgc2l6ZTsKKwkJdWdldGhfaW5mbygiSW5pdCBlbmV0IHBhcmFtIHNoYWRvdzoiKTsKKwkJdWdldGhfaW5mbygiQmFzZSBhZGRyZXNzOiAweCUwOHgiLAorCQkJICAgKHUzMikgdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdyk7CisJCW1lbV9kaXNwKCh1OCAqKSB1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LAorCQkJIHNpemVvZigqdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdykpOworCisJCXNpemUgPSBzaXplb2YodWNjX2dldGhfdGhyZWFkX3J4X3ByYW1fdCk7CisJCWlmICh1Z2V0aC0+dWdfaW5mby0+cnhFeHRlbmRlZEZpbHRlcmluZykgeworCQkJc2l6ZSArPQorCQkJICAgIFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklORzsKKwkJCWlmICh1Z2V0aC0+dWdfaW5mby0+bGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZSA9PQorCQkJICAgIFFFX0ZMVFJfVEFCTEVfTE9PS1VQX0tFWV9TSVpFXzhfQllURVMpCisJCQkJc2l6ZSArPQorCQkJVEhSRUFEX1JYX1BSQU1fQURESVRJT05BTF9GT1JfRVhURU5ERURfRklMVEVSSU5HXzg7CisJCQlpZiAodWdldGgtPnVnX2luZm8tPmxhcmdlc3RleHRlcm5hbGxvb2t1cGtleXNpemUgPT0KKwkJCSAgICBRRV9GTFRSX1RBQkxFX0xPT0tVUF9LRVlfU0laRV8xNl9CWVRFUykKKwkJCQlzaXplICs9CisJCQlUSFJFQURfUlhfUFJBTV9BRERJVElPTkFMX0ZPUl9FWFRFTkRFRF9GSUxURVJJTkdfMTY7CisJCX0KKworCQlkdW1wX2luaXRfZW5ldF9lbnRyaWVzKHVnZXRoLAorCQkJCSAgICAgICAmKHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPgorCQkJCQkgdHh0aHJlYWRbMF0pLAorCQkJCSAgICAgICBFTkVUX0lOSVRfUEFSQU1fTUFYX0VOVFJJRVNfVFgsCisJCQkJICAgICAgIHNpemVvZih1Y2NfZ2V0aF90aHJlYWRfdHhfcHJhbV90KSwKKwkJCQkgICAgICAgdWdldGgtPnVnX2luZm8tPnJpc2NUeCwgMCk7CisJCWR1bXBfaW5pdF9lbmV0X2VudHJpZXModWdldGgsCisJCQkJICAgICAgICYodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+CisJCQkJCSByeHRocmVhZFswXSksCisJCQkJICAgICAgIEVORVRfSU5JVF9QQVJBTV9NQVhfRU5UUklFU19SWCwgc2l6ZSwKKwkJCQkgICAgICAgdWdldGgtPnVnX2luZm8tPnJpc2NSeCwgMSk7CisJfQorfQorI2VuZGlmIC8qIERFQlVHICovCisKK3N0YXRpYyB2b2lkIGluaXRfZGVmYXVsdF9yZWdfdmFscyh2b2xhdGlsZSB1MzIgKnVwc21yX3JlZ2lzdGVyLAorCQkJCSAgdm9sYXRpbGUgdTMyICptYWNjZmcxX3JlZ2lzdGVyLAorCQkJCSAgdm9sYXRpbGUgdTMyICptYWNjZmcyX3JlZ2lzdGVyKQoreworCW91dF9iZTMyKHVwc21yX3JlZ2lzdGVyLCBVQ0NfR0VUSF9VUFNNUl9JTklUKTsKKwlvdXRfYmUzMihtYWNjZmcxX3JlZ2lzdGVyLCBVQ0NfR0VUSF9NQUNDRkcxX0lOSVQpOworCW91dF9iZTMyKG1hY2NmZzJfcmVnaXN0ZXIsIFVDQ19HRVRIX01BQ0NGRzJfSU5JVCk7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9oYWxmX2R1cGxleF9wYXJhbXMoaW50IGFsdF9iZWIsCisJCQkJICAgaW50IGJhY2tfcHJlc3N1cmVfbm9fYmFja29mZiwKKwkJCQkgICBpbnQgbm9fYmFja29mZiwKKwkJCQkgICBpbnQgZXhjZXNzX2RlZmVyLAorCQkJCSAgIHU4IGFsdF9iZWJfdHJ1bmNhdGlvbiwKKwkJCQkgICB1OCBtYXhfcmV0cmFuc21pc3Npb25zLAorCQkJCSAgIHU4IGNvbGxpc2lvbl93aW5kb3csCisJCQkJICAgdm9sYXRpbGUgdTMyICpoYWZkdXBfcmVnaXN0ZXIpCit7CisJdTMyIHZhbHVlID0gMDsKKworCWlmICgoYWx0X2JlYl90cnVuY2F0aW9uID4gSEFMRkRVUF9BTFRfQkVCX1RSVU5DQVRJT05fTUFYKSB8fAorCSAgICAobWF4X3JldHJhbnNtaXNzaW9ucyA+IEhBTEZEVVBfTUFYX1JFVFJBTlNNSVNTSU9OX01BWCkgfHwKKwkgICAgKGNvbGxpc2lvbl93aW5kb3cgPiBIQUxGRFVQX0NPTExJU0lPTl9XSU5ET1dfTUFYKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWx1ZSA9ICh1MzIpIChhbHRfYmViX3RydW5jYXRpb24gPDwgSEFMRkRVUF9BTFRfQkVCX1RSVU5DQVRJT05fU0hJRlQpOworCisJaWYgKGFsdF9iZWIpCisJCXZhbHVlIHw9IEhBTEZEVVBfQUxUX0JFQjsKKwlpZiAoYmFja19wcmVzc3VyZV9ub19iYWNrb2ZmKQorCQl2YWx1ZSB8PSBIQUxGRFVQX0JBQ0tfUFJFU1NVUkVfTk9fQkFDS09GRjsKKwlpZiAobm9fYmFja29mZikKKwkJdmFsdWUgfD0gSEFMRkRVUF9OT19CQUNLT0ZGOworCWlmIChleGNlc3NfZGVmZXIpCisJCXZhbHVlIHw9IEhBTEZEVVBfRVhDRVNTSVZFX0RFRkVSOworCisJdmFsdWUgfD0gKG1heF9yZXRyYW5zbWlzc2lvbnMgPDwgSEFMRkRVUF9NQVhfUkVUUkFOU01JU1NJT05fU0hJRlQpOworCisJdmFsdWUgfD0gY29sbGlzaW9uX3dpbmRvdzsKKworCW91dF9iZTMyKGhhZmR1cF9yZWdpc3RlciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfaW50ZXJfZnJhbWVfZ2FwX3BhcmFtcyh1OCBub25fYnRiX2NzX2lwZywKKwkJCQkgICAgICAgdTggbm9uX2J0Yl9pcGcsCisJCQkJICAgICAgIHU4IG1pbl9pZmcsCisJCQkJICAgICAgIHU4IGJ0Yl9pcGcsCisJCQkJICAgICAgIHZvbGF0aWxlIHUzMiAqaXBnaWZnX3JlZ2lzdGVyKQoreworCXUzMiB2YWx1ZSA9IDA7CisKKwkvKiBOb24tQmFjay10by1iYWNrIElQRyBwYXJ0IDEgc2hvdWxkIGJlIDw9IE5vbi1CYWNrLXRvLWJhY2sKKwlJUEcgcGFydCAyICovCisJaWYgKG5vbl9idGJfY3NfaXBnID4gbm9uX2J0Yl9pcGcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChub25fYnRiX2NzX2lwZyA+IElQR0lGR19OT05fQkFDS19UT19CQUNLX0lGR19QQVJUMV9NQVgpIHx8CisJICAgIChub25fYnRiX2lwZyA+IElQR0lGR19OT05fQkFDS19UT19CQUNLX0lGR19QQVJUMl9NQVgpIHx8CisJICAgIC8qKG1pbl9pZmcgICAgICAgID4gSVBHSUZHX01JTklNVU1fSUZHX0VORk9SQ0VNRU5UX01BWCkgfHwgKi8KKwkgICAgKGJ0Yl9pcGcgPiBJUEdJRkdfQkFDS19UT19CQUNLX0lGR19NQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbHVlIHw9CisJICAgICgobm9uX2J0Yl9jc19pcGcgPDwgSVBHSUZHX05PTl9CQUNLX1RPX0JBQ0tfSUZHX1BBUlQxX1NISUZUKSAmCisJICAgICBJUEdJRkdfTkJUQl9DU19JUEdfTUFTSyk7CisJdmFsdWUgfD0KKwkgICAgKChub25fYnRiX2lwZyA8PCBJUEdJRkdfTk9OX0JBQ0tfVE9fQkFDS19JRkdfUEFSVDJfU0hJRlQpICYKKwkgICAgIElQR0lGR19OQlRCX0lQR19NQVNLKTsKKwl2YWx1ZSB8PQorCSAgICAoKG1pbl9pZmcgPDwgSVBHSUZHX01JTklNVU1fSUZHX0VORk9SQ0VNRU5UX1NISUZUKSAmCisJICAgICBJUEdJRkdfTUlOX0lGR19NQVNLKTsKKwl2YWx1ZSB8PSAoYnRiX2lwZyAmIElQR0lGR19CVEJfSVBHX01BU0spOworCisJb3V0X2JlMzIoaXBnaWZnX3JlZ2lzdGVyLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9mbG93X2NvbnRyb2xfcGFyYW1zKHUzMiBhdXRvbWF0aWNfZmxvd19jb250cm9sX21vZGUsCisJCQkJICAgIGludCByeF9mbG93X2NvbnRyb2xfZW5hYmxlLAorCQkJCSAgICBpbnQgdHhfZmxvd19jb250cm9sX2VuYWJsZSwKKwkJCQkgICAgdTE2IHBhdXNlX3BlcmlvZCwKKwkJCQkgICAgdTE2IGV4dGVuc2lvbl9maWVsZCwKKwkJCQkgICAgdm9sYXRpbGUgdTMyICp1cHNtcl9yZWdpc3RlciwKKwkJCQkgICAgdm9sYXRpbGUgdTMyICp1ZW1wcl9yZWdpc3RlciwKKwkJCQkgICAgdm9sYXRpbGUgdTMyICptYWNjZmcxX3JlZ2lzdGVyKQoreworCXUzMiB2YWx1ZSA9IDA7CisKKwkvKiBTZXQgVUVNUFIgcmVnaXN0ZXIgKi8KKwl2YWx1ZSA9ICh1MzIpIHBhdXNlX3BlcmlvZCA8PCBVRU1QUl9QQVVTRV9USU1FX1ZBTFVFX1NISUZUOworCXZhbHVlIHw9ICh1MzIpIGV4dGVuc2lvbl9maWVsZCA8PCBVRU1QUl9FWFRFTkRFRF9QQVVTRV9USU1FX1ZBTFVFX1NISUZUOworCW91dF9iZTMyKHVlbXByX3JlZ2lzdGVyLCB2YWx1ZSk7CisKKwkvKiBTZXQgVVBTTVIgcmVnaXN0ZXIgKi8KKwl2YWx1ZSA9IGluX2JlMzIodXBzbXJfcmVnaXN0ZXIpOworCXZhbHVlIHw9IGF1dG9tYXRpY19mbG93X2NvbnRyb2xfbW9kZTsKKwlvdXRfYmUzMih1cHNtcl9yZWdpc3RlciwgdmFsdWUpOworCisJdmFsdWUgPSBpbl9iZTMyKG1hY2NmZzFfcmVnaXN0ZXIpOworCWlmIChyeF9mbG93X2NvbnRyb2xfZW5hYmxlKQorCQl2YWx1ZSB8PSBNQUNDRkcxX0ZMT1dfUlg7CisJaWYgKHR4X2Zsb3dfY29udHJvbF9lbmFibGUpCisJCXZhbHVlIHw9IE1BQ0NGRzFfRkxPV19UWDsKKwlvdXRfYmUzMihtYWNjZmcxX3JlZ2lzdGVyLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X2h3X3N0YXRpc3RpY3NfZ2F0aGVyaW5nX21vZGUoaW50IGVuYWJsZV9oYXJkd2FyZV9zdGF0aXN0aWNzLAorCQkJCQkgICAgIGludCBhdXRvX3plcm9faGFyZHdhcmVfc3RhdGlzdGljcywKKwkJCQkJICAgICB2b2xhdGlsZSB1MzIgKnVwc21yX3JlZ2lzdGVyLAorCQkJCQkgICAgIHZvbGF0aWxlIHUxNiAqdWVzY3JfcmVnaXN0ZXIpCit7CisJdTMyIHVwc21yX3ZhbHVlID0gMDsKKwl1MTYgdWVzY3JfdmFsdWUgPSAwOworCS8qIEVuYWJsZSBoYXJkd2FyZSBzdGF0aXN0aWNzIGdhdGhlcmluZyBpZiByZXF1ZXN0ZWQgKi8KKwlpZiAoZW5hYmxlX2hhcmR3YXJlX3N0YXRpc3RpY3MpIHsKKwkJdXBzbXJfdmFsdWUgPSBpbl9iZTMyKHVwc21yX3JlZ2lzdGVyKTsKKwkJdXBzbXJfdmFsdWUgfD0gVVBTTVJfSFNFOworCQlvdXRfYmUzMih1cHNtcl9yZWdpc3RlciwgdXBzbXJfdmFsdWUpOworCX0KKworCS8qIENsZWFyIGhhcmR3YXJlIHN0YXRpc3RpY3MgY291bnRlcnMgKi8KKwl1ZXNjcl92YWx1ZSA9IGluX2JlMTYodWVzY3JfcmVnaXN0ZXIpOworCXVlc2NyX3ZhbHVlIHw9IFVFU0NSX0NMUkNOVDsKKwkvKiBBdXRvbWF0aWNhbGx5IHplcm8gaGFyZHdhcmUgc3RhdGlzdGljcyBjb3VudGVycyBvbiByZWFkLAorCWlmIHJlcXVlc3RlZCAqLworCWlmIChhdXRvX3plcm9faGFyZHdhcmVfc3RhdGlzdGljcykKKwkJdWVzY3JfdmFsdWUgfD0gVUVTQ1JfQVVUT1o7CisJb3V0X2JlMTYodWVzY3JfcmVnaXN0ZXIsIHVlc2NyX3ZhbHVlKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfZmlybXdhcmVfc3RhdGlzdGljc19nYXRoZXJpbmdfbW9kZShpbnQKKwkJZW5hYmxlX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3MsCisJCWludCBlbmFibGVfcnhfZmlybXdhcmVfc3RhdGlzdGljcywKKwkJdm9sYXRpbGUgdTMyICp0eF9ybW9uX2Jhc2VfcHRyLAorCQl1MzIgdHhfZmlybXdhcmVfc3RhdGlzdGljc19zdHJ1Y3R1cmVfYWRkcmVzcywKKwkJdm9sYXRpbGUgdTMyICpyeF9ybW9uX2Jhc2VfcHRyLAorCQl1MzIgcnhfZmlybXdhcmVfc3RhdGlzdGljc19zdHJ1Y3R1cmVfYWRkcmVzcywKKwkJdm9sYXRpbGUgdTE2ICp0ZW1vZGVyX3JlZ2lzdGVyLAorCQl2b2xhdGlsZSB1MzIgKnJlbW9kZXJfcmVnaXN0ZXIpCit7CisJLyogTm90ZTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBjaGVjayBpZiAqLworCS8qIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzIGFyZSBOVUxMICAgKi8KKwl1MTYgdGVtb2Rlcl92YWx1ZTsKKwl1MzIgcmVtb2Rlcl92YWx1ZTsKKworCWlmIChlbmFibGVfdHhfZmlybXdhcmVfc3RhdGlzdGljcykgeworCQlvdXRfYmUzMih0eF9ybW9uX2Jhc2VfcHRyLAorCQkJIHR4X2Zpcm13YXJlX3N0YXRpc3RpY3Nfc3RydWN0dXJlX2FkZHJlc3MpOworCQl0ZW1vZGVyX3ZhbHVlID0gaW5fYmUxNih0ZW1vZGVyX3JlZ2lzdGVyKTsKKwkJdGVtb2Rlcl92YWx1ZSB8PSBURU1PREVSX1RYX1JNT05fU1RBVElTVElDU19FTkFCTEU7CisJCW91dF9iZTE2KHRlbW9kZXJfcmVnaXN0ZXIsIHRlbW9kZXJfdmFsdWUpOworCX0KKworCWlmIChlbmFibGVfcnhfZmlybXdhcmVfc3RhdGlzdGljcykgeworCQlvdXRfYmUzMihyeF9ybW9uX2Jhc2VfcHRyLAorCQkJIHJ4X2Zpcm13YXJlX3N0YXRpc3RpY3Nfc3RydWN0dXJlX2FkZHJlc3MpOworCQlyZW1vZGVyX3ZhbHVlID0gaW5fYmUzMihyZW1vZGVyX3JlZ2lzdGVyKTsKKwkJcmVtb2Rlcl92YWx1ZSB8PSBSRU1PREVSX1JYX1JNT05fU1RBVElTVElDU19FTkFCTEU7CisJCW91dF9iZTMyKHJlbW9kZXJfcmVnaXN0ZXIsIHJlbW9kZXJfdmFsdWUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfbWFjX3N0YXRpb25fYWRkcl9yZWdzKHU4IGFkZHJlc3NfYnl0ZV8wLAorCQkJCSAgICAgIHU4IGFkZHJlc3NfYnl0ZV8xLAorCQkJCSAgICAgIHU4IGFkZHJlc3NfYnl0ZV8yLAorCQkJCSAgICAgIHU4IGFkZHJlc3NfYnl0ZV8zLAorCQkJCSAgICAgIHU4IGFkZHJlc3NfYnl0ZV80LAorCQkJCSAgICAgIHU4IGFkZHJlc3NfYnl0ZV81LAorCQkJCSAgICAgIHZvbGF0aWxlIHUzMiAqbWFjc3RuYWRkcjFfcmVnaXN0ZXIsCisJCQkJICAgICAgdm9sYXRpbGUgdTMyICptYWNzdG5hZGRyMl9yZWdpc3RlcikKK3sKKwl1MzIgdmFsdWUgPSAwOworCisJLyogRXhhbXBsZTogZm9yIGEgc3RhdGlvbiBhZGRyZXNzIG9mIDB4MTIzNDU2NzhBQkNELCAqLworCS8qIDB4MTIgaXMgYnl0ZSAwLCAweDM0IGlzIGJ5dGUgMSBhbmQgc28gb24gYW5kIDB4Q0QgaXMgYnl0ZSA1ICovCisKKwkvKiBNQUNTVE5BRERSMSBSZWdpc3RlcjogKi8KKworCS8qIDAgICAgICAgICAgICAgICAgICAgICAgNyAgIDggICAgICAgICAgICAgICAgICAgICAgMTUgICovCisJLyogc3RhdGlvbiBhZGRyZXNzIGJ5dGUgNSAgICAgc3RhdGlvbiBhZGRyZXNzIGJ5dGUgNCAgICAgKi8KKwkvKiAxNiAgICAgICAgICAgICAgICAgICAgIDIzICAyNCAgICAgICAgICAgICAgICAgICAgIDMxICAqLworCS8qIHN0YXRpb24gYWRkcmVzcyBieXRlIDMgICAgIHN0YXRpb24gYWRkcmVzcyBieXRlIDIgICAgICovCisJdmFsdWUgfD0gKHUzMikgKChhZGRyZXNzX2J5dGVfMiA8PCAwKSAmIDB4MDAwMDAwRkYpOworCXZhbHVlIHw9ICh1MzIpICgoYWRkcmVzc19ieXRlXzMgPDwgOCkgJiAweDAwMDBGRjAwKTsKKwl2YWx1ZSB8PSAodTMyKSAoKGFkZHJlc3NfYnl0ZV80IDw8IDE2KSAmIDB4MDBGRjAwMDApOworCXZhbHVlIHw9ICh1MzIpICgoYWRkcmVzc19ieXRlXzUgPDwgMjQpICYgMHhGRjAwMDAwMCk7CisKKwlvdXRfYmUzMihtYWNzdG5hZGRyMV9yZWdpc3RlciwgdmFsdWUpOworCisJLyogTUFDU1ROQUREUjIgUmVnaXN0ZXI6ICovCisKKwkvKiAwICAgICAgICAgICAgICAgICAgICAgIDcgICA4ICAgICAgICAgICAgICAgICAgICAgIDE1ICAqLworCS8qIHN0YXRpb24gYWRkcmVzcyBieXRlIDEgICAgIHN0YXRpb24gYWRkcmVzcyBieXRlIDAgICAgICovCisJLyogMTYgICAgICAgICAgICAgICAgICAgICAyMyAgMjQgICAgICAgICAgICAgICAgICAgICAzMSAgKi8KKwkvKiAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAqLworCXZhbHVlID0gMDsKKwl2YWx1ZSB8PSAodTMyKSAoKGFkZHJlc3NfYnl0ZV8wIDw8IDE2KSAmIDB4MDBGRjAwMDApOworCXZhbHVlIHw9ICh1MzIpICgoYWRkcmVzc19ieXRlXzEgPDwgMjQpICYgMHhGRjAwMDAwMCk7CisKKwlvdXRfYmUzMihtYWNzdG5hZGRyMl9yZWdpc3RlciwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9tYWNfZHVwbGV4X21vZGUoaW50IGZ1bGxfZHVwbGV4LAorCQkJCWludCBsaW1pdGVkX3RvX2Z1bGxfZHVwbGV4LAorCQkJCXZvbGF0aWxlIHUzMiAqbWFjY2ZnMl9yZWdpc3RlcikKK3sKKwl1MzIgdmFsdWUgPSAwOworCisJLyogc29tZSBpbnRlcmZhY2VzIG11c3Qgd29yayBpbiBmdWxsIGR1cGxleCBtb2RlICovCisJaWYgKChmdWxsX2R1cGxleCA9PSAwKSAmJiAobGltaXRlZF90b19mdWxsX2R1cGxleCA9PSAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWx1ZSA9IGluX2JlMzIobWFjY2ZnMl9yZWdpc3Rlcik7CisKKwlpZiAoZnVsbF9kdXBsZXgpCisJCXZhbHVlIHw9IE1BQ0NGRzJfRkRYOworCWVsc2UKKwkJdmFsdWUgJj0gfk1BQ0NGRzJfRkRYOworCisJb3V0X2JlMzIobWFjY2ZnMl9yZWdpc3RlciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfY2hlY2tfZnJhbWVfbGVuZ3RoX21vZGUoaW50IGxlbmd0aF9jaGVjaywKKwkJCQkJdm9sYXRpbGUgdTMyICptYWNjZmcyX3JlZ2lzdGVyKQoreworCXUzMiB2YWx1ZSA9IDA7CisKKwl2YWx1ZSA9IGluX2JlMzIobWFjY2ZnMl9yZWdpc3Rlcik7CisKKwlpZiAobGVuZ3RoX2NoZWNrKQorCQl2YWx1ZSB8PSBNQUNDRkcyX0xDOworCWVsc2UKKwkJdmFsdWUgJj0gfk1BQ0NGRzJfTEM7CisKKwlvdXRfYmUzMihtYWNjZmcyX3JlZ2lzdGVyLCB2YWx1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9wcmVhbWJsZV9sZW5ndGgodTggcHJlYW1ibGVfbGVuZ3RoLAorCQkJCXZvbGF0aWxlIHUzMiAqbWFjY2ZnMl9yZWdpc3RlcikKK3sKKwl1MzIgdmFsdWUgPSAwOworCisJaWYgKChwcmVhbWJsZV9sZW5ndGggPCAzKSB8fCAocHJlYW1ibGVfbGVuZ3RoID4gNykpCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsdWUgPSBpbl9iZTMyKG1hY2NmZzJfcmVnaXN0ZXIpOworCXZhbHVlICY9IH5NQUNDRkcyX1BSRUxfTUFTSzsKKwl2YWx1ZSB8PSAocHJlYW1ibGVfbGVuZ3RoIDw8IE1BQ0NGRzJfUFJFTF9TSElGVCk7CisJb3V0X2JlMzIobWFjY2ZnMl9yZWdpc3RlciwgdmFsdWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGluaXRfbWlpX21hbmFnZW1lbnRfY29uZmlndXJhdGlvbihpbnQgcmVzZXRfbWdtdCwKKwkJCQkJICAgICBpbnQgcHJlYW1ibGVfc3VwcmVzcywKKwkJCQkJICAgICB2b2xhdGlsZSB1MzIgKm1paW1jZmdfcmVnaXN0ZXIsCisJCQkJCSAgICAgdm9sYXRpbGUgdTMyICptaWltaW5kX3JlZ2lzdGVyKQoreworCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gUEhZX0lOSVRfVElNRU9VVDsKKwl1MzIgdmFsdWUgPSAwOworCisJdmFsdWUgPSBpbl9iZTMyKG1paW1jZmdfcmVnaXN0ZXIpOworCWlmIChyZXNldF9tZ210KSB7CisJCXZhbHVlIHw9IE1JSU1DRkdfUkVTRVRfTUFOQUdFTUVOVDsKKwkJb3V0X2JlMzIobWlpbWNmZ19yZWdpc3RlciwgdmFsdWUpOworCX0KKworCXZhbHVlID0gMDsKKworCWlmIChwcmVhbWJsZV9zdXByZXNzKQorCQl2YWx1ZSB8PSBNSUlNQ0ZHX05PX1BSRUFNQkxFOworCisJdmFsdWUgfD0gVUNDX0dFVEhfTUlJTUNGR19NTkdNTlRfQ0xDX0RJVl9JTklUOworCW91dF9iZTMyKG1paW1jZmdfcmVnaXN0ZXIsIHZhbHVlKTsKKworCS8qIFdhaXQgdW50aWwgdGhlIGJ1cyBpcyBmcmVlICovCisJd2hpbGUgKChpbl9iZTMyKG1paW1pbmRfcmVnaXN0ZXIpICYgTUlJTUlORF9CVVNZKSAmJiB0aW1lb3V0LS0pCisJCWNwdV9yZWxheCgpOworCisJaWYgKHRpbWVvdXQgPD0gMCkgeworCQl1Z2V0aF9lcnIoIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayEiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3J4X3BhcmFtZXRlcnMoaW50IHJlamVjdF9icm9hZGNhc3QsCisJCQkgICAgICBpbnQgcmVjZWl2ZV9zaG9ydF9mcmFtZXMsCisJCQkgICAgICBpbnQgcHJvbWlzY3VvdXMsIHZvbGF0aWxlIHUzMiAqdXBzbXJfcmVnaXN0ZXIpCit7CisJdTMyIHZhbHVlID0gMDsKKworCXZhbHVlID0gaW5fYmUzMih1cHNtcl9yZWdpc3Rlcik7CisKKwlpZiAocmVqZWN0X2Jyb2FkY2FzdCkKKwkJdmFsdWUgfD0gVVBTTVJfQlJPOworCWVsc2UKKwkJdmFsdWUgJj0gflVQU01SX0JSTzsKKworCWlmIChyZWNlaXZlX3Nob3J0X2ZyYW1lcykKKwkJdmFsdWUgfD0gVVBTTVJfUlNIOworCWVsc2UKKwkJdmFsdWUgJj0gflVQU01SX1JTSDsKKworCWlmIChwcm9taXNjdW91cykKKwkJdmFsdWUgfD0gVVBTTVJfUFJPOworCWVsc2UKKwkJdmFsdWUgJj0gflVQU01SX1BSTzsKKworCW91dF9iZTMyKHVwc21yX3JlZ2lzdGVyLCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X21heF9yeF9idWZmX2xlbih1MTYgbWF4X3J4X2J1Zl9sZW4sCisJCQkJdm9sYXRpbGUgdTE2ICptcmJscl9yZWdpc3RlcikKK3sKKwkvKiBtYXhfcnhfYnVmX2xlbiB2YWx1ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTI4ICovCisJaWYgKChtYXhfcnhfYnVmX2xlbiA9PSAwKQorCSAgICB8fCAobWF4X3J4X2J1Zl9sZW4gJSBVQ0NfR0VUSF9NUkJMUl9BTElHTk1FTlQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW91dF9iZTE2KG1yYmxyX3JlZ2lzdGVyLCBtYXhfcnhfYnVmX2xlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW5pdF9taW5fZnJhbWVfbGVuKHUxNiBtaW5fZnJhbWVfbGVuZ3RoLAorCQkJICAgICAgdm9sYXRpbGUgdTE2ICptaW5mbHJfcmVnaXN0ZXIsCisJCQkgICAgICB2b2xhdGlsZSB1MTYgKm1yYmxyX3JlZ2lzdGVyKQoreworCXUxNiBtcmJscl92YWx1ZSA9IDA7CisKKwltcmJscl92YWx1ZSA9IGluX2JlMTYobXJibHJfcmVnaXN0ZXIpOworCWlmIChtaW5fZnJhbWVfbGVuZ3RoID49IChtcmJscl92YWx1ZSAtIDQpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW91dF9iZTE2KG1pbmZscl9yZWdpc3RlciwgbWluX2ZyYW1lX2xlbmd0aCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWRqdXN0X2VuZXRfaW50ZXJmYWNlKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCit7CisJdWNjX2dldGhfaW5mb190ICp1Z19pbmZvOworCXVjY19nZXRoX3QgKnVnX3JlZ3M7CisJdWNjX2Zhc3RfdCAqdWZfcmVnczsKKwllbmV0X3NwZWVkX2Ugc3BlZWQ7CisJaW50IHJldF92YWwsIHJwbSA9IDAsIHRiaSA9IDAsIHIxMG0gPSAwLCBybW0gPQorCSAgICAwLCBsaW1pdGVkX3RvX2Z1bGxfZHVwbGV4ID0gMDsKKwl1MzIgdXBzbXIsIG1hY2NmZzIsIHV0YmlwYXIsIHRiaUJhc2VBZGRyZXNzOworCXUxNiB2YWx1ZTsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwl1Z19pbmZvID0gdWdldGgtPnVnX2luZm87CisJdWdfcmVncyA9IHVnZXRoLT51Z19yZWdzOworCXVmX3JlZ3MgPSB1Z2V0aC0+dWNjZi0+dWZfcmVnczsKKworCS8qIEFuYWx5emUgZW5ldF9pbnRlcmZhY2UgYWNjb3JkaW5nIHRvIEludGVyZmFjZSBNb2RlIENvbmZpZ3VyYXRpb24KKwl0YWJsZSAqLworCXJldF92YWwgPQorCSAgICBnZXRfaW50ZXJmYWNlX2RldGFpbHModWdfaW5mby0+ZW5ldF9pbnRlcmZhY2UsICZzcGVlZCwgJnIxMG0sICZybW0sCisJCQkJICAmcnBtLCAmdGJpLCAmbGltaXRlZF90b19mdWxsX2R1cGxleCk7CisJaWYgKHJldF92YWwgIT0gMCkgeworCQl1Z2V0aF9lcnIKKwkJICAoIiVzOiBoYWxmIGR1cGxleCBub3Qgc3VwcG9ydGVkIGluIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uLiIsCisJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCisJLyogICAgICAgICAgICAgICAgICAgIFNldCBNQUNDRkcyICAgICAgICAgICAgICAgICAgICAqLworCW1hY2NmZzIgPSBpbl9iZTMyKCZ1Z19yZWdzLT5tYWNjZmcyKTsKKwltYWNjZmcyICY9IH5NQUNDRkcyX0lOVEVSRkFDRV9NT0RFX01BU0s7CisJaWYgKChzcGVlZCA9PSBFTkVUX1NQRUVEXzEwQlQpIHx8IChzcGVlZCA9PSBFTkVUX1NQRUVEXzEwMEJUKSkKKwkJbWFjY2ZnMiB8PSBNQUNDRkcyX0lOVEVSRkFDRV9NT0RFX05JQkJMRTsKKwllbHNlIGlmIChzcGVlZCA9PSBFTkVUX1NQRUVEXzEwMDBCVCkKKwkJbWFjY2ZnMiB8PSBNQUNDRkcyX0lOVEVSRkFDRV9NT0RFX0JZVEU7CisJbWFjY2ZnMiB8PSB1Z19pbmZvLT5wYWRBbmRDcmM7CisJb3V0X2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzIsIG1hY2NmZzIpOworCisJLyogICAgICAgICAgICAgICAgICAgIFNldCBVUFNNUiAgICAgICAgICAgICAgICAgICAgICAqLworCXVwc21yID0gaW5fYmUzMigmdWZfcmVncy0+dXBzbXIpOworCXVwc21yICY9IH4oVVBTTVJfUlBNIHwgVVBTTVJfUjEwTSB8IFVQU01SX1RCSU0gfCBVUFNNUl9STU0pOworCWlmIChycG0pCisJCXVwc21yIHw9IFVQU01SX1JQTTsKKwlpZiAocjEwbSkKKwkJdXBzbXIgfD0gVVBTTVJfUjEwTTsKKwlpZiAodGJpKQorCQl1cHNtciB8PSBVUFNNUl9UQklNOworCWlmIChybW0pCisJCXVwc21yIHw9IFVQU01SX1JNTTsKKwlvdXRfYmUzMigmdWZfcmVncy0+dXBzbXIsIHVwc21yKTsKKworCS8qICAgICAgICAgICAgICAgICAgICBTZXQgVVRCSVBBUiAgICAgICAgICAgICAgICAgICAgKi8KKwl1dGJpcGFyID0gaW5fYmUzMigmdWdfcmVncy0+dXRiaXBhcik7CisJdXRiaXBhciAmPSB+VVRCSVBBUl9QSFlfQUREUkVTU19NQVNLOworCWlmICh0YmkpCisJCXV0YmlwYXIgfD0KKwkJICAgICh1Z19pbmZvLT5waHlfYWRkcmVzcyArCisJCSAgICAgdWdldGgtPnVnX2luZm8tPnVmX2luZm8uCisJCSAgICAgdWNjX251bSkgPDwgVVRCSVBBUl9QSFlfQUREUkVTU19TSElGVDsKKwllbHNlCisJCXV0YmlwYXIgfD0KKwkJICAgICgweDEwICsKKwkJICAgICB1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby4KKwkJICAgICB1Y2NfbnVtKSA8PCBVVEJJUEFSX1BIWV9BRERSRVNTX1NISUZUOworCW91dF9iZTMyKCZ1Z19yZWdzLT51dGJpcGFyLCB1dGJpcGFyKTsKKworCS8qIERpc2FibGUgYXV0b25lZ290aWF0aW9uIGluIHRiaSBtb2RlLCBiZWNhdXNlIGJ5IGRlZmF1bHQgaXQKKwljb21lcyB1cCBpbiBhdXRvbmVnb3RpYXRpb24gbW9kZS4gKi8KKwkvKiBOb3RlIHRoYXQgdGhpcyBkZXBlbmRzIG9uIHByb3BlciBzZXR0aW5nIGluIHV0YmlwYXIgcmVnaXN0ZXIuICovCisJaWYgKHRiaSkgeworCQl0YmlCYXNlQWRkcmVzcyA9IGluX2JlMzIoJnVnX3JlZ3MtPnV0YmlwYXIpOworCQl0YmlCYXNlQWRkcmVzcyAmPSBVVEJJUEFSX1BIWV9BRERSRVNTX01BU0s7CisJCXRiaUJhc2VBZGRyZXNzID4+PSBVVEJJUEFSX1BIWV9BRERSRVNTX1NISUZUOworCQl2YWx1ZSA9CisJCSAgICB1Z2V0aC0+bWlpX2luZm8tPm1kaW9fcmVhZCh1Z2V0aC0+ZGV2LCAodTgpIHRiaUJhc2VBZGRyZXNzLAorCQkJCQkgICAgICAgRU5FVF9UQklfTUlJX0NSKTsKKwkJdmFsdWUgJj0gfjB4MTAwMDsJLyogVHVybiBvZmYgYXV0b25lZ290aWF0aW9uICovCisJCXVnZXRoLT5taWlfaW5mby0+bWRpb193cml0ZSh1Z2V0aC0+ZGV2LCAodTgpIHRiaUJhc2VBZGRyZXNzLAorCQkJCQkgICAgRU5FVF9UQklfTUlJX0NSLCB2YWx1ZSk7CisJfQorCisJcmV0X3ZhbCA9IGluaXRfbWFjX2R1cGxleF9tb2RlKDEsCisJCQkJICAgICAgIGxpbWl0ZWRfdG9fZnVsbF9kdXBsZXgsCisJCQkJICAgICAgICZ1Z19yZWdzLT5tYWNjZmcyKTsKKwlpZiAocmV0X3ZhbCAhPSAwKSB7CisJCXVnZXRoX2VycgorCQkoIiVzOiBoYWxmIGR1cGxleCBub3Qgc3VwcG9ydGVkIGluIHJlcXVlc3RlZCBjb25maWd1cmF0aW9uLiIsCisJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCisJaW5pdF9jaGVja19mcmFtZV9sZW5ndGhfbW9kZSh1Z19pbmZvLT5sZW5ndGhDaGVja1J4LCAmdWdfcmVncy0+bWFjY2ZnMik7CisKKwlyZXRfdmFsID0gaW5pdF9wcmVhbWJsZV9sZW5ndGgodWdfaW5mby0+cHJlbCwgJnVnX3JlZ3MtPm1hY2NmZzIpOworCWlmIChyZXRfdmFsICE9IDApIHsKKwkJdWdldGhfZXJyCisJCSAgICAoIiVzOiBQcmVhbWJsZSBsZW5ndGggbXVzdCBiZSBiZXR3ZWVuIDMgYW5kIDcgaW5jbHVzaXZlLiIsCisJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIHJldF92YWw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlZCBldmVyeSB0aW1lIHRoZSBjb250cm9sbGVyIG1pZ2h0IG5lZWQgdG8gYmUgbWFkZQorICogYXdhcmUgb2YgbmV3IGxpbmsgc3RhdGUuICBUaGUgUEhZIGNvZGUgY29udmV5cyB0aGlzCisgKiBpbmZvcm1hdGlvbiB0aHJvdWdoIHZhcmlhYmxlcyBpbiB0aGUgdWdldGggc3RydWN0dXJlLCBhbmQgdGhpcworICogZnVuY3Rpb24gY29udmVydHMgdGhvc2UgdmFyaWFibGVzIGludG8gdGhlIGFwcHJvcHJpYXRlCisgKiByZWdpc3RlciB2YWx1ZXMsIGFuZCBjYW4gYnJpbmcgZG93biB0aGUgZGV2aWNlIGlmIG5lZWRlZC4KKyAqLworc3RhdGljIHZvaWQgYWRqdXN0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1Y2NfZ2V0aF90ICp1Z19yZWdzOworCXUzMiB0ZW1wdmFsOworCXN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8gPSB1Z2V0aC0+bWlpX2luZm87CisKKwl1Z19yZWdzID0gdWdldGgtPnVnX3JlZ3M7CisKKwlpZiAobWlpX2luZm8tPmxpbmspIHsKKwkJLyogTm93IHdlIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBiZSBpbiBmdWxsIGR1cGxleCBtb2RlLgorCQkgKiBJZiBub3QsIHdlIG9wZXJhdGUgaW4gaGFsZi1kdXBsZXggbW9kZS4gKi8KKwkJaWYgKG1paV9pbmZvLT5kdXBsZXggIT0gdWdldGgtPm9sZGR1cGxleCkgeworCQkJaWYgKCEobWlpX2luZm8tPmR1cGxleCkpIHsKKwkJCQl0ZW1wdmFsID0gaW5fYmUzMigmdWdfcmVncy0+bWFjY2ZnMik7CisJCQkJdGVtcHZhbCAmPSB+KE1BQ0NGRzJfRkRYKTsKKwkJCQlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgdGVtcHZhbCk7CisKKwkJCQl1Z2V0aF9pbmZvKCIlczogSGFsZiBEdXBsZXgiLCBkZXYtPm5hbWUpOworCQkJfSBlbHNlIHsKKwkJCQl0ZW1wdmFsID0gaW5fYmUzMigmdWdfcmVncy0+bWFjY2ZnMik7CisJCQkJdGVtcHZhbCB8PSBNQUNDRkcyX0ZEWDsKKwkJCQlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMiwgdGVtcHZhbCk7CisKKwkJCQl1Z2V0aF9pbmZvKCIlczogRnVsbCBEdXBsZXgiLCBkZXYtPm5hbWUpOworCQkJfQorCisJCQl1Z2V0aC0+b2xkZHVwbGV4ID0gbWlpX2luZm8tPmR1cGxleDsKKwkJfQorCisJCWlmIChtaWlfaW5mby0+c3BlZWQgIT0gdWdldGgtPm9sZHNwZWVkKSB7CisJCQlzd2l0Y2ggKG1paV9pbmZvLT5zcGVlZCkgeworCQkJY2FzZSAxMDAwOgorI2lmZGVmIENPTkZJR19NUEM4MzZ4CisvKiBGSVhNRTogVGhpcyBjb2RlIGlzIGZvciAxMDBNYnMgQlVHIGZpeGluZywKK3JlbW92ZSB0aGlzIHdoZW4gaXQgaXMgZml4ZWQhISEgKi8KKwkJCQlpZiAodWdldGgtPnVnX2luZm8tPmVuZXRfaW50ZXJmYWNlID09CisJCQkJICAgIEVORVRfMTAwMF9HTUlJKQorCQkJCS8qIFJ1biB0aGUgY29tbWFuZHMgd2hpY2ggaW5pdGlhbGl6ZSB0aGUgUEhZICovCisJCQkJeworCQkJCQl0ZW1wdmFsID0KKwkJCQkJICAgICh1MzIpIG1paV9pbmZvLT5tZGlvX3JlYWQodWdldGgtPgorCQkJCQkJZGV2LCBtaWlfaW5mby0+bWlpX2lkLCAweDFiKTsKKwkJCQkJdGVtcHZhbCB8PSAweDAwMGY7CisJCQkJCW1paV9pbmZvLT5tZGlvX3dyaXRlKHVnZXRoLT5kZXYsCisJCQkJCQltaWlfaW5mby0+bWlpX2lkLCAweDFiLAorCQkJCQkJKHUxNikgdGVtcHZhbCk7CisJCQkJCXRlbXB2YWwgPQorCQkJCQkgICAgKHUzMikgbWlpX2luZm8tPm1kaW9fcmVhZCh1Z2V0aC0+CisJCQkJCQlkZXYsIG1paV9pbmZvLT5taWlfaWQsCisJCQkJCQlNSUlfQk1DUik7CisJCQkJCW1paV9pbmZvLT5tZGlvX3dyaXRlKHVnZXRoLT5kZXYsCisJCQkJCQltaWlfaW5mby0+bWlpX2lkLCBNSUlfQk1DUiwKKwkJCQkJCSh1MTYpICh0ZW1wdmFsIHwgQk1DUl9SRVNFVCkpOworCQkJCX0gZWxzZSBpZiAodWdldGgtPnVnX2luZm8tPmVuZXRfaW50ZXJmYWNlID09CisJCQkJCSAgIEVORVRfMTAwMF9SR01JSSkKKwkJCQkvKiBSdW4gdGhlIGNvbW1hbmRzIHdoaWNoIGluaXRpYWxpemUgdGhlIFBIWSAqLworCQkJCXsKKwkJCQkJdGVtcHZhbCA9CisJCQkJCSAgICAodTMyKSBtaWlfaW5mby0+bWRpb19yZWFkKHVnZXRoLT4KKwkJCQkJCWRldiwgbWlpX2luZm8tPm1paV9pZCwgMHgxYik7CisJCQkJCXRlbXB2YWwgPSAodGVtcHZhbCAmIH4weDAwMGYpIHwgMHgwMDBiOworCQkJCQltaWlfaW5mby0+bWRpb193cml0ZSh1Z2V0aC0+ZGV2LAorCQkJCQkJbWlpX2luZm8tPm1paV9pZCwgMHgxYiwKKwkJCQkJCSh1MTYpIHRlbXB2YWwpOworCQkJCQl0ZW1wdmFsID0KKwkJCQkJICAgICh1MzIpIG1paV9pbmZvLT5tZGlvX3JlYWQodWdldGgtPgorCQkJCQkJZGV2LCBtaWlfaW5mby0+bWlpX2lkLAorCQkJCQkJTUlJX0JNQ1IpOworCQkJCQltaWlfaW5mby0+bWRpb193cml0ZSh1Z2V0aC0+ZGV2LAorCQkJCQkJbWlpX2luZm8tPm1paV9pZCwgTUlJX0JNQ1IsCisJCQkJCQkodTE2KSAodGVtcHZhbCB8IEJNQ1JfUkVTRVQpKTsKKwkJCQl9CisJCQkJbXNsZWVwKDQwMDApOworI2VuZGlmCQkJCS8qIENPTkZJR19NUEM4MzYwICovCisJCQkJYWRqdXN0X2VuZXRfaW50ZXJmYWNlKHVnZXRoKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMTAwOgorCQkJY2FzZSAxMDoKKyNpZmRlZiBDT05GSUdfTVBDODM2eAorLyogRklYTUU6IFRoaXMgY29kZSBpcyBmb3IgMTAwTWJzIEJVRyBmaXhpbmcsCityZW1vdmUgdGhpcyBsaW5lcyB3aGVuIGl0IHdpbGwgYmUgZml4ZWQhISEgKi8KKwkJCQl1Z2V0aC0+dWdfaW5mby0+ZW5ldF9pbnRlcmZhY2UgPSBFTkVUXzEwMF9SR01JSTsKKwkJCQl0ZW1wdmFsID0KKwkJCQkgICAgKHUzMikgbWlpX2luZm8tPm1kaW9fcmVhZCh1Z2V0aC0+ZGV2LAorCQkJCQkJCSAgICAgIG1paV9pbmZvLT5taWlfaWQsCisJCQkJCQkJICAgICAgMHgxYik7CisJCQkJdGVtcHZhbCA9ICh0ZW1wdmFsICYgfjB4MDAwZikgfCAweDAwMGI7CisJCQkJbWlpX2luZm8tPm1kaW9fd3JpdGUodWdldGgtPmRldiwKKwkJCQkJCSAgICAgbWlpX2luZm8tPm1paV9pZCwgMHgxYiwKKwkJCQkJCSAgICAgKHUxNikgdGVtcHZhbCk7CisJCQkJdGVtcHZhbCA9CisJCQkJICAgICh1MzIpIG1paV9pbmZvLT5tZGlvX3JlYWQodWdldGgtPmRldiwKKwkJCQkJCQkgICAgICBtaWlfaW5mby0+bWlpX2lkLAorCQkJCQkJCSAgICAgIE1JSV9CTUNSKTsKKwkJCQltaWlfaW5mby0+bWRpb193cml0ZSh1Z2V0aC0+ZGV2LAorCQkJCQkJICAgICBtaWlfaW5mby0+bWlpX2lkLCBNSUlfQk1DUiwKKwkJCQkJCSAgICAgKHUxNikgKHRlbXB2YWwgfAorCQkJCQkJCSAgICBCTUNSX1JFU0VUKSk7CisJCQkJbXNsZWVwKDQwMDApOworI2VuZGlmCQkJCS8qIENPTkZJR19NUEM4MzYwICovCisJCQkJYWRqdXN0X2VuZXRfaW50ZXJmYWNlKHVnZXRoKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJdWdldGhfd2FybgorCQkJCSAgICAoIiVzOiBBY2shICBTcGVlZCAoJWQpIGlzIG5vdCAxMC8xMDAvMTAwMCEiLAorCQkJCSAgICAgZGV2LT5uYW1lLCBtaWlfaW5mby0+c3BlZWQpOworCQkJCWJyZWFrOworCQkJfQorCisJCQl1Z2V0aF9pbmZvKCIlczogU3BlZWQgJWRCVCIsIGRldi0+bmFtZSwKKwkJCQkgICBtaWlfaW5mby0+c3BlZWQpOworCisJCQl1Z2V0aC0+b2xkc3BlZWQgPSBtaWlfaW5mby0+c3BlZWQ7CisJCX0KKworCQlpZiAoIXVnZXRoLT5vbGRsaW5rKSB7CisJCQl1Z2V0aF9pbmZvKCIlczogTGluayBpcyB1cCIsIGRldi0+bmFtZSk7CisJCQl1Z2V0aC0+b2xkbGluayA9IDE7CisJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCQluZXRpZl9zY2hlZHVsZShkZXYpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHVnZXRoLT5vbGRsaW5rKSB7CisJCQl1Z2V0aF9pbmZvKCIlczogTGluayBpcyBkb3duIiwgZGV2LT5uYW1lKTsKKwkJCXVnZXRoLT5vbGRsaW5rID0gMDsKKwkJCXVnZXRoLT5vbGRzcGVlZCA9IDA7CisJCQl1Z2V0aC0+b2xkZHVwbGV4ID0gLTE7CisJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCQl9CisJfQorfQorCisvKiBDb25maWd1cmUgdGhlIFBIWSBmb3IgZGV2LgorICogcmV0dXJucyAwIGlmIHN1Y2Nlc3MuICAtMSBpZiBmYWlsdXJlCisgKi8KK3N0YXRpYyBpbnQgaW5pdF9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2luZm8gKmN1cnBoeTsKKwl1Y2NfbWlpX21uZ190ICptaWlfcmVnczsKKwlzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvOworCWludCBlcnI7CisKKwltaWlfcmVncyA9ICZ1Z2V0aC0+dWdfcmVncy0+bWlpbW5nOworCisJdWdldGgtPm9sZGxpbmsgPSAwOworCXVnZXRoLT5vbGRzcGVlZCA9IDA7CisJdWdldGgtPm9sZGR1cGxleCA9IC0xOworCisJbWlpX2luZm8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdWdldGhfbWlpX2luZm8pLCBHRlBfS0VSTkVMKTsKKworCWlmIChOVUxMID09IG1paV9pbmZvKSB7CisJCXVnZXRoX2VycigiJXM6IENvdWxkIG5vdCBhbGxvY2F0ZSBtaWlfaW5mbyIsIGRldi0+bmFtZSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1paV9pbmZvLT5taWlfcmVncyA9IG1paV9yZWdzOworCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJbWlpX2luZm8tPmR1cGxleCA9IERVUExFWF9GVUxMOworCW1paV9pbmZvLT5wYXVzZSA9IDA7CisJbWlpX2luZm8tPmxpbmsgPSAwOworCisJbWlpX2luZm8tPmFkdmVydGlzaW5nID0gKEFEVkVSVElTRURfMTBiYXNlVF9IYWxmIHwKKwkJCQkgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSBBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCSBBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsKTsKKwltaWlfaW5mby0+YXV0b25lZyA9IDE7CisKKwltaWlfaW5mby0+bWlpX2lkID0gdWdldGgtPnVnX2luZm8tPnBoeV9hZGRyZXNzOworCisJbWlpX2luZm8tPmRldiA9IGRldjsKKworCW1paV9pbmZvLT5tZGlvX3JlYWQgPSAmcmVhZF9waHlfcmVnOworCW1paV9pbmZvLT5tZGlvX3dyaXRlID0gJndyaXRlX3BoeV9yZWc7CisKKwl1Z2V0aC0+bWlpX2luZm8gPSBtaWlfaW5mbzsKKworCXNwaW5fbG9ja19pcnEoJnVnZXRoLT5sb2NrKTsKKworCS8qIFNldCB0aGlzIFVDQyB0byBiZSB0aGUgbWFzdGVyIG9mIHRoZSBNSUkgbWFuYWdtZW50ICovCisJdWNjX3NldF9xZV9tdXhfbWlpX21uZyh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKworCWlmIChpbml0X21paV9tYW5hZ2VtZW50X2NvbmZpZ3VyYXRpb24oMSwKKwkJCQkJICAgICAgdWdldGgtPnVnX2luZm8tPgorCQkJCQkgICAgICBtaWlQcmVhbWJsZVN1cHJlc3MsCisJCQkJCSAgICAgICZtaWlfcmVncy0+bWlpbWNmZywKKwkJCQkJICAgICAgJm1paV9yZWdzLT5taWltaW5kKSkgeworCQl1Z2V0aF9lcnIoIiVzOiBUaGUgTUlJIEJ1cyBpcyBzdHVjayEiLCBkZXYtPm5hbWUpOworCQllcnIgPSAtMTsKKwkJZ290byBidXNfZmFpbDsKKwl9CisKKwlzcGluX3VubG9ja19pcnEoJnVnZXRoLT5sb2NrKTsKKworCS8qIGdldCBpbmZvIGZvciB0aGlzIFBIWSAqLworCWN1cnBoeSA9IGdldF9waHlfaW5mbyh1Z2V0aC0+bWlpX2luZm8pOworCisJaWYgKGN1cnBoeSA9PSBOVUxMKSB7CisJCXVnZXRoX2VycigiJXM6IE5vIFBIWSBmb3VuZCIsIGRldi0+bmFtZSk7CisJCWVyciA9IC0xOworCQlnb3RvIG5vX3BoeTsKKwl9CisKKwltaWlfaW5mby0+cGh5aW5mbyA9IGN1cnBoeTsKKworCS8qIFJ1biB0aGUgY29tbWFuZHMgd2hpY2ggaW5pdGlhbGl6ZSB0aGUgUEhZICovCisJaWYgKGN1cnBoeS0+aW5pdCkgeworCQllcnIgPSBjdXJwaHktPmluaXQodWdldGgtPm1paV9pbmZvKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gcGh5X2luaXRfZmFpbDsKKwl9CisKKwlyZXR1cm4gMDsKKworICAgICAgcGh5X2luaXRfZmFpbDoKKyAgICAgIG5vX3BoeToKKyAgICAgIGJ1c19mYWlsOgorCWtmcmVlKG1paV9pbmZvKTsKKworCXJldHVybiBlcnI7Cit9CisKKyNpZmRlZiBDT05GSUdfVUdFVEhfVFhfT05fREVNT05ECitzdGF0aWMgaW50IHVnZXRoX3RyYW5zbWl0X29uX2RlbWFuZCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQoreworCXVjY19mYXN0X3RyYW5zbWl0X29uX2RlbWFuZCh1Z2V0aC0+dWNjZik7CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHVnZXRoX2dyYWNlZnVsX3N0b3BfdHgodWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCkKK3sKKwl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7CisJdTMyIGNlY3Jfc3ViYmxvY2s7CisJdTMyIHRlbXA7CisKKwl1Y2NmID0gdWdldGgtPnVjY2Y7CisKKwkvKiBNYXNrIEdSQUNFRlVMIFNUT1AgVFggaW50ZXJydXB0IGJpdCBhbmQgY2xlYXIgaXQgKi8KKwl0ZW1wID0gaW5fYmUzMih1Y2NmLT5wX3VjY20pOworCXRlbXAgJj0gflVDQ0VfR1JBOworCW91dF9iZTMyKHVjY2YtPnBfdWNjbSwgdGVtcCk7CisJb3V0X2JlMzIodWNjZi0+cF91Y2NlLCBVQ0NFX0dSQSk7CS8qIGNsZWFyIGJ5IHdyaXRpbmcgMSAqLworCisJLyogSXNzdWUgaG9zdCBjb21tYW5kICovCisJY2Vjcl9zdWJibG9jayA9CisJICAgIHVjY19mYXN0X2dldF9xZV9jcl9zdWJibG9jayh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKwlxZV9pc3N1ZV9jbWQoUUVfR1JBQ0VGVUxfU1RPUF9UWCwgY2Vjcl9zdWJibG9jaywKKwkJICAgICAodTgpIFFFX0NSX1BST1RPQ09MX0VUSEVSTkVULCAwKTsKKworCS8qIFdhaXQgZm9yIGNvbW1hbmQgdG8gY29tcGxldGUgKi8KKwlkbyB7CisJCXRlbXAgPSBpbl9iZTMyKHVjY2YtPnBfdWNjZSk7CisJfSB3aGlsZSAoISh0ZW1wICYgVUNDRV9HUkEpKTsKKworCXVjY2YtPnN0b3BwZWRfdHggPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWdldGhfZ3JhY2VmdWxfc3RvcF9yeCh1Y2NfZ2V0aF9wcml2YXRlX3QgKiB1Z2V0aCkKK3sKKwl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7CisJdTMyIGNlY3Jfc3ViYmxvY2s7CisJdTggdGVtcDsKKworCXVjY2YgPSB1Z2V0aC0+dWNjZjsKKworCS8qIENsZWFyIGFja25vd2xlZGdlIGJpdCAqLworCXRlbXAgPSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJ4Z3N0cGFjazsKKwl0ZW1wICY9IH5HUkFDRUZVTF9TVE9QX0FDS05PV0xFREdFX1JYOworCXVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnhnc3RwYWNrID0gdGVtcDsKKworCS8qIEtlZXAgaXNzdWluZyBjb21tYW5kIGFuZCBjaGVja2luZyBhY2tub3dsZWRnZSBiaXQgdW50aWwKKwlpdCBpcyBhc3NlcnRlZCwgYWNjb3JkaW5nIHRvIHNwZWMgKi8KKwlkbyB7CisJCS8qIElzc3VlIGhvc3QgY29tbWFuZCAqLworCQljZWNyX3N1YmJsb2NrID0KKwkJICAgIHVjY19mYXN0X2dldF9xZV9jcl9zdWJibG9jayh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby4KKwkJCQkJCXVjY19udW0pOworCQlxZV9pc3N1ZV9jbWQoUUVfR1JBQ0VGVUxfU1RPUF9SWCwgY2Vjcl9zdWJibG9jaywKKwkJCSAgICAgKHU4KSBRRV9DUl9QUk9UT0NPTF9FVEhFUk5FVCwgMCk7CisKKwkJdGVtcCA9IHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnhnc3RwYWNrOworCX0gd2hpbGUgKCEodGVtcCAmIEdSQUNFRlVMX1NUT1BfQUNLTk9XTEVER0VfUlgpKTsKKworCXVjY2YtPnN0b3BwZWRfcnggPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdWdldGhfcmVzdGFydF90eCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQoreworCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwl1MzIgY2Vjcl9zdWJibG9jazsKKworCXVjY2YgPSB1Z2V0aC0+dWNjZjsKKworCWNlY3Jfc3ViYmxvY2sgPQorCSAgICB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2sodWdldGgtPnVnX2luZm8tPnVmX2luZm8udWNjX251bSk7CisJcWVfaXNzdWVfY21kKFFFX1JFU1RBUlRfVFgsIGNlY3Jfc3ViYmxvY2ssICh1OCkgUUVfQ1JfUFJPVE9DT0xfRVRIRVJORVQsCisJCSAgICAgMCk7CisJdWNjZi0+c3RvcHBlZF90eCA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Z2V0aF9yZXN0YXJ0X3J4KHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgpCit7CisJdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOworCXUzMiBjZWNyX3N1YmJsb2NrOworCisJdWNjZiA9IHVnZXRoLT51Y2NmOworCisJY2Vjcl9zdWJibG9jayA9CisJICAgIHVjY19mYXN0X2dldF9xZV9jcl9zdWJibG9jayh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKwlxZV9pc3N1ZV9jbWQoUUVfUkVTVEFSVF9SWCwgY2Vjcl9zdWJibG9jaywgKHU4KSBRRV9DUl9QUk9UT0NPTF9FVEhFUk5FVCwKKwkJICAgICAwKTsKKwl1Y2NmLT5zdG9wcGVkX3J4ID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVnZXRoX2VuYWJsZSh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLCBjb21tX2Rpcl9lIG1vZGUpCit7CisJdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOworCWludCBlbmFibGVkX3R4LCBlbmFibGVkX3J4OworCisJdWNjZiA9IHVnZXRoLT51Y2NmOworCisJLyogY2hlY2sgaWYgdGhlIFVDQyBudW1iZXIgaXMgaW4gcmFuZ2UuICovCisJaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLnVjY19udW0gPj0gVUNDX01BWF9OVU0pIHsKKwkJdWdldGhfZXJyKCIlczogdWNjX251bSBvdXQgb2YgcmFuZ2UuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZW5hYmxlZF90eCA9IHVjY2YtPmVuYWJsZWRfdHg7CisJZW5hYmxlZF9yeCA9IHVjY2YtPmVuYWJsZWRfcng7CisKKwkvKiBHZXQgVHggYW5kIFJ4IGdvaW5nIGFnYWluLCBpbiBjYXNlIHRoaXMgY2hhbm5lbCB3YXMgYWN0aXZlbHkKKwlkaXNhYmxlZC4gKi8KKwlpZiAoKG1vZGUgJiBDT01NX0RJUl9UWCkgJiYgKCFlbmFibGVkX3R4KSAmJiB1Y2NmLT5zdG9wcGVkX3R4KQorCQl1Z2V0aF9yZXN0YXJ0X3R4KHVnZXRoKTsKKwlpZiAoKG1vZGUgJiBDT01NX0RJUl9SWCkgJiYgKCFlbmFibGVkX3J4KSAmJiB1Y2NmLT5zdG9wcGVkX3J4KQorCQl1Z2V0aF9yZXN0YXJ0X3J4KHVnZXRoKTsKKworCXVjY19mYXN0X2VuYWJsZSh1Y2NmLCBtb2RlKTsJLyogT0sgdG8gZG8gZXZlbiBpZiBub3QgZGlzYWJsZWQgKi8KKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgdWdldGhfZGlzYWJsZSh1Y2NfZ2V0aF9wcml2YXRlX3QgKiB1Z2V0aCwgY29tbV9kaXJfZSBtb2RlKQoreworCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKworCXVjY2YgPSB1Z2V0aC0+dWNjZjsKKworCS8qIGNoZWNrIGlmIHRoZSBVQ0MgbnVtYmVyIGlzIGluIHJhbmdlLiAqLworCWlmICh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtID49IFVDQ19NQVhfTlVNKSB7CisJCXVnZXRoX2VycigiJXM6IHVjY19udW0gb3V0IG9mIHJhbmdlLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFN0b3AgYW55IHRyYW5zbWlzc2lvbnMgKi8KKwlpZiAoKG1vZGUgJiBDT01NX0RJUl9UWCkgJiYgdWNjZi0+ZW5hYmxlZF90eCAmJiAhdWNjZi0+c3RvcHBlZF90eCkKKwkJdWdldGhfZ3JhY2VmdWxfc3RvcF90eCh1Z2V0aCk7CisKKwkvKiBTdG9wIGFueSByZWNlcHRpb25zICovCisJaWYgKChtb2RlICYgQ09NTV9ESVJfUlgpICYmIHVjY2YtPmVuYWJsZWRfcnggJiYgIXVjY2YtPnN0b3BwZWRfcngpCisJCXVnZXRoX2dyYWNlZnVsX3N0b3BfcngodWdldGgpOworCisJdWNjX2Zhc3RfZGlzYWJsZSh1Z2V0aC0+dWNjZiwgbW9kZSk7IC8qIE9LIHRvIGRvIGV2ZW4gaWYgbm90IGVuYWJsZWQgKi8KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1Z2V0aF9kdW1wX3JlZ3ModWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCkKK3sKKyNpZmRlZiBERUJVRworCXVjY19mYXN0X2R1bXBfcmVncyh1Z2V0aC0+dWNjZik7CisJZHVtcF9yZWdzKHVnZXRoKTsKKwlkdW1wX2Jkcyh1Z2V0aCk7CisjZW5kaWYKK30KKworI2lmZGVmIENPTkZJR19VR0VUSF9GSUxURVJJTkcKK3N0YXRpYyBpbnQgdWdldGhfZXh0X2ZpbHRlcmluZ19zZXJpYWxpemVfdGFkKHVjY19nZXRoX3RhZF9wYXJhbXNfdCAqCisJCQkJCSAgICAgcF9VY2NHZXRoVGFkUGFyYW1zLAorCQkJCQkgICAgIHFlX2ZsdHJfdGFkX3QgKnFlX2ZsdHJfdGFkKQoreworCXUxNiB0ZW1wOworCisJLyogWmVybyBzZXJpYWxpemVkIFRBRCAqLworCW1lbXNldChxZV9mbHRyX3RhZCwgMCwgUUVfRkxUUl9UQURfU0laRSk7CisKKwlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFswXSB8PSBVQ0NfR0VUSF9UQURfVjsJLyogTXVzdCBoYXZlIHRoaXMgKi8KKwlpZiAocF9VY2NHZXRoVGFkUGFyYW1zLT5yeF9ub25fZHluYW1pY19leHRlbmRlZF9mZWF0dXJlc19tb2RlIHx8CisJICAgIChwX1VjY0dldGhUYWRQYXJhbXMtPnZ0YWdfb3AgIT0gVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fVEFHR0VEX05PUCkKKwkgICAgfHwgKHBfVWNjR2V0aFRhZFBhcmFtcy0+dm5vbnRhZ19vcCAhPQorCQlVQ0NfR0VUSF9WTEFOX09QRVJBVElPTl9OT05fVEFHR0VEX05PUCkKKwkgICAgKQorCQlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFswXSB8PSBVQ0NfR0VUSF9UQURfRUY7CisJaWYgKHBfVWNjR2V0aFRhZFBhcmFtcy0+cmVqZWN0X2ZyYW1lKQorCQlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFswXSB8PSBVQ0NfR0VUSF9UQURfUkVKOworCXRlbXAgPQorCSAgICAodTE2KSAoKCh1MTYpIHBfVWNjR2V0aFRhZFBhcmFtcy0+CisJCSAgICB2dGFnX29wKSA8PCBVQ0NfR0VUSF9UQURfVlRBR19PUF9TSElGVCk7CisJcWVfZmx0cl90YWQtPnNlcmlhbGl6ZWRbMF0gfD0gKHU4KSAodGVtcCA+PiA4KTsJLyogdXBwZXIgYml0cyAqLworCisJcWVfZmx0cl90YWQtPnNlcmlhbGl6ZWRbMV0gfD0gKHU4KSAodGVtcCAmIDB4MDBmZik7CS8qIGxvd2VyIGJpdHMgKi8KKwlpZiAocF9VY2NHZXRoVGFkUGFyYW1zLT52bm9udGFnX29wID09CisJICAgIFVDQ19HRVRIX1ZMQU5fT1BFUkFUSU9OX05PTl9UQUdHRURfUV9UQUdfSU5TRVJUKQorCQlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFsxXSB8PSBVQ0NfR0VUSF9UQURfVl9OT05fVlRBR19PUDsKKwlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFsxXSB8PQorCSAgICBwX1VjY0dldGhUYWRQYXJhbXMtPnJxb3MgPDwgVUNDX0dFVEhfVEFEX1JRT1NfU0hJRlQ7CisKKwlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFsyXSB8PQorCSAgICBwX1VjY0dldGhUYWRQYXJhbXMtPnZwcmkgPDwgVUNDX0dFVEhfVEFEX1ZfUFJJT1JJVFlfU0hJRlQ7CisJLyogdXBwZXIgYml0cyAqLworCXFlX2ZsdHJfdGFkLT5zZXJpYWxpemVkWzJdIHw9ICh1OCkgKHBfVWNjR2V0aFRhZFBhcmFtcy0+dmlkID4+IDgpOworCS8qIGxvd2VyIGJpdHMgKi8KKwlxZV9mbHRyX3RhZC0+c2VyaWFsaXplZFszXSB8PSAodTgpIChwX1VjY0dldGhUYWRQYXJhbXMtPnZpZCAmIDB4MDBmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGVuZXRfYWRkcl9jb250YWluZXJfdAorICAgICp1Z2V0aF84Mnh4X2ZpbHRlcmluZ19nZXRfbWF0Y2hfYWRkcl9pbl9oYXNoKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsCisJCQkJCQkgZW5ldF9hZGRyX3QgKnBfZW5ldF9hZGRyKQoreworCWVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcF9saDsKKwl1MTYgaSwgbnVtOworCWludDMyX3QgajsKKwl1OCAqcF9jb3VudGVyOworCisJaWYgKCgqcF9lbmV0X2FkZHIpWzBdICYgRU5FVF9HUk9VUF9BRERSKSB7CisJCXBfbGggPSAmdWdldGgtPmdyb3VwX2hhc2hfcTsKKwkJcF9jb3VudGVyID0gJih1Z2V0aC0+bnVtR3JvdXBBZGRySW5IYXNoKTsKKwl9IGVsc2UgeworCQlwX2xoID0gJnVnZXRoLT5pbmRfaGFzaF9xOworCQlwX2NvdW50ZXIgPSAmKHVnZXRoLT5udW1JbmRBZGRySW5IYXNoKTsKKwl9CisKKwlpZiAoIXBfbGgpCisJCXJldHVybiBOVUxMOworCisJbnVtID0gKnBfY291bnRlcjsKKworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQllbmV0X2FkZHJfY29udCA9CisJCSAgICAoZW5ldF9hZGRyX2NvbnRhaW5lcl90ICopCisJCSAgICBFTkVUX0FERFJfQ09OVF9FTlRSWShkZXF1ZXVlKHBfbGgpKTsKKwkJZm9yIChqID0gRU5FVF9OVU1fT0NURVRTX1BFUl9BRERSRVNTIC0gMTsgaiA+PSAwOyBqLS0pIHsKKwkJCWlmICgoKnBfZW5ldF9hZGRyKVtqXSAhPSAoZW5ldF9hZGRyX2NvbnQtPmFkZHJlc3MpW2pdKQorCQkJCWJyZWFrOworCQkJaWYgKGogPT0gMCkKKwkJCQlyZXR1cm4gZW5ldF9hZGRyX2NvbnQ7CS8qIEZvdW5kICovCisJCX0KKwkJZW5xdWV1ZShwX2xoLCAmZW5ldF9hZGRyX2NvbnQtPm5vZGUpOwkvKiBQdXQgaXQgYmFjayAqLworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19hZGRfYWRkcl9pbl9oYXNoKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsCisJCQkJCQkgZW5ldF9hZGRyX3QgKnBfZW5ldF9hZGRyKQoreworCXVjY19nZXRoX2VuZXRfYWRkcmVzc19yZWNvZ25pdGlvbl9sb2NhdGlvbl9lIGxvY2F0aW9uOworCWVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQ7CisJc3RydWN0IGxpc3RfaGVhZCAqcF9saDsKKwl1OCBpOworCXUzMiBsaW1pdDsKKwl1OCAqcF9jb3VudGVyOworCisJaWYgKCgqcF9lbmV0X2FkZHIpWzBdICYgRU5FVF9HUk9VUF9BRERSKSB7CisJCXBfbGggPSAmdWdldGgtPmdyb3VwX2hhc2hfcTsKKwkJbGltaXQgPSB1Z2V0aC0+dWdfaW5mby0+bWF4R3JvdXBBZGRySW5IYXNoOworCQlsb2NhdGlvbiA9CisJCSAgICBVQ0NfR0VUSF9FTkVUX0FERFJFU1NfUkVDT0dOSVRJT05fTE9DQVRJT05fR1JPVVBfSEFTSDsKKwkJcF9jb3VudGVyID0gJih1Z2V0aC0+bnVtR3JvdXBBZGRySW5IYXNoKTsKKwl9IGVsc2UgeworCQlwX2xoID0gJnVnZXRoLT5pbmRfaGFzaF9xOworCQlsaW1pdCA9IHVnZXRoLT51Z19pbmZvLT5tYXhJbmRBZGRySW5IYXNoOworCQlsb2NhdGlvbiA9CisJCSAgICBVQ0NfR0VUSF9FTkVUX0FERFJFU1NfUkVDT0dOSVRJT05fTE9DQVRJT05fSU5ESVZJRFVBTF9IQVNIOworCQlwX2NvdW50ZXIgPSAmKHVnZXRoLT5udW1JbmRBZGRySW5IYXNoKTsKKwl9CisKKwlpZiAoKGVuZXRfYWRkcl9jb250ID0KKwkgICAgIHVnZXRoXzgyeHhfZmlsdGVyaW5nX2dldF9tYXRjaF9hZGRyX2luX2hhc2godWdldGgsIHBfZW5ldF9hZGRyKSkpIHsKKwkJbGlzdF9hZGQocF9saCwgJmVuZXRfYWRkcl9jb250LT5ub2RlKTsJLyogUHV0IGl0IGJhY2sgKi8KKwkJcmV0dXJuIDA7CisJfQorCWlmICgoIXBfbGgpIHx8ICghKCpwX2NvdW50ZXIgPCBsaW1pdCkpKQorCQlyZXR1cm4gLUVCVVNZOworCWlmICghKGVuZXRfYWRkcl9jb250ID0gZ2V0X2VuZXRfYWRkcl9jb250YWluZXIoKSkpCisJCXJldHVybiAtRU5PTUVNOworCWZvciAoaSA9IDA7IGkgPCBFTkVUX05VTV9PQ1RFVFNfUEVSX0FERFJFU1M7IGkrKykKKwkJKGVuZXRfYWRkcl9jb250LT5hZGRyZXNzKVtpXSA9ICgqcF9lbmV0X2FkZHIpW2ldOworCWVuZXRfYWRkcl9jb250LT5sb2NhdGlvbiA9IGxvY2F0aW9uOworCWVucXVldWUocF9saCwgJmVuZXRfYWRkcl9jb250LT5ub2RlKTsJLyogUHV0IGl0IGJhY2sgKi8KKwkrKygqcF9jb3VudGVyKTsKKworCWh3X2FkZF9hZGRyX2luX2hhc2godWdldGgsICYoZW5ldF9hZGRyX2NvbnQtPmFkZHJlc3MpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVnZXRoXzgyeHhfZmlsdGVyaW5nX2NsZWFyX2FkZHJfaW5faGFzaCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLAorCQkJCQkJICAgZW5ldF9hZGRyX3QgKnBfZW5ldF9hZGRyKQoreworCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OworCWVuZXRfYWRkcl9jb250YWluZXJfdCAqZW5ldF9hZGRyX2NvbnQ7CisJdWNjX2Zhc3RfcHJpdmF0ZV90ICp1Y2NmOworCWNvbW1fZGlyX2UgY29tbV9kaXI7CisJdTE2IGksIG51bTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwX2xoOworCXUzMiAqYWRkcl9oLCAqYWRkcl9sOworCXU4ICpwX2NvdW50ZXI7CisKKwl1Y2NmID0gdWdldGgtPnVjY2Y7CisKKwlwXzgyeHhfYWRkcl9maWx0ID0KKwkgICAgKHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICopIHVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+CisJICAgIGFkZHJlc3NmaWx0ZXJpbmc7CisKKwlpZiAoIQorCSAgICAoZW5ldF9hZGRyX2NvbnQgPQorCSAgICAgdWdldGhfODJ4eF9maWx0ZXJpbmdfZ2V0X21hdGNoX2FkZHJfaW5faGFzaCh1Z2V0aCwgcF9lbmV0X2FkZHIpKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiBJdCdzIGJlZW4gZm91bmQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgQ1EuICovCisJLyogTm93IGRlc3Ryb3kgaXRzIGNvbnRhaW5lciAqLworCXB1dF9lbmV0X2FkZHJfY29udGFpbmVyKGVuZXRfYWRkcl9jb250KTsKKworCWlmICgoKnBfZW5ldF9hZGRyKVswXSAmIEVORVRfR1JPVVBfQUREUikgeworCQlhZGRyX2ggPSAmKHBfODJ4eF9hZGRyX2ZpbHQtPmdhZGRyX2gpOworCQlhZGRyX2wgPSAmKHBfODJ4eF9hZGRyX2ZpbHQtPmdhZGRyX2wpOworCQlwX2xoID0gJnVnZXRoLT5ncm91cF9oYXNoX3E7CisJCXBfY291bnRlciA9ICYodWdldGgtPm51bUdyb3VwQWRkckluSGFzaCk7CisJfSBlbHNlIHsKKwkJYWRkcl9oID0gJihwXzgyeHhfYWRkcl9maWx0LT5pYWRkcl9oKTsKKwkJYWRkcl9sID0gJihwXzgyeHhfYWRkcl9maWx0LT5pYWRkcl9sKTsKKwkJcF9saCA9ICZ1Z2V0aC0+aW5kX2hhc2hfcTsKKwkJcF9jb3VudGVyID0gJih1Z2V0aC0+bnVtSW5kQWRkckluSGFzaCk7CisJfQorCisJY29tbV9kaXIgPSAwOworCWlmICh1Y2NmLT5lbmFibGVkX3R4KQorCQljb21tX2RpciB8PSBDT01NX0RJUl9UWDsKKwlpZiAodWNjZi0+ZW5hYmxlZF9yeCkKKwkJY29tbV9kaXIgfD0gQ09NTV9ESVJfUlg7CisJaWYgKGNvbW1fZGlyKQorCQl1Z2V0aF9kaXNhYmxlKHVnZXRoLCBjb21tX2Rpcik7CisKKwkvKiBDbGVhciB0aGUgaGFzaCB0YWJsZS4gKi8KKwlvdXRfYmUzMihhZGRyX2gsIDB4MDAwMDAwMDApOworCW91dF9iZTMyKGFkZHJfbCwgMHgwMDAwMDAwMCk7CisKKwkvKiBBZGQgYWxsIHJlbWFpbmluZyBDUSBlbGVtZW50cyBiYWNrIGludG8gaGFzaCAqLworCW51bSA9IC0tKCpwX2NvdW50ZXIpOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgeworCQllbmV0X2FkZHJfY29udCA9CisJCSAgICAoZW5ldF9hZGRyX2NvbnRhaW5lcl90ICopCisJCSAgICBFTkVUX0FERFJfQ09OVF9FTlRSWShkZXF1ZXVlKHBfbGgpKTsKKwkJaHdfYWRkX2FkZHJfaW5faGFzaCh1Z2V0aCwgJihlbmV0X2FkZHJfY29udC0+YWRkcmVzcykpOworCQllbnF1ZXVlKHBfbGgsICZlbmV0X2FkZHJfY29udC0+bm9kZSk7CS8qIFB1dCBpdCBiYWNrICovCisJfQorCisJaWYgKGNvbW1fZGlyKQorCQl1Z2V0aF9lbmFibGUodWdldGgsIGNvbW1fZGlyKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19VR0VUSF9GSUxURVJJTkcgKi8KKworc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19jbGVhcl9hbGxfYWRkcl9pbl9oYXNoKHVjY19nZXRoX3ByaXZhdGVfdCAqCisJCQkJCQkgICAgICAgdWdldGgsCisJCQkJCQkgICAgICAgZW5ldF9hZGRyX3R5cGVfZQorCQkJCQkJICAgICAgIGVuZXRfYWRkcl90eXBlKQoreworCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OworCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwljb21tX2Rpcl9lIGNvbW1fZGlyOworCXN0cnVjdCBsaXN0X2hlYWQgKnBfbGg7CisJdTE2IGksIG51bTsKKwl1MzIgKmFkZHJfaCwgKmFkZHJfbDsKKwl1OCAqcF9jb3VudGVyOworCisJdWNjZiA9IHVnZXRoLT51Y2NmOworCisJcF84Mnh4X2FkZHJfZmlsdCA9CisJICAgICh1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqKSB1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPgorCSAgICBhZGRyZXNzZmlsdGVyaW5nOworCisJaWYgKGVuZXRfYWRkcl90eXBlID09IEVORVRfQUREUl9UWVBFX0dST1VQKSB7CisJCWFkZHJfaCA9ICYocF84Mnh4X2FkZHJfZmlsdC0+Z2FkZHJfaCk7CisJCWFkZHJfbCA9ICYocF84Mnh4X2FkZHJfZmlsdC0+Z2FkZHJfbCk7CisJCXBfbGggPSAmdWdldGgtPmdyb3VwX2hhc2hfcTsKKwkJcF9jb3VudGVyID0gJih1Z2V0aC0+bnVtR3JvdXBBZGRySW5IYXNoKTsKKwl9IGVsc2UgaWYgKGVuZXRfYWRkcl90eXBlID09IEVORVRfQUREUl9UWVBFX0lORElWSURVQUwpIHsKKwkJYWRkcl9oID0gJihwXzgyeHhfYWRkcl9maWx0LT5pYWRkcl9oKTsKKwkJYWRkcl9sID0gJihwXzgyeHhfYWRkcl9maWx0LT5pYWRkcl9sKTsKKwkJcF9saCA9ICZ1Z2V0aC0+aW5kX2hhc2hfcTsKKwkJcF9jb3VudGVyID0gJih1Z2V0aC0+bnVtSW5kQWRkckluSGFzaCk7CisJfSBlbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJY29tbV9kaXIgPSAwOworCWlmICh1Y2NmLT5lbmFibGVkX3R4KQorCQljb21tX2RpciB8PSBDT01NX0RJUl9UWDsKKwlpZiAodWNjZi0+ZW5hYmxlZF9yeCkKKwkJY29tbV9kaXIgfD0gQ09NTV9ESVJfUlg7CisJaWYgKGNvbW1fZGlyKQorCQl1Z2V0aF9kaXNhYmxlKHVnZXRoLCBjb21tX2Rpcik7CisKKwkvKiBDbGVhciB0aGUgaGFzaCB0YWJsZS4gKi8KKwlvdXRfYmUzMihhZGRyX2gsIDB4MDAwMDAwMDApOworCW91dF9iZTMyKGFkZHJfbCwgMHgwMDAwMDAwMCk7CisKKwlpZiAoIXBfbGgpCisJCXJldHVybiAwOworCisJbnVtID0gKnBfY291bnRlcjsKKworCS8qIERlbGV0ZSBhbGwgcmVtYWluaW5nIENRIGVsZW1lbnRzICovCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKQorCQlwdXRfZW5ldF9hZGRyX2NvbnRhaW5lcihFTkVUX0FERFJfQ09OVF9FTlRSWShkZXF1ZXVlKHBfbGgpKSk7CisKKwkqcF9jb3VudGVyID0gMDsKKworCWlmIChjb21tX2RpcikKKwkJdWdldGhfZW5hYmxlKHVnZXRoLCBjb21tX2Rpcik7CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19VR0VUSF9GSUxURVJJTkcKK3N0YXRpYyBpbnQgdWdldGhfODJ4eF9maWx0ZXJpbmdfYWRkX2FkZHJfaW5fcGFkZHIodWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCwKKwkJCQkJCSAgZW5ldF9hZGRyX3QgKnBfZW5ldF9hZGRyLAorCQkJCQkJICB1OCBwYWRkcl9udW0pCit7CisJaW50IGk7CisKKwlpZiAoKCpwX2VuZXRfYWRkcilbMF0gJiBFTkVUX0dST1VQX0FERFIpCisJCXVnZXRoX3dhcm4KKwkJICAgICgiJXM6IG11bHRpY2FzdCBhZGRyZXNzIGFkZGVkIHRvIHBhZGRyIHdpbGwgaGF2ZSBubyAiCisJCSAgICAgImVmZmVjdCAtIGlzIHRoaXMgd2hhdCB5b3Ugd2FudGVkPyIsCisJCSAgICAgX19GVU5DVElPTl9fKTsKKworCXVnZXRoLT5pbmRBZGRyUmVnVXNlZFtwYWRkcl9udW1dID0gMTsJLyogbWFyayB0aGlzIHBhZGRyIGFzIHVzZWQgKi8KKwkvKiBzdG9yZSBhZGRyZXNzIGluIG91ciBkYXRhYmFzZSAqLworCWZvciAoaSA9IDA7IGkgPCBFTkVUX05VTV9PQ1RFVFNfUEVSX0FERFJFU1M7IGkrKykKKwkJdWdldGgtPnBhZGRyW3BhZGRyX251bV1baV0gPSAoKnBfZW5ldF9hZGRyKVtpXTsKKwkvKiBwdXQgaW4gaGFyZHdhcmUgKi8KKwlyZXR1cm4gaHdfYWRkX2FkZHJfaW5fcGFkZHIodWdldGgsIHBfZW5ldF9hZGRyLCBwYWRkcl9udW0pOworfQorI2VuZGlmIC8qIENPTkZJR19VR0VUSF9GSUxURVJJTkcgKi8KKworc3RhdGljIGludCB1Z2V0aF84Mnh4X2ZpbHRlcmluZ19jbGVhcl9hZGRyX2luX3BhZGRyKHVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGgsCisJCQkJCQkgICAgdTggcGFkZHJfbnVtKQoreworCXVnZXRoLT5pbmRBZGRyUmVnVXNlZFtwYWRkcl9udW1dID0gMDsgLyogbWFyayB0aGlzIHBhZGRyIGFzIG5vdCB1c2VkICovCisJcmV0dXJuIGh3X2NsZWFyX2FkZHJfaW5fcGFkZHIodWdldGgsIHBhZGRyX251bSk7LyogY2xlYXIgaW4gaGFyZHdhcmUgKi8KK30KKworc3RhdGljIHZvaWQgdWNjX2dldGhfbWVtY2xlYW4odWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCkKK3sKKwl1MTYgaSwgajsKKwl1OCAqYmQ7CisKKwlpZiAoIXVnZXRoKQorCQlyZXR1cm47CisKKwlpZiAodWdldGgtPnVjY2YpCisJCXVjY19mYXN0X2ZyZWUodWdldGgtPnVjY2YpOworCisJaWYgKHVnZXRoLT5wX3RocmVhZF9kYXRhX3R4KSB7CisJCXFlX211cmFtX2ZyZWUodWdldGgtPnRocmVhZF9kYXRfdHhfb2Zmc2V0KTsKKwkJdWdldGgtPnBfdGhyZWFkX2RhdGFfdHggPSBOVUxMOworCX0KKwlpZiAodWdldGgtPnBfdGhyZWFkX2RhdGFfcngpIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+dGhyZWFkX2RhdF9yeF9vZmZzZXQpOworCQl1Z2V0aC0+cF90aHJlYWRfZGF0YV9yeCA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9leGZfZ2xibF9wYXJhbSkgeworCQlxZV9tdXJhbV9mcmVlKHVnZXRoLT5leGZfZ2xibF9wYXJhbV9vZmZzZXQpOworCQl1Z2V0aC0+cF9leGZfZ2xibF9wYXJhbSA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9yeF9nbGJsX3ByYW0pIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+cnhfZ2xibF9wcmFtX29mZnNldCk7CisJCXVnZXRoLT5wX3J4X2dsYmxfcHJhbSA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF90eF9nbGJsX3ByYW0pIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+dHhfZ2xibF9wcmFtX29mZnNldCk7CisJCXVnZXRoLT5wX3R4X2dsYmxfcHJhbSA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZykgeworCQlxZV9tdXJhbV9mcmVlKHVnZXRoLT5zZW5kX3FfbWVtX3JlZ19vZmZzZXQpOworCQl1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZyA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9zY2hlZHVsZXIpIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+c2NoZWR1bGVyX29mZnNldCk7CisJCXVnZXRoLT5wX3NjaGVkdWxlciA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF90eF9md19zdGF0aXN0aWNzX3ByYW0pIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+dHhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCk7CisJCXVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9yeF9md19zdGF0aXN0aWNzX3ByYW0pIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+cnhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCk7CisJCXVnZXRoLT5wX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9yeF9pcnFfY29hbGVzY2luZ190YmwpIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+cnhfaXJxX2NvYWxlc2NpbmdfdGJsX29mZnNldCk7CisJCXVnZXRoLT5wX3J4X2lycV9jb2FsZXNjaW5nX3RibCA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9yeF9iZF9xc190YmwpIHsKKwkJcWVfbXVyYW1fZnJlZSh1Z2V0aC0+cnhfYmRfcXNfdGJsX29mZnNldCk7CisJCXVnZXRoLT5wX3J4X2JkX3FzX3RibCA9IE5VTEw7CisJfQorCWlmICh1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93KSB7CisJCXJldHVybl9pbml0X2VuZXRfZW50cmllcyh1Z2V0aCwKKwkJCQkJICYodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+CisJCQkJCSAgIHJ4dGhyZWFkWzBdKSwKKwkJCQkJIEVORVRfSU5JVF9QQVJBTV9NQVhfRU5UUklFU19SWCwKKwkJCQkJIHVnZXRoLT51Z19pbmZvLT5yaXNjUngsIDEpOworCQlyZXR1cm5faW5pdF9lbmV0X2VudHJpZXModWdldGgsCisJCQkJCSAmKHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPgorCQkJCQkgICB0eHRocmVhZFswXSksCisJCQkJCSBFTkVUX0lOSVRfUEFSQU1fTUFYX0VOVFJJRVNfVFgsCisJCQkJCSB1Z2V0aC0+dWdfaW5mby0+cmlzY1R4LCAwKTsKKwkJa2ZyZWUodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdyk7CisJCXVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3cgPSBOVUxMOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgdWdldGgtPnVnX2luZm8tPm51bVF1ZXVlc1R4OyBpKyspIHsKKwkJYmQgPSB1Z2V0aC0+cF90eF9iZF9yaW5nW2ldOworCQlmb3IgKGogPSAwOyBqIDwgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblR4W2ldOyBqKyspIHsKKwkJCWlmICh1Z2V0aC0+dHhfc2tidWZmW2ldW2pdKSB7CisJCQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLAorCQkJCQkJIEJEX0JVRkZFUl9BUkcoYmQpLAorCQkJCQkJIChCRF9TVEFUVVNfQU5EX0xFTkdUSChiZCkgJgorCQkJCQkJICBCRF9MRU5HVEhfTUFTSyksCisJCQkJCQkgRE1BX1RPX0RFVklDRSk7CisJCQkJZGV2X2tmcmVlX3NrYl9hbnkodWdldGgtPnR4X3NrYnVmZltpXVtqXSk7CisJCQkJdWdldGgtPnR4X3NrYnVmZltpXVtqXSA9IE5VTEw7CisJCQl9CisJCX0KKworCQlrZnJlZSh1Z2V0aC0+dHhfc2tidWZmW2ldKTsKKworCQlpZiAodWdldGgtPnBfdHhfYmRfcmluZ1tpXSkgeworCQkJaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmJkX21lbV9wYXJ0ID09CisJCQkgICAgTUVNX1BBUlRfU1lTVEVNKQorCQkJCWtmcmVlKCh2b2lkICopdWdldGgtPnR4X2JkX3Jpbmdfb2Zmc2V0W2ldKTsKKwkJCWVsc2UgaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmJkX21lbV9wYXJ0ID09CisJCQkJIE1FTV9QQVJUX01VUkFNKQorCQkJCXFlX211cmFtX2ZyZWUodWdldGgtPnR4X2JkX3Jpbmdfb2Zmc2V0W2ldKTsKKwkJCXVnZXRoLT5wX3R4X2JkX3JpbmdbaV0gPSBOVUxMOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCB1Z2V0aC0+dWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgeworCQlpZiAodWdldGgtPnBfcnhfYmRfcmluZ1tpXSkgeworCQkJLyogUmV0dXJuIGV4aXN0aW5nIGRhdGEgYnVmZmVycyBpbiByaW5nICovCisJCQliZCA9IHVnZXRoLT5wX3J4X2JkX3JpbmdbaV07CisJCQlmb3IgKGogPSAwOyBqIDwgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblJ4W2ldOyBqKyspIHsKKwkJCQlpZiAodWdldGgtPnJ4X3NrYnVmZltpXVtqXSkgeworCQkJCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsIEJEX0JVRkZFUihiZCksCisJCQkJCQkgdWdldGgtPnVnX2luZm8tPgorCQkJCQkJIHVmX2luZm8uCisJCQkJCQkgbWF4X3J4X2J1Zl9sZW5ndGggKworCQkJCQkJIFVDQ19HRVRIX1JYX0RBVEFfQlVGX0FMSUdOTUVOVCwKKwkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOworCisJCQkJCWRldl9rZnJlZV9za2JfYW55KHVnZXRoLT4KKwkJCQkJCQkgIHJ4X3NrYnVmZltpXVtqXSk7CisJCQkJCXVnZXRoLT5yeF9za2J1ZmZbaV1bal0gPSBOVUxMOworCQkJCX0KKwkJCQliZCArPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQkJfQorCisJCQlrZnJlZSh1Z2V0aC0+cnhfc2tidWZmW2ldKTsKKworCQkJaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmJkX21lbV9wYXJ0ID09CisJCQkgICAgTUVNX1BBUlRfU1lTVEVNKQorCQkJCWtmcmVlKCh2b2lkICopdWdldGgtPnJ4X2JkX3Jpbmdfb2Zmc2V0W2ldKTsKKwkJCWVsc2UgaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmJkX21lbV9wYXJ0ID09CisJCQkJIE1FTV9QQVJUX01VUkFNKQorCQkJCXFlX211cmFtX2ZyZWUodWdldGgtPnJ4X2JkX3Jpbmdfb2Zmc2V0W2ldKTsKKwkJCXVnZXRoLT5wX3J4X2JkX3JpbmdbaV0gPSBOVUxMOworCQl9CisJfQorCXdoaWxlICghbGlzdF9lbXB0eSgmdWdldGgtPmdyb3VwX2hhc2hfcSkpCisJCXB1dF9lbmV0X2FkZHJfY29udGFpbmVyKEVORVRfQUREUl9DT05UX0VOVFJZCisJCQkJCShkZXF1ZXVlKCZ1Z2V0aC0+Z3JvdXBfaGFzaF9xKSkpOworCXdoaWxlICghbGlzdF9lbXB0eSgmdWdldGgtPmluZF9oYXNoX3EpKQorCQlwdXRfZW5ldF9hZGRyX2NvbnRhaW5lcihFTkVUX0FERFJfQ09OVF9FTlRSWQorCQkJCQkoZGVxdWV1ZSgmdWdldGgtPmluZF9oYXNoX3EpKSk7CisKK30KKworc3RhdGljIHZvaWQgdWNjX2dldGhfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKKwl1Y2NfZmFzdF90ICp1Zl9yZWdzOworCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OworCWVuZXRfYWRkcl90IHRlbXBhZGRyOworCXU4ICptY3B0ciwgKnRkcHRyOworCWludCBpLCBqOworCisJdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJdWZfcmVncyA9IHVnZXRoLT51Y2NmLT51Zl9yZWdzOworCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCisJCXVmX3JlZ3MtPnVwc21yIHw9IFVQU01SX1BSTzsKKworCX0gZWxzZSB7CisKKwkJdWZfcmVncy0+dXBzbXIgJj0gflVQU01SX1BSTzsKKworCQlwXzgyeHhfYWRkcl9maWx0ID0KKwkJICAgICh1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdCAqKSB1Z2V0aC0+CisJCSAgICBwX3J4X2dsYmxfcHJhbS0+YWRkcmVzc2ZpbHRlcmluZzsKKworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCQkJLyogQ2F0Y2ggYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMsIHNvIHNldCB0aGUKKwkJCSAqIGZpbHRlciB0byBhbGwgMSdzLgorCQkJICovCisJCQlvdXRfYmUzMigmcF84Mnh4X2FkZHJfZmlsdC0+Z2FkZHJfaCwgMHhmZmZmZmZmZik7CisJCQlvdXRfYmUzMigmcF84Mnh4X2FkZHJfZmlsdC0+Z2FkZHJfbCwgMHhmZmZmZmZmZik7CisJCX0gZWxzZSB7CisJCQkvKiBDbGVhciBmaWx0ZXIgYW5kIGFkZCB0aGUgYWRkcmVzc2VzIGluIHRoZSBsaXN0LgorCQkJICovCisJCQlvdXRfYmUzMigmcF84Mnh4X2FkZHJfZmlsdC0+Z2FkZHJfaCwgMHgwKTsKKwkJCW91dF9iZTMyKCZwXzgyeHhfYWRkcl9maWx0LT5nYWRkcl9sLCAweDApOworCisJCQlkbWkgPSBkZXYtPm1jX2xpc3Q7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGRtaSA9IGRtaS0+bmV4dCkgeworCisJCQkJLyogT25seSBzdXBwb3J0IGdyb3VwIG11bHRpY2FzdCBmb3Igbm93LgorCQkJCSAqLworCQkJCWlmICghKGRtaS0+ZG1pX2FkZHJbMF0gJiAxKSkKKwkJCQkJY29udGludWU7CisKKwkJCQkvKiBUaGUgYWRkcmVzcyBpbiBkbWlfYWRkciBpcyBMU0IgZmlyc3QsCisJCQkJICogYW5kIHRhZGRyIGlzIE1TQiBmaXJzdC4gIFdlIGhhdmUgdG8KKwkJCQkgKiBjb3B5IGJ5dGVzIE1TQiBmaXJzdCBmcm9tIGRtaV9hZGRyLgorCQkJCSAqLworCQkJCW1jcHRyID0gKHU4ICopIGRtaS0+ZG1pX2FkZHIgKyA1OworCQkJCXRkcHRyID0gKHU4ICopICYgdGVtcGFkZHI7CisJCQkJZm9yIChqID0gMDsgaiA8IDY7IGorKykKKwkJCQkJKnRkcHRyKysgPSAqbWNwdHItLTsKKworCQkJCS8qIEFzayBDUE0gdG8gcnVuIENSQyBhbmQgc2V0IGJpdCBpbgorCQkJCSAqIGZpbHRlciBtYXNrLgorCQkJCSAqLworCQkJCWh3X2FkZF9hZGRyX2luX2hhc2godWdldGgsICZ0ZW1wYWRkcik7CisKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgdWNjX2dldGhfc3RvcCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQoreworCXVjY19nZXRoX3QgKnVnX3JlZ3MgPSB1Z2V0aC0+dWdfcmVnczsKKwl1MzIgdGVtcHZhbDsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBEaXNhYmxlIHRoZSBjb250cm9sbGVyICovCisJdWdldGhfZGlzYWJsZSh1Z2V0aCwgQ09NTV9ESVJfUlhfQU5EX1RYKTsKKworCS8qIFRlbGwgdGhlIGtlcm5lbCB0aGUgbGluayBpcyBkb3duICovCisJdWdldGgtPm1paV9pbmZvLT5saW5rID0gMDsKKwlhZGp1c3RfbGluayh1Z2V0aC0+ZGV2KTsKKworCS8qIE1hc2sgYWxsIGludGVycnVwdHMgKi8KKwlvdXRfYmUzMih1Z2V0aC0+dWNjZi0+cF91Y2NlLCAweDAwMDAwMDAwKTsKKworCS8qIENsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJb3V0X2JlMzIodWdldGgtPnVjY2YtPnBfdWNjZSwgMHhmZmZmZmZmZik7CisKKwkvKiBEaXNhYmxlIFJ4IGFuZCBUeCAqLworCXRlbXB2YWwgPSBpbl9iZTMyKCZ1Z19yZWdzLT5tYWNjZmcxKTsKKwl0ZW1wdmFsICY9IH4oTUFDQ0ZHMV9FTkFCTEVfUlggfCBNQUNDRkcxX0VOQUJMRV9UWCk7CisJb3V0X2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzEsIHRlbXB2YWwpOworCisJaWYgKHVnZXRoLT51Z19pbmZvLT5ib2FyZF9mbGFncyAmIEZTTF9VR0VUSF9CUkRfSEFTX1BIWV9JTlRSKSB7CisJCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwkJbWlpX2NsZWFyX3BoeV9pbnRlcnJ1cHQodWdldGgtPm1paV9pbmZvKTsKKworCQkvKiBEaXNhYmxlIFBIWSBJbnRlcnJ1cHRzICovCisJCW1paV9jb25maWd1cmVfcGh5X2ludGVycnVwdCh1Z2V0aC0+bWlpX2luZm8sCisJCQkJCSAgICBNSUlfSU5URVJSVVBUX0RJU0FCTEVEKTsKKwl9CisKKwlmcmVlX2lycSh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5pcnEsIHVnZXRoLT5kZXYpOworCisJaWYgKHVnZXRoLT51Z19pbmZvLT5ib2FyZF9mbGFncyAmIEZTTF9VR0VUSF9CUkRfSEFTX1BIWV9JTlRSKSB7CisJCWZyZWVfaXJxKHVnZXRoLT51Z19pbmZvLT5waHlfaW50ZXJydXB0LCB1Z2V0aC0+ZGV2KTsKKwl9IGVsc2UgeworCQlkZWxfdGltZXJfc3luYygmdWdldGgtPnBoeV9pbmZvX3RpbWVyKTsKKwl9CisKKwl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7Cit9CisKK3N0YXRpYyBpbnQgdWNjX2dldGhfc3RhcnR1cCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoKQoreworCXVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICpwXzgyeHhfYWRkcl9maWx0OworCXVjY19nZXRoX2luaXRfcHJhbV90ICpwX2luaXRfZW5ldF9wcmFtOworCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwl1Y2NfZ2V0aF9pbmZvX3QgKnVnX2luZm87CisJdWNjX2Zhc3RfaW5mb190ICp1Zl9pbmZvOworCXVjY19mYXN0X3QgKnVmX3JlZ3M7CisJdWNjX2dldGhfdCAqdWdfcmVnczsKKwlpbnQgcmV0X3ZhbCA9IC1FSU5WQUw7CisJdTMyIHJlbW9kZXIgPSBVQ0NfR0VUSF9SRU1PREVSX0lOSVQ7CisJdTMyIGluaXRfZW5ldF9wcmFtX29mZnNldCwgY2Vjcl9zdWJibG9jaywgY29tbWFuZCwgbWFjY2ZnMTsKKwl1MzIgaWZzdGF0LCBpLCBqLCBzaXplLCBsMnF0LCBsM3F0LCBsZW5ndGg7CisJdTE2IHRlbW9kZXIgPSBVQ0NfR0VUSF9URU1PREVSX0lOSVQ7CisJdTE2IHRlc3Q7CisJdTggZnVuY3Rpb25fY29kZSA9IDA7CisJdTggKmJkLCAqZW5kT2ZSaW5nOworCXU4IG51bVRocmVhZHNSeE51bWVyaWNhbCwgbnVtVGhyZWFkc1R4TnVtZXJpY2FsOworCisJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCXVnX2luZm8gPSB1Z2V0aC0+dWdfaW5mbzsKKwl1Zl9pbmZvID0gJnVnX2luZm8tPnVmX2luZm87CisKKwlpZiAoISgodWZfaW5mby0+YmRfbWVtX3BhcnQgPT0gTUVNX1BBUlRfU1lTVEVNKSB8fAorCSAgICAgICh1Zl9pbmZvLT5iZF9tZW1fcGFydCA9PSBNRU1fUEFSVF9NVVJBTSkpKSB7CisJCXVnZXRoX2VycigiJXM6IEJhZCBtZW1vcnkgcGFydGl0aW9uIHZhbHVlLiIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIFJ4IEJEIGxlbmd0aHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgeworCQlpZiAoKHVnX2luZm8tPmJkUmluZ0xlblJ4W2ldIDwgVUNDX0dFVEhfUlhfQkRfUklOR19TSVpFX01JTikgfHwKKwkJICAgICh1Z19pbmZvLT5iZFJpbmdMZW5SeFtpXSAlCisJCSAgICAgVUNDX0dFVEhfUlhfQkRfUklOR19TSVpFX0FMSUdOTUVOVCkpIHsKKwkJCXVnZXRoX2VycgorCQkJICAgICgiJXM6IFJ4IEJEIHJpbmcgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgNCwiCisJCQkJIiBubyBzbWFsbGVyIHRoYW4gOC4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBUeCBCRCBsZW5ndGhzICovCisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1R4OyBpKyspIHsKKwkJaWYgKHVnX2luZm8tPmJkUmluZ0xlblR4W2ldIDwgVUNDX0dFVEhfVFhfQkRfUklOR19TSVpFX01JTikgeworCQkJdWdldGhfZXJyCisJCQkgICAgKCIlczogVHggQkQgcmluZyBsZW5ndGggbXVzdCBiZSBubyBzbWFsbGVyIHRoYW4gMi4iLAorCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBtcmJsciAqLworCWlmICgodWZfaW5mby0+bWF4X3J4X2J1Zl9sZW5ndGggPT0gMCkgfHwKKwkgICAgKHVmX2luZm8tPm1heF9yeF9idWZfbGVuZ3RoICUgVUNDX0dFVEhfTVJCTFJfQUxJR05NRU5UKSkgeworCQl1Z2V0aF9lcnIKKwkJICAgICgiJXM6IG1heF9yeF9idWZfbGVuZ3RoIG11c3QgYmUgbm9uLXplcm8gbXVsdGlwbGUgb2YgMTI4LiIsCisJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbnVtIFR4IHF1ZXVlcyAqLworCWlmICh1Z19pbmZvLT5udW1RdWV1ZXNUeCA+IE5VTV9UWF9RVUVVRVMpIHsKKwkJdWdldGhfZXJyKCIlczogbnVtYmVyIG9mIHR4IHF1ZXVlcyB0b28gbGFyZ2UuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbnVtIFJ4IHF1ZXVlcyAqLworCWlmICh1Z19pbmZvLT5udW1RdWV1ZXNSeCA+IE5VTV9SWF9RVUVVRVMpIHsKKwkJdWdldGhfZXJyKCIlczogbnVtYmVyIG9mIHJ4IHF1ZXVlcyB0b28gbGFyZ2UuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogbDJxdCAqLworCWZvciAoaSA9IDA7IGkgPCBVQ0NfR0VUSF9WTEFOX1BSSU9SSVRZX01BWDsgaSsrKSB7CisJCWlmICh1Z19pbmZvLT5sMnF0W2ldID49IHVnX2luZm8tPm51bVF1ZXVlc1J4KSB7CisJCQl1Z2V0aF9lcnIKKwkJCSAgICAoIiVzOiBWTEFOIHByaW9yaXR5IHRhYmxlIGVudHJ5IG11c3Qgbm90IGJlIgorCQkJCSIgbGFyZ2VyIHRoYW4gbnVtYmVyIG9mIFJ4IHF1ZXVlcy4iLAorCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwl9CisKKwkvKiBsM3F0ICovCisJZm9yIChpID0gMDsgaSA8IFVDQ19HRVRIX0lQX1BSSU9SSVRZX01BWDsgaSsrKSB7CisJCWlmICh1Z19pbmZvLT5sM3F0W2ldID49IHVnX2luZm8tPm51bVF1ZXVlc1J4KSB7CisJCQl1Z2V0aF9lcnIKKwkJCSAgICAoIiVzOiBJUCBwcmlvcml0eSB0YWJsZSBlbnRyeSBtdXN0IG5vdCBiZSIKKwkJCQkiIGxhcmdlciB0aGFuIG51bWJlciBvZiBSeCBxdWV1ZXMuIiwKKwkJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKHVnX2luZm8tPmNhbSAmJiAhdWdfaW5mby0+ZWNhbXB0cikgeworCQl1Z2V0aF9lcnIoIiVzOiBJZiBjYW0gbW9kZSBpcyBjaG9zZW4sIG11c3Qgc3VwcGx5IGNhbSBwdHIuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCh1Z19pbmZvLT5udW1TdGF0aW9uQWRkcmVzc2VzICE9CisJICAgICBVQ0NfR0VUSF9OVU1fT0ZfU1RBVElPTl9BRERSRVNTRVNfMSkKKwkgICAgJiYgdWdfaW5mby0+cnhFeHRlbmRlZEZpbHRlcmluZykgeworCQl1Z2V0aF9lcnIoIiVzOiBOdW1iZXIgb2Ygc3RhdGlvbiBhZGRyZXNzZXMgZ3JlYXRlciB0aGFuIDEgIgorCQkJICAibm90IGFsbG93ZWQgaW4gZXh0ZW5kZWQgcGFyc2luZyBtb2RlLiIsCisJCQkgIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEdlbmVyYXRlIHVjY21fbWFzayBmb3IgcmVjZWl2ZSAqLworCXVmX2luZm8tPnVjY21fbWFzayA9IHVnX2luZm8tPmV2ZW50UmVnTWFzayAmIFVDQ0VfT1RIRVI7LyogRXJyb3JzICovCisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1J4OyBpKyspCisJCXVmX2luZm8tPnVjY21fbWFzayB8PSAoVUNDRV9SWEJGX1NJTkdMRV9NQVNLIDw8IGkpOworCisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1R4OyBpKyspCisJCXVmX2luZm8tPnVjY21fbWFzayB8PSAoVUNDRV9UWEJGX1NJTkdMRV9NQVNLIDw8IGkpOworCS8qIEluaXRpYWxpemUgdGhlIGdlbmVyYWwgZmFzdCBVQ0MgYmxvY2suICovCisJaWYgKHVjY19mYXN0X2luaXQodWZfaW5mbywgJnVjY2YpKSB7CisJCXVnZXRoX2VycigiJXM6IEZhaWxlZCB0byBpbml0IHVjY2YuIiwgX19GVU5DVElPTl9fKTsKKwkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdWdldGgtPnVjY2YgPSB1Y2NmOworCisJc3dpdGNoICh1Z19pbmZvLT5udW1UaHJlYWRzUngpIHsKKwljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzE6CisJCW51bVRocmVhZHNSeE51bWVyaWNhbCA9IDE7CisJCWJyZWFrOworCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfMjoKKwkJbnVtVGhyZWFkc1J4TnVtZXJpY2FsID0gMjsKKwkJYnJlYWs7CisJY2FzZSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU180OgorCQludW1UaHJlYWRzUnhOdW1lcmljYWwgPSA0OworCQlicmVhazsKKwljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzY6CisJCW51bVRocmVhZHNSeE51bWVyaWNhbCA9IDY7CisJCWJyZWFrOworCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfODoKKwkJbnVtVGhyZWFkc1J4TnVtZXJpY2FsID0gODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdWdldGhfZXJyKCIlczogQmFkIG51bWJlciBvZiBSeCB0aHJlYWRzIHZhbHVlLiIsIF9fRlVOQ1RJT05fXyk7CisJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAodWdfaW5mby0+bnVtVGhyZWFkc1R4KSB7CisJY2FzZSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU18xOgorCQludW1UaHJlYWRzVHhOdW1lcmljYWwgPSAxOworCQlicmVhazsKKwljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzI6CisJCW51bVRocmVhZHNUeE51bWVyaWNhbCA9IDI7CisJCWJyZWFrOworCWNhc2UgVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNDoKKwkJbnVtVGhyZWFkc1R4TnVtZXJpY2FsID0gNDsKKwkJYnJlYWs7CisJY2FzZSBVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU182OgorCQludW1UaHJlYWRzVHhOdW1lcmljYWwgPSA2OworCQlicmVhazsKKwljYXNlIFVDQ19HRVRIX05VTV9PRl9USFJFQURTXzg6CisJCW51bVRocmVhZHNUeE51bWVyaWNhbCA9IDg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXVnZXRoX2VycigiJXM6IEJhZCBudW1iZXIgb2YgVHggdGhyZWFkcyB2YWx1ZS4iLCBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwkvKiBDYWxjdWxhdGUgcnhfZXh0ZW5kZWRfZmVhdHVyZXMgKi8KKwl1Z2V0aC0+cnhfbm9uX2R5bmFtaWNfZXh0ZW5kZWRfZmVhdHVyZXMgPSB1Z19pbmZvLT5pcENoZWNrU3VtQ2hlY2sgfHwKKwkgICAgdWdfaW5mby0+aXBBZGRyZXNzQWxpZ25tZW50IHx8CisJICAgICh1Z19pbmZvLT5udW1TdGF0aW9uQWRkcmVzc2VzICE9CisJICAgICBVQ0NfR0VUSF9OVU1fT0ZfU1RBVElPTl9BRERSRVNTRVNfMSk7CisKKwl1Z2V0aC0+cnhfZXh0ZW5kZWRfZmVhdHVyZXMgPSB1Z2V0aC0+cnhfbm9uX2R5bmFtaWNfZXh0ZW5kZWRfZmVhdHVyZXMgfHwKKwkgICAgKHVnX2luZm8tPnZsYW5PcGVyYXRpb25UYWdnZWQgIT0gVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fVEFHR0VEX05PUCkKKwkgICAgfHwgKHVnX2luZm8tPnZsYW5PcGVyYXRpb25Ob25UYWdnZWQgIT0KKwkJVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fTk9OX1RBR0dFRF9OT1ApOworCisJdWZfcmVncyA9IHVjY2YtPnVmX3JlZ3M7CisJdWdfcmVncyA9ICh1Y2NfZ2V0aF90ICopICh1Y2NmLT51Zl9yZWdzKTsKKwl1Z2V0aC0+dWdfcmVncyA9IHVnX3JlZ3M7CisKKwlpbml0X2RlZmF1bHRfcmVnX3ZhbHMoJnVmX3JlZ3MtPnVwc21yLAorCQkJICAgICAgJnVnX3JlZ3MtPm1hY2NmZzEsICZ1Z19yZWdzLT5tYWNjZmcyKTsKKworCS8qICAgICAgICAgICAgICAgICAgICBTZXQgVVBTTVIgICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgaGFyZHdhcmUgc3BlYy4gICAgICAgICAgICovCisJaW5pdF9yeF9wYXJhbWV0ZXJzKHVnX2luZm8tPmJybywKKwkJCSAgIHVnX2luZm8tPnJzaCwgdWdfaW5mby0+cHJvLCAmdWZfcmVncy0+dXBzbXIpOworCisJLyogV2UncmUgZ29pbmcgdG8gaWdub3JlIG90aGVyIHJlZ2lzdGVycyBmb3Igbm93LCAqLworCS8qIGV4Y2VwdCBhcyBuZWVkZWQgdG8gZ2V0IHVwIGFuZCBydW5uaW5nICAgICAgICAgKi8KKworCS8qICAgICAgICAgICAgICAgICAgICBTZXQgTUFDQ0ZHMSAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgaGFyZHdhcmUgc3BlYy4gICAgICAgICAgICovCisJaW5pdF9mbG93X2NvbnRyb2xfcGFyYW1zKHVnX2luZm8tPmF1ZmMsCisJCQkJIHVnX2luZm8tPnJlY2VpdmVGbG93Q29udHJvbCwKKwkJCQkgMSwKKwkJCQkgdWdfaW5mby0+cGF1c2VQZXJpb2QsCisJCQkJIHVnX2luZm8tPmV4dGVuc2lvbkZpZWxkLAorCQkJCSAmdWZfcmVncy0+dXBzbXIsCisJCQkJICZ1Z19yZWdzLT51ZW1wciwgJnVnX3JlZ3MtPm1hY2NmZzEpOworCisJbWFjY2ZnMSA9IGluX2JlMzIoJnVnX3JlZ3MtPm1hY2NmZzEpOworCW1hY2NmZzEgfD0gTUFDQ0ZHMV9FTkFCTEVfUlg7CisJbWFjY2ZnMSB8PSBNQUNDRkcxX0VOQUJMRV9UWDsKKwlvdXRfYmUzMigmdWdfcmVncy0+bWFjY2ZnMSwgbWFjY2ZnMSk7CisKKwkvKiAgICAgICAgICAgICAgICAgICAgU2V0IElQR0lGRyAgICAgICAgICAgICAgICAgICAgICovCisJLyogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGhhcmR3YXJlIHNwZWMuICAgICAgICAgICAqLworCXJldF92YWwgPSBpbml0X2ludGVyX2ZyYW1lX2dhcF9wYXJhbXModWdfaW5mby0+bm9uQmFja1RvQmFja0lmZ1BhcnQxLAorCQkJCQkgICAgICB1Z19pbmZvLT5ub25CYWNrVG9CYWNrSWZnUGFydDIsCisJCQkJCSAgICAgIHVnX2luZm8tPgorCQkJCQkgICAgICBtaW1pbnVtSW50ZXJGcmFtZUdhcEVuZm9yY2VtZW50LAorCQkJCQkgICAgICB1Z19pbmZvLT5iYWNrVG9CYWNrSW50ZXJGcmFtZUdhcCwKKwkJCQkJICAgICAgJnVnX3JlZ3MtPmlwZ2lmZyk7CisJaWYgKHJldF92YWwgIT0gMCkgeworCQl1Z2V0aF9lcnIoIiVzOiBJUEdJRkcgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyIHRvbyBsYXJnZS4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiByZXRfdmFsOworCX0KKworCS8qICAgICAgICAgICAgICAgICAgICBTZXQgSEFGRFVQICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgaGFyZHdhcmUgc3BlYy4gICAgICAgICAgICovCisJcmV0X3ZhbCA9IGluaXRfaGFsZl9kdXBsZXhfcGFyYW1zKHVnX2luZm8tPmFsdEJlYiwKKwkJCQkJICB1Z19pbmZvLT5iYWNrUHJlc3N1cmVOb0JhY2tvZmYsCisJCQkJCSAgdWdfaW5mby0+bm9CYWNrb2ZmLAorCQkJCQkgIHVnX2luZm8tPmV4Y2Vzc0RlZmVyLAorCQkJCQkgIHVnX2luZm8tPmFsdEJlYlRydW5jYXRpb24sCisJCQkJCSAgdWdfaW5mby0+bWF4UmV0cmFuc21pc3Npb24sCisJCQkJCSAgdWdfaW5mby0+Y29sbGlzaW9uV2luZG93LAorCQkJCQkgICZ1Z19yZWdzLT5oYWZkdXApOworCWlmIChyZXRfdmFsICE9IDApIHsKKwkJdWdldGhfZXJyKCIlczogSGFsZiBEdXBsZXggaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyIHRvbyBsYXJnZS4iLAorCQkJICBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiByZXRfdmFsOworCX0KKworCS8qICAgICAgICAgICAgICAgICAgICBTZXQgSUZTVEFUICAgICAgICAgICAgICAgICAgICAgKi8KKwkvKiBGb3IgbW9yZSBkZXRhaWxzIHNlZSB0aGUgaGFyZHdhcmUgc3BlYy4gICAgICAgICAgICovCisJLyogUmVhZCBvbmx5IC0gcmVzZXRzIHVwb24gcmVhZCAgICAgICAgICAgICAgICAgICAgICAqLworCWlmc3RhdCA9IGluX2JlMzIoJnVnX3JlZ3MtPmlmc3RhdCk7CisKKwkvKiAgICAgICAgICAgICAgICAgICAgQ2xlYXIgVUVNUFIgICAgICAgICAgICAgICAgICAgICovCisJLyogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGhhcmR3YXJlIHNwZWMuICAgICAgICAgICAqLworCW91dF9iZTMyKCZ1Z19yZWdzLT51ZW1wciwgMCk7CisKKwkvKiAgICAgICAgICAgICAgICAgICAgU2V0IFVFU0NSICAgICAgICAgICAgICAgICAgICAgICovCisJLyogRm9yIG1vcmUgZGV0YWlscyBzZWUgdGhlIGhhcmR3YXJlIHNwZWMuICAgICAgICAgICAqLworCWluaXRfaHdfc3RhdGlzdGljc19nYXRoZXJpbmdfbW9kZSgodWdfaW5mby0+c3RhdGlzdGljc01vZGUgJgorCQkJCVVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfSEFSRFdBUkUpLAorCQkJCTAsICZ1Zl9yZWdzLT51cHNtciwgJnVnX3JlZ3MtPnVlc2NyKTsKKworCS8qIEFsbG9jYXRlIFR4IGJkcyAqLworCWZvciAoaiA9IDA7IGogPCB1Z19pbmZvLT5udW1RdWV1ZXNUeDsgaisrKSB7CisJCS8qIEFsbG9jYXRlIGluIG11bHRpcGxlIG9mCisJCSAgIFVDQ19HRVRIX1RYX0JEX1JJTkdfU0laRV9NRU1PUllfQUxJR05NRU5ULAorCQkgICBhY2NvcmRpbmcgdG8gc3BlYyAqLworCQlsZW5ndGggPSAoKHVnX2luZm8tPmJkUmluZ0xlblR4W2pdICogVUNDX0dFVEhfU0laRV9PRl9CRCkKKwkJCSAgLyBVQ0NfR0VUSF9UWF9CRF9SSU5HX1NJWkVfTUVNT1JZX0FMSUdOTUVOVCkKKwkJICAgICogVUNDX0dFVEhfVFhfQkRfUklOR19TSVpFX01FTU9SWV9BTElHTk1FTlQ7CisJCWlmICgodWdfaW5mby0+YmRSaW5nTGVuVHhbal0gKiBVQ0NfR0VUSF9TSVpFX09GX0JEKSAlCisJCSAgICBVQ0NfR0VUSF9UWF9CRF9SSU5HX1NJWkVfTUVNT1JZX0FMSUdOTUVOVCkKKwkJCWxlbmd0aCArPSBVQ0NfR0VUSF9UWF9CRF9SSU5HX1NJWkVfTUVNT1JZX0FMSUdOTUVOVDsKKwkJaWYgKHVmX2luZm8tPmJkX21lbV9wYXJ0ID09IE1FTV9QQVJUX1NZU1RFTSkgeworCQkJdTMyIGFsaWduID0gNDsKKwkJCWlmIChVQ0NfR0VUSF9UWF9CRF9SSU5HX0FMSUdOTUVOVCA+IDQpCisJCQkJYWxpZ24gPSBVQ0NfR0VUSF9UWF9CRF9SSU5HX0FMSUdOTUVOVDsKKwkJCXVnZXRoLT50eF9iZF9yaW5nX29mZnNldFtqXSA9CisJCQkJKHUzMikgKGttYWxsb2MoKHUzMikgKGxlbmd0aCArIGFsaWduKSwKKwkJCQlHRlBfS0VSTkVMKSk7CisJCQlpZiAodWdldGgtPnR4X2JkX3Jpbmdfb2Zmc2V0W2pdICE9IDApCisJCQkJdWdldGgtPnBfdHhfYmRfcmluZ1tqXSA9CisJCQkJCSh2b2lkKikoKHVnZXRoLT50eF9iZF9yaW5nX29mZnNldFtqXSArCisJCQkJCWFsaWduKSAmIH4oYWxpZ24gLSAxKSk7CisJCX0gZWxzZSBpZiAodWZfaW5mby0+YmRfbWVtX3BhcnQgPT0gTUVNX1BBUlRfTVVSQU0pIHsKKwkJCXVnZXRoLT50eF9iZF9yaW5nX29mZnNldFtqXSA9CisJCQkgICAgcWVfbXVyYW1fYWxsb2MobGVuZ3RoLAorCQkJCQkgICBVQ0NfR0VUSF9UWF9CRF9SSU5HX0FMSUdOTUVOVCk7CisJCQlpZiAoIUlTX01VUkFNX0VSUih1Z2V0aC0+dHhfYmRfcmluZ19vZmZzZXRbal0pKQorCQkJCXVnZXRoLT5wX3R4X2JkX3Jpbmdbal0gPQorCQkJCSAgICAodTggKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CisJCQkJCQkJIHR4X2JkX3Jpbmdfb2Zmc2V0W2pdKTsKKwkJfQorCQlpZiAoIXVnZXRoLT5wX3R4X2JkX3Jpbmdbal0pIHsKKwkJCXVnZXRoX2VycgorCQkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBUeCBiZCByaW5ncy4iLAorCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJLyogWmVybyB1bnVzZWQgZW5kIG9mIGJkIHJpbmcsIGFjY29yZGluZyB0byBzcGVjICovCisJCW1lbXNldCh1Z2V0aC0+cF90eF9iZF9yaW5nW2pdICsKKwkJICAgICAgIHVnX2luZm8tPmJkUmluZ0xlblR4W2pdICogVUNDX0dFVEhfU0laRV9PRl9CRCwgMCwKKwkJICAgICAgIGxlbmd0aCAtIHVnX2luZm8tPmJkUmluZ0xlblR4W2pdICogVUNDX0dFVEhfU0laRV9PRl9CRCk7CisJfQorCisJLyogQWxsb2NhdGUgUnggYmRzICovCisJZm9yIChqID0gMDsgaiA8IHVnX2luZm8tPm51bVF1ZXVlc1J4OyBqKyspIHsKKwkJbGVuZ3RoID0gdWdfaW5mby0+YmRSaW5nTGVuUnhbal0gKiBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQlpZiAodWZfaW5mby0+YmRfbWVtX3BhcnQgPT0gTUVNX1BBUlRfU1lTVEVNKSB7CisJCQl1MzIgYWxpZ24gPSA0OworCQkJaWYgKFVDQ19HRVRIX1JYX0JEX1JJTkdfQUxJR05NRU5UID4gNCkKKwkJCQlhbGlnbiA9IFVDQ19HRVRIX1JYX0JEX1JJTkdfQUxJR05NRU5UOworCQkJdWdldGgtPnJ4X2JkX3Jpbmdfb2Zmc2V0W2pdID0KKwkJCSAgICAodTMyKSAoa21hbGxvYygodTMyKSAobGVuZ3RoICsgYWxpZ24pLCBHRlBfS0VSTkVMKSk7CisJCQlpZiAodWdldGgtPnJ4X2JkX3Jpbmdfb2Zmc2V0W2pdICE9IDApCisJCQkJdWdldGgtPnBfcnhfYmRfcmluZ1tqXSA9CisJCQkJCSh2b2lkKikoKHVnZXRoLT5yeF9iZF9yaW5nX29mZnNldFtqXSArCisJCQkJCWFsaWduKSAmIH4oYWxpZ24gLSAxKSk7CisJCX0gZWxzZSBpZiAodWZfaW5mby0+YmRfbWVtX3BhcnQgPT0gTUVNX1BBUlRfTVVSQU0pIHsKKwkJCXVnZXRoLT5yeF9iZF9yaW5nX29mZnNldFtqXSA9CisJCQkgICAgcWVfbXVyYW1fYWxsb2MobGVuZ3RoLAorCQkJCQkgICBVQ0NfR0VUSF9SWF9CRF9SSU5HX0FMSUdOTUVOVCk7CisJCQlpZiAoIUlTX01VUkFNX0VSUih1Z2V0aC0+cnhfYmRfcmluZ19vZmZzZXRbal0pKQorCQkJCXVnZXRoLT5wX3J4X2JkX3Jpbmdbal0gPQorCQkJCSAgICAodTggKikgcWVfbXVyYW1fYWRkcih1Z2V0aC0+CisJCQkJCQkJIHJ4X2JkX3Jpbmdfb2Zmc2V0W2pdKTsKKwkJfQorCQlpZiAoIXVnZXRoLT5wX3J4X2JkX3Jpbmdbal0pIHsKKwkJCXVnZXRoX2VycgorCQkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBSeCBiZCByaW5ncy4iLAorCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisKKwkvKiBJbml0IFR4IGJkcyAqLworCWZvciAoaiA9IDA7IGogPCB1Z19pbmZvLT5udW1RdWV1ZXNUeDsgaisrKSB7CisJCS8qIFNldHVwIHRoZSBza2J1ZmYgcmluZ3MgKi8KKwkJdWdldGgtPnR4X3NrYnVmZltqXSA9CisJCSAgICAoc3RydWN0IHNrX2J1ZmYgKiopa21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKgorCQkJCQkgICAgICAgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblR4W2pdLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHVnZXRoLT50eF9za2J1ZmZbal0gPT0gTlVMTCkgeworCQkJdWdldGhfZXJyKCIlczogQ291bGQgbm90IGFsbG9jYXRlIHR4X3NrYnVmZiIsCisJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblR4W2pdOyBpKyspCisJCQl1Z2V0aC0+dHhfc2tidWZmW2pdW2ldID0gTlVMTDsKKworCQl1Z2V0aC0+c2tiX2N1cnR4W2pdID0gdWdldGgtPnNrYl9kaXJ0eXR4W2pdID0gMDsKKwkJYmQgPSB1Z2V0aC0+Y29uZkJkW2pdID0gdWdldGgtPnR4QmRbal0gPSB1Z2V0aC0+cF90eF9iZF9yaW5nW2pdOworCQlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+YmRSaW5nTGVuVHhbal07IGkrKykgeworCQkJQkRfQlVGRkVSX0NMRUFSKGJkKTsKKwkJCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwgMCk7CisJCQliZCArPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQl9CisJCWJkIC09IFVDQ19HRVRIX1NJWkVfT0ZfQkQ7CisJCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwgVF9XKTsvKiBmb3IgbGFzdCBCRCBzZXQgV3JhcCBiaXQgKi8KKwl9CisKKwkvKiBJbml0IFJ4IGJkcyAqLworCWZvciAoaiA9IDA7IGogPCB1Z19pbmZvLT5udW1RdWV1ZXNSeDsgaisrKSB7CisJCS8qIFNldHVwIHRoZSBza2J1ZmYgcmluZ3MgKi8KKwkJdWdldGgtPnJ4X3NrYnVmZltqXSA9CisJCSAgICAoc3RydWN0IHNrX2J1ZmYgKiopa21hbGxvYyhzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKikgKgorCQkJCQkgICAgICAgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblJ4W2pdLAorCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKHVnZXRoLT5yeF9za2J1ZmZbal0gPT0gTlVMTCkgeworCQkJdWdldGhfZXJyKCIlczogQ291bGQgbm90IGFsbG9jYXRlIHJ4X3NrYnVmZiIsCisJCQkJICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgdWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblJ4W2pdOyBpKyspCisJCQl1Z2V0aC0+cnhfc2tidWZmW2pdW2ldID0gTlVMTDsKKworCQl1Z2V0aC0+c2tiX2N1cnJ4W2pdID0gMDsKKwkJYmQgPSB1Z2V0aC0+cnhCZFtqXSA9IHVnZXRoLT5wX3J4X2JkX3Jpbmdbal07CisJCWZvciAoaSA9IDA7IGkgPCB1Z19pbmZvLT5iZFJpbmdMZW5SeFtqXTsgaSsrKSB7CisJCQlCRF9TVEFUVVNfQU5EX0xFTkdUSF9TRVQoYmQsIFJfSSk7CisJCQlCRF9CVUZGRVJfQ0xFQVIoYmQpOworCQkJYmQgKz0gVUNDX0dFVEhfU0laRV9PRl9CRDsKKwkJfQorCQliZCAtPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQlCRF9TVEFUVVNfQU5EX0xFTkdUSF9TRVQoYmQsIFJfVyk7LyogZm9yIGxhc3QgQkQgc2V0IFdyYXAgYml0ICovCisJfQorCisJLyoKKwkgKiBHbG9iYWwgUFJBTQorCSAqLworCS8qIFR4IGdsb2JhbCBQUkFNICovCisJLyogQWxsb2NhdGUgZ2xvYmFsIHR4IHBhcmFtZXRlciBSQU0gcGFnZSAqLworCXVnZXRoLT50eF9nbGJsX3ByYW1fb2Zmc2V0ID0KKwkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHVjY19nZXRoX3R4X2dsb2JhbF9wcmFtX3QpLAorCQkJICAgVUNDX0dFVEhfVFhfR0xPQkFMX1BSQU1fQUxJR05NRU5UKTsKKwlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50eF9nbGJsX3ByYW1fb2Zmc2V0KSkgeworCQl1Z2V0aF9lcnIKKwkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciBwX3R4X2dsYmxfcHJhbS4iLAorCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVnZXRoLT5wX3R4X2dsYmxfcHJhbSA9CisJICAgICh1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbV90ICopIHFlX211cmFtX2FkZHIodWdldGgtPgorCQkJCQkJCXR4X2dsYmxfcHJhbV9vZmZzZXQpOworCS8qIFplcm8gb3V0IHBfdHhfZ2xibF9wcmFtICovCisJbWVtc2V0KHVnZXRoLT5wX3R4X2dsYmxfcHJhbSwgMCwgc2l6ZW9mKHVjY19nZXRoX3R4X2dsb2JhbF9wcmFtX3QpKTsKKworCS8qIEZpbGwgZ2xvYmFsIFBSQU0gKi8KKworCS8qIFRRUFRSICovCisJLyogU2l6ZSB2YXJpZXMgd2l0aCBudW1iZXIgb2YgVHggdGhyZWFkcyAqLworCXVnZXRoLT50aHJlYWRfZGF0X3R4X29mZnNldCA9CisJICAgIHFlX211cmFtX2FsbG9jKG51bVRocmVhZHNUeE51bWVyaWNhbCAqCisJCQkgICBzaXplb2YodWNjX2dldGhfdGhyZWFkX2RhdGFfdHhfdCkgKworCQkJICAgMzIgKiAobnVtVGhyZWFkc1R4TnVtZXJpY2FsID09IDEpLAorCQkJICAgVUNDX0dFVEhfVEhSRUFEX0RBVEFfQUxJR05NRU5UKTsKKwlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50aHJlYWRfZGF0X3R4X29mZnNldCkpIHsKKwkJdWdldGhfZXJyCisJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF90aHJlYWRfZGF0YV90eC4iLAorCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdWdldGgtPnBfdGhyZWFkX2RhdGFfdHggPQorCSAgICAodWNjX2dldGhfdGhyZWFkX2RhdGFfdHhfdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJCQkJCQl0aHJlYWRfZGF0X3R4X29mZnNldCk7CisJb3V0X2JlMzIoJnVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dHFwdHIsIHVnZXRoLT50aHJlYWRfZGF0X3R4X29mZnNldCk7CisKKwkvKiB2dGFndGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVUNDX0dFVEhfVFhfVlRBR19UQUJMRV9FTlRSWV9NQVg7IGkrKykKKwkJb3V0X2JlMzIoJnVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dnRhZ3RhYmxlW2ldLAorCQkJIHVnX2luZm8tPnZ0YWd0YWJsZVtpXSk7CisKKwkvKiBpcGhvZmZzZXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgVFhfSVBfT0ZGU0VUX0VOVFJZX01BWDsgaSsrKQorCQl1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPmlwaG9mZnNldFtpXSA9IHVnX2luZm8tPmlwaG9mZnNldFtpXTsKKworCS8qIFNRUFRSICovCisJLyogU2l6ZSB2YXJpZXMgd2l0aCBudW1iZXIgb2YgVHggcXVldWVzICovCisJdWdldGgtPnNlbmRfcV9tZW1fcmVnX29mZnNldCA9CisJICAgIHFlX211cmFtX2FsbG9jKHVnX2luZm8tPm51bVF1ZXVlc1R4ICoKKwkJCSAgIHNpemVvZih1Y2NfZ2V0aF9zZW5kX3F1ZXVlX3FkX3QpLAorCQkJICAgVUNDX0dFVEhfU0VORF9RVUVVRV9RVUVVRV9ERVNDUklQVE9SX0FMSUdOTUVOVCk7CisJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+c2VuZF9xX21lbV9yZWdfb2Zmc2V0KSkgeworCQl1Z2V0aF9lcnIKKwkJICAgICgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciBwX3NlbmRfcV9tZW1fcmVnLiIsCisJCSAgICAgX19GVU5DVElPTl9fKTsKKwkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwl1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZyA9CisJICAgICh1Y2NfZ2V0aF9zZW5kX3F1ZXVlX21lbV9yZWdpb25fdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJCXNlbmRfcV9tZW1fcmVnX29mZnNldCk7CisJb3V0X2JlMzIoJnVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+c3FwdHIsIHVnZXRoLT5zZW5kX3FfbWVtX3JlZ19vZmZzZXQpOworCisJLyogU2V0dXAgdGhlIHRhYmxlICovCisJLyogQXNzdW1lIEJEIHJpbmdzIGFyZSBhbHJlYWR5IGVzdGFibGlzaGVkICovCisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1R4OyBpKyspIHsKKwkJZW5kT2ZSaW5nID0KKwkJICAgIHVnZXRoLT5wX3R4X2JkX3JpbmdbaV0gKyAodWdfaW5mby0+YmRSaW5nTGVuVHhbaV0gLQorCQkJCQkgICAgICAxKSAqIFVDQ19HRVRIX1NJWkVfT0ZfQkQ7CisJCWlmICh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5iZF9tZW1fcGFydCA9PSBNRU1fUEFSVF9TWVNURU0pIHsKKwkJCW91dF9iZTMyKCZ1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZy0+c3FxZFtpXS5iZF9yaW5nX2Jhc2UsCisJCQkJICh1MzIpIHZpcnRfdG9fcGh5cyh1Z2V0aC0+cF90eF9iZF9yaW5nW2ldKSk7CisJCQlvdXRfYmUzMigmdWdldGgtPnBfc2VuZF9xX21lbV9yZWctPnNxcWRbaV0uCisJCQkJIGxhc3RfYmRfY29tcGxldGVkX2FkZHJlc3MsCisJCQkJICh1MzIpIHZpcnRfdG9fcGh5cyhlbmRPZlJpbmcpKTsKKwkJfSBlbHNlIGlmICh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5iZF9tZW1fcGFydCA9PQorCQkJICAgTUVNX1BBUlRfTVVSQU0pIHsKKwkJCW91dF9iZTMyKCZ1Z2V0aC0+cF9zZW5kX3FfbWVtX3JlZy0+c3FxZFtpXS5iZF9yaW5nX2Jhc2UsCisJCQkJICh1MzIpIGltbXJiYXJfdmlydF90b19waHlzKHVnZXRoLT4KKwkJCQkJCQkgICAgcF90eF9iZF9yaW5nW2ldKSk7CisJCQlvdXRfYmUzMigmdWdldGgtPnBfc2VuZF9xX21lbV9yZWctPnNxcWRbaV0uCisJCQkJIGxhc3RfYmRfY29tcGxldGVkX2FkZHJlc3MsCisJCQkJICh1MzIpIGltbXJiYXJfdmlydF90b19waHlzKGVuZE9mUmluZykpOworCQl9CisJfQorCisJLyogc2NoZWR1bGVyYmFzZXBvaW50ZXIgKi8KKworCWlmICh1Z19pbmZvLT5udW1RdWV1ZXNUeCA+IDEpIHsKKwkvKiBzY2hlZHVsZXIgZXhpc3RzIG9ubHkgaWYgbW9yZSB0aGFuIDEgdHggcXVldWUgKi8KKwkJdWdldGgtPnNjaGVkdWxlcl9vZmZzZXQgPQorCQkgICAgcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHVjY19nZXRoX3NjaGVkdWxlcl90KSwKKwkJCQkgICBVQ0NfR0VUSF9TQ0hFRFVMRVJfQUxJR05NRU5UKTsKKwkJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+c2NoZWR1bGVyX29mZnNldCkpIHsKKwkJCXVnZXRoX2VycgorCQkJICgiJXM6IENhbiBub3QgYWxsb2NhdGUgRFBSQU0gbWVtb3J5IGZvciBwX3NjaGVkdWxlci4iLAorCQkJICAgICBfX0ZVTkNUSU9OX18pOworCQkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQl1Z2V0aC0+cF9zY2hlZHVsZXIgPQorCQkgICAgKHVjY19nZXRoX3NjaGVkdWxlcl90ICopIHFlX211cmFtX2FkZHIodWdldGgtPgorCQkJCQkJCSAgIHNjaGVkdWxlcl9vZmZzZXQpOworCQlvdXRfYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT5zY2hlZHVsZXJiYXNlcG9pbnRlciwKKwkJCSB1Z2V0aC0+c2NoZWR1bGVyX29mZnNldCk7CisJCS8qIFplcm8gb3V0IHBfc2NoZWR1bGVyICovCisJCW1lbXNldCh1Z2V0aC0+cF9zY2hlZHVsZXIsIDAsIHNpemVvZih1Y2NfZ2V0aF9zY2hlZHVsZXJfdCkpOworCisJCS8qIFNldCB2YWx1ZXMgaW4gc2NoZWR1bGVyICovCisJCW91dF9iZTMyKCZ1Z2V0aC0+cF9zY2hlZHVsZXItPm1ibGludGVydmFsLAorCQkJIHVnX2luZm8tPm1ibGludGVydmFsKTsKKwkJb3V0X2JlMTYoJnVnZXRoLT5wX3NjaGVkdWxlci0+bm9ydHNyYnl0ZXRpbWUsCisJCQkgdWdfaW5mby0+bm9ydHNyYnl0ZXRpbWUpOworCQl1Z2V0aC0+cF9zY2hlZHVsZXItPmZyYWNzaXogPSB1Z19pbmZvLT5mcmFjc2l6OworCQl1Z2V0aC0+cF9zY2hlZHVsZXItPnN0cmljdHByaW9yaXR5cSA9IHVnX2luZm8tPnN0cmljdHByaW9yaXR5cTsKKwkJdWdldGgtPnBfc2NoZWR1bGVyLT50eGFzYXAgPSB1Z19pbmZvLT50eGFzYXA7CisJCXVnZXRoLT5wX3NjaGVkdWxlci0+ZXh0cmFidyA9IHVnX2luZm8tPmV4dHJhYnc7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspCisJCQl1Z2V0aC0+cF9zY2hlZHVsZXItPndlaWdodGZhY3RvcltpXSA9CisJCQkgICAgdWdfaW5mby0+d2VpZ2h0ZmFjdG9yW2ldOworCisJCS8qIFNldCBwb2ludGVycyB0byBjcHVjb3VudCByZWdpc3RlcnMgaW4gc2NoZWR1bGVyICovCisJCXVnZXRoLT5wX2NwdWNvdW50WzBdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50MCk7CisJCXVnZXRoLT5wX2NwdWNvdW50WzFdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50MSk7CisJCXVnZXRoLT5wX2NwdWNvdW50WzJdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50Mik7CisJCXVnZXRoLT5wX2NwdWNvdW50WzNdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50Myk7CisJCXVnZXRoLT5wX2NwdWNvdW50WzRdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50NCk7CisJCXVnZXRoLT5wX2NwdWNvdW50WzVdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50NSk7CisJCXVnZXRoLT5wX2NwdWNvdW50WzZdID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50Nik7CisJCXVnZXRoLT5wX2NwdWNvdW50WzddID0gJih1Z2V0aC0+cF9zY2hlZHVsZXItPmNwdWNvdW50Nyk7CisJfQorCisJLyogc2NoZWR1bGVyYmFzZXBvaW50ZXIgKi8KKwkvKiBUeFJNT05fUFRSIChzdGF0aXN0aWNzKSAqLworCWlmICh1Z19pbmZvLT4KKwkgICAgc3RhdGlzdGljc01vZGUgJiBVQ0NfR0VUSF9TVEFUSVNUSUNTX0dBVEhFUklOR19NT0RFX0ZJUk1XQVJFX1RYKSB7CisJCXVnZXRoLT50eF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0ID0KKwkJICAgIHFlX211cmFtX2FsbG9jKHNpemVvZgorCQkJCSAgICh1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW1fdCksCisJCQkJICAgVUNDX0dFVEhfVFhfU1RBVElTVElDU19BTElHTk1FTlQpOworCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50eF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0KSkgeworCQkJdWdldGhfZXJyCisJCQkgICAgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIgorCQkJCSIgcF90eF9md19zdGF0aXN0aWNzX3ByYW0uIiwgX19GVU5DVElPTl9fKTsKKwkJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXVnZXRoLT5wX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9CisJCSAgICAodWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QgKikKKwkJICAgIHFlX211cmFtX2FkZHIodWdldGgtPnR4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQpOworCQkvKiBaZXJvIG91dCBwX3R4X2Z3X3N0YXRpc3RpY3NfcHJhbSAqLworCQltZW1zZXQodWdldGgtPnBfdHhfZndfc3RhdGlzdGljc19wcmFtLAorCQkgICAgICAgMCwgc2l6ZW9mKHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90KSk7CisJfQorCisJLyogdGVtb2RlciAqLworCS8qIEFscmVhZHkgaGFzIHNwZWVkIHNldCAqLworCisJaWYgKHVnX2luZm8tPm51bVF1ZXVlc1R4ID4gMSkKKwkJdGVtb2RlciB8PSBURU1PREVSX1NDSEVEVUxFUl9FTkFCTEU7CisJaWYgKHVnX2luZm8tPmlwQ2hlY2tTdW1HZW5lcmF0ZSkKKwkJdGVtb2RlciB8PSBURU1PREVSX0lQX0NIRUNLU1VNX0dFTkVSQVRFOworCXRlbW9kZXIgfD0gKCh1Z19pbmZvLT5udW1RdWV1ZXNUeCAtIDEpIDw8IFRFTU9ERVJfTlVNX09GX1FVRVVFU19TSElGVCk7CisJb3V0X2JlMTYoJnVnZXRoLT5wX3R4X2dsYmxfcHJhbS0+dGVtb2RlciwgdGVtb2Rlcik7CisKKwl0ZXN0ID0gaW5fYmUxNigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50ZW1vZGVyKTsKKworCS8qIEZ1bmN0aW9uIGNvZGUgcmVnaXN0ZXIgdmFsdWUgdG8gYmUgdXNlZCBsYXRlciAqLworCWZ1bmN0aW9uX2NvZGUgPSBRRV9CTVJfQllURV9PUkRFUl9CT19NT1QgfCBVQ0NfRkFTVF9GVU5DVElPTl9DT0RFX0dCTDsKKwkvKiBSZXF1aXJlZCBmb3IgUUUgKi8KKworCS8qIGZ1bmN0aW9uIGNvZGUgcmVnaXN0ZXIgKi8KKwlvdXRfYmUzMigmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50c3RhdGUsICgodTMyKSBmdW5jdGlvbl9jb2RlKSA8PCAyNCk7CisKKwkvKiBSeCBnbG9iYWwgUFJBTSAqLworCS8qIEFsbG9jYXRlIGdsb2JhbCByeCBwYXJhbWV0ZXIgUkFNIHBhZ2UgKi8KKwl1Z2V0aC0+cnhfZ2xibF9wcmFtX29mZnNldCA9CisJICAgIHFlX211cmFtX2FsbG9jKHNpemVvZih1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90KSwKKwkJCSAgIFVDQ19HRVRIX1JYX0dMT0JBTF9QUkFNX0FMSUdOTUVOVCk7CisJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+cnhfZ2xibF9wcmFtX29mZnNldCkpIHsKKwkJdWdldGhfZXJyCisJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF9yeF9nbGJsX3ByYW0uIiwKKwkJICAgICBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwl1Z2V0aC0+cF9yeF9nbGJsX3ByYW0gPQorCSAgICAodWNjX2dldGhfcnhfZ2xvYmFsX3ByYW1fdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJCQkJCQlyeF9nbGJsX3ByYW1fb2Zmc2V0KTsKKwkvKiBaZXJvIG91dCBwX3J4X2dsYmxfcHJhbSAqLworCW1lbXNldCh1Z2V0aC0+cF9yeF9nbGJsX3ByYW0sIDAsIHNpemVvZih1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90KSk7CisKKwkvKiBGaWxsIGdsb2JhbCBQUkFNICovCisKKwkvKiBSUVBUUiAqLworCS8qIFNpemUgdmFyaWVzIHdpdGggbnVtYmVyIG9mIFJ4IHRocmVhZHMgKi8KKwl1Z2V0aC0+dGhyZWFkX2RhdF9yeF9vZmZzZXQgPQorCSAgICBxZV9tdXJhbV9hbGxvYyhudW1UaHJlYWRzUnhOdW1lcmljYWwgKgorCQkJICAgc2l6ZW9mKHVjY19nZXRoX3RocmVhZF9kYXRhX3J4X3QpLAorCQkJICAgVUNDX0dFVEhfVEhSRUFEX0RBVEFfQUxJR05NRU5UKTsKKwlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT50aHJlYWRfZGF0X3J4X29mZnNldCkpIHsKKwkJdWdldGhfZXJyCisJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF90aHJlYWRfZGF0YV9yeC4iLAorCQkgICAgIF9fRlVOQ1RJT05fXyk7CisJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdWdldGgtPnBfdGhyZWFkX2RhdGFfcnggPQorCSAgICAodWNjX2dldGhfdGhyZWFkX2RhdGFfcnhfdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJCQkJCQl0aHJlYWRfZGF0X3J4X29mZnNldCk7CisJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnFwdHIsIHVnZXRoLT50aHJlYWRfZGF0X3J4X29mZnNldCk7CisKKwkvKiB0eXBlb3JsZW4gKi8KKwlvdXRfYmUxNigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT50eXBlb3JsZW4sIHVnX2luZm8tPnR5cGVvcmxlbik7CisKKwkvKiByeHJtb25iYXNlcHRyIChzdGF0aXN0aWNzKSAqLworCWlmICh1Z19pbmZvLT4KKwkgICAgc3RhdGlzdGljc01vZGUgJiBVQ0NfR0VUSF9TVEFUSVNUSUNTX0dBVEhFUklOR19NT0RFX0ZJUk1XQVJFX1JYKSB7CisJCXVnZXRoLT5yeF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0ID0KKwkJICAgIHFlX211cmFtX2FsbG9jKHNpemVvZgorCQkJCSAgICh1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW1fdCksCisJCQkJICAgVUNDX0dFVEhfUlhfU1RBVElTVElDU19BTElHTk1FTlQpOworCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5yeF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0KSkgeworCQkJdWdldGhfZXJyCisJCQkJKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIgorCQkJCSIgcF9yeF9md19zdGF0aXN0aWNzX3ByYW0uIiwgX19GVU5DVElPTl9fKTsKKwkJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXVnZXRoLT5wX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSA9CisJCSAgICAodWNjX2dldGhfcnhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QgKikKKwkJICAgIHFlX211cmFtX2FkZHIodWdldGgtPnJ4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQpOworCQkvKiBaZXJvIG91dCBwX3J4X2Z3X3N0YXRpc3RpY3NfcHJhbSAqLworCQltZW1zZXQodWdldGgtPnBfcnhfZndfc3RhdGlzdGljc19wcmFtLCAwLAorCQkgICAgICAgc2l6ZW9mKHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90KSk7CisJfQorCisJLyogaW50Q29hbGVzY2luZ1B0ciAqLworCisJLyogU2l6ZSB2YXJpZXMgd2l0aCBudW1iZXIgb2YgUnggcXVldWVzICovCisJdWdldGgtPnJ4X2lycV9jb2FsZXNjaW5nX3RibF9vZmZzZXQgPQorCSAgICBxZV9tdXJhbV9hbGxvYyh1Z19pbmZvLT5udW1RdWV1ZXNSeCAqCisJCQkgICBzaXplb2YodWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfZW50cnlfdCksCisJCQkgICBVQ0NfR0VUSF9SWF9JTlRFUlJVUFRfQ09BTEVTQ0lOR19BTElHTk1FTlQpOworCWlmIChJU19NVVJBTV9FUlIodWdldGgtPnJ4X2lycV9jb2FsZXNjaW5nX3RibF9vZmZzZXQpKSB7CisJCXVnZXRoX2VycgorCQkgICAgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIgorCQkJIiBwX3J4X2lycV9jb2FsZXNjaW5nX3RibC4iLCBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVnZXRoLT5wX3J4X2lycV9jb2FsZXNjaW5nX3RibCA9CisJICAgICh1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ190YWJsZV90ICopCisJICAgIHFlX211cmFtX2FkZHIodWdldGgtPnJ4X2lycV9jb2FsZXNjaW5nX3RibF9vZmZzZXQpOworCW91dF9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmludGNvYWxlc2NpbmdwdHIsCisJCSB1Z2V0aC0+cnhfaXJxX2NvYWxlc2NpbmdfdGJsX29mZnNldCk7CisKKwkvKiBGaWxsIGludGVycnVwdCBjb2FsZXNjaW5nIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1J4OyBpKyspIHsKKwkJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2lycV9jb2FsZXNjaW5nX3RibC0+Y29hbGVzY2luZ2VudHJ5W2ldLgorCQkJIGludGVycnVwdGNvYWxlc2NpbmdtYXh2YWx1ZSwKKwkJCSB1Z19pbmZvLT5pbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWVbaV0pOworCQlvdXRfYmUzMigmdWdldGgtPnBfcnhfaXJxX2NvYWxlc2NpbmdfdGJsLT5jb2FsZXNjaW5nZW50cnlbaV0uCisJCQkgaW50ZXJydXB0Y29hbGVzY2luZ2NvdW50ZXIsCisJCQkgdWdfaW5mby0+aW50ZXJydXB0Y29hbGVzY2luZ21heHZhbHVlW2ldKTsKKwl9CisKKwkvKiBNUkJMUiAqLworCWluaXRfbWF4X3J4X2J1ZmZfbGVuKHVmX2luZm8tPm1heF9yeF9idWZfbGVuZ3RoLAorCQkJICAgICAmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5tcmJscik7CisJLyogTUZMUiAqLworCW91dF9iZTE2KCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPm1mbHIsIHVnX2luZm8tPm1heEZyYW1lTGVuZ3RoKTsKKwkvKiBNSU5GTFIgKi8KKwlpbml0X21pbl9mcmFtZV9sZW4odWdfaW5mby0+bWluRnJhbWVMZW5ndGgsCisJCQkgICAmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5taW5mbHIsCisJCQkgICAmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5tcmJscik7CisJLyogTUFYRDEgKi8KKwlvdXRfYmUxNigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5tYXhkMSwgdWdfaW5mby0+bWF4RDFMZW5ndGgpOworCS8qIE1BWEQyICovCisJb3V0X2JlMTYoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+bWF4ZDIsIHVnX2luZm8tPm1heEQyTGVuZ3RoKTsKKworCS8qIGwycXQgKi8KKwlsMnF0ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgVUNDX0dFVEhfVkxBTl9QUklPUklUWV9NQVg7IGkrKykKKwkJbDJxdCB8PSAodWdfaW5mby0+bDJxdFtpXSA8PCAoMjggLSA0ICogaSkpOworCW91dF9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwycXQsIGwycXQpOworCisJLyogbDNxdCAqLworCWZvciAoaiA9IDA7IGogPCBVQ0NfR0VUSF9JUF9QUklPUklUWV9NQVg7IGogKz0gOCkgeworCQlsM3F0ID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJCWwzcXQgfD0gKHVnX2luZm8tPmwzcXRbaiArIGldIDw8ICgyOCAtIDQgKiBpKSk7CisJCW91dF9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPmwzcXRbal0sIGwzcXQpOworCX0KKworCS8qIHZsYW50eXBlICovCisJb3V0X2JlMTYoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+dmxhbnR5cGUsIHVnX2luZm8tPnZsYW50eXBlKTsKKworCS8qIHZsYW50Y2kgKi8KKwlvdXRfYmUxNigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT52bGFudGNpLCB1Z19pbmZvLT52bGFudGNpKTsKKworCS8qIGVjYW1wdHIgKi8KKwlvdXRfYmUzMigmdWdldGgtPnBfcnhfZ2xibF9wcmFtLT5lY2FtcHRyLCB1Z19pbmZvLT5lY2FtcHRyKTsKKworCS8qIFJCRFFQVFIgKi8KKwkvKiBTaXplIHZhcmllcyB3aXRoIG51bWJlciBvZiBSeCBxdWV1ZXMgKi8KKwl1Z2V0aC0+cnhfYmRfcXNfdGJsX29mZnNldCA9CisJICAgIHFlX211cmFtX2FsbG9jKHVnX2luZm8tPm51bVF1ZXVlc1J4ICoKKwkJCSAgIChzaXplb2YodWNjX2dldGhfcnhfYmRfcXVldWVzX2VudHJ5X3QpICsKKwkJCSAgICBzaXplb2YodWNjX2dldGhfcnhfcHJlZmV0Y2hlZF9iZHNfdCkpLAorCQkJICAgVUNDX0dFVEhfUlhfQkRfUVVFVUVTX0FMSUdOTUVOVCk7CisJaWYgKElTX01VUkFNX0VSUih1Z2V0aC0+cnhfYmRfcXNfdGJsX29mZnNldCkpIHsKKwkJdWdldGhfZXJyCisJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IgcF9yeF9iZF9xc190YmwuIiwKKwkJICAgICBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXVnZXRoLT5wX3J4X2JkX3FzX3RibCA9CisJICAgICh1Y2NfZ2V0aF9yeF9iZF9xdWV1ZXNfZW50cnlfdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJCQkgICAgcnhfYmRfcXNfdGJsX29mZnNldCk7CisJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cmJkcXB0ciwgdWdldGgtPnJ4X2JkX3FzX3RibF9vZmZzZXQpOworCS8qIFplcm8gb3V0IHBfcnhfYmRfcXNfdGJsICovCisJbWVtc2V0KHVnZXRoLT5wX3J4X2JkX3FzX3RibCwKKwkgICAgICAgMCwKKwkgICAgICAgdWdfaW5mby0+bnVtUXVldWVzUnggKiAoc2l6ZW9mKHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeV90KSArCisJCQkJICAgICAgIHNpemVvZih1Y2NfZ2V0aF9yeF9wcmVmZXRjaGVkX2Jkc190KSkpOworCisJLyogU2V0dXAgdGhlIHRhYmxlICovCisJLyogQXNzdW1lIEJEIHJpbmdzIGFyZSBhbHJlYWR5IGVzdGFibGlzaGVkICovCisJZm9yIChpID0gMDsgaSA8IHVnX2luZm8tPm51bVF1ZXVlc1J4OyBpKyspIHsKKwkJaWYgKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLmJkX21lbV9wYXJ0ID09IE1FTV9QQVJUX1NZU1RFTSkgeworCQkJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2JkX3FzX3RibFtpXS5leHRlcm5hbGJkYmFzZXB0ciwKKwkJCQkgKHUzMikgdmlydF90b19waHlzKHVnZXRoLT5wX3J4X2JkX3JpbmdbaV0pKTsKKwkJfSBlbHNlIGlmICh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby5iZF9tZW1fcGFydCA9PQorCQkJICAgTUVNX1BBUlRfTVVSQU0pIHsKKwkJCW91dF9iZTMyKCZ1Z2V0aC0+cF9yeF9iZF9xc190YmxbaV0uZXh0ZXJuYWxiZGJhc2VwdHIsCisJCQkJICh1MzIpIGltbXJiYXJfdmlydF90b19waHlzKHVnZXRoLT4KKwkJCQkJCQkgICAgcF9yeF9iZF9yaW5nW2ldKSk7CisJCX0KKwkJLyogcmVzdCBvZiBmaWVsZHMgaGFuZGxlZCBieSBRRSAqLworCX0KKworCS8qIHJlbW9kZXIgKi8KKwkvKiBBbHJlYWR5IGhhcyBzcGVlZCBzZXQgKi8KKworCWlmICh1Z2V0aC0+cnhfZXh0ZW5kZWRfZmVhdHVyZXMpCisJCXJlbW9kZXIgfD0gUkVNT0RFUl9SWF9FWFRFTkRFRF9GRUFUVVJFUzsKKwlpZiAodWdfaW5mby0+cnhFeHRlbmRlZEZpbHRlcmluZykKKwkJcmVtb2RlciB8PSBSRU1PREVSX1JYX0VYVEVOREVEX0ZJTFRFUklORzsKKwlpZiAodWdfaW5mby0+ZHluYW1pY01heEZyYW1lTGVuZ3RoKQorCQlyZW1vZGVyIHw9IFJFTU9ERVJfRFlOQU1JQ19NQVhfRlJBTUVfTEVOR1RIOworCWlmICh1Z19pbmZvLT5keW5hbWljTWluRnJhbWVMZW5ndGgpCisJCXJlbW9kZXIgfD0gUkVNT0RFUl9EWU5BTUlDX01JTl9GUkFNRV9MRU5HVEg7CisJcmVtb2RlciB8PQorCSAgICB1Z19pbmZvLT52bGFuT3BlcmF0aW9uVGFnZ2VkIDw8IFJFTU9ERVJfVkxBTl9PUEVSQVRJT05fVEFHR0VEX1NISUZUOworCXJlbW9kZXIgfD0KKwkgICAgdWdfaW5mby0+CisJICAgIHZsYW5PcGVyYXRpb25Ob25UYWdnZWQgPDwgUkVNT0RFUl9WTEFOX09QRVJBVElPTl9OT05fVEFHR0VEX1NISUZUOworCXJlbW9kZXIgfD0gdWdfaW5mby0+cnhRb1NNb2RlIDw8IFJFTU9ERVJfUlhfUU9TX01PREVfU0hJRlQ7CisJcmVtb2RlciB8PSAoKHVnX2luZm8tPm51bVF1ZXVlc1J4IC0gMSkgPDwgUkVNT0RFUl9OVU1fT0ZfUVVFVUVTX1NISUZUKTsKKwlpZiAodWdfaW5mby0+aXBDaGVja1N1bUNoZWNrKQorCQlyZW1vZGVyIHw9IFJFTU9ERVJfSVBfQ0hFQ0tTVU1fQ0hFQ0s7CisJaWYgKHVnX2luZm8tPmlwQWRkcmVzc0FsaWdubWVudCkKKwkJcmVtb2RlciB8PSBSRU1PREVSX0lQX0FERFJFU1NfQUxJR05NRU5UOworCW91dF9iZTMyKCZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJlbW9kZXIsIHJlbW9kZXIpOworCisJLyogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgKi8KKwkvKiBPTkxZIEFGVEVSIHBfdHhfZndfc3RhdGlzdGljc19wcmFtICovCisJLyogYW5kcF9VY2NHZXRoUnhGaXJtd2FyZVN0YXRpc3RpY3NQcmFtIGFyZSBhbGxvY2F0ZWQgISAqLworCWluaXRfZmlybXdhcmVfc3RhdGlzdGljc19nYXRoZXJpbmdfbW9kZSgodWdfaW5mby0+CisJCXN0YXRpc3RpY3NNb2RlICYKKwkJVUNDX0dFVEhfU1RBVElTVElDU19HQVRIRVJJTkdfTU9ERV9GSVJNV0FSRV9UWCksCisJCSh1Z19pbmZvLT5zdGF0aXN0aWNzTW9kZSAmCisJCVVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfRklSTVdBUkVfUlgpLAorCQkmdWdldGgtPnBfdHhfZ2xibF9wcmFtLT50eHJtb25iYXNlcHRyLAorCQl1Z2V0aC0+dHhfZndfc3RhdGlzdGljc19wcmFtX29mZnNldCwKKwkJJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnhybW9uYmFzZXB0ciwKKwkJdWdldGgtPnJ4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQsCisJCSZ1Z2V0aC0+cF90eF9nbGJsX3ByYW0tPnRlbW9kZXIsCisJCSZ1Z2V0aC0+cF9yeF9nbGJsX3ByYW0tPnJlbW9kZXIpOworCisJLyogZnVuY3Rpb24gY29kZSByZWdpc3RlciAqLworCXVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+cnN0YXRlID0gZnVuY3Rpb25fY29kZTsKKworCS8qIGluaXRpYWxpemUgZXh0ZW5kZWQgZmlsdGVyaW5nICovCisJaWYgKHVnX2luZm8tPnJ4RXh0ZW5kZWRGaWx0ZXJpbmcpIHsKKwkJaWYgKCF1Z19pbmZvLT5leHRlbmRlZEZpbHRlcmluZ0NoYWluUG9pbnRlcikgeworCQkJdWdldGhfZXJyKCIlczogTnVsbCBFeHRlbmRlZCBGaWx0ZXJpbmcgQ2hhaW4gUG9pbnRlci4iLAorCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBleHRlbmRlZCBmaWx0ZXJpbmcgTW9kZSBHbG9iYWwKKwkJUGFyYW1ldGVycyAqLworCQl1Z2V0aC0+ZXhmX2dsYmxfcGFyYW1fb2Zmc2V0ID0KKwkJICAgIHFlX211cmFtX2FsbG9jKHNpemVvZih1Y2NfZ2V0aF9leGZfZ2xvYmFsX3ByYW1fdCksCisJCVVDQ19HRVRIX1JYX0VYVEVOREVEX0ZJTFRFUklOR19HTE9CQUxfUEFSQU1FVEVSU19BTElHTk1FTlQpOworCQlpZiAoSVNfTVVSQU1fRVJSKHVnZXRoLT5leGZfZ2xibF9wYXJhbV9vZmZzZXQpKSB7CisJCQl1Z2V0aF9lcnIKKwkJCQkoIiVzOiBDYW4gbm90IGFsbG9jYXRlIERQUkFNIG1lbW9yeSBmb3IiCisJCQkJIiBwX2V4Zl9nbGJsX3BhcmFtLiIsIF9fRlVOQ1RJT05fXyk7CisJCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCisJCXVnZXRoLT5wX2V4Zl9nbGJsX3BhcmFtID0KKwkJICAgICh1Y2NfZ2V0aF9leGZfZ2xvYmFsX3ByYW1fdCAqKSBxZV9tdXJhbV9hZGRyKHVnZXRoLT4KKwkJCQkgZXhmX2dsYmxfcGFyYW1fb2Zmc2V0KTsKKwkJb3V0X2JlMzIoJnVnZXRoLT5wX3J4X2dsYmxfcHJhbS0+ZXhmR2xvYmFsUGFyYW0sCisJCQkgdWdldGgtPmV4Zl9nbGJsX3BhcmFtX29mZnNldCk7CisJCW91dF9iZTMyKCZ1Z2V0aC0+cF9leGZfZ2xibF9wYXJhbS0+bDJwY2RwdHIsCisJCQkgKHUzMikgdWdfaW5mby0+ZXh0ZW5kZWRGaWx0ZXJpbmdDaGFpblBvaW50ZXIpOworCisJfSBlbHNlIHsJCS8qIGluaXRpYWxpemUgODJ4eCBzdHlsZSBhZGRyZXNzIGZpbHRlcmluZyAqLworCisJCS8qIEluaXQgaW5kaXZpZHVhbCBhZGRyZXNzIHJlY29nbml0aW9uIHJlZ2lzdGVycyB0byBkaXNhYmxlZCAqLworCisJCWZvciAoaiA9IDA7IGogPCBOVU1fT0ZfUEFERFJTOyBqKyspCisJCQl1Z2V0aF84Mnh4X2ZpbHRlcmluZ19jbGVhcl9hZGRyX2luX3BhZGRyKHVnZXRoLCAodTgpIGopOworCisJCS8qIENyZWF0ZSBDUXMgZm9yIGhhc2ggdGFibGVzICovCisJCWlmICh1Z19pbmZvLT5tYXhHcm91cEFkZHJJbkhhc2ggPiAwKSB7CisJCQlJTklUX0xJU1RfSEVBRCgmdWdldGgtPmdyb3VwX2hhc2hfcSk7CisJCX0KKwkJaWYgKHVnX2luZm8tPm1heEluZEFkZHJJbkhhc2ggPiAwKSB7CisJCQlJTklUX0xJU1RfSEVBRCgmdWdldGgtPmluZF9oYXNoX3EpOworCQl9CisJCXBfODJ4eF9hZGRyX2ZpbHQgPQorCQkgICAgKHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbV90ICopIHVnZXRoLT4KKwkJICAgIHBfcnhfZ2xibF9wcmFtLT5hZGRyZXNzZmlsdGVyaW5nOworCisJCXVnZXRoXzgyeHhfZmlsdGVyaW5nX2NsZWFyX2FsbF9hZGRyX2luX2hhc2godWdldGgsCisJCQlFTkVUX0FERFJfVFlQRV9HUk9VUCk7CisJCXVnZXRoXzgyeHhfZmlsdGVyaW5nX2NsZWFyX2FsbF9hZGRyX2luX2hhc2godWdldGgsCisJCQlFTkVUX0FERFJfVFlQRV9JTkRJVklEVUFMKTsKKwl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgVUNDIGF0IFFFIGxldmVsCisJICovCisKKwljb21tYW5kID0gUUVfSU5JVF9UWF9SWDsKKworCS8qIEFsbG9jYXRlIHNoYWRvdyBJbml0RW5ldCBjb21tYW5kIHBhcmFtZXRlciBzdHJ1Y3R1cmUuCisJICogVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBhZnRlciB0aGUgSW5pdEVuZXQgY29tbWFuZCBpcyBleGVjdXRlZCwKKwkgKiB0aGUgc3RydWN0dXJlIGluIERQUkFNIGlzIHJlbGVhc2VkLCBiZWNhdXNlIERQUkFNIGlzIGEgcHJlbWl1bQorCSAqIHJlc291cmNlLgorCSAqIFRoaXMgc2hhZG93IHN0cnVjdHVyZSBrZWVwcyBhIGNvcHkgb2Ygd2hhdCB3YXMgZG9uZSBzbyB0aGF0IHRoZQorCSAqIGFsbG9jYXRlZCByZXNvdXJjZXMgY2FuIGJlIHJlbGVhc2VkIHdoZW4gdGhlIGNoYW5uZWwgaXMgZnJlZWQuCisJICovCisJaWYgKCEodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdyA9CisJICAgICAodWNjX2dldGhfaW5pdF9wcmFtX3QgKikga21hbGxvYyhzaXplb2YodWNjX2dldGhfaW5pdF9wcmFtX3QpLAorCQkJCQkgICAgICBHRlBfS0VSTkVMKSkpIHsKKwkJdWdldGhfZXJyCisJCSAgICAoIiVzOiBDYW4gbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IiCisJCQkiIHBfVWNjSW5pdEVuZXRQYXJhbVNoYWRvd3MuIiwgX19GVU5DVElPTl9fKTsKKwkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJLyogWmVybyBvdXQgKnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdyAqLworCW1lbXNldCgoY2hhciAqKXVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3csCisJICAgICAgIDAsIHNpemVvZih1Y2NfZ2V0aF9pbml0X3ByYW1fdCkpOworCisJLyogRmlsbCBzaGFkb3cgSW5pdEVuZXQgY29tbWFuZCBwYXJhbWV0ZXIgc3RydWN0dXJlICovCisKKwl1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LT5yZXNpbml0MSA9CisJICAgIEVORVRfSU5JVF9QQVJBTV9NQUdJQ19SRVNfSU5JVDE7CisJdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+cmVzaW5pdDIgPQorCSAgICBFTkVUX0lOSVRfUEFSQU1fTUFHSUNfUkVTX0lOSVQyOworCXVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJlc2luaXQzID0KKwkgICAgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUMzsKKwl1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LT5yZXNpbml0NCA9CisJICAgIEVORVRfSU5JVF9QQVJBTV9NQUdJQ19SRVNfSU5JVDQ7CisJdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+cmVzaW5pdDUgPQorCSAgICBFTkVUX0lOSVRfUEFSQU1fTUFHSUNfUkVTX0lOSVQ1OworCXVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJnZnRnZnJ4Z2xvYmFsIHw9CisJICAgICgodTMyKSB1Z19pbmZvLT5udW1UaHJlYWRzUngpIDw8IEVORVRfSU5JVF9QQVJBTV9SR0ZfU0hJRlQ7CisJdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+cmdmdGdmcnhnbG9iYWwgfD0KKwkgICAgKCh1MzIpIHVnX2luZm8tPm51bVRocmVhZHNUeCkgPDwgRU5FVF9JTklUX1BBUkFNX1RHRl9TSElGVDsKKworCXVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJnZnRnZnJ4Z2xvYmFsIHw9CisJICAgIHVnZXRoLT5yeF9nbGJsX3ByYW1fb2Zmc2V0IHwgdWdfaW5mby0+cmlzY1J4OworCWlmICgodWdfaW5mby0+bGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZSAhPQorCSAgICAgUUVfRkxUUl9MQVJHRVNUX0VYVEVSTkFMX1RBQkxFX0xPT0tVUF9LRVlfU0laRV9OT05FKQorCSAgICAmJiAodWdfaW5mby0+bGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZSAhPQorCQlRRV9GTFRSX0xBUkdFU1RfRVhURVJOQUxfVEFCTEVfTE9PS1VQX0tFWV9TSVpFXzhfQllURVMpCisJICAgICYmICh1Z19pbmZvLT5sYXJnZXN0ZXh0ZXJuYWxsb29rdXBrZXlzaXplICE9CisJCVFFX0ZMVFJfTEFSR0VTVF9FWFRFUk5BTF9UQUJMRV9MT09LVVBfS0VZX1NJWkVfMTZfQllURVMpKSB7CisJCXVnZXRoX2VycigiJXM6IEludmFsaWQgbGFyZ2VzdCBFeHRlcm5hbCBMb29rdXAgS2V5IFNpemUuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+bGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZSA9CisJICAgIHVnX2luZm8tPmxhcmdlc3RleHRlcm5hbGxvb2t1cGtleXNpemU7CisJc2l6ZSA9IHNpemVvZih1Y2NfZ2V0aF90aHJlYWRfcnhfcHJhbV90KTsKKwlpZiAodWdfaW5mby0+cnhFeHRlbmRlZEZpbHRlcmluZykgeworCQlzaXplICs9IFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklORzsKKwkJaWYgKHVnX2luZm8tPmxhcmdlc3RleHRlcm5hbGxvb2t1cGtleXNpemUgPT0KKwkJICAgIFFFX0ZMVFJfVEFCTEVfTE9PS1VQX0tFWV9TSVpFXzhfQllURVMpCisJCQlzaXplICs9CisJCQkgICAgVEhSRUFEX1JYX1BSQU1fQURESVRJT05BTF9GT1JfRVhURU5ERURfRklMVEVSSU5HXzg7CisJCWlmICh1Z19pbmZvLT5sYXJnZXN0ZXh0ZXJuYWxsb29rdXBrZXlzaXplID09CisJCSAgICBRRV9GTFRSX1RBQkxFX0xPT0tVUF9LRVlfU0laRV8xNl9CWVRFUykKKwkJCXNpemUgKz0KKwkJCSAgICBUSFJFQURfUlhfUFJBTV9BRERJVElPTkFMX0ZPUl9FWFRFTkRFRF9GSUxURVJJTkdfMTY7CisJfQorCisJaWYgKChyZXRfdmFsID0gZmlsbF9pbml0X2VuZXRfZW50cmllcyh1Z2V0aCwgJih1Z2V0aC0+CisJCXBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+cnh0aHJlYWRbMF0pLAorCQkodTgpIChudW1UaHJlYWRzUnhOdW1lcmljYWwgKyAxKQorCQkvKiBSeCBuZWVkcyBvbmUgZXh0cmEgZm9yIHRlcm1pbmF0b3IgKi8KKwkJLCBzaXplLCBVQ0NfR0VUSF9USFJFQURfUlhfUFJBTV9BTElHTk1FTlQsCisJCXVnX2luZm8tPnJpc2NSeCwgMSkpICE9IDApIHsKKwkJCXVnZXRoX2VycigiJXM6IENhbiBub3QgZmlsbCBwX2luaXRfZW5ldF9wYXJhbV9zaGFkb3cuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiByZXRfdmFsOworCX0KKworCXVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnR4Z2xvYmFsID0KKwkgICAgdWdldGgtPnR4X2dsYmxfcHJhbV9vZmZzZXQgfCB1Z19pbmZvLT5yaXNjVHg7CisJaWYgKChyZXRfdmFsID0KKwkgICAgIGZpbGxfaW5pdF9lbmV0X2VudHJpZXModWdldGgsCisJCQkJICAgICYodWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+CisJCQkJICAgICAgdHh0aHJlYWRbMF0pLCBudW1UaHJlYWRzVHhOdW1lcmljYWwsCisJCQkJICAgIHNpemVvZih1Y2NfZ2V0aF90aHJlYWRfdHhfcHJhbV90KSwKKwkJCQkgICAgVUNDX0dFVEhfVEhSRUFEX1RYX1BSQU1fQUxJR05NRU5ULAorCQkJCSAgICB1Z19pbmZvLT5yaXNjVHgsIDApKSAhPSAwKSB7CisJCXVnZXRoX2VycigiJXM6IENhbiBub3QgZmlsbCBwX2luaXRfZW5ldF9wYXJhbV9zaGFkb3cuIiwKKwkJCSAgX19GVU5DVElPTl9fKTsKKwkJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCQlyZXR1cm4gcmV0X3ZhbDsKKwl9CisKKwkvKiBMb2FkIFJ4IGJkcyB3aXRoIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgeworCQlpZiAoKHJldF92YWwgPSByeF9iZF9idWZmZXJfc2V0KHVnZXRoLCAodTgpIGkpKSAhPSAwKSB7CisJCQl1Z2V0aF9lcnIoIiVzOiBDYW4gbm90IGZpbGwgUnggYmRzIHdpdGggYnVmZmVycy4iLAorCQkJCSAgX19GVU5DVElPTl9fKTsKKwkJCXVjY19nZXRoX21lbWNsZWFuKHVnZXRoKTsKKwkJCXJldHVybiByZXRfdmFsOworCQl9CisJfQorCisJLyogQWxsb2NhdGUgSW5pdEVuZXQgY29tbWFuZCBwYXJhbWV0ZXIgc3RydWN0dXJlICovCisJaW5pdF9lbmV0X3ByYW1fb2Zmc2V0ID0gcWVfbXVyYW1fYWxsb2Moc2l6ZW9mKHVjY19nZXRoX2luaXRfcHJhbV90KSwgNCk7CisJaWYgKElTX01VUkFNX0VSUihpbml0X2VuZXRfcHJhbV9vZmZzZXQpKSB7CisJCXVnZXRoX2VycgorCQkgICAgKCIlczogQ2FuIG5vdCBhbGxvY2F0ZSBEUFJBTSBtZW1vcnkgZm9yIHBfaW5pdF9lbmV0X3ByYW0uIiwKKwkJICAgICBfX0ZVTkNUSU9OX18pOworCQl1Y2NfZ2V0aF9tZW1jbGVhbih1Z2V0aCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwX2luaXRfZW5ldF9wcmFtID0KKwkgICAgKHVjY19nZXRoX2luaXRfcHJhbV90ICopIHFlX211cmFtX2FkZHIoaW5pdF9lbmV0X3ByYW1fb2Zmc2V0KTsKKworCS8qIENvcHkgc2hhZG93IEluaXRFbmV0IGNvbW1hbmQgcGFyYW1ldGVyIHN0cnVjdHVyZSBpbnRvIFBSQU0gKi8KKwlwX2luaXRfZW5ldF9wcmFtLT5yZXNpbml0MSA9IHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJlc2luaXQxOworCXBfaW5pdF9lbmV0X3ByYW0tPnJlc2luaXQyID0gdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+cmVzaW5pdDI7CisJcF9pbml0X2VuZXRfcHJhbS0+cmVzaW5pdDMgPSB1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LT5yZXNpbml0MzsKKwlwX2luaXRfZW5ldF9wcmFtLT5yZXNpbml0NCA9IHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJlc2luaXQ0OworCW91dF9iZTE2KCZwX2luaXRfZW5ldF9wcmFtLT5yZXNpbml0NSwKKwkJIHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnJlc2luaXQ1KTsKKwlwX2luaXRfZW5ldF9wcmFtLT5sYXJnZXN0ZXh0ZXJuYWxsb29rdXBrZXlzaXplID0KKwkgICAgdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+bGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZTsKKwlvdXRfYmUzMigmcF9pbml0X2VuZXRfcHJhbS0+cmdmdGdmcnhnbG9iYWwsCisJCSB1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LT5yZ2Z0Z2ZyeGdsb2JhbCk7CisJZm9yIChpID0gMDsgaSA8IEVORVRfSU5JVF9QQVJBTV9NQVhfRU5UUklFU19SWDsgaSsrKQorCQlvdXRfYmUzMigmcF9pbml0X2VuZXRfcHJhbS0+cnh0aHJlYWRbaV0sCisJCQkgdWdldGgtPnBfaW5pdF9lbmV0X3BhcmFtX3NoYWRvdy0+cnh0aHJlYWRbaV0pOworCW91dF9iZTMyKCZwX2luaXRfZW5ldF9wcmFtLT50eGdsb2JhbCwKKwkJIHVnZXRoLT5wX2luaXRfZW5ldF9wYXJhbV9zaGFkb3ctPnR4Z2xvYmFsKTsKKwlmb3IgKGkgPSAwOyBpIDwgRU5FVF9JTklUX1BBUkFNX01BWF9FTlRSSUVTX1RYOyBpKyspCisJCW91dF9iZTMyKCZwX2luaXRfZW5ldF9wcmFtLT50eHRocmVhZFtpXSwKKwkJCSB1Z2V0aC0+cF9pbml0X2VuZXRfcGFyYW1fc2hhZG93LT50eHRocmVhZFtpXSk7CisKKwkvKiBJc3N1ZSBRRSBjb21tYW5kICovCisJY2Vjcl9zdWJibG9jayA9CisJICAgIHVjY19mYXN0X2dldF9xZV9jcl9zdWJibG9jayh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKwlxZV9pc3N1ZV9jbWQoY29tbWFuZCwgY2Vjcl9zdWJibG9jaywgKHU4KSBRRV9DUl9QUk9UT0NPTF9FVEhFUk5FVCwKKwkJICAgICBpbml0X2VuZXRfcHJhbV9vZmZzZXQpOworCisJLyogRnJlZSBJbml0RW5ldCBjb21tYW5kIHBhcmFtZXRlciAqLworCXFlX211cmFtX2ZyZWUoaW5pdF9lbmV0X3ByYW1fb2Zmc2V0KTsKKworCXJldHVybiAwOworfQorCisvKiByZXR1cm5zIGEgbmV0X2RldmljZV9zdGF0cyBzdHJ1Y3R1cmUgcG9pbnRlciAqLworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICp1Y2NfZ2V0aF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiAmKHVnZXRoLT5zdGF0cyk7Cit9CisKKy8qIHVjY19nZXRoX3RpbWVvdXQgZ2V0cyBjYWxsZWQgd2hlbiBhIHBhY2tldCBoYXMgbm90IGJlZW4KKyAqIHRyYW5zbWl0dGVkIGFmdGVyIGEgc2V0IGFtb3VudCBvZiB0aW1lLgorICogRm9yIG5vdywgYXNzdW1lIHRoYXQgY2xlYXJpbmcgb3V0IGFsbCB0aGUgc3RydWN0dXJlcywgYW5kCisgKiBzdGFydGluZyBvdmVyIHdpbGwgZml4IHRoZSBwcm9ibGVtLiAqLworc3RhdGljIHZvaWQgdWNjX2dldGhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCXVnZXRoLT5zdGF0cy50eF9lcnJvcnMrKzsKKworCXVnZXRoX2R1bXBfcmVncyh1Z2V0aCk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCkgeworCQl1Y2NfZ2V0aF9zdG9wKHVnZXRoKTsKKwkJdWNjX2dldGhfc3RhcnR1cCh1Z2V0aCk7CisJfQorCisJbmV0aWZfc2NoZWR1bGUoZGV2KTsKK30KKworLyogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIGtlcm5lbCB3aGVuIGEgZnJhbWUgaXMgcmVhZHkgZm9yIHRyYW5zbWlzc2lvbi4gKi8KKy8qIEl0IGlzIHBvaW50ZWQgdG8gYnkgdGhlIGRldi0+aGFyZF9zdGFydF94bWl0IGZ1bmN0aW9uIHBvaW50ZXIgKi8KK3N0YXRpYyBpbnQgdWNjX2dldGhfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXU4ICpiZDsJCQkvKiBCRCBwb2ludGVyICovCisJdTMyIGJkX3N0YXR1czsKKwl1OCB0eFEgPSAwOworCisJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnEoJnVnZXRoLT5sb2NrKTsKKworCXVnZXRoLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKKworCS8qIFN0YXJ0IGZyb20gdGhlIG5leHQgQkQgdGhhdCBzaG91bGQgYmUgZmlsbGVkICovCisJYmQgPSB1Z2V0aC0+dHhCZFt0eFFdOworCWJkX3N0YXR1cyA9IEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKTsKKwkvKiBTYXZlIHRoZSBza2IgcG9pbnRlciBzbyB3ZSBjYW4gZnJlZSBpdCBsYXRlciAqLworCXVnZXRoLT50eF9za2J1ZmZbdHhRXVt1Z2V0aC0+c2tiX2N1cnR4W3R4UV1dID0gc2tiOworCisJLyogVXBkYXRlIHRoZSBjdXJyZW50IHNrYiBwb2ludGVyICh3cmFwcGluZyBpZiB0aGlzIHdhcyB0aGUgbGFzdCkgKi8KKwl1Z2V0aC0+c2tiX2N1cnR4W3R4UV0gPQorCSAgICAodWdldGgtPnNrYl9jdXJ0eFt0eFFdICsKKwkgICAgIDEpICYgVFhfUklOR19NT0RfTUFTSyh1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuVHhbdHhRXSk7CisKKwkvKiBzZXQgdXAgdGhlIGJ1ZmZlciBkZXNjcmlwdG9yICovCisJQkRfQlVGRkVSX1NFVChiZCwKKwkJICAgICAgZG1hX21hcF9zaW5nbGUoTlVMTCwgc2tiLT5kYXRhLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSkpOworCisJLy9wcmludGsoS0VSTl9ERUJVRyJza2ItPmRhdGEgaXMgMHgleFxuIixza2ItPmRhdGEpOworCisJYmRfc3RhdHVzID0gKGJkX3N0YXR1cyAmIFRfVykgfCBUX1IgfCBUX0kgfCBUX0wgfCBza2ItPmxlbjsKKworCUJEX1NUQVRVU19BTkRfTEVOR1RIX1NFVChiZCwgYmRfc3RhdHVzKTsKKworCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJLyogTW92ZSB0byBuZXh0IEJEIGluIHRoZSByaW5nICovCisJaWYgKCEoYmRfc3RhdHVzICYgVF9XKSkKKwkJdWdldGgtPnR4QmRbdHhRXSA9IGJkICsgVUNDX0dFVEhfU0laRV9PRl9CRDsKKwllbHNlCisJCXVnZXRoLT50eEJkW3R4UV0gPSB1Z2V0aC0+cF90eF9iZF9yaW5nW3R4UV07CisKKwkvKiBJZiB0aGUgbmV4dCBCRCBzdGlsbCBuZWVkcyB0byBiZSBjbGVhbmVkIHVwLCB0aGVuIHRoZSBiZHMKKwkgICBhcmUgZnVsbC4gIFdlIG5lZWQgdG8gdGVsbCB0aGUga2VybmVsIHRvIHN0b3Agc2VuZGluZyB1cyBzdHVmZi4gKi8KKwlpZiAoYmQgPT0gdWdldGgtPmNvbmZCZFt0eFFdKSB7CisJCWlmICghbmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQorCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCX0KKworCWlmICh1Z2V0aC0+cF9zY2hlZHVsZXIpIHsKKwkJdWdldGgtPmNwdWNvdW50W3R4UV0rKzsKKwkJLyogSW5kaWNhdGUgdG8gUUUgdGhhdCB0aGVyZSBhcmUgbW9yZSBUeCBiZHMgcmVhZHkgZm9yCisJCXRyYW5zbWlzc2lvbiAqLworCQkvKiBUaGlzIGlzIGRvbmUgYnkgd3JpdGluZyBhIHJ1bm5pbmcgY291bnRlciBvZiB0aGUgYmQKKwkJY291bnQgdG8gdGhlIHNjaGVkdWxlciBQUkFNLiAqLworCQlvdXRfYmUxNih1Z2V0aC0+cF9jcHVjb3VudFt0eFFdLCB1Z2V0aC0+Y3B1Y291bnRbdHhRXSk7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZ1Z2V0aC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y2NfZ2V0aF9yeCh1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoLCB1OCByeFEsIGludCByeF93b3JrX2xpbWl0KQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJdTggKmJkOworCXUxNiBsZW5ndGgsIGhvd21hbnkgPSAwOworCXUzMiBiZF9zdGF0dXM7CisJdTggKmJkQnVmZmVyOworCisJdWdldGhfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9jaygmdWdldGgtPmxvY2spOworCS8qIGNvbGxlY3QgcmVjZWl2ZWQgYnVmZmVycyAqLworCWJkID0gdWdldGgtPnJ4QmRbcnhRXTsKKworCWJkX3N0YXR1cyA9IEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKTsKKworCS8qIHdoaWxlIHRoZXJlIGFyZSByZWNlaXZlZCBidWZmZXJzIGFuZCBCRCBpcyBmdWxsICh+Ul9FKSAqLworCXdoaWxlICghKChiZF9zdGF0dXMgJiAoUl9FKSkgfHwgKC0tcnhfd29ya19saW1pdCA8IDApKSkgeworCQliZEJ1ZmZlciA9ICh1OCAqKSBCRF9CVUZGRVIoYmQpOworCQlsZW5ndGggPSAodTE2KSAoKGJkX3N0YXR1cyAmIEJEX0xFTkdUSF9NQVNLKSAtIDQpOworCQlza2IgPSB1Z2V0aC0+cnhfc2tidWZmW3J4UV1bdWdldGgtPnNrYl9jdXJyeFtyeFFdXTsKKworCQkvKiBkZXRlcm1pbmUgd2hldGhlciBidWZmZXIgaXMgZmlyc3QsIGxhc3QsIGZpcnN0IGFuZCBsYXN0CisJCShzaW5nbGUgYnVmZmVyIGZyYW1lKSBvciBtaWRkbGUgKG5vdCBmaXJzdCBhbmQgbm90IGxhc3QpICovCisJCWlmICghc2tiIHx8CisJCSAgICAoIShiZF9zdGF0dXMgJiAoUl9GIHwgUl9MKSkpIHx8CisJCSAgICAoYmRfc3RhdHVzICYgUl9FUlJPUlNfRkFUQUwpKSB7CisJCQl1Z2V0aF92ZGJnKCIlcywgJWQ6IEVSUk9SISEhIHNrYiAtIDB4JTA4eCIsCisJCQkJICAgX19GVU5DVElPTl9fLCBfX0xJTkVfXywgKHUzMikgc2tiKTsKKwkJCWlmIChza2IpCisJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKworCQkJdWdldGgtPnJ4X3NrYnVmZltyeFFdW3VnZXRoLT5za2JfY3VycnhbcnhRXV0gPSBOVUxMOworCQkJdWdldGgtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJfSBlbHNlIHsKKwkJCXVnZXRoLT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCQlob3dtYW55Kys7CisKKwkJCS8qIFByZXAgdGhlIHNrYiBmb3IgdGhlIHBhY2tldCAqLworCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CisKKwkJCS8qIFRlbGwgdGhlIHNrYiB3aGF0IGtpbmQgb2YgcGFja2V0IHRoaXMgaXMgKi8KKwkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHVnZXRoLT5kZXYpOworCisJCQl1Z2V0aC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuZ3RoOworCQkJLyogU2VuZCB0aGUgcGFja2V0IHVwIHRoZSBzdGFjayAqLworI2lmZGVmIENPTkZJR19VR0VUSF9OQVBJCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworI2Vsc2UKKwkJCW5ldGlmX3J4KHNrYik7CisjZW5kaWYJCQkJLyogQ09ORklHX1VHRVRIX05BUEkgKi8KKwkJfQorCisJCXVnZXRoLT5kZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCisJCXNrYiA9IGdldF9uZXdfc2tiKHVnZXRoLCBiZCk7CisJCWlmICghc2tiKSB7CisJCQl1Z2V0aF93YXJuKCIlczogTm8gUnggRGF0YSBCdWZmZXIiLCBfX0ZVTkNUSU9OX18pOworCQkJc3Bpbl91bmxvY2soJnVnZXRoLT5sb2NrKTsKKwkJCXVnZXRoLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlicmVhazsKKwkJfQorCisJCXVnZXRoLT5yeF9za2J1ZmZbcnhRXVt1Z2V0aC0+c2tiX2N1cnJ4W3J4UV1dID0gc2tiOworCisJCS8qIHVwZGF0ZSB0byBwb2ludCBhdCB0aGUgbmV4dCBza2IgKi8KKwkJdWdldGgtPnNrYl9jdXJyeFtyeFFdID0KKwkJICAgICh1Z2V0aC0+c2tiX2N1cnJ4W3J4UV0gKworCQkgICAgIDEpICYgUlhfUklOR19NT0RfTUFTSyh1Z2V0aC0+dWdfaW5mby0+YmRSaW5nTGVuUnhbcnhRXSk7CisKKwkJaWYgKGJkX3N0YXR1cyAmIFJfVykKKwkJCWJkID0gdWdldGgtPnBfcnhfYmRfcmluZ1tyeFFdOworCQllbHNlCisJCQliZCArPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCisJCWJkX3N0YXR1cyA9IEJEX1NUQVRVU19BTkRfTEVOR1RIKGJkKTsKKwl9CisKKwl1Z2V0aC0+cnhCZFtyeFFdID0gYmQ7CisJc3Bpbl91bmxvY2soJnVnZXRoLT5sb2NrKTsKKwlyZXR1cm4gaG93bWFueTsKK30KKworc3RhdGljIGludCB1Y2NfZ2V0aF90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCB0eFEpCit7CisJLyogU3RhcnQgZnJvbSB0aGUgbmV4dCBCRCB0aGF0IHNob3VsZCBiZSBmaWxsZWQgKi8KKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1OCAqYmQ7CQkJLyogQkQgcG9pbnRlciAqLworCXUzMiBiZF9zdGF0dXM7CisKKwliZCA9IHVnZXRoLT5jb25mQmRbdHhRXTsKKwliZF9zdGF0dXMgPSBCRF9TVEFUVVNfQU5EX0xFTkdUSChiZCk7CisKKwkvKiBOb3JtYWwgcHJvY2Vzc2luZy4gKi8KKwl3aGlsZSAoKGJkX3N0YXR1cyAmIFRfUikgPT0gMCkgeworCQkvKiBCRCBjb250YWlucyBhbHJlYWR5IHRyYW5zbWl0dGVkIGJ1ZmZlci4gICAqLworCQkvKiBIYW5kbGUgdGhlIHRyYW5zbWl0dGVkIGJ1ZmZlciBhbmQgcmVsZWFzZSAqLworCQkvKiB0aGUgQkQgdG8gYmUgdXNlZCB3aXRoIHRoZSBjdXJyZW50IGZyYW1lICAqLworCisJCWlmICgoYmQgPSB1Z2V0aC0+dHhCZFt0eFFdKSAmJiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpID09IDApKQorCQkJYnJlYWs7CisKKwkJdWdldGgtPnN0YXRzLnR4X3BhY2tldHMrKzsKKworCQkvKiBGcmVlIHRoZSBzayBidWZmZXIgYXNzb2NpYXRlZCB3aXRoIHRoaXMgVHhCRCAqLworCQlkZXZfa2ZyZWVfc2tiX2lycSh1Z2V0aC0+CisJCQkJICB0eF9za2J1ZmZbdHhRXVt1Z2V0aC0+c2tiX2RpcnR5dHhbdHhRXV0pOworCQl1Z2V0aC0+dHhfc2tidWZmW3R4UV1bdWdldGgtPnNrYl9kaXJ0eXR4W3R4UV1dID0gTlVMTDsKKwkJdWdldGgtPnNrYl9kaXJ0eXR4W3R4UV0gPQorCQkgICAgKHVnZXRoLT5za2JfZGlydHl0eFt0eFFdICsKKwkJICAgICAxKSAmIFRYX1JJTkdfTU9EX01BU0sodWdldGgtPnVnX2luZm8tPmJkUmluZ0xlblR4W3R4UV0pOworCisJCS8qIFdlIGZyZWVkIGEgYnVmZmVyLCBzbyBub3cgd2UgY2FuIHJlc3RhcnQgdHJhbnNtaXNzaW9uICovCisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisKKwkJLyogQWR2YW5jZSB0aGUgY29uZmlybWF0aW9uIEJEIHBvaW50ZXIgKi8KKwkJaWYgKCEoYmRfc3RhdHVzICYgVF9XKSkKKwkJCXVnZXRoLT5jb25mQmRbdHhRXSArPSBVQ0NfR0VUSF9TSVpFX09GX0JEOworCQllbHNlCisJCQl1Z2V0aC0+Y29uZkJkW3R4UV0gPSB1Z2V0aC0+cF90eF9iZF9yaW5nW3R4UV07CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1VHRVRIX05BUEkKK3N0YXRpYyBpbnQgdWNjX2dldGhfcG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgKmJ1ZGdldCkKK3sKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaG93bWFueTsKKwlpbnQgcnhfd29ya19saW1pdCA9ICpidWRnZXQ7CisJdTggcnhRID0gMDsKKworCWlmIChyeF93b3JrX2xpbWl0ID4gZGV2LT5xdW90YSkKKwkJcnhfd29ya19saW1pdCA9IGRldi0+cXVvdGE7CisKKwlob3dtYW55ID0gdWNjX2dldGhfcngodWdldGgsIHJ4USwgcnhfd29ya19saW1pdCk7CisKKwlkZXYtPnF1b3RhIC09IGhvd21hbnk7CisJcnhfd29ya19saW1pdCAtPSBob3dtYW55OworCSpidWRnZXQgLT0gaG93bWFueTsKKworCWlmIChyeF93b3JrX2xpbWl0ID49IDApCisJCW5ldGlmX3J4X2NvbXBsZXRlKGRldik7CisKKwlyZXR1cm4gKHJ4X3dvcmtfbGltaXQgPCAwKSA/IDEgOiAwOworfQorI2VuZGlmCQkJCS8qIENPTkZJR19VR0VUSF9OQVBJICovCisKK3N0YXRpYyBpcnFyZXR1cm5fdCB1Y2NfZ2V0aF9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICppbmZvLAorCQkJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopaW5mbzsKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1Y2NfZmFzdF9wcml2YXRlX3QgKnVjY2Y7CisJdWNjX2dldGhfaW5mb190ICp1Z19pbmZvOworCXJlZ2lzdGVyIHUzMiB1Y2NlID0gMDsKKwlyZWdpc3RlciB1MzIgYml0X21hc2sgPSBVQ0NFX1JYQkZfU0lOR0xFX01BU0s7CisJcmVnaXN0ZXIgdTMyIHR4X21hc2sgPSBVQ0NFX1RYQkZfU0lOR0xFX01BU0s7CisJcmVnaXN0ZXIgdTggaTsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIXVnZXRoKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwl1Y2NmID0gdWdldGgtPnVjY2Y7CisJdWdfaW5mbyA9IHVnZXRoLT51Z19pbmZvOworCisJZG8geworCQl1Y2NlIHw9ICh1MzIpIChpbl9iZTMyKHVjY2YtPnBfdWNjZSkgJiBpbl9iZTMyKHVjY2YtPnBfdWNjbSkpOworCisJCS8qIGNsZWFyIGV2ZW50IGJpdHMgZm9yIG5leHQgdGltZSAqLworCQkvKiBTaWRlIGVmZmVjdCBoZXJlIGlzIHRvIG1hc2sgdWNjZSB2YXJpYWJsZQorCQlmb3IgZnV0dXJlIHByb2Nlc3NpbmcgYmVsb3cuICovCisJCW91dF9iZTMyKHVjY2YtPnBfdWNjZSwgdWNjZSk7CS8qIENsZWFyIHdpdGggb25lcywKKwkJCQkJCWJ1dCBvbmx5IGJpdHMgaW4gVUNDTSAqLworCisJCS8qIFdlIGlnbm9yZSBUeCBpbnRlcnJ1cHRzIGJlY2F1c2UgVHggY29uZmlybWF0aW9uIGlzCisJCWRvbmUgaW5zaWRlIFR4IHJvdXRpbmUgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgdWdfaW5mby0+bnVtUXVldWVzUng7IGkrKykgeworCQkJaWYgKHVjY2UgJiBiaXRfbWFzaykKKwkJCQl1Y2NfZ2V0aF9yeCh1Z2V0aCwgaSwKKwkJCQkJICAgIChpbnQpdWdldGgtPnVnX2luZm8tPgorCQkJCQkgICAgYmRSaW5nTGVuUnhbaV0pOworCQkJdWNjZSAmPSB+Yml0X21hc2s7CisJCQliaXRfbWFzayA8PD0gMTsKKwkJfQorCisJCWZvciAoaSA9IDA7IGkgPCB1Z19pbmZvLT5udW1RdWV1ZXNUeDsgaSsrKSB7CisJCQlpZiAodWNjZSAmIHR4X21hc2spCisJCQkJdWNjX2dldGhfdHgoZGV2LCBpKTsKKwkJCXVjY2UgJj0gfnR4X21hc2s7CisJCQl0eF9tYXNrIDw8PSAxOworCQl9CisKKwkJLyogRXhjZXB0aW9ucyAqLworCQlpZiAodWNjZSAmIFVDQ0VfQlNZKSB7CisJCQl1Z2V0aF92ZGJnKCJHb3QgQlVTWSBpcnEhISEhIik7CisJCQl1Z2V0aC0+c3RhdHMucnhfZXJyb3JzKys7CisJCQl1Y2NlICY9IH5VQ0NFX0JTWTsKKwkJfQorCQlpZiAodWNjZSAmIFVDQ0VfT1RIRVIpIHsKKwkJCXVnZXRoX3ZkYmcoIkdvdCBmcmFtZSB3aXRoIGVycm9yICh1Y2NlIC0gMHglMDh4KSEhISEiLAorCQkJCSAgIHVjY2UpOworCQkJdWdldGgtPnN0YXRzLnJ4X2Vycm9ycysrOworCQkJdWNjZSAmPSB+dWNjZTsKKwkJfQorCX0KKwl3aGlsZSAodWNjZSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwaHlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCisJbWlpX2NsZWFyX3BoeV9pbnRlcnJ1cHQodWdldGgtPm1paV9pbmZvKTsKKworCS8qIERpc2FibGUgUEhZIGludGVycnVwdHMgKi8KKwltaWlfY29uZmlndXJlX3BoeV9pbnRlcnJ1cHQodWdldGgtPm1paV9pbmZvLCBNSUlfSU5URVJSVVBUX0RJU0FCTEVEKTsKKworCS8qIFNjaGVkdWxlIHRoZSBwaHkgY2hhbmdlICovCisJc2NoZWR1bGVfd29yaygmdWdldGgtPnRxKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyogU2NoZWR1bGVkIGJ5IHRoZSBwaHlfaW50ZXJydXB0L3RpbWVyIHRvIGhhbmRsZSBQSFkgY2hhbmdlcyAqLworc3RhdGljIHZvaWQgdWdldGhfcGh5X2NoYW5nZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhOworCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXVjY19nZXRoX3QgKnVnX3JlZ3M7CisJaW50IHJlc3VsdCA9IDA7CisKKwl1Z2V0aF92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJdWdfcmVncyA9IHVnZXRoLT51Z19yZWdzOworCisJLyogRGVsYXkgdG8gZ2l2ZSB0aGUgUEhZIGEgY2hhbmNlIHRvIGNoYW5nZSB0aGUKKwkgKiByZWdpc3RlciBzdGF0ZSAqLworCW1zbGVlcCgxKTsKKworCS8qIFVwZGF0ZSB0aGUgbGluaywgc3BlZWQsIGR1cGxleCAqLworCXJlc3VsdCA9IHVnZXRoLT5taWlfaW5mby0+cGh5aW5mby0+cmVhZF9zdGF0dXModWdldGgtPm1paV9pbmZvKTsKKworCS8qIEFkanVzdCB0aGUga25vd24gc3RhdHVzIGFzIGxvbmcgYXMgdGhlIGxpbmsKKwkgKiBpc24ndCBzdGlsbCBjb21pbmcgdXAgKi8KKwlpZiAoKDAgPT0gcmVzdWx0KSB8fCAodWdldGgtPm1paV9pbmZvLT5saW5rID09IDApKQorCQlhZGp1c3RfbGluayhkZXYpOworCisJLyogUmVlbmFibGUgaW50ZXJydXB0cywgaWYgbmVlZGVkICovCisJaWYgKHVnZXRoLT51Z19pbmZvLT5ib2FyZF9mbGFncyAmIEZTTF9VR0VUSF9CUkRfSEFTX1BIWV9JTlRSKQorCQltaWlfY29uZmlndXJlX3BoeV9pbnRlcnJ1cHQodWdldGgtPm1paV9pbmZvLAorCQkJCQkgICAgTUlJX0lOVEVSUlVQVF9FTkFCTEVEKTsKK30KKworLyogQ2FsbGVkIGV2ZXJ5IHNvIG9mdGVuIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBpbnRlcnJ1cHQKKyAqIHRoZSBjb3JlIGZvciBQSFkgY2hhbmdlcyAqLworc3RhdGljIHZvaWQgdWdldGhfcGh5X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YTsKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNjaGVkdWxlX3dvcmsoJnVnZXRoLT50cSk7CisKKwltb2RfdGltZXIoJnVnZXRoLT5waHlfaW5mb190aW1lciwgamlmZmllcyArIFBIWV9DSEFOR0VfVElNRSAqIEhaKTsKK30KKworLyogS2VlcCB0cnlpbmcgYW5lZyBmb3Igc29tZSB0aW1lCisgKiBJZiwgYWZ0ZXIgR0ZBUl9BTl9USU1FT1VUIHNlY29uZHMsIGl0IGhhcyBub3QKKyAqIGZpbmlzaGVkLCB3ZSBzd2l0Y2ggdG8gZm9yY2VkLgorICogRWl0aGVyIHdheSwgb25jZSB0aGUgcHJvY2VzcyBoYXMgY29tcGxldGVkLCB3ZSBlaXRoZXIKKyAqIHJlcXVlc3QgdGhlIGludGVycnVwdCwgb3Igc3dpdGNoIHRoZSB0aW1lciBvdmVyIHRvCisgKiB1c2luZyB1Z2V0aF9waHlfdGltZXIgdG8gY2hlY2sgc3RhdHVzICovCitzdGF0aWMgdm9pZCB1Z2V0aF9waHlfc3RhcnR1cF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyA9IChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKilkYXRhOworCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihtaWlfaW5mby0+ZGV2KTsKKwlzdGF0aWMgaW50IHNlY29uZGFyeSA9IFVHRVRIX0FOX1RJTUVPVVQ7CisJaW50IHJlc3VsdDsKKworCS8qIENvbmZpZ3VyZSB0aGUgQXV0by1uZWdvdGlhdGlvbiAqLworCXJlc3VsdCA9IG1paV9pbmZvLT5waHlpbmZvLT5jb25maWdfYW5lZyhtaWlfaW5mbyk7CisKKwkvKiBJZiBhdXRvbmVnb3RpYXRpb24gZmFpbGVkIHRvIHN0YXJ0LCBhbmQKKwkgKiB3ZSBoYXZlbid0IHRpbWVkIG91dCwgcmVzZXQgdGhlIHRpbWVyLCBhbmQgcmV0dXJuICovCisJaWYgKHJlc3VsdCAmJiBzZWNvbmRhcnktLSkgeworCQltb2RfdGltZXIoJnVnZXRoLT5waHlfaW5mb190aW1lciwgamlmZmllcyArIEhaKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAocmVzdWx0KSB7CisJCS8qIENvdWxkbid0IHN0YXJ0IGF1dG9uZWdvdGlhdGlvbi4KKwkJICogVHJ5IHN3aXRjaGluZyB0byBmb3JjZWQgKi8KKwkJbWlpX2luZm8tPmF1dG9uZWcgPSAwOworCQlyZXN1bHQgPSBtaWlfaW5mby0+cGh5aW5mby0+Y29uZmlnX2FuZWcobWlpX2luZm8pOworCisJCS8qIEZvcmNpbmcgZmFpbGVkISAgR2l2ZSB1cCAqLworCQlpZiAocmVzdWx0KSB7CisJCQl1Z2V0aF9lcnIoIiVzOiBGb3JjaW5nIGZhaWxlZCEiLCBtaWlfaW5mby0+ZGV2LT5uYW1lKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIEtpbGwgdGhlIHRpbWVyIHNvIGl0IGNhbiBiZSByZXN0YXJ0ZWQgKi8KKwlkZWxfdGltZXJfc3luYygmdWdldGgtPnBoeV9pbmZvX3RpbWVyKTsKKworCS8qIEdyYWIgdGhlIFBIWSBpbnRlcnJ1cHQsIGlmIG5lY2Vzc2FyeS9wb3NzaWJsZSAqLworCWlmICh1Z2V0aC0+dWdfaW5mby0+Ym9hcmRfZmxhZ3MgJiBGU0xfVUdFVEhfQlJEX0hBU19QSFlfSU5UUikgeworCQlpZiAocmVxdWVzdF9pcnEodWdldGgtPnVnX2luZm8tPnBoeV9pbnRlcnJ1cHQsCisJCQkJcGh5X2ludGVycnVwdCwKKwkJCQlTQV9TSElSUSwgInBoeV9pbnRlcnJ1cHQiLCBtaWlfaW5mby0+ZGV2KSA8IDApIHsKKwkJCXVnZXRoX2VycigiJXM6IENhbid0IGdldCBJUlEgJWQgKFBIWSkiLAorCQkJCSAgbWlpX2luZm8tPmRldi0+bmFtZSwKKwkJCQkgIHVnZXRoLT51Z19pbmZvLT5waHlfaW50ZXJydXB0KTsKKwkJfSBlbHNlIHsKKwkJCW1paV9jb25maWd1cmVfcGh5X2ludGVycnVwdCh1Z2V0aC0+bWlpX2luZm8sCisJCQkJCQkgICAgTUlJX0lOVEVSUlVQVF9FTkFCTEVEKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIFN0YXJ0IHRoZSB0aW1lciBhZ2FpbiwgdGhpcyB0aW1lIGluIG9yZGVyIHRvCisJICogaGFuZGxlIGEgY2hhbmdlIGluIHN0YXR1cyAqLworCWluaXRfdGltZXIoJnVnZXRoLT5waHlfaW5mb190aW1lcik7CisJdWdldGgtPnBoeV9pbmZvX3RpbWVyLmZ1bmN0aW9uID0gJnVnZXRoX3BoeV90aW1lcjsKKwl1Z2V0aC0+cGh5X2luZm9fdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKW1paV9pbmZvLT5kZXY7CisJbW9kX3RpbWVyKCZ1Z2V0aC0+cGh5X2luZm9fdGltZXIsIGppZmZpZXMgKyBQSFlfQ0hBTkdFX1RJTUUgKiBIWik7Cit9CisKKy8qIENhbGxlZCB3aGVuIHNvbWV0aGluZyBuZWVkcyB0byB1c2UgdGhlIGV0aGVybmV0IGRldmljZSAqLworLyogUmV0dXJucyAwIGZvciBzdWNjZXNzLiAqLworc3RhdGljIGludCB1Y2NfZ2V0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdWNjX2dldGhfcHJpdmF0ZV90ICp1Z2V0aCA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVycjsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBUZXN0IHN0YXRpb24gYWRkcmVzcyAqLworCWlmIChkZXYtPmRldl9hZGRyWzBdICYgRU5FVF9HUk9VUF9BRERSKSB7CisJCXVnZXRoX2VycigiJXM6IE11bHRpY2FzdCBhZGRyZXNzIHVzZWQgZm9yIHN0YXRpb24gYWRkcmVzcyIKKwkJCSAgIiAtIGlzIHRoaXMgd2hhdCB5b3Ugd2FudGVkPyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWVyciA9IHVjY19nZXRoX3N0YXJ0dXAodWdldGgpOworCWlmIChlcnIpIHsKKwkJdWdldGhfZXJyKCIlczogQ2Fubm90IGNvbmZpZ3VyZSBuZXQgZGV2aWNlLCBhYm9ydGluZy4iLAorCQkJICBkZXYtPm5hbWUpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IGFkanVzdF9lbmV0X2ludGVyZmFjZSh1Z2V0aCk7CisJaWYgKGVycikgeworCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgY29uZmlndXJlIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsCisJCQkgIGRldi0+bmFtZSk7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogICAgICAgU2V0IE1BQ1NUTkFERFIxLCBNQUNTVE5BRERSMiAgICAgICAgICAgICAgICAqLworCS8qIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBoYXJkd2FyZSBzcGVjLiAgICAgICAgICAgKi8KKwlpbml0X21hY19zdGF0aW9uX2FkZHJfcmVncyhkZXYtPmRldl9hZGRyWzBdLAorCQkJCSAgIGRldi0+ZGV2X2FkZHJbMV0sCisJCQkJICAgZGV2LT5kZXZfYWRkclsyXSwKKwkJCQkgICBkZXYtPmRldl9hZGRyWzNdLAorCQkJCSAgIGRldi0+ZGV2X2FkZHJbNF0sCisJCQkJICAgZGV2LT5kZXZfYWRkcls1XSwKKwkJCQkgICAmdWdldGgtPnVnX3JlZ3MtPm1hY3N0bmFkZHIxLAorCQkJCSAgICZ1Z2V0aC0+dWdfcmVncy0+bWFjc3RuYWRkcjIpOworCisJZXJyID0gaW5pdF9waHkoZGV2KTsKKwlpZiAoZXJyKSB7CisJCXVnZXRoX2VycigiJXM6IENhbm5vdCBpbml0aWFsemllIFBIWSwgYWJvcnRpbmcuIiwgZGV2LT5uYW1lKTsKKwkJcmV0dXJuIGVycjsKKwl9CisjaWZuZGVmIENPTkZJR19VR0VUSF9OQVBJCisJZXJyID0KKwkgICAgcmVxdWVzdF9pcnEodWdldGgtPnVnX2luZm8tPnVmX2luZm8uaXJxLCB1Y2NfZ2V0aF9pcnFfaGFuZGxlciwgMCwKKwkJCSJVQ0MgR2V0aCIsIGRldik7CisJaWYgKGVycikgeworCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgZ2V0IElSUSBmb3IgbmV0IGRldmljZSwgYWJvcnRpbmcuIiwKKwkJCSAgZGV2LT5uYW1lKTsKKwkJdWNjX2dldGhfc3RvcCh1Z2V0aCk7CisJCXJldHVybiBlcnI7CisJfQorI2VuZGlmCQkJCS8qIENPTkZJR19VR0VUSF9OQVBJICovCisKKwkvKiBTZXQgdXAgdGhlIFBIWSBjaGFuZ2Ugd29yayBxdWV1ZSAqLworCUlOSVRfV09SSygmdWdldGgtPnRxLCB1Z2V0aF9waHlfY2hhbmdlLCBkZXYpOworCisJaW5pdF90aW1lcigmdWdldGgtPnBoeV9pbmZvX3RpbWVyKTsKKwl1Z2V0aC0+cGh5X2luZm9fdGltZXIuZnVuY3Rpb24gPSAmdWdldGhfcGh5X3N0YXJ0dXBfdGltZXI7CisJdWdldGgtPnBoeV9pbmZvX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyl1Z2V0aC0+bWlpX2luZm87CisJbW9kX3RpbWVyKCZ1Z2V0aC0+cGh5X2luZm9fdGltZXIsIGppZmZpZXMgKyBIWik7CisKKwllcnIgPSB1Z2V0aF9lbmFibGUodWdldGgsIENPTU1fRElSX1JYX0FORF9UWCk7CisJaWYgKGVycikgeworCQl1Z2V0aF9lcnIoIiVzOiBDYW5ub3QgZW5hYmxlIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsIGRldi0+bmFtZSk7CisJCXVjY19nZXRoX3N0b3AodWdldGgpOworCQlyZXR1cm4gZXJyOworCX0KKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKiBTdG9wcyB0aGUga2VybmVsIHF1ZXVlLCBhbmQgaGFsdHMgdGhlIGNvbnRyb2xsZXIgKi8KK3N0YXRpYyBpbnQgdWNjX2dldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwl1Y2NfZ2V0aF9zdG9wKHVnZXRoKTsKKworCS8qIFNodXRkb3duIHRoZSBQSFkgKi8KKwlpZiAodWdldGgtPm1paV9pbmZvLT5waHlpbmZvLT5jbG9zZSkKKwkJdWdldGgtPm1paV9pbmZvLT5waHlpbmZvLT5jbG9zZSh1Z2V0aC0+bWlpX2luZm8pOworCisJa2ZyZWUodWdldGgtPm1paV9pbmZvKTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdWNjX2dldGhfZXRodG9vbF9vcHMgPSB7IH07CisKK3N0YXRpYyBpbnQgdWNjX2dldGhfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2aWNlKTsKKwlzdHJ1Y3QgdWNjX2dldGhfcGxhdGZvcm1fZGF0YSAqdWdldGhfcGRhdGE7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IE5VTEw7CisJc3RydWN0IHVjY19nZXRoX3ByaXZhdGUgKnVnZXRoID0gTlVMTDsKKwlzdHJ1Y3QgdWNjX2dldGhfaW5mbyAqdWdfaW5mbzsKKwlpbnQgZXJyOworCXN0YXRpYyBpbnQgbWlpX21uZ19jb25maWd1cmVkID0gMDsKKworCXVnZXRoX3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwl1Z2V0aF9wZGF0YSA9IChzdHJ1Y3QgdWNjX2dldGhfcGxhdGZvcm1fZGF0YSAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCisJdWdfaW5mbyA9ICZ1Z2V0aF9pbmZvW3BkZXYtPmlkXTsKKwl1Z19pbmZvLT51Zl9pbmZvLnVjY19udW0gPSBwZGV2LT5pZDsKKwl1Z19pbmZvLT51Zl9pbmZvLnJ4X2Nsb2NrID0gdWdldGhfcGRhdGEtPnJ4X2Nsb2NrOworCXVnX2luZm8tPnVmX2luZm8udHhfY2xvY2sgPSB1Z2V0aF9wZGF0YS0+dHhfY2xvY2s7CisJdWdfaW5mby0+dWZfaW5mby5yZWdzID0gdWdldGhfcGRhdGEtPnBoeV9yZWdfYWRkcjsKKwl1Z19pbmZvLT51Zl9pbmZvLmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJdWdfaW5mby0+cGh5X2FkZHJlc3MgPSB1Z2V0aF9wZGF0YS0+cGh5X2lkOworCXVnX2luZm8tPmVuZXRfaW50ZXJmYWNlID0gdWdldGhfcGRhdGEtPnBoeV9pbnRlcmZhY2U7CisJdWdfaW5mby0+Ym9hcmRfZmxhZ3MgPSB1Z2V0aF9wZGF0YS0+Ym9hcmRfZmxhZ3M7CisJdWdfaW5mby0+cGh5X2ludGVycnVwdCA9IHVnZXRoX3BkYXRhLT5waHlfaW50ZXJydXB0OworCisJcHJpbnRrKEtFUk5fSU5GTyAidWNjX2dldGg6IFVDQyUxZCBhdCAweCU4eCAoaXJxID0gJWQpIFxuIiwKKwkJdWdfaW5mby0+dWZfaW5mby51Y2NfbnVtICsgMSwgdWdfaW5mby0+dWZfaW5mby5yZWdzLAorCQl1Z19pbmZvLT51Zl9pbmZvLmlycSk7CisKKwlpZiAodWdfaW5mbyA9PSBOVUxMKSB7CisJCXVnZXRoX2VycigiJXM6IFslZF0gTWlzc2luZyBhZGRpdGlvbmFsIGRhdGEhIiwgX19GVU5DVElPTl9fLAorCQkJICBwZGV2LT5pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghbWlpX21uZ19jb25maWd1cmVkKSB7CisJCXVjY19zZXRfcWVfbXV4X21paV9tbmcodWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKwkJbWlpX21uZ19jb25maWd1cmVkID0gMTsKKwl9CisKKwkvKiBDcmVhdGUgYW4gZXRoZXJuZXQgZGV2aWNlIGluc3RhbmNlICovCisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCp1Z2V0aCkpOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzcGluX2xvY2tfaW5pdCgmdWdldGgtPmxvY2spOworCisJZGV2X3NldF9kcnZkYXRhKGRldmljZSwgZGV2KTsKKworCS8qIFNldCB0aGUgZGV2LT5iYXNlX2FkZHIgdG8gdGhlIGdmYXIgcmVnIHJlZ2lvbiAqLworCWRldi0+YmFzZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHVnX2luZm8tPnVmX2luZm8ucmVncyk7CisKKwlTRVRfTU9EVUxFX09XTkVSKGRldik7CisJU0VUX05FVERFVl9ERVYoZGV2LCBkZXZpY2UpOworCisJLyogRmlsbCBpbiB0aGUgZGV2IHN0cnVjdHVyZSAqLworCWRldi0+b3BlbiA9IHVjY19nZXRoX29wZW47CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSB1Y2NfZ2V0aF9zdGFydF94bWl0OworCWRldi0+dHhfdGltZW91dCA9IHVjY19nZXRoX3RpbWVvdXQ7CisJZGV2LT53YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7CisjaWZkZWYgQ09ORklHX1VHRVRIX05BUEkKKwlkZXYtPnBvbGwgPSB1Y2NfZ2V0aF9wb2xsOworCWRldi0+d2VpZ2h0ID0gVUNDX0dFVEhfREVWX1dFSUdIVDsKKyNlbmRpZgkJCQkvKiBDT05GSUdfVUdFVEhfTkFQSSAqLworCWRldi0+c3RvcCA9IHVjY19nZXRoX2Nsb3NlOworCWRldi0+Z2V0X3N0YXRzID0gdWNjX2dldGhfZ2V0X3N0YXRzOworLy8gICAgZGV2LT5jaGFuZ2VfbXR1ID0gdWNjX2dldGhfY2hhbmdlX210dTsKKwlkZXYtPm10dSA9IDE1MDA7CisJZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSB1Y2NfZ2V0aF9zZXRfbXVsdGk7CisJZGV2LT5ldGh0b29sX29wcyA9ICZ1Y2NfZ2V0aF9ldGh0b29sX29wczsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOworCWlmIChlcnIpIHsKKwkJdWdldGhfZXJyKCIlczogQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLiIsCisJCQkgIGRldi0+bmFtZSk7CisJCWZyZWVfbmV0ZGV2KGRldik7CisJCXJldHVybiBlcnI7CisJfQorCisJdWdldGgtPnVnX2luZm8gPSB1Z19pbmZvOworCXVnZXRoLT5kZXYgPSBkZXY7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHVnZXRoX3BkYXRhLT5tYWNfYWRkciwgNik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1Y2NfZ2V0aF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2aWNlKTsKKwlzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJZGV2X3NldF9kcnZkYXRhKGRldmljZSwgTlVMTCk7CisJdWNjX2dldGhfbWVtY2xlYW4odWdldGgpOworCWZyZWVfbmV0ZGV2KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogU3RydWN0dXJlIGZvciBhIGRldmljZSBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciB1Y2NfZ2V0aF9kcml2ZXIgPSB7CisJLm5hbWUgPSBEUlZfTkFNRSwKKwkuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlLAorCS5wcm9iZSA9IHVjY19nZXRoX3Byb2JlLAorCS5yZW1vdmUgPSB1Y2NfZ2V0aF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB1Y2NfZ2V0aF9pbml0KHZvaWQpCit7CisJaW50IGk7CisJcHJpbnRrKEtFUk5fSU5GTyAidWNjX2dldGg6ICIgRFJWX0RFU0MgIlxuIik7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKKwkJbWVtY3B5KCYodWdldGhfaW5mb1tpXSksICZ1Z2V0aF9wcmltYXJ5X2luZm8sCisJCSAgICAgICBzaXplb2YodWdldGhfcHJpbWFyeV9pbmZvKSk7CisKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdWNjX2dldGhfZXhpdCh2b2lkKQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1Y2NfZ2V0aF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh1Y2NfZ2V0aF9pbml0KTsKK21vZHVsZV9leGl0KHVjY19nZXRoX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jIik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguaCBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA1OTY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmgKQEAgLTAsMCArMSwxMzM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuIDIwMDYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogQXV0aG9yOiBTaGxvbWkgR3JpZGlzaCA8Z3JpZGlzaEBmcmVlc2NhbGUuY29tPgorICoKKyAqIERlc2NyaXB0aW9uOgorICogSW50ZXJuYWwgaGVhZGVyIGZpbGUgZm9yIFVDQyBHaWdhYml0IEV0aGVybmV0IHVuaXQgcm91dGluZXMuCisgKgorICogQ2hhbmdlbG9nOgorICogSnVuIDI4LCAyMDA2IExpIFlhbmcgPExlb0xpQGZyZWVzY2FsZS5jb20+CisgKiAtIFJlYXJyYW5nZSBjb2RlIGFuZCBzdHlsZSBmaXhlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpZm5kZWYgX19VQ0NfR0VUSF9IX18KKyNkZWZpbmUgX19VQ0NfR0VUSF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8YXNtL2ltbWFwX3FlLmg+CisjaW5jbHVkZSA8YXNtL3FlLmg+CisKKyNpbmNsdWRlIDxhc20vdWNjLmg+CisjaW5jbHVkZSA8YXNtL3VjY19mYXN0Lmg+CisKKyNkZWZpbmUgTlVNX1RYX1FVRVVFUyAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIE5VTV9SWF9RVUVVRVMgICAgICAgICAgICAgICAgICAgOAorI2RlZmluZSBOVU1fQkRTX0lOX1BSRUZFVENIRURfQkRTICAgICAgIDQKKyNkZWZpbmUgVFhfSVBfT0ZGU0VUX0VOVFJZX01BWCAgICAgICAgICA4CisjZGVmaW5lIE5VTV9PRl9QQUREUlMgICAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBFTkVUX0lOSVRfUEFSQU1fTUFYX0VOVFJJRVNfUlggIDkKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BWF9FTlRSSUVTX1RYICA4CisKK3R5cGVkZWYgc3RydWN0IHVjY19taWlfbW5nIHsKKwl1MzIgbWlpbWNmZzsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gcmVnICovCisJdTMyIG1paW1jb207CQkvKiBNSUkgbWFuYWdlbWVudCBjb21tYW5kIHJlZyAqLworCXUzMiBtaWltYWRkOwkJLyogTUlJIG1hbmFnZW1lbnQgYWRkcmVzcyByZWcgKi8KKwl1MzIgbWlpbWNvbjsJCS8qIE1JSSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnICovCisJdTMyIG1paW1zdGF0OwkJLyogTUlJIG1hbmFnZW1lbnQgc3RhdHVzIHJlZyAqLworCXUzMiBtaWltaW5kOwkJLyogTUlJIG1hbmFnZW1lbnQgaW5kaWNhdGlvbiByZWcgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19taWlfbW5nX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoIHsKKwl1Y2NfZmFzdF90IHVjY2Y7CisKKwl1MzIgbWFjY2ZnMTsJCS8qIG1hYyBjb25maWd1cmF0aW9uIHJlZy4gMSAqLworCXUzMiBtYWNjZmcyOwkJLyogbWFjIGNvbmZpZ3VyYXRpb24gcmVnLiAyICovCisJdTMyIGlwZ2lmZzsJCS8qIGludGVyZnJhbWUgZ2FwIHJlZy4gICovCisJdTMyIGhhZmR1cDsJCS8qIGhhbGYtZHVwbGV4IHJlZy4gICovCisJdTggcmVzMVsweDEwXTsKKwl1Y2NfbWlpX21uZ190IG1paW1uZzsJLyogTUlJIG1hbmFnZW1lbnQgc3RydWN0dXJlICovCisJdTMyIGlmY3RsOwkJLyogaW50ZXJmYWNlIGNvbnRyb2wgcmVnICovCisJdTMyIGlmc3RhdDsJCS8qIGludGVyZmFjZSBzdGF0dXggcmVnICovCisJdTMyIG1hY3N0bmFkZHIxOwkvKiBtYWMgc3RhdGlvbiBhZGRyZXNzIHBhcnQgMSByZWcgKi8KKwl1MzIgbWFjc3RuYWRkcjI7CS8qIG1hYyBzdGF0aW9uIGFkZHJlc3MgcGFydCAyIHJlZyAqLworCXU4IHJlczJbMHg4XTsKKwl1MzIgdWVtcHI7CQkvKiBVQ0MgRXRoZXJuZXQgTWFjIHBhcmFtZXRlciByZWcgKi8KKwl1MzIgdXRiaXBhcjsJCS8qIFVDQyB0YmkgYWRkcmVzcyByZWcgKi8KKwl1MTYgdWVzY3I7CQkvKiBVQ0MgRXRoZXJuZXQgc3RhdGlzdGljcyBjb250cm9sIHJlZyAqLworCXU4IHJlczNbMHgxODAgLSAweDE1QV07CisJdTMyIHR4NjQ7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIChpbmNsdWRpbmcgYmFkCisJCQkJICAgZnJhbWVzKSB0cmFuc21pdHRlZCB0aGF0IHdlcmUgZXhhY3RseSBvZiB0aGUKKwkJCQkgICBtaW5pbWFsIGxlbmd0aCAoNjQgZm9yIHVuIHRhZ2dlZCwgNjggZm9yCisJCQkJICAgdGFnZ2VkLCBvciB3aXRoIGxlbmd0aCBleGFjdGx5IGVxdWFsIHRvIHRoZQorCQkJCSAgIHBhcmFtZXRlciBNSU5MZW5ndGggKi8KKwl1MzIgdHgxMjc7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIChpbmNsdWRpbmcgYmFkCisJCQkJICAgZnJhbWVzKSB0cmFuc21pdHRlZCB0aGF0IHdlcmUgYmV0d2VlbgorCQkJCSAgIE1JTkxlbmd0aCAoSW5jbHVkaW5nIEZDUyBsZW5ndGg9PTQpIGFuZCAxMjcKKwkJCQkgICBvY3RldHMgKi8KKwl1MzIgdHgyNTU7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIChpbmNsdWRpbmcgYmFkCisJCQkJICAgZnJhbWVzKSB0cmFuc21pdHRlZCB0aGF0IHdlcmUgYmV0d2VlbiAxMjgKKwkJCQkgICAoSW5jbHVkaW5nIEZDUyBsZW5ndGg9PTQpIGFuZCAyNTUgb2N0ZXRzICovCisJdTMyIHJ4NjQ7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIGluY2x1ZGluZworCQkJCSAgIGJhZCBmcmFtZXMgdGhhdCB3ZXJlIGV4YWN0bHkgb2YgdGhlIG1uaW5pbWFsCisJCQkJICAgbGVuZ3RoICg2NCBieXRlcykgKi8KKwl1MzIgcngxMjc7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIChpbmNsdWRpbmcgYmFkCisJCQkJICAgZnJhbWVzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbiBNSU5MZW5ndGgKKwkJCQkgICAoSW5jbHVkaW5nIEZDUyBsZW5ndGg9PTQpIGFuZCAxMjcgb2N0ZXRzICovCisJdTMyIHJ4MjU1OwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyAoaW5jbHVkaW5nIGJhZAorCQkJCSAgIGZyYW1lcykgcmVjZWl2ZWQgdGhhdCB3ZXJlIGJldHdlZW4gMTI4CisJCQkJICAgKEluY2x1ZGluZyBGQ1MgbGVuZ3RoPT00KSBhbmQgMjU1IG9jdGV0cyAqLworCXUzMiB0eG9rOwkJLyogVG90YWwgbnVtYmVyIG9mIG9jdGV0cyByZXNpZGluZyBpbiBmcmFtZXMKKwkJCQkgICB0aGF0IHdoZXJlIGludm9sdmVkIGluIHN1Y2Nlc2Z1bGwKKwkJCQkgICB0cmFuc21pc3Npb24gKi8KKwl1MTYgdHhjZjsJCS8qIFRvdGFsIG51bWJlciBvZiBQQVVTRSBjb250cm9sIGZyYW1lcworCQkJCSAgIHRyYW5zbWl0dGVkIGJ5IHRoaXMgTUFDICovCisJdTggcmVzNFsweDJdOworCXUzMiB0bWNhOwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IHdlcmUgdHJhbnNtaXR0ZWQKKwkJCQkgICBzdWNjZXNmdWxseSB3aXRoIHRoZSBncm91cCBhZGRyZXNzIGJpdCBzZXQKKwkJCQkgICB0aGF0IGFyZSBub3QgYnJvYWRjYXN0IGZyYW1lcyAqLworCXUzMiB0YmNhOwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyB0cmFuc21pdHRlZAorCQkJCSAgIHN1Y2Nlc2Z1bGx5IHRoYXQgaGFkIGRlc3RpbmF0aW9uIGFkZHJlc3MKKwkJCQkgICBmaWVsZCBlcXVhbCB0byB0aGUgYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwl1MzIgcnhmb2s7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIE9LICovCisJdTMyIHJ4Ym9rOwkJLyogVG90YWwgbnVtYmVyIG9mIG9jdGV0cyByZWNlaXZlZCBPSyAqLworCXUzMiByYnl0OwkJLyogVG90YWwgbnVtYmVyIG9mIG9jdGV0cyByZWNlaXZlZCBpbmNsdWRpbmcKKwkJCQkgICBvY3RldHMgaW4gYmFkIGZyYW1lcy4gTXVzdCBiZSBpbXBsZW1lbnRlZCBpbgorCQkJCSAgIEhXIGJlY2F1c2UgaXQgaW5jbHVkZXMgb2N0ZXRzIGluIGZyYW1lcyB0aGF0CisJCQkJICAgbmV2ZXIgZXZlbiByZWFjaCB0aGUgVUNDICovCisJdTMyIHJtY2E7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIHRoYXQgd2VyZSByZWNlaXZlZAorCQkJCSAgIHN1Y2Nlc2Z1bGx5IHdpdGggdGhlIGdyb3VwIGFkZHJlc3MgYml0IHNldAorCQkJCSAgIHRoYXQgYXJlIG5vdCBicm9hZGNhc3QgZnJhbWVzICovCisJdTMyIHJiY2E7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIHJlY2VpdmVkIHN1Y2Nlc2Z1bGx5CisJCQkJICAgdGhhdCBoYWQgZGVzdGluYXRpb24gYWRkcmVzcyBlcXVhbCB0byB0aGUKKwkJCQkgICBicm9hZGNhc3QgYWRkcmVzcyAqLworCXUzMiBzY2FyOwkJLyogU3RhdGlzdGljcyBjYXJyeSByZWdpc3RlciAqLworCXUzMiBzY2FtOwkJLyogU3RhdGlzdGljcyBjYXJ5eSBtYXNrIHJlZ2lzdGVyICovCisJdTggcmVzNVsweDIwMCAtIDB4MWM0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3Q7CisKKy8qIFVDQyBHRVRIIFRFTU9EUiBSZWdpc3RlciAqLworI2RlZmluZSBURU1PREVSX1RYX1JNT05fU1RBVElTVElDU19FTkFCTEUgICAgICAgMHgwMTAwCS8qIGVuYWJsZSBUeCBzdGF0aXN0aWNzCisJCQkJCQkJICovCisjZGVmaW5lIFRFTU9ERVJfU0NIRURVTEVSX0VOQUJMRSAgICAgICAgICAgICAgICAweDIwMDAJLyogZW5hYmxlIHNjaGVkdWxlciAqLworI2RlZmluZSBURU1PREVSX0lQX0NIRUNLU1VNX0dFTkVSQVRFICAgICAgICAgICAgMHgwNDAwCS8qIGdlbmVyYXRlIElQdjQKKwkJCQkJCQkgICBjaGVja3N1bXMgKi8KKyNkZWZpbmUgVEVNT0RFUl9QRVJGT1JNQU5DRV9PUFRJTUlaQVRJT05fTU9ERTEgIDB4MDIwMAkvKiBlbmFibGUgcGVyZm9ybWFuY2UKKwkJCQkJCQkgICBvcHRpbWl6YXRpb24KKwkJCQkJCQkgICBlbmhhbmNlbWVudCAobW9kZTEpICovCisjZGVmaW5lIFRFTU9ERVJfUk1PTl9TVEFUSVNUSUNTICAgICAgICAgICAgICAgICAweDAxMDAJLyogZW5hYmxlIHR4IHN0YXRpc3RpY3MKKwkJCQkJCQkgKi8KKyNkZWZpbmUgVEVNT0RFUl9OVU1fT0ZfUVVFVUVTX1NISUZUICAgICAgICAgICAgICgxNS0xNSkJLyogTnVtYmVyIG9mIHF1ZXVlcyA8PAorCQkJCQkJCSAgIHNoaWZ0ICovCisKKy8qIFVDQyBHRVRIIFRFTU9EUiBSZWdpc3RlciAqLworI2RlZmluZSBSRU1PREVSX1JYX1JNT05fU1RBVElTVElDU19FTkFCTEUgICAgICAgMHgwMDAwMTAwMAkvKiBlbmFibGUgUngKKwkJCQkJCQkJICAgc3RhdGlzdGljcyAqLworI2RlZmluZSBSRU1PREVSX1JYX0VYVEVOREVEX0ZFQVRVUkVTICAgICAgICAgICAgMHg4MDAwMDAwMAkvKiBlbmFibGUKKwkJCQkJCQkJICAgZXh0ZW5kZWQKKwkJCQkJCQkJICAgZmVhdHVyZXMgKi8KKyNkZWZpbmUgUkVNT0RFUl9WTEFOX09QRVJBVElPTl9UQUdHRURfU0hJRlQgICAgICgzMS05ICkJLyogdmxhbiBvcGVyYXRpb24KKwkJCQkJCQkgICB0YWdnZWQgPDwgc2hpZnQgKi8KKyNkZWZpbmUgUkVNT0RFUl9WTEFOX09QRVJBVElPTl9OT05fVEFHR0VEX1NISUZUICgzMS0xMCkJLyogdmxhbiBvcGVyYXRpb24gbm9uCisJCQkJCQkJICAgdGFnZ2VkIDw8IHNoaWZ0ICovCisjZGVmaW5lIFJFTU9ERVJfUlhfUU9TX01PREVfU0hJRlQgICAgICAgICAgICAgICAoMzEtMTUpCS8qIHJ4IFFvUyBtb2RlIDw8IHNoaWZ0CisJCQkJCQkJICovCisjZGVmaW5lIFJFTU9ERVJfUk1PTl9TVEFUSVNUSUNTICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCS8qIGVuYWJsZSByeAorCQkJCQkJCQkgICBzdGF0aXN0aWNzICovCisjZGVmaW5lIFJFTU9ERVJfUlhfRVhURU5ERURfRklMVEVSSU5HICAgICAgICAgICAweDAwMDAwODAwCS8qIGV4dGVuZGVkCisJCQkJCQkJCSAgIGZpbHRlcmluZworCQkJCQkJCQkgICB2cy4KKwkJCQkJCQkJICAgbXBjODJ4eC1saWtlCisJCQkJCQkJCSAgIGZpbHRlcmluZyAqLworI2RlZmluZSBSRU1PREVSX05VTV9PRl9RVUVVRVNfU0hJRlQgICAgICAgICAgICAgKDMxLTIzKQkvKiBOdW1iZXIgb2YgcXVldWVzIDw8CisJCQkJCQkJICAgc2hpZnQgKi8KKyNkZWZpbmUgUkVNT0RFUl9EWU5BTUlDX01BWF9GUkFNRV9MRU5HVEggICAgICAgIDB4MDAwMDAwMDgJLyogZW5hYmxlCisJCQkJCQkJCSAgIGR5bmFtaWMgbWF4CisJCQkJCQkJCSAgIGZyYW1lIGxlbmd0aAorCQkJCQkJCQkgKi8KKyNkZWZpbmUgUkVNT0RFUl9EWU5BTUlDX01JTl9GUkFNRV9MRU5HVEggICAgICAgIDB4MDAwMDAwMDQJLyogZW5hYmxlCisJCQkJCQkJCSAgIGR5bmFtaWMgbWluCisJCQkJCQkJCSAgIGZyYW1lIGxlbmd0aAorCQkJCQkJCQkgKi8KKyNkZWZpbmUgUkVNT0RFUl9JUF9DSEVDS1NVTV9DSEVDSyAgICAgICAgICAgICAgIDB4MDAwMDAwMDIJLyogY2hlY2sgSVB2NAorCQkJCQkJCQkgICBjaGVja3N1bXMgKi8KKyNkZWZpbmUgUkVNT0RFUl9JUF9BRERSRVNTX0FMSUdOTUVOVCAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogYWxpZ24gaXAKKwkJCQkJCQkJICAgYWRkcmVzcyB0bworCQkJCQkJCQkgICA0LWJ5dGUKKwkJCQkJCQkJICAgYm91bmRhcnkgKi8KKworLyogVUNDIEdFVEggRXZlbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUNDRV9NUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogTWFnaWMgcGFja2V0CisJCQkJCQkJCSAgIGRldGVjdGlvbiAqLworI2RlZmluZSBVQ0NFX1NDQVIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBVQ0NFX0dSQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwMDAwMAkvKiBUeCBncmFjZWZ1bAorCQkJCQkJCQkgICBzdG9wCisJCQkJCQkJCSAgIGNvbXBsZXRlICovCisjZGVmaW5lIFVDQ0VfQ0JQUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIFVDQ0VfQlNZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4MDAwMDAwCisjZGVmaW5lIFVDQ0VfUlhDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAwMDAwCisjZGVmaW5lIFVDQ0VfVFhDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIFVDQ0VfVFhFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCisjZGVmaW5lIFVDQ0VfVFhCNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIFVDQ0VfVFhCNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIFVDQ0VfVFhCNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAwMDAwCisjZGVmaW5lIFVDQ0VfVFhCNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIFVDQ0VfVFhCMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgwMDAwCisjZGVmaW5lIFVDQ0VfVFhCMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCisjZGVmaW5lIFVDQ0VfVFhCMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIFVDQ0VfVFhCMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIFVDQ0VfUlhCNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA4MDAwCisjZGVmaW5lIFVDQ0VfUlhCNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIFVDQ0VfUlhCNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIFVDQ0VfUlhCNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIFVDQ0VfUlhCMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIFVDQ0VfUlhCMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIFVDQ0VfUlhCMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFVDQ0VfUlhCMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIFVDQ0VfUlhGNyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIFVDQ0VfUlhGNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCisjZGVmaW5lIFVDQ0VfUlhGNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFVDQ0VfUlhGNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFVDQ0VfUlhGMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIFVDQ0VfUlhGMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFVDQ0VfUlhGMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIFVDQ0VfUlhGMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisKKyNkZWZpbmUgVUNDRV9SWEJGX1NJTkdMRV9NQVNLICAgICAgICAgICAgICAgICAgIChVQ0NFX1JYRjApCisjZGVmaW5lIFVDQ0VfVFhCRl9TSU5HTEVfTUFTSyAgICAgICAgICAgICAgICAgICAoVUNDRV9UWEIwKQorCisjZGVmaW5lIFVDQ0VfVFhCICAgICAgICAgKFVDQ0VfVFhCNyB8IFVDQ0VfVFhCNiB8IFVDQ0VfVFhCNSB8IFVDQ0VfVFhCNCB8XAorCQkJVUNDRV9UWEIzIHwgVUNDRV9UWEIyIHwgVUNDRV9UWEIxIHwgVUNDRV9UWEIwKQorI2RlZmluZSBVQ0NFX1JYQiAgICAgICAgIChVQ0NFX1JYQjcgfCBVQ0NFX1JYQjYgfCBVQ0NFX1JYQjUgfCBVQ0NFX1JYQjQgfFwKKwkJCVVDQ0VfUlhCMyB8IFVDQ0VfUlhCMiB8IFVDQ0VfUlhCMSB8IFVDQ0VfUlhCMCkKKyNkZWZpbmUgVUNDRV9SWEYgICAgICAgICAoVUNDRV9SWEY3IHwgVUNDRV9SWEY2IHwgVUNDRV9SWEY1IHwgVUNDRV9SWEY0IHxcCisJCQlVQ0NFX1JYRjMgfCBVQ0NFX1JYRjIgfCBVQ0NFX1JYRjEgfCBVQ0NFX1JYRjApCisjZGVmaW5lIFVDQ0VfT1RIRVIgICAgICAgKFVDQ0VfU0NBUiB8IFVDQ0VfR1JBICB8IFVDQ0VfQ0JQUiB8IFVDQ0VfQlNZICB8XAorCQkJVUNDRV9SWEMgIHwgVUNDRV9UWEMgIHwgVUNDRV9UWEUpCisKKy8qIFVDQyBHRVRIIFVQU01SIChQcm90b2NvbCBTcGVjaWZpYyBNb2RlIFJlZ2lzdGVyKSAqLworI2RlZmluZSBVUFNNUl9FQ00gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNDAwMDAwMAkvKiBFbmFibGUgQ0FNCisJCQkJCQkJCSAgIE1pc3Mgb3IKKwkJCQkJCQkJICAgRW5hYmxlCisJCQkJCQkJCSAgIEZpbHRlcmluZworCQkJCQkJCQkgICBNaXNzICovCisjZGVmaW5lIFVQU01SX0hTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCS8qIEhhcmR3YXJlCisJCQkJCQkJCSAgIFN0YXRpc3RpY3MKKwkJCQkJCQkJICAgRW5hYmxlICovCisjZGVmaW5lIFVQU01SX1BSTyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwCS8qIFByb21pc2N1b3VzKi8KKyNkZWZpbmUgVVBTTVJfQ0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMDAwMDAJLyogQ0FNIHBvbGFyaXR5CisJCQkJCQkJCSAqLworI2RlZmluZSBVUFNNUl9SU0ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwMDAwMAkvKiBSZWNlaXZlCisJCQkJCQkJCSAgIFNob3J0IEZyYW1lcworCQkJCQkJCQkgKi8KKyNkZWZpbmUgVVBTTVJfUlBNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAJLyogUmVkdWNlZCBQaW4KKwkJCQkJCQkJICAgTW9kZQorCQkJCQkJCQkgICBpbnRlcmZhY2VzICovCisjZGVmaW5lIFVQU01SX1IxME0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQwMDAwCS8qIFJHTUlJL1JNSUkKKwkJCQkJCQkJICAgMTAgTW9kZSAqLworI2RlZmluZSBVUFNNUl9STFBCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBSTUlJCisJCQkJCQkJCSAgIExvb3BiYWNrCisJCQkJCQkJCSAgIE1vZGUgKi8KKyNkZWZpbmUgVVBTTVJfVEJJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDAJLyogVGVuLWJpdAorCQkJCQkJCQkgICBJbnRlcmZhY2UKKwkJCQkJCQkJICAgTW9kZSAqLworI2RlZmluZSBVUFNNUl9STU0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTAwMAkvKiBSTUlJL1JHTUlJCisJCQkJCQkJCSAgIE1vZGUgKi8KKyNkZWZpbmUgVVBTTVJfQ0FNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAJLyogQ0FNIEFkZHJlc3MKKwkJCQkJCQkJICAgTWF0Y2hpbmcgKi8KKyNkZWZpbmUgVVBTTVJfQlJPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAyMDAJLyogQnJvYWRjYXN0CisJCQkJCQkJCSAgIEFkZHJlc3MgKi8KKyNkZWZpbmUgVVBTTVJfUkVTMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAJLyogUmVzZXJ2ZWQKKwkJCQkJCQkJICAgZmVpbGQgLSBtdXN0CisJCQkJCQkJCSAgIGJlIDEgKi8KKworLyogVUNDIEdFVEggTUFDQ0ZHMSAoTUFDIENvbmZpZ3VyYXRpb24gMSBSZWdpc3RlcikgKi8KKyNkZWZpbmUgTUFDQ0ZHMV9GTE9XX1JYICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogRmxvdyBDb250cm9sCisJCQkJCQkJCSAgIFJ4ICovCisjZGVmaW5lIE1BQ0NGRzFfRkxPV19UWCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCS8qIEZsb3cgQ29udHJvbAorCQkJCQkJCQkgICBUeCAqLworI2RlZmluZSBNQUNDRkcxX0VOQUJMRV9TWU5DSEVEX1JYICAgICAgICAgICAgICAgMHgwMDAwMDAwOAkvKiBSeCBFbmFibGUKKwkJCQkJCQkJICAgc3luY2hyb25pemVkCisJCQkJCQkJCSAgIHRvIFJ4IHN0cmVhbQorCQkJCQkJCQkgKi8KKyNkZWZpbmUgTUFDQ0ZHMV9FTkFCTEVfUlggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogRW5hYmxlIFJ4ICovCisjZGVmaW5lIE1BQ0NGRzFfRU5BQkxFX1NZTkNIRURfVFggICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFR4IEVuYWJsZQorCQkJCQkJCQkgICBzeW5jaHJvbml6ZWQKKwkJCQkJCQkJICAgdG8gVHggc3RyZWFtCisJCQkJCQkJCSAqLworI2RlZmluZSBNQUNDRkcxX0VOQUJMRV9UWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBFbmFibGUgVHggKi8KKworLyogVUNDIEdFVEggTUFDQ0ZHMiAoTUFDIENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlcikgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9QUkVMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgzMSAtIDE5KQkvKiBQcmVhbWJsZQorCQkJCQkJCQkgICBMZW5ndGggPDwKKwkJCQkJCQkJICAgc2hpZnQgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9QUkVMX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMGYwMDAJLyogUHJlYW1ibGUKKwkJCQkJCQkJICAgTGVuZ3RoIG1hc2sgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9TUlAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAJLyogU29mdCBSZWNlaXZlCisJCQkJCQkJCSAgIFByZWFtYmxlICovCisjZGVmaW5lIE1BQ0NGRzJfU1RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDQwCS8qIFNvZnQKKwkJCQkJCQkJICAgVHJhbnNtaXQKKwkJCQkJCQkJICAgUHJlYW1ibGUgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9SRVNFUlZFRF8xICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAJLyogUmVzZXJ2ZWQgLQorCQkJCQkJCQkgICBtdXN0IGJlIHNldAorCQkJCQkJCQkgICB0byAxICovCisjZGVmaW5lIE1BQ0NGRzJfTEMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCS8qIExlbmd0aCBDaGVjaworCQkJCQkJCQkgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9NUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDgJLyogTWFnaWMgcGFja2V0CisJCQkJCQkJCSAgIGRldGVjdCAqLworI2RlZmluZSBNQUNDRkcyX0ZEWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBGdWxsIER1cGxleCAqLworI2RlZmluZSBNQUNDRkcyX0ZEWF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQkvKiBGdWxsIER1cGxleAorCQkJCQkJCQkgICBtYXNrICovCisjZGVmaW5lIE1BQ0NGRzJfUEFEX0NSQyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1BQ0NGRzJfQ1JDX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1BQ0NGRzJfUEFEX0FORF9DUkNfTU9ERV9OT05FICAgICAgICAgICAweDAwMDAwMDAwCS8qIE5laXRoZXIKKwkJCQkJCQkJICAgUGFkZGluZworCQkJCQkJCQkgICBzaG9ydCBmcmFtZXMKKwkJCQkJCQkJICAgbm9yIENSQyAqLworI2RlZmluZSBNQUNDRkcyX1BBRF9BTkRfQ1JDX01PREVfQ1JDX09OTFkgICAgICAgMHgwMDAwMDAwMgkvKiBBcHBlbmQgQ1JDCisJCQkJCQkJCSAgIG9ubHkgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9QQURfQU5EX0NSQ19NT0RFX1BBRF9BTkRfQ1JDICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9OSUJCTEUgICAgICAgICAgIDB4MDAwMDAxMDAJLyogbmliYmxlIG1vZGUKKwkJCQkJCQkJICAgKE1JSS9STUlJL1JHTUlJCisJCQkJCQkJCSAgIDEwLzEwMGJwcykgKi8KKyNkZWZpbmUgTUFDQ0ZHMl9JTlRFUkZBQ0VfTU9ERV9CWVRFICAgICAgICAgICAgIDB4MDAwMDAyMDAJLyogYnl0ZSBtb2RlCisJCQkJCQkJCSAgIChHTUlJL1RCSS9SVEIvUkdNSUkKKwkJCQkJCQkJICAgMTAwMGJwcyApICovCisjZGVmaW5lIE1BQ0NGRzJfSU5URVJGQUNFX01PREVfTUFTSyAgICAgICAgICAgICAweDAwMDAwMzAwCS8qIG1hc2sKKwkJCQkJCQkJICAgY292ZXJpbmcgYWxsCisJCQkJCQkJCSAgIHJlbGV2YW50CisJCQkJCQkJCSAgIGJpdHMgKi8KKworLyogVUNDIEdFVEggSVBHSUZHIChJbnRlci1mcmFtZSBHYXAgLyBJbnRlci1GcmFtZSBHYXAgUmVnaXN0ZXIpICovCisjZGVmaW5lIElQR0lGR19OT05fQkFDS19UT19CQUNLX0lGR19QQVJUMV9TSElGVCAoMzEgLSAgNykJLyogTm9uCisJCQkJCQkJCSAgIGJhY2stdG8tYmFjaworCQkJCQkJCQkgICBpbnRlciBmcmFtZQorCQkJCQkJCQkgICBnYXAgcGFydCAxLgorCQkJCQkJCQkgICA8PCBzaGlmdCAqLworI2RlZmluZSBJUEdJRkdfTk9OX0JBQ0tfVE9fQkFDS19JRkdfUEFSVDJfU0hJRlQgKDMxIC0gMTUpCS8qIE5vbgorCQkJCQkJCQkgICBiYWNrLXRvLWJhY2sKKwkJCQkJCQkJICAgaW50ZXIgZnJhbWUKKwkJCQkJCQkJICAgZ2FwIHBhcnQgMi4KKwkJCQkJCQkJICAgPDwgc2hpZnQgKi8KKyNkZWZpbmUgSVBHSUZHX01JTklNVU1fSUZHX0VORk9SQ0VNRU5UX1NISUZUICAgICgzMSAtIDIzKQkvKiBNaW1pbXVtIElGRworCQkJCQkJCQkgICBFbmZvcmNlbWVudAorCQkJCQkJCQkgICA8PCBzaGlmdCAqLworI2RlZmluZSBJUEdJRkdfQkFDS19UT19CQUNLX0lGR19TSElGVCAgICAgICAgICAgKDMxIC0gMzEpCS8qIGJhY2stdG8tYmFjaworCQkJCQkJCQkgICBpbnRlciBmcmFtZQorCQkJCQkJCQkgICBnYXAgPDwgc2hpZnQKKwkJCQkJCQkJICovCisjZGVmaW5lIElQR0lGR19OT05fQkFDS19UT19CQUNLX0lGR19QQVJUMV9NQVggICAxMjcJLyogTm9uIGJhY2stdG8tYmFjaworCQkJCQkJCSAgIGludGVyIGZyYW1lIGdhcCBwYXJ0CisJCQkJCQkJICAgMS4gbWF4IHZhbCAqLworI2RlZmluZSBJUEdJRkdfTk9OX0JBQ0tfVE9fQkFDS19JRkdfUEFSVDJfTUFYICAgMTI3CS8qIE5vbiBiYWNrLXRvLWJhY2sKKwkJCQkJCQkgICBpbnRlciBmcmFtZSBnYXAgcGFydAorCQkJCQkJCSAgIDIuIG1heCB2YWwgKi8KKyNkZWZpbmUgSVBHSUZHX01JTklNVU1fSUZHX0VORk9SQ0VNRU5UX01BWCAgICAgIDI1NQkvKiBNaW1pbXVtIElGRworCQkJCQkJCSAgIEVuZm9yY2VtZW50IG1heCB2YWwgKi8KKyNkZWZpbmUgSVBHSUZHX0JBQ0tfVE9fQkFDS19JRkdfTUFYICAgICAgICAgICAgIDEyNwkvKiBiYWNrLXRvLWJhY2sgaW50ZXIKKwkJCQkJCQkgICBmcmFtZSBnYXAgbWF4IHZhbCAqLworI2RlZmluZSBJUEdJRkdfTkJUQl9DU19JUEdfTUFTSyAgICAgICAgICAgICAgICAgMHg3RjAwMDAwMAorI2RlZmluZSBJUEdJRkdfTkJUQl9JUEdfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDdGMDAwMAorI2RlZmluZSBJUEdJRkdfTUlOX0lGR19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMAorI2RlZmluZSBJUEdJRkdfQlRCX0lQR19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA3RgorCisvKiBVQ0MgR0VUSCBIQUZEVVAgKEhhbGYgRHVwbGV4IFJlZ2lzdGVyKSAqLworI2RlZmluZSBIQUxGRFVQX0FMVF9CRUJfVFJVTkNBVElPTl9TSElGVCAgICAgICAgKDMxIC0gMTEpCS8qIEFsdGVybmF0ZQorCQkJCQkJCQkgICBCaW5hcnkKKwkJCQkJCQkJICAgRXhwb25lbnRpYWwKKwkJCQkJCQkJICAgQmFja29mZgorCQkJCQkJCQkgICBUcnVuY2F0aW9uCisJCQkJCQkJCSAgIDw8IHNoaWZ0ICovCisjZGVmaW5lIEhBTEZEVVBfQUxUX0JFQl9UUlVOQ0FUSU9OX01BWCAgICAgICAgICAweGYJLyogQWx0ZXJuYXRlIEJpbmFyeQorCQkJCQkJCSAgIEV4cG9uZW50aWFsIEJhY2tvZmYKKwkJCQkJCQkgICBUcnVuY2F0aW9uIG1heCB2YWwgKi8KKyNkZWZpbmUgSEFMRkRVUF9BTFRfQkVCICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwODAwMDAJLyogQWx0ZXJuYXRlCisJCQkJCQkJCSAgIEJpbmFyeQorCQkJCQkJCQkgICBFeHBvbmVudGlhbAorCQkJCQkJCQkgICBCYWNrb2ZmICovCisjZGVmaW5lIEhBTEZEVVBfQkFDS19QUkVTU1VSRV9OT19CQUNLT0ZGICAgICAgICAweDAwMDQwMDAwCS8qIEJhY2sKKwkJCQkJCQkJICAgcHJlc3N1cmUgbm8KKwkJCQkJCQkJICAgYmFja29mZiAqLworI2RlZmluZSBIQUxGRFVQX05PX0JBQ0tPRkYgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyMDAwMAkvKiBObyBCYWNrb2ZmICovCisjZGVmaW5lIEhBTEZEVVBfRVhDRVNTSVZFX0RFRkVSICAgICAgICAgICAgICAgICAweDAwMDEwMDAwCS8qIEV4Y2Vzc2l2ZQorCQkJCQkJCQkgICBEZWZlciAqLworI2RlZmluZSBIQUxGRFVQX01BWF9SRVRSQU5TTUlTU0lPTl9TSElGVCAgICAgICAgKDMxIC0gMTkpCS8qIE1heGltdW0KKwkJCQkJCQkJICAgUmV0cmFuc21pc3Npb24KKwkJCQkJCQkJICAgPDwgc2hpZnQgKi8KKyNkZWZpbmUgSEFMRkRVUF9NQVhfUkVUUkFOU01JU1NJT05fTUFYICAgICAgICAgIDB4ZgkvKiBNYXhpbXVtCisJCQkJCQkJICAgUmV0cmFuc21pc3Npb24gbWF4CisJCQkJCQkJICAgdmFsICovCisjZGVmaW5lIEhBTEZEVVBfQ09MTElTSU9OX1dJTkRPV19TSElGVCAgICAgICAgICAoMzEgLSAzMSkJLyogQ29sbGlzaW9uCisJCQkJCQkJCSAgIFdpbmRvdyA8PAorCQkJCQkJCQkgICBzaGlmdCAqLworI2RlZmluZSBIQUxGRFVQX0NPTExJU0lPTl9XSU5ET1dfTUFYICAgICAgICAgICAgMHgzZgkvKiBDb2xsaXNpb24gV2luZG93IG1heAorCQkJCQkJCSAgIHZhbCAqLworI2RlZmluZSBIQUxGRFVQX0FMVF9CRUJfVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMEYwMDAwMAorI2RlZmluZSBIQUxGRFVQX1JFVFJBTlNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwRjAwMAorI2RlZmluZSBIQUxGRFVQX0NPTF9XSU5ET1dfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAzRgorCisvKiBVQ0MgR0VUSCBVQ0NTIChFdGhlcm5ldCBTdGF0dXMgUmVnaXN0ZXIpICovCisjZGVmaW5lIFVDQ1NfQlBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAyCS8qIEJhY2sgcHJlc3N1cmUgKGluCisJCQkJCQkJICAgaGFsZiBkdXBsZXggbW9kZSkgKi8KKyNkZWZpbmUgVUNDU19QQVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIJLyogUGF1c2Ugc3RhdGUgKGluIGZ1bGwKKwkJCQkJCQkgICBkdXBsZXggbW9kZSkgKi8KKyNkZWZpbmUgVUNDU19NUEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEJLyogTWFnaWMgUGFja2V0CisJCQkJCQkJICAgRGV0ZWN0ZWQgKi8KKworLyogVUNDIEdFVEggTUlJTUNGRyAoTUlJIE1hbmFnZW1lbnQgQ29uZmlndXJhdGlvbiBSZWdpc3RlcikgKi8KKyNkZWZpbmUgTUlJTUNGR19SRVNFVF9NQU5BR0VNRU5UICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAJLyogUmVzZXQKKwkJCQkJCQkJICAgbWFuYWdlbWVudCAqLworI2RlZmluZSBNSUlNQ0ZHX05PX1BSRUFNQkxFICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAkvKiBQcmVhbWJsZQorCQkJCQkJCQkgICBzdXBwcmVzcyAqLworI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9TSElGVCAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIGNsb2NrIGRpdmlkZQorCQkJCQkJCQkgICA8PCBzaGlmdCAqLworI2RlZmluZSBNSUlNQ0ZHX0NMT0NLX0RJVklERV9NQVggICAgICAgICAgICAgICAgMHhmCS8qIGNsb2NrIGRpdmlkZSBtYXggdmFsCisJCQkJCQkJICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMiAgICAweDAwMDAwMDAwCS8qIGRpdmlkZSBieSAyICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNCAgICAweDAwMDAwMDAxCS8qIGRpdmlkZSBieSA0ICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNiAgICAweDAwMDAwMDAyCS8qIGRpdmlkZSBieSA2ICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfOCAgICAweDAwMDAwMDAzCS8qIGRpdmlkZSBieSA4ICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTAgICAweDAwMDAwMDA0CS8qIGRpdmlkZSBieSAxMAorCQkJCQkJCQkgKi8KKyNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNCAgIDB4MDAwMDAwMDUJLyogZGl2aWRlIGJ5IDE0CisJCQkJCQkJCSAqLworI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzE2ICAgMHgwMDAwMDAwOAkvKiBkaXZpZGUgYnkgMTYKKwkJCQkJCQkJICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMjAgICAweDAwMDAwMDA2CS8qIGRpdmlkZSBieSAyMAorCQkJCQkJCQkgKi8KKyNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8yOCAgIDB4MDAwMDAwMDcJLyogZGl2aWRlIGJ5IDI4CisJCQkJCQkJCSAqLworI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzMyICAgMHgwMDAwMDAwOQkvKiBkaXZpZGUgYnkgMzIKKwkJCQkJCQkJICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfNDggICAweDAwMDAwMDBhCS8qIGRpdmlkZSBieSA0OAorCQkJCQkJCQkgKi8KKyNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV82NCAgIDB4MDAwMDAwMGIJLyogZGl2aWRlIGJ5IDY0CisJCQkJCQkJCSAqLworI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzgwICAgMHgwMDAwMDAwYwkvKiBkaXZpZGUgYnkgODAKKwkJCQkJCQkJICovCisjZGVmaW5lIE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTEyICAweDAwMDAwMDBkCS8qIGRpdmlkZSBieQorCQkJCQkJCQkgICAxMTIgKi8KKyNkZWZpbmUgTUlJTUNGR19NQU5BR0VNRU5UX0NMT0NLX0RJVklERV9CWV8xNjAgIDB4MDAwMDAwMGUJLyogZGl2aWRlIGJ5CisJCQkJCQkJCSAgIDE2MCAqLworI2RlZmluZSBNSUlNQ0ZHX01BTkFHRU1FTlRfQ0xPQ0tfRElWSURFX0JZXzIyNCAgMHgwMDAwMDAwZgkvKiBkaXZpZGUgYnkKKwkJCQkJCQkJICAgMjI0ICovCisKKy8qIFVDQyBHRVRIIE1JSU1DT00gKE1JSSBNYW5hZ2VtZW50IENvbW1hbmQgUmVnaXN0ZXIpICovCisjZGVmaW5lIE1JSU1DT01fU0NBTl9DWUNMRSAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFNjYW4gY3ljbGUgKi8KKyNkZWZpbmUgTUlJTUNPTV9SRUFEX0NZQ0xFICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEJLyogUmVhZCBjeWNsZSAqLworCisvKiBVQ0MgR0VUSCBNSUlNQUREIChNSUkgTWFuYWdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyKSAqLworI2RlZmluZSBNSUlNQUREX1BIWV9BRERSRVNTX1NISUZUICAgICAgICAgICAgICAgKDMxIC0gMjMpCS8qIFBIWSBBZGRyZXNzCisJCQkJCQkJCSAgIDw8IHNoaWZ0ICovCisjZGVmaW5lIE1JSU1BRERfUEhZX1JFR0lTVEVSX1NISUZUICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogUEhZIFJlZ2lzdGVyCisJCQkJCQkJCSAgIDw8IHNoaWZ0ICovCisKKy8qIFVDQyBHRVRIIE1JSU1DT04gKE1JSSBNYW5hZ2VtZW50IENvbnRyb2wgUmVnaXN0ZXIpICovCisjZGVmaW5lIE1JSU1DT05fUEhZX0NPTlRST0xfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAzMSkJLyogUEhZIENvbnRyb2wKKwkJCQkJCQkJICAgPDwgc2hpZnQgKi8KKyNkZWZpbmUgTUlJTUNPTl9QSFlfU1RBVFVTX1NISUZUICAgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQSFkgU3RhdHVzCisJCQkJCQkJCSAgIDw8IHNoaWZ0ICovCisKKy8qIFVDQyBHRVRIIE1JSU1JTkQgKE1JSSBNYW5hZ2VtZW50IEluZGljYXRvciBSZWdpc3RlcikgKi8KKyNkZWZpbmUgTUlJTUlORF9OT1RfVkFMSUQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQJLyogTm90IHZhbGlkICovCisjZGVmaW5lIE1JSU1JTkRfU0NBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCS8qIFNjYW4gaW4KKwkJCQkJCQkJICAgcHJvZ3Jlc3MgKi8KKyNkZWZpbmUgTUlJTUlORF9CVVNZICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKworLyogVUNDIEdFVEggSUZTVEFUIChJbnRlcmZhY2UgU3RhdHVzIFJlZ2lzdGVyKSAqLworI2RlZmluZSBJRlNUQVRfRVhDRVNTX0RFRkVSICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAkvKiBFeGNlc3NpdmUKKwkJCQkJCQkJICAgdHJhbnNtaXNzaW9uCisJCQkJCQkJCSAgIGRlZmVyICovCisKKy8qIFVDQyBHRVRIIE1BQ1NUTkFERFIxIChTdGF0aW9uIEFkZHJlc3MgUGFydCAxIFJlZ2lzdGVyKSAqLworI2RlZmluZSBNQUNTVE5BRERSMV9PQ1RFVF82X1NISUZUICAgICAgICAgICAgICAgKDMxIC0gIDcpCS8qIFN0YXRpb24KKwkJCQkJCQkJICAgYWRkcmVzcyA2dGgKKwkJCQkJCQkJICAgb2N0ZXQgPDwKKwkJCQkJCQkJICAgc2hpZnQgKi8KKyNkZWZpbmUgTUFDU1ROQUREUjFfT0NURVRfNV9TSElGVCAgICAgICAgICAgICAgICgzMSAtIDE1KQkvKiBTdGF0aW9uCisJCQkJCQkJCSAgIGFkZHJlc3MgNXRoCisJCQkJCQkJCSAgIG9jdGV0IDw8CisJCQkJCQkJCSAgIHNoaWZ0ICovCisjZGVmaW5lIE1BQ1NUTkFERFIxX09DVEVUXzRfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAyMykJLyogU3RhdGlvbgorCQkJCQkJCQkgICBhZGRyZXNzIDR0aAorCQkJCQkJCQkgICBvY3RldCA8PAorCQkJCQkJCQkgICBzaGlmdCAqLworI2RlZmluZSBNQUNTVE5BRERSMV9PQ1RFVF8zX1NISUZUICAgICAgICAgICAgICAgKDMxIC0gMzEpCS8qIFN0YXRpb24KKwkJCQkJCQkJICAgYWRkcmVzcyAzcmQKKwkJCQkJCQkJICAgb2N0ZXQgPDwKKwkJCQkJCQkJICAgc2hpZnQgKi8KKworLyogVUNDIEdFVEggTUFDU1ROQUREUjIgKFN0YXRpb24gQWRkcmVzcyBQYXJ0IDIgUmVnaXN0ZXIpICovCisjZGVmaW5lIE1BQ1NUTkFERFIyX09DVEVUXzJfU0hJRlQgICAgICAgICAgICAgICAoMzEgLSAgNykJLyogU3RhdGlvbgorCQkJCQkJCQkgICBhZGRyZXNzIDJuZAorCQkJCQkJCQkgICBvY3RldCA8PAorCQkJCQkJCQkgICBzaGlmdCAqLworI2RlZmluZSBNQUNTVE5BRERSMl9PQ1RFVF8xX1NISUZUICAgICAgICAgICAgICAgKDMxIC0gMTUpCS8qIFN0YXRpb24KKwkJCQkJCQkJICAgYWRkcmVzcyAxc3QKKwkJCQkJCQkJICAgb2N0ZXQgPDwKKwkJCQkJCQkJICAgc2hpZnQgKi8KKworLyogVUNDIEdFVEggVUVNUFIgKEV0aGVybmV0IE1hYyBQYXJhbWV0ZXIgUmVnaXN0ZXIpICovCisjZGVmaW5lIFVFTVBSX1BBVVNFX1RJTUVfVkFMVUVfU0hJRlQgICAgICAgICAgICAoMzEgLSAxNSkJLyogUGF1c2UgdGltZQorCQkJCQkJCQkgICB2YWx1ZSA8PAorCQkJCQkJCQkgICBzaGlmdCAqLworI2RlZmluZSBVRU1QUl9FWFRFTkRFRF9QQVVTRV9USU1FX1ZBTFVFX1NISUZUICAgKDMxIC0gMzEpCS8qIEV4dGVuZGVkCisJCQkJCQkJCSAgIHBhdXNlIHRpbWUKKwkJCQkJCQkJICAgdmFsdWUgPDwKKwkJCQkJCQkJICAgc2hpZnQgKi8KKworLyogVUNDIEdFVEggVVRCSVBBUiAoVGVuIEJpdCBJbnRlcmZhY2UgUGh5c2ljYWwgQWRkcmVzcyBSZWdpc3RlcikgKi8KKyNkZWZpbmUgVVRCSVBBUl9QSFlfQUREUkVTU19TSElGVCAgICAgICAgICAgICAgICgzMSAtIDMxKQkvKiBQaHkgYWRkcmVzcworCQkJCQkJCQkgICA8PCBzaGlmdCAqLworI2RlZmluZSBVVEJJUEFSX1BIWV9BRERSRVNTX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAxZgkvKiBQaHkgYWRkcmVzcworCQkJCQkJCQkgICBtYXNrICovCisKKy8qIFVDQyBHRVRIIFVFU0NSIChFdGhlcm5ldCBTdGF0aXN0aWNzIENvbnRyb2wgUmVnaXN0ZXIpICovCisjZGVmaW5lIFVFU0NSX0FVVE9aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAJLyogQXV0b21hdGljYWxseSB6ZXJvCisJCQkJCQkJICAgYWRkcmVzc2VkCisJCQkJCQkJICAgc3RhdGlzdGljYWwgY291bnRlcgorCQkJCQkJCSAgIHZhbHVlcyAqLworI2RlZmluZSBVRVNDUl9DTFJDTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwCS8qIENsZWFyIGFsbCBzdGF0aXN0aWNzCisJCQkJCQkJICAgY291bnRlcnMgKi8KKyNkZWZpbmUgVUVTQ1JfTUFYQ09WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICgxNSAtICA3KQkvKiBNYXgKKwkJCQkJCQkJICAgQ29hbGVzY2luZworCQkJCQkJCQkgICBWYWx1ZSA8PAorCQkJCQkJCQkgICBzaGlmdCAqLworI2RlZmluZSBVRVNDUl9TQ09WX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgKDE1IC0gMTUpCS8qIFN0YXR1cworCQkJCQkJCQkgICBDb2FsZXNjaW5nCisJCQkJCQkJCSAgIFZhbHVlIDw8CisJCQkJCQkJCSAgIHNoaWZ0ICovCisKKy8qIFVDQyBHRVRIIFVEU1IgKERhdGEgU3luY2hyb25pemF0aW9uIFJlZ2lzdGVyKSAqLworI2RlZmluZSBVRFNSX01BR0lDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNjdFCisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3RocmVhZF9kYXRhX3R4IHsKKwl1OCByZXMwWzEwNF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90aHJlYWRfZGF0YV90eF90OworCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeCB7CisJdTggcmVzMFs0MF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90aHJlYWRfZGF0YV9yeF90OworCisvKiBTZW5kIFF1ZXVlIFF1ZXVlLURlc2NyaXB0b3IgKi8KK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3NlbmRfcXVldWVfcWQgeworCXUzMiBiZF9yaW5nX2Jhc2U7CS8qIHBvaW50ZXIgdG8gQkQgcmluZyBiYXNlIGFkZHJlc3MgKi8KKwl1OCByZXMwWzB4OF07CisJdTMyIGxhc3RfYmRfY29tcGxldGVkX2FkZHJlc3M7LyogaW5pdGlhbGl6ZSB0byBsYXN0IGVudHJ5IGluIEJEIHJpbmcgKi8KKwl1OCByZXMxWzB4MzBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfc2VuZF9xdWV1ZV9xZF90OworCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9zZW5kX3F1ZXVlX21lbV9yZWdpb24geworCXVjY19nZXRoX3NlbmRfcXVldWVfcWRfdCBzcXFkW05VTV9UWF9RVUVVRVNdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfc2VuZF9xdWV1ZV9tZW1fcmVnaW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3RocmVhZF90eF9wcmFtIHsKKwl1OCByZXMwWzY0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3RocmVhZF90eF9wcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3RocmVhZF9yeF9wcmFtIHsKKwl1OCByZXMwWzEyOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF90aHJlYWRfcnhfcHJhbV90OworCisjZGVmaW5lIFRIUkVBRF9SWF9QUkFNX0FERElUSU9OQUxfRk9SX0VYVEVOREVEX0ZJTFRFUklORyAgICAgICAgNjQKKyNkZWZpbmUgVEhSRUFEX1JYX1BSQU1fQURESVRJT05BTF9GT1JfRVhURU5ERURfRklMVEVSSU5HXzggICAgICA2NAorI2RlZmluZSBUSFJFQURfUlhfUFJBTV9BRERJVElPTkFMX0ZPUl9FWFRFTkRFRF9GSUxURVJJTkdfMTYgICAgIDk2CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3NjaGVkdWxlciB7CisJdTE2IGNwdWNvdW50MDsJCS8qIENQVSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjcHVjb3VudDE7CQkvKiBDUFUgcGFja2V0IGNvdW50ZXIgKi8KKwl1MTYgY2Vjb3VudDA7CQkvKiBRRSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjZWNvdW50MTsJCS8qIFFFIHBhY2tldCBjb3VudGVyICovCisJdTE2IGNwdWNvdW50MjsJCS8qIENQVSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjcHVjb3VudDM7CQkvKiBDUFUgcGFja2V0IGNvdW50ZXIgKi8KKwl1MTYgY2Vjb3VudDI7CQkvKiBRRSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjZWNvdW50MzsJCS8qIFFFIHBhY2tldCBjb3VudGVyICovCisJdTE2IGNwdWNvdW50NDsJCS8qIENQVSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjcHVjb3VudDU7CQkvKiBDUFUgcGFja2V0IGNvdW50ZXIgKi8KKwl1MTYgY2Vjb3VudDQ7CQkvKiBRRSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjZWNvdW50NTsJCS8qIFFFIHBhY2tldCBjb3VudGVyICovCisJdTE2IGNwdWNvdW50NjsJCS8qIENQVSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjcHVjb3VudDc7CQkvKiBDUFUgcGFja2V0IGNvdW50ZXIgKi8KKwl1MTYgY2Vjb3VudDY7CQkvKiBRRSBwYWNrZXQgY291bnRlciAqLworCXUxNiBjZWNvdW50NzsJCS8qIFFFIHBhY2tldCBjb3VudGVyICovCisJdTMyIHdlaWdodHN0YXR1c1tOVU1fVFhfUVVFVUVTXTsJLyogYWNjdW11bGF0ZWQgd2VpZ2h0IGZhY3RvciAqLworCXUzMiBydHNyc2hhZG93OwkJLyogdGVtcG9yYXJ5IHZhcmlhYmxlIGhhbmRsZWQgYnkgUUUgKi8KKwl1MzIgdGltZTsJCS8qIHRlbXBvcmFyeSB2YXJpYWJsZSBoYW5kbGVkIGJ5IFFFICovCisJdTMyIHR0bDsJCS8qIHRlbXBvcmFyeSB2YXJpYWJsZSBoYW5kbGVkIGJ5IFFFICovCisJdTMyIG1ibGludGVydmFsOwkvKiBtYXggYnVyc3QgbGVuZ3RoIGludGVydmFsICovCisJdTE2IG5vcnRzcmJ5dGV0aW1lOwkvKiBub3JtYWxpemVkIHZhbHVlIG9mIGJ5dGUgdGltZSBpbiB0c3IgdW5pdHMgKi8KKwl1OCBmcmFjc2l6OwkJLyogcmFkaXggMiBsb2cgdmFsdWUgb2YgZGVub20uIG9mCisJCQkJICAgTm9yVFNSQnl0ZVRpbWUgKi8KKwl1OCByZXMwWzFdOworCXU4IHN0cmljdHByaW9yaXR5cTsJLyogU3RyaWN0IFByaW9yaXR5IE1hc2sgcmVnaXN0ZXIgKi8KKwl1OCB0eGFzYXA7CQkvKiBUcmFuc21pdCBBU0FQIHJlZ2lzdGVyICovCisJdTggZXh0cmFidzsJCS8qIEV4dHJhIEJhbmRXaWR0aCByZWdpc3RlciAqLworCXU4IG9sZHdmcW1hc2s7CQkvKiB0ZW1wb3JhcnkgdmFyaWFibGUgaGFuZGxlZCBieSBRRSAqLworCXU4IHdlaWdodGZhY3RvcltOVU1fVFhfUVVFVUVTXTsKKwkJCQkgICAgICAvKio8IHdlaWdodCBmYWN0b3IgZm9yIHF1ZXVlcyAgICovCisJdTMyIG1pbnc7CQkvKiB0ZW1wb3JhcnkgdmFyaWFibGUgaGFuZGxlZCBieSBRRSAqLworCXU4IHJlczFbMHg3MCAtIDB4NjRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfc2NoZWR1bGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbSB7CisJdTMyIHNpY29sdHg7CQkvKiBzaW5nbGUgY29sbGlzaW9uICovCisJdTMyIG11bGNvbHR4OwkJLyogbXVsdGlwbGUgY29sbGlzaW9uICovCisJdTMyIGxhdGVjb2x0eGZyOwkvKiBsYXRlIGNvbGxpc2lvbiAqLworCXUzMiBmcmFib3J0ZHVlY29sOwkvKiBmcmFtZXMgYWJvcnRlZCBkdWUgdG8gdHJhbnNtaXQgY29sbGlzaW9uICovCisJdTMyIGZybG9zdGlubWFjdHhlcjsJLyogZnJhbWVzIGxvc3QgZHVlIHRvIGludGVybmFsIE1BQyBlcnJvcgorCQkJCSAgIHRyYW5zbWlzc2lvbiB0aGF0IGFyZSBub3QgY291bnRlZCBvbiBhbnkKKwkJCQkgICBvdGhlciBjb3VudGVyICovCisJdTMyIGNhcnJpZXJzZW5zZWVydHg7CS8qIGNhcnJpZXIgc2Vuc2UgZXJyb3IgKi8KKwl1MzIgZnJ0eG9rOwkJLyogZnJhbWVzIHRyYW5zbWl0dGVkIE9LICovCisJdTMyIHR4ZnJleGNlc3NpdmVkZWZlcjsJLyogZnJhbWVzIHdpdGggZGVmZmVyYWwgdGltZSBncmVhdGVyIHRoYW4KKwkJCQkgICBzcGVjaWZpZWQgdGhyZXNob2xkICovCisJdTMyIHR4cGt0czI1NjsJCS8qIHRvdGFsIHBhY2tldHMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gMjU2CisJCQkJICAgYW5kIDUxMSBvY3RldHMgKi8KKwl1MzIgdHhwa3RzNTEyOwkJLyogdG90YWwgcGFja2V0cyAoaW5jbHVkaW5nIGJhZCkgYmV0d2VlbiA1MTIKKwkJCQkgICBhbmQgMTAyMyBvY3RldHMgKi8KKwl1MzIgdHhwa3RzMTAyNDsJCS8qIHRvdGFsIHBhY2tldHMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gMTAyNAorCQkJCSAgIGFuZCAxNTE4IG9jdGV0cyAqLworCXUzMiB0eHBrdHNqdW1ibzsJLyogdG90YWwgcGFja2V0cyAoaW5jbHVkaW5nIGJhZCkgYmV0d2VlbiAxMDI0CisJCQkJICAgYW5kIE1BWExlbmd0aCBvY3RldHMgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3R4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90OworCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9yeF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW0geworCXUzMiBmcnJ4ZmNzZXI7CQkvKiBmcmFtZXMgd2l0aCBjcmMgZXJyb3IgKi8KKwl1MzIgZnJhbGlnbmVyOwkJLyogZnJhbWVzIHdpdGggYWxpZ25tZW50IGVycm9yICovCisJdTMyIGlucmFuZ2VsZW5yeGVyOwkvKiBpbiByYW5nZSBsZW5ndGggZXJyb3IgKi8KKwl1MzIgb3V0cmFuZ2VsZW5yeGVyOwkvKiBvdXQgb2YgcmFuZ2UgbGVuZ3RoIGVycm9yICovCisJdTMyIGZydG9vbG9uZzsJCS8qIGZyYW1lIHRvbyBsb25nICovCisJdTMyIHJ1bnQ7CQkvKiBydW50ICovCisJdTMyIHZlcnlsb25nZXZlbnQ7CS8qIHZlcnkgbG9uZyBldmVudCAqLworCXUzMiBzeW1ib2xlcnJvcjsJLyogc3ltYm9sIGVycm9yICovCisJdTMyIGRyb3Bic3k7CQkvKiBkcm9wIGJlY2F1c2Ugb2YgQkQgbm90IHJlYWR5ICovCisJdTggcmVzMFsweDhdOworCXUzMiBtaXNtYXRjaGRyb3A7CS8qIGRyb3AgYmVjYXVzZSBvZiBNQUMgZmlsdGVyaW5nIChlLmcuIGFkZHJlc3MKKwkJCQkgICBvciB0eXBlIG1pc21hdGNoKSAqLworCXUzMiB1bmRlcnBrdHM7CQkvKiB0b3RhbCBmcmFtZXMgbGVzcyB0aGFuIDY0IG9jdGV0cyAqLworCXUzMiBwa3RzMjU2OwkJLyogdG90YWwgZnJhbWVzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDI1NiBhbmQKKwkJCQkgICA1MTEgb2N0ZXRzICovCisJdTMyIHBrdHM1MTI7CQkvKiB0b3RhbCBmcmFtZXMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gNTEyIGFuZAorCQkJCSAgIDEwMjMgb2N0ZXRzICovCisJdTMyIHBrdHMxMDI0OwkJLyogdG90YWwgZnJhbWVzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDEwMjQKKwkJCQkgICBhbmQgMTUxOCBvY3RldHMgKi8KKwl1MzIgcGt0c2p1bWJvOwkJLyogdG90YWwgZnJhbWVzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDEwMjQKKwkJCQkgICBhbmQgTUFYTGVuZ3RoIG9jdGV0cyAqLworCXUzMiBmcmxvc3Npbm1hY2VyOwkvKiBmcmFtZXMgbG9zdCBiZWNhdXNlIG9mIGludGVybmFsIE1BQyBlcnJvcgorCQkJCSAgIHRoYXQgaXMgbm90IGNvdW50ZWQgaW4gYW55IG90aGVyIGNvdW50ZXIgKi8KKwl1MzIgcGF1c2VmcjsJCS8qIHBhdXNlIGZyYW1lcyAqLworCXU4IHJlczFbMHg0XTsKKwl1MzIgcmVtb3ZldmxhbjsJCS8qIHRvdGFsIGZyYW1lcyB0aGF0IGhhZCB0aGVpciBWTEFOIHRhZyByZW1vdmVkCisJCQkJICovCisJdTMyIHJlcGxhY2V2bGFuOwkvKiB0b3RhbCBmcmFtZXMgdGhhdCBoYWQgdGhlaXIgVkxBTiB0YWcKKwkJCQkgICByZXBsYWNlZCAqLworCXUzMiBpbnNlcnR2bGFuOwkJLyogdG90YWwgZnJhbWVzIHRoYXQgaGFkIHRoZWlyIFZMQU4gdGFnCisJCQkJICAgaW5zZXJ0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfcHJhbV90OworCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ19lbnRyeSB7CisJdTMyIGludGVycnVwdGNvYWxlc2NpbmdtYXh2YWx1ZTsJLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgbWF4CisJCQkJCQkgICB2YWx1ZSAqLworCXUzMiBpbnRlcnJ1cHRjb2FsZXNjaW5nY291bnRlcjsJLyogaW50ZXJydXB0IGNvYWxlc2NpbmcgY291bnRlciwKKwkJCQkJICAgaW5pdGlhbGl6ZSB0bworCQkJCQkgICBpbnRlcnJ1cHRjb2FsZXNjaW5nbWF4dmFsdWUgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX2VudHJ5X3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX3RhYmxlIHsKKwl1Y2NfZ2V0aF9yeF9pbnRlcnJ1cHRfY29hbGVzY2luZ19lbnRyeV90IGNvYWxlc2NpbmdlbnRyeVtOVU1fUlhfUVVFVUVTXTsKKwkJCQkgICAgICAgLyoqPCBpbnRlcnJ1cHQgY29hbGVzY2luZyBlbnRyeSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfcnhfaW50ZXJydXB0X2NvYWxlc2NpbmdfdGFibGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfcnhfcHJlZmV0Y2hlZF9iZHMgeworCXFlX2JkX3QgYmRbTlVNX0JEU19JTl9QUkVGRVRDSEVEX0JEU107CS8qIHByZWZldGNoZWQgYmQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3J4X3ByZWZldGNoZWRfYmRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeSB7CisJdTMyIGJkYmFzZXB0cjsJCS8qIEJEIGJhc2UgcG9pbnRlciAqLworCXUzMiBiZHB0cjsJCS8qIEJEIHBvaW50ZXIgKi8KKwl1MzIgZXh0ZXJuYWxiZGJhc2VwdHI7CS8qIGV4dGVybmFsIEJEIGJhc2UgcG9pbnRlciAqLworCXUzMiBleHRlcm5hbGJkcHRyOwkvKiBleHRlcm5hbCBCRCBwb2ludGVyICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9iZF9xdWV1ZXNfZW50cnlfdDsKKwordHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfdHhfZ2xvYmFsX3ByYW0geworCXUxNiB0ZW1vZGVyOworCXU4IHJlczBbMHgzOCAtIDB4MDJdOworCXUzMiBzcXB0cjsJCS8qIGEgYmFzZSBwb2ludGVyIHRvIHNlbmQgcXVldWUgbWVtb3J5IHJlZ2lvbiAqLworCXUzMiBzY2hlZHVsZXJiYXNlcG9pbnRlcjsJLyogYSBiYXNlIHBvaW50ZXIgdG8gc2NoZWR1bGVyIG1lbW9yeQorCQkJCQkgICByZWdpb24gKi8KKwl1MzIgdHhybW9uYmFzZXB0cjsJLyogYmFzZSBwb2ludGVyIHRvIFR4IFJNT04gc3RhdGlzdGljcyBjb3VudGVyICovCisJdTMyIHRzdGF0ZTsJCS8qIHR4IGludGVybmFsIHN0YXRlLiBIaWdoIGJ5dGUgY29udGFpbnMKKwkJCQkgICBmdW5jdGlvbiBjb2RlICovCisJdTggaXBob2Zmc2V0W1RYX0lQX09GRlNFVF9FTlRSWV9NQVhdOworCXUzMiB2dGFndGFibGVbMHg4XTsJLyogOCA0LWJ5dGUgVkxBTiB0YWdzICovCisJdTMyIHRxcHRyOwkJLyogYSBiYXNlIHBvaW50ZXIgdG8gdGhlIFR4IFF1ZXVlcyBNZW1vcnkKKwkJCQkgICBSZWdpb24gKi8KKwl1OCByZXMyWzB4ODAgLSAweDc0XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3R4X2dsb2JhbF9wcmFtX3Q7CisKKy8qIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgRXh0ZW5kZWQgRmlsdGVyaW5nIEdsb2JhbCBQYXJhbWV0ZXJzIGluIFBSQU0gKi8KK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX2V4Zl9nbG9iYWxfcHJhbSB7CisJdTMyIGwycGNkcHRyOwkJLyogaW5kaXZpZHVhbCBhZGRyZXNzIGZpbHRlciwgaGlnaCAqLworCXU4IHJlczBbMHgxMCAtIDB4MDRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfZXhmX2dsb2JhbF9wcmFtX3Q7CisKK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X2dsb2JhbF9wcmFtIHsKKwl1MzIgcmVtb2RlcjsJCS8qIGV0aGVybmV0IG1vZGUgcmVnLiAqLworCXUzMiBycXB0cjsJCS8qIGJhc2UgcG9pbnRlciB0byB0aGUgUnggUXVldWVzIE1lbW9yeSBSZWdpb24qLworCXUzMiByZXMwWzB4MV07CisJdTggcmVzMVsweDIwIC0gMHhDXTsKKwl1MTYgdHlwZW9ybGVuOwkJLyogY3V0b2ZmIHBvaW50IGxlc3MgdGhhbiB3aGljaCwgdHlwZS9sZW4gZmllbGQKKwkJCQkgICBpcyBjb25zaWRlcmVkIGxlbmd0aCAqLworCXU4IHJlczJbMHgxXTsKKwl1OCByeGdzdHBhY2s7CQkvKiBhY2tub3dsZWRnZW1lbnQgb24gR1JBQ0VGVUwgU1RPUCBSWCBjb21tYW5kKi8KKwl1MzIgcnhybW9uYmFzZXB0cjsJLyogYmFzZSBwb2ludGVyIHRvIFJ4IFJNT04gc3RhdGlzdGljcyBjb3VudGVyICovCisJdTggcmVzM1sweDMwIC0gMHgyOF07CisJdTMyIGludGNvYWxlc2NpbmdwdHI7CS8qIEludGVycnVwdCBjb2FsZXNjaW5nIHRhYmxlIHBvaW50ZXIgKi8KKwl1OCByZXM0WzB4MzYgLSAweDM0XTsKKwl1OCByc3RhdGU7CQkvKiByeCBpbnRlcm5hbCBzdGF0ZS4gSGlnaCBieXRlIGNvbnRhaW5zCisJCQkJICAgZnVuY3Rpb24gY29kZSAqLworCXU4IHJlczVbMHg0NiAtIDB4MzddOworCXUxNiBtcmJscjsJCS8qIG1heCByZWNlaXZlIGJ1ZmZlciBsZW5ndGggcmVnLiAqLworCXUzMiByYmRxcHRyOwkJLyogYmFzZSBwb2ludGVyIHRvIFJ4QkQgcGFyYW1ldGVyIHRhYmxlCisJCQkJICAgZGVzY3JpcHRpb24gKi8KKwl1MTYgbWZscjsJCS8qIG1heCBmcmFtZSBsZW5ndGggcmVnLiAqLworCXUxNiBtaW5mbHI7CQkvKiBtaW4gZnJhbWUgbGVuZ3RoIHJlZy4gKi8KKwl1MTYgbWF4ZDE7CQkvKiBtYXggZG1hMSBsZW5ndGggcmVnLiAqLworCXUxNiBtYXhkMjsJCS8qIG1heCBkbWEyIGxlbmd0aCByZWcuICovCisJdTMyIGVjYW1wdHI7CQkvKiBleHRlcm5hbCBDQU0gYWRkcmVzcyAqLworCXUzMiBsMnF0OwkJLyogVkxBTiBwcmlvcml0eSBtYXBwaW5nIHRhYmxlLiAqLworCXUzMiBsM3F0WzB4OF07CQkvKiBJUCBwcmlvcml0eSBtYXBwaW5nIHRhYmxlLiAqLworCXUxNiB2bGFudHlwZTsJCS8qIHZsYW4gdHlwZSAqLworCXUxNiB2bGFudGNpOwkJLyogZGVmYXVsdCB2bGFuIHRjaSAqLworCXU4IGFkZHJlc3NmaWx0ZXJpbmdbNjRdOwkvKiBhZGRyZXNzIGZpbHRlcmluZyBkYXRhIHN0cnVjdHVyZSAqLworCXUzMiBleGZHbG9iYWxQYXJhbTsJLyogYmFzZSBhZGRyZXNzIGZvciBleHRlbmRlZCBmaWx0ZXJpbmcgZ2xvYmFsCisJCQkJICAgcGFyYW1ldGVycyAqLworCXU4IHJlczZbMHgxMDAgLSAweEM0XTsJLyogSW5pdGlhbGl6ZSB0byB6ZXJvICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90OworCisjZGVmaW5lIEdSQUNFRlVMX1NUT1BfQUNLTk9XTEVER0VfUlggICAgICAgICAgICAweDAxCisKKy8qIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgSW5pdEVuZXQgY29tbWFuZCAqLwordHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfaW5pdF9wcmFtIHsKKwl1OCByZXNpbml0MTsKKwl1OCByZXNpbml0MjsKKwl1OCByZXNpbml0MzsKKwl1OCByZXNpbml0NDsKKwl1MTYgcmVzaW5pdDU7CisJdTggcmVzMVsweDFdOworCXU4IGxhcmdlc3RleHRlcm5hbGxvb2t1cGtleXNpemU7CisJdTMyIHJnZnRnZnJ4Z2xvYmFsOworCXUzMiByeHRocmVhZFtFTkVUX0lOSVRfUEFSQU1fTUFYX0VOVFJJRVNfUlhdOwkvKiByeCB0aHJlYWRzICovCisJdTggcmVzMlsweDM4IC0gMHgzMF07CisJdTMyIHR4Z2xvYmFsOwkJLyogdHggZ2xvYmFsICovCisJdTMyIHR4dGhyZWFkW0VORVRfSU5JVF9QQVJBTV9NQVhfRU5UUklFU19UWF07CS8qIHR4IHRocmVhZHMgKi8KKwl1OCByZXMzWzB4MV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF9pbml0X3ByYW1fdDsKKworI2RlZmluZSBFTkVUX0lOSVRfUEFSQU1fUkdGX1NISUZUICAgICAgICAgICAgICAgKDMyIC0gNCkKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX1RHRl9TSElGVCAgICAgICAgICAgICAgICgzMiAtIDgpCisKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX1JJU0NfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwM2YKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX1BUUl9NQVNLICAgICAgICAgICAgICAgIDB4MDBmZmZmYzAKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX1NOVU1fTUFTSyAgICAgICAgICAgICAgIDB4ZmYwMDAwMDAKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX1NOVU1fU0hJRlQgICAgICAgICAgICAgIDI0CisKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUMSAgICAgICAgIDB4MDYKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUMiAgICAgICAgIDB4MzAKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUMyAgICAgICAgIDB4ZmYKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUNCAgICAgICAgIDB4MDAKKyNkZWZpbmUgRU5FVF9JTklUX1BBUkFNX01BR0lDX1JFU19JTklUNSAgICAgICAgIDB4MDQwMAorCisvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIDgyeHggQWRkcmVzcyBGaWx0ZXJpbmcgRW5ldCBBZGRyZXNzIGluIFBSQU0gKi8KK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoXzgyeHhfZW5ldF9hZGRyZXNzIHsKKwl1OCByZXMxWzB4Ml07CisJdTE2IGg7CQkJLyogYWRkcmVzcyAoTVNCKSAqLworCXUxNiBtOwkJCS8qIGFkZHJlc3MgKi8KKwl1MTYgbDsJCQkvKiBhZGRyZXNzIChMU0IpICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF84Mnh4X2VuZXRfYWRkcmVzc190OworCisvKiBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIDgyeHggQWRkcmVzcyBGaWx0ZXJpbmcgUFJBTSAqLwordHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfODJ4eF9hZGRyZXNzX2ZpbHRlcmluZ19wcmFtIHsKKwl1MzIgaWFkZHJfaDsJCS8qIGluZGl2aWR1YWwgYWRkcmVzcyBmaWx0ZXIsIGhpZ2ggKi8KKwl1MzIgaWFkZHJfbDsJCS8qIGluZGl2aWR1YWwgYWRkcmVzcyBmaWx0ZXIsIGxvdyAqLworCXUzMiBnYWRkcl9oOwkJLyogZ3JvdXAgYWRkcmVzcyBmaWx0ZXIsIGhpZ2ggKi8KKwl1MzIgZ2FkZHJfbDsJCS8qIGdyb3VwIGFkZHJlc3MgZmlsdGVyLCBsb3cgKi8KKwl1Y2NfZ2V0aF84Mnh4X2VuZXRfYWRkcmVzc190IHRhZGRyOworCXVjY19nZXRoXzgyeHhfZW5ldF9hZGRyZXNzX3QgcGFkZHJbTlVNX09GX1BBRERSU107CisJdTggcmVzMFsweDQwIC0gMHgzOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB1Y2NfZ2V0aF84Mnh4X2FkZHJlc3NfZmlsdGVyaW5nX3ByYW1fdDsKKworLyogR0VUSCBUeCBmaXJtd2FyZSBzdGF0aXN0aWNzIHN0cnVjdHVyZSwgdXNlZCB3aGVuIGNhbGxpbmcKKyAgIFVDQ19HRVRIX0dldFN0YXRpc3RpY3MuICovCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzIHsKKwl1MzIgc2ljb2x0eDsJCS8qIHNpbmdsZSBjb2xsaXNpb24gKi8KKwl1MzIgbXVsY29sdHg7CQkvKiBtdWx0aXBsZSBjb2xsaXNpb24gKi8KKwl1MzIgbGF0ZWNvbHR4ZnI7CS8qIGxhdGUgY29sbGlzaW9uICovCisJdTMyIGZyYWJvcnRkdWVjb2w7CS8qIGZyYW1lcyBhYm9ydGVkIGR1ZSB0byB0cmFuc21pdCBjb2xsaXNpb24gKi8KKwl1MzIgZnJsb3N0aW5tYWN0eGVyOwkvKiBmcmFtZXMgbG9zdCBkdWUgdG8gaW50ZXJuYWwgTUFDIGVycm9yCisJCQkJICAgdHJhbnNtaXNzaW9uIHRoYXQgYXJlIG5vdCBjb3VudGVkIG9uIGFueQorCQkJCSAgIG90aGVyIGNvdW50ZXIgKi8KKwl1MzIgY2FycmllcnNlbnNlZXJ0eDsJLyogY2FycmllciBzZW5zZSBlcnJvciAqLworCXUzMiBmcnR4b2s7CQkvKiBmcmFtZXMgdHJhbnNtaXR0ZWQgT0sgKi8KKwl1MzIgdHhmcmV4Y2Vzc2l2ZWRlZmVyOwkvKiBmcmFtZXMgd2l0aCBkZWZmZXJhbCB0aW1lIGdyZWF0ZXIgdGhhbgorCQkJCSAgIHNwZWNpZmllZCB0aHJlc2hvbGQgKi8KKwl1MzIgdHhwa3RzMjU2OwkJLyogdG90YWwgcGFja2V0cyAoaW5jbHVkaW5nIGJhZCkgYmV0d2VlbiAyNTYKKwkJCQkgICBhbmQgNTExIG9jdGV0cyAqLworCXUzMiB0eHBrdHM1MTI7CQkvKiB0b3RhbCBwYWNrZXRzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDUxMgorCQkJCSAgIGFuZCAxMDIzIG9jdGV0cyAqLworCXUzMiB0eHBrdHMxMDI0OwkJLyogdG90YWwgcGFja2V0cyAoaW5jbHVkaW5nIGJhZCkgYmV0d2VlbiAxMDI0CisJCQkJICAgYW5kIDE1MTggb2N0ZXRzICovCisJdTMyIHR4cGt0c2p1bWJvOwkvKiB0b3RhbCBwYWNrZXRzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDEwMjQKKwkJCQkgICBhbmQgTUFYTGVuZ3RoIG9jdGV0cyAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgdWNjX2dldGhfdHhfZmlybXdhcmVfc3RhdGlzdGljc190OworCisvKiBHRVRIIFJ4IGZpcm13YXJlIHN0YXRpc3RpY3Mgc3RydWN0dXJlLCB1c2VkIHdoZW4gY2FsbGluZworICAgVUNDX0dFVEhfR2V0U3RhdGlzdGljcy4gKi8KK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3MgeworCXUzMiBmcnJ4ZmNzZXI7CQkvKiBmcmFtZXMgd2l0aCBjcmMgZXJyb3IgKi8KKwl1MzIgZnJhbGlnbmVyOwkJLyogZnJhbWVzIHdpdGggYWxpZ25tZW50IGVycm9yICovCisJdTMyIGlucmFuZ2VsZW5yeGVyOwkvKiBpbiByYW5nZSBsZW5ndGggZXJyb3IgKi8KKwl1MzIgb3V0cmFuZ2VsZW5yeGVyOwkvKiBvdXQgb2YgcmFuZ2UgbGVuZ3RoIGVycm9yICovCisJdTMyIGZydG9vbG9uZzsJCS8qIGZyYW1lIHRvbyBsb25nICovCisJdTMyIHJ1bnQ7CQkvKiBydW50ICovCisJdTMyIHZlcnlsb25nZXZlbnQ7CS8qIHZlcnkgbG9uZyBldmVudCAqLworCXUzMiBzeW1ib2xlcnJvcjsJLyogc3ltYm9sIGVycm9yICovCisJdTMyIGRyb3Bic3k7CQkvKiBkcm9wIGJlY2F1c2Ugb2YgQkQgbm90IHJlYWR5ICovCisJdTggcmVzMFsweDhdOworCXUzMiBtaXNtYXRjaGRyb3A7CS8qIGRyb3AgYmVjYXVzZSBvZiBNQUMgZmlsdGVyaW5nIChlLmcuIGFkZHJlc3MKKwkJCQkgICBvciB0eXBlIG1pc21hdGNoKSAqLworCXUzMiB1bmRlcnBrdHM7CQkvKiB0b3RhbCBmcmFtZXMgbGVzcyB0aGFuIDY0IG9jdGV0cyAqLworCXUzMiBwa3RzMjU2OwkJLyogdG90YWwgZnJhbWVzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDI1NiBhbmQKKwkJCQkgICA1MTEgb2N0ZXRzICovCisJdTMyIHBrdHM1MTI7CQkvKiB0b3RhbCBmcmFtZXMgKGluY2x1ZGluZyBiYWQpIGJldHdlZW4gNTEyIGFuZAorCQkJCSAgIDEwMjMgb2N0ZXRzICovCisJdTMyIHBrdHMxMDI0OwkJLyogdG90YWwgZnJhbWVzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDEwMjQKKwkJCQkgICBhbmQgMTUxOCBvY3RldHMgKi8KKwl1MzIgcGt0c2p1bWJvOwkJLyogdG90YWwgZnJhbWVzIChpbmNsdWRpbmcgYmFkKSBiZXR3ZWVuIDEwMjQKKwkJCQkgICBhbmQgTUFYTGVuZ3RoIG9jdGV0cyAqLworCXUzMiBmcmxvc3Npbm1hY2VyOwkvKiBmcmFtZXMgbG9zdCBiZWNhdXNlIG9mIGludGVybmFsIE1BQyBlcnJvcgorCQkJCSAgIHRoYXQgaXMgbm90IGNvdW50ZWQgaW4gYW55IG90aGVyIGNvdW50ZXIgKi8KKwl1MzIgcGF1c2VmcjsJCS8qIHBhdXNlIGZyYW1lcyAqLworCXU4IHJlczFbMHg0XTsKKwl1MzIgcmVtb3ZldmxhbjsJCS8qIHRvdGFsIGZyYW1lcyB0aGF0IGhhZCB0aGVpciBWTEFOIHRhZyByZW1vdmVkCisJCQkJICovCisJdTMyIHJlcGxhY2V2bGFuOwkvKiB0b3RhbCBmcmFtZXMgdGhhdCBoYWQgdGhlaXIgVkxBTiB0YWcKKwkJCQkgICByZXBsYWNlZCAqLworCXUzMiBpbnNlcnR2bGFuOwkJLyogdG90YWwgZnJhbWVzIHRoYXQgaGFkIHRoZWlyIFZMQU4gdGFnCisJCQkJICAgaW5zZXJ0ZWQgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX3J4X2Zpcm13YXJlX3N0YXRpc3RpY3NfdDsKKworLyogR0VUSCBoYXJkd2FyZSBzdGF0aXN0aWNzIHN0cnVjdHVyZSwgdXNlZCB3aGVuIGNhbGxpbmcKKyAgIFVDQ19HRVRIX0dldFN0YXRpc3RpY3MuICovCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9oYXJkd2FyZV9zdGF0aXN0aWNzIHsKKwl1MzIgdHg2NDsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKGluY2x1ZGluZyBiYWQKKwkJCQkgICBmcmFtZXMpIHRyYW5zbWl0dGVkIHRoYXQgd2VyZSBleGFjdGx5IG9mIHRoZQorCQkJCSAgIG1pbmltYWwgbGVuZ3RoICg2NCBmb3IgdW4gdGFnZ2VkLCA2OCBmb3IKKwkJCQkgICB0YWdnZWQsIG9yIHdpdGggbGVuZ3RoIGV4YWN0bHkgZXF1YWwgdG8gdGhlCisJCQkJICAgcGFyYW1ldGVyIE1JTkxlbmd0aCAqLworCXUzMiB0eDEyNzsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKGluY2x1ZGluZyBiYWQKKwkJCQkgICBmcmFtZXMpIHRyYW5zbWl0dGVkIHRoYXQgd2VyZSBiZXR3ZWVuCisJCQkJICAgTUlOTGVuZ3RoIChJbmNsdWRpbmcgRkNTIGxlbmd0aD09NCkgYW5kIDEyNworCQkJCSAgIG9jdGV0cyAqLworCXUzMiB0eDI1NTsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKGluY2x1ZGluZyBiYWQKKwkJCQkgICBmcmFtZXMpIHRyYW5zbWl0dGVkIHRoYXQgd2VyZSBiZXR3ZWVuIDEyOAorCQkJCSAgIChJbmNsdWRpbmcgRkNTIGxlbmd0aD09NCkgYW5kIDI1NSBvY3RldHMgKi8KKwl1MzIgcng2NDsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgcmVjZWl2ZWQgaW5jbHVkaW5nCisJCQkJICAgYmFkIGZyYW1lcyB0aGF0IHdlcmUgZXhhY3RseSBvZiB0aGUgbW5pbmltYWwKKwkJCQkgICBsZW5ndGggKDY0IGJ5dGVzKSAqLworCXUzMiByeDEyNzsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgKGluY2x1ZGluZyBiYWQKKwkJCQkgICBmcmFtZXMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuIE1JTkxlbmd0aAorCQkJCSAgIChJbmNsdWRpbmcgRkNTIGxlbmd0aD09NCkgYW5kIDEyNyBvY3RldHMgKi8KKwl1MzIgcngyNTU7CQkvKiBUb3RhbCBudW1iZXIgb2YgZnJhbWVzIChpbmNsdWRpbmcgYmFkCisJCQkJICAgZnJhbWVzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbiAxMjgKKwkJCQkgICAoSW5jbHVkaW5nIEZDUyBsZW5ndGg9PTQpIGFuZCAyNTUgb2N0ZXRzICovCisJdTMyIHR4b2s7CQkvKiBUb3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlc2lkaW5nIGluIGZyYW1lcworCQkJCSAgIHRoYXQgd2hlcmUgaW52b2x2ZWQgaW4gc3VjY2VzZnVsbAorCQkJCSAgIHRyYW5zbWlzc2lvbiAqLworCXUxNiB0eGNmOwkJLyogVG90YWwgbnVtYmVyIG9mIFBBVVNFIGNvbnRyb2wgZnJhbWVzCisJCQkJICAgdHJhbnNtaXR0ZWQgYnkgdGhpcyBNQUMgKi8KKwl1MzIgdG1jYTsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgdGhhdCB3ZXJlIHRyYW5zbWl0dGVkCisJCQkJICAgc3VjY2VzZnVsbHkgd2l0aCB0aGUgZ3JvdXAgYWRkcmVzcyBiaXQgc2V0CisJCQkJICAgdGhhdCBhcmUgbm90IGJyb2FkY2FzdCBmcmFtZXMgKi8KKwl1MzIgdGJjYTsJCS8qIFRvdGFsIG51bWJlciBvZiBmcmFtZXMgdHJhbnNtaXR0ZWQKKwkJCQkgICBzdWNjZXNmdWxseSB0aGF0IGhhZCBkZXN0aW5hdGlvbiBhZGRyZXNzCisJCQkJICAgZmllbGQgZXF1YWwgdG8gdGhlIGJyb2FkY2FzdCBhZGRyZXNzICovCisJdTMyIHJ4Zm9rOwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBPSyAqLworCXUzMiByeGJvazsJCS8qIFRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgT0sgKi8KKwl1MzIgcmJ5dDsJCS8qIFRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW5jbHVkaW5nCisJCQkJICAgb2N0ZXRzIGluIGJhZCBmcmFtZXMuIE11c3QgYmUgaW1wbGVtZW50ZWQgaW4KKwkJCQkgICBIVyBiZWNhdXNlIGl0IGluY2x1ZGVzIG9jdGV0cyBpbiBmcmFtZXMgdGhhdAorCQkJCSAgIG5ldmVyIGV2ZW4gcmVhY2ggdGhlIFVDQyAqLworCXUzMiBybWNhOwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyB0aGF0IHdlcmUgcmVjZWl2ZWQKKwkJCQkgICBzdWNjZXNmdWxseSB3aXRoIHRoZSBncm91cCBhZGRyZXNzIGJpdCBzZXQKKwkJCQkgICB0aGF0IGFyZSBub3QgYnJvYWRjYXN0IGZyYW1lcyAqLworCXUzMiByYmNhOwkJLyogVG90YWwgbnVtYmVyIG9mIGZyYW1lcyByZWNlaXZlZCBzdWNjZXNmdWxseQorCQkJCSAgIHRoYXQgaGFkIGRlc3RpbmF0aW9uIGFkZHJlc3MgZXF1YWwgdG8gdGhlCisJCQkJICAgYnJvYWRjYXN0IGFkZHJlc3MgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIHVjY19nZXRoX2hhcmR3YXJlX3N0YXRpc3RpY3NfdDsKKworLyogVUNDIEdFVEggVHggZXJyb3JzIHJldHVybmVkIHZpYSBUeENvbmYgY2FsbGJhY2sgKi8KKyNkZWZpbmUgVFhfRVJST1JTX0RFRiAgICAgIDB4MDIwMAorI2RlZmluZSBUWF9FUlJPUlNfRVhERUYgICAgMHgwMTAwCisjZGVmaW5lIFRYX0VSUk9SU19MQyAgICAgICAweDAwODAKKyNkZWZpbmUgVFhfRVJST1JTX1JMICAgICAgIDB4MDA0MAorI2RlZmluZSBUWF9FUlJPUlNfUkNfTUFTSyAgMHgwMDNDCisjZGVmaW5lIFRYX0VSUk9SU19SQ19TSElGVCAyCisjZGVmaW5lIFRYX0VSUk9SU19VTiAgICAgICAweDAwMDIKKyNkZWZpbmUgVFhfRVJST1JTX0NTTCAgICAgIDB4MDAwMQorCisvKiBVQ0MgR0VUSCBSeCBlcnJvcnMgcmV0dXJuZWQgdmlhIFJ4U3RvcmUgY2FsbGJhY2sgKi8KKyNkZWZpbmUgUlhfRVJST1JTX0NNUiAgICAgIDB4MDIwMAorI2RlZmluZSBSWF9FUlJPUlNfTSAgICAgICAgMHgwMTAwCisjZGVmaW5lIFJYX0VSUk9SU19CQyAgICAgICAweDAwODAKKyNkZWZpbmUgUlhfRVJST1JTX01DICAgICAgIDB4MDA0MAorCisvKiBUcmFuc21pdCBCRC4gVGhlc2UgYXJlIGluIGFkZGl0aW9uIHRvIHZhbHVlcyBkZWZpbmVkIGluIHVjY2YuICovCisjZGVmaW5lIFRfVklEICAgICAgMHgwMDNjMDAwMAkvKiBpbnNlcnQgVkxBTiBpZCBpbmRleCBtYXNrLiAqLworI2RlZmluZSBUX0RFRiAgICAgICgoKHUzMikgVFhfRVJST1JTX0RFRiAgICAgKSA8PCAxNikKKyNkZWZpbmUgVF9FWERFRiAgICAoKCh1MzIpIFRYX0VSUk9SU19FWERFRiAgICkgPDwgMTYpCisjZGVmaW5lIFRfTEMgICAgICAgKCgodTMyKSBUWF9FUlJPUlNfTEMgICAgICApIDw8IDE2KQorI2RlZmluZSBUX1JMICAgICAgICgoKHUzMikgVFhfRVJST1JTX1JMICAgICAgKSA8PCAxNikKKyNkZWZpbmUgVF9SQ19NQVNLICAoKCh1MzIpIFRYX0VSUk9SU19SQ19NQVNLICkgPDwgMTYpCisjZGVmaW5lIFRfVU4gICAgICAgKCgodTMyKSBUWF9FUlJPUlNfVU4gICAgICApIDw8IDE2KQorI2RlZmluZSBUX0NTTCAgICAgICgoKHUzMikgVFhfRVJST1JTX0NTTCAgICAgKSA8PCAxNikKKyNkZWZpbmUgVF9FUlJPUlNfUkVQT1JUICAoVF9ERUYgfCBUX0VYREVGIHwgVF9MQyB8IFRfUkwgfCBUX1JDX01BU0sgXAorCQl8IFRfVU4gfCBUX0NTTCkJLyogdHJhbnNtaXQgZXJyb3JzIHRvIHJlcG9ydCAqLworCisvKiBSZWNlaXZlIEJELiBUaGVzZSBhcmUgaW4gYWRkaXRpb24gdG8gdmFsdWVzIGRlZmluZWQgaW4gdWNjZi4gKi8KKyNkZWZpbmUgUl9MRyAgICAweDAwMjAwMDAwCS8qIEZyYW1lIGxlbmd0aCB2aW9sYXRpb24uICAqLworI2RlZmluZSBSX05PICAgIDB4MDAxMDAwMDAJLyogTm9uLW9jdGV0IGFsaWduZWQgZnJhbWUuICAqLworI2RlZmluZSBSX1NIICAgIDB4MDAwODAwMDAJLyogU2hvcnQgZnJhbWUuICAqLworI2RlZmluZSBSX0NSICAgIDB4MDAwNDAwMDAJLyogQ1JDIGVycm9yLiAgKi8KKyNkZWZpbmUgUl9PViAgICAweDAwMDIwMDAwCS8qIE92ZXJydW4uICAqLworI2RlZmluZSBSX0lQQ0ggIDB4MDAwMTAwMDAJLyogSVAgY2hlY2tzdW0gY2hlY2sgZmFpbGVkLiAqLworI2RlZmluZSBSX0NNUiAgICgoKHUzMikgUlhfRVJST1JTX0NNUiAgKSA8PCAxNikKKyNkZWZpbmUgUl9NICAgICAoKCh1MzIpIFJYX0VSUk9SU19NICAgICkgPDwgMTYpCisjZGVmaW5lIFJfQkMgICAgKCgodTMyKSBSWF9FUlJPUlNfQkMgICApIDw8IDE2KQorI2RlZmluZSBSX01DICAgICgoKHUzMikgUlhfRVJST1JTX01DICAgKSA8PCAxNikKKyNkZWZpbmUgUl9FUlJPUlNfUkVQT1JUIChSX0NNUiB8IFJfTSB8IFJfQkMgfCBSX01DKQkvKiByZWNlaXZlIGVycm9ycyB0bworCQkJCQkJCSAgIHJlcG9ydCAqLworI2RlZmluZSBSX0VSUk9SU19GQVRBTCAgKFJfTEcgIHwgUl9OTyB8IFJfU0ggfCBSX0NSIHwgXAorCQlSX09WIHwgUl9JUENIKQkvKiByZWNlaXZlIGVycm9ycyB0byBkaXNjYXJkICovCisKKy8qIEFsaWdubWVudHMgKi8KKyNkZWZpbmUgVUNDX0dFVEhfUlhfR0xPQkFMX1BSQU1fQUxJR05NRU5UCTI1NgorI2RlZmluZSBVQ0NfR0VUSF9UWF9HTE9CQUxfUFJBTV9BTElHTk1FTlQgICAgICAgMTI4CisjZGVmaW5lIFVDQ19HRVRIX1RIUkVBRF9SWF9QUkFNX0FMSUdOTUVOVCAgICAgICAxMjgKKyNkZWZpbmUgVUNDX0dFVEhfVEhSRUFEX1RYX1BSQU1fQUxJR05NRU5UICAgICAgIDY0CisjZGVmaW5lIFVDQ19HRVRIX1RIUkVBRF9EQVRBX0FMSUdOTUVOVCAgICAgICAgICAyNTYJLyogc3BlYyBnaXZlcyB2YWx1ZXMKKwkJCQkJCQkgICBiYXNlZCBvbiBudW0gb2YKKwkJCQkJCQkgICB0aHJlYWRzLCBidXQgYWx3YXlzCisJCQkJCQkJICAgdXNpbmcgdGhlIG1heGltdW0gaXMKKwkJCQkJCQkgICBlYXNpZXIgKi8KKyNkZWZpbmUgVUNDX0dFVEhfU0VORF9RVUVVRV9RVUVVRV9ERVNDUklQVE9SX0FMSUdOTUVOVAkzMgorI2RlZmluZSBVQ0NfR0VUSF9TQ0hFRFVMRVJfQUxJR05NRU5UCQk0CS8qIFRoaXMgaXMgYSBndWVzcyAqLworI2RlZmluZSBVQ0NfR0VUSF9UWF9TVEFUSVNUSUNTX0FMSUdOTUVOVAk0CS8qIFRoaXMgaXMgYSBndWVzcyAqLworI2RlZmluZSBVQ0NfR0VUSF9SWF9TVEFUSVNUSUNTX0FMSUdOTUVOVAk0CS8qIFRoaXMgaXMgYSBndWVzcyAqLworI2RlZmluZSBVQ0NfR0VUSF9SWF9JTlRFUlJVUFRfQ09BTEVTQ0lOR19BTElHTk1FTlQJNAkvKiBUaGlzIGlzIGEKKwkJCQkJCQkJICAgZ3Vlc3MgKi8KKyNkZWZpbmUgVUNDX0dFVEhfUlhfQkRfUVVFVUVTX0FMSUdOTUVOVAkJOAkvKiBUaGlzIGlzIGEgZ3Vlc3MgKi8KKyNkZWZpbmUgVUNDX0dFVEhfUlhfUFJFRkVUQ0hFRF9CRFNfQUxJR05NRU5UCTEyOAkvKiBUaGlzIGlzIGEgZ3Vlc3MgKi8KKyNkZWZpbmUgVUNDX0dFVEhfUlhfRVhURU5ERURfRklMVEVSSU5HX0dMT0JBTF9QQVJBTUVURVJTX0FMSUdOTUVOVCA0CS8qIFRoaXMKKwkJCQkJCQkJCSAgIGlzIGEKKwkJCQkJCQkJCSAgIGd1ZXNzCisJCQkJCQkJCQkgKi8KKyNkZWZpbmUgVUNDX0dFVEhfUlhfQkRfUklOR19BTElHTk1FTlQJCTMyCisjZGVmaW5lIFVDQ19HRVRIX1RYX0JEX1JJTkdfQUxJR05NRU5UCQkzMgorI2RlZmluZSBVQ0NfR0VUSF9NUkJMUl9BTElHTk1FTlQJCTEyOAorI2RlZmluZSBVQ0NfR0VUSF9SWF9CRF9SSU5HX1NJWkVfQUxJR05NRU5UCTQKKyNkZWZpbmUgVUNDX0dFVEhfVFhfQkRfUklOR19TSVpFX01FTU9SWV9BTElHTk1FTlQJMzIKKyNkZWZpbmUgVUNDX0dFVEhfUlhfREFUQV9CVUZfQUxJR05NRU5UCQk2NAorCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9FRiAgICAgICAgICAgICAgICAgICAgICAgICAweDgwCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9WICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9SRUogICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9WVEFHX09QX1JJR0hUX1NISUZUICAgICAgICAyCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9WVEFHX09QX1NISUZUICAgICAgICAgICAgICA2CisjZGVmaW5lIFVDQ19HRVRIX1RBRF9WX05PTl9WVEFHX09QICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9SUU9TX1NISUZUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIFVDQ19HRVRIX1RBRF9WX1BSSU9SSVRZX1NISUZUICAgICAgICAgICA1CisjZGVmaW5lIFVDQ19HRVRIX1RBRF9DRkkgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisKKyNkZWZpbmUgVUNDX0dFVEhfVkxBTl9QUklPUklUWV9NQVggICAgICAgICAgICAgIDgKKyNkZWZpbmUgVUNDX0dFVEhfSVBfUFJJT1JJVFlfTUFYICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIFVDQ19HRVRIX1RYX1ZUQUdfVEFCTEVfRU5UUllfTUFYICAgICAgICA4CisjZGVmaW5lIFVDQ19HRVRIX1JYX0JEX1JJTkdfU0laRV9NSU4gICAgICAgICAgICA4CisjZGVmaW5lIFVDQ19HRVRIX1RYX0JEX1JJTkdfU0laRV9NSU4gICAgICAgICAgICAyCisKKyNkZWZpbmUgVUNDX0dFVEhfU0laRV9PRl9CRCAgICAgICAgICAgICAgICAgICAgIFFFX1NJWkVPRl9CRAorCisvKiBEcml2ZXIgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFhfQkRfUklOR19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgUlhfQkRfUklOR19MRU4gICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgVUNDX0dFVEhfREVWX1dFSUdIVCAgICAgICAgICAgICAgICAgICAgIFRYX0JEX1JJTkdfTEVOCisKKyNkZWZpbmUgVFhfUklOR19NT0RfTUFTSyhzaXplKSAgICAgICAgICAgICAgICAgIChzaXplLTEpCisjZGVmaW5lIFJYX1JJTkdfTU9EX01BU0soc2l6ZSkgICAgICAgICAgICAgICAgICAoc2l6ZS0xKQorCisjZGVmaW5lIEVORVRfTlVNX09DVEVUU19QRVJfQUREUkVTUyAgICAgICAgICAgICA2CisjZGVmaW5lIEVORVRfR1JPVVBfQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAweDAxCS8qIEdyb3VwIGFkZHJlc3MgbWFzaworCQkJCQkJCSAgIGZvciBldGhlcm5ldAorCQkJCQkJCSAgIGFkZHJlc3NlcyAqLworCisjZGVmaW5lIFRYX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSpIWikKKyNkZWZpbmUgU0tCX0FMTE9DX1RJTUVPVVQgICAgICAgICAgICAgICAgICAgICAgIDEwMDAwMAorI2RlZmluZSBQSFlfSU5JVF9USU1FT1VUICAgICAgICAgICAgICAgICAgICAgICAgMTAwMDAwCisjZGVmaW5lIFBIWV9DSEFOR0VfVElNRSAgICAgICAgICAgICAgICAgICAgICAgICAyCisKKy8qIEZhc3QgRXRoZXJuZXQgKDEwLzEwMCBNYnBzKSAqLworI2RlZmluZSBVQ0NfR0VUSF9VUkZTX0lOSVQgICAgICAgICAgICAgICAgICAgICAgNTEyCS8qIFJ4IHZpcnR1YWwgRklGTyBzaXplCisJCQkJCQkJICovCisjZGVmaW5lIFVDQ19HRVRIX1VSRkVUX0lOSVQgICAgICAgICAgICAgICAgICAgICAyNTYJLyogMS8yIHVyZnMgKi8KKyNkZWZpbmUgVUNDX0dFVEhfVVJGU0VUX0lOSVQgICAgICAgICAgICAgICAgICAgIDM4NAkvKiAzLzQgdXJmcyAqLworI2RlZmluZSBVQ0NfR0VUSF9VVEZTX0lOSVQgICAgICAgICAgICAgICAgICAgICAgNTEyCS8qIFR4IHZpcnR1YWwgRklGTyBzaXplCisJCQkJCQkJICovCisjZGVmaW5lIFVDQ19HRVRIX1VURkVUX0lOSVQgICAgICAgICAgICAgICAgICAgICAyNTYJLyogMS8yIHV0ZnMgKi8KKyNkZWZpbmUgVUNDX0dFVEhfVVRGVFRfSU5JVCAgICAgICAgICAgICAgICAgICAgIDEyOAorLyogR2lnYWJpdCBFdGhlcm5ldCAoMTAwMCBNYnBzKSAqLworI2RlZmluZSBVQ0NfR0VUSF9VUkZTX0dJR0FfSU5JVCAgICAgICAgICAgICAgICAgNDA5Ni8qMjA0OCovCS8qIFJ4IHZpcnR1YWwKKwkJCQkJCQkJICAgRklGTyBzaXplICovCisjZGVmaW5lIFVDQ19HRVRIX1VSRkVUX0dJR0FfSU5JVCAgICAgICAgICAgICAgICAyMDQ4LyoxMDI0Ki8JLyogMS8yIHVyZnMgKi8KKyNkZWZpbmUgVUNDX0dFVEhfVVJGU0VUX0dJR0FfSU5JVCAgICAgICAgICAgICAgIDMwNzIvKjE1MzYqLwkvKiAzLzQgdXJmcyAqLworI2RlZmluZSBVQ0NfR0VUSF9VVEZTX0dJR0FfSU5JVCAgICAgICAgICAgICAgICAgODE5Mi8qMjA0OCovCS8qIFR4IHZpcnR1YWwKKwkJCQkJCQkJICAgRklGTyBzaXplICovCisjZGVmaW5lIFVDQ19HRVRIX1VURkVUX0dJR0FfSU5JVCAgICAgICAgICAgICAgICA0MDk2LyoxMDI0Ki8JLyogMS8yIHV0ZnMgKi8KKyNkZWZpbmUgVUNDX0dFVEhfVVRGVFRfR0lHQV9JTklUICAgICAgICAgICAgICAgIDB4NDAwLyoweDQwKi8JLyogKi8KKworI2RlZmluZSBVQ0NfR0VUSF9SRU1PREVSX0lOSVQgICAgICAgICAgICAgICAgICAgMAkvKiBiaXRzIHRoYXQgbXVzdCBiZQorCQkJCQkJCSAgIHNldCAqLworI2RlZmluZSBVQ0NfR0VUSF9URU1PREVSX0lOSVQgICAgICAgICAgICAgICAgICAgMHhDMDAwCS8qIGJpdHMgdGhhdCBtdXN0ICovCisjZGVmaW5lIFVDQ19HRVRIX1VQU01SX0lOSVQgICAgICAgICAgICAgICAgICAgICAoVVBTTVJfUkVTMSkJLyogU3RhcnQgdmFsdWUKKwkJCQkJCQkJICAgZm9yIHRoaXMKKwkJCQkJCQkJICAgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgVUNDX0dFVEhfTUFDQ0ZHMV9JTklUICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVUNDX0dFVEhfTUFDQ0ZHMl9JTklUICAgICAgICAgICAgICAgICAgIChNQUNDRkcyX1JFU0VSVkVEXzEpCisjZGVmaW5lIFVDQ19HRVRIX01JSU1DRkdfTU5HTU5UX0NMQ19ESVZfSU5JVCAgICBcCisJCQkJKE1JSU1DRkdfTUFOQUdFTUVOVF9DTE9DS19ESVZJREVfQllfMTEyKQorCisvKiBFdGhlcm5ldCBzcGVlZCAqLwordHlwZWRlZiBlbnVtIGVuZXRfc3BlZWQgeworCUVORVRfU1BFRURfMTBCVCwJLyogMTAgQmFzZSBUICovCisJRU5FVF9TUEVFRF8xMDBCVCwJLyogMTAwIEJhc2UgVCAqLworCUVORVRfU1BFRURfMTAwMEJUCS8qIDEwMDAgQmFzZSBUICovCit9IGVuZXRfc3BlZWRfZTsKKworLyogRXRoZXJuZXQgQWRkcmVzcyBUeXBlLiAqLwordHlwZWRlZiBlbnVtIGVuZXRfYWRkcl90eXBlIHsKKwlFTkVUX0FERFJfVFlQRV9JTkRJVklEVUFMLAorCUVORVRfQUREUl9UWVBFX0dST1VQLAorCUVORVRfQUREUl9UWVBFX0JST0FEQ0FTVAorfSBlbmV0X2FkZHJfdHlwZV9lOworCisvKiBUQkkgLyBNSUkgU2V0IFJlZ2lzdGVyICovCit0eXBlZGVmIGVudW0gZW5ldF90YmlfbWlpX3JlZyB7CisJRU5FVF9UQklfTUlJX0NSID0gMHgwMCwJLyogQ29udHJvbCAoQ1IgKSAqLworCUVORVRfVEJJX01JSV9TUiA9IDB4MDEsCS8qIFN0YXR1cyAoU1IgKSAqLworCUVORVRfVEJJX01JSV9BTkEgPSAweDA0LAkvKiBBTiBhZHZlcnRpc2VtZW50IChBTkEgKSAqLworCUVORVRfVEJJX01JSV9BTkxQQlBBID0gMHgwNSwJLyogQU4gbGluayBwYXJ0bmVyIGJhc2UgcGFnZSBhYmlsaXR5CisJCQkJCSAgIChBTkxQQlBBKSAqLworCUVORVRfVEJJX01JSV9BTkVYID0gMHgwNiwJLyogQU4gZXhwYW5zaW9uIChBTkVYICkgKi8KKwlFTkVUX1RCSV9NSUlfQU5OUFQgPSAweDA3LAkvKiBBTiBuZXh0IHBhZ2UgdHJhbnNtaXQgKEFOTlBUICkgKi8KKwlFTkVUX1RCSV9NSUlfQU5MUEFOUCA9IDB4MDgsCS8qIEFOIGxpbmsgcGFydG5lciBhYmlsaXR5IG5leHQgcGFnZQorCQkJCQkgICAoQU5MUEFOUCkgKi8KKwlFTkVUX1RCSV9NSUlfRVhTVCA9IDB4MEYsCS8qIEV4dGVuZGVkIHN0YXR1cyAoRVhTVCApICovCisJRU5FVF9UQklfTUlJX0pEID0gMHgxMCwJLyogSml0dGVyIGRpYWdub3N0aWNzIChKRCApICovCisJRU5FVF9UQklfTUlJX1RCSUNPTiA9IDB4MTEJLyogVEJJIGNvbnRyb2wgKFRCSUNPTiApICovCit9IGVuZXRfdGJpX21paV9yZWdfZTsKKworLyogVUNDIEdFVEggODJ4eCBFdGhlcm5ldCBBZGRyZXNzIFJlY29nbml0aW9uIExvY2F0aW9uICovCit0eXBlZGVmIGVudW0gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uIHsKKwlVQ0NfR0VUSF9FTkVUX0FERFJFU1NfUkVDT0dOSVRJT05fTE9DQVRJT05fU1RBVElPTl9BRERSRVNTLC8qIHN0YXRpb24KKwkJCQkJCQkJICAgICAgYWRkcmVzcyAqLworCVVDQ19HRVRIX0VORVRfQUREUkVTU19SRUNPR05JVElPTl9MT0NBVElPTl9QQUREUl9GSVJTVCwJLyogYWRkaXRpb25hbAorCQkJCQkJCQkgICBzdGF0aW9uCisJCQkJCQkJCSAgIGFkZHJlc3MKKwkJCQkJCQkJICAgcGFkZHIxICovCisJVUNDX0dFVEhfRU5FVF9BRERSRVNTX1JFQ09HTklUSU9OX0xPQ0FUSU9OX1BBRERSMiwJLyogYWRkaXRpb25hbAorCQkJCQkJCQkgICBzdGF0aW9uCisJCQkJCQkJCSAgIGFkZHJlc3MKKwkJCQkJCQkJICAgcGFkZHIyICovCisJVUNDX0dFVEhfRU5FVF9BRERSRVNTX1JFQ09HTklUSU9OX0xPQ0FUSU9OX1BBRERSMywJLyogYWRkaXRpb25hbAorCQkJCQkJCQkgICBzdGF0aW9uCisJCQkJCQkJCSAgIGFkZHJlc3MKKwkJCQkJCQkJICAgcGFkZHIzICovCisJVUNDX0dFVEhfRU5FVF9BRERSRVNTX1JFQ09HTklUSU9OX0xPQ0FUSU9OX1BBRERSX0xBU1QsCS8qIGFkZGl0aW9uYWwKKwkJCQkJCQkJICAgc3RhdGlvbgorCQkJCQkJCQkgICBhZGRyZXNzCisJCQkJCQkJCSAgIHBhZGRyNCAqLworCVVDQ19HRVRIX0VORVRfQUREUkVTU19SRUNPR05JVElPTl9MT0NBVElPTl9HUk9VUF9IQVNILAkvKiBncm91cCBoYXNoICovCisJVUNDX0dFVEhfRU5FVF9BRERSRVNTX1JFQ09HTklUSU9OX0xPQ0FUSU9OX0lORElWSURVQUxfSEFTSCAvKiBpbmRpdmlkdWFsCisJCQkJCQkJCSAgICAgIGhhc2ggKi8KK30gdWNjX2dldGhfZW5ldF9hZGRyZXNzX3JlY29nbml0aW9uX2xvY2F0aW9uX2U7CisKKy8qIFVDQyBHRVRIIHZsYW4gb3BlcmF0aW9uIHRhZ2dlZCAqLwordHlwZWRlZiBlbnVtIHVjY19nZXRoX3ZsYW5fb3BlcmF0aW9uX3RhZ2dlZCB7CisJVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fVEFHR0VEX05PUCA9IDB4MCwJLyogVGFnZ2VkIC0gbm9wICovCisJVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fVEFHR0VEX1JFUExBQ0VfVklEX1BPUlRJT05fT0ZfUV9UQUcKKwkJPSAweDEsCS8qIFRhZ2dlZCAtIHJlcGxhY2UgdmlkIHBvcnRpb24gb2YgcSB0YWcgKi8KKwlVQ0NfR0VUSF9WTEFOX09QRVJBVElPTl9UQUdHRURfSUZfVklEMF9SRVBMQUNFX1ZJRF9XSVRIX0RFRkFVTFRfVkFMVUUKKwkJPSAweDIsCS8qIFRhZ2dlZCAtIGlmIHZpZDAgcmVwbGFjZSB2aWQgd2l0aCBkZWZhdWx0IHZhbHVlICAqLworCVVDQ19HRVRIX1ZMQU5fT1BFUkFUSU9OX1RBR0dFRF9FWFRSQUNUX1FfVEFHX0ZST01fRlJBTUUKKwkJPSAweDMJLyogVGFnZ2VkIC0gZXh0cmFjdCBxIHRhZyBmcm9tIGZyYW1lICovCit9IHVjY19nZXRoX3ZsYW5fb3BlcmF0aW9uX3RhZ2dlZF9lOworCisvKiBVQ0MgR0VUSCB2bGFuIG9wZXJhdGlvbiBub24tdGFnZ2VkICovCit0eXBlZGVmIGVudW0gdWNjX2dldGhfdmxhbl9vcGVyYXRpb25fbm9uX3RhZ2dlZCB7CisJVUNDX0dFVEhfVkxBTl9PUEVSQVRJT05fTk9OX1RBR0dFRF9OT1AgPSAweDAsCS8qIE5vbiB0YWdnZWQgLSBub3AgKi8KKwlVQ0NfR0VUSF9WTEFOX09QRVJBVElPTl9OT05fVEFHR0VEX1FfVEFHX0lOU0VSVCA9IDB4MQkvKiBOb24gdGFnZ2VkIC0KKwkJCQkJCQkJICAgcSB0YWcgaW5zZXJ0CisJCQkJCQkJCSAqLworfSB1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl9ub25fdGFnZ2VkX2U7CisKKy8qIFVDQyBHRVRIIFJ4IFF1YWxpdHkgb2YgU2VydmljZSBNb2RlICovCit0eXBlZGVmIGVudW0gdWNjX2dldGhfcW9zX21vZGUgeworCVVDQ19HRVRIX1FPU19NT0RFX0RFRkFVTFQgPSAweDAsCS8qIGRlZmF1bHQgcXVldWUgKi8KKwlVQ0NfR0VUSF9RT1NfTU9ERV9RVUVVRV9OVU1fRlJPTV9MMl9DUklURVJJQSA9IDB4MSwJLyogcXVldWUKKwkJCQkJCQkJICAgZGV0ZXJtaW5lZAorCQkJCQkJCQkgICBieSBMMgorCQkJCQkJCQkgICBjcml0ZXJpYSAqLworCVVDQ19HRVRIX1FPU19NT0RFX1FVRVVFX05VTV9GUk9NX0wzX0NSSVRFUklBID0gMHgyCS8qIHF1ZXVlCisJCQkJCQkJCSAgIGRldGVybWluZWQKKwkJCQkJCQkJICAgYnkgTDMKKwkJCQkJCQkJICAgY3JpdGVyaWEgKi8KK30gdWNjX2dldGhfcW9zX21vZGVfZTsKKworLyogVUNDIEdFVEggU3RhdGlzdGljcyBHYXRoZXJpbmcgTW9kZSAtIFRoZXNlIGFyZSBiaXQgZmxhZ3MsICdvcicgdGhlbSB0b2dldGhlcgorICAgZm9yIGNvbWJpbmVkIGZ1bmN0aW9uYWxpdHkgKi8KK3R5cGVkZWYgZW51bSB1Y2NfZ2V0aF9zdGF0aXN0aWNzX2dhdGhlcmluZ19tb2RlIHsKKwlVQ0NfR0VUSF9TVEFUSVNUSUNTX0dBVEhFUklOR19NT0RFX05PTkUgPSAweDAwMDAwMDAwLAkvKiBObworCQkJCQkJCQkgICBzdGF0aXN0aWNzCisJCQkJCQkJCSAgIGdhdGhlcmluZyAqLworCVVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfSEFSRFdBUkUgPSAweDAwMDAwMDAxLC8qIEVuYWJsZQorCQkJCQkJCQkgICAgaGFyZHdhcmUKKwkJCQkJCQkJICAgIHN0YXRpc3RpY3MKKwkJCQkJCQkJICAgIGdhdGhlcmluZworCQkJCQkJCQkgICovCisJVUNDX0dFVEhfU1RBVElTVElDU19HQVRIRVJJTkdfTU9ERV9GSVJNV0FSRV9UWCA9IDB4MDAwMDAwMDQsLypFbmFibGUKKwkJCQkJCQkJICAgICAgZmlybXdhcmUKKwkJCQkJCQkJICAgICAgdHgKKwkJCQkJCQkJICAgICAgc3RhdGlzdGljcworCQkJCQkJCQkgICAgICBnYXRoZXJpbmcKKwkJCQkJCQkJICAgICAqLworCVVDQ19HRVRIX1NUQVRJU1RJQ1NfR0FUSEVSSU5HX01PREVfRklSTVdBUkVfUlggPSAweDAwMDAwMDA4LyogRW5hYmxlCisJCQkJCQkJCSAgICAgIGZpcm13YXJlCisJCQkJCQkJCSAgICAgIHJ4CisJCQkJCQkJCSAgICAgIHN0YXRpc3RpY3MKKwkJCQkJCQkJICAgICAgZ2F0aGVyaW5nCisJCQkJCQkJCSAgICAqLworfSB1Y2NfZ2V0aF9zdGF0aXN0aWNzX2dhdGhlcmluZ19tb2RlX2U7CisKKy8qIFVDQyBHRVRIIFBhZCBhbmQgQ1JDIE1vZGUgLSBOb3RlLCBQYWRkaW5nIHdpdGhvdXQgQ1JDIGlzIG5vdCBwb3NzaWJsZSAqLwordHlwZWRlZiBlbnVtIHVjY19nZXRoX21hY2NmZzJfcGFkX2FuZF9jcmNfbW9kZSB7CisJVUNDX0dFVEhfUEFEX0FORF9DUkNfTU9ERV9OT05FCisJCT0gTUFDQ0ZHMl9QQURfQU5EX0NSQ19NT0RFX05PTkUsCS8qIE5laXRoZXIgUGFkZGluZworCQkJCQkJCSAgIHNob3J0IGZyYW1lcworCQkJCQkJCSAgIG5vciBDUkMgKi8KKwlVQ0NfR0VUSF9QQURfQU5EX0NSQ19NT0RFX0NSQ19PTkxZCisJCT0gTUFDQ0ZHMl9QQURfQU5EX0NSQ19NT0RFX0NSQ19PTkxZLAkvKiBBcHBlbmQKKwkJCQkJCQkgICBDUkMgb25seSAqLworCVVDQ19HRVRIX1BBRF9BTkRfQ1JDX01PREVfUEFEX0FORF9DUkMgPQorCSAgICBNQUNDRkcyX1BBRF9BTkRfQ1JDX01PREVfUEFEX0FORF9DUkMKK30gdWNjX2dldGhfbWFjY2ZnMl9wYWRfYW5kX2NyY19tb2RlX2U7CisKKy8qIFVDQyBHRVRIIHVwc21yIEZsb3cgQ29udHJvbCBNb2RlICovCit0eXBlZGVmIGVudW0gdWNjX2dldGhfZmxvd19jb250cm9sX21vZGUgeworCVVQU01SX0FVVE9NQVRJQ19GTE9XX0NPTlRST0xfTU9ERV9OT05FID0gMHgwMDAwMDAwMCwJLyogTm8gYXV0b21hdGljCisJCQkJCQkJCSAgIGZsb3cgY29udHJvbAorCQkJCQkJCQkgKi8KKwlVUFNNUl9BVVRPTUFUSUNfRkxPV19DT05UUk9MX01PREVfUEFVU0VfV0hFTl9FTUVSR0VOQ1kKKwkJPSAweDAwMDA0MDAwCS8qIFNlbmQgcGF1c2UgZnJhbWUgd2hlbiBSeEZJRk8gcmVhY2hlcyBpdHMKKwkJCQkgICBlbWVyZ2VuY3kgdGhyZXNob2xkICovCit9IHVjY19nZXRoX2Zsb3dfY29udHJvbF9tb2RlX2U7CisKKy8qIFVDQyBHRVRIIG51bWJlciBvZiB0aHJlYWRzICovCit0eXBlZGVmIGVudW0gdWNjX2dldGhfbnVtX29mX3RocmVhZHMgeworCVVDQ19HRVRIX05VTV9PRl9USFJFQURTXzEgPSAweDEsCS8qIDEgKi8KKwlVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU18yID0gMHgyLAkvKiAyICovCisJVUNDX0dFVEhfTlVNX09GX1RIUkVBRFNfNCA9IDB4MCwJLyogNCAqLworCVVDQ19HRVRIX05VTV9PRl9USFJFQURTXzYgPSAweDMsCS8qIDYgKi8KKwlVQ0NfR0VUSF9OVU1fT0ZfVEhSRUFEU184ID0gMHg0CS8qIDggKi8KK30gdWNjX2dldGhfbnVtX29mX3RocmVhZHNfZTsKKworLyogVUNDIEdFVEggbnVtYmVyIG9mIHN0YXRpb24gYWRkcmVzc2VzICovCit0eXBlZGVmIGVudW0gdWNjX2dldGhfbnVtX29mX3N0YXRpb25fYWRkcmVzc2VzIHsKKwlVQ0NfR0VUSF9OVU1fT0ZfU1RBVElPTl9BRERSRVNTRVNfMSwJLyogMSAqLworCVVDQ19HRVRIX05VTV9PRl9TVEFUSU9OX0FERFJFU1NFU181CS8qIDUgKi8KK30gdWNjX2dldGhfbnVtX29mX3N0YXRpb25fYWRkcmVzc2VzX2U7CisKK3R5cGVkZWYgdTggZW5ldF9hZGRyX3RbRU5FVF9OVU1fT0NURVRTX1BFUl9BRERSRVNTXTsKKworLyogVUNDIEdFVEggODJ4eCBFdGhlcm5ldCBBZGRyZXNzIENvbnRhaW5lciAqLwordHlwZWRlZiBzdHJ1Y3QgZW5ldF9hZGRyX2NvbnRhaW5lciB7CisJZW5ldF9hZGRyX3QgYWRkcmVzczsJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCXVjY19nZXRoX2VuZXRfYWRkcmVzc19yZWNvZ25pdGlvbl9sb2NhdGlvbl9lIGxvY2F0aW9uOwkvKiBsb2NhdGlvbiBpbgorCQkJCQkJCQkgICA4Mnh4IGFkZHJlc3MKKwkJCQkJCQkJICAgcmVjb2duaXRpb24KKwkJCQkJCQkJICAgaGFyZHdhcmUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cit9IGVuZXRfYWRkcl9jb250YWluZXJfdDsKKworI2RlZmluZSBFTkVUX0FERFJfQ09OVF9FTlRSWShwdHIpIGxpc3RfZW50cnkocHRyLCBlbmV0X2FkZHJfY29udGFpbmVyX3QsIG5vZGUpCisKKy8qIFVDQyBHRVRIIFRlcm1pbmF0aW9uIEFjdGlvbiBEZXNjcmlwdG9yIChUQUQpIHN0cnVjdHVyZS4gKi8KK3R5cGVkZWYgc3RydWN0IHVjY19nZXRoX3RhZF9wYXJhbXMgeworCWludCByeF9ub25fZHluYW1pY19leHRlbmRlZF9mZWF0dXJlc19tb2RlOworCWludCByZWplY3RfZnJhbWU7CisJdWNjX2dldGhfdmxhbl9vcGVyYXRpb25fdGFnZ2VkX2UgdnRhZ19vcDsKKwl1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl9ub25fdGFnZ2VkX2Ugdm5vbnRhZ19vcDsKKwl1Y2NfZ2V0aF9xb3NfbW9kZV9lIHJxb3M7CisJdTggdnByaTsKKwl1MTYgdmlkOworfSB1Y2NfZ2V0aF90YWRfcGFyYW1zX3Q7CisKKy8qIEdFVEggcHJvdG9jb2wgaW5pdGlhbGl6YXRpb24gc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB1Y2NfZ2V0aF9pbmZvIHsKKwl1Y2NfZmFzdF9pbmZvX3QgdWZfaW5mbzsKKwl1OCBudW1RdWV1ZXNUeDsKKwl1OCBudW1RdWV1ZXNSeDsKKwlpbnQgaXBDaGVja1N1bUNoZWNrOworCWludCBpcENoZWNrU3VtR2VuZXJhdGU7CisJaW50IHJ4RXh0ZW5kZWRGaWx0ZXJpbmc7CisJdTMyIGV4dGVuZGVkRmlsdGVyaW5nQ2hhaW5Qb2ludGVyOworCXUxNiB0eXBlb3JsZW47CisJaW50IGR5bmFtaWNNYXhGcmFtZUxlbmd0aDsKKwlpbnQgZHluYW1pY01pbkZyYW1lTGVuZ3RoOworCXU4IG5vbkJhY2tUb0JhY2tJZmdQYXJ0MTsKKwl1OCBub25CYWNrVG9CYWNrSWZnUGFydDI7CisJdTggbWltaW51bUludGVyRnJhbWVHYXBFbmZvcmNlbWVudDsKKwl1OCBiYWNrVG9CYWNrSW50ZXJGcmFtZUdhcDsKKwlpbnQgaXBBZGRyZXNzQWxpZ25tZW50OworCWludCBsZW5ndGhDaGVja1J4OworCXUzMiBtYmxpbnRlcnZhbDsKKwl1MTYgbm9ydHNyYnl0ZXRpbWU7CisJdTggZnJhY3NpejsKKwl1OCBzdHJpY3Rwcmlvcml0eXE7CisJdTggdHhhc2FwOworCXU4IGV4dHJhYnc7CisJaW50IG1paVByZWFtYmxlU3VwcmVzczsKKwl1OCBhbHRCZWJUcnVuY2F0aW9uOworCWludCBhbHRCZWI7CisJaW50IGJhY2tQcmVzc3VyZU5vQmFja29mZjsKKwlpbnQgbm9CYWNrb2ZmOworCWludCBleGNlc3NEZWZlcjsKKwl1OCBtYXhSZXRyYW5zbWlzc2lvbjsKKwl1OCBjb2xsaXNpb25XaW5kb3c7CisJaW50IHBybzsKKwlpbnQgY2FwOworCWludCByc2g7CisJaW50IHJscGI7CisJaW50IGNhbTsKKwlpbnQgYnJvOworCWludCBlY207CisJaW50IHJlY2VpdmVGbG93Q29udHJvbDsKKwl1OCBtYXhHcm91cEFkZHJJbkhhc2g7CisJdTggbWF4SW5kQWRkckluSGFzaDsKKwl1OCBwcmVsOworCXUxNiBtYXhGcmFtZUxlbmd0aDsKKwl1MTYgbWluRnJhbWVMZW5ndGg7CisJdTE2IG1heEQxTGVuZ3RoOworCXUxNiBtYXhEMkxlbmd0aDsKKwl1MTYgdmxhbnR5cGU7CisJdTE2IHZsYW50Y2k7CisJdTMyIGVjYW1wdHI7CisJdTMyIGV2ZW50UmVnTWFzazsKKwl1MTYgcGF1c2VQZXJpb2Q7CisJdTE2IGV4dGVuc2lvbkZpZWxkOworCXU4IHBoeV9hZGRyZXNzOworCXUzMiBib2FyZF9mbGFnczsKKwl1MzIgcGh5X2ludGVycnVwdDsKKwl1OCB3ZWlnaHRmYWN0b3JbTlVNX1RYX1FVRVVFU107CisJdTggaW50ZXJydXB0Y29hbGVzY2luZ21heHZhbHVlW05VTV9SWF9RVUVVRVNdOworCXU4IGwycXRbVUNDX0dFVEhfVkxBTl9QUklPUklUWV9NQVhdOworCXU4IGwzcXRbVUNDX0dFVEhfSVBfUFJJT1JJVFlfTUFYXTsKKwl1MzIgdnRhZ3RhYmxlW1VDQ19HRVRIX1RYX1ZUQUdfVEFCTEVfRU5UUllfTUFYXTsKKwl1OCBpcGhvZmZzZXRbVFhfSVBfT0ZGU0VUX0VOVFJZX01BWF07CisJdTE2IGJkUmluZ0xlblR4W05VTV9UWF9RVUVVRVNdOworCXUxNiBiZFJpbmdMZW5SeFtOVU1fUlhfUVVFVUVTXTsKKwllbmV0X2ludGVyZmFjZV9lIGVuZXRfaW50ZXJmYWNlOworCXVjY19nZXRoX251bV9vZl9zdGF0aW9uX2FkZHJlc3Nlc19lIG51bVN0YXRpb25BZGRyZXNzZXM7CisJIHFlX2ZsdHJfbGFyZ2VzdF9leHRlcm5hbF90YmxfbG9va3VwX2tleV9zaXplX2UKKwkgICAgbGFyZ2VzdGV4dGVybmFsbG9va3Vwa2V5c2l6ZTsKKwl1Y2NfZ2V0aF9zdGF0aXN0aWNzX2dhdGhlcmluZ19tb2RlX2Ugc3RhdGlzdGljc01vZGU7CisJdWNjX2dldGhfdmxhbl9vcGVyYXRpb25fdGFnZ2VkX2Ugdmxhbk9wZXJhdGlvblRhZ2dlZDsKKwl1Y2NfZ2V0aF92bGFuX29wZXJhdGlvbl9ub25fdGFnZ2VkX2Ugdmxhbk9wZXJhdGlvbk5vblRhZ2dlZDsKKwl1Y2NfZ2V0aF9xb3NfbW9kZV9lIHJ4UW9TTW9kZTsKKwl1Y2NfZ2V0aF9mbG93X2NvbnRyb2xfbW9kZV9lIGF1ZmM7CisJdWNjX2dldGhfbWFjY2ZnMl9wYWRfYW5kX2NyY19tb2RlX2UgcGFkQW5kQ3JjOworCXVjY19nZXRoX251bV9vZl90aHJlYWRzX2UgbnVtVGhyZWFkc1R4OworCXVjY19nZXRoX251bV9vZl90aHJlYWRzX2UgbnVtVGhyZWFkc1J4OworCXFlX3Jpc2NfYWxsb2NhdGlvbl9lIHJpc2NUeDsKKwlxZV9yaXNjX2FsbG9jYXRpb25fZSByaXNjUng7Cit9IHVjY19nZXRoX2luZm9fdDsKKworLyogc3RydWN0dXJlIHJlcHJlc2VudGluZyBVQ0MgR0VUSCAqLwordHlwZWRlZiBzdHJ1Y3QgdWNjX2dldGhfcHJpdmF0ZSB7CisJdWNjX2dldGhfaW5mb190ICp1Z19pbmZvOworCXVjY19mYXN0X3ByaXZhdGVfdCAqdWNjZjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwkvKiBsaW51eCBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KKwl1Y2NfZ2V0aF90ICp1Z19yZWdzOworCXVjY19nZXRoX2luaXRfcHJhbV90ICpwX2luaXRfZW5ldF9wYXJhbV9zaGFkb3c7CisJdWNjX2dldGhfZXhmX2dsb2JhbF9wcmFtX3QgKnBfZXhmX2dsYmxfcGFyYW07CisJdTMyIGV4Zl9nbGJsX3BhcmFtX29mZnNldDsKKwl1Y2NfZ2V0aF9yeF9nbG9iYWxfcHJhbV90ICpwX3J4X2dsYmxfcHJhbTsKKwl1MzIgcnhfZ2xibF9wcmFtX29mZnNldDsKKwl1Y2NfZ2V0aF90eF9nbG9iYWxfcHJhbV90ICpwX3R4X2dsYmxfcHJhbTsKKwl1MzIgdHhfZ2xibF9wcmFtX29mZnNldDsKKwl1Y2NfZ2V0aF9zZW5kX3F1ZXVlX21lbV9yZWdpb25fdCAqcF9zZW5kX3FfbWVtX3JlZzsKKwl1MzIgc2VuZF9xX21lbV9yZWdfb2Zmc2V0OworCXVjY19nZXRoX3RocmVhZF9kYXRhX3R4X3QgKnBfdGhyZWFkX2RhdGFfdHg7CisJdTMyIHRocmVhZF9kYXRfdHhfb2Zmc2V0OworCXVjY19nZXRoX3RocmVhZF9kYXRhX3J4X3QgKnBfdGhyZWFkX2RhdGFfcng7CisJdTMyIHRocmVhZF9kYXRfcnhfb2Zmc2V0OworCXVjY19nZXRoX3NjaGVkdWxlcl90ICpwX3NjaGVkdWxlcjsKKwl1MzIgc2NoZWR1bGVyX29mZnNldDsKKwl1Y2NfZ2V0aF90eF9maXJtd2FyZV9zdGF0aXN0aWNzX3ByYW1fdCAqcF90eF9md19zdGF0aXN0aWNzX3ByYW07CisJdTMyIHR4X2Z3X3N0YXRpc3RpY3NfcHJhbV9vZmZzZXQ7CisJdWNjX2dldGhfcnhfZmlybXdhcmVfc3RhdGlzdGljc19wcmFtX3QgKnBfcnhfZndfc3RhdGlzdGljc19wcmFtOworCXUzMiByeF9md19zdGF0aXN0aWNzX3ByYW1fb2Zmc2V0OworCXVjY19nZXRoX3J4X2ludGVycnVwdF9jb2FsZXNjaW5nX3RhYmxlX3QgKnBfcnhfaXJxX2NvYWxlc2NpbmdfdGJsOworCXUzMiByeF9pcnFfY29hbGVzY2luZ190Ymxfb2Zmc2V0OworCXVjY19nZXRoX3J4X2JkX3F1ZXVlc19lbnRyeV90ICpwX3J4X2JkX3FzX3RibDsKKwl1MzIgcnhfYmRfcXNfdGJsX29mZnNldDsKKwl1OCAqcF90eF9iZF9yaW5nW05VTV9UWF9RVUVVRVNdOworCXUzMiB0eF9iZF9yaW5nX29mZnNldFtOVU1fVFhfUVVFVUVTXTsKKwl1OCAqcF9yeF9iZF9yaW5nW05VTV9SWF9RVUVVRVNdOworCXUzMiByeF9iZF9yaW5nX29mZnNldFtOVU1fUlhfUVVFVUVTXTsKKwl1OCAqY29uZkJkW05VTV9UWF9RVUVVRVNdOworCXU4ICp0eEJkW05VTV9UWF9RVUVVRVNdOworCXU4ICpyeEJkW05VTV9SWF9RVUVVRVNdOworCWludCBiYWRGcmFtZVtOVU1fUlhfUVVFVUVTXTsKKwl1MTYgY3B1Y291bnRbTlVNX1RYX1FVRVVFU107CisJdm9sYXRpbGUgdTE2ICpwX2NwdWNvdW50W05VTV9UWF9RVUVVRVNdOworCWludCBpbmRBZGRyUmVnVXNlZFtOVU1fT0ZfUEFERFJTXTsKKwllbmV0X2FkZHJfdCBwYWRkcltOVU1fT0ZfUEFERFJTXTsKKwl1OCBudW1Hcm91cEFkZHJJbkhhc2g7CisJdTggbnVtSW5kQWRkckluSGFzaDsKKwl1OCBudW1JbmRBZGRySW5SZWc7CisJaW50IHJ4X2V4dGVuZGVkX2ZlYXR1cmVzOworCWludCByeF9ub25fZHluYW1pY19leHRlbmRlZF9mZWF0dXJlczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGNvbmZfc2ticzsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGdyb3VwX2hhc2hfcTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGluZF9oYXNoX3E7CisJdTMyIHNhdmVkX3VjY207CisJc3BpbmxvY2tfdCBsb2NrOworCS8qIHBvaW50ZXJzIHRvIGFycmF5cyBvZiBza2J1ZmZzIGZvciB0eCBhbmQgcnggKi8KKwlzdHJ1Y3Qgc2tfYnVmZiAqKnR4X3NrYnVmZltOVU1fVFhfUVVFVUVTXTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqKnJ4X3NrYnVmZltOVU1fUlhfUVVFVUVTXTsKKwkvKiBpbmRpY2VzIHBvaW50aW5nIHRvIHRoZSBuZXh0IGZyZWUgc2JrIGluIHNrYiBhcnJheXMgKi8KKwl1MTYgc2tiX2N1cnR4W05VTV9UWF9RVUVVRVNdOworCXUxNiBza2JfY3VycnhbTlVNX1JYX1FVRVVFU107CisJLyogaW5kZXggb2YgdGhlIGZpcnN0IHNrYiB3aGljaCBoYXNuJ3QgYmVlbiB0cmFuc21pdHRlZCB5ZXQuICovCisJdTE2IHNrYl9kaXJ0eXR4W05VTV9UWF9RVUVVRVNdOworCisJc3RydWN0IHdvcmtfc3RydWN0IHRxOworCXN0cnVjdCB0aW1lcl9saXN0IHBoeV9pbmZvX3RpbWVyOworCXN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm87CisJaW50IG9sZHNwZWVkOworCWludCBvbGRkdXBsZXg7CisJaW50IG9sZGxpbms7Cit9IHVjY19nZXRoX3ByaXZhdGVfdDsKKworI2VuZGlmCQkJCS8qIF9fVUNDX0dFVEhfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoX3BoeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MTAyOGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuYwpAQCAtMCwwICsxLDgwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLiAyMDA2LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogU2hsb21pIEdyaWRpc2ggPGdyaWRpc2hAZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBEZXNjcmlwdGlvbjoKKyAqIFVDQyBHRVRIIERyaXZlciAtLSBQSFkgaGFuZGxpbmcKKyAqCisgKiBDaGFuZ2Vsb2c6CisgKiBKdW4gMjgsIDIwMDYgTGkgWWFuZyA8TGVvTGlAZnJlZXNjYWxlLmNvbT4KKyAqIC0gUmVhcnJhbmdlIGNvZGUgYW5kIHN0eWxlIGZpeGVzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgorI2luY2x1ZGUgInVjY19nZXRoX3BoeS5oIgorI2luY2x1ZGUgPHBsYXRmb3Jtcy84M3h4L21wYzgzNjBlX3BiLmg+CisKKyNkZWZpbmUgdWdwaHlfcHJpbnRrKGxldmVsLCBmb3JtYXQsIGFyZy4uLikgIFwKKyAgICAgICAgcHJpbnRrKGxldmVsIGZvcm1hdCAiXG4iLCAjIyBhcmcpCisKKyNkZWZpbmUgdWdwaHlfZGJnKGZvcm1hdCwgYXJnLi4uKSAgICAgICAgICAgIFwKKyAgICAgICAgdWdwaHlfcHJpbnRrKEtFUk5fREVCVUcsIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgdWdwaHlfZXJyKGZvcm1hdCwgYXJnLi4uKSAgICAgICAgICAgIFwKKyAgICAgICAgdWdwaHlfcHJpbnRrKEtFUk5fRVJSLCBmb3JtYXQgLCAjIyBhcmcpCisjZGVmaW5lIHVncGh5X2luZm8oZm9ybWF0LCBhcmcuLi4pICAgICAgICAgICBcCisgICAgICAgIHVncGh5X3ByaW50ayhLRVJOX0lORk8sIGZvcm1hdCAsICMjIGFyZykKKyNkZWZpbmUgdWdwaHlfd2Fybihmb3JtYXQsIGFyZy4uLikgICAgICAgICAgIFwKKyAgICAgICAgdWdwaHlfcHJpbnRrKEtFUk5fV0FSTklORywgZm9ybWF0ICwgIyMgYXJnKQorCisjaWZkZWYgVUdFVEhfVkVSQk9TRV9ERUJVRworI2RlZmluZSB1Z3BoeV92ZGJnIHVncGh5X2RiZworI2Vsc2UKKyNkZWZpbmUgdWdwaHlfdmRiZyhmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgkJCQkvKiBVR0VUSF9WRVJCT1NFX0RFQlVHICovCisKK3N0YXRpYyB2b2lkIGNvbmZpZ19nZW5taWlfYWR2ZXJ0KHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pOworc3RhdGljIHZvaWQgZ2VubWlpX3NldHVwX2ZvcmNlZChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKTsKK3N0YXRpYyB2b2lkIGdlbm1paV9yZXN0YXJ0X2FuZWcoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyk7CitzdGF0aWMgaW50IGdiaXRfY29uZmlnX2FuZWcoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyk7CitzdGF0aWMgaW50IGdlbm1paV9jb25maWdfYW5lZyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKTsKK3N0YXRpYyBpbnQgZ2VubWlpX3VwZGF0ZV9saW5rKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pOworc3RhdGljIGludCBnZW5taWlfcmVhZF9zdGF0dXMoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyk7Cit1MTYgcGh5X3JlYWQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbywgdTE2IHJlZ251bSk7Cit2b2lkIHBoeV93cml0ZShzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvLCB1MTYgcmVnbnVtLCB1MTYgdmFsKTsKKworc3RhdGljIHU4ICpiY3NyX3JlZ3MgPSBOVUxMOworCisvKiBXcml0ZSB2YWx1ZSB0byB0aGUgUEhZIGZvciB0aGlzIGRldmljZSB0byB0aGUgcmVnaXN0ZXIgYXQgcmVnbnVtLCAqLworLyogd2FpdGluZyB1bnRpbCB0aGUgd3JpdGUgaXMgZG9uZSBiZWZvcmUgaXQgcmV0dXJucy4gIEFsbCBQSFkgKi8KKy8qIGNvbmZpZ3VyYXRpb24gaGFzIHRvIGJlIGRvbmUgdGhyb3VnaCB0aGUgVFNFQzEgTUlJTSByZWdzICovCit2b2lkIHdyaXRlX3BoeV9yZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1paV9pZCwgaW50IHJlZ251bSwgaW50IHZhbHVlKQoreworCXVjY19nZXRoX3ByaXZhdGVfdCAqdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXVjY19taWlfbW5nX3QgKm1paV9yZWdzOworCWVuZXRfdGJpX21paV9yZWdfZSBtaWlfcmVnID0gKGVuZXRfdGJpX21paV9yZWdfZSkgcmVnbnVtOworCXUzMiB0bXBfcmVnOworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCXNwaW5fbG9ja19pcnEoJnVnZXRoLT5sb2NrKTsKKworCW1paV9yZWdzID0gdWdldGgtPm1paV9pbmZvLT5taWlfcmVnczsKKworCS8qIFNldCB0aGlzIFVDQyB0byBiZSB0aGUgbWFzdGVyIG9mIHRoZSBNSUkgbWFuYWdtZW50ICovCisJdWNjX3NldF9xZV9tdXhfbWlpX21uZyh1Z2V0aC0+dWdfaW5mby0+dWZfaW5mby51Y2NfbnVtKTsKKworCS8qIFN0b3AgdGhlIE1JSSBtYW5hZ2VtZW50IHJlYWQgY3ljbGUgKi8KKwlvdXRfYmUzMigmbWlpX3JlZ3MtPm1paW1jb20sIDApOworCS8qIFNldHRpbmcgdXAgdGhlIE1JSSBNYW5nZW1lbnQgQWRkcmVzcyBSZWdpc3RlciAqLworCXRtcF9yZWcgPSAoKHUzMikgbWlpX2lkIDw8IE1JSU1BRERfUEhZX0FERFJFU1NfU0hJRlQpIHwgbWlpX3JlZzsKKwlvdXRfYmUzMigmbWlpX3JlZ3MtPm1paW1hZGQsIHRtcF9yZWcpOworCisJLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBDb250cm9sIFJlZ2lzdGVyIHdpdGggdGhlIHZhbHVlICovCisJb3V0X2JlMzIoJm1paV9yZWdzLT5taWltY29uLCAodTMyKSB2YWx1ZSk7CisKKwkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KKwl3aGlsZSAoKGluX2JlMzIoJm1paV9yZWdzLT5taWltaW5kKSkgJiBNSUlNSU5EX0JVU1kpCisJCWNwdV9yZWxheCgpOworCisJc3Bpbl91bmxvY2tfaXJxKCZ1Z2V0aC0+bG9jayk7CisKKwl1ZGVsYXkoMTAwMDApOworfQorCisvKiBSZWFkcyBmcm9tIHJlZ2lzdGVyIHJlZ251bSBpbiB0aGUgUEhZIGZvciBkZXZpY2UgZGV2LCAqLworLyogcmV0dXJuaW5nIHRoZSB2YWx1ZS4gIENsZWFycyBtaWltY29tIGZpcnN0LiAgQWxsIFBIWSAqLworLyogY29uZmlndXJhdGlvbiBoYXMgdG8gYmUgZG9uZSB0aHJvdWdoIHRoZSBUU0VDMSBNSUlNIHJlZ3MgKi8KK2ludCByZWFkX3BoeV9yZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG1paV9pZCwgaW50IHJlZ251bSkKK3sKKwl1Y2NfZ2V0aF9wcml2YXRlX3QgKnVnZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1Y2NfbWlpX21uZ190ICptaWlfcmVnczsKKwllbmV0X3RiaV9taWlfcmVnX2UgbWlpX3JlZyA9IChlbmV0X3RiaV9taWlfcmVnX2UpIHJlZ251bTsKKwl1MzIgdG1wX3JlZzsKKwl1MTYgdmFsdWU7CisKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycSgmdWdldGgtPmxvY2spOworCisJbWlpX3JlZ3MgPSB1Z2V0aC0+bWlpX2luZm8tPm1paV9yZWdzOworCisJLyogU2V0dGluZyB1cCB0aGUgTUlJIE1hbmdlbWVudCBBZGRyZXNzIFJlZ2lzdGVyICovCisJdG1wX3JlZyA9ICgodTMyKSBtaWlfaWQgPDwgTUlJTUFERF9QSFlfQUREUkVTU19TSElGVCkgfCBtaWlfcmVnOworCW91dF9iZTMyKCZtaWlfcmVncy0+bWlpbWFkZCwgdG1wX3JlZyk7CisKKwkvKiBQZXJmb3JtIGFuIE1JSSBtYW5hZ2VtZW50IHJlYWQgY3ljbGUgKi8KKwlvdXRfYmUzMigmbWlpX3JlZ3MtPm1paW1jb20sIE1JSU1DT01fUkVBRF9DWUNMRSk7CisKKwkvKiBXYWl0IHRpbGwgTUlJIG1hbmFnZW1lbnQgd3JpdGUgaXMgY29tcGxldGUgKi8KKwl3aGlsZSAoKGluX2JlMzIoJm1paV9yZWdzLT5taWltaW5kKSkgJiBNSUlNSU5EX0JVU1kpCisJCWNwdV9yZWxheCgpOworCisJdWRlbGF5KDEwMDAwKTsKKworCS8qIFJlYWQgTUlJIG1hbmFnZW1lbnQgc3RhdHVzICAqLworCXZhbHVlID0gKHUxNikgaW5fYmUzMigmbWlpX3JlZ3MtPm1paW1zdGF0KTsKKwlvdXRfYmUzMigmbWlpX3JlZ3MtPm1paW1jb20sIDApOworCWlmICh2YWx1ZSA9PSAweGZmZmYpCisJCXVncGh5X3dhcm4oInJlYWQgd3JvbmcgdmFsdWUgOiBtaWlfaWQgJWQsbWlpX3JlZyAlZCwgYmFzZSAlMDh4IiwKKwkJCSAgIG1paV9pZCwgbWlpX3JlZywgKHUzMikgJiAobWlpX3JlZ3MtPm1paW1jZmcpKTsKKworCXNwaW5fdW5sb2NrX2lycSgmdWdldGgtPmxvY2spOworCisJcmV0dXJuICh2YWx1ZSk7Cit9CisKK3ZvaWQgbWlpX2NsZWFyX3BoeV9pbnRlcnJ1cHQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKG1paV9pbmZvLT5waHlpbmZvLT5hY2tfaW50ZXJydXB0KQorCQltaWlfaW5mby0+cGh5aW5mby0+YWNrX2ludGVycnVwdChtaWlfaW5mbyk7Cit9CisKK3ZvaWQgbWlpX2NvbmZpZ3VyZV9waHlfaW50ZXJydXB0KHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8sCisJCQkJIHUzMiBpbnRlcnJ1cHRzKQoreworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwltaWlfaW5mby0+aW50ZXJydXB0cyA9IGludGVycnVwdHM7CisJaWYgKG1paV9pbmZvLT5waHlpbmZvLT5jb25maWdfaW50cikKKwkJbWlpX2luZm8tPnBoeWluZm8tPmNvbmZpZ19pbnRyKG1paV9pbmZvKTsKK30KKworLyogV3JpdGVzIE1JSV9BRFZFUlRJU0Ugd2l0aCB0aGUgYXBwcm9wcmlhdGUgdmFsdWVzLCBhZnRlcgorICogc2FuaXRpemluZyBhZHZlcnRpc2UgdG8gbWFrZSBzdXJlIG9ubHkgc3VwcG9ydGVkIGZlYXR1cmVzCisgKiBhcmUgYWR2ZXJ0aXNlZAorICovCitzdGF0aWMgdm9pZCBjb25maWdfZ2VubWlpX2FkdmVydChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXUzMiBhZHZlcnRpc2U7CisJdTE2IGFkdjsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBPbmx5IGFsbG93IGFkdmVydGlzaW5nIHdoYXQgdGhpcyBQSFkgc3VwcG9ydHMgKi8KKwltaWlfaW5mby0+YWR2ZXJ0aXNpbmcgJj0gbWlpX2luZm8tPnBoeWluZm8tPmZlYXR1cmVzOworCWFkdmVydGlzZSA9IG1paV9pbmZvLT5hZHZlcnRpc2luZzsKKworCS8qIFNldHVwIHN0YW5kYXJkIGFkdmVydGlzZW1lbnQgKi8KKwlhZHYgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0FEVkVSVElTRSk7CisJYWR2ICY9IH4oQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV8xMDBCQVNFNCk7CisJaWYgKGFkdmVydGlzZSAmIEFEVkVSVElTRURfMTBiYXNlVF9IYWxmKQorCQlhZHYgfD0gQURWRVJUSVNFXzEwSEFMRjsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwpCisJCWFkdiB8PSBBRFZFUlRJU0VfMTBGVUxMOworCWlmIChhZHZlcnRpc2UgJiBBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYpCisJCWFkdiB8PSBBRFZFUlRJU0VfMTAwSEFMRjsKKwlpZiAoYWR2ZXJ0aXNlICYgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsKQorCQlhZHYgfD0gQURWRVJUSVNFXzEwMEZVTEw7CisJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQURWRVJUSVNFLCBhZHYpOworfQorCitzdGF0aWMgdm9pZCBnZW5taWlfc2V0dXBfZm9yY2VkKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJdTE2IGN0cmw7CisJdTMyIGZlYXR1cmVzID0gbWlpX2luZm8tPnBoeWluZm8tPmZlYXR1cmVzOworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCWN0cmwgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpOworCisJY3RybCAmPQorCSAgICB+KEJNQ1JfRlVMTERQTFggfCBCTUNSX1NQRUVEMTAwIHwgQk1DUl9TUEVFRDEwMDAgfCBCTUNSX0FORU5BQkxFKTsKKwljdHJsIHw9IEJNQ1JfUkVTRVQ7CisKKwlzd2l0Y2ggKG1paV9pbmZvLT5zcGVlZCkgeworCWNhc2UgU1BFRURfMTAwMDoKKwkJaWYgKGZlYXR1cmVzICYgKFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgorCQkJCXwgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKSkgeworCQkJY3RybCB8PSBCTUNSX1NQRUVEMTAwMDsKKwkJCWJyZWFrOworCQl9CisJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwljYXNlIFNQRUVEXzEwMDoKKwkJaWYgKGZlYXR1cmVzICYgKFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCisJCQkJfCBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCkpIHsKKwkJCWN0cmwgfD0gQk1DUl9TUEVFRDEwMDsKKwkJCWJyZWFrOworCQl9CisJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwOworCWNhc2UgU1BFRURfMTA6CisJCWlmIChmZWF0dXJlcyAmIChTVVBQT1JURURfMTBiYXNlVF9IYWxmCisJCQkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsKSkKKwkJCWJyZWFrOworCWRlZmF1bHQ6CQkvKiBVbnN1cHBvcnRlZCBzcGVlZCEgKi8KKwkJdWdwaHlfZXJyKCIlczogQmFkIHNwZWVkISIsIG1paV9pbmZvLT5kZXYtPm5hbWUpOworCQlicmVhazsKKwl9CisKKwlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLCBjdHJsKTsKK30KKworLyogRW5hYmxlIGFuZCBSZXN0YXJ0IEF1dG9uZWdvdGlhdGlvbiAqLworc3RhdGljIHZvaWQgZ2VubWlpX3Jlc3RhcnRfYW5lZyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXUxNiBjdGw7CisKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJY3RsID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9CTUNSKTsKKwljdGwgfD0gKEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7CisJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwgY3RsKTsKK30KKworc3RhdGljIGludCBnYml0X2NvbmZpZ19hbmVnKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJdTE2IGFkdjsKKwl1MzIgYWR2ZXJ0aXNlOworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChtaWlfaW5mby0+YXV0b25lZykgeworCQkvKiBDb25maWd1cmUgdGhlIEFEVkVSVElTRSByZWdpc3RlciAqLworCQljb25maWdfZ2VubWlpX2FkdmVydChtaWlfaW5mbyk7CisJCWFkdmVydGlzZSA9IG1paV9pbmZvLT5hZHZlcnRpc2luZzsKKworCQlhZHYgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJXzEwMDBCQVNFVENPTlRST0wpOworCQlhZHYgJj0gfihNSUlfMTAwMEJBU0VUQ09OVFJPTF9GVUxMRFVQTEVYQ0FQIHwKKwkJCSBNSUlfMTAwMEJBU0VUQ09OVFJPTF9IQUxGRFVQTEVYQ0FQKTsKKwkJaWYgKGFkdmVydGlzZSAmIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZikKKwkJCWFkdiB8PSBNSUlfMTAwMEJBU0VUQ09OVFJPTF9IQUxGRFVQTEVYQ0FQOworCQlpZiAoYWR2ZXJ0aXNlICYgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKQorCQkJYWR2IHw9IE1JSV8xMDAwQkFTRVRDT05UUk9MX0ZVTExEVVBMRVhDQVA7CisJCXBoeV93cml0ZShtaWlfaW5mbywgTUlJXzEwMDBCQVNFVENPTlRST0wsIGFkdik7CisKKwkJLyogU3RhcnQvUmVzdGFydCBhbmVnICovCisJCWdlbm1paV9yZXN0YXJ0X2FuZWcobWlpX2luZm8pOworCX0gZWxzZQorCQlnZW5taWlfc2V0dXBfZm9yY2VkKG1paV9pbmZvKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdlbm1paV9jb25maWdfYW5lZyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAobWlpX2luZm8tPmF1dG9uZWcpIHsKKwkJY29uZmlnX2dlbm1paV9hZHZlcnQobWlpX2luZm8pOworCQlnZW5taWlfcmVzdGFydF9hbmVnKG1paV9pbmZvKTsKKwl9IGVsc2UKKwkJZ2VubWlpX3NldHVwX2ZvcmNlZChtaWlfaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBnZW5taWlfdXBkYXRlX2xpbmsoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwl1MTYgc3RhdHVzOworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCS8qIERvIGEgZmFrZSByZWFkICovCisJcGh5X3JlYWQobWlpX2luZm8sIE1JSV9CTVNSKTsKKworCS8qIFJlYWQgbGluayBhbmQgYXV0b25lZ290aWF0aW9uIHN0YXR1cyAqLworCXN0YXR1cyA9IHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfQk1TUik7CisJaWYgKChzdGF0dXMgJiBCTVNSX0xTVEFUVVMpID09IDApCisJCW1paV9pbmZvLT5saW5rID0gMDsKKwllbHNlCisJCW1paV9pbmZvLT5saW5rID0gMTsKKworCS8qIElmIHdlIGFyZSBhdXRvbmVnb3RpYXRpbmcsIGFuZCBub3QgZG9uZSwKKwkgKiByZXR1cm4gYW4gZXJyb3IgKi8KKwlpZiAobWlpX2luZm8tPmF1dG9uZWcgJiYgIShzdGF0dXMgJiBCTVNSX0FORUdDT01QTEVURSkpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2VubWlpX3JlYWRfc3RhdHVzKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJdTE2IHN0YXR1czsKKwlpbnQgZXJyOworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCS8qIFVwZGF0ZSB0aGUgbGluaywgYnV0IHJldHVybiBpZiB0aGVyZQorCSAqIHdhcyBhbiBlcnJvciAqLworCWVyciA9IGdlbm1paV91cGRhdGVfbGluayhtaWlfaW5mbyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChtaWlfaW5mby0+YXV0b25lZykgeworCQlzdGF0dXMgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0xQQSk7CisKKwkJaWYgKHN0YXR1cyAmIChMUEFfMTBGVUxMIHwgTFBBXzEwMEZVTEwpKQorCQkJbWlpX2luZm8tPmR1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQltaWlfaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCWlmIChzdGF0dXMgJiAoTFBBXzEwMEZVTEwgfCBMUEFfMTAwSEFMRikpCisJCQltaWlfaW5mby0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCWVsc2UKKwkJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwOworCQltaWlfaW5mby0+cGF1c2UgPSAwOworCX0KKwkvKiBPbiBub24tYW5lZywgd2UgYXNzdW1lIHdoYXQgd2UgcHV0IGluIEJNQ1IgaXMgdGhlIHNwZWVkLAorCSAqIHRob3VnaCBtYWdpYy1hbmVnIHNob3VsZG4ndCBwcmV2ZW50IHRoaXMgY2FzZSBmcm9tIG9jY3VycmluZworCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFydmVsbF9pbml0KHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCXBoeV93cml0ZShtaWlfaW5mbywgMHgxNCwgMHgwY2QyKTsKKwlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLAorCQkgIHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfQk1DUikgfCBCTUNSX1JFU0VUKTsKKwltc2xlZXAoNDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXJ2ZWxsX2NvbmZpZ19hbmVnKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCS8qIFRoZSBNYXJ2ZWxsIFBIWSBoYXMgYW4gZXJyYXRhIHdoaWNoIHJlcXVpcmVzCisJICogdGhhdCBjZXJ0YWluIHJlZ2lzdGVycyBnZXQgd3JpdHRlbiBpbiBvcmRlcgorCSAqIHRvIHJlc3RhcnQgYXV0b25lZ290aWF0aW9uICovCisJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisKKwlwaHlfd3JpdGUobWlpX2luZm8sIDB4MWQsIDB4MWYpOworCXBoeV93cml0ZShtaWlfaW5mbywgMHgxZSwgMHgyMDBjKTsKKwlwaHlfd3JpdGUobWlpX2luZm8sIDB4MWQsIDB4NSk7CisJcGh5X3dyaXRlKG1paV9pbmZvLCAweDFlLCAwKTsKKwlwaHlfd3JpdGUobWlpX2luZm8sIDB4MWUsIDB4MTAwKTsKKworCWdiaXRfY29uZmlnX2FuZWcobWlpX2luZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFydmVsbF9yZWFkX3N0YXR1cyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXUxNiBzdGF0dXM7CisJaW50IGVycjsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBVcGRhdGUgdGhlIGxpbmssIGJ1dCByZXR1cm4gaWYgdGhlcmUKKwkgKiB3YXMgYW4gZXJyb3IgKi8KKwllcnIgPSBnZW5taWlfdXBkYXRlX2xpbmsobWlpX2luZm8pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBJZiB0aGUgbGluayBpcyB1cCwgcmVhZCB0aGUgc3BlZWQgYW5kIGR1cGxleCAqLworCS8qIElmIHdlIGFyZW4ndCBhdXRvbmVnb3RpYXRpbmcsIGFzc3VtZSBzcGVlZHMKKwkgKiBhcmUgYXMgc2V0ICovCisJaWYgKG1paV9pbmZvLT5hdXRvbmVnICYmIG1paV9pbmZvLT5saW5rKSB7CisJCWludCBzcGVlZDsKKwkJc3RhdHVzID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVMpOworCisJCS8qIEdldCB0aGUgZHVwbGV4aXR5ICovCisJCWlmIChzdGF0dXMgJiBNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTX0ZVTExEVVBMRVgpCisJCQltaWlfaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UKKwkJCW1paV9pbmZvLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCQkvKiBHZXQgdGhlIHNwZWVkICovCisJCXNwZWVkID0gc3RhdHVzICYgTUlJX00xMDExX1BIWV9TUEVDX1NUQVRVU19TUERfTUFTSzsKKwkJc3dpdGNoIChzcGVlZCkgeworCQljYXNlIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfMTAwMDoKKwkJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJCQlicmVhazsKKwkJY2FzZSBNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTXzEwMDoKKwkJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwMDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbWlpX2luZm8tPnNwZWVkID0gU1BFRURfMTA7CisJCQlicmVhazsKKwkJfQorCQltaWlfaW5mby0+cGF1c2UgPSAwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1hcnZlbGxfYWNrX2ludGVycnVwdChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBDbGVhciB0aGUgaW50ZXJydXB0cyBieSByZWFkaW5nIHRoZSByZWcgKi8KKwlwaHlfcmVhZChtaWlfaW5mbywgTUlJX00xMDExX0lFVkVOVCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXJ2ZWxsX2NvbmZpZ19pbnRyKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChtaWlfaW5mby0+aW50ZXJydXB0cyA9PSBNSUlfSU5URVJSVVBUX0VOQUJMRUQpCisJCXBoeV93cml0ZShtaWlfaW5mbywgTUlJX00xMDExX0lNQVNLLCBNSUlfTTEwMTFfSU1BU0tfSU5JVCk7CisJZWxzZQorCQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9NMTAxMV9JTUFTSywgTUlJX00xMDExX0lNQVNLX0NMRUFSKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpczgyMHhfaW5pdChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9DSVM4MjAxX0FVWF9DT05TVEFULAorCQkgIE1JSV9DSVM4MjAxX0FVWENPTlNUQVRfSU5JVCk7CisJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9FWFRfQ09OMSwgTUlJX0NJUzgyMDFfRVhUQ09OMV9JTklUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpczgyMHhfcmVhZF9zdGF0dXMoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwl1MTYgc3RhdHVzOworCWludCBlcnI7CisKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogVXBkYXRlIHRoZSBsaW5rLCBidXQgcmV0dXJuIGlmIHRoZXJlCisJICogd2FzIGFuIGVycm9yICovCisJZXJyID0gZ2VubWlpX3VwZGF0ZV9saW5rKG1paV9pbmZvKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogSWYgdGhlIGxpbmsgaXMgdXAsIHJlYWQgdGhlIHNwZWVkIGFuZCBkdXBsZXggKi8KKwkvKiBJZiB3ZSBhcmVuJ3QgYXV0b25lZ290aWF0aW5nLCBhc3N1bWUgc3BlZWRzCisJICogYXJlIGFzIHNldCAqLworCWlmIChtaWlfaW5mby0+YXV0b25lZyAmJiBtaWlfaW5mby0+bGluaykgeworCQlpbnQgc3BlZWQ7CisKKwkJc3RhdHVzID0gcGh5X3JlYWQobWlpX2luZm8sIE1JSV9DSVM4MjAxX0FVWF9DT05TVEFUKTsKKwkJaWYgKHN0YXR1cyAmIE1JSV9DSVM4MjAxX0FVWENPTlNUQVRfRFVQTEVYKQorCQkJbWlpX2luZm8tPmR1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQltaWlfaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisKKwkJc3BlZWQgPSBzdGF0dXMgJiBNSUlfQ0lTODIwMV9BVVhDT05TVEFUX1NQRUVEOworCisJCXN3aXRjaCAoc3BlZWQpIHsKKwkJY2FzZSBNSUlfQ0lTODIwMV9BVVhDT05TVEFUX0dCSVQ6CisJCQltaWlfaW5mby0+c3BlZWQgPSBTUEVFRF8xMDAwOworCQkJYnJlYWs7CisJCWNhc2UgTUlJX0NJUzgyMDFfQVVYQ09OU1RBVF8xMDA6CisJCQltaWlfaW5mby0+c3BlZWQgPSBTUEVFRF8xMDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCW1paV9pbmZvLT5zcGVlZCA9IFNQRUVEXzEwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaXM4MjB4X2Fja19pbnRlcnJ1cHQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJcGh5X3JlYWQobWlpX2luZm8sIE1JSV9DSVM4MjAxX0lTVEFUKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNpczgyMHhfY29uZmlnX2ludHIoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKG1paV9pbmZvLT5pbnRlcnJ1cHRzID09IE1JSV9JTlRFUlJVUFRfRU5BQkxFRCkKKwkJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQ0lTODIwMV9JTUFTSywgTUlJX0NJUzgyMDFfSU1BU0tfTUFTSyk7CisJZWxzZQorCQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9DSVM4MjAxX0lNQVNLLCAwKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIERNOTE2MV9ERUxBWSAxMAorCitzdGF0aWMgaW50IGRtOTE2MV9yZWFkX3N0YXR1cyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKQoreworCXUxNiBzdGF0dXM7CisJaW50IGVycjsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvKiBVcGRhdGUgdGhlIGxpbmssIGJ1dCByZXR1cm4gaWYgdGhlcmUKKwkgKiB3YXMgYW4gZXJyb3IgKi8KKwllcnIgPSBnZW5taWlfdXBkYXRlX2xpbmsobWlpX2luZm8pOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBJZiB0aGUgbGluayBpcyB1cCwgcmVhZCB0aGUgc3BlZWQgYW5kIGR1cGxleCAqLworCS8qIElmIHdlIGFyZW4ndCBhdXRvbmVnb3RpYXRpbmcsIGFzc3VtZSBzcGVlZHMKKwkgKiBhcmUgYXMgc2V0ICovCisJaWYgKG1paV9pbmZvLT5hdXRvbmVnICYmIG1paV9pbmZvLT5saW5rKSB7CisJCXN0YXR1cyA9IHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfRE05MTYxX1NDU1IpOworCQlpZiAoc3RhdHVzICYgKE1JSV9ETTkxNjFfU0NTUl8xMDBGIHwgTUlJX0RNOTE2MV9TQ1NSXzEwMEgpKQorCQkJbWlpX2luZm8tPnNwZWVkID0gU1BFRURfMTAwOworCQllbHNlCisJCQltaWlfaW5mby0+c3BlZWQgPSBTUEVFRF8xMDsKKworCQlpZiAoc3RhdHVzICYgKE1JSV9ETTkxNjFfU0NTUl8xMDBGIHwgTUlJX0RNOTE2MV9TQ1NSXzEwRikpCisJCQltaWlfaW5mby0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCWVsc2UKKwkJCW1paV9pbmZvLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbTkxNjFfY29uZmlnX2FuZWcoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwlzdHJ1Y3QgZG05MTYxX3ByaXZhdGUgKnByaXYgPSBtaWlfaW5mby0+cHJpdjsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoMCA9PSBwcml2LT5yZXNldGRvbmUpCisJCXJldHVybiAtRUFHQUlOOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRtOTE2MV90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyA9IChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKilkYXRhOworCXN0cnVjdCBkbTkxNjFfcHJpdmF0ZSAqcHJpdiA9IG1paV9pbmZvLT5wcml2OworCXUxNiBzdGF0dXMgPSBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0JNU1IpOworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChzdGF0dXMgJiBCTVNSX0FORUdDT01QTEVURSkgeworCQlwcml2LT5yZXNldGRvbmUgPSAxOworCX0gZWxzZQorCQltb2RfdGltZXIoJnByaXYtPnRpbWVyLCBqaWZmaWVzICsgRE05MTYxX0RFTEFZICogSFopOworfQorCitzdGF0aWMgaW50IGRtOTE2MV9pbml0KHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisJc3RydWN0IGRtOTE2MV9wcml2YXRlICpwcml2OworCisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCS8qIEFsbG9jYXRlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCisJcHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTkxNjFfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCisJaWYgKE5VTEwgPT0gcHJpdikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltaWlfaW5mby0+cHJpdiA9IHByaXY7CisKKwkvKiBSZXNldCBpcyBub3QgZG9uZSB5ZXQgKi8KKwlwcml2LT5yZXNldGRvbmUgPSAwOworCisJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfQk1DUiwKKwkJICBwaHlfcmVhZChtaWlfaW5mbywgTUlJX0JNQ1IpIHwgQk1DUl9SRVNFVCk7CisKKwlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9CTUNSLAorCQkgIHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfQk1DUikgJiB+Qk1DUl9JU09MQVRFKTsKKworCWNvbmZpZ19nZW5taWlfYWR2ZXJ0KG1paV9pbmZvKTsKKwkvKiBTdGFydC9SZXN0YXJ0IGFuZWcgKi8KKwlnZW5taWlfY29uZmlnX2FuZWcobWlpX2luZm8pOworCisJLyogU3RhcnQgYSB0aW1lciBmb3IgRE05MTYxX0RFTEFZIHNlY29uZHMgdG8gd2FpdAorCSAqIGZvciB0aGUgUEhZIHRvIGJlIHJlYWR5ICovCisJaW5pdF90aW1lcigmcHJpdi0+dGltZXIpOworCXByaXYtPnRpbWVyLmZ1bmN0aW9uID0gJmRtOTE2MV90aW1lcjsKKwlwcml2LT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpbWlpX2luZm87CisJbW9kX3RpbWVyKCZwcml2LT50aW1lciwgamlmZmllcyArIERNOTE2MV9ERUxBWSAqIEhaKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkbTkxNjFfY2xvc2Uoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwlzdHJ1Y3QgZG05MTYxX3ByaXZhdGUgKnByaXYgPSBtaWlfaW5mby0+cHJpdjsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlkZWxfdGltZXJfc3luYygmcHJpdi0+dGltZXIpOworCWtmcmVlKHByaXYpOworfQorCitzdGF0aWMgaW50IGRtOTE2MV9hY2tfaW50ZXJydXB0KHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqbWlpX2luZm8pCit7CisvKiBGSVhNRTogVGhpcyBsaW5lcyBhcmUgZm9yIEJVRyBmaXhpbmcgaW4gdGhlIG1wYzgzMjUuCitSZW1vdmUgdGhpcyBmcm9tIGhlcmUgd2hlbiBpdCdzIGZpeGVkICovCisJaWYgKGJjc3JfcmVncyA9PSBOVUxMKQorCQliY3NyX3JlZ3MgPSAodTggKikgaW9yZW1hcChCQ1NSX1BIWVNfQUREUiwgQkNTUl9TSVpFKTsKKwliY3NyX3JlZ3NbMTRdIHw9IDB4NDA7CisJdWdwaHlfdmRiZygiJXM6IElOIiwgX19GVU5DVElPTl9fKTsKKworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHRzIGJ5IHJlYWRpbmcgdGhlIHJlZyAqLworCXBoeV9yZWFkKG1paV9pbmZvLCBNSUlfRE05MTYxX0lOVFIpOworCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbTkxNjFfY29uZmlnX2ludHIoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKy8qIEZJWE1FOiBUaGlzIGxpbmVzIGFyZSBmb3IgQlVHIGZpeGluZyBpbiB0aGUgbXBjODMyNS4KK1JlbW92ZSB0aGlzIGZyb20gaGVyZSB3aGVuIGl0J3MgZml4ZWQgKi8KKwlpZiAoYmNzcl9yZWdzID09IE5VTEwpIHsKKwkJYmNzcl9yZWdzID0gKHU4ICopIGlvcmVtYXAoQkNTUl9QSFlTX0FERFIsIEJDU1JfU0laRSk7CisJCWJjc3JfcmVnc1sxNF0gJj0gfjB4NDA7CisJfQorCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAobWlpX2luZm8tPmludGVycnVwdHMgPT0gTUlJX0lOVEVSUlVQVF9FTkFCTEVEKQorCQlwaHlfd3JpdGUobWlpX2luZm8sIE1JSV9ETTkxNjFfSU5UUiwgTUlJX0RNOTE2MV9JTlRSX0lOSVQpOworCWVsc2UKKwkJcGh5X3dyaXRlKG1paV9pbmZvLCBNSUlfRE05MTYxX0lOVFIsIE1JSV9ETTkxNjFfSU5UUl9TVE9QKTsKKworCXJldHVybiAwOworfQorCisvKiBDaWNhZGEgODIweCAqLworc3RhdGljIHN0cnVjdCBwaHlfaW5mbyBwaHlfaW5mb19jaXM4MjB4ID0geworCS5waHlfaWQgPSAweDAwMGZjNDQwLAorCS5uYW1lID0gIkNpY2FkYSBDaXM4MjA0IiwKKwkucGh5X2lkX21hc2sgPSAweDAwMGZmZmMwLAorCS5mZWF0dXJlcyA9IE1JSV9HQklUX0ZFQVRVUkVTLAorCS5pbml0ID0gJmNpczgyMHhfaW5pdCwKKwkuY29uZmlnX2FuZWcgPSAmZ2JpdF9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMgPSAmY2lzODIweF9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdCA9ICZjaXM4MjB4X2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyID0gJmNpczgyMHhfY29uZmlnX2ludHIsCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9pbmZvIHBoeV9pbmZvX2RtOTE2MSA9IHsKKwkucGh5X2lkID0gMHgwMTgxYjg4MCwKKwkucGh5X2lkX21hc2sgPSAweDBmZmZmZmYwLAorCS5uYW1lID0gIkRhdmljb20gRE05MTYxRSIsCisJLmluaXQgPSBkbTkxNjFfaW5pdCwKKwkuY29uZmlnX2FuZWcgPSBkbTkxNjFfY29uZmlnX2FuZWcsCisJLnJlYWRfc3RhdHVzID0gZG05MTYxX3JlYWRfc3RhdHVzLAorCS5jbG9zZSA9IGRtOTE2MV9jbG9zZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2luZm8gcGh5X2luZm9fZG05MTYxYSA9IHsKKwkucGh5X2lkID0gMHgwMTgxYjhhMCwKKwkucGh5X2lkX21hc2sgPSAweDBmZmZmZmYwLAorCS5uYW1lID0gIkRhdmljb20gRE05MTYxQSIsCisJLmZlYXR1cmVzID0gTUlJX0JBU0lDX0ZFQVRVUkVTLAorCS5pbml0ID0gZG05MTYxX2luaXQsCisJLmNvbmZpZ19hbmVnID0gZG05MTYxX2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cyA9IGRtOTE2MV9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdCA9IGRtOTE2MV9hY2tfaW50ZXJydXB0LAorCS5jb25maWdfaW50ciA9IGRtOTE2MV9jb25maWdfaW50ciwKKwkuY2xvc2UgPSBkbTkxNjFfY2xvc2UsCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9pbmZvIHBoeV9pbmZvX21hcnZlbGwgPSB7CisJLnBoeV9pZCA9IDB4MDE0MTBjMDAsCisJLnBoeV9pZF9tYXNrID0gMHhmZmZmZmYwMCwKKwkubmFtZSA9ICJNYXJ2ZWxsIDg4RTExeDEiLAorCS5mZWF0dXJlcyA9IE1JSV9HQklUX0ZFQVRVUkVTLAorCS5pbml0ID0gJm1hcnZlbGxfaW5pdCwKKwkuY29uZmlnX2FuZWcgPSAmbWFydmVsbF9jb25maWdfYW5lZywKKwkucmVhZF9zdGF0dXMgPSAmbWFydmVsbF9yZWFkX3N0YXR1cywKKwkuYWNrX2ludGVycnVwdCA9ICZtYXJ2ZWxsX2Fja19pbnRlcnJ1cHQsCisJLmNvbmZpZ19pbnRyID0gJm1hcnZlbGxfY29uZmlnX2ludHIsCit9OworCitzdGF0aWMgc3RydWN0IHBoeV9pbmZvIHBoeV9pbmZvX2dlbm1paSA9IHsKKwkucGh5X2lkID0gMHgwMDAwMDAwMCwKKwkucGh5X2lkX21hc2sgPSAweDAwMDAwMDAwLAorCS5uYW1lID0gIkdlbmVyaWMgTUlJIiwKKwkuZmVhdHVyZXMgPSBNSUlfQkFTSUNfRkVBVFVSRVMsCisJLmNvbmZpZ19hbmVnID0gZ2VubWlpX2NvbmZpZ19hbmVnLAorCS5yZWFkX3N0YXR1cyA9IGdlbm1paV9yZWFkX3N0YXR1cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5X2luZm8gKnBoeV9pbmZvW10gPSB7CisJJnBoeV9pbmZvX2NpczgyMHgsCisJJnBoeV9pbmZvX21hcnZlbGwsCisJJnBoeV9pbmZvX2RtOTE2MSwKKwkmcGh5X2luZm9fZG05MTYxYSwKKwkmcGh5X2luZm9fZ2VubWlpLAorCU5VTEwKK307CisKK3UxNiBwaHlfcmVhZChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvLCB1MTYgcmVnbnVtKQoreworCXUxNiByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXVncGh5X3ZkYmcoIiVzOiBJTiIsIF9fRlVOQ1RJT05fXyk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWlpX2luZm8tPm1kaW9fbG9jaywgZmxhZ3MpOworCXJldHZhbCA9IG1paV9pbmZvLT5tZGlvX3JlYWQobWlpX2luZm8tPmRldiwgbWlpX2luZm8tPm1paV9pZCwgcmVnbnVtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaWlfaW5mby0+bWRpb19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIHBoeV93cml0ZShzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvLCB1MTYgcmVnbnVtLCB1MTYgdmFsKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1paV9pbmZvLT5tZGlvX2xvY2ssIGZsYWdzKTsKKwltaWlfaW5mby0+bWRpb193cml0ZShtaWlfaW5mby0+ZGV2LCBtaWlfaW5mby0+bWlpX2lkLCByZWdudW0sIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWlpX2luZm8tPm1kaW9fbG9jaywgZmxhZ3MpOworfQorCisvKiBVc2UgdGhlIFBIWSBJRCByZWdpc3RlcnMgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBQSFkgaXMgYXR0YWNoZWQKKyAqIHRvIGRldmljZSBkZXYuICByZXR1cm4gYSBzdHJ1Y3QgcGh5X2luZm8gc3RydWN0dXJlIGRlc2NyaWJpbmcgdGhhdCBQSFkKKyAqLworc3RydWN0IHBoeV9pbmZvICpnZXRfcGh5X2luZm8oc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbykKK3sKKwl1MTYgcGh5X3JlZzsKKwl1MzIgcGh5X0lEOworCWludCBpOworCXN0cnVjdCBwaHlfaW5mbyAqdGhlSW5mbyA9IE5VTEw7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG1paV9pbmZvLT5kZXY7CisKKwl1Z3BoeV92ZGJnKCIlczogSU4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMSwgYW5kIHB1dCB0aGVtIGluIHRoZSB1cHBlciBoYWxmICovCisJcGh5X3JlZyA9IHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfUEhZU0lEMSk7CisJcGh5X0lEID0gKHBoeV9yZWcgJiAweGZmZmYpIDw8IDE2OworCisJLyogR3JhYiB0aGUgYml0cyBmcm9tIFBIWUlSMiwgYW5kIHB1dCB0aGVtIGluIHRoZSBsb3dlciBoYWxmICovCisJcGh5X3JlZyA9IHBoeV9yZWFkKG1paV9pbmZvLCBNSUlfUEhZU0lEMik7CisJcGh5X0lEIHw9IChwaHlfcmVnICYgMHhmZmZmKTsKKworCS8qIGxvb3AgdGhyb3VnaCBhbGwgdGhlIGtub3duIFBIWSB0eXBlcywgYW5kIGZpbmQgb25lIHRoYXQgKi8KKwkvKiBtYXRjaGVzIHRoZSBJRCB3ZSByZWFkIGZyb20gdGhlIFBIWS4gKi8KKwlmb3IgKGkgPSAwOyBwaHlfaW5mb1tpXTsgaSsrKQorCQlpZiAocGh5X2luZm9baV0tPnBoeV9pZCA9PSAocGh5X0lEICYgcGh5X2luZm9baV0tPnBoeV9pZF9tYXNrKSl7CisJCQl0aGVJbmZvID0gcGh5X2luZm9baV07CisJCQlicmVhazsKKwkJfQorCisJLyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuLCBhcyB3ZSBoYXZlIGdlbmVyaWMgUEhZIHN1cHBvcnQgKi8KKwlpZiAodGhlSW5mbyA9PSBOVUxMKSB7CisJCXVncGh5X2luZm8oIiVzOiBQSFkgaWQgJXggaXMgbm90IHN1cHBvcnRlZCEiLCBkZXYtPm5hbWUsCisJCQkgICBwaHlfSUQpOworCQlyZXR1cm4gTlVMTDsKKwl9IGVsc2UgeworCQl1Z3BoeV9pbmZvKCIlczogUEhZIGlzICVzICgleCkiLCBkZXYtPm5hbWUsIHRoZUluZm8tPm5hbWUsCisJCQkgICBwaHlfSUQpOworCX0KKworCXJldHVybiB0aGVJbmZvOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGhfcGh5LmggYi9kcml2ZXJzL25ldC91Y2NfZ2V0aF9waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjk4YjhmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvdWNjX2dldGhfcGh5LmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIEZyZWVzY2FsZSBTZW1pY29uZHV0b3IsIEluYy4gMjAwNi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IFNobG9taSBHcmlkaXNoIDxncmlkaXNoQGZyZWVzY2FsZS5jb20+CisgKgorICogRGVzY3JpcHRpb246CisgKiBVQ0MgR0VUSCBEcml2ZXIgLS0gUEhZIGhhbmRsaW5nCisgKgorICogQ2hhbmdlbG9nOgorICogSnVuIDI4LCAyMDA2IExpIFlhbmcgPExlb0xpQGZyZWVzY2FsZS5jb20+CisgKiAtIFJlYXJyYW5nZSBjb2RlIGFuZCBzdHlsZSBmaXhlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisjaWZuZGVmIF9fVUNDX0dFVEhfUEhZX0hfXworI2RlZmluZSBfX1VDQ19HRVRIX1BIWV9IX18KKworI2RlZmluZSBNSUlfZW5kICgodTMyKS0yKQorI2RlZmluZSBNSUlfcmVhZCAoKHUzMiktMSkKKworI2RlZmluZSBNSUlNSU5EX0JVU1kgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1JSU1JTkRfTk9UVkFMSUQgICAgICAgIDB4MDAwMDAwMDQKKworI2RlZmluZSBVR0VUSF9BTl9USU1FT1VUICAgICAgICAyMDAwCisKKy8qIDEwMDBCVCBjb250cm9sIChNYXJ2ZWxsICYgQkNNNTR4eCBhdCBsZWFzdCkgKi8KKyNkZWZpbmUgTUlJXzEwMDBCQVNFVENPTlRST0wgICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIE1JSV8xMDAwQkFTRVRDT05UUk9MX0ZVTExEVVBMRVhDQVAgICAgMHgwMjAwCisjZGVmaW5lIE1JSV8xMDAwQkFTRVRDT05UUk9MX0hBTEZEVVBMRVhDQVAgICAgMHgwMTAwCisKKy8qIENpY2FkYSBFeHRlbmRlZCBDb250cm9sIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgTUlJX0NJUzgyMDFfRVhUX0NPTjEgICAgICAgIDB4MTcKKyNkZWZpbmUgTUlJX0NJUzgyMDFfRVhUQ09OMV9JTklUICAgIDB4MDAwMAorCisvKiBDaWNhZGEgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlJX0NJUzgyMDFfSU1BU0sgICAgICAgICAgIDB4MTkKKyNkZWZpbmUgTUlJX0NJUzgyMDFfSU1BU0tfSUVOICAgICAgIDB4ODAwMAorI2RlZmluZSBNSUlfQ0lTODIwMV9JTUFTS19TUEVFRCAgICAgMHg0MDAwCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lNQVNLX0xJTksgICAgICAweDIwMDAKKyNkZWZpbmUgTUlJX0NJUzgyMDFfSU1BU0tfRFVQTEVYICAgIDB4MTAwMAorI2RlZmluZSBNSUlfQ0lTODIwMV9JTUFTS19NQVNLICAgICAgMHhmMDAwCisKKy8qIENpY2FkYSBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lTVEFUICAgICAgICAgICAweDFhCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lTVEFUX1NUQVRVUyAgICAweDgwMDAKKyNkZWZpbmUgTUlJX0NJUzgyMDFfSVNUQVRfU1BFRUQgICAgIDB4NDAwMAorI2RlZmluZSBNSUlfQ0lTODIwMV9JU1RBVF9MSU5LICAgICAgMHgyMDAwCisjZGVmaW5lIE1JSV9DSVM4MjAxX0lTVEFUX0RVUExFWCAgICAweDEwMDAKKworLyogQ2ljYWRhIEF1eGlsaWFyeSBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSUlfQ0lTODIwMV9BVVhfQ09OU1RBVCAgICAgICAgMHgxYworI2RlZmluZSBNSUlfQ0lTODIwMV9BVVhDT05TVEFUX0lOSVQgICAgMHgwMDA0CisjZGVmaW5lIE1JSV9DSVM4MjAxX0FVWENPTlNUQVRfRFVQTEVYICAweDAwMjAKKyNkZWZpbmUgTUlJX0NJUzgyMDFfQVVYQ09OU1RBVF9TUEVFRCAgIDB4MDAxOAorI2RlZmluZSBNSUlfQ0lTODIwMV9BVVhDT05TVEFUX0dCSVQgICAgMHgwMDEwCisjZGVmaW5lIE1JSV9DSVM4MjAxX0FVWENPTlNUQVRfMTAwICAgICAweDAwMDgKKworLyogODhFMTAxMSBQSFkgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVMgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfMTAwMCAgICAgICAgICAweDgwMDAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TUEVDX1NUQVRVU18xMDAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTX1NQRF9NQVNLICAgICAgMHhjMDAwCisjZGVmaW5lIE1JSV9NMTAxMV9QSFlfU1BFQ19TVEFUVVNfRlVMTERVUExFWCAgICAweDIwMDAKKyNkZWZpbmUgTUlJX00xMDExX1BIWV9TUEVDX1NUQVRVU19SRVNPTFZFRCAgICAgIDB4MDgwMAorI2RlZmluZSBNSUlfTTEwMTFfUEhZX1NQRUNfU1RBVFVTX0xJTksgICAgICAgICAgMHgwNDAwCisKKyNkZWZpbmUgTUlJX00xMDExX0lFVkVOVCAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIE1JSV9NMTAxMV9JRVZFTlRfQ0xFQVIgICAgICAgICAgMHgwMDAwCisKKyNkZWZpbmUgTUlJX00xMDExX0lNQVNLICAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIE1JSV9NMTAxMV9JTUFTS19JTklUICAgICAgICAgICAgMHg2NDAwCisjZGVmaW5lIE1JSV9NMTAxMV9JTUFTS19DTEVBUiAgICAgICAgICAgMHgwMDAwCisKKyNkZWZpbmUgTUlJX0RNOTE2MV9TQ1IgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIE1JSV9ETTkxNjFfU0NSX0lOSVQgICAgICAgICAgICAgMHgwNjEwCisKKy8qIERNOTE2MSBTcGVjaWZpZWQgQ29uZmlndXJhdGlvbiBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9ETTkxNjFfU0NTUiAgICAgICAgICAgICAgICAgMHgxMQorI2RlZmluZSBNSUlfRE05MTYxX1NDU1JfMTAwRiAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBNSUlfRE05MTYxX1NDU1JfMTAwSCAgICAgICAgICAgIDB4NDAwMAorI2RlZmluZSBNSUlfRE05MTYxX1NDU1JfMTBGICAgICAgICAgICAgIDB4MjAwMAorI2RlZmluZSBNSUlfRE05MTYxX1NDU1JfMTBIICAgICAgICAgICAgIDB4MTAwMAorCisvKiBETTkxNjEgSW50ZXJydXB0IFJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9ETTkxNjFfSU5UUiAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfUEVORCAgICAgICAgICAgIDB4ODAwMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfRFBMWF9NQVNLICAgICAgIDB4MDgwMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfU1BEX01BU0sgICAgICAgIDB4MDQwMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfTElOS19NQVNLICAgICAgIDB4MDIwMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfTUFTSyAgICAgICAgICAgIDB4MDEwMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfRFBMWF9DSEFOR0UgICAgIDB4MDAxMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfU1BEX0NIQU5HRSAgICAgIDB4MDAwOAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfTElOS19DSEFOR0UgICAgIDB4MDAwNAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfSU5JVCAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBNSUlfRE05MTYxX0lOVFJfU1RPUCAgICBcCisoTUlJX0RNOTE2MV9JTlRSX0RQTFhfTUFTSyB8IE1JSV9ETTkxNjFfSU5UUl9TUERfTUFTSyBcCisgfCBNSUlfRE05MTYxX0lOVFJfTElOS19NQVNLIHwgTUlJX0RNOTE2MV9JTlRSX01BU0spCisKKy8qIERNOTE2MSAxMEJUIENvbmZpZ3VyYXRpb24vU3RhdHVzICovCisjZGVmaW5lIE1JSV9ETTkxNjFfMTBCVENTUiAgICAgICAgICAgICAgMHgxMgorI2RlZmluZSBNSUlfRE05MTYxXzEwQlRDU1JfSU5JVCAgICAgICAgIDB4NzgwMAorCisjZGVmaW5lIE1JSV9CQVNJQ19GRUFUVVJFUyAgICAoU1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8IFwKKyAgICAgICAgICAgICAgICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8IFwKKyAgICAgICAgICAgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfCBcCisgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwgXAorICAgICAgICAgICAgICAgICBTVVBQT1JURURfQXV0b25lZyB8IFwKKyAgICAgICAgICAgICAgICAgU1VQUE9SVEVEX1RQIHwgXAorICAgICAgICAgICAgICAgICBTVVBQT1JURURfTUlJKQorCisjZGVmaW5lIE1JSV9HQklUX0ZFQVRVUkVTICAgIChNSUlfQkFTSUNfRkVBVFVSRVMgfCBcCisgICAgICAgICAgICAgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8IFwKKyAgICAgICAgICAgICAgICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKQorCisjZGVmaW5lIE1JSV9SRUFEX0NPTU1BTkQgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorCisjZGVmaW5lIE1JSV9JTlRFUlJVUFRfRElTQUJMRUQgICAgICAgICAgMHgwCisjZGVmaW5lIE1JSV9JTlRFUlJVUFRfRU5BQkxFRCAgICAgICAgICAgMHgxCisvKiBUYWtlbiBmcm9tIG1paV9pZl9pbmZvIGFuZCBzdW5nZW1fcGh5LmggKi8KK3N0cnVjdCB1Z2V0aF9taWlfaW5mbyB7CisJLyogSW5mb3JtYXRpb24gYWJvdXQgdGhlIFBIWSB0eXBlICovCisJLyogQW5kIG1hbmFnZW1lbnQgZnVuY3Rpb25zICovCisJc3RydWN0IHBoeV9pbmZvICpwaHlpbmZvOworCisJdWNjX21paV9tbmdfdCAqbWlpX3JlZ3M7CisKKwkvKiBmb3JjZWQgc3BlZWQgJiBkdXBsZXggKG5vIGF1dG9uZWcpCisJICogcGFydG5lciBzcGVlZCAmIGR1cGxleCAmIHBhdXNlIChhdXRvbmVnKQorCSAqLworCWludCBzcGVlZDsKKwlpbnQgZHVwbGV4OworCWludCBwYXVzZTsKKworCS8qIFRoZSBtb3N0IHJlY2VudGx5IHJlYWQgbGluayBzdGF0ZSAqLworCWludCBsaW5rOworCisJLyogRW5hYmxlZCBJbnRlcnJ1cHRzICovCisJdTMyIGludGVycnVwdHM7CisKKwl1MzIgYWR2ZXJ0aXNpbmc7CisJaW50IGF1dG9uZWc7CisJaW50IG1paV9pZDsKKworCS8qIHByaXZhdGUgZGF0YSBwb2ludGVyICovCisJLyogRm9yIHVzZSBieSBQSFlzIHRvIG1haW50YWluIGV4dHJhIHN0YXRlICovCisJdm9pZCAqcHJpdjsKKworCS8qIFByb3ZpZGVkIGJ5IGhvc3QgY2hpcCAqLworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisKKwkvKiBBIGxvY2sgdG8gZW5zdXJlIHRoYXQgb25seSBvbmUgdGhpbmcgY2FuIHJlYWQvd3JpdGUKKwkgKiB0aGUgTURJTyBidXMgYXQgYSB0aW1lICovCisJc3BpbmxvY2tfdCBtZGlvX2xvY2s7CisKKwkvKiBQcm92aWRlZCBieSBldGhlcm5ldCBkcml2ZXIgKi8KKwlpbnQgKCptZGlvX3JlYWQpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IG1paV9pZCwgaW50IHJlZyk7CisJdm9pZCAoKm1kaW9fd3JpdGUpIChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IG1paV9pZCwgaW50IHJlZywKKwkJCSAgICBpbnQgdmFsKTsKK307CisKKy8qIHN0cnVjdCBwaHlfaW5mbzogYSBzdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyBhdHRyaWJ1dGVzIGZvciBhIFBIWQorICoKKyAqIGlkIHdpbGwgY29udGFpbiBhIG51bWJlciB3aGljaCByZXByZXNlbnRzIHRoZSBQSFkuICBEdXJpbmcKKyAqIHN0YXJ0dXAsIHRoZSBkcml2ZXIgd2lsbCBwb2xsIHRoZSBQSFkgdG8gZmluZCBvdXQgd2hhdCBpdHMKKyAqIFVJRC0tYXMgZGVmaW5lZCBieSByZWdpc3RlcnMgMiBhbmQgMy0taXMuICBUaGUgMzItYml0IHJlc3VsdAorICogZ290dGVuIGZyb20gdGhlIFBIWSB3aWxsIGJlIEFORGVkIHdpdGggcGh5X2lkX21hc2sgdG8KKyAqIGRpc2NhcmQgYW55IGJpdHMgd2hpY2ggbWF5IGNoYW5nZSBiYXNlZCBvbiByZXZpc2lvbiBudW1iZXJzCisgKiB1bmltcG9ydGFudCB0byBmdW5jdGlvbmFsaXR5CisgKgorICogVGhlcmUgYXJlIDYgY29tbWFuZHMgd2hpY2ggdGFrZSBhIHVnZXRoX21paV9pbmZvIHN0cnVjdHVyZS4KKyAqIEVhY2ggUEhZIG11c3QgZGVjbGFyZSBjb25maWdfYW5lZywgYW5kIHJlYWRfc3RhdHVzLgorICovCitzdHJ1Y3QgcGh5X2luZm8geworCXUzMiBwaHlfaWQ7CisJY2hhciAqbmFtZTsKKwl1bnNpZ25lZCBpbnQgcGh5X2lkX21hc2s7CisJdTMyIGZlYXR1cmVzOworCisJLyogQ2FsbGVkIHRvIGluaXRpYWxpemUgdGhlIFBIWSAqLworCWludCAoKmluaXQpIChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKiBtaWlfaW5mbyk7CisKKwkvKiBDYWxsZWQgdG8gc3VzcGVuZCB0aGUgUEhZIGZvciBwb3dlciAqLworCWludCAoKnN1c3BlbmQpIChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKiBtaWlfaW5mbyk7CisKKwkvKiBSZWNvbmZpZ3VyZXMgYXV0b25lZ290aWF0aW9uIChvciBkaXNhYmxlcyBpdCkgKi8KKwlpbnQgKCpjb25maWdfYW5lZykgKHN0cnVjdCB1Z2V0aF9taWlfaW5mbyAqIG1paV9pbmZvKTsKKworCS8qIERldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleCAqLworCWludCAoKnJlYWRfc3RhdHVzKSAoc3RydWN0IHVnZXRoX21paV9pbmZvICogbWlpX2luZm8pOworCisJLyogQ2xlYXJzIGFueSBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlpbnQgKCphY2tfaW50ZXJydXB0KSAoc3RydWN0IHVnZXRoX21paV9pbmZvICogbWlpX2luZm8pOworCisJLyogRW5hYmxlcyBvciBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCisJaW50ICgqY29uZmlnX2ludHIpIChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKiBtaWlfaW5mbyk7CisKKwkvKiBDbGVhcnMgdXAgYW55IG1lbW9yeSBpZiBuZWVkZWQgKi8KKwl2b2lkICgqY2xvc2UpIChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKiBtaWlfaW5mbyk7Cit9OworCitzdHJ1Y3QgcGh5X2luZm8gKmdldF9waHlfaW5mbyhzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvKTsKK3ZvaWQgd3JpdGVfcGh5X3JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtLCBpbnQgdmFsdWUpOworaW50IHJlYWRfcGh5X3JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbWlpX2lkLCBpbnQgcmVnbnVtKTsKK3ZvaWQgbWlpX2NsZWFyX3BoeV9pbnRlcnJ1cHQoc3RydWN0IHVnZXRoX21paV9pbmZvICptaWlfaW5mbyk7Cit2b2lkIG1paV9jb25maWd1cmVfcGh5X2ludGVycnVwdChzdHJ1Y3QgdWdldGhfbWlpX2luZm8gKm1paV9pbmZvLAorCQkJCSB1MzIgaW50ZXJydXB0cyk7CisKK3N0cnVjdCBkbTkxNjFfcHJpdmF0ZSB7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJaW50IHJlc2V0ZG9uZTsKK307CisKKyNlbmRpZgkJCQkvKiBfX1VDQ19HRVRIX1BIWV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKaW5kZXggZDNkMGVjOS4uYWNkMGE5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXJoaW5lLmMKQEAgLTMwLDggKzMwLDggQEAKICovCiAKICNkZWZpbmUgRFJWX05BTUUJInZpYS1yaGluZSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuNC4wIgotI2RlZmluZSBEUlZfUkVMREFURQkiSnVuZS0yNy0yMDA2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMS40LjIiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJTZXB0LTExLTIwMDYiCiAKIAogLyogQSBmZXcgdXNlci1jb25maWd1cmFibGUgdmFsdWVzLgpAQCAtNDQsNiArNDQsMTAgQEAKICAgIFNldHRpbmcgdG8gPiAxNTE4IGVmZmVjdGl2ZWx5IGRpc2FibGVzIHRoaXMgZmVhdHVyZS4gKi8KIHN0YXRpYyBpbnQgcnhfY29weWJyZWFrOwogCisvKiBXb3JrLWFyb3VuZCBmb3IgYnJva2VuIEJJT1NlczogdGhleSBhcmUgdW5hYmxlIHRvIGdldCB0aGUgY2hpcCBiYWNrIG91dCBvZgorICAgcG93ZXIgc3RhdGUgRDMgc28gUFhFIGJvb3RpbmcgZmFpbHMuIGJvb3RwYXJhbSg3KTogdmlhLXJoaW5lLmF2b2lkX0QzPTEgKi8KK3N0YXRpYyBpbnQgYXZvaWRfRDM7CisKIC8qCiAgKiBJbiBjYXNlIHlvdSBhcmUgbG9va2luZyBmb3IgJ29wdGlvbnNbXScgb3IgJ2Z1bGxfZHVwbGV4W10nLCB0aGV5CiAgKiBhcmUgZ29uZS4gVXNlIGV0aHRvb2woOCkgaW5zdGVhZC4KQEAgLTYzLDcgKzY3LDExIEBACiAgICBUaGVyZSBhcmUgbm8gaWxsIGVmZmVjdHMgZnJvbSB0b28tbGFyZ2UgcmVjZWl2ZSByaW5ncy4gKi8KICNkZWZpbmUgVFhfUklOR19TSVpFCTE2CiAjZGVmaW5lIFRYX1FVRVVFX0xFTgkxMAkvKiBMaW1pdCByaW5nIGVudHJpZXMgYWN0dWFsbHkgdXNlZC4gKi8KKyNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKKyNkZWZpbmUgUlhfUklOR19TSVpFCTY0CisjZWxzZQogI2RlZmluZSBSWF9SSU5HX1NJWkUJMTYKKyNlbmRpZgogCiAKIC8qIE9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCB1c3VhbGx5IGFyZSBub3QgY2hhbmdlZC4gKi8KQEAgLTExNiw5ICsxMjQsMTEgQEAKIG1vZHVsZV9wYXJhbShtYXhfaW50ZXJydXB0X3dvcmssIGludCwgMCk7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0ocnhfY29weWJyZWFrLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKGF2b2lkX0QzLCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobWF4X2ludGVycnVwdF93b3JrLCAiVklBIFJoaW5lIG1heGltdW0gZXZlbnRzIGhhbmRsZWQgcGVyIGludGVycnVwdCIpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlZJQSBSaGluZSBkZWJ1ZyBsZXZlbCAoMC03KSIpOwogTU9EVUxFX1BBUk1fREVTQyhyeF9jb3B5YnJlYWssICJWSUEgUmhpbmUgY29weSBicmVha3BvaW50IGZvciBjb3B5LW9ubHktdGlueS1mcmFtZXMiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXZvaWRfRDMsICJBdm9pZCBwb3dlciBzdGF0ZSBEMyAod29yay1hcm91bmQgZm9yIGJyb2tlbiBCSU9TZXMpIik7CiAKIC8qCiAJCVRoZW9yeSBvZiBPcGVyYXRpb24KQEAgLTM5NiwxMiArNDA2LDEyIEBACiBzdGF0aWMgaW50ICByaGluZV9zdGFydF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpcnFyZXR1cm5fdCByaGluZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBzdGF0aWMgdm9pZCByaGluZV90eChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyB2b2lkIHJoaW5lX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCByaGluZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpOwogc3RhdGljIHZvaWQgcmhpbmVfZXJyb3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGludHJfc3RhdHVzKTsKIHN0YXRpYyB2b2lkIHJoaW5lX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpyaGluZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IG5ldGRldl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CiBzdGF0aWMgaW50ICByaGluZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHJoaW5lX3NodXRkb3duIChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CiAKQEAgLTU2NCw2ICs1NzQsMzIgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1ZJQV9SSElORV9OQVBJCitzdGF0aWMgaW50IHJoaW5lX25hcGlwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCAqYnVkZ2V0KQoreworCXN0cnVjdCByaGluZV9wcml2YXRlICpycCA9IG5ldGRldl9wcml2KGRldik7CisJdm9pZCBfX2lvbWVtICppb2FkZHIgPSBycC0+YmFzZTsKKwlpbnQgZG9uZSwgbGltaXQgPSBtaW4oZGV2LT5xdW90YSwgKmJ1ZGdldCk7CisKKwlkb25lID0gcmhpbmVfcngoZGV2LCBsaW1pdCk7CisJKmJ1ZGdldCAtPSBkb25lOworCWRldi0+cXVvdGEgLT0gZG9uZTsKKworCWlmIChkb25lIDwgbGltaXQpIHsKKwkJbmV0aWZfcnhfY29tcGxldGUoZGV2KTsKKworCQlpb3dyaXRlMTYoSW50clJ4RG9uZSB8IEludHJSeEVyciB8IEludHJSeEVtcHR5fCBJbnRyUnhPdmVyZmxvdyB8CisJCQkgIEludHJSeERyb3BwZWQgfCBJbnRyUnhOb0J1ZiB8IEludHJUeEFib3J0ZWQgfAorCQkJICBJbnRyVHhEb25lIHwgSW50clR4RXJyb3IgfCBJbnRyVHhVbmRlcnJ1biB8CisJCQkgIEludHJQQ0lFcnIgfCBJbnRyU3RhdHNNYXggfCBJbnRyTGlua0NoYW5nZSwKKwkJCSAgaW9hZGRyICsgSW50ckVuYWJsZSk7CisJCXJldHVybiAwOworCX0KKwllbHNlCisJCXJldHVybiAxOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHJoaW5lX2h3X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgbG9uZyBwaW9hZGRyKQogewogCXN0cnVjdCByaGluZV9wcml2YXRlICpycCA9IG5ldGRldl9wcml2KGRldik7CkBAIC03NDQsNiArNzgwLDEwIEBACiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAlkZXYtPnBvbGxfY29udHJvbGxlciA9IHJoaW5lX3BvbGw7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKKwlkZXYtPnBvbGwgPSByaGluZV9uYXBpcG9sbDsKKwlkZXYtPndlaWdodCA9IDY0OworI2VuZGlmCiAJaWYgKHJwLT5xdWlya3MgJiBycVJoaW5lSSkKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1NHfE5FVElGX0ZfSFdfQ1NVTTsKIApAQCAtNzg5LDYgKzgyOSw5IEBACiAJCX0KIAl9CiAJcnAtPm1paV9pZi5waHlfaWQgPSBwaHlfaWQ7CisJaWYgKGRlYnVnID4gMSAmJiBhdm9pZF9EMykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIEQzIHBvd2VyIHN0YXRlIGF0IHNodXRkb3duLlxuIiwKKwkJICAgICAgIGRldi0+bmFtZSk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTAxNCw2ICsxMDU3LDggQEAKIAogCXJoaW5lX3NldF9yeF9tb2RlKGRldik7CiAKKwluZXRpZl9wb2xsX2VuYWJsZShkZXYpOworCiAJLyogRW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2suICovCiAJaW93cml0ZTE2KEludHJSeERvbmUgfCBJbnRyUnhFcnIgfCBJbnRyUnhFbXB0eXwgSW50clJ4T3ZlcmZsb3cgfAogCSAgICAgICBJbnRyUnhEcm9wcGVkIHwgSW50clJ4Tm9CdWYgfCBJbnRyVHhBYm9ydGVkIHwKQEAgLTEyNjgsOCArMTMxMywxOCBAQAogCQkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCiAJCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyUnhEb25lIHwgSW50clJ4RXJyIHwgSW50clJ4RHJvcHBlZCB8Ci0JCSAgICBJbnRyUnhXYWtlVXAgfCBJbnRyUnhFbXB0eSB8IEludHJSeE5vQnVmKSkKLQkJCXJoaW5lX3J4KGRldik7CisJCQkJICAgSW50clJ4V2FrZVVwIHwgSW50clJ4RW1wdHkgfCBJbnRyUnhOb0J1ZikpIHsKKyNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKKwkJCWlvd3JpdGUxNihJbnRyVHhBYm9ydGVkIHwKKwkJCQkgIEludHJUeERvbmUgfCBJbnRyVHhFcnJvciB8IEludHJUeFVuZGVycnVuIHwKKwkJCQkgIEludHJQQ0lFcnIgfCBJbnRyU3RhdHNNYXggfCBJbnRyTGlua0NoYW5nZSwKKwkJCQkgIGlvYWRkciArIEludHJFbmFibGUpOworCisJCQluZXRpZl9yeF9zY2hlZHVsZShkZXYpOworI2Vsc2UKKwkJCXJoaW5lX3J4KGRldiwgUlhfUklOR19TSVpFKTsKKyNlbmRpZgorCQl9CiAKIAkJaWYgKGludHJfc3RhdHVzICYgKEludHJUeEVyclN1bW1hcnkgfCBJbnRyVHhEb25lKSkgewogCQkJaWYgKGludHJfc3RhdHVzICYgSW50clR4RXJyU3VtbWFyeSkgewpAQCAtMTM2NywxMyArMTQyMiwxMiBAQAogCXNwaW5fdW5sb2NrKCZycC0+bG9jayk7CiB9CiAKLS8qIFRoaXMgcm91dGluZSBpcyBsb2dpY2FsbHkgcGFydCBvZiB0aGUgaW50ZXJydXB0IGhhbmRsZXIsIGJ1dCBpc29sYXRlZAotICAgZm9yIGNsYXJpdHkgYW5kIGJldHRlciByZWdpc3RlciBhbGxvY2F0aW9uLiAqLwotc3RhdGljIHZvaWQgcmhpbmVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKKy8qIFByb2Nlc3MgdXAgdG8gbGltaXQgZnJhbWVzIGZyb20gcmVjZWl2ZSByaW5nICovCitzdGF0aWMgaW50IHJoaW5lX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKIHsKIAlzdHJ1Y3QgcmhpbmVfcHJpdmF0ZSAqcnAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBjb3VudDsKIAlpbnQgZW50cnkgPSBycC0+Y3VyX3J4ICUgUlhfUklOR19TSVpFOwotCWludCBib2d1c2NudCA9IHJwLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSAtIHJwLT5jdXJfcng7CiAKIAlpZiAoZGVidWcgPiA0KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogcmhpbmVfcngoKSwgZW50cnkgJWQgc3RhdHVzICU4Ljh4LlxuIiwKQEAgLTEzODIsMTYgKzE0MzYsMTggQEAKIAl9CiAKIAkvKiBJZiBFT1AgaXMgc2V0IG9uIHRoZSBuZXh0IGVudHJ5LCBpdCdzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KLQl3aGlsZSAoIShycC0+cnhfaGVhZF9kZXNjLT5yeF9zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duKSkpIHsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsaW1pdDsgKytjb3VudCkgewogCQlzdHJ1Y3QgcnhfZGVzYyAqZGVzYyA9IHJwLT5yeF9oZWFkX2Rlc2M7CiAJCXUzMiBkZXNjX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGRlc2MtPnJ4X3N0YXR1cyk7CiAJCWludCBkYXRhX3NpemUgPSBkZXNjX3N0YXR1cyA+PiAxNjsKIAorCQlpZiAoZGVzY19zdGF0dXMgJiBEZXNjT3duKQorCQkJYnJlYWs7CisKIAkJaWYgKGRlYnVnID4gNCkKIAkJCXByaW50ayhLRVJOX0RFQlVHICJyaGluZV9yeCgpIHN0YXR1cyBpcyAlOC44eC5cbiIsCiAJCQkgICAgICAgZGVzY19zdGF0dXMpOwotCQlpZiAoLS1ib2d1c2NudCA8IDApCi0JCQlicmVhazsKKwogCQlpZiAoKGRlc2Nfc3RhdHVzICYgKFJ4V2hvbGVQa3QgfCBSeEVycikpICE9IFJ4V2hvbGVQa3QpIHsKIAkJCWlmICgoZGVzY19zdGF0dXMgJiBSeFdob2xlUGt0KSAhPSBSeFdob2xlUGt0KSB7CiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE92ZXJzaXplZCBFdGhlcm5ldCAiCkBAIC0xNDYwLDcgKzE1MTYsMTEgQEAKIAkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkJfQogCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKyNpZmRlZiBDT05GSUdfVklBX1JISU5FX05BUEkKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisjZWxzZQogCQkJbmV0aWZfcngoc2tiKTsKKyNlbmRpZgogCQkJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKIAkJCXJwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwogCQkJcnAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTE0ODcsNiArMTU0Nyw4IEBACiAJCX0KIAkJcnAtPnJ4X3JpbmdbZW50cnldLnJ4X3N0YXR1cyA9IGNwdV90b19sZTMyKERlc2NPd24pOwogCX0KKworCXJldHVybiBjb3VudDsKIH0KIAogLyoKQEAgLTE2MTcsOSArMTY3OSw2IEBACiAJdTggcnhfbW9kZTsJCS8qIE5vdGU6IDB4MDI9YWNjZXB0IHJ1bnQsIDB4MDE9YWNjZXB0IGVycnMgKi8KIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KLQkJLyogVW5jb25kaXRpb25hbGx5IGxvZyBuZXQgdGFwcy4gKi8KLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CiAJCXJ4X21vZGUgPSAweDFDOwogCQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaW9hZGRyICsgTXVsdGljYXN0RmlsdGVyMCk7CiAJCWlvd3JpdGUzMigweGZmZmZmZmZmLCBpb2FkZHIgKyBNdWx0aWNhc3RGaWx0ZXIxKTsKQEAgLTE3MzcsNyArMTc5Niw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIAkuZ2V0X3NldHRpbmdzCQk9IG5ldGRldl9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkJPSBuZXRkZXZfc2V0X3NldHRpbmdzLApAQCAtMTc3Niw2ICsxODM1LDcgQEAKIAlzcGluX2xvY2tfaXJxKCZycC0+bG9jayk7CiAKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJbmV0aWZfcG9sbF9kaXNhYmxlKGRldik7CiAKIAlpZiAoZGVidWcgPiAxKQogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCAiCkBAIC0xODU3LDcgKzE5MTcsOCBAQAogCX0KIAogCS8qIEhpdCBwb3dlciBzdGF0ZSBEMyAoc2xlZXApICovCi0JaW93cml0ZTgoaW9yZWFkOChpb2FkZHIgKyBTdGlja3lIVykgfCAweDAzLCBpb2FkZHIgKyBTdGlja3lIVyk7CisJaWYgKCFhdm9pZF9EMykKKwkJaW93cml0ZTgoaW9yZWFkOChpb2FkZHIgKyBTdGlja3lIVykgfCAweDAzLCBpb2FkZHIgKyBTdGlja3lIVyk7CiAKIAkvKiBUT0RPOiBDaGVjayB1c2Ugb2YgcGNpX2VuYWJsZV93YWtlKCkgKi8KIApAQCAtMTk0MSw3ICsyMDAyLDcgQEAKICNpZmRlZiBNT0RVTEUKIAlwcmludGsodmVyc2lvbik7CiAjZW5kaWYKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZyaGluZV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZyaGluZV9kcml2ZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggZjViMDA3OC4uZGQ0NzJiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTg2LDcgKzg2LDcgQEAKIAogCiBzdGF0aWMgaW50IHZlbG9jaXR5X21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7Ci1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZlbG9jaXR5X2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2ZWxvY2l0eV9ldGh0b29sX29wczsKIAogLyoKICAgICBEZWZpbmUgbW9kdWxlIG9wdGlvbnMKQEAgLTQxMSwxMSArNDExLDExIEBACiAJaWYgKHZhbCA9PSAtMSkKIAkJKm9wdCB8PSAoZGVmID8gZmxhZyA6IDApOwogCWVsc2UgaWYgKHZhbCA8IDAgfHwgdmFsID4gMSkgewotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB0aGUgdmFsdWUgb2YgcGFyYW1ldGVyICVzIGlzIGludmFsaWQsIHRoZSB2YWxpZCByYW5nZSBpcyAoMC0xKVxuIiwgCisJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHRoZSB2YWx1ZSBvZiBwYXJhbWV0ZXIgJXMgaXMgaW52YWxpZCwgdGhlIHZhbGlkIHJhbmdlIGlzICgwLTEpXG4iLAogCQkJZGV2bmFtZSwgbmFtZSk7CiAJCSpvcHQgfD0gKGRlZiA/IGZsYWcgOiAwKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogc2V0IHBhcmFtZXRlciAlcyB0byAlc1xuIiwgCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXQgcGFyYW1ldGVyICVzIHRvICVzXG4iLAogCQkJZGV2bmFtZSwgbmFtZSwgdmFsID8gIlRSVUUiIDogIkZBTFNFIik7CiAJCSpvcHQgfD0gKHZhbCA/IGZsYWcgOiAwKTsKIAl9CkBAIC01MjcsNyArNTI3LDcgQEAKICAqCWhhcmR3YXJlLgogICovCiAKLXN0YXRpYyB2b2lkIHZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCAKK3N0YXRpYyB2b2lkIHZlbG9jaXR5X2luaXRfcmVnaXN0ZXJzKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLAogCQkJCSAgICBlbnVtIHZlbG9jaXR5X2luaXRfdHlwZSB0eXBlKQogewogCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwpAQCAtNTU5LDcgKzU1OSw3IEBACiAKIAkJbWFjX2NsZWFyX2lzcihyZWdzKTsKIAkJd3JpdGVsKENSMF9TVE9QLCAmcmVncy0+Q1IwQ2xyKTsKLQkJd3JpdGVsKChDUjBfRFBPTEwgfCBDUjBfVFhPTiB8IENSMF9SWE9OIHwgQ1IwX1NUUlQpLCAKKwkJd3JpdGVsKChDUjBfRFBPTEwgfCBDUjBfVFhPTiB8IENSMF9SWE9OIHwgQ1IwX1NUUlQpLAogCQkJCQkJCSZyZWdzLT5DUjBTZXQpOwogCiAJCWJyZWFrOwpAQCAtNjk1LDcgKzY5NSw3IEBACiAJICogY2FuIHN1cHBvcnQgbW9yZSB0aGFuIE1BWF9VTklUUy4KIAkgKi8KIAlpZiAodmVsb2NpdHlfbmljcyA+PSBNQVhfVU5JVFMpIHsKLQkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiYWxyZWFkeSBmb3VuZCAlZCBOSUNzLlxuIiwgCisJCWRldl9ub3RpY2UoJnBkZXYtPmRldiwgImFscmVhZHkgZm91bmQgJWQgTklDcy5cbiIsCiAJCQkgICB2ZWxvY2l0eV9uaWNzKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNzA1LDE2ICs3MDUsMTYgQEAKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiYWxsb2NhdGUgbmV0IGRldmljZSBmYWlsZWQuXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCQorCiAJLyogQ2hhaW4gaXQgYWxsIHRvZ2V0aGVyICovCi0JCisKIAlTRVRfTU9EVUxFX09XTkVSKGRldik7CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAl2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCiAJaWYgKGZpcnN0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzIFZlci4gJXNcbiIsIAorCQlwcmludGsoS0VSTl9JTkZPICIlcyBWZXIuICVzXG4iLAogCQkJVkVMT0NJVFlfRlVMTF9EUlZfTkFNLCBWRUxPQ0lUWV9WRVJTSU9OKTsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIFZJQSBOZXR3b3JraW5nIFRlY2hub2xvZ2llcywgSW5jLlxuIik7CiAJCXByaW50ayhLRVJOX0lORk8gIkNvcHlyaWdodCAoYykgMjAwNCBSZWQgSGF0IEluYy5cbiIpOwpAQCAtNzI4LDcgKzcyOCw3IEBACiAJZGV2LT5pcnEgPSBwZGV2LT5pcnE7CiAKIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocmV0IDwgMCkgCisJaWYgKHJldCA8IDApCiAJCWdvdG8gZXJyX2ZyZWVfZGV2OwogCiAJcmV0ID0gdmVsb2NpdHlfZ2V0X3BjaV9pbmZvKHZwdHIsIHBkZXYpOwpAQCAtNzYxLDE2ICs3NjEsMTYgQEAKIAogCXZlbG9jaXR5X2dldF9vcHRpb25zKCZ2cHRyLT5vcHRpb25zLCB2ZWxvY2l0eV9uaWNzLCBkZXYtPm5hbWUpOwogCi0JLyogCisJLyoKIAkgKglNYXNrIG91dCB0aGUgb3B0aW9ucyBjYW5ub3QgYmUgc2V0IHRvIHRoZSBjaGlwCiAJICovCi0JIAorCiAJdnB0ci0+b3B0aW9ucy5mbGFncyAmPSBpbmZvLT5mbGFnczsKIAogCS8qCiAJICoJRW5hYmxlIHRoZSBjaGlwIHNwZWNpZmllZCBjYXBiaWxpdGllcwogCSAqLwotCSAKKwogCXZwdHItPmZsYWdzID0gdnB0ci0+b3B0aW9ucy5mbGFncyB8IChpbmZvLT5mbGFncyAmIDB4RkYwMDAwMDBVTCk7CiAKIAl2cHRyLT53b2xfb3B0cyA9IHZwdHItPm9wdGlvbnMud29sX29wdHM7CkBAIC04MDQsOSArODA0LDkgQEAKIAogCXZlbG9jaXR5X3ByaW50X2luZm8odnB0cik7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7Ci0JCisKIAkvKiBhbmQgbGVhdmUgdGhlIGNoaXAgcG93ZXJlZCBkb3duICovCi0JCisKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EM2hvdCk7CiAjaWZkZWYgQ09ORklHX1BNCiAJewpAQCAtODQ1LDkgKzg0NSw5IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHZwdHItPmRldjsKIAogCXByaW50ayhLRVJOX0lORk8gIiVzOiAlc1xuIiwgZGV2LT5uYW1lLCBnZXRfY2hpcF9uYW1lKHZwdHItPmNoaXBfaWQpKTsKLQlwcmludGsoS0VSTl9JTkZPICIlczogRXRoZXJuZXQgQWRkcmVzczogJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsIAotCQlkZXYtPm5hbWUsIAotCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLCBkZXYtPmRldl9hZGRyWzJdLCAKKwlwcmludGsoS0VSTl9JTkZPICIlczogRXRoZXJuZXQgQWRkcmVzczogJTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlg6JTIuMlhcbiIsCisJCWRldi0+bmFtZSwKKwkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKIAkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CiB9CiAKQEAgLTg4OCwxMiArODg4LDEyIEBACiB7CiAJaWYgKHBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnZwdHItPnJldl9pZCkgPCAwKQogCQlyZXR1cm4gLUVJTzsKLQkJCisKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXZwdHItPmlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAl2cHRyLT5tZW1hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwotCQorCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9JTykpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJICAgInJlZ2lvbiAjMCBpcyBub3QgYW4gSS9PIHJlc291cmNlLCBhYm9ydGluZy5cbiIpOwpAQCAtOTMyLDEwICs5MzIsMTAgQEAKIAl1OCAqcG9vbDsKIAogCS8qCi0JICoJQWxsb2NhdGUgYWxsIFJEL1REIHJpbmdzIGEgc2luZ2xlIHBvb2wgCisJICoJQWxsb2NhdGUgYWxsIFJEL1REIHJpbmdzIGEgc2luZ2xlIHBvb2wKIAkgKi8KLQkgCi0JcHNpemUgPSB2cHRyLT5vcHRpb25zLm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSArIAorCisJcHNpemUgPSB2cHRyLT5vcHRpb25zLm51bXJ4ICogc2l6ZW9mKHN0cnVjdCByeF9kZXNjKSArCiAJCXZwdHItPm9wdGlvbnMubnVtdHggKiBzaXplb2Yoc3RydWN0IHR4X2Rlc2MpICogdnB0ci0+bnVtX3R4cTsKIAogCS8qCkBAIC05NDUsNyArOTQ1LDcgQEAKIAlwb29sID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodnB0ci0+cGRldiwgcHNpemUsICZwb29sX2RtYSk7CiAKIAlpZiAocG9vbCA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXMgOiBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgCisJCXByaW50ayhLRVJOX0VSUiAiJXMgOiBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwKIAkJCQkJdnB0ci0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtOTU3LDExICs5NTcsMTEgQEAKIAl2cHRyLT5yZF9wb29sX2RtYSA9IHBvb2xfZG1hOwogCiAJdHNpemUgPSB2cHRyLT5vcHRpb25zLm51bXR4ICogUEtUX0JVRl9TWiAqIHZwdHItPm51bV90eHE7Ci0JdnB0ci0+dHhfYnVmcyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHZwdHItPnBkZXYsIHRzaXplLCAKKwl2cHRyLT50eF9idWZzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodnB0ci0+cGRldiwgdHNpemUsCiAJCQkJCQkmdnB0ci0+dHhfYnVmc19kbWEpOwogCiAJaWYgKHZwdHItPnR4X2J1ZnMgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBETUEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IERNQSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAogCQkJCQl2cHRyLT5kZXYtPm5hbWUpOwogCQlwY2lfZnJlZV9jb25zaXN0ZW50KHZwdHItPnBkZXYsIHBzaXplLCBwb29sLCBwb29sX2RtYSk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtOTk0LDcgKzk5NCw3IEBACiB7CiAJaW50IHNpemU7CiAKLQlzaXplID0gdnB0ci0+b3B0aW9ucy5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYykgKyAKKwlzaXplID0gdnB0ci0+b3B0aW9ucy5udW1yeCAqIHNpemVvZihzdHJ1Y3QgcnhfZGVzYykgKwogCSAgICAgICB2cHRyLT5vcHRpb25zLm51bXR4ICogc2l6ZW9mKHN0cnVjdCB0eF9kZXNjKSAqIHZwdHItPm51bV90eHE7CiAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHZwdHItPnBkZXYsIHNpemUsIHZwdHItPnJkX3JpbmcsIHZwdHItPnJkX3Bvb2xfZG1hKTsKQEAgLTEwNDYsNyArMTA0Niw3IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJZG9uZSsrOwotCQlkaXJ0eSA9IChkaXJ0eSA8IHZwdHItPm9wdGlvbnMubnVtcnggLSAxKSA/IGRpcnR5ICsgMSA6IDA7CQorCQlkaXJ0eSA9IChkaXJ0eSA8IHZwdHItPm9wdGlvbnMubnVtcnggLSAxKSA/IGRpcnR5ICsgMSA6IDA7CiAJfSB3aGlsZSAoZGlydHkgIT0gdnB0ci0+cmRfY3Vycik7CiAKIAlpZiAoZG9uZSkgewpAQCAtMTA2OSw3ICsxMDY5LDcgQEAKIHN0YXRpYyBpbnQgdmVsb2NpdHlfaW5pdF9yZF9yaW5nKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQogewogCWludCByZXQgPSAtRU5PTUVNOwotCXVuc2lnbmVkIGludCByc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdmVsb2NpdHlfcmRfaW5mbykgKiAKKwl1bnNpZ25lZCBpbnQgcnNpemUgPSBzaXplb2Yoc3RydWN0IHZlbG9jaXR5X3JkX2luZm8pICoKIAkJCQkJdnB0ci0+b3B0aW9ucy5udW1yeDsKIAogCXZwdHItPnJkX2luZm8gPSBrbWFsbG9jKHJzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTExMzIsMTQgKzExMzIsMTQgQEAKICAqCVJldHVybnMgemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgcG9zaXggZXJybm8gY29kZSBmb3IKICAqCWZhaWx1cmUuCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9pbml0X3RkX3Jpbmcoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7CiAJaW50IGksIGo7CiAJZG1hX2FkZHJfdCBjdXJyOwogCXN0cnVjdCB0eF9kZXNjICp0ZDsKIAlzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqdGRfaW5mbzsKLQl1bnNpZ25lZCBpbnQgdHNpemUgPSBzaXplb2Yoc3RydWN0IHZlbG9jaXR5X3RkX2luZm8pICogCisJdW5zaWduZWQgaW50IHRzaXplID0gc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvKSAqCiAJCQkJCXZwdHItPm9wdGlvbnMubnVtdHg7CiAKIAkvKiBJbml0IHRoZSBURCByaW5nIGVudHJpZXMgKi8KQEAgLTExNzcsMTUgKzExNzcsMTUgQEAKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfdGRfaW5mbyAqIHRkX2luZm8gPSAmKHZwdHItPnRkX2luZm9zW3FdW25dKTsKIAlpbnQgaTsKLQkKKwogCWlmICh0ZF9pbmZvID09IE5VTEwpCiAJCXJldHVybjsKLQkJCisKIAlpZiAodGRfaW5mby0+c2tiKSB7CiAJCWZvciAoaSA9IDA7IGkgPCB0ZF9pbmZvLT5uc2tiX2RtYTsgaSsrKQogCQl7CiAJCQlpZiAodGRfaW5mby0+c2tiX2RtYVtpXSkgewotCQkJCXBjaV91bm1hcF9zaW5nbGUodnB0ci0+cGRldiwgdGRfaW5mby0+c2tiX2RtYVtpXSwgCisJCQkJcGNpX3VubWFwX3NpbmdsZSh2cHRyLT5wZGV2LCB0ZF9pbmZvLT5za2JfZG1hW2ldLAogCQkJCQl0ZF9pbmZvLT5za2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJCQkJdGRfaW5mby0+c2tiX2RtYVtpXSA9IChkbWFfYWRkcl90KSBOVUxMOwogCQkJfQpAQCAtMTIwMiw3ICsxMjAyLDcgQEAKICAqCUZyZWUgdXAgdGhlIHRyYW5zbWl0IHJpbmcgZm9yIHRoaXMgcGFydGljdWxhciB2ZWxvY2l0eSBhZGFwdGVyLgogICoJV2UgZnJlZSB0aGUgcmluZyBjb250ZW50cyBidXQgbm90IHRoZSByaW5nIGl0c2VsZi4KICAqLwotIAorCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9mcmVlX3RkX3Jpbmcoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIpCiB7CiAJaW50IGksIGo7CkBAIC0xMjI4LDcgKzEyMjgsNyBAQAogICoJYW55IHJlY2VpdmVkIHBhY2tldHMgZnJvbSB0aGUgcmVjZWl2ZSBxdWV1ZS4gSGFuZCB0aGUgcmluZwogICoJc2xvdHMgYmFjayB0byB0aGUgYWRhcHRlciBmb3IgcmV1c2UuCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9yeF9zcnYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIGludCBzdGF0dXMpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJnZwdHItPnN0YXRzOwpAQCAtMTI4OSwxNCArMTI4OSwxNCBAQAogICoJUHJvY2VzcyB0aGUgc3RhdHVzIGJpdHMgZm9yIHRoZSByZWNlaXZlZCBwYWNrZXQgYW5kIGRldGVybWluZQogICoJaWYgdGhlIGNoZWNrc3VtIHdhcyBjb21wdXRlZCBhbmQgdmVyaWZpZWQgYnkgdGhlIGhhcmR3YXJlCiAgKi8KLSAKKwogc3RhdGljIGlubGluZSB2b2lkIHZlbG9jaXR5X3J4X2NzdW0oc3RydWN0IHJ4X2Rlc2MgKnJkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAogCWlmIChyZC0+cmRlc2MxLkNTTSAmIENTTV9JUEtUKSB7CiAJCWlmIChyZC0+cmRlc2MxLkNTTSAmIENTTV9JUE9LKSB7Ci0JCQlpZiAoKHJkLT5yZGVzYzEuQ1NNICYgQ1NNX1RDUEtUKSB8fCAKKwkJCWlmICgocmQtPnJkZXNjMS5DU00gJiBDU01fVENQS1QpIHx8CiAJCQkJCShyZC0+cmRlc2MxLkNTTSAmIENTTV9VRFBLVCkpIHsKIAkJCQlpZiAoIShyZC0+cmRlc2MxLkNTTSAmIENTTV9UVVBPSykpIHsKIAkJCQkJcmV0dXJuOwpAQCAtMTMzOSw3ICsxMzM5LDcgQEAKIAkJCSpyeF9za2IgPSBuZXdfc2tiOwogCQkJcmV0ID0gMDsKIAkJfQotCQkKKwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTM3MCwxMSArMTM3MCwxMSBAQAogICoJdmVsb2NpdHlfcmVjZWl2ZV9mcmFtZQktCXJlY2VpdmVkIHBhY2tldCBwcm9jZXNzb3IKICAqCUB2cHRyOiB2ZWxvY2l0eSB3ZSBhcmUgaGFuZGxpbmcKICAqCUBpZHg6IHJpbmcgaW5kZXgKLSAqCQorICoKICAqCUEgcGFja2V0IGhhcyBhcnJpdmVkLiBXZSBwcm9jZXNzIHRoZSBwYWNrZXQgYW5kIGlmIGFwcHJvcHJpYXRlCiAgKglwYXNzIHRoZSBmcmFtZSB1cCB0aGUgbmV0d29yayBzdGFjawogICovCi0gCisKIHN0YXRpYyBpbnQgdmVsb2NpdHlfcmVjZWl2ZV9mcmFtZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IGlkeCkKIHsKIAl2b2lkICgqcGNpX2FjdGlvbikoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwpAQCAtMTQwMiw3ICsxNDAyLDcgQEAKIAkvKgogCSAqCURyb3AgZnJhbWUgbm90IG1lZXRpbmcgSUVFRSA4MDIuMwogCSAqLwotCSAKKwogCWlmICh2cHRyLT5mbGFncyAmIFZFTE9DSVRZX0ZMQUdTX1ZBTF9QS1RfTEVOKSB7CiAJCWlmIChyZC0+cmRlc2MwLlJTUiAmIFJTUl9STCkgewogCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTE0MjQsNyArMTQyNCw3IEBACiAJCSAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKIAlza2JfcHV0KHNrYiwgcGt0X2xlbiAtIDQpOwotCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIHNrYi0+ZGV2KTsJCisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOwogCiAJc3RhdHMtPnJ4X2J5dGVzICs9IHBrdF9sZW47CiAJbmV0aWZfcngoc2tiKTsKQEAgLTE0NDIsNyArMTQ0Miw3IEBACiAgKglyZXF1aXJlcyAqNjQqIGJ5dGUgYWxpZ25tZW50IG9mIHRoZSBidWZmZXIgd2hpY2ggbWFrZXMgbGlmZQogICoJbGVzcyBmdW4gdGhhbiB3b3VsZCBiZSBpZGVhbC4KICAqLwotIAorCiBzdGF0aWMgaW50IHZlbG9jaXR5X2FsbG9jX3J4X2J1ZihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgcnhfZGVzYyAqcmQgPSAmKHZwdHItPnJkX3JpbmdbaWR4XSk7CkBAIC0xNDU5LDExICsxNDU5LDExIEBACiAJc2tiX3Jlc2VydmUocmRfaW5mby0+c2tiLCAodW5zaWduZWQgbG9uZykgcmRfaW5mby0+c2tiLT5kYXRhICYgNjMpOwogCXJkX2luZm8tPnNrYi0+ZGV2ID0gdnB0ci0+ZGV2OwogCXJkX2luZm8tPnNrYl9kbWEgPSBwY2lfbWFwX3NpbmdsZSh2cHRyLT5wZGV2LCByZF9pbmZvLT5za2ItPmRhdGEsIHZwdHItPnJ4X2J1Zl9zeiwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQkKKwogCS8qCiAJICoJRmlsbCBpbiB0aGUgZGVzY3JpcHRvciB0byBtYXRjaAotIAkgKi8JCi0gCSAKKyAJICovCisKIAkqKCh1MzIgKikgJiAocmQtPnJkZXNjMCkpID0gMDsKIAlyZC0+bGVuID0gY3B1X3RvX2xlMzIodnB0ci0+cnhfYnVmX3N6KTsKIAlyZC0+aW50ZW4gPSAxOwpAQCAtMTQ4MSw3ICsxNDgxLDcgQEAKICAqCXdlIGNhbiBjb21wbGV0ZSBhbmQgY2xlYW4gdXAuIFVwZGF0ZSBhbnkgc3RhdGlzdGljcyBhcwogICoJbmVjY2Vzc2FyeS8KICAqLwotIAorCiBzdGF0aWMgaW50IHZlbG9jaXR5X3R4X3NydihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIHN0YXR1cykKIHsKIAlzdHJ1Y3QgdHhfZGVzYyAqdGQ7CkBAIC0xNDkzLDcgKzE0OTMsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZ2cHRyLT5zdGF0czsKIAogCWZvciAocW51bSA9IDA7IHFudW0gPCB2cHRyLT5udW1fdHhxOyBxbnVtKyspIHsKLQkJZm9yIChpZHggPSB2cHRyLT50ZF90YWlsW3FudW1dOyB2cHRyLT50ZF91c2VkW3FudW1dID4gMDsgCisJCWZvciAoaWR4ID0gdnB0ci0+dGRfdGFpbFtxbnVtXTsgdnB0ci0+dGRfdXNlZFtxbnVtXSA+IDA7CiAJCQlpZHggPSAoaWR4ICsgMSkgJSB2cHRyLT5vcHRpb25zLm51bXR4KSB7CiAKIAkJCS8qCkBAIC0xNTk4LDEyICsxNTk4LDEyIEBACiAgKglAc3RhdHVzOiBjYXJkIHN0YXR1cwogICoKICAqCVByb2Nlc3MgYW4gZXJyb3IgcmVwb3J0IGZyb20gdGhlIGhhcmR3YXJlIGFuZCBhdHRlbXB0IHRvIHJlY292ZXIKLSAqCXRoZSBjYXJkIGl0c2VsZi4gQXQgdGhlIG1vbWVudCB3ZSBjYW5ub3QgcmVjb3ZlciBmcm9tIHNvbWUgCisgKgl0aGUgY2FyZCBpdHNlbGYuIEF0IHRoZSBtb21lbnQgd2UgY2Fubm90IHJlY292ZXIgZnJvbSBzb21lCiAgKgl0aGVvcmV0aWNhbGx5IGltcG9zc2libGUgZXJyb3JzIGJ1dCB0aGlzIGNvdWxkIGJlIGZpeGVkIHVzaW5nCiAgKgl0aGUgcGNpX2RldmljZV9mYWlsZWQgbG9naWMgdG8gYm91bmNlIHRoZSBoYXJkd2FyZQogICoKICAqLwotIAorCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9lcnJvcihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgaW50IHN0YXR1cykKIHsKIApAQCAtMTYxNCw3ICsxNjE0LDcgQEAKIAkJQllURV9SRUdfQklUU19PTihUWEVTUl9URFNUUiwgJnJlZ3MtPlRYRVNSKTsKIAkJd3JpdGV3KFRSRENTUl9SVU4sICZyZWdzLT5URENTUkNscik7CiAJCW5ldGlmX3N0b3BfcXVldWUodnB0ci0+ZGV2KTsKLQkJCisKIAkJLyogRklYTUU6IHBvcnQgb3ZlciB0aGUgcGNpX2RldmljZV9mYWlsZWQgY29kZSBhbmQgdXNlIGl0CiAJCSAgIGhlcmUgKi8KIAl9CkBAIC0xNjI3LDcgKzE2MjcsNyBAQAogCQkJdnB0ci0+bWlpX3N0YXR1cyA9IGNoZWNrX2Nvbm5lY3Rpb25fdHlwZShyZWdzKTsKIAogCQkJLyoKLQkJCSAqCUlmIGl0IGlzIGEgMzExOSwgZGlzYWJsZSBmcmFtZSBidXJzdGluZyBpbiAKKwkJCSAqCUlmIGl0IGlzIGEgMzExOSwgZGlzYWJsZSBmcmFtZSBidXJzdGluZyBpbgogCQkJICoJaGFsZmR1cGxleCBtb2RlIGFuZCBlbmFibGUgaXQgaW4gZnVsbGR1cGxleAogCQkJICoJIG1vZGUKIAkJCSAqLwpAQCAtMTY2MywxMCArMTY2MywxMCBAQAogCQllbmFibGVfZmxvd19jb250cm9sX2FiaWxpdHkodnB0cik7CiAKIAkJLyoKLQkJICoJUmUtZW5hYmxlIGF1dG8tcG9sbGluZyBiZWNhdXNlIFNSQ0kgd2lsbCBkaXNhYmxlIAorCQkgKglSZS1lbmFibGUgYXV0by1wb2xsaW5nIGJlY2F1c2UgU1JDSSB3aWxsIGRpc2FibGUKIAkJICoJYXV0by1wb2xsaW5nCiAJCSAqLwotCQkgCisKIAkJZW5hYmxlX21paV9hdXRvcG9sbChyZWdzKTsKIAogCQlpZiAodnB0ci0+bWlpX3N0YXR1cyAmIFZFTE9DSVRZX0xJTktfRkFJTCkKQEAgLTE2ODksNyArMTY4OSw3IEBACiAgKglSZWxlYXNlIGFuIHRyYW5zbWl0IGJ1ZmZlci4gSWYgdGhlIGJ1ZmZlciB3YXMgcHJlYWxsb2NhdGVkIHRoZW4KICAqCXJlY3ljbGUgaXQsIGlmIG5vdCB0aGVuIHVubWFwIHRoZSBidWZmZXIuCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgdmVsb2NpdHlfZnJlZV90eF9idWYoc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIsIHN0cnVjdCB2ZWxvY2l0eV90ZF9pbmZvICp0ZGluZm8pCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHRkaW5mby0+c2tiOwpAQCAtMTcyMyw3ICsxNzIzLDcgQEAKICAqCUFsbCB0aGUgcmluZyBhbGxvY2F0aW9uIGFuZCBzZXQgdXAgaXMgZG9uZSBvbiBvcGVuIGZvciB0aGlzCiAgKglhZGFwdGVyIHRvIG1pbmltaXNlIG1lbW9yeSB1c2FnZSB3aGVuIGluYWN0aXZlCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTc0MiwxMCArMTc0MiwxMCBAQAogCXJldCA9IHZlbG9jaXR5X2luaXRfdGRfcmluZyh2cHRyKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfZnJlZV9yZF9yaW5nOwotCQotCS8qIEVuc3VyZSBjaGlwIGlzIHJ1bm5pbmcgKi8JCisKKwkvKiBFbnN1cmUgY2hpcCBpcyBydW5uaW5nICovCiAJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDApOwotCQorCiAJdmVsb2NpdHlfaW5pdF9yZWdpc3RlcnModnB0ciwgVkVMT0NJVFlfSU5JVF9DT0xEKTsKIAogCXJldCA9IHJlcXVlc3RfaXJxKHZwdHItPnBkZXYtPmlycSwgJnZlbG9jaXR5X2ludHIsIElSUUZfU0hBUkVELApAQCAtMTc3MSw3ICsxNzcxLDcgQEAKIAlnb3RvIG91dDsKIH0KIAotLyoqIAorLyoqCiAgKgl2ZWxvY2l0eV9jaGFuZ2VfbXR1CS0JTVRVIGNoYW5nZSBjYWxsYmFjawogICoJQGRldjogbmV0d29yayBkZXZpY2UKICAqCUBuZXdfbXR1OiBkZXNpcmVkIE1UVQpAQCAtMTc4MCw3ICsxNzgwLDcgQEAKICAqCXRoaXMgaW50ZXJmYWNlLiBJdCBnZXRzIGNhbGxlZCBvbiBhIGNoYW5nZSBieSB0aGUgbmV0d29yayBsYXllci4KICAqCVJldHVybiB6ZXJvIGZvciBzdWNjZXNzIG9yIG5lZ2F0aXZlIHBvc2l4IGVycm9yIGNvZGUuCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTE3ODksNyArMTc4OSw3IEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoKG5ld19tdHUgPCBWRUxPQ0lUWV9NSU5fTVRVKSB8fCBuZXdfbXR1ID4gKFZFTE9DSVRZX01BWF9NVFUpKSB7Ci0JCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfRVJSLCBLRVJOX05PVElDRSAiJXM6IEludmFsaWQgTVRVLlxuIiwgCisJCVZFTE9DSVRZX1BSVChNU0dfTEVWRUxfRVJSLCBLRVJOX05PVElDRSAiJXM6IEludmFsaWQgTVRVLlxuIiwKIAkJCQl2cHRyLT5kZXYtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xODM3LDcgKzE4MzcsNyBAQAogICoJU2h1dHMgZG93biB0aGUgaW50ZXJuYWwgb3BlcmF0aW9ucyBvZiB0aGUgdmVsb2NpdHkgYW5kCiAgKglkaXNhYmxlcyBpbnRlcnJ1cHRzLCBhdXRvcG9sbGluZywgdHJhbnNtaXQgYW5kIHJlY2VpdmUKICAqLwotIAorCiBzdGF0aWMgdm9pZCB2ZWxvY2l0eV9zaHV0ZG93bihzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKIAlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKQEAgLTE4NjgsMTAgKzE4NjgsMTAgQEAKIAkJdmVsb2NpdHlfZ2V0X2lwKHZwdHIpOwogCWlmIChkZXYtPmlycSAhPSAwKQogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQkJCisKIAkvKiBQb3dlciBkb3duIHRoZSBjaGlwICovCiAJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwotCQorCiAJLyogRnJlZSB0aGUgcmVzb3VyY2VzICovCiAJdmVsb2NpdHlfZnJlZV90ZF9yaW5nKHZwdHIpOwogCXZlbG9jaXR5X2ZyZWVfcmRfcmluZyh2cHRyKTsKQEAgLTE4ODksNyArMTg4OSw3IEBACiAgKglDYWxsZWQgYnkgdGhlIG5ldHdvciBsYXllciB0byByZXF1ZXN0IGEgcGFja2V0IGlzIHF1ZXVlZCB0bwogICoJdGhlIHZlbG9jaXR5LiBSZXR1cm5zIHplcm8gb24gc3VjY2Vzcy4KICAqLwotIAorCiBzdGF0aWMgaW50IHZlbG9jaXR5X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xOTE5LDcgKzE5MTksNyBAQAogCXRkX3B0ci0+dGRfYnVmWzBdLnF1ZXVlID0gMDsKIAogCS8qCi0JICoJUGFkIHNob3J0IGZyYW1lcy4gCisJICoJUGFkIHNob3J0IGZyYW1lcy4KIAkgKi8KIAlpZiAocGt0bGVuIDwgRVRIX1pMRU4pIHsKIAkJLyogQ2Fubm90IG9jY3VyIHVudGlsIFpDIHN1cHBvcnQgKi8KQEAgLTE5NDIsNyArMTk0Miw3IEBACiAJCWlmIChuZnJhZ3MgPiA2KSB7CiAJCQltZW1jcHkodGRpbmZvLT5idWYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4pOwogCQkJdGRpbmZvLT5za2JfZG1hWzBdID0gdGRpbmZvLT5idWZfZG1hOwotCQkJdGRfcHRyLT50ZGVzYzAucGt0c2l6ZSA9IAorCQkJdGRfcHRyLT50ZGVzYzAucGt0c2l6ZSA9CiAJCQl0ZF9wdHItPnRkX2J1ZlswXS5wYV9sb3cgPSBjcHVfdG9fbGUzMih0ZGluZm8tPnNrYl9kbWFbMF0pOwogCQkJdGRfcHRyLT50ZF9idWZbMF0ucGFfaGlnaCA9IDA7CiAJCQl0ZF9wdHItPnRkX2J1ZlswXS5idWZzaXplID0gdGRfcHRyLT50ZGVzYzAucGt0c2l6ZTsKQEAgLTIwNDMsNyArMjA0Myw3IEBACiAgKglhbmQgbmVlZCB0byBpZGVudGlmeSBpbml0aWFsbHkgaWYgd2UgYXJlLCBhbmQgaWYgbm90IGV4aXQgYXMKICAqCWVmZmljaWVudGx5IGFzIHBvc3NpYmxlLgogICovCi0gCisKIHN0YXRpYyBpbnQgdmVsb2NpdHlfaW50cihpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfaW5zdGFuY2U7CkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogCSAqCUtlZXAgcHJvY2Vzc2luZyB0aGUgSVNSIHVudGlsIHdlIGhhdmUgY29tcGxldGVkCiAJICoJcHJvY2Vzc2luZyBhbmQgdGhlIGlzcl9zdGF0dXMgYmVjb21lcyB6ZXJvCiAJICovCi0JIAorCiAJd2hpbGUgKGlzcl9zdGF0dXMgIT0gMCkgewogCQltYWNfd3JpdGVfaXNyKHZwdHItPm1hY19yZWdzLCBpc3Jfc3RhdHVzKTsKIAkJaWYgKGlzcl9zdGF0dXMgJiAofihJU1JfUFJYSSB8IElTUl9QUFJYSSB8IElTUl9QVFhJIHwgSVNSX1BQVFhJKSkpCkBAIC0yMDc5LDcgKzIwNzksNyBAQAogCQlpc3Jfc3RhdHVzID0gbWFjX3JlYWRfaXNyKHZwdHItPm1hY19yZWdzKTsKIAkJaWYgKG1heF9jb3VudCA+IHZwdHItPm9wdGlvbnMuaW50X3dvcmtzKQogCQl7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXhjZXNzaXZlIHdvcmsgYXQgaW50ZXJydXB0LlxuIiwgCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZXhjZXNzaXZlIHdvcmsgYXQgaW50ZXJydXB0LlxuIiwKIAkJCQlkZXYtPm5hbWUpOwogCQkJbWF4X2NvdW50ID0gMDsKIAkJfQpAQCAtMjA5OSw3ICsyMDk5LDcgQEAKICAqCWZvciBhIHZlbG9jaXR5IGFkYXB0ZXIuIFJlbG9hZCB0aGUgQ0FNcyB3aXRoIHRoZSBuZXcgYWRkcmVzcwogICoJZmlsdGVyIHJ1bGVzZXQuCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgdmVsb2NpdHlfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjEwOSw4ICsyMTA5LDYgQEAKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJLyogU2V0IHByb21pc2N1b3VzLiAqLwotCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwogCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVswXSk7CiAJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzRdKTsKIAkJcnhfbW9kZSA9IChSQ1JfQU0gfCBSQ1JfQUIgfCBSQ1JfUFJPTSk7CkBAIC0yMTQ4LDExICsyMTQ2LDExIEBACiAgKgl0aGUgaGFyZHdhcmUgaW50byB0aGUgY291bnRlcnMgYmVmb3JlIGxldHRpbmcgdGhlIG5ldHdvcmsKICAqCWxheWVyIGRpc3BsYXkgdGhlbS4KICAqLwotIAorCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnZlbG9jaXR5X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQkKKwogCS8qIElmIHRoZSBoYXJkd2FyZSBpcyBkb3duLCBkb24ndCB0b3VjaCBNSUkgKi8KIAlpZighbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gJnZwdHItPnN0YXRzOwpAQCAtMjE5MSw3ICsyMTg5LDcgQEAKICAqCUNhbGxlZCB3aGVuIHRoZSB1c2VyIGlzc3VlcyBhbiBpb2N0bCByZXF1ZXN0IHRvIHRoZSBuZXR3b3JrCiAgKglkZXZpY2UgaW4gcXVlc3Rpb24uIFRoZSB2ZWxvY2l0eSBpbnRlcmZhY2Ugc3VwcG9ydHMgTUlJLgogICovCi0gCisKIHN0YXRpYyBpbnQgdmVsb2NpdHlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciA9IG5ldGRldl9wcml2KGRldik7CkBAIC0yMTk5LDEwICsyMTk3LDEwIEBACiAKIAkvKiBJZiB3ZSBhcmUgYXNrZWQgZm9yIGluZm9ybWF0aW9uIGFuZCB0aGUgZGV2aWNlIGlzIHBvd2VyCiAJICAgc2F2aW5nIHRoZW4gd2UgbmVlZCB0byBicmluZyB0aGUgZGV2aWNlIGJhY2sgdXAgdG8gdGFsayB0byBpdCAqLwotCSAgIAkKKwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EMCk7Ci0JCQorCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFNJT0NHTUlJUEhZOgkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KIAljYXNlIFNJT0NHTUlJUkVHOgkvKiBSZWFkIE1JSSBQSFkgcmVnaXN0ZXIuICovCkBAIC0yMjE1LDggKzIyMTMsOCBAQAogCX0KIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcGNpX3NldF9wb3dlcl9zdGF0ZSh2cHRyLT5wZGV2LCBQQ0lfRDNob3QpOwotCQkKLQkJCisKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyMjQsNyArMjIyMiw3IEBACiAgKglEZWZpbml0aW9uIGZvciBvdXIgZGV2aWNlIGRyaXZlci4gVGhlIFBDSSBsYXllciBpbnRlcmZhY2UKICAqCXVzZXMgdGhpcyB0byBoYW5kbGUgYWxsIG91ciBjYXJkIGRpc2NvdmVyIGFuZCBwbHVnZ2luZwogICovCi0gCisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB2ZWxvY2l0eV9kcml2ZXIgPSB7CiAgICAgICAubmFtZQk9IFZFTE9DSVRZX05BTUUsCiAgICAgICAuaWRfdGFibGUJPSB2ZWxvY2l0eV9pZF90YWJsZSwKQEAgLTIyNDQsMTMgKzIyNDIsMTMgQEAKICAqCXRoZSBwcm9iZSBmdW5jdGlvbnMgZm9yIGVhY2ggdmVsb2NpdHkgYWRhcHRlciBpbnN0YWxsZWQKICAqCWluIHRoZSBzeXN0ZW0uCiAgKi8KLSAKKwogc3RhdGljIGludCBfX2luaXQgdmVsb2NpdHlfaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgcmV0OwogCiAJdmVsb2NpdHlfcmVnaXN0ZXJfbm90aWZpZXIoKTsKLQlyZXQgPSBwY2lfbW9kdWxlX2luaXQoJnZlbG9jaXR5X2RyaXZlcik7CisJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdmVsb2NpdHlfZHJpdmVyKTsKIAlpZiAocmV0IDwgMCkKIAkJdmVsb2NpdHlfdW5yZWdpc3Rlcl9ub3RpZmllcigpOwogCXJldHVybiByZXQ7CkBAIC0yMjYwLDExICsyMjU4LDExIEBACiAgKgl2ZWxvY2l0eV9jbGVhbnVwCS0JbW9kdWxlIHVubG9hZAogICoKICAqCVdoZW4gdGhlIHZlbG9jaXR5IGhhcmR3YXJlIGlzIHVubG9hZGVkIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgotICoJSXQgd2lsbCBjbGVhbiB1cCB0aGUgbm90aWZpZXJzIGFuZCB0aGUgdW5yZWdpc3RlciB0aGUgUENJIAorICoJSXQgd2lsbCBjbGVhbiB1cCB0aGUgbm90aWZpZXJzIGFuZCB0aGUgdW5yZWdpc3RlciB0aGUgUENJCiAgKglkcml2ZXIgaW50ZXJmYWNlIGZvciB0aGlzIGhhcmR3YXJlLiBUaGlzIGluIHR1cm4gY2xlYW5zIHVwCiAgKglhbGwgZGlzY292ZXJlZCBpbnRlcmZhY2VzIGJlZm9yZSByZXR1cm5pbmcgZnJvbSB0aGUgZnVuY3Rpb24KICAqLwotIAorCiBzdGF0aWMgdm9pZCBfX2V4aXQgdmVsb2NpdHlfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAl2ZWxvY2l0eV91bnJlZ2lzdGVyX25vdGlmaWVyKCk7CkBAIC0yMjc4LDggKzIyNzYsOCBAQAogLyoKICAqIE1JSSBhY2Nlc3MgLCBtZWRpYSBsaW5rIG1vZGUgc2V0dGluZyBmdW5jdGlvbnMKICAqLwotIAotIAorCisKIC8qKgogICoJbWlpX2luaXQJLQlzZXQgdXAgTUlJCiAgKglAdnB0cjogdmVsb2NpdHkgYWRhcHRlcgpAQCAtMjI4Nyw3ICsyMjg1LDcgQEAKICAqCiAgKglTZXQgdXAgdGhlIFBIWSBmb3IgdGhlIGN1cnJlbnQgbGluayBzdGF0ZS4KICAqLwotIAorCiBzdGF0aWMgdm9pZCBtaWlfaW5pdChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpCiB7CiAJdTE2IEJNQ1I7CkBAIC0yMzAwLDcgKzIyOTgsNyBAQAogCQlNSUlfUkVHX0JJVFNfT0ZGKChBTkFSX0FTTURJUiB8IEFOQVJfUEFVU0UpLCBNSUlfUkVHX0FOQVIsIHZwdHItPm1hY19yZWdzKTsKIAkJLyoKIAkJICoJVHVybiBvbiBFQ0hPRElTIGJpdCBpbiBOV2F5LWZvcmNlZCBmdWxsIG1vZGUgYW5kIHR1cm4gaXQKLQkJICoJb2ZmIGl0IGluIE5XYXktZm9yY2VkIGhhbGYgbW9kZSBmb3IgTldheS1mb3JjZWQgdi5zLiAKKwkJICoJb2ZmIGl0IGluIE5XYXktZm9yY2VkIGhhbGYgbW9kZSBmb3IgTldheS1mb3JjZWQgdi5zLgogCQkgKglsZWdhY3ktZm9yY2VkIGlzc3VlLgogCQkgKi8KIAkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKQEAgLTIzMjAsNyArMjMxOCw3IEBACiAJCU1JSV9SRUdfQklUU19PTigoQU5BUl9BU01ESVIgfCBBTkFSX1BBVVNFKSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CiAJCS8qCiAJCSAqCVR1cm4gb24gRUNIT0RJUyBiaXQgaW4gTldheS1mb3JjZWQgZnVsbCBtb2RlIGFuZCB0dXJuIGl0Ci0JCSAqCW9mZiBpdCBpbiBOV2F5LWZvcmNlZCBoYWxmIG1vZGUgZm9yIE5XYXktZm9yY2VkIHYucy4gCisJCSAqCW9mZiBpdCBpbiBOV2F5LWZvcmNlZCBoYWxmIG1vZGUgZm9yIE5XYXktZm9yY2VkIHYucy4KIAkJICoJbGVnYWN5LWZvcmNlZCBpc3N1ZQogCQkgKi8KIAkJaWYgKHZwdHItPm1paV9zdGF0dXMgJiBWRUxPQ0lUWV9EVVBMRVhfRlVMTCkKQEAgLTIzMzIsMTEgKzIzMzAsMTEgQEAKIAljYXNlIFBIWUlEX01BUlZFTExfMTAwMDoKIAljYXNlIFBIWUlEX01BUlZFTExfMTAwMFM6CiAJCS8qCi0JCSAqCUFzc2VydCBDUlMgb24gVHJhbnNtaXQgCisJCSAqCUFzc2VydCBDUlMgb24gVHJhbnNtaXQKIAkJICovCiAJCU1JSV9SRUdfQklUU19PTihQU0NSX0FDUlNUWCwgTUlJX1JFR19QU0NSLCB2cHRyLT5tYWNfcmVncyk7CiAJCS8qCi0JCSAqCVJlc2V0IHRvIGhhcmR3YXJlIGRlZmF1bHQgCisJCSAqCVJlc2V0IHRvIGhhcmR3YXJlIGRlZmF1bHQKIAkJICovCiAJCU1JSV9SRUdfQklUU19PTigoQU5BUl9BU01ESVIgfCBBTkFSX1BBVVNFKSwgTUlJX1JFR19BTkFSLCB2cHRyLT5tYWNfcmVncyk7CiAJCWJyZWFrOwpAQCAtMjM1Niw3ICsyMzU0LDcgQEAKICAqCiAgKglUdXJuIG9mZiB0aGUgYXV0b3BvbGwgYW5kIHdhaXQgZm9yIGl0IHRvIGRpc2FibGUgb24gdGhlIGNoaXAKICAqLwotIAorCiBzdGF0aWMgdm9pZCBzYWZlX2Rpc2FibGVfbWlpX2F1dG9wb2xsKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncykKIHsKIAl1MTYgd3c7CkBAIC0yNDEwLDcgKzI0MDgsNyBAQAogICoJUGVyZm9ybSBhIHNpbmdsZSByZWFkIG9mIGFuIE1JSSAxNmJpdCByZWdpc3Rlci4gUmV0dXJucyB6ZXJvCiAgKglvbiBzdWNjZXNzIG9yIC1FVElNRURPVVQgaWYgdGhlIFBIWSBkaWQgbm90IHJlc3BvbmQuCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9taWlfcmVhZChzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqcmVncywgdTggaW5kZXgsIHUxNiAqZGF0YSkKIHsKIAl1MTYgd3c7CkBAIC0yNDQ2LDcgKzI0NDQsNyBAQAogICoJUGVyZm9ybSBhIHNpbmdsZSB3cml0ZSB0byBhbiBNSUkgMTZiaXQgcmVnaXN0ZXIuIFJldHVybnMgemVybwogICoJb24gc3VjY2VzcyBvciAtRVRJTUVET1VUIGlmIHRoZSBQSFkgZGlkIG5vdCByZXNwb25kLgogICovCi0gCisKIHN0YXRpYyBpbnQgdmVsb2NpdHlfbWlpX3dyaXRlKHN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICpyZWdzLCB1OCBtaWlfYWRkciwgdTE2IGRhdGEpCiB7CiAJdTE2IHd3OwpAQCAtMjQ4NSw3ICsyNDgzLDcgQEAKICAqCW1paV9zdGF0dXMgYWNjb3JkaW5nbHkuIFRoZSByZXF1ZXN0ZWQgbGluayBzdGF0ZSBpbmZvcm1hdGlvbgogICoJaXMgYWxzbyByZXR1cm5lZC4KICAqLwotIAorCiBzdGF0aWMgdTMyIHZlbG9jaXR5X2dldF9vcHRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0cikKIHsKIAl1MzIgc3RhdHVzID0gMDsKQEAgLTI1MTcsNyArMjUxNSw3IEBACiAgKgogICoJRW5hYmxlIGF1dG9uZWdvdGF0aW9uIG9uIHRoaXMgaW50ZXJmYWNlCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgbWlpX3NldF9hdXRvX29uKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQogewogCWlmIChNSUlfUkVHX0JJVFNfSVNfT04oQk1DUl9BVVRPLCBNSUlfUkVHX0JNQ1IsIHZwdHItPm1hY19yZWdzKSkKQEAgLTI1NDEsNyArMjUzOSw3IEBACiAgKglTZXQgdXAgdGhlIGZsb3cgY29udHJvbCBvbiB0aGlzIGludGVyZmFjZSBhY2NvcmRpbmcgdG8KICAqCXRoZSBzdXBwbGllZCB1c2VyL2VlcHJvbSBvcHRpb25zLgogICovCi0gCisKIHN0YXRpYyB2b2lkIHNldF9taWlfZmxvd19jb250cm9sKHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyKQogewogCS8qRW5hYmxlIG9yIERpc2FibGUgUEFVU0UgaW4gQU5BUiAqLwpAQCAtMjU3OCw3ICsyNTc2LDcgQEAKICAqCVBIWSBhbmQgYWxzbyB2ZWxvY2l0eSBoYXJkd2FyZSBzZXR1cCBhY2NvcmRpbmdseS4gSW4gcGFydGljdWxhcgogICoJd2UgbmVlZCB0byBzZXQgdXAgQ0QgcG9sbGluZyBhbmQgZnJhbWUgYnVyc3RpbmcuCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9zZXRfbWVkaWFfbW9kZShzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgdTMyIG1paV9zdGF0dXMpCiB7CiAJdTMyIGN1cnJfc3RhdHVzOwpAQCAtMjY4OCw3ICsyNjg2LDcgQEAKICAqCUNoZWNrIHRoZSBjdXJyZW50IE1JSSBzdGF0dXMgYW5kIGRldGVybWluZSB0aGUgbGluayBzdGF0dXMKICAqCWFjY29yZGluZ2x5CiAgKi8KLSAKKwogc3RhdGljIHUzMiBtaWlfY2hlY2tfbWVkaWFfbW9kZShzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MpCiB7CiAJdTMyIHN0YXR1cyA9IDA7CkBAIC0yNzQyLDcgKzI3NDAsNyBAQAogCiAJaWYgKFBIWVNSMCAmIFBIWVNSMF9TUERHKQogCQlzdGF0dXMgfD0gVkVMT0NJVFlfU1BFRURfMTAwMDsKLQlpZiAoUEhZU1IwICYgUEhZU1IwX1NQRDEwKQorCWVsc2UgaWYgKFBIWVNSMCAmIFBIWVNSMF9TUEQxMCkKIAkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwOwogCWVsc2UKIAkJc3RhdHVzIHw9IFZFTE9DSVRZX1NQRUVEXzEwMDsKQEAgLTI4MjAsMTQgKzI4MTgsMTQgQEAKICAqCUNhbGxlZCBiZWZvcmUgYW4gZXRodG9vbCBvcGVyYXRpb24uIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZQogICoJY2hpcCBpcyBvdXQgb2YgRDMgc3RhdGUgYmVmb3JlIHdlIHBva2UgYXQgaXQuCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9ldGh0b29sX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHZwdHItPnBkZXYsIFBDSV9EMCk7CiAJcmV0dXJuIDA7Ci19CQorfQogCiAvKioKICAqCXZlbG9jaXR5X2V0aHRvb2xfZG93bgktCXBvc3QgaG9vayBmb3IgZXRodG9vbApAQCAtMjgzNiw3ICsyODM0LDcgQEAKICAqCUNhbGxlZCBhZnRlciBhbiBldGh0b29sIG9wZXJhdGlvbi4gUmVzdG9yZSB0aGUgY2hpcCBiYWNrIHRvIEQzCiAgKglzdGF0ZSBpZiBpdCBpc24ndCBydW5uaW5nLgogICovCi0gCisKIHN0YXRpYyB2b2lkIHZlbG9jaXR5X2V0aHRvb2xfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTI4NTEsOCArMjg0OSwxNyBAQAogCXUzMiBzdGF0dXM7CiAJc3RhdHVzID0gY2hlY2tfY29ubmVjdGlvbl90eXBlKHZwdHItPm1hY19yZWdzKTsKIAotCWNtZC0+c3VwcG9ydGVkID0gU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX0F1dG9uZWcgfCBTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7Ci0JaWYgKHN0YXR1cyAmIFZFTE9DSVRZX1NQRUVEXzEwMCkKKwljbWQtPnN1cHBvcnRlZCA9IFNVUFBPUlRFRF9UUCB8CisJCQlTVVBQT1JURURfQXV0b25lZyB8CisJCQlTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCVNVUFBPUlRFRF8xMGJhc2VUX0Z1bGwgfAorCQkJU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJU1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmIHwKKwkJCVNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbDsKKwlpZiAoc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwMCkKKwkJY21kLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJZWxzZSBpZiAoc3RhdHVzICYgVkVMT0NJVFlfU1BFRURfMTAwKQogCQljbWQtPnNwZWVkID0gU1BFRURfMTAwOwogCWVsc2UKIAkJY21kLT5zcGVlZCA9IFNQRUVEXzEwOwpAQCAtMjg2NSw3ICsyODcyLDcgQEAKIAkJY21kLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKIAllbHNlCiAJCWNtZC0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7Ci0JCQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NzUsNyArMjg4Miw3IEBACiAJdTMyIGN1cnJfc3RhdHVzOwogCXUzMiBuZXdfc3RhdHVzID0gMDsKIAlpbnQgcmV0ID0gMDsKLQkKKwogCWN1cnJfc3RhdHVzID0gY2hlY2tfY29ubmVjdGlvbl90eXBlKHZwdHItPm1hY19yZWdzKTsKIAljdXJyX3N0YXR1cyAmPSAoflZFTE9DSVRZX0xJTktfRkFJTCk7CiAKQEAgLTI4OTYsNyArMjkwMyw3IEBACiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwotCXJldHVybiBCWVRFX1JFR19CSVRTX0lTX09OKFBIWVNSMF9MSU5LR0QsICZyZWdzLT5QSFlTUjApICA/IDAgOiAxOworCXJldHVybiBCWVRFX1JFR19CSVRTX0lTX09OKFBIWVNSMF9MSU5LR0QsICZyZWdzLT5QSFlTUjApID8gMSA6IDA7CiB9CiAKIHN0YXRpYyB2b2lkIHZlbG9jaXR5X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCkBAIC0yOTY0LDcgKzI5NzEsNyBAQAogCSBtc2dsZXZlbCA9IHZhbHVlOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIHZlbG9jaXR5X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB2ZWxvY2l0eV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzCT0JdmVsb2NpdHlfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJPQl2ZWxvY2l0eV9zZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvCT0JdmVsb2NpdHlfZ2V0X2RydmluZm8sCkBAIC0yOTg3LDcgKzI5OTQsNyBAQAogICoJYXJlIHVzZWQgYnkgdG9vbHMgbGlrZSBrdWR6dSB0byBpbnRlcnJvZ2F0ZSB0aGUgbGluayBzdGF0ZSBvZiB0aGUKICAqCWhhcmR3YXJlCiAgKi8KLSAKKwogc3RhdGljIGludCB2ZWxvY2l0eV9taWlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7CiAJc3RydWN0IHZlbG9jaXR5X2luZm8gKnZwdHIgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjk5NSw3ICszMDAyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqbWlpZGF0YSA9IGlmX21paShpZnIpOwogCWludCBlcnI7Ci0JCisKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6CiAJCW1paWRhdGEtPnBoeV9pZCA9IHJlYWRiKCZyZWdzLT5NSUlBRFIpICYgMHgxZjsKQEAgLTMwMjYsNyArMzAzMyw3IEBACiAKIC8qKgogICoJdmVsb2NpdHlfc2F2ZV9jb250ZXh0CS0Jc2F2ZSByZWdpc3RlcnMKLSAqCUB2cHRyOiB2ZWxvY2l0eSAKKyAqCUB2cHRyOiB2ZWxvY2l0eQogICoJQGNvbnRleHQ6IGJ1ZmZlciBmb3Igc3RvcmVkIGNvbnRleHQKICAqCiAgKglSZXRyaWV2ZSB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHZlbG9jaXR5IGhhcmR3YXJlCkBAIC0zMDM0LDcgKzMwNDEsNyBAQAogICoJcmVzdG9yZSBmdW5jdGlvbnMuIFRoaXMgYWxsb3dzIHVzIHRvIHNhdmUgdGhpbmdzIHdlIG5lZWQgYWNyb3NzCiAgKglwb3dlciBkb3duIHN0YXRlcwogICovCi0gCisKIHN0YXRpYyB2b2lkIHZlbG9jaXR5X3NhdmVfY29udGV4dChzdHJ1Y3QgdmVsb2NpdHlfaW5mbyAqdnB0ciwgc3RydWN0IHZlbG9jaXR5X2NvbnRleHQgKiBjb250ZXh0KQogewogCXN0cnVjdCBtYWNfcmVncyBfX2lvbWVtICogcmVncyA9IHZwdHItPm1hY19yZWdzOwpAQCAtMzA1NCwxMyArMzA2MSwxMyBAQAogCiAvKioKICAqCXZlbG9jaXR5X3Jlc3RvcmVfY29udGV4dAktCXJlc3RvcmUgcmVnaXN0ZXJzCi0gKglAdnB0cjogdmVsb2NpdHkgCisgKglAdnB0cjogdmVsb2NpdHkKICAqCUBjb250ZXh0OiBidWZmZXIgZm9yIHN0b3JlZCBjb250ZXh0CiAgKgotICoJUmVsb2FkIHRoZSByZWdpc3RlciBjb25maWd1cmF0aW9uIGZyb20gdGhlIHZlbG9jaXR5IGNvbnRleHQgCisgKglSZWxvYWQgdGhlIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgdmVsb2NpdHkgY29udGV4dAogICoJY3JlYXRlZCBieSB2ZWxvY2l0eV9zYXZlX2NvbnRleHQuCiAgKi8KLSAKKwogc3RhdGljIHZvaWQgdmVsb2NpdHlfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCB2ZWxvY2l0eV9pbmZvICp2cHRyLCBzdHJ1Y3QgdmVsb2NpdHlfY29udGV4dCAqY29udGV4dCkKIHsKIAlzdHJ1Y3QgbWFjX3JlZ3MgX19pb21lbSAqIHJlZ3MgPSB2cHRyLT5tYWNfcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5oIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKaW5kZXggNDk2YzNkNS4uYjllMTE0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmgKQEAgLTI5LDcgKzI5LDcgQEAKIAogI2RlZmluZSBWRUxPQ0lUWV9OQU1FICAgICAgICAgICJ2aWEtdmVsb2NpdHkiCiAjZGVmaW5lIFZFTE9DSVRZX0ZVTExfRFJWX05BTSAgIlZJQSBOZXR3b3JraW5nIFZlbG9jaXR5IEZhbWlseSBHaWdhYml0IEV0aGVybmV0IEFkYXB0ZXIgRHJpdmVyIgotI2RlZmluZSBWRUxPQ0lUWV9WRVJTSU9OICAgICAgICIxLjEzIgorI2RlZmluZSBWRUxPQ0lUWV9WRVJTSU9OICAgICAgICIxLjE0IgogCiAjZGVmaW5lIFZFTE9DSVRZX0lPX1NJWkUJMjU2CiAKQEAgLTI0Niw3ICsyNDYsNyBAQAogc3RydWN0IHRkX2J1ZiB7CiAJdTMyIHBhX2xvdzsKIAl1MTYgcGFfaGlnaDsKLQl1MTYgYnVmc2l6ZToxNDsJCisJdTE2IGJ1ZnNpemU6MTQ7CiAJdTE2IHJlc2VydmVkOjE7CiAJdTE2IHF1ZXVlOjE7CiB9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CkBAIC0yNjIsMjUgKzI2Miw2IEBACiAJZG1hX2FkZHJfdCBza2JfZG1hOwogfTsKIAotLyoqCi0gKglhbGxvY19yZF9pbmZvCQktCWFsbG9jYXRlIGFuIHJkIGluZm8gYmxvY2sKLSAqCi0gKglBbG9jYXRlIGFuZCBpbml0aWFsaXplIGEgcmVjZWl2ZSBpbmZvIHN0cnVjdHVyZSB1c2VkIGZvciBrZWVwaW5nCi0gKgl0cmFjayBvZiBrZXJuZWwgc2lkZSBpbmZvcm1hdGlvbiByZWxhdGVkIHRvIGVhY2ggcmVjZWl2ZQotICoJZGVzY3JpcHRvciB3ZSBhcmUgdXNpbmcKLSAqLwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvICphbGxvY19yZF9pbmZvKHZvaWQpCi17Ci0Jc3RydWN0IHZlbG9jaXR5X3JkX2luZm8gKnB0cjsKLQlpZiAoKHB0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2ZWxvY2l0eV9yZF9pbmZvKSwgR0ZQX0FUT01JQykpID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCWVsc2UgewotCQltZW1zZXQocHRyLCAwLCBzaXplb2Yoc3RydWN0IHZlbG9jaXR5X3JkX2luZm8pKTsKLQkJcmV0dXJuIHB0cjsKLQl9Ci19Ci0KIC8qCiAgKglVc2VkIHRvIHRyYWNrIHRyYW5zbWl0IHNpZGUgYnVmZmVycy4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2MxMDEuYyBiL2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMKaW5kZXggNDM1ZTkxZS4uNmI2M2IzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2MxMDEuYworKysgYi9kcml2ZXJzL25ldC93YW4vYzEwMS5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9jYXJyaWVyKHBvcnRfdCAqcG9ydCkKIHsKLQlpZiAoIXNjYV9pbihNU0NJMV9PRkZTRVQgKyBTVDMsIHBvcnQpICYgU1QzX0RDRCkKKwlpZiAoIShzY2FfaW4oTVNDSTFfT0ZGU0VUICsgU1QzLCBwb3J0KSAmIFNUM19EQ0QpKQogCQluZXRpZl9jYXJyaWVyX29uKHBvcnRfdG9fZGV2KHBvcnQpKTsKIAllbHNlCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKHBvcnRfdG9fZGV2KHBvcnQpKTsKQEAgLTEyNywxMCArMTI3LDEwIEBACiAKIHN0YXRpYyB2b2lkIHNjYV9tc2NpX2ludHIocG9ydF90ICpwb3J0KQogewotCXU4IHN0YXQgPSBzY2FfaW4oTVNDSTFfT0ZGU0VUICsgU1QxLCBwb3J0KTsgLyogcmVhZCBNU0NJIFNUMSBzdGF0dXMgKi8KKwl1OCBzdGF0ID0gc2NhX2luKE1TQ0kwX09GRlNFVCArIFNUMSwgcG9ydCk7IC8qIHJlYWQgTVNDSSBTVDEgc3RhdHVzICovCiAKLQkvKiBSZXNldCBNU0NJIFRYIHVuZGVycnVuIHN0YXR1cyBiaXQgKi8KLQlzY2Ffb3V0KHN0YXQgJiBTVDFfVURSTiwgTVNDSTBfT0ZGU0VUICsgU1QxLCBwb3J0KTsKKwkvKiBSZXNldCBNU0NJIFRYIHVuZGVycnVuIGFuZCBDRENEIChpZ25vcmVkKSBzdGF0dXMgYml0ICovCisJc2NhX291dChzdGF0ICYgKFNUMV9VRFJOIHwgU1QxX0NEQ0QpLCBNU0NJMF9PRkZTRVQgKyBTVDEsIHBvcnQpOwogCiAJaWYgKHN0YXQgJiBTVDFfVURSTikgewogCQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBoZGxjX3N0YXRzKHBvcnRfdG9fZGV2KHBvcnQpKTsKQEAgLTEzOCw2ICsxMzgsNyBAQAogCQlzdGF0cy0+dHhfZmlmb19lcnJvcnMrKzsKIAl9CiAKKwlzdGF0ID0gc2NhX2luKE1TQ0kxX09GRlNFVCArIFNUMSwgcG9ydCk7IC8qIHJlYWQgTVNDSTEgU1QxIHN0YXR1cyAqLwogCS8qIFJlc2V0IE1TQ0kgQ0RDRCBzdGF0dXMgYml0IC0gdXNlcyBjaCMyIERDRCBpbnB1dCAqLwogCXNjYV9vdXQoc3RhdCAmIFNUMV9DRENELCBNU0NJMV9PRkZTRVQgKyBTVDEsIHBvcnQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vY3ljeF9tYWluLmMgYi9kcml2ZXJzL25ldC93YW4vY3ljeF9tYWluLmMKaW5kZXggNDMwYjFmNi4uYTVlN2NlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2N5Y3hfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9jeWN4X21haW4uYwpAQCAtNDAsNyArNDAsNiBAQAogKiAxOTk4LzA4LzA4CWFjbWUJCUluaXRpYWwgdmVyc2lvbi4KICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogT1MgY29uZmlndXJhdGlvbiBvcHRpb25zICovCiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CS8qIG9mZnNldG9mKCksIGV0Yy4gKi8KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgkvKiByZXR1cm4gY29kZXMgKi8KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4JLyogaW5saW5lIG1lbXNldCgpLCBldGMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZGxjaS5jIGIvZHJpdmVycy9uZXQvd2FuL2RsY2kuYwppbmRleCA2ZTFlYzViLi43MzY5ODc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZGxjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kbGNpLmMKQEAgLTI4LDcgKzI4LDYgQEAKICAqCQkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4gLyogZm9yIENPTkZJR19ETENJX0NPVU5UICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggNjg0YWY0My4uYWY0ZDQxNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jCkBAIC0yMDYyLDcgKzIwNjIsNyBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBkc2NjNF9pbml0X21vZHVsZSh2b2lkKQogewotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmRzY2M0X2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRzY2M0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBkc2NjNF9jbGVhbnVwX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggMzcwNWRiMDRhLi41NjQzNTFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKQEAgLTI2OTcsNyArMjY5Nyw3IEBACiAJZm9yIChpID0gMDsgaSA8IEZTVF9NQVhfQ0FSRFM7IGkrKykKIAkJZnN0X2NhcmRfYXJyYXlbaV0gPSBOVUxMOwogCXNwaW5fbG9ja19pbml0KCZmc3Rfd29ya19xX2xvY2spOwotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJmZzdF9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZmc3RfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKaW5kZXggMzlmNDQyNC4uN2I1ZDgxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYwpAQCAtMTc5MCw3ICsxNzkwLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9sbWModm9pZCkKIHsKLSAgICByZXR1cm4gcGNpX21vZHVsZV9pbml0KCZsbWNfZHJpdmVyKTsKKyAgICByZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmbG1jX2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2xtYyh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCmluZGV4IDU2N2VmZmYuLjU2ZTY5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYworKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKQEAgLTM2NzcsNyArMzY3Nyw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNwY19pbml0KHZvaWQpCiB7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmY3BjX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNwY19kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgY3BjX2NsZWFudXBfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKaW5kZXggNGRmNjFmYS4uYTZiOWMzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYwpAQCAtNDc2LDcgKzQ3Niw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAicGNpMjAwc3luOiBJbnZhbGlkIFBDSSBjbG9jayBmcmVxdWVuY3lcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmcGNpMjAwX3BjaV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZwY2kyMDBfcGNpX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3NkbGEuYyBiL2RyaXZlcnMvbmV0L3dhbi9zZGxhLmMKaW5kZXggNzYyOGMyZC4uMGJhMDE4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3NkbGEuYworKysgYi9kcml2ZXJzL25ldC93YW4vc2RsYS5jCkBAIC0zMiw3ICszMiw2IEBACiAgKgkJMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGZvciBDT05GSUdfRExDSV9NQVggKi8KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMgYi9kcml2ZXJzL25ldC93YW4vd2FueGwuYwppbmRleCBiMjAzMWRmLi5lYzY4ZjdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vd2FueGwuYworKysgYi9kcml2ZXJzL25ldC93YW4vd2FueGwuYwpAQCAtODM3LDcgKzgzNyw3IEBACiAjaWZkZWYgTU9EVUxFCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIHZlcnNpb24pOwogI2VuZGlmCi0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmd2FueGxfcGNpX2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJndhbnhsX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgd2FueGxfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dkLmMgYi9kcml2ZXJzL25ldC93ZC5jCmluZGV4IDdjYWE4ZGMuLjQxZjFkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dkLmMKKysrIGIvZHJpdmVycy9uZXQvd2QuYwpAQCAtNjEsNyArNjEsNyBAQAogCQkJCQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IHN0YXJ0X3BhZ2UpOwogc3RhdGljIGludCB3ZF9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotDAorCiAjZGVmaW5lIFdEX1NUQVJUX1BHCQkweDAwCS8qIEZpcnN0IHBhZ2Ugb2YgVFggYnVmZmVyICovCiAjZGVmaW5lIFdEMDNfU1RPUF9QRwkweDIwCS8qIExhc3QgcGFnZSArMSBvZiBSWCByaW5nICovCiAjZGVmaW5lIFdEMTNfU1RPUF9QRwkweDQwCS8qIExhc3QgcGFnZSArMSBvZiBSWCByaW5nICovCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIFdEX05JQ19PRkZTRVQJMTYJCS8qIE9mZnNldCB0byB0aGUgODM5MCBmcm9tIHRoZSBiYXNlX2FkZHIuICovCiAjZGVmaW5lIFdEX0lPX0VYVEVOVAkzMgogCi0MCisKIC8qCVByb2JlIGZvciB0aGUgV0Q4MDAzIGFuZCBXRDgwMTMuICBUaGVzZSBjYXJkcyBoYXZlIHRoZSBzdGF0aW9uCiAJYWRkcmVzcyBQUk9NIGF0IEkvTyBwb3J0cyA8YmFzZT4rOCB0byA8YmFzZT4rMTMsIHdpdGggYSBjaGVja3N1bQogCWZvbGxvd2luZy4gQSBTb3VuZGJsYXN0ZXIgY2FuIGhhdmUgdGhlIHNhbWUgY2hlY2tzdW0gYXMgYW4gV0RldGhlcmNhcmQsCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkJaWYgKCByID09IE5VTEwpCiAJCQlyZXR1cm4gLUVCVVNZOwogCQlpID0gd2RfcHJvYmUxKGRldiwgYmFzZV9hZGRyKTsKLQkJaWYgKGkgIT0gMCkgIAorCQlpZiAoaSAhPSAwKQogCQkJcmVsZWFzZV9yZWdpb24oYmFzZV9hZGRyLCBXRF9JT19FWFRFTlQpOwogCQllbHNlCiAJCQlyLT5uYW1lID0gZGV2LT5uYW1lOwpAQCAtMjcyLDcgKzI3Miw3IEBACiAJCQkgICBhIHJlbGlhYmxlIHdheSB0byB0cmlnZ2VyIGFuIGludGVycnVwdC4gKi8KIAkJCW91dGJfcChFODM5MF9OT0RNQSArIEU4MzkwX1NUT1AsIG5pY19hZGRyKTsKIAkJCW91dGIoMHgwMCwgbmljX2FkZHIrRU4wX0lNUik7CS8qIERpc2FibGUgYWxsIGludHJzLiAqLwotCQkJCisKIAkJCWlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7CiAJCQlvdXRiX3AoMHhmZiwgbmljX2FkZHIgKyBFTjBfSU1SKTsJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHRzLiAqLwogCQkJb3V0Yl9wKDB4MDAsIG5pY19hZGRyICsgRU4wX1JDTlRMTyk7CkBAIC0yODAsNyArMjgwLDcgQEAKIAkJCW91dGIoRTgzOTBfUlJFQUQrRTgzOTBfU1RBUlQsIG5pY19hZGRyKTsgLyogVHJpZ2dlciBpdC4uLiAqLwogCQkJbWRlbGF5KDIwKTsKIAkJCWRldi0+aXJxID0gcHJvYmVfaXJxX29mZihpcnFfbWFzayk7Ci0JCQkKKwogCQkJb3V0Yl9wKDB4MDAsIG5pY19hZGRyK0VOMF9JTVIpOwkvKiBNYXNrIGFsbCBpbnRycy4gYWdhaW4uICovCiAKIAkJCWlmIChlaV9kZWJ1ZyA+IDIpCkBAIC00NzgsNyArNDc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotDAorCiAjaWZkZWYgTU9EVUxFCiAjZGVmaW5lIE1BWF9XRF9DQVJEUwk0CS8qIE1heCBudW1iZXIgb2Ygd2QgY2FyZHMgcGVyIG1vZHVsZSAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfd2RbTUFYX1dEX0NBUkRTXTsKQEAgLTUwMCw4ICs1MDAsOCBAQAogCiAvKiBUaGlzIGlzIHNldCB1cCBzbyB0aGF0IG9ubHkgYSBzaW5nbGUgYXV0b3Byb2JlIHRha2VzIHBsYWNlIHBlciBjYWxsLgogSVNBIGRldmljZSBhdXRvcHJvYmVzIG9uIGEgcnVubmluZyBtYWNoaW5lIGFyZSBub3QgcmVjb21tZW5kZWQuICovCi1pbnQKLWluaXRfbW9kdWxlKHZvaWQpCisKK2ludCBfX2luaXQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCB0aGlzX2RldiwgZm91bmQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggZmE5ZDJjNC4uYmQ0YTY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0yNzEsMjUgKzI3MSwxNCBAQAogCWJvb2wgIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gSVBXMjIwMCBtb2R1bGUuIgogCWRlcGVuZHMgb24gSVBXMjIwMAogCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciB0aGUgSVBXMjIwMC4gIAorCSAgVGhpcyBvcHRpb24gd2lsbCBlbmFibGUgbG93IGxldmVsIGRlYnVnIHRyYWNpbmcgb3V0cHV0IGZvciBJUFcyMjAwLgogCi0JICBUaGlzIHdpbGwgcmVzdWx0IGluIHRoZSBrZXJuZWwgbW9kdWxlIGJlaW5nIH4xMDBrIGxhcmdlci4gIFlvdSBjYW4gCi0JICBjb250cm9sIHdoaWNoIGRlYnVnIG91dHB1dCBpcyBzZW50IHRvIHRoZSBrZXJuZWwgbG9nIGJ5IHNldHRpbmcgdGhlIAotCSAgdmFsdWUgaW4gCisJICBOb3RlLCBub3JtYWwgZGVidWcgY29kZSBpcyBhbHJlYWR5IGNvbXBpbGVkIGluLiBUaGlzIGxvdyBsZXZlbAorCSAgZGVidWcgb3B0aW9uIGVuYWJsZXMgZGVidWcgb24gaG90IHBhdGhzIChlLmcgVHgsIFJ4LCBJU1IpIGFuZAorCSAgd2lsbCByZXN1bHQgaW4gdGhlIGtlcm5lbCBtb2R1bGUgYmVpbmcgfjcwIGxhcmdlci4gIE1vc3QgdXNlcnMKKwkgIHdpbGwgdHlwaWNhbGx5IG5vdCBuZWVkIHRoaXMgaGlnaCB2ZXJib3NpdHkgZGVidWcgaW5mb3JtYXRpb24uCiAKLQkgIC9zeXMvYnVzL3BjaS9kcml2ZXJzL2lwdzIyMDAvZGVidWdfbGV2ZWwKLQotCSAgVGhpcyBlbnRyeSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZC4KLQotCSAgVG8gc2V0IGEgdmFsdWUsIHNpbXBseSBlY2hvIGFuIDgtYnl0ZSBoZXggdmFsdWUgdG8gdGhlIHNhbWUgZmlsZToKLQotCSAgJSBlY2hvIDB4MDAwMDBGRk8gPiAvc3lzL2J1cy9wY2kvZHJpdmVycy9pcHcyMjAwL2RlYnVnX2xldmVsCi0KLQkgIFlvdSBjYW4gZmluZCB0aGUgbGlzdCBvZiBkZWJ1ZyBtYXNrIHZhbHVlcyBpbiAKLQkgIGRyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaAotCi0JICBJZiB5b3UgYXJlIG5vdCB0cnlpbmcgdG8gZGVidWcgb3IgZGV2ZWxvcCB0aGUgSVBXMjIwMCBkcml2ZXIsIHlvdSAKLQkgIG1vc3QgbGlrZWx5IHdhbnQgdG8gc2F5IE4gaGVyZS4KKwkgIElmIHlvdSBhcmUgbm90IHN1cmUsIHNheSBOIGhlcmUuCiAKIGNvbmZpZyBBSVJPCiAJdHJpc3RhdGUgIkNpc2NvL0Fpcm9uZXQgMzRYLzM1WC80NTAwLzQ4MDAgSVNBIGFuZCBQQ0kgY2FyZHMiCkBAIC00NDcsNiArNDM2LDcgQEAKIAl0cmlzdGF0ZSAiQ2lzY28vQWlyb25ldCAzNFgvMzVYLzQ1MDAvNDgwMCBQQ01DSUEgY2FyZHMiCiAJZGVwZW5kcyBvbiBORVRfUkFESU8gJiYgUENNQ0lBICYmIChCUk9LRU4gfHwgIU0zMlIpCiAJc2VsZWN0IENSWVBUTworCXNlbGVjdCBDUllQVE9fQUVTCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyB0aGUgc3RhbmRhcmQgTGludXggZHJpdmVyIHRvIHN1cHBvcnQgQ2lzY28vQWlyb25ldCBQQ01DSUEKIAkgIDgwMi4xMSB3aXJlbGVzcyBjYXJkcy4gIFRoaXMgZHJpdmVyIGlzIHRoZSBzYW1lIGFzIHRoZSBBaXJvbmV0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggYTRkZDEzOTQuLmJmZjA0Y2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTE5LDYgKzE5LDcgQEAKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTQ3LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNpbmNsdWRlICJhaXJvLmgiCiAKQEAgLTExODcsMTEgKzExODksMTAgQEAKIAkJCWludCB3aGljaGJhcCk7CiAJdW5zaWduZWQgc2hvcnQgKmZsYXNoOwogCXRkc1Jzc2lFbnRyeSAqcnNzaTsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisJc3RydWN0IHRhc2tfc3RydWN0ICpsaXN0X2Jzc190YXNrOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqYWlyb190aHJlYWRfdGFzazsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLQlwaWRfdCB0aHJfcGlkOwogCXdhaXRfcXVldWVfaGVhZF90IHRocl93YWl0OwotCXN0cnVjdCBjb21wbGV0aW9uIHRocl9leGl0ZWQ7CiAJdW5zaWduZWQgbG9uZyBleHBpcmVzOwogCXN0cnVjdCB7CiAJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMjAzLDcgKzEyMDQsNyBAQAogCXN0cnVjdCBpd19zcHlfZGF0YQlzcHlfZGF0YTsKIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEJd2lyZWxlc3NfZGF0YTsKIAkvKiBNSUMgc3R1ZmYgKi8KLQlzdHJ1Y3QgY3J5cHRvX3RmbQkqdGZtOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyCSp0Zm07CiAJbWljX21vZHVsZQkJbW9kWzJdOwogCW1pY19zdGF0aXN0aWNzCQltaWNzdGF0czsKIAlIb3N0UnhEZXNjIHJ4Zmlkc1tNUElfTUFYX0ZJRFNdOyAvLyByeC90eC9jb25maWcgTVBJMzUwIGRlc2NyaXB0b3JzCkBAIC0xMjcxLDcgKzEyNzIsOCBAQAogCiBzdGF0aWMgaW50IFJ4U2VxVmFsaWQgKHN0cnVjdCBhaXJvX2luZm8gKmFpLG1pY2NudHggKmNvbnRleHQsaW50IG1jYXN0LHUzMiBtaWNTZXEpOwogc3RhdGljIHZvaWQgTW92ZVdpbmRvdyhtaWNjbnR4ICpjb250ZXh0LCB1MzIgbWljU2VxKTsKLXN0YXRpYyB2b2lkIGVtbWgzMl9zZXRzZWVkKGVtbWgzMl9jb250ZXh0ICpjb250ZXh0LCB1OCAqcGtleSwgaW50IGtleWxlbiwgc3RydWN0IGNyeXB0b190Zm0gKik7CitzdGF0aWMgdm9pZCBlbW1oMzJfc2V0c2VlZChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggKnBrZXksIGludCBrZXlsZW4sCisJCQkgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKTsKIHN0YXRpYyB2b2lkIGVtbWgzMl9pbml0KGVtbWgzMl9jb250ZXh0ICpjb250ZXh0KTsKIHN0YXRpYyB2b2lkIGVtbWgzMl91cGRhdGUoZW1taDMyX2NvbnRleHQgKmNvbnRleHQsIHU4ICpwT2N0ZXRzLCBpbnQgbGVuKTsKIHN0YXRpYyB2b2lkIGVtbWgzMl9maW5hbChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggZGlnZXN0WzRdKTsKQEAgLTEzMzksMTAgKzEzNDEsMTEgQEAKIAlpbnQgaTsKIAogCWlmIChhaS0+dGZtID09IE5VTEwpCi0JICAgICAgICBhaS0+dGZtID0gY3J5cHRvX2FsbG9jX3RmbSgiYWVzIiwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKTsKKwkgICAgICAgIGFpLT50Zm0gPSBjcnlwdG9fYWxsb2NfY2lwaGVyKCJhZXMiLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKIAotICAgICAgICBpZiAoYWktPnRmbSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChJU19FUlIoYWktPnRmbSkpIHsKICAgICAgICAgICAgICAgICBhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciBBRVMiKTsKKyAgICAgICAgICAgICAgICBhaS0+dGZtID0gTlVMTDsKICAgICAgICAgICAgICAgICByZXR1cm4gRVJST1I7CiAgICAgICAgIH0KIApAQCAtMTYwOCw3ICsxNjExLDggQEAKIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGFlc19jb3VudGVyWzE2XTsKIAogLyogZXhwYW5kIHRoZSBrZXkgdG8gZmlsbCB0aGUgTU1IIGNvZWZmaWNpZW50IGFycmF5ICovCi1zdGF0aWMgdm9pZCBlbW1oMzJfc2V0c2VlZChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggKnBrZXksIGludCBrZXlsZW4sIHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCitzdGF0aWMgdm9pZCBlbW1oMzJfc2V0c2VlZChlbW1oMzJfY29udGV4dCAqY29udGV4dCwgdTggKnBrZXksIGludCBrZXlsZW4sCisJCQkgICBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQogewogICAvKiB0YWtlIHRoZSBrZXlpbmcgbWF0ZXJpYWwsIGV4cGFuZCBpZiBuZWNlc3NhcnksIHRydW5jYXRlIGF0IDE2LWJ5dGVzICovCiAgIC8qIHJ1biB0aHJvdWdoIEFFUyBjb3VudGVyIG1vZGUgdG8gZ2VuZXJhdGUgY29udGV4dC0+Y29lZmZbXSAqLwpAQCAtMTYxNiw3ICsxNjIwLDYgQEAKIAlpbnQgaSxqOwogCXUzMiBjb3VudGVyOwogCXU4ICpjaXBoZXIsIHBsYWluWzE2XTsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CiAKIAljcnlwdG9fY2lwaGVyX3NldGtleSh0Zm0sIHBrZXksIDE2KTsKIAljb3VudGVyID0gMDsKQEAgLTE2MjcsOSArMTYzMCw4IEBACiAJCWFlc19jb3VudGVyWzEyXSA9ICh1OCkoY291bnRlciA+PiAyNCk7CiAJCWNvdW50ZXIrKzsKIAkJbWVtY3B5IChwbGFpbiwgYWVzX2NvdW50ZXIsIDE2KTsKLQkJc2dfc2V0X2J1ZihzZywgcGxhaW4sIDE2KTsKLQkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgc2csIHNnLCAxNik7Ci0JCWNpcGhlciA9IGttYXAoc2ctPnBhZ2UpICsgc2ctPm9mZnNldDsKKwkJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIHBsYWluLCBwbGFpbik7CisJCWNpcGhlciA9IHBsYWluOwogCQlmb3IgKGo9MDsgKGo8MTYpICYmIChpPCAoc2l6ZW9mKGNvbnRleHQtPmNvZWZmKS9zaXplb2YoY29udGV4dC0+Y29lZmZbMF0pKSk7ICkgewogCQkJY29udGV4dC0+Y29lZmZbaSsrXSA9IG50b2hsKCoodTMyICopJmNpcGhlcltqXSk7CiAJCQlqICs9IDQ7CkBAIC0xNzMzLDEyICsxNzM1LDEyIEBACiAJCWNtZC5jbWQ9Q01EX0xJU1RCU1M7CiAJCWlmIChkb3duX2ludGVycnVwdGlibGUoJmFpLT5zZW0pKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwkJYWktPmxpc3RfYnNzX3Rhc2sgPSBjdXJyZW50OwogCQlpc3N1ZWNvbW1hbmQoYWksICZjbWQsICZyc3ApOwogCQl1cCgmYWktPnNlbSk7CiAJCS8qIExldCB0aGUgY29tbWFuZCB0YWtlIGVmZmVjdCAqLwotCQlhaS0+dGFzayA9IGN1cnJlbnQ7Ci0JCXNzbGVlcCgzKTsKLQkJYWktPnRhc2sgPSBOVUxMOworCQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZSgzICogSFopOworCQlhaS0+bGlzdF9ic3NfdGFzayA9IE5VTEw7CiAJfQogCXJjID0gUEM0NTAwX3JlYWRyaWQoYWksIGZpcnN0ID8gYWktPmJzc0xpc3RGaXJzdCA6IGFpLT5ic3NMaXN0TmV4dCwKIAkJCSAgICBsaXN0LCBhaS0+YnNzTGlzdFJpZExlbiwgMSk7CkBAIC0yNDAwLDggKzI0MDIsNyBAQAogCQljbGVhcl9iaXQoRkxBR19SRUdJU1RFUkVELCAmYWktPmZsYWdzKTsKIAl9CiAJc2V0X2JpdChKT0JfRElFLCAmYWktPmpvYnMpOwotCWtpbGxfcHJvYyhhaS0+dGhyX3BpZCwgU0lHVEVSTSwgMSk7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmYWktPnRocl9leGl0ZWQpOworCWt0aHJlYWRfc3RvcChhaS0+YWlyb190aHJlYWRfdGFzayk7CiAKIAkvKgogCSAqIENsZWFuIG91dCB0eCBxdWV1ZQpAQCAtMjQzMiw3ICsyNDMzLDcgQEAKIAkJCQlhaS0+c2hhcmVkLCBhaS0+c2hhcmVkX2RtYSk7CiAJCX0KICAgICAgICAgfQotCWNyeXB0b19mcmVlX3RmbShhaS0+dGZtKTsKKwljcnlwdG9fZnJlZV9jaXBoZXIoYWktPnRmbSk7CiAJZGVsX2Fpcm9fZGV2KCBkZXYgKTsKIAlmcmVlX25ldGRldiggZGV2ICk7CiB9CkBAIC0yODExLDkgKzI4MTIsOCBAQAogCWFpLT5jb25maWcubGVuID0gMDsKIAlhaS0+cGNpID0gcGNpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZhaS0+dGhyX3dhaXQpOwotCWluaXRfY29tcGxldGlvbiAoJmFpLT50aHJfZXhpdGVkKTsKLQlhaS0+dGhyX3BpZCA9IGtlcm5lbF90aHJlYWQoYWlyb190aHJlYWQsIGRldiwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyk7Ci0JaWYgKGFpLT50aHJfcGlkIDwgMCkKKwlhaS0+YWlyb190aHJlYWRfdGFzayA9IGt0aHJlYWRfcnVuKGFpcm9fdGhyZWFkLCBkZXYsIGRldi0+bmFtZSk7CisJaWYgKElTX0VSUihhaS0+YWlyb190aHJlYWRfdGFzaykpCiAJCWdvdG8gZXJyX291dF9mcmVlOwogCWFpLT50Zm0gPSBOVUxMOwogCXJjID0gYWRkX2Fpcm9fZGV2KCBkZXYgKTsKQEAgLTI5MzAsOCArMjkzMCw3IEBACiAJZGVsX2Fpcm9fZGV2KGRldik7CiBlcnJfb3V0X3RocjoKIAlzZXRfYml0KEpPQl9ESUUsICZhaS0+am9icyk7Ci0Ja2lsbF9wcm9jKGFpLT50aHJfcGlkLCBTSUdURVJNLCAxKTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhaS0+dGhyX2V4aXRlZCk7CisJa3RocmVhZF9zdG9wKGFpLT5haXJvX3RocmVhZF90YXNrKTsKIGVycl9vdXRfZnJlZToKIAlmcmVlX25ldGRldihkZXYpOwogCXJldHVybiBOVUxMOwpAQCAtMzA2MywxMyArMzA2Miw3IEBACiAJc3RydWN0IGFpcm9faW5mbyAqYWkgPSBkZXYtPnByaXY7CiAJaW50IGxvY2tlZDsKIAkKLQlkYWVtb25pemUoIiVzIiwgZGV2LT5uYW1lKTsKLQlhbGxvd19zaWduYWwoU0lHVEVSTSk7Ci0KIAl3aGlsZSgxKSB7Ci0JCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCWZsdXNoX3NpZ25hbHMoY3VycmVudCk7Ci0KIAkJLyogbWFrZSBzd3N1c3AgaGFwcHkgd2l0aCBvdXIgdGhyZWFkICovCiAJCXRyeV90b19mcmVlemUoKTsKIApAQCAtMzA5Nyw3ICszMDkwLDcgQEAKIAkJCQkJCXNldF9iaXQoSk9CX0FVVE9XRVAsICZhaS0+am9icyk7CiAJCQkJCQlicmVhazsKIAkJCQkJfQotCQkJCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiAJCQkJCQl1bnNpZ25lZCBsb25nIHdha2VfYXQ7CiAJCQkJCQlpZiAoIWFpLT5leHBpcmVzIHx8ICFhaS0+c2Nhbl90aW1lb3V0KSB7CiAJCQkJCQkJd2FrZV9hdCA9IG1heChhaS0+ZXhwaXJlcywKQEAgLTMxMDksNyArMzEwMiw3IEBACiAJCQkJCQlzY2hlZHVsZV90aW1lb3V0KHdha2VfYXQgLSBqaWZmaWVzKTsKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQl9Ci0JCQkJfSBlbHNlIGlmICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKKwkJCQl9IGVsc2UgaWYgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHsKIAkJCQkJc2NoZWR1bGUoKTsKIAkJCQkJY29udGludWU7CiAJCQkJfQpAQCAtMzE1NCw3ICszMTQ3LDggQEAKIAkJZWxzZSAgLyogU2hvdWxkbid0IGdldCBoZXJlLCBidXQgd2UgbWFrZSBzdXJlIHRvIHVubG9jayAqLwogCQkJdXAoJmFpLT5zZW0pOwogCX0KLQljb21wbGV0ZV9hbmRfZXhpdCAoJmFpLT50aHJfZXhpdGVkLCAwKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgYWlyb19pbnRlcnJ1cHQgKCBpbnQgaXJxLCB2b2lkKiBkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7CkBAIC0zMjM1LDggKzMyMjksOCBAQAogCQkJaWYobmV3U3RhdHVzID09IEFTU09DSUFURUQgfHwgbmV3U3RhdHVzID09IFJFQVNTT0NJQVRFRCkgewogCQkJCWlmIChhdXRvX3dlcCkKIAkJCQkJYXByaXYtPmV4cGlyZXMgPSAwOwotCQkJCWlmIChhcHJpdi0+dGFzaykKLQkJCQkJd2FrZV91cF9wcm9jZXNzIChhcHJpdi0+dGFzayk7CisJCQkJaWYgKGFwcml2LT5saXN0X2Jzc190YXNrKQorCQkJCQl3YWtlX3VwX3Byb2Nlc3MoYXByaXYtPmxpc3RfYnNzX3Rhc2spOwogCQkJCXNldF9iaXQoRkxBR19VUERBVEVfVU5JLCAmYXByaXYtPmZsYWdzKTsKIAkJCQlzZXRfYml0KEZMQUdfVVBEQVRFX01VTFRJLCAmYXByaXYtPmZsYWdzKTsKIApAQCAtMzk1MCwxMyArMzk0NCwxMSBAQAogCXBSc3AtPnJzcDAgPSBJTjQ1MDAoYWksIFJFU1AwKTsKIAlwUnNwLT5yc3AxID0gSU40NTAwKGFpLCBSRVNQMSk7CiAJcFJzcC0+cnNwMiA9IElONDUwMChhaSwgUkVTUDIpOwotCWlmICgocFJzcC0+c3RhdHVzICYgMHhmZjAwKSE9MCAmJiBwQ21kLT5jbWQgIT0gQ01EX1NPRlRSRVNFVCkgewotCQlhaXJvX3ByaW50X2VycihhaS0+ZGV2LT5uYW1lLCAiY21kPSAleFxuIiwgcENtZC0+Y21kKTsKLQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgInN0YXR1cz0gJXhcbiIsIHBSc3AtPnN0YXR1cyk7Ci0JCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJSc3AwPSAleFxuIiwgcFJzcC0+cnNwMCk7Ci0JCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJSc3AxPSAleFxuIiwgcFJzcC0+cnNwMSk7Ci0JCWFpcm9fcHJpbnRfZXJyKGFpLT5kZXYtPm5hbWUsICJSc3AyPSAleFxuIiwgcFJzcC0+cnNwMik7Ci0JfQorCWlmICgocFJzcC0+c3RhdHVzICYgMHhmZjAwKSE9MCAmJiBwQ21kLT5jbWQgIT0gQ01EX1NPRlRSRVNFVCkKKwkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwKKwkJCSJjbWQ6JXggc3RhdHVzOiV4IHJzcDA6JXggcnNwMToleCByc3AyOiV4IiwKKwkJCXBDbWQtPmNtZCwgcFJzcC0+c3RhdHVzLCBwUnNwLT5yc3AwLCBwUnNwLT5yc3AxLAorCQkJcFJzcC0+cnNwMik7CiAKIAkvLyBjbGVhciBzdHVjayBjb21tYW5kIGJ1c3kgaWYgbmVjZXNzYXJ5CiAJaWYgKElONDUwMChhaSwgQ09NTUFORCkgJiBDT01NQU5EX0JVU1kpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKaW5kZXggZDQyNWMzYy4uM2JmYTc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWxfcGNpLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgYXRtZWxfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZhdG1lbF9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZhdG1lbF9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXRtZWxfY2xlYW51cF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKaW5kZXggMTdhNTY4Mi4uNmQ0ZWEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKQEAgLTMzLDE0ICszMywxOCBAQAogI2RlZmluZSBCQ000M3h4X1BDSUNGR19JQ1IJCTB4OTQKIAogLyogTU1JTyBvZmZzZXRzICovCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUExX1JFQVNPTgkweDIwCi0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUExX0lSUV9NQVNLCTB4MjQKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTJfUkVBU09OCTB4MjgKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTJfSVJRX01BU0sJMHgyQwotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BM19SRUFTT04JMHgzMAotI2RlZmluZSBCQ000M3h4X01NSU9fRE1BM19JUlFfTUFTSwkweDM0Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE0X1JFQVNPTgkweDM4Ci0jZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE0X0lSUV9NQVNLCTB4M0MKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTBfUkVBU09OCTB4MjAKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTBfSVJRX01BU0sJMHgyNAorI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMV9SRUFTT04JMHgyOAorI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMV9JUlFfTUFTSwkweDJDCisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEyX1JFQVNPTgkweDMwCisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEyX0lSUV9NQVNLCTB4MzQKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTNfUkVBU09OCTB4MzgKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTNfSVJRX01BU0sJMHgzQworI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNF9SRUFTT04JMHg0MAorI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNF9JUlFfTUFTSwkweDQ0CisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE1X1JFQVNPTgkweDQ4CisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE1X0lSUV9NQVNLCTB4NEMKICNkZWZpbmUgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRAkweDEyMAogI2RlZmluZSBCQ000M3h4X01NSU9fU1RBVFVTMl9CSVRGSUVMRAkweDEyNAogI2RlZmluZSBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04JMHgxMjgKQEAgLTU2LDE0ICs2MCwyNyBAQAogI2RlZmluZSBCQ000M3h4X01NSU9fWE1JVFNUQVRfMQkJMHgxNzQKICNkZWZpbmUgQkNNNDN4eF9NTUlPX1JFVjNQTFVTX1RTRl9MT1cJMHgxODAgLyogY29yZSByZXYgPj0gMyBvbmx5ICovCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19SRVYzUExVU19UU0ZfSElHSAkweDE4NCAvKiBjb3JlIHJldiA+PSAzIG9ubHkgKi8KLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTFfQkFTRQkJMHgyMDAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTJfQkFTRQkJMHgyMjAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTNfQkFTRQkJMHgyNDAKLSNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTRfQkFTRQkJMHgyNjAKKworLyogMzItYml0IERNQSAqLworI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMzJfQkFTRTAJMHgyMDAKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0UxCTB4MjIwCisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEzMl9CQVNFMgkweDI0MAorI2RlZmluZSBCQ000M3h4X01NSU9fRE1BMzJfQkFTRTMJMHgyNjAKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0U0CTB4MjgwCisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUEzMl9CQVNFNQkweDJBMAorLyogNjQtYml0IERNQSAqLworI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNjRfQkFTRTAJMHgyMDAKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0UxCTB4MjQwCisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE2NF9CQVNFMgkweDI4MAorI2RlZmluZSBCQ000M3h4X01NSU9fRE1BNjRfQkFTRTMJMHgyQzAKKyNkZWZpbmUgQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0U0CTB4MzAwCisjZGVmaW5lIEJDTTQzeHhfTU1JT19ETUE2NF9CQVNFNQkweDM0MAorLyogUElPICovCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19QSU8xX0JBU0UJCTB4MzAwCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19QSU8yX0JBU0UJCTB4MzEwCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19QSU8zX0JBU0UJCTB4MzIwCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19QSU80X0JBU0UJCTB4MzMwCisKICNkZWZpbmUgQkNNNDN4eF9NTUlPX1BIWV9WRVIJCTB4M0UwCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19QSFlfUkFESU8JCTB4M0UyCiAjZGVmaW5lIEJDTTQzeHhfTU1JT19BTlRFTk5BCQkweDNFOApAQCAtMjMzLDggKzI1MCwxNCBAQAogI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUxPV19GT1JDRV9HQVRFX0NMT0NLCTB4MjAwMDAKIAogLyogc2J0bXN0YXRlaGlnaCBzdGF0ZSBmbGFncyAqLwotI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUhJR0hfU0VSUk9SCQkweDEKLSNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0JVU1kJCTB4NAorI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUhJR0hfU0VSUk9SCQkweDAwMDAwMDAxCisjZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9CVVNZCQkweDAwMDAwMDA0CisjZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9USU1FT1VUCQkweDAwMDAwMDIwCisjZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9DT1JFRkxBR1MJCTB4MUZGRjAwMDAKKyNkZWZpbmUgQkNNNDN4eF9TQlRNU1RBVEVISUdIX0RNQTY0QklUCQkweDEwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9HQVRFRENMSwkJMHgyMDAwMDAwMAorI2RlZmluZSBCQ000M3h4X1NCVE1TVEFURUhJR0hfQklTVEZBSUxFRAkweDQwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfU0JUTVNUQVRFSElHSF9CSVNUQ09NUExFVEUJMHg4MDAwMDAwMAogCiAvKiBzYmltc3RhdGUgZmxhZ3MgKi8KICNkZWZpbmUgQkNNNDN4eF9TQklNU1RBVEVfSUJfRVJST1IJCTB4MjAwMDAKQEAgLTI4Myw2ICszMDYsMTMgQEAKICNkZWZpbmUgQkNNNDN4eF9TQkZfVElNRV9VUERBVEUJCTB4MTAwMDAwMDAKICNkZWZpbmUgQkNNNDN4eF9TQkZfODAwMDAwMDAJCTB4ODAwMDAwMDAgLypGSVhNRTogZml4IG5hbWUqLwogCisvKiBNaWNyb2NvZGUgKi8KKyNkZWZpbmUgQkNNNDN4eF9VQ09ERV9SRVZJU0lPTgkJMHgwMDAwCisjZGVmaW5lIEJDTTQzeHhfVUNPREVfUEFUQ0hMRVZFTAkweDAwMDIKKyNkZWZpbmUgQkNNNDN4eF9VQ09ERV9EQVRFCQkweDAwMDQKKyNkZWZpbmUgQkNNNDN4eF9VQ09ERV9USU1FCQkweDAwMDYKKyNkZWZpbmUgQkNNNDN4eF9VQ09ERV9TVEFUVVMJCTB4MDA0MAorCiAvKiBNaWNyb2NvZGVGbGFnc0JpdGZpZWxkIChhZGRyICsgbG8td29yZCB2YWx1ZXM/KSovCiAjZGVmaW5lIEJDTTQzeHhfVUNPREVGTEFHU19PRkZTRVQJMHgwMDVFCiAKQEAgLTUwNCw2ICs1MzQsMTIgQEAKIAkgKiBUaGlzIGxvY2sgaXMgb25seSB1c2VkIGJ5IGJjbTQzeHhfcGh5X3t1bn1sb2NrKCkKIAkgKi8KIAlzcGlubG9ja190IGxvY2s7CisKKwkvKiBGaXJtd2FyZS4gKi8KKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGNtOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdHZhbHMwOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdHZhbHMxOwogfTsKIAogCkBAIC01NjgsOCArNjA0LDExIEBACiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqdHhfcmluZzE7CiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqdHhfcmluZzI7CiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqdHhfcmluZzM7CisJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqdHhfcmluZzQ7CisJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqdHhfcmluZzU7CisKIAlzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyeF9yaW5nMDsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyeF9yaW5nMTsgLyogb25seSBhdmFpbGFibGUgb24gY29yZS5yZXYgPCA1ICovCisJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcnhfcmluZzM7IC8qIG9ubHkgYXZhaWxhYmxlIG9uIGNvcmUucmV2IDwgNSAqLwogfTsKIAogLyogRGF0YSBzdHJ1Y3R1cmVzIGZvciBQSU8gdHJhbnNtaXNzaW9uLCBwZXIgODAyMTEgY29yZS4gKi8KQEAgLTU5MywxMiArNjMyLDE0IEBACiAJdTggYXZhaWxhYmxlOjEsCiAJICAgZW5hYmxlZDoxLAogCSAgIGluaXRpYWxpemVkOjE7Ci0JLyoqIGNvcmVfaWQgSUQgbnVtYmVyICovCi0JdTE2IGlkOwogCS8qKiBjb3JlX3JldiByZXZpc2lvbiBudW1iZXIgKi8KIAl1OCByZXY7CiAJLyoqIEluZGV4IG51bWJlciBmb3IgX3N3aXRjaF9jb3JlKCkgKi8KIAl1OCBpbmRleDsKKwkvKiogY29yZV9pZCBJRCBudW1iZXIgKi8KKwl1MTYgaWQ7CisJLyoqIENvcmUtc3BlY2lmaWMgZGF0YS4gKi8KKwl2b2lkICpwcml2OwogfTsKIAogLyogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBmb3IgZWFjaCA4MDIxMSBjb3JlLiAqLwpAQCAtNjQ3LDcgKzY4OCwyMyBAQAogCUJDTTQzeHhfU1RBVF9SRVNUQVJUSU5HLAkvKiBjb250cm9sbGVyX3Jlc3RhcnQoKSBjYWxsZWQuICovCiB9OwogI2RlZmluZSBiY200M3h4X3N0YXR1cyhiY20pCQlhdG9taWNfcmVhZCgmKGJjbSktPmluaXRfc3RhdHVzKQotI2RlZmluZSBiY200M3h4X3NldF9zdGF0dXMoYmNtLCBzdGF0KQlhdG9taWNfc2V0KCYoYmNtKS0+aW5pdF9zdGF0dXMsIChzdGF0KSkKKyNkZWZpbmUgYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgc3RhdCkJZG8gewkJCVwKKwkJYXRvbWljX3NldCgmKGJjbSktPmluaXRfc3RhdHVzLCAoc3RhdCkpOwlcCisJCXNtcF93bWIoKTsJCQkJCVwKKwkJCQkJfSB3aGlsZSAoMCkKKworLyogICAgKioqIFRIRU9SWSBPRiBMT0NLSU5HICoqKgorICoKKyAqIFdlIGhhdmUgdHdvIGRpZmZlcmVudCBsb2NrcyBpbiB0aGUgYmNtNDN4eCBkcml2ZXIuCisgKiA9PiBiY20tPm11dGV4OiAgICBHZW5lcmFsIHNsZWVwaW5nIG11dGV4LiBQcm90ZWN0cyBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlCisgKiAgICAgICAgICAgICAgICAgICBhbmQgdGhlIGRldmljZSByZWdpc3RlcnMuIFRoaXMgbXV0ZXggZG9lcyBfbm90XyBwcm90ZWN0CisgKiAgICAgICAgICAgICAgICAgICBhZ2FpbnN0IGNvbmN1cnJlbmN5IGZyb20gdGhlIElSUSBoYW5kbGVyLgorICogPT4gYmNtLT5pcnFfbG9jazogSVJRIHNwaW5sb2NrLiBQcm90ZWN0cyBhZ2FpbnN0IElSUSBoYW5kbGVyIGNvbmN1cnJlbmN5LgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQsIGlmIHlvdSBvbmx5IHRha2UgdGhlIGlycV9sb2NrLCB5b3UgYXJlIG5vdCBwcm90ZWN0ZWQKKyAqIGFnYWluc3QgY29uY3VycmVuY3kgZnJvbSB0aGUgcGVyaW9kaWMgd29yayBoYW5kbGVycy4KKyAqIE1vc3QgdGltZXMgeW91IHdhbnQgdG8gdGFrZSBfYm90aF8gbG9ja3MuCisgKi8KIAogc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSB7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWU7CkBAIC02NTksNyArNzE2LDYgQEAKIAogCXZvaWQgX19pb21lbSAqbW1pb19hZGRyOwogCi0JLyogTG9ja2luZywgc2VlICJ0aGVvcnkgb2YgbG9ja2luZyIgdGV4dCBiZWxvdy4gKi8KIAlzcGlubG9ja190IGlycV9sb2NrOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIApAQCAtNjkxLDYgKzc0Nyw3IEBACiAJc3RydWN0IGJjbTQzeHhfc3Byb21pbmZvIHNwcm9tOwogI2RlZmluZSBCQ000M3h4X05SX0xFRFMJCTQKIAlzdHJ1Y3QgYmNtNDN4eF9sZWQgbGVkc1tCQ000M3h4X05SX0xFRFNdOworCXNwaW5sb2NrX3QgbGVkc19sb2NrOwogCiAJLyogVGhlIGN1cnJlbnRseSBhY3RpdmUgY29yZS4gKi8KIAlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqY3VycmVudF9jb3JlOwpAQCAtNzA4LDEwICs3NjUsNiBAQAogCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvIGNvcmVfODAyMTFbIEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTIF07CiAJLyogQWRkaXRpb25hbCBpbmZvcm1hdGlvbiwgc3BlY2lmaWMgdG8gdGhlIDgwMjExIGNvcmVzLiAqLwogCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvXzgwMjExIGNvcmVfODAyMTFfZXh0WyBCQ000M3h4X01BWF84MDIxMV9DT1JFUyBdOwotCS8qIEluZGV4IG9mIHRoZSBjdXJyZW50IDgwMjExIGNvcmUuIElmIGN1cnJlbnRfY29yZSBpcyBub3QKLQkgKiBhbiA4MDIxMSBjb3JlLCB0aGlzIGlzIC0xLgotCSAqLwotCWludCBjdXJyZW50XzgwMjExX2NvcmVfaWR4OwogCS8qIE51bWJlciBvZiBhdmFpbGFibGUgODAyMTEgY29yZXMuICovCiAJaW50IG5yXzgwMjExX2F2YWlsYWJsZTsKIApAQCAtNzE5LDExICs3NzIsMTMgQEAKIAogCS8qIFJlYXNvbiBjb2RlIG9mIHRoZSBsYXN0IGludGVycnVwdC4gKi8KIAl1MzIgaXJxX3JlYXNvbjsKLQl1MzIgZG1hX3JlYXNvbls0XTsKKwl1MzIgZG1hX3JlYXNvbls2XTsKIAkvKiBzYXZlZCBpcnEgZW5hYmxlL2Rpc2FibGUgc3RhdGUgYml0ZmllbGQuICovCiAJdTMyIGlycV9zYXZlZHN0YXRlOwogCS8qIExpbmsgUXVhbGl0eSBjYWxjdWxhdGlvbiBjb250ZXh0LiAqLwogCXN0cnVjdCBiY200M3h4X25vaXNlX2NhbGN1bGF0aW9uIG5vaXNlY2FsYzsKKwkvKiBpZiA+IDAgTUFDIGlzIHN1c3BlbmRlZC4gaWYgPT0gMCBNQUMgaXMgZW5hYmxlZC4gKi8KKwlpbnQgbWFjX3N1c3BlbmRlZDsKIAogCS8qIFRocmVzaG9sZCB2YWx1ZXMuICovCiAJLy9UT0RPOiBUaGUgUlRTIHRociBoYXMgdG8gYmUgX3VzZWRfLiBDdXJyZW50bHksIGl0IGlzIG9ubHkgc2V0IHZpYSBXWC4KQEAgLTc0NiwxMiArODAxLDYgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9rZXkga2V5WzU0XTsKIAl1OCBkZWZhdWx0X2tleV9pZHg7CiAKLQkvKiBGaXJtd2FyZS4gKi8KLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGNtOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdHZhbHMwOwotCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqaW5pdHZhbHMxOwotCiAJLyogUmFuZG9tIE51bWJlciBHZW5lcmF0b3IuICovCiAJc3RydWN0IGh3cm5nIHJuZzsKIAljaGFyIHJuZ19uYW1lWzIwICsgMV07CkBAIC03NjMsNTUgKzgxMiw2IEBACiB9OwogCiAKLS8qICAgICoqKiBUSEVPUlkgT0YgTE9DS0lORyAqKioKLSAqCi0gKiBXZSBoYXZlIHR3byBkaWZmZXJlbnQgbG9ja3MgaW4gdGhlIGJjbTQzeHggZHJpdmVyLgotICogPT4gYmNtLT5tdXRleDogICAgR2VuZXJhbCBzbGVlcGluZyBtdXRleC4gUHJvdGVjdHMgc3RydWN0IGJjbTQzeHhfcHJpdmF0ZQotICogICAgICAgICAgICAgICAgICAgYW5kIHRoZSBkZXZpY2UgcmVnaXN0ZXJzLgotICogPT4gYmNtLT5pcnFfbG9jazogSVJRIHNwaW5sb2NrLiBQcm90ZWN0cyBhZ2FpbnN0IElSUSBoYW5kbGVyIGNvbmN1cnJlbmN5LgotICoKLSAqIFdlIGhhdmUgdGhyZWUgdHlwZXMgb2YgaGVscGVyIGZ1bmN0aW9uIHBhaXJzIHRvIHV0aWxpemUgdGhlc2UgbG9ja3MuCi0gKiAgICAgKEFsd2F5cyB1c2UgdGhlIGhlbHBlciBmdW5jdGlvbnMuKQotICogMSkgYmNtNDN4eF97dW59bG9ja19ub2lycSgpOgotICogICAgIFRha2VzIGJjbS0+bXV0ZXguIERvZXMgX25vdF8gcHJvdGVjdCBhZ2FpbnN0IElSUSBjb25jdXJyZW5jeSwKLSAqICAgICBzbyBpdCBpcyBhbG1vc3QgYWx3YXlzIHVuc2FmZSwgaWYgZGV2aWNlIElSUXMgYXJlIGVuYWJsZWQuCi0gKiAgICAgU28gb25seSB1c2UgdGhpcywgaWYgZGV2aWNlIElSUXMgYXJlIG1hc2tlZC4KLSAqICAgICBMb2NraW5nIG1heSBzbGVlcC4KLSAqICAgICBZb3UgY2FuIHNsZWVwIHdpdGhpbiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqIDIpIGJjbTQzeHhfe3VufWxvY2tfaXJxb25seSgpOgotICogICAgIFRha2VzIGJjbS0+aXJxX2xvY2suIERvZXMgX25vdF8gcHJvdGVjdCBhZ2FpbnN0Ci0gKiAgICAgYmNtNDN4eF9sb2NrX25vaXJxKCkgY3JpdGljYWwgc2VjdGlvbnMuCi0gKiAgICAgRG9lcyBvbmx5IHByb3RlY3QgYWdhaW5zdCB0aGUgSVJRIGhhbmRsZXIgcGF0aCBhbmQgb3RoZXIKLSAqICAgICBpcnFvbmx5KCkgY3JpdGljYWwgc2VjdGlvbnMuCi0gKiAgICAgTG9ja2luZyBkb2VzIG5vdCBzbGVlcC4KLSAqICAgICBZb3UgbXVzdCBub3Qgc2xlZXAgd2l0aGluIHRoZSBjcml0aWNhbCBzZWN0aW9uLgotICogMykgYmNtNDN4eF97dW59bG9ja19pcnFzYWZlKCk6Ci0gKiAgICAgVGhpcyBpcyB0aGUgY3VtbXVsYXRpdmUgbG9jayBhbmQgdGFrZXMgYm90aCwgbXV0ZXggYW5kIGlycV9sb2NrLgotICogICAgIFByb3RlY3RzIGFnYWluc3Qgbm9pcnEoKSBhbmQgaXJxb25seSgpIGNyaXRpY2FsIHNlY3Rpb25zIChhbmQKLSAqICAgICB0aGUgSVJRIGhhbmRsZXIgcGF0aCkuCi0gKiAgICAgTG9ja2luZyBtYXkgc2xlZXAuCi0gKiAgICAgWW91IG11c3Qgbm90IHNsZWVwIHdpdGhpbiB0aGUgY3JpdGljYWwgc2VjdGlvbi4KLSAqLwotCi0vKiBMb2NrIHR5cGUgMSAqLwotI2RlZmluZSBiY200M3h4X2xvY2tfbm9pcnEoYmNtKQkJbXV0ZXhfbG9jaygmKGJjbSktPm11dGV4KQotI2RlZmluZSBiY200M3h4X3VubG9ja19ub2lycShiY20pCW11dGV4X3VubG9jaygmKGJjbSktPm11dGV4KQotLyogTG9jayB0eXBlIDIgKi8KLSNkZWZpbmUgYmNtNDN4eF9sb2NrX2lycW9ubHkoYmNtLCBmbGFncykJXAotCXNwaW5fbG9ja19pcnFzYXZlKCYoYmNtKS0+aXJxX2xvY2ssIGZsYWdzKQotI2RlZmluZSBiY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpCVwKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoYmNtKS0+aXJxX2xvY2ssIGZsYWdzKQotLyogTG9jayB0eXBlIDMgKi8KLSNkZWZpbmUgYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncykgZG8gewlcCi0JYmNtNDN4eF9sb2NrX25vaXJxKGJjbSk7CQlcCi0JYmNtNDN4eF9sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7CVwKLQkJfSB3aGlsZSAoMCkKLSNkZWZpbmUgYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKSBkbyB7CVwKLQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOwlcCi0JYmNtNDN4eF91bmxvY2tfbm9pcnEoYmNtKTsJCVwKLQkJfSB3aGlsZSAoMCkKLQotCiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICogYmNtNDN4eF9wcml2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC04NjMsMzQgKzg2MywzMyBAQAogICogYW55IG9mIHRoZXNlIGZ1bmN0aW9ucy4KICAqLwogc3RhdGljIGlubGluZQorc3RydWN0IGJjbTQzeHhfY29yZWluZm9fODAyMTEgKgorYmNtNDN4eF9jdXJyZW50XzgwMjExX3ByaXYoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQoreworCWFzc2VydChiY20tPmN1cnJlbnRfY29yZS0+aWQgPT0gQkNNNDN4eF9DT1JFSURfODAyMTEpOworCXJldHVybiBiY20tPmN1cnJlbnRfY29yZS0+cHJpdjsKK30KK3N0YXRpYyBpbmxpbmUKIHN0cnVjdCBiY200M3h4X3BpbyAqIGJjbTQzeHhfY3VycmVudF9waW8oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCWFzc2VydChiY200M3h4X3VzaW5nX3BpbyhiY20pKTsKLQlhc3NlcnQoYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4ID49IDApOwotCWFzc2VydChiY20tPmN1cnJlbnRfODAyMTFfY29yZV9pZHggPCBCQ000M3h4X01BWF84MDIxMV9DT1JFUyk7Ci0JcmV0dXJuICYoYmNtLT5jb3JlXzgwMjExX2V4dFtiY20tPmN1cnJlbnRfODAyMTFfY29yZV9pZHhdLnBpbyk7CisJcmV0dXJuICYoYmNtNDN4eF9jdXJyZW50XzgwMjExX3ByaXYoYmNtKS0+cGlvKTsKIH0KIHN0YXRpYyBpbmxpbmUKIHN0cnVjdCBiY200M3h4X2RtYSAqIGJjbTQzeHhfY3VycmVudF9kbWEoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCWFzc2VydCghYmNtNDN4eF91c2luZ19waW8oYmNtKSk7Ci0JYXNzZXJ0KGJjbS0+Y3VycmVudF84MDIxMV9jb3JlX2lkeCA+PSAwKTsKLQlhc3NlcnQoYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4IDwgQkNNNDN4eF9NQVhfODAyMTFfQ09SRVMpOwotCXJldHVybiAmKGJjbS0+Y29yZV84MDIxMV9leHRbYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4XS5kbWEpOworCXJldHVybiAmKGJjbTQzeHhfY3VycmVudF84MDIxMV9wcml2KGJjbSktPmRtYSk7CiB9CiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICogYmNtNDN4eF9jdXJyZW50X3BoeShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7Ci0JYXNzZXJ0KGJjbS0+Y3VycmVudF84MDIxMV9jb3JlX2lkeCA+PSAwKTsKLQlhc3NlcnQoYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4IDwgQkNNNDN4eF9NQVhfODAyMTFfQ09SRVMpOwotCXJldHVybiAmKGJjbS0+Y29yZV84MDIxMV9leHRbYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4XS5waHkpOworCXJldHVybiAmKGJjbTQzeHhfY3VycmVudF84MDIxMV9wcml2KGJjbSktPnBoeSk7CiB9CiBzdGF0aWMgaW5saW5lCiBzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKiBiY200M3h4X2N1cnJlbnRfcmFkaW8oc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewotCWFzc2VydChiY20tPmN1cnJlbnRfODAyMTFfY29yZV9pZHggPj0gMCk7Ci0JYXNzZXJ0KGJjbS0+Y3VycmVudF84MDIxMV9jb3JlX2lkeCA8IEJDTTQzeHhfTUFYXzgwMjExX0NPUkVTKTsKLQlyZXR1cm4gJihiY20tPmNvcmVfODAyMTFfZXh0W2JjbS0+Y3VycmVudF84MDIxMV9jb3JlX2lkeF0ucmFkaW8pOworCXJldHVybiAmKGJjbTQzeHhfY3VycmVudF84MDIxMV9wcml2KGJjbSktPnJhZGlvKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYwppbmRleCBjZTJlNDBiLi45MjMyNzVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKQEAgLTc3LDcgKzc3LDggQEAKIAogCWRvd24oJmJpZ19idWZmZXJfc2VtKTsKIAotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7CiAJCWZhcHBlbmQoIkJvYXJkIG5vdCBpbml0aWFsaXplZC5cbiIpOwogCQlnb3RvIG91dDsKQEAgLTEyMSw3ICsxMjIsOCBAQAogCWZhcHBlbmQoIlxuIik7CiAKIG91dDoKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCXJlcyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiAJdXAoJmJpZ19idWZmZXJfc2VtKTsKIAlyZXR1cm4gcmVzOwpAQCAtMTU5LDcgKzE2MSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRvd24oJmJpZ19idWZmZXJfc2VtKTsKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWlmIChiY200M3h4X3N0YXR1cyhiY20pICE9IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewogCQlmYXBwZW5kKCJCb2FyZCBub3QgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJZ290byBvdXQ7CkBAIC0xNjksNyArMTcyLDggQEAKIAlmYXBwZW5kKCJib2FyZGZsYWdzOiAweCUwNHhcbiIsIGJjbS0+c3Byb20uYm9hcmRmbGFncyk7CiAKIG91dDoKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCXJlcyA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CiAJdXAoJmJpZ19idWZmZXJfc2VtKTsKIAlyZXR1cm4gcmVzOwpAQCAtMTg4LDcgKzE5Miw4IEBACiAJdTY0IHRzZjsKIAogCWRvd24oJmJpZ19idWZmZXJfc2VtKTsKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWlmIChiY200M3h4X3N0YXR1cyhiY20pICE9IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewogCQlmYXBwZW5kKCJCb2FyZCBub3QgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJZ290byBvdXQ7CkBAIC0xOTksNyArMjA0LDggQEAKIAkJKHVuc2lnbmVkIGludCkodHNmICYgMHhGRkZGRkZGRlVMTCkpOwogCiBvdXQ6Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAlyZXMgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogCXVwKCZiaWdfYnVmZmVyX3NlbSk7CiAJcmV0dXJuIHJlczsKQEAgLTIyMSw3ICsyMjcsOCBAQAogCSAgICAgICAgcmVzID0gLUVGQVVMVDsKIAkJZ290byBvdXRfdXA7CiAJfQotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7CiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJkZWJ1Z2ZzOiBCb2FyZCBub3QgaW5pdGlhbGl6ZWQuXG4iKTsKIAkJcmVzID0gLUVGQVVMVDsKQEAgLTIzNyw3ICsyNDQsOCBAQAogCXJlcyA9IGJ1Zl9zaXplOwogCQogb3V0X3VubG9jazoKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogb3V0X3VwOgogCXVwKCZiaWdfYnVmZmVyX3NlbSk7CiAJcmV0dXJuIHJlczsKQEAgLTI1OCw3ICsyNjYsOCBAQAogCWludCBpLCBjbnQsIGogPSAwOwogCiAJZG93bigmYmlnX2J1ZmZlcl9zZW0pOwotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAKIAlmYXBwZW5kKCJMYXN0ICVkIGxvZ2dlZCB4bWl0c3RhdHVzIGJsb2JzIChMYXRlc3QgZmlyc3QpOlxuXG4iLAogCQlCQ000M3h4X05SX0xPR0dFRF9YTUlUU1RBVFVTKTsKQEAgLTI5NCwxNCArMzAzLDUxIEBACiAJCQlpID0gQkNNNDN4eF9OUl9MT0dHRURfWE1JVFNUQVRVUyAtIDE7CiAJfQogCi0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJcmVzID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWlmICgqcHBvcyA9PSBwb3MpIHsKIAkJLyogRG9uZS4gRHJvcCB0aGUgY29waWVkIGRhdGEuICovCiAJCWUtPnhtaXRzdGF0dXNfcHJpbnRpbmcgPSAwOwogCX0KLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOworCXVwKCZiaWdfYnVmZmVyX3NlbSk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHNzaXplX3QgcmVzdGFydF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciAqYnVmID0gcmVhbGx5X2JpZ19idWZmZXI7CisJc3NpemVfdCBidWZfc2l6ZTsKKwlzc2l6ZV90IHJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZiAocmVhbGx5X2JpZ19idWZmZXIpIC0gMSk7CisJZG93bigmYmlnX2J1ZmZlcl9zZW0pOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpIHsKKwkgICAgICAgIHJlcyA9IC1FRkFVTFQ7CisJCWdvdG8gb3V0X3VwOworCX0KKwltdXRleF9sb2NrKCYoYmNtKS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCYoYmNtKS0+aXJxX2xvY2ssIGZsYWdzKTsKKwlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSAhPSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyBQRlggImRlYnVnZnM6IEJvYXJkIG5vdCBpbml0aWFsaXplZC5cbiIpOworCQlyZXMgPSAtRUZBVUxUOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCWlmIChjb3VudCA+IDAgJiYgYnVmWzBdID09ICcxJykgeworCQliY200M3h4X2NvbnRyb2xsZXJfcmVzdGFydChiY20sICJtYW51YWxseSByZXN0YXJ0ZWQiKTsKKwkJcmVzID0gY291bnQ7CisJfSBlbHNlCisJCXJlcyA9IC1FSU5WQUw7CisKK291dF91bmxvY2s6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKGJjbSktPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCYoYmNtKS0+bXV0ZXgpOworb3V0X3VwOgogCXVwKCZiaWdfYnVmZmVyX3NlbSk7CiAJcmV0dXJuIHJlczsKIH0KQEAgLTMzOSw2ICszODUsMTEgQEAKIAkub3BlbiA9IG9wZW5fZmlsZV9nZW5lcmljLAogfTsKIAorc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVzdGFydF9mb3BzID0geworCS53cml0ZSA9IHJlc3RhcnRfd3JpdGVfZmlsZSwKKwkub3BlbiA9IG9wZW5fZmlsZV9nZW5lcmljLAorfTsKKwogCiB2b2lkIGJjbTQzeHhfZGVidWdmc19hZGRfZGV2aWNlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKQEAgLTM5MCw2ICs0NDEsMTAgQEAKIAkJCQkJCWJjbSwgJnR4c3RhdF9mb3BzKTsKIAlpZiAoIWUtPmRlbnRyeV90eHN0YXQpCiAJCXByaW50ayhLRVJOX0VSUiBQRlggImRlYnVnZnM6IGNyZWF0aW5nIFwidHhfc3RhdHVzXCIgZm9yIFwiJXNcIiBmYWlsZWQhXG4iLCBkZXZkaXIpOworCWUtPmRlbnRyeV9yZXN0YXJ0ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVzdGFydCIsIDAyMjIsIGUtPnN1YmRpciwKKwkJCQkJCWJjbSwgJnJlc3RhcnRfZm9wcyk7CisJaWYgKCFlLT5kZW50cnlfcmVzdGFydCkKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZGVidWdmczogY3JlYXRpbmcgXCJyZXN0YXJ0XCIgZm9yIFwiJXNcIiBmYWlsZWQhXG4iLCBkZXZkaXIpOwogfQogCiB2b2lkIGJjbTQzeHhfZGVidWdmc19yZW1vdmVfZGV2aWNlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKQEAgLTQwNSw2ICs0NjAsNyBAQAogCWRlYnVnZnNfcmVtb3ZlKGUtPmRlbnRyeV9kZXZpbmZvKTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5kZW50cnlfdHNmKTsKIAlkZWJ1Z2ZzX3JlbW92ZShlLT5kZW50cnlfdHhzdGF0KTsKKwlkZWJ1Z2ZzX3JlbW92ZShlLT5kZW50cnlfcmVzdGFydCk7CiAJZGVidWdmc19yZW1vdmUoZS0+c3ViZGlyKTsKIAlrZnJlZShlLT54bWl0c3RhdHVzX2J1ZmZlcik7CiAJa2ZyZWUoZS0+eG1pdHN0YXR1c19wcmludF9idWZmZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmgKaW5kZXggNTBjZTI2N2YuLmE0MGQxYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuaApAQCAtMjAsNiArMjAsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9zcHJvbWR1bXA7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5X3RzZjsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnlfdHhzdGF0OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeV9yZXN0YXJ0OwogCiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKaW5kZXggZDAzMThlNTI1Li43NmUzYWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5jCkBAIC00LDcgKzQsNyBAQAogCiAgIERNQSByaW5nYnVmZmVyIGFuZCBkZXNjcmlwdG9yIGFsbG9jYXRpb24vbWFuYWdlbWVudAogCi0gIENvcHlyaWdodCAoYykgMjAwNSBNaWNoYWVsIEJ1ZXNjaCA8bWJ1ZXNjaEBmcmVlbmV0LmRlPgorICBDb3B5cmlnaHQgKGMpIDIwMDUsIDIwMDYgTWljaGFlbCBCdWVzY2ggPG1idWVzY2hAZnJlZW5ldC5kZT4KIAogICBTb21lIGNvZGUgaW4gdGhpcyBmaWxlIGlzIGRlcml2ZWQgZnJvbSB0aGUgYjQ0LmMgZHJpdmVyCiAgIENvcHlyaWdodCAoQykgMjAwMiBEYXZpZCBTLiBNaWxsZXIKQEAgLTEwOSw2ICsxMDksMzUgQEAKIAl9CiB9CiAKK3UxNiBiY200M3h4X2RtYWNvbnRyb2xsZXJfYmFzZShpbnQgZG1hNjRiaXQsIGludCBjb250cm9sbGVyX2lkeCkKK3sKKwlzdGF0aWMgY29uc3QgdTE2IG1hcDY0W10gPSB7CisJCUJDTTQzeHhfTU1JT19ETUE2NF9CQVNFMCwKKwkJQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0UxLAorCQlCQ000M3h4X01NSU9fRE1BNjRfQkFTRTIsCisJCUJDTTQzeHhfTU1JT19ETUE2NF9CQVNFMywKKwkJQkNNNDN4eF9NTUlPX0RNQTY0X0JBU0U0LAorCQlCQ000M3h4X01NSU9fRE1BNjRfQkFTRTUsCisJfTsKKwlzdGF0aWMgY29uc3QgdTE2IG1hcDMyW10gPSB7CisJCUJDTTQzeHhfTU1JT19ETUEzMl9CQVNFMCwKKwkJQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0UxLAorCQlCQ000M3h4X01NSU9fRE1BMzJfQkFTRTIsCisJCUJDTTQzeHhfTU1JT19ETUEzMl9CQVNFMywKKwkJQkNNNDN4eF9NTUlPX0RNQTMyX0JBU0U0LAorCQlCQ000M3h4X01NSU9fRE1BMzJfQkFTRTUsCisJfTsKKworCWlmIChkbWE2NGJpdCkgeworCQlhc3NlcnQoY29udHJvbGxlcl9pZHggPj0gMCAmJgorCQkgICAgICAgY29udHJvbGxlcl9pZHggPCBBUlJBWV9TSVpFKG1hcDY0KSk7CisJCXJldHVybiBtYXA2NFtjb250cm9sbGVyX2lkeF07CisJfQorCWFzc2VydChjb250cm9sbGVyX2lkeCA+PSAwICYmCisJICAgICAgIGNvbnRyb2xsZXJfaWR4IDwgQVJSQVlfU0laRShtYXAzMikpOworCXJldHVybiBtYXAzMltjb250cm9sbGVyX2lkeF07Cit9CisKIHN0YXRpYyBpbmxpbmUKIGRtYV9hZGRyX3QgbWFwX2Rlc2NidWZmZXIoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKIAkJCSAgdW5zaWduZWQgY2hhciAqYnVmLApAQCAtMTcyLDcgKzIwMSw2IEBACiAvKiBVbm1hcCBhbmQgZnJlZSBhIGRlc2NyaXB0b3IgYnVmZmVyLiAqLwogc3RhdGljIGlubGluZQogdm9pZCBmcmVlX2Rlc2NyaXB0b3JfYnVmZmVyKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCi0JCQkgICAgc3RydWN0IGJjbTQzeHhfZG1hZGVzYyAqZGVzYywKIAkJCSAgICBzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKm1ldGEsCiAJCQkgICAgaW50IGlycV9jb250ZXh0KQogewpAQCAtMTg4LDIzICsyMTYsMTMgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmKHJpbmctPmJjbS0+cGNpX2Rldi0+ZGV2KTsKIAotCXJpbmctPnZiYXNlID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgQkNNNDN4eF9ETUFfUklOR01FTVNJWkUsCi0JCQkJCSAmKHJpbmctPmRtYWJhc2UpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJpbmctPnZiYXNlKSB7CisJcmluZy0+ZGVzY2Jhc2UgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKKwkJCQkJICAgICYocmluZy0+ZG1hYmFzZSksIEdGUF9LRVJORUwpOworCWlmICghcmluZy0+ZGVzY2Jhc2UpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRE1BIHJpbmdtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaWYgKHJpbmctPmRtYWJhc2UgKyBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSA+IEJDTTQzeHhfRE1BX0JVU0FERFJNQVgpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiPj4+RkFUQUwgRVJST1I8PDwgIERNQSBSSU5HTUVNT1JZID4xRyAiCi0JCQkJICAgICIoMHglbGx4LCBsZW46ICVsdSlcbiIsCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyaW5nLT5kbWFiYXNlLAotCQkJCUJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFKTsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSwKLQkJCQkgIHJpbmctPnZiYXNlLCByaW5nLT5kbWFiYXNlKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCWFzc2VydCghKHJpbmctPmRtYWJhc2UgJiAweDAwMDAwM0ZGKSk7Ci0JbWVtc2V0KHJpbmctPnZiYXNlLCAwLCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSk7CisJbWVtc2V0KHJpbmctPmRlc2NiYXNlLCAwLCBCQ000M3h4X0RNQV9SSU5HTUVNU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNCwyNiArMjMyLDM0IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJihyaW5nLT5iY20tPnBjaV9kZXYtPmRldik7CiAKIAlkbWFfZnJlZV9jb2hlcmVudChkZXYsIEJDTTQzeHhfRE1BX1JJTkdNRU1TSVpFLAotCQkJICByaW5nLT52YmFzZSwgcmluZy0+ZG1hYmFzZSk7CisJCQkgIHJpbmctPmRlc2NiYXNlLCByaW5nLT5kbWFiYXNlKTsKIH0KIAogLyogUmVzZXQgdGhlIFJYIERNQSBjaGFubmVsICovCiBpbnQgYmNtNDN4eF9kbWFjb250cm9sbGVyX3J4X3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICB1MTYgbW1pb19iYXNlKQorCQkJCSAgIHUxNiBtbWlvX2Jhc2UsIGludCBkbWE2NCkKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWU7CisJdTE2IG9mZnNldDsKIAotCWJjbTQzeHhfd3JpdGUzMihiY20sCi0JCQltbWlvX2Jhc2UgKyBCQ000M3h4X0RNQV9SWF9DT05UUk9MLAotCQkJMHgwMDAwMDAwMCk7CisJb2Zmc2V0ID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X1JYQ1RMIDogQkNNNDN4eF9ETUEzMl9SWENUTDsKKwliY200M3h4X3dyaXRlMzIoYmNtLCBtbWlvX2Jhc2UgKyBvZmZzZXQsIDApOwogCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sCi0JCQkJICAgICAgIG1taW9fYmFzZSArIEJDTTQzeHhfRE1BX1JYX1NUQVRVUyk7Ci0JCXZhbHVlICY9IEJDTTQzeHhfRE1BX1JYU1RBVF9TVEFUX01BU0s7Ci0JCWlmICh2YWx1ZSA9PSBCQ000M3h4X0RNQV9SWFNUQVRfU1RBVF9ESVNBQkxFRCkgewotCQkJaSA9IC0xOwotCQkJYnJlYWs7CisJCW9mZnNldCA9IGRtYTY0ID8gQkNNNDN4eF9ETUE2NF9SWFNUQVRVUyA6IEJDTTQzeHhfRE1BMzJfUlhTVEFUVVM7CisJCXZhbHVlID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBtbWlvX2Jhc2UgKyBvZmZzZXQpOworCQlpZiAoZG1hNjQpIHsKKwkJCXZhbHVlICY9IEJDTTQzeHhfRE1BNjRfUlhTVEFUOworCQkJaWYgKHZhbHVlID09IEJDTTQzeHhfRE1BNjRfUlhTVEFUX0RJU0FCTEVEKSB7CisJCQkJaSA9IC0xOworCQkJCWJyZWFrOworCQkJfQorCQl9IGVsc2UgeworCQkJdmFsdWUgJj0gQkNNNDN4eF9ETUEzMl9SWFNUQVRFOworCQkJaWYgKHZhbHVlID09IEJDTTQzeHhfRE1BMzJfUlhTVEFUX0RJU0FCTEVEKSB7CisJCQkJaSA9IC0xOworCQkJCWJyZWFrOworCQkJfQogCQl9CiAJCXVkZWxheSgxMCk7CiAJfQpAQCAtMjQ3LDMxICsyNzMsNDcgQEAKIAogLyogUmVzZXQgdGhlIFJYIERNQSBjaGFubmVsICovCiBpbnQgYmNtNDN4eF9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICB1MTYgbW1pb19iYXNlKQorCQkJCSAgIHUxNiBtbWlvX2Jhc2UsIGludCBkbWE2NCkKIHsKIAlpbnQgaTsKIAl1MzIgdmFsdWU7CisJdTE2IG9mZnNldDsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDAwOyBpKyspIHsKLQkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sCi0JCQkJICAgICAgIG1taW9fYmFzZSArIEJDTTQzeHhfRE1BX1RYX1NUQVRVUyk7Ci0JCXZhbHVlICY9IEJDTTQzeHhfRE1BX1RYU1RBVF9TVEFUX01BU0s7Ci0JCWlmICh2YWx1ZSA9PSBCQ000M3h4X0RNQV9UWFNUQVRfU1RBVF9ESVNBQkxFRCB8fAotCQkgICAgdmFsdWUgPT0gQkNNNDN4eF9ETUFfVFhTVEFUX1NUQVRfSURMRVdBSVQgfHwKLQkJICAgIHZhbHVlID09IEJDTTQzeHhfRE1BX1RYU1RBVF9TVEFUX1NUT1BQRUQpCi0JCQlicmVhazsKKwkJb2Zmc2V0ID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X1RYU1RBVFVTIDogQkNNNDN4eF9ETUEzMl9UWFNUQVRVUzsKKwkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIG1taW9fYmFzZSArIG9mZnNldCk7CisJCWlmIChkbWE2NCkgeworCQkJdmFsdWUgJj0gQkNNNDN4eF9ETUE2NF9UWFNUQVQ7CisJCQlpZiAodmFsdWUgPT0gQkNNNDN4eF9ETUE2NF9UWFNUQVRfRElTQUJMRUQgfHwKKwkJCSAgICB2YWx1ZSA9PSBCQ000M3h4X0RNQTY0X1RYU1RBVF9JRExFV0FJVCB8fAorCQkJICAgIHZhbHVlID09IEJDTTQzeHhfRE1BNjRfVFhTVEFUX1NUT1BQRUQpCisJCQkJYnJlYWs7CisJCX0gZWxzZSB7CisJCQl2YWx1ZSAmPSBCQ000M3h4X0RNQTMyX1RYU1RBVEU7CisJCQlpZiAodmFsdWUgPT0gQkNNNDN4eF9ETUEzMl9UWFNUQVRfRElTQUJMRUQgfHwKKwkJCSAgICB2YWx1ZSA9PSBCQ000M3h4X0RNQTMyX1RYU1RBVF9JRExFV0FJVCB8fAorCQkJICAgIHZhbHVlID09IEJDTTQzeHhfRE1BMzJfVFhTVEFUX1NUT1BQRUQpCisJCQkJYnJlYWs7CisJCX0KIAkJdWRlbGF5KDEwKTsKIAl9Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwKLQkJCW1taW9fYmFzZSArIEJDTTQzeHhfRE1BX1RYX0NPTlRST0wsCi0JCQkweDAwMDAwMDAwKTsKKwlvZmZzZXQgPSBkbWE2NCA/IEJDTTQzeHhfRE1BNjRfVFhDVEwgOiBCQ000M3h4X0RNQTMyX1RYQ1RMOworCWJjbTQzeHhfd3JpdGUzMihiY20sIG1taW9fYmFzZSArIG9mZnNldCwgMCk7CiAJZm9yIChpID0gMDsgaSA8IDEwMDA7IGkrKykgewotCQl2YWx1ZSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwKLQkJCQkgICAgICAgbW1pb19iYXNlICsgQkNNNDN4eF9ETUFfVFhfU1RBVFVTKTsKLQkJdmFsdWUgJj0gQkNNNDN4eF9ETUFfVFhTVEFUX1NUQVRfTUFTSzsKLQkJaWYgKHZhbHVlID09IEJDTTQzeHhfRE1BX1RYU1RBVF9TVEFUX0RJU0FCTEVEKSB7Ci0JCQlpID0gLTE7Ci0JCQlicmVhazsKKwkJb2Zmc2V0ID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X1RYU1RBVFVTIDogQkNNNDN4eF9ETUEzMl9UWFNUQVRVUzsKKwkJdmFsdWUgPSBiY200M3h4X3JlYWQzMihiY20sIG1taW9fYmFzZSArIG9mZnNldCk7CisJCWlmIChkbWE2NCkgeworCQkJdmFsdWUgJj0gQkNNNDN4eF9ETUE2NF9UWFNUQVQ7CisJCQlpZiAodmFsdWUgPT0gQkNNNDN4eF9ETUE2NF9UWFNUQVRfRElTQUJMRUQpIHsKKwkJCQlpID0gLTE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQl2YWx1ZSAmPSBCQ000M3h4X0RNQTMyX1RYU1RBVEU7CisJCQlpZiAodmFsdWUgPT0gQkNNNDN4eF9ETUEzMl9UWFNUQVRfRElTQUJMRUQpIHsKKwkJCQlpID0gLTE7CisJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAkJdWRlbGF5KDEwKTsKIAl9CkBAIC0yODUsNDcgKzMyNyw5OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBmaWxsX2Rlc2NyaXB0b3Ioc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKKwkJCSAgICBzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2MsCisJCQkgICAgZG1hX2FkZHJfdCBkbWFhZGRyLAorCQkJICAgIHUxNiBidWZzaXplLAorCQkJICAgIGludCBzdGFydCwgaW50IGVuZCwgaW50IGlycSkKK3sKKwlpbnQgc2xvdDsKKworCXNsb3QgPSBiY200M3h4X2RtYV9kZXNjMmlkeChyaW5nLCBkZXNjKTsKKwlhc3NlcnQoc2xvdCA+PSAwICYmIHNsb3QgPCByaW5nLT5ucl9zbG90cyk7CisKKwlpZiAocmluZy0+ZG1hNjQpIHsKKwkJdTMyIGN0bDAgPSAwLCBjdGwxID0gMDsKKwkJdTMyIGFkZHJsbywgYWRkcmhpOworCQl1MzIgYWRkcmV4dDsKKworCQlhZGRybG8gPSAodTMyKShkbWFhZGRyICYgMHhGRkZGRkZGRik7CisJCWFkZHJoaSA9ICgoKHU2NClkbWFhZGRyID4+IDMyKSAmIH5CQ000M3h4X0RNQTY0X1JPVVRJTkcpOworCQlhZGRyZXh0ID0gKCgodTY0KWRtYWFkZHIgPj4gMzIpID4+IEJDTTQzeHhfRE1BNjRfUk9VVElOR19TSElGVCk7CisJCWFkZHJoaSB8PSByaW5nLT5yb3V0aW5nOworCQlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCisJCQljdGwwIHw9IEJDTTQzeHhfRE1BNjRfRENUTDBfRFRBQkxFRU5EOworCQlpZiAoc3RhcnQpCisJCQljdGwwIHw9IEJDTTQzeHhfRE1BNjRfRENUTDBfRlJBTUVTVEFSVDsKKwkJaWYgKGVuZCkKKwkJCWN0bDAgfD0gQkNNNDN4eF9ETUE2NF9EQ1RMMF9GUkFNRUVORDsKKwkJaWYgKGlycSkKKwkJCWN0bDAgfD0gQkNNNDN4eF9ETUE2NF9EQ1RMMF9JUlE7CisJCWN0bDEgfD0gKGJ1ZnNpemUgLSByaW5nLT5mcmFtZW9mZnNldCkKKwkJCSYgQkNNNDN4eF9ETUE2NF9EQ1RMMV9CWVRFQ05UOworCQljdGwxIHw9IChhZGRyZXh0IDw8IEJDTTQzeHhfRE1BNjRfRENUTDFfQUREUkVYVF9TSElGVCkKKwkJCSYgQkNNNDN4eF9ETUE2NF9EQ1RMMV9BRERSRVhUX01BU0s7CisKKwkJZGVzYy0+ZG1hNjQuY29udHJvbDAgPSBjcHVfdG9fbGUzMihjdGwwKTsKKwkJZGVzYy0+ZG1hNjQuY29udHJvbDEgPSBjcHVfdG9fbGUzMihjdGwxKTsKKwkJZGVzYy0+ZG1hNjQuYWRkcmVzc19sb3cgPSBjcHVfdG9fbGUzMihhZGRybG8pOworCQlkZXNjLT5kbWE2NC5hZGRyZXNzX2hpZ2ggPSBjcHVfdG9fbGUzMihhZGRyaGkpOworCX0gZWxzZSB7CisJCXUzMiBjdGw7CisJCXUzMiBhZGRyOworCQl1MzIgYWRkcmV4dDsKKworCQlhZGRyID0gKHUzMikoZG1hYWRkciAmIH5CQ000M3h4X0RNQTMyX1JPVVRJTkcpOworCQlhZGRyZXh0ID0gKHUzMikoZG1hYWRkciAmIEJDTTQzeHhfRE1BMzJfUk9VVElORykKKwkJCSAgID4+IEJDTTQzeHhfRE1BMzJfUk9VVElOR19TSElGVDsKKwkJYWRkciB8PSByaW5nLT5yb3V0aW5nOworCQljdGwgPSAoYnVmc2l6ZSAtIHJpbmctPmZyYW1lb2Zmc2V0KQorCQkgICAgICAmIEJDTTQzeHhfRE1BMzJfRENUTF9CWVRFQ05UOworCQlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCisJCQljdGwgfD0gQkNNNDN4eF9ETUEzMl9EQ1RMX0RUQUJMRUVORDsKKwkJaWYgKHN0YXJ0KQorCQkJY3RsIHw9IEJDTTQzeHhfRE1BMzJfRENUTF9GUkFNRVNUQVJUOworCQlpZiAoZW5kKQorCQkJY3RsIHw9IEJDTTQzeHhfRE1BMzJfRENUTF9GUkFNRUVORDsKKwkJaWYgKGlycSkKKwkJCWN0bCB8PSBCQ000M3h4X0RNQTMyX0RDVExfSVJROworCQljdGwgfD0gKGFkZHJleHQgPDwgQkNNNDN4eF9ETUEzMl9EQ1RMX0FERFJFWFRfU0hJRlQpCisJCSAgICAgICAmIEJDTTQzeHhfRE1BMzJfRENUTF9BRERSRVhUX01BU0s7CisKKwkJZGVzYy0+ZG1hMzIuY29udHJvbCA9IGNwdV90b19sZTMyKGN0bCk7CisJCWRlc2MtPmRtYTMyLmFkZHJlc3MgPSBjcHVfdG9fbGUzMihhZGRyKTsKKwl9Cit9CisKIHN0YXRpYyBpbnQgc2V0dXBfcnhfZGVzY2J1ZmZlcihzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkJICAgICAgIHN0cnVjdCBiY200M3h4X2RtYWRlc2MgKmRlc2MsCisJCQkgICAgICAgc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICpkZXNjLAogCQkJICAgICAgIHN0cnVjdCBiY200M3h4X2RtYWRlc2NfbWV0YSAqbWV0YSwKIAkJCSAgICAgICBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IGJjbTQzeHhfcnhoZHIgKnJ4aGRyOworCXN0cnVjdCBiY200M3h4X2h3eG1pdHN0YXR1cyAqeG1pdHN0YXQ7CiAJZG1hX2FkZHJfdCBkbWFhZGRyOwotCXUzMiBkZXNjX2FkZHI7Ci0JdTMyIGRlc2NfY3RsOwotCWNvbnN0IGludCBzbG90ID0gKGludCkoZGVzYyAtIHJpbmctPnZiYXNlKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JYXNzZXJ0KHNsb3QgPj0gMCAmJiBzbG90IDwgcmluZy0+bnJfc2xvdHMpOwogCWFzc2VydCghcmluZy0+dHgpOwogCiAJc2tiID0gX19kZXZfYWxsb2Nfc2tiKHJpbmctPnJ4X2J1ZmZlcnNpemUsIGdmcF9mbGFncyk7CiAJaWYgKHVubGlrZWx5KCFza2IpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlkbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKLQlpZiAodW5saWtlbHkoZG1hYWRkciArIHJpbmctPnJ4X2J1ZmZlcnNpemUgPiBCQ000M3h4X0RNQV9CVVNBRERSTUFYKSkgewotCQl1bm1hcF9kZXNjYnVmZmVyKHJpbmcsIGRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICI+Pj5GQVRBTCBFUlJPUjw8PCAgRE1BIFJYIFNLQiA+MUcgIgotCQkJCSAgICAiKDB4JWxseCwgbGVuOiAldSlcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWRtYWFkZHIsIHJpbmctPnJ4X2J1ZmZlcnNpemUpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CiAJbWV0YS0+c2tiID0gc2tiOwogCW1ldGEtPmRtYWFkZHIgPSBkbWFhZGRyOwogCXNrYi0+ZGV2ID0gcmluZy0+YmNtLT5uZXRfZGV2OwotCWRlc2NfYWRkciA9ICh1MzIpKGRtYWFkZHIgKyByaW5nLT5tZW1vZmZzZXQpOwotCWRlc2NfY3RsID0gKEJDTTQzeHhfRE1BRFRPUl9CWVRFQ05UX01BU0sgJgotCQkgICAgKHUzMikocmluZy0+cnhfYnVmZmVyc2l6ZSAtIHJpbmctPmZyYW1lb2Zmc2V0KSk7Ci0JaWYgKHNsb3QgPT0gcmluZy0+bnJfc2xvdHMgLSAxKQotCQlkZXNjX2N0bCB8PSBCQ000M3h4X0RNQURUT1JfRFRBQkxFRU5EOwotCXNldF9kZXNjX2FkZHIoZGVzYywgZGVzY19hZGRyKTsKLQlzZXRfZGVzY19jdGwoZGVzYywgZGVzY19jdGwpOworCisJZmlsbF9kZXNjcmlwdG9yKHJpbmcsIGRlc2MsIGRtYWFkZHIsCisJCQlyaW5nLT5yeF9idWZmZXJzaXplLCAwLCAwLCAwKTsKIAogCXJ4aGRyID0gKHN0cnVjdCBiY200M3h4X3J4aGRyICopKHNrYi0+ZGF0YSk7CiAJcnhoZHItPmZyYW1lX2xlbmd0aCA9IDA7CiAJcnhoZHItPmZsYWdzMSA9IDA7CisJeG1pdHN0YXQgPSAoc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICopKHNrYi0+ZGF0YSk7CisJeG1pdHN0YXQtPmNvb2tpZSA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMzNiwxNyArNDI5LDE3IEBACiBzdGF0aWMgaW50IGFsbG9jX2luaXRpYWxfZGVzY2J1ZmZlcnMoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZykKIHsKIAlpbnQgaSwgZXJyID0gLUVOT01FTTsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjICpkZXNjOworCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyAqZGVzYzsKIAlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKm1ldGE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcmluZy0+bnJfc2xvdHM7IGkrKykgewotCQlkZXNjID0gcmluZy0+dmJhc2UgKyBpOwotCQltZXRhID0gcmluZy0+bWV0YSArIGk7CisJCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCBpLCAmbWV0YSk7CiAKIAkJZXJyID0gc2V0dXBfcnhfZGVzY2J1ZmZlcihyaW5nLCBkZXNjLCBtZXRhLCBHRlBfS0VSTkVMKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX3Vud2luZDsKIAl9CisJbWIoKTsKIAlyaW5nLT51c2VkX3Nsb3RzID0gcmluZy0+bnJfc2xvdHM7CiAJZXJyID0gMDsKIG91dDoKQEAgLTM1NCw4ICs0NDcsNyBAQAogCiBlcnJfdW53aW5kOgogCWZvciAoaS0tOyBpID49IDA7IGktLSkgewotCQlkZXNjID0gcmluZy0+dmJhc2UgKyBpOwotCQltZXRhID0gcmluZy0+bWV0YSArIGk7CisJCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCBpLCAmbWV0YSk7CiAKIAkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBtZXRhLT5kbWFhZGRyLCByaW5nLT5yeF9idWZmZXJzaXplLCAwKTsKIAkJZGV2X2tmcmVlX3NrYihtZXRhLT5za2IpOwpAQCAtMzcxLDI3ICs0NjMsNjcgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAl1MzIgdmFsdWU7CisJdTMyIGFkZHJleHQ7CiAKIAlpZiAocmluZy0+dHgpIHsKLQkJLyogU2V0IFRyYW5zbWl0IENvbnRyb2wgcmVnaXN0ZXIgdG8gInRyYW5zbWl0IGVuYWJsZSIgKi8KLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUFfVFhfQ09OVFJPTCwKLQkJCQkgIEJDTTQzeHhfRE1BX1RYQ1RSTF9FTkFCTEUpOwotCQkvKiBTZXQgVHJhbnNtaXQgRGVzY3JpcHRvciByaW5nIGFkZHJlc3MuICovCi0JCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BX1RYX0RFU0NfUklORywKLQkJCQkgIHJpbmctPmRtYWJhc2UgKyByaW5nLT5tZW1vZmZzZXQpOworCQlpZiAocmluZy0+ZG1hNjQpIHsKKwkJCXU2NCByaW5nYmFzZSA9ICh1NjQpKHJpbmctPmRtYWJhc2UpOworCisJCQlhZGRyZXh0ID0gKChyaW5nYmFzZSA+PiAzMikgPj4gQkNNNDN4eF9ETUE2NF9ST1VUSU5HX1NISUZUKTsKKwkJCXZhbHVlID0gQkNNNDN4eF9ETUE2NF9UWEVOQUJMRTsKKwkJCXZhbHVlIHw9IChhZGRyZXh0IDw8IEJDTTQzeHhfRE1BNjRfVFhBRERSRVhUX1NISUZUKQorCQkJCSYgQkNNNDN4eF9ETUE2NF9UWEFERFJFWFRfTUFTSzsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhDVEwsIHZhbHVlKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhSSU5HTE8sCisJCQkJCShyaW5nYmFzZSAmIDB4RkZGRkZGRkYpKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhSSU5HSEksCisJCQkJCSgocmluZ2Jhc2UgPj4gMzIpICYgfkJDTTQzeHhfRE1BNjRfUk9VVElORykKKwkJCQkJfCByaW5nLT5yb3V0aW5nKTsKKwkJfSBlbHNlIHsKKwkJCXUzMiByaW5nYmFzZSA9ICh1MzIpKHJpbmctPmRtYWJhc2UpOworCisJCQlhZGRyZXh0ID0gKHJpbmdiYXNlID4+IEJDTTQzeHhfRE1BMzJfUk9VVElOR19TSElGVCk7CisJCQl2YWx1ZSA9IEJDTTQzeHhfRE1BMzJfVFhFTkFCTEU7CisJCQl2YWx1ZSB8PSAoYWRkcmV4dCA8PCBCQ000M3h4X0RNQTMyX1RYQUREUkVYVF9TSElGVCkKKwkJCQkmIEJDTTQzeHhfRE1BMzJfVFhBRERSRVhUX01BU0s7CisJCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1RYQ1RMLCB2YWx1ZSk7CisJCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1RYUklORywKKwkJCQkJKHJpbmdiYXNlICYgfkJDTTQzeHhfRE1BMzJfUk9VVElORykKKwkJCQkJfCByaW5nLT5yb3V0aW5nKTsKKwkJfQogCX0gZWxzZSB7CiAJCWVyciA9IGFsbG9jX2luaXRpYWxfZGVzY2J1ZmZlcnMocmluZyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKLQkJLyogU2V0IFJlY2VpdmUgQ29udHJvbCAicmVjZWl2ZSBlbmFibGUiIGFuZCBmcmFtZSBvZmZzZXQgKi8KLQkJdmFsdWUgPSAocmluZy0+ZnJhbWVvZmZzZXQgPDwgQkNNNDN4eF9ETUFfUlhDVFJMX0ZSQU1FT0ZGX1NISUZUKTsKLQkJdmFsdWUgfD0gQkNNNDN4eF9ETUFfUlhDVFJMX0VOQUJMRTsKLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUFfUlhfQ09OVFJPTCwgdmFsdWUpOwotCQkvKiBTZXQgUmVjZWl2ZSBEZXNjcmlwdG9yIHJpbmcgYWRkcmVzcy4gKi8KLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUFfUlhfREVTQ19SSU5HLAotCQkJCSAgcmluZy0+ZG1hYmFzZSArIHJpbmctPm1lbW9mZnNldCk7Ci0JCS8qIEluaXQgdGhlIGRlc2NyaXB0b3IgcG9pbnRlci4gKi8KLQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUFfUlhfREVTQ19JTkRFWCwgMjAwKTsKKwkJaWYgKHJpbmctPmRtYTY0KSB7CisJCQl1NjQgcmluZ2Jhc2UgPSAodTY0KShyaW5nLT5kbWFiYXNlKTsKKworCQkJYWRkcmV4dCA9ICgocmluZ2Jhc2UgPj4gMzIpID4+IEJDTTQzeHhfRE1BNjRfUk9VVElOR19TSElGVCk7CisJCQl2YWx1ZSA9IChyaW5nLT5mcmFtZW9mZnNldCA8PCBCQ000M3h4X0RNQTY0X1JYRlJPRkZfU0hJRlQpOworCQkJdmFsdWUgfD0gQkNNNDN4eF9ETUE2NF9SWEVOQUJMRTsKKwkJCXZhbHVlIHw9IChhZGRyZXh0IDw8IEJDTTQzeHhfRE1BNjRfUlhBRERSRVhUX1NISUZUKQorCQkJCSYgQkNNNDN4eF9ETUE2NF9SWEFERFJFWFRfTUFTSzsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfUlhDVEwsIHZhbHVlKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfUlhSSU5HTE8sCisJCQkJCShyaW5nYmFzZSAmIDB4RkZGRkZGRkYpKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfUlhSSU5HSEksCisJCQkJCSgocmluZ2Jhc2UgPj4gMzIpICYgfkJDTTQzeHhfRE1BNjRfUk9VVElORykKKwkJCQkJfCByaW5nLT5yb3V0aW5nKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfUlhJTkRFWCwgMjAwKTsKKwkJfSBlbHNlIHsKKwkJCXUzMiByaW5nYmFzZSA9ICh1MzIpKHJpbmctPmRtYWJhc2UpOworCisJCQlhZGRyZXh0ID0gKHJpbmdiYXNlID4+IEJDTTQzeHhfRE1BMzJfUk9VVElOR19TSElGVCk7CisJCQl2YWx1ZSA9IChyaW5nLT5mcmFtZW9mZnNldCA8PCBCQ000M3h4X0RNQTMyX1JYRlJPRkZfU0hJRlQpOworCQkJdmFsdWUgfD0gQkNNNDN4eF9ETUEzMl9SWEVOQUJMRTsKKwkJCXZhbHVlIHw9IChhZGRyZXh0IDw8IEJDTTQzeHhfRE1BMzJfUlhBRERSRVhUX1NISUZUKQorCQkJCSYgQkNNNDN4eF9ETUEzMl9SWEFERFJFWFRfTUFTSzsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfUlhDVEwsIHZhbHVlKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfUlhSSU5HLAorCQkJCQkocmluZ2Jhc2UgJiB+QkNNNDN4eF9ETUEzMl9ST1VUSU5HKQorCQkJCQl8IHJpbmctPnJvdXRpbmcpOworCQkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUEzMl9SWElOREVYLCAyMDApOworCQl9CiAJfQogCiBvdXQ6CkBAIC00MDIsMjcgKzUzNCwzMiBAQAogc3RhdGljIHZvaWQgZG1hY29udHJvbGxlcl9jbGVhbnVwKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCiB7CiAJaWYgKHJpbmctPnR4KSB7Ci0JCWJjbTQzeHhfZG1hY29udHJvbGxlcl90eF9yZXNldChyaW5nLT5iY20sIHJpbmctPm1taW9fYmFzZSk7Ci0JCS8qIFplcm8gb3V0IFRyYW5zbWl0IERlc2NyaXB0b3IgcmluZyBhZGRyZXNzLiAqLwotCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQV9UWF9ERVNDX1JJTkcsIDApOworCQliY200M3h4X2RtYWNvbnRyb2xsZXJfdHhfcmVzZXQocmluZy0+YmNtLCByaW5nLT5tbWlvX2Jhc2UsIHJpbmctPmRtYTY0KTsKKwkJaWYgKHJpbmctPmRtYTY0KSB7CisJCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTY0X1RYUklOR0xPLCAwKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhSSU5HSEksIDApOworCQl9IGVsc2UKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfVFhSSU5HLCAwKTsKIAl9IGVsc2UgewotCQliY200M3h4X2RtYWNvbnRyb2xsZXJfcnhfcmVzZXQocmluZy0+YmNtLCByaW5nLT5tbWlvX2Jhc2UpOwotCQkvKiBaZXJvIG91dCBSZWNlaXZlIERlc2NyaXB0b3IgcmluZyBhZGRyZXNzLiAqLwotCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQV9SWF9ERVNDX1JJTkcsIDApOworCQliY200M3h4X2RtYWNvbnRyb2xsZXJfcnhfcmVzZXQocmluZy0+YmNtLCByaW5nLT5tbWlvX2Jhc2UsIHJpbmctPmRtYTY0KTsKKwkJaWYgKHJpbmctPmRtYTY0KSB7CisJCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTY0X1JYUklOR0xPLCAwKTsKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfUlhSSU5HSEksIDApOworCQl9IGVsc2UKKwkJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BMzJfUlhSSU5HLCAwKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGZyZWVfYWxsX2Rlc2NidWZmZXJzKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfZG1hZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2M7CiAJc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICptZXRhOwogCWludCBpOwogCiAJaWYgKCFyaW5nLT51c2VkX3Nsb3RzKQogCQlyZXR1cm47CiAJZm9yIChpID0gMDsgaSA8IHJpbmctPm5yX3Nsb3RzOyBpKyspIHsKLQkJZGVzYyA9IHJpbmctPnZiYXNlICsgaTsKLQkJbWV0YSA9IHJpbmctPm1ldGEgKyBpOworCQlkZXNjID0gYmNtNDN4eF9kbWFfaWR4MmRlc2MocmluZywgaSwgJm1ldGEpOwogCiAJCWlmICghbWV0YS0+c2tiKSB7CiAJCQlhc3NlcnQocmluZy0+dHgpOwpAQCAtNDMwLDYyICs1NjcsNjcgQEAKIAkJfQogCQlpZiAocmluZy0+dHgpIHsKIAkJCXVubWFwX2Rlc2NidWZmZXIocmluZywgbWV0YS0+ZG1hYWRkciwKLQkJCQkJIG1ldGEtPnNrYi0+bGVuLCAxKTsKKwkJCQkJbWV0YS0+c2tiLT5sZW4sIDEpOwogCQl9IGVsc2UgewogCQkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBtZXRhLT5kbWFhZGRyLAotCQkJCQkgcmluZy0+cnhfYnVmZmVyc2l6ZSwgMCk7CisJCQkJCXJpbmctPnJ4X2J1ZmZlcnNpemUsIDApOwogCQl9Ci0JCWZyZWVfZGVzY3JpcHRvcl9idWZmZXIocmluZywgZGVzYywgbWV0YSwgMCk7CisJCWZyZWVfZGVzY3JpcHRvcl9idWZmZXIocmluZywgbWV0YSwgMCk7CiAJfQogfQogCiAvKiBNYWluIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uLiAqLwogc3RhdGljCiBzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICogYmNtNDN4eF9zZXR1cF9kbWFyaW5nKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkJICAgICAgIHUxNiBkbWFfY29udHJvbGxlcl9iYXNlLAotCQkJCQkgICAgICAgaW50IG5yX2Rlc2NyaXB0b3Jfc2xvdHMsCi0JCQkJCSAgICAgICBpbnQgdHgpCisJCQkJCSAgICAgICBpbnQgY29udHJvbGxlcl9pbmRleCwKKwkJCQkJICAgICAgIGludCBmb3JfdHgsCisJCQkJCSAgICAgICBpbnQgZG1hNjQpCiB7CiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZzsKIAlpbnQgZXJyOworCWludCBucl9zbG90czsKIAogCXJpbmcgPSBremFsbG9jKHNpemVvZigqcmluZyksIEdGUF9LRVJORUwpOwogCWlmICghcmluZykKIAkJZ290byBvdXQ7CiAKLQlyaW5nLT5tZXRhID0ga3phbGxvYyhzaXplb2YoKnJpbmctPm1ldGEpICogbnJfZGVzY3JpcHRvcl9zbG90cywKKwlucl9zbG90cyA9IEJDTTQzeHhfUlhSSU5HX1NMT1RTOworCWlmIChmb3JfdHgpCisJCW5yX3Nsb3RzID0gQkNNNDN4eF9UWFJJTkdfU0xPVFM7CisKKwlyaW5nLT5tZXRhID0ga2NhbGxvYyhucl9zbG90cywgc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2NfbWV0YSksCiAJCQkgICAgIEdGUF9LRVJORUwpOwogCWlmICghcmluZy0+bWV0YSkKIAkJZ290byBlcnJfa2ZyZWVfcmluZzsKIAotCXJpbmctPm1lbW9mZnNldCA9IEJDTTQzeHhfRE1BX0RNQUJVU0FERFJPRkZTRVQ7CisJcmluZy0+cm91dGluZyA9IEJDTTQzeHhfRE1BMzJfQ0xJRU5UVFJBTlM7CisJaWYgKGRtYTY0KQorCQlyaW5nLT5yb3V0aW5nID0gQkNNNDN4eF9ETUE2NF9DTElFTlRUUkFOUzsKICNpZmRlZiBDT05GSUdfQkNNOTQ3WFgKIAlpZiAoYmNtLT5wY2lfZGV2LT5idXMtPm51bWJlciA9PSAwKQotCQlyaW5nLT5tZW1vZmZzZXQgPSAwOworCQlyaW5nLT5yb3V0aW5nID0gZG1hNjQgPyBCQ000M3h4X0RNQTY0X05PVFJBTlMgOiBCQ000M3h4X0RNQTMyX05PVFJBTlM7CiAjZW5kaWYKIAogCXJpbmctPmJjbSA9IGJjbTsKLQlyaW5nLT5ucl9zbG90cyA9IG5yX2Rlc2NyaXB0b3Jfc2xvdHM7CisJcmluZy0+bnJfc2xvdHMgPSBucl9zbG90czsKIAlyaW5nLT5zdXNwZW5kX21hcmsgPSByaW5nLT5ucl9zbG90cyAqIEJDTTQzeHhfVFhTVVNQRU5EX1BFUkNFTlQgLyAxMDA7CiAJcmluZy0+cmVzdW1lX21hcmsgPSByaW5nLT5ucl9zbG90cyAqIEJDTTQzeHhfVFhSRVNVTUVfUEVSQ0VOVCAvIDEwMDsKIAlhc3NlcnQocmluZy0+c3VzcGVuZF9tYXJrIDwgcmluZy0+cmVzdW1lX21hcmspOwotCXJpbmctPm1taW9fYmFzZSA9IGRtYV9jb250cm9sbGVyX2Jhc2U7Ci0JaWYgKHR4KSB7CisJcmluZy0+bW1pb19iYXNlID0gYmNtNDN4eF9kbWFjb250cm9sbGVyX2Jhc2UoZG1hNjQsIGNvbnRyb2xsZXJfaW5kZXgpOworCXJpbmctPmluZGV4ID0gY29udHJvbGxlcl9pbmRleDsKKwlyaW5nLT5kbWE2NCA9ICEhZG1hNjQ7CisJaWYgKGZvcl90eCkgewogCQlyaW5nLT50eCA9IDE7CiAJCXJpbmctPmN1cnJlbnRfc2xvdCA9IC0xOwogCX0gZWxzZSB7Ci0JCXN3aXRjaCAoZG1hX2NvbnRyb2xsZXJfYmFzZSkgewotCQljYXNlIEJDTTQzeHhfTU1JT19ETUExX0JBU0U6Ci0JCQlyaW5nLT5yeF9idWZmZXJzaXplID0gQkNNNDN4eF9ETUExX1JYQlVGRkVSU0laRTsKLQkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQkNNNDN4eF9ETUExX1JYX0ZSQU1FT0ZGU0VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTRfQkFTRToKLQkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCQ000M3h4X0RNQTRfUlhCVUZGRVJTSVpFOwotCQkJcmluZy0+ZnJhbWVvZmZzZXQgPSBCQ000M3h4X0RNQTRfUlhfRlJBTUVPRkZTRVQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKKwkJaWYgKHJpbmctPmluZGV4ID09IDApIHsKKwkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCQ000M3h4X0RNQTBfUlhfQlVGRkVSU0laRTsKKwkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQkNNNDN4eF9ETUEwX1JYX0ZSQU1FT0ZGU0VUOworCQl9IGVsc2UgaWYgKHJpbmctPmluZGV4ID09IDMpIHsKKwkJCXJpbmctPnJ4X2J1ZmZlcnNpemUgPSBCQ000M3h4X0RNQTNfUlhfQlVGRkVSU0laRTsKKwkJCXJpbmctPmZyYW1lb2Zmc2V0ID0gQkNNNDN4eF9ETUEzX1JYX0ZSQU1FT0ZGU0VUOworCQl9IGVsc2UKIAkJCWFzc2VydCgwKTsKLQkJfQogCX0KIAogCWVyciA9IGFsbG9jX3JpbmdtZW1vcnkocmluZyk7CkBAIC01MTQsNyArNjU2LDggQEAKIAlpZiAoIXJpbmcpCiAJCXJldHVybjsKIAotCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiRE1BIDB4JTA0eCAoJXMpIG1heCB1c2VkIHNsb3RzOiAlZC8lZFxuIiwKKwlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkRNQS0lcyAweCUwNFggKCVzKSBtYXggdXNlZCBzbG90czogJWQvJWRcbiIsCisJCShyaW5nLT5kbWE2NCkgPyAiNjQiIDogIjMyIiwKIAkJcmluZy0+bW1pb19iYXNlLAogCQkocmluZy0+dHgpID8gIlRYIiA6ICJSWCIsCiAJCXJpbmctPm1heF91c2VkX3Nsb3RzLCByaW5nLT5ucl9zbG90cyk7CkBAIC01MzcsMTAgKzY4MCwxNSBAQAogCQlyZXR1cm47CiAJZG1hID0gYmNtNDN4eF9jdXJyZW50X2RtYShiY20pOwogCi0JYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMSk7Ci0JZG1hLT5yeF9yaW5nMSA9IE5VTEw7CisJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMyk7CisJZG1hLT5yeF9yaW5nMyA9IE5VTEw7CiAJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMCk7CiAJZG1hLT5yeF9yaW5nMCA9IE5VTEw7CisKKwliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3Jpbmc1KTsKKwlkbWEtPnR4X3Jpbmc1ID0gTlVMTDsKKwliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3Jpbmc0KTsKKwlkbWEtPnR4X3Jpbmc0ID0gTlVMTDsKIAliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmczKTsKIAlkbWEtPnR4X3JpbmczID0gTlVMTDsKIAliY200M3h4X2Rlc3Ryb3lfZG1hcmluZyhkbWEtPnR4X3JpbmcyKTsKQEAgLTU1Niw0OCArNzA0LDU5IEBACiAJc3RydWN0IGJjbTQzeHhfZG1hICpkbWEgPSBiY200M3h4X2N1cnJlbnRfZG1hKGJjbSk7CiAJc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZzsKIAlpbnQgZXJyID0gLUVOT01FTTsKKwlpbnQgZG1hNjQgPSAwOworCXUzMiBzYnRtc3RhdGVoaTsKKworCXNidG1zdGF0ZWhpID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVISUdIKTsKKwlpZiAoc2J0bXN0YXRlaGkgJiBCQ000M3h4X1NCVE1TVEFURUhJR0hfRE1BNjRCSVQpCisJCWRtYTY0ID0gMTsKIAogCS8qIHNldHVwIFRYIERNQSBjaGFubmVscy4gKi8KLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTFfQkFTRSwKLQkJCQkgICAgIEJDTTQzeHhfVFhSSU5HX1NMT1RTLCAxKTsKKwlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMCwgMSwgZG1hNjQpOwogCWlmICghcmluZykKIAkJZ290byBvdXQ7CiAJZG1hLT50eF9yaW5nMCA9IHJpbmc7CiAKLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTJfQkFTRSwKLQkJCQkgICAgIEJDTTQzeHhfVFhSSU5HX1NMT1RTLCAxKTsKKwlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMSwgMSwgZG1hNjQpOwogCWlmICghcmluZykKIAkJZ290byBlcnJfZGVzdHJveV90eDA7CiAJZG1hLT50eF9yaW5nMSA9IHJpbmc7CiAKLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTNfQkFTRSwKLQkJCQkgICAgIEJDTTQzeHhfVFhSSU5HX1NMT1RTLCAxKTsKKwlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMiwgMSwgZG1hNjQpOwogCWlmICghcmluZykKIAkJZ290byBlcnJfZGVzdHJveV90eDE7CiAJZG1hLT50eF9yaW5nMiA9IHJpbmc7CiAKLQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfQkFTRSwKLQkJCQkgICAgIEJDTTQzeHhfVFhSSU5HX1NMT1RTLCAxKTsKKwlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgMywgMSwgZG1hNjQpOwogCWlmICghcmluZykKIAkJZ290byBlcnJfZGVzdHJveV90eDI7CiAJZG1hLT50eF9yaW5nMyA9IHJpbmc7CiAKLQkvKiBzZXR1cCBSWCBETUEgY2hhbm5lbHMuICovCi0JcmluZyA9IGJjbTQzeHhfc2V0dXBfZG1hcmluZyhiY20sIEJDTTQzeHhfTU1JT19ETUExX0JBU0UsCi0JCQkJICAgICBCQ000M3h4X1JYUklOR19TTE9UUywgMCk7CisJcmluZyA9IGJjbTQzeHhfc2V0dXBfZG1hcmluZyhiY20sIDQsIDEsIGRtYTY0KTsKIAlpZiAoIXJpbmcpCiAJCWdvdG8gZXJyX2Rlc3Ryb3lfdHgzOworCWRtYS0+dHhfcmluZzQgPSByaW5nOworCisJcmluZyA9IGJjbTQzeHhfc2V0dXBfZG1hcmluZyhiY20sIDUsIDEsIGRtYTY0KTsKKwlpZiAoIXJpbmcpCisJCWdvdG8gZXJyX2Rlc3Ryb3lfdHg0OworCWRtYS0+dHhfcmluZzUgPSByaW5nOworCisJLyogc2V0dXAgUlggRE1BIGNoYW5uZWxzLiAqLworCXJpbmcgPSBiY200M3h4X3NldHVwX2RtYXJpbmcoYmNtLCAwLCAwLCBkbWE2NCk7CisJaWYgKCFyaW5nKQorCQlnb3RvIGVycl9kZXN0cm95X3R4NTsKIAlkbWEtPnJ4X3JpbmcwID0gcmluZzsKIAogCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2IDwgNSkgewotCQlyaW5nID0gYmNtNDN4eF9zZXR1cF9kbWFyaW5nKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfQkFTRSwKLQkJCQkJICAgICBCQ000M3h4X1JYUklOR19TTE9UUywgMCk7CisJCXJpbmcgPSBiY200M3h4X3NldHVwX2RtYXJpbmcoYmNtLCAzLCAwLCBkbWE2NCk7CiAJCWlmICghcmluZykKIAkJCWdvdG8gZXJyX2Rlc3Ryb3lfcngwOwotCQlkbWEtPnJ4X3JpbmcxID0gcmluZzsKKwkJZG1hLT5yeF9yaW5nMyA9IHJpbmc7CiAJfQogCi0JZHByaW50ayhLRVJOX0lORk8gUEZYICJETUEgaW5pdGlhbGl6ZWRcbiIpOworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgRE1BIGluaXRpYWxpemVkXG4iLAorCQkJZG1hNjQgPyAiNjQtYml0IiA6ICIzMi1iaXQiKTsKIAllcnIgPSAwOwogb3V0OgogCXJldHVybiBlcnI7CkBAIC02MDUsNiArNzY0LDEyIEBACiBlcnJfZGVzdHJveV9yeDA6CiAJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT5yeF9yaW5nMCk7CiAJZG1hLT5yeF9yaW5nMCA9IE5VTEw7CitlcnJfZGVzdHJveV90eDU6CisJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nNSk7CisJZG1hLT50eF9yaW5nNSA9IE5VTEw7CitlcnJfZGVzdHJveV90eDQ6CisJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nNCk7CisJZG1hLT50eF9yaW5nNCA9IE5VTEw7CiBlcnJfZGVzdHJveV90eDM6CiAJYmNtNDN4eF9kZXN0cm95X2RtYXJpbmcoZG1hLT50eF9yaW5nMyk7CiAJZG1hLT50eF9yaW5nMyA9IE5VTEw7CkBAIC02MjQsNyArNzg5LDcgQEAKIHN0YXRpYyB1MTYgZ2VuZXJhdGVfY29va2llKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCiAJCQkgICBpbnQgc2xvdCkKIHsKLQl1MTYgY29va2llID0gMHhGMDAwOworCXUxNiBjb29raWUgPSAweDEwMDA7CiAKIAkvKiBVc2UgdGhlIHVwcGVyIDQgYml0cyBvZiB0aGUgY29va2llIGFzCiAJICogRE1BIGNvbnRyb2xsZXIgSUQgYW5kIHN0b3JlIHRoZSBzbG90IG51bWJlcgpAQCAtNjMyLDIxICs3OTcsMjUgQEAKIAkgKiBOb3RlIHRoYXQgdGhlIGNvb2tpZSBtdXN0IG5ldmVyIGJlIDAsIGFzIHRoaXMKIAkgKiBpcyBhIHNwZWNpYWwgdmFsdWUgdXNlZCBpbiBSWCBwYXRoLgogCSAqLwotCXN3aXRjaCAocmluZy0+bW1pb19iYXNlKSB7Ci0JZGVmYXVsdDoKLQkJYXNzZXJ0KDApOwotCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTFfQkFTRToKKwlzd2l0Y2ggKHJpbmctPmluZGV4KSB7CisJY2FzZSAwOgogCQljb29raWUgPSAweEEwMDA7CiAJCWJyZWFrOwotCWNhc2UgQkNNNDN4eF9NTUlPX0RNQTJfQkFTRToKKwljYXNlIDE6CiAJCWNvb2tpZSA9IDB4QjAwMDsKIAkJYnJlYWs7Ci0JY2FzZSBCQ000M3h4X01NSU9fRE1BM19CQVNFOgorCWNhc2UgMjoKIAkJY29va2llID0gMHhDMDAwOwogCQlicmVhazsKLQljYXNlIEJDTTQzeHhfTU1JT19ETUE0X0JBU0U6CisJY2FzZSAzOgogCQljb29raWUgPSAweEQwMDA7CiAJCWJyZWFrOworCWNhc2UgNDoKKwkJY29va2llID0gMHhFMDAwOworCQlicmVhazsKKwljYXNlIDU6CisJCWNvb2tpZSA9IDB4RjAwMDsKKwkJYnJlYWs7CiAJfQogCWFzc2VydCgoKHUxNilzbG90ICYgMHhGMDAwKSA9PSAweDAwMDApOwogCWNvb2tpZSB8PSAodTE2KXNsb3Q7CkBAIC02NzUsNiArODQ0LDEyIEBACiAJY2FzZSAweEQwMDA6CiAJCXJpbmcgPSBkbWEtPnR4X3JpbmczOwogCQlicmVhazsKKwljYXNlIDB4RTAwMDoKKwkJcmluZyA9IGRtYS0+dHhfcmluZzQ7CisJCWJyZWFrOworCWNhc2UgMHhGMDAwOgorCQlyaW5nID0gZG1hLT50eF9yaW5nNTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYXNzZXJ0KDApOwogCX0KQEAgLTY4Nyw2ICs4NjIsOSBAQAogc3RhdGljIHZvaWQgZG1hY29udHJvbGxlcl9wb2tlX3R4KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCiAJCQkJICBpbnQgc2xvdCkKIHsKKwl1MTYgb2Zmc2V0OworCWludCBkZXNjc2l6ZTsKKwogCS8qIEV2ZXJ5dGhpbmcgaXMgcmVhZHkgdG8gc3RhcnQuIEJ1ZmZlcnMgYXJlIERNQSBtYXBwZWQgYW5kCiAJICogYXNzb2NpYXRlZCB3aXRoIHNsb3RzLgogCSAqICJzbG90IiBpcyB0aGUgbGFzdCBzbG90IG9mIHRoZSBuZXcgZnJhbWUgd2Ugd2FudCB0byB0cmFuc21pdC4KQEAgLTY5NCwyNSArODcyLDI2IEBACiAJICovCiAJd21iKCk7CiAJc2xvdCA9IG5leHRfc2xvdChyaW5nLCBzbG90KTsKLQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQV9UWF9ERVNDX0lOREVYLAotCQkJICAodTMyKShzbG90ICogc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2MpKSk7CisJb2Zmc2V0ID0gKHJpbmctPmRtYTY0KSA/IEJDTTQzeHhfRE1BNjRfVFhJTkRFWCA6IEJDTTQzeHhfRE1BMzJfVFhJTkRFWDsKKwlkZXNjc2l6ZSA9IChyaW5nLT5kbWE2NCkgPyBzaXplb2Yoc3RydWN0IGJjbTQzeHhfZG1hZGVzYzY0KQorCQk6IHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIpOworCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIG9mZnNldCwKKwkJCSh1MzIpKHNsb3QgKiBkZXNjc2l6ZSkpOwogfQogCi1zdGF0aWMgaW50IGRtYV90eF9mcmFnbWVudChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAotCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCSAgIHU4IGN1cl9mcmFnKQorc3RhdGljIHZvaWQgZG1hX3R4X2ZyYWdtZW50KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICB1OCBjdXJfZnJhZykKIHsKIAlpbnQgc2xvdDsKLQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjICpkZXNjOworCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyAqZGVzYzsKIAlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKm1ldGE7Ci0JdTMyIGRlc2NfY3RsOwotCXUzMiBkZXNjX2FkZHI7CisJZG1hX2FkZHJfdCBkbWFhZGRyOwogCiAJYXNzZXJ0KHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPT0gMCk7CiAKIAlzbG90ID0gcmVxdWVzdF9zbG90KHJpbmcpOwotCWRlc2MgPSByaW5nLT52YmFzZSArIHNsb3Q7Ci0JbWV0YSA9IHJpbmctPm1ldGEgKyBzbG90OworCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCBzbG90LCAmbWV0YSk7CiAKIAkvKiBBZGQgYSBkZXZpY2Ugc3BlY2lmaWMgVFggaGVhZGVyLiAqLwogCWFzc2VydChza2JfaGVhZHJvb20oc2tiKSA+PSBzaXplb2Yoc3RydWN0IGJjbTQzeHhfdHhoZHIpKTsKQEAgLTcyOSwyOSArOTA4LDE0IEBACiAJCQkgICAgICAgZ2VuZXJhdGVfY29va2llKHJpbmcsIHNsb3QpKTsKIAogCW1ldGEtPnNrYiA9IHNrYjsKLQltZXRhLT5kbWFhZGRyID0gbWFwX2Rlc2NidWZmZXIocmluZywgc2tiLT5kYXRhLCBza2ItPmxlbiwgMSk7Ci0JaWYgKHVubGlrZWx5KG1ldGEtPmRtYWFkZHIgKyBza2ItPmxlbiA+IEJDTTQzeHhfRE1BX0JVU0FERFJNQVgpKSB7Ci0JCXJldHVybl9zbG90KHJpbmcsIHNsb3QpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICI+Pj5GQVRBTCBFUlJPUjw8PCAgRE1BIFRYIFNLQiA+MUcgIgotCQkJCSAgICAiKDB4JWxseCwgbGVuOiAldSlcbiIsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKW1ldGEtPmRtYWFkZHIsIHNrYi0+bGVuKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWRtYWFkZHIgPSBtYXBfZGVzY2J1ZmZlcihyaW5nLCBza2ItPmRhdGEsIHNrYi0+bGVuLCAxKTsKKwltZXRhLT5kbWFhZGRyID0gZG1hYWRkcjsKIAotCWRlc2NfYWRkciA9ICh1MzIpKG1ldGEtPmRtYWFkZHIgKyByaW5nLT5tZW1vZmZzZXQpOwotCWRlc2NfY3RsID0gQkNNNDN4eF9ETUFEVE9SX0ZSQU1FU1RBUlQgfCBCQ000M3h4X0RNQURUT1JfRlJBTUVFTkQ7Ci0JZGVzY19jdGwgfD0gQkNNNDN4eF9ETUFEVE9SX0NPTVBJUlE7Ci0JZGVzY19jdGwgfD0gKEJDTTQzeHhfRE1BRFRPUl9CWVRFQ05UX01BU0sgJgotCQkgICAgICh1MzIpKG1ldGEtPnNrYi0+bGVuIC0gcmluZy0+ZnJhbWVvZmZzZXQpKTsKLQlpZiAoc2xvdCA9PSByaW5nLT5ucl9zbG90cyAtIDEpCi0JCWRlc2NfY3RsIHw9IEJDTTQzeHhfRE1BRFRPUl9EVEFCTEVFTkQ7CisJZmlsbF9kZXNjcmlwdG9yKHJpbmcsIGRlc2MsIGRtYWFkZHIsCisJCQlza2ItPmxlbiwgMSwgMSwgMSk7CiAKLQlzZXRfZGVzY19jdGwoZGVzYywgZGVzY19jdGwpOwotCXNldF9kZXNjX2FkZHIoZGVzYywgZGVzY19hZGRyKTsKIAkvKiBOb3cgdHJhbnNmZXIgdGhlIHdob2xlIGZyYW1lLiAqLwogCWRtYWNvbnRyb2xsZXJfcG9rZV90eChyaW5nLCBzbG90KTsKLQotCXJldHVybiAwOwogfQogCiBpbnQgYmNtNDN4eF9kbWFfdHgoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLApAQCAtNzgxLDcgKzk0NSw2IEBACiAJCS8qIFRha2Ugc2tiIGZyb20gaWVlZTgwMjExX3R4Yl9mcmVlICovCiAJCXR4Yi0+ZnJhZ21lbnRzW2ldID0gTlVMTDsKIAkJZG1hX3R4X2ZyYWdtZW50KHJpbmcsIHNrYiwgaSk7Ci0JCS8vVE9ETzogaGFuZGxlIGZhaWx1cmUgb2YgZG1hX3R4X2ZyYWdtZW50CiAJfQogCWllZWU4MDIxMV90eGJfZnJlZSh0eGIpOwogCkBAIC03OTIsMjMgKzk1NSwyOCBAQAogCQkJCSAgIHN0cnVjdCBiY200M3h4X3htaXRzdGF0dXMgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nOwotCXN0cnVjdCBiY200M3h4X2RtYWRlc2MgKmRlc2M7CisJc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICpkZXNjOwogCXN0cnVjdCBiY200M3h4X2RtYWRlc2NfbWV0YSAqbWV0YTsKIAlpbnQgaXNfbGFzdF9mcmFnbWVudDsKIAlpbnQgc2xvdDsKKwl1MzIgdG1wOwogCiAJcmluZyA9IHBhcnNlX2Nvb2tpZShiY20sIHN0YXR1cy0+Y29va2llLCAmc2xvdCk7CiAJYXNzZXJ0KHJpbmcpOwogCWFzc2VydChyaW5nLT50eCk7Ci0JYXNzZXJ0KGdldF9kZXNjX2N0bChyaW5nLT52YmFzZSArIHNsb3QpICYgQkNNNDN4eF9ETUFEVE9SX0ZSQU1FU1RBUlQpOwogCXdoaWxlICgxKSB7CiAJCWFzc2VydChzbG90ID49IDAgJiYgc2xvdCA8IHJpbmctPm5yX3Nsb3RzKTsKLQkJZGVzYyA9IHJpbmctPnZiYXNlICsgc2xvdDsKLQkJbWV0YSA9IHJpbmctPm1ldGEgKyBzbG90OworCQlkZXNjID0gYmNtNDN4eF9kbWFfaWR4MmRlc2MocmluZywgc2xvdCwgJm1ldGEpOwogCi0JCWlzX2xhc3RfZnJhZ21lbnQgPSAhIShnZXRfZGVzY19jdGwoZGVzYykgJiBCQ000M3h4X0RNQURUT1JfRlJBTUVFTkQpOworCQlpZiAocmluZy0+ZG1hNjQpIHsKKwkJCXRtcCA9IGxlMzJfdG9fY3B1KGRlc2MtPmRtYTY0LmNvbnRyb2wwKTsKKwkJCWlzX2xhc3RfZnJhZ21lbnQgPSAhISh0bXAgJiBCQ000M3h4X0RNQTY0X0RDVEwwX0ZSQU1FRU5EKTsKKwkJfSBlbHNlIHsKKwkJCXRtcCA9IGxlMzJfdG9fY3B1KGRlc2MtPmRtYTMyLmNvbnRyb2wpOworCQkJaXNfbGFzdF9mcmFnbWVudCA9ICEhKHRtcCAmIEJDTTQzeHhfRE1BMzJfRENUTF9GUkFNRUVORCk7CisJCX0KIAkJdW5tYXBfZGVzY2J1ZmZlcihyaW5nLCBtZXRhLT5kbWFhZGRyLCBtZXRhLT5za2ItPmxlbiwgMSk7Ci0JCWZyZWVfZGVzY3JpcHRvcl9idWZmZXIocmluZywgZGVzYywgbWV0YSwgMSk7CisJCWZyZWVfZGVzY3JpcHRvcl9idWZmZXIocmluZywgbWV0YSwgMSk7CiAJCS8qIEV2ZXJ5dGhpbmcgYmVsb25naW5nIHRvIHRoZSBzbG90IGlzIHVubWFwcGVkCiAJCSAqIGFuZCBmcmVlZCwgc28gd2UgY2FuIHJldHVybiBpdC4KIAkJICovCkBAIC04MjQsNyArOTkyLDcgQEAKIHN0YXRpYyB2b2lkIGRtYV9yeChzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAogCQkgICBpbnQgKnNsb3QpCiB7Ci0Jc3RydWN0IGJjbTQzeHhfZG1hZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2M7CiAJc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhICptZXRhOwogCXN0cnVjdCBiY200M3h4X3J4aGRyICpyeGhkcjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtODMyLDEzICsxMDAwLDEyIEBACiAJaW50IGVycjsKIAlkbWFfYWRkcl90IGRtYWFkZHI7CiAKLQlkZXNjID0gcmluZy0+dmJhc2UgKyAqc2xvdDsKLQltZXRhID0gcmluZy0+bWV0YSArICpzbG90OworCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCAqc2xvdCwgJm1ldGEpOwogCiAJc3luY19kZXNjYnVmZmVyX2Zvcl9jcHUocmluZywgbWV0YS0+ZG1hYWRkciwgcmluZy0+cnhfYnVmZmVyc2l6ZSk7CiAJc2tiID0gbWV0YS0+c2tiOwogCi0JaWYgKHJpbmctPm1taW9fYmFzZSA9PSBCQ000M3h4X01NSU9fRE1BNF9CQVNFKSB7CisJaWYgKHJpbmctPmluZGV4ID09IDMpIHsKIAkJLyogV2UgcmVjZWl2ZWQgYW4geG1pdCBzdGF0dXMuICovCiAJCXN0cnVjdCBiY200M3h4X2h3eG1pdHN0YXR1cyAqaHcgPSAoc3RydWN0IGJjbTQzeHhfaHd4bWl0c3RhdHVzICopc2tiLT5kYXRhOwogCQlzdHJ1Y3QgYmNtNDN4eF94bWl0c3RhdHVzIHN0YXQ7CkBAIC04OTQsOCArMTA2MSw3IEBACiAJCXMzMiB0bXAgPSBsZW47CiAKIAkJd2hpbGUgKDEpIHsKLQkJCWRlc2MgPSByaW5nLT52YmFzZSArICpzbG90OwotCQkJbWV0YSA9IHJpbmctPm1ldGEgKyAqc2xvdDsKKwkJCWRlc2MgPSBiY200M3h4X2RtYV9pZHgyZGVzYyhyaW5nLCAqc2xvdCwgJm1ldGEpOwogCQkJLyogcmVjeWNsZSB0aGUgZGVzY3JpcHRvciBidWZmZXIuICovCiAJCQlzeW5jX2Rlc2NidWZmZXJfZm9yX2RldmljZShyaW5nLCBtZXRhLT5kbWFhZGRyLAogCQkJCQkJICAgcmluZy0+cnhfYnVmZmVyc2l6ZSk7CkBAIC05MDYsOCArMTA3Miw4IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJcHJpbnRrbChLRVJOX0VSUiBQRlggIkRNQSBSWCBidWZmZXIgdG9vIHNtYWxsICIKLQkJCQkgICAgICIobGVuOiAldSwgYnVmZmVyOiAldSwgbnItZHJvcHBlZDogJWQpXG4iLAotCQkgICAgICAgIGxlbiwgcmluZy0+cnhfYnVmZmVyc2l6ZSwgY250KTsKKwkJCSIobGVuOiAldSwgYnVmZmVyOiAldSwgbnItZHJvcHBlZDogJWQpXG4iLAorCQkJbGVuLCByaW5nLT5yeF9idWZmZXJzaXplLCBjbnQpOwogCQlnb3RvIGRyb3A7CiAJfQogCWxlbiAtPSBJRUVFODAyMTFfRkNTX0xFTjsKQEAgLTk0NSw5ICsxMTExLDE1IEBACiAjZW5kaWYKIAogCWFzc2VydCghcmluZy0+dHgpOwotCXN0YXR1cyA9IGJjbTQzeHhfZG1hX3JlYWQocmluZywgQkNNNDN4eF9ETUFfUlhfU1RBVFVTKTsKLQlkZXNjcHRyID0gKHN0YXR1cyAmIEJDTTQzeHhfRE1BX1JYU1RBVF9EUFRSX01BU0spOwotCWN1cnJlbnRfc2xvdCA9IGRlc2NwdHIgLyBzaXplb2Yoc3RydWN0IGJjbTQzeHhfZG1hZGVzYyk7CisJaWYgKHJpbmctPmRtYTY0KSB7CisJCXN0YXR1cyA9IGJjbTQzeHhfZG1hX3JlYWQocmluZywgQkNNNDN4eF9ETUE2NF9SWFNUQVRVUyk7CisJCWRlc2NwdHIgPSAoc3RhdHVzICYgQkNNNDN4eF9ETUE2NF9SWFNUQVREUFRSKTsKKwkJY3VycmVudF9zbG90ID0gZGVzY3B0ciAvIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjNjQpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IGJjbTQzeHhfZG1hX3JlYWQocmluZywgQkNNNDN4eF9ETUEzMl9SWFNUQVRVUyk7CisJCWRlc2NwdHIgPSAoc3RhdHVzICYgQkNNNDN4eF9ETUEzMl9SWERQVFIpOworCQljdXJyZW50X3Nsb3QgPSBkZXNjcHRyIC8gc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2MzMik7CisJfQogCWFzc2VydChjdXJyZW50X3Nsb3QgPj0gMCAmJiBjdXJyZW50X3Nsb3QgPCByaW5nLT5ucl9zbG90cyk7CiAKIAlzbG90ID0gcmluZy0+Y3VycmVudF9zbG90OwpAQCAtOTU4LDggKzExMzAsMTMgQEAKIAkJCXJpbmctPm1heF91c2VkX3Nsb3RzID0gdXNlZF9zbG90czsKICNlbmRpZgogCX0KLQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQV9SWF9ERVNDX0lOREVYLAotCQkJICAodTMyKShzbG90ICogc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2MpKSk7CisJaWYgKHJpbmctPmRtYTY0KSB7CisJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfUlhJTkRFWCwKKwkJCQkodTMyKShzbG90ICogc2l6ZW9mKHN0cnVjdCBiY200M3h4X2RtYWRlc2M2NCkpKTsKKwl9IGVsc2UgeworCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1JYSU5ERVgsCisJCQkJKHUzMikoc2xvdCAqIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIpKSk7CisJfQogCXJpbmctPmN1cnJlbnRfc2xvdCA9IHNsb3Q7CiB9CiAKQEAgLTk2NywxNiArMTE0NCwyOCBAQAogewogCWFzc2VydChyaW5nLT50eCk7CiAJYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMocmluZy0+YmNtLCAtMSwgMSk7Ci0JYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUFfVFhfQ09OVFJPTCwKLQkJCSAgYmNtNDN4eF9kbWFfcmVhZChyaW5nLCBCQ000M3h4X0RNQV9UWF9DT05UUk9MKQotCQkJICB8IEJDTTQzeHhfRE1BX1RYQ1RSTF9TVVNQRU5EKTsKKwlpZiAocmluZy0+ZG1hNjQpIHsKKwkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUE2NF9UWENUTCwKKwkJCQliY200M3h4X2RtYV9yZWFkKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhDVEwpCisJCQkJfCBCQ000M3h4X0RNQTY0X1RYU1VTUEVORCk7CisJfSBlbHNlIHsKKwkJYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUEzMl9UWENUTCwKKwkJCQliY200M3h4X2RtYV9yZWFkKHJpbmcsIEJDTTQzeHhfRE1BMzJfVFhDVEwpCisJCQkJfCBCQ000M3h4X0RNQTMyX1RYU1VTUEVORCk7CisJfQogfQogCiB2b2lkIGJjbTQzeHhfZG1hX3R4X3Jlc3VtZShzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nKQogewogCWFzc2VydChyaW5nLT50eCk7Ci0JYmNtNDN4eF9kbWFfd3JpdGUocmluZywgQkNNNDN4eF9ETUFfVFhfQ09OVFJPTCwKLQkJCSAgYmNtNDN4eF9kbWFfcmVhZChyaW5nLCBCQ000M3h4X0RNQV9UWF9DT05UUk9MKQotCQkJICAmIH5CQ000M3h4X0RNQV9UWENUUkxfU1VTUEVORCk7CisJaWYgKHJpbmctPmRtYTY0KSB7CisJCWJjbTQzeHhfZG1hX3dyaXRlKHJpbmcsIEJDTTQzeHhfRE1BNjRfVFhDVEwsCisJCQkJYmNtNDN4eF9kbWFfcmVhZChyaW5nLCBCQ000M3h4X0RNQTY0X1RYQ1RMKQorCQkJCSYgfkJDTTQzeHhfRE1BNjRfVFhTVVNQRU5EKTsKKwl9IGVsc2UgeworCQliY200M3h4X2RtYV93cml0ZShyaW5nLCBCQ000M3h4X0RNQTMyX1RYQ1RMLAorCQkJCWJjbTQzeHhfZG1hX3JlYWQocmluZywgQkNNNDN4eF9ETUEzMl9UWENUTCkKKwkJCQkmIH5CQ000M3h4X0RNQTMyX1RYU1VTUEVORCk7CisJfQogCWJjbTQzeHhfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKHJpbmctPmJjbSwgLTEsIC0xKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kbWEuaAppbmRleCBiN2Q3NzYzLi5lMDRiY2FkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZG1hLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RtYS5oCkBAIC0xNCw2MyArMTQsMTc5IEBACiAjZGVmaW5lIEJDTTQzeHhfRE1BSVJRX05PTkZBVEFMTUFTSwkoMSA8PCAxMykKICNkZWZpbmUgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORQkJKDEgPDwgMTYpCiAKLS8qIERNQSBjb250cm9sbGVyIHJlZ2lzdGVyIG9mZnNldHMuIChyZWxhdGl2ZSB0byBCQ000M3h4X0RNQSNfQkFTRSkgKi8KLSNkZWZpbmUgQkNNNDN4eF9ETUFfVFhfQ09OVFJPTAkJMHgwMAotI2RlZmluZSBCQ000M3h4X0RNQV9UWF9ERVNDX1JJTkcJMHgwNAotI2RlZmluZSBCQ000M3h4X0RNQV9UWF9ERVNDX0lOREVYCTB4MDgKLSNkZWZpbmUgQkNNNDN4eF9ETUFfVFhfU1RBVFVTCQkweDBjCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1JYX0NPTlRST0wJCTB4MTAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfUlhfREVTQ19SSU5HCTB4MTQKLSNkZWZpbmUgQkNNNDN4eF9ETUFfUlhfREVTQ19JTkRFWAkweDE4Ci0jZGVmaW5lIEJDTTQzeHhfRE1BX1JYX1NUQVRVUwkJMHgxYwogCi0vKiBETUEgY29udHJvbGxlciBjaGFubmVsIGNvbnRyb2wgd29yZCB2YWx1ZXMuICovCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1RYQ1RSTF9FTkFCTEUJCSgxIDw8IDApCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1RYQ1RSTF9TVVNQRU5ECQkoMSA8PCAxKQotI2RlZmluZSBCQ000M3h4X0RNQV9UWENUUkxfTE9PUEJBQ0sJCSgxIDw8IDIpCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1RYQ1RSTF9GTFVTSAkJKDEgPDwgNCkKLSNkZWZpbmUgQkNNNDN4eF9ETUFfUlhDVFJMX0VOQUJMRQkJKDEgPDwgMCkKLSNkZWZpbmUgQkNNNDN4eF9ETUFfUlhDVFJMX0ZSQU1FT0ZGX01BU0sJMHgwMDAwMDBmZQotI2RlZmluZSBCQ000M3h4X0RNQV9SWENUUkxfRlJBTUVPRkZfU0hJRlQJMQotI2RlZmluZSBCQ000M3h4X0RNQV9SWENUUkxfUElPCQkJKDEgPDwgOCkKLS8qIERNQSBjb250cm9sbGVyIGNoYW5uZWwgc3RhdHVzIHdvcmQgdmFsdWVzLiAqLwotI2RlZmluZSBCQ000M3h4X0RNQV9UWFNUQVRfRFBUUl9NQVNLCQkweDAwMDAwZmZmCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1RYU1RBVF9TVEFUX01BU0sJCTB4MDAwMGYwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfVFhTVEFUX1NUQVRfRElTQUJMRUQJMHgwMDAwMDAwMAotI2RlZmluZSBCQ000M3h4X0RNQV9UWFNUQVRfU1RBVF9BQ1RJVkUJCTB4MDAwMDEwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfVFhTVEFUX1NUQVRfSURMRVdBSVQJMHgwMDAwMjAwMAotI2RlZmluZSBCQ000M3h4X0RNQV9UWFNUQVRfU1RBVF9TVE9QUEVECQkweDAwMDAzMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1RYU1RBVF9TVEFUX1NVU1AJCTB4MDAwMDQwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfVFhTVEFUX0VSUk9SX01BU0sJCTB4MDAwZjAwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfVFhTVEFUX0ZMVVNIRUQJCSgxIDw8IDIwKQotI2RlZmluZSBCQ000M3h4X0RNQV9SWFNUQVRfRFBUUl9NQVNLCQkweDAwMDAwZmZmCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1JYU1RBVF9TVEFUX01BU0sJCTB4MDAwMGYwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfUlhTVEFUX1NUQVRfRElTQUJMRUQJMHgwMDAwMDAwMAotI2RlZmluZSBCQ000M3h4X0RNQV9SWFNUQVRfU1RBVF9BQ1RJVkUJCTB4MDAwMDEwMDAKLSNkZWZpbmUgQkNNNDN4eF9ETUFfUlhTVEFUX1NUQVRfSURMRVdBSVQJMHgwMDAwMjAwMAotI2RlZmluZSBCQ000M3h4X0RNQV9SWFNUQVRfU1RBVF9SRVNFUlZFRAkweDAwMDAzMDAwCi0jZGVmaW5lIEJDTTQzeHhfRE1BX1JYU1RBVF9TVEFUX0VSUk9SUwkJMHgwMDAwNDAwMAotI2RlZmluZSBCQ000M3h4X0RNQV9SWFNUQVRfRVJST1JfTUFTSwkJMHgwMDBmMDAwMAorLyoqKiAzMi1iaXQgRE1BIEVuZ2luZS4gKioqLwogCi0vKiBETUEgZGVzY3JpcHRvciBjb250cm9sIGZpZWxkIHZhbHVlcy4gKi8KLSNkZWZpbmUgQkNNNDN4eF9ETUFEVE9SX0JZVEVDTlRfTUFTSwkJMHgwMDAwMWZmZgotI2RlZmluZSBCQ000M3h4X0RNQURUT1JfRFRBQkxFRU5ECQkoMSA8PCAyOCkgLyogRW5kIG9mIGRlc2NyaXB0b3IgdGFibGUgKi8KLSNkZWZpbmUgQkNNNDN4eF9ETUFEVE9SX0NPTVBJUlEJCQkoMSA8PCAyOSkgLyogSVJRIG9uIGNvbXBsZXRpb24gcmVxdWVzdCAqLwotI2RlZmluZSBCQ000M3h4X0RNQURUT1JfRlJBTUVFTkQJCSgxIDw8IDMwKQotI2RlZmluZSBCQ000M3h4X0RNQURUT1JfRlJBTUVTVEFSVAkJKDEgPDwgMzEpCisvKiAzMi1iaXQgRE1BIGNvbnRyb2xsZXIgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBCQ000M3h4X0RNQTMyX1RYQ1RMCQkJCTB4MDAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfVFhFTkFCTEUJCQkweDAwMDAwMDAxCisjZGVmaW5lCQlCQ000M3h4X0RNQTMyX1RYU1VTUEVORAkJCTB4MDAwMDAwMDIKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfVFhMT09QQkFDSwkJMHgwMDAwMDAwNAorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEZMVVNICQkJMHgwMDAwMDAxMAorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEFERFJFWFRfTUFTSwkJMHgwMDAzMDAwMAorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEFERFJFWFRfU0hJRlQJCTE2CisjZGVmaW5lIEJDTTQzeHhfRE1BMzJfVFhSSU5HCQkJCTB4MDQKKyNkZWZpbmUgQkNNNDN4eF9ETUEzMl9UWElOREVYCQkJCTB4MDgKKyNkZWZpbmUgQkNNNDN4eF9ETUEzMl9UWFNUQVRVUwkJCQkweDBDCisjZGVmaW5lCQlCQ000M3h4X0RNQTMyX1RYRFBUUgkJCTB4MDAwMDBGRkYKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfVFhTVEFURQkJCTB4MDAwMEYwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYU1RBVF9ESVNBQkxFRAkweDAwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWFNUQVRfQUNUSVZFCTB4MDAwMDEwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYU1RBVF9JRExFV0FJVAkweDAwMDAyMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWFNUQVRfU1RPUFBFRAkweDAwMDAzMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWFNUQVRfU1VTUAkweDAwMDA0MDAwCisjZGVmaW5lCQlCQ000M3h4X0RNQTMyX1RYRVJST1IJCQkweDAwMEYwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWEVSUl9OT0VSUgkweDAwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9UWEVSUl9QUk9UCTB4MDAwMTAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYRVJSX1VOREVSUlVOCTB4MDAwMjAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTMyX1RYRVJSX0JVRlJFQUQJMHgwMDAzMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfVFhFUlJfREVTQ1JFQUQJMHgwMDA0MDAwMAorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9UWEFDVElWRQkJCTB4RkZGMDAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUEzMl9SWENUTAkJCQkweDEwCisjZGVmaW5lCQlCQ000M3h4X0RNQTMyX1JYRU5BQkxFCQkJMHgwMDAwMDAwMQorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWEZST0ZGX01BU0sJCTB4MDAwMDAwRkUKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfUlhGUk9GRl9TSElGVAkJMQorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWERJUkVDVEZJRk8JCTB4MDAwMDAxMDAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfUlhBRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfUlhBRERSRVhUX1NISUZUCQkxNgorI2RlZmluZSBCQ000M3h4X0RNQTMyX1JYUklORwkJCQkweDE0CisjZGVmaW5lIEJDTTQzeHhfRE1BMzJfUlhJTkRFWAkJCQkweDE4CisjZGVmaW5lIEJDTTQzeHhfRE1BMzJfUlhTVEFUVVMJCQkJMHgxQworI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWERQVFIJCQkweDAwMDAwRkZGCisjZGVmaW5lCQlCQ000M3h4X0RNQTMyX1JYU1RBVEUJCQkweDAwMDBGMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWFNUQVRfRElTQUJMRUQJMHgwMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhTVEFUX0FDVElWRQkweDAwMDAxMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWFNUQVRfSURMRVdBSVQJMHgwMDAwMjAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhTVEFUX1NUT1BQRUQJMHgwMDAwMzAwMAorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9SWEVSUk9SCQkJMHgwMDBGMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhFUlJfTk9FUlIJMHgwMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BMzJfUlhFUlJfUFJPVAkweDAwMDEwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWEVSUl9PVkVSRkxPVwkweDAwMDIwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWEVSUl9CVUZXUklURQkweDAwMDMwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUEzMl9SWEVSUl9ERVNDUkVBRAkweDAwMDQwMDAwCisjZGVmaW5lCQlCQ000M3h4X0RNQTMyX1JYQUNUSVZFCQkJMHhGRkYwMDAwMAorCisvKiAzMi1iaXQgRE1BIGRlc2NyaXB0b3IuICovCitzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIgeworCV9fbGUzMiBjb250cm9sOworCV9fbGUzMiBhZGRyZXNzOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisjZGVmaW5lIEJDTTQzeHhfRE1BMzJfRENUTF9CWVRFQ05UCQkweDAwMDAxRkZGCisjZGVmaW5lIEJDTTQzeHhfRE1BMzJfRENUTF9BRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUEzMl9EQ1RMX0FERFJFWFRfU0hJRlQJMTYKKyNkZWZpbmUgQkNNNDN4eF9ETUEzMl9EQ1RMX0RUQUJMRUVORAkJMHgxMDAwMDAwMAorI2RlZmluZSBCQ000M3h4X0RNQTMyX0RDVExfSVJRCQkJMHgyMDAwMDAwMAorI2RlZmluZSBCQ000M3h4X0RNQTMyX0RDVExfRlJBTUVFTkQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUEzMl9EQ1RMX0ZSQU1FU1RBUlQJCTB4ODAwMDAwMDAKKworLyogQWRkcmVzcyBmaWVsZCBSb3V0aW5nIHZhbHVlLiAqLworI2RlZmluZSBCQ000M3h4X0RNQTMyX1JPVVRJTkcJCQkweEMwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfRE1BMzJfUk9VVElOR19TSElGVAkJMzAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BMzJfTk9UUkFOUwkJMHgwMDAwMDAwMAorI2RlZmluZQkJQkNNNDN4eF9ETUEzMl9DTElFTlRUUkFOUwkweDQwMDAwMDAwCisKKworCisvKioqIDY0LWJpdCBETUEgRW5naW5lLiAqKiovCisKKy8qIDY0LWJpdCBETUEgY29udHJvbGxlciByZWdpc3RlcnMuICovCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfVFhDVEwJCQkJMHgwMAorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWEVOQUJMRQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfVFhTVVNQRU5ECQkJMHgwMDAwMDAwMgorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWExPT1BCQUNLCQkweDAwMDAwMDA0CisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYRkxVU0gJCQkweDAwMDAwMDEwCisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYQUREUkVYVF9NQVNLCQkweDAwMDMwMDAwCisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYQUREUkVYVF9TSElGVAkJMTYKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9UWElOREVYCQkJCTB4MDQKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9UWFJJTkdMTwkJCQkweDA4CisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfVFhSSU5HSEkJCQkJMHgwQworI2RlZmluZSBCQ000M3h4X0RNQTY0X1RYU1RBVFVTCQkJCTB4MTAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfVFhTVEFURFBUUgkJMHgwMDAwMUZGRgorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWFNUQVQJCQkweEYwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWFNUQVRfRElTQUJMRUQJMHgwMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhTVEFUX0FDVElWRQkweDEwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWFNUQVRfSURMRVdBSVQJMHgyMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhTVEFUX1NUT1BQRUQJMHgzMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhTVEFUX1NVU1AJMHg0MDAwMDAwMAorI2RlZmluZSBCQ000M3h4X0RNQTY0X1RYRVJST1IJCQkJMHgxNAorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9UWEVSUkRQVFIJCQkweDAwMDFGRkZGCisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1RYRVJSCQkJMHhGMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhFUlJfTk9FUlIJMHgwMDAwMDAwMAorI2RlZmluZQkJCUJDTTQzeHhfRE1BNjRfVFhFUlJfUFJPVAkweDEwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9VTkRFUlJVTgkweDIwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9UUkFOU0ZFUgkweDMwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9ERVNDUkVBRAkweDQwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9UWEVSUl9DT1JFCTB4NTAwMDAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9SWENUTAkJCQkweDIwCisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1JYRU5BQkxFCQkJMHgwMDAwMDAwMQorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9SWEZST0ZGX01BU0sJCTB4MDAwMDAwRkUKKyNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhGUk9GRl9TSElGVAkJMQorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9SWERJUkVDVEZJRk8JCTB4MDAwMDAxMDAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhBRERSRVhUX01BU0sJCTB4MDAwMzAwMDAKKyNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhBRERSRVhUX1NISUZUCQkxNgorI2RlZmluZSBCQ000M3h4X0RNQTY0X1JYSU5ERVgJCQkJMHgyNAorI2RlZmluZSBCQ000M3h4X0RNQTY0X1JYUklOR0xPCQkJCTB4MjgKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9SWFJJTkdISQkJCQkweDJDCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfUlhTVEFUVVMJCQkJMHgzMAorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9SWFNUQVREUFRSCQkweDAwMDAxRkZGCisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1JYU1RBVAkJCTB4RjAwMDAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYU1RBVF9ESVNBQkxFRAkweDAwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWFNUQVRfQUNUSVZFCTB4MTAwMDAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYU1RBVF9JRExFV0FJVAkweDIwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWFNUQVRfU1RPUFBFRAkweDMwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWFNUQVRfU1VTUAkweDQwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfUlhFUlJPUgkJCQkweDM0CisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X1JYRVJSRFBUUgkJCTB4MDAwMUZGRkYKKyNkZWZpbmUJCUJDTTQzeHhfRE1BNjRfUlhFUlIJCQkweEYwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWEVSUl9OT0VSUgkweDAwMDAwMDAwCisjZGVmaW5lCQkJQkNNNDN4eF9ETUE2NF9SWEVSUl9QUk9UCTB4MTAwMDAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX1VOREVSUlVOCTB4MjAwMDAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX1RSQU5TRkVSCTB4MzAwMDAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX0RFU0NSRUFECTB4NDAwMDAwMDAKKyNkZWZpbmUJCQlCQ000M3h4X0RNQTY0X1JYRVJSX0NPUkUJMHg1MDAwMDAwMAorCisvKiA2NC1iaXQgRE1BIGRlc2NyaXB0b3IuICovCitzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjNjQgeworCV9fbGUzMiBjb250cm9sMDsKKwlfX2xlMzIgY29udHJvbDE7CisJX19sZTMyIGFkZHJlc3NfbG93OworCV9fbGUzMiBhZGRyZXNzX2hpZ2g7Cit9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9EQ1RMMF9EVEFCTEVFTkQJCTB4MTAwMDAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9EQ1RMMF9JUlEJCQkweDIwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfRENUTDBfRlJBTUVFTkQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9EQ1RMMF9GUkFNRVNUQVJUCQkweDgwMDAwMDAwCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfRENUTDFfQllURUNOVAkJMHgwMDAwMUZGRgorI2RlZmluZSBCQ000M3h4X0RNQTY0X0RDVEwxX0FERFJFWFRfTUFTSwkweDAwMDMwMDAwCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfRENUTDFfQUREUkVYVF9TSElGVAkxNgorCisvKiBBZGRyZXNzIGZpZWxkIFJvdXRpbmcgdmFsdWUuICovCisjZGVmaW5lIEJDTTQzeHhfRE1BNjRfUk9VVElORwkJCTB4QzAwMDAwMDAKKyNkZWZpbmUgQkNNNDN4eF9ETUE2NF9ST1VUSU5HX1NISUZUCQkzMAorI2RlZmluZQkJQkNNNDN4eF9ETUE2NF9OT1RSQU5TCQkweDAwMDAwMDAwCisjZGVmaW5lCQlCQ000M3h4X0RNQTY0X0NMSUVOVFRSQU5TCTB4ODAwMDAwMDAKKworCisKK3N0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyB7CisJdW5pb24geworCQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIgZG1hMzI7CisJCXN0cnVjdCBiY200M3h4X2RtYWRlc2M2NCBkbWE2NDsKKwl9IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCiAKIC8qIE1pc2MgRE1BIGNvbnN0YW50cyAqLwogI2RlZmluZSBCQ000M3h4X0RNQV9SSU5HTUVNU0laRQkJUEFHRV9TSVpFCi0jZGVmaW5lIEJDTTQzeHhfRE1BX0JVU0FERFJNQVgJCTB4M0ZGRkZGRkYKLSNkZWZpbmUgQkNNNDN4eF9ETUFfRE1BQlVTQUREUk9GRlNFVAkoMSA8PCAzMCkKLSNkZWZpbmUgQkNNNDN4eF9ETUExX1JYX0ZSQU1FT0ZGU0VUCTMwCi0jZGVmaW5lIEJDTTQzeHhfRE1BNF9SWF9GUkFNRU9GRlNFVAkwCisjZGVmaW5lIEJDTTQzeHhfRE1BMF9SWF9GUkFNRU9GRlNFVAkzMAorI2RlZmluZSBCQ000M3h4X0RNQTNfUlhfRlJBTUVPRkZTRVQJMAorCiAKIC8qIERNQSBlbmdpbmUgdHVuaW5nIGtub2JzICovCiAjZGVmaW5lIEJDTTQzeHhfVFhSSU5HX1NMT1RTCQk1MTIKICNkZWZpbmUgQkNNNDN4eF9SWFJJTkdfU0xPVFMJCTY0Ci0jZGVmaW5lIEJDTTQzeHhfRE1BMV9SWEJVRkZFUlNJWkUJKDIzMDQgKyAxMDApCi0jZGVmaW5lIEJDTTQzeHhfRE1BNF9SWEJVRkZFUlNJWkUJMTYKKyNkZWZpbmUgQkNNNDN4eF9ETUEwX1JYX0JVRkZFUlNJWkUJKDIzMDQgKyAxMDApCisjZGVmaW5lIEJDTTQzeHhfRE1BM19SWF9CVUZGRVJTSVpFCTE2CiAvKiBTdXNwZW5kIHRoZSB0eCBxdWV1ZSwgaWYgbGVzcyB0aGFuIHRoaXMgcGVyY2VudCBzbG90cyBhcmUgZnJlZS4gKi8KICNkZWZpbmUgQkNNNDN4eF9UWFNVU1BFTkRfUEVSQ0VOVAkyMAogLyogUmVzdW1lIHRoZSB0eCBxdWV1ZSwgaWYgbW9yZSB0aGFuIHRoaXMgcGVyY2VudCBzbG90cyBhcmUgZnJlZS4gKi8KQEAgLTg2LDE3ICsyMDIsNiBAQAogc3RydWN0IGJjbTQzeHhfeG1pdHN0YXR1czsKIAogCi1zdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjIHsKLQlfX2xlMzIgX2NvbnRyb2w7Ci0JX19sZTMyIF9hZGRyZXNzOwotfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7Ci0KLS8qIE1hY3JvcyB0byBhY2Nlc3MgdGhlIGJjbTQzeHhfZG1hZGVzYyBzdHJ1Y3QgKi8KLSNkZWZpbmUgZ2V0X2Rlc2NfY3RsKGRlc2MpCQlsZTMyX3RvX2NwdSgoZGVzYyktPl9jb250cm9sKQotI2RlZmluZSBzZXRfZGVzY19jdGwoZGVzYywgY3RsKQkJZG8geyAoZGVzYyktPl9jb250cm9sID0gY3B1X3RvX2xlMzIoY3RsKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZ2V0X2Rlc2NfYWRkcihkZXNjKQkJbGUzMl90b19jcHUoKGRlc2MpLT5fYWRkcmVzcykKLSNkZWZpbmUgc2V0X2Rlc2NfYWRkcihkZXNjLCBhZGRyKQlkbyB7IChkZXNjKS0+X2FkZHJlc3MgPSBjcHVfdG9fbGUzMihhZGRyKTsgfSB3aGlsZSAoMCkKLQogc3RydWN0IGJjbTQzeHhfZG1hZGVzY19tZXRhIHsKIAkvKiBUaGUga2VybmVsIERNQS1hYmxlIGJ1ZmZlci4gKi8KIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwpAQCAtMTA1LDE1ICsyMTAsMTQgQEAKIH07CiAKIHN0cnVjdCBiY200M3h4X2RtYXJpbmcgewotCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbTsKIAkvKiBLZXJuZWwgdmlydHVhbCBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJpbmcgbWVtb3J5LiAqLwotCXN0cnVjdCBiY200M3h4X2RtYWRlc2MgKnZiYXNlOwotCS8qIERNQSBtZW1vcnkgb2Zmc2V0ICovCi0JZG1hX2FkZHJfdCBtZW1vZmZzZXQ7Ci0JLyogKFVuYWRqdXN0ZWQpIERNQSBiYXNlIGJ1cy1hZGRyZXNzIG9mIHRoZSByaW5nIG1lbW9yeS4gKi8KLQlkbWFfYWRkcl90IGRtYWJhc2U7CisJdm9pZCAqZGVzY2Jhc2U7CiAJLyogTWV0YSBkYXRhIGFib3V0IGFsbCBkZXNjcmlwdG9ycy4gKi8KIAlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKm1ldGE7CisJLyogRE1BIFJvdXRpbmcgdmFsdWUuICovCisJdTMyIHJvdXRpbmc7CisJLyogKFVuYWRqdXN0ZWQpIERNQSBiYXNlIGJ1cy1hZGRyZXNzIG9mIHRoZSByaW5nIG1lbW9yeS4gKi8KKwlkbWFfYWRkcl90IGRtYWJhc2U7CiAJLyogTnVtYmVyIG9mIGRlc2NyaXB0b3Igc2xvdHMgaW4gdGhlIHJpbmcuICovCiAJaW50IG5yX3Nsb3RzOwogCS8qIE51bWJlciBvZiB1c2VkIGRlc2NyaXB0b3Igc2xvdHMuICovCkBAIC0xMjcsMTIgKzIzMSwxNyBAQAogCXUzMiBmcmFtZW9mZnNldDsKIAkvKiBEZXNjcmlwdG9yIGJ1ZmZlciBzaXplLiAqLwogCXUxNiByeF9idWZmZXJzaXplOwotCS8qIFRoZSBNTUlPIGJhc2UgcmVnaXN0ZXIgb2YgdGhlIERNQSBjb250cm9sbGVyLCB0aGlzCi0JICogcmluZyBpcyBwb3N0ZWQgdG8uCi0JICovCisJLyogVGhlIE1NSU8gYmFzZSByZWdpc3RlciBvZiB0aGUgRE1BIGNvbnRyb2xsZXIuICovCiAJdTE2IG1taW9fYmFzZTsKLQl1OCB0eDoxLAkvKiBUUlVFLCBpZiB0aGlzIGlzIGEgVFggcmluZy4gKi8KLQkgICBzdXNwZW5kZWQ6MTsJLyogVFJVRSwgaWYgdHJhbnNmZXJzIGFyZSBzdXNwZW5kZWQgb24gdGhpcyByaW5nLiAqLworCS8qIERNQSBjb250cm9sbGVyIGluZGV4IG51bWJlciAoMC01KS4gKi8KKwlpbnQgaW5kZXg7CisJLyogQm9vbGVhbi4gSXMgdGhpcyBhIFRYIHJpbmc/ICovCisJdTggdHg7CisJLyogQm9vbGVhbi4gNjRiaXQgRE1BIGlmIHRydWUsIDMyYml0IERNQSBvdGhlcndpc2UuICovCisJdTggZG1hNjQ7CisJLyogQm9vbGVhbi4gQXJlIHRyYW5zZmVycyBzdXNwZW5kZWQgb24gdGhpcyByaW5nPyAqLworCXU4IHN1c3BlbmRlZDsKKwlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY207CiAjaWZkZWYgQ09ORklHX0JDTTQzWFhfREVCVUcKIAkvKiBNYXhpbXVtIG51bWJlciBvZiB1c2VkIHNsb3RzLiAqLwogCWludCBtYXhfdXNlZF9zbG90czsKQEAgLTE0MSw2ICsyNTAsMzQgQEAKIAogCiBzdGF0aWMgaW5saW5lCitpbnQgYmNtNDN4eF9kbWFfZGVzYzJpZHgoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZywKKwkJCSBzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKmRlc2MpCit7CisJaWYgKHJpbmctPmRtYTY0KSB7CisJCXN0cnVjdCBiY200M3h4X2RtYWRlc2M2NCAqZGQ2NCA9IHJpbmctPmRlc2NiYXNlOworCQlyZXR1cm4gKGludCkoJihkZXNjLT5kbWE2NCkgLSBkZDY0KTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjMzIgKmRkMzIgPSByaW5nLT5kZXNjYmFzZTsKKwkJcmV0dXJuIChpbnQpKCYoZGVzYy0+ZG1hMzIpIC0gZGQzMik7CisJfQorfQorCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX2dlbmVyaWMgKiBiY200M3h4X2RtYV9pZHgyZGVzYyhzdHJ1Y3QgYmNtNDN4eF9kbWFyaW5nICpyaW5nLAorCQkJCQkJICAgICAgaW50IHNsb3QsCisJCQkJCQkgICAgICBzdHJ1Y3QgYmNtNDN4eF9kbWFkZXNjX21ldGEgKiptZXRhKQoreworCSptZXRhID0gJihyaW5nLT5tZXRhW3Nsb3RdKTsKKwlpZiAocmluZy0+ZG1hNjQpIHsKKwkJc3RydWN0IGJjbTQzeHhfZG1hZGVzYzY0ICpkZDY0ID0gcmluZy0+ZGVzY2Jhc2U7CisJCXJldHVybiAoc3RydWN0IGJjbTQzeHhfZG1hZGVzY19nZW5lcmljICopKCYoZGQ2NFtzbG90XSkpOworCX0gZWxzZSB7CisJCXN0cnVjdCBiY200M3h4X2RtYWRlc2MzMiAqZGQzMiA9IHJpbmctPmRlc2NiYXNlOworCQlyZXR1cm4gKHN0cnVjdCBiY200M3h4X2RtYWRlc2NfZ2VuZXJpYyAqKSgmKGRkMzJbc2xvdF0pKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUKIHUzMiBiY200M3h4X2RtYV9yZWFkKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcsCiAJCSAgICAgdTE2IG9mZnNldCkKIHsKQEAgLTE1OSw5ICsyOTYsMTMgQEAKIHZvaWQgYmNtNDN4eF9kbWFfZnJlZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwogCiBpbnQgYmNtNDN4eF9kbWFjb250cm9sbGVyX3J4X3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UpOworCQkJCSAgIHUxNiBkbWFjb250cm9sbGVyX21taW9fYmFzZSwKKwkJCQkgICBpbnQgZG1hNjQpOwogaW50IGJjbTQzeHhfZG1hY29udHJvbGxlcl90eF9yZXNldChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCi0JCQkJICAgdTE2IGRtYWNvbnRyb2xsZXJfbW1pb19iYXNlKTsKKwkJCQkgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UsCisJCQkJICAgaW50IGRtYTY0KTsKKwordTE2IGJjbTQzeHhfZG1hY29udHJvbGxlcl9iYXNlKGludCBkbWE2NGJpdCwgaW50IGRtYWNvbnRyb2xsZXJfaWR4KTsKIAogdm9pZCBiY200M3h4X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpOwogdm9pZCBiY200M3h4X2RtYV90eF9yZXN1bWUoc3RydWN0IGJjbTQzeHhfZG1hcmluZyAqcmluZyk7CkBAIC0xNzMsNyArMzE0LDYgQEAKIAkJICAgc3RydWN0IGllZWU4MDIxMV90eGIgKnR4Yik7CiB2b2lkIGJjbTQzeHhfZG1hX3J4KHN0cnVjdCBiY200M3h4X2RtYXJpbmcgKnJpbmcpOwogCi0KICNlbHNlIC8qIENPTkZJR19CQ000M1hYX0RNQSAqLwogCiAKQEAgLTE4OCwxMyArMzI4LDE1IEBACiB9CiBzdGF0aWMgaW5saW5lCiBpbnQgYmNtNDN4eF9kbWFjb250cm9sbGVyX3J4X3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UpCisJCQkJICAgdTE2IGRtYWNvbnRyb2xsZXJfbW1pb19iYXNlLAorCQkJCSAgIGludCBkbWE2NCkKIHsKIAlyZXR1cm4gMDsKIH0KIHN0YXRpYyBpbmxpbmUKIGludCBiY200M3h4X2RtYWNvbnRyb2xsZXJfdHhfcmVzZXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAotCQkJCSAgIHUxNiBkbWFjb250cm9sbGVyX21taW9fYmFzZSkKKwkJCQkgICB1MTYgZG1hY29udHJvbGxlcl9tbWlvX2Jhc2UsCisJCQkJICAgaW50IGRtYTY0KQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmMKaW5kZXggZTM4NmRjYy4uYzk0NzAyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZXRodG9vbC5jCkBAIC00NCw3ICs0NCw3IEBACiAJc3RybmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYmNtLT5wY2lfZGV2KSwgRVRIVE9PTF9CVVNJTkZPX0xFTik7CiB9CiAKLXN0cnVjdCBldGh0b29sX29wcyBiY200M3h4X2V0aHRvb2xfb3BzID0geworY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJjbTQzeHhfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gYmNtNDN4eF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZXRodG9vbC5oCmluZGV4IDgxMzcwNDkuLjZmOGQ0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9ldGh0b29sLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2V0aHRvb2wuaApAQCAtMyw2ICszLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KIAotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBiY200M3h4X2V0aHRvb2xfb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBiY200M3h4X2V0aHRvb2xfb3BzOwogCiAjZW5kaWYgLyogQkNNNDN4eF9FVEhUT09MX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2xlZHMuYwppbmRleCBlYzgwNjkyLi5jM2Y5MGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbGVkcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9sZWRzLmMKQEAgLTUxLDEyICs1MSwxMiBAQAogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGxlZC0+YmNtOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQliY200M3h4X2xvY2tfaXJxb25seShiY20sIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5sZWRzX2xvY2ssIGZsYWdzKTsKIAlpZiAobGVkLT5ibGlua19pbnRlcnZhbCkgewogCQliY200M3h4X2xlZF9jaGFuZ2VzdGF0ZShsZWQpOwogCQltb2RfdGltZXIoJmxlZC0+YmxpbmtfdGltZXIsIGppZmZpZXMgKyBsZWQtPmJsaW5rX2ludGVydmFsKTsKIAl9Ci0JYmNtNDN4eF91bmxvY2tfaXJxb25seShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBiY200M3h4X2xlZF9ibGlua19zdGFydChzdHJ1Y3QgYmNtNDN4eF9sZWQgKmxlZCwKQEAgLTE3Nyw3ICsxNzcsOSBAQAogCWludCBpLCB0dXJuX29uOwogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWwgPSAwOwogCXUxNiBsZWRjdGw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwogCWxlZGN0bCA9IGJjbTQzeHhfcmVhZDE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fQ09OVFJPTCk7CiAJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfTlJfTEVEUzsgaSsrKSB7CiAJCWxlZCA9ICYoYmNtLT5sZWRzW2ldKTsKQEAgLTI2Niw2ICsyNjgsNyBAQAogCQkJbGVkY3RsICY9IH4oMSA8PCBpKTsKIAl9CiAJYmNtNDN4eF93cml0ZTE2KGJjbSwgQkNNNDN4eF9NTUlPX0dQSU9fQ09OVFJPTCwgbGVkY3RsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmxlZHNfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lkIGJjbTQzeHhfbGVkc19zd2l0Y2hfYWxsKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IG9uKQpAQCAtMjc0LDcgKzI3Nyw5IEBACiAJdTE2IGxlZGN0bDsKIAlpbnQgaTsKIAlpbnQgYml0X29uOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5sZWRzX2xvY2ssIGZsYWdzKTsKIAlsZWRjdGwgPSBiY200M3h4X3JlYWQxNihiY20sIEJDTTQzeHhfTU1JT19HUElPX0NPTlRST0wpOwogCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X05SX0xFRFM7IGkrKykgewogCQlsZWQgPSAmKGJjbS0+bGVkc1tpXSk7CkBAIC0yOTAsNCArMjk1LDUgQEAKIAkJCWxlZGN0bCAmPSB+KDEgPDwgaSk7CiAJfQogCWJjbTQzeHhfd3JpdGUxNihiY20sIEJDTTQzeHhfTU1JT19HUElPX0NPTlRST0wsIGxlZGN0bCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5sZWRzX2xvY2ssIGZsYWdzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCmluZGV4IDM4ODlmNzkuLmNiOWEzYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwpAQCAtNTA5LDIzICs1MDksMjAgQEAKIH0KIAogLyogTWFrZSBzdXJlIHdlIGRvbid0IHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gdGhlIGRldmljZS4gKi8KLXN0YXRpYyBpbnQgYmNtNDN4eF9kaXNhYmxlX2ludGVycnVwdHNfc3luYyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIHUzMiAqb2xkc3RhdGUpCitzdGF0aWMgaW50IGJjbTQzeHhfZGlzYWJsZV9pbnRlcnJ1cHRzX3N5bmMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIG9sZDsKIAotCWJjbTQzeHhfbG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJaWYgKHVubGlrZWx5KGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSkgewotCQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQotCW9sZCA9IGJjbTQzeHhfaW50ZXJydXB0X2Rpc2FibGUoYmNtLCBCQ000M3h4X0lSUV9BTEwpOwotCWJjbTQzeHhfdW5sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7CisJYmNtNDN4eF9pbnRlcnJ1cHRfZGlzYWJsZShiY20sIEJDTTQzeHhfSVJRX0FMTCk7CisJYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9NQVNLKTsgLyogZmx1c2ggKi8KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJYmNtNDN4eF9zeW5jaHJvbml6ZV9pcnEoYmNtKTsKIAotCWlmIChvbGRzdGF0ZSkKLQkJKm9sZHN0YXRlID0gb2xkOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUzNyw3ICs1MzQsNiBAQAogCXUxNiBtYW51ZmFjdDsKIAl1MTYgdmVyc2lvbjsKIAl1OCByZXZpc2lvbjsKLQlzOCBpOwogCiAJaWYgKGJjbS0+Y2hpcF9pZCA9PSAweDQzMTcpIHsKIAkJaWYgKGJjbS0+Y2hpcF9yZXYgPT0gMHgwMCkKQEAgLTU4MCwyMCArNTc2LDExIEBACiAJcmFkaW8tPnZlcnNpb24gPSB2ZXJzaW9uOwogCXJhZGlvLT5yZXZpc2lvbiA9IHJldmlzaW9uOwogCi0JLyogU2V0IGRlZmF1bHQgYXR0ZW51YXRpb24gdmFsdWVzLiAqLwotCXJhZGlvLT5iYXNlYmFuZF9hdHRlbiA9IGJjbTQzeHhfZGVmYXVsdF9iYXNlYmFuZF9hdHRlbnVhdGlvbihiY20pOwotCXJhZGlvLT5yYWRpb19hdHRlbiA9IGJjbTQzeHhfZGVmYXVsdF9yYWRpb19hdHRlbnVhdGlvbihiY20pOwotCXJhZGlvLT50eGN0bDEgPSBiY200M3h4X2RlZmF1bHRfdHhjdGwxKGJjbSk7Ci0JcmFkaW8tPnR4Y3RsMiA9IDB4RkZGRjsKIAlpZiAocGh5LT50eXBlID09IEJDTTQzeHhfUEhZVFlQRV9BKQogCQlyYWRpby0+dHhwb3dlcl9kZXNpcmVkID0gYmNtLT5zcHJvbS5tYXhwb3dlcl9hcGh5OwogCWVsc2UKIAkJcmFkaW8tPnR4cG93ZXJfZGVzaXJlZCA9IGJjbS0+c3Byb20ubWF4cG93ZXJfYmdwaHk7CiAKLQkvKiBJbml0aWFsaXplIHRoZSBpbi1tZW1vcnkgbnJzc2kgTG9va3VwIFRhYmxlLiAqLwotCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKQotCQlyYWRpby0+bnJzc2lfbHRbaV0gPSBpOwotCiAJcmV0dXJuIDA7CiAKIGVycl91bnN1cHBvcnRlZF9yYWRpbzoKQEAgLTEyNTAsMTAgKzEyMzcsNiBAQAogCQlnb3RvIG91dDsKIAogCWJjbS0+Y3VycmVudF9jb3JlID0gbmV3X2NvcmU7Ci0JYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4ID0gLTE7Ci0JaWYgKG5ld19jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF84MDIxMSkKLQkJYmNtLT5jdXJyZW50XzgwMjExX2NvcmVfaWR4ID0gKGludCkobmV3X2NvcmUgLSAmKGJjbS0+Y29yZV84MDIxMVswXSkpOwotCiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEzODksNiArMTM3Miw3IEBACiAJaWYgKChiY200M3h4X2NvcmVfZW5hYmxlZChiY20pKSAmJgogCSAgICAhYmNtNDN4eF91c2luZ19waW8oYmNtKSkgewogLy9GSVhNRTogRG8gd2UgX3JlYWxseV8gd2FudCAjaWZuZGVmIENPTkZJR19CQ005NDdYWCBoZXJlPworI2lmIDAKICNpZm5kZWYgQ09ORklHX0JDTTk0N1hYCiAJCS8qIHJlc2V0IGFsbCB1c2VkIERNQSBjb250cm9sbGVycy4gKi8KIAkJYmNtNDN4eF9kbWFjb250cm9sbGVyX3R4X3Jlc2V0KGJjbSwgQkNNNDN4eF9NTUlPX0RNQTFfQkFTRSk7CkBAIC0xMzk5LDYgKzEzODMsNyBAQAogCQlpZiAoYmNtLT5jdXJyZW50X2NvcmUtPnJldiA8IDUpCiAJCQliY200M3h4X2RtYWNvbnRyb2xsZXJfcnhfcmVzZXQoYmNtLCBCQ000M3h4X01NSU9fRE1BNF9CQVNFKTsKICNlbmRpZgorI2VuZGlmCiAJfQogCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9TSFVUVElOR0RPV04pIHsKIAkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwKQEAgLTE0MjMsNDMgKzE0MDgsMjMgQEAKIAliY200M3h4X2NvcmVfZGlzYWJsZShiY20sIDApOwogfQogCi0vKiBNYXJrIHRoZSBjdXJyZW50IDgwMjExIGNvcmUgaW5hY3RpdmUuCi0gKiAiYWN0aXZlXzgwMjExX2NvcmUiIGlzIHRoZSBvdGhlciA4MDIxMSBjb3JlLCB3aGljaCBpcyB1c2VkLgotICovCi1zdGF0aWMgaW50IGJjbTQzeHhfd2lyZWxlc3NfY29yZV9tYXJrX2luYWN0aXZlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKLQkJCQkJICAgICAgIHN0cnVjdCBiY200M3h4X2NvcmVpbmZvICphY3RpdmVfODAyMTFfY29yZSkKKy8qIE1hcmsgdGhlIGN1cnJlbnQgODAyMTEgY29yZSBpbmFjdGl2ZS4gKi8KK3N0YXRpYyB2b2lkIGJjbTQzeHhfd2lyZWxlc3NfY29yZV9tYXJrX2luYWN0aXZlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAl1MzIgc2J0bXN0YXRlbG93OwotCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpvbGRfY29yZTsKLQlpbnQgZXJyID0gMDsKIAogCWJjbTQzeHhfaW50ZXJydXB0X2Rpc2FibGUoYmNtLCBCQ000M3h4X0lSUV9BTEwpOwogCWJjbTQzeHhfcmFkaW9fdHVybl9vZmYoYmNtKTsKIAlzYnRtc3RhdGVsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7Ci0Jc2J0bXN0YXRlbG93ICY9IH4weDIwMGEwMDAwOwotCXNidG1zdGF0ZWxvdyB8PSAweGEwMDAwOworCXNidG1zdGF0ZWxvdyAmPSAweERGRjVGRkZGOworCXNidG1zdGF0ZWxvdyB8PSAweDAwMEEwMDAwOwogCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVywgc2J0bXN0YXRlbG93KTsKIAl1ZGVsYXkoMSk7CiAJc2J0bXN0YXRlbG93ID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1cpOwotCXNidG1zdGF0ZWxvdyAmPSB+MHhhMDAwMDsKLQlzYnRtc3RhdGVsb3cgfD0gMHg4MDAwMDsKKwlzYnRtc3RhdGVsb3cgJj0gMHhGRkY1RkZGRjsKKwlzYnRtc3RhdGVsb3cgfD0gMHgwMDA4MDAwMDsKIAliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1csIHNidG1zdGF0ZWxvdyk7CiAJdWRlbGF5KDEpOwotCi0JaWYgKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSA9PSBCQ000M3h4X1BIWVRZUEVfRykgewotCQlvbGRfY29yZSA9IGJjbS0+Y3VycmVudF9jb3JlOwotCQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgYWN0aXZlXzgwMjExX2NvcmUpOwotCQlpZiAoZXJyKQotCQkJZ290byBvdXQ7Ci0JCXNidG1zdGF0ZWxvdyA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XKTsKLQkJc2J0bXN0YXRlbG93ICY9IH4weDIwMDAwMDAwOwotCQlzYnRtc3RhdGVsb3cgfD0gMHgyMDAwMDAwMDsKLQkJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XLCBzYnRtc3RhdGVsb3cpOwotCQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgb2xkX2NvcmUpOwotCX0KLQotb3V0OgotCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9pcnFfdHJhbnNtaXRfc3RhdHVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKQEAgLTE1ODEsMTcgKzE1NDYsNyBAQAogCQllbHNlCiAJCQlhdmVyYWdlIC09IDQ4OwogCi0vKiBGSVhNRTogVGhpcyBpcyB3cm9uZywgYnV0IHBlb3BsZSB3YW50IGZhbmN5IHN0YXRzLiB3ZWxsLi4uICovCi1iY20tPnN0YXRzLm5vaXNlID0gYXZlcmFnZTsKLQkJaWYgKGF2ZXJhZ2UgPiAtNjUpCi0JCQliY20tPnN0YXRzLmxpbmtfcXVhbGl0eSA9IDA7Ci0JCWVsc2UgaWYgKGF2ZXJhZ2UgPiAtNzUpCi0JCQliY20tPnN0YXRzLmxpbmtfcXVhbGl0eSA9IDE7Ci0JCWVsc2UgaWYgKGF2ZXJhZ2UgPiAtODUpCi0JCQliY20tPnN0YXRzLmxpbmtfcXVhbGl0eSA9IDI7Ci0JCWVsc2UKLQkJCWJjbS0+c3RhdHMubGlua19xdWFsaXR5ID0gMzsKLS8vCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkxpbmsgUXVhbGl0eTogJXUgKGF2ZyB3YXMgJWQpXG4iLCBiY20tPnN0YXRzLmxpbmtfcXVhbGl0eSwgYXZlcmFnZSk7CisJCWJjbS0+c3RhdHMubm9pc2UgPSBhdmVyYWdlOwogZHJvcF9jYWxjdWxhdGlvbjoKIAkJYmNtLT5ub2lzZWNhbGMuY2FsY3VsYXRpb25fcnVubmluZyA9IDA7CiAJCXJldHVybjsKQEAgLTE3MDksOCArMTY2NCw5IEBACiBzdGF0aWMgdm9pZCBiY200M3h4X2ludGVycnVwdF90YXNrbGV0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAl1MzIgcmVhc29uOwotCXUzMiBkbWFfcmVhc29uWzRdOwotCWludCBhY3Rpdml0eSA9IDA7CisJdTMyIGRtYV9yZWFzb25bNl07CisJdTMyIG1lcmdlZF9kbWFfcmVhc29uID0gMDsKKwlpbnQgaSwgYWN0aXZpdHkgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKICNpZmRlZiBDT05GSUdfQkNNNDNYWF9ERUJVRwpAQCAtMTcyMCwxMiArMTY3NiwxMiBAQAogIyBkZWZpbmUgYmNtaXJxX2hhbmRsZWQoaXJxKQlkbyB7IC8qIG5vdGhpbmcgKi8gfSB3aGlsZSAoMCkKICNlbmRpZiAvKiBDT05GSUdfQkNNNDNYWF9ERUJVRyovCiAKLQliY200M3h4X2xvY2tfaXJxb25seShiY20sIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCXJlYXNvbiA9IGJjbS0+aXJxX3JlYXNvbjsKLQlkbWFfcmVhc29uWzBdID0gYmNtLT5kbWFfcmVhc29uWzBdOwotCWRtYV9yZWFzb25bMV0gPSBiY20tPmRtYV9yZWFzb25bMV07Ci0JZG1hX3JlYXNvblsyXSA9IGJjbS0+ZG1hX3JlYXNvblsyXTsKLQlkbWFfcmVhc29uWzNdID0gYmNtLT5kbWFfcmVhc29uWzNdOworCWZvciAoaSA9IDU7IGkgPj0gMDsgaS0tKSB7CisJCWRtYV9yZWFzb25baV0gPSBiY20tPmRtYV9yZWFzb25baV07CisJCW1lcmdlZF9kbWFfcmVhc29uIHw9IGRtYV9yZWFzb25baV07CisJfQogCiAJaWYgKHVubGlrZWx5KHJlYXNvbiAmIEJDTTQzeHhfSVJRX1hNSVRfRVJST1IpKSB7CiAJCS8qIFRYIGVycm9yLiBXZSBnZXQgdGhpcyB3aGVuIFRlbXBsYXRlIFJhbSBpcyB3cml0dGVuIGluIHdyb25nIGVuZGlhbmVzcwpAQCAtMTczNiwyNyArMTY5MiwyNSBAQAogCQlwcmludGtsKEtFUk5fRVJSIFBGWCAiRkFUQUwgRVJST1I6IEJDTTQzeHhfSVJRX1hNSVRfRVJST1JcbiIpOwogCQliY21pcnFfaGFuZGxlZChCQ000M3h4X0lSUV9YTUlUX0VSUk9SKTsKIAl9Ci0JaWYgKHVubGlrZWx5KChkbWFfcmVhc29uWzBdICYgQkNNNDN4eF9ETUFJUlFfRkFUQUxNQVNLKSB8Ci0JCSAgICAgKGRtYV9yZWFzb25bMV0gJiBCQ000M3h4X0RNQUlSUV9GQVRBTE1BU0spIHwKLQkJICAgICAoZG1hX3JlYXNvblsyXSAmIEJDTTQzeHhfRE1BSVJRX0ZBVEFMTUFTSykgfAotCQkgICAgIChkbWFfcmVhc29uWzNdICYgQkNNNDN4eF9ETUFJUlFfRkFUQUxNQVNLKSkpIHsKKwlpZiAodW5saWtlbHkobWVyZ2VkX2RtYV9yZWFzb24gJiBCQ000M3h4X0RNQUlSUV9GQVRBTE1BU0spKSB7CiAJCXByaW50a2woS0VSTl9FUlIgUEZYICJGQVRBTCBFUlJPUjogRmF0YWwgRE1BIGVycm9yOiAiCi0JCQkJICAgICAiMHglMDhYLCAweCUwOFgsIDB4JTA4WCwgMHglMDhYXG4iLAorCQkJCSAgICAgIjB4JTA4WCwgMHglMDhYLCAweCUwOFgsICIKKwkJCQkgICAgICIweCUwOFgsIDB4JTA4WCwgMHglMDhYXG4iLAogCQkgICAgICAgIGRtYV9yZWFzb25bMF0sIGRtYV9yZWFzb25bMV0sCi0JCQlkbWFfcmVhc29uWzJdLCBkbWFfcmVhc29uWzNdKTsKKwkJCWRtYV9yZWFzb25bMl0sIGRtYV9yZWFzb25bM10sCisJCQlkbWFfcmVhc29uWzRdLCBkbWFfcmVhc29uWzVdKTsKIAkJYmNtNDN4eF9jb250cm9sbGVyX3Jlc3RhcnQoYmNtLCAiRE1BIGVycm9yIik7CiAJCW1taW93YigpOwotCQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHVubGlrZWx5KChkbWFfcmVhc29uWzBdICYgQkNNNDN4eF9ETUFJUlFfTk9ORkFUQUxNQVNLKSB8Ci0JCSAgICAgKGRtYV9yZWFzb25bMV0gJiBCQ000M3h4X0RNQUlSUV9OT05GQVRBTE1BU0spIHwKLQkJICAgICAoZG1hX3JlYXNvblsyXSAmIEJDTTQzeHhfRE1BSVJRX05PTkZBVEFMTUFTSykgfAotCQkgICAgIChkbWFfcmVhc29uWzNdICYgQkNNNDN4eF9ETUFJUlFfTk9ORkFUQUxNQVNLKSkpIHsKKwlpZiAodW5saWtlbHkobWVyZ2VkX2RtYV9yZWFzb24gJiBCQ000M3h4X0RNQUlSUV9OT05GQVRBTE1BU0spKSB7CiAJCXByaW50a2woS0VSTl9FUlIgUEZYICJETUEgZXJyb3I6ICIKLQkJCQkgICAgICIweCUwOFgsIDB4JTA4WCwgMHglMDhYLCAweCUwOFhcbiIsCisJCQkJICAgICAiMHglMDhYLCAweCUwOFgsIDB4JTA4WCwgIgorCQkJCSAgICAgIjB4JTA4WCwgMHglMDhYLCAweCUwOFhcbiIsCiAJCSAgICAgICAgZG1hX3JlYXNvblswXSwgZG1hX3JlYXNvblsxXSwKLQkJCWRtYV9yZWFzb25bMl0sIGRtYV9yZWFzb25bM10pOworCQkJZG1hX3JlYXNvblsyXSwgZG1hX3JlYXNvblszXSwKKwkJCWRtYV9yZWFzb25bNF0sIGRtYV9yZWFzb25bNV0pOwogCX0KIAogCWlmIChyZWFzb24gJiBCQ000M3h4X0lSUV9QUykgewpAQCAtMTc5MSw4ICsxNzQ1LDYgQEAKIAl9CiAKIAkvKiBDaGVjayB0aGUgRE1BIHJlYXNvbiByZWdpc3RlcnMgZm9yIHJlY2VpdmVkIGRhdGEuICovCi0JYXNzZXJ0KCEoZG1hX3JlYXNvblsxXSAmIEJDTTQzeHhfRE1BSVJRX1JYX0RPTkUpKTsKLQlhc3NlcnQoIShkbWFfcmVhc29uWzJdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkpOwogCWlmIChkbWFfcmVhc29uWzBdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkgewogCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKIAkJCWJjbTQzeHhfcGlvX3J4KGJjbTQzeHhfY3VycmVudF9waW8oYmNtKS0+cXVldWUwKTsKQEAgLTE4MDAsMTMgKzE3NTIsMTcgQEAKIAkJCWJjbTQzeHhfZG1hX3J4KGJjbTQzeHhfY3VycmVudF9kbWEoYmNtKS0+cnhfcmluZzApOwogCQkvKiBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHNldCAiYWN0aXZpdHkiIHRvIDEsIGhlcmUuICovCiAJfQorCWFzc2VydCghKGRtYV9yZWFzb25bMV0gJiBCQ000M3h4X0RNQUlSUV9SWF9ET05FKSk7CisJYXNzZXJ0KCEoZG1hX3JlYXNvblsyXSAmIEJDTTQzeHhfRE1BSVJRX1JYX0RPTkUpKTsKIAlpZiAoZG1hX3JlYXNvblszXSAmIEJDTTQzeHhfRE1BSVJRX1JYX0RPTkUpIHsKIAkJaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpCiAJCQliY200M3h4X3Bpb19yeChiY200M3h4X2N1cnJlbnRfcGlvKGJjbSktPnF1ZXVlMyk7CiAJCWVsc2UKLQkJCWJjbTQzeHhfZG1hX3J4KGJjbTQzeHhfY3VycmVudF9kbWEoYmNtKS0+cnhfcmluZzEpOworCQkJYmNtNDN4eF9kbWFfcngoYmNtNDN4eF9jdXJyZW50X2RtYShiY20pLT5yeF9yaW5nMyk7CiAJCWFjdGl2aXR5ID0gMTsKIAl9CisJYXNzZXJ0KCEoZG1hX3JlYXNvbls0XSAmIEJDTTQzeHhfRE1BSVJRX1JYX0RPTkUpKTsKKwlhc3NlcnQoIShkbWFfcmVhc29uWzVdICYgQkNNNDN4eF9ETUFJUlFfUlhfRE9ORSkpOwogCWJjbWlycV9oYW5kbGVkKEJDTTQzeHhfSVJRX1JYKTsKIAogCWlmIChyZWFzb24gJiBCQ000M3h4X0lSUV9YTUlUX1NUQVRVUykgewpAQCAtMTgzNCw3ICsxNzkwLDcgQEAKIAkJYmNtNDN4eF9sZWRzX3VwZGF0ZShiY20sIGFjdGl2aXR5KTsKIAliY200M3h4X2ludGVycnVwdF9lbmFibGUoYmNtLCBiY20tPmlycV9zYXZlZHN0YXRlKTsKIAltbWlvd2IoKTsKLQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgcGlvX2lycV93b3JrYXJvdW5kKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKQEAgLTE4NjMsMTQgKzE4MTksMTggQEAKIAogCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwgcmVhc29uKTsKIAotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUExX1JFQVNPTiwKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMF9SRUFTT04sCiAJCQliY20tPmRtYV9yZWFzb25bMF0pOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUEyX1JFQVNPTiwKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMV9SRUFTT04sCiAJCQliY20tPmRtYV9yZWFzb25bMV0pOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUEzX1JFQVNPTiwKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMl9SRUFTT04sCiAJCQliY20tPmRtYV9yZWFzb25bMl0pOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUE0X1JFQVNPTiwKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BM19SRUFTT04sCiAJCQliY20tPmRtYV9yZWFzb25bM10pOworCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUE0X1JFQVNPTiwKKwkJCWJjbS0+ZG1hX3JlYXNvbls0XSk7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTVfUkVBU09OLAorCQkJYmNtLT5kbWFfcmVhc29uWzVdKTsKIH0KIAogLyogSW50ZXJydXB0IGhhbmRsZXIgdG9wLWhhbGYgKi8KQEAgLTE4ODUsMTQgKzE4NDUsOCBAQAogCiAJc3Bpbl9sb2NrKCZiY20tPmlycV9sb2NrKTsKIAotCS8qIE9ubHkgYWNjZXB0IElSUXMsIGlmIHdlIGFyZSBpbml0aWFsaXplZCBwcm9wZXJseS4KLQkgKiBUaGlzIGF2b2lkcyBhbiBSWCByYWNlIHdoaWxlIGluaXRpYWxpemluZy4KLQkgKiBXZSBzaG91bGQgcHJvYmFibHkgbm90IGVuYWJsZSBJUlFzIGJlZm9yZSB3ZSBhcmUgaW5pdGlhbGl6ZWQKLQkgKiBjb21wbGV0ZWx5LCBidXQgc29tZSBjYXJlZnVsIHdvcmsgaXMgbmVlZGVkIHRvIGZpeCB0aGlzLiBJIHRoaW5rIGl0Ci0JICogaXMgYmVzdCB0byBzdGF5IHdpdGggdGhpcyBjaGVhcCB3b3JrYXJvdW5kIGZvciBub3cuLi4gLgotCSAqLwotCWlmICh1bmxpa2VseShiY200M3h4X3N0YXR1cyhiY20pICE9IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkpCi0JCWdvdG8gb3V0OworCWFzc2VydChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCk7CisJYXNzZXJ0KGJjbS0+Y3VycmVudF9jb3JlLT5pZCA9PSBCQ000M3h4X0NPUkVJRF84MDIxMSk7CiAKIAlyZWFzb24gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7CiAJaWYgKHJlYXNvbiA9PSAweGZmZmZmZmZmKSB7CkBAIC0xOTA0LDE0ICsxODU4LDE4IEBACiAJaWYgKCFyZWFzb24pCiAJCWdvdG8gb3V0OwogCi0JYmNtLT5kbWFfcmVhc29uWzBdID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMV9SRUFTT04pCi0JCQkgICAgICYgMHgwMDAxZGMwMDsKLQliY20tPmRtYV9yZWFzb25bMV0gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19ETUEyX1JFQVNPTikKLQkJCSAgICAgJiAweDAwMDBkYzAwOwotCWJjbS0+ZG1hX3JlYXNvblsyXSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTNfUkVBU09OKQotCQkJICAgICAmIDB4MDAwMGRjMDA7Ci0JYmNtLT5kbWFfcmVhc29uWzNdID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BNF9SRUFTT04pCi0JCQkgICAgICYgMHgwMDAxZGMwMDsKKwliY20tPmRtYV9yZWFzb25bMF0gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19ETUEwX1JFQVNPTikKKwkJCSAgICAgJiAweDAwMDFEQzAwOworCWJjbS0+ZG1hX3JlYXNvblsxXSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTFfUkVBU09OKQorCQkJICAgICAmIDB4MDAwMERDMDA7CisJYmNtLT5kbWFfcmVhc29uWzJdID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMl9SRUFTT04pCisJCQkgICAgICYgMHgwMDAwREMwMDsKKwliY20tPmRtYV9yZWFzb25bM10gPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19ETUEzX1JFQVNPTikKKwkJCSAgICAgJiAweDAwMDFEQzAwOworCWJjbS0+ZG1hX3JlYXNvbls0XSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfUkVBU09OKQorCQkJICAgICAmIDB4MDAwMERDMDA7CisJYmNtLT5kbWFfcmVhc29uWzVdID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BNV9SRUFTT04pCisJCQkgICAgICYgMHgwMDAwREMwMDsKIAogCWJjbTQzeHhfaW50ZXJydXB0X2FjayhiY20sIHJlYXNvbik7CiAKQEAgLTE5MzAsMTYgKzE4ODgsMTggQEAKIAogc3RhdGljIHZvaWQgYmNtNDN4eF9yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGZvcmNlKQogeworCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKKwogCWlmIChiY20tPmZpcm13YXJlX25vcmVsZWFzZSAmJiAhZm9yY2UpCiAJCXJldHVybjsgLyogU3VzcGVuZGluZyBvciBjb250cm9sbGVyIHJlc2V0LiAqLwotCXJlbGVhc2VfZmlybXdhcmUoYmNtLT51Y29kZSk7Ci0JYmNtLT51Y29kZSA9IE5VTEw7Ci0JcmVsZWFzZV9maXJtd2FyZShiY20tPnBjbSk7Ci0JYmNtLT5wY20gPSBOVUxMOwotCXJlbGVhc2VfZmlybXdhcmUoYmNtLT5pbml0dmFsczApOwotCWJjbS0+aW5pdHZhbHMwID0gTlVMTDsKLQlyZWxlYXNlX2Zpcm13YXJlKGJjbS0+aW5pdHZhbHMxKTsKLQliY20tPmluaXR2YWxzMSA9IE5VTEw7CisJcmVsZWFzZV9maXJtd2FyZShwaHktPnVjb2RlKTsKKwlwaHktPnVjb2RlID0gTlVMTDsKKwlyZWxlYXNlX2Zpcm13YXJlKHBoeS0+cGNtKTsKKwlwaHktPnBjbSA9IE5VTEw7CisJcmVsZWFzZV9maXJtd2FyZShwaHktPmluaXR2YWxzMCk7CisJcGh5LT5pbml0dmFsczAgPSBOVUxMOworCXJlbGVhc2VfZmlybXdhcmUocGh5LT5pbml0dmFsczEpOworCXBoeS0+aW5pdHZhbHMxID0gTlVMTDsKIH0KIAogc3RhdGljIGludCBiY200M3h4X3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQpAQCAtMTk1MCwxMSArMTkxMCwxMSBAQAogCWludCBucjsKIAljaGFyIGJ1ZlsyMiArIHNpemVvZihtb2RwYXJhbV9md3Bvc3RmaXgpIC0gMV0gPSB7IDAgfTsKIAotCWlmICghYmNtLT51Y29kZSkgeworCWlmICghcGh5LT51Y29kZSkgewogCQlzbnByaW50ZihidWYsIEFSUkFZX1NJWkUoYnVmKSwgImJjbTQzeHhfbWljcm9jb2RlJWQlcy5mdyIsCiAJCQkgKHJldiA+PSA1ID8gNSA6IHJldiksCiAJCQkgbW9kcGFyYW1fZndwb3N0Zml4KTsKLQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYmNtLT51Y29kZSwgYnVmLCAmYmNtLT5wY2lfZGV2LT5kZXYpOworCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwaHktPnVjb2RlLCBidWYsICZiY20tPnBjaV9kZXYtPmRldik7CiAJCWlmIChlcnIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiBQRlggCiAJCQkgICAgICAgIkVycm9yOiBNaWNyb2NvZGUgXCIlc1wiIG5vdCBhdmFpbGFibGUgb3IgbG9hZCBmYWlsZWQuXG4iLApAQCAtMTk2MywxMiArMTkyMywxMiBAQAogCQl9CiAJfQogCi0JaWYgKCFiY20tPnBjbSkgeworCWlmICghcGh5LT5wY20pIHsKIAkJc25wcmludGYoYnVmLCBBUlJBWV9TSVpFKGJ1ZiksCiAJCQkgImJjbTQzeHhfcGNtJWQlcy5mdyIsCiAJCQkgKHJldiA8IDUgPyA0IDogNSksCiAJCQkgbW9kcGFyYW1fZndwb3N0Zml4KTsKLQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYmNtLT5wY20sIGJ1ZiwgJmJjbS0+cGNpX2Rldi0+ZGV2KTsKKwkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcGh5LT5wY20sIGJ1ZiwgJmJjbS0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJICAgICAgICJFcnJvcjogUENNIFwiJXNcIiBub3QgYXZhaWxhYmxlIG9yIGxvYWQgZmFpbGVkLlxuIiwKQEAgLTE5NzcsNyArMTkzNyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoIWJjbS0+aW5pdHZhbHMwKSB7CisJaWYgKCFwaHktPmluaXR2YWxzMCkgewogCQlpZiAocmV2ID09IDIgfHwgcmV2ID09IDQpIHsKIAkJCXN3aXRjaCAocGh5LT50eXBlKSB7CiAJCQljYXNlIEJDTTQzeHhfUEhZVFlQRV9BOgpAQCAtMjAwOCwyMCArMTk2OCwyMCBAQAogCQlzbnByaW50ZihidWYsIEFSUkFZX1NJWkUoYnVmKSwgImJjbTQzeHhfaW5pdHZhbCUwMmQlcy5mdyIsCiAJCQkgbnIsIG1vZHBhcmFtX2Z3cG9zdGZpeCk7CiAKLQkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmYmNtLT5pbml0dmFsczAsIGJ1ZiwgJmJjbS0+cGNpX2Rldi0+ZGV2KTsKKwkJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcGh5LT5pbml0dmFsczAsIGJ1ZiwgJmJjbS0+cGNpX2Rldi0+ZGV2KTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAKIAkJCSAgICAgICAiRXJyb3I6IEluaXRWYWxzIFwiJXNcIiBub3QgYXZhaWxhYmxlIG9yIGxvYWQgZmFpbGVkLlxuIiwKIAkJCSAgICAgICAgYnVmKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJaWYgKGJjbS0+aW5pdHZhbHMwLT5zaXplICUgc2l6ZW9mKHN0cnVjdCBiY200M3h4X2luaXR2YWwpKSB7CisJCWlmIChwaHktPmluaXR2YWxzMC0+c2l6ZSAlIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9pbml0dmFsKSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW5pdFZhbHMgZmlsZWZvcm1hdCBlcnJvci5cbiIpOwogCQkJZ290byBlcnJvcjsKIAkJfQogCX0KIAotCWlmICghYmNtLT5pbml0dmFsczEpIHsKKwlpZiAoIXBoeS0+aW5pdHZhbHMxKSB7CiAJCWlmIChyZXYgPj0gNSkgewogCQkJdTMyIHNidG1zdGF0ZWhpZ2g7CiAKQEAgLTIwNDMsMTQgKzIwMDMsMTQgQEAKIAkJCXNucHJpbnRmKGJ1ZiwgQVJSQVlfU0laRShidWYpLCAiYmNtNDN4eF9pbml0dmFsJTAyZCVzLmZ3IiwKIAkJCQkgbnIsIG1vZHBhcmFtX2Z3cG9zdGZpeCk7CiAKLQkJCWVyciA9IHJlcXVlc3RfZmlybXdhcmUoJmJjbS0+aW5pdHZhbHMxLCBidWYsICZiY20tPnBjaV9kZXYtPmRldik7CisJCQllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZwaHktPmluaXR2YWxzMSwgYnVmLCAmYmNtLT5wY2lfZGV2LT5kZXYpOwogCQkJaWYgKGVycikgewogCQkJCXByaW50ayhLRVJOX0VSUiBQRlggCiAJCQkJICAgICAgICJFcnJvcjogSW5pdFZhbHMgXCIlc1wiIG5vdCBhdmFpbGFibGUgb3IgbG9hZCBmYWlsZWQuXG4iLAogCQkJICAgICAgICAJYnVmKTsKIAkJCQlnb3RvIGVycm9yOwogCQkJfQotCQkJaWYgKGJjbS0+aW5pdHZhbHMxLT5zaXplICUgc2l6ZW9mKHN0cnVjdCBiY200M3h4X2luaXR2YWwpKSB7CisJCQlpZiAocGh5LT5pbml0dmFsczEtPnNpemUgJSBzaXplb2Yoc3RydWN0IGJjbTQzeHhfaW5pdHZhbCkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJJbml0VmFscyBmaWxlZm9ybWF0IGVycm9yLlxuIik7CiAJCQkJZ290byBlcnJvcjsKIAkJCX0KQEAgLTIwNzAsMTIgKzIwMzAsMTMgQEAKIAogc3RhdGljIHZvaWQgYmNtNDN4eF91cGxvYWRfbWljcm9jb2RlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKKwlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7CiAJY29uc3QgdTMyICpkYXRhOwogCXVuc2lnbmVkIGludCBpLCBsZW47CiAKIAkvKiBVcGxvYWQgTWljcm9jb2RlLiAqLwotCWRhdGEgPSAodTMyICopKGJjbS0+dWNvZGUtPmRhdGEpOwotCWxlbiA9IGJjbS0+dWNvZGUtPnNpemUgLyBzaXplb2YodTMyKTsKKwlkYXRhID0gKHUzMiAqKShwaHktPnVjb2RlLT5kYXRhKTsKKwlsZW4gPSBwaHktPnVjb2RlLT5zaXplIC8gc2l6ZW9mKHUzMik7CiAJYmNtNDN4eF9zaG1fY29udHJvbF93b3JkKGJjbSwgQkNNNDN4eF9TSE1fVUNPREUsIDB4MDAwMCk7CiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TSE1fREFUQSwKQEAgLTIwODQsOCArMjA0NSw4IEBACiAJfQogCiAJLyogVXBsb2FkIFBDTSBkYXRhLiAqLwotCWRhdGEgPSAodTMyICopKGJjbS0+cGNtLT5kYXRhKTsKLQlsZW4gPSBiY20tPnBjbS0+c2l6ZSAvIHNpemVvZih1MzIpOworCWRhdGEgPSAodTMyICopKHBoeS0+cGNtLT5kYXRhKTsKKwlsZW4gPSBwaHktPnBjbS0+c2l6ZSAvIHNpemVvZih1MzIpOwogCWJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChiY20sIEJDTTQzeHhfU0hNX1BDTSwgMHgwMWVhKTsKIAliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU0hNX0RBVEEsIDB4MDAwMDQwMDApOwogCWJjbTQzeHhfc2htX2NvbnRyb2xfd29yZChiY20sIEJDTTQzeHhfU0hNX1BDTSwgMHgwMWViKTsKQEAgLTIxMzEsMTUgKzIwOTIsMTYgQEAKIAogc3RhdGljIGludCBiY200M3h4X3VwbG9hZF9pbml0dmFscyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7CisJc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwogCWludCBlcnI7CiAKLQllcnIgPSBiY200M3h4X3dyaXRlX2luaXR2YWxzKGJjbSwgKHN0cnVjdCBiY200M3h4X2luaXR2YWwgKiliY20tPmluaXR2YWxzMC0+ZGF0YSwKLQkJCQkgICAgIGJjbS0+aW5pdHZhbHMwLT5zaXplIC8gc2l6ZW9mKHN0cnVjdCBiY200M3h4X2luaXR2YWwpKTsKKwllcnIgPSBiY200M3h4X3dyaXRlX2luaXR2YWxzKGJjbSwgKHN0cnVjdCBiY200M3h4X2luaXR2YWwgKilwaHktPmluaXR2YWxzMC0+ZGF0YSwKKwkJCQkgICAgIHBoeS0+aW5pdHZhbHMwLT5zaXplIC8gc2l6ZW9mKHN0cnVjdCBiY200M3h4X2luaXR2YWwpKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKLQlpZiAoYmNtLT5pbml0dmFsczEpIHsKLQkJZXJyID0gYmNtNDN4eF93cml0ZV9pbml0dmFscyhiY20sIChzdHJ1Y3QgYmNtNDN4eF9pbml0dmFsICopYmNtLT5pbml0dmFsczEtPmRhdGEsCi0JCQkJCSAgICAgYmNtLT5pbml0dmFsczEtPnNpemUgLyBzaXplb2Yoc3RydWN0IGJjbTQzeHhfaW5pdHZhbCkpOworCWlmIChwaHktPmluaXR2YWxzMSkgeworCQllcnIgPSBiY200M3h4X3dyaXRlX2luaXR2YWxzKGJjbSwgKHN0cnVjdCBiY200M3h4X2luaXR2YWwgKilwaHktPmluaXR2YWxzMS0+ZGF0YSwKKwkJCQkJICAgICBwaHktPmluaXR2YWxzMS0+c2l6ZSAvIHNpemVvZihzdHJ1Y3QgYmNtNDN4eF9pbml0dmFsKSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dDsKIAl9CkBAIC0yMTU2LDkgKzIxMTgsNyBAQAogCiBzdGF0aWMgaW50IGJjbTQzeHhfaW5pdGlhbGl6ZV9pcnEoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewotCWludCByZXM7Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIGRhdGE7CisJaW50IGVycjsKIAogCWJjbS0+aXJxID0gYmNtLT5wY2lfZGV2LT5pcnE7CiAjaWZkZWYgQ09ORklHX0JDTTk0N1hYCkBAIC0yMTc1LDMyICsyMTM1LDEyIEBACiAJCX0KIAl9CiAjZW5kaWYKLQlyZXMgPSByZXF1ZXN0X2lycShiY20tPmlycSwgYmNtNDN4eF9pbnRlcnJ1cHRfaGFuZGxlciwKKwllcnIgPSByZXF1ZXN0X2lycShiY20tPmlycSwgYmNtNDN4eF9pbnRlcnJ1cHRfaGFuZGxlciwKIAkJCSAgSVJRRl9TSEFSRUQsIEtCVUlMRF9NT0ROQU1FLCBiY20pOwotCWlmIChyZXMpIHsKKwlpZiAoZXJyKQogCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgSVJRJWRcbiIsIGJjbS0+aXJxKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwgMHhmZmZmZmZmZik7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCwgMHgwMDAyMDQwMik7Ci0JaSA9IDA7Ci0Jd2hpbGUgKDEpIHsKLQkJZGF0YSA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OKTsKLQkJaWYgKGRhdGEgPT0gQkNNNDN4eF9JUlFfUkVBRFkpCi0JCQlicmVhazsKLQkJaSsrOwotCQlpZiAoaSA+PSBCQ000M3h4X0lSUVdBSVRfTUFYX1JFVFJJRVMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhcmQgSVJRIHJlZ2lzdGVyIG5vdCByZXNwb25kaW5nLiAiCi0JCQkJCSAgICAiR2l2aW5nIHVwLlxuIik7Ci0JCQlmcmVlX2lycShiY20tPmlycSwgYmNtKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0JCXVkZWxheSgxMCk7Ci0JfQotCS8vIGR1bW15IHJlYWQKLQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiAvKiBTd2l0Y2ggdG8gdGhlIGNvcmUgdXNlZCB0byB3cml0ZSB0aGUgR1BJTyByZWdpc3Rlci4KQEAgLTIyOTgsMTMgKzIyMzgsMTcgQEAKIC8qIGh0dHA6Ly9iY20tc3BlY3Muc2lwc29sdXRpb25zLm5ldC9FbmFibGVNYWMgKi8KIHZvaWQgYmNtNDN4eF9tYWNfZW5hYmxlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELAotCSAgICAgICAgICAgICAgICBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpCi0JCQl8IEJDTTQzeHhfU0JGX01BQ19FTkFCTEVEKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04sIEJDTTQzeHhfSVJRX1JFQURZKTsKLQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpOyAvKiBkdW1teSByZWFkICovCi0JYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOyAvKiBkdW1teSByZWFkICovCi0JYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMoYmNtLCAtMSwgLTEpOworCWJjbS0+bWFjX3N1c3BlbmRlZC0tOworCWFzc2VydChiY20tPm1hY19zdXNwZW5kZWQgPj0gMCk7CisJaWYgKGJjbS0+bWFjX3N1c3BlbmRlZCA9PSAwKSB7CisJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsCisJCSAgICAgICAgICAgICAgICBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpCisJCQkJfCBCQ000M3h4X1NCRl9NQUNfRU5BQkxFRCk7CisJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTiwgQkNNNDN4eF9JUlFfUkVBRFkpOworCQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpOyAvKiBkdW1teSByZWFkICovCisJCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX0dFTl9JUlFfUkVBU09OKTsgLyogZHVtbXkgcmVhZCAqLworCQliY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhiY20sIC0xLCAtMSk7CisJfQogfQogCiAvKiBodHRwOi8vYmNtLXNwZWNzLnNpcHNvbHV0aW9ucy5uZXQvU3VzcGVuZE1BQyAqLwpAQCAtMjMxMywxOCArMjI1NywyMyBAQAogCWludCBpOwogCXUzMiB0bXA7CiAKLQliY200M3h4X3Bvd2VyX3NhdmluZ19jdGxfYml0cyhiY20sIC0xLCAxKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fU1RBVFVTX0JJVEZJRUxELAotCSAgICAgICAgICAgICAgICBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpCi0JCQkmIH5CQ000M3h4X1NCRl9NQUNfRU5BQkxFRCk7Ci0JYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOyAvKiBkdW1teSByZWFkICovCi0JZm9yIChpID0gMTAwMDAwOyBpOyBpLS0pIHsKLQkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOwotCQlpZiAodG1wICYgQkNNNDN4eF9JUlFfUkVBRFkpCi0JCQlyZXR1cm47Ci0JCXVkZWxheSgxMCk7CisJYXNzZXJ0KGJjbS0+bWFjX3N1c3BlbmRlZCA+PSAwKTsKKwlpZiAoYmNtLT5tYWNfc3VzcGVuZGVkID09IDApIHsKKwkJYmNtNDN4eF9wb3dlcl9zYXZpbmdfY3RsX2JpdHMoYmNtLCAtMSwgMSk7CisJCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsCisJCSAgICAgICAgICAgICAgICBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpCisJCQkJJiB+QkNNNDN4eF9TQkZfTUFDX0VOQUJMRUQpOworCQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7IC8qIGR1bW15IHJlYWQgKi8KKwkJZm9yIChpID0gMTAwMDA7IGk7IGktLSkgeworCQkJdG1wID0gYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOworCQkJaWYgKHRtcCAmIEJDTTQzeHhfSVJRX1JFQURZKQorCQkJCWdvdG8gb3V0OworCQkJdWRlbGF5KDEpOworCQl9CisJCXByaW50a2woS0VSTl9FUlIgUEZYICJNQUMgc3VzcGVuZCBmYWlsZWRcbiIpOwogCX0KLQlwcmludGtsKEtFUk5fRVJSIFBGWCAiTUFDIHN1c3BlbmQgZmFpbGVkXG4iKTsKK291dDoKKwliY20tPm1hY19zdXNwZW5kZWQrKzsKIH0KIAogdm9pZCBiY200M3h4X3NldF9pd21vZGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLApAQCAtMjM5NCw3ICsyMzQzLDYgQEAKIAlpZiAoIW1vZHBhcmFtX25vbGVkcykKIAkJYmNtNDN4eF9sZWRzX2V4aXQoYmNtKTsKIAliY200M3h4X2dwaW9fY2xlYW51cChiY20pOwotCWZyZWVfaXJxKGJjbS0+aXJxLCBiY20pOwogCWJjbTQzeHhfcmVsZWFzZV9maXJtd2FyZShiY20sIDApOwogfQogCkBAIC0yNDA2LDcgKzIzNTQsNyBAQAogCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7CiAJaW50IGVycjsKLQlpbnQgdG1wOworCWludCBpLCB0bXA7CiAJdTMyIHZhbHVlMzI7CiAJdTE2IHZhbHVlMTY7CiAKQEAgLTI0MTksMTMgKzIzNjcsNTMgQEAKIAkJZ290byBvdXQ7CiAJYmNtNDN4eF91cGxvYWRfbWljcm9jb2RlKGJjbSk7CiAKLQllcnIgPSBiY200M3h4X2luaXRpYWxpemVfaXJxKGJjbSk7Ci0JaWYgKGVycikKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04sIDB4RkZGRkZGRkYpOworCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQsIDB4MDAwMjA0MDIpOworCWkgPSAwOworCXdoaWxlICgxKSB7CisJCXZhbHVlMzIgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7CisJCWlmICh2YWx1ZTMyID09IEJDTTQzeHhfSVJRX1JFQURZKQorCQkJYnJlYWs7CisJCWkrKzsKKwkJaWYgKGkgPj0gQkNNNDN4eF9JUlFXQUlUX01BWF9SRVRSSUVTKSB7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJJUlFfUkVBRFkgdGltZW91dFxuIik7CisJCQllcnIgPSAtRU5PREVWOworCQkJZ290byBlcnJfcmVsZWFzZV9mdzsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0KKwliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19HRU5fSVJRX1JFQVNPTik7IC8qIGR1bW15IHJlYWQgKi8KKworCXZhbHVlMTYgPSBiY200M3h4X3NobV9yZWFkMTYoYmNtLCBCQ000M3h4X1NITV9TSEFSRUQsCisJCQkJICAgICBCQ000M3h4X1VDT0RFX1JFVklTSU9OKTsKKworCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiTWljcm9jb2RlIHJldiAweCV4LCBwbCAweCV4ICIKKwkJIigyMCUuMmktJS4yaS0lLjJpICAlLjJpOiUuMmk6JS4yaSlcbiIsIHZhbHVlMTYsCisJCWJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKKwkJCQkgICBCQ000M3h4X1VDT0RFX1BBVENITEVWRUwpLAorCQkoYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAorCQkJCSAgICBCQ000M3h4X1VDT0RFX0RBVEUpID4+IDEyKSAmIDB4ZiwKKwkJKGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKKwkJCQkgICAgQkNNNDN4eF9VQ09ERV9EQVRFKSA+PiA4KSAmIDB4ZiwKKwkJYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAorCQkJCSAgIEJDTTQzeHhfVUNPREVfREFURSkgJiAweGZmLAorCQkoYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAorCQkJCSAgIEJDTTQzeHhfVUNPREVfVElNRSkgPj4gMTEpICYgMHgxZiwKKwkJKGJjbTQzeHhfc2htX3JlYWQxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwKKwkJCQkgICBCQ000M3h4X1VDT0RFX1RJTUUpID4+IDUpICYgMHgzZiwKKwkJYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAorCQkJCSAgIEJDTTQzeHhfVUNPREVfVElNRSkgJiAweDFmKTsKKworCWlmICggdmFsdWUxNiA+IDB4MTI4ICkgeworCQlkcHJpbnRrKEtFUk5fRVJSIFBGWAorCQkJIkZpcm13YXJlOiBubyBzdXBwb3J0IGZvciBtaWNyb2NvZGUgcmV2ID4gMHgxMjhcbiIpOworCQllcnIgPSAtMTsKIAkJZ290byBlcnJfcmVsZWFzZV9mdzsKKwl9CiAKIAllcnIgPSBiY200M3h4X2dwaW9faW5pdChiY20pOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOworCQlnb3RvIGVycl9yZWxlYXNlX2Z3OwogCiAJZXJyID0gYmNtNDN4eF91cGxvYWRfaW5pdHZhbHMoYmNtKTsKIAlpZiAoZXJyKQpAQCAtMjQ4OSwxMCArMjQ3NywxMiBAQAogCQliY200M3h4X3dyaXRlMzIoYmNtLCAweDAxOEMsIDB4MDIwMDAwMDApOwogCX0KIAliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04sIDB4MDAwMDQwMDApOwotCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUExX0lSUV9NQVNLLCAweDAwMDFEQzAwKTsKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BMF9JUlFfTUFTSywgMHgwMDAxREMwMCk7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTFfSVJRX01BU0ssIDB4MDAwMERDMDApOwogCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUEyX0lSUV9NQVNLLCAweDAwMDBEQzAwKTsKLQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BM19JUlFfTUFTSywgMHgwMDAwREMwMCk7Ci0JYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTRfSVJRX01BU0ssIDB4MDAwMURDMDApOworCWJjbTQzeHhfd3JpdGUzMihiY20sIEJDTTQzeHhfTU1JT19ETUEzX0lSUV9NQVNLLCAweDAwMDFEQzAwKTsKKwliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X01NSU9fRE1BNF9JUlFfTUFTSywgMHgwMDAwREMwMCk7CisJYmNtNDN4eF93cml0ZTMyKGJjbSwgQkNNNDN4eF9NTUlPX0RNQTVfSVJRX01BU0ssIDB4MDAwMERDMDApOwogCiAJdmFsdWUzMiA9IGJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9DSVJfU0JUTVNUQVRFTE9XKTsKIAl2YWx1ZTMyIHw9IDB4MDAxMDAwMDA7CkBAIC0yNTA5LDggKzI0OTksNiBAQAogCWJjbTQzeHhfcmFkaW9fdHVybl9vZmYoYmNtKTsKIGVycl9ncGlvX2NsZWFudXA6CiAJYmNtNDN4eF9ncGlvX2NsZWFudXAoYmNtKTsKLWVycl9mcmVlX2lycToKLQlmcmVlX2lycShiY20tPmlycSwgYmNtKTsKIGVycl9yZWxlYXNlX2Z3OgogCWJjbTQzeHhfcmVsZWFzZV9maXJtd2FyZShiY20sIDEpOwogCWdvdG8gb3V0OwpAQCAtMjU1MCwxMSArMjUzOCw5IEBACiB7CiAJLyogSW5pdGlhbGl6ZSBhICJwaHlpbmZvIiBzdHJ1Y3R1cmUuIFRoZSBzdHJ1Y3R1cmUgaXMgYWxyZWFkeQogCSAqIHplcm9lZCBvdXQuCisJICogVGhpcyBpcyBjYWxsZWQgb24gaW5zbW9kIHRpbWUgdG8gaW5pdGlhbGl6ZSBtZW1iZXJzLgogCSAqLwotCXBoeS0+YW50ZW5uYV9kaXZlcnNpdHkgPSAweEZGRkY7CiAJcGh5LT5zYXZlZHBjdGxyZWcgPSAweEZGRkY7Ci0JcGh5LT5taW5sb3dzaWdbMF0gPSAweEZGRkY7Ci0JcGh5LT5taW5sb3dzaWdbMV0gPSAweEZGRkY7CiAJc3Bpbl9sb2NrX2luaXQoJnBoeS0+bG9jayk7CiB9CiAKQEAgLTI1NjIsMTQgKzI1NDgsMTEgQEAKIHsKIAkvKiBJbml0aWFsaXplIGEgInJhZGlvaW5mbyIgc3RydWN0dXJlLiBUaGUgc3RydWN0dXJlIGlzIGFscmVhZHkKIAkgKiB6ZXJvZWQgb3V0LgorCSAqIFRoaXMgaXMgY2FsbGVkIG9uIGluc21vZCB0aW1lIHRvIGluaXRpYWxpemUgbWVtYmVycy4KIAkgKi8KIAlyYWRpby0+aW50ZXJmbW9kZSA9IEJDTTQzeHhfUkFESU9fSU5URVJGTU9ERV9OT05FOwogCXJhZGlvLT5jaGFubmVsID0gMHhGRjsKIAlyYWRpby0+aW5pdGlhbF9jaGFubmVsID0gMHhGRjsKLQlyYWRpby0+bG9mY2FsID0gMHhGRkZGOwotCXJhZGlvLT5pbml0dmFsID0gMHhGRkZGOwotCXJhZGlvLT5ucnNzaVswXSA9IC0xMDAwOwotCXJhZGlvLT5ucnNzaVsxXSA9IC0xMDAwOwogfQogCiBzdGF0aWMgaW50IGJjbTQzeHhfcHJvYmVfY29yZXMoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQpAQCAtMjU4Nyw3ICsyNTcwLDYgQEAKIAkJCQkgICAgKiBCQ000M3h4X01BWF84MDIxMV9DT1JFUyk7CiAJbWVtc2V0KCZiY20tPmNvcmVfODAyMTFfZXh0LCAwLCBzaXplb2Yoc3RydWN0IGJjbTQzeHhfY29yZWluZm9fODAyMTEpCiAJCQkJCSogQkNNNDN4eF9NQVhfODAyMTFfQ09SRVMpOwotCWJjbS0+Y3VycmVudF84MDIxMV9jb3JlX2lkeCA9IC0xOwogCWJjbS0+bnJfODAyMTFfYXZhaWxhYmxlID0gMDsKIAliY20tPmN1cnJlbnRfY29yZSA9IE5VTEw7CiAJYmNtLT5hY3RpdmVfODAyMTFfY29yZSA9IE5VTEw7CkBAIC0yNzU3LDYgKzI3MzksNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQkJYmNtLT5ucl84MDIxMV9hdmFpbGFibGUrKzsKKwkJCWNvcmUtPnByaXYgPSBleHRfODAyMTE7CiAJCQliY200M3h4X2luaXRfc3RydWN0X3BoeWluZm8oJmV4dF84MDIxMS0+cGh5KTsKIAkJCWJjbTQzeHhfaW5pdF9zdHJ1Y3RfcmFkaW9pbmZvKCZleHRfODAyMTEtPnJhZGlvKTsKIAkJCWJyZWFrOwpAQCAtMjg1Nyw3ICsyODQwLDggQEAKIH0KIAogLyogaHR0cDovL2JjbS1zcGVjcy5zaXBzb2x1dGlvbnMubmV0LzgwMjExSW5pdCAqLwotc3RhdGljIGludCBiY200M3h4X3dpcmVsZXNzX2NvcmVfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCitzdGF0aWMgaW50IGJjbTQzeHhfd2lyZWxlc3NfY29yZV9pbml0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKKwkJCQkgICAgICBpbnQgYWN0aXZlX3dsY29yZSkKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7CiAJc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwpAQCAtMjkzOSwxOSArMjkyMywyNiBAQAogCWlmIChiY20tPmN1cnJlbnRfY29yZS0+cmV2ID49IDUpCiAJCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDQzQywgMHgwMDBDKTsKIAotCWlmIChiY200M3h4X3VzaW5nX3BpbyhiY20pKQotCQllcnIgPSBiY200M3h4X3Bpb19pbml0KGJjbSk7Ci0JZWxzZQotCQllcnIgPSBiY200M3h4X2RtYV9pbml0KGJjbSk7Ci0JaWYgKGVycikKLQkJZ290byBlcnJfY2hpcF9jbGVhbnVwOworCWlmIChhY3RpdmVfd2xjb3JlKSB7CisJCWlmIChiY200M3h4X3VzaW5nX3BpbyhiY20pKQorCQkJZXJyID0gYmNtNDN4eF9waW9faW5pdChiY20pOworCQllbHNlCisJCQllcnIgPSBiY200M3h4X2RtYV9pbml0KGJjbSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycl9jaGlwX2NsZWFudXA7CisJfQogCWJjbTQzeHhfd3JpdGUxNihiY20sIDB4MDYxMiwgMHgwMDUwKTsKIAliY200M3h4X3NobV93cml0ZTE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELCAweDA0MTYsIDB4MDA1MCk7CiAJYmNtNDN4eF9zaG1fd3JpdGUxNihiY20sIEJDTTQzeHhfU0hNX1NIQVJFRCwgMHgwNDE0LCAweDAxRjQpOwogCi0JYmNtNDN4eF9tYWNfZW5hYmxlKGJjbSk7Ci0JYmNtNDN4eF9pbnRlcnJ1cHRfZW5hYmxlKGJjbSwgYmNtLT5pcnFfc2F2ZWRzdGF0ZSk7CisJaWYgKGFjdGl2ZV93bGNvcmUpIHsKKwkJaWYgKHJhZGlvLT5pbml0aWFsX2NoYW5uZWwgIT0gMHhGRikKKwkJCWJjbTQzeHhfcmFkaW9fc2VsZWN0Y2hhbm5lbChiY20sIHJhZGlvLT5pbml0aWFsX2NoYW5uZWwsIDApOworCX0KIAorCS8qIERvbid0IGVuYWJsZSBNQUMvSVJRIGhlcmUsIGFzIGl0IHdpbGwgcmFjZSB3aXRoIHRoZSBJUlEgaGFuZGxlci4KKwkgKiBXZSBlbmFibGUgaXQgbGF0ZXIuCisJICovCiAJYmNtLT5jdXJyZW50X2NvcmUtPmluaXRpYWxpemVkID0gMTsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtMzA2NiwxMSArMzA1Nyw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYmNtNDN4eF9zb2Z0bWFjX2luaXQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQotewotCWllZWU4MDIxMXNvZnRtYWNfc3RhcnQoYmNtLT5uZXRfZGV2KTsKLX0KLQogc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY19ldmVyeTEyMHNlYyhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7CiAJc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwpAQCAtMzE4Miw0NyArMzE2OCw0NiBAQAogCQkvKiBQZXJpb2RpYyB3b3JrIHdpbGwgdGFrZSBhIGxvbmcgdGltZSwgc28gd2Ugd2FudCBpdCB0bwogCQkgKiBiZSBwcmVlbXRpYmxlLgogCQkgKi8KLQkJYmNtNDN4eF9sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7CisJCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCQluZXRpZl9zdG9wX3F1ZXVlKGJjbS0+bmV0X2Rldik7CisJCXN5bmNocm9uaXplX25ldCgpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCQliY200M3h4X21hY19zdXNwZW5kKGJjbSk7CiAJCWlmIChiY200M3h4X3VzaW5nX3BpbyhiY20pKQogCQkJYmNtNDN4eF9waW9fZnJlZXplX3R4cXVldWVzKGJjbSk7CiAJCXNhdmVkaXJxcyA9IGJjbTQzeHhfaW50ZXJydXB0X2Rpc2FibGUoYmNtLCBCQ000M3h4X0lSUV9BTEwpOwotCQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOwotCQliY200M3h4X2xvY2tfbm9pcnEoYmNtKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCQliY200M3h4X3N5bmNocm9uaXplX2lycShiY20pOwogCX0gZWxzZSB7CiAJCS8qIFBlcmlvZGljIHdvcmsgc2hvdWxkIHRha2Ugc2hvcnQgdGltZSwgc28gd2Ugd2FudCBsb3cKIAkJICogbG9ja2luZyBvdmVyaGVhZC4KIAkJICovCi0JCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCQltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlkb19wZXJpb2RpY193b3JrKGJjbSk7CiAKIAlpZiAoYmFkbmVzcyA+IEJBRE5FU1NfTElNSVQpIHsKLQkJYmNtNDN4eF9sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7Ci0JCWlmIChsaWtlbHkoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpKSB7Ci0JCQl0YXNrbGV0X2VuYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7Ci0JCQliY200M3h4X2ludGVycnVwdF9lbmFibGUoYmNtLCBzYXZlZGlycXMpOwotCQkJaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpCi0JCQkJYmNtNDN4eF9waW9fdGhhd190eHF1ZXVlcyhiY20pOwotCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJCXRhc2tsZXRfZW5hYmxlKCZiY20tPmlzcl90YXNrbGV0KTsKKwkJYmNtNDN4eF9pbnRlcnJ1cHRfZW5hYmxlKGJjbSwgc2F2ZWRpcnFzKTsKKwkJaWYgKGJjbTQzeHhfdXNpbmdfcGlvKGJjbSkpCisJCQliY200M3h4X3Bpb190aGF3X3R4cXVldWVzKGJjbSk7CisJCWJjbTQzeHhfbWFjX2VuYWJsZShiY20pOwogCQluZXRpZl93YWtlX3F1ZXVlKGJjbS0+bmV0X2Rldik7Ci0JCW1taW93YigpOwotCQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOwotCQliY200M3h4X3VubG9ja19ub2lycShiY20pOwotCX0gZWxzZSB7Ci0JCW1taW93YigpOwotCQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOwogCX0KKwltbWlvd2IoKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIH0KIAotc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY190YXNrc19kZWxldGUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQordm9pZCBiY200M3h4X3BlcmlvZGljX3Rhc2tzX2RlbGV0ZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7CiAJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmYmNtLT5wZXJpb2RpY193b3JrKTsKIH0KIAotc3RhdGljIHZvaWQgYmNtNDN4eF9wZXJpb2RpY190YXNrc19zZXR1cChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCit2b2lkIGJjbTQzeHhfcGVyaW9kaWNfdGFza3Nfc2V0dXAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewogCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayA9ICYoYmNtLT5wZXJpb2RpY193b3JrKTsKIApAQCAtMzI0Myw5ICszMjI4LDkgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqKXJuZy0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYmNtNDN4eF9sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJihiY20pLT5pcnFfbG9jaywgZmxhZ3MpOwogCSpkYXRhID0gYmNtNDN4eF9yZWFkMTYoYmNtLCBCQ000M3h4X01NSU9fUk5HKTsKLQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihiY20pLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIChzaXplb2YodTE2KSk7CiB9CkBAIC0zMjcxLDEzOSArMzI1NiwzMjkgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGJjbTQzeHhfc2h1dGRvd25fYWxsX3dpcmVsZXNzX2NvcmVzKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKK3sKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaSwgZXJyOworCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpjb3JlOworCisJYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX1NIVVRUSU5HRE9XTik7CisJZm9yIChpID0gMDsgaSA8IGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlOyBpKyspIHsKKwkJY29yZSA9ICYoYmNtLT5jb3JlXzgwMjExW2ldKTsKKwkJYXNzZXJ0KGNvcmUtPmF2YWlsYWJsZSk7CisJCWlmICghY29yZS0+aW5pdGlhbGl6ZWQpCisJCQljb250aW51ZTsKKwkJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sIGNvcmUpOworCQlpZiAoZXJyKSB7CisJCQlkcHJpbnRrKEtFUk5fRVJSIFBGWCAic2h1dGRvd25fYWxsX3dpcmVsZXNzX2NvcmVzICIKKwkJCQkJICAgICAic3dpdGNoX2NvcmUgZmFpbGVkICglZClcbiIsIGVycik7CisJCQlyZXQgPSBlcnI7CisJCQljb250aW51ZTsKKwkJfQorCQliY200M3h4X2ludGVycnVwdF9kaXNhYmxlKGJjbSwgQkNNNDN4eF9JUlFfQUxMKTsKKwkJYmNtNDN4eF9yZWFkMzIoYmNtLCBCQ000M3h4X01NSU9fR0VOX0lSUV9SRUFTT04pOyAvKiBkdW1teSByZWFkICovCisJCWJjbTQzeHhfd2lyZWxlc3NfY29yZV9jbGVhbnVwKGJjbSk7CisJCWlmIChjb3JlID09IGJjbS0+YWN0aXZlXzgwMjExX2NvcmUpCisJCQliY20tPmFjdGl2ZV84MDIxMV9jb3JlID0gTlVMTDsKKwl9CisJZnJlZV9pcnEoYmNtLT5pcnEsIGJjbSk7CisJYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX1VOSU5JVCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBUaGlzIGlzIHRoZSBvcHBvc2l0ZSBvZiBiY200M3h4X2luaXRfYm9hcmQoKSAqLwogc3RhdGljIHZvaWQgYmNtNDN4eF9mcmVlX2JvYXJkKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKLQlpbnQgaSwgZXJyOwotCi0JYmNtNDN4eF9sb2NrX25vaXJxKGJjbSk7CisJYmNtNDN4eF9ybmdfZXhpdChiY20pOwogCWJjbTQzeHhfc3lzZnNfdW5yZWdpc3RlcihiY20pOwogCWJjbTQzeHhfcGVyaW9kaWNfdGFza3NfZGVsZXRlKGJjbSk7CiAKLQliY200M3h4X3NldF9zdGF0dXMoYmNtLCBCQ000M3h4X1NUQVRfU0hVVFRJTkdET1dOKTsKKwltdXRleF9sb2NrKCYoYmNtKS0+bXV0ZXgpOworCWJjbTQzeHhfc2h1dGRvd25fYWxsX3dpcmVsZXNzX2NvcmVzKGJjbSk7CisJYmNtNDN4eF9wY3RsX3NldF9jcnlzdGFsKGJjbSwgMCk7CisJbXV0ZXhfdW5sb2NrKCYoYmNtKS0+bXV0ZXgpOworfQogCi0JYmNtNDN4eF9ybmdfZXhpdChiY20pOworc3RhdGljIHZvaWQgcHJlcGFyZV9waHlkYXRhX2Zvcl9pbml0KHN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSkKK3sKKwlwaHktPmFudGVubmFfZGl2ZXJzaXR5ID0gMHhGRkZGOworCW1lbXNldChwaHktPm1pbmxvd3NpZywgMHhGRiwgc2l6ZW9mKHBoeS0+bWlubG93c2lnKSk7CisJbWVtc2V0KHBoeS0+bWlubG93c2lncG9zLCAwLCBzaXplb2YocGh5LT5taW5sb3dzaWdwb3MpKTsKKworCS8qIEZsYWdzICovCisJcGh5LT5jYWxpYnJhdGVkID0gMDsKKwlwaHktPmlzX2xvY2tlZCA9IDA7CisKKwlpZiAocGh5LT5fbG9fcGFpcnMpIHsKKwkJbWVtc2V0KHBoeS0+X2xvX3BhaXJzLCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBiY200M3h4X2xvcGFpcikgKiBCQ000M3h4X0xPX0NPVU5UKTsKKwl9CisJbWVtc2V0KHBoeS0+bG9vcGJhY2tfZ2FpbiwgMCwgc2l6ZW9mKHBoeS0+bG9vcGJhY2tfZ2FpbikpOworfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3JhZGlvZGF0YV9mb3JfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sCisJCQkJICAgICAgIHN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW8pCit7CisJaW50IGk7CisKKwkvKiBTZXQgZGVmYXVsdCBhdHRlbnVhdGlvbiB2YWx1ZXMuICovCisJcmFkaW8tPmJhc2ViYW5kX2F0dGVuID0gYmNtNDN4eF9kZWZhdWx0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGJjbSk7CisJcmFkaW8tPnJhZGlvX2F0dGVuID0gYmNtNDN4eF9kZWZhdWx0X3JhZGlvX2F0dGVudWF0aW9uKGJjbSk7CisJcmFkaW8tPnR4Y3RsMSA9IGJjbTQzeHhfZGVmYXVsdF90eGN0bDEoYmNtKTsKKwlyYWRpby0+dHhjdGwyID0gMHhGRkZGOworCXJhZGlvLT50eHB3cl9vZmZzZXQgPSAwOworCisJLyogTlJTU0kgKi8KKwlyYWRpby0+bnJzc2lzbG9wZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW8tPm5yc3NpKTsgaSsrKQorCQlyYWRpby0+bnJzc2lbaV0gPSAtMTAwMDsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpby0+bnJzc2lfbHQpOyBpKyspCisJCXJhZGlvLT5ucnNzaV9sdFtpXSA9IGk7CisKKwlyYWRpby0+bG9mY2FsID0gMHhGRkZGOworCXJhZGlvLT5pbml0dmFsID0gMHhGRkZGOworCisJcmFkaW8tPmFjaV9lbmFibGUgPSAwOworCXJhZGlvLT5hY2lfd2xhbl9hdXRvbWF0aWMgPSAwOworCXJhZGlvLT5hY2lfaHdfcnNzaSA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVfcHJpdl9mb3JfaW5pdChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCit7CisJaW50IGk7CisJc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKmNvcmU7CisJc3RydWN0IGJjbTQzeHhfY29yZWluZm9fODAyMTEgKndsZXh0OworCisJYXNzZXJ0KCFiY20tPmFjdGl2ZV84MDIxMV9jb3JlKTsKKworCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9JTklUSUFMSVpJTkcpOworCisJLyogRmxhZ3MgKi8KKwliY20tPndhc19pbml0aWFsaXplZCA9IDA7CisJYmNtLT5yZWcxMjRfc2V0XzB4NCA9IDA7CisKKwkvKiBTdGF0cyAqLworCW1lbXNldCgmYmNtLT5zdGF0cywgMCwgc2l6ZW9mKGJjbS0+c3RhdHMpKTsKKworCS8qIFdpcmVsZXNzIGNvcmUgZGF0YSAqLwogCWZvciAoaSA9IDA7IGkgPCBCQ000M3h4X01BWF84MDIxMV9DT1JFUzsgaSsrKSB7Ci0JCWlmICghYmNtLT5jb3JlXzgwMjExW2ldLmF2YWlsYWJsZSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIWJjbS0+Y29yZV84MDIxMVtpXS5pbml0aWFsaXplZCkKLQkJCWNvbnRpbnVlOworCQljb3JlID0gJihiY20tPmNvcmVfODAyMTFbaV0pOworCQl3bGV4dCA9IGNvcmUtPnByaXY7CiAKLQkJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfODAyMTFbaV0pOwotCQlhc3NlcnQoZXJyID09IDApOwotCQliY200M3h4X3dpcmVsZXNzX2NvcmVfY2xlYW51cChiY20pOworCQlpZiAoIWNvcmUtPmF2YWlsYWJsZSkKKwkJCWNvbnRpbnVlOworCQlhc3NlcnQod2xleHQgPT0gJihiY20tPmNvcmVfODAyMTFfZXh0W2ldKSk7CisKKwkJcHJlcGFyZV9waHlkYXRhX2Zvcl9pbml0KCZ3bGV4dC0+cGh5KTsKKwkJcHJlcGFyZV9yYWRpb2RhdGFfZm9yX2luaXQoYmNtLCAmd2xleHQtPnJhZGlvKTsKIAl9CiAKLQliY200M3h4X3BjdGxfc2V0X2NyeXN0YWwoYmNtLCAwKTsKKwkvKiBJUlEgcmVsYXRlZCBmbGFncyAqLworCWJjbS0+aXJxX3JlYXNvbiA9IDA7CisJbWVtc2V0KGJjbS0+ZG1hX3JlYXNvbiwgMCwgc2l6ZW9mKGJjbS0+ZG1hX3JlYXNvbikpOworCWJjbS0+aXJxX3NhdmVkc3RhdGUgPSBCQ000M3h4X0lSUV9JTklUSUFMOwogCisJYmNtLT5tYWNfc3VzcGVuZGVkID0gMTsKKworCS8qIE5vaXNlIGNhbGN1bGF0aW9uIGNvbnRleHQgKi8KKwltZW1zZXQoJmJjbS0+bm9pc2VjYWxjLCAwLCBzaXplb2YoYmNtLT5ub2lzZWNhbGMpKTsKKworCS8qIFBlcmlvZGljIHdvcmsgY29udGV4dCAqLworCWJjbS0+cGVyaW9kaWNfc3RhdGUgPSAwOworfQorCitzdGF0aWMgaW50IHdpcmVsZXNzX2NvcmVfdXAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAorCQkJICAgIGludCBhY3RpdmVfd2xjb3JlKQoreworCWludCBlcnI7CisKKwlpZiAoIWJjbTQzeHhfY29yZV9lbmFibGVkKGJjbSkpCisJCWJjbTQzeHhfd2lyZWxlc3NfY29yZV9yZXNldChiY20sIDEpOworCWlmICghYWN0aXZlX3dsY29yZSkKKwkJYmNtNDN4eF93aXJlbGVzc19jb3JlX21hcmtfaW5hY3RpdmUoYmNtKTsKKwllcnIgPSBiY200M3h4X3dpcmVsZXNzX2NvcmVfaW5pdChiY20sIGFjdGl2ZV93bGNvcmUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWlmICghYWN0aXZlX3dsY29yZSkKKwkJYmNtNDN4eF9yYWRpb190dXJuX29mZihiY20pOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qIFNlbGVjdCBhbmQgZW5hYmxlIHRoZSAidG8gYmUgdXNlZCIgd2lyZWxlc3MgY29yZS4KKyAqIExvY2tpbmc6IGJjbS0+bXV0ZXggbXVzdCBiZSBhcXVpcmVkIGJlZm9yZSBjYWxsaW5nIHRoaXMuCisgKiAgICAgICAgICBiY20tPmlycV9sb2NrIG11c3Qgbm90IGJlIGFxdWlyZWQuCisgKi8KK2ludCBiY200M3h4X3NlbGVjdF93aXJlbGVzc19jb3JlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwKKwkJCQkgaW50IHBoeXR5cGUpCit7CisJaW50IGksIGVycjsKKwlzdHJ1Y3QgYmNtNDN4eF9jb3JlaW5mbyAqYWN0aXZlX2NvcmUgPSBOVUxMOworCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvXzgwMjExICphY3RpdmVfd2xleHQgPSBOVUxMOworCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvICpjb3JlOworCXN0cnVjdCBiY200M3h4X2NvcmVpbmZvXzgwMjExICp3bGV4dDsKKwlpbnQgYWRqdXN0X2FjdGl2ZV9zYnRtc3RhdGVsb3cgPSAwOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChwaHl0eXBlIDwgMCkgeworCQkvKiBJZiBubyBwaHl0eXBlIGlzIHJlcXVlc3RlZCwgc2VsZWN0IHRoZSBmaXJzdCBjb3JlLiAqLworCQlhc3NlcnQoYmNtLT5jb3JlXzgwMjExWzBdLmF2YWlsYWJsZSk7CisJCXdsZXh0ID0gYmNtLT5jb3JlXzgwMjExWzBdLnByaXY7CisJCXBoeXR5cGUgPSB3bGV4dC0+cGh5LnR5cGU7CisJfQorCS8qIEZpbmQgdGhlIHJlcXVlc3RlZCBjb3JlLiAqLworCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7CisJCWNvcmUgPSAmKGJjbS0+Y29yZV84MDIxMVtpXSk7CisJCXdsZXh0ID0gY29yZS0+cHJpdjsKKwkJaWYgKHdsZXh0LT5waHkudHlwZSA9PSBwaHl0eXBlKSB7CisJCQlhY3RpdmVfY29yZSA9IGNvcmU7CisJCQlhY3RpdmVfd2xleHQgPSB3bGV4dDsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghYWN0aXZlX2NvcmUpCisJCXJldHVybiAtRVNSQ0g7IC8qIE5vIHN1Y2ggUEhZVFlQRSBvbiB0aGlzIGJvYXJkLiAqLworCisJaWYgKGJjbS0+YWN0aXZlXzgwMjExX2NvcmUpIHsKKwkJLyogV2UgYWxyZWFkeSBzZWxlY3RlZCBhIHdsIGNvcmUgaW4gdGhlIHBhc3QuCisJCSAqIFNvIGZpcnN0IGNsZWFuIHVwIGV2ZXJ5dGhpbmcuCisJCSAqLworCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggInNlbGVjdF93aXJlbGVzc19jb3JlOiBjbGVhbnVwXG4iKTsKKwkJaWVlZTgwMjExc29mdG1hY19zdG9wKGJjbS0+bmV0X2Rldik7CisJCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCk7CisJCWVyciA9IGJjbTQzeHhfZGlzYWJsZV9pbnRlcnJ1cHRzX3N5bmMoYmNtKTsKKwkJYXNzZXJ0KCFlcnIpOworCQl0YXNrbGV0X2VuYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7CisJCWVyciA9IGJjbTQzeHhfc2h1dGRvd25fYWxsX3dpcmVsZXNzX2NvcmVzKGJjbSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yOworCQkvKiBPaywgZXZlcnl0aGluZyBkb3duLCBjb250aW51ZSB0byByZS1pbml0aWFsaXplLiAqLworCQliY200M3h4X3NldF9zdGF0dXMoYmNtLCBCQ000M3h4X1NUQVRfSU5JVElBTElaSU5HKTsKKwl9CisKKwkvKiBSZXNldCBhbGwgZGF0YSBzdHJ1Y3R1cmVzLiAqLworCXByZXBhcmVfcHJpdl9mb3JfaW5pdChiY20pOworCisJZXJyID0gYmNtNDN4eF9wY3RsX3NldF9jbG9jayhiY20sIEJDTTQzeHhfUENUTF9DTEtfRkFTVCk7CisJaWYgKGVycikKKwkJZ290byBlcnJvcjsKKworCS8qIE1hcmsgYWxsIHVudXNlZCBjb3JlcyAiaW5hY3RpdmUiLiAqLworCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7CisJCWNvcmUgPSAmKGJjbS0+Y29yZV84MDIxMVtpXSk7CisJCXdsZXh0ID0gY29yZS0+cHJpdjsKKworCQlpZiAoY29yZSA9PSBhY3RpdmVfY29yZSkKKwkJCWNvbnRpbnVlOworCQllcnIgPSBiY200M3h4X3N3aXRjaF9jb3JlKGJjbSwgY29yZSk7CisJCWlmIChlcnIpIHsKKwkJCWRwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3Qgc3dpdGNoIHRvIGluYWN0aXZlICIKKwkJCQkJICAgICAiODAyLjExIGNvcmUgKCVkKVxuIiwgZXJyKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJZXJyID0gd2lyZWxlc3NfY29yZV91cChiY20sIDApOworCQlpZiAoZXJyKSB7CisJCQlkcHJpbnRrKEtFUk5fRVJSIFBGWCAiY29yZV91cCBmb3IgaW5hY3RpdmUgODAyLjExIGNvcmUgIgorCQkJCQkgICAgICJmYWlsZWQgKCVkKVxuIiwgZXJyKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJYWRqdXN0X2FjdGl2ZV9zYnRtc3RhdGVsb3cgPSAxOworCX0KKworCS8qIE5vdyBpbml0aWFsaXplIHRoZSBhY3RpdmUgODAyLjExIGNvcmUuICovCisJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sIGFjdGl2ZV9jb3JlKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoS0VSTl9FUlIgUEZYICJDb3VsZCBub3Qgc3dpdGNoIHRvIGFjdGl2ZSAiCisJCQkJICAgICAiODAyLjExIGNvcmUgKCVkKVxuIiwgZXJyKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGFkanVzdF9hY3RpdmVfc2J0bXN0YXRlbG93ICYmCisJICAgIGFjdGl2ZV93bGV4dC0+cGh5LnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cpIHsKKwkJdTMyIHNidG1zdGF0ZWxvdzsKKworCQlzYnRtc3RhdGVsb3cgPSBiY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfQ0lSX1NCVE1TVEFURUxPVyk7CisJCXNidG1zdGF0ZWxvdyB8PSAweDIwMDAwMDAwOworCQliY200M3h4X3dyaXRlMzIoYmNtLCBCQ000M3h4X0NJUl9TQlRNU1RBVEVMT1csIHNidG1zdGF0ZWxvdyk7CisJfQorCWVyciA9IHdpcmVsZXNzX2NvcmVfdXAoYmNtLCAxKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoS0VSTl9FUlIgUEZYICJjb3JlX3VwIGZvciBhY3RpdmUgODAyLjExIGNvcmUgIgorCQkJCSAgICAgImZhaWxlZCAoJWQpXG4iLCBlcnIpOworCQlnb3RvIGVycm9yOworCX0KKwllcnIgPSBiY200M3h4X3BjdGxfc2V0X2Nsb2NrKGJjbSwgQkNNNDN4eF9QQ1RMX0NMS19EWU5BTUlDKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCWJjbS0+YWN0aXZlXzgwMjExX2NvcmUgPSBhY3RpdmVfY29yZTsKKworCWJjbTQzeHhfbWFjZmlsdGVyX2NsZWFyKGJjbSwgQkNNNDN4eF9NQUNGSUxURVJfQVNTT0MpOworCWJjbTQzeHhfbWFjZmlsdGVyX3NldChiY20sIEJDTTQzeHhfTUFDRklMVEVSX1NFTEYsICh1OCAqKShiY20tPm5ldF9kZXYtPmRldl9hZGRyKSk7CisJYmNtNDN4eF9zZWN1cml0eV9pbml0KGJjbSk7CisJaWVlZTgwMjExc29mdG1hY19zdGFydChiY20tPm5ldF9kZXYpOworCisJLyogTGV0J3MgZ28hIEJlIGNhcmVmdWwgYWZ0ZXIgZW5hYmxpbmcgdGhlIElSUXMuCisJICogRG9uJ3Qgc3dpdGNoIGNvcmVzLCBmb3IgZXhhbXBsZS4KKwkgKi8KKwliY200M3h4X21hY19lbmFibGUoYmNtKTsKKwliY200M3h4X3NldF9zdGF0dXMoYmNtLCBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpOworCWVyciA9IGJjbTQzeHhfaW5pdGlhbGl6ZV9pcnEoYmNtKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCWJjbTQzeHhfaW50ZXJydXB0X2VuYWJsZShiY20sIGJjbS0+aXJxX3NhdmVkc3RhdGUpOworCisJZHByaW50ayhLRVJOX0lORk8gUEZYICJTZWxlY3RlZCA4MDIuMTEgY29yZSAocGh5dHlwZSAlZClcbiIsCisJCWFjdGl2ZV93bGV4dC0+cGh5LnR5cGUpOworCisJcmV0dXJuIDA7CisKK2Vycm9yOgogCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9VTklOSVQpOwotCWJjbTQzeHhfdW5sb2NrX25vaXJxKGJjbSk7CisJYmNtNDN4eF9wY3RsX3NldF9jbG9jayhiY20sIEJDTTQzeHhfUENUTF9DTEtfU0xPVyk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBiY200M3h4X2luaXRfYm9hcmQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKQogewotCWludCBpLCBlcnI7Ci0JaW50IGNvbm5lY3RfcGh5OworCWludCBlcnI7CiAKLQltaWdodF9zbGVlcCgpOworCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7CiAKLQliY200M3h4X2xvY2tfbm9pcnEoYmNtKTsKLQliY200M3h4X3NldF9zdGF0dXMoYmNtLCBCQ000M3h4X1NUQVRfSU5JVElBTElaSU5HKTsKLQorCXRhc2tsZXRfZW5hYmxlKCZiY20tPmlzcl90YXNrbGV0KTsKIAllcnIgPSBiY200M3h4X3BjdGxfc2V0X2NyeXN0YWwoYmNtLCAxKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dDsKKwkJZ290byBlcnJfdGFza2xldDsKIAllcnIgPSBiY200M3h4X3BjdGxfaW5pdChiY20pOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX2NyeXN0YWxfb2ZmOwotCWVyciA9IGJjbTQzeHhfcGN0bF9zZXRfY2xvY2soYmNtLCBCQ000M3h4X1BDVExfQ0xLX0ZBU1QpOworCWVyciA9IGJjbTQzeHhfc2VsZWN0X3dpcmVsZXNzX2NvcmUoYmNtLCAtMSk7CiAJaWYgKGVycikKIAkJZ290byBlcnJfY3J5c3RhbF9vZmY7Ci0KLQl0YXNrbGV0X2VuYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7Ci0JZm9yIChpID0gMDsgaSA8IGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlOyBpKyspIHsKLQkJZXJyID0gYmNtNDN4eF9zd2l0Y2hfY29yZShiY20sICZiY20tPmNvcmVfODAyMTFbaV0pOwotCQlhc3NlcnQoZXJyICE9IC1FTk9ERVYpOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfODAyMTFfdW53aW5kOwotCi0JCS8qIEVuYWJsZSB0aGUgc2VsZWN0ZWQgd2lyZWxlc3MgY29yZS4KLQkJICogQ29ubmVjdCBQSFkgb25seSBvbiB0aGUgZmlyc3QgY29yZS4KLQkJICovCi0JCWlmICghYmNtNDN4eF9jb3JlX2VuYWJsZWQoYmNtKSkgewotCQkJaWYgKGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlID09IDEpIHsKLQkJCQljb25uZWN0X3BoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+Y29ubmVjdGVkOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAoaSA9PSAwKQotCQkJCQljb25uZWN0X3BoeSA9IDE7Ci0JCQkJZWxzZQotCQkJCQljb25uZWN0X3BoeSA9IDA7Ci0JCQl9Ci0JCQliY200M3h4X3dpcmVsZXNzX2NvcmVfcmVzZXQoYmNtLCBjb25uZWN0X3BoeSk7Ci0JCX0KLQotCQlpZiAoaSAhPSAwKQotCQkJYmNtNDN4eF93aXJlbGVzc19jb3JlX21hcmtfaW5hY3RpdmUoYmNtLCAmYmNtLT5jb3JlXzgwMjExWzBdKTsKLQotCQllcnIgPSBiY200M3h4X3dpcmVsZXNzX2NvcmVfaW5pdChiY20pOwotCQlpZiAoZXJyKQotCQkJZ290byBlcnJfODAyMTFfdW53aW5kOwotCi0JCWlmIChpICE9IDApIHsKLQkJCWJjbTQzeHhfbWFjX3N1c3BlbmQoYmNtKTsKLQkJCWJjbTQzeHhfaW50ZXJydXB0X2Rpc2FibGUoYmNtLCBCQ000M3h4X0lSUV9BTEwpOwotCQkJYmNtNDN4eF9yYWRpb190dXJuX29mZihiY20pOwotCQl9Ci0JfQotCWJjbS0+YWN0aXZlXzgwMjExX2NvcmUgPSAmYmNtLT5jb3JlXzgwMjExWzBdOwotCWlmIChiY20tPm5yXzgwMjExX2F2YWlsYWJsZSA+PSAyKSB7Ci0JCWJjbTQzeHhfc3dpdGNoX2NvcmUoYmNtLCAmYmNtLT5jb3JlXzgwMjExWzBdKTsKLQkJYmNtNDN4eF9tYWNfZW5hYmxlKGJjbSk7Ci0JfQorCWVyciA9IGJjbTQzeHhfc3lzZnNfcmVnaXN0ZXIoYmNtKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl93bHNodXRkb3duOwogCWVyciA9IGJjbTQzeHhfcm5nX2luaXQoYmNtKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl84MDIxMV91bndpbmQ7Ci0JYmNtNDN4eF9tYWNmaWx0ZXJfY2xlYXIoYmNtLCBCQ000M3h4X01BQ0ZJTFRFUl9BU1NPQyk7Ci0JYmNtNDN4eF9tYWNmaWx0ZXJfc2V0KGJjbSwgQkNNNDN4eF9NQUNGSUxURVJfU0VMRiwgKHU4ICopKGJjbS0+bmV0X2Rldi0+ZGV2X2FkZHIpKTsKLQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIjgwMjExIGNvcmVzIGluaXRpYWxpemVkXG4iKTsKLQliY200M3h4X3NlY3VyaXR5X2luaXQoYmNtKTsKLQliY200M3h4X3NvZnRtYWNfaW5pdChiY20pOwotCi0JYmNtNDN4eF9wY3RsX3NldF9jbG9jayhiY20sIEJDTTQzeHhfUENUTF9DTEtfRFlOQU1JQyk7Ci0KLQlpZiAoYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSktPmluaXRpYWxfY2hhbm5lbCAhPSAweEZGKSB7Ci0JCWJjbTQzeHhfbWFjX3N1c3BlbmQoYmNtKTsKLQkJYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgYmNtNDN4eF9jdXJyZW50X3JhZGlvKGJjbSktPmluaXRpYWxfY2hhbm5lbCwgMCk7Ci0JCWJjbTQzeHhfbWFjX2VuYWJsZShiY20pOwotCX0KLQotCS8qIEluaXRpYWxpemF0aW9uIG9mIHRoZSBib2FyZCBpcyBkb25lLiBGbGFnIGl0IGFzIHN1Y2guICovCi0JYmNtNDN4eF9zZXRfc3RhdHVzKGJjbSwgQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKTsKLQorCQlnb3RvIGVycl9zeXNmc191bnJlZzsKIAliY200M3h4X3BlcmlvZGljX3Rhc2tzX3NldHVwKGJjbSk7Ci0JYmNtNDN4eF9zeXNmc19yZWdpc3RlcihiY20pOwotCS8vRklYTUU6IGNoZWNrIGZvciBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyIGZhaWx1cmUuIFRoaXMgZnVuY3Rpb24gaXMgYSBiaXQgbWVzc3kgcmVnYXJkaW5nIHVud2luZGluZywgdGhvdWdoLi4uCiAKIAkvKkZJWE1FOiBUaGlzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHNvZnRtYWMgaW5zdGVhZC4gKi8KIAlzY2hlZHVsZV93b3JrKCZiY20tPnNvZnRtYWMtPmFzc29jaW5mby53b3JrKTsKIAotCWFzc2VydChlcnIgPT0gMCk7CiBvdXQ6Ci0JYmNtNDN4eF91bmxvY2tfbm9pcnEoYmNtKTsKKwltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogCi1lcnJfODAyMTFfdW53aW5kOgotCXRhc2tsZXRfZGlzYWJsZSgmYmNtLT5pc3JfdGFza2xldCk7Ci0JLyogdW53aW5kIGFsbCA4MDIxMSBpbml0aWFsaXphdGlvbiAqLwotCWZvciAoaSA9IDA7IGkgPCBiY20tPm5yXzgwMjExX2F2YWlsYWJsZTsgaSsrKSB7Ci0JCWlmICghYmNtLT5jb3JlXzgwMjExW2ldLmluaXRpYWxpemVkKQotCQkJY29udGludWU7Ci0JCWJjbTQzeHhfaW50ZXJydXB0X2Rpc2FibGUoYmNtLCBCQ000M3h4X0lSUV9BTEwpOwotCQliY200M3h4X3dpcmVsZXNzX2NvcmVfY2xlYW51cChiY20pOwotCX0KK2Vycl9zeXNmc191bnJlZzoKKwliY200M3h4X3N5c2ZzX3VucmVnaXN0ZXIoYmNtKTsKK2Vycl93bHNodXRkb3duOgorCWJjbTQzeHhfc2h1dGRvd25fYWxsX3dpcmVsZXNzX2NvcmVzKGJjbSk7CiBlcnJfY3J5c3RhbF9vZmY6CiAJYmNtNDN4eF9wY3RsX3NldF9jcnlzdGFsKGJjbSwgMCk7CitlcnJfdGFza2xldDoKKwl0YXNrbGV0X2Rpc2FibGUoJmJjbS0+aXNyX3Rhc2tsZXQpOwogCWdvdG8gb3V0OwogfQogCkBAIC0zNjQ3LDcgKzM4MjIsOCBAQAogCXN0cnVjdCBiY200M3h4X3JhZGlvaW5mbyAqcmFkaW87CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7CiAJCWJjbTQzeHhfbWFjX3N1c3BlbmQoYmNtKTsKIAkJYmNtNDN4eF9yYWRpb19zZWxlY3RjaGFubmVsKGJjbSwgY2hhbm5lbCwgMCk7CkBAIC0zNjU2LDcgKzM4MzIsOCBAQAogCQlyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwogCQlyYWRpby0+aW5pdGlhbF9jaGFubmVsID0gY2hhbm5lbDsKIAl9Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIH0KIAogLyogc2V0X3NlY3VyaXR5KCkgY2FsbGJhY2sgaW4gc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKi8KQEAgLTM2NzAsNyArMzg0Nyw4IEBACiAJCiAJZHByaW50ayhLRVJOX0lORk8gUEZYICJzZXQgc2VjdXJpdHkgY2FsbGVkIik7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJZm9yIChrZXlpZHggPSAwOyBrZXlpZHg8V0VQX0tFWVM7IGtleWlkeCsrKQogCQlpZiAoc2VjLT5mbGFncyAmICgxPDxrZXlpZHgpKSB7CkBAIC0zNzAxLDcgKzM4NzksNyBAQAogCX0KIAlpZiAoc2VjLT5mbGFncyAmIFNFQ19BVVRIX01PREUpIHsKIAkJc2VjaW5mby0+YXV0aF9tb2RlID0gc2VjLT5hdXRoX21vZGU7Ci0JCWRwcmludGsoIiwgLmF1dGhfbW9kZSA9ICVkXG4iLCBzZWMtPmF1dGhfbW9kZSk7CisJCWRwcmludGsoIiwgLmF1dGhfbW9kZSA9ICVkIiwgc2VjLT5hdXRoX21vZGUpOwogCX0KIAlkcHJpbnRrKCJcbiIpOwogCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCAmJgpAQCAtMzczOSw3ICszOTE3LDggQEAKIAkJfSBlbHNlCiAJCQkJYmNtNDN4eF9jbGVhcl9rZXlzKGJjbSk7CiAJfQotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiB9CiAKIC8qIGhhcmRfc3RhcnRfeG1pdCgpIGNhbGxiYWNrIGluIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICovCkBAIC0zNzUxLDEyICszOTMwLDE0IEBACiAJaW50IGVyciA9IC1FTk9ERVY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWJjbTQzeHhfbG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJaWYgKGxpa2VseShiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkpCiAJCWVyciA9IGJjbTQzeHhfdHgoYmNtLCB0eGIpOwotCWJjbTQzeHhfdW5sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCi0JcmV0dXJuIGVycjsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCXJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqIGJjbTQzeHhfbmV0X2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldikKQEAgLTM3NjksOSArMzk1MCw5IEBACiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQliY200M3h4X2xvY2tfaXJxb25seShiY20sIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWJjbTQzeHhfY29udHJvbGxlcl9yZXN0YXJ0KGJjbSwgIlRYIHRpbWVvdXQiKTsKLQliY200M3h4X3VubG9ja19pcnFvbmx5KGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIH0KIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCkBAIC0zNzgxLDcgKzM5NjIsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JYmNtNDN4eF9pbnRlcnJ1cHRfaGFuZGxlcihiY20tPmlycSwgYmNtLCBOVUxMKTsKKwlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSA9PSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpCisJCWJjbTQzeHhfaW50ZXJydXB0X2hhbmRsZXIoYmNtLT5pcnEsIGJjbSwgTlVMTCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogI2VuZGlmIC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCkBAIC0zNzk5LDkgKzM5ODEsMTAgQEAKIAlpbnQgZXJyOwogCiAJaWVlZTgwMjExc29mdG1hY19zdG9wKG5ldF9kZXYpOwotCWVyciA9IGJjbTQzeHhfZGlzYWJsZV9pbnRlcnJ1cHRzX3N5bmMoYmNtLCBOVUxMKTsKKwllcnIgPSBiY200M3h4X2Rpc2FibGVfaW50ZXJydXB0c19zeW5jKGJjbSk7CiAJYXNzZXJ0KCFlcnIpOwogCWJjbTQzeHhfZnJlZV9ib2FyZChiY20pOworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM4MTgsMTAgKzQwMDEsMTIgQEAKIAliY20tPnNvZnRtYWMtPnNldF9jaGFubmVsID0gYmNtNDN4eF9pZWVlODAyMTFfc2V0X2NoYW47CiAKIAliY20tPmlycV9zYXZlZHN0YXRlID0gQkNNNDN4eF9JUlFfSU5JVElBTDsKKwliY20tPm1hY19zdXNwZW5kZWQgPSAxOwogCWJjbS0+cGNpX2RldiA9IHBjaV9kZXY7CiAJYmNtLT5uZXRfZGV2ID0gbmV0X2RldjsKIAliY20tPmJhZF9mcmFtZXNfcHJlZW1wdCA9IG1vZHBhcmFtX2JhZF9mcmFtZXNfcHJlZW1wdDsKIAlzcGluX2xvY2tfaW5pdCgmYmNtLT5pcnFfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJmJjbS0+bGVkc19sb2NrKTsKIAltdXRleF9pbml0KCZiY20tPm11dGV4KTsKIAl0YXNrbGV0X2luaXQoJmJjbS0+aXNyX3Rhc2tsZXQsCiAJCSAgICAgKHZvaWQgKCopKHVuc2lnbmVkIGxvbmcpKWJjbTQzeHhfaW50ZXJydXB0X3Rhc2tsZXQsCkBAIC0zOTQwLDcgKzQxMjUsNiBAQAogCWJjbTQzeHhfZGVidWdmc19yZW1vdmVfZGV2aWNlKGJjbSk7CiAJdW5yZWdpc3Rlcl9uZXRkZXYobmV0X2Rldik7CiAJYmNtNDN4eF9kZXRhY2hfYm9hcmQoYmNtKTsKLQlhc3NlcnQoYmNtLT51Y29kZSA9PSBOVUxMKTsKIAlmcmVlX2llZWU4MDIxMXNvZnRtYWMobmV0X2Rldik7CiB9CiAKQEAgLTM5NTAsNDcgKzQxMzQsMzEgQEAKIHN0YXRpYyB2b2lkIGJjbTQzeHhfY2hpcF9yZXNldCh2b2lkICpfYmNtKQogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IF9iY207Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYgPSBiY20tPm5ldF9kZXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBiY20tPnBjaV9kZXY7Ci0JaW50IGVycjsKLQlpbnQgd2FzX2luaXRpYWxpemVkID0gKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKTsKKwlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHk7CisJaW50IGVyciA9IC1FTk9ERVY7CiAKLQluZXRpZl9zdG9wX3F1ZXVlKGJjbS0+bmV0X2Rldik7Ci0JdGFza2xldF9kaXNhYmxlKCZiY20tPmlzcl90YXNrbGV0KTsKLQotCWJjbS0+ZmlybXdhcmVfbm9yZWxlYXNlID0gMTsKLQlpZiAod2FzX2luaXRpYWxpemVkKQotCQliY200M3h4X2ZyZWVfYm9hcmQoYmNtKTsKLQliY20tPmZpcm13YXJlX25vcmVsZWFzZSA9IDA7Ci0JYmNtNDN4eF9kZXRhY2hfYm9hcmQoYmNtKTsKLQllcnIgPSBiY200M3h4X2luaXRfcHJpdmF0ZShiY20sIG5ldF9kZXYsIHBjaV9kZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gZmFpbHVyZTsKLQllcnIgPSBiY200M3h4X2F0dGFjaF9ib2FyZChiY20pOwotCWlmIChlcnIpCi0JCWdvdG8gZmFpbHVyZTsKLQlpZiAod2FzX2luaXRpYWxpemVkKSB7Ci0JCWVyciA9IGJjbTQzeHhfaW5pdF9ib2FyZChiY20pOwotCQlpZiAoZXJyKQotCQkJZ290byBmYWlsdXJlOworCW11dGV4X2xvY2soJihiY20pLT5tdXRleCk7CisJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7CisJCWJjbTQzeHhfcGVyaW9kaWNfdGFza3NfZGVsZXRlKGJjbSk7CisJCXBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKKwkJZXJyID0gYmNtNDN4eF9zZWxlY3Rfd2lyZWxlc3NfY29yZShiY20sIHBoeS0+dHlwZSk7CisJCWlmICghZXJyKQorCQkJYmNtNDN4eF9wZXJpb2RpY190YXNrc19zZXR1cChiY20pOwogCX0KLQluZXRpZl93YWtlX3F1ZXVlKGJjbS0+bmV0X2Rldik7Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkNvbnRyb2xsZXIgcmVzdGFydGVkXG4iKTsKKwltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7CiAKLQlyZXR1cm47Ci1mYWlsdXJlOgotCXByaW50ayhLRVJOX0VSUiBQRlggIkNvbnRyb2xsZXIgcmVzdGFydCBmYWlsZWRcbiIpOworCXByaW50ayhLRVJOX0VSUiBQRlggIkNvbnRyb2xsZXIgcmVzdGFydCVzXG4iLAorCSAgICAgICAoZXJyID09IDApID8gImVkIiA6ICIgZmFpbGVkIik7CiB9CiAKIC8qIEhhcmQtcmVzZXQgdGhlIGNoaXAuCiAgKiBUaGlzIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgb3IgcHJvY2VzcyBjb250ZXh0LgotICogTWFrZSBzdXJlIHRvIF9ub3RfIHJlLWVuYWJsZSBkZXZpY2UgaW50ZXJydXB0cyBhZnRlciB0aGlzIGhhcyBiZWVuIGNhbGxlZC4KLSovCisgKiBiY20tPmlycV9sb2NrIG11c3QgYmUgbG9ja2VkLgorICovCiB2b2lkIGJjbTQzeHhfY29udHJvbGxlcl9yZXN0YXJ0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgY29uc3QgY2hhciAqcmVhc29uKQogewotCWJjbTQzeHhfc2V0X3N0YXR1cyhiY20sIEJDTTQzeHhfU1RBVF9SRVNUQVJUSU5HKTsKLQliY200M3h4X2ludGVycnVwdF9kaXNhYmxlKGJjbSwgQkNNNDN4eF9JUlFfQUxMKTsKLQliY200M3h4X3JlYWQzMihiY20sIEJDTTQzeHhfTU1JT19TVEFUVVNfQklURklFTEQpOyAvKiBkdW1teSByZWFkICovCisJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQorCQlyZXR1cm47CiAJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ29udHJvbGxlciBSRVNFVCAoJXMpIC4uLlxuIiwgcmVhc29uKTsKIAlJTklUX1dPUksoJmJjbS0+cmVzdGFydF93b3JrLCBiY200M3h4X2NoaXBfcmVzZXQsIGJjbSk7CiAJc2NoZWR1bGVfd29yaygmYmNtLT5yZXN0YXJ0X3dvcmspOwpAQCAtNDAwMiwyMSArNDE3MCwxNiBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCB0cnlfdG9fc2h1dGRvd24gPSAwLCBlcnI7CisJaW50IGVycjsKIAogCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiU3VzcGVuZGluZy4uLlxuIik7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKLQliY20tPndhc19pbml0aWFsaXplZCA9IChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCk7Ci0JaWYgKGJjbS0+d2FzX2luaXRpYWxpemVkKQotCQl0cnlfdG9fc2h1dGRvd24gPSAxOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7Ci0KIAluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldF9kZXYpOwotCWlmICh0cnlfdG9fc2h1dGRvd24pIHsKKwliY20tPndhc19pbml0aWFsaXplZCA9IDA7CisJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKSB7CisJCWJjbS0+d2FzX2luaXRpYWxpemVkID0gMTsKIAkJaWVlZTgwMjExc29mdG1hY19zdG9wKG5ldF9kZXYpOwotCQllcnIgPSBiY200M3h4X2Rpc2FibGVfaW50ZXJydXB0c19zeW5jKGJjbSwgJmJjbS0+aXJxX3NhdmVkc3RhdGUpOworCQllcnIgPSBiY200M3h4X2Rpc2FibGVfaW50ZXJydXB0c19zeW5jKGJjbSk7CiAJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQlkcHJpbnRrKEtFUk5fRVJSIFBGWCAiU3VzcGVuZCBmYWlsZWQuXG4iKTsKIAkJCXJldHVybiAtRUFHQUlOOwpAQCAtNDA0OSwxNyArNDIxMiwxNCBAQAogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOwogCiAJYmNtNDN4eF9jaGlwc2V0X2F0dGFjaChiY20pOwotCWlmIChiY20tPndhc19pbml0aWFsaXplZCkgewotCQliY20tPmlycV9zYXZlZHN0YXRlID0gQkNNNDN4eF9JUlFfSU5JVElBTDsKKwlpZiAoYmNtLT53YXNfaW5pdGlhbGl6ZWQpCiAJCWVyciA9IGJjbTQzeHhfaW5pdF9ib2FyZChiY20pOwotCX0KIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggIlJlc3VtZSBmYWlsZWQhXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0KIAluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldF9kZXYpOwotCQorCiAJZHByaW50ayhLRVJOX0lORk8gUEZYICJEZXZpY2UgcmVzdW1lZC5cbiIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uaAppbmRleCAxMTY0OTM2Li5mNzYzNTcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmgKQEAgLTEzMywxMSArMTMzLDE3IEBACiAKIGludCBiY200M3h4X3N3aXRjaF9jb3JlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgc3RydWN0IGJjbTQzeHhfY29yZWluZm8gKm5ld19jb3JlKTsKIAoraW50IGJjbTQzeHhfc2VsZWN0X3dpcmVsZXNzX2NvcmUoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLAorCQkJCSBpbnQgcGh5dHlwZSk7CisKIHZvaWQgYmNtNDN4eF93aXJlbGVzc19jb3JlX3Jlc2V0KHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSwgaW50IGNvbm5lY3RfcGh5KTsKIAogdm9pZCBiY200M3h4X21hY19zdXNwZW5kKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7CiB2b2lkIGJjbTQzeHhfbWFjX2VuYWJsZShzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pOwogCit2b2lkIGJjbTQzeHhfcGVyaW9kaWNfdGFza3NfZGVsZXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSk7Cit2b2lkIGJjbTQzeHhfcGVyaW9kaWNfdGFza3Nfc2V0dXAoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKKwogdm9pZCBiY200M3h4X2NvbnRyb2xsZXJfcmVzdGFydChzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20sIGNvbnN0IGNoYXIgKnJlYXNvbik7CiAKIGludCBiY200M3h4X3Nwcm9tX3JlYWQoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtLCB1MTYgKnNwcm9tKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYwppbmRleCBmODIwMGRlLi5lYWZkMGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCkBAIC04MSw2ICs4MSwxNiBAQAogc3RhdGljIHZvaWQgYmNtNDN4eF9waHlfaW5pdGcoc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtKTsKIAogCitzdGF0aWMgaW5saW5lCit2b2lkIGJjbTQzeHhfdm9sdW50YXJ5X3ByZWVtcHQodm9pZCkKK3sKKwlhc3NlcnQoIWluX2F0b21pYygpICYmICFpbl9pcnEoKSAmJgorCSAgICAgICAhaW5faW50ZXJydXB0KCkgJiYgIWlycXNfZGlzYWJsZWQoKSk7CisjaWZuZGVmIENPTkZJR19QUkVFTVBUCisJY29uZF9yZXNjaGVkKCk7CisjZW5kaWYgLyogQ09ORklHX1BSRUVNUFQgKi8KK30KKwogdm9pZCBiY200M3h4X3Jhd19waHlfbG9jayhzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20pCiB7CiAJc3RydWN0IGJjbTQzeHhfcGh5aW5mbyAqcGh5ID0gYmNtNDN4eF9jdXJyZW50X3BoeShiY20pOwpAQCAtMTMzLDIyICsxNDMsMTQgQEAKIHZvaWQgYmNtNDN4eF9waHlfY2FsaWJyYXRlKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHkgPSBiY200M3h4X2N1cnJlbnRfcGh5KGJjbSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWJjbTQzeHhfcmVhZDMyKGJjbSwgQkNNNDN4eF9NTUlPX1NUQVRVU19CSVRGSUVMRCk7IC8qIER1bW15IHJlYWQuICovCiAJaWYgKHBoeS0+Y2FsaWJyYXRlZCkKIAkJcmV0dXJuOwogCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0cgJiYgcGh5LT5yZXYgPT0gMSkgewotCQkvKiBXZSBkbyBub3Qgd2FudCB0byBiZSBwcmVlbXB0ZWQgd2hpbGUgY2FsaWJyYXRpbmcKLQkJICogdGhlIGhhcmR3YXJlLgotCQkgKi8KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJCWJjbTQzeHhfd2lyZWxlc3NfY29yZV9yZXNldChiY20sIDApOwogCQliY200M3h4X3BoeV9pbml0ZyhiY20pOwogCQliY200M3h4X3dpcmVsZXNzX2NvcmVfcmVzZXQoYmNtLCAxKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogCXBoeS0+Y2FsaWJyYXRlZCA9IDE7CiB9CkBAIC0xMjk5LDcgKzEzMDEsOSBAQAogewogCWludCBpOwogCXUxNiByZXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspewogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAxNSwgMHhBRkEwKTsKIAkJdWRlbGF5KDEpOwpAQCAtMTMwOSw2ICsxMzEzLDggQEAKIAkJdWRlbGF5KDQwKTsKIAkJcmV0ICs9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkMpOwogCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJYmNtNDN4eF92b2x1bnRhcnlfcHJlZW1wdCgpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE0MzUsNiArMTQ0MSw3IEBACiAJfQogCXJldCA9IGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDAwMkQpOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwliY200M3h4X3ZvbHVudGFyeV9wcmVlbXB0KCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc2MCw2ICsxNzY3LDcgQEAKIAkJCWJjbTQzeHhfcmFkaW9fd3JpdGUxNihiY20sIDB4NDMsIGkpOwogCQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHg1MiwgcmFkaW8tPnR4Y3RsMik7CiAJCQl1ZGVsYXkoMTApOworCQkJYmNtNDN4eF92b2x1bnRhcnlfcHJlZW1wdCgpOwogCiAJCQliY200M3h4X3BoeV9zZXRfYmFzZWJhbmRfYXR0ZW51YXRpb24oYmNtLCBqICogMik7CiAKQEAgLTE4MDMsNiArMTgxMSw3IEBACiAJCQkJCSAgICAgIHJhZGlvLT50eGN0bDIKIAkJCQkJICAgICAgfCAoMy8qdHhjdGwxKi8gPDwgNCkpOy8vRklYTUU6IHNob3VsZG4ndCB0eGN0bDEgYmUgemVybyBoZXJlIGFuZCAzIGluIHRoZSBsb29wIGFib3ZlPwogCQkJdWRlbGF5KDEwKTsKKwkJCWJjbTQzeHhfdm9sdW50YXJ5X3ByZWVtcHQoKTsKIAogCQkJYmNtNDN4eF9waHlfc2V0X2Jhc2ViYW5kX2F0dGVudWF0aW9uKGJjbSwgaiAqIDIpOwogCkBAIC0xODI0LDYgKzE4MzMsNyBAQAogCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDgxMiwgKHIyNyA8PCA4KSB8IDB4QTIpOwogCQl1ZGVsYXkoMik7CiAJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwODEyLCAocjI3IDw8IDgpIHwgMHhBMyk7CisJCWJjbTQzeHhfdm9sdW50YXJ5X3ByZWVtcHQoKTsKIAl9IGVsc2UKIAkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMTUsIHIyNyB8IDB4RUZBMCk7CiAJYmNtNDN4eF9waHlfbG9fYWRqdXN0KGJjbSwgaXNfaW5pdGlhbGl6aW5nKTsKQEAgLTIxODgsMTIgKzIxOTgsNiBAQAogewogCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKIAlpbnQgZXJyID0gLUVOT0RFVjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogV2UgZG8gbm90IHdhbnQgdG8gYmUgcHJlZW1wdGVkIHdoaWxlIGNhbGlicmF0aW5nCi0JICogdGhlIGhhcmR3YXJlLgotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogCXN3aXRjaCAocGh5LT50eXBlKSB7CiAJY2FzZSBCQ000M3h4X1BIWVRZUEVfQToKQEAgLTIyMjcsNyArMjIzMSw2IEBACiAJCWVyciA9IDA7CiAJCWJyZWFrOwogCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJaWYgKGVycikKIAkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlVua25vd24gUEhZVFlQRSBmb3VuZCFcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGlvLmMKaW5kZXggNTc0MDg1Yy4uYzYwYzE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waW8uYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJaW50IGVycjsKIAl1MTYgdHhjdGw7CiAKLQliY200M3h4X2xvY2tfaXJxb25seShiY20sIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHF1ZXVlLT50eF9mcm96ZW4pCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTMwMCw3ICszMDAsNyBAQAogCQljb250aW51ZTsKIAl9CiBvdXRfdW5sb2NrOgotCWJjbTQzeHhfdW5sb2NrX2lycW9ubHkoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBzZXR1cF90eHF1ZXVlcyhzdHJ1Y3QgYmNtNDN4eF9waW9xdWV1ZSAqcXVldWUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCmluZGV4IDZhMjNiZGMuLmM3MWI5OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9zeXNmcy5jCkBAIC0xMjAsMTIgKzEyMCwxNCBAQAogCQkJR0ZQX0tFUk5FTCk7CiAJaWYgKCFzcHJvbSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAllcnIgPSBiY200M3h4X3Nwcm9tX3JlYWQoYmNtLCBzcHJvbSk7CiAJaWYgKCFlcnIpCiAJCWVyciA9IHNwcm9tMmhleChzcHJvbSwgYnVmLCBQQUdFX1NJWkUpOwogCW1taW93YigpOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAJa2ZyZWUoc3Byb20pOwogCiAJcmV0dXJuIGVycjsKQEAgLTE1MCwxMCArMTUyLDE0IEBACiAJZXJyID0gaGV4MnNwcm9tKHNwcm9tLCBidWYsIGNvdW50KTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9rZnJlZTsKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9jaygmYmNtLT5sZWRzX2xvY2spOwogCWVyciA9IGJjbTQzeHhfc3Byb21fd3JpdGUoYmNtLCBzcHJvbSk7CiAJbW1pb3diKCk7Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9jaygmYmNtLT5sZWRzX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogb3V0X2tmcmVlOgogCWtmcmVlKHNwcm9tKTsKIApAQCAtMTcwLDEzICsxNzYsMTIgQEAKIAkJCQkJICAgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7Ci0JaW50IGVycjsKIAlzc2l6ZV90IGNvdW50ID0gMDsKIAogCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWJjbTQzeHhfbG9ja19ub2lycShiY20pOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCiAJc3dpdGNoIChiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKS0+aW50ZXJmbW9kZSkgewogCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTkU6CkBAIC0xOTEsMTEgKzE5NiwxMCBAQAogCWRlZmF1bHQ6CiAJCWFzc2VydCgwKTsKIAl9Ci0JZXJyID0gMDsKIAotCWJjbTQzeHhfdW5sb2NrX25vaXJxKGJjbSk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAotCXJldHVybiBlcnIgPyBlcnIgOiBjb3VudDsKKwlyZXR1cm4gY291bnQ7CiAKIH0KIApAQCAtMjI5LDcgKzIzMyw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAKIAllcnIgPSBiY200M3h4X3JhZGlvX3NldF9pbnRlcmZlcmVuY2VfbWl0aWdhdGlvbihiY20sIG1vZGUpOwogCWlmIChlcnIpIHsKQEAgLTIzNyw3ICsyNDIsOCBAQAogCQkJCSAgICAic3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CiAJfQogCW1taW93YigpOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CiB9CkBAIC0yNTEsMjMgKzI1NywyMSBAQAogCQkJCQkgIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7Ci0JaW50IGVycjsKIAlzc2l6ZV90IGNvdW50OwogCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JYmNtNDN4eF9sb2NrX25vaXJxKGJjbSk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CiAKIAlpZiAoYmNtLT5zaG9ydF9wcmVhbWJsZSkKIAkJY291bnQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjEgKFNob3J0IFByZWFtYmxlIGVuYWJsZWQpXG4iKTsKIAllbHNlCiAJCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIwIChTaG9ydCBQcmVhbWJsZSBkaXNhYmxlZClcbiIpOwogCi0JZXJyID0gMDsKLQliY200M3h4X3VubG9ja19ub2lycShiY20pOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKLQlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfcHJlYW1ibGVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LApAQCAtMjc2LDcgKzI4MCw2IEBACiB7CiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycjsKIAlpbnQgdmFsdWU7CiAKIAlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCkBAIC0yODUsMjAgKzI4OCwxNDEgQEAKIAl2YWx1ZSA9IGdldF9ib29sZWFuKGJ1ZiwgY291bnQpOwogCWlmICh2YWx1ZSA8IDApCiAJCXJldHVybiB2YWx1ZTsKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCiAJYmNtLT5zaG9ydF9wcmVhbWJsZSA9ICEhdmFsdWU7CiAKLQllcnIgPSAwOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKLQlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7CisJcmV0dXJuIGNvdW50OwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoc2hvcnRwcmVhbWJsZSwgMDY0NCwKIAkJICAgYmNtNDN4eF9hdHRyX3ByZWFtYmxlX3Nob3csCiAJCSAgIGJjbTQzeHhfYXR0cl9wcmVhbWJsZV9zdG9yZSk7CiAKK3N0YXRpYyBzc2l6ZV90IGJjbTQzeHhfYXR0cl9waHltb2RlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBkZXZfdG9fYmNtKGRldik7CisJaW50IHBoeXR5cGU7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoY291bnQgPCAxKQorCQlnb3RvIG91dDsKKwlzd2l0Y2ggKGJ1ZlswXSkgeworCWNhc2UgJ2EnOiAgY2FzZSAnQSc6CisJCXBoeXR5cGUgPSBCQ000M3h4X1BIWVRZUEVfQTsKKwkJYnJlYWs7CisJY2FzZSAnYic6ICBjYXNlICdCJzoKKwkJcGh5dHlwZSA9IEJDTTQzeHhfUEhZVFlQRV9COworCQlicmVhazsKKwljYXNlICdnJzogIGNhc2UgJ0cnOgorCQlwaHl0eXBlID0gQkNNNDN4eF9QSFlUWVBFX0c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gb3V0OworCX0KKworCWJjbTQzeHhfcGVyaW9kaWNfdGFza3NfZGVsZXRlKGJjbSk7CisJbXV0ZXhfbG9jaygmKGJjbSktPm11dGV4KTsKKwllcnIgPSBiY200M3h4X3NlbGVjdF93aXJlbGVzc19jb3JlKGJjbSwgcGh5dHlwZSk7CisJaWYgKCFlcnIpCisJCWJjbTQzeHhfcGVyaW9kaWNfdGFza3Nfc2V0dXAoYmNtKTsKKwltdXRleF91bmxvY2soJihiY20pLT5tdXRleCk7CisJaWYgKGVyciA9PSAtRVNSQ0gpCisJCWVyciA9IC1FTk9ERVY7CisKK291dDoKKwlyZXR1cm4gZXJyID8gZXJyIDogY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGJjbTQzeHhfYXR0cl9waHltb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCSBjaGFyICpidWYpCit7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOworCXNzaXplX3QgY291bnQgPSAwOworCisJbXV0ZXhfbG9jaygmKGJjbSktPm11dGV4KTsKKwlzd2l0Y2ggKGJjbTQzeHhfY3VycmVudF9waHkoYmNtKS0+dHlwZSkgeworCWNhc2UgQkNNNDN4eF9QSFlUWVBFX0E6CisJCXNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiQSIpOworCQlicmVhazsKKwljYXNlIEJDTTQzeHhfUEhZVFlQRV9COgorCQlzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIkIiKTsKKwkJYnJlYWs7CisJY2FzZSBCQ000M3h4X1BIWVRZUEVfRzoKKwkJc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJHIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWFzc2VydCgwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCYoYmNtKS0+bXV0ZXgpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIocGh5bW9kZSwgMDY0NCwKKwkJICAgYmNtNDN4eF9hdHRyX3BoeW1vZGVfc2hvdywKKwkJICAgYmNtNDN4eF9hdHRyX3BoeW1vZGVfc3RvcmUpOworCitzdGF0aWMgc3NpemVfdCBiY200M3h4X2F0dHJfbWljcm9jb2RlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgY2hhciAqYnVmKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gZGV2X3RvX2JjbShkZXYpOworCXNzaXplX3QgY291bnQgPSAwOworCXUxNiBzdGF0dXM7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwltdXRleF9sb2NrKCYoYmNtKS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJc3RhdHVzID0gYmNtNDN4eF9zaG1fcmVhZDE2KGJjbSwgQkNNNDN4eF9TSE1fU0hBUkVELAorCQkJCSAgICBCQ000M3h4X1VDT0RFX1NUQVRVUyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCYoYmNtKS0+bXV0ZXgpOworCXN3aXRjaCAoc3RhdHVzKSB7CisJY2FzZSAweDAwMDA6CisJCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHggKGludmFsaWQpXG4iLAorCQkJCSBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIDB4MDAwMToKKwkJY291bnQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JS40eCAoaW5pdClcbiIsCisJCQkJIHN0YXR1cyk7CisJCWJyZWFrOworCWNhc2UgMHgwMDAyOgorCQljb3VudCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglLjR4IChhY3RpdmUpXG4iLAorCQkJCSBzdGF0dXMpOworCQlicmVhazsKKwljYXNlIDB4MDAwMzoKKwkJY291bnQgPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIjB4JS40eCAoc3VzcGVuZGVkKVxuIiwKKwkJCQkgc3RhdHVzKTsKKwkJYnJlYWs7CisJY2FzZSAweDAwMDQ6CisJCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHggKGFzbGVlcClcbiIsCisJCQkJIHN0YXR1cyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvdW50ID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIweCUuNHggKHVua25vd24pXG4iLAorCQkJCSBzdGF0dXMpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtaWNyb2NvZGVzdGF0dXMsIDA0NDQsCisJCSAgIGJjbTQzeHhfYXR0cl9taWNyb2NvZGVfc2hvdywKKwkJICAgTlVMTCk7CisKIGludCBiY200M3h4X3N5c2ZzX3JlZ2lzdGVyKHN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmNtLT5wY2lfZGV2LT5kZXY7CkBAIC0zMTUsOSArNDM5LDE5IEBACiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlbW92ZV9pbnRlcmZtb2RlOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9waHltb2RlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZW1vdmVfc2hvcnRwcmVhbWJsZTsKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljcm9jb2Rlc3RhdHVzKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZW1vdmVfcGh5bW9kZTsKIAogb3V0OgogCXJldHVybiBlcnI7CitlcnJfcmVtb3ZlX3BoeW1vZGU6CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3BoeW1vZGUpOworZXJyX3JlbW92ZV9zaG9ydHByZWFtYmxlOgorCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zaG9ydHByZWFtYmxlKTsKIGVycl9yZW1vdmVfaW50ZXJmbW9kZToKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW50ZXJmZXJlbmNlKTsKIGVycl9yZW1vdmVfc3Byb206CkBAIC0zMjksNiArNDYzLDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYmNtLT5wY2lfZGV2LT5kZXY7CiAKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbWljcm9jb2Rlc3RhdHVzKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcGh5bW9kZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Nob3J0cHJlYW1ibGUpOwogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9pbnRlcmZlcmVuY2UpOwogCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zcHJvbSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfd3guYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jCmluZGV4IDVjMzZlMjllZi4uODg4MDc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKQEAgLTQ3LDYgKzQ3LDggQEAKICNkZWZpbmUgQkNNNDN4eF9XWF9WRVJTSU9OCTE4CiAKICNkZWZpbmUgTUFYX1dYX1NUUklORwkJODAKKy8qIEZJWE1FOiB0aGUgbmV4dCBsaW5lIGlzIGEgZ3Vlc3MgYXMgdG8gd2hhdCB0aGUgbWF4aW11bSBSU1NJIHZhbHVlIG1pZ2h0IGJlICovCisjZGVmaW5lIFJYX1JTU0lfTUFYCQk2MAogCiAKIHN0YXRpYyBpbnQgYmNtNDN4eF93eF9nZXRfbmFtZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKQEAgLTU2LDEyICs1OCwxMSBAQAogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKIAlpbnQgaTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBiY200M3h4X3BoeWluZm8gKnBoeTsKIAljaGFyIHN1ZmZpeFs3XSA9IHsgMCB9OwogCWludCBoYXZlX2EgPSAwLCBoYXZlX2IgPSAwLCBoYXZlX2cgPSAwOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IGJjbS0+bnJfODAyMTFfYXZhaWxhYmxlOyBpKyspIHsKIAkJcGh5ID0gJihiY20tPmNvcmVfODAyMTFfZXh0W2ldLnBoeSk7CiAJCXN3aXRjaCAocGh5LT50eXBlKSB7CkBAIC03Nyw3ICs3OCw3IEBACiAJCQlhc3NlcnQoMCk7CiAJCX0KIAl9Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJaSA9IDA7CiAJaWYgKGhhdmVfYSkgewpAQCAtMTExLDcgKzExMiw5IEBACiAJaW50IGZyZXE7CiAJaW50IGVyciA9IC1FSU5WQUw7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCiAJaWYgKChkYXRhLT5mcmVxLm0gPj0gMCkgJiYgKGRhdGEtPmZyZXEubSA8PSAxMDAwKSkgewogCQljaGFubmVsID0gZGF0YS0+ZnJlcS5tOwogCQlmcmVxID0gYmNtNDN4eF9jaGFubmVsX3RvX2ZyZXEoYmNtLCBjaGFubmVsKTsKQEAgLTEzMSw3ICsxMzQsOCBAQAogCQllcnIgPSAwOwogCX0KIG91dF91bmxvY2s6Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xNDMsMTEgKzE0NywxMCBAQAogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgYmNtNDN4eF9yYWRpb2luZm8gKnJhZGlvOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVyciA9IC1FTk9ERVY7CiAJdTE2IGNoYW5uZWw7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKIAlyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwogCWNoYW5uZWwgPSByYWRpby0+Y2hhbm5lbDsKIAlpZiAoY2hhbm5lbCA9PSAweEZGKSB7CkBAIC0xNjIsNyArMTY1LDcgQEAKIAogCWVyciA9IDA7CiBvdXRfdW5sb2NrOgotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0xODAsMTMgKzE4MywxNSBAQAogCWlmIChtb2RlID09IElXX01PREVfQVVUTykKIAkJbW9kZSA9IEJDTTQzeHhfSU5JVElBTF9JV01PREU7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewogCQlpZiAoYmNtLT5pZWVlLT5pd19tb2RlICE9IG1vZGUpCiAJCQliY200M3h4X3NldF9pd21vZGUoYmNtLCBtb2RlKTsKIAl9IGVsc2UKIAkJYmNtLT5pZWVlLT5pd19tb2RlID0gbW9kZTsKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTcsMTEgKzIwMiwxMCBAQAogCQkJICAgICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CiAJZGF0YS0+bW9kZSA9IGJjbS0+aWVlZS0+aXdfbW9kZTsKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIxNCw3ICsyMTgsNiBAQAogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgaXdfcmFuZ2UgKnJhbmdlID0gKHN0cnVjdCBpd19yYW5nZSAqKWV4dHJhOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfZ2VvICpnZW87Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaSwgajsKIAlzdHJ1Y3QgYmNtNDN4eF9waHlpbmZvICpwaHk7CiAKQEAgLTIyNiwxNSArMjI5LDE0IEBACiAJcmFuZ2UtPnRocm91Z2hwdXQgPSAyNyAqIDEwMDAgKiAxMDAwOwogCiAJcmFuZ2UtPm1heF9xdWFsLnF1YWwgPSAxMDA7Ci0JLyogVE9ETzogUmVhbCBtYXggUlNTSSAqLwotCXJhbmdlLT5tYXhfcXVhbC5sZXZlbCA9IDM7Ci0JcmFuZ2UtPm1heF9xdWFsLm5vaXNlID0gMTAwOwotCXJhbmdlLT5tYXhfcXVhbC51cGRhdGVkID0gNzsKKwlyYW5nZS0+bWF4X3F1YWwubGV2ZWwgPSAxNDY7IC8qIHNldCBmbG9vciBhdCAtMTEwIGRCbSAoMTQ2IC0gMjU2KSAqLworCXJhbmdlLT5tYXhfcXVhbC5ub2lzZSA9IDE0NjsKKwlyYW5nZS0+bWF4X3F1YWwudXBkYXRlZCA9IElXX1FVQUxfQUxMX1VQREFURUQ7CiAKLQlyYW5nZS0+YXZnX3F1YWwucXVhbCA9IDcwOwotCXJhbmdlLT5hdmdfcXVhbC5sZXZlbCA9IDI7Ci0JcmFuZ2UtPmF2Z19xdWFsLm5vaXNlID0gNDA7Ci0JcmFuZ2UtPmF2Z19xdWFsLnVwZGF0ZWQgPSA3OworCXJhbmdlLT5hdmdfcXVhbC5xdWFsID0gNTA7CisJcmFuZ2UtPmF2Z19xdWFsLmxldmVsID0gMDsKKwlyYW5nZS0+YXZnX3F1YWwubm9pc2UgPSAwOworCXJhbmdlLT5hdmdfcXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRDsKIAogCXJhbmdlLT5taW5fcnRzID0gQkNNNDN4eF9NSU5fUlRTX1RIUkVTSE9MRDsKIAlyYW5nZS0+bWF4X3J0cyA9IEJDTTQzeHhfTUFYX1JUU19USFJFU0hPTEQ7CkBAIC0yNTQsNyArMjU2LDcgQEAKIAkJCSAgSVdfRU5DX0NBUEFfQ0lQSEVSX1RLSVAgfAogCQkJICBJV19FTkNfQ0FQQV9DSVBIRVJfQ0NNUDsKIAotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCXBoeSA9IGJjbTQzeHhfY3VycmVudF9waHkoYmNtKTsKIAogCXJhbmdlLT5udW1fYml0cmF0ZXMgPSAwOwpAQCAtMzAxLDcgKzMwMyw3IEBACiAJfQogCXJhbmdlLT5udW1fZnJlcXVlbmN5ID0gajsKIAotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzE0LDExICszMTYsMTEgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7CiAJc2l6ZV90IGxlbjsKIAotCWJjbTQzeHhfbG9ja19ub2lycShiY20pOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCWxlbiA9ICBtaW4oKHNpemVfdClkYXRhLT5kYXRhLmxlbmd0aCwgKHNpemVfdClJV19FU1NJRF9NQVhfU0laRSk7CiAJbWVtY3B5KGJjbS0+bmljaywgZXh0cmEsIGxlbik7CiAJYmNtLT5uaWNrW2xlbl0gPSAnXDAnOwotCWJjbTQzeHhfdW5sb2NrX25vaXJxKGJjbSk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzMxLDEyICszMzMsMTIgQEAKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7CiAJc2l6ZV90IGxlbjsKIAotCWJjbTQzeHhfbG9ja19ub2lycShiY20pOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCWxlbiA9IHN0cmxlbihiY20tPm5pY2spICsgMTsKIAltZW1jcHkoZXh0cmEsIGJjbS0+bmljaywgbGVuKTsKIAlkYXRhLT5kYXRhLmxlbmd0aCA9IChfX3UxNilsZW47CiAJZGF0YS0+ZGF0YS5mbGFncyA9IDE7Ci0JYmNtNDN4eF91bmxvY2tfbm9pcnEoYmNtKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNTAsNyArMzUyLDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAtRUlOVkFMOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAlpZiAoZGF0YS0+cnRzLmRpc2FibGVkKSB7CiAJCWJjbS0+cnRzX3RocmVzaG9sZCA9IEJDTTQzeHhfTUFYX1JUU19USFJFU0hPTEQ7CiAJCWVyciA9IDA7CkBAIC0zNjEsNyArMzY0LDggQEAKIAkJCWVyciA9IDA7CiAJCX0KIAl9Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC0zNzIsMTMgKzM3NiwxMiBAQAogCQkJICAgICAgY2hhciAqZXh0cmEpCiB7CiAJc3RydWN0IGJjbTQzeHhfcHJpdmF0ZSAqYmNtID0gYmNtNDN4eF9wcml2KG5ldF9kZXYpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKIAlkYXRhLT5ydHMudmFsdWUgPSBiY20tPnJ0c190aHJlc2hvbGQ7CiAJZGF0YS0+cnRzLmZpeGVkID0gMDsKIAlkYXRhLT5ydHMuZGlzYWJsZWQgPSAoYmNtLT5ydHNfdGhyZXNob2xkID09IEJDTTQzeHhfTUFYX1JUU19USFJFU0hPTEQpOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzkyLDcgKzM5NSw4IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOworCXNwaW5fbG9ja19pcnFzYXZlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CiAJaWYgKGRhdGEtPmZyYWcuZGlzYWJsZWQpIHsKIAkJYmNtLT5pZWVlLT5mdHMgPSBNQVhfRlJBR19USFJFU0hPTEQ7CiAJCWVyciA9IDA7CkBAIC00MDMsNyArNDA3LDggQEAKIAkJCWVyciA9IDA7CiAJCX0KIAl9Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC00MTQsMTMgKzQxOSwxMiBAQAogCQkJICAgICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CiAJZGF0YS0+ZnJhZy52YWx1ZSA9IGJjbS0+aWVlZS0+ZnRzOwogCWRhdGEtPmZyYWcuZml4ZWQgPSAwOwogCWRhdGEtPmZyYWcuZGlzYWJsZWQgPSAoYmNtLT5pZWVlLT5mdHMgPT0gTUFYX0ZSQUdfVEhSRVNIT0xEKTsKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0Miw3ICs0NDYsOCBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfQogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAlpZiAoYmNtNDN4eF9zdGF0dXMoYmNtKSAhPSBCQ000M3h4X1NUQVRfSU5JVElBTElaRUQpCiAJCWdvdG8gb3V0X3VubG9jazsKIAlyYWRpbyA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pOwpAQCAtNDY2LDcgKzQ3MSw4IEBACiAJZXJyID0gMDsKIAogb3V0X3VubG9jazoKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ3OCwxMCArNDg0LDkgQEAKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7CiAJc3RydWN0IGJjbTQzeHhfcmFkaW9pbmZvICpyYWRpbzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnIgPSAtRU5PREVWOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CiAJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgIT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQogCQlnb3RvIG91dF91bmxvY2s7CiAJcmFkaW8gPSBiY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKTsKQEAgLTQ5Myw3ICs0OTgsNyBAQAogCiAJZXJyID0gMDsKIG91dF91bmxvY2s6Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTU4MCw3ICs1ODUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkgewogCQllcnIgPSBiY200M3h4X3JhZGlvX3NldF9pbnRlcmZlcmVuY2VfbWl0aWdhdGlvbihiY20sIG1vZGUpOwogCQlpZiAoZXJyKSB7CkBAIC01OTUsNyArNjAxLDggQEAKIAkJfSBlbHNlCiAJCQliY200M3h4X2N1cnJlbnRfcmFkaW8oYmNtKS0+aW50ZXJmbW9kZSA9IG1vZGU7CiAJfQotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNjA2LDEyICs2MTMsMTEgQEAKIAkJCQkgICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBtb2RlOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CiAJbW9kZSA9IGJjbTQzeHhfY3VycmVudF9yYWRpbyhiY20pLT5pbnRlcmZtb2RlOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQkNNNDN4eF9SQURJT19JTlRFUkZNT0RFX05PTkU6CkBAIC02NDEsOSArNjQ3LDExIEBACiAJaW50IG9uOwogCiAJb24gPSAqKChpbnQgKilleHRyYSk7Ci0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAliY20tPnNob3J0X3ByZWFtYmxlID0gISFvbjsKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NTQsMTIgKzY2MiwxMSBAQAogCQkJCQljaGFyICpleHRyYSkKIHsKIAlzdHJ1Y3QgYmNtNDN4eF9wcml2YXRlICpiY20gPSBiY200M3h4X3ByaXYobmV0X2Rldik7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgb247CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKIAlvbiA9IGJjbS0+c2hvcnRfcHJlYW1ibGU7Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJaWYgKG9uKQogCQlzdHJuY3B5KGV4dHJhLCAiMSAoU2hvcnQgUHJlYW1ibGUgZW5hYmxlZCkiLCBNQVhfV1hfU1RSSU5HKTsKQEAgLTY4MSwxMSArNjg4LDEzIEBACiAJCiAJb24gPSAqKChpbnQgKilleHRyYSk7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWJjbS0+aWVlZS0+aG9zdF9lbmNyeXB0ID0gISFvbjsKIAliY20tPmllZWUtPmhvc3RfZGVjcnlwdCA9ICEhb247CiAJYmNtLT5pZWVlLT5ob3N0X2J1aWxkX2l2ID0gIW9uOwotCWJjbTQzeHhfdW5sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY5NiwxMiArNzA1LDExIEBACiAJCQkJICAgICAgIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBvbjsKIAotCWJjbTQzeHhfbG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCW11dGV4X2xvY2soJmJjbS0+bXV0ZXgpOwogCW9uID0gYmNtLT5pZWVlLT5ob3N0X2VuY3J5cHQ7Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmJjbS0+bXV0ZXgpOwogCiAJaWYgKG9uKQogCQlzdHJuY3B5KGV4dHJhLCAiMSAoU1cgZW5jcnlwdGlvbiBlbmFibGVkKSAiLCBNQVhfV1hfU1RSSU5HKTsKQEAgLTc2NCwxMSArNzcyLDEzIEBACiAJaWYgKCFzcHJvbSkKIAkJZ290byBvdXQ7CiAKLQliY200M3h4X2xvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOwogCWVyciA9IC1FTk9ERVY7CiAJaWYgKGJjbTQzeHhfc3RhdHVzKGJjbSkgPT0gQkNNNDN4eF9TVEFUX0lOSVRJQUxJWkVEKQogCQllcnIgPSBiY200M3h4X3Nwcm9tX3JlYWQoYmNtLCBzcHJvbSk7Ci0JYmNtNDN4eF91bmxvY2tfaXJxc2FmZShiY20sIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY20tPmlycV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZiY20tPm11dGV4KTsKIAlpZiAoIWVycikKIAkJZGF0YS0+ZGF0YS5sZW5ndGggPSBzcHJvbTJoZXgoc3Byb20sIGV4dHJhKTsKIAlrZnJlZShzcHJvbSk7CkBAIC04MDksMTEgKzgxOSwxNSBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0X2tmcmVlOwogCi0JYmNtNDN4eF9sb2NrX2lycXNhZmUoYmNtLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmJjbS0+bGVkc19sb2NrKTsKIAllcnIgPSAtRU5PREVWOwogCWlmIChiY200M3h4X3N0YXR1cyhiY20pID09IEJDTTQzeHhfU1RBVF9JTklUSUFMSVpFRCkKIAkJZXJyID0gYmNtNDN4eF9zcHJvbV93cml0ZShiY20sIHNwcm9tKTsKLQliY200M3h4X3VubG9ja19pcnFzYWZlKGJjbSwgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZiY20tPmxlZHNfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNtLT5pcnFfbG9jaywgZmxhZ3MpOworCW11dGV4X3VubG9jaygmYmNtLT5tdXRleCk7CiBvdXRfa2ZyZWU6CiAJa2ZyZWUoc3Byb20pOwogb3V0OgpAQCAtODI3LDYgKzg0MSwxMCBAQAogCXN0cnVjdCBiY200M3h4X3ByaXZhdGUgKmJjbSA9IGJjbTQzeHhfcHJpdihuZXRfZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyA9IGllZWU4MDIxMV9wcml2KG5ldF9kZXYpOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzICp3c3RhdHM7CisJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICpuZXR3b3JrID0gTlVMTDsKKwlzdGF0aWMgaW50IHRtcF9sZXZlbCA9IDA7CisJc3RhdGljIGludCB0bXBfcXVhbCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXdzdGF0cyA9ICZiY20tPnN0YXRzLndzdGF0czsKIAlpZiAoIW1hYy0+YXNzb2NpYXRlZCkgewpAQCAtODQ0LDE2ICs4NjIsMjggQEAKIAkJd3N0YXRzLT5xdWFsLmxldmVsID0gMDsKIAkJd3N0YXRzLT5xdWFsLm5vaXNlID0gMDsKIAkJd3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSA3OwotCQl3c3RhdHMtPnF1YWwudXBkYXRlZCB8PSBJV19RVUFMX05PSVNFX0lOVkFMSUQgfAotCQkJSVdfUVVBTF9RVUFMX0lOVkFMSUQgfCBJV19RVUFMX0xFVkVMX0lOVkFMSUQ7CisJCXdzdGF0cy0+cXVhbC51cGRhdGVkIHw9IElXX1FVQUxfQUxMX1VQREFURUQgfCBJV19RVUFMX0RCTTsKIAkJcmV0dXJuIHdzdGF0czsKIAl9CiAJLyogZmlsbCBpbiB0aGUgcmVhbCBzdGF0aXN0aWNzIHdoZW4gaWZhY2UgYXNzb2NpYXRlZCAqLwotCXdzdGF0cy0+cXVhbC5xdWFsID0gMTAwOyAgICAgLy8gVE9ETzogZ2V0IHRoZSByZWFsIHNpZ25hbCBxdWFsaXR5Ci0Jd3N0YXRzLT5xdWFsLmxldmVsID0gMyAtIGJjbS0+c3RhdHMubGlua19xdWFsaXR5OworCXNwaW5fbG9ja19pcnFzYXZlKCZtYWMtPmllZWUtPmxvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldHdvcmssICZtYWMtPmllZWUtPm5ldHdvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoIW1lbWNtcChtYWMtPmFzc29jaW5mby5ic3NpZCwgbmV0d29yay0+YnNzaWQsIEVUSF9BTEVOKSkgeworCQkJaWYgKCF0bXBfbGV2ZWwpCXsJLyogZ2V0IGluaXRpYWwgdmFsdWVzICovCisJCQkJdG1wX2xldmVsID0gbmV0d29yay0+c3RhdHMuc2lnbmFsOworCQkJCXRtcF9xdWFsID0gbmV0d29yay0+c3RhdHMucnNzaTsKKwkJCX0gZWxzZSB7CQkvKiBzbW9vdGggcmVzdWx0cyAqLworCQkJCXRtcF9sZXZlbCA9ICgxNSAqIHRtcF9sZXZlbCArIG5ldHdvcmstPnN0YXRzLnNpZ25hbCkvMTY7CisJCQkJdG1wX3F1YWwgPSAoMTUgKiB0bXBfcXVhbCArIG5ldHdvcmstPnN0YXRzLnJzc2kpLzE2OworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5pZWVlLT5sb2NrLCBmbGFncyk7CisJd3N0YXRzLT5xdWFsLmxldmVsID0gdG1wX2xldmVsOworCXdzdGF0cy0+cXVhbC5xdWFsID0gMTAwICogdG1wX3F1YWwgLyBSWF9SU1NJX01BWDsKIAl3c3RhdHMtPnF1YWwubm9pc2UgPSBiY20tPnN0YXRzLm5vaXNlOwotCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUQgfCBJV19RVUFMX0xFVkVMX1VQREFURUQgfAotCQkJSVdfUVVBTF9OT0lTRV9VUERBVEVEOworCXdzdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9BTExfVVBEQVRFRCB8IElXX1FVQUxfREJNOwogCXdzdGF0cy0+ZGlzY2FyZC5jb2RlID0gYmNtLT5pZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGU7CiAJd3N0YXRzLT5kaXNjYXJkLnJldHJpZXMgPSBiY20tPmllZWUtPmllZWVfc3RhdHMudHhfcmV0cnlfbGltaXRfZXhjZWVkZWQ7CiAJd3N0YXRzLT5kaXNjYXJkLm53aWQgPSBiY20tPmllZWUtPmllZWVfc3RhdHMudHhfZGlzY2FyZHNfd3Jvbmdfc2E7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuYwppbmRleCA2ZGJkODU1Li5jMGVmYmZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmMKQEAgLTQ5MiwxNiArNDkyLDE1IEBACiAKIAltZW1zZXQoJnN0YXRzLCAwLCBzaXplb2Yoc3RhdHMpKTsKIAlzdGF0cy5tYWNfdGltZSA9IGxlMTZfdG9fY3B1KHJ4aGRyLT5tYWN0aW1lKTsKLQlzdGF0cy5yc3NpID0gYmNtNDN4eF9yc3NpX3Bvc3Rwcm9jZXNzKGJjbSwgcnhoZHItPnJzc2ksIGlzX29mZG0sCisJc3RhdHMucnNzaSA9IHJ4aGRyLT5yc3NpOworCXN0YXRzLnNpZ25hbCA9IGJjbTQzeHhfcnNzaV9wb3N0cHJvY2VzcyhiY20sIHJ4aGRyLT5yc3NpLCBpc19vZmRtLAogCQkJCQkgICAgICAhIShyeGZsYWdzMSAmIEJDTTQzeHhfUlhIRFJfRkxBR1MxXzIwNTNSU1NJQURKKSwKIAkJCQkJICAgICAgISEocnhmbGFnczMgJiBCQ000M3h4X1JYSERSX0ZMQUdTM18yMDUwUlNTSUFESikpOwotCXN0YXRzLnNpZ25hbCA9IHJ4aGRyLT5zaWduYWxfcXVhbGl0eTsJLy9GSVhNRQogLy9UT0RPCXN0YXRzLm5vaXNlID0gCiAJaWYgKGlzX29mZG0pCiAJCXN0YXRzLnJhdGUgPSBiY200M3h4X3BsY3BfZ2V0X2JpdHJhdGVfb2ZkbShwbGNwKTsKIAllbHNlCiAJCXN0YXRzLnJhdGUgPSBiY200M3h4X3BsY3BfZ2V0X2JpdHJhdGVfY2NrKHBsY3ApOwotLy9wcmludGsoIlJYIG9mZG0gJWQsIHJhdGUgPT0gJXVcbiIsIGlzX29mZG0sIHN0YXRzLnJhdGUpOwogCXN0YXRzLnJlY2VpdmVkX2NoYW5uZWwgPSByYWRpby0+Y2hhbm5lbDsKIC8vVE9ETwlzdGF0cy5jb250cm9sID0gCiAJc3RhdHMubWFzayA9IElFRUU4MDIxMV9TVEFUTUFTS19TSUdOQUwgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcC5oCmluZGV4IDVlNjM3NjUuLmU2NjM1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwLmgKQEAgLTg2LDcgKzg2LDcgQEAKIC8qIGhvc3RhcF9pb2N0bC5jICovCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgaG9zdGFwX2l3X2hhbmRsZXJfZGVmOwotZXh0ZXJuIHN0cnVjdCBldGh0b29sX29wcyBwcmlzbTJfZXRodG9vbF9vcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHByaXNtMl9ldGh0b29sX29wczsKIAogaW50IGhvc3RhcF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwppbmRleCA1MmU2ZGY1Li42ODZkODk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCkBAIC04NDcsNiArODQ3LDcgQEAKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweGQ2MDEsIDB4MDAwMiksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkQoMHhkNjAxLCAweDAwMDUpLAogCVBDTUNJQV9ERVZJQ0VfTUFORl9DQVJEKDB4ZDYwMSwgMHgwMDEwKSwKKwlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRCgweDAxMjYsIDB4MDAwMiksCiAJUENNQ0lBX0RFVklDRV9NQU5GX0NBUkRfUFJPRF9JRDEoMHgwMTU2LCAweDAwMDIsICJJTlRFUlNJTCIsCiAJCQkJCSAweDc0YzVlNDBkKSwKIAlQQ01DSUFfREVWSUNFX01BTkZfQ0FSRF9QUk9EX0lEMSgweDAxNTYsIDB4MDAwMiwgIkludGVyc2lsIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwppbmRleCBkYWZhYTVmLi5kNTAwMDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCkBAIC0xMDQyLDYgKzEwNDIsOSBAQAogCQkgICAgICAgZGV2LT5uYW1lLCBsb2NhbC0+ZnJhZ21fdGhyZXNob2xkKTsKIAl9CiAKKwkvKiBTb21lIGZpcm13YXJlcyBsb3NlIGFudGVubmEgc2VsZWN0aW9uIHNldHRpbmdzIG9uIHJlc2V0ICovCisJKHZvaWQpIGhvc3RhcF9zZXRfYW50c2VsKGxvY2FsKTsKKwogCXJldHVybiByZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwppbmRleCA4Mzk5ZGU1Li43YTQ5Nzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCkBAIC0zOTA4LDcgKzM5MDgsNyBAQAogCQkgbG9jYWwtPnN0YV9md192ZXIgJiAweGZmKTsKIH0KIAotc3RydWN0IGV0aHRvb2xfb3BzIHByaXNtMl9ldGh0b29sX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBldGh0b29sX29wcyBwcmlzbTJfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gcHJpc20yX2dldF9kcnZpbmZvCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKaW5kZXggZTk1NWRiNC4uYjRkODFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYwpAQCAtNTkxMSw3ICs1OTExLDcgQEAKIAlyZXR1cm4gKHByaXYtPnN0YXR1cyAmIFNUQVRVU19BU1NPQ0lBVEVEKSA/IDEgOiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGlwdzIxMDBfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlwdzIxMDBfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9saW5rID0gaXB3MjEwMF9ldGh0b29sX2dldF9saW5rLAogCS5nZXRfZHJ2aW5mbyA9IGlwd19ldGh0b29sX2dldF9kcnZpbmZvLAogfTsKQEAgLTYyNTQsMTMgKzYyNTQsMTQgQEAKIAkgKiBtZW1iZXIgdG8gY2FsbCBhIGZ1bmN0aW9uIHRoYXQgdGhlbiBqdXN0IHR1cm5zIGFuZCBjYWxscyBpcHcyMTAwX3VwLgogCSAqIG5ldF9kZXYtPmluaXQgaXMgY2FsbGVkIGFmdGVyIG5hbWUgYWxsb2NhdGlvbiBidXQgYmVmb3JlIHRoZQogCSAqIG5vdGlmaWVyIGNoYWluIGlzIGNhbGxlZCAqLwotCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9OQU1FCiAJCSAgICAgICAiRXJyb3IgY2FsbGluZyByZWdpc3Rlcl9uZXRkZXYuXG4iKTsKLQkJZ290byBmYWlsX3VubG9jazsKKwkJZ290byBmYWlsOwogCX0KKworCW11dGV4X2xvY2soJnByaXYtPmFjdGlvbl9tdXRleCk7CiAJcmVnaXN0ZXJlZCA9IDE7CiAKIAlJUFdfREVCVUdfSU5GTygiJXM6IEJvdW5kIHRvICVzXG4iLCBkZXYtPm5hbWUsIHBjaV9uYW1lKHBjaV9kZXYpKTsKQEAgLTY1MzEsNyArNjUzMiw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAlcywgJXNcbiIsIERSVl9ERVNDUklQVElPTiwgRFJWX1ZFUlNJT04pOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXNcbiIsIERSVl9DT1BZUklHSFQpOwogCi0JcmV0ID0gcGNpX21vZHVsZV9pbml0KCZpcHcyMTAwX3BjaV9kcml2ZXIpOworCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlwdzIxMDBfcGNpX2RyaXZlcik7CiAKICNpZmRlZiBDT05GSUdfSVBXMjEwMF9ERUJVRwogCWlwdzIxMDBfZGVidWdfbGV2ZWwgPSBkZWJ1ZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwppbmRleCBiMzMwMGZmLi43MzU4NjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCkBAIC03MCw3ICs3MCw3IEBACiAjZGVmaW5lIFZRCiAjZW5kaWYKIAotI2RlZmluZSBJUFcyMjAwX1ZFUlNJT04gIjEuMS4yIiBWSyBWRCBWTSBWUCBWUiBWUQorI2RlZmluZSBJUFcyMjAwX1ZFUlNJT04gIjEuMS40IiBWSyBWRCBWTSBWUCBWUiBWUQogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkludGVsKFIpIFBSTy9XaXJlbGVzcyAyMjAwLzI5MTUgTmV0d29yayBEcml2ZXIiCiAjZGVmaW5lIERSVl9DT1BZUklHSFQJIkNvcHlyaWdodChjKSAyMDAzLTIwMDYgSW50ZWwgQ29ycG9yYXRpb24iCiAjZGVmaW5lIERSVl9WRVJTSU9OICAgICBJUFcyMjAwX1ZFUlNJT04KQEAgLTgzLDkgKzgzLDcgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogc3RhdGljIGludCBjbWRsb2cgPSAwOwotI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiBzdGF0aWMgaW50IGRlYnVnID0gMDsKLSNlbmRpZgogc3RhdGljIGludCBjaGFubmVsID0gMDsKIHN0YXRpYyBpbnQgbW9kZSA9IDA7CiAKQEAgLTU2Nyw3ICs1NjUsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmlycV9sb2NrLCBmbGFncyk7CiB9CiAKLSNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogc3RhdGljIGNoYXIgKmlwd19lcnJvcl9kZXNjKHUzMiB2YWwpCiB7CiAJc3dpdGNoICh2YWwpIHsKQEAgLTYzNCw3ICs2MzEsNiBAQAogCQkJICBlcnJvci0+bG9nW2ldLnRpbWUsCiAJCQkgIGVycm9yLT5sb2dbaV0uZGF0YSwgZXJyb3ItPmxvZ1tpXS5ldmVudCk7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQgaXB3X2lzX2luaXQoc3RydWN0IGlwd19wcml2ICpwcml2KQogewpAQCAtMTQzNSw5ICsxNDMxLDcgQEAKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkKTsKLSNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwcml2LT5uZXRfZGV2OwotI2VuZGlmCiAJY2hhciBidWZmZXJbXSA9ICIwMDAwMDAwMCI7CiAJdW5zaWduZWQgbG9uZyBsZW4gPQogCSAgICAoc2l6ZW9mKGJ1ZmZlcikgLSAxKSA+IGNvdW50ID8gY291bnQgOiBzaXplb2YoYnVmZmVyKSAtIDE7CkBAIC0xOTU4LDE0ICsxOTUyLDEyIEBACiAJCUlQV19XQVJOSU5HKCJGaXJtd2FyZSBlcnJvciBkZXRlY3RlZC4gIFJlc3RhcnRpbmcuXG4iKTsKIAkJaWYgKHByaXYtPmVycm9yKSB7CiAJCQlJUFdfREVCVUdfRlcoIlN5c2ZzICdlcnJvcicgbG9nIGFscmVhZHkgZXhpc3RzLlxuIik7Ci0jaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIAkJCWlmIChpcHdfZGVidWdfbGV2ZWwgJiBJUFdfRExfRldfRVJST1JTKSB7CiAJCQkJc3RydWN0IGlwd19md19lcnJvciAqZXJyb3IgPQogCQkJCSAgICBpcHdfYWxsb2NfZXJyb3JfbG9nKHByaXYpOwogCQkJCWlwd19kdW1wX2Vycm9yX2xvZyhwcml2LCBlcnJvcik7CiAJCQkJa2ZyZWUoZXJyb3IpOwogCQkJfQotI2VuZGlmCiAJCX0gZWxzZSB7CiAJCQlwcml2LT5lcnJvciA9IGlwd19hbGxvY19lcnJvcl9sb2cocHJpdik7CiAJCQlpZiAocHJpdi0+ZXJyb3IpCkBAIC0xOTczLDEwICsxOTY1LDggQEAKIAkJCWVsc2UKIAkJCQlJUFdfREVCVUdfRlcoIkVycm9yIGFsbG9jYXRpbmcgc3lzZnMgJ2Vycm9yJyAiCiAJCQkJCSAgICAgImxvZy5cbiIpOwotI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiAJCQlpZiAoaXB3X2RlYnVnX2xldmVsICYgSVBXX0RMX0ZXX0VSUk9SUykKIAkJCQlpcHdfZHVtcF9lcnJvcl9sb2cocHJpdiwgcHJpdi0+ZXJyb3IpOwotI2VuZGlmCiAJCX0KIAogCQkvKiBYWFg6IElmIGhhcmR3YXJlIGVuY3J5cHRpb24gaXMgZm9yIFdQQS9XUEEyLApAQCAtMjI4Nyw3ICsyMjc3LDcgQEAKIHN0YXRpYyBpbnQgaXB3X3NldF9zZW5zaXRpdml0eShzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUxNiBzZW5zKQogewogCXN0cnVjdCBpcHdfc2Vuc2l0aXZpdHlfY2FsaWIgY2FsaWIgPSB7Ci0JCS5iZWFjb25fcnNzaV9yYXcgPSBzZW5zLAorCQkuYmVhY29uX3Jzc2lfcmF3ID0gY3B1X3RvX2xlMTYoc2VucyksCiAJfTsKIAogCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfU0VOU0lUSVZJVFlfQ0FMSUIsIHNpemVvZihjYWxpYiksCkBAIC0yMzUzLDYgKzIzNDMsNyBAQAogCQlyZXR1cm4gLTE7CiAJfQogCisJcGh5X29mZiA9IGNwdV90b19sZTMyKHBoeV9vZmYpOwogCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfQ0FSRF9ESVNBQkxFLCBzaXplb2YocGh5X29mZiksCiAJCQkJJnBoeV9vZmYpOwogfQpAQCAtMjQxNCw3ICsyNDA1LDcgQEAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfcnRzX3RocmVzaG9sZChzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIHUxNiBydHMpCiB7CiAJc3RydWN0IGlwd19ydHNfdGhyZXNob2xkIHJ0c190aHJlc2hvbGQgPSB7Ci0JCS5ydHNfdGhyZXNob2xkID0gcnRzLAorCQkucnRzX3RocmVzaG9sZCA9IGNwdV90b19sZTE2KHJ0cyksCiAJfTsKIAogCWlmICghcHJpdikgewpAQCAtMjQyOSw3ICsyNDIwLDcgQEAKIHN0YXRpYyBpbnQgaXB3X3NlbmRfZnJhZ190aHJlc2hvbGQoc3RydWN0IGlwd19wcml2ICpwcml2LCB1MTYgZnJhZykKIHsKIAlzdHJ1Y3QgaXB3X2ZyYWdfdGhyZXNob2xkIGZyYWdfdGhyZXNob2xkID0gewotCQkuZnJhZ190aHJlc2hvbGQgPSBmcmFnLAorCQkuZnJhZ190aHJlc2hvbGQgPSBjcHVfdG9fbGUxNihmcmFnKSwKIAl9OwogCiAJaWYgKCFwcml2KSB7CkBAIC0yNDY0LDYgKzI0NTUsNyBAQAogCQlicmVhazsKIAl9CiAKKwlwYXJhbSA9IGNwdV90b19sZTMyKG1vZGUpOwogCXJldHVybiBpcHdfc2VuZF9jbWRfcGR1KHByaXYsIElQV19DTURfUE9XRVJfTU9ERSwgc2l6ZW9mKHBhcmFtKSwKIAkJCQkmcGFyYW0pOwogfQpAQCAtMjY2Nyw3ICsyNjU5LDcgQEAKIAogCUlQV19ERUJVR19GVygiPj4gOlxuIik7CiAKLQkvL3NldCB0aGUgU3RvcCBhbmQgQWJvcnQgYml0CisJLyogc2V0IHRoZSBTdG9wIGFuZCBBYm9ydCBiaXQgKi8KIAljb250cm9sID0gRE1BX0NPTlRST0xfU01BTExfQ0JfQ09OU1RfVkFMVUUgfCBETUFfQ0JfU1RPUF9BTkRfQUJPUlQ7CiAJaXB3X3dyaXRlX3JlZzMyKHByaXYsIElQV19ETUFfSV9ETUFfQ09OVFJPTCwgY29udHJvbCk7CiAJcHJpdi0+c3JhbV9kZXNjLmxhc3RfY2JfaW5kZXggPSAwOwpAQCAtMzAwMiw4ICsyOTk0LDYgQEAKIAlpZiAocmMgPCAwKQogCQlyZXR1cm4gcmM7CiAKLS8vICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQogCWZvciAoYWRkciA9IElQV19TSEFSRURfTE9XRVJfQk9VTkQ7CiAJICAgICBhZGRyIDwgSVBXX1JFR0lTVEVSX0RPTUFJTjFfRU5EOyBhZGRyICs9IDQpIHsKIAkJaXB3X3dyaXRlMzIocHJpdiwgYWRkciwgMCk7CkBAIC0zMDk3LDggKzMwODcsNiBAQAogCSAgIGZpcm13YXJlIGhhdmUgcHJvYmxlbSBnZXR0aW5nIGFsaXZlIHJlc3AuICovCiAJaXB3X3dyaXRlX3JlZzgocHJpdiwgSVBXX0JBU0VCQU5EX0NPTlRST0xfU1RBVFVTLCAwKTsKIAotLy8gICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTM5MTksNyArMzkwNyw2IEBACiAJezB4MkUsICJDaXBoZXIgc3VpdGUgaXMgcmVqZWN0ZWQgcGVyIHNlY3VyaXR5IHBvbGljeSJ9LAogfTsKIAotI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiBzdGF0aWMgY29uc3QgY2hhciAqaXB3X2dldF9zdGF0dXNfY29kZSh1MTYgc3RhdHVzKQogewogCWludCBpOwpAQCAtMzkyOCw3ICszOTE1LDYgQEAKIAkJCXJldHVybiBpcHdfc3RhdHVzX2NvZGVzW2ldLnJlYXNvbjsKIAlyZXR1cm4gIlVua25vd24gc3RhdHVzIHZhbHVlLiI7CiB9Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgaW5saW5lIGF2ZXJhZ2VfaW5pdChzdHJ1Y3QgYXZlcmFnZSAqYXZnKQogewpAQCAtNDM5OCw3ICs0Mzg0LDYgQEAKIAkJCQkJaWYgKHByaXYtPgogCQkJCQkgICAgc3RhdHVzICYgKFNUQVRVU19BU1NPQ0lBVEVEIHwKIAkJCQkJCSAgICAgIFNUQVRVU19BVVRIKSkgewotI2lmZGVmIENPTkZJR19JUFcyMjAwX0RFQlVHCiAJCQkJCQlzdHJ1Y3Qgbm90aWZfYXV0aGVudGljYXRlICphdXRoCiAJCQkJCQkgICAgPSAmbm90aWYtPnUuYXV0aDsKIAkJCQkJCUlQV19ERUJVRyhJUFdfRExfTk9USUYgfApAQCAtNDQxNiw3ICs0NDAxLDYgQEAKIAkJCQkJCQkgIGlwd19nZXRfc3RhdHVzX2NvZGUKIAkJCQkJCQkgIChudG9ocwogCQkJCQkJCSAgIChhdXRoLT5zdGF0dXMpKSk7Ci0jZW5kaWYKIAogCQkJCQkJcHJpdi0+c3RhdHVzICY9CiAJCQkJCQkgICAgfihTVEFUVVNfQVNTT0NJQVRJTkcgfApAQCAtNTA1OSw3ICs1MDQzLDYgQEAKIAkJfQogCQlsaXN0X2RlbChlbGVtZW50KTsKIAotCQlyeGItPnJ4YiA9IChzdHJ1Y3QgaXB3X3J4X2J1ZmZlciAqKXJ4Yi0+c2tiLT5kYXRhOwogCQlyeGItPmRtYV9hZGRyID0KIAkJICAgIHBjaV9tYXBfc2luZ2xlKHByaXYtPnBjaV9kZXYsIHJ4Yi0+c2tiLT5kYXRhLAogCQkJCSAgIElQV19SWF9CVUZfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKQEAgLTU4MzgsOCArNTgyMSw4IEBACiAJa2V5LnN0YXRpb25faW5kZXggPSAwOwkvKiBhbHdheXMgMCBmb3IgQlNTICovCiAJa2V5LmZsYWdzID0gMDsKIAkvKiAwIGZvciBuZXcga2V5OyBwcmV2aW91cyB2YWx1ZSBvZiBjb3VudGVyIChhZnRlciBmYXRhbCBlcnJvcikgKi8KLQlrZXkudHhfY291bnRlclswXSA9IDA7Ci0Ja2V5LnR4X2NvdW50ZXJbMV0gPSAwOworCWtleS50eF9jb3VudGVyWzBdID0gY3B1X3RvX2xlMzIoMCk7CisJa2V5LnR4X2NvdW50ZXJbMV0gPSBjcHVfdG9fbGUzMigwKTsKIAogCWlwd19zZW5kX2NtZF9wZHUocHJpdiwgSVBXX0NNRF9UR0lfVFhfS0VZLCBzaXplb2Yoa2V5KSwgJmtleSk7CiB9CkBAIC01OTczLDcgKzU5NTYsNiBAQAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogfQogCi0jaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIHN0YXRpYyB2b2lkIGlwd19kZWJ1Z19jb25maWcoc3RydWN0IGlwd19wcml2ICpwcml2KQogewogCUlQV19ERUJVR19JTkZPKCJTY2FuIGNvbXBsZXRlZCwgbm8gdmFsaWQgQVBzIG1hdGNoZWQgIgpAQCAtNTk5OCw5ICs1OTgwLDYgQEAKIAkJSVBXX0RFQlVHX0lORk8oIlBSSVZBQ1kgb2ZmXG4iKTsKIAlJUFdfREVCVUdfSU5GTygiUkFURSBNQVNLOiAweCUwOFhcbiIsIHByaXYtPnJhdGVzX21hc2spOwogfQotI2Vsc2UKLSNkZWZpbmUgaXB3X2RlYnVnX2NvbmZpZyh4KSBkbyB7fSB3aGlsZSAoMCkKLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBpcHdfc2V0X2ZpeGVkX3JhdGUoc3RydWN0IGlwd19wcml2ICpwcml2LCBpbnQgbW9kZSkKIHsKQEAgLTYxODgsNyArNjE2Nyw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlwd19yZXF1ZXN0X3NjYW4oc3RydWN0IGlwd19wcml2ICpwcml2KQorc3RhdGljIGludCBpcHdfcmVxdWVzdF9zY2FuX2hlbHBlcihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYsIGludCB0eXBlKQogewogCXN0cnVjdCBpcHdfc2Nhbl9yZXF1ZXN0X2V4dCBzY2FuOwogCWludCBlcnIgPSAwLCBzY2FuX3R5cGU7CkBAIC02MjE5LDE5ICs2MTk4LDI5IEBACiAJfQogCiAJbWVtc2V0KCZzY2FuLCAwLCBzaXplb2Yoc2NhbikpOworCXNjYW4uZnVsbF9zY2FuX2luZGV4ID0gY3B1X3RvX2xlMzIoaWVlZTgwMjExX2dldF9zY2Fucyhwcml2LT5pZWVlKSk7CiAKLQlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NQRUVEX1NDQU4pCisJaWYgKHR5cGUgPT0gSVdfU0NBTl9UWVBFX1BBU1NJVkUpIHsKKwkgIAlJUFdfREVCVUdfV1goInVzZSBwYXNzaXZlIHNjYW5uaW5nXG4iKTsKKwkgIAlzY2FuX3R5cGUgPSBJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTjsKKwkJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOXSA9CisJCQljcHVfdG9fbGUxNigxMjApOworCQlpcHdfYWRkX3NjYW5fY2hhbm5lbHMocHJpdiwgJnNjYW4sIHNjYW5fdHlwZSk7CisJCWdvdG8gc2VuZF9yZXF1ZXN0OworCX0KKworCS8qIFVzZSBhY3RpdmUgc2NhbiBieSBkZWZhdWx0LiAqLworICAJaWYgKHByaXYtPmNvbmZpZyAmIENGR19TUEVFRF9TQ0FOKQogCQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOXSA9Ci0JCSAgICBjcHVfdG9fbGUxNigzMCk7CisJCQljcHVfdG9fbGUxNigzMCk7CiAJZWxzZQogCQlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9TQ0FOXSA9Ci0JCSAgICBjcHVfdG9fbGUxNigyMCk7CisJCQljcHVfdG9fbGUxNigyMCk7CiAKIAlzY2FuLmR3ZWxsX3RpbWVbSVBXX1NDQU5fQUNUSVZFX0JST0FEQ0FTVF9BTkRfRElSRUNUX1NDQU5dID0KLQkgICAgY3B1X3RvX2xlMTYoMjApOwotCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTl0gPSBjcHVfdG9fbGUxNigxMjApOworCQljcHVfdG9fbGUxNigyMCk7CiAKLQlzY2FuLmZ1bGxfc2Nhbl9pbmRleCA9IGNwdV90b19sZTMyKGllZWU4MDIxMV9nZXRfc2NhbnMocHJpdi0+aWVlZSkpOworICAJc2Nhbi5kd2VsbF90aW1lW0lQV19TQ0FOX1BBU1NJVkVfRlVMTF9EV0VMTF9TQ0FOXSA9IGNwdV90b19sZTE2KDEyMCk7CiAKICNpZmRlZiBDT05GSUdfSVBXMjIwMF9NT05JVE9SCiAJaWYgKHByaXYtPmllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CkBAIC02MjY4LDcgKzYyNTcsNyBAQAogCQkgKgogCQkgKiBUT0RPOiBNb3ZlIFNQRUVEIFNDQU4gc3VwcG9ydCB0byBhbGwgbW9kZXMgYW5kIGJhbmRzICovCiAJCXNjYW4uZHdlbGxfdGltZVtJUFdfU0NBTl9QQVNTSVZFX0ZVTExfRFdFTExfU0NBTl0gPQotCQkgICAgY3B1X3RvX2xlMTYoMjAwMCk7CisJCQljcHVfdG9fbGUxNigyMDAwKTsKIAl9IGVsc2UgewogI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX01PTklUT1IgKi8KIAkJLyogSWYgd2UgYXJlIHJvYW1pbmcsIHRoZW4gbWFrZSB0aGlzIGEgZGlyZWN0ZWQgc2NhbiBmb3IgdGhlCkBAIC02Mjk0LDYgKzYyODMsNyBAQAogCX0KICNlbmRpZgogCitzZW5kX3JlcXVlc3Q6CiAJZXJyID0gaXB3X3NlbmRfc2Nhbl9yZXF1ZXN0X2V4dChwcml2LCAmc2Nhbik7CiAJaWYgKGVycikgewogCQlJUFdfREVCVUdfSEMoIlNlbmRpbmcgc2NhbiBjb21tYW5kIGZhaWxlZDogJTA4WFxuIiwgZXJyKTsKQEAgLTYzMDQsMTEgKzYyOTQsMTkgQEAKIAlwcml2LT5zdGF0dXMgJj0gflNUQVRVU19TQ0FOX1BFTkRJTkc7CiAJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnNjYW5fY2hlY2ssCiAJCQkgICBJUFdfU0NBTl9DSEVDS19XQVRDSERPRyk7Ci0gICAgICBkb25lOgorZG9uZToKIAltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IGlwd19yZXF1ZXN0X3Bhc3NpdmVfc2NhbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpIHsKKyAgCXJldHVybiBpcHdfcmVxdWVzdF9zY2FuX2hlbHBlcihwcml2LCBJV19TQ0FOX1RZUEVfUEFTU0lWRSk7Cit9CisKK3N0YXRpYyBpbnQgaXB3X3JlcXVlc3Rfc2NhbihzdHJ1Y3QgaXB3X3ByaXYgKnByaXYpIHsKKwlyZXR1cm4gaXB3X3JlcXVlc3Rfc2Nhbl9oZWxwZXIocHJpdiwgSVdfU0NBTl9UWVBFX0FDVElWRSk7Cit9CisKIHN0YXRpYyB2b2lkIGlwd19iZ19hYm9ydF9zY2FuKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGlwd19wcml2ICpwcml2ID0gZGF0YTsKQEAgLTYzODcsMTMgKzYzODUsNiBAQAogCSAgICAod3JxdS0+ZGF0YS5sZW5ndGggJiYgZXh0cmEgPT0gTlVMTCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JLy9tdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQkvL2lmICghaWVlZS0+d3BhX2VuYWJsZWQpIHsKLQkvLyAgICAgIGVyciA9IC1FT1BOT1RTVVBQOwotCS8vICAgICAgZ290byBvdXQ7Ci0JLy99Ci0KIAlpZiAod3JxdS0+ZGF0YS5sZW5ndGgpIHsKIAkJYnVmID0ga21hbGxvYyh3cnF1LT5kYXRhLmxlbmd0aCwgR0ZQX0tFUk5FTCk7CiAJCWlmIChidWYgPT0gTlVMTCkgewpAQCAtNjQxMyw3ICs2NDA0LDYgQEAKIAogCWlwd193cGFfYXNzb2NfZnJhbWUocHJpdiwgaWVlZS0+d3BhX2llLCBpZWVlLT53cGFfaWVfbGVuKTsKICAgICAgIG91dDoKLQkvL211dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY0MjYsMTMgKzY0MTYsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTsKIAlpbnQgZXJyID0gMDsKIAotCS8vbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JLy9pZiAoIWllZWUtPndwYV9lbmFibGVkKSB7Ci0JLy8gICAgICBlcnIgPSAtRU9QTk9UU1VQUDsKLQkvLyAgICAgIGdvdG8gb3V0OwotCS8vfQotCiAJaWYgKGllZWUtPndwYV9pZV9sZW4gPT0gMCB8fCBpZWVlLT53cGFfaWUgPT0gTlVMTCkgewogCQl3cnF1LT5kYXRhLmxlbmd0aCA9IDA7CiAJCWdvdG8gb3V0OwpAQCAtNjQ0Nyw3ICs2NDMwLDYgQEAKIAltZW1jcHkoZXh0cmEsIGllZWUtPndwYV9pZSwgaWVlZS0+d3BhX2llX2xlbik7CiAKICAgICAgIG91dDoKLQkvL211dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTY1NTgsNyArNjU0MCw2IEBACiAJCWllZWUtPmllZWU4MDJfMXggPSBwYXJhbS0+dmFsdWU7CiAJCWJyZWFrOwogCi0JCS8vY2FzZSBJV19BVVRIX1JPQU1JTkdfQ09OVFJPTDoKIAljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgogCQlpZWVlLT5wcml2YWN5X2ludm9rZWQgPSBwYXJhbS0+dmFsdWU7CiAJCWJyZWFrOwpAQCAtNjY4MCw3ICs2NjYxLDcgQEAKIAogCXN3aXRjaCAobWxtZS0+Y21kKSB7CiAJY2FzZSBJV19NTE1FX0RFQVVUSDoKLQkJLy8gc2lsZW50bHkgaWdub3JlCisJCS8qIHNpbGVudGx5IGlnbm9yZSAqLwogCQlicmVhazsKIAogCWNhc2UgSVdfTUxNRV9ESVNBU1NPQzoKQEAgLTY4MTEsNyArNjc5Miw3IEBACiAJCWJ1cnN0X2R1cmF0aW9uID0gaXB3X3Fvc19nZXRfYnVyc3RfZHVyYXRpb24ocHJpdik7CiAJCWZvciAoaSA9IDA7IGkgPCBRT1NfUVVFVUVfTlVNOyBpKyspCiAJCQlxb3NfcGFyYW1ldGVyc1tRT1NfUEFSQU1fU0VUX0FDVElWRV0udHhfb3BfbGltaXRbaV0gPQotCQkJICAgICh1MTYpIGJ1cnN0X2R1cmF0aW9uOworCQkJICAgICh1MTYpYnVyc3RfZHVyYXRpb247CiAJfSBlbHNlIGlmIChwcml2LT5pZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpIHsKIAkJaWYgKHR5cGUgPT0gSUVFRV9CKSB7CiAJCQlJUFdfREVCVUdfUU9TKCJRb1MgYWN0aXZhdGUgSUJTUyBuZXdvcmsgbW9kZSAlZFxuIiwKQEAgLTY4NDMsMTEgKzY4MjQsMjAgQEAKIAkJCWJ1cnN0X2R1cmF0aW9uID0gaXB3X3Fvc19nZXRfYnVyc3RfZHVyYXRpb24ocHJpdik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgUU9TX1FVRVVFX05VTTsgaSsrKQogCQkJCXFvc19wYXJhbWV0ZXJzW1FPU19QQVJBTV9TRVRfQUNUSVZFXS4KLQkJCQkgICAgdHhfb3BfbGltaXRbaV0gPSAodTE2KSBidXJzdF9kdXJhdGlvbjsKKwkJCQkgICAgdHhfb3BfbGltaXRbaV0gPSAodTE2KWJ1cnN0X2R1cmF0aW9uOwogCQl9CiAJfQogCiAJSVBXX0RFQlVHX1FPUygiUW9TIHNlbmRpbmcgSVBXX0NNRF9RT1NfUEFSQU1FVEVSU1xuIik7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IFFPU19RVUVVRV9OVU07IGorKykgeworCQkJcW9zX3BhcmFtZXRlcnNbaV0uY3dfbWluW2pdID0gY3B1X3RvX2xlMTYocW9zX3BhcmFtZXRlcnNbaV0uY3dfbWluW2pdKTsKKwkJCXFvc19wYXJhbWV0ZXJzW2ldLmN3X21heFtqXSA9IGNwdV90b19sZTE2KHFvc19wYXJhbWV0ZXJzW2ldLmN3X21heFtqXSk7CisJCQlxb3NfcGFyYW1ldGVyc1tpXS50eF9vcF9saW1pdFtqXSA9IGNwdV90b19sZTE2KHFvc19wYXJhbWV0ZXJzW2ldLnR4X29wX2xpbWl0W2pdKTsKKwkJfQorCX0KKwogCWVyciA9IGlwd19zZW5kX3Fvc19wYXJhbXNfY29tbWFuZChwcml2LAogCQkJCQkgIChzdHJ1Y3QgaWVlZTgwMjExX3Fvc19wYXJhbWV0ZXJzICopCiAJCQkJCSAgJihxb3NfcGFyYW1ldGVyc1swXSkpOwpAQCAtNzA4Niw3ICs3MDc2LDcgQEAKIAogCWlmIChwcml2LT5xb3NfZGF0YS5xb3Nfbm9fYWNrX21hc2sgJiAoMVVMIDw8IHR4X3F1ZXVlX2lkKSkgewogCQl0ZmQtPnR4X2ZsYWdzICY9IH5EQ1RfRkxBR19BQ0tfUkVRRDsKLQkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLnFvc19jdHJsIHw9IENUUkxfUU9TX05PX0FDSzsKKwkJdGZkLT50ZmQudGZkXzI2Lm1jaGRyLnFvc19jdHJsIHw9IGNwdV90b19sZTE2KENUUkxfUU9TX05PX0FDSyk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNzY2Nyw3ICs3NjU3LDYgQEAKIAkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLwogCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQogCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8Ci0JICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAogCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKIAkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CiAJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfApAQCAtNzY3Niw2ICs3NjY1LDcgQEAKIAogCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLwogCWlwd19ydC0+cnRfZmxhZ3MgPSAwOworCWlwd19ydC0+cnRfdHNmID0gMFVMTDsKIAogCS8qIENvbnZlcnQgc2lnbmFsIHRvIERCTSAqLwogCWlwd19ydC0+cnRfZGJtc2lnbmFsID0gYW50c2lnbmFsOwpAQCAtNzc5NCw3ICs3Nzg0LDYgQEAKIAlzOCBub2lzZSA9IGZyYW1lLT5ub2lzZTsKIAl1OCByYXRlID0gZnJhbWUtPnJhdGU7CiAJc2hvcnQgbGVuID0gbGUxNl90b19jcHUocGt0LT51LmZyYW1lLmxlbmd0aCk7Ci0JdTY0IHRzZiA9IDA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgaGRyX29ubHkgPSAwOwogCXUxNiBmaWx0ZXIgPSBwcml2LT5wcm9tX3ByaXYtPmZpbHRlcjsKQEAgLTc4MjksMTcgKzc4MTgsMTcgQEAKIAl9CiAKIAloZHIgPSAodm9pZCAqKXJ4Yi0+c2tiLT5kYXRhICsgSVBXX1JYX0ZSQU1FX1NJWkU7Ci0JaWYgKGllZWU4MDIxMV9pc19tYW5hZ2VtZW50KGhkci0+ZnJhbWVfY3RsKSkgeworCWlmIChpZWVlODAyMTFfaXNfbWFuYWdlbWVudChsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19NR01UKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTUdNVF9IRUFERVJfT05MWSkKIAkJCWhkcl9vbmx5ID0gMTsKLQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jb250cm9sKGhkci0+ZnJhbWVfY3RsKSkgeworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2NvbnRyb2wobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKSkgewogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fQ1RMKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fQ1RMX0hFQURFUl9PTkxZKQogCQkJaGRyX29ubHkgPSAxOwotCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jdGwpKSB7CisJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YShsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCkpKSB7CiAJCWlmIChmaWx0ZXIgJiBJUFdfUFJPTV9OT19EQVRBKQogCQkJcmV0dXJuOwogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fREFUQV9IRUFERVJfT05MWSkKQEAgLTc4NTcsNyArNzg0Niw3IEBACiAJaXB3X3J0ID0gKHZvaWQgKilza2ItPmRhdGE7CiAKIAlpZiAoaGRyX29ubHkpCi0JCWxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY3RsKTsKKwkJbGVuID0gaWVlZTgwMjExX2dldF9oZHJsZW4obGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKTsKIAogCW1lbWNweShpcHdfcnQtPnBheWxvYWQsIGhkciwgbGVuKTsKIApAQCAtNzg4MCw3ICs3ODY5LDYgQEAKIAkvKiBCaWcgYml0ZmllbGQgb2YgYWxsIHRoZSBmaWVsZHMgd2UgcHJvdmlkZSBpbiByYWRpb3RhcCAqLwogCWlwd19ydC0+cnRfaGRyLml0X3ByZXNlbnQgPQogCSAgICAoKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTKSB8Ci0JICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCkgfAogCSAgICAgKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX1JBVEUpIHwKIAkgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSB8CiAJICAgICAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCkgfApAQCAtNzg4OSw4ICs3ODc3LDcgQEAKIAogCS8qIFplcm8gdGhlIGZsYWdzLCB3ZSdsbCBhZGQgdG8gdGhlbSBhcyB3ZSBnbyAqLwogCWlwd19ydC0+cnRfZmxhZ3MgPSAwOwotCi0JaXB3X3J0LT5ydF90c2YgPSB0c2Y7CisJaXB3X3J0LT5ydF90c2YgPSAwVUxMOwogCiAJLyogQ29udmVydCB0byBEQk0gKi8KIAlpcHdfcnQtPnJ0X2RibXNpZ25hbCA9IHNpZ25hbDsKQEAgLTgxNjMsOCArODE1MCw3IEBACiAJCXN3aXRjaCAocGt0LT5oZWFkZXIubWVzc2FnZV90eXBlKSB7CiAJCWNhc2UgUlhfRlJBTUVfVFlQRToJLyogODAyLjExIGZyYW1lICovICB7CiAJCQkJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyBzdGF0cyA9IHsKLQkJCQkJLnJzc2kgPQotCQkJCQkgICAgbGUxNl90b19jcHUocGt0LT51LmZyYW1lLnJzc2lfZGJtKSAtCisJCQkJCS5yc3NpID0gcGt0LT51LmZyYW1lLnJzc2lfZGJtIC0KIAkJCQkJICAgIElQV19SU1NJX1RPX0RCTSwKIAkJCQkJLnNpZ25hbCA9CiAJCQkJCSAgICBsZTE2X3RvX2NwdShwa3QtPnUuZnJhbWUucnNzaV9kYm0pIC0KQEAgLTg1OTksOSArODU4NSwyNiBAQAogCSAqIGNvbmZpZ3VyZWQgQ0hBTk5FTCB0aGVuIHJldHVybiB0aGF0OyBvdGhlcndpc2UgcmV0dXJuIEFOWSAqLwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX1NUQVRJQ19DSEFOTkVMIHx8Ci0JICAgIHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRJTkcgfCBTVEFUVVNfQVNTT0NJQVRFRCkpCi0JCXdycXUtPmZyZXEubSA9IHByaXYtPmNoYW5uZWw7Ci0JZWxzZQorCSAgICBwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFUSU5HIHwgU1RBVFVTX0FTU09DSUFURUQpKSB7CisJCWludCBpOworCisJCWkgPSBpZWVlODAyMTFfY2hhbm5lbF90b19pbmRleChwcml2LT5pZWVlLCBwcml2LT5jaGFubmVsKTsKKwkJQlVHX09OKGkgPT0gLTEpOworCQl3cnF1LT5mcmVxLmUgPSAxOworCisJCXN3aXRjaCAoaWVlZTgwMjExX2lzX3ZhbGlkX2NoYW5uZWwocHJpdi0+aWVlZSwgcHJpdi0+Y2hhbm5lbCkpIHsKKwkJY2FzZSBJRUVFODAyMTFfNTJHSFpfQkFORDoKKwkJCXdycXUtPmZyZXEubSA9IHByaXYtPmllZWUtPmdlby5hW2ldLmZyZXEgKiAxMDAwMDA7CisJCQlicmVhazsKKworCQljYXNlIElFRUU4MDIxMV8yNEdIWl9CQU5EOgorCQkJd3JxdS0+ZnJlcS5tID0gcHJpdi0+aWVlZS0+Z2VvLmJnW2ldLmZyZXEgKiAxMDAwMDA7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKwl9IGVsc2UKIAkJd3JxdS0+ZnJlcS5tID0gMDsKIAogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtODg1Nyw0MiArODg2MCwzOCBAQAogCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JY2hhciAqZXNzaWQgPSAiIjsJLyogQU5ZICovCi0JaW50IGxlbmd0aCA9IDA7Ci0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCWlmICh3cnF1LT5lc3NpZC5mbGFncyAmJiB3cnF1LT5lc3NpZC5sZW5ndGgpIHsKLQkJbGVuZ3RoID0gd3JxdS0+ZXNzaWQubGVuZ3RoIC0gMTsKLQkJZXNzaWQgPSBleHRyYTsKLQl9Ci0JaWYgKGxlbmd0aCA9PSAwKSB7Ci0JCUlQV19ERUJVR19XWCgiU2V0dGluZyBFU1NJRCB0byBBTllcbiIpOwotCQlpZiAoKHByaXYtPmNvbmZpZyAmIENGR19TVEFUSUNfRVNTSUQpICYmCi0JCSAgICAhKHByaXYtPnN0YXR1cyAmIChTVEFUVVNfQVNTT0NJQVRFRCB8Ci0JCQkJICAgICAgU1RBVFVTX0FTU09DSUFUSU5HKSkpIHsKLQkJCUlQV19ERUJVR19BU1NPQygiQXR0ZW1wdGluZyB0byBhc3NvY2lhdGUgd2l0aCBuZXcgIgotCQkJCQkicGFyYW1ldGVycy5cbiIpOwotCQkJcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0VTU0lEOwotCQkJaXB3X2Fzc29jaWF0ZShwcml2KTsKLQkJfQotCQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQkJcmV0dXJuIDA7Ci0JfQorICAgICAgICBpbnQgbGVuZ3RoOwogCi0JbGVuZ3RoID0gbWluKGxlbmd0aCwgSVdfRVNTSURfTUFYX1NJWkUpOworICAgICAgICBtdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CisKKyAgICAgICAgaWYgKCF3cnF1LT5lc3NpZC5mbGFncykKKyAgICAgICAgeworICAgICAgICAgICAgICAgIElQV19ERUJVR19XWCgiU2V0dGluZyBFU1NJRCB0byBBTllcbiIpOworICAgICAgICAgICAgICAgIGlwd19kaXNhc3NvY2lhdGUocHJpdik7CisgICAgICAgICAgICAgICAgcHJpdi0+Y29uZmlnICY9IH5DRkdfU1RBVElDX0VTU0lEOworICAgICAgICAgICAgICAgIGlwd19hc3NvY2lhdGUocHJpdik7CisgICAgICAgICAgICAgICAgbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworCWxlbmd0aCA9IG1pbigoaW50KXdycXUtPmVzc2lkLmxlbmd0aCwgSVdfRVNTSURfTUFYX1NJWkUpOworCWlmICghZXh0cmFbbGVuZ3RoIC0gMV0pCisJCWxlbmd0aC0tOwogCiAJcHJpdi0+Y29uZmlnIHw9IENGR19TVEFUSUNfRVNTSUQ7CiAKLQlpZiAocHJpdi0+ZXNzaWRfbGVuID09IGxlbmd0aCAmJiAhbWVtY21wKHByaXYtPmVzc2lkLCBleHRyYSwgbGVuZ3RoKSkgeworCWlmIChwcml2LT5lc3NpZF9sZW4gPT0gbGVuZ3RoICYmICFtZW1jbXAocHJpdi0+ZXNzaWQsIGV4dHJhLCBsZW5ndGgpCisJICAgICYmIChwcml2LT5zdGF0dXMgJiAoU1RBVFVTX0FTU09DSUFURUQgfCBTVEFUVVNfQVNTT0NJQVRJTkcpKSkgewogCQlJUFdfREVCVUdfV1goIkVTU0lEIHNldCB0byBjdXJyZW50IEVTU0lELlxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlJUFdfREVCVUdfV1goIlNldHRpbmcgRVNTSUQ6ICclcycgKCVkKVxuIiwgZXNjYXBlX2Vzc2lkKGVzc2lkLCBsZW5ndGgpLAorCUlQV19ERUJVR19XWCgiU2V0dGluZyBFU1NJRDogJyVzJyAoJWQpXG4iLCBlc2NhcGVfZXNzaWQoZXh0cmEsIGxlbmd0aCksCiAJCSAgICAgbGVuZ3RoKTsKIAogCXByaXYtPmVzc2lkX2xlbiA9IGxlbmd0aDsKLQltZW1jcHkocHJpdi0+ZXNzaWQsIGVzc2lkLCBwcml2LT5lc3NpZF9sZW4pOworCW1lbWNweShwcml2LT5lc3NpZCwgZXh0cmEsIHByaXYtPmVzc2lkX2xlbik7CiAKIAkvKiBOZXR3b3JrIGNvbmZpZ3VyYXRpb24gY2hhbmdlZCAtLSBmb3JjZSBbcmVdYXNzb2NpYXRpb24gKi8KIAlJUFdfREVCVUdfQVNTT0MoIltyZV1hc3NvY2lhdGlvbiB0cmlnZ2VyZWQgZHVlIHRvIEVTU0lEIGNoYW5nZS5cbiIpOwpAQCAtOTI3Myw3ICs5MjcyLDcgQEAKIAlpZiAoISh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX0xJTUlUKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAod3JxdS0+cmV0cnkudmFsdWUgPCAwIHx8IHdycXUtPnJldHJ5LnZhbHVlID4gMjU1KQorCWlmICh3cnF1LT5yZXRyeS52YWx1ZSA8IDAgfHwgd3JxdS0+cmV0cnkudmFsdWUgPj0gMjU1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKQEAgLTkzOTYsMTUgKzkzOTUsMTkgQEAKIAkJCSAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQogewogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0Jc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSBOVUxMOwotCWlmICh3cnF1LT5kYXRhLmxlbmd0aAotCSAgICAmJiB3cnF1LT5kYXRhLmxlbmd0aCA9PSBzaXplb2Yoc3RydWN0IGl3X3NjYW5fcmVxKSkgewotCQlyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisJc3RydWN0IGl3X3NjYW5fcmVxICpyZXEgPSAoc3RydWN0IGl3X3NjYW5fcmVxICopZXh0cmE7CisKKwlpZiAod3JxdS0+ZGF0YS5sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBpd19zY2FuX3JlcSkpIHsKIAkJaWYgKHdycXUtPmRhdGEuZmxhZ3MgJiBJV19TQ0FOX1RISVNfRVNTSUQpIHsKIAkJCWlwd19yZXF1ZXN0X2RpcmVjdF9zY2FuKHByaXYsIHJlcS0+ZXNzaWQsCiAJCQkJCQlyZXEtPmVzc2lkX2xlbik7CiAJCQlyZXR1cm4gMDsKIAkJfQorCQlpZiAocmVxLT5zY2FuX3R5cGUgPT0gSVdfU0NBTl9UWVBFX1BBU1NJVkUpIHsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLAorCQkJCSAgICZwcml2LT5yZXF1ZXN0X3Bhc3NpdmVfc2Nhbik7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAogCUlQV19ERUJVR19XWCgiU3RhcnQgc2NhblxuIik7CkBAIC05NzY2LDcgKzk3NjksNyBAQAogCXJldHVybiAwOwogfQogCi0jZW5kaWYJCQkJLy8gQ09ORklHX0lQVzIyMDBfTU9OSVRPUgorI2VuZGlmCQkJCS8qIENPTkZJR19JUFcyMjAwX01PTklUT1IgKi8KIAogc3RhdGljIGludCBpcHdfd3hfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC0xMDAwOSw3ICsxMDAxMiw3IEBACiAJc3lzX2NvbmZpZy0+ZG90MTFnX2F1dG9fZGV0ZWN0aW9uID0gMDsKIAlzeXNfY29uZmlnLT5lbmFibGVfY3RzX3RvX3NlbGYgPSAwOwogCXN5c19jb25maWctPmJ0X2NvZXhpc3RfY29sbGlzaW9uX3RociA9IDA7Ci0Jc3lzX2NvbmZpZy0+cGFzc19ub2lzZV9zdGF0c190b19ob3N0ID0gMTsJLy8xIC0tIGZpeCBmb3IgMjU2CisJc3lzX2NvbmZpZy0+cGFzc19ub2lzZV9zdGF0c190b19ob3N0ID0gMTsJLyogMSAtLSBmaXggZm9yIDI1NiAqLwogCXN5c19jb25maWctPnNpbGVuY2VfdGhyZXNob2xkID0gMHgxZTsKIH0KIApAQCAtMTAxMTMsNyArMTAxMTYsNyBAQAogCQlzd2l0Y2ggKHByaXYtPmllZWUtPnNlYy5sZXZlbCkgewogCQljYXNlIFNFQ19MRVZFTF8zOgogCQkJdGZkLT51LmRhdGEudGZkLnRmZF8yNC5tY2hkci5mcmFtZV9jdGwgfD0KLQkJCSAgICBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7CisJCQkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAkJCS8qIFhYWDogQUNLIGZsYWcgbXVzdCBiZSBzZXQgZm9yIENDTVAgZXZlbiBpZiBpdAogCQkJICogaXMgYSBtdWx0aWNhc3QvYnJvYWRjYXN0IHBhY2tldCwgYmVjYXVzZSBDQ01QCiAJCQkgKiBncm91cCBjb21tdW5pY2F0aW9uIGVuY3J5cHRlZCBieSBHVEsgaXMKQEAgLTEwMTI4LDE0ICsxMDEzMSwxNCBAQAogCQkJYnJlYWs7CiAJCWNhc2UgU0VDX0xFVkVMXzI6CiAJCQl0ZmQtPnUuZGF0YS50ZmQudGZkXzI0Lm1jaGRyLmZyYW1lX2N0bCB8PQotCQkJICAgIElFRUU4MDIxMV9GQ1RMX1BST1RFQ1RFRDsKKwkJCSAgICBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QUk9URUNURUQpOwogCQkJdGZkLT51LmRhdGEudHhfZmxhZ3MgJj0gfkRDVF9GTEFHX05PX1dFUDsKIAkJCXRmZC0+dS5kYXRhLnR4X2ZsYWdzX2V4dCB8PSBEQ1RfRkxBR19FWFRfU0VDVVJJVFlfVEtJUDsKIAkJCXRmZC0+dS5kYXRhLmtleV9pbmRleCA9IERDVF9XRVBfSU5ERVhfVVNFX0lNTUVESUFURTsKIAkJCWJyZWFrOwogCQljYXNlIFNFQ19MRVZFTF8xOgogCQkJdGZkLT51LmRhdGEudGZkLnRmZF8yNC5tY2hkci5mcmFtZV9jdGwgfD0KLQkJCSAgICBJRUVFODAyMTFfRkNUTF9QUk9URUNURUQ7CisJCQkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUFJPVEVDVEVEKTsKIAkJCXRmZC0+dS5kYXRhLmtleV9pbmRleCA9IHByaXYtPmllZWUtPnR4X2tleWlkeDsKIAkJCWlmIChwcml2LT5pZWVlLT5zZWMua2V5X3NpemVzW3ByaXYtPmllZWUtPnR4X2tleWlkeF0gPD0KIAkJCSAgICA0MCkKQEAgLTEwMjY3LDE3ICsxMDI3MCwxNyBAQAogCiAJLyogRmlsdGVyaW5nIG9mIGZyYWdtZW50IGNoYWlucyBpcyBkb25lIGFnYWlucyB0aGUgZmlyc3QgZnJhZ21lbnQgKi8KIAloZHIgPSAodm9pZCAqKXR4Yi0+ZnJhZ21lbnRzWzBdLT5kYXRhOwotCWlmIChpZWVlODAyMTFfaXNfbWFuYWdlbWVudChoZHItPmZyYW1lX2N0bCkpIHsKKwlpZiAoaWVlZTgwMjExX2lzX21hbmFnZW1lbnQobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKSkgewogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fTUdNVCkKIAkJCXJldHVybjsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX01HTVRfSEVBREVSX09OTFkpCiAJCQloZHJfb25seSA9IDE7Ci0JfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfY29udHJvbChoZHItPmZyYW1lX2N0bCkpIHsKKwl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19jb250cm9sKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSkpIHsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX05PX0NUTCkKIAkJCXJldHVybjsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX0NUTF9IRUFERVJfT05MWSkKIAkJCWhkcl9vbmx5ID0gMTsKLQl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY3RsKSkgeworCX0gZWxzZSBpZiAoaWVlZTgwMjExX2lzX2RhdGEobGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpKSkgewogCQlpZiAoZmlsdGVyICYgSVBXX1BST01fTk9fREFUQSkKIAkJCXJldHVybjsKIAkJaWYgKGZpbHRlciAmIElQV19QUk9NX0RBVEFfSEVBREVSX09OTFkpCkBAIC0xMDI5Miw3ICsxMDI5NSw3IEBACiAKIAkJaWYgKGhkcl9vbmx5KSB7CiAJCQloZHIgPSAodm9pZCAqKXNyYy0+ZGF0YTsKLQkJCWxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGhkci0+ZnJhbWVfY3RsKTsKKwkJCWxlbiA9IGllZWU4MDIxMV9nZXRfaGRybGVuKGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKSk7CiAJCX0gZWxzZQogCQkJbGVuID0gc3JjLT5sZW47CiAKQEAgLTEwNDU4LDcgKzEwNDYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpcHdfZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGlwd19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2xpbmsgPSBpcHdfZXRodG9vbF9nZXRfbGluaywKIAkuZ2V0X2RydmluZm8gPSBpcHdfZXRodG9vbF9nZXRfZHJ2aW5mbywKIAkuZ2V0X2VlcHJvbV9sZW4gPSBpcHdfZXRodG9vbF9nZXRfZWVwcm9tX2xlbiwKQEAgLTEwNjM2LDYgKzEwNjM5LDggQEAKIAlJTklUX1dPUksoJnByaXYtPmRvd24sICh2b2lkICgqKSh2b2lkICopKWlwd19iZ19kb3duLCBwcml2KTsKIAlJTklUX1dPUksoJnByaXYtPnJlcXVlc3Rfc2NhbiwKIAkJICAodm9pZCAoKikodm9pZCAqKSlpcHdfcmVxdWVzdF9zY2FuLCBwcml2KTsKKwlJTklUX1dPUksoJnByaXYtPnJlcXVlc3RfcGFzc2l2ZV9zY2FuLAorCQkgICh2b2lkICgqKSh2b2lkICopKWlwd19yZXF1ZXN0X3Bhc3NpdmVfc2NhbiwgcHJpdik7CiAJSU5JVF9XT1JLKCZwcml2LT5nYXRoZXJfc3RhdHMsCiAJCSAgKHZvaWQgKCopKHZvaWQgKikpaXB3X2JnX2dhdGhlcl9zdGF0cywgcHJpdik7CiAJSU5JVF9XT1JLKCZwcml2LT5hYm9ydF9zY2FuLCAodm9pZCAoKikodm9pZCAqKSlpcHdfYmdfYWJvcnRfc2NhbiwgcHJpdik7CkBAIC0xMTQ4OCw5ICsxMTQ5Myw3IEBACiAKIAlwcml2LT5uZXRfZGV2ID0gbmV0X2RldjsKIAlwcml2LT5wY2lfZGV2ID0gcGRldjsKLSNpZmRlZiBDT05GSUdfSVBXMjIwMF9ERUJVRwogCWlwd19kZWJ1Z19sZXZlbCA9IGRlYnVnOwotI2VuZGlmCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmlycV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAJZm9yIChpID0gMDsgaSA8IElQV19JQlNTX01BQ19IQVNIX1NJWkU7IGkrKykKQEAgLTExNzU1LDYgKzExNzU4LDE2IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgaXB3X3BjaV9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgaXB3X3ByaXYgKnByaXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwkvKiBUYWtlIGRvd24gdGhlIGRldmljZTsgcG93ZXJzIGl0IG9mZiwgZXRjLiAqLworCWlwd19kb3duKHByaXYpOworCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCiAvKiBkcml2ZXIgaW5pdGlhbGl6YXRpb24gc3R1ZmYgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpcHdfZHJpdmVyID0gewogCS5uYW1lID0gRFJWX05BTUUsCkBAIC0xMTc2NSw2ICsxMTc3OCw3IEBACiAJLnN1c3BlbmQgPSBpcHdfcGNpX3N1c3BlbmQsCiAJLnJlc3VtZSA9IGlwd19wY2lfcmVzdW1lLAogI2VuZGlmCisJLnNodXRkb3duID0gaXB3X3BjaV9zaHV0ZG93biwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGlwd19pbml0KHZvaWQpCkBAIC0xMTc3NCw3ICsxMTc4OCw3IEBACiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiAiIERSVl9ERVNDUklQVElPTiAiLCAiIERSVl9WRVJTSU9OICJcbiIpOwogCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBEUlZfQ09QWVJJR0hUICJcbiIpOwogCi0JcmV0ID0gcGNpX21vZHVsZV9pbml0KCZpcHdfZHJpdmVyKTsKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpcHdfZHJpdmVyKTsKIAlpZiAocmV0KSB7CiAJCUlQV19FUlJPUigiVW5hYmxlIHRvIGluaXRpYWxpemUgUENJIG1vZHVsZVxuIik7CiAJCXJldHVybiByZXQ7CkBAIC0xMTgwOCwxMCArMTE4MjIsOCBAQAogbW9kdWxlX3BhcmFtKGxlZCwgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MobGVkLCAiZW5hYmxlIGxlZCBjb250cm9sIG9uIHNvbWUgc3lzdGVtcyAoZGVmYXVsdCAwIG9mZilcbiIpOwogCi0jaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBvdXRwdXQgbWFzayIpOwotI2VuZGlmCiAKIG1vZHVsZV9wYXJhbShjaGFubmVsLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhjaGFubmVsLCAiY2hhbm5lbCB0byBsaW1pdCBhc3NvY2lhdGUgdG8gKGRlZmF1bHQgMCBbQU5ZXSkiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuaAppbmRleCA4YjFjZDdjLi5kYWQ1ZWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5oCkBAIC03MTMsNyArNzEzLDYgQEAKIAogc3RydWN0IGlwd19yeF9tZW1fYnVmZmVyIHsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwotCXN0cnVjdCBpcHdfcnhfYnVmZmVyICpyeGI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwkJCQkvKiBOb3QgdHJhbnNmZXJyZWQgb3ZlciBuZXR3b3JrLCBzbyBub3QgIF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSAqLwpAQCAtMTI5Nyw2ICsxMjk2LDcgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3lzdGVtX2NvbmZpZzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfcmVwbGVuaXNoOwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X3NjYW47CisgIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVxdWVzdF9wYXNzaXZlX3NjYW47CiAJc3RydWN0IHdvcmtfc3RydWN0IGFkYXB0ZXJfcmVzdGFydDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmZfa2lsbDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdXA7CkBAIC0xMzgxLDEzICsxMzgxLDE4IEBACiBCSVRfQVJHMTYoeCkKIAogCi0jaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKICNkZWZpbmUgSVBXX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKIGRvIHsgaWYgKGlwd19kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKICAgcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAogICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQorCisjaWZkZWYgQ09ORklHX0lQVzIyMDBfREVCVUcKKyNkZWZpbmUgSVBXX0xMX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIFwKK2RvIHsgaWYgKGlwd19kZWJ1Z19sZXZlbCAmIChsZXZlbCkpIFwKKyAgcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUiOiAlYyAlcyAiIGZtdCwgXAorICAgICAgICAgaW5faW50ZXJydXB0KCkgPyAnSScgOiAnVScsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpOyB9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgSVBXX0RFQlVHKGxldmVsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBJUFdfTExfREVCVUcobGV2ZWwsIGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYJCQkJLyogQ09ORklHX0lQVzIyMDBfREVCVUcgKi8KIAogLyoKQEAgLTE0NTcsMjggKzE0NjIsMjcgQEAKIAogI2RlZmluZSBJUFdfREVCVUdfV1goZiwgYS4uLikgICAgIElQV19ERUJVRyhJUFdfRExfV1gsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19TQ0FOKGYsIGEuLi4pICAgSVBXX0RFQlVHKElQV19ETF9TQ0FOLCBmLCAjIyBhKQotI2RlZmluZSBJUFdfREVCVUdfU1RBVFVTKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfU1RBVFVTLCBmLCAjIyBhKQotI2RlZmluZSBJUFdfREVCVUdfVFJBQ0UoZiwgYS4uLikgIElQV19ERUJVRyhJUFdfRExfVFJBQ0UsIGYsICMjIGEpCi0jZGVmaW5lIElQV19ERUJVR19SWChmLCBhLi4uKSAgICAgSVBXX0RFQlVHKElQV19ETF9SWCwgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX1RYKGYsIGEuLi4pICAgICBJUFdfREVCVUcoSVBXX0RMX1RYLCBmLCAjIyBhKQotI2RlZmluZSBJUFdfREVCVUdfSVNSKGYsIGEuLi4pICAgIElQV19ERUJVRyhJUFdfRExfSVNSLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfVFJBQ0UoZiwgYS4uLikgIElQV19MTF9ERUJVRyhJUFdfRExfVFJBQ0UsIGYsICMjIGEpCisjZGVmaW5lIElQV19ERUJVR19SWChmLCBhLi4uKSAgICAgSVBXX0xMX0RFQlVHKElQV19ETF9SWCwgZiwgIyMgYSkKKyNkZWZpbmUgSVBXX0RFQlVHX1RYKGYsIGEuLi4pICAgICBJUFdfTExfREVCVUcoSVBXX0RMX1RYLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfSVNSKGYsIGEuLi4pICAgIElQV19MTF9ERUJVRyhJUFdfRExfSVNSLCBmLCAjIyBhKQogI2RlZmluZSBJUFdfREVCVUdfTUFOQUdFTUVOVChmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX01BTkFHRSwgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX0xFRChmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX0xFRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX1dFUChmLCBhLi4uKSAgICBJUFdfREVCVUcoSVBXX0RMX1dFUCwgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX0hDKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfSE9TVF9DT01NQU5ELCBmLCAjIyBhKQotI2RlZmluZSBJUFdfREVCVUdfRlJBRyhmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX0ZSQUcsIGYsICMjIGEpCi0jZGVmaW5lIElQV19ERUJVR19GVyhmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX0ZXLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfTEVEKGYsIGEuLi4pIElQV19MTF9ERUJVRyhJUFdfRExfTEVELCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfV0VQKGYsIGEuLi4pICAgIElQV19MTF9ERUJVRyhJUFdfRExfV0VQLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfSEMoZiwgYS4uLikgSVBXX0xMX0RFQlVHKElQV19ETF9IT1NUX0NPTU1BTkQsIGYsICMjIGEpCisjZGVmaW5lIElQV19ERUJVR19GUkFHKGYsIGEuLi4pIElQV19MTF9ERUJVRyhJUFdfRExfRlJBRywgZiwgIyMgYSkKKyNkZWZpbmUgSVBXX0RFQlVHX0ZXKGYsIGEuLi4pIElQV19MTF9ERUJVRyhJUFdfRExfRlcsIGYsICMjIGEpCiAjZGVmaW5lIElQV19ERUJVR19SRl9LSUxMKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfUkZfS0lMTCwgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX0RST1AoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9EUk9QLCBmLCAjIyBhKQotI2RlZmluZSBJUFdfREVCVUdfSU8oZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9JTywgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX09SRChmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX09SRCwgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX0ZXX0lORk8oZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9GV19JTkZPLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfSU8oZiwgYS4uLikgSVBXX0xMX0RFQlVHKElQV19ETF9JTywgZiwgIyMgYSkKKyNkZWZpbmUgSVBXX0RFQlVHX09SRChmLCBhLi4uKSBJUFdfTExfREVCVUcoSVBXX0RMX09SRCwgZiwgIyMgYSkKKyNkZWZpbmUgSVBXX0RFQlVHX0ZXX0lORk8oZiwgYS4uLikgSVBXX0xMX0RFQlVHKElQV19ETF9GV19JTkZPLCBmLCAjIyBhKQogI2RlZmluZSBJUFdfREVCVUdfTk9USUYoZiwgYS4uLikgSVBXX0RFQlVHKElQV19ETF9OT1RJRiwgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX1NUQVRFKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfU1RBVEUgfCBJUFdfRExfQVNTT0MgfCBJUFdfRExfSU5GTywgZiwgIyMgYSkKICNkZWZpbmUgSVBXX0RFQlVHX0FTU09DKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfQVNTT0MgfCBJUFdfRExfSU5GTywgZiwgIyMgYSkKLSNkZWZpbmUgSVBXX0RFQlVHX1NUQVRTKGYsIGEuLi4pIElQV19ERUJVRyhJUFdfRExfU1RBVFMsIGYsICMjIGEpCi0jZGVmaW5lIElQV19ERUJVR19NRVJHRShmLCBhLi4uKSBJUFdfREVCVUcoSVBXX0RMX01FUkdFLCBmLCAjIyBhKQotI2RlZmluZSBJUFdfREVCVUdfUU9TKGYsIGEuLi4pICAgSVBXX0RFQlVHKElQV19ETF9RT1MsIGYsICMjIGEpCisjZGVmaW5lIElQV19ERUJVR19TVEFUUyhmLCBhLi4uKSBJUFdfTExfREVCVUcoSVBXX0RMX1NUQVRTLCBmLCAjIyBhKQorI2RlZmluZSBJUFdfREVCVUdfTUVSR0UoZiwgYS4uLikgSVBXX0xMX0RFQlVHKElQV19ETF9NRVJHRSwgZiwgIyMgYSkKKyNkZWZpbmUgSVBXX0RFQlVHX1FPUyhmLCBhLi4uKSAgIElQV19MTF9ERUJVRyhJUFdfRExfUU9TLCBmLCAjIyBhKQogCiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIApAQCAtMTk0NywxMCArMTk1MSwxNyBAQAogCXUzMiAqcGFyYW07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGNtZGxvZ19ob3N0X2NtZCB7CisJdTggY21kOworCXU4IGxlbjsKKwl1MTYgcmVzZXJ2ZWQ7CisJY2hhciBwYXJhbVsxMjRdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIHN0cnVjdCBpcHdfY21kX2xvZyB7CiAJdW5zaWduZWQgbG9uZyBqaWZmaWVzOwogCWludCByZXRjb2RlOwotCXN0cnVjdCBob3N0X2NtZCBjbWQ7CisJc3RydWN0IGNtZGxvZ19ob3N0X2NtZCBjbWQ7CiB9OwogCiAvKiBTeXNDb25maWcgY29tbWFuZCBwYXJhbWV0ZXJzIC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCmluZGV4IGQ2ZWQ1NzguLjE4NDBiNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKQEAgLTgyLDYgKzgyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgpAQCAtMTY0LDcgKzE2NSw3IEBACiAjZGVmaW5lIE1BWF9SSURfTEVOIDEwMjQKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpd19oYW5kbGVyX2RlZiBvcmlub2NvX2hhbmRsZXJfZGVmOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcmlub2NvX2V0aHRvb2xfb3BzOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBEYXRhIHRhYmxlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yODc1LDcgKzI4NzYsNyBAQAogCWlmIChvcmlub2NvX2xvY2socHJpdiwgJmZsYWdzKSAhPSAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKGVycS0+cG9pbnRlcikgeworCWlmIChlcnEtPmxlbmd0aCA+IDApIHsKIAkJaWYgKChpbmRleCA8IDApIHx8IChpbmRleCA+PSBPUklOT0NPX01BWF9LRVlTKSkKIAkJCWluZGV4ID0gcHJpdi0+dHhfa2V5OwogCkBAIC0yOTE4LDcgKzI5MTksNyBAQAogCWlmIChlcnEtPmZsYWdzICYgSVdfRU5DT0RFX1JFU1RSSUNURUQpCiAJCXJlc3RyaWN0ZWQgPSAxOwogCi0JaWYgKGVycS0+cG9pbnRlcikgeworCWlmIChlcnEtPnBvaW50ZXIgJiYgZXJxLT5sZW5ndGggPiAwKSB7CiAJCXByaXYtPmtleXNbaW5kZXhdLmxlbiA9IGNwdV90b19sZTE2KHhsZW4pOwogCQltZW1zZXQocHJpdi0+a2V5c1tpbmRleF0uZGF0YSwgMCwKIAkJICAgICAgIHNpemVvZihwcml2LT5rZXlzW2luZGV4XS5kYXRhKSk7CkBAIC00MjkyLDcgKzQyOTMsNyBAQAogCQkJICJQQ01DSUEgJXAiLCBwcml2LT5ody5pb2Jhc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG9yaW5vY29fZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gb3Jpbm9jb19nZXRfZHJ2aW5mbywKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uaAppbmRleCAxNmRiM2UxLi5mYjU3MDBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5oCkBAIC0xMzQsMTEgKzEzNCw3IEBACiAvKiBMb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24gZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIFRoZXNlIGZ1bmN0aW9ucyAqbXVzdCogYmUgaW5saW5lIG9yIHRoZXkgd2lsbCBicmVhayBob3JyaWJseSBvbgotICogU1BBUkMsIGR1ZSB0byBpdHMgd2VpcmQgc2VtYW50aWNzIGZvciBzYXZlL3Jlc3RvcmUgZmxhZ3MuIGV4dGVybgotICogaW5saW5lIHNob3VsZCBwcmV2ZW50IHRoZSBrZXJuZWwgZnJvbSBsaW5raW5nIG9yIG1vZHVsZSBmcm9tCi0gKiBsb2FkaW5nIGlmIHRoZXkgYXJlIG5vdCBpbmxpbmVkLiAqLwotZXh0ZXJuIGlubGluZSBpbnQgb3Jpbm9jb19sb2NrKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsCitzdGF0aWMgaW5saW5lIGludCBvcmlub2NvX2xvY2soc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nICpmbGFncykKIHsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgKmZsYWdzKTsKQEAgLTE1MSw3ICsxNDcsNyBAQAogCXJldHVybiAwOwogfQogCi1leHRlcm4gaW5saW5lIHZvaWQgb3Jpbm9jb191bmxvY2soc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKK3N0YXRpYyBpbmxpbmUgdm9pZCBvcmlub2NvX3VubG9jayhzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAogCQkJCSAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCiB7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgKmZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX25vcnRlbC5jCmluZGV4IGJmMDViOTAuLmVhZjNkMTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX25vcnRlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fbm9ydGVsLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogc3RhdGljIGludCBfX2luaXQgb3Jpbm9jb19ub3J0ZWxfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgdmVyc2lvbik7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmb3Jpbm9jb19ub3J0ZWxfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmb3Jpbm9jb19ub3J0ZWxfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fbm9ydGVsX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BjaS5jCmluZGV4IDE3NTljNTQuLjk3YThiNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wY2kuYwpAQCAtMjQ0LDcgKzI0NCw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvcmlub2NvX3BjaV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzXG4iLCB2ZXJzaW9uKTsKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZvcmlub2NvX3BjaV9kcml2ZXIpOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZvcmlub2NvX3BjaV9kcml2ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgb3Jpbm9jb19wY2lfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fcGx4LmMKaW5kZXggN2YwMDZmNi4uMzExNjJhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb19wbHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3BseC5jCkBAIC0zNTEsNyArMzUxLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IG9yaW5vY29fcGx4X2luaXQodm9pZCkKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHZlcnNpb24pOwotCXJldHVybiBwY2lfbW9kdWxlX2luaXQoJm9yaW5vY29fcGx4X2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm9yaW5vY29fcGx4X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvcmlub2NvX3BseF9leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3RtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jb190bWQuYwppbmRleCAwODMxNzIxLi43YzdiOTYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvX3RtZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY29fdG1kLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogc3RhdGljIGludCBfX2luaXQgb3Jpbm9jb190bWRfaW5pdCh2b2lkKQogewogCXByaW50ayhLRVJOX0RFQlVHICIlc1xuIiwgdmVyc2lvbik7Ci0JcmV0dXJuIHBjaV9tb2R1bGVfaW5pdCgmb3Jpbm9jb190bWRfZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmb3Jpbm9jb190bWRfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9yaW5vY29fdG1kX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCmluZGV4IDk4OTU5OWEuLmMwOWZiZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYwpAQCAtMzUsMTMgKzM1LDIxIEBACiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBOZXcgZHJpdmVyIEFQSSAqLwogCisjZGVmaW5lIEtFWV9TSVpFX1dFUDEwNCAxMwkvKiAxMDQvMTI4LWJpdCBXRVAga2V5cyAqLworI2RlZmluZSBLRVlfU0laRV9XRVA0MCAgNQkvKiA0MC82NC1iaXQgV0VQIGtleXMgKi8KKy8qIEtFWV9TSVpFX1RLSVAgc2hvdWxkIG1hdGNoIGlzbF9vaWQuaCwgc3RydWN0IG9ial9rZXkua2V5W10gc2l6ZSAqLworI2RlZmluZSBLRVlfU0laRV9US0lQICAgMzIJLyogVEtJUCBrZXlzICovCiAKLXN0YXRpYyB2b2lkIHByaXNtNTRfd3BhX2llX2FkZChpc2xwY2lfcHJpdmF0ZSAqcHJpdiwgdTggKmJzc2lkLAorc3RhdGljIHZvaWQgcHJpc201NF93cGFfYnNzX2llX2FkZChpc2xwY2lfcHJpdmF0ZSAqcHJpdiwgdTggKmJzc2lkLAogCQkJCXU4ICp3cGFfaWUsIHNpemVfdCB3cGFfaWVfbGVuKTsKLXN0YXRpYyBzaXplX3QgcHJpc201NF93cGFfaWVfZ2V0KGlzbHBjaV9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsIHU4ICp3cGFfaWUpOworc3RhdGljIHNpemVfdCBwcmlzbTU0X3dwYV9ic3NfaWVfZ2V0KGlzbHBjaV9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsIHU4ICp3cGFfaWUpOwogc3RhdGljIGludCBwcmlzbTU0X3NldF93cGEoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqLAogCQkJCV9fdTMyICosIGNoYXIgKik7CiAKKy8qIEluIDUwMCBrYnBzICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzY2FuX3JhdGVfbGlzdFtdID0geyAyLCA0LCAxMSwgMjIsCisJCQkJCQkxMiwgMTgsIDI0LCAzNiwKKwkJCQkJCTQ4LCA3MiwgOTYsIDEwOCB9OwogCiAvKioKICAqIHByaXNtNTRfbWliX21vZGVfaGVscGVyIC0gTUlCIGNoYW5nZSBtb2RlIGhlbHBlciBmdW5jdGlvbgpAQCAtNDY4LDYgKzQ3Niw5IEBACiAJcmFuZ2UtPmV2ZW50X2NhcGFbMV0gPSBJV19FVkVOVF9DQVBBX0tfMTsKIAlyYW5nZS0+ZXZlbnRfY2FwYVs0XSA9IElXX0VWRU5UX0NBUEFfTUFTSyhJV0VWQ1VTVE9NKTsKIAorCXJhbmdlLT5lbmNfY2FwYSA9IElXX0VOQ19DQVBBX1dQQSB8IElXX0VOQ19DQVBBX1dQQTIgfAorCQlJV19FTkNfQ0FQQV9DSVBIRVJfVEtJUDsKKwogCWlmIChpc2xwY2lfZ2V0X3N0YXRlKHByaXYpIDwgUFJWX1NUQVRFX0lOSVQpCiAJCXJldHVybiAwOwogCkBAIC01NjcsNiArNTc4LDggQEAKIAlzdHJ1Y3QgaXdfZXZlbnQgaXdlOwkvKiBUZW1wb3JhcnkgYnVmZmVyICovCiAJc2hvcnQgY2FwOwogCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKKwlzaXplX3Qgd3BhX2llX2xlbjsKIAogCS8qIFRoZSBmaXJzdCBlbnRyeSBtdXN0IGJlIHRoZSBNQUMgYWRkcmVzcyAqLwogCW1lbWNweShpd2UudS5hcF9hZGRyLnNhX2RhdGEsIGJzcy0+YWRkcmVzcywgNik7CkBAIC02MjcsMjggKzY0MCw0MCBAQAogCWN1cnJlbnRfZXYgPQogCSAgICBpd2Vfc3RyZWFtX2FkZF9ldmVudChjdXJyZW50X2V2LCBlbmRfYnVmLCAmaXdlLCBJV19FVl9RVUFMX0xFTik7CiAKLQlpZiAocHJpdi0+d3BhKSB7Ci0JCXU4IHdwYV9pZVtNQVhfV1BBX0lFX0xFTl07Ci0JCWNoYXIgKmJ1ZiwgKnA7Ci0JCXNpemVfdCB3cGFfaWVfbGVuOwotCQlpbnQgaTsKLQotCQl3cGFfaWVfbGVuID0gcHJpc201NF93cGFfaWVfZ2V0KHByaXYsIGJzcy0+YWRkcmVzcywgd3BhX2llKTsKLQkJaWYgKHdwYV9pZV9sZW4gPiAwICYmCi0JCSAgICAoYnVmID0ga21hbGxvYyh3cGFfaWVfbGVuICogMiArIDEwLCBHRlBfQVRPTUlDKSkpIHsKLQkJCXAgPSBidWY7Ci0JCQlwICs9IHNwcmludGYocCwgIndwYV9pZT0iKTsKLQkJCWZvciAoaSA9IDA7IGkgPCB3cGFfaWVfbGVuOyBpKyspIHsKLQkJCQlwICs9IHNwcmludGYocCwgIiUwMngiLCB3cGFfaWVbaV0pOwotCQkJfQotCQkJbWVtc2V0KCZpd2UsIDAsIHNpemVvZiAoaXdlKSk7Ci0JCQlpd2UuY21kID0gSVdFVkNVU1RPTTsKLQkJCWl3ZS51LmRhdGEubGVuZ3RoID0gc3RybGVuKGJ1Zik7Ci0JCQljdXJyZW50X2V2ID0gaXdlX3N0cmVhbV9hZGRfcG9pbnQoY3VycmVudF9ldiwgZW5kX2J1ZiwKLQkJCQkJCQkgICZpd2UsIGJ1Zik7Ci0JCQlrZnJlZShidWYpOwotCQl9CisJLyogQWRkIFdQQS9SU04gSW5mb3JtYXRpb24gRWxlbWVudCwgaWYgYW55ICovCisJd3BhX2llX2xlbiA9IHByaXNtNTRfd3BhX2Jzc19pZV9nZXQocHJpdiwgYnNzLT5hZGRyZXNzLCB3cGFfaWUpOworCWlmICh3cGFfaWVfbGVuID4gMCkgeworCQlpd2UuY21kID0gSVdFVkdFTklFOworCQlpd2UudS5kYXRhLmxlbmd0aCA9IG1pbih3cGFfaWVfbGVuLCAoc2l6ZV90KU1BWF9XUEFfSUVfTEVOKTsKKwkJY3VycmVudF9ldiA9IGl3ZV9zdHJlYW1fYWRkX3BvaW50KGN1cnJlbnRfZXYsIGVuZF9idWYsCisJCQkJJml3ZSwgd3BhX2llKTsKIAl9CisJLyogRG8gdGhlIGJpdHJhdGVzICovCisJeworCQljaGFyICoJY3VycmVudF92YWwgPSBjdXJyZW50X2V2ICsgSVdfRVZfTENQX0xFTjsKKwkJaW50IGk7CisJCWludCBtYXNrOworCisJCWl3ZS5jbWQgPSBTSU9DR0lXUkFURTsKKwkJLyogVGhvc2UgdHdvIGZsYWdzIGFyZSBpZ25vcmVkLi4uICovCisJCWl3ZS51LmJpdHJhdGUuZml4ZWQgPSBpd2UudS5iaXRyYXRlLmRpc2FibGVkID0gMDsKKworCQkvKiBQYXJzZSB0aGUgYml0bWFzayAqLworCQltYXNrID0gMHgxOworCQlmb3IoaSA9IDA7IGkgPCBzaXplb2Yoc2Nhbl9yYXRlX2xpc3QpOyBpKyspIHsKKwkJCWlmKGJzcy0+cmF0ZXMgJiBtYXNrKSB7CisJCQkJaXdlLnUuYml0cmF0ZS52YWx1ZSA9IChzY2FuX3JhdGVfbGlzdFtpXSAqIDUwMDAwMCk7CisJCQkJY3VycmVudF92YWwgPSBpd2Vfc3RyZWFtX2FkZF92YWx1ZShjdXJyZW50X2V2LCBjdXJyZW50X3ZhbCwKKwkJCQkJCQkJICAgZW5kX2J1ZiwgJml3ZSwKKwkJCQkJCQkJICAgSVdfRVZfUEFSQU1fTEVOKTsKKwkJCX0KKwkJCW1hc2sgPDw9IDE7CisJCX0KKwkJLyogQ2hlY2sgaWYgd2UgYWRkZWQgYW55IGV2ZW50ICovCisJCWlmICgoY3VycmVudF92YWwgLSBjdXJyZW50X2V2KSA+IElXX0VWX0xDUF9MRU4pCisJCQljdXJyZW50X2V2ID0gY3VycmVudF92YWw7CisJfQorCiAJcmV0dXJuIGN1cnJlbnRfZXY7CiB9CiAKQEAgLTEwNTEsMTIgKzEwNzYsMjQgQEAKIAkJY3VycmVudF9pbmRleCA9IHIudTsKIAkJLyogVmVyaWZ5IHRoYXQgdGhlIGtleSBpcyBub3QgbWFya2VkIGFzIGludmFsaWQgKi8KIAkJaWYgKCEoZHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfTk9LRVkpKSB7Ci0JCQlrZXkubGVuZ3RoID0gZHdycS0+bGVuZ3RoID4gc2l6ZW9mIChrZXkua2V5KSA/Ci0JCQkgICAgc2l6ZW9mIChrZXkua2V5KSA6IGR3cnEtPmxlbmd0aDsKLQkJCW1lbWNweShrZXkua2V5LCBleHRyYSwga2V5Lmxlbmd0aCk7Ci0JCQlpZiAoa2V5Lmxlbmd0aCA9PSAzMikKLQkJCQkvKiB3ZSB3YW50IFdQQS1QU0sgKi8KKwkJCWlmIChkd3JxLT5sZW5ndGggPiBLRVlfU0laRV9US0lQKSB7CisJCQkJLyogVXNlci1wcm92aWRlZCBrZXkgZGF0YSB0b28gYmlnICovCisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpZiAoZHdycS0+bGVuZ3RoID4gS0VZX1NJWkVfV0VQMTA0KSB7CisJCQkJLyogV1BBLVBTSyBUS0lQICovCiAJCQkJa2V5LnR5cGUgPSBET1QxMV9QUklWX1RLSVA7CisJCQkJa2V5Lmxlbmd0aCA9IEtFWV9TSVpFX1RLSVA7CisJCQl9IGVsc2UgaWYgKGR3cnEtPmxlbmd0aCA+IEtFWV9TSVpFX1dFUDQwKSB7CisJCQkJLyogV0VQIDEwNC8xMjggKi8KKwkJCQlrZXkubGVuZ3RoID0gS0VZX1NJWkVfV0VQMTA0OworCQkJfSBlbHNlIHsKKwkJCQkvKiBXRVAgNDAvNjQgKi8KKwkJCQlrZXkubGVuZ3RoID0gS0VZX1NJWkVfV0VQNDA7CisJCQl9CisJCQltZW1zZXQoa2V5LmtleSwgMCwgc2l6ZW9mIChrZXkua2V5KSk7CisJCQltZW1jcHkoa2V5LmtleSwgZXh0cmEsIGR3cnEtPmxlbmd0aCk7CisKIAkJCWlmICgoaW5kZXggPCAwKSB8fCAoaW5kZXggPiAzKSkKIAkJCQkvKiBubyBpbmRleCBwcm92aWRlZCB1c2UgdGhlIGN1cnJlbnQgb25lICovCiAJCQkJaW5kZXggPSBjdXJyZW50X2luZGV4OwpAQCAtMTIxMCw2ICsxMjQ3LDQ4OSBAQAogCX0KIH0KIAorc3RhdGljIGludCBwcmlzbTU0X3NldF9nZW5pZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCSAgICAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGl3X3BvaW50ICpkYXRhLCBjaGFyICpleHRyYSkKK3sKKwlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBhbGVuLCByZXQgPSAwOworCXN0cnVjdCBvYmpfYXR0YWNobWVudCAqYXR0YWNoOworCisJaWYgKGRhdGEtPmxlbmd0aCA+IE1BWF9XUEFfSUVfTEVOIHx8CisJICAgIChkYXRhLT5sZW5ndGggJiYgZXh0cmEgPT0gTlVMTCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KHByaXYtPndwYV9pZSwgZXh0cmEsIGRhdGEtPmxlbmd0aCk7CisJcHJpdi0+d3BhX2llX2xlbiA9IGRhdGEtPmxlbmd0aDsKKworCWFsZW4gPSBzaXplb2YoKmF0dGFjaCkgKyBwcml2LT53cGFfaWVfbGVuOworCWF0dGFjaCA9IGt6YWxsb2MoYWxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGF0dGFjaCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworI2RlZmluZSBXTEFOX0ZDX1RZUEVfTUdNVCAwCisjZGVmaW5lIFdMQU5fRkNfU1RZUEVfQVNTT0NfUkVRIDAKKyNkZWZpbmUgV0xBTl9GQ19TVFlQRV9SRUFTU09DX1JFUSAyCisKKwkvKiBOb3RlOiBlbmRpYW5uZXNzIGlzIGNvdmVyZWQgYnkgbWd0X3NldF92YXJsZW4gKi8KKwlhdHRhY2gtPnR5cGUgPSAoV0xBTl9GQ19UWVBFX01HTVQgPDwgMikgfAorICAgICAgICAgICAgICAgKFdMQU5fRkNfU1RZUEVfQVNTT0NfUkVRIDw8IDQpOworCWF0dGFjaC0+aWQgPSAtMTsKKwlhdHRhY2gtPnNpemUgPSBwcml2LT53cGFfaWVfbGVuOworCW1lbWNweShhdHRhY2gtPmRhdGEsIGV4dHJhLCBwcml2LT53cGFfaWVfbGVuKTsKKworCXJldCA9IG1ndF9zZXRfdmFybGVuKHByaXYsIERPVDExX09JRF9BVFRBQ0hNRU5ULCBhdHRhY2gsCisJCXByaXYtPndwYV9pZV9sZW4pOworCWlmIChyZXQgPT0gMCkgeworCQlhdHRhY2gtPnR5cGUgPSAoV0xBTl9GQ19UWVBFX01HTVQgPDwgMikgfAorCQkJKFdMQU5fRkNfU1RZUEVfUkVBU1NPQ19SRVEgPDwgNCk7CisKKwkJcmV0ID0gbWd0X3NldF92YXJsZW4ocHJpdiwgRE9UMTFfT0lEX0FUVEFDSE1FTlQsIGF0dGFjaCwKKwkJCXByaXYtPndwYV9pZV9sZW4pOworCQlpZiAocmV0ID09IDApCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFdQQSBJRSBBdHRhY2htZW50IHdhcyBzZXRcbiIsCisJCQkJbmRldi0+bmFtZSk7CisJfQorCisJa2ZyZWUoYXR0YWNoKTsKKwlyZXR1cm4gcmV0OworfQorCisKK3N0YXRpYyBpbnQgcHJpc201NF9nZXRfZ2VuaWUoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkgICAgIHN0cnVjdCBpd19wb2ludCAqZGF0YSwgY2hhciAqZXh0cmEpCit7CisJaXNscGNpX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKwlpbnQgbGVuID0gcHJpdi0+d3BhX2llX2xlbjsKKworCWlmIChsZW4gPD0gMCkgeworCQlkYXRhLT5sZW5ndGggPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZGF0YS0+bGVuZ3RoIDwgbGVuKQorCQlyZXR1cm4gLUUyQklHOworCisJZGF0YS0+bGVuZ3RoID0gbGVuOworCW1lbWNweShleHRyYSwgcHJpdi0+d3BhX2llLCBsZW4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJpc201NF9zZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwl1MzIgbWxtZWxldmVsID0gMCwgYXV0aGVuID0gMCwgZG90MXggPSAwOworCXUzMiBleHVuZW5jcnlwdCA9IDAsIHByaXZpbnZva2VkID0gMCwgd3BhID0gMDsKKwl1MzIgb2xkX3dwYTsKKwlpbnQgcmV0ID0gMDsKKwl1bmlvbiBvaWRfcmVzX3QgcjsKKworCWlmIChpc2xwY2lfZ2V0X3N0YXRlKHByaXYpIDwgUFJWX1NUQVRFX0lOSVQpCisJCXJldHVybiAwOworCisJLyogZmlyc3QgZ2V0IHRoZSBmbGFncyAqLworCWRvd25fd3JpdGUoJnByaXYtPm1pYl9zZW0pOworCXdwYSA9IG9sZF93cGEgPSBwcml2LT53cGE7CisJdXBfd3JpdGUoJnByaXYtPm1pYl9zZW0pOworCXJldCA9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfQVVUSEVOQUJMRSwgMCwgTlVMTCwgJnIpOworCWF1dGhlbiA9IHIudTsKKwlyZXQgPSBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX1BSSVZBQ1lJTlZPS0VELCAwLCBOVUxMLCAmcik7CisJcHJpdmludm9rZWQgPSByLnU7CisJcmV0ID0gbWd0X2dldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9FWFVORU5DUllQVEVELCAwLCBOVUxMLCAmcik7CisJZXh1bmVuY3J5cHQgPSByLnU7CisJcmV0ID0gbWd0X2dldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9ET1QxWEVOQUJMRSwgMCwgTlVMTCwgJnIpOworCWRvdDF4ID0gci51OworCXJldCA9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfTUxNRUFVVE9MRVZFTCwgMCwgTlVMTCwgJnIpOworCW1sbWVsZXZlbCA9IHIudTsKKworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAocGFyYW0tPmZsYWdzICYgSVdfQVVUSF9JTkRFWCkgeworCWNhc2UgSVdfQVVUSF9DSVBIRVJfUEFJUldJU0U6CisJY2FzZSBJV19BVVRIX0NJUEhFUl9HUk9VUDoKKwljYXNlIElXX0FVVEhfS0VZX01HTVQ6CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQkvKiBEbyB0aGUgc2FtZSB0aGluZyBhcyBJV19BVVRIX1dQQV9WRVJTSU9OICovCisJCWlmIChwYXJhbS0+dmFsdWUpIHsKKwkJCXdwYSA9IDE7CisJCQlwcml2aW52b2tlZCA9IDE7IC8qIEZvciBwcml2YWN5IGludm9rZWQgKi8KKwkJCWV4dW5lbmNyeXB0ID0gMTsgLyogRmlsdGVyIG91dCBhbGwgdW5lbmNyeXB0ZWQgZnJhbWVzICovCisJCQlkb3QxeCA9IDB4MDE7IC8qIFRvIGVuYWJsZSBlYXAgZmlsdGVyICovCisJCQltbG1lbGV2ZWwgPSBET1QxMV9NTE1FX0VYVEVOREVEOworCQkJYXV0aGVuID0gRE9UMTFfQVVUSF9PUzsgLyogT25seSBXRVAgdXNlcyBfU0sgYW5kIF9CT1RIICovCisJCX0gZWxzZSB7CisJCQl3cGEgPSAwOworCQkJcHJpdmludm9rZWQgPSAwOworCQkJZXh1bmVuY3J5cHQgPSAwOyAvKiBEbyBub3QgZmlsdGVyIHVuLWVuY3J5cHRlZCBkYXRhICovCisJCQlkb3QxeCA9IDA7CisJCQltbG1lbGV2ZWwgPSBET1QxMV9NTE1FX0FVVE87CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfV1BBX1ZFUlNJT046CisJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEKSB7CisJCQl3cGEgPSAwOworCQkJcHJpdmludm9rZWQgPSAwOworCQkJZXh1bmVuY3J5cHQgPSAwOyAvKiBEbyBub3QgZmlsdGVyIHVuLWVuY3J5cHRlZCBkYXRhICovCisJCQlkb3QxeCA9IDA7CisJCQltbG1lbGV2ZWwgPSBET1QxMV9NTE1FX0FVVE87CisJCX0gZWxzZSB7CisJCQlpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEpCisJCQkJd3BhID0gMTsKKwkJCWVsc2UgaWYgKHBhcmFtLT52YWx1ZSAmIElXX0FVVEhfV1BBX1ZFUlNJT05fV1BBMikKKwkJCQl3cGEgPSAyOworCQkJcHJpdmludm9rZWQgPSAxOyAvKiBGb3IgcHJpdmFjeSBpbnZva2VkICovCisJCQlleHVuZW5jcnlwdCA9IDE7IC8qIEZpbHRlciBvdXQgYWxsIHVuZW5jcnlwdGVkIGZyYW1lcyAqLworCQkJZG90MXggPSAweDAxOyAvKiBUbyBlbmFibGUgZWFwIGZpbHRlciAqLworCQkJbWxtZWxldmVsID0gRE9UMTFfTUxNRV9FWFRFTkRFRDsKKwkJCWF1dGhlbiA9IERPVDExX0FVVEhfT1M7IC8qIE9ubHkgV0VQIHVzZXMgX1NLIGFuZCBfQk9USCAqLworCQl9CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgorCQlkb3QxeCA9IHBhcmFtLT52YWx1ZSA/IDEgOiAwOworCQlicmVhazsKKworCWNhc2UgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQ6CisJCXByaXZpbnZva2VkID0gcGFyYW0tPnZhbHVlID8gMSA6IDA7CisKKwljYXNlIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRDoKKwkJZXh1bmVuY3J5cHQgPSBwYXJhbS0+dmFsdWUgPyAxIDogMDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfODAyMTFfQVVUSF9BTEc6CisJCWlmIChwYXJhbS0+dmFsdWUgJiBJV19BVVRIX0FMR19TSEFSRURfS0VZKSB7CisJCQkvKiBPbmx5IFdFUCB1c2VzIF9TSyBhbmQgX0JPVEggKi8KKwkJCWlmICh3cGEgPiAwKSB7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWF1dGhlbiA9IERPVDExX0FVVEhfU0s7CisJCX0gZWxzZSBpZiAocGFyYW0tPnZhbHVlICYgSVdfQVVUSF9BTEdfT1BFTl9TWVNURU0pIHsKKwkJCWF1dGhlbiA9IERPVDExX0FVVEhfT1M7CisJCX0gZWxzZSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJLyogU2V0IGFsbCB0aGUgdmFsdWVzICovCisJZG93bl93cml0ZSgmcHJpdi0+bWliX3NlbSk7CisJcHJpdi0+d3BhID0gd3BhOworCXVwX3dyaXRlKCZwcml2LT5taWJfc2VtKTsKKwltZ3Rfc2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0FVVEhFTkFCTEUsIDAsICZhdXRoZW4pOworCW1ndF9zZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfUFJJVkFDWUlOVk9LRUQsIDAsICZwcml2aW52b2tlZCk7CisJbWd0X3NldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9FWFVORU5DUllQVEVELCAwLCAmZXh1bmVuY3J5cHQpOworCW1ndF9zZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfRE9UMVhFTkFCTEUsIDAsICZkb3QxeCk7CisJbWd0X3NldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9NTE1FQVVUT0xFVkVMLCAwLCAmbWxtZWxldmVsKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJpc201NF9nZXRfYXV0aChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKKwkJCSAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJICAgIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGl3X3BhcmFtICpwYXJhbSA9ICZ3cnF1LT5wYXJhbTsKKwl1MzIgd3BhID0gMDsKKwlpbnQgcmV0ID0gMDsKKwl1bmlvbiBvaWRfcmVzX3QgcjsKKworCWlmIChpc2xwY2lfZ2V0X3N0YXRlKHByaXYpIDwgUFJWX1NUQVRFX0lOSVQpCisJCXJldHVybiAwOworCisJLyogZmlyc3QgZ2V0IHRoZSBmbGFncyAqLworCWRvd25fd3JpdGUoJnByaXYtPm1pYl9zZW0pOworCXdwYSA9IHByaXYtPndwYTsKKwl1cF93cml0ZSgmcHJpdi0+bWliX3NlbSk7CisKKwlzd2l0Y2ggKHBhcmFtLT5mbGFncyAmIElXX0FVVEhfSU5ERVgpIHsKKwljYXNlIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFOgorCWNhc2UgSVdfQVVUSF9DSVBIRVJfR1JPVVA6CisJY2FzZSBJV19BVVRIX0tFWV9NR01UOgorCQkvKgorCQkgKiB3cGFfc3VwcGxpY2FudCB3aWxsIGNvbnRyb2wgdGhlc2UgaW50ZXJuYWxseQorCQkgKi8KKwkJcmV0ID0gLUVPUE5PVFNVUFA7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9WRVJTSU9OOgorCQlzd2l0Y2ggKHdwYSkgeworCQljYXNlIDE6CisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlwYXJhbS0+dmFsdWUgPSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTI7CisJCQlicmVhazsKKwkJY2FzZSAwOgorCQlkZWZhdWx0OgorCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9XUEFfVkVSU0lPTl9ESVNBQkxFRDsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX0RST1BfVU5FTkNSWVBURUQ6CisJCXJldCA9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfRVhVTkVOQ1JZUFRFRCwgMCwgTlVMTCwgJnIpOworCQlpZiAocmV0ID49IDApCisJCQlwYXJhbS0+dmFsdWUgPSByLnUgPiAwID8gMSA6IDA7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIXzgwMjExX0FVVEhfQUxHOgorCQlyZXQgPSBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0FVVEhFTkFCTEUsIDAsIE5VTEwsICZyKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlzd2l0Y2ggKHIudSkgeworCQkJY2FzZSBET1QxMV9BVVRIX09TOgorCQkJCXBhcmFtLT52YWx1ZSA9IElXX0FVVEhfQUxHX09QRU5fU1lTVEVNOworCQkJCWJyZWFrOworCQkJY2FzZSBET1QxMV9BVVRIX0JPVEg6CisJCQljYXNlIERPVDExX0FVVEhfU0s6CisJCQkJcGFyYW0tPnZhbHVlID0gSVdfQVVUSF9BTEdfU0hBUkVEX0tFWTsKKwkJCWNhc2UgRE9UMTFfQVVUSF9OT05FOgorCQkJZGVmYXVsdDoKKwkJCQlwYXJhbS0+dmFsdWUgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1dQQV9FTkFCTEVEOgorCQlwYXJhbS0+dmFsdWUgPSB3cGEgPiAwID8gMSA6IDA7CisJCWJyZWFrOworCisJY2FzZSBJV19BVVRIX1JYX1VORU5DUllQVEVEX0VBUE9MOgorCQlyZXQgPSBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0RPVDFYRU5BQkxFLCAwLCBOVUxMLCAmcik7CisJCWlmIChyZXQgPj0gMCkKKwkJCXBhcmFtLT52YWx1ZSA9IHIudSA+IDAgPyAxIDogMDsKKwkJYnJlYWs7CisKKwljYXNlIElXX0FVVEhfUFJJVkFDWV9JTlZPS0VEOgorCQlyZXQgPSBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX1BSSVZBQ1lJTlZPS0VELCAwLCBOVUxMLCAmcik7CisJCWlmIChyZXQgPj0gMCkKKwkJCXBhcmFtLT52YWx1ZSA9IHIudSA+IDAgPyAxIDogMDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJpc201NF9zZXRfZW5jb2RlZXh0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAorCQkJCSBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkJCSB1bmlvbiBpd3JlcV9kYXRhICp3cnF1LAorCQkJCSBjaGFyICpleHRyYSkKK3sKKwlpc2xwY2lfcHJpdmF0ZSAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOworCXN0cnVjdCBpd19wb2ludCAqZW5jb2RpbmcgPSAmd3JxdS0+ZW5jb2Rpbmc7CisJc3RydWN0IGl3X2VuY29kZV9leHQgKmV4dCA9IChzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqKWV4dHJhOworCWludCBpZHgsIGFsZyA9IGV4dC0+YWxnLCBzZXRfa2V5ID0gMTsKKwl1bmlvbiBvaWRfcmVzX3QgcjsKKwlpbnQgYXV0aGVuID0gRE9UMTFfQVVUSF9PUywgaW52b2tlID0gMCwgZXh1bmVuY3J5cHQgPSAwOworCWludCByZXQgPSAwOworCisJaWYgKGlzbHBjaV9nZXRfc3RhdGUocHJpdikgPCBQUlZfU1RBVEVfSU5JVCkKKwkJcmV0dXJuIDA7CisKKwkvKiBEZXRlcm1pbmUgYW5kIHZhbGlkYXRlIHRoZSBrZXkgaW5kZXggKi8KKwlpZHggPSAoZW5jb2RpbmctPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CisJaWYgKGlkeCkgeworCQlpZiAoaWR4IDwgMCB8fCBpZHggPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJcmV0ID0gbWd0X2dldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9ERUZLRVlJRCwgMCwgTlVMTCwgJnIpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCQlpZHggPSByLnU7CisJfQorCisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9ESVNBQkxFRCkKKwkJYWxnID0gSVdfRU5DT0RFX0FMR19OT05FOworCisJaWYgKGV4dC0+ZXh0X2ZsYWdzICYgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZKSB7CisJCS8qIE9ubHkgc2V0IHRyYW5zbWl0IGtleSBpbmRleCBoZXJlLCBhY3R1YWwKKwkJICoga2V5IGlzIHNldCBiZWxvdyBpZiBuZWVkZWQuCisJCSAqLworCQlyZXQgPSBtZ3Rfc2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0RFRktFWUlELCAwLCAmaWR4KTsKKwkJc2V0X2tleSA9IGV4dC0+a2V5X2xlbiA+IDAgPyAxIDogMDsKKwl9CisKKwlpZiAoc2V0X2tleSkgeworCQlzdHJ1Y3Qgb2JqX2tleSBrZXkgPSB7IERPVDExX1BSSVZfV0VQLCAwLCAiIiB9OworCQlzd2l0Y2ggKGFsZykgeworCQljYXNlIElXX0VOQ09ERV9BTEdfTk9ORToKKwkJCWJyZWFrOworCQljYXNlIElXX0VOQ09ERV9BTEdfV0VQOgorCQkJaWYgKGV4dC0+a2V5X2xlbiA+IEtFWV9TSVpFX1dFUDEwNCkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlpZiAoZXh0LT5rZXlfbGVuID4gS0VZX1NJWkVfV0VQNDApCisJCQkJa2V5Lmxlbmd0aCA9IEtFWV9TSVpFX1dFUDEwNDsKKwkJCWVsc2UKKwkJCQlrZXkubGVuZ3RoID0gS0VZX1NJWkVfV0VQNDA7CisJCQlicmVhazsKKwkJY2FzZSBJV19FTkNPREVfQUxHX1RLSVA6CisJCQlpZiAoZXh0LT5rZXlfbGVuID4gS0VZX1NJWkVfVEtJUCkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlrZXkudHlwZSA9IERPVDExX1BSSVZfVEtJUDsKKwkJCWtleS5sZW5ndGggPSBLRVlfU0laRV9US0lQOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoa2V5Lmxlbmd0aCkgeworCQkJbWVtc2V0KGtleS5rZXksIDAsIHNpemVvZihrZXkua2V5KSk7CisJCQltZW1jcHkoa2V5LmtleSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CisJCQlyZXQgPSBtZ3Rfc2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0RFRktFWVgsIGlkeCwKKwkJCQkJICAgICZrZXkpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBSZWFkIHRoZSBmbGFncyAqLworCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfRElTQUJMRUQpIHsKKwkJLyogRW5jb2RpbmcgZGlzYWJsZWQsCisJCSAqIGF1dGhlbiA9IERPVDExX0FVVEhfT1M7CisJCSAqIGludm9rZSA9IDA7CisJCSAqIGV4dW5lbmNyeXB0ID0gMDsgKi8KKwl9CisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9PUEVOKSB7CisJCS8qIEVuY29kZSBidXQgYWNjZXB0IG5vbi1lbmNvZGVkIHBhY2tldHMuIE5vIGF1dGggKi8KKwkJaW52b2tlID0gMTsKKwl9CisJaWYgKGVuY29kaW5nLT5mbGFncyAmIElXX0VOQ09ERV9SRVNUUklDVEVEKSB7CisJCS8qIFJlZnVzZSBub24tZW5jb2RlZCBwYWNrZXRzLiBBdXRoICovCisJCWF1dGhlbiA9IERPVDExX0FVVEhfQk9USDsKKwkJaW52b2tlID0gMTsKKwkJZXh1bmVuY3J5cHQgPSAxOworCX0KKworCS8qIGRvIHRoZSBjaGFuZ2UgaWYgcmVxdWVzdGVkICAqLworCWlmIChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkgeworCQlyZXQgPSBtZ3Rfc2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0FVVEhFTkFCTEUsIDAsCisJCQkJICAgICAgJmF1dGhlbik7CisJCXJldCA9IG1ndF9zZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfUFJJVkFDWUlOVk9LRUQsIDAsCisJCQkJICAgICAgJmludm9rZSk7CisJCXJldCA9IG1ndF9zZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfRVhVTkVOQ1JZUFRFRCwgMCwKKwkJCQkgICAgICAmZXh1bmVuY3J5cHQpOworCX0KKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBwcmlzbTU0X2dldF9lbmNvZGVleHQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCisJCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCQkJIHVuaW9uIGl3cmVxX2RhdGEgKndycXUsCisJCQkJIGNoYXIgKmV4dHJhKQoreworCWlzbHBjaV9wcml2YXRlICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IGl3X3BvaW50ICplbmNvZGluZyA9ICZ3cnF1LT5lbmNvZGluZzsKKwlzdHJ1Y3QgaXdfZW5jb2RlX2V4dCAqZXh0ID0gKHN0cnVjdCBpd19lbmNvZGVfZXh0ICopZXh0cmE7CisJaW50IGlkeCwgbWF4X2tleV9sZW47CisJdW5pb24gb2lkX3Jlc190IHI7CisJaW50IGF1dGhlbiA9IERPVDExX0FVVEhfT1MsIGludm9rZSA9IDAsIGV4dW5lbmNyeXB0ID0gMCwgd3BhID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChpc2xwY2lfZ2V0X3N0YXRlKHByaXYpIDwgUFJWX1NUQVRFX0lOSVQpCisJCXJldHVybiAwOworCisJLyogZmlyc3QgZ2V0IHRoZSBmbGFncyAqLworCXJldCA9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfQVVUSEVOQUJMRSwgMCwgTlVMTCwgJnIpOworCWF1dGhlbiA9IHIudTsKKwlyZXQgPSBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX1BSSVZBQ1lJTlZPS0VELCAwLCBOVUxMLCAmcik7CisJaW52b2tlID0gci51OworCXJldCA9IG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfRVhVTkVOQ1JZUFRFRCwgMCwgTlVMTCwgJnIpOworCWV4dW5lbmNyeXB0ID0gci51OworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCW1heF9rZXlfbGVuID0gZW5jb2RpbmctPmxlbmd0aCAtIHNpemVvZigqZXh0KTsKKwlpZiAobWF4X2tleV9sZW4gPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlkeCA9IChlbmNvZGluZy0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpIC0gMTsKKwlpZiAoaWR4KSB7CisJCWlmIChpZHggPCAwIHx8IGlkeCA+IDMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQlyZXQgPSBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX0RFRktFWUlELCAwLCBOVUxMLCAmcik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWlkeCA9IHIudTsKKwl9CisKKwllbmNvZGluZy0+ZmxhZ3MgPSBpZHggKyAxOworCW1lbXNldChleHQsIDAsIHNpemVvZigqZXh0KSk7CisKKwlzd2l0Y2ggKGF1dGhlbikgeworCWNhc2UgRE9UMTFfQVVUSF9CT1RIOgorCWNhc2UgRE9UMTFfQVVUSF9TSzoKKwkJd3JxdS0+ZW5jb2RpbmcuZmxhZ3MgfD0gSVdfRU5DT0RFX1JFU1RSSUNURUQ7CisJY2FzZSBET1QxMV9BVVRIX09TOgorCWRlZmF1bHQ6CisJCXdycXUtPmVuY29kaW5nLmZsYWdzIHw9IElXX0VOQ09ERV9PUEVOOworCQlicmVhazsKKwl9CisKKwlkb3duX3dyaXRlKCZwcml2LT5taWJfc2VtKTsKKwl3cGEgPSBwcml2LT53cGE7CisJdXBfd3JpdGUoJnByaXYtPm1pYl9zZW0pOworCisJaWYgKGF1dGhlbiA9PSBET1QxMV9BVVRIX09TICYmICFleHVuZW5jcnlwdCAmJiAhaW52b2tlICYmICF3cGEpIHsKKwkJLyogTm8gZW5jcnlwdGlvbiAqLworCQlleHQtPmFsZyA9IElXX0VOQ09ERV9BTEdfTk9ORTsKKwkJZXh0LT5rZXlfbGVuID0gMDsKKwkJd3JxdS0+ZW5jb2RpbmcuZmxhZ3MgfD0gSVdfRU5DT0RFX0RJU0FCTEVEOworCX0gZWxzZSB7CisJCXN0cnVjdCBvYmpfa2V5ICprZXk7CisKKwkJcmV0ID0gbWd0X2dldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9ERUZLRVlYLCBpZHgsIE5VTEwsICZyKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dDsKKwkJa2V5ID0gci5wdHI7CisJCWlmIChtYXhfa2V5X2xlbiA8IGtleS0+bGVuZ3RoKSB7CisJCQlyZXQgPSAtRTJCSUc7CisJCQlnb3RvIG91dDsKKwkJfQorCQltZW1jcHkoZXh0LT5rZXksIGtleS0+a2V5LCBrZXktPmxlbmd0aCk7CisJCWV4dC0+a2V5X2xlbiA9IGtleS0+bGVuZ3RoOworCisJCXN3aXRjaCAoa2V5LT50eXBlKSB7CisJCWNhc2UgRE9UMTFfUFJJVl9US0lQOgorCQkJZXh0LT5hbGcgPSBJV19FTkNPREVfQUxHX1RLSVA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBET1QxMV9QUklWX1dFUDoKKwkJCWV4dC0+YWxnID0gSVdfRU5DT0RFX0FMR19XRVA7CisJCQlicmVhazsKKwkJfQorCQl3cnF1LT5lbmNvZGluZy5mbGFncyB8PSBJV19FTkNPREVfRU5BQkxFRDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisKIHN0YXRpYyBpbnQKIHByaXNtNTRfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJICAgICAgX191MzIgKiB1d3JxLCBjaGFyICpleHRyYSkKQEAgLTE1OTEsOCArMjExMSw4IEBACiAjZGVmaW5lIE1BQ1NUUiAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCiAKIHN0YXRpYyB2b2lkCi1wcmlzbTU0X3dwYV9pZV9hZGQoaXNscGNpX3ByaXZhdGUgKnByaXYsIHU4ICpic3NpZCwKLQkJICAgdTggKndwYV9pZSwgc2l6ZV90IHdwYV9pZV9sZW4pCitwcmlzbTU0X3dwYV9ic3NfaWVfYWRkKGlzbHBjaV9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsCisJCSAgICAgICB1OCAqd3BhX2llLCBzaXplX3Qgd3BhX2llX2xlbikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CiAJc3RydWN0IGlzbHBjaV9ic3Nfd3BhX2llICpic3MgPSBOVUxMOwpAQCAtMTY1OCw3ICsyMTc4LDcgQEAKIH0KIAogc3RhdGljIHNpemVfdAotcHJpc201NF93cGFfaWVfZ2V0KGlzbHBjaV9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsIHU4ICp3cGFfaWUpCitwcmlzbTU0X3dwYV9ic3NfaWVfZ2V0KGlzbHBjaV9wcml2YXRlICpwcml2LCB1OCAqYnNzaWQsIHU4ICp3cGFfaWUpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcHRyOwogCXN0cnVjdCBpc2xwY2lfYnNzX3dwYV9pZSAqYnNzID0gTlVMTDsKQEAgLTE2ODMsMTQgKzIyMDMsMTQgQEAKIH0KIAogdm9pZAotcHJpc201NF93cGFfaWVfaW5pdChpc2xwY2lfcHJpdmF0ZSAqcHJpdikKK3ByaXNtNTRfd3BhX2Jzc19pZV9pbml0KGlzbHBjaV9wcml2YXRlICpwcml2KQogewogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5ic3Nfd3BhX2xpc3QpOwogCXNlbWFfaW5pdCgmcHJpdi0+d3BhX3NlbSwgMSk7CiB9CiAKIHZvaWQKLXByaXNtNTRfd3BhX2llX2NsZWFuKGlzbHBjaV9wcml2YXRlICpwcml2KQorcHJpc201NF93cGFfYnNzX2llX2NsZWFuKGlzbHBjaV9wcml2YXRlICpwcml2KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm47CiAKQEAgLTE3MjIsNyArMjI0Miw3IEBACiAJCX0KIAkJaWYgKHBvc1swXSA9PSBXTEFOX0VJRF9HRU5FUklDICYmIHBvc1sxXSA+PSA0ICYmCiAJCSAgICBtZW1jbXAocG9zICsgMiwgd3BhX29pZCwgNCkgPT0gMCkgewotCQkJcHJpc201NF93cGFfaWVfYWRkKHByaXYsIGFkZHIsIHBvcywgcG9zWzFdICsgMik7CisJCQlwcmlzbTU0X3dwYV9ic3NfaWVfYWRkKHByaXYsIGFkZHIsIHBvcywgcG9zWzFdICsgMik7CiAJCQlyZXR1cm47CiAJCX0KIAkJcG9zICs9IDIgKyBwb3NbMV07CkBAIC0xODc5LDcgKzIzOTksNyBAQAogCQlzZW5kX2Zvcm1hdHRlZF9ldmVudChwcml2LCAiQXNzb2NpYXRlIHJlcXVlc3QgKGV4KSIsIG1sbWUsIDEpOwogCiAJCWlmIChwcml2LT5pd19tb2RlICE9IElXX01PREVfTUFTVEVSIAotCQkJCSYmIG1sbWVleC0+c3RhdGUgIT0gRE9UMTFfU1RBVEVfQVVUSElORykKKwkJCQkmJiBtbG1lZXgtPnN0YXRlICE9IERPVDExX1NUQVRFX0FTU09DSU5HKQogCQkJYnJlYWs7CiAJCQogCQljb25maXJtID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG9ial9tbG1lZXgpLCBHRlBfQVRPTUlDKTsKQEAgLTE4OTMsNyArMjQxMyw3IEBACiAJCWNvbmZpcm0tPnN0YXRlID0gMDsgLyogbm90IHVzZWQgKi8KIAkJY29uZmlybS0+Y29kZSA9IDA7CiAKLQkJd3BhX2llX2xlbiA9IHByaXNtNTRfd3BhX2llX2dldChwcml2LCBtbG1lZXgtPmFkZHJlc3MsIHdwYV9pZSk7CisJCXdwYV9pZV9sZW4gPSBwcmlzbTU0X3dwYV9ic3NfaWVfZ2V0KHByaXYsIG1sbWVleC0+YWRkcmVzcywgd3BhX2llKTsKIAogCQlpZiAoIXdwYV9pZV9sZW4pIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJObyBXUEEgSUUgZm91bmQgZnJvbSAiCkBAIC0xOTM3LDcgKzI0NTcsNyBAQAogCQljb25maXJtLT5zdGF0ZSA9IDA7IC8qIG5vdCB1c2VkICovCiAJCWNvbmZpcm0tPmNvZGUgPSAwOwogCi0JCXdwYV9pZV9sZW4gPSBwcmlzbTU0X3dwYV9pZV9nZXQocHJpdiwgbWxtZWV4LT5hZGRyZXNzLCB3cGFfaWUpOworCQl3cGFfaWVfbGVuID0gcHJpc201NF93cGFfYnNzX2llX2dldChwcml2LCBtbG1lZXgtPmFkZHJlc3MsIHdwYV9pZSk7CiAKIAkJaWYgKCF3cGFfaWVfbGVuKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiTm8gV1BBIElFIGZvdW5kIGZyb20gIgpAQCAtMjU1Myw2ICszMDczLDE1IEBACiAJKGl3X2hhbmRsZXIpIHByaXNtNTRfZ2V0X2VuY29kZSwJLyogU0lPQ0dJV0VOQ09ERSAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkvKiBTSU9DU0lXUE9XRVIgKi8KIAkoaXdfaGFuZGxlcikgTlVMTCwJLyogU0lPQ0dJV1BPV0VSICovCisJTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJTlVMTCwJCQkvKiAtLSBob2xlIC0tICovCisJKGl3X2hhbmRsZXIpIHByaXNtNTRfc2V0X2dlbmllLAkvKiBTSU9DU0lXR0VOSUUgKi8KKwkoaXdfaGFuZGxlcikgcHJpc201NF9nZXRfZ2VuaWUsCS8qIFNJT0NHSVdHRU5JRSAqLworCShpd19oYW5kbGVyKSBwcmlzbTU0X3NldF9hdXRoLAkvKiBTSU9DU0lXQVVUSCAqLworCShpd19oYW5kbGVyKSBwcmlzbTU0X2dldF9hdXRoLAkvKiBTSU9DR0lXQVVUSCAqLworCShpd19oYW5kbGVyKSBwcmlzbTU0X3NldF9lbmNvZGVleHQsIC8qIFNJT0NTSVdFTkNPREVFWFQgKi8KKwkoaXdfaGFuZGxlcikgcHJpc201NF9nZXRfZW5jb2RlZXh0LCAvKiBTSU9DR0lXRU5DT0RFRVhUICovCisJTlVMTCwJCQkvKiBTSU9DU0lXUE1LU0EgKi8KIH07CiAKIC8qIFRoZSBsb3cgb3JkZXIgYml0IGlkZW50aWZ5IGEgU0VUICgwKSBvciBhIEdFVCAoMSkgaW9jdGwuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmgKaW5kZXggNDZkNWNkZS4uNjVmMzNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5oCkBAIC0yNyw3ICsyNyw3IEBACiAKICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkvKiBOZXcgZHJpdmVyIEFQSSAqLwogCi0jZGVmaW5lIFNVUFBPUlRFRF9XSVJFTEVTU19FWFQgICAgICAgICAgICAgICAgICAxNgorI2RlZmluZSBTVVBQT1JURURfV0lSRUxFU1NfRVhUICAgICAgICAgICAgICAgICAgMTkKIAogdm9pZCBwcmlzbTU0X21pYl9pbml0KGlzbHBjaV9wcml2YXRlICopOwogCkBAIC0zOSw4ICszOSw4IEBACiAKIHZvaWQgcHJpc201NF9wcm9jZXNzX3RyYXAodm9pZCAqKTsKIAotdm9pZCBwcmlzbTU0X3dwYV9pZV9pbml0KGlzbHBjaV9wcml2YXRlICpwcml2KTsKLXZvaWQgcHJpc201NF93cGFfaWVfY2xlYW4oaXNscGNpX3ByaXZhdGUgKnByaXYpOwordm9pZCBwcmlzbTU0X3dwYV9ic3NfaWVfaW5pdChpc2xwY2lfcHJpdmF0ZSAqcHJpdik7Cit2b2lkIHByaXNtNTRfd3BhX2Jzc19pZV9jbGVhbihpc2xwY2lfcHJpdmF0ZSAqcHJpdik7CiAKIGludCBwcmlzbTU0X3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9kZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCmluZGV4IDVkZGYyOTUuLmFiM2M1YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5jCkBAIC03MTUsNyArNzE1LDcgQEAKIAl9CiAKIAlwcmlzbTU0X2FjbF9pbml0KCZwcml2LT5hY2wpOwotCXByaXNtNTRfd3BhX2llX2luaXQocHJpdik7CisJcHJpc201NF93cGFfYnNzX2llX2luaXQocHJpdik7CiAJaWYgKG1ndF9pbml0KHByaXYpKSAKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtNzc0LDcgKzc3NCw3IEBACiAKIAkvKiBGcmVlIHRoZSBhY2NlcyBjb250cm9sIGxpc3QgYW5kIHRoZSBXUEEgbGlzdCAqLwogCXByaXNtNTRfYWNsX2NsZWFuKCZwcml2LT5hY2wpOwotCXByaXNtNTRfd3BhX2llX2NsZWFuKHByaXYpOworCXByaXNtNTRfd3BhX2Jzc19pZV9jbGVhbihwcml2KTsKIAltZ3RfY2xlYW4ocHJpdik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2Rldi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKaW5kZXggMDcwNTMxNi4uNTA0OWYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfZGV2LmgKQEAgLTE3OSw2ICsxNzksOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgYnNzX3dwYV9saXN0OwogCWludCBudW1fYnNzX3dwYTsKIAlzdHJ1Y3Qgc2VtYXBob3JlIHdwYV9zZW07CisJdTggd3BhX2llW01BWF9XUEFfSUVfTEVOXTsKKwlzaXplX3Qgd3BhX2llX2xlbjsKIAogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOwogCWludCByZXNldF90YXNrX3BlbmRpbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKaW5kZXggMDlmYzE3YS4uZjY5MmRjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwpAQCAtMzEzLDcgKzMxMyw3IEBACiAKIAlfX2J1Z19vbl93cm9uZ19zdHJ1Y3Rfc2l6ZXMgKCk7CiAKLQlyZXR1cm4gcGNpX21vZHVsZV9pbml0KCZwcmlzbTU0X2RyaXZlcik7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnByaXNtNTRfZHJpdmVyKTsKIH0KIAogLyogYnkgdGhlIHRpbWUgcHJpc201NF9tb2R1bGVfZXhpdCgpIHRlcm1pbmF0ZXMsIGFzIGEgcG9zdGNvbmRpdGlvbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwppbmRleCA2MWI4M2E1Li40NTc0MjkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYwpAQCAtNTIsOCArNTIsOCBAQAogI2luY2x1ZGUgPHBjbWNpYS9kcy5oPgogI2luY2x1ZGUgPHBjbWNpYS9tZW1fb3AuaD4KIAotI2luY2x1ZGUgPG5ldC9pZWVlODAyMTEuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgorI2luY2x1ZGUgPG5ldC9pd19oYW5kbGVyLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC05OSw3ICs5OSw3IEBACiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJheV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IHJheV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wczsKIAogc3RhdGljIGludCByYXlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgcmF5X2Rldl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCAicmF5X2NzIik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgbmV0ZGV2X2V0aHRvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBuZXRkZXZfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zcGVjdHJ1bV9jcy5jCmluZGV4IDdmNzhiNzguLmJjYzcwMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NwZWN0cnVtX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3BlY3RydW1fY3MuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJdV9pbnQgc2F2ZV9jb3I7CiAKIAkvKiBEb2luZyBpdCBpZiBoYXJkd2FyZSBpcyBnb25lIGlzIGd1YXJhbnRlZWQgY3Jhc2ggKi8KLQlpZiAocGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQorCWlmICghcGNtY2lhX2Rldl9wcmVzZW50KGxpbmspKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCS8qIFNhdmUgb3JpZ2luYWwgQ09SIHZhbHVlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYwppbmRleCBmZDMxODg1Li5jY2FmMjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKQEAgLTQ2Nyw2ICs0NjcsNyBAQAogCQkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2hib3JfZW50cnk7CisJaW50IHJldCA9IDA7CiAKIAluZWlnaGJvcl9lbnRyeSA9IG5laWdoX2xvb2t1cCgmYXJwX3RibCwgJnBhZGRyLCBkZXYpOwogCkBAIC00NzQsMTAgKzQ3NSwxMSBAQAogCQluZWlnaGJvcl9lbnRyeS0+dXNlZCA9IGppZmZpZXM7CiAJCWlmIChuZWlnaGJvcl9lbnRyeS0+bnVkX3N0YXRlICYgTlVEX1ZBTElEKSB7CiAJCQltZW1jcHkoaGFkZHIsIG5laWdoYm9yX2VudHJ5LT5oYSwgZGV2LT5hZGRyX2xlbik7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldCA9IDE7CiAJCX0KKwkJbmVpZ2hfcmVsZWFzZShuZWlnaGJvcl9lbnRyeSk7CiAJfQotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIER1bXBEYXRhKGNoYXIgKm1zZywgc3RydWN0IHN0cmlwICpzdHJpcF9pbmZvLCBfX3U4ICogcHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2F2ZWxhbl9jcy5jCmluZGV4IDU2MTI1MGYuLjAwNjVmMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW5fY3MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93YXZlbGFuX2NzLmMKQEAgLTE4MzcsNyArMTgzNyw3IEBACiAJc3RybmNweShpbmZvLT5kcml2ZXIsICJ3YXZlbGFuX2NzIiwgc2l6ZW9mKGluZm8tPmRyaXZlciktMSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBvcHMgPSB7CiAJLmdldF9kcnZpbmZvID0gd2xfZ2V0X2RydmluZm8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggYzAzZTQwMC4uZTBkMjk0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTE0NjQsNyArMTQ2NCw3IEBACiAJc3RybGNweShpbmZvLT5kcml2ZXIsIHdsMzUwMV9kZXZfaW5mbywgc2l6ZW9mKGluZm8tPmRyaXZlcikpOwogfQogCi1zdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgb3BzID0gewogCS5nZXRfZHJ2aW5mbyA9IHdsMzUwMV9nZXRfZHJ2aW5mbwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCA2NjJlY2M4Li5jNTJlOWJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKQEAgLTE4MjAsNiArMTgyMCw4IEBACiAJICAgIHpkLT5kZXYtPm5hbWUpOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIHpkKTsKKwl6ZDEyMDFfZW5hYmxlKHpkKTsJLyogemQxMjAxIGxpa2VzIHRvIHN0YXJ0dXAgZW5hYmxlZCwgKi8KKwl6ZDEyMDFfZGlzYWJsZSh6ZCk7CS8qIGludGVyZmVyaW5nIHdpdGggYWxsIHRoZSB3aWZpcyBpbiByYW5nZSAqLwogCXJldHVybiAwOwogCiBlcnJfbmV0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9NYWtlZmlsZQppbmRleCA1MDAzMTRmLi42NjAzYWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy9NYWtlZmlsZQpAQCAtMyw2ICszLDcgQEAKIHpkMTIxMXJ3LW9ianMgOj0gemRfY2hpcC5vIHpkX2llZWU4MDIxMS5vIFwKIAkJemRfbWFjLm8gemRfbmV0ZGV2Lm8gXAogCQl6ZF9yZl9hbDIyMzAubyB6ZF9yZl9yZjI5NTkubyBcCisJCXpkX3JmX2FsNzIzMGIubyBcCiAJCXpkX3JmLm8gemRfdXNiLm8gemRfdXRpbC5vCiAKIGlmZXEgKCQoQ09ORklHX1pEMTIxMVJXX0RFQlVHKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCmluZGV4IGVmYzljNGIuLjdjNGUzMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKQEAgLTQyLDEyICs0MiwxMSBAQAogCiB2b2lkIHpkX2NoaXBfY2xlYXIoc3RydWN0IHpkX2NoaXAgKmNoaXApCiB7Ci0JbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOworCVpEX0FTU0VSVCghbXV0ZXhfaXNfbG9ja2VkKCZjaGlwLT5tdXRleCkpOwogCXpkX3VzYl9jbGVhcigmY2hpcC0+dXNiKTsKIAl6ZF9yZl9jbGVhcigmY2hpcC0+cmYpOwotCW11dGV4X3VubG9jaygmY2hpcC0+bXV0ZXgpOwogCW11dGV4X2Rlc3Ryb3koJmNoaXAtPm11dGV4KTsKLQltZW1zZXQoY2hpcCwgMCwgc2l6ZW9mKCpjaGlwKSk7CisJWkRfTUVNQ0xFQVIoY2hpcCwgc2l6ZW9mKCpjaGlwKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2NucHJpbnRfbWFjX291aShjb25zdCB1OCAqYWRkciwgY2hhciAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKQEAgLTY4LDEwICs2NywxMSBAQAogCWkgKz0gc2NucHJpbnRfbWFjX291aShjaGlwLT5lMnBfbWFjLCBidWZmZXIraSwgc2l6ZS1pKTsKIAlpICs9IHNjbnByaW50ZihidWZmZXIraSwgc2l6ZS1pLCAiICIpOwogCWkgKz0gemRfcmZfc2NucHJpbnRfaWQoJmNoaXAtPnJmLCBidWZmZXIraSwgc2l6ZS1pKTsKLQlpICs9IHNjbnByaW50ZihidWZmZXIraSwgc2l6ZS1pLCAiIHBhJTF4ICVjJWMlYyIsIGNoaXAtPnBhX3R5cGUsCisJaSArPSBzY25wcmludGYoYnVmZmVyK2ksIHNpemUtaSwgIiBwYSUxeCAlYyVjJWMlYyIsIGNoaXAtPnBhX3R5cGUsCiAJCWNoaXAtPnBhdGNoX2Nja19nYWluID8gJ2cnIDogJy0nLAogCQljaGlwLT5wYXRjaF9jcjE1NyA/ICc3JyA6ICctJywKLQkJY2hpcC0+cGF0Y2hfNm1fYmFuZF9lZGdlID8gJzYnIDogJy0nKTsKKwkJY2hpcC0+cGF0Y2hfNm1fYmFuZF9lZGdlID8gJzYnIDogJy0nLAorCQljaGlwLT5uZXdfcGh5X2xheW91dCA/ICdOJyA6ICctJyk7CiAJcmV0dXJuIGk7CiB9CiAKQEAgLTMzMCwxMyArMzMwLDE0IEBACiAJY2hpcC0+cGF0Y2hfY2NrX2dhaW4gPSAodmFsdWUgPj4gOCkgJiAweDE7CiAJY2hpcC0+cGF0Y2hfY3IxNTcgPSAodmFsdWUgPj4gMTMpICYgMHgxOwogCWNoaXAtPnBhdGNoXzZtX2JhbmRfZWRnZSA9ICh2YWx1ZSA+PiAyMSkgJiAweDE7CisJY2hpcC0+bmV3X3BoeV9sYXlvdXQgPSAodmFsdWUgPj4gMzEpICYgMHgxOwogCiAJZGV2X2RiZ19mKHpkX2NoaXBfZGV2KGNoaXApLAogCQkiUkYgJXMgJSMwMXggUEEgdHlwZSAlIzAxeCBwYXRjaCBDQ0sgJWQgcGF0Y2ggQ1IxNTcgJWQgIgotCQkicGF0Y2ggNk0gJWRcbiIsCisJCSJwYXRjaCA2TSAlZCBuZXcgUEhZICVkXG4iLAogCQl6ZF9yZl9uYW1lKCpyZl90eXBlKSwgKnJmX3R5cGUsCiAJCWNoaXAtPnBhX3R5cGUsIGNoaXAtPnBhdGNoX2Nja19nYWluLAotCQljaGlwLT5wYXRjaF9jcjE1NywgY2hpcC0+cGF0Y2hfNm1fYmFuZF9lZGdlKTsKKwkJY2hpcC0+cGF0Y2hfY3IxNTcsIGNoaXAtPnBhdGNoXzZtX2JhbmRfZWRnZSwgY2hpcC0+bmV3X3BoeV9sYXlvdXQpOwogCXJldHVybiAwOwogZXJyb3I6CiAJKnJmX3R5cGUgPSAwOwpAQCAtMzQ0LDYgKzM0NSw3IEBACiAJY2hpcC0+cGF0Y2hfY2NrX2dhaW4gPSAwOwogCWNoaXAtPnBhdGNoX2NyMTU3ID0gMDsKIAljaGlwLT5wYXRjaF82bV9iYW5kX2VkZ2UgPSAwOworCWNoaXAtPm5ld19waHlfbGF5b3V0ID0gMDsKIAlyZXR1cm4gcjsKIH0KIApAQCAtNzE3LDcgKzcxOSw3IEBACiAJCXsgQ1IyMSwgIDB4MGUgfSwgeyBDUjIyLCAgMHgyMyB9LCB7IENSMjMsICAweDkwIH0sCiAJCXsgQ1IyNCwgIDB4MTQgfSwgeyBDUjI1LCAgMHg0MCB9LCB7IENSMjYsICAweDEwIH0sCiAJCXsgQ1IyNywgIDB4MTAgfSwgeyBDUjI4LCAgMHg3ZiB9LCB7IENSMjksICAweDgwIH0sCi0JCXsgQ1IzMCwgIDB4NDkgfSwgLyogam9pbnRseSBkZWNvZGVyLCBubyBBU0lDICovCisJCXsgQ1IzMCwgIDB4NGIgfSwgLyogQVNJQy9GV1QsIG5vIGpvaW50bHkgZGVjb2RlciAqLwogCQl7IENSMzEsICAweDYwIH0sIHsgQ1IzMiwgIDB4NDMgfSwgeyBDUjMzLCAgMHgwOCB9LAogCQl7IENSMzQsICAweDA2IH0sIHsgQ1IzNSwgIDB4MGEgfSwgeyBDUjM2LCAgMHgwMCB9LAogCQl7IENSMzcsICAweDAwIH0sIHsgQ1IzOCwgIDB4MzggfSwgeyBDUjM5LCAgMHgwYyB9LApAQCAtNzk3LDcgKzc5OSw3IEBACiAJCXsgQ1JfQUREQV9NQklBU19XQVJNVElNRSwJMHgzMDAwMDgwOCB9LAogCQl7IENSX1pEMTIxMV9SRVRSWV9NQVgsCQkweDIgfSwKIAkJeyBDUl9TTklGRkVSX09OLAkJMCB9LAotCQl7IENSX1JYX0ZJTFRFUiwJCQlBUF9SWF9GSUxURVIgfSwKKwkJeyBDUl9SWF9GSUxURVIsCQkJU1RBX1JYX0ZJTFRFUiB9LAogCQl7IENSX0dST1VQX0hBU0hfUDEsCQkweDAwIH0sCiAJCXsgQ1JfR1JPVVBfSEFTSF9QMiwJCTB4ODAwMDAwMDAgfSwKIAkJeyBDUl9SRUcxLAkJCTB4YTQgfSwKQEAgLTgwNyw3ICs4MDksNiBAQAogCQl7IENSX0FDS19USU1FT1VUX0VYVCwJCTB4ODAgfSwKIAkJeyBDUl9BRERBX1BXUl9EV04sCQkweDAwIH0sCiAJCXsgQ1JfQUNLX1RJTUVfODAyMTEsCQkweDEwMCB9LAotCQl7IENSX0lGU19WQUxVRSwJCQkweDU0N2MwMzIgfSwKIAkJeyBDUl9SWF9QRV9ERUxBWSwJCTB4NzAgfSwKIAkJeyBDUl9QU19DVFJMLAkJCTB4MTAwMDAwMDAgfSwKIAkJeyBDUl9SVFNfQ1RTX1JBVEUsCQkweDAyMDMwMjAzIH0sCkBAIC04NDQsNyArODQ1LDcgQEAKIAkJeyBDUl9aRDEyMTFCX0FJRlNfQ1RMMiwJCTB4MDA4QzAwM0MgfSwKIAkJeyBDUl9aRDEyMTFCX1RYT1AsCQkweDAxODAwODI0IH0sCiAJCXsgQ1JfU05JRkZFUl9PTiwJCTAgfSwKLQkJeyBDUl9SWF9GSUxURVIsCQkJQVBfUlhfRklMVEVSIH0sCisJCXsgQ1JfUlhfRklMVEVSLAkJCVNUQV9SWF9GSUxURVIgfSwKIAkJeyBDUl9HUk9VUF9IQVNIX1AxLAkJMHgwMCB9LAogCQl7IENSX0dST1VQX0hBU0hfUDIsCQkweDgwMDAwMDAwIH0sCiAJCXsgQ1JfUkVHMSwJCQkweGE0IH0sCkBAIC04NTQsMTEgKzg1NSwxMCBAQAogCQl7IENSX0FDS19USU1FT1VUX0VYVCwJCTB4ODAgfSwKIAkJeyBDUl9BRERBX1BXUl9EV04sCQkweDAwIH0sCiAJCXsgQ1JfQUNLX1RJTUVfODAyMTEsCQkweDEwMCB9LAotCQl7IENSX0lGU19WQUxVRSwJCQkweDU0N2MwMzIgfSwKIAkJeyBDUl9SWF9QRV9ERUxBWSwJCTB4NzAgfSwKIAkJeyBDUl9QU19DVFJMLAkJCTB4MTAwMDAwMDAgfSwKIAkJeyBDUl9SVFNfQ1RTX1JBVEUsCQkweDAyMDMwMjAzIH0sCi0JCXsgQ1JfUlhfVEhSRVNIT0xELAkJMHgwMDBjMDY0MCB9LAorCQl7IENSX1JYX1RIUkVTSE9MRCwJCTB4MDAwYzBlZmYsIH0sCiAJCXsgQ1JfQUZURVJfUE5QLAkJCTB4MSB9LAogCQl7IENSX1dFUF9QUk9URUNULAkJMHgxMTQgfSwKIAl9OwpAQCAtOTcwLDEwICs5NzAsMTUgQEAKIAlyID0gaHdfaW5pdF9obWFjKGNoaXApOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gc2V0X2JlYWNvbl9pbnRlcnZhbChjaGlwLCAxMDApOworCisJLyogQWx0aG91Z2ggdGhlIHZlbmRvciBkcml2ZXIgZGVmYXVsdHMgdG8gYSBkaWZmZXJlbnQgdmFsdWUgZHVyaW5nCisJICogaW5pdCwgaXQgb3ZlcndyaXRlcyB0aGUgSUZTIHZhbHVlIHdpdGggdGhlIGZvbGxvd2luZyBldmVyeSB0aW1lCisJICogdGhlIGNoYW5uZWwgY2hhbmdlcy4gV2Ugc2hvdWxkIGFpbSB0byBiZSBtb3JlIGludGVsbGlnZW50Li4uICovCisJciA9IHpkX2lvd3JpdGUzMl9sb2NrZWQoY2hpcCwgSUZTX1ZBTFVFX0RFRkFVTFQsIENSX0lGU19WQUxVRSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwotCXJldHVybiAwOworCisJcmV0dXJuIHNldF9iZWFjb25faW50ZXJ2YWwoY2hpcCwgMTAwKTsKIH0KIAogI2lmZGVmIERFQlVHCkBAIC0xNDMwLDkgKzE0MzUsNDMgQEAKIAkJCWJyZWFrOwogCX0KIAorCXN3aXRjaCAocmF0ZSkgeworCWNhc2UgWkRfT0ZETV9SQVRFXzZNOgorCWNhc2UgWkRfT0ZETV9SQVRFXzlNOgorCQlpICs9IDM7CisJCWJyZWFrOworCWNhc2UgWkRfT0ZETV9SQVRFXzEyTToKKwljYXNlIFpEX09GRE1fUkFURV8xOE06CisJCWkgKz0gNTsKKwkJYnJlYWs7CisJY2FzZSBaRF9PRkRNX1JBVEVfMjRNOgorCWNhc2UgWkRfT0ZETV9SQVRFXzM2TToKKwkJaSArPSA5OworCQlicmVhazsKKwljYXNlIFpEX09GRE1fUkFURV80OE06CisJY2FzZSBaRF9PRkRNX1JBVEVfNTRNOgorCQlpICs9IDE1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlyZXR1cm4gaTsKIH0KIAorc3RhdGljIGludCBvZmRtX3F1YWxfcGVyY2VudCh1OCBzdGF0dXNfcXVhbGl0eSwgdTggcmF0ZSwgdW5zaWduZWQgaW50IHNpemUpCit7CisJaW50IHI7CisKKwlyID0gb2ZkbV9xdWFsX2RiKHN0YXR1c19xdWFsaXR5LCByYXRlLCBzaXplKTsKKwlaRF9BU1NFUlQociA+PSAwKTsKKwlpZiAociA8IDApCisJCXIgPSAwOworCisJciA9IChyICogMTAwKS8yOTsKKwlyZXR1cm4gciA8PSAxMDAgPyByIDogMTAwOworfQorCiBzdGF0aWMgdW5zaWduZWQgaW50IGxvZzEwdGltZXMxMDAodW5zaWduZWQgaW50IHgpCiB7CiAJc3RhdGljIGNvbnN0IHU4IGxvZzEwW10gPSB7CkBAIC0xNDc2LDMxICsxNTE1LDI4IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBpbnQgcnhfcXVhbF9kYihjb25zdCB2b2lkICpyeF9mcmFtZSwgdW5zaWduZWQgaW50IHNpemUsCi0JICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgcnhfc3RhdHVzICpzdGF0dXMpCitzdGF0aWMgaW50IGNja19xdWFsX3BlcmNlbnQodTggc3RhdHVzX3F1YWxpdHkpCiB7Ci0JcmV0dXJuIChzdGF0dXMtPmZyYW1lX3N0YXR1cyZaRF9SWF9PRkRNKSA/Ci0JCW9mZG1fcXVhbF9kYihzdGF0dXMtPnNpZ25hbF9xdWFsaXR5X29mZG0sCi0JCQkgICAgIHpkX29mZG1fcGxjcF9oZWFkZXJfcmF0ZShyeF9mcmFtZSksCi0JCQkgICAgIHNpemUpIDoKLQkJY2NrX3Nucl9kYihzdGF0dXMtPnNpZ25hbF9xdWFsaXR5X2Njayk7CisJaW50IHI7CisKKwlyID0gY2NrX3Nucl9kYihzdGF0dXNfcXVhbGl0eSk7CisJciA9ICgxMDAqcikvMTc7CisJcmV0dXJuIHIgPD0gMTAwID8gciA6IDEwMDsKIH0KIAogdTggemRfcnhfcXVhbF9wZXJjZW50KGNvbnN0IHZvaWQgKnJ4X2ZyYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwKIAkgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCByeF9zdGF0dXMgKnN0YXR1cykKIHsKLQlpbnQgciA9IHJ4X3F1YWxfZGIocnhfZnJhbWUsIHNpemUsIHN0YXR1cyk7Ci0JaWYgKHIgPCAwKQotCQlyID0gMDsKLQlyID0gKHIgKiAxMDApIC8gMTQ7Ci0JaWYgKHIgPiAxMDApCi0JCXIgPSAxMDA7Ci0JcmV0dXJuIHI7CisJcmV0dXJuIChzdGF0dXMtPmZyYW1lX3N0YXR1cyZaRF9SWF9PRkRNKSA/CisJCW9mZG1fcXVhbF9wZXJjZW50KHN0YXR1cy0+c2lnbmFsX3F1YWxpdHlfb2ZkbSwKKwkJCSAgICAgICAgICB6ZF9vZmRtX3BsY3BfaGVhZGVyX3JhdGUocnhfZnJhbWUpLAorCQkJICAgICAgICAgIHNpemUpIDoKKwkJY2NrX3F1YWxfcGVyY2VudChzdGF0dXMtPnNpZ25hbF9xdWFsaXR5X2Njayk7CiB9CiAKIHU4IHpkX3J4X3N0cmVuZ3RoX3BlcmNlbnQodTggcnNzaSkKIHsKLQlpbnQgciA9IChyc3NpKjEwMCkgLyAzMDsKKwlpbnQgciA9IChyc3NpKjEwMCkgLyA0MTsKIAlpZiAociA+IDEwMCkKIAkJciA9IDEwMDsKIAlyZXR1cm4gKHU4KSByOwpAQCAtMTYxMywzICsxNjQ5LDM0IEBACiAKIAlyZXR1cm4gMDsKIH0KKworLyoKKyAqIFdlIGNhbiBvcHRpb25hbGx5IHByb2dyYW0gdGhlIFJGIGRpcmVjdGx5IHRocm91Z2ggQ1IgcmVncywgaWYgc3VwcG9ydGVkIGJ5CisgKiB0aGUgaGFyZHdhcmUuIFRoaXMgaXMgbXVjaCBmYXN0ZXIgdGhhbiB0aGUgb2xkZXIgbWV0aG9kLgorICovCitpbnQgemRfcmZ3cml0ZV9jcl9sb2NrZWQoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHUzMiB2YWx1ZSkKK3sKKwlzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKKwkJeyBDUjI0NCwgKHZhbHVlID4+IDE2KSAmIDB4ZmYgfSwKKwkJeyBDUjI0MywgKHZhbHVlID4+ICA4KSAmIDB4ZmYgfSwKKwkJeyBDUjI0MiwgIHZhbHVlICAgICAgICAmIDB4ZmYgfSwKKwl9OworCVpEX0FTU0VSVChtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7CisJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKK30KKworaW50IHpkX3Jmd3JpdGV2X2NyX2xvY2tlZChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwKKwkgICAgICAgICAgICAgICAgICBjb25zdCB1MzIgKnZhbHVlcywgdW5zaWduZWQgaW50IGNvdW50KQoreworCWludCByOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIHZhbHVlc1tpXSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAppbmRleCA4MDUxMjEwLi40YjEyNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCkBAIC00NjEsMTQgKzQ2MSwyNyBAQAogCiAjZGVmaW5lIENSX1JYX0ZJTFRFUgkJCUNUTF9SRUcoMHgwNjhjKQogI2RlZmluZSBSWF9GSUxURVJfQVNTT0NfUkVTUE9OU0UJMHgwMDAyCisjZGVmaW5lIFJYX0ZJTFRFUl9SRUFTU09DX1JFU1BPTlNFCTB4MDAwOAogI2RlZmluZSBSWF9GSUxURVJfUFJPQkVfUkVTUE9OU0UJMHgwMDIwCiAjZGVmaW5lIFJYX0ZJTFRFUl9CRUFDT04JCTB4MDEwMAorI2RlZmluZSBSWF9GSUxURVJfRElTQVNTT0MJCTB4MDQwMAogI2RlZmluZSBSWF9GSUxURVJfQVVUSAkJCTB4MDgwMAotLyogU25pZmYgbW9kdXMgc2V0cyBmaWx0ZXIgdG8gMHhmZmZmZiAqLworI2RlZmluZSBBUF9SWF9GSUxURVIJCQkweDA0MDBmZWZmCisjZGVmaW5lIFNUQV9SWF9GSUxURVIJCQkweDAwMDBmZmZmCisKKy8qIE1vbml0b3IgbW9kZSBzZXRzIGZpbHRlciB0byAweGZmZmZmICovCiAKICNkZWZpbmUgQ1JfQUNLX1RJTUVPVVRfRVhUCQlDVExfUkVHKDB4MDY5MCkKICNkZWZpbmUgQ1JfQkNOX0ZJRk9fU0VNQVBIT1JFCQlDVExfUkVHKDB4MDY5NCkKKwogI2RlZmluZSBDUl9JRlNfVkFMVUUJCQlDVExfUkVHKDB4MDY5OCkKKyNkZWZpbmUgSUZTX1ZBTFVFX0RJRlNfU0gJCTAKKyNkZWZpbmUgSUZTX1ZBTFVFX0VJRlNfU0gJCTEyCisjZGVmaW5lIElGU19WQUxVRV9TSUZTX1NICQkyNAorI2RlZmluZSBJRlNfVkFMVUVfREVGQVVMVAkJKCggIDUwIDw8IElGU19WQUxVRV9ESUZTX1NIKSB8IFwKKwkJCQkJICgxMTQ4IDw8IElGU19WQUxVRV9FSUZTX1NIKSB8IFwKKwkJCQkJICggIDEwIDw8IElGU19WQUxVRV9TSUZTX1NIKSkKKwogI2RlZmluZSBDUl9SWF9USU1FX09VVAkJCUNUTF9SRUcoMHgwNjlDKQogI2RlZmluZSBDUl9UT1RBTF9SWF9GUk0JCQlDVExfUkVHKDB4MDZBMCkKICNkZWZpbmUgQ1JfQ1JDMzJfQ05UCQkJQ1RMX1JFRygweDA2QTQpCkBAIC01NDYsOSArNTU5LDYgQEAKICNkZWZpbmUgQ1JfWkQxMjExQl9UWE9QCQkJQ1RMX1JFRygweDBiMjApCiAjZGVmaW5lIENSX1pEMTIxMUJfUkVUUllfTUFYCQlDVExfUkVHKDB4MGIyOCkKIAotI2RlZmluZSBBUF9SWF9GSUxURVIJCQkweDA0MDBmZWZmCi0jZGVmaW5lIFNUQV9SWF9GSUxURVIJCQkweDAwMDBmZmZmCi0KICNkZWZpbmUgQ1dJTl9TSVpFCQkJMHgwMDdmMDQzZgogCiAKQEAgLTYyOCw2ICs2MzgsNyBAQAogCUxPQURfQ09ERV9TSVpFCQkJPSAweGUsIC8qIHdvcmRzICovCiAJTE9BRF9WRUNUX1NJWkUJCQk9IDB4MTAwMDAgLSAweGZmZjcsIC8qIHdvcmRzICovCiAJRUVQUk9NX1JFR1NfT0ZGU0VUCQk9IExPQURfQ09ERV9TSVpFICsgTE9BRF9WRUNUX1NJWkUsCisJRUVQUk9NX1JFR1NfU0laRQkJPSAweDdlLCAvKiB3b3JkcyAqLwogCUUyUF9CQVNFX09GRlNFVAkJCT0gRUVQUk9NX1NUQVJUX09GRlNFVCArCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgRUVQUk9NX1JFR1NfT0ZGU0VULAogfTsKQEAgLTY1Myw3ICs2NjQsNyBAQAogCS8qIFNldFBvaW50T0ZETSBpbiB0aGUgdmVuZG9yIGRyaXZlciAqLwogCXU4IG9mZG1fY2FsX3ZhbHVlc1szXVtFMlBfQ0hBTk5FTF9DT1VOVF07CiAJdTggcGFfdHlwZTo0LCBwYXRjaF9jY2tfZ2FpbjoxLCBwYXRjaF9jcjE1NzoxLCBwYXRjaF82bV9iYW5kX2VkZ2U6MSwKLQkgICBpc196ZDEyMTFiOjE7CisJICAgbmV3X3BoeV9sYXlvdXQ6MSwgaXNfemQxMjExYjoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgemRfY2hpcCAqemRfdXNiX3RvX2NoaXAoc3RydWN0IHpkX3VzYiAqdXNiKQpAQCAtNzM3LDggKzc0OCwxMiBAQAogCXJldHVybiB6ZF91c2JfcmZ3cml0ZSgmY2hpcC0+dXNiLCB2YWx1ZSwgYml0cyk7CiB9CiAKK2ludCB6ZF9yZndyaXRlX2NyX2xvY2tlZChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgdTMyIHZhbHVlKTsKKwogaW50IHpkX3Jmd3JpdGV2X2xvY2tlZChzdHJ1Y3QgemRfY2hpcCAqY2hpcCwKIAkgICAgICAgICAgICAgICBjb25zdCB1MzIqIHZhbHVlcywgdW5zaWduZWQgaW50IGNvdW50LCB1OCBiaXRzKTsKK2ludCB6ZF9yZndyaXRldl9jcl9sb2NrZWQoc3RydWN0IHpkX2NoaXAgKmNoaXAsCisJICAgICAgICAgICAgICAgICAgY29uc3QgdTMyKiB2YWx1ZXMsIHVuc2lnbmVkIGludCBjb3VudCk7CiAKIC8qIExvY2tpbmcgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCB3cml0aW5nIHJlZ2lzdGVycy4KICAqIFRoZSBkaWZmZXJlbnQgcGFyYW1ldGVycyBhcmUgaW50ZW50aW9uYWwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9kZWYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCmluZGV4IDQ2NTkwNjguLmExM2VjNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2RlZi5oCkBAIC00NSw0ICs0NSwxMCBAQAogIyAgZGVmaW5lIFpEX0FTU0VSVCh4KSBkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAorI2lmZGVmIERFQlVHCisjICBkZWZpbmUgWkRfTUVNQ0xFQVIocG9pbnRlciwgc2l6ZSkgbWVtc2V0KChwb2ludGVyKSwgMHhmZiwgKHNpemUpKQorI2Vsc2UKKyMgIGRlZmluZSBaRF9NRU1DTEVBUihwb2ludGVyLCBzaXplKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogI2VuZGlmIC8qIF9aRF9ERUZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfaWVlZTgwMjExLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuaAppbmRleCAzNjMyOTg5Li5mNjMyNDViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9pZWVlODAyMTEuaApAQCAtNjQsNyArNjQsNyBAQAogCXU4IHNlcnZpY2U7CiAJX19sZTE2IGxlbmd0aDsKIAlfX2xlMTYgY3JjMTY7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RhdGljIGlubGluZSB1OCB6ZF9jY2tfcGxjcF9oZWFkZXJfcmF0ZShjb25zdCBzdHJ1Y3QgY2NrX3BsY3BfaGVhZGVyICpoZWFkZXIpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDNiZGM1NGQuLjE5ODlmMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0xMDgsNyArMTA4LDkgQEAKIAlpZiAocikKIAkJZ290byBkaXNhYmxlX2ludDsKIAotCXIgPSB6ZF9zZXRfZW5jcnlwdGlvbl90eXBlKGNoaXAsIE5PX1dFUCk7CisJLyogV2UgbXVzdCBpbmZvcm0gdGhlIGRldmljZSB0aGF0IHdlIGFyZSBkb2luZyBlbmNyeXB0aW9uL2RlY3J5cHRpb24gaW4KKwkgKiBzb2Z0d2FyZSBhdCB0aGUgbW9tZW50LiAqLworCXIgPSB6ZF9zZXRfZW5jcnlwdGlvbl90eXBlKGNoaXAsIEVOQ19TTklGRkVSKTsKIAlpZiAocikKIAkJZ290byBkaXNhYmxlX2ludDsKIApAQCAtMTI1LDIxICsxMjcsMTcgQEAKIAogdm9pZCB6ZF9tYWNfY2xlYXIoc3RydWN0IHpkX21hYyAqbWFjKQogewotCS8qIEFxdWlyZSB0aGUgbG9jay4gKi8KLQlzcGluX2xvY2soJm1hYy0+bG9jayk7Ci0Jc3Bpbl91bmxvY2soJm1hYy0+bG9jayk7CiAJemRfY2hpcF9jbGVhcigmbWFjLT5jaGlwKTsKLQltZW1zZXQobWFjLCAwLCBzaXplb2YoKm1hYykpOworCVpEX0FTU0VSVCghc3Bpbl9pc19sb2NrZWQoJm1hYy0+bG9jaykpOworCVpEX01FTUNMRUFSKG1hYywgc2l6ZW9mKHN0cnVjdCB6ZF9tYWMpKTsKIH0KIAogc3RhdGljIGludCByZXNldF9tb2RlKHN0cnVjdCB6ZF9tYWMgKm1hYykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IHpkX21hY190b19pZWVlODAyMTEobWFjKTsKIAlzdHJ1Y3QgemRfaW9yZXEzMiBpb3JlcXNbM10gPSB7Ci0JCXsgQ1JfUlhfRklMVEVSLCBSWF9GSUxURVJfQkVBQ09OfFJYX0ZJTFRFUl9QUk9CRV9SRVNQT05TRXwKLQkJCSAgICAgICAgUlhfRklMVEVSX0FVVEh8UlhfRklMVEVSX0FTU09DX1JFU1BPTlNFIH0sCisJCXsgQ1JfUlhfRklMVEVSLCBTVEFfUlhfRklMVEVSIH0sCiAJCXsgQ1JfU05JRkZFUl9PTiwgMFUgfSwKLQkJeyBDUl9FTkNSWVBUSU9OX1RZUEUsIE5PX1dFUCB9LAogCX07CiAKIAlpZiAoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX01PTklUT1IpIHsKQEAgLTcxMyw5ICs3MTEsOSBAQAogc3RydWN0IHpkX3J0X2hkciB7CiAJc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgcnRfaGRyOwogCXU4ICBydF9mbGFnczsKKwl1OCAgcnRfcmF0ZTsKIAl1MTYgcnRfY2hhbm5lbDsKIAl1MTYgcnRfY2hiaXRtYXNrOwotCXUxNiBydF9yYXRlOwogfTsKIAogc3RhdGljIHZvaWQgZmlsbF9ydF9oZWFkZXIodm9pZCAqYnVmZmVyLCBzdHJ1Y3QgemRfbWFjICptYWMsCkBAIC03MzUsMTQgKzczMywxNCBAQAogCWlmIChzdGF0dXMtPmRlY3J5cHRpb25fdHlwZSAmIChaRF9SWF9XRVA2NHxaRF9SWF9XRVAxMjh8WkRfUlhfV0VQMjU2KSkKIAkJaGRyLT5ydF9mbGFncyB8PSBJRUVFODAyMTFfUkFESU9UQVBfRl9XRVA7CiAKKwloZHItPnJ0X3JhdGUgPSBzdGF0cy0+cmF0ZSAvIDU7CisKIAkvKiBGSVhNRTogODAyLjExYSAqLwogCWhkci0+cnRfY2hhbm5lbCA9IGNwdV90b19sZTE2KGllZWU4MDIxMWNoYW4ybWh6KAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF96ZF9jaGlwX2dldF9jaGFubmVsKCZtYWMtPmNoaXApKSk7CiAJaGRyLT5ydF9jaGJpdG1hc2sgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfQ0hBTl8yR0haIHwKIAkJKChzdGF0dXMtPmZyYW1lX3N0YXR1cyAmIFpEX1JYX0ZSQU1FX01PRFVMQVRJT05fTUFTSykgPT0KIAkJWkRfUlhfT0ZETSA/IElFRUU4MDIxMV9DSEFOX09GRE0gOiBJRUVFODAyMTFfQ0hBTl9DQ0spKTsKLQotCWhkci0+cnRfcmF0ZSA9IHN0YXRzLT5yYXRlIC8gNTsKIH0KIAogLyogUmV0dXJucyAxIGlmIHRoZSBkYXRhIHBhY2tldCBpcyBmb3IgdXMgYW5kIDAgb3RoZXJ3aXNlLiAqLwpAQCAtODE2LDEzICs4MTQsMjUgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX3F1YWxfcnNzaShzdHJ1Y3QgemRfbWFjICptYWMsIHU4IHF1YWxfcGVyY2VudCwgdTggcnNzaSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9xdWFsX3Jzc2koc3RydWN0IHpkX21hYyAqbWFjLAorCQkJICAgICBjb25zdCB1OCAqYnVmZmVyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLAorCQkJICAgICB1OCBxdWFsX3BlcmNlbnQsIHU4IHJzc2lfcGVyY2VudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHI7CisJaW50IGk7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWZmZXI7CisJaWYgKGxlbmd0aCA8IG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyLCBhZGRyMykpCisJCXJldHVybjsKKwlpZiAobWVtY21wKGhkci0+YWRkcjIsIHpkX21hY190b19pZWVlODAyMTEobWFjKS0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQorCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWFjLT5sb2NrLCBmbGFncyk7Ci0JbWFjLT5xdWFsX2F2ZXJhZ2UgPSAoNyAqIG1hYy0+cXVhbF9hdmVyYWdlICsgcXVhbF9wZXJjZW50KSAvIDg7Ci0JbWFjLT5yc3NpX2F2ZXJhZ2UgPSAoNyAqIG1hYy0+cnNzaV9hdmVyYWdlICsgcnNzaSkgLyA4OworCWkgPSBtYWMtPnN0YXRzX2NvdW50ICUgWkRfTUFDX1NUQVRTX0JVRkZFUl9TSVpFOworCW1hYy0+cXVhbF9idWZmZXJbaV0gPSBxdWFsX3BlcmNlbnQ7CisJbWFjLT5yc3NpX2J1ZmZlcltpXSA9IHJzc2lfcGVyY2VudDsKKwltYWMtPnN0YXRzX2NvdW50Kys7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTg1Myw3ICs4NjMsNiBAQAogCWlmIChzdGF0cy0+cmF0ZSkKIAkJc3RhdHMtPm1hc2sgfD0gSUVFRTgwMjExX1NUQVRNQVNLX1JBVEU7CiAKLQl1cGRhdGVfcXVhbF9yc3NpKG1hYywgc3RhdHMtPnNpZ25hbCwgc3RhdHMtPnJzc2kpOwogCXJldHVybiAwOwogfQogCkBAIC04NzcsNiArODg2LDggQEAKIAkJICBzaXplb2Yoc3RydWN0IHJ4X3N0YXR1cyk7CiAJYnVmZmVyICs9IFpEX1BMQ1BfSEVBREVSX1NJWkU7CiAKKwl1cGRhdGVfcXVhbF9yc3NpKG1hYywgYnVmZmVyLCBsZW5ndGgsIHN0YXRzLnNpZ25hbCwgc3RhdHMucnNzaSk7CisKIAlyID0gZmlsdGVyX3J4KGllZWUsIGJ1ZmZlciwgbGVuZ3RoLCAmc3RhdHMpOwogCWlmIChyIDw9IDApCiAJCXJldHVybiByOwpAQCAtOTgxLDE3ICs5OTIsMzEgQEAKIHsKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9uZXRkZXZfbWFjKG5kZXYpOwogCXN0cnVjdCBpd19zdGF0aXN0aWNzICppd19zdGF0cyA9ICZtYWMtPml3X3N0YXRzOworCXVuc2lnbmVkIGludCBpLCBjb3VudCwgcXVhbF90b3RhbCwgcnNzaV90b3RhbDsKIAogCW1lbXNldChpd19zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpd19zdGF0aXN0aWNzKSk7CiAJLyogV2UgYXJlIG5vdCBzZXR0aW5nIHRoZSBzdGF0dXMsIGJlY2F1c2UgaWVlZS0+c3RhdGUgaXMgbm90IHVwZGF0ZWQKIAkgKiBhdCBhbGwgYW5kIHRoaXMgZHJpdmVyIGRvZXNuJ3QgdHJhY2sgYXV0aGVudGljYXRpb24gc3RhdGUuCiAJICovCiAJc3Bpbl9sb2NrX2lycSgmbWFjLT5sb2NrKTsKLQlpd19zdGF0cy0+cXVhbC5xdWFsID0gbWFjLT5xdWFsX2F2ZXJhZ2U7Ci0JaXdfc3RhdHMtPnF1YWwubGV2ZWwgPSBtYWMtPnJzc2lfYXZlcmFnZTsKLQlpd19zdGF0cy0+cXVhbC51cGRhdGVkID0gSVdfUVVBTF9RVUFMX1VQREFURUR8SVdfUVVBTF9MRVZFTF9VUERBVEVEfAotCQkgICAgICAgICAgICAgICAgIElXX1FVQUxfTk9JU0VfSU5WQUxJRDsKKwljb3VudCA9IG1hYy0+c3RhdHNfY291bnQgPCBaRF9NQUNfU1RBVFNfQlVGRkVSX1NJWkUgPworCQltYWMtPnN0YXRzX2NvdW50IDogWkRfTUFDX1NUQVRTX0JVRkZFUl9TSVpFOworCXF1YWxfdG90YWwgPSByc3NpX3RvdGFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlxdWFsX3RvdGFsICs9IG1hYy0+cXVhbF9idWZmZXJbaV07CisJCXJzc2lfdG90YWwgKz0gbWFjLT5yc3NpX2J1ZmZlcltpXTsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxKCZtYWMtPmxvY2spOworCWl3X3N0YXRzLT5xdWFsLnVwZGF0ZWQgPSBJV19RVUFMX05PSVNFX0lOVkFMSUQ7CisJaWYgKGNvdW50ID4gMCkgeworCQlpd19zdGF0cy0+cXVhbC5xdWFsID0gcXVhbF90b3RhbCAvIGNvdW50OworCQlpd19zdGF0cy0+cXVhbC5sZXZlbCA9IHJzc2lfdG90YWwgLyBjb3VudDsKKwkJaXdfc3RhdHMtPnF1YWwudXBkYXRlZCB8PQorCQkJSVdfUVVBTF9RVUFMX1VQREFURUR8SVdfUVVBTF9MRVZFTF9VUERBVEVEOworCX0gZWxzZSB7CisJCWl3X3N0YXRzLT5xdWFsLnVwZGF0ZWQgfD0KKwkJCUlXX1FVQUxfUVVBTF9JTlZBTElEfElXX1FVQUxfTEVWRUxfSU5WQUxJRDsKKwl9CiAJLyogVE9ETzogdXBkYXRlIGNvdW50ZXIgKi8KIAlyZXR1cm4gaXdfc3RhdHM7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCmluZGV4IDcxZTM4MmMuLjI5YjUxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCkBAIC0xLDQgKzEsNCBAQAotLyogemRfbWFjLmMKKy8qIHpkX21hYy5oCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04MiwxOCArODIsMTggQEAKIHN0cnVjdCByeF9sZW5ndGhfaW5mbyB7CiAJX19sZTE2IGxlbmd0aFszXTsKIAlfX2xlMTYgdGFnOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CiAKICNkZWZpbmUgUlhfTEVOR1RIX0lORk9fVEFHCQkweDY5N2UKIAogc3RydWN0IHJ4X3N0YXR1cyB7CisJdTggc2lnbmFsX3F1YWxpdHlfY2NrOwogCS8qIHJzc2kgKi8KIAl1OCBzaWduYWxfc3RyZW5ndGg7Ci0JdTggc2lnbmFsX3F1YWxpdHlfY2NrOwogCXU4IHNpZ25hbF9xdWFsaXR5X29mZG07CiAJdTggZGVjcnlwdGlvbl90eXBlOwogCXU4IGZyYW1lX3N0YXR1czsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cit9OwogCiAvKiByeF9zdGF0dXMgZmllbGQgZGVjcnlwdGlvbl90eXBlICovCiAjZGVmaW5lIFpEX1JYX05PX1dFUAkwCkBAIC0xMjAsMTQgKzEyMCwxNyBAQAogCU1BQ19GSVhFRF9DSEFOTkVMID0gMHgwMSwKIH07CiAKKyNkZWZpbmUgWkRfTUFDX1NUQVRTX0JVRkZFUl9TSVpFIDE2CisKIHN0cnVjdCB6ZF9tYWMgewotCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IHpkX2NoaXAgY2hpcDsKIAlzcGlubG9ja190IGxvY2s7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAkvKiBVbmxvY2tlZCByZWFkaW5nIHBvc3NpYmxlICovCiAJc3RydWN0IGl3X3N0YXRpc3RpY3MgaXdfc3RhdHM7Ci0JdTggcXVhbF9hdmVyYWdlOwotCXU4IHJzc2lfYXZlcmFnZTsKKwl1bnNpZ25lZCBpbnQgc3RhdHNfY291bnQ7CisJdTggcXVhbF9idWZmZXJbWkRfTUFDX1NUQVRTX0JVRkZFUl9TSVpFXTsKKwl1OCByc3NpX2J1ZmZlcltaRF9NQUNfU1RBVFNfQlVGRkVSX1NJWkVdOwogCXU4IHJlZ2RvbWFpbjsKIAl1OCBkZWZhdWx0X3JlZ2RvbWFpbjsKIAl1OCByZXF1ZXN0ZWRfY2hhbm5lbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbmV0ZGV2LmMKaW5kZXggOWRmMjMyYy4uNDQwZWYyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbmV0ZGV2LmMKQEAgLTcyLDEwICs3MiwxOCBAQAogCSAgICAgICAgICAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpyZXEsIGNoYXIgKmV4dHJhKQogewotCS8qIEZJWE1FOiBjaGVjayB3aGV0aGVyIDgwMi4xMWEgd2lsbCBhbHNvIHN1cHBvcnRlZCwgYWRkIGFsc28KLQkgKiAgICAgICAgemQxMjExQiwgaWYgd2Ugc3VwcG9ydCBpdC4KLQkgKi8KLQlzdHJsY3B5KHJlcS0+bmFtZSwgIjgwMi4xMWcgemQxMjExIiwgSUZOQU1TSVopOworCS8qIEZJWE1FOiBjaGVjayB3aGV0aGVyIDgwMi4xMWEgd2lsbCBhbHNvIHN1cHBvcnRlZCAqLworCXN0cmxjcHkocmVxLT5uYW1lLCAiSUVFRSA4MDIuMTFiL2ciLCBJRk5BTVNJWik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXdfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkgICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAorCQkgICAgICAgdW5pb24gaXdyZXFfZGF0YSAqcmVxLCBjaGFyICpleHRyYSkKK3sKKwlzdHJjcHkoZXh0cmEsICJ6ZDEyMTEiKTsKKwlyZXEtPmRhdGEubGVuZ3RoID0gc3RybGVuKGV4dHJhKSArIDE7CisJcmVxLT5kYXRhLmZsYWdzID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTgxLDYgKzE4OSw3IEBACiAKIHN0YXRpYyBjb25zdCBpd19oYW5kbGVyIHpkX3N0YW5kYXJkX2l3X2hhbmRsZXJzW10gPSB7CiAJV1goU0lPQ0dJV05BTUUpCQk9IGl3X2dldF9uYW1lLAorCVdYKFNJT0NHSVdOSUNLTikJPSBpd19nZXRfbmljaywKIAlXWChTSU9DU0lXRlJFUSkJCT0gaXdfc2V0X2ZyZXEsCiAJV1goU0lPQ0dJV0ZSRVEpCQk9IGl3X2dldF9mcmVxLAogCVdYKFNJT0NTSVdNT0RFKQkJPSBpd19zZXRfbW9kZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZi5jCmluZGV4IGQzNzcwZDIuLmY1MGNmZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmYuYwpAQCAtNTYsNyArNTYsNyBAQAogCiB2b2lkIHpkX3JmX2NsZWFyKHN0cnVjdCB6ZF9yZiAqcmYpCiB7Ci0JbWVtc2V0KHJmLCAwLCBzaXplb2YoKnJmKSk7CisJWkRfTUVNQ0xFQVIocmYsIHNpemVvZigqcmYpKTsKIH0KIAogaW50IHpkX3JmX2luaXRfaHcoc3RydWN0IHpkX3JmICpyZiwgdTggdHlwZSkKQEAgLTc2LDYgKzc2LDExIEBACiAJCWlmIChyKQogCQkJcmV0dXJuIHI7CiAJCWJyZWFrOworCWNhc2UgQUw3MjMwQl9SRjoKKwkJciA9IHpkX3JmX2luaXRfYWw3MjMwYihyZik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoemRfY2hpcF9kZXYoY2hpcCksCiAJCQkiUkYgJXMgJSN4IGlzIG5vdCBzdXBwb3J0ZWRcbiIsIHpkX3JmX25hbWUodHlwZSksIHR5cGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmLmgKaW5kZXggZWEzMGY2OS4uNjc2YjM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZi5oCkBAIC03OCw1ICs3OCw2IEBACiAKIGludCB6ZF9yZl9pbml0X3JmMjk1OShzdHJ1Y3QgemRfcmYgKnJmKTsKIGludCB6ZF9yZl9pbml0X2FsMjIzMChzdHJ1Y3QgemRfcmYgKnJmKTsKK2ludCB6ZF9yZl9pbml0X2FsNzIzMGIoc3RydWN0IHpkX3JmICpyZik7CiAKICNlbmRpZiAvKiBfWkRfUkZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWwyMjMwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9yZl9hbDIyMzAuYwppbmRleCAwOTQ4YjI1Li4yNTMyM2ExMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWwyMjMwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWwyMjMwLmMKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRlICJ6ZF91c2IuaCIKICNpbmNsdWRlICJ6ZF9jaGlwLmgiCiAKLXN0YXRpYyBjb25zdCB1MzIgYWwyMjMwX3RhYmxlW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTMyIHpkMTIxMV9hbDIyMzBfdGFibGVbXVszXSA9IHsKIAlSRl9DSEFOTkVMKCAxKSA9IHsgMHgwM2Y3OTAsIDB4MDMzMzMxLCAweDAwMDAwZCwgfSwKIAlSRl9DSEFOTkVMKCAyKSA9IHsgMHgwM2Y3OTAsIDB4MGIzMzMxLCAweDAwMDAwZCwgfSwKIAlSRl9DSEFOTkVMKCAzKSA9IHsgMHgwM2U3OTAsIDB4MDMzMzMxLCAweDAwMDAwZCwgfSwKQEAgLTM4LDYgKzM4LDUzIEBACiAJUkZfQ0hBTk5FTCgxNCkgPSB7IDB4MDNlN2MwLCAweDA2NjY2MSwgMHgwMDAwMGQsIH0sCiB9OwogCitzdGF0aWMgY29uc3QgdTMyIHpkMTIxMWJfYWwyMjMwX3RhYmxlW11bM10gPSB7CisJUkZfQ0hBTk5FTCggMSkgPSB7IDB4MDllZmMwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggMikgPSB7IDB4MDllZmMwLCAweDhjY2NkMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggMykgPSB7IDB4MDllN2MwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggNCkgPSB7IDB4MDllN2MwLCAweDhjY2NkMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggNSkgPSB7IDB4MDVlZmMwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggNikgPSB7IDB4MDVlZmMwLCAweDhjY2NkMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggNykgPSB7IDB4MDVlN2MwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggOCkgPSB7IDB4MDVlN2MwLCAweDhjY2NkMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCggOSkgPSB7IDB4MGRlZmMwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCgxMCkgPSB7IDB4MGRlZmMwLCAweDhjY2NkMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCgxMSkgPSB7IDB4MGRlN2MwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCgxMikgPSB7IDB4MGRlN2MwLCAweDhjY2NkMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCgxMykgPSB7IDB4MDNlZmMwLCAweDhjY2NjMCwgMHhiMDAwMDAsIH0sCisJUkZfQ0hBTk5FTCgxNCkgPSB7IDB4MDNlN2MwLCAweDg2NjY2MCwgMHhiMDAwMDAsIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgemQxMjExYl9pb3JlcXNfc2hhcmVkXzFbXSA9IHsKKwl7IENSMjQwLCAweDU3IH0sIHsgQ1I5LCAgIDB4ZTAgfSwKK307CisKK3N0YXRpYyBpbnQgemQxMjExYl9hbDIyMzBfZmluYWxpemVfcmYoc3RydWN0IHpkX2NoaXAgKmNoaXApCit7CisJaW50IHI7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0geworCQl7IENSODAsICAweDMwIH0sIHsgQ1I4MSwgIDB4MzAgfSwgeyBDUjc5LCAgMHg1OCB9LAorCQl7IENSMTIsICAweGYwIH0sIHsgQ1I3NywgIDB4MWIgfSwgeyBDUjc4LCAgMHg1OCB9LAorCQl7IENSMjAzLCAweDA2IH0sCisJCXsgfSwKKworCQl7IENSMjQwLCAweDgwIH0sCisJfTsKKworCXIgPSB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJLyogcmVsYXRlZCB0byBhbnRlbm5hIHNlbGVjdGlvbj8gKi8KKwlpZiAoY2hpcC0+bmV3X3BoeV9sYXlvdXQpIHsKKwkJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHhlMSwgQ1I5KTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisKKwlyZXR1cm4gemRfaW93cml0ZTE2X2xvY2tlZChjaGlwLCAweDA2LCBDUjIwMyk7Cit9CisKIHN0YXRpYyBpbnQgemQxMjExX2FsMjIzMF9pbml0X2h3KHN0cnVjdCB6ZF9yZiAqcmYpCiB7CiAJaW50IHI7CkBAIC0xMzksNyArMTg2LDcgQEAKIAkJeyBDUjQ3LCAgMHgxZSB9LAogCiAJCS8qIFpEMTIxMUIgMDUuMDYuMTAgKi8KLQkJeyBDUjQ4LCAgMHgwMCB9LCB7IENSNDksICAweDAwIH0sIHsgQ1I1MSwgIDB4MDEgfSwKKwkJeyBDUjQ4LCAgMHgwNiB9LCB7IENSNDksICAweGY5IH0sIHsgQ1I1MSwgIDB4MDEgfSwKIAkJeyBDUjUyLCAgMHg4MCB9LCB7IENSNTMsICAweDdlIH0sIHsgQ1I2NSwgIDB4MDAgfSwKIAkJeyBDUjY2LCAgMHgwMCB9LCB7IENSNjcsICAweDAwIH0sIHsgQ1I2OCwgIDB4MDAgfSwKIAkJeyBDUjY5LCAgMHgyOCB9LApAQCAtMTcyLDc5ICsyMTksNzggQEAKIAkJeyBDUjEzNywgMHg1MCB9LCAvKiA1NjE0ICovCiAJCXsgQ1IxMzgsIDB4YTggfSwKIAkJeyBDUjE0NCwgMHhhYyB9LCAvKiA1NjIxICovCi0JCXsgQ1IxNTAsIDB4MGQgfSwgeyBDUjI1MiwgMHgwMCB9LCB7IENSMjUzLCAweDAwIH0sCisJCXsgQ1IxNTAsIDB4MGQgfSwgeyBDUjI1MiwgMHgzNCB9LCB7IENSMjUzLCAweDM0IH0sCiAJfTsKIAogCXN0YXRpYyBjb25zdCB1MzIgcnYxW10gPSB7Ci0JCS8qIGNoYW5uZWwgMSAqLwotCQkweDAzZjc5MCwKLQkJMHgwMzMzMzEsCi0JCTB4MDAwMDBkLAorCQkweDhjY2NkMCwKKwkJMHg0ODFkYzAsCisJCTB4Y2ZmZjAwLAorCQkweDI1YTAwMCwKIAotCQkweDBiMzMzMSwKLQkJMHgwM2I4MTIsCi0JCTB4MDBmZmYzLAotCQkweDAwMDVhNCwKLQkJMHgwZjRkYzUsIC8qIGZpeCBmcmVxIHNoaWZ0IDB4MDQ0ZGM1ICovCi0JCTB4MDgwNWI2LAotCQkweDAxNDZjNywKLQkJMHgwMDA2ODgsCi0JCTB4MDQwM2I5LCAvKiBFeHRlcm5hbCBjb250cm9sIFRYIHBvd2VyIChDUjMxKSAqLwotCQkweDAwZGJiYSwKLQkJMHgwMDA5OWIsCi0JCTB4MGJkZmZjLAotCQkweDAwMDAwZCwKLQkJMHgwMDU4MGYsCisJCS8qIFRvIGltcHJvdmUgQUwyMjMwIHlpZWxkLCBpbXByb3ZlIHBoYXNlIG5vaXNlLCA0NzEzICovCisJCTB4MjVhMDAwLAorCQkweGEzYjJmMCwKKworCQkweDZkYTAxMCwgLyogUmVnNiB1cGRhdGUgZm9yIE1QIHZlcnNpbyAqLworCQkweGUzNjI4MCwgLyogTW9kaWZpZWQgYnkganhpYW8gZm9yIEJvci1DaGluIG9uIDIwMDQvMDgvMDIgKi8KKwkJMHgxMTYwMDAsCisJCTB4OWRjMDIwLCAvKiBFeHRlcm5hbCBjb250cm9sIFRYIHBvd2VyIChDUjMxKSAqLworCQkweDVkZGIwMCwgLyogUmVnQSB1cGRhdGUgZm9yIE1QIHZlcnNpb24gKi8KKwkJMHhkOTkwMDAsIC8qIFJlZ0IgdXBkYXRlIGZvciBNUCB2ZXJzaW9uICovCisJCTB4M2ZmYmQwLCAvKiBSZWdDIHVwZGF0ZSBmb3IgTVAgdmVyc2lvbiAqLworCQkweGIwMDAwMCwgLyogUmVnRCB1cGRhdGUgZm9yIE1QIHZlcnNpb24gKi8KKworCQkvKiBpbXByb3ZlIHBoYXNlIG5vaXNlIGFuZCByZW1vdmUgcGhhc2UgY2FsaWJyYXRpb24sNDcxMyAqLworCQkweGYwMWEwMCwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxczJbXSA9IHsKLQkJeyBDUjQ3LCAgMHgxZSB9LCB7IENSX1JGQ0ZHLCAweDAzIH0sCisJCXsgQ1IyNTEsIDB4MmYgfSwgLyogc2hkbmIoUExMX09OKT0wICovCisJCXsgQ1IyNTEsIDB4N2YgfSwgLyogc2hkbmIoUExMX09OKT0xICovCiAJfTsKIAogCXN0YXRpYyBjb25zdCB1MzIgcnYyW10gPSB7Ci0JCTB4MDA4ODBmLAotCQkweDAwMDgwZiwKKwkJLyogVG8gaW1wcm92ZSBBTDIyMzAgeWllbGQsIDQ3MTMgKi8KKwkJMHhmMDFiMDAsCisJCTB4ZjAxZTAwLAorCQkweGYwMWEwMCwKIAl9OwogCiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxczNbXSA9IHsKLQkJeyBDUl9SRkNGRywgMHgwMCB9LCB7IENSNDcsIDB4MWUgfSwgeyBDUjI1MSwgMHg3ZiB9LAorCQkvKiByZWxhdGVkIHRvIDZNIGJhbmQgZWRnZSBwYXRjaGluZywgaGFwcGVucyB1bmNvbmRpdGlvbmFsbHkgKi8KKwkJeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKIAl9OwogCi0Jc3RhdGljIGNvbnN0IHUzMiBydjNbXSA9IHsKLQkJMHgwMGQ4MGYsCi0JCTB4MDA3ODBmLAotCQkweDAwNTgwZiwKLQl9OwotCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxczRbXSA9IHsKLQkJeyBDUjEzOCwgMHgyOCB9LCB7IENSMjAzLCAweDA2IH0sCi0JfTsKLQorCXIgPSB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCB6ZDEyMTFiX2lvcmVxc19zaGFyZWRfMSwKKwkJQVJSQVlfU0laRSh6ZDEyMTFiX2lvcmVxc19zaGFyZWRfMSkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKIAlyID0gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzMSwgQVJSQVlfU0laRShpb3JlcXMxKSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwotCXIgPSB6ZF9yZndyaXRldl9sb2NrZWQoY2hpcCwgcnYxLCBBUlJBWV9TSVpFKHJ2MSksIFJGX1JWX0JJVFMpOworCXIgPSB6ZF9yZndyaXRldl9jcl9sb2NrZWQoY2hpcCwgemQxMjExYl9hbDIyMzBfdGFibGVbMF0sIDMpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gemRfcmZ3cml0ZXZfY3JfbG9ja2VkKGNoaXAsIHJ2MSwgQVJSQVlfU0laRShydjEpKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxczIsIEFSUkFZX1NJWkUoaW9yZXFzMikpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gemRfcmZ3cml0ZXZfbG9ja2VkKGNoaXAsIHJ2MiwgQVJSQVlfU0laRShydjIpLCBSRl9SVl9CSVRTKTsKKwlyID0gemRfcmZ3cml0ZXZfY3JfbG9ja2VkKGNoaXAsIHJ2MiwgQVJSQVlfU0laRShydjIpKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxczMsIEFSUkFZX1NJWkUoaW9yZXFzMykpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKLQlyID0gemRfcmZ3cml0ZXZfbG9ja2VkKGNoaXAsIHJ2MywgQVJSQVlfU0laRShydjMpLCBSRl9SVl9CSVRTKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxczQsIEFSUkFZX1NJWkUoaW9yZXFzNCkpOworCXJldHVybiB6ZDEyMTFiX2FsMjIzMF9maW5hbGl6ZV9yZihjaGlwKTsKIH0KIAotc3RhdGljIGludCBhbDIyMzBfc2V0X2NoYW5uZWwoc3RydWN0IHpkX3JmICpyZiwgdTggY2hhbm5lbCkKK3N0YXRpYyBpbnQgemQxMjExX2FsMjIzMF9zZXRfY2hhbm5lbChzdHJ1Y3QgemRfcmYgKnJmLCB1OCBjaGFubmVsKQogewogCWludCByOwotCWNvbnN0IHUzMiAqcnYgPSBhbDIyMzBfdGFibGVbY2hhbm5lbC0xXTsKKwljb25zdCB1MzIgKnJ2ID0gemQxMjExX2FsMjIzMF90YWJsZVtjaGFubmVsLTFdOwogCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0gewogCQl7IENSMTM4LCAweDI4IH0sCkBAIC0yNTcsNiArMzAzLDI0IEBACiAJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKIH0KIAorc3RhdGljIGludCB6ZDEyMTFiX2FsMjIzMF9zZXRfY2hhbm5lbChzdHJ1Y3QgemRfcmYgKnJmLCB1OCBjaGFubmVsKQoreworCWludCByOworCWNvbnN0IHUzMiAqcnYgPSB6ZDEyMTFiX2FsMjIzMF90YWJsZVtjaGFubmVsLTFdOworCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CisKKwlyID0gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgemQxMjExYl9pb3JlcXNfc2hhcmVkXzEsCisJCUFSUkFZX1NJWkUoemQxMjExYl9pb3JlcXNfc2hhcmVkXzEpKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0gemRfcmZ3cml0ZXZfY3JfbG9ja2VkKGNoaXAsIHJ2LCAzKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gemQxMjExYl9hbDIyMzBfZmluYWxpemVfcmYoY2hpcCk7Cit9CisKIHN0YXRpYyBpbnQgemQxMjExX2FsMjIzMF9zd2l0Y2hfcmFkaW9fb24oc3RydWN0IHpkX3JmICpyZikKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwpAQCAtMjk0LDEzICszNTgsMTQgQEAKIHsKIAlzdHJ1Y3QgemRfY2hpcCAqY2hpcCA9IHpkX3JmX3RvX2NoaXAocmYpOwogCi0JcmYtPnNldF9jaGFubmVsID0gYWwyMjMwX3NldF9jaGFubmVsOwogCXJmLT5zd2l0Y2hfcmFkaW9fb2ZmID0gYWwyMjMwX3N3aXRjaF9yYWRpb19vZmY7CiAJaWYgKGNoaXAtPmlzX3pkMTIxMWIpIHsKIAkJcmYtPmluaXRfaHcgPSB6ZDEyMTFiX2FsMjIzMF9pbml0X2h3OworCQlyZi0+c2V0X2NoYW5uZWwgPSB6ZDEyMTFiX2FsMjIzMF9zZXRfY2hhbm5lbDsKIAkJcmYtPnN3aXRjaF9yYWRpb19vbiA9IHpkMTIxMWJfYWwyMjMwX3N3aXRjaF9yYWRpb19vbjsKIAl9IGVsc2UgewogCQlyZi0+aW5pdF9odyA9IHpkMTIxMV9hbDIyMzBfaW5pdF9odzsKKwkJcmYtPnNldF9jaGFubmVsID0gemQxMjExX2FsMjIzMF9zZXRfY2hhbm5lbDsKIAkJcmYtPnN3aXRjaF9yYWRpb19vbiA9IHpkMTIxMV9hbDIyMzBfc3dpdGNoX3JhZGlvX29uOwogCX0KIAlyZi0+cGF0Y2hfNm1fYmFuZF9lZGdlID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsNzIzMGIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3JmX2FsNzIzMGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjg5Zjk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfcmZfYWw3MjMwYi5jCkBAIC0wLDAgKzEsMjc0IEBACisvKiB6ZF9yZl9hbDcyMzBiLmM6IEZ1bmN0aW9ucyBmb3IgdGhlIEFMNzIzMEIgUkYgY29udHJvbGxlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSAiemRfcmYuaCIKKyNpbmNsdWRlICJ6ZF91c2IuaCIKKyNpbmNsdWRlICJ6ZF9jaGlwLmgiCisKK3N0YXRpYyBjb25zdCB1MzIgY2hhbl9ydltdWzJdID0geworCVJGX0NIQU5ORUwoIDEpID0geyAweDA5ZWMwMCwgMHg4Y2NjYzggfSwKKwlSRl9DSEFOTkVMKCAyKSA9IHsgMHgwOWVjMDAsIDB4OGNjY2Q4IH0sCisJUkZfQ0hBTk5FTCggMykgPSB7IDB4MDllYzAwLCAweDhjY2NjMCB9LAorCVJGX0NIQU5ORUwoIDQpID0geyAweDA5ZWMwMCwgMHg4Y2NjZDAgfSwKKwlSRl9DSEFOTkVMKCA1KSA9IHsgMHgwNWVjMDAsIDB4OGNjY2M4IH0sCisJUkZfQ0hBTk5FTCggNikgPSB7IDB4MDVlYzAwLCAweDhjY2NkOCB9LAorCVJGX0NIQU5ORUwoIDcpID0geyAweDA1ZWMwMCwgMHg4Y2NjYzAgfSwKKwlSRl9DSEFOTkVMKCA4KSA9IHsgMHgwNWVjMDAsIDB4OGNjY2QwIH0sCisJUkZfQ0hBTk5FTCggOSkgPSB7IDB4MGRlYzAwLCAweDhjY2NjOCB9LAorCVJGX0NIQU5ORUwoMTApID0geyAweDBkZWMwMCwgMHg4Y2NjZDggfSwKKwlSRl9DSEFOTkVMKDExKSA9IHsgMHgwZGVjMDAsIDB4OGNjY2MwIH0sCisJUkZfQ0hBTk5FTCgxMikgPSB7IDB4MGRlYzAwLCAweDhjY2NkMCB9LAorCVJGX0NIQU5ORUwoMTMpID0geyAweDAzZWMwMCwgMHg4Y2NjYzggfSwKKwlSRl9DSEFOTkVMKDE0KSA9IHsgMHgwM2VjMDAsIDB4ODY2NjYwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIHN0ZF9ydltdID0geworCTB4NGZmODIxLAorCTB4YzVmYmZjLAorCTB4MjFlYmZlLAorCTB4YWZkNDAxLCAvKiBmcmVxIHNoaWZ0IDB4YWFkNDAxICovCisJMHg2Y2Y1NmEsCisJMHhlMDQwNzMsCisJMHgxOTNkNzYsCisJMHg5ZGQ4NDQsCisJMHg1MDAwMDcsCisJMHhkOGMwMTAsCit9OworCitzdGF0aWMgaW50IGFsNzIzMGJfaW5pdF9odyhzdHJ1Y3QgemRfcmYgKnJmKQoreworCWludCBpLCByOworCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CisKKwkvKiBBbGwgb2YgdGhlc2Ugd3JpdGVzIGFyZSBpZGVudGljYWwgdG8gQUwyMjMwIHVubGVzcyBvdGhlcndpc2UKKwkgKiBzcGVjaWZpZWQgKi8KKwlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzXzFbXSA9IHsKKwkJLyogVGhpcyBvbmUgaXMgNzIzMC1zcGVjaWZpYywgYW5kIGhhcHBlbnMgYmVmb3JlIHRoZSByZXN0ICovCisJCXsgQ1IyNDAsICAweDU3IH0sCisJCXsgfSwKKworCQl7IENSMTUsICAgMHgyMCB9LCB7IENSMjMsICAgMHg0MCB9LCB7IENSMjQsICAweDIwIH0sCisJCXsgQ1IyNiwgICAweDExIH0sIHsgQ1IyOCwgICAweDNlIH0sIHsgQ1IyOSwgIDB4MDAgfSwKKwkJeyBDUjQ0LCAgIDB4MzMgfSwKKwkJLyogVGhpcyB2YWx1ZSBpcyBkaWZmZXJlbnQgZm9yIDcyMzAgKHdhczogMHgyYSkgKi8KKwkJeyBDUjEwNiwgIDB4MjIgfSwKKwkJeyBDUjEwNywgIDB4MWEgfSwgeyBDUjEwOSwgIDB4MDkgfSwgeyBDUjExMCwgIDB4MjcgfSwKKwkJeyBDUjExMSwgIDB4MmIgfSwgeyBDUjExMiwgIDB4MmIgfSwgeyBDUjExOSwgIDB4MGEgfSwKKwkJLyogVGhpcyBoYXBwZW5lZCBmdXJ0aGVyIGRvd24gaW4gQUwyMjMwLAorCQkgKiBhbmQgdGhlIHZhbHVlIGNoYW5nZWQgKHdhczogMHhlMCkgKi8KKwkJeyBDUjEyMiwgIDB4ZmMgfSwKKwkJeyBDUjEwLCAgIDB4ODkgfSwKKwkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCisJCXsgQ1IxNywgICAweDI4IH0sCisJCXsgQ1IyNiwgICAweDkzIH0sIHsgQ1IzNCwgICAweDMwIH0sCisJCS8qIGZvciBuZXdlc3QgKDNyZCBjdXQpIEFMMjMwMCAqLworCQl7IENSMzUsICAgMHgzZSB9LAorCQl7IENSNDEsICAgMHgyNCB9LCB7IENSNDQsICAgMHgzMiB9LAorCQkvKiBmb3IgbmV3ZXN0ICgzcmQgY3V0KSBBTDIzMDAgKi8KKwkJeyBDUjQ2LCAgIDB4OTYgfSwKKwkJeyBDUjQ3LCAgIDB4MWUgfSwgeyBDUjc5LCAgIDB4NTggfSwgeyBDUjgwLCAgMHgzMCB9LAorCQl7IENSODEsICAgMHgzMCB9LCB7IENSODcsICAgMHgwYSB9LCB7IENSODksICAweDA0IH0sCisJCXsgQ1I5MiwgICAweDBhIH0sIHsgQ1I5OSwgICAweDI4IH0sCisJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MDApICovCisJCXsgQ1IxMDAsICAweDAyIH0sCisJCXsgQ1IxMDEsICAweDEzIH0sIHsgQ1IxMDIsICAweDI3IH0sCisJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MjQpICovCisJCXsgQ1IxMDYsICAweDIyIH0sCisJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MmEpICovCisJCXsgQ1IxMDcsICAweDNmIH0sCisJCXsgQ1IxMDksICAweDA5IH0sCisJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MTMpICovCisJCXsgQ1IxMTAsICAweDFmIH0sCisJCXsgQ1IxMTEsICAweDFmIH0sIHsgQ1IxMTIsICAweDFmIH0sIHsgQ1IxMTMsIDB4MjcgfSwKKwkJeyBDUjExNCwgIDB4MjcgfSwKKwkJLyogZm9yIG5ld2VzdCAoM3JkIGN1dCkgQUwyMzAwICovCisJCXsgQ1IxMTUsICAweDI0IH0sCisJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4MjQpICovCisJCXsgQ1IxMTYsICAweDNmIH0sCisJCS8qIFRoaXMgdmFsdWUgaXMgZGlmZmVyZW50IGZvciA3MjMwICh3YXM6IDB4ZjQpICovCisJCXsgQ1IxMTcsICAweGZhIH0sCisJCXsgQ1IxMTgsICAweGZjIH0sIHsgQ1IxMTksICAweDEwIH0sIHsgQ1IxMjAsIDB4NGYgfSwKKwkJeyBDUjEyMSwgIDB4NzcgfSwgeyBDUjEzNywgIDB4ODggfSwKKwkJLyogVGhpcyBvbmUgaXMgNzIzMC1zcGVjaWZpYyAqLworCQl7IENSMTM4LCAgMHhhOCB9LAorCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweGZmKSAqLworCQl7IENSMjUyLCAgMHgzNCB9LAorCQkvKiBUaGlzIHZhbHVlIGlzIGRpZmZlcmVudCBmb3IgNzIzMCAod2FzOiAweGZmKSAqLworCQl7IENSMjUzLCAgMHgzNCB9LAorCisJCS8qIFBMTF9PRkYgKi8KKwkJeyBDUjI1MSwgMHgyZiB9LAorCX07CisKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzXzJbXSA9IHsKKwkJLyogUExMX09OICovCisJCXsgQ1IyNTEsIDB4M2YgfSwKKwkJeyBDUjEyOCwgMHgxNCB9LCB7IENSMTI5LCAweDEyIH0sIHsgQ1IxMzAsIDB4MTAgfSwKKwkJeyBDUjM4LCAweDM4IH0sIHsgQ1IxMzYsIDB4ZGYgfSwKKwl9OworCisJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxc18xLCBBUlJBWV9TSVpFKGlvcmVxc18xKSk7CisJaWYgKHIpCisJCXJldHVybiByOworCisJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIDB4MDllYzA0KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIDB4OGNjY2M4KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGRfcnYpOyBpKyspIHsKKwkJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIHN0ZF9ydltpXSk7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorCisJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIDB4M2M5MDAwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIDB4YmZmZmZmKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIDB4NzAwMDAwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIDB4ZjE1ZDU4KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzXzIsIEFSUkFZX1NJWkUoaW9yZXFzXzIpKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgMHhmMTVkNTkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgMHhmMTVkNWMpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgMHhmMTVkNTgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4MDYsIENSMjAzKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHg4MCwgQ1IyNDApOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFsNzIzMGJfc2V0X2NoYW5uZWwoc3RydWN0IHpkX3JmICpyZiwgdTggY2hhbm5lbCkKK3sKKwlpbnQgaSwgcjsKKwljb25zdCB1MzIgKnJ2ID0gY2hhbl9ydltjaGFubmVsLTFdOworCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CisKKwlzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNfMVtdID0geworCQl7IENSMTI4LCAweDE0IH0sIHsgQ1IxMjksIDB4MTIgfSwgeyBDUjEzMCwgMHgxMCB9LAorCQl7IENSMzgsICAweDM4IH0sIHsgQ1IxMzYsIDB4ZGYgfSwKKwl9OworCisJc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzXzJbXSA9IHsKKwkJLyogUExMX09OICovCisJCXsgQ1IyNTEsIDB4M2YgfSwKKwkJeyBDUjIwMywgMHgwNiB9LCB7IENSMjQwLCAweDA4IH0sCisJfTsKKworCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIDB4NTcsIENSMjQwKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwkvKiBQTExfT0ZGICovCisJciA9IHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgMHgyZiwgQ1IyNTEpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0ZF9ydik7IGkrKykgeworCQlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgc3RkX3J2W2ldKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgMHgzYzkwMDApOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgMHhmMTVkNTgpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXIgPSB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXNfMSwgQVJSQVlfU0laRShpb3JlcXNfMSkpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJciA9IHpkX3Jmd3JpdGVfY3JfbG9ja2VkKGNoaXAsIHJ2W2ldKTsKKwkJaWYgKHIpCisJCQlyZXR1cm4gcjsKKwl9CisKKwlyID0gemRfcmZ3cml0ZV9jcl9sb2NrZWQoY2hpcCwgMHgzYzkwMDApOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJldHVybiB6ZF9pb3dyaXRlMTZhX2xvY2tlZChjaGlwLCBpb3JlcXNfMiwgQVJSQVlfU0laRShpb3JlcXNfMikpOworfQorCitzdGF0aWMgaW50IGFsNzIzMGJfc3dpdGNoX3JhZGlvX29uKHN0cnVjdCB6ZF9yZiAqcmYpCit7CisJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSB6ZF9yZl90b19jaGlwKHJmKTsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMTYgaW9yZXFzW10gPSB7CisJCXsgQ1IxMSwgIDB4MDAgfSwKKwkJeyBDUjI1MSwgMHgzZiB9LAorCX07CisKKwlyZXR1cm4gemRfaW93cml0ZTE2YV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBBUlJBWV9TSVpFKGlvcmVxcykpOworfQorCitzdGF0aWMgaW50IGFsNzIzMGJfc3dpdGNoX3JhZGlvX29mZihzdHJ1Y3QgemRfcmYgKnJmKQoreworCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tdID0geworCQl7IENSMTEsICAweDA0IH0sCisJCXsgQ1IyNTEsIDB4MmYgfSwKKwl9OworCisJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKK30KKworaW50IHpkX3JmX2luaXRfYWw3MjMwYihzdHJ1Y3QgemRfcmYgKnJmKQoreworCXN0cnVjdCB6ZF9jaGlwICpjaGlwID0gemRfcmZfdG9fY2hpcChyZik7CisKKwlpZiAoY2hpcC0+aXNfemQxMjExYikgeworCQlkZXZfZXJyKHpkX2NoaXBfZGV2KGNoaXApLCAiQUw3MjMwQiBpcyBjdXJyZW50bHkgbm90ICIKKwkJCSJzdXBwb3J0ZWQgZm9yIFpEMTIxMUIgZGV2aWNlc1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXJmLT5pbml0X2h3ID0gYWw3MjMwYl9pbml0X2h3OworCXJmLT5zZXRfY2hhbm5lbCA9IGFsNzIzMGJfc2V0X2NoYW5uZWw7CisJcmYtPnN3aXRjaF9yYWRpb19vbiA9IGFsNzIzMGJfc3dpdGNoX3JhZGlvX29uOworCXJmLT5zd2l0Y2hfcmFkaW9fb2ZmID0gYWw3MjMwYl9zd2l0Y2hfcmFkaW9fb2ZmOworCXJmLT5wYXRjaF82bV9iYW5kX2VkZ2UgPSAxOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCA3MmY5MDUyLi4zMTAyN2U1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtMTYsNiArMTYsNyBAQAogICovCiAKICNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CkBAIC0zOSw5ICs0MCwxOSBAQAogCXsgVVNCX0RFVklDRSgweDY4OTEsIDB4YTcyNyksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDkwNzEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCiAJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMDBiKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA3OWIsIDB4MDA0YSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDIwMDApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MTU3ZSwgMHgzMjA0KSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAorCXsgVVNCX0RFVklDRSgweDA1ODYsIDB4MzQwMiksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTEgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjNiLCAweDU2MzApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzBjKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMSB9LAogCS8qIFpEMTIxMUIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMTUpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAogCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAwZCksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9aRDEyMTFCIH0sCisJeyBVU0JfREVWSUNFKDB4MDc5YiwgMHgwMDYyKSwgLmRyaXZlcl9pbmZvID0gREVWSUNFX1pEMTIxMUIgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNTgyLCAweDYwMDMpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfWkQxMjExQiB9LAorCS8qICJEcml2ZXJsZXNzIiBkZXZpY2VzIHRoYXQgbmVlZCBlamVjdGluZyAqLworCXsgVVNCX0RFVklDRSgweDBhY2UsIDB4MjAxMSksIC5kcml2ZXJfaW5mbyA9IERFVklDRV9JTlNUQUxMRVIgfSwKIAl7fQogfTsKIApAQCAtMjYzLDYgKzI3NCwzOSBAQAogCXJldHVybiBidWZmZXI7CiB9CiAKK3N0YXRpYyBpbnQgaGFuZGxlX3ZlcnNpb25fbWlzbWF0Y2goc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHU4IGRldmljZV90eXBlLAorCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWJfZncpCit7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICp1cl9mdyA9IE5VTEw7CisJaW50IG9mZnNldDsKKwlpbnQgciA9IDA7CisJY2hhciBmd19uYW1lWzEyOF07CisKKwlyID0gcmVxdWVzdF9md19maWxlKCZ1cl9mdywKKwkJZ2V0X2Z3X25hbWUoZndfbmFtZSwgc2l6ZW9mKGZ3X25hbWUpLCBkZXZpY2VfdHlwZSwgInVyIiksCisJCSZ1ZGV2LT5kZXYpOworCWlmIChyKQorCQlnb3RvIGVycm9yOworCisJciA9IHVwbG9hZF9jb2RlKHVkZXYsIHVyX2Z3LT5kYXRhLCB1cl9mdy0+c2l6ZSwgRldfU1RBUlRfT0ZGU0VULAorCQlSRUJPT1QpOworCWlmIChyKQorCQlnb3RvIGVycm9yOworCisJb2Zmc2V0ID0gKChFRVBST01fUkVHU19PRkZTRVQgKyBFRVBST01fUkVHU19TSVpFKSAqIHNpemVvZih1MTYpKTsKKwlyID0gdXBsb2FkX2NvZGUodWRldiwgdWJfZnctPmRhdGEgKyBvZmZzZXQsIHViX2Z3LT5zaXplIC0gb2Zmc2V0LAorCQlFMlBfQkFTRV9PRkZTRVQgKyBFRVBST01fUkVHU19TSVpFLCBSRUJPT1QpOworCisJLyogQXQgdGhpcyBwb2ludCwgdGhlIHZlbmRvciBkcml2ZXIgZG93bmxvYWRzIHRoZSB3aG9sZSBmaXJtd2FyZQorCSAqIGltYWdlLCBoYWNrcyBhcm91bmQgd2l0aCB2ZXJzaW9uIElEcywgYW5kIHVwbG9hZHMgaXQgYWdhaW4sCisJICogY29tcGxldGVseSBvdmVyd3JpdGluZyB0aGUgYm9vdCBjb2RlLiBXZSBkbyBub3QgZG8gdGhpcyBoZXJlIGFzCisJICogaXQgaXMgbm90IHJlcXVpcmVkIG9uIGFueSB0ZXN0ZWQgZGV2aWNlcywgYW5kIGl0IGlzIHN1c3BlY3RlZCB0bworCSAqIGNhdXNlIHByb2JsZW1zLiAqLworZXJyb3I6CisJcmVsZWFzZV9maXJtd2FyZSh1cl9mdyk7CisJcmV0dXJuIHI7Cit9CisKIHN0YXRpYyBpbnQgdXBsb2FkX2Zpcm13YXJlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCB1OCBkZXZpY2VfdHlwZSkKIHsKIAlpbnQgcjsKQEAgLTI4MiwxNSArMzI2LDE3IEBACiAKIAlmd19iY2REZXZpY2UgPSBnZXRfd29yZCh1Yl9mdy0+ZGF0YSwgRUVQUk9NX1JFR1NfT0ZGU0VUKTsKIAotCS8qIEZJWE1FOiBkbyB3ZSBoYXZlIGFueSByZWFzb24gdG8gcGVyZm9ybSB0aGUga2x1ZGdlIHRoYXQgdGhlIHZlbmRvcgotCSAqIGRyaXZlciBkb2VzIHdoZW4gdGhlcmUgaXMgYSB2ZXJzaW9uIG1pc21hdGNoPyAodGhlaXIgZHJpdmVyIHVwbG9hZHMKLQkgKiBkaWZmZXJlbnQgZmlybXdhcmVzIGFuZCBzdHVmZikKLQkgKi8KIAlpZiAoZndfYmNkRGV2aWNlICE9IGJjZERldmljZSkgewogCQlkZXZfaW5mbygmdWRldi0+ZGV2LAotCQkJImZpcm13YXJlIGRldmljZSBpZCAlIzA2eCBhbmQgYWN0dWFsIGRldmljZSBpZCAiCi0JCQkiJSMwNnggZGlmZmVyLCBjb250aW51aW5nIGFueXdheVxuIiwKLQkJCWZ3X2JjZERldmljZSwgYmNkRGV2aWNlKTsKKwkJCSJmaXJtd2FyZSB2ZXJzaW9uICUjMDZ4IGFuZCBkZXZpY2UgYm9vdGNvZGUgdmVyc2lvbiAiCisJCQkiJSMwNnggZGlmZmVyXG4iLCBmd19iY2REZXZpY2UsIGJjZERldmljZSk7CisJCWlmIChiY2REZXZpY2UgPD0gMHg0MzEzKQorCQkJZGV2X3dhcm4oJnVkZXYtPmRldiwgImRldmljZSBoYXMgb2xkIGJvb3Rjb2RlLCBwbGVhc2UgIgorCQkJCSJyZXBvcnQgc3VjY2VzcyBvciBmYWlsdXJlXG4iKTsKKworCQlyID0gaGFuZGxlX3ZlcnNpb25fbWlzbWF0Y2godWRldiwgZGV2aWNlX3R5cGUsIHViX2Z3KTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycm9yOwogCX0gZWxzZSB7CiAJCWRldl9kYmdfZigmdWRldi0+ZGV2LAogCQkJImZpcm13YXJlIGRldmljZSBpZCAlIzA2eCBpcyBlcXVhbCB0byB0aGUgIgpAQCAtMzIzLDcgKzM2OSw2IEBACiB7CiAJc3RydWN0IHpkX3VzYl9pbnRlcnJ1cHQgKmludHIgPSAmdXNiLT5pbnRyOwogCi0JWkRfQVNTRVJUKGluX2ludGVycnVwdCgpKTsKIAlzcGluX2xvY2soJmludHItPmxvY2spOwogCWludHItPnJlYWRfcmVnc19lbmFibGVkID0gMDsKIAlzcGluX3VubG9jaygmaW50ci0+bG9jayk7CkBAIC01NDUsMTEgKzU5MCwxMSBAQAogCSAqIGJlIHBhZGRlZC4gVW5hbGlnbmVkIGFjY2VzcyBtaWdodCBhbHNvIGhhcHBlbiBpZiB0aGUgbGVuZ3RoX2luZm8KIAkgKiBzdHJ1Y3R1cmUgaXMgbm90IHByZXNlbnQuCiAJICovCi0JaWYgKGdldF91bmFsaWduZWQoJmxlbmd0aF9pbmZvLT50YWcpID09IFJYX0xFTkdUSF9JTkZPX1RBRykgeworCWlmIChnZXRfdW5hbGlnbmVkKCZsZW5ndGhfaW5mby0+dGFnKSA9PSBjcHVfdG9fbGUxNihSWF9MRU5HVEhfSU5GT19UQUcpKQorCXsKIAkJdW5zaWduZWQgaW50IGwsIGssIG47CiAJCWZvciAoaSA9IDAsIGwgPSAwOzsgaSsrKSB7Ci0JCQlrID0gbGUxNl90b19jcHUoZ2V0X3VuYWxpZ25lZCgKLQkJCQkmbGVuZ3RoX2luZm8tPmxlbmd0aFtpXSkpOworCQkJayA9IGxlMTZfdG9fY3B1KGdldF91bmFsaWduZWQoJmxlbmd0aF9pbmZvLT5sZW5ndGhbaV0pKTsKIAkJCW4gPSBsK2s7CiAJCQlpZiAobiA+IGxlbmd0aCkKIAkJCQlyZXR1cm47CkBAIC02MjEsNyArNjY2LDcgQEAKIAl1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogfQogCi1zdHJ1Y3QgdXJiICphbGxvY191cmIoc3RydWN0IHpkX3VzYiAqdXNiKQorc3RhdGljIHN0cnVjdCB1cmIgKmFsbG9jX3VyYihzdHJ1Y3QgemRfdXNiICp1c2IpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB6ZF91c2JfdG9fdXNiZGV2KHVzYik7CiAJc3RydWN0IHVyYiAqdXJiOwpAQCAtNjQ1LDcgKzY5MCw3IEBACiAJcmV0dXJuIHVyYjsKIH0KIAotdm9pZCBmcmVlX3VyYihzdHJ1Y3QgdXJiICp1cmIpCitzdGF0aWMgdm9pZCBmcmVlX3VyYihzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJaWYgKCF1cmIpCiAJCXJldHVybjsKQEAgLTg2NSw3ICs5MTAsNyBAQAogewogCXVzYl9zZXRfaW50ZmRhdGEodXNiLT5pbnRmLCBOVUxMKTsKIAl1c2JfcHV0X2ludGYodXNiLT5pbnRmKTsKLQltZW1zZXQodXNiLCAwLCBzaXplb2YoKnVzYikpOworCVpEX01FTUNMRUFSKHVzYiwgc2l6ZW9mKCp1c2IpKTsKIAkvKiBGSVhNRTogdXNiX2ludGVycnVwdCwgdXNiX3R4LCB1c2Jfcng/ICovCiB9CiAKQEAgLTkxMSw2ICs5NTYsNTUgQEAKICNkZWZpbmUgcHJpbnRfaWQodWRldikgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKK3N0YXRpYyBpbnQgZWplY3RfaW5zdGFsbGVyKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjID0gJmludGYtPmFsdHNldHRpbmdbMF07CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwl1bnNpZ25lZCBjaGFyICpjbWQ7CisJdTggYnVsa19vdXRfZXA7CisJaW50IHI7CisKKwkvKiBGaW5kIGJ1bGsgb3V0IGVuZHBvaW50ICovCisJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMV0uZGVzYzsKKwlpZiAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX1RZUEVfTUFTSykgPT0gVVNCX0RJUl9PVVQgJiYKKwkgICAgKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkgICAgVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgeworCQlidWxrX291dF9lcCA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCX0gZWxzZSB7CisJCWRldl9lcnIoJnVkZXYtPmRldiwKKwkJCSJ6ZDEyMTFydzogQ291bGQgbm90IGZpbmQgYnVsayBvdXQgZW5kcG9pbnRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwljbWQgPSBremFsbG9jKDMxLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJLyogVVNCIGJ1bGsgY29tbWFuZCBibG9jayAqLworCWNtZFswXSA9IDB4NTU7CS8qIGJ1bGsgY29tbWFuZCBzaWduYXR1cmUgKi8KKwljbWRbMV0gPSAweDUzOwkvKiBidWxrIGNvbW1hbmQgc2lnbmF0dXJlICovCisJY21kWzJdID0gMHg0MjsJLyogYnVsayBjb21tYW5kIHNpZ25hdHVyZSAqLworCWNtZFszXSA9IDB4NDM7CS8qIGJ1bGsgY29tbWFuZCBzaWduYXR1cmUgKi8KKwljbWRbMTRdID0gNjsJLyogY29tbWFuZCBsZW5ndGggKi8KKworCWNtZFsxNV0gPSAweDFiOwkvKiBTQ1NJIGNvbW1hbmQ6IFNUQVJUIFNUT1AgVU5JVCAqLworCWNtZFsxOV0gPSAweDI7CS8qIGVqZWN0IGRpc2MgKi8KKworCWRldl9pbmZvKCZ1ZGV2LT5kZXYsICJFamVjdGluZyB2aXJ0dWFsIGluc3RhbGxlciBtZWRpYS4uLlxuIik7CisJciA9IHVzYl9idWxrX21zZyh1ZGV2LCB1c2Jfc25kYnVsa3BpcGUodWRldiwgYnVsa19vdXRfZXApLAorCQljbWQsIDMxLCBOVUxMLCAyMDAwKTsKKwlrZnJlZShjbWQpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCS8qIEF0IHRoaXMgcG9pbnQsIHRoZSBkZXZpY2UgZGlzY29ubmVjdHMgYW5kIHJlY29ubmVjdHMgd2l0aCB0aGUgcmVhbAorCSAqIElEIG51bWJlcnMuICovCisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHByb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHI7CkBAIC05MTksNiArMTAxMyw5IEBACiAKIAlwcmludF9pZCh1ZGV2KTsKIAorCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBERVZJQ0VfSU5TVEFMTEVSKQorCQlyZXR1cm4gZWplY3RfaW5zdGFsbGVyKGludGYpOworCiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX0xPVzoKIAljYXNlIFVTQl9TUEVFRF9GVUxMOgpAQCAtOTg0LDYgKzEwODEsMTEgQEAKIAlzdHJ1Y3QgemRfbWFjICptYWMgPSB6ZF9uZXRkZXZfbWFjKG5ldGRldik7CiAJc3RydWN0IHpkX3VzYiAqdXNiID0gJm1hYy0+Y2hpcC51c2I7CiAKKwkvKiBFaXRoZXIgc29tZXRoaW5nIHJlYWxseSBiYWQgaGFwcGVuZWQsIG9yIHdlJ3JlIGp1c3QgZGVhbGluZyB3aXRoCisJICogYSBERVZJQ0VfSU5TVEFMTEVSLiAqLworCWlmIChuZXRkZXYgPT0gTlVMTCkKKwkJcmV0dXJuOworCiAJZGV2X2RiZ19mKHpkX3VzYl9kZXYodXNiKSwgIlxuIik7CiAKIAl6ZF9uZXRkZXZfZGlzY29ubmVjdChuZXRkZXYpOwpAQCAtOTk5LDcgKzExMDEsNiBAQAogCSAqLwogCXVzYl9yZXNldF9kZXZpY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSk7CiAKLQkvKiBJZiBzb21lYm9keSBzdGlsbCB3YWl0cyBvbiB0aGlzIGxvY2sgbm93LCB0aGlzIGlzIGFuIGVycm9yLiAqLwogCXpkX25ldGRldl9mcmVlKG5ldGRldik7CiAJZGV2X2RiZygmaW50Zi0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKaW5kZXggZDY0MjAyOC4uZGVkMzlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmgKQEAgLTMwLDYgKzMwLDcgQEAKIGVudW0gZGV2aWNldHlwZSB7CiAJREVWSUNFX1pEMTIxMSAgPSAwLAogCURFVklDRV9aRDEyMTFCID0gMSwKKwlERVZJQ0VfSU5TVEFMTEVSID0gMiwKIH07CiAKIGVudW0gZW5kcG9pbnRzIHsKQEAgLTczLDE3ICs3NCwxNyBAQAogc3RydWN0IHVzYl9yZXFfcmVhZF9yZWdzIHsKIAlfX2xlMTYgaWQ7CiAJX19sZTE2IGFkZHJbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHJlZ19kYXRhIHsKIAlfX2xlMTYgYWRkcjsKIAlfX2xlMTYgdmFsdWU7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHVzYl9yZXFfd3JpdGVfcmVncyB7CiAJX19sZTE2IGlkOwogCXN0cnVjdCByZWdfZGF0YSByZWdfd3JpdGVzWzBdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CiAKIGVudW0gewogCVJGX0lGX0xFID0gMHgwMiwKQEAgLTEwMCw3ICsxMDEsNyBAQAogCS8qIFJGMjU5NTogMjQgKi8KIAlfX2xlMTYgYml0X3ZhbHVlc1swXTsKIAkvKiAoQ1IyMDMgJiB+KFJGX0lGX0xFIHwgUkZfQ0xLIHwgUkZfREFUQSkpIHwgKGJpdCA/IFJGX0RBVEEgOiAwKSAqLwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CiAKIC8qIFVTQiBpbnRlcnJ1cHQgKi8KIApAQCAtMTE3LDEyICsxMTgsMTIgQEAKIHN0cnVjdCB1c2JfaW50X2hlYWRlciB7CiAJdTggdHlwZTsJLyogbXVzdCBhbHdheXMgYmUgMSAqLwogCXU4IGlkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CiAKIHN0cnVjdCB1c2JfaW50X3JlZ3MgewogCXN0cnVjdCB1c2JfaW50X2hlYWRlciBoZHI7CiAJc3RydWN0IHJlZ19kYXRhIHJlZ3NbMF07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworfTsKIAogc3RydWN0IHVzYl9pbnRfcmV0cnlfZmFpbCB7CiAJc3RydWN0IHVzYl9pbnRfaGVhZGVyIGhkcjsKQEAgLTEzMCw3ICsxMzEsNyBAQAogCXU4IF9kdW1teTsKIAl1OCBhZGRyW0VUSF9BTEVOXTsKIAl1OCBpYnNzX3dha2V1cF9kZXN0OwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKK307CiAKIHN0cnVjdCByZWFkX3JlZ3NfaW50IHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBjb21wbGV0aW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCA4NDU5YTE4Mi4uYTRjNDk1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKKysrIGIvZHJpdmVycy9uZXQveWVsbG93ZmluLmMKQEAgLTI0LDggKzI0LDggQEAKICovCiAKICNkZWZpbmUgRFJWX05BTUUJInllbGxvd2ZpbiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMCIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIkp1biAyNywgMjAwNiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjIuMSIKKyNkZWZpbmUgRFJWX1JFTERBVEUJIlNlcCAxMSwgMjAwNiIKIAogI2RlZmluZSBQRlggRFJWX05BTUUgIjogIgogCkBAIC0xMzcsNyArMTM3LDcgQEAKIEkuIEJvYXJkIENvbXBhdGliaWxpdHkKIAogVGhpcyBkZXZpY2UgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciB0aGUgUGFja2V0IEVuZ2luZXMgIlllbGxvd2ZpbiIgR2lnYWJpdAotRXRoZXJuZXQgYWRhcHRlci4gIFRoZSBHLU5JQyA2NC1iaXQgUENJIGNhcmQgaXMgc3VwcG9ydGVkLCBhcyB3ZWxsIGFzIHRoZSAKK0V0aGVybmV0IGFkYXB0ZXIuICBUaGUgRy1OSUMgNjQtYml0IFBDSSBjYXJkIGlzIHN1cHBvcnRlZCwgYXMgd2VsbCBhcyB0aGUKIFN5bWJpb3MgNTNDODg1RSBkdWFsIGZ1bmN0aW9uIGNoaXAuCiAKIElJLiBCb2FyZC1zcGVjaWZpYyBzZXR0aW5ncwpAQCAtMjA4LDcgKzIwOCw3IEBACiBTZWUgUGFja2V0IEVuZ2luZXMgY29uZmlkZW50aWFsIGFwcGVuZGl4IChwcm90b3R5cGUgY2hpcHMgb25seSkuCiAqLwogCi0MCisKIAogZW51bSBjYXBhYmlsaXR5X2ZsYWdzIHsKIAlIYXNNSUk9MSwgRnVsbFR4U3RhdHVzPTIsIElzR2lnYWJpdD00LCBIYXNNdWx0aWNhc3RCdWc9OCwgRnVsbFJ4U3RhdHVzPTE2LApAQCAtMzU2LDcgKzM1Niw3IEBACiBzdGF0aWMgaW50IHllbGxvd2Zpbl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqeWVsbG93ZmluX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIHNldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHM7CiAKIAogc3RhdGljIGludCBfX2RldmluaXQgeWVsbG93ZmluX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LApAQCAtMzc3LDcgKzM3Nyw3IEBACiAjZWxzZQogCWludCBiYXIgPSAxOwogI2VuZGlmCi0JCisKIC8qIHdoZW4gYnVpbHQgaW50byB0aGUga2VybmVsLCB3ZSBvbmx5IHByaW50IHZlcnNpb24gaWYgZGV2aWNlIGlzIGZvdW5kICovCiAjaWZuZGVmIE1PRFVMRQogCXN0YXRpYyBpbnQgcHJpbnRlZF92ZXJzaW9uOwpAQCAtNTA4LDExICs1MDgsMTEgQEAKIAl9CiAKIAlmaW5kX2NudCsrOwotCQorCiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfdW5tYXBfc3RhdHVzOgotICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFNUQVRVU19UT1RBTF9TSVpFLCBucC0+dHhfc3RhdHVzLCAKKyAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBTVEFUVVNfVE9UQUxfU0laRSwgbnAtPnR4X3N0YXR1cywKIAkJbnAtPnR4X3N0YXR1c19kbWEpOwogZXJyX291dF91bm1hcF9yeDoKICAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBSWF9UT1RBTF9TSVpFLCBucC0+cnhfcmluZywgbnAtPnJ4X3JpbmdfZG1hKTsKQEAgLTU2OSw3ICs1NjksNyBAQAogCXJldHVybjsKIH0KIAotDAorCiBzdGF0aWMgaW50IHllbGxvd2Zpbl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHllbGxvd2Zpbl9wcml2YXRlICp5cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC02NzMsNyArNjczLDcgQEAKIAkJCQkgICBkZXYtPm5hbWUsIHlwLT5waHlzWzBdLCBibXNyLCBscGEpOwogCiAJCXlwLT5mdWxsX2R1cGxleCA9IG1paV9kdXBsZXgoeXAtPmR1cGxleF9sb2NrLCBuZWdvdGlhdGVkKTsKLQkJCQorCiAJCWlvd3JpdGUxNigweDEwMUMgfCAoeXAtPmZ1bGxfZHVwbGV4ID8gMiA6IDApLCBpb2FkZHIgKyBDbmZnKTsKIAogCQlpZiAoYm1zciAmIEJNU1JfTFNUQVRVUykKQEAgLTc5MiwxMCArNzkyLDEwIEBACiAJCQkvKiBPbSBwYWRlIHVtbW1tbS4uLiAqLwogCQkJeXAtPnR4X3Jpbmdbal0uYWRkciA9IGNwdV90b19sZTMyKHlwLT50eF9zdGF0dXNfZG1hICsKIAkJCQlpKnNpemVvZihzdHJ1Y3QgdHhfc3RhdHVzX3dvcmRzKSArCi0JCQkJJih5cC0+dHhfc3RhdHVzWzBdLnR4X2VycnMpIC0gCisJCQkJJih5cC0+dHhfc3RhdHVzWzBdLnR4X2VycnMpIC0KIAkJCQkmKHlwLT50eF9zdGF0dXNbMF0pKTsKIAkJfQotCQl5cC0+dHhfcmluZ1tqXS5icmFuY2hfYWRkciA9IGNwdV90b19sZTMyKHlwLT50eF9yaW5nX2RtYSArIAorCQl5cC0+dHhfcmluZ1tqXS5icmFuY2hfYWRkciA9IGNwdV90b19sZTMyKHlwLT50eF9yaW5nX2RtYSArCiAJCQkoKGorMSklKDIqVFhfUklOR19TSVpFKSkqc2l6ZW9mKHN0cnVjdCB5ZWxsb3dmaW5fZGVzYykpOwogCX0KIAkvKiBXcmFwIHJpbmcgKi8KQEAgLTgzNSw3ICs4MzUsNyBAQAogCXlwLT50eF9za2J1ZmZbZW50cnldID0gc2tiOwogCiAjaWZkZWYgTk9fVFhTVEFUUwotCXlwLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlMzIocGNpX21hcF9zaW5nbGUoeXAtPnBjaV9kZXYsIAorCXlwLT50eF9yaW5nW2VudHJ5XS5hZGRyID0gY3B1X3RvX2xlMzIocGNpX21hcF9zaW5nbGUoeXAtPnBjaV9kZXYsCiAJCXNrYi0+ZGF0YSwgbGVuLCBQQ0lfRE1BX1RPREVWSUNFKSk7CiAJeXAtPnR4X3JpbmdbZW50cnldLnJlc3VsdF9zdGF0dXMgPSAwOwogCWlmIChlbnRyeSA+PSBUWF9SSU5HX1NJWkUtMSkgewpAQCAtODUxLDkgKzg1MSw5IEBACiAJeXAtPmN1cl90eCsrOwogI2Vsc2UKIAl5cC0+dHhfcmluZ1tlbnRyeTw8MV0ucmVxdWVzdF9jbnQgPSBsZW47Ci0JeXAtPnR4X3JpbmdbZW50cnk8PDFdLmFkZHIgPSBjcHVfdG9fbGUzMihwY2lfbWFwX3NpbmdsZSh5cC0+cGNpX2RldiwgCisJeXAtPnR4X3JpbmdbZW50cnk8PDFdLmFkZHIgPSBjcHVfdG9fbGUzMihwY2lfbWFwX3NpbmdsZSh5cC0+cGNpX2RldiwKIAkJc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpKTsKLQkvKiBUaGUgaW5wdXRfbGFzdCAoc3RhdHVzLXdyaXRlKSBjb21tYW5kIGlzIGNvbnN0YW50LCBidXQgd2UgbXVzdCAKKwkvKiBUaGUgaW5wdXRfbGFzdCAoc3RhdHVzLXdyaXRlKSBjb21tYW5kIGlzIGNvbnN0YW50LCBidXQgd2UgbXVzdAogCSAgIHJld3JpdGUgdGhlIHN1YnNlcXVlbnQgJ3N0b3AnIGNvbW1hbmQuICovCiAKIAl5cC0+Y3VyX3R4Kys7CkBAIC05MDUsNyArOTA1LDcgQEAKIAogCXlwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpb2FkZHIgPSB5cC0+YmFzZTsKLQkKKwogCXNwaW5fbG9jayAoJnlwLT5sb2NrKTsKIAogCWRvIHsKQEAgLTk5Myw4ICs5OTMsOCBAQAogCQkJCQl5cC0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCX0KIAkJCQkvKiBGcmVlIHRoZSBvcmlnaW5hbCBza2IuICovCi0JCQkJcGNpX3VubWFwX3NpbmdsZSh5cC0+cGNpX2RldiwgCi0JCQkJCXlwLT50eF9yaW5nW2VudHJ5PDwxXS5hZGRyLCBza2ItPmxlbiwgCisJCQkJcGNpX3VubWFwX3NpbmdsZSh5cC0+cGNpX2RldiwKKwkJCQkJeXAtPnR4X3JpbmdbZW50cnk8PDFdLmFkZHIsIHNrYi0+bGVuLAogCQkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQkJCXlwLT50eF9za2J1ZmZbZW50cnldID0gMDsKQEAgLTEwNzMsNyArMTA3Myw3IEBACiAJCQl5cC0+cnhfYnVmX3N6LCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlkZXNjX3N0YXR1cyA9IGxlMzJfdG9fY3B1KGRlc2MtPnJlc3VsdF9zdGF0dXMpID4+IDE2OwogCQlidWZfYWRkciA9IHJ4X3NrYi0+ZGF0YTsKLQkJZGF0YV9zaXplID0gKGxlMzJfdG9fY3B1KGRlc2MtPmRiZG1hX2NtZCkgLSAKKwkJZGF0YV9zaXplID0gKGxlMzJfdG9fY3B1KGRlc2MtPmRiZG1hX2NtZCkgLQogCQkJbGUzMl90b19jcHUoZGVzYy0+cmVzdWx0X3N0YXR1cykpICYgMHhmZmZmOwogCQlmcmFtZV9zdGF0dXMgPSBsZTE2X3RvX2NwdShnZXRfdW5hbGlnbmVkKChzMTYqKSYoYnVmX2FkZHJbZGF0YV9zaXplIC0gMl0pKSk7CiAJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQpAQCAtMTEwOSw3ICsxMTA5LDcgQEAKIAkJfSBlbHNlIGlmICgoeXAtPmZsYWdzICYgSGFzTUFDQWRkckJ1ZykgICYmCiAJCQltZW1jbXAobGUzMl90b19jcHUoeXAtPnJ4X3JpbmdfZG1hICsKIAkJCQllbnRyeSpzaXplb2Yoc3RydWN0IHllbGxvd2Zpbl9kZXNjKSksCi0JCQkJZGV2LT5kZXZfYWRkciwgNikgIT0gMCAmJiAKKwkJCQlkZXYtPmRldl9hZGRyLCA2KSAhPSAwICYmCiAJCQltZW1jbXAobGUzMl90b19jcHUoeXAtPnJ4X3JpbmdfZG1hICsKIAkJCQllbnRyeSpzaXplb2Yoc3RydWN0IHllbGxvd2Zpbl9kZXNjKSksCiAJCQkJIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIsIDYpICE9IDApIHsKQEAgLTExMzUsOSArMTEzNSw5IEBACiAJCQkgICB3aXRob3V0IGNvcHlpbmcgdG8gYSBwcm9wZXJseSBzaXplZCBza2J1ZmYuICovCiAJCQlpZiAocGt0X2xlbiA+IHJ4X2NvcHlicmVhaykgewogCQkJCXNrYl9wdXQoc2tiID0gcnhfc2tiLCBwa3RfbGVuKTsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKHlwLT5wY2lfZGV2LCAKLQkJCQkJeXAtPnJ4X3JpbmdbZW50cnldLmFkZHIsIAotCQkJCQl5cC0+cnhfYnVmX3N6LCAKKwkJCQlwY2lfdW5tYXBfc2luZ2xlKHlwLT5wY2lfZGV2LAorCQkJCQl5cC0+cnhfcmluZ1tlbnRyeV0uYWRkciwKKwkJCQkJeXAtPnJ4X2J1Zl9zeiwKIAkJCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCQl5cC0+cnhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJCQl9IGVsc2UgewpAQCAtMTMwNyw4ICsxMzA3LDYgQEAKIAkvKiBTdG9wIHRoZSBSeCBwcm9jZXNzIHRvIGNoYW5nZSBhbnkgdmFsdWUuICovCiAJaW93cml0ZTE2KGNmZ192YWx1ZSAmIH4weDEwMDAsIGlvYWRkciArIENuZmcpOwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCi0JCS8qIFVuY29uZGl0aW9uYWxseSBsb2cgbmV0IHRhcHMuICovCi0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IFByb21pc2N1b3VzIG1vZGUgZW5hYmxlZC5cbiIsIGRldi0+bmFtZSk7CiAJCWlvd3JpdGUxNigweDAwMEYsIGlvYWRkciArIEFkZHJNb2RlKTsKIAl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gNjQpICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIGZpbHRlciB3ZWxsLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCkBAIC0xMzU0LDcgKzEzNTIsNyBAQAogCXN0cmNweShpbmZvLT5idXNfaW5mbywgcGNpX25hbWUobnAtPnBjaV9kZXYpKTsKIH0KIAotc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBldGh0b29sX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZXRodG9vbF9vcHMgPSB7CiAJLmdldF9kcnZpbmZvID0geWVsbG93ZmluX2dldF9kcnZpbmZvCiB9OwogCkBAIC0xNDA1LDcgKzE0MDMsNyBAQAogCUJVR19PTighZGV2KTsKIAlucCA9IG5ldGRldl9wcml2KGRldik7CiAKLSAgICAgICAgcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBTVEFUVVNfVE9UQUxfU0laRSwgbnAtPnR4X3N0YXR1cywgCisgICAgICAgIHBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgU1RBVFVTX1RPVEFMX1NJWkUsIG5wLT50eF9zdGF0dXMsCiAJCW5wLT50eF9zdGF0dXNfZG1hKTsKIAlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFJYX1RPVEFMX1NJWkUsIG5wLT5yeF9yaW5nLCBucC0+cnhfcmluZ19kbWEpOwogCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVFhfVE9UQUxfU0laRSwgbnAtPnR4X3JpbmcsIG5wLT50eF9yaW5nX2RtYSk7CkBAIC0xNDM0LDcgKzE0MzIsNyBAQAogI2lmZGVmIE1PRFVMRQogCXByaW50ayh2ZXJzaW9uKTsKICNlbmRpZgotCXJldHVybiBwY2lfbW9kdWxlX2luaXQgKCZ5ZWxsb3dmaW5fZHJpdmVyKTsKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmeWVsbG93ZmluX2RyaXZlcik7CiB9CiAKIApAQCAtMTQ0Niw3ICsxNDQ0LDcgQEAKIAogbW9kdWxlX2luaXQoeWVsbG93ZmluX2luaXQpOwogbW9kdWxlX2V4aXQoeWVsbG93ZmluX2NsZWFudXApOwotDAorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogIGNvbXBpbGUtY29tbWFuZDogImdjYyAtRE1PRFVMRSAtV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1PNiAtYyB5ZWxsb3dmaW4uYyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCA5ZjAyOTFmLi42NTZkNWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC03NSw3ICs3NSw3IEBACiAgICAtIE5vdyBzdXJ2aXZlcyB1bnBsdWdnaW5nL3JlcGx1Z2dpbmcgY2FibGUuCiAKICAgIFNvbWUgY29kZSB3YXMgdGFrZW4gZnJvbSB3YXZlbGFuX2NzLgotICAgCisKICAgIFRlc3RlZCBvbiBhIHZpbnRhZ2UgWmVuaXRoIFotTm90ZSA0MzNMbnArLiBQcm9iYWJseSBicm9rZW4gb24KICAgIGFueXRoaW5nIGVsc2UuIFRlc3RlcnMgKGFuZCBkZXRhaWxlZCBidWcgcmVwb3J0cykgYXJlIHdlbGNvbWUgOi0pLgogCkBAIC0xNzEsNyArMTcxLDcgQEAKIHsKIAlzdHJ1Y3Qgem5ldF9wcml2YXRlICp6bmV0ID0gZGV2LT5wcml2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCQorCiAJaWYgKHJlcXVlc3RfaXJxIChkZXYtPmlycSwgJnpuZXRfaW50ZXJydXB0LCAwLCAiWk5ldCIsIGRldikpCiAJCWdvdG8gZmFpbGVkOwogCWlmIChyZXF1ZXN0X2RtYSAoem5ldC0+cnhfZG1hLCAiWk5ldCByeCIpKQpAQCAtMjA1LDcgKzIwNSw3IEBACiB7CiAJc3RydWN0IHpuZXRfcHJpdmF0ZSAqem5ldCA9IGRldi0+cHJpdjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQkKKwogCXJlbGVhc2VfcmVnaW9uICh6bmV0LT5zaWFfYmFzZSwgem5ldC0+c2lhX3NpemUpOwogCXJlbGVhc2VfcmVnaW9uIChkZXYtPmJhc2VfYWRkciwgem5ldC0+aW9fc2l6ZSk7CiAJZmxhZ3MgPSBjbGFpbV9kbWFfbG9jaygpOwpAQCAtMjI5LDcgKzIyOSw3IEBACiAJCXYgPSBpbmIoem5ldC0+c2lhX2Jhc2UgKyAxKSB8IDB4ODQ7CiAJZWxzZQogCQl2ID0gaW5iKHpuZXQtPnNpYV9iYXNlICsgMSkgJiB+MHg4NDsKLQkJCisKIAlvdXRiKHYsIHpuZXQtPnNpYV9iYXNlKzEpOyAvKiBUdXJuIG9uL29mZiBMQU4gcG93ZXIgKGJpdCAyKS4gKi8KIH0KIApAQCAtMjQyLDcgKzI0Miw3IEBACiAJc3RydWN0IGk4MjU5M19jb25mX2Jsb2NrICpjZmJsayA9ICZ6bmV0LT5pNTkzX2luaXQ7CiAKIAltZW1zZXQoY2ZibGssIDB4MDAsIHNpemVvZihzdHJ1Y3QgaTgyNTkzX2NvbmZfYmxvY2spKTsKLQkKKwogICAgICAgICAvKiBUaGUgY29uZmlndXJhdGlvbiBibG9jay4gIFdoYXQgYW4gdW5kb2N1bWVudGVkIG5pZ2h0bWFyZS4KIAkgICBUaGUgZmlyc3Qgc2V0IG9mIHZhbHVlcyBhcmUgdGhvc2Ugc3VnZ2VzdGVkICh3aXRob3V0IGV4cGxhbmF0aW9uKQogCSAgIGZvciBldGhlcm5ldCBpbiB0aGUgSW50ZWwgODI1ODYgZGF0YWJvb2suICBUaGUgcmVzdCBhcHBlYXIgdG8gYmUKQEAgLTI1MSw3ICsyNTEsNyBAQAogCiAJLyogbWF6IDogUmV3cml0dGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSB3YW52ZWxhbiBpbmNsdWRlcy4KIAkgICBBdCBsZWFzdCB3ZSBoYXZlIG5hbWVzLCBub3QganVzdCBibGluZCB2YWx1ZXMgKi8KLQkKKwogCS8qIEJ5dGUgMCAqLwogCWNmYmxrLT5maWZvX2xpbWl0ID0gMTA7CS8qID0gMTYgQiByeCBhbmQgODAgQiB0eCBmaWZvIHRocmVzaG9sZHMgKi8KIAljZmJsay0+Zm9yZ25lc2kgPSAwOwkvKiAwPTgyQzUwMSwgMT1BTUQ3OTkyQiBjb21wYXRpYmlsaXR5ICovCkBAIC0yNjksMjMgKzI2OSwyMyBAQAogCWNmYmxrLT5hY2xvYyA9IDE7CS8qIERpc2FibGUgc291cmNlIGFkZHIgaW5zZXJ0aW9uIGJ5IGk4MjU5MyAqLwogCWNmYmxrLT5wcmVhbWJfbGVuID0gMjsJLyogOCBieXRlcyBwcmVhbWJsZSAqLwogCWNmYmxrLT5sb29wYmFjayA9IDA7CS8qIExvb3BiYWNrIG9mZiAqLwotICAKKwogCS8qIEJ5dGUgMyAqLwogCWNmYmxrLT5saW5fcHJpbyA9IDA7CS8qIERlZmF1bHQgcHJpb3JpdGllcyAmIGJhY2tvZmYgbWV0aG9kcy4gKi8KIAljZmJsay0+dGJvZnN0b3AgPSAwOwogCWNmYmxrLT5leHBfcHJpbyA9IDA7CiAJY2ZibGstPmJvZl9tZXQgPSAwOwotICAKKwogCS8qIEJ5dGUgNCAqLwogCWNmYmxrLT5pZnJtX3NwYyA9IDY7CS8qIDk2IGJpdCB0aW1lcyBpbnRlcmZyYW1lIHNwYWNpbmcgKi8KLQkKKwogCS8qIEJ5dGUgNSAqLwogCWNmYmxrLT5zbG90dGltX2xvdyA9IDA7IC8qIDUxMiBiaXQgdGltZXMgc2xvdCB0aW1lIChsb3cpICovCi0JCisKIAkvKiBCeXRlIDYgKi8KIAljZmJsay0+c2xvdHRpbV9oaSA9IDI7CS8qIDUxMiBiaXQgdGltZXMgc2xvdCB0aW1lIChoaWdoKSAqLwogCWNmYmxrLT5tYXhfcmV0ciA9IDE1OwkvKiAxNSBjb2xsaXNpb25zIHJldHJpZXMgKi8KLQkKKwogCS8qIEJ5dGUgNyAqLwogCWNmYmxrLT5wcm1pc2MgPSAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPyAxIDogMCk7IC8qIFByb21pc2N1b3VzIG1vZGUgKi8KIAljZmJsay0+YmNfZGlzID0gMDsJLyogRW5hYmxlIGJyb2FkY2FzdCByZWNlcHRpb24gKi8KQEAgLTI5MywxNSArMjkzLDE1IEBACiAJY2ZibGstPm5vY3JjX2lucyA9IDA7CS8qIGk4MjU5MyBnZW5lcmF0ZXMgQ1JDICovCiAJY2ZibGstPmNyY18xNjMyID0gMDsJLyogMzItYml0IEF1dG9kaW4tSUkgQ1JDICovCiAJY2ZibGstPmNyc19jZHQgPSAwOwkvKiBDRCBub3QgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgQ1MgKi8KLQkKKwogCS8qIEJ5dGUgOCAqLwogCWNmYmxrLT5jc19maWx0ZXIgPSAwOyAgCS8qIENTIGlzIHJlY29nbml6ZWQgaW1tZWRpYXRlbHkgKi8KIAljZmJsay0+Y3JzX3NyYyA9IDA7CS8qIEV4dGVybmFsIGNhcnJpZXIgc2Vuc2UgKi8KIAljZmJsay0+Y2RfZmlsdGVyID0gMDsgIAkvKiBDRCBpcyByZWNvZ25pemVkIGltbWVkaWF0ZWx5ICovCi0JCisKIAkvKiBCeXRlIDkgKi8KIAljZmJsay0+bWluX2ZyX2xlbiA9IEVUSF9aTEVOID4+IDI7IC8qIE1pbmltdW0gZnJhbWUgbGVuZ3RoICovCi0JCisKIAkvKiBCeXRlIEEgKi8KIAljZmJsay0+bG5nX3R5cCA9IDE7CS8qIFR5cGUvbGVuZ3RoIGNoZWNrcyBPRkYgKi8KIAljZmJsay0+bG5nX2ZsZCA9IDE7IAkvKiBEaXNhYmxlIDgwMi4zIGxlbmd0aCBmaWVsZCBjaGVjayAqLwpAQCAtMzExLDE1ICszMTEsMTUgQEAKIAljZmJsay0+dHhfamFiYmVyID0gMDsJLyogRGlzYWJsZSBqYWJiZXIgamFtIHNlcXVlbmNlICovCiAJY2ZibGstPmhhc2hfMSA9IDE7IAkvKiBVc2UgYml0cyAwLTUgaW4gbWMgYWRkcmVzcyBoYXNoICovCiAJY2ZibGstPmxicGtwb2wgPSAwOyAJLyogTG9vcGJhY2sgcGluIGFjdGl2ZSBoaWdoICovCi0JCisKIAkvKiBCeXRlIEIgKi8KIAljZmJsay0+ZmR4ID0gMDsJCS8qIERpc2FibGUgZnVsbCBkdXBsZXggb3BlcmF0aW9uICovCi0JCisKIAkvKiBCeXRlIEMgKi8KIAljZmJsay0+ZHVtbXlfNiA9IDB4M2Y7IAkvKiBhbGwgb25lcywgRGVmYXVsdCBtdWx0aWNhc3QgYWRkcmVzc2VzICYgYmFja29mZi4gKi8KIAljZmJsay0+bXVsdF9pYSA9IDA7CS8qIE5vIG11bHRpcGxlIGluZGl2aWR1YWwgYWRkcmVzc2VzICovCiAJY2ZibGstPmRpc19ib2YgPSAwOwkvKiBEaXNhYmxlIHRoZSBiYWNrb2ZmIGFsZ29yaXRobSA/ISAqLwotCQorCiAJLyogQnl0ZSBEICovCiAJY2ZibGstPmR1bW15XzEgPSAxOyAJLyogc2V0IHRvIDEgKi8KIAljZmJsay0+dHhfaWZzX3JldHJpZyA9IDM7IC8qIEhtbS4uLiBEaXNhYmxlZCAqLwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJY2ZibGstPnJjdl9tb24gPSAwOwkvKiBNb25pdG9yIG1vZGUgZGlzYWJsZWQgKi8KIAljZmJsay0+ZnJhZ19hY3B0ID0gMDsJLyogRG8gbm90IGFjY2VwdCBmcmFnbWVudHMgKi8KIAljZmJsay0+dHN0cnR0cnMgPSAwOwkvKiBObyBzdGFydCB0cmFuc21pc3Npb24gdGhyZXNob2xkICovCi0JCisKIAkvKiBCeXRlIEUgKi8KIAljZmJsay0+ZnJldHggPSAxOwkvKiBGSUZPIGF1dG9tYXRpYyByZXRyYW5zbWlzc2lvbiAqLwogCWNmYmxrLT5ydW50X2VvcCA9IDA7CS8qIGRyb3AgInJ1bnQiIHBhY2tldHMgKi8KQEAgLTM1MCw3ICszNTAsNyBAQAogCQkJcHJpbnRrICgiJTAyWCAiLCBjW2ldKTsKIAkJcHJpbnRrICgiXG4iKTsKIAl9Ci0JCisKIAkqem5ldC0+dHhfY3VyKysgPSBzaXplb2Yoc3RydWN0IGk4MjU5M19jb25mX2Jsb2NrKTsKIAltZW1jcHkoem5ldC0+dHhfY3VyLCBjZmJsaywgc2l6ZW9mKHN0cnVjdCBpODI1OTNfY29uZl9ibG9jaykpOwogCXpuZXQtPnR4X2N1ciArPSBzaXplb2Yoc3RydWN0IGk4MjU5M19jb25mX2Jsb2NrKS8yOwpAQCAtMzU5LDcgKzM1OSw3IEBACiAJLyogWFhYIEZJWE1FIG1heiA6IEFkZCBtdWx0aWNhc3QgYWRkcmVzc2VzIGhlcmUsIHNvIGhhdmluZyBhCiAJICogbXVsdGljYXN0IGFkZHJlc3MgY29uZmlndXJlZCBpc24ndCBlcXVhbCB0byBJRkZfQUxMTVVMVEkgKi8KIH0KLQwKKwogLyogVGhlIFotTm90ZSBwcm9iZSBpcyBwcmV0dHkgZWFzeS4gIFRoZSBORVRJREJMSyBleGlzdHMgaW4gdGhlIHNhZmUtdG8tcHJvYmUKICAgIEJJT1MgYXJlYS4gIFdlIGp1c3Qgc2NhbiBmb3IgdGhlIHNpZ25hdHVyZSwgYW5kIHB1bGwgdGhlIHZpdGFsIHBhcmFtZXRlcnMKICAgIG91dCBvZiB0aGUgc3RydWN0dXJlLiAqLwpAQCAtNDM4LDcgKzQzOCw3IEBACiAJCXByaW50ayAoS0VSTl9XQVJOSU5HICJ0eC9yeCBjcm9zc2luZyBETUEgZnJvbnRpZXJzLCBnaXZpbmcgdXBcbiIpOwogCQlnb3RvIGZyZWVfdHg7CiAJfQotCQorCiAJem5ldC0+cnhfZW5kID0gem5ldC0+cnhfc3RhcnQgKyBSWF9CVUZfU0laRS8yOwogCXpuZXQtPnR4X2J1Zl9sZW4gPSBUWF9CVUZfU0laRS8yOwogCXpuZXQtPnR4X2VuZCA9IHpuZXQtPnR4X3N0YXJ0ICsgem5ldC0+dHhfYnVmX2xlbjsKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLQwKKwogc3RhdGljIGludCB6bmV0X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CkBAIC00ODEsNyArNDgxLDcgQEAKIAl9CiAKIAl6bmV0X3RyYW5zY2VpdmVyX3Bvd2VyIChkZXYsIDEpOwotCQorCiAJLyogQWNjb3JkaW5nIHRvIHRoZSBDcnlud3IgZHJpdmVyIHdlIHNob3VsZCB3YWl0IDUwIG1zZWMuIGZvciB0aGUKIAkgICBMQU4gY2xvY2sgdG8gc3RhYmlsaXplLiAgTXkgZXhwZXJpbWVudHMgaW5kaWNhdGVzIHRoYXQgdGhlICc1OTMgY2FuCiAJICAgYmUgaW5pdGlhbGl6ZWQgaW1tZWRpYXRlbHkuICBUaGUgZGVsYXkgaXMgcHJvYmFibHkgbmVlZGVkIGZvciB0aGUKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCSAqIGFsbCwgZXZlbiBpZiB0aGUgbWVzc2FnZSBpcyBjb21wbGV0bHkgaGFybWxlc3Mgb24gbXkKIAkgKiBzZXR1cC4gKi8KIAltZGVsYXkgKDUwKTsKLQkKKwogCS8qIFRoaXMgZm9sbG93cyB0aGUgcGFja2V0IGRyaXZlcidzIGxlYWQsIGFuZCBjaGVja3MgZm9yIHN1Y2Nlc3MuICovCiAJaWYgKGluYihpb2FkZHIpICE9IDB4MTAgJiYgaW5iKGlvYWRkcikgIT0gMHgwMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFByb2JsZW0gdHVybmluZyBvbiB0aGUgdHJhbnNjZWl2ZXIgcG93ZXIuXG4iLApAQCAtNTQ3LDkgKzU0Nyw5IEBACiAJCQlyZXR1cm4gMDsKIAkJbGVuZ3RoID0gRVRIX1pMRU47CiAJfQotCQorCiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKLQkKKwogCS8qIENoZWNrIHRoYXQgdGhlIHBhcnQgaGFzbid0IHJlc2V0IGl0c2VsZiwgcHJvYmFibHkgZnJvbSBzdXNwZW5kLiAqLwogCW91dGIoQ1IwX1NUQVRVU18wLCBpb2FkZHIpOwogCWlmIChpbncoaW9hZGRyKSA9PSAweDAwMTAgJiYKQEAgLTU2NSw3ICs1NjUsNyBAQAogCQl1bnNpZ25lZCBjaGFyICpidWYgPSAodm9pZCAqKXNrYi0+ZGF0YTsKIAkJdXNob3J0ICp0eF9saW5rID0gem5ldC0+dHhfY3VyIC0gMTsKIAkJdXNob3J0IHJuZF9sZW4gPSAobGVuZ3RoICsgMSk+PjE7Ci0JCQorCiAJCXpuZXQtPnN0YXRzLnR4X2J5dGVzKz1sZW5ndGg7CiAKIAkJaWYgKHpuZXQtPnR4X2N1ciA+PSB6bmV0LT50eF9lbmQpCkBAIC01OTcsNyArNTk3LDcgQEAKIAkJaWYgKHpuZXRfZGVidWcgPiA0KQogCQkgIHByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXR0ZXIgcXVldWVkLCBsZW5ndGggJWQuXG4iLCBkZXYtPm5hbWUsIGxlbmd0aCk7CiAJfQotCWRldl9rZnJlZV9za2Ioc2tiKTsgCisJZGV2X2tmcmVlX3NrYihza2IpOwogCXJldHVybiAwOwogfQogCkBAIC02MTYsNyArNjE2LDcgQEAKIAl9CiAKIAlzcGluX2xvY2sgKCZ6bmV0LT5sb2NrKTsKLQkKKwogCWlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCiAJb3V0YihDUjBfU1RBVFVTXzAsIGlvYWRkcik7CkBAIC02NjYsNyArNjY2LDcgQEAKIAkJCQkgKiBwYWNrZXQuIEZsaXAgaXQgb2ZmLCB0aGVuIG9uIHRvCiAJCQkJICogcmVzZXQgaXQuIFRoaXMgaXMgdmVyeSBlbXBpcmljYWwsCiAJCQkJICogYnV0IGl0IHNlZW1zIHRvIHdvcmsuICovCi0JCQkJCisKIAkJCQl6bmV0X3RyYW5zY2VpdmVyX3Bvd2VyIChkZXYsIDApOwogCQkJCXpuZXRfdHJhbnNjZWl2ZXJfcG93ZXIgKGRldiwgMSk7CiAJCQl9CkBAIC02ODIsNyArNjgyLDcgQEAKIAl9IHdoaWxlIChib2d1c2NudC0tKTsKIAogCXNwaW5fdW5sb2NrICgmem5ldC0+bG9jayk7Ci0JCisKIAlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKIH0KIApAQCAtNzQ4LDcgKzc0OCw3IEBACiAJCXVzaG9ydCAqdGhpc19yZnBfcHRyID0gem5ldC0+cnhfc3RhcnQgKyBuZXh0X2ZyYW1lX2VuZF9vZmZzZXQ7CiAJCWludCBzdGF0dXMgPSB0aGlzX3JmcF9wdHJbLTRdOwogCQlpbnQgcGt0X2xlbiA9IHRoaXNfcmZwX3B0clstMl07Ci0JICAKKwogCQlpZiAoem5ldF9kZWJ1ZyA+IDUpCiAJCSAgcHJpbnRrKEtFUk5fREVCVUcgIkxvb2tpbmcgYXQgdHJhaWxlciBlbmRpbmcgYXQgJTA0eCBzdGF0dXMgJTA0eCBsZW5ndGggJTAzeCIKIAkJCQkgIiBuZXh0ICUwNHguXG4iLCBuZXh0X2ZyYW1lX2VuZF9vZmZzZXQ8PDEsIHN0YXR1cywgcGt0X2xlbiwKQEAgLTgyOSw5ICs4MjksOSBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLlxuIiwgZGV2LT5uYW1lKTsKIAkvKiBUdXJuIG9mZiB0cmFuc2NlaXZlciBwb3dlci4gKi8KIAl6bmV0X3RyYW5zY2VpdmVyX3Bvd2VyIChkZXYsIDApOwotCQorCiAJem5ldF9yZWxlYXNlX3Jlc291cmNlcyAoZGV2KTsKLQkKKwogCXJldHVybiAwOwogfQogCkBAIC04NTYsNyArODU2LDcgQEAKIAogCWFkZHIgfD0gaW5iKGRtYV9wb3J0KSA8PCA4OwogCXJlc2lkdWUgPSBnZXRfZG1hX3Jlc2lkdWUoem5ldC0+dHhfZG1hKTsKLQkJCisKIAlpZiAoem5ldF9kZWJ1ZyA+IDEpIHsKIAkJZmxhZ3M9Y2xhaW1fZG1hX2xvY2soKTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIlN0YXQ6JTAyeCBBZGRyOiAlMDR4IGNudDolM3hcbiIsCkBAIC04OTQsNyArODk0LDcgQEAKIAlzZXRfZG1hX2NvdW50KHpuZXQtPnR4X2RtYSwgem5ldC0+dHhfYnVmX2xlbjw8MSk7CiAJZW5hYmxlX2RtYSh6bmV0LT50eF9kbWEpOwogCXJlbGVhc2VfZG1hX2xvY2soZmxhZ3MpOwotCQorCiAJaWYgKHpuZXRfZGVidWcgPiAxKQogCSAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbml0aWFsaXppbmcgdGhlIGk4MjU5MywgcnggYnVmICVwIHR4IGJ1ZiAlcFxuIiwKIAkJCSBkZXYtPm5hbWUsIHpuZXQtPnJ4X3N0YXJ0LHpuZXQtPnR4X3N0YXJ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvS2NvbmZpZwppbmRleCAzZmFlNzdmLi44YTYwZjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL0tjb25maWcKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9LY29uZmlnCkBAIC03Niw3ICs3Niw3IEBACiAKIGNvbmZpZyBIT1RQTFVHX1BDSV9BQ1BJCiAJdHJpc3RhdGUgIkFDUEkgUENJIEhvdHBsdWcgZHJpdmVyIgotCWRlcGVuZHMgb24gQUNQSV9ET0NLICYmIEhPVFBMVUdfUENJCisJZGVwZW5kcyBvbiAoIUFDUElfRE9DSyAmJiBBQ1BJICYmIEhPVFBMVUdfUENJKSB8fCAoQUNQSV9ET0NLICYmIEhPVFBMVUdfUENJKQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBzdXBwb3J0cyBQQ0kgSG90cGx1ZyB1c2luZwogCSAgQUNQSS4KQEAgLTE1MywxMyArMTUzLDYgQEAKIAogCSAgV2hlbiBpbiBkb3VidCwgc2F5IE4uCiAKLWNvbmZpZyBIT1RQTFVHX1BDSV9TSFBDX1BIUFJNX0xFR0FDWQotCWJvb2wgIkZvciBBTUQgU0hQQyBvbmx5OiBVc2UgJEhSVCBmb3IgcmVzb3VyY2UvY29uZmlndXJhdGlvbiIKLQlkZXBlbmRzIG9uIEhPVFBMVUdfUENJX1NIUEMgJiYgIUFDUEkgCi0JaGVscAotCSAgU2F5IFkgaGVyZSBmb3IgQU1EIFNIUEMuIFlvdSBoYXZlIHRvIHNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIAotCSAgdXNpbmcgdGhpcyBkcml2ZXIgb24gcGxhdGZvcm0gd2l0aCBBTUQgU0hQQy4KLQogY29uZmlnIEhPVFBMVUdfUENJX1JQQQogCXRyaXN0YXRlICJSUEEgUENJIEhvdHBsdWcgZHJpdmVyIgogCWRlcGVuZHMgb24gSE9UUExVR19QQ0kgJiYgUFBDX1BTRVJJRVMgJiYgUFBDNjQgJiYgIUhPVFBMVUdfUENJX0ZBS0UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfY29yZS5jCmluZGV4IDM0ZGU1NjkuLmUyZmVmNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2NvcmUuYwpAQCAtMjcsOCArMjcsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdraEB1cy5pYm0uY29tPiwKLSAqCQkgICAgPHQta29jaGlAYnEuanAubmVjLmNvbT4KKyAqIFNlbmQgZmVlZGJhY2sgdG8gPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKaW5kZXggZWY5NWQxMmYuLmFlNjdhOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtMjYsNyArMjYsNyBAQAogICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICoKLSAqIFNlbmQgZmVlZGJhY2sgdG8gPHQta29jaGlAYnEuanAubmVjLmNvbT4KKyAqIFNlbmQgZmVlZGJhY2sgdG8gPGtyaXN0ZW4uYy5hY2NhcmRpQGludGVsLmNvbT4KICAqCiAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcGNpX2hvdHBsdWdfcGNpLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYwppbmRleCAwMmJlNzRjLi40YWZjYWZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwY2lfaG90cGx1Z19wY2kuYwpAQCAtMjU0LDggKzI1NCw4IEBACiAKIGludCBjcGNpX2NvbmZpZ3VyZV9zbG90KHN0cnVjdCBzbG90KiBzbG90KQogewotCXVuc2lnbmVkIGNoYXIgYnVzbnI7Ci0Jc3RydWN0IHBjaV9idXMgKmNoaWxkOworCXN0cnVjdCBwY2lfYnVzICpwYXJlbnQ7CisJaW50IGZuOwogCiAJZGJnKCIlcyAtIGVudGVyIiwgX19GVU5DVElPTl9fKTsKIApAQCAtMjc2LDIzICsyNzYsNTMgQEAKIAkJICovCiAJCW4gPSBwY2lfc2Nhbl9zbG90KHNsb3QtPmJ1cywgc2xvdC0+ZGV2Zm4pOwogCQlkYmcoIiVzOiBwY2lfc2Nhbl9zbG90IHJldHVybmVkICVkIiwgX19GVU5DVElPTl9fLCBuKTsKLQkJaWYgKG4gPiAwKQotCQkJcGNpX2J1c19hZGRfZGV2aWNlcyhzbG90LT5idXMpOwogCQlzbG90LT5kZXYgPSBwY2lfZ2V0X3Nsb3Qoc2xvdC0+YnVzLCBzbG90LT5kZXZmbik7CiAJCWlmIChzbG90LT5kZXYgPT0gTlVMTCkgewogCQkJZXJyKCJDb3VsZCBub3QgZmluZCBQQ0kgZGV2aWNlIGZvciBzbG90ICUwMngiLCBzbG90LT5udW1iZXIpOwotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KKwlwYXJlbnQgPSBzbG90LT5kZXYtPmJ1czsKIAotCWlmIChzbG90LT5kZXYtPmhkcl90eXBlID09IFBDSV9IRUFERVJfVFlQRV9CUklER0UpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoc2xvdC0+ZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywgJmJ1c25yKTsKLQkJY2hpbGQgPSBwY2lfYWRkX25ld19idXMoc2xvdC0+ZGV2LT5idXMsIHNsb3QtPmRldiwgYnVzbnIpOwotCQlwY2lfZG9fc2Nhbl9idXMoY2hpbGQpOwotCQlwY2lfYnVzX3NpemVfYnJpZGdlcyhjaGlsZCk7CisJZm9yIChmbiA9IDA7IGZuIDwgODsgZm4rKykgeworCQlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCisJCWRldiA9IHBjaV9nZXRfc2xvdChwYXJlbnQsIFBDSV9ERVZGTihQQ0lfU0xPVChzbG90LT5kZXZmbiksIGZuKSk7CisJCWlmICghZGV2KQorCQkJY29udGludWU7CisJCWlmICgoZGV2LT5oZHJfdHlwZSA9PSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB8fAorCQkgICAgKGRldi0+aGRyX3R5cGUgPT0gUENJX0hFQURFUl9UWVBFX0NBUkRCVVMpKSB7CisJCQkvKiBGaW5kIGFuIHVudXNlZCBidXMgbnVtYmVyIGZvciB0aGUgbmV3IGJyaWRnZSAqLworCQkJc3RydWN0IHBjaV9idXMgKmNoaWxkOworCQkJdW5zaWduZWQgY2hhciBidXNuciwgc3RhcnQgPSBwYXJlbnQtPnNlY29uZGFyeTsKKwkJCXVuc2lnbmVkIGNoYXIgZW5kID0gcGFyZW50LT5zdWJvcmRpbmF0ZTsKKworCQkJZm9yIChidXNuciA9IHN0YXJ0OyBidXNuciA8PSBlbmQ7IGJ1c25yKyspIHsKKwkJCQlpZiAoIXBjaV9maW5kX2J1cyhwY2lfZG9tYWluX25yKHBhcmVudCksCisJCQkJCQkgIGJ1c25yKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoYnVzbnIgPj0gZW5kKSB7CisJCQkJZXJyKCJObyBmcmVlIGJ1cyBmb3IgaG90LWFkZGVkIGJyaWRnZVxuIik7CisJCQkJcGNpX2Rldl9wdXQoZGV2KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNoaWxkID0gcGNpX2FkZF9uZXdfYnVzKHBhcmVudCwgZGV2LCBidXNucik7CisJCQlpZiAoIWNoaWxkKSB7CisJCQkJZXJyKCJDYW5ub3QgYWRkIG5ldyBidXMgZm9yICVzXG4iLAorCQkJCSAgICBwY2lfbmFtZShkZXYpKTsKKwkJCQlwY2lfZGV2X3B1dChkZXYpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY2hpbGQtPnN1Ym9yZGluYXRlID0gcGNpX2RvX3NjYW5fYnVzKGNoaWxkKTsKKwkJCXBjaV9idXNfc2l6ZV9icmlkZ2VzKGNoaWxkKTsKKwkJfQorCQlwY2lfZGV2X3B1dChkZXYpOwogCX0KIAotCXBjaV9idXNfYXNzaWduX3Jlc291cmNlcyhzbG90LT5kZXYtPmJ1cyk7CisJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKHBhcmVudCk7CisJcGNpX2J1c19hZGRfZGV2aWNlcyhwYXJlbnQpOworCXBjaV9lbmFibGVfYnJpZGdlcyhwYXJlbnQpOwogCiAJZGJnKCIlcyAtIGV4aXQiLCBfX0ZVTkNUSU9OX18pOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwLmgKaW5kZXggY2U4OWY1OC4uZWFlYTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocC5oCkBAIC0yNzksNiArMjc5LDExIEBACiAKIAogI2lmZGVmIENPTkZJR19BQ1BJCisjaW5jbHVkZSA8YWNwaS9hY3BpLmg+CisjaW5jbHVkZSA8YWNwaS9hY3BpX2J1cy5oPgorI2luY2x1ZGUgPGFjcGkvYWN0eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS1hY3BpLmg+CisKICNkZWZpbmUgcGNpZWhwX2dldF9ocF9od19jb250cm9sX2Zyb21fZmlybXdhcmUoZGV2KSBcCiAJcGNpZWhwX2FjcGlfZ2V0X2hwX2h3X2NvbnRyb2xfZnJvbV9maXJtd2FyZShkZXYpCiBzdGF0aWMgaW5saW5lIGludCBwY2llaHBfZ2V0X2hwX3BhcmFtc19mcm9tX2Zpcm13YXJlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2hwYy5jCmluZGV4IDBkOGZiNmUuLjZhYjNiNmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9ocGMuYwpAQCAtMzgsMTAgKzM4LDYgQEAKIAogI2luY2x1ZGUgIi4uL3BjaS5oIgogI2luY2x1ZGUgInBjaWVocC5oIgotI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgotI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KLSNpbmNsdWRlIDxhY3BpL2FjdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2ktYWNwaS5oPgogI2lmZGVmIERFQlVHCiAjZGVmaW5lIERCR19LX1RSQUNFX0VOVFJZICAgICAgKCh1bnNpZ25lZCBpbnQpMHgwMDAwMDAwMSkJLyogT24gZnVuY3Rpb24gZW50cnkgKi8KICNkZWZpbmUgREJHX0tfVFJBQ0VfRVhJVCAgICAgICAoKHVuc2lnbmVkIGludCkweDAwMDAwMDAyKQkvKiBPbiBmdW5jdGlvbiBleGl0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3JwYXBocF9jb3JlLmMKaW5kZXggMDc2YmQ2ZC4uNzI4OGEzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9ycGFwaHBfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcnBhcGhwX2NvcmUuYwpAQCAtMTc2LDE2ICsxNzYsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRfY2hpbGRyZW5fcHJvcHMoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50ICoqZHJjX2luZGV4ZXMsCi0JCWludCAqKmRyY19uYW1lcywgaW50ICoqZHJjX3R5cGVzLCBpbnQgKipkcmNfcG93ZXJfZG9tYWlucykKK3N0YXRpYyBpbnQgZ2V0X2NoaWxkcmVuX3Byb3BzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIGNvbnN0IGludCAqKmRyY19pbmRleGVzLAorCQljb25zdCBpbnQgKipkcmNfbmFtZXMsIGNvbnN0IGludCAqKmRyY190eXBlcywKKwkJY29uc3QgaW50ICoqZHJjX3Bvd2VyX2RvbWFpbnMpCiB7Ci0JaW50ICppbmRleGVzLCAqbmFtZXM7Ci0JaW50ICp0eXBlcywgKmRvbWFpbnM7CisJY29uc3QgaW50ICppbmRleGVzLCAqbmFtZXMsICp0eXBlcywgKmRvbWFpbnM7CiAKLQlpbmRleGVzID0gKGludCAqKSBnZXRfcHJvcGVydHkoZG4sICJpYm0sZHJjLWluZGV4ZXMiLCBOVUxMKTsKLQluYW1lcyA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1uYW1lcyIsIE5VTEwpOwotCXR5cGVzID0gKGludCAqKSBnZXRfcHJvcGVydHkoZG4sICJpYm0sZHJjLXR5cGVzIiwgTlVMTCk7Ci0JZG9tYWlucyA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1wb3dlci1kb21haW5zIiwgTlVMTCk7CisJaW5kZXhlcyA9IGdldF9wcm9wZXJ0eShkbiwgImlibSxkcmMtaW5kZXhlcyIsIE5VTEwpOworCW5hbWVzID0gZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy1uYW1lcyIsIE5VTEwpOworCXR5cGVzID0gZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLGRyYy10eXBlcyIsIE5VTEwpOworCWRvbWFpbnMgPSBnZXRfcHJvcGVydHkoZG4sICJpYm0sZHJjLXBvd2VyLWRvbWFpbnMiLCBOVUxMKTsKIAogCWlmICghaW5kZXhlcyB8fCAhbmFtZXMgfHwgIXR5cGVzIHx8ICFkb21haW5zKSB7CiAJCS8qIFNsb3QgZG9lcyBub3QgaGF2ZSBkeW5hbWljYWxseS1yZW1vdmFibGUgY2hpbGRyZW4gKi8KQEAgLTIxMiwxMyArMjEyLDEzIEBACiBpbnQgcnBhcGhwX2dldF9kcmNfcHJvcHMoc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50ICpkcmNfaW5kZXgsCiAJCWNoYXIgKipkcmNfbmFtZSwgY2hhciAqKmRyY190eXBlLCBpbnQgKmRyY19wb3dlcl9kb21haW4pCiB7Ci0JaW50ICppbmRleGVzLCAqbmFtZXM7Ci0JaW50ICp0eXBlcywgKmRvbWFpbnM7Ci0JdW5zaWduZWQgaW50ICpteV9pbmRleDsKKwljb25zdCBpbnQgKmluZGV4ZXMsICpuYW1lczsKKwljb25zdCBpbnQgKnR5cGVzLCAqZG9tYWluczsKKwljb25zdCB1bnNpZ25lZCBpbnQgKm15X2luZGV4OwogCWNoYXIgKm5hbWVfdG1wLCAqdHlwZV90bXA7CiAJaW50IGksIHJjOwogCi0JbXlfaW5kZXggPSAoaW50ICopIGdldF9wcm9wZXJ0eShkbiwgImlibSxteS1kcmMtaW5kZXgiLCBOVUxMKTsKKwlteV9pbmRleCA9IGdldF9wcm9wZXJ0eShkbiwgImlibSxteS1kcmMtaW5kZXgiLCBOVUxMKTsKIAlpZiAoIW15X2luZGV4KSB7CiAJCS8qIE5vZGUgaXNuJ3QgRExQQVIvaG90cGx1ZyBjYXBhYmxlICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjY1LDEwICsyNjUsMTAgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBpc19waHBfZG4oc3RydWN0IGRldmljZV9ub2RlICpkbiwgaW50ICoqaW5kZXhlcywgaW50ICoqbmFtZXMsCi0JCWludCAqKnR5cGVzLCBpbnQgKipwb3dlcl9kb21haW5zKQorc3RhdGljIGludCBpc19waHBfZG4oc3RydWN0IGRldmljZV9ub2RlICpkbiwgY29uc3QgaW50ICoqaW5kZXhlcywKKwkJY29uc3QgaW50ICoqbmFtZXMsIGNvbnN0IGludCAqKnR5cGVzLCBjb25zdCBpbnQgKipwb3dlcl9kb21haW5zKQogewotCWludCAqZHJjX3R5cGVzOworCWNvbnN0IGludCAqZHJjX3R5cGVzOwogCWludCByYzsKIAogCXJjID0gZ2V0X2NoaWxkcmVuX3Byb3BzKGRuLCBpbmRleGVzLCBuYW1lcywgJmRyY190eXBlcywgcG93ZXJfZG9tYWlucyk7CkBAIC0yOTYsNyArMjk2LDcgQEAKIAlzdHJ1Y3Qgc2xvdCAqc2xvdDsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKLQlpbnQgKmluZGV4ZXMsICpuYW1lcywgKnR5cGVzLCAqcG93ZXJfZG9tYWluczsKKwljb25zdCBpbnQgKmluZGV4ZXMsICpuYW1lcywgKnR5cGVzLCAqcG93ZXJfZG9tYWluczsKIAljaGFyICpuYW1lLCAqdHlwZTsKIAogCWRiZygiRW50cnkgJXM6IGRuLT5mdWxsX25hbWU9JXNcbiIsIF9fRlVOQ1RJT05fXywgZG4tPmZ1bGxfbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggMTBlMWE5MC4uNDc0ZTljZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMTM5LDkgKzEzOSw4IEBACiAvKioKICAqIHBjaV9tYXRjaF9kZXZpY2UgLSBUZWxsIGlmIGEgUENJIGRldmljZSBzdHJ1Y3R1cmUgaGFzIGEgbWF0Y2hpbmcKICAqICAgICAgICAgICAgICAgICAgICBQQ0kgZGV2aWNlIGlkIHN0cnVjdHVyZQotICogQGlkczogYXJyYXkgb2YgUENJIGRldmljZSBpZCBzdHJ1Y3R1cmVzIHRvIHNlYXJjaCBpbgotICogQGRldjogdGhlIFBDSSBkZXZpY2Ugc3RydWN0dXJlIHRvIG1hdGNoIGFnYWluc3QKICAqIEBkcnY6IHRoZSBQQ0kgZHJpdmVyIHRvIG1hdGNoIGFnYWluc3QKKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlIHN0cnVjdHVyZSB0byBtYXRjaCBhZ2FpbnN0CiAgKgogICogVXNlZCBieSBhIGRyaXZlciB0byBjaGVjayB3aGV0aGVyIGEgUENJIGRldmljZSBwcmVzZW50IGluIHRoZQogICogc3lzdGVtIGlzIGluIGl0cyBsaXN0IG9mIHN1cHBvcnRlZCBkZXZpY2VzLiAgUmV0dXJucyB0aGUgbWF0Y2hpbmcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYwppbmRleCA1MGJmYzFiMmYuLjQ3OGQwZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTMwLDIzICszMCw2IEBACiAvKiBnbG9iYWwgZGF0YSAqLwogc3RhdGljIGNvbnN0IGNoYXIgZGV2aWNlX25hbWVbXSA9ICJwY2llcG9ydC1kcml2ZXIiOwogCi1zdGF0aWMgaW50IHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXJldHVybiBwY2lfc2F2ZV9zdGF0ZShkZXYpOwotfQotCi1zdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCWludCByZXR2YWw7Ci0KLQlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwotCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQlwY2lfc2V0X21hc3RlcihkZXYpOwotCXJldHVybiAwOwotfQotCiAvKgogICogcGNpZV9wb3J0ZHJ2X3Byb2JlIC0gUHJvYmUgUENJLUV4cHJlc3MgcG9ydCBkZXZpY2VzCiAgKiBAZGV2OiBQQ0ktRXhwcmVzcyBwb3J0IGRldmljZSBiZWluZyBwcm9iZWQKQEAgLTczLDggKzU2LDEwIEBACiAJCSIlcy0+RGV2WyUwNHg6JTA0eF0gaGFzIGludmFsaWQgSVJRLiBDaGVjayB2ZW5kb3IgQklPU1xuIiwgCiAJCV9fRlVOQ1RJT05fXywgZGV2LT5kZXZpY2UsIGRldi0+dmVuZG9yKTsKIAl9Ci0JaWYgKHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoZGV2KSkgCisJaWYgKHBjaWVfcG9ydF9kZXZpY2VfcmVnaXN0ZXIoZGV2KSkgeworCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC04Niw2ICs3MSwyMyBAQAogfQogCiAjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBwY2lfc2F2ZV9zdGF0ZShkZXYpOworfQorCitzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCByZXR2YWw7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlwY2lfc2V0X21hc3RlcihkZXYpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IHJldCA9IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChkZXYsIHN0YXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKaW5kZXggZTNjNzhjMy4uMTdlNzA5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcXVpcmtzLmMKKysrIGIvZHJpdmVycy9wY2kvcXVpcmtzLmMKQEAgLTQzOCw2ICs0MzgsNyBAQAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIDB4NDgsICZyZWdpb24pOwogCXF1aXJrX2lvX3JlZ2lvbihkZXYsIHJlZ2lvbiwgNjQsIFBDSV9CUklER0VfUkVTT1VSQ0VTKzEsICJJQ0g2IEdQSU8iKTsKIH0KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMCwgcXVpcmtfaWNoNl9scGNfYWNwaSApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xLCBxdWlya19pY2g2X2xwY19hY3BpICk7CiAKIC8qCkBAIC02NjYsNiArNjY3LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEsIHF1aXJrX3ZpYV9pcnEpOwogREVDTEFSRV9QQ0lfRklYVVBfRU5BQkxFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMiwgcXVpcmtfdmlhX2lycSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8zLCBxdWlya192aWFfaXJxKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNV9VU0JfMiwgcXVpcmtfdmlhX2lycSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4NiwgcXVpcmtfdmlhX2lycSk7CiBERUNMQVJFX1BDSV9GSVhVUF9FTkFCTEUoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY4Nl80LCBxdWlya192aWFfaXJxKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0VOQUJMRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUsIHF1aXJrX3ZpYV9pcnEpOwpAQCAtOTkwLDYgKzk5MiwxMSBAQAogCQkJY2FzZSAweDgwNzA6IC8qIFA0RzhYIERlbHV4ZSAqLwogCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOwogCQkJfQorCQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9FNzUwMV9NQ0gpCisJCQlzd2l0Y2ggKGRldi0+c3Vic3lzdGVtX2RldmljZSkgeworCQkJY2FzZSAweDgwYzk6IC8qIFBVLURMUyAqLworCQkJCWFzdXNfaGlkZXNfc21idXMgPSAxOworCQkJfQogCQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1NUdNX0hCKQogCQkJc3dpdGNoIChkZXYtPnN1YnN5c3RlbV9kZXZpY2UpIHsKIAkJCWNhc2UgMHgxNzUxOiAvKiBNMk4gbm90ZWJvb2sgKi8KQEAgLTEwNTgsNiArMTA2NSw3IEBACiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84Mjg1MF9IQiwJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84Mjg2NV9IQiwJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF83MjA1XzAsCWFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSApOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfRTc1MDFfTUNILAlhc3VzX2hpZGVzX3NtYnVzX2hvc3RicmlkZ2UgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1UE1fSEIsCWFzdXNfaGlkZXNfc21idXNfaG9zdGJyaWRnZSApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVHTV9IQiwJYXN1c19oaWRlc19zbWJ1c19ob3N0YnJpZGdlICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0hCLCBhc3VzX2hpZGVzX3NtYnVzX2hvc3RicmlkZ2UgKTsKQEAgLTEwODEsMTAgKzEwODksMTAgQEAKIH0KIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMCwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMCwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMCwJYXN1c19oaWRlc19zbWJ1c19scGMgKTsKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLAlQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTIsCWFzdXNfaGlkZXNfc21idXNfbHBjICk7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwJUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEyLAlhc3VzX2hpZGVzX3NtYnVzX2xwYyApOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8wLAlhc3VzX2hpZGVzX3NtYnVzX2xwYyApOwotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsCVBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xLAlhc3VzX2hpZGVzX3NtYnVzX2xwYyApOwogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXN1c19oaWRlc19zbWJ1c19scGNfaWNoNihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewpAQCAtMTUxMSw2ICsxNTE5LDYzIEBACiB9CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9BTllfSUQsIHF1aXJrX25ldG1vcyk7CiAKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19lMTAwX2ludGVycnVwdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUxNiBjb21tYW5kOworCXUzMiBiYXI7CisJdTggX19pb21lbSAqY3NyOworCXU4IGNtZF9oaTsKKworCXN3aXRjaCAoZGV2LT5kZXZpY2UpIHsKKwkvKiBQQ0kgSURzIHRha2VuIGZyb20gZHJpdmVycy9uZXQvZTEwMC5jICovCisJY2FzZSAweDEwMjk6CisJY2FzZSAweDEwMzAgLi4uIDB4MTAzNDoKKwljYXNlIDB4MTAzOCAuLi4gMHgxMDNFOgorCWNhc2UgMHgxMDUwIC4uLiAweDEwNTc6CisJY2FzZSAweDEwNTk6CisJY2FzZSAweDEwNjQgLi4uIDB4MTA2QjoKKwljYXNlIDB4MTA5MSAuLi4gMHgxMDk1OgorCWNhc2UgMHgxMjA5OgorCWNhc2UgMHgxMjI5OgorCWNhc2UgMHgyNDQ5OgorCWNhc2UgMHgyNDU5OgorCWNhc2UgMHgyNDVEOgorCWNhc2UgMHgyN0RDOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm47CisJfQorCisJLyoKKwkgKiBTb21lIGZpcm13YXJlIGhhbmRzIG9mZiB0aGUgZTEwMCB3aXRoIGludGVycnVwdHMgZW5hYmxlZCwKKwkgKiB3aGljaCBjYW4gY2F1c2UgYSBmbG9vZCBvZiBpbnRlcnJ1cHRzIGlmIHBhY2tldHMgYXJlCisJICogcmVjZWl2ZWQgYmVmb3JlIHRoZSBkcml2ZXIgYXR0YWNoZXMgdG8gdGhlIGRldmljZS4gIFNvCisJICogZGlzYWJsZSBhbGwgZTEwMCBpbnRlcnJ1cHRzIGhlcmUuICBUaGUgZHJpdmVyIHdpbGwKKwkgKiByZS1lbmFibGUgdGhlbSB3aGVuIGl0J3MgcmVhZHkuCisJICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNvbW1hbmQpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFBDSV9CQVNFX0FERFJFU1NfMCwgJmJhcik7CisKKwlpZiAoIShjb21tYW5kICYgUENJX0NPTU1BTkRfTUVNT1JZKSB8fCAhYmFyKQorCQlyZXR1cm47CisKKwljc3IgPSBpb3JlbWFwKGJhciwgOCk7CisJaWYgKCFjc3IpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBDYW4ndCBtYXAgJXMgZTEwMCByZWdpc3RlcnNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwkJcmV0dXJuOworCX0KKworCWNtZF9oaSA9IHJlYWRiKGNzciArIDMpOworCWlmIChjbWRfaGkgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IEZpcm13YXJlIGxlZnQgJXMgZTEwMCBpbnRlcnJ1cHRzICIKKwkJCSJlbmFibGVkLCBkaXNhYmxpbmdcbiIsIHBjaV9uYW1lKGRldikpOworCQl3cml0ZWIoMSwgY3NyICsgMyk7CisJfQorCisJaW91bm1hcChjc3IpOworfQorREVDTEFSRV9QQ0lfRklYVVBfRUFSTFkoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0FOWV9JRCwgcXVpcmtfZTEwMF9pbnRlcnJ1cHQpOwogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZml4dXBfcmV2MV81M2M4MTAoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NlYXJjaC5jIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKaW5kZXggNjIyYjNmOC4uZDUyOTQ2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2VhcmNoLmMKKysrIGIvZHJpdmVycy9wY2kvc2VhcmNoLmMKQEAgLTQxLDcgKzQxLDcgQEAKICAqIGluIHRoZSBnbG9iYWwgbGlzdCBvZiBQQ0kgYnVzZXMuICBJZiB0aGUgYnVzIGlzIGZvdW5kLCBhIHBvaW50ZXIgdG8gaXRzCiAgKiBkYXRhIHN0cnVjdHVyZSBpcyByZXR1cm5lZC4gIElmIG5vIGJ1cyBpcyBmb3VuZCwgJU5VTEwgaXMgcmV0dXJuZWQuCiAgKi8KLXN0cnVjdCBwY2lfYnVzICogX19kZXZpbml0IHBjaV9maW5kX2J1cyhpbnQgZG9tYWluLCBpbnQgYnVzbnIpCitzdHJ1Y3QgcGNpX2J1cyAqIHBjaV9maW5kX2J1cyhpbnQgZG9tYWluLCBpbnQgYnVzbnIpCiB7CiAJc3RydWN0IHBjaV9idXMgKmJ1cyA9IE5VTEw7CiAJc3RydWN0IHBjaV9idXMgKnRtcF9idXM7CkBAIC02MSw3ICs2MSw3IEBACiAgKiBAZnJvbTogUHJldmlvdXMgUENJIGJ1cyBmb3VuZCwgb3IgJU5VTEwgZm9yIG5ldyBzZWFyY2guCiAgKgogICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBQQ0kgYnVzc2VzLiAgQSBuZXcgc2VhcmNoIGlzCi0gKiBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCB0byB0aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UgaWYKKyAqIGluaXRpYXRlZCBieSBwYXNzaW5nICVOVUxMIGFzIHRoZSBAZnJvbSBhcmd1bWVudC4gIE90aGVyd2lzZSBpZgogICogQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZQogICogZ2xvYmFsIGxpc3QuCiAgKi8KQEAgLTE0OCwxMyArMTQ4LDE0IEBACiAgKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgogICoKICAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMKLSAqIGZvdW5kIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yLCBAZGV2aWNlLCBAc3NfdmVuZG9yIGFuZCBAc3NfZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzCi0gKiBkZXZpY2Ugc3RydWN0dXJlIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCB0byB0aGUgQGZyb20gYXJndW1lbnQuCi0gKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBnbG9iYWwgbGlzdC4KKyAqIGZvdW5kIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yLCBAZGV2aWNlLCBAc3NfdmVuZG9yIGFuZCBAc3NfZGV2aWNlLCBhCisgKiBwb2ludGVyIHRvIGl0cyBkZXZpY2Ugc3RydWN0dXJlIGlzIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KKyAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCisgKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCisgKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCiAgKgotICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueW1vcmUsIHVzZSBwY2lfZ2V0X3N1YnN5cygpIGluc3RlYWQsIGFzCi0gKiB0aGUgcGNpIGRldmljZSByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uIGNhbiBkaXNhcHBlYXIgYXQgYW55IG1vbWVudCBpbgorICogTk9URTogRG8gbm90IHVzZSB0aGlzIGZ1bmN0aW9uIGFueSBtb3JlOyB1c2UgcGNpX2dldF9zdWJzeXMoKSBpbnN0ZWFkLCBhcworICogdGhlIFBDSSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KICAqIHRpbWUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldiAqIHBjaV9maW5kX3N1YnN5cyh1bnNpZ25lZCBpbnQgdmVuZG9yLApAQCAtMTkxLDE0ICsxOTIsMTUgQEAKICAqIEBkZXZpY2U6IFBDSSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCiAgKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgogICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMKLSAqIGZvdW5kIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMKKyAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQKKyAqIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMKICAqIHJldHVybmVkLiAgT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCB0byB0aGUgQGZyb20gYXJndW1lbnQuCi0gKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlIG9uIHRoZSBnbG9iYWwgbGlzdC4KKyAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCisgKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIG5leHQgZGV2aWNlCisgKiBvbiB0aGUgZ2xvYmFsIGxpc3QuCiAgKiAKLSAqIE5PVEU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBhbnltb3JlLCB1c2UgcGNpX2dldF9kZXZpY2UoKSBpbnN0ZWFkLCBhcwotICogdGhlIHBjaSBkZXZpY2UgcmV0dXJuZWQgYnkgdGhpcyBmdW5jdGlvbiBjYW4gZGlzYXBwZWFyIGF0IGFueSBtb21lbnQgaW4KKyAqIE5PVEU6IERvIG5vdCB1c2UgdGhpcyBmdW5jdGlvbiBhbnkgbW9yZTsgdXNlIHBjaV9nZXRfZGV2aWNlKCkgaW5zdGVhZCwgYXMKKyAqIHRoZSBQQ0kgZGV2aWNlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gY2FuIGRpc2FwcGVhciBhdCBhbnkgbW9tZW50IGluCiAgKiB0aW1lLgogICovCiBzdHJ1Y3QgcGNpX2RldiAqCkBAIC0yMTUsMTEgKzIxNywxMSBAQAogICogQHNzX2RldmljZTogUENJIHN1YnN5c3RlbSBkZXZpY2UgaWQgdG8gbWF0Y2gsIG9yICVQQ0lfQU5ZX0lEIHRvIG1hdGNoIGFsbCBkZXZpY2UgaWRzCiAgKiBAZnJvbTogUHJldmlvdXMgUENJIGRldmljZSBmb3VuZCBpbiBzZWFyY2gsIG9yICVOVUxMIGZvciBuZXcgc2VhcmNoLgogICoKLSAqIEl0ZXJhdGVzIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gUENJIGRldmljZXMuICBJZiBhIFBDSSBkZXZpY2UgaXMKLSAqIGZvdW5kIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yLCBAZGV2aWNlLCBAc3NfdmVuZG9yIGFuZCBAc3NfZGV2aWNlLCBhIHBvaW50ZXIgdG8gaXRzCisgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzLiAgSWYgYSBQQ0kgZGV2aWNlIGlzIGZvdW5kCisgKiB3aXRoIGEgbWF0Y2hpbmcgQHZlbmRvciwgQGRldmljZSwgQHNzX3ZlbmRvciBhbmQgQHNzX2RldmljZSwgYSBwb2ludGVyIHRvIGl0cwogICogZGV2aWNlIHN0cnVjdHVyZSBpcyByZXR1cm5lZCwgYW5kIHRoZSByZWZlcmVuY2UgY291bnQgdG8gdGhlIGRldmljZSBpcwogICogaW5jcmVtZW50ZWQuICBPdGhlcndpc2UsICVOVUxMIGlzIHJldHVybmVkLiAgQSBuZXcgc2VhcmNoIGlzIGluaXRpYXRlZCBieQotICogcGFzc2luZyAlTlVMTCB0byB0aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLAorICogcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLAogICogc2VhcmNoZXMgY29udGludWUgZnJvbSBuZXh0IGRldmljZSBvbiB0aGUgZ2xvYmFsIGxpc3QuCiAgKiBUaGUgcmVmZXJlbmNlIGNvdW50IGZvciBAZnJvbSBpcyBhbHdheXMgZGVjcmVtZW50ZWQgaWYgaXQgaXMgbm90ICVOVUxMLgogICovCkBAIC0yNjIsNyArMjY0LDcgQEAKICAqIGZvdW5kIHdpdGggYSBtYXRjaGluZyBAdmVuZG9yIGFuZCBAZGV2aWNlLCB0aGUgcmVmZXJlbmNlIGNvdW50IHRvIHRoZQogICogZGV2aWNlIGlzIGluY3JlbWVudGVkIGFuZCBhIHBvaW50ZXIgdG8gaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuCiAgKiBPdGhlcndpc2UsICVOVUxMIGlzIHJldHVybmVkLiAgQSBuZXcgc2VhcmNoIGlzIGluaXRpYXRlZCBieSBwYXNzaW5nICVOVUxMCi0gKiB0byB0aGUgQGZyb20gYXJndW1lbnQuICBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZQorICogYXMgdGhlIEBmcm9tIGFyZ3VtZW50LiAgT3RoZXJ3aXNlIGlmIEBmcm9tIGlzIG5vdCAlTlVMTCwgc2VhcmNoZXMgY29udGludWUKICAqIGZyb20gbmV4dCBkZXZpY2Ugb24gdGhlIGdsb2JhbCBsaXN0LiAgVGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgQGZyb20gaXMKICAqIGFsd2F5cyBkZWNyZW1lbnRlZCBpZiBpdCBpcyBub3QgJU5VTEwuCiAgKi8KQEAgLTI3OSwxMSArMjgxLDEzIEBACiAgKiBAZGV2aWNlOiBQQ0kgZGV2aWNlIGlkIHRvIG1hdGNoLCBvciAlUENJX0FOWV9JRCB0byBtYXRjaCBhbGwgZGV2aWNlIGlkcwogICogQGZyb206IFByZXZpb3VzIFBDSSBkZXZpY2UgZm91bmQgaW4gc2VhcmNoLCBvciAlTlVMTCBmb3IgbmV3IHNlYXJjaC4KICAqCi0gKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBsaXN0IG9mIGtub3duIFBDSSBkZXZpY2VzIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIHBjaV9maW5kX2RldmljZSgpLgorICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgbGlzdCBvZiBrbm93biBQQ0kgZGV2aWNlcyBpbiB0aGUgcmV2ZXJzZSBvcmRlciBvZgorICogcGNpX2ZpbmRfZGV2aWNlKCkuCiAgKiBJZiBhIFBDSSBkZXZpY2UgaXMgZm91bmQgd2l0aCBhIG1hdGNoaW5nIEB2ZW5kb3IgYW5kIEBkZXZpY2UsIGEgcG9pbnRlciB0bwogICogaXRzIGRldmljZSBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQuICBPdGhlcndpc2UsICVOVUxMIGlzIHJldHVybmVkLgotICogQSBuZXcgc2VhcmNoIGlzIGluaXRpYXRlZCBieSBwYXNzaW5nICVOVUxMIHRvIHRoZSBAZnJvbSBhcmd1bWVudC4KLSAqIE90aGVyd2lzZSBpZiBAZnJvbSBpcyBub3QgJU5VTEwsIHNlYXJjaGVzIGNvbnRpbnVlIGZyb20gcHJldmlvdXMgZGV2aWNlIG9uIHRoZSBnbG9iYWwgbGlzdC4KKyAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCBhcyB0aGUgQGZyb20gYXJndW1lbnQuCisgKiBPdGhlcndpc2UgaWYgQGZyb20gaXMgbm90ICVOVUxMLCBzZWFyY2hlcyBjb250aW51ZSBmcm9tIHByZXZpb3VzIGRldmljZQorICogb24gdGhlIGdsb2JhbCBsaXN0LgogICovCiBzdHJ1Y3QgcGNpX2RldiAqCiBwY2lfZmluZF9kZXZpY2VfcmV2ZXJzZSh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSkKQEAgLTMxNyw3ICszMjEsNyBAQAogICogZm91bmQgd2l0aCBhIG1hdGNoaW5nIEBjbGFzcywgdGhlIHJlZmVyZW5jZSBjb3VudCB0byB0aGUgZGV2aWNlIGlzCiAgKiBpbmNyZW1lbnRlZCBhbmQgYSBwb2ludGVyIHRvIGl0cyBkZXZpY2Ugc3RydWN0dXJlIGlzIHJldHVybmVkLgogICogT3RoZXJ3aXNlLCAlTlVMTCBpcyByZXR1cm5lZC4KLSAqIEEgbmV3IHNlYXJjaCBpcyBpbml0aWF0ZWQgYnkgcGFzc2luZyAlTlVMTCB0byB0aGUgQGZyb20gYXJndW1lbnQuCisgKiBBIG5ldyBzZWFyY2ggaXMgaW5pdGlhdGVkIGJ5IHBhc3NpbmcgJU5VTEwgYXMgdGhlIEBmcm9tIGFyZ3VtZW50LgogICogT3RoZXJ3aXNlIGlmIEBmcm9tIGlzIG5vdCAlTlVMTCwgc2VhcmNoZXMgY29udGludWUgZnJvbSBuZXh0IGRldmljZQogICogb24gdGhlIGdsb2JhbCBsaXN0LiAgVGhlIHJlZmVyZW5jZSBjb3VudCBmb3IgQGZyb20gaXMgYWx3YXlzIGRlY3JlbWVudGVkCiAgKiBpZiBpdCBpcyBub3QgJU5VTEwuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfaW9jdGwuYyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCmluZGV4IDczOGIxZWYuLjlhZDE4ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3BjbWNpYV9pb2N0bC5jCkBAIC02MDEsMTIgKzYwMSw4IEBACiAJICAgIHJldCA9IENTX0JBRF9BUkdTOwogCWVsc2UgewogCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPmNvbmZpZy5GdW5jdGlvbik7Ci0JICAgIGlmIChwX2RldiA9PSBOVUxMKQotCQkgICAgcmV0ID0gQ1NfQkFEX0FSR1M7Ci0JICAgIGVsc2UgewotCQkgICAgcmV0ID0gcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8ocywgcF9kZXYsICZidWYtPmNvbmZpZyk7Ci0JCSAgICBwY21jaWFfcHV0X2RldihwX2Rldik7Ci0JICAgIH0KKwkgICAgcmV0ID0gcGNjYXJkX2dldF9jb25maWd1cmF0aW9uX2luZm8ocywgcF9kZXYsICZidWYtPmNvbmZpZyk7CisJICAgIHBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKIAl9CiAJYnJlYWs7CiAgICAgY2FzZSBEU19HRVRfRklSU1RfVFVQTEU6CkBAIC02MzYsMTIgKzYzMiw4IEBACiAJCSAgICByZXQgPSBDU19CQURfQVJHUzsKIAkgICAgZWxzZSB7CiAJCSAgICBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqcF9kZXYgPSBnZXRfcGNtY2lhX2RldmljZShzLCBidWYtPnN0YXR1cy5GdW5jdGlvbik7Ci0JCSAgICBpZiAocF9kZXYgPT0gTlVMTCkKLQkJCSAgICByZXQgPSBDU19CQURfQVJHUzsKLQkJICAgIGVsc2UgewotCQkJICAgIHJldCA9IHBjY2FyZF9nZXRfc3RhdHVzKHMsIHBfZGV2LCAmYnVmLT5zdGF0dXMpOwotCQkJICAgIHBjbWNpYV9wdXRfZGV2KHBfZGV2KTsKLQkJICAgIH0KKwkJICAgIHJldCA9IHBjY2FyZF9nZXRfc3RhdHVzKHMsIHBfZGV2LCAmYnVmLT5zdGF0dXMpOworCQkgICAgcGNtY2lhX3B1dF9kZXYocF9kZXYpOwogCSAgICB9CiAJICAgIGJyZWFrOwogICAgIGNhc2UgRFNfVkFMSURBVEVfQ0lTOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvcGNtY2lhX3Jlc291cmNlLmMgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwppbmRleCA3YmYyNWI4Li5jODMyMzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYworKysgYi9kcml2ZXJzL3BjbWNpYS9wY21jaWFfcmVzb3VyY2UuYwpAQCAtMjQ1LDEwICsyNDUsMTcgQEAKIAkJcmV0dXJuIENTX1NVQ0NFU1M7CiAJfQogCi0JLyogISEhIFRoaXMgaXMgYSBoYWNrICEhISAqLwotCW1lbWNweSgmY29uZmlnLT5BdHRyaWJ1dGVzLCAmYy0+QXR0cmlidXRlcywgc2l6ZW9mKGNvbmZpZ190KSk7Ci0JY29uZmlnLT5BdHRyaWJ1dGVzIHw9IENPTkZfVkFMSURfQ0xJRU5UOwotCWNvbmZpZy0+Q2FyZFZhbHVlcyA9IGMtPkNhcmRWYWx1ZXM7CisJY29uZmlnLT5BdHRyaWJ1dGVzID0gYy0+QXR0cmlidXRlcyB8IENPTkZfVkFMSURfQ0xJRU5UOworCWNvbmZpZy0+VmNjID0gcy0+c29ja2V0LlZjYzsKKwljb25maWctPlZwcDEgPSBjb25maWctPlZwcDIgPSBzLT5zb2NrZXQuVnBwOworCWNvbmZpZy0+SW50VHlwZSA9IGMtPkludFR5cGU7CisJY29uZmlnLT5Db25maWdCYXNlID0gYy0+Q29uZmlnQmFzZTsKKwljb25maWctPlN0YXR1cyA9IGMtPlN0YXR1czsKKwljb25maWctPlBpbiA9IGMtPlBpbjsKKwljb25maWctPkNvcHkgPSBjLT5Db3B5OworCWNvbmZpZy0+T3B0aW9uID0gYy0+T3B0aW9uOworCWNvbmZpZy0+RXh0U3RhdHVzID0gYy0+RXh0U3RhdHVzOworCWNvbmZpZy0+UHJlc2VudCA9IGNvbmZpZy0+Q2FyZFZhbHVlcyA9IGMtPkNhcmRWYWx1ZXM7CiAJY29uZmlnLT5JUlFBdHRyaWJ1dGVzID0gYy0+aXJxLkF0dHJpYnV0ZXM7CiAJY29uZmlnLT5Bc3NpZ25lZElSUSA9IHMtPmlycS5Bc3NpZ25lZElSUTsKIAljb25maWctPkJhc2VQb3J0MSA9IGMtPmlvLkJhc2VQb3J0MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG5wL2ludGVyZmFjZS5jIGIvZHJpdmVycy9wbnAvaW50ZXJmYWNlLmMKaW5kZXggMzE2M2UzZC4uOWQ4YjQxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9wbnAvaW50ZXJmYWNlLmMKQEAgLTI2NSw4ICsyNjUsOCBAQAogCQkJCXBucF9wcmludGYoYnVmZmVyLCIgZGlzYWJsZWRcbiIpOwogCQkJZWxzZQogCQkJCXBucF9wcmludGYoYnVmZmVyLCIgMHglbGx4LTB4JWxseFxuIiwKLQkJCQkJCXBucF9wb3J0X3N0YXJ0KGRldiwgaSksCi0JCQkJCQlwbnBfcG9ydF9lbmQoZGV2LCBpKSk7CisJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcG5wX3BvcnRfc3RhcnQoZGV2LCBpKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbnBfcG9ydF9lbmQoZGV2LCBpKSk7CiAJCX0KIAl9CiAJZm9yIChpID0gMDsgaSA8IFBOUF9NQVhfTUVNOyBpKyspIHsKQEAgLTI3Niw4ICsyNzYsOCBAQAogCQkJCXBucF9wcmludGYoYnVmZmVyLCIgZGlzYWJsZWRcbiIpOwogCQkJZWxzZQogCQkJCXBucF9wcmludGYoYnVmZmVyLCIgMHglbGx4LTB4JWxseFxuIiwKLQkJCQkJCXBucF9tZW1fc3RhcnQoZGV2LCBpKSwKLQkJCQkJCXBucF9tZW1fZW5kKGRldiwgaSkpOworCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBucF9tZW1fc3RhcnQoZGV2LCBpKSwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbnBfbWVtX2VuZChkZXYsIGkpKTsKIAkJfQogCX0KIAlmb3IgKGkgPSAwOyBpIDwgUE5QX01BWF9JUlE7IGkrKykgewpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJCQkJcG5wX3ByaW50ZihidWZmZXIsIiBkaXNhYmxlZFxuIik7CiAJCQllbHNlCiAJCQkJcG5wX3ByaW50ZihidWZmZXIsIiAlbGxkXG4iLAotCQkJCQkJcG5wX2lycShkZXYsIGkpKTsKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwbnBfaXJxKGRldiwgaSkpOwogCQl9CiAJfQogCWZvciAoaSA9IDA7IGkgPCBQTlBfTUFYX0RNQTsgaSsrKSB7CkBAIC0yOTcsNyArMjk3LDcgQEAKIAkJCQlwbnBfcHJpbnRmKGJ1ZmZlciwiIGRpc2FibGVkXG4iKTsKIAkJCWVsc2UKIAkJCQlwbnBfcHJpbnRmKGJ1ZmZlciwiICVsbGRcbiIsCi0JCQkJCQlwbnBfZG1hKGRldiwgaSkpOworCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKXBucF9kbWEoZGV2LCBpKSk7CiAJCX0KIAl9CiAJcmV0ID0gKGJ1ZmZlci0+Y3VyciAtIGJ1Zik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMgYi9kcml2ZXJzL3BucC9wbnBhY3BpL3JzcGFyc2VyLmMKaW5kZXggMjEyMjY4OC4uZGM3OWIwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbnAvcG5wYWNwaS9yc3BhcnNlci5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGFjcGkvcnNwYXJzZXIuYwpAQCAtMTczLDYgKzE3Myw5IEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAocC0+cHJvZHVjZXJfY29uc3VtZXIgPT0gQUNQSV9QUk9EVUNFUikKKwkJcmV0dXJuOworCiAJaWYgKHAtPnJlc291cmNlX3R5cGUgPT0gQUNQSV9NRU1PUllfUkFOR0UpCiAJCXBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX21lbXJlc291cmNlKHJlc190YWJsZSwKIAkJCQlwLT5taW5pbXVtLCBwLT5hZGRyZXNzX2xlbmd0aCk7CkBAIC0yNTIsOSArMjU1LDE0IEBACiAJCWJyZWFrOwogCiAJY2FzZSBBQ1BJX1JFU09VUkNFX1RZUEVfRVhURU5ERURfQUREUkVTUzY0OgorCQlpZiAocmVzLT5kYXRhLmV4dF9hZGRyZXNzNjQucHJvZHVjZXJfY29uc3VtZXIgPT0gQUNQSV9QUk9EVUNFUikKKwkJCXJldHVybiBBRV9PSzsKIAkJYnJlYWs7CiAKIAljYXNlIEFDUElfUkVTT1VSQ0VfVFlQRV9FWFRFTkRFRF9JUlE6CisJCWlmIChyZXMtPmRhdGEuZXh0ZW5kZWRfaXJxLnByb2R1Y2VyX2NvbnN1bWVyID09IEFDUElfUFJPRFVDRVIpCisJCQlyZXR1cm4gQUVfT0s7CisKIAkJZm9yIChpID0gMDsgaSA8IHJlcy0+ZGF0YS5leHRlbmRlZF9pcnEuaW50ZXJydXB0X2NvdW50OyBpKyspIHsKIAkJCXBucGFjcGlfcGFyc2VfYWxsb2NhdGVkX2lycXJlc291cmNlKHJlc190YWJsZSwKIAkJCQlyZXMtPmRhdGEuZXh0ZW5kZWRfaXJxLmludGVycnVwdHNbaV0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCmluZGV4IGIxNTRiM2YuLjU1MWY1OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCisrKyBiL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jCkBAIC0zNDYsNyArMzQ2LDcgQEAKIAlkZXYtPmZsYWdzID0gbm9kZS0+ZmxhZ3M7CiAJaWYgKCEoZGV2LT5mbGFncyAmIFBOUEJJT1NfTk9fQ09ORklHKSkKIAkJZGV2LT5jYXBhYmlsaXRpZXMgfD0gUE5QX0NPTkZJR1VSQUJMRTsKLQlpZiAoIShkZXYtPmZsYWdzICYgUE5QQklPU19OT19ESVNBQkxFKSkKKwlpZiAoIShkZXYtPmZsYWdzICYgUE5QQklPU19OT19ESVNBQkxFKSAmJiBwbnBiaW9zX2lzX2R5bmFtaWMoZGV2KSkKIAkJZGV2LT5jYXBhYmlsaXRpZXMgfD0gUE5QX0RJU0FCTEU7CiAJZGV2LT5jYXBhYmlsaXRpZXMgfD0gUE5QX1JFQUQ7CiAJaWYgKHBucGJpb3NfaXNfZHluYW1pYyhkZXYpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jIGIvZHJpdmVycy9ydGMvcnRjLXMzYy5jCmluZGV4IGQ2ZDFiZmYuLjJjN2RlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKQEAgLTY5LDEyICs2OSwxMiBAQAogCiAJcHJfZGVidWcoIiVzOiBhaWU9JWRcbiIsIF9fRlVOQ1RJT05fXywgdG8pOwogCi0JdG1wID0gcmVhZGIoUzNDMjQxMF9SVENBTE0pICYgflMzQzI0MTBfUlRDQUxNX0FMTUVOOworCXRtcCA9IHJlYWRiKHMzY19ydGNfYmFzZSArIFMzQzI0MTBfUlRDQUxNKSAmIH5TM0MyNDEwX1JUQ0FMTV9BTE1FTjsKIAogCWlmICh0bykKIAkJdG1wIHw9IFMzQzI0MTBfUlRDQUxNX0FMTUVOOwogCi0Jd3JpdGViKHRtcCwgUzNDMjQxMF9SVENBTE0pOworCXdyaXRlYih0bXAsIHMzY19ydGNfYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIH0KIAogc3RhdGljIHZvaWQgczNjX3J0Y19zZXRwaWUoaW50IHRvKQpAQCAtODQsMTIgKzg0LDEyIEBACiAJcHJfZGVidWcoIiVzOiBwaWU9JWRcbiIsIF9fRlVOQ1RJT05fXywgdG8pOwogCiAJc3Bpbl9sb2NrX2lycSgmczNjX3J0Y19waWVfbG9jayk7Ci0JdG1wID0gcmVhZGIoUzNDMjQxMF9USUNOVCkgJiB+UzNDMjQxMF9USUNOVF9FTkFCTEU7CisJdG1wID0gcmVhZGIoczNjX3J0Y19iYXNlICsgUzNDMjQxMF9USUNOVCkgJiB+UzNDMjQxMF9USUNOVF9FTkFCTEU7CiAKIAlpZiAodG8pCiAJCXRtcCB8PSBTM0MyNDEwX1RJQ05UX0VOQUJMRTsKIAotCXdyaXRlYih0bXAsIFMzQzI0MTBfVElDTlQpOworCXdyaXRlYih0bXAsIHMzY19ydGNfYmFzZSArIFMzQzI0MTBfVElDTlQpOwogCXNwaW5fdW5sb2NrX2lycSgmczNjX3J0Y19waWVfbG9jayk7CiB9CiAKQEAgLTk4LDEzICs5OCwxMyBAQAogCXVuc2lnbmVkIGludCB0bXA7CiAKIAlzcGluX2xvY2tfaXJxKCZzM2NfcnRjX3BpZV9sb2NrKTsKLQl0bXAgPSByZWFkYihTM0MyNDEwX1RJQ05UKSAmIFMzQzI0MTBfVElDTlRfRU5BQkxFOworCXRtcCA9IHJlYWRiKHMzY19ydGNfYmFzZSArIFMzQzI0MTBfVElDTlQpICYgUzNDMjQxMF9USUNOVF9FTkFCTEU7CiAKIAlzM2NfcnRjX2ZyZXEgPSBmcmVxOwogCiAJdG1wIHw9ICgxMjggLyBmcmVxKS0xOwogCi0Jd3JpdGViKHRtcCwgUzNDMjQxMF9USUNOVCk7CisJd3JpdGViKHRtcCwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9USUNOVCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZzM2NfcnRjX3BpZV9sb2NrKTsKIH0KIApAQCAtMTEzLDE0ICsxMTMsMTUgQEAKIHN0YXRpYyBpbnQgczNjX3J0Y19nZXR0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCiB7CiAJdW5zaWduZWQgaW50IGhhdmVfcmV0cmllZCA9IDA7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gczNjX3J0Y19iYXNlOwogCiAgcmV0cnlfZ2V0X3RpbWU6Ci0JcnRjX3RtLT50bV9taW4gID0gcmVhZGIoUzNDMjQxMF9SVENNSU4pOwotCXJ0Y190bS0+dG1faG91ciA9IHJlYWRiKFMzQzI0MTBfUlRDSE9VUik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gcmVhZGIoUzNDMjQxMF9SVENEQVRFKTsKLQlydGNfdG0tPnRtX21vbiAgPSByZWFkYihTM0MyNDEwX1JUQ01PTik7Ci0JcnRjX3RtLT50bV95ZWFyID0gcmVhZGIoUzNDMjQxMF9SVENZRUFSKTsKLQlydGNfdG0tPnRtX3NlYyAgPSByZWFkYihTM0MyNDEwX1JUQ1NFQyk7CisJcnRjX3RtLT50bV9taW4gID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfUlRDTUlOKTsKKwlydGNfdG0tPnRtX2hvdXIgPSByZWFkYihiYXNlICsgUzNDMjQxMF9SVENIT1VSKTsKKwlydGNfdG0tPnRtX21kYXkgPSByZWFkYihiYXNlICsgUzNDMjQxMF9SVENEQVRFKTsKKwlydGNfdG0tPnRtX21vbiAgPSByZWFkYihiYXNlICsgUzNDMjQxMF9SVENNT04pOworCXJ0Y190bS0+dG1feWVhciA9IHJlYWRiKGJhc2UgKyBTM0MyNDEwX1JUQ1lFQVIpOworCXJ0Y190bS0+dG1fc2VjICA9IHJlYWRiKGJhc2UgKyBTM0MyNDEwX1JUQ1NFQyk7CiAKIAkvKiB0aGUgb25seSB3YXkgdG8gd29yayBvdXQgd2V0aGVyIHRoZSBzeXN0ZW0gd2FzIG1pZC11cGRhdGUKIAkgKiB3aGVuIHdlIHJlYWQgaXQgaXMgdG8gY2hlY2sgdGhlIHNlY29uZCBjb3VudGVyLCBhbmQgaWYgaXQKQEAgLTE1MSwxNyArMTUyLDI2IEBACiAKIHN0YXRpYyBpbnQgczNjX3J0Y19zZXR0aW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y190aW1lICp0bSkKIHsKLQkvKiB0aGUgcnRjIGdldHMgcm91bmQgdGhlIHkyayBwcm9ibGVtIGJ5IGp1c3Qgbm90IHN1cHBvcnRpbmcgaXQgKi8KKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBzM2NfcnRjX2Jhc2U7CisJaW50IHllYXIgPSB0bS0+dG1feWVhciAtIDEwMDsKIAotCWlmICh0bS0+dG1feWVhciA8IDEwMCkKKwlwcl9kZWJ1Zygic2V0IHRpbWUgJTAyZC4lMDJkLiUwMmQgJTAyZC8lMDJkLyUwMmRcbiIsCisJCSB0bS0+dG1feWVhciwgdG0tPnRtX21vbiwgdG0tPnRtX21kYXksCisJCSB0bS0+dG1faG91ciwgdG0tPnRtX21pbiwgdG0tPnRtX3NlYyk7CisKKwkvKiB3ZSBnZXQgYXJvdW5kIHkyayBieSBzaW1wbHkgbm90IHN1cHBvcnRpbmcgaXQgKi8KKworCWlmICh5ZWFyIDwgMCB8fCB5ZWFyID49IDEwMCkgeworCQlkZXZfZXJyKGRldiwgInJ0YyBvbmx5IHN1cHBvcnRzIDEwMCB5ZWFyc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOworCX0KIAotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCAgUzNDMjQxMF9SVENTRUMpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCAgUzNDMjQxMF9SVENNSU4pOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgUzNDMjQxMF9SVENIT1VSKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIFMzQzI0MTBfUlRDREFURSk7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21vbiArIDEpLCBTM0MyNDEwX1JUQ01PTik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX3llYXIgLSAxMDApLCBTM0MyNDEwX1JUQ1lFQVIpOworCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCAgYmFzZSArIFMzQzI0MTBfUlRDU0VDKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgIGJhc2UgKyBTM0MyNDEwX1JUQ01JTik7CisJd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBiYXNlICsgUzNDMjQxMF9SVENIT1VSKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWRheSksIGJhc2UgKyBTM0MyNDEwX1JUQ0RBVEUpOworCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgYmFzZSArIFMzQzI0MTBfUlRDTU9OKTsKKwl3cml0ZWIoQklOMkJDRCh5ZWFyKSwgYmFzZSArIFMzQzI0MTBfUlRDWUVBUik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSwxNiArMTc5LDE3IEBACiBzdGF0aWMgaW50IHMzY19ydGNfZ2V0YWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKIHsKIAlzdHJ1Y3QgcnRjX3RpbWUgKmFsbV90bSA9ICZhbHJtLT50aW1lOworCXZvaWQgX19pb21lbSAqYmFzZSA9IHMzY19ydGNfYmFzZTsKIAl1bnNpZ25lZCBpbnQgYWxtX2VuOwogCi0JYWxtX3RtLT50bV9zZWMgID0gcmVhZGIoUzNDMjQxMF9BTE1TRUMpOwotCWFsbV90bS0+dG1fbWluICA9IHJlYWRiKFMzQzI0MTBfQUxNTUlOKTsKLQlhbG1fdG0tPnRtX2hvdXIgPSByZWFkYihTM0MyNDEwX0FMTUhPVVIpOwotCWFsbV90bS0+dG1fbW9uICA9IHJlYWRiKFMzQzI0MTBfQUxNTU9OKTsKLQlhbG1fdG0tPnRtX21kYXkgPSByZWFkYihTM0MyNDEwX0FMTURBVEUpOwotCWFsbV90bS0+dG1feWVhciA9IHJlYWRiKFMzQzI0MTBfQUxNWUVBUik7CisJYWxtX3RtLT50bV9zZWMgID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfQUxNU0VDKTsKKwlhbG1fdG0tPnRtX21pbiAgPSByZWFkYihiYXNlICsgUzNDMjQxMF9BTE1NSU4pOworCWFsbV90bS0+dG1faG91ciA9IHJlYWRiKGJhc2UgKyBTM0MyNDEwX0FMTUhPVVIpOworCWFsbV90bS0+dG1fbW9uICA9IHJlYWRiKGJhc2UgKyBTM0MyNDEwX0FMTU1PTik7CisJYWxtX3RtLT50bV9tZGF5ID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfQUxNREFURSk7CisJYWxtX3RtLT50bV95ZWFyID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfQUxNWUVBUik7CiAKLQlhbG1fZW4gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7CisJYWxtX2VuID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIAogCXByX2RlYnVnKCJyZWFkIGFsYXJtICUwMnggJTAyeC4lMDJ4LiUwMnggJTAyeC8lMDJ4LyUwMnhcbiIsCiAJCSBhbG1fZW4sCkBAIC0yMjYsNiArMjM3LDcgQEAKIHN0YXRpYyBpbnQgczNjX3J0Y19zZXRhbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfd2thbHJtICphbHJtKQogewogCXN0cnVjdCBydGNfdGltZSAqdG0gPSAmYWxybS0+dGltZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBzM2NfcnRjX2Jhc2U7CiAJdW5zaWduZWQgaW50IGFscm1fZW47CiAKIAlwcl9kZWJ1ZygiczNjX3J0Y19zZXRhbGFybTogJWQsICUwMngvJTAyeC8lMDJ4ICUwMnguJTAyeC4lMDJ4XG4iLApAQCAtMjM0LDMyICsyNDYsMzIgQEAKIAkJIHRtLT50bV9ob3VyICYgMHhmZiwgdG0tPnRtX21pbiAmIDB4ZmYsIHRtLT50bV9zZWMpOwogCiAKLQlhbHJtX2VuID0gcmVhZGIoUzNDMjQxMF9SVENBTE0pICYgUzNDMjQxMF9SVENBTE1fQUxNRU47Ci0Jd3JpdGViKDB4MDAsIFMzQzI0MTBfUlRDQUxNKTsKKwlhbHJtX2VuID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfUlRDQUxNKSAmIFMzQzI0MTBfUlRDQUxNX0FMTUVOOworCXdyaXRlYigweDAwLCBiYXNlICsgUzNDMjQxMF9SVENBTE0pOwogCiAJaWYgKHRtLT50bV9zZWMgPCA2MCAmJiB0bS0+dG1fc2VjID49IDApIHsKIAkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9TRUNFTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksIFMzQzI0MTBfQUxNU0VDKTsKKwkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksIGJhc2UgKyBTM0MyNDEwX0FMTVNFQyk7CiAJfQogCiAJaWYgKHRtLT50bV9taW4gPCA2MCAmJiB0bS0+dG1fbWluID49IDApIHsKIAkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9NSU5FTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIFMzQzI0MTBfQUxNTUlOKTsKKwkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX21pbiksIGJhc2UgKyBTM0MyNDEwX0FMTU1JTik7CiAJfQogCiAJaWYgKHRtLT50bV9ob3VyIDwgMjQgJiYgdG0tPnRtX2hvdXIgPj0gMCkgewogCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX0hPVVJFTjsKLQkJd3JpdGViKEJJTjJCQ0QodG0tPnRtX2hvdXIpLCBTM0MyNDEwX0FMTUhPVVIpOworCQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIGJhc2UgKyBTM0MyNDEwX0FMTUhPVVIpOwogCX0KIAogCXByX2RlYnVnKCJzZXR0aW5nIFMzQzI0MTBfUlRDQUxNIHRvICUwOHhcbiIsIGFscm1fZW4pOwogCi0Jd3JpdGViKGFscm1fZW4sIFMzQzI0MTBfUlRDQUxNKTsKKwl3cml0ZWIoYWxybV9lbiwgYmFzZSArIFMzQzI0MTBfUlRDQUxNKTsKIAogCWlmICgwKSB7Ci0JCWFscm1fZW4gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7CisJCWFscm1fZW4gPSByZWFkYihiYXNlICsgUzNDMjQxMF9SVENBTE0pOwogCQlhbHJtX2VuICY9IH5TM0MyNDEwX1JUQ0FMTV9BTE1FTjsKLQkJd3JpdGViKGFscm1fZW4sIFMzQzI0MTBfUlRDQUxNKTsKKwkJd3JpdGViKGFscm1fZW4sIGJhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CiAJCWRpc2FibGVfaXJxX3dha2UoczNjX3J0Y19hbGFybW5vKTsKIAl9CiAKQEAgLTMxOSw4ICszMzEsOCBAQAogCiBzdGF0aWMgaW50IHMzY19ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQogewotCXVuc2lnbmVkIGludCBydGNhbG0gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7Ci0JdW5zaWduZWQgaW50IHRpY250ID0gcmVhZGIgKFMzQzI0MTBfVElDTlQpOworCXVuc2lnbmVkIGludCBydGNhbG0gPSByZWFkYihzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1JUQ0FMTSk7CisJdW5zaWduZWQgaW50IHRpY250ID0gcmVhZGIoczNjX3J0Y19iYXNlICsgUzNDMjQxMF9USUNOVCk7CiAKIAlzZXFfcHJpbnRmKHNlcSwgImFsYXJtX0lSUVx0OiAlc1xuIiwKIAkJICAgKHJ0Y2FsbSAmIFMzQzI0MTBfUlRDQUxNX0FMTUVOKSA/ICJ5ZXMiIDogIm5vIiApOwpAQCAtMzg3LDM5ICszOTksNDAgQEAKIAogc3RhdGljIHZvaWQgczNjX3J0Y19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgaW50IGVuKQogeworCXZvaWQgX19pb21lbSAqYmFzZSA9IHMzY19ydGNfYmFzZTsKIAl1bnNpZ25lZCBpbnQgdG1wOwogCiAJaWYgKHMzY19ydGNfYmFzZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAlpZiAoIWVuKSB7Ci0JCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQ09OKTsKLQkJd3JpdGViKHRtcCAmIH5TM0MyNDEwX1JUQ0NPTl9SVENFTiwgUzNDMjQxMF9SVENDT04pOworCQl0bXAgPSByZWFkYihiYXNlICsgUzNDMjQxMF9SVENDT04pOworCQl3cml0ZWIodG1wICYgflMzQzI0MTBfUlRDQ09OX1JUQ0VOLCBiYXNlICsgUzNDMjQxMF9SVENDT04pOwogCi0JCXRtcCA9IHJlYWRiKFMzQzI0MTBfVElDTlQpOwotCQl3cml0ZWIodG1wICYgflMzQzI0MTBfVElDTlRfRU5BQkxFLCBTM0MyNDEwX1RJQ05UKTsKKwkJdG1wID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfVElDTlQpOworCQl3cml0ZWIodG1wICYgflMzQzI0MTBfVElDTlRfRU5BQkxFLCBiYXNlICsgUzNDMjQxMF9USUNOVCk7CiAJfSBlbHNlIHsKIAkJLyogcmUtZW5hYmxlIHRoZSBkZXZpY2UsIGFuZCBjaGVjayBpdCBpcyBvayAqLwogCi0JCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fUlRDRU4pID09IDApeworCQlpZiAoKHJlYWRiKGJhc2UrUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fUlRDRU4pID09IDApewogCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOwogCi0JCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7Ci0JCQl3cml0ZWIodG1wIHwgUzNDMjQxMF9SVENDT05fUlRDRU4gLCBTM0MyNDEwX1JUQ0NPTik7CisJCQl0bXAgPSByZWFkYihiYXNlICsgUzNDMjQxMF9SVENDT04pOworCQkJd3JpdGViKHRtcHxTM0MyNDEwX1JUQ0NPTl9SVENFTiwgYmFzZStTM0MyNDEwX1JUQ0NPTik7CiAJCX0KIAotCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NOVFNFTCkpeworCQlpZiAoKHJlYWRiKGJhc2UgKyBTM0MyNDEwX1JUQ0NPTikgJiBTM0MyNDEwX1JUQ0NPTl9DTlRTRUwpKXsKIAkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJyZW1vdmluZyBSVENDT05fQ05UU0VMXG4iKTsKIAotCQkJdG1wID0gcmVhZGIoUzNDMjQxMF9SVENDT04pOwotCQkJd3JpdGViKHRtcCYgflMzQzI0MTBfUlRDQ09OX0NOVFNFTCAsIFMzQzI0MTBfUlRDQ09OKTsKKwkJCXRtcCA9IHJlYWRiKGJhc2UgKyBTM0MyNDEwX1JUQ0NPTik7CisJCQl3cml0ZWIodG1wJiB+UzNDMjQxMF9SVENDT05fQ05UU0VMLCBiYXNlK1MzQzI0MTBfUlRDQ09OKTsKIAkJfQogCi0JCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fQ0xLUlNUKSl7CisJCWlmICgocmVhZGIoYmFzZSArIFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NMS1JTVCkpewogCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92aW5nIFJUQ0NPTl9DTEtSU1RcbiIpOwogCi0JCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7Ci0JCQl3cml0ZWIodG1wICYgflMzQzI0MTBfUlRDQ09OX0NMS1JTVCwgUzNDMjQxMF9SVENDT04pOworCQkJdG1wID0gcmVhZGIoYmFzZSArIFMzQzI0MTBfUlRDQ09OKTsKKwkJCXdyaXRlYih0bXAgJiB+UzNDMjQxMF9SVENDT05fQ0xLUlNULCBiYXNlK1MzQzI0MTBfUlRDQ09OKTsKIAkJfQogCX0KIH0KQEAgLTQ3NSw4ICs0ODgsOCBAQAogCX0KIAogCXMzY19ydGNfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsCi0JCQkJCSAgICAgcmVzLT5lbmQtcmVzLT5zdGFydCsxLAotCQkJCQkgICAgIHBkZXYtPm5hbWUpOworCQkJCQkgcmVzLT5lbmQtcmVzLT5zdGFydCsxLAorCQkJCQkgcGRldi0+bmFtZSk7CiAKIAlpZiAoczNjX3J0Y19tZW0gPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKQEAgLTQ5NSw3ICs1MDgsOCBAQAogCiAJczNjX3J0Y19lbmFibGUocGRldiwgMSk7CiAKLSAJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBSVENDT049JTAyeFxuIiwgcmVhZGIoUzNDMjQxMF9SVENDT04pKTsKKyAJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBSVENDT049JTAyeFxuIiwKKwkJIHJlYWRiKHMzY19ydGNfYmFzZSArIFMzQzI0MTBfUlRDQ09OKSk7CiAKIAlzM2NfcnRjX3NldGZyZXEoczNjX3J0Y19mcmVxKTsKIApAQCAtNTQzLDcgKzU1Nyw3IEBACiAKIAkvKiBzYXZlIFRJQ05UIGZvciBhbnlvbmUgdXNpbmcgcGVyaW9kaWMgaW50ZXJydXB0cyAqLwogCi0JdGljbnRfc2F2ZSA9IHJlYWRiKFMzQzI0MTBfVElDTlQpOworCXRpY250X3NhdmUgPSByZWFkYihzM2NfcnRjX2Jhc2UgKyBTM0MyNDEwX1RJQ05UKTsKIAogCS8qIGNhbGN1bGF0ZSB0aW1lIGRlbHRhIGZvciBzdXNwZW5kICovCiAKQEAgLTU2Nyw3ICs1ODEsNyBAQAogCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKIAlyZXN0b3JlX3RpbWVfZGVsdGEoJnMzY19ydGNfZGVsdGEsICZ0aW1lKTsKIAotCXdyaXRlYih0aWNudF9zYXZlLCBTM0MyNDEwX1RJQ05UKTsKKwl3cml0ZWIodGljbnRfc2F2ZSwgczNjX3J0Y19iYXNlICsgUzNDMjQxMF9USUNOVCk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL0tjb25maWcgYi9kcml2ZXJzL3MzOTAvS2NvbmZpZwppbmRleCA0ZDM2MjA4Li5hZTg5YjliOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL0tjb25maWcKKysrIGIvZHJpdmVycy9zMzkwL0tjb25maWcKQEAgLTIxMywxNyArMjEzLDM1IEBACiAJaGVscAogCSAgQ2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIHJlYWRpbmcgei9WTSBtb25pdG9yIHNlcnZpY2UgcmVjb3JkcwogCitjb25maWcgTU9OV1JJVEVSCisJdHJpc3RhdGUgIkFQSSBmb3Igd3JpdGluZyB6L1ZNIG1vbml0b3Igc2VydmljZSByZWNvcmRzIgorCWRlZmF1bHQgIm0iCisJaGVscAorCSAgQ2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIHdyaXRpbmcgei9WTSBtb25pdG9yIHNlcnZpY2UgcmVjb3JkcworCiBlbmRtZW51CiAKIG1lbnUgIkNyeXB0b2dyYXBoaWMgZGV2aWNlcyIKIAotY29uZmlnIFo5MENSWVBUCitjb25maWcgWkNSWVBUCiAJdHJpc3RhdGUgIlN1cHBvcnQgZm9yIFBDSS1hdHRhY2hlZCBjcnlwdG9ncmFwaGljIGFkYXB0ZXJzIgotICAgICAgICBkZWZhdWx0ICJtIgotICAgICAgICBoZWxwCisJc2VsZWN0IFpDUllQVF9NT05PTElUSElDIGlmIFpDUllQVD0ieSIKKwlkZWZhdWx0ICJtIgorCWhlbHAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgYSBQQ0ktYXR0YWNoZWQgY3J5cHRvZ3JhcGhpYwotCSAgYWRhcHRlciBsaWtlIHRoZSBQQ0kgQ3J5cHRvZ3JhcGhpYyBBY2NlbGVyYXRvciAoUENJQ0EpIG9yIHRoZSBQQ0kKLQkgIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgKFBDSUNDKS4gIFRoaXMgb3B0aW9uIGlzIGFsc28gYXZhaWxhYmxlCi0JICBhcyBhIG1vZHVsZSBjYWxsZWQgejkwY3J5cHQua28uCisJICBhZGFwdGVyIGxpa2U6CisJICArIFBDSSBDcnlwdG9ncmFwaGljIEFjY2VsZXJhdG9yIChQQ0lDQSkKKwkgICsgUENJIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgKFBDSUNDKQorCSAgKyBQQ0ktWCBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIChQQ0lYQ0MpCisJICArIENyeXB0byBFeHByZXNzMiBDb3Byb2Nlc3NvciAoQ0VYMkMpCisJICArIENyeXB0byBFeHByZXNzMiBBY2NlbGVyYXRvciAoQ0VYMkEpCisKK2NvbmZpZyBaQ1JZUFRfTU9OT0xJVEhJQworCWJvb2wgIk1vbm9saXRoaWMgemNyeXB0IG1vZHVsZSIKKwlkZXBlbmRzIG9uIFpDUllQVD0ibSIKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSBtb2R1bGUgejkwY3J5cHQua28KKwkgIHRoYXQgY29udGFpbnMgYWxsIHBhcnRzIG9mIHRoZSBjcnlwdG8gZGV2aWNlIGRyaXZlciAoYXAgYnVzLAorCSAgcmVxdWVzdCByb3V0ZXIgYW5kIGFsbCB0aGUgY2FyZCBkcml2ZXJzKS4KIAogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKaW5kZXggNGJmMDNmYi4uZDA2NDdkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCkBAIC01Miw3ICs1Miw3IEBACiBzdGF0aWMgdm9pZCBkYXNkX2ZyZWVfcXVldWUoc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlKTsKIHN0YXRpYyB2b2lkIGRhc2RfZmx1c2hfcmVxdWVzdF9xdWV1ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiBzdGF0aWMgdm9pZCBkYXNkX2ludF9oYW5kbGVyKHN0cnVjdCBjY3dfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBpcmIgKik7Ci1zdGF0aWMgdm9pZCBkYXNkX2ZsdXNoX2Njd19xdWV1ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiwgaW50KTsKK3N0YXRpYyBpbnQgZGFzZF9mbHVzaF9jY3dfcXVldWUoc3RydWN0IGRhc2RfZGV2aWNlICosIGludCk7CiBzdGF0aWMgdm9pZCBkYXNkX3Rhc2tsZXQoc3RydWN0IGRhc2RfZGV2aWNlICopOwogc3RhdGljIHZvaWQgZG9fa2lja19kZXZpY2Uodm9pZCAqZGF0YSk7CiAKQEAgLTYwLDYgKzYwLDcgQEAKICAqIFNFQ1RJT046IE9wZXJhdGlvbnMgb24gdGhlIGRldmljZSBzdHJ1Y3R1cmUuCiAgKi8KIHN0YXRpYyB3YWl0X3F1ZXVlX2hlYWRfdCBkYXNkX2luaXRfd2FpdHE7CitzdGF0aWMgd2FpdF9xdWV1ZV9oZWFkX3QgZGFzZF9mbHVzaF93cTsKIAogLyoKICAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgYSBuZXcgZGV2aWNlIHN0cnVjdHVyZS4KQEAgLTEyMSw3ICsxMjIsNyBAQAogLyoKICAqIE1ha2UgYSBuZXcgZGV2aWNlIGtub3duIHRvIHRoZSBzeXN0ZW0uCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBkYXNkX3N0YXRlX25ld190b19rbm93bihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmM7CkBAIC0xNDUsNyArMTQ2LDcgQEAKIC8qCiAgKiBMZXQgdGhlIHN5c3RlbSBmb3JnZXQgYWJvdXQgYSBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGludAogZGFzZF9zdGF0ZV9rbm93bl90b19uZXcoc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlKQogewogCS8qIERpc2FibGUgZXh0ZW5kZWQgZXJyb3IgcmVwb3J0aW5nIGZvciB0aGlzIGRldmljZS4gKi8KQEAgLTE2MywxMiArMTY0LDEzIEBACiAKIAkvKiBHaXZlIHVwIHJlZmVyZW5jZSB3ZSB0b29rIGluIGRhc2Rfc3RhdGVfbmV3X3RvX2tub3duLiAqLwogCWRhc2RfcHV0X2RldmljZShkZXZpY2UpOworCXJldHVybiAwOwogfQogCiAvKgogICogUmVxdWVzdCB0aGUgaXJxIGxpbmUgZm9yIHRoZSBkZXZpY2UuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBkYXNkX3N0YXRlX2tub3duX3RvX2Jhc2ljKHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKIHsKIAlpbnQgcmM7CkBAIC0xODIsNyArMTg0LDcgQEAKIAlkZXZpY2UtPmRlYnVnX2FyZWEgPSBkZWJ1Z19yZWdpc3RlcihkZXZpY2UtPmNkZXYtPmRldi5idXNfaWQsIDEsIDIsCiAJCQkJCSAgICA4ICogc2l6ZW9mIChsb25nKSk7CiAJZGVidWdfcmVnaXN0ZXJfdmlldyhkZXZpY2UtPmRlYnVnX2FyZWEsICZkZWJ1Z19zcHJpbnRmX3ZpZXcpOwotCWRlYnVnX3NldF9sZXZlbChkZXZpY2UtPmRlYnVnX2FyZWEsIERCRl9FTUVSRyk7CisJZGVidWdfc2V0X2xldmVsKGRldmljZS0+ZGVidWdfYXJlYSwgREJGX1dBUk5JTkcpOwogCURCRl9ERVZfRVZFTlQoREJGX0VNRVJHLCBkZXZpY2UsICIlcyIsICJkZWJ1ZyBhcmVhIGNyZWF0ZWQiKTsKIAogCWRldmljZS0+c3RhdGUgPSBEQVNEX1NUQVRFX0JBU0lDOwpAQCAtMTkyLDE3ICsxOTQsMjMgQEAKIC8qCiAgKiBSZWxlYXNlIHRoZSBpcnEgbGluZSBmb3IgdGhlIGRldmljZS4gVGVybWluYXRlIGFueSBydW5uaW5nIGkvby4KICAqLwotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW50CiBkYXNkX3N0YXRlX2Jhc2ljX3RvX2tub3duKHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKIHsKKwlpbnQgcmM7CisKIAlkYXNkX2dlbmRpc2tfZnJlZShkZXZpY2UpOwotCWRhc2RfZmx1c2hfY2N3X3F1ZXVlKGRldmljZSwgMSk7CisJcmMgPSBkYXNkX2ZsdXNoX2Njd19xdWV1ZShkZXZpY2UsIDEpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJREJGX0RFVl9FVkVOVChEQkZfRU1FUkcsIGRldmljZSwgIiVwIGRlYnVnIGFyZWEgZGVsZXRlZCIsIGRldmljZSk7CiAJaWYgKGRldmljZS0+ZGVidWdfYXJlYSAhPSBOVUxMKSB7CiAJCWRlYnVnX3VucmVnaXN0ZXIoZGV2aWNlLT5kZWJ1Z19hcmVhKTsKIAkJZGV2aWNlLT5kZWJ1Z19hcmVhID0gTlVMTDsKIAl9CiAJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfS05PV047CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMTksNyArMjI3LDcgQEAKICAqIEluIGNhc2UgdGhlIGFuYWx5c2lzIHJldHVybnMgYW4gZXJyb3IsIHRoZSBkZXZpY2Ugc2V0dXAgaXMgc3RvcHBlZAogICogKGEgZmFrZSBkaXNrIHdhcyBhbHJlYWR5IGFkZGVkIHRvIGFsbG93IGZvcm1hdHRpbmcpLgogICovCi1zdGF0aWMgaW5saW5lIGludAorc3RhdGljIGludAogZGFzZF9zdGF0ZV9iYXNpY190b19yZWFkeShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UpCiB7CiAJaW50IHJjOwpAQCAtMjQ3LDI1ICsyNTUsMzEgQEAKICAqIEZvcmdldCBmb3JtYXQgaW5mb3JtYXRpb24uIENoZWNrIGlmIHRoZSB0YXJnZXQgbGV2ZWwgaXMgYmFzaWMKICAqIGFuZCBpZiBpdCBpcyBjcmVhdGUgZmFrZSBkaXNrIGZvciBmb3JtYXR0aW5nLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbnQKIGRhc2Rfc3RhdGVfcmVhZHlfdG9fYmFzaWMoc3RydWN0IGRhc2RfZGV2aWNlICogZGV2aWNlKQogewotCWRhc2RfZmx1c2hfY2N3X3F1ZXVlKGRldmljZSwgMCk7CisJaW50IHJjOworCisJcmMgPSBkYXNkX2ZsdXNoX2Njd19xdWV1ZShkZXZpY2UsIDApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOwogCWRhc2RfZGVzdHJveV9wYXJ0aXRpb25zKGRldmljZSk7CiAJZGFzZF9mbHVzaF9yZXF1ZXN0X3F1ZXVlKGRldmljZSk7CiAJZGV2aWNlLT5ibG9ja3MgPSAwOwogCWRldmljZS0+YnBfYmxvY2sgPSAwOwogCWRldmljZS0+czJiX3NoaWZ0ID0gMDsKIAlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9CQVNJQzsKKwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEJhY2sgdG8gYmFzaWMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAorc3RhdGljIGludAogZGFzZF9zdGF0ZV91bmZtdF90b19iYXNpYyhzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UpCiB7CiAJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfQkFTSUM7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yNzMsNyArMjg3LDcgQEAKICAqIHRoZSByZXF1ZXVlaW5nIG9mIHJlcXVlc3RzIGZyb20gdGhlIGxpbnV4IHJlcXVlc3QgcXVldWUgdG8gdGhlCiAgKiBjY3cgcXVldWUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBkYXNkX3N0YXRlX3JlYWR5X3RvX29ubGluZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UpCiB7CiAJZGV2aWNlLT5zdGF0ZSA9IERBU0RfU1RBVEVfT05MSU5FOwpAQCAtMjg0LDE2ICsyOTgsMTcgQEAKIC8qCiAgKiBTdG9wIHRoZSByZXF1ZXVlaW5nIG9mIHJlcXVlc3RzIGFnYWluLgogICovCi1zdGF0aWMgaW5saW5lIHZvaWQKK3N0YXRpYyBpbnQKIGRhc2Rfc3RhdGVfb25saW5lX3RvX3JlYWR5KHN0cnVjdCBkYXNkX2RldmljZSAqIGRldmljZSkKIHsKIAlkZXZpY2UtPnN0YXRlID0gREFTRF9TVEFURV9SRUFEWTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIERldmljZSBzdGFydHVwIHN0YXRlIGNoYW5nZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBkYXNkX2luY3JlYXNlX3N0YXRlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCWludCByYzsKQEAgLTMyOSwzMCArMzQ0LDM3IEBACiAvKgogICogRGV2aWNlIHNodXRkb3duIHN0YXRlIGNoYW5nZXMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50CitzdGF0aWMgaW50CiBkYXNkX2RlY3JlYXNlX3N0YXRlKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogeworCWludCByYzsKKworCXJjID0gMDsKIAlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX09OTElORSAmJgogCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX1JFQURZKQotCQlkYXNkX3N0YXRlX29ubGluZV90b19yZWFkeShkZXZpY2UpOworCQlyYyA9IGRhc2Rfc3RhdGVfb25saW5lX3RvX3JlYWR5KGRldmljZSk7CiAKLQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX1JFQURZICYmCisJaWYgKCFyYyAmJgorCSAgICBkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfUkVBRFkgJiYKIAkgICAgZGV2aWNlLT50YXJnZXQgPD0gREFTRF9TVEFURV9CQVNJQykKLQkJZGFzZF9zdGF0ZV9yZWFkeV90b19iYXNpYyhkZXZpY2UpOworCQlyYyA9IGRhc2Rfc3RhdGVfcmVhZHlfdG9fYmFzaWMoZGV2aWNlKTsKIAotCWlmIChkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfVU5GTVQgJiYKKwlpZiAoIXJjICYmCisJICAgIGRldmljZS0+c3RhdGUgPT0gREFTRF9TVEFURV9VTkZNVCAmJgogCSAgICBkZXZpY2UtPnRhcmdldCA8PSBEQVNEX1NUQVRFX0JBU0lDKQotCQlkYXNkX3N0YXRlX3VuZm10X3RvX2Jhc2ljKGRldmljZSk7CisJCXJjID0gZGFzZF9zdGF0ZV91bmZtdF90b19iYXNpYyhkZXZpY2UpOwogCi0JaWYgKGRldmljZS0+c3RhdGUgPT0gREFTRF9TVEFURV9CQVNJQyAmJgorCWlmICghcmMgJiYKKwkgICAgZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX0JBU0lDICYmCiAJICAgIGRldmljZS0+dGFyZ2V0IDw9IERBU0RfU1RBVEVfS05PV04pCi0JCWRhc2Rfc3RhdGVfYmFzaWNfdG9fa25vd24oZGV2aWNlKTsKKwkJcmMgPSBkYXNkX3N0YXRlX2Jhc2ljX3RvX2tub3duKGRldmljZSk7CiAKLQlpZiAoZGV2aWNlLT5zdGF0ZSA9PSBEQVNEX1NUQVRFX0tOT1dOICYmCisJaWYgKCFyYyAmJgorCSAgICBkZXZpY2UtPnN0YXRlID09IERBU0RfU1RBVEVfS05PV04gJiYKIAkgICAgZGV2aWNlLT50YXJnZXQgPD0gREFTRF9TVEFURV9ORVcpCi0JCWRhc2Rfc3RhdGVfa25vd25fdG9fbmV3KGRldmljZSk7CisJCXJjID0gZGFzZF9zdGF0ZV9rbm93bl90b19uZXcoZGV2aWNlKTsKIAotCXJldHVybiAwOworCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTcwMSw2ICs3MjMsNyBAQAogCQkJY3FyLT5yZXRyaWVzLS07CiAJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0NMRUFSOwogCQkJY3FyLT5zdG9wY2xrID0gZ2V0X2Nsb2NrKCk7CisJCQljcXItPnN0YXJ0dGltZSA9IDA7CiAJCQlEQkZfREVWX0VWRU5UKERCRl9ERUJVRywgZGV2aWNlLAogCQkJCSAgICAgICJ0ZXJtaW5hdGUgY3FyICVwIHN1Y2Nlc3NmdWwiLAogCQkJCSAgICAgIGNxcik7CkBAIC04NzAsNyArODkzLDcgQEAKIAogCWRldmljZSA9IChzdHJ1Y3QgZGFzZF9kZXZpY2UgKikgY3FyLT5kZXZpY2U7CiAJaWYgKGRldmljZSA9PSBOVUxMIHx8Ci0JICAgIGRldmljZSAhPSBkYXNkX2RldmljZV9mcm9tX2NkZXYoY2RldikgfHwKKwkgICAgZGV2aWNlICE9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldl9sb2NrZWQoY2RldikgfHwKIAkgICAgc3RybmNtcChkZXZpY2UtPmRpc2NpcGxpbmUtPmViY25hbWUsIChjaGFyICopICZjcXItPm1hZ2ljLCA0KSkgewogCQlNRVNTQUdFKEtFUk5fREVCVUcsICJpbnZhbGlkIGRldmljZSBpbiByZXF1ZXN0OiBidXNfaWQgJXMiLAogCQkJY2Rldi0+ZGV2LmJ1c19pZCk7CkBAIC05NDcsNyArOTcwLDcgQEAKIAkvKiBmaXJzdCBvZiBhbGwgY2hlY2sgZm9yIHN0YXRlIGNoYW5nZSBwZW5kaW5nIGludGVycnVwdCAqLwogCW1hc2sgPSBERVZfU1RBVF9BVFRFTlRJT04gfCBERVZfU1RBVF9ERVZfRU5EIHwgREVWX1NUQVRfVU5JVF9FWENFUDsKIAlpZiAoKGlyYi0+c2Nzdy5kc3RhdCAmIG1hc2spID09IG1hc2spIHsKLQkJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2KGNkZXYpOworCQlkZXZpY2UgPSBkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKGNkZXYpOwogCQlpZiAoIUlTX0VSUihkZXZpY2UpKSB7CiAJCQlkYXNkX2hhbmRsZV9zdGF0ZV9jaGFuZ2VfcGVuZGluZyhkZXZpY2UpOwogCQkJZGFzZF9wdXRfZGV2aWNlKGRldmljZSk7CkBAIC05NzgsNiArMTAwMSw3IEBACiAJICAgIGlyYi0+c2Nzdy5mY3RsICYgU0NTV19GQ1RMX0NMRUFSX0ZVTkMpIHsKIAkJY3FyLT5zdGF0dXMgPSBEQVNEX0NRUl9RVUVVRUQ7CiAJCWRhc2RfY2xlYXJfdGltZXIoZGV2aWNlKTsKKwkJd2FrZV91cCgmZGFzZF9mbHVzaF93cSk7CiAJCWRhc2Rfc2NoZWR1bGVfYmgoZGV2aWNlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTEyNDEsNiArMTI2NSwxMCBAQAogCWNxciA9IGxpc3RfZW50cnkoZGV2aWNlLT5jY3dfcXVldWUubmV4dCwgc3RydWN0IGRhc2RfY2N3X3JlcSwgbGlzdCk7CiAJaWYgKGNxci0+c3RhdHVzID09IERBU0RfQ1FSX0lOX0lPICYmIGNxci0+ZXhwaXJlcyAhPSAwKSB7CiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGNxci0+ZXhwaXJlcyArIGNxci0+c3RhcnR0aW1lKSkgeworCQkJREVWX01FU1NBR0UoS0VSTl9FUlIsIGRldmljZSwKKwkJCQkgICAgImludGVybmFsIGVycm9yIC0gdGltZW91dCAoJWlzKSBleHBpcmVkICIKKwkJCQkgICAgImZvciBjcXIgJXAgKCVpIHJldHJpZXMgbGVmdCkiLAorCQkJCSAgICAoY3FyLT5leHBpcmVzL0haKSwgY3FyLCBjcXItPnJldHJpZXMpOwogCQkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpICE9IDApCiAJCQkJLyogSG1wZiwgdHJ5IGFnYWluIGluIDEvMTAgc2VjICovCiAJCQkJZGFzZF9zZXRfdGltZXIoZGV2aWNlLCAxMCk7CkBAIC0xMjg1LDQ2ICsxMzEzLDEwMCBAQAogCQlkYXNkX3NldF90aW1lcihkZXZpY2UsIDUwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQKK193YWl0X2Zvcl9jbGVhcihzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXIpCit7CisJcmV0dXJuIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9RVUVVRUQpOworfQorCiAvKgotICogUmVtb3ZlIHJlcXVlc3RzIGZyb20gdGhlIGNjdyBxdWV1ZS4KKyAqIFJlbW92ZSBhbGwgcmVxdWVzdHMgZnJvbSB0aGUgY2N3IHF1ZXVlIChhbGwgPSAnMScpIG9yIG9ubHkgYmxvY2sgZGV2aWNlCisgKiByZXF1ZXN0cyBpbiBjYXNlIGFsbCA9ICcwJy4KKyAqIFRha2UgY2FyZSBvZiB0aGUgZXJwLWNoYWluIChjaGFpbmVkIHZpYSBjcXItPnJlZmVycykgYW5kIHJlbW92ZSBlaXRoZXIKKyAqIHRoZSB3aG9sZSBlcnAtY2hhaW4gb3Igbm9uZSBvZiB0aGUgZXJwLXJlcXVlc3RzLgorICogSWYgYSByZXF1ZXN0IGlzIGN1cnJlbnRseSBydW5uaW5nLCB0ZXJtX0lPIGlzIGNhbGxlZCBhbmQgdGhlIHJlcXVlc3QKKyAqIGlzIHJlLXF1ZXVlZC4gUHJpb3IgdG8gcmVtb3ZpbmcgdGhlIHRlcm1pbmF0ZWQgcmVxdWVzdCB3ZSBuZWVkIHRvIHdhaXQKKyAqIGZvciB0aGUgY2xlYXItaW50ZXJydXB0LgorICogSW4gY2FzZSB0ZXJtaW5hdGlvbiBpcyBub3QgcG9zc2libGUgd2Ugc3RvcCBwcm9jZXNzaW5nIGFuZCBqdXN0IGZpbmlzaGluZworICogdGhlIGFscmVhZHkgbW92ZWQgcmVxdWVzdHMuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBkYXNkX2ZsdXNoX2Njd19xdWV1ZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKiBkZXZpY2UsIGludCBhbGwpCiB7CisJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyLCAqb3JpZywgKm47CisJaW50IHJjLCBpOworCiAJc3RydWN0IGxpc3RfaGVhZCBmbHVzaF9xdWV1ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsLCAqbjsKLQlzdHJ1Y3QgZGFzZF9jY3dfcmVxICpjcXI7CiAKIAlJTklUX0xJU1RfSEVBRCgmZmx1c2hfcXVldWUpOwogCXNwaW5fbG9ja19pcnEoZ2V0X2Njd2Rldl9sb2NrKGRldmljZS0+Y2RldikpOwotCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCAmZGV2aWNlLT5jY3dfcXVldWUpIHsKLQkJY3FyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBsaXN0KTsKKwlyYyA9IDA7CityZXN0YXJ0OgorCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcXIsIG4sICZkZXZpY2UtPmNjd19xdWV1ZSwgbGlzdCkgeworCQkvKiBnZXQgb3JpZ2luYWwgcmVxdWVzdCBvZiBlcnAgcmVxdWVzdC1jaGFpbiAqLworCQlmb3IgKG9yaWcgPSBjcXI7IG9yaWctPnJlZmVycyAhPSBOVUxMOyBvcmlnID0gb3JpZy0+cmVmZXJzKTsKKwogCQkvKiBGbHVzaCBhbGwgcmVxdWVzdCBvciBvbmx5IGJsb2NrIGRldmljZSByZXF1ZXN0cz8gKi8KLQkJaWYgKGFsbCA9PSAwICYmIGNxci0+Y2FsbGJhY2sgPT0gZGFzZF9lbmRfcmVxdWVzdF9jYikKKwkJaWYgKGFsbCA9PSAwICYmIGNxci0+Y2FsbGJhY2sgIT0gZGFzZF9lbmRfcmVxdWVzdF9jYiAmJgorCQkgICAgb3JpZy0+Y2FsbGJhY2sgIT0gZGFzZF9lbmRfcmVxdWVzdF9jYikgewogCQkJY29udGludWU7Ci0JCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9JTl9JTykKLQkJCWRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwotCQlpZiAoY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfRE9ORSB8fAotCQkgICAgY3FyLT5zdGF0dXMgIT0gREFTRF9DUVJfRkFJTEVEKSB7Ci0JCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKKwkJfQorCQkvKiBDaGVjayBzdGF0dXMgYW5kIG1vdmUgcmVxdWVzdCB0byBmbHVzaF9xdWV1ZSAqLworCQlzd2l0Y2ggKGNxci0+c3RhdHVzKSB7CisJCWNhc2UgREFTRF9DUVJfSU5fSU86CisJCQlyYyA9IGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOworCQkJaWYgKHJjKSB7CisJCQkJLyogdW5hYmxlIHRvIHRlcm1pbmF0ZSByZXF1ZXVzdCAqLworCQkJCURFVl9NRVNTQUdFKEtFUk5fRVJSLCBkZXZpY2UsCisJCQkJCSAgICAiZGFzZCBmbHVzaCBjY3dfcXVldWUgaXMgdW5hYmxlICIKKwkJCQkJICAgICIgdG8gdGVybWluYXRlIHJlcXVlc3QgJXAiLAorCQkJCQkgICAgY3FyKTsKKwkJCQkvKiBzdG9wIGZsdXNoIHByb2Nlc3NpbmcgKi8KKwkJCQlnb3RvIGZpbmlzaGVkOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgREFTRF9DUVJfUVVFVUVEOgorCQljYXNlIERBU0RfQ1FSX0VSUk9SOgorCQkJLyogc2V0IHJlcXVlc3QgdG8gRkFJTEVEICovCiAJCQljcXItPnN0b3BjbGsgPSBnZXRfY2xvY2soKTsKKwkJCWNxci0+c3RhdHVzID0gREFTRF9DUVJfRkFJTEVEOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6IC8qIGRvIG5vdCB0b3VjaCB0aGUgb3RoZXJzICovCisJCQlicmVhazsKKwkJfQorCQkvKiBSZWNoYWluIHJlcXVlc3QgKGluY2x1ZGluZyBlcnAgY2hhaW4pICovCisJCWZvciAoaSA9IDA7IGNxciAhPSBOVUxMOyBjcXIgPSBjcXItPnJlZmVycywgaSsrKSB7CisJCQljcXItPmVuZGNsayA9IGdldF9jbG9jaygpOworCQkJbGlzdF9tb3ZlX3RhaWwoJmNxci0+bGlzdCwgJmZsdXNoX3F1ZXVlKTsKKwkJfQorCQlpZiAoaSA+IDEpCisJCQkvKiBtb3ZlZCBtb3JlIHRoYW4gb25lIHJlcXVlc3QgLSBuZWVkIHRvIHJlc3RhcnQgKi8KKwkJCWdvdG8gcmVzdGFydDsKKwl9CisKK2ZpbmlzaGVkOgorCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CisJLyogTm93IGNhbGwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIGZsdXNoZWQgcmVxdWVzdHMgKi8KK3Jlc3RhcnRfY2I6CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGNxciwgbiwgJmZsdXNoX3F1ZXVlLCBsaXN0KSB7CisJCWlmIChjcXItPnN0YXR1cyA9PSBEQVNEX0NRUl9DTEVBUikgeworCQkJLyogd2FpdCBmb3IgY2xlYXIgaW50ZXJydXB0ISAqLworCQkJd2FpdF9ldmVudChkYXNkX2ZsdXNoX3dxLCBfd2FpdF9mb3JfY2xlYXIoY3FyKSk7CisJCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX0ZBSUxFRDsKIAkJfQogCQkvKiBQcm9jZXNzIGZpbmlzaGVkIEVSUCByZXF1ZXN0LiAqLwogCQlpZiAoY3FyLT5yZWZlcnMpIHsKIAkJCV9fZGFzZF9wcm9jZXNzX2VycChkZXZpY2UsIGNxcik7Ci0JCQljb250aW51ZTsKKwkJCS8qIHJlc3RhcnQgbGlzdF9mb3JfeHggbG9vcCBzaW5jZSBkYXNkX3Byb2Nlc3NfZXJwCisJCQkgKiBtaWdodCByZW1vdmUgbXVsdGlwbGUgZWxlbWVudHMgKi8KKwkJCWdvdG8gcmVzdGFydF9jYjsKIAkJfQotCQkvKiBSZWNoYWluIHJlcXVlc3Qgb24gZGV2aWNlIHJlcXVlc3QgcXVldWUgKi8KKwkJLyogY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gKi8KIAkJY3FyLT5lbmRjbGsgPSBnZXRfY2xvY2soKTsKLQkJbGlzdF9tb3ZlX3RhaWwoJmNxci0+bGlzdCwgJmZsdXNoX3F1ZXVlKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpKTsKLQkvKiBOb3cgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gb2YgZmx1c2hlZCByZXF1ZXN0cyAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShsLCBuLCAmZmx1c2hfcXVldWUpIHsKLQkJY3FyID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgZGFzZF9jY3dfcmVxLCBsaXN0KTsKIAkJaWYgKGNxci0+Y2FsbGJhY2sgIT0gTlVMTCkKIAkJCShjcXItPmNhbGxiYWNrKShjcXIsIGNxci0+Y2FsbGJhY2tfZGF0YSk7CiAJfQorCXJldHVybiByYzsKIH0KIAogLyoKQEAgLTE1MTAsMTAgKzE1OTIsOCBAQAogCQkJaWYgKGRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTykgewogCQkJCWNxci0+cmV0cmllcyA9IC0xOwogCQkJCWRldmljZS0+ZGlzY2lwbGluZS0+dGVybV9JTyhjcXIpOwotCQkJCS8qbmlzaGVkID0KLQkJCQkgKiB3YWl0IChub24taW50ZXJydXB0aWJsZSkgZm9yIGZpbmFsIHN0YXR1cwotCQkJCSAqIGJlY2F1c2Ugc2lnbmFsIGlzdCBzdGlsbCBwZW5kaW5nCi0JCQkJICovCisJCQkJLyogd2FpdCAobm9uLWludGVycnVwdGlibGUpIGZvciBmaW5hbCBzdGF0dXMKKwkJCQkgKiBiZWNhdXNlIHNpZ25hbCBpc3Qgc3RpbGwgcGVuZGluZyAqLwogCQkJCXNwaW5fdW5sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CiAJCQkJd2FpdF9ldmVudCh3YWl0X3EsIF93YWl0X2Zvcl93YWtldXAoY3FyKSk7CiAJCQkJc3Bpbl9sb2NrX2lycShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSk7CkBAIC0xNTQ2LDE5ICsxNjI2LDExIEBACiBfZGFzZF90ZXJtX3J1bm5pbmdfY3FyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQogewogCXN0cnVjdCBkYXNkX2Njd19yZXEgKmNxcjsKLQlpbnQgcmM7CiAKIAlpZiAobGlzdF9lbXB0eSgmZGV2aWNlLT5jY3dfcXVldWUpKQogCQlyZXR1cm4gMDsKIAljcXIgPSBsaXN0X2VudHJ5KGRldmljZS0+Y2N3X3F1ZXVlLm5leHQsIHN0cnVjdCBkYXNkX2Njd19yZXEsIGxpc3QpOwotCXJjID0gZGV2aWNlLT5kaXNjaXBsaW5lLT50ZXJtX0lPKGNxcik7Ci0JaWYgKHJjID09IDApIHsKLQkJLyogdGVybWluYXRpb24gc3VjY2Vzc2Z1bCAqLwotCQljcXItPnN0YXR1cyA9IERBU0RfQ1FSX1FVRVVFRDsKLQkJY3FyLT5zdGFydGNsayA9IGNxci0+c3RvcGNsayA9IDA7Ci0JCWNxci0+c3RhcnR0aW1lID0gMDsKLQl9Ci0JcmV0dXJuIHJjOworCXJldHVybiBkZXZpY2UtPmRpc2NpcGxpbmUtPnRlcm1fSU8oY3FyKTsKIH0KIAogaW50CkBAIC0xNzI2LDEyICsxNzk4LDkgQEAKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrX2lycSgmZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlX2xvY2spOwotCXdoaWxlICghbGlzdF9lbXB0eSgmZGV2aWNlLT5yZXF1ZXN0X3F1ZXVlLT5xdWV1ZV9oZWFkKSkgewotCQlyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KGRldmljZS0+cmVxdWVzdF9xdWV1ZSk7Ci0JCWlmIChyZXEgPT0gTlVMTCkKLQkJCWJyZWFrOwotCQlkYXNkX2VuZF9yZXF1ZXN0KHJlcSwgMCk7CisJd2hpbGUgKChyZXEgPSBlbHZfbmV4dF9yZXF1ZXN0KGRldmljZS0+cmVxdWVzdF9xdWV1ZSkpKSB7CiAJCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocmVxKTsKKwkJZGFzZF9lbmRfcmVxdWVzdChyZXEsIDApOwogCX0KIAlzcGluX3VubG9ja19pcnEoJmRldmljZS0+cmVxdWVzdF9xdWV1ZV9sb2NrKTsKIH0KQEAgLTIwOTEsNiArMjE2MCw3IEBACiAJaW50IHJjOwogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmZGFzZF9pbml0X3dhaXRxKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkYXNkX2ZsdXNoX3dxKTsKIAogCS8qIHJlZ2lzdGVyICdjb21tb24nIERBU0QgZGVidWcgYXJlYSwgdXNlZCBmb3IgYWxsIERCRl9YWFggY2FsbHMgKi8KIAlkYXNkX2RlYnVnX2FyZWEgPSBkZWJ1Z19yZWdpc3RlcigiZGFzZCIsIDEsIDIsIDggKiBzaXplb2YgKGxvbmcpKTsKQEAgLTIwOTksNyArMjE2OSw3IEBACiAJCWdvdG8gZmFpbGVkOwogCX0KIAlkZWJ1Z19yZWdpc3Rlcl92aWV3KGRhc2RfZGVidWdfYXJlYSwgJmRlYnVnX3NwcmludGZfdmlldyk7Ci0JZGVidWdfc2V0X2xldmVsKGRhc2RfZGVidWdfYXJlYSwgREJGX0VNRVJHKTsKKwlkZWJ1Z19zZXRfbGV2ZWwoZGFzZF9kZWJ1Z19hcmVhLCBEQkZfV0FSTklORyk7CiAKIAlEQkZfRVZFTlQoREJGX0VNRVJHLCAiJXMiLCAiZGVidWcgYXJlYSBjcmVhdGVkIik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Rldm1hcC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKaW5kZXggN2Y2ZmRhYy4uOTFjZjk3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMKQEAgLTQ4LDE4ICs0OCwyMCBAQAogfTsKIAogLyoKLSAqIGRhc2Rfc2VydmVybWFwIGlzIHVzZWQgdG8gc3RvcmUgdGhlIHNlcnZlcl9pZCBvZiBhbGwgc3RvcmFnZSBzZXJ2ZXJzCi0gKiBhY2Nlc3NlZCBieSBEQVNEIGRldmljZSBkcml2ZXIuCisgKiBkYXNkX3NlcnZlcl9zc2lkX21hcCBjb250YWlucyBhIGdsb2JhbGx5IHVuaXF1ZSBzdG9yYWdlIHNlcnZlciBzdWJzeXN0ZW0gSUQuCisgKiBkYXNkX3NlcnZlcl9zc2lkX2xpc3QgY29udGFpbnMgdGhlIGxpc3Qgb2YgYWxsIHN1YnN5c3RlbSBJRHMgYWNjZXNzZWQgYnkKKyAqIHRoZSBEQVNEIGRldmljZSBkcml2ZXIuCiAgKi8KLXN0cnVjdCBkYXNkX3NlcnZlcm1hcCB7CitzdHJ1Y3QgZGFzZF9zZXJ2ZXJfc3NpZF9tYXAgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3Qgc2VydmVyX2lkIHsKKwlzdHJ1Y3Qgc3lzdGVtX2lkIHsKIAkJY2hhciB2ZW5kb3JbNF07CiAJCWNoYXIgc2VyaWFsWzE1XTsKKwkJX191MTYgc3NpZDsKIAl9IHNpZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGRhc2Rfc2VydmVybGlzdDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGRhc2Rfc2VydmVyX3NzaWRfbGlzdDsKIAogLyoKICAqIFBhcmFtZXRlciBwYXJzaW5nIGZ1bmN0aW9ucyBmb3IgZGFzZD0gcGFyYW1ldGVyLiBUaGUgc3ludGF4IGlzOgpAQCAtODksNyArOTEsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGRhc2QsIGNoYXJwLCBOVUxMLCAwKTsKIAogLyoKLSAqIFNpbmdsZSBzcGlubG9jayB0byBwcm90ZWN0IGRldm1hcCBzdHJ1Y3R1cmVzIGFuZCBsaXN0cy4KKyAqIFNpbmdsZSBzcGlubG9jayB0byBwcm90ZWN0IGRldm1hcCBhbmQgc2VydmVybWFwIHN0cnVjdHVyZXMgYW5kIGxpc3RzLgogICovCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGRhc2RfZGV2bWFwX2xvY2spOwogCkBAIC0yNTYsMTYgKzI1OCwyMSBAQAogICAgICAgICAgICAgICAgIHJldHVybiByZXNpZHVhbF9zdHI7CiAgICAgICAgIH0KIAlpZiAoc3RybmNtcCgibm9wYXYiLCBwYXJzZXN0cmluZywgbGVuZ3RoKSA9PSAwKSB7Ci0JCWRhc2Rfbm9wYXYgPSAxOwotCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgImRpc2FibGUgUEFWIG1vZGUiKTsKKwkJaWYgKE1BQ0hJTkVfSVNfVk0pCisJCQlNRVNTQUdFKEtFUk5fSU5GTywgIiVzIiwgIidub3Bhdicgbm90IHN1cHBvcnRlZCBvbiBWTSIpOworCQllbHNlIHsKKwkJCWRhc2Rfbm9wYXYgPSAxOworCQkJTUVTU0FHRShLRVJOX0lORk8sICIlcyIsICJkaXNhYmxlIFBBViBtb2RlIik7CisJCX0KIAkJcmV0dXJuIHJlc2lkdWFsX3N0cjsKIAl9CiAJaWYgKHN0cm5jbXAoImZpeGVkYnVmZmVycyIsIHBhcnNlc3RyaW5nLCBsZW5ndGgpID09IDApIHsKIAkJaWYgKGRhc2RfcGFnZV9jYWNoZSkKIAkJCXJldHVybiByZXNpZHVhbF9zdHI7CiAJCWRhc2RfcGFnZV9jYWNoZSA9Ci0JCQlrbWVtX2NhY2hlX2NyZWF0ZSgiZGFzZF9wYWdlX2NhY2hlIiwgUEFHRV9TSVpFLCAwLAotCQkJCQkgIFNMQUJfQ0FDSEVfRE1BLCBOVUxMLCBOVUxMICk7CisJCQlrbWVtX2NhY2hlX2NyZWF0ZSgiZGFzZF9wYWdlX2NhY2hlIiwgUEFHRV9TSVpFLAorCQkJCQkgIFBBR0VfU0laRSwgU0xBQl9DQUNIRV9ETUEsCisJCQkJCSAgTlVMTCwgTlVMTCApOwogCQlpZiAoIWRhc2RfcGFnZV9jYWNoZSkKIAkJCU1FU1NBR0UoS0VSTl9XQVJOSU5HLCAiJXMiLCAiRmFpbGVkIHRvIGNyZWF0ZSBzbGFiLCAiCiAJCQkJImZpeGVkIGJ1ZmZlciBtb2RlIGRpc2FibGVkLiIpOwpAQCAtNTIwLDE3ICs1MjcsMTcgQEAKIHsKIAlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKIAlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYzsKIAogCWRldm1hcCA9IGRhc2RfZGV2bWFwX2Zyb21fY2RldihjZGV2KTsKIAlpZiAoSVNfRVJSKGRldm1hcCkpCiAJCXJldHVybiAodm9pZCAqKSBkZXZtYXA7Ci0JY2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gZGV2bWFwOwogCiAJZGV2aWNlID0gZGFzZF9hbGxvY19kZXZpY2UoKTsKIAlpZiAoSVNfRVJSKGRldmljZSkpCiAJCXJldHVybiBkZXZpY2U7Ci0JYXRvbWljX3NldCgmZGV2aWNlLT5yZWZfY291bnQsIDIpOworCWF0b21pY19zZXQoJmRldmljZS0+cmVmX2NvdW50LCAzKTsKIAogCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CiAJaWYgKCFkZXZtYXAtPmRldmljZSkgewpAQCAtNTQ5LDYgKzU1NiwxMSBAQAogCQlkYXNkX2ZyZWVfZGV2aWNlKGRldmljZSk7CiAJCXJldHVybiBFUlJfUFRSKHJjKTsKIAl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2RldiksIGZsYWdzKTsKKwljZGV2LT5kZXYuZHJpdmVyX2RhdGEgPSBkZXZpY2U7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2RldiksIGZsYWdzKTsKKwogCXJldHVybiBkZXZpY2U7CiB9CiAKQEAgLTU2Niw2ICs1NzgsNyBAQAogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2OwogCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiBGaXJzdCByZW1vdmUgZGV2aWNlIHBvaW50ZXIgZnJvbSBkZXZtYXAuICovCiAJZGV2bWFwID0gZGFzZF9maW5kX2J1c2lkKGRldmljZS0+Y2Rldi0+ZGV2LmJ1c19pZCk7CkBAIC01NzksOSArNTkyLDE2IEBACiAJZGV2bWFwLT5kZXZpY2UgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKIAotCS8qIERyb3AgcmVmX2NvdW50IGJ5IDIsIG9uZSBmb3IgdGhlIGRldm1hcCByZWZlcmVuY2UgYW5kCi0JICogb25lIGZvciB0aGUgcGFzc2VkIHJlZmVyZW5jZS4gKi8KLQlhdG9taWNfc3ViKDIsICZkZXZpY2UtPnJlZl9jb3VudCk7CisJLyogRGlzY29ubmVjdCBkYXNkX2RldmljZSBzdHJ1Y3R1cmUgZnJvbSBjY3dfZGV2aWNlIHN0cnVjdHVyZS4gKi8KKwlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soZGV2aWNlLT5jZGV2KSwgZmxhZ3MpOworCWRldmljZS0+Y2Rldi0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhkZXZpY2UtPmNkZXYpLCBmbGFncyk7CisKKwkvKgorCSAqIERyb3AgcmVmX2NvdW50IGJ5IDMsIG9uZSBmb3IgdGhlIGRldm1hcCByZWZlcmVuY2UsIG9uZSBmb3IKKwkgKiB0aGUgY2RldiByZWZlcmVuY2UgYW5kIG9uZSBmb3IgdGhlIHBhc3NlZCByZWZlcmVuY2UuCisJICovCisJYXRvbWljX3N1YigzLCAmZGV2aWNlLT5yZWZfY291bnQpOwogCiAJLyogV2FpdCBmb3IgcmVmZXJlbmNlIGNvdW50ZXIgdG8gZHJvcCB0byB6ZXJvLiAqLwogCXdhaXRfZXZlbnQoZGFzZF9kZWxldGVfd3EsIGF0b21pY19yZWFkKCZkZXZpY2UtPnJlZl9jb3VudCkgPT0gMCk7CkBAIC01OTAsOSArNjEwLDYgQEAKIAljZGV2ID0gZGV2aWNlLT5jZGV2OwogCWRldmljZS0+Y2RldiA9IE5VTEw7CiAKLQkvKiBEaXNjb25uZWN0IGRhc2RfZGV2bWFwIHN0cnVjdHVyZSBmcm9tIGNjd19kZXZpY2Ugc3RydWN0dXJlLiAqLwotCWNkZXYtPmRldi5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0KIAkvKiBQdXQgY2N3X2RldmljZSBzdHJ1Y3R1cmUuICovCiAJcHV0X2RldmljZSgmY2Rldi0+ZGV2KTsKIApAQCAtNjEyLDIxICs2MjksMzIgQEAKIAogLyoKICAqIFJldHVybiBkYXNkX2RldmljZSBzdHJ1Y3R1cmUgYXNzb2NpYXRlZCB3aXRoIGNkZXYuCisgKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBjY3cgZGV2aWNlCisgKiBsb2NrIGhlbGQuIEl0IGNhbiBiZSB1c2VkIGZyb20gaW50ZXJydXB0IGNvbnRleHQuCisgKi8KK3N0cnVjdCBkYXNkX2RldmljZSAqCitkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQoreworCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlID0gY2Rldi0+ZGV2LmRyaXZlcl9kYXRhOworCisJaWYgKCFkZXZpY2UpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOworCXJldHVybiBkZXZpY2U7Cit9CisKKy8qCisgKiBSZXR1cm4gZGFzZF9kZXZpY2Ugc3RydWN0dXJlIGFzc29jaWF0ZWQgd2l0aCBjZGV2LgogICovCiBzdHJ1Y3QgZGFzZF9kZXZpY2UgKgogZGFzZF9kZXZpY2VfZnJvbV9jZGV2KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2KQogewotCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOwogCXN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXZpY2UgPSBFUlJfUFRSKC1FTk9ERVYpOwotCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7Ci0JZGV2bWFwID0gY2Rldi0+ZGV2LmRyaXZlcl9kYXRhOwotCWlmIChkZXZtYXAgJiYgZGV2bWFwLT5kZXZpY2UpIHsKLQkJZGV2aWNlID0gZGV2bWFwLT5kZXZpY2U7Ci0JCWRhc2RfZ2V0X2RldmljZShkZXZpY2UpOwotCX0KLQlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNkZXYpLCBmbGFncyk7CisJZGV2aWNlID0gZGFzZF9kZXZpY2VfZnJvbV9jZGV2X2xvY2tlZChjZGV2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKGdldF9jY3dkZXZfbG9jayhjZGV2KSwgZmxhZ3MpOwogCXJldHVybiBkZXZpY2U7CiB9CiAKQEAgLTcyNywxNiArNzU1LDE3IEBACiBkYXNkX2Rpc2NpcGxpbmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkgICAgIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgZGFzZF9kZXZtYXAgKmRldm1hcDsKLQljaGFyICpkbmFtZTsKKwlzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZTsKKwlzc2l6ZV90IGxlbjsKIAotCXNwaW5fbG9jaygmZGFzZF9kZXZtYXBfbG9jayk7Ci0JZG5hbWUgPSAibm9uZSI7Ci0JZGV2bWFwID0gZGV2LT5kcml2ZXJfZGF0YTsKLQlpZiAoZGV2bWFwICYmIGRldm1hcC0+ZGV2aWNlICYmIGRldm1hcC0+ZGV2aWNlLT5kaXNjaXBsaW5lKQotCQlkbmFtZSA9IGRldm1hcC0+ZGV2aWNlLT5kaXNjaXBsaW5lLT5uYW1lOwotCXNwaW5fdW5sb2NrKCZkYXNkX2Rldm1hcF9sb2NrKTsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgZG5hbWUpOworCWRldmljZSA9IGRhc2RfZGV2aWNlX2Zyb21fY2Rldih0b19jY3dkZXYoZGV2KSk7CisJaWYgKCFJU19FUlIoZGV2aWNlKSAmJiBkZXZpY2UtPmRpc2NpcGxpbmUpIHsKKwkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwKKwkJCSAgICAgICBkZXZpY2UtPmRpc2NpcGxpbmUtPm5hbWUpOworCQlkYXNkX3B1dF9kZXZpY2UoZGV2aWNlKTsKKwl9IGVsc2UKKwkJbGVuID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJub25lXG4iKTsKKwlyZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoZGlzY2lwbGluZSwgMDQ0NCwgZGFzZF9kaXNjaXBsaW5lX3Nob3csIE5VTEwpOwpAQCAtODU5LDM5ICs4ODgsNiBAQAogfTsKIAogLyoKLSAqIENoZWNrIGlmIHRoZSByZWxhdGVkIHN0b3JhZ2Ugc2VydmVyIGlzIGFscmVhZHkgY29udGFpbmVkIGluIHRoZQotICogZGFzZF9zZXJ2ZXJsaXN0LiBJZiBzZXJ2ZXIgaXMgbm90IGNvbnRhaW5lZCwgY3JlYXRlIG5ldyBlbnRyeS4KLSAqIFJldHVybiAwIGlmIHNlcnZlciB3YXMgYWxyZWFkeSBpbiBzZXJ2ZXJsaXN0LAotICoJICAxIGlmIHRoZSBzZXJ2ZXIgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseQotICoJIDwwIGluIGNhc2Ugb2YgZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQKLWRhc2RfYWRkX3NlcnZlcihzdHJ1Y3QgZGFzZF91aWQgKnVpZCkKLXsKLQlzdHJ1Y3QgZGFzZF9zZXJ2ZXJtYXAgKm5ldywgKnRtcDsKLQotCS8qIGNoZWNrIGlmIHNlcnZlciBpcyBhbHJlYWR5IGNvbnRhaW5lZCAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmZGFzZF9zZXJ2ZXJsaXN0LCBsaXN0KQotCSAgLy8gbm9ybWFsZSBjbXA/Ci0JCWlmIChzdHJuY21wKHRtcC0+c2lkLnZlbmRvciwgdWlkLT52ZW5kb3IsCi0JCQkgICAgc2l6ZW9mKHRtcC0+c2lkLnZlbmRvcikpID09IDAKLQkJICAgICYmIHN0cm5jbXAodG1wLT5zaWQuc2VyaWFsLCB1aWQtPnNlcmlhbCwKLQkJCSAgICAgICBzaXplb2YodG1wLT5zaWQuc2VyaWFsKSkgPT0gMCkKLQkJCXJldHVybiAwOwotCi0JbmV3ID0gKHN0cnVjdCBkYXNkX3NlcnZlcm1hcCAqKQotCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9zZXJ2ZXJtYXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW5ldykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlzdHJuY3B5KG5ldy0+c2lkLnZlbmRvciwgdWlkLT52ZW5kb3IsIHNpemVvZihuZXctPnNpZC52ZW5kb3IpKTsKLQlzdHJuY3B5KG5ldy0+c2lkLnNlcmlhbCwgdWlkLT5zZXJpYWwsIHNpemVvZihuZXctPnNpZC5zZXJpYWwpKTsKLQlsaXN0X2FkZCgmbmV3LT5saXN0LCAmZGFzZF9zZXJ2ZXJsaXN0KTsKLQlyZXR1cm4gMTsKLX0KLQotCi0vKgogICogUmV0dXJuIGNvcHkgb2YgdGhlIGRldmljZSB1bmlxdWUgaWRlbnRpZmllci4KICAqLwogaW50CkBAIC05MTAsNiArOTA2LDkgQEAKIAogLyoKICAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBkZXZpY2UgdW5pcXVlIGlkZW50aWZpZXIgaW50byBkZXZtYXAgc3RydWN0LgorICogSW4gYWRkaXRpb24gY2hlY2sgaWYgdGhlIHJlbGF0ZWQgc3RvcmFnZSBzZXJ2ZXIgc3Vic3lzdGVtIElEIGlzIGFscmVhZHkKKyAqIGNvbnRhaW5lZCBpbiB0aGUgZGFzZF9zZXJ2ZXJfc3NpZF9saXN0LiBJZiBzdWJzeXN0ZW0gSUQgaXMgbm90IGNvbnRhaW5lZCwKKyAqIGNyZWF0ZSBuZXcgZW50cnkuCiAgKiBSZXR1cm4gMCBpZiBzZXJ2ZXIgd2FzIGFscmVhZHkgaW4gc2VydmVybGlzdCwKICAqCSAgMSBpZiB0aGUgc2VydmVyIHdhcyBhZGRlZCBzdWNjZXNzZnVsCiAgKgkgPDAgaW4gY2FzZSBvZiBlcnJvci4KQEAgLTkxOCwxNiArOTE3LDM5IEBACiBkYXNkX3NldF91aWQoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYsIHN0cnVjdCBkYXNkX3VpZCAqdWlkKQogewogCXN0cnVjdCBkYXNkX2Rldm1hcCAqZGV2bWFwOwotCWludCByYzsKKwlzdHJ1Y3QgZGFzZF9zZXJ2ZXJfc3NpZF9tYXAgKnNydiwgKnRtcDsKIAogCWRldm1hcCA9IGRhc2RfZmluZF9idXNpZChjZGV2LT5kZXYuYnVzX2lkKTsKIAlpZiAoSVNfRVJSKGRldm1hcCkpCiAJCXJldHVybiBQVFJfRVJSKGRldm1hcCk7CisKKwkvKiBnZW5lcmF0ZSBlbnRyeSBmb3Igc2VydmVyX3NzaWRfbWFwICovCisJc3J2ID0gKHN0cnVjdCBkYXNkX3NlcnZlcl9zc2lkX21hcCAqKQorCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZGFzZF9zZXJ2ZXJfc3NpZF9tYXApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNydikKKwkJcmV0dXJuIC1FTk9NRU07CisJc3RybmNweShzcnYtPnNpZC52ZW5kb3IsIHVpZC0+dmVuZG9yLCBzaXplb2Yoc3J2LT5zaWQudmVuZG9yKSAtIDEpOworCXN0cm5jcHkoc3J2LT5zaWQuc2VyaWFsLCB1aWQtPnNlcmlhbCwgc2l6ZW9mKHNydi0+c2lkLnNlcmlhbCkgLSAxKTsKKwlzcnYtPnNpZC5zc2lkID0gdWlkLT5zc2lkOworCisJLyogc2VydmVyIGlzIGFscmVhZHkgY29udGFpbmVkID8gKi8KIAlzcGluX2xvY2soJmRhc2RfZGV2bWFwX2xvY2spOwogCWRldm1hcC0+dWlkID0gKnVpZDsKLQlyYyA9IGRhc2RfYWRkX3NlcnZlcih1aWQpOworCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmZGFzZF9zZXJ2ZXJfc3NpZF9saXN0LCBsaXN0KSB7CisJCWlmICghbWVtY21wKCZzcnYtPnNpZCwgJnRtcC0+c2lkLAorCQkJICAgIHNpemVvZihzdHJ1Y3Qgc3lzdGVtX2lkKSkpIHsKKwkJCWtmcmVlKHNydik7CisJCQlzcnYgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBhZGQgc2VydmVybWFwIHRvIHNlcnZlcmxpc3QgKi8KKwlpZiAoc3J2KQorCQlsaXN0X2FkZCgmc3J2LT5saXN0LCAmZGFzZF9zZXJ2ZXJfc3NpZF9saXN0KTsKIAlzcGluX3VubG9jaygmZGFzZF9kZXZtYXBfbG9jayk7Ci0JcmV0dXJuIHJjOworCisJcmV0dXJuIChzcnYgPyAxIDogMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkYXNkX3NldF91aWQpOwogCkBAIC05OTUsNyArMTAxNyw3IEBACiAJCUlOSVRfTElTVF9IRUFEKCZkYXNkX2hhc2hsaXN0c1tpXSk7CiAKIAkvKiBJbml0aWFsaXplIHNlcnZlcm1hcCBzdHJ1Y3R1cmUuICovCi0JSU5JVF9MSVNUX0hFQUQoJmRhc2Rfc2VydmVybGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmRhc2Rfc2VydmVyX3NzaWRfbGlzdCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCAzOWMyMjgxLi5iN2E3ZmFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC00NjgsMTEgKzQ2OCwxMSBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAogCW1lbXNldCh1aWQsIDAsIHNpemVvZihzdHJ1Y3QgZGFzZF91aWQpKTsKLQlzdHJuY3B5KHVpZC0+dmVuZG9yLCBjb25mZGF0YS0+bmVkMS5IREFfbWFudWZhY3R1cmVyLAotCQlzaXplb2YodWlkLT52ZW5kb3IpIC0gMSk7CisJbWVtY3B5KHVpZC0+dmVuZG9yLCBjb25mZGF0YS0+bmVkMS5IREFfbWFudWZhY3R1cmVyLAorCSAgICAgICBzaXplb2YodWlkLT52ZW5kb3IpIC0gMSk7CiAJRUJDQVNDKHVpZC0+dmVuZG9yLCBzaXplb2YodWlkLT52ZW5kb3IpIC0gMSk7Ci0Jc3RybmNweSh1aWQtPnNlcmlhbCwgY29uZmRhdGEtPm5lZDEuSERBX2xvY2F0aW9uLAotCQlzaXplb2YodWlkLT5zZXJpYWwpIC0gMSk7CisJbWVtY3B5KHVpZC0+c2VyaWFsLCBjb25mZGF0YS0+bmVkMS5IREFfbG9jYXRpb24sCisJICAgICAgIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKIAlFQkNBU0ModWlkLT5zZXJpYWwsIHNpemVvZih1aWQtPnNlcmlhbCkgLSAxKTsKIAl1aWQtPnNzaWQgPSBjb25mZGF0YS0+bmVxLnN1YnN5c3RlbUlEOwogCWlmIChjb25mZGF0YS0+bmVkMi5zbmVxLmZsYWdzID09IDB4NDApIHsKQEAgLTYwNyw3ICs2MDcsNyBAQAogICogVmFsaWRlIHN0b3JhZ2Ugc2VydmVyIG9mIGN1cnJlbnQgZGV2aWNlLgogICovCiBzdGF0aWMgaW50Ci1kYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQorZGFzZF9lY2tkX3ZhbGlkYXRlX3NlcnZlcihzdHJ1Y3QgZGFzZF9kZXZpY2UgKmRldmljZSwgc3RydWN0IGRhc2RfdWlkICp1aWQpCiB7CiAJaW50IHJjOwogCkBAIC02MTYsMTEgKzYxNiwxMSBAQAogCQlyZXR1cm4gMDsKIAogCXJjID0gZGFzZF9lY2tkX3BzZl9zc2MoZGV2aWNlKTsKLQlpZiAocmMpCi0JCS8qIG1heSBiZSByZXF1ZXN0ZWQgZmVhdHVyZSBpcyBub3QgYXZhaWxhYmxlIG9uIHNlcnZlciwKLQkJICogdGhlcmVmb3JlIGp1c3QgcmVwb3J0IGVycm9yIGFuZCBnbyBhaGVhZCAqLwotCQlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKLQkJCSAgICAiUGVyZm9ybSBTdWJzeXN0ZW0gRnVuY3Rpb24gcmV0dXJuZWQgcmM9JWQiLCByYyk7CisJLyogbWF5IGJlIHJlcXVlc3RlZCBmZWF0dXJlIGlzIG5vdCBhdmFpbGFibGUgb24gc2VydmVyLAorCSAqIHRoZXJlZm9yZSBqdXN0IHJlcG9ydCBlcnJvciBhbmQgZ28gYWhlYWQgKi8KKwlERVZfTUVTU0FHRShLRVJOX0lORk8sIGRldmljZSwKKwkJICAgICJQU0YtU1NDIG9uIHN0b3JhZ2Ugc3Vic3lzdGVtICVzLiVzLiUwNHggcmV0dXJuZWQgcmM9JWQiLAorCQkgICAgdWlkLT52ZW5kb3IsIHVpZC0+c2VyaWFsLCB1aWQtPnNzaWQsIHJjKTsKIAkvKiBSRS1SZWFkIENvbmZpZ3VyYXRpb24gRGF0YSAqLwogCXJldHVybiBkYXNkX2Vja2RfcmVhZF9jb25mKGRldmljZSk7CiB9CkBAIC02NjYsNyArNjY2LDcgQEAKIAkJcmV0dXJuIHJjOwogCXJjID0gZGFzZF9zZXRfdWlkKGRldmljZS0+Y2RldiwgJnVpZCk7CiAJaWYgKHJjID09IDEpCS8qIG5ldyBzZXJ2ZXIgZm91bmQgKi8KLQkJcmMgPSBkYXNkX2Vja2RfdmFsaWRhdGVfc2VydmVyKGRldmljZSk7CisJCXJjID0gZGFzZF9lY2tkX3ZhbGlkYXRlX3NlcnZlcihkZXZpY2UsICZ1aWQpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lZXIuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCmluZGV4IGRhNjVmMWIuLmUwYmYzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vlci5jCkBAIC02NzgsNyArNjc4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2V4aXQgZGFzZF9lZXJfZXhpdCh2b2lkKQordm9pZCBkYXNkX2Vlcl9leGl0KHZvaWQpCiB7CiAJV0FSTl9PTihtaXNjX2RlcmVnaXN0ZXIoJmRhc2RfZWVyX2RldikgIT0gMCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwppbmRleCA0YzI3MmI3Li5kMTYzNjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKQEAgLTgzLDEwICs4MywxMiBAQAogdm9pZAogZGFzZF9nZW5kaXNrX2ZyZWUoc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2UpCiB7Ci0JZGVsX2dlbmRpc2soZGV2aWNlLT5nZHApOwotCWRldmljZS0+Z2RwLT5xdWV1ZSA9IE5VTEw7Ci0JcHV0X2Rpc2soZGV2aWNlLT5nZHApOwotCWRldmljZS0+Z2RwID0gTlVMTDsKKwlpZiAoZGV2aWNlLT5nZHApIHsKKwkJZGVsX2dlbmRpc2soZGV2aWNlLT5nZHApOworCQlkZXZpY2UtPmdkcC0+cXVldWUgPSBOVUxMOworCQlwdXRfZGlzayhkZXZpY2UtPmdkcCk7CisJCWRldmljZS0+Z2RwID0gTlVMTDsKKwl9CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pbnQuaCBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCmluZGV4IDNjY2YwNmQuLjlmNTIwMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oCkBAIC01MzQsNiArNTM0LDcgQEAKIHZvaWQgZGFzZF9yZW1vdmVfc3lzZnNfZmlsZXMoc3RydWN0IGNjd19kZXZpY2UgKik7CiAKIHN0cnVjdCBkYXNkX2RldmljZSAqZGFzZF9kZXZpY2VfZnJvbV9jZGV2KHN0cnVjdCBjY3dfZGV2aWNlICopOworc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2NkZXZfbG9ja2VkKHN0cnVjdCBjY3dfZGV2aWNlICopOwogc3RydWN0IGRhc2RfZGV2aWNlICpkYXNkX2RldmljZV9mcm9tX2RldmluZGV4KGludCk7CiAKIGludCBkYXNkX3BhcnNlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL3hwcmFtLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwppbmRleCAxMTQwMzAyLi5jYWIyYzczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYwpAQCAtNDgsMTUgKzQ4LDYgQEAKICNkZWZpbmUgUFJJTlRfRVJSKHguLi4pCQlwcmludGsoS0VSTl9FUlIgWFBSQU1fTkFNRSAiIGVycm9yOiIgeCkKIAogCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyB4cHJhbV9zeXNjbGFzcyA9IHsKLQlzZXRfa3NldF9uYW1lKCJ4cHJhbSIpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHhwcmFtX3N5c19kZXZpY2UgPSB7Ci0JLmlkCT0gMCwKLQkuY2xzCT0gJnhwcmFtX3N5c2NsYXNzLAotfTsgCi0KIHR5cGVkZWYgc3RydWN0IHsKIAl1bnNpZ25lZCBpbnQJc2l6ZTsJCS8qIHNpemUgb2YgeHByYW0gc2VnbWVudCBpbiBwYWdlcyAqLwogCXVuc2lnbmVkIGludAlvZmZzZXQ7CQkvKiBzdGFydCBwYWdlIG9mIHhwcmFtIHNlZ21lbnQgKi8KQEAgLTQ1MSw4ICs0NDIsNiBAQAogCX0KIAl1bnJlZ2lzdGVyX2Jsa2RldihYUFJBTV9NQUpPUiwgWFBSQU1fTkFNRSk7CiAJYmxrX2NsZWFudXBfcXVldWUoeHByYW1fcXVldWUpOwotCXN5c2Rldl91bnJlZ2lzdGVyKCZ4cHJhbV9zeXNfZGV2aWNlKTsKLQlzeXNkZXZfY2xhc3NfdW5yZWdpc3RlcigmeHByYW1fc3lzY2xhc3MpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB4cHJhbV9pbml0KHZvaWQpCkBAIC00NjQsMjUgKzQ1MywxMyBAQAogCQlQUklOVF9XQVJOKCJObyBleHBhbmRlZCBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCXhwcmFtX3BhZ2VzID0geHByYW1faGlnaGVzdF9wYWdlX2luZGV4KCk7CisJeHByYW1fcGFnZXMgPSB4cHJhbV9oaWdoZXN0X3BhZ2VfaW5kZXgoKSArIDE7CiAJUFJJTlRfSU5GTygiICAldSBwYWdlcyBleHBhbmRlZCBtZW1vcnkgZm91bmQgKCVsdSBLQikuXG4iLAogCQkgICB4cHJhbV9wYWdlcywgKHVuc2lnbmVkIGxvbmcpIHhwcmFtX3BhZ2VzKjQpOwogCXJjID0geHByYW1fc2V0dXBfc2l6ZXMoeHByYW1fcGFnZXMpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCXJjID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZ4cHJhbV9zeXNjbGFzcyk7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlyYyA9IHN5c2Rldl9yZWdpc3RlcigmeHByYW1fc3lzX2RldmljZSk7Ci0JaWYgKHJjKSB7Ci0JCXN5c2Rldl9jbGFzc191bnJlZ2lzdGVyKCZ4cHJhbV9zeXNjbGFzcyk7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmMgPSB4cHJhbV9zZXR1cF9ibGtkZXYoKTsKLQlpZiAocmMpCi0JCXN5c2Rldl91bnJlZ2lzdGVyKCZ4cHJhbV9zeXNfZGV2aWNlKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHhwcmFtX3NldHVwX2Jsa2RldigpOwogfQogCiBtb2R1bGVfaW5pdCh4cHJhbV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9zMzkwL2NoYXIvTWFrZWZpbGUKaW5kZXggMGMwMTYyZmYuLmMzZTk3YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL01ha2VmaWxlCkBAIC0yOCwzICsyOCw0IEBACiBvYmotJChDT05GSUdfUzM5MF9UQVBFXzM0WFgpICs9IHRhcGVfMzR4eC5vCiBvYmotJChDT05GSUdfUzM5MF9UQVBFXzM1OTApICs9IHRhcGVfMzU5MC5vCiBvYmotJChDT05GSUdfTU9OUkVBREVSKSArPSBtb25yZWFkZXIubworb2JqLSQoQ09ORklHX01PTldSSVRFUikgKz0gbW9ud3JpdGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jIGIvZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUzOTM5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL21vbndyaXRlci5jCkBAIC0wLDAgKzEsMjkyIEBACisvKgorICogZHJpdmVycy9zMzkwL2NoYXIvbW9ud3JpdGVyLmMKKyAqCisgKiBDaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciBmb3Igd3JpdGluZyB6L1ZNICpNT05JVE9SIHNlcnZpY2UgcmVjb3Jkcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CisgKgorICogQXV0aG9yKHMpOiBNZWxpc3NhIEhvd2xhbmQgPE1lbGlzc2EuSG93bGFuZEB1cy5pYm0uY29tPgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2ViY2RpYy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hcHBsZGF0YS5oPgorI2luY2x1ZGUgPGFzbS9tb253cml0ZXIuaD4KKworI2RlZmluZSBNT05XUklURV9NQVhfREFUQUxFTgk0MDI0CisKK3N0YXRpYyBpbnQgbW9uX21heF9idWZzID0gMjU1OworCitzdHJ1Y3QgbW9uX2J1ZiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtb253cml0ZV9oZHIgaGRyOworCWludCBkaWFnX2RvbmU7CisJY2hhciAqZGF0YTsKK307CisKK3N0cnVjdCBtb25fcHJpdmF0ZSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBtb253cml0ZV9oZHIgaGRyOworCXNpemVfdCBoZHJfdG9fcmVhZDsKKwlzaXplX3QgZGF0YV90b19yZWFkOworCXN0cnVjdCBtb25fYnVmICpjdXJyZW50X2J1ZjsKKwlpbnQgbW9uX2J1Zl9jb3VudDsKK307CisKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludCBtb253cml0ZV9kaWFnKHN0cnVjdCBtb253cml0ZV9oZHIgKm15aGRyLCBjaGFyICpidWZmZXIsIGludCBmY24pCit7CisJc3RydWN0IGFwcGxkYXRhX3Byb2R1Y3RfaWQgaWQ7CisJaW50IHJjOworCisJc3RyY3B5KGlkLnByb2RfbnIsICJMTlhBUFBMIik7CisJaWQucHJvZF9mbiA9IG15aGRyLT5hcHBsaWQ7CisJaWQucmVjb3JkX25yID0gbXloZHItPnJlY29yZF9udW07CisJaWQudmVyc2lvbl9uciA9IG15aGRyLT52ZXJzaW9uOworCWlkLnJlbGVhc2VfbnIgPSBteWhkci0+cmVsZWFzZTsKKwlpZC5tb2RfbHZsID0gbXloZHItPm1vZF9sZXZlbDsKKwlyYyA9IGFwcGxkYXRhX2FzbSgmaWQsIGZjbiwgKHZvaWQgKikgYnVmZmVyLCBteWhkci0+ZGF0YWxlbik7CisJaWYgKHJjIDw9IDApCisJCXJldHVybiByYzsKKwlpZiAocmMgPT0gNSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlwcmludGsoIkRJQUcgWCdEQycgZXJyb3Igd2l0aCByZXR1cm4gY29kZTogJWlcbiIsIHJjKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9uX2J1ZiAqbW9ud3JpdGVfZmluZF9oZHIoc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2LAorCQkJCQkJc3RydWN0IG1vbndyaXRlX2hkciAqbW9uaGRyKQoreworCXN0cnVjdCBtb25fYnVmICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZtb25wcml2LT5saXN0LCBsaXN0KQorCQlpZiAoZW50cnktPmhkci5hcHBsaWQgPT0gbW9uaGRyLT5hcHBsaWQgJiYKKwkJICAgIGVudHJ5LT5oZHIucmVjb3JkX251bSA9PSBtb25oZHItPnJlY29yZF9udW0gJiYKKwkJICAgIGVudHJ5LT5oZHIudmVyc2lvbiA9PSBtb25oZHItPnZlcnNpb24gJiYKKwkJICAgIGVudHJ5LT5oZHIucmVsZWFzZSA9PSBtb25oZHItPnJlbGVhc2UgJiYKKwkJICAgIGVudHJ5LT5oZHIubW9kX2xldmVsID09IG1vbmhkci0+bW9kX2xldmVsKQorCQkJcmV0dXJuIGVudHJ5OworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IG1vbndyaXRlX25ld19oZHIoc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2KQoreworCXN0cnVjdCBtb253cml0ZV9oZHIgKm1vbmhkciA9ICZtb25wcml2LT5oZHI7CisJc3RydWN0IG1vbl9idWYgKm1vbmJ1ZjsKKwlpbnQgcmM7CisKKwlpZiAobW9uaGRyLT5kYXRhbGVuID4gTU9OV1JJVEVfTUFYX0RBVEFMRU4gfHwKKwkgICAgbW9uaGRyLT5tb25fZnVuY3Rpb24gPiBNT05XUklURV9TVEFSVF9DT05GSUcgfHwKKwkgICAgbW9uaGRyLT5oZHJsZW4gIT0gc2l6ZW9mKHN0cnVjdCBtb253cml0ZV9oZHIpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltb25idWYgPSBtb253cml0ZV9maW5kX2hkcihtb25wcml2LCBtb25oZHIpOworCWlmIChtb25idWYpIHsKKwkJaWYgKG1vbmhkci0+bW9uX2Z1bmN0aW9uID09IE1PTldSSVRFX1NUT1BfSU5URVJWQUwpIHsKKwkJCW1vbmhkci0+ZGF0YWxlbiA9IG1vbmJ1Zi0+aGRyLmRhdGFsZW47CisJCQlyYyA9IG1vbndyaXRlX2RpYWcobW9uaGRyLCBtb25idWYtPmRhdGEsCisJCQkJCSAgIEFQUExEQVRBX1NUT1BfUkVDKTsKKwkJCWxpc3RfZGVsKCZtb25idWYtPmxpc3QpOworCQkJbW9ucHJpdi0+bW9uX2J1Zl9jb3VudC0tOworCQkJa2ZyZWUobW9uYnVmLT5kYXRhKTsKKwkJCWtmcmVlKG1vbmJ1Zik7CisJCQltb25idWYgPSBOVUxMOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG1vbnByaXYtPm1vbl9idWZfY291bnQgPj0gbW9uX21heF9idWZzKQorCQkJcmV0dXJuIC1FTk9TUEM7CisJCW1vbmJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb25fYnVmKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghbW9uYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1vbmJ1Zi0+ZGF0YSA9IGt6YWxsb2MobW9uYnVmLT5oZHIuZGF0YWxlbiwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOworCQlpZiAoIW1vbmJ1Zi0+ZGF0YSkgeworCQkJa2ZyZWUobW9uYnVmKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCW1vbmJ1Zi0+aGRyID0gKm1vbmhkcjsKKwkJbGlzdF9hZGRfdGFpbCgmbW9uYnVmLT5saXN0LCAmbW9ucHJpdi0+bGlzdCk7CisJCW1vbnByaXYtPm1vbl9idWZfY291bnQrKzsKKwl9CisJbW9ucHJpdi0+Y3VycmVudF9idWYgPSBtb25idWY7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9ud3JpdGVfbmV3X2RhdGEoc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2KQoreworCXN0cnVjdCBtb253cml0ZV9oZHIgKm1vbmhkciA9ICZtb25wcml2LT5oZHI7CisJc3RydWN0IG1vbl9idWYgKm1vbmJ1ZiA9IG1vbnByaXYtPmN1cnJlbnRfYnVmOworCWludCByYyA9IDA7CisKKwlzd2l0Y2ggKG1vbmhkci0+bW9uX2Z1bmN0aW9uKSB7CisJY2FzZSBNT05XUklURV9TVEFSVF9JTlRFUlZBTDoKKwkJaWYgKCFtb25idWYtPmRpYWdfZG9uZSkgeworCQkJcmMgPSBtb253cml0ZV9kaWFnKG1vbmhkciwgbW9uYnVmLT5kYXRhLAorCQkJCQkgICBBUFBMREFUQV9TVEFSVF9JTlRFUlZBTF9SRUMpOworCQkJbW9uYnVmLT5kaWFnX2RvbmUgPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgTU9OV1JJVEVfU1RBUlRfQ09ORklHOgorCQlpZiAoIW1vbmJ1Zi0+ZGlhZ19kb25lKSB7CisJCQlyYyA9IG1vbndyaXRlX2RpYWcobW9uaGRyLCBtb25idWYtPmRhdGEsCisJCQkJCSAgIEFQUExEQVRBX1NUQVJUX0NPTkZJR19SRUMpOworCQkJbW9uYnVmLT5kaWFnX2RvbmUgPSAxOworCQl9CisJCWJyZWFrOworCWNhc2UgTU9OV1JJVEVfR0VOX0VWRU5UOgorCQlyYyA9IG1vbndyaXRlX2RpYWcobW9uaGRyLCBtb25idWYtPmRhdGEsCisJCQkJICAgQVBQTERBVEFfR0VOX0VWRU5UX1JFQyk7CisJCWxpc3RfZGVsKCZtb25wcml2LT5jdXJyZW50X2J1Zi0+bGlzdCk7CisJCWtmcmVlKG1vbnByaXYtPmN1cnJlbnRfYnVmLT5kYXRhKTsKKwkJa2ZyZWUobW9ucHJpdi0+Y3VycmVudF9idWYpOworCQltb25wcml2LT5jdXJyZW50X2J1ZiA9IE5VTEw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIG1vbmhkci0+bW9uX2Z1bmN0aW9uIGlzIGNoZWNrZWQgaW4gbW9ud3JpdGVfbmV3X2hkciAqLworCQlCVUcoKTsKKwl9CisJcmV0dXJuIHJjOworfQorCisvKgorICogZmlsZSBvcGVyYXRpb25zCisgKi8KKworc3RhdGljIGludCBtb253cml0ZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBtb25fcHJpdmF0ZSAqbW9ucHJpdjsKKworCW1vbnByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbW9uX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1vbnByaXYpCisJCXJldHVybiAtRU5PTUVNOworCUlOSVRfTElTVF9IRUFEKCZtb25wcml2LT5saXN0KTsKKwltb25wcml2LT5oZHJfdG9fcmVhZCA9IHNpemVvZihtb25wcml2LT5oZHIpOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IG1vbnByaXY7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbHApOworfQorCitzdGF0aWMgaW50IG1vbndyaXRlX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCXN0cnVjdCBtb25fcHJpdmF0ZSAqbW9ucHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbW9uX2J1ZiAqZW50cnksICpuZXh0OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmbW9ucHJpdi0+bGlzdCwgbGlzdCkgeworCQlpZiAoZW50cnktPmhkci5tb25fZnVuY3Rpb24gIT0gTU9OV1JJVEVfR0VOX0VWRU5UKQorCQkJbW9ud3JpdGVfZGlhZygmZW50cnktPmhkciwgZW50cnktPmRhdGEsCisJCQkJICAgICAgQVBQTERBVEFfU1RPUF9SRUMpOworCQltb25wcml2LT5tb25fYnVmX2NvdW50LS07CisJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWtmcmVlKGVudHJ5LT5kYXRhKTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKwlrZnJlZShtb25wcml2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QgbW9ud3JpdGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IG1vbl9wcml2YXRlICptb25wcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXNpemVfdCBsZW4sIHdyaXR0ZW47CisJdm9pZCAqdG87CisJaW50IHJjOworCisJZm9yICh3cml0dGVuID0gMDsgd3JpdHRlbiA8IGNvdW50OyApIHsKKwkJaWYgKG1vbnByaXYtPmhkcl90b19yZWFkKSB7CisJCQlsZW4gPSBtaW4oY291bnQgLSB3cml0dGVuLCBtb25wcml2LT5oZHJfdG9fcmVhZCk7CisJCQl0byA9IChjaGFyICopICZtb25wcml2LT5oZHIgKworCQkJCXNpemVvZihtb25wcml2LT5oZHIpIC0gbW9ucHJpdi0+aGRyX3RvX3JlYWQ7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodG8sIGRhdGEgKyB3cml0dGVuLCBsZW4pKSB7CisJCQkJcmMgPSAtRUZBVUxUOworCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJfQorCQkJbW9ucHJpdi0+aGRyX3RvX3JlYWQgLT0gbGVuOworCQkJd3JpdHRlbiArPSBsZW47CisJCQlpZiAobW9ucHJpdi0+aGRyX3RvX3JlYWQgPiAwKQorCQkJCWNvbnRpbnVlOworCQkJcmMgPSBtb253cml0ZV9uZXdfaGRyKG1vbnByaXYpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJbW9ucHJpdi0+ZGF0YV90b19yZWFkID0gbW9ucHJpdi0+Y3VycmVudF9idWYgPworCQkJCW1vbnByaXYtPmN1cnJlbnRfYnVmLT5oZHIuZGF0YWxlbiA6IDA7CisJCX0KKworCQlpZiAobW9ucHJpdi0+ZGF0YV90b19yZWFkKSB7CisJCQlsZW4gPSBtaW4oY291bnQgLSB3cml0dGVuLCBtb25wcml2LT5kYXRhX3RvX3JlYWQpOworCQkJdG8gPSBtb25wcml2LT5jdXJyZW50X2J1Zi0+ZGF0YSArCisJCQkJbW9ucHJpdi0+aGRyLmRhdGFsZW4gLSBtb25wcml2LT5kYXRhX3RvX3JlYWQ7CisJCQlpZiAoY29weV9mcm9tX3VzZXIodG8sIGRhdGEgKyB3cml0dGVuLCBsZW4pKSB7CisJCQkJcmMgPSAtRUZBVUxUOworCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJfQorCQkJbW9ucHJpdi0+ZGF0YV90b19yZWFkIC09IGxlbjsKKwkJCXdyaXR0ZW4gKz0gbGVuOworCQkJaWYgKG1vbnByaXYtPmRhdGFfdG9fcmVhZCA+IDApCisJCQkJY29udGludWU7CisJCQlyYyA9IG1vbndyaXRlX25ld19kYXRhKG1vbnByaXYpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0X2Vycm9yOworCQl9CisJCW1vbnByaXYtPmhkcl90b19yZWFkID0gc2l6ZW9mKG1vbnByaXYtPmhkcik7CisJfQorCXJldHVybiB3cml0dGVuOworCitvdXRfZXJyb3I6CisJbW9ucHJpdi0+ZGF0YV90b19yZWFkID0gMDsKKwltb25wcml2LT5oZHJfdG9fcmVhZCA9IHNpemVvZihzdHJ1Y3QgbW9ud3JpdGVfaGRyKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbndyaXRlX2ZvcHMgPSB7CisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCS5vcGVuCSA9ICZtb253cml0ZV9vcGVuLAorCS5yZWxlYXNlID0gJm1vbndyaXRlX2Nsb3NlLAorCS53cml0ZQkgPSAmbW9ud3JpdGVfd3JpdGUsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbW9uX2RldiA9IHsKKwkubmFtZQk9ICJtb253cml0ZXIiLAorCS5mb3BzCT0gJm1vbndyaXRlX2ZvcHMsCisJLm1pbm9yCT0gTUlTQ19EWU5BTUlDX01JTk9SLAorfTsKKworLyoKKyAqIG1vZHVsZSBpbml0L2V4aXQKKyAqLworCitzdGF0aWMgaW50IF9faW5pdCBtb25faW5pdCh2b2lkKQoreworCWlmIChNQUNISU5FX0lTX1ZNKQorCQlyZXR1cm4gbWlzY19yZWdpc3RlcigmbW9uX2Rldik7CisJZWxzZQorCQlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG1vbl9leGl0KHZvaWQpCit7CisJV0FSTl9PTihtaXNjX2RlcmVnaXN0ZXIoJm1vbl9kZXYpICE9IDApOworfQorCittb2R1bGVfaW5pdChtb25faW5pdCk7Cittb2R1bGVfZXhpdChtb25fZXhpdCk7CisKK21vZHVsZV9wYXJhbV9uYW1lZChtYXhfYnVmcywgbW9uX21heF9idWZzLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhtYXhfYnVmcywgIk1heGltdW0gbnVtYmVyIG9mIHNhbXBsZSBtb25pdG9yIGRhdGEgYnVmZmVycyIKKwkJICJ0aGF0IGNhbiBiZSBhY3RpdmUgYXQgb25lIHRpbWUiKTsKKworTU9EVUxFX0FVVEhPUigiTWVsaXNzYSBIb3dsYW5kIDxNZWxpc3NhLkhvd2xhbmRAdXMuaWJtLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIHdyaXRpbmcgei9WTSAiCisJCSAgICJBUFBMREFUQSBtb25pdG9yIHJlY29yZHMuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90YXBlX2NsYXNzLmMKaW5kZXggNjQzYjZkMC4uNTZiODc2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdGFwZV9jbGFzcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3RhcGVfY2xhc3MuYwpAQCAtNzYsNyArNzYsNyBAQAogCQkJCWRldmljZSwKIAkJCQkiJXMiLCB0Y2QtPmRldmljZV9uYW1lCiAJCQkpOwotCXJjID0gUFRSX0VSUih0Y2QtPmNsYXNzX2RldmljZSk7CisJcmMgPSBJU19FUlIodGNkLT5jbGFzc19kZXZpY2UpID8gUFRSX0VSUih0Y2QtPmNsYXNzX2RldmljZSkgOiAwOwogCWlmIChyYykKIAkJZ290byBmYWlsX3dpdGhfY2RldjsKIAlyYyA9IHN5c2ZzX2NyZWF0ZV9saW5rKApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5jCmluZGV4IDE5NzYyZjMuLjE2NzhiNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtY3AuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci92bWNwLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA0LDIwMDUgSUJNIENvcnBvcmF0aW9uCi0gKiBJbnRlcmZhY2UgaW1wbGVtZW50YXRpb24gZm9yIGNvbW11bmljYXRpb24gd2l0aCB0aGUgdi9WTSBjb250cm9sIHByb2dyYW0KKyAqIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB6L1ZNIGNvbnRyb2wgcHJvZ3JhbQogICogQXV0aG9yKHMpOiBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGNib3JudHJhQGRlLmlibS5jb20+CiAgKgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3ZtY3AuaCBiL2RyaXZlcnMvczM5MC9jaGFyL3ZtY3AuaAppbmRleCA4NzM4OWU3Li44YTU5NzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci92bWNwLmgKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvdm1jcC5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBJQk0gQ29ycG9yYXRpb24KLSAqIEludGVyZmFjZSBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSB2L1ZNIGNvbnRyb2wgcHJvZ3JhbQorICogSW50ZXJmYWNlIGltcGxlbWVudGF0aW9uIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdGhlIHovVk0gY29udHJvbCBwcm9ncmFtCiAgKiBWZXJzaW9uIDEuMAogICogQXV0aG9yKHMpOiBDaHJpc3RpYW4gQm9ybnRyYWVnZXIgPGNib3JudHJhQGRlLmlibS5jb20+CiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jIGIvZHJpdmVycy9zMzkwL2Npby9jY3dncm91cC5jCmluZGV4IGYyNmEyZWUuLjM4OTU0ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2N3Z3JvdXAuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Njd2dyb3VwLmMKQEAgLTE1Miw3ICsxNTIsNiBAQAogCXN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXY7CiAJaW50IGk7CiAJaW50IHJjOwotCWludCBkZWxfZHJ2ZGF0YTsKIAogCWlmIChhcmdjID4gMjU2KSAvKiBkaXNhbGxvdyBkdW1iIHVzZXJzICovCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTYzLDcgKzE2Miw2IEBACiAKIAlhdG9taWNfc2V0KCZnZGV2LT5vbm9mZiwgMCk7CiAKLQlkZWxfZHJ2ZGF0YSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykgewogCQlnZGV2LT5jZGV2W2ldID0gZ2V0X2Njd2Rldl9ieV9idXNpZChjZHJ2LCBhcmd2W2ldKTsKIApAQCAtMTgwLDE4ICsxNzgsMTQgQEAKIAkJCXJjID0gLUVJTlZBTDsKIAkJCWdvdG8gZnJlZV9kZXY7CiAJCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKIAkJZ2Rldi0+Y2RldltpXS0+ZGV2LmRyaXZlcl9kYXRhID0gZ2RldjsKLQlkZWxfZHJ2ZGF0YSA9IDE7CisJfQogCiAJZ2Rldi0+Y3JlYXRvcl9pZCA9IGNyZWF0b3JfaWQ7CiAJZ2Rldi0+Y291bnQgPSBhcmdjOwotCWdkZXYtPmRldiA9IChzdHJ1Y3QgZGV2aWNlICkgewotCQkuYnVzID0gJmNjd2dyb3VwX2J1c190eXBlLAotCQkucGFyZW50ID0gcm9vdCwKLQkJLnJlbGVhc2UgPSBjY3dncm91cF9yZWxlYXNlLAotCX07CisJZ2Rldi0+ZGV2LmJ1cyA9ICZjY3dncm91cF9idXNfdHlwZTsKKwlnZGV2LT5kZXYucGFyZW50ID0gcm9vdDsKKwlnZGV2LT5kZXYucmVsZWFzZSA9IGNjd2dyb3VwX3JlbGVhc2U7CiAKIAlzbnByaW50ZiAoZ2Rldi0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsICIlcyIsCiAJCQlnZGV2LT5jZGV2WzBdLT5kZXYuYnVzX2lkKTsKQEAgLTIyNiw5ICsyMjAsOSBAQAogZnJlZV9kZXY6CiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKIAkJaWYgKGdkZXYtPmNkZXZbaV0pIHsKLQkJCXB1dF9kZXZpY2UoJmdkZXYtPmNkZXZbaV0tPmRldik7Ci0JCQlpZiAoZGVsX2RydmRhdGEpCisJCQlpZiAoZ2Rldi0+Y2RldltpXS0+ZGV2LmRyaXZlcl9kYXRhID09IGdkZXYpCiAJCQkJZ2Rldi0+Y2RldltpXS0+ZGV2LmRyaXZlcl9kYXRhID0gTlVMTDsKKwkJCXB1dF9kZXZpY2UoJmdkZXYtPmNkZXZbaV0tPmRldik7CiAJCX0KIAlrZnJlZShnZGV2KTsKIAlyZXR1cm4gcmM7CkBAIC0zOTUsMTAgKzM4OSw4IEBACiBjY3dncm91cF9kcml2ZXJfcmVnaXN0ZXIgKHN0cnVjdCBjY3dncm91cF9kcml2ZXIgKmNkcml2ZXIpCiB7CiAJLyogcmVnaXN0ZXIgb3VyIG5ldyBkcml2ZXIgd2l0aCB0aGUgY29yZSAqLwotCWNkcml2ZXItPmRyaXZlciA9IChzdHJ1Y3QgZGV2aWNlX2RyaXZlcikgewotCQkuYnVzID0gJmNjd2dyb3VwX2J1c190eXBlLAotCQkubmFtZSA9IGNkcml2ZXItPm5hbWUsCi0JfTsKKwljZHJpdmVyLT5kcml2ZXIuYnVzID0gJmNjd2dyb3VwX2J1c190eXBlOworCWNkcml2ZXItPmRyaXZlci5uYW1lID0gY2RyaXZlci0+bmFtZTsKIAogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmNkcml2ZXItPmRyaXZlcik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2Noc2MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCmluZGV4IDYxY2UzZjEuLjNiYjRlNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vY2hzYy5jCkBAIC0yMzgsOCArMjM4LDYgQEAKIAkvKiBDaGVjayBmb3Igc2luZ2xlIHBhdGggZGV2aWNlcy4gKi8KIAlpZiAoc2NoLT5zY2hpYi5wbWN3LnBpbSA9PSAweDgwKQogCQlnb3RvIG91dF91bnJlZzsKLQlpZiAoc2NoLT52cG0gPT0gbWFzaykKLQkJZ290byBvdXRfdW5yZWc7CiAKIAlpZiAoKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX0RFVkFDVCkgJiYKIAkgICAgKHNjaC0+c2NoaWIuc2Nzdy5hY3RsICYgU0NTV19BQ1RMX1NDSEFDVCkgJiYKQEAgLTI1OCw2ICsyNTYsOCBAQAogCS8qIHRyaWdnZXIgcGF0aCB2ZXJpZmljYXRpb24uICovCiAJaWYgKHNjaC0+ZHJpdmVyICYmIHNjaC0+ZHJpdmVyLT52ZXJpZnkpCiAJCXNjaC0+ZHJpdmVyLT52ZXJpZnkoJnNjaC0+ZGV2KTsKKwllbHNlIGlmIChzY2gtPmxwbSA9PSBtYXNrKQorCQlnb3RvIG91dF91bnJlZzsKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOwogCXJldHVybiAwOwpAQCAtMzc4LDYgKzM3OCw3IEBACiAKIAlpZiAoY2hwX21hc2sgPT0gMCkgewogCQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CisJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKIAkJcmV0dXJuIDA7CiAJfQogCW9sZF9scG0gPSBzY2gtPmxwbTsKQEAgLTM5Miw3ICszOTMsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKCZzY2gtPmxvY2spOwogCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKLQlyZXR1cm4gKHJlc19kYXRhLT5mbGFfbWFzayA9PSAweGZmZmYpID8gLUVOT0RFViA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIApAQCAtMTM5MSwxMCArMTM5Miw4IEBACiAJLyogZmlsbCBpbiBzdGF0dXMsIGV0Yy4gKi8KIAljaHAtPmlkID0gY2hwaWQ7CiAJY2hwLT5zdGF0ZSA9IDE7Ci0JY2hwLT5kZXYgPSAoc3RydWN0IGRldmljZSkgewotCQkucGFyZW50ICA9ICZjc3NbMF0tPmRldmljZSwKLQkJLnJlbGVhc2UgPSBjaHBfcmVsZWFzZSwKLQl9OworCWNocC0+ZGV2LnBhcmVudCA9ICZjc3NbMF0tPmRldmljZTsKKwljaHAtPmRldi5yZWxlYXNlID0gY2hwX3JlbGVhc2U7CiAJc25wcmludGYoY2hwLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwgImNocDAuJXgiLCBjaHBpZCk7CiAKIAkvKiBPYnRhaW4gY2hhbm5lbCBwYXRoIGRlc2NyaXB0aW9uIGFuZCBmaWxsIGl0IGluLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vY2lvLmMKaW5kZXggODkzMjBjMS4uMmUyODgyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jaW8uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Npby5jCkBAIC0xNiwxMSArMTYsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCiAjaW5jbHVkZSA8YXNtL2Npby5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgImFpcnEuaCIKICNpbmNsdWRlICJjaW8uaCIKICNpbmNsdWRlICJjc3MuaCIKQEAgLTE5Miw3ICsxOTEsNyBAQAogCXNjaC0+b3JiLnBmY2ggPSBzY2gtPm9wdGlvbnMucHJlZmV0Y2ggPT0gMDsKIAlzY2gtPm9yYi5zcG5kID0gc2NoLT5vcHRpb25zLnN1c3BlbmQ7CiAJc2NoLT5vcmIuc3NpYyA9IHNjaC0+b3B0aW9ucy5zdXNwZW5kICYmIHNjaC0+b3B0aW9ucy5pbnRlcjsKLQlzY2gtPm9yYi5scG0gPSAobHBtICE9IDApID8gKGxwbSAmIHNjaC0+b3BtKSA6IHNjaC0+bHBtOworCXNjaC0+b3JiLmxwbSA9IChscG0gIT0gMCkgPyBscG0gOiBzY2gtPmxwbTsKICNpZmRlZiBDT05GSUdfNjRCSVQKIAkvKgogCSAqIGZvciA2NCBiaXQgd2UgYWx3YXlzIHN1cHBvcnQgNjQgYml0IElEQVdzIHdpdGggNGsgcGFnZSBzaXplIG9ubHkKQEAgLTU3MCwxMCArNTY5LDcgQEAKIAlzY2gtPm9wbSA9IDB4ZmY7CiAJaWYgKCFjaW9faXNfY29uc29sZShzY2gtPnNjaGlkKSkKIAkJY2hzY192YWxpZGF0ZV9jaHBpZHMoc2NoKTsKLQlzY2gtPmxwbSA9IHNjaC0+c2NoaWIucG1jdy5waW0gJgotCQlzY2gtPnNjaGliLnBtY3cucGFtICYKLQkJc2NoLT5zY2hpYi5wbWN3LnBvbSAmCi0JCXNjaC0+b3BtOworCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbSAmIHNjaC0+b3BtOwogCiAJQ0lPX0RFQlVHKEtFUk5fSU5GTywgMCwKIAkJICAiRGV0ZWN0ZWQgZGV2aWNlICUwNHggb24gc3ViY2hhbm5lbCAwLiV4LiUwNFgiCkBAIC04NDEsMTQgKzgzNywyNiBAQAogCXJldHVybiAtRUJVU1k7CiB9CiAKLWV4dGVybiB2b2lkIGRvX3JlaXBsKHVuc2lnbmVkIGxvbmcgZGV2bm8pOwotc3RhdGljIGludAotX19zaHV0ZG93bl9zdWJjaGFubmVsX2Vhc3koc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsIHZvaWQgKmRhdGEpCitzdHJ1Y3Qgc2NoX21hdGNoX2lkIHsKKwlzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZDsKKwlzdHJ1Y3QgY2N3X2Rldl9pZCBkZXZpZDsKKwlpbnQgcmM7Cit9OworCitzdGF0aWMgaW50IF9fc2h1dGRvd25fc3ViY2hhbm5lbF9lYXN5X2FuZF9tYXRjaChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwKKwl2b2lkICpkYXRhKQogewogCXN0cnVjdCBzY2hpYiBzY2hpYjsKKwlzdHJ1Y3Qgc2NoX21hdGNoX2lkICptYXRjaF9pZCA9IGRhdGE7CiAKIAlpZiAoc3RzY2hfZXJyKHNjaGlkLCAmc2NoaWIpKQogCQlyZXR1cm4gLUVOWElPOworCWlmIChtYXRjaF9pZCAmJiBzY2hpYi5wbWN3LmRudiAmJgorCQkoc2NoaWIucG1jdy5kZXYgPT0gbWF0Y2hfaWQtPmRldmlkLmRldm5vKSAmJgorCQkoc2NoaWQuc3NpZCA9PSBtYXRjaF9pZC0+ZGV2aWQuc3NpZCkpIHsKKwkJbWF0Y2hfaWQtPnNjaGlkID0gc2NoaWQ7CisJCW1hdGNoX2lkLT5yYyA9IDA7CisJfQogCWlmICghc2NoaWIucG1jdy5lbmEpCiAJCXJldHVybiAwOwogCXN3aXRjaChfX2Rpc2FibGVfc3ViY2hhbm5lbF9lYXN5KHNjaGlkLCAmc2NoaWIpKSB7CkBAIC04NjQsMTggKzg3Miw3MSBAQAogCXJldHVybiAwOwogfQogCi12b2lkCi1jbGVhcl9hbGxfc3ViY2hhbm5lbHModm9pZCkKK3N0YXRpYyBpbnQgY2xlYXJfYWxsX3N1YmNoYW5uZWxzX2FuZF9tYXRjaChzdHJ1Y3QgY2N3X2Rldl9pZCAqZGV2aWQsCisJc3RydWN0IHN1YmNoYW5uZWxfaWQgKnNjaGlkKQogeworCXN0cnVjdCBzY2hfbWF0Y2hfaWQgbWF0Y2hfaWQ7CisKKwltYXRjaF9pZC5kZXZpZCA9ICpkZXZpZDsKKwltYXRjaF9pZC5yYyA9IC1FTk9ERVY7CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlmb3JfZWFjaF9zdWJjaGFubmVsKF9fc2h1dGRvd25fc3ViY2hhbm5lbF9lYXN5LCBOVUxMKTsKKwlmb3JfZWFjaF9zdWJjaGFubmVsKF9fc2h1dGRvd25fc3ViY2hhbm5lbF9lYXN5X2FuZF9tYXRjaCwgJm1hdGNoX2lkKTsKKwlpZiAobWF0Y2hfaWQucmMgPT0gMCkKKwkJKnNjaGlkID0gbWF0Y2hfaWQuc2NoaWQ7CisJcmV0dXJuIG1hdGNoX2lkLnJjOwogfQogCi0vKiBNYWtlIHN1cmUgYWxsIHN1YmNoYW5uZWxzIGFyZSBxdWlldCBiZWZvcmUgd2UgcmUtaXBsIGFuIGxwYXIuICovCi12b2lkCi1yZWlwbCh1bnNpZ25lZCBsb25nIGRldm5vKQorCit2b2lkIGNsZWFyX2FsbF9zdWJjaGFubmVscyh2b2lkKQogewotCWNsZWFyX2FsbF9zdWJjaGFubmVscygpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJZm9yX2VhY2hfc3ViY2hhbm5lbChfX3NodXRkb3duX3N1YmNoYW5uZWxfZWFzeV9hbmRfbWF0Y2gsIE5VTEwpOworfQorCitleHRlcm4gdm9pZCBkb19yZWlwbF9hc20oX191MzIgc2NoaWQpOworCisvKiBNYWtlIHN1cmUgYWxsIHN1YmNoYW5uZWxzIGFyZSBxdWlldCBiZWZvcmUgd2UgcmUtaXBsIGFuIGxwYXIuICovCit2b2lkIHJlaXBsX2Njd19kZXYoc3RydWN0IGNjd19kZXZfaWQgKmRldmlkKQoreworCXN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkOworCisJaWYgKGNsZWFyX2FsbF9zdWJjaGFubmVsc19hbmRfbWF0Y2goZGV2aWQsICZzY2hpZCkpCisJCXBhbmljKCJJUEwgRGV2aWNlIG5vdCBmb3VuZFxuIik7CiAJY2lvX3Jlc2V0X2NoYW5uZWxfcGF0aHMoKTsKLQlkb19yZWlwbChkZXZubyk7CisJZG9fcmVpcGxfYXNtKCooKF9fdTMyKikmc2NoaWQpKTsKK30KKworZXh0ZXJuIHN0cnVjdCBzY2hpYiBpcGxfc2NoaWI7CisKKy8qCisgKiBpcGxfc2F2ZV9wYXJhbWV0ZXJzIGdldHMgY2FsbGVkIHZlcnkgZWFybHkuIEl0IGlzIG5vdCBhbGxvd2VkIHRvIGFjY2VzcworICogYW55dGhpbmcgaW4gdGhlIGJzcyBzZWN0aW9uIGF0IGFsbC4gVGhlIGJzcyBzZWN0aW9uIGlzIG5vdCBjbGVhcmVkIHlldCwKKyAqIGJ1dCBtYXkgY29udGFpbiBzb21lIGlwbCBwYXJhbWV0ZXJzIHdyaXR0ZW4gYnkgdGhlIGZpcm13YXJlLgorICogVGhlc2UgcGFyYW1ldGVycyAoaWYgcHJlc2VudCkgYXJlIGNvcGllZCB0byAweDIwMDAuCisgKiBUbyBhdm9pZCBjb3JydXB0aW9uIG9mIHRoZSBpcGwgcGFyYW1ldGVycywgYWxsIHZhcmlhYmxlcyB1c2VkIGJ5IHRoaXMKKyAqIGZ1bmN0aW9uIG11c3QgcmVzaWRlIG9uIHRoZSBzdGFjayBvciBpbiB0aGUgZGF0YSBzZWN0aW9uLgorICovCit2b2lkIGlwbF9zYXZlX3BhcmFtZXRlcnModm9pZCkKK3sKKwlzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZDsKKwl1bnNpZ25lZCBpbnQgKmlwbF9wdHI7CisJdm9pZCAqc3JjLCAqZHN0OworCisJc2NoaWQgPSAqKHN0cnVjdCBzdWJjaGFubmVsX2lkICopX19MQ19TVUJDSEFOTkVMX0lEOworCWlmICghc2NoaWQub25lKQorCQlyZXR1cm47CisJaWYgKHN0c2NoKHNjaGlkLCAmaXBsX3NjaGliKSkKKwkJcmV0dXJuOworCWlmICghaXBsX3NjaGliLnBtY3cuZG52KQorCQlyZXR1cm47CisJaXBsX2Rldm5vID0gaXBsX3NjaGliLnBtY3cuZGV2OworCWlwbF9mbGFncyB8PSBJUExfREVWTk9fVkFMSUQ7CisJaWYgKCFpcGxfc2NoaWIucG1jdy5xZikKKwkJcmV0dXJuOworCWlwbF9mbGFncyB8PSBJUExfUEFSTUJMT0NLX1ZBTElEOworCWlwbF9wdHIgPSAodW5zaWduZWQgaW50ICopX19MQ19JUExfUEFSTUJMT0NLX1BUUjsKKwlzcmMgPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKSppcGxfcHRyOworCWRzdCA9ICh2b2lkICopSVBMX1BBUk1CTE9DS19PUklHSU47CisJbWVtbW92ZShkc3QsIHNyYywgUEFHRV9TSVpFKTsKKwkqaXBsX3B0ciA9IElQTF9QQVJNQkxPQ0tfT1JJR0lOOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYyBiL2RyaXZlcnMvczM5MC9jaW8vY3NzLmMKaW5kZXggMTNlZWVhMy4uNzA4NmE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9jc3MuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2Nzcy5jCkBAIC0xODIsMTM2ICsxODIsMTQxIEBACiAJcmV0dXJuIGRldiA/IHRvX3N1YmNoYW5uZWwoZGV2KSA6IE5VTEw7CiB9CiAKLQotc3RhdGljIGlubGluZSBpbnQKLWNzc19nZXRfc3ViY2hhbm5lbF9zdGF0dXMoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpCitzdGF0aWMgaW5saW5lIGludCBjc3NfZ2V0X3N1YmNoYW5uZWxfc3RhdHVzKHN0cnVjdCBzdWJjaGFubmVsICpzY2gpCiB7CiAJc3RydWN0IHNjaGliIHNjaGliOwotCWludCBjYzsKIAotCWNjID0gc3RzY2goc2NoaWQsICZzY2hpYik7Ci0JaWYgKGNjKQorCWlmIChzdHNjaChzY2gtPnNjaGlkLCAmc2NoaWIpIHx8ICFzY2hpYi5wbWN3LmRudikKIAkJcmV0dXJuIENJT19HT05FOwotCWlmICghc2NoaWIucG1jdy5kbnYpCi0JCXJldHVybiBDSU9fR09ORTsKLQlpZiAoc2NoICYmIHNjaC0+c2NoaWIucG1jdy5kbnYgJiYKLQkgICAgKHNjaGliLnBtY3cuZGV2ICE9IHNjaC0+c2NoaWIucG1jdy5kZXYpKQorCWlmIChzY2gtPnNjaGliLnBtY3cuZG52ICYmIChzY2hpYi5wbWN3LmRldiAhPSBzY2gtPnNjaGliLnBtY3cuZGV2KSkKIAkJcmV0dXJuIENJT19SRVZBTElEQVRFOwotCWlmIChzY2ggJiYgIXNjaC0+bHBtKQorCWlmICghc2NoLT5scG0pCiAJCXJldHVybiBDSU9fTk9fUEFUSDsKIAlyZXR1cm4gQ0lPX09QRVI7CiB9Ci0JCi1zdGF0aWMgaW50Ci1jc3NfZXZhbHVhdGVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgaW50IHNsb3cpCisKK3N0YXRpYyBpbnQgY3NzX2V2YWx1YXRlX2tub3duX3N1YmNoYW5uZWwoc3RydWN0IHN1YmNoYW5uZWwgKnNjaCwgaW50IHNsb3cpCiB7CiAJaW50IGV2ZW50LCByZXQsIGRpc2M7Ci0Jc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWVudW0geyBOT05FLCBVTlJFR0lTVEVSLCBVTlJFR0lTVEVSX1BST0JFLCBSRVBST0JFIH0gYWN0aW9uOwogCi0Jc2NoID0gZ2V0X3N1YmNoYW5uZWxfYnlfc2NoaWQoc2NoaWQpOwotCWRpc2MgPSBzY2ggPyBkZXZpY2VfaXNfZGlzY29ubmVjdGVkKHNjaCkgOiAwOworCXNwaW5fbG9ja19pcnFzYXZlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwlkaXNjID0gZGV2aWNlX2lzX2Rpc2Nvbm5lY3RlZChzY2gpOwogCWlmIChkaXNjICYmIHNsb3cpIHsKLQkJaWYgKHNjaCkKLQkJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKLQkJcmV0dXJuIDA7IC8qIEFscmVhZHkgcHJvY2Vzc2VkLiAqLworCQkvKiBEaXNjb25uZWN0ZWQgZGV2aWNlcyBhcmUgZXZhbHVhdGVkIGRpcmVjdGx5IG9ubHkuKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOwogCX0KLQkvKgotCSAqIFdlJ3ZlIGdvdCBhIG1hY2hpbmUgY2hlY2ssIHNvIHJ1bm5pbmcgSS9PIHdvbid0IGdldCBhbiBpbnRlcnJ1cHQuCi0JICogS2lsbCBhbnkgcGVuZGluZyB0aW1lcnMuCi0JICovCi0JaWYgKHNjaCkKLQkJZGV2aWNlX2tpbGxfcGVuZGluZ190aW1lcihzY2gpOworCS8qIE5vIGludGVycnVwdCBhZnRlciBtYWNoaW5lIGNoZWNrIC0ga2lsbCBwZW5kaW5nIHRpbWVycy4gKi8KKwlkZXZpY2Vfa2lsbF9wZW5kaW5nX3RpbWVyKHNjaCk7CiAJaWYgKCFkaXNjICYmICFzbG93KSB7Ci0JCWlmIChzY2gpCi0JCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7Ci0JCXJldHVybiAtRUFHQUlOOyAvKiBXaWxsIGJlIGRvbmUgb24gdGhlIHNsb3cgcGF0aC4gKi8KKwkJLyogTm9uLWRpc2Nvbm5lY3RlZCBkZXZpY2VzIGFyZSBldmFsdWF0ZWQgb24gdGhlIHNsb3cgcGF0aC4gKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KLQlldmVudCA9IGNzc19nZXRfc3ViY2hhbm5lbF9zdGF0dXMoc2NoLCBzY2hpZCk7CisJZXZlbnQgPSBjc3NfZ2V0X3N1YmNoYW5uZWxfc3RhdHVzKHNjaCk7CiAJQ0lPX01TR19FVkVOVCg0LCAiRXZhbHVhdGluZyBzY2hpZCAwLiV4LiUwNHgsIGV2ZW50ICVkLCAlcywgJXMgcGF0aC5cbiIsCi0JCSAgICAgIHNjaGlkLnNzaWQsIHNjaGlkLnNjaF9ubywgZXZlbnQsCi0JCSAgICAgIHNjaD8oZGlzYz8iZGlzY29ubmVjdGVkIjoibm9ybWFsIik6InVua25vd24iLAotCQkgICAgICBzbG93PyJzbG93IjoiZmFzdCIpOworCQkgICAgICBzY2gtPnNjaGlkLnNzaWQsIHNjaC0+c2NoaWQuc2NoX25vLCBldmVudCwKKwkJICAgICAgZGlzYyA/ICJkaXNjb25uZWN0ZWQiIDogIm5vcm1hbCIsCisJCSAgICAgIHNsb3cgPyAic2xvdyIgOiAiZmFzdCIpOworCS8qIEFuYWx5emUgc3ViY2hhbm5lbCBzdGF0dXMuICovCisJYWN0aW9uID0gTk9ORTsKIAlzd2l0Y2ggKGV2ZW50KSB7CiAJY2FzZSBDSU9fTk9fUEFUSDoKKwkJaWYgKGRpc2MpIHsKKwkJCS8qIENoZWNrIGlmIHBhdGhzIGhhdmUgYmVjb21lIGF2YWlsYWJsZS4gKi8KKwkJCWFjdGlvbiA9IFJFUFJPQkU7CisJCQlicmVhazsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIENJT19HT05FOgotCQlpZiAoIXNjaCkgewotCQkJLyogTmV2ZXIgdXNlZCB0aGlzIHN1YmNoYW5uZWwuIElnbm9yZS4gKi8KLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoZGlzYyAmJiAoZXZlbnQgPT0gQ0lPX05PX1BBVEgpKSB7Ci0JCQkvKgotCQkJICogVWFyZ2gsIGhhY2sgYWdhaW4uIEJlY2F1c2Ugd2UgZG9uJ3QgZ2V0IGEgbWFjaGluZQotCQkJICogY2hlY2sgb24gY29uZmlndXJlIG9uLCBvdXIgcGF0aCBib29ra2VlcGluZyBjYW4KLQkJCSAqIGJlIG91dCBvZiBkYXRlIGhlcmUgKGl0J3MgZmluZSB3aGlsZSB3ZSBvbmx5IGRvCi0JCQkgKiBsb2dpY2FsIHZhcnlpbmcgb3IgZ2V0IGNoc2MgbWFjaGluZSBjaGVja3MpLiBXZQotCQkJICogbmVlZCB0byBmb3JjZSByZXByb2Jpbmcgb3Igd2UgbWlnaHQgbWlzcyBkZXZpY2VzCi0JCQkgKiBjb21pbmcgb3BlcmF0aW9uYWwgYWdhaW4uIEl0IHdvbid0IGRvIGhhcm0gaW4gcmVhbAotCQkJICogbm8gcGF0aCBzaXR1YXRpb25zLgotCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoLT5sb2NrLCBmbGFncyk7Ci0JCQlkZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHNjaCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc2NoLT5kcml2ZXIgJiYgc2NoLT5kcml2ZXItPm5vdGlmeSAmJgotCQkgICAgc2NoLT5kcml2ZXItPm5vdGlmeSgmc2NoLT5kZXYsIGV2ZW50KSkgewotCQkJY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzY2gpOwotCQkJZGV2aWNlX3NldF9kaXNjb25uZWN0ZWQoc2NoKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQkvKgotCQkgKiBVbnJlZ2lzdGVyIHN1YmNoYW5uZWwuCi0JCSAqIFRoZSBkZXZpY2Ugd2lsbCBiZSBraWxsZWQgYXV0b21hdGljYWxseS4KLQkJICovCisJCS8qIFByZXZlbnQgdW53YW50ZWQgZWZmZWN0cyB3aGVuIG9wZW5pbmcgbG9jay4gKi8KIAkJY2lvX2Rpc2FibGVfc3ViY2hhbm5lbChzY2gpOworCQlkZXZpY2Vfc2V0X2Rpc2Nvbm5lY3RlZChzY2gpOworCQkvKiBBc2sgZHJpdmVyIHdoYXQgdG8gZG8gd2l0aCBkZXZpY2UuICovCisJCWFjdGlvbiA9IFVOUkVHSVNURVI7CisJCWlmIChzY2gtPmRyaXZlciAmJiBzY2gtPmRyaXZlci0+bm90aWZ5KSB7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKKwkJCXJldCA9IHNjaC0+ZHJpdmVyLT5ub3RpZnkoJnNjaC0+ZGV2LCBldmVudCk7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoLT5sb2NrLCBmbGFncyk7CisJCQlpZiAocmV0KQorCQkJCWFjdGlvbiA9IE5PTkU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSU9fUkVWQUxJREFURToKKwkJLyogRGV2aWNlIHdpbGwgYmUgcmVtb3ZlZCwgc28gbm8gbm90aWZ5IG5lY2Vzc2FyeS4gKi8KKwkJaWYgKGRpc2MpCisJCQkvKiBSZXByb2JlIGJlY2F1c2UgaW1tZWRpYXRlIHVucmVnaXN0ZXIgbWlnaHQgYmxvY2suICovCisJCQlhY3Rpb24gPSBSRVBST0JFOworCQllbHNlCisJCQlhY3Rpb24gPSBVTlJFR0lTVEVSX1BST0JFOworCQlicmVhazsKKwljYXNlIENJT19PUEVSOgorCQlpZiAoZGlzYykKKwkJCS8qIEdldCBkZXZpY2Ugb3BlcmF0aW9uYWwgYWdhaW4uICovCisJCQlhY3Rpb24gPSBSRVBST0JFOworCQlicmVhazsKKwl9CisJLyogUGVyZm9ybSBhY3Rpb24uICovCisJcmV0ID0gMDsKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgVU5SRUdJU1RFUjoKKwljYXNlIFVOUkVHSVNURVJfUFJPQkU6CisJCS8qIFVucmVnaXN0ZXIgZGV2aWNlICh3aWxsIHVzZSBzdWJjaGFubmVsIGxvY2spLiAqLworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKIAkJY3NzX3NjaF9kZXZpY2VfdW5yZWdpc3RlcihzY2gpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoLT5sb2NrLCBmbGFncyk7CisKIAkJLyogUmVzZXQgaW50cGFybSB0byB6ZXJvZXMuICovCiAJCXNjaC0+c2NoaWIucG1jdy5pbnRwYXJtID0gMDsKIAkJY2lvX21vZGlmeShzY2gpOwotCQlwdXRfZGV2aWNlKCZzY2gtPmRldik7Ci0JCXJldCA9IDA7CisKKwkJLyogUHJvYmUgaWYgbmVjZXNzYXJ5LiAqLworCQlpZiAoYWN0aW9uID09IFVOUkVHSVNURVJfUFJPQkUpCisJCQlyZXQgPSBjc3NfcHJvYmVfZGV2aWNlKHNjaC0+c2NoaWQpOwogCQlicmVhazsKLQljYXNlIENJT19SRVZBTElEQVRFOgotCQkvKiAKLQkJICogUmV2YWxpZGF0aW9uIG1hY2hpbmUgY2hlY2suIFNpY2suCi0JCSAqIFdlIGRvbid0IG5vdGlmeSB0aGUgZHJpdmVyIHNpbmNlIHdlIGhhdmUgdG8gdGhyb3cgdGhlIGRldmljZQotCQkgKiBhd2F5IGluIGFueSBjYXNlLgotCQkgKi8KLQkJaWYgKCFkaXNjKSB7Ci0JCQljc3Nfc2NoX2RldmljZV91bnJlZ2lzdGVyKHNjaCk7Ci0JCQkvKiBSZXNldCBpbnRwYXJtIHRvIHplcm9lcy4gKi8KLQkJCXNjaC0+c2NoaWIucG1jdy5pbnRwYXJtID0gMDsKLQkJCWNpb19tb2RpZnkoc2NoKTsKLQkJCXB1dF9kZXZpY2UoJnNjaC0+ZGV2KTsKLQkJCXJldCA9IGNzc19wcm9iZV9kZXZpY2Uoc2NoaWQpOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFdlIGNhbid0IGltbWVkaWF0ZWx5IGRlcmVnaXN0ZXIgdGhlIGRpc2Nvbm5lY3RlZAotCQkJICogZGV2aWNlIHNpbmNlIGl0IG1pZ2h0IGJsb2NrLgotCQkJICovCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NoLT5sb2NrLCBmbGFncyk7Ci0JCQlkZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHNjaCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKLQkJCXJldCA9IDA7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBDSU9fT1BFUjoKLQkJaWYgKGRpc2MpIHsKLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzY2gtPmxvY2ssIGZsYWdzKTsKLQkJCS8qIEdldCBkZXZpY2Ugb3BlcmF0aW9uYWwgYWdhaW4uICovCi0JCQlkZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHNjaCk7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2gtPmxvY2ssIGZsYWdzKTsKLQkJfQotCQlyZXQgPSBzY2ggPyAwIDogY3NzX3Byb2JlX2RldmljZShzY2hpZCk7CisJY2FzZSBSRVBST0JFOgorCQlkZXZpY2VfdHJpZ2dlcl9yZXByb2JlKHNjaCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXQgPSAwOworCQlicmVhazsKIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNzc19ldmFsdWF0ZV9uZXdfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgaW50IHNsb3cpCit7CisJc3RydWN0IHNjaGliIHNjaGliOworCisJaWYgKCFzbG93KSB7CisJCS8qIFdpbGwgYmUgZG9uZSBvbiB0aGUgc2xvdyBwYXRoLiAqLworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJaWYgKHN0c2NoKHNjaGlkLCAmc2NoaWIpIHx8ICFzY2hpYi5wbWN3LmRudikgeworCQkvKiBVbnVzYWJsZSAtIGlnbm9yZS4gKi8KKwkJcmV0dXJuIDA7CisJfQorCUNJT19NU0dfRVZFTlQoNCwgIkV2YWx1YXRpbmcgc2NoaWQgMC4leC4lMDR4LCBldmVudCAlZCwgdW5rbm93biwgIgorCQkJICJzbG93IHBhdGguXG4iLCBzY2hpZC5zc2lkLCBzY2hpZC5zY2hfbm8sIENJT19PUEVSKTsKKworCXJldHVybiBjc3NfcHJvYmVfZGV2aWNlKHNjaGlkKTsKK30KKworc3RhdGljIGludCBjc3NfZXZhbHVhdGVfc3ViY2hhbm5lbChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgaW50IHNsb3cpCit7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKwlpbnQgcmV0OworCisJc2NoID0gZ2V0X3N1YmNoYW5uZWxfYnlfc2NoaWQoc2NoaWQpOworCWlmIChzY2gpIHsKKwkJcmV0ID0gY3NzX2V2YWx1YXRlX2tub3duX3N1YmNoYW5uZWwoc2NoLCBzbG93KTsKKwkJcHV0X2RldmljZSgmc2NoLT5kZXYpOworCX0gZWxzZQorCQlyZXQgPSBjc3NfZXZhbHVhdGVfbmV3X3N1YmNoYW5uZWwoc2NoaWQsIHNsb3cpOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggNTg1ZmEwNC4uNjg4OTQ1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC01Miw1MyArNTIsODEgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIEhvdHBsdWdnaW5nIGludGVyZmFjZSBmb3IgY2N3IGRldmljZXMuCi0gKiBIZWF2aWx5IG1vZGVsZWQgb24gcGNpIGFuZCB1c2IgaG90cGx1Zy4KLSAqLwotc3RhdGljIGludAotY2N3X3VldmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICoqZW52cCwgaW50IG51bV9lbnZwLAotCSAgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCisvKiBTdG9yZSBtb2RhbGlhcyBzdHJpbmcgZGVsaW1pdGVkIGJ5IHByZWZpeC9zdWZmaXggc3RyaW5nIGludG8gYnVmZmVyIHdpdGgKKyAqIHNwZWNpZmllZCBzaXplLiBSZXR1cm4gbGVuZ3RoIG9mIHJlc3VsdGluZyBzdHJpbmcgKGV4Y2x1ZGluZyB0cmFpbGluZyAnXDAnKQorICogZXZlbiBpZiBzdHJpbmcgZG9lc24ndCBmaXQgYnVmZmVyIChzbnByaW50ZiBzZW1hbnRpY3MpLiAqLworc3RhdGljIGludCBzbnByaW50X2FsaWFzKGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSBzdHJ1Y3QgY2N3X2RldmljZV9pZCAqaWQsIGNvbnN0IGNoYXIgKnN1ZmZpeCkKK3sKKwlpbnQgbGVuOworCisJbGVuID0gc25wcmludGYoYnVmLCBzaXplLCAiJXNjY3c6dCUwNFhtJTAyWCIsIHByZWZpeCwgaWQtPmN1X3R5cGUsCisJCSAgICAgICBpZC0+Y3VfbW9kZWwpOworCWlmIChsZW4gPiBzaXplKQorCQlyZXR1cm4gbGVuOworCWJ1ZiArPSBsZW47CisJc2l6ZSAtPSBsZW47CisKKwlpZiAoaWQtPmRldl90eXBlICE9IDApCisJCWxlbiArPSBzbnByaW50ZihidWYsIHNpemUsICJkdCUwNFhkbSUwMlglcyIsIGlkLT5kZXZfdHlwZSwKKwkJCQlpZC0+ZGV2X21vZGVsLCBzdWZmaXgpOworCWVsc2UKKwkJbGVuICs9IHNucHJpbnRmKGJ1Ziwgc2l6ZSwgImR0ZG0lcyIsIHN1ZmZpeCk7CisKKwlyZXR1cm4gbGVuOworfQorCisvKiBTZXQgdXAgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciBjY3cgZGV2aWNlIHVldmVudC4gUmV0dXJuIDAgb24gc3VjY2VzcywKKyAqIG5vbi16ZXJvIG90aGVyd2lzZS4gKi8KK3N0YXRpYyBpbnQgY2N3X3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCSAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gdG9fY2N3ZGV2KGRldik7CisJc3RydWN0IGNjd19kZXZpY2VfaWQgKmlkID0gJihjZGV2LT5pZCk7CiAJaW50IGkgPSAwOwotCWludCBsZW5ndGggPSAwOworCWludCBsZW47CiAKLQlpZiAoIWNkZXYpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogd2hhdCB3ZSB3YW50IHRvIHBhc3MgdG8gL3NiaW4vaG90cGx1ZyAqLwotCi0JZW52cFtpKytdID0gYnVmZmVyOwotCWxlbmd0aCArPSBzY25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSAtIGxlbmd0aCwgIkNVX1RZUEU9JTA0WCIsCi0JCQkgICBjZGV2LT5pZC5jdV90eXBlKTsKLQlpZiAoKGJ1ZmZlcl9zaXplIC0gbGVuZ3RoIDw9IDApIHx8IChpID49IG51bV9lbnZwKSkKKwkvKiBDVV9UWVBFPSAqLworCWxlbiA9IHNucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX3NpemUsICJDVV9UWVBFPSUwNFgiLCBpZC0+Y3VfdHlwZSkgKyAxOworCWlmIChsZW4gPiBidWZmZXJfc2l6ZSB8fCBpID49IG51bV9lbnZwKQogCQlyZXR1cm4gLUVOT01FTTsKLQkrK2xlbmd0aDsKLQlidWZmZXIgKz0gbGVuZ3RoOwotCiAJZW52cFtpKytdID0gYnVmZmVyOwotCWxlbmd0aCArPSBzY25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSAtIGxlbmd0aCwgIkNVX01PREVMPSUwMlgiLAotCQkJICAgY2Rldi0+aWQuY3VfbW9kZWwpOwotCWlmICgoYnVmZmVyX3NpemUgLSBsZW5ndGggPD0gMCkgfHwgKGkgPj0gbnVtX2VudnApKQorCWJ1ZmZlciArPSBsZW47CisJYnVmZmVyX3NpemUgLT0gbGVuOworCisJLyogQ1VfTU9ERUw9ICovCisJbGVuID0gc25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwgIkNVX01PREVMPSUwMlgiLCBpZC0+Y3VfbW9kZWwpICsgMTsKKwlpZiAobGVuID4gYnVmZmVyX3NpemUgfHwgaSA+PSBudW1fZW52cCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JKytsZW5ndGg7Ci0JYnVmZmVyICs9IGxlbmd0aDsKKwllbnZwW2krK10gPSBidWZmZXI7CisJYnVmZmVyICs9IGxlbjsKKwlidWZmZXJfc2l6ZSAtPSBsZW47CiAKIAkvKiBUaGUgbmV4dCB0d28gY2FuIGJlIHplcm8sIHRoYXQncyBvayBmb3IgdXMgKi8KLQllbnZwW2krK10gPSBidWZmZXI7Ci0JbGVuZ3RoICs9IHNjbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplIC0gbGVuZ3RoLCAiREVWX1RZUEU9JTA0WCIsCi0JCQkgICBjZGV2LT5pZC5kZXZfdHlwZSk7Ci0JaWYgKChidWZmZXJfc2l6ZSAtIGxlbmd0aCA8PSAwKSB8fCAoaSA+PSBudW1fZW52cCkpCisJLyogREVWX1RZUEU9ICovCisJbGVuID0gc25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwgIkRFVl9UWVBFPSUwNFgiLCBpZC0+ZGV2X3R5cGUpICsgMTsKKwlpZiAobGVuID4gYnVmZmVyX3NpemUgfHwgaSA+PSBudW1fZW52cCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JKytsZW5ndGg7Ci0JYnVmZmVyICs9IGxlbmd0aDsKKwllbnZwW2krK10gPSBidWZmZXI7CisJYnVmZmVyICs9IGxlbjsKKwlidWZmZXJfc2l6ZSAtPSBsZW47CiAKLQllbnZwW2krK10gPSBidWZmZXI7Ci0JbGVuZ3RoICs9IHNjbnByaW50ZihidWZmZXIsIGJ1ZmZlcl9zaXplIC0gbGVuZ3RoLCAiREVWX01PREVMPSUwMlgiLAotCQkJICAgY2Rldi0+aWQuZGV2X21vZGVsKTsKLQlpZiAoKGJ1ZmZlcl9zaXplIC0gbGVuZ3RoIDw9IDApIHx8IChpID49IG51bV9lbnZwKSkKKwkvKiBERVZfTU9ERUw9ICovCisJbGVuID0gc25wcmludGYoYnVmZmVyLCBidWZmZXJfc2l6ZSwgIkRFVl9NT0RFTD0lMDJYIiwKKwkJCSh1bnNpZ25lZCBjaGFyKSBpZC0+ZGV2X21vZGVsKSArIDE7CisJaWYgKGxlbiA+IGJ1ZmZlcl9zaXplIHx8IGkgPj0gbnVtX2VudnApCiAJCXJldHVybiAtRU5PTUVNOworCWVudnBbaSsrXSA9IGJ1ZmZlcjsKKwlidWZmZXIgKz0gbGVuOworCWJ1ZmZlcl9zaXplIC09IGxlbjsKKworCS8qIE1PREFMSUFTPSAgKi8KKwlsZW4gPSBzbnByaW50X2FsaWFzKGJ1ZmZlciwgYnVmZmVyX3NpemUsICJNT0RBTElBUz0iLCBpZCwgIiIpICsgMTsKKwlpZiAobGVuID4gYnVmZmVyX3NpemUgfHwgaSA+PSBudW1fZW52cCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZW52cFtpKytdID0gYnVmZmVyOworCWJ1ZmZlciArPSBsZW47CisJYnVmZmVyX3NpemUgLT0gbGVuOwogCiAJZW52cFtpXSA9IE5VTEw7CiAKQEAgLTI1MSwxNiArMjc5LDExIEBACiB7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSB0b19jY3dkZXYoZGV2KTsKIAlzdHJ1Y3QgY2N3X2RldmljZV9pZCAqaWQgPSAmKGNkZXYtPmlkKTsKLQlpbnQgcmV0OworCWludCBsZW47CiAKLQlyZXQgPSBzcHJpbnRmKGJ1ZiwgImNjdzp0JTA0WG0lMDJYIiwKLQkJCWlkLT5jdV90eXBlLCBpZC0+Y3VfbW9kZWwpOwotCWlmIChpZC0+ZGV2X3R5cGUgIT0gMCkKLQkJcmV0ICs9IHNwcmludGYoYnVmICsgcmV0LCAiZHQlMDRYZG0lMDJYXG4iLAotCQkJCWlkLT5kZXZfdHlwZSwgaWQtPmRldl9tb2RlbCk7Ci0JZWxzZQotCQlyZXQgKz0gc3ByaW50ZihidWYgKyByZXQsICJkdGRtXG4iKTsKLQlyZXR1cm4gcmV0OworCWxlbiA9IHNucHJpbnRfYWxpYXMoYnVmLCBQQUdFX1NJWkUsICIiLCBpZCwgIlxuIikgKyAxOworCisJcmV0dXJuIGxlbiA+IFBBR0VfU0laRSA/IFBBR0VfU0laRSA6IGxlbjsKIH0KIAogc3RhdGljIHNzaXplX3QKQEAgLTU1NiwxMiArNTc5LDExIEBACiAJCQkgc3RydWN0IGNjd19kZXZpY2UgKnNpYmxpbmcpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwotCXN0cnVjdCBtYXRjaF9kYXRhIGRhdGEgPSB7Ci0JCS5kZXZubyAgID0gZGV2bm8sCi0JCS5zc2lkICAgID0gc3NpZCwKLQkJLnNpYmxpbmcgPSBzaWJsaW5nLAotCX07CisJc3RydWN0IG1hdGNoX2RhdGEgZGF0YTsKIAorCWRhdGEuZGV2bm8gPSBkZXZubzsKKwlkYXRhLnNzaWQgPSBzc2lkOworCWRhdGEuc2libGluZyA9IHNpYmxpbmc7CiAJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZjY3dfYnVzX3R5cGUsIE5VTEwsICZkYXRhLCBtYXRjaF9kZXZubyk7CiAKIAlyZXR1cm4gZGV2ID8gdG9fY2N3ZGV2KGRldikgOiBOVUxMOwpAQCAtODM1LDEwICs4NTcsOCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJYXRvbWljX3NldCgmY2Rldi0+cHJpdmF0ZS0+b25vZmYsIDApOwotCWNkZXYtPmRldiA9IChzdHJ1Y3QgZGV2aWNlKSB7Ci0JCS5wYXJlbnQgPSAmc2NoLT5kZXYsCi0JCS5yZWxlYXNlID0gY2N3X2RldmljZV9yZWxlYXNlLAotCX07CisJY2Rldi0+ZGV2LnBhcmVudCA9ICZzY2gtPmRldjsKKwljZGV2LT5kZXYucmVsZWFzZSA9IGNjd19kZXZpY2VfcmVsZWFzZTsKIAlJTklUX0xJU1RfSEVBRCgmY2Rldi0+cHJpdmF0ZS0+a2lja193b3JrLmVudHJ5KTsKIAkvKiBEbyBmaXJzdCBoYWxmIG9mIGRldmljZV9yZWdpc3Rlci4gKi8KIAlkZXZpY2VfaW5pdGlhbGl6ZSgmY2Rldi0+ZGV2KTsKQEAgLTk3Nyw5ICs5OTcsNyBAQAogCWludCByYzsKIAogCS8qIEluaXRpYWxpemUgdGhlIGNjd19kZXZpY2Ugc3RydWN0dXJlLiAqLwotCWNkZXYtPmRldiA9IChzdHJ1Y3QgZGV2aWNlKSB7Ci0JCS5wYXJlbnQgPSAmc2NoLT5kZXYsCi0JfTsKKwljZGV2LT5kZXYucGFyZW50PSAmc2NoLT5kZXY7CiAJcmMgPSBpb19zdWJjaGFubmVsX3JlY29nKGNkZXYsIHNjaCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9mc20uYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCmluZGV4IGFjNmUwYzcuLmRhY2U0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2ZzbS5jCkBAIC0xNTIsNyArMTUyLDggQEAKIAkJaWYgKGNkZXYtPnByaXZhdGUtPmlyZXRyeSkgewogCQkJY2Rldi0+cHJpdmF0ZS0+aXJldHJ5LS07CiAJCQlyZXQgPSBjaW9faGFsdChzY2gpOwotCQkJcmV0dXJuIChyZXQgPT0gMCkgPyAtRUJVU1kgOiByZXQ7CisJCQlpZiAocmV0ICE9IC1FQlVTWSkKKwkJCQlyZXR1cm4gKHJldCA9PSAwKSA/IC1FQlVTWSA6IHJldDsKIAkJfQogCQkvKiBoYWx0IGlvIHVuc3VjY2Vzc2Z1bC4gKi8KIAkJY2Rldi0+cHJpdmF0ZS0+aXJldHJ5ID0gMjU1OwkvKiAyNTUgY2xlYXIgcmV0cmllcy4gKi8KQEAgLTIzMSwxMCArMjMyLDcgQEAKIAkgKi8KIAlvbGRfbHBtID0gc2NoLT5scG07CiAJc3RzY2goc2NoLT5zY2hpZCwgJnNjaC0+c2NoaWIpOwotCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBpbSAmCi0JCXNjaC0+c2NoaWIucG1jdy5wYW0gJgotCQlzY2gtPnNjaGliLnBtY3cucG9tICYKLQkJc2NoLT5vcG07CisJc2NoLT5scG0gPSBzY2gtPnNjaGliLnBtY3cucGFtICYgc2NoLT5vcG07CiAJLyogQ2hlY2sgc2luY2UgZGV2aWNlIG1heSBhZ2FpbiBoYXZlIGJlY29tZSBub3Qgb3BlcmF0aW9uYWwuICovCiAJaWYgKCFzY2gtPnNjaGliLnBtY3cuZG52KQogCQlzdGF0ZSA9IERFVl9TVEFURV9OT1RfT1BFUjsKQEAgLTI2NiwxMiArMjY0LDExIEBACiAJCQlub3RpZnkgPSAxOwogCQl9CiAJCS8qIGZpbGwgb3V0IHNlbnNlIGluZm9ybWF0aW9uICovCi0JCWNkZXYtPmlkID0gKHN0cnVjdCBjY3dfZGV2aWNlX2lkKSB7Ci0JCQkuY3VfdHlwZSAgID0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5jdV90eXBlLAotCQkJLmN1X21vZGVsICA9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuY3VfbW9kZWwsCi0JCQkuZGV2X3R5cGUgID0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfdHlwZSwKLQkJCS5kZXZfbW9kZWwgPSBjZGV2LT5wcml2YXRlLT5zZW5zZWlkLmRldl9tb2RlbCwKLQkJfTsKKwkJbWVtc2V0KCZjZGV2LT5pZCwgMCwgc2l6ZW9mKGNkZXYtPmlkKSk7CisJCWNkZXYtPmlkLmN1X3R5cGUgICA9IGNkZXYtPnByaXZhdGUtPnNlbnNlaWQuY3VfdHlwZTsKKwkJY2Rldi0+aWQuY3VfbW9kZWwgID0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5jdV9tb2RlbDsKKwkJY2Rldi0+aWQuZGV2X3R5cGUgID0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfdHlwZTsKKwkJY2Rldi0+aWQuZGV2X21vZGVsID0gY2Rldi0+cHJpdmF0ZS0+c2Vuc2VpZC5kZXZfbW9kZWw7CiAJCWlmIChub3RpZnkpIHsKIAkJCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX09GRkxJTkU7CiAJCQlpZiAoc2FtZV9kZXYpIHsKQEAgLTQ1NSw4ICs0NTIsOCBAQAogCQlyZXR1cm47CiAJfQogCS8qIFN0YXJ0IFBhdGggR3JvdXAgdmVyaWZpY2F0aW9uLiAqLwotCXNjaC0+dnBtID0gMDsJLyogU3RhcnQgd2l0aCBubyBwYXRoIGdyb3VwcyBzZXQuICovCiAJY2Rldi0+cHJpdmF0ZS0+c3RhdGUgPSBERVZfU1RBVEVfVkVSSUZZOworCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5ID0gMDsKIAljY3dfZGV2aWNlX3ZlcmlmeV9zdGFydChjZGV2KTsKIH0KIApAQCAtNTU2LDcgKzU1MywxOSBAQAogdm9pZAogY2N3X2RldmljZV92ZXJpZnlfZG9uZShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgaW50IGVycikKIHsKLQljZGV2LT5wcml2YXRlLT5mbGFncy5kb3ZlcmlmeSA9IDA7CisJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKKworCXNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CisJLyogVXBkYXRlIHNjaGliIC0gcG9tIG1heSBoYXZlIGNoYW5nZWQuICovCisJc3RzY2goc2NoLT5zY2hpZCwgJnNjaC0+c2NoaWIpOworCS8qIFVwZGF0ZSBscG0gd2l0aCB2ZXJpZmllZCBwYXRoIG1hc2suICovCisJc2NoLT5scG0gPSBzY2gtPnZwbTsKKwkvKiBSZXBlYXQgcGF0aCB2ZXJpZmljYXRpb24/ICovCisJaWYgKGNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5KSB7CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5ID0gMDsKKwkJY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoY2Rldik7CisJCXJldHVybjsKKwl9CiAJc3dpdGNoIChlcnIpIHsKIAljYXNlIC1FT1BOT1RTVVBQOiAvKiBwYXRoIGdyb3VwaW5nIG5vdCBzdXBwb3J0ZWQsIGp1c3Qgc2V0IG9ubGluZS4gKi8KIAkJY2Rldi0+cHJpdmF0ZS0+b3B0aW9ucy5wZ3JvdXAgPSAwOwpAQCAtNTY1LDEyICs1NzQsMTAgQEAKIAkJLyogRGVsaXZlciBmYWtlIGlyYiB0byBkZXZpY2UgZHJpdmVyLCBpZiBuZWVkZWQuICovCiAJCWlmIChjZGV2LT5wcml2YXRlLT5mbGFncy5mYWtlX2lyYikgewogCQkJbWVtc2V0KCZjZGV2LT5wcml2YXRlLT5pcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7Ci0JCQljZGV2LT5wcml2YXRlLT5pcmIuc2NzdyA9IChzdHJ1Y3Qgc2NzdykgewotCQkJCS5jYyA9IDEsCi0JCQkJLmZjdGwgPSBTQ1NXX0ZDVExfU1RBUlRfRlVOQywKLQkJCQkuYWN0bCA9IFNDU1dfQUNUTF9TVEFSVF9QRU5ELAotCQkJCS5zdGN0bCA9IFNDU1dfU1RDVExfU1RBVFVTX1BFTkQsCi0JCQl9OworCQkJY2Rldi0+cHJpdmF0ZS0+aXJiLnNjc3cuY2MgPSAxOworCQkJY2Rldi0+cHJpdmF0ZS0+aXJiLnNjc3cuZmN0bCA9IFNDU1dfRkNUTF9TVEFSVF9GVU5DOworCQkJY2Rldi0+cHJpdmF0ZS0+aXJiLnNjc3cuYWN0bCA9IFNDU1dfQUNUTF9TVEFSVF9QRU5EOworCQkJY2Rldi0+cHJpdmF0ZS0+aXJiLnNjc3cuc3RjdGwgPSBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EOwogCQkJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MuZmFrZV9pcmIgPSAwOwogCQkJaWYgKGNkZXYtPmhhbmRsZXIpCiAJCQkJY2Rldi0+aGFuZGxlcihjZGV2LCBjZGV2LT5wcml2YXRlLT5pbnRwYXJtLApAQCAtNjE2LDYgKzYyMyw3IEBACiAJaWYgKCFjZGV2LT5wcml2YXRlLT5vcHRpb25zLnBncm91cCkgewogCQkvKiBTdGFydCBpbml0aWFsIHBhdGggdmVyaWZpY2F0aW9uLiAqLwogCQljZGV2LT5wcml2YXRlLT5zdGF0ZSA9IERFVl9TVEFURV9WRVJJRlk7CisJCWNkZXYtPnByaXZhdGUtPmZsYWdzLmRvdmVyaWZ5ID0gMDsKIAkJY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoY2Rldik7CiAJCXJldHVybiAwOwogCX0KQEAgLTY2Miw3ICs2NzAsNiBAQAogCS8qIEFyZSB3ZSBkb2luZyBwYXRoIGdyb3VwaW5nPyAqLwogCWlmICghY2Rldi0+cHJpdmF0ZS0+b3B0aW9ucy5wZ3JvdXApIHsKIAkJLyogTm8sIHNldCBzdGF0ZSBvZmZsaW5lIGltbWVkaWF0ZWx5LiAqLwotCQlzY2gtPnZwbSA9IDA7CiAJCWNjd19kZXZpY2VfZG9uZShjZGV2LCBERVZfU1RBVEVfT0ZGTElORSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTc3MSw2ICs3NzgsNyBAQAogCXN0c2NoKHNjaC0+c2NoaWQsICZzY2gtPnNjaGliKTsKIAogCWlmIChzY2gtPnNjaGliLnNjc3cuYWN0bCAhPSAwIHx8CisJICAgIChzY2gtPnNjaGliLnNjc3cuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSB8fAogCSAgICAoY2Rldi0+cHJpdmF0ZS0+aXJiLnNjc3cuc3RjdGwgJiBTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EKSkgewogCQkvKgogCQkgKiBObyBmaW5hbCBzdGF0dXMgeWV0IG9yIGZpbmFsIHN0YXR1cyBub3QgeWV0IGRlbGl2ZXJlZApAQCAtNzgyLDYgKzc5MCw3IEBACiAJfQogCS8qIERldmljZSBpcyBpZGxlLCB3ZSBjYW4gZG8gdGhlIHBhdGggdmVyaWZpY2F0aW9uLiAqLwogCWNkZXYtPnByaXZhdGUtPnN0YXRlID0gREVWX1NUQVRFX1ZFUklGWTsKKwljZGV2LT5wcml2YXRlLT5mbGFncy5kb3ZlcmlmeSA9IDA7CiAJY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoY2Rldik7CiB9CiAKQEAgLTEwNDQsOSArMTA1Myw5IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1jY3dfZGV2aWNlX3dhaXQ0aW9fdmVyaWZ5KHN0cnVjdCBjY3dfZGV2aWNlICpjZGV2LCBlbnVtIGRldl9ldmVudCBkZXZfZXZlbnQpCitjY3dfZGV2aWNlX2RlbGF5X3ZlcmlmeShzdHJ1Y3QgY2N3X2RldmljZSAqY2RldiwgZW51bSBkZXZfZXZlbnQgZGV2X2V2ZW50KQogewotCS8qIFdoZW4gdGhlIEkvTyBoYXMgdGVybWluYXRlZCwgd2UgaGF2ZSB0byBzdGFydCB2ZXJpZmljYXRpb24uICovCisJLyogU3RhcnQgdmVyaWZpY2F0aW9uIGFmdGVyIGN1cnJlbnQgdGFzayBmaW5pc2hlZC4gKi8KIAljZGV2LT5wcml2YXRlLT5mbGFncy5kb3ZlcmlmeSA9IDE7CiB9CiAKQEAgLTExMTIsMTAgKzExMjEsNyBAQAogCSAqIFRoZSBwaW0sIHBhbSwgcG9tIHZhbHVlcyBtYXkgbm90IGJlIGFjY3VyYXRlLCBidXQgdGhleSBhcmUgdGhlIGJlc3QKIAkgKiB3ZSBoYXZlIGJlZm9yZSBwZXJmb3JtaW5nIGRldmljZSBzZWxlY3Rpb24gOi8KIAkgKi8KLQlzY2gtPmxwbSA9IHNjaC0+c2NoaWIucG1jdy5waW0gJgotCQlzY2gtPnNjaGliLnBtY3cucGFtICYKLQkJc2NoLT5zY2hpYi5wbWN3LnBvbSAmCi0JCXNjaC0+b3BtOworCXNjaC0+bHBtID0gc2NoLT5zY2hpYi5wbWN3LnBhbSAmIHNjaC0+b3BtOwogCS8qIFJlLXNldCBzb21lIGJpdHMgaW4gdGhlIHBtY3cgdGhhdCB3ZXJlIGxvc3QuICovCiAJc2NoLT5zY2hpYi5wbWN3LmlzYyA9IDM7CiAJc2NoLT5zY2hpYi5wbWN3LmNzZW5zZSA9IDE7CkBAIC0xMjM5LDcgKzEyNDUsNyBAQAogCQlbREVWX0VWRU5UX05PVE9QRVJdCT0gY2N3X2RldmljZV9vbmxpbmVfbm90b3BlciwKIAkJW0RFVl9FVkVOVF9JTlRFUlJVUFRdCT0gY2N3X2RldmljZV92ZXJpZnlfaXJxLAogCQlbREVWX0VWRU5UX1RJTUVPVVRdCT0gY2N3X2RldmljZV9vbm9mZl90aW1lb3V0LAotCQlbREVWX0VWRU5UX1ZFUklGWV0JPSBjY3dfZGV2aWNlX25vcCwKKwkJW0RFVl9FVkVOVF9WRVJJRlldCT0gY2N3X2RldmljZV9kZWxheV92ZXJpZnksCiAJfSwKIAlbREVWX1NUQVRFX09OTElORV0gPSB7CiAJCVtERVZfRVZFTlRfTk9UT1BFUl0JPSBjY3dfZGV2aWNlX29ubGluZV9ub3RvcGVyLApAQCAtMTI4Miw3ICsxMjg4LDcgQEAKIAkJW0RFVl9FVkVOVF9OT1RPUEVSXQk9IGNjd19kZXZpY2Vfb25saW5lX25vdG9wZXIsCiAJCVtERVZfRVZFTlRfSU5URVJSVVBUXQk9IGNjd19kZXZpY2Vfd2FpdDRpb19pcnEsCiAJCVtERVZfRVZFTlRfVElNRU9VVF0JPSBjY3dfZGV2aWNlX3dhaXQ0aW9fdGltZW91dCwKLQkJW0RFVl9FVkVOVF9WRVJJRlldCT0gY2N3X2RldmljZV93YWl0NGlvX3ZlcmlmeSwKKwkJW0RFVl9FVkVOVF9WRVJJRlldCT0gY2N3X2RldmljZV9kZWxheV92ZXJpZnksCiAJfSwKIAlbREVWX1NUQVRFX1FVSUVTQ0VdID0gewogCQlbREVWX0VWRU5UX05PVE9QRVJdCT0gY2N3X2RldmljZV9xdWllc2NlX2RvbmUsCkBAIC0xMjk1LDcgKzEzMDEsNyBAQAogCQlbREVWX0VWRU5UX05PVE9QRVJdCT0gY2N3X2RldmljZV9ub3AsCiAJCVtERVZfRVZFTlRfSU5URVJSVVBUXQk9IGNjd19kZXZpY2Vfc3RhcnRfaWQsCiAJCVtERVZfRVZFTlRfVElNRU9VVF0JPSBjY3dfZGV2aWNlX2J1ZywKLQkJW0RFVl9FVkVOVF9WRVJJRlldCT0gY2N3X2RldmljZV9ub3AsCisJCVtERVZfRVZFTlRfVkVSSUZZXQk9IGNjd19kZXZpY2Vfc3RhcnRfaWQsCiAJfSwKIAlbREVWX1NUQVRFX0RJU0NPTk5FQ1RFRF9TRU5TRV9JRF0gPSB7CiAJCVtERVZfRVZFTlRfTk9UT1BFUl0JPSBjY3dfZGV2aWNlX3JlY29nX25vdG9wZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9vcHMuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCmluZGV4IGE2MDEyNDIuLjkzYTg5N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX29wcy5jCkBAIC05Niw2ICs5NiwxMiBAQAogCXJldCA9IGNpb19zZXRfb3B0aW9ucyAoc2NoLCBmbGFncyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKKwkvKiBBZGp1c3QgcmVxdWVzdGVkIHBhdGggbWFzayB0byBleGNsdWRlZCB2YXJpZWQgb2ZmIHBhdGhzLiAqLworCWlmIChscG0pIHsKKwkJbHBtICY9IHNjaC0+b3BtOworCQlpZiAobHBtID09IDApCisJCQlyZXR1cm4gLUVBQ0NFUzsKKwl9CiAJcmV0ID0gY2lvX3N0YXJ0X2tleSAoc2NoLCBjcGEsIGxwbSwga2V5KTsKIAlpZiAocmV0ID09IDApCiAJCWNkZXYtPnByaXZhdGUtPmludHBhcm0gPSBpbnRwYXJtOwpAQCAtMjUwLDcgKzI1Niw3IEBACiAJaWYgKCFzY2gpCiAJCXJldHVybiAwOwogCWVsc2UKLQkJcmV0dXJuIHNjaC0+dnBtOworCQlyZXR1cm4gc2NoLT5scG07CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yNjMsNiArMjY5LDkgQEAKIAkvKiBBYnVzZSBpbnRwYXJtIGZvciBlcnJvciByZXBvcnRpbmcuICovCiAJaWYgKElTX0VSUihpcmIpKQogCQljZGV2LT5wcml2YXRlLT5pbnRwYXJtID0gLUVJTzsKKwllbHNlIGlmIChpcmItPnNjc3cuY2MgPT0gMSkKKwkJLyogUmV0cnkgZm9yIGRlZmVycmVkIGNvbmRpdGlvbiBjb2RlLiAqLworCQljZGV2LT5wcml2YXRlLT5pbnRwYXJtID0gLUVBR0FJTjsKIAllbHNlIGlmICgoaXJiLT5zY3N3LmRzdGF0ICE9CiAJCSAgKERFVl9TVEFUX0NITl9FTkR8REVWX1NUQVRfREVWX0VORCkpIHx8CiAJCSAoaXJiLT5zY3N3LmNzdGF0ICE9IDApKSB7CkBAIC0zMDEsNyArMzEwLDcgQEAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwogCWRvIHsKIAkJcmV0ID0gY2lvX3N0YXJ0IChzY2gsIGNjdywgbHBtKTsKLQkJaWYgKChyZXQgPT0gLUVCVVNZKSB8fCAocmV0ID09IC1FQUNDRVMpKSB7CisJCWlmIChyZXQgPT0gLUVCVVNZKSB7CiAJCQkvKiBUcnkgYWdhaW4gbGF0ZXIuICovCiAJCQlzcGluX3VubG9ja19pcnEoJnNjaC0+bG9jayk7CiAJCQltc2xlZXAoMTApOwpAQCAtNDMwLDYgKzQzOSwxMyBAQAogCWlmICghY2l3IHx8IGNpdy0+Y21kID09IDApCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAorCS8qIEFkanVzdCByZXF1ZXN0ZWQgcGF0aCBtYXNrIHRvIGV4Y2x1ZGVkIHZhcmllZCBvZmYgcGF0aHMuICovCisJaWYgKGxwbSkgeworCQlscG0gJj0gc2NoLT5vcG07CisJCWlmIChscG0gPT0gMCkKKwkJCXJldHVybiAtRUFDQ0VTOworCX0KKwogCXJjZF9jY3cgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2N3MSksIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAlpZiAoIXJjZF9jY3cpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfcGdpZC5jCmluZGV4IDMyNjEwZmQuLjhjYTJkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX3BnaWQuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9wZ2lkLmMKQEAgLTI0LDYgKzI0LDIxIEBACiAjaW5jbHVkZSAiaW9hc20uaCIKIAogLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCB0byBkZWNpZGUgd2hldGhlciBhbgorICogb3BlcmF0aW9uIHNob3VsZCBiZSB0cmllZCBhZ2Fpbi4KKyAqLworc3RhdGljIGludCBfX2Njd19kZXZpY2Vfc2hvdWxkX3JldHJ5KHN0cnVjdCBzY3N3ICpzY3N3KQoreworCS8qIENDIGlzIG9ubHkgdmFsaWQgaWYgc3RhcnQgZnVuY3Rpb24gYml0IGlzIHNldC4gKi8KKwlpZiAoKHNjc3ctPmZjdGwgJiBTQ1NXX0ZDVExfU1RBUlRfRlVOQykgJiYgc2Nzdy0+Y2MgPT0gMSkKKwkJcmV0dXJuIDE7CisJLyogTm8gbW9yZSBhY3Rpdml0eS4gRm9yIHNlbnNlIGFuZCBzZXQgUEdJRCB3ZSBzdHViYm9ybmx5IHRyeSBhZ2Fpbi4gKi8KKwlpZiAoIXNjc3ctPmFjdGwpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCisvKgogICogU3RhcnQgU2Vuc2UgUGF0aCBHcm91cCBJRCBoZWxwZXIgZnVuY3Rpb24uIFVzZWQgaW4gY2N3X2RldmljZV9yZWNvZwogICogYW5kIGNjd19kZXZpY2Vfc2Vuc2VfcGdpZC4KICAqLwpAQCAtMTU1LDEwICsxNzAsMTAgQEAKIAlpbnQgcmV0OwogCiAJaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7Ci0JLyogUmV0cnkgc2Vuc2UgcGdpZCBmb3IgY2M9MS4gKi8KKwogCWlmIChpcmItPnNjc3cuc3RjdGwgPT0KIAkgICAgKFNDU1dfU1RDVExfU1RBVFVTX1BFTkQgfCBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUykpIHsKLQkJaWYgKGlyYi0+c2Nzdy5jYyA9PSAxKSB7CisJCWlmIChfX2Njd19kZXZpY2Vfc2hvdWxkX3JldHJ5KCZpcmItPnNjc3cpKSB7CiAJCQlyZXQgPSBfX2Njd19kZXZpY2Vfc2Vuc2VfcGdpZF9zdGFydChjZGV2KTsKIAkJCWlmIChyZXQgJiYgcmV0ICE9IC1FQlVTWSkKIAkJCQljY3dfZGV2aWNlX3NlbnNlX3BnaWRfZG9uZShjZGV2LCByZXQpOwpAQCAtMjMwLDE4ICsyNDUsMTcgQEAKIAltZW1zZXQoJmNkZXYtPnByaXZhdGUtPmlyYiwgMCwgc2l6ZW9mKHN0cnVjdCBpcmIpKTsKIAogCS8qIFRyeSBtdWx0aXBsZSB0aW1lcy4gKi8KLQlyZXQgPSAtRU5PREVWOworCXJldCA9IC1FQUNDRVM7CiAJaWYgKGNkZXYtPnByaXZhdGUtPmlyZXRyeSA+IDApIHsKIAkJY2Rldi0+cHJpdmF0ZS0+aXJldHJ5LS07CiAJCXJldCA9IGNpb19zdGFydCAoc2NoLCBjZGV2LT5wcml2YXRlLT5pY2N3cywKIAkJCQkgY2Rldi0+cHJpdmF0ZS0+aW1hc2spOwotCQkvKiByZXQgaXMgMCwgLUVCVVNZLCAtRUFDQ0VTIG9yIC1FTk9ERVYgKi8KLQkJaWYgKChyZXQgIT0gLUVBQ0NFUykgJiYgKHJldCAhPSAtRU5PREVWKSkKKwkJLyogV2UgZXhwZWN0IGFuIGludGVycnVwdCBpbiBjYXNlIG9mIHN1Y2Nlc3Mgb3IgYnVzeQorCQkgKiBpbmRpY2F0aW9uLiAqLworCQlpZiAoKHJldCA9PSAwKSB8fCAocmV0ID09IC1FQlVTWSkpCiAJCQlyZXR1cm4gcmV0OwogCX0KLQkvKiBQR0lEIGNvbW1hbmQgZmFpbGVkIG9uIHRoaXMgcGF0aC4gU3dpdGNoIGl0IG9mZi4gKi8KLQlzY2gtPmxwbSAmPSB+Y2Rldi0+cHJpdmF0ZS0+aW1hc2s7Ci0Jc2NoLT52cG0gJj0gfmNkZXYtPnByaXZhdGUtPmltYXNrOworCS8qIFBHSUQgY29tbWFuZCBmYWlsZWQgb24gdGhpcyBwYXRoLiAqLwogCUNJT19NU0dfRVZFTlQoMiwgIlNQSUQgLSBEZXZpY2UgJTA0eCBvbiBTdWJjaGFubmVsICIKIAkJICAgICAgIjAuJXguJTA0eCwgbHBtICUwMlgsIGJlY2FtZSAnbm90IG9wZXJhdGlvbmFsJ1xuIiwKIAkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2bm8sIHNjaC0+c2NoaWQuc3NpZCwKQEAgLTI3MSwxOCArMjg1LDE3IEBACiAJbWVtc2V0KCZjZGV2LT5wcml2YXRlLT5pcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CiAKIAkvKiBUcnkgbXVsdGlwbGUgdGltZXMuICovCi0JcmV0ID0gLUVOT0RFVjsKKwlyZXQgPSAtRUFDQ0VTOwogCWlmIChjZGV2LT5wcml2YXRlLT5pcmV0cnkgPiAwKSB7CiAJCWNkZXYtPnByaXZhdGUtPmlyZXRyeS0tOwogCQlyZXQgPSBjaW9fc3RhcnQgKHNjaCwgY2Rldi0+cHJpdmF0ZS0+aWNjd3MsCiAJCQkJIGNkZXYtPnByaXZhdGUtPmltYXNrKTsKLQkJLyogcmV0IGlzIDAsIC1FQlVTWSwgLUVBQ0NFUyBvciAtRU5PREVWICovCi0JCWlmICgocmV0ICE9IC1FQUNDRVMpICYmIChyZXQgIT0gLUVOT0RFVikpCisJCS8qIFdlIGV4cGVjdCBhbiBpbnRlcnJ1cHQgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIGJ1c3kKKwkJICogaW5kaWNhdGlvbi4gKi8KKwkJaWYgKChyZXQgPT0gMCkgfHwgKHJldCA9PSAtRUJVU1kpKQogCQkJcmV0dXJuIHJldDsKIAl9Ci0JLyogbm9wIGNvbW1hbmQgZmFpbGVkIG9uIHRoaXMgcGF0aC4gU3dpdGNoIGl0IG9mZi4gKi8KLQlzY2gtPmxwbSAmPSB+Y2Rldi0+cHJpdmF0ZS0+aW1hc2s7Ci0Jc2NoLT52cG0gJj0gfmNkZXYtPnByaXZhdGUtPmltYXNrOworCS8qIG5vcCBjb21tYW5kIGZhaWxlZCBvbiB0aGlzIHBhdGguICovCiAJQ0lPX01TR19FVkVOVCgyLCAiTk9QIC0gRGV2aWNlICUwNHggb24gU3ViY2hhbm5lbCAiCiAJCSAgICAgICIwLiV4LiUwNHgsIGxwbSAlMDJYLCBiZWNhbWUgJ25vdCBvcGVyYXRpb25hbCdcbiIsCiAJCSAgICAgIGNkZXYtPnByaXZhdGUtPmRldm5vLCBzY2gtPnNjaGlkLnNzaWQsCkBAIC0zNTcsMjcgKzM3MCwzMiBAQAogX19jY3dfZGV2aWNlX3ZlcmlmeV9zdGFydChzdHJ1Y3QgY2N3X2RldmljZSAqY2RldikKIHsKIAlzdHJ1Y3Qgc3ViY2hhbm5lbCAqc2NoOwotCV9fdTggaW1hc2ssIGZ1bmM7CisJX191OCBmdW5jOwogCWludCByZXQ7CiAKIAlzY2ggPSB0b19zdWJjaGFubmVsKGNkZXYtPmRldi5wYXJlbnQpOwotCXdoaWxlIChzY2gtPnZwbSAhPSBzY2gtPmxwbSkgewotCQkvKiBGaW5kIGZpcnN0IHVuZXF1YWwgYml0IGluIHZwbSB2cy4gbHBtICovCi0JCWZvciAoaW1hc2sgPSAweDgwOyBpbWFzayAhPSAwOyBpbWFzayA+Pj0gMSkKLQkJCWlmICgoc2NoLT52cG0gJiBpbWFzaykgIT0gKHNjaC0+bHBtICYgaW1hc2spKQotCQkJCWJyZWFrOwotCQljZGV2LT5wcml2YXRlLT5pbWFzayA9IGltYXNrOworCS8qIFJlcGVhdCBmb3IgYWxsIHBhdGhzLiAqLworCWZvciAoOyBjZGV2LT5wcml2YXRlLT5pbWFzazsgY2Rldi0+cHJpdmF0ZS0+aW1hc2sgPj49IDEsCisJCQkJICAgICBjZGV2LT5wcml2YXRlLT5pcmV0cnkgPSA1KSB7CisJCWlmICgoY2Rldi0+cHJpdmF0ZS0+aW1hc2sgJiBzY2gtPnNjaGliLnBtY3cucGFtKSA9PSAwKQorCQkJLyogUGF0aCBub3QgYXZhaWxhYmxlLCB0cnkgbmV4dC4gKi8KKwkJCWNvbnRpbnVlOwogCQlpZiAoY2Rldi0+cHJpdmF0ZS0+b3B0aW9ucy5wZ3JvdXApIHsKLQkJCWZ1bmMgPSAoc2NoLT52cG0gJiBpbWFzaykgPwotCQkJCVNQSURfRlVOQ19SRVNJR04gOiBTUElEX0ZVTkNfRVNUQUJMSVNIOworCQkJaWYgKHNjaC0+b3BtICYgY2Rldi0+cHJpdmF0ZS0+aW1hc2spCisJCQkJZnVuYyA9IFNQSURfRlVOQ19FU1RBQkxJU0g7CisJCQllbHNlCisJCQkJZnVuYyA9IFNQSURfRlVOQ19SRVNJR047CiAJCQlyZXQgPSBfX2Njd19kZXZpY2VfZG9fcGdpZChjZGV2LCBmdW5jKTsKIAkJfSBlbHNlCiAJCQlyZXQgPSBfX2Njd19kZXZpY2VfZG9fbm9wKGNkZXYpOworCQkvKiBXZSBleHBlY3QgYW4gaW50ZXJydXB0IGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBidXN5CisJCSAqIGluZGljYXRpb24uICovCiAJCWlmIChyZXQgPT0gMCB8fCByZXQgPT0gLUVCVVNZKQogCQkJcmV0dXJuOwotCQljZGV2LT5wcml2YXRlLT5pcmV0cnkgPSA1OworCQkvKiBQZXJtYW5lbnQgcGF0aCBmYWlsdXJlLCB0cnkgbmV4dC4gKi8KIAl9Ci0JY2N3X2RldmljZV92ZXJpZnlfZG9uZShjZGV2LCAoc2NoLT5scG0gIT0gMCkgPyAwIDogLUVOT0RFVik7CisJLyogRG9uZSB3aXRoIGFsbCBwYXRocy4gKi8KKwljY3dfZGV2aWNlX3ZlcmlmeV9kb25lKGNkZXYsIChzY2gtPnZwbSAhPSAwKSA/IDAgOiAtRU5PREVWKTsKIH0KIAkJCiAvKgpAQCAtMzkxLDEwICs0MDksMTAgQEAKIAlpbnQgcmV0OwogCiAJaXJiID0gKHN0cnVjdCBpcmIgKikgX19MQ19JUkI7Ci0JLyogUmV0cnkgc2V0IHBnaWQgZm9yIGNjPTEuICovCisKIAlpZiAoaXJiLT5zY3N3LnN0Y3RsID09CiAJICAgIChTQ1NXX1NUQ1RMX1NUQVRVU19QRU5EIHwgU0NTV19TVENUTF9BTEVSVF9TVEFUVVMpKSB7Ci0JCWlmIChpcmItPnNjc3cuY2MgPT0gMSkKKwkJaWYgKF9fY2N3X2RldmljZV9zaG91bGRfcmV0cnkoJmlyYi0+c2NzdykpCiAJCQlfX2Njd19kZXZpY2VfdmVyaWZ5X3N0YXJ0KGNkZXYpOwogCQlyZXR1cm47CiAJfQpAQCAtNDA2LDE0ICs0MjQsMTQgQEAKIAllbHNlCiAJCXJldCA9IF9fY2N3X2RldmljZV9jaGVja19ub3AoY2Rldik7CiAJbWVtc2V0KCZjZGV2LT5wcml2YXRlLT5pcmIsIDAsIHNpemVvZihzdHJ1Y3QgaXJiKSk7CisKIAlzd2l0Y2ggKHJldCkgewogCS8qIDAsIC1FVElNRSwgLUVBR0FJTiwgLUVPUE5PVFNVUFAgb3IgLUVBQ0NFUyAqLwogCWNhc2UgMDoKLQkJLyogRXN0YWJsaXNoIG9yIFJlc2lnbiBQYXRoIEdyb3VwIGRvbmUuIFVwZGF0ZSB2cG0uICovCi0JCWlmICgoc2NoLT5scG0gJiBjZGV2LT5wcml2YXRlLT5pbWFzaykgIT0gMCkKLQkJCXNjaC0+dnBtIHw9IGNkZXYtPnByaXZhdGUtPmltYXNrOwotCQllbHNlCi0JCQlzY2gtPnZwbSAmPSB+Y2Rldi0+cHJpdmF0ZS0+aW1hc2s7CisJCS8qIFBhdGggdmVyaWZpY2F0aW9uIGNjdyBmaW5pc2hlZCBzdWNjZXNzZnVsbHksIHVwZGF0ZSBscG0uICovCisJCXNjaC0+dnBtIHw9IHNjaC0+b3BtICYgY2Rldi0+cHJpdmF0ZS0+aW1hc2s7CisJCS8qIEdvIG9uIHdpdGggbmV4dCBwYXRoLiAqLworCQljZGV2LT5wcml2YXRlLT5pbWFzayA+Pj0gMTsKIAkJY2Rldi0+cHJpdmF0ZS0+aXJldHJ5ID0gNTsKIAkJX19jY3dfZGV2aWNlX3ZlcmlmeV9zdGFydChjZGV2KTsKIAkJYnJlYWs7CkBAIC00MjYsNiArNDQ0LDEwIEBACiAJCQljZGV2LT5wcml2YXRlLT5vcHRpb25zLnBncm91cCA9IDA7CiAJCWVsc2UKIAkJCWNkZXYtPnByaXZhdGUtPmZsYWdzLnBnaWRfc2luZ2xlID0gMTsKKwkJLyogUmV0cnkgKi8KKwkJc2NoLT52cG0gPSAwOworCQljZGV2LT5wcml2YXRlLT5pbWFzayA9IDB4ODA7CisJCWNkZXYtPnByaXZhdGUtPmlyZXRyeSA9IDU7CiAJCS8qIGZhbGwgdGhyb3VnaC4gKi8KIAljYXNlIC1FQUdBSU46CQkvKiBUcnkgYWdhaW4uICovCiAJCV9fY2N3X2RldmljZV92ZXJpZnlfc3RhcnQoY2Rldik7CkBAIC00MzQsOCArNDU2LDcgQEAKIAkJY2N3X2RldmljZV92ZXJpZnlfZG9uZShjZGV2LCAtRVRJTUUpOwogCQlicmVhazsKIAljYXNlIC1FQUNDRVM6CQkvKiBjaGFubmVsIGlzIG5vdCBvcGVyYXRpb25hbC4gKi8KLQkJc2NoLT5scG0gJj0gfmNkZXYtPnByaXZhdGUtPmltYXNrOwotCQlzY2gtPnZwbSAmPSB+Y2Rldi0+cHJpdmF0ZS0+aW1hc2s7CisJCWNkZXYtPnByaXZhdGUtPmltYXNrID4+PSAxOwogCQljZGV2LT5wcml2YXRlLT5pcmV0cnkgPSA1OwogCQlfX2Njd19kZXZpY2VfdmVyaWZ5X3N0YXJ0KGNkZXYpOwogCQlicmVhazsKQEAgLTQ0OCwxOSArNDY5LDE3IEBACiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaCA9IHRvX3N1YmNoYW5uZWwoY2Rldi0+ZGV2LnBhcmVudCk7CiAKIAljZGV2LT5wcml2YXRlLT5mbGFncy5wZ2lkX3NpbmdsZSA9IDA7CisJY2Rldi0+cHJpdmF0ZS0+aW1hc2sgPSAweDgwOwogCWNkZXYtPnByaXZhdGUtPmlyZXRyeSA9IDU7Ci0JLyoKLQkgKiBVcGRhdGUgc2NoLT5scG0gd2l0aCBjdXJyZW50IHZhbHVlcyB0byBjYXRjaCBwYXRocyBiZWNvbWluZwotCSAqIGF2YWlsYWJsZSBhZ2Fpbi4KLQkgKi8KKworCS8qIFN0YXJ0IHdpdGggZW1wdHkgdnBtLiAqLworCXNjaC0+dnBtID0gMDsKKworCS8qIEdldCBjdXJyZW50IHBhbS4gKi8KIAlpZiAoc3RzY2goc2NoLT5zY2hpZCwgJnNjaC0+c2NoaWIpKSB7CiAJCWNjd19kZXZpY2VfdmVyaWZ5X2RvbmUoY2RldiwgLUVOT0RFVik7CiAJCXJldHVybjsKIAl9Ci0Jc2NoLT5scG0gPSBzY2gtPnNjaGliLnBtY3cucGltICYKLQkJc2NoLT5zY2hpYi5wbWN3LnBhbSAmCi0JCXNjaC0+c2NoaWIucG1jdy5wb20gJgotCQlzY2gtPm9wbTsKIAlfX2Njd19kZXZpY2VfdmVyaWZ5X3N0YXJ0KGNkZXYpOwogfQogCkBAIC00OTQsMTAgKzUxMywxMCBAQAogCWludCByZXQ7CiAKIAlpcmIgPSAoc3RydWN0IGlyYiAqKSBfX0xDX0lSQjsKLQkvKiBSZXRyeSBzZXQgcGdpZCBmb3IgY2M9MS4gKi8KKwogCWlmIChpcmItPnNjc3cuc3RjdGwgPT0KIAkgICAgKFNDU1dfU1RDVExfU1RBVFVTX1BFTkQgfCBTQ1NXX1NUQ1RMX0FMRVJUX1NUQVRVUykpIHsKLQkJaWYgKGlyYi0+c2Nzdy5jYyA9PSAxKQorCQlpZiAoX19jY3dfZGV2aWNlX3Nob3VsZF9yZXRyeSgmaXJiLT5zY3N3KSkKIAkJCV9fY2N3X2RldmljZV9kaXNiYW5kX3N0YXJ0KGNkZXYpOwogCQlyZXR1cm47CiAJfQpAQCAtNTA5LDcgKzUyOCw2IEBACiAJc3dpdGNoIChyZXQpIHsKIAkvKiAwLCAtRVRJTUUsIC1FQUdBSU4sIC1FT1BOT1RTVVBQIG9yIC1FQUNDRVMgKi8KIAljYXNlIDA6CQkJLyogZGlzYmFuZCBzdWNjZXNzZnVsLiAqLwotCQlzY2gtPnZwbSA9IDA7CiAJCWNjd19kZXZpY2VfZGlzYmFuZF9kb25lKGNkZXYsIHJldCk7CiAJCWJyZWFrOwogCWNhc2UgLUVPUE5PVFNVUFA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jCmluZGV4IDdjOTNhODcuLmNkZTgyMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIHN0YXRpYyBpbmxpbmUgX191NjQgCiBxZGlvX2dldF9taWNyb3Modm9pZCkKIHsKLSAgICAgICAgcmV0dXJuIChnZXRfY2xvY2soKSA+PiAxMCk7IC8qIHRpbWU+PjEyIGlzIG1pY3Jvc2Vjb25kcyAqLworCXJldHVybiAoZ2V0X2Nsb2NrKCkgPj4gMTIpOyAvKiB0aW1lPj4xMiBpcyBtaWNyb3NlY29uZHMgKi8KIH0KIAogLyogCkBAIC0xMTI5LDcgKzExMjksNyBAQAogCiAjaWZkZWYgUURJT19VU0VfUFJPQ0VTU0lOR19TVEFURQogCWlmIChsYXN0X3Bvc2l0aW9uPj0wKQotCQlzZXRfc2xzYihxLCAmbGFzdF9wb3NpdGlvbiwgU0xTQl9QX0lOUFVUX05PVF9JTklULCAmY291bnQpOworCQlzZXRfc2xzYihxLCAmbGFzdF9wb3NpdGlvbiwgU0xTQl9QX0lOUFVUX1BST0NFU1NJTkcsICZjb3VudCk7CiAjZW5kaWYgLyogUURJT19VU0VfUFJPQ0VTU0lOR19TVEFURSAqLwogCiAJUURJT19EQkZfSEVYNCgwLHRyYWNlLCZxLT5maXJzdF90b19jaGVjayxzaXplb2YoaW50KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaCBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCmluZGV4IGNlYjNhYjMuLjEyNDU2OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCisrKyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpby5oCkBAIC0xOTEsNDkgKzE5MSw0OSBAQAogI2lmIFFESU9fVkVSQk9TRV9MRVZFTD44CiAjZGVmaW5lIFFESU9fUFJJTlRfU1RVUElEKHguLi4pIHByaW50ayggS0VSTl9ERUJVRyBRRElPX1BSSU5US19IRUFERVIgeCkKICNlbHNlCi0jZGVmaW5lIFFESU9fUFJJTlRfU1RVUElEKHguLi4pCisjZGVmaW5lIFFESU9fUFJJTlRfU1RVUElEKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjcKICNkZWZpbmUgUURJT19QUklOVF9BTEwoeC4uLikgcHJpbnRrKCBRRElPX1BSSU5US19IRUFERVIgeCkKICNlbHNlCi0jZGVmaW5lIFFESU9fUFJJTlRfQUxMKHguLi4pCisjZGVmaW5lIFFESU9fUFJJTlRfQUxMKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjYKICNkZWZpbmUgUURJT19QUklOVF9JTkZPKHguLi4pIHByaW50ayggUURJT19QUklOVEtfSEVBREVSIHgpCiAjZWxzZQotI2RlZmluZSBRRElPX1BSSU5UX0lORk8oeC4uLikKKyNkZWZpbmUgUURJT19QUklOVF9JTkZPKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjUKICNkZWZpbmUgUURJT19QUklOVF9XQVJOKHguLi4pIHByaW50ayggUURJT19QUklOVEtfSEVBREVSIHgpCiAjZWxzZQotI2RlZmluZSBRRElPX1BSSU5UX1dBUk4oeC4uLikKKyNkZWZpbmUgUURJT19QUklOVF9XQVJOKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjQKICNkZWZpbmUgUURJT19QUklOVF9FUlIoeC4uLikgcHJpbnRrKCBRRElPX1BSSU5US19IRUFERVIgeCkKICNlbHNlCi0jZGVmaW5lIFFESU9fUFJJTlRfRVJSKHguLi4pCisjZGVmaW5lIFFESU9fUFJJTlRfRVJSKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjMKICNkZWZpbmUgUURJT19QUklOVF9DUklUKHguLi4pIHByaW50ayggUURJT19QUklOVEtfSEVBREVSIHgpCiAjZWxzZQotI2RlZmluZSBRRElPX1BSSU5UX0NSSVQoeC4uLikKKyNkZWZpbmUgUURJT19QUklOVF9DUklUKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjIKICNkZWZpbmUgUURJT19QUklOVF9BTEVSVCh4Li4uKSBwcmludGsoIFFESU9fUFJJTlRLX0hFQURFUiB4KQogI2Vsc2UKLSNkZWZpbmUgUURJT19QUklOVF9BTEVSVCh4Li4uKQorI2RlZmluZSBRRElPX1BSSU5UX0FMRVJUKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgUURJT19WRVJCT1NFX0xFVkVMPjEKICNkZWZpbmUgUURJT19QUklOVF9FTUVSRyh4Li4uKSBwcmludGsoIFFESU9fUFJJTlRLX0hFQURFUiB4KQogI2Vsc2UKLSNkZWZpbmUgUURJT19QUklOVF9FTUVSRyh4Li4uKQorI2RlZmluZSBRRElPX1BSSU5UX0VNRVJHKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCiAjZGVmaW5lIEhFWERVTVAxNihpbXBvcnRhbmNlLGhlYWRlcixwdHIpIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL01ha2VmaWxlCmluZGV4IDE1ZWRlYmIuLmYwYTEyZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9NYWtlZmlsZQpAQCAtMiw1ICsyLDE2IEBACiAjIFMvMzkwIGNyeXB0byBkZXZpY2VzCiAjCiAKLXo5MGNyeXB0LW9ianMgOj0gejkwbWFpbi5vIHo5MGhhcmR3YXJlLm8KLW9iai0kKENPTkZJR19aOTBDUllQVCkgKz0gejkwY3J5cHQubworaWZkZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCisKK3o5MGNyeXB0LW9ianMgOj0gemNyeXB0X21vbm8ubyBhcF9idXMubyB6Y3J5cHRfYXBpLm8gXAorCQl6Y3J5cHRfcGNpY2EubyB6Y3J5cHRfcGNpY2MubyB6Y3J5cHRfcGNpeGNjLm8gemNyeXB0X2NleDJhLm8KK29iai0kKENPTkZJR19aQ1JZUFQpICs9IHo5MGNyeXB0Lm8KKworZWxzZQorCithcC1vYmpzIDo9IGFwX2J1cy5vCitvYmotJChDT05GSUdfWkNSWVBUKSArPSBhcC5vIHpjcnlwdF9hcGkubyB6Y3J5cHRfcGNpY2MubyB6Y3J5cHRfcGNpeGNjLm8KK29iai0kKENPTkZJR19aQ1JZUFQpICs9IHpjcnlwdF9wY2ljYS5vIHpjcnlwdF9jZXgyYS5vCisKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWQwOTg1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuYwpAQCAtMCwwICsxLDEyMjEgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICogQXV0aG9yKHMpOiBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CisgKgkgICAgICBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgkgICAgICBSYWxwaCBXdWVydGhuZXIgPHJ3dWVydGhuQGRlLmlibS5jb20+CisgKgorICogQWRqdW5jdCBwcm9jZXNzb3IgYnVzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8YXNtL3MzOTBfcmRldi5oPgorCisjaW5jbHVkZSAiYXBfYnVzLmgiCisKKy8qIFNvbWUgcHJvdG90eXBlcy4gKi8KK3N0YXRpYyB2b2lkIGFwX3NjYW5fYnVzKHZvaWQgKik7CitzdGF0aWMgdm9pZCBhcF9wb2xsX2FsbCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIGFwX3BvbGxfdGltZW91dCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyBpbnQgYXBfcG9sbF90aHJlYWRfc3RhcnQodm9pZCk7CitzdGF0aWMgdm9pZCBhcF9wb2xsX3RocmVhZF9zdG9wKHZvaWQpOworCisvKioKKyAqIE1vZHVsZSBkZXNjcmlwdGlvbi4KKyAqLworTU9EVUxFX0FVVEhPUigiSUJNIENvcnBvcmF0aW9uIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFkanVuY3QgUHJvY2Vzc29yIEJ1cyBkcml2ZXIsICIKKwkJICAgIkNvcHlyaWdodCAyMDA2IElCTSBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisvKioKKyAqIE1vZHVsZSBwYXJhbWV0ZXIKKyAqLworaW50IGFwX2RvbWFpbl9pbmRleCA9IC0xOwkvKiBBZGp1bmN0IFByb2Nlc3NvciBEb21haW4gSW5kZXggKi8KK21vZHVsZV9wYXJhbV9uYW1lZChkb21haW4sIGFwX2RvbWFpbl9pbmRleCwgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZG9tYWluLCAiZG9tYWluIGluZGV4IGZvciBhcCBkZXZpY2VzIik7CitFWFBPUlRfU1lNQk9MKGFwX2RvbWFpbl9pbmRleCk7CisKK3N0YXRpYyBpbnQgYXBfdGhyZWFkX2ZsYWcgPSAxOworbW9kdWxlX3BhcmFtX25hbWVkKHBvbGxfdGhyZWFkLCBhcF90aHJlYWRfZmxhZywgaW50LCAwMDAwKTsKK01PRFVMRV9QQVJNX0RFU0MocG9sbF90aHJlYWQsICJUdXJuIG9uL29mZiBwb2xsIHRocmVhZCwgZGVmYXVsdCBpcyAxIChvbikuIik7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlICphcF9yb290X2RldmljZSA9IE5VTEw7CisKKy8qKgorICogV29ya3F1ZXVlICYgdGltZXIgZm9yIGJ1cyByZXNjYW4uCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqYXBfd29ya19xdWV1ZTsKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBhcF9jb25maWdfdGltZXI7CitzdGF0aWMgaW50IGFwX2NvbmZpZ190aW1lID0gQVBfQ09ORklHX1RJTUU7CitzdGF0aWMgREVDTEFSRV9XT1JLKGFwX2NvbmZpZ193b3JrLCBhcF9zY2FuX2J1cywgTlVMTCk7CisKKy8qKgorICogVGFza2xldCAmIHRpbWVyIGZvciBBUCByZXF1ZXN0IHBvbGxpbmcuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBhcF9wb2xsX3RpbWVyID0gVElNRVJfSU5JVElBTElaRVIoYXBfcG9sbF90aW1lb3V0LDAsMCk7CitzdGF0aWMgREVDTEFSRV9UQVNLTEVUKGFwX3Rhc2tsZXQsIGFwX3BvbGxfYWxsLCAwKTsKK3N0YXRpYyBhdG9taWNfdCBhcF9wb2xsX3JlcXVlc3RzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBfcG9sbF93YWl0KTsKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmFwX3BvbGxfa3RocmVhZCA9IE5VTEw7CitzdGF0aWMgREVGSU5FX01VVEVYKGFwX3BvbGxfdGhyZWFkX211dGV4KTsKKworLyoqCisgKiBUZXN0IGlmIGFwIGluc3RydWN0aW9ucyBhcmUgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgYXAgaW5zdHJ1Y3Rpb25zIGFyZSBpbnN0YWxsZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFwX2luc3RydWN0aW9uc19hdmFpbGFibGUodm9pZCkKK3sKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpID0gQVBfTUtRSUQoMCwwKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzEgYXNtICgiMSIpID0gLUVOT0RFVjsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzIgYXNtICgiMiIpID0gMFVMOworCisJYXNtIHZvbGF0aWxlKAorCQkiICAgLmxvbmcgMHhiMmFmMDAwMFxuIgkJLyogUFFBUChUQVBRKSAqLworCQkiMDogbGEgICAgJTEsMFxuIgorCQkiMTpcbiIKKwkJRVhfVEFCTEUoMGIsIDFiKQorCQk6ICIrZCIgKHJlZzApLCAiK2QiIChyZWcxKSwgIitkIiAocmVnMikgOiA6ICJjYyIgKTsKKwlyZXR1cm4gcmVnMTsKK30KKworLyoqCisgKiBUZXN0IGFkanVuY3QgcHJvY2Vzc29yIHF1ZXVlLgorICogQHFpZDogdGhlIGFwIHF1ZXVlIG51bWJlcgorICogQHF1ZXVlX2RlcHRoOiBwb2ludGVyIHRvIHF1ZXVlIGRlcHRoIHZhbHVlCisgKiBAZGV2aWNlX3R5cGU6IHBvaW50ZXIgdG8gZGV2aWNlIHR5cGUgdmFsdWUKKyAqCisgKiBSZXR1cm5zIGFwIHF1ZXVlIHN0YXR1cyBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cworYXBfdGVzdF9xdWV1ZShhcF9xaWRfdCBxaWQsIGludCAqcXVldWVfZGVwdGgsIGludCAqZGV2aWNlX3R5cGUpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSAoIjAiKSA9IHFpZDsKKwlyZWdpc3RlciBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHJlZzEgYXNtICgiMSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMiBhc20gKCIyIikgPSAwVUw7CisKKwlhc20gdm9sYXRpbGUoIi5sb25nIDB4YjJhZjAwMDAiCQkvKiBQUUFQKFRBUFEpICovCisJCSAgICAgOiAiK2QiIChyZWcwKSwgIj1kIiAocmVnMSksICIrZCIgKHJlZzIpIDogOiAiY2MiKTsKKwkqZGV2aWNlX3R5cGUgPSAoaW50KSAocmVnMiA+PiAyNCk7CisJKnF1ZXVlX2RlcHRoID0gKGludCkgKHJlZzIgJiAweGZmKTsKKwlyZXR1cm4gcmVnMTsKK30KKworLyoqCisgKiBSZXNldCBhZGp1bmN0IHByb2Nlc3NvciBxdWV1ZS4KKyAqIEBxaWQ6IHRoZSBhcCBxdWV1ZSBudW1iZXIKKyAqCisgKiBSZXR1cm5zIGFwIHF1ZXVlIHN0YXR1cyBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cyBhcF9yZXNldF9xdWV1ZShhcF9xaWRfdCBxaWQpCit7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSAoIjAiKSA9IHFpZCB8IDB4MDEwMDAwMDBVTDsKKwlyZWdpc3RlciBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHJlZzEgYXNtICgiMSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMiBhc20gKCIyIikgPSAwVUw7CisKKwlhc20gdm9sYXRpbGUoCisJCSIubG9uZyAweGIyYWYwMDAwIgkJLyogUFFBUChSQVBRKSAqLworCQk6ICIrZCIgKHJlZzApLCAiPWQiIChyZWcxKSwgIitkIiAocmVnMikgOiA6ICJjYyIpOworCXJldHVybiByZWcxOworfQorCisvKioKKyAqIFNlbmQgbWVzc2FnZSB0byBhZGp1bmN0IHByb2Nlc3NvciBxdWV1ZS4KKyAqIEBxaWQ6IHRoZSBhcCBxdWV1ZSBudW1iZXIKKyAqIEBwc21pZDogdGhlIHByb2dyYW0gc3VwcGxpZWQgbWVzc2FnZSBpZGVudGlmaWVyCisgKiBAbXNnOiB0aGUgbWVzc2FnZSB0ZXh0CisgKiBAbGVuZ3RoOiB0aGUgbWVzc2FnZSBsZW5ndGgKKyAqCisgKiBSZXR1cm5zIGFwIHF1ZXVlIHN0YXR1cyBzdHJ1Y3R1cmUuCisgKgorICogQ29uZGl0aW9uIGNvZGUgMSBvbiBOUUFQIGNhbid0IGhhcHBlbiBiZWNhdXNlIHRoZSBMIGJpdCBpcyAxLgorICoKKyAqIENvbmRpdGlvbiBjb2RlIDIgb24gTlFBUCBhbHNvIG1lYW5zIHRoZSBzZW5kIGlzIGluY29tcGxldGUsCisgKiBiZWNhdXNlIGEgc2VnbWVudCBib3VuZGFyeSB3YXMgcmVhY2hlZC4gVGhlIE5RQVAgaXMgcmVwZWF0ZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFwX3F1ZXVlX3N0YXR1cworX19hcF9zZW5kKGFwX3FpZF90IHFpZCwgdW5zaWduZWQgbG9uZyBsb25nIHBzbWlkLCB2b2lkICptc2csIHNpemVfdCBsZW5ndGgpCit7CisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bbGVuZ3RoXTsgfSBtc2dibG9jazsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpID0gcWlkIHwgMHg0MDAwMDAwMFVMOworCXJlZ2lzdGVyIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgcmVnMSBhc20gKCIxIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcyIGFzbSAoIjIiKSA9ICh1bnNpZ25lZCBsb25nKSBtc2c7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWczIGFzbSAoIjMiKSA9ICh1bnNpZ25lZCBsb25nKSBsZW5ndGg7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWc0IGFzbSAoIjQiKSA9ICh1bnNpZ25lZCBpbnQpIChwc21pZCA+PiAzMik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWc1IGFzbSAoIjUiKSA9ICh1bnNpZ25lZCBpbnQpIHBzbWlkOworCisJYXNtIHZvbGF0aWxlICgKKwkJIjA6IC5sb25nIDB4YjJhZDAwNDJcbiIJCS8qIERRQVAgKi8KKwkJIiAgIGJyYyAgIDIsMGIiCisJCTogIitkIiAocmVnMCksICI9ZCIgKHJlZzEpLCAiK2QiIChyZWcyKSwgIitkIiAocmVnMykKKwkJOiAiZCIgKHJlZzQpLCAiZCIgKHJlZzUpLCAibSIgKCoobXNnYmxvY2sgKikgbXNnKQorCQk6ICJjYyIgKTsKKwlyZXR1cm4gcmVnMTsKK30KKworaW50IGFwX3NlbmQoYXBfcWlkX3QgcWlkLCB1bnNpZ25lZCBsb25nIGxvbmcgcHNtaWQsIHZvaWQgKm1zZywgc2l6ZV90IGxlbmd0aCkKK3sKKwlzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1czsKKworCXN0YXR1cyA9IF9fYXBfc2VuZChxaWQsIHBzbWlkLCBtc2csIGxlbmd0aCk7CisJc3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkgeworCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgorCQlyZXR1cm4gMDsKKwljYXNlIEFQX1JFU1BPTlNFX1FfRlVMTDoKKwkJcmV0dXJuIC1FQlVTWTsKKwlkZWZhdWx0OgkvKiBEZXZpY2UgaXMgZ29uZS4gKi8KKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorfQorRVhQT1JUX1NZTUJPTChhcF9zZW5kKTsKKworLyoKKyAqIFJlY2VpdmUgbWVzc2FnZSBmcm9tIGFkanVuY3QgcHJvY2Vzc29yIHF1ZXVlLgorICogQHFpZDogdGhlIGFwIHF1ZXVlIG51bWJlcgorICogQHBzbWlkOiBwb2ludGVyIHRvIHByb2dyYW0gc3VwcGxpZWQgbWVzc2FnZSBpZGVudGlmaWVyCisgKiBAbXNnOiB0aGUgbWVzc2FnZSB0ZXh0CisgKiBAbGVuZ3RoOiB0aGUgbWVzc2FnZSBsZW5ndGgKKyAqCisgKiBSZXR1cm5zIGFwIHF1ZXVlIHN0YXR1cyBzdHJ1Y3R1cmUuCisgKgorICogQ29uZGl0aW9uIGNvZGUgMSBvbiBEUUFQIG1lYW5zIHRoZSByZWNlaXZlIGhhcyB0YWtlbiBwbGFjZQorICogYnV0IG9ubHkgcGFydGlhbGx5LglUaGUgcmVzcG9uc2UgaXMgaW5jb21wbGV0ZSwgaGVuY2UgdGhlCisgKiBEUUFQIGlzIHJlcGVhdGVkLgorICoKKyAqIENvbmRpdGlvbiBjb2RlIDIgb24gRFFBUCBhbHNvIG1lYW5zIHRoZSByZWNlaXZlIGlzIGluY29tcGxldGUsCisgKiB0aGlzIHRpbWUgYmVjYXVzZSBhIHNlZ21lbnQgYm91bmRhcnkgd2FzIHJlYWNoZWQuIEFnYWluLCB0aGUKKyAqIERRQVAgaXMgcmVwZWF0ZWQuCisgKgorICogTm90ZSB0aGF0IGdwcjIgaXMgdXNlZCBieSB0aGUgRFFBUCBpbnN0cnVjdGlvbiB0byBrZWVwIHRyYWNrIG9mCisgKiBhbnkgJ3Jlc2lkdWFsJyBsZW5ndGgsIGluIGNhc2UgdGhlIGluc3RydWN0aW9uIGdldHMgaW50ZXJydXB0ZWQuCisgKiBIZW5jZSBpdCBnZXRzIHplcm9lZCBiZWZvcmUgdGhlIGluc3RydWN0aW9uLgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMKK19fYXBfcmVjdihhcF9xaWRfdCBxaWQsIHVuc2lnbmVkIGxvbmcgbG9uZyAqcHNtaWQsIHZvaWQgKm1zZywgc2l6ZV90IGxlbmd0aCkKK3sKKwl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tsZW5ndGhdOyB9IG1zZ2Jsb2NrOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMCBhc20oIjAiKSA9IHFpZCB8IDB4ODAwMDAwMDBVTDsKKwlyZWdpc3RlciBzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHJlZzEgYXNtICgiMSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMiBhc20oIjIiKSA9IDBVTDsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzQgYXNtKCI0IikgPSAodW5zaWduZWQgbG9uZykgbXNnOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnNSBhc20oIjUiKSA9ICh1bnNpZ25lZCBsb25nKSBsZW5ndGg7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWc2IGFzbSgiNiIpID0gMFVMOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnNyBhc20oIjciKSA9IDBVTDsKKworCisJYXNtIHZvbGF0aWxlKAorCQkiMDogLmxvbmcgMHhiMmFlMDA2NFxuIgorCQkiICAgYnJjICAgNiwwYlxuIgorCQk6ICIrZCIgKHJlZzApLCAiPWQiIChyZWcxKSwgIitkIiAocmVnMiksCisJCSIrZCIgKHJlZzQpLCAiK2QiIChyZWc1KSwgIitkIiAocmVnNiksICIrZCIgKHJlZzcpLAorCQkiPW0iICgqKG1zZ2Jsb2NrICopIG1zZykgOiA6ICJjYyIgKTsKKwkqcHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIHJlZzYpIDw8IDMyKSArIHJlZzc7CisJcmV0dXJuIHJlZzE7Cit9CisKK2ludCBhcF9yZWN2KGFwX3FpZF90IHFpZCwgdW5zaWduZWQgbG9uZyBsb25nICpwc21pZCwgdm9pZCAqbXNnLCBzaXplX3QgbGVuZ3RoKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCisJc3RhdHVzID0gX19hcF9yZWN2KHFpZCwgcHNtaWQsIG1zZywgbGVuZ3RoKTsKKwlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CisJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CisJCXJldHVybiAwOworCWNhc2UgQVBfUkVTUE9OU0VfTk9fUEVORElOR19SRVBMWToKKwkJaWYgKHN0YXR1cy5xdWV1ZV9lbXB0eSkKKwkJCXJldHVybiAtRU5PRU5UOworCQlyZXR1cm4gLUVCVVNZOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KK30KK0VYUE9SVF9TWU1CT0woYXBfcmVjdik7CisKKy8qKgorICogQ2hlY2sgaWYgYW4gQVAgcXVldWUgaXMgYXZhaWxhYmxlLiBUaGUgdGVzdCBpcyByZXBlYXRlZCBmb3IKKyAqIEFQX01BWF9SRVNFVCB0aW1lcy4KKyAqIEBxaWQ6IHRoZSBhcCBxdWV1ZSBudW1iZXIKKyAqIEBxdWV1ZV9kZXB0aDogcG9pbnRlciB0byBxdWV1ZSBkZXB0aCB2YWx1ZQorICogQGRldmljZV90eXBlOiBwb2ludGVyIHRvIGRldmljZSB0eXBlIHZhbHVlCisgKi8KK3N0YXRpYyBpbnQgYXBfcXVlcnlfcXVldWUoYXBfcWlkX3QgcWlkLCBpbnQgKnF1ZXVlX2RlcHRoLCBpbnQgKmRldmljZV90eXBlKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCWludCB0X2RlcHRoLCB0X2RldmljZV90eXBlLCByYywgaTsKKworCXJjID0gLUVCVVNZOworCWZvciAoaSA9IDA7IGkgPCBBUF9NQVhfUkVTRVQ7IGkrKykgeworCQlzdGF0dXMgPSBhcF90ZXN0X3F1ZXVlKHFpZCwgJnRfZGVwdGgsICZ0X2RldmljZV90eXBlKTsKKwkJc3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkgeworCQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKKwkJCSpxdWV1ZV9kZXB0aCA9IHRfZGVwdGggKyAxOworCQkJKmRldmljZV90eXBlID0gdF9kZXZpY2VfdHlwZTsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQljYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOgorCQkJcmMgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCWNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6CisJCQlicmVhazsKKwkJY2FzZSBBUF9SRVNQT05TRV9ERUNPTkZJR1VSRUQ6CisJCQlyYyA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJY2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6CisJCQlyYyA9IC1FTk9ERVY7CisJCQlicmVhazsKKwkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQlpZiAocmMgIT0gLUVCVVNZKQorCQkJYnJlYWs7CisJCWlmIChpIDwgQVBfTUFYX1JFU0VUIC0gMSkKKwkJCXVkZWxheSg1KTsKKwl9CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFJlc2V0IGFuIEFQIHF1ZXVlIGFuZCB3YWl0IGZvciBpdCB0byBiZWNvbWUgYXZhaWxhYmxlIGFnYWluLgorICogQHFpZDogdGhlIGFwIHF1ZXVlIG51bWJlcgorICovCitzdGF0aWMgaW50IGFwX2luaXRfcXVldWUoYXBfcWlkX3QgcWlkKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCWludCByYywgZHVtbXksIGk7CisKKwlyYyA9IC1FTk9ERVY7CisJc3RhdHVzID0gYXBfcmVzZXRfcXVldWUocWlkKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVBfTUFYX1JFU0VUOyBpKyspIHsKKwkJc3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkgeworCQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKKwkJCWlmIChzdGF0dXMucXVldWVfZW1wdHkpCisJCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgQVBfUkVTUE9OU0VfUV9OT1RfQVZBSUw6CisJCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgorCQljYXNlIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRDoKKwkJCWkgPSBBUF9NQVhfUkVTRVQ7CS8qIHJldHVybiB3aXRoIC1FTk9ERVYgKi8KKwkJCWJyZWFrOworCQljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgorCQljYXNlIEFQX1JFU1BPTlNFX0JVU1k6CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlpZiAocmMgIT0gLUVOT0RFVikKKwkJCWJyZWFrOworCQlpZiAoaSA8IEFQX01BWF9SRVNFVCAtIDEpIHsKKwkJCXVkZWxheSg1KTsKKwkJCXN0YXR1cyA9IGFwX3Rlc3RfcXVldWUocWlkLCAmZHVtbXksICZkdW1teSk7CisJCX0KKwl9CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIEFQIGRldmljZSByZWxhdGVkIGF0dHJpYnV0ZXMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGFwX2h3dHlwZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGFwX2RldmljZSAqYXBfZGV2ID0gdG9fYXBfZGV2KGRldik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGFwX2Rldi0+ZGV2aWNlX3R5cGUpOworfQorc3RhdGljIERFVklDRV9BVFRSKGh3dHlwZSwgMDQ0NCwgYXBfaHd0eXBlX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhcF9kZXB0aF9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYgPSB0b19hcF9kZXYoZGV2KTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYXBfZGV2LT5xdWV1ZV9kZXB0aCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoZGVwdGgsIDA0NDQsIGFwX2RlcHRoX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhcF9yZXF1ZXN0X2NvdW50X3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IGFwX2RldmljZSAqYXBfZGV2ID0gdG9fYXBfZGV2KGRldik7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworCXJjID0gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYXBfZGV2LT50b3RhbF9yZXF1ZXN0X2NvdW50KTsKKwlzcGluX3VubG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihyZXF1ZXN0X2NvdW50LCAwNDQ0LCBhcF9yZXF1ZXN0X2NvdW50X3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhcF9tb2RhbGlhc19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgImFwOnQlMDJYIiwgdG9fYXBfZGV2KGRldiktPmRldmljZV90eXBlKTsKK30KKworc3RhdGljIERFVklDRV9BVFRSKG1vZGFsaWFzLCAwNDQ0LCBhcF9tb2RhbGlhc19zaG93LCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFwX2Rldl9hdHRyc1tdID0geworCSZkZXZfYXR0cl9od3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfZGVwdGguYXR0ciwKKwkmZGV2X2F0dHJfcmVxdWVzdF9jb3VudC5hdHRyLAorCSZkZXZfYXR0cl9tb2RhbGlhcy5hdHRyLAorCU5VTEwKK307CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhcF9kZXZfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBhcF9kZXZfYXR0cnMKK307CisKKy8qKgorICogQVAgYnVzIGRyaXZlciByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24uCisgKi8KK3N0YXRpYyBpbnQgYXBfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3sKKwlzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYgPSB0b19hcF9kZXYoZGV2KTsKKwlzdHJ1Y3QgYXBfZHJpdmVyICphcF9kcnYgPSB0b19hcF9kcnYoZHJ2KTsKKwlzdHJ1Y3QgYXBfZGV2aWNlX2lkICppZDsKKworCS8qKgorCSAqIENvbXBhcmUgZGV2aWNlIHR5cGUgb2YgdGhlIGRldmljZSB3aXRoIHRoZSBsaXN0IG9mCisJICogc3VwcG9ydGVkIHR5cGVzIG9mIHRoZSBkZXZpY2VfZHJpdmVyLgorCSAqLworCWZvciAoaWQgPSBhcF9kcnYtPmlkczsgaWQtPm1hdGNoX2ZsYWdzOyBpZCsrKSB7CisJCWlmICgoaWQtPm1hdGNoX2ZsYWdzICYgQVBfREVWSUNFX0lEX01BVENIX0RFVklDRV9UWVBFKSAmJgorCQkgICAgKGlkLT5kZXZfdHlwZSAhPSBhcF9kZXYtPmRldmljZV90eXBlKSkKKwkJCWNvbnRpbnVlOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogdWV2ZW50IGZ1bmN0aW9uIGZvciBBUCBkZXZpY2VzLiBJdCBzZXRzIHVwIGEgc2luZ2xlIGVudmlyb25tZW50CisgKiB2YXJpYWJsZSBERVZfVFlQRSB3aGljaCBjb250YWlucyB0aGUgaGFyZHdhcmUgZGV2aWNlIHR5cGUuCisgKi8KK3N0YXRpYyBpbnQgYXBfdWV2ZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCSAgICAgICBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYgPSB0b19hcF9kZXYoZGV2KTsKKwlpbnQgbGVuZ3RoOworCisJaWYgKCFhcF9kZXYpCisJCXJldHVybiAtRU5PREVWOworCisJLyogU2V0IHVwIERFVl9UWVBFIGVudmlyb25tZW50IHZhcmlhYmxlLiAqLworCWVudnBbMF0gPSBidWZmZXI7CisJbGVuZ3RoID0gc2NucHJpbnRmKGJ1ZmZlciwgYnVmZmVyX3NpemUsICJERVZfVFlQRT0lMDRYIiwKKwkJCSAgIGFwX2Rldi0+ZGV2aWNlX3R5cGUpOworCWlmIChidWZmZXJfc2l6ZSAtIGxlbmd0aCA8PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKKwllbnZwWzFdID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBidXNfdHlwZSBhcF9idXNfdHlwZSA9IHsKKwkubmFtZSA9ICJhcCIsCisJLm1hdGNoID0gJmFwX2J1c19tYXRjaCwKKwkudWV2ZW50ID0gJmFwX3VldmVudCwKK307CisKK3N0YXRpYyBpbnQgYXBfZGV2aWNlX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYgPSB0b19hcF9kZXYoZGV2KTsKKwlzdHJ1Y3QgYXBfZHJpdmVyICphcF9kcnYgPSB0b19hcF9kcnYoZGV2LT5kcml2ZXIpOworCWludCByYzsKKworCWFwX2Rldi0+ZHJ2ID0gYXBfZHJ2OworCXJjID0gYXBfZHJ2LT5wcm9iZSA/IGFwX2Rydi0+cHJvYmUoYXBfZGV2KSA6IC1FTk9ERVY7CisJaWYgKHJjKQorCQlhcF9kZXYtPnVucmVnaXN0ZXJlZCA9IDE7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIEZsdXNoIGFsbCByZXF1ZXN0cyBmcm9tIHRoZSByZXF1ZXN0L3BlbmRpbmcgcXVldWUgb2YgYW4gQVAgZGV2aWNlLgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19hcF9mbHVzaF9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpCit7CisJc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZywgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXBfbXNnLCBuZXh0LCAmYXBfZGV2LT5wZW5kaW5ncSwgbGlzdCkgeworCQlsaXN0X2RlbF9pbml0KCZhcF9tc2ctPmxpc3QpOworCQlhcF9kZXYtPnBlbmRpbmdxX2NvdW50LS07CisJCWFwX2Rldi0+ZHJ2LT5yZWNlaXZlKGFwX2RldiwgYXBfbXNnLCBFUlJfUFRSKC1FTk9ERVYpKTsKKwl9CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFwX21zZywgbmV4dCwgJmFwX2Rldi0+cmVxdWVzdHEsIGxpc3QpIHsKKwkJbGlzdF9kZWxfaW5pdCgmYXBfbXNnLT5saXN0KTsKKwkJYXBfZGV2LT5yZXF1ZXN0cV9jb3VudC0tOworCQlhcF9kZXYtPmRydi0+cmVjZWl2ZShhcF9kZXYsIGFwX21zZywgRVJSX1BUUigtRU5PREVWKSk7CisJfQorfQorCit2b2lkIGFwX2ZsdXNoX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKK3sKKwlzcGluX2xvY2tfYmgoJmFwX2Rldi0+bG9jayk7CisJX19hcF9mbHVzaF9xdWV1ZShhcF9kZXYpOworCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTChhcF9mbHVzaF9xdWV1ZSk7CisKK3N0YXRpYyBpbnQgYXBfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFwX2RldmljZSAqYXBfZGV2ID0gdG9fYXBfZGV2KGRldik7CisJc3RydWN0IGFwX2RyaXZlciAqYXBfZHJ2ID0gYXBfZGV2LT5kcnY7CisKKwlzcGluX2xvY2tfYmgoJmFwX2Rldi0+bG9jayk7CisJX19hcF9mbHVzaF9xdWV1ZShhcF9kZXYpOworCS8qKgorCSAqIHNldCAtPnVucmVnaXN0ZXJlZCB0byAxIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2suIFRoaXMgcHJldmVudHMKKwkgKiBuZXcgbWVzc2FnZXMgdG8gYmUgcHV0IG9uIHRoZSBxdWV1ZSBmcm9tIG5vdyBvbi4KKwkgKi8KKwlhcF9kZXYtPnVucmVnaXN0ZXJlZCA9IDE7CisJc3Bpbl91bmxvY2tfYmgoJmFwX2Rldi0+bG9jayk7CisJaWYgKGFwX2Rydi0+cmVtb3ZlKQorCQlhcF9kcnYtPnJlbW92ZShhcF9kZXYpOworCXJldHVybiAwOworfQorCitpbnQgYXBfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBhcF9kcml2ZXIgKmFwX2Rydiwgc3RydWN0IG1vZHVsZSAqb3duZXIsCisJCSAgICAgICBjaGFyICpuYW1lKQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSAmYXBfZHJ2LT5kcml2ZXI7CisKKwlkcnYtPmJ1cyA9ICZhcF9idXNfdHlwZTsKKwlkcnYtPnByb2JlID0gYXBfZGV2aWNlX3Byb2JlOworCWRydi0+cmVtb3ZlID0gYXBfZGV2aWNlX3JlbW92ZTsKKwlkcnYtPm93bmVyID0gb3duZXI7CisJZHJ2LT5uYW1lID0gbmFtZTsKKwlyZXR1cm4gZHJpdmVyX3JlZ2lzdGVyKGRydik7Cit9CitFWFBPUlRfU1lNQk9MKGFwX2RyaXZlcl9yZWdpc3Rlcik7CisKK3ZvaWQgYXBfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGFwX2RyaXZlciAqYXBfZHJ2KQoreworCWRyaXZlcl91bnJlZ2lzdGVyKCZhcF9kcnYtPmRyaXZlcik7Cit9CitFWFBPUlRfU1lNQk9MKGFwX2RyaXZlcl91bnJlZ2lzdGVyKTsKKworLyoqCisgKiBBUCBidXMgYXR0cmlidXRlcy4KKyAqLworc3RhdGljIHNzaXplX3QgYXBfZG9tYWluX3Nob3coc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYXBfZG9tYWluX2luZGV4KTsKK30KKworc3RhdGljIEJVU19BVFRSKGFwX2RvbWFpbiwgMDQ0NCwgYXBfZG9tYWluX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3NpemVfdCBhcF9jb25maWdfdGltZV9zaG93KHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIGFwX2NvbmZpZ190aW1lKTsKK30KKworc3RhdGljIHNzaXplX3QgYXBfY29uZmlnX3RpbWVfc3RvcmUoc3RydWN0IGJ1c190eXBlICpidXMsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCB0aW1lOworCisJaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJnRpbWUpICE9IDEgfHwgdGltZSA8IDUgfHwgdGltZSA+IDEyMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYXBfY29uZmlnX3RpbWUgPSB0aW1lOworCWlmICghdGltZXJfcGVuZGluZygmYXBfY29uZmlnX3RpbWVyKSB8fAorCSAgICAhbW9kX3RpbWVyKCZhcF9jb25maWdfdGltZXIsIGppZmZpZXMgKyBhcF9jb25maWdfdGltZSAqIEhaKSkgeworCQlhcF9jb25maWdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBhcF9jb25maWdfdGltZSAqIEhaOworCQlhZGRfdGltZXIoJmFwX2NvbmZpZ190aW1lcik7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIEJVU19BVFRSKGNvbmZpZ190aW1lLCAwNjQ0LCBhcF9jb25maWdfdGltZV9zaG93LCBhcF9jb25maWdfdGltZV9zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90IGFwX3BvbGxfdGhyZWFkX3Nob3coc3RydWN0IGJ1c190eXBlICpidXMsIGNoYXIgKmJ1ZikKK3sKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgYXBfcG9sbF9rdGhyZWFkID8gMSA6IDApOworfQorCitzdGF0aWMgc3NpemVfdCBhcF9wb2xsX3RocmVhZF9zdG9yZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywKKwkJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IGZsYWcsIHJjOworCisJaWYgKHNzY2FuZihidWYsICIlZFxuIiwgJmZsYWcpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmbGFnKSB7CisJCXJjID0gYXBfcG9sbF90aHJlYWRfc3RhcnQoKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCX0KKwllbHNlCisJCWFwX3BvbGxfdGhyZWFkX3N0b3AoKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBCVVNfQVRUUihwb2xsX3RocmVhZCwgMDY0NCwgYXBfcG9sbF90aHJlYWRfc2hvdywgYXBfcG9sbF90aHJlYWRfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGJ1c19hdHRyaWJ1dGUgKmNvbnN0IGFwX2J1c19hdHRyc1tdID0geworCSZidXNfYXR0cl9hcF9kb21haW4sCisJJmJ1c19hdHRyX2NvbmZpZ190aW1lLAorCSZidXNfYXR0cl9wb2xsX3RocmVhZCwKKwlOVUxMCit9OworCisvKioKKyAqIFBpY2sgb25lIG9mIHRoZSAxNiBhcCBkb21haW5zLgorICovCitzdGF0aWMgaW5saW5lIGludCBhcF9zZWxlY3RfZG9tYWluKHZvaWQpCit7CisJaW50IHF1ZXVlX2RlcHRoLCBkZXZpY2VfdHlwZSwgY291bnQsIG1heF9jb3VudCwgYmVzdF9kb21haW47CisJaW50IHJjLCBpLCBqOworCisJLyoqCisJICogV2Ugd2FudCB0byB1c2UgYSBzaW5nbGUgZG9tYWluLiBFaXRoZXIgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aAorCSAqIHRoZSAiZG9tYWluPSIgcGFyYW1ldGVyIG9yIHRoZSBkb21haW4gd2l0aCB0aGUgbWF4aW11bSBudW1iZXIKKwkgKiBvZiBkZXZpY2VzLgorCSAqLworCWlmIChhcF9kb21haW5faW5kZXggPj0gMCAmJiBhcF9kb21haW5faW5kZXggPCBBUF9ET01BSU5TKQorCQkvKiBEb21haW4gaGFzIGFscmVhZHkgYmVlbiBzZWxlY3RlZC4gKi8KKwkJcmV0dXJuIDA7CisJYmVzdF9kb21haW4gPSAtMTsKKwltYXhfY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUF9ET01BSU5TOyBpKyspIHsKKwkJY291bnQgPSAwOworCQlmb3IgKGogPSAwOyBqIDwgQVBfREVWSUNFUzsgaisrKSB7CisJCQlhcF9xaWRfdCBxaWQgPSBBUF9NS1FJRChqLCBpKTsKKwkJCXJjID0gYXBfcXVlcnlfcXVldWUocWlkLCAmcXVldWVfZGVwdGgsICZkZXZpY2VfdHlwZSk7CisJCQlpZiAocmMpCisJCQkJY29udGludWU7CisJCQljb3VudCsrOworCQl9CisJCWlmIChjb3VudCA+IG1heF9jb3VudCkgeworCQkJbWF4X2NvdW50ID0gY291bnQ7CisJCQliZXN0X2RvbWFpbiA9IGk7CisJCX0KKwl9CisJaWYgKGJlc3RfZG9tYWluID49IDApeworCQlhcF9kb21haW5faW5kZXggPSBiZXN0X2RvbWFpbjsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRU5PREVWOworfQorCisvKioKKyAqIEZpbmQgdGhlIGRldmljZSB0eXBlIGlmIHF1ZXJ5IHF1ZXVlIHJldHVybmVkIGEgZGV2aWNlIHR5cGUgb2YgMC4KKyAqIEBhcF9kZXY6IHBvaW50ZXIgdG8gdGhlIEFQIGRldmljZS4KKyAqLworc3RhdGljIGludCBhcF9wcm9iZV9kZXZpY2VfdHlwZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpCit7CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgbXNnW10gPSB7CisJCTB4MDAsMHgwNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDU4LDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMSwweDAwLDB4NDMsMHg0MywweDQxLDB4MmQsMHg0MSwweDUwLAorCQkweDUwLDB4NGMsMHgyMCwweDIwLDB4MjAsMHgwMSwweDAxLDB4MDEsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDRiLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDEsMHgxYywweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDA1LDB4YjgsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDcwLDB4MDAsMHg0MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDU0LDB4MzIsMHgwMSwweDAwLDB4YTAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwNSwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDBhLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsCisJCTB4NDksMHg0MywweDUzLDB4NDYsMHgyMCwweDIwLDB4MjAsMHgyMCwKKwkJMHg1MCwweDRiLDB4MGEsMHgwMCwweDUwLDB4NGIsMHg0MywweDUzLAorCQkweDJkLDB4MzEsMHgyZSwweDMyLDB4MzcsMHgwMCwweDExLDB4MjIsCisJCTB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywweDg4LDB4OTksMHgwMCwKKwkJMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywweDg4LAorCQkweDk5LDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsCisJCTB4NzcsMHg4OCwweDk5LDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwKKwkJMHg1NSwweDY2LDB4NzcsMHg4OCwweDk5LDB4MDAsMHgxMSwweDIyLAorCQkweDMzLDB4NDQsMHg1NSwweDY2LDB4NzcsMHg4OCwweDk5LDB4MDAsCisJCTB4MTEsMHgyMiwweDMzLDB4NWQsMHgwMCwweDViLDB4MDAsMHg3NywKKwkJMHg4OCwweDFlLDB4MDAsMHgwMCwweDU3LDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDQsMHgwMCwweDAwLDB4NGYsMHgwMCwweDAwLDB4MDAsCisJCTB4MDMsMHgwMiwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDAsMHgwMSwKKwkJMHhjZSwweDAyLDB4NjgsMHgyZCwweDVmLDB4YTksMHhkZSwweDBjLAorCQkweGY2LDB4ZDIsMHg3YiwweDU4LDB4NGIsMHhmOSwweDI4LDB4NjgsCisJCTB4M2QsMHhiNCwweGY0LDB4ZWYsMHg3OCwweGQ1LDB4YmUsMHg2NiwKKwkJMHg2MywweDQyLDB4ZWYsMHhmOCwweGZkLDB4YTQsMHhmOCwweGIwLAorCQkweDhlLDB4MjksMHhjMiwweGM5LDB4MmUsMHhkOCwweDQ1LDB4YjgsCisJCTB4NTMsMHg4YywweDZmLDB4NGUsMHg3MiwweDhmLDB4NmMsMHgwNCwKKwkJMHg5YywweDg4LDB4ZmMsMHgxZSwweGM1LDB4ODMsMHg1NSwweDU3LAorCQkweGY3LDB4ZGQsMHhmZCwweDRmLDB4MTEsMHgzNiwweDk1LDB4NWQsCisJfTsKKwlzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHN0YXR1czsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHNtaWQ7CisJY2hhciAqcmVwbHk7CisJaW50IHJjLCBpOworCisJcmVwbHkgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFyZXBseSkgeworCQlyYyA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCXN0YXR1cyA9IF9fYXBfc2VuZChhcF9kZXYtPnFpZCwgMHgwMTAyMDMwNDA1MDYwNzA4VUxMLAorCQkJICAgbXNnLCBzaXplb2YobXNnKSk7CisJaWYgKHN0YXR1cy5yZXNwb25zZV9jb2RlICE9IEFQX1JFU1BPTlNFX05PUk1BTCkgeworCQlyYyA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJLyogV2FpdCBmb3IgdGhlIHRlc3QgbWVzc2FnZSB0byBjb21wbGV0ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCW1kZWxheSgzMDApOworCQlzdGF0dXMgPSBfX2FwX3JlY3YoYXBfZGV2LT5xaWQsICZwc21pZCwgcmVwbHksIDQwOTYpOworCQlpZiAoc3RhdHVzLnJlc3BvbnNlX2NvZGUgPT0gQVBfUkVTUE9OU0VfTk9STUFMICYmCisJCSAgICBwc21pZCA9PSAweDAxMDIwMzA0MDUwNjA3MDhVTEwpCisJCQlicmVhazsKKwl9CisJaWYgKGkgPCA2KSB7CisJCS8qIEdvdCBhbiBhbnN3ZXIuICovCisJCWlmIChyZXBseVswXSA9PSAweDAwICYmIHJlcGx5WzFdID09IDB4ODYpCisJCQlhcF9kZXYtPmRldmljZV90eXBlID0gQVBfREVWSUNFX1RZUEVfUENJQ0M7CisJCWVsc2UKKwkJCWFwX2Rldi0+ZGV2aWNlX3R5cGUgPSBBUF9ERVZJQ0VfVFlQRV9QQ0lDQTsKKwkJcmMgPSAwOworCX0gZWxzZQorCQlyYyA9IC1FTk9ERVY7CisKK291dF9mcmVlOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcmVwbHkpOworb3V0OgorCXJldHVybiByYzsKK30KKworLyoqCisgKiBTY2FuIHRoZSBhcCBidXMgZm9yIG5ldyBkZXZpY2VzLgorICovCitzdGF0aWMgaW50IF9fYXBfc2Nhbl9idXMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiB0b19hcF9kZXYoZGV2KS0+cWlkID09IChhcF9xaWRfdCkodW5zaWduZWQgbG9uZykgZGF0YTsKK30KKworc3RhdGljIHZvaWQgYXBfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiA9IHRvX2FwX2RldihkZXYpOworCisJa2ZyZWUoYXBfZGV2KTsKK30KKworc3RhdGljIHZvaWQgYXBfc2Nhbl9idXModm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCWFwX3FpZF90IHFpZDsKKwlpbnQgcXVldWVfZGVwdGgsIGRldmljZV90eXBlOworCWludCByYywgaTsKKworCWlmIChhcF9zZWxlY3RfZG9tYWluKCkgIT0gMCkKKwkJcmV0dXJuOworCWZvciAoaSA9IDA7IGkgPCBBUF9ERVZJQ0VTOyBpKyspIHsKKwkJcWlkID0gQVBfTUtRSUQoaSwgYXBfZG9tYWluX2luZGV4KTsKKwkJZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZhcF9idXNfdHlwZSwgTlVMTCwKKwkJCQkgICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXFpZCwKKwkJCQkgICAgICBfX2FwX3NjYW5fYnVzKTsKKwkJaWYgKGRldikgeworCQkJcHV0X2RldmljZShkZXYpOworCQkJY29udGludWU7CisJCX0KKwkJcmMgPSBhcF9xdWVyeV9xdWV1ZShxaWQsICZxdWV1ZV9kZXB0aCwgJmRldmljZV90eXBlKTsKKwkJaWYgKHJjKQorCQkJY29udGludWU7CisJCXJjID0gYXBfaW5pdF9xdWV1ZShxaWQpOworCQlpZiAocmMpCisJCQljb250aW51ZTsKKwkJYXBfZGV2ID0ga3phbGxvYyhzaXplb2YoKmFwX2RldiksIEdGUF9LRVJORUwpOworCQlpZiAoIWFwX2RldikKKwkJCWJyZWFrOworCQlhcF9kZXYtPnFpZCA9IHFpZDsKKwkJYXBfZGV2LT5xdWV1ZV9kZXB0aCA9IHF1ZXVlX2RlcHRoOworCQlzcGluX2xvY2tfaW5pdCgmYXBfZGV2LT5sb2NrKTsKKwkJSU5JVF9MSVNUX0hFQUQoJmFwX2Rldi0+cGVuZGluZ3EpOworCQlJTklUX0xJU1RfSEVBRCgmYXBfZGV2LT5yZXF1ZXN0cSk7CisJCWlmIChkZXZpY2VfdHlwZSA9PSAwKQorCQkJYXBfcHJvYmVfZGV2aWNlX3R5cGUoYXBfZGV2KTsKKwkJZWxzZQorCQkJYXBfZGV2LT5kZXZpY2VfdHlwZSA9IGRldmljZV90eXBlOworCisJCWFwX2Rldi0+ZGV2aWNlLmJ1cyA9ICZhcF9idXNfdHlwZTsKKwkJYXBfZGV2LT5kZXZpY2UucGFyZW50ID0gYXBfcm9vdF9kZXZpY2U7CisJCXNucHJpbnRmKGFwX2Rldi0+ZGV2aWNlLmJ1c19pZCwgQlVTX0lEX1NJWkUsICJjYXJkJTAyeCIsCisJCQkgQVBfUUlEX0RFVklDRShhcF9kZXYtPnFpZCkpOworCQlhcF9kZXYtPmRldmljZS5yZWxlYXNlID0gYXBfZGV2aWNlX3JlbGVhc2U7CisJCXJjID0gZGV2aWNlX3JlZ2lzdGVyKCZhcF9kZXYtPmRldmljZSk7CisJCWlmIChyYykgeworCQkJa2ZyZWUoYXBfZGV2KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEFkZCBkZXZpY2UgYXR0cmlidXRlcy4gKi8KKwkJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmFwX2Rldi0+ZGV2aWNlLmtvYmosCisJCQkJCSZhcF9kZXZfYXR0cl9ncm91cCk7CisJCWlmIChyYykKKwkJCWRldmljZV91bnJlZ2lzdGVyKCZhcF9kZXYtPmRldmljZSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorYXBfY29uZmlnX3RpbWVvdXQodW5zaWduZWQgbG9uZyBwdHIpCit7CisJcXVldWVfd29yayhhcF93b3JrX3F1ZXVlLCAmYXBfY29uZmlnX3dvcmspOworCWFwX2NvbmZpZ190aW1lci5leHBpcmVzID0gamlmZmllcyArIGFwX2NvbmZpZ190aW1lICogSFo7CisJYWRkX3RpbWVyKCZhcF9jb25maWdfdGltZXIpOworfQorCisvKioKKyAqIFNldCB1cCB0aGUgdGltZXIgdG8gcnVuIHRoZSBwb2xsIHRhc2tsZXQKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGFwX3NjaGVkdWxlX3BvbGxfdGltZXIodm9pZCkKK3sKKwlpZiAodGltZXJfcGVuZGluZygmYXBfcG9sbF90aW1lcikpCisJCXJldHVybjsKKwltb2RfdGltZXIoJmFwX3BvbGxfdGltZXIsIGppZmZpZXMgKyBBUF9QT0xMX1RJTUUpOworfQorCisvKioKKyAqIFJlY2VpdmUgcGVuZGluZyByZXBseSBtZXNzYWdlcyBmcm9tIGFuIEFQIGRldmljZS4KKyAqIEBhcF9kZXY6IHBvaW50ZXIgdG8gdGhlIEFQIGRldmljZQorICogQGZsYWdzOiBwb2ludGVyIHRvIGNvbnRyb2wgZmxhZ3MsIGJpdCAyXjAgaXMgc2V0IGlmIGFub3RoZXIgcG9sbCBpcworICoJICAgcmVxdWlyZWQsIGJpdCAyXjEgaXMgc2V0IGlmIHRoZSBwb2xsIHRpbWVyIG5lZWRzIHRvIGdldCBhcm1lZAorICogUmV0dXJucyAwIGlmIHRoZSBkZXZpY2UgaXMgc3RpbGwgcHJlc2VudCwgLUVOT0RFViBpZiBub3QuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFwX3BvbGxfcmVhZChzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2c7CisKKwlpZiAoYXBfZGV2LT5xdWV1ZV9jb3VudCA8PSAwKQorCQlyZXR1cm4gMDsKKwlzdGF0dXMgPSBfX2FwX3JlY3YoYXBfZGV2LT5xaWQsICZhcF9kZXYtPnJlcGx5LT5wc21pZCwKKwkJCSAgIGFwX2Rldi0+cmVwbHktPm1lc3NhZ2UsIGFwX2Rldi0+cmVwbHktPmxlbmd0aCk7CisJc3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkgeworCWNhc2UgQVBfUkVTUE9OU0VfTk9STUFMOgorCQlhdG9taWNfZGVjKCZhcF9wb2xsX3JlcXVlc3RzKTsKKwkJYXBfZGV2LT5xdWV1ZV9jb3VudC0tOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFwX21zZywgJmFwX2Rldi0+cGVuZGluZ3EsIGxpc3QpIHsKKwkJCWlmIChhcF9tc2ctPnBzbWlkICE9IGFwX2Rldi0+cmVwbHktPnBzbWlkKQorCQkJCWNvbnRpbnVlOworCQkJbGlzdF9kZWxfaW5pdCgmYXBfbXNnLT5saXN0KTsKKwkJCWFwX2Rldi0+cGVuZGluZ3FfY291bnQtLTsKKwkJCWFwX2Rldi0+ZHJ2LT5yZWNlaXZlKGFwX2RldiwgYXBfbXNnLCBhcF9kZXYtPnJlcGx5KTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChhcF9kZXYtPnF1ZXVlX2NvdW50ID4gMCkKKwkJCSpmbGFncyB8PSAxOworCQlicmVhazsKKwljYXNlIEFQX1JFU1BPTlNFX05PX1BFTkRJTkdfUkVQTFk6CisJCWlmIChzdGF0dXMucXVldWVfZW1wdHkpIHsKKwkJCS8qIFRoZSBjYXJkIHNob3VsZG4ndCBmb3JnZXQgcmVxdWVzdHMgYnV0IHdobyBrbm93cy4gKi8KKwkJCWFwX2Rldi0+cXVldWVfY291bnQgPSAwOworCQkJbGlzdF9zcGxpY2VfaW5pdCgmYXBfZGV2LT5wZW5kaW5ncSwgJmFwX2Rldi0+cmVxdWVzdHEpOworCQkJYXBfZGV2LT5yZXF1ZXN0cV9jb3VudCArPSBhcF9kZXYtPnBlbmRpbmdxX2NvdW50OworCQkJYXBfZGV2LT5wZW5kaW5ncV9jb3VudCA9IDA7CisJCX0gZWxzZQorCQkJKmZsYWdzIHw9IDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBTZW5kIG1lc3NhZ2VzIGZyb20gdGhlIHJlcXVlc3QgcXVldWUgdG8gYW4gQVAgZGV2aWNlLgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlCisgKiBAZmxhZ3M6IHBvaW50ZXIgdG8gY29udHJvbCBmbGFncywgYml0IDJeMCBpcyBzZXQgaWYgYW5vdGhlciBwb2xsIGlzCisgKgkgICByZXF1aXJlZCwgYml0IDJeMSBpcyBzZXQgaWYgdGhlIHBvbGwgdGltZXIgbmVlZHMgdG8gZ2V0IGFybWVkCisgKiBSZXR1cm5zIDAgaWYgdGhlIGRldmljZSBpcyBzdGlsbCBwcmVzZW50LCAtRU5PREVWIGlmIG5vdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgYXBfcG9sbF93cml0ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsIHVuc2lnbmVkIGxvbmcgKmZsYWdzKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2c7CisKKwlpZiAoYXBfZGV2LT5yZXF1ZXN0cV9jb3VudCA8PSAwIHx8CisJICAgIGFwX2Rldi0+cXVldWVfY291bnQgPj0gYXBfZGV2LT5xdWV1ZV9kZXB0aCkKKwkJcmV0dXJuIDA7CisJLyogU3RhcnQgdGhlIG5leHQgcmVxdWVzdCBvbiB0aGUgcXVldWUuICovCisJYXBfbXNnID0gbGlzdF9lbnRyeShhcF9kZXYtPnJlcXVlc3RxLm5leHQsIHN0cnVjdCBhcF9tZXNzYWdlLCBsaXN0KTsKKwlzdGF0dXMgPSBfX2FwX3NlbmQoYXBfZGV2LT5xaWQsIGFwX21zZy0+cHNtaWQsCisJCQkgICBhcF9tc2ctPm1lc3NhZ2UsIGFwX21zZy0+bGVuZ3RoKTsKKwlzd2l0Y2ggKHN0YXR1cy5yZXNwb25zZV9jb2RlKSB7CisJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6CisJCWF0b21pY19pbmMoJmFwX3BvbGxfcmVxdWVzdHMpOworCQlhcF9kZXYtPnF1ZXVlX2NvdW50Kys7CisJCWxpc3RfbW92ZV90YWlsKCZhcF9tc2ctPmxpc3QsICZhcF9kZXYtPnBlbmRpbmdxKTsKKwkJYXBfZGV2LT5yZXF1ZXN0cV9jb3VudC0tOworCQlhcF9kZXYtPnBlbmRpbmdxX2NvdW50Kys7CisJCWlmIChhcF9kZXYtPnF1ZXVlX2NvdW50IDwgYXBfZGV2LT5xdWV1ZV9kZXB0aCAmJgorCQkgICAgYXBfZGV2LT5yZXF1ZXN0cV9jb3VudCA+IDApCisJCQkqZmxhZ3MgfD0gMTsKKwkJKmZsYWdzIHw9IDI7CisJCWJyZWFrOworCWNhc2UgQVBfUkVTUE9OU0VfUV9GVUxMOgorCQkqZmxhZ3MgfD0gMjsKKwkJYnJlYWs7CisJY2FzZSBBUF9SRVNQT05TRV9NRVNTQUdFX1RPT19CSUc6CisJCXJldHVybiAtRUlOVkFMOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBQb2xsIEFQIGRldmljZSBmb3IgcGVuZGluZyByZXBsaWVzIGFuZCBzZW5kIG5ldyBtZXNzYWdlcy4gSWYgZWl0aGVyCisgKiBhcF9wb2xsX3JlYWQgb3IgYXBfcG9sbF93cml0ZSByZXR1cm5zIC1FTk9ERVYgdW5yZWdpc3RlciB0aGUgZGV2aWNlLgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgYnVzIGRldmljZQorICogQGZsYWdzOiBwb2ludGVyIHRvIGNvbnRyb2wgZmxhZ3MsIGJpdCAyXjAgaXMgc2V0IGlmIGFub3RoZXIgcG9sbCBpcworICoJICAgcmVxdWlyZWQsIGJpdCAyXjEgaXMgc2V0IGlmIHRoZSBwb2xsIHRpbWVyIG5lZWRzIHRvIGdldCBhcm1lZAorICogUmV0dXJucyAwLgorICovCitzdGF0aWMgaW5saW5lIGludCBhcF9wb2xsX3F1ZXVlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJaW50IHJjOworCisJcmMgPSBhcF9wb2xsX3JlYWQoYXBfZGV2LCBmbGFncyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisJcmV0dXJuIGFwX3BvbGxfd3JpdGUoYXBfZGV2LCBmbGFncyk7Cit9CisKKy8qKgorICogUXVldWUgYSBtZXNzYWdlIHRvIGEgZGV2aWNlLgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlCisgKiBAYXBfbXNnOiB0aGUgbWVzc2FnZSB0byBiZSBxdWV1ZWQKKyAqLworc3RhdGljIGludCBfX2FwX3F1ZXVlX21lc3NhZ2Uoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2LCBzdHJ1Y3QgYXBfbWVzc2FnZSAqYXBfbXNnKQoreworCXN0cnVjdCBhcF9xdWV1ZV9zdGF0dXMgc3RhdHVzOworCisJaWYgKGxpc3RfZW1wdHkoJmFwX2Rldi0+cmVxdWVzdHEpICYmCisJICAgIGFwX2Rldi0+cXVldWVfY291bnQgPCBhcF9kZXYtPnF1ZXVlX2RlcHRoKSB7CisJCXN0YXR1cyA9IF9fYXBfc2VuZChhcF9kZXYtPnFpZCwgYXBfbXNnLT5wc21pZCwKKwkJCQkgICBhcF9tc2ctPm1lc3NhZ2UsIGFwX21zZy0+bGVuZ3RoKTsKKwkJc3dpdGNoIChzdGF0dXMucmVzcG9uc2VfY29kZSkgeworCQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKKwkJCWxpc3RfYWRkX3RhaWwoJmFwX21zZy0+bGlzdCwgJmFwX2Rldi0+cGVuZGluZ3EpOworCQkJYXRvbWljX2luYygmYXBfcG9sbF9yZXF1ZXN0cyk7CisJCQlhcF9kZXYtPnBlbmRpbmdxX2NvdW50Kys7CisJCQlhcF9kZXYtPnF1ZXVlX2NvdW50Kys7CisJCQlhcF9kZXYtPnRvdGFsX3JlcXVlc3RfY291bnQrKzsKKwkJCWJyZWFrOworCQljYXNlIEFQX1JFU1BPTlNFX1FfRlVMTDoKKwkJCWxpc3RfYWRkX3RhaWwoJmFwX21zZy0+bGlzdCwgJmFwX2Rldi0+cmVxdWVzdHEpOworCQkJYXBfZGV2LT5yZXF1ZXN0cV9jb3VudCsrOworCQkJYXBfZGV2LT50b3RhbF9yZXF1ZXN0X2NvdW50Kys7CisJCQlyZXR1cm4gLUVCVVNZOworCQljYXNlIEFQX1JFU1BPTlNFX01FU1NBR0VfVE9PX0JJRzoKKwkJCWFwX2Rldi0+ZHJ2LT5yZWNlaXZlKGFwX2RldiwgYXBfbXNnLCBFUlJfUFRSKC1FSU5WQUwpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQlkZWZhdWx0OgkvKiBEZXZpY2UgaXMgZ29uZS4gKi8KKwkJCWFwX2Rldi0+ZHJ2LT5yZWNlaXZlKGFwX2RldiwgYXBfbXNnLCBFUlJfUFRSKC1FTk9ERVYpKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJfSBlbHNlIHsKKwkJbGlzdF9hZGRfdGFpbCgmYXBfbXNnLT5saXN0LCAmYXBfZGV2LT5yZXF1ZXN0cSk7CisJCWFwX2Rldi0+cmVxdWVzdHFfY291bnQrKzsKKwkJYXBfZGV2LT50b3RhbF9yZXF1ZXN0X2NvdW50Kys7CisJCXJldHVybiAtRUJVU1k7CisJfQorCWFwX3NjaGVkdWxlX3BvbGxfdGltZXIoKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhcF9xdWV1ZV9tZXNzYWdlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2Rldiwgc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYzsKKworCXNwaW5fbG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKKwlpZiAoIWFwX2Rldi0+dW5yZWdpc3RlcmVkKSB7CisJCS8qIE1ha2Ugcm9vbSBvbiB0aGUgcXVldWUgYnkgcG9sbGluZyBmb3IgZmluaXNoZWQgcmVxdWVzdHMuICovCisJCXJjID0gYXBfcG9sbF9xdWV1ZShhcF9kZXYsICZmbGFncyk7CisJCWlmICghcmMpCisJCQlyYyA9IF9fYXBfcXVldWVfbWVzc2FnZShhcF9kZXYsIGFwX21zZyk7CisJCWlmICghcmMpCisJCQl3YWtlX3VwKCZhcF9wb2xsX3dhaXQpOworCX0gZWxzZSB7CisJCWFwX2Rldi0+ZHJ2LT5yZWNlaXZlKGFwX2RldiwgYXBfbXNnLCBFUlJfUFRSKC1FTk9ERVYpKTsKKwkJcmMgPSAwOworCX0KKwlzcGluX3VubG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKKwlpZiAocmMgPT0gLUVOT0RFVikKKwkJZGV2aWNlX3VucmVnaXN0ZXIoJmFwX2Rldi0+ZGV2aWNlKTsKK30KK0VYUE9SVF9TWU1CT0woYXBfcXVldWVfbWVzc2FnZSk7CisKKy8qKgorICogQ2FuY2VsIGEgY3J5cHRvIHJlcXVlc3QuIFRoaXMgaXMgZG9uZSBieSByZW1vdmluZyB0aGUgcmVxdWVzdAorICogZnJvbSB0aGUgZGV2aXZlIHBlbmRpbmdxIG9yIHJlcXVlc3RxIHF1ZXVlLiBOb3RlIHRoYXQgdGhlCisgKiByZXF1ZXN0IHN0YXlzIG9uIHRoZSBBUCBxdWV1ZS4gV2hlbiBpdCBmaW5pc2hlcyB0aGUgbWVzc2FnZQorICogcmVwbHkgd2lsbCBiZSBkaXNjYXJkZWQgYmVjYXVzZSB0aGUgcHNtaWQgY2FuJ3QgYmUgZm91bmQuCisgKiBAYXBfZGV2OiBBUCBkZXZpY2UgdGhhdCBoYXMgdGhlIG1lc3NhZ2UgcXVldWVkCisgKiBAYXBfbXNnOiB0aGUgbWVzc2FnZSB0aGF0IGlzIHRvIGJlIHJlbW92ZWQKKyAqLwordm9pZCBhcF9jYW5jZWxfbWVzc2FnZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2cpCit7CisJc3RydWN0IGFwX21lc3NhZ2UgKnRtcDsKKworCXNwaW5fbG9ja19iaCgmYXBfZGV2LT5sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJmFwX21zZy0+bGlzdCkpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZhcF9kZXYtPnBlbmRpbmdxLCBsaXN0KQorCQkJaWYgKHRtcC0+cHNtaWQgPT0gYXBfbXNnLT5wc21pZCkgeworCQkJCWFwX2Rldi0+cGVuZGluZ3FfY291bnQtLTsKKwkJCQlnb3RvIGZvdW5kOworCQkJfQorCQlhcF9kZXYtPnJlcXVlc3RxX2NvdW50LS07CisJZm91bmQ6CisJCWxpc3RfZGVsX2luaXQoJmFwX21zZy0+bGlzdCk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZhcF9kZXYtPmxvY2spOworfQorRVhQT1JUX1NZTUJPTChhcF9jYW5jZWxfbWVzc2FnZSk7CisKKy8qKgorICogQVAgcmVjZWl2ZSBwb2xsaW5nIGZvciBmaW5pc2hlZCBBUCByZXF1ZXN0cworICovCitzdGF0aWMgdm9pZCBhcF9wb2xsX3RpbWVvdXQodW5zaWduZWQgbG9uZyB1bnVzZWQpCit7CisJdGFza2xldF9zY2hlZHVsZSgmYXBfdGFza2xldCk7Cit9CisKKy8qKgorICogUG9sbCBhbGwgQVAgZGV2aWNlcyBvbiB0aGUgYnVzIGluIGEgcm91bmQgcm9iaW4gZmFzaGlvbi4gQ29udGludWUKKyAqIHBvbGxpbmcgdW50aWwgYml0IDJeMCBvZiB0aGUgY29udHJvbCBmbGFncyBpcyBub3Qgc2V0LiBJZiBiaXQgMl4xCisgKiBvZiB0aGUgY29udHJvbCBmbGFncyBoYXMgYmVlbiBzZXQgYXJtIHRoZSBwb2xsIHRpbWVyLgorICovCitzdGF0aWMgaW50IF9fYXBfcG9sbF9hbGwoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiA9IHRvX2FwX2RldihkZXYpOworCWludCByYzsKKworCXNwaW5fbG9jaygmYXBfZGV2LT5sb2NrKTsKKwlpZiAoIWFwX2Rldi0+dW5yZWdpc3RlcmVkKSB7CisJCXJjID0gYXBfcG9sbF9xdWV1ZSh0b19hcF9kZXYoZGV2KSwgKHVuc2lnbmVkIGxvbmcgKikgZGF0YSk7CisJfSBlbHNlCisJCXJjID0gMDsKKwlzcGluX3VubG9jaygmYXBfZGV2LT5sb2NrKTsKKwlpZiAocmMpCisJCWRldmljZV91bnJlZ2lzdGVyKCZhcF9kZXYtPmRldmljZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFwX3BvbGxfYWxsKHVuc2lnbmVkIGxvbmcgZHVtbXkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRvIHsKKwkJZmxhZ3MgPSAwOworCQlidXNfZm9yX2VhY2hfZGV2KCZhcF9idXNfdHlwZSwgTlVMTCwgJmZsYWdzLCBfX2FwX3BvbGxfYWxsKTsKKwl9IHdoaWxlIChmbGFncyAmIDEpOworCWlmIChmbGFncyAmIDIpCisJCWFwX3NjaGVkdWxlX3BvbGxfdGltZXIoKTsKK30KKworLyoqCisgKiBBUCBidXMgcG9sbCB0aHJlYWQuIFRoZSBwdXJwb3NlIG9mIHRoaXMgdGhyZWFkIGlzIHRvIHBvbGwgZm9yCisgKiBmaW5pc2hlZCByZXF1ZXN0cyBpbiBhIGxvb3AgaWYgdGhlcmUgaXMgYSAiZnJlZSIgY3B1IC0gdGhhdCBpcworICogYSBjcHUgdGhhdCBkb2Vzbid0IGhhdmUgYW55dGhpbmcgYmV0dGVyIHRvIGRvLiBUaGUgcG9sbGluZyBzdG9wcworICogYXMgc29vbiBhcyB0aGVyZSBpcyBhbm90aGVyIHRhc2sgb3IgaWYgYWxsIG1lc3NhZ2VzIGhhdmUgYmVlbgorICogZGVsaXZlcmVkLgorICovCitzdGF0aWMgaW50IGFwX3BvbGxfdGhyZWFkKHZvaWQgKmRhdGEpCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmVxdWVzdHM7CisKKwlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CisJd2hpbGUgKDEpIHsKKwkJaWYgKG5lZWRfcmVzY2hlZCgpKSB7CisJCQlzY2hlZHVsZSgpOworCQkJY29udGludWU7CisJCX0KKwkJYWRkX3dhaXRfcXVldWUoJmFwX3BvbGxfd2FpdCwgJndhaXQpOworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJYnJlYWs7CisJCXJlcXVlc3RzID0gYXRvbWljX3JlYWQoJmFwX3BvbGxfcmVxdWVzdHMpOworCQlpZiAocmVxdWVzdHMgPD0gMCkKKwkJCXNjaGVkdWxlKCk7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCXJlbW92ZV93YWl0X3F1ZXVlKCZhcF9wb2xsX3dhaXQsICZ3YWl0KTsKKworCQlsb2NhbF9iaF9kaXNhYmxlKCk7CisJCWZsYWdzID0gMDsKKwkJYnVzX2Zvcl9lYWNoX2RldigmYXBfYnVzX3R5cGUsIE5VTEwsICZmbGFncywgX19hcF9wb2xsX2FsbCk7CisJCWxvY2FsX2JoX2VuYWJsZSgpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZhcF9wb2xsX3dhaXQsICZ3YWl0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcF9wb2xsX3RocmVhZF9zdGFydCh2b2lkKQoreworCWludCByYzsKKworCW11dGV4X2xvY2soJmFwX3BvbGxfdGhyZWFkX211dGV4KTsKKwlpZiAoIWFwX3BvbGxfa3RocmVhZCkgeworCQlhcF9wb2xsX2t0aHJlYWQgPSBrdGhyZWFkX3J1bihhcF9wb2xsX3RocmVhZCwgTlVMTCwgImFwcG9sbCIpOworCQlyYyA9IElTX0VSUihhcF9wb2xsX2t0aHJlYWQpID8gUFRSX0VSUihhcF9wb2xsX2t0aHJlYWQpIDogMDsKKwkJaWYgKHJjKQorCQkJYXBfcG9sbF9rdGhyZWFkID0gTlVMTDsKKwl9CisJZWxzZQorCQlyYyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZhcF9wb2xsX3RocmVhZF9tdXRleCk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZCBhcF9wb2xsX3RocmVhZF9zdG9wKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmYXBfcG9sbF90aHJlYWRfbXV0ZXgpOworCWlmIChhcF9wb2xsX2t0aHJlYWQpIHsKKwkJa3RocmVhZF9zdG9wKGFwX3BvbGxfa3RocmVhZCk7CisJCWFwX3BvbGxfa3RocmVhZCA9IE5VTEw7CisJfQorCW11dGV4X3VubG9jaygmYXBfcG9sbF90aHJlYWRfbXV0ZXgpOworfQorCisvKioKKyAqIFRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqLworaW50IF9faW5pdCBhcF9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByYywgaTsKKworCWlmIChhcF9kb21haW5faW5kZXggPCAtMSB8fCBhcF9kb21haW5faW5kZXggPj0gQVBfRE9NQUlOUykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlkIHBhcmFtOiBkb21haW4gPSAlZC4gIgorCQkgICAgICAgIiBOb3QgbG9hZGluZy5cbiIsIGFwX2RvbWFpbl9pbmRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoYXBfaW5zdHJ1Y3Rpb25zX2F2YWlsYWJsZSgpICE9IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVAgaW5zdHJ1Y3Rpb25zIG5vdCBpbnN0YWxsZWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJLyogQ3JlYXRlIC9zeXMvYnVzL2FwLiAqLworCXJjID0gYnVzX3JlZ2lzdGVyKCZhcF9idXNfdHlwZSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwlmb3IgKGkgPSAwOyBhcF9idXNfYXR0cnNbaV07IGkrKykgeworCQlyYyA9IGJ1c19jcmVhdGVfZmlsZSgmYXBfYnVzX3R5cGUsIGFwX2J1c19hdHRyc1tpXSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X2J1czsKKwl9CisKKwkvKiBDcmVhdGUgL3N5cy9kZXZpY2VzL2FwLiAqLworCWFwX3Jvb3RfZGV2aWNlID0gczM5MF9yb290X2Rldl9yZWdpc3RlcigiYXAiKTsKKwlyYyA9IElTX0VSUihhcF9yb290X2RldmljZSkgPyBQVFJfRVJSKGFwX3Jvb3RfZGV2aWNlKSA6IDA7CisJaWYgKHJjKQorCQlnb3RvIG91dF9idXM7CisKKwlhcF93b3JrX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImthcHdvcmsiKTsKKwlpZiAoIWFwX3dvcmtfcXVldWUpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yb290OworCX0KKworCWlmIChhcF9zZWxlY3RfZG9tYWluKCkgPT0gMCkKKwkJYXBfc2Nhbl9idXMoTlVMTCk7CisKKwkvKiBTZXR1cCB0aGUgYXAgYnVzIHJlc2NhbiB0aW1lci4gKi8KKwlpbml0X3RpbWVyKCZhcF9jb25maWdfdGltZXIpOworCWFwX2NvbmZpZ190aW1lci5mdW5jdGlvbiA9IGFwX2NvbmZpZ190aW1lb3V0OworCWFwX2NvbmZpZ190aW1lci5kYXRhID0gMDsKKwlhcF9jb25maWdfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBhcF9jb25maWdfdGltZSAqIEhaOworCWFkZF90aW1lcigmYXBfY29uZmlnX3RpbWVyKTsKKworCS8qIFN0YXJ0IHRoZSBsb3cgcHJpb3JpdHkgQVAgYnVzIHBvbGwgdGhyZWFkLiAqLworCWlmIChhcF90aHJlYWRfZmxhZykgeworCQlyYyA9IGFwX3BvbGxfdGhyZWFkX3N0YXJ0KCk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0X3dvcms7CisJfQorCisJcmV0dXJuIDA7CisKK291dF93b3JrOgorCWRlbF90aW1lcl9zeW5jKCZhcF9jb25maWdfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZhcF9wb2xsX3RpbWVyKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShhcF93b3JrX3F1ZXVlKTsKK291dF9yb290OgorCXMzOTBfcm9vdF9kZXZfdW5yZWdpc3RlcihhcF9yb290X2RldmljZSk7CitvdXRfYnVzOgorCXdoaWxlIChpLS0pCisJCWJ1c19yZW1vdmVfZmlsZSgmYXBfYnVzX3R5cGUsIGFwX2J1c19hdHRyc1tpXSk7CisJYnVzX3VucmVnaXN0ZXIoJmFwX2J1c190eXBlKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19hcF9tYXRjaF9hbGwoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCXJldHVybiAxOworfQorCisvKioKKyAqIFRoZSBtb2R1bGUgdGVybWluYXRpb24gY29kZQorICovCit2b2lkIGFwX21vZHVsZV9leGl0KHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJYXBfcG9sbF90aHJlYWRfc3RvcCgpOworCWRlbF90aW1lcl9zeW5jKCZhcF9jb25maWdfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZhcF9wb2xsX3RpbWVyKTsKKwlkZXN0cm95X3dvcmtxdWV1ZShhcF93b3JrX3F1ZXVlKTsKKwlzMzkwX3Jvb3RfZGV2X3VucmVnaXN0ZXIoYXBfcm9vdF9kZXZpY2UpOworCXdoaWxlICgoZGV2ID0gYnVzX2ZpbmRfZGV2aWNlKCZhcF9idXNfdHlwZSwgTlVMTCwgTlVMTCwKKwkJICAgIF9fYXBfbWF0Y2hfYWxsKSkpCisJeworCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYpOworCQlwdXRfZGV2aWNlKGRldik7CisJfQorCWZvciAoaSA9IDA7IGFwX2J1c19hdHRyc1tpXTsgaSsrKQorCQlidXNfcmVtb3ZlX2ZpbGUoJmFwX2J1c190eXBlLCBhcF9idXNfYXR0cnNbaV0pOworCWJ1c191bnJlZ2lzdGVyKCZhcF9idXNfdHlwZSk7Cit9CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCittb2R1bGVfaW5pdChhcF9tb2R1bGVfaW5pdCk7Cittb2R1bGVfZXhpdChhcF9tb2R1bGVfZXhpdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vYXBfYnVzLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzYjY5YzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL2FwX2J1cy5oCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by9hcF9idXMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBJQk0gQ29ycG9yYXRpb24KKyAqIEF1dGhvcihzKTogQ29ybmVsaWEgSHVjayA8Y29ybmVsaWEuaHVja0BkZS5pYm0uY29tPgorICoJICAgICAgTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICoJICAgICAgUmFscGggV3VlcnRobmVyIDxyd3VlcnRobkBkZS5pYm0uY29tPgorICoKKyAqIEFkanVuY3QgcHJvY2Vzc29yIGJ1cyBoZWFkZXIgZmlsZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0FQX0JVU19IXworI2RlZmluZSBfQVBfQlVTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIEFQX0RFVklDRVMgNjQJCS8qIE51bWJlciBvZiBBUCBkZXZpY2VzLiAqLworI2RlZmluZSBBUF9ET01BSU5TIDE2CQkvKiBOdW1iZXIgb2YgQVAgZG9tYWlucy4gKi8KKyNkZWZpbmUgQVBfTUFYX1JFU0VUIDkwCQkvKiBNYXhpbXVtIG51bWJlciBvZiByZXNldHMuICovCisjZGVmaW5lIEFQX0NPTkZJR19USU1FIDMwCS8qIFRpbWUgaW4gc2Vjb25kcyBiZXR3ZWVuIEFQIGJ1cyByZXNjYW5zLiAqLworI2RlZmluZSBBUF9QT0xMX1RJTUUgMQkJLyogVGltZSBpbiB0aWNrcyBiZXR3ZWVuIHJlY2VpdmUgcG9sbHMuICovCisKK2V4dGVybiBpbnQgYXBfZG9tYWluX2luZGV4OworCisvKioKKyAqIFRoZSBhcF9xaWRfdCBpZGVudGlmaWVyIG9mIGFuIGFwIHF1ZXVlLiBJdCBjb250YWlucyBhCisgKiA2IGJpdCBkZXZpY2UgaW5kZXggYW5kIGEgNCBiaXQgcXVldWUgaW5kZXggKGRvbWFpbikuCisgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGFwX3FpZF90OworCisjZGVmaW5lIEFQX01LUUlEKF9kZXZpY2UsX3F1ZXVlKSAoKChfZGV2aWNlKSAmIDYzKSA8PCA4IHwgKChfcXVldWUpICYgMTUpKQorI2RlZmluZSBBUF9RSURfREVWSUNFKF9xaWQpICgoKF9xaWQpID4+IDgpICYgNjMpCisjZGVmaW5lIEFQX1FJRF9RVUVVRShfcWlkKSAoKF9xaWQpICYgMTUpCisKKy8qKgorICogVGhlIGFwIHF1ZXVlIHN0YXR1cyB3b3JkIGlzIHJldHVybmVkIGJ5IGFsbCB0aHJlZSBBUCBmdW5jdGlvbnMKKyAqIChQUUFQLCBOUUFQIGFuZCBEUUFQKS4gIFRoZXJlJ3MgYSBzZXQgb2YgZmxhZ3MgaW4gdGhlIGZpcnN0CisgKiBieXRlLCBmb2xsb3dlZCBieSBhIDEgYnl0ZSByZXNwb25zZSBjb2RlLgorICovCitzdHJ1Y3QgYXBfcXVldWVfc3RhdHVzIHsKKwl1bnNpZ25lZCBpbnQgcXVldWVfZW1wdHkJOiAxOworCXVuc2lnbmVkIGludCByZXBsaWVzX3dhaXRpbmcJOiAxOworCXVuc2lnbmVkIGludCBxdWV1ZV9mdWxsCQk6IDE7CisJdW5zaWduZWQgaW50IHBhZDEJCTogNTsKKwl1bnNpZ25lZCBpbnQgcmVzcG9uc2VfY29kZQk6IDg7CisJdW5zaWduZWQgaW50IHBhZDIJCTogMTY7Cit9OworCisjZGVmaW5lIEFQX1JFU1BPTlNFX05PUk1BTAkJMHgwMAorI2RlZmluZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTAkJMHgwMQorI2RlZmluZSBBUF9SRVNQT05TRV9SRVNFVF9JTl9QUk9HUkVTUwkweDAyCisjZGVmaW5lIEFQX1JFU1BPTlNFX0RFQ09ORklHVVJFRAkweDAzCisjZGVmaW5lIEFQX1JFU1BPTlNFX0NIRUNLU1RPUFBFRAkweDA0CisjZGVmaW5lIEFQX1JFU1BPTlNFX0JVU1kJCTB4MDUKKyNkZWZpbmUgQVBfUkVTUE9OU0VfUV9GVUxMCQkweDEwCisjZGVmaW5lIEFQX1JFU1BPTlNFX05PX1BFTkRJTkdfUkVQTFkJMHgxMAorI2RlZmluZSBBUF9SRVNQT05TRV9JTkRFWF9UT09fQklHCTB4MTEKKyNkZWZpbmUgQVBfUkVTUE9OU0VfTk9fRklSU1RfUEFSVAkweDEzCisjZGVmaW5lIEFQX1JFU1BPTlNFX01FU1NBR0VfVE9PX0JJRwkweDE1CisKKy8qKgorICogS25vd24gZGV2aWNlIHR5cGVzCisgKi8KKyNkZWZpbmUgQVBfREVWSUNFX1RZUEVfUENJQ0MJMworI2RlZmluZSBBUF9ERVZJQ0VfVFlQRV9QQ0lDQQk0CisjZGVmaW5lIEFQX0RFVklDRV9UWVBFX1BDSVhDQwk1CisjZGVmaW5lIEFQX0RFVklDRV9UWVBFX0NFWDJBCTYKKyNkZWZpbmUgQVBfREVWSUNFX1RZUEVfQ0VYMkMJNworCitzdHJ1Y3QgYXBfZGV2aWNlOworc3RydWN0IGFwX21lc3NhZ2U7CisKK3N0cnVjdCBhcF9kcml2ZXIgeworCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgYXBfZGV2aWNlX2lkICppZHM7CisKKwlpbnQgKCpwcm9iZSkoc3RydWN0IGFwX2RldmljZSAqKTsKKwl2b2lkICgqcmVtb3ZlKShzdHJ1Y3QgYXBfZGV2aWNlICopOworCS8qIHJlY2VpdmUgaXMgY2FsbGVkIGZyb20gdGFza2xldCBjb250ZXh0ICovCisJdm9pZCAoKnJlY2VpdmUpKHN0cnVjdCBhcF9kZXZpY2UgKiwgc3RydWN0IGFwX21lc3NhZ2UgKiwKKwkJCXN0cnVjdCBhcF9tZXNzYWdlICopOworfTsKKworI2RlZmluZSB0b19hcF9kcnYoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IGFwX2RyaXZlciwgZHJpdmVyKQorCitpbnQgYXBfZHJpdmVyX3JlZ2lzdGVyKHN0cnVjdCBhcF9kcml2ZXIgKiwgc3RydWN0IG1vZHVsZSAqLCBjaGFyICopOwordm9pZCBhcF9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgYXBfZHJpdmVyICopOworCitzdHJ1Y3QgYXBfZGV2aWNlIHsKKwlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKKwlzdHJ1Y3QgYXBfZHJpdmVyICpkcnY7CQkvKiBQb2ludGVyIHRvIEFQIGRldmljZSBkcml2ZXIuICovCisJc3BpbmxvY2tfdCBsb2NrOwkJLyogUGVyIGRldmljZSBsb2NrLiAqLworCisJYXBfcWlkX3QgcWlkOwkJCS8qIEFQIHF1ZXVlIGlkLiAqLworCWludCBxdWV1ZV9kZXB0aDsJCS8qIEFQIHF1ZXVlIGRlcHRoLiovCisJaW50IGRldmljZV90eXBlOwkJLyogQVAgZGV2aWNlIHR5cGUuICovCisJaW50IHVucmVnaXN0ZXJlZDsJCS8qIG1hcmtzIEFQIGRldmljZSBhcyB1bnJlZ2lzdGVyZWQgKi8KKworCWludCBxdWV1ZV9jb3VudDsJCS8qICMgbWVzc2FnZXMgY3VycmVudGx5IG9uIEFQIHF1ZXVlLiAqLworCisJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5ncTsJLyogTGlzdCBvZiBtZXNzYWdlIHNlbnQgdG8gQVAgcXVldWUuICovCisJaW50IHBlbmRpbmdxX2NvdW50OwkJLyogIyByZXF1ZXN0cyBvbiBwZW5kaW5ncSBsaXN0LiAqLworCXN0cnVjdCBsaXN0X2hlYWQgcmVxdWVzdHE7CS8qIExpc3Qgb2YgbWVzc2FnZSB5ZXQgdG8gYmUgc2VudC4gKi8KKwlpbnQgcmVxdWVzdHFfY291bnQ7CQkvKiAjIHJlcXVlc3RzIG9uIHJlcXVlc3RxIGxpc3QuICovCisJaW50IHRvdGFsX3JlcXVlc3RfY291bnQ7CS8qICMgcmVxdWVzdHMgZXZlciBmb3IgdGhpcyBBUCBkZXZpY2UuICovCisKKwlzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHk7CS8qIFBlciBkZXZpY2UgcmVwbHkgbWVzc2FnZS4gKi8KKworCXZvaWQgKnByaXZhdGU7CQkJLyogYXAgZHJpdmVyIHByaXZhdGUgcG9pbnRlci4gKi8KK307CisKKyNkZWZpbmUgdG9fYXBfZGV2KHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBhcF9kZXZpY2UsIGRldmljZSkKKworc3RydWN0IGFwX21lc3NhZ2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIFJlcXVlc3QgcXVldWVpbmcuICovCisJdW5zaWduZWQgbG9uZyBsb25nIHBzbWlkOwkvKiBNZXNzYWdlIGlkLiAqLworCXZvaWQgKm1lc3NhZ2U7CQkJLyogUG9pbnRlciB0byBtZXNzYWdlIGJ1ZmZlci4gKi8KKwlzaXplX3QgbGVuZ3RoOwkJCS8qIE1lc3NhZ2UgbGVuZ3RoLiAqLworCisJdm9pZCAqcHJpdmF0ZTsJCQkvKiBhcCBkcml2ZXIgcHJpdmF0ZSBwb2ludGVyLiAqLworfTsKKworI2RlZmluZSBBUF9ERVZJQ0UoZHQpCQkJCQlcCisJLmRldl90eXBlPShkdCksCQkJCQlcCisJLm1hdGNoX2ZsYWdzPUFQX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfVFlQRSwKKworLyoqCisgKiBOb3RlOiBkb24ndCB1c2UgYXBfc2VuZC9hcF9yZWN2IGFmdGVyIHVzaW5nIGFwX3F1ZXVlX21lc3NhZ2UKKyAqIGZvciB0aGUgZmlyc3QgdGltZS4gT3RoZXJ3aXNlIHRoZSBhcCBtZXNzYWdlIHF1ZXVlIHdpbGwgZ2V0CisgKiBjb25mdXNlZC4KKyAqLworaW50IGFwX3NlbmQoYXBfcWlkX3QsIHVuc2lnbmVkIGxvbmcgbG9uZywgdm9pZCAqLCBzaXplX3QpOworaW50IGFwX3JlY3YoYXBfcWlkX3QsIHVuc2lnbmVkIGxvbmcgbG9uZyAqLCB2b2lkICosIHNpemVfdCk7CisKK3ZvaWQgYXBfcXVldWVfbWVzc2FnZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2cpOwordm9pZCBhcF9jYW5jZWxfbWVzc2FnZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2cpOwordm9pZCBhcF9mbHVzaF9xdWV1ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOworCitpbnQgYXBfbW9kdWxlX2luaXQodm9pZCk7Cit2b2lkIGFwX21vZHVsZV9leGl0KHZvaWQpOworCisjZW5kaWYgLyogX0FQX0JVU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjb21tb24uaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiYmNkYTMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjb21tb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY29tbW9uLmgKLSAqCi0gKiAgejkwY3J5cHQgMS4zLjMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24KLSAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMgKGJ1cnJvdWdoQHVzLmlibS5jb20pCi0gKiAgICAgICAgICAgICBFcmljIFJvc3NtYW4gKGVkcm9zc21hQHVzLmlibS5jb20pCi0gKgotICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfWjkwQ09NTU9OX0hfCi0jZGVmaW5lIF9aOTBDT01NT05fSF8KLQotCi0jZGVmaW5lIFJFU1BCVUZGU0laRSAyNTYKLSNkZWZpbmUgUENJX0ZVTkNfS0VZX0RFQ1JZUFQgMHg1MDQ0Ci0jZGVmaW5lIFBDSV9GVU5DX0tFWV9FTkNSWVBUIDB4NTA0QgotZXh0ZXJuIGludCBleHRfYml0bGVuczsKLQotZW51bSBkZXZzdGF0IHsKLQlERVZfR09ORSwKLQlERVZfT05MSU5FLAotCURFVl9RVUVVRV9GVUxMLAotCURFVl9FTVBUWSwKLQlERVZfTk9fV09SSywKLQlERVZfQkFEX01FU1NBR0UsCi0JREVWX1RTUV9FWENFUFRJT04sCi0JREVWX1JTUV9FWENFUFRJT04sCi0JREVWX1NFTl9FWENFUFRJT04sCi0JREVWX1JFQ19FWENFUFRJT04KLX07Ci0KLWVudW0gaGRzdGF0IHsKLQlIRF9OT1RfVEhFUkUsCi0JSERfQlVTWSwKLQlIRF9ERUNPTkZJR1VSRUQsCi0JSERfQ0hFQ0tTVE9QUEVELAotCUhEX09OTElORSwKLQlIRF9UU1FfRVhDRVBUSU9OCi19OwotCi0jZGVmaW5lIFo5MENfTk9fREVWSUNFUwkJMQotI2RlZmluZSBaOTBDX0FNQklHVU9VU19ET01BSU4JMgotI2RlZmluZSBaOTBDX0lOQ09SUkVDVF9ET01BSU4JMwotI2RlZmluZSBFTk9USU5JVAkJNAotCi0jZGVmaW5lIFNFTl9CVVNZCSA3Ci0jZGVmaW5lIFNFTl9VU0VSX0VSUk9SCSA4Ci0jZGVmaW5lIFNFTl9RVUVVRV9GVUxMCTExCi0jZGVmaW5lIFNFTl9OT1RfQVZBSUwJMTYKLSNkZWZpbmUgU0VOX1BBRF9FUlJPUgkxNwotI2RlZmluZSBTRU5fUkVUUlkJMTgKLSNkZWZpbmUgU0VOX1JFTEVBU0VECTI0Ci0KLSNkZWZpbmUgUkVDX0VNUFRZCSA0Ci0jZGVmaW5lIFJFQ19CVVNZCSA2Ci0jZGVmaW5lIFJFQ19PUEVSQU5EX0lOVgkgOAotI2RlZmluZSBSRUNfT1BFUkFORF9TSVpFIDkKLSNkZWZpbmUgUkVDX0VWRU5fTU9ECTEwCi0jZGVmaW5lIFJFQ19OT19XT1JLCTExCi0jZGVmaW5lIFJFQ19IQVJEV0FSX0VSUgkxMgotI2RlZmluZSBSRUNfTk9fUkVTUE9OU0UJMTMKLSNkZWZpbmUgUkVDX1JFVFJZX0RFVgkxNAotI2RlZmluZSBSRUNfVVNFUl9HT05FCTE1Ci0jZGVmaW5lIFJFQ19CQURfTUVTU0FHRQkxNgotI2RlZmluZSBSRUNfSU5WQUxJRF9QQUQJMTcKLSNkZWZpbmUgUkVDX1VTRV9QQ0lDQQkxOAotCi0jZGVmaW5lIFdST05HX0RFVklDRV9UWVBFIDIwCi0KLSNkZWZpbmUgUkVDX0ZBVEFMX0VSUk9SIDMyCi0jZGVmaW5lIFNFTl9GQVRBTF9FUlJPUiAzMwotI2RlZmluZSBUU1FfRkFUQUxfRVJST1IgMzQKLSNkZWZpbmUgUlNRX0ZBVEFMX0VSUk9SIDM1Ci0KLSNkZWZpbmUgWjkwQ1JZUFRfTlVNX1RZUEVTCTYKLSNkZWZpbmUgUENJQ0EJCTAKLSNkZWZpbmUgUENJQ0MJCTEKLSNkZWZpbmUgUENJWENDX01DTDIJMgotI2RlZmluZSBQQ0lYQ0NfTUNMMwkzCi0jZGVmaW5lIENFWDJDCQk0Ci0jZGVmaW5lIENFWDJBCQk1Ci0jZGVmaW5lIE5JTERFVgkJLTEKLSNkZWZpbmUgQU5ZREVWCQktMQotI2RlZmluZSBQQ0lYQ0NfVU5LCS0yCi0KLWVudW0gaGRldmljZV90eXBlIHsKLQlQQ0lDQ19IVyAgPSAzLAotCVBDSUNBX0hXICA9IDQsCi0JUENJWENDX0hXID0gNSwKLQlDRVgyQV9IVyAgPSA2LAotCUNFWDJDX0hXICA9IDcKLX07Ci0KLXN0cnVjdCBDUFJCWCB7Ci0JdW5zaWduZWQgc2hvcnQgY3ByYl9sZW47Ci0JdW5zaWduZWQgY2hhciAgY3ByYl92ZXJfaWQ7Ci0JdW5zaWduZWQgY2hhciAgcGFkXzAwMFszXTsKLQl1bnNpZ25lZCBjaGFyICBmdW5jX2lkWzJdOwotCXVuc2lnbmVkIGNoYXIgIGNwcmJfZmxhZ3NbNF07Ci0JdW5zaWduZWQgaW50ICAgcmVxX3Bhcm1sOwotCXVuc2lnbmVkIGludCAgIHJlcV9kYXRhbDsKLQl1bnNpZ25lZCBpbnQgICBycGxfbXNnYmw7Ci0JdW5zaWduZWQgaW50ICAgcnBsZF9wYXJtbDsKLQl1bnNpZ25lZCBpbnQgICBycGxfZGF0YWw7Ci0JdW5zaWduZWQgaW50ICAgcnBsZF9kYXRhbDsKLQl1bnNpZ25lZCBpbnQgICByZXFfZXh0Ymw7Ci0JdW5zaWduZWQgY2hhciAgcGFkXzAwMVs0XTsKLQl1bnNpZ25lZCBpbnQgICBycGxkX2V4dGJsOwotCXVuc2lnbmVkIGNoYXIgIHJlcV9wYXJtYlsxNl07Ci0JdW5zaWduZWQgY2hhciAgcmVxX2RhdGFiWzE2XTsKLQl1bnNpZ25lZCBjaGFyICBycGxfcGFybWJbMTZdOwotCXVuc2lnbmVkIGNoYXIgIHJwbF9kYXRhYlsxNl07Ci0JdW5zaWduZWQgY2hhciAgcmVxX2V4dGJbMTZdOwotCXVuc2lnbmVkIGNoYXIgIHJwbF9leHRiWzE2XTsKLQl1bnNpZ25lZCBzaG9ydCBjY3BfcnRjb2RlOwotCXVuc2lnbmVkIHNob3J0IGNjcF9yc2NvZGU7Ci0JdW5zaWduZWQgaW50ICAgbWFjX2RhdGFfbGVuOwotCXVuc2lnbmVkIGNoYXIgIGxvZ29uX2lkWzhdOwotCXVuc2lnbmVkIGNoYXIgIG1hY192YWx1ZVs4XTsKLQl1bnNpZ25lZCBjaGFyICBtYWNfY29udGVudF9mbGdzOwotCXVuc2lnbmVkIGNoYXIgIHBhZF8wMDI7Ci0JdW5zaWduZWQgc2hvcnQgZG9tYWluOwotCXVuc2lnbmVkIGNoYXIgIHBhZF8wMDNbMTJdOwotCXVuc2lnbmVkIGNoYXIgIHBhZF8wMDRbMzZdOwotfTsKLQotI2lmbmRlZiBERVZfTkFNRQotI2RlZmluZSBERVZfTkFNRQkiejkwY3J5cHQiCi0jZW5kaWYKLSNkZWZpbmUgUFJJTlRLKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHIERFVl9OQU1FICI6ICVzIC0+ICIgZm10LCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKQotI2RlZmluZSBQUklOVEtOKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHIERFVl9OQU1FICI6ICIgZm10LCAjIyBhcmdzKQotI2RlZmluZSBQUklOVEtXKGZtdCwgYXJncy4uLikgXAotCXByaW50ayhLRVJOX1dBUk5JTkcgREVWX05BTUUgIjogJXMgLT4gIiBmbXQsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpCi0jZGVmaW5lIFBSSU5US0MoZm10LCBhcmdzLi4uKSBcCi0JcHJpbnRrKEtFUk5fQ1JJVCBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykKLQotI2lmZGVmIFo5MENSWVBUX0RFQlVHCi0jZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgVU1JTihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIElTX0VWRU4oeCkgKCh4KSA9PSAoMiAqICgoeCkgLyAyKSkpCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwY2ExZDEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwY3J5cHQuaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLS8qCi0gKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96OTBjcnlwdC5oCi0gKgotICogIHo5MGNyeXB0IDEuMy4zIChrZXJuZWwtcHJpdmF0ZSBoZWFkZXIpCi0gKgotICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uCi0gKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzIChidXJyb3VnaEB1cy5pYm0uY29tKQotICogICAgICAgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQotICoKLSAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKLSAqIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpZm5kZWYgX1o5MENSWVBUX0hfCi0jZGVmaW5lIF9aOTBDUllQVF9IXwotCi0jaW5jbHVkZSA8YXNtL3o5MGNyeXB0Lmg+Ci0KLS8qKgotICogbG9jYWwgZXJybm8gZGVmaW5pdGlvbnMKLSAqLwotI2RlZmluZSBFTk9CVUZGCSAgMTI5CS8vIGZpbHAtPnByaXZhdGVfZGF0YS0+Li4uPndvcmtfZWxlbV9wLT5idWZmZXIgaXMgTlVMTAotI2RlZmluZSBFV09SS1BFTkQgMTMwCS8vIHVzZXIgaXNzdWVzIGlvY3RsIHdoaWxlIGFub3RoZXIgcGVuZGluZwotI2RlZmluZSBFUkVMRUFTRUQgMTMxCS8vIHVzZXIgcmVsZWFzZWQgd2hpbGUgaW9jdGwgcGVuZGluZwotI2RlZmluZSBFUVVJRVNDRSAgMTMyCS8vIHo5MGNyeXB0IHF1aWVzY2luZyAobm8gbW9yZSB3b3JrIGFsbG93ZWQpCi0jZGVmaW5lIEVUSU1FT1VUICAxMzMJLy8gcmVxdWVzdCB0aW1lZCBvdXQKLSNkZWZpbmUgRVVOS05PV04gIDEzNAkvLyBzb21lIHVucmVjb2duaXplZCBlcnJvciBvY2N1cmVkIChyZXRyeSBtYXkgc3VjY2VlZCkKLSNkZWZpbmUgRUdFVEJVRkYgIDEzNQkvLyBFcnJvciBnZXR0aW5nIGJ1ZmZlciBvciBoYXJkd2FyZSBsYWNrcyBjYXBhYmlsaXR5Ci0JCQkvLyAocmV0cnkgaW4gc29mdHdhcmUpCi0KLS8qKgotICogREVQUkVDQVRFRCBTVFJVQ1RVUkVTCi0gKi8KLQotLyoqCi0gKiBUaGlzIHN0cnVjdHVyZSBpcyBERVBSRUNBVEVEIGFuZCB0aGUgY29ycmVzcG9uZGluZyBpb2N0bCgpIGhhcyBiZWVuCi0gKiByZXBsYWNlZCB3aXRoIGluZGl2aWR1YWwgaW9jdGwoKXMgZm9yIGVhY2ggcGllY2Ugb2YgZGF0YSEKLSAqIFRoaXMgc3RydWN0dXJlIHdpbGwgTk9UIHN1cnZpdmUgcGFzdCB2ZXJzaW9uIDEuMy4xLCBzbyBzd2l0Y2ggdG8gdGhlCi0gKiBuZXcgaW9jdGwoKXMuCi0gKi8KLSNkZWZpbmUgTUFTS19MRU5HVEggNjQgLy8gbWFzayBsZW5ndGgKLXN0cnVjdCBpY2FfejkwX3N0YXR1cyB7Ci0JaW50IHRvdGFsY291bnQ7Ci0JaW50IGxlZWRzbGl0ZWNvdW50OyAvLyBQQ0lDQQotCWludCBsZWVkczJjb3VudDsgICAgLy8gUENJQ0MKLQkvLyBpbnQgUENJWENDQ291bnQ7IGlzIG5vdCBpbiBzdHJ1Y3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKLQlpbnQgcmVxdWVzdHFXYWl0Q291bnQ7Ci0JaW50IHBlbmRpbmdxV2FpdENvdW50OwotCWludCB0b3RhbE9wZW5Db3VudDsKLQlpbnQgY3J5cHRvRG9tYWluOwotCS8vIHN0YXR1czogMD1ub3QgdGhlcmUsIDE9UENJQ0EsIDI9UENJQ0MsIDM9UENJWENDX01DTDIsIDQ9UENJWENDX01DTDMsCi0JLy8gICAgICAgICA1PUNFWDJDCi0JdW5zaWduZWQgY2hhciBzdGF0dXNbTUFTS19MRU5HVEhdOwotCS8vIHFkZXB0aDogIyB3b3JrIGVsZW1lbnRzIHdhaXRpbmcgZm9yIGVhY2ggZGV2aWNlCi0JdW5zaWduZWQgY2hhciBxZGVwdGhbTUFTS19MRU5HVEhdOwotfTsKLQotI2VuZGlmIC8qIF9aOTBDUllQVF9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBoYXJkd2FyZS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96OTBoYXJkd2FyZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZTYwNzk1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvczM5MC9jcnlwdG8vejkwaGFyZHdhcmUuYworKysgL2Rldi9udWxsCkBAIC0xLDI1MzEgKzAsMCBAQAotLyoKLSAqICBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MGhhcmR3YXJlLmMKLSAqCi0gKiAgejkwY3J5cHQgMS4zLjMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNSBJQk0gQ29ycG9yYXRpb24KLSAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMgKGJ1cnJvdWdoQHVzLmlibS5jb20pCi0gKiAgICAgICAgICAgICBFcmljIFJvc3NtYW4gKGVkcm9zc21hQHVzLmlibS5jb20pCi0gKgotICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlICJ6OTBjcnlwdC5oIgotI2luY2x1ZGUgIno5MGNvbW1vbi5oIgotCi1zdHJ1Y3QgY2NhX3Rva2VuX2hkciB7Ci0JdW5zaWduZWQgY2hhciAgdG9rZW5faWRlbnRpZmllcjsKLQl1bnNpZ25lZCBjaGFyICB2ZXJzaW9uOwotCXVuc2lnbmVkIHNob3J0IHRva2VuX2xlbmd0aDsKLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZFs0XTsKLX07Ci0KLSNkZWZpbmUgQ0NBX1RLTl9IRFJfSURfRVhUIDB4MUUKLQotc3RydWN0IGNjYV9wcml2YXRlX2V4dF9NRV9zZWMgewotCXVuc2lnbmVkIGNoYXIgIHNlY3Rpb25faWRlbnRpZmllcjsKLQl1bnNpZ25lZCBjaGFyICB2ZXJzaW9uOwotCXVuc2lnbmVkIHNob3J0IHNlY3Rpb25fbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgIHByaXZhdGVfa2V5X2hhc2hbMjBdOwotCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkMVs0XTsKLQl1bnNpZ25lZCBjaGFyICBrZXlfZm9ybWF0OwotCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkMjsKLQl1bnNpZ25lZCBjaGFyICBrZXlfbmFtZV9oYXNoWzIwXTsKLQl1bnNpZ25lZCBjaGFyICBrZXlfdXNlX2ZsYWdzWzRdOwotCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkM1s2XTsKLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDRbMjRdOwotCXVuc2lnbmVkIGNoYXIgIGNvbmZvdW5kZXJbMjRdOwotCXVuc2lnbmVkIGNoYXIgIGV4cG9uZW50WzEyOF07Ci0JdW5zaWduZWQgY2hhciAgbW9kdWx1c1sxMjhdOwotfTsKLQotI2RlZmluZSBDQ0FfUFZUX1VTQUdFX0FMTCAweDgwCi0KLXN0cnVjdCBjY2FfcHVibGljX3NlYyB7Ci0JdW5zaWduZWQgY2hhciAgc2VjdGlvbl9pZGVudGlmaWVyOwotCXVuc2lnbmVkIGNoYXIgIHZlcnNpb247Ci0JdW5zaWduZWQgc2hvcnQgc2VjdGlvbl9sZW5ndGg7Ci0JdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWRbMl07Ci0JdW5zaWduZWQgc2hvcnQgZXhwb25lbnRfbGVuOwotCXVuc2lnbmVkIHNob3J0IG1vZHVsdXNfYml0X2xlbjsKLQl1bnNpZ25lZCBzaG9ydCBtb2R1bHVzX2J5dGVfbGVuOwotCXVuc2lnbmVkIGNoYXIgIGV4cG9uZW50WzNdOwotfTsKLQotc3RydWN0IGNjYV9wcml2YXRlX2V4dF9NRSB7Ci0Jc3RydWN0IGNjYV90b2tlbl9oZHIJICAgICAgcHZ0TUVIZHI7Ci0Jc3RydWN0IGNjYV9wcml2YXRlX2V4dF9NRV9zZWMgcHZ0TUVTZWM7Ci0Jc3RydWN0IGNjYV9wdWJsaWNfc2VjCSAgICAgIHB1Yk1FU2VjOwotfTsKLQotc3RydWN0IGNjYV9wdWJsaWNfa2V5IHsKLQlzdHJ1Y3QgY2NhX3Rva2VuX2hkciAgcHViSGRyOwotCXN0cnVjdCBjY2FfcHVibGljX3NlYyBwdWJTZWM7Ci19OwotCi1zdHJ1Y3QgY2NhX3B2dF9leHRfQ1JUX3NlYyB7Ci0JdW5zaWduZWQgY2hhciAgc2VjdGlvbl9pZGVudGlmaWVyOwotCXVuc2lnbmVkIGNoYXIgIHZlcnNpb247Ci0JdW5zaWduZWQgc2hvcnQgc2VjdGlvbl9sZW5ndGg7Ci0JdW5zaWduZWQgY2hhciAgcHJpdmF0ZV9rZXlfaGFzaFsyMF07Ci0JdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWQxWzRdOwotCXVuc2lnbmVkIGNoYXIgIGtleV9mb3JtYXQ7Ci0JdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWQyOwotCXVuc2lnbmVkIGNoYXIgIGtleV9uYW1lX2hhc2hbMjBdOwotCXVuc2lnbmVkIGNoYXIgIGtleV91c2VfZmxhZ3NbNF07Ci0JdW5zaWduZWQgc2hvcnQgcF9sZW47Ci0JdW5zaWduZWQgc2hvcnQgcV9sZW47Ci0JdW5zaWduZWQgc2hvcnQgZHBfbGVuOwotCXVuc2lnbmVkIHNob3J0IGRxX2xlbjsKLQl1bnNpZ25lZCBzaG9ydCB1X2xlbjsKLQl1bnNpZ25lZCBzaG9ydCBtb2RfbGVuOwotCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkM1s0XTsKLQl1bnNpZ25lZCBzaG9ydCBwYWRfbGVuOwotCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkNFs1Ml07Ci0JdW5zaWduZWQgY2hhciAgY29uZm91bmRlcls4XTsKLX07Ci0KLSNkZWZpbmUgQ0NBX1BWVF9FWFRfQ1JUX1NFQ19JRF9QVlQgMHgwOAotI2RlZmluZSBDQ0FfUFZUX0VYVF9DUlRfU0VDX0ZNVF9DTCAweDQwCi0KLXN0cnVjdCBjY2FfcHJpdmF0ZV9leHRfQ1JUIHsKLQlzdHJ1Y3QgY2NhX3Rva2VuX2hkcgkgICBwdnRDcnRIZHI7Ci0Jc3RydWN0IGNjYV9wdnRfZXh0X0NSVF9zZWMgcHZ0Q3J0U2VjOwotCXN0cnVjdCBjY2FfcHVibGljX3NlYwkgICBwdWJDcnRTZWM7Ci19OwotCi1zdHJ1Y3QgYXBfc3RhdHVzX3dvcmQgewotCXVuc2lnbmVkIGNoYXIgcV9zdGF0X2ZsYWdzOwotCXVuc2lnbmVkIGNoYXIgcmVzcG9uc2VfY29kZTsKLQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkWzJdOwotfTsKLQotI2RlZmluZSBBUF9RX1NUQVRVU19FTVBUWQkJMHg4MAotI2RlZmluZSBBUF9RX1NUQVRVU19SRVBMSUVTX1dBSVRJTkcJMHg0MAotI2RlZmluZSBBUF9RX1NUQVRVU19BUlJBWV9GVUxMCQkweDIwCi0KLSNkZWZpbmUgQVBfUkVTUE9OU0VfTk9STUFMCQkweDAwCi0jZGVmaW5lIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMCQkweDAxCi0jZGVmaW5lIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTCTB4MDIKLSNkZWZpbmUgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVECTB4MDMKLSNkZWZpbmUgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVECTB4MDQKLSNkZWZpbmUgQVBfUkVTUE9OU0VfQlVTWQkJMHgwNQotI2RlZmluZSBBUF9SRVNQT05TRV9RX0ZVTEwJCTB4MTAKLSNkZWZpbmUgQVBfUkVTUE9OU0VfTk9fUEVORElOR19SRVBMWQkweDEwCi0jZGVmaW5lIEFQX1JFU1BPTlNFX0lOREVYX1RPT19CSUcJMHgxMQotI2RlZmluZSBBUF9SRVNQT05TRV9OT19GSVJTVF9QQVJUCTB4MTMKLSNkZWZpbmUgQVBfUkVTUE9OU0VfTUVTU0FHRV9UT09fQklHCTB4MTUKLQotI2RlZmluZSBBUF9NQVhfQ0RYX0JJVEwJCTQKLSNkZWZpbmUgQVBfUlFJRF9SRVNFUlZFRF9CSVRMCTQKLSNkZWZpbmUgU0tJUF9CSVRMCQkoQVBfTUFYX0NEWF9CSVRMICsgQVBfUlFJRF9SRVNFUlZFRF9CSVRMKQotCi1zdHJ1Y3QgdHlwZTRfaGRyIHsKLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDE7Ci0JdW5zaWduZWQgY2hhciAgbXNnX3R5cGVfY29kZTsKLQl1bnNpZ25lZCBzaG9ydCBtc2dfbGVuOwotCXVuc2lnbmVkIGNoYXIgIHJlcXVlc3RfY29kZTsKLQl1bnNpZ25lZCBjaGFyICBtc2dfZm10OwotCXVuc2lnbmVkIHNob3J0IHJlc2VydmVkMjsKLX07Ci0KLSNkZWZpbmUgVFlQRTRfVFlQRV9DT0RFIDB4MDQKLSNkZWZpbmUgVFlQRTRfUkVRVV9DT0RFIDB4NDAKLQotI2RlZmluZSBUWVBFNF9TTUVfTEVOIDB4MDE4OAotI2RlZmluZSBUWVBFNF9MTUVfTEVOIDB4MDMwOAotI2RlZmluZSBUWVBFNF9TQ1JfTEVOIDB4MDFFMAotI2RlZmluZSBUWVBFNF9MQ1JfTEVOIDB4MDNBMAotCi0jZGVmaW5lIFRZUEU0X1NNRV9GTVQgMHgwMAotI2RlZmluZSBUWVBFNF9MTUVfRk1UIDB4MTAKLSNkZWZpbmUgVFlQRTRfU0NSX0ZNVCAweDQwCi0jZGVmaW5lIFRZUEU0X0xDUl9GTVQgMHg1MAotCi1zdHJ1Y3QgdHlwZTRfc21lIHsKLQlzdHJ1Y3QgdHlwZTRfaGRyIGhlYWRlcjsKLQl1bnNpZ25lZCBjaGFyCSBtZXNzYWdlWzEyOF07Ci0JdW5zaWduZWQgY2hhcgkgZXhwb25lbnRbMTI4XTsKLQl1bnNpZ25lZCBjaGFyCSBtb2R1bHVzWzEyOF07Ci19OwotCi1zdHJ1Y3QgdHlwZTRfbG1lIHsKLQlzdHJ1Y3QgdHlwZTRfaGRyIGhlYWRlcjsKLQl1bnNpZ25lZCBjaGFyCSBtZXNzYWdlWzI1Nl07Ci0JdW5zaWduZWQgY2hhcgkgZXhwb25lbnRbMjU2XTsKLQl1bnNpZ25lZCBjaGFyCSBtb2R1bHVzWzI1Nl07Ci19OwotCi1zdHJ1Y3QgdHlwZTRfc2NyIHsKLQlzdHJ1Y3QgdHlwZTRfaGRyIGhlYWRlcjsKLQl1bnNpZ25lZCBjaGFyCSBtZXNzYWdlWzEyOF07Ci0JdW5zaWduZWQgY2hhcgkgZHBbNzJdOwotCXVuc2lnbmVkIGNoYXIJIGRxWzY0XTsKLQl1bnNpZ25lZCBjaGFyCSBwWzcyXTsKLQl1bnNpZ25lZCBjaGFyCSBxWzY0XTsKLQl1bnNpZ25lZCBjaGFyCSB1WzcyXTsKLX07Ci0KLXN0cnVjdCB0eXBlNF9sY3IgewotCXN0cnVjdCB0eXBlNF9oZHIgaGVhZGVyOwotCXVuc2lnbmVkIGNoYXIJIG1lc3NhZ2VbMjU2XTsKLQl1bnNpZ25lZCBjaGFyCSBkcFsxMzZdOwotCXVuc2lnbmVkIGNoYXIJIGRxWzEyOF07Ci0JdW5zaWduZWQgY2hhcgkgcFsxMzZdOwotCXVuc2lnbmVkIGNoYXIJIHFbMTI4XTsKLQl1bnNpZ25lZCBjaGFyCSB1WzEzNl07Ci19OwotCi11bmlvbiB0eXBlNF9tc2cgewotCXN0cnVjdCB0eXBlNF9zbWUgc21lOwotCXN0cnVjdCB0eXBlNF9sbWUgbG1lOwotCXN0cnVjdCB0eXBlNF9zY3Igc2NyOwotCXN0cnVjdCB0eXBlNF9sY3IgbGNyOwotfTsKLQotc3RydWN0IHR5cGU4NF9oZHIgewotCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkMTsKLQl1bnNpZ25lZCBjaGFyICBjb2RlOwotCXVuc2lnbmVkIHNob3J0IGxlbjsKLQl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDJbNF07Ci19OwotCi0jZGVmaW5lIFRZUEU4NF9SU1BfQ09ERSAweDg0Ci0KLXN0cnVjdCB0eXBlNl9oZHIgewotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQxOwotCXVuc2lnbmVkIGNoYXIgdHlwZTsKLQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMlsyXTsKLQl1bnNpZ25lZCBjaGFyIHJpZ2h0WzRdOwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQzWzJdOwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ0WzJdOwotCXVuc2lnbmVkIGNoYXIgYXBmc1s0XTsKLQl1bnNpZ25lZCBpbnQgIG9mZnNldDE7Ci0JdW5zaWduZWQgaW50ICBvZmZzZXQyOwotCXVuc2lnbmVkIGludCAgb2Zmc2V0MzsKLQl1bnNpZ25lZCBpbnQgIG9mZnNldDQ7Ci0JdW5zaWduZWQgY2hhciBhZ2VudF9pZFsxNl07Ci0JdW5zaWduZWQgY2hhciBycWlkWzJdOwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ1WzJdOwotCXVuc2lnbmVkIGNoYXIgZnVuY3Rpb25fY29kZVsyXTsKLQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkNlsyXTsKLQl1bnNpZ25lZCBpbnQgIFRvQ2FyZExlbjE7Ci0JdW5zaWduZWQgaW50ICBUb0NhcmRMZW4yOwotCXVuc2lnbmVkIGludCAgVG9DYXJkTGVuMzsKLQl1bnNpZ25lZCBpbnQgIFRvQ2FyZExlbjQ7Ci0JdW5zaWduZWQgaW50ICBGcm9tQ2FyZExlbjE7Ci0JdW5zaWduZWQgaW50ICBGcm9tQ2FyZExlbjI7Ci0JdW5zaWduZWQgaW50ICBGcm9tQ2FyZExlbjM7Ci0JdW5zaWduZWQgaW50ICBGcm9tQ2FyZExlbjQ7Ci19OwotCi1zdHJ1Y3QgQ1BSQiB7Ci0JdW5zaWduZWQgY2hhciBjcHJiX2xlblsyXTsKLQl1bnNpZ25lZCBjaGFyIGNwcmJfdmVyX2lkOwotCXVuc2lnbmVkIGNoYXIgcGFkXzAwMDsKLQl1bnNpZ25lZCBjaGFyIHNycGlfcnRjb2RlWzRdOwotCXVuc2lnbmVkIGNoYXIgc3JwaV92ZXJiOwotCXVuc2lnbmVkIGNoYXIgZmxhZ3M7Ci0JdW5zaWduZWQgY2hhciBmdW5jX2lkWzJdOwotCXVuc2lnbmVkIGNoYXIgY2hlY2twb2ludF9mbGFnOwotCXVuc2lnbmVkIGNoYXIgcmVzdjI7Ci0JdW5zaWduZWQgY2hhciByZXFfcGFybWxbMl07Ci0JdW5zaWduZWQgY2hhciByZXFfcGFybXBbNF07Ci0JdW5zaWduZWQgY2hhciByZXFfZGF0YWxbNF07Ci0JdW5zaWduZWQgY2hhciByZXFfZGF0YXBbNF07Ci0JdW5zaWduZWQgY2hhciBycGxfcGFybWxbMl07Ci0JdW5zaWduZWQgY2hhciBwYWRfMDAxWzJdOwotCXVuc2lnbmVkIGNoYXIgcnBsX3Bhcm1wWzRdOwotCXVuc2lnbmVkIGNoYXIgcnBsX2RhdGFsWzRdOwotCXVuc2lnbmVkIGNoYXIgcnBsX2RhdGFwWzRdOwotCXVuc2lnbmVkIGNoYXIgY2NwX3JzY29kZVsyXTsKLQl1bnNpZ25lZCBjaGFyIGNjcF9ydGNvZGVbMl07Ci0JdW5zaWduZWQgY2hhciByZXBkX3Bhcm1sWzJdOwotCXVuc2lnbmVkIGNoYXIgbWFjX2RhdGFfbGVuWzJdOwotCXVuc2lnbmVkIGNoYXIgcmVwZF9kYXRhbFs0XTsKLQl1bnNpZ25lZCBjaGFyIHJlcV9wY1syXTsKLQl1bnNpZ25lZCBjaGFyIHJlc19vcmlnaW5bOF07Ci0JdW5zaWduZWQgY2hhciBtYWNfdmFsdWVbOF07Ci0JdW5zaWduZWQgY2hhciBsb2dvbl9pZFs4XTsKLQl1bnNpZ25lZCBjaGFyIHVzYWdlX2RvbWFpblsyXTsKLQl1bnNpZ25lZCBjaGFyIHJlc3YzWzE4XTsKLQl1bnNpZ25lZCBjaGFyIHN2cl9uYW1lbFsyXTsKLQl1bnNpZ25lZCBjaGFyIHN2cl9uYW1lWzhdOwotfTsKLQotc3RydWN0IHR5cGU2X21zZyB7Ci0Jc3RydWN0IHR5cGU2X2hkciBoZWFkZXI7Ci0Jc3RydWN0IENQUkIJIENQUkI7Ci19OwotCi1zdHJ1Y3QgdHlwZTg2X2hkciB7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZDE7Ci0JdW5zaWduZWQgY2hhciB0eXBlOwotCXVuc2lnbmVkIGNoYXIgZm9ybWF0OwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyOwotCXVuc2lnbmVkIGNoYXIgcmVwbHlfY29kZTsKLQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkM1szXTsKLX07Ci0KLSNkZWZpbmUgVFlQRTg2X1JTUF9DT0RFIDB4ODYKLSNkZWZpbmUgVFlQRTg2X0ZNVDIJMHgwMgotCi1zdHJ1Y3QgdHlwZTg2X2ZtdDJfbXNnIHsKLQlzdHJ1Y3QgdHlwZTg2X2hkciBoZWFkZXI7Ci0JdW5zaWduZWQgY2hhcgkgIHJlc2VydmVkWzRdOwotCXVuc2lnbmVkIGNoYXIJICBhcGZzWzRdOwotCXVuc2lnbmVkIGludAkgIGNvdW50MTsKLQl1bnNpZ25lZCBpbnQJICBvZmZzZXQxOwotCXVuc2lnbmVkIGludAkgIGNvdW50MjsKLQl1bnNpZ25lZCBpbnQJICBvZmZzZXQyOwotCXVuc2lnbmVkIGludAkgIGNvdW50MzsKLQl1bnNpZ25lZCBpbnQJICBvZmZzZXQzOwotCXVuc2lnbmVkIGludAkgIGNvdW50NDsKLQl1bnNpZ25lZCBpbnQJICBvZmZzZXQ0OwotfTsKLQotc3RhdGljIHN0cnVjdCB0eXBlNl9oZHIgc3RhdGljX3R5cGU2X2hkciA9IHsKLQkweDAwLAotCTB4MDYsCi0JezB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwfSwKLQkweDAwMDAwMDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCXsweDAxLDB4MDAsMHg0MywweDQzLDB4NDEsMHgyRCwweDQxLDB4NTAsCi0JIDB4NTAsMHg0QywweDIwLDB4MjAsMHgyMCwweDAxLDB4MDEsMHgwMX0sCi0JezB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMH0sCi0JezB4NTAsMHg0NH0sCi0JezB4MDAsMHgwMH0sCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwCi19OwotCi1zdGF0aWMgc3RydWN0IHR5cGU2X2hkciBzdGF0aWNfdHlwZTZfaGRyWCA9IHsKLQkweDAwLAotCTB4MDYsCi0JezB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwfSwKLQkweDAwMDAwMDU4LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCXsweDQzLDB4NDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMH0sCi0JezB4NTAsMHg0NH0sCi0JezB4MDAsMHgwMH0sCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwCi19OwotCi1zdGF0aWMgc3RydWN0IENQUkIgc3RhdGljX2NwcmIgPSB7Ci0JezB4NzAsMHgwMH0sCi0JMHg0MSwKLQkweDAwLAotCXsweDAwLDB4MDAsMHgwMCwweDAwfSwKLQkweDAwLAotCTB4MDAsCi0JezB4NTQsMHgzMn0sCi0JMHgwMSwKLQkweDAwLAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JIDB4MDAsMHgwMH0sCi0JezB4MDgsMHgwMH0sCi0JezB4NDksMHg0MywweDUzLDB4NDYsMHgyMCwweDIwLDB4MjAsMHgyMH0KLX07Ci0KLXN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2sgewotCXVuc2lnbmVkIGNoYXIgZnVuY3Rpb25fY29kZVsyXTsKLQl1bnNpZ25lZCBjaGFyIHVsZW5bMl07Ci0JdW5zaWduZWQgY2hhciBvbmx5X3J1bGVbOF07Ci19OwotCi1zdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayBzdGF0aWNfcGtkX2Z1bmN0aW9uX2FuZF9ydWxlcyA9IHsKLQl7MHg1MCwweDQ0fSwKLQl7MHgwQSwweDAwfSwKLQl7J1AnLCdLJywnQycsJ1MnLCctJywnMScsJy4nLCcyJ30KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrIHN0YXRpY19wa2VfZnVuY3Rpb25fYW5kX3J1bGVzID0gewotCXsweDUwLDB4NEJ9LAotCXsweDBBLDB4MDB9LAotCXsnUCcsJ0snLCdDJywnUycsJy0nLCcxJywnLicsJzInfQotfTsKLQotc3RydWN0IFQ2X2tleUJsb2NrX2hkciB7Ci0JdW5zaWduZWQgY2hhciBibGVuWzJdOwotCXVuc2lnbmVkIGNoYXIgdWxlblsyXTsKLQl1bnNpZ25lZCBjaGFyIGZsYWdzWzJdOwotfTsKLQotc3RhdGljIHN0cnVjdCBUNl9rZXlCbG9ja19oZHIgc3RhdGljX1Q2X2tleUJsb2NrX2hkciA9IHsKLQl7MHg4OSwweDAxfSwKLQl7MHg4NywweDAxfSwKLQl7MHgwMH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgQ1BSQlggc3RhdGljX2NwcmJ4ID0gewotCTB4MDBEQywKLQkweDAyLAotCXsweDAwLDB4MDAsMHgwMH0sCi0JezB4NTQsMHgzMn0sCi0JezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JMHgwMDAwMDAwMCwKLQkweDAwMDAwMDAwLAotCTB4MDAwMDAwMDAsCi0JezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCTB4MDAwMDAwMDAsCi0JezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JMHgwMDAwLAotCTB4MDAwMCwKLQkweDAwMDAwMDAwLAotCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotCTB4MDAsCi0JMHgwMCwKLQkweDAwMDAsCi0JezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrIHN0YXRpY19wa2RfZnVuY3Rpb25fYW5kX3J1bGVzWF9NQ0wyID0gewotCXsweDUwLDB4NDR9LAotCXsweDAwLDB4MEF9LAotCXsnUCcsJ0snLCdDJywnUycsJy0nLCcxJywnLicsJzInfQotfTsKLQotc3RhdGljIHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2sgc3RhdGljX3BrZV9mdW5jdGlvbl9hbmRfcnVsZXNYX01DTDIgPSB7Ci0JezB4NTAsMHg0Qn0sCi0JezB4MDAsMHgwQX0sCi0JeydaJywnRScsJ1InLCdPJywnLScsJ1AnLCdBJywnRCd9Ci19OwotCi1zdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayBzdGF0aWNfcGtkX2Z1bmN0aW9uX2FuZF9ydWxlc1ggPSB7Ci0JezB4NTAsMHg0NH0sCi0JezB4MDAsMHgwQX0sCi0JeydaJywnRScsJ1InLCdPJywnLScsJ1AnLCdBJywnRCd9Ci19OwotCi1zdGF0aWMgc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayBzdGF0aWNfcGtlX2Z1bmN0aW9uX2FuZF9ydWxlc1ggPSB7Ci0JezB4NTAsMHg0Qn0sCi0JezB4MDAsMHgwQX0sCi0JeydNJywnUicsJ1AnLCcgJywnICcsJyAnLCcgJywnICd9Ci19OwotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBzdGF0aWNfUEtFX2Z1bmN0aW9uX2NvZGVbMl0gPSB7MHg1MCwgMHg0Qn07Ci0KLXN0cnVjdCBUNl9rZXlCbG9ja19oZHJYIHsKLQl1bnNpZ25lZCBzaG9ydCBibGVuOwotCXVuc2lnbmVkIHNob3J0IHVsZW47Ci0JdW5zaWduZWQgY2hhciBmbGFnc1syXTsKLX07Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXRpY19wYWRbMjU2XSA9IHsKLTB4MUIsMHg3QiwweDVELDB4QjUsMHg3NSwweDAxLDB4M0QsMHhGRCwweDhELDB4RDEsMHhDNywweDAzLDB4MkQsMHgwOSwweDIzLDB4NTcsCi0weDg5LDB4NDksMHhCOSwweDNGLDB4QkIsMHg5OSwweDQxLDB4NUIsMHg3NSwweDIxLDB4N0IsMHg5RCwweDNCLDB4NkIsMHg1MSwweDM5LAotMHhCQiwweDBELDB4MzUsMHhCOSwweDg5LDB4MEYsMHg5MywweEE1LDB4MEIsMHg0NywweEYxLDB4RDMsMHhCQiwweENCLDB4RjEsMHg5RCwKLTB4MjMsMHg3MywweDcxLDB4RkYsMHhGMywweEY1LDB4NDUsMHhGQiwweDYxLDB4MjksMHgyMywweEZELDB4RjEsMHgyOSwweDNGLDB4N0YsCi0weDE3LDB4QjcsMHgxQiwweEE5LDB4MTksMHhCRCwweDU3LDB4QTksMHhENywweDk1LDB4QTMsMHhDQiwweEVELDB4MUQsMHhEQiwweDQ1LAotMHg3RCwweDExLDB4RDEsMHg1MSwweDFCLDB4RUQsMHg3MSwweEU5LDB4QjEsMHhEMSwweEFCLDB4QUIsMHgyMSwweDJCLDB4MUIsMHg5RiwKLTB4M0IsMHg5RiwweEY3LDB4RjcsMHhCRCwweDYzLDB4RUIsMHhBRCwweERGLDB4QjMsMHg2RiwweDVCLDB4REIsMHg4RCwweEE5LDB4NUQsCi0weEUzLDB4N0QsMHg3NywweDQ5LDB4NDcsMHhGNSwweEE3LDB4RkQsMHhBQiwweDJGLDB4MjcsMHgzNSwweDc3LDB4RDMsMHg0OSwweEM5LAotMHgwOSwweEVCLDB4QjEsMHhGOSwweEJGLDB4NEIsMHhDQiwweDJCLDB4RUIsMHhFQiwweDA1LDB4RkYsMHg3RCwweEM3LDB4OTEsMHg4QiwKLTB4MDksMHg4MywweEI5LDB4QjksMHg2OSwweDMzLDB4MzksMHg2QiwweDc5LDB4NzUsMHgxOSwweEJGLDB4QkIsMHgwNywweDFELDB4QkQsCi0weDI5LDB4QkYsMHgzOSwweDk1LDB4OTMsMHgxRCwweDM1LDB4QzcsMHhDOSwweDRELDB4RTUsMHg5NywweDBCLDB4NDMsMHg5QiwweEYxLAotMHgxNiwweDkzLDB4MDMsMHgxRiwweEE1LDB4RkIsMHhEQiwweEYzLDB4MjcsMHg0RiwweDI3LDB4NjEsMHgwNSwweDFGLDB4QjksMHgyMywKLTB4MkYsMHhDMywweDgxLDB4QTksMHgyMywweDcxLDB4NTUsMHg1NSwweEVCLDB4RUQsMHg0MSwweEU1LDB4RjMsMHgxMSwweEYxLDB4NDMsCi0weDY5LDB4MDMsMHhCRCwweDBCLDB4MzcsMHgwRiwweDUxLDB4OEYsMHgwQiwweEI1LDB4ODksMHg1QiwweDY3LDB4QTksMHhEOSwweDRGLAotMHgwMSwweEY5LDB4MjEsMHg3NywweDM3LDB4NzMsMHg3OSwweEM1LDB4N0YsMHg1MSwweEMxLDB4Q0YsMHg5NywweEExLDB4NzUsMHhBRCwKLTB4MzUsMHg5RCwweEQzLDB4RDMsMHhBNywweDlELDB4NUQsMHg0MSwweDZGLDB4NjUsMHgxQiwweENGLDB4QTksMHg4NywweDkxLDB4MDkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2NhX3ByaXZhdGVfZXh0X01FIHN0YXRpY19wdnRfbWVfa2V5ID0gewotCXsKLQkJMHgxRSwKLQkJMHgwMCwKLQkJMHgwMTgzLAotCQl7MHgwMCwweDAwLDB4MDAsMHgwMH0KLQl9LAotCi0JewotCQkweDAyLAotCQkweDAwLAotCQkweDAxNkMsCi0JCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JCSAweDAwLDB4MDAsMHgwMCwweDAwfSwKLQkJezB4MDAsMHgwMCwweDAwLDB4MDB9LAotCQkweDAwLAotCQkweDAwLAotCQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JCXsweDgwLDB4MDAsMHgwMCwweDAwfSwKLQkJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQkJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0sCi0JCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0JCSAweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAotCQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotCQkgMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKLQkJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLQkJIDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMH0KLQl9LAotCi0JewotCQkweDA0LAotCQkweDAwLAotCQkweDAwMEYsCi0JCXsweDAwLDB4MDB9LAotCQkweDAwMDMsCi0JCTB4MDAwMCwKLQkJMHgwMDAwLAotCQl7MHgwMSwweDAwLDB4MDF9Ci0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBjY2FfcHVibGljX2tleSBzdGF0aWNfcHVibGljX2tleSA9IHsKLQl7Ci0JCTB4MUUsCi0JCTB4MDAsCi0JCTB4MDAwMCwKLQkJezB4MDAsMHgwMCwweDAwLDB4MDB9Ci0JfSwKLQotCXsKLQkJMHgwNCwKLQkJMHgwMCwKLQkJMHgwMDAwLAotCQl7MHgwMCwweDAwfSwKLQkJMHgwMDAwLAotCQkweDAwMDAsCi0JCTB4MDAwMCwKLQkJezB4MDEsMHgwMCwweDAxfQotCX0KLX07Ci0KLSNkZWZpbmUgRklYRURfVFlQRTZfTUVfTEVOIDB4MDAwMDAyNUYKLQotI2RlZmluZSBGSVhFRF9UWVBFNl9NRV9FTl9MRU4gMHgwMDAwMDBGMAotCi0jZGVmaW5lIEZJWEVEX1RZUEU2X01FX0xFTlggMHgwMDAwMDJDQgotCi0jZGVmaW5lIEZJWEVEX1RZUEU2X01FX0VOX0xFTlggMHgwMDAwMDE1QwotCi1zdGF0aWMgc3RydWN0IGNjYV9wdWJsaWNfc2VjIHN0YXRpY19jY2FfcHViX3NlYyA9IHsKLQkweDA0LAotCTB4MDAsCi0JMHgwMDBmLAotCXsweDAwLDB4MDB9LAotCTB4MDAwMywKLQkweDAwMDAsCi0JMHgwMDAwLAotCXsweDAxLDB4MDAsMHgwMX0KLX07Ci0KLSNkZWZpbmUgRklYRURfVFlQRTZfQ1JfTEVOIDB4MDAwMDAxNzcKLQotI2RlZmluZSBGSVhFRF9UWVBFNl9DUl9MRU5YIDB4MDAwMDAxRTMKLQotI2RlZmluZSBNQVhfUkVTUE9OU0VfU0laRSAweDAwMDAwNzEwCi0KLSNkZWZpbmUgTUFYX1JFU1BPTlNFWF9TSVpFIDB4MDAwMDA3N0MKLQotI2RlZmluZSBSRVNQT05TRV9DUFJCX1NJWkUgIDB4MDAwMDA2QjgKLSNkZWZpbmUgUkVTUE9OU0VfQ1BSQlhfU0laRSAweDAwMDAwNzI0Ci0KLXN0cnVjdCB0eXBlNTBfaGRyIHsKLQl1OCAgICByZXNlcnZlZDE7Ci0JdTggICAgbXNnX3R5cGVfY29kZTsKLQl1MTYgICBtc2dfbGVuOwotCXU4ICAgIHJlc2VydmVkMjsKLQl1OCAgICBpZ25vcmVkOwotCXUxNiAgIHJlc2VydmVkMzsKLX07Ci0KLSNkZWZpbmUgVFlQRTUwX1RZUEVfQ09ERSAweDUwCi0KLSNkZWZpbmUgVFlQRTUwX01FQjFfTEVOIChzaXplb2Yoc3RydWN0IHR5cGU1MF9tZWIxX21zZykpCi0jZGVmaW5lIFRZUEU1MF9NRUIyX0xFTiAoc2l6ZW9mKHN0cnVjdCB0eXBlNTBfbWViMl9tc2cpKQotI2RlZmluZSBUWVBFNTBfQ1JCMV9MRU4gKHNpemVvZihzdHJ1Y3QgdHlwZTUwX2NyYjFfbXNnKSkKLSNkZWZpbmUgVFlQRTUwX0NSQjJfTEVOIChzaXplb2Yoc3RydWN0IHR5cGU1MF9jcmIyX21zZykpCi0KLSNkZWZpbmUgVFlQRTUwX01FQjFfRk1UIDB4MDAwMQotI2RlZmluZSBUWVBFNTBfTUVCMl9GTVQgMHgwMDAyCi0jZGVmaW5lIFRZUEU1MF9DUkIxX0ZNVCAweDAwMTEKLSNkZWZpbmUgVFlQRTUwX0NSQjJfRk1UIDB4MDAxMgotCi1zdHJ1Y3QgdHlwZTUwX21lYjFfbXNnIHsKLQlzdHJ1Y3QgdHlwZTUwX2hkcgloZWFkZXI7Ci0JdTE2CQkJa2V5YmxvY2tfdHlwZTsKLQl1OAkJCXJlc2VydmVkWzZdOwotCXU4CQkJZXhwb25lbnRbMTI4XTsKLQl1OAkJCW1vZHVsdXNbMTI4XTsKLQl1OAkJCW1lc3NhZ2VbMTI4XTsKLX07Ci0KLXN0cnVjdCB0eXBlNTBfbWViMl9tc2cgewotCXN0cnVjdCB0eXBlNTBfaGRyCWhlYWRlcjsKLQl1MTYJCQlrZXlibG9ja190eXBlOwotCXU4CQkJcmVzZXJ2ZWRbNl07Ci0JdTgJCQlleHBvbmVudFsyNTZdOwotCXU4CQkJbW9kdWx1c1syNTZdOwotCXU4CQkJbWVzc2FnZVsyNTZdOwotfTsKLQotc3RydWN0IHR5cGU1MF9jcmIxX21zZyB7Ci0Jc3RydWN0IHR5cGU1MF9oZHIJaGVhZGVyOwotCXUxNgkJCWtleWJsb2NrX3R5cGU7Ci0JdTgJCQlyZXNlcnZlZFs2XTsKLQl1OAkJCXBbNjRdOwotCXU4CQkJcVs2NF07Ci0JdTgJCQlkcFs2NF07Ci0JdTgJCQlkcVs2NF07Ci0JdTgJCQl1WzY0XTsKLQl1OAkJCW1lc3NhZ2VbMTI4XTsKLX07Ci0KLXN0cnVjdCB0eXBlNTBfY3JiMl9tc2cgewotCXN0cnVjdCB0eXBlNTBfaGRyCWhlYWRlcjsKLQl1MTYJCQlrZXlibG9ja190eXBlOwotCXU4CQkJcmVzZXJ2ZWRbNl07Ci0JdTgJCQlwWzEyOF07Ci0JdTgJCQlxWzEyOF07Ci0JdTgJCQlkcFsxMjhdOwotCXU4CQkJZHFbMTI4XTsKLQl1OAkJCXVbMTI4XTsKLQl1OAkJCW1lc3NhZ2VbMjU2XTsKLX07Ci0KLXVuaW9uIHR5cGU1MF9tc2cgewotCXN0cnVjdCB0eXBlNTBfbWViMV9tc2cgbWViMTsKLQlzdHJ1Y3QgdHlwZTUwX21lYjJfbXNnIG1lYjI7Ci0Jc3RydWN0IHR5cGU1MF9jcmIxX21zZyBjcmIxOwotCXN0cnVjdCB0eXBlNTBfY3JiMl9tc2cgY3JiMjsKLX07Ci0KLXN0cnVjdCB0eXBlODBfaGRyIHsKLQl1OAlyZXNlcnZlZDE7Ci0JdTgJdHlwZTsKLQl1MTYJbGVuOwotCXU4CWNvZGU7Ci0JdTgJcmVzZXJ2ZWQyWzNdOwotCXU4CXJlc2VydmVkM1s4XTsKLX07Ci0KLSNkZWZpbmUgVFlQRTgwX1JTUF9DT0RFIDB4ODAKLQotc3RydWN0IGVycm9yX2hkciB7Ci0JdW5zaWduZWQgY2hhciByZXNlcnZlZDE7Ci0JdW5zaWduZWQgY2hhciB0eXBlOwotCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyWzJdOwotCXVuc2lnbmVkIGNoYXIgcmVwbHlfY29kZTsKLQl1bnNpZ25lZCBjaGFyIHJlc2VydmVkM1szXTsKLX07Ci0KLSNkZWZpbmUgVFlQRTgyX1JTUF9DT0RFIDB4ODIKLSNkZWZpbmUgVFlQRTg4X1JTUF9DT0RFIDB4ODgKLQotI2RlZmluZSBSRVA4Ml9FUlJPUl9NQUNISU5FX0ZBSUxVUkUgIDB4MTAKLSNkZWZpbmUgUkVQODJfRVJST1JfUFJFRU1QVF9GQUlMVVJFICAweDEyCi0jZGVmaW5lIFJFUDgyX0VSUk9SX0NIRUNLUFRfRkFJTFVSRSAgMHgxNAotI2RlZmluZSBSRVA4Ml9FUlJPUl9NRVNTQUdFX1RZUEUgICAgIDB4MjAKLSNkZWZpbmUgUkVQODJfRVJST1JfSU5WQUxJRF9DT01NX0NEICAweDIxCi0jZGVmaW5lIFJFUDgyX0VSUk9SX0lOVkFMSURfTVNHX0xFTiAgMHgyMwotI2RlZmluZSBSRVA4Ml9FUlJPUl9SRVNFUlZEX0ZJRUxEICAgIDB4MjQKLSNkZWZpbmUgUkVQODJfRVJST1JfRk9STUFUX0ZJRUxEICAgICAweDI5Ci0jZGVmaW5lIFJFUDgyX0VSUk9SX0lOVkFMSURfQ09NTUFORCAgMHgzMAotI2RlZmluZSBSRVA4Ml9FUlJPUl9NQUxGT1JNRURfTVNHICAgIDB4NDAKLSNkZWZpbmUgUkVQODJfRVJST1JfUkVTRVJWRURfRklFTERPICAweDUwCi0jZGVmaW5lIFJFUDgyX0VSUk9SX1dPUkRfQUxJR05NRU5UICAgMHg2MAotI2RlZmluZSBSRVA4Ml9FUlJPUl9NRVNTQUdFX0xFTkdUSCAgIDB4ODAKLSNkZWZpbmUgUkVQODJfRVJST1JfT1BFUkFORF9JTlZBTElEICAweDgyCi0jZGVmaW5lIFJFUDgyX0VSUk9SX09QRVJBTkRfU0laRSAgICAgMHg4NAotI2RlZmluZSBSRVA4Ml9FUlJPUl9FVkVOX01PRF9JTl9PUE5EIDB4ODUKLSNkZWZpbmUgUkVQODJfRVJST1JfUkVTRVJWRURfRklFTEQgICAweDg4Ci0jZGVmaW5lIFJFUDgyX0VSUk9SX1RSQU5TUE9SVF9GQUlMICAgMHg5MAotI2RlZmluZSBSRVA4Ml9FUlJPUl9QQUNLRVRfVFJVTkNBVEVEIDB4QTAKLSNkZWZpbmUgUkVQODJfRVJST1JfWkVST19CVUZGRVJfTEVOICAweEIwCi0KLSNkZWZpbmUgUkVQODhfRVJST1JfTU9EVUxFX0ZBSUxVUkUgICAweDEwCi0jZGVmaW5lIFJFUDg4X0VSUk9SX01PRFVMRV9USU1FT1VUICAgMHgxMQotI2RlZmluZSBSRVA4OF9FUlJPUl9NT0RVTEVfTk9USU5JVCAgIDB4MTMKLSNkZWZpbmUgUkVQODhfRVJST1JfTU9EVUxFX05PVEFWQUlMICAweDE0Ci0jZGVmaW5lIFJFUDg4X0VSUk9SX01PRFVMRV9ESVNBQkxFRCAgMHgxNQotI2RlZmluZSBSRVA4OF9FUlJPUl9NT0RVTEVfSU5fRElBR04gIDB4MTcKLSNkZWZpbmUgUkVQODhfRVJST1JfRkFTVFBBVEhfRElTQUJMRCAweDE5Ci0jZGVmaW5lIFJFUDg4X0VSUk9SX01FU1NBR0VfVFlQRSAgICAgMHgyMAotI2RlZmluZSBSRVA4OF9FUlJPUl9NRVNTQUdFX01BTEZPUk1EIDB4MjIKLSNkZWZpbmUgUkVQODhfRVJST1JfTUVTU0FHRV9MRU5HVEggICAweDIzCi0jZGVmaW5lIFJFUDg4X0VSUk9SX1JFU0VSVkVEX0ZJRUxEICAgMHgyNAotI2RlZmluZSBSRVA4OF9FUlJPUl9LRVlfVFlQRSAgICAgICAgIDB4MzQKLSNkZWZpbmUgUkVQODhfRVJST1JfSU5WQUxJRF9LRVkgICAgICAweDgyCi0jZGVmaW5lIFJFUDg4X0VSUk9SX09QRVJBTkQgICAgICAgICAgMHg4NAotI2RlZmluZSBSRVA4OF9FUlJPUl9PUEVSQU5EX0VWRU5fTU9EIDB4ODUKLQotI2RlZmluZSBDQUxMRVJfSEVBREVSIDEyCi0KLXN0YXRpYyBpbmxpbmUgaW50Ci10ZXN0cShpbnQgcV9uciwgaW50ICpxX2RlcHRoLCBpbnQgKmRldl90eXBlLCBzdHJ1Y3QgYXBfc3RhdHVzX3dvcmQgKnN0YXQpCi17Ci0JaW50IGNjb2RlOwotCi0JYXNtIHZvbGF0aWxlCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JKCIJbGxnZnIJMCwlNAkJXG4iCi0JICIJc2xncgkxLDEJCVxuIgotCSAiCWxncgkyLDEJCVxuIgotCSAiMDoJLmxvbmcJMHhiMmFmMDAwMAlcbiIKLQkgIjE6CWlwbQklMAkJXG4iCi0JICIJc3JsCSUwLDI4CQlcbiIKLQkgIglpaWhoCSUwLDAJCVxuIgotCSAiCWlpaGwJJTAsMAkJXG4iCi0JICIJbGdyCSUxLDEJCVxuIgotCSAiCWxncgklMywyCQlcbiIKLQkgIglzcmwJJTMsMjQJCVxuIgotCSAiCXNsbAkyLDI0CQlcbiIKLQkgIglzcmwJMiwyNAkJXG4iCi0JICIJbGdyCSUyLDIJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpCSUwLCVoNQkJXG4iCi0JICIJamcJMmIJCVxuIgotCSAiLnByZXZpb3VzCQkJXG4iCi0JICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiCVxuIgotCSAiCS5hbGlnbgk4CQlcbiIKLQkgIgkucXVhZAkwYiwzYgkJXG4iCi0JICIJLnF1YWQJMWIsM2IJCVxuIgotCSAiLnByZXZpb3VzIgotCSA6Ij1kIiAoY2NvZGUpLCI9ZCIgKCpzdGF0KSwiPWQiICgqcV9kZXB0aCksICI9ZCIgKCpkZXZfdHlwZSkKLQkgOiJkIiAocV9uciksICJLIiAoREVWX1RTUV9FWENFUFRJT04pCi0JIDoiY2MiLCIwIiwiMSIsIjIiLCJtZW1vcnkiKTsKLSNlbHNlCi0JKCIJbHIJMCwlNAkJXG4iCi0JICIJc2xyCTEsMQkJXG4iCi0JICIJbHIJMiwxCQlcbiIKLQkgIjA6CS5sb25nCTB4YjJhZjAwMDAJXG4iCi0JICIxOglpcG0JJTAJCVxuIgotCSAiCXNybAklMCwyOAkJXG4iCi0JICIJbHIJJTEsMQkJXG4iCi0JICIJbHIJJTMsMgkJXG4iCi0JICIJc3JsCSUzLDI0CQlcbiIKLQkgIglzbGwJMiwyNAkJXG4iCi0JICIJc3JsCTIsMjQJCVxuIgotCSAiCWxyCSUyLDIJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpCSUwLCVoNQkJXG4iCi0JICIJYnJhcwkxLDRmCQlcbiIKLQkgIgkubG9uZwkyYgkJXG4iCi0JICI0OgkJCQlcbiIKLQkgIglsCTEsMCgxKQkJXG4iCi0JICIJYnIJMQkJXG4iCi0JICIucHJldmlvdXMJCQlcbiIKLQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJXG4iCi0JICIJLmFsaWduCTQJCVxuIgotCSAiCS5sb25nCTBiLDNiCQlcbiIKLQkgIgkubG9uZwkxYiwzYgkJXG4iCi0JICIucHJldmlvdXMiCi0JIDoiPWQiIChjY29kZSksIj1kIiAoKnN0YXQpLCI9ZCIgKCpxX2RlcHRoKSwgIj1kIiAoKmRldl90eXBlKQotCSA6ImQiIChxX25yKSwgIksiIChERVZfVFNRX0VYQ0VQVElPTikKLQkgOiJjYyIsIjAiLCIxIiwiMiIsIm1lbW9yeSIpOwotI2VuZGlmCi0JcmV0dXJuIGNjb2RlOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcmVzZXRxKGludCBxX25yLCBzdHJ1Y3QgYXBfc3RhdHVzX3dvcmQgKnN0YXRfcCkKLXsKLQlpbnQgY2NvZGU7Ci0KLQlhc20gdm9sYXRpbGUKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkoIglsbGdmcgkwLCUyCQlcbiIKLQkgIglsZ2hpCTEsMQkJXG4iCi0JICIJc2xsCTEsMjQJCVxuIgotCSAiCW9yCTAsMQkJXG4iCi0JICIJc2xncgkxLDEJCVxuIgotCSAiCWxncgkyLDEJCVxuIgotCSAiMDoJLmxvbmcJMHhiMmFmMDAwMAlcbiIKLQkgIjE6CWlwbQklMAkJXG4iCi0JICIJc3JsCSUwLDI4CQlcbiIKLQkgIglpaWhoCSUwLDAJCVxuIgotCSAiCWlpaGwJJTAsMAkJXG4iCi0JICIJbGdyCSUxLDEJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpCSUwLCVoMwkJXG4iCi0JICIJamcJMmIJCVxuIgotCSAiLnByZXZpb3VzCQkJXG4iCi0JICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiCVxuIgotCSAiCS5hbGlnbgk4CQlcbiIKLQkgIgkucXVhZAkwYiwzYgkJXG4iCi0JICIJLnF1YWQJMWIsM2IJCVxuIgotCSAiLnByZXZpb3VzIgotCSA6Ij1kIiAoY2NvZGUpLCI9ZCIgKCpzdGF0X3ApCi0JIDoiZCIgKHFfbnIpLCAiSyIgKERFVl9SU1FfRVhDRVBUSU9OKQotCSA6ImNjIiwiMCIsIjEiLCIyIiwibWVtb3J5Iik7Ci0jZWxzZQotCSgiCWxyCTAsJTIJCVxuIgotCSAiCWxoaQkxLDEJCVxuIgotCSAiCXNsbAkxLDI0CQlcbiIKLQkgIglvcgkwLDEJCVxuIgotCSAiCXNscgkxLDEJCVxuIgotCSAiCWxyCTIsMQkJXG4iCi0JICIwOgkubG9uZwkweGIyYWYwMDAwCVxuIgotCSAiMToJaXBtCSUwCQlcbiIKLQkgIglzcmwJJTAsMjgJCVxuIgotCSAiCWxyCSUxLDEJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpCSUwLCVoMwkJXG4iCi0JICIJYnJhcwkxLDRmCQlcbiIKLQkgIgkubG9uZwkyYgkJXG4iCi0JICI0OgkJCQlcbiIKLQkgIglsCTEsMCgxKQkJXG4iCi0JICIJYnIJMQkJXG4iCi0JICIucHJldmlvdXMJCQlcbiIKLQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJXG4iCi0JICIJLmFsaWduCTQJCVxuIgotCSAiCS5sb25nCTBiLDNiCQlcbiIKLQkgIgkubG9uZwkxYiwzYgkJXG4iCi0JICIucHJldmlvdXMiCi0JIDoiPWQiIChjY29kZSksIj1kIiAoKnN0YXRfcCkKLQkgOiJkIiAocV9uciksICJLIiAoREVWX1JTUV9FWENFUFRJT04pCi0JIDoiY2MiLCIwIiwiMSIsIjIiLCJtZW1vcnkiKTsKLSNlbmRpZgotCXJldHVybiBjY29kZTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXNlbihpbnQgbXNnX2xlbiwgdW5zaWduZWQgY2hhciAqbXNnX2V4dCwgc3RydWN0IGFwX3N0YXR1c193b3JkICpzdGF0KQotewotCWludCBjY29kZTsKLQotCWFzbSB2b2xhdGlsZQotI2lmZGVmIENPTkZJR182NEJJVAotCSgiCWxncgk2LCUzCQlcbiIKLQkgIglsbGdmcgk3LCUyCQlcbiIKLQkgIglsbGd0CTAsMCg2KQkJXG4iCi0JICIJbGdoaQkxLDY0CQlcbiIKLQkgIglzbGwJMSwyNAkJXG4iCi0JICIJb3IJMCwxCQlcbiIKLQkgIglsYQk2LDQoNikJCVxuIgotCSAiCWxsZ3QJMiwwKDYpCQlcbiIKLQkgIglsbGd0CTMsNCg2KQkJXG4iCi0JICIJbGEJNiw4KDYpCQlcbiIKLQkgIglzbHIJMSwxCQlcbiIKLQkgIjA6CS5sb25nCTB4YjJhZDAwMjYJXG4iCi0JICIxOglicmMJMiwwYgkJXG4iCi0JICIJaXBtCSUwCQlcbiIKLQkgIglzcmwJJTAsMjgJCVxuIgotCSAiCWlpaGgJJTAsMAkJXG4iCi0JICIJaWlobAklMCwwCQlcbiIKLQkgIglsZ3IJJTEsMQkJXG4iCi0JICIyOgkJCQlcbiIKLQkgIi5zZWN0aW9uIC5maXh1cCxcImF4XCIJXG4iCi0JICIzOgkJCQlcbiIKLQkgIglsaGkJJTAsJWg0CQlcbiIKLQkgIglqZwkyYgkJXG4iCi0JICIucHJldmlvdXMJCQlcbiIKLQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJXG4iCi0JICIJLmFsaWduCTgJCVxuIgotCSAiCS5xdWFkCTBiLDNiCQlcbiIKLQkgIgkucXVhZAkxYiwzYgkJXG4iCi0JICIucHJldmlvdXMiCi0JIDoiPWQiIChjY29kZSksIj1kIiAoKnN0YXQpCi0JIDoiZCIgKG1zZ19sZW4pLCJhIiAobXNnX2V4dCksICJLIiAoREVWX1NFTl9FWENFUFRJT04pCi0JIDoiY2MiLCIwIiwiMSIsIjIiLCIzIiwiNiIsIjciLCJtZW1vcnkiKTsKLSNlbHNlCi0JKCIJbHIJNiwlMwkJXG4iCi0JICIJbHIJNywlMgkJXG4iCi0JICIJbAkwLDAoNikJCVxuIgotCSAiCWxoaQkxLDY0CQlcbiIKLQkgIglzbGwJMSwyNAkJXG4iCi0JICIJb3IJMCwxCQlcbiIKLQkgIglsYQk2LDQoNikJCVxuIgotCSAiCWwJMiwwKDYpCQlcbiIKLQkgIglsCTMsNCg2KQkJXG4iCi0JICIJbGEJNiw4KDYpCQlcbiIKLQkgIglzbHIJMSwxCQlcbiIKLQkgIjA6CS5sb25nCTB4YjJhZDAwMjYJXG4iCi0JICIxOglicmMJMiwwYgkJXG4iCi0JICIJaXBtCSUwCQlcbiIKLQkgIglzcmwJJTAsMjgJCVxuIgotCSAiCWxyCSUxLDEJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpCSUwLCVoNAkJXG4iCi0JICIJYnJhcwkxLDRmCQlcbiIKLQkgIgkubG9uZwkyYgkJXG4iCi0JICI0OgkJCQlcbiIKLQkgIglsCTEsMCgxKQkJXG4iCi0JICIJYnIJMQkJXG4iCi0JICIucHJldmlvdXMJCQlcbiIKLQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJXG4iCi0JICIJLmFsaWduCTQJCVxuIgotCSAiCS5sb25nCTBiLDNiCQlcbiIKLQkgIgkubG9uZwkxYiwzYgkJXG4iCi0JICIucHJldmlvdXMiCi0JIDoiPWQiIChjY29kZSksIj1kIiAoKnN0YXQpCi0JIDoiZCIgKG1zZ19sZW4pLCJhIiAobXNnX2V4dCksICJLIiAoREVWX1NFTl9FWENFUFRJT04pCi0JIDoiY2MiLCIwIiwiMSIsIjIiLCIzIiwiNiIsIjciLCJtZW1vcnkiKTsKLSNlbmRpZgotCXJldHVybiBjY29kZTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLXJlYyhpbnQgcV9uciwgaW50IGJ1ZmZfbCwgdW5zaWduZWQgY2hhciAqcnNwLCB1bnNpZ25lZCBjaGFyICppZCwKLSAgICBzdHJ1Y3QgYXBfc3RhdHVzX3dvcmQgKnN0KQotewotCWludCBjY29kZTsKLQotCWFzbSB2b2xhdGlsZQotI2lmZGVmIENPTkZJR182NEJJVAotCSgiCWxsZ2ZyCTAsJTIJCVxuIgotCSAiCWxncgkzLCU0CQlcbiIKLQkgIglsZ3IJNiwlMwkJXG4iCi0JICIJbGxnZnIJNywlNQkJXG4iCi0JICIJbGdoaQkxLDEyOAkJXG4iCi0JICIJc2xsCTEsMjQJCVxuIgotCSAiCW9yCTAsMQkJXG4iCi0JICIJc2xncgkxLDEJCVxuIgotCSAiCWxncgkyLDEJCVxuIgotCSAiCWxncgk0LDEJCVxuIgotCSAiCWxncgk1LDEJCVxuIgotCSAiMDoJLmxvbmcJMHhiMmFlMDA0NglcbiIKLQkgIjE6CWJyYwkyLDBiCQlcbiIKLQkgIglicmMJNCwwYgkJXG4iCi0JICIJaXBtCSUwCQlcbiIKLQkgIglzcmwJJTAsMjgJCVxuIgotCSAiCWlpaGgJJTAsMAkJXG4iCi0JICIJaWlobAklMCwwCQlcbiIKLQkgIglsZ3IJJTEsMQkJXG4iCi0JICIJc3QJNCwwKDMpCQlcbiIKLQkgIglzdAk1LDQoMykJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpICAgJTAsJWg2CQlcbiIKLQkgIglqZyAgICAyYgkJXG4iCi0JICIucHJldmlvdXMJCQlcbiIKLQkgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIJXG4iCi0JICIgICAuYWxpZ24JOAkJXG4iCi0JICIgICAucXVhZAkwYiwzYgkJXG4iCi0JICIgICAucXVhZAkxYiwzYgkJXG4iCi0JICIucHJldmlvdXMiCi0JIDoiPWQiKGNjb2RlKSwiPWQiKCpzdCkKLQkgOiJkIiAocV9uciksICJkIiAocnNwKSwgImQiIChpZCksICJkIiAoYnVmZl9sKSwgIksiIChERVZfUkVDX0VYQ0VQVElPTikKLQkgOiJjYyIsIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwibWVtb3J5Iik7Ci0jZWxzZQotCSgiCWxyCTAsJTIJCVxuIgotCSAiCWxyCTMsJTQJCVxuIgotCSAiCWxyCTYsJTMJCVxuIgotCSAiCWxyCTcsJTUJCVxuIgotCSAiCWxoaQkxLDEyOAkJXG4iCi0JICIJc2xsCTEsMjQJCVxuIgotCSAiCW9yCTAsMQkJXG4iCi0JICIJc2xyCTEsMQkJXG4iCi0JICIJbHIJMiwxCQlcbiIKLQkgIglscgk0LDEJCVxuIgotCSAiCWxyCTUsMQkJXG4iCi0JICIwOgkubG9uZwkweGIyYWUwMDQ2CVxuIgotCSAiMToJYnJjCTIsMGIJCVxuIgotCSAiCWJyYwk0LDBiCQlcbiIKLQkgIglpcG0JJTAJCVxuIgotCSAiCXNybAklMCwyOAkJXG4iCi0JICIJbHIJJTEsMQkJXG4iCi0JICIJc3QJNCwwKDMpCQlcbiIKLQkgIglzdAk1LDQoMykJCVxuIgotCSAiMjoJCQkJXG4iCi0JICIuc2VjdGlvbiAuZml4dXAsXCJheFwiCVxuIgotCSAiMzoJCQkJXG4iCi0JICIJbGhpICAgJTAsJWg2CQlcbiIKLQkgIglicmFzICAxLDRmCQlcbiIKLQkgIgkubG9uZyAyYgkJXG4iCi0JICI0OgkJCQlcbiIKLQkgIglsICAgICAxLDAoMSkJCVxuIgotCSAiCWJyICAgIDEJCQlcbiIKLQkgIi5wcmV2aW91cwkJCVxuIgotCSAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIglcbiIKLQkgIiAgIC5hbGlnbgk0CQlcbiIKLQkgIiAgIC5sb25nCTBiLDNiCQlcbiIKLQkgIiAgIC5sb25nCTFiLDNiCQlcbiIKLQkgIi5wcmV2aW91cyIKLQkgOiI9ZCIoY2NvZGUpLCI9ZCIoKnN0KQotCSA6ImQiIChxX25yKSwgImQiIChyc3ApLCAiZCIgKGlkKSwgImQiIChidWZmX2wpLCAiSyIgKERFVl9SRUNfRVhDRVBUSU9OKQotCSA6ImNjIiwiMCIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCJtZW1vcnkiKTsKLSNlbmRpZgotCXJldHVybiBjY29kZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1pdG9MZTIoaW50ICppX3AsIHVuc2lnbmVkIGNoYXIgKmxlY2hhcnMpCi17Ci0JKmxlY2hhcnMgICAgICAgPSAqKCh1bnNpZ25lZCBjaGFyICopIGlfcCArIHNpemVvZihpbnQpIC0gMSk7Ci0JKihsZWNoYXJzICsgMSkgPSAqKCh1bnNpZ25lZCBjaGFyICopIGlfcCArIHNpemVvZihpbnQpIC0gMik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotbGUydG9JKHVuc2lnbmVkIGNoYXIgKmxlY2hhcnMsIGludCAqaV9wKQotewotCXVuc2lnbmVkIGNoYXIgKmljX3A7Ci0JKmlfcCA9IDA7Ci0JaWNfcCA9ICh1bnNpZ25lZCBjaGFyICopIGlfcDsKLQkqKGljX3AgKyAyKSA9ICoobGVjaGFycyArIDEpOwotCSooaWNfcCArIDMpID0gKihsZWNoYXJzKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWlzX2VtcHR5KHVuc2lnbmVkIGNoYXIgKnB0ciwgaW50IGxlbikKLXsKLQlyZXR1cm4gIW1lbWNtcChwdHIsICh1bnNpZ25lZCBjaGFyICopICZzdGF0aWNfcHZ0X21lX2tleSs2MCwgbGVuKTsKLX0KLQotZW51bSBoZHN0YXQKLXF1ZXJ5X29ubGluZShpbnQgZGV2aWNlTnIsIGludCBjZHgsIGludCByZXNldE5yLCBpbnQgKnFfZGVwdGgsIGludCAqZGV2X3R5cGUpCi17Ci0JaW50IHFfbnIsIGksIHRfZGVwdGgsIHRfZGV2X3R5cGU7Ci0JZW51bSBkZXZzdGF0IGNjb2RlOwotCXN0cnVjdCBhcF9zdGF0dXNfd29yZCBzdGF0X3dvcmQ7Ci0JZW51bSBoZHN0YXQgc3RhdDsKLQlpbnQgYnJlYWtfb3V0OwotCi0JcV9uciA9IChkZXZpY2VOciA8PCBTS0lQX0JJVEwpICsgY2R4OwotCXN0YXQgPSBIRF9CVVNZOwotCWNjb2RlID0gdGVzdHEocV9uciwgJnRfZGVwdGgsICZ0X2Rldl90eXBlLCAmc3RhdF93b3JkKTsKLQlQREVCVUcoImNjb2RlICVkIHJlc3BvbnNlX2NvZGUgJTAyWFxuIiwgY2NvZGUsIHN0YXRfd29yZC5yZXNwb25zZV9jb2RlKTsKLQlicmVha19vdXQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCByZXNldE5yOyBpKyspIHsKLQkJaWYgKGNjb2RlID4gMykgewotCQkJUFJJTlRLQygiRXhjZXB0aW9uIHRlc3RpbmcgZGV2aWNlICVkXG4iLCBpKTsKLQkJCXJldHVybiBIRF9UU1FfRVhDRVBUSU9OOwotCQl9Ci0JCXN3aXRjaCAoY2NvZGUpIHsKLQkJY2FzZSAwOgotCQkJUERFQlVHKCJ0X2Rldl90eXBlICVkXG4iLCB0X2Rldl90eXBlKTsKLQkJCWJyZWFrX291dCA9IDE7Ci0JCQlzdGF0ID0gSERfT05MSU5FOwotCQkJKnFfZGVwdGggPSB0X2RlcHRoICsgMTsKLQkJCXN3aXRjaCAodF9kZXZfdHlwZSkgewotCQkJY2FzZSBQQ0lDQV9IVzoKLQkJCQkqZGV2X3R5cGUgPSBQQ0lDQTsKLQkJCQlicmVhazsKLQkJCWNhc2UgUENJQ0NfSFc6Ci0JCQkJKmRldl90eXBlID0gUENJQ0M7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFBDSVhDQ19IVzoKLQkJCQkqZGV2X3R5cGUgPSBQQ0lYQ0NfVU5LOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDRVgyQ19IVzoKLQkJCQkqZGV2X3R5cGUgPSBDRVgyQzsKLQkJCQlicmVhazsKLQkJCWNhc2UgQ0VYMkFfSFc6Ci0JCQkJKmRldl90eXBlID0gQ0VYMkE7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCSpkZXZfdHlwZSA9IE5JTERFVjsKLQkJCQlicmVhazsKLQkJCX0KLQkJCVBERUJVRygiYXZhaWxhYmxlIGRldmljZSAlZDogUSBkZXB0aCA9ICVkLCBkZXYgIgotCQkJICAgICAgICJ0eXBlID0gJWQsIHN0YXQgPSAlMDJYJTAyWCUwMlglMDJYXG4iLAotCQkJICAgICAgIGRldmljZU5yLCAqcV9kZXB0aCwgKmRldl90eXBlLAotCQkJICAgICAgIHN0YXRfd29yZC5xX3N0YXRfZmxhZ3MsCi0JCQkgICAgICAgc3RhdF93b3JkLnJlc3BvbnNlX2NvZGUsCi0JCQkgICAgICAgc3RhdF93b3JkLnJlc2VydmVkWzBdLAotCQkJICAgICAgIHN0YXRfd29yZC5yZXNlcnZlZFsxXSk7Ci0JCQlicmVhazsKLQkJY2FzZSAzOgotCQkJc3dpdGNoIChzdGF0X3dvcmQucmVzcG9uc2VfY29kZSkgewotCQkJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6Ci0JCQkJc3RhdCA9IEhEX09OTElORTsKLQkJCQlicmVha19vdXQgPSAxOwotCQkJCSpxX2RlcHRoID0gdF9kZXB0aCArIDE7Ci0JCQkJKmRldl90eXBlID0gdF9kZXZfdHlwZTsKLQkJCQlQREVCVUcoImNjMywgYXZhaWxhYmxlIGRldmljZSAiCi0JCQkJICAgICAgICIlZDogUSBkZXB0aCA9ICVkLCBkZXYgIgotCQkJCSAgICAgICAidHlwZSA9ICVkLCBzdGF0ID0gIgotCQkJCSAgICAgICAiJTAyWCUwMlglMDJYJTAyWFxuIiwKLQkJCQkgICAgICAgZGV2aWNlTnIsICpxX2RlcHRoLAotCQkJCSAgICAgICAqZGV2X3R5cGUsCi0JCQkJICAgICAgIHN0YXRfd29yZC5xX3N0YXRfZmxhZ3MsCi0JCQkJICAgICAgIHN0YXRfd29yZC5yZXNwb25zZV9jb2RlLAotCQkJCSAgICAgICBzdGF0X3dvcmQucmVzZXJ2ZWRbMF0sCi0JCQkJICAgICAgIHN0YXRfd29yZC5yZXNlcnZlZFsxXSk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFQX1JFU1BPTlNFX1FfTk9UX0FWQUlMOgotCQkJCXN0YXQgPSBIRF9OT1RfVEhFUkU7Ci0JCQkJYnJlYWtfb3V0ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVBfUkVTUE9OU0VfUkVTRVRfSU5fUFJPR1JFU1M6Ci0JCQkJUERFQlVHKCJkZXZpY2UgJWQgaW4gcmVzZXRcbiIsCi0JCQkJICAgICAgIGRldmljZU5yKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgotCQkJCXN0YXQgPSBIRF9ERUNPTkZJR1VSRUQ7Ci0JCQkJYnJlYWtfb3V0ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVBfUkVTUE9OU0VfQ0hFQ0tTVE9QUEVEOgotCQkJCXN0YXQgPSBIRF9DSEVDS1NUT1BQRUQ7Ci0JCQkJYnJlYWtfb3V0ID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQVBfUkVTUE9OU0VfQlVTWToKLQkJCQlQREVCVUcoImRldmljZSAlZCBidXN5XG4iLAotCQkJCSAgICAgICBkZXZpY2VOcik7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzdGF0ID0gSERfTk9UX1RIRVJFOwotCQkJYnJlYWtfb3V0ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChicmVha19vdXQpCi0JCQlicmVhazsKLQotCQl1ZGVsYXkoNSk7Ci0KLQkJY2NvZGUgPSB0ZXN0cShxX25yLCAmdF9kZXB0aCwgJnRfZGV2X3R5cGUsICZzdGF0X3dvcmQpOwotCX0KLQlyZXR1cm4gc3RhdDsKLX0KLQotZW51bSBkZXZzdGF0Ci1yZXNldF9kZXZpY2UoaW50IGRldmljZU5yLCBpbnQgY2R4LCBpbnQgcmVzZXROcikKLXsKLQlpbnQgcV9uciwgY2NvZGUgPSAwLCBkdW1teV9xZGVwdGgsIGR1bW15X2RldlR5cGUsIGk7Ci0Jc3RydWN0IGFwX3N0YXR1c193b3JkIHN0YXRfd29yZDsKLQllbnVtIGRldnN0YXQgc3RhdDsKLQlpbnQgYnJlYWtfb3V0OwotCi0JcV9uciA9IChkZXZpY2VOciA8PCBTS0lQX0JJVEwpICsgY2R4OwotCXN0YXQgPSBERVZfR09ORTsKLQljY29kZSA9IHJlc2V0cShxX25yLCAmc3RhdF93b3JkKTsKLQlpZiAoY2NvZGUgPiAzKQotCQlyZXR1cm4gREVWX1JTUV9FWENFUFRJT047Ci0KLQlicmVha19vdXQgPSAwOwotCWZvciAoaSA9IDA7IGkgPCByZXNldE5yOyBpKyspIHsKLQkJc3dpdGNoIChjY29kZSkgewotCQljYXNlIDA6Ci0JCQlzdGF0ID0gREVWX09OTElORTsKLQkJCWlmIChzdGF0X3dvcmQucV9zdGF0X2ZsYWdzICYgQVBfUV9TVEFUVVNfRU1QVFkpCi0JCQkJYnJlYWtfb3V0ID0gMTsKLQkJCWJyZWFrOwotCQljYXNlIDM6Ci0JCQlzd2l0Y2ggKHN0YXRfd29yZC5yZXNwb25zZV9jb2RlKSB7Ci0JCQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKLQkJCQlzdGF0ID0gREVWX09OTElORTsKLQkJCQlpZiAoc3RhdF93b3JkLnFfc3RhdF9mbGFncyAmIEFQX1FfU1RBVFVTX0VNUFRZKQotCQkJCQlicmVha19vdXQgPSAxOwotCQkJCWJyZWFrOwotCQkJY2FzZSBBUF9SRVNQT05TRV9RX05PVF9BVkFJTDoKLQkJCWNhc2UgQVBfUkVTUE9OU0VfREVDT05GSUdVUkVEOgotCQkJY2FzZSBBUF9SRVNQT05TRV9DSEVDS1NUT1BQRUQ6Ci0JCQkJc3RhdCA9IERFVl9HT05FOwotCQkJCWJyZWFrX291dCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFQX1JFU1BPTlNFX1JFU0VUX0lOX1BST0dSRVNTOgotCQkJY2FzZSBBUF9SRVNQT05TRV9CVVNZOgotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJc3RhdCA9IERFVl9HT05FOwotCQkJYnJlYWtfb3V0ID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChicmVha19vdXQgPT0gMSkKLQkJCWJyZWFrOwotCQl1ZGVsYXkoNSk7Ci0KLQkJY2NvZGUgPSB0ZXN0cShxX25yLCAmZHVtbXlfcWRlcHRoLCAmZHVtbXlfZGV2VHlwZSwgJnN0YXRfd29yZCk7Ci0JCWlmIChjY29kZSA+IDMpIHsKLQkJCXN0YXQgPSBERVZfVFNRX0VYQ0VQVElPTjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCVBERUJVRygiTnVtYmVyIG9mIHRlc3RxJ3MgbmVlZGVkIGZvciByZXNldDogJWRcbiIsIGkpOwotCi0JaWYgKGkgPj0gcmVzZXROcikgewotCSAgc3RhdCA9IERFVl9HT05FOwotCX0KLQotCXJldHVybiBzdGF0OwotfQotCi0jaWZkZWYgREVCVUdfSFlEUkFfTVNHUwotc3RhdGljIGlubGluZSB2b2lkCi1wcmludF9idWZmZXIodW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmxlbikKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgYnVmZmxlbjsgaSArPSAxNikgewotCQlQUklOVEsoIiUwNFg6ICUwMlglMDJYJTAyWCUwMlggJTAyWCUwMlglMDJYJTAyWCAiCi0JCSAgICAgICAiJTAyWCUwMlglMDJYJTAyWCAlMDJYJTAyWCUwMlglMDJYXG4iLCBpLAotCQkgICAgICAgYnVmZmVyW2krMF0sIGJ1ZmZlcltpKzFdLCBidWZmZXJbaSsyXSwgYnVmZmVyW2krM10sCi0JCSAgICAgICBidWZmZXJbaSs0XSwgYnVmZmVyW2krNV0sIGJ1ZmZlcltpKzZdLCBidWZmZXJbaSs3XSwKLQkJICAgICAgIGJ1ZmZlcltpKzhdLCBidWZmZXJbaSs5XSwgYnVmZmVyW2krMTBdLCBidWZmZXJbaSsxMV0sCi0JCSAgICAgICBidWZmZXJbaSsxMl0sIGJ1ZmZlcltpKzEzXSwgYnVmZmVyW2krMTRdLCBidWZmZXJbaSsxNV0pOwotCX0KLX0KLSNlbmRpZgotCi1lbnVtIGRldnN0YXQKLXNlbmRfdG9fQVAoaW50IGRldl9uciwgaW50IGNkeCwgaW50IG1zZ19sZW4sIHVuc2lnbmVkIGNoYXIgKm1zZ19leHQpCi17Ci0Jc3RydWN0IGFwX3N0YXR1c193b3JkIHN0YXRfd29yZDsKLQllbnVtIGRldnN0YXQgc3RhdDsKLQlpbnQgY2NvZGU7Ci0JdTMyICpxX25yX3AgPSAodTMyICopbXNnX2V4dDsKLQotCSpxX25yX3AgPSAoZGV2X25yIDw8IFNLSVBfQklUTCkgKyBjZHg7Ci0JUERFQlVHKCJtc2dfbGVuIHBhc3NlZCB0byBzZW46ICVkXG4iLCBtc2dfbGVuKTsKLQlQREVCVUcoInEgbnVtYmVyIHBhc3NlZCB0byBzZW46ICUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JICAgICAgIG1zZ19leHRbMF0sIG1zZ19leHRbMV0sIG1zZ19leHRbMl0sIG1zZ19leHRbM10pOwotCXN0YXQgPSBERVZfR09ORTsKLQotI2lmZGVmIERFQlVHX0hZRFJBX01TR1MKLQlQUklOVEsoIlJlcXVlc3QgaGVhZGVyOiAlMDJYJTAyWCUwMlglMDJYICUwMlglMDJYJTAyWCUwMlggIgotCSAgICAgICAiJTAyWCUwMlglMDJYJTAyWFxuIiwKLQkgICAgICAgbXNnX2V4dFswXSwgbXNnX2V4dFsxXSwgbXNnX2V4dFsyXSwgbXNnX2V4dFszXSwKLQkgICAgICAgbXNnX2V4dFs0XSwgbXNnX2V4dFs1XSwgbXNnX2V4dFs2XSwgbXNnX2V4dFs3XSwKLQkgICAgICAgbXNnX2V4dFs4XSwgbXNnX2V4dFs5XSwgbXNnX2V4dFsxMF0sIG1zZ19leHRbMTFdKTsKLQlwcmludF9idWZmZXIobXNnX2V4dCtDQUxMRVJfSEVBREVSLCBtc2dfbGVuKTsKLSNlbmRpZgotCi0JY2NvZGUgPSBzZW4obXNnX2xlbiwgbXNnX2V4dCwgJnN0YXRfd29yZCk7Ci0JaWYgKGNjb2RlID4gMykKLQkJcmV0dXJuIERFVl9TRU5fRVhDRVBUSU9OOwotCi0JUERFQlVHKCJucSBjYzogJXUsIHN0OiAlMDJ4JTAyeCUwMnglMDJ4XG4iLAotCSAgICAgICBjY29kZSwgc3RhdF93b3JkLnFfc3RhdF9mbGFncywgc3RhdF93b3JkLnJlc3BvbnNlX2NvZGUsCi0JICAgICAgIHN0YXRfd29yZC5yZXNlcnZlZFswXSwgc3RhdF93b3JkLnJlc2VydmVkWzFdKTsKLQlzd2l0Y2ggKGNjb2RlKSB7Ci0JY2FzZSAwOgotCQlzdGF0ID0gREVWX09OTElORTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzdGF0ID0gREVWX0dPTkU7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJc3dpdGNoIChzdGF0X3dvcmQucmVzcG9uc2VfY29kZSkgewotCQljYXNlIEFQX1JFU1BPTlNFX05PUk1BTDoKLQkJCXN0YXQgPSBERVZfT05MSU5FOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVBfUkVTUE9OU0VfUV9GVUxMOgotCQkJc3RhdCA9IERFVl9RVUVVRV9GVUxMOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlzdGF0ID0gREVWX0dPTkU7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzdGF0ID0gREVWX0dPTkU7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBzdGF0OwotfQotCi1lbnVtIGRldnN0YXQKLXJlY2VpdmVfZnJvbV9BUChpbnQgZGV2X25yLCBpbnQgY2R4LCBpbnQgcmVzcGxlbiwgdW5zaWduZWQgY2hhciAqcmVzcCwKLQkJdW5zaWduZWQgY2hhciAqcHNtaWQpCi17Ci0JaW50IGNjb2RlOwotCXN0cnVjdCBhcF9zdGF0dXNfd29yZCBzdGF0X3dvcmQ7Ci0JZW51bSBkZXZzdGF0IHN0YXQ7Ci0KLQltZW1zZXQocmVzcCwgMHgwMCwgOCk7Ci0KLQljY29kZSA9IHJlYygoZGV2X25yIDw8IFNLSVBfQklUTCkgKyBjZHgsIHJlc3BsZW4sIHJlc3AsIHBzbWlkLAotCQkgICAgJnN0YXRfd29yZCk7Ci0JaWYgKGNjb2RlID4gMykKLQkJcmV0dXJuIERFVl9SRUNfRVhDRVBUSU9OOwotCi0JUERFQlVHKCJkcSBjYzogJXUsIHN0OiAlMDJ4JTAyeCUwMnglMDJ4XG4iLAotCSAgICAgICBjY29kZSwgc3RhdF93b3JkLnFfc3RhdF9mbGFncywgc3RhdF93b3JkLnJlc3BvbnNlX2NvZGUsCi0JICAgICAgIHN0YXRfd29yZC5yZXNlcnZlZFswXSwgc3RhdF93b3JkLnJlc2VydmVkWzFdKTsKLQotCXN0YXQgPSBERVZfR09ORTsKLQlzd2l0Y2ggKGNjb2RlKSB7Ci0JY2FzZSAwOgotCQlzdGF0ID0gREVWX09OTElORTsKLSNpZmRlZiBERUJVR19IWURSQV9NU0dTCi0JCXByaW50X2J1ZmZlcihyZXNwLCByZXNwbGVuKTsKLSNlbmRpZgotCQlicmVhazsKLQljYXNlIDM6Ci0JCXN3aXRjaCAoc3RhdF93b3JkLnJlc3BvbnNlX2NvZGUpIHsKLQkJY2FzZSBBUF9SRVNQT05TRV9OT1JNQUw6Ci0JCQlzdGF0ID0gREVWX09OTElORTsKLQkJCWJyZWFrOwotCQljYXNlIEFQX1JFU1BPTlNFX05PX1BFTkRJTkdfUkVQTFk6Ci0JCQlpZiAoc3RhdF93b3JkLnFfc3RhdF9mbGFncyAmIEFQX1FfU1RBVFVTX0VNUFRZKQotCQkJCXN0YXQgPSBERVZfRU1QVFk7Ci0JCQllbHNlCi0JCQkJc3RhdCA9IERFVl9OT19XT1JLOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVBfUkVTUE9OU0VfSU5ERVhfVE9PX0JJRzoKLQkJY2FzZSBBUF9SRVNQT05TRV9OT19GSVJTVF9QQVJUOgotCQljYXNlIEFQX1JFU1BPTlNFX01FU1NBR0VfVE9PX0JJRzoKLQkJCXN0YXQgPSBERVZfQkFEX01FU1NBR0U7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBzdGF0OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcGFkX21zZyh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCAgdG90YWxMZW5ndGgsIGludCBtc2dMZW5ndGgpCi17Ci0JaW50IHBhZF9sZW47Ci0KLQlmb3IgKHBhZF9sZW4gPSAwOyBwYWRfbGVuIDwgKHRvdGFsTGVuZ3RoIC0gbXNnTGVuZ3RoKTsgcGFkX2xlbisrKQotCQlpZiAoYnVmZmVyW3BhZF9sZW5dICE9IDB4MDApCi0JCQlicmVhazsKLQlwYWRfbGVuIC09IDM7Ci0JaWYgKHBhZF9sZW4gPCA4KQotCQlyZXR1cm4gU0VOX1BBRF9FUlJPUjsKLQotCWJ1ZmZlclswXSA9IDB4MDA7Ci0JYnVmZmVyWzFdID0gMHgwMjsKLQotCW1lbWNweShidWZmZXIrMiwgc3RhdGljX3BhZCwgcGFkX2xlbik7Ci0KLQlidWZmZXJbcGFkX2xlbiArIDJdID0gMHgwMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotaXNfY29tbW9uX3B1YmxpY19rZXkodW5zaWduZWQgY2hhciAqa2V5LCBpbnQgbGVuKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQlpZiAoa2V5W2ldKQotCQkJYnJlYWs7Ci0Ja2V5ICs9IGk7Ci0JbGVuIC09IGk7Ci0JaWYgKCgobGVuID09IDEpICYmIChrZXlbMF0gPT0gMykpIHx8Ci0JICAgICgobGVuID09IDMpICYmIChrZXlbMF0gPT0gMSkgJiYgKGtleVsxXSA9PSAwKSAmJiAoa2V5WzJdID09IDEpKSkKLQkJcmV0dXJuIDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotSUNBTUVYX21zZ190b190eXBlNE1FWF9tc2coc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqaWNhTWV4X3AsIGludCAqejkwY01zZ19sX3AsCi0JCQkgICB1bmlvbiB0eXBlNF9tc2cgKno5MGNNc2dfcCkKLXsKLQlpbnQgbW9kX2xlbiwgbXNnX3NpemUsIG1vZF90Z3RfbGVuLCBleHBfdGd0X2xlbiwgaW5wX3RndF9sZW47Ci0JdW5zaWduZWQgY2hhciAqbW9kX3RndCwgKmV4cF90Z3QsICppbnBfdGd0OwotCXVuaW9uIHR5cGU0X21zZyAqdG1wX3R5cGU0X21zZzsKLQotCW1vZF9sZW4gPSBpY2FNZXhfcC0+aW5wdXRkYXRhbGVuZ3RoOwotCi0JbXNnX3NpemUgPSAoKG1vZF9sZW4gPD0gMTI4KSA/IFRZUEU0X1NNRV9MRU4gOiBUWVBFNF9MTUVfTEVOKSArCi0JCSAgICBDQUxMRVJfSEVBREVSOwotCi0JbWVtc2V0KHo5MGNNc2dfcCwgMCwgbXNnX3NpemUpOwotCi0JdG1wX3R5cGU0X21zZyA9ICh1bmlvbiB0eXBlNF9tc2cgKikKLQkJKCh1bnNpZ25lZCBjaGFyICopIHo5MGNNc2dfcCArIENBTExFUl9IRUFERVIpOwotCi0JdG1wX3R5cGU0X21zZy0+c21lLmhlYWRlci5tc2dfdHlwZV9jb2RlID0gVFlQRTRfVFlQRV9DT0RFOwotCXRtcF90eXBlNF9tc2ctPnNtZS5oZWFkZXIucmVxdWVzdF9jb2RlID0gVFlQRTRfUkVRVV9DT0RFOwotCi0JaWYgKG1vZF9sZW4gPD0gMTI4KSB7Ci0JCXRtcF90eXBlNF9tc2ctPnNtZS5oZWFkZXIubXNnX2ZtdCA9IFRZUEU0X1NNRV9GTVQ7Ci0JCXRtcF90eXBlNF9tc2ctPnNtZS5oZWFkZXIubXNnX2xlbiA9IFRZUEU0X1NNRV9MRU47Ci0JCW1vZF90Z3QgPSB0bXBfdHlwZTRfbXNnLT5zbWUubW9kdWx1czsKLQkJbW9kX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU0X21zZy0+c21lLm1vZHVsdXMpOwotCQlleHBfdGd0ID0gdG1wX3R5cGU0X21zZy0+c21lLmV4cG9uZW50OwotCQlleHBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5zbWUuZXhwb25lbnQpOwotCQlpbnBfdGd0ID0gdG1wX3R5cGU0X21zZy0+c21lLm1lc3NhZ2U7Ci0JCWlucF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPnNtZS5tZXNzYWdlKTsKLQl9IGVsc2UgewotCQl0bXBfdHlwZTRfbXNnLT5sbWUuaGVhZGVyLm1zZ19mbXQgPSBUWVBFNF9MTUVfRk1UOwotCQl0bXBfdHlwZTRfbXNnLT5sbWUuaGVhZGVyLm1zZ19sZW4gPSBUWVBFNF9MTUVfTEVOOwotCQltb2RfdGd0ID0gdG1wX3R5cGU0X21zZy0+bG1lLm1vZHVsdXM7Ci0JCW1vZF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPmxtZS5tb2R1bHVzKTsKLQkJZXhwX3RndCA9IHRtcF90eXBlNF9tc2ctPmxtZS5leHBvbmVudDsKLQkJZXhwX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU0X21zZy0+bG1lLmV4cG9uZW50KTsKLQkJaW5wX3RndCA9IHRtcF90eXBlNF9tc2ctPmxtZS5tZXNzYWdlOwotCQlpbnBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5sbWUubWVzc2FnZSk7Ci0JfQotCi0JbW9kX3RndCArPSAobW9kX3RndF9sZW4gLSBtb2RfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIobW9kX3RndCwgaWNhTWV4X3AtPm5fbW9kdWx1cywgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KG1vZF90Z3QsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JZXhwX3RndCArPSAoZXhwX3RndF9sZW4gLSBtb2RfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIoZXhwX3RndCwgaWNhTWV4X3AtPmJfa2V5LCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoZXhwX3RndCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQlpbnBfdGd0ICs9IChpbnBfdGd0X2xlbiAtIG1vZF9sZW4pOwotCWlmIChjb3B5X2Zyb21fdXNlcihpbnBfdGd0LCBpY2FNZXhfcC0+aW5wdXRkYXRhLCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoaW5wX3RndCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQotCSp6OTBjTXNnX2xfcCA9IG1zZ19zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FDUlRfbXNnX3RvX3R5cGU0Q1JUX21zZyhzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCAqaWNhTXNnX3AsCi0JCQkgICBpbnQgKno5MGNNc2dfbF9wLCB1bmlvbiB0eXBlNF9tc2cgKno5MGNNc2dfcCkKLXsKLQlpbnQgbW9kX2xlbiwgc2hvcnRfbGVuLCBsb25nX2xlbiwgdG1wX3NpemUsIHBfdGd0X2xlbiwgcV90Z3RfbGVuLAotCSAgICBkcF90Z3RfbGVuLCBkcV90Z3RfbGVuLCB1X3RndF9sZW4sIGlucF90Z3RfbGVuOwotCXVuc2lnbmVkIGNoYXIgKnBfdGd0LCAqcV90Z3QsICpkcF90Z3QsICpkcV90Z3QsICp1X3RndCwgKmlucF90Z3Q7Ci0JdW5pb24gdHlwZTRfbXNnICp0bXBfdHlwZTRfbXNnOwotCi0JbW9kX2xlbiA9IGljYU1zZ19wLT5pbnB1dGRhdGFsZW5ndGg7Ci0Jc2hvcnRfbGVuID0gbW9kX2xlbiAvIDI7Ci0JbG9uZ19sZW4gPSBtb2RfbGVuIC8gMiArIDg7Ci0KLQl0bXBfc2l6ZSA9ICgobW9kX2xlbiA8PSAxMjgpID8gVFlQRTRfU0NSX0xFTiA6IFRZUEU0X0xDUl9MRU4pICsKLQkJICAgIENBTExFUl9IRUFERVI7Ci0KLQltZW1zZXQoejkwY01zZ19wLCAwLCB0bXBfc2l6ZSk7Ci0KLQl0bXBfdHlwZTRfbXNnID0gKHVuaW9uIHR5cGU0X21zZyAqKQotCQkoKHVuc2lnbmVkIGNoYXIgKikgejkwY01zZ19wICsgQ0FMTEVSX0hFQURFUik7Ci0KLQl0bXBfdHlwZTRfbXNnLT5zY3IuaGVhZGVyLm1zZ190eXBlX2NvZGUgPSBUWVBFNF9UWVBFX0NPREU7Ci0JdG1wX3R5cGU0X21zZy0+c2NyLmhlYWRlci5yZXF1ZXN0X2NvZGUgPSBUWVBFNF9SRVFVX0NPREU7Ci0JaWYgKG1vZF9sZW4gPD0gMTI4KSB7Ci0JCXRtcF90eXBlNF9tc2ctPnNjci5oZWFkZXIubXNnX2ZtdCA9IFRZUEU0X1NDUl9GTVQ7Ci0JCXRtcF90eXBlNF9tc2ctPnNjci5oZWFkZXIubXNnX2xlbiA9IFRZUEU0X1NDUl9MRU47Ci0JCXBfdGd0ID0gdG1wX3R5cGU0X21zZy0+c2NyLnA7Ci0JCXBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5zY3IucCk7Ci0JCXFfdGd0ID0gdG1wX3R5cGU0X21zZy0+c2NyLnE7Ci0JCXFfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5zY3IucSk7Ci0JCWRwX3RndCA9IHRtcF90eXBlNF9tc2ctPnNjci5kcDsKLQkJZHBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5zY3IuZHApOwotCQlkcV90Z3QgPSB0bXBfdHlwZTRfbXNnLT5zY3IuZHE7Ci0JCWRxX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU0X21zZy0+c2NyLmRxKTsKLQkJdV90Z3QgPSB0bXBfdHlwZTRfbXNnLT5zY3IudTsKLQkJdV90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPnNjci51KTsKLQkJaW5wX3RndCA9IHRtcF90eXBlNF9tc2ctPnNjci5tZXNzYWdlOwotCQlpbnBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5zY3IubWVzc2FnZSk7Ci0JfSBlbHNlIHsKLQkJdG1wX3R5cGU0X21zZy0+bGNyLmhlYWRlci5tc2dfZm10ID0gVFlQRTRfTENSX0ZNVDsKLQkJdG1wX3R5cGU0X21zZy0+bGNyLmhlYWRlci5tc2dfbGVuID0gVFlQRTRfTENSX0xFTjsKLQkJcF90Z3QgPSB0bXBfdHlwZTRfbXNnLT5sY3IucDsKLQkJcF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPmxjci5wKTsKLQkJcV90Z3QgPSB0bXBfdHlwZTRfbXNnLT5sY3IucTsKLQkJcV90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPmxjci5xKTsKLQkJZHBfdGd0ID0gdG1wX3R5cGU0X21zZy0+bGNyLmRwOwotCQlkcF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPmxjci5kcCk7Ci0JCWRxX3RndCA9IHRtcF90eXBlNF9tc2ctPmxjci5kcTsKLQkJZHFfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTRfbXNnLT5sY3IuZHEpOwotCQl1X3RndCA9IHRtcF90eXBlNF9tc2ctPmxjci51OwotCQl1X3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU0X21zZy0+bGNyLnUpOwotCQlpbnBfdGd0ID0gdG1wX3R5cGU0X21zZy0+bGNyLm1lc3NhZ2U7Ci0JCWlucF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNF9tc2ctPmxjci5tZXNzYWdlKTsKLQl9Ci0KLQlwX3RndCArPSAocF90Z3RfbGVuIC0gbG9uZ19sZW4pOwotCWlmIChjb3B5X2Zyb21fdXNlcihwX3RndCwgaWNhTXNnX3AtPm5wX3ByaW1lLCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHBfdGd0LCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQlxX3RndCArPSAocV90Z3RfbGVuIC0gc2hvcnRfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIocV90Z3QsIGljYU1zZ19wLT5ucV9wcmltZSwgc2hvcnRfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkocV90Z3QsIHNob3J0X2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQlkcF90Z3QgKz0gKGRwX3RndF9sZW4gLSBsb25nX2xlbik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRwX3RndCwgaWNhTXNnX3AtPmJwX2tleSwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eShkcF90Z3QsIGxvbmdfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCWRxX3RndCArPSAoZHFfdGd0X2xlbiAtIHNob3J0X2xlbik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRxX3RndCwgaWNhTXNnX3AtPmJxX2tleSwgc2hvcnRfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoZHFfdGd0LCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdV90Z3QgKz0gKHVfdGd0X2xlbiAtIGxvbmdfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIodV90Z3QsIGljYU1zZ19wLT51X211bHRfaW52LCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHVfdGd0LCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQlpbnBfdGd0ICs9IChpbnBfdGd0X2xlbiAtIG1vZF9sZW4pOwotCWlmIChjb3B5X2Zyb21fdXNlcihpbnBfdGd0LCBpY2FNc2dfcC0+aW5wdXRkYXRhLCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoaW5wX3RndCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQotCSp6OTBjTXNnX2xfcCA9IHRtcF9zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FNRVhfbXNnX3RvX3R5cGU2TUVYX2RlX21zZyhzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICppY2FNc2dfcCwgaW50IGNkeCwKLQkJCSAgICAgIGludCAqejkwY01zZ19sX3AsIHN0cnVjdCB0eXBlNl9tc2cgKno5MGNNc2dfcCkKLXsKLQlpbnQgbW9kX2xlbiwgdnVkX2xlbiwgdG1wX3NpemUsIHRvdGFsX0NQUkJfbGVuLCBwYXJtQmxvY2tfbDsKLQl1bnNpZ25lZCBjaGFyICp0ZW1wOwotCXN0cnVjdCB0eXBlNl9oZHIgKnRwNkhkcl9wOwotCXN0cnVjdCBDUFJCICpjcHJiX3A7Ci0Jc3RydWN0IGNjYV9wcml2YXRlX2V4dF9NRSAqa2V5X3A7Ci0Jc3RhdGljIGludCBkZXByZWNhdGVkX21zZ19jb3VudCA9IDA7Ci0KLQltb2RfbGVuID0gaWNhTXNnX3AtPmlucHV0ZGF0YWxlbmd0aDsKLQl0bXBfc2l6ZSA9IEZJWEVEX1RZUEU2X01FX0xFTiArIG1vZF9sZW47Ci0JdG90YWxfQ1BSQl9sZW4gPSB0bXBfc2l6ZSAtIHNpemVvZihzdHJ1Y3QgdHlwZTZfaGRyKTsKLQlwYXJtQmxvY2tfbCA9IHRvdGFsX0NQUkJfbGVuIC0gc2l6ZW9mKHN0cnVjdCBDUFJCKTsKLQl0bXBfc2l6ZSA9IDQqKCh0bXBfc2l6ZSArIDMpLzQpICsgQ0FMTEVSX0hFQURFUjsKLQotCW1lbXNldCh6OTBjTXNnX3AsIDAsIHRtcF9zaXplKTsKLQotCXRlbXAgPSAodW5zaWduZWQgY2hhciAqKXo5MGNNc2dfcCArIENBTExFUl9IRUFERVI7Ci0JbWVtY3B5KHRlbXAsICZzdGF0aWNfdHlwZTZfaGRyLCBzaXplb2Yoc3RydWN0IHR5cGU2X2hkcikpOwotCXRwNkhkcl9wID0gKHN0cnVjdCB0eXBlNl9oZHIgKil0ZW1wOwotCXRwNkhkcl9wLT5Ub0NhcmRMZW4xID0gNCooKHRvdGFsX0NQUkJfbGVuKzMpLzQpOwotCXRwNkhkcl9wLT5Gcm9tQ2FyZExlbjEgPSBSRVNQT05TRV9DUFJCX1NJWkU7Ci0KLQl0ZW1wICs9IHNpemVvZihzdHJ1Y3QgdHlwZTZfaGRyKTsKLQltZW1jcHkodGVtcCwgJnN0YXRpY19jcHJiLCBzaXplb2Yoc3RydWN0IENQUkIpKTsKLQljcHJiX3AgPSAoc3RydWN0IENQUkIgKikgdGVtcDsKLQljcHJiX3AtPnVzYWdlX2RvbWFpblswXT0gKHVuc2lnbmVkIGNoYXIpY2R4OwotCWl0b0xlMigmcGFybUJsb2NrX2wsIGNwcmJfcC0+cmVxX3Bhcm1sKTsKLQlpdG9MZTIoKGludCAqKSYodHA2SGRyX3AtPkZyb21DYXJkTGVuMSksIGNwcmJfcC0+cnBsX3Bhcm1sKTsKLQotCXRlbXAgKz0gc2l6ZW9mKHN0cnVjdCBDUFJCKTsKLQltZW1jcHkodGVtcCwgJnN0YXRpY19wa2RfZnVuY3Rpb25fYW5kX3J1bGVzLAotCSAgICAgICBzaXplb2Yoc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jaykpOwotCi0JdGVtcCArPSBzaXplb2Yoc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayk7Ci0JdnVkX2xlbiA9IDIgKyBpY2FNc2dfcC0+aW5wdXRkYXRhbGVuZ3RoOwotCWl0b0xlMigmdnVkX2xlbiwgdGVtcCk7Ci0KLQl0ZW1wICs9IDI7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRlbXAsIGljYU1zZ19wLT5pbnB1dGRhdGEsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0ZW1wLCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCi0JdGVtcCArPSBtb2RfbGVuOwotCW1lbWNweSh0ZW1wLCAmc3RhdGljX1Q2X2tleUJsb2NrX2hkciwgc2l6ZW9mKHN0cnVjdCBUNl9rZXlCbG9ja19oZHIpKTsKLQotCXRlbXAgKz0gc2l6ZW9mKHN0cnVjdCBUNl9rZXlCbG9ja19oZHIpOwotCW1lbWNweSh0ZW1wLCAmc3RhdGljX3B2dF9tZV9rZXksIHNpemVvZihzdHJ1Y3QgY2NhX3ByaXZhdGVfZXh0X01FKSk7Ci0Ja2V5X3AgPSAoc3RydWN0IGNjYV9wcml2YXRlX2V4dF9NRSAqKXRlbXA7Ci0JdGVtcCA9IGtleV9wLT5wdnRNRVNlYy5leHBvbmVudCArIHNpemVvZihrZXlfcC0+cHZ0TUVTZWMuZXhwb25lbnQpCi0JICAgICAgIC0gbW9kX2xlbjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgaWNhTXNnX3AtPmJfa2V5LCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkodGVtcCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQotCWlmIChpc19jb21tb25fcHVibGljX2tleSh0ZW1wLCBtb2RfbGVuKSkgewotCQlpZiAoZGVwcmVjYXRlZF9tc2dfY291bnQgPCAyMCkgewotCQkJUFJJTlRLKCJDb21tb24gcHVibGljIGtleSB1c2VkIGZvciBtb2RleCBkZWNyeXB0XG4iKTsKLQkJCWRlcHJlY2F0ZWRfbXNnX2NvdW50Kys7Ci0JCQlpZiAoZGVwcmVjYXRlZF9tc2dfY291bnQgPT0gMjApCi0JCQkJUFJJTlRLKCJObyBsb25nZXIgaXNzdWluZyBtZXNzYWdlcyBhYm91dCBjb21tb24iCi0JCQkJICAgICAgICIgcHVibGljIGtleSBmb3IgbW9kZXggZGVjcnlwdC5cbiIpOwotCQl9Ci0JCXJldHVybiBTRU5fTk9UX0FWQUlMOwotCX0KLQotCXRlbXAgPSBrZXlfcC0+cHZ0TUVTZWMubW9kdWx1cyArIHNpemVvZihrZXlfcC0+cHZ0TUVTZWMubW9kdWx1cykKLQkgICAgICAgLSBtb2RfbGVuOwotCWlmIChjb3B5X2Zyb21fdXNlcih0ZW1wLCBpY2FNc2dfcC0+bl9tb2R1bHVzLCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkodGVtcCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQotCWtleV9wLT5wdWJNRVNlYy5tb2R1bHVzX2JpdF9sZW4gPSA4ICogbW9kX2xlbjsKLQotCSp6OTBjTXNnX2xfcCA9IHRtcF9zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FNRVhfbXNnX3RvX3R5cGU2TUVYX2VuX21zZyhzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICppY2FNc2dfcCwgaW50IGNkeCwKLQkJCSAgICAgIGludCAqejkwY01zZ19sX3AsIHN0cnVjdCB0eXBlNl9tc2cgKno5MGNNc2dfcCkKLXsKLQlpbnQgbW9kX2xlbiwgdnVkX2xlbiwgZXhwX2xlbiwga2V5X2xlbjsKLQlpbnQgcGFkX2xlbiwgdG1wX3NpemUsIHRvdGFsX0NQUkJfbGVuLCBwYXJtQmxvY2tfbCwgaTsKLQl1bnNpZ25lZCBjaGFyICp0ZW1wX2V4cCwgKmV4cF9wLCAqdGVtcDsKLQlzdHJ1Y3QgdHlwZTZfaGRyICp0cDZIZHJfcDsKLQlzdHJ1Y3QgQ1BSQiAqY3ByYl9wOwotCXN0cnVjdCBjY2FfcHVibGljX2tleSAqa2V5X3A7Ci0Jc3RydWN0IFQ2X2tleUJsb2NrX2hkciAqa2V5Yl9wOwotCi0JdGVtcF9leHAgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0ZW1wX2V4cCkKLQkJcmV0dXJuIEVHRVRCVUZGOwotCW1vZF9sZW4gPSBpY2FNc2dfcC0+aW5wdXRkYXRhbGVuZ3RoOwotCWlmIChjb3B5X2Zyb21fdXNlcih0ZW1wX2V4cCwgaWNhTXNnX3AtPmJfa2V5LCBtb2RfbGVuKSkgewotCQlrZnJlZSh0ZW1wX2V4cCk7Ci0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JfQotCWlmIChpc19lbXB0eSh0ZW1wX2V4cCwgbW9kX2xlbikpIHsKLQkJa2ZyZWUodGVtcF9leHApOwotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JfQotCi0JZXhwX3AgPSB0ZW1wX2V4cDsKLQlmb3IgKGkgPSAwOyBpIDwgbW9kX2xlbjsgaSsrKQotCQlpZiAoZXhwX3BbaV0pCi0JCQlicmVhazsKLQlpZiAoaSA+PSBtb2RfbGVuKSB7Ci0JCWtmcmVlKHRlbXBfZXhwKTsKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCX0KLQotCWV4cF9sZW4gPSBtb2RfbGVuIC0gaTsKLQlleHBfcCArPSBpOwotCi0JUERFQlVHKCJleHBfbGVuIGFmdGVyIGNvbXB1dGF0aW9uOiAlMDh4XG4iLCBleHBfbGVuKTsKLQl0bXBfc2l6ZSA9IEZJWEVEX1RZUEU2X01FX0VOX0xFTiArIDIgKiBtb2RfbGVuICsgZXhwX2xlbjsKLQl0b3RhbF9DUFJCX2xlbiA9IHRtcF9zaXplIC0gc2l6ZW9mKHN0cnVjdCB0eXBlNl9oZHIpOwotCXBhcm1CbG9ja19sID0gdG90YWxfQ1BSQl9sZW4gLSBzaXplb2Yoc3RydWN0IENQUkIpOwotCXRtcF9zaXplID0gNCooKHRtcF9zaXplICsgMykvNCkgKyBDQUxMRVJfSEVBREVSOwotCi0JdnVkX2xlbiA9IDIgKyBtb2RfbGVuOwotCW1lbXNldCh6OTBjTXNnX3AsIDAsIHRtcF9zaXplKTsKLQotCXRlbXAgPSAodW5zaWduZWQgY2hhciAqKXo5MGNNc2dfcCArIENBTExFUl9IRUFERVI7Ci0JbWVtY3B5KHRlbXAsICZzdGF0aWNfdHlwZTZfaGRyLCBzaXplb2Yoc3RydWN0IHR5cGU2X2hkcikpOwotCXRwNkhkcl9wID0gKHN0cnVjdCB0eXBlNl9oZHIgKil0ZW1wOwotCXRwNkhkcl9wLT5Ub0NhcmRMZW4xID0gNCooKHRvdGFsX0NQUkJfbGVuKzMpLzQpOwotCXRwNkhkcl9wLT5Gcm9tQ2FyZExlbjEgPSBSRVNQT05TRV9DUFJCX1NJWkU7Ci0JbWVtY3B5KHRwNkhkcl9wLT5mdW5jdGlvbl9jb2RlLCBzdGF0aWNfUEtFX2Z1bmN0aW9uX2NvZGUsCi0JICAgICAgIHNpemVvZihzdGF0aWNfUEtFX2Z1bmN0aW9uX2NvZGUpKTsKLQl0ZW1wICs9IHNpemVvZihzdHJ1Y3QgdHlwZTZfaGRyKTsKLQltZW1jcHkodGVtcCwgJnN0YXRpY19jcHJiLCBzaXplb2Yoc3RydWN0IENQUkIpKTsKLQljcHJiX3AgPSAoc3RydWN0IENQUkIgKikgdGVtcDsKLQljcHJiX3AtPnVzYWdlX2RvbWFpblswXT0gKHVuc2lnbmVkIGNoYXIpY2R4OwotCWl0b0xlMigoaW50ICopJih0cDZIZHJfcC0+RnJvbUNhcmRMZW4xKSwgY3ByYl9wLT5ycGxfcGFybWwpOwotCXRlbXAgKz0gc2l6ZW9mKHN0cnVjdCBDUFJCKTsKLQltZW1jcHkodGVtcCwgJnN0YXRpY19wa2VfZnVuY3Rpb25fYW5kX3J1bGVzLAotCQkgc2l6ZW9mKHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2spKTsKLQl0ZW1wICs9IHNpemVvZihzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrKTsKLQl0ZW1wICs9IDI7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRlbXAsIGljYU1zZ19wLT5pbnB1dGRhdGEsIG1vZF9sZW4pKSB7Ci0JCWtmcmVlKHRlbXBfZXhwKTsKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQl9Ci0JaWYgKGlzX2VtcHR5KHRlbXAsIG1vZF9sZW4pKSB7Ci0JCWtmcmVlKHRlbXBfZXhwKTsKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCX0KLQlpZiAoKHRlbXBbMF0gIT0gMHgwMCkgfHwgKHRlbXBbMV0gIT0gMHgwMikpIHsKLQkJa2ZyZWUodGVtcF9leHApOwotCQlyZXR1cm4gU0VOX05PVF9BVkFJTDsKLQl9Ci0JZm9yIChpID0gMjsgaSA8IG1vZF9sZW47IGkrKykKLQkJaWYgKHRlbXBbaV0gPT0gMHgwMCkKLQkJCWJyZWFrOwotCWlmICgoaSA8IDkpIHx8IChpID4gKG1vZF9sZW4gLSAyKSkpIHsKLQkJa2ZyZWUodGVtcF9leHApOwotCQlyZXR1cm4gU0VOX05PVF9BVkFJTDsKLQl9Ci0JcGFkX2xlbiA9IGkgKyAxOwotCXZ1ZF9sZW4gPSBtb2RfbGVuIC0gcGFkX2xlbjsKLQltZW1tb3ZlKHRlbXAsIHRlbXArcGFkX2xlbiwgdnVkX2xlbik7Ci0JdGVtcCAtPSAyOwotCXZ1ZF9sZW4gKz0gMjsKLQlpdG9MZTIoJnZ1ZF9sZW4sIHRlbXApOwotCXRlbXAgKz0gKHZ1ZF9sZW4pOwotCWtleWJfcCA9IChzdHJ1Y3QgVDZfa2V5QmxvY2tfaGRyICopdGVtcDsKLQl0ZW1wICs9IHNpemVvZihzdHJ1Y3QgVDZfa2V5QmxvY2tfaGRyKTsKLQltZW1jcHkodGVtcCwgJnN0YXRpY19wdWJsaWNfa2V5LCBzaXplb2Yoc3RhdGljX3B1YmxpY19rZXkpKTsKLQlrZXlfcCA9IChzdHJ1Y3QgY2NhX3B1YmxpY19rZXkgKil0ZW1wOwotCXRlbXAgPSBrZXlfcC0+cHViU2VjLmV4cG9uZW50OwotCW1lbWNweSh0ZW1wLCBleHBfcCwgZXhwX2xlbik7Ci0Ja2ZyZWUodGVtcF9leHApOwotCXRlbXAgKz0gZXhwX2xlbjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgaWNhTXNnX3AtPm5fbW9kdWx1cywgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHRlbXAsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0Ja2V5X3AtPnB1YlNlYy5tb2R1bHVzX2JpdF9sZW4gPSA4ICogbW9kX2xlbjsKLQlrZXlfcC0+cHViU2VjLm1vZHVsdXNfYnl0ZV9sZW4gPSBtb2RfbGVuOwotCWtleV9wLT5wdWJTZWMuZXhwb25lbnRfbGVuID0gZXhwX2xlbjsKLQlrZXlfcC0+cHViU2VjLnNlY3Rpb25fbGVuZ3RoID0gQ0FMTEVSX0hFQURFUiArIG1vZF9sZW4gKyBleHBfbGVuOwotCWtleV9sZW4gPSBrZXlfcC0+cHViU2VjLnNlY3Rpb25fbGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBjY2FfdG9rZW5faGRyKTsKLQlrZXlfcC0+cHViSGRyLnRva2VuX2xlbmd0aCA9IGtleV9sZW47Ci0Ja2V5X2xlbiArPSA0OwotCWl0b0xlMigma2V5X2xlbiwga2V5Yl9wLT51bGVuKTsKLQlrZXlfbGVuICs9IDI7Ci0JaXRvTGUyKCZrZXlfbGVuLCBrZXliX3AtPmJsZW4pOwotCXBhcm1CbG9ja19sIC09IHBhZF9sZW47Ci0JaXRvTGUyKCZwYXJtQmxvY2tfbCwgY3ByYl9wLT5yZXFfcGFybWwpOwotCSp6OTBjTXNnX2xfcCA9IHRtcF9zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FDUlRfbXNnX3RvX3R5cGU2Q1JUX21zZyhzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCAqaWNhTXNnX3AsIGludCBjZHgsCi0JCQkgICBpbnQgKno5MGNNc2dfbF9wLCBzdHJ1Y3QgdHlwZTZfbXNnICp6OTBjTXNnX3ApCi17Ci0JaW50IG1vZF9sZW4sIHZ1ZF9sZW4sIHRtcF9zaXplLCB0b3RhbF9DUFJCX2xlbiwgcGFybUJsb2NrX2wsIHNob3J0X2xlbjsKLQlpbnQgbG9uZ19sZW4sIHBhZF9sZW4sIGtleVBhcnRzTGVuLCB0bXBfbDsKLQl1bnNpZ25lZCBjaGFyICp0Z3RfcCwgKnRlbXA7Ci0Jc3RydWN0IHR5cGU2X2hkciAqdHA2SGRyX3A7Ci0Jc3RydWN0IENQUkIgKmNwcmJfcDsKLQlzdHJ1Y3QgY2NhX3Rva2VuX2hkciAqa2V5SGRyX3A7Ci0Jc3RydWN0IGNjYV9wdnRfZXh0X0NSVF9zZWMgKnB2dFNlY19wOwotCXN0cnVjdCBjY2FfcHVibGljX3NlYyAqcHViU2VjX3A7Ci0KLQltb2RfbGVuID0gaWNhTXNnX3AtPmlucHV0ZGF0YWxlbmd0aDsKLQlzaG9ydF9sZW4gPSBtb2RfbGVuIC8gMjsKLQlsb25nX2xlbiA9IDggKyBzaG9ydF9sZW47Ci0Ja2V5UGFydHNMZW4gPSAzICogbG9uZ19sZW4gKyAyICogc2hvcnRfbGVuOwotCXBhZF9sZW4gPSAoOCAtIChrZXlQYXJ0c0xlbiAlIDgpKSAlIDg7Ci0Ja2V5UGFydHNMZW4gKz0gcGFkX2xlbiArIG1vZF9sZW47Ci0JdG1wX3NpemUgPSBGSVhFRF9UWVBFNl9DUl9MRU4gKyBrZXlQYXJ0c0xlbiArIG1vZF9sZW47Ci0JdG90YWxfQ1BSQl9sZW4gPSB0bXBfc2l6ZSAtICBzaXplb2Yoc3RydWN0IHR5cGU2X2hkcik7Ci0JcGFybUJsb2NrX2wgPSB0b3RhbF9DUFJCX2xlbiAtIHNpemVvZihzdHJ1Y3QgQ1BSQik7Ci0JdnVkX2xlbiA9IDIgKyBtb2RfbGVuOwotCXRtcF9zaXplID0gNCooKHRtcF9zaXplICsgMykvNCkgKyBDQUxMRVJfSEVBREVSOwotCi0JbWVtc2V0KHo5MGNNc2dfcCwgMCwgdG1wX3NpemUpOwotCXRndF9wID0gKHVuc2lnbmVkIGNoYXIgKil6OTBjTXNnX3AgKyBDQUxMRVJfSEVBREVSOwotCW1lbWNweSh0Z3RfcCwgJnN0YXRpY190eXBlNl9oZHIsIHNpemVvZihzdHJ1Y3QgdHlwZTZfaGRyKSk7Ci0JdHA2SGRyX3AgPSAoc3RydWN0IHR5cGU2X2hkciAqKXRndF9wOwotCXRwNkhkcl9wLT5Ub0NhcmRMZW4xID0gNCooKHRvdGFsX0NQUkJfbGVuKzMpLzQpOwotCXRwNkhkcl9wLT5Gcm9tQ2FyZExlbjEgPSBSRVNQT05TRV9DUFJCX1NJWkU7Ci0JdGd0X3AgKz0gc2l6ZW9mKHN0cnVjdCB0eXBlNl9oZHIpOwotCWNwcmJfcCA9IChzdHJ1Y3QgQ1BSQiAqKSB0Z3RfcDsKLQltZW1jcHkodGd0X3AsICZzdGF0aWNfY3ByYiwgc2l6ZW9mKHN0cnVjdCBDUFJCKSk7Ci0JY3ByYl9wLT51c2FnZV9kb21haW5bMF09ICooKHVuc2lnbmVkIGNoYXIgKikoJihjZHgpKSszKTsKLQlpdG9MZTIoJnBhcm1CbG9ja19sLCBjcHJiX3AtPnJlcV9wYXJtbCk7Ci0JbWVtY3B5KGNwcmJfcC0+cnBsX3Bhcm1sLCBjcHJiX3AtPnJlcV9wYXJtbCwKLQkgICAgICAgc2l6ZW9mKGNwcmJfcC0+cmVxX3Bhcm1sKSk7Ci0JdGd0X3AgKz0gc2l6ZW9mKHN0cnVjdCBDUFJCKTsKLQltZW1jcHkodGd0X3AsICZzdGF0aWNfcGtkX2Z1bmN0aW9uX2FuZF9ydWxlcywKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2spKTsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayk7Ci0JaXRvTGUyKCZ2dWRfbGVuLCB0Z3RfcCk7Ci0JdGd0X3AgKz0gMjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT5pbnB1dGRhdGEsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl0Z3RfcCArPSBtb2RfbGVuOwotCXRtcF9sID0gc2l6ZW9mKHN0cnVjdCBUNl9rZXlCbG9ja19oZHIpICsgc2l6ZW9mKHN0cnVjdCBjY2FfdG9rZW5faGRyKSArCi0JCXNpemVvZihzdHJ1Y3QgY2NhX3B2dF9leHRfQ1JUX3NlYykgKyAweDBGICsga2V5UGFydHNMZW47Ci0JaXRvTGUyKCZ0bXBfbCwgdGd0X3ApOwotCXRlbXAgPSB0Z3RfcCArIDI7Ci0JdG1wX2wgLT0gMjsKLQlpdG9MZTIoJnRtcF9sLCB0ZW1wKTsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IFQ2X2tleUJsb2NrX2hkcik7Ci0Ja2V5SGRyX3AgPSAoc3RydWN0IGNjYV90b2tlbl9oZHIgKil0Z3RfcDsKLQlrZXlIZHJfcC0+dG9rZW5faWRlbnRpZmllciA9IENDQV9US05fSERSX0lEX0VYVDsKLQl0bXBfbCAtPSA0OwotCWtleUhkcl9wLT50b2tlbl9sZW5ndGggPSB0bXBfbDsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IGNjYV90b2tlbl9oZHIpOwotCXB2dFNlY19wID0gKHN0cnVjdCBjY2FfcHZ0X2V4dF9DUlRfc2VjICopdGd0X3A7Ci0JcHZ0U2VjX3AtPnNlY3Rpb25faWRlbnRpZmllciA9IENDQV9QVlRfRVhUX0NSVF9TRUNfSURfUFZUOwotCXB2dFNlY19wLT5zZWN0aW9uX2xlbmd0aCA9Ci0JCXNpemVvZihzdHJ1Y3QgY2NhX3B2dF9leHRfQ1JUX3NlYykgKyBrZXlQYXJ0c0xlbjsKLQlwdnRTZWNfcC0+a2V5X2Zvcm1hdCA9IENDQV9QVlRfRVhUX0NSVF9TRUNfRk1UX0NMOwotCXB2dFNlY19wLT5rZXlfdXNlX2ZsYWdzWzBdID0gQ0NBX1BWVF9VU0FHRV9BTEw7Ci0JcHZ0U2VjX3AtPnBfbGVuID0gbG9uZ19sZW47Ci0JcHZ0U2VjX3AtPnFfbGVuID0gc2hvcnRfbGVuOwotCXB2dFNlY19wLT5kcF9sZW4gPSBsb25nX2xlbjsKLQlwdnRTZWNfcC0+ZHFfbGVuID0gc2hvcnRfbGVuOwotCXB2dFNlY19wLT51X2xlbiA9IGxvbmdfbGVuOwotCXB2dFNlY19wLT5tb2RfbGVuID0gbW9kX2xlbjsKLQlwdnRTZWNfcC0+cGFkX2xlbiA9IHBhZF9sZW47Ci0JdGd0X3AgKz0gc2l6ZW9mKHN0cnVjdCBjY2FfcHZ0X2V4dF9DUlRfc2VjKTsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT5ucF9wcmltZSwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdGd0X3AgKz0gbG9uZ19sZW47Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRndF9wLCBpY2FNc2dfcC0+bnFfcHJpbWUsIHNob3J0X2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHRndF9wLCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdGd0X3AgKz0gc2hvcnRfbGVuOwotCWlmIChjb3B5X2Zyb21fdXNlcih0Z3RfcCwgaWNhTXNnX3AtPmJwX2tleSwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdGd0X3AgKz0gbG9uZ19sZW47Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRndF9wLCBpY2FNc2dfcC0+YnFfa2V5LCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgc2hvcnRfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCXRndF9wICs9IHNob3J0X2xlbjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT51X211bHRfaW52LCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHRndF9wLCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl0Z3RfcCArPSBsb25nX2xlbjsKLQl0Z3RfcCArPSBwYWRfbGVuOwotCW1lbXNldCh0Z3RfcCwgMHhGRiwgbW9kX2xlbik7Ci0JdGd0X3AgKz0gbW9kX2xlbjsKLQltZW1jcHkodGd0X3AsICZzdGF0aWNfY2NhX3B1Yl9zZWMsIHNpemVvZihzdHJ1Y3QgY2NhX3B1YmxpY19zZWMpKTsKLQlwdWJTZWNfcCA9IChzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgKikgdGd0X3A7Ci0JcHViU2VjX3AtPm1vZHVsdXNfYml0X2xlbiA9IDggKiBtb2RfbGVuOwotCSp6OTBjTXNnX2xfcCA9IHRtcF9zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FNRVhfbXNnX3RvX3R5cGU2TUVYX21zZ1goc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqaWNhTXNnX3AsIGludCBjZHgsCi0JCQkgICAgaW50ICp6OTBjTXNnX2xfcCwgc3RydWN0IHR5cGU2X21zZyAqejkwY01zZ19wLAotCQkJICAgIGludCBkZXZfdHlwZSkKLXsKLQlpbnQgbW9kX2xlbiwgZXhwX2xlbiwgdnVkX2xlbiwgdG1wX3NpemUsIHRvdGFsX0NQUkJfbGVuLCBwYXJtQmxvY2tfbDsKLQlpbnQga2V5X2xlbiwgaTsKLQl1bnNpZ25lZCBjaGFyICp0ZW1wX2V4cCwgKnRndF9wLCAqdGVtcCwgKmV4cF9wOwotCXN0cnVjdCB0eXBlNl9oZHIgKnRwNkhkcl9wOwotCXN0cnVjdCBDUFJCWCAqY3ByYnhfcDsKLQlzdHJ1Y3QgY2NhX3B1YmxpY19rZXkgKmtleV9wOwotCXN0cnVjdCBUNl9rZXlCbG9ja19oZHJYICprZXliX3A7Ci0KLQl0ZW1wX2V4cCA9IGttYWxsb2MoMjU2LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRlbXBfZXhwKQotCQlyZXR1cm4gRUdFVEJVRkY7Ci0JbW9kX2xlbiA9IGljYU1zZ19wLT5pbnB1dGRhdGFsZW5ndGg7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRlbXBfZXhwLCBpY2FNc2dfcC0+Yl9rZXksIG1vZF9sZW4pKSB7Ci0JCWtmcmVlKHRlbXBfZXhwKTsKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQl9Ci0JaWYgKGlzX2VtcHR5KHRlbXBfZXhwLCBtb2RfbGVuKSkgewotCQlrZnJlZSh0ZW1wX2V4cCk7Ci0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl9Ci0JZXhwX3AgPSB0ZW1wX2V4cDsKLQlmb3IgKGkgPSAwOyBpIDwgbW9kX2xlbjsgaSsrKQotCQlpZiAoZXhwX3BbaV0pCi0JCQlicmVhazsKLQlpZiAoaSA+PSBtb2RfbGVuKSB7Ci0JCWtmcmVlKHRlbXBfZXhwKTsKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCX0KLQlleHBfbGVuID0gbW9kX2xlbiAtIGk7Ci0JZXhwX3AgKz0gaTsKLQlQREVCVUcoImV4cF9sZW4gYWZ0ZXIgY29tcHV0YXRpb246ICUwOHhcbiIsIGV4cF9sZW4pOwotCXRtcF9zaXplID0gRklYRURfVFlQRTZfTUVfRU5fTEVOWCArIDIgKiBtb2RfbGVuICsgZXhwX2xlbjsKLQl0b3RhbF9DUFJCX2xlbiA9IHRtcF9zaXplIC0gc2l6ZW9mKHN0cnVjdCB0eXBlNl9oZHIpOwotCXBhcm1CbG9ja19sID0gdG90YWxfQ1BSQl9sZW4gLSBzaXplb2Yoc3RydWN0IENQUkJYKTsKLQl0bXBfc2l6ZSA9IHRtcF9zaXplICsgQ0FMTEVSX0hFQURFUjsKLQl2dWRfbGVuID0gMiArIG1vZF9sZW47Ci0JbWVtc2V0KHo5MGNNc2dfcCwgMCwgdG1wX3NpemUpOwotCXRndF9wID0gKHVuc2lnbmVkIGNoYXIgKil6OTBjTXNnX3AgKyBDQUxMRVJfSEVBREVSOwotCW1lbWNweSh0Z3RfcCwgJnN0YXRpY190eXBlNl9oZHJYLCBzaXplb2Yoc3RydWN0IHR5cGU2X2hkcikpOwotCXRwNkhkcl9wID0gKHN0cnVjdCB0eXBlNl9oZHIgKil0Z3RfcDsKLQl0cDZIZHJfcC0+VG9DYXJkTGVuMSA9IHRvdGFsX0NQUkJfbGVuOwotCXRwNkhkcl9wLT5Gcm9tQ2FyZExlbjEgPSBSRVNQT05TRV9DUFJCWF9TSVpFOwotCW1lbWNweSh0cDZIZHJfcC0+ZnVuY3Rpb25fY29kZSwgc3RhdGljX1BLRV9mdW5jdGlvbl9jb2RlLAotCSAgICAgICBzaXplb2Yoc3RhdGljX1BLRV9mdW5jdGlvbl9jb2RlKSk7Ci0JdGd0X3AgKz0gc2l6ZW9mKHN0cnVjdCB0eXBlNl9oZHIpOwotCW1lbWNweSh0Z3RfcCwgJnN0YXRpY19jcHJieCwgc2l6ZW9mKHN0cnVjdCBDUFJCWCkpOwotCWNwcmJ4X3AgPSAoc3RydWN0IENQUkJYICopIHRndF9wOwotCWNwcmJ4X3AtPmRvbWFpbiA9ICh1bnNpZ25lZCBzaG9ydCljZHg7Ci0JY3ByYnhfcC0+cnBsX21zZ2JsID0gUkVTUE9OU0VfQ1BSQlhfU0laRTsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IENQUkJYKTsKLQlpZiAoZGV2X3R5cGUgPT0gUENJWENDX01DTDIpCi0JCW1lbWNweSh0Z3RfcCwgJnN0YXRpY19wa2VfZnVuY3Rpb25fYW5kX3J1bGVzWF9NQ0wyLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2spKTsKLQllbHNlCi0JCW1lbWNweSh0Z3RfcCwgJnN0YXRpY19wa2VfZnVuY3Rpb25fYW5kX3J1bGVzWCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrKSk7Ci0JdGd0X3AgKz0gc2l6ZW9mKHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2spOwotCi0JdGd0X3AgKz0gMjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT5pbnB1dGRhdGEsIG1vZF9sZW4pKSB7Ci0JCWtmcmVlKHRlbXBfZXhwKTsKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQl9Ci0JaWYgKGlzX2VtcHR5KHRndF9wLCBtb2RfbGVuKSkgewotCQlrZnJlZSh0ZW1wX2V4cCk7Ci0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl9Ci0JdGd0X3AgLT0gMjsKLQkqKChzaG9ydCAqKXRndF9wKSA9IChzaG9ydCkgdnVkX2xlbjsKLQl0Z3RfcCArPSB2dWRfbGVuOwotCWtleWJfcCA9IChzdHJ1Y3QgVDZfa2V5QmxvY2tfaGRyWCAqKXRndF9wOwotCXRndF9wICs9IHNpemVvZihzdHJ1Y3QgVDZfa2V5QmxvY2tfaGRyWCk7Ci0JbWVtY3B5KHRndF9wLCAmc3RhdGljX3B1YmxpY19rZXksIHNpemVvZihzdGF0aWNfcHVibGljX2tleSkpOwotCWtleV9wID0gKHN0cnVjdCBjY2FfcHVibGljX2tleSAqKXRndF9wOwotCXRlbXAgPSBrZXlfcC0+cHViU2VjLmV4cG9uZW50OwotCW1lbWNweSh0ZW1wLCBleHBfcCwgZXhwX2xlbik7Ci0Ja2ZyZWUodGVtcF9leHApOwotCXRlbXAgKz0gZXhwX2xlbjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgaWNhTXNnX3AtPm5fbW9kdWx1cywgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHRlbXAsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0Ja2V5X3AtPnB1YlNlYy5tb2R1bHVzX2JpdF9sZW4gPSA4ICogbW9kX2xlbjsKLQlrZXlfcC0+cHViU2VjLm1vZHVsdXNfYnl0ZV9sZW4gPSBtb2RfbGVuOwotCWtleV9wLT5wdWJTZWMuZXhwb25lbnRfbGVuID0gZXhwX2xlbjsKLQlrZXlfcC0+cHViU2VjLnNlY3Rpb25fbGVuZ3RoID0gQ0FMTEVSX0hFQURFUiArIG1vZF9sZW4gKyBleHBfbGVuOwotCWtleV9sZW4gPSBrZXlfcC0+cHViU2VjLnNlY3Rpb25fbGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBjY2FfdG9rZW5faGRyKTsKLQlrZXlfcC0+cHViSGRyLnRva2VuX2xlbmd0aCA9IGtleV9sZW47Ci0Ja2V5X2xlbiArPSA0OwotCWtleWJfcC0+dWxlbiA9ICh1bnNpZ25lZCBzaG9ydClrZXlfbGVuOwotCWtleV9sZW4gKz0gMjsKLQlrZXliX3AtPmJsZW4gPSAodW5zaWduZWQgc2hvcnQpa2V5X2xlbjsKLQljcHJieF9wLT5yZXFfcGFybWwgPSBwYXJtQmxvY2tfbDsKLQkqejkwY01zZ19sX3AgPSB0bXBfc2l6ZSAtIENBTExFUl9IRUFERVI7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotSUNBQ1JUX21zZ190b190eXBlNkNSVF9tc2dYKHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICppY2FNc2dfcCwgaW50IGNkeCwKLQkJCSAgICBpbnQgKno5MGNNc2dfbF9wLCBzdHJ1Y3QgdHlwZTZfbXNnICp6OTBjTXNnX3AsCi0JCQkgICAgaW50IGRldl90eXBlKQotewotCWludCBtb2RfbGVuLCB2dWRfbGVuLCB0bXBfc2l6ZSwgdG90YWxfQ1BSQl9sZW4sIHBhcm1CbG9ja19sLCBzaG9ydF9sZW47Ci0JaW50IGxvbmdfbGVuLCBwYWRfbGVuLCBrZXlQYXJ0c0xlbiwgdG1wX2w7Ci0JdW5zaWduZWQgY2hhciAqdGd0X3AsICp0ZW1wOwotCXN0cnVjdCB0eXBlNl9oZHIgKnRwNkhkcl9wOwotCXN0cnVjdCBDUFJCWCAqY3ByYnhfcDsKLQlzdHJ1Y3QgY2NhX3Rva2VuX2hkciAqa2V5SGRyX3A7Ci0Jc3RydWN0IGNjYV9wdnRfZXh0X0NSVF9zZWMgKnB2dFNlY19wOwotCXN0cnVjdCBjY2FfcHVibGljX3NlYyAqcHViU2VjX3A7Ci0KLQltb2RfbGVuID0gaWNhTXNnX3AtPmlucHV0ZGF0YWxlbmd0aDsKLQlzaG9ydF9sZW4gPSBtb2RfbGVuIC8gMjsKLQlsb25nX2xlbiA9IDggKyBzaG9ydF9sZW47Ci0Ja2V5UGFydHNMZW4gPSAzICogbG9uZ19sZW4gKyAyICogc2hvcnRfbGVuOwotCXBhZF9sZW4gPSAoOCAtIChrZXlQYXJ0c0xlbiAlIDgpKSAlIDg7Ci0Ja2V5UGFydHNMZW4gKz0gcGFkX2xlbiArIG1vZF9sZW47Ci0JdG1wX3NpemUgPSBGSVhFRF9UWVBFNl9DUl9MRU5YICsga2V5UGFydHNMZW4gKyBtb2RfbGVuOwotCXRvdGFsX0NQUkJfbGVuID0gdG1wX3NpemUgLSAgc2l6ZW9mKHN0cnVjdCB0eXBlNl9oZHIpOwotCXBhcm1CbG9ja19sID0gdG90YWxfQ1BSQl9sZW4gLSBzaXplb2Yoc3RydWN0IENQUkJYKTsKLQl2dWRfbGVuID0gMiArIG1vZF9sZW47Ci0JdG1wX3NpemUgPSB0bXBfc2l6ZSArIENBTExFUl9IRUFERVI7Ci0JbWVtc2V0KHo5MGNNc2dfcCwgMCwgdG1wX3NpemUpOwotCXRndF9wID0gKHVuc2lnbmVkIGNoYXIgKil6OTBjTXNnX3AgKyBDQUxMRVJfSEVBREVSOwotCW1lbWNweSh0Z3RfcCwgJnN0YXRpY190eXBlNl9oZHJYLCBzaXplb2Yoc3RydWN0IHR5cGU2X2hkcikpOwotCXRwNkhkcl9wID0gKHN0cnVjdCB0eXBlNl9oZHIgKil0Z3RfcDsKLQl0cDZIZHJfcC0+VG9DYXJkTGVuMSA9IHRvdGFsX0NQUkJfbGVuOwotCXRwNkhkcl9wLT5Gcm9tQ2FyZExlbjEgPSBSRVNQT05TRV9DUFJCWF9TSVpFOwotCXRndF9wICs9IHNpemVvZihzdHJ1Y3QgdHlwZTZfaGRyKTsKLQljcHJieF9wID0gKHN0cnVjdCBDUFJCWCAqKSB0Z3RfcDsKLQltZW1jcHkodGd0X3AsICZzdGF0aWNfY3ByYngsIHNpemVvZihzdHJ1Y3QgQ1BSQlgpKTsKLQljcHJieF9wLT5kb21haW4gPSAodW5zaWduZWQgc2hvcnQpY2R4OwotCWNwcmJ4X3AtPnJlcV9wYXJtbCA9IHBhcm1CbG9ja19sOwotCWNwcmJ4X3AtPnJwbF9tc2dibCA9IHBhcm1CbG9ja19sOwotCXRndF9wICs9IHNpemVvZihzdHJ1Y3QgQ1BSQlgpOwotCWlmIChkZXZfdHlwZSA9PSBQQ0lYQ0NfTUNMMikKLQkJbWVtY3B5KHRndF9wLCAmc3RhdGljX3BrZF9mdW5jdGlvbl9hbmRfcnVsZXNYX01DTDIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jaykpOwotCWVsc2UKLQkJbWVtY3B5KHRndF9wLCAmc3RhdGljX3BrZF9mdW5jdGlvbl9hbmRfcnVsZXNYLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2spKTsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayk7Ci0JKigoc2hvcnQgKil0Z3RfcCkgPSAoc2hvcnQpIHZ1ZF9sZW47Ci0JdGd0X3AgKz0gMjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT5pbnB1dGRhdGEsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl0Z3RfcCArPSBtb2RfbGVuOwotCXRtcF9sID0gc2l6ZW9mKHN0cnVjdCBUNl9rZXlCbG9ja19oZHIpICsgc2l6ZW9mKHN0cnVjdCBjY2FfdG9rZW5faGRyKSArCi0JCXNpemVvZihzdHJ1Y3QgY2NhX3B2dF9leHRfQ1JUX3NlYykgKyAweDBGICsga2V5UGFydHNMZW47Ci0JKigoc2hvcnQgKil0Z3RfcCkgPSAoc2hvcnQpIHRtcF9sOwotCXRlbXAgPSB0Z3RfcCArIDI7Ci0JdG1wX2wgLT0gMjsKLQkqKChzaG9ydCAqKXRlbXApID0gKHNob3J0KSB0bXBfbDsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IFQ2X2tleUJsb2NrX2hkcik7Ci0Ja2V5SGRyX3AgPSAoc3RydWN0IGNjYV90b2tlbl9oZHIgKil0Z3RfcDsKLQlrZXlIZHJfcC0+dG9rZW5faWRlbnRpZmllciA9IENDQV9US05fSERSX0lEX0VYVDsKLQl0bXBfbCAtPSA0OwotCWtleUhkcl9wLT50b2tlbl9sZW5ndGggPSB0bXBfbDsKLQl0Z3RfcCArPSBzaXplb2Yoc3RydWN0IGNjYV90b2tlbl9oZHIpOwotCXB2dFNlY19wID0gKHN0cnVjdCBjY2FfcHZ0X2V4dF9DUlRfc2VjICopdGd0X3A7Ci0JcHZ0U2VjX3AtPnNlY3Rpb25faWRlbnRpZmllciA9IENDQV9QVlRfRVhUX0NSVF9TRUNfSURfUFZUOwotCXB2dFNlY19wLT5zZWN0aW9uX2xlbmd0aCA9Ci0JCXNpemVvZihzdHJ1Y3QgY2NhX3B2dF9leHRfQ1JUX3NlYykgKyBrZXlQYXJ0c0xlbjsKLQlwdnRTZWNfcC0+a2V5X2Zvcm1hdCA9IENDQV9QVlRfRVhUX0NSVF9TRUNfRk1UX0NMOwotCXB2dFNlY19wLT5rZXlfdXNlX2ZsYWdzWzBdID0gQ0NBX1BWVF9VU0FHRV9BTEw7Ci0JcHZ0U2VjX3AtPnBfbGVuID0gbG9uZ19sZW47Ci0JcHZ0U2VjX3AtPnFfbGVuID0gc2hvcnRfbGVuOwotCXB2dFNlY19wLT5kcF9sZW4gPSBsb25nX2xlbjsKLQlwdnRTZWNfcC0+ZHFfbGVuID0gc2hvcnRfbGVuOwotCXB2dFNlY19wLT51X2xlbiA9IGxvbmdfbGVuOwotCXB2dFNlY19wLT5tb2RfbGVuID0gbW9kX2xlbjsKLQlwdnRTZWNfcC0+cGFkX2xlbiA9IHBhZF9sZW47Ci0JdGd0X3AgKz0gc2l6ZW9mKHN0cnVjdCBjY2FfcHZ0X2V4dF9DUlRfc2VjKTsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT5ucF9wcmltZSwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdGd0X3AgKz0gbG9uZ19sZW47Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRndF9wLCBpY2FNc2dfcC0+bnFfcHJpbWUsIHNob3J0X2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHRndF9wLCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdGd0X3AgKz0gc2hvcnRfbGVuOwotCWlmIChjb3B5X2Zyb21fdXNlcih0Z3RfcCwgaWNhTXNnX3AtPmJwX2tleSwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdGd0X3AgKz0gbG9uZ19sZW47Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRndF9wLCBpY2FNc2dfcC0+YnFfa2V5LCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eSh0Z3RfcCwgc2hvcnRfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCXRndF9wICs9IHNob3J0X2xlbjsKLQlpZiAoY29weV9mcm9tX3VzZXIodGd0X3AsIGljYU1zZ19wLT51X211bHRfaW52LCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHRndF9wLCBsb25nX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl0Z3RfcCArPSBsb25nX2xlbjsKLQl0Z3RfcCArPSBwYWRfbGVuOwotCW1lbXNldCh0Z3RfcCwgMHhGRiwgbW9kX2xlbik7Ci0JdGd0X3AgKz0gbW9kX2xlbjsKLQltZW1jcHkodGd0X3AsICZzdGF0aWNfY2NhX3B1Yl9zZWMsIHNpemVvZihzdHJ1Y3QgY2NhX3B1YmxpY19zZWMpKTsKLQlwdWJTZWNfcCA9IChzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgKikgdGd0X3A7Ci0JcHViU2VjX3AtPm1vZHVsdXNfYml0X2xlbiA9IDggKiBtb2RfbGVuOwotCSp6OTBjTXNnX2xfcCA9IHRtcF9zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FNRVhfbXNnX3RvX3R5cGU1ME1FWF9tc2coc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqaWNhTWV4X3AsIGludCAqejkwY01zZ19sX3AsCi0JCQkgICAgdW5pb24gdHlwZTUwX21zZyAqejkwY01zZ19wKQotewotCWludCBtb2RfbGVuLCBtc2dfc2l6ZSwgbW9kX3RndF9sZW4sIGV4cF90Z3RfbGVuLCBpbnBfdGd0X2xlbjsKLQl1bnNpZ25lZCBjaGFyICptb2RfdGd0LCAqZXhwX3RndCwgKmlucF90Z3Q7Ci0JdW5pb24gdHlwZTUwX21zZyAqdG1wX3R5cGU1MF9tc2c7Ci0KLQltb2RfbGVuID0gaWNhTWV4X3AtPmlucHV0ZGF0YWxlbmd0aDsKLQotCW1zZ19zaXplID0gKChtb2RfbGVuIDw9IDEyOCkgPyBUWVBFNTBfTUVCMV9MRU4gOiBUWVBFNTBfTUVCMl9MRU4pICsKLQkJICAgIENBTExFUl9IRUFERVI7Ci0KLQltZW1zZXQoejkwY01zZ19wLCAwLCBtc2dfc2l6ZSk7Ci0KLQl0bXBfdHlwZTUwX21zZyA9ICh1bmlvbiB0eXBlNTBfbXNnICopCi0JCSgodW5zaWduZWQgY2hhciAqKSB6OTBjTXNnX3AgKyBDQUxMRVJfSEVBREVSKTsKLQotCXRtcF90eXBlNTBfbXNnLT5tZWIxLmhlYWRlci5tc2dfdHlwZV9jb2RlID0gVFlQRTUwX1RZUEVfQ09ERTsKLQotCWlmIChtb2RfbGVuIDw9IDEyOCkgewotCQl0bXBfdHlwZTUwX21zZy0+bWViMS5oZWFkZXIubXNnX2xlbiA9IFRZUEU1MF9NRUIxX0xFTjsKLQkJdG1wX3R5cGU1MF9tc2ctPm1lYjEua2V5YmxvY2tfdHlwZSA9IFRZUEU1MF9NRUIxX0ZNVDsKLQkJbW9kX3RndCA9IHRtcF90eXBlNTBfbXNnLT5tZWIxLm1vZHVsdXM7Ci0JCW1vZF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5tZWIxLm1vZHVsdXMpOwotCQlleHBfdGd0ID0gdG1wX3R5cGU1MF9tc2ctPm1lYjEuZXhwb25lbnQ7Ci0JCWV4cF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5tZWIxLmV4cG9uZW50KTsKLQkJaW5wX3RndCA9IHRtcF90eXBlNTBfbXNnLT5tZWIxLm1lc3NhZ2U7Ci0JCWlucF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5tZWIxLm1lc3NhZ2UpOwotCX0gZWxzZSB7Ci0JCXRtcF90eXBlNTBfbXNnLT5tZWIyLmhlYWRlci5tc2dfbGVuID0gVFlQRTUwX01FQjJfTEVOOwotCQl0bXBfdHlwZTUwX21zZy0+bWViMi5rZXlibG9ja190eXBlID0gVFlQRTUwX01FQjJfRk1UOwotCQltb2RfdGd0ID0gdG1wX3R5cGU1MF9tc2ctPm1lYjIubW9kdWx1czsKLQkJbW9kX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPm1lYjIubW9kdWx1cyk7Ci0JCWV4cF90Z3QgPSB0bXBfdHlwZTUwX21zZy0+bWViMi5leHBvbmVudDsKLQkJZXhwX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPm1lYjIuZXhwb25lbnQpOwotCQlpbnBfdGd0ID0gdG1wX3R5cGU1MF9tc2ctPm1lYjIubWVzc2FnZTsKLQkJaW5wX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPm1lYjIubWVzc2FnZSk7Ci0JfQotCi0JbW9kX3RndCArPSAobW9kX3RndF9sZW4gLSBtb2RfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIobW9kX3RndCwgaWNhTWV4X3AtPm5fbW9kdWx1cywgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KG1vZF90Z3QsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JZXhwX3RndCArPSAoZXhwX3RndF9sZW4gLSBtb2RfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIoZXhwX3RndCwgaWNhTWV4X3AtPmJfa2V5LCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoZXhwX3RndCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQlpbnBfdGd0ICs9IChpbnBfdGd0X2xlbiAtIG1vZF9sZW4pOwotCWlmIChjb3B5X2Zyb21fdXNlcihpbnBfdGd0LCBpY2FNZXhfcC0+aW5wdXRkYXRhLCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoaW5wX3RndCwgbW9kX2xlbikpCi0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQotCSp6OTBjTXNnX2xfcCA9IG1zZ19zaXplIC0gQ0FMTEVSX0hFQURFUjsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1JQ0FDUlRfbXNnX3RvX3R5cGU1MENSVF9tc2coc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKmljYU1zZ19wLAotCQkJICAgIGludCAqejkwY01zZ19sX3AsIHVuaW9uIHR5cGU1MF9tc2cgKno5MGNNc2dfcCkKLXsKLQlpbnQgbW9kX2xlbiwgc2hvcnRfbGVuLCBsb25nX2xlbiwgdG1wX3NpemUsIHBfdGd0X2xlbiwgcV90Z3RfbGVuLAotCSAgICBkcF90Z3RfbGVuLCBkcV90Z3RfbGVuLCB1X3RndF9sZW4sIGlucF90Z3RfbGVuLCBsb25nX29mZnNldDsKLQl1bnNpZ25lZCBjaGFyICpwX3RndCwgKnFfdGd0LCAqZHBfdGd0LCAqZHFfdGd0LCAqdV90Z3QsICppbnBfdGd0LAotCQkgICAgICB0ZW1wWzhdOwotCXVuaW9uIHR5cGU1MF9tc2cgKnRtcF90eXBlNTBfbXNnOwotCi0JbW9kX2xlbiA9IGljYU1zZ19wLT5pbnB1dGRhdGFsZW5ndGg7Ci0Jc2hvcnRfbGVuID0gbW9kX2xlbiAvIDI7Ci0JbG9uZ19sZW4gPSBtb2RfbGVuIC8gMiArIDg7Ci0JbG9uZ19vZmZzZXQgPSAwOwotCi0JaWYgKGxvbmdfbGVuID4gMTI4KSB7Ci0JCW1lbXNldCh0ZW1wLCAweDAwLCBzaXplb2YodGVtcCkpOwotCQlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgaWNhTXNnX3AtPm5wX3ByaW1lLCBsb25nX2xlbi0xMjgpKQotCQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQkJaWYgKCFpc19lbXB0eSh0ZW1wLCA4KSkKLQkJCXJldHVybiBTRU5fTk9UX0FWQUlMOwotCQlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgaWNhTXNnX3AtPmJwX2tleSwgbG9uZ19sZW4tMTI4KSkKLQkJCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JCWlmICghaXNfZW1wdHkodGVtcCwgOCkpCi0JCQlyZXR1cm4gU0VOX05PVF9BVkFJTDsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKHRlbXAsIGljYU1zZ19wLT51X211bHRfaW52LCBsb25nX2xlbi0xMjgpKQotCQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQkJaWYgKCFpc19lbXB0eSh0ZW1wLCA4KSkKLQkJCXJldHVybiBTRU5fTk9UX0FWQUlMOwotCQlsb25nX29mZnNldCA9IGxvbmdfbGVuIC0gMTI4OwotCQlsb25nX2xlbiA9IDEyODsKLQl9Ci0KLQl0bXBfc2l6ZSA9ICgobG9uZ19sZW4gPD0gNjQpID8gVFlQRTUwX0NSQjFfTEVOIDogVFlQRTUwX0NSQjJfTEVOKSArCi0JCSAgICBDQUxMRVJfSEVBREVSOwotCi0JbWVtc2V0KHo5MGNNc2dfcCwgMCwgdG1wX3NpemUpOwotCi0JdG1wX3R5cGU1MF9tc2cgPSAodW5pb24gdHlwZTUwX21zZyAqKQotCQkoKHVuc2lnbmVkIGNoYXIgKikgejkwY01zZ19wICsgQ0FMTEVSX0hFQURFUik7Ci0KLQl0bXBfdHlwZTUwX21zZy0+Y3JiMS5oZWFkZXIubXNnX3R5cGVfY29kZSA9IFRZUEU1MF9UWVBFX0NPREU7Ci0JaWYgKGxvbmdfbGVuIDw9IDY0KSB7Ci0JCXRtcF90eXBlNTBfbXNnLT5jcmIxLmhlYWRlci5tc2dfbGVuID0gVFlQRTUwX0NSQjFfTEVOOwotCQl0bXBfdHlwZTUwX21zZy0+Y3JiMS5rZXlibG9ja190eXBlID0gVFlQRTUwX0NSQjFfRk1UOwotCQlwX3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIxLnA7Ci0JCXBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTUwX21zZy0+Y3JiMS5wKTsKLQkJcV90Z3QgPSB0bXBfdHlwZTUwX21zZy0+Y3JiMS5xOwotCQlxX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPmNyYjEucSk7Ci0JCWRwX3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIxLmRwOwotCQlkcF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5jcmIxLmRwKTsKLQkJZHFfdGd0ID0gdG1wX3R5cGU1MF9tc2ctPmNyYjEuZHE7Ci0JCWRxX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPmNyYjEuZHEpOwotCQl1X3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIxLnU7Ci0JCXVfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTUwX21zZy0+Y3JiMS51KTsKLQkJaW5wX3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIxLm1lc3NhZ2U7Ci0JCWlucF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5jcmIxLm1lc3NhZ2UpOwotCX0gZWxzZSB7Ci0JCXRtcF90eXBlNTBfbXNnLT5jcmIyLmhlYWRlci5tc2dfbGVuID0gVFlQRTUwX0NSQjJfTEVOOwotCQl0bXBfdHlwZTUwX21zZy0+Y3JiMi5rZXlibG9ja190eXBlID0gVFlQRTUwX0NSQjJfRk1UOwotCQlwX3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIyLnA7Ci0JCXBfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTUwX21zZy0+Y3JiMi5wKTsKLQkJcV90Z3QgPSB0bXBfdHlwZTUwX21zZy0+Y3JiMi5xOwotCQlxX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPmNyYjIucSk7Ci0JCWRwX3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIyLmRwOwotCQlkcF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5jcmIyLmRwKTsKLQkJZHFfdGd0ID0gdG1wX3R5cGU1MF9tc2ctPmNyYjIuZHE7Ci0JCWRxX3RndF9sZW4gPSBzaXplb2YodG1wX3R5cGU1MF9tc2ctPmNyYjIuZHEpOwotCQl1X3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIyLnU7Ci0JCXVfdGd0X2xlbiA9IHNpemVvZih0bXBfdHlwZTUwX21zZy0+Y3JiMi51KTsKLQkJaW5wX3RndCA9IHRtcF90eXBlNTBfbXNnLT5jcmIyLm1lc3NhZ2U7Ci0JCWlucF90Z3RfbGVuID0gc2l6ZW9mKHRtcF90eXBlNTBfbXNnLT5jcmIyLm1lc3NhZ2UpOwotCX0KLQotCXBfdGd0ICs9IChwX3RndF9sZW4gLSBsb25nX2xlbik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHBfdGd0LCBpY2FNc2dfcC0+bnBfcHJpbWUgKyBsb25nX29mZnNldCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eShwX3RndCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JcV90Z3QgKz0gKHFfdGd0X2xlbiAtIHNob3J0X2xlbik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHFfdGd0LCBpY2FNc2dfcC0+bnFfcHJpbWUsIHNob3J0X2xlbikpCi0JCXJldHVybiBTRU5fUkVMRUFTRUQ7Ci0JaWYgKGlzX2VtcHR5KHFfdGd0LCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JZHBfdGd0ICs9IChkcF90Z3RfbGVuIC0gbG9uZ19sZW4pOwotCWlmIChjb3B5X2Zyb21fdXNlcihkcF90Z3QsIGljYU1zZ19wLT5icF9rZXkgKyBsb25nX29mZnNldCwgbG9uZ19sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eShkcF90Z3QsIGxvbmdfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCWRxX3RndCArPSAoZHFfdGd0X2xlbiAtIHNob3J0X2xlbik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGRxX3RndCwgaWNhTXNnX3AtPmJxX2tleSwgc2hvcnRfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkoZHFfdGd0LCBzaG9ydF9sZW4pKQotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JdV90Z3QgKz0gKHVfdGd0X2xlbiAtIGxvbmdfbGVuKTsKLQlpZiAoY29weV9mcm9tX3VzZXIodV90Z3QsIGljYU1zZ19wLT51X211bHRfaW52ICsgbG9uZ19vZmZzZXQsIGxvbmdfbGVuKSkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQlpZiAoaXNfZW1wdHkodV90Z3QsIGxvbmdfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCWlucF90Z3QgKz0gKGlucF90Z3RfbGVuIC0gbW9kX2xlbik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKGlucF90Z3QsIGljYU1zZ19wLT5pbnB1dGRhdGEsIG1vZF9sZW4pKQotCQlyZXR1cm4gU0VOX1JFTEVBU0VEOwotCWlmIChpc19lbXB0eShpbnBfdGd0LCBtb2RfbGVuKSkKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCi0JKno5MGNNc2dfbF9wID0gdG1wX3NpemUgLSBDQUxMRVJfSEVBREVSOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludAotY29udmVydF9yZXF1ZXN0KHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGZ1bmMsIHVuc2lnbmVkIHNob3J0IGZ1bmN0aW9uLAotCQlpbnQgY2R4LCBpbnQgZGV2X3R5cGUsIGludCAqbXNnX2xfcCwgdW5zaWduZWQgY2hhciAqbXNnX3ApCi17Ci0JaWYgKGRldl90eXBlID09IFBDSUNBKSB7Ci0JCWlmIChmdW5jID09IElDQVJTQUNSVCkKLQkJCXJldHVybiBJQ0FDUlRfbXNnX3RvX3R5cGU0Q1JUX21zZygKLQkJCQkoc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKikgYnVmZmVyLAotCQkJCW1zZ19sX3AsICh1bmlvbiB0eXBlNF9tc2cgKikgbXNnX3ApOwotCQllbHNlCi0JCQlyZXR1cm4gSUNBTUVYX21zZ190b190eXBlNE1FWF9tc2coCi0JCQkJKHN0cnVjdCBpY2FfcnNhX21vZGV4cG8gKikgYnVmZmVyLAotCQkJCW1zZ19sX3AsICh1bmlvbiB0eXBlNF9tc2cgKikgbXNnX3ApOwotCX0KLQlpZiAoZGV2X3R5cGUgPT0gUENJQ0MpIHsKLQkJaWYgKGZ1bmMgPT0gSUNBUlNBQ1JUKQotCQkJcmV0dXJuIElDQUNSVF9tc2dfdG9fdHlwZTZDUlRfbXNnKAotCQkJCShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCAqKSBidWZmZXIsCi0JCQkJY2R4LCBtc2dfbF9wLCAoc3RydWN0IHR5cGU2X21zZyAqKW1zZ19wKTsKLQkJaWYgKGZ1bmN0aW9uID09IFBDSV9GVU5DX0tFWV9FTkNSWVBUKQotCQkJcmV0dXJuIElDQU1FWF9tc2dfdG9fdHlwZTZNRVhfZW5fbXNnKAotCQkJCShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICopIGJ1ZmZlciwKLQkJCQljZHgsIG1zZ19sX3AsIChzdHJ1Y3QgdHlwZTZfbXNnICopIG1zZ19wKTsKLQkJZWxzZQotCQkJcmV0dXJuIElDQU1FWF9tc2dfdG9fdHlwZTZNRVhfZGVfbXNnKAotCQkJCShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICopIGJ1ZmZlciwKLQkJCQljZHgsIG1zZ19sX3AsIChzdHJ1Y3QgdHlwZTZfbXNnICopIG1zZ19wKTsKLQl9Ci0JaWYgKChkZXZfdHlwZSA9PSBQQ0lYQ0NfTUNMMikgfHwKLQkgICAgKGRldl90eXBlID09IFBDSVhDQ19NQ0wzKSB8fAotCSAgICAoZGV2X3R5cGUgPT0gQ0VYMkMpKSB7Ci0JCWlmIChmdW5jID09IElDQVJTQUNSVCkKLQkJCXJldHVybiBJQ0FDUlRfbXNnX3RvX3R5cGU2Q1JUX21zZ1goCi0JCQkJKHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICopIGJ1ZmZlciwKLQkJCQljZHgsIG1zZ19sX3AsIChzdHJ1Y3QgdHlwZTZfbXNnICopIG1zZ19wLAotCQkJCWRldl90eXBlKTsKLQkJZWxzZQotCQkJcmV0dXJuIElDQU1FWF9tc2dfdG9fdHlwZTZNRVhfbXNnWCgKLQkJCQkoc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqKSBidWZmZXIsCi0JCQkJY2R4LCBtc2dfbF9wLCAoc3RydWN0IHR5cGU2X21zZyAqKSBtc2dfcCwKLQkJCQlkZXZfdHlwZSk7Ci0JfQotCWlmIChkZXZfdHlwZSA9PSBDRVgyQSkgewotCQlpZiAoZnVuYyA9PSBJQ0FSU0FDUlQpCi0JCQlyZXR1cm4gSUNBQ1JUX21zZ190b190eXBlNTBDUlRfbXNnKAotCQkJCShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCAqKSBidWZmZXIsCi0JCQkJbXNnX2xfcCwgKHVuaW9uIHR5cGU1MF9tc2cgKikgbXNnX3ApOwotCQllbHNlCi0JCQlyZXR1cm4gSUNBTUVYX21zZ190b190eXBlNTBNRVhfbXNnKAotCQkJCShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICopIGJ1ZmZlciwKLQkJCQltc2dfbF9wLCAodW5pb24gdHlwZTUwX21zZyAqKSBtc2dfcCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBleHRfYml0bGVuc19tc2dfY291bnQgPSAwOwotc3RhdGljIGlubGluZSB2b2lkCi11bnNldF9leHRfYml0bGVucyh2b2lkKQotewotCWlmICghZXh0X2JpdGxlbnNfbXNnX2NvdW50KSB7Ci0JCVBSSU5USygiVW5hYmxlIHRvIHVzZSBjb3Byb2Nlc3NvcnMgZm9yIGV4dGVuZGVkIGJpdGxlbmd0aHMuICIKLQkJICAgICAgICJVc2luZyBQQ0lDQXMvQ0VYMkFzIChpZiBwcmVzZW50KSBmb3IgZXh0ZW5kZWQgIgotCQkgICAgICAgImJpdGxlbmd0aHMuIFRoaXMgaXMgbm90IGFuIGVycm9yLlxuIik7Ci0JCWV4dF9iaXRsZW5zX21zZ19jb3VudCsrOwotCX0KLQlleHRfYml0bGVucyA9IDA7Ci19Ci0KLWludAotY29udmVydF9yZXNwb25zZSh1bnNpZ25lZCBjaGFyICpyZXNwb25zZSwgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotCQkgaW50ICpyZXNwYnVmZmxlbl9wLCB1bnNpZ25lZCBjaGFyICpyZXNwX2J1ZmYpCi17Ci0Jc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqaWNhTXNnX3AgPSAoc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqKSBidWZmZXI7Ci0Jc3RydWN0IGVycm9yX2hkciAqZXJyaF9wID0gKHN0cnVjdCBlcnJvcl9oZHIgKikgcmVzcG9uc2U7Ci0Jc3RydWN0IHR5cGU4MF9oZHIgKnQ4MGhfcCA9IChzdHJ1Y3QgdHlwZTgwX2hkciAqKSByZXNwb25zZTsKLQlzdHJ1Y3QgdHlwZTg0X2hkciAqdDg0aF9wID0gKHN0cnVjdCB0eXBlODRfaGRyICopIHJlc3BvbnNlOwotCXN0cnVjdCB0eXBlODZfZm10Ml9tc2cgKnQ4Nm1fcCA9ICAoc3RydWN0IHR5cGU4Nl9mbXQyX21zZyAqKSByZXNwb25zZTsKLQlpbnQgcmVwbHlfY29kZSwgc2VydmljZV9yYywgc2VydmljZV9ycywgc3JjX2w7Ci0JdW5zaWduZWQgY2hhciAqc3JjX3AsICp0Z3RfcDsKLQlzdHJ1Y3QgQ1BSQiAqY3ByYl9wOwotCXN0cnVjdCBDUFJCWCAqY3ByYnhfcDsKLQotCXNyY19wID0gMDsKLQlyZXBseV9jb2RlID0gMDsKLQlzZXJ2aWNlX3JjID0gMDsKLQlzZXJ2aWNlX3JzID0gMDsKLQlzcmNfbCA9IDA7Ci0Jc3dpdGNoIChlcnJoX3AtPnR5cGUpIHsKLQljYXNlIFRZUEU4Ml9SU1BfQ09ERToKLQljYXNlIFRZUEU4OF9SU1BfQ09ERToKLQkJcmVwbHlfY29kZSA9IGVycmhfcC0+cmVwbHlfY29kZTsKLQkJc3JjX3AgPSAodW5zaWduZWQgY2hhciAqKWVycmhfcDsKLQkJUFJJTlRLKCJIYXJkd2FyZSBlcnJvcjogVHlwZSAlMDJYIE1lc3NhZ2UgSGVhZGVyOiAiCi0JCSAgICAgICAiJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCSAgICAgICBlcnJoX3AtPnR5cGUsCi0JCSAgICAgICBzcmNfcFswXSwgc3JjX3BbMV0sIHNyY19wWzJdLCBzcmNfcFszXSwKLQkJICAgICAgIHNyY19wWzRdLCBzcmNfcFs1XSwgc3JjX3BbNl0sIHNyY19wWzddKTsKLQkJYnJlYWs7Ci0JY2FzZSBUWVBFODBfUlNQX0NPREU6Ci0JCXNyY19sID0gaWNhTXNnX3AtPm91dHB1dGRhdGFsZW5ndGg7Ci0JCXNyY19wID0gcmVzcG9uc2UgKyAoaW50KXQ4MGhfcC0+bGVuIC0gc3JjX2w7Ci0JCWJyZWFrOwotCWNhc2UgVFlQRTg0X1JTUF9DT0RFOgotCQlzcmNfbCA9IGljYU1zZ19wLT5vdXRwdXRkYXRhbGVuZ3RoOwotCQlzcmNfcCA9IHJlc3BvbnNlICsgKGludCl0ODRoX3AtPmxlbiAtIHNyY19sOwotCQlicmVhazsKLQljYXNlIFRZUEU4Nl9SU1BfQ09ERToKLQkJcmVwbHlfY29kZSA9IHQ4Nm1fcC0+aGVhZGVyLnJlcGx5X2NvZGU7Ci0JCWlmIChyZXBseV9jb2RlICE9IDApCi0JCQlicmVhazsKLQkJY3ByYl9wID0gKHN0cnVjdCBDUFJCICopCi0JCQkocmVzcG9uc2UgKyBzaXplb2Yoc3RydWN0IHR5cGU4Nl9mbXQyX21zZykpOwotCQljcHJieF9wID0gKHN0cnVjdCBDUFJCWCAqKSBjcHJiX3A7Ci0JCWlmIChjcHJiX3AtPmNwcmJfdmVyX2lkICE9IDB4MDIpIHsKLQkJCWxlMnRvSShjcHJiX3AtPmNjcF9ydGNvZGUsICZzZXJ2aWNlX3JjKTsKLQkJCWlmIChzZXJ2aWNlX3JjICE9IDApIHsKLQkJCQlsZTJ0b0koY3ByYl9wLT5jY3BfcnNjb2RlLCAmc2VydmljZV9ycyk7Ci0JCQkJaWYgKChzZXJ2aWNlX3JjID09IDgpICYmIChzZXJ2aWNlX3JzID09IDY2KSkKLQkJCQkJUERFQlVHKCJCYWQgYmxvY2sgZm9ybWF0IG9uIFBDSUNDXG4iKTsKLQkJCQllbHNlIGlmICgoc2VydmljZV9yYyA9PSA4KSAmJiAoc2VydmljZV9ycyA9PSA2NSkpCi0JCQkJCVBERUJVRygiUHJvYmFibHkgYW4gZXZlbiBtb2R1bHVzIG9uICIKLQkJCQkJICAgICAgICJQQ0lDQ1xuIik7Ci0JCQkJZWxzZSBpZiAoKHNlcnZpY2VfcmMgPT0gOCkgJiYgKHNlcnZpY2VfcnMgPT0gNzcwKSkgewotCQkJCQlQREVCVUcoIkludmFsaWQga2V5IGxlbmd0aCBvbiBQQ0lDQ1xuIik7Ci0JCQkJCXVuc2V0X2V4dF9iaXRsZW5zKCk7Ci0JCQkJCXJldHVybiBSRUNfVVNFX1BDSUNBOwotCQkJCX0KLQkJCQllbHNlIGlmICgoc2VydmljZV9yYyA9PSA4KSAmJiAoc2VydmljZV9ycyA9PSA3ODMpKSB7Ci0JCQkJCVBERUJVRygiRXh0ZW5kZWQgYml0bGVuZ3RocyBub3QgZW5hYmxlZCIKLQkJCQkJICAgICAgICJvbiBQQ0lDQ1xuIik7Ci0JCQkJCXVuc2V0X2V4dF9iaXRsZW5zKCk7Ci0JCQkJCXJldHVybiBSRUNfVVNFX1BDSUNBOwotCQkJCX0KLQkJCQllbHNlCi0JCQkJCVBSSU5USygic2VydmljZSByYy9ycyAoUENJQ0MpOiAlZC8lZFxuIiwKLQkJCQkJICAgICAgIHNlcnZpY2VfcmMsIHNlcnZpY2VfcnMpOwotCQkJCXJldHVybiBSRUNfT1BFUkFORF9JTlY7Ci0JCQl9Ci0JCQlzcmNfcCA9ICh1bnNpZ25lZCBjaGFyICopY3ByYl9wICsgc2l6ZW9mKHN0cnVjdCBDUFJCKTsKLQkJCXNyY19wICs9IDQ7Ci0JCQlsZTJ0b0koc3JjX3AsICZzcmNfbCk7Ci0JCQlzcmNfbCAtPSAyOwotCQkJc3JjX3AgKz0gMjsKLQkJfSBlbHNlIHsKLQkJCXNlcnZpY2VfcmMgPSAoaW50KWNwcmJ4X3AtPmNjcF9ydGNvZGU7Ci0JCQlpZiAoc2VydmljZV9yYyAhPSAwKSB7Ci0JCQkJc2VydmljZV9ycyA9IChpbnQpIGNwcmJ4X3AtPmNjcF9yc2NvZGU7Ci0JCQkJaWYgKChzZXJ2aWNlX3JjID09IDgpICYmIChzZXJ2aWNlX3JzID09IDY2KSkKLQkJCQkJUERFQlVHKCJCYWQgYmxvY2sgZm9ybWF0IG9uIFBDSVhDQ1xuIik7Ci0JCQkJZWxzZSBpZiAoKHNlcnZpY2VfcmMgPT0gOCkgJiYgKHNlcnZpY2VfcnMgPT0gNjUpKQotCQkJCQlQREVCVUcoIlByb2JhYmx5IGFuIGV2ZW4gbW9kdWx1cyBvbiAiCi0JCQkJCSAgICAgICAiUENJWENDXG4iKTsKLQkJCQllbHNlIGlmICgoc2VydmljZV9yYyA9PSA4KSAmJiAoc2VydmljZV9ycyA9PSA3NzApKSB7Ci0JCQkJCVBERUJVRygiSW52YWxpZCBrZXkgbGVuZ3RoIG9uIFBDSVhDQ1xuIik7Ci0JCQkJCXVuc2V0X2V4dF9iaXRsZW5zKCk7Ci0JCQkJCXJldHVybiBSRUNfVVNFX1BDSUNBOwotCQkJCX0KLQkJCQllbHNlIGlmICgoc2VydmljZV9yYyA9PSA4KSAmJiAoc2VydmljZV9ycyA9PSA3ODMpKSB7Ci0JCQkJCVBERUJVRygiRXh0ZW5kZWQgYml0bGVuZ3RocyBub3QgZW5hYmxlZCIKLQkJCQkJICAgICAgICJvbiBQQ0lYQ0NcbiIpOwotCQkJCQl1bnNldF9leHRfYml0bGVucygpOwotCQkJCQlyZXR1cm4gUkVDX1VTRV9QQ0lDQTsKLQkJCQl9Ci0JCQkJZWxzZQotCQkJCQlQUklOVEsoInNlcnZpY2UgcmMvcnMgKFBDSVhDQyk6ICVkLyVkXG4iLAotCQkJCQkgICAgICAgc2VydmljZV9yYywgc2VydmljZV9ycyk7Ci0JCQkJcmV0dXJuIFJFQ19PUEVSQU5EX0lOVjsKLQkJCX0KLQkJCXNyY19wID0gKHVuc2lnbmVkIGNoYXIgKikKLQkJCQljcHJieF9wICsgc2l6ZW9mKHN0cnVjdCBDUFJCWCk7Ci0JCQlzcmNfcCArPSA0OwotCQkJc3JjX2wgPSAoaW50KSgqKChzaG9ydCAqKSBzcmNfcCkpOwotCQkJc3JjX2wgLT0gMjsKLQkJCXNyY19wICs9IDI7Ci0JCX0KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc3JjX3AgPSAodW5zaWduZWQgY2hhciAqKWVycmhfcDsKLQkJUFJJTlRLKCJVbnJlY29nbml6ZWQgTWVzc2FnZSBIZWFkZXI6ICIKLQkJICAgICAgICIlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeFxuIiwKLQkJICAgICAgIHNyY19wWzBdLCBzcmNfcFsxXSwgc3JjX3BbMl0sIHNyY19wWzNdLAotCQkgICAgICAgc3JjX3BbNF0sIHNyY19wWzVdLCBzcmNfcFs2XSwgc3JjX3BbN10pOwotCQlyZXR1cm4gUkVDX0JBRF9NRVNTQUdFOwotCX0KLQotCWlmIChyZXBseV9jb2RlKQotCQlzd2l0Y2ggKHJlcGx5X2NvZGUpIHsKLQkJY2FzZSBSRVA4Ml9FUlJPUl9NQUNISU5FX0ZBSUxVUkU6Ci0JCQlpZiAoZXJyaF9wLT50eXBlID09IFRZUEU4Ml9SU1BfQ09ERSkKLQkJCQlQUklOVEtXKCJNYWNoaW5lIGNoZWNrIGZhaWx1cmVcbiIpOwotCQkJZWxzZQotCQkJCVBSSU5US1coIk1vZHVsZSBmYWlsdXJlXG4iKTsKLQkJCXJldHVybiBSRUNfSEFSRFdBUl9FUlI7Ci0JCWNhc2UgUkVQODJfRVJST1JfT1BFUkFORF9JTlZBTElEOgotCQkJcmV0dXJuIFJFQ19PUEVSQU5EX0lOVjsKLQkJY2FzZSBSRVA4OF9FUlJPUl9NRVNTQUdFX01BTEZPUk1EOgotCQkJUFJJTlRLVygiTWVzc2FnZSBtYWxmb3JtZWRcbiIpOwotCQkJcmV0dXJuIFJFQ19PUEVSQU5EX0lOVjsKLQkJY2FzZSBSRVA4Ml9FUlJPUl9PUEVSQU5EX1NJWkU6Ci0JCQlyZXR1cm4gUkVDX09QRVJBTkRfU0laRTsKLQkJY2FzZSBSRVA4Ml9FUlJPUl9FVkVOX01PRF9JTl9PUE5EOgotCQkJcmV0dXJuIFJFQ19FVkVOX01PRDsKLQkJY2FzZSBSRVA4Ml9FUlJPUl9NRVNTQUdFX1RZUEU6Ci0JCQlyZXR1cm4gV1JPTkdfREVWSUNFX1RZUEU7Ci0JCWNhc2UgUkVQODJfRVJST1JfVFJBTlNQT1JUX0ZBSUw6Ci0JCQlQUklOVEtXKCJUcmFuc3BvcnQgZmFpbGVkIChBUEZTID0gJTAyWCUwMlglMDJYJTAyWClcbiIsCi0JCQkJdDg2bV9wLT5hcGZzWzBdLCB0ODZtX3AtPmFwZnNbMV0sCi0JCQkJdDg2bV9wLT5hcGZzWzJdLCB0ODZtX3AtPmFwZnNbM10pOwotCQkJcmV0dXJuIFJFQ19IQVJEV0FSX0VSUjsKLQkJZGVmYXVsdDoKLQkJCVBSSU5US1coInJlcGx5IGNvZGUgPSAlZFxuIiwgcmVwbHlfY29kZSk7Ci0JCQlyZXR1cm4gUkVDX0hBUkRXQVJfRVJSOwotCQl9Ci0KLQlpZiAoc2VydmljZV9yYyAhPSAwKQotCQlyZXR1cm4gUkVDX09QRVJBTkRfSU5WOwotCi0JaWYgKChzcmNfbCA+IGljYU1zZ19wLT5vdXRwdXRkYXRhbGVuZ3RoKSB8fAotCSAgICAoc3JjX2wgPiBSRVNQQlVGRlNJWkUpIHx8Ci0JICAgIChzcmNfbCA8PSAwKSkKLQkJcmV0dXJuIFJFQ19PUEVSQU5EX1NJWkU7Ci0KLQlQREVCVUcoIkxlbmd0aCByZXR1cm5lZCA9ICVkXG4iLCBzcmNfbCk7Ci0JdGd0X3AgPSByZXNwX2J1ZmYgKyBpY2FNc2dfcC0+b3V0cHV0ZGF0YWxlbmd0aCAtIHNyY19sOwotCW1lbWNweSh0Z3RfcCwgc3JjX3AsIHNyY19sKTsKLQlpZiAoKGVycmhfcC0+dHlwZSA9PSBUWVBFODZfUlNQX0NPREUpICYmIChyZXNwX2J1ZmYgPCB0Z3RfcCkpIHsKLQkJbWVtc2V0KHJlc3BfYnVmZiwgMCwgaWNhTXNnX3AtPm91dHB1dGRhdGFsZW5ndGggLSBzcmNfbCk7Ci0JCWlmIChwYWRfbXNnKHJlc3BfYnVmZiwgaWNhTXNnX3AtPm91dHB1dGRhdGFsZW5ndGgsIHNyY19sKSkKLQkJCXJldHVybiBSRUNfSU5WQUxJRF9QQUQ7Ci0JfQotCSpyZXNwYnVmZmxlbl9wID0gaWNhTXNnX3AtPm91dHB1dGRhdGFsZW5ndGg7Ci0JaWYgKCpyZXNwYnVmZmxlbl9wID09IDApCi0JCVBSSU5USygiWmVybyAqcmVzcGJ1ZmZsZW5fcFxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96OTBtYWluLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjJmMjBhYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDMzNzkgKzAsMCBAQAotLyoKLSAqICBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL3o5MG1haW4uYwotICoKLSAqICB6OTBjcnlwdCAxLjMuMwotICoKLSAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA1IElCTSBDb3Jwb3JhdGlvbgotICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocyAoYnVycm91Z2hAdXMuaWJtLmNvbSkKLSAqICAgICAgICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKLSAqCi0gKiAgSG90cGx1ZyAmIG1pc2MgZGV2aWNlIHN1cHBvcnQ6IEpvY2hlbiBSb2VocmlnIChyb2VocmlnQGRlLmlibS5jb20pCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCi0gKiBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4gICAgICAgLy8gY29weV8oZnJvbXx0bylfdXNlcgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4gICAgICAgLy8gbWRlbGF5Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPiAgIC8vIGZvciB0YXNrbGV0cwotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgotI2luY2x1ZGUgIno5MGNyeXB0LmgiCi0jaW5jbHVkZSAiejkwY29tbW9uLmgiCi0KLS8qKgotICogRGVmYXVsdHMgdGhhdCBtYXkgYmUgbW9kaWZpZWQuCi0gKi8KLQotLyoqCi0gKiBZb3UgY2FuIHNwZWNpZnkgYSBkaWZmZXJlbnQgbWlub3IgYXQgY29tcGlsZSB0aW1lLgotICovCi0jaWZuZGVmIFo5MENSWVBUX01JTk9SCi0jZGVmaW5lIFo5MENSWVBUX01JTk9SCU1JU0NfRFlOQU1JQ19NSU5PUgotI2VuZGlmCi0KLS8qKgotICogWW91IGNhbiBzcGVjaWZ5IGEgZGlmZmVyZW50IGRvbWFpbiBhdCBjb21waWxlIHRpbWUgb3Igb24gdGhlIGluc21vZAotICogY29tbWFuZCBsaW5lLgotICovCi0jaWZuZGVmIERPTUFJTl9JTkRFWAotI2RlZmluZSBET01BSU5fSU5ERVgJLTEKLSNlbmRpZgotCi0vKioKLSAqIFRoaXMgaXMgdGhlIG5hbWUgdW5kZXIgd2hpY2ggdGhlIGRldmljZSBpcyByZWdpc3RlcmVkIGluIC9wcm9jL21vZHVsZXMuCi0gKi8KLSNkZWZpbmUgUkVHX05BTUUJIno5MGNyeXB0IgotCi0vKioKLSAqIENsZWFudXAgc2hvdWxkIHJ1biBldmVyeSBDTEVBTlVQVElNRSBzZWNvbmRzIGFuZCBzaG91bGQgY2xlYW4gdXAgcmVxdWVzdHMKLSAqIG9sZGVyIHRoYW4gQ0xFQU5VUFRJTUUgc2Vjb25kcyBpbiB0aGUgcGFzdC4KLSAqLwotI2lmbmRlZiBDTEVBTlVQVElNRQotI2RlZmluZSBDTEVBTlVQVElNRSAxNQotI2VuZGlmCi0KLS8qKgotICogQ29uZmlnIHNob3VsZCBydW4gZXZlcnkgQ09ORklHVElNRSBzZWNvbmRzCi0gKi8KLSNpZm5kZWYgQ09ORklHVElNRQotI2RlZmluZSBDT05GSUdUSU1FIDMwCi0jZW5kaWYKLQotLyoqCi0gKiBUaGUgZmlyc3QgZXhlY3V0aW9uIG9mIHRoZSBjb25maWcgdGFzayBzaG91bGQgdGFrZSBwbGFjZQotICogaW1tZWRpYXRlbHkgYWZ0ZXIgaW5pdGlhbGl6YXRpb24KLSAqLwotI2lmbmRlZiBJTklUSUFMX0NPTkZJR1RJTUUKLSNkZWZpbmUgSU5JVElBTF9DT05GSUdUSU1FIDEKLSNlbmRpZgotCi0vKioKLSAqIFJlYWRlciBzaG91bGQgcnVuIGV2ZXJ5IFJFQURFUlRJTUUgbWlsbGlzZWNvbmRzCi0gKiBXaXRoIHRoZSAxMDBIeiBwYXRjaCBmb3IgczM5MCwgejkwY3J5cHQgY2FuIGxvY2sgdGhlIHN5c3RlbSBzb2xpZCB3aGlsZQotICogdW5kZXIgaGVhdnkgbG9hZC4gV2UnbGwgdHJ5IHRvIGF2b2lkIHRoYXQuCi0gKi8KLSNpZm5kZWYgUkVBREVSVElNRQotI2lmIEhaID4gMTAwMAotI2RlZmluZSBSRUFERVJUSU1FIDIKLSNlbHNlCi0jZGVmaW5lIFJFQURFUlRJTUUgMTAKLSNlbmRpZgotI2VuZGlmCi0KLS8qKgotICogdHVybiBsb25nIGRldmljZSBhcnJheSBpbmRleCBpbnRvIGRldmljZSBwb2ludGVyCi0gKi8KLSNkZWZpbmUgTE9ORzJERVZQVFIobmR4KSAoejkwY3J5cHQuZGV2aWNlX3BbKG5keCldKQotCi0vKioKLSAqIHR1cm4gc2hvcnQgZGV2aWNlIGFycmF5IGluZGV4IGludG8gbG9uZyBkZXZpY2UgYXJyYXkgaW5kZXgKLSAqLwotI2RlZmluZSBTSFJUMkxPTkcobmR4KSAoejkwY3J5cHQub3ZlcmFsbF9kZXZpY2VfeC5kZXZpY2VfaW5kZXhbKG5keCldKQotCi0vKioKLSAqIHR1cm4gc2hvcnQgZGV2aWNlIGFycmF5IGluZGV4IGludG8gZGV2aWNlIHBvaW50ZXIKLSAqLwotI2RlZmluZSBTSFJUMkRFVlBUUihuZHgpIExPTkcyREVWUFRSKFNIUlQyTE9ORyhuZHgpKQotCi0vKioKLSAqIFN0YXR1cyBmb3IgYSB3b3JrLWVsZW1lbnQKLSAqLwotI2RlZmluZSBTVEFUX0RFRkFVTFQJMHgwMCAvLyByZXF1ZXN0IGhhcyBub3QgYmVlbiBwcm9jZXNzZWQKLQotI2RlZmluZSBTVEFUX1JPVVRFRAkweDgwIC8vIGJpdCA3OiByZXF1ZXN0cyBnZXQgcm91dGVkIHRvIHNwZWNpZmljIGRldmljZQotCQkJICAgICAvLwkgICAgICAgZWxzZSwgZGV2aWNlIGlzIGRldGVybWluZWQgZWFjaCB3cml0ZQotI2RlZmluZSBTVEFUX0ZBSUxFRAkweDQwIC8vIGJpdCA2OiB0aGlzIGJpdCBpcyBzZXQgaWYgdGhlIHJlcXVlc3QgZmFpbGVkCi0JCQkgICAgIC8vCSAgICAgICBiZWZvcmUgYmVpbmcgc2VudCB0byB0aGUgaGFyZHdhcmUuCi0jZGVmaW5lIFNUQVRfV1JJVFRFTgkweDMwIC8vIGJpdHMgNS00OiB3b3JrIHRvIGJlIGRvbmUsIG5vdCBzZW50IHRvIGRldmljZQotLy8JCQkweDIwIC8vIFVOVVNFRCBzdGF0ZQotI2RlZmluZSBTVEFUX1JFQURQRU5ECTB4MTAgLy8gYml0cyA1LTQ6IHdvcmsgZG9uZSwgd2UncmUgcmV0dXJuaW5nIGRhdGEgbm93Ci0jZGVmaW5lIFNUQVRfTk9XT1JLCTB4MDAgLy8gYml0cyBvZmY6IG5vIHdvcmsgb24gYW55IHF1ZXVlCi0jZGVmaW5lIFNUQVRfUkRXUk1BU0sJMHgzMCAvLyBtYXNrIGZvciBiaXRzIDUtNAotCi0vKioKLSAqIE1hY3JvcyB0byBjaGVjayB0aGUgc3RhdHVzIFJEV1JNQVNLCi0gKi8KLSNkZWZpbmUgQ0hLX1JEV1JNQVNLKHN0YXRieXRlKSAoKHN0YXRieXRlKSAmIFNUQVRfUkRXUk1BU0spCi0jZGVmaW5lIFNFVF9SRFdSTUFTSyhzdGF0Ynl0ZSwgbmV3dmFsKSBcCi0JeyhzdGF0Ynl0ZSkgJj0gflNUQVRfUkRXUk1BU0s7IChzdGF0Ynl0ZSkgfD0gbmV3dmFsO30KLQotLyoqCi0gKiBBdWRpdCBUcmFpbC4JIFByb2dyZXNzIG9mIGEgV29yayBlbGVtZW50Ci0gKiBhdWRpdFswXTogVW5sZXNzIG5vdGVkIG90aGVyd2lzZSwgdGhlc2UgYml0cyBhcmUgYWxsIHNldCBieSB0aGUgcHJvY2VzcwotICovCi0jZGVmaW5lIEZQX0NPUFlGUk9NCTB4ODAgLy8gQ2FsbGVyJ3MgYnVmZmVyIGhhcyBiZWVuIGNvcGllZCB0byB3b3JrIGVsZW1lbnQKLSNkZWZpbmUgRlBfQlVGRlJFUQkweDQwIC8vIExvdyBMZXZlbCBidWZmZXIgcmVxdWVzdGVkCi0jZGVmaW5lIEZQX0JVRkZHT1QJMHgyMCAvLyBMb3cgTGV2ZWwgYnVmZmVyIG9idGFpbmVkCi0jZGVmaW5lIEZQX1NFTlQJCTB4MTAgLy8gV29yayBlbGVtZW50IHNlbnQgdG8gYSBjcnlwdG8gZGV2aWNlCi0JCQkgICAgIC8vIChtYXkgYmUgc2V0IGJ5IHByb2Nlc3Mgb3IgYnkgcmVhZGVyIHRhc2spCi0jZGVmaW5lIEZQX1BFTkRJTkcJMHgwOCAvLyBXb3JrIGVsZW1lbnQgcGxhY2VkIG9uIHBlbmRpbmcgcXVldWUKLQkJCSAgICAgLy8gKG1heSBiZSBzZXQgYnkgcHJvY2VzcyBvciBieSByZWFkZXIgdGFzaykKLSNkZWZpbmUgRlBfUkVRVUVTVAkweDA0IC8vIFdvcmsgZWxlbWVudCBwbGFjZWQgb24gcmVxdWVzdCBxdWV1ZQotI2RlZmluZSBGUF9BU0xFRVAJMHgwMiAvLyBXb3JrIGVsZW1lbnQgYWJvdXQgdG8gc2xlZXAKLSNkZWZpbmUgRlBfQVdBS0UJMHgwMSAvLyBXb3JrIGVsZW1lbnQgaGFzIGJlZW4gYXdha2VuZWQKLQotLyoqCi0gKiBhdWRpdFsxXTogVGhlc2UgYml0cyBhcmUgc2V0IGJ5IHRoZSByZWFkZXIgdGFzayBhbmQvb3IgdGhlIGNsZWFudXAgdGFzawotICovCi0jZGVmaW5lIEZQX05PVFBFTkRJTkcJICAweDgwIC8vIFdvcmsgZWxlbWVudCByZW1vdmVkIGZyb20gcGVuZGluZyBxdWV1ZQotI2RlZmluZSBGUF9BV0FLRU5JTkcJICAweDQwIC8vIENhbGxlciBhYm91dCB0byBiZSBhd2FrZW5lZAotI2RlZmluZSBGUF9USU1FRE9VVAkgIDB4MjAgLy8gQ2FsbGVyIHRpbWVkIG91dAotI2RlZmluZSBGUF9SRVNQU0laRVNFVAkgIDB4MTAgLy8gUmVzcG9uc2Ugc2l6ZSBjb3BpZWQgdG8gd29yayBlbGVtZW50Ci0jZGVmaW5lIEZQX1JFU1BBRERSQ09QSUVEIDB4MDggLy8gUmVzcG9uc2UgYWRkcmVzcyBjb3BpZWQgdG8gd29yayBlbGVtZW50Ci0jZGVmaW5lIEZQX1JFU1BCVUZGQ09QSUVEIDB4MDQgLy8gUmVzcG9uc2UgYnVmZmVyIGNvcGllZCB0byB3b3JrIGVsZW1lbnQKLSNkZWZpbmUgRlBfUkVNUkVRVUVTVAkgIDB4MDIgLy8gV29yayBlbGVtZW50IHJlbW92ZWQgZnJvbSByZXF1ZXN0IHF1ZXVlCi0jZGVmaW5lIEZQX1NJR05BTEVECSAgMHgwMSAvLyBXb3JrIGVsZW1lbnQgd2FzIGF3YWtlbmVkIGJ5IGEgc2lnbmFsCi0KLS8qKgotICogYXVkaXRbMl06IHVudXNlZAotICovCi0KLS8qKgotICogc3RhdGUgb2YgdGhlIGZpbGUgaGFuZGxlIGluIHByaXZhdGVfZGF0YS5zdGF0dXMKLSAqLwotI2RlZmluZSBTVEFUX09QRU4gMAotI2RlZmluZSBTVEFUX0NMT1NFRCAxCi0KLS8qKgotICogUElEKCkgZXhwYW5kcyB0byB0aGUgcHJvY2VzcyBJRCBvZiB0aGUgY3VycmVudCBwcm9jZXNzCi0gKi8KLSNkZWZpbmUgUElEKCkgKGN1cnJlbnQtPnBpZCkKLQotLyoqCi0gKiBTZWxlY3RlZCBDb25zdGFudHMuCVRoZSBudW1iZXIgb2YgQVBzIGFuZCB0aGUgbnVtYmVyIG9mIGRldmljZXMKLSAqLwotI2lmbmRlZiBaOTBDUllQVF9OVU1fQVBTCi0jZGVmaW5lIFo5MENSWVBUX05VTV9BUFMgNjQKLSNlbmRpZgotI2lmbmRlZiBaOTBDUllQVF9OVU1fREVWUwotI2RlZmluZSBaOTBDUllQVF9OVU1fREVWUyBaOTBDUllQVF9OVU1fQVBTCi0jZW5kaWYKLQotLyoqCi0gKiBCdWZmZXIgc2l6ZSBmb3IgcmVjZWl2aW5nIHJlc3BvbnNlcy4gVGhlIG1heGltdW0gUmVzcG9uc2UgU2l6ZQotICogaXMgYWN0dWFsbHkgdGhlIG1heGltdW0gcmVxdWVzdCBzaXplLCBzaW5jZSBpbiBhbiBlcnJvciBjb25kaXRpb24KLSAqIHRoZSByZXF1ZXN0IGl0c2VsZiBtYXkgYmUgcmV0dXJuZWQgdW5jaGFuZ2VkLgotICovCi0jZGVmaW5lIE1BWF9SRVNQT05TRV9TSVpFIDB4MDAwMDA3N0MKLQotLyoqCi0gKiBBIGNvdW50IGFuZCBzdGF0dXMtYnl0ZSBtYXNrCi0gKi8KLXN0cnVjdCBzdGF0dXMgewotCWludAkgICAgICBzdF9jb3VudDsJCSAgICAvLyAjIG9mIGVuYWJsZWQgZGV2aWNlcwotCWludAkgICAgICBkaXNhYmxlZF9jb3VudDsJICAgIC8vICMgb2YgZGlzYWJsZWQgZGV2aWNlcwotCWludAkgICAgICB1c2VyX2Rpc2FibGVkX2NvdW50OyAgLy8gIyBvZiBkZXZpY2VzIGRpc2FibGVkIHZpYSBwcm9jIGZzCi0JdW5zaWduZWQgY2hhciBzdF9tYXNrW1o5MENSWVBUX05VTV9BUFNdOyAvLyBjdXJyZW50IHN0YXR1cyBtYXNrCi19OwotCi0vKioKLSAqIFRoZSBhcnJheSBvZiBkZXZpY2UgaW5kZXhlcyBpcyBhIG1lY2hhbmlzbSBmb3IgZmFzdCBpbmRleGluZyBpbnRvCi0gKiBhIGxvbmcgKGFuZCBzcGFyc2UpIGFycmF5LiAgRm9yIGluc3RhbmNlLCBpZiBBUHMgMywgOSBhbmQgNDcgYXJlCi0gKiBpbnN0YWxsZWQsIHo5MENEZXZpY2VJbmRleFswXSBpcyAzLCB6OTBDRGV2aWNlSW5kZXhbMV0gaXMgOSwgYW5kCi0gKiB6OTBDRGV2aWNlSW5kZXhbMl0gaXMgNDcuCi0gKi8KLXN0cnVjdCBkZXZpY2VfeCB7Ci0JaW50IGRldmljZV9pbmRleFtaOTBDUllQVF9OVU1fREVWU107Ci19OwotCi0vKioKLSAqIEFsbCBkZXZpY2VzIGFyZSBhcnJhbmdlZCBpbiBhIHNpbmdsZSBhcnJheTogNjQgQVBzCi0gKi8KLXN0cnVjdCBkZXZpY2UgewotCWludAkJIGRldl90eXBlOwkgICAgLy8gUENJQ0EsIFBDSUNDLCBQQ0lYQ0NfTUNMMiwKLQkJCQkJICAgIC8vIFBDSVhDQ19NQ0wzLCBDRVgyQywgQ0VYMkEKLQllbnVtIGRldnN0YXQJIGRldl9zdGF0OwkgICAgLy8gY3VycmVudCBkZXZpY2Ugc3RhdHVzCi0JaW50CQkgZGV2X3NlbGZfeDsJICAgIC8vIEluZGV4IGluIGFycmF5Ci0JaW50CQkgZGlzYWJsZWQ7CSAgICAvLyBTZXQgd2hlbiBkZXZpY2UgaXMgaW4gZXJyb3IKLQlpbnQJCSB1c2VyX2Rpc2FibGVkOwkgICAgLy8gU2V0IHdoZW4gZGV2aWNlIGlzIGRpc2FibGVkIGJ5IHVzZXIKLQlpbnQJCSBkZXZfcV9kZXB0aDsJICAgIC8vIHEgZGVwdGgKLQl1bnNpZ25lZCBjaGFyICoJIGRldl9yZXNwX3A7CSAgICAvLyBSZXNwb25zZSBidWZmZXIgYWRkcmVzcwotCWludAkJIGRldl9yZXNwX2w7CSAgICAvLyBSZXNwb25zZSBCdWZmZXIgbGVuZ3RoCi0JaW50CQkgZGV2X2NhbGxlcl9jb3VudDsgIC8vIE51bWJlciBvZiBjYWxsZXJzCi0JaW50CQkgZGV2X3RvdGFsX3JlcV9jbnQ7IC8vICMgcmVxdWVzdHMgZm9yIGRldmljZSBzaW5jZSBsb2FkCi0Jc3RydWN0IGxpc3RfaGVhZCBkZXZfY2FsbGVyX2xpc3Q7ICAgLy8gTGlzdCBvZiBjYWxsZXJzCi19OwotCi0vKioKLSAqIFRoZXJlJ3MgYSBzdHJ1Y3Qgc3RhdHVzIGFuZCBhIHN0cnVjdCBkZXZpY2VfeCBmb3IgZWFjaCBkZXZpY2UgdHlwZS4KLSAqLwotc3RydWN0IGhkd2FyZV9ibG9jayB7Ci0Jc3RydWN0IHN0YXR1cwloZHdhcmVfbWFzazsKLQlzdHJ1Y3Qgc3RhdHVzCXR5cGVfbWFza1taOTBDUllQVF9OVU1fVFlQRVNdOwotCXN0cnVjdCBkZXZpY2VfeCB0eXBlX3hfYWRkcltaOTBDUllQVF9OVU1fVFlQRVNdOwotCXVuc2lnbmVkIGNoYXIJZGV2aWNlX3R5cGVfYXJyYXlbWjkwQ1JZUFRfTlVNX0FQU107Ci19OwotCi0vKioKLSAqIHo5MGNyeXB0IGlzIHRoZSB0b3Btb3N0IGRhdGEgc3RydWN0dXJlIGluIHRoZSBoaWVyYXJjaHkuCi0gKi8KLXN0cnVjdCB6OTBjcnlwdCB7Ci0JaW50CQkgICAgIG1heF9jb3VudDsJCS8vIE5yIG9mIHBvc3NpYmxlIGNyeXB0byBkZXZpY2VzCi0Jc3RydWN0IHN0YXR1cwkgICAgIG1hc2s7Ci0JaW50CQkgICAgIHFfZGVwdGhfYXJyYXlbWjkwQ1JZUFRfTlVNX0RFVlNdOwotCWludAkJICAgICBkZXZfdHlwZV9hcnJheVtaOTBDUllQVF9OVU1fREVWU107Ci0Jc3RydWN0IGRldmljZV94CSAgICAgb3ZlcmFsbF9kZXZpY2VfeDsJLy8gYXJyYXkgZGV2aWNlIGluZGV4ZXMKLQlzdHJ1Y3QgZGV2aWNlICoJICAgICBkZXZpY2VfcFtaOTBDUllQVF9OVU1fREVWU107Ci0JaW50CQkgICAgIHRlcm1pbmF0aW5nOwotCWludAkJICAgICBkb21haW5fZXN0YWJsaXNoZWQ7Ly8gVFJVRTogIGRvbWFpbiBoYXMgYmVlbiBmb3VuZAotCWludAkJICAgICBjZHg7CQkvLyBDcnlwdG8gRG9tYWluIEluZGV4Ci0JaW50CQkgICAgIGxlbjsJCS8vIExlbmd0aCBvZiB0aGlzIGRhdGEgc3RydWN0dXJlCi0Jc3RydWN0IGhkd2FyZV9ibG9jayAqaGR3YXJlX2luZm87Ci19OwotCi0vKioKLSAqIEFuIGFycmF5IG9mIHRoZXNlIHN0cnVjdHVyZXMgaXMgcG9pbnRlZCB0byBmcm9tIGRldl9jYWxsZXIKLSAqIFRoZSBsZW5ndGggb2YgdGhlIGFycmF5IGRlcGVuZHMgb24gdGhlIGRldmljZSB0eXBlLiBGb3IgQVBzLAotICogdGhlcmUgYXJlIDguCi0gKgotICogVGhlIGNhbGxlciBidWZmZXIgaXMgYWxsb2NhdGVkIHRvIHRoZSB1c2VyIGF0IE9QRU4uIEF0IFdSSVRFLAotICogaXQgY29udGFpbnMgdGhlIHJlcXVlc3Q7IGF0IFJFQUQsIHRoZSByZXNwb25zZS4gVGhlIGZ1bmN0aW9uCi0gKiBzZW5kX3RvX2NyeXB0b19kZXZpY2UgY29udmVydHMgdGhlIHJlcXVlc3QgdG8gZGV2aWNlLWRlcGVuZGVudAotICogZm9ybSBhbmQgdXNlIHRoZSBjYWxsZXIncyBPUEVOLWFsbG9jYXRlZCBidWZmZXIgZm9yIHRoZSByZXNwb25zZS4KLSAqCi0gKiBGb3IgdGhlIGNvbnRlbnRzIG9mIGNhbGxlcl9kZXZfZGVwX3JlcSBhbmQgY2FsbGVyX2Rldl9kZXBfcmVxX3AKLSAqIGJlY2F1c2UgdGhhdCBwb2ludHMgdG8gaXQsIHNlZSB0aGUgZGlzY3Vzc2lvbiBpbiB6OTBoYXJkd2FyZS5jLgotICogU2VhcmNoIGZvciAiZXh0ZW5kZWQgcmVxdWVzdCBtZXNzYWdlIGJsb2NrIi4KLSAqLwotc3RydWN0IGNhbGxlciB7Ci0JaW50CQkgY2FsbGVyX2J1Zl9sOwkJIC8vIGxlbmd0aCBvZiBvcmlnaW5hbCByZXF1ZXN0Ci0JdW5zaWduZWQgY2hhciAqCSBjYWxsZXJfYnVmX3A7CQkgLy8gT3JpZ2luYWwgcmVxdWVzdCBvbiBXUklURQotCWludAkJIGNhbGxlcl9kZXZfZGVwX3JlcV9sOwkgLy8gbGVuIGRldmljZSBkZXBlbmRlbnQgcmVxdWVzdAotCXVuc2lnbmVkIGNoYXIgKgkgY2FsbGVyX2Rldl9kZXBfcmVxX3A7CSAvLyBEZXZpY2UgZGVwZW5kZW50IGZvcm0KLQl1bnNpZ25lZCBjaGFyCSBjYWxsZXJfaWRbOF07CQkgLy8gY2FsbGVyLXN1cHBsaWVkIG1lc3NhZ2UgaWQKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNhbGxlcl9saXN0ZTsKLQl1bnNpZ25lZCBjaGFyCSBjYWxsZXJfZGV2X2RlcF9yZXFbTUFYX1JFU1BPTlNFX1NJWkVdOwotfTsKLQotLyoqCi0gKiBGdW5jdGlvbiBwcm90b3R5cGVzIGZyb20gejkwaGFyZHdhcmUuYwotICovCi1lbnVtIGhkc3RhdCBxdWVyeV9vbmxpbmUoaW50IGRldmljZU5yLCBpbnQgY2R4LCBpbnQgcmVzZXROciwgaW50ICpxX2RlcHRoLAotCQkJIGludCAqZGV2X3R5cGUpOwotZW51bSBkZXZzdGF0IHJlc2V0X2RldmljZShpbnQgZGV2aWNlTnIsIGludCBjZHgsIGludCByZXNldE5yKTsKLWVudW0gZGV2c3RhdCBzZW5kX3RvX0FQKGludCBkZXZfbnIsIGludCBjZHgsIGludCBtc2dfbGVuLCB1bnNpZ25lZCBjaGFyICptc2dfZXh0KTsKLWVudW0gZGV2c3RhdCByZWNlaXZlX2Zyb21fQVAoaW50IGRldl9uciwgaW50IGNkeCwgaW50IHJlc3BsZW4sCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKnJlc3AsIHVuc2lnbmVkIGNoYXIgKnBzbWlkKTsKLWludCBjb252ZXJ0X3JlcXVlc3QodW5zaWduZWQgY2hhciAqYnVmZmVyLCBpbnQgZnVuYywgdW5zaWduZWQgc2hvcnQgZnVuY3Rpb24sCi0JCSAgICBpbnQgY2R4LCBpbnQgZGV2X3R5cGUsIGludCAqbXNnX2xfcCwgdW5zaWduZWQgY2hhciAqbXNnX3ApOwotaW50IGNvbnZlcnRfcmVzcG9uc2UodW5zaWduZWQgY2hhciAqcmVzcG9uc2UsIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKLQkJICAgICBpbnQgKnJlc3BidWZmbGVuX3AsIHVuc2lnbmVkIGNoYXIgKnJlc3BfYnVmZik7Ci0KLS8qKgotICogTG93IGxldmVsIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotc3RhdGljIGludCBjcmVhdGVfejkwY3J5cHQoaW50ICpjZHhfcCk7Ci1zdGF0aWMgaW50IHJlZnJlc2hfejkwY3J5cHQoaW50ICpjZHhfcCk7Ci1zdGF0aWMgaW50IGZpbmRfY3J5cHRvX2RldmljZXMoc3RydWN0IHN0YXR1cyAqZGV2aWNlTWFzayk7Ci1zdGF0aWMgaW50IGNyZWF0ZV9jcnlwdG9fZGV2aWNlKGludCBpbmRleCk7Ci1zdGF0aWMgaW50IGRlc3Ryb3lfY3J5cHRvX2RldmljZShpbnQgaW5kZXgpOwotc3RhdGljIHZvaWQgZGVzdHJveV96OTBjcnlwdCh2b2lkKTsKLXN0YXRpYyBpbnQgcmVmcmVzaF9pbmRleF9hcnJheShzdHJ1Y3Qgc3RhdHVzICpzdGF0dXNfc3RyLAotCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfeCAqaW5kZXhfYXJyYXkpOwotc3RhdGljIGludCBwcm9iZV9kZXZpY2VfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXZQdHIpOwotc3RhdGljIGludCBwcm9iZV9QQ0lYQ0NfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXZQdHIpOwotCi0vKioKLSAqIHByb2MgZnMgZGVmaW5pdGlvbnMKLSAqLwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqejkwY3J5cHRfZW50cnk7Ci0KLS8qKgotICogZGF0YSBzdHJ1Y3R1cmVzCi0gKi8KLQotLyoqCi0gKiB3b3JrX2VsZW1lbnQub3BlbmVyIHBvaW50cyBiYWNrIHRvIHRoaXMgc3RydWN0dXJlCi0gKi8KLXN0cnVjdCBwcml2X2RhdGEgewotCXBpZF90CW9wZW5lcl9waWQ7Ci0JdW5zaWduZWQgY2hhcglzdGF0dXM7CQkvLyAwOiBvcGVuICAxOiBjbG9zZWQKLX07Ci0KLS8qKgotICogQSB3b3JrIGVsZW1lbnQgaXMgYWxsb2NhdGVkIGZvciBlYWNoIHJlcXVlc3QKLSAqLwotc3RydWN0IHdvcmtfZWxlbWVudCB7Ci0Jc3RydWN0IHByaXZfZGF0YSAqcHJpdl9kYXRhOwotCXBpZF90CQkgIHBpZDsKLQlpbnQJCSAgZGV2aW5kZXg7CSAgLy8gaW5kZXggb2YgZGV2aWNlIHByb2Nlc3NpbmcgdGhpcyB3X2UKLQkJCQkJICAvLyAoSWYgcmVxdWVzdCBkaWQgbm90IHNwZWNpZnkgZGV2aWNlLAotCQkJCQkgIC8vIC0xIHVudGlsIHBsYWNlZCBvbnRvIGEgcXVldWUpCi0JaW50CQkgIGRldnR5cGU7Ci0Jc3RydWN0IGxpc3RfaGVhZCAgbGlzdGU7CSAgLy8gdXNlZCBmb3IgcmVxdWVzdHEgYW5kIHBlbmRpbmdxCi0JY2hhcgkJICBidWZmZXJbMTI4XTsJICAvLyBsb2NhbCBjb3B5IG9mIHVzZXIgcmVxdWVzdAotCWludAkJICBidWZmX3NpemU7CSAgLy8gc2l6ZSBvZiB0aGUgYnVmZmVyIGZvciB0aGUgcmVxdWVzdAotCWNoYXIJCSAgcmVzcF9idWZmW1JFU1BCVUZGU0laRV07Ci0JaW50CQkgIHJlc3BfYnVmZl9zaXplOwotCWNoYXIgX191c2VyICoJICByZXNwX2FkZHI7CSAgLy8gYWRkcmVzcyBvZiByZXNwb25zZSBpbiB1c2VyIHNwYWNlCi0JdW5zaWduZWQgaW50CSAgZnVuY2NvZGU7CSAgLy8gZnVuY3Rpb24gY29kZSBvZiByZXF1ZXN0Ci0Jd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdHE7Ci0JdW5zaWduZWQgbG9uZwkgIHJlcXVlc3RzZW50OwkgIC8vIHRpbWUgYXQgd2hpY2ggdGhlIHJlcXVlc3Qgd2FzIHNlbnQKLQlhdG9taWNfdAkgIGFsYXJtcnVuZzsJICAvLyB3YWtlLXVwIHNpZ25hbAotCXVuc2lnbmVkIGNoYXIJICBjYWxsZXJfaWRbOF07CSAgLy8gcGlkICsgY291bnRlciwgZm9yIHRoaXMgd19lCi0JdW5zaWduZWQgY2hhcgkgIHN0YXR1c1sxXTsJICAvLyBiaXRzIHRvIG1hcmsgc3RhdHVzIG9mIHRoZSByZXF1ZXN0Ci0JdW5zaWduZWQgY2hhcgkgIGF1ZGl0WzNdOwkgIC8vIHJlY29yZCBvZiB3b3JrIGVsZW1lbnQncyBwcm9ncmVzcwotCXVuc2lnbmVkIGNoYXIgKgkgIHJlcXVlc3RwdHI7CSAgLy8gYWRkcmVzcyBvZiByZXF1ZXN0IGJ1ZmZlcgotCWludAkJICByZXRjb2RlOwkgIC8vIHJldHVybiBjb2RlIG9mIHJlcXVlc3QKLX07Ci0KLS8qKgotICogSGlnaCBsZXZlbCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKi8KLXN0YXRpYyBpbnQgejkwY3J5cHRfb3BlbihzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7Ci1zdGF0aWMgaW50IHo5MGNyeXB0X3JlbGVhc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwotc3RhdGljIHNzaXplX3QgejkwY3J5cHRfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLXN0YXRpYyBzc2l6ZV90IHo5MGNyeXB0X3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosCi0JCQkJCQkJc2l6ZV90LCBsb2ZmX3QgKik7Ci1zdGF0aWMgbG9uZyB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIGxvbmcgejkwY3J5cHRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7Ci0KLXN0YXRpYyB2b2lkIHo5MGNyeXB0X3JlYWRlcl90YXNrKHVuc2lnbmVkIGxvbmcpOwotc3RhdGljIHZvaWQgejkwY3J5cHRfc2NoZWR1bGVfcmVhZGVyX3Rhc2sodW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgdm9pZCB6OTBjcnlwdF9jb25maWdfdGFzayh1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHo5MGNyeXB0X2NsZWFudXBfdGFzayh1bnNpZ25lZCBsb25nKTsKLQotc3RhdGljIGludCB6OTBjcnlwdF9zdGF0dXMoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50LCBpbnQgKiwgdm9pZCAqKTsKLXN0YXRpYyBpbnQgejkwY3J5cHRfc3RhdHVzX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosCi0JCQkJIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7Ci0KLS8qKgotICogU3RvcmFnZSBhbGxvY2F0ZWQgYXQgaW5pdGlhbGl6YXRpb24gYW5kIHVzZWQgdGhyb3VnaG91dCB0aGUgbGlmZSBvZgotICogdGhpcyBpbnNtb2QKLSAqLwotc3RhdGljIGludCBkb21haW4gPSBET01BSU5fSU5ERVg7Ci1zdGF0aWMgc3RydWN0IHo5MGNyeXB0IHo5MGNyeXB0Owotc3RhdGljIGludCBxdWllc2NlX3o5MGNyeXB0Owotc3RhdGljIHNwaW5sb2NrX3QgcXVldWVzcGlubG9jazsKLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHJlcXVlc3RfbGlzdDsKLXN0YXRpYyBpbnQgcmVxdWVzdHFfY291bnQ7Ci1zdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nX2xpc3Q7Ci1zdGF0aWMgaW50IHBlbmRpbmdxX2NvdW50OwotCi1zdGF0aWMgc3RydWN0IHRhc2tsZXRfc3RydWN0IHJlYWRlcl90YXNrbGV0Owotc3RhdGljIHN0cnVjdCB0aW1lcl9saXN0IHJlYWRlcl90aW1lcjsKLXN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBjb25maWdfdGltZXI7Ci1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgY2xlYW51cF90aW1lcjsKLXN0YXRpYyBhdG9taWNfdCB0b3RhbF9vcGVuOwotc3RhdGljIGF0b21pY190IHo5MGNyeXB0X3N0ZXA7Ci0KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHo5MGNyeXB0X2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5yZWFkCQk9IHo5MGNyeXB0X3JlYWQsCi0JLndyaXRlCQk9IHo5MGNyeXB0X3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bAk9IHo5MGNyeXB0X3VubG9ja2VkX2lvY3RsLAotI2lmZGVmIENPTkZJR19DT01QQVQKLQkuY29tcGF0X2lvY3RsCT0gejkwY3J5cHRfY29tcGF0X2lvY3RsLAotI2VuZGlmCi0JLm9wZW4JCT0gejkwY3J5cHRfb3BlbiwKLQkucmVsZWFzZQk9IHo5MGNyeXB0X3JlbGVhc2UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB6OTBjcnlwdF9taXNjX2RldmljZSA9IHsKLQkubWlub3IJICAgID0gWjkwQ1JZUFRfTUlOT1IsCi0JLm5hbWUJICAgID0gREVWX05BTUUsCi0JLmZvcHMJICAgID0gJno5MGNyeXB0X2ZvcHMsCi19OwotCi0vKioKLSAqIERvY3VtZW50YXRpb24gdmFsdWVzLgotICovCi1NT0RVTEVfQVVUSE9SKCJ6U2VyaWVzIExpbnV4IENyeXB0byBUZWFtOiBSb2JlcnQgSC4gQnVycm91Z2hzLCBFcmljIEQuIFJvc3NtYW4iCi0JICAgICAgImFuZCBKb2NoZW4gUm9laHJpZyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJ6U2VyaWVzIExpbnV4IENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgZGV2aWNlIGRyaXZlciwgIgotCQkgICAiQ29weXJpZ2h0IDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1tb2R1bGVfcGFyYW0oZG9tYWluLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkb21haW4sICJkb21haW4gaW5kZXggZm9yIGRldmljZSIpOwotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotLyoqCi0gKiBpb2N0bDMyIGNvbnZlcnNpb24gcm91dGluZXMKLSAqLwotc3RydWN0IGljYV9yc2FfbW9kZXhwb18zMiB7IC8vIEZvciAzMi1iaXQgY2FsbGVycwotCWNvbXBhdF91cHRyX3QJaW5wdXRkYXRhOwotCXVuc2lnbmVkIGludAlpbnB1dGRhdGFsZW5ndGg7Ci0JY29tcGF0X3VwdHJfdAlvdXRwdXRkYXRhOwotCXVuc2lnbmVkIGludAlvdXRwdXRkYXRhbGVuZ3RoOwotCWNvbXBhdF91cHRyX3QJYl9rZXk7Ci0JY29tcGF0X3VwdHJfdAluX21vZHVsdXM7Ci19OwotCi1zdGF0aWMgbG9uZwotdHJhbnNfbW9kZXhwbzMyKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvXzMyIF9fdXNlciAqbWV4MzJ1ID0gY29tcGF0X3B0cihhcmcpOwotCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fMzIgIG1leDMyazsKLQlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvIF9fdXNlciAqbWV4NjQ7Ci0JbG9uZyByZXQgPSAwOwotCXVuc2lnbmVkIGludCBpOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBtZXgzMnUsIHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvXzMyKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCW1leDY0ID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBpY2FfcnNhX21vZGV4cG8pKTsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG1leDY0LCBzaXplb2Yoc3RydWN0IGljYV9yc2FfbW9kZXhwbykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJm1leDMyaywgbWV4MzJ1LCBzaXplb2Yoc3RydWN0IGljYV9yc2FfbW9kZXhwb18zMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoX19wdXRfdXNlcihjb21wYXRfcHRyKG1leDMyay5pbnB1dGRhdGEpLCAmbWV4NjQtPmlucHV0ZGF0YSkgICB8fAotCSAgICBfX3B1dF91c2VyKG1leDMyay5pbnB1dGRhdGFsZW5ndGgsICZtZXg2NC0+aW5wdXRkYXRhbGVuZ3RoKSAgIHx8Ci0JICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihtZXgzMmsub3V0cHV0ZGF0YSksICZtZXg2NC0+b3V0cHV0ZGF0YSkgfHwKLQkgICAgX19wdXRfdXNlcihtZXgzMmsub3V0cHV0ZGF0YWxlbmd0aCwgJm1leDY0LT5vdXRwdXRkYXRhbGVuZ3RoKSB8fAotCSAgICBfX3B1dF91c2VyKGNvbXBhdF9wdHIobWV4MzJrLmJfa2V5KSwgJm1leDY0LT5iX2tleSkgICAgICAgICAgIHx8Ci0JICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihtZXgzMmsubl9tb2R1bHVzKSwgJm1leDY0LT5uX21vZHVsdXMpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXQgPSB6OTBjcnlwdF91bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsICh1bnNpZ25lZCBsb25nKW1leDY0KTsKLQlpZiAoIXJldCkKLQkJaWYgKF9fZ2V0X3VzZXIoaSwgJm1leDY0LT5vdXRwdXRkYXRhbGVuZ3RoKSB8fAotCQkgICAgX19wdXRfdXNlcihpLCAmbWV4MzJ1LT5vdXRwdXRkYXRhbGVuZ3RoKSkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnRfMzIgeyAvLyBGb3IgMzItYml0IGNhbGxlcnMKLQljb21wYXRfdXB0cl90CWlucHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOwotCWNvbXBhdF91cHRyX3QJb3V0cHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKLQljb21wYXRfdXB0cl90CWJwX2tleTsKLQljb21wYXRfdXB0cl90CWJxX2tleTsKLQljb21wYXRfdXB0cl90CW5wX3ByaW1lOwotCWNvbXBhdF91cHRyX3QJbnFfcHJpbWU7Ci0JY29tcGF0X3VwdHJfdAl1X211bHRfaW52OwotfTsKLQotc3RhdGljIGxvbmcKLXRyYW5zX21vZGV4cG9fY3J0MzIoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0XzMyIF9fdXNlciAqY3J0MzJ1ID0gY29tcGF0X3B0cihhcmcpOwotCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0XzMyICBjcnQzMms7Ci0Jc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgX191c2VyICpjcnQ2NDsKLQlsb25nIHJldCA9IDA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGNydDMydSwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydF8zMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQljcnQ2NCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCkpOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgY3J0NjQsIHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoJmNydDMyaywgY3J0MzJ1LAotCQkJICAgc2l6ZW9mKHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0XzMyKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChfX3B1dF91c2VyKGNvbXBhdF9wdHIoY3J0MzJrLmlucHV0ZGF0YSksICZjcnQ2NC0+aW5wdXRkYXRhKSAgIHx8Ci0JICAgIF9fcHV0X3VzZXIoY3J0MzJrLmlucHV0ZGF0YWxlbmd0aCwgJmNydDY0LT5pbnB1dGRhdGFsZW5ndGgpICAgfHwKLQkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKGNydDMyay5vdXRwdXRkYXRhKSwgJmNydDY0LT5vdXRwdXRkYXRhKSB8fAotCSAgICBfX3B1dF91c2VyKGNydDMyay5vdXRwdXRkYXRhbGVuZ3RoLCAmY3J0NjQtPm91dHB1dGRhdGFsZW5ndGgpIHx8Ci0JICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihjcnQzMmsuYnBfa2V5KSwgJmNydDY0LT5icF9rZXkpICAgICAgICAgfHwKLQkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKGNydDMyay5icV9rZXkpLCAmY3J0NjQtPmJxX2tleSkgICAgICAgICB8fAotCSAgICBfX3B1dF91c2VyKGNvbXBhdF9wdHIoY3J0MzJrLm5wX3ByaW1lKSwgJmNydDY0LT5ucF9wcmltZSkgICAgIHx8Ci0JICAgIF9fcHV0X3VzZXIoY29tcGF0X3B0cihjcnQzMmsubnFfcHJpbWUpLCAmY3J0NjQtPm5xX3ByaW1lKSAgICAgfHwKLQkgICAgX19wdXRfdXNlcihjb21wYXRfcHRyKGNydDMyay51X211bHRfaW52KSwgJmNydDY0LT51X211bHRfaW52KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JcmV0ID0gejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwoZmlscCwgY21kLCAodW5zaWduZWQgbG9uZyljcnQ2NCk7Ci0JaWYgKCFyZXQpCi0JCWlmIChfX2dldF91c2VyKGksICZjcnQ2NC0+b3V0cHV0ZGF0YWxlbmd0aCkgfHwKLQkJICAgIF9fcHV0X3VzZXIoaSwgJmNydDMydS0+b3V0cHV0ZGF0YWxlbmd0aCkpCi0JCQlyZXQgPSAtRUZBVUxUOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBsb25nCi16OTBjcnlwdF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBJQ0FaOTBTVEFUVVM6Ci0JY2FzZSBaOTBRVUlFU0NFOgotCWNhc2UgWjkwU1RBVF9UT1RBTENPVU5UOgotCWNhc2UgWjkwU1RBVF9QQ0lDQUNPVU5UOgotCWNhc2UgWjkwU1RBVF9QQ0lDQ0NPVU5UOgotCWNhc2UgWjkwU1RBVF9QQ0lYQ0NDT1VOVDoKLQljYXNlIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UOgotCWNhc2UgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQ6Ci0JY2FzZSBaOTBTVEFUX0NFWDJDQ09VTlQ6Ci0JY2FzZSBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UOgotCWNhc2UgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVDoKLQljYXNlIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UOgotCWNhc2UgWjkwU1RBVF9ET01BSU5fSU5ERVg6Ci0JY2FzZSBaOTBTVEFUX1NUQVRVU19NQVNLOgotCWNhc2UgWjkwU1RBVF9RREVQVEhfTUFTSzoKLQljYXNlIFo5MFNUQVRfUEVSREVWX1JFUUNOVDoKLQkJcmV0dXJuIHo5MGNyeXB0X3VubG9ja2VkX2lvY3RsKGZpbHAsIGNtZCwgYXJnKTsKLQljYXNlIElDQVJTQU1PREVYUE86Ci0JCXJldHVybiB0cmFuc19tb2RleHBvMzIoZmlscCwgY21kLCBhcmcpOwotCWNhc2UgSUNBUlNBQ1JUOgotCQlyZXR1cm4gdHJhbnNfbW9kZXhwb19jcnQzMihmaWxwLCBjbWQsIGFyZyk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLSAgCX0KLX0KLSNlbmRpZgotCi0vKioKLSAqIFRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZS4KLSAqLwotc3RhdGljIGludCBfX2luaXQKLXo5MGNyeXB0X2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JaW50IHJlc3VsdCwgbnJlc3VsdDsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudHJ5OwotCi0JUERFQlVHKCJQSUQgJWRcbiIsIFBJRCgpKTsKLQotCWlmICgoZG9tYWluIDwgLTEpIHx8IChkb21haW4gPiAxNSkpIHsKLQkJUFJJTlRLVygiSW52YWxpZCBwYXJhbTogZG9tYWluID0gJWQuICBOb3QgbG9hZGluZy5cbiIsIGRvbWFpbik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIFJlZ2lzdGVyIGFzIG1pc2MgZGV2aWNlIHdpdGggZ2l2ZW4gbWlub3IgKG9yIGdldCBhIGR5bmFtaWMgb25lKS4gKi8KLQlyZXN1bHQgPSBtaXNjX3JlZ2lzdGVyKCZ6OTBjcnlwdF9taXNjX2RldmljZSk7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJUFJJTlRLVyhLRVJOX0VSUiAibWlzY19yZWdpc3RlciAobWlub3IgJWQpIGZhaWxlZCB3aXRoICVkXG4iLAotCQkJejkwY3J5cHRfbWlzY19kZXZpY2UubWlub3IsIHJlc3VsdCk7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JUERFQlVHKCJSZWdpc3RlcmVkICIgREVWX05BTUUgIiB3aXRoIHJlc3VsdCAlZFxuIiwgcmVzdWx0KTsKLQotCXJlc3VsdCA9IGNyZWF0ZV96OTBjcnlwdCgmZG9tYWluKTsKLQlpZiAocmVzdWx0ICE9IDApIHsKLQkJUFJJTlRLVygiY3JlYXRlX3o5MGNyeXB0IChkb21haW4gaW5kZXggJWQpIGZhaWxlZCB3aXRoICVkLlxuIiwKLQkJCWRvbWFpbiwgcmVzdWx0KTsKLQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJZ290byBpbml0X21vZHVsZV9jbGVhbnVwOwotCX0KLQotCWlmIChyZXN1bHQgPT0gMCkgewotCQlQUklOVEtOKCJWZXJzaW9uICVkLiVkLiVkIGxvYWRlZCwgYnVpbHQgb24gJXMgJXNcbiIsCi0JCQl6OTBjcnlwdF9WRVJTSU9OLCB6OTBjcnlwdF9SRUxFQVNFLCB6OTBjcnlwdF9WQVJJQU5ULAotCQkJX19EQVRFX18sIF9fVElNRV9fKTsKLQkJUERFQlVHKCJjcmVhdGVfejkwY3J5cHQgKGRvbWFpbiBpbmRleCAlZCkgc3VjY2Vzc2Z1bC5cbiIsCi0JCSAgICAgICBkb21haW4pOwotCX0gZWxzZQotCQlQUklOVEsoIk5vIGRldmljZXMgYXQgc3RhcnR1cFxuIik7Ci0KLQkvKiBJbml0aWFsaXplIGdsb2JhbHMuICovCi0Jc3Bpbl9sb2NrX2luaXQoJnF1ZXVlc3BpbmxvY2spOwotCi0JSU5JVF9MSVNUX0hFQUQoJnBlbmRpbmdfbGlzdCk7Ci0JcGVuZGluZ3FfY291bnQgPSAwOwotCi0JSU5JVF9MSVNUX0hFQUQoJnJlcXVlc3RfbGlzdCk7Ci0JcmVxdWVzdHFfY291bnQgPSAwOwotCi0JcXVpZXNjZV96OTBjcnlwdCA9IDA7Ci0KLQlhdG9taWNfc2V0KCZ0b3RhbF9vcGVuLCAwKTsKLQlhdG9taWNfc2V0KCZ6OTBjcnlwdF9zdGVwLCAwKTsKLQotCS8qIFNldCB1cCB0aGUgY2xlYW51cCB0YXNrLiAqLwotCWluaXRfdGltZXIoJmNsZWFudXBfdGltZXIpOwotCWNsZWFudXBfdGltZXIuZnVuY3Rpb24gPSB6OTBjcnlwdF9jbGVhbnVwX3Rhc2s7Ci0JY2xlYW51cF90aW1lci5kYXRhID0gMDsKLQljbGVhbnVwX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKENMRUFOVVBUSU1FICogSFopOwotCWFkZF90aW1lcigmY2xlYW51cF90aW1lcik7Ci0KLQkvKiBTZXQgdXAgdGhlIHByb2MgZmlsZSBzeXN0ZW0gKi8KLQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkcml2ZXIvejkwY3J5cHQiLCAwNjQ0LCAwKTsKLQlpZiAoZW50cnkpIHsKLQkJZW50cnktPm5saW5rID0gMTsKLQkJZW50cnktPmRhdGEgPSAwOwotCQllbnRyeS0+cmVhZF9wcm9jID0gejkwY3J5cHRfc3RhdHVzOwotCQllbnRyeS0+d3JpdGVfcHJvYyA9IHo5MGNyeXB0X3N0YXR1c193cml0ZTsKLQl9Ci0JZWxzZQotCQlQUklOVEsoIkNvdWxkbid0IGNyZWF0ZSB6OTBjcnlwdCBwcm9jIGVudHJ5XG4iKTsKLQl6OTBjcnlwdF9lbnRyeSA9IGVudHJ5OwotCi0JLyogU2V0IHVwIHRoZSBjb25maWd1cmF0aW9uIHRhc2suICovCi0JaW5pdF90aW1lcigmY29uZmlnX3RpbWVyKTsKLQljb25maWdfdGltZXIuZnVuY3Rpb24gPSB6OTBjcnlwdF9jb25maWdfdGFzazsKLQljb25maWdfdGltZXIuZGF0YSA9IDA7Ci0JY29uZmlnX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKElOSVRJQUxfQ09ORklHVElNRSAqIEhaKTsKLQlhZGRfdGltZXIoJmNvbmZpZ190aW1lcik7Ci0KLQkvKiBTZXQgdXAgdGhlIHJlYWRlciB0YXNrICovCi0JdGFza2xldF9pbml0KCZyZWFkZXJfdGFza2xldCwgejkwY3J5cHRfcmVhZGVyX3Rhc2ssIDApOwotCWluaXRfdGltZXIoJnJlYWRlcl90aW1lcik7Ci0JcmVhZGVyX3RpbWVyLmZ1bmN0aW9uID0gejkwY3J5cHRfc2NoZWR1bGVfcmVhZGVyX3Rhc2s7Ci0JcmVhZGVyX3RpbWVyLmRhdGEgPSAwOwotCXJlYWRlcl90aW1lci5leHBpcmVzID0gamlmZmllcyArIChSRUFERVJUSU1FICogSFogLyAxMDAwKTsKLQlhZGRfdGltZXIoJnJlYWRlcl90aW1lcik7Ci0KLQlyZXR1cm4gMDsgLy8gc3VjY2VzcwotCi1pbml0X21vZHVsZV9jbGVhbnVwOgotCWlmICgobnJlc3VsdCA9IG1pc2NfZGVyZWdpc3RlcigmejkwY3J5cHRfbWlzY19kZXZpY2UpKSkKLQkJUFJJTlRLKCJtaXNjX2RlcmVnaXN0ZXIgZmFpbGVkIHdpdGggJWQuXG4iLCBucmVzdWx0KTsKLQllbHNlCi0JCVBERUJVRygibWlzY19kZXJlZ2lzdGVyIHN1Y2Nlc3NmdWwuXG4iKTsKLQotCXJldHVybiByZXN1bHQ7IC8vIGZhaWx1cmUKLX0KLQotLyoqCi0gKiBUaGUgbW9kdWxlIHRlcm1pbmF0aW9uIGNvZGUKLSAqLwotc3RhdGljIHZvaWQgX19leGl0Ci16OTBjcnlwdF9jbGVhbnVwX21vZHVsZSh2b2lkKQotewotCWludCBucmVzdWx0OwotCi0JUERFQlVHKCJQSUQgJWRcbiIsIFBJRCgpKTsKLQotCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvejkwY3J5cHQiLCAwKTsKLQotCWlmICgobnJlc3VsdCA9IG1pc2NfZGVyZWdpc3RlcigmejkwY3J5cHRfbWlzY19kZXZpY2UpKSkKLQkJUFJJTlRLKCJtaXNjX2RlcmVnaXN0ZXIgZmFpbGVkIHdpdGggJWQuXG4iLCBucmVzdWx0KTsKLQllbHNlCi0JCVBERUJVRygibWlzY19kZXJlZ2lzdGVyIHN1Y2Nlc3NmdWwuXG4iKTsKLQotCS8qIFJlbW92ZSB0aGUgdGFza3MgKi8KLQl0YXNrbGV0X2tpbGwoJnJlYWRlcl90YXNrbGV0KTsKLQlkZWxfdGltZXIoJnJlYWRlcl90aW1lcik7Ci0JZGVsX3RpbWVyKCZjb25maWdfdGltZXIpOwotCWRlbF90aW1lcigmY2xlYW51cF90aW1lcik7Ci0KLQlkZXN0cm95X3o5MGNyeXB0KCk7Ci0KLQlQUklOVEtOKCJVbmxvYWRlZC5cbiIpOwotfQotCi0vKioKLSAqIEZ1bmN0aW9ucyBydW5uaW5nIHVuZGVyIGEgcHJvY2VzcyBpZAotICoKLSAqIFRoZSBJL08gZnVuY3Rpb25zOgotICogICAgIHo5MGNyeXB0X29wZW4KLSAqICAgICB6OTBjcnlwdF9yZWxlYXNlCi0gKiAgICAgejkwY3J5cHRfcmVhZAotICogICAgIHo5MGNyeXB0X3dyaXRlCi0gKiAgICAgejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwKLSAqICAgICB6OTBjcnlwdF9zdGF0dXMKLSAqICAgICB6OTBjcnlwdF9zdGF0dXNfd3JpdGUKLSAqCSBkaXNhYmxlX2NhcmQKLSAqCSBlbmFibGVfY2FyZAotICoKLSAqIEhlbHBlciBmdW5jdGlvbnM6Ci0gKiAgICAgejkwY3J5cHRfcnNhCi0gKgkgejkwY3J5cHRfcHJlcGFyZQotICoJIHo5MGNyeXB0X3NlbmQKLSAqCSB6OTBjcnlwdF9wcm9jZXNzX3Jlc3VsdHMKLSAqCi0gKi8KLXN0YXRpYyBpbnQKLXo5MGNyeXB0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHByaXZfZGF0YSAqcHJpdmF0ZV9kYXRhX3A7Ci0KLQlpZiAocXVpZXNjZV96OTBjcnlwdCkKLQkJcmV0dXJuIC1FUVVJRVNDRTsKLQotCXByaXZhdGVfZGF0YV9wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHByaXZfZGF0YSksIEdGUF9LRVJORUwpOwotCWlmICghcHJpdmF0ZV9kYXRhX3ApIHsKLQkJUFJJTlRLKCJNZW1vcnkgYWxsb2NhdGUgZmFpbGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcHJpdmF0ZV9kYXRhX3AtPnN0YXR1cyA9IFNUQVRfT1BFTjsKLQlwcml2YXRlX2RhdGFfcC0+b3BlbmVyX3BpZCA9IFBJRCgpOwotCWZpbHAtPnByaXZhdGVfZGF0YSA9IHByaXZhdGVfZGF0YV9wOwotCWF0b21pY19pbmMoJnRvdGFsX29wZW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXo5MGNyeXB0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHByaXZfZGF0YSAqcHJpdmF0ZV9kYXRhX3AgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0KLQlQREVCVUcoIlBJRCAlZCAoZmlscCAlcClcbiIsIFBJRCgpLCBmaWxwKTsKLQotCXByaXZhdGVfZGF0YV9wLT5zdGF0dXMgPSBTVEFUX0NMT1NFRDsKLQltZW1zZXQocHJpdmF0ZV9kYXRhX3AsIDAsIHNpemVvZihzdHJ1Y3QgcHJpdl9kYXRhKSk7Ci0Ja2ZyZWUocHJpdmF0ZV9kYXRhX3ApOwotCWF0b21pY19kZWMoJnRvdGFsX29wZW4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiB0aGVyZSBhcmUgdHdvIHJlYWQgZnVuY3Rpb25zLCBvZiB3aGljaCBjb21waWxlIG9wdGlvbnMgd2lsbCBjaG9vc2Ugb25lCi0gKiB3aXRob3V0IFVTRV9HRVRfUkFORE9NX0JZVEVTCi0gKiAgID0+IHJlYWQoKSBhbHdheXMgcmV0dXJucyAtRVBFUk07Ci0gKiBvdGhlcndpc2UKLSAqICAgPT4gcmVhZCgpIHVzZXMgZ2V0X3JhbmRvbV9ieXRlcygpIGtlcm5lbCBmdW5jdGlvbgotICovCi0jaWZuZGVmIFVTRV9HRVRfUkFORE9NX0JZVEVTCi0vKioKLSAqIHo5MGNyeXB0X3JlYWQgd2lsbCBub3QgYmUgc3VwcG9ydGVkIGJleW9uZCB6OTBjcnlwdCAxLjMuMQotICovCi1zdGF0aWMgc3NpemVfdAotejkwY3J5cHRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQotewotCVBERUJVRygiZmlscCAlcCAoUElEICVkKVxuIiwgZmlscCwgUElEKCkpOwotCXJldHVybiAtRVBFUk07Ci19Ci0jZWxzZSAvLyB3ZSB3YW50IHRvIHVzZSBnZXRfcmFuZG9tX2J5dGVzCi0vKioKLSAqIHJlYWQoKSBqdXN0IHJldHVybnMgYSBzdHJpbmcgb2YgcmFuZG9tIGJ5dGVzLiAgU2luY2Ugd2UgaGF2ZSBubyB3YXkKLSAqIHRvIGdlbmVyYXRlIHRoZXNlIGNyeXB0b2dyYXBoaWNhbGx5LCB3ZSBqdXN0IGV4ZWN1dGUgZ2V0X3JhbmRvbV9ieXRlcwotICogZm9yIHRoZSBsZW5ndGggc3BlY2lmaWVkLgotICovCi0jaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+Ci1zdGF0aWMgc3NpemVfdAotejkwY3J5cHRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQotewotCXVuc2lnbmVkIGNoYXIgKnRlbXBfYnVmZjsKLQotCVBERUJVRygiZmlscCAlcCAoUElEICVkKVxuIiwgZmlscCwgUElEKCkpOwotCi0JaWYgKHF1aWVzY2VfejkwY3J5cHQpCi0JCXJldHVybiAtRVFVSUVTQ0U7Ci0JaWYgKGNvdW50IDwgMCkgewotCQlQUklOVEsoIlJlcXVlc3RlZCByYW5kb20gYnl0ZSBjb3VudCBuZWdhdGl2ZTogJWxkXG4iLCBjb3VudCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoY291bnQgPiBSRVNQQlVGRlNJWkUpIHsKLQkJUERFQlVHKCJjb3VudFslZF0gPiBSRVNQQlVGRlNJWkUiLCBjb3VudCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAoY291bnQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JdGVtcF9idWZmID0ga21hbGxvYyhSRVNQQlVGRlNJWkUsIEdGUF9LRVJORUwpOwotCWlmICghdGVtcF9idWZmKSB7Ci0JCVBSSU5USygiTWVtb3J5IGFsbG9jYXRlIGZhaWxlZFxuIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlnZXRfcmFuZG9tX2J5dGVzKHRlbXBfYnVmZiwgY291bnQpOwotCi0JaWYgKGNvcHlfdG9fdXNlcihidWYsIHRlbXBfYnVmZiwgY291bnQpICE9IDApIHsKLQkJa2ZyZWUodGVtcF9idWZmKTsKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQotCWtmcmVlKHRlbXBfYnVmZik7Ci0JcmV0dXJuIGNvdW50OwotfQotI2VuZGlmCi0KLS8qKgotICogV3JpdGUgaXMgaXMgbm90IGFsbG93ZWQKLSAqLwotc3RhdGljIHNzaXplX3QKLXo5MGNyeXB0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCi17Ci0JUERFQlVHKCJmaWxwICVwIChQSUQgJWQpXG4iLCBmaWxwLCBQSUQoKSk7Ci0JcmV0dXJuIC1FUEVSTTsKLX0KLQotLyoqCi0gKiBOZXcgc3RhdHVzIGZ1bmN0aW9ucwotICovCi1zdGF0aWMgaW5saW5lIGludAotZ2V0X3N0YXR1c190b3RhbGNvdW50KHZvaWQpCi17Ci0JcmV0dXJuIHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5oZHdhcmVfbWFzay5zdF9jb3VudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWdldF9zdGF0dXNfUENJQ0Fjb3VudCh2b2lkKQotewotCXJldHVybiB6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW1BDSUNBXS5zdF9jb3VudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWdldF9zdGF0dXNfUENJQ0Njb3VudCh2b2lkKQotewotCXJldHVybiB6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW1BDSUNDXS5zdF9jb3VudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWdldF9zdGF0dXNfUENJWENDY291bnQodm9pZCkKLXsKLQlyZXR1cm4gejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tQQ0lYQ0NfTUNMMl0uc3RfY291bnQgKwotCSAgICAgICB6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW1BDSVhDQ19NQ0wzXS5zdF9jb3VudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWdldF9zdGF0dXNfUENJWENDTUNMMmNvdW50KHZvaWQpCi17Ci0JcmV0dXJuIHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbUENJWENDX01DTDJdLnN0X2NvdW50OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZ2V0X3N0YXR1c19QQ0lYQ0NNQ0wzY291bnQodm9pZCkKLXsKLQlyZXR1cm4gejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tQQ0lYQ0NfTUNMM10uc3RfY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1nZXRfc3RhdHVzX0NFWDJDY291bnQodm9pZCkKLXsKLQlyZXR1cm4gejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tDRVgyQ10uc3RfY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1nZXRfc3RhdHVzX0NFWDJBY291bnQodm9pZCkKLXsKLQlyZXR1cm4gejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tDRVgyQV0uc3RfY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1nZXRfc3RhdHVzX3JlcXVlc3RxX2NvdW50KHZvaWQpCi17Ci0JcmV0dXJuIHJlcXVlc3RxX2NvdW50OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZ2V0X3N0YXR1c19wZW5kaW5ncV9jb3VudCh2b2lkKQotewotCXJldHVybiBwZW5kaW5ncV9jb3VudDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWdldF9zdGF0dXNfdG90YWxvcGVuX2NvdW50KHZvaWQpCi17Ci0JcmV0dXJuIGF0b21pY19yZWFkKCZ0b3RhbF9vcGVuKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWdldF9zdGF0dXNfZG9tYWluX2luZGV4KHZvaWQpCi17Ci0JcmV0dXJuIHo5MGNyeXB0LmNkeDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKLWdldF9zdGF0dXNfc3RhdHVzX21hc2sodW5zaWduZWQgY2hhciBzdGF0dXNbWjkwQ1JZUFRfTlVNX0FQU10pCi17Ci0JaW50IGksIGl4OwotCi0JbWVtY3B5KHN0YXR1cywgejkwY3J5cHQuaGR3YXJlX2luZm8tPmRldmljZV90eXBlX2FycmF5LAotCSAgICAgICBaOTBDUllQVF9OVU1fQVBTKTsKLQotCWZvciAoaSA9IDA7IGkgPCBnZXRfc3RhdHVzX3RvdGFsY291bnQoKTsgaSsrKSB7Ci0JCWl4ID0gU0hSVDJMT05HKGkpOwotCQlpZiAoTE9ORzJERVZQVFIoaXgpLT51c2VyX2Rpc2FibGVkKQotCQkJc3RhdHVzW2l4XSA9IDB4MGQ7Ci0JfQotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICoKLWdldF9zdGF0dXNfcWRlcHRoX21hc2sodW5zaWduZWQgY2hhciBxZGVwdGhbWjkwQ1JZUFRfTlVNX0FQU10pCi17Ci0JaW50IGksIGl4OwotCi0JbWVtc2V0KHFkZXB0aCwgMCwgWjkwQ1JZUFRfTlVNX0FQUyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZ2V0X3N0YXR1c190b3RhbGNvdW50KCk7IGkrKykgewotCQlpeCA9IFNIUlQyTE9ORyhpKTsKLQkJcWRlcHRoW2l4XSA9IExPTkcyREVWUFRSKGl4KS0+ZGV2X2NhbGxlcl9jb3VudDsKLQl9Ci0KLQlyZXR1cm4gcWRlcHRoOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCAqCi1nZXRfc3RhdHVzX3BlcmRldmljZV9yZXFjbnQodW5zaWduZWQgaW50IHJlcWNudFtaOTBDUllQVF9OVU1fQVBTXSkKLXsKLQlpbnQgaSwgaXg7Ci0KLQltZW1zZXQocmVxY250LCAwLCBaOTBDUllQVF9OVU1fQVBTICogc2l6ZW9mKGludCkpOwotCi0JZm9yIChpID0gMDsgaSA8IGdldF9zdGF0dXNfdG90YWxjb3VudCgpOyBpKyspIHsKLQkJaXggPSBTSFJUMkxPTkcoaSk7Ci0JCXJlcWNudFtpeF0gPSBMT05HMkRFVlBUUihpeCktPmRldl90b3RhbF9yZXFfY250OwotCX0KLQotCXJldHVybiByZXFjbnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaW5pdF93b3JrX2VsZW1lbnQoc3RydWN0IHdvcmtfZWxlbWVudCAqd2VfcCwKLQkJICBzdHJ1Y3QgcHJpdl9kYXRhICpwcml2X2RhdGEsIHBpZF90IHBpZCkKLXsKLQlpbnQgc3RlcDsKLQotCXdlX3AtPnJlcXVlc3RwdHIgPSAodW5zaWduZWQgY2hhciAqKXdlX3AgKyBzaXplb2Yoc3RydWN0IHdvcmtfZWxlbWVudCk7Ci0JLyogQ29tZSB1cCB3aXRoIGEgdW5pcXVlIGlkIGZvciB0aGlzIGNhbGxlci4gKi8KLQlzdGVwID0gYXRvbWljX2luY19yZXR1cm4oJno5MGNyeXB0X3N0ZXApOwotCW1lbWNweSh3ZV9wLT5jYWxsZXJfaWQrMCwgKHZvaWQgKikgJnBpZCwgc2l6ZW9mKHBpZCkpOwotCW1lbWNweSh3ZV9wLT5jYWxsZXJfaWQrNCwgKHZvaWQgKikgJnN0ZXAsIHNpemVvZihzdGVwKSk7Ci0Jd2VfcC0+cGlkID0gcGlkOwotCXdlX3AtPnByaXZfZGF0YSA9IHByaXZfZGF0YTsKLQl3ZV9wLT5zdGF0dXNbMF0gPSBTVEFUX0RFRkFVTFQ7Ci0Jd2VfcC0+YXVkaXRbMF0gPSAweDAwOwotCXdlX3AtPmF1ZGl0WzFdID0gMHgwMDsKLQl3ZV9wLT5hdWRpdFsyXSA9IDB4MDA7Ci0Jd2VfcC0+cmVzcF9idWZmX3NpemUgPSAwOwotCXdlX3AtPnJldGNvZGUgPSAwOwotCXdlX3AtPmRldmluZGV4ID0gLTE7Ci0Jd2VfcC0+ZGV2dHlwZSA9IC0xOwotCWF0b21pY19zZXQoJndlX3AtPmFsYXJtcnVuZywgMCk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmd2VfcC0+d2FpdHEpOwotCUlOSVRfTElTVF9IRUFEKCYod2VfcC0+bGlzdGUpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQKLWFsbG9jYXRlX3dvcmtfZWxlbWVudChzdHJ1Y3Qgd29ya19lbGVtZW50ICoqd2VfcHAsCi0JCSAgICAgIHN0cnVjdCBwcml2X2RhdGEgKnByaXZfZGF0YV9wLCBwaWRfdCBwaWQpCi17Ci0Jc3RydWN0IHdvcmtfZWxlbWVudCAqd2VfcDsKLQotCXdlX3AgPSAoc3RydWN0IHdvcmtfZWxlbWVudCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3ZV9wKQotCQlyZXR1cm4gLUVOT01FTTsKLQlpbml0X3dvcmtfZWxlbWVudCh3ZV9wLCBwcml2X2RhdGFfcCwgcGlkKTsKLQkqd2VfcHAgPSB3ZV9wOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXJlbW92ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2aWNlX3ApCi17Ci0JaWYgKCFkZXZpY2VfcCB8fCAoZGV2aWNlX3AtPmRpc2FibGVkICE9IDApKQotCQlyZXR1cm47Ci0JZGV2aWNlX3AtPmRpc2FibGVkID0gMTsKLQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW2RldmljZV9wLT5kZXZfdHlwZV0uZGlzYWJsZWRfY291bnQrKzsKLQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2suZGlzYWJsZWRfY291bnQrKzsKLX0KLQotLyoqCi0gKiBCaXRsZW5ndGggbGltaXRzIGZvciBlYWNoIGNhcmQKLSAqCi0gKiBUaGVyZSBhcmUgbmV3IE1DTHMgd2hpY2ggYWxsb3cgbW9yZSBiaXRsZW5ndGhzLiBTZWUgdGhlIHRhYmxlIGZvciBkZXRhaWxzLgotICogVGhlIE1DTCBtdXN0IGJlIGFwcGxpZWQgYW5kIHRoZSBuZXdlciBiaXRsZW5ndGhzIGVuYWJsZWQgZm9yIHRoZXNlIHRvIHdvcmsuCi0gKgotICogQ2FyZCBUeXBlICAgIE9sZCBsaW1pdCAgICBOZXcgbGltaXQKLSAqIFBDSUNBICAgICAgICAgID8/LTIwNDggICAgIHNhbWUgKHRoZSBsb3dlciBsaW1pdCBpcyBsZXNzIHRoYW4gMTI4IGJpdC4uLikKLSAqIFBDSUNDICAgICAgICAgNTEyLTEwMjQgICAgIDUxMi0yMDQ4Ci0gKiBQQ0lYQ0NfTUNMMiAgIDUxMi0yMDQ4ICAgICAtLS0tLSAoYXBwbHlpbmcgYW55IEdBIExJQyB3aWxsIG1ha2UgYW4gTUNMMyBjYXJkKQotICogUENJWENDX01DTDMgICAtLS0tLSAgICAgICAgMTI4LTIwNDgKLSAqIENFWDJDICAgICAgICAgNTEyLTIwNDggICAgIDEyOC0yMDQ4Ci0gKiBDRVgyQSAgICAgICAgICA/Py0yMDQ4ICAgICBzYW1lICh0aGUgbG93ZXIgbGltaXQgaXMgbGVzcyB0aGFuIDEyOCBiaXQuLi4pCi0gKgotICogZXh0X2JpdGxlbnMgKGV4dGVuZGVkIGJpdGxlbmd0aHMpIGlzIGEgZ2xvYmFsLCBzaW5jZSB5b3Ugc2hvdWxkIG5vdCBhcHBseSBhbgotICogTUNMIHRvIGp1c3Qgb25lIGNhcmQgaW4gYSBtYWNoaW5lLiBXZSBhc3N1bWUsIGF0IGZpcnN0LCB0aGF0IGFsbCBjYXJkcyBoYXZlCi0gKiB0aGVzZSBjYXBhYmlsaXRpZXMuCi0gKi8KLWludCBleHRfYml0bGVucyA9IDE7IC8vIFRoaXMgaXMgZ2xvYmFsCi0jZGVmaW5lIFBDSVhDQ19NSU5fTU9EX1NJWkUJIDE2CS8vICAxMjggYml0cwotI2RlZmluZSBPTERfUENJWENDX01JTl9NT0RfU0laRQkgNjQJLy8gIDUxMiBiaXRzCi0jZGVmaW5lIFBDSUNDX01JTl9NT0RfU0laRQkgNjQJLy8gIDUxMiBiaXRzCi0jZGVmaW5lIE9MRF9QQ0lDQ19NQVhfTU9EX1NJWkUJMTI4CS8vIDEwMjQgYml0cwotI2RlZmluZSBNQVhfTU9EX1NJWkUJCTI1NgkvLyAyMDQ4IGJpdHMKLQotc3RhdGljIGlubGluZSBpbnQKLXNlbGVjdF9kZXZpY2VfdHlwZShpbnQgKmRldl90eXBlX3AsIGludCBieXRlbGVuZ3RoKQotewotCXN0YXRpYyBpbnQgY291bnQgPSAwOwotCWludCBQQ0lDQV9hdmFpbCwgUENJWENDX01DTDNfYXZhaWwsIENFWDJDX2F2YWlsLCBDRVgyQV9hdmFpbCwKLQkgICAgaW5kZXhfdG9fdXNlOwotCXN0cnVjdCBzdGF0dXMgKnN0YXQ7Ci0JaWYgKCgqZGV2X3R5cGVfcCAhPSBQQ0lDQykgJiYgKCpkZXZfdHlwZV9wICE9IFBDSUNBKSAmJgotCSAgICAoKmRldl90eXBlX3AgIT0gUENJWENDX01DTDIpICYmICgqZGV2X3R5cGVfcCAhPSBQQ0lYQ0NfTUNMMykgJiYKLQkgICAgKCpkZXZfdHlwZV9wICE9IENFWDJDKSAmJiAoKmRldl90eXBlX3AgIT0gQ0VYMkEpICYmCi0JICAgICgqZGV2X3R5cGVfcCAhPSBBTllERVYpKQotCQlyZXR1cm4gLTE7Ci0JaWYgKCpkZXZfdHlwZV9wICE9IEFOWURFVikgewotCQlzdGF0ID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbKmRldl90eXBlX3BdOwotCQlpZiAoc3RhdC0+c3RfY291bnQgPgotCQkgICAgKHN0YXQtPmRpc2FibGVkX2NvdW50ICsgc3RhdC0+dXNlcl9kaXNhYmxlZF9jb3VudCkpCi0JCQlyZXR1cm4gMDsKLQkJcmV0dXJuIC0xOwotCX0KLQotCS8qKgotCSAqIEFzc3VtcHRpb246IFBDSUNBLCBQQ0lYQ0NfTUNMMywgQ0VYMkMsIGFuZCBDRVgyQSBhcmUgYWxsIHNpbWlsYXIgaW4KLQkgKiBzcGVlZC4KLQkgKgotCSAqIFBDSUNBIGFuZCBDRVgyQSBkbyBOT1QgY28tZXhpc3QsIHNvIGl0IHdvdWxkIGJlIGVpdGhlciBvbmUgb3IgdGhlCi0JICogb3RoZXIgcHJlc2VudC4KLQkgKi8KLQlzdGF0ID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbUENJQ0FdOwotCVBDSUNBX2F2YWlsID0gc3RhdC0+c3RfY291bnQgLQotCQkJKHN0YXQtPmRpc2FibGVkX2NvdW50ICsgc3RhdC0+dXNlcl9kaXNhYmxlZF9jb3VudCk7Ci0Jc3RhdCA9ICZ6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW1BDSVhDQ19NQ0wzXTsKLQlQQ0lYQ0NfTUNMM19hdmFpbCA9IHN0YXQtPnN0X2NvdW50IC0KLQkJCShzdGF0LT5kaXNhYmxlZF9jb3VudCArIHN0YXQtPnVzZXJfZGlzYWJsZWRfY291bnQpOwotCXN0YXQgPSAmejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tDRVgyQ107Ci0JQ0VYMkNfYXZhaWwgPSBzdGF0LT5zdF9jb3VudCAtCi0JCQkoc3RhdC0+ZGlzYWJsZWRfY291bnQgKyBzdGF0LT51c2VyX2Rpc2FibGVkX2NvdW50KTsKLQlzdGF0ID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbQ0VYMkFdOwotCUNFWDJBX2F2YWlsID0gc3RhdC0+c3RfY291bnQgLQotCQkJKHN0YXQtPmRpc2FibGVkX2NvdW50ICsgc3RhdC0+dXNlcl9kaXNhYmxlZF9jb3VudCk7Ci0JaWYgKFBDSUNBX2F2YWlsIHx8IFBDSVhDQ19NQ0wzX2F2YWlsIHx8IENFWDJDX2F2YWlsIHx8IENFWDJBX2F2YWlsKSB7Ci0JCS8qKgotCQkgKiBiaXRsZW5ndGggaXMgYSBmYWN0b3IsIFBDSUNBIG9yIENFWDJBIGFyZSB0aGUgbW9zdCBjYXBhYmxlLAotCQkgKiBldmVuIHdpdGggdGhlIG5ldyBNQ0wgZm9yIFBDSVhDQy4KLQkJICovCi0JCWlmICgoYnl0ZWxlbmd0aCA8IFBDSVhDQ19NSU5fTU9EX1NJWkUpIHx8Ci0JCSAgICAoIWV4dF9iaXRsZW5zICYmIChieXRlbGVuZ3RoIDwgT0xEX1BDSVhDQ19NSU5fTU9EX1NJWkUpKSkgewotCQkJaWYgKFBDSUNBX2F2YWlsKSB7Ci0JCQkJKmRldl90eXBlX3AgPSBQQ0lDQTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmIChDRVgyQV9hdmFpbCkgewotCQkJCSpkZXZfdHlwZV9wID0gQ0VYMkE7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlyZXR1cm4gLTE7Ci0JCX0KLQotCQlpbmRleF90b191c2UgPSBjb3VudCAlIChQQ0lDQV9hdmFpbCArIFBDSVhDQ19NQ0wzX2F2YWlsICsKLQkJCQkJQ0VYMkNfYXZhaWwgKyBDRVgyQV9hdmFpbCk7Ci0JCWlmIChpbmRleF90b191c2UgPCBQQ0lDQV9hdmFpbCkKLQkJCSpkZXZfdHlwZV9wID0gUENJQ0E7Ci0JCWVsc2UgaWYgKGluZGV4X3RvX3VzZSA8IChQQ0lDQV9hdmFpbCArIFBDSVhDQ19NQ0wzX2F2YWlsKSkKLQkJCSpkZXZfdHlwZV9wID0gUENJWENDX01DTDM7Ci0JCWVsc2UgaWYgKGluZGV4X3RvX3VzZSA8IChQQ0lDQV9hdmFpbCArIFBDSVhDQ19NQ0wzX2F2YWlsICsKLQkJCQkJIENFWDJDX2F2YWlsKSkKLQkJCSpkZXZfdHlwZV9wID0gQ0VYMkM7Ci0JCWVsc2UKLQkJCSpkZXZfdHlwZV9wID0gQ0VYMkE7Ci0JCWNvdW50Kys7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIExlc3MgdGhhbiBPTERfUENJWENDX01JTl9NT0RfU0laRSBjYW5ub3QgZ28gdG8gYSBQQ0lYQ0NfTUNMMiAqLwotCWlmIChieXRlbGVuZ3RoIDwgT0xEX1BDSVhDQ19NSU5fTU9EX1NJWkUpCi0JCXJldHVybiAtMTsKLQlzdGF0ID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbUENJWENDX01DTDJdOwotCWlmIChzdGF0LT5zdF9jb3VudCA+Ci0JICAgIChzdGF0LT5kaXNhYmxlZF9jb3VudCArIHN0YXQtPnVzZXJfZGlzYWJsZWRfY291bnQpKSB7Ci0JCSpkZXZfdHlwZV9wID0gUENJWENDX01DTDI7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qKgotCSAqIExlc3MgdGhhbiBQQ0lDQ19NSU5fTU9EX1NJWkUgb3IgbW9yZSB0aGFuIE9MRF9QQ0lDQ19NQVhfTU9EX1NJWkUKLQkgKiAoaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgTUNMIGFwcGxpZWQgYW5kIHRoZSBuZXdlciBiaXRsZW5ndGhzIGVuYWJsZWQpCi0JICogY2Fubm90IGdvIHRvIGEgUENJQ0MKLQkgKi8KLQlpZiAoKGJ5dGVsZW5ndGggPCBQQ0lDQ19NSU5fTU9EX1NJWkUpIHx8Ci0JICAgICghZXh0X2JpdGxlbnMgJiYgKGJ5dGVsZW5ndGggPiBPTERfUENJQ0NfTUFYX01PRF9TSVpFKSkpIHsKLQkJcmV0dXJuIC0xOwotCX0KLQlzdGF0ID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbUENJQ0NdOwotCWlmIChzdGF0LT5zdF9jb3VudCA+Ci0JICAgIChzdGF0LT5kaXNhYmxlZF9jb3VudCArIHN0YXQtPnVzZXJfZGlzYWJsZWRfY291bnQpKSB7Ci0JCSpkZXZfdHlwZV9wID0gUENJQ0M7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAtMTsKLX0KLQotLyoqCi0gKiBUcnkgdGhlIHNlbGVjdGVkIG51bWJlciwgdGhlbiB0aGUgc2VsZWN0ZWQgdHlwZSAoY2FuIGJlIEFOWURFVikKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXNlbGVjdF9kZXZpY2UoaW50ICpkZXZfdHlwZV9wLCBpbnQgKmRldmljZV9ucl9wLCBpbnQgYnl0ZWxlbmd0aCkKLXsKLQlpbnQgaSwgaW5keCwgZGV2VHAsIGxvd19jb3VudCwgbG93X2luZHg7Ci0Jc3RydWN0IGRldmljZV94ICppbmRleF9wOwotCXN0cnVjdCBkZXZpY2UgKmRldl9wdHI7Ci0KLQlQREVCVUcoImRldmljZSB0eXBlID0gJWQsIGluZGV4ID0gJWRcbiIsICpkZXZfdHlwZV9wLCAqZGV2aWNlX25yX3ApOwotCWlmICgoKmRldmljZV9ucl9wID49IDApICYmICgqZGV2aWNlX25yX3AgPCBaOTBDUllQVF9OVU1fREVWUykpIHsKLQkJUERFQlVHKCJ0cnlpbmcgaW5kZXggPSAlZFxuIiwgKmRldmljZV9ucl9wKTsKLQkJZGV2X3B0ciA9IHo5MGNyeXB0LmRldmljZV9wWypkZXZpY2VfbnJfcF07Ci0KLQkJaWYgKGRldl9wdHIgJiYKLQkJICAgIChkZXZfcHRyLT5kZXZfc3RhdCAhPSBERVZfR09ORSkgJiYKLQkJICAgIChkZXZfcHRyLT5kaXNhYmxlZCA9PSAwKSAmJgotCQkgICAgKGRldl9wdHItPnVzZXJfZGlzYWJsZWQgPT0gMCkpIHsKLQkJCVBERUJVRygic2VsZWN0ZWQgYnkgbnVtYmVyLCBpbmRleCA9ICVkXG4iLAotCQkJICAgICAgICpkZXZpY2VfbnJfcCk7Ci0JCQkqZGV2X3R5cGVfcCA9IGRldl9wdHItPmRldl90eXBlOwotCQkJcmV0dXJuICpkZXZpY2VfbnJfcDsKLQkJfQotCX0KLQkqZGV2aWNlX25yX3AgPSAtMTsKLQlQREVCVUcoInRyeWluZyB0eXBlID0gJWRcbiIsICpkZXZfdHlwZV9wKTsKLQlkZXZUcCA9ICpkZXZfdHlwZV9wOwotCWlmIChzZWxlY3RfZGV2aWNlX3R5cGUoJmRldlRwLCBieXRlbGVuZ3RoKSA9PSAtMSkgewotCQlQREVCVUcoImZhaWxlZCB0byBzZWxlY3QgYnkgdHlwZVxuIik7Ci0JCXJldHVybiAtMTsKLQl9Ci0JUERFQlVHKCJzZWxlY3RlZCB0eXBlID0gJWRcbiIsIGRldlRwKTsKLQlpbmRleF9wID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX3hfYWRkcltkZXZUcF07Ci0JbG93X2NvdW50ID0gMHgwMDAwRkZGRjsKLQlsb3dfaW5keCA9IC0xOwotCWZvciAoaSA9IDA7IGkgPCB6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW2RldlRwXS5zdF9jb3VudDsgaSsrKSB7Ci0JCWluZHggPSBpbmRleF9wLT5kZXZpY2VfaW5kZXhbaV07Ci0JCWRldl9wdHIgPSB6OTBjcnlwdC5kZXZpY2VfcFtpbmR4XTsKLQkJaWYgKGRldl9wdHIgJiYKLQkJICAgIChkZXZfcHRyLT5kZXZfc3RhdCAhPSBERVZfR09ORSkgJiYKLQkJICAgIChkZXZfcHRyLT5kaXNhYmxlZCA9PSAwKSAmJgotCQkgICAgKGRldl9wdHItPnVzZXJfZGlzYWJsZWQgPT0gMCkgJiYKLQkJICAgIChkZXZUcCA9PSBkZXZfcHRyLT5kZXZfdHlwZSkgJiYKLQkJICAgIChsb3dfY291bnQgPiBkZXZfcHRyLT5kZXZfY2FsbGVyX2NvdW50KSkgewotCQkJbG93X2NvdW50ID0gZGV2X3B0ci0+ZGV2X2NhbGxlcl9jb3VudDsKLQkJCWxvd19pbmR4ID0gaW5keDsKLQkJfQotCX0KLQkqZGV2aWNlX25yX3AgPSBsb3dfaW5keDsKLQlyZXR1cm4gbG93X2luZHg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zZW5kX3RvX2NyeXB0b19kZXZpY2Uoc3RydWN0IHdvcmtfZWxlbWVudCAqd2VfcCkKLXsKLQlzdHJ1Y3QgY2FsbGVyICpjYWxsZXJfcDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZpY2VfcDsKLQlpbnQgZGV2X25yOwotCWludCBieXRlbGVuID0gKChzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICopd2VfcC0+YnVmZmVyKS0+aW5wdXRkYXRhbGVuZ3RoOwotCi0JaWYgKCF3ZV9wLT5yZXF1ZXN0cHRyKQotCQlyZXR1cm4gU0VOX0ZBVEFMX0VSUk9SOwotCWNhbGxlcl9wID0gKHN0cnVjdCBjYWxsZXIgKil3ZV9wLT5yZXF1ZXN0cHRyOwotCWRldl9uciA9IHdlX3AtPmRldmluZGV4OwotCWlmIChzZWxlY3RfZGV2aWNlKCZ3ZV9wLT5kZXZ0eXBlLCAmZGV2X25yLCBieXRlbGVuKSA9PSAtMSkgewotCQlpZiAoejkwY3J5cHQuaGR3YXJlX2luZm8tPmhkd2FyZV9tYXNrLnN0X2NvdW50ICE9IDApCi0JCQlyZXR1cm4gU0VOX1JFVFJZOwotCQllbHNlCi0JCQlyZXR1cm4gU0VOX05PVF9BVkFJTDsKLQl9Ci0Jd2VfcC0+ZGV2aW5kZXggPSBkZXZfbnI7Ci0JZGV2aWNlX3AgPSB6OTBjcnlwdC5kZXZpY2VfcFtkZXZfbnJdOwotCWlmICghZGV2aWNlX3ApCi0JCXJldHVybiBTRU5fTk9UX0FWQUlMOwotCWlmIChkZXZpY2VfcC0+ZGV2X3R5cGUgIT0gd2VfcC0+ZGV2dHlwZSkKLQkJcmV0dXJuIFNFTl9SRVRSWTsKLQlpZiAoZGV2aWNlX3AtPmRldl9jYWxsZXJfY291bnQgPj0gZGV2aWNlX3AtPmRldl9xX2RlcHRoKQotCQlyZXR1cm4gU0VOX1FVRVVFX0ZVTEw7Ci0JUERFQlVHKCJkZXZpY2UgbnVtYmVyIHByaW9yIHRvIHNlbmQ6ICVkXG4iLCBkZXZfbnIpOwotCXN3aXRjaCAoc2VuZF90b19BUChkZXZfbnIsIHo5MGNyeXB0LmNkeCwKLQkJCSAgIGNhbGxlcl9wLT5jYWxsZXJfZGV2X2RlcF9yZXFfbCwKLQkJCSAgIGNhbGxlcl9wLT5jYWxsZXJfZGV2X2RlcF9yZXFfcCkpIHsKLQljYXNlIERFVl9TRU5fRVhDRVBUSU9OOgotCQlQUklOVEtDKCJFeGNlcHRpb24gZHVyaW5nIHNlbmQgdG8gZGV2aWNlICVkXG4iLCBkZXZfbnIpOwotCQl6OTBjcnlwdC50ZXJtaW5hdGluZyA9IDE7Ci0JCXJldHVybiBTRU5fRkFUQUxfRVJST1I7Ci0JY2FzZSBERVZfR09ORToKLQkJUFJJTlRLKCJEZXZpY2UgJWQgbm90IGF2YWlsYWJsZVxuIiwgZGV2X25yKTsKLQkJcmVtb3ZlX2RldmljZShkZXZpY2VfcCk7Ci0JCXJldHVybiBTRU5fTk9UX0FWQUlMOwotCWNhc2UgREVWX0VNUFRZOgotCQlyZXR1cm4gU0VOX05PVF9BVkFJTDsKLQljYXNlIERFVl9OT19XT1JLOgotCQlyZXR1cm4gU0VOX0ZBVEFMX0VSUk9SOwotCWNhc2UgREVWX0JBRF9NRVNTQUdFOgotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JY2FzZSBERVZfUVVFVUVfRlVMTDoKLQkJcmV0dXJuIFNFTl9RVUVVRV9GVUxMOwotCWRlZmF1bHQ6Ci0JY2FzZSBERVZfT05MSU5FOgotCQlicmVhazsKLQl9Ci0JbGlzdF9hZGRfdGFpbCgmKGNhbGxlcl9wLT5jYWxsZXJfbGlzdGUpLCAmKGRldmljZV9wLT5kZXZfY2FsbGVyX2xpc3QpKTsKLQlkZXZpY2VfcC0+ZGV2X2NhbGxlcl9jb3VudCsrOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIFNlbmQgcHV0cyB0aGUgdXNlcidzIHdvcmsgb24gb25lIG9mIHR3byBxdWV1ZXM6Ci0gKiAgIHRoZSBwZW5kaW5nIHF1ZXVlIGlmIHRoZSBzZW5kIHdhcyBzdWNjZXNzZnVsCi0gKiAgIHRoZSByZXF1ZXN0IHF1ZXVlIGlmIHRoZSBzZW5kIGZhaWxlZCBiZWNhdXNlIGRldmljZSBmdWxsIG9yIGJ1c3kKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXo5MGNyeXB0X3NlbmQoc3RydWN0IHdvcmtfZWxlbWVudCAqd2VfcCwgY29uc3QgY2hhciAqYnVmKQotewotCWludCBydjsKLQotCVBERUJVRygiUElEICVkXG4iLCBQSUQoKSk7Ci0KLQlpZiAoQ0hLX1JEV1JNQVNLKHdlX3AtPnN0YXR1c1swXSkgIT0gU1RBVF9OT1dPUkspIHsKLQkJUERFQlVHKCJQSUQgJWQgdHJpZWQgdG8gc2VuZCBtb3JlIHdvcmsgYnV0IGhhcyBvdXRzdGFuZGluZyAiCi0JCSAgICAgICAid29yay5cbiIsIFBJRCgpKTsKLQkJcmV0dXJuIC1FV09SS1BFTkQ7Ci0JfQotCXdlX3AtPmRldmluZGV4ID0gLTE7IC8vIFJlc2V0IGRldmljZSBudW1iZXIKLQlzcGluX2xvY2tfaXJxKCZxdWV1ZXNwaW5sb2NrKTsKLQlydiA9IHNlbmRfdG9fY3J5cHRvX2RldmljZSh3ZV9wKTsKLQlzd2l0Y2ggKHJ2KSB7Ci0JY2FzZSAwOgotCQl3ZV9wLT5yZXF1ZXN0c2VudCA9IGppZmZpZXM7Ci0JCXdlX3AtPmF1ZGl0WzBdIHw9IEZQX1NFTlQ7Ci0JCWxpc3RfYWRkX3RhaWwoJndlX3AtPmxpc3RlLCAmcGVuZGluZ19saXN0KTsKLQkJKytwZW5kaW5ncV9jb3VudDsKLQkJd2VfcC0+YXVkaXRbMF0gfD0gRlBfUEVORElORzsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fQlVTWToKLQljYXNlIFNFTl9RVUVVRV9GVUxMOgotCQlydiA9IDA7Ci0JCXdlX3AtPmRldmluZGV4ID0gLTE7IC8vIGFueSBkZXZpY2Ugd2lsbCBkbwotCQl3ZV9wLT5yZXF1ZXN0c2VudCA9IGppZmZpZXM7Ci0JCWxpc3RfYWRkX3RhaWwoJndlX3AtPmxpc3RlLCAmcmVxdWVzdF9saXN0KTsKLQkJKytyZXF1ZXN0cV9jb3VudDsKLQkJd2VfcC0+YXVkaXRbMF0gfD0gRlBfUkVRVUVTVDsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fUkVUUlk6Ci0JCXJ2ID0gLUVSRVNUQVJUU1lTOwotCQlicmVhazsKLQljYXNlIFNFTl9OT1RfQVZBSUw6Ci0JCVBSSU5USygiKioqIE5vIGRldmljZXMgYXZhaWxhYmxlLlxuIik7Ci0JCXJ2ID0gd2VfcC0+cmV0Y29kZSA9IC1FTk9ERVY7Ci0JCXdlX3AtPnN0YXR1c1swXSB8PSBTVEFUX0ZBSUxFRDsKLQkJYnJlYWs7Ci0JY2FzZSBSRUNfT1BFUkFORF9JTlY6Ci0JY2FzZSBSRUNfT1BFUkFORF9TSVpFOgotCWNhc2UgUkVDX0VWRU5fTU9EOgotCWNhc2UgUkVDX0lOVkFMSURfUEFEOgotCQlydiA9IHdlX3AtPnJldGNvZGUgPSAtRUlOVkFMOwotCQl3ZV9wLT5zdGF0dXNbMF0gfD0gU1RBVF9GQUlMRUQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXdlX3AtPnJldGNvZGUgPSBydjsKLQkJd2VfcC0+c3RhdHVzWzBdIHw9IFNUQVRfRkFJTEVEOwotCQlicmVhazsKLQl9Ci0JaWYgKHJ2ICE9IC1FUkVTVEFSVFNZUykKLQkJU0VUX1JEV1JNQVNLKHdlX3AtPnN0YXR1c1swXSwgU1RBVF9XUklUVEVOKTsKLQlzcGluX3VubG9ja19pcnEoJnF1ZXVlc3BpbmxvY2spOwotCWlmIChydiA9PSAwKQotCQl0YXNrbGV0X3NjaGVkdWxlKCZyZWFkZXJfdGFza2xldCk7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKioKLSAqIHByb2Nlc3NfcmVzdWx0cyBjb3BpZXMgdGhlIHVzZXIncyB3b3JrIGZyb20ga2VybmVsIHNwYWNlLgotICovCi1zdGF0aWMgaW5saW5lIGludAotejkwY3J5cHRfcHJvY2Vzc19yZXN1bHRzKHN0cnVjdCB3b3JrX2VsZW1lbnQgKndlX3AsIGNoYXIgX191c2VyICpidWYpCi17Ci0JaW50IHJ2OwotCi0JUERFQlVHKCJ3ZV9wICVwIChQSUQgJWQpXG4iLCB3ZV9wLCBQSUQoKSk7Ci0KLQlMT05HMkRFVlBUUih3ZV9wLT5kZXZpbmRleCktPmRldl90b3RhbF9yZXFfY250Kys7Ci0JU0VUX1JEV1JNQVNLKHdlX3AtPnN0YXR1c1swXSwgU1RBVF9SRUFEUEVORCk7Ci0KLQlydiA9IDA7Ci0JaWYgKCF3ZV9wLT5idWZmZXIpIHsKLQkJUFJJTlRLKCJ3ZV9wICVwIFBJRCAlZCBpbiBTVEFUX1JFQURQRU5EOiBidWZmZXIgTlVMTC5cbiIsCi0JCQl3ZV9wLCBQSUQoKSk7Ci0JCXJ2ID0gLUVOT0JVRkY7Ci0JfQotCi0JaWYgKCFydikKLQkJaWYgKChydiA9IGNvcHlfdG9fdXNlcihidWYsIHdlX3AtPmJ1ZmZlciwgd2VfcC0+YnVmZl9zaXplKSkpIHsKLQkJCVBERUJVRygiY29weV90b191c2VyIGZhaWxlZDogcnYgPSAlZFxuIiwgcnYpOwotCQkJcnYgPSAtRUZBVUxUOwotCQl9Ci0KLQlpZiAoIXJ2KQotCQlydiA9IHdlX3AtPnJldGNvZGU7Ci0JaWYgKCFydikKLQkJaWYgKHdlX3AtPnJlc3BfYnVmZl9zaXplCi0JCSAgICAmJgljb3B5X3RvX3VzZXIod2VfcC0+cmVzcF9hZGRyLCB3ZV9wLT5yZXNwX2J1ZmYsCi0JCQkJICAgICB3ZV9wLT5yZXNwX2J1ZmZfc2l6ZSkpCi0JCQlydiA9IC1FRkFVTFQ7Ci0KLQlTRVRfUkRXUk1BU0sod2VfcC0+c3RhdHVzWzBdLCBTVEFUX05PV09SSyk7Ci0JcmV0dXJuIHJ2OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBOVUxMX3BzbWlkWzhdID0KLXsweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwfTsKLQotLyoqCi0gKiBVc2VkIGluIGRldmljZSBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucwotICovCi0jZGVmaW5lIE1BWF9SRVNFVCA5MAotCi0vKioKLSAqIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBQQ0lDQyBzdXBwb3J0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1pc19QS0NTMTFfcGFkZGVkKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLQlpbnQgaTsKLQlpZiAoKGJ1ZmZlclswXSAhPSAweDAwKSB8fCAoYnVmZmVyWzFdICE9IDB4MDEpKQotCQlyZXR1cm4gMDsKLQlmb3IgKGkgPSAyOyBpIDwgbGVuZ3RoOyBpKyspCi0JCWlmIChidWZmZXJbaV0gIT0gMHhGRikKLQkJCWJyZWFrOwotCWlmICgoaSA8IDEwKSB8fCAoaSA9PSBsZW5ndGgpKQotCQlyZXR1cm4gMDsKLQlpZiAoYnVmZmVyW2ldICE9IDB4MDApCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKioKLSAqIFRoaXMgaXMgdXNlZCBvbmx5IGZvciBQQ0lDQyBzdXBwb3J0Ci0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1pc19QS0NTMTJfcGFkZGVkKHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgaW50IGxlbmd0aCkKLXsKLQlpbnQgaTsKLQlpZiAoKGJ1ZmZlclswXSAhPSAweDAwKSB8fCAoYnVmZmVyWzFdICE9IDB4MDIpKQotCQlyZXR1cm4gMDsKLQlmb3IgKGkgPSAyOyBpIDwgbGVuZ3RoOyBpKyspCi0JCWlmIChidWZmZXJbaV0gPT0gMHgwMCkKLQkJCWJyZWFrOwotCWlmICgoaSA8IDEwKSB8fCAoaSA9PSBsZW5ndGgpKQotCQlyZXR1cm4gMDsKLQlpZiAoYnVmZmVyW2ldICE9IDB4MDApCi0JCXJldHVybiAwOwotCXJldHVybiAxOwotfQotCi0vKioKLSAqIGJ1aWxkcyBzdHJ1Y3QgY2FsbGVyIGFuZCBjb252ZXJ0cyBtZXNzYWdlIGZyb20gZ2VuZXJpYyBmb3JtYXQgdG8KLSAqIGRldmljZS1kZXBlbmRlbnQgZm9ybWF0Ci0gKiBmdW5jIGlzIElDQVJTQU1PREVYUE8gb3IgSUNBUlNBQ1JUCi0gKiBmdW5jdGlvbiBpcyBQQ0lfRlVOQ19LRVlfRU5DUllQVCBvciBQQ0lfRlVOQ19LRVlfREVDUllQVAotICovCi1zdGF0aWMgaW5saW5lIGludAotYnVpbGRfY2FsbGVyKHN0cnVjdCB3b3JrX2VsZW1lbnQgKndlX3AsIHNob3J0IGZ1bmN0aW9uKQotewotCWludCBydjsKLQlzdHJ1Y3QgY2FsbGVyICpjYWxsZXJfcCA9IChzdHJ1Y3QgY2FsbGVyICopd2VfcC0+cmVxdWVzdHB0cjsKLQotCWlmICgod2VfcC0+ZGV2dHlwZSAhPSBQQ0lDQykgJiYgKHdlX3AtPmRldnR5cGUgIT0gUENJQ0EpICYmCi0JICAgICh3ZV9wLT5kZXZ0eXBlICE9IFBDSVhDQ19NQ0wyKSAmJiAod2VfcC0+ZGV2dHlwZSAhPSBQQ0lYQ0NfTUNMMykgJiYKLQkgICAgKHdlX3AtPmRldnR5cGUgIT0gQ0VYMkMpICYmICh3ZV9wLT5kZXZ0eXBlICE9IENFWDJBKSkKLQkJcmV0dXJuIFNFTl9OT1RfQVZBSUw7Ci0KLQltZW1jcHkoY2FsbGVyX3AtPmNhbGxlcl9pZCwgd2VfcC0+Y2FsbGVyX2lkLAotCSAgICAgICBzaXplb2YoY2FsbGVyX3AtPmNhbGxlcl9pZCkpOwotCWNhbGxlcl9wLT5jYWxsZXJfZGV2X2RlcF9yZXFfcCA9IGNhbGxlcl9wLT5jYWxsZXJfZGV2X2RlcF9yZXE7Ci0JY2FsbGVyX3AtPmNhbGxlcl9kZXZfZGVwX3JlcV9sID0gTUFYX1JFU1BPTlNFX1NJWkU7Ci0JY2FsbGVyX3AtPmNhbGxlcl9idWZfcCA9IHdlX3AtPmJ1ZmZlcjsKLQlJTklUX0xJU1RfSEVBRCgmKGNhbGxlcl9wLT5jYWxsZXJfbGlzdGUpKTsKLQotCXJ2ID0gY29udmVydF9yZXF1ZXN0KHdlX3AtPmJ1ZmZlciwgd2VfcC0+ZnVuY2NvZGUsIGZ1bmN0aW9uLAotCQkJICAgICB6OTBjcnlwdC5jZHgsIHdlX3AtPmRldnR5cGUsCi0JCQkgICAgICZjYWxsZXJfcC0+Y2FsbGVyX2Rldl9kZXBfcmVxX2wsCi0JCQkgICAgIGNhbGxlcl9wLT5jYWxsZXJfZGV2X2RlcF9yZXFfcCk7Ci0JaWYgKHJ2KSB7Ci0JCWlmIChydiA9PSBTRU5fTk9UX0FWQUlMKQotCQkJUERFQlVHKCJyZXF1ZXN0IGNhbid0IGJlIHByb2Nlc3NlZCBvbiBoZHdyIGF2YWlsXG4iKTsKLQkJZWxzZQotCQkJUFJJTlRLKCJFcnJvciBmcm9tIGNvbnZlcnRfcmVxdWVzdDogJWRcbiIsIHJ2KTsKLQl9Ci0JZWxzZQotCQltZW1jcHkoJihjYWxsZXJfcC0+Y2FsbGVyX2Rldl9kZXBfcmVxX3BbNF0pLCB3ZV9wLT5jYWxsZXJfaWQsOCk7Ci0JcmV0dXJuIHJ2OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXVuYnVpbGRfY2FsbGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZV9wLCBzdHJ1Y3QgY2FsbGVyICpjYWxsZXJfcCkKLXsKLQlpZiAoIWNhbGxlcl9wKQotCQlyZXR1cm47Ci0JaWYgKGNhbGxlcl9wLT5jYWxsZXJfbGlzdGUubmV4dCAmJiBjYWxsZXJfcC0+Y2FsbGVyX2xpc3RlLnByZXYpCi0JCWlmICghbGlzdF9lbXB0eSgmY2FsbGVyX3AtPmNhbGxlcl9saXN0ZSkpIHsKLQkJCWxpc3RfZGVsX2luaXQoJmNhbGxlcl9wLT5jYWxsZXJfbGlzdGUpOwotCQkJZGV2aWNlX3AtPmRldl9jYWxsZXJfY291bnQtLTsKLQkJfQotCW1lbXNldChjYWxsZXJfcC0+Y2FsbGVyX2lkLCAwLCBzaXplb2YoY2FsbGVyX3AtPmNhbGxlcl9pZCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotZ2V0X2NyeXB0b19yZXF1ZXN0X2J1ZmZlcihzdHJ1Y3Qgd29ya19lbGVtZW50ICp3ZV9wKQotewotCXN0cnVjdCBpY2FfcnNhX21vZGV4cG8gKm1leF9wOwotCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnRfcDsKLQl1bnNpZ25lZCBjaGFyICp0ZW1wX2J1ZmZlcjsKLQlzaG9ydCBmdW5jdGlvbjsKLQlpbnQgcnY7Ci0KLQltZXhfcCA9CShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICopIHdlX3AtPmJ1ZmZlcjsKLQljcnRfcCA9IChzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCAqKSB3ZV9wLT5idWZmZXI7Ci0KLQlQREVCVUcoImRldmljZSB0eXBlIGlucHV0ID0gJWRcbiIsIHdlX3AtPmRldnR5cGUpOwotCi0JaWYgKHo5MGNyeXB0LnRlcm1pbmF0aW5nKQotCQlyZXR1cm4gUkVDX05PX1JFU1BPTlNFOwotCWlmIChtZW1jbXAod2VfcC0+Y2FsbGVyX2lkLCBOVUxMX3BzbWlkLCA4KSA9PSAwKSB7Ci0JCVBSSU5USygicHNtaWQgemVyb2VzXG4iKTsKLQkJcmV0dXJuIFNFTl9GQVRBTF9FUlJPUjsKLQl9Ci0JaWYgKCF3ZV9wLT5idWZmZXIpIHsKLQkJUFJJTlRLKCJidWZmZXIgcG9pbnRlciBOVUxMXG4iKTsKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCX0KLQlpZiAoIXdlX3AtPnJlcXVlc3RwdHIpIHsKLQkJUFJJTlRLKCJjYWxsZXIgcG9pbnRlciBOVUxMXG4iKTsKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCX0KLQotCWlmICgod2VfcC0+ZGV2dHlwZSAhPSBQQ0lDQSkgJiYgKHdlX3AtPmRldnR5cGUgIT0gUENJQ0MpICYmCi0JICAgICh3ZV9wLT5kZXZ0eXBlICE9IFBDSVhDQ19NQ0wyKSAmJiAod2VfcC0+ZGV2dHlwZSAhPSBQQ0lYQ0NfTUNMMykgJiYKLQkgICAgKHdlX3AtPmRldnR5cGUgIT0gQ0VYMkMpICYmICh3ZV9wLT5kZXZ0eXBlICE9IENFWDJBKSAmJgotCSAgICAod2VfcC0+ZGV2dHlwZSAhPSBBTllERVYpKSB7Ci0JCVBSSU5USygiaW52YWxpZCBkZXZpY2UgdHlwZVxuIik7Ci0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl9Ci0KLQlpZiAoKG1leF9wLT5pbnB1dGRhdGFsZW5ndGggPCAxKSB8fAotCSAgICAobWV4X3AtPmlucHV0ZGF0YWxlbmd0aCA+IE1BWF9NT0RfU0laRSkpIHsKLQkJUFJJTlRLKCJpbnB1dGRhdGFsZW5ndGhbJWRdIGlzIG5vdCB2YWxpZFxuIiwKLQkJICAgICAgIG1leF9wLT5pbnB1dGRhdGFsZW5ndGgpOwotCQlyZXR1cm4gU0VOX1VTRVJfRVJST1I7Ci0JfQotCi0JaWYgKG1leF9wLT5vdXRwdXRkYXRhbGVuZ3RoIDwgbWV4X3AtPmlucHV0ZGF0YWxlbmd0aCkgewotCQlQUklOVEsoIm91dHB1dGRhdGFsZW5ndGhbJWRdIDwgaW5wdXRkYXRhbGVuZ3RoWyVkXVxuIiwKLQkJICAgICAgIG1leF9wLT5vdXRwdXRkYXRhbGVuZ3RoLCBtZXhfcC0+aW5wdXRkYXRhbGVuZ3RoKTsKLQkJcmV0dXJuIFNFTl9VU0VSX0VSUk9SOwotCX0KLQotCWlmICghbWV4X3AtPmlucHV0ZGF0YSB8fCAhbWV4X3AtPm91dHB1dGRhdGEpIHsKLQkJUFJJTlRLKCJpbnB1dGRhdGFbJXBdIG9yIG91dHB1dGRhdGFbJXBdIGlzIE5VTExcbiIsCi0JCSAgICAgICBtZXhfcC0+b3V0cHV0ZGF0YSwgbWV4X3AtPmlucHV0ZGF0YSk7Ci0JCXJldHVybiBTRU5fVVNFUl9FUlJPUjsKLQl9Ci0KLQkvKioKLQkgKiBBcyBsb25nIGFzIG91dHB1dGRhdGFsZW5ndGggaXMgYmlnIGVub3VnaCwgd2UgY2FuIHNldCB0aGUKLQkgKiBvdXRwdXRkYXRhbGVuZ3RoIGVxdWFsIHRvIHRoZSBpbnB1dGRhdGFsZW5ndGgsIHNpbmNlIHRoYXQgaXMgdGhlCi0JICogbnVtYmVyIG9mIGJ5dGVzIHdlIHdpbGwgY29weSBpbiBhbnkgY2FzZQotCSAqLwotCW1leF9wLT5vdXRwdXRkYXRhbGVuZ3RoID0gbWV4X3AtPmlucHV0ZGF0YWxlbmd0aDsKLQotCXJ2ID0gMDsKLQlzd2l0Y2ggKHdlX3AtPmZ1bmNjb2RlKSB7Ci0JY2FzZSBJQ0FSU0FNT0RFWFBPOgotCQlpZiAoIW1leF9wLT5iX2tleSB8fCAhbWV4X3AtPm5fbW9kdWx1cykKLQkJCXJ2ID0gU0VOX1VTRVJfRVJST1I7Ci0JCWJyZWFrOwotCWNhc2UgSUNBUlNBQ1JUOgotCQlpZiAoIUlTX0VWRU4oY3J0X3AtPmlucHV0ZGF0YWxlbmd0aCkpIHsKLQkJCVBSSU5USygiaW5wdXRkYXRhbGVuZ3RoWyVkXSBpcyBvZGQsIENSVCBmb3JtXG4iLAotCQkJICAgICAgIGNydF9wLT5pbnB1dGRhdGFsZW5ndGgpOwotCQkJcnYgPSBTRU5fVVNFUl9FUlJPUjsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghY3J0X3AtPmJwX2tleSB8fAotCQkgICAgIWNydF9wLT5icV9rZXkgfHwKLQkJICAgICFjcnRfcC0+bnBfcHJpbWUgfHwKLQkJICAgICFjcnRfcC0+bnFfcHJpbWUgfHwKLQkJICAgICFjcnRfcC0+dV9tdWx0X2ludikgewotCQkJUFJJTlRLKCJDUlQgZm9ybSwgYmFkIGRhdGE6ICVwLyVwLyVwLyVwLyVwXG4iLAotCQkJICAgICAgIGNydF9wLT5icF9rZXksIGNydF9wLT5icV9rZXksCi0JCQkgICAgICAgY3J0X3AtPm5wX3ByaW1lLCBjcnRfcC0+bnFfcHJpbWUsCi0JCQkgICAgICAgY3J0X3AtPnVfbXVsdF9pbnYpOwotCQkJcnYgPSBTRU5fVVNFUl9FUlJPUjsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlQUklOVEsoImJhZCBmdW5jID0gJWRcbiIsIHdlX3AtPmZ1bmNjb2RlKTsKLQkJcnYgPSBTRU5fVVNFUl9FUlJPUjsKLQkJYnJlYWs7Ci0JfQotCWlmIChydiAhPSAwKQotCQlyZXR1cm4gcnY7Ci0KLQlpZiAoc2VsZWN0X2RldmljZV90eXBlKCZ3ZV9wLT5kZXZ0eXBlLCBtZXhfcC0+aW5wdXRkYXRhbGVuZ3RoKSA8IDApCi0JCXJldHVybiBTRU5fTk9UX0FWQUlMOwotCi0JdGVtcF9idWZmZXIgPSAodW5zaWduZWQgY2hhciAqKXdlX3AgKyBzaXplb2Yoc3RydWN0IHdvcmtfZWxlbWVudCkgKwotCQkgICAgICBzaXplb2Yoc3RydWN0IGNhbGxlcik7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHRlbXBfYnVmZmVyLCBtZXhfcC0+aW5wdXRkYXRhLAotCQkJICAgbWV4X3AtPmlucHV0ZGF0YWxlbmd0aCkgIT0gMCkKLQkJcmV0dXJuIFNFTl9SRUxFQVNFRDsKLQotCWZ1bmN0aW9uID0gUENJX0ZVTkNfS0VZX0VOQ1JZUFQ7Ci0Jc3dpdGNoICh3ZV9wLT5kZXZ0eXBlKSB7Ci0JLyogUENJQ0EgYW5kIENFWDJBIGRvIGV2ZXJ5dGhpbmcgd2l0aCBhIHNpbXBsZSBSU0EgbW9kLWV4cG8gb3BlcmF0aW9uICovCi0JY2FzZSBQQ0lDQToKLQljYXNlIENFWDJBOgotCQlmdW5jdGlvbiA9IFBDSV9GVU5DX0tFWV9FTkNSWVBUOwotCQlicmVhazsKLQkvKioKLQkgKiBQQ0lYQ0NfTUNMMiBkb2VzIGFsbCBNb2QtRXhwbyBmb3JtIHdpdGggYSBzaW1wbGUgUlNBIG1vZC1leHBvCi0JICogb3BlcmF0aW9uLCBhbmQgYWxsIENSVCBmb3JtcyB3aXRoIGEgUEtDUy0xLjIgZm9ybWF0IGRlY3J5cHQuCi0JICogUENJWENDX01DTDMgYW5kIENFWDJDIGRvIGFsbCBNb2QtRXhwbyBhbmQgQ1JUIGZvcm1zIHdpdGggYSBzaW1wbGUgUlNBCi0JICogbW9kLWV4cG8gb3BlcmF0aW9uCi0JICovCi0JY2FzZSBQQ0lYQ0NfTUNMMjoKLQkJaWYgKHdlX3AtPmZ1bmNjb2RlID09IElDQVJTQU1PREVYUE8pCi0JCQlmdW5jdGlvbiA9IFBDSV9GVU5DX0tFWV9FTkNSWVBUOwotCQllbHNlCi0JCQlmdW5jdGlvbiA9IFBDSV9GVU5DX0tFWV9ERUNSWVBUOwotCQlicmVhazsKLQljYXNlIFBDSVhDQ19NQ0wzOgotCWNhc2UgQ0VYMkM6Ci0JCWlmICh3ZV9wLT5mdW5jY29kZSA9PSBJQ0FSU0FNT0RFWFBPKQotCQkJZnVuY3Rpb24gPSBQQ0lfRlVOQ19LRVlfRU5DUllQVDsKLQkJZWxzZQotCQkJZnVuY3Rpb24gPSBQQ0lfRlVOQ19LRVlfREVDUllQVDsKLQkJYnJlYWs7Ci0JLyoqCi0JICogUENJQ0MgZG9lcyBldmVyeXRoaW5nIGFzIGEgUEtDUy0xLjIgZm9ybWF0IHJlcXVlc3QKLQkgKi8KLQljYXNlIFBDSUNDOgotCQkvKiBQQ0lDQyBjYW5ub3QgaGFuZGxlIGlucHV0IHRoYXQgaXMgaXMgUEtDUyMxLjEgcGFkZGVkICovCi0JCWlmIChpc19QS0NTMTFfcGFkZGVkKHRlbXBfYnVmZmVyLCBtZXhfcC0+aW5wdXRkYXRhbGVuZ3RoKSkgewotCQkJcmV0dXJuIFNFTl9OT1RfQVZBSUw7Ci0JCX0KLQkJaWYgKHdlX3AtPmZ1bmNjb2RlID09IElDQVJTQU1PREVYUE8pIHsKLQkJCWlmIChpc19QS0NTMTJfcGFkZGVkKHRlbXBfYnVmZmVyLAotCQkJCQkgICAgIG1leF9wLT5pbnB1dGRhdGFsZW5ndGgpKQotCQkJCWZ1bmN0aW9uID0gUENJX0ZVTkNfS0VZX0VOQ1JZUFQ7Ci0JCQllbHNlCi0JCQkJZnVuY3Rpb24gPSBQQ0lfRlVOQ19LRVlfREVDUllQVDsKLQkJfSBlbHNlCi0JCQkvKiBhbGwgQ1JUIGZvcm1zIGFyZSBkZWNyeXB0cyAqLwotCQkJZnVuY3Rpb24gPSBQQ0lfRlVOQ19LRVlfREVDUllQVDsKLQkJYnJlYWs7Ci0JfQotCVBERUJVRygiZnVuY3Rpb246ICUwNHhcbiIsIGZ1bmN0aW9uKTsKLQlydiA9IGJ1aWxkX2NhbGxlcih3ZV9wLCBmdW5jdGlvbik7Ci0JUERFQlVHKCJydiBmcm9tIGJ1aWxkX2NhbGxlciA9ICVkXG4iLCBydik7Ci0JcmV0dXJuIHJ2OwotfQotCi1zdGF0aWMgaW5saW5lIGludAotejkwY3J5cHRfcHJlcGFyZShzdHJ1Y3Qgd29ya19lbGVtZW50ICp3ZV9wLCB1bnNpZ25lZCBpbnQgZnVuY2NvZGUsCi0JCSBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyKQotewotCWludCBydjsKLQotCXdlX3AtPmRldmluZGV4ID0gLTE7Ci0JaWYgKGZ1bmNjb2RlID09IElDQVJTQU1PREVYUE8pCi0JCXdlX3AtPmJ1ZmZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvKTsKLQllbHNlCi0JCXdlX3AtPmJ1ZmZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIod2VfcC0+YnVmZmVyLCBidWZmZXIsIHdlX3AtPmJ1ZmZfc2l6ZSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0Jd2VfcC0+YXVkaXRbMF0gfD0gRlBfQ09QWUZST007Ci0JU0VUX1JEV1JNQVNLKHdlX3AtPnN0YXR1c1swXSwgU1RBVF9XUklUVEVOKTsKLQl3ZV9wLT5mdW5jY29kZSA9IGZ1bmNjb2RlOwotCXdlX3AtPmRldnR5cGUgPSAtMTsKLQl3ZV9wLT5hdWRpdFswXSB8PSBGUF9CVUZGUkVROwotCXJ2ID0gZ2V0X2NyeXB0b19yZXF1ZXN0X2J1ZmZlcih3ZV9wKTsKLQlzd2l0Y2ggKHJ2KSB7Ci0JY2FzZSAwOgotCQl3ZV9wLT5hdWRpdFswXSB8PSBGUF9CVUZGR09UOwotCQlicmVhazsKLQljYXNlIFNFTl9VU0VSX0VSUk9SOgotCQlydiA9IC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgU0VOX1FVRVVFX0ZVTEw6Ci0JCXJ2ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fUkVMRUFTRUQ6Ci0JCXJ2ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JY2FzZSBSRUNfTk9fUkVTUE9OU0U6Ci0JCXJ2ID0gLUVOT0RFVjsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5fTk9UX0FWQUlMOgotCWNhc2UgRUdFVEJVRkY6Ci0JCXJ2ID0gLUVHRVRCVUZGOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlQUklOVEsoInJ2ID0gJWRcbiIsIHJ2KTsKLQkJcnYgPSAtRUdFVEJVRkY7Ci0JCWJyZWFrOwotCX0KLQlpZiAoQ0hLX1JEV1JNQVNLKHdlX3AtPnN0YXR1c1swXSkgPT0gU1RBVF9XUklUVEVOKQotCQlTRVRfUkRXUk1BU0sod2VfcC0+c3RhdHVzWzBdLCBTVEFUX0RFRkFVTFQpOwotCXJldHVybiBydjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1wdXJnZV93b3JrX2VsZW1lbnQoc3RydWN0IHdvcmtfZWxlbWVudCAqd2VfcCkKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpscHRyOwotCi0Jc3Bpbl9sb2NrX2lycSgmcXVldWVzcGlubG9jayk7Ci0JbGlzdF9mb3JfZWFjaChscHRyLCAmcmVxdWVzdF9saXN0KSB7Ci0JCWlmIChscHRyID09ICZ3ZV9wLT5saXN0ZSkgewotCQkJbGlzdF9kZWxfaW5pdChscHRyKTsKLQkJCXJlcXVlc3RxX2NvdW50LS07Ci0JCQlicmVhazsKLQkJfQotCX0KLQlsaXN0X2Zvcl9lYWNoKGxwdHIsICZwZW5kaW5nX2xpc3QpIHsKLQkJaWYgKGxwdHIgPT0gJndlX3AtPmxpc3RlKSB7Ci0JCQlsaXN0X2RlbF9pbml0KGxwdHIpOwotCQkJcGVuZGluZ3FfY291bnQtLTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycSgmcXVldWVzcGlubG9jayk7Ci19Ci0KLS8qKgotICogQnVpbGQgdGhlIHJlcXVlc3QgYW5kIHNlbmQgaXQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci16OTBjcnlwdF9yc2Eoc3RydWN0IHByaXZfZGF0YSAqcHJpdmF0ZV9kYXRhX3AsIHBpZF90IHBpZCwKLQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCB3b3JrX2VsZW1lbnQgKndlX3A7Ci0JaW50IHJ2OwotCi0JaWYgKChydiA9IGFsbG9jYXRlX3dvcmtfZWxlbWVudCgmd2VfcCwgcHJpdmF0ZV9kYXRhX3AsIHBpZCkpKSB7Ci0JCVBERUJVRygiUElEICVkOiBhbGxvY2F0ZV93b3JrX2VsZW1lbnQgcmV0dXJuZWQgRU5PTUVNXG4iLCBwaWQpOwotCQlyZXR1cm4gcnY7Ci0JfQotCWlmICgocnYgPSB6OTBjcnlwdF9wcmVwYXJlKHdlX3AsIGNtZCwgKGNvbnN0IGNoYXIgX191c2VyICopYXJnKSkpCi0JCVBERUJVRygiUElEICVkOiBydiA9ICVkIGZyb20gejkwY3J5cHRfcHJlcGFyZVxuIiwgcGlkLCBydik7Ci0JaWYgKCFydikKLQkJaWYgKChydiA9IHo5MGNyeXB0X3NlbmQod2VfcCwgKGNvbnN0IGNoYXIgKilhcmcpKSkKLQkJCVBERUJVRygiUElEICVkOiBydiAlZCBmcm9tIHo5MGNyeXB0X3NlbmQuXG4iLCBwaWQsIHJ2KTsKLQlpZiAoIXJ2KSB7Ci0JCXdlX3AtPmF1ZGl0WzBdIHw9IEZQX0FTTEVFUDsKLQkJd2FpdF9ldmVudCh3ZV9wLT53YWl0cSwgYXRvbWljX3JlYWQoJndlX3AtPmFsYXJtcnVuZykpOwotCQl3ZV9wLT5hdWRpdFswXSB8PSBGUF9BV0FLRTsKLQkJcnYgPSB3ZV9wLT5yZXRjb2RlOwotCX0KLQlpZiAoIXJ2KQotCQlydiA9IHo5MGNyeXB0X3Byb2Nlc3NfcmVzdWx0cyh3ZV9wLCAoY2hhciBfX3VzZXIgKilhcmcpOwotCi0JaWYgKCh3ZV9wLT5zdGF0dXNbMF0gJiBTVEFUX0ZBSUxFRCkpIHsKLQkJc3dpdGNoIChydikgewotCQkvKioKLQkJICogRUlOVkFMICphZnRlciogcmVjZWl2ZSBpcyBhbG1vc3QgYWx3YXlzIGEgcGFkZGluZyBlcnJvciBvcgotCQkgKiBsZW5ndGggZXJyb3IgaXNzdWVkIGJ5IGEgY29wcm9jZXNzb3IgKG5vdCBhbiBhY2NlbGVyYXRvcikuCi0JCSAqIFdlIGNvbnZlcnQgdGhpcyByZXR1cm4gdmFsdWUgdG8gLUVHRVRCVUZGIHdoaWNoIHNob3VsZAotCQkgKiB0cmlnZ2VyIGEgZmFsbGJhY2sgdG8gc29mdHdhcmUuCi0JCSAqLwotCQljYXNlIC1FSU5WQUw6Ci0JCQlpZiAoKHdlX3AtPmRldnR5cGUgIT0gUENJQ0EpICYmCi0JCQkgICAgKHdlX3AtPmRldnR5cGUgIT0gQ0VYMkEpKQotCQkJCXJ2ID0gLUVHRVRCVUZGOwotCQkJYnJlYWs7Ci0JCWNhc2UgLUVUSU1FT1VUOgotCQkJaWYgKHo5MGNyeXB0Lm1hc2suc3RfY291bnQgPiAwKQotCQkJCXJ2ID0gLUVSRVNUQVJUU1lTOyAvLyByZXRyeSB3aXRoIGFub3RoZXIKLQkJCWVsc2UKLQkJCQlydiA9IC1FTk9ERVY7IC8vIG5vIGNhcmRzIGxlZnQKLQkJLyogZmFsbCB0aHJvdWdoIHRvIGNsZWFuIHVwIHJlcXVlc3QgcXVldWUgKi8KLQkJY2FzZSAtRVJFU1RBUlRTWVM6Ci0JCWNhc2UgLUVSRUxFQVNFRDoKLQkJCXN3aXRjaCAoQ0hLX1JEV1JNQVNLKHdlX3AtPnN0YXR1c1swXSkpIHsKLQkJCWNhc2UgU1RBVF9XUklUVEVOOgotCQkJCXB1cmdlX3dvcmtfZWxlbWVudCh3ZV9wKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgU1RBVF9SRUFEUEVORDoKLQkJCWNhc2UgU1RBVF9OT1dPUks6Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl3ZV9wLT5zdGF0dXNbMF0gXj0gU1RBVF9GQUlMRUQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlmcmVlX3BhZ2UoKGxvbmcpd2VfcCk7Ci0JcmV0dXJuIHJ2OwotfQotCi0vKioKLSAqIFRoaXMgZnVuY3Rpb24gaXMgYSBsaXR0bGUgbG9uZywgYnV0IGl0J3MgcmVhbGx5IGp1c3Qgb25lIGxhcmdlIHN3aXRjaAotICogc3RhdGVtZW50LgotICovCi1zdGF0aWMgbG9uZwotejkwY3J5cHRfdW5sb2NrZWRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBwcml2X2RhdGEgKnByaXZhdGVfZGF0YV9wID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGNoYXIgKnN0YXR1czsKLQl1bnNpZ25lZCBjaGFyICpxZGVwdGg7Ci0JdW5zaWduZWQgaW50ICpyZXFjbnQ7Ci0Jc3RydWN0IGljYV96OTBfc3RhdHVzICpwc3RhdDsKLQlpbnQgcmV0LCBpLCBsb29wTGltLCB0ZW1wc3RhdDsKLQlzdGF0aWMgaW50IGRlcHJlY2F0ZWRfbXNnX2NvdW50MSA9IDA7Ci0Jc3RhdGljIGludCBkZXByZWNhdGVkX21zZ19jb3VudDIgPSAwOwotCi0JUERFQlVHKCJmaWxwICVwIChQSUQgJWQpLCBjbWQgMHglMDhYXG4iLCBmaWxwLCBQSUQoKSwgY21kKTsKLQlQREVCVUcoImNtZCAweCUwOFg6IGRpciAlcywgc2l6ZSAweCUwNFgsIHR5cGUgMHglMDJYLCBuciAweCUwMlhcbiIsCi0JCWNtZCwKLQkJIV9JT0NfRElSKGNtZCkgPyAiTk8iCi0JCTogKChfSU9DX0RJUihjbWQpID09IChfSU9DX1JFQUR8X0lPQ19XUklURSkpID8gIlJXIgotCQk6ICgoX0lPQ19ESVIoY21kKSA9PSBfSU9DX1JFQUQpID8gIlJEIgotCQk6ICJXUiIpKSwKLQkJX0lPQ19TSVpFKGNtZCksIF9JT0NfVFlQRShjbWQpLCBfSU9DX05SKGNtZCkpOwotCi0JaWYgKF9JT0NfVFlQRShjbWQpICE9IFo5MF9JT0NUTF9NQUdJQykgewotCQlQUklOVEsoImNtZCAweCUwOFggY29udGFpbnMgYmFkIG1hZ2ljXG4iLCBjbWQpOwotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci0KLQlyZXQgPSAwOwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBJQ0FSU0FNT0RFWFBPOgotCWNhc2UgSUNBUlNBQ1JUOgotCQlpZiAocXVpZXNjZV96OTBjcnlwdCkgewotCQkJcmV0ID0gLUVRVUlFU0NFOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ID0gLUVOT0RFVjsgLy8gRGVmYXVsdCBpZiBubyBkZXZpY2VzCi0JCWxvb3BMaW0gPSB6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2suc3RfY291bnQgLQotCQkJKHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5oZHdhcmVfbWFzay5kaXNhYmxlZF9jb3VudCArCi0JCQkgejkwY3J5cHQuaGR3YXJlX2luZm8tPmhkd2FyZV9tYXNrLnVzZXJfZGlzYWJsZWRfY291bnQpOwotCQlmb3IgKGkgPSAwOyBpIDwgbG9vcExpbTsgaSsrKSB7Ci0JCQlyZXQgPSB6OTBjcnlwdF9yc2EocHJpdmF0ZV9kYXRhX3AsIFBJRCgpLCBjbWQsIGFyZyk7Ci0JCQlpZiAocmV0ICE9IC1FUkVTVEFSVFNZUykKLQkJCQlicmVhazsKLQkJfQotCQlpZiAocmV0ID09IC1FUkVTVEFSVFNZUykKLQkJCXJldCA9IC1FTk9ERVY7Ci0JCWJyZWFrOwotCi0JY2FzZSBaOTBTVEFUX1RPVEFMQ09VTlQ6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c190b3RhbGNvdW50KCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKGludCBfX3VzZXIgKilhcmcsICZ0ZW1wc3RhdCxzaXplb2YoaW50KSkgIT0gMCkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBaOTBTVEFUX1BDSUNBQ09VTlQ6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c19QQ0lDQWNvdW50KCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKGludCBfX3VzZXIgKilhcmcsICZ0ZW1wc3RhdCwgc2l6ZW9mKGludCkpICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgWjkwU1RBVF9QQ0lDQ0NPVU5UOgotCQl0ZW1wc3RhdCA9IGdldF9zdGF0dXNfUENJQ0Njb3VudCgpOwotCQlpZiAoY29weV90b191c2VyKChpbnQgX191c2VyICopYXJnLCAmdGVtcHN0YXQsIHNpemVvZihpbnQpKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UOgotCQl0ZW1wc3RhdCA9IGdldF9zdGF0dXNfUENJWENDTUNMMmNvdW50KCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKGludCBfX3VzZXIgKilhcmcsICZ0ZW1wc3RhdCwgc2l6ZW9mKGludCkpICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQ6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c19QQ0lYQ0NNQ0wzY291bnQoKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigoaW50IF9fdXNlciAqKWFyZywgJnRlbXBzdGF0LCBzaXplb2YoaW50KSkgIT0gMCkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBaOTBTVEFUX0NFWDJDQ09VTlQ6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c19DRVgyQ2NvdW50KCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKGludCBfX3VzZXIgKilhcmcsICZ0ZW1wc3RhdCwgc2l6ZW9mKGludCkpICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgWjkwU1RBVF9DRVgyQUNPVU5UOgotCQl0ZW1wc3RhdCA9IGdldF9zdGF0dXNfQ0VYMkFjb3VudCgpOwotCQlpZiAoY29weV90b191c2VyKChpbnQgX191c2VyICopYXJnLCAmdGVtcHN0YXQsIHNpemVvZihpbnQpKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQ6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c19yZXF1ZXN0cV9jb3VudCgpOwotCQlpZiAoY29weV90b191c2VyKChpbnQgX191c2VyICopYXJnLCAmdGVtcHN0YXQsIHNpemVvZihpbnQpKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFo5MFNUQVRfUEVORElOR1FfQ09VTlQ6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c19wZW5kaW5ncV9jb3VudCgpOwotCQlpZiAoY29weV90b191c2VyKChpbnQgX191c2VyICopYXJnLCAmdGVtcHN0YXQsIHNpemVvZihpbnQpKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UOgotCQl0ZW1wc3RhdCA9IGdldF9zdGF0dXNfdG90YWxvcGVuX2NvdW50KCk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoKGludCBfX3VzZXIgKilhcmcsICZ0ZW1wc3RhdCwgc2l6ZW9mKGludCkpICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlicmVhazsKLQotCWNhc2UgWjkwU1RBVF9ET01BSU5fSU5ERVg6Ci0JCXRlbXBzdGF0ID0gZ2V0X3N0YXR1c19kb21haW5faW5kZXgoKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigoaW50IF9fdXNlciAqKWFyZywgJnRlbXBzdGF0LCBzaXplb2YoaW50KSkgIT0gMCkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBaOTBTVEFUX1NUQVRVU19NQVNLOgotCQlzdGF0dXMgPSBrbWFsbG9jKFo5MENSWVBUX05VTV9BUFMsIEdGUF9LRVJORUwpOwotCQlpZiAoIXN0YXR1cykgewotCQkJUFJJTlRLKCJrbWFsbG9jIGZvciBzdGF0dXMgZmFpbGVkIVxuIik7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJYnJlYWs7Ci0JCX0KLQkJZ2V0X3N0YXR1c19zdGF0dXNfbWFzayhzdGF0dXMpOwotCQlpZiAoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKSBhcmcsIHN0YXR1cywgWjkwQ1JZUFRfTlVNX0FQUykKLQkJCQkJCQkJCSE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlrZnJlZShzdGF0dXMpOwotCQlicmVhazsKLQotCWNhc2UgWjkwU1RBVF9RREVQVEhfTUFTSzoKLQkJcWRlcHRoID0ga21hbGxvYyhaOTBDUllQVF9OVU1fQVBTLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFxZGVwdGgpIHsKLQkJCVBSSU5USygia21hbGxvYyBmb3IgcWRlcHRoIGZhaWxlZCFcbiIpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0JCWdldF9zdGF0dXNfcWRlcHRoX21hc2socWRlcHRoKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigoY2hhciBfX3VzZXIgKikgYXJnLCBxZGVwdGgsIFo5MENSWVBUX05VTV9BUFMpICE9IDApCi0JCQlyZXQgPSAtRUZBVUxUOwotCQlrZnJlZShxZGVwdGgpOwotCQlicmVhazsKLQotCWNhc2UgWjkwU1RBVF9QRVJERVZfUkVRQ05UOgotCQlyZXFjbnQgPSBrbWFsbG9jKHNpemVvZihpbnQpICogWjkwQ1JZUFRfTlVNX0FQUywgR0ZQX0tFUk5FTCk7Ci0JCWlmICghcmVxY250KSB7Ci0JCQlQUklOVEsoImttYWxsb2MgZm9yIHJlcWNudCBmYWlsZWQhXG4iKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCQlnZXRfc3RhdHVzX3BlcmRldmljZV9yZXFjbnQocmVxY250KTsKLQkJaWYgKGNvcHlfdG9fdXNlcigoY2hhciBfX3VzZXIgKikgYXJnLCByZXFjbnQsCi0JCQkJIFo5MENSWVBUX05VTV9BUFMgKiBzaXplb2YoaW50KSkgIT0gMCkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWtmcmVlKHJlcWNudCk7Ci0JCWJyZWFrOwotCi0JCS8qIFRISVMgSVMgREVQUkVDQVRFRC4JVVNFIFRIRSBORVcgU1RBVFVTIENBTExTICovCi0JY2FzZSBJQ0FaOTBTVEFUVVM6Ci0JCWlmIChkZXByZWNhdGVkX21zZ19jb3VudDEgPCAyMCkgewotCQkJUFJJTlRLKCJkZXByZWNhdGVkIGNhbGwgdG8gaW9jdGwgKElDQVo5MFNUQVRVUykhXG4iKTsKLQkJCWRlcHJlY2F0ZWRfbXNnX2NvdW50MSsrOwotCQkJaWYgKGRlcHJlY2F0ZWRfbXNnX2NvdW50MSA9PSAyMCkKLQkJCQlQUklOVEsoIk5vIGxvbmdlciBpc3N1aW5nIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gIgotCQkJCSAgICAgICAiZGVwcmVjYXRlZCBjYWxsIHRvIElDQVo5MFNUQVRVUy5cbiIpOwotCQl9Ci0KLQkJcHN0YXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWNhX3o5MF9zdGF0dXMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFwc3RhdCkgewotCQkJUFJJTlRLKCJrbWFsbG9jIGZvciBwc3RhdCBmYWlsZWQhXG4iKTsKLQkJCXJldCA9IC1FTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCi0JCXBzdGF0LT50b3RhbGNvdW50CSA9IGdldF9zdGF0dXNfdG90YWxjb3VudCgpOwotCQlwc3RhdC0+bGVlZHNsaXRlY291bnQJID0gZ2V0X3N0YXR1c19QQ0lDQWNvdW50KCk7Ci0JCXBzdGF0LT5sZWVkczJjb3VudAkgPSBnZXRfc3RhdHVzX1BDSUNDY291bnQoKTsKLQkJcHN0YXQtPnJlcXVlc3RxV2FpdENvdW50ID0gZ2V0X3N0YXR1c19yZXF1ZXN0cV9jb3VudCgpOwotCQlwc3RhdC0+cGVuZGluZ3FXYWl0Q291bnQgPSBnZXRfc3RhdHVzX3BlbmRpbmdxX2NvdW50KCk7Ci0JCXBzdGF0LT50b3RhbE9wZW5Db3VudAkgPSBnZXRfc3RhdHVzX3RvdGFsb3Blbl9jb3VudCgpOwotCQlwc3RhdC0+Y3J5cHRvRG9tYWluCSA9IGdldF9zdGF0dXNfZG9tYWluX2luZGV4KCk7Ci0JCWdldF9zdGF0dXNfc3RhdHVzX21hc2socHN0YXQtPnN0YXR1cyk7Ci0JCWdldF9zdGF0dXNfcWRlcHRoX21hc2socHN0YXQtPnFkZXB0aCk7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IGljYV96OTBfc3RhdHVzIF9fdXNlciAqKSBhcmcsIHBzdGF0LAotCQkJCSBzaXplb2Yoc3RydWN0IGljYV96OTBfc3RhdHVzKSkgIT0gMCkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWtmcmVlKHBzdGF0KTsKLQkJYnJlYWs7Ci0KLQkJLyogVEhJUyBJUyBERVBSRUNBVEVELglVU0UgVEhFIE5FVyBTVEFUVVMgQ0FMTFMgKi8KLQljYXNlIFo5MFNUQVRfUENJWENDQ09VTlQ6Ci0JCWlmIChkZXByZWNhdGVkX21zZ19jb3VudDIgPCAyMCkgewotCQkJUFJJTlRLKCJkZXByZWNhdGVkIGlvY3RsIChaOTBTVEFUX1BDSVhDQ0NPVU5UKSFcbiIpOwotCQkJZGVwcmVjYXRlZF9tc2dfY291bnQyKys7Ci0JCQlpZiAoZGVwcmVjYXRlZF9tc2dfY291bnQyID09IDIwKQotCQkJCVBSSU5USygiTm8gbG9uZ2VyIGlzc3VpbmcgbWVzc2FnZXMgYWJvdXQgZGVwcmUiCi0JCQkJICAgICAgICJjYXRlZCBpb2N0bCBaOTBTVEFUX1BDSVhDQ0NPVU5ULlxuIik7Ci0JCX0KLQotCQl0ZW1wc3RhdCA9IGdldF9zdGF0dXNfUENJWENDY291bnQoKTsKLQkJaWYgKGNvcHlfdG9fdXNlcigoaW50ICopYXJnLCAmdGVtcHN0YXQsIHNpemVvZihpbnQpKSAhPSAwKQotCQkJcmV0ID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0KLQljYXNlIFo5MFFVSUVTQ0U6Ci0JCWlmIChjdXJyZW50LT5ldWlkICE9IDApIHsKLQkJCVBSSU5USygiUVVJRVNDRSBmYWlsczogZXVpZCAlZFxuIiwKLQkJCSAgICAgICBjdXJyZW50LT5ldWlkKTsKLQkJCXJldCA9IC1FQUNDRVM7Ci0JCX0gZWxzZSB7Ci0JCQlQUklOVEsoIlFVSUVTQ0UgZGV2aWNlIGZyb20gUElEICVkXG4iLCBQSUQoKSk7Ci0JCQlxdWllc2NlX3o5MGNyeXB0ID0gMTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCS8qIHVzZXIgcGFzc2VkIGFuIGludmFsaWQgSU9DVEwgbnVtYmVyICovCi0JCVBERUJVRygiY21kIDB4JTA4WCBjb250YWlucyBpbnZhbGlkIGlvY3RsIGNvZGVcbiIsIGNtZCk7Ci0JCXJldCA9IC1FTk9UVFk7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zcHJpbnRjbCh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCBobCwgaTsKLQotCWhsID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCi0JCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiUwMXgiLCAodW5zaWduZWQgaW50KSBhZGRyW2ldKTsKLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIgIik7Ci0KLQlyZXR1cm4gaGw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zcHJpbnRydyh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCBobCwgaW5sLCBjLCBjeDsKLQotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiCSAgICIpOwotCWlubCA9IDA7Ci0JZm9yIChjID0gMDsgYyA8IChsZW4gLyAxNik7IGMrKykgewotCQlobCArPSBzcHJpbnRjbChvdXRhZGRyK2hsLCBhZGRyK2lubCwgMTYpOwotCQlpbmwgKz0gMTY7Ci0JfQotCi0JY3ggPSBsZW4lMTY7Ci0JaWYgKGN4KSB7Ci0JCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCBjeCk7Ci0JCWlubCArPSBjeDsKLQl9Ci0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCi0JcmV0dXJuIGhsOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotc3ByaW50aHgodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCi0JIHVuc2lnbmVkIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IGhsLCBpbmwsIHIsIHJ4OwotCi0JaGwgPSBzcHJpbnRmKG91dGFkZHIsICJcbiVzXG4iLCB0aXRsZSk7Ci0JaW5sID0gMDsKLQlmb3IgKHIgPSAwOyByIDwgKGxlbiAvIDY0KTsgcisrKSB7Ci0JCWhsICs9IHNwcmludHJ3KG91dGFkZHIraGwsIGFkZHIraW5sLCA2NCk7Ci0JCWlubCArPSA2NDsKLQl9Ci0JcnggPSBsZW4gJSA2NDsKLQlpZiAocngpIHsKLQkJaGwgKz0gc3ByaW50cncob3V0YWRkcitobCwgYWRkcitpbmwsIHJ4KTsKLQkJaW5sICs9IHJ4OwotCX0KLQotCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7Ci0KLQlyZXR1cm4gaGw7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1zcHJpbnRoeDQodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCi0JICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCBobCwgcjsKLQotCWhsID0gc3ByaW50ZihvdXRhZGRyLCAiXG4lc1xuIiwgdGl0bGUpOwotCi0JZm9yIChyID0gMDsgciA8IGxlbjsgcisrKSB7Ci0JCWlmICgociAlIDgpID09IDApCi0JCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIgICAgIik7Ci0JCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiUwOFggIiwgYXJyYXlbcl0pOwotCQlpZiAoKHIgJSA4KSA9PSA3KQotCQkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKLQl9Ci0KLQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOwotCi0JcmV0dXJuIGhsOwotfQotCi1zdGF0aWMgaW50Ci16OTBjcnlwdF9zdGF0dXMoY2hhciAqcmVzcF9idWZmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKLQkJaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSkKLXsKLQl1bnNpZ25lZCBjaGFyICp3b3JrYXJlYTsKLQlpbnQgbGVuOwotCi0JLyogcmVzcF9idWZmIGlzIGEgcGFnZS4gVXNlIHRoZSByaWdodCBoYWxmIGZvciBhIHdvcmsgYXJlYSAqLwotCXdvcmthcmVhID0gcmVzcF9idWZmKzIwMDA7Ci0JbGVuID0gMDsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYrbGVuLCAiXG56OTBjcnlwdCB2ZXJzaW9uOiAlZC4lZC4lZFxuIiwKLQkJejkwY3J5cHRfVkVSU0lPTiwgejkwY3J5cHRfUkVMRUFTRSwgejkwY3J5cHRfVkFSSUFOVCk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmK2xlbiwgIkNyeXB0b2dyYXBoaWMgZG9tYWluOiAlZFxuIiwKLQkJZ2V0X3N0YXR1c19kb21haW5faW5kZXgoKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmK2xlbiwgIlRvdGFsIGRldmljZSBjb3VudDogJWRcbiIsCi0JCWdldF9zdGF0dXNfdG90YWxjb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYrbGVuLCAiUENJQ0EgY291bnQ6ICVkXG4iLAotCQlnZXRfc3RhdHVzX1BDSUNBY291bnQoKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmK2xlbiwgIlBDSUNDIGNvdW50OiAlZFxuIiwKLQkJZ2V0X3N0YXR1c19QQ0lDQ2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZitsZW4sICJQQ0lYQ0MgTUNMMiBjb3VudDogJWRcbiIsCi0JCWdldF9zdGF0dXNfUENJWENDTUNMMmNvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZitsZW4sICJQQ0lYQ0MgTUNMMyBjb3VudDogJWRcbiIsCi0JCWdldF9zdGF0dXNfUENJWENDTUNMM2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZitsZW4sICJDRVgyQyBjb3VudDogJWRcbiIsCi0JCWdldF9zdGF0dXNfQ0VYMkNjb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYrbGVuLCAiQ0VYMkEgY291bnQ6ICVkXG4iLAotCQlnZXRfc3RhdHVzX0NFWDJBY291bnQoKSk7Ci0JbGVuICs9IHNwcmludGYocmVzcF9idWZmK2xlbiwgInJlcXVlc3RxIGNvdW50OiAlZFxuIiwKLQkJZ2V0X3N0YXR1c19yZXF1ZXN0cV9jb3VudCgpKTsKLQlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYrbGVuLCAicGVuZGluZ3EgY291bnQ6ICVkXG4iLAotCQlnZXRfc3RhdHVzX3BlbmRpbmdxX2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZitsZW4sICJUb3RhbCBvcGVuIGhhbmRsZXM6ICVkXG5cbiIsCi0JCWdldF9zdGF0dXNfdG90YWxvcGVuX2NvdW50KCkpOwotCWxlbiArPSBzcHJpbnRoeCgKLQkJIk9ubGluZSBkZXZpY2VzOiAxPVBDSUNBIDI9UENJQ0MgMz1QQ0lYQ0MoTUNMMikgIgotCQkiND1QQ0lYQ0MoTUNMMykgNT1DRVgyQyA2PUNFWDJBIiwKLQkJcmVzcF9idWZmK2xlbiwKLQkJZ2V0X3N0YXR1c19zdGF0dXNfbWFzayh3b3JrYXJlYSksCi0JCVo5MENSWVBUX05VTV9BUFMpOwotCWxlbiArPSBzcHJpbnRoeCgiV2FpdGluZyB3b3JrIGVsZW1lbnQgY291bnRzIiwKLQkJcmVzcF9idWZmK2xlbiwKLQkJZ2V0X3N0YXR1c19xZGVwdGhfbWFzayh3b3JrYXJlYSksCi0JCVo5MENSWVBUX05VTV9BUFMpOwotCWxlbiArPSBzcHJpbnRoeDQoCi0JCSJQZXItZGV2aWNlIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQgcmVxdWVzdCBjb3VudHMiLAotCQlyZXNwX2J1ZmYrbGVuLAotCQlnZXRfc3RhdHVzX3BlcmRldmljZV9yZXFjbnQoKHVuc2lnbmVkIGludCAqKXdvcmthcmVhKSwKLQkJWjkwQ1JZUFRfTlVNX0FQUyk7Ci0JKmVvZiA9IDE7Ci0JbWVtc2V0KHdvcmthcmVhLCAwLCBaOTBDUllQVF9OVU1fQVBTICogc2l6ZW9mKHVuc2lnbmVkIGludCkpOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotZGlzYWJsZV9jYXJkKGludCBjYXJkX2luZGV4KQotewotCXN0cnVjdCBkZXZpY2UgKmRldnA7Ci0KLQlkZXZwID0gTE9ORzJERVZQVFIoY2FyZF9pbmRleCk7Ci0JaWYgKCFkZXZwIHx8IGRldnAtPnVzZXJfZGlzYWJsZWQpCi0JCXJldHVybjsKLQlkZXZwLT51c2VyX2Rpc2FibGVkID0gMTsKLQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2sudXNlcl9kaXNhYmxlZF9jb3VudCsrOwotCWlmIChkZXZwLT5kZXZfdHlwZSA9PSAtMSkKLQkJcmV0dXJuOwotCXo5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbZGV2cC0+ZGV2X3R5cGVdLnVzZXJfZGlzYWJsZWRfY291bnQrKzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1lbmFibGVfY2FyZChpbnQgY2FyZF9pbmRleCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZwOwotCi0JZGV2cCA9IExPTkcyREVWUFRSKGNhcmRfaW5kZXgpOwotCWlmICghZGV2cCB8fCAhZGV2cC0+dXNlcl9kaXNhYmxlZCkKLQkJcmV0dXJuOwotCWRldnAtPnVzZXJfZGlzYWJsZWQgPSAwOwotCXo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5oZHdhcmVfbWFzay51c2VyX2Rpc2FibGVkX2NvdW50LS07Ci0JaWYgKGRldnAtPmRldl90eXBlID09IC0xKQotCQlyZXR1cm47Ci0JejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tkZXZwLT5kZXZfdHlwZV0udXNlcl9kaXNhYmxlZF9jb3VudC0tOwotfQotCi1zdGF0aWMgaW50Ci16OTBjcnlwdF9zdGF0dXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCi17Ci0JaW50IGosIGVvbDsKLQl1bnNpZ25lZCBjaGFyICpsYnVmLCAqcHRyOwotCXVuc2lnbmVkIGludCBsb2NhbF9jb3VudDsKLQotI2RlZmluZSBMQlVGU0laRSAxMjAwCi0JbGJ1ZiA9IGttYWxsb2MoTEJVRlNJWkUsIEdGUF9LRVJORUwpOwotCWlmICghbGJ1ZikgewotCQlQUklOVEsoImttYWxsb2MgZmFpbGVkIVxuIik7Ci0JCXJldHVybiAwOwotCX0KLQotCWlmIChjb3VudCA8PSAwKQotCQlyZXR1cm4gMDsKLQotCWxvY2FsX2NvdW50ID0gVU1JTigodW5zaWduZWQgaW50KWNvdW50LCBMQlVGU0laRS0xKTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcihsYnVmLCBidWZmZXIsIGxvY2FsX2NvdW50KSAhPSAwKSB7Ci0JCWtmcmVlKGxidWYpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQlsYnVmW2xvY2FsX2NvdW50XSA9ICdcMCc7Ci0KLQlwdHIgPSBzdHJzdHIobGJ1ZiwgIk9ubGluZSBkZXZpY2VzIik7Ci0JaWYgKHB0ciA9PSAwKSB7Ci0JCVBSSU5USygiVW5hYmxlIHRvIHBhcnNlIGRhdGEgKG1pc3NpbmcgXCJPbmxpbmUgZGV2aWNlc1wiKVxuIik7Ci0JCWtmcmVlKGxidWYpOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JcHRyID0gc3Ryc3RyKHB0ciwgIlxuIik7Ci0JaWYgKHB0ciA9PSAwKSB7Ci0JCVBSSU5USygiVW5hYmxlIHRvIHBhcnNlIGRhdGEgKG1pc3NpbmcgbmV3bGluZSBhZnRlciBcIk9ubGluZSBkZXZpY2VzXCIpXG4iKTsKLQkJa2ZyZWUobGJ1Zik7Ci0JCXJldHVybiBjb3VudDsKLQl9Ci0JcHRyKys7Ci0KLQlpZiAoc3Ryc3RyKHB0ciwgIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50cyIpID09IE5VTEwpIHsKLQkJUFJJTlRLKCJVbmFibGUgdG8gcGFyc2UgZGF0YSAobWlzc2luZyBcIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50c1wiKVxuIik7Ci0JCWtmcmVlKGxidWYpOwotCQlyZXR1cm4gY291bnQ7Ci0JfQotCi0JaiA9IDA7Ci0JZW9sID0gMDsKLQl3aGlsZSAoKGogPCA2NCkgJiYgKCpwdHIgIT0gJ1wwJykpIHsKLQkJc3dpdGNoICgqcHRyKSB7Ci0JCWNhc2UgJ1x0JzoKLQkJY2FzZSAnICc6Ci0JCQlicmVhazsKLQkJY2FzZSAnXG4nOgotCQlkZWZhdWx0OgotCQkJZW9sID0gMTsKLQkJCWJyZWFrOwotCQljYXNlICcwJzoJLy8gbm8gZGV2aWNlCi0JCWNhc2UgJzEnOgkvLyBQQ0lDQQotCQljYXNlICcyJzoJLy8gUENJQ0MKLQkJY2FzZSAnMyc6CS8vIFBDSVhDQ19NQ0wyCi0JCWNhc2UgJzQnOgkvLyBQQ0lYQ0NfTUNMMwotCQljYXNlICc1JzoJLy8gQ0VYMkMKLQkJY2FzZSAnNic6ICAgICAgIC8vIENFWDJBCi0JCQlqKys7Ci0JCQlicmVhazsKLQkJY2FzZSAnZCc6Ci0JCWNhc2UgJ0QnOgotCQkJZGlzYWJsZV9jYXJkKGopOwotCQkJaisrOwotCQkJYnJlYWs7Ci0JCWNhc2UgJ2UnOgotCQljYXNlICdFJzoKLQkJCWVuYWJsZV9jYXJkKGopOwotCQkJaisrOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGVvbCkKLQkJCWJyZWFrOwotCQlwdHIrKzsKLQl9Ci0KLQlrZnJlZShsYnVmKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qKgotICogRnVuY3Rpb25zIHRoYXQgcnVuIHVuZGVyIGEgdGltZXIsIHdpdGggbm8gcHJvY2VzcyBpZAotICoKLSAqIFRoZSB0YXNrIGZ1bmN0aW9uczoKLSAqICAgICB6OTBjcnlwdF9yZWFkZXJfdGFzawotICoJIGhlbHBlcl9zZW5kX3dvcmsKLSAqCSBoZWxwZXJfaGFuZGxlX3dvcmtfZWxlbWVudAotICoJIGhlbHBlcl9yZWNlaXZlX3JjCi0gKiAgICAgejkwY3J5cHRfY29uZmlnX3Rhc2sKLSAqICAgICB6OTBjcnlwdF9jbGVhbnVwX3Rhc2sKLSAqCi0gKiBIZWxwZXIgZnVuY3Rpb25zOgotICogICAgIHo5MGNyeXB0X3NjaGVkdWxlX3JlYWRlcl90aW1lcgotICogICAgIHo5MGNyeXB0X3NjaGVkdWxlX3JlYWRlcl90YXNrCi0gKiAgICAgejkwY3J5cHRfc2NoZWR1bGVfY29uZmlnX3Rhc2sKLSAqICAgICB6OTBjcnlwdF9zY2hlZHVsZV9jbGVhbnVwX3Rhc2sKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLXJlY2VpdmVfZnJvbV9jcnlwdG9fZGV2aWNlKGludCBpbmRleCwgdW5zaWduZWQgY2hhciAqcHNtaWQsIGludCAqYnVmZl9sZW5fcCwKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIHVuc2lnbmVkIGNoYXIgX191c2VyICoqZGVzdF9wX3ApCi17Ci0JaW50IGR2LCBydjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZfcHRyOwotCXN0cnVjdCBjYWxsZXIgKmNhbGxlcl9wOwotCXN0cnVjdCBpY2FfcnNhX21vZGV4cG8gKmljYU1zZ19wOwotCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKnRwdHI7Ci0KLQltZW1jcHkocHNtaWQsIE5VTExfcHNtaWQsIHNpemVvZihOVUxMX3BzbWlkKSk7Ci0KLQlpZiAoejkwY3J5cHQudGVybWluYXRpbmcpCi0JCXJldHVybiBSRUNfRkFUQUxfRVJST1I7Ci0KLQljYWxsZXJfcCA9IDA7Ci0JZGV2X3B0ciA9IHo5MGNyeXB0LmRldmljZV9wW2luZGV4XTsKLQlydiA9IDA7Ci0JZG8gewotCQlpZiAoIWRldl9wdHIgfHwgZGV2X3B0ci0+ZGlzYWJsZWQpIHsKLQkJCXJ2ID0gUkVDX05PX1dPUks7IC8vIGEgZGlzYWJsZWQgZGV2aWNlIGNhbid0IHJldHVybiB3b3JrCi0JCQlicmVhazsKLQkJfQotCQlpZiAoZGV2X3B0ci0+ZGV2X3NlbGZfeCAhPSBpbmRleCkgewotCQkJUFJJTlRLQygiQ29ycnVwdCBkZXYgcHRyXG4iKTsKLQkJCXo5MGNyeXB0LnRlcm1pbmF0aW5nID0gMTsKLQkJCXJ2ID0gUkVDX0ZBVEFMX0VSUk9SOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKCFkZXZfcHRyLT5kZXZfcmVzcF9sIHx8ICFkZXZfcHRyLT5kZXZfcmVzcF9wKSB7Ci0JCQlkdiA9IERFVl9SRUNfRVhDRVBUSU9OOwotCQkJUFJJTlRLKCJkZXZfcmVzcF9sID0gJWQsIGRldl9yZXNwX3AgPSAlcFxuIiwKLQkJCSAgICAgICBkZXZfcHRyLT5kZXZfcmVzcF9sLCBkZXZfcHRyLT5kZXZfcmVzcF9wKTsKLQkJfSBlbHNlIHsKLQkJCVBERUJVRygiRGVxdWV1ZSBjYWxsZWQgZm9yIGRldmljZSAlZFxuIiwgaW5kZXgpOwotCQkJZHYgPSByZWNlaXZlX2Zyb21fQVAoaW5kZXgsIHo5MGNyeXB0LmNkeCwKLQkJCQkJICAgICBkZXZfcHRyLT5kZXZfcmVzcF9sLAotCQkJCQkgICAgIGRldl9wdHItPmRldl9yZXNwX3AsIHBzbWlkKTsKLQkJfQotCQlzd2l0Y2ggKGR2KSB7Ci0JCWNhc2UgREVWX1JFQ19FWENFUFRJT046Ci0JCQlydiA9IFJFQ19GQVRBTF9FUlJPUjsKLQkJCXo5MGNyeXB0LnRlcm1pbmF0aW5nID0gMTsKLQkJCVBSSU5US0MoIkV4Y2VwdGlvbiBpbiByZWNlaXZlIGZyb20gZGV2aWNlICVkXG4iLAotCQkJCWluZGV4KTsKLQkJCWJyZWFrOwotCQljYXNlIERFVl9PTkxJTkU6Ci0JCQlydiA9IDA7Ci0JCQlicmVhazsKLQkJY2FzZSBERVZfRU1QVFk6Ci0JCQlydiA9IFJFQ19FTVBUWTsKLQkJCWJyZWFrOwotCQljYXNlIERFVl9OT19XT1JLOgotCQkJcnYgPSBSRUNfTk9fV09SSzsKLQkJCWJyZWFrOwotCQljYXNlIERFVl9CQURfTUVTU0FHRToKLQkJY2FzZSBERVZfR09ORToKLQkJY2FzZSBSRUNfSEFSRFdBUl9FUlI6Ci0JCWRlZmF1bHQ6Ci0JCQlydiA9IFJFQ19OT19SRVNQT05TRTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChydikKLQkJCWJyZWFrOwotCQlpZiAoZGV2X3B0ci0+ZGV2X2NhbGxlcl9jb3VudCA8PSAwKSB7Ci0JCQlydiA9IFJFQ19VU0VSX0dPTkU7Ci0JCQlicmVhazsKLQkgICAgICAgIH0KLQotCQlsaXN0X2Zvcl9lYWNoX3NhZmUocHRyLCB0cHRyLCAmZGV2X3B0ci0+ZGV2X2NhbGxlcl9saXN0KSB7Ci0JCQljYWxsZXJfcCA9IGxpc3RfZW50cnkocHRyLCBzdHJ1Y3QgY2FsbGVyLCBjYWxsZXJfbGlzdGUpOwotCQkJaWYgKCFtZW1jbXAoY2FsbGVyX3AtPmNhbGxlcl9pZCwgcHNtaWQsCi0JCQkJICAgIHNpemVvZihjYWxsZXJfcC0+Y2FsbGVyX2lkKSkpIHsKLQkJCQlpZiAoIWxpc3RfZW1wdHkoJmNhbGxlcl9wLT5jYWxsZXJfbGlzdGUpKSB7Ci0JCQkJCWxpc3RfZGVsX2luaXQocHRyKTsKLQkJCQkJZGV2X3B0ci0+ZGV2X2NhbGxlcl9jb3VudC0tOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQljYWxsZXJfcCA9IDA7Ci0JCX0KLQkJaWYgKCFjYWxsZXJfcCkgewotCQkJUFJJTlRLVygiVW5hYmxlIHRvIGxvY2F0ZSBQU01JRCAlMDJYJTAyWCUwMlglMDJYJTAyWCIKLQkJCQkiJTAyWCUwMlglMDJYIGluIGRldmljZSBsaXN0XG4iLAotCQkJCXBzbWlkWzBdLCBwc21pZFsxXSwgcHNtaWRbMl0sIHBzbWlkWzNdLAotCQkJCXBzbWlkWzRdLCBwc21pZFs1XSwgcHNtaWRbNl0sIHBzbWlkWzddKTsKLQkJCXJ2ID0gUkVDX1VTRVJfR09ORTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJUERFQlVHKCJjYWxsZXJfcCBhZnRlciBzdWNjZXNzZnVsIHJlY2VpdmU6ICVwXG4iLCBjYWxsZXJfcCk7Ci0JCXJ2ID0gY29udmVydF9yZXNwb25zZShkZXZfcHRyLT5kZXZfcmVzcF9wLAotCQkJCSAgICAgIGNhbGxlcl9wLT5jYWxsZXJfYnVmX3AsIGJ1ZmZfbGVuX3AsIGJ1ZmYpOwotCQlzd2l0Y2ggKHJ2KSB7Ci0JCWNhc2UgUkVDX1VTRV9QQ0lDQToKLQkJCWJyZWFrOwotCQljYXNlIFJFQ19PUEVSQU5EX0lOVjoKLQkJY2FzZSBSRUNfT1BFUkFORF9TSVpFOgotCQljYXNlIFJFQ19FVkVOX01PRDoKLQkJY2FzZSBSRUNfSU5WQUxJRF9QQUQ6Ci0JCQlQREVCVUcoImRldmljZSAlZDogJ3VzZXIgZXJyb3InICVkXG4iLCBpbmRleCwgcnYpOwotCQkJYnJlYWs7Ci0JCWNhc2UgV1JPTkdfREVWSUNFX1RZUEU6Ci0JCWNhc2UgUkVDX0hBUkRXQVJfRVJSOgotCQljYXNlIFJFQ19CQURfTUVTU0FHRToKLQkJCVBSSU5US1coImRldmljZSAlZDogaGFyZHdhcmUgZXJyb3IgJWRcbiIsIGluZGV4LCBydik7Ci0JCQlydiA9IFJFQ19OT19SRVNQT05TRTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJUERFQlVHKCJkZXZpY2UgJWQ6IHJ2ID0gJWRcbiIsIGluZGV4LCBydik7Ci0JCQlicmVhazsKLQkJfQotCX0gd2hpbGUgKDApOwotCi0Jc3dpdGNoIChydikgewotCWNhc2UgMDoKLQkJUERFQlVHKCJTdWNjZXNzZnVsIHJlY2VpdmUgZnJvbSBkZXZpY2UgJWRcbiIsIGluZGV4KTsKLQkJaWNhTXNnX3AgPSAoc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqKWNhbGxlcl9wLT5jYWxsZXJfYnVmX3A7Ci0JCSpkZXN0X3BfcCA9IGljYU1zZ19wLT5vdXRwdXRkYXRhOwotCQlpZiAoKmJ1ZmZfbGVuX3AgPT0gMCkKLQkJCVBSSU5USygiWmVybyAqYnVmZl9sZW5fcFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgUkVDX05PX1JFU1BPTlNFOgotCQlQUklOVEtXKCJSZW1vdmluZyBkZXZpY2UgJWQgZnJvbSBhdmFpbGFiaWxpdHlcbiIsIGluZGV4KTsKLQkJcmVtb3ZlX2RldmljZShkZXZfcHRyKTsKLQkJYnJlYWs7Ci0JfQotCi0JaWYgKGNhbGxlcl9wKQotCQl1bmJ1aWxkX2NhbGxlcihkZXZfcHRyLCBjYWxsZXJfcCk7Ci0KLQlyZXR1cm4gcnY7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaGVscGVyX3NlbmRfd29yayhpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IHdvcmtfZWxlbWVudCAqcnFfcDsKLQlpbnQgcnY7Ci0KLQlpZiAobGlzdF9lbXB0eSgmcmVxdWVzdF9saXN0KSkKLQkJcmV0dXJuOwotCXJlcXVlc3RxX2NvdW50LS07Ci0JcnFfcCA9IGxpc3RfZW50cnkocmVxdWVzdF9saXN0Lm5leHQsIHN0cnVjdCB3b3JrX2VsZW1lbnQsIGxpc3RlKTsKLQlsaXN0X2RlbF9pbml0KCZycV9wLT5saXN0ZSk7Ci0JcnFfcC0+YXVkaXRbMV0gfD0gRlBfUkVNUkVRVUVTVDsKLQlpZiAocnFfcC0+ZGV2dHlwZSA9PSBTSFJUMkRFVlBUUihpbmRleCktPmRldl90eXBlKSB7Ci0JCXJxX3AtPmRldmluZGV4ID0gU0hSVDJMT05HKGluZGV4KTsKLQkJcnYgPSBzZW5kX3RvX2NyeXB0b19kZXZpY2UocnFfcCk7Ci0JCWlmIChydiA9PSAwKSB7Ci0JCQlycV9wLT5yZXF1ZXN0c2VudCA9IGppZmZpZXM7Ci0JCQlycV9wLT5hdWRpdFswXSB8PSBGUF9TRU5UOwotCQkJbGlzdF9hZGRfdGFpbCgmcnFfcC0+bGlzdGUsICZwZW5kaW5nX2xpc3QpOwotCQkJKytwZW5kaW5ncV9jb3VudDsKLQkJCXJxX3AtPmF1ZGl0WzBdIHw9IEZQX1BFTkRJTkc7Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKHJ2KSB7Ci0JCQljYXNlIFJFQ19PUEVSQU5EX0lOVjoKLQkJCWNhc2UgUkVDX09QRVJBTkRfU0laRToKLQkJCWNhc2UgUkVDX0VWRU5fTU9EOgotCQkJY2FzZSBSRUNfSU5WQUxJRF9QQUQ6Ci0JCQkJcnFfcC0+cmV0Y29kZSA9IC1FSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNFTl9OT1RfQVZBSUw6Ci0JCQljYXNlIFNFTl9SRVRSWToKLQkJCWNhc2UgUkVDX05PX1JFU1BPTlNFOgotCQkJZGVmYXVsdDoKLQkJCQlpZiAoejkwY3J5cHQubWFzay5zdF9jb3VudCA+IDEpCi0JCQkJCXJxX3AtPnJldGNvZGUgPQotCQkJCQkJLUVSRVNUQVJUU1lTOwotCQkJCWVsc2UKLQkJCQkJcnFfcC0+cmV0Y29kZSA9IC1FTk9ERVY7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlycV9wLT5zdGF0dXNbMF0gfD0gU1RBVF9GQUlMRUQ7Ci0JCQlycV9wLT5hdWRpdFsxXSB8PSBGUF9BV0FLRU5JTkc7Ci0JCQlhdG9taWNfc2V0KCZycV9wLT5hbGFybXJ1bmcsIDEpOwotCQkJd2FrZV91cCgmcnFfcC0+d2FpdHEpOwotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKHo5MGNyeXB0Lm1hc2suc3RfY291bnQgPiAxKQotCQkJcnFfcC0+cmV0Y29kZSA9IC1FUkVTVEFSVFNZUzsKLQkJZWxzZQotCQkJcnFfcC0+cmV0Y29kZSA9IC1FTk9ERVY7Ci0JCXJxX3AtPnN0YXR1c1swXSB8PSBTVEFUX0ZBSUxFRDsKLQkJcnFfcC0+YXVkaXRbMV0gfD0gRlBfQVdBS0VOSU5HOwotCQlhdG9taWNfc2V0KCZycV9wLT5hbGFybXJ1bmcsIDEpOwotCQl3YWtlX3VwKCZycV9wLT53YWl0cSk7Ci0JfQotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhlbHBlcl9oYW5kbGVfd29ya19lbGVtZW50KGludCBpbmRleCwgdW5zaWduZWQgY2hhciBwc21pZFs4XSwgaW50IHJjLAotCQkJICAgaW50IGJ1ZmZfbGVuLCB1bnNpZ25lZCBjaGFyICpidWZmLAotCQkJICAgdW5zaWduZWQgY2hhciBfX3VzZXIgKnJlc3BfYWRkcikKLXsKLQlzdHJ1Y3Qgd29ya19lbGVtZW50ICpwcV9wOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHIsICp0cHRyOwotCi0JcHFfcCA9IDA7Ci0JbGlzdF9mb3JfZWFjaF9zYWZlKGxwdHIsIHRwdHIsICZwZW5kaW5nX2xpc3QpIHsKLQkJcHFfcCA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IHdvcmtfZWxlbWVudCwgbGlzdGUpOwotCQlpZiAoIW1lbWNtcChwcV9wLT5jYWxsZXJfaWQsIHBzbWlkLCBzaXplb2YocHFfcC0+Y2FsbGVyX2lkKSkpIHsKLQkJCWxpc3RfZGVsX2luaXQobHB0cik7Ci0JCQlwZW5kaW5ncV9jb3VudC0tOwotCQkJcHFfcC0+YXVkaXRbMV0gfD0gRlBfTk9UUEVORElORzsKLQkJCWJyZWFrOwotCQl9Ci0JCXBxX3AgPSAwOwotCX0KLQotCWlmICghcHFfcCkgewotCQlQUklOVEsoImRldmljZSAlZCBoYXMgd29yayBidXQgbm8gY2FsbGVyIGV4aXN0cyBvbiBwZW5kaW5nIFFcbiIsCi0JCSAgICAgICBTSFJUMkxPTkcoaW5kZXgpKTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaCAocmMpIHsKLQkJY2FzZSAwOgotCQkJcHFfcC0+cmVzcF9idWZmX3NpemUgPSBidWZmX2xlbjsKLQkJCXBxX3AtPmF1ZGl0WzFdIHw9IEZQX1JFU1BTSVpFU0VUOwotCQkJaWYgKGJ1ZmZfbGVuKSB7Ci0JCQkJcHFfcC0+cmVzcF9hZGRyID0gcmVzcF9hZGRyOwotCQkJCXBxX3AtPmF1ZGl0WzFdIHw9IEZQX1JFU1BBRERSQ09QSUVEOwotCQkJCW1lbWNweShwcV9wLT5yZXNwX2J1ZmYsIGJ1ZmYsIGJ1ZmZfbGVuKTsKLQkJCQlwcV9wLT5hdWRpdFsxXSB8PSBGUF9SRVNQQlVGRkNPUElFRDsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFJFQ19PUEVSQU5EX0lOVjoKLQkJY2FzZSBSRUNfT1BFUkFORF9TSVpFOgotCQljYXNlIFJFQ19FVkVOX01PRDoKLQkJY2FzZSBSRUNfSU5WQUxJRF9QQUQ6Ci0JCQlQREVCVUcoIi1FSU5WQUwgYWZ0ZXIgYXBwbGljYXRpb24gZXJyb3IgJWRcbiIsIHJjKTsKLQkJCXBxX3AtPnJldGNvZGUgPSAtRUlOVkFMOwotCQkJcHFfcC0+c3RhdHVzWzBdIHw9IFNUQVRfRkFJTEVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVDX1VTRV9QQ0lDQToKLQkJCXBxX3AtPnJldGNvZGUgPSAtRVJFU1RBUlRTWVM7Ci0JCQlwcV9wLT5zdGF0dXNbMF0gfD0gU1RBVF9GQUlMRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBSRUNfTk9fUkVTUE9OU0U6Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoejkwY3J5cHQubWFzay5zdF9jb3VudCA+IDEpCi0JCQkJcHFfcC0+cmV0Y29kZSA9IC1FUkVTVEFSVFNZUzsKLQkJCWVsc2UKLQkJCQlwcV9wLT5yZXRjb2RlID0gLUVOT0RFVjsKLQkJCXBxX3AtPnN0YXR1c1swXSB8PSBTVEFUX0ZBSUxFRDsKLQkJCWJyZWFrOwotCX0KLQlpZiAoKHBxX3AtPnN0YXR1c1swXSAhPSBTVEFUX0ZBSUxFRCkgfHwgKHBxX3AtPnJldGNvZGUgIT0gLUVSRUxFQVNFRCkpIHsKLQkJcHFfcC0+YXVkaXRbMV0gfD0gRlBfQVdBS0VOSU5HOwotCQlhdG9taWNfc2V0KCZwcV9wLT5hbGFybXJ1bmcsIDEpOwotCQl3YWtlX3VwKCZwcV9wLT53YWl0cSk7Ci0JfQotfQotCi0vKioKLSAqIHJldHVybiBUUlVFIGlmIHRoZSB3b3JrIGVsZW1lbnQgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUgcXVldWUKLSAqLwotc3RhdGljIGlubGluZSBpbnQKLWhlbHBlcl9yZWNlaXZlX3JjKGludCBpbmRleCwgaW50ICpyY19wKQotewotCXN3aXRjaCAoKnJjX3ApIHsKLQljYXNlIDA6Ci0JY2FzZSBSRUNfT1BFUkFORF9JTlY6Ci0JY2FzZSBSRUNfT1BFUkFORF9TSVpFOgotCWNhc2UgUkVDX0VWRU5fTU9EOgotCWNhc2UgUkVDX0lOVkFMSURfUEFEOgotCWNhc2UgUkVDX1VTRV9QQ0lDQToKLQkJYnJlYWs7Ci0KLQljYXNlIFJFQ19CVVNZOgotCWNhc2UgUkVDX05PX1dPUks6Ci0JY2FzZSBSRUNfRU1QVFk6Ci0JY2FzZSBSRUNfUkVUUllfREVWOgotCWNhc2UgUkVDX0ZBVEFMX0VSUk9SOgotCQlyZXR1cm4gMDsKLQotCWNhc2UgUkVDX05PX1JFU1BPTlNFOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCVBSSU5USygicmMgJWQsIGRldmljZSAlZCBjb252ZXJ0ZWQgdG8gUkVDX05PX1JFU1BPTlNFXG4iLAotCQkgICAgICAgKnJjX3AsIFNIUlQyTE9ORyhpbmRleCkpOwotCQkqcmNfcCA9IFJFQ19OT19SRVNQT05TRTsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXo5MGNyeXB0X3NjaGVkdWxlX3JlYWRlcl90aW1lcih2b2lkKQotewotCWlmICh0aW1lcl9wZW5kaW5nKCZyZWFkZXJfdGltZXIpKQotCQlyZXR1cm47Ci0JaWYgKG1vZF90aW1lcigmcmVhZGVyX3RpbWVyLCBqaWZmaWVzKyhSRUFERVJUSU1FKkhaLzEwMDApKSAhPSAwKQotCQlQUklOVEsoIlRpbWVyIHBlbmRpbmcgd2hpbGUgbW9kaWZ5aW5nIHJlYWRlciB0aW1lclxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi16OTBjcnlwdF9yZWFkZXJfdGFzayh1bnNpZ25lZCBsb25nIHB0cikKLXsKLQlpbnQgd29ya2F2YWlsLCBpbmRleCwgcmMsIGJ1ZmZfbGVuOwotCXVuc2lnbmVkIGNoYXIJcHNtaWRbOF07Ci0JdW5zaWduZWQgY2hhciBfX3VzZXIgKnJlc3BfYWRkcjsKLQlzdGF0aWMgdW5zaWduZWQgY2hhciBidWZmWzEwMjRdOwotCi0JLyoqCi0JICogd2UgdXNlIHdvcmthdmFpbCA9IDIgdG8gZW5zdXJlIDIgcGFzc2VzIHdpdGggbm90aGluZyBkZXF1ZXVlZCBiZWZvcmUKLQkgKiBleGl0aW5nIHRoZSBsb29wLiBJZiAocGVuZGluZ3FfY291bnQrcmVxdWVzdHFfY291bnQpID09IDAgYWZ0ZXIgdGhlCi0JICogbG9vcCwgdGhlcmUgaXMgbm8gd29yayByZW1haW5pbmcgb24gdGhlIHF1ZXVlcy4KLQkgKi8KLQlyZXNwX2FkZHIgPSAwOwotCXdvcmthdmFpbCA9IDI7Ci0JYnVmZl9sZW4gPSAwOwotCXdoaWxlICh3b3JrYXZhaWwpIHsKLQkJd29ya2F2YWlsLS07Ci0JCXJjID0gMDsKLQkJc3Bpbl9sb2NrX2lycSgmcXVldWVzcGlubG9jayk7Ci0JCW1lbXNldChidWZmLCAweDAwLCBzaXplb2YoYnVmZikpOwotCi0JCS8qIERlcXVldWUgb25jZSBmcm9tIGVhY2ggZGV2aWNlIGluIHJvdW5kIHJvYmluLiAqLwotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCB6OTBjcnlwdC5tYXNrLnN0X2NvdW50OyBpbmRleCsrKSB7Ci0JCQlQREVCVUcoIkFib3V0IHRvIHJlY2VpdmUuXG4iKTsKLQkJCXJjID0gcmVjZWl2ZV9mcm9tX2NyeXB0b19kZXZpY2UoU0hSVDJMT05HKGluZGV4KSwKLQkJCQkJCQlwc21pZCwKLQkJCQkJCQkmYnVmZl9sZW4sCi0JCQkJCQkJYnVmZiwKLQkJCQkJCQkmcmVzcF9hZGRyKTsKLQkJCVBERUJVRygiRGVxdWV1ZWQ6IHJjID0gJWQuXG4iLCByYyk7Ci0KLQkJCWlmIChoZWxwZXJfcmVjZWl2ZV9yYyhpbmRleCwgJnJjKSkgewotCQkJCWlmIChyYyAhPSBSRUNfTk9fUkVTUE9OU0UpIHsKLQkJCQkJaGVscGVyX3NlbmRfd29yayhpbmRleCk7Ci0JCQkJCXdvcmthdmFpbCA9IDI7Ci0JCQkJfQotCi0JCQkJaGVscGVyX2hhbmRsZV93b3JrX2VsZW1lbnQoaW5kZXgsIHBzbWlkLCByYywKLQkJCQkJCQkgICBidWZmX2xlbiwgYnVmZiwKLQkJCQkJCQkgICByZXNwX2FkZHIpOwotCQkJfQotCi0JCQlpZiAocmMgPT0gUkVDX0ZBVEFMX0VSUk9SKQotCQkJCVBSSU5US1coIlJFQ19GQVRBTF9FUlJPUiBmcm9tIGRldmljZSAlZCFcbiIsCi0JCQkJCVNIUlQyTE9ORyhpbmRleCkpOwotCQl9Ci0JCXNwaW5fdW5sb2NrX2lycSgmcXVldWVzcGlubG9jayk7Ci0JfQotCi0JaWYgKHBlbmRpbmdxX2NvdW50ICsgcmVxdWVzdHFfY291bnQpCi0JCXo5MGNyeXB0X3NjaGVkdWxlX3JlYWRlcl90aW1lcigpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXo5MGNyeXB0X3NjaGVkdWxlX2NvbmZpZ190YXNrKHVuc2lnbmVkIGludCBleHBpcmF0aW9uKQotewotCWlmICh0aW1lcl9wZW5kaW5nKCZjb25maWdfdGltZXIpKQotCQlyZXR1cm47Ci0JaWYgKG1vZF90aW1lcigmY29uZmlnX3RpbWVyLCBqaWZmaWVzKyhleHBpcmF0aW9uKkhaKSkgIT0gMCkKLQkJUFJJTlRLKCJUaW1lciBwZW5kaW5nIHdoaWxlIG1vZGlmeWluZyBjb25maWcgdGltZXJcbiIpOwotfQotCi1zdGF0aWMgdm9pZAotejkwY3J5cHRfY29uZmlnX3Rhc2sodW5zaWduZWQgbG9uZyBwdHIpCi17Ci0JaW50IHJjOwotCi0JUERFQlVHKCJqaWZmaWVzICVsZFxuIiwgamlmZmllcyk7Ci0KLQlpZiAoKHJjID0gcmVmcmVzaF96OTBjcnlwdCgmejkwY3J5cHQuY2R4KSkpCi0JCVBSSU5USygiRXJyb3IgJWQgZGV0ZWN0ZWQgaW4gcmVmcmVzaF96OTBjcnlwdC5cbiIsIHJjKTsKLQkvKiBJZiByZXR1cm4gd2FzIGZhdGFsLCBkb24ndCBib3RoZXIgcmVjb25maWd1cmluZyAqLwotCWlmICgocmMgIT0gVFNRX0ZBVEFMX0VSUk9SKSAmJiAocmMgIT0gUlNRX0ZBVEFMX0VSUk9SKSkKLQkJejkwY3J5cHRfc2NoZWR1bGVfY29uZmlnX3Rhc2soQ09ORklHVElNRSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotejkwY3J5cHRfc2NoZWR1bGVfY2xlYW51cF90YXNrKHZvaWQpCi17Ci0JaWYgKHRpbWVyX3BlbmRpbmcoJmNsZWFudXBfdGltZXIpKQotCQlyZXR1cm47Ci0JaWYgKG1vZF90aW1lcigmY2xlYW51cF90aW1lciwgamlmZmllcysoQ0xFQU5VUFRJTUUqSFopKSAhPSAwKQotCQlQUklOVEsoIlRpbWVyIHBlbmRpbmcgd2hpbGUgbW9kaWZ5aW5nIGNsZWFudXAgdGltZXJcbiIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWhlbHBlcl9kcmFpbl9xdWV1ZXModm9pZCkKLXsKLQlzdHJ1Y3Qgd29ya19lbGVtZW50ICpwcV9wOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHIsICp0cHRyOwotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKGxwdHIsIHRwdHIsICZwZW5kaW5nX2xpc3QpIHsKLQkJcHFfcCA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IHdvcmtfZWxlbWVudCwgbGlzdGUpOwotCQlwcV9wLT5yZXRjb2RlID0gLUVOT0RFVjsKLQkJcHFfcC0+c3RhdHVzWzBdIHw9IFNUQVRfRkFJTEVEOwotCQl1bmJ1aWxkX2NhbGxlcihMT05HMkRFVlBUUihwcV9wLT5kZXZpbmRleCksCi0JCQkgICAgICAgKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKTsKLQkJbGlzdF9kZWxfaW5pdChscHRyKTsKLQkJcGVuZGluZ3FfY291bnQtLTsKLQkJcHFfcC0+YXVkaXRbMV0gfD0gRlBfTk9UUEVORElORzsKLQkJcHFfcC0+YXVkaXRbMV0gfD0gRlBfQVdBS0VOSU5HOwotCQlhdG9taWNfc2V0KCZwcV9wLT5hbGFybXJ1bmcsIDEpOwotCQl3YWtlX3VwKCZwcV9wLT53YWl0cSk7Ci0JfQotCi0JbGlzdF9mb3JfZWFjaF9zYWZlKGxwdHIsIHRwdHIsICZyZXF1ZXN0X2xpc3QpIHsKLQkJcHFfcCA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IHdvcmtfZWxlbWVudCwgbGlzdGUpOwotCQlwcV9wLT5yZXRjb2RlID0gLUVOT0RFVjsKLQkJcHFfcC0+c3RhdHVzWzBdIHw9IFNUQVRfRkFJTEVEOwotCQlsaXN0X2RlbF9pbml0KGxwdHIpOwotCQlyZXF1ZXN0cV9jb3VudC0tOwotCQlwcV9wLT5hdWRpdFsxXSB8PSBGUF9SRU1SRVFVRVNUOwotCQlwcV9wLT5hdWRpdFsxXSB8PSBGUF9BV0FLRU5JTkc7Ci0JCWF0b21pY19zZXQoJnBxX3AtPmFsYXJtcnVuZywgMSk7Ci0JCXdha2VfdXAoJnBxX3AtPndhaXRxKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotaGVscGVyX3RpbWVvdXRfcmVxdWVzdHModm9pZCkKLXsKLQlzdHJ1Y3Qgd29ya19lbGVtZW50ICpwcV9wOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxwdHIsICp0cHRyOwotCWxvbmcgdGltZWxpbWl0OwotCi0JdGltZWxpbWl0ID0gamlmZmllcyAtIChDTEVBTlVQVElNRSAqIEhaKTsKLQkvKiBUaGUgbGlzdCBpcyBpbiBzdHJpY3QgY2hyb25vbG9naWNhbCBvcmRlciAqLwotCWxpc3RfZm9yX2VhY2hfc2FmZShscHRyLCB0cHRyLCAmcGVuZGluZ19saXN0KSB7Ci0JCXBxX3AgPSBsaXN0X2VudHJ5KGxwdHIsIHN0cnVjdCB3b3JrX2VsZW1lbnQsIGxpc3RlKTsKLQkJaWYgKHBxX3AtPnJlcXVlc3RzZW50ID49IHRpbWVsaW1pdCkKLQkJCWJyZWFrOwotCQlQUklOVEtXKCJQdXJnaW5nKFBRKSBQU01JRCAlMDJYJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYJTAyWFxuIiwKLQkJICAgICAgICgoc3RydWN0IGNhbGxlciAqKXBxX3AtPnJlcXVlc3RwdHIpLT5jYWxsZXJfaWRbMF0sCi0JCSAgICAgICAoKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKS0+Y2FsbGVyX2lkWzFdLAotCQkgICAgICAgKChzdHJ1Y3QgY2FsbGVyICopcHFfcC0+cmVxdWVzdHB0ciktPmNhbGxlcl9pZFsyXSwKLQkJICAgICAgICgoc3RydWN0IGNhbGxlciAqKXBxX3AtPnJlcXVlc3RwdHIpLT5jYWxsZXJfaWRbM10sCi0JCSAgICAgICAoKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKS0+Y2FsbGVyX2lkWzRdLAotCQkgICAgICAgKChzdHJ1Y3QgY2FsbGVyICopcHFfcC0+cmVxdWVzdHB0ciktPmNhbGxlcl9pZFs1XSwKLQkJICAgICAgICgoc3RydWN0IGNhbGxlciAqKXBxX3AtPnJlcXVlc3RwdHIpLT5jYWxsZXJfaWRbNl0sCi0JCSAgICAgICAoKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKS0+Y2FsbGVyX2lkWzddKTsKLQkJcHFfcC0+cmV0Y29kZSA9IC1FVElNRU9VVDsKLQkJcHFfcC0+c3RhdHVzWzBdIHw9IFNUQVRfRkFJTEVEOwotCQkvKiBnZXQgdGhpcyBvZmYgYW55IGNhbGxlciBxdWV1ZSBpdCBtYXkgYmUgb24gKi8KLQkJdW5idWlsZF9jYWxsZXIoTE9ORzJERVZQVFIocHFfcC0+ZGV2aW5kZXgpLAotCQkJICAgICAgIChzdHJ1Y3QgY2FsbGVyICopIHBxX3AtPnJlcXVlc3RwdHIpOwotCQlsaXN0X2RlbF9pbml0KGxwdHIpOwotCQlwZW5kaW5ncV9jb3VudC0tOwotCQlwcV9wLT5hdWRpdFsxXSB8PSBGUF9USU1FRE9VVDsKLQkJcHFfcC0+YXVkaXRbMV0gfD0gRlBfTk9UUEVORElORzsKLQkJcHFfcC0+YXVkaXRbMV0gfD0gRlBfQVdBS0VOSU5HOwotCQlhdG9taWNfc2V0KCZwcV9wLT5hbGFybXJ1bmcsIDEpOwotCQl3YWtlX3VwKCZwcV9wLT53YWl0cSk7Ci0JfQotCi0JLyoqCi0JICogSWYgcGVuZGluZyBjb3VudCBpcyB6ZXJvLCBpdGVtcyBsZWZ0IG9uIHRoZSByZXF1ZXN0IHF1ZXVlIG1heQotCSAqIG5ldmVyIGJlIHByb2Nlc3NlZC4KLQkgKi8KLQlpZiAocGVuZGluZ3FfY291bnQgPD0gMCkgewotCQlsaXN0X2Zvcl9lYWNoX3NhZmUobHB0ciwgdHB0ciwgJnJlcXVlc3RfbGlzdCkgewotCQkJcHFfcCA9IGxpc3RfZW50cnkobHB0ciwgc3RydWN0IHdvcmtfZWxlbWVudCwgbGlzdGUpOwotCQkJaWYgKHBxX3AtPnJlcXVlc3RzZW50ID49IHRpbWVsaW1pdCkKLQkJCQlicmVhazsKLQkJUFJJTlRLVygiUHVyZ2luZyhSUSkgUFNNSUQgJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYJTAyWCUwMlhcbiIsCi0JCSAgICAgICAoKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKS0+Y2FsbGVyX2lkWzBdLAotCQkgICAgICAgKChzdHJ1Y3QgY2FsbGVyICopcHFfcC0+cmVxdWVzdHB0ciktPmNhbGxlcl9pZFsxXSwKLQkJICAgICAgICgoc3RydWN0IGNhbGxlciAqKXBxX3AtPnJlcXVlc3RwdHIpLT5jYWxsZXJfaWRbMl0sCi0JCSAgICAgICAoKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKS0+Y2FsbGVyX2lkWzNdLAotCQkgICAgICAgKChzdHJ1Y3QgY2FsbGVyICopcHFfcC0+cmVxdWVzdHB0ciktPmNhbGxlcl9pZFs0XSwKLQkJICAgICAgICgoc3RydWN0IGNhbGxlciAqKXBxX3AtPnJlcXVlc3RwdHIpLT5jYWxsZXJfaWRbNV0sCi0JCSAgICAgICAoKHN0cnVjdCBjYWxsZXIgKilwcV9wLT5yZXF1ZXN0cHRyKS0+Y2FsbGVyX2lkWzZdLAotCQkgICAgICAgKChzdHJ1Y3QgY2FsbGVyICopcHFfcC0+cmVxdWVzdHB0ciktPmNhbGxlcl9pZFs3XSk7Ci0JCQlwcV9wLT5yZXRjb2RlID0gLUVUSU1FT1VUOwotCQkJcHFfcC0+c3RhdHVzWzBdIHw9IFNUQVRfRkFJTEVEOwotCQkJbGlzdF9kZWxfaW5pdChscHRyKTsKLQkJCXJlcXVlc3RxX2NvdW50LS07Ci0JCQlwcV9wLT5hdWRpdFsxXSB8PSBGUF9USU1FRE9VVDsKLQkJCXBxX3AtPmF1ZGl0WzFdIHw9IEZQX1JFTVJFUVVFU1Q7Ci0JCQlwcV9wLT5hdWRpdFsxXSB8PSBGUF9BV0FLRU5JTkc7Ci0JCQlhdG9taWNfc2V0KCZwcV9wLT5hbGFybXJ1bmcsIDEpOwotCQkJd2FrZV91cCgmcHFfcC0+d2FpdHEpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotejkwY3J5cHRfY2xlYW51cF90YXNrKHVuc2lnbmVkIGxvbmcgcHRyKQotewotCVBERUJVRygiamlmZmllcyAlbGRcbiIsIGppZmZpZXMpOwotCXNwaW5fbG9ja19pcnEoJnF1ZXVlc3BpbmxvY2spOwotCWlmICh6OTBjcnlwdC5tYXNrLnN0X2NvdW50IDw9IDApIC8vIG5vIGRldmljZXMhCi0JCWhlbHBlcl9kcmFpbl9xdWV1ZXMoKTsKLQllbHNlCi0JCWhlbHBlcl90aW1lb3V0X3JlcXVlc3RzKCk7Ci0Jc3Bpbl91bmxvY2tfaXJxKCZxdWV1ZXNwaW5sb2NrKTsKLQl6OTBjcnlwdF9zY2hlZHVsZV9jbGVhbnVwX3Rhc2soKTsKLX0KLQotc3RhdGljIHZvaWQKLXo5MGNyeXB0X3NjaGVkdWxlX3JlYWRlcl90YXNrKHVuc2lnbmVkIGxvbmcgcHRyKQotewotCXRhc2tsZXRfc2NoZWR1bGUoJnJlYWRlcl90YXNrbGV0KTsKLX0KLQotLyoqCi0gKiBMb3dsZXZlbCBGdW5jdGlvbnM6Ci0gKgotICogICBjcmVhdGVfejkwY3J5cHQ6ICBjcmVhdGVzIGFuZCBpbml0aWFsaXplcyBiYXNpYyBkYXRhIHN0cnVjdHVyZXMKLSAqICAgcmVmcmVzaF96OTBjcnlwdDoJcmUtaW5pdGlhbGl6ZXMgYmFzaWMgZGF0YSBzdHJ1Y3R1cmVzCi0gKiAgIGZpbmRfY3J5cHRvX2RldmljZXM6IHJldHVybnMgYSBjb3VudCBhbmQgbWFzayBvZiBoYXJkd2FyZSBzdGF0dXMKLSAqICAgY3JlYXRlX2NyeXB0b19kZXZpY2U6ICBidWlsZHMgdGhlIGRlc2NyaXB0b3IgZm9yIGEgZGV2aWNlCi0gKiAgIGRlc3Ryb3lfY3J5cHRvX2RldmljZTogIHVuYWxsb2NhdGVzIHRoZSBkZXNjcmlwdG9yIGZvciBhIGRldmljZQotICogICBkZXN0cm95X3o5MGNyeXB0OglkcmFpbnMgYWxsIHdvcmssIHVuYWxsb2NhdGVzIHN0cnVjdHMKLSAqLwotCi0vKioKLSAqIGJ1aWxkIHRoZSB6OTBjcnlwdCByb290IHN0cnVjdHVyZSB1c2luZyB0aGUgZ2l2ZW4gZG9tYWluIGluZGV4Ci0gKi8KLXN0YXRpYyBpbnQKLWNyZWF0ZV96OTBjcnlwdChpbnQgKmNkeF9wKQotewotCXN0cnVjdCBoZHdhcmVfYmxvY2sgKmhkd2FyZV9ibGtfcDsKLQotCW1lbXNldCgmejkwY3J5cHQsIDB4MDAsIHNpemVvZihzdHJ1Y3QgejkwY3J5cHQpKTsKLQl6OTBjcnlwdC5kb21haW5fZXN0YWJsaXNoZWQgPSAwOwotCXo5MGNyeXB0LmxlbiA9IHNpemVvZihzdHJ1Y3QgejkwY3J5cHQpOwotCXo5MGNyeXB0Lm1heF9jb3VudCA9IFo5MENSWVBUX05VTV9ERVZTOwotCXo5MGNyeXB0LmNkeCA9ICpjZHhfcDsKLQotCWhkd2FyZV9ibGtfcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHdhcmVfYmxvY2spLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWhkd2FyZV9ibGtfcCkgewotCQlQREVCVUcoImttYWxsb2MgZm9yIGhhcmR3YXJlIGJsb2NrIGZhaWxlZFxuIik7Ci0JCXJldHVybiBFTk9NRU07Ci0JfQotCXo5MGNyeXB0Lmhkd2FyZV9pbmZvID0gaGR3YXJlX2Jsa19wOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1oZWxwZXJfc2Nhbl9kZXZpY2VzKGludCBjZHhfYXJyYXlbMTZdLCBpbnQgKmNkeF9wLCBpbnQgKmNvcnJlY3RfY2R4X2ZvdW5kKQotewotCWVudW0gaGRzdGF0IGhkX3N0YXQ7Ci0JaW50IHFfZGVwdGgsIGRldl90eXBlOwotCWludCBpbmR4LCBjaGtkb20sIG51bWRvbWFpbnM7Ci0KLQlxX2RlcHRoID0gZGV2X3R5cGUgPSBudW1kb21haW5zID0gMDsKLQlmb3IgKGNoa2RvbSA9IDA7IGNoa2RvbSA8PSAxNTsgY2R4X2FycmF5W2Noa2RvbSsrXSA9IC0xKTsKLQlmb3IgKGluZHggPSAwOyBpbmR4IDwgejkwY3J5cHQubWF4X2NvdW50OyBpbmR4KyspIHsKLQkJaGRfc3RhdCA9IEhEX05PVF9USEVSRTsKLQkJbnVtZG9tYWlucyA9IDA7Ci0JCWZvciAoY2hrZG9tID0gMDsgY2hrZG9tIDw9IDE1OyBjaGtkb20rKykgewotCQkJaGRfc3RhdCA9IHF1ZXJ5X29ubGluZShpbmR4LCBjaGtkb20sIE1BWF9SRVNFVCwKLQkJCQkJICAgICAgICZxX2RlcHRoLCAmZGV2X3R5cGUpOwotCQkJaWYgKGhkX3N0YXQgPT0gSERfVFNRX0VYQ0VQVElPTikgewotCQkJCXo5MGNyeXB0LnRlcm1pbmF0aW5nID0gMTsKLQkJCQlQUklOVEtDKCJleGNlcHRpb24gdGFrZW4hXG4iKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChoZF9zdGF0ID09IEhEX09OTElORSkgewotCQkJCWNkeF9hcnJheVtudW1kb21haW5zKytdID0gY2hrZG9tOwotCQkJCWlmICgqY2R4X3AgPT0gY2hrZG9tKSB7Ci0JCQkJCSpjb3JyZWN0X2NkeF9mb3VuZCAgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKCgqY29ycmVjdF9jZHhfZm91bmQgPT0gMSkgfHwgKG51bWRvbWFpbnMgIT0gMCkpCi0JCQlicmVhazsKLQkJaWYgKHo5MGNyeXB0LnRlcm1pbmF0aW5nKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBudW1kb21haW5zOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotcHJvYmVfY3J5cHRvX2RvbWFpbihpbnQgKmNkeF9wKQotewotCWludCBjZHhfYXJyYXlbMTZdOwotCWNoYXIgY2R4X2FycmF5X3RleHRbNTNdLCB0ZW1wWzVdOwotCWludCBjb3JyZWN0X2NkeF9mb3VuZCwgbnVtZG9tYWluczsKLQotCWNvcnJlY3RfY2R4X2ZvdW5kID0gMDsKLQludW1kb21haW5zID0gaGVscGVyX3NjYW5fZGV2aWNlcyhjZHhfYXJyYXksIGNkeF9wLCAmY29ycmVjdF9jZHhfZm91bmQpOwotCi0JaWYgKHo5MGNyeXB0LnRlcm1pbmF0aW5nKQotCQlyZXR1cm4gVFNRX0ZBVEFMX0VSUk9SOwotCi0JaWYgKGNvcnJlY3RfY2R4X2ZvdW5kKQotCQlyZXR1cm4gMDsKLQotCWlmIChudW1kb21haW5zID09IDApIHsKLQkJUFJJTlRLVygiVW5hYmxlIHRvIGZpbmQgY3J5cHRvIGRvbWFpbjogTm8gZGV2aWNlcyBmb3VuZFxuIik7Ci0JCXJldHVybiBaOTBDX05PX0RFVklDRVM7Ci0JfQotCi0JaWYgKG51bWRvbWFpbnMgPT0gMSkgewotCQlpZiAoKmNkeF9wID09IC0xKSB7Ci0JCQkqY2R4X3AgPSBjZHhfYXJyYXlbMF07Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlQUklOVEtXKCJpbmNvcnJlY3QgZG9tYWluOiBzcGVjaWZpZWQgPSAlZCwgZm91bmQgPSAlZFxuIiwKLQkJICAgICAgICpjZHhfcCwgY2R4X2FycmF5WzBdKTsKLQkJcmV0dXJuIFo5MENfSU5DT1JSRUNUX0RPTUFJTjsKLQl9Ci0KLQludW1kb21haW5zLS07Ci0Jc3ByaW50ZihjZHhfYXJyYXlfdGV4dCwgIiVkIiwgY2R4X2FycmF5W251bWRvbWFpbnNdKTsKLQl3aGlsZSAobnVtZG9tYWlucykgewotCQludW1kb21haW5zLS07Ci0JCXNwcmludGYodGVtcCwgIiwgJWQiLCBjZHhfYXJyYXlbbnVtZG9tYWluc10pOwotCQlzdHJjYXQoY2R4X2FycmF5X3RleHQsIHRlbXApOwotCX0KLQotCVBSSU5US1coImFtYmlndW91cyBkb21haW4gZGV0ZWN0ZWQ6IHNwZWNpZmllZCA9ICVkLCBmb3VuZCBhcnJheSA9ICVzXG4iLAotCQkqY2R4X3AsIGNkeF9hcnJheV90ZXh0KTsKLQlyZXR1cm4gWjkwQ19BTUJJR1VPVVNfRE9NQUlOOwotfQotCi1zdGF0aWMgaW50Ci1yZWZyZXNoX3o5MGNyeXB0KGludCAqY2R4X3ApCi17Ci0JaW50IGksIGosIGluZHgsIHJ2OwotCXN0YXRpYyBzdHJ1Y3Qgc3RhdHVzIGxvY2FsX21hc2s7Ci0Jc3RydWN0IGRldmljZSAqZGV2UHRyOwotCXVuc2lnbmVkIGNoYXIgb2xkU3RhdCwgbmV3U3RhdDsKLQlpbnQgcmV0dXJuX3VuY2hhbmdlZDsKLQotCWlmICh6OTBjcnlwdC5sZW4gIT0gc2l6ZW9mKHo5MGNyeXB0KSkKLQkJcmV0dXJuIEVOT1RJTklUOwotCWlmICh6OTBjcnlwdC50ZXJtaW5hdGluZykKLQkJcmV0dXJuIFRTUV9GQVRBTF9FUlJPUjsKLQlydiA9IDA7Ci0JaWYgKCF6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2suc3RfY291bnQgJiYKLQkgICAgIXo5MGNyeXB0LmRvbWFpbl9lc3RhYmxpc2hlZCkgewotCQlydiA9IHByb2JlX2NyeXB0b19kb21haW4oY2R4X3ApOwotCQlpZiAoejkwY3J5cHQudGVybWluYXRpbmcpCi0JCQlyZXR1cm4gVFNRX0ZBVEFMX0VSUk9SOwotCQlpZiAocnYgPT0gWjkwQ19OT19ERVZJQ0VTKQotCQkJcmV0dXJuIDA7IC8vIHRyeSBsYXRlcgotCQlpZiAocnYpCi0JCQlyZXR1cm4gcnY7Ci0JCXo5MGNyeXB0LmNkeCA9ICpjZHhfcDsKLQkJejkwY3J5cHQuZG9tYWluX2VzdGFibGlzaGVkID0gMTsKLQl9Ci0JcnYgPSBmaW5kX2NyeXB0b19kZXZpY2VzKCZsb2NhbF9tYXNrKTsKLQlpZiAocnYpIHsKLQkJUFJJTlRLKCJmaW5kIGNyeXB0byBkZXZpY2VzIHJldHVybmVkICVkXG4iLCBydik7Ci0JCXJldHVybiBydjsKLQl9Ci0JaWYgKCFtZW1jbXAoJmxvY2FsX21hc2ssICZ6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2ssCi0JCSAgICBzaXplb2Yoc3RydWN0IHN0YXR1cykpKSB7Ci0JCXJldHVybl91bmNoYW5nZWQgPSAxOwotCQlmb3IgKGkgPSAwOyBpIDwgWjkwQ1JZUFRfTlVNX1RZUEVTOyBpKyspIHsKLQkJCS8qKgotCQkJICogQ2hlY2sgZm9yIGRpc2FibGVkIGNhcmRzLiAgSWYgYW55IGRldmljZSBpcyBtYXJrZWQKLQkJCSAqIGRpc2FibGVkLCBkZXN0cm95IGl0LgotCQkJICovCi0JCQlmb3IgKGogPSAwOwotCQkJICAgICBqIDwgejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1tpXS5zdF9jb3VudDsKLQkJCSAgICAgaisrKSB7Ci0JCQkJaW5keCA9IHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX3hfYWRkcltpXS4KLQkJCQkJCQkJZGV2aWNlX2luZGV4W2pdOwotCQkJCWRldlB0ciA9IHo5MGNyeXB0LmRldmljZV9wW2luZHhdOwotCQkJCWlmIChkZXZQdHIgJiYgZGV2UHRyLT5kaXNhYmxlZCkgewotCQkJCQlsb2NhbF9tYXNrLnN0X21hc2tbaW5keF0gPSBIRF9OT1RfVEhFUkU7Ci0JCQkJCXJldHVybl91bmNoYW5nZWQgPSAwOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAocmV0dXJuX3VuY2hhbmdlZCA9PSAxKQotCQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycSgmcXVldWVzcGlubG9jayk7Ci0JZm9yIChpID0gMDsgaSA8IHo5MGNyeXB0Lm1heF9jb3VudDsgaSsrKSB7Ci0JCW9sZFN0YXQgPSB6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2suc3RfbWFza1tpXTsKLQkJbmV3U3RhdCA9IGxvY2FsX21hc2suc3RfbWFza1tpXTsKLQkJaWYgKChvbGRTdGF0ID09IEhEX09OTElORSkgJiYgKG5ld1N0YXQgIT0gSERfT05MSU5FKSkKLQkJCWRlc3Ryb3lfY3J5cHRvX2RldmljZShpKTsKLQkJZWxzZSBpZiAoKG9sZFN0YXQgIT0gSERfT05MSU5FKSAmJiAobmV3U3RhdCA9PSBIRF9PTkxJTkUpKSB7Ci0JCQlydiA9IGNyZWF0ZV9jcnlwdG9fZGV2aWNlKGkpOwotCQkJaWYgKHJ2ID49IFJFQ19GQVRBTF9FUlJPUikKLQkJCQlyZXR1cm4gcnY7Ci0JCQlpZiAocnYgIT0gMCkgewotCQkJCWxvY2FsX21hc2suc3RfbWFza1tpXSA9IEhEX05PVF9USEVSRTsKLQkJCQlsb2NhbF9tYXNrLnN0X2NvdW50LS07Ci0JCQl9Ci0JCX0KLQl9Ci0JbWVtY3B5KHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5oZHdhcmVfbWFzay5zdF9tYXNrLCBsb2NhbF9tYXNrLnN0X21hc2ssCi0JICAgICAgIHNpemVvZihsb2NhbF9tYXNrLnN0X21hc2spKTsKLQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+aGR3YXJlX21hc2suc3RfY291bnQgPSBsb2NhbF9tYXNrLnN0X2NvdW50OwotCXo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5oZHdhcmVfbWFzay5kaXNhYmxlZF9jb3VudCA9Ci0JCQkJCQkgICAgICBsb2NhbF9tYXNrLmRpc2FibGVkX2NvdW50OwotCXJlZnJlc2hfaW5kZXhfYXJyYXkoJno5MGNyeXB0Lm1hc2ssICZ6OTBjcnlwdC5vdmVyYWxsX2RldmljZV94KTsKLQlmb3IgKGkgPSAwOyBpIDwgWjkwQ1JZUFRfTlVNX1RZUEVTOyBpKyspCi0JCXJlZnJlc2hfaW5kZXhfYXJyYXkoJih6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW2ldKSwKLQkJCQkgICAgJih6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV94X2FkZHJbaV0pKTsKLQlzcGluX3VubG9ja19pcnEoJnF1ZXVlc3BpbmxvY2spOwotCi0JcmV0dXJuIHJ2OwotfQotCi1zdGF0aWMgaW50Ci1maW5kX2NyeXB0b19kZXZpY2VzKHN0cnVjdCBzdGF0dXMgKmRldmljZU1hc2spCi17Ci0JaW50IGksIHFfZGVwdGgsIGRldl90eXBlOwotCWVudW0gaGRzdGF0IGhkX3N0YXQ7Ci0KLQlkZXZpY2VNYXNrLT5zdF9jb3VudCA9IDA7Ci0JZGV2aWNlTWFzay0+ZGlzYWJsZWRfY291bnQgPSAwOwotCWRldmljZU1hc2stPnVzZXJfZGlzYWJsZWRfY291bnQgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IHo5MGNyeXB0Lm1heF9jb3VudDsgaSsrKSB7Ci0JCWhkX3N0YXQgPSBxdWVyeV9vbmxpbmUoaSwgejkwY3J5cHQuY2R4LCBNQVhfUkVTRVQsICZxX2RlcHRoLAotCQkJCSAgICAgICAmZGV2X3R5cGUpOwotCQlpZiAoaGRfc3RhdCA9PSBIRF9UU1FfRVhDRVBUSU9OKSB7Ci0JCQl6OTBjcnlwdC50ZXJtaW5hdGluZyA9IDE7Ci0JCQlQUklOVEtDKCJFeGNlcHRpb24gZHVyaW5nIHByb2JlIGZvciBjcnlwdG8gZGV2aWNlc1xuIik7Ci0JCQlyZXR1cm4gVFNRX0ZBVEFMX0VSUk9SOwotCQl9Ci0JCWRldmljZU1hc2stPnN0X21hc2tbaV0gPSBoZF9zdGF0OwotCQlpZiAoaGRfc3RhdCA9PSBIRF9PTkxJTkUpIHsKLQkJCVBERUJVRygiR290IGFuIG9ubGluZSBjcnlwdG8hOiAlZFxuIiwgaSk7Ci0JCQlQREVCVUcoIkdvdCBhIHF1ZXVlIGRlcHRoIG9mICVkXG4iLCBxX2RlcHRoKTsKLQkJCVBERUJVRygiR290IGEgZGV2aWNlIHR5cGUgb2YgJWRcbiIsIGRldl90eXBlKTsKLQkJCWlmIChxX2RlcHRoIDw9IDApCi0JCQkJcmV0dXJuIFRTUV9GQVRBTF9FUlJPUjsKLQkJCWRldmljZU1hc2stPnN0X2NvdW50Kys7Ci0JCQl6OTBjcnlwdC5xX2RlcHRoX2FycmF5W2ldID0gcV9kZXB0aDsKLQkJCXo5MGNyeXB0LmRldl90eXBlX2FycmF5W2ldID0gZGV2X3R5cGU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcmVmcmVzaF9pbmRleF9hcnJheShzdHJ1Y3Qgc3RhdHVzICpzdGF0dXNfc3RyLCBzdHJ1Y3QgZGV2aWNlX3ggKmluZGV4X2FycmF5KQotewotCWludCBpLCBjb3VudDsKLQllbnVtIGRldnN0YXQgc3RhdDsKLQotCWkgPSAtMTsKLQljb3VudCA9IDA7Ci0JZG8gewotCQlzdGF0ID0gc3RhdHVzX3N0ci0+c3RfbWFza1srK2ldOwotCQlpZiAoc3RhdCA9PSBERVZfT05MSU5FKQotCQkJaW5kZXhfYXJyYXktPmRldmljZV9pbmRleFtjb3VudCsrXSA9IGk7Ci0JfSB3aGlsZSAoKGkgPCBaOTBDUllQVF9OVU1fREVWUykgJiYgKGNvdW50IDwgc3RhdHVzX3N0ci0+c3RfY291bnQpKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIGludAotY3JlYXRlX2NyeXB0b19kZXZpY2UoaW50IGluZGV4KQotewotCWludCBydiwgZGV2c3RhdCwgdG90YWxfc2l6ZTsKLQlzdHJ1Y3QgZGV2aWNlICpkZXZfcHRyOwotCXN0cnVjdCBzdGF0dXMgKnR5cGVfc3RyX3A7Ci0JaW50IGRldmljZVR5cGU7Ci0KLQlkZXZfcHRyID0gejkwY3J5cHQuZGV2aWNlX3BbaW5kZXhdOwotCWlmICghZGV2X3B0cikgewotCQl0b3RhbF9zaXplID0gc2l6ZW9mKHN0cnVjdCBkZXZpY2UpICsKLQkJCSAgICAgejkwY3J5cHQucV9kZXB0aF9hcnJheVtpbmRleF0gKiBzaXplb2YoaW50KTsKLQotCQlkZXZfcHRyID0ga3phbGxvYyh0b3RhbF9zaXplLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFkZXZfcHRyKSB7Ci0JCQlQUklOVEsoImttYWxsb2MgZGV2aWNlICVkIGZhaWxlZFxuIiwgaW5kZXgpOwotCQkJcmV0dXJuIEVOT01FTTsKLQkJfQotCQlkZXZfcHRyLT5kZXZfcmVzcF9wID0ga21hbGxvYyhNQVhfUkVTUE9OU0VfU0laRSwgR0ZQX0FUT01JQyk7Ci0JCWlmICghZGV2X3B0ci0+ZGV2X3Jlc3BfcCkgewotCQkJa2ZyZWUoZGV2X3B0cik7Ci0JCQlQUklOVEsoImttYWxsb2MgZGV2aWNlICVkIHJlYyBidWZmZXIgZmFpbGVkXG4iLCBpbmRleCk7Ci0JCQlyZXR1cm4gRU5PTUVNOwotCQl9Ci0JCWRldl9wdHItPmRldl9yZXNwX2wgPSBNQVhfUkVTUE9OU0VfU0laRTsKLQkJSU5JVF9MSVNUX0hFQUQoJihkZXZfcHRyLT5kZXZfY2FsbGVyX2xpc3QpKTsKLQl9Ci0KLQlkZXZzdGF0ID0gcmVzZXRfZGV2aWNlKGluZGV4LCB6OTBjcnlwdC5jZHgsIE1BWF9SRVNFVCk7Ci0JaWYgKGRldnN0YXQgPT0gREVWX1JTUV9FWENFUFRJT04pIHsKLQkJUFJJTlRLKCJleGNlcHRpb24gZHVyaW5nIHJlc2V0IGRldmljZSAlZFxuIiwgaW5kZXgpOwotCQlrZnJlZShkZXZfcHRyLT5kZXZfcmVzcF9wKTsKLQkJa2ZyZWUoZGV2X3B0cik7Ci0JCXJldHVybiBSU1FfRkFUQUxfRVJST1I7Ci0JfQotCWlmIChkZXZzdGF0ID09IERFVl9PTkxJTkUpIHsKLQkJZGV2X3B0ci0+ZGV2X3NlbGZfeCA9IGluZGV4OwotCQlkZXZfcHRyLT5kZXZfdHlwZSA9IHo5MGNyeXB0LmRldl90eXBlX2FycmF5W2luZGV4XTsKLQkJaWYgKGRldl9wdHItPmRldl90eXBlID09IE5JTERFVikgewotCQkJcnYgPSBwcm9iZV9kZXZpY2VfdHlwZShkZXZfcHRyKTsKLQkJCWlmIChydikgewotCQkJCVBSSU5USygicnYgPSAlZCBmcm9tIHByb2JlX2RldmljZV90eXBlICVkXG4iLAotCQkJCSAgICAgICBydiwgaW5kZXgpOwotCQkJCWtmcmVlKGRldl9wdHItPmRldl9yZXNwX3ApOwotCQkJCWtmcmVlKGRldl9wdHIpOwotCQkJCXJldHVybiBydjsKLQkJCX0KLQkJfQotCQlpZiAoZGV2X3B0ci0+ZGV2X3R5cGUgPT0gUENJWENDX1VOSykgewotCQkJcnYgPSBwcm9iZV9QQ0lYQ0NfdHlwZShkZXZfcHRyKTsKLQkJCWlmIChydikgewotCQkJCVBSSU5USygicnYgPSAlZCBmcm9tIHByb2JlX1BDSVhDQ190eXBlICVkXG4iLAotCQkJCSAgICAgICBydiwgaW5kZXgpOwotCQkJCWtmcmVlKGRldl9wdHItPmRldl9yZXNwX3ApOwotCQkJCWtmcmVlKGRldl9wdHIpOwotCQkJCXJldHVybiBydjsKLQkJCX0KLQkJfQotCQlkZXZpY2VUeXBlID0gZGV2X3B0ci0+ZGV2X3R5cGU7Ci0JCXo5MGNyeXB0LmRldl90eXBlX2FycmF5W2luZGV4XSA9IGRldmljZVR5cGU7Ci0JCWlmIChkZXZpY2VUeXBlID09IFBDSUNBKQotCQkJejkwY3J5cHQuaGR3YXJlX2luZm8tPmRldmljZV90eXBlX2FycmF5W2luZGV4XSA9IDE7Ci0JCWVsc2UgaWYgKGRldmljZVR5cGUgPT0gUENJQ0MpCi0JCQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+ZGV2aWNlX3R5cGVfYXJyYXlbaW5kZXhdID0gMjsKLQkJZWxzZSBpZiAoZGV2aWNlVHlwZSA9PSBQQ0lYQ0NfTUNMMikKLQkJCXo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5kZXZpY2VfdHlwZV9hcnJheVtpbmRleF0gPSAzOwotCQllbHNlIGlmIChkZXZpY2VUeXBlID09IFBDSVhDQ19NQ0wzKQotCQkJejkwY3J5cHQuaGR3YXJlX2luZm8tPmRldmljZV90eXBlX2FycmF5W2luZGV4XSA9IDQ7Ci0JCWVsc2UgaWYgKGRldmljZVR5cGUgPT0gQ0VYMkMpCi0JCQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+ZGV2aWNlX3R5cGVfYXJyYXlbaW5kZXhdID0gNTsKLQkJZWxzZSBpZiAoZGV2aWNlVHlwZSA9PSBDRVgyQSkKLQkJCXo5MGNyeXB0Lmhkd2FyZV9pbmZvLT5kZXZpY2VfdHlwZV9hcnJheVtpbmRleF0gPSA2OwotCQllbHNlIC8vIE5vIGlkZWEgaG93IHRoaXMgd291bGQgaGFwcGVuLgotCQkJejkwY3J5cHQuaGR3YXJlX2luZm8tPmRldmljZV90eXBlX2FycmF5W2luZGV4XSA9IC0xOwotCX0KLQotCS8qKgotCSAqICdxX2RlcHRoJyByZXR1cm5lZCBieSB0aGUgaGFyZHdhcmUgaXMgb25lIGxlc3MgdGhhbgotCSAqIHRoZSBhY3R1YWwgZGVwdGgKLQkgKi8KLQlkZXZfcHRyLT5kZXZfcV9kZXB0aCA9IHo5MGNyeXB0LnFfZGVwdGhfYXJyYXlbaW5kZXhdOwotCWRldl9wdHItPmRldl90eXBlID0gejkwY3J5cHQuZGV2X3R5cGVfYXJyYXlbaW5kZXhdOwotCWRldl9wdHItPmRldl9zdGF0ID0gZGV2c3RhdDsKLQlkZXZfcHRyLT5kaXNhYmxlZCA9IDA7Ci0JejkwY3J5cHQuZGV2aWNlX3BbaW5kZXhdID0gZGV2X3B0cjsKLQotCWlmIChkZXZzdGF0ID09IERFVl9PTkxJTkUpIHsKLQkJaWYgKHo5MGNyeXB0Lm1hc2suc3RfbWFza1tpbmRleF0gIT0gREVWX09OTElORSkgewotCQkJejkwY3J5cHQubWFzay5zdF9tYXNrW2luZGV4XSA9IERFVl9PTkxJTkU7Ci0JCQl6OTBjcnlwdC5tYXNrLnN0X2NvdW50Kys7Ci0JCX0KLQkJZGV2aWNlVHlwZSA9IGRldl9wdHItPmRldl90eXBlOwotCQl0eXBlX3N0cl9wID0gJno5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbZGV2aWNlVHlwZV07Ci0JCWlmICh0eXBlX3N0cl9wLT5zdF9tYXNrW2luZGV4XSAhPSBERVZfT05MSU5FKSB7Ci0JCQl0eXBlX3N0cl9wLT5zdF9tYXNrW2luZGV4XSA9IERFVl9PTkxJTkU7Ci0JCQl0eXBlX3N0cl9wLT5zdF9jb3VudCsrOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWRlc3Ryb3lfY3J5cHRvX2RldmljZShpbnQgaW5kZXgpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2X3B0cjsKLQlpbnQgdCwgZGlzYWJsZWRGbGFnOwotCi0JZGV2X3B0ciA9IHo5MGNyeXB0LmRldmljZV9wW2luZGV4XTsKLQotCS8qIHJlbWVtYmVyIGRldmljZSB0eXBlOyBnZXQgcmlkIG9mIGRldmljZSBzdHJ1Y3QgKi8KLQlpZiAoZGV2X3B0cikgewotCQlkaXNhYmxlZEZsYWcgPSBkZXZfcHRyLT5kaXNhYmxlZDsKLQkJdCA9IGRldl9wdHItPmRldl90eXBlOwotCQlrZnJlZShkZXZfcHRyLT5kZXZfcmVzcF9wKTsKLQkJa2ZyZWUoZGV2X3B0cik7Ci0JfSBlbHNlIHsKLQkJZGlzYWJsZWRGbGFnID0gMDsKLQkJdCA9IC0xOwotCX0KLQl6OTBjcnlwdC5kZXZpY2VfcFtpbmRleF0gPSAwOwotCi0JLyogaWYgdGhlIHR5cGUgaXMgdmFsaWQsIHJlbW92ZSB0aGUgZGV2aWNlIGZyb20gdGhlIHR5cGVfbWFzayAqLwotCWlmICgodCAhPSAtMSkgJiYgejkwY3J5cHQuaGR3YXJlX2luZm8tPnR5cGVfbWFza1t0XS5zdF9tYXNrW2luZGV4XSkgewotCQkgIHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbdF0uc3RfbWFza1tpbmRleF0gPSAweDAwOwotCQkgIHo5MGNyeXB0Lmhkd2FyZV9pbmZvLT50eXBlX21hc2tbdF0uc3RfY291bnQtLTsKLQkJICBpZiAoZGlzYWJsZWRGbGFnID09IDEpCi0JCQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+dHlwZV9tYXNrW3RdLmRpc2FibGVkX2NvdW50LS07Ci0JfQotCWlmICh6OTBjcnlwdC5tYXNrLnN0X21hc2tbaW5kZXhdICE9IERFVl9HT05FKSB7Ci0JCXo5MGNyeXB0Lm1hc2suc3RfbWFza1tpbmRleF0gPSBERVZfR09ORTsKLQkJejkwY3J5cHQubWFzay5zdF9jb3VudC0tOwotCX0KLQl6OTBjcnlwdC5oZHdhcmVfaW5mby0+ZGV2aWNlX3R5cGVfYXJyYXlbaW5kZXhdID0gMDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZAotZGVzdHJveV96OTBjcnlwdCh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHo5MGNyeXB0Lm1heF9jb3VudDsgaSsrKQotCQlpZiAoejkwY3J5cHQuZGV2aWNlX3BbaV0pCi0JCQlkZXN0cm95X2NyeXB0b19kZXZpY2UoaSk7Ci0Ja2ZyZWUoejkwY3J5cHQuaGR3YXJlX2luZm8pOwotCW1lbXNldCgodm9pZCAqKSZ6OTBjcnlwdCwgMCwgc2l6ZW9mKHo5MGNyeXB0KSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXRpY190ZXN0bXNnWzM4NF0gPSB7Ci0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcsMHgwOCwweDAwLDB4MDYsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1OCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQzLDB4NDMsCi0weDQxLDB4MmQsMHg0MSwweDUwLDB4NTAsMHg0YywweDIwLDB4MjAsMHgyMCwweDAxLDB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg1MCwweDRiLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDFjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHhiOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NzAsMHgwMCwweDQxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1NCwweDMyLAotMHgwMSwweDAwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YjgsMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDQ5LDB4NDMsMHg1MywweDQ2LAotMHgyMCwweDIwLDB4MjAsMHgyMCwweDUwLDB4NGIsMHgwYSwweDAwLDB4NTAsMHg0YiwweDQzLDB4NTMsMHgyZCwweDMxLDB4MmUsMHgzMiwKLTB4MzcsMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LDB4ODgsMHg5OSwweDAwLDB4MTEsMHgyMiwweDMzLDB4NDQsCi0weDU1LDB4NjYsMHg3NywweDg4LDB4OTksMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwweDc3LDB4ODgsMHg5OSwweDAwLAotMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywweDg4LDB4OTksMHgwMCwweDExLDB4MjIsMHgzMywweDQ0LDB4NTUsMHg2NiwKLTB4NzcsMHg4OCwweDk5LDB4MDAsMHgxMSwweDIyLDB4MzMsMHg1ZCwweDAwLDB4NWIsMHgwMCwweDc3LDB4ODgsMHgxZSwweDAwLDB4MDAsCi0weDU3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHg0ZiwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDIsMHgwMCwweDAwLAotMHg0MCwweDAxLDB4MDAsMHgwMSwweGNlLDB4MDIsMHg2OCwweDJkLDB4NWYsMHhhOSwweGRlLDB4MGMsMHhmNiwweGQyLDB4N2IsMHg1OCwKLTB4NGIsMHhmOSwweDI4LDB4NjgsMHgzZCwweGI0LDB4ZjQsMHhlZiwweDc4LDB4ZDUsMHhiZSwweDY2LDB4NjMsMHg0MiwweGVmLDB4ZjgsCi0weGZkLDB4YTQsMHhmOCwweGIwLDB4OGUsMHgyOSwweGMyLDB4YzksMHgyZSwweGQ4LDB4NDUsMHhiOCwweDUzLDB4OGMsMHg2ZiwweDRlLAotMHg3MiwweDhmLDB4NmMsMHgwNCwweDljLDB4ODgsMHhmYywweDFlLDB4YzUsMHg4MywweDU1LDB4NTcsMHhmNywweGRkLDB4ZmQsMHg0ZiwKLTB4MTEsMHgzNiwweDk1LDB4NWQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAKLX07Ci0KLXN0YXRpYyBpbnQKLXByb2JlX2RldmljZV90eXBlKHN0cnVjdCBkZXZpY2UgKmRldlB0cikKLXsKLQlpbnQgcnYsIGR2LCBpLCBpbmRleCwgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgcHNtaWRbOF07Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9jX3Rlc3Rtc2dbc2l6ZW9mKHN0YXRpY190ZXN0bXNnKV07Ci0KLQlpbmRleCA9IGRldlB0ci0+ZGV2X3NlbGZfeDsKLQlydiA9IDA7Ci0JZG8gewotCQltZW1jcHkobG9jX3Rlc3Rtc2csIHN0YXRpY190ZXN0bXNnLCBzaXplb2Yoc3RhdGljX3Rlc3Rtc2cpKTsKLQkJbGVuZ3RoID0gc2l6ZW9mKHN0YXRpY190ZXN0bXNnKSAtIDI0OwotCQkvKiB0aGUgLTI0IGFsbG93cyBmb3IgdGhlIGhlYWRlciAqLwotCQlkdiA9IHNlbmRfdG9fQVAoaW5kZXgsIHo5MGNyeXB0LmNkeCwgbGVuZ3RoLCBsb2NfdGVzdG1zZyk7Ci0JCWlmIChkdikgewotCQkJUERFQlVHKCJkdiByZXR1cm5lZCBieSBzZW5kIGR1cmluZyBwcm9iZTogJWRcbiIsIGR2KTsKLQkJCWlmIChkdiA9PSBERVZfU0VOX0VYQ0VQVElPTikgewotCQkJCXJ2ID0gU0VOX0ZBVEFMX0VSUk9SOwotCQkJCVBSSU5US0MoImV4Y2VwdGlvbiBpbiBzZW5kIHRvIEFQICVkXG4iLCBpbmRleCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlQREVCVUcoInJldHVybiB2YWx1ZSBmcm9tIHNlbmRfdG9fQVA6ICVkXG4iLCBydik7Ci0JCQlzd2l0Y2ggKGR2KSB7Ci0JCQljYXNlIERFVl9HT05FOgotCQkJCVBERUJVRygiZGV2ICVkIG5vdCBhdmFpbGFibGVcbiIsIGluZGV4KTsKLQkJCQlydiA9IFNFTl9OT1RfQVZBSUw7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9PTkxJTkU6Ci0JCQkJcnYgPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVZfRU1QVFk6Ci0JCQkJcnYgPSBTRU5fTk9UX0FWQUlMOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVZfTk9fV09SSzoKLQkJCQlydiA9IFNFTl9GQVRBTF9FUlJPUjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVWX0JBRF9NRVNTQUdFOgotCQkJCXJ2ID0gU0VOX1VTRVJfRVJST1I7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9RVUVVRV9GVUxMOgotCQkJCXJ2ID0gU0VOX1FVRVVFX0ZVTEw7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVBSSU5USygidW5rbm93biBkdj0lZCBmb3IgZGV2ICVkXG4iLCBkdiwgaW5kZXgpOwotCQkJCXJ2ID0gU0VOX05PVF9BVkFJTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChydikKLQkJCWJyZWFrOwotCi0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJCW1kZWxheSgzMDApOwotCQkJZHYgPSByZWNlaXZlX2Zyb21fQVAoaW5kZXgsIHo5MGNyeXB0LmNkeCwKLQkJCQkJICAgICBkZXZQdHItPmRldl9yZXNwX2wsCi0JCQkJCSAgICAgZGV2UHRyLT5kZXZfcmVzcF9wLCBwc21pZCk7Ci0JCQlQREVCVUcoImR2IHJldHVybmVkIGJ5IERRID0gJWRcbiIsIGR2KTsKLQkJCWlmIChkdiA9PSBERVZfUkVDX0VYQ0VQVElPTikgewotCQkJCXJ2ID0gUkVDX0ZBVEFMX0VSUk9SOwotCQkJCVBSSU5US0MoImV4Y2VwdGlvbiBpbiBkZXF1ZXVlICVkXG4iLAotCQkJCQlpbmRleCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGR2KSB7Ci0JCQljYXNlIERFVl9PTkxJTkU6Ci0JCQkJcnYgPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVZfRU1QVFk6Ci0JCQkJcnYgPSBSRUNfRU1QVFk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9OT19XT1JLOgotCQkJCXJ2ID0gUkVDX05PX1dPUks7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9CQURfTUVTU0FHRToKLQkJCWNhc2UgREVWX0dPTkU6Ci0JCQlkZWZhdWx0OgotCQkJCXJ2ID0gUkVDX05PX1JFU1BPTlNFOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKChydiAhPSAwKSAmJiAocnYgIT0gUkVDX05PX1dPUkspKQotCQkJCWJyZWFrOwotCQkJaWYgKHJ2ID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJ2KQotCQkJYnJlYWs7Ci0JCXJ2ID0gKGRldlB0ci0+ZGV2X3Jlc3BfcFswXSA9PSAweDAwKSAmJgotCQkgICAgIChkZXZQdHItPmRldl9yZXNwX3BbMV0gPT0gMHg4Nik7Ci0JCWlmIChydikKLQkJCWRldlB0ci0+ZGV2X3R5cGUgPSBQQ0lDQzsKLQkJZWxzZQotCQkJZGV2UHRyLT5kZXZfdHlwZSA9IFBDSUNBOwotCQlydiA9IDA7Ci0JfSB3aGlsZSAoMCk7Ci0JLyogSW4gYSBnZW5lcmFsIGVycm9yIGNhc2UsIHRoZSBjYXJkIGlzIG5vdCBtYXJrZWQgb25saW5lICovCi0JcmV0dXJuIHJ2OwotfQotCi1zdGF0aWMgdW5zaWduZWQgY2hhciBNQ0wzX3Rlc3Rtc2dbXSA9IHsKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhFRSwweEVFLDB4RUUsMHhFRSwweEVFLDB4RUUsMHhFRSwweEVFLAotMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4NTgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDQzLDB4NDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4NEIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4QzQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDI0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweERDLDB4MDIsMHgwMCwweDAwLDB4MDAsMHg1NCwweDMyLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEU4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDcsMHgyNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDRCLDB4MDAsMHgwQSwweDRELDB4NTIsMHg1MCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsCi0weDAwLDB4NDIsMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3LDB4MDgsMHgwOSwweDBBLDB4MEIsMHgwQywweDBELAotMHgwRSwweDBGLDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LDB4NjYsMHg3NywweDg4LDB4OTksMHhBQSwweEJCLDB4Q0MsMHhERCwKLTB4RUUsMHhGRiwweEZGLDB4RUUsMHhERCwweENDLDB4QkIsMHhBQSwweDk5LDB4ODgsMHg3NywweDY2LDB4NTUsMHg0NCwweDMzLDB4MjIsCi0weDExLDB4MDAsMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsMHhDRCwweEVGLDB4RkUsMHhEQywweEJBLDB4OTgsMHg3NiwweDU0LAotMHgzMiwweDEwLDB4MDAsMHg5QSwweDAwLDB4OTgsMHgwMCwweDAwLDB4MUUsMHgwMCwweDAwLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweDAwLDB4OEMsMHgwMCwweDAwLDB4MDAsMHg0MCwweDAyLDB4MDAsMHgwMCwweDQwLDB4QkEsMHhFOCwweDIzLDB4M0MsCi0weDc1LDB4RjMsMHg5MSwweDYxLDB4RDYsMHg3MywweDM5LDB4Q0YsMHg3QiwweDZELDB4OEUsMHg2MSwweDk3LDB4NjMsMHg5RSwweEQ5LAotMHg2MCwweDU1LDB4RDYsMHhDNywweEVGLDB4RjgsMHgxRSwweDYzLDB4OTUsMHgxNywweENDLDB4MjgsMHg0NSwweDYwLDB4MTEsMHhDNSwKLTB4QzQsMHg0RSwweDY2LDB4QzYsMHhFNiwweEMzLDB4REUsMHg4QSwweDE5LDB4MzAsMHhDRiwweDBFLDB4RDcsMHhBQSwweERCLDB4MDEsCi0weEQ4LDB4MDAsMHhCQiwweDhGLDB4MzksMHg5RiwweDY0LDB4MjgsMHhGNSwweDdBLDB4NzcsMHg0OSwweENDLDB4NkIsMHhBMywweDkxLAotMHg5NywweDcwLDB4RTcsMHg2MCwweDFFLDB4MzksMHhFMSwweEU1LDB4MzMsMHhFMSwweDE1LDB4NjMsMHg2OSwweDA4LDB4ODAsMHg0QywKLTB4NjcsMHhDNCwweDQxLDB4OEYsMHg0OCwweERGLDB4MjYsMHg5OCwweEYxLDB4RDUsMHg4RCwweDg4LDB4RDksMHg2QSwweEE0LDB4OTYsCi0weEM1LDB4ODQsMHhEOSwweDMwLDB4NDksMHg2NywweDdELDB4MTksMHhCMSwweEIzLDB4NDUsMHg0RCwweEIyLDB4NTMsMHg5QSwweDQ3LAotMHgzQywweDdDLDB4NTUsMHhCRiwweENDLDB4ODUsMHgwMCwweDM2LDB4RjEsMHgzRCwweDkzLDB4NTMKLX07Ci0KLXN0YXRpYyBpbnQKLXByb2JlX1BDSVhDQ190eXBlKHN0cnVjdCBkZXZpY2UgKmRldlB0cikKLXsKLQlpbnQgcnYsIGR2LCBpLCBpbmRleCwgbGVuZ3RoOwotCXVuc2lnbmVkIGNoYXIgcHNtaWRbOF07Ci0Jc3RhdGljIHVuc2lnbmVkIGNoYXIgbG9jX3Rlc3Rtc2dbNTQ4XTsKLQlzdHJ1Y3QgQ1BSQlggKmNwcmJ4X3A7Ci0KLQlpbmRleCA9IGRldlB0ci0+ZGV2X3NlbGZfeDsKLQlydiA9IDA7Ci0JZG8gewotCQltZW1jcHkobG9jX3Rlc3Rtc2csIE1DTDNfdGVzdG1zZywgc2l6ZW9mKE1DTDNfdGVzdG1zZykpOwotCQlsZW5ndGggPSBzaXplb2YoTUNMM190ZXN0bXNnKSAtIDB4MEM7Ci0JCWR2ID0gc2VuZF90b19BUChpbmRleCwgejkwY3J5cHQuY2R4LCBsZW5ndGgsIGxvY190ZXN0bXNnKTsKLQkJaWYgKGR2KSB7Ci0JCQlQREVCVUcoImR2IHJldHVybmVkID0gJWRcbiIsIGR2KTsKLQkJCWlmIChkdiA9PSBERVZfU0VOX0VYQ0VQVElPTikgewotCQkJCXJ2ID0gU0VOX0ZBVEFMX0VSUk9SOwotCQkJCVBSSU5US0MoImV4Y2VwdGlvbiBpbiBzZW5kIHRvIEFQICVkXG4iLCBpbmRleCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlQREVCVUcoInJldHVybiB2YWx1ZSBmcm9tIHNlbmRfdG9fQVA6ICVkXG4iLCBydik7Ci0JCQlzd2l0Y2ggKGR2KSB7Ci0JCQljYXNlIERFVl9HT05FOgotCQkJCVBERUJVRygiZGV2ICVkIG5vdCBhdmFpbGFibGVcbiIsIGluZGV4KTsKLQkJCQlydiA9IFNFTl9OT1RfQVZBSUw7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9PTkxJTkU6Ci0JCQkJcnYgPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVZfRU1QVFk6Ci0JCQkJcnYgPSBTRU5fTk9UX0FWQUlMOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVZfTk9fV09SSzoKLQkJCQlydiA9IFNFTl9GQVRBTF9FUlJPUjsKLQkJCQlicmVhazsKLQkJCWNhc2UgREVWX0JBRF9NRVNTQUdFOgotCQkJCXJ2ID0gU0VOX1VTRVJfRVJST1I7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9RVUVVRV9GVUxMOgotCQkJCXJ2ID0gU0VOX1FVRVVFX0ZVTEw7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCVBSSU5USygidW5rbm93biBkdj0lZCBmb3IgZGV2ICVkXG4iLCBkdiwgaW5kZXgpOwotCQkJCXJ2ID0gU0VOX05PVF9BVkFJTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChydikKLQkJCWJyZWFrOwotCi0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKLQkJCW1kZWxheSgzMDApOwotCQkJZHYgPSByZWNlaXZlX2Zyb21fQVAoaW5kZXgsIHo5MGNyeXB0LmNkeCwKLQkJCQkJICAgICBkZXZQdHItPmRldl9yZXNwX2wsCi0JCQkJCSAgICAgZGV2UHRyLT5kZXZfcmVzcF9wLCBwc21pZCk7Ci0JCQlQREVCVUcoImR2IHJldHVybmVkIGJ5IERRID0gJWRcbiIsIGR2KTsKLQkJCWlmIChkdiA9PSBERVZfUkVDX0VYQ0VQVElPTikgewotCQkJCXJ2ID0gUkVDX0ZBVEFMX0VSUk9SOwotCQkJCVBSSU5US0MoImV4Y2VwdGlvbiBpbiBkZXF1ZXVlICVkXG4iLAotCQkJCQlpbmRleCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGR2KSB7Ci0JCQljYXNlIERFVl9PTkxJTkU6Ci0JCQkJcnYgPSAwOwotCQkJCWJyZWFrOwotCQkJY2FzZSBERVZfRU1QVFk6Ci0JCQkJcnYgPSBSRUNfRU1QVFk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9OT19XT1JLOgotCQkJCXJ2ID0gUkVDX05PX1dPUks7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIERFVl9CQURfTUVTU0FHRToKLQkJCWNhc2UgREVWX0dPTkU6Ci0JCQlkZWZhdWx0OgotCQkJCXJ2ID0gUkVDX05PX1JFU1BPTlNFOwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKChydiAhPSAwKSAmJiAocnYgIT0gUkVDX05PX1dPUkspKQotCQkJCWJyZWFrOwotCQkJaWYgKHJ2ID09IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHJ2KQotCQkJYnJlYWs7Ci0JCWNwcmJ4X3AgPSAoc3RydWN0IENQUkJYICopIChkZXZQdHItPmRldl9yZXNwX3AgKyA0OCk7Ci0JCWlmICgoY3ByYnhfcC0+Y2NwX3J0Y29kZSA9PSA4KSAmJiAoY3ByYnhfcC0+Y2NwX3JzY29kZSA9PSAzMykpIHsKLQkJCWRldlB0ci0+ZGV2X3R5cGUgPSBQQ0lYQ0NfTUNMMjsKLQkJCVBERUJVRygiZGV2aWNlICVkIGlzIE1DTDJcbiIsIGluZGV4KTsKLQkJfSBlbHNlIHsKLQkJCWRldlB0ci0+ZGV2X3R5cGUgPSBQQ0lYQ0NfTUNMMzsKLQkJCVBERUJVRygiZGV2aWNlICVkIGlzIE1DTDNcbiIsIGluZGV4KTsKLQkJfQotCX0gd2hpbGUgKDApOwotCS8qIEluIGEgZ2VuZXJhbCBlcnJvciBjYXNlLCB0aGUgY2FyZCBpcyBub3QgbWFya2VkIG9ubGluZSAqLwotCXJldHVybiBydjsKLX0KLQotbW9kdWxlX2luaXQoejkwY3J5cHRfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoejkwY3J5cHRfY2xlYW51cF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWRjMTBhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmMKQEAgLTAsMCArMSwxMDkxIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2FwaS5jCisgKgorICogIHpjcnlwdCAyLjEuMAorICoKKyAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocworICoJICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKKyAqCSAgICAgICBDb3JuZWxpYSBIdWNrIDxjb3JuZWxpYS5odWNrQGRlLmlibS5jb20+CisgKgorICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQorICogIE1ham9yIGNsZWFudXAgJiBkcml2ZXIgc3BsaXQ6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqCQkJCSAgUmFscGggV3VlcnRobmVyIDxyd3VlcnRobkBkZS5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJ6Y3J5cHRfYXBpLmgiCisKKy8qKgorICogTW9kdWxlIGRlc2NyaXB0aW9uLgorICovCitNT0RVTEVfQVVUSE9SKCJJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBpbnRlcmZhY2UsICIKKwkJICAgIkNvcHlyaWdodCAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHpjcnlwdF9kZXZpY2VfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKHpjcnlwdF9kZXZpY2VfbGlzdCk7CitzdGF0aWMgaW50IHpjcnlwdF9kZXZpY2VfY291bnQgPSAwOworc3RhdGljIGF0b21pY190IHpjcnlwdF9vcGVuX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CisKKy8qKgorICogRGV2aWNlIGF0dHJpYnV0ZXMgY29tbW9uIGZvciBhbGwgY3J5cHRvIGRldmljZXMuCisgKi8KK3N0YXRpYyBzc2l6ZV90IHpjcnlwdF90eXBlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYgPSB0b19hcF9kZXYoZGV2KS0+cHJpdmF0ZTsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgemRldi0+dHlwZV9zdHJpbmcpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIodHlwZSwgMDQ0NCwgemNyeXB0X3R5cGVfc2hvdywgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHpjcnlwdF9vbmxpbmVfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2ID0gdG9fYXBfZGV2KGRldiktPnByaXZhdGU7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWRcbiIsIHpkZXYtPm9ubGluZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHpjcnlwdF9vbmxpbmVfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2ID0gdG9fYXBfZGV2KGRldiktPnByaXZhdGU7CisJaW50IG9ubGluZTsKKworCWlmIChzc2NhbmYoYnVmLCAiJWRcbiIsICZvbmxpbmUpICE9IDEgfHwgb25saW5lIDwgMCB8fCBvbmxpbmUgPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwl6ZGV2LT5vbmxpbmUgPSBvbmxpbmU7CisJaWYgKCFvbmxpbmUpCisJCWFwX2ZsdXNoX3F1ZXVlKHpkZXYtPmFwX2Rldik7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIob25saW5lLCAwNjQ0LCB6Y3J5cHRfb25saW5lX3Nob3csIHpjcnlwdF9vbmxpbmVfc3RvcmUpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqIHpjcnlwdF9kZXZpY2VfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfdHlwZS5hdHRyLAorCSZkZXZfYXR0cl9vbmxpbmUuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgemNyeXB0X2RldmljZV9hdHRyX2dyb3VwID0geworCS5hdHRycyA9IHpjcnlwdF9kZXZpY2VfYXR0cnMsCit9OworCisvKioKKyAqIE1vdmUgdGhlIGRldmljZSB0b3dhcmRzIHRoZSBoZWFkIG9mIHRoZSBkZXZpY2UgbGlzdC4KKyAqIE5lZWQgdG8gYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgdGhlIHpjcnlwdCBkZXZpY2UgbGlzdCBsb2NrLgorICogTm90ZTogY2FyZHMgd2l0aCBzcGVlZF9yYXRpbmcgb2YgMCBhcmUga2VwdCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LgorICovCitzdGF0aWMgdm9pZCBfX3pjcnlwdF9pbmNyZWFzZV9wcmVmZXJlbmNlKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2KQoreworCXN0cnVjdCB6Y3J5cHRfZGV2aWNlICp0bXA7CisJc3RydWN0IGxpc3RfaGVhZCAqbDsKKworCWlmICh6ZGV2LT5zcGVlZF9yYXRpbmcgPT0gMCkKKwkJcmV0dXJuOworCWZvciAobCA9IHpkZXYtPmxpc3QucHJldjsgbCAhPSAmemNyeXB0X2RldmljZV9saXN0OyBsID0gbC0+cHJldikgeworCQl0bXAgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCB6Y3J5cHRfZGV2aWNlLCBsaXN0KTsKKwkJaWYgKCh0bXAtPnJlcXVlc3RfY291bnQgKyAxKSAqIHRtcC0+c3BlZWRfcmF0aW5nIDw9CisJCSAgICAoemRldi0+cmVxdWVzdF9jb3VudCArIDEpICogemRldi0+c3BlZWRfcmF0aW5nICYmCisJCSAgICB0bXAtPnNwZWVkX3JhdGluZyAhPSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChsID09IHpkZXYtPmxpc3QucHJldikKKwkJcmV0dXJuOworCS8qIE1vdmUgemRldiBiZWhpbmQgbCAqLworCWxpc3RfZGVsKCZ6ZGV2LT5saXN0KTsKKwlsaXN0X2FkZCgmemRldi0+bGlzdCwgbCk7Cit9CisKKy8qKgorICogTW92ZSB0aGUgZGV2aWNlIHRvd2FyZHMgdGhlIHRhaWwgb2YgdGhlIGRldmljZSBsaXN0LgorICogTmVlZCB0byBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyB0aGUgemNyeXB0IGRldmljZSBsaXN0IGxvY2suCisgKiBOb3RlOiBjYXJkcyB3aXRoIHNwZWVkX3JhdGluZyBvZiAwIGFyZSBrZXB0IGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QuCisgKi8KK3N0YXRpYyB2b2lkIF9femNyeXB0X2RlY3JlYXNlX3ByZWZlcmVuY2Uoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsOworCisJaWYgKHpkZXYtPnNwZWVkX3JhdGluZyA9PSAwKQorCQlyZXR1cm47CisJZm9yIChsID0gemRldi0+bGlzdC5uZXh0OyBsICE9ICZ6Y3J5cHRfZGV2aWNlX2xpc3Q7IGwgPSBsLT5uZXh0KSB7CisJCXRtcCA9IGxpc3RfZW50cnkobCwgc3RydWN0IHpjcnlwdF9kZXZpY2UsIGxpc3QpOworCQlpZiAoKHRtcC0+cmVxdWVzdF9jb3VudCArIDEpICogdG1wLT5zcGVlZF9yYXRpbmcgPgorCQkgICAgKHpkZXYtPnJlcXVlc3RfY291bnQgKyAxKSAqIHpkZXYtPnNwZWVkX3JhdGluZyB8fAorCQkgICAgdG1wLT5zcGVlZF9yYXRpbmcgPT0gMCkKKwkJCWJyZWFrOworCX0KKwlpZiAobCA9PSB6ZGV2LT5saXN0Lm5leHQpCisJCXJldHVybjsKKwkvKiBNb3ZlIHpkZXYgYmVmb3JlIGwgKi8KKwlsaXN0X2RlbCgmemRldi0+bGlzdCk7CisJbGlzdF9hZGRfdGFpbCgmemRldi0+bGlzdCwgbCk7Cit9CisKK3N0YXRpYyB2b2lkIHpjcnlwdF9kZXZpY2VfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiA9CisJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgemNyeXB0X2RldmljZSwgcmVmY291bnQpOworCXpjcnlwdF9kZXZpY2VfZnJlZSh6ZGV2KTsKK30KKwordm9pZCB6Y3J5cHRfZGV2aWNlX2dldChzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldikKK3sKKwlrcmVmX2dldCgmemRldi0+cmVmY291bnQpOworfQorRVhQT1JUX1NZTUJPTCh6Y3J5cHRfZGV2aWNlX2dldCk7CisKK2ludCB6Y3J5cHRfZGV2aWNlX3B1dChzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldikKK3sKKwlyZXR1cm4ga3JlZl9wdXQoJnpkZXYtPnJlZmNvdW50LCB6Y3J5cHRfZGV2aWNlX3JlbGVhc2UpOworfQorRVhQT1JUX1NZTUJPTCh6Y3J5cHRfZGV2aWNlX3B1dCk7CisKK3N0cnVjdCB6Y3J5cHRfZGV2aWNlICp6Y3J5cHRfZGV2aWNlX2FsbG9jKHNpemVfdCBtYXhfcmVzcG9uc2Vfc2l6ZSkKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKworCXpkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgemNyeXB0X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmICghemRldikKKwkJcmV0dXJuIE5VTEw7CisJemRldi0+cmVwbHkubWVzc2FnZSA9IGttYWxsb2MobWF4X3Jlc3BvbnNlX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghemRldi0+cmVwbHkubWVzc2FnZSkKKwkJZ290byBvdXRfZnJlZTsKKwl6ZGV2LT5yZXBseS5sZW5ndGggPSBtYXhfcmVzcG9uc2Vfc2l6ZTsKKwlzcGluX2xvY2tfaW5pdCgmemRldi0+bG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJnpkZXYtPmxpc3QpOworCXJldHVybiB6ZGV2OworCitvdXRfZnJlZToKKwlrZnJlZSh6ZGV2KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woemNyeXB0X2RldmljZV9hbGxvYyk7CisKK3ZvaWQgemNyeXB0X2RldmljZV9mcmVlKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2KQoreworCWtmcmVlKHpkZXYtPnJlcGx5Lm1lc3NhZ2UpOworCWtmcmVlKHpkZXYpOworfQorRVhQT1JUX1NZTUJPTCh6Y3J5cHRfZGV2aWNlX2ZyZWUpOworCisvKioKKyAqIFJlZ2lzdGVyIGEgY3J5cHRvIGRldmljZS4KKyAqLworaW50IHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYpCit7CisJaW50IHJjOworCisJcmMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnpkZXYtPmFwX2Rldi0+ZGV2aWNlLmtvYmosCisJCQkJJnpjcnlwdF9kZXZpY2VfYXR0cl9ncm91cCk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKwlnZXRfZGV2aWNlKCZ6ZGV2LT5hcF9kZXYtPmRldmljZSk7CisJa3JlZl9pbml0KCZ6ZGV2LT5yZWZjb3VudCk7CisJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCXpkZXYtPm9ubGluZSA9IDE7CS8qIE5ldyBkZXZpY2VzIGFyZSBvbmxpbmUgYnkgZGVmYXVsdC4gKi8KKwlsaXN0X2FkZF90YWlsKCZ6ZGV2LT5saXN0LCAmemNyeXB0X2RldmljZV9saXN0KTsKKwlfX3pjcnlwdF9pbmNyZWFzZV9wcmVmZXJlbmNlKHpkZXYpOworCXpjcnlwdF9kZXZpY2VfY291bnQrKzsKKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CitFWFBPUlRfU1lNQk9MKHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIpOworCisvKioKKyAqIFVucmVnaXN0ZXIgYSBjcnlwdG8gZGV2aWNlLgorICovCit2b2lkIHpjcnlwdF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldikKK3sKKwlzcGluX2xvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJemNyeXB0X2RldmljZV9jb3VudC0tOworCWxpc3RfZGVsX2luaXQoJnpkZXYtPmxpc3QpOworCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmemRldi0+YXBfZGV2LT5kZXZpY2Uua29iaiwKKwkJCSAgICZ6Y3J5cHRfZGV2aWNlX2F0dHJfZ3JvdXApOworCXB1dF9kZXZpY2UoJnpkZXYtPmFwX2Rldi0+ZGV2aWNlKTsKKwl6Y3J5cHRfZGV2aWNlX3B1dCh6ZGV2KTsKK30KK0VYUE9SVF9TWU1CT0woemNyeXB0X2RldmljZV91bnJlZ2lzdGVyKTsKKworLyoqCisgKiB6Y3J5cHRfcmVhZCBpcyBub3QgYmUgc3VwcG9ydGVkIGJleW9uZCB6Y3J5cHQgMS4zLjEKKyAqLworc3RhdGljIHNzaXplX3QgemNyeXB0X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqZl9wb3MpCit7CisJcmV0dXJuIC1FUEVSTTsKK30KKworLyoqCisgKiBXcml0ZSBpcyBpcyBub3QgYWxsb3dlZAorICovCitzdGF0aWMgc3NpemVfdCB6Y3J5cHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmZfcG9zKQoreworCXJldHVybiAtRVBFUk07Cit9CisKKy8qKgorICogRGV2aWNlIG9wZW4vY2xvc2UgZnVuY3Rpb25zIHRvIGNvdW50IG51bWJlciBvZiB1c2Vycy4KKyAqLworc3RhdGljIGludCB6Y3J5cHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlhdG9taWNfaW5jKCZ6Y3J5cHRfb3Blbl9jb3VudCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemNyeXB0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJYXRvbWljX2RlYygmemNyeXB0X29wZW5fY291bnQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIHpjcnlwdCBpb2N0bHMuCisgKi8KK3N0YXRpYyBsb25nIHpjcnlwdF9yc2FfbW9kZXhwbyhzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICptZXgpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisJaW50IHJjOworCisJaWYgKG1leC0+b3V0cHV0ZGF0YWxlbmd0aCA8IG1leC0+aW5wdXRkYXRhbGVuZ3RoKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkvKioKKwkgKiBBcyBsb25nIGFzIG91dHB1dGRhdGFsZW5ndGggaXMgYmlnIGVub3VnaCwgd2UgY2FuIHNldCB0aGUKKwkgKiBvdXRwdXRkYXRhbGVuZ3RoIGVxdWFsIHRvIHRoZSBpbnB1dGRhdGFsZW5ndGgsIHNpbmNlIHRoYXQgaXMgdGhlCisJICogbnVtYmVyIG9mIGJ5dGVzIHdlIHdpbGwgY29weSBpbiBhbnkgY2FzZQorCSAqLworCW1leC0+b3V0cHV0ZGF0YWxlbmd0aCA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoOworCisJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoemRldiwgJnpjcnlwdF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoIXpkZXYtPm9ubGluZSB8fAorCQkgICAgIXpkZXYtPm9wcy0+cnNhX21vZGV4cG8gfHwKKwkJICAgIHpkZXYtPm1pbl9tb2Rfc2l6ZSA+IG1leC0+aW5wdXRkYXRhbGVuZ3RoIHx8CisJCSAgICB6ZGV2LT5tYXhfbW9kX3NpemUgPCBtZXgtPmlucHV0ZGF0YWxlbmd0aCkKKwkJCWNvbnRpbnVlOworCQl6Y3J5cHRfZGV2aWNlX2dldCh6ZGV2KTsKKwkJZ2V0X2RldmljZSgmemRldi0+YXBfZGV2LT5kZXZpY2UpOworCQl6ZGV2LT5yZXF1ZXN0X2NvdW50Kys7CisJCV9femNyeXB0X2RlY3JlYXNlX3ByZWZlcmVuY2UoemRldik7CisJCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCQlpZiAodHJ5X21vZHVsZV9nZXQoemRldi0+YXBfZGV2LT5kcnYtPmRyaXZlci5vd25lcikpIHsKKwkJCXJjID0gemRldi0+b3BzLT5yc2FfbW9kZXhwbyh6ZGV2LCBtZXgpOworCQkJbW9kdWxlX3B1dCh6ZGV2LT5hcF9kZXYtPmRydi0+ZHJpdmVyLm93bmVyKTsKKwkJfQorCQllbHNlCisJCQlyYyA9IC1FQUdBSU47CisJCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwkJemRldi0+cmVxdWVzdF9jb3VudC0tOworCQlfX3pjcnlwdF9pbmNyZWFzZV9wcmVmZXJlbmNlKHpkZXYpOworCQlwdXRfZGV2aWNlKCZ6ZGV2LT5hcF9kZXYtPmRldmljZSk7CisJCXpjcnlwdF9kZXZpY2VfcHV0KHpkZXYpOworCQlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwkJcmV0dXJuIHJjOworCX0KKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGxvbmcgemNyeXB0X3JzYV9jcnQoc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKmNydCkKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKwl1bnNpZ25lZCBsb25nIGxvbmcgejEsIHoyLCB6MzsKKwlpbnQgcmMsIGNvcGllZDsKKworCWlmIChjcnQtPm91dHB1dGRhdGFsZW5ndGggPCBjcnQtPmlucHV0ZGF0YWxlbmd0aCB8fAorCSAgICAoY3J0LT5pbnB1dGRhdGFsZW5ndGggJiAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoqCisJICogQXMgbG9uZyBhcyBvdXRwdXRkYXRhbGVuZ3RoIGlzIGJpZyBlbm91Z2gsIHdlIGNhbiBzZXQgdGhlCisJICogb3V0cHV0ZGF0YWxlbmd0aCBlcXVhbCB0byB0aGUgaW5wdXRkYXRhbGVuZ3RoLCBzaW5jZSB0aGF0IGlzIHRoZQorCSAqIG51bWJlciBvZiBieXRlcyB3ZSB3aWxsIGNvcHkgaW4gYW55IGNhc2UKKwkgKi8KKwljcnQtPm91dHB1dGRhdGFsZW5ndGggPSBjcnQtPmlucHV0ZGF0YWxlbmd0aDsKKworCWNvcGllZCA9IDA7CisgcmVzdGFydDoKKwlzcGluX2xvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh6ZGV2LCAmemNyeXB0X2RldmljZV9saXN0LCBsaXN0KSB7CisJCWlmICghemRldi0+b25saW5lIHx8CisJCSAgICAhemRldi0+b3BzLT5yc2FfbW9kZXhwb19jcnQgfHwKKwkJICAgIHpkZXYtPm1pbl9tb2Rfc2l6ZSA+IGNydC0+aW5wdXRkYXRhbGVuZ3RoIHx8CisJCSAgICB6ZGV2LT5tYXhfbW9kX3NpemUgPCBjcnQtPmlucHV0ZGF0YWxlbmd0aCkKKwkJCWNvbnRpbnVlOworCQlpZiAoemRldi0+c2hvcnRfY3J0ICYmIGNydC0+aW5wdXRkYXRhbGVuZ3RoID4gMjQwKSB7CisJCQkvKioKKwkJCSAqIENoZWNrIGlucHV0ZGF0YSBmb3IgbGVhZGluZyB6ZXJvcyBmb3IgY2FyZHMKKwkJCSAqIHRoYXQgY2FuJ3QgaGFuZGxlIG5wX3ByaW1lLCBicF9rZXksIG9yCisJCQkgKiB1X211bHRfaW52ID4gMTI4IGJ5dGVzLgorCQkJICovCisJCQlpZiAoY29waWVkID09IDApIHsKKwkJCQlpbnQgbGVuOworCQkJCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCQkJCS8qIGxlbiBpcyBtYXggMjU2IC8gMiAtIDEyMCA9IDggKi8KKwkJCQlsZW4gPSBjcnQtPmlucHV0ZGF0YWxlbmd0aCAvIDIgLSAxMjA7CisJCQkJejEgPSB6MiA9IHozID0gMDsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIoJnoxLCBjcnQtPm5wX3ByaW1lLCBsZW4pIHx8CisJCQkJICAgIGNvcHlfZnJvbV91c2VyKCZ6MiwgY3J0LT5icF9rZXksIGxlbikgfHwKKwkJCQkgICAgY29weV9mcm9tX3VzZXIoJnozLCBjcnQtPnVfbXVsdF9pbnYsIGxlbikpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCWNvcGllZCA9IDE7CisJCQkJLyoqCisJCQkJICogV2UgaGF2ZSB0byByZXN0YXJ0IGRldmljZSBsb29rdXAgLQorCQkJCSAqIHRoZSBkZXZpY2UgbGlzdCBtYXkgaGF2ZSBjaGFuZ2VkIGJ5IG5vdy4KKwkJCQkgKi8KKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9CisJCQlpZiAoejEgIT0gMFVMTCB8fCB6MiAhPSAwVUxMIHx8IHozICE9IDBVTEwpCisJCQkJLyogVGhlIGRldmljZSBjYW4ndCBoYW5kbGUgdGhpcyByZXF1ZXN0LiAqLworCQkJCWNvbnRpbnVlOworCQl9CisJCXpjcnlwdF9kZXZpY2VfZ2V0KHpkZXYpOworCQlnZXRfZGV2aWNlKCZ6ZGV2LT5hcF9kZXYtPmRldmljZSk7CisJCXpkZXYtPnJlcXVlc3RfY291bnQrKzsKKwkJX196Y3J5cHRfZGVjcmVhc2VfcHJlZmVyZW5jZSh6ZGV2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJCWlmICh0cnlfbW9kdWxlX2dldCh6ZGV2LT5hcF9kZXYtPmRydi0+ZHJpdmVyLm93bmVyKSkgeworCQkJcmMgPSB6ZGV2LT5vcHMtPnJzYV9tb2RleHBvX2NydCh6ZGV2LCBjcnQpOworCQkJbW9kdWxlX3B1dCh6ZGV2LT5hcF9kZXYtPmRydi0+ZHJpdmVyLm93bmVyKTsKKwkJfQorCQllbHNlCisJCQlyYyA9IC1FQUdBSU47CisJCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwkJemRldi0+cmVxdWVzdF9jb3VudC0tOworCQlfX3pjcnlwdF9pbmNyZWFzZV9wcmVmZXJlbmNlKHpkZXYpOworCQlwdXRfZGV2aWNlKCZ6ZGV2LT5hcF9kZXYtPmRldmljZSk7CisJCXpjcnlwdF9kZXZpY2VfcHV0KHpkZXYpOworCQlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwkJcmV0dXJuIHJjOworCX0KKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGxvbmcgemNyeXB0X3NlbmRfY3ByYihzdHJ1Y3QgaWNhX3hjUkIgKnhjUkIpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisJaW50IHJjOworCisJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoemRldiwgJnpjcnlwdF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlpZiAoIXpkZXYtPm9ubGluZSB8fCAhemRldi0+b3BzLT5zZW5kX2NwcmIgfHwKKwkJICAgICh4Y1JCLT51c2VyX2RlZmluZWQgIT0gQVVUT1NFTEVDVCAmJgorCQkJQVBfUUlEX0RFVklDRSh6ZGV2LT5hcF9kZXYtPnFpZCkgIT0geGNSQi0+dXNlcl9kZWZpbmVkKQorCQkgICAgKQorCQkJY29udGludWU7CisJCXpjcnlwdF9kZXZpY2VfZ2V0KHpkZXYpOworCQlnZXRfZGV2aWNlKCZ6ZGV2LT5hcF9kZXYtPmRldmljZSk7CisJCXpkZXYtPnJlcXVlc3RfY291bnQrKzsKKwkJX196Y3J5cHRfZGVjcmVhc2VfcHJlZmVyZW5jZSh6ZGV2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJCWlmICh0cnlfbW9kdWxlX2dldCh6ZGV2LT5hcF9kZXYtPmRydi0+ZHJpdmVyLm93bmVyKSkgeworCQkJcmMgPSB6ZGV2LT5vcHMtPnNlbmRfY3ByYih6ZGV2LCB4Y1JCKTsKKwkJCW1vZHVsZV9wdXQoemRldi0+YXBfZGV2LT5kcnYtPmRyaXZlci5vd25lcik7CisJCX0KKwkJZWxzZQorCQkJcmMgPSAtRUFHQUlOOworCQlzcGluX2xvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJCXpkZXYtPnJlcXVlc3RfY291bnQtLTsKKwkJX196Y3J5cHRfaW5jcmVhc2VfcHJlZmVyZW5jZSh6ZGV2KTsKKwkJcHV0X2RldmljZSgmemRldi0+YXBfZGV2LT5kZXZpY2UpOworCQl6Y3J5cHRfZGV2aWNlX3B1dCh6ZGV2KTsKKwkJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJCXJldHVybiByYzsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisKK3N0YXRpYyB2b2lkIHpjcnlwdF9zdGF0dXNfbWFzayhjaGFyIHN0YXR1c1tBUF9ERVZJQ0VTXSkKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKworCW1lbXNldChzdGF0dXMsIDAsIHNpemVvZihjaGFyKSAqIEFQX0RFVklDRVMpOworCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHpkZXYsICZ6Y3J5cHRfZGV2aWNlX2xpc3QsIGxpc3QpCisJCXN0YXR1c1tBUF9RSURfREVWSUNFKHpkZXYtPmFwX2Rldi0+cWlkKV0gPQorCQkJemRldi0+b25saW5lID8gemRldi0+dXNlcl9zcGFjZV90eXBlIDogMHgwZDsKKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgemNyeXB0X3FkZXB0aF9tYXNrKGNoYXIgcWRlcHRoW0FQX0RFVklDRVNdKQoreworCXN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2OworCisJbWVtc2V0KHFkZXB0aCwgMCwgc2l6ZW9mKGNoYXIpCSogQVBfREVWSUNFUyk7CisJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoemRldiwgJnpjcnlwdF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlzcGluX2xvY2soJnpkZXYtPmFwX2Rldi0+bG9jayk7CisJCXFkZXB0aFtBUF9RSURfREVWSUNFKHpkZXYtPmFwX2Rldi0+cWlkKV0gPQorCQkJemRldi0+YXBfZGV2LT5wZW5kaW5ncV9jb3VudCArCisJCQl6ZGV2LT5hcF9kZXYtPnJlcXVlc3RxX2NvdW50OworCQlzcGluX3VubG9jaygmemRldi0+YXBfZGV2LT5sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHpjcnlwdF9wZXJkZXZfcmVxY250KGludCByZXFjbnRbQVBfREVWSUNFU10pCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisKKwltZW1zZXQocmVxY250LCAwLCBzaXplb2YoaW50KSAqIEFQX0RFVklDRVMpOworCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHpkZXYsICZ6Y3J5cHRfZGV2aWNlX2xpc3QsIGxpc3QpIHsKKwkJc3Bpbl9sb2NrKCZ6ZGV2LT5hcF9kZXYtPmxvY2spOworCQlyZXFjbnRbQVBfUUlEX0RFVklDRSh6ZGV2LT5hcF9kZXYtPnFpZCldID0KKwkJCXpkZXYtPmFwX2Rldi0+dG90YWxfcmVxdWVzdF9jb3VudDsKKwkJc3Bpbl91bmxvY2soJnpkZXYtPmFwX2Rldi0+bG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworfQorCitzdGF0aWMgaW50IHpjcnlwdF9wZW5kaW5ncV9jb3VudCh2b2lkKQoreworCXN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2OworCWludCBwZW5kaW5ncV9jb3VudCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh6ZGV2LCAmemNyeXB0X2RldmljZV9saXN0LCBsaXN0KSB7CisJCXNwaW5fbG9jaygmemRldi0+YXBfZGV2LT5sb2NrKTsKKwkJcGVuZGluZ3FfY291bnQgKz0gemRldi0+YXBfZGV2LT5wZW5kaW5ncV9jb3VudDsKKwkJc3Bpbl91bmxvY2soJnpkZXYtPmFwX2Rldi0+bG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCXJldHVybiBwZW5kaW5ncV9jb3VudDsKK30KKworc3RhdGljIGludCB6Y3J5cHRfcmVxdWVzdHFfY291bnQodm9pZCkKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKwlpbnQgcmVxdWVzdHFfY291bnQgPSAwOworCisJc3Bpbl9sb2NrX2JoKCZ6Y3J5cHRfZGV2aWNlX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoemRldiwgJnpjcnlwdF9kZXZpY2VfbGlzdCwgbGlzdCkgeworCQlzcGluX2xvY2soJnpkZXYtPmFwX2Rldi0+bG9jayk7CisJCXJlcXVlc3RxX2NvdW50ICs9IHpkZXYtPmFwX2Rldi0+cmVxdWVzdHFfY291bnQ7CisJCXNwaW5fdW5sb2NrKCZ6ZGV2LT5hcF9kZXYtPmxvY2spOworCX0KKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlyZXR1cm4gcmVxdWVzdHFfY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgemNyeXB0X2NvdW50X3R5cGUoaW50IHR5cGUpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisJaW50IGRldmljZV9jb3VudCA9IDA7CisKKwlzcGluX2xvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh6ZGV2LCAmemNyeXB0X2RldmljZV9saXN0LCBsaXN0KQorCQlpZiAoemRldi0+dXNlcl9zcGFjZV90eXBlID09IHR5cGUpCisJCQlkZXZpY2VfY291bnQrKzsKKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlyZXR1cm4gZGV2aWNlX2NvdW50OworfQorCisvKioKKyAqIE9sZCwgZGVwcmVjYXRlZCBjb21iaSBzdGF0dXMgY2FsbC4KKyAqLworc3RhdGljIGxvbmcgemNyeXB0X2ljYV9zdGF0dXMoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpY2FfejkwX3N0YXR1cyAqcHN0YXQ7CisJaW50IHJldDsKKworCXBzdGF0ID0ga3phbGxvYyhzaXplb2YoKnBzdGF0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwc3RhdCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcHN0YXQtPnRvdGFsY291bnQgPSB6Y3J5cHRfZGV2aWNlX2NvdW50OworCXBzdGF0LT5sZWVkc2xpdGVjb3VudCA9IHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lDQSk7CisJcHN0YXQtPmxlZWRzMmNvdW50ID0gemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSUNDKTsKKwlwc3RhdC0+cmVxdWVzdHFXYWl0Q291bnQgPSB6Y3J5cHRfcmVxdWVzdHFfY291bnQoKTsKKwlwc3RhdC0+cGVuZGluZ3FXYWl0Q291bnQgPSB6Y3J5cHRfcGVuZGluZ3FfY291bnQoKTsKKwlwc3RhdC0+dG90YWxPcGVuQ291bnQgPSBhdG9taWNfcmVhZCgmemNyeXB0X29wZW5fY291bnQpOworCXBzdGF0LT5jcnlwdG9Eb21haW4gPSBhcF9kb21haW5faW5kZXg7CisJemNyeXB0X3N0YXR1c19tYXNrKHBzdGF0LT5zdGF0dXMpOworCXpjcnlwdF9xZGVwdGhfbWFzayhwc3RhdC0+cWRlcHRoKTsKKwlyZXQgPSAwOworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopIGFyZywgcHN0YXQsIHNpemVvZigqcHN0YXQpKSkKKwkJcmV0ID0gLUVGQVVMVDsKKwlrZnJlZShwc3RhdCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgemNyeXB0X3VubG9ja2VkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJaW50IHJjOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIElDQVJTQU1PREVYUE86IHsKKwkJc3RydWN0IGljYV9yc2FfbW9kZXhwbyBfX3VzZXIgKnVtZXggPSAodm9pZCBfX3VzZXIgKikgYXJnOworCQlzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvIG1leDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZtZXgsIHVtZXgsIHNpemVvZihtZXgpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlkbyB7CisJCQlyYyA9IHpjcnlwdF9yc2FfbW9kZXhwbygmbWV4KTsKKwkJfSB3aGlsZSAocmMgPT0gLUVBR0FJTik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwkJcmV0dXJuIHB1dF91c2VyKG1leC5vdXRwdXRkYXRhbGVuZ3RoLCAmdW1leC0+b3V0cHV0ZGF0YWxlbmd0aCk7CisJfQorCWNhc2UgSUNBUlNBQ1JUOiB7CisJCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IF9fdXNlciAqdWNydCA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CisJCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IGNydDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZjcnQsIHVjcnQsIHNpemVvZihjcnQpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlkbyB7CisJCQlyYyA9IHpjcnlwdF9yc2FfY3J0KCZjcnQpOworCQl9IHdoaWxlIChyYyA9PSAtRUFHQUlOKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQlyZXR1cm4gcHV0X3VzZXIoY3J0Lm91dHB1dGRhdGFsZW5ndGgsICZ1Y3J0LT5vdXRwdXRkYXRhbGVuZ3RoKTsKKwl9CisJY2FzZSBaU0VDU0VORENQUkI6IHsKKwkJc3RydWN0IGljYV94Y1JCIF9fdXNlciAqdXhjUkIgPSAodm9pZCBfX3VzZXIgKikgYXJnOworCQlzdHJ1Y3QgaWNhX3hjUkIgeGNSQjsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ4Y1JCLCB1eGNSQiwgc2l6ZW9mKHhjUkIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlkbyB7CisJCQlyYyA9IHpjcnlwdF9zZW5kX2NwcmIoJnhjUkIpOworCQl9IHdoaWxlIChyYyA9PSAtRUFHQUlOKTsKKwkJaWYgKGNvcHlfdG9fdXNlcih1eGNSQiwgJnhjUkIsIHNpemVvZih4Y1JCKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIHJjOworCX0KKwljYXNlIFo5MFNUQVRfU1RBVFVTX01BU0s6IHsKKwkJY2hhciBzdGF0dXNbQVBfREVWSUNFU107CisJCXpjcnlwdF9zdGF0dXNfbWFzayhzdGF0dXMpOworCQlpZiAoY29weV90b191c2VyKChjaGFyIF9fdXNlciAqKSBhcmcsIHN0YXR1cywKKwkJCQkgc2l6ZW9mKGNoYXIpICogQVBfREVWSUNFUykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisJfQorCWNhc2UgWjkwU1RBVF9RREVQVEhfTUFTSzogeworCQljaGFyIHFkZXB0aFtBUF9ERVZJQ0VTXTsKKwkJemNyeXB0X3FkZXB0aF9tYXNrKHFkZXB0aCk7CisJCWlmIChjb3B5X3RvX3VzZXIoKGNoYXIgX191c2VyICopIGFyZywgcWRlcHRoLAorCQkJCSBzaXplb2YoY2hhcikgKiBBUF9ERVZJQ0VTKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBaOTBTVEFUX1BFUkRFVl9SRVFDTlQ6IHsKKwkJaW50IHJlcWNudFtBUF9ERVZJQ0VTXTsKKwkJemNyeXB0X3BlcmRldl9yZXFjbnQocmVxY250KTsKKwkJaWYgKGNvcHlfdG9fdXNlcigoaW50IF9fdXNlciAqKSBhcmcsIHJlcWNudCwKKwkJCQkgc2l6ZW9mKGludCkgKiBBUF9ERVZJQ0VTKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlyZXR1cm4gMDsKKwl9CisJY2FzZSBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UOgorCQlyZXR1cm4gcHV0X3VzZXIoemNyeXB0X3JlcXVlc3RxX2NvdW50KCksIChpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBaOTBTVEFUX1BFTkRJTkdRX0NPVU5UOgorCQlyZXR1cm4gcHV0X3VzZXIoemNyeXB0X3BlbmRpbmdxX2NvdW50KCksIChpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVDoKKwkJcmV0dXJuIHB1dF91c2VyKGF0b21pY19yZWFkKCZ6Y3J5cHRfb3Blbl9jb3VudCksCisJCQkJKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIFo5MFNUQVRfRE9NQUlOX0lOREVYOgorCQlyZXR1cm4gcHV0X3VzZXIoYXBfZG9tYWluX2luZGV4LCAoaW50IF9fdXNlciAqKSBhcmcpOworCS8qKgorCSAqIERlcHJlY2F0ZWQgaW9jdGxzLiBEb24ndCBhZGQgYW5vdGhlciBkZXZpY2UgY291bnQgaW9jdGwsCisJICogeW91IGNhbiBjb3VudCB0aGVtIHlvdXJzZWxmIGluIHRoZSB1c2VyIHNwYWNlIHdpdGggdGhlCisJICogb3V0cHV0IG9mIHRoZSBaOTBTVEFUX1NUQVRVU19NQVNLIGlvY3RsLgorCSAqLworCWNhc2UgSUNBWjkwU1RBVFVTOgorCQlyZXR1cm4gemNyeXB0X2ljYV9zdGF0dXMoZmlscCwgYXJnKTsKKwljYXNlIFo5MFNUQVRfVE9UQUxDT1VOVDoKKwkJcmV0dXJuIHB1dF91c2VyKHpjcnlwdF9kZXZpY2VfY291bnQsIChpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBaOTBTVEFUX1BDSUNBQ09VTlQ6CisJCXJldHVybiBwdXRfdXNlcih6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0EpLAorCQkJCShpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBaOTBTVEFUX1BDSUNDQ09VTlQ6CisJCXJldHVybiBwdXRfdXNlcih6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0MpLAorCQkJCShpbnQgX191c2VyICopIGFyZyk7CisJY2FzZSBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVDoKKwkJcmV0dXJuIHB1dF91c2VyKHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMiksCisJCQkJKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UOgorCQlyZXR1cm4gcHV0X3VzZXIoemNyeXB0X2NvdW50X3R5cGUoWkNSWVBUX1BDSVhDQ19NQ0wzKSwKKwkJCQkoaW50IF9fdXNlciAqKSBhcmcpOworCWNhc2UgWjkwU1RBVF9QQ0lYQ0NDT1VOVDoKKwkJcmV0dXJuIHB1dF91c2VyKHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMikgKworCQkJCXpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9QQ0lYQ0NfTUNMMyksCisJCQkJKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIFo5MFNUQVRfQ0VYMkNDT1VOVDoKKwkJcmV0dXJuIHB1dF91c2VyKHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQyksCisJCQkJKGludCBfX3VzZXIgKikgYXJnKTsKKwljYXNlIFo5MFNUQVRfQ0VYMkFDT1VOVDoKKwkJcmV0dXJuIHB1dF91c2VyKHpjcnlwdF9jb3VudF90eXBlKFpDUllQVF9DRVgyQSksCisJCQkJKGludCBfX3VzZXIgKikgYXJnKTsKKwlkZWZhdWx0OgorCQkvKiB1bmtub3duIGlvY3RsIG51bWJlciAqLworCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKKy8qKgorICogaW9jdGwzMiBjb252ZXJzaW9uIHJvdXRpbmVzCisgKi8KK3N0cnVjdCBjb21wYXRfaWNhX3JzYV9tb2RleHBvIHsKKwljb21wYXRfdXB0cl90CWlucHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOworCWNvbXBhdF91cHRyX3QJb3V0cHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKKwljb21wYXRfdXB0cl90CWJfa2V5OworCWNvbXBhdF91cHRyX3QJbl9tb2R1bHVzOworfTsKKworc3RhdGljIGxvbmcgdHJhbnNfbW9kZXhwbzMyKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjb21wYXRfaWNhX3JzYV9tb2RleHBvIF9fdXNlciAqdW1leDMyID0gY29tcGF0X3B0cihhcmcpOworCXN0cnVjdCBjb21wYXRfaWNhX3JzYV9tb2RleHBvIG1leDMyOworCXN0cnVjdCBpY2FfcnNhX21vZGV4cG8gbWV4NjQ7CisJbG9uZyByYzsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmbWV4MzIsIHVtZXgzMiwgc2l6ZW9mKG1leDMyKSkpCisJCXJldHVybiAtRUZBVUxUOworCW1leDY0LmlucHV0ZGF0YSA9IGNvbXBhdF9wdHIobWV4MzIuaW5wdXRkYXRhKTsKKwltZXg2NC5pbnB1dGRhdGFsZW5ndGggPSBtZXgzMi5pbnB1dGRhdGFsZW5ndGg7CisJbWV4NjQub3V0cHV0ZGF0YSA9IGNvbXBhdF9wdHIobWV4MzIub3V0cHV0ZGF0YSk7CisJbWV4NjQub3V0cHV0ZGF0YWxlbmd0aCA9IG1leDMyLm91dHB1dGRhdGFsZW5ndGg7CisJbWV4NjQuYl9rZXkgPSBjb21wYXRfcHRyKG1leDMyLmJfa2V5KTsKKwltZXg2NC5uX21vZHVsdXMgPSBjb21wYXRfcHRyKG1leDMyLm5fbW9kdWx1cyk7CisJZG8geworCQlyYyA9IHpjcnlwdF9yc2FfbW9kZXhwbygmbWV4NjQpOworCX0gd2hpbGUgKHJjID09IC1FQUdBSU4pOworCWlmICghcmMpCisJCXJjID0gcHV0X3VzZXIobWV4NjQub3V0cHV0ZGF0YWxlbmd0aCwKKwkJCSAgICAgICZ1bWV4MzItPm91dHB1dGRhdGFsZW5ndGgpOworCXJldHVybiByYzsKK30KKworc3RydWN0IGNvbXBhdF9pY2FfcnNhX21vZGV4cG9fY3J0IHsKKwljb21wYXRfdXB0cl90CWlucHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOworCWNvbXBhdF91cHRyX3QJb3V0cHV0ZGF0YTsKKwl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKKwljb21wYXRfdXB0cl90CWJwX2tleTsKKwljb21wYXRfdXB0cl90CWJxX2tleTsKKwljb21wYXRfdXB0cl90CW5wX3ByaW1lOworCWNvbXBhdF91cHRyX3QJbnFfcHJpbWU7CisJY29tcGF0X3VwdHJfdAl1X211bHRfaW52OworfTsKKworc3RhdGljIGxvbmcgdHJhbnNfbW9kZXhwb19jcnQzMihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgY29tcGF0X2ljYV9yc2FfbW9kZXhwb19jcnQgX191c2VyICp1Y3J0MzIgPSBjb21wYXRfcHRyKGFyZyk7CisJc3RydWN0IGNvbXBhdF9pY2FfcnNhX21vZGV4cG9fY3J0IGNydDMyOworCXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IGNydDY0OworCWxvbmcgcmM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmNydDMyLCB1Y3J0MzIsIHNpemVvZihjcnQzMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwljcnQ2NC5pbnB1dGRhdGEgPSBjb21wYXRfcHRyKGNydDMyLmlucHV0ZGF0YSk7CisJY3J0NjQuaW5wdXRkYXRhbGVuZ3RoID0gY3J0MzIuaW5wdXRkYXRhbGVuZ3RoOworCWNydDY0Lm91dHB1dGRhdGE9ICBjb21wYXRfcHRyKGNydDMyLm91dHB1dGRhdGEpOworCWNydDY0Lm91dHB1dGRhdGFsZW5ndGggPSBjcnQzMi5vdXRwdXRkYXRhbGVuZ3RoOworCWNydDY0LmJwX2tleSA9IGNvbXBhdF9wdHIoY3J0MzIuYnBfa2V5KTsKKwljcnQ2NC5icV9rZXkgPSBjb21wYXRfcHRyKGNydDMyLmJxX2tleSk7CisJY3J0NjQubnBfcHJpbWUgPSBjb21wYXRfcHRyKGNydDMyLm5wX3ByaW1lKTsKKwljcnQ2NC5ucV9wcmltZSA9IGNvbXBhdF9wdHIoY3J0MzIubnFfcHJpbWUpOworCWNydDY0LnVfbXVsdF9pbnYgPSBjb21wYXRfcHRyKGNydDMyLnVfbXVsdF9pbnYpOworCWRvIHsKKwkJcmMgPSB6Y3J5cHRfcnNhX2NydCgmY3J0NjQpOworCX0gd2hpbGUgKHJjID09IC1FQUdBSU4pOworCWlmICghcmMpCisJCXJjID0gcHV0X3VzZXIoY3J0NjQub3V0cHV0ZGF0YWxlbmd0aCwKKwkJCSAgICAgICZ1Y3J0MzItPm91dHB1dGRhdGFsZW5ndGgpOworCXJldHVybiByYzsKK30KKworc3RydWN0IGNvbXBhdF9pY2FfeGNSQiB7CisJdW5zaWduZWQgc2hvcnQJYWdlbnRfSUQ7CisJdW5zaWduZWQgaW50CXVzZXJfZGVmaW5lZDsKKwl1bnNpZ25lZCBzaG9ydAlyZXF1ZXN0X0lEOworCXVuc2lnbmVkIGludAlyZXF1ZXN0X2NvbnRyb2xfYmxrX2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyCXBhZGRpbmcxWzE2IC0gc2l6ZW9mIChjb21wYXRfdXB0cl90KV07CisJY29tcGF0X3VwdHJfdAlyZXF1ZXN0X2NvbnRyb2xfYmxrX2FkZHI7CisJdW5zaWduZWQgaW50CXJlcXVlc3RfZGF0YV9sZW5ndGg7CisJY2hhcgkJcGFkZGluZzJbMTYgLSBzaXplb2YgKGNvbXBhdF91cHRyX3QpXTsKKwljb21wYXRfdXB0cl90CXJlcXVlc3RfZGF0YV9hZGRyZXNzOworCXVuc2lnbmVkIGludAlyZXBseV9jb250cm9sX2Jsa19sZW5ndGg7CisJY2hhcgkJcGFkZGluZzNbMTYgLSBzaXplb2YgKGNvbXBhdF91cHRyX3QpXTsKKwljb21wYXRfdXB0cl90CXJlcGx5X2NvbnRyb2xfYmxrX2FkZHI7CisJdW5zaWduZWQgaW50CXJlcGx5X2RhdGFfbGVuZ3RoOworCWNoYXIJCXBhZGRpbmc0WzE2IC0gc2l6ZW9mIChjb21wYXRfdXB0cl90KV07CisJY29tcGF0X3VwdHJfdAlyZXBseV9kYXRhX2FkZHI7CisJdW5zaWduZWQgc2hvcnQJcHJpb3JpdHlfd2luZG93OworCXVuc2lnbmVkIGludAlzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgbG9uZyB0cmFuc194Y1JCMzIoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGNvbXBhdF9pY2FfeGNSQiBfX3VzZXIgKnV4Y1JCMzIgPSBjb21wYXRfcHRyKGFyZyk7CisJc3RydWN0IGNvbXBhdF9pY2FfeGNSQiB4Y1JCMzI7CisJc3RydWN0IGljYV94Y1JCIHhjUkI2NDsKKwlsb25nIHJjOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ4Y1JCMzIsIHV4Y1JCMzIsIHNpemVvZih4Y1JCMzIpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJeGNSQjY0LmFnZW50X0lEID0geGNSQjMyLmFnZW50X0lEOworCXhjUkI2NC51c2VyX2RlZmluZWQgPSB4Y1JCMzIudXNlcl9kZWZpbmVkOworCXhjUkI2NC5yZXF1ZXN0X0lEID0geGNSQjMyLnJlcXVlc3RfSUQ7CisJeGNSQjY0LnJlcXVlc3RfY29udHJvbF9ibGtfbGVuZ3RoID0KKwkJeGNSQjMyLnJlcXVlc3RfY29udHJvbF9ibGtfbGVuZ3RoOworCXhjUkI2NC5yZXF1ZXN0X2NvbnRyb2xfYmxrX2FkZHIgPQorCQljb21wYXRfcHRyKHhjUkIzMi5yZXF1ZXN0X2NvbnRyb2xfYmxrX2FkZHIpOworCXhjUkI2NC5yZXF1ZXN0X2RhdGFfbGVuZ3RoID0KKwkJeGNSQjMyLnJlcXVlc3RfZGF0YV9sZW5ndGg7CisJeGNSQjY0LnJlcXVlc3RfZGF0YV9hZGRyZXNzID0KKwkJY29tcGF0X3B0cih4Y1JCMzIucmVxdWVzdF9kYXRhX2FkZHJlc3MpOworCXhjUkI2NC5yZXBseV9jb250cm9sX2Jsa19sZW5ndGggPQorCQl4Y1JCMzIucmVwbHlfY29udHJvbF9ibGtfbGVuZ3RoOworCXhjUkI2NC5yZXBseV9jb250cm9sX2Jsa19hZGRyID0KKwkJY29tcGF0X3B0cih4Y1JCMzIucmVwbHlfY29udHJvbF9ibGtfYWRkcik7CisJeGNSQjY0LnJlcGx5X2RhdGFfbGVuZ3RoID0geGNSQjMyLnJlcGx5X2RhdGFfbGVuZ3RoOworCXhjUkI2NC5yZXBseV9kYXRhX2FkZHIgPQorCQljb21wYXRfcHRyKHhjUkIzMi5yZXBseV9kYXRhX2FkZHIpOworCXhjUkI2NC5wcmlvcml0eV93aW5kb3cgPSB4Y1JCMzIucHJpb3JpdHlfd2luZG93OworCXhjUkI2NC5zdGF0dXMgPSB4Y1JCMzIuc3RhdHVzOworCWRvIHsKKwkJcmMgPSB6Y3J5cHRfc2VuZF9jcHJiKCZ4Y1JCNjQpOworCX0gd2hpbGUgKHJjID09IC1FQUdBSU4pOworCXhjUkIzMi5yZXBseV9jb250cm9sX2Jsa19sZW5ndGggPSB4Y1JCNjQucmVwbHlfY29udHJvbF9ibGtfbGVuZ3RoOworCXhjUkIzMi5yZXBseV9kYXRhX2xlbmd0aCA9IHhjUkI2NC5yZXBseV9kYXRhX2xlbmd0aDsKKwl4Y1JCMzIuc3RhdHVzID0geGNSQjY0LnN0YXR1czsKKwlpZiAoY29weV90b191c2VyKHV4Y1JCMzIsICZ4Y1JCMzIsIHNpemVvZih4Y1JCMzIpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXJldHVybiByYzsKK30KKworbG9uZyB6Y3J5cHRfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWlmIChjbWQgPT0gSUNBUlNBTU9ERVhQTykKKwkJcmV0dXJuIHRyYW5zX21vZGV4cG8zMihmaWxwLCBjbWQsIGFyZyk7CisJaWYgKGNtZCA9PSBJQ0FSU0FDUlQpCisJCXJldHVybiB0cmFuc19tb2RleHBvX2NydDMyKGZpbHAsIGNtZCwgYXJnKTsKKwlpZiAoY21kID09IFpTRUNTRU5EQ1BSQikKKwkJcmV0dXJuIHRyYW5zX3hjUkIzMihmaWxwLCBjbWQsIGFyZyk7CisJcmV0dXJuIHpjcnlwdF91bmxvY2tlZF9pb2N0bChmaWxwLCBjbWQsIGFyZyk7Cit9CisjZW5kaWYKKworLyoqCisgKiBNaXNjIGRldmljZSBmaWxlIG9wZXJhdGlvbnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHpjcnlwdF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSB6Y3J5cHRfcmVhZCwKKwkud3JpdGUJCT0gemNyeXB0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IHpjcnlwdF91bmxvY2tlZF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IHpjcnlwdF9jb21wYXRfaW9jdGwsCisjZW5kaWYKKwkub3BlbgkJPSB6Y3J5cHRfb3BlbiwKKwkucmVsZWFzZQk9IHpjcnlwdF9yZWxlYXNlCit9OworCisvKioKKyAqIE1pc2MgZGV2aWNlLgorICovCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgemNyeXB0X21pc2NfZGV2aWNlID0geworCS5taW5vcgkgICAgPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUJICAgID0gIno5MGNyeXB0IiwKKwkuZm9wcwkgICAgPSAmemNyeXB0X2ZvcHMsCit9OworCisvKioKKyAqIERlcHJlY2F0ZWQgL3Byb2MgZW50cnkgc3VwcG9ydC4KKyAqLworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqemNyeXB0X2VudHJ5OworCitzdGF0aWMgaW5saW5lIGludCBzcHJpbnRjbCh1bnNpZ25lZCBjaGFyICpvdXRhZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaGwsIGk7CisKKwlobCA9IDA7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQorCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICIlMDF4IiwgKHVuc2lnbmVkIGludCkgYWRkcltpXSk7CisJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiICIpOworCXJldHVybiBobDsKK30KKworc3RhdGljIGlubGluZSBpbnQgc3ByaW50cncodW5zaWduZWQgY2hhciAqb3V0YWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGhsLCBpbmwsIGMsIGN4OworCisJaGwgPSBzcHJpbnRmKG91dGFkZHIsICIJICAgIik7CisJaW5sID0gMDsKKwlmb3IgKGMgPSAwOyBjIDwgKGxlbiAvIDE2KTsgYysrKSB7CisJCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCAxNik7CisJCWlubCArPSAxNjsKKwl9CisJY3ggPSBsZW4lMTY7CisJaWYgKGN4KSB7CisJCWhsICs9IHNwcmludGNsKG91dGFkZHIraGwsIGFkZHIraW5sLCBjeCk7CisJCWlubCArPSBjeDsKKwl9CisJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiXG4iKTsKKwlyZXR1cm4gaGw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNwcmludGh4KHVuc2lnbmVkIGNoYXIgKnRpdGxlLCB1bnNpZ25lZCBjaGFyICpvdXRhZGRyLAorCQkJICAgdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaGwsIGlubCwgciwgcng7CisKKwlobCA9IHNwcmludGYob3V0YWRkciwgIlxuJXNcbiIsIHRpdGxlKTsKKwlpbmwgPSAwOworCWZvciAociA9IDA7IHIgPCAobGVuIC8gNjQpOyByKyspIHsKKwkJaGwgKz0gc3ByaW50cncob3V0YWRkcitobCwgYWRkcitpbmwsIDY0KTsKKwkJaW5sICs9IDY0OworCX0KKwlyeCA9IGxlbiAlIDY0OworCWlmIChyeCkgeworCQlobCArPSBzcHJpbnRydyhvdXRhZGRyK2hsLCBhZGRyK2lubCwgcngpOworCQlpbmwgKz0gcng7CisJfQorCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIlxuIik7CisJcmV0dXJuIGhsOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcHJpbnRoeDQodW5zaWduZWQgY2hhciAqdGl0bGUsIHVuc2lnbmVkIGNoYXIgKm91dGFkZHIsCisJCQkgICAgdW5zaWduZWQgaW50ICphcnJheSwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaGwsIHI7CisKKwlobCA9IHNwcmludGYob3V0YWRkciwgIlxuJXNcbiIsIHRpdGxlKTsKKwlmb3IgKHIgPSAwOyByIDwgbGVuOyByKyspIHsKKwkJaWYgKChyICUgOCkgPT0gMCkKKwkJCWhsICs9IHNwcmludGYob3V0YWRkcitobCwgIiAgICAiKTsKKwkJaGwgKz0gc3ByaW50ZihvdXRhZGRyK2hsLCAiJTA4WCAiLCBhcnJheVtyXSk7CisJCWlmICgociAlIDgpID09IDcpCisJCQlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOworCX0KKwlobCArPSBzcHJpbnRmKG91dGFkZHIraGwsICJcbiIpOworCXJldHVybiBobDsKK30KKworc3RhdGljIGludCB6Y3J5cHRfc3RhdHVzX3JlYWQoY2hhciAqcmVzcF9idWZmLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZnNldCwKKwkJCSAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCit7CisJdW5zaWduZWQgY2hhciAqd29ya2FyZWE7CisJaW50IGxlbjsKKworCWxlbiA9IDA7CisKKwkvKiByZXNwX2J1ZmYgaXMgYSBwYWdlLiBVc2UgdGhlIHJpZ2h0IGhhbGYgZm9yIGEgd29yayBhcmVhICovCisJd29ya2FyZWEgPSByZXNwX2J1ZmYgKyAyMDAwOworCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlxuemNyeXB0IHZlcnNpb246ICVkLiVkLiVkXG4iLAorCQlaQ1JZUFRfVkVSU0lPTiwgWkNSWVBUX1JFTEVBU0UsIFpDUllQVF9WQVJJQU5UKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDcnlwdG9ncmFwaGljIGRvbWFpbjogJWRcbiIsCisJCSAgICAgICBhcF9kb21haW5faW5kZXgpOworCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlRvdGFsIGRldmljZSBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfZGV2aWNlX2NvdW50KTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lDQSBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0EpKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lDQyBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJQ0MpKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lYQ0MgTUNMMiBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDIpKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJQQ0lYQ0MgTUNMMyBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfUENJWENDX01DTDMpKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDRVgyQyBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkMpKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJDRVgyQSBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfY291bnRfdHlwZShaQ1JZUFRfQ0VYMkEpKTsKKwlsZW4gKz0gc3ByaW50ZihyZXNwX2J1ZmYgKyBsZW4sICJyZXF1ZXN0cSBjb3VudDogJWRcbiIsCisJCSAgICAgICB6Y3J5cHRfcmVxdWVzdHFfY291bnQoKSk7CisJbGVuICs9IHNwcmludGYocmVzcF9idWZmICsgbGVuLCAicGVuZGluZ3EgY291bnQ6ICVkXG4iLAorCQkgICAgICAgemNyeXB0X3BlbmRpbmdxX2NvdW50KCkpOworCWxlbiArPSBzcHJpbnRmKHJlc3BfYnVmZiArIGxlbiwgIlRvdGFsIG9wZW4gaGFuZGxlczogJWRcblxuIiwKKwkJICAgICAgIGF0b21pY19yZWFkKCZ6Y3J5cHRfb3Blbl9jb3VudCkpOworCXpjcnlwdF9zdGF0dXNfbWFzayh3b3JrYXJlYSk7CisJbGVuICs9IHNwcmludGh4KCJPbmxpbmUgZGV2aWNlczogMT1QQ0lDQSAyPVBDSUNDIDM9UENJWENDKE1DTDIpICIKKwkJCSI0PVBDSVhDQyhNQ0wzKSA1PUNFWDJDIDY9Q0VYMkEiLAorCQkJcmVzcF9idWZmK2xlbiwgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXpjcnlwdF9xZGVwdGhfbWFzayh3b3JrYXJlYSk7CisJbGVuICs9IHNwcmludGh4KCJXYWl0aW5nIHdvcmsgZWxlbWVudCBjb3VudHMiLAorCQkJcmVzcF9idWZmK2xlbiwgd29ya2FyZWEsIEFQX0RFVklDRVMpOworCXpjcnlwdF9wZXJkZXZfcmVxY250KCh1bnNpZ25lZCBpbnQgKikgd29ya2FyZWEpOworCWxlbiArPSBzcHJpbnRoeDQoIlBlci1kZXZpY2Ugc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCByZXF1ZXN0IGNvdW50cyIsCisJCQkgcmVzcF9idWZmK2xlbiwodW5zaWduZWQgaW50ICopIHdvcmthcmVhLCBBUF9ERVZJQ0VTKTsKKwkqZW9mID0gMTsKKwltZW1zZXQoKHZvaWQgKikgd29ya2FyZWEsIDB4MDAsIEFQX0RFVklDRVMgKiBzaXplb2YodW5zaWduZWQgaW50KSk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIHZvaWQgemNyeXB0X2Rpc2FibGVfY2FyZChpbnQgaW5kZXgpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisKKwlzcGluX2xvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeSh6ZGV2LCAmemNyeXB0X2RldmljZV9saXN0LCBsaXN0KQorCQlpZiAoQVBfUUlEX0RFVklDRSh6ZGV2LT5hcF9kZXYtPnFpZCkgPT0gaW5kZXgpIHsKKwkJCXpkZXYtPm9ubGluZSA9IDA7CisJCQlhcF9mbHVzaF9xdWV1ZSh6ZGV2LT5hcF9kZXYpOworCQkJYnJlYWs7CisJCX0KKwlzcGluX3VubG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgemNyeXB0X2VuYWJsZV9jYXJkKGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKworCXNwaW5fbG9ja19iaCgmemNyeXB0X2RldmljZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHpkZXYsICZ6Y3J5cHRfZGV2aWNlX2xpc3QsIGxpc3QpCisJCWlmIChBUF9RSURfREVWSUNFKHpkZXYtPmFwX2Rldi0+cWlkKSA9PSBpbmRleCkgeworCQkJemRldi0+b25saW5lID0gMTsKKwkJCWJyZWFrOworCQl9CisJc3Bpbl91bmxvY2tfYmgoJnpjcnlwdF9kZXZpY2VfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgemNyeXB0X3N0YXR1c193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCB2b2lkICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgKmxidWYsICpwdHI7CisJdW5zaWduZWQgbG9uZyBsb2NhbF9jb3VudDsKKwlpbnQgajsKKworCWlmIChjb3VudCA8PSAwKQorCQlyZXR1cm4gMDsKKworI2RlZmluZSBMQlVGU0laRSAxMjAwVUwKKwlsYnVmID0ga21hbGxvYyhMQlVGU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsYnVmKSB7CisJCVBSSU5USygia21hbGxvYyBmYWlsZWQhXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbG9jYWxfY291bnQgPSBtaW4oTEJVRlNJWkUgLSAxLCBjb3VudCk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGxidWYsIGJ1ZmZlciwgbG9jYWxfY291bnQpICE9IDApIHsKKwkJa2ZyZWUobGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlsYnVmW2xvY2FsX2NvdW50XSA9ICdcMCc7CisKKwlwdHIgPSBzdHJzdHIobGJ1ZiwgIk9ubGluZSBkZXZpY2VzIik7CisJaWYgKCFwdHIpIHsKKwkJUFJJTlRLKCJVbmFibGUgdG8gcGFyc2UgZGF0YSAobWlzc2luZyBcIk9ubGluZSBkZXZpY2VzXCIpXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCXB0ciA9IHN0cnN0cihwdHIsICJcbiIpOworCWlmICghcHRyKSB7CisJCVBSSU5USygiVW5hYmxlIHRvIHBhcnNlIGRhdGEgKG1pc3NpbmcgbmV3bGluZSAiCisJCSAgICAgICAiYWZ0ZXIgXCJPbmxpbmUgZGV2aWNlc1wiKVxuIik7CisJCWdvdG8gb3V0OworCX0KKwlwdHIrKzsKKworCWlmIChzdHJzdHIocHRyLCAiV2FpdGluZyB3b3JrIGVsZW1lbnQgY291bnRzIikgPT0gTlVMTCkgeworCQlQUklOVEsoIlVuYWJsZSB0byBwYXJzZSBkYXRhIChtaXNzaW5nICIKKwkJICAgICAgICJcIldhaXRpbmcgd29yayBlbGVtZW50IGNvdW50c1wiKVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZvciAoaiA9IDA7IGogPCA2NCAmJiAqcHRyOyBwdHIrKykgeworCQkvKioKKwkJICogJzAnIGZvciBubyBkZXZpY2UsICcxJyBmb3IgUENJQ0EsICcyJyBmb3IgUENJQ0MsCisJCSAqICczJyBmb3IgUENJWENDX01DTDIsICc0JyBmb3IgUENJWENDX01DTDMsCisJCSAqICc1JyBmb3IgQ0VYMkMgYW5kICc2JyBmb3IgQ0VYMkEnCisJCSAqLworCQlpZiAoKnB0ciA+PSAnMCcgJiYgKnB0ciA8PSAnNicpCisJCQlqKys7CisJCWVsc2UgaWYgKCpwdHIgPT0gJ2QnIHx8ICpwdHIgPT0gJ0QnKQorCQkJemNyeXB0X2Rpc2FibGVfY2FyZChqKyspOworCQllbHNlIGlmICgqcHRyID09ICdlJyB8fCAqcHRyID09ICdFJykKKwkJCXpjcnlwdF9lbmFibGVfY2FyZChqKyspOworCQllbHNlIGlmICgqcHRyICE9ICcgJyAmJiAqcHRyICE9ICdcdCcpCisJCQlicmVhazsKKwl9CitvdXQ6CisJa2ZyZWUobGJ1Zik7CisJcmV0dXJuIGNvdW50OworfQorCisvKioKKyAqIFRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gY29kZS4KKyAqLworaW50IF9faW5pdCB6Y3J5cHRfYXBpX2luaXQodm9pZCkKK3sKKwlpbnQgcmM7CisKKwkvKiBSZWdpc3RlciB0aGUgcmVxdWVzdCBzcHJheWVyLiAqLworCXJjID0gbWlzY19yZWdpc3RlcigmemNyeXB0X21pc2NfZGV2aWNlKTsKKwlpZiAocmMgPCAwKSB7CisJCVBSSU5US1coS0VSTl9FUlIgIm1pc2NfcmVnaXN0ZXIgKG1pbm9yICVkKSBmYWlsZWQgd2l0aCAlZFxuIiwKKwkJCXpjcnlwdF9taXNjX2RldmljZS5taW5vciwgcmMpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBTZXQgdXAgdGhlIHByb2MgZmlsZSBzeXN0ZW0gKi8KKwl6Y3J5cHRfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHJpdmVyL3o5MGNyeXB0IiwgMDY0NCwgTlVMTCk7CisJaWYgKCF6Y3J5cHRfZW50cnkpIHsKKwkJUFJJTlRLKCJDb3VsZG4ndCBjcmVhdGUgejkwY3J5cHQgcHJvYyBlbnRyeVxuIik7CisJCXJjID0gLUVOT01FTTsKKwkJZ290byBvdXRfbWlzYzsKKwl9CisJemNyeXB0X2VudHJ5LT5ubGluayA9IDE7CisJemNyeXB0X2VudHJ5LT5kYXRhID0gTlVMTDsKKwl6Y3J5cHRfZW50cnktPnJlYWRfcHJvYyA9IHpjcnlwdF9zdGF0dXNfcmVhZDsKKwl6Y3J5cHRfZW50cnktPndyaXRlX3Byb2MgPSB6Y3J5cHRfc3RhdHVzX3dyaXRlOworCisJcmV0dXJuIDA7CisKK291dF9taXNjOgorCW1pc2NfZGVyZWdpc3RlcigmemNyeXB0X21pc2NfZGV2aWNlKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhlIG1vZHVsZSB0ZXJtaW5hdGlvbiBjb2RlLgorICovCit2b2lkIHpjcnlwdF9hcGlfZXhpdCh2b2lkKQoreworCXJlbW92ZV9wcm9jX2VudHJ5KCJkcml2ZXIvejkwY3J5cHQiLCBOVUxMKTsKKwltaXNjX2RlcmVnaXN0ZXIoJnpjcnlwdF9taXNjX2RldmljZSk7Cit9CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCittb2R1bGVfaW5pdCh6Y3J5cHRfYXBpX2luaXQpOworbW9kdWxlX2V4aXQoemNyeXB0X2FwaV9leGl0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTQ4NzdlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfYXBpLmgKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoJICAgICAgIENvcm5lbGlhIEh1Y2sgPGNvcm5lbGlhLmh1Y2tAZGUuaWJtLmNvbT4KKyAqCisgKiAgSG90cGx1ZyAmIG1pc2MgZGV2aWNlIHN1cHBvcnQ6IEpvY2hlbiBSb2VocmlnIChyb2VocmlnQGRlLmlibS5jb20pCisgKiAgTWFqb3IgY2xlYW51cCAmIGRyaXZlciBzcGxpdDogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICoJCQkJICBSYWxwaCBXdWVydGhuZXIgPHJ3dWVydGhuQGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9aQ1JZUFRfQVBJX0hfCisjZGVmaW5lIF9aQ1JZUFRfQVBJX0hfCisKKy8qKgorICogTWFjcm8gZGVmaW5pdGlvbnMKKyAqCisgKiBQREVCVUcgZGVidWdzIGluIHRoZSBmb3JtICJ6Y3J5cHQ6IGZ1bmN0aW9uX25hbWUgLT4gbWVzc2FnZSIKKyAqCisgKiBQUklOVEsgaXMgbGlrZSBQREVCVUcsIGV4Y2VwdCB0aGF0IGl0IGlzIGFsd2F5cyBlbmFibGVkCisgKiBQUklOVEtOIGlzIGxpa2UgUFJJTlRLLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSBmdW5jdGlvbiBuYW1lCisgKiBQUklOVEtXIGlzIGxpa2UgUFJJTlRLLCBleGNlcHQgdGhhdCBpdCB1c2VzIEtFUk5fV0FSTklORworICogUFJJTlRLQyBpcyBsaWtlIFBSSU5USywgZXhjZXB0IHRoYXQgaXQgdXNlcyBLRVJOX0NSSVQKKyAqLworI2RlZmluZSBERVZfTkFNRQkiemNyeXB0IgorCisjZGVmaW5lIFBSSU5USyhmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAlcyAtPiAiIGZtdCwgX19GVU5DVElPTl9fICwgIyMgYXJncykKKyNkZWZpbmUgUFJJTlRLTihmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyBERVZfTkFNRSAiOiAiIGZtdCwgIyMgYXJncykKKyNkZWZpbmUgUFJJTlRLVyhmbXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9XQVJOSU5HIERFVl9OQU1FICI6ICVzIC0+ICIgZm10LCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKQorI2RlZmluZSBQUklOVEtDKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0NSSVQgREVWX05BTUUgIjogJXMgLT4gIiBmbXQsIF9fRlVOQ1RJT05fXyAsICMjIGFyZ3MpCisKKyNpZmRlZiBaQ1JZUFRfREVCVUcKKyNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikgXAorCXByaW50ayhLRVJOX0RFQlVHIERFVl9OQU1FICI6ICVzIC0+ICIgZm10LCBfX0ZVTkNUSU9OX18gLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCisjZW5kaWYKKworI2luY2x1ZGUgImFwX2J1cy5oIgorI2luY2x1ZGUgPGFzbS96Y3J5cHQuaD4KKworLyogZGVwcmVjYXRlZCBzdGF0dXMgY2FsbHMgKi8KKyNkZWZpbmUgSUNBWjkwU1RBVFVTCQlfSU9SKFpDUllQVF9JT0NUTF9NQUdJQywgMHgxMCwgc3RydWN0IGljYV96OTBfc3RhdHVzKQorI2RlZmluZSBaOTBTVEFUX1BDSVhDQ0NPVU5UCV9JT1IoWkNSWVBUX0lPQ1RMX01BR0lDLCAweDQzLCBpbnQpCisKKy8qKgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgZGVwcmVjYXRlZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgaW9jdGwoKSBoYXMgYmVlbgorICogcmVwbGFjZWQgd2l0aCBpbmRpdmlkdWFsIGlvY3RsKClzIGZvciBlYWNoIHBpZWNlIG9mIGRhdGEhCisgKi8KK3N0cnVjdCBpY2FfejkwX3N0YXR1cyB7CisJaW50IHRvdGFsY291bnQ7CisJaW50IGxlZWRzbGl0ZWNvdW50OyAvLyBQQ0lDQQorCWludCBsZWVkczJjb3VudDsgICAgLy8gUENJQ0MKKwkvLyBpbnQgUENJWENDQ291bnQ7IGlzIG5vdCBpbiBzdHJ1Y3QgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKKwlpbnQgcmVxdWVzdHFXYWl0Q291bnQ7CisJaW50IHBlbmRpbmdxV2FpdENvdW50OworCWludCB0b3RhbE9wZW5Db3VudDsKKwlpbnQgY3J5cHRvRG9tYWluOworCS8vIHN0YXR1czogMD1ub3QgdGhlcmUsIDE9UENJQ0EsIDI9UENJQ0MsIDM9UENJWENDX01DTDIsIDQ9UENJWENDX01DTDMsCisJLy8JICAgNT1DRVgyQworCXVuc2lnbmVkIGNoYXIgc3RhdHVzWzY0XTsKKwkvLyBxZGVwdGg6ICMgd29yayBlbGVtZW50cyB3YWl0aW5nIGZvciBlYWNoIGRldmljZQorCXVuc2lnbmVkIGNoYXIgcWRlcHRoWzY0XTsKK307CisKKy8qKgorICogZGV2aWNlIHR5cGUgZm9yIGFuIGFjdHVhbCBkZXZpY2UgaXMgZWl0aGVyIFBDSUNBLCBQQ0lDQywgUENJWENDX01DTDIsCisgKiBQQ0lYQ0NfTUNMMywgQ0VYMkMsIG9yIENFWDJBCisgKgorICogTk9URTogUENJWENDX01DTDMgcmVmZXJzIHRvIGEgUENJWENDIHdpdGggTWF5IDIwMDQgdmVyc2lvbiBvZiBMaWNlbnNlZAorICoJIEludGVybmFsIENvZGUgKExJQykgKEVDIEoxMjIyMCBsZXZlbCAyOSkuCisgKgkgUENJWENDX01DTDIgcmVmZXJzIHRvIGFueSBMSUMgYmVmb3JlIHRoaXMgbGV2ZWwuCisgKi8KKyNkZWZpbmUgWkNSWVBUX1BDSUNBCQkxCisjZGVmaW5lIFpDUllQVF9QQ0lDQwkJMgorI2RlZmluZSBaQ1JZUFRfUENJWENDX01DTDIJMworI2RlZmluZSBaQ1JZUFRfUENJWENDX01DTDMJNAorI2RlZmluZSBaQ1JZUFRfQ0VYMkMJCTUKKyNkZWZpbmUgWkNSWVBUX0NFWDJBCQk2CisKK3N0cnVjdCB6Y3J5cHRfZGV2aWNlOworCitzdHJ1Y3QgemNyeXB0X29wcyB7CisJbG9uZyAoKnJzYV9tb2RleHBvKShzdHJ1Y3QgemNyeXB0X2RldmljZSAqLCBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICopOworCWxvbmcgKCpyc2FfbW9kZXhwb19jcnQpKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICosCisJCQkJc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKik7CisJbG9uZyAoKnNlbmRfY3ByYikoc3RydWN0IHpjcnlwdF9kZXZpY2UgKiwgc3RydWN0IGljYV94Y1JCICopOworfTsKKworc3RydWN0IHpjcnlwdF9kZXZpY2UgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsJCS8qIERldmljZSBsaXN0LiAqLworCXNwaW5sb2NrX3QgbG9jazsJCS8qIFBlciBkZXZpY2UgbG9jay4gKi8KKwlzdHJ1Y3Qga3JlZiByZWZjb3VudDsJCS8qIGRldmljZSByZWZjb3VudGluZyAqLworCXN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldjsJLyogVGhlICJyZWFsIiBhcCBkZXZpY2UuICovCisJc3RydWN0IHpjcnlwdF9vcHMgKm9wczsJCS8qIENyeXB0byBvcGVyYXRpb25zLiAqLworCWludCBvbmxpbmU7CQkJLyogVXNlciBvbmxpbmUvb2ZmbGluZSAqLworCisJaW50IHVzZXJfc3BhY2VfdHlwZTsJCS8qIFVzZXIgc3BhY2UgZGV2aWNlIGlkLiAqLworCWNoYXIgKnR5cGVfc3RyaW5nOwkJLyogVXNlciBzcGFjZSBkZXZpY2UgbmFtZS4gKi8KKwlpbnQgbWluX21vZF9zaXplOwkJLyogTWluIG51bWJlciBvZiBiaXRzLiAqLworCWludCBtYXhfbW9kX3NpemU7CQkvKiBNYXggbnVtYmVyIG9mIGJpdHMuICovCisJaW50IHNob3J0X2NydDsJCQkvKiBDYXJkIGhhcyBjcnQgbGVuZ3RoIHJlc3RyaWN0aW9uLiAqLworCWludCBzcGVlZF9yYXRpbmc7CQkvKiBTcGVlZCBvZiB0aGUgY3J5cHRvIGRldmljZS4gKi8KKworCWludCByZXF1ZXN0X2NvdW50OwkJLyogIyBjdXJyZW50IHJlcXVlc3RzLiAqLworCisJc3RydWN0IGFwX21lc3NhZ2UgcmVwbHk7CS8qIFBlci1kZXZpY2UgcmVwbHkgc3RydWN0dXJlLiAqLworfTsKKworc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpjcnlwdF9kZXZpY2VfYWxsb2Moc2l6ZV90KTsKK3ZvaWQgemNyeXB0X2RldmljZV9mcmVlKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICopOwordm9pZCB6Y3J5cHRfZGV2aWNlX2dldChzdHJ1Y3QgemNyeXB0X2RldmljZSAqKTsKK2ludCB6Y3J5cHRfZGV2aWNlX3B1dChzdHJ1Y3QgemNyeXB0X2RldmljZSAqKTsKK2ludCB6Y3J5cHRfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICopOwordm9pZCB6Y3J5cHRfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHpjcnlwdF9kZXZpY2UgKik7CitpbnQgemNyeXB0X2FwaV9pbml0KHZvaWQpOwordm9pZCB6Y3J5cHRfYXBpX2V4aXQodm9pZCk7CisKKyNlbmRpZiAvKiBfWkNSWVBUX0FQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2NhX2tleS5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2NhX2tleS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYmNmMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jY2Ffa2V5LmgKQEAgLTAsMCArMSwzNTAgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2NhX2tleS5oCisgKgorICogIHpjcnlwdCAyLjEuMAorICoKKyAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocworICoJICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKKyAqCisgKiAgSG90cGx1ZyAmIG1pc2MgZGV2aWNlIHN1cHBvcnQ6IEpvY2hlbiBSb2VocmlnIChyb2VocmlnQGRlLmlibS5jb20pCisgKiAgTWFqb3IgY2xlYW51cCAmIGRyaXZlciBzcGxpdDogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfWkNSWVBUX0NDQV9LRVlfSF8KKyNkZWZpbmUgX1pDUllQVF9DQ0FfS0VZX0hfCisKK3N0cnVjdCBUNl9rZXlCbG9ja19oZHIgeworCXVuc2lnbmVkIHNob3J0IGJsZW47CisJdW5zaWduZWQgc2hvcnQgdWxlbjsKKwl1bnNpZ25lZCBzaG9ydCBmbGFnczsKK307CisKKy8qKgorICogbWFwcGluZyBmb3IgdGhlIGNjYSBwcml2YXRlIE1FIGtleSB0b2tlbi4KKyAqIFRocmVlIHBhcnRzIG9mIGludGVyZXN0IGhlcmU6IHRoZSBoZWFkZXIsIHRoZSBwcml2YXRlIHNlY3Rpb24gYW5kCisgKiB0aGUgcHVibGljIHNlY3Rpb24uCisgKgorICogbWFwcGluZyBmb3IgdGhlIGNjYSBrZXkgdG9rZW4gaGVhZGVyCisgKi8KK3N0cnVjdCBjY2FfdG9rZW5faGRyIHsKKwl1bnNpZ25lZCBjaGFyICB0b2tlbl9pZGVudGlmaWVyOworCXVuc2lnbmVkIGNoYXIgIHZlcnNpb247CisJdW5zaWduZWQgc2hvcnQgdG9rZW5fbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkWzRdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBDQ0FfVEtOX0hEUl9JRF9FWFQgMHgxRQorCisvKioKKyAqIG1hcHBpbmcgZm9yIHRoZSBjY2EgcHJpdmF0ZSBNRSBzZWN0aW9uCisgKi8KK3N0cnVjdCBjY2FfcHJpdmF0ZV9leHRfTUVfc2VjIHsKKwl1bnNpZ25lZCBjaGFyICBzZWN0aW9uX2lkZW50aWZpZXI7CisJdW5zaWduZWQgY2hhciAgdmVyc2lvbjsKKwl1bnNpZ25lZCBzaG9ydCBzZWN0aW9uX2xlbmd0aDsKKwl1bnNpZ25lZCBjaGFyICBwcml2YXRlX2tleV9oYXNoWzIwXTsKKwl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDFbNF07CisJdW5zaWduZWQgY2hhciAga2V5X2Zvcm1hdDsKKwl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDI7CisJdW5zaWduZWQgY2hhciAga2V5X25hbWVfaGFzaFsyMF07CisJdW5zaWduZWQgY2hhciAga2V5X3VzZV9mbGFnc1s0XTsKKwl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDNbNl07CisJdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWQ0WzI0XTsKKwl1bnNpZ25lZCBjaGFyICBjb25mb3VuZGVyWzI0XTsKKwl1bnNpZ25lZCBjaGFyICBleHBvbmVudFsxMjhdOworCXVuc2lnbmVkIGNoYXIgIG1vZHVsdXNbMTI4XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ0NBX1BWVF9VU0FHRV9BTEwgMHg4MAorCisvKioKKyAqIG1hcHBpbmcgZm9yIHRoZSBjY2EgcHVibGljIHNlY3Rpb24KKyAqIEluIGEgcHJpdmF0ZSBrZXksIHRoZSBtb2R1bHVzIGRvZXNuJ3QgYXBwZWFyIGluIHRoZSBwdWJsaWMKKyAqIHNlY3Rpb24uIFNvLCBhbiBhcmJpdHJhcnkgcHVibGljIGV4cG9uZW50IG9mIDB4MDEwMDAxIHdpbGwgYmUKKyAqIHVzZWQsIGZvciBhIHNlY3Rpb24gbGVuZ3RoIG9mIDB4MEYgYWx3YXlzLgorICovCitzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgeworCXVuc2lnbmVkIGNoYXIgIHNlY3Rpb25faWRlbnRpZmllcjsKKwl1bnNpZ25lZCBjaGFyICB2ZXJzaW9uOworCXVuc2lnbmVkIHNob3J0IHNlY3Rpb25fbGVuZ3RoOworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkWzJdOworCXVuc2lnbmVkIHNob3J0IGV4cG9uZW50X2xlbjsKKwl1bnNpZ25lZCBzaG9ydCBtb2R1bHVzX2JpdF9sZW47CisJdW5zaWduZWQgc2hvcnQgbW9kdWx1c19ieXRlX2xlbjsgICAgLyogSW4gYSBwcml2YXRlIGtleSwgdGhpcyBpcyAwICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKioKKyAqIG1hcHBpbmcgZm9yIHRoZSBjY2EgcHJpdmF0ZSBDUlQga2V5ICd0b2tlbicKKyAqIFRoZSBmaXJzdCB0aHJlZSBwYXJ0cyAodGhlIG9ubHkgcGFydHMgY29uc2lkZXJlZCBpbiB0aGlzIHJlbGVhc2UpCisgKiBhcmU6IHRoZSBoZWFkZXIsIHRoZSBwcml2YXRlIHNlY3Rpb24gYW5kIHRoZSBwdWJsaWMgc2VjdGlvbi4KKyAqIFRoZSBoZWFkZXIgYW5kIHB1YmxpYyBzZWN0aW9uIGFyZSB0aGUgc2FtZSBhcyBmb3IgdGhlCisgKiBzdHJ1Y3QgY2NhX3ByaXZhdGVfZXh0X01FCisgKgorICogRm9sbG93aW5nIHRoZSBzdHJ1Y3R1cmUgYXJlIHRoZSBxdWFudGl0aWVzIHAsIHEsIGRwLCBkcSwgdSwgcGFkLAorICogYW5kIG1vZHVsdXMsIGluIHRoYXQgb3JkZXIsIHdoZXJlIHBhZF9sZW4gaXMgdGhlIG1vZHVsbyA4CisgKiBjb21wbGVtZW50IG9mIHRoZSByZXNpZHVlIG1vZHVsbyA4IG9mIHRoZSBzdW0gb2YKKyAqIChwX2xlbiArIHFfbGVuICsgZHBfbGVuICsgZHFfbGVuICsgdV9sZW4pLgorICovCitzdHJ1Y3QgY2NhX3B2dF9leHRfQ1JUX3NlYyB7CisJdW5zaWduZWQgY2hhciAgc2VjdGlvbl9pZGVudGlmaWVyOworCXVuc2lnbmVkIGNoYXIgIHZlcnNpb247CisJdW5zaWduZWQgc2hvcnQgc2VjdGlvbl9sZW5ndGg7CisJdW5zaWduZWQgY2hhciAgcHJpdmF0ZV9rZXlfaGFzaFsyMF07CisJdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWQxWzRdOworCXVuc2lnbmVkIGNoYXIgIGtleV9mb3JtYXQ7CisJdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWQyOworCXVuc2lnbmVkIGNoYXIgIGtleV9uYW1lX2hhc2hbMjBdOworCXVuc2lnbmVkIGNoYXIgIGtleV91c2VfZmxhZ3NbNF07CisJdW5zaWduZWQgc2hvcnQgcF9sZW47CisJdW5zaWduZWQgc2hvcnQgcV9sZW47CisJdW5zaWduZWQgc2hvcnQgZHBfbGVuOworCXVuc2lnbmVkIHNob3J0IGRxX2xlbjsKKwl1bnNpZ25lZCBzaG9ydCB1X2xlbjsKKwl1bnNpZ25lZCBzaG9ydCBtb2RfbGVuOworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkM1s0XTsKKwl1bnNpZ25lZCBzaG9ydCBwYWRfbGVuOworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkNFs1Ml07CisJdW5zaWduZWQgY2hhciAgY29uZm91bmRlcls4XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQ0NBX1BWVF9FWFRfQ1JUX1NFQ19JRF9QVlQgMHgwOAorI2RlZmluZSBDQ0FfUFZUX0VYVF9DUlRfU0VDX0ZNVF9DTCAweDQwCisKKy8qKgorICogU2V0IHVwIHByaXZhdGUga2V5IGZpZWxkcyBvZiBhIHR5cGU2IE1FWCBtZXNzYWdlLgorICogTm90ZSB0aGF0IGFsbCBudW1lcmljcyBpbiB0aGUga2V5IHRva2VuIGFyZSBiaWctZW5kaWFuLAorICogd2hpbGUgdGhlIGVudHJpZXMgaW4gdGhlIGtleSBibG9jayBoZWFkZXIgYXJlIGxpdHRsZS1lbmRpYW4uCisgKgorICogQG1leDogcG9pbnRlciB0byB1c2VyIGlucHV0IGRhdGEKKyAqIEBwOiBwb2ludGVyIHRvIG1lbW9yeSBhcmVhIGZvciB0aGUga2V5CisgKgorICogUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUga2V5IGFyZWEgb3IgLUVGQVVMVAorICovCitzdGF0aWMgaW5saW5lIGludCB6Y3J5cHRfdHlwZTZfbWV4X2tleV9kZShzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICptZXgsCisJCQkJCSAgdm9pZCAqcCwgaW50IGJpZ19lbmRpYW4pCit7CisJc3RhdGljIHN0cnVjdCBjY2FfdG9rZW5faGRyIHN0YXRpY19wdnRfbWVfaGRyID0geworCQkudG9rZW5faWRlbnRpZmllcgk9ICAweDFFLAorCQkudG9rZW5fbGVuZ3RoCQk9ICAweDAxODMsCisJfTsKKwlzdGF0aWMgc3RydWN0IGNjYV9wcml2YXRlX2V4dF9NRV9zZWMgc3RhdGljX3B2dF9tZV9zZWMgPSB7CisJCS5zZWN0aW9uX2lkZW50aWZpZXIJPSAgMHgwMiwKKwkJLnNlY3Rpb25fbGVuZ3RoCQk9ICAweDAxNkMsCisJCS5rZXlfdXNlX2ZsYWdzCQk9IHsweDgwLDB4MDAsMHgwMCwweDAwfSwKKwl9OworCXN0YXRpYyBzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgc3RhdGljX3B1Yl9tZV9zZWMgPSB7CisJCS5zZWN0aW9uX2lkZW50aWZpZXIJPSAgMHgwNCwKKwkJLnNlY3Rpb25fbGVuZ3RoCQk9ICAweDAwMEYsCisJCS5leHBvbmVudF9sZW4JCT0gIDB4MDAwMywKKwl9OworCXN0YXRpYyBjaGFyIHBrX2V4cG9uZW50WzNdID0geyAweDAxLCAweDAwLCAweDAxIH07CisJc3RydWN0IHsKKwkJc3RydWN0IFQ2X2tleUJsb2NrX2hkciB0Nl9oZHI7CisJCXN0cnVjdCBjY2FfdG9rZW5faGRyIHB2dE1lSGRyOworCQlzdHJ1Y3QgY2NhX3ByaXZhdGVfZXh0X01FX3NlYyBwdnRNZVNlYzsKKwkJc3RydWN0IGNjYV9wdWJsaWNfc2VjIHB1Yk1lU2VjOworCQljaGFyIGV4cG9uZW50WzNdOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKmtleSA9IHA7CisJdW5zaWduZWQgY2hhciAqdGVtcDsKKworCW1lbXNldChrZXksIDAsIHNpemVvZigqa2V5KSk7CisKKwlpZiAoYmlnX2VuZGlhbikgeworCQlrZXktPnQ2X2hkci5ibGVuID0gY3B1X3RvX2JlMTYoMHgxODkpOworCQlrZXktPnQ2X2hkci51bGVuID0gY3B1X3RvX2JlMTYoMHgxODkgLSAyKTsKKwl9IGVsc2UgeworCQlrZXktPnQ2X2hkci5ibGVuID0gY3B1X3RvX2xlMTYoMHgxODkpOworCQlrZXktPnQ2X2hkci51bGVuID0gY3B1X3RvX2xlMTYoMHgxODkgLSAyKTsKKwl9CisJa2V5LT5wdnRNZUhkciA9IHN0YXRpY19wdnRfbWVfaGRyOworCWtleS0+cHZ0TWVTZWMgPSBzdGF0aWNfcHZ0X21lX3NlYzsKKwlrZXktPnB1Yk1lU2VjID0gc3RhdGljX3B1Yl9tZV9zZWM7CisJLyoqCisJICogSW4gYSBwcml2YXRlIGtleSwgdGhlIG1vZHVsdXMgZG9lc24ndCBhcHBlYXIgaW4gdGhlIHB1YmxpYworCSAqIHNlY3Rpb24uIFNvLCBhbiBhcmJpdHJhcnkgcHVibGljIGV4cG9uZW50IG9mIDB4MDEwMDAxIHdpbGwgYmUKKwkgKiB1c2VkLgorCSAqLworCW1lbWNweShrZXktPmV4cG9uZW50LCBwa19leHBvbmVudCwgMyk7CisKKwkvKiBrZXkgcGFyYW1ldGVyIGJsb2NrICovCisJdGVtcCA9IGtleS0+cHZ0TWVTZWMuZXhwb25lbnQgKworCQlzaXplb2Yoa2V5LT5wdnRNZVNlYy5leHBvbmVudCkgLSBtZXgtPmlucHV0ZGF0YWxlbmd0aDsKKwlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgbWV4LT5iX2tleSwgbWV4LT5pbnB1dGRhdGFsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIG1vZHVsdXMgKi8KKwl0ZW1wID0ga2V5LT5wdnRNZVNlYy5tb2R1bHVzICsKKwkJc2l6ZW9mKGtleS0+cHZ0TWVTZWMubW9kdWx1cykgLSBtZXgtPmlucHV0ZGF0YWxlbmd0aDsKKwlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgbWV4LT5uX21vZHVsdXMsIG1leC0+aW5wdXRkYXRhbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJa2V5LT5wdWJNZVNlYy5tb2R1bHVzX2JpdF9sZW4gPSA4ICogbWV4LT5pbnB1dGRhdGFsZW5ndGg7CisJcmV0dXJuIHNpemVvZigqa2V5KTsKK30KKworLyoqCisgKiBTZXQgdXAgcHJpdmF0ZSBrZXkgZmllbGRzIG9mIGEgdHlwZTYgTUVYIG1lc3NhZ2UuIFRoZSBfcGFkIHZhcmlhbnQKKyAqIHN0cmlwcyBsZWFkaW5nIHplcm9lcyBmcm9tIHRoZSBiX2tleS4KKyAqIE5vdGUgdGhhdCBhbGwgbnVtZXJpY3MgaW4gdGhlIGtleSB0b2tlbiBhcmUgYmlnLWVuZGlhbiwKKyAqIHdoaWxlIHRoZSBlbnRyaWVzIGluIHRoZSBrZXkgYmxvY2sgaGVhZGVyIGFyZSBsaXR0bGUtZW5kaWFuLgorICoKKyAqIEBtZXg6IHBvaW50ZXIgdG8gdXNlciBpbnB1dCBkYXRhCisgKiBAcDogcG9pbnRlciB0byBtZW1vcnkgYXJlYSBmb3IgdGhlIGtleQorICoKKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIGtleSBhcmVhIG9yIC1FRkFVTFQKKyAqLworc3RhdGljIGlubGluZSBpbnQgemNyeXB0X3R5cGU2X21leF9rZXlfZW4oc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqbWV4LAorCQkJCQkgIHZvaWQgKnAsIGludCBiaWdfZW5kaWFuKQoreworCXN0YXRpYyBzdHJ1Y3QgY2NhX3Rva2VuX2hkciBzdGF0aWNfcHViX2hkciA9IHsKKwkJLnRva2VuX2lkZW50aWZpZXIJPSAgMHgxRSwKKwl9OworCXN0YXRpYyBzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgc3RhdGljX3B1Yl9zZWMgPSB7CisJCS5zZWN0aW9uX2lkZW50aWZpZXIJPSAgMHgwNCwKKwl9OworCXN0cnVjdCB7CisJCXN0cnVjdCBUNl9rZXlCbG9ja19oZHIgdDZfaGRyOworCQlzdHJ1Y3QgY2NhX3Rva2VuX2hkciBwdWJIZHI7CisJCXN0cnVjdCBjY2FfcHVibGljX3NlYyBwdWJTZWM7CisJCWNoYXIgZXhwb25lbnRbMF07CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqa2V5ID0gcDsKKwl1bnNpZ25lZCBjaGFyICp0ZW1wOworCWludCBpOworCisJbWVtc2V0KGtleSwgMCwgc2l6ZW9mKCprZXkpKTsKKworCWtleS0+cHViSGRyID0gc3RhdGljX3B1Yl9oZHI7CisJa2V5LT5wdWJTZWMgPSBzdGF0aWNfcHViX3NlYzsKKworCS8qIGtleSBwYXJhbWV0ZXIgYmxvY2sgKi8KKwl0ZW1wID0ga2V5LT5leHBvbmVudDsKKwlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgbWV4LT5iX2tleSwgbWV4LT5pbnB1dGRhdGFsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwkvKiBTdHJpcCBsZWFkaW5nIHplcm9lcyBmcm9tIGJfa2V5LiAqLworCWZvciAoaSA9IDA7IGkgPCBtZXgtPmlucHV0ZGF0YWxlbmd0aDsgaSsrKQorCQlpZiAodGVtcFtpXSkKKwkJCWJyZWFrOworCWlmIChpID49IG1leC0+aW5wdXRkYXRhbGVuZ3RoKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1tb3ZlKHRlbXAsIHRlbXAgKyBpLCBtZXgtPmlucHV0ZGF0YWxlbmd0aCAtIGkpOworCXRlbXAgKz0gbWV4LT5pbnB1dGRhdGFsZW5ndGggLSBpOworCS8qIG1vZHVsdXMgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIodGVtcCwgbWV4LT5uX21vZHVsdXMsIG1leC0+aW5wdXRkYXRhbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlrZXktPnB1YlNlYy5tb2R1bHVzX2JpdF9sZW4gPSA4ICogbWV4LT5pbnB1dGRhdGFsZW5ndGg7CisJa2V5LT5wdWJTZWMubW9kdWx1c19ieXRlX2xlbiA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoOworCWtleS0+cHViU2VjLmV4cG9uZW50X2xlbiA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoIC0gaTsKKwlrZXktPnB1YlNlYy5zZWN0aW9uX2xlbmd0aCA9IHNpemVvZihrZXktPnB1YlNlYykgKworCQkJCQkyKm1leC0+aW5wdXRkYXRhbGVuZ3RoIC0gaTsKKwlrZXktPnB1Ykhkci50b2tlbl9sZW5ndGggPQorCQlrZXktPnB1YlNlYy5zZWN0aW9uX2xlbmd0aCArIHNpemVvZihrZXktPnB1Ykhkcik7CisJaWYgKGJpZ19lbmRpYW4pIHsKKwkJa2V5LT50Nl9oZHIudWxlbiA9IGNwdV90b19iZTE2KGtleS0+cHViSGRyLnRva2VuX2xlbmd0aCArIDQpOworCQlrZXktPnQ2X2hkci5ibGVuID0gY3B1X3RvX2JlMTYoa2V5LT5wdWJIZHIudG9rZW5fbGVuZ3RoICsgNik7CisJfSBlbHNlIHsKKwkJa2V5LT50Nl9oZHIudWxlbiA9IGNwdV90b19sZTE2KGtleS0+cHViSGRyLnRva2VuX2xlbmd0aCArIDQpOworCQlrZXktPnQ2X2hkci5ibGVuID0gY3B1X3RvX2xlMTYoa2V5LT5wdWJIZHIudG9rZW5fbGVuZ3RoICsgNik7CisJfQorCXJldHVybiBzaXplb2YoKmtleSkgKyAyKm1leC0+aW5wdXRkYXRhbGVuZ3RoIC0gaTsKK30KKworLyoqCisgKiBTZXQgdXAgcHJpdmF0ZSBrZXkgZmllbGRzIG9mIGEgdHlwZTYgQ1JUIG1lc3NhZ2UuCisgKiBOb3RlIHRoYXQgYWxsIG51bWVyaWNzIGluIHRoZSBrZXkgdG9rZW4gYXJlIGJpZy1lbmRpYW4sCisgKiB3aGlsZSB0aGUgZW50cmllcyBpbiB0aGUga2V5IGJsb2NrIGhlYWRlciBhcmUgbGl0dGxlLWVuZGlhbi4KKyAqCisgKiBAbWV4OiBwb2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YQorICogQHA6IHBvaW50ZXIgdG8gbWVtb3J5IGFyZWEgZm9yIHRoZSBrZXkKKyAqCisgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBrZXkgYXJlYSBvciAtRUZBVUxUCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHpjcnlwdF90eXBlNl9jcnRfa2V5KHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQsCisJCQkJICAgICAgIHZvaWQgKnAsIGludCBiaWdfZW5kaWFuKQoreworCXN0YXRpYyBzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgc3RhdGljX2NjYV9wdWJfc2VjID0geworCQkuc2VjdGlvbl9pZGVudGlmaWVyID0gNCwKKwkJLnNlY3Rpb25fbGVuZ3RoID0gMHgwMDBmLAorCQkuZXhwb25lbnRfbGVuID0gMHgwMDAzLAorCX07CisJc3RhdGljIGNoYXIgcGtfZXhwb25lbnRbM10gPSB7IDB4MDEsIDB4MDAsIDB4MDEgfTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgVDZfa2V5QmxvY2tfaGRyIHQ2X2hkcjsKKwkJc3RydWN0IGNjYV90b2tlbl9oZHIgdG9rZW47CisJCXN0cnVjdCBjY2FfcHZ0X2V4dF9DUlRfc2VjIHB2dDsKKwkJY2hhciBrZXlfcGFydHNbMF07CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqa2V5ID0gcDsKKwlzdHJ1Y3QgY2NhX3B1YmxpY19zZWMgKnB1YjsKKwlpbnQgc2hvcnRfbGVuLCBsb25nX2xlbiwgcGFkX2xlbiwga2V5X2xlbiwgc2l6ZTsKKworCW1lbXNldChrZXksIDAsIHNpemVvZigqa2V5KSk7CisKKwlzaG9ydF9sZW4gPSBjcnQtPmlucHV0ZGF0YWxlbmd0aCAvIDI7CisJbG9uZ19sZW4gPSBzaG9ydF9sZW4gKyA4OworCXBhZF9sZW4gPSAtKDMqbG9uZ19sZW4gKyAyKnNob3J0X2xlbikgJiA3OworCWtleV9sZW4gPSAzKmxvbmdfbGVuICsgMipzaG9ydF9sZW4gKyBwYWRfbGVuICsgY3J0LT5pbnB1dGRhdGFsZW5ndGg7CisJc2l6ZSA9IHNpemVvZigqa2V5KSArIGtleV9sZW4gKyBzaXplb2YoKnB1YikgKyAzOworCisJLyogcGFyYW1ldGVyIGJsb2NrLmtleSBibG9jayAqLworCWlmIChiaWdfZW5kaWFuKSB7CisJCWtleS0+dDZfaGRyLmJsZW4gPSBjcHVfdG9fYmUxNihzaXplKTsKKwkJa2V5LT50Nl9oZHIudWxlbiA9IGNwdV90b19iZTE2KHNpemUgLSAyKTsKKwl9IGVsc2UgeworCQlrZXktPnQ2X2hkci5ibGVuID0gY3B1X3RvX2xlMTYoc2l6ZSk7CisJCWtleS0+dDZfaGRyLnVsZW4gPSBjcHVfdG9fbGUxNihzaXplIC0gMik7CisJfQorCisJLyoga2V5IHRva2VuIGhlYWRlciAqLworCWtleS0+dG9rZW4udG9rZW5faWRlbnRpZmllciA9IENDQV9US05fSERSX0lEX0VYVDsKKwlrZXktPnRva2VuLnRva2VuX2xlbmd0aCA9IHNpemUgLSA2OworCisJLyogcHJpdmF0ZSBzZWN0aW9uICovCisJa2V5LT5wdnQuc2VjdGlvbl9pZGVudGlmaWVyID0gQ0NBX1BWVF9FWFRfQ1JUX1NFQ19JRF9QVlQ7CisJa2V5LT5wdnQuc2VjdGlvbl9sZW5ndGggPSBzaXplb2Yoa2V5LT5wdnQpICsga2V5X2xlbjsKKwlrZXktPnB2dC5rZXlfZm9ybWF0ID0gQ0NBX1BWVF9FWFRfQ1JUX1NFQ19GTVRfQ0w7CisJa2V5LT5wdnQua2V5X3VzZV9mbGFnc1swXSA9IENDQV9QVlRfVVNBR0VfQUxMOworCWtleS0+cHZ0LnBfbGVuID0ga2V5LT5wdnQuZHBfbGVuID0ga2V5LT5wdnQudV9sZW4gPSBsb25nX2xlbjsKKwlrZXktPnB2dC5xX2xlbiA9IGtleS0+cHZ0LmRxX2xlbiA9IHNob3J0X2xlbjsKKwlrZXktPnB2dC5tb2RfbGVuID0gY3J0LT5pbnB1dGRhdGFsZW5ndGg7CisJa2V5LT5wdnQucGFkX2xlbiA9IHBhZF9sZW47CisKKwkvKiBrZXkgcGFydHMgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoa2V5LT5rZXlfcGFydHMsIGNydC0+bnBfcHJpbWUsIGxvbmdfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcihrZXktPmtleV9wYXJ0cyArIGxvbmdfbGVuLAorCQkJCQljcnQtPm5xX3ByaW1lLCBzaG9ydF9sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKGtleS0+a2V5X3BhcnRzICsgbG9uZ19sZW4gKyBzaG9ydF9sZW4sCisJCQkJCWNydC0+YnBfa2V5LCBsb25nX2xlbikgfHwKKwkgICAgY29weV9mcm9tX3VzZXIoa2V5LT5rZXlfcGFydHMgKyAyKmxvbmdfbGVuICsgc2hvcnRfbGVuLAorCQkJCQljcnQtPmJxX2tleSwgc2hvcnRfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcihrZXktPmtleV9wYXJ0cyArIDIqbG9uZ19sZW4gKyAyKnNob3J0X2xlbiwKKwkJCQkJY3J0LT51X211bHRfaW52LCBsb25nX2xlbikpCisJCXJldHVybiAtRUZBVUxUOworCW1lbXNldChrZXktPmtleV9wYXJ0cyArIDMqbG9uZ19sZW4gKyAyKnNob3J0X2xlbiArIHBhZF9sZW4sCisJICAgICAgIDB4ZmYsIGNydC0+aW5wdXRkYXRhbGVuZ3RoKTsKKwlwdWIgPSAoc3RydWN0IGNjYV9wdWJsaWNfc2VjICopKGtleS0+a2V5X3BhcnRzICsga2V5X2xlbik7CisJKnB1YiA9IHN0YXRpY19jY2FfcHViX3NlYzsKKwlwdWItPm1vZHVsdXNfYml0X2xlbiA9IDggKiBjcnQtPmlucHV0ZGF0YWxlbmd0aDsKKwkvKioKKwkgKiBJbiBhIHByaXZhdGUga2V5LCB0aGUgbW9kdWx1cyBkb2Vzbid0IGFwcGVhciBpbiB0aGUgcHVibGljCisJICogc2VjdGlvbi4gU28sIGFuIGFyYml0cmFyeSBwdWJsaWMgZXhwb25lbnQgb2YgMHgwMTAwMDEgd2lsbCBiZQorCSAqIHVzZWQuCisJICovCisJbWVtY3B5KChjaGFyICopIChwdWIgKyAxKSwgcGtfZXhwb25lbnQsIDMpOworCXJldHVybiBzaXplOworfQorCisjZW5kaWYgLyogX1pDUllQVF9DQ0FfS0VZX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5jIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2V4MmEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjJiMDAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfY2V4MmEuYwpAQCAtMCwwICsxLDQzNSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5jCisgKgorICogIHpjcnlwdCAyLjEuMAorICoKKyAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocworICoJICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKKyAqCisgKiAgSG90cGx1ZyAmIG1pc2MgZGV2aWNlIHN1cHBvcnQ6IEpvY2hlbiBSb2VocmlnIChyb2VocmlnQGRlLmlibS5jb20pCisgKiAgTWFqb3IgY2xlYW51cCAmIGRyaXZlciBzcGxpdDogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICoJCQkJICBSYWxwaCBXdWVydGhuZXIgPHJ3dWVydGhuQGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCisjaW5jbHVkZSAiYXBfYnVzLmgiCisjaW5jbHVkZSAiemNyeXB0X2FwaS5oIgorI2luY2x1ZGUgInpjcnlwdF9lcnJvci5oIgorI2luY2x1ZGUgInpjcnlwdF9jZXgyYS5oIgorCisjZGVmaW5lIENFWDJBX01JTl9NT0RfU0laRQkgIDEJLyogICAgOCBiaXRzCSovCisjZGVmaW5lIENFWDJBX01BWF9NT0RfU0laRQkyNTYJLyogMjA0OCBiaXRzCSovCisKKyNkZWZpbmUgQ0VYMkFfU1BFRURfUkFUSU5HCTk3MAorCisjZGVmaW5lIENFWDJBX01BWF9NRVNTQUdFX1NJWkUJMHgzOTAJLyogc2l6ZW9mKHN0cnVjdCB0eXBlNTBfY3JiMl9tc2cpICAgICovCisjZGVmaW5lIENFWDJBX01BWF9SRVNQT05TRV9TSVpFIDB4MTEwCS8qIG1heCBvdXRwdXRkYXRhbGVuZ3RoICsgdHlwZTgwX2hkciAqLworCisjZGVmaW5lIENFWDJBX0NMRUFOVVBfVElNRQkoMTUqSFopCisKK3N0YXRpYyBzdHJ1Y3QgYXBfZGV2aWNlX2lkIHpjcnlwdF9jZXgyYV9pZHNbXSA9IHsKKwl7IEFQX0RFVklDRShBUF9ERVZJQ0VfVFlQRV9DRVgyQSkgfSwKKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworCisjaWZuZGVmIENPTkZJR19aQ1JZUFRfTU9OT0xJVEhJQworTU9EVUxFX0RFVklDRV9UQUJMRShhcCwgemNyeXB0X2NleDJhX2lkcyk7CitNT0RVTEVfQVVUSE9SKCJJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ0VYMkEgQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2UgZHJpdmVyLCAiCisJCSAgICJDb3B5cmlnaHQgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHpjcnlwdF9jZXgyYV9wcm9iZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOworc3RhdGljIHZvaWQgemNyeXB0X2NleDJhX3JlbW92ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOworc3RhdGljIHZvaWQgemNyeXB0X2NleDJhX3JlY2VpdmUoc3RydWN0IGFwX2RldmljZSAqLCBzdHJ1Y3QgYXBfbWVzc2FnZSAqLAorCQkJCSBzdHJ1Y3QgYXBfbWVzc2FnZSAqKTsKKworc3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgemNyeXB0X2NleDJhX2RyaXZlciA9IHsKKwkucHJvYmUgPSB6Y3J5cHRfY2V4MmFfcHJvYmUsCisJLnJlbW92ZSA9IHpjcnlwdF9jZXgyYV9yZW1vdmUsCisJLnJlY2VpdmUgPSB6Y3J5cHRfY2V4MmFfcmVjZWl2ZSwKKwkuaWRzID0gemNyeXB0X2NleDJhX2lkcywKK307CisKKy8qKgorICogQ29udmVydCBhIElDQU1FWCBtZXNzYWdlIHRvIGEgdHlwZTUwIE1FWCBtZXNzYWdlLgorICoKKyAqIEB6ZGV2OiBjcnlwdG8gZGV2aWNlIHBvaW50ZXIKKyAqIEB6cmVxOiBjcnlwdG8gcmVxdWVzdCBwb2ludGVyCisgKiBAbWV4OiBwb2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FRkFVTFQuCisgKi8KK3N0YXRpYyBpbnQgSUNBTUVYX21zZ190b190eXBlNTBNRVhfbXNnKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgYXBfbWVzc2FnZSAqYXBfbXNnLAorCQkJCSAgICAgICBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICptZXgpCit7CisJdW5zaWduZWQgY2hhciAqbW9kLCAqZXhwLCAqaW5wOworCWludCBtb2RfbGVuOworCisJbW9kX2xlbiA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoOworCisJaWYgKG1vZF9sZW4gPD0gMTI4KSB7CisJCXN0cnVjdCB0eXBlNTBfbWViMV9tc2cgKm1lYjEgPSBhcF9tc2ctPm1lc3NhZ2U7CisJCW1lbXNldChtZWIxLCAwLCBzaXplb2YoKm1lYjEpKTsKKwkJYXBfbXNnLT5sZW5ndGggPSBzaXplb2YoKm1lYjEpOworCQltZWIxLT5oZWFkZXIubXNnX3R5cGVfY29kZSA9IFRZUEU1MF9UWVBFX0NPREU7CisJCW1lYjEtPmhlYWRlci5tc2dfbGVuID0gc2l6ZW9mKCptZWIxKTsKKwkJbWViMS0+a2V5YmxvY2tfdHlwZSA9IFRZUEU1MF9NRUIxX0ZNVDsKKwkJbW9kID0gbWViMS0+bW9kdWx1cyArIHNpemVvZihtZWIxLT5tb2R1bHVzKSAtIG1vZF9sZW47CisJCWV4cCA9IG1lYjEtPmV4cG9uZW50ICsgc2l6ZW9mKG1lYjEtPmV4cG9uZW50KSAtIG1vZF9sZW47CisJCWlucCA9IG1lYjEtPm1lc3NhZ2UgKyBzaXplb2YobWViMS0+bWVzc2FnZSkgLSBtb2RfbGVuOworCX0gZWxzZSB7CisJCXN0cnVjdCB0eXBlNTBfbWViMl9tc2cgKm1lYjIgPSBhcF9tc2ctPm1lc3NhZ2U7CisJCW1lbXNldChtZWIyLCAwLCBzaXplb2YoKm1lYjIpKTsKKwkJYXBfbXNnLT5sZW5ndGggPSBzaXplb2YoKm1lYjIpOworCQltZWIyLT5oZWFkZXIubXNnX3R5cGVfY29kZSA9IFRZUEU1MF9UWVBFX0NPREU7CisJCW1lYjItPmhlYWRlci5tc2dfbGVuID0gc2l6ZW9mKCptZWIyKTsKKwkJbWViMi0+a2V5YmxvY2tfdHlwZSA9IFRZUEU1MF9NRUIyX0ZNVDsKKwkJbW9kID0gbWViMi0+bW9kdWx1cyArIHNpemVvZihtZWIyLT5tb2R1bHVzKSAtIG1vZF9sZW47CisJCWV4cCA9IG1lYjItPmV4cG9uZW50ICsgc2l6ZW9mKG1lYjItPmV4cG9uZW50KSAtIG1vZF9sZW47CisJCWlucCA9IG1lYjItPm1lc3NhZ2UgKyBzaXplb2YobWViMi0+bWVzc2FnZSkgLSBtb2RfbGVuOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihtb2QsIG1leC0+bl9tb2R1bHVzLCBtb2RfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcihleHAsIG1leC0+Yl9rZXksIG1vZF9sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKGlucCwgbWV4LT5pbnB1dGRhdGEsIG1vZF9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDb252ZXJ0IGEgSUNBQ1JUIG1lc3NhZ2UgdG8gYSB0eXBlNTAgQ1JUIG1lc3NhZ2UuCisgKgorICogQHpkZXY6IGNyeXB0byBkZXZpY2UgcG9pbnRlcgorICogQHpyZXE6IGNyeXB0byByZXF1ZXN0IHBvaW50ZXIKKyAqIEBjcnQ6IHBvaW50ZXIgdG8gdXNlciBpbnB1dCBkYXRhCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVC4KKyAqLworc3RhdGljIGludCBJQ0FDUlRfbXNnX3RvX3R5cGU1MENSVF9tc2coc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2csCisJCQkJICAgICAgIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQpCit7CisJaW50IG1vZF9sZW4sIHNob3J0X2xlbiwgbG9uZ19sZW4sIGxvbmdfb2Zmc2V0OworCXVuc2lnbmVkIGNoYXIgKnAsICpxLCAqZHAsICpkcSwgKnUsICppbnA7CisKKwltb2RfbGVuID0gY3J0LT5pbnB1dGRhdGFsZW5ndGg7CisJc2hvcnRfbGVuID0gbW9kX2xlbiAvIDI7CisJbG9uZ19sZW4gPSBtb2RfbGVuIC8gMiArIDg7CisKKwkvKgorCSAqIENFWDJBIGNhbm5vdCBoYW5kbGUgcCwgZHAsIG9yIFUgPiAxMjggYnl0ZXMuCisJICogSWYgd2UgaGF2ZSBvbmUgb2YgdGhlc2UsIHdlIG5lZWQgdG8gZG8gZXh0cmEgY2hlY2tpbmcuCisJICovCisJaWYgKGxvbmdfbGVuID4gMTI4KSB7CisJCS8qCisJCSAqIHpjcnlwdF9yc2FfY3J0IGFscmVhZHkgY2hlY2tlZCBmb3IgdGhlIGxlYWRpbmcKKwkJICogemVyb2VzIG9mIG5wX3ByaW1lLCBicF9rZXkgYW5kIHVfbXVsdF9pbmMuCisJCSAqLworCQlsb25nX29mZnNldCA9IGxvbmdfbGVuIC0gMTI4OworCQlsb25nX2xlbiA9IDEyODsKKwl9IGVsc2UKKwkJbG9uZ19vZmZzZXQgPSAwOworCisJLyoKKwkgKiBJbnN0ZWFkIG9mIGRvaW5nIGV4dHJhIHdvcmsgZm9yIHAsIGRwLCBVID4gNjQgYnl0ZXMsIHdlJ2xsIGp1c3QgdXNlCisJICogdGhlIGxhcmdlciBtZXNzYWdlIHN0cnVjdHVyZS4KKwkgKi8KKwlpZiAobG9uZ19sZW4gPD0gNjQpIHsKKwkJc3RydWN0IHR5cGU1MF9jcmIxX21zZyAqY3JiMSA9IGFwX21zZy0+bWVzc2FnZTsKKwkJbWVtc2V0KGNyYjEsIDAsIHNpemVvZigqY3JiMSkpOworCQlhcF9tc2ctPmxlbmd0aCA9IHNpemVvZigqY3JiMSk7CisJCWNyYjEtPmhlYWRlci5tc2dfdHlwZV9jb2RlID0gVFlQRTUwX1RZUEVfQ09ERTsKKwkJY3JiMS0+aGVhZGVyLm1zZ19sZW4gPSBzaXplb2YoKmNyYjEpOworCQljcmIxLT5rZXlibG9ja190eXBlID0gVFlQRTUwX0NSQjFfRk1UOworCQlwID0gY3JiMS0+cCArIHNpemVvZihjcmIxLT5wKSAtIGxvbmdfbGVuOworCQlxID0gY3JiMS0+cSArIHNpemVvZihjcmIxLT5xKSAtIHNob3J0X2xlbjsKKwkJZHAgPSBjcmIxLT5kcCArIHNpemVvZihjcmIxLT5kcCkgLSBsb25nX2xlbjsKKwkJZHEgPSBjcmIxLT5kcSArIHNpemVvZihjcmIxLT5kcSkgLSBzaG9ydF9sZW47CisJCXUgPSBjcmIxLT51ICsgc2l6ZW9mKGNyYjEtPnUpIC0gbG9uZ19sZW47CisJCWlucCA9IGNyYjEtPm1lc3NhZ2UgKyBzaXplb2YoY3JiMS0+bWVzc2FnZSkgLSBtb2RfbGVuOworCX0gZWxzZSB7CisJCXN0cnVjdCB0eXBlNTBfY3JiMl9tc2cgKmNyYjIgPSBhcF9tc2ctPm1lc3NhZ2U7CisJCW1lbXNldChjcmIyLCAwLCBzaXplb2YoKmNyYjIpKTsKKwkJYXBfbXNnLT5sZW5ndGggPSBzaXplb2YoKmNyYjIpOworCQljcmIyLT5oZWFkZXIubXNnX3R5cGVfY29kZSA9IFRZUEU1MF9UWVBFX0NPREU7CisJCWNyYjItPmhlYWRlci5tc2dfbGVuID0gc2l6ZW9mKCpjcmIyKTsKKwkJY3JiMi0+a2V5YmxvY2tfdHlwZSA9IFRZUEU1MF9DUkIyX0ZNVDsKKwkJcCA9IGNyYjItPnAgKyBzaXplb2YoY3JiMi0+cCkgLSBsb25nX2xlbjsKKwkJcSA9IGNyYjItPnEgKyBzaXplb2YoY3JiMi0+cSkgLSBzaG9ydF9sZW47CisJCWRwID0gY3JiMi0+ZHAgKyBzaXplb2YoY3JiMi0+ZHApIC0gbG9uZ19sZW47CisJCWRxID0gY3JiMi0+ZHEgKyBzaXplb2YoY3JiMi0+ZHEpIC0gc2hvcnRfbGVuOworCQl1ID0gY3JiMi0+dSArIHNpemVvZihjcmIyLT51KSAtIGxvbmdfbGVuOworCQlpbnAgPSBjcmIyLT5tZXNzYWdlICsgc2l6ZW9mKGNyYjItPm1lc3NhZ2UpIC0gbW9kX2xlbjsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIocCwgY3J0LT5ucF9wcmltZSArIGxvbmdfb2Zmc2V0LCBsb25nX2xlbikgfHwKKwkgICAgY29weV9mcm9tX3VzZXIocSwgY3J0LT5ucV9wcmltZSwgc2hvcnRfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcihkcCwgY3J0LT5icF9rZXkgKyBsb25nX29mZnNldCwgbG9uZ19sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKGRxLCBjcnQtPmJxX2tleSwgc2hvcnRfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcih1LCBjcnQtPnVfbXVsdF9pbnYgKyBsb25nX29mZnNldCwgbG9uZ19sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKGlucCwgY3J0LT5pbnB1dGRhdGEsIG1vZF9sZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ29weSByZXN1bHRzIGZyb20gYSB0eXBlIDgwIHJlcGx5IG1lc3NhZ2UgYmFjayB0byB1c2VyIHNwYWNlLgorICoKKyAqIEB6ZGV2OiBjcnlwdG8gZGV2aWNlIHBvaW50ZXIKKyAqIEByZXBseTogcmVwbHkgQVAgbWVzc2FnZS4KKyAqIEBkYXRhOiBwb2ludGVyIHRvIHVzZXIgb3V0cHV0IGRhdGEKKyAqIEBsZW5ndGg6IHNpemUgb2YgdXNlciBvdXRwdXQgZGF0YQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FRkFVTFQuCisgKi8KK3N0YXRpYyBpbnQgY29udmVydF90eXBlODAoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkgIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSwKKwkJCSAgY2hhciBfX3VzZXIgKm91dHB1dGRhdGEsCisJCQkgIHVuc2lnbmVkIGludCBvdXRwdXRkYXRhbGVuZ3RoKQoreworCXN0cnVjdCB0eXBlODBfaGRyICp0ODBoID0gcmVwbHktPm1lc3NhZ2U7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKworCWlmICh0ODBoLT5sZW4gPCBzaXplb2YoKnQ4MGgpICsgb3V0cHV0ZGF0YWxlbmd0aCkgeworCQkvKiBUaGUgcmVzdWx0IGlzIHRvbyBzaG9ydCwgdGhlIENFWDJBIGNhcmQgbWF5IG5vdCBkbyB0aGF0Li4gKi8KKwkJemRldi0+b25saW5lID0gMDsKKwkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCisJfQorCUJVR19PTih0ODBoLT5sZW4gPiBDRVgyQV9NQVhfUkVTUE9OU0VfU0laRSk7CisJZGF0YSA9IHJlcGx5LT5tZXNzYWdlICsgdDgwaC0+bGVuIC0gb3V0cHV0ZGF0YWxlbmd0aDsKKwlpZiAoY29weV90b191c2VyKG91dHB1dGRhdGEsIGRhdGEsIG91dHB1dGRhdGFsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb252ZXJ0X3Jlc3BvbnNlKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJICAgIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSwKKwkJCSAgICBjaGFyIF9fdXNlciAqb3V0cHV0ZGF0YSwKKwkJCSAgICB1bnNpZ25lZCBpbnQgb3V0cHV0ZGF0YWxlbmd0aCkKK3sKKwkvKiBSZXNwb25zZSB0eXBlIGJ5dGUgaXMgdGhlIHNlY29uZCBieXRlIGluIHRoZSByZXNwb25zZS4gKi8KKwlzd2l0Y2ggKCgodW5zaWduZWQgY2hhciAqKSByZXBseS0+bWVzc2FnZSlbMV0pIHsKKwljYXNlIFRZUEU4Ml9SU1BfQ09ERToKKwljYXNlIFRZUEU4OF9SU1BfQ09ERToKKwkJcmV0dXJuIGNvbnZlcnRfZXJyb3IoemRldiwgcmVwbHkpOworCWNhc2UgVFlQRTgwX1JTUF9DT0RFOgorCQlyZXR1cm4gY29udmVydF90eXBlODAoemRldiwgcmVwbHksCisJCQkJICAgICAgb3V0cHV0ZGF0YSwgb3V0cHV0ZGF0YWxlbmd0aCk7CisJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLworCQlQUklOVEsoIlVucmVjb2duaXplZCBNZXNzYWdlIEhlYWRlcjogJTA4eCUwOHhcbiIsCisJCSAgICAgICAqKHVuc2lnbmVkIGludCAqKSByZXBseS0+bWVzc2FnZSwKKwkJICAgICAgICoodW5zaWduZWQgaW50ICopIChyZXBseS0+bWVzc2FnZSs0KSk7CisJCXpkZXYtPm9ubGluZSA9IDA7CisJCXJldHVybiAtRUFHQUlOOwkvKiByZXBlYXQgdGhlIHJlcXVlc3Qgb24gYSBkaWZmZXJlbnQgZGV2aWNlLiAqLworCX0KK30KKworLyoqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBBUCBidXMgY29kZSBhZnRlciBhIGNyeXB0byByZXF1ZXN0CisgKiAibXNnIiBoYXMgZmluaXNoZWQgd2l0aCB0aGUgcmVwbHkgbWVzc2FnZSAicmVwbHkiLgorICogSXQgaXMgY2FsbGVkIGZyb20gdGFza2xldCBjb250ZXh0LgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlCisgKiBAbXNnOiBwb2ludGVyIHRvIHRoZSBBUCBtZXNzYWdlCisgKiBAcmVwbHk6IHBvaW50ZXIgdG8gdGhlIEFQIHJlcGx5IG1lc3NhZ2UKKyAqLworc3RhdGljIHZvaWQgemNyeXB0X2NleDJhX3JlY2VpdmUoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2LAorCQkJCSBzdHJ1Y3QgYXBfbWVzc2FnZSAqbXNnLAorCQkJCSBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHkpCit7CisJc3RhdGljIHN0cnVjdCBlcnJvcl9oZHIgZXJyb3JfcmVwbHkgPSB7CisJCS50eXBlID0gVFlQRTgyX1JTUF9DT0RFLAorCQkucmVwbHlfY29kZSA9IFJFUDgyX0VSUk9SX01BQ0hJTkVfRkFJTFVSRSwKKwl9OworCXN0cnVjdCB0eXBlODBfaGRyICp0ODBoID0gcmVwbHktPm1lc3NhZ2U7CisJaW50IGxlbmd0aDsKKworCS8qIENvcHkgdGhlIHJlcGx5IG1lc3NhZ2UgdG8gdGhlIHJlcXVlc3QgbWVzc2FnZSBidWZmZXIuICovCisJaWYgKElTX0VSUihyZXBseSkpCisJCW1lbWNweShtc2ctPm1lc3NhZ2UsICZlcnJvcl9yZXBseSwgc2l6ZW9mKGVycm9yX3JlcGx5KSk7CisJZWxzZSBpZiAodDgwaC0+dHlwZSA9PSBUWVBFODBfUlNQX0NPREUpIHsKKwkJbGVuZ3RoID0gbWluKENFWDJBX01BWF9SRVNQT05TRV9TSVpFLCAoaW50KSB0ODBoLT5sZW4pOworCQltZW1jcHkobXNnLT5tZXNzYWdlLCByZXBseS0+bWVzc2FnZSwgbGVuZ3RoKTsKKwl9IGVsc2UKKwkJbWVtY3B5KG1zZy0+bWVzc2FnZSwgcmVwbHktPm1lc3NhZ2UsIHNpemVvZiBlcnJvcl9yZXBseSk7CisJY29tcGxldGUoKHN0cnVjdCBjb21wbGV0aW9uICopIG1zZy0+cHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBhdG9taWNfdCB6Y3J5cHRfc3RlcCA9IEFUT01JQ19JTklUKDApOworCisvKioKKyAqIFRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yIGNhbGxzIHRoaXMgZnVuY3Rpb24gaWYgaXQgcGlja2VkIHRoZSBDRVgyQQorICogZGV2aWNlIHRvIGhhbmRsZSBhIG1vZGV4cG8gcmVxdWVzdC4KKyAqIEB6ZGV2OiBwb2ludGVyIHRvIHpjcnlwdF9kZXZpY2Ugc3RydWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUKKyAqCSAgQ0VYMkEgZGV2aWNlIHRvIHRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yCisgKiBAbWV4OiBwb2ludGVyIHRvIHRoZSBtb2RleHBvIHJlcXVlc3QgYnVmZmVyCisgKi8KK3N0YXRpYyBsb25nIHpjcnlwdF9jZXgyYV9tb2RleHBvKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICptZXgpCit7CisJc3RydWN0IGFwX21lc3NhZ2UgYXBfbXNnOworCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CisJaW50IHJjOworCisJYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBrbWFsbG9jKENFWDJBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYXBfbXNnLm1lc3NhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKworCQkJCWF0b21pY19pbmNfcmV0dXJuKCZ6Y3J5cHRfc3RlcCk7CisJYXBfbXNnLnByaXZhdGUgPSAmd29yazsKKwlyYyA9IElDQU1FWF9tc2dfdG9fdHlwZTUwTUVYX21zZyh6ZGV2LCAmYXBfbXNnLCBtZXgpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKKwlpbml0X2NvbXBsZXRpb24oJndvcmspOworCWFwX3F1ZXVlX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCSZ3b3JrLCBDRVgyQV9DTEVBTlVQX1RJTUUpOworCWlmIChyYyA+IDApCisJCXJjID0gY29udmVydF9yZXNwb25zZSh6ZGV2LCAmYXBfbXNnLCBtZXgtPm91dHB1dGRhdGEsCisJCQkJICAgICAgbWV4LT5vdXRwdXRkYXRhbGVuZ3RoKTsKKwllbHNlIHsKKwkJLyogU2lnbmFsIHBlbmRpbmcgb3IgbWVzc2FnZSB0aW1lZCBvdXQuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJCWlmIChyYyA9PSAwKQorCQkJLyogTWVzc2FnZSB0aW1lZCBvdXQuICovCisJCQlyYyA9IC1FVElNRTsKKwl9CitvdXRfZnJlZToKKwlrZnJlZShhcF9tc2cubWVzc2FnZSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yIGNhbGxzIHRoaXMgZnVuY3Rpb24gaWYgaXQgcGlja2VkIHRoZSBDRVgyQQorICogZGV2aWNlIHRvIGhhbmRsZSBhIG1vZGV4cG9fY3J0IHJlcXVlc3QuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIENFWDJBIGRldmljZSB0byB0aGUgcmVxdWVzdCBkaXN0cmlidXRvcgorICogQGNydDogcG9pbnRlciB0byB0aGUgbW9kZXhwb2NfY3J0IHJlcXVlc3QgYnVmZmVyCisgKi8KK3N0YXRpYyBsb25nIHpjcnlwdF9jZXgyYV9tb2RleHBvX2NydChzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgICAgIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQpCit7CisJc3RydWN0IGFwX21lc3NhZ2UgYXBfbXNnOworCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CisJaW50IHJjOworCisJYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBrbWFsbG9jKENFWDJBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYXBfbXNnLm1lc3NhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKworCQkJCWF0b21pY19pbmNfcmV0dXJuKCZ6Y3J5cHRfc3RlcCk7CisJYXBfbXNnLnByaXZhdGUgPSAmd29yazsKKwlyYyA9IElDQUNSVF9tc2dfdG9fdHlwZTUwQ1JUX21zZyh6ZGV2LCAmYXBfbXNnLCBjcnQpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKKwlpbml0X2NvbXBsZXRpb24oJndvcmspOworCWFwX3F1ZXVlX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCSZ3b3JrLCBDRVgyQV9DTEVBTlVQX1RJTUUpOworCWlmIChyYyA+IDApCisJCXJjID0gY29udmVydF9yZXNwb25zZSh6ZGV2LCAmYXBfbXNnLCBjcnQtPm91dHB1dGRhdGEsCisJCQkJICAgICAgY3J0LT5vdXRwdXRkYXRhbGVuZ3RoKTsKKwllbHNlIHsKKwkJLyogU2lnbmFsIHBlbmRpbmcgb3IgbWVzc2FnZSB0aW1lZCBvdXQuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJCWlmIChyYyA9PSAwKQorCQkJLyogTWVzc2FnZSB0aW1lZCBvdXQuICovCisJCQlyYyA9IC1FVElNRTsKKwl9CitvdXRfZnJlZToKKwlrZnJlZShhcF9tc2cubWVzc2FnZSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFRoZSBjcnlwdG8gb3BlcmF0aW9ucyBmb3IgYSBDRVgyQSBjYXJkLgorICovCitzdGF0aWMgc3RydWN0IHpjcnlwdF9vcHMgemNyeXB0X2NleDJhX29wcyA9IHsKKwkucnNhX21vZGV4cG8gPSB6Y3J5cHRfY2V4MmFfbW9kZXhwbywKKwkucnNhX21vZGV4cG9fY3J0ID0gemNyeXB0X2NleDJhX21vZGV4cG9fY3J0LAorfTsKKworLyoqCisgKiBQcm9iZSBmdW5jdGlvbiBmb3IgQ0VYMkEgY2FyZHMuIEl0IGFsd2F5cyBhY2NlcHRzIHRoZSBBUCBkZXZpY2UKKyAqIHNpbmNlIHRoZSBidXNfbWF0Y2ggYWxyZWFkeSBjaGVja2VkIHRoZSBoYXJkd2FyZSB0eXBlLgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHpjcnlwdF9jZXgyYV9wcm9iZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisJaW50IHJjOworCisJemRldiA9IHpjcnlwdF9kZXZpY2VfYWxsb2MoQ0VYMkFfTUFYX1JFU1BPTlNFX1NJWkUpOworCWlmICghemRldikKKwkJcmV0dXJuIC1FTk9NRU07CisJemRldi0+YXBfZGV2ID0gYXBfZGV2OworCXpkZXYtPm9wcyA9ICZ6Y3J5cHRfY2V4MmFfb3BzOworCXpkZXYtPm9ubGluZSA9IDE7CisJemRldi0+dXNlcl9zcGFjZV90eXBlID0gWkNSWVBUX0NFWDJBOworCXpkZXYtPnR5cGVfc3RyaW5nID0gIkNFWDJBIjsKKwl6ZGV2LT5taW5fbW9kX3NpemUgPSBDRVgyQV9NSU5fTU9EX1NJWkU7CisJemRldi0+bWF4X21vZF9zaXplID0gQ0VYMkFfTUFYX01PRF9TSVpFOworCXpkZXYtPnNob3J0X2NydCA9IDE7CisJemRldi0+c3BlZWRfcmF0aW5nID0gQ0VYMkFfU1BFRURfUkFUSU5HOworCWFwX2Rldi0+cmVwbHkgPSAmemRldi0+cmVwbHk7CisJYXBfZGV2LT5wcml2YXRlID0gemRldjsKKwlyYyA9IHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoemRldik7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOworCXJldHVybiAwOworCitvdXRfZnJlZToKKwlhcF9kZXYtPnByaXZhdGUgPSBOVUxMOworCXpjcnlwdF9kZXZpY2VfZnJlZSh6ZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhpcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBleHRlbmRlZCBDRVgyQSBkcml2ZXIgaW5mb3JtYXRpb24KKyAqIGlmIGFuIEFQIGRldmljZSBpcyByZW1vdmVkLgorICovCitzdGF0aWMgdm9pZCB6Y3J5cHRfY2V4MmFfcmVtb3ZlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiA9IGFwX2Rldi0+cHJpdmF0ZTsKKworCXpjcnlwdF9kZXZpY2VfdW5yZWdpc3Rlcih6ZGV2KTsKK30KKworaW50IF9faW5pdCB6Y3J5cHRfY2V4MmFfaW5pdCh2b2lkKQoreworCXJldHVybiBhcF9kcml2ZXJfcmVnaXN0ZXIoJnpjcnlwdF9jZXgyYV9kcml2ZXIsIFRISVNfTU9EVUxFLCAiY2V4MmEiKTsKK30KKwordm9pZCBfX2V4aXQgemNyeXB0X2NleDJhX2V4aXQodm9pZCkKK3sKKwlhcF9kcml2ZXJfdW5yZWdpc3RlcigmemNyeXB0X2NleDJhX2RyaXZlcik7Cit9CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCittb2R1bGVfaW5pdCh6Y3J5cHRfY2V4MmFfaW5pdCk7Cittb2R1bGVfZXhpdCh6Y3J5cHRfY2V4MmFfZXhpdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNjlkMWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9jZXgyYS5oCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X2NleDJhLmgKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqICBNYWpvciBjbGVhbnVwICYgZHJpdmVyIHNwbGl0OiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9aQ1JZUFRfQ0VYMkFfSF8KKyNkZWZpbmUgX1pDUllQVF9DRVgyQV9IXworCisvKioKKyAqIFRoZSB0eXBlIDUwIG1lc3NhZ2UgZmFtaWx5IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENFWDJBIGNhcmQuCisgKgorICogVGhlIGZvdXIgbWVtYmVycyBvZiB0aGUgZmFtaWx5IGFyZSBkZXNjcmliZWQgYmVsb3cuCisgKgorICogTm90ZSB0aGF0IGFsbCB1bnNpZ25lZCBjaGFyIGFycmF5cyBhcmUgcmlnaHQtanVzdGlmaWVkIGFuZCBsZWZ0LXBhZGRlZAorICogd2l0aCB6ZXJvZXMuCisgKgorICogTm90ZSB0aGF0IGFsbCByZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvZXMuCisgKi8KK3N0cnVjdCB0eXBlNTBfaGRyIHsKKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkMTsKKwl1bnNpZ25lZCBjaGFyCW1zZ190eXBlX2NvZGU7CS8qIDB4NTAgKi8KKwl1bnNpZ25lZCBzaG9ydAltc2dfbGVuOworCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWQyOworCXVuc2lnbmVkIGNoYXIJaWdub3JlZDsKKwl1bnNpZ25lZCBzaG9ydAlyZXNlcnZlZDM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFRZUEU1MF9UWVBFX0NPREUJMHg1MAorCisjZGVmaW5lIFRZUEU1MF9NRUIxX0ZNVAkJMHgwMDAxCisjZGVmaW5lIFRZUEU1MF9NRUIyX0ZNVAkJMHgwMDAyCisjZGVmaW5lIFRZUEU1MF9DUkIxX0ZNVAkJMHgwMDExCisjZGVmaW5lIFRZUEU1MF9DUkIyX0ZNVAkJMHgwMDEyCisKKy8qIE1vZC1FeHAsIHdpdGggYSBzbWFsbCBtb2R1bHVzICovCitzdHJ1Y3QgdHlwZTUwX21lYjFfbXNnIHsKKwlzdHJ1Y3QgdHlwZTUwX2hkciBoZWFkZXI7CisJdW5zaWduZWQgc2hvcnQJa2V5YmxvY2tfdHlwZTsJLyogMHgwMDAxICovCisJdW5zaWduZWQgY2hhcglyZXNlcnZlZFs2XTsKKwl1bnNpZ25lZCBjaGFyCWV4cG9uZW50WzEyOF07CisJdW5zaWduZWQgY2hhcgltb2R1bHVzWzEyOF07CisJdW5zaWduZWQgY2hhcgltZXNzYWdlWzEyOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBNb2QtRXhwLCB3aXRoIGEgbGFyZ2UgbW9kdWx1cyAqLworc3RydWN0IHR5cGU1MF9tZWIyX21zZyB7CisJc3RydWN0IHR5cGU1MF9oZHIgaGVhZGVyOworCXVuc2lnbmVkIHNob3J0CWtleWJsb2NrX3R5cGU7CS8qIDB4MDAwMiAqLworCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWRbNl07CisJdW5zaWduZWQgY2hhcglleHBvbmVudFsyNTZdOworCXVuc2lnbmVkIGNoYXIJbW9kdWx1c1syNTZdOworCXVuc2lnbmVkIGNoYXIJbWVzc2FnZVsyNTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogQ1JULCB3aXRoIGEgc21hbGwgbW9kdWx1cyAqLworc3RydWN0IHR5cGU1MF9jcmIxX21zZyB7CisJc3RydWN0IHR5cGU1MF9oZHIgaGVhZGVyOworCXVuc2lnbmVkIHNob3J0CWtleWJsb2NrX3R5cGU7CS8qIDB4MDAxMSAqLworCXVuc2lnbmVkIGNoYXIJcmVzZXJ2ZWRbNl07CisJdW5zaWduZWQgY2hhcglwWzY0XTsKKwl1bnNpZ25lZCBjaGFyCXFbNjRdOworCXVuc2lnbmVkIGNoYXIJZHBbNjRdOworCXVuc2lnbmVkIGNoYXIJZHFbNjRdOworCXVuc2lnbmVkIGNoYXIJdVs2NF07CisJdW5zaWduZWQgY2hhcgltZXNzYWdlWzEyOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBDUlQsIHdpdGggYSBsYXJnZSBtb2R1bHVzICovCitzdHJ1Y3QgdHlwZTUwX2NyYjJfbXNnIHsKKwlzdHJ1Y3QgdHlwZTUwX2hkciBoZWFkZXI7CisJdW5zaWduZWQgc2hvcnQJa2V5YmxvY2tfdHlwZTsJLyogMHgwMDEyICovCisJdW5zaWduZWQgY2hhcglyZXNlcnZlZFs2XTsKKwl1bnNpZ25lZCBjaGFyCXBbMTI4XTsKKwl1bnNpZ25lZCBjaGFyCXFbMTI4XTsKKwl1bnNpZ25lZCBjaGFyCWRwWzEyOF07CisJdW5zaWduZWQgY2hhcglkcVsxMjhdOworCXVuc2lnbmVkIGNoYXIJdVsxMjhdOworCXVuc2lnbmVkIGNoYXIJbWVzc2FnZVsyNTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBUaGUgdHlwZSA4MCByZXNwb25zZSBmYW1pbHkgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ0VYMkEgY2FyZC4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHVuc2lnbmVkIGNoYXIgYXJyYXlzIGFyZSByaWdodC1qdXN0aWZpZWQgYW5kIGxlZnQtcGFkZGVkCisgKiB3aXRoIHplcm9lcy4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm9lcy4KKyAqLworCisjZGVmaW5lIFRZUEU4MF9SU1BfQ09ERSAweDgwCisKK3N0cnVjdCB0eXBlODBfaGRyIHsKKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkMTsKKwl1bnNpZ25lZCBjaGFyCXR5cGU7CQkvKiAweDgwICovCisJdW5zaWduZWQgc2hvcnQJbGVuOworCXVuc2lnbmVkIGNoYXIJY29kZTsJCS8qIDB4MDAgKi8KKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkMlszXTsKKwl1bnNpZ25lZCBjaGFyCXJlc2VydmVkM1s4XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK2ludCB6Y3J5cHRfY2V4MmFfaW5pdCh2b2lkKTsKK3ZvaWQgemNyeXB0X2NleDJhX2V4aXQodm9pZCk7CisKKyNlbmRpZiAvKiBfWkNSWVBUX0NFWDJBX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9lcnJvci5oIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfZXJyb3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2I2MTZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfZXJyb3IuaApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9lcnJvci5oCisgKgorICogIHpjcnlwdCAyLjEuMAorICoKKyAqICBDb3B5cmlnaHQgKEMpICAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbgorICogIEF1dGhvcihzKTogUm9iZXJ0IEJ1cnJvdWdocworICoJICAgICAgIEVyaWMgUm9zc21hbiAoZWRyb3NzbWFAdXMuaWJtLmNvbSkKKyAqCisgKiAgSG90cGx1ZyAmIG1pc2MgZGV2aWNlIHN1cHBvcnQ6IEpvY2hlbiBSb2VocmlnIChyb2VocmlnQGRlLmlibS5jb20pCisgKiAgTWFqb3IgY2xlYW51cCAmIGRyaXZlciBzcGxpdDogTWFydGluIFNjaHdpZGVmc2t5IDxzY2h3aWRlZnNreUBkZS5pYm0uY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfWkNSWVBUX0VSUk9SX0hfCisjZGVmaW5lIF9aQ1JZUFRfRVJST1JfSF8KKworI2luY2x1ZGUgInpjcnlwdF9hcGkuaCIKKworLyoqCisgKiBSZXBseSBNZXNzYWdlcworICoKKyAqIEVycm9yIHJlcGx5IG1lc3NhZ2VzIGFyZSBvZiB0d28gdHlwZXM6CisgKiAgICA4MjogIEVycm9yIChzZWUgYmVsb3cpCisgKiAgICA4ODogIEVycm9yIChzZWUgYmVsb3cpCisgKiBCb3RoIHR5cGUgODIgYW5kIHR5cGUgODggaGF2ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgaW4gdGhlIGhlYWRlci4KKyAqCisgKiBSZXF1ZXN0IHJlcGx5IG1lc3NhZ2VzIGFyZSBvZiB0aHJlZSBrbm93biB0eXBlczoKKyAqICAgIDgwOiAgUmVwbHkgZnJvbSBhIFR5cGUgNTAgUmVxdWVzdCAoc2VlIENFWDJBLVJFTEFURUQgU1RSVUNUUykKKyAqICAgIDg0OiAgUmVwbHkgZnJvbSBhIFR5cGUgNCBSZXF1ZXN0IChzZWUgUENJQ0EtUkVMQVRFRCBTVFJVQ1RTKQorICogICAgODY6ICBSZXBseSBmcm9tIGEgVHlwZSA2IFJlcXVlc3QgKHNlZSBQQ0lDQy9QQ0lYQ0MvQ0VYMkMtUkVMQVRFRCBTVFJVQ1RTKQorICoKKyAqLworc3RydWN0IGVycm9yX2hkciB7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDE7CS8qIDB4MDAJCQkqLworCXVuc2lnbmVkIGNoYXIgdHlwZTsJCS8qIDB4ODIgb3IgMHg4OAkJKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkMlsyXTsJLyogMHgwMDAwCQkqLworCXVuc2lnbmVkIGNoYXIgcmVwbHlfY29kZTsJLyogcmVwbHkgY29kZQkJKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkM1szXTsJLyogMHgwMDAwMDAJCSovCit9OworCisjZGVmaW5lIFRZUEU4Ml9SU1BfQ09ERSAweDgyCisjZGVmaW5lIFRZUEU4OF9SU1BfQ09ERSAweDg4CisKKyNkZWZpbmUgUkVQODJfRVJST1JfTUFDSElORV9GQUlMVVJFICAweDEwCisjZGVmaW5lIFJFUDgyX0VSUk9SX1BSRUVNUFRfRkFJTFVSRSAgMHgxMgorI2RlZmluZSBSRVA4Ml9FUlJPUl9DSEVDS1BUX0ZBSUxVUkUgIDB4MTQKKyNkZWZpbmUgUkVQODJfRVJST1JfTUVTU0FHRV9UWVBFICAgICAweDIwCisjZGVmaW5lIFJFUDgyX0VSUk9SX0lOVkFMSURfQ09NTV9DRCAgMHgyMQkvKiBUeXBlIDg0CSovCisjZGVmaW5lIFJFUDgyX0VSUk9SX0lOVkFMSURfTVNHX0xFTiAgMHgyMworI2RlZmluZSBSRVA4Ml9FUlJPUl9SRVNFUlZEX0ZJRUxEICAgIDB4MjQJLyogd2FzIDB4NTAJKi8KKyNkZWZpbmUgUkVQODJfRVJST1JfRk9STUFUX0ZJRUxEICAgICAweDI5CisjZGVmaW5lIFJFUDgyX0VSUk9SX0lOVkFMSURfQ09NTUFORCAgMHgzMAorI2RlZmluZSBSRVA4Ml9FUlJPUl9NQUxGT1JNRURfTVNHICAgIDB4NDAKKyNkZWZpbmUgUkVQODJfRVJST1JfUkVTRVJWRURfRklFTERPICAweDUwCS8qIG9sZCB2YWx1ZQkqLworI2RlZmluZSBSRVA4Ml9FUlJPUl9XT1JEX0FMSUdOTUVOVCAgIDB4NjAKKyNkZWZpbmUgUkVQODJfRVJST1JfTUVTU0FHRV9MRU5HVEggICAweDgwCisjZGVmaW5lIFJFUDgyX0VSUk9SX09QRVJBTkRfSU5WQUxJRCAgMHg4MgorI2RlZmluZSBSRVA4Ml9FUlJPUl9PUEVSQU5EX1NJWkUgICAgIDB4ODQKKyNkZWZpbmUgUkVQODJfRVJST1JfRVZFTl9NT0RfSU5fT1BORCAweDg1CisjZGVmaW5lIFJFUDgyX0VSUk9SX1JFU0VSVkVEX0ZJRUxEICAgMHg4OAorI2RlZmluZSBSRVA4Ml9FUlJPUl9UUkFOU1BPUlRfRkFJTCAgIDB4OTAKKyNkZWZpbmUgUkVQODJfRVJST1JfUEFDS0VUX1RSVU5DQVRFRCAweEEwCisjZGVmaW5lIFJFUDgyX0VSUk9SX1pFUk9fQlVGRkVSX0xFTiAgMHhCMAorCisjZGVmaW5lIFJFUDg4X0VSUk9SX01PRFVMRV9GQUlMVVJFICAgMHgxMAorCisjZGVmaW5lIFJFUDg4X0VSUk9SX01FU1NBR0VfVFlQRSAgICAgMHgyMAorI2RlZmluZSBSRVA4OF9FUlJPUl9NRVNTQUdFX01BTEZPUk1EIDB4MjIKKyNkZWZpbmUgUkVQODhfRVJST1JfTUVTU0FHRV9MRU5HVEggICAweDIzCisjZGVmaW5lIFJFUDg4X0VSUk9SX1JFU0VSVkVEX0ZJRUxEICAgMHgyNAorI2RlZmluZSBSRVA4OF9FUlJPUl9LRVlfVFlQRQkgICAgIDB4MzQKKyNkZWZpbmUgUkVQODhfRVJST1JfSU5WQUxJRF9LRVkgICAgICAweDgyCS8qIENFWDJBCSovCisjZGVmaW5lIFJFUDg4X0VSUk9SX09QRVJBTkQJICAgICAweDg0CS8qIENFWDJBCSovCisjZGVmaW5lIFJFUDg4X0VSUk9SX09QRVJBTkRfRVZFTl9NT0QgMHg4NQkvKiBDRVgyQQkqLworCitzdGF0aWMgaW5saW5lIGludCBjb252ZXJ0X2Vycm9yKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCXN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSkKK3sKKwlzdHJ1Y3QgZXJyb3JfaGRyICplaGRyID0gcmVwbHktPm1lc3NhZ2U7CisKKwlQUklOVEsoIkhhcmR3YXJlIGVycm9yIDogVHlwZSAlMDJ4IE1lc3NhZ2UgSGVhZGVyOiAlMDh4JTA4eFxuIiwKKwkgICAgICAgZWhkci0+dHlwZSwgKih1bnNpZ25lZCBpbnQgKikgcmVwbHktPm1lc3NhZ2UsCisJICAgICAgICoodW5zaWduZWQgaW50ICopIChyZXBseS0+bWVzc2FnZSArIDQpKTsKKworCXN3aXRjaCAoZWhkci0+cmVwbHlfY29kZSkgeworCWNhc2UgUkVQODJfRVJST1JfT1BFUkFORF9JTlZBTElEOgorCWNhc2UgUkVQODJfRVJST1JfT1BFUkFORF9TSVpFOgorCWNhc2UgUkVQODJfRVJST1JfRVZFTl9NT0RfSU5fT1BORDoKKwljYXNlIFJFUDg4X0VSUk9SX01FU1NBR0VfTUFMRk9STUQ6CisJLy8gICBSRVA4OF9FUlJPUl9JTlZBTElEX0tFWQkJLy8gJzgyJyBDRVgyQQorCS8vICAgUkVQODhfRVJST1JfT1BFUkFORAkJLy8gJzg0JyBDRVgyQQorCS8vICAgUkVQODhfRVJST1JfT1BFUkFORF9FVkVOX01PRAkvLyAnODUnIENFWDJBCisJCS8qIEludmFsaWQgaW5wdXQgZGF0YS4gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBSRVA4Ml9FUlJPUl9NRVNTQUdFX1RZUEU6CisJLy8gICBSRVA4OF9FUlJPUl9NRVNTQUdFX1RZUEUJCS8vICcyMCcgQ0VYMkEKKwkJLyoqCisJCSAqIFRvIHNlbnQgYSBtZXNzYWdlIG9mIHRoZSB3cm9uZyB0eXBlIGlzIGEgYnVnIGluIHRoZQorCQkgKiBkZXZpY2UgZHJpdmVyLiBXYXJuIGFib3V0IGl0LCBkaXNhYmxlIHRoZSBkZXZpY2UKKwkJICogYW5kIHRoZW4gcmVwZWF0IHRoZSByZXF1ZXN0LgorCQkgKi8KKwkJV0FSTl9PTigxKTsKKwkJemRldi0+b25saW5lID0gMDsKKwkJcmV0dXJuIC1FQUdBSU47CisJY2FzZSBSRVA4Ml9FUlJPUl9UUkFOU1BPUlRfRkFJTDoKKwljYXNlIFJFUDgyX0VSUk9SX01BQ0hJTkVfRkFJTFVSRToKKwkvLyAgIFJFUDg4X0VSUk9SX01PRFVMRV9GQUlMVVJFCQkvLyAnMTAnIENFWDJBCisJCS8qIElmIGEgY2FyZCBmYWlscyBkaXNhYmxlIGl0IGFuZCByZXBlYXQgdGhlIHJlcXVlc3QuICovCisJCXpkZXYtPm9ubGluZSA9IDA7CisJCXJldHVybiAtRUFHQUlOOworCWRlZmF1bHQ6CisJCVBSSU5US1coInVua25vd24gdHlwZSAlMDJ4IHJlcGx5IGNvZGUgPSAlZFxuIiwKKwkJCWVoZHItPnR5cGUsIGVoZHItPnJlcGx5X2NvZGUpOworCQl6ZGV2LT5vbmxpbmUgPSAwOworCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KKwl9Cit9CisKKyNlbmRpZiAvKiBfWkNSWVBUX0VSUk9SX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9tb25vLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9tb25vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5MzQ5YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X21vbm8uYwpAQCAtMCwwICsxLDEwMCBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9tb25vLmMKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqICBNYWpvciBjbGVhbnVwICYgZHJpdmVyIHNwbGl0OiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImFwX2J1cy5oIgorI2luY2x1ZGUgInpjcnlwdF9hcGkuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfcGNpY2EuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfcGNpY2MuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfcGNpeGNjLmgiCisjaW5jbHVkZSAiemNyeXB0X2NleDJhLmgiCisKKy8qKgorICogVGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiBjb2RlLgorICovCitpbnQgX19pbml0IHpjcnlwdF9pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJcmMgPSBhcF9tb2R1bGVfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBvdXQ7CisJcmMgPSB6Y3J5cHRfYXBpX2luaXQoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2FwOworCXJjID0gemNyeXB0X3BjaWNhX2luaXQoKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2FwaTsKKwlyYyA9IHpjcnlwdF9wY2ljY19pbml0KCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9wY2ljYTsKKwlyYyA9IHpjcnlwdF9wY2l4Y2NfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBvdXRfcGNpY2M7CisJcmMgPSB6Y3J5cHRfY2V4MmFfaW5pdCgpOworCWlmIChyYykKKwkJZ290byBvdXRfcGNpeGNjOworCXJldHVybiAwOworCitvdXRfcGNpeGNjOgorCXpjcnlwdF9wY2l4Y2NfZXhpdCgpOworb3V0X3BjaWNjOgorCXpjcnlwdF9wY2ljY19leGl0KCk7CitvdXRfcGNpY2E6CisJemNyeXB0X3BjaWNhX2V4aXQoKTsKK291dF9hcGk6CisJemNyeXB0X2FwaV9leGl0KCk7CitvdXRfYXA6CisJYXBfbW9kdWxlX2V4aXQoKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhlIG1vZHVsZSB0ZXJtaW5hdGlvbiBjb2RlLgorICovCit2b2lkIF9fZXhpdCB6Y3J5cHRfZXhpdCh2b2lkKQoreworCXpjcnlwdF9jZXgyYV9leGl0KCk7CisJemNyeXB0X3BjaXhjY19leGl0KCk7CisJemNyeXB0X3BjaWNjX2V4aXQoKTsKKwl6Y3J5cHRfcGNpY2FfZXhpdCgpOworCXpjcnlwdF9hcGlfZXhpdCgpOworCWFwX21vZHVsZV9leGl0KCk7Cit9CisKK21vZHVsZV9pbml0KHpjcnlwdF9pbml0KTsKK21vZHVsZV9leGl0KHpjcnlwdF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2YTRlY2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYS5jCkBAIC0wLDAgKzEsNDE4IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmMKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqICBNYWpvciBjbGVhbnVwICYgZHJpdmVyIHNwbGl0OiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgkJCQkgIFJhbHBoIFd1ZXJ0aG5lciA8cnd1ZXJ0aG5AZGUuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJhcF9idXMuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfYXBpLmgiCisjaW5jbHVkZSAiemNyeXB0X2Vycm9yLmgiCisjaW5jbHVkZSAiemNyeXB0X3BjaWNhLmgiCisKKyNkZWZpbmUgUENJQ0FfTUlOX01PRF9TSVpFCSAgMQkvKiAgICA4IGJpdHMJKi8KKyNkZWZpbmUgUENJQ0FfTUFYX01PRF9TSVpFCTI1NgkvKiAyMDQ4IGJpdHMJKi8KKworI2RlZmluZSBQQ0lDQV9TUEVFRF9SQVRJTkcJMjgwMAorCisjZGVmaW5lIFBDSUNBX01BWF9NRVNTQUdFX1NJWkUJMHgzYTAJLyogc2l6ZW9mKHN0cnVjdCB0eXBlNF9sY3IpCSAgICAgKi8KKyNkZWZpbmUgUENJQ0FfTUFYX1JFU1BPTlNFX1NJWkUgMHgxMTAJLyogbWF4IG91dHB1dGRhdGFsZW5ndGggKyB0eXBlODBfaGRyICovCisKKyNkZWZpbmUgUENJQ0FfQ0xFQU5VUF9USU1FCSgxNSpIWikKKworc3RhdGljIHN0cnVjdCBhcF9kZXZpY2VfaWQgemNyeXB0X3BjaWNhX2lkc1tdID0geworCXsgQVBfREVWSUNFKEFQX0RFVklDRV9UWVBFX1BDSUNBKSB9LAorCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKK307CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCitNT0RVTEVfREVWSUNFX1RBQkxFKGFwLCB6Y3J5cHRfcGNpY2FfaWRzKTsKK01PRFVMRV9BVVRIT1IoIklCTSBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0lDQSBDcnlwdG9ncmFwaGljIENvcHJvY2Vzc29yIGRldmljZSBkcml2ZXIsICIKKwkJICAgIkNvcHlyaWdodCAyMDAxLCAyMDA2IElCTSBDb3Jwb3JhdGlvbiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgemNyeXB0X3BjaWNhX3Byb2JlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2Rldik7CitzdGF0aWMgdm9pZCB6Y3J5cHRfcGNpY2FfcmVtb3ZlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2Rldik7CitzdGF0aWMgdm9pZCB6Y3J5cHRfcGNpY2FfcmVjZWl2ZShzdHJ1Y3QgYXBfZGV2aWNlICosIHN0cnVjdCBhcF9tZXNzYWdlICosCisJCQkJIHN0cnVjdCBhcF9tZXNzYWdlICopOworCitzdGF0aWMgc3RydWN0IGFwX2RyaXZlciB6Y3J5cHRfcGNpY2FfZHJpdmVyID0geworCS5wcm9iZSA9IHpjcnlwdF9wY2ljYV9wcm9iZSwKKwkucmVtb3ZlID0gemNyeXB0X3BjaWNhX3JlbW92ZSwKKwkucmVjZWl2ZSA9IHpjcnlwdF9wY2ljYV9yZWNlaXZlLAorCS5pZHMgPSB6Y3J5cHRfcGNpY2FfaWRzLAorfTsKKworLyoqCisgKiBDb252ZXJ0IGEgSUNBTUVYIG1lc3NhZ2UgdG8gYSB0eXBlNCBNRVggbWVzc2FnZS4KKyAqCisgKiBAemRldjogY3J5cHRvIGRldmljZSBwb2ludGVyCisgKiBAenJlcTogY3J5cHRvIHJlcXVlc3QgcG9pbnRlcgorICogQG1leDogcG9pbnRlciB0byB1c2VyIGlucHV0IGRhdGEKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRUZBVUxULgorICovCitzdGF0aWMgaW50IElDQU1FWF9tc2dfdG9fdHlwZTRNRVhfbXNnKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2csCisJCQkJICAgICAgc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqbWV4KQoreworCXVuc2lnbmVkIGNoYXIgKm1vZHVsdXMsICpleHBvbmVudCwgKm1lc3NhZ2U7CisJaW50IG1vZF9sZW47CisKKwltb2RfbGVuID0gbWV4LT5pbnB1dGRhdGFsZW5ndGg7CisKKwlpZiAobW9kX2xlbiA8PSAxMjgpIHsKKwkJc3RydWN0IHR5cGU0X3NtZSAqc21lID0gYXBfbXNnLT5tZXNzYWdlOworCQltZW1zZXQoc21lLCAwLCBzaXplb2YoKnNtZSkpOworCQlhcF9tc2ctPmxlbmd0aCA9IHNpemVvZigqc21lKTsKKwkJc21lLT5oZWFkZXIubXNnX2ZtdCA9IFRZUEU0X1NNRV9GTVQ7CisJCXNtZS0+aGVhZGVyLm1zZ19sZW4gPSBzaXplb2YoKnNtZSk7CisJCXNtZS0+aGVhZGVyLm1zZ190eXBlX2NvZGUgPSBUWVBFNF9UWVBFX0NPREU7CisJCXNtZS0+aGVhZGVyLnJlcXVlc3RfY29kZSA9IFRZUEU0X1JFUVVfQ09ERTsKKwkJbW9kdWx1cyA9IHNtZS0+bW9kdWx1cyArIHNpemVvZihzbWUtPm1vZHVsdXMpIC0gbW9kX2xlbjsKKwkJZXhwb25lbnQgPSBzbWUtPmV4cG9uZW50ICsgc2l6ZW9mKHNtZS0+ZXhwb25lbnQpIC0gbW9kX2xlbjsKKwkJbWVzc2FnZSA9IHNtZS0+bWVzc2FnZSArIHNpemVvZihzbWUtPm1lc3NhZ2UpIC0gbW9kX2xlbjsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdHlwZTRfbG1lICpsbWUgPSBhcF9tc2ctPm1lc3NhZ2U7CisJCW1lbXNldChsbWUsIDAsIHNpemVvZigqbG1lKSk7CisJCWFwX21zZy0+bGVuZ3RoID0gc2l6ZW9mKCpsbWUpOworCQlsbWUtPmhlYWRlci5tc2dfZm10ID0gVFlQRTRfTE1FX0ZNVDsKKwkJbG1lLT5oZWFkZXIubXNnX2xlbiA9IHNpemVvZigqbG1lKTsKKwkJbG1lLT5oZWFkZXIubXNnX3R5cGVfY29kZSA9IFRZUEU0X1RZUEVfQ09ERTsKKwkJbG1lLT5oZWFkZXIucmVxdWVzdF9jb2RlID0gVFlQRTRfUkVRVV9DT0RFOworCQltb2R1bHVzID0gbG1lLT5tb2R1bHVzICsgc2l6ZW9mKGxtZS0+bW9kdWx1cykgLSBtb2RfbGVuOworCQlleHBvbmVudCA9IGxtZS0+ZXhwb25lbnQgKyBzaXplb2YobG1lLT5leHBvbmVudCkgLSBtb2RfbGVuOworCQltZXNzYWdlID0gbG1lLT5tZXNzYWdlICsgc2l6ZW9mKGxtZS0+bWVzc2FnZSkgLSBtb2RfbGVuOworCX0KKworCWlmIChjb3B5X2Zyb21fdXNlcihtb2R1bHVzLCBtZXgtPm5fbW9kdWx1cywgbW9kX2xlbikgfHwKKwkgICAgY29weV9mcm9tX3VzZXIoZXhwb25lbnQsIG1leC0+Yl9rZXksIG1vZF9sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKG1lc3NhZ2UsIG1leC0+aW5wdXRkYXRhLCBtb2RfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ29udmVydCBhIElDQUNSVCBtZXNzYWdlIHRvIGEgdHlwZTQgQ1JUIG1lc3NhZ2UuCisgKgorICogQHpkZXY6IGNyeXB0byBkZXZpY2UgcG9pbnRlcgorICogQHpyZXE6IGNyeXB0byByZXF1ZXN0IHBvaW50ZXIKKyAqIEBjcnQ6IHBvaW50ZXIgdG8gdXNlciBpbnB1dCBkYXRhCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVC4KKyAqLworc3RhdGljIGludCBJQ0FDUlRfbXNnX3RvX3R5cGU0Q1JUX21zZyhzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgICAgICBzdHJ1Y3QgYXBfbWVzc2FnZSAqYXBfbXNnLAorCQkJCSAgICAgIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQpCit7CisJdW5zaWduZWQgY2hhciAqcCwgKnEsICpkcCwgKmRxLCAqdSwgKmlucDsKKwlpbnQgbW9kX2xlbiwgc2hvcnRfbGVuLCBsb25nX2xlbjsKKworCW1vZF9sZW4gPSBjcnQtPmlucHV0ZGF0YWxlbmd0aDsKKwlzaG9ydF9sZW4gPSBtb2RfbGVuIC8gMjsKKwlsb25nX2xlbiA9IG1vZF9sZW4gLyAyICsgODsKKworCWlmIChtb2RfbGVuIDw9IDEyOCkgeworCQlzdHJ1Y3QgdHlwZTRfc2NyICpzY3IgPSBhcF9tc2ctPm1lc3NhZ2U7CisJCW1lbXNldChzY3IsIDAsIHNpemVvZigqc2NyKSk7CisJCWFwX21zZy0+bGVuZ3RoID0gc2l6ZW9mKCpzY3IpOworCQlzY3ItPmhlYWRlci5tc2dfdHlwZV9jb2RlID0gVFlQRTRfVFlQRV9DT0RFOworCQlzY3ItPmhlYWRlci5yZXF1ZXN0X2NvZGUgPSBUWVBFNF9SRVFVX0NPREU7CisJCXNjci0+aGVhZGVyLm1zZ19mbXQgPSBUWVBFNF9TQ1JfRk1UOworCQlzY3ItPmhlYWRlci5tc2dfbGVuID0gc2l6ZW9mKCpzY3IpOworCQlwID0gc2NyLT5wICsgc2l6ZW9mKHNjci0+cCkgLSBsb25nX2xlbjsKKwkJcSA9IHNjci0+cSArIHNpemVvZihzY3ItPnEpIC0gc2hvcnRfbGVuOworCQlkcCA9IHNjci0+ZHAgKyBzaXplb2Yoc2NyLT5kcCkgLSBsb25nX2xlbjsKKwkJZHEgPSBzY3ItPmRxICsgc2l6ZW9mKHNjci0+ZHEpIC0gc2hvcnRfbGVuOworCQl1ID0gc2NyLT51ICsgc2l6ZW9mKHNjci0+dSkgLSBsb25nX2xlbjsKKwkJaW5wID0gc2NyLT5tZXNzYWdlICsgc2l6ZW9mKHNjci0+bWVzc2FnZSkgLSBtb2RfbGVuOworCX0gZWxzZSB7CisJCXN0cnVjdCB0eXBlNF9sY3IgKmxjciA9IGFwX21zZy0+bWVzc2FnZTsKKwkJbWVtc2V0KGxjciwgMCwgc2l6ZW9mKCpsY3IpKTsKKwkJYXBfbXNnLT5sZW5ndGggPSBzaXplb2YoKmxjcik7CisJCWxjci0+aGVhZGVyLm1zZ190eXBlX2NvZGUgPSBUWVBFNF9UWVBFX0NPREU7CisJCWxjci0+aGVhZGVyLnJlcXVlc3RfY29kZSA9IFRZUEU0X1JFUVVfQ09ERTsKKwkJbGNyLT5oZWFkZXIubXNnX2ZtdCA9IFRZUEU0X0xDUl9GTVQ7CisJCWxjci0+aGVhZGVyLm1zZ19sZW4gPSBzaXplb2YoKmxjcik7CisJCXAgPSBsY3ItPnAgKyBzaXplb2YobGNyLT5wKSAtIGxvbmdfbGVuOworCQlxID0gbGNyLT5xICsgc2l6ZW9mKGxjci0+cSkgLSBzaG9ydF9sZW47CisJCWRwID0gbGNyLT5kcCArIHNpemVvZihsY3ItPmRwKSAtIGxvbmdfbGVuOworCQlkcSA9IGxjci0+ZHEgKyBzaXplb2YobGNyLT5kcSkgLSBzaG9ydF9sZW47CisJCXUgPSBsY3ItPnUgKyBzaXplb2YobGNyLT51KSAtIGxvbmdfbGVuOworCQlpbnAgPSBsY3ItPm1lc3NhZ2UgKyBzaXplb2YobGNyLT5tZXNzYWdlKSAtIG1vZF9sZW47CisJfQorCisJaWYgKGNvcHlfZnJvbV91c2VyKHAsIGNydC0+bnBfcHJpbWUsIGxvbmdfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcihxLCBjcnQtPm5xX3ByaW1lLCBzaG9ydF9sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKGRwLCBjcnQtPmJwX2tleSwgbG9uZ19sZW4pIHx8CisJICAgIGNvcHlfZnJvbV91c2VyKGRxLCBjcnQtPmJxX2tleSwgc2hvcnRfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcih1LCBjcnQtPnVfbXVsdF9pbnYsIGxvbmdfbGVuKSB8fAorCSAgICBjb3B5X2Zyb21fdXNlcihpbnAsIGNydC0+aW5wdXRkYXRhLCBtb2RfbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogQ29weSByZXN1bHRzIGZyb20gYSB0eXBlIDg0IHJlcGx5IG1lc3NhZ2UgYmFjayB0byB1c2VyIHNwYWNlLgorICoKKyAqIEB6ZGV2OiBjcnlwdG8gZGV2aWNlIHBvaW50ZXIKKyAqIEByZXBseTogcmVwbHkgQVAgbWVzc2FnZS4KKyAqIEBkYXRhOiBwb2ludGVyIHRvIHVzZXIgb3V0cHV0IGRhdGEKKyAqIEBsZW5ndGg6IHNpemUgb2YgdXNlciBvdXRwdXQgZGF0YQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FRkFVTFQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNvbnZlcnRfdHlwZTg0KHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHksCisJCQkJIGNoYXIgX191c2VyICpvdXRwdXRkYXRhLAorCQkJCSB1bnNpZ25lZCBpbnQgb3V0cHV0ZGF0YWxlbmd0aCkKK3sKKwlzdHJ1Y3QgdHlwZTg0X2hkciAqdDg0aCA9IHJlcGx5LT5tZXNzYWdlOworCWNoYXIgKmRhdGE7CisKKwlpZiAodDg0aC0+bGVuIDwgc2l6ZW9mKCp0ODRoKSArIG91dHB1dGRhdGFsZW5ndGgpIHsKKwkJLyogVGhlIHJlc3VsdCBpcyB0b28gc2hvcnQsIHRoZSBQQ0lDQSBjYXJkIG1heSBub3QgZG8gdGhhdC4uICovCisJCXpkZXYtPm9ubGluZSA9IDA7CisJCXJldHVybiAtRUFHQUlOOwkvKiByZXBlYXQgdGhlIHJlcXVlc3Qgb24gYSBkaWZmZXJlbnQgZGV2aWNlLiAqLworCX0KKwlCVUdfT04odDg0aC0+bGVuID4gUENJQ0FfTUFYX1JFU1BPTlNFX1NJWkUpOworCWRhdGEgPSByZXBseS0+bWVzc2FnZSArIHQ4NGgtPmxlbiAtIG91dHB1dGRhdGFsZW5ndGg7CisJaWYgKGNvcHlfdG9fdXNlcihvdXRwdXRkYXRhLCBkYXRhLCBvdXRwdXRkYXRhbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29udmVydF9yZXNwb25zZShzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCSAgICBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHksCisJCQkgICAgY2hhciBfX3VzZXIgKm91dHB1dGRhdGEsCisJCQkgICAgdW5zaWduZWQgaW50IG91dHB1dGRhdGFsZW5ndGgpCit7CisJLyogUmVzcG9uc2UgdHlwZSBieXRlIGlzIHRoZSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmVzcG9uc2UuICovCisJc3dpdGNoICgoKHVuc2lnbmVkIGNoYXIgKikgcmVwbHktPm1lc3NhZ2UpWzFdKSB7CisJY2FzZSBUWVBFODJfUlNQX0NPREU6CisJY2FzZSBUWVBFODhfUlNQX0NPREU6CisJCXJldHVybiBjb252ZXJ0X2Vycm9yKHpkZXYsIHJlcGx5KTsKKwljYXNlIFRZUEU4NF9SU1BfQ09ERToKKwkJcmV0dXJuIGNvbnZlcnRfdHlwZTg0KHpkZXYsIHJlcGx5LAorCQkJCSAgICAgIG91dHB1dGRhdGEsIG91dHB1dGRhdGFsZW5ndGgpOworCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KKwkJUFJJTlRLKCJVbnJlY29nbml6ZWQgTWVzc2FnZSBIZWFkZXI6ICUwOHglMDh4XG4iLAorCQkgICAgICAgKih1bnNpZ25lZCBpbnQgKikgcmVwbHktPm1lc3NhZ2UsCisJCSAgICAgICAqKHVuc2lnbmVkIGludCAqKSAocmVwbHktPm1lc3NhZ2UrNCkpOworCQl6ZGV2LT5vbmxpbmUgPSAwOworCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KKwl9Cit9CisKKy8qKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgQVAgYnVzIGNvZGUgYWZ0ZXIgYSBjcnlwdG8gcmVxdWVzdAorICogIm1zZyIgaGFzIGZpbmlzaGVkIHdpdGggdGhlIHJlcGx5IG1lc3NhZ2UgInJlcGx5Ii4KKyAqIEl0IGlzIGNhbGxlZCBmcm9tIHRhc2tsZXQgY29udGV4dC4KKyAqIEBhcF9kZXY6IHBvaW50ZXIgdG8gdGhlIEFQIGRldmljZQorICogQG1zZzogcG9pbnRlciB0byB0aGUgQVAgbWVzc2FnZQorICogQHJlcGx5OiBwb2ludGVyIHRvIHRoZSBBUCByZXBseSBtZXNzYWdlCisgKi8KK3N0YXRpYyB2b2lkIHpjcnlwdF9wY2ljYV9yZWNlaXZlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldiwKKwkJCQkgc3RydWN0IGFwX21lc3NhZ2UgKm1zZywKKwkJCQkgc3RydWN0IGFwX21lc3NhZ2UgKnJlcGx5KQoreworCXN0YXRpYyBzdHJ1Y3QgZXJyb3JfaGRyIGVycm9yX3JlcGx5ID0geworCQkudHlwZSA9IFRZUEU4Ml9SU1BfQ09ERSwKKwkJLnJlcGx5X2NvZGUgPSBSRVA4Ml9FUlJPUl9NQUNISU5FX0ZBSUxVUkUsCisJfTsKKwlzdHJ1Y3QgdHlwZTg0X2hkciAqdDg0aCA9IHJlcGx5LT5tZXNzYWdlOworCWludCBsZW5ndGg7CisKKwkvKiBDb3B5IHRoZSByZXBseSBtZXNzYWdlIHRvIHRoZSByZXF1ZXN0IG1lc3NhZ2UgYnVmZmVyLiAqLworCWlmIChJU19FUlIocmVwbHkpKQorCQltZW1jcHkobXNnLT5tZXNzYWdlLCAmZXJyb3JfcmVwbHksIHNpemVvZihlcnJvcl9yZXBseSkpOworCWVsc2UgaWYgKHQ4NGgtPmNvZGUgPT0gVFlQRTg0X1JTUF9DT0RFKSB7CisJCWxlbmd0aCA9IG1pbihQQ0lDQV9NQVhfUkVTUE9OU0VfU0laRSwgKGludCkgdDg0aC0+bGVuKTsKKwkJbWVtY3B5KG1zZy0+bWVzc2FnZSwgcmVwbHktPm1lc3NhZ2UsIGxlbmd0aCk7CisJfSBlbHNlCisJCW1lbWNweShtc2ctPm1lc3NhZ2UsIHJlcGx5LT5tZXNzYWdlLCBzaXplb2YgZXJyb3JfcmVwbHkpOworCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKSBtc2ctPnByaXZhdGUpOworfQorCitzdGF0aWMgYXRvbWljX3QgemNyeXB0X3N0ZXAgPSBBVE9NSUNfSU5JVCgwKTsKKworLyoqCisgKiBUaGUgcmVxdWVzdCBkaXN0cmlidXRvciBjYWxscyB0aGlzIGZ1bmN0aW9uIGlmIGl0IHBpY2tlZCB0aGUgUENJQ0EKKyAqIGRldmljZSB0byBoYW5kbGUgYSBtb2RleHBvIHJlcXVlc3QuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIFBDSUNBIGRldmljZSB0byB0aGUgcmVxdWVzdCBkaXN0cmlidXRvcgorICogQG1leDogcG9pbnRlciB0byB0aGUgbW9kZXhwbyByZXF1ZXN0IGJ1ZmZlcgorICovCitzdGF0aWMgbG9uZyB6Y3J5cHRfcGNpY2FfbW9kZXhwbyhzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqbWV4KQoreworCXN0cnVjdCBhcF9tZXNzYWdlIGFwX21zZzsKKwlzdHJ1Y3QgY29tcGxldGlvbiB3b3JrOworCWludCByYzsKKworCWFwX21zZy5tZXNzYWdlID0gKHZvaWQgKikga21hbGxvYyhQQ0lDQV9NQVhfTUVTU0FHRV9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFwX21zZy5tZXNzYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKwlhcF9tc2cucHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnQtPnBpZCkgPDwgMzIpICsKKwkJCQlhdG9taWNfaW5jX3JldHVybigmemNyeXB0X3N0ZXApOworCWFwX21zZy5wcml2YXRlID0gJndvcms7CisJcmMgPSBJQ0FNRVhfbXNnX3RvX3R5cGU0TUVYX21zZyh6ZGV2LCAmYXBfbXNnLCBtZXgpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKKwlpbml0X2NvbXBsZXRpb24oJndvcmspOworCWFwX3F1ZXVlX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCSZ3b3JrLCBQQ0lDQV9DTEVBTlVQX1RJTUUpOworCWlmIChyYyA+IDApCisJCXJjID0gY29udmVydF9yZXNwb25zZSh6ZGV2LCAmYXBfbXNnLCBtZXgtPm91dHB1dGRhdGEsCisJCQkJICAgICAgbWV4LT5vdXRwdXRkYXRhbGVuZ3RoKTsKKwllbHNlIHsKKwkJLyogU2lnbmFsIHBlbmRpbmcgb3IgbWVzc2FnZSB0aW1lZCBvdXQuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJCWlmIChyYyA9PSAwKQorCQkJLyogTWVzc2FnZSB0aW1lZCBvdXQuICovCisJCQlyYyA9IC1FVElNRTsKKwl9CitvdXRfZnJlZToKKwlrZnJlZShhcF9tc2cubWVzc2FnZSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yIGNhbGxzIHRoaXMgZnVuY3Rpb24gaWYgaXQgcGlja2VkIHRoZSBQQ0lDQQorICogZGV2aWNlIHRvIGhhbmRsZSBhIG1vZGV4cG9fY3J0IHJlcXVlc3QuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIFBDSUNBIGRldmljZSB0byB0aGUgcmVxdWVzdCBkaXN0cmlidXRvcgorICogQGNydDogcG9pbnRlciB0byB0aGUgbW9kZXhwb2NfY3J0IHJlcXVlc3QgYnVmZmVyCisgKi8KK3N0YXRpYyBsb25nIHpjcnlwdF9wY2ljYV9tb2RleHBvX2NydChzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgICAgIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQpCit7CisJc3RydWN0IGFwX21lc3NhZ2UgYXBfbXNnOworCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CisJaW50IHJjOworCisJYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBrbWFsbG9jKFBDSUNBX01BWF9NRVNTQUdFX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghYXBfbXNnLm1lc3NhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKworCQkJCWF0b21pY19pbmNfcmV0dXJuKCZ6Y3J5cHRfc3RlcCk7CisJYXBfbXNnLnByaXZhdGUgPSAmd29yazsKKwlyYyA9IElDQUNSVF9tc2dfdG9fdHlwZTRDUlRfbXNnKHpkZXYsICZhcF9tc2csIGNydCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOworCWluaXRfY29tcGxldGlvbigmd29yayk7CisJYXBfcXVldWVfbWVzc2FnZSh6ZGV2LT5hcF9kZXYsICZhcF9tc2cpOworCXJjID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJJndvcmssIFBDSUNBX0NMRUFOVVBfVElNRSk7CisJaWYgKHJjID4gMCkKKwkJcmMgPSBjb252ZXJ0X3Jlc3BvbnNlKHpkZXYsICZhcF9tc2csIGNydC0+b3V0cHV0ZGF0YSwKKwkJCQkgICAgICBjcnQtPm91dHB1dGRhdGFsZW5ndGgpOworCWVsc2UgeworCQkvKiBTaWduYWwgcGVuZGluZyBvciBtZXNzYWdlIHRpbWVkIG91dC4gKi8KKwkJYXBfY2FuY2VsX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwkJaWYgKHJjID09IDApCisJCQkvKiBNZXNzYWdlIHRpbWVkIG91dC4gKi8KKwkJCXJjID0gLUVUSU1FOworCX0KK291dF9mcmVlOgorCWtmcmVlKGFwX21zZy5tZXNzYWdlKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhlIGNyeXB0byBvcGVyYXRpb25zIGZvciBhIFBDSUNBIGNhcmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgemNyeXB0X29wcyB6Y3J5cHRfcGNpY2Ffb3BzID0geworCS5yc2FfbW9kZXhwbyA9IHpjcnlwdF9wY2ljYV9tb2RleHBvLAorCS5yc2FfbW9kZXhwb19jcnQgPSB6Y3J5cHRfcGNpY2FfbW9kZXhwb19jcnQsCit9OworCisvKioKKyAqIFByb2JlIGZ1bmN0aW9uIGZvciBQQ0lDQSBjYXJkcy4gSXQgYWx3YXlzIGFjY2VwdHMgdGhlIEFQIGRldmljZQorICogc2luY2UgdGhlIGJ1c19tYXRjaCBhbHJlYWR5IGNoZWNrZWQgdGhlIGhhcmR3YXJlIHR5cGUuCisgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgemNyeXB0X3BjaWNhX3Byb2JlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKwlpbnQgcmM7CisKKwl6ZGV2ID0gemNyeXB0X2RldmljZV9hbGxvYyhQQ0lDQV9NQVhfUkVTUE9OU0VfU0laRSk7CisJaWYgKCF6ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwl6ZGV2LT5hcF9kZXYgPSBhcF9kZXY7CisJemRldi0+b3BzID0gJnpjcnlwdF9wY2ljYV9vcHM7CisJemRldi0+b25saW5lID0gMTsKKwl6ZGV2LT51c2VyX3NwYWNlX3R5cGUgPSBaQ1JZUFRfUENJQ0E7CisJemRldi0+dHlwZV9zdHJpbmcgPSAiUENJQ0EiOworCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IFBDSUNBX01JTl9NT0RfU0laRTsKKwl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lDQV9NQVhfTU9EX1NJWkU7CisJemRldi0+c3BlZWRfcmF0aW5nID0gUENJQ0FfU1BFRURfUkFUSU5HOworCWFwX2Rldi0+cmVwbHkgPSAmemRldi0+cmVwbHk7CisJYXBfZGV2LT5wcml2YXRlID0gemRldjsKKwlyYyA9IHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoemRldik7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOworCXJldHVybiAwOworCitvdXRfZnJlZToKKwlhcF9kZXYtPnByaXZhdGUgPSBOVUxMOworCXpjcnlwdF9kZXZpY2VfZnJlZSh6ZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhpcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBleHRlbmRlZCBQQ0lDQSBkcml2ZXIgaW5mb3JtYXRpb24KKyAqIGlmIGFuIEFQIGRldmljZSBpcyByZW1vdmVkLgorICovCitzdGF0aWMgdm9pZCB6Y3J5cHRfcGNpY2FfcmVtb3ZlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiA9IGFwX2Rldi0+cHJpdmF0ZTsKKworCXpjcnlwdF9kZXZpY2VfdW5yZWdpc3Rlcih6ZGV2KTsKK30KKworaW50IF9faW5pdCB6Y3J5cHRfcGNpY2FfaW5pdCh2b2lkKQoreworCXJldHVybiBhcF9kcml2ZXJfcmVnaXN0ZXIoJnpjcnlwdF9wY2ljYV9kcml2ZXIsIFRISVNfTU9EVUxFLCAicGNpY2EiKTsKK30KKwordm9pZCB6Y3J5cHRfcGNpY2FfZXhpdCh2b2lkKQoreworCWFwX2RyaXZlcl91bnJlZ2lzdGVyKCZ6Y3J5cHRfcGNpY2FfZHJpdmVyKTsKK30KKworI2lmbmRlZiBDT05GSUdfWkNSWVBUX01PTk9MSVRISUMKK21vZHVsZV9pbml0KHpjcnlwdF9wY2ljYV9pbml0KTsKK21vZHVsZV9leGl0KHpjcnlwdF9wY2ljYV9leGl0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2EuaCBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlMTExOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNhLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpY2EuaAorICoKKyAqICB6Y3J5cHQgMi4xLjAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24KKyAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMKKyAqCSAgICAgICBFcmljIFJvc3NtYW4gKGVkcm9zc21hQHVzLmlibS5jb20pCisgKgorICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQorICogIE1ham9yIGNsZWFudXAgJiBkcml2ZXIgc3BsaXQ6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1pDUllQVF9QQ0lDQV9IXworI2RlZmluZSBfWkNSWVBUX1BDSUNBX0hfCisKKy8qKgorICogVGhlIHR5cGUgNCBtZXNzYWdlIGZhbWlseSBpcyBhc3NvY2lhdGVkIHdpdGggYSBQQ0lDQSBjYXJkLgorICoKKyAqIFRoZSBmb3VyIG1lbWJlcnMgb2YgdGhlIGZhbWlseSBhcmUgZGVzY3JpYmVkIGJlbG93LgorICoKKyAqIE5vdGUgdGhhdCBhbGwgdW5zaWduZWQgY2hhciBhcnJheXMgYXJlIHJpZ2h0LWp1c3RpZmllZCBhbmQgbGVmdC1wYWRkZWQKKyAqIHdpdGggemVyb2VzLgorICoKKyAqIE5vdGUgdGhhdCBhbGwgcmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVyb2VzLgorICovCitzdHJ1Y3QgdHlwZTRfaGRyIHsKKwl1bnNpZ25lZCBjaGFyICByZXNlcnZlZDE7CisJdW5zaWduZWQgY2hhciAgbXNnX3R5cGVfY29kZTsJLyogMHgwNCAqLworCXVuc2lnbmVkIHNob3J0IG1zZ19sZW47CisJdW5zaWduZWQgY2hhciAgcmVxdWVzdF9jb2RlOwkvKiAweDQwICovCisJdW5zaWduZWQgY2hhciAgbXNnX2ZtdDsKKwl1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIFRZUEU0X1RZUEVfQ09ERSAweDA0CisjZGVmaW5lIFRZUEU0X1JFUVVfQ09ERSAweDQwCisKKyNkZWZpbmUgVFlQRTRfU01FX0ZNVCAweDAwCisjZGVmaW5lIFRZUEU0X0xNRV9GTVQgMHgxMAorI2RlZmluZSBUWVBFNF9TQ1JfRk1UIDB4NDAKKyNkZWZpbmUgVFlQRTRfTENSX0ZNVCAweDUwCisKKy8qIE1vZC1FeHAsIHdpdGggYSBzbWFsbCBtb2R1bHVzICovCitzdHJ1Y3QgdHlwZTRfc21lIHsKKwlzdHJ1Y3QgdHlwZTRfaGRyIGhlYWRlcjsKKwl1bnNpZ25lZCBjaGFyCSBtZXNzYWdlWzEyOF07CisJdW5zaWduZWQgY2hhcgkgZXhwb25lbnRbMTI4XTsKKwl1bnNpZ25lZCBjaGFyCSBtb2R1bHVzWzEyOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBNb2QtRXhwLCB3aXRoIGEgbGFyZ2UgbW9kdWx1cyAqLworc3RydWN0IHR5cGU0X2xtZSB7CisJc3RydWN0IHR5cGU0X2hkciBoZWFkZXI7CisJdW5zaWduZWQgY2hhcgkgbWVzc2FnZVsyNTZdOworCXVuc2lnbmVkIGNoYXIJIGV4cG9uZW50WzI1Nl07CisJdW5zaWduZWQgY2hhcgkgbW9kdWx1c1syNTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyogQ1JULCB3aXRoIGEgc21hbGwgbW9kdWx1cyAqLworc3RydWN0IHR5cGU0X3NjciB7CisJc3RydWN0IHR5cGU0X2hkciBoZWFkZXI7CisJdW5zaWduZWQgY2hhcgkgbWVzc2FnZVsxMjhdOworCXVuc2lnbmVkIGNoYXIJIGRwWzcyXTsKKwl1bnNpZ25lZCBjaGFyCSBkcVs2NF07CisJdW5zaWduZWQgY2hhcgkgcFs3Ml07CisJdW5zaWduZWQgY2hhcgkgcVs2NF07CisJdW5zaWduZWQgY2hhcgkgdVs3Ml07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisvKiBDUlQsIHdpdGggYSBsYXJnZSBtb2R1bHVzICovCitzdHJ1Y3QgdHlwZTRfbGNyIHsKKwlzdHJ1Y3QgdHlwZTRfaGRyIGhlYWRlcjsKKwl1bnNpZ25lZCBjaGFyCSBtZXNzYWdlWzI1Nl07CisJdW5zaWduZWQgY2hhcgkgZHBbMTM2XTsKKwl1bnNpZ25lZCBjaGFyCSBkcVsxMjhdOworCXVuc2lnbmVkIGNoYXIJIHBbMTM2XTsKKwl1bnNpZ25lZCBjaGFyCSBxWzEyOF07CisJdW5zaWduZWQgY2hhcgkgdVsxMzZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBUaGUgdHlwZSA4NCByZXNwb25zZSBmYW1pbHkgaXMgYXNzb2NpYXRlZCB3aXRoIGEgUENJQ0EgY2FyZC4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHVuc2lnbmVkIGNoYXIgYXJyYXlzIGFyZSByaWdodC1qdXN0aWZpZWQgYW5kIGxlZnQtcGFkZGVkCisgKiB3aXRoIHplcm9lcy4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm9lcy4KKyAqLworCitzdHJ1Y3QgdHlwZTg0X2hkciB7CisJdW5zaWduZWQgY2hhciAgcmVzZXJ2ZWQxOworCXVuc2lnbmVkIGNoYXIgIGNvZGU7CisJdW5zaWduZWQgc2hvcnQgbGVuOworCXVuc2lnbmVkIGNoYXIgIHJlc2VydmVkMls0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVFlQRTg0X1JTUF9DT0RFIDB4ODQKKworaW50IHpjcnlwdF9wY2ljYV9pbml0KHZvaWQpOwordm9pZCB6Y3J5cHRfcGNpY2FfZXhpdCh2b2lkKTsKKworI2VuZGlmIC8qIF9aQ1JZUFRfUENJQ0FfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyOTVhNDAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYy5jCkBAIC0wLDAgKzEsNjMwIEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmMKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqICBNYWpvciBjbGVhbnVwICYgZHJpdmVyIHNwbGl0OiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgkJCQkgIFJhbHBoIFd1ZXJ0aG5lciA8cnd1ZXJ0aG5AZGUuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJhcF9idXMuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfYXBpLmgiCisjaW5jbHVkZSAiemNyeXB0X2Vycm9yLmgiCisjaW5jbHVkZSAiemNyeXB0X3BjaWNjLmgiCisjaW5jbHVkZSAiemNyeXB0X2NjYV9rZXkuaCIKKworI2RlZmluZSBQQ0lDQ19NSU5fTU9EX1NJWkUJIDY0CS8qICA1MTIgYml0cyAqLworI2RlZmluZSBQQ0lDQ19NQVhfTU9EX1NJWkVfT0xECTEyOAkvKiAxMDI0IGJpdHMgKi8KKyNkZWZpbmUgUENJQ0NfTUFYX01PRF9TSVpFCTI1NgkvKiAyMDQ4IGJpdHMgKi8KKworLyoqCisgKiBQQ0lDQyBjYXJkcyBuZWVkIGEgc3BlZWQgcmF0aW5nIG9mIDAuIFRoaXMga2VlcHMgdGhlbSBhdCB0aGUgZW5kIG9mCisgKiB0aGUgemNyeXB0IGRldmljZSBsaXN0IChzZWUgemNyeXB0X2FwaS5jKS4gUENJQ0MgY2FyZHMgYXJlIG9ubHkKKyAqIHVzZWQgaWYgbm8gb3RoZXIgY2FyZHMgYXJlIHByZXNlbnQgYmVjYXVzZSB0aGV5IGFyZSBzbG93IGFuZCBjYW4gb25seQorICogY29wZSB3aXRoIFBLQ1MxMiBwYWRkZWQgcmVxdWVzdHMuIFRoZSBsb2dpYyBpcyBxdWVlci4gUEtDUzExIHBhZGRlZAorICogcmVxdWVzdHMgYXJlIHJlamVjdGVkLiBUaGUgbW9kZXhwbyBmdW5jdGlvbiBlbmNyeXB0cyBQS0NTMTIgcGFkZGVkIGRhdGEKKyAqIGFuZCBkZWNyeXB0cyBhbnkgbm9uLVBLQ1MxMiBwYWRkZWQgZGF0YSAoZXhjZXB0IFBLQ1MxMSkgaW4gdGhlIGFzc3VtcHRpb24KKyAqIHRoYXQgaXQncyBlbmNyeXB0ZWQgUEtDUzEyIGRhdGEuIFRoZSBtb2RleHBvX2NydCBmdW5jdGlvbiBhbHdheXMgZGVjcnlwdHMKKyAqIHRoZSBkYXRhIGluIHRoZSBhc3N1bXB0aW9uIHRoYXQgaXRzIFBLQ1MxMiBlbmNyeXB0ZWQgZGF0YS4KKyAqLworI2RlZmluZSBQQ0lDQ19TUEVFRF9SQVRJTkcJMAorCisjZGVmaW5lIFBDSUNDX01BWF9NRVNTQUdFX1NJWkUgMHg3MTAJLyogbWF4IHNpemUgdHlwZTYgdjEgY3J0IG1lc3NhZ2UgKi8KKyNkZWZpbmUgUENJQ0NfTUFYX1JFU1BPTlNFX1NJWkUgMHg3MTAJLyogbWF4IHNpemUgdHlwZTg2IHYxIHJlcGx5CSAqLworCisjZGVmaW5lIFBDSUNDX0NMRUFOVVBfVElNRQkoMTUqSFopCisKK3N0YXRpYyBzdHJ1Y3QgYXBfZGV2aWNlX2lkIHpjcnlwdF9wY2ljY19pZHNbXSA9IHsKKwl7IEFQX0RFVklDRShBUF9ERVZJQ0VfVFlQRV9QQ0lDQykgfSwKKwl7IC8qIGVuZCBvZiBsaXN0ICovIH0sCit9OworCisjaWZuZGVmIENPTkZJR19aQ1JZUFRfTU9OT0xJVEhJQworTU9EVUxFX0RFVklDRV9UQUJMRShhcCwgemNyeXB0X3BjaWNjX2lkcyk7CitNT0RVTEVfQVVUSE9SKCJJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENJQ0MgQ3J5cHRvZ3JhcGhpYyBDb3Byb2Nlc3NvciBkZXZpY2UgZHJpdmVyLCAiCisJCSAgICJDb3B5cmlnaHQgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKyNlbmRpZgorCitzdGF0aWMgaW50IHpjcnlwdF9wY2ljY19wcm9iZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOworc3RhdGljIHZvaWQgemNyeXB0X3BjaWNjX3JlbW92ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOworc3RhdGljIHZvaWQgemNyeXB0X3BjaWNjX3JlY2VpdmUoc3RydWN0IGFwX2RldmljZSAqLCBzdHJ1Y3QgYXBfbWVzc2FnZSAqLAorCQkJCSBzdHJ1Y3QgYXBfbWVzc2FnZSAqKTsKKworc3RhdGljIHN0cnVjdCBhcF9kcml2ZXIgemNyeXB0X3BjaWNjX2RyaXZlciA9IHsKKwkucHJvYmUgPSB6Y3J5cHRfcGNpY2NfcHJvYmUsCisJLnJlbW92ZSA9IHpjcnlwdF9wY2ljY19yZW1vdmUsCisJLnJlY2VpdmUgPSB6Y3J5cHRfcGNpY2NfcmVjZWl2ZSwKKwkuaWRzID0gemNyeXB0X3BjaWNjX2lkcywKK307CisKKy8qKgorICogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIENQUkIgcGFzc2VkIHRvIHRoZSBQQ0lDQyBjYXJkCisgKiBpbiBhIHR5cGU2IG1lc3NhZ2UuIFRoZSAzIGZpZWxkcyB0aGF0IG11c3QgYmUgZmlsbGVkIGluIGF0IGV4ZWN1dGlvbgorICogdGltZSBhcmUgIHJlcV9wYXJtbCwgcnBsX3Bhcm1sIGFuZCB1c2FnZV9kb21haW4uIE5vdGUgdGhhdCBhbGwgdGhyZWUKKyAqIGZpZWxkcyBhcmUgKmxpdHRsZSotZW5kaWFuLiBBY3R1YWxseSwgZXZlcnl0aGluZyBhYm91dCB0aGlzIGludGVyZmFjZQorICogaXMgYXNjaWkvbGl0dGxlLWVuZGlhbiwgc2luY2UgdGhlIGRldmljZSBoYXMgJ0ludGVsIGluc2lkZScuCisgKgorICogVGhlIENQUkIgaXMgZm9sbG93ZWQgaW1tZWRpYXRlbHkgYnkgdGhlIHBhcm0gYmxvY2suCisgKiBUaGUgcGFybSBibG9jayBjb250YWluczoKKyAqIC0gZnVuY3Rpb24gY29kZSAoJ1BEJyAweDUwNDQgb3IgJ1BLJyAweDUwNEIpCisgKiAtIHJ1bGUgYmxvY2sgKDB4MEEwMCAnUEtDUy0xLjInIG9yIDB4MEEwMCAnWkVSTy1QQUQnKQorICogLSBWVUQgYmxvY2sKKyAqLworc3RhdGljIHN0cnVjdCBDUFJCIHN0YXRpY19jcHJiID0geworCS5jcHJiX2xlbgk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMDcwKSwKKwkuY3ByYl92ZXJfaWQJPSAgMHg0MSwKKwkuZnVuY19pZAk9IHsweDU0LDB4MzJ9LAorCS5jaGVja3BvaW50X2ZsYWc9ICAweDAxLAorCS5zdnJfbmFtZWwJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDAwOCksCisJLnN2cl9uYW1lCT0geydJJywnQycsJ1MnLCdGJywnICcsJyAnLCcgJywnICd9Cit9OworCisvKioKKyAqIENoZWNrIHRoZSBtZXNzYWdlIGZvciBQS0NTMTEgcGFkZGluZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfUEtDUzExX3BhZGRlZCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgpCit7CisJaW50IGk7CisJaWYgKChidWZmZXJbMF0gIT0gMHgwMCkgfHwgKGJ1ZmZlclsxXSAhPSAweDAxKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMjsgaSA8IGxlbmd0aDsgaSsrKQorCQlpZiAoYnVmZmVyW2ldICE9IDB4RkYpCisJCQlicmVhazsKKwlpZiAoaSA8IDEwIHx8IGkgPT0gbGVuZ3RoKQorCQlyZXR1cm4gMDsKKwlpZiAoYnVmZmVyW2ldICE9IDB4MDApCisJCXJldHVybiAwOworCXJldHVybiAxOworfQorCisvKioKKyAqIENoZWNrIHRoZSBtZXNzYWdlIGZvciBQS0NTMTIgcGFkZGluZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfUEtDUzEyX3BhZGRlZCh1bnNpZ25lZCBjaGFyICpidWZmZXIsIGludCBsZW5ndGgpCit7CisJaW50IGk7CisJaWYgKChidWZmZXJbMF0gIT0gMHgwMCkgfHwgKGJ1ZmZlclsxXSAhPSAweDAyKSkKKwkJcmV0dXJuIDA7CisJZm9yIChpID0gMjsgaSA8IGxlbmd0aDsgaSsrKQorCQlpZiAoYnVmZmVyW2ldID09IDB4MDApCisJCQlicmVhazsKKwlpZiAoKGkgPCAxMCkgfHwgKGkgPT0gbGVuZ3RoKSkKKwkJcmV0dXJuIDA7CisJaWYgKGJ1ZmZlcltpXSAhPSAweDAwKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKworLyoqCisgKiBDb252ZXJ0IGEgSUNBTUVYIG1lc3NhZ2UgdG8gYSB0eXBlNiBNRVggbWVzc2FnZS4KKyAqCisgKiBAemRldjogY3J5cHRvIGRldmljZSBwb2ludGVyCisgKiBAenJlcTogY3J5cHRvIHJlcXVlc3QgcG9pbnRlcgorICogQG1leDogcG9pbnRlciB0byB1c2VyIGlucHV0IGRhdGEKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRUZBVUxULgorICovCitzdGF0aWMgaW50IElDQU1FWF9tc2dfdG9fdHlwZTZNRVhfbXNnKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSAgICAgIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2csCisJCQkJICAgICAgc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqbWV4KQoreworCXN0YXRpYyBzdHJ1Y3QgdHlwZTZfaGRyIHN0YXRpY190eXBlNl9oZHIgPSB7CisJCS50eXBlCQk9ICAweDA2LAorCQkub2Zmc2V0MQk9ICAweDAwMDAwMDU4LAorCQkuYWdlbnRfaWQJPSB7MHgwMSwweDAwLDB4NDMsMHg0MywweDQxLDB4MkQsMHg0MSwweDUwLAorCQkJCSAgIDB4NTAsMHg0QywweDIwLDB4MjAsMHgyMCwweDAxLDB4MDEsMHgwMX0sCisJCS5mdW5jdGlvbl9jb2RlCT0geydQJywnSyd9LAorCX07CisJc3RhdGljIHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2sgc3RhdGljX3BrZV9mdW5jdGlvbl9hbmRfcnVsZXMgPXsKKwkJLmZ1bmN0aW9uX2NvZGUJPSB7J1AnLCdLJ30sCisJCS51bGVuCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTApLAorCQkub25seV9ydWxlCT0geydQJywnSycsJ0MnLCdTJywnLScsJzEnLCcuJywnMid9CisJfTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdHlwZTZfaGRyIGhkcjsKKwkJc3RydWN0IENQUkIgY3ByYjsKKwkJc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayBmcjsKKwkJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworCQljaGFyIHRleHRbMF07CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqbXNnID0gYXBfbXNnLT5tZXNzYWdlOworCWludCB2dWRfbGVuLCBwYWRfbGVuLCBzaXplOworCisJLyogVlVELmNpcGhlcnRleHQgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIobXNnLT50ZXh0LCBtZXgtPmlucHV0ZGF0YSwgbWV4LT5pbnB1dGRhdGFsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChpc19QS0NTMTFfcGFkZGVkKG1zZy0+dGV4dCwgbWV4LT5pbnB1dGRhdGFsZW5ndGgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHN0YXRpYyBtZXNzYWdlIGhlYWRlciBhbmQgZiZyICovCisJbXNnLT5oZHIgPSBzdGF0aWNfdHlwZTZfaGRyOworCW1zZy0+ZnIgPSBzdGF0aWNfcGtlX2Z1bmN0aW9uX2FuZF9ydWxlczsKKworCWlmIChpc19QS0NTMTJfcGFkZGVkKG1zZy0+dGV4dCwgbWV4LT5pbnB1dGRhdGFsZW5ndGgpKSB7CisJCS8qIHN0cmlwIHRoZSBwYWRkaW5nIGFuZCBhZGp1c3QgdGhlIGRhdGEgbGVuZ3RoICovCisJCXBhZF9sZW4gPSBzdHJubGVuKG1zZy0+dGV4dCArIDIsIG1leC0+aW5wdXRkYXRhbGVuZ3RoIC0gMikgKyAzOworCQlpZiAocGFkX2xlbiA8PSA5IHx8IHBhZF9sZW4gPj0gbWV4LT5pbnB1dGRhdGFsZW5ndGgpCisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJdnVkX2xlbiA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoIC0gcGFkX2xlbjsKKwkJbWVtbW92ZShtc2ctPnRleHQsIG1zZy0+dGV4dCArIHBhZF9sZW4sIHZ1ZF9sZW4pOworCQltc2ctPmxlbmd0aCA9IGNwdV90b19sZTE2KHZ1ZF9sZW4gKyAyKTsKKworCQkvKiBTZXQgdXAga2V5IGFmdGVyIHRoZSB2YXJpYWJsZSBsZW5ndGggdGV4dC4gKi8KKwkJc2l6ZSA9IHpjcnlwdF90eXBlNl9tZXhfa2V5X2VuKG1leCwgbXNnLT50ZXh0ICsgdnVkX2xlbiwgMCk7CisJCWlmIChzaXplIDwgMCkKKwkJCXJldHVybiBzaXplOworCQlzaXplICs9IHNpemVvZigqbXNnKSArIHZ1ZF9sZW47CS8qIHRvdGFsIHNpemUgb2YgbXNnICovCisJfSBlbHNlIHsKKwkJdnVkX2xlbiA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoOworCQltc2ctPmxlbmd0aCA9IGNwdV90b19sZTE2KDIgKyB2dWRfbGVuKTsKKworCQltc2ctPmhkci5mdW5jdGlvbl9jb2RlWzFdID0gJ0QnOworCQltc2ctPmZyLmZ1bmN0aW9uX2NvZGVbMV0gPSAnRCc7CisKKwkJLyogU2V0IHVwIGtleSBhZnRlciB0aGUgdmFyaWFibGUgbGVuZ3RoIHRleHQuICovCisJCXNpemUgPSB6Y3J5cHRfdHlwZTZfbWV4X2tleV9kZShtZXgsIG1zZy0+dGV4dCArIHZ1ZF9sZW4sIDApOworCQlpZiAoc2l6ZSA8IDApCisJCQlyZXR1cm4gc2l6ZTsKKwkJc2l6ZSArPSBzaXplb2YoKm1zZykgKyB2dWRfbGVuOwkvKiB0b3RhbCBzaXplIG9mIG1zZyAqLworCX0KKworCS8qIG1lc3NhZ2UgaGVhZGVyLCBjcHJiIGFuZCBmJnIgKi8KKwltc2ctPmhkci5Ub0NhcmRMZW4xID0gKHNpemUgLSBzaXplb2YobXNnLT5oZHIpICsgMykgJiAtNDsKKwltc2ctPmhkci5Gcm9tQ2FyZExlbjEgPSBQQ0lDQ19NQVhfUkVTUE9OU0VfU0laRSAtIHNpemVvZihtc2ctPmhkcik7CisKKwltc2ctPmNwcmIgPSBzdGF0aWNfY3ByYjsKKwltc2ctPmNwcmIudXNhZ2VfZG9tYWluWzBdPSBBUF9RSURfUVVFVUUoemRldi0+YXBfZGV2LT5xaWQpOworCW1zZy0+Y3ByYi5yZXFfcGFybWwgPSBjcHVfdG9fbGUxNihzaXplIC0gc2l6ZW9mKG1zZy0+aGRyKSAtCisJCQkJCSAgIHNpemVvZihtc2ctPmNwcmIpKTsKKwltc2ctPmNwcmIucnBsX3Bhcm1sID0gY3B1X3RvX2xlMTYobXNnLT5oZHIuRnJvbUNhcmRMZW4xKTsKKworCWFwX21zZy0+bGVuZ3RoID0gKHNpemUgKyAzKSAmIC00OworCXJldHVybiAwOworfQorCisvKioKKyAqIENvbnZlcnQgYSBJQ0FDUlQgbWVzc2FnZSB0byBhIHR5cGU2IENSVCBtZXNzYWdlLgorICoKKyAqIEB6ZGV2OiBjcnlwdG8gZGV2aWNlIHBvaW50ZXIKKyAqIEB6cmVxOiBjcnlwdG8gcmVxdWVzdCBwb2ludGVyCisgKiBAY3J0OiBwb2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FRkFVTFQuCisgKi8KK3N0YXRpYyBpbnQgSUNBQ1JUX21zZ190b190eXBlNkNSVF9tc2coc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkJICAgICAgc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZywKKwkJCQkgICAgICBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCAqY3J0KQoreworCXN0YXRpYyBzdHJ1Y3QgdHlwZTZfaGRyIHN0YXRpY190eXBlNl9oZHIgPSB7CisJCS50eXBlCQk9ICAweDA2LAorCQkub2Zmc2V0MQk9ICAweDAwMDAwMDU4LAorCQkuYWdlbnRfaWQJPSB7MHgwMSwweDAwLDB4NDMsMHg0MywweDQxLDB4MkQsMHg0MSwweDUwLAorCQkJCSAgIDB4NTAsMHg0QywweDIwLDB4MjAsMHgyMCwweDAxLDB4MDEsMHgwMX0sCisJCS5mdW5jdGlvbl9jb2RlCT0geydQJywnRCd9LAorCX07CisJc3RhdGljIHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2sgc3RhdGljX3BrZF9mdW5jdGlvbl9hbmRfcnVsZXMgPXsKKwkJLmZ1bmN0aW9uX2NvZGUJPSB7J1AnLCdEJ30sCisJCS51bGVuCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMTApLAorCQkub25seV9ydWxlCT0geydQJywnSycsJ0MnLCdTJywnLScsJzEnLCcuJywnMid9CisJfTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdHlwZTZfaGRyIGhkcjsKKwkJc3RydWN0IENQUkIgY3ByYjsKKwkJc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayBmcjsKKwkJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworCQljaGFyIHRleHRbMF07CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqbXNnID0gYXBfbXNnLT5tZXNzYWdlOworCWludCBzaXplOworCisJLyogVlVELmNpcGhlcnRleHQgKi8KKwltc2ctPmxlbmd0aCA9IGNwdV90b19sZTE2KDIgKyBjcnQtPmlucHV0ZGF0YWxlbmd0aCk7CisJaWYgKGNvcHlfZnJvbV91c2VyKG1zZy0+dGV4dCwgY3J0LT5pbnB1dGRhdGEsIGNydC0+aW5wdXRkYXRhbGVuZ3RoKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoaXNfUEtDUzExX3BhZGRlZChtc2ctPnRleHQsIGNydC0+aW5wdXRkYXRhbGVuZ3RoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBTZXQgdXAga2V5IGFmdGVyIHRoZSB2YXJpYWJsZSBsZW5ndGggdGV4dC4gKi8KKwlzaXplID0gemNyeXB0X3R5cGU2X2NydF9rZXkoY3J0LCBtc2ctPnRleHQgKyBjcnQtPmlucHV0ZGF0YWxlbmd0aCwgMCk7CisJaWYgKHNpemUgPCAwKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplICs9IHNpemVvZigqbXNnKSArIGNydC0+aW5wdXRkYXRhbGVuZ3RoOwkvKiB0b3RhbCBzaXplIG9mIG1zZyAqLworCisJLyogbWVzc2FnZSBoZWFkZXIsIGNwcmIgYW5kIGYmciAqLworCW1zZy0+aGRyID0gc3RhdGljX3R5cGU2X2hkcjsKKwltc2ctPmhkci5Ub0NhcmRMZW4xID0gKHNpemUgLSAgc2l6ZW9mKG1zZy0+aGRyKSArIDMpICYgLTQ7CisJbXNnLT5oZHIuRnJvbUNhcmRMZW4xID0gUENJQ0NfTUFYX1JFU1BPTlNFX1NJWkUgLSBzaXplb2YobXNnLT5oZHIpOworCisJbXNnLT5jcHJiID0gc3RhdGljX2NwcmI7CisJbXNnLT5jcHJiLnVzYWdlX2RvbWFpblswXSA9IEFQX1FJRF9RVUVVRSh6ZGV2LT5hcF9kZXYtPnFpZCk7CisJbXNnLT5jcHJiLnJlcV9wYXJtbCA9IG1zZy0+Y3ByYi5ycGxfcGFybWwgPQorCQljcHVfdG9fbGUxNihzaXplIC0gc2l6ZW9mKG1zZy0+aGRyKSAtIHNpemVvZihtc2ctPmNwcmIpKTsKKworCW1zZy0+ZnIgPSBzdGF0aWNfcGtkX2Z1bmN0aW9uX2FuZF9ydWxlczsKKworCWFwX21zZy0+bGVuZ3RoID0gKHNpemUgKyAzKSAmIC00OworCXJldHVybiAwOworfQorCisvKioKKyAqIENvcHkgcmVzdWx0cyBmcm9tIGEgdHlwZSA4NiByZXBseSBtZXNzYWdlIGJhY2sgdG8gdXNlciBzcGFjZS4KKyAqCisgKiBAemRldjogY3J5cHRvIGRldmljZSBwb2ludGVyCisgKiBAcmVwbHk6IHJlcGx5IEFQIG1lc3NhZ2UuCisgKiBAZGF0YTogcG9pbnRlciB0byB1c2VyIG91dHB1dCBkYXRhCisgKiBAbGVuZ3RoOiBzaXplIG9mIHVzZXIgb3V0cHV0IGRhdGEKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRUlOVkFMLCAtRUZBVUxULCAtRUFHQUlOIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgKi8KK3N0cnVjdCB0eXBlODZfcmVwbHkgeworCXN0cnVjdCB0eXBlODZfaGRyIGhkcjsKKwlzdHJ1Y3QgdHlwZTg2X2ZtdDJfZXh0IGZtdDI7CisJc3RydWN0IENQUkIgY3ByYjsKKwl1bnNpZ25lZCBjaGFyIHBhZFs0XTsJLyogNCBieXRlIGZ1bmN0aW9uIGNvZGUvcnVsZXMgYmxvY2sgPyAqLworCXVuc2lnbmVkIHNob3J0IGxlbmd0aDsKKwljaGFyIHRleHRbMF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IGNvbnZlcnRfdHlwZTg2KHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJICBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHksCisJCQkgIGNoYXIgX191c2VyICpvdXRwdXRkYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgb3V0cHV0ZGF0YWxlbmd0aCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBzdGF0aWNfcGFkW10gPSB7CisJCTB4MDAsMHgwMiwKKwkJMHgxQiwweDdCLDB4NUQsMHhCNSwweDc1LDB4MDEsMHgzRCwweEZELAorCQkweDhELDB4RDEsMHhDNywweDAzLDB4MkQsMHgwOSwweDIzLDB4NTcsCisJCTB4ODksMHg0OSwweEI5LDB4M0YsMHhCQiwweDk5LDB4NDEsMHg1QiwKKwkJMHg3NSwweDIxLDB4N0IsMHg5RCwweDNCLDB4NkIsMHg1MSwweDM5LAorCQkweEJCLDB4MEQsMHgzNSwweEI5LDB4ODksMHgwRiwweDkzLDB4QTUsCisJCTB4MEIsMHg0NywweEYxLDB4RDMsMHhCQiwweENCLDB4RjEsMHg5RCwKKwkJMHgyMywweDczLDB4NzEsMHhGRiwweEYzLDB4RjUsMHg0NSwweEZCLAorCQkweDYxLDB4MjksMHgyMywweEZELDB4RjEsMHgyOSwweDNGLDB4N0YsCisJCTB4MTcsMHhCNywweDFCLDB4QTksMHgxOSwweEJELDB4NTcsMHhBOSwKKwkJMHhENywweDk1LDB4QTMsMHhDQiwweEVELDB4MUQsMHhEQiwweDQ1LAorCQkweDdELDB4MTEsMHhEMSwweDUxLDB4MUIsMHhFRCwweDcxLDB4RTksCisJCTB4QjEsMHhEMSwweEFCLDB4QUIsMHgyMSwweDJCLDB4MUIsMHg5RiwKKwkJMHgzQiwweDlGLDB4RjcsMHhGNywweEJELDB4NjMsMHhFQiwweEFELAorCQkweERGLDB4QjMsMHg2RiwweDVCLDB4REIsMHg4RCwweEE5LDB4NUQsCisJCTB4RTMsMHg3RCwweDc3LDB4NDksMHg0NywweEY1LDB4QTcsMHhGRCwKKwkJMHhBQiwweDJGLDB4MjcsMHgzNSwweDc3LDB4RDMsMHg0OSwweEM5LAorCQkweDA5LDB4RUIsMHhCMSwweEY5LDB4QkYsMHg0QiwweENCLDB4MkIsCisJCTB4RUIsMHhFQiwweDA1LDB4RkYsMHg3RCwweEM3LDB4OTEsMHg4QiwKKwkJMHgwOSwweDgzLDB4QjksMHhCOSwweDY5LDB4MzMsMHgzOSwweDZCLAorCQkweDc5LDB4NzUsMHgxOSwweEJGLDB4QkIsMHgwNywweDFELDB4QkQsCisJCTB4MjksMHhCRiwweDM5LDB4OTUsMHg5MywweDFELDB4MzUsMHhDNywKKwkJMHhDOSwweDRELDB4RTUsMHg5NywweDBCLDB4NDMsMHg5QiwweEYxLAorCQkweDE2LDB4OTMsMHgwMywweDFGLDB4QTUsMHhGQiwweERCLDB4RjMsCisJCTB4MjcsMHg0RiwweDI3LDB4NjEsMHgwNSwweDFGLDB4QjksMHgyMywKKwkJMHgyRiwweEMzLDB4ODEsMHhBOSwweDIzLDB4NzEsMHg1NSwweDU1LAorCQkweEVCLDB4RUQsMHg0MSwweEU1LDB4RjMsMHgxMSwweEYxLDB4NDMsCisJCTB4NjksMHgwMywweEJELDB4MEIsMHgzNywweDBGLDB4NTEsMHg4RiwKKwkJMHgwQiwweEI1LDB4ODksMHg1QiwweDY3LDB4QTksMHhEOSwweDRGLAorCQkweDAxLDB4RjksMHgyMSwweDc3LDB4MzcsMHg3MywweDc5LDB4QzUsCisJCTB4N0YsMHg1MSwweEMxLDB4Q0YsMHg5NywweEExLDB4NzUsMHhBRCwKKwkJMHgzNSwweDlELDB4RDMsMHhEMywweEE3LDB4OUQsMHg1RCwweDQxLAorCQkweDZGLDB4NjUsMHgxQiwweENGLDB4QTksMHg4NywweDkxLDB4MDkKKwl9OworCXN0cnVjdCB0eXBlODZfcmVwbHkgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCXVuc2lnbmVkIHNob3J0IHNlcnZpY2VfcmMsIHNlcnZpY2VfcnM7CisJdW5zaWduZWQgaW50IHJlcGx5X2xlbiwgcGFkX2xlbjsKKwljaGFyICpkYXRhOworCisJc2VydmljZV9yYyA9IGxlMTZfdG9fY3B1KG1zZy0+Y3ByYi5jY3BfcnRjb2RlKTsKKwlpZiAodW5saWtlbHkoc2VydmljZV9yYyAhPSAwKSkgeworCQlzZXJ2aWNlX3JzID0gbGUxNl90b19jcHUobXNnLT5jcHJiLmNjcF9yc2NvZGUpOworCQlpZiAoc2VydmljZV9yYyA9PSA4ICYmIHNlcnZpY2VfcnMgPT0gNjYpIHsKKwkJCVBERUJVRygiQmFkIGJsb2NrIGZvcm1hdCBvbiBQQ0lDQ1xuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoc2VydmljZV9yYyA9PSA4ICYmIHNlcnZpY2VfcnMgPT0gNjUpIHsKKwkJCVBERUJVRygiUHJvYmFibHkgYW4gZXZlbiBtb2R1bHVzIG9uIFBDSUNDXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChzZXJ2aWNlX3JjID09IDggJiYgc2VydmljZV9ycyA9PSA3NzApIHsKKwkJCVBERUJVRygiSW52YWxpZCBrZXkgbGVuZ3RoIG9uIFBDSUNDXG4iKTsKKwkJCXpkZXYtPm1heF9tb2Rfc2l6ZSA9IFBDSUNDX01BWF9NT0RfU0laRV9PTEQ7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfQorCQlpZiAoc2VydmljZV9yYyA9PSA4ICYmIHNlcnZpY2VfcnMgPT0gNzgzKSB7CisJCQlQREVCVUcoIkV4dGVuZGVkIGJpdGxlbmd0aHMgbm90IGVuYWJsZWQgb24gUENJQ0NcbiIpOworCQkJemRldi0+bWF4X21vZF9zaXplID0gUENJQ0NfTUFYX01PRF9TSVpFX09MRDsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCVBSSU5USygiVW5rbm93biBzZXJ2aWNlIHJjL3JzIChQQ0lDQyk6ICVkLyVkXG4iLAorCQkgICAgICAgc2VydmljZV9yYywgc2VydmljZV9ycyk7CisJCXpkZXYtPm9ubGluZSA9IDA7CisJCXJldHVybiAtRUFHQUlOOwkvKiByZXBlYXQgdGhlIHJlcXVlc3Qgb24gYSBkaWZmZXJlbnQgZGV2aWNlLiAqLworCX0KKwlkYXRhID0gbXNnLT50ZXh0OworCXJlcGx5X2xlbiA9IGxlMTZfdG9fY3B1KG1zZy0+bGVuZ3RoKSAtIDI7CisJaWYgKHJlcGx5X2xlbiA+IG91dHB1dGRhdGFsZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCS8qKgorCSAqIEZvciBhbGwgZW5jaXBoZXIgcmVxdWVzdHMsIHRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKHJlcGx5X2xlbikKKwkgKiB3aWxsIGFsd2F5cyBlcXVhbCB0aGUgbW9kdWx1cyBsZW5ndGguIEZvciBNRVggZGVjaXBoZXIgcmVxdWVzdHMKKwkgKiB0aGUgb3V0cHV0IG5lZWRzIHRvIGdldCBwYWRkZWQuIE1pbmltdW0gcGFkIHNpemUgaXMgMTAuCisJICoKKwkgKiBDdXJyZW50bHksIHRoZSBjYXNlcyB3aGVyZSBwYWRkaW5nIHdpbGwgYmUgYWRkZWQgaXMgZm9yOgorCSAqIC0gUENJWENDX01DTDIgdXNpbmcgYSBDUlQgZm9ybSB0b2tlbiAoc2luY2UgUEtEIGRpZG4ndCBzdXBwb3J0CisJICogICBaRVJPLVBBRCBhbmQgQ1JUIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBQS0QgcmVxdWVzdHMpCisJICogLSBQQ0lDQywgYWx3YXlzCisJICovCisJcGFkX2xlbiA9IG91dHB1dGRhdGFsZW5ndGggLSByZXBseV9sZW47CisJaWYgKHBhZF9sZW4gPiAwKSB7CisJCWlmIChwYWRfbGVuIDwgMTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogJ3Jlc3RvcmUnIHBhZGRpbmcgbGVmdCBpbiB0aGUgUENJQ0MvUENJWENDIGNhcmQuICovCisJCWlmIChjb3B5X3RvX3VzZXIob3V0cHV0ZGF0YSwgc3RhdGljX3BhZCwgcGFkX2xlbiAtIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcigwLCBvdXRwdXRkYXRhICsgcGFkX2xlbiAtIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIENvcHkgdGhlIGNyeXB0byByZXNwb25zZSB0byB1c2VyIHNwYWNlLiAqLworCWlmIChjb3B5X3RvX3VzZXIob3V0cHV0ZGF0YSArIHBhZF9sZW4sIGRhdGEsIHJlcGx5X2xlbikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbnZlcnRfcmVzcG9uc2Uoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkgICAgc3RydWN0IGFwX21lc3NhZ2UgKnJlcGx5LAorCQkJICAgIGNoYXIgX191c2VyICpvdXRwdXRkYXRhLAorCQkJICAgIHVuc2lnbmVkIGludCBvdXRwdXRkYXRhbGVuZ3RoKQoreworCXN0cnVjdCB0eXBlODZfcmVwbHkgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCisJLyogUmVzcG9uc2UgdHlwZSBieXRlIGlzIHRoZSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmVzcG9uc2UuICovCisJc3dpdGNoIChtc2ctPmhkci50eXBlKSB7CisJY2FzZSBUWVBFODJfUlNQX0NPREU6CisJY2FzZSBUWVBFODhfUlNQX0NPREU6CisJCXJldHVybiBjb252ZXJ0X2Vycm9yKHpkZXYsIHJlcGx5KTsKKwljYXNlIFRZUEU4Nl9SU1BfQ09ERToKKwkJaWYgKG1zZy0+aGRyLnJlcGx5X2NvZGUpCisJCQlyZXR1cm4gY29udmVydF9lcnJvcih6ZGV2LCByZXBseSk7CisJCWlmIChtc2ctPmNwcmIuY3ByYl92ZXJfaWQgPT0gMHgwMSkKKwkJCXJldHVybiBjb252ZXJ0X3R5cGU4Nih6ZGV2LCByZXBseSwKKwkJCQkJICAgICAgb3V0cHV0ZGF0YSwgb3V0cHV0ZGF0YWxlbmd0aCk7CisJCS8qIG5vIGJyZWFrLCBpbmNvcnJlY3QgY3ByYiB2ZXJzaW9uIGlzIGFuIHVua25vd24gcmVzcG9uc2UgKi8KKwlkZWZhdWx0OiAvKiBVbmtub3duIHJlc3BvbnNlIHR5cGUsIHRoaXMgc2hvdWxkIE5FVkVSIEVWRVIgaGFwcGVuICovCisJCVBSSU5USygiVW5yZWNvZ25pemVkIE1lc3NhZ2UgSGVhZGVyOiAlMDh4JTA4eFxuIiwKKwkJICAgICAgICoodW5zaWduZWQgaW50ICopIHJlcGx5LT5tZXNzYWdlLAorCQkgICAgICAgKih1bnNpZ25lZCBpbnQgKikgKHJlcGx5LT5tZXNzYWdlKzQpKTsKKwkJemRldi0+b25saW5lID0gMDsKKwkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCisJfQorfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIEFQIGJ1cyBjb2RlIGFmdGVyIGEgY3J5cHRvIHJlcXVlc3QKKyAqICJtc2ciIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSByZXBseSBtZXNzYWdlICJyZXBseSIuCisgKiBJdCBpcyBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQuCisgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UKKyAqIEBtc2c6IHBvaW50ZXIgdG8gdGhlIEFQIG1lc3NhZ2UKKyAqIEByZXBseTogcG9pbnRlciB0byB0aGUgQVAgcmVwbHkgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCB6Y3J5cHRfcGNpY2NfcmVjZWl2ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYsCisJCQkJIHN0cnVjdCBhcF9tZXNzYWdlICptc2csCisJCQkJIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSkKK3sKKwlzdGF0aWMgc3RydWN0IGVycm9yX2hkciBlcnJvcl9yZXBseSA9IHsKKwkJLnR5cGUgPSBUWVBFODJfUlNQX0NPREUsCisJCS5yZXBseV9jb2RlID0gUkVQODJfRVJST1JfTUFDSElORV9GQUlMVVJFLAorCX07CisJc3RydWN0IHR5cGU4Nl9yZXBseSAqdDg2ciA9IHJlcGx5LT5tZXNzYWdlOworCWludCBsZW5ndGg7CisKKwkvKiBDb3B5IHRoZSByZXBseSBtZXNzYWdlIHRvIHRoZSByZXF1ZXN0IG1lc3NhZ2UgYnVmZmVyLiAqLworCWlmIChJU19FUlIocmVwbHkpKQorCQltZW1jcHkobXNnLT5tZXNzYWdlLCAmZXJyb3JfcmVwbHksIHNpemVvZihlcnJvcl9yZXBseSkpOworCWVsc2UgaWYgKHQ4NnItPmhkci50eXBlID09IFRZUEU4Nl9SU1BfQ09ERSAmJgorCQkgdDg2ci0+Y3ByYi5jcHJiX3Zlcl9pZCA9PSAweDAxKSB7CisJCWxlbmd0aCA9IHNpemVvZihzdHJ1Y3QgdHlwZTg2X3JlcGx5KSArIHQ4NnItPmxlbmd0aCAtIDI7CisJCWxlbmd0aCA9IG1pbihQQ0lDQ19NQVhfUkVTUE9OU0VfU0laRSwgbGVuZ3RoKTsKKwkJbWVtY3B5KG1zZy0+bWVzc2FnZSwgcmVwbHktPm1lc3NhZ2UsIGxlbmd0aCk7CisJfSBlbHNlCisJCW1lbWNweShtc2ctPm1lc3NhZ2UsIHJlcGx5LT5tZXNzYWdlLCBzaXplb2YgZXJyb3JfcmVwbHkpOworCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKSBtc2ctPnByaXZhdGUpOworfQorCitzdGF0aWMgYXRvbWljX3QgemNyeXB0X3N0ZXAgPSBBVE9NSUNfSU5JVCgwKTsKKworLyoqCisgKiBUaGUgcmVxdWVzdCBkaXN0cmlidXRvciBjYWxscyB0aGlzIGZ1bmN0aW9uIGlmIGl0IHBpY2tlZCB0aGUgUENJQ0MKKyAqIGRldmljZSB0byBoYW5kbGUgYSBtb2RleHBvIHJlcXVlc3QuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIFBDSUNDIGRldmljZSB0byB0aGUgcmVxdWVzdCBkaXN0cmlidXRvcgorICogQG1leDogcG9pbnRlciB0byB0aGUgbW9kZXhwbyByZXF1ZXN0IGJ1ZmZlcgorICovCitzdGF0aWMgbG9uZyB6Y3J5cHRfcGNpY2NfbW9kZXhwbyhzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqbWV4KQoreworCXN0cnVjdCBhcF9tZXNzYWdlIGFwX21zZzsKKwlzdHJ1Y3QgY29tcGxldGlvbiB3b3JrOworCWludCByYzsKKworCWFwX21zZy5tZXNzYWdlID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYXBfbXNnLm1lc3NhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWFwX21zZy5sZW5ndGggPSBQQUdFX1NJWkU7CisJYXBfbXNnLnBzbWlkID0gKCgodW5zaWduZWQgbG9uZyBsb25nKSBjdXJyZW50LT5waWQpIDw8IDMyKSArCisJCQkJYXRvbWljX2luY19yZXR1cm4oJnpjcnlwdF9zdGVwKTsKKwlhcF9tc2cucHJpdmF0ZSA9ICZ3b3JrOworCXJjID0gSUNBTUVYX21zZ190b190eXBlNk1FWF9tc2coemRldiwgJmFwX21zZywgbWV4KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisJaW5pdF9jb21wbGV0aW9uKCZ3b3JrKTsKKwlhcF9xdWV1ZV9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJcmMgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCQkmd29yaywgUENJQ0NfQ0xFQU5VUF9USU1FKTsKKwlpZiAocmMgPiAwKQorCQlyYyA9IGNvbnZlcnRfcmVzcG9uc2UoemRldiwgJmFwX21zZywgbWV4LT5vdXRwdXRkYXRhLAorCQkJCSAgICAgIG1leC0+b3V0cHV0ZGF0YWxlbmd0aCk7CisJZWxzZSB7CisJCS8qIFNpZ25hbCBwZW5kaW5nIG9yIG1lc3NhZ2UgdGltZWQgb3V0LiAqLworCQlhcF9jYW5jZWxfbWVzc2FnZSh6ZGV2LT5hcF9kZXYsICZhcF9tc2cpOworCQlpZiAocmMgPT0gMCkKKwkJCS8qIE1lc3NhZ2UgdGltZWQgb3V0LiAqLworCQkJcmMgPSAtRVRJTUU7CisJfQorb3V0X2ZyZWU6CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBhcF9tc2cubWVzc2FnZSk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yIGNhbGxzIHRoaXMgZnVuY3Rpb24gaWYgaXQgcGlja2VkIHRoZSBQQ0lDQworICogZGV2aWNlIHRvIGhhbmRsZSBhIG1vZGV4cG9fY3J0IHJlcXVlc3QuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIFBDSUNDIGRldmljZSB0byB0aGUgcmVxdWVzdCBkaXN0cmlidXRvcgorICogQGNydDogcG9pbnRlciB0byB0aGUgbW9kZXhwb2NfY3J0IHJlcXVlc3QgYnVmZmVyCisgKi8KK3N0YXRpYyBsb25nIHpjcnlwdF9wY2ljY19tb2RleHBvX2NydChzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgICAgIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQpCit7CisJc3RydWN0IGFwX21lc3NhZ2UgYXBfbXNnOworCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CisJaW50IHJjOworCisJYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFhcF9tc2cubWVzc2FnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYXBfbXNnLmxlbmd0aCA9IFBBR0VfU0laRTsKKwlhcF9tc2cucHNtaWQgPSAoKCh1bnNpZ25lZCBsb25nIGxvbmcpIGN1cnJlbnQtPnBpZCkgPDwgMzIpICsKKwkJCQlhdG9taWNfaW5jX3JldHVybigmemNyeXB0X3N0ZXApOworCWFwX21zZy5wcml2YXRlID0gJndvcms7CisJcmMgPSBJQ0FDUlRfbXNnX3RvX3R5cGU2Q1JUX21zZyh6ZGV2LCAmYXBfbXNnLCBjcnQpOworCWlmIChyYykKKwkJZ290byBvdXRfZnJlZTsKKwlpbml0X2NvbXBsZXRpb24oJndvcmspOworCWFwX3F1ZXVlX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCSZ3b3JrLCBQQ0lDQ19DTEVBTlVQX1RJTUUpOworCWlmIChyYyA+IDApCisJCXJjID0gY29udmVydF9yZXNwb25zZSh6ZGV2LCAmYXBfbXNnLCBjcnQtPm91dHB1dGRhdGEsCisJCQkJICAgICAgY3J0LT5vdXRwdXRkYXRhbGVuZ3RoKTsKKwllbHNlIHsKKwkJLyogU2lnbmFsIHBlbmRpbmcgb3IgbWVzc2FnZSB0aW1lZCBvdXQuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJCWlmIChyYyA9PSAwKQorCQkJLyogTWVzc2FnZSB0aW1lZCBvdXQuICovCisJCQlyYyA9IC1FVElNRTsKKwl9CitvdXRfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGFwX21zZy5tZXNzYWdlKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhlIGNyeXB0byBvcGVyYXRpb25zIGZvciBhIFBDSUNDIGNhcmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgemNyeXB0X29wcyB6Y3J5cHRfcGNpY2Nfb3BzID0geworCS5yc2FfbW9kZXhwbyA9IHpjcnlwdF9wY2ljY19tb2RleHBvLAorCS5yc2FfbW9kZXhwb19jcnQgPSB6Y3J5cHRfcGNpY2NfbW9kZXhwb19jcnQsCit9OworCisvKioKKyAqIFByb2JlIGZ1bmN0aW9uIGZvciBQQ0lDQyBjYXJkcy4gSXQgYWx3YXlzIGFjY2VwdHMgdGhlIEFQIGRldmljZQorICogc2luY2UgdGhlIGJ1c19tYXRjaCBhbHJlYWR5IGNoZWNrZWQgdGhlIGhhcmR3YXJlIHR5cGUuCisgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgemNyeXB0X3BjaWNjX3Byb2JlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKK3sKKwlzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldjsKKwlpbnQgcmM7CisKKwl6ZGV2ID0gemNyeXB0X2RldmljZV9hbGxvYyhQQ0lDQ19NQVhfUkVTUE9OU0VfU0laRSk7CisJaWYgKCF6ZGV2KQorCQlyZXR1cm4gLUVOT01FTTsKKwl6ZGV2LT5hcF9kZXYgPSBhcF9kZXY7CisJemRldi0+b3BzID0gJnpjcnlwdF9wY2ljY19vcHM7CisJemRldi0+b25saW5lID0gMTsKKwl6ZGV2LT51c2VyX3NwYWNlX3R5cGUgPSBaQ1JZUFRfUENJQ0M7CisJemRldi0+dHlwZV9zdHJpbmcgPSAiUENJQ0MiOworCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IFBDSUNDX01JTl9NT0RfU0laRTsKKwl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lDQ19NQVhfTU9EX1NJWkU7CisJemRldi0+c3BlZWRfcmF0aW5nID0gUENJQ0NfU1BFRURfUkFUSU5HOworCWFwX2Rldi0+cmVwbHkgPSAmemRldi0+cmVwbHk7CisJYXBfZGV2LT5wcml2YXRlID0gemRldjsKKwlyYyA9IHpjcnlwdF9kZXZpY2VfcmVnaXN0ZXIoemRldik7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOworCXJldHVybiAwOworCisgb3V0X2ZyZWU6CisJYXBfZGV2LT5wcml2YXRlID0gTlVMTDsKKwl6Y3J5cHRfZGV2aWNlX2ZyZWUoemRldik7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIFRoaXMgaXMgY2FsbGVkIHRvIHJlbW92ZSB0aGUgZXh0ZW5kZWQgUENJQ0MgZHJpdmVyIGluZm9ybWF0aW9uCisgKiBpZiBhbiBBUCBkZXZpY2UgaXMgcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQgemNyeXB0X3BjaWNjX3JlbW92ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYgPSBhcF9kZXYtPnByaXZhdGU7CisKKwl6Y3J5cHRfZGV2aWNlX3VucmVnaXN0ZXIoemRldik7Cit9CisKK2ludCBfX2luaXQgemNyeXB0X3BjaWNjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gYXBfZHJpdmVyX3JlZ2lzdGVyKCZ6Y3J5cHRfcGNpY2NfZHJpdmVyLCBUSElTX01PRFVMRSwgInBjaWNjIik7Cit9CisKK3ZvaWQgemNyeXB0X3BjaWNjX2V4aXQodm9pZCkKK3sKKwlhcF9kcml2ZXJfdW5yZWdpc3RlcigmemNyeXB0X3BjaWNjX2RyaXZlcik7Cit9CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCittb2R1bGVfaW5pdCh6Y3J5cHRfcGNpY2NfaW5pdCk7Cittb2R1bGVfZXhpdCh6Y3J5cHRfcGNpY2NfZXhpdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkNDQ1NDgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2ljYy5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvczM5MC9jcnlwdG8vemNyeXB0X3BjaWNjLmgKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqICBNYWpvciBjbGVhbnVwICYgZHJpdmVyIHNwbGl0OiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9aQ1JZUFRfUENJQ0NfSF8KKyNkZWZpbmUgX1pDUllQVF9QQ0lDQ19IXworCisvKioKKyAqIFRoZSB0eXBlIDYgbWVzc2FnZSBmYW1pbHkgaXMgYXNzb2NpYXRlZCB3aXRoIFBDSUNDIG9yIFBDSVhDQyBjYXJkcy4KKyAqCisgKiBJdCBjb250YWlucyBhIG1lc3NhZ2UgaGVhZGVyIGZvbGxvd2VkIGJ5IGEgQ1BSQiwgYm90aCBvZiB3aGljaAorICogYXJlIGRlc2NyaWJlZCBiZWxvdy4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm9lcy4KKyAqLworc3RydWN0IHR5cGU2X2hkciB7CisJdW5zaWduZWQgY2hhciByZXNlcnZlZDE7CS8qIDB4MDAJCQkJKi8KKwl1bnNpZ25lZCBjaGFyIHR5cGU7CQkvKiAweDA2CQkJCSovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZDJbMl07CS8qIDB4MDAwMAkJCSovCisJdW5zaWduZWQgY2hhciByaWdodFs0XTsJCS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQzWzJdOwkvKiAweDAwMDAJCQkqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQ0WzJdOwkvKiAweDAwMDAJCQkqLworCXVuc2lnbmVkIGNoYXIgYXBmc1s0XTsJCS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGludCAgb2Zmc2V0MTsJCS8qIDB4MDAwMDAwNTggKG9mZnNldCB0byBDUFJCKQkqLworCXVuc2lnbmVkIGludCAgb2Zmc2V0MjsJCS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGludCAgb2Zmc2V0MzsJCS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGludCAgb2Zmc2V0NDsJCS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGNoYXIgYWdlbnRfaWRbMTZdOwkvKiBQQ0lDQzoJCQkqLworCQkJCQkvKiAgICAweDAxMDAJCQkqLworCQkJCQkvKiAgICAweDQzNDM0MTJkNDE1MDUwNGMyMDIwMjAJKi8KKwkJCQkJLyogICAgMHgwMTAxMDEJCQkqLworCQkJCQkvKiBQQ0lYQ0M6CQkJKi8KKwkJCQkJLyogICAgMHg0MzQxMDAwMDAwMDAwMDAwCSovCisJCQkJCS8qICAgIDB4MDAwMDAwMDAwMDAwMDAwMAkqLworCXVuc2lnbmVkIGNoYXIgcnFpZFsyXTsJCS8qIHJxaWQuICBpbnRlcm5hbCB0byA2MDMJKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkNVsyXTsJLyogMHgwMDAwCQkJKi8KKwl1bnNpZ25lZCBjaGFyIGZ1bmN0aW9uX2NvZGVbMl07CS8qIGZvciBQS0QsIDB4NTA0NCAoYXNjaWkgJ1BEJykJKi8KKwl1bnNpZ25lZCBjaGFyIHJlc2VydmVkNlsyXTsJLyogMHgwMDAwCQkJKi8KKwl1bnNpZ25lZCBpbnQgIFRvQ2FyZExlbjE7CS8qIChyZXF1ZXN0IENQUkIgbGVuICsgMykgJiAtNAkqLworCXVuc2lnbmVkIGludCAgVG9DYXJkTGVuMjsJLyogZGIgbGVuIDB4MDAwMDAwMDAgZm9yIFBLRAkqLworCXVuc2lnbmVkIGludCAgVG9DYXJkTGVuMzsJLyogMHgwMDAwMDAwMAkJCSovCisJdW5zaWduZWQgaW50ICBUb0NhcmRMZW40OwkvKiAweDAwMDAwMDAwCQkJKi8KKwl1bnNpZ25lZCBpbnQgIEZyb21DYXJkTGVuMTsJLyogcmVzcG9uc2UgYnVmZmVyIGxlbmd0aAkqLworCXVuc2lnbmVkIGludCAgRnJvbUNhcmRMZW4yOwkvKiBkYiBsZW4gMHgwMDAwMDAwMCBmb3IgUEtECSovCisJdW5zaWduZWQgaW50ICBGcm9tQ2FyZExlbjM7CS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGludCAgRnJvbUNhcmRMZW40OwkvKiAweDAwMDAwMDAwCQkJKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKy8qKgorICogQ1BSQgorICoJICBOb3RlIHRoYXQgYWxsIHNob3J0cywgaW50cyBhbmQgbG9uZ3MgYXJlIGxpdHRsZS1lbmRpYW4uCisgKgkgIEFsbCBwb2ludGVyIGZpZWxkcyBhcmUgMzItYml0cyBsb25nLCBhbmQgbWVhbiBub3RoaW5nCisgKgorICoJICBBIHJlcXVlc3QgQ1BSQiBpcyBmb2xsb3dlZCBieSBhIHJlcXVlc3RfcGFyYW1ldGVyX2Jsb2NrLgorICoKKyAqCSAgVGhlIHJlcXVlc3QgKG9yIHJlcGx5KSBwYXJhbWV0ZXIgYmxvY2sgaXMgb3JnYW5pemVkIHRodXM6CisgKgkgICAgZnVuY3Rpb24gY29kZQorICoJICAgIFZVRCBibG9jaworICoJICAgIGtleSBibG9jaworICovCitzdHJ1Y3QgQ1BSQiB7CisJdW5zaWduZWQgc2hvcnQgY3ByYl9sZW47CS8qIENQUkIgbGVuZ3RoCQkJICovCisJdW5zaWduZWQgY2hhciBjcHJiX3Zlcl9pZDsJLyogQ1BSQiB2ZXJzaW9uIGlkLgkJICovCisJdW5zaWduZWQgY2hhciBwYWRfMDAwOwkJLyogQWxpZ25tZW50IHBhZCBieXRlLgkJICovCisJdW5zaWduZWQgY2hhciBzcnBpX3J0Y29kZVs0XTsJLyogU1JQSSByZXR1cm4gY29kZSBMRUxPTkcJICovCisJdW5zaWduZWQgY2hhciBzcnBpX3ZlcmI7CS8qIFNSUEkgdmVyYiB0eXBlCQkgKi8KKwl1bnNpZ25lZCBjaGFyIGZsYWdzOwkJLyogZmxhZ3MJCQkgKi8KKwl1bnNpZ25lZCBjaGFyIGZ1bmNfaWRbMl07CS8qIGZ1bmN0aW9uIGlkCQkJICovCisJdW5zaWduZWQgY2hhciBjaGVja3BvaW50X2ZsYWc7CS8qCQkJCSAqLworCXVuc2lnbmVkIGNoYXIgcmVzdjI7CQkvKiByZXNlcnZlZAkJCSAqLworCXVuc2lnbmVkIHNob3J0IHJlcV9wYXJtbDsJLyogcmVxdWVzdCBwYXJhbWV0ZXIgYnVmZmVyCSAqLworCQkJCQkvKiBsZW5ndGggMTYtYml0IGxpdHRsZSBlbmRpYW4JICovCisJdW5zaWduZWQgY2hhciByZXFfcGFybXBbNF07CS8qIHJlcXVlc3QgcGFyYW1ldGVyIGJ1ZmZlcgkgKgorCQkJCQkgKiBwb2ludGVyIChtZWFucyBub3RoaW5nOiB0aGUJICoKKwkJCQkJICogcGFyYW1ldGVyIGJ1ZmZlciBmb2xsb3dzCSAqCisJCQkJCSAqIHRoZSBDUFJCKS4JCQkgKi8KKwl1bnNpZ25lZCBjaGFyIHJlcV9kYXRhbFs0XTsJLyogcmVxdWVzdCBkYXRhIGJ1ZmZlcgkJICovCisJCQkJCS8qIGxlbmd0aAkgIFVMRUxPTkcJICovCisJdW5zaWduZWQgY2hhciByZXFfZGF0YXBbNF07CS8qIHJlcXVlc3QgZGF0YSBidWZmZXIJCSAqLworCQkJCQkvKiBwb2ludGVyCQkJICovCisJdW5zaWduZWQgc2hvcnQgcnBsX3Bhcm1sOwkvKiByZXBseSAgcGFyYW1ldGVyIGJ1ZmZlcgkgKi8KKwkJCQkJLyogbGVuZ3RoIDE2LWJpdCBsaXR0bGUgZW5kaWFuCSAqLworCXVuc2lnbmVkIGNoYXIgcGFkXzAwMVsyXTsJLyogQWxpZ25tZW50IHBhZCBieXRlcy4gVUxFU0hPUlQgKi8KKwl1bnNpZ25lZCBjaGFyIHJwbF9wYXJtcFs0XTsJLyogcmVwbHkgcGFyYW1ldGVyIGJ1ZmZlcgkgKgorCQkJCQkgKiBwb2ludGVyIChtZWFucyBub3RoaW5nOiB0aGUJICoKKwkJCQkJICogcGFyYW1ldGVyIGJ1ZmZlciBmb2xsb3dzCSAqCisJCQkJCSAqIHRoZSBDUFJCKS4JCQkgKi8KKwl1bnNpZ25lZCBjaGFyIHJwbF9kYXRhbFs0XTsJLyogcmVwbHkgZGF0YSBidWZmZXIgbGVuIFVMRUxPTkcgKi8KKwl1bnNpZ25lZCBjaGFyIHJwbF9kYXRhcFs0XTsJLyogcmVwbHkgZGF0YSBidWZmZXIJCSAqLworCQkJCQkvKiBwb2ludGVyCQkJICovCisJdW5zaWduZWQgc2hvcnQgY2NwX3JzY29kZTsJLyogc2VydmVyIHJlYXNvbiBjb2RlCVVMRVNIT1JUICovCisJdW5zaWduZWQgc2hvcnQgY2NwX3J0Y29kZTsJLyogc2VydmVyIHJldHVybiBjb2RlCVVMRVNIT1JUICovCisJdW5zaWduZWQgY2hhciByZXBkX3Bhcm1sWzJdOwkvKiByZXBsaWVkIHBhcmFtZXRlciBsZW4gVUxFU0hPUlQqLworCXVuc2lnbmVkIGNoYXIgbWFjX2RhdGFfbGVuWzJdOwkvKiBNYWMgRGF0YSBMZW5ndGgJVUxFU0hPUlQgKi8KKwl1bnNpZ25lZCBjaGFyIHJlcGRfZGF0YWxbNF07CS8qIHJlcGxpZWQgZGF0YSBsZW5ndGgJVUxFTE9ORwkgKi8KKwl1bnNpZ25lZCBjaGFyIHJlcV9wY1syXTsJLyogUEMgaWRlbnRpZmllcgkJICovCisJdW5zaWduZWQgY2hhciByZXNfb3JpZ2luWzhdOwkvKiByZXNvdXJjZSBvcmlnaW4JCSAqLworCXVuc2lnbmVkIGNoYXIgbWFjX3ZhbHVlWzhdOwkvKiBNYWMgVmFsdWUJCQkgKi8KKwl1bnNpZ25lZCBjaGFyIGxvZ29uX2lkWzhdOwkvKiBMb2dvbiBJZGVudGlmaWVyCQkgKi8KKwl1bnNpZ25lZCBjaGFyIHVzYWdlX2RvbWFpblsyXTsJLyogY2R4CQkJCSAqLworCXVuc2lnbmVkIGNoYXIgcmVzdjNbMThdOwkvKiByZXNlcnZlZCBmb3IgcmVxdWVzdG9yCSAqLworCXVuc2lnbmVkIHNob3J0IHN2cl9uYW1lbDsJLyogc2VydmVyIG5hbWUgbGVuZ3RoICBVTEVTSE9SVAkgKi8KKwl1bnNpZ25lZCBjaGFyIHN2cl9uYW1lWzhdOwkvKiBzZXJ2ZXIgbmFtZQkJCSAqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoqCisgKiBUaGUgdHlwZSA4NiBtZXNzYWdlIGZhbWlseSBpcyBhc3NvY2lhdGVkIHdpdGggUENJQ0MgYW5kIFBDSVhDQyBjYXJkcy4KKyAqCisgKiBJdCBjb250YWlucyBhIG1lc3NhZ2UgaGVhZGVyIGZvbGxvd2VkIGJ5IGEgQ1BSQi4gIFRoZSBDUFJCIGlzCisgKiB0aGUgc2FtZSBhcyB0aGUgcmVxdWVzdCBDUFJCLCB3aGljaCBpcyBkZXNjcmliZWQgYWJvdmUuCisgKgorICogSWYgZm9ybWF0IGlzIDEsIGFuIGVycm9yIGNvbmRpdGlvbiBleGlzdHMgYW5kIG5vIGRhdGEgYmV5b25kCisgKiB0aGUgOC1ieXRlIG1lc3NhZ2UgaGVhZGVyIGlzIG9mIGludGVyZXN0LgorICoKKyAqIFRoZSBub24tZXJyb3IgbWVzc2FnZSBpcyBzaG93biBiZWxvdy4KKyAqCisgKiBOb3RlIHRoYXQgYWxsIHJlc2VydmVkIGZpZWxkcyBtdXN0IGJlIHplcm9lcy4KKyAqLworc3RydWN0IHR5cGU4Nl9oZHIgeworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQxOwkvKiAweDAwCQkJCSovCisJdW5zaWduZWQgY2hhciB0eXBlOwkJLyogMHg4NgkJCQkqLworCXVuc2lnbmVkIGNoYXIgZm9ybWF0OwkJLyogMHgwMSAoZXJyb3IpIG9yIDB4MDIgKG9rKQkqLworCXVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWQyOwkvKiAweDAwCQkJCSovCisJdW5zaWduZWQgY2hhciByZXBseV9jb2RlOwkvKiByZXBseSBjb2RlIChzZWUgYWJvdmUpCSovCisJdW5zaWduZWQgY2hhciByZXNlcnZlZDNbM107CS8qIDB4MDAwMDAwCQkJKi8KK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgVFlQRTg2X1JTUF9DT0RFIDB4ODYKKyNkZWZpbmUgVFlQRTg2X0ZNVDIJMHgwMgorCitzdHJ1Y3QgdHlwZTg2X2ZtdDJfZXh0IHsKKwl1bnNpZ25lZCBjaGFyCSAgcmVzZXJ2ZWRbNF07CS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGNoYXIJICBhcGZzWzRdOwkvKiBmaW5hbCBzdGF0dXMJCQkqLworCXVuc2lnbmVkIGludAkgIGNvdW50MTsJLyogbGVuZ3RoIG9mIENQUkIgKyBwYXJhbWV0ZXJzCSovCisJdW5zaWduZWQgaW50CSAgb2Zmc2V0MTsJLyogb2Zmc2V0IHRvIENQUkIJCSovCisJdW5zaWduZWQgaW50CSAgY291bnQyOwkvKiAweDAwMDAwMDAwCQkJKi8KKwl1bnNpZ25lZCBpbnQJICBvZmZzZXQyOwkvKiBkYiBvZmZzZXQgMHgwMDAwMDAwMCBmb3IgUEtECSovCisJdW5zaWduZWQgaW50CSAgY291bnQzOwkvKiAweDAwMDAwMDAwCQkJKi8KKwl1bnNpZ25lZCBpbnQJICBvZmZzZXQzOwkvKiAweDAwMDAwMDAwCQkJKi8KKwl1bnNpZ25lZCBpbnQJICBjb3VudDQ7CS8qIDB4MDAwMDAwMDAJCQkqLworCXVuc2lnbmVkIGludAkgIG9mZnNldDQ7CS8qIDB4MDAwMDAwMDAJCQkqLworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayB7CisJdW5zaWduZWQgY2hhciBmdW5jdGlvbl9jb2RlWzJdOworCXVuc2lnbmVkIHNob3J0IHVsZW47CisJdW5zaWduZWQgY2hhciBvbmx5X3J1bGVbOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitpbnQgemNyeXB0X3BjaWNjX2luaXQodm9pZCk7Cit2b2lkIHpjcnlwdF9wY2ljY19leGl0KHZvaWQpOworCisjZW5kaWYgLyogX1pDUllQVF9QQ0lDQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMgYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGE4YjkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKQEAgLTAsMCArMSw5NTEgQEAKKy8qCisgKiAgbGludXgvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmMKKyAqCisgKiAgemNyeXB0IDIuMS4wCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqICBNYWpvciBjbGVhbnVwICYgZHJpdmVyIHNwbGl0OiBNYXJ0aW4gU2Nod2lkZWZza3kgPHNjaHdpZGVmc2t5QGRlLmlibS5jb20+CisgKgkJCQkgIFJhbHBoIFd1ZXJ0aG5lciA8cnd1ZXJ0aG5AZGUuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgImFwX2J1cy5oIgorI2luY2x1ZGUgInpjcnlwdF9hcGkuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfZXJyb3IuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfcGNpY2MuaCIKKyNpbmNsdWRlICJ6Y3J5cHRfcGNpeGNjLmgiCisjaW5jbHVkZSAiemNyeXB0X2NjYV9rZXkuaCIKKworI2RlZmluZSBQQ0lYQ0NfTUlOX01PRF9TSVpFCSAxNgkvKiAgMTI4IGJpdHMJKi8KKyNkZWZpbmUgUENJWENDX01JTl9NT0RfU0laRV9PTEQJIDY0CS8qICA1MTIgYml0cwkqLworI2RlZmluZSBQQ0lYQ0NfTUFYX01PRF9TSVpFCTI1NgkvKiAyMDQ4IGJpdHMJKi8KKworI2RlZmluZSBQQ0lYQ0NfTUNMMl9TUEVFRF9SQVRJTkcJNzg3MAkvKiBGSVhNRTogbmVlZHMgZmluZXR1bmluZyAqLworI2RlZmluZSBQQ0lYQ0NfTUNMM19TUEVFRF9SQVRJTkcJNzg3MAorI2RlZmluZSBDRVgyQ19TUEVFRF9SQVRJTkcJCTg1NDAKKworI2RlZmluZSBQQ0lYQ0NfTUFYX0lDQV9NRVNTQUdFX1NJWkUgMHg3N2MgIC8qIG1heCBzaXplIHR5cGU2IHYyIGNydCBtZXNzYWdlICovCisjZGVmaW5lIFBDSVhDQ19NQVhfSUNBX1JFU1BPTlNFX1NJWkUgMHg3N2MgLyogbWF4IHNpemUgdHlwZTg2IHYyIHJlcGx5CSAgICAqLworCisjZGVmaW5lIFBDSVhDQ19NQVhfWENSQl9NRVNTQUdFX1NJWkUgKDEyKjEwMjQpCisjZGVmaW5lIFBDSVhDQ19NQVhfWENSQl9SRVNQT05TRV9TSVpFIFBDSVhDQ19NQVhfWENSQl9NRVNTQUdFX1NJWkUKKyNkZWZpbmUgUENJWENDX01BWF9YQ1JCX0RBVEFfU0laRSAoMTEqMTAyNCkKKyNkZWZpbmUgUENJWENDX01BWF9YQ1JCX1JFUExZX1NJWkUgKDUqMTAyNCkKKworI2RlZmluZSBQQ0lYQ0NfTUFYX1JFU1BPTlNFX1NJWkUgUENJWENDX01BWF9YQ1JCX1JFU1BPTlNFX1NJWkUKKworI2RlZmluZSBQQ0lYQ0NfQ0xFQU5VUF9USU1FCSgxNSpIWikKKworI2RlZmluZSBDRUlMNCh4KSAoKCgoeCkrMykvNCkqNCkKKworc3RydWN0IHJlc3BvbnNlX3R5cGUgeworCXN0cnVjdCBjb21wbGV0aW9uIHdvcms7CisJaW50IHR5cGU7Cit9OworI2RlZmluZSBQQ0lYQ0NfUkVTUE9OU0VfVFlQRV9JQ0EgIDAKKyNkZWZpbmUgUENJWENDX1JFU1BPTlNFX1RZUEVfWENSQiAxCisKK3N0YXRpYyBzdHJ1Y3QgYXBfZGV2aWNlX2lkIHpjcnlwdF9wY2l4Y2NfaWRzW10gPSB7CisJeyBBUF9ERVZJQ0UoQVBfREVWSUNFX1RZUEVfUENJWENDKSB9LAorCXsgQVBfREVWSUNFKEFQX0RFVklDRV9UWVBFX0NFWDJDKSB9LAorCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKK307CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCitNT0RVTEVfREVWSUNFX1RBQkxFKGFwLCB6Y3J5cHRfcGNpeGNjX2lkcyk7CitNT0RVTEVfQVVUSE9SKCJJQk0gQ29ycG9yYXRpb24iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUENJWENDIENyeXB0b2dyYXBoaWMgQ29wcm9jZXNzb3IgZGV2aWNlIGRyaXZlciwgIgorCQkgICAiQ29weXJpZ2h0IDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZW5kaWYKKworc3RhdGljIGludCB6Y3J5cHRfcGNpeGNjX3Byb2JlKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2Rldik7CitzdGF0aWMgdm9pZCB6Y3J5cHRfcGNpeGNjX3JlbW92ZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpOworc3RhdGljIHZvaWQgemNyeXB0X3BjaXhjY19yZWNlaXZlKHN0cnVjdCBhcF9kZXZpY2UgKiwgc3RydWN0IGFwX21lc3NhZ2UgKiwKKwkJCQkgc3RydWN0IGFwX21lc3NhZ2UgKik7CisKK3N0YXRpYyBzdHJ1Y3QgYXBfZHJpdmVyIHpjcnlwdF9wY2l4Y2NfZHJpdmVyID0geworCS5wcm9iZSA9IHpjcnlwdF9wY2l4Y2NfcHJvYmUsCisJLnJlbW92ZSA9IHpjcnlwdF9wY2l4Y2NfcmVtb3ZlLAorCS5yZWNlaXZlID0gemNyeXB0X3BjaXhjY19yZWNlaXZlLAorCS5pZHMgPSB6Y3J5cHRfcGNpeGNjX2lkcywKK307CisKKy8qKgorICogVGhlIGZvbGxvd2luZyBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIENQUkJYIHBhc3NlZCB0byB0aGUgUENJWENDL0NFWDJDCisgKiBjYXJkIGluIGEgdHlwZTYgbWVzc2FnZS4gVGhlIDMgZmllbGRzIHRoYXQgbXVzdCBiZSBmaWxsZWQgaW4gYXQgZXhlY3V0aW9uCisgKiB0aW1lIGFyZSAgcmVxX3Bhcm1sLCBycGxfcGFybWwgYW5kIHVzYWdlX2RvbWFpbi4KKyAqIEV2ZXJ5dGhpbmcgYWJvdXQgdGhpcyBpbnRlcmZhY2UgaXMgYXNjaWkvYmlnLWVuZGlhbiwgc2luY2UgdGhlCisgKiBkZXZpY2UgZG9lcyAqbm90KiBoYXZlICdJbnRlbCBpbnNpZGUnLgorICoKKyAqIFRoZSBDUFJCWCBpcyBmb2xsb3dlZCBpbW1lZGlhdGVseSBieSB0aGUgcGFybSBibG9jay4KKyAqIFRoZSBwYXJtIGJsb2NrIGNvbnRhaW5zOgorICogLSBmdW5jdGlvbiBjb2RlICgnUEQnIDB4NTA0NCBvciAnUEsnIDB4NTA0QikKKyAqIC0gcnVsZSBibG9jayAob25lIG9mOikKKyAqICAgKyAweDAwMEEgJ1BLQ1MtMS4yJyAoTUNMMiAnUEQnKQorICogICArIDB4MDAwQSAnWkVSTy1QQUQnIChNQ0wyICdQSycpCisgKiAgICsgMHgwMDBBICdaRVJPLVBBRCcgKE1DTDMgJ1BEJyBvciBDRVgyQyAnUEQnKQorICogICArIDB4MDAwQSAnTVJQICAgICAnIChNQ0wzICdQSycgb3IgQ0VYMkMgJ1BLJykKKyAqIC0gVlVEIGJsb2NrCisgKi8KK3N0YXRpYyBzdHJ1Y3QgQ1BSQlggc3RhdGljX2NwcmJ4ID0geworCS5jcHJiX2xlbgk9ICAweDAwREMsCisJLmNwcmJfdmVyX2lkCT0gIDB4MDIsCisJLmZ1bmNfaWQJPSB7MHg1NCwweDMyfSwKK307CisKKy8qKgorICogQ29udmVydCBhIElDQU1FWCBtZXNzYWdlIHRvIGEgdHlwZTYgTUVYIG1lc3NhZ2UuCisgKgorICogQHpkZXY6IGNyeXB0byBkZXZpY2UgcG9pbnRlcgorICogQGFwX21zZzogcG9pbnRlciB0byBBUCBtZXNzYWdlCisgKiBAbWV4OiBwb2ludGVyIHRvIHVzZXIgaW5wdXQgZGF0YQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIC1FRkFVTFQuCisgKi8KK3N0YXRpYyBpbnQgSUNBTUVYX21zZ190b190eXBlNk1FWF9tc2dYKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgYXBfbWVzc2FnZSAqYXBfbXNnLAorCQkJCSAgICAgICBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvICptZXgpCit7CisJc3RhdGljIHN0cnVjdCB0eXBlNl9oZHIgc3RhdGljX3R5cGU2X2hkclggPSB7CisJCS50eXBlCQk9ICAweDA2LAorCQkub2Zmc2V0MQk9ICAweDAwMDAwMDU4LAorCQkuYWdlbnRfaWQJPSB7J0MnLCdBJyx9LAorCQkuZnVuY3Rpb25fY29kZQk9IHsnUCcsJ0snfSwKKwl9OworCXN0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrIHN0YXRpY19wa2VfZm5yID0geworCQkuZnVuY3Rpb25fY29kZQk9IHsnUCcsJ0snfSwKKwkJLnVsZW4JCT0gMTAsCisJCS5vbmx5X3J1bGUJPSB7J00nLCdSJywnUCcsJyAnLCcgJywnICcsJyAnLCcgJ30KKwl9OworCXN0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrIHN0YXRpY19wa2VfZm5yX01DTDIgPSB7CisJCS5mdW5jdGlvbl9jb2RlCT0geydQJywnSyd9LAorCQkudWxlbgkJPSAxMCwKKwkJLm9ubHlfcnVsZQk9IHsnWicsJ0UnLCdSJywnTycsJy0nLCdQJywnQScsJ0QnfQorCX07CisJc3RydWN0IHsKKwkJc3RydWN0IHR5cGU2X2hkciBoZHI7CisJCXN0cnVjdCBDUFJCWCBjcHJieDsKKwkJc3RydWN0IGZ1bmN0aW9uX2FuZF9ydWxlc19ibG9jayBmcjsKKwkJdW5zaWduZWQgc2hvcnQgbGVuZ3RoOworCQljaGFyIHRleHRbMF07CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqbXNnID0gYXBfbXNnLT5tZXNzYWdlOworCWludCBzaXplOworCisJLyogVlVELmNpcGhlcnRleHQgKi8KKwltc2ctPmxlbmd0aCA9IG1leC0+aW5wdXRkYXRhbGVuZ3RoICsgMjsKKwlpZiAoY29weV9mcm9tX3VzZXIobXNnLT50ZXh0LCBtZXgtPmlucHV0ZGF0YSwgbWV4LT5pbnB1dGRhdGFsZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIFNldCB1cCBrZXkgd2hpY2ggaXMgbG9jYXRlZCBhZnRlciB0aGUgdmFyaWFibGUgbGVuZ3RoIHRleHQuICovCisJc2l6ZSA9IHpjcnlwdF90eXBlNl9tZXhfa2V5X2VuKG1leCwgbXNnLT50ZXh0K21leC0+aW5wdXRkYXRhbGVuZ3RoLCAxKTsKKwlpZiAoc2l6ZSA8IDApCisJCXJldHVybiBzaXplOworCXNpemUgKz0gc2l6ZW9mKCptc2cpICsgbWV4LT5pbnB1dGRhdGFsZW5ndGg7CisKKwkvKiBtZXNzYWdlIGhlYWRlciwgY3ByYnggYW5kIGYmciAqLworCW1zZy0+aGRyID0gc3RhdGljX3R5cGU2X2hkclg7CisJbXNnLT5oZHIuVG9DYXJkTGVuMSA9IHNpemUgLSBzaXplb2YobXNnLT5oZHIpOworCW1zZy0+aGRyLkZyb21DYXJkTGVuMSA9IFBDSVhDQ19NQVhfSUNBX1JFU1BPTlNFX1NJWkUgLSBzaXplb2YobXNnLT5oZHIpOworCisJbXNnLT5jcHJieCA9IHN0YXRpY19jcHJieDsKKwltc2ctPmNwcmJ4LmRvbWFpbiA9IEFQX1FJRF9RVUVVRSh6ZGV2LT5hcF9kZXYtPnFpZCk7CisJbXNnLT5jcHJieC5ycGxfbXNnYmwgPSBtc2ctPmhkci5Gcm9tQ2FyZExlbjE7CisKKwltc2ctPmZyID0gKHpkZXYtPnVzZXJfc3BhY2VfdHlwZSA9PSBaQ1JZUFRfUENJWENDX01DTDIpID8KKwkJc3RhdGljX3BrZV9mbnJfTUNMMiA6IHN0YXRpY19wa2VfZm5yOworCisJbXNnLT5jcHJieC5yZXFfcGFybWwgPSBzaXplIC0gc2l6ZW9mKG1zZy0+aGRyKSAtIHNpemVvZihtc2ctPmNwcmJ4KTsKKworCWFwX21zZy0+bGVuZ3RoID0gc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBDb252ZXJ0IGEgSUNBQ1JUIG1lc3NhZ2UgdG8gYSB0eXBlNiBDUlQgbWVzc2FnZS4KKyAqCisgKiBAemRldjogY3J5cHRvIGRldmljZSBwb2ludGVyCisgKiBAYXBfbXNnOiBwb2ludGVyIHRvIEFQIG1lc3NhZ2UKKyAqIEBjcnQ6IHBvaW50ZXIgdG8gdXNlciBpbnB1dCBkYXRhCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVGQVVMVC4KKyAqLworc3RhdGljIGludCBJQ0FDUlRfbXNnX3RvX3R5cGU2Q1JUX21zZ1goc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBhcF9tZXNzYWdlICphcF9tc2csCisJCQkJICAgICAgIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0ICpjcnQpCit7CisJc3RhdGljIHN0cnVjdCB0eXBlNl9oZHIgc3RhdGljX3R5cGU2X2hkclggPSB7CisJCS50eXBlCQk9ICAweDA2LAorCQkub2Zmc2V0MQk9ICAweDAwMDAwMDU4LAorCQkuYWdlbnRfaWQJPSB7J0MnLCdBJyx9LAorCQkuZnVuY3Rpb25fY29kZQk9IHsnUCcsJ0QnfSwKKwl9OworCXN0YXRpYyBzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrIHN0YXRpY19wa2RfZm5yID0geworCQkuZnVuY3Rpb25fY29kZQk9IHsnUCcsJ0QnfSwKKwkJLnVsZW4JCT0gMTAsCisJCS5vbmx5X3J1bGUJPSB7J1onLCdFJywnUicsJ08nLCctJywnUCcsJ0EnLCdEJ30KKwl9OworCisJc3RhdGljIHN0cnVjdCBmdW5jdGlvbl9hbmRfcnVsZXNfYmxvY2sgc3RhdGljX3BrZF9mbnJfTUNMMiA9IHsKKwkJLmZ1bmN0aW9uX2NvZGUJPSB7J1AnLCdEJ30sCisJCS51bGVuCQk9IDEwLAorCQkub25seV9ydWxlCT0geydQJywnSycsJ0MnLCdTJywnLScsJzEnLCcuJywnMid9CisJfTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgdHlwZTZfaGRyIGhkcjsKKwkJc3RydWN0IENQUkJYIGNwcmJ4OworCQlzdHJ1Y3QgZnVuY3Rpb25fYW5kX3J1bGVzX2Jsb2NrIGZyOworCQl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CisJCWNoYXIgdGV4dFswXTsKKwl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICptc2cgPSBhcF9tc2ctPm1lc3NhZ2U7CisJaW50IHNpemU7CisKKwkvKiBWVUQuY2lwaGVydGV4dCAqLworCW1zZy0+bGVuZ3RoID0gY3J0LT5pbnB1dGRhdGFsZW5ndGggKyAyOworCWlmIChjb3B5X2Zyb21fdXNlcihtc2ctPnRleHQsIGNydC0+aW5wdXRkYXRhLCBjcnQtPmlucHV0ZGF0YWxlbmd0aCkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyogU2V0IHVwIGtleSB3aGljaCBpcyBsb2NhdGVkIGFmdGVyIHRoZSB2YXJpYWJsZSBsZW5ndGggdGV4dC4gKi8KKwlzaXplID0gemNyeXB0X3R5cGU2X2NydF9rZXkoY3J0LCBtc2ctPnRleHQgKyBjcnQtPmlucHV0ZGF0YWxlbmd0aCwgMSk7CisJaWYgKHNpemUgPCAwKQorCQlyZXR1cm4gc2l6ZTsKKwlzaXplICs9IHNpemVvZigqbXNnKSArIGNydC0+aW5wdXRkYXRhbGVuZ3RoOwkvKiB0b3RhbCBzaXplIG9mIG1zZyAqLworCisJLyogbWVzc2FnZSBoZWFkZXIsIGNwcmJ4IGFuZCBmJnIgKi8KKwltc2ctPmhkciA9IHN0YXRpY190eXBlNl9oZHJYOworCW1zZy0+aGRyLlRvQ2FyZExlbjEgPSBzaXplIC0gIHNpemVvZihtc2ctPmhkcik7CisJbXNnLT5oZHIuRnJvbUNhcmRMZW4xID0gUENJWENDX01BWF9JQ0FfUkVTUE9OU0VfU0laRSAtIHNpemVvZihtc2ctPmhkcik7CisKKwltc2ctPmNwcmJ4ID0gc3RhdGljX2NwcmJ4OworCW1zZy0+Y3ByYnguZG9tYWluID0gQVBfUUlEX1FVRVVFKHpkZXYtPmFwX2Rldi0+cWlkKTsKKwltc2ctPmNwcmJ4LnJlcV9wYXJtbCA9IG1zZy0+Y3ByYngucnBsX21zZ2JsID0KKwkJc2l6ZSAtIHNpemVvZihtc2ctPmhkcikgLSBzaXplb2YobXNnLT5jcHJieCk7CisKKwltc2ctPmZyID0gKHpkZXYtPnVzZXJfc3BhY2VfdHlwZSA9PSBaQ1JZUFRfUENJWENDX01DTDIpID8KKwkJc3RhdGljX3BrZF9mbnJfTUNMMiA6IHN0YXRpY19wa2RfZm5yOworCisJYXBfbXNnLT5sZW5ndGggPSBzaXplOworCXJldHVybiAwOworfQorCisvKioKKyAqIENvbnZlcnQgYSBYQ1JCIG1lc3NhZ2UgdG8gYSB0eXBlNiBDUFJCIG1lc3NhZ2UuCisgKgorICogQHpkZXY6IGNyeXB0byBkZXZpY2UgcG9pbnRlcgorICogQGFwX21zZzogcG9pbnRlciB0byBBUCBtZXNzYWdlCisgKiBAeGNSQjogcG9pbnRlciB0byB1c2VyIGlucHV0IGRhdGEKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRUZBVUxULgorICovCitzdHJ1Y3QgdHlwZTg2X2ZtdDJfbXNnIHsKKwlzdHJ1Y3QgdHlwZTg2X2hkciBoZHI7CisJc3RydWN0IHR5cGU4Nl9mbXQyX2V4dCBmbXQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBYQ1JCX21zZ190b190eXBlNkNQUkJfbXNnWChzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCQkgICAgICAgc3RydWN0IGFwX21lc3NhZ2UgKmFwX21zZywKKwkJCQkgICAgICAgc3RydWN0IGljYV94Y1JCICp4Y1JCKQoreworCXN0YXRpYyBzdHJ1Y3QgdHlwZTZfaGRyIHN0YXRpY190eXBlNl9oZHJYID0geworCQkudHlwZQkJPSAgMHgwNiwKKwkJLm9mZnNldDEJPSAgMHgwMDAwMDA1OCwKKwl9OworCXN0cnVjdCB7CisJCXN0cnVjdCB0eXBlNl9oZHIgaGRyOworCQlzdHJ1Y3QgaWNhX0NQUkJYIGNwcmJ4OworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgKm1zZyA9IGFwX21zZy0+bWVzc2FnZTsKKworCWludCByY2JsZW4gPSBDRUlMNCh4Y1JCLT5yZXF1ZXN0X2NvbnRyb2xfYmxrX2xlbmd0aCk7CisJaW50IHJlcGx5bGVuOworCWNoYXIgKnJlcV9kYXRhID0gYXBfbXNnLT5tZXNzYWdlICsgc2l6ZW9mKHN0cnVjdCB0eXBlNl9oZHIpICsgcmNibGVuOworCWNoYXIgKmZ1bmN0aW9uX2NvZGU7CisKKwkvKiBsZW5ndGggY2hlY2tzICovCisJYXBfbXNnLT5sZW5ndGggPSBzaXplb2Yoc3RydWN0IHR5cGU2X2hkcikgKworCQlDRUlMNCh4Y1JCLT5yZXF1ZXN0X2NvbnRyb2xfYmxrX2xlbmd0aCkgKworCQl4Y1JCLT5yZXF1ZXN0X2RhdGFfbGVuZ3RoOworCWlmIChhcF9tc2ctPmxlbmd0aCA+IFBDSVhDQ19NQVhfWENSQl9NRVNTQUdFX1NJWkUpIHsKKwkJUFJJTlRLKCJDb21iaW5lZCBtZXNzYWdlIGlzIHRvbyBsYXJnZSAoJWxkLyVkLyVkKS5cbiIsCisJCSAgICBzaXplb2Yoc3RydWN0IHR5cGU2X2hkciksCisJCSAgICB4Y1JCLT5yZXF1ZXN0X2NvbnRyb2xfYmxrX2xlbmd0aCwKKwkJICAgIHhjUkItPnJlcXVlc3RfZGF0YV9sZW5ndGgpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKENFSUw0KHhjUkItPnJlcGx5X2NvbnRyb2xfYmxrX2xlbmd0aCkgPgorCSAgICBQQ0lYQ0NfTUFYX1hDUkJfUkVQTFlfU0laRSkgeworCQlQREVCVUcoIlJlcGx5IENQUkIgbGVuZ3RoIGlzIHRvbyBsYXJnZSAoJWQpLlxuIiwKKwkJICAgIHhjUkItPnJlcXVlc3RfY29udHJvbF9ibGtfbGVuZ3RoKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCWlmIChDRUlMNCh4Y1JCLT5yZXBseV9kYXRhX2xlbmd0aCkgPiBQQ0lYQ0NfTUFYX1hDUkJfREFUQV9TSVpFKSB7CisJCVBERUJVRygiUmVwbHkgZGF0YSBibG9jayBsZW5ndGggaXMgdG9vIGxhcmdlICglZCkuXG4iLAorCQkgICAgeGNSQi0+cmVwbHlfZGF0YV9sZW5ndGgpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmVwbHlsZW4gPSBDRUlMNCh4Y1JCLT5yZXBseV9jb250cm9sX2Jsa19sZW5ndGgpICsKKwkJQ0VJTDQoeGNSQi0+cmVwbHlfZGF0YV9sZW5ndGgpICsKKwkJc2l6ZW9mKHN0cnVjdCB0eXBlODZfZm10Ml9tc2cpOworCWlmIChyZXBseWxlbiA+IFBDSVhDQ19NQVhfWENSQl9SRVNQT05TRV9TSVpFKSB7CisJCVBERUJVRygiUmVwbHkgQ1BSQiArIGRhdGEgYmxvY2sgPiBQQ0lYQ0NfTUFYX1hDUkJfUkVTUE9OU0VfU0laRSIKKwkJICAgICAgICIgKCVkLyVkLyVkKS5cbiIsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHR5cGU4Nl9mbXQyX21zZyksCisJCSAgICAgICB4Y1JCLT5yZXBseV9jb250cm9sX2Jsa19sZW5ndGgsCisJCSAgICAgICB4Y1JCLT5yZXBseV9kYXRhX2xlbmd0aCk7CisJCXhjUkItPnJlcGx5X2NvbnRyb2xfYmxrX2xlbmd0aCA9IFBDSVhDQ19NQVhfWENSQl9SRVNQT05TRV9TSVpFIC0KKwkJCShzaXplb2Yoc3RydWN0IHR5cGU4Nl9mbXQyX21zZykgKworCQkJICAgIENFSUw0KHhjUkItPnJlcGx5X2RhdGFfbGVuZ3RoKSk7CisJCVBERUJVRygiQ2FwcGluZyBSZXBseSBDUFJCIGxlbmd0aCBhdCAlZFxuIiwKKwkJICAgICAgIHhjUkItPnJlcGx5X2NvbnRyb2xfYmxrX2xlbmd0aCk7CisJfQorCisJLyogcHJlcGFyZSB0eXBlNiBoZWFkZXIgKi8KKwltc2ctPmhkciA9IHN0YXRpY190eXBlNl9oZHJYOworCW1lbWNweShtc2ctPmhkci5hZ2VudF9pZCAsICYoeGNSQi0+YWdlbnRfSUQpLCBzaXplb2YoeGNSQi0+YWdlbnRfSUQpKTsKKwltc2ctPmhkci5Ub0NhcmRMZW4xID0geGNSQi0+cmVxdWVzdF9jb250cm9sX2Jsa19sZW5ndGg7CisJaWYgKHhjUkItPnJlcXVlc3RfZGF0YV9sZW5ndGgpIHsKKwkJbXNnLT5oZHIub2Zmc2V0MiA9IG1zZy0+aGRyLm9mZnNldDEgKyByY2JsZW47CisJCW1zZy0+aGRyLlRvQ2FyZExlbjIgPSB4Y1JCLT5yZXF1ZXN0X2RhdGFfbGVuZ3RoOworCX0KKwltc2ctPmhkci5Gcm9tQ2FyZExlbjEgPSB4Y1JCLT5yZXBseV9jb250cm9sX2Jsa19sZW5ndGg7CisJbXNnLT5oZHIuRnJvbUNhcmRMZW4yID0geGNSQi0+cmVwbHlfZGF0YV9sZW5ndGg7CisKKwkvKiBwcmVwYXJlIENQUkIgKi8KKwlpZiAoY29weV9mcm9tX3VzZXIoJihtc2ctPmNwcmJ4KSwgeGNSQi0+cmVxdWVzdF9jb250cm9sX2Jsa19hZGRyLAorCQkgICAgeGNSQi0+cmVxdWVzdF9jb250cm9sX2Jsa19sZW5ndGgpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAobXNnLT5jcHJieC5jcHJiX2xlbiArIHNpemVvZihtc2ctPmhkci5mdW5jdGlvbl9jb2RlKSA+CisJICAgIHhjUkItPnJlcXVlc3RfY29udHJvbF9ibGtfbGVuZ3RoKSB7CisJCVBERUJVRygiY3ByYl9sZW4gdG9vIGxhcmdlICglZC8lZClcbiIsIG1zZy0+Y3ByYnguY3ByYl9sZW4sCisJCSAgICB4Y1JCLT5yZXF1ZXN0X2NvbnRyb2xfYmxrX2xlbmd0aCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlmdW5jdGlvbl9jb2RlID0gKCh1bnNpZ25lZCBjaGFyICopJm1zZy0+Y3ByYngpICsgbXNnLT5jcHJieC5jcHJiX2xlbjsKKwltZW1jcHkobXNnLT5oZHIuZnVuY3Rpb25fY29kZSwgZnVuY3Rpb25fY29kZSwgc2l6ZW9mKG1zZy0+aGRyLmZ1bmN0aW9uX2NvZGUpKTsKKworCS8qIGNvcHkgZGF0YSBibG9jayAqLworCWlmICh4Y1JCLT5yZXF1ZXN0X2RhdGFfbGVuZ3RoICYmCisJICAgIGNvcHlfZnJvbV91c2VyKHJlcV9kYXRhLCB4Y1JCLT5yZXF1ZXN0X2RhdGFfYWRkcmVzcywKKwkJeGNSQi0+cmVxdWVzdF9kYXRhX2xlbmd0aCkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisvKioKKyAqIENvcHkgcmVzdWx0cyBmcm9tIGEgdHlwZSA4NiBJQ0EgcmVwbHkgbWVzc2FnZSBiYWNrIHRvIHVzZXIgc3BhY2UuCisgKgorICogQHpkZXY6IGNyeXB0byBkZXZpY2UgcG9pbnRlcgorICogQHJlcGx5OiByZXBseSBBUCBtZXNzYWdlLgorICogQGRhdGE6IHBvaW50ZXIgdG8gdXNlciBvdXRwdXQgZGF0YQorICogQGxlbmd0aDogc2l6ZSBvZiB1c2VyIG91dHB1dCBkYXRhCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgLUVJTlZBTCwgLUVGQVVMVCwgLUVBR0FJTiBpbiBjYXNlIG9mIGFuIGVycm9yLgorICovCitzdHJ1Y3QgdHlwZTg2eF9yZXBseSB7CisJc3RydWN0IHR5cGU4Nl9oZHIgaGRyOworCXN0cnVjdCB0eXBlODZfZm10Ml9leHQgZm10MjsKKwlzdHJ1Y3QgQ1BSQlggY3ByYng7CisJdW5zaWduZWQgY2hhciBwYWRbNF07CS8qIDQgYnl0ZSBmdW5jdGlvbiBjb2RlL3J1bGVzIGJsb2NrID8gKi8KKwl1bnNpZ25lZCBzaG9ydCBsZW5ndGg7CisJY2hhciB0ZXh0WzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBjb252ZXJ0X3R5cGU4Nl9pY2Eoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkgIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSwKKwkJCSAgY2hhciBfX3VzZXIgKm91dHB1dGRhdGEsCisJCQkgIHVuc2lnbmVkIGludCBvdXRwdXRkYXRhbGVuZ3RoKQoreworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIHN0YXRpY19wYWRbXSA9IHsKKwkJMHgwMCwweDAyLAorCQkweDFCLDB4N0IsMHg1RCwweEI1LDB4NzUsMHgwMSwweDNELDB4RkQsCisJCTB4OEQsMHhEMSwweEM3LDB4MDMsMHgyRCwweDA5LDB4MjMsMHg1NywKKwkJMHg4OSwweDQ5LDB4QjksMHgzRiwweEJCLDB4OTksMHg0MSwweDVCLAorCQkweDc1LDB4MjEsMHg3QiwweDlELDB4M0IsMHg2QiwweDUxLDB4MzksCisJCTB4QkIsMHgwRCwweDM1LDB4QjksMHg4OSwweDBGLDB4OTMsMHhBNSwKKwkJMHgwQiwweDQ3LDB4RjEsMHhEMywweEJCLDB4Q0IsMHhGMSwweDlELAorCQkweDIzLDB4NzMsMHg3MSwweEZGLDB4RjMsMHhGNSwweDQ1LDB4RkIsCisJCTB4NjEsMHgyOSwweDIzLDB4RkQsMHhGMSwweDI5LDB4M0YsMHg3RiwKKwkJMHgxNywweEI3LDB4MUIsMHhBOSwweDE5LDB4QkQsMHg1NywweEE5LAorCQkweEQ3LDB4OTUsMHhBMywweENCLDB4RUQsMHgxRCwweERCLDB4NDUsCisJCTB4N0QsMHgxMSwweEQxLDB4NTEsMHgxQiwweEVELDB4NzEsMHhFOSwKKwkJMHhCMSwweEQxLDB4QUIsMHhBQiwweDIxLDB4MkIsMHgxQiwweDlGLAorCQkweDNCLDB4OUYsMHhGNywweEY3LDB4QkQsMHg2MywweEVCLDB4QUQsCisJCTB4REYsMHhCMywweDZGLDB4NUIsMHhEQiwweDhELDB4QTksMHg1RCwKKwkJMHhFMywweDdELDB4NzcsMHg0OSwweDQ3LDB4RjUsMHhBNywweEZELAorCQkweEFCLDB4MkYsMHgyNywweDM1LDB4NzcsMHhEMywweDQ5LDB4QzksCisJCTB4MDksMHhFQiwweEIxLDB4RjksMHhCRiwweDRCLDB4Q0IsMHgyQiwKKwkJMHhFQiwweEVCLDB4MDUsMHhGRiwweDdELDB4QzcsMHg5MSwweDhCLAorCQkweDA5LDB4ODMsMHhCOSwweEI5LDB4NjksMHgzMywweDM5LDB4NkIsCisJCTB4NzksMHg3NSwweDE5LDB4QkYsMHhCQiwweDA3LDB4MUQsMHhCRCwKKwkJMHgyOSwweEJGLDB4MzksMHg5NSwweDkzLDB4MUQsMHgzNSwweEM3LAorCQkweEM5LDB4NEQsMHhFNSwweDk3LDB4MEIsMHg0MywweDlCLDB4RjEsCisJCTB4MTYsMHg5MywweDAzLDB4MUYsMHhBNSwweEZCLDB4REIsMHhGMywKKwkJMHgyNywweDRGLDB4MjcsMHg2MSwweDA1LDB4MUYsMHhCOSwweDIzLAorCQkweDJGLDB4QzMsMHg4MSwweEE5LDB4MjMsMHg3MSwweDU1LDB4NTUsCisJCTB4RUIsMHhFRCwweDQxLDB4RTUsMHhGMywweDExLDB4RjEsMHg0MywKKwkJMHg2OSwweDAzLDB4QkQsMHgwQiwweDM3LDB4MEYsMHg1MSwweDhGLAorCQkweDBCLDB4QjUsMHg4OSwweDVCLDB4NjcsMHhBOSwweEQ5LDB4NEYsCisJCTB4MDEsMHhGOSwweDIxLDB4NzcsMHgzNywweDczLDB4NzksMHhDNSwKKwkJMHg3RiwweDUxLDB4QzEsMHhDRiwweDk3LDB4QTEsMHg3NSwweEFELAorCQkweDM1LDB4OUQsMHhEMywweEQzLDB4QTcsMHg5RCwweDVELDB4NDEsCisJCTB4NkYsMHg2NSwweDFCLDB4Q0YsMHhBOSwweDg3LDB4OTEsMHgwOQorCX07CisJc3RydWN0IHR5cGU4NnhfcmVwbHkgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCXVuc2lnbmVkIHNob3J0IHNlcnZpY2VfcmMsIHNlcnZpY2VfcnM7CisJdW5zaWduZWQgaW50IHJlcGx5X2xlbiwgcGFkX2xlbjsKKwljaGFyICpkYXRhOworCisJc2VydmljZV9yYyA9IG1zZy0+Y3ByYnguY2NwX3J0Y29kZTsKKwlpZiAodW5saWtlbHkoc2VydmljZV9yYyAhPSAwKSkgeworCQlzZXJ2aWNlX3JzID0gbXNnLT5jcHJieC5jY3BfcnNjb2RlOworCQlpZiAoc2VydmljZV9yYyA9PSA4ICYmIHNlcnZpY2VfcnMgPT0gNjYpIHsKKwkJCVBERUJVRygiQmFkIGJsb2NrIGZvcm1hdCBvbiBQQ0lYQ0MvQ0VYMkNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHNlcnZpY2VfcmMgPT0gOCAmJiBzZXJ2aWNlX3JzID09IDY1KSB7CisJCQlQREVCVUcoIlByb2JhYmx5IGFuIGV2ZW4gbW9kdWx1cyBvbiBQQ0lYQ0MvQ0VYMkNcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKHNlcnZpY2VfcmMgPT0gOCAmJiBzZXJ2aWNlX3JzID09IDc3MCkgeworCQkJUERFQlVHKCJJbnZhbGlkIGtleSBsZW5ndGggb24gUENJWENDL0NFWDJDXG4iKTsKKwkJCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IFBDSVhDQ19NSU5fTU9EX1NJWkVfT0xEOworCQkJcmV0dXJuIC1FQUdBSU47CisJCX0KKwkJaWYgKHNlcnZpY2VfcmMgPT0gOCAmJiBzZXJ2aWNlX3JzID09IDc4MykgeworCQkJUERFQlVHKCJFeHRlbmRlZCBiaXRsZW5ndGhzIG5vdCBlbmFibGVkIG9uIFBDSVhDQy9DRVgyQ1xuIik7CisJCQl6ZGV2LT5taW5fbW9kX3NpemUgPSBQQ0lYQ0NfTUlOX01PRF9TSVpFX09MRDsKKwkJCXJldHVybiAtRUFHQUlOOworCQl9CisJCVBSSU5USygiVW5rbm93biBzZXJ2aWNlIHJjL3JzIChQQ0lYQ0MvQ0VYMkMpOiAlZC8lZFxuIiwKKwkJICAgICAgIHNlcnZpY2VfcmMsIHNlcnZpY2VfcnMpOworCQl6ZGV2LT5vbmxpbmUgPSAwOworCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KKwl9CisJZGF0YSA9IG1zZy0+dGV4dDsKKwlyZXBseV9sZW4gPSBtc2ctPmxlbmd0aCAtIDI7CisJaWYgKHJlcGx5X2xlbiA+IG91dHB1dGRhdGFsZW5ndGgpCisJCXJldHVybiAtRUlOVkFMOworCS8qKgorCSAqIEZvciBhbGwgZW5jaXBoZXIgcmVxdWVzdHMsIHRoZSBsZW5ndGggb2YgdGhlIGNpcGhlcnRleHQgKHJlcGx5X2xlbikKKwkgKiB3aWxsIGFsd2F5cyBlcXVhbCB0aGUgbW9kdWx1cyBsZW5ndGguIEZvciBNRVggZGVjaXBoZXIgcmVxdWVzdHMKKwkgKiB0aGUgb3V0cHV0IG5lZWRzIHRvIGdldCBwYWRkZWQuIE1pbmltdW0gcGFkIHNpemUgaXMgMTAuCisJICoKKwkgKiBDdXJyZW50bHksIHRoZSBjYXNlcyB3aGVyZSBwYWRkaW5nIHdpbGwgYmUgYWRkZWQgaXMgZm9yOgorCSAqIC0gUENJWENDX01DTDIgdXNpbmcgYSBDUlQgZm9ybSB0b2tlbiAoc2luY2UgUEtEIGRpZG4ndCBzdXBwb3J0CisJICogICBaRVJPLVBBRCBhbmQgQ1JUIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBQS0QgcmVxdWVzdHMpCisJICogLSBQQ0lDQywgYWx3YXlzCisJICovCisJcGFkX2xlbiA9IG91dHB1dGRhdGFsZW5ndGggLSByZXBseV9sZW47CisJaWYgKHBhZF9sZW4gPiAwKSB7CisJCWlmIChwYWRfbGVuIDwgMTApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJLyogJ3Jlc3RvcmUnIHBhZGRpbmcgbGVmdCBpbiB0aGUgUENJQ0MvUENJWENDIGNhcmQuICovCisJCWlmIChjb3B5X3RvX3VzZXIob3V0cHV0ZGF0YSwgc3RhdGljX3BhZCwgcGFkX2xlbiAtIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmIChwdXRfdXNlcigwLCBvdXRwdXRkYXRhICsgcGFkX2xlbiAtIDEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIENvcHkgdGhlIGNyeXB0byByZXNwb25zZSB0byB1c2VyIHNwYWNlLiAqLworCWlmIChjb3B5X3RvX3VzZXIob3V0cHV0ZGF0YSArIHBhZF9sZW4sIGRhdGEsIHJlcGx5X2xlbikpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisvKioKKyAqIENvcHkgcmVzdWx0cyBmcm9tIGEgdHlwZSA4NiBYQ1JCIHJlcGx5IG1lc3NhZ2UgYmFjayB0byB1c2VyIHNwYWNlLgorICoKKyAqIEB6ZGV2OiBjcnlwdG8gZGV2aWNlIHBvaW50ZXIKKyAqIEByZXBseTogcmVwbHkgQVAgbWVzc2FnZS4KKyAqIEB4Y1JCOiBwb2ludGVyIHRvIFhDUkIKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcyBvciAtRUlOVkFMLCAtRUZBVUxULCAtRUFHQUlOIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisgKi8KK3N0YXRpYyBpbnQgY29udmVydF90eXBlODZfeGNyYihzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCSAgICAgICBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHksCisJCQkgICAgICAgc3RydWN0IGljYV94Y1JCICp4Y1JCKQoreworCXN0cnVjdCB0eXBlODZfZm10Ml9tc2cgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCWNoYXIgKmRhdGEgPSByZXBseS0+bWVzc2FnZTsKKworCS8qIENvcHkgQ1BSQiB0byB1c2VyICovCisJaWYgKGNvcHlfdG9fdXNlcih4Y1JCLT5yZXBseV9jb250cm9sX2Jsa19hZGRyLAorCQlkYXRhICsgbXNnLT5mbXQyLm9mZnNldDEsIG1zZy0+Zm10Mi5jb3VudDEpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwl4Y1JCLT5yZXBseV9jb250cm9sX2Jsa19sZW5ndGggPSBtc2ctPmZtdDIuY291bnQxOworCisJLyogQ29weSBkYXRhIGJ1ZmZlciB0byB1c2VyICovCisJaWYgKG1zZy0+Zm10Mi5jb3VudDIpCisJCWlmIChjb3B5X3RvX3VzZXIoeGNSQi0+cmVwbHlfZGF0YV9hZGRyLAorCQkJZGF0YSArIG1zZy0+Zm10Mi5vZmZzZXQyLCBtc2ctPmZtdDIuY291bnQyKSkKKwkJCXJldHVybiAtRUZBVUxUOworCXhjUkItPnJlcGx5X2RhdGFfbGVuZ3RoID0gbXNnLT5mbXQyLmNvdW50MjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb252ZXJ0X3Jlc3BvbnNlX2ljYShzdHJ1Y3QgemNyeXB0X2RldmljZSAqemRldiwKKwkJCSAgICBzdHJ1Y3QgYXBfbWVzc2FnZSAqcmVwbHksCisJCQkgICAgY2hhciBfX3VzZXIgKm91dHB1dGRhdGEsCisJCQkgICAgdW5zaWduZWQgaW50IG91dHB1dGRhdGFsZW5ndGgpCit7CisJc3RydWN0IHR5cGU4NnhfcmVwbHkgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCisJLyogUmVzcG9uc2UgdHlwZSBieXRlIGlzIHRoZSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmVzcG9uc2UuICovCisJc3dpdGNoICgoKHVuc2lnbmVkIGNoYXIgKikgcmVwbHktPm1lc3NhZ2UpWzFdKSB7CisJY2FzZSBUWVBFODJfUlNQX0NPREU6CisJY2FzZSBUWVBFODhfUlNQX0NPREU6CisJCXJldHVybiBjb252ZXJ0X2Vycm9yKHpkZXYsIHJlcGx5KTsKKwljYXNlIFRZUEU4Nl9SU1BfQ09ERToKKwkJaWYgKG1zZy0+aGRyLnJlcGx5X2NvZGUpCisJCQlyZXR1cm4gY29udmVydF9lcnJvcih6ZGV2LCByZXBseSk7CisJCWlmIChtc2ctPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpCisJCQlyZXR1cm4gY29udmVydF90eXBlODZfaWNhKHpkZXYsIHJlcGx5LAorCQkJCQkJICBvdXRwdXRkYXRhLCBvdXRwdXRkYXRhbGVuZ3RoKTsKKwkJLyogbm8gYnJlYWssIGluY29ycmVjdCBjcHJiIHZlcnNpb24gaXMgYW4gdW5rbm93biByZXNwb25zZSAqLworCWRlZmF1bHQ6IC8qIFVua25vd24gcmVzcG9uc2UgdHlwZSwgdGhpcyBzaG91bGQgTkVWRVIgRVZFUiBoYXBwZW4gKi8KKwkJUFJJTlRLKCJVbnJlY29nbml6ZWQgTWVzc2FnZSBIZWFkZXI6ICUwOHglMDh4XG4iLAorCQkgICAgICAgKih1bnNpZ25lZCBpbnQgKikgcmVwbHktPm1lc3NhZ2UsCisJCSAgICAgICAqKHVuc2lnbmVkIGludCAqKSAocmVwbHktPm1lc3NhZ2UrNCkpOworCQl6ZGV2LT5vbmxpbmUgPSAwOworCQlyZXR1cm4gLUVBR0FJTjsJLyogcmVwZWF0IHRoZSByZXF1ZXN0IG9uIGEgZGlmZmVyZW50IGRldmljZS4gKi8KKwl9Cit9CisKK3N0YXRpYyBpbnQgY29udmVydF9yZXNwb25zZV94Y3JiKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJICAgIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSwKKwkJCSAgICBzdHJ1Y3QgaWNhX3hjUkIgKnhjUkIpCit7CisJc3RydWN0IHR5cGU4NnhfcmVwbHkgKm1zZyA9IHJlcGx5LT5tZXNzYWdlOworCisJLyogUmVzcG9uc2UgdHlwZSBieXRlIGlzIHRoZSBzZWNvbmQgYnl0ZSBpbiB0aGUgcmVzcG9uc2UuICovCisJc3dpdGNoICgoKHVuc2lnbmVkIGNoYXIgKikgcmVwbHktPm1lc3NhZ2UpWzFdKSB7CisJY2FzZSBUWVBFODJfUlNQX0NPREU6CisJY2FzZSBUWVBFODhfUlNQX0NPREU6CisJCXhjUkItPnN0YXR1cyA9IDB4MDAwODA0NERMOyAvKiBIRERfSW52YWxpZFBhcm0gKi8KKwkJcmV0dXJuIGNvbnZlcnRfZXJyb3IoemRldiwgcmVwbHkpOworCWNhc2UgVFlQRTg2X1JTUF9DT0RFOgorCQlpZiAobXNnLT5oZHIucmVwbHlfY29kZSkgeworCQkJbWVtY3B5KCYoeGNSQi0+c3RhdHVzKSwgbXNnLT5mbXQyLmFwZnMsIHNpemVvZih1MzIpKTsKKwkJCXJldHVybiBjb252ZXJ0X2Vycm9yKHpkZXYsIHJlcGx5KTsKKwkJfQorCQlpZiAobXNnLT5jcHJieC5jcHJiX3Zlcl9pZCA9PSAweDAyKQorCQkJcmV0dXJuIGNvbnZlcnRfdHlwZTg2X3hjcmIoemRldiwgcmVwbHksIHhjUkIpOworCQkvKiBubyBicmVhaywgaW5jb3JyZWN0IGNwcmIgdmVyc2lvbiBpcyBhbiB1bmtub3duIHJlc3BvbnNlICovCisJZGVmYXVsdDogLyogVW5rbm93biByZXNwb25zZSB0eXBlLCB0aGlzIHNob3VsZCBORVZFUiBFVkVSIGhhcHBlbiAqLworCQlQUklOVEsoIlVucmVjb2duaXplZCBNZXNzYWdlIEhlYWRlcjogJTA4eCUwOHhcbiIsCisJCSAgICAgICAqKHVuc2lnbmVkIGludCAqKSByZXBseS0+bWVzc2FnZSwKKwkJICAgICAgICoodW5zaWduZWQgaW50ICopIChyZXBseS0+bWVzc2FnZSs0KSk7CisJCXhjUkItPnN0YXR1cyA9IDB4MDAwODA0NERMOyAvKiBIRERfSW52YWxpZFBhcm0gKi8KKwkJemRldi0+b25saW5lID0gMDsKKwkJcmV0dXJuIC1FQUdBSU47CS8qIHJlcGVhdCB0aGUgcmVxdWVzdCBvbiBhIGRpZmZlcmVudCBkZXZpY2UuICovCisJfQorfQorCisvKioKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIEFQIGJ1cyBjb2RlIGFmdGVyIGEgY3J5cHRvIHJlcXVlc3QKKyAqICJtc2ciIGhhcyBmaW5pc2hlZCB3aXRoIHRoZSByZXBseSBtZXNzYWdlICJyZXBseSIuCisgKiBJdCBpcyBjYWxsZWQgZnJvbSB0YXNrbGV0IGNvbnRleHQuCisgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UKKyAqIEBtc2c6IHBvaW50ZXIgdG8gdGhlIEFQIG1lc3NhZ2UKKyAqIEByZXBseTogcG9pbnRlciB0byB0aGUgQVAgcmVwbHkgbWVzc2FnZQorICovCitzdGF0aWMgdm9pZCB6Y3J5cHRfcGNpeGNjX3JlY2VpdmUoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2LAorCQkJCSAgc3RydWN0IGFwX21lc3NhZ2UgKm1zZywKKwkJCQkgIHN0cnVjdCBhcF9tZXNzYWdlICpyZXBseSkKK3sKKwlzdGF0aWMgc3RydWN0IGVycm9yX2hkciBlcnJvcl9yZXBseSA9IHsKKwkJLnR5cGUgPSBUWVBFODJfUlNQX0NPREUsCisJCS5yZXBseV9jb2RlID0gUkVQODJfRVJST1JfTUFDSElORV9GQUlMVVJFLAorCX07CisJc3RydWN0IHJlc3BvbnNlX3R5cGUgKnJlc3BfdHlwZSA9CisJCShzdHJ1Y3QgcmVzcG9uc2VfdHlwZSAqKSBtc2ctPnByaXZhdGU7CisJc3RydWN0IHR5cGU4NnhfcmVwbHkgKnQ4NnIgPSByZXBseS0+bWVzc2FnZTsKKwlpbnQgbGVuZ3RoOworCisJLyogQ29weSB0aGUgcmVwbHkgbWVzc2FnZSB0byB0aGUgcmVxdWVzdCBtZXNzYWdlIGJ1ZmZlci4gKi8KKwlpZiAoSVNfRVJSKHJlcGx5KSkKKwkJbWVtY3B5KG1zZy0+bWVzc2FnZSwgJmVycm9yX3JlcGx5LCBzaXplb2YoZXJyb3JfcmVwbHkpKTsKKwllbHNlIGlmICh0ODZyLT5oZHIudHlwZSA9PSBUWVBFODZfUlNQX0NPREUgJiYKKwkJIHQ4NnItPmNwcmJ4LmNwcmJfdmVyX2lkID09IDB4MDIpIHsKKwkJc3dpdGNoIChyZXNwX3R5cGUtPnR5cGUpIHsKKwkJY2FzZSBQQ0lYQ0NfUkVTUE9OU0VfVFlQRV9JQ0E6CisJCQlsZW5ndGggPSBzaXplb2Yoc3RydWN0IHR5cGU4NnhfcmVwbHkpCisJCQkJKyB0ODZyLT5sZW5ndGggLSAyOworCQkJbGVuZ3RoID0gbWluKFBDSVhDQ19NQVhfSUNBX1JFU1BPTlNFX1NJWkUsIGxlbmd0aCk7CisJCQltZW1jcHkobXNnLT5tZXNzYWdlLCByZXBseS0+bWVzc2FnZSwgbGVuZ3RoKTsKKwkJCWJyZWFrOworCQljYXNlIFBDSVhDQ19SRVNQT05TRV9UWVBFX1hDUkI6CisJCQlsZW5ndGggPSB0ODZyLT5mbXQyLm9mZnNldDIgKyB0ODZyLT5mbXQyLmNvdW50MjsKKwkJCWxlbmd0aCA9IG1pbihQQ0lYQ0NfTUFYX1hDUkJfUkVTUE9OU0VfU0laRSwgbGVuZ3RoKTsKKwkJCW1lbWNweShtc2ctPm1lc3NhZ2UsIHJlcGx5LT5tZXNzYWdlLCBsZW5ndGgpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlQUklOVEsoIkludmFsaWQgaW50ZXJuYWwgcmVzcG9uc2UgdHlwZTogJWlcbiIsCisJCQkgICAgcmVzcF90eXBlLT50eXBlKTsKKwkJCW1lbWNweShtc2ctPm1lc3NhZ2UsICZlcnJvcl9yZXBseSwKKwkJCSAgICBzaXplb2YgZXJyb3JfcmVwbHkpOworCQl9CisJfSBlbHNlCisJCW1lbWNweShtc2ctPm1lc3NhZ2UsIHJlcGx5LT5tZXNzYWdlLCBzaXplb2YgZXJyb3JfcmVwbHkpOworCWNvbXBsZXRlKCYocmVzcF90eXBlLT53b3JrKSk7Cit9CisKK3N0YXRpYyBhdG9taWNfdCB6Y3J5cHRfc3RlcCA9IEFUT01JQ19JTklUKDApOworCisvKioKKyAqIFRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yIGNhbGxzIHRoaXMgZnVuY3Rpb24gaWYgaXQgcGlja2VkIHRoZSBQQ0lYQ0MvQ0VYMkMKKyAqIGRldmljZSB0byBoYW5kbGUgYSBtb2RleHBvIHJlcXVlc3QuCisgKiBAemRldjogcG9pbnRlciB0byB6Y3J5cHRfZGV2aWNlIHN0cnVjdHVyZSB0aGF0IGlkZW50aWZpZXMgdGhlCisgKgkgIFBDSVhDQy9DRVgyQyBkZXZpY2UgdG8gdGhlIHJlcXVlc3QgZGlzdHJpYnV0b3IKKyAqIEBtZXg6IHBvaW50ZXIgdG8gdGhlIG1vZGV4cG8gcmVxdWVzdCBidWZmZXIKKyAqLworc3RhdGljIGxvbmcgemNyeXB0X3BjaXhjY19tb2RleHBvKHN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2LAorCQkJCSAgc3RydWN0IGljYV9yc2FfbW9kZXhwbyAqbWV4KQoreworCXN0cnVjdCBhcF9tZXNzYWdlIGFwX21zZzsKKwlzdHJ1Y3QgcmVzcG9uc2VfdHlwZSByZXNwX3R5cGUgPSB7CisJCS50eXBlID0gUENJWENDX1JFU1BPTlNFX1RZUEVfSUNBLAorCX07CisJaW50IHJjOworCisJYXBfbXNnLm1lc3NhZ2UgPSAodm9pZCAqKSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJaWYgKCFhcF9tc2cubWVzc2FnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYXBfbXNnLnBzbWlkID0gKCgodW5zaWduZWQgbG9uZyBsb25nKSBjdXJyZW50LT5waWQpIDw8IDMyKSArCisJCQkJYXRvbWljX2luY19yZXR1cm4oJnpjcnlwdF9zdGVwKTsKKwlhcF9tc2cucHJpdmF0ZSA9ICZyZXNwX3R5cGU7CisJcmMgPSBJQ0FNRVhfbXNnX3RvX3R5cGU2TUVYX21zZ1goemRldiwgJmFwX21zZywgbWV4KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisJaW5pdF9jb21wbGV0aW9uKCZyZXNwX3R5cGUud29yayk7CisJYXBfcXVldWVfbWVzc2FnZSh6ZGV2LT5hcF9kZXYsICZhcF9tc2cpOworCXJjID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJJnJlc3BfdHlwZS53b3JrLCBQQ0lYQ0NfQ0xFQU5VUF9USU1FKTsKKwlpZiAocmMgPiAwKQorCQlyYyA9IGNvbnZlcnRfcmVzcG9uc2VfaWNhKHpkZXYsICZhcF9tc2csIG1leC0+b3V0cHV0ZGF0YSwKKwkJCQkJICBtZXgtPm91dHB1dGRhdGFsZW5ndGgpOworCWVsc2UgeworCQkvKiBTaWduYWwgcGVuZGluZyBvciBtZXNzYWdlIHRpbWVkIG91dC4gKi8KKwkJYXBfY2FuY2VsX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwkJaWYgKHJjID09IDApCisJCQkvKiBNZXNzYWdlIHRpbWVkIG91dC4gKi8KKwkJCXJjID0gLUVUSU1FOworCX0KK291dF9mcmVlOgorCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYXBfbXNnLm1lc3NhZ2UpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBUaGUgcmVxdWVzdCBkaXN0cmlidXRvciBjYWxscyB0aGlzIGZ1bmN0aW9uIGlmIGl0IHBpY2tlZCB0aGUgUENJWENDL0NFWDJDCisgKiBkZXZpY2UgdG8gaGFuZGxlIGEgbW9kZXhwb19jcnQgcmVxdWVzdC4KKyAqIEB6ZGV2OiBwb2ludGVyIHRvIHpjcnlwdF9kZXZpY2Ugc3RydWN0dXJlIHRoYXQgaWRlbnRpZmllcyB0aGUKKyAqCSAgUENJWENDL0NFWDJDIGRldmljZSB0byB0aGUgcmVxdWVzdCBkaXN0cmlidXRvcgorICogQGNydDogcG9pbnRlciB0byB0aGUgbW9kZXhwb2NfY3J0IHJlcXVlc3QgYnVmZmVyCisgKi8KK3N0YXRpYyBsb25nIHpjcnlwdF9wY2l4Y2NfbW9kZXhwb19jcnQoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsCisJCQkJICAgICAgc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQgKmNydCkKK3sKKwlzdHJ1Y3QgYXBfbWVzc2FnZSBhcF9tc2c7CisJc3RydWN0IHJlc3BvbnNlX3R5cGUgcmVzcF90eXBlID0geworCQkudHlwZSA9IFBDSVhDQ19SRVNQT05TRV9UWVBFX0lDQSwKKwl9OworCWludCByYzsKKworCWFwX21zZy5tZXNzYWdlID0gKHZvaWQgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCWlmICghYXBfbXNnLm1lc3NhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCWFwX21zZy5wc21pZCA9ICgoKHVuc2lnbmVkIGxvbmcgbG9uZykgY3VycmVudC0+cGlkKSA8PCAzMikgKworCQkJCWF0b21pY19pbmNfcmV0dXJuKCZ6Y3J5cHRfc3RlcCk7CisJYXBfbXNnLnByaXZhdGUgPSAmcmVzcF90eXBlOworCXJjID0gSUNBQ1JUX21zZ190b190eXBlNkNSVF9tc2dYKHpkZXYsICZhcF9tc2csIGNydCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9mcmVlOworCWluaXRfY29tcGxldGlvbigmcmVzcF90eXBlLndvcmspOworCWFwX3F1ZXVlX21lc3NhZ2UoemRldi0+YXBfZGV2LCAmYXBfbXNnKTsKKwlyYyA9IHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCSZyZXNwX3R5cGUud29yaywgUENJWENDX0NMRUFOVVBfVElNRSk7CisJaWYgKHJjID4gMCkKKwkJcmMgPSBjb252ZXJ0X3Jlc3BvbnNlX2ljYSh6ZGV2LCAmYXBfbXNnLCBjcnQtPm91dHB1dGRhdGEsCisJCQkJCSAgY3J0LT5vdXRwdXRkYXRhbGVuZ3RoKTsKKwllbHNlIHsKKwkJLyogU2lnbmFsIHBlbmRpbmcgb3IgbWVzc2FnZSB0aW1lZCBvdXQuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJCWlmIChyYyA9PSAwKQorCQkJLyogTWVzc2FnZSB0aW1lZCBvdXQuICovCisJCQlyYyA9IC1FVElNRTsKKwl9CitvdXRfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGFwX21zZy5tZXNzYWdlKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhlIHJlcXVlc3QgZGlzdHJpYnV0b3IgY2FsbHMgdGhpcyBmdW5jdGlvbiBpZiBpdCBwaWNrZWQgdGhlIFBDSVhDQy9DRVgyQworICogZGV2aWNlIHRvIGhhbmRsZSBhIHNlbmRfY3ByYiByZXF1ZXN0LgorICogQHpkZXY6IHBvaW50ZXIgdG8gemNyeXB0X2RldmljZSBzdHJ1Y3R1cmUgdGhhdCBpZGVudGlmaWVzIHRoZQorICoJICBQQ0lYQ0MvQ0VYMkMgZGV2aWNlIHRvIHRoZSByZXF1ZXN0IGRpc3RyaWJ1dG9yCisgKiBAeGNSQjogcG9pbnRlciB0byB0aGUgc2VuZF9jcHJiIHJlcXVlc3QgYnVmZmVyCisgKi8KK2xvbmcgemNyeXB0X3BjaXhjY19zZW5kX2NwcmIoc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXYsIHN0cnVjdCBpY2FfeGNSQiAqeGNSQikKK3sKKwlzdHJ1Y3QgYXBfbWVzc2FnZSBhcF9tc2c7CisJc3RydWN0IHJlc3BvbnNlX3R5cGUgcmVzcF90eXBlID0geworCQkudHlwZSA9IFBDSVhDQ19SRVNQT05TRV9UWVBFX1hDUkIsCisJfTsKKwlpbnQgcmM7CisKKwlhcF9tc2cubWVzc2FnZSA9ICh2b2lkICopIGttYWxsb2MoUENJWENDX01BWF9YQ1JCX01FU1NBR0VfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcF9tc2cubWVzc2FnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJYXBfbXNnLnBzbWlkID0gKCgodW5zaWduZWQgbG9uZyBsb25nKSBjdXJyZW50LT5waWQpIDw8IDMyKSArCisJCQkJYXRvbWljX2luY19yZXR1cm4oJnpjcnlwdF9zdGVwKTsKKwlhcF9tc2cucHJpdmF0ZSA9ICZyZXNwX3R5cGU7CisJcmMgPSBYQ1JCX21zZ190b190eXBlNkNQUkJfbXNnWCh6ZGV2LCAmYXBfbXNnLCB4Y1JCKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisJaW5pdF9jb21wbGV0aW9uKCZyZXNwX3R5cGUud29yayk7CisJYXBfcXVldWVfbWVzc2FnZSh6ZGV2LT5hcF9kZXYsICZhcF9tc2cpOworCXJjID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoCisJCQkJJnJlc3BfdHlwZS53b3JrLCBQQ0lYQ0NfQ0xFQU5VUF9USU1FKTsKKwlpZiAocmMgPiAwKQorCQlyYyA9IGNvbnZlcnRfcmVzcG9uc2VfeGNyYih6ZGV2LCAmYXBfbXNnLCB4Y1JCKTsKKwllbHNlIHsKKwkJLyogU2lnbmFsIHBlbmRpbmcgb3IgbWVzc2FnZSB0aW1lZCBvdXQuICovCisJCWFwX2NhbmNlbF9tZXNzYWdlKHpkZXYtPmFwX2RldiwgJmFwX21zZyk7CisJCWlmIChyYyA9PSAwKQorCQkJLyogTWVzc2FnZSB0aW1lZCBvdXQuICovCisJCQlyYyA9IC1FVElNRTsKKwl9CitvdXRfZnJlZToKKwltZW1zZXQoYXBfbXNnLm1lc3NhZ2UsIDB4MCwgYXBfbXNnLmxlbmd0aCk7CisJa2ZyZWUoYXBfbXNnLm1lc3NhZ2UpOworCXJldHVybiByYzsKK30KKworLyoqCisgKiBUaGUgY3J5cHRvIG9wZXJhdGlvbnMgZm9yIGEgUENJWENDL0NFWDJDIGNhcmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgemNyeXB0X29wcyB6Y3J5cHRfcGNpeGNjX29wcyA9IHsKKwkucnNhX21vZGV4cG8gPSB6Y3J5cHRfcGNpeGNjX21vZGV4cG8sCisJLnJzYV9tb2RleHBvX2NydCA9IHpjcnlwdF9wY2l4Y2NfbW9kZXhwb19jcnQsCisJLnNlbmRfY3ByYiA9IHpjcnlwdF9wY2l4Y2Nfc2VuZF9jcHJiLAorfTsKKworLyoqCisgKiBNaWNyby1jb2RlIGRldGVjdGlvbiBmdW5jdGlvbi4gSXRzIHNlbmRzIGEgbWVzc2FnZSB0byBhIHBjaXhjYyBjYXJkCisgKiB0byBmaW5kIG91dCB0aGUgbWljcm9jb2RlIGxldmVsLgorICogQGFwX2RldjogcG9pbnRlciB0byB0aGUgQVAgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHpjcnlwdF9wY2l4Y2NfbWNsKHN0cnVjdCBhcF9kZXZpY2UgKmFwX2RldikKK3sKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBtc2dbXSA9IHsKKwkJMHgwMCwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4NTgsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDQzLDB4NDEsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4NEIsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMSwweEM0LDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDcsMHgyNCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHhEQywweDAyLDB4MDAsMHgwMCwweDAwLDB4NTQsMHgzMiwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweEU4LAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA3LDB4MjQsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKKwkJMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAorCQkweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1MCwweDRCLDB4MDAsMHgwQSwKKwkJMHg0RCwweDUyLDB4NTAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLAorCQkweDAwLDB4NDIsMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsCisJCTB4MDYsMHgwNywweDA4LDB4MDksMHgwQSwweDBCLDB4MEMsMHgwRCwKKwkJMHgwRSwweDBGLDB4MDAsMHgxMSwweDIyLDB4MzMsMHg0NCwweDU1LAorCQkweDY2LDB4NzcsMHg4OCwweDk5LDB4QUEsMHhCQiwweENDLDB4REQsCisJCTB4RUUsMHhGRiwweEZGLDB4RUUsMHhERCwweENDLDB4QkIsMHhBQSwKKwkJMHg5OSwweDg4LDB4NzcsMHg2NiwweDU1LDB4NDQsMHgzMywweDIyLAorCQkweDExLDB4MDAsMHgwMSwweDIzLDB4NDUsMHg2NywweDg5LDB4QUIsCisJCTB4Q0QsMHhFRiwweEZFLDB4REMsMHhCQSwweDk4LDB4NzYsMHg1NCwKKwkJMHgzMiwweDEwLDB4MDAsMHg5QSwweDAwLDB4OTgsMHgwMCwweDAwLAorCQkweDFFLDB4MDAsMHgwMCwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsCisJCTB4MDQsMHgwMCwweDAwLDB4OEMsMHgwMCwweDAwLDB4MDAsMHg0MCwKKwkJMHgwMiwweDAwLDB4MDAsMHg0MCwweEJBLDB4RTgsMHgyMywweDNDLAorCQkweDc1LDB4RjMsMHg5MSwweDYxLDB4RDYsMHg3MywweDM5LDB4Q0YsCisJCTB4N0IsMHg2RCwweDhFLDB4NjEsMHg5NywweDYzLDB4OUUsMHhEOSwKKwkJMHg2MCwweDU1LDB4RDYsMHhDNywweEVGLDB4RjgsMHgxRSwweDYzLAorCQkweDk1LDB4MTcsMHhDQywweDI4LDB4NDUsMHg2MCwweDExLDB4QzUsCisJCTB4QzQsMHg0RSwweDY2LDB4QzYsMHhFNiwweEMzLDB4REUsMHg4QSwKKwkJMHgxOSwweDMwLDB4Q0YsMHgwRSwweEQ3LDB4QUEsMHhEQiwweDAxLAorCQkweEQ4LDB4MDAsMHhCQiwweDhGLDB4MzksMHg5RiwweDY0LDB4MjgsCisJCTB4RjUsMHg3QSwweDc3LDB4NDksMHhDQywweDZCLDB4QTMsMHg5MSwKKwkJMHg5NywweDcwLDB4RTcsMHg2MCwweDFFLDB4MzksMHhFMSwweEU1LAorCQkweDMzLDB4RTEsMHgxNSwweDYzLDB4NjksMHgwOCwweDgwLDB4NEMsCisJCTB4NjcsMHhDNCwweDQxLDB4OEYsMHg0OCwweERGLDB4MjYsMHg5OCwKKwkJMHhGMSwweEQ1LDB4OEQsMHg4OCwweEQ5LDB4NkEsMHhBNCwweDk2LAorCQkweEM1LDB4ODQsMHhEOSwweDMwLDB4NDksMHg2NywweDdELDB4MTksCisJCTB4QjEsMHhCMywweDQ1LDB4NEQsMHhCMiwweDUzLDB4OUEsMHg0NywKKwkJMHgzQywweDdDLDB4NTUsMHhCRiwweENDLDB4ODUsMHgwMCwweDM2LAorCQkweEYxLDB4M0QsMHg5MywweDUzCisJfTsKKwl1bnNpZ25lZCBsb25nIGxvbmcgcHNtaWQ7CisJc3RydWN0IENQUkJYICpjcHJieDsKKwljaGFyICpyZXBseTsKKwlpbnQgcmMsIGk7CisKKwlyZXBseSA9ICh2b2lkICopIGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcGx5KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJjID0gYXBfc2VuZChhcF9kZXYtPnFpZCwgMHgwMTAyMDMwNDA1MDYwNzA4VUxMLCBtc2csIHNpemVvZihtc2cpKTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisKKwkvKiBXYWl0IGZvciB0aGUgdGVzdCBtZXNzYWdlIHRvIGNvbXBsZXRlLiAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJbWRlbGF5KDMwMCk7CisJCXJjID0gYXBfcmVjdihhcF9kZXYtPnFpZCwgJnBzbWlkLCByZXBseSwgNDA5Nik7CisJCWlmIChyYyA9PSAwICYmIHBzbWlkID09IDB4MDEwMjAzMDQwNTA2MDcwOFVMTCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpID49IDYpIHsKKwkJLyogR290IG5vIGFuc3dlci4gKi8KKwkJcmMgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWNwcmJ4ID0gKHN0cnVjdCBDUFJCWCAqKSAocmVwbHkgKyA0OCk7CisJaWYgKGNwcmJ4LT5jY3BfcnRjb2RlID09IDggJiYgY3ByYngtPmNjcF9yc2NvZGUgPT0gMzMpCisJCXJjID0gWkNSWVBUX1BDSVhDQ19NQ0wyOworCWVsc2UKKwkJcmMgPSBaQ1JZUFRfUENJWENDX01DTDM7CitvdXRfZnJlZToKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIHJlcGx5KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogUHJvYmUgZnVuY3Rpb24gZm9yIFBDSVhDQy9DRVgyQyBjYXJkcy4gSXQgYWx3YXlzIGFjY2VwdHMgdGhlIEFQIGRldmljZQorICogc2luY2UgdGhlIGJ1c19tYXRjaCBhbHJlYWR5IGNoZWNrZWQgdGhlIGhhcmR3YXJlIHR5cGUuIFRoZSBQQ0lYQ0MKKyAqIGNhcmRzIGNvbWUgaW4gdHdvIGZsYXZvdXJzOiBtaWNybyBjb2RlIGxldmVsIDIgYW5kIG1pY3JvIGNvZGUgbGV2ZWwgMy4KKyAqIFRoaXMgaXMgY2hlY2tlZCBieSBzZW5kaW5nIGEgdGVzdCBtZXNzYWdlIHRvIHRoZSBkZXZpY2UuCisgKiBAYXBfZGV2OiBwb2ludGVyIHRvIHRoZSBBUCBkZXZpY2UuCisgKi8KK3N0YXRpYyBpbnQgemNyeXB0X3BjaXhjY19wcm9iZShzdHJ1Y3QgYXBfZGV2aWNlICphcF9kZXYpCit7CisJc3RydWN0IHpjcnlwdF9kZXZpY2UgKnpkZXY7CisJaW50IHJjOworCisJemRldiA9IHpjcnlwdF9kZXZpY2VfYWxsb2MoUENJWENDX01BWF9SRVNQT05TRV9TSVpFKTsKKwlpZiAoIXpkZXYpCisJCXJldHVybiAtRU5PTUVNOworCXpkZXYtPmFwX2RldiA9IGFwX2RldjsKKwl6ZGV2LT5vcHMgPSAmemNyeXB0X3BjaXhjY19vcHM7CisJemRldi0+b25saW5lID0gMTsKKwlpZiAoYXBfZGV2LT5kZXZpY2VfdHlwZSA9PSBBUF9ERVZJQ0VfVFlQRV9QQ0lYQ0MpIHsKKwkJcmMgPSB6Y3J5cHRfcGNpeGNjX21jbChhcF9kZXYpOworCQlpZiAocmMgPCAwKSB7CisJCQl6Y3J5cHRfZGV2aWNlX2ZyZWUoemRldik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwkJemRldi0+dXNlcl9zcGFjZV90eXBlID0gcmM7CisJCWlmIChyYyA9PSBaQ1JZUFRfUENJWENDX01DTDIpIHsKKwkJCXpkZXYtPnR5cGVfc3RyaW5nID0gIlBDSVhDQ19NQ0wyIjsKKwkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IFBDSVhDQ19NQ0wyX1NQRUVEX1JBVElORzsKKwkJCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IFBDSVhDQ19NSU5fTU9EX1NJWkVfT0xEOworCQkJemRldi0+bWF4X21vZF9zaXplID0gUENJWENDX01BWF9NT0RfU0laRTsKKwkJfSBlbHNlIHsKKwkJCXpkZXYtPnR5cGVfc3RyaW5nID0gIlBDSVhDQ19NQ0wzIjsKKwkJCXpkZXYtPnNwZWVkX3JhdGluZyA9IFBDSVhDQ19NQ0wzX1NQRUVEX1JBVElORzsKKwkJCXpkZXYtPm1pbl9tb2Rfc2l6ZSA9IFBDSVhDQ19NSU5fTU9EX1NJWkU7CisJCQl6ZGV2LT5tYXhfbW9kX3NpemUgPSBQQ0lYQ0NfTUFYX01PRF9TSVpFOworCQl9CisJfSBlbHNlIHsKKwkJemRldi0+dXNlcl9zcGFjZV90eXBlID0gWkNSWVBUX0NFWDJDOworCQl6ZGV2LT50eXBlX3N0cmluZyA9ICJDRVgyQyI7CisJCXpkZXYtPnNwZWVkX3JhdGluZyA9IENFWDJDX1NQRUVEX1JBVElORzsKKwkJemRldi0+bWluX21vZF9zaXplID0gUENJWENDX01JTl9NT0RfU0laRTsKKwkJemRldi0+bWF4X21vZF9zaXplID0gUENJWENDX01BWF9NT0RfU0laRTsKKwl9CisJYXBfZGV2LT5yZXBseSA9ICZ6ZGV2LT5yZXBseTsKKwlhcF9kZXYtPnByaXZhdGUgPSB6ZGV2OworCXJjID0gemNyeXB0X2RldmljZV9yZWdpc3Rlcih6ZGV2KTsKKwlpZiAocmMpCisJCWdvdG8gb3V0X2ZyZWU7CisJcmV0dXJuIDA7CisKKyBvdXRfZnJlZToKKwlhcF9kZXYtPnByaXZhdGUgPSBOVUxMOworCXpjcnlwdF9kZXZpY2VfZnJlZSh6ZGV2KTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogVGhpcyBpcyBjYWxsZWQgdG8gcmVtb3ZlIHRoZSBleHRlbmRlZCBQQ0lYQ0MvQ0VYMkMgZHJpdmVyIGluZm9ybWF0aW9uCisgKiBpZiBhbiBBUCBkZXZpY2UgaXMgcmVtb3ZlZC4KKyAqLworc3RhdGljIHZvaWQgemNyeXB0X3BjaXhjY19yZW1vdmUoc3RydWN0IGFwX2RldmljZSAqYXBfZGV2KQoreworCXN0cnVjdCB6Y3J5cHRfZGV2aWNlICp6ZGV2ID0gYXBfZGV2LT5wcml2YXRlOworCisJemNyeXB0X2RldmljZV91bnJlZ2lzdGVyKHpkZXYpOworfQorCitpbnQgX19pbml0IHpjcnlwdF9wY2l4Y2NfaW5pdCh2b2lkKQoreworCXJldHVybiBhcF9kcml2ZXJfcmVnaXN0ZXIoJnpjcnlwdF9wY2l4Y2NfZHJpdmVyLCBUSElTX01PRFVMRSwgInBjaXhjYyIpOworfQorCit2b2lkIHpjcnlwdF9wY2l4Y2NfZXhpdCh2b2lkKQoreworCWFwX2RyaXZlcl91bnJlZ2lzdGVyKCZ6Y3J5cHRfcGNpeGNjX2RyaXZlcik7Cit9CisKKyNpZm5kZWYgQ09ORklHX1pDUllQVF9NT05PTElUSElDCittb2R1bGVfaW5pdCh6Y3J5cHRfcGNpeGNjX2luaXQpOworbW9kdWxlX2V4aXQoemNyeXB0X3BjaXhjY19leGl0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmggYi9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzhmZjMwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zMzkwL2NyeXB0by96Y3J5cHRfcGNpeGNjLmgKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL3MzOTAvY3J5cHRvL3pjcnlwdF9wY2l4Y2MuaAorICoKKyAqICB6Y3J5cHQgMi4xLjAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAgMjAwMSwgMjAwNiBJQk0gQ29ycG9yYXRpb24KKyAqICBBdXRob3Iocyk6IFJvYmVydCBCdXJyb3VnaHMKKyAqCSAgICAgICBFcmljIFJvc3NtYW4gKGVkcm9zc21hQHVzLmlibS5jb20pCisgKgorICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQorICogIE1ham9yIGNsZWFudXAgJiBkcml2ZXIgc3BsaXQ6IE1hcnRpbiBTY2h3aWRlZnNreSA8c2Nod2lkZWZza3lAZGUuaWJtLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX1pDUllQVF9QQ0lYQ0NfSF8KKyNkZWZpbmUgX1pDUllQVF9QQ0lYQ0NfSF8KKworLyoqCisgKiBDUFJCWAorICoJICBOb3RlIHRoYXQgYWxsIHNob3J0cyBhbmQgaW50cyBhcmUgYmlnLWVuZGlhbi4KKyAqCSAgQWxsIHBvaW50ZXIgZmllbGRzIGFyZSAxNiBieXRlcyBsb25nLCBhbmQgbWVhbiBub3RoaW5nLgorICoKKyAqCSAgQSByZXF1ZXN0IENQUkIgaXMgZm9sbG93ZWQgYnkgYSByZXF1ZXN0X3BhcmFtZXRlcl9ibG9jay4KKyAqCisgKgkgIFRoZSByZXF1ZXN0IChvciByZXBseSkgcGFyYW1ldGVyIGJsb2NrIGlzIG9yZ2FuaXplZCB0aHVzOgorICoJICAgIGZ1bmN0aW9uIGNvZGUKKyAqCSAgICBWVUQgYmxvY2sKKyAqCSAgICBrZXkgYmxvY2sKKyAqLworc3RydWN0IENQUkJYIHsKKwl1bnNpZ25lZCBzaG9ydCBjcHJiX2xlbjsJLyogQ1BSQiBsZW5ndGgJICAgICAgMjIwCSAqLworCXVuc2lnbmVkIGNoYXIgIGNwcmJfdmVyX2lkOwkvKiBDUFJCIHZlcnNpb24gaWQuICAgMHgwMgkgKi8KKwl1bnNpZ25lZCBjaGFyICBwYWRfMDAwWzNdOwkvKiBBbGlnbm1lbnQgcGFkIGJ5dGVzCQkgKi8KKwl1bnNpZ25lZCBjaGFyICBmdW5jX2lkWzJdOwkvKiBmdW5jdGlvbiBpZAkgICAgICAweDU0MzIJICovCisJdW5zaWduZWQgY2hhciAgY3ByYl9mbGFnc1s0XTsJLyogRmxhZ3MJCQkgKi8KKwl1bnNpZ25lZCBpbnQgICByZXFfcGFybWw7CS8qIHJlcXVlc3QgcGFyYW1ldGVyIGJ1ZmZlciBsZW4JICovCisJdW5zaWduZWQgaW50ICAgcmVxX2RhdGFsOwkvKiByZXF1ZXN0IGRhdGEgYnVmZmVyCQkgKi8KKwl1bnNpZ25lZCBpbnQgICBycGxfbXNnYmw7CS8qIHJlcGx5ICBtZXNzYWdlIGJsb2NrIGxlbmd0aAkgKi8KKwl1bnNpZ25lZCBpbnQgICBycGxkX3Bhcm1sOwkvKiByZXBsaWVkIHBhcmFtZXRlciBibG9jayBsZW4JICovCisJdW5zaWduZWQgaW50ICAgcnBsX2RhdGFsOwkvKiByZXBseSBkYXRhIGJsb2NrIGxlbgkJICovCisJdW5zaWduZWQgaW50ICAgcnBsZF9kYXRhbDsJLyogcmVwbGllZCBkYXRhIGJsb2NrIGxlbgkgKi8KKwl1bnNpZ25lZCBpbnQgICByZXFfZXh0Ymw7CS8qIHJlcXVlc3QgZXh0ZW5zaW9uIGJsb2NrIGxlbgkgKi8KKwl1bnNpZ25lZCBjaGFyICBwYWRfMDAxWzRdOwkvKiByZXNlcnZlZAkJCSAqLworCXVuc2lnbmVkIGludCAgIHJwbGRfZXh0Ymw7CS8qIHJlcGxpZWQgZXh0ZW5zaW9uIGJsb2NrIGxlbgkgKi8KKwl1bnNpZ25lZCBjaGFyICByZXFfcGFybWJbMTZdOwkvKiByZXF1ZXN0IHBhcm0gYmxvY2sgJ2FkZHJlc3MnCSAqLworCXVuc2lnbmVkIGNoYXIgIHJlcV9kYXRhYlsxNl07CS8qIHJlcXVlc3QgZGF0YSBibG9jayAnYWRkcmVzcycJICovCisJdW5zaWduZWQgY2hhciAgcnBsX3Bhcm1iWzE2XTsJLyogcmVwbHkgcGFybSBibG9jayAnYWRkcmVzcycJICovCisJdW5zaWduZWQgY2hhciAgcnBsX2RhdGFiWzE2XTsJLyogcmVwbHkgZGF0YSBibG9jayAnYWRkcmVzcycJICovCisJdW5zaWduZWQgY2hhciAgcmVxX2V4dGJbMTZdOwkvKiByZXF1ZXN0IGV4dGVuc2lvbiBibG9jayAnYWRkcicqLworCXVuc2lnbmVkIGNoYXIgIHJwbF9leHRiWzE2XTsJLyogcmVwbHkgZXh0ZW5zaW9uIGJsb2NrICdhZGRyZXMnKi8KKwl1bnNpZ25lZCBzaG9ydCBjY3BfcnRjb2RlOwkvKiBzZXJ2ZXIgcmV0dXJuIGNvZGUJCSAqLworCXVuc2lnbmVkIHNob3J0IGNjcF9yc2NvZGU7CS8qIHNlcnZlciByZWFzb24gY29kZQkJICovCisJdW5zaWduZWQgaW50ICAgbWFjX2RhdGFfbGVuOwkvKiBNYWMgRGF0YSBMZW5ndGgJCSAqLworCXVuc2lnbmVkIGNoYXIgIGxvZ29uX2lkWzhdOwkvKiBMb2dvbiBJZGVudGlmaWVyCQkgKi8KKwl1bnNpZ25lZCBjaGFyICBtYWNfdmFsdWVbOF07CS8qIE1hYyBWYWx1ZQkJCSAqLworCXVuc2lnbmVkIGNoYXIgIG1hY19jb250ZW50X2ZsZ3M7LyogTWFjIGNvbnRlbnQgZmxhZyBieXRlCSAqLworCXVuc2lnbmVkIGNoYXIgIHBhZF8wMDI7CQkvKiBBbGlnbm1lbnQJCQkgKi8KKwl1bnNpZ25lZCBzaG9ydCBkb21haW47CQkvKiBEb21haW4JCQkgKi8KKwl1bnNpZ25lZCBjaGFyICBwYWRfMDAzWzEyXTsJLyogRG9tYWluIG1hc2tzCQkJICovCisJdW5zaWduZWQgY2hhciAgcGFkXzAwNFszNl07CS8qIHJlc2VydmVkCQkJICovCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitpbnQgemNyeXB0X3BjaXhjY19pbml0KHZvaWQpOwordm9pZCB6Y3J5cHRfcGNpeGNjX2V4aXQodm9pZCk7CisKKyNlbmRpZiAvKiBfWkNSWVBUX1BDSVhDQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnIGIvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCmluZGV4IDU0ODg1NDcuLjFhOTNmYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKQEAgLTkyLDE1ICs5Miw2IEBACiAJICBJZiBDT05GSUdfUUVUSCBpcyBzd2l0Y2hlZCBvbiwgdGhpcyBvcHRpb24gd2lsbCBpbmNsdWRlIElFRUUKIAkgIDgwMi4xcSBWTEFOIHN1cHBvcnQgaW4gdGhlIHFldGggZGV2aWNlIGRyaXZlci4KIAotY29uZmlnIFFFVEhfUEVSRl9TVEFUUwotCWJvb2wgIlBlcmZvcm1hbmNlIHN0YXRpc3RpY3MgaW4gL3Byb2MiCi0JZGVwZW5kcyBvbiBRRVRICi0JaGVscAotCSAgV2hlbiBzd2l0Y2hlZCBvbiwgdGhpcyBvcHRpb24gd2lsbCBhZGQgYSBmaWxlIGluIHRoZSBwcm9jLWZzCi0JICAoL3Byb2MvcWV0aF9wZXJmX3N0YXRzKSBjb250YWluaW5nIHBlcmZvcm1hbmNlIHN0YXRpc3RpY3MuIEl0Ci0JICBtYXkgc2xpZ2h0bHkgaW1wYWN0IHBlcmZvcm1hbmNlLCBzbyB0aGlzIGlzIG9ubHkgcmVjb21tZW5kZWQgZm9yCi0JICBpbnRlcm5hbCB0dW5pbmcgb2YgdGhlIGRldmljZSBkcml2ZXIuCi0KIGNvbmZpZyBDQ1dHUk9VUAogIAl0cmlzdGF0ZQogCWRlZmF1bHQgKExDUyB8fCBDVEMgfHwgUUVUSCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCmluZGV4IDY3NzVhODMuLjQ3NzdlMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQpAQCAtMTAsNyArMTAsNiBAQAogb2JqLSQoQ09ORklHX0NUQykgKz0gY3RjLm8gZnNtLm8gY3UzMDg4Lm8KIG9iai0kKENPTkZJR19MQ1MpICs9IGxjcy5vIGN1MzA4OC5vCiBvYmotJChDT05GSUdfQ0xBVykgKz0gY2xhdy5vIGN1MzA4OC5vCi1vYmotJChDT05GSUdfTVBDKSArPSBjdGNtcGMubyBmc20ubyBjdTMwODgubwogcWV0aC15IDo9IHFldGhfbWFpbi5vIHFldGhfbXBjLm8gcWV0aF9zeXMubyBxZXRoX2VkZHAubyAKIHFldGgtJChDT05GSUdfUFJPQ19GUykgKz0gcWV0aF9wcm9jLm8KIG9iai0kKENPTkZJR19RRVRIKSArPSBxZXRoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvY3RjbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKaW5kZXggOGE0YjU4MS4uMzI1N2MyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9jdGNtYWluLmMKQEAgLTE3MTQsNiArMTcxNCw5IEBACiAJCWtmcmVlKGNoKTsKIAkJcmV0dXJuIDA7CiAJfQorCisJc3Bpbl9sb2NrX2luaXQoJmNoLT5jb2xsZWN0X2xvY2spOworCiAJZnNtX3NldHRpbWVyKGNoLT5mc20sICZjaC0+dGltZXIpOwogCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNoLT5pb19xdWV1ZSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2gtPmNvbGxlY3RfcXVldWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwppbmRleCAwZTg2M2RmLi44MjFkZGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwpAQCAtMzM1LDggKzMzNSw4IEBACiAKICNlbHNlCiAKLSNkZWZpbmUgaXVjdl9kZWJ1ZyhsdmwsIGZtdCwgYXJncy4uLikKLSNkZWZpbmUgaXVjdl9kdW1waXQodGl0bGUsIGJ1ZiwgbGVuKQorI2RlZmluZSBpdWN2X2RlYnVnKGx2bCwgZm10LCBhcmdzLi4uKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGl1Y3ZfZHVtcGl0KHRpdGxlLCBidWYsIGxlbikJZG8geyB9IHdoaWxlICgwKQogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYyBiL2RyaXZlcnMvczM5MC9uZXQvbGNzLmMKaW5kZXggMmVkZWQ1NS4uMTZhYzY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9sY3MuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2xjcy5jCkBAIC02NzAsOSArNjcwLDggQEAKIAlpbnQgaW5kZXgsIHJjOwogCiAJTENTX0RCRl9URVhUKDUsIHRyYWNlLCAicmR5YnVmZiIpOwotCWlmIChidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9MT0NLRUQgJiYKLQkgICAgYnVmZmVyLT5zdGF0ZSAhPSBCVUZfU1RBVEVfUFJPQ0VTU0VEKQotCQlCVUcoKTsKKwlCVUdfT04oYnVmZmVyLT5zdGF0ZSAhPSBCVUZfU1RBVEVfTE9DS0VEICYmCisJICAgICAgIGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX1BST0NFU1NFRCk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoZ2V0X2Njd2Rldl9sb2NrKGNoYW5uZWwtPmNjd2RldiksIGZsYWdzKTsKIAlidWZmZXItPnN0YXRlID0gQlVGX1NUQVRFX1JFQURZOwogCWluZGV4ID0gYnVmZmVyIC0gY2hhbm5lbC0+aW9iOwpAQCAtNjk2LDggKzY5NSw3IEBACiAJaW50IGluZGV4LCBwcmV2LCBuZXh0OwogCiAJTENTX0RCRl9URVhUKDUsIHRyYWNlLCAicHJjc2J1ZmYiKTsKLQlpZiAoYnVmZmVyLT5zdGF0ZSAhPSBCVUZfU1RBVEVfUkVBRFkpCi0JCUJVRygpOworCUJVR19PTihidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9SRUFEWSk7CiAJYnVmZmVyLT5zdGF0ZSA9IEJVRl9TVEFURV9QUk9DRVNTRUQ7CiAJaW5kZXggPSBidWZmZXIgLSBjaGFubmVsLT5pb2I7CiAJcHJldiA9IChpbmRleCAtIDEpICYgKExDU19OVU1fQlVGRlMgLSAxKTsKQEAgLTcyOSw5ICs3MjcsOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlMQ1NfREJGX1RFWFQoNSwgdHJhY2UsICJyZWxidWZmIik7Ci0JaWYgKGJ1ZmZlci0+c3RhdGUgIT0gQlVGX1NUQVRFX0xPQ0tFRCAmJgotCSAgICBidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9QUk9DRVNTRUQpCi0JCUJVRygpOworCUJVR19PTihidWZmZXItPnN0YXRlICE9IEJVRl9TVEFURV9MT0NLRUQgJiYKKwkgICAgICAgYnVmZmVyLT5zdGF0ZSAhPSBCVUZfU1RBVEVfUFJPQ0VTU0VEKTsKIAlzcGluX2xvY2tfaXJxc2F2ZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwogCWJ1ZmZlci0+c3RhdGUgPSBCVUZfU1RBVEVfRU1QVFk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShnZXRfY2N3ZGV2X2xvY2soY2hhbm5lbC0+Y2N3ZGV2KSwgZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9uZXRpdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwppbmRleCA1ZDZlNmNiLi5kN2QxY2MwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L25ldGl1Y3YuYwpAQCAtMTEyLDcgKzExMiwxMiBAQAogLyoqCiAgKiBMaW5rZWQgbGlzdCBvZiBhbGwgY29ubmVjdGlvbiBzdHJ1Y3RzLgogICovCi1zdGF0aWMgc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqaXVjdl9jb25uZWN0aW9uczsKK3N0cnVjdCBpdWN2X2Nvbm5lY3Rpb25fc3RydWN0IHsKKwlzdHJ1Y3QgaXVjdl9jb25uZWN0aW9uICppdWN2X2Nvbm5lY3Rpb25zOworCXJ3bG9ja190IGl1Y3Zfcndsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCBpdWN2X2Nvbm5lY3Rpb25fc3RydWN0IGl1Y3ZfY29ubnM7CiAKIC8qKgogICogUmVwcmVzZW50YXRpb24gb2YgZXZlbnQtZGF0YSBmb3IgdGhlCkBAIC0xMzY4LDggKzEzNzMsMTAgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHByaXYtPmNvbm4tPm5ldGRldjsKIAljaGFyICAgICpwOwogCWNoYXIgICAgKnRtcDsKLQljaGFyIAl1c2VybmFtZVsxMF07CisJY2hhciAJdXNlcm5hbWVbOV07CiAJaW50IAlpOworCXN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKipjbGlzdCA9ICZpdWN2X2Nvbm5zLml1Y3ZfY29ubmVjdGlvbnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKGNvdW50PjkpIHsKQEAgLTEzODIsNyArMTM4OSw3IEBACiAJdG1wID0gc3Ryc2VwKChjaGFyICoqKSAmYnVmLCAiXG4iKTsKIAlmb3IgKGk9MCwgcD10bXA7IGk8OCAmJiAqcDsgaSsrLCBwKyspIHsKIAkJaWYgKGlzYWxudW0oKnApIHx8ICgqcCA9PSAnJCcpKQotCQkJdXNlcm5hbWVbaV09ICpwOworCQkJdXNlcm5hbWVbaV09IHRvdXBwZXIoKnApOwogCQllbHNlIGlmICgqcCA9PSAnXG4nKSB7CiAJCQkvKiB0cmFpbGluZyBsZiwgZ3JyICovCiAJCQlicmVhazsKQEAgLTEzOTUsMTEgKzE0MDIsMTEgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCXdoaWxlIChpPDkpCisJd2hpbGUgKGk8OCkKIAkJdXNlcm5hbWVbaSsrXSA9ICcgJzsKLQl1c2VybmFtZVs5XSA9ICdcMCc7CisJdXNlcm5hbWVbOF0gPSAnXDAnOwogCi0JaWYgKG1lbWNtcCh1c2VybmFtZSwgcHJpdi0+Y29ubi0+dXNlcmlkLCA4KSkgeworCWlmIChtZW1jbXAodXNlcm5hbWUsIHByaXYtPmNvbm4tPnVzZXJpZCwgOSkpIHsKIAkJLyogdXNlcm5hbWUgY2hhbmdlZCAqLwogCQlpZiAobmRldi0+ZmxhZ3MgJiAoSUZGX1VQIHwgSUZGX1JVTk5JTkcpKSB7CiAJCQlQUklOVF9XQVJOKApAQCAtMTQxMCw2ICsxNDE3LDE5IEBACiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJfQorCXJlYWRfbG9ja19pcnFzYXZlKCZpdWN2X2Nvbm5zLml1Y3Zfcndsb2NrLCBmbGFncyk7CisJd2hpbGUgKCpjbGlzdCkgeworICAgICAgICAgICAgICAgIGlmICghc3RybmNtcCh1c2VybmFtZSwgKCpjbGlzdCktPnVzZXJpZCwgOSkgfHwKKwkJICAgICgoKmNsaXN0KS0+bmV0ZGV2ICE9IG5kZXYpKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2xpc3QgPSAmKCgqY2xpc3QpLT5uZXh0KTsKKyAgICAgICAgfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKKyAgICAgICAgaWYgKCpjbGlzdCkgeworICAgICAgICAgICAgICAgIFBSSU5UX1dBUk4oIm5ldGl1Y3Y6IENvbm5lY3Rpb24gdG8gJXMgYWxyZWFkeSBleGlzdHNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FRVhJU1Q7CisgICAgICAgIH0KIAltZW1jcHkocHJpdi0+Y29ubi0+dXNlcmlkLCB1c2VybmFtZSwgOSk7CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0xNzgxLDEzICsxODAxLDE1IEBACiBzdGF0aWMgc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqCiBuZXRpdWN2X25ld19jb25uZWN0aW9uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgKnVzZXJuYW1lKQogewotCXN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKipjbGlzdCA9ICZpdWN2X2Nvbm5lY3Rpb25zOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqKmNsaXN0ID0gJml1Y3ZfY29ubnMuaXVjdl9jb25uZWN0aW9uczsKIAlzdHJ1Y3QgaXVjdl9jb25uZWN0aW9uICpjb25uID0KIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiksIEdGUF9LRVJORUwpOwogCiAJaWYgKGNvbm4pIHsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY29ubi0+Y29sbGVjdF9xdWV1ZSk7CiAJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmNvbm4tPmNvbW1pdF9xdWV1ZSk7CisJCXNwaW5fbG9ja19pbml0KCZjb25uLT5jb2xsZWN0X2xvY2spOwogCQljb25uLT5tYXhfYnVmZnNpemUgPSBORVRJVUNWX0JVRlNJWkVfREVGQVVMVDsKIAkJY29ubi0+bmV0ZGV2ID0gZGV2OwogCkBAIC0xODIyLDggKzE4NDQsMTAgQEAKIAkJCWZzbV9uZXdzdGF0ZShjb25uLT5mc20sIENPTk5fU1RBVEVfU1RPUFBFRCk7CiAJCX0KIAorCQl3cml0ZV9sb2NrX2lycXNhdmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKIAkJY29ubi0+bmV4dCA9ICpjbGlzdDsKIAkJKmNsaXN0ID0gY29ubjsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuIGNvbm47CiB9CkBAIC0xODM1LDE0ICsxODU5LDE3IEBACiBzdGF0aWMgdm9pZAogbmV0aXVjdl9yZW1vdmVfY29ubmVjdGlvbihzdHJ1Y3QgaXVjdl9jb25uZWN0aW9uICpjb25uKQogewotCXN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKipjbGlzdCA9ICZpdWN2X2Nvbm5lY3Rpb25zOworCXN0cnVjdCBpdWN2X2Nvbm5lY3Rpb24gKipjbGlzdCA9ICZpdWN2X2Nvbm5zLml1Y3ZfY29ubmVjdGlvbnM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCUlVQ1ZfREJGX1RFWFQodHJhY2UsIDMsIF9fRlVOQ1RJT05fXyk7CiAJaWYgKGNvbm4gPT0gTlVMTCkKIAkJcmV0dXJuOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmaXVjdl9jb25ucy5pdWN2X3J3bG9jaywgZmxhZ3MpOwogCXdoaWxlICgqY2xpc3QpIHsKIAkJaWYgKCpjbGlzdCA9PSBjb25uKSB7CiAJCQkqY2xpc3QgPSBjb25uLT5uZXh0OworCQkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKIAkJCWlmIChjb25uLT5oYW5kbGUpIHsKIAkJCQlpdWN2X3VucmVnaXN0ZXJfcHJvZ3JhbShjb25uLT5oYW5kbGUpOwogCQkJCWNvbm4tPmhhbmRsZSA9IE5VTEw7CkBAIC0xODU1LDYgKzE4ODIsNyBAQAogCQl9CiAJCWNsaXN0ID0gJigoKmNsaXN0KS0+bmV4dCk7CiAJfQorCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZpdWN2X2Nvbm5zLml1Y3Zfcndsb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMTk0Nyw5ICsxOTc1LDExIEBACiBjb25uX3dyaXRlKHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWNoYXIgKnA7Ci0JY2hhciB1c2VybmFtZVsxMF07CisJY2hhciB1c2VybmFtZVs5XTsKIAlpbnQgaSwgcmV0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqKmNsaXN0ID0gJml1Y3ZfY29ubnMuaXVjdl9jb25uZWN0aW9uczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKIAlpZiAoY291bnQ+OSkgewpAQCAtMTk2MCw3ICsxOTkwLDcgQEAKIAogCWZvciAoaT0wLCBwPShjaGFyICopYnVmOyBpPDggJiYgKnA7IGkrKywgcCsrKSB7CiAJCWlmIChpc2FsbnVtKCpwKSB8fCAoKnAgPT0gJyQnKSkKLQkJCXVzZXJuYW1lW2ldPSAqcDsKKwkJCXVzZXJuYW1lW2ldPSB0b3VwcGVyKCpwKTsKIAkJZWxzZSBpZiAoKnAgPT0gJ1xuJykgewogCQkJLyogdHJhaWxpbmcgbGYsIGdyciAqLwogCQkJYnJlYWs7CkBAIC0xOTcxLDkgKzIwMDEsMjIgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCXdoaWxlIChpPDkpCisJd2hpbGUgKGk8OCkKIAkJdXNlcm5hbWVbaSsrXSA9ICcgJzsKLQl1c2VybmFtZVs5XSA9ICdcMCc7CisJdXNlcm5hbWVbOF0gPSAnXDAnOworCisJcmVhZF9sb2NrX2lycXNhdmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoKmNsaXN0KSB7CisJCWlmICghc3RybmNtcCh1c2VybmFtZSwgKCpjbGlzdCktPnVzZXJpZCwgOSkpCisJCQlicmVhazsKKwkJY2xpc3QgPSAmKCgqY2xpc3QpLT5uZXh0KTsKKwl9CisJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmaXVjdl9jb25ucy5pdWN2X3J3bG9jaywgZmxhZ3MpOworCWlmICgqY2xpc3QpIHsKKwkJUFJJTlRfV0FSTigibmV0aXVjdjogQ29ubmVjdGlvbiB0byAlcyBhbHJlYWR5IGV4aXN0c1xuIiwKKwkJCXVzZXJuYW1lKTsKKwkJcmV0dXJuIC1FRVhJU1Q7CisJfQogCWRldiA9IG5ldGl1Y3ZfaW5pdF9uZXRkZXZpY2UodXNlcm5hbWUpOwogCWlmICghZGV2KSB7CiAJCVBSSU5UX1dBUk4oCkBAIC0yMDE1LDcgKzIwNTgsOCBAQAogc3RhdGljIHNzaXplX3QKIHJlbW92ZV93cml0ZSAoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqKmNsaXN0ID0gJml1Y3ZfY29ubmVjdGlvbnM7CisJc3RydWN0IGl1Y3ZfY29ubmVjdGlvbiAqKmNsaXN0ID0gJml1Y3ZfY29ubnMuaXVjdl9jb25uZWN0aW9uczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKICAgICAgICAgc3RydWN0IG5ldGl1Y3ZfcHJpdiAqcHJpdjsKICAgICAgICAgc3RydWN0IGRldmljZSAqZGV2OwpAQCAtMjAyNiw3ICsyMDcwLDcgQEAKICAgICAgICAgSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKIAogICAgICAgICBpZiAoY291bnQgPj0gSUZOQU1TSVopCi0gICAgICAgICAgICAgICAgY291bnQgPSBJRk5BTVNJWi0xOworICAgICAgICAgICAgICAgIGNvdW50ID0gSUZOQU1TSVogLSAxOzsKIAogICAgICAgICBmb3IgKGk9MCwgcD0oY2hhciAqKWJ1ZjsgaTxjb3VudCAmJiAqcDsgaSsrLCBwKyspIHsKICAgICAgICAgICAgICAgICBpZiAoKCpwID09ICdcbicpIHx8ICgqcCA9PSAnICcpKSB7CkBAIC0yMDM4LDYgKzIwODIsNyBAQAogICAgICAgICB9CiAgICAgICAgIG5hbWVbaV0gPSAnXDAnOwogCisJcmVhZF9sb2NrX2lycXNhdmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKICAgICAgICAgd2hpbGUgKCpjbGlzdCkgewogICAgICAgICAgICAgICAgIG5kZXYgPSAoKmNsaXN0KS0+bmV0ZGV2OwogICAgICAgICAgICAgICAgIHByaXYgPSAoc3RydWN0IG5ldGl1Y3ZfcHJpdiopbmRldi0+cHJpdjsKQEAgLTIwNDcsNiArMjA5Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjbGlzdCA9ICYoKCpjbGlzdCktPm5leHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQorCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZpdWN2X2Nvbm5zLml1Y3Zfcndsb2NrLCBmbGFncyk7CiAgICAgICAgICAgICAgICAgaWYgKG5kZXYtPmZsYWdzICYgKElGRl9VUCB8IElGRl9SVU5OSU5HKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgUFJJTlRfV0FSTigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldGl1Y3Y6IG5ldCBkZXZpY2UgJXMgYWN0aXZlIHdpdGggcGVlciAlc1xuIiwKQEAgLTIwNjAsNiArMjEwNiw3IEBACiAgICAgICAgICAgICAgICAgbmV0aXVjdl91bnJlZ2lzdGVyX2RldmljZShkZXYpOwogICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsKICAgICAgICAgfQorCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJml1Y3ZfY29ubnMuaXVjdl9yd2xvY2ssIGZsYWdzKTsKICAgICAgICAgUFJJTlRfV0FSTigibmV0aXVjdjogbmV0IGRldmljZSAlcyB1bmtub3duXG4iLCBuYW1lKTsKIAlJVUNWX0RCRl9URVhUKGRhdGEsIDIsICJyZW1vdmVfd3JpdGU6IHVua25vd24gZGV2aWNlXG4iKTsKICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CkBAIC0yMDc3LDggKzIxMjQsOCBAQAogbmV0aXVjdl9leGl0KHZvaWQpCiB7CiAJSVVDVl9EQkZfVEVYVCh0cmFjZSwgMywgX19GVU5DVElPTl9fKTsKLQl3aGlsZSAoaXVjdl9jb25uZWN0aW9ucykgewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGl1Y3ZfY29ubmVjdGlvbnMtPm5ldGRldjsKKwl3aGlsZSAoaXVjdl9jb25ucy5pdWN2X2Nvbm5lY3Rpb25zKSB7CisJCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gaXVjdl9jb25ucy5pdWN2X2Nvbm5lY3Rpb25zLT5uZXRkZXY7CiAJCXN0cnVjdCBuZXRpdWN2X3ByaXYgKnByaXYgPSAoc3RydWN0IG5ldGl1Y3ZfcHJpdiopbmRldi0+cHJpdjsKIAkJc3RydWN0IGRldmljZSAqZGV2ID0gcHJpdi0+ZGV2OwogCkBAIC0yMTIwLDYgKzIxNjcsNyBAQAogCWlmICghcmV0KSB7CiAJCXJldCA9IGRyaXZlcl9jcmVhdGVfZmlsZSgmbmV0aXVjdl9kcml2ZXIsICZkcml2ZXJfYXR0cl9yZW1vdmUpOwogCQluZXRpdWN2X2Jhbm5lcigpOworCQlyd2xvY2tfaW5pdCgmaXVjdl9jb25ucy5pdWN2X3J3bG9jayk7CiAJfSBlbHNlIHsKIAkJUFJJTlRfRVJSKCJORVRJVUNWOiBmYWlsZWQgdG8gYWRkIGRyaXZlciBhdHRyaWJ1dGUuXG4iKTsKIAkJSVVDVl9EQkZfVEVYVF8oc2V0dXAsIDIsICJyZXQgJWQgZnJvbSBkcml2ZXJfY3JlYXRlX2ZpbGVcbiIsIHJldCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGguaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCmluZGV4IDYxOWY0YTAuLjgyMTM4M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aC5oCkBAIC0xNzYsNyArMTc2LDYgQEAKIC8qKgogICogY2FyZCBzdHVmZgogICovCi0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwogc3RydWN0IHFldGhfcGVyZl9zdGF0cyB7CiAJdW5zaWduZWQgaW50IGJ1ZnNfcmVjOwogCXVuc2lnbmVkIGludCBidWZzX3NlbnQ7CkBAIC0yMTEsOCArMjEwLDEwIEBACiAJdW5zaWduZWQgaW50IGxhcmdlX3NlbmRfY250OwogCXVuc2lnbmVkIGludCBzZ19za2JzX3NlbnQ7CiAJdW5zaWduZWQgaW50IHNnX2ZyYWdzX3NlbnQ7CisJLyogaW5pdGlhbCB2YWx1ZXMgd2hlbiBtZWFzdXJpbmcgc3RhcnRzICovCisJdW5zaWduZWQgbG9uZyBpbml0aWFsX3J4X3BhY2tldHM7CisJdW5zaWduZWQgbG9uZyBpbml0aWFsX3R4X3BhY2tldHM7CiB9OwotI2VuZGlmIC8qIENPTkZJR19RRVRIX1BFUkZfU1RBVFMgKi8KIAogLyogUm91dGluZyBzdHVmZiAqLwogc3RydWN0IHFldGhfcm91dGluZ19pbmZvIHsKQEAgLTQ2Miw2ICs0NjMsNyBAQAogCVFFVEhfUURJT19VTklOSVRJQUxJWkVELAogCVFFVEhfUURJT19BTExPQ0FURUQsCiAJUUVUSF9RRElPX0VTVEFCTElTSEVELAorCVFFVEhfUURJT19DTEVBTklORwogfTsKIAogc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgewpAQCAtNTM2LDcgKzUzOCw3IEBACiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDI1NikpKTsKIAogc3RydWN0IHFldGhfcWRpb19pbmZvIHsKLQl2b2xhdGlsZSBlbnVtIHFldGhfcWRpb19pbmZvX3N0YXRlcyBzdGF0ZTsKKwlhdG9taWNfdCBzdGF0ZTsKIAkvKiBpbnB1dCAqLwogCXN0cnVjdCBxZXRoX3FkaW9fcSAqaW5fcTsKIAlzdHJ1Y3QgcWV0aF9xZGlvX2J1ZmZlcl9wb29sIGluX2J1Zl9wb29sOwpAQCAtNzY3LDYgKzc2OSw3IEBACiAJaW50IGZha2VfbGw7CiAJaW50IGxheWVyMjsKIAllbnVtIHFldGhfbGFyZ2Vfc2VuZF90eXBlcyBsYXJnZV9zZW5kOworCWludCBwZXJmb3JtYW5jZV9zdGF0czsKIH07CiAKIC8qCkBAIC04MTksOSArODIyLDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGNtZF93YWl0ZXJfbGlzdDsKIAkvKiBRRElPIGJ1ZmZlciBoYW5kbGluZyAqLwogCXN0cnVjdCBxZXRoX3FkaW9faW5mbyBxZGlvOwotI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKIAlzdHJ1Y3QgcWV0aF9wZXJmX3N0YXRzIHBlcmZfc3RhdHM7Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfUEVSRl9TVEFUUyAqLwogCWludCB1c2VfaGFyZF9zdG9wOwogCWludCAoKm9yaWdfaGFyZF9oZWFkZXIpKHN0cnVjdCBza19idWZmICosc3RydWN0IG5ldF9kZXZpY2UgKiwKIAkJCQl1bnNpZ25lZCBzaG9ydCx2b2lkICosdm9pZCAqLHVuc2lnbmVkKTsKQEAgLTg1OSwyMyArODYwLDE4IEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGludAotcWV0aF9yZWFsbG9jX2hlYWRyb29tKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICoqc2tiLCBpbnQgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKgorcWV0aF9yZWFsbG9jX2hlYWRyb29tKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBzaXplKQogewotCXN0cnVjdCBza19idWZmICpuZXdfc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IHNrYjsKIAotCWlmIChza2JfaGVhZHJvb20oKnNrYikgPCBzaXplKXsKLQkJbmV3X3NrYiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKCpza2IsIHNpemUpOwotCQlpZiAoIW5ld19za2IpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIFBSSU5UX0VSUigicWV0aF9wcmVwYXJlX3NrYjogY291bGQgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJub3QgcmVhbGxvYyBoZWFkcm9vbSBmb3IgcWV0aF9oZHIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbiBpbnRlcmZhY2UgJXMiLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgICAgIH0KLQkJa2ZyZWVfc2tiKCpza2IpOwotICAgICAgICAgICAgICAgICpza2IgPSBuZXdfc2tiOwotCX0KLQlyZXR1cm4gMDsKKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgPj0gc2l6ZSkKKwkJcmV0dXJuIHNrYjsKKwluZXdfc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBzaXplKTsKKwlpZiAoIW5ld19za2IpIAorCQlQUklOVF9FUlIoIkNvdWxkIG5vdCByZWFsbG9jIGhlYWRyb29tIGZvciBxZXRoX2hkciAiCisJCQkgICJvbiBpbnRlcmZhY2UgJXMiLCBRRVRIX0NBUkRfSUZOQU1FKGNhcmQpKTsKKwlyZXR1cm4gbmV3X3NrYjsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCkBAIC04ODUsMTYgKzg4MSwxNSBAQAogICAgICAgICBpZiAoIXNrYl9jbG9uZWQoc2tiKSkKICAgICAgICAgICAgICAgICByZXR1cm4gc2tiOwogICAgICAgICBuc2tiID0gc2tiX2NvcHkoc2tiLCBwcmkpOwotICAgICAgICBrZnJlZV9za2Ioc2tiKTsgLyogZnJlZSBvdXIgc2hhcmVkIGNvcHkgKi8KICAgICAgICAgcmV0dXJuIG5za2I7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAqCi1xZXRoX3B1c2hfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICoqc2tiLCBpbnQgc2l6ZSkKK3FldGhfcHVzaF9za2Ioc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHNpemUpCiB7CiAgICAgICAgIHZvaWQgKmhkcjsKIAotCWhkciA9ICh2b2lkICopIHNrYl9wdXNoKCpza2IsIHNpemUpOworCWhkciA9ICh2b2lkICopIHNrYl9wdXNoKHNrYiwgc2l6ZSk7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHNhbml0eSBjaGVjaywgdGhlIExpbnV4IG1lbW9yeSBhbGxvY2F0aW9uIHNjaGVtZSBzaG91bGQKICAgICAgICAgICogbmV2ZXIgcHJlc2VudCB1cyBjYXNlcyBsaWtlIHRoaXMgb25lICh0aGUgcWRpbyBoZWFkZXIgc2l6ZSBwbHVzCkBAIC05MDMsOCArODk4LDcgQEAKICAgICAgICAgaWYgKCgoKHVuc2lnbmVkIGxvbmcpIGhkcikgJiAofihQQUdFX1NJWkUgLSAxKSkpICE9CiAgICAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSBoZHIgKyBzaXplICsKICAgICAgICAgICAgICAgUUVUSF9JUF9IRUFERVJfU0laRSkgJiAofihQQUdFX1NJWkUgLSAxKSkpKSB7Ci0gICAgICAgICAgICAgICAgUFJJTlRfRVJSKCJxZXRoX3ByZXBhcmVfc2tiOiBtaXNhbGlnbmVkICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgInBhY2tldCBvbiBpbnRlcmZhY2UgJXMuIERpc2NhcmRlZC4iLAorICAgICAgICAgICAgICAgIFBSSU5UX0VSUigiTWlzYWxpZ25lZCBwYWNrZXQgb24gaW50ZXJmYWNlICVzLiBEaXNjYXJkZWQuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KQEAgLTEwNTYsMTMgKzEwNTAsMTEgQEAKIAl9CiB9CiAKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCiBzdGF0aWMgaW5saW5lIGludAogcWV0aF9nZXRfbWljcm9zKHZvaWQpCiB7CiAJcmV0dXJuIChpbnQpIChnZXRfY2xvY2soKSA+PiAxMik7CiB9Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQKIHFldGhfZ2V0X3FkaW9fcV9mb3JtYXQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKQEAgLTEwOTYsMTAgKzEwODgsMTEgQEAKIHsKIAlpbnQgY291bnQgPSAwLCByYyA9IDA7CiAJaW50IGluWzRdOworCWNoYXIgYzsKIAotCXJjID0gc3NjYW5mKGJ1ZiwgIiVkLiVkLiVkLiVkJW4iLAotCQkgICAgJmluWzBdLCAmaW5bMV0sICZpblsyXSwgJmluWzNdLCAmY291bnQpOwotCWlmIChyYyAhPSA0ICB8fCBjb3VudDw9MCkKKwlyYyA9IHNzY2FuZihidWYsICIldS4ldS4ldS4ldSVjIiwKKwkJICAgICZpblswXSwgJmluWzFdLCAmaW5bMl0sICZpblszXSwgJmMpOworCWlmIChyYyAhPSA0ICYmIChyYyAhPSA1IHx8IGMgIT0gJ1xuJykpCiAJCXJldHVybiAtRUlOVkFMOwogCWZvciAoY291bnQgPSAwOyBjb3VudCA8IDQ7IGNvdW50KyspIHsKIAkJaWYgKGluW2NvdW50XSA+IDI1NSkKQEAgLTExMjMsMjQgKzExMTYsMjggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBxZXRoX3N0cmluZ190b19pcGFkZHI2KGNvbnN0IGNoYXIgKmJ1ZiwgX191OCAqYWRkcikKIHsKLQljaGFyICplbmQsICpzdGFydDsKKwljb25zdCBjaGFyICplbmQsICplbmRfdG1wLCAqc3RhcnQ7CiAJX191MTYgKmluOwogICAgICAgICBjaGFyIG51bVs1XTsKICAgICAgICAgaW50IG51bTIsIGNudCwgb3V0LCBmb3VuZCwgc2F2ZV9jbnQ7CiAgICAgICAgIHVuc2lnbmVkIHNob3J0IGluX3RtcFs4XSA9IHswLCB9OwogCiAJY250ID0gb3V0ID0gZm91bmQgPSBzYXZlX2NudCA9IG51bTIgPSAwOwotICAgICAgICBlbmQgPSBzdGFydCA9IChjaGFyICopIGJ1ZjsKKyAgICAgICAgZW5kID0gc3RhcnQgPSBidWY7CiAJaW4gPSAoX191MTYgKikgYWRkcjsKIAltZW1zZXQoaW4sIDAsIDE2KTsKLSAgICAgICAgd2hpbGUgKGVuZCkgewotICAgICAgICAgICAgICAgIGVuZCA9IHN0cmNocihlbmQsJzonKTsKKyAgICAgICAgd2hpbGUgKCplbmQpIHsKKyAgICAgICAgICAgICAgICBlbmQgPSBzdHJjaHIoc3RhcnQsJzonKTsKICAgICAgICAgICAgICAgICBpZiAoZW5kID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IChjaGFyICopYnVmICsgKHN0cmxlbihidWYpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG91dCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBidWYgKyBzdHJsZW4oYnVmKTsKKwkJCWlmICgoZW5kX3RtcCA9IHN0cmNocihzdGFydCwgJ1xuJykpICE9IE5VTEwpCisJCQkJZW5kID0gZW5kX3RtcDsKKwkJCW91dCA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICgoZW5kIC0gc3RhcnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQobnVtLCAwLCA1KTsKKwkJCWlmICgoZW5kIC0gc3RhcnQpID4gNCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShudW0sIHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAJCQlpZiAoIXFldGhfaXN4ZGlnaXQobnVtKSkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNTgsNiArMTE1NSw4IEBACiAJCX0KIAkJc3RhcnQgPSArK2VuZDsKICAgICAgICAgfQorCWlmIChjbnQgKyBzYXZlX2NudCA+IDgpCisJCXJldHVybiAtRUlOVkFMOwogICAgICAgICBjbnQgPSA3OwogCXdoaWxlIChzYXZlX2NudCkKICAgICAgICAgICAgICAgICBpbltjbnQtLV0gPSBpbl90bXBbLS1zYXZlX2NudF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYwppbmRleCA4NDkxNTk4Zi4uYTM2MzcyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2VkZHAuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfZWRkcC5jCkBAIC0xNzksOSArMTc5LDggQEAKIAkJCWZsdXNoX2NudCsrOwogCQl9CiAJfSBlbHNlIHsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrKys7Ci0jZW5kaWYKKwkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKIAkJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgImZpbGxiZnBhIik7CiAJCWlmIChidWYtPm5leHRfZWxlbWVudF90b19maWxsID49CiAJCQkJUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKHF1ZXVlLT5jYXJkKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKaW5kZXggNWZmZjFmOTM5Li41NjEzYjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKQEAgLTEwNzMsNiArMTA3Myw3IEBACiAJCWNhcmQtPm9wdGlvbnMubGF5ZXIyID0gMTsKIAllbHNlCiAJCWNhcmQtPm9wdGlvbnMubGF5ZXIyID0gMDsKKwljYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzID0gMTsKIH0KIAogLyoqCkBAIC0xNzA4LDYgKzE3MDksNyBAQAogCQkJCQkgICAiSVAgYWRkcmVzcyByZXNldC5cbiIsCiAJCQkJCSAgIFFFVEhfQ0FSRF9JRk5BTUUoY2FyZCksCiAJCQkJCSAgIGNhcmQtPmluZm8uY2hwaWQpOworCQkJCW5ldGlmX2NhcnJpZXJfb24oY2FyZC0+ZGV2KTsKIAkJCQlxZXRoX3NjaGVkdWxlX3JlY292ZXJ5KGNhcmQpOwogCQkJCXJldHVybiBOVUxMOwogCQkJY2FzZSBJUEFfQ01EX01PRENDSUQ6CkBAIC0yNDY0LDI0ICsyNDY2LDYgQEAKIAkJcWV0aF9yZWJ1aWxkX3NrYl9mYWtlX2xsX2V0aChjYXJkLCBza2IsIGhkcik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotcWV0aF9yZWJ1aWxkX3NrYl92bGFuKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgIHN0cnVjdCBxZXRoX2hkciAqaGRyKQotewotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQl1MTYgKnZsYW5fdGFnOwotCi0JaWYgKGhkci0+aGRyLmwzLmV4dF9mbGFncyAmCi0JICAgIChRRVRIX0hEUl9FWFRfVkxBTl9GUkFNRSB8IFFFVEhfSERSX0VYVF9JTkNMVURFX1ZMQU5fVEFHKSkgewotCQl2bGFuX3RhZyA9ICh1MTYgKikgc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pOwotCQkqdmxhbl90YWcgPSAoaGRyLT5oZHIubDMuZXh0X2ZsYWdzICYgUUVUSF9IRFJfRVhUX1ZMQU5fRlJBTUUpPwotCQkJaGRyLT5oZHIubDMudmxhbl9pZCA6ICooKHUxNiAqKSZoZHItPmhkci5sMy5kZXN0X2FkZHJbMTJdKTsKLQkJKih2bGFuX3RhZyArIDEpID0gc2tiLT5wcm90b2NvbDsKLQkJc2tiLT5wcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9WTEFOICovCi19Ci0KIHN0YXRpYyBpbmxpbmUgX191MTYKIHFldGhfbGF5ZXIyX3JlYnVpbGRfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgcWV0aF9oZHIgKmhkcikKQEAgLTI1MTAsMTUgKzI0OTQsMTYgQEAKIAlyZXR1cm4gdmxhbl9pZDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIF9fdTE2CiBxZXRoX3JlYnVpbGRfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBzdHJ1Y3QgcWV0aF9oZHIgKmhkcikKIHsKKwl1bnNpZ25lZCBzaG9ydCB2bGFuX2lkID0gMDsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAJaWYgKGhkci0+aGRyLmwzLmZsYWdzICYgUUVUSF9IRFJfUEFTU1RIUlUpIHsKIAkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCQlza2ItPnByb3RvY29sID0gcWV0aF90eXBlX3RyYW5zKHNrYiwgY2FyZC0+ZGV2KTsKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwogCXNrYi0+cHJvdG9jb2wgPSBodG9ucygoaGRyLT5oZHIubDMuZmxhZ3MgJiBRRVRIX0hEUl9JUFY2KT8gRVRIX1BfSVBWNiA6CkBAIC0yNTQwLDcgKzI1MjUsMTMgQEAKIAlkZWZhdWx0OgogCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJfQotCXFldGhfcmVidWlsZF9za2JfdmxhbihjYXJkLCBza2IsIGhkcik7CisKKwlpZiAoaGRyLT5oZHIubDMuZXh0X2ZsYWdzICYKKwkgICAgKFFFVEhfSERSX0VYVF9WTEFOX0ZSQU1FIHwgUUVUSF9IRFJfRVhUX0lOQ0xVREVfVkxBTl9UQUcpKSB7CisJCXZsYW5faWQgPSAoaGRyLT5oZHIubDMuZXh0X2ZsYWdzICYgUUVUSF9IRFJfRVhUX1ZMQU5fRlJBTUUpPworCQkJaGRyLT5oZHIubDMudmxhbl9pZCA6ICooKHUxNiAqKSZoZHItPmhkci5sMy5kZXN0X2FkZHJbMTJdKTsKKwl9CisKIAlpZiAoY2FyZC0+b3B0aW9ucy5mYWtlX2xsKQogCQlxZXRoX3JlYnVpbGRfc2tiX2Zha2VfbGwoY2FyZCwgc2tiLCBoZHIpOwogCWVsc2UKQEAgLTI1NTYsNiArMjU0Nyw3IEBACiAJCWVsc2UKIAkJCXNrYi0+aXBfc3VtbWVkID0gU1dfQ0hFQ0tTVU1NSU5HOwogCX0KKwlyZXR1cm4gdmxhbl9pZDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yNTY4LDIwICsyNTYwLDIwIEBACiAJaW50IG9mZnNldDsKIAlpbnQgcnhyYzsKIAlfX3UxNiB2bGFuX3RhZyA9IDA7CisJX191MTYgKnZsYW5fYWRkcjsKIAogCS8qIGdldCBmaXJzdCBlbGVtZW50IG9mIGN1cnJlbnQgYnVmZmVyICovCiAJZWxlbWVudCA9IChzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqKSZidWYtPmJ1ZmZlci0+ZWxlbWVudFswXTsKIAlvZmZzZXQgPSAwOwotI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKLQljYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfcmVjKys7Ci0jZW5kaWYKKwlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJY2FyZC0+cGVyZl9zdGF0cy5idWZzX3JlYysrOwogCXdoaWxlKChza2IgPSBxZXRoX2dldF9uZXh0X3NrYihjYXJkLCBidWYtPmJ1ZmZlciwgJmVsZW1lbnQsCiAJCQkJICAgICAgICZvZmZzZXQsICZoZHIpKSkgewogCQlza2ItPmRldiA9IGNhcmQtPmRldjsKIAkJaWYgKGhkci0+aGRyLmwyLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIyKQogCQkJdmxhbl90YWcgPSBxZXRoX2xheWVyMl9yZWJ1aWxkX3NrYihjYXJkLCBza2IsIGhkcik7CiAJCWVsc2UgaWYgKGhkci0+aGRyLmwzLmlkID09IFFFVEhfSEVBREVSX1RZUEVfTEFZRVIzKQotCQkJcWV0aF9yZWJ1aWxkX3NrYihjYXJkLCBza2IsIGhkcik7CisJCQl2bGFuX3RhZyA9IHFldGhfcmVidWlsZF9za2IoY2FyZCwgc2tiLCBoZHIpOwogCQllbHNlIHsgLyppbiBjYXNlIG9mIE9TTiovCiAJCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKIAkJCW1lbWNweShza2ItPmRhdGEsIGhkciwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwpAQCAtMjU5MSwxNCArMjU4MywxOSBAQAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0jaWZkZWYgQ09ORklHX1FFVEhfVkxBTgotCQlpZiAodmxhbl90YWcpCi0JCQl2bGFuX2h3YWNjZWxfcngoc2tiLCBjYXJkLT52bGFuZ3JwLCB2bGFuX3RhZyk7Ci0JCWVsc2UKLSNlbmRpZgogCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikKIAkJCXJ4cmMgPSBjYXJkLT5vc25faW5mby5kYXRhX2NiKHNrYik7CiAJCWVsc2UKKyNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCisJCWlmICh2bGFuX3RhZykKKwkJCWlmIChjYXJkLT52bGFuZ3JwKQorCQkJCXZsYW5faHdhY2NlbF9yeChza2IsIGNhcmQtPnZsYW5ncnAsIHZsYW5fdGFnKTsKKwkJCWVsc2UgeworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJY29udGludWU7CisJCQl9CisJCWVsc2UKKyNlbmRpZgogCQkJcnhyYyA9IG5ldGlmX3J4KHNrYik7CiAJCWNhcmQtPmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAJCWNhcmQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTI2MjYsNyArMjYyMyw3IEBACiB7CiAJc3RydWN0IHFldGhfYnVmZmVyX3Bvb2xfZW50cnkgKnBvb2xfZW50cnk7CiAJaW50IGk7Ci0KKyAKIAlwb29sX2VudHJ5ID0gcWV0aF9nZXRfYnVmZmVyX3Bvb2xfZW50cnkoY2FyZCk7CiAJLyoKIAkgKiBzaW5jZSB0aGUgYnVmZmVyIGlzIGFjY2Vzc2VkIG9ubHkgZnJvbSB0aGUgaW5wdXRfdGFza2xldApAQCAtMjcwMCwxNyArMjY5NywxOCBAQAogCQkgKiAnaW5kZXgnKSB1bi1yZXF1ZXVlZCAtPiB0aGlzIGJ1ZmZlciBpcyB0aGUgZmlyc3QgYnVmZmVyIHRoYXQKIAkJICogd2lsbCBiZSByZXF1ZXVlZCB0aGUgbmV4dCB0aW1lCiAJCSAqLwotI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKLQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fY250Kys7Ci0JCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWUgPSBxZXRoX2dldF9taWNyb3MoKTsKLSNlbmRpZgorCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgeworCQkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2RvX3FkaW9fY250Kys7CisJCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfZG9fcWRpb19zdGFydF90aW1lID0KKwkJCQlxZXRoX2dldF9taWNyb3MoKTsKKwkJfQogCQlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKGNhcmQpLAogCQkJICAgICBRRElPX0ZMQUdfU1lOQ19JTlBVVCB8IFFESU9fRkxBR19VTkRFUl9JTlRFUlJVUFQsCiAJCQkgICAgIDAsIHF1ZXVlLT5uZXh0X2J1Zl90b19pbml0LCBjb3VudCwgTlVMTCk7Ci0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwotCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfZG9fcWRpb190aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KLQkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7Ci0jZW5kaWYKKwkJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpCisJCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfZG9fcWRpb190aW1lICs9CisJCQkJcWV0aF9nZXRfbWljcm9zKCkgLQorCQkJCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9kb19xZGlvX3N0YXJ0X3RpbWU7CiAJCWlmIChyYyl7CiAJCQlQUklOVF9XQVJOKCJxZXRoX3F1ZXVlX2lucHV0X2J1ZmZlcidzIGRvX1FESU8gIgogCQkJCSAgICJyZXR1cm4gJWkgKGRldmljZSAlcykuXG4iLApAQCAtMjc0NiwxMCArMjc0NCwxMCBAQAogCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJxZGlucHV0Iik7CiAJY2FyZCA9IChzdHJ1Y3QgcWV0aF9jYXJkICopIGNhcmRfcHRyOwogCW5ldF9kZXYgPSBjYXJkLT5kZXY7Ci0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwotCWNhcmQtPnBlcmZfc3RhdHMuaW5ib3VuZF9jbnQrKzsKLQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOwotI2VuZGlmCisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX2NudCsrOworCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOworCX0KIAlpZiAoc3RhdHVzICYgUURJT19TVEFUVVNfTE9PS19GT1JfRVJST1IpIHsKIAkJaWYgKHN0YXR1cyAmIFFESU9fU1RBVFVTX0FDVElWQVRFX0NIRUNLX0NPTkRJVElPTil7CiAJCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAxLCJxZGluY2hrIik7CkBAIC0yNzcxLDEwICsyNzY5LDkgQEAKIAkJcWV0aF9wdXRfYnVmZmVyX3Bvb2xfZW50cnkoY2FyZCwgYnVmZmVyLT5wb29sX2VudHJ5KTsKIAkJcWV0aF9xdWV1ZV9pbnB1dF9idWZmZXIoY2FyZCwgaW5kZXgpOwogCX0KLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JY2FyZC0+cGVyZl9zdGF0cy5pbmJvdW5kX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQotCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfc3RhcnRfdGltZTsKLSNlbmRpZgorCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfdGltZSArPSBxZXRoX2dldF9taWNyb3MoKSAtCisJCQljYXJkLT5wZXJmX3N0YXRzLmluYm91bmRfc3RhcnRfdGltZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTI4NjQsMTAgKzI4NjEsMTEgQEAKIAl9CiAKIAlxdWV1ZS0+Y2FyZC0+ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwotCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fY250Kys7Ci0JcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lID0gcWV0aF9nZXRfbWljcm9zKCk7Ci0jZW5kaWYKKwlpZiAocXVldWUtPmNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19jbnQrKzsKKwkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lID0KKwkJCXFldGhfZ2V0X21pY3JvcygpOworCX0KIAlpZiAodW5kZXJfaW50KQogCQlyYyA9IGRvX1FESU8oQ0FSRF9EREVWKHF1ZXVlLT5jYXJkKSwKIAkJCSAgICAgUURJT19GTEFHX1NZTkNfT1VUUFVUIHwgUURJT19GTEFHX1VOREVSX0lOVEVSUlVQVCwKQEAgLTI4NzUsMTAgKzI4NzMsMTAgQEAKIAllbHNlCiAJCXJjID0gZG9fUURJTyhDQVJEX0RERVYocXVldWUtPmNhcmQpLCBRRElPX0ZMQUdfU1lOQ19PVVRQVVQsCiAJCQkgICAgIHF1ZXVlLT5xdWV1ZV9ubywgaW5kZXgsIGNvdW50LCBOVUxMKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb190aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KLQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfZG9fcWRpb19zdGFydF90aW1lOwotI2VuZGlmCisJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9kb19xZGlvX3RpbWUgKz0KKwkJCXFldGhfZ2V0X21pY3JvcygpIC0KKwkJCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2RvX3FkaW9fc3RhcnRfdGltZTsKIAlpZiAocmMpewogCQlRRVRIX0RCRl9URVhUKHRyYWNlLCAyLCAiZmx1c2hidWYiKTsKIAkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDIsICIgZXJyJWQiLCByYyk7CkBAIC0yODkwLDkgKzI4ODgsOCBAQAogCQlyZXR1cm47CiAJfQogCWF0b21pY19hZGQoY291bnQsICZxdWV1ZS0+dXNlZF9idWZmZXJzKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50ICs9IGNvdW50OwotI2VuZGlmCisJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnQgKz0gY291bnQ7CiB9CiAKIC8qCkBAIC0yOTA3LDkgKzI5MDQsOCBAQAogCQkgICAgPj0gUUVUSF9ISUdIX1dBVEVSTUFSS19QQUNLKXsKIAkJCS8qIHN3aXRjaCBub24tUEFDS0lORyAtPiBQQUNLSU5HICovCiAJCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAibnAtPnBhY2siKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5zY19kcF9wKys7Ci0jZW5kaWYKKwkJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5zY19kcF9wKys7CiAJCQlxdWV1ZS0+ZG9fcGFjayA9IDE7CiAJCX0KIAl9CkBAIC0yOTMyLDkgKzI5MjgsOCBAQAogCQkgICAgPD0gUUVUSF9MT1dfV0FURVJNQVJLX1BBQ0spIHsKIAkJCS8qIHN3aXRjaCBQQUNLSU5HIC0+IG5vbi1QQUNLSU5HICovCiAJCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAicGFjay0+bnAiKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5zY19wX2RwKys7Ci0jZW5kaWYKKwkJCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5zY19wX2RwKys7CiAJCQlxdWV1ZS0+ZG9fcGFjayA9IDA7CiAJCQkvKiBmbHVzaCBwYWNraW5nIGJ1ZmZlcnMgKi8KIAkJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1txdWV1ZS0+bmV4dF9idWZfdG9fZmlsbF07CkBAIC0yOTQ2LDcgKzI5NDEsNyBAQAogCQkJCXF1ZXVlLT5uZXh0X2J1Zl90b19maWxsID0KIAkJCQkJKHF1ZXVlLT5uZXh0X2J1Zl90b19maWxsICsgMSkgJQogCQkJCQlRRElPX01BWF9CVUZGRVJTX1BFUl9ROwotCQkgCX0KKwkJCX0KIAkJfQogCX0KIAlyZXR1cm4gZmx1c2hfY291bnQ7CkBAIC0zMDAyLDExICsyOTk3LDEwIEBACiAJCQkgICAgIWF0b21pY19yZWFkKCZxdWV1ZS0+c2V0X3BjaV9mbGFnc19jb3VudCkpCiAJCQkJZmx1c2hfY250ICs9CiAJCQkJCXFldGhfZmx1c2hfYnVmZmVyc19vbl9ub19wY2kocXVldWUpOwotI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKLQkJCWlmIChxX3dhc19wYWNraW5nKQorCQkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzICYmCisJCQkgICAgcV93YXNfcGFja2luZykKIAkJCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnRfcGFjayArPQogCQkJCQlmbHVzaF9jbnQ7Ci0jZW5kaWYKIAkJCWlmIChmbHVzaF9jbnQpCiAJCQkJcWV0aF9mbHVzaF9idWZmZXJzKHF1ZXVlLCAxLCBpbmRleCwgZmx1c2hfY250KTsKIAkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CkBAIC0zMDM2LDEwICszMDMwLDExIEBACiAJCQlyZXR1cm47CiAJCX0KIAl9Ci0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwotCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfaGFuZGxlcl9jbnQrKzsKLQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXJfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOwotI2VuZGlmCisJaWYgKGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMpIHsKKwkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyX2NudCsrOworCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXJfc3RhcnRfdGltZSA9CisJCQlxZXRoX2dldF9taWNyb3MoKTsKKwl9CiAJZm9yKGkgPSBmaXJzdF9lbGVtZW50OyBpIDwgKGZpcnN0X2VsZW1lbnQgKyBjb3VudCk7ICsraSl7CiAJCWJ1ZmZlciA9ICZxdWV1ZS0+YnVmc1tpICUgUURJT19NQVhfQlVGRkVSU19QRVJfUV07CiAJCS8qd2Ugb25seSBoYW5kbGUgdGhlIEtJQ0tfSVQgZXJyb3IgYnkgZG9pbmcgYSByZWNvdmVyeSAqLwpAQCAtMzA1OCwxMCArMzA1Myw5IEBACiAJCXFldGhfY2hlY2tfb3V0Ym91bmRfcXVldWUocXVldWUpOwogCiAJbmV0aWZfd2FrZV9xdWV1ZShxdWV1ZS0+Y2FyZC0+ZGV2KTsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9oYW5kbGVyX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQotCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXJfc3RhcnRfdGltZTsKLSNlbmRpZgorCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXJfdGltZSArPSBxZXRoX2dldF9taWNyb3MoKSAtCisJCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX2hhbmRsZXJfc3RhcnRfdGltZTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMxODUsMTMgKzMxNzksMTQgQEAKIAogCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJhbGxjcWRiZiIpOwogCi0JaWYgKGNhcmQtPnFkaW8uc3RhdGUgPT0gUUVUSF9RRElPX0FMTE9DQVRFRCkKKwlpZiAoYXRvbWljX2NtcHhjaGcoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19VTklOSVRJQUxJWkVELAorCQlRRVRIX1FESU9fQUxMT0NBVEVEKSAhPSBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkKIAkJcmV0dXJuIDA7CiAKIAljYXJkLT5xZGlvLmluX3EgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX3EpLAogCQkJCSAgR0ZQX0tFUk5FTHxHRlBfRE1BKTsKIAlpZiAoIWNhcmQtPnFkaW8uaW5fcSkKLQkJcmV0dXJuIC0gRU5PTUVNOworCQlnb3RvIG91dF9ub21lbTsKIAlRRVRIX0RCRl9URVhUKHNldHVwLCAyLCAiaW5xIik7CiAJUUVUSF9EQkZfSEVYKHNldHVwLCAyLCAmY2FyZC0+cWRpby5pbl9xLCBzaXplb2Yodm9pZCAqKSk7CiAJbWVtc2V0KGNhcmQtPnFkaW8uaW5fcSwgMCwgc2l6ZW9mKHN0cnVjdCBxZXRoX3FkaW9fcSkpOwpAQCAtMzIwMCwyNyArMzE5NSwxOSBAQAogCQljYXJkLT5xZGlvLmluX3EtPmJ1ZnNbaV0uYnVmZmVyID0KIAkJCSZjYXJkLT5xZGlvLmluX3EtPnFkaW9fYnVmc1tpXTsKIAkvKiBpbmJvdW5kIGJ1ZmZlciBwb29sICovCi0JaWYgKHFldGhfYWxsb2NfYnVmZmVyX3Bvb2woY2FyZCkpewotCQlrZnJlZShjYXJkLT5xZGlvLmluX3EpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKHFldGhfYWxsb2NfYnVmZmVyX3Bvb2woY2FyZCkpCisJCWdvdG8gb3V0X2ZyZWVpbnE7CiAJLyogb3V0Ym91bmQgKi8KIAljYXJkLT5xZGlvLm91dF9xcyA9CiAJCWttYWxsb2MoY2FyZC0+cWRpby5ub19vdXRfcXVldWVzICoKIAkJCXNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xICopLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNhcmQtPnFkaW8ub3V0X3FzKXsKLQkJcWV0aF9mcmVlX2J1ZmZlcl9wb29sKGNhcmQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IGNhcmQtPnFkaW8ubm9fb3V0X3F1ZXVlczsgKytpKXsKKwlpZiAoIWNhcmQtPnFkaW8ub3V0X3FzKQorCQlnb3RvIG91dF9mcmVlcG9vbDsKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+cWRpby5ub19vdXRfcXVldWVzOyArK2kpIHsKIAkJY2FyZC0+cWRpby5vdXRfcXNbaV0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcWV0aF9xZGlvX291dF9xKSwKIAkJCQkJICAgICAgIEdGUF9LRVJORUx8R0ZQX0RNQSk7Ci0JCWlmICghY2FyZC0+cWRpby5vdXRfcXNbaV0pewotCQkJd2hpbGUgKGkgPiAwKQotCQkJCWtmcmVlKGNhcmQtPnFkaW8ub3V0X3FzWy0taV0pOwotCQkJa2ZyZWUoY2FyZC0+cWRpby5vdXRfcXMpOwotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCX0KKwkJaWYgKCFjYXJkLT5xZGlvLm91dF9xc1tpXSkKKwkJCWdvdG8gb3V0X2ZyZWVvdXRxOwogCQlRRVRIX0RCRl9URVhUXyhzZXR1cCwgMiwgIm91dHEgJWkiLCBpKTsKIAkJUUVUSF9EQkZfSEVYKHNldHVwLCAyLCAmY2FyZC0+cWRpby5vdXRfcXNbaV0sIHNpemVvZih2b2lkICopKTsKIAkJbWVtc2V0KGNhcmQtPnFkaW8ub3V0X3FzW2ldLCAwLCBzaXplb2Yoc3RydWN0IHFldGhfcWRpb19vdXRfcSkpOwpAQCAtMzIzNyw4ICszMjI0LDE5IEBACiAJCQlJTklUX0xJU1RfSEVBRCgmY2FyZC0+cWRpby5vdXRfcXNbaV0tPmJ1ZnNbal0uY3R4X2xpc3QpOwogCQl9CiAJfQotCWNhcmQtPnFkaW8uc3RhdGUgPSBRRVRIX1FESU9fQUxMT0NBVEVEOwogCXJldHVybiAwOworCitvdXRfZnJlZW91dHE6CisJd2hpbGUgKGkgPiAwKQorCQlrZnJlZShjYXJkLT5xZGlvLm91dF9xc1stLWldKTsKKwlrZnJlZShjYXJkLT5xZGlvLm91dF9xcyk7CitvdXRfZnJlZXBvb2w6CisJcWV0aF9mcmVlX2J1ZmZlcl9wb29sKGNhcmQpOworb3V0X2ZyZWVpbnE6CisJa2ZyZWUoY2FyZC0+cWRpby5pbl9xKTsKK291dF9ub21lbToKKwlhdG9taWNfc2V0KCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0zMjQ3LDcgKzMyNDUsOCBAQAogCWludCBpLCBqOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwgMiwgImZyZWVxZGJmIik7Ci0JaWYgKGNhcmQtPnFkaW8uc3RhdGUgPT0gUUVUSF9RRElPX1VOSU5JVElBTElaRUQpCisJaWYgKGF0b21pY19zd2FwKCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fVU5JTklUSUFMSVpFRCkgPT0KKwkJUUVUSF9RRElPX1VOSU5JVElBTElaRUQpCiAJCXJldHVybjsKIAlrZnJlZShjYXJkLT5xZGlvLmluX3EpOwogCS8qIGluYm91bmQgYnVmZmVyIHBvb2wgKi8KQEAgLTMyNjAsNyArMzI1OSw2IEBACiAJCWtmcmVlKGNhcmQtPnFkaW8ub3V0X3FzW2ldKTsKIAl9CiAJa2ZyZWUoY2FyZC0+cWRpby5vdXRfcXMpOwotCWNhcmQtPnFkaW8uc3RhdGUgPSBRRVRIX1FESU9fVU5JTklUSUFMSVpFRDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTMyODIsNyArMzI4MCw3IEBACiBxZXRoX2luaXRfcWRpb19pbmZvKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQpCiB7CiAJUUVUSF9EQkZfVEVYVChzZXR1cCwgNCwgImludHFkaW5mIik7Ci0JY2FyZC0+cWRpby5zdGF0ZSA9IFFFVEhfUURJT19VTklOSVRJQUxJWkVEOworCWF0b21pY19zZXQoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19VTklOSVRJQUxJWkVEKTsKIAkvKiBpbmJvdW5kICovCiAJY2FyZC0+cWRpby5pbl9idWZfc2l6ZSA9IFFFVEhfSU5fQlVGX1NJWkVfREVGQVVMVDsKIAljYXJkLT5xZGlvLmluaXRfcG9vbC5idWZfY291bnQgPSBRRVRIX0lOX0JVRl9DT1VOVF9ERUZBVUxUOwpAQCAtMzM0NSw3ICszMzQzLDcgQEAKIAlzdHJ1Y3QgcWRpb19idWZmZXIgKippbl9zYmFsX3B0cnM7CiAJc3RydWN0IHFkaW9fYnVmZmVyICoqb3V0X3NiYWxfcHRyczsKIAlpbnQgaSwgaiwgazsKLQlpbnQgcmM7CisJaW50IHJjID0gMDsKIAogCVFFVEhfREJGX1RFWFQoc2V0dXAsIDIsICJxZGlvZXN0Iik7CiAKQEAgLTM0MDQsOCArMzQwMiwxMCBAQAogCWluaXRfZGF0YS5pbnB1dF9zYmFsX2FkZHJfYXJyYXkgID0gKHZvaWQgKiopIGluX3NiYWxfcHRyczsKIAlpbml0X2RhdGEub3V0cHV0X3NiYWxfYWRkcl9hcnJheSA9ICh2b2lkICoqKSBvdXRfc2JhbF9wdHJzOwogCi0JaWYgKCEocmMgPSBxZGlvX2luaXRpYWxpemUoJmluaXRfZGF0YSkpKQotCQljYXJkLT5xZGlvLnN0YXRlID0gUUVUSF9RRElPX0VTVEFCTElTSEVEOworCWlmIChhdG9taWNfY21weGNoZygmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX0FMTE9DQVRFRCwKKwkJUUVUSF9RRElPX0VTVEFCTElTSEVEKSA9PSBRRVRIX1FESU9fQUxMT0NBVEVEKQorCQlpZiAoKHJjID0gcWRpb19pbml0aWFsaXplKCZpbml0X2RhdGEpKSkKKwkJCWF0b21pY19zZXQoJmNhcmQtPnFkaW8uc3RhdGUsIFFFVEhfUURJT19BTExPQ0FURUQpOwogCiAJa2ZyZWUob3V0X3NiYWxfcHRycyk7CiAJa2ZyZWUoaW5fc2JhbF9wdHJzKTsKQEAgLTM1MjEsMTMgKzM1MjEsMjAgQEAKIAlpbnQgcmMgPSAwOwogCiAJUUVUSF9EQkZfVEVYVCh0cmFjZSwzLCJxZGlvY2xyIik7Ci0JaWYgKGNhcmQtPnFkaW8uc3RhdGUgPT0gUUVUSF9RRElPX0VTVEFCTElTSEVEKXsKKwlzd2l0Y2ggKGF0b21pY19jbXB4Y2hnKCZjYXJkLT5xZGlvLnN0YXRlLCBRRVRIX1FESU9fRVNUQUJMSVNIRUQsCisJCVFFVEhfUURJT19DTEVBTklORykpIHsKKwljYXNlIFFFVEhfUURJT19FU1RBQkxJU0hFRDoKIAkJaWYgKChyYyA9IHFkaW9fY2xlYW51cChDQVJEX0RERVYoY2FyZCksCi0JCQkgICAgIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSA/Ci0JCQkgICAgIFFESU9fRkxBR19DTEVBTlVQX1VTSU5HX0hBTFQgOgotCQkJICAgICBRRElPX0ZMQUdfQ0xFQU5VUF9VU0lOR19DTEVBUikpKQorCQkJCShjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfSVFEKSA/CisJCQkJUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfSEFMVCA6CisJCQkJUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIpKSkKIAkJCVFFVEhfREJGX1RFWFRfKHRyYWNlLCAzLCAiMWVyciVkIiwgcmMpOwotCQljYXJkLT5xZGlvLnN0YXRlID0gUUVUSF9RRElPX0FMTE9DQVRFRDsKKwkJYXRvbWljX3NldCgmY2FyZC0+cWRpby5zdGF0ZSwgUUVUSF9RRElPX0FMTE9DQVRFRCk7CisJCWJyZWFrOworCWNhc2UgUUVUSF9RRElPX0NMRUFOSU5HOgorCQlyZXR1cm4gcmM7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCWlmICgocmMgPSBxZXRoX2NsZWFyX2hhbHRfY2FyZChjYXJkLCB1c2VfaGFsdCkpKQogCQlRRVRIX0RCRl9URVhUXyh0cmFjZSwgMywgIjJlcnIlZCIsIHJjKTsKQEAgLTM2ODcsMTAgKzM2OTQsMTAgQEAKIAkJLyogcmV0dXJuIE9LOyBvdGhlcndpc2Uga3NvZnRpcnFkIGdvZXMgdG8gMTAwJSAqLwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCX0KLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF9jbnQrKzsKLQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3N0YXJ0X3RpbWUgPSBxZXRoX2dldF9taWNyb3MoKTsKLSNlbmRpZgorCWlmIChjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKSB7CisJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfY250Kys7CisJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfc3RhcnRfdGltZSA9IHFldGhfZ2V0X21pY3JvcygpOworCX0KIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAJaWYgKChyYyA9IHFldGhfc2VuZF9wYWNrZXQoY2FyZCwgc2tiKSkpIHsKIAkJaWYgKHJjID09IC1FQlVTWSkgewpAQCAtMzcwNCwxMCArMzcxMSw5IEBACiAJCX0KIAl9CiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKLQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3RpbWUgKz0gcWV0aF9nZXRfbWljcm9zKCkgLQotCQljYXJkLT5wZXJmX3N0YXRzLm91dGJvdW5kX3N0YXJ0X3RpbWU7Ci0jZW5kaWYKKwlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJY2FyZC0+cGVyZl9zdGF0cy5vdXRib3VuZF90aW1lICs9IHFldGhfZ2V0X21pY3JvcygpIC0KKwkJCWNhcmQtPnBlcmZfc3RhdHMub3V0Ym91bmRfc3RhcnRfdGltZTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTM5MjIsNDkgKzM5MjgsNTkgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1xZXRoX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICoqc2tiLAotCQkgc3RydWN0IHFldGhfaGRyICoqaGRyLCBpbnQgaXB2KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgcWV0aF9oZHIgKgorX19xZXRoX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsIGludCBpcHYpCiB7Ci0JaW50IHJjID0gMDsKICNpZmRlZiBDT05GSUdfUUVUSF9WTEFOCiAJdTE2ICp0YWc7Ci0jZW5kaWYKLQotCVFFVEhfREJGX1RFWFQodHJhY2UsIDYsICJwcmVwc2tiIik7Ci0JaWYgKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKLQkJKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHIgKikoKnNrYiktPmRhdGE7Ci0JCXJldHVybiByYzsKLQl9Ci0gICAgICAgIHJjID0gcWV0aF9yZWFsbG9jX2hlYWRyb29tKGNhcmQsIHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOwotICAgICAgICBpZiAocmMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJjOwotI2lmZGVmIENPTkZJR19RRVRIX1ZMQU4KLQlpZiAoY2FyZC0+dmxhbmdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KCpza2IpICYmCisJaWYgKGNhcmQtPnZsYW5ncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpICYmCiAJICAgICgoaXB2ID09IDYpIHx8IGNhcmQtPm9wdGlvbnMubGF5ZXIyKSApIHsKIAkJLyoKIAkJICogTW92ZSB0aGUgbWFjIGFkZHJlc3NlcyAoNiBieXRlcyBzcmMsIDYgYnl0ZXMgZGVzdCkKIAkJICogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV3IGhlYWRlci4gIFdlIGFyZSB1c2luZyB0aHJlZQogCQkgKiBtZW1jcHlzIGluc3RlYWQgb2Ygb25lIG1lbW1vdmUgdG8gc2F2ZSBjeWNsZXMuCiAJCSAqLwotCQlza2JfcHVzaCgqc2tiLCBWTEFOX0hMRU4pOwotCQltZW1jcHkoKCpza2IpLT5kYXRhLCAoKnNrYiktPmRhdGEgKyA0LCA0KTsKLQkJbWVtY3B5KCgqc2tiKS0+ZGF0YSArIDQsICgqc2tiKS0+ZGF0YSArIDgsIDQpOwotCQltZW1jcHkoKCpza2IpLT5kYXRhICsgOCwgKCpza2IpLT5kYXRhICsgMTIsIDQpOwotCQl0YWcgPSAodTE2ICopKCgqc2tiKS0+ZGF0YSArIDEyKTsKKwkJc2tiX3B1c2goc2tiLCBWTEFOX0hMRU4pOworCQltZW1jcHkoc2tiLT5kYXRhLCBza2ItPmRhdGEgKyA0LCA0KTsKKwkJbWVtY3B5KHNrYi0+ZGF0YSArIDQsIHNrYi0+ZGF0YSArIDgsIDQpOworCQltZW1jcHkoc2tiLT5kYXRhICsgOCwgc2tiLT5kYXRhICsgMTIsIDQpOworCQl0YWcgPSAodTE2ICopKHNrYi0+ZGF0YSArIDEyKTsKIAkJLyoKIAkJICogZmlyc3QgdHdvIGJ5dGVzICA9IEVUSF9QXzgwMjFRICgweDgxMDApCiAJCSAqIHNlY29uZCB0d28gYnl0ZXMgPSBWTEFOSUQKIAkJICovCiAJCSp0YWcgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKLQkJKih0YWcgKyAxKSA9IGh0b25zKHZsYW5fdHhfdGFnX2dldCgqc2tiKSk7CisJCSoodGFnICsgMSkgPSBodG9ucyh2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CiAJfQogI2VuZGlmCi0JKmhkciA9IChzdHJ1Y3QgcWV0aF9oZHIgKikKLQkJcWV0aF9wdXNoX3NrYihjYXJkLCBza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKTsKLQlpZiAoKmhkciA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gKChzdHJ1Y3QgcWV0aF9oZHIgKikKKwkJcWV0aF9wdXNoX3NrYihjYXJkLCBza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorX19xZXRoX2ZyZWVfbmV3X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqb3JpZ19za2IsIHN0cnVjdCBza19idWZmICpuZXdfc2tiKQoreworCWlmIChvcmlnX3NrYiAhPSBuZXdfc2tiKQorCQlkZXZfa2ZyZWVfc2tiX2FueShuZXdfc2tiKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqCitxZXRoX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICpza2IsCisJCSBzdHJ1Y3QgcWV0aF9oZHIgKipoZHIsIGludCBpcHYpCit7CisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2I7CisJCisJUUVUSF9EQkZfVEVYVCh0cmFjZSwgNiwgInByZXBza2IiKTsKKworICAgICAgICBuZXdfc2tiID0gcWV0aF9yZWFsbG9jX2hlYWRyb29tKGNhcmQsIHNrYiwgc2l6ZW9mKHN0cnVjdCBxZXRoX2hkcikpOworICAgICAgIAlpZiAobmV3X3NrYiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwkqaGRyID0gX19xZXRoX3ByZXBhcmVfc2tiKGNhcmQsIG5ld19za2IsIGlwdik7CisJaWYgKCpoZHIgPT0gTlVMTCkgeworCQlfX3FldGhfZnJlZV9uZXdfc2tiKHNrYiwgbmV3X3NrYik7CisJCXJldHVybiBOVUxMOworCX0KKwlyZXR1cm4gbmV3X3NrYjsKIH0KIAogc3RhdGljIGlubGluZSB1OApAQCAtNDIwNiw5ICs0MjIyLDggQEAKIAkJZmx1c2hfY250ID0gMTsKIAl9IGVsc2UgewogCQlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAiZmlsbGJmcGEiKTsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JCXF1ZXVlLT5jYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrKys7Ci0jZW5kaWYKKwkJaWYgKHF1ZXVlLT5jYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQkJcXVldWUtPmNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2srKzsKIAkJaWYgKGJ1Zi0+bmV4dF9lbGVtZW50X3RvX2ZpbGwgPj0KIAkJCQlRRVRIX01BWF9CVUZGRVJfRUxFTUVOVFMocXVldWUtPmNhcmQpKSB7CiAJCQkvKgpAQCAtNDI0NSwyMSArNDI2MCwxNSBAQAogCSAqIGNoZWNrIGlmIGJ1ZmZlciBpcyBlbXB0eSB0byBtYWtlIHN1cmUgdGhhdCB3ZSBkbyBub3QgJ292ZXJ0YWtlJwogCSAqIG91cnNlbHZlcyBhbmQgdHJ5IHRvIGZpbGwgYSBidWZmZXIgdGhhdCBpcyBhbHJlYWR5IHByaW1lZAogCSAqLwotCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgewotCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQorCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgCisJCWdvdG8gb3V0OwogCWlmIChjdHggPT0gTlVMTCkKIAkJcXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgPSAocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyAxKSAlCiAJCQkJCSAgUURJT19NQVhfQlVGRkVSU19QRVJfUTsKIAllbHNlIHsKIAkJYnVmZmVyc19uZWVkZWQgPSBxZXRoX2VkZHBfY2hlY2tfYnVmZmVyc19mb3JfY29udGV4dChxdWV1ZSxjdHgpOwotCQlpZiAoYnVmZmVyc19uZWVkZWQgPCAwKSB7Ci0JCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0JCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQorCQlpZiAoYnVmZmVyc19uZWVkZWQgPCAwKSAKKwkJCWdvdG8gb3V0OwogCQlxdWV1ZS0+bmV4dF9idWZfdG9fZmlsbCA9CiAJCQkocXVldWUtPm5leHRfYnVmX3RvX2ZpbGwgKyBidWZmZXJzX25lZWRlZCkgJQogCQkJUURJT19NQVhfQlVGRkVSU19QRVJfUTsKQEAgLTQyNzQsNiArNDI4Myw5IEBACiAJCXFldGhfZmx1c2hfYnVmZmVycyhxdWV1ZSwgMCwgaW5kZXgsIGZsdXNoX2NudCk7CiAJfQogCXJldHVybiAwOworb3V0OgorCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CisJcmV0dXJuIC1FQlVTWTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTQyOTksOCArNDMxMSw3IEBACiAJICogY2hlY2sgaWYgYnVmZmVyIGlzIGVtcHR5IHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGRvIG5vdCAnb3ZlcnRha2UnCiAJICogb3Vyc2VsdmVzIGFuZCB0cnkgdG8gZmlsbCBhIGJ1ZmZlciB0aGF0IGlzIGFscmVhZHkgcHJpbWVkCiAJICovCi0JaWYgKGF0b21pY19yZWFkKCZidWZmZXItPnN0YXRlKSAhPSBRRVRIX1FESU9fQlVGX0VNUFRZKXsKLQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOworCWlmIChhdG9taWNfcmVhZCgmYnVmZmVyLT5zdGF0ZSkgIT0gUUVUSF9RRElPX0JVRl9FTVBUWSkgewogCQlhdG9taWNfc2V0KCZxdWV1ZS0+c3RhdGUsIFFFVEhfT1VUX1FfVU5MT0NLRUQpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTQzMjMsNyArNDMzNCw2IEBACiAJCQkJICogYWdhaW4gKi8KIAkJCQlpZiAoYXRvbWljX3JlYWQoJmJ1ZmZlci0+c3RhdGUpICE9CiAJCQkJCQlRRVRIX1FESU9fQlVGX0VNUFRZKXsKLQkJCQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7CiAJCQkJCWF0b21pY19zZXQoJnF1ZXVlLT5zdGF0ZSwgUUVUSF9PVVRfUV9VTkxPQ0tFRCk7CiAJCQkJCXJldHVybiAtRUJVU1k7CkBAIC00MzM0LDcgKzQzNDQsNiBAQAogCQkJICogZnJlZSBidWZmZXJzKSB0byBoYW5kbGUgZWRkcCBjb250ZXh0ICovCiAJCQlpZiAocWV0aF9lZGRwX2NoZWNrX2J1ZmZlcnNfZm9yX2NvbnRleHQocXVldWUsY3R4KSA8IDApewogCQkJCXByaW50aygiZWRkcCB0eF9kcm9wcGVkIDFcbiIpOwotCQkJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJCQlyYyA9IC1FQlVTWTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTQzNDYsNyArNDM1NSw2IEBACiAJCXRtcCA9IHFldGhfZWRkcF9maWxsX2J1ZmZlcihxdWV1ZSxjdHgscXVldWUtPm5leHRfYnVmX3RvX2ZpbGwpOwogCQlpZiAodG1wIDwgMCkgewogCQkJcHJpbnRrKCJlZGRwIHR4X2Ryb3BwZWQgMlxuIik7Ci0JCQljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCQlyYyA9IC0gRUJVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNDM4MCwxMCArNDM4OCw4IEBACiAJCQlxZXRoX2ZsdXNoX2J1ZmZlcnMocXVldWUsIDAsIHN0YXJ0X2luZGV4LCBmbHVzaF9jb3VudCk7CiAJfQogCS8qIGF0IHRoaXMgcG9pbnQgdGhlIHF1ZXVlIGlzIFVOTE9DS0VEIGFnYWluICovCi0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwotCWlmIChkb19wYWNrKQorCWlmIChxdWV1ZS0+Y2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cyAmJiBkb19wYWNrKQogCQlxdWV1ZS0+Y2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnRfcGFjayArPSBmbHVzaF9jb3VudDsKLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTICovCiAKIAlyZXR1cm4gcmM7CiB9CkBAIC00Mzk0LDIxICs0NDAwLDIxIEBACiB7CiAJaW50IGVsZW1lbnRzX25lZWRlZCA9IDA7CiAKLSAgICAgICAgaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPiAwKSB7CisgICAgICAgIGlmIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzID4gMCkgCiAgICAgICAgICAgICAgICAgZWxlbWVudHNfbmVlZGVkID0gKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgKyAxKTsKLQl9Ci0gICAgICAgIGlmIChlbGVtZW50c19uZWVkZWQgPT0gMCApCisgICAgICAgIGlmIChlbGVtZW50c19uZWVkZWQgPT0gMCkKICAgICAgICAgICAgICAgICBlbGVtZW50c19uZWVkZWQgPSAxICsgKCgoKCh1bnNpZ25lZCBsb25nKSBoZHIpICUgUEFHRV9TSVpFKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgc2tiLT5sZW4pID4+IFBBR0VfU0hJRlQpOwogCWlmICgoZWxlbWVudHNfbmVlZGVkICsgZWxlbXMpID4gUUVUSF9NQVhfQlVGRkVSX0VMRU1FTlRTKGNhcmQpKXsKLSAgICAgICAgICAgICAgICBQUklOVF9FUlIoInFldGhfZG9fc2VuZF9wYWNrZXQ6IGludmFsaWQgc2l6ZSBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJJUCBwYWNrZXQgKE51bWJlcj0lZCAvIExlbmd0aD0lZCkuIERpc2NhcmRlZC5cbiIsCisgICAgICAgICAgICAgICAgUFJJTlRfRVJSKCJJbnZhbGlkIHNpemUgb2YgSVAgcGFja2V0ICIKKwkJCSAgIihOdW1iZXI9JWQgLyBMZW5ndGg9JWQpLiBEaXNjYXJkZWQuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAoZWxlbWVudHNfbmVlZGVkK2VsZW1zKSwgc2tiLT5sZW4pOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBlbGVtZW50c19uZWVkZWQ7CiB9CiAKKwogc3RhdGljIGlubGluZSBpbnQKIHFldGhfc2VuZF9wYWNrZXQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTQ0MjAsMTEyICs0NDI2LDExMiBAQAogCWVudW0gcWV0aF9sYXJnZV9zZW5kX3R5cGVzIGxhcmdlX3NlbmQgPSBRRVRIX0xBUkdFX1NFTkRfTk87CiAJc3RydWN0IHFldGhfZWRkcF9jb250ZXh0ICpjdHggPSBOVUxMOwogCWludCB0eF9ieXRlcyA9IHNrYi0+bGVuOwotI2lmZGVmIENPTkZJR19RRVRIX1BFUkZfU1RBVFMKIAl1bnNpZ25lZCBzaG9ydCBucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CiAJdW5zaWduZWQgc2hvcnQgdHNvX3NpemUgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplOwotI2VuZGlmCisJc3RydWN0IHNrX2J1ZmYgKm5ld19za2IsICpuZXdfc2tiMjsKIAlpbnQgcmM7CiAKIAlRRVRIX0RCRl9URVhUKHRyYWNlLCA2LCAic2VuZHBrdCIpOwogCisJbmV3X3NrYiA9IHNrYjsKKwlpZiAoKGNhcmQtPmluZm8udHlwZSA9PSBRRVRIX0NBUkRfVFlQRV9PU04pICYmCisJICAgIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9QX0lQVjYpKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwljYXN0X3R5cGUgPSBxZXRoX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKKwlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSAmJgorCSAgICAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSAwKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlxdWV1ZSA9IGNhcmQtPnFkaW8ub3V0X3FzCisJCVtxZXRoX2dldF9wcmlvcml0eV9xdWV1ZShjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKV07CiAJaWYgKCFjYXJkLT5vcHRpb25zLmxheWVyMikgewogCQlpcHYgPSBxZXRoX2dldF9pcF92ZXJzaW9uKHNrYik7CiAJCWlmICgoY2FyZC0+ZGV2LT5oYXJkX2hlYWRlciA9PSBxZXRoX2Zha2VfaGVhZGVyKSAmJiBpcHYpIHsKLSAgICAgICAgICAgICAgIAkJaWYgKChza2IgPSBxZXRoX3Bza2JfdW5zaGFyZShza2IsR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIAljYXJkLT5zdGF0cy50eF9kcm9wcGVkKys7Ci0gICAgICAgICAgICAgICAgICAgICAgICAJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIAlyZXR1cm4gMDsKLSAgICAgICAgICAgICAgICAJfQorCQkJbmV3X3NrYiA9IHFldGhfcHNrYl91bnNoYXJlKHNrYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIW5ld19za2IpCisJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQlpZihjYXJkLT5kZXYtPnR5cGUgPT0gQVJQSFJEX0lFRUU4MDJfVFIpewotCQkJCXNrYl9wdWxsKHNrYiwgUUVUSF9GQUtFX0xMX0xFTl9UUik7CisJCQkJc2tiX3B1bGwobmV3X3NrYiwgUUVUSF9GQUtFX0xMX0xFTl9UUik7CiAJCQl9IGVsc2UgewotICAgICAgICAgICAgICAgIAkJc2tiX3B1bGwoc2tiLCBRRVRIX0ZBS0VfTExfTEVOX0VUSCk7CisJCQkJc2tiX3B1bGwobmV3X3NrYiwgUUVUSF9GQUtFX0xMX0xFTl9FVEgpOwogCQkJfQogCQl9CiAJfQotCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikgJiYKLQkJKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpKSB7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiAwOwotCX0KLQljYXN0X3R5cGUgPSBxZXRoX2dldF9jYXN0X3R5cGUoY2FyZCwgc2tiKTsKLQlpZiAoKGNhc3RfdHlwZSA9PSBSVE5fQlJPQURDQVNUKSAmJgotCSAgICAoY2FyZC0+aW5mby5icm9hZGNhc3RfY2FwYWJsZSA9PSAwKSl7Ci0JCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLQkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXJldHVybiBORVRERVZfVFhfT0s7Ci0JfQotCXF1ZXVlID0gY2FyZC0+cWRpby5vdXRfcXMKLQkJW3FldGhfZ2V0X3ByaW9yaXR5X3F1ZXVlKGNhcmQsIHNrYiwgaXB2LCBjYXN0X3R5cGUpXTsKLQogCWlmIChza2JfaXNfZ3NvKHNrYikpCiAJCWxhcmdlX3NlbmQgPSBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQ7Ci0KLQkvKmFyZSB3ZSBhYmxlIHRvIGRvIFRTTyA/IElmIHNvICxwcmVwYXJlIGFuZCBzZW5kIGl0IGZyb20gaGVyZSAqLworCS8qIGNoZWNrIG9uIE9TTiBkZXZpY2UqLworCWlmIChjYXJkLT5pbmZvLnR5cGUgPT0gUUVUSF9DQVJEX1RZUEVfT1NOKQorCQloZHIgPSAoc3RydWN0IHFldGhfaGRyICopbmV3X3NrYi0+ZGF0YTsKKwkvKmFyZSB3ZSBhYmxlIHRvIGRvIFRTTyA/ICovCiAJaWYgKChsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9UU08pICYmCiAJICAgIChjYXN0X3R5cGUgPT0gUlROX1VOU1BFQykpIHsKLQkJcmMgPSBxZXRoX3Rzb19wcmVwYXJlX3BhY2tldChjYXJkLCBza2IsIGlwdiwgY2FzdF90eXBlKTsKKwkJcmMgPSBxZXRoX3Rzb19wcmVwYXJlX3BhY2tldChjYXJkLCBuZXdfc2tiLCBpcHYsIGNhc3RfdHlwZSk7CiAJCWlmIChyYykgewotCQkJY2FyZC0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJY2FyZC0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCQkJcmV0dXJuIE5FVERFVl9UWF9PSzsKLQkJfQotCQllbGVtZW50c19uZWVkZWQrKzsKLQl9IGVsc2UgewotCQlpZiAoKHJjID0gcWV0aF9wcmVwYXJlX3NrYihjYXJkLCAmc2tiLCAmaGRyLCBpcHYpKSkgewotCQkJUUVUSF9EQkZfVEVYVF8odHJhY2UsIDQsICJwc2tiZSVkIiwgcmMpOworCQkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwogCQkJcmV0dXJuIHJjOwogCQl9Ci0JCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfT1NOKQotCQkJcWV0aF9maWxsX2hlYWRlcihjYXJkLCBoZHIsIHNrYiwgaXB2LCBjYXN0X3R5cGUpOworCQllbGVtZW50c19uZWVkZWQrKzsKKwl9IGVsc2UgaWYgKGNhcmQtPmluZm8udHlwZSAhPSBRRVRIX0NBUkRfVFlQRV9PU04pIHsKKwkJbmV3X3NrYjIgPSBxZXRoX3ByZXBhcmVfc2tiKGNhcmQsIG5ld19za2IsICZoZHIsIGlwdik7CisJCWlmICghbmV3X3NrYjIpIHsKKwkJCV9fcWV0aF9mcmVlX25ld19za2Ioc2tiLCBuZXdfc2tiKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChuZXdfc2tiICE9IHNrYikKKwkJCV9fcWV0aF9mcmVlX25ld19za2IobmV3X3NrYjIsIG5ld19za2IpOworCQluZXdfc2tiID0gbmV3X3NrYjI7CisJCXFldGhfZmlsbF9oZWFkZXIoY2FyZCwgaGRyLCBuZXdfc2tiLCBpcHYsIGNhc3RfdHlwZSk7CiAJfQotCiAJaWYgKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX0VERFApIHsKLQkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIHNrYiwgaGRyKTsKKwkJY3R4ID0gcWV0aF9lZGRwX2NyZWF0ZV9jb250ZXh0KGNhcmQsIG5ld19za2IsIGhkcik7CiAJCWlmIChjdHggPT0gTlVMTCkgeworCQkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwogCQkJUFJJTlRfV0FSTigiY291bGQgbm90IGNyZWF0ZSBlZGRwIGNvbnRleHRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9IGVsc2UgewotCQlpbnQgZWxlbXMgPSBxZXRoX2dldF9lbGVtZW50c19ubyhjYXJkLCh2b2lkKikgaGRyLCBza2IsCisJCWludCBlbGVtcyA9IHFldGhfZ2V0X2VsZW1lbnRzX25vKGNhcmQsKHZvaWQqKSBoZHIsIG5ld19za2IsCiAJCQkJCQkgZWxlbWVudHNfbmVlZGVkKTsKLQkJaWYgKCFlbGVtcykKKwkJaWYgKCFlbGVtcykgeworCQkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAkJZWxlbWVudHNfbmVlZGVkICs9IGVsZW1zOwogCX0KIAogCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQotCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIHNrYiwgaGRyLAorCQlyYyA9IHFldGhfZG9fc2VuZF9wYWNrZXQoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKIAkJCQkJIGVsZW1lbnRzX25lZWRlZCwgY3R4KTsKIAllbHNlCi0JCXJjID0gcWV0aF9kb19zZW5kX3BhY2tldF9mYXN0KGNhcmQsIHF1ZXVlLCBza2IsIGhkciwKKwkJcmMgPSBxZXRoX2RvX3NlbmRfcGFja2V0X2Zhc3QoY2FyZCwgcXVldWUsIG5ld19za2IsIGhkciwKIAkJCQkJICAgICAgZWxlbWVudHNfbmVlZGVkLCBjdHgpOwotCWlmICghcmMpeworCWlmICghcmMpIHsKIAkJY2FyZC0+c3RhdHMudHhfcGFja2V0cysrOwogCQljYXJkLT5zdGF0cy50eF9ieXRlcyArPSB0eF9ieXRlczsKLSNpZmRlZiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTCi0JCWlmICh0c29fc2l6ZSAmJgotCQkgICAhKGxhcmdlX3NlbmQgPT0gUUVUSF9MQVJHRV9TRU5EX05PKSkgewotCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2J5dGVzICs9IHR4X2J5dGVzOwotCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOworCQlpZiAobmV3X3NrYiAhPSBza2IpCisJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlpZiAoY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykgeworCQkJaWYgKHRzb19zaXplICYmCisJCQkgICAgIShsYXJnZV9zZW5kID09IFFFVEhfTEFSR0VfU0VORF9OTykpIHsKKwkJCQljYXJkLT5wZXJmX3N0YXRzLmxhcmdlX3NlbmRfYnl0ZXMgKz0gdHhfYnl0ZXM7CisJCQkJY2FyZC0+cGVyZl9zdGF0cy5sYXJnZV9zZW5kX2NudCsrOworCQkJfQorCQkJaWYgKG5yX2ZyYWdzID4gMCkgeworCQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7CisJCQkJLyogbnJfZnJhZ3MgKyBza2ItPmRhdGEgKi8KKwkJCQljYXJkLT5wZXJmX3N0YXRzLnNnX2ZyYWdzX3NlbnQgKz0KKwkJCQkJbnJfZnJhZ3MgKyAxOworCQkJfQogCQl9Ci0gCQlpZiAobnJfZnJhZ3MgPiAwKXsKLQkJCWNhcmQtPnBlcmZfc3RhdHMuc2dfc2tic19zZW50Kys7Ci0JCQkvKiBucl9mcmFncyArIHNrYi0+ZGF0YSAqLwotCQkJY2FyZC0+cGVyZl9zdGF0cy5zZ19mcmFnc19zZW50ICs9Ci0JCQkJbnJfZnJhZ3MgKyAxOwotCQl9Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfUEVSRl9TVEFUUyAqLworCX0gZWxzZSB7CisJCWNhcmQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJX19xZXRoX2ZyZWVfbmV3X3NrYihza2IsIG5ld19za2IpOwogCX0KIAlpZiAoY3R4ICE9IE5VTEwpIHsKIAkJLyogZHJvcCBjcmVhdG9yJ3MgcmVmZXJlbmNlICovCiAJCXFldGhfZWRkcF9wdXRfY29udGV4dChjdHgpOwogCQkvKiBmcmVlIHNrYjsgaXQncyBub3QgcmVmZXJlbmNlZCBieSBhIGJ1ZmZlciAqLwotCQlpZiAocmMgPT0gMCkKLQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0KKwkJaWYgKCFyYykKKwkJICAgICAgIGRldl9rZnJlZV9za2JfYW55KG5ld19za2IpOwogCX0KIAlyZXR1cm4gcmM7CiB9CkBAIC03MzM4LDYgKzczNDQsOCBAQAogCVFFVEhfREJGX1RFWFQodHJhY2UsMywic2V0cnRnNiIpOwogI2lmZGVmIENPTkZJR19RRVRIX0lQVjYKIAorCWlmICghcWV0aF9pc19zdXBwb3J0ZWQoY2FyZCwgSVBBX0lQVjYpKQorCQlyZXR1cm4gMDsKIAlxZXRoX2NvcnJlY3Rfcm91dGluZ190eXBlKGNhcmQsICZjYXJkLT5vcHRpb25zLnJvdXRlNi50eXBlLAogCQkJCSAgUUVUSF9QUk9UX0lQVjYpOwogCkBAIC03ODc2LDEyICs3ODg0LDEyIEBACiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNWVyciVkIiwgcmMpOwogCQlnb3RvIG91dF9yZW1vdmU7CiAJfQotCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7CiAKIAlpZiAoKHJjID0gcWV0aF9pbml0X3FkaW9fcXVldWVzKGNhcmQpKSl7CiAJCVFFVEhfREJGX1RFWFRfKHNldHVwLCAyLCAiNmVyciVkIiwgcmMpOwogCQlnb3RvIG91dF9yZW1vdmU7CiAJfQorCWNhcmQtPnN0YXRlID0gQ0FSRF9TVEFURV9TT0ZUU0VUVVA7CiAJbmV0aWZfY2Fycmllcl9vbihjYXJkLT5kZXYpOwogCiAJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDB4ZmZmZmZmZmYsIDApOwpAQCAtODUxMCw5ICs4NTE4LDkgQEAKIHFldGhfaXB2Nl9pbml0KHZvaWQpCiB7CiAJcWV0aF9vbGRfYXJwX2NvbnN0cnVjdG9yID0gYXJwX3RibC5jb25zdHJ1Y3RvcjsKLQl3cml0ZV9sb2NrKCZhcnBfdGJsLmxvY2spOworCXdyaXRlX2xvY2tfYmgoJmFycF90YmwubG9jayk7CiAJYXJwX3RibC5jb25zdHJ1Y3RvciA9IHFldGhfYXJwX2NvbnN0cnVjdG9yOwotCXdyaXRlX3VubG9jaygmYXJwX3RibC5sb2NrKTsKKwl3cml0ZV91bmxvY2tfYmgoJmFycF90YmwubG9jayk7CiAKIAlhcnBfZGlyZWN0X29wcyA9IChzdHJ1Y3QgbmVpZ2hfb3BzKikKIAkJa21hbGxvYyhzaXplb2Yoc3RydWN0IG5laWdoX29wcyksIEdGUF9LRVJORUwpOwpAQCAtODUyOCw5ICs4NTM2LDkgQEAKIHN0YXRpYyB2b2lkCiBxZXRoX2lwdjZfdW5pbml0KHZvaWQpCiB7Ci0Jd3JpdGVfbG9jaygmYXJwX3RibC5sb2NrKTsKKwl3cml0ZV9sb2NrX2JoKCZhcnBfdGJsLmxvY2spOwogCWFycF90YmwuY29uc3RydWN0b3IgPSBxZXRoX29sZF9hcnBfY29uc3RydWN0b3I7Ci0Jd3JpdGVfdW5sb2NrKCZhcnBfdGJsLmxvY2spOworCXdyaXRlX3VubG9ja19iaCgmYXJwX3RibC5sb2NrKTsKIAlrZnJlZShhcnBfZGlyZWN0X29wcyk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1FFVEhfSVBWNiAqLwpAQCAtODUzOCwzNCArODU0Niw0NCBAQAogc3RhdGljIHZvaWQKIHFldGhfc3lzZnNfdW5yZWdpc3Rlcih2b2lkKQogeworCXMzOTBfcm9vdF9kZXZfdW5yZWdpc3RlcihxZXRoX3Jvb3RfZGV2KTsKIAlxZXRoX3JlbW92ZV9kcml2ZXJfYXR0cmlidXRlcygpOwogCWNjd19kcml2ZXJfdW5yZWdpc3RlcigmcWV0aF9jY3dfZHJpdmVyKTsKIAljY3dncm91cF9kcml2ZXJfdW5yZWdpc3RlcigmcWV0aF9jY3dncm91cF9kcml2ZXIpOwotCXMzOTBfcm9vdF9kZXZfdW5yZWdpc3RlcihxZXRoX3Jvb3RfZGV2KTsKIH0KKwogLyoqCiAgKiByZWdpc3RlciBxZXRoIGF0IHN5c2ZzCiAgKi8KIHN0YXRpYyBpbnQKIHFldGhfc3lzZnNfcmVnaXN0ZXIodm9pZCkKIHsKLQlpbnQgcmM9MDsKKwlpbnQgcmM7CiAKIAlyYyA9IGNjd2dyb3VwX2RyaXZlcl9yZWdpc3RlcigmcWV0aF9jY3dncm91cF9kcml2ZXIpOwogCWlmIChyYykKLQkJcmV0dXJuIHJjOworCQlnb3RvIG91dDsKKwogCXJjID0gY2N3X2RyaXZlcl9yZWdpc3RlcigmcWV0aF9jY3dfZHJpdmVyKTsKIAlpZiAocmMpCi0JIAlyZXR1cm4gcmM7CisJCWdvdG8gb3V0X2Njd19kcml2ZXI7CisKIAlyYyA9IHFldGhfY3JlYXRlX2RyaXZlcl9hdHRyaWJ1dGVzKCk7CiAJaWYgKHJjKQotCQlyZXR1cm4gcmM7CisJCWdvdG8gb3V0X3FldGhfYXR0cjsKKwogCXFldGhfcm9vdF9kZXYgPSBzMzkwX3Jvb3RfZGV2X3JlZ2lzdGVyKCJxZXRoIik7Ci0JaWYgKElTX0VSUihxZXRoX3Jvb3RfZGV2KSkgewotCQlyYyA9IFBUUl9FUlIocWV0aF9yb290X2Rldik7Ci0JCXJldHVybiByYzsKLQl9Ci0JcmV0dXJuIDA7CisJcmMgPSBJU19FUlIocWV0aF9yb290X2RldikgPyBQVFJfRVJSKHFldGhfcm9vdF9kZXYpIDogMDsKKwlpZiAoIXJjKQorCQlnb3RvIG91dDsKKworCXFldGhfcmVtb3ZlX2RyaXZlcl9hdHRyaWJ1dGVzKCk7CitvdXRfcWV0aF9hdHRyOgorCWNjd19kcml2ZXJfdW5yZWdpc3RlcigmcWV0aF9jY3dfZHJpdmVyKTsKK291dF9jY3dfZHJpdmVyOgorCWNjd2dyb3VwX2RyaXZlcl91bnJlZ2lzdGVyKCZxZXRoX2Njd2dyb3VwX2RyaXZlcik7CitvdXQ6CisJcmV0dXJuIHJjOwogfQogCiAvKioqCkBAIC04NTc0LDcgKzg1OTIsNyBAQAogc3RhdGljIGludCBfX2luaXQKIHFldGhfaW5pdCh2b2lkKQogewotCWludCByYz0wOworCWludCByYzsKIAogCVBSSU5UX0lORk8oImxvYWRpbmcgJXNcbiIsIHZlcnNpb24pOwogCkBAIC04NTgzLDIwICs4NjAxLDI2IEBACiAJc3Bpbl9sb2NrX2luaXQoJnFldGhfbm90aWZ5X2xvY2spOwogCXJ3bG9ja19pbml0KCZxZXRoX2NhcmRfbGlzdC5yd2xvY2spOwogCi0JaWYgKHFldGhfcmVnaXN0ZXJfZGJmX3ZpZXdzKCkpCisJcmMgPSBxZXRoX3JlZ2lzdGVyX2RiZl92aWV3cygpOworCWlmIChyYykKIAkJZ290byBvdXRfZXJyOwotCWlmIChxZXRoX3N5c2ZzX3JlZ2lzdGVyKCkpCi0JCWdvdG8gb3V0X3N5c2ZzOworCisJcmMgPSBxZXRoX3N5c2ZzX3JlZ2lzdGVyKCk7CisJaWYgKHJjKQorCQlnb3RvIG91dF9kYmY7CiAKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JaWYgKHFldGhfaXB2Nl9pbml0KCkpIHsKLQkJUFJJTlRfRVJSKCJPdXQgb2YgbWVtb3J5IGR1cmluZyBpcHY2IGluaXQuXG4iKTsKKwlyYyA9IHFldGhfaXB2Nl9pbml0KCk7CisJaWYgKHJjKSB7CisJCVBSSU5UX0VSUigiT3V0IG9mIG1lbW9yeSBkdXJpbmcgaXB2NiBpbml0IGNvZGUgPSAlZFxuIiwgcmMpOwogCQlnb3RvIG91dF9zeXNmczsKIAl9CiAjZW5kaWYgLyogUUVUSF9JUFY2ICovCi0JaWYgKHFldGhfcmVnaXN0ZXJfbm90aWZpZXJzKCkpCisJcmMgPSBxZXRoX3JlZ2lzdGVyX25vdGlmaWVycygpOworCWlmIChyYykKIAkJZ290byBvdXRfaXB2NjsKLQlpZiAocWV0aF9jcmVhdGVfcHJvY2ZzX2VudHJpZXMoKSkKKwlyYyA9IHFldGhfY3JlYXRlX3Byb2Nmc19lbnRyaWVzKCk7CisJaWYgKHJjKQogCQlnb3RvIG91dF9ub3RpZmllcnM7CiAKIAlyZXR1cm4gcmM7CkBAIC04NjA2LDEyICs4NjMwLDEzIEBACiBvdXRfaXB2NjoKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2CiAJcWV0aF9pcHY2X3VuaW5pdCgpOwotI2VuZGlmIC8qIFFFVEhfSVBWNiAqLwogb3V0X3N5c2ZzOgorI2VuZGlmIC8qIFFFVEhfSVBWNiAqLwogCXFldGhfc3lzZnNfdW5yZWdpc3RlcigpOworb3V0X2RiZjoKIAlxZXRoX3VucmVnaXN0ZXJfZGJmX3ZpZXdzKCk7CiBvdXRfZXJyOgotCVBSSU5UX0VSUigiSW5pdGlhbGl6YXRpb24gZmFpbGVkIik7CisJUFJJTlRfRVJSKCJJbml0aWFsaXphdGlvbiBmYWlsZWQgd2l0aCBjb2RlICVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Byb2MuYwppbmRleCA2NmYyZGExLi5mYWE3NjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9wcm9jLmMKQEAgLTE3Myw3ICsxNzMsNiBAQAogI2RlZmluZSBRRVRIX1BFUkZfUFJPQ0ZJTEVfTkFNRSAicWV0aF9wZXJmIgogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcWV0aF9wZXJmX3Byb2NmaWxlOwogCi0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwogc3RhdGljIGludAogcWV0aF9wZXJmX3Byb2NmaWxlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQpCiB7CkBAIC0xOTIsMTQgKzE5MSwyMSBAQAogCQkJQ0FSRF9EREVWX0lEKGNhcmQpLAogCQkJUUVUSF9DQVJEX0lGTkFNRShjYXJkKQogCQkgICk7CisJaWYgKCFjYXJkLT5vcHRpb25zLnBlcmZvcm1hbmNlX3N0YXRzKQorCQlzZXFfcHJpbnRmKHMsICJQZXJmb3JtYW5jZSBzdGF0aXN0aWNzIGFyZSBkZWFjdGl2YXRlZC5cbiIpOwogCXNlcV9wcmludGYocywgIiAgU2tiJ3MvYnVmZmVycyByZWNlaXZlZCAgICAgICAgICAgICAgICAgOiAlbHUvJXVcbiIKIAkJICAgICAgIiAgU2tiJ3MvYnVmZmVycyBzZW50ICAgICAgICAgICAgICAgICAgICAgOiAlbHUvJXVcblxuIiwKLQkJICAgICAgICBjYXJkLT5zdGF0cy5yeF9wYWNrZXRzLCBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfcmVjLAotCQkgICAgICAgIGNhcmQtPnN0YXRzLnR4X3BhY2tldHMsIGNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50CisJCSAgICAgICAgY2FyZC0+c3RhdHMucnhfcGFja2V0cyAtCisJCQkJY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3J4X3BhY2tldHMsCisJCQljYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfcmVjLAorCQkgICAgICAgIGNhcmQtPnN0YXRzLnR4X3BhY2tldHMgLQorCQkJCWNhcmQtPnBlcmZfc3RhdHMuaW5pdGlhbF90eF9wYWNrZXRzLAorCQkJY2FyZC0+cGVyZl9zdGF0cy5idWZzX3NlbnQKIAkJICApOwogCXNlcV9wcmludGYocywgIiAgU2tiJ3MvYnVmZmVycyBzZW50IHdpdGhvdXQgcGFja2luZyAgICAgOiAlbHUvJXVcbiIKIAkJICAgICAgIiAgU2tiJ3MvYnVmZmVycyBzZW50IHdpdGggcGFja2luZyAgICAgICAgOiAldS8ldVxuXG4iLAotCQkgICBjYXJkLT5zdGF0cy50eF9wYWNrZXRzIC0gY2FyZC0+cGVyZl9zdGF0cy5za2JzX3NlbnRfcGFjaywKKwkJICAgY2FyZC0+c3RhdHMudHhfcGFja2V0cyAtIGNhcmQtPnBlcmZfc3RhdHMuaW5pdGlhbF90eF9wYWNrZXRzCisJCQkJCSAgLSBjYXJkLT5wZXJmX3N0YXRzLnNrYnNfc2VudF9wYWNrLAogCQkgICBjYXJkLT5wZXJmX3N0YXRzLmJ1ZnNfc2VudCAtIGNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50X3BhY2ssCiAJCSAgIGNhcmQtPnBlcmZfc3RhdHMuc2tic19zZW50X3BhY2ssCiAJCSAgIGNhcmQtPnBlcmZfc3RhdHMuYnVmc19zZW50X3BhY2sKQEAgLTI3NSwxMSArMjgxLDYgQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlLAogfTsKIAotI2RlZmluZSBxZXRoX3BlcmZfcHJvY2ZpbGVfY3JlYXRlZCBxZXRoX3BlcmZfcHJvY2ZpbGUKLSNlbHNlCi0jZGVmaW5lIHFldGhfcGVyZl9wcm9jZmlsZV9jcmVhdGVkIDEKLSNlbmRpZiAvKiBDT05GSUdfUUVUSF9QRVJGX1NUQVRTICovCi0KIGludCBfX2luaXQKIHFldGhfY3JlYXRlX3Byb2Nmc19lbnRyaWVzKHZvaWQpCiB7CkBAIC0yODgsMTUgKzI4OSwxMyBAQAogCWlmIChxZXRoX3Byb2NmaWxlKQogCQlxZXRoX3Byb2NmaWxlLT5wcm9jX2ZvcHMgPSAmcWV0aF9wcm9jZmlsZV9mb3BzOwogCi0jaWZkZWYgQ09ORklHX1FFVEhfUEVSRl9TVEFUUwogCXFldGhfcGVyZl9wcm9jZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFFFVEhfUEVSRl9QUk9DRklMRV9OQU1FLAogCQkJCQkgICBTX0lGUkVHIHwgMDQ0NCwgTlVMTCk7CiAJaWYgKHFldGhfcGVyZl9wcm9jZmlsZSkKIAkJcWV0aF9wZXJmX3Byb2NmaWxlLT5wcm9jX2ZvcHMgPSAmcWV0aF9wZXJmX3Byb2NmaWxlX2ZvcHM7Ci0jZW5kaWYgLyogQ09ORklHX1FFVEhfUEVSRl9TVEFUUyAqLwogCiAJaWYgKHFldGhfcHJvY2ZpbGUgJiYKLQkgICAgcWV0aF9wZXJmX3Byb2NmaWxlX2NyZWF0ZWQpCisJICAgIHFldGhfcGVyZl9wcm9jZmlsZSkKIAkJcmV0dXJuIDA7CiAJZWxzZQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwppbmRleCAwMDE0OTdiLi41ODM2NzM3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9zeXMuYwpAQCAtNzQzLDYgKzc0Myw0NyBAQAogCQkgICBxZXRoX2Rldl9sYXllcjJfc3RvcmUpOwogCiBzdGF0aWMgc3NpemVfdAorcWV0aF9kZXZfcGVyZm9ybWFuY2Vfc3RhdHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoIWNhcmQpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGNhcmQtPm9wdGlvbnMucGVyZm9ybWFuY2Vfc3RhdHMgPyAxOjApOworfQorCitzdGF0aWMgc3NpemVfdAorcWV0aF9kZXZfcGVyZm9ybWFuY2Vfc3RhdHNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldi0+ZHJpdmVyX2RhdGE7CisJY2hhciAqdG1wOworCWludCBpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWkgPSBzaW1wbGVfc3RydG91bChidWYsICZ0bXAsIDE2KTsKKwlpZiAoKGkgPT0gMCkgfHwgKGkgPT0gMSkpIHsKKwkJaWYgKGkgPT0gY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cykKKwkJCXJldHVybiBjb3VudDsKKwkJY2FyZC0+b3B0aW9ucy5wZXJmb3JtYW5jZV9zdGF0cyA9IGk7CisJCWlmIChpID09IDApCisJCQltZW1zZXQoJmNhcmQtPnBlcmZfc3RhdHMsIDAsCisJCQkJc2l6ZW9mKHN0cnVjdCBxZXRoX3BlcmZfc3RhdHMpKTsKKwkJY2FyZC0+cGVyZl9zdGF0cy5pbml0aWFsX3J4X3BhY2tldHMgPSBjYXJkLT5zdGF0cy5yeF9wYWNrZXRzOworCQljYXJkLT5wZXJmX3N0YXRzLmluaXRpYWxfdHhfcGFja2V0cyA9IGNhcmQtPnN0YXRzLnR4X3BhY2tldHM7CisJfSBlbHNlIHsKKwkJUFJJTlRfV0FSTigicGVyZm9ybWFuY2Vfc3RhdHM6IHdyaXRlIDAgb3IgMSB0byB0aGlzIGZpbGUhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIERFVklDRV9BVFRSKHBlcmZvcm1hbmNlX3N0YXRzLCAwNjQ0LCBxZXRoX2Rldl9wZXJmb3JtYW5jZV9zdGF0c19zaG93LAorCQkgICBxZXRoX2Rldl9wZXJmb3JtYW5jZV9zdGF0c19zdG9yZSk7CisKK3N0YXRpYyBzc2l6ZV90CiBxZXRoX2Rldl9sYXJnZV9zZW5kX3Nob3coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBxZXRoX2NhcmQgKmNhcmQgPSBkZXYtPmRyaXZlcl9kYXRhOwpAQCAtOTI4LDYgKzk2OSw3IEBACiAJJmRldl9hdHRyX2Nhbm9uaWNhbF9tYWNhZGRyLAogCSZkZXZfYXR0cl9sYXllcjIsCiAJJmRldl9hdHRyX2xhcmdlX3NlbmQsCisJJmRldl9hdHRyX3BlcmZvcm1hbmNlX3N0YXRzLAogCU5VTEwsCiB9OwogCkBAIC0xMTEwLDEyICsxMTUyLDEyIEBACiB7CiAJY29uc3QgY2hhciAqc3RhcnQsICplbmQ7CiAJY2hhciAqdG1wOwotCWNoYXIgYnVmZmVyWzQ5XSA9IHswLCB9OworCWNoYXIgYnVmZmVyWzQwXSA9IHswLCB9OwogCiAJc3RhcnQgPSBidWY7CiAJLyogZ2V0IGFkZHJlc3Mgc3RyaW5nICovCiAJZW5kID0gc3RyY2hyKHN0YXJ0LCAnLycpOwotCWlmICghZW5kIHx8IChlbmQtc3RhcnQgPj0gNDkpKXsKKwlpZiAoIWVuZCB8fCAoZW5kIC0gc3RhcnQgPj0gNDApKXsKIAkJUFJJTlRfV0FSTigiSW52YWxpZCBmb3JtYXQgZm9yIGlwYXRvX2FkZHgvZGVseC4gIgogCQkJICAgIlVzZSA8aXAgYWRkcj4vPG1hc2sgYml0cz5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExMjcsNyArMTE2OSwxMiBAQAogCX0KIAlzdGFydCA9IGVuZCArIDE7CiAJKm1hc2tfYml0cyA9IHNpbXBsZV9zdHJ0b3VsKHN0YXJ0LCAmdG1wLCAxMCk7Ci0KKwlpZiAoIXN0cmxlbihzdGFydCkgfHwKKwkgICAgKHRtcCA9PSBzdGFydCkgfHwKKwkgICAgKCptYXNrX2JpdHMgPiAoKHByb3RvID09IFFFVEhfUFJPVF9JUFY0KSA/IDMyIDogMTI4KSkpIHsKKwkJUFJJTlRfV0FSTigiSW52YWxpZCBtYXNrIGJpdHMgZm9yIGlwYXRvX2FkZHgvZGVseCAhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXJldHVybiAwOwogfQogCkBAIC0xNjk4LDExICsxNzQ1LDE2IEBACiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCk7CiAJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfaXBhdG9fZ3JvdXApOwogCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3ZpcGFfZ3JvdXApOwotCX0KLQlpZiAoKHJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYmxrdF9ncm91cCkpKQogCQlyZXR1cm4gcmV0OwotCi0JcmV0dXJuIHJldDsKKwl9CisJaWYgKChyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX2Jsa3RfZ3JvdXApKSl7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfYXR0cl9ncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmcWV0aF9kZXZpY2VfaXBhdG9fZ3JvdXApOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3ZpcGFfZ3JvdXApOworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJnFldGhfZGV2aWNlX3J4aXBfZ3JvdXApOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX3Rzby5oCmluZGV4IDU5M2YyOTguLjE0NTA0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF90c28uaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfdHNvLmgKQEAgLTI0LDcgKzI0LDcgQEAKIHFldGhfdHNvX3ByZXBhcmVfc2tiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBza19idWZmICoqc2tiKQogewogCVFFVEhfREJGX1RFWFQodHJhY2UsIDUsICJ0c29wcnNrIik7Ci0JcmV0dXJuIHFldGhfcHVzaF9za2IoY2FyZCwgc2tiLCBzaXplb2Yoc3RydWN0IHFldGhfaGRyX3RzbykpOworCXJldHVybiBxZXRoX3B1c2hfc2tiKGNhcmQsICpza2IsIHNpemVvZihzdHJ1Y3QgcWV0aF9oZHJfdHNvKSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3MzOTBtYWNoLmMgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwppbmRleCA1Mzk5YzVkLi5hOTE0MTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYworKysgYi9kcml2ZXJzL3MzOTAvczM5MG1hY2guYwpAQCAtMTksOSArMTksNiBAQAogCiAjaW5jbHVkZSAiczM5MG1hY2guaCIKIAotI2RlZmluZSBEQkcgcHJpbnRrCi0vLyAjZGVmaW5lIERCRyhhcmdzLC4uLikgZG8ge30gd2hpbGUgKDApOwotCiBzdGF0aWMgc3RydWN0IHNlbWFwaG9yZSBtX3NlbTsKIAogZXh0ZXJuIGludCBjc3NfcHJvY2Vzc19jcncoaW50LCBpbnQpOwpAQCAtODMsMTEgKzgwLDExIEBACiAJCWNjb2RlID0gc3RjcncoJmNyd1tjaGFpbl0pOwogCQlpZiAoY2NvZGUgIT0gMCkKIAkJCWJyZWFrOwotCQlEQkcoS0VSTl9ERUJVRyAiY3J3X2luZm8gOiBDUlcgcmVwb3J0cyBzbGN0PSVkLCBvZmx3PSVkLCAiCi0JCSAgICAiY2huPSVkLCByc2M9JVgsIGFuYz0lZCwgZXJjPSVYLCByc2lkPSVYXG4iLAotCQkgICAgY3J3W2NoYWluXS5zbGN0LCBjcndbY2hhaW5dLm9mbHcsIGNyd1tjaGFpbl0uY2huLAotCQkgICAgY3J3W2NoYWluXS5yc2MsIGNyd1tjaGFpbl0uYW5jLCBjcndbY2hhaW5dLmVyYywKLQkJICAgIGNyd1tjaGFpbl0ucnNpZCk7CisJCXByaW50ayhLRVJOX0RFQlVHICJjcndfaW5mbyA6IENSVyByZXBvcnRzIHNsY3Q9JWQsIG9mbHc9JWQsICIKKwkJICAgICAgICJjaG49JWQsIHJzYz0lWCwgYW5jPSVkLCBlcmM9JVgsIHJzaWQ9JVhcbiIsCisJCSAgICAgICBjcndbY2hhaW5dLnNsY3QsIGNyd1tjaGFpbl0ub2ZsdywgY3J3W2NoYWluXS5jaG4sCisJCSAgICAgICBjcndbY2hhaW5dLnJzYywgY3J3W2NoYWluXS5hbmMsIGNyd1tjaGFpbl0uZXJjLAorCQkgICAgICAgY3J3W2NoYWluXS5yc2lkKTsKIAkJLyogQ2hlY2sgZm9yIG92ZXJmbG93cy4gKi8KIAkJaWYgKGNyd1tjaGFpbl0ub2ZsdykgewogCQkJcHJfZGVidWcoIiVzOiBjcncgb3ZlcmZsb3cgZGV0ZWN0ZWQhXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTE3LDggKzExNCw4IEBACiAJCQkgKiByZXBvcnRlZCB0byB0aGUgY29tbW9uIEkvTyBsYXllci4KIAkJCSAqLwogCQkJaWYgKGNyd1tjaGFpbl0uc2xjdCkgewotCQkJCURCRyhLRVJOX0lORk8ic29saWNpdGVkIG1hY2hpbmUgY2hlY2sgZm9yICIKLQkJCQkgICAgImNoYW5uZWwgcGF0aCAlMDJYXG4iLCBjcndbMF0ucnNpZCk7CisJCQkJcHJfZGVidWcoInNvbGljaXRlZCBtYWNoaW5lIGNoZWNrIGZvciAiCisJCQkJCSAiY2hhbm5lbCBwYXRoICUwMlhcbiIsIGNyd1swXS5yc2lkKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCXN3aXRjaCAoY3J3WzBdLmVyYykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfYXV4LmMKaW5kZXggOWNkNzg5Yi4uYWRjOWQ4ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9hdXguYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2F1eC5jCkBAIC0xMTIsNiArMTEyLDEwNSBAQAogCQlwcmludGsoIlxuIik7CiB9CiAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqIEZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIHJlcXVlc3QgSUQgaGFzaCB0YWJsZSAgICAqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFpGQ1BfTE9HX0FSRUEJCQlaRkNQX0xPR19BUkVBX0ZTRgorCitzdGF0aWMgaW50IHpmY3BfcmVxbGlzdF9pbml0KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlhZGFwdGVyLT5yZXFfbGlzdCA9IGtjYWxsb2MoUkVRVUVTVF9MSVNUX1NJWkUsIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSwKKwkJCQkgICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWFkYXB0ZXItPnJlcV9saXN0KQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaT0wOyBpPFJFUVVFU1RfTElTVF9TSVpFOyBpKyspCisJCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5yZXFfbGlzdFtpXSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgemZjcF9yZXFsaXN0X2ZyZWUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXF1ZXN0LCAqdG1wOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpPTA7IGk8UkVRVUVTVF9MSVNUX1NJWkU7IGkrKykgeworCQlpZiAobGlzdF9lbXB0eSgmYWRhcHRlci0+cmVxX2xpc3RbaV0pKQorCQkJY29udGludWU7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcXVlc3QsIHRtcCwKKwkJCQkJICZhZGFwdGVyLT5yZXFfbGlzdFtpXSwgbGlzdCkKKwkJCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0KTsKKwl9CisKKwlrZnJlZShhZGFwdGVyLT5yZXFfbGlzdCk7Cit9CisKK3ZvaWQgemZjcF9yZXFsaXN0X2FkZChzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLAorCQkgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxKQoreworCXVuc2lnbmVkIGludCBpOworCisJaSA9IGZzZl9yZXEtPnJlcV9pZCAlIFJFUVVFU1RfTElTVF9TSVpFOworCWxpc3RfYWRkX3RhaWwoJmZzZl9yZXEtPmxpc3QsICZhZGFwdGVyLT5yZXFfbGlzdFtpXSk7Cit9CisKK3ZvaWQgemZjcF9yZXFsaXN0X3JlbW92ZShzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCB1bnNpZ25lZCBsb25nIHJlcV9pZCkKK3sKKwlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpyZXF1ZXN0LCAqdG1wOworCXVuc2lnbmVkIGludCBpLCBjb3VudGVyOworCXU2NCBkYmdfdG1wWzJdOworCisJaSA9IHJlcV9pZCAlIFJFUVVFU1RfTElTVF9TSVpFOworCUJVR19PTihsaXN0X2VtcHR5KCZhZGFwdGVyLT5yZXFfbGlzdFtpXSkpOworCisJY291bnRlciA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJlcXVlc3QsIHRtcCwgJmFkYXB0ZXItPnJlcV9saXN0W2ldLCBsaXN0KSB7CisJCWlmIChyZXF1ZXN0LT5yZXFfaWQgPT0gcmVxX2lkKSB7CisJCQlkYmdfdG1wWzBdID0gKHU2NCkgYXRvbWljX3JlYWQoJmFkYXB0ZXItPnJlcXNfYWN0aXZlKTsKKwkJCWRiZ190bXBbMV0gPSAodTY0KSBjb3VudGVyOworCQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgKHZvaWQgKikgZGJnX3RtcCwgMTYpOworCQkJbGlzdF9kZWwoJnJlcXVlc3QtPmxpc3QpOworCQkJYnJlYWs7CisJCX0KKwkJY291bnRlcisrOworCX0KK30KKworc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9yZXFsaXN0X2lzbWVtYmVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgcmVxX2lkKQoreworCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKnJlcXVlc3QsICp0bXA7CisJdW5zaWduZWQgaW50IGk7CisKKwlpID0gcmVxX2lkICUgUkVRVUVTVF9MSVNUX1NJWkU7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVxdWVzdCwgdG1wLCAmYWRhcHRlci0+cmVxX2xpc3RbaV0sIGxpc3QpCisJCWlmIChyZXF1ZXN0LT5yZXFfaWQgPT0gcmVxX2lkKQorCQkJcmV0dXJuIHJlcXVlc3Q7CisKKwlyZXR1cm4gTlVMTDsKK30KKworaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGk9MDsgaTxSRVFVRVNUX0xJU1RfU0laRTsgaSsrKQorCQlpZiAoIWxpc3RfZW1wdHkoJmFkYXB0ZXItPnJlcV9saXN0W2ldKSkKKwkJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKyN1bmRlZiBaRkNQX0xPR19BUkVBCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqIFVuY2F0ZWdvcmlzZWQgRnVuY3Rpb25zICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTk2MSw4ICsxMDYwLDEyIEBACiAJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPnBvcnRfcmVtb3ZlX2xoKTsKIAogCS8qIGluaXRpYWxpemUgbGlzdCBvZiBmc2YgcmVxdWVzdHMgKi8KLQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2xvY2spOwotCUlOSVRfTElTVF9IRUFEKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfaGVhZCk7CisJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCXJldHZhbCA9IHpmY3BfcmVxbGlzdF9pbml0KGFkYXB0ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJWkZDUF9MT0dfSU5GTygicmVxdWVzdCBsaXN0IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CisJCWdvdG8gZmFpbGVkX2xvd19tZW1fYnVmZmVyczsKKwl9CiAKIAkvKiBpbml0aWFsaXplIGRlYnVnIGxvY2tzICovCiAKQEAgLTEwNDEsOCArMTE0NCw2IEBACiAgKgkJITAgLSBzdHJ1Y3QgemZjcF9hZGFwdGVyICBkYXRhIHN0cnVjdHVyZSBjb3VsZCBub3QgYmUgcmVtb3ZlZAogICoJCQkoZS5nLiBzdGlsbCB1c2VkKQogICogbG9ja3M6CWFkYXB0ZXIgbGlzdCB3cml0ZSBsb2NrIGlzIGFzc3VtZWQgdG8gYmUgaGVsZCBieSBjYWxsZXIKLSAqICAgICAgICAgICAgICBhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jayBpcyB0YWtlbiBhbmQgcmVsZWFzZWQgd2l0aGluIHRoaXMgCi0gKiAgICAgICAgICAgICAgZnVuY3Rpb24gYW5kIG11c3Qgbm90IGJlIGhlbGQgb24gZW50cnkKICAqLwogdm9pZAogemZjcF9hZGFwdGVyX2RlcXVldWUoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKQEAgLTEwNTQsMTQgKzExNTUsMTQgQEAKIAl6ZmNwX3N5c2ZzX2FkYXB0ZXJfcmVtb3ZlX2ZpbGVzKCZhZGFwdGVyLT5jY3dfZGV2aWNlLT5kZXYpOwogCWRldl9zZXRfZHJ2ZGF0YSgmYWRhcHRlci0+Y2N3X2RldmljZS0+ZGV2LCBOVUxMKTsKIAkvKiBzYW5pdHkgY2hlY2s6IG5vIHBlbmRpbmcgRlNGIHJlcXVlc3RzICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JcmV0dmFsID0gIWxpc3RfZW1wdHkoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9oZWFkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCWlmIChyZXR2YWwpIHsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCXJldHZhbCA9IHpmY3BfcmVxbGlzdF9pc2VtcHR5KGFkYXB0ZXIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwlpZiAoIXJldHZhbCkgewogCQlaRkNQX0xPR19OT1JNQUwoImJ1ZzogYWRhcHRlciAlcyAoJXApIHN0aWxsIGluIHVzZSwgIgogCQkJCSIlaSByZXF1ZXN0cyBvdXRzdGFuZGluZ1xuIiwKIAkJCQl6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpLCBhZGFwdGVyLAotCQkJCWF0b21pY19yZWFkKCZhZGFwdGVyLT5mc2ZfcmVxc19hY3RpdmUpKTsKKwkJCQlhdG9taWNfcmVhZCgmYWRhcHRlci0+cmVxc19hY3RpdmUpKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIG91dDsKIAl9CkBAIC0xMDg3LDYgKzExODgsNyBAQAogCXpmY3BfZnJlZV9sb3dfbWVtX2J1ZmZlcnMoYWRhcHRlcik7CiAJLyogZnJlZSBtZW1vcnkgb2YgYWRhcHRlciBkYXRhIHN0cnVjdHVyZSBhbmQgcXVldWVzICovCiAJemZjcF9xZGlvX2ZyZWVfcXVldWVzKGFkYXB0ZXIpOworCXpmY3BfcmVxbGlzdF9mcmVlKGFkYXB0ZXIpOwogCWtmcmVlKGFkYXB0ZXItPmZjX3N0YXRzKTsKIAlrZnJlZShhZGFwdGVyLT5zdGF0c19yZXNldF9kYXRhKTsKIAlaRkNQX0xPR19UUkFDRSgiZnJlZWluZyBhZGFwdGVyIHN0cnVjdHVyZVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9jY3cuYwppbmRleCA1N2Q4ZTRiLi5mZGFiYWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2Njdy5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfY2N3LmMKQEAgLTE2NCw2ICsxNjQsMTEgQEAKIAlyZXR2YWwgPSB6ZmNwX2FkYXB0ZXJfc2NzaV9yZWdpc3RlcihhZGFwdGVyKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dF9zY3NpX3JlZ2lzdGVyOworCisJLyogaW5pdGlhbGl6ZSByZXF1ZXN0IGNvdW50ZXIgKi8KKwlCVUdfT04oIXpmY3BfcmVxbGlzdF9pc2VtcHR5KGFkYXB0ZXIpKTsKKwlhZGFwdGVyLT5yZXFfbm8gPSAwOworCiAJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsIFpGQ1BfU1RBVFVTX0NPTU1PTl9SVU5OSU5HLAogCQkJCSAgICAgICBaRkNQX1NFVCk7CiAJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgWkZDUF9TVEFUVVNfQ09NTU9OX0VSUF9GQUlMRUQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaCBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZGVmLmgKaW5kZXggMmRmNTEyYS4uN2M4NGIzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9kZWYuaAorKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2RlZi5oCkBAIC01Miw3ICs1Miw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqIEdFTkVSQUwgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIHpmY3AgdmVyc2lvbiBudW1iZXIsIGl0IGNvbnNpc3RzIG9mIG1ham9yLCBtaW5vciwgYW5kIHBhdGNoLWxldmVsIG51bWJlciAqLwotI2RlZmluZSBaRkNQX1ZFUlNJT04JCSI0LjcuMCIKKyNkZWZpbmUgWkZDUF9WRVJTSU9OCQkiNC44LjAiCiAKIC8qKgogICogemZjcF9zZ190b19hZGRyZXNzIC0gZGV0ZXJtaW5lIGtlcm5lbCBhZGRyZXNzIGZyb20gc3RydWN0IHNjYXR0ZXJsaXN0CkBAIC04MCw3ICs4MCw3IEBACiAjZGVmaW5lIFJFUVVFU1RfTElTVF9TSVpFIDEyOAogCiAvKioqKioqKioqKioqKioqKioqKioqIFNDU0kgU1BFQ0lGSUMgREVGSU5FUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIFpGQ1BfU0NTSV9FUl9USU1FT1VUICAgICAgICAgICAgICAgICAgICAoMTAwKkhaKQorI2RlZmluZSBaRkNQX1NDU0lfRVJfVElNRU9VVCAgICAgICAgICAgICAgICAgICAgKDEwKkhaKQogCiAvKioqKioqKioqKioqKioqKioqKioqIENJTy9RRElPIFNQRUNJRklDIERFRklORVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTU0Myw3ICs1NDMsNyBAQAogfSB3aGlsZSAoMCkKIAkKICNpZiBaRkNQX0xPR19MRVZFTF9MSU1JVCA8IFpGQ1BfTE9HX0xFVkVMX05PUk1BTAotIyBkZWZpbmUgWkZDUF9MT0dfTk9STUFMKGZtdCwgYXJncy4uLikKKyMgZGVmaW5lIFpGQ1BfTE9HX05PUk1BTChmbXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKICNlbHNlCiAjIGRlZmluZSBaRkNQX0xPR19OT1JNQUwoZm10LCBhcmdzLi4uKSBcCiBkbyB7IFwKQEAgLTU1Myw3ICs1NTMsNyBAQAogI2VuZGlmCiAKICNpZiBaRkNQX0xPR19MRVZFTF9MSU1JVCA8IFpGQ1BfTE9HX0xFVkVMX0lORk8KLSMgZGVmaW5lIFpGQ1BfTE9HX0lORk8oZm10LCBhcmdzLi4uKQorIyBkZWZpbmUgWkZDUF9MT0dfSU5GTyhmbXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKICNlbHNlCiAjIGRlZmluZSBaRkNQX0xPR19JTkZPKGZtdCwgYXJncy4uLikgXAogZG8geyBcCkBAIC01NjMsMTQgKzU2MywxNCBAQAogI2VuZGlmCiAKICNpZiBaRkNQX0xPR19MRVZFTF9MSU1JVCA8IFpGQ1BfTE9HX0xFVkVMX0RFQlVHCi0jIGRlZmluZSBaRkNQX0xPR19ERUJVRyhmbXQsIGFyZ3MuLi4pCisjIGRlZmluZSBaRkNQX0xPR19ERUJVRyhmbXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKICNlbHNlCiAjIGRlZmluZSBaRkNQX0xPR19ERUJVRyhmbXQsIGFyZ3MuLi4pIFwKIAlaRkNQX0xPRyhaRkNQX0xPR19MRVZFTF9ERUJVRywgZm10ICwgIyNhcmdzKQogI2VuZGlmCiAKICNpZiBaRkNQX0xPR19MRVZFTF9MSU1JVCA8IFpGQ1BfTE9HX0xFVkVMX1RSQUNFCi0jIGRlZmluZSBaRkNQX0xPR19UUkFDRShmbXQsIGFyZ3MuLi4pCisjIGRlZmluZSBaRkNQX0xPR19UUkFDRShmbXQsIGFyZ3MuLi4pCWRvIHsgfSB3aGlsZSAoMCkKICNlbHNlCiAjIGRlZmluZSBaRkNQX0xPR19UUkFDRShmbXQsIGFyZ3MuLi4pIFwKIAlaRkNQX0xPRyhaRkNQX0xPR19MRVZFTF9UUkFDRSwgZm10ICwgIyNhcmdzKQpAQCAtODg2LDExICs4ODYsMTEgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICBwb3J0X3JlbW92ZV9saDsgICAgLyogaGVhZCBvZiBwb3J0cyB0byBiZQogCQkJCQkJICAgICAgcmVtb3ZlZCAqLwogCXUzMgkJCXBvcnRzOwkgICAgICAgICAgIC8qIG51bWJlciBvZiByZW1vdGUgcG9ydHMgKi8KLSAgICAgICAgc3RydWN0IHRpbWVyX2xpc3QgICAgICAgc2NzaV9lcl90aW1lcjsgICAgIC8qIFNDU0kgZXJyIHJlY292ZXJ5IHdhdGNoICovCi0Jc3RydWN0IGxpc3RfaGVhZAlmc2ZfcmVxX2xpc3RfaGVhZDsgLyogaGVhZCBvZiBGU0YgcmVxIGxpc3QgKi8KLQlzcGlubG9ja190CQlmc2ZfcmVxX2xpc3RfbG9jazsgLyogbG9jayBmb3Igb3BzIG9uIGxpc3Qgb2YKLQkJCQkJCSAgICAgIEZTRiByZXF1ZXN0cyAqLwotICAgICAgICBhdG9taWNfdCAgICAgICAJCWZzZl9yZXFzX2FjdGl2ZTsgICAvKiAjIGFjdGl2ZSBGU0YgcmVxcyAqLworCXN0cnVjdCB0aW1lcl9saXN0CXNjc2lfZXJfdGltZXI7ICAgICAvKiBTQ1NJIGVyciByZWNvdmVyeSB3YXRjaCAqLworCWF0b21pY190CQlyZXFzX2FjdGl2ZTsJICAgLyogIyBhY3RpdmUgRlNGIHJlcXMgKi8KKwl1bnNpZ25lZCBsb25nCQlyZXFfbm87CQkgICAvKiB1bmlxdWUgRlNGIHJlcSBudW1iZXIgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCSpyZXFfbGlzdDsJICAgLyogbGlzdCBvZiBwZW5kaW5nIHJlcXMgKi8KKwlzcGlubG9ja190CQlyZXFfbGlzdF9sb2NrOwkgICAvKiByZXF1ZXN0IGxpc3QgbG9jayAqLwogCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUJcmVxdWVzdF9xdWV1ZTsJICAgLyogcmVxdWVzdCBxdWV1ZSAqLwogCXUzMgkJCWZzZl9yZXFfc2VxX25vOwkgICAvKiBGU0YgY21uZCBzZXEgbnVtYmVyICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJcmVxdWVzdF93cTsJICAgLyogY2FuIGJlIHVzZWQgdG8gd2FpdCBmb3IKQEAgLTk4Niw2ICs5ODYsNyBAQAogLyogRlNGIHJlcXVlc3QgKi8KIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgbGlzdDsJICAgICAgIC8qIGxpc3Qgb2YgRlNGIHJlcXVlc3RzICovCisJdW5zaWduZWQgbG9uZwkgICAgICAgcmVxX2lkOwkgICAgICAgLyogdW5pcXVlIHJlcXVlc3QgSUQgKi8KIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICAgICphZGFwdGVyOyAgICAgICAvKiBhZGFwdGVyIHJlcXVlc3QgYmVsb25ncyB0byAqLwogCXU4CQkgICAgICAgc2JhbF9udW1iZXI7ICAgIC8qIG5yIG9mIFNCQUxzIGZyZWUgZm9yIHVzZSAqLwogCXU4CQkgICAgICAgc2JhbF9maXJzdDsgICAgIC8qIGZpcnN0IFNCQUwgZm9yIHRoaXMgcmVxdWVzdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXJwLmMKaW5kZXggOGVjOGRhMC4uN2Y2MGI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9lcnAuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2VycC5jCkBAIC02NCw4ICs2NCw4IEBACiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3koc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9nZW5lcmljKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKiwgaW50KTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZShzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOwotc3RhdGljIGludCB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X2Nsb3NlX3FkaW8oc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKLXN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZV9mc2Yoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfY2xvc2VfcWRpbyhzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICopOworc3RhdGljIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZV9mc2Yoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9vcGVuKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9xZGlvKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiBzdGF0aWMgaW50IHpmY3BfZXJwX2FkYXB0ZXJfc3RyYXRlZ3lfb3Blbl9mc2Yoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKQEAgLTkzLDEwICs5Myw5IEBACiBzdGF0aWMgaW50IHpmY3BfZXJwX3VuaXRfc3RyYXRlZ3lfY2xvc2Uoc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKIHN0YXRpYyBpbnQgemZjcF9lcnBfdW5pdF9zdHJhdGVneV9vcGVuKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiAKLXN0YXRpYyBpbnQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfYWRhcHRlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICopOwotc3RhdGljIGludCB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzc19wb3J0KHN0cnVjdCB6ZmNwX3BvcnQgKik7Ci1zdGF0aWMgaW50IHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3VuaXQoc3RydWN0IHpmY3BfdW5pdCAqKTsKLXN0YXRpYyBpbnQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3Moc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqKTsKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3BvcnQoc3RydWN0IHpmY3BfcG9ydCAqKTsKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3VuaXQoc3RydWN0IHpmY3BfdW5pdCAqKTsKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKik7CiAKIHN0YXRpYyBpbnQgemZjcF9lcnBfYWN0aW9uX2VucXVldWUoaW50LCBzdHJ1Y3QgemZjcF9hZGFwdGVyICosCiAJCQkJICAgc3RydWN0IHpmY3BfcG9ydCAqLCBzdHJ1Y3QgemZjcF91bml0ICopOwpAQCAtMTM1LDI5ICsxMzQsMzkgQEAKIAl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOgl6ZmNwX2ZzZl9zY3NpX2VyX3RpbWVvdXRfaGFuZGxlcgorLyoqCisgKiB6ZmNwX2ZzZl9zY3NpX2VyX3RpbWVvdXRfaGFuZGxlciAtIHRpbWVvdXQgaGFuZGxlciBmb3Igc2NzaSBlaCB0YXNrcwogICoKLSAqIHB1cnBvc2U6ICAgICBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCB3aGVuZXZlciBhIFNDU0kgZXJyb3IgcmVjb3ZlcnkKLSAqICAgICAgICAgICAgICBhY3Rpb24gKGFib3J0L3Jlc2V0KSBkb2VzIG5vdCByZXR1cm4uCi0gKiAgICAgICAgICAgICAgUmUtb3BlbmluZyB0aGUgYWRhcHRlciBtZWFucyB0aGF0IHRoZSBjb21tYW5kIGNhbiBiZSByZXR1cm5lZAotICogICAgICAgICAgICAgIGJ5IHpmY3AgKGl0IGlzIGd1YXJyYW50ZWVkIHRoYXQgaXQgZG9lcyBub3QgcmV0dXJuIHZpYSB0aGUKLSAqICAgICAgICAgICAgICBhZGFwdGVyIGFueW1vcmUpLiBUaGUgYnVmZmVyIGNhbiB0aGVuIGJlIHVzZWQgYWdhaW4uCi0gKiAgICAKLSAqIHJldHVybnM6ICAgICBzb2QgYWxsCisgKiBUaGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNhbGxlZCB3aGVuZXZlciBhIFNDU0kgZXJyb3IgcmVjb3ZlcnkKKyAqIGFjdGlvbiAoYWJvcnQvcmVzZXQpIGRvZXMgbm90IHJldHVybi4gIFJlLW9wZW5pbmcgdGhlIGFkYXB0ZXIgbWVhbnMKKyAqIHRoYXQgdGhlIGFib3J0L3Jlc2V0IGNvbW1hbmQgY2FuIGJlIHJldHVybmVkIGJ5IHpmY3AuIEl0IHdvbid0IGNvbXBsZXRlCisgKiB2aWEgdGhlIGFkYXB0ZXIgYW55bW9yZSAoYmVjYXVzZSBxZGlvIHF1ZXVlcyBhcmUgY2xvc2VkKS4gSWYgRVJQIGlzCisgKiBhbHJlYWR5IHJ1bm5pbmcgb24gdGhpcyBhZGFwdGVyIGl0IHdpbGwgYmUgc3RvcHBlZC4KICAqLwotdm9pZAotemZjcF9mc2Zfc2NzaV9lcl90aW1lb3V0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCB6ZmNwX2ZzZl9zY3NpX2VyX3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgemZjcF9hZGFwdGVyICopIGRhdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCVpGQ1BfTE9HX05PUk1BTCgid2FybmluZzogU0NTSSBlcnJvciByZWNvdmVyeSB0aW1lZCBvdXQuICIKIAkJCSJSZXN0YXJ0aW5nIGFsbCBvcGVyYXRpb25zIG9uIHRoZSBhZGFwdGVyICVzXG4iLAogCQkJemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7CiAJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAxLCAiZWhfbG1lbV90b3V0Iik7Ci0JemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7CiAKLQlyZXR1cm47CisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOworCWlmIChhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1BFTkRJTkcsCisJCQkgICAgICZhZGFwdGVyLT5zdGF0dXMpKSB7CisJCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLAorCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRHxaRkNQX1NUQVRVU19DT01NT05fT1BFTiwKKwkJICAgICAgIFpGQ1BfQ0xFQVIpOworCQl6ZmNwX2VycF9hY3Rpb25fZGlzbWlzc19hZGFwdGVyKGFkYXB0ZXIpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKKwkJLyogZGlzbWlzcyBhbGwgcGVuZGluZyByZXF1ZXN0cyBpbmNsdWRpbmcgcmVxdWVzdHMgZm9yIEVSUCAqLworCQl6ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwoYWRhcHRlcik7CisJCWFkYXB0ZXItPmZzZl9yZXFfc2VxX25vID0gMDsKKwl9IGVsc2UKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7CisJemZjcF9lcnBfYWRhcHRlcl9yZW9wZW4oYWRhcHRlciwgMCk7CiB9CiAKIC8qCkBAIC02NzAsMTcgKzY3OSwxMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qCi0gKiBmdW5jdGlvbjoJCi0gKgotICogcHVycG9zZToJZGlzYWJsZSBJL08sCi0gKgkJcmV0dXJuIGFueSBvcGVuIHJlcXVlc3RzIGFuZCBjbGVhbiB0aGVtIHVwLAotICoJCWFpbTogbm8gcGVuZGluZyBhbmQgaW5jb21pbmcgSS9PCi0gKgotICogcmV0dXJuczoKKy8qKgorICogemZjcF9lcnBfYWRhcHRlcl9ibG9jayAtIG1hcmsgYWRhcHRlciBhcyBibG9ja2VkLCBibG9jayBzY3NpIHJlcXVlc3RzCiAgKi8KLXN0YXRpYyB2b2lkCi16ZmNwX2VycF9hZGFwdGVyX2Jsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjbGVhcl9tYXNrKQorc3RhdGljIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9ibG9jayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCBpbnQgY2xlYXJfbWFzaykKIHsKIAlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJhX2JsIik7CiAJemZjcF9lcnBfbW9kaWZ5X2FkYXB0ZXJfc3RhdHVzKGFkYXB0ZXIsCkBAIC02ODgsMTUgKzY5MCwxMCBAQAogCQkJCSAgICAgICBjbGVhcl9tYXNrLCBaRkNQX0NMRUFSKTsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOgkKLSAqCi0gKiBwdXJwb3NlOgllbmFibGUgSS9PCi0gKgotICogcmV0dXJuczoKKy8qKgorICogemZjcF9lcnBfYWRhcHRlcl91bmJsb2NrIC0gbWFyayBhZGFwdGVyIGFzIHVuYmxvY2tlZCwgYWxsb3cgc2NzaSByZXF1ZXN0cwogICovCi1zdGF0aWMgdm9pZAotemZjcF9lcnBfYWRhcHRlcl91bmJsb2NrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCitzdGF0aWMgdm9pZCB6ZmNwX2VycF9hZGFwdGVyX3VuYmxvY2soc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDYsICJhX3VibCIpOwogCWF0b21pY19zZXRfbWFzayhaRkNQX1NUQVRVU19DT01NT05fVU5CTE9DS0VELCAmYWRhcHRlci0+c3RhdHVzKTsKQEAgLTg0OCwxOCArODQ1LDE2IEBACiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKIAlpZiAoZXJwX2FjdGlvbi0+ZnNmX3JlcSkgewotCQkvKiB0YWtlIGxvY2sgdG8gZW5zdXJlIHRoYXQgcmVxdWVzdCBpcyBub3QgYmVpbmcgZGVsZXRlZCBtZWFud2hpbGUgKi8KLQkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jayk7Ci0JCS8qIGNoZWNrIHdoZXRoZXIgZnNmIHJlcSBkb2VzIHN0aWxsIGV4aXN0ICovCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoZnNmX3JlcSwgJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9oZWFkLCBsaXN0KQotCQkgICAgaWYgKGZzZl9yZXEgPT0gZXJwX2FjdGlvbi0+ZnNmX3JlcSkKLQkJCWJyZWFrOwotCQlpZiAoZnNmX3JlcSAmJiAoZnNmX3JlcS0+ZXJwX2FjdGlvbiA9PSBlcnBfYWN0aW9uKSkgeworCQkvKiB0YWtlIGxvY2sgdG8gZW5zdXJlIHRoYXQgcmVxdWVzdCBpcyBub3QgZGVsZXRlZCBtZWFud2hpbGUgKi8KKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKKwkJaWYgKCghemZjcF9yZXFsaXN0X2lzbWVtYmVyKGFkYXB0ZXIsCisJCQkJCSAgICBlcnBfYWN0aW9uLT5mc2ZfcmVxLT5yZXFfaWQpKSAmJgorCQkgICAgKGZzZl9yZXEtPmVycF9hY3Rpb24gPT0gZXJwX2FjdGlvbikpIHsKIAkJCS8qIGZzZl9yZXEgc3RpbGwgZXhpc3RzICovCiAJCQlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDMsICJhX2NhX3JlcSIpOwogCQkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJmZzZl9yZXEsCiAJCQkJICAgIHNpemVvZiAodW5zaWduZWQgbG9uZykpOwotCQkJLyogZGlzbWlzcyBmc2ZfcmVxIG9mIHRpbWVkIG91dCBvciBkaXNtaXNzZWQgZXJwX2FjdGlvbiAqLworCQkJLyogZGlzbWlzcyBmc2ZfcmVxIG9mIHRpbWVkIG91dC9kaXNtaXNzZWQgZXJwX2FjdGlvbiAqLwogCQkJaWYgKGVycF9hY3Rpb24tPnN0YXR1cyAmIChaRkNQX1NUQVRVU19FUlBfRElTTUlTU0VEIHwKIAkJCQkJCSAgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKSkgewogCQkJCWRlYnVnX3RleHRfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywKQEAgLTg5MiwzMCArODg3LDIyIEBACiAJCQkgKi8KIAkJCWVycF9hY3Rpb24tPmZzZl9yZXEgPSBOVUxMOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKIAl9IGVsc2UKIAkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9jYV9ub3JlcSIpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoKLSAqIHB1cnBvc2U6CWdlbmVyaWMgaGFuZGxlciBmb3IgYXN5bmNocm9ub3VzIGV2ZW50cyByZWxhdGVkIHRvIGVycF9hY3Rpb24gZXZlbnRzCi0gKgkJKG5vcm1hbCBjb21wbGV0aW9uLCB0aW1lLW91dCwgZGlzbWlzc2luZywgcmV0cnkgYWZ0ZXIKLSAqCQlsb3cgbWVtb3J5IGNvbmRpdGlvbikKKy8qKgorICogemZjcF9lcnBfYXN5bmNfaGFuZGxlcl9ub2xvY2sgLSBjb21wbGV0ZSBlcnBfYWN0aW9uCiAgKgotICogbm90ZToJZGVsZXRpb24gb2YgdGltZXIgaXMgbm90IHJlcXVpcmVkIChlLmcuIGluIGNhc2Ugb2YgYSB0aW1lLW91dCksCi0gKgkJYnV0IGEgc2Vjb25kIHRyeSBkb2VzIG5vIGhhcm0sCi0gKgkJd2UgbGVhdmUgaXQgaW4gaGVyZSB0byBhbGxvdyBmb3IgZ3JlYXRlciBzaW1wbGlmaWNhdGlvbgotICoKLSAqIHJldHVybnM6CTAgLSB0aGVyZSB3YXMgYW4gYWN0aW9uIHRvIGhhbmRsZQotICoJCSEwIC0gb3RoZXJ3aXNlCisgKiBVc2VkIGZvciBub3JtYWwgY29tcGxldGlvbiwgdGltZS1vdXQsIGRpc21pc3NhbCBhbmQgZmFpbHVyZSBhZnRlcgorICogbG93IG1lbW9yeSBjb25kaXRpb24uCiAgKi8KLXN0YXRpYyBpbnQKLXpmY3BfZXJwX2FzeW5jX2hhbmRsZXJfbm9sb2NrKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24sCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIHNldF9tYXNrKQorc3RhdGljIHZvaWQgemZjcF9lcnBfYXN5bmNfaGFuZGxlcl9ub2xvY2soc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbiwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHNldF9tYXNrKQogewotCWludCByZXR2YWw7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKIAlpZiAoemZjcF9lcnBfYWN0aW9uX2V4aXN0cyhlcnBfYWN0aW9uKSA9PSBaRkNQX0VSUF9BQ1RJT05fUlVOTklORykgewpAQCAtOTI2LDQzICs5MTMsMjYgQEAKIAkJCWRlbF90aW1lcigmZXJwX2FjdGlvbi0+dGltZXIpOwogCQllcnBfYWN0aW9uLT5zdGF0dXMgfD0gc2V0X21hc2s7CiAJCXpmY3BfZXJwX2FjdGlvbl9yZWFkeShlcnBfYWN0aW9uKTsKLQkJcmV0dmFsID0gMDsKIAl9IGVsc2UgewogCQkvKiBhY3Rpb24gaXMgcmVhZHkgb3IgZ29uZSAtIG5vdGhpbmcgdG8gZG8gKi8KIAkJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAzLCAiYV9hc3loX2dvbmUiKTsKIAkJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgMywgJmVycF9hY3Rpb24tPmFjdGlvbiwKIAkJCSAgICBzaXplb2YgKGludCkpOwotCQlyZXR2YWwgPSAxOwogCX0KLQotCXJldHVybiByZXR2YWw7CiB9CiAKLS8qCi0gKiBwdXJwb3NlOglnZW5lcmljIGhhbmRsZXIgZm9yIGFzeW5jaHJvbm91cyBldmVudHMgcmVsYXRlZCB0byBlcnBfYWN0aW9uCi0gKiAgICAgICAgICAgICAgIGV2ZW50cwkobm9ybWFsIGNvbXBsZXRpb24sIHRpbWUtb3V0LCBkaXNtaXNzaW5nLCByZXRyeSBhZnRlcgotICoJCWxvdyBtZW1vcnkgY29uZGl0aW9uKQotICoKLSAqIG5vdGU6CWRlbGV0aW9uIG9mIHRpbWVyIGlzIG5vdCByZXF1aXJlZCAoZS5nLiBpbiBjYXNlIG9mIGEgdGltZS1vdXQpLAotICoJCWJ1dCBhIHNlY29uZCB0cnkgZG9lcyBubyBoYXJtLAotICoJCXdlIGxlYXZlIGl0IGluIGhlcmUgdG8gYWxsb3cgZm9yIGdyZWF0ZXIgc2ltcGxpZmljYXRpb24KLSAqCi0gKiByZXR1cm5zOgkwIC0gdGhlcmUgd2FzIGFuIGFjdGlvbiB0byBoYW5kbGUKLSAqCQkhMCAtIG90aGVyd2lzZQorLyoqCisgKiB6ZmNwX2VycF9hc3luY19oYW5kbGVyIC0gd3JhcHBlciBmb3IgZXJwX2FzeW5jX2hhbmRsZXJfbm9sb2NrIHcvIGxvY2tpbmcKICAqLwotaW50Ci16ZmNwX2VycF9hc3luY19oYW5kbGVyKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIHNldF9tYXNrKQordm9pZCB6ZmNwX2VycF9hc3luY19oYW5kbGVyKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24sCisJCQkgICAgdW5zaWduZWQgbG9uZyBzZXRfbWFzaykKIHsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXR2YWw7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmVycF9sb2NrLCBmbGFncyk7Ci0JcmV0dmFsID0gemZjcF9lcnBfYXN5bmNfaGFuZGxlcl9ub2xvY2soZXJwX2FjdGlvbiwgc2V0X21hc2spOworCXpmY3BfZXJwX2FzeW5jX2hhbmRsZXJfbm9sb2NrKGVycF9hY3Rpb24sIHNldF9tYXNrKTsKIAl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXR2YWw7CiB9CiAKIC8qCkBAIC05OTksMTcgKzk2OSwxNSBAQAogCXpmY3BfZXJwX2FzeW5jX2hhbmRsZXIoZXJwX2FjdGlvbiwgWkZDUF9TVEFUVVNfRVJQX1RJTUVET1VUKTsKIH0KIAotLyoKLSAqIHB1cnBvc2U6CWlzIGNhbGxlZCBmb3IgYW4gZXJwX2FjdGlvbiB3aGljaCBuZWVkcyB0byBiZSBlbmRlZAotICoJCXRob3VnaCBub3QgYmVpbmcgZG9uZSwKLSAqCQl0aGlzIGlzIHVzdWFsbHkgcmVxdWlyZWQgaWYgYW4gaGlnaGVyIGlzIGdlbmVyYXRlZCwKLSAqCQlhY3Rpb24gZ2V0cyBhbiBhcHByb3ByaWF0ZSBmbGFnIGFuZCB3aWxsIGJlIHByb2Nlc3NlZAotICoJCWFjY29yZGluZ2x5CisvKioKKyAqIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzIC0gZGlzbWlzcyBhbiBlcnBfYWN0aW9uCiAgKgotICogbG9ja3M6CWVycF9sb2NrIGhlbGQgKHRodXMgd2UgbmVlZCB0byBjYWxsIGFub3RoZXIgaGFuZGxlciB2YXJpYW50KQorICogYWRhcHRlci0+ZXJwX2xvY2sgbXVzdCBiZSBoZWxkCisgKiAKKyAqIERpc21pc3NhbCBvZiBhbiBlcnBfYWN0aW9uIGlzIHVzdWFsbHkgcmVxdWlyZWQgaWYgYW4gZXJwX2FjdGlvbiBvZgorICogaGlnaGVyIHByaW9yaXR5IGlzIGdlbmVyYXRlZC4KICAqLwotc3RhdGljIGludAotemZjcF9lcnBfYWN0aW9uX2Rpc21pc3Moc3RydWN0IHpmY3BfZXJwX2FjdGlvbiAqZXJwX2FjdGlvbikKK3N0YXRpYyB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKQEAgLTEwMTcsOCArOTg1LDYgQEAKIAlkZWJ1Z19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCAyLCAmZXJwX2FjdGlvbi0+YWN0aW9uLCBzaXplb2YgKGludCkpOwogCiAJemZjcF9lcnBfYXN5bmNfaGFuZGxlcl9ub2xvY2soZXJwX2FjdGlvbiwgWkZDUF9TVEFUVVNfRVJQX0RJU01JU1NFRCk7Ci0KLQlyZXR1cm4gMDsKIH0KIAogaW50CkBAIC0yMDc0LDE4ICsyMDQwLDEyIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOiAgICB6ZmNwX3FkaW9fY2xlYW51cAotICoKLSAqIHB1cnBvc2U6CWNsZWFucyB1cCBRRElPIG9wZXJhdGlvbiBmb3IgdGhlIHNwZWNpZmllZCBhZGFwdGVyCi0gKgotICogcmV0dXJuczoJMCAtIHN1Y2Nlc3NmdWwgY2xlYW51cAotICoJCSEwIC0gZmFpbGVkIGNsZWFudXAKKy8qKgorICogemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZV9xZGlvIC0gY2xvc2UgcWRpbyBxdWV1ZXMgZm9yIGFuIGFkYXB0ZXIKICAqLwotaW50CitzdGF0aWMgdm9pZAogemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZV9xZGlvKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKmVycF9hY3Rpb24pCiB7Ci0JaW50IHJldHZhbCA9IFpGQ1BfRVJQX1NVQ0NFRURFRDsKIAlpbnQgZmlyc3RfdXNlZDsKIAlpbnQgdXNlZF9jb3VudDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gZXJwX2FjdGlvbi0+YWRhcHRlcjsKQEAgLTIwOTQsMTUgKzIwNTQsMTMgQEAKIAkJWkZDUF9MT0dfREVCVUcoImVycm9yOiBhdHRlbXB0IHRvIHNodXQgZG93biBpbmFjdGl2ZSBRRElPICIKIAkJCSAgICAgICAicXVldWVzIG9uIGFkYXB0ZXIgJXNcbiIsCiAJCQkgICAgICAgemZjcF9nZXRfYnVzaWRfYnlfYWRhcHRlcihhZGFwdGVyKSk7Ci0JCXJldHZhbCA9IFpGQ1BfRVJQX0ZBSUxFRDsKLQkJZ290byBvdXQ7CisJCXJldHVybjsKIAl9CiAKIAkvKgogCSAqIEdldCBxdWV1ZV9sb2NrIGFuZCBjbGVhciBRRElPVVAgZmxhZy4gVGh1cyBpdCdzIGd1YXJhbnRlZWQgdGhhdAogCSAqIGRvX1FESU8gd29uJ3QgYmUgY2FsbGVkIHdoaWxlIHFkaW9fc2h1dGRvd24gaXMgaW4gcHJvZ3Jlc3MuCiAJICovCi0KIAl3cml0ZV9sb2NrX2lycSgmYWRhcHRlci0+cmVxdWVzdF9xdWV1ZS5xdWV1ZV9sb2NrKTsKIAlhdG9taWNfY2xlYXJfbWFzayhaRkNQX1NUQVRVU19BREFQVEVSX1FESU9VUCwgJmFkYXB0ZXItPnN0YXR1cyk7CiAJd3JpdGVfdW5sb2NrX2lycSgmYWRhcHRlci0+cmVxdWVzdF9xdWV1ZS5xdWV1ZV9sb2NrKTsKQEAgLTIxMzQsOCArMjA5Miw2IEBACiAJYWRhcHRlci0+cmVxdWVzdF9xdWV1ZS5mcmVlX2luZGV4ID0gMDsKIAlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZXF1ZXN0X3F1ZXVlLmZyZWVfY291bnQsIDApOwogCWFkYXB0ZXItPnJlcXVlc3RfcXVldWUuZGlzdGFuY2VfZnJvbV9pbnQgPSAwOwotIG91dDoKLQlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW50CkBAIC0yMjU4LDExICsyMjE0LDExIEBACiAJCQkgICAgICAiJXMpXG4iLCB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKIAkJcmV0ID0gWkZDUF9FUlBfRkFJTEVEOwogCX0KLQlpZiAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSywgJmFkYXB0ZXItPnN0YXR1cykpIHsKLQkJWkZDUF9MT0dfSU5GTygiZXJyb3I6IGV4Y2hhbmdlIHBvcnQgZGF0YSBmYWlsZWQgKGFkYXB0ZXIgIgorCisJLyogZG9uJ3QgdHJlYXQgYXMgZXJyb3IgZm9yIHRoZSBzYWtlIG9mIGNvbXBhdGliaWxpdHkgKi8KKwlpZiAoIWF0b21pY190ZXN0X21hc2soWkZDUF9TVEFUVVNfQURBUFRFUl9YUE9SVF9PSywgJmFkYXB0ZXItPnN0YXR1cykpCisJCVpGQ1BfTE9HX0lORk8oIndhcm5pbmc6IGV4Y2hhbmdlIHBvcnQgZGF0YSBmYWlsZWQgKGFkYXB0ZXIgIgogCQkJICAgICAgIiVzXG4iLCB6ZmNwX2dldF9idXNpZF9ieV9hZGFwdGVyKGFkYXB0ZXIpKTsKLQkJcmV0ID0gWkZDUF9FUlBfRkFJTEVEOwotCX0KIAogCXJldHVybiByZXQ7CiB9CkBAIC0yMjkyLDE4ICsyMjQ4LDEyIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOiAgICB6ZmNwX2ZzZl9jbGVhbnVwCi0gKgotICogcHVycG9zZToJY2xlYW51cCBGU0Ygb3BlcmF0aW9uIGZvciBzcGVjaWZpZWQgYWRhcHRlcgotICoKLSAqIHJldHVybnM6CTAgLSBGU0Ygb3BlcmF0aW9uIHN1Y2Nlc3NmdWxseSBjbGVhbmVkIHVwCi0gKgkJITAgLSBmYWlsZWQgdG8gY2xlYW51cCBGU0Ygb3BlcmF0aW9uIGZvciB0aGlzIGFkYXB0ZXIKKy8qKgorICogemZjcF9lcnBfYWRhcHRlcl9zdHJhdGVneV9jbG9zZV9mc2YgLSBzdG9wIEZTRiBvcGVyYXRpb25zIGZvciBhbiBhZGFwdGVyCiAgKi8KLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiB6ZmNwX2VycF9hZGFwdGVyX3N0cmF0ZWd5X2Nsb3NlX2ZzZihzdHJ1Y3QgemZjcF9lcnBfYWN0aW9uICplcnBfYWN0aW9uKQogewotCWludCByZXR2YWwgPSBaRkNQX0VSUF9TVUNDRUVERUQ7CiAJc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IGVycF9hY3Rpb24tPmFkYXB0ZXI7CiAKIAkvKgpAQCAtMjMxNyw4ICsyMjY3LDYgQEAKIAkvKiBhbGwgcG9ydHMgYW5kIHVuaXRzIGFyZSBjbG9zZWQgKi8KIAl6ZmNwX2VycF9tb2RpZnlfYWRhcHRlcl9zdGF0dXMoYWRhcHRlciwKIAkJCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX09QRU4sIFpGQ1BfQ0xFQVIpOwotCi0JcmV0dXJuIHJldHZhbDsKIH0KIAogLyoKQEAgLTMyOTMsMTAgKzMyNDEsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQKLXpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX2FkYXB0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfYWRhcHRlcihzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyKQogewotCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQ7CiAKIAlkZWJ1Z190ZXh0X2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICJhX2FjdGFiIik7CkBAIC0zMzA1LDE0ICszMjUxLDEwIEBACiAJZWxzZQogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsICZhZGFwdGVyLT5wb3J0X2xpc3RfaGVhZCwgbGlzdCkKIAkJICAgIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX3BvcnQocG9ydCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50Ci16ZmNwX2VycF9hY3Rpb25fZGlzbWlzc19wb3J0KHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCitzdGF0aWMgdm9pZCB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzc19wb3J0KHN0cnVjdCB6ZmNwX3BvcnQgKnBvcnQpCiB7Ci0JaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKIAlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gcG9ydC0+YWRhcHRlcjsKIApAQCAtMzMyMywyMiArMzI2NSwxNiBAQAogCWVsc2UKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh1bml0LCAmcG9ydC0+dW5pdF9saXN0X2hlYWQsIGxpc3QpCiAJCSAgICB6ZmNwX2VycF9hY3Rpb25fZGlzbWlzc191bml0KHVuaXQpOwotCi0JcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludAotemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfdW5pdChzdHJ1Y3QgemZjcF91bml0ICp1bml0KQorc3RhdGljIHZvaWQgemZjcF9lcnBfYWN0aW9uX2Rpc21pc3NfdW5pdChzdHJ1Y3QgemZjcF91bml0ICp1bml0KQogewotCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOwogCiAJZGVidWdfdGV4dF9ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA1LCAidV9hY3RhYiIpOwogCWRlYnVnX2V2ZW50KGFkYXB0ZXItPmVycF9kYmYsIDUsICZ1bml0LT5mY3BfbHVuLCBzaXplb2YgKGZjcF9sdW5fdCkpOwogCWlmIChhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0NPTU1PTl9FUlBfSU5VU0UsICZ1bml0LT5zdGF0dXMpKQogCQl6ZmNwX2VycF9hY3Rpb25fZGlzbWlzcygmdW5pdC0+ZXJwX2FjdGlvbik7Ci0KLQlyZXR1cm4gcmV0dmFsOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmggYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2V4dC5oCmluZGV4IGQwMjM2NjAuLjE0NmQ3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZXh0LmgKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9leHQuaApAQCAtNjMsNyArNjMsNiBAQAogZXh0ZXJuIHZvaWQgemZjcF9xZGlvX2ZyZWVfcXVldWVzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gaW50ICB6ZmNwX3FkaW9fZGV0ZXJtaW5lX3BjaShzdHJ1Y3QgemZjcF9xZGlvX3F1ZXVlICosCiAJCQkJICAgIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7Ci1leHRlcm4gaW50ICB6ZmNwX3FkaW9fcmVxaWRfY2hlY2soc3RydWN0IHpmY3BfYWRhcHRlciAqLCB2b2lkICopOwogCiBleHRlcm4gdm9sYXRpbGUgc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKnpmY3BfcWRpb19zYmFsZV9yZXEKIAkoc3RydWN0IHpmY3BfZnNmX3JlcSAqLCBpbnQsIGludCk7CkBAIC0xNDAsNiArMTM5LDcgQEAKIGV4dGVybiBpbnQgIHpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgaW50KTsKIGV4dGVybiBpbnQgIHpmY3BfZXJwX2FkYXB0ZXJfc2h1dGRvd24oc3RydWN0IHpmY3BfYWRhcHRlciAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgemZjcF9lcnBfYWRhcHRlcl9mYWlsZWQoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKK2V4dGVybiB2b2lkIHpmY3BfZXJwX2FjdGlvbl9kaXNtaXNzX2FkYXB0ZXIoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIAogZXh0ZXJuIHZvaWQgemZjcF9lcnBfbW9kaWZ5X3BvcnRfc3RhdHVzKHN0cnVjdCB6ZmNwX3BvcnQgKiwgdTMyLCBpbnQpOwogZXh0ZXJuIGludCAgemZjcF9lcnBfcG9ydF9yZW9wZW4oc3RydWN0IHpmY3BfcG9ydCAqLCBpbnQpOwpAQCAtMTU2LDcgKzE1Niw3IEBACiBleHRlcm4gaW50ICB6ZmNwX2VycF90aHJlYWRfc2V0dXAoc3RydWN0IHpmY3BfYWRhcHRlciAqKTsKIGV4dGVybiBpbnQgIHpmY3BfZXJwX3RocmVhZF9raWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiBleHRlcm4gaW50ICB6ZmNwX2VycF93YWl0KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7Ci1leHRlcm4gaW50ICB6ZmNwX2VycF9hc3luY19oYW5kbGVyKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCB6ZmNwX2VycF9hc3luY19oYW5kbGVyKHN0cnVjdCB6ZmNwX2VycF9hY3Rpb24gKiwgdW5zaWduZWQgbG9uZyk7CiAKIGV4dGVybiBpbnQgIHpmY3BfdGVzdF9saW5rKHN0cnVjdCB6ZmNwX3BvcnQgKik7CiAKQEAgLTE5MCw1ICsxOTAsMTAgQEAKIAkJCQkgICAgICBzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwogZXh0ZXJuIHZvaWQgemZjcF9zY3NpX2RiZl9ldmVudF9kZXZyZXNldChjb25zdCBjaGFyICosIHU4LCBzdHJ1Y3QgemZjcF91bml0ICosCiAJCQkJCSBzdHJ1Y3Qgc2NzaV9jbW5kICopOworZXh0ZXJuIHZvaWQgemZjcF9yZXFsaXN0X2FkZChzdHJ1Y3QgemZjcF9hZGFwdGVyICosIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKik7CitleHRlcm4gdm9pZCB6ZmNwX3JlcWxpc3RfcmVtb3ZlKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gc3RydWN0IHpmY3BfZnNmX3JlcSAqemZjcF9yZXFsaXN0X2lzbWVtYmVyKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKiwKKwkJCQkJCSAgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gaW50IHpmY3BfcmVxbGlzdF9pc2VtcHR5KHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKik7CiAKICNlbmRpZgkvKiBaRkNQX0VYVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9mc2YuYwppbmRleCAzMWRiMmIwLi5mZjJlYWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX2ZzZi5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfZnNmLmMKQEAgLTQ5LDcgKzQ5LDYgQEAKIHN0YXRpYyB2b2lkIHpmY3BfZnNmX2xpbmtfZG93bl9pbmZvX2V2YWwoc3RydWN0IHpmY3BfYWRhcHRlciAqLAogCXN0cnVjdCBmc2ZfbGlua19kb3duX2luZm8gKik7CiBzdGF0aWMgaW50IHpmY3BfZnNmX3JlcV9kaXNwYXRjaChzdHJ1Y3QgemZjcF9mc2ZfcmVxICopOwotc3RhdGljIHZvaWQgemZjcF9mc2ZfcmVxX2Rpc21pc3Moc3RydWN0IHpmY3BfZnNmX3JlcSAqKTsKIAogLyogYXNzb2NpYXRpb24gYmV0d2VlbiBGU0YgY29tbWFuZCBhbmQgRlNGIFFUQ0IgdHlwZSAqLwogc3RhdGljIHUzMiBmc2ZfcXRjYl90eXBlW10gPSB7CkBAIC0xNDYsNDkgKzE0NSw1MCBAQAogCQlrZnJlZShmc2ZfcmVxKTsKIH0KIAotLyoKLSAqIGZ1bmN0aW9uOgkKLSAqCi0gKiBwdXJwb3NlOgkKLSAqCi0gKiByZXR1cm5zOgotICoKLSAqIG5vdGU6IHFkaW8gcXVldWVzIHNoYWxsIGJlIGRvd24gKG5vIG9uZ29pbmcgaW5ib3VuZCBwcm9jZXNzaW5nKQorLyoqCisgKiB6ZmNwX2ZzZl9yZXFfZGlzbWlzcyAtIGRpc21pc3MgYSBzaW5nbGUgZnNmIHJlcXVlc3QKICAqLwotaW50Ci16ZmNwX2ZzZl9yZXFfZGlzbWlzc19hbGwoc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyB2b2lkIHpmY3BfZnNmX3JlcV9kaXNtaXNzKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsCisJCQkJIHVuc2lnbmVkIGludCBjb3VudGVyKQogewotCXN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlMSVNUX0hFQUQocmVtb3ZlX3F1ZXVlKTsKKwl1NjQgZGJnX3RtcFsyXTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3Rfc3BsaWNlX2luaXQoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9oZWFkLCAmcmVtb3ZlX3F1ZXVlKTsKLQlhdG9taWNfc2V0KCZhZGFwdGVyLT5mc2ZfcmVxc19hY3RpdmUsIDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZnNmX3JlcSwgdG1wLCAmcmVtb3ZlX3F1ZXVlLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKLQkJemZjcF9mc2ZfcmVxX2Rpc21pc3MoZnNmX3JlcSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBmdW5jdGlvbjoJCi0gKgotICogcHVycG9zZToJCi0gKgotICogcmV0dXJuczoKLSAqLwotc3RhdGljIHZvaWQKLXpmY3BfZnNmX3JlcV9kaXNtaXNzKHN0cnVjdCB6ZmNwX2ZzZl9yZXEgKmZzZl9yZXEpCi17CisJZGJnX3RtcFswXSA9ICh1NjQpIGF0b21pY19yZWFkKCZhZGFwdGVyLT5yZXFzX2FjdGl2ZSk7CisJZGJnX3RtcFsxXSA9ICh1NjQpIGNvdW50ZXI7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgKHZvaWQgKikgZGJnX3RtcCwgMTYpOworCWxpc3RfZGVsKCZmc2ZfcmVxLT5saXN0KTsKIAlmc2ZfcmVxLT5zdGF0dXMgfD0gWkZDUF9TVEFUVVNfRlNGUkVRX0RJU01JU1NFRDsKIAl6ZmNwX2ZzZl9yZXFfY29tcGxldGUoZnNmX3JlcSk7CiB9CiAKKy8qKgorICogemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsIC0gZGlzbWlzcyBhbGwgcmVtYWluaW5nIGZzZiByZXF1ZXN0cworICovCitpbnQgemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqcmVxdWVzdCwgKnRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBpLCBjb3VudGVyOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwlhdG9taWNfc2V0KCZhZGFwdGVyLT5yZXFzX2FjdGl2ZSwgMCk7CisJZm9yIChpPTA7IGk8UkVRVUVTVF9MSVNUX1NJWkU7IGkrKykgeworCQlpZiAobGlzdF9lbXB0eSgmYWRhcHRlci0+cmVxX2xpc3RbaV0pKQorCQkJY29udGludWU7CisKKwkJY291bnRlciA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZXF1ZXN0LCB0bXAsCisJCQkJCSAmYWRhcHRlci0+cmVxX2xpc3RbaV0sIGxpc3QpIHsKKwkJCXpmY3BfZnNmX3JlcV9kaXNtaXNzKGFkYXB0ZXIsIHJlcXVlc3QsIGNvdW50ZXIpOworCQkJY291bnRlcisrOworCQl9CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCiAvKgogICogZnVuY3Rpb246ICAgIHpmY3BfZnNmX3JlcV9jb21wbGV0ZQogICoKQEAgLTQ1OTIsMTIgKzQ1OTIsMTQgQEAKIHpmY3BfZnNmX3JlcV9xdGNiX2luaXQoc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcSkKIHsKIAlpZiAobGlrZWx5KGZzZl9yZXEtPnF0Y2IgIT0gTlVMTCkpIHsKLQkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnJlcV9zZXFfbm8gPSBmc2ZfcmVxLT5hZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubzsKLQkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnJlcV9pZCA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5yZXFfc2VxX25vID0KKwkJCWZzZl9yZXEtPmFkYXB0ZXItPmZzZl9yZXFfc2VxX25vOworCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgucmVxX2lkID0gZnNmX3JlcS0+cmVxX2lkOwogCQlmc2ZfcmVxLT5xdGNiLT5wcmVmaXgudWxwX2luZm8gPSBaRkNQX1VMUF9JTkZPX1ZFUlNJT047Ci0JCWZzZl9yZXEtPnF0Y2ItPnByZWZpeC5xdGNiX3R5cGUgPSBmc2ZfcXRjYl90eXBlW2ZzZl9yZXEtPmZzZl9jb21tYW5kXTsKKwkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnF0Y2JfdHlwZSA9CisJCQlmc2ZfcXRjYl90eXBlW2ZzZl9yZXEtPmZzZl9jb21tYW5kXTsKIAkJZnNmX3JlcS0+cXRjYi0+cHJlZml4LnF0Y2JfdmVyc2lvbiA9IFpGQ1BfUVRDQl9WRVJTSU9OOwotCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIucmVxX2hhbmRsZSA9ICh1bnNpZ25lZCBsb25nKWZzZl9yZXE7CisJCWZzZl9yZXEtPnF0Y2ItPmhlYWRlci5yZXFfaGFuZGxlID0gZnNmX3JlcS0+cmVxX2lkOwogCQlmc2ZfcmVxLT5xdGNiLT5oZWFkZXIuZnNmX2NvbW1hbmQgPSBmc2ZfcmVxLT5mc2ZfY29tbWFuZDsKIAl9CiB9CkBAIC00NjU0LDYgKzQ2NTYsNyBAQAogewogCXZvbGF0aWxlIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlzdHJ1Y3QgemZjcF9mc2ZfcmVxICpmc2ZfcmVxID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCXN0cnVjdCB6ZmNwX3FkaW9fcXVldWUgKnJlcV9xdWV1ZSA9ICZhZGFwdGVyLT5yZXF1ZXN0X3F1ZXVlOwogCkBAIC00NjY4LDYgKzQ2NzEsMTIgQEAKIAogCWZzZl9yZXEtPmFkYXB0ZXIgPSBhZGFwdGVyOwogCWZzZl9yZXEtPmZzZl9jb21tYW5kID0gZnNmX2NtZDsKKwlJTklUX0xJU1RfSEVBRCgmZnNmX3JlcS0+bGlzdCk7CisJCisJLyogdW5pcXVlIHJlcXVlc3QgaWQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCWZzZl9yZXEtPnJlcV9pZCA9IGFkYXB0ZXItPnJlcV9ubysrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKIAogICAgICAgICB6ZmNwX2ZzZl9yZXFfcXRjYl9pbml0KGZzZl9yZXEpOwogCkBAIC00NzA3LDcgKzQ3MTYsNyBAQAogCXNiYWxlID0gemZjcF9xZGlvX3NiYWxlX3JlcShmc2ZfcmVxLCBmc2ZfcmVxLT5zYmFsX2N1cnIsIDApOwogCiAJLyogc2V0dXAgY29tbW9uIFNCQUxFIGZpZWxkcyAqLwotCXNiYWxlWzBdLmFkZHIgPSBmc2ZfcmVxOworCXNiYWxlWzBdLmFkZHIgPSAodm9pZCAqKSBmc2ZfcmVxLT5yZXFfaWQ7CiAJc2JhbGVbMF0uZmxhZ3MgfD0gU0JBTF9GTEFHUzBfQ09NTUFORDsKIAlpZiAobGlrZWx5KGZzZl9yZXEtPnF0Y2IgIT0gTlVMTCkpIHsKIAkJc2JhbGVbMV0uYWRkciA9ICh2b2lkICopIGZzZl9yZXEtPnF0Y2I7CkBAIC00NzQ3LDcgKzQ3NTYsNyBAQAogCXZvbGF0aWxlIHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICpzYmFsZTsKIAlpbnQgaW5jX3NlcV9ubzsKIAlpbnQgbmV3X2Rpc3RhbmNlX2Zyb21faW50OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTY0IGRiZ190bXBbMl07CiAJaW50IHJldHZhbCA9IDA7CiAKIAlhZGFwdGVyID0gZnNmX3JlcS0+YWRhcHRlcjsKQEAgLTQ3NjEsMTAgKzQ3NzAsMTAgQEAKIAlaRkNQX0hFWF9EVU1QKFpGQ1BfTE9HX0xFVkVMX1RSQUNFLCAoY2hhciAqKSBzYmFsZVsxXS5hZGRyLAogCQkgICAgICBzYmFsZVsxXS5sZW5ndGgpOwogCi0JLyogcHV0IGFsbG9jYXRlZCBGU0YgcmVxdWVzdCBhdCBsaXN0IHRhaWwgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2FkZF90YWlsKCZmc2ZfcmVxLT5saXN0LCAmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2hlYWQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisJLyogcHV0IGFsbG9jYXRlZCBGU0YgcmVxdWVzdCBpbnRvIGhhc2ggdGFibGUgKi8KKwlzcGluX2xvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOworCXpmY3BfcmVxbGlzdF9hZGQoYWRhcHRlciwgZnNmX3JlcSk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnJlcV9saXN0X2xvY2spOwogCiAJaW5jX3NlcV9ubyA9IChmc2ZfcmVxLT5xdGNiICE9IE5VTEwpOwogCkBAIC00ODAzLDYgKzQ4MTIsMTAgQEAKIAkJCSBRRElPX0ZMQUdfU1lOQ19PVVRQVVQsCiAJCQkgMCwgZnNmX3JlcS0+c2JhbF9maXJzdCwgZnNmX3JlcS0+c2JhbF9udW1iZXIsIE5VTEwpOwogCisJZGJnX3RtcFswXSA9ICh1bnNpZ25lZCBsb25nKSBzYmFsZVswXS5hZGRyOworCWRiZ190bXBbMV0gPSAodTY0KSByZXR2YWw7CisJZGVidWdfZXZlbnQoYWRhcHRlci0+ZXJwX2RiZiwgNCwgKHZvaWQgKikgZGJnX3RtcCwgMTYpOworCiAJaWYgKHVubGlrZWx5KHJldHZhbCkpIHsKIAkJLyogUXVldWVzIGFyZSBkb3duLi4uLi4gKi8KIAkJcmV0dmFsID0gLUVJTzsKQEAgLTQ4MTIsMjIgKzQ4MjUsMTcgQEAKIAkJICovCiAJCWlmICh0aW1lcikKIAkJCWRlbF90aW1lcih0aW1lcik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2RlbCgmZnNmX3JlcS0+bGlzdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JCS8qCi0JCSAqIGFkanVzdCB0aGUgbnVtYmVyIG9mIGZyZWUgU0JBTHMgaW4gcmVxdWVzdCBxdWV1ZSBhcyB3ZWxsIGFzCi0JCSAqIHBvc2l0aW9uIG9mIGZpcnN0IG9uZQotCQkgKi8KKwkJc3Bpbl9sb2NrKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrKTsKKwkJemZjcF9yZXFsaXN0X3JlbW92ZShhZGFwdGVyLCBmc2ZfcmVxLT5yZXFfaWQpOworCQlzcGluX3VubG9jaygmYWRhcHRlci0+cmVxX2xpc3RfbG9jayk7CisJCS8qIHVuZG8gY2hhbmdlcyBpbiByZXF1ZXN0IHF1ZXVlIG1hZGUgZm9yIHRoaXMgcmVxdWVzdCAqLwogCQl6ZmNwX3FkaW9femVyb19zYmFscyhyZXFfcXVldWUtPmJ1ZmZlciwKIAkJCQkgICAgIGZzZl9yZXEtPnNiYWxfZmlyc3QsIGZzZl9yZXEtPnNiYWxfbnVtYmVyKTsKIAkJYXRvbWljX2FkZChmc2ZfcmVxLT5zYmFsX251bWJlciwgJnJlcV9xdWV1ZS0+ZnJlZV9jb3VudCk7Ci0JCXJlcV9xdWV1ZS0+ZnJlZV9pbmRleCAtPSBmc2ZfcmVxLT5zYmFsX251bWJlcjsJIC8qIGluY3JlYXNlICovCisJCXJlcV9xdWV1ZS0+ZnJlZV9pbmRleCAtPSBmc2ZfcmVxLT5zYmFsX251bWJlcjsKIAkJcmVxX3F1ZXVlLT5mcmVlX2luZGV4ICs9IFFESU9fTUFYX0JVRkZFUlNfUEVSX1E7CiAJCXJlcV9xdWV1ZS0+ZnJlZV9pbmRleCAlPSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROyAvKiB3cmFwICovCi0JCVpGQ1BfTE9HX0RFQlVHCi0JCQkoImVycm9yOiBkb19RRElPIGZhaWxlZC4gQnVmZmVycyBjb3VsZCBub3QgYmUgZW5xdWV1ZWQgIgotCQkJICJ0byByZXF1ZXN0IHF1ZXVlLlxuIik7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOwogCX0gZWxzZSB7CiAJCXJlcV9xdWV1ZS0+ZGlzdGFuY2VfZnJvbV9pbnQgPSBuZXdfZGlzdGFuY2VfZnJvbV9pbnQ7CiAJCS8qCkBAIC00ODQzLDcgKzQ4NTEsNyBAQAogCQkJYWRhcHRlci0+ZnNmX3JlcV9zZXFfbm8rKzsKIAogCQkvKiBjb3VudCBGU0YgcmVxdWVzdHMgcGVuZGluZyAqLwotCQlhdG9taWNfaW5jKCZhZGFwdGVyLT5mc2ZfcmVxc19hY3RpdmUpOworCQlhdG9taWNfaW5jKCZhZGFwdGVyLT5yZXFzX2FjdGl2ZSk7CiAJfQogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3FkaW8uYyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCmluZGV4IDQ5ZWE1YWQuLmRiZDlmNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCisrKyBiL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jCkBAIC0yODIsNiArMjgyLDM3IEBACiAJcmV0dXJuOwogfQogCisvKioKKyAqIHpmY3BfcWRpb19yZXFpZF9jaGVjayAtIGNoZWNrcyBmb3IgdmFsaWQgcmVxaWRzIG9yIHVuc29saWNpdGVkIHN0YXR1cworICovCitzdGF0aWMgaW50IHpmY3BfcWRpb19yZXFpZF9jaGVjayhzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyLCAKKwkJCQkgdW5zaWduZWQgbG9uZyByZXFfaWQpCit7CisJc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGVidWdfbG9uZ19ldmVudChhZGFwdGVyLT5lcnBfZGJmLCA0LCByZXFfaWQpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPnJlcV9saXN0X2xvY2ssIGZsYWdzKTsKKwlmc2ZfcmVxID0gemZjcF9yZXFsaXN0X2lzbWVtYmVyKGFkYXB0ZXIsIHJlcV9pZCk7CisKKwlpZiAoIWZzZl9yZXEpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+cmVxX2xpc3RfbG9jaywgZmxhZ3MpOworCQlaRkNQX0xPR19OT1JNQUwoImVycm9yOiB1bmtub3duIHJlcXVlc3QgaWQgKCVsZCkuXG4iLCByZXFfaWQpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJemZjcF9yZXFsaXN0X3JlbW92ZShhZGFwdGVyLCByZXFfaWQpOworCWF0b21pY19kZWMoJmFkYXB0ZXItPnJlcXNfYWN0aXZlKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5yZXFfbGlzdF9sb2NrLCBmbGFncyk7CisKKwkvKiBmaW5pc2ggdGhlIEZTRiByZXF1ZXN0ICovCisJemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBmdW5jdGlvbjogICAJemZjcF9xZGlvX3Jlc3BvbnNlX2hhbmRsZXIKICAqCkBAIC0zNDQsNyArMzc1LDcgQEAKIAkJCS8qIGxvb2sgZm9yIFFESU8gcmVxdWVzdCBpZGVudGlmaWVycyBpbiBTQiAqLwogCQkJYnVmZmVyZSA9ICZidWZmZXItPmVsZW1lbnRbYnVmZmVyZV9pbmRleF07CiAJCQlyZXR2YWwgPSB6ZmNwX3FkaW9fcmVxaWRfY2hlY2soYWRhcHRlciwKLQkJCQkJCSAgICAgICAodm9pZCAqKSBidWZmZXJlLT5hZGRyKTsKKwkJCQkJKHVuc2lnbmVkIGxvbmcpIGJ1ZmZlcmUtPmFkZHIpOwogCiAJCQlpZiAocmV0dmFsKSB7CiAJCQkJWkZDUF9MT0dfTk9STUFMKCJidWc6IHVuZXhwZWN0ZWQgaW5ib3VuZCAiCkBAIC00MTUsNTIgKzQ0Niw2IEBACiAJcmV0dXJuOwogfQogCi0vKgotICogZnVuY3Rpb246CXpmY3BfcWRpb19yZXFpZF9jaGVjawotICoKLSAqIHB1cnBvc2U6CWNoZWNrcyBmb3IgdmFsaWQgcmVxaWRzIG9yIHVuc29saWNpdGVkIHN0YXR1cwotICoKLSAqIHJldHVybnM6CTAgLSB2YWxpZCByZXF1ZXN0IGlkIG9yIHVuc29saWNpdGVkIHN0YXR1cwotICoJCSEwIC0gb3RoZXJ3aXNlCi0gKi8KLWludAotemZjcF9xZGlvX3JlcWlkX2NoZWNrKHN0cnVjdCB6ZmNwX2FkYXB0ZXIgKmFkYXB0ZXIsIHZvaWQgKnNiYWxlX2FkZHIpCi17Ci0Jc3RydWN0IHpmY3BfZnNmX3JlcSAqZnNmX3JlcTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JLyogaW52YWxpZCAocGVyIGNvbnZlbnRpb24gdXNlZCBpbiB0aGlzIGRyaXZlcikgKi8KLQlpZiAodW5saWtlbHkoIXNiYWxlX2FkZHIpKSB7Ci0JCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBpbnZhbGlkIHJlcWlkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogdmFsaWQgcmVxdWVzdCBpZCBhbmQgdGh1cyAoaG9wZWZ1bGx5IDopIHZhbGlkIGZzZl9yZXEgYWRkcmVzcyAqLwotCWZzZl9yZXEgPSAoc3RydWN0IHpmY3BfZnNmX3JlcSAqKSBzYmFsZV9hZGRyOwotCi0JLyogc2VyaWFsaXplIHdpdGggemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpc3RfZW1wdHkoJmFkYXB0ZXItPmZzZl9yZXFfbGlzdF9oZWFkKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5mc2ZfcmVxX2xpc3RfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gMDsKLQl9Ci0JbGlzdF9kZWwoJmZzZl9yZXEtPmxpc3QpOwotCWF0b21pY19kZWMoJmFkYXB0ZXItPmZzZl9yZXFzX2FjdGl2ZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZnNmX3JlcV9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWlmICh1bmxpa2VseShhZGFwdGVyICE9IGZzZl9yZXEtPmFkYXB0ZXIpKSB7Ci0JCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBpbnZhbGlkIHJlcWlkIChmc2ZfcmVxPSVwLCAiCi0JCQkJImZzZl9yZXEtPmFkYXB0ZXI9JXAsIGFkYXB0ZXI9JXApXG4iLAotCQkJCWZzZl9yZXEsIGZzZl9yZXEtPmFkYXB0ZXIsIGFkYXB0ZXIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBmaW5pc2ggdGhlIEZTRiByZXF1ZXN0ICovCi0JemZjcF9mc2ZfcmVxX2NvbXBsZXRlKGZzZl9yZXEpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIC8qKgogICogemZjcF9xZGlvX3NiYWxlX2dldCAtIHJldHVybiBwb2ludGVyIHRvIFNCQUxFIG9mIHFkaW9fcXVldWUKICAqIEBxdWV1ZTogcXVldWUgZnJvbSB3aGljaCBTQkFMRSBzaG91bGQgYmUgcmV0dXJuZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3Bfc2NzaS5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKaW5kZXggNjcxZjRhNi4uMWJiNTUwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMKQEAgLTMwLDcgKzMwLDYgQEAKIAkJCQkgIHZvaWQgKCpkb25lKSAoc3RydWN0IHNjc2lfY21uZCAqKSk7CiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKik7CiBzdGF0aWMgaW50IHpmY3Bfc2NzaV9laF9kZXZpY2VfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOwotc3RhdGljIGludCB6ZmNwX3Njc2lfZWhfYnVzX3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqKTsKIHN0YXRpYyBpbnQgemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICopOwogc3RhdGljIGludCB6ZmNwX3Rhc2tfbWFuYWdlbWVudF9mdW5jdGlvbihzdHJ1Y3QgemZjcF91bml0ICosIHU4LAogCQkJCQkgc3RydWN0IHNjc2lfY21uZCAqKTsKQEAgLTQ2LDMwICs0NSwyMiBAQAogCS5zY3NpX2hvc3RfdGVtcGxhdGUgPSB7CiAJCS5uYW1lCQkJPSBaRkNQX05BTUUsCiAJCS5wcm9jX25hbWUJCT0gInpmY3AiLAotCQkucHJvY19pbmZvCQk9IE5VTEwsCi0JCS5kZXRlY3QJCQk9IE5VTEwsCiAJCS5zbGF2ZV9hbGxvYwkJPSB6ZmNwX3Njc2lfc2xhdmVfYWxsb2MsCiAJCS5zbGF2ZV9jb25maWd1cmUJPSB6ZmNwX3Njc2lfc2xhdmVfY29uZmlndXJlLAogCQkuc2xhdmVfZGVzdHJveQkJPSB6ZmNwX3Njc2lfc2xhdmVfZGVzdHJveSwKIAkJLnF1ZXVlY29tbWFuZAkJPSB6ZmNwX3Njc2lfcXVldWVjb21tYW5kLAogCQkuZWhfYWJvcnRfaGFuZGxlcgk9IHpmY3Bfc2NzaV9laF9hYm9ydF9oYW5kbGVyLAogCQkuZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIgPSB6ZmNwX3Njc2lfZWhfZGV2aWNlX3Jlc2V0X2hhbmRsZXIsCi0JCS5laF9idXNfcmVzZXRfaGFuZGxlcgk9IHpmY3Bfc2NzaV9laF9idXNfcmVzZXRfaGFuZGxlciwKKwkJLmVoX2J1c19yZXNldF9oYW5kbGVyCT0gemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlciwKIAkJLmVoX2hvc3RfcmVzZXRfaGFuZGxlcgk9IHpmY3Bfc2NzaV9laF9ob3N0X3Jlc2V0X2hhbmRsZXIsCiAJCS5jYW5fcXVldWUJCT0gNDA5NiwKIAkJLnRoaXNfaWQJCT0gLTEsCi0JCS8qCi0JCSAqIEZJWE1FOgotCQkgKiBvbmUgbGVzcz8gY2FuIHpmY3BfY3JlYXRlX3NiYWxlIGNvcGUgd2l0aCBpdD8KLQkJICovCiAJCS5zZ190YWJsZXNpemUJCT0gWkZDUF9NQVhfU0JBTEVTX1BFUl9SRVEsCiAJCS5jbWRfcGVyX2x1bgkJPSAxLAotCQkudW5jaGVja2VkX2lzYV9kbWEJPSAwLAogCQkudXNlX2NsdXN0ZXJpbmcJCT0gMSwKIAkJLnNkZXZfYXR0cnMJCT0gemZjcF9zeXNmc19zZGV2X2F0dHJzLAogCX0sCiAJLmRyaXZlcl92ZXJzaW9uID0gWkZDUF9WRVJTSU9OLAotCS8qIHJlc3QgaW5pdGlhbGlzZWQgd2l0aCB6ZXJvcyAqLwogfTsKIAogLyogRmluZCBzdGFydCBvZiBSZXNwb25zZSBJbmZvcm1hdGlvbiBpbiBGQ1AgcmVzcG9uc2UgdW5pdCovCkBAIC0xNzYsOCArMTY3LDE0IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHZvaWQKLXpmY3Bfc2NzaV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RwbnQpCisvKioKKyAqIHpmY3Bfc2NzaV9zbGF2ZV9kZXN0cm95IC0gY2FsbGVkIHdoZW4gc2NzaSBkZXZpY2UgaXMgcmVtb3ZlZAorICoKKyAqIFJlbW92ZSByZWZlcmVuY2UgdG8gYXNzb2NpYXRlZCBzY3NpIGRldmljZSBmb3IgYW4gemZjcF91bml0LgorICogTWFyayB6ZmNwX3VuaXQgYXMgZmFpbGVkLiBUaGUgc2NzaSBkZXZpY2UgbWlnaHQgYmUgZGVsZXRlZCB2aWEgc3lzZnMKKyAqIG9yIGEgc2NhbiBmb3IgdGhpcyBkZXZpY2UgbWlnaHQgaGF2ZSBmYWlsZWQuCisgKi8KK3N0YXRpYyB2b2lkIHpmY3Bfc2NzaV9zbGF2ZV9kZXN0cm95KHN0cnVjdCBzY3NpX2RldmljZSAqc2RwbnQpCiB7CiAJc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0ICopIHNkcG50LT5ob3N0ZGF0YTsKIApAQCAtMTg1LDYgKzE4Miw3IEBACiAJCWF0b21pY19jbGVhcl9tYXNrKFpGQ1BfU1RBVFVTX1VOSVRfUkVHSVNURVJFRCwgJnVuaXQtPnN0YXR1cyk7CiAJCXNkcG50LT5ob3N0ZGF0YSA9IE5VTEw7CiAJCXVuaXQtPmRldmljZSA9IE5VTEw7CisJCXpmY3BfZXJwX3VuaXRfZmFpbGVkKHVuaXQpOwogCQl6ZmNwX3VuaXRfcHV0KHVuaXQpOwogCX0gZWxzZSB7CiAJCVpGQ1BfTE9HX05PUk1BTCgiYnVnOiBubyB1bml0IGFzc29jaWF0ZWQgd2l0aCBTQ1NJIGRldmljZSBhdCAiCkBAIC01NDksMzUgKzU0NywzOCBAQAogfQogCiAvKioKLSAqIHpmY3Bfc2NzaV9laF9idXNfcmVzZXRfaGFuZGxlciAtIHJlc2V0IGJ1cyAocmVvcGVuIGFkYXB0ZXIpCisgKiB6ZmNwX3Njc2lfZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gaGFuZGxlciBmb3IgaG9zdCBhbmQgYnVzIHJlc2V0CisgKgorICogSWYgRVJQIGlzIGFscmVhZHkgcnVubmluZyBpdCB3aWxsIGJlIHN0b3BwZWQuCiAgKi8KLWludAotemZjcF9zY3NpX2VoX2J1c19yZXNldF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKnNjcG50KQoraW50IHpmY3Bfc2NzaV9laF9ob3N0X3Jlc2V0X2hhbmRsZXIoc3RydWN0IHNjc2lfY21uZCAqc2NwbnQpCiB7Ci0Jc3RydWN0IHpmY3BfdW5pdCAqdW5pdCA9IChzdHJ1Y3QgemZjcF91bml0Kikgc2NwbnQtPmRldmljZS0+aG9zdGRhdGE7Ci0Jc3RydWN0IHpmY3BfYWRhcHRlciAqYWRhcHRlciA9IHVuaXQtPnBvcnQtPmFkYXB0ZXI7CisJc3RydWN0IHpmY3BfdW5pdCAqdW5pdDsKKwlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlaRkNQX0xPR19OT1JNQUwoImJ1cyByZXNldCBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggIgorCXVuaXQgPSAoc3RydWN0IHpmY3BfdW5pdCopIHNjcG50LT5kZXZpY2UtPmhvc3RkYXRhOworCWFkYXB0ZXIgPSB1bml0LT5wb3J0LT5hZGFwdGVyOworCisJWkZDUF9MT0dfTk9STUFMKCJob3N0L2J1cyByZXNldCBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggIgogCQkJInVuaXQgMHglMDE2THhcbiIsIHVuaXQtPmZjcF9sdW4pOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOwotCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CiAKLQlyZXR1cm4gU1VDQ0VTUzsKLX0KLQotLyoqCi0gKiB6ZmNwX3Njc2lfZWhfaG9zdF9yZXNldF9oYW5kbGVyIC0gcmVzZXQgaG9zdCAocmVvcGVuIGFkYXB0ZXIpCi0gKi8KLWludAotemZjcF9zY3NpX2VoX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY3BudCkKLXsKLQlzdHJ1Y3QgemZjcF91bml0ICp1bml0ID0gKHN0cnVjdCB6ZmNwX3VuaXQqKSBzY3BudC0+ZGV2aWNlLT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgemZjcF9hZGFwdGVyICphZGFwdGVyID0gdW5pdC0+cG9ydC0+YWRhcHRlcjsKLQotCVpGQ1BfTE9HX05PUk1BTCgiaG9zdCByZXNldCBiZWNhdXNlIG9mIHByb2JsZW1zIHdpdGggIgotCQkJInVuaXQgMHglMDE2THhcbiIsIHVuaXQtPmZjcF9sdW4pOwotCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOwotCXpmY3BfZXJwX3dhaXQoYWRhcHRlcik7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOworCWlmIChhdG9taWNfdGVzdF9tYXNrKFpGQ1BfU1RBVFVTX0FEQVBURVJfRVJQX1BFTkRJTkcsCisJCQkgICAgICZhZGFwdGVyLT5zdGF0dXMpKSB7CisJCXpmY3BfZXJwX21vZGlmeV9hZGFwdGVyX3N0YXR1cyhhZGFwdGVyLAorCQkgICAgICAgWkZDUF9TVEFUVVNfQ09NTU9OX1VOQkxPQ0tFRHxaRkNQX1NUQVRVU19DT01NT05fT1BFTiwKKwkJICAgICAgIFpGQ1BfQ0xFQVIpOworCQl6ZmNwX2VycF9hY3Rpb25fZGlzbWlzc19hZGFwdGVyKGFkYXB0ZXIpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+ZXJwX2xvY2ssIGZsYWdzKTsKKwkJemZjcF9mc2ZfcmVxX2Rpc21pc3NfYWxsKGFkYXB0ZXIpOworCQlhZGFwdGVyLT5mc2ZfcmVxX3NlcV9ubyA9IDA7CisJCXpmY3BfZXJwX2FkYXB0ZXJfcmVvcGVuKGFkYXB0ZXIsIDApOworCX0gZWxzZSB7CisJCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZhZGFwdGVyLT5lcnBfbG9jaywgZmxhZ3MpOworCQl6ZmNwX2VycF9hZGFwdGVyX3Jlb3BlbihhZGFwdGVyLCAwKTsKKwkJemZjcF9lcnBfd2FpdChhZGFwdGVyKTsKKwl9CiAKIAlyZXR1cm4gU1VDQ0VTUzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMgYi9kcml2ZXJzL3MzOTAvc3lzaW5mby5jCmluZGV4IGQxYzFlNzUuLjFlNzg4ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zeXNpbmZvLmMKKysrIGIvZHJpdmVycy9zMzkwL3N5c2luZm8uYwpAQCAtMTEsMTkgKzExLDE4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9lYmNkaWMuaD4KIAotc3RydWN0IHN5c2luZm9fMV8xXzEKLXsKK3N0cnVjdCBzeXNpbmZvXzFfMV8xIHsKIAljaGFyIHJlc2VydmVkXzBbMzJdOwogCWNoYXIgbWFudWZhY3R1cmVyWzE2XTsKIAljaGFyIHR5cGVbNF07CiAJY2hhciByZXNlcnZlZF8xWzEyXTsKLQljaGFyIG1vZGVsWzE2XTsKKwljaGFyIG1vZGVsX2NhcGFjaXR5WzE2XTsKIAljaGFyIHNlcXVlbmNlWzE2XTsKIAljaGFyIHBsYW50WzRdOworCWNoYXIgbW9kZWxbMTZdOwogfTsKIAotc3RydWN0IHN5c2luZm9fMV8yXzEKLXsKK3N0cnVjdCBzeXNpbmZvXzFfMl8xIHsKIAljaGFyIHJlc2VydmVkXzBbODBdOwogCWNoYXIgc2VxdWVuY2VbMTZdOwogCWNoYXIgcGxhbnRbNF07CkBAIC0zMSw5ICszMCwxMiBAQAogCXVuc2lnbmVkIHNob3J0IGNwdV9hZGRyZXNzOwogfTsKIAotc3RydWN0IHN5c2luZm9fMV8yXzIKLXsKLQljaGFyIHJlc2VydmVkXzBbMzJdOworc3RydWN0IHN5c2luZm9fMV8yXzIgeworCWNoYXIgZm9ybWF0OworCWNoYXIgcmVzZXJ2ZWRfMFsxXTsKKwl1bnNpZ25lZCBzaG9ydCBhY2Nfb2Zmc2V0OworCWNoYXIgcmVzZXJ2ZWRfMVsyNF07CisJdW5zaWduZWQgaW50IHNlY29uZGFyeV9jYXBhYmlsaXR5OwogCXVuc2lnbmVkIGludCBjYXBhYmlsaXR5OwogCXVuc2lnbmVkIHNob3J0IGNwdXNfdG90YWw7CiAJdW5zaWduZWQgc2hvcnQgY3B1c19jb25maWd1cmVkOwpAQCAtNDIsOCArNDQsMTIgQEAKIAl1bnNpZ25lZCBzaG9ydCBhZGp1c3RtZW50WzBdOwogfTsKIAotc3RydWN0IHN5c2luZm9fMl8yXzEKLXsKK3N0cnVjdCBzeXNpbmZvXzFfMl8yX2V4dGVuc2lvbiB7CisJdW5zaWduZWQgaW50IGFsdF9jYXBhYmlsaXR5OworCXVuc2lnbmVkIHNob3J0IGFsdF9hZGp1c3RtZW50WzBdOworfTsKKworc3RydWN0IHN5c2luZm9fMl8yXzEgewogCWNoYXIgcmVzZXJ2ZWRfMFs4MF07CiAJY2hhciBzZXF1ZW5jZVsxNl07CiAJY2hhciBwbGFudFs0XTsKQEAgLTUxLDE1ICs1NywxMSBAQAogCXVuc2lnbmVkIHNob3J0IGNwdV9hZGRyZXNzOwogfTsKIAotc3RydWN0IHN5c2luZm9fMl8yXzIKLXsKK3N0cnVjdCBzeXNpbmZvXzJfMl8yIHsKIAljaGFyIHJlc2VydmVkXzBbMzJdOwogCXVuc2lnbmVkIHNob3J0IGxwYXJfbnVtYmVyOwogCWNoYXIgcmVzZXJ2ZWRfMTsKIAl1bnNpZ25lZCBjaGFyIGNoYXJhY3RlcmlzdGljczsKLQkjZGVmaW5lIExQQVJfQ0hBUl9ERURJQ0FURUQJKDEgPDwgNykKLQkjZGVmaW5lIExQQVJfQ0hBUl9TSEFSRUQJKDEgPDwgNikKLQkjZGVmaW5lIExQQVJfQ0hBUl9MSU1JVEVECSgxIDw8IDUpCiAJdW5zaWduZWQgc2hvcnQgY3B1c190b3RhbDsKIAl1bnNpZ25lZCBzaG9ydCBjcHVzX2NvbmZpZ3VyZWQ7CiAJdW5zaWduZWQgc2hvcnQgY3B1c19zdGFuZGJ5OwpAQCAtNzEsMTIgKzczLDE0IEBACiAJdW5zaWduZWQgc2hvcnQgY3B1c19zaGFyZWQ7CiB9OwogCi1zdHJ1Y3Qgc3lzaW5mb18zXzJfMgoteworI2RlZmluZSBMUEFSX0NIQVJfREVESUNBVEVECSgxIDw8IDcpCisjZGVmaW5lIExQQVJfQ0hBUl9TSEFSRUQJKDEgPDwgNikKKyNkZWZpbmUgTFBBUl9DSEFSX0xJTUlURUQJKDEgPDwgNSkKKworc3RydWN0IHN5c2luZm9fM18yXzIgewogCWNoYXIgcmVzZXJ2ZWRfMFszMV07CiAJdW5zaWduZWQgY2hhciBjb3VudDsKLQlzdHJ1Y3QKLQl7CisJc3RydWN0IHsKIAkJY2hhciByZXNlcnZlZF8wWzRdOwogCQl1bnNpZ25lZCBzaG9ydCBjcHVzX3RvdGFsOwogCQl1bnNpZ25lZCBzaG9ydCBjcHVzX2NvbmZpZ3VyZWQ7CkBAIC05MCwxMzYgKzk0LDIyMyBAQAogCX0gdm1bOF07CiB9OwogCi11bmlvbiBzMzkwX3N5c2luZm8KK3N0YXRpYyBpbmxpbmUgaW50IHN0c2kodm9pZCAqc3lzaW5mbywgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCiB7Ci0Jc3RydWN0IHN5c2luZm9fMV8xXzEgc3lzaW5mb18xXzFfMTsKLQlzdHJ1Y3Qgc3lzaW5mb18xXzJfMSBzeXNpbmZvXzFfMl8xOwotCXN0cnVjdCBzeXNpbmZvXzFfMl8yIHN5c2luZm9fMV8yXzI7Ci0Jc3RydWN0IHN5c2luZm9fMl8yXzEgc3lzaW5mb18yXzJfMTsKLQlzdHJ1Y3Qgc3lzaW5mb18yXzJfMiBzeXNpbmZvXzJfMl8yOwotCXN0cnVjdCBzeXNpbmZvXzNfMl8yIHN5c2luZm9fM18yXzI7Ci19OworCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IChmYyA8PCAyOCkgfCBzZWwxOworCXJlZ2lzdGVyIGludCByMSBhc20oIjEiKSA9IHNlbDI7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN0c2kgKHZvaWQgKnN5c2luZm8sIAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZjLCBpbnQgc2VsMSwgaW50IHNlbDIpCi17Ci0JaW50IGNjLCByZXR2OwotCi0jaWZuZGVmIENPTkZJR182NEJJVAotCV9fYXNtX18gX192b2xhdGlsZV9fICgJImxyXHQwLCUyXG4iCi0JCQkJIlx0bHJcdDEsJTNcbiIKLQkJCQkiXHRzdHNpXHQwKCU0KVxuIgotCQkJCSIwOlx0aXBtXHQlMFxuIgotCQkJCSJcdHNybFx0JTAsMjhcbiIKLQkJCQkiMTpsclx0JTEsMFxuIgotCQkJCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCi0JCQkJIjI6XHRsaGlcdCUwLDNcbiIKLQkJCQkiXHRicmFzXHQxLDNmXG4iCi0JCQkJIlx0LmxvbmcgMWJcbiIKLQkJCQkiMzpcdGxcdDEsMCgxKVxuIgotCQkJCSJcdGJyXHQxXG4iCi0JCQkJIi5wcmV2aW91c1xuIgotCQkJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCQkJIlx0LmFsaWduIDRcbiIKLQkJCQkiXHQubG9uZyAwYiwyYlxuIgotCQkJCSIucHJldmlvdXNcbiIKLQkJCQk6ICI9ZCIgKGNjKSwgIj1kIiAocmV0dikKLQkJCQk6ICJkIiAoKGZjIDw8IDI4KSB8IHNlbDEpLCAiZCIgKHNlbDIpLCAiYSIgKHN5c2luZm8pIAotCQkJCTogImNjIiwgIm1lbW9yeSIsICIwIiwgIjEiICk7Ci0jZWxzZQotCV9fYXNtX18gX192b2xhdGlsZV9fICgJImxyXHQwLCUyXG4iCi0JCQkJImxyXHQxLCUzXG4iCi0JCQkJIlx0c3RzaVx0MCglNClcbiIKLQkJCQkiMDpcdGlwbVx0JTBcbiIKLQkJCQkiXHRzcmxcdCUwLDI4XG4iCi0JCQkJIjE6bHJcdCUxLDBcbiIKLQkJCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIgotCQkJCSIyOlx0bGhpXHQlMCwzXG4iCi0JCQkJIlx0amdcdDFiXG4iCi0JCQkJIi5wcmV2aW91c1xuIgotCQkJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCQkJIlx0LmFsaWduIDhcbiIKLQkJCQkiXHQucXVhZCAwYiwyYlxuIgotCQkJCSIucHJldmlvdXNcbiIKLQkJCQk6ICI9ZCIgKGNjKSwgIj1kIiAocmV0dikKLQkJCQk6ICJkIiAoKGZjIDw8IDI4KSB8IHNlbDEpLCAiZCIgKHNlbDIpLCAiYSIgKHN5c2luZm8pIAotCQkJCTogImNjIiwgIm1lbW9yeSIsICIwIiwgIjEiICk7Ci0jZW5kaWYKLQotCXJldHVybiBjYz8gLTEgOiByZXR2OworCWFzbSB2b2xhdGlsZSgKKwkJIiAgIHN0c2kgMCglMilcbiIKKwkJIjA6IGp6ICAgMmZcbiIKKwkJIjE6IGxoaSAgJTAsJTNcbiIKKwkJIjI6XG4iCisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICIrZCIgKHIwKSA6ICJkIiAocjEpLCAiYSIgKHN5c2luZm8pLCAiSyIgKC1FTk9TWVMpCisJCTogImNjIiwgIm1lbW9yeSIgKTsKKwlyZXR1cm4gcjA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHN0c2lfMCAodm9pZCkKK3N0YXRpYyBpbmxpbmUgaW50IHN0c2lfMCh2b2lkKQogewogCWludCByYyA9IHN0c2kgKE5VTEwsIDAsIDAsIDApOwotCXJldHVybiByYyA9PSAtMSA/IHJjIDogKCgodW5zaWduZWQgaW50KXJjKSA+PiAyOCk7CisJcmV0dXJuIHJjID09IC1FTk9TWVMgPyByYyA6ICgoKHVuc2lnbmVkIGludCkgcmMpID4+IDI4KTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc3RzaV8xXzFfMSAoc3RydWN0IHN5c2luZm9fMV8xXzEgKmluZm8pCitzdGF0aWMgaW50IHN0c2lfMV8xXzEoc3RydWN0IHN5c2luZm9fMV8xXzEgKmluZm8sIGNoYXIgKnBhZ2UsIGludCBsZW4pCiB7Ci0JaW50IHJjID0gc3RzaSAoaW5mbywgMSwgMSwgMSk7Ci0JaWYgKHJjICE9IC0xKQotCXsKLQkJRUJDQVNDIChpbmZvLT5tYW51ZmFjdHVyZXIsIHNpemVvZihpbmZvLT5tYW51ZmFjdHVyZXIpKTsKLQkJRUJDQVNDIChpbmZvLT50eXBlLCBzaXplb2YoaW5mby0+dHlwZSkpOwotCQlFQkNBU0MgKGluZm8tPm1vZGVsLCBzaXplb2YoaW5mby0+bW9kZWwpKTsKLQkJRUJDQVNDIChpbmZvLT5zZXF1ZW5jZSwgc2l6ZW9mKGluZm8tPnNlcXVlbmNlKSk7Ci0JCUVCQ0FTQyAoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOworCWlmIChzdHNpKGluZm8sIDEsIDEsIDEpID09IC1FTk9TWVMpCisJCXJldHVybiBsZW47CisKKwlFQkNBU0MoaW5mby0+bWFudWZhY3R1cmVyLCBzaXplb2YoaW5mby0+bWFudWZhY3R1cmVyKSk7CisJRUJDQVNDKGluZm8tPnR5cGUsIHNpemVvZihpbmZvLT50eXBlKSk7CisJRUJDQVNDKGluZm8tPm1vZGVsLCBzaXplb2YoaW5mby0+bW9kZWwpKTsKKwlFQkNBU0MoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOworCUVCQ0FTQyhpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7CisJRUJDQVNDKGluZm8tPm1vZGVsX2NhcGFjaXR5LCBzaXplb2YoaW5mby0+bW9kZWxfY2FwYWNpdHkpKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTWFudWZhY3R1cmVyOiAgICAgICAgICUtMTYuMTZzXG4iLAorCQkgICAgICAgaW5mby0+bWFudWZhY3R1cmVyKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVHlwZTogICAgICAgICAgICAgICAgICUtNC40c1xuIiwKKwkJICAgICAgIGluZm8tPnR5cGUpOworCWlmIChpbmZvLT5tb2RlbFswXSAhPSAnXDAnKQorCQkvKgorCQkgKiBTaWdoOiB0aGUgbW9kZWwgZmllbGQgaGFzIGJlZW4gcmVuYW1lZCB3aXRoIFN5c3RlbSB6OQorCQkgKiB0byBtb2RlbF9jYXBhY2l0eSBhbmQgYSBuZXcgbW9kZWwgZmllbGQgaGFzIGJlZW4gYWRkZWQKKwkJICogYWZ0ZXIgdGhlIHBsYW50IGZpZWxkLiBUbyBhdm9pZCBjb25mdXNpbmcgb2xkZXIgcHJvZ3JhbXMKKwkJICogdGhlICJNb2RlbDoiIHByaW50cyAibW9kZWxfY2FwYWNpdHkgbW9kZWwiIG9yIGp1c3QKKwkJICogIm1vZGVsX2NhcGFjaXR5IiBpZiB0aGUgbW9kZWwgc3RyaW5nIGlzIGVtcHR5IC4KKwkJICovCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sCisJCQkgICAgICAgIk1vZGVsOiAgICAgICAgICAgICAgICAlLTE2LjE2cyAlLTE2LjE2c1xuIiwKKwkJCSAgICAgICBpbmZvLT5tb2RlbF9jYXBhY2l0eSwgaW5mby0+bW9kZWwpOworCWVsc2UKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk1vZGVsOiAgICAgICAgICAgICAgICAlLTE2LjE2c1xuIiwKKwkJCSAgICAgICBpbmZvLT5tb2RlbF9jYXBhY2l0eSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlcXVlbmNlIENvZGU6ICAgICAgICAlLTE2LjE2c1xuIiwKKwkJICAgICAgIGluZm8tPnNlcXVlbmNlKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUGxhbnQ6ICAgICAgICAgICAgICAgICUtNC40c1xuIiwKKwkJICAgICAgIGluZm8tPnBsYW50KTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgQ2FwYWNpdHk6ICAgICAgICUtMTYuMTZzXG4iLAorCQkgICAgICAgaW5mby0+bW9kZWxfY2FwYWNpdHkpOworCXJldHVybiBsZW47Cit9CisKKyNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KK3N0YXRpYyBpbnQgc3RzaV8xXzJfMShzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKK3sKKwlpZiAoc3RzaShpbmZvLCAxLCAyLCAxKSA9PSAtRU5PU1lTKQorCQlyZXR1cm4gbGVuOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlxuIik7CisJRUJDQVNDKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKKwlFQkNBU0MoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIENQVTogJS0xNi4xNnNcbiIsCisJCSAgICAgICBpbmZvLT5zZXF1ZW5jZSk7CisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlBsYW50IG9mIENQVTogICAgICAgICAlLTE2LjE2c1xuIiwKKwkJICAgICAgIGluZm8tPnBsYW50KTsKKwlyZXR1cm4gbGVuOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQgc3RzaV8xXzJfMihzdHJ1Y3Qgc3lzaW5mb18xXzJfMiAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3lzaW5mb18xXzJfMl9leHRlbnNpb24gKmV4dDsKKwlpbnQgaTsKKworCWlmIChzdHNpKGluZm8sIDEsIDIsIDIpID09IC1FTk9TWVMpCisJCXJldHVybiBsZW47CisJZXh0ID0gKHN0cnVjdCBzeXNpbmZvXzFfMl8yX2V4dGVuc2lvbiAqKQorCQkoKHVuc2lnbmVkIGxvbmcpIGluZm8gKyBpbmZvLT5hY2Nfb2Zmc2V0KTsKKworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDUFVzIFRvdGFsOiAgICAgICAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3RvdGFsKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBDb25maWd1cmVkOiAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19jb25maWd1cmVkKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBTdGFuZGJ5OiAgICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19zdGFuZGJ5KTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ1BVcyBSZXNlcnZlZDogICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19yZXNlcnZlZCk7CisKKwlpZiAoaW5mby0+Zm9ybWF0ID09IDEpIHsKKwkJLyoKKwkJICogU2lnaCAyLiBBY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmljYXRpb24gdGhlIGFsdGVybmF0ZQorCQkgKiBjYXBhYmlsaXR5IGZpZWxkIGlzIGEgMzIgYml0IGZsb2F0aW5nIHBvaW50IG51bWJlcgorCQkgKiBpZiB0aGUgaGlnaGVyIG9yZGVyIDggYml0cyBhcmUgbm90IHplcm8uIFByaW50aW5nCisJCSAqIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGluIHRoZSBrZXJuZWwgaXMgYSBuby1ubywKKwkJICogYWx3YXlzIHByaW50IHRoZSBudW1iZXIgYXMgMzIgYml0IHVuc2lnbmVkIGludGVnZXIuCisJCSAqIFRoZSB1c2VyLXNwYWNlIG5lZWRzIHRvIGtub3cgYWJvdXQgdGhlIHN0YW5nZQorCQkgKiBlbmNvZGluZyBvZiB0aGUgYWx0ZXJuYXRlIGNwdSBjYXBhYmlsaXR5LgorCQkgKi8KKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNhcGFiaWxpdHk6ICAgICAgICAgICAldSAldVxuIiwKKwkJCSAgICAgICBpbmZvLT5jYXBhYmlsaXR5LCBleHQtPmFsdF9jYXBhYmlsaXR5KTsKKwkJZm9yIChpID0gMjsgaSA8PSBpbmZvLT5jcHVzX3RvdGFsOyBpKyspCisJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLAorCQkJCSAgICAgICAiQWRqdXN0bWVudCAlMDJkLXdheTogICAgJXUgJXVcbiIsCisJCQkJICAgICAgIGksIGluZm8tPmFkanVzdG1lbnRbaS0yXSwKKwkJCQkgICAgICAgZXh0LT5hbHRfYWRqdXN0bWVudFtpLTJdKTsKKworCX0gZWxzZSB7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDYXBhYmlsaXR5OiAgICAgICAgICAgJXVcbiIsCisJCQkgICAgICAgaW5mby0+Y2FwYWJpbGl0eSk7CisJCWZvciAoaSA9IDI7IGkgPD0gaW5mby0+Y3B1c190b3RhbDsgaSsrKQorCQkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwKKwkJCQkgICAgICAgIkFkanVzdG1lbnQgJTAyZC13YXk6ICAgICV1XG4iLAorCQkJCSAgICAgICBpLCBpbmZvLT5hZGp1c3RtZW50W2ktMl0pOwogCX0KLQlyZXR1cm4gcmMgPT0gLTEgPyByYyA6IDA7CisKKwlpZiAoaW5mby0+c2Vjb25kYXJ5X2NhcGFiaWxpdHkgIT0gMCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNlY29uZGFyeSBDYXBhYmlsaXR5OiAlZFxuIiwKKwkJCSAgICAgICBpbmZvLT5zZWNvbmRhcnlfY2FwYWJpbGl0eSk7CisKKwlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzdHNpXzFfMl8xIChzdHJ1Y3Qgc3lzaW5mb18xXzJfMSAqaW5mbykKKyNpZiAwIC8qIEN1cnJlbnRseSB1bnVzZWQgKi8KK3N0YXRpYyBpbnQgc3RzaV8yXzJfMShzdHJ1Y3Qgc3lzaW5mb18yXzJfMSAqaW5mbywgY2hhciAqcGFnZSwgaW50IGxlbikKIHsKLQlpbnQgcmMgPSBzdHNpIChpbmZvLCAxLCAyLCAxKTsKLQlpZiAocmMgIT0gLTEpCi0JewotCQlFQkNBU0MgKGluZm8tPnNlcXVlbmNlLCBzaXplb2YoaW5mby0+c2VxdWVuY2UpKTsKLQkJRUJDQVNDIChpbmZvLT5wbGFudCwgc2l6ZW9mKGluZm8tPnBsYW50KSk7CisJaWYgKHN0c2koaW5mbywgMiwgMiwgMSkgPT0gLUVOT1NZUykKKwkJcmV0dXJuIGxlbjsKKworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCUVCQ0FTQyAoaW5mby0+c2VxdWVuY2UsIHNpemVvZihpbmZvLT5zZXF1ZW5jZSkpOworCUVCQ0FTQyAoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXF1ZW5jZSBDb2RlIG9mIGxvZ2ljYWwgQ1BVOiAlLTE2LjE2c1xuIiwKKwkJICAgICAgIGluZm8tPnNlcXVlbmNlKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUGxhbnQgb2YgbG9naWNhbCBDUFU6ICUtMTYuMTZzXG4iLAorCQkgICAgICAgaW5mby0+cGxhbnQpOworCXJldHVybiBsZW47Cit9CisjZW5kaWYKKworc3RhdGljIGludCBzdHNpXzJfMl8yKHN0cnVjdCBzeXNpbmZvXzJfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQoreworCWlmIChzdHNpKGluZm8sIDIsIDIsIDIpID09IC1FTk9TWVMpCisJCXJldHVybiBsZW47CisKKwlFQkNBU0MgKGluZm8tPm5hbWUsIHNpemVvZihpbmZvLT5uYW1lKSk7CisKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBOdW1iZXI6ICAgICAgICAgICVkXG4iLAorCQkgICAgICAgaW5mby0+bHBhcl9udW1iZXIpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ2hhcmFjdGVyaXN0aWNzOiAiKTsKKwlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX0RFRElDQVRFRCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRlZGljYXRlZCAiKTsKKwlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX1NIQVJFRCkKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNoYXJlZCAiKTsKKwlpZiAoaW5mby0+Y2hhcmFjdGVyaXN0aWNzICYgTFBBUl9DSEFSX0xJTUlURUQpCisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMaW1pdGVkICIpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCisJCSAgICAgICBpbmZvLT5uYW1lKTsKKworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jYWYpOworCisJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkxQQVIgQ1BVcyBUb3RhbDogICAgICAlZFxuIiwKKwkJICAgICAgIGluZm8tPmNwdXNfdG90YWwpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgQ29uZmlndXJlZDogJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX2NvbmZpZ3VyZWQpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgU3RhbmRieTogICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3N0YW5kYnkpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgUmVzZXJ2ZWQ6ICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3Jlc2VydmVkKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTFBBUiBDUFVzIERlZGljYXRlZDogICVkXG4iLAorCQkgICAgICAgaW5mby0+Y3B1c19kZWRpY2F0ZWQpOworCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJMUEFSIENQVXMgU2hhcmVkOiAgICAgJWRcbiIsCisJCSAgICAgICBpbmZvLT5jcHVzX3NoYXJlZCk7CisJcmV0dXJuIGxlbjsKK30KKworc3RhdGljIGludCBzdHNpXzNfMl8yKHN0cnVjdCBzeXNpbmZvXzNfMl8yICppbmZvLCBjaGFyICpwYWdlLCBpbnQgbGVuKQoreworCWludCBpOworCisJaWYgKHN0c2koaW5mbywgMywgMiwgMikgPT0gLUVOT1NZUykKKwkJcmV0dXJuIGxlbjsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Y291bnQ7IGkrKykgeworCQlFQkNBU0MgKGluZm8tPnZtW2ldLm5hbWUsIHNpemVvZihpbmZvLT52bVtpXS5uYW1lKSk7CisJCUVCQ0FTQyAoaW5mby0+dm1baV0uY3BpLCBzaXplb2YoaW5mby0+dm1baV0uY3BpKSk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJcbiIpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIE5hbWU6ICAgICAgICAgICAgJS04LjhzXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLm5hbWUpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENvbnRyb2wgUHJvZ3JhbTogJS0xNi4xNnNcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3BpKTsKKworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY2FmKTsKKworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgVG90YWw6ICAgICAgJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c190b3RhbCk7CisJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJWTSUwMmQgQ1BVcyBDb25maWd1cmVkOiAlZFxuIiwKKwkJCSAgICAgICBpLCBpbmZvLT52bVtpXS5jcHVzX2NvbmZpZ3VyZWQpOworCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiVk0lMDJkIENQVXMgU3RhbmRieTogICAgJWRcbiIsCisJCQkgICAgICAgaSwgaW5mby0+dm1baV0uY3B1c19zdGFuZGJ5KTsKKwkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlZNJTAyZCBDUFVzIFJlc2VydmVkOiAgICVkXG4iLAorCQkJICAgICAgIGksIGluZm8tPnZtW2ldLmNwdXNfcmVzZXJ2ZWQpOwogCX0KLQlyZXR1cm4gcmMgPT0gLTEgPyByYyA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHN0c2lfMV8yXzIgKHN0cnVjdCBzeXNpbmZvXzFfMl8yICppbmZvKQotewotCWludCByYyA9IHN0c2kgKGluZm8sIDEsIDIsIDIpOwotCXJldHVybiByYyA9PSAtMSA/IHJjIDogMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgc3RzaV8yXzJfMSAoc3RydWN0IHN5c2luZm9fMl8yXzEgKmluZm8pCi17Ci0JaW50IHJjID0gc3RzaSAoaW5mbywgMiwgMiwgMSk7Ci0JaWYgKHJjICE9IC0xKQotCXsKLQkJRUJDQVNDIChpbmZvLT5zZXF1ZW5jZSwgc2l6ZW9mKGluZm8tPnNlcXVlbmNlKSk7Ci0JCUVCQ0FTQyAoaW5mby0+cGxhbnQsIHNpemVvZihpbmZvLT5wbGFudCkpOwotCX0KLQlyZXR1cm4gcmMgPT0gLTEgPyByYyA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHN0c2lfMl8yXzIgKHN0cnVjdCBzeXNpbmZvXzJfMl8yICppbmZvKQotewotCWludCByYyA9IHN0c2kgKGluZm8sIDIsIDIsIDIpOwotCWlmIChyYyAhPSAtMSkKLQl7Ci0JCUVCQ0FTQyAoaW5mby0+bmFtZSwgc2l6ZW9mKGluZm8tPm5hbWUpKTsKLSAgCX0KLQlyZXR1cm4gcmMgPT0gLTEgPyByYyA6IDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHN0c2lfM18yXzIgKHN0cnVjdCBzeXNpbmZvXzNfMl8yICppbmZvKQotewotCWludCByYyA9IHN0c2kgKGluZm8sIDMsIDIsIDIpOwotCWlmIChyYyAhPSAtMSkKLQl7Ci0JCWludCBpOwotCQlmb3IgKGkgPSAwOyBpIDwgaW5mby0+Y291bnQ7IGkrKykKLQkJewotCQkJRUJDQVNDIChpbmZvLT52bVtpXS5uYW1lLCBzaXplb2YoaW5mby0+dm1baV0ubmFtZSkpOwotCQkJRUJDQVNDIChpbmZvLT52bVtpXS5jcGksIHNpemVvZihpbmZvLT52bVtpXS5jcGkpKTsKLQkJfQotCX0KLQlyZXR1cm4gcmMgPT0gLTEgPyByYyA6IDA7CisJcmV0dXJuIGxlbjsKIH0KIAogCkBAIC0yMjcsMTE4ICszMTgsMzQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmX3Qgb2ZmLCBpbnQgY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQogewotCXVuc2lnbmVkIGxvbmcgaW5mb19wYWdlID0gZ2V0X3plcm9lZF9wYWdlIChHRlBfS0VSTkVMKTsgCi0JdW5pb24gczM5MF9zeXNpbmZvICppbmZvID0gKHVuaW9uIHMzOTBfc3lzaW5mbyAqKSBpbmZvX3BhZ2U7Ci0JaW50IGxlbiA9IDA7Ci0JaW50IGxldmVsOwotCWludCBpOworCXVuc2lnbmVkIGxvbmcgaW5mbyA9IGdldF96ZXJvZWRfcGFnZSAoR0ZQX0tFUk5FTCk7CisJaW50IGxldmVsLCBsZW47CiAJCiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gMDsKIAotCWxldmVsID0gc3RzaV8wICgpOworCWxlbiA9IDA7CisJbGV2ZWwgPSBzdHNpXzAoKTsKKwlpZiAobGV2ZWwgPj0gMSkKKwkJbGVuID0gc3RzaV8xXzFfMSgoc3RydWN0IHN5c2luZm9fMV8xXzEgKikgaW5mbywgcGFnZSwgbGVuKTsKIAotCWlmIChsZXZlbCA+PSAxICYmIHN0c2lfMV8xXzEgKCZpbmZvLT5zeXNpbmZvXzFfMV8xKSA9PSAwKQotCXsKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiTWFudWZhY3R1cmVyOiAgICAgICAgICUtMTYuMTZzXG4iLAotCQkJCWluZm8tPnN5c2luZm9fMV8xXzEubWFudWZhY3R1cmVyKTsKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiVHlwZTogICAgICAgICAgICAgICAgICUtNC40c1xuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzFfMV8xLnR5cGUpOwotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJNb2RlbDogICAgICAgICAgICAgICAgJS0xNi4xNnNcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18xXzFfMS5tb2RlbCk7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIlNlcXVlbmNlIENvZGU6ICAgICAgICAlLTE2LjE2c1xuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzFfMV8xLnNlcXVlbmNlKTsKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiUGxhbnQ6ICAgICAgICAgICAgICAgICUtNC40c1xuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzFfMV8xLnBsYW50KTsKLQl9CisJaWYgKGxldmVsID49IDEpCisJCWxlbiA9IHN0c2lfMV8yXzIoKHN0cnVjdCBzeXNpbmZvXzFfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7CiAKLQlpZiAobGV2ZWwgPj0gMSAmJiBzdHNpXzFfMl8yICgmaW5mby0+c3lzaW5mb18xXzJfMikgPT0gMCkKLQl7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIlxuIik7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkNQVXMgVG90YWw6ICAgICAgICAgICAlZFxuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzFfMl8yLmNwdXNfdG90YWwpOwotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJDUFVzIENvbmZpZ3VyZWQ6ICAgICAgJWRcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18xXzJfMi5jcHVzX2NvbmZpZ3VyZWQpOwotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJDUFVzIFN0YW5kYnk6ICAgICAgICAgJWRcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18xXzJfMi5jcHVzX3N0YW5kYnkpOwotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJDUFVzIFJlc2VydmVkOiAgICAgICAgJWRcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18xXzJfMi5jcHVzX3Jlc2VydmVkKTsKLQkKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiQ2FwYWJpbGl0eTogICAgICAgICAgICVkXG4iLAotCQkJCWluZm8tPnN5c2luZm9fMV8yXzIuY2FwYWJpbGl0eSk7CisJaWYgKGxldmVsID49IDIpCisJCWxlbiA9IHN0c2lfMl8yXzIoKHN0cnVjdCBzeXNpbmZvXzJfMl8yICopIGluZm8sIHBhZ2UsIGxlbik7CiAKLQkJZm9yIChpID0gMjsgaSA8PSBpbmZvLT5zeXNpbmZvXzFfMl8yLmNwdXNfdG90YWw7IGkrKykKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkFkanVzdG1lbnQgJTAyZC13YXk6ICAgICVkXG4iLAotCQkJCQlpLCBpbmZvLT5zeXNpbmZvXzFfMl8yLmFkanVzdG1lbnRbaS0yXSk7Ci0JfQorCWlmIChsZXZlbCA+PSAzKQorCQlsZW4gPSBzdHNpXzNfMl8yKChzdHJ1Y3Qgc3lzaW5mb18zXzJfMiAqKSBpbmZvLCBwYWdlLCBsZW4pOwogCi0JaWYgKGxldmVsID49IDIgJiYgc3RzaV8yXzJfMiAoJmluZm8tPnN5c2luZm9fMl8yXzIpID09IDApCi0JewotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJcbiIpOwotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJMUEFSIE51bWJlcjogICAgICAgICAgJWRcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18yXzJfMi5scGFyX251bWJlcik7Ci0KLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiTFBBUiBDaGFyYWN0ZXJpc3RpY3M6ICIpOwotCQlpZiAoaW5mby0+c3lzaW5mb18yXzJfMi5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfREVESUNBVEVEKQotCQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiRGVkaWNhdGVkICIpOwotCQlpZiAoaW5mby0+c3lzaW5mb18yXzJfMi5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfU0hBUkVEKQotCQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiU2hhcmVkICIpOwotCQlpZiAoaW5mby0+c3lzaW5mb18yXzJfMi5jaGFyYWN0ZXJpc3RpY3MgJiBMUEFSX0NIQVJfTElNSVRFRCkKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkxpbWl0ZWQgIik7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIlxuIik7Ci0JCi0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkxQQVIgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18yXzJfMi5uYW1lKTsKLQkKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiTFBBUiBBZGp1c3RtZW50OiAgICAgICVkXG4iLAotCQkJCWluZm8tPnN5c2luZm9fMl8yXzIuY2FmKTsKLQkKLQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiTFBBUiBDUFVzIFRvdGFsOiAgICAgICVkXG4iLAotCQkJCWluZm8tPnN5c2luZm9fMl8yXzIuY3B1c190b3RhbCk7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkxQQVIgQ1BVcyBDb25maWd1cmVkOiAlZFxuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzJfMl8yLmNwdXNfY29uZmlndXJlZCk7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkxQQVIgQ1BVcyBTdGFuZGJ5OiAgICAlZFxuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzJfMl8yLmNwdXNfc3RhbmRieSk7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkxQQVIgQ1BVcyBSZXNlcnZlZDogICAlZFxuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzJfMl8yLmNwdXNfcmVzZXJ2ZWQpOwotCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJMUEFSIENQVXMgRGVkaWNhdGVkOiAgJWRcbiIsCi0JCQkJaW5mby0+c3lzaW5mb18yXzJfMi5jcHVzX2RlZGljYXRlZCk7Ci0JCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIkxQQVIgQ1BVcyBTaGFyZWQ6ICAgICAlZFxuIiwKLQkJCQlpbmZvLT5zeXNpbmZvXzJfMl8yLmNwdXNfc2hhcmVkKTsKLQl9Ci0KLQlpZiAobGV2ZWwgPj0gMyAmJiBzdHNpXzNfMl8yICgmaW5mby0+c3lzaW5mb18zXzJfMikgPT0gMCkKLQl7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbmZvLT5zeXNpbmZvXzNfMl8yLmNvdW50OyBpKyspCi0JCXsKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIlxuIik7Ci0JCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJWTSUwMmQgTmFtZTogICAgICAgICAgICAlLTguOHNcbiIsCi0JCQkJCWksIGluZm8tPnN5c2luZm9fM18yXzIudm1baV0ubmFtZSk7Ci0JCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJWTSUwMmQgQ29udHJvbCBQcm9ncmFtOiAlLTE2LjE2c1xuIiwKLQkJCQkJaSwgaW5mby0+c3lzaW5mb18zXzJfMi52bVtpXS5jcGkpOwotCQotCQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiVk0lMDJkIEFkanVzdG1lbnQ6ICAgICAgJWRcbiIsCi0JCQkJCWksIGluZm8tPnN5c2luZm9fM18yXzIudm1baV0uY2FmKTsKLQkKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIlZNJTAyZCBDUFVzIFRvdGFsOiAgICAgICVkXG4iLAotCQkJCQlpLCBpbmZvLT5zeXNpbmZvXzNfMl8yLnZtW2ldLmNwdXNfdG90YWwpOwotCQkJbGVuICs9IHNwcmludGYgKHBhZ2UrbGVuLCAiVk0lMDJkIENQVXMgQ29uZmlndXJlZDogJWRcbiIsCi0JCQkJCWksIGluZm8tPnN5c2luZm9fM18yXzIudm1baV0uY3B1c19jb25maWd1cmVkKTsKLQkJCWxlbiArPSBzcHJpbnRmIChwYWdlK2xlbiwgIlZNJTAyZCBDUFVzIFN0YW5kYnk6ICAgICVkXG4iLAotCQkJCQlpLCBpbmZvLT5zeXNpbmZvXzNfMl8yLnZtW2ldLmNwdXNfc3RhbmRieSk7Ci0JCQlsZW4gKz0gc3ByaW50ZiAocGFnZStsZW4sICJWTSUwMmQgQ1BVcyBSZXNlcnZlZDogICAlZFxuIiwKLQkJCQkJaSwgaW5mby0+c3lzaW5mb18zXzJfMi52bVtpXS5jcHVzX3Jlc2VydmVkKTsKLQkJfQotCX0KLQotCWZyZWVfcGFnZSAoaW5mb19wYWdlKTsKKwlmcmVlX3BhZ2UgKGluZm8pOwogICAgICAgICByZXR1cm4gbGVuOwogfQogCiBzdGF0aWMgX19pbml0IGludCBjcmVhdGVfcHJvY19zeXNpbmZvKHZvaWQpCiB7Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSAoInN5c2luZm8iLCAwNDQ0LCBOVUxMLCAKLQkJCQlwcm9jX3JlYWRfc3lzaW5mbywgTlVMTCk7CisJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgic3lzaW5mbyIsIDA0NDQsIE5VTEwsCisJCQkgICAgICAgcHJvY19yZWFkX3N5c2luZm8sIE5VTEwpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jIGIvZHJpdmVycy9zYnVzL2NoYXIvb3BlbnByb20uYwppbmRleCAyOTNiYjJmLi4yZjY5ODc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NidXMvY2hhci9vcGVucHJvbS5jCisrKyBiL2RyaXZlcnMvc2J1cy9jaGFyL29wZW5wcm9tLmMKQEAgLTE0NSw4ICsxNDUsOSBAQAogCXZvaWQgKnB2YWw7CiAJaW50IGxlbjsKIAotCXB2YWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsIG9wLT5vcHJvbV9hcnJheSwgJmxlbik7Ci0JaWYgKCFwdmFsIHx8IGxlbiA8PSAwIHx8IGxlbiA+IGJ1ZnNpemUpCisJaWYgKCFkcCB8fAorCSAgICAhKHB2YWwgPSBvZl9nZXRfcHJvcGVydHkoZHAsIG9wLT5vcHJvbV9hcnJheSwgJmxlbikpIHx8CisJICAgIGxlbiA8PSAwIHx8IGxlbiA+IGJ1ZnNpemUpCiAJCXJldHVybiBjb3B5b3V0KGFyZ3AsIG9wLCBzaXplb2YoaW50KSk7CiAKIAltZW1jcHkob3AtPm9wcm9tX2FycmF5LCBwdmFsLCBsZW4pOwpAQCAtMTYxLDYgKzE2Miw4IEBACiAJc3RydWN0IHByb3BlcnR5ICpwcm9wOwogCWludCBsZW47CiAKKwlpZiAoIWRwKQorCQlyZXR1cm4gY29weW91dChhcmdwLCBvcCwgc2l6ZW9mKGludCkpOwogCWlmIChvcC0+b3Byb21fYXJyYXlbMF0gPT0gJ1wwJykgewogCQlwcm9wID0gZHAtPnByb3BlcnRpZXM7CiAJCWlmICghcHJvcCkKQEAgLTI2Niw5ICsyNjksMTMgQEAKIAogc3RhdGljIGludCBvcHJvbXBhdGgybm9kZSh2b2lkIF9fdXNlciAqYXJncCwgc3RydWN0IGRldmljZV9ub2RlICpkcCwgc3RydWN0IG9wZW5wcm9taW8gKm9wLCBpbnQgYnVmc2l6ZSwgREFUQSAqZGF0YSkKIHsKKwlwaGFuZGxlIHBoID0gMDsKKwogCWRwID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgob3AtPm9wcm9tX2FycmF5KTsKKwlpZiAoZHApCisJCXBoID0gZHAtPm5vZGU7CiAJZGF0YS0+Y3VycmVudF9ub2RlID0gZHA7Ci0JKigoaW50ICopb3AtPm9wcm9tX2FycmF5KSA9IGRwLT5ub2RlOworCSooKGludCAqKW9wLT5vcHJvbV9hcnJheSkgPSBwaDsKIAlvcC0+b3Byb21fc2l6ZSA9IHNpemVvZihpbnQpOwogCiAJcmV0dXJuIGNvcHlvdXQoYXJncCwgb3AsIGJ1ZnNpemUgKyBzaXplb2YoaW50KSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWhjaS5jIGIvZHJpdmVycy9zY3NpL2FoY2kuYwppbmRleCA3N2U3MjAyYS4uOTA0YzI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FoY2kuYworKysgYi9kcml2ZXJzL3Njc2kvYWhjaS5jCkBAIC05NDAsMTQgKzk0MCw4IEBACiAJCXJldHVybjsKIAogCS8qIGlnbm9yZSBpbnRlcmltIFBJTyBzZXR1cCBmaXMgaW50ZXJydXB0cyAqLwotCWlmIChhdGFfdGFnX3ZhbGlkKGFwLT5hY3RpdmVfdGFnKSkgewotCQlzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjID0KLQkJCWF0YV9xY19mcm9tX3RhZyhhcCwgYXAtPmFjdGl2ZV90YWcpOwotCi0JCWlmIChxYyAmJiBxYy0+dGYucHJvdG9jb2wgPT0gQVRBX1BST1RfUElPICYmCi0JCSAgICAoc3RhdHVzICYgUE9SVF9JUlFfUElPU19GSVMpKQotCQkJcmV0dXJuOwotCX0KKwlpZiAoYXRhX3RhZ192YWxpZChhcC0+YWN0aXZlX3RhZykgJiYgKHN0YXR1cyAmIFBPUlRfSVJRX1BJT1NfRklTKSkgCisJCXJldHVybjsKIAogCWlmIChhdGFfcmF0ZWxpbWl0KCkpCiAJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9JTkZPLCAic3B1cmlvdXMgaW50ZXJydXB0ICIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9NYWtlZmlsZSBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpY2FzbS9NYWtlZmlsZQppbmRleCA4YzkxZmRhLi5iOThjNWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWNhc20vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljYXNtL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw4IEBACiBjbGVhbi1maWxlczo9ICR7R0VOU1JDU30gJHtHRU5IRFJTfSAkKFlTUkNTOi55PS5vdXRwdXQpICQoUFJPRykKICMgT3ZlcnJpZGUgZGVmYXVsdCBrZXJuZWwgQ0ZMQUdTLiAgVGhpcyBpcyBhIHVzZXJsYW5kIGFwcC4KIEFJQ0FTTV9DRkxBR1M6PSAtSS91c3IvaW5jbHVkZSAtSS4KK0xFWD0gZmxleAorWUFDQz0gYmlzb24KIFlGTEFHUz0gLWQKIAogTk9NQU49CW5vbWFuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL0tjb25maWcgYi9kcml2ZXJzL3Njc2kvYXJtL0tjb25maWcKaW5kZXggMDZkNzYwMS4uZDAwNmE4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FybS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vS2NvbmZpZwpAQCAtNjksNiArNjksNyBAQAogY29uZmlnIFNDU0lfQ1VNQU5BXzEKIAl0cmlzdGF0ZSAiQ3VtYW5hU0NTSSBJIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBBUkNIX0FDT1JOICYmIEVYUEVSSU1FTlRBTCAmJiBTQ1NJCisJc2VsZWN0IFNDU0lfU1BJX0FUVFJTCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBDdW1hbmEgU0NTSSBJIGNhcmQuIElmIHlvdSBoYXZlIGFuCiAJICBBY29ybiBzeXN0ZW0gd2l0aCBvbmUgb2YgdGhlc2UsIHNheSBZLiBJZiB1bnN1cmUsIHNheSBOLgpAQCAtNzYsNiArNzcsNyBAQAogY29uZmlnIFNDU0lfRUNPU0NTSQogCXRyaXN0YXRlICJFY29TY3NpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBBUkNIX0FDT1JOICYmIEVYUEVSSU1FTlRBTCAmJiAoQVJDSF9BUkMgfHwgQVJDSF9BNUspICYmIFNDU0kKKwlzZWxlY3QgU0NTSV9TUElfQVRUUlMKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEVjb1NDU0kgY2FyZCAtLSBhIHNtYWxsIGNhcmQgdGhhdCBzaXRzCiAJICBpbiB0aGUgRWNvbmV0IHNvY2tldC4gSWYgeW91IGhhdmUgYW4gQWNvcm4gc3lzdGVtIHdpdGggb25lIG9mIHRoZXNlLApAQCAtODQsNiArODYsNyBAQAogY29uZmlnIFNDU0lfT0FLMQogCXRyaXN0YXRlICJPYWsgU0NTSSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQVJDSF9BQ09STiAmJiBFWFBFUklNRU5UQUwgJiYgU0NTSQorCXNlbGVjdCBTQ1NJX1NQSV9BVFRSUwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgT2FrIFNDU0kgY2FyZC4gSWYgeW91IGhhdmUgYW4gQWNvcm4KIAkgIHN5c3RlbSB3aXRoIG9uZSBvZiB0aGVzZSwgc2F5IFkuIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXJtL3Njc2kuaCBiL2RyaXZlcnMvc2NzaS9hcm0vc2NzaS5oCmluZGV4IDZkZDU0NGEuLjhjMjYwMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hcm0vc2NzaS5oCisrKyBiL2RyaXZlcnMvc2NzaS9hcm0vc2NzaS5oCkBAIC03NCw3ICs3NCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgbGVuID0gMDsKIAkJaW50IGJ1ZjsKIAotCQlTQ3BudC0+U0NwLmJ1ZmZlciA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKikgU0NwbnQtPmJ1ZmZlcjsKKwkJU0NwbnQtPlNDcC5idWZmZXIgPSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIFNDcG50LT5yZXF1ZXN0X2J1ZmZlcjsKIAkJU0NwbnQtPlNDcC5idWZmZXJzX3Jlc2lkdWFsID0gU0NwbnQtPnVzZV9zZyAtIDE7CiAJCVNDcG50LT5TQ3AucHRyID0gKGNoYXIgKikKIAkJCSAocGFnZV9hZGRyZXNzKFNDcG50LT5TQ3AuYnVmZmVyLT5wYWdlKSArCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYXRhX3BpaXguYyBiL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCmluZGV4IDE5NzQ1YTMuLmE5YmIzY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCisrKyBiL2RyaXZlcnMvc2NzaS9hdGFfcGlpeC5jCkBAIC0xMjMsNyArMTIzLDggQEAKIAlpY2g2X3NhdGEJCT0gNCwKIAlpY2g2X3NhdGFfYWhjaQkJPSA1LAogCWljaDZtX3NhdGFfYWhjaQkJPSA2LAotCWljaDhfc2F0YV9haGNpCQk9IDcsCisJaWNoN21fc2F0YV9haGNpCQk9IDcsCisJaWNoOF9zYXRhX2FoY2kJCT0gOCwKIAogCS8qIGNvbnN0YW50cyBmb3IgbWFwcGluZyB0YWJsZSAqLwogCVAwCQkJPSAwLCAgLyogcG9ydCAwICovCkBAIC0xODgsNyArMTg5LDcgQEAKIAkvKiA4MjgwMUdCL0dSL0dIIChJQ0g3LCBpZGVudGljYWwgdG8gSUNINikgKi8KIAl7IDB4ODA4NiwgMHgyN2MwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAogCS8qIDI4MDFHQk0vR0hNIChJQ0g3TSwgaWRlbnRpY2FsIHRvIElDSDZNKSAqLwotCXsgMHg4MDg2LCAweDI3YzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDZtX3NhdGFfYWhjaSB9LAorCXsgMHg4MDg2LCAweDI3YzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGljaDdtX3NhdGFfYWhjaSB9LAogCS8qIEVudGVycHJpc2UgU291dGhicmlkZ2UgMiAod2hlcmUncyB0aGUgZGF0YXNoZWV0PykgKi8KIAl7IDB4ODA4NiwgMHgyNjgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBpY2g2X3NhdGFfYWhjaSB9LAogCS8qIFNBVEEgQ29udHJvbGxlciAxIElERSAoSUNIOCwgbm8gZGF0YXNoZWV0IHlldCkgKi8KQEAgLTMzNiw2ICszMzcsMjQgQEAKIAl9LAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBwaWl4X21hcF9kYiBpY2g3bV9tYXBfZGIgPSB7CisJLm1hc2sgPSAweDMsCisJLnBvcnRfZW5hYmxlID0gMHg1LAorCS5wcmVzZW50X3NoaWZ0ID0gNCwKKworCS8qIE1hcCAwMWIgaXNuJ3Qgc3BlY2lmaWVkIGluIHRoZSBkb2MgYnV0IHNvbWUgbm90ZWJvb2tzIHVzZQorCSAqIGl0IGFueXdheS4gIEFUTSwgdGhlIG9ubHkgY2FzZSBzcG90dGVkIGNhcnJpZXMgc3Vic3lzdGVtIElECisJICogMTAyNTowMTA3LiAgVGhpcyBpcyB0aGUgb25seSBkaWZmZXJlbmNlIGZyb20gaWNoNm0uCisJICovCisJLm1hcCA9IHsKKwkJLyogUE0gICBQUyAgIFNNICAgU1MgICAgICAgTUFQICovCisJCXsgIFAwLCAgUDIsICBSViwgIFJWIH0sIC8qIDAwYiAqLworCQl7IElERSwgSURFLCAgUDEsICBQMyB9LCAvKiAwMWIgKi8KKwkJeyAgUDAsICBQMiwgSURFLCBJREUgfSwgLyogMTBiICovCisJCXsgIFJWLCAgUlYsICBSViwgIFJWIH0sCisJfSwKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlpeF9tYXBfZGIgaWNoOF9tYXBfZGIgPSB7CiAJLm1hc2sgPSAweDMsCiAJLnBvcnRfZW5hYmxlID0gMHgzLApAQCAtMzU1LDYgKzM3NCw3IEBACiAJW2ljaDZfc2F0YV0JCT0gJmljaDZfbWFwX2RiLAogCVtpY2g2X3NhdGFfYWhjaV0JPSAmaWNoNl9tYXBfZGIsCiAJW2ljaDZtX3NhdGFfYWhjaV0JPSAmaWNoNm1fbWFwX2RiLAorCVtpY2g3bV9zYXRhX2FoY2ldCT0gJmljaDdtX21hcF9kYiwKIAlbaWNoOF9zYXRhX2FoY2ldCT0gJmljaDhfbWFwX2RiLAogfTsKIApAQCAtMzkwLDcgKzQxMCw4IEBACiAJLyogaWNoNV9zYXRhICovCiAJewogCQkuc2h0CQk9ICZwaWl4X3NodCwKLQkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgUElJWF9GTEFHX0NIRUNLSU5UUiwKKwkJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgUElJWF9GTEFHX0NIRUNLSU5UUiB8CisJCQkJICBQSUlYX0ZMQUdfSUdOT1JFX1BDUywKIAkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCiAJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KIAkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KQEAgLTQ0Myw2ICs0NjQsMTggQEAKIAkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCiAJfSwKIAorCS8qIGljaDdtX3NhdGFfYWhjaSAqLworCXsKKwkJLnNodAkJPSAmcGlpeF9zaHQsCisJCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8CisJCQkJICBQSUlYX0ZMQUdfQ0hFQ0tJTlRSIHwgUElJWF9GTEFHX1NDUiB8CisJCQkJICBQSUlYX0ZMQUdfQUhDSSwKKwkJLnBpb19tYXNrCT0gMHgxZiwJLyogcGlvMC00ICovCisJCS5td2RtYV9tYXNrCT0gMHgwNywgLyogbXdkbWEwLTIgKi8KKwkJLnVkbWFfbWFzawk9IDB4N2YsCS8qIHVkbWEwLTYgKi8KKwkJLnBvcnRfb3BzCT0gJnBpaXhfc2F0YV9vcHMsCisJfSwKKwogCS8qIGljaDhfc2F0YV9haGNpICovCiAJewogCQkuc2h0CQk9ICZwaWl4X3NodCwKQEAgLTQ2Nyw2ICs1MDAsMTEgQEAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwaWl4X3BjaV90YmwpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCitzdGF0aWMgaW50IGZvcmNlX3BjcyA9IDA7Cittb2R1bGVfcGFyYW0oZm9yY2VfcGNzLCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmb3JjZV9wY3MsICJmb3JjZSBob25vcmluZyBvciBpZ25vcmluZyBQQ1MgdG8gd29yayBhcm91bmQgIgorCQkgImRldmljZSBtaXMtZGV0ZWN0aW9uICgwPWRlZmF1bHQsIDE9aWdub3JlIFBDUywgMj1ob25vciBQQ1MpIik7CisKIC8qKgogICoJcGlpeF9wYXRhX2NibF9kZXRlY3QgLSBQcm9iZSBob3N0IGNvbnRyb2xsZXIgY2FibGUgZGV0ZWN0IGluZm8KICAqCUBhcDogUG9ydCBmb3Igd2hpY2ggY2FibGUgZGV0ZWN0IGluZm8gaXMgZGVzaXJlZApAQCAtNTMxLDI3ICs1NjksMjUgQEAKIH0KIAogLyoqCi0gKglwaWl4X3NhdGFfcHJlcmVzZXQgLSBwcmVyZXNldCBmb3IgU0FUQSBob3N0IGNvbnRyb2xsZXIKKyAqCXBpaXhfc2F0YV9wcmVzZW50X21hc2sgLSBkZXRlcm1pbmUgcHJlc2VudCBtYXNrIGZvciBTQVRBIGhvc3QgY29udHJvbGxlcgogICoJQGFwOiBUYXJnZXQgcG9ydAogICoKLSAqCVJlYWRzIGFuZCBjb25maWd1cmVzIFNBVEEgUENJIGRldmljZSdzIFBDSSBjb25maWcgcmVnaXN0ZXIKLSAqCVBvcnQgQ29uZmlndXJhdGlvbiBhbmQgU3RhdHVzIChQQ1MpIHRvIGRldGVybWluZSBwb3J0IGFuZAotICoJZGV2aWNlIGF2YWlsYWJpbGl0eS4gIFJldHVybiAtRU5PREVWIHRvIHNraXAgcmVzZXQgaWYgbm8KLSAqCWRldmljZSBpcyBwcmVzZW50LgorICoJUmVhZHMgU0FUQSBQQ0kgZGV2aWNlJ3MgUENJIGNvbmZpZyByZWdpc3RlciBQb3J0IENvbmZpZ3VyYXRpb24KKyAqCWFuZCBTdGF0dXMgKFBDUykgdG8gZGV0ZXJtaW5lIHBvcnQgYW5kIGRldmljZSBhdmFpbGFiaWxpdHkuCiAgKgogICoJTE9DS0lORzoKICAqCU5vbmUgKGluaGVyaXRlZCBmcm9tIGNhbGxlcikuCiAgKgogICoJUkVUVVJOUzoKLSAqCTAgaWYgZGV2aWNlIGlzIHByZXNlbnQsIC1FTk9ERVYgb3RoZXJ3aXNlLgorICoJZGV0ZXJtaW5lZCBwcmVzZW50X21hc2sKICAqLwotc3RhdGljIGludCBwaWl4X3NhdGFfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGlpeF9zYXRhX3ByZXNlbnRfbWFzayhzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdF9zZXQtPmRldik7CiAJc3RydWN0IHBpaXhfaG9zdF9wcml2ICpocHJpdiA9IGFwLT5ob3N0X3NldC0+cHJpdmF0ZV9kYXRhOwogCWNvbnN0IHVuc2lnbmVkIGludCAqbWFwID0gaHByaXYtPm1hcDsKIAlpbnQgYmFzZSA9IDIgKiBhcC0+aGFyZF9wb3J0X25vOwotCXVuc2lnbmVkIGludCBwcmVzZW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgcHJlc2VudF9tYXNrID0gMDsKIAlpbnQgcG9ydCwgaTsKIAl1MTYgcGNzOwogCkBAIC01NjQsMjQgKzYwMCw1MiBAQAogCQkJY29udGludWU7CiAJCWlmICgoYXAtPmZsYWdzICYgUElJWF9GTEFHX0lHTk9SRV9QQ1MpIHx8CiAJCSAgICAocGNzICYgMSA8PCAoaHByaXYtPm1hcF9kYi0+cHJlc2VudF9zaGlmdCArIHBvcnQpKSkKLQkJCXByZXNlbnQgPSAxOworCQkJcHJlc2VudF9tYXNrIHw9IDEgPDwgaTsKIAl9CiAKIAlEUFJJTlRLKCJhdGEldTogTEVBVkUsIHBjcz0weCV4IHByZXNlbnRfbWFzaz0weCV4XG4iLAogCQlhcC0+aWQsIHBjcywgcHJlc2VudF9tYXNrKTsKIAotCWlmICghcHJlc2VudCkgewotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgIlNBVEEgcG9ydCBoYXMgbm8gZGV2aWNlLlxuIik7Ci0JCWFwLT5laF9jb250ZXh0LmkuYWN0aW9uICY9IH5BVEFfRUhfUkVTRVRfTUFTSzsKLQkJcmV0dXJuIDA7CisJcmV0dXJuIHByZXNlbnRfbWFzazsKK30KKworLyoqCisgKglwaWl4X3NhdGFfc29mdHJlc2V0IC0gcmVzZXQgU0FUQSBob3N0IHBvcnQgdmlhIEFUQSBTUlNUCisgKglAYXA6IHBvcnQgdG8gcmVzZXQKKyAqCUBjbGFzc2VzOiByZXN1bHRpbmcgY2xhc3NlcyBvZiBhdHRhY2hlZCBkZXZpY2VzCisgKgorICoJUmVzZXQgU0FUQSBob3N0IHBvcnQgdmlhIEFUQSBTUlNULiAgT24gY29udHJvbGxlcnMgd2l0aAorICoJcmVsaWFibGUgUENTIHByZXNlbnQgYml0cywgdGhlIGJpdHMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5lCisgKglkZXZpY2UgcHJlc2VuY2UuCisgKgorICoJTE9DS0lORzoKKyAqCUtlcm5lbCB0aHJlYWQgY29udGV4dCAobWF5IHNsZWVwKQorICoKKyAqCVJFVFVSTlM6CisgKgkwIG9uIHN1Y2Nlc3MsIC1lcnJubyBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgcGlpeF9zYXRhX3NvZnRyZXNldChzdHJ1Y3QgYXRhX3BvcnQgKmFwLCB1bnNpZ25lZCBpbnQgKmNsYXNzZXMpCit7CisJdW5zaWduZWQgaW50IHByZXNlbnRfbWFzazsKKwlpbnQgaSwgcmM7CisKKwlwcmVzZW50X21hc2sgPSBwaWl4X3NhdGFfcHJlc2VudF9tYXNrKGFwKTsKKworCXJjID0gYXRhX3N0ZF9zb2Z0cmVzZXQoYXAsIGNsYXNzZXMpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZm9yIChpID0gMDsgaSA8IEFUQV9NQVhfREVWSUNFUzsgaSsrKSB7CisJCWlmICghKHByZXNlbnRfbWFzayAmICgxIDw8IGkpKSkKKwkJCWNsYXNzZXNbaV0gPSBBVEFfREVWX05PTkU7CiAJfQogCi0JcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwaWl4X3NhdGFfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewotCWF0YV9ibWRtYV9kcml2ZV9laChhcCwgcGlpeF9zYXRhX3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwKKwlhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIGF0YV9zdGRfcHJlcmVzZXQsIHBpaXhfc2F0YV9zb2Z0cmVzZXQsIE5VTEwsCiAJCQkgICBhdGFfc3RkX3Bvc3RyZXNldCk7CiB9CiAKQEAgLTc4NSw2ICs4NDksNyBAQAogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcGlpeF9pbml0X3BjcyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICAgc3RydWN0IGF0YV9wb3J0X2luZm8gKnBpbmZvLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgcGlpeF9tYXBfZGIgKm1hcF9kYikKIHsKIAl1MTYgcGNzLCBuZXdfcGNzOwpAQCAtNzk4LDYgKzg2MywxOCBAQAogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgSUNINV9QQ1MsIG5ld19wY3MpOwogCQltc2xlZXAoMTUwKTsKIAl9CisKKwlpZiAoZm9yY2VfcGNzID09IDEpIHsKKwkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsCisJCQkgICAiZm9yY2UgaWdub3JpbmcgUENTICgweCV4KVxuIiwgbmV3X3Bjcyk7CisJCXBpbmZvWzBdLmhvc3RfZmxhZ3MgfD0gUElJWF9GTEFHX0lHTk9SRV9QQ1M7CisJCXBpbmZvWzFdLmhvc3RfZmxhZ3MgfD0gUElJWF9GTEFHX0lHTk9SRV9QQ1M7CisJfSBlbHNlIGlmIChmb3JjZV9wY3MgPT0gMikgeworCQlkZXZfcHJpbnRrKEtFUk5fSU5GTywgJnBkZXYtPmRldiwKKwkJCSAgICJmb3JjZSBob25vcmluZyBQQ1MgKDB4JXgpXG4iLCBuZXdfcGNzKTsKKwkJcGluZm9bMF0uaG9zdF9mbGFncyAmPSB+UElJWF9GTEFHX0lHTk9SRV9QQ1M7CisJCXBpbmZvWzFdLmhvc3RfZmxhZ3MgJj0gflBJSVhfRkxBR19JR05PUkVfUENTOworCX0KIH0KIAogc3RhdGljIHZvaWQgX19kZXZpbml0IHBpaXhfaW5pdF9zYXRhX21hcChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTgyOCw2ICs5MDUsNyBAQAogCQljYXNlIElERToKIAkJCVdBUk5fT04oKGkgJiAxKSB8fCBtYXBbaSArIDFdICE9IElERSk7CiAJCQlwaW5mb1tpIC8gMl0gPSBwaWl4X3BvcnRfaW5mb1tpY2g1X3BhdGFdOworCQkJcGluZm9baSAvIDJdLnByaXZhdGVfZGF0YSA9IGhwcml2OwogCQkJaSsrOwogCQkJcHJpbnRrKCIgSURFIElERSIpOwogCQkJYnJlYWs7CkBAIC05MDUsNyArOTgzLDggQEAKIAlpZiAoaG9zdF9mbGFncyAmIEFUQV9GTEFHX1NBVEEpIHsKIAkJcGlpeF9pbml0X3NhdGFfbWFwKHBkZXYsIHBvcnRfaW5mbywKIAkJCQkgICBwaWl4X21hcF9kYl90YWJsZVtlbnQtPmRyaXZlcl9kYXRhXSk7Ci0JCXBpaXhfaW5pdF9wY3MocGRldiwgcGlpeF9tYXBfZGJfdGFibGVbZW50LT5kcml2ZXJfZGF0YV0pOworCQlwaWl4X2luaXRfcGNzKHBkZXYsIHBvcnRfaW5mbywKKwkJCSAgICAgIHBpaXhfbWFwX2RiX3RhYmxlW2VudC0+ZHJpdmVyX2RhdGFdKTsKIAl9CiAKIAkvKiBPbiBJQ0g1LCBzb21lIEJJT1NlbiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgdXNpbmcgdGhlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvZXNwLmMgYi9kcml2ZXJzL3Njc2kvZXNwLmMKaW5kZXggOThiZDIyNy4uNTYzMDg2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2VzcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9lc3AuYwpAQCAtMTE0Niw3ICsxMTQ2LDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IGVzcF9zdW40X3Byb2JlKHN0cnVjdCBzY3NpX2hvc3RfdGVtcGxhdGUgKnRwbnQpCiB7CiAJaWYgKHN1bjRfZXNwX3BoeXNhZGRyKSB7Ci0JCW1lbXNldCgmc3VuNF9lc3BfZGV2LCAwLCBzaXplb2YoZXNwX2RldikpOworCQltZW1zZXQoJnN1bjRfZXNwX2RldiwgMCwgc2l6ZW9mKHN1bjRfZXNwX2RldikpOwogCQlzdW40X2VzcF9kZXYucmVnX2FkZHJzWzBdLnBoeXNfYWRkciA9IHN1bjRfZXNwX3BoeXNhZGRyOwogCQlzdW40X2VzcF9kZXYuaXJxc1swXSA9IDQ7CiAJCXN1bjRfZXNwX2Rldi5yZXNvdXJjZVswXS5zdGFydCA9IHN1bjRfZXNwX3BoeXNhZGRyOwpAQCAtMTE2Miw2ICsxMTYyLDcgQEAKIAogc3RhdGljIGludCBfX2RldmV4aXQgZXNwX3N1bjRfcmVtb3ZlKHZvaWQpCiB7CisJc3RydWN0IG9mX2RldmljZSAqZGV2ID0gJnN1bjRfZXNwX2Rldi5vZmRldjsKIAlzdHJ1Y3QgZXNwICplc3AgPSBkZXZfZ2V0X2RydmRhdGEoJmRldi0+ZGV2KTsKIAogCXJldHVybiBlc3BfcmVtb3ZlX2NvbW1vbihlc3ApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2hwdGlvcC5jIGIvZHJpdmVycy9zY3NpL2hwdGlvcC5jCmluZGV4IGFiMmY4YjIuLmJjYjM0NDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9ocHRpb3AuYworKysgYi9kcml2ZXJzL3Njc2kvaHB0aW9wLmMKQEAgLTQ1LDEwICs0NSw2IEBACiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZV9sb25nW10gPSAiUm9ja2V0UkFJRCAzeHh4IFNBVEEgQ29udHJvbGxlciBkcml2ZXIiOwogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX3ZlcltdID0gInYxLjAgKDA2MDQyNikiOwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhwdGlvcF9oYmFfbGlzdF9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoaHB0aW9wX2hiYV9saXN0KTsKLXN0YXRpYyBpbnQgaHB0aW9wX2NkZXZfbWFqb3IgPSAtMTsKLQogc3RhdGljIHZvaWQgaHB0aW9wX2hvc3RfcmVxdWVzdF9jYWxsYmFjayhzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLCB1MzIgdGFnKTsKIHN0YXRpYyB2b2lkIGhwdGlvcF9pb3BfcmVxdWVzdF9jYWxsYmFjayhzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLCB1MzIgdGFnKTsKIHN0YXRpYyB2b2lkIGhwdGlvcF9tZXNzYWdlX2NhbGxiYWNrKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIHUzMiBtc2cpOwpAQCAtNTc3LDcgKzU3Myw3IEBACiAJaWYgKGF0b21pY194Y2hnKCZoYmEtPnJlc2V0dGluZywgMSkgPT0gMCkgewogCQlhdG9taWNfaW5jKCZoYmEtPnJlc2V0X2NvdW50KTsKIAkJd3JpdGVsKElPUE1VX0lOQk9VTkRfTVNHMF9SRVNFVCwKLQkJCQkmaGJhLT5pb3AtPm91dGJvdW5kX21zZ2FkZHIwKTsKKwkJCQkmaGJhLT5pb3AtPmluYm91bmRfbXNnYWRkcjApOwogCQlocHRpb3BfcGNpX3Bvc3RpbmdfZmx1c2goaGJhLT5pb3ApOwogCX0KIApAQCAtNjIwLDUzMiArNjE2LDExIEBACiAJcmV0dXJuIHF1ZXVlX2RlcHRoOwogfQogCi1zdHJ1Y3QgaHB0aW9wX2dldGluZm8gewotCWNoYXIgX191c2VyICpidWZmZXI7Ci0JbG9mZl90IGJ1Zmxlbmd0aDsKLQlsb2ZmX3QgYnVmb2Zmc2V0OwotCWxvZmZfdCBidWZmaWxsZW47Ci0JbG9mZl90IGZpbHBvczsKLX07Ci0KLXN0YXRpYyB2b2lkIGhwdGlvcF9jb3B5X21lbV9pbmZvKHN0cnVjdCBocHRpb3BfZ2V0aW5mbyAqcGluZm8sCi0JCQkJCWNoYXIgKmRhdGEsIGludCBkYXRhbGVuKQotewotCWlmIChwaW5mby0+ZmlscG9zIDwgcGluZm8tPmJ1Zm9mZnNldCkgewotCQlpZiAocGluZm8tPmZpbHBvcyArIGRhdGFsZW4gPD0gcGluZm8tPmJ1Zm9mZnNldCkgewotCQkJcGluZm8tPmZpbHBvcyArPSBkYXRhbGVuOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgewotCQkJZGF0YSArPSAocGluZm8tPmJ1Zm9mZnNldCAtIHBpbmZvLT5maWxwb3MpOwotCQkJZGF0YWxlbiAgLT0gKHBpbmZvLT5idWZvZmZzZXQgLSBwaW5mby0+ZmlscG9zKTsKLQkJCXBpbmZvLT5maWxwb3MgPSBwaW5mby0+YnVmb2Zmc2V0OwotCQl9Ci0JfQotCi0JcGluZm8tPmZpbHBvcyArPSBkYXRhbGVuOwotCWlmIChwaW5mby0+YnVmZmlsbGVuID09IHBpbmZvLT5idWZsZW5ndGgpCi0JCXJldHVybjsKLQotCWlmIChwaW5mby0+YnVmbGVuZ3RoIC0gcGluZm8tPmJ1ZmZpbGxlbiA8IGRhdGFsZW4pCi0JCWRhdGFsZW4gPSBwaW5mby0+YnVmbGVuZ3RoIC0gcGluZm8tPmJ1ZmZpbGxlbjsKLQotCWlmIChjb3B5X3RvX3VzZXIocGluZm8tPmJ1ZmZlciArIHBpbmZvLT5idWZmaWxsZW4sIGRhdGEsIGRhdGFsZW4pKQotCQlyZXR1cm47Ci0KLQlwaW5mby0+YnVmZmlsbGVuICs9IGRhdGFsZW47Ci19Ci0KLXN0YXRpYyBpbnQgaHB0aW9wX2NvcHlfaW5mbyhzdHJ1Y3QgaHB0aW9wX2dldGluZm8gKnBpbmZvLCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7Ci0JY2hhciBidWZbMTI4XTsKLQlpbnQgbGVuOwotCi0JdmFfc3RhcnQoYXJncywgZm10KTsKLQlsZW4gPSB2c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm10LCBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci0JaHB0aW9wX2NvcHlfbWVtX2luZm8ocGluZm8sIGJ1ZiwgbGVuKTsKLQlyZXR1cm4gbGVuOwotfQotCi1zdGF0aWMgdm9pZCBocHRpb3BfaW9jdGxfZG9uZShzdHJ1Y3QgaHB0X2lvY3RsX2sgKmFyZykKLXsKLQlhcmctPmRvbmUgPSBOVUxMOwotCXdha2VfdXAoJmFyZy0+aGJhLT5pb2N0bF93cSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGhwdGlvcF9kb19pb2N0bChzdHJ1Y3QgaHB0X2lvY3RsX2sgKmFyZykKLXsKLQlzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhID0gYXJnLT5oYmE7Ci0JdTMyIHZhbDsKLQlzdHJ1Y3QgaHB0X2lvcF9yZXF1ZXN0X2lvY3RsX2NvbW1hbmQgX19pb21lbSAqcmVxOwotCWludCBpb2N0bF9yZXRyeSA9IDA7Ci0KLQlkcHJpbnRrKCJzY3NpJWQ6IGhwdGlvcF9kb19pb2N0bFxuIiwgaGJhLT5ob3N0LT5ob3N0X25vKTsKLQotCS8qCi0JICogY2hlY2sgKGluICsgb3V0KSBidWZmIHNpemUgZnJvbSBhcHBsaWNhdGlvbi4KLQkgKiBvdXRidWYgbXVzdCBiZSBkd29yZCBhbGlnbmVkLgotCSAqLwotCWlmICgoKGFyZy0+aW5idWZfc2l6ZSArIDMpICYgfjMpICsgYXJnLT5vdXRidWZfc2l6ZSA+Ci0JCQloYmEtPm1heF9yZXF1ZXN0X3NpemUKLQkJCQktIHNpemVvZihzdHJ1Y3QgaHB0X2lvcF9yZXF1ZXN0X2hlYWRlcikKLQkJCQktIDQgKiBzaXplb2YodTMyKSkgewotCQlkcHJpbnRrKCJzY3NpJWQ6IGlvY3RsIGJ1ZiBzaXplICglZC8lZCkgaXMgdG9vIGxhcmdlXG4iLAotCQkJCWhiYS0+aG9zdC0+aG9zdF9ubywKLQkJCQlhcmctPmluYnVmX3NpemUsIGFyZy0+b3V0YnVmX3NpemUpOwotCQlhcmctPnJlc3VsdCA9IEhQVF9JT0NUTF9SRVNVTFRfRkFJTEVEOwotCQlyZXR1cm47Ci0JfQotCi1yZXRyeToKLQlzcGluX2xvY2tfaXJxKGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKLQotCXZhbCA9IHJlYWRsKCZoYmEtPmlvcC0+aW5ib3VuZF9xdWV1ZSk7Ci0JaWYgKHZhbCA9PSBJT1BNVV9RVUVVRV9FTVBUWSkgewotCQlzcGluX3VubG9ja19pcnEoaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCQlkcHJpbnRrKCJzY3NpJWQ6IG5vIGZyZWUgcmVxIGZvciBpb2N0bFxuIiwgaGJhLT5ob3N0LT5ob3N0X25vKTsKLQkJYXJnLT5yZXN1bHQgPSAtMTsKLQkJcmV0dXJuOwotCX0KLQotCXJlcSA9IChzdHJ1Y3QgaHB0X2lvcF9yZXF1ZXN0X2lvY3RsX2NvbW1hbmQgX19pb21lbSAqKQotCQkJKCh1bnNpZ25lZCBsb25nKWhiYS0+aW9wICsgdmFsKTsKLQotCXdyaXRlbChIUFRfQ1RMX0NPREVfTElOVVhfVE9fSU9QKGFyZy0+aW9jdGxfY29kZSksCi0JCQkmcmVxLT5pb2N0bF9jb2RlKTsKLQl3cml0ZWwoYXJnLT5pbmJ1Zl9zaXplLCAmcmVxLT5pbmJ1Zl9zaXplKTsKLQl3cml0ZWwoYXJnLT5vdXRidWZfc2l6ZSwgJnJlcS0+b3V0YnVmX3NpemUpOwotCi0JLyoKLQkgKiB1c2UgdGhlIGJ1ZmZlciBvbiB0aGUgSU9QIGxvY2FsIG1lbW9yeSBmaXJzdCwgdGhlbiBjb3B5IGl0Ci0JICogYmFjayB0byBob3N0LgotCSAqIHRoZSBjYWxsZXIncyByZXF1ZXN0IGJ1ZmZlciBzaG91ZGwgYmUgbGl0dGxlLWVuZGlhbi4KLQkgKi8KLQlpZiAoYXJnLT5pbmJ1Zl9zaXplKQotCQltZW1jcHlfdG9pbyhyZXEtPmJ1ZiwgYXJnLT5pbmJ1ZiwgYXJnLT5pbmJ1Zl9zaXplKTsKLQotCS8qIGNvcnJlY3QgdGhlIGNvbnRyb2xsZXIgSUQgZm9yIElPUCAqLwotCWlmICgoYXJnLT5pb2N0bF9jb2RlID09IEhQVF9JT0NUTF9HRVRfQ0hBTk5FTF9JTkZPIHx8Ci0JCWFyZy0+aW9jdGxfY29kZSA9PSBIUFRfSU9DVExfR0VUX0NPTlRST0xMRVJfSU5GT19WMiB8fAotCQlhcmctPmlvY3RsX2NvZGUgPT0gSFBUX0lPQ1RMX0dFVF9DT05UUk9MTEVSX0lORk8pCi0JCSYmIGFyZy0+aW5idWZfc2l6ZSA+PSBzaXplb2YodTMyKSkKLQkJd3JpdGVsKDAsIHJlcS0+YnVmKTsKLQotCXdyaXRlbChJT1BfUkVRVUVTVF9UWVBFX0lPQ1RMX0NPTU1BTkQsICZyZXEtPmhlYWRlci50eXBlKTsKLQl3cml0ZWwoMCwgJnJlcS0+aGVhZGVyLmZsYWdzKTsKLQl3cml0ZWwob2Zmc2V0b2Yoc3RydWN0IGhwdF9pb3BfcmVxdWVzdF9pb2N0bF9jb21tYW5kLCBidWYpCi0JCQkrIGFyZy0+aW5idWZfc2l6ZSwgJnJlcS0+aGVhZGVyLnNpemUpOwotCXdyaXRlbCgodTMyKSh1bnNpZ25lZCBsb25nKWFyZywgJnJlcS0+aGVhZGVyLmNvbnRleHQpOwotCXdyaXRlbChCSVRTX1BFUl9MT05HID4gMzIgPyAodTMyKSgodW5zaWduZWQgbG9uZylhcmc+PjMyKSA6IDAsCi0JCQkmcmVxLT5oZWFkZXIuY29udGV4dF9oaTMyKTsKLQl3cml0ZWwoSU9QX1JFU1VMVF9QRU5ESU5HLCAmcmVxLT5oZWFkZXIucmVzdWx0KTsKLQotCWFyZy0+cmVzdWx0ID0gSFBUX0lPQ1RMX1JFU1VMVF9GQUlMRUQ7Ci0JYXJnLT5kb25lID0gaHB0aW9wX2lvY3RsX2RvbmU7Ci0KLQl3cml0ZWwodmFsLCAmaGJhLT5pb3AtPmluYm91bmRfcXVldWUpOwotCWhwdGlvcF9wY2lfcG9zdGluZ19mbHVzaChoYmEtPmlvcCk7Ci0KLQlzcGluX3VubG9ja19pcnEoaGJhLT5ob3N0LT5ob3N0X2xvY2spOwotCi0Jd2FpdF9ldmVudF90aW1lb3V0KGhiYS0+aW9jdGxfd3EsIGFyZy0+ZG9uZSA9PSBOVUxMLCA2MCAqIEhaKTsKLQotCWlmIChhcmctPmRvbmUgIT0gTlVMTCkgewotCQlocHRpb3BfcmVzZXRfaGJhKGhiYSk7Ci0JCWlmIChpb2N0bF9yZXRyeSsrIDwgMykKLQkJCWdvdG8gcmV0cnk7Ci0JfQotCi0JZHByaW50aygiaHB0X2lvcF9pb2N0bCAleCByZXN1bHQgJWRcbiIsCi0JCQlhcmctPmlvY3RsX2NvZGUsIGFyZy0+cmVzdWx0KTsKLX0KLQotc3RhdGljIGludCBfX2hwdF9kb19pb2N0bChzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLCB1MzIgY29kZSwgdm9pZCAqaW5idWYsCi0JCQl1MzIgaW5zaXplLCB2b2lkICpvdXRidWYsIHUzMiBvdXRzaXplKQotewotCXN0cnVjdCBocHRfaW9jdGxfayBhcmc7Ci0JYXJnLmhiYSA9IGhiYTsKLQlhcmcuaW9jdGxfY29kZSA9IGNvZGU7Ci0JYXJnLmluYnVmID0gaW5idWY7Ci0JYXJnLm91dGJ1ZiA9IG91dGJ1ZjsKLQlhcmcuaW5idWZfc2l6ZSA9IGluc2l6ZTsKLQlhcmcub3V0YnVmX3NpemUgPSBvdXRzaXplOwotCWFyZy5ieXRlc19yZXR1cm5lZCA9IE5VTEw7Ci0JaHB0aW9wX2RvX2lvY3RsKCZhcmcpOwotCXJldHVybiBhcmcucmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCBocHRfaWRfdmFsaWQoX19sZTMyIGlkKQotewotCXJldHVybiBpZCAhPSAwICYmIGlkICE9IGNwdV90b19sZTMyKDB4ZmZmZmZmZmYpOwotfQotCi1zdGF0aWMgaW50IGhwdGlvcF9nZXRfY29udHJvbGxlcl9pbmZvKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsCi0JCQkJCXN0cnVjdCBocHRfY29udHJvbGxlcl9pbmZvICpwaW5mbykKLXsKLQlpbnQgaWQgPSAwOwotCi0JcmV0dXJuIF9faHB0X2RvX2lvY3RsKGhiYSwgSFBUX0lPQ1RMX0dFVF9DT05UUk9MTEVSX0lORk8sCi0JCSZpZCwgc2l6ZW9mKGludCksIHBpbmZvLCBzaXplb2YoKnBpbmZvKSk7Ci19Ci0KLQotc3RhdGljIGludCBocHRpb3BfZ2V0X2NoYW5uZWxfaW5mbyhzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLCBpbnQgYnVzLAotCQkJCQlzdHJ1Y3QgaHB0X2NoYW5uZWxfaW5mbyAqcGluZm8pCi17Ci0JdTMyIGlkc1syXTsKLQotCWlkc1swXSA9IDA7Ci0JaWRzWzFdID0gYnVzOwotCXJldHVybiBfX2hwdF9kb19pb2N0bChoYmEsIEhQVF9JT0NUTF9HRVRfQ0hBTk5FTF9JTkZPLAotCQkJCWlkcywgc2l6ZW9mKGlkcyksIHBpbmZvLCBzaXplb2YoKnBpbmZvKSk7Ci0KLX0KLQotc3RhdGljIGludCBocHRpb3BfZ2V0X2xvZ2ljYWxfZGV2aWNlcyhzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLAotCQkJCQlfX2xlMzIgKnBpZHMsIGludCBtYXhjb3VudCkKLXsKLQlpbnQgaTsKLQl1MzIgY291bnQgPSBtYXhjb3VudCAtIDE7Ci0KLQlpZiAoX19ocHRfZG9faW9jdGwoaGJhLCBIUFRfSU9DVExfR0VUX0xPR0lDQUxfREVWSUNFUywKLQkJCSZjb3VudCwgc2l6ZW9mKHUzMiksCi0JCQlwaWRzLCBzaXplb2YodTMyKSAqIG1heGNvdW50KSkKLQkJcmV0dXJuIC0xOwotCi0JbWF4Y291bnQgPSBsZTMyX3RvX2NwdShwaWRzWzBdKTsKLQlmb3IgKGkgPSAwOyBpIDwgbWF4Y291bnQ7IGkrKykKLQkJcGlkc1tpXSA9IHBpZHNbaSsxXTsKLQotCXJldHVybiBtYXhjb3VudDsKLX0KLQotc3RhdGljIGludCBocHRpb3BfZ2V0X2RldmljZV9pbmZvX3YzKHN0cnVjdCBocHRpb3BfaGJhICpoYmEsIF9fbGUzMiBpZCwKLQkJCQlzdHJ1Y3QgaHB0X2xvZ2ljYWxfZGV2aWNlX2luZm9fdjMgKnBpbmZvKQotewotCXJldHVybiBfX2hwdF9kb19pb2N0bChoYmEsIEhQVF9JT0NUTF9HRVRfREVWSUNFX0lORk9fVjMsCi0JCQkJJmlkLCBzaXplb2YodTMyKSwKLQkJCQlwaW5mbywgc2l6ZW9mKCpwaW5mbykpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciAqZ2V0X2FycmF5X3N0YXR1cyhzdHJ1Y3QgaHB0X2xvZ2ljYWxfZGV2aWNlX2luZm9fdjMgKmRldmluZm8pCi17Ci0Jc3RhdGljIGNoYXIgc1s2NF07Ci0JdTMyIGZsYWdzID0gbGUzMl90b19jcHUoZGV2aW5mby0+dS5hcnJheS5mbGFncyk7Ci0JdTMyIHRyYW5zX3Byb2cgPSBsZTMyX3RvX2NwdShkZXZpbmZvLT51LmFycmF5LnRyYW5zZm9ybWluZ19wcm9ncmVzcyk7Ci0JdTMyIHJlYl9wcm9nID0gbGUzMl90b19jcHUoZGV2aW5mby0+dS5hcnJheS5yZWJ1aWxkaW5nX3Byb2dyZXNzKTsKLQotCWlmIChmbGFncyAmIEFSUkFZX0ZMQUdfRElTQUJMRUQpCi0JCXJldHVybiAiRGlzYWJsZWQiOwotCWVsc2UgaWYgKGZsYWdzICYgQVJSQVlfRkxBR19UUkFOU0ZPUk1JTkcpCi0JCXNwcmludGYocywgIkV4cGFuZGluZy9NaWdyYXRpbmcgJWQuJWQlJSVzJXMiLAotCQkJdHJhbnNfcHJvZyAvIDEwMCwKLQkJCXRyYW5zX3Byb2cgJSAxMDAsCi0JCQkoZmxhZ3MgJiAoQVJSQVlfRkxBR19ORUVEQlVJTERJTkd8QVJSQVlfRkxBR19CUk9LRU4pKT8KLQkJCQkJIiwgQ3JpdGljYWwiIDogIiIsCi0JCQkoKGZsYWdzICYgQVJSQVlfRkxBR19ORUVESU5JVElBTElaSU5HKSAmJgotCQkJICEoZmxhZ3MgJiBBUlJBWV9GTEFHX1JFQlVJTERJTkcpICYmCi0JCQkgIShmbGFncyAmIEFSUkFZX0ZMQUdfSU5JVElBTElaSU5HKSk/Ci0JCQkJCSIsIFVuaW50aWFsaXplZCIgOiAiIik7Ci0JZWxzZSBpZiAoKGZsYWdzICYgQVJSQVlfRkxBR19CUk9LRU4pICYmCi0JCQkJZGV2aW5mby0+dS5hcnJheS5hcnJheV90eXBlICE9IEFUX1JBSUQ2KQotCQlyZXR1cm4gIkNyaXRpY2FsIjsKLQllbHNlIGlmIChmbGFncyAmIEFSUkFZX0ZMQUdfUkVCVUlMRElORykKLQkJc3ByaW50ZihzLAotCQkJKGZsYWdzICYgQVJSQVlfRkxBR19ORUVESU5JVElBTElaSU5HKT8KLQkJCQkiJXNCYWNrZ3JvdW5kIGluaXRpYWxpemluZyAlZC4lZCUlIiA6Ci0JCQkJCSIlc1JlYnVpbGRpbmcgJWQuJWQlJSIsCi0JCQkoZmxhZ3MgJiBBUlJBWV9GTEFHX0JST0tFTik/ICJDcml0aWNhbCwgIiA6ICIiLAotCQkJcmViX3Byb2cgLyAxMDAsCi0JCQlyZWJfcHJvZyAlIDEwMCk7Ci0JZWxzZSBpZiAoZmxhZ3MgJiBBUlJBWV9GTEFHX1ZFUklGWUlORykKLQkJc3ByaW50ZihzLCAiJXNWZXJpZnlpbmcgJWQuJWQlJSIsCi0JCQkoZmxhZ3MgJiBBUlJBWV9GTEFHX0JST0tFTik/ICJDcml0aWNhbCwgIiA6ICIiLAotCQkJcmViX3Byb2cgLyAxMDAsCi0JCQlyZWJfcHJvZyAlIDEwMCk7Ci0JZWxzZSBpZiAoZmxhZ3MgJiBBUlJBWV9GTEFHX0lOSVRJQUxJWklORykKLQkJc3ByaW50ZihzLCAiJXNGb3Jncm91bmQgaW5pdGlhbGl6aW5nICVkLiVkJSUiLAotCQkJKGZsYWdzICYgQVJSQVlfRkxBR19CUk9LRU4pPyAiQ3JpdGljYWwsICIgOiAiIiwKLQkJCXJlYl9wcm9nIC8gMTAwLAotCQkJcmViX3Byb2cgJSAxMDApOwotCWVsc2UgaWYgKGZsYWdzICYgQVJSQVlfRkxBR19ORUVEVFJBTlNGT1JNKQotCQlzcHJpbnRmKHMsIiVzJXMlcyIsICJOZWVkIEV4cGFuZGluZy9NaWdyYXRpbmciLAotCQkJKGZsYWdzICYgQVJSQVlfRkxBR19CUk9LRU4pPyAiQ3JpdGljYWwsICIgOiAiIiwKLQkJCSgoZmxhZ3MgJiBBUlJBWV9GTEFHX05FRURJTklUSUFMSVpJTkcpICYmCi0JCQkgIShmbGFncyAmIEFSUkFZX0ZMQUdfUkVCVUlMRElORykgJiYKLQkJCSAhKGZsYWdzICYgQVJSQVlfRkxBR19JTklUSUFMSVpJTkcpKT8KLQkJCQkiLCBVbmludGlhbGl6ZWQiIDogIiIpOwotCWVsc2UgaWYgKGZsYWdzICYgQVJSQVlfRkxBR19ORUVESU5JVElBTElaSU5HICYmCi0JCSEoZmxhZ3MgJiBBUlJBWV9GTEFHX1JFQlVJTERJTkcpICYmCi0JCSEoZmxhZ3MgJiBBUlJBWV9GTEFHX0lOSVRJQUxJWklORykpCi0JCXNwcmludGYocywiJXNVbmluaXRpYWxpemVkIiwKLQkJCShmbGFncyAmIEFSUkFZX0ZMQUdfQlJPS0VOKT8gIkNyaXRpY2FsLCAiIDogIiIpOwotCWVsc2UgaWYgKChmbGFncyAmIEFSUkFZX0ZMQUdfTkVFREJVSUxESU5HKSB8fAotCQkJKGZsYWdzICYgQVJSQVlfRkxBR19CUk9LRU4pKQotCQlyZXR1cm4gIkNyaXRpY2FsIjsKLQllbHNlCi0JCXJldHVybiAiTm9ybWFsIjsKLQlyZXR1cm4gczsKLX0KLQotc3RhdGljIHZvaWQgaHB0aW9wX2R1bXBfZGV2aW5mbyhzdHJ1Y3QgaHB0aW9wX2hiYSAqaGJhLAotCQkJc3RydWN0IGhwdGlvcF9nZXRpbmZvICpwaW5mbywgX19sZTMyIGlkLCBpbnQgaW5kZW50KQotewotCXN0cnVjdCBocHRfbG9naWNhbF9kZXZpY2VfaW5mb192MyBkZXZpbmZvOwotCWludCBpOwotCXU2NCBjYXBhY2l0eTsKLQotCWZvciAoaSA9IDA7IGkgPCBpbmRlbnQ7IGkrKykKLQkJaHB0aW9wX2NvcHlfaW5mbyhwaW5mbywgIlx0Iik7Ci0KLQlpZiAoaHB0aW9wX2dldF9kZXZpY2VfaW5mb192MyhoYmEsIGlkLCAmZGV2aW5mbykpIHsKLQkJaHB0aW9wX2NvcHlfaW5mbyhwaW5mbywgInVua25vd25cbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChkZXZpbmZvLnR5cGUpIHsKLQotCWNhc2UgTERUX0RFVklDRTogewotCQlzdHJ1Y3QgaGRfZHJpdmVpZCAqZHJpdmVpZDsKLQkJdTMyIGZsYWdzID0gbGUzMl90b19jcHUoZGV2aW5mby51LmRldmljZS5mbGFncyk7Ci0KLQkJZHJpdmVpZCA9IChzdHJ1Y3QgaGRfZHJpdmVpZCAqKWRldmluZm8udS5kZXZpY2UuaWRlbnQ7Ci0JCS8qIG1vZGVsW10gaXMgNDAgY2hhcnMgbG9uZywgYnV0IHdlIGp1c3Qgd2FudCAyMCBjaGFycyBoZXJlICovCi0JCWRyaXZlaWQtPm1vZGVsWzIwXSA9IDA7Ci0KLQkJaWYgKGluZGVudCkKLQkJCWlmIChmbGFncyAmIERFVklDRV9GTEFHX0RJU0FCTEVEKQotCQkJCWhwdGlvcF9jb3B5X2luZm8ocGluZm8sIk1pc3NpbmdcbiIpOwotCQkJZWxzZQotCQkJCWhwdGlvcF9jb3B5X2luZm8ocGluZm8sICJDSCVkICVzXG4iLAotCQkJCQlkZXZpbmZvLnUuZGV2aWNlLnBhdGhfaWQgKyAxLAotCQkJCQlkcml2ZWlkLT5tb2RlbCk7Ci0JCWVsc2UgewotCQkJY2FwYWNpdHkgPSBsZTY0X3RvX2NwdShkZXZpbmZvLmNhcGFjaXR5KSAqIDUxMjsKLQkJCWRvX2RpdihjYXBhY2l0eSwgMTAwMDAwMCk7Ci0JCQlocHRpb3BfY29weV9pbmZvKHBpbmZvLAotCQkJCSJDSCVkICVzLCAlbGx1TUIsICVzICVzJXMlcyVzXG4iLAotCQkJCWRldmluZm8udS5kZXZpY2UucGF0aF9pZCArIDEsCi0JCQkJZHJpdmVpZC0+bW9kZWwsCi0JCQkJY2FwYWNpdHksCi0JCQkJKGZsYWdzICYgREVWSUNFX0ZMQUdfRElTQUJMRUQpPwotCQkJCQkiRGlzYWJsZWQiIDogIk5vcm1hbCIsCi0JCQkJZGV2aW5mby51LmRldmljZS5yZWFkX2FoZWFkX2VuYWJsZWQ/Ci0JCQkJCQkiW1JBXSIgOiAiIiwKLQkJCQlkZXZpbmZvLnUuZGV2aWNlLndyaXRlX2NhY2hlX2VuYWJsZWQ/Ci0JCQkJCQkiW1dDXSIgOiAiIiwKLQkJCQlkZXZpbmZvLnUuZGV2aWNlLlRDUV9lbmFibGVkPwotCQkJCQkJIltUQ1FdIiA6ICIiLAotCQkJCWRldmluZm8udS5kZXZpY2UuTkNRX2VuYWJsZWQ/Ci0JCQkJCQkiW05DUV0iIDogIiIKLQkJCSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBMRFRfQVJSQVk6Ci0JCWlmIChkZXZpbmZvLnRhcmdldF9pZCAhPSBJTlZBTElEX1RBUkdFVF9JRCkKLQkJCWhwdGlvcF9jb3B5X2luZm8ocGluZm8sICJbRElTSyAlZF8lZF0gIiwKLQkJCQkJZGV2aW5mby52YnVzX2lkLCBkZXZpbmZvLnRhcmdldF9pZCk7Ci0KLQkJY2FwYWNpdHkgPSBsZTY0X3RvX2NwdShkZXZpbmZvLmNhcGFjaXR5KSAqIDUxMjsKLQkJZG9fZGl2KGNhcGFjaXR5LCAxMDAwMDAwKTsKLQkJaHB0aW9wX2NvcHlfaW5mbyhwaW5mbywgIiVzICglcyksICVsbHVNQiwgJXNcbiIsCi0JCQlkZXZpbmZvLnUuYXJyYXkubmFtZSwKLQkJCWRldmluZm8udS5hcnJheS5hcnJheV90eXBlPT1BVF9SQUlEMD8gIlJBSUQwIiA6Ci0JCQkJZGV2aW5mby51LmFycmF5LmFycmF5X3R5cGU9PUFUX1JBSUQxPyAiUkFJRDEiIDoKLQkJCQlkZXZpbmZvLnUuYXJyYXkuYXJyYXlfdHlwZT09QVRfUkFJRDU/ICJSQUlENSIgOgotCQkJCWRldmluZm8udS5hcnJheS5hcnJheV90eXBlPT1BVF9SQUlENj8gIlJBSUQ2IiA6Ci0JCQkJZGV2aW5mby51LmFycmF5LmFycmF5X3R5cGU9PUFUX0pCT0Q/ICJKQk9EIiA6Ci0JCQkJCSJ1bmtub3duIiwKLQkJCWNhcGFjaXR5LAotCQkJZ2V0X2FycmF5X3N0YXR1cygmZGV2aW5mbykpOwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2aW5mby51LmFycmF5Lm5kaXNrOyBpKyspIHsKLQkJCWlmIChocHRfaWRfdmFsaWQoZGV2aW5mby51LmFycmF5Lm1lbWJlcnNbaV0pKSB7Ci0JCQkJaWYgKGNwdV90b19sZTE2KDE8PGkpICYKLQkJCQkJZGV2aW5mby51LmFycmF5LmNyaXRpY2FsX21lbWJlcnMpCi0JCQkJCWhwdGlvcF9jb3B5X2luZm8ocGluZm8sICJcdCoiKTsKLQkJCQlocHRpb3BfZHVtcF9kZXZpbmZvKGhiYSwgcGluZm8sCi0JCQkJCWRldmluZm8udS5hcnJheS5tZW1iZXJzW2ldLCBpbmRlbnQrMSk7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJaHB0aW9wX2NvcHlfaW5mbyhwaW5mbywgIlx0TWlzc2luZ1xuIik7Ci0JCX0KLQkJaWYgKGlkID09IGRldmluZm8udS5hcnJheS50cmFuc2Zvcm1fc291cmNlKSB7Ci0JCQlocHRpb3BfY29weV9pbmZvKHBpbmZvLCAiXHRFeHBhbmRpbmcvTWlncmF0aW5nIHRvOlxuIik7Ci0JCQlocHRpb3BfZHVtcF9kZXZpbmZvKGhiYSwgcGluZm8sCi0JCQkJZGV2aW5mby51LmFycmF5LnRyYW5zZm9ybV90YXJnZXQsIGluZGVudCsxKTsKLQkJfQotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBzc2l6ZV90IGhwdGlvcF9zaG93X3ZlcnNpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGRyaXZlcl92ZXIpOwogfQogCi1zdGF0aWMgc3NpemVfdCBocHRpb3BfY2Rldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBocHRpb3BfaGJhICpoYmEgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGhwdGlvcF9nZXRpbmZvIGluZm87Ci0JaW50IGksIGosIG5kZXY7Ci0Jc3RydWN0IGhwdF9jb250cm9sbGVyX2luZm8gY29uX2luZm87Ci0Jc3RydWN0IGhwdF9jaGFubmVsX2luZm8gY2hhbl9pbmZvOwotCV9fbGUzMiBpZHNbMzJdOwotCi0JaW5mby5idWZmZXIgICAgID0gYnVmOwotCWluZm8uYnVmbGVuZ3RoICA9IGNvdW50OwotCWluZm8uYnVmb2Zmc2V0ICA9IHBwb3MgPyAqcHBvcyA6IDA7Ci0JaW5mby5maWxwb3MgICAgID0gMDsKLQlpbmZvLmJ1ZmZpbGxlbiAgPSAwOwotCi0JaWYgKGhwdGlvcF9nZXRfY29udHJvbGxlcl9pbmZvKGhiYSwgJmNvbl9pbmZvKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY29uX2luZm8ubnVtX2J1c2VzOyBpKyspIHsKLQkJaWYgKGhwdGlvcF9nZXRfY2hhbm5lbF9pbmZvKGhiYSwgaSwgJmNoYW5faW5mbykgPT0gMCkgewotCQkJaWYgKGhwdF9pZF92YWxpZChjaGFuX2luZm8uZGV2aWNlc1swXSkpCi0JCQkJaHB0aW9wX2R1bXBfZGV2aW5mbyhoYmEsICZpbmZvLAotCQkJCQkJY2hhbl9pbmZvLmRldmljZXNbMF0sIDApOwotCQkJaWYgKGhwdF9pZF92YWxpZChjaGFuX2luZm8uZGV2aWNlc1sxXSkpCi0JCQkJaHB0aW9wX2R1bXBfZGV2aW5mbyhoYmEsICZpbmZvLAotCQkJCQkJY2hhbl9pbmZvLmRldmljZXNbMV0sIDApOwotCQl9Ci0JfQotCi0JbmRldiA9IGhwdGlvcF9nZXRfbG9naWNhbF9kZXZpY2VzKGhiYSwgaWRzLAotCQkJCQlzaXplb2YoaWRzKSAvIHNpemVvZihpZHNbMF0pKTsKLQotCS8qCi0JICogaWYgaHB0aW9wX2dldF9sb2dpY2FsX2RldmljZXMgZmFpbHMsIG5kZXY9PS0xIGFuZCBpdCBqdXN0Ci0JICogb3V0cHV0IG5vdGhpbmcgaGVyZQotCSAqLwotCWZvciAoaiA9IDA7IGogPCBuZGV2OyBqKyspCi0JCWhwdGlvcF9kdW1wX2RldmluZm8oaGJhLCAmaW5mbywgaWRzW2pdLCAwKTsKLQotCWlmIChwcG9zKQotCQkqcHBvcyArPSBpbmZvLmJ1ZmZpbGxlbjsKLQotCXJldHVybiBpbmZvLmJ1ZmZpbGxlbjsKLX0KLQotc3RhdGljIGludCBocHRpb3BfY2Rldl9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCAgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkJCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBocHRpb3BfaGJhICpoYmEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGhwdF9pb2N0bF91IGlvY3RsX3U7Ci0Jc3RydWN0IGhwdF9pb2N0bF9rIGlvY3RsX2s7Ci0JdTMyIGJ5dGVzX3JldHVybmVkOwotCWludCBlcnIgPSAtRUlOVkFMOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZpb2N0bF91LAotCQkodm9pZCBfX3VzZXIgKilhcmcsIHNpemVvZihzdHJ1Y3QgaHB0X2lvY3RsX3UpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoaW9jdGxfdS5tYWdpYyAhPSBIUFRfSU9DVExfTUFHSUMpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaW9jdGxfay5pb2N0bF9jb2RlID0gaW9jdGxfdS5pb2N0bF9jb2RlOwotCWlvY3RsX2suaW5idWYgPSBOVUxMOwotCWlvY3RsX2suaW5idWZfc2l6ZSA9IGlvY3RsX3UuaW5idWZfc2l6ZTsKLQlpb2N0bF9rLm91dGJ1ZiA9IE5VTEw7Ci0JaW9jdGxfay5vdXRidWZfc2l6ZSA9IGlvY3RsX3Uub3V0YnVmX3NpemU7Ci0JaW9jdGxfay5oYmEgPSBoYmE7Ci0JaW9jdGxfay5ieXRlc19yZXR1cm5lZCA9ICZieXRlc19yZXR1cm5lZDsKLQotCS8qIHZlcmlmeSB1c2VyIGJ1ZmZlciAqLwotCWlmICgoaW9jdGxfay5pbmJ1Zl9zaXplICYmICFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsCi0JCQlpb2N0bF91LmluYnVmLCBpb2N0bF9rLmluYnVmX3NpemUpKSB8fAotCQkoaW9jdGxfay5vdXRidWZfc2l6ZSAmJiAhYWNjZXNzX29rKFZFUklGWV9XUklURSwKLQkJCWlvY3RsX3Uub3V0YnVmLCBpb2N0bF9rLm91dGJ1Zl9zaXplKSkgfHwKLQkJKGlvY3RsX3UuYnl0ZXNfcmV0dXJuZWQgJiYgIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsCi0JCQlpb2N0bF91LmJ5dGVzX3JldHVybmVkLCBzaXplb2YodTMyKSkpIHx8Ci0JCWlvY3RsX2suaW5idWZfc2l6ZSArIGlvY3RsX2sub3V0YnVmX3NpemUgPiAweDEwMDAwKSB7Ci0KLQkJZHByaW50aygic2NzaSVkOiBnb3QgYmFkIHVzZXIgYWRkcmVzc1xuIiwgaGJhLT5ob3N0LT5ob3N0X25vKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogbWFwIGJ1ZmZlciB0byBrZXJuZWwuICovCi0JaWYgKGlvY3RsX2suaW5idWZfc2l6ZSkgewotCQlpb2N0bF9rLmluYnVmID0ga21hbGxvYyhpb2N0bF9rLmluYnVmX3NpemUsIEdGUF9LRVJORUwpOwotCQlpZiAoIWlvY3RsX2suaW5idWYpIHsKLQkJCWRwcmludGsoInNjc2klZDogZmFpbCB0byBhbGxvYyBpbmJ1ZlxuIiwKLQkJCQkJaGJhLT5ob3N0LT5ob3N0X25vKTsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycl9leGl0OwotCQl9Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGlvY3RsX2suaW5idWYsCi0JCQkJaW9jdGxfdS5pbmJ1ZiwgaW9jdGxfay5pbmJ1Zl9zaXplKSkgewotCQkJZ290byBlcnJfZXhpdDsKLQkJfQotCX0KLQotCWlmIChpb2N0bF9rLm91dGJ1Zl9zaXplKSB7Ci0JCWlvY3RsX2sub3V0YnVmID0ga21hbGxvYyhpb2N0bF9rLm91dGJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFpb2N0bF9rLm91dGJ1ZikgewotCQkJZHByaW50aygic2NzaSVkOiBmYWlsIHRvIGFsbG9jIG91dGJ1ZlxuIiwKLQkJCQkJaGJhLT5ob3N0LT5ob3N0X25vKTsKLQkJCWVyciA9IC1FTk9NRU07Ci0JCQlnb3RvIGVycl9leGl0OwotCQl9Ci0JfQotCi0JaHB0aW9wX2RvX2lvY3RsKCZpb2N0bF9rKTsKLQotCWlmIChpb2N0bF9rLnJlc3VsdCA9PSBIUFRfSU9DVExfUkVTVUxUX09LKSB7Ci0JCWlmIChpb2N0bF9rLm91dGJ1Zl9zaXplICYmCi0JCQljb3B5X3RvX3VzZXIoaW9jdGxfdS5vdXRidWYsCi0JCQkJaW9jdGxfay5vdXRidWYsIGlvY3RsX2sub3V0YnVmX3NpemUpKQotCQkJZ290byBlcnJfZXhpdDsKLQotCQlpZiAoaW9jdGxfdS5ieXRlc19yZXR1cm5lZCAmJgotCQkJY29weV90b191c2VyKGlvY3RsX3UuYnl0ZXNfcmV0dXJuZWQsCi0JCQkJJmJ5dGVzX3JldHVybmVkLCBzaXplb2YodTMyKSkpCi0JCQlnb3RvIGVycl9leGl0OwotCi0JCWVyciA9IDA7Ci0JfQotCi1lcnJfZXhpdDoKLQlrZnJlZShpb2N0bF9rLmluYnVmKTsKLQlrZnJlZShpb2N0bF9rLm91dGJ1Zik7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGhwdGlvcF9jZGV2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IGhwdGlvcF9oYmEgKmhiYTsKLQl1bnNpZ25lZCBpID0gMCwgbWlub3IgPSBpbWlub3IoaW5vZGUpOwotCWludCByZXQgPSAtRU5PREVWOwotCi0Jc3Bpbl9sb2NrKCZocHRpb3BfaGJhX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShoYmEsICZocHRpb3BfaGJhX2xpc3QsIGxpbmspIHsKLQkJaWYgKGkgPT0gbWlub3IpIHsKLQkJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGhiYTsKLQkJCXJldCA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpKys7Ci0JfQotCi1vdXQ6Ci0Jc3Bpbl91bmxvY2soJmhwdGlvcF9oYmFfbGlzdF9sb2NrKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocHRpb3BfY2Rldl9mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5yZWFkICA9IGhwdGlvcF9jZGV2X3JlYWQsCi0JLmlvY3RsID0gaHB0aW9wX2NkZXZfaW9jdGwsCi0JLm9wZW4gID0gaHB0aW9wX2NkZXZfb3BlbiwKLX07Ci0KIHN0YXRpYyBzc2l6ZV90IGhwdGlvcF9zaG93X2Z3X3ZlcnNpb24oc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2LCBjaGFyICpidWYpCiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGNsYXNzX3RvX3Nob3N0KGNsYXNzX2Rldik7CkBAIC0xMjk2LDE5ICs3NzEsMTMgQEAKIAkJZ290byB1bm1hcF9wY2lfYmFyOwogCX0KIAotCWlmIChzY3NpX2FkZF9ob3N0KGhvc3QsICZwY2lkZXYtPmRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQ6IHNjc2lfYWRkX2hvc3QgZmFpbGVkXG4iLAotCQkJCQloYmEtPmhvc3QtPmhvc3Rfbm8pOwotCQlnb3RvIHVubWFwX3BjaV9iYXI7Ci0JfQotCiAJcGNpX3NldF9kcnZkYXRhKHBjaWRldiwgaG9zdCk7CiAKIAlpZiAocmVxdWVzdF9pcnEocGNpZGV2LT5pcnEsIGhwdGlvcF9pbnRyLCBJUlFGX1NIQVJFRCwKIAkJCQkJZHJpdmVyX25hbWUsIGhiYSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQ6IHJlcXVlc3QgaXJxICVkIGZhaWxlZFxuIiwKIAkJCQkJaGJhLT5ob3N0LT5ob3N0X25vLCBwY2lkZXYtPmlycSk7Ci0JCWdvdG8gcmVtb3ZlX3Njc2lfaG9zdDsKKwkJZ290byB1bm1hcF9wY2lfYmFyOwogCX0KIAogCS8qIEFsbG9jYXRlIHJlcXVlc3QgbWVtICovCkBAIC0xMzU1LDkgKzgyNCwxMiBAQAogCWlmIChocHRpb3BfaW5pdGlhbGl6ZV9pb3AoaGJhKSkKIAkJZ290byBmcmVlX3JlcXVlc3RfbWVtOwogCi0Jc3Bpbl9sb2NrKCZocHRpb3BfaGJhX2xpc3RfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmaGJhLT5saW5rLCAmaHB0aW9wX2hiYV9saXN0KTsKLQlzcGluX3VubG9jaygmaHB0aW9wX2hiYV9saXN0X2xvY2spOworCWlmIChzY3NpX2FkZF9ob3N0KGhvc3QsICZwY2lkZXYtPmRldikpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJzY3NpJWQ6IHNjc2lfYWRkX2hvc3QgZmFpbGVkXG4iLAorCQkJCQloYmEtPmhvc3QtPmhvc3Rfbm8pOworCQlnb3RvIGZyZWVfcmVxdWVzdF9tZW07CisJfQorCiAKIAlzY3NpX3NjYW5faG9zdChob3N0KTsKIApAQCAtMTM3Miw5ICs4NDQsNiBAQAogZnJlZV9yZXF1ZXN0X2lycToKIAlmcmVlX2lycShoYmEtPnBjaWRldi0+aXJxLCBoYmEpOwogCi1yZW1vdmVfc2NzaV9ob3N0OgotCXNjc2lfcmVtb3ZlX2hvc3QoaG9zdCk7Ci0KIHVubWFwX3BjaV9iYXI6CiAJaW91bm1hcChoYmEtPmlvcCk7CiAKQEAgLTE0MjIsMTAgKzg5MSw2IEBACiAKIAlzY3NpX3JlbW92ZV9ob3N0KGhvc3QpOwogCi0Jc3Bpbl9sb2NrKCZocHRpb3BfaGJhX2xpc3RfbG9jayk7Ci0JbGlzdF9kZWxfaW5pdCgmaGJhLT5saW5rKTsKLQlzcGluX3VubG9jaygmaHB0aW9wX2hiYV9saXN0X2xvY2spOwotCiAJaHB0aW9wX3NodXRkb3duKHBjaWRldik7CiAKIAlmcmVlX2lycShoYmEtPnBjaWRldi0+aXJxLCBoYmEpOwpAQCAtMTQ2MiwyNyArOTI3LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGhwdGlvcF9tb2R1bGVfaW5pdCh2b2lkKQogewotCWludCBlcnJvcjsKLQogCXByaW50ayhLRVJOX0lORk8gIiVzICVzXG4iLCBkcml2ZXJfbmFtZV9sb25nLCBkcml2ZXJfdmVyKTsKLQotCWVycm9yID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmaHB0aW9wX3BjaV9kcml2ZXIpOwotCWlmIChlcnJvciA8IDApCi0JCXJldHVybiBlcnJvcjsKLQotCWhwdGlvcF9jZGV2X21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJocHRpb3AiLCAmaHB0aW9wX2NkZXZfZm9wcyk7Ci0JaWYgKGhwdGlvcF9jZGV2X21ham9yIDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ1bmFibGUgdG8gcmVnaXN0ZXIgaHB0aW9wIGRldmljZS5cbiIpOwotCQlyZXR1cm4gaHB0aW9wX2NkZXZfbWFqb3I7Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmhwdGlvcF9wY2lfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGhwdGlvcF9tb2R1bGVfZXhpdCh2b2lkKQogewotCWRwcmludGsoImhwdGlvcF9tb2R1bGVfZXhpdFxuIik7Ci0JdW5yZWdpc3Rlcl9jaHJkZXYoaHB0aW9wX2NkZXZfbWFqb3IsICJocHRpb3AiKTsKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmhwdGlvcF9wY2lfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jIGIvZHJpdmVycy9zY3NpL2libXZzY3NpL3JwYV92c2NzaS5jCmluZGV4IGVkMjJiOTYuLjAxYjhhYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9pYm12c2NzaS9ycGFfdnNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWJtdnNjc2kvcnBhX3ZzY3NpLmMKQEAgLTE1Niw4ICsxNTYsOCBAQAogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcm9vdGRuOwogCi0JY2hhciAqcHBhcnRpdGlvbl9uYW1lOwotCXVuc2lnbmVkIGludCAqcF9udW1iZXJfcHRyOworCWNvbnN0IGNoYXIgKnBwYXJ0aXRpb25fbmFtZTsKKwljb25zdCB1bnNpZ25lZCBpbnQgKnBfbnVtYmVyX3B0cjsKIAogCS8qIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgcGFydGl0aW9uICovCiAJcm9vdGRuID0gZmluZF9wYXRoX2RldmljZSgiLyIpOwpAQCAtMTY1LDE0ICsxNjUsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAotCXBwYXJ0aXRpb25fbmFtZSA9Ci0JCWdldF9wcm9wZXJ0eShyb290ZG4sICJpYm0scGFydGl0aW9uLW5hbWUiLCBOVUxMKTsKKwlwcGFydGl0aW9uX25hbWUgPSBnZXRfcHJvcGVydHkocm9vdGRuLCAiaWJtLHBhcnRpdGlvbi1uYW1lIiwgTlVMTCk7CiAJaWYgKHBwYXJ0aXRpb25fbmFtZSkKIAkJc3RybmNweShwYXJ0aXRpb25fbmFtZSwgcHBhcnRpdGlvbl9uYW1lLAogCQkJCXNpemVvZihwYXJ0aXRpb25fbmFtZSkpOwotCXBfbnVtYmVyX3B0ciA9Ci0JCSh1bnNpZ25lZCBpbnQgKilnZXRfcHJvcGVydHkocm9vdGRuLCAiaWJtLHBhcnRpdGlvbi1ubyIsCi0JCQkJCSAgICAgTlVMTCk7CisJcF9udW1iZXJfcHRyID0gZ2V0X3Byb3BlcnR5KHJvb3RkbiwgImlibSxwYXJ0aXRpb24tbm8iLCBOVUxMKTsKIAlpZiAocF9udW1iZXJfcHRyKQogCQlwYXJ0aXRpb25fbnVtYmVyID0gKnBfbnVtYmVyX3B0cjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pZGUtc2NzaS5jIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKaW5kZXggZjdiNWQ3My4uOTRkMWRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMKQEAgLTUxNyw3ICs1MTcsNyBAQAogCQkvKiBObyBtb3JlIGludGVycnVwdHMgKi8KIAkJaWYgKHRlc3RfYml0KElERVNDU0lfTE9HX0NNRCwgJnNjc2ktPmxvZykpCiAJCQlwcmludGsgKEtFUk5fSU5GTyAiUGFja2V0IGNvbW1hbmQgY29tcGxldGVkLCAlZCBieXRlcyB0cmFuc2ZlcnJlZFxuIiwgcGMtPmFjdHVhbGx5X3RyYW5zZmVycmVkKTsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOworCQlsb2NhbF9pcnFfZW5hYmxlX2luX2hhcmRpcnEoKTsKIAkJaWYgKHN0YXR1cy5iLmNoZWNrKQogCQkJcnEtPmVycm9ycysrOwogCQlpZGVzY3NpX2VuZF9yZXF1ZXN0IChkcml2ZSwgMSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMgYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmMKaW5kZXggODQ4ZmIyYS4uNjZhMWFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5jCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuYwpAQCAtMjYsNiArMjYsNyBAQAogICoJWmhlbnl1IFdhbmcKICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgpAQCAtNDMsMTMgKzQ0LDEwIEBACiAKICNpbmNsdWRlICJpc2NzaV90Y3AuaCIKIAotI2RlZmluZSBJU0NTSV9UQ1BfVkVSU0lPTiAiMS4wLTU5NSIKLQogTU9EVUxFX0FVVEhPUigiRG1pdHJ5IFl1c3Vwb3YgPGRtaXRyeV95dXNAeWFob28uY29tPiwgIgogCSAgICAgICJBbGV4IEFpem1hbiA8aXRuNzgwQHlhaG9vLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaVNDU0kvVENQIGRhdGEtcGF0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotTU9EVUxFX1ZFUlNJT04oSVNDU0lfVENQX1ZFUlNJT04pOwogLyogI2RlZmluZSBERUJVR19UQ1AgKi8KICNkZWZpbmUgREVCVUdfQVNTRVJUCiAKQEAgLTExMCw4ICsxMDgsMTEgQEAKIAkJIHU4KiBjcmMpCiB7CiAJc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubiA9IGNvbm4tPmRkX2RhdGE7CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOwogCi0JY3J5cHRvX2RpZ2VzdF9kaWdlc3QodGNwX2Nvbm4tPnR4X3RmbSwgJmJ1Zi0+c2csIDEsIGNyYyk7CisJZGVzYy50Zm0gPSB0Y3BfY29ubi0+dHhfdGZtOworCWRlc2MuZmxhZ3MgPSAwOworCWNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJmJ1Zi0+c2csIGJ1Zi0+c2cubGVuZ3RoLCBjcmMpOwogCWJ1Zi0+c2cubGVuZ3RoICs9IHNpemVvZih1aW50MzJfdCk7CiB9CiAKQEAgLTE4NSwxMSArMTg2LDE5IEBACiAgKiBtdXN0IGJlIGNhbGxlZCB3aXRoIHNlc3Npb24gbG9jawogICovCiBzdGF0aWMgdm9pZAotX19pc2NzaV9jdGFza19jbGVhbnVwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKmN0YXNrKQoraXNjc2lfdGNwX2NsZWFudXBfY3Rhc2soc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHN0cnVjdCBpc2NzaV9jbWRfdGFzayAqY3Rhc2spCiB7CiAJc3RydWN0IGlzY3NpX3RjcF9jbWRfdGFzayAqdGNwX2N0YXNrID0gY3Rhc2stPmRkX2RhdGE7CisJc3RydWN0IGlzY3NpX3IydF9pbmZvICpyMnQ7CiAJc3RydWN0IHNjc2lfY21uZCAqc2M7CiAKKwkvKiBmbHVzaCBjdGFzaydzIHIydCBxdWV1ZXMgKi8KKwl3aGlsZSAoX19rZmlmb19nZXQodGNwX2N0YXNrLT5yMnRxdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpKSB7CisJCV9fa2ZpZm9fcHV0KHRjcF9jdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsCisJCQkgICAgc2l6ZW9mKHZvaWQqKSk7CisJCWRlYnVnX3Njc2koImlzY3NpX3RjcF9jbGVhbnVwX2N0YXNrIHBlbmRpbmcgcjJ0IGRyb3BwZWRcbiIpOworCX0KKwogCXNjID0gY3Rhc2stPnNjOwogCWlmICh1bmxpa2VseSghc2MpKQogCQlyZXR1cm47CkBAIC0zNzQsNiArMzgzLDcgQEAKIAkJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CisKIAlyYyA9IF9fa2ZpZm9fZ2V0KHRjcF9jdGFzay0+cjJ0cG9vbC5xdWV1ZSwgKHZvaWQqKSZyMnQsIHNpemVvZih2b2lkKikpOwogCUJVR19PTighcmMpOwogCkBAIC0zOTksNyArNDA5LDcgQEAKIAl0Y3BfY3Rhc2stPmV4cF9yMnRzbiA9IHIydHNuICsgMTsKIAl0Y3BfY3Rhc2stPnhtc3RhdGUgfD0gWE1TVEFURV9TT0xfSERSOwogCV9fa2ZpZm9fcHV0KHRjcF9jdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKTsKLQlfX2tmaWZvX3B1dChjb25uLT54bWl0cXVldWUsICh2b2lkKikmY3Rhc2ssIHNpemVvZih2b2lkKikpOworCWxpc3RfbW92ZV90YWlsKCZjdGFzay0+cnVubmluZywgJmNvbm4tPnhtaXRxdWV1ZSk7CiAKIAlzY3NpX3F1ZXVlX3dvcmsoc2Vzc2lvbi0+aG9zdCwgJmNvbm4tPnhtaXR3b3JrKTsKIAljb25uLT5yMnRfcGR1c19jbnQrKzsKQEAgLTQ0NiwxMSArNDU2LDE0IEBACiAJfQogCiAJaWYgKGNvbm4tPmhkcmRnc3RfZW4pIHsKKwkJc3RydWN0IGhhc2hfZGVzYyBkZXNjOwogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKIAkJc2dfaW5pdF9vbmUoJnNnLCAodTggKiloZHIsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpICsgYWhzbGVuKTsKLQkJY3J5cHRvX2RpZ2VzdF9kaWdlc3QodGNwX2Nvbm4tPnJ4X3RmbSwgJnNnLCAxLCAodTggKikmY2Rnc3QpOworCQlkZXNjLnRmbSA9IHRjcF9jb25uLT5yeF90Zm07CisJCWRlc2MuZmxhZ3MgPSAwOworCQljcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZzZywgc2cubGVuZ3RoLCAodTggKikmY2Rnc3QpOwogCQlyZGdzdCA9ICoodWludDMyX3QqKSgoY2hhciopaGRyICsgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpICsKIAkJCQkgICAgIGFoc2xlbik7CiAJCWlmIChjZGdzdCAhPSByZGdzdCkgewpAQCAtNDc3LDYgKzQ5MCw4IEBACiAJY2FzZSBJU0NTSV9PUF9TQ1NJX0RBVEFfSU46CiAJCXRjcF9jb25uLT5pbi5jdGFzayA9IHNlc3Npb24tPmNtZHNbaXR0XTsKIAkJcmMgPSBpc2NzaV9kYXRhX3JzcChjb25uLCB0Y3BfY29ubi0+aW4uY3Rhc2spOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgSVNDU0lfT1BfU0NTSV9DTURfUlNQOgogCQl0Y3BfY29ubi0+aW4uY3Rhc2sgPSBzZXNzaW9uLT5jbWRzW2l0dF07CkBAIC00ODQsNyArNDk5LDcgQEAKIAkJCWdvdG8gY29weV9oZHI7CiAKIAkJc3Bpbl9sb2NrKCZzZXNzaW9uLT5sb2NrKTsKLQkJX19pc2NzaV9jdGFza19jbGVhbnVwKGNvbm4sIHRjcF9jb25uLT5pbi5jdGFzayk7CisJCWlzY3NpX3RjcF9jbGVhbnVwX2N0YXNrKGNvbm4sIHRjcF9jb25uLT5pbi5jdGFzayk7CiAJCXJjID0gX19pc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgaGRyLCBOVUxMLCAwKTsKIAkJc3Bpbl91bmxvY2soJnNlc3Npb24tPmxvY2spOwogCQlicmVhazsKQEAgLTUwMCwxMyArNTE1LDI4IEBACiAJCWJyZWFrOwogCWNhc2UgSVNDU0lfT1BfTE9HSU5fUlNQOgogCWNhc2UgSVNDU0lfT1BfVEVYVF9SU1A6Ci0JY2FzZSBJU0NTSV9PUF9MT0dPVVRfUlNQOgotCWNhc2UgSVNDU0lfT1BfTk9PUF9JTjoKIAljYXNlIElTQ1NJX09QX1JFSkVDVDoKIAljYXNlIElTQ1NJX09QX0FTWU5DX0VWRU5UOgorCQkvKgorCQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGNvdWxkIGdldCBhIFBEVSB3aXRoIGEgYnVmZmVyIGxhcmdlcgorCQkgKiB0aGFuIDhLLCBidXQgdGhlcmUgYXJlIG5vIHRhcmdldHMgdGhhdCBjdXJyZW50bHkgZG8gdGhpcy4KKwkJICogRm9yIG5vdyB3ZSBmYWlsIHVudGlsIHdlIGZpbmQgYSB2ZW5kb3IgdGhhdCBuZWVkcyBpdAorCQkgKi8KKwkJaWYgKERFRkFVTFRfTUFYX1JFQ1ZfREFUQV9TRUdNRU5UX0xFTkdUSCA8CisJCSAgICB0Y3BfY29ubi0+aW4uZGF0YWxlbikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpc2NzaV90Y3A6IHJlY2VpdmVkIGJ1ZmZlciBvZiBsZW4gJXUgIgorCQkJICAgICAgImJ1dCBjb25uIGJ1ZmZlciBpcyBvbmx5ICV1IChvcGNvZGUgJTB4KVxuIiwKKwkJCSAgICAgIHRjcF9jb25uLT5pbi5kYXRhbGVuLAorCQkJICAgICAgREVGQVVMVF9NQVhfUkVDVl9EQVRBX1NFR01FTlRfTEVOR1RILCBvcGNvZGUpOworCQkJcmMgPSBJU0NTSV9FUlJfUFJPVE87CisJCQlicmVhazsKKwkJfQorCiAJCWlmICh0Y3BfY29ubi0+aW4uZGF0YWxlbikKIAkJCWdvdG8gY29weV9oZHI7CiAJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBJU0NTSV9PUF9MT0dPVVRfUlNQOgorCWNhc2UgSVNDU0lfT1BfTk9PUF9JTjoKIAljYXNlIElTQ1NJX09QX1NDU0lfVE1GVU5DX1JTUDoKIAkJcmMgPSBpc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgaGRyLCBOVUxMLCAwKTsKIAkJYnJlYWs7CkBAIC01MjMsNyArNTUzLDcgQEAKIAkgKiBza2JzIHRvIGNvbXBsZXRlIHRoZSBjb21tYW5kIHRoZW4gd2UgaGF2ZSB0byBjb3B5IHRoZSBoZWFkZXIKIAkgKiBmb3IgbGF0ZXIgdXNlCiAJICovCi0JaWYgKHRjcF9jb25uLT5pbi56ZXJvX2NvcHlfaGRyICYmIHRjcF9jb25uLT5pbi5jb3B5IDwKKwlpZiAodGNwX2Nvbm4tPmluLnplcm9fY29weV9oZHIgJiYgdGNwX2Nvbm4tPmluLmNvcHkgPD0KIAkgICAodGNwX2Nvbm4tPmluLmRhdGFsZW4gKyB0Y3BfY29ubi0+aW4ucGFkZGluZyArCiAJICAgIChjb25uLT5kYXRhZGdzdF9lbiA/IDQgOiAwKSkpIHsKIAkJZGVidWdfdGNwKCJDb3B5aW5nIGhlYWRlciBmb3IgbGF0ZXIgdXNlLiBpbi5jb3B5ICVkIGluLmRhdGFsZW4iCkBAIC02MTQsOSArNjQ0LDkgQEAKICAqCWJ5dGUgY291bnRlcnMuCiAgKiovCiBzdGF0aWMgaW5saW5lIGludAotaXNjc2lfdGNwX2NvcHkoc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubikKK2lzY3NpX3RjcF9jb3B5KHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQogewotCXZvaWQgKmJ1ZiA9IHRjcF9jb25uLT5kYXRhOworCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCWludCBidWZfc2l6ZSA9IHRjcF9jb25uLT5pbi5kYXRhbGVuOwogCWludCBidWZfbGVmdCA9IGJ1Zl9zaXplIC0gdGNwX2Nvbm4tPmRhdGFfY29waWVkOwogCWludCBzaXplID0gbWluKHRjcF9jb25uLT5pbi5jb3B5LCBidWZfbGVmdCk7CkBAIC02MjcsNyArNjU3LDcgQEAKIAlCVUdfT04oc2l6ZSA8PSAwKTsKIAogCXJjID0gc2tiX2NvcHlfYml0cyh0Y3BfY29ubi0+aW4uc2tiLCB0Y3BfY29ubi0+aW4ub2Zmc2V0LAotCQkJICAgKGNoYXIqKWJ1ZiArIHRjcF9jb25uLT5kYXRhX2NvcGllZCwgc2l6ZSk7CisJCQkgICAoY2hhciopY29ubi0+ZGF0YSArIHRjcF9jb25uLT5kYXRhX2NvcGllZCwgc2l6ZSk7CiAJQlVHX09OKHJjKTsKIAogCXRjcF9jb25uLT5pbi5vZmZzZXQgKz0gc2l6ZTsKQEAgLTY1MCw3ICs2ODAsNyBAQAogCW1lbWNweSgmdGVtcCwgc2csIHNpemVvZihzdHJ1Y3Qgc2NhdHRlcmxpc3QpKTsKIAl0ZW1wLm9mZnNldCA9IG9mZnNldDsKIAl0ZW1wLmxlbmd0aCA9IGxlbmd0aDsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubi0+ZGF0YV9yeF90Zm0sICZ0ZW1wLCAxKTsKKwljcnlwdG9faGFzaF91cGRhdGUoJnRjcF9jb25uLT5kYXRhX3J4X2hhc2gsICZ0ZW1wLCBsZW5ndGgpOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNjU5LDcgKzY4OSw3IEBACiAJc3RydWN0IHNjYXR0ZXJsaXN0IHRtcDsKIAogCXNnX2luaXRfb25lKCZ0bXAsIGJ1ZiwgbGVuKTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubi0+ZGF0YV9yeF90Zm0sICZ0bXAsIDEpOworCWNyeXB0b19oYXNoX3VwZGF0ZSgmdGNwX2Nvbm4tPmRhdGFfcnhfaGFzaCwgJnRtcCwgbGVuKTsKIH0KIAogc3RhdGljIGludCBpc2NzaV9zY3NpX2RhdGFfaW4oc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCkBAIC03MTMsOSArNzQzLDkgQEAKIAkJaWYgKCFyYykgewogCQkJaWYgKGNvbm4tPmRhdGFkZ3N0X2VuKSB7CiAJCQkJaWYgKCFvZmZzZXQpCi0JCQkJCWNyeXB0b19kaWdlc3RfdXBkYXRlKAotCQkJCQkJCXRjcF9jb25uLT5kYXRhX3J4X3RmbSwKLQkJCQkJCQkmc2dbaV0sIDEpOworCQkJCQljcnlwdG9faGFzaF91cGRhdGUoCisJCQkJCQkJJnRjcF9jb25uLT5kYXRhX3J4X2hhc2gsCisJCQkJCQkJJnNnW2ldLCBzZ1tpXS5sZW5ndGgpOwogCQkJCWVsc2UKIAkJCQkJcGFydGlhbF9zZ19kaWdlc3RfdXBkYXRlKHRjcF9jb25uLAogCQkJCQkJCSZzZ1tpXSwKQEAgLTc0NSwxMCArNzc1LDExIEBACiBkb25lOgogCS8qIGNoZWNrIGZvciBub24tZXhjZXB0aW9uYWwgc3RhdHVzICovCiAJaWYgKHRjcF9jb25uLT5pbi5oZHItPmZsYWdzICYgSVNDU0lfRkxBR19EQVRBX1NUQVRVUykgewotCQlkZWJ1Z19zY3NpKCJkb25lIFtzYyAlbHggcmVzICVkIGl0dCAweCV4XVxuIiwKLQkJCSAgIChsb25nKXNjLCBzYy0+cmVzdWx0LCBjdGFzay0+aXR0KTsKKwkJZGVidWdfc2NzaSgiZG9uZSBbc2MgJWx4IHJlcyAlZCBpdHQgMHgleCBmbGFncyAweCV4XVxuIiwKKwkJCSAgIChsb25nKXNjLCBzYy0+cmVzdWx0LCBjdGFzay0+aXR0LAorCQkJICAgdGNwX2Nvbm4tPmluLmhkci0+ZmxhZ3MpOwogCQlzcGluX2xvY2soJmNvbm4tPnNlc3Npb24tPmxvY2spOwotCQlfX2lzY3NpX2N0YXNrX2NsZWFudXAoY29ubiwgY3Rhc2spOworCQlpc2NzaV90Y3BfY2xlYW51cF9jdGFzayhjb25uLCBjdGFzayk7CiAJCV9faXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIHRjcF9jb25uLT5pbi5oZHIsIE5VTEwsIDApOwogCQlzcGluX3VubG9jaygmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJfQpAQCAtNzY5LDI2ICs4MDAsMjUgQEAKIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9PUF9TQ1NJX0NNRF9SU1A6CiAJCXNwaW5fbG9jaygmY29ubi0+c2Vzc2lvbi0+bG9jayk7Ci0JCV9faXNjc2lfY3Rhc2tfY2xlYW51cChjb25uLCB0Y3BfY29ubi0+aW4uY3Rhc2spOworCQlpc2NzaV90Y3BfY2xlYW51cF9jdGFzayhjb25uLCB0Y3BfY29ubi0+aW4uY3Rhc2spOwogCQlzcGluX3VubG9jaygmY29ubi0+c2Vzc2lvbi0+bG9jayk7CiAJY2FzZSBJU0NTSV9PUF9URVhUX1JTUDoKIAljYXNlIElTQ1NJX09QX0xPR0lOX1JTUDoKLQljYXNlIElTQ1NJX09QX05PT1BfSU46CiAJY2FzZSBJU0NTSV9PUF9BU1lOQ19FVkVOVDoKIAljYXNlIElTQ1NJX09QX1JFSkVDVDoKIAkJLyoKIAkJICogQ29sbGVjdCBkYXRhIHNlZ21lbnQgdG8gdGhlIGNvbm5lY3Rpb24ncyBkYXRhCiAJCSAqIHBsYWNlaG9sZGVyCiAJCSAqLwotCQlpZiAoaXNjc2lfdGNwX2NvcHkodGNwX2Nvbm4pKSB7CisJCWlmIChpc2NzaV90Y3BfY29weShjb25uKSkgewogCQkJcmMgPSAtRUFHQUlOOwogCQkJZ290byBleGl0OwogCQl9CiAKLQkJcmMgPSBpc2NzaV9jb21wbGV0ZV9wZHUoY29ubiwgdGNwX2Nvbm4tPmluLmhkciwgdGNwX2Nvbm4tPmRhdGEsCisJCXJjID0gaXNjc2lfY29tcGxldGVfcGR1KGNvbm4sIHRjcF9jb25uLT5pbi5oZHIsIGNvbm4tPmRhdGEsCiAJCQkJCXRjcF9jb25uLT5pbi5kYXRhbGVuKTsKIAkJaWYgKCFyYyAmJiBjb25uLT5kYXRhZGdzdF9lbiAmJiBvcGNvZGUgIT0gSVNDU0lfT1BfTE9HSU5fUlNQKQotCQkJaXNjc2lfcmVjdl9kaWdlc3RfdXBkYXRlKHRjcF9jb25uLCB0Y3BfY29ubi0+ZGF0YSwKKwkJCWlzY3NpX3JlY3ZfZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubiwgY29ubi0+ZGF0YSwKIAkJCSAgCQkJdGNwX2Nvbm4tPmluLmRhdGFsZW4pOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtODQzLDcgKzg3Myw3IEBACiAJCSAgICAgICBpZiAocmMgPT0gLUVBR0FJTikKIAkJCQlnb3RvIG5vbW9yZTsKIAkJICAgICAgIGVsc2UgewotCQkJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCByYyk7CisJCQkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCQkJcmV0dXJuIDA7CiAJCSAgICAgICB9CiAJCX0KQEAgLTg1NCw4ICs4ODQsNyBAQAogCQlyYyA9IGlzY3NpX3RjcF9oZHJfcmVjdihjb25uKTsKIAkJaWYgKCFyYyAmJiB0Y3BfY29ubi0+aW4uZGF0YWxlbikgewogCQkJaWYgKGNvbm4tPmRhdGFkZ3N0X2VuKSB7Ci0JCQkJQlVHX09OKCF0Y3BfY29ubi0+ZGF0YV9yeF90Zm0pOwotCQkJCWNyeXB0b19kaWdlc3RfaW5pdCh0Y3BfY29ubi0+ZGF0YV9yeF90Zm0pOworCQkJCWNyeXB0b19oYXNoX2luaXQoJnRjcF9jb25uLT5kYXRhX3J4X2hhc2gpOwogCQkJfQogCQkJdGNwX2Nvbm4tPmluX3Byb2dyZXNzID0gSU5fUFJPR1JFU1NfREFUQV9SRUNWOwogCQl9IGVsc2UgaWYgKHJjKSB7CkBAIC04OTcsNyArOTI2LDcgQEAKIAkJaWYgKHJjKSB7CiAJCQlpZiAocmMgPT0gLUVBR0FJTikKIAkJCQlnb3RvIGFnYWluOwotCQkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIHJjKTsKKwkJCWlzY3NpX2Nvbm5fZmFpbHVyZShjb25uLCBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJdGNwX2Nvbm4tPmluLmNvcHkgLT0gdGNwX2Nvbm4tPmluLnBhZGRpbmc7CkBAIC05MDgsMTEgKzkzNywxMSBAQAogCQkJCQkgIHRjcF9jb25uLT5pbi5wYWRkaW5nKTsKIAkJCQltZW1zZXQocGFkLCAwLCB0Y3BfY29ubi0+aW4ucGFkZGluZyk7CiAJCQkJc2dfaW5pdF9vbmUoJnNnLCBwYWQsIHRjcF9jb25uLT5pbi5wYWRkaW5nKTsKLQkJCQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubi0+ZGF0YV9yeF90Zm0sCi0JCQkJCQkgICAgICZzZywgMSk7CisJCQkJY3J5cHRvX2hhc2hfdXBkYXRlKCZ0Y3BfY29ubi0+ZGF0YV9yeF9oYXNoLAorCQkJCQkJICAgJnNnLCBzZy5sZW5ndGgpOwogCQkJfQotCQkJY3J5cHRvX2RpZ2VzdF9maW5hbCh0Y3BfY29ubi0+ZGF0YV9yeF90Zm0sCi0JCQkJCSAgICAodTggKikgJiB0Y3BfY29ubi0+aW4uZGF0YWRnc3QpOworCQkJY3J5cHRvX2hhc2hfZmluYWwoJnRjcF9jb25uLT5kYXRhX3J4X2hhc2gsCisJCQkJCSAgKHU4ICopJnRjcF9jb25uLT5pbi5kYXRhZGdzdCk7CiAJCQlkZWJ1Z190Y3AoInJ4IGRpZ2VzdCAweCV4XG4iLCB0Y3BfY29ubi0+aW4uZGF0YWRnc3QpOwogCQkJdGNwX2Nvbm4tPmluX3Byb2dyZXNzID0gSU5fUFJPR1JFU1NfRERJR0VTVF9SRUNWOwogCQl9IGVsc2UKQEAgLTEwMjgsOSArMTA1Nyw4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1pc2NzaV9jb25uX3Jlc3RvcmVfY2FsbGJhY2tzKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQoraXNjc2lfY29ubl9yZXN0b3JlX2NhbGxiYWNrcyhzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uKQogewotCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwogCXN0cnVjdCBzb2NrICpzayA9IHRjcF9jb25uLT5zb2NrLT5zazsKIAogCS8qIHJlc3RvcmUgc29ja2V0IGNhbGxiYWNrcywgc2VlIGFsc286IGlzY3NpX2Nvbm5fc2V0X2NhbGxiYWNrcygpICovCkBAIC0xMTU5LDggKzExODcsNyBAQAogewogCXN0cnVjdCBpc2NzaV90Y3BfY21kX3Rhc2sgKnRjcF9jdGFzayA9IGN0YXNrLT5kZF9kYXRhOwogCi0JQlVHX09OKCF0Y3BfY29ubi0+ZGF0YV90eF90Zm0pOwotCWNyeXB0b19kaWdlc3RfaW5pdCh0Y3BfY29ubi0+ZGF0YV90eF90Zm0pOworCWNyeXB0b19oYXNoX2luaXQoJnRjcF9jb25uLT5kYXRhX3R4X2hhc2gpOwogCXRjcF9jdGFzay0+ZGlnZXN0X2NvdW50ID0gNDsKIH0KIApAQCAtMTE3NCw3ICsxMjAxLDcgQEAKIAlpbnQgc2VudCA9IDA7CiAKIAlpZiAoZmluYWwpCi0JCWNyeXB0b19kaWdlc3RfZmluYWwodGNwX2Nvbm4tPmRhdGFfdHhfdGZtLCAodTgqKWRpZ2VzdCk7CisJCWNyeXB0b19oYXNoX2ZpbmFsKCZ0Y3BfY29ubi0+ZGF0YV90eF9oYXNoLCAodTggKilkaWdlc3QpOwogCiAJaXNjc2lfYnVmX2luaXRfaW92KGJ1ZiwgKGNoYXIqKWRpZ2VzdCwgNCk7CiAJcmMgPSBpc2NzaV9zZW5kcGFnZShjb25uLCBidWYsICZ0Y3BfY3Rhc2stPmRpZ2VzdF9jb3VudCwgJnNlbnQpOwpAQCAtMTMwOCw3ICsxMzM1LDcgQEAKIAkJCQkgICAgY3Rhc2stPmltbV9jb3VudCAtCiAJCQkJICAgIGN0YXNrLT51bnNvbF9jb3VudDsKIAotCQlkZWJ1Z19zY3NpKCJjbWQgW2l0dCAleCB0b3RhbCAlZCBpbW0gJWQgaW1tX2RhdGEgJWQgIgorCQlkZWJ1Z19zY3NpKCJjbWQgW2l0dCAweCV4IHRvdGFsICVkIGltbSAlZCBpbW1fZGF0YSAlZCAiCiAJCQkgICAicjJ0X2RhdGEgJWRdXG4iLAogCQkJICAgY3Rhc2stPml0dCwgY3Rhc2stPnRvdGFsX2xlbmd0aCwgY3Rhc2stPmltbV9jb3VudCwKIAkJCSAgIGN0YXNrLT51bnNvbF9jb3VudCwgdGNwX2N0YXNrLT5yMnRfZGF0YV9jb3VudCk7CkBAIC0xNDY5LDE2ICsxNDk2LDE3IEBACiAJCWlmIChyYykgewogCQkJdGNwX2N0YXNrLT54bXN0YXRlIHw9IFhNU1RBVEVfSU1NX0RBVEE7CiAJCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4pIHsKLQkJCQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRjcF9jb25uLT5kYXRhX3R4X3RmbSwKLQkJCQkJCSh1OCopJnRjcF9jdGFzay0+aW1tZGlnZXN0KTsKKwkJCQljcnlwdG9faGFzaF9maW5hbCgmdGNwX2Nvbm4tPmRhdGFfdHhfaGFzaCwKKwkJCQkJCSAgKHU4ICopJnRjcF9jdGFzay0+aW1tZGlnZXN0KTsKIAkJCQlkZWJ1Z190Y3AoInR4IGltbSBzZW5kcGFnZSBmYWlsIDB4JXhcbiIsCiAJCQkJCSAgdGNwX2N0YXNrLT5kYXRhZGlnZXN0KTsKIAkJCX0KIAkJCXJldHVybiByYzsKIAkJfQogCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4pCi0JCQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubi0+ZGF0YV90eF90Zm0sCi0JCQkJCSAgICAgJnRjcF9jdGFzay0+c2VuZGJ1Zi5zZywgMSk7CisJCQljcnlwdG9faGFzaF91cGRhdGUoJnRjcF9jb25uLT5kYXRhX3R4X2hhc2gsCisJCQkJCSAgICZ0Y3BfY3Rhc2stPnNlbmRidWYuc2csCisJCQkJCSAgIHRjcF9jdGFzay0+c2VuZGJ1Zi5zZy5sZW5ndGgpOwogCiAJCWlmICghY3Rhc2stPmltbV9jb3VudCkKIAkJCWJyZWFrOwpAQCAtMTU1NSw4ICsxNTgzLDggQEAKIAkJCXRjcF9jdGFzay0+eG1zdGF0ZSB8PSBYTVNUQVRFX1VOU19EQVRBOwogCQkJLyogd2lsbCBjb250aW51ZSB3aXRoIHRoaXMgY3Rhc2sgbGF0ZXIuLiAqLwogCQkJaWYgKGNvbm4tPmRhdGFkZ3N0X2VuKSB7Ci0JCQkJY3J5cHRvX2RpZ2VzdF9maW5hbCh0Y3BfY29ubi0+ZGF0YV90eF90Zm0sCi0JCQkJCQkodTggKikmZHRhc2stPmRpZ2VzdCk7CisJCQkJY3J5cHRvX2hhc2hfZmluYWwoJnRjcF9jb25uLT5kYXRhX3R4X2hhc2gsCisJCQkJCQkgICh1OCAqKSZkdGFzay0+ZGlnZXN0KTsKIAkJCQlkZWJ1Z190Y3AoInR4IHVucyBkYXRhIGZhaWwgMHgleFxuIiwKIAkJCQkJICBkdGFzay0+ZGlnZXN0KTsKIAkJCX0KQEAgLTE1NzEsOCArMTU5OSw5IEBACiAJCSAqIHNvIHBhc3MgaXQKIAkJICovCiAJCWlmIChjb25uLT5kYXRhZGdzdF9lbiAmJiB0Y3BfY3Rhc2stPnNlbnQgLSBzdGFydCA+IDApCi0JCQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubi0+ZGF0YV90eF90Zm0sCi0JCQkJCSAgICAgJnRjcF9jdGFzay0+c2VuZGJ1Zi5zZywgMSk7CisJCQljcnlwdG9faGFzaF91cGRhdGUoJnRjcF9jb25uLT5kYXRhX3R4X2hhc2gsCisJCQkJCSAgICZ0Y3BfY3Rhc2stPnNlbmRidWYuc2csCisJCQkJCSAgIHRjcF9jdGFzay0+c2VuZGJ1Zi5zZy5sZW5ndGgpOwogCiAJCWlmICghY3Rhc2stPmRhdGFfY291bnQpCiAJCQlicmVhazsKQEAgLTE2MzYsNyArMTY2NSw3IEBACiAJfQogc29saWNpdF9hZ2FpbjoKIAkvKgotCSAqIHNlbmQgRGF0YS1PdXQgd2hpdG5pbiB0aGlzIFIyVCBzZXF1ZW5jZS4KKwkgKiBzZW5kIERhdGEtT3V0IHdpdGhpbiB0aGlzIFIyVCBzZXF1ZW5jZS4KIAkgKi8KIAlpZiAoIXIydC0+ZGF0YV9jb3VudCkKIAkJZ290byBkYXRhX291dF9kb25lOwpAQCAtMTY0Niw3ICsxNjc1LDcgQEAKIAkJdGNwX2N0YXNrLT54bXN0YXRlIHw9IFhNU1RBVEVfU09MX0RBVEE7CiAJCS8qIHdpbGwgY29udGludWUgd2l0aCB0aGlzIGN0YXNrIGxhdGVyLi4gKi8KIAkJaWYgKGNvbm4tPmRhdGFkZ3N0X2VuKSB7Ci0JCQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRjcF9jb25uLT5kYXRhX3R4X3RmbSwKKwkJCWNyeXB0b19oYXNoX2ZpbmFsKCZ0Y3BfY29ubi0+ZGF0YV90eF9oYXNoLAogCQkJCQkgICh1OCAqKSZkdGFzay0+ZGlnZXN0KTsKIAkJCWRlYnVnX3RjcCgicjJ0IGRhdGEgc2VuZCBmYWlsIDB4JXhcbiIsIGR0YXNrLT5kaWdlc3QpOwogCQl9CkBAIC0xNjU1LDggKzE2ODQsOCBAQAogCiAJQlVHX09OKHIydC0+ZGF0YV9jb3VudCA8IDApOwogCWlmIChjb25uLT5kYXRhZGdzdF9lbikKLQkJY3J5cHRvX2RpZ2VzdF91cGRhdGUodGNwX2Nvbm4tPmRhdGFfdHhfdGZtLCAmcjJ0LT5zZW5kYnVmLnNnLAotCQkJCSAgICAgMSk7CisJCWNyeXB0b19oYXNoX3VwZGF0ZSgmdGNwX2Nvbm4tPmRhdGFfdHhfaGFzaCwgJnIydC0+c2VuZGJ1Zi5zZywKKwkJCQkgICByMnQtPnNlbmRidWYuc2cubGVuZ3RoKTsKIAogCWlmIChyMnQtPmRhdGFfY291bnQpIHsKIAkJQlVHX09OKGN0YXNrLT5zYy0+dXNlX3NnID09IDApOwpAQCAtMTczMSw3ICsxNzYwLDcgQEAKIAlzdHJ1Y3QgaXNjc2lfdGNwX2NtZF90YXNrICp0Y3BfY3Rhc2sgPSBjdGFzay0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfdGNwX2Nvbm4gKnRjcF9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfZGF0YV90YXNrICpkdGFzayA9IHRjcF9jdGFzay0+ZHRhc2s7Ci0JaW50IHNlbnQsIHJjOworCWludCBzZW50ID0gMCwgcmM7CiAKIAl0Y3BfY3Rhc2stPnhtc3RhdGUgJj0gflhNU1RBVEVfV19QQUQ7CiAJaXNjc2lfYnVmX2luaXRfaW92KCZ0Y3BfY3Rhc2stPnNlbmRidWYsIChjaGFyKikmdGNwX2N0YXNrLT5wYWQsCkBAIC0xNzQ0LDggKzE3NzMsOSBAQAogCX0KIAogCWlmIChjb25uLT5kYXRhZGdzdF9lbikgewotCQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Y3BfY29ubi0+ZGF0YV90eF90Zm0sCi0JCQkJICAgICAmdGNwX2N0YXNrLT5zZW5kYnVmLnNnLCAxKTsKKwkJY3J5cHRvX2hhc2hfdXBkYXRlKCZ0Y3BfY29ubi0+ZGF0YV90eF9oYXNoLAorCQkJCSAgICZ0Y3BfY3Rhc2stPnNlbmRidWYuc2csCisJCQkJICAgdGNwX2N0YXNrLT5zZW5kYnVmLnNnLmxlbmd0aCk7CiAJCS8qIGltbSBkYXRhPyAqLwogCQlpZiAoIWR0YXNrKSB7CiAJCQlyYyA9IGlzY3NpX2RpZ2VzdF9maW5hbF9zZW5kKGNvbm4sIGN0YXNrLApAQCAtMTkwMCwyNyArMTkzMCwzMiBAQAogCXRjcF9jb25uLT5pbl9wcm9ncmVzcyA9IElOX1BST0dSRVNTX1dBSVRfSEVBREVSOwogCS8qIGluaXRpYWwgb3BlcmF0aW9uYWwgcGFyYW1ldGVycyAqLwogCXRjcF9jb25uLT5oZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKTsKLQl0Y3BfY29ubi0+ZGF0YV9zaXplID0gREVGQVVMVF9NQVhfUkVDVl9EQVRBX1NFR01FTlRfTEVOR1RIOwotCi0JLyogYWxsb2NhdGUgaW5pdGlhbCBQRFUgcmVjZWl2ZSBwbGFjZSBob2xkZXIgKi8KLQlpZiAodGNwX2Nvbm4tPmRhdGFfc2l6ZSA8PSBQQUdFX1NJWkUpCi0JCXRjcF9jb25uLT5kYXRhID0ga21hbGxvYyh0Y3BfY29ubi0+ZGF0YV9zaXplLCBHRlBfS0VSTkVMKTsKLQllbHNlCi0JCXRjcF9jb25uLT5kYXRhID0gKHZvaWQqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwKLQkJCQkJZ2V0X29yZGVyKHRjcF9jb25uLT5kYXRhX3NpemUpKTsKLQlpZiAoIXRjcF9jb25uLT5kYXRhKQotCQlnb3RvIG1heF9yZWN2X2RsZW5naHRfYWxsb2NfZmFpbDsKIAogCXJldHVybiBjbHNfY29ubjsKIAotbWF4X3JlY3ZfZGxlbmdodF9hbGxvY19mYWlsOgotCWtmcmVlKHRjcF9jb25uKTsKIHRjcF9jb25uX2FsbG9jX2ZhaWw6CiAJaXNjc2lfY29ubl90ZWFyZG93bihjbHNfY29ubik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkCitpc2NzaV90Y3BfcmVsZWFzZV9jb25uKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQoreworCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOworCisJaWYgKCF0Y3BfY29ubi0+c29jaykKKwkJcmV0dXJuOworCisJc29ja19ob2xkKHRjcF9jb25uLT5zb2NrLT5zayk7CisJaXNjc2lfY29ubl9yZXN0b3JlX2NhbGxiYWNrcyh0Y3BfY29ubik7CisJc29ja19wdXQodGNwX2Nvbm4tPnNvY2stPnNrKTsKKworCXNvY2tfcmVsZWFzZSh0Y3BfY29ubi0+c29jayk7CisJdGNwX2Nvbm4tPnNvY2sgPSBOVUxMOworCWNvbm4tPnJlY3ZfbG9jayA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCiBpc2NzaV90Y3BfY29ubl9kZXN0cm95KHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4pCiB7CiAJc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4gPSBjbHNfY29ubi0+ZGRfZGF0YTsKQEAgLTE5MzAsMjkgKzE5NjUsMzMgQEAKIAlpZiAoY29ubi0+aGRyZGdzdF9lbiB8fCBjb25uLT5kYXRhZGdzdF9lbikKIAkJZGlnZXN0ID0gMTsKIAorCWlzY3NpX3RjcF9yZWxlYXNlX2Nvbm4oY29ubik7CiAJaXNjc2lfY29ubl90ZWFyZG93bihjbHNfY29ubik7CiAKIAkvKiBub3cgZnJlZSB0Y3BfY29ubiAqLwogCWlmIChkaWdlc3QpIHsKIAkJaWYgKHRjcF9jb25uLT50eF90Zm0pCi0JCQljcnlwdG9fZnJlZV90Zm0odGNwX2Nvbm4tPnR4X3RmbSk7CisJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT50eF90Zm0pOwogCQlpZiAodGNwX2Nvbm4tPnJ4X3RmbSkKLQkJCWNyeXB0b19mcmVlX3RmbSh0Y3BfY29ubi0+cnhfdGZtKTsKLQkJaWYgKHRjcF9jb25uLT5kYXRhX3R4X3RmbSkKLQkJCWNyeXB0b19mcmVlX3RmbSh0Y3BfY29ubi0+ZGF0YV90eF90Zm0pOwotCQlpZiAodGNwX2Nvbm4tPmRhdGFfcnhfdGZtKQotCQkJY3J5cHRvX2ZyZWVfdGZtKHRjcF9jb25uLT5kYXRhX3J4X3RmbSk7CisJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT5yeF90Zm0pOworCQlpZiAodGNwX2Nvbm4tPmRhdGFfdHhfaGFzaC50Zm0pCisJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT5kYXRhX3R4X2hhc2gudGZtKTsKKwkJaWYgKHRjcF9jb25uLT5kYXRhX3J4X2hhc2gudGZtKQorCQkJY3J5cHRvX2ZyZWVfaGFzaCh0Y3BfY29ubi0+ZGF0YV9yeF9oYXNoLnRmbSk7CiAJfQogCi0JLyogZnJlZSBjb25uLT5kYXRhLCBzaXplID0gTWF4UmVjdkRhdGFTZWdtZW50TGVuZ3RoICovCi0JaWYgKHRjcF9jb25uLT5kYXRhX3NpemUgPD0gUEFHRV9TSVpFKQotCQlrZnJlZSh0Y3BfY29ubi0+ZGF0YSk7Ci0JZWxzZQotCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXRjcF9jb25uLT5kYXRhLAotCQkJICAgZ2V0X29yZGVyKHRjcF9jb25uLT5kYXRhX3NpemUpKTsKIAlrZnJlZSh0Y3BfY29ubik7CiB9CiAKK3N0YXRpYyB2b2lkCitpc2NzaV90Y3BfY29ubl9zdG9wKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIGludCBmbGFnKQoreworCXN0cnVjdCBpc2NzaV9jb25uICpjb25uID0gY2xzX2Nvbm4tPmRkX2RhdGE7CisKKwlpc2NzaV9jb25uX3N0b3AoY2xzX2Nvbm4sIGZsYWcpOworCWlzY3NpX3RjcF9yZWxlYXNlX2Nvbm4oY29ubik7Cit9CisKIHN0YXRpYyBpbnQKIGlzY3NpX3RjcF9jb25uX2JpbmQoc3RydWN0IGlzY3NpX2Nsc19zZXNzaW9uICpjbHNfc2Vzc2lvbiwKIAkJICAgIHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY2xzX2Nvbm4sIHVpbnQ2NF90IHRyYW5zcG9ydF9lcGgsCkBAIC0yMDAxLDUyICsyMDQwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLWlzY3NpX3RjcF9jbGVhbnVwX2N0YXNrKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKmN0YXNrKQotewotCXN0cnVjdCBpc2NzaV90Y3BfY21kX3Rhc2sgKnRjcF9jdGFzayA9IGN0YXNrLT5kZF9kYXRhOwotCXN0cnVjdCBpc2NzaV9yMnRfaW5mbyAqcjJ0OwotCi0JLyogZmx1c2ggY3Rhc2sncyByMnQgcXVldWVzICovCi0Jd2hpbGUgKF9fa2ZpZm9fZ2V0KHRjcF9jdGFzay0+cjJ0cXVldWUsICh2b2lkKikmcjJ0LCBzaXplb2Yodm9pZCopKSkKLQkJX19rZmlmb19wdXQodGNwX2N0YXNrLT5yMnRwb29sLnF1ZXVlLCAodm9pZCopJnIydCwKLQkJCSAgICBzaXplb2Yodm9pZCopKTsKLQotCV9faXNjc2lfY3Rhc2tfY2xlYW51cChjb25uLCBjdGFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pc2NzaV90Y3Bfc3VzcGVuZF9jb25uX3J4KHN0cnVjdCBpc2NzaV9jb25uICpjb25uKQotewotCXN0cnVjdCBpc2NzaV90Y3BfY29ubiAqdGNwX2Nvbm4gPSBjb25uLT5kZF9kYXRhOwotCXN0cnVjdCBzb2NrICpzazsKLQotCWlmICghdGNwX2Nvbm4tPnNvY2spCi0JCXJldHVybjsKLQotCXNrID0gdGNwX2Nvbm4tPnNvY2stPnNrOwotCXdyaXRlX2xvY2tfYmgoJnNrLT5za19jYWxsYmFja19sb2NrKTsKLQlzZXRfYml0KElTQ1NJX1NVU1BFTkRfQklULCAmY29ubi0+c3VzcGVuZF9yeCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZzay0+c2tfY2FsbGJhY2tfbG9jayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pc2NzaV90Y3BfdGVybWluYXRlX2Nvbm4oc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCi17Ci0Jc3RydWN0IGlzY3NpX3RjcF9jb25uICp0Y3BfY29ubiA9IGNvbm4tPmRkX2RhdGE7Ci0KLQlpZiAoIXRjcF9jb25uLT5zb2NrKQotCQlyZXR1cm47Ci0KLQlzb2NrX2hvbGQodGNwX2Nvbm4tPnNvY2stPnNrKTsKLQlpc2NzaV9jb25uX3Jlc3RvcmVfY2FsbGJhY2tzKGNvbm4pOwotCXNvY2tfcHV0KHRjcF9jb25uLT5zb2NrLT5zayk7Ci0KLQlzb2NrX3JlbGVhc2UodGNwX2Nvbm4tPnNvY2spOwotCXRjcF9jb25uLT5zb2NrID0gTlVMTDsKLQljb25uLT5yZWN2X2xvY2sgPSBOVUxMOwotfQotCiAvKiBjYWxsZWQgd2l0aCBob3N0IGxvY2sgKi8KIHN0YXRpYyB2b2lkCiBpc2NzaV90Y3BfbWdtdF9pbml0KHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfbWdtdF90YXNrICptdGFzaywKQEAgLTIwNTcsNiArMjA1MCw3IEBACiAJaXNjc2lfYnVmX2luaXRfaW92KCZ0Y3BfbXRhc2stPmhlYWRidWYsIChjaGFyKiltdGFzay0+aGRyLAogCQkJICAgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpKTsKIAl0Y3BfbXRhc2stPnhtc3RhdGUgPSBYTVNUQVRFX0lNTV9IRFI7CisJdGNwX210YXNrLT5zZW50ID0gMDsKIAogCWlmIChtdGFzay0+ZGF0YV9jb3VudCkKIAkJaXNjc2lfYnVmX2luaXRfaW92KCZ0Y3BfbXRhc2stPnNlbmRidWYsIChjaGFyKiltdGFzay0+ZGF0YSwKQEAgLTIxMzgsODMgKzIxMzIsNTQgQEAKIAlpbnQgdmFsdWU7CiAKIAlzd2l0Y2gocGFyYW0pIHsKLQljYXNlIElTQ1NJX1BBUkFNX01BWF9SRUNWX0RMRU5HVEg6IHsKLQkJY2hhciAqc2F2ZXB0ciA9IHRjcF9jb25uLT5kYXRhOwotCQlnZnBfdCBmbGFncyA9IEdGUF9LRVJORUw7Ci0KLQkJc3NjYW5mKGJ1ZiwgIiVkIiwgJnZhbHVlKTsKLQkJaWYgKHRjcF9jb25uLT5kYXRhX3NpemUgPj0gdmFsdWUpIHsKLQkJCWlzY3NpX3NldF9wYXJhbShjbHNfY29ubiwgcGFyYW0sIGJ1ZiwgYnVmbGVuKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQkJaWYgKGNvbm4tPnN0b3Bfc3RhZ2UgPT0gU1RPUF9DT05OX1JFQ09WRVIpCi0JCQlmbGFncyA9IEdGUF9BVE9NSUM7Ci0JCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQotCQlpZiAodmFsdWUgPD0gUEFHRV9TSVpFKQotCQkJdGNwX2Nvbm4tPmRhdGEgPSBrbWFsbG9jKHZhbHVlLCBmbGFncyk7Ci0JCWVsc2UKLQkJCXRjcF9jb25uLT5kYXRhID0gKHZvaWQqKV9fZ2V0X2ZyZWVfcGFnZXMoZmxhZ3MsCi0JCQkJCQkJICAgICBnZXRfb3JkZXIodmFsdWUpKTsKLQkJaWYgKHRjcF9jb25uLT5kYXRhID09IE5VTEwpIHsKLQkJCXRjcF9jb25uLT5kYXRhID0gc2F2ZXB0cjsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCWlmICh0Y3BfY29ubi0+ZGF0YV9zaXplIDw9IFBBR0VfU0laRSkKLQkJCWtmcmVlKHNhdmVwdHIpOwotCQllbHNlCi0JCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXNhdmVwdHIsCi0JCQkJICAgZ2V0X29yZGVyKHRjcF9jb25uLT5kYXRhX3NpemUpKTsKLQkJaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwotCQl0Y3BfY29ubi0+ZGF0YV9zaXplID0gdmFsdWU7Ci0JCWJyZWFrOwotCQl9CiAJY2FzZSBJU0NTSV9QQVJBTV9IRFJER1NUX0VOOgogCQlpc2NzaV9zZXRfcGFyYW0oY2xzX2Nvbm4sIHBhcmFtLCBidWYsIGJ1Zmxlbik7CiAJCXRjcF9jb25uLT5oZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKTsKIAkJaWYgKGNvbm4tPmhkcmRnc3RfZW4pIHsKIAkJCXRjcF9jb25uLT5oZHJfc2l6ZSArPSBzaXplb2YoX191MzIpOwogCQkJaWYgKCF0Y3BfY29ubi0+dHhfdGZtKQotCQkJCXRjcF9jb25uLT50eF90Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJjcmMzMmMiLAotCQkJCQkJCQkgICAgMCk7Ci0JCQlpZiAoIXRjcF9jb25uLT50eF90Zm0pCi0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJdGNwX2Nvbm4tPnR4X3RmbSA9CisJCQkJCWNyeXB0b19hbGxvY19oYXNoKCJjcmMzMmMiLCAwLAorCQkJCQkJCSAgQ1JZUFRPX0FMR19BU1lOQyk7CisJCQlpZiAoSVNfRVJSKHRjcF9jb25uLT50eF90Zm0pKQorCQkJCXJldHVybiBQVFJfRVJSKHRjcF9jb25uLT50eF90Zm0pOwogCQkJaWYgKCF0Y3BfY29ubi0+cnhfdGZtKQotCQkJCXRjcF9jb25uLT5yeF90Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJjcmMzMmMiLAotCQkJCQkJCQkgICAgMCk7Ci0JCQlpZiAoIXRjcF9jb25uLT5yeF90Zm0pIHsKLQkJCQljcnlwdG9fZnJlZV90Zm0odGNwX2Nvbm4tPnR4X3RmbSk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQkJdGNwX2Nvbm4tPnJ4X3RmbSA9CisJCQkJCWNyeXB0b19hbGxvY19oYXNoKCJjcmMzMmMiLCAwLAorCQkJCQkJCSAgQ1JZUFRPX0FMR19BU1lOQyk7CisJCQlpZiAoSVNfRVJSKHRjcF9jb25uLT5yeF90Zm0pKSB7CisJCQkJY3J5cHRvX2ZyZWVfaGFzaCh0Y3BfY29ubi0+dHhfdGZtKTsKKwkJCQlyZXR1cm4gUFRSX0VSUih0Y3BfY29ubi0+cnhfdGZtKTsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCWlmICh0Y3BfY29ubi0+dHhfdGZtKQotCQkJCWNyeXB0b19mcmVlX3RmbSh0Y3BfY29ubi0+dHhfdGZtKTsKKwkJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT50eF90Zm0pOwogCQkJaWYgKHRjcF9jb25uLT5yeF90Zm0pCi0JCQkJY3J5cHRvX2ZyZWVfdGZtKHRjcF9jb25uLT5yeF90Zm0pOworCQkJCWNyeXB0b19mcmVlX2hhc2godGNwX2Nvbm4tPnJ4X3RmbSk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJU0NTSV9QQVJBTV9EQVRBREdTVF9FTjoKIAkJaXNjc2lfc2V0X3BhcmFtKGNsc19jb25uLCBwYXJhbSwgYnVmLCBidWZsZW4pOwogCQlpZiAoY29ubi0+ZGF0YWRnc3RfZW4pIHsKLQkJCWlmICghdGNwX2Nvbm4tPmRhdGFfdHhfdGZtKQotCQkJCXRjcF9jb25uLT5kYXRhX3R4X3RmbSA9Ci0JCQkJICAgIGNyeXB0b19hbGxvY190Zm0oImNyYzMyYyIsIDApOwotCQkJaWYgKCF0Y3BfY29ubi0+ZGF0YV90eF90Zm0pCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQlpZiAoIXRjcF9jb25uLT5kYXRhX3J4X3RmbSkKLQkJCQl0Y3BfY29ubi0+ZGF0YV9yeF90Zm0gPQotCQkJCSAgICBjcnlwdG9fYWxsb2NfdGZtKCJjcmMzMmMiLCAwKTsKLQkJCWlmICghdGNwX2Nvbm4tPmRhdGFfcnhfdGZtKSB7Ci0JCQkJY3J5cHRvX2ZyZWVfdGZtKHRjcF9jb25uLT5kYXRhX3R4X3RmbSk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07CisJCQlpZiAoIXRjcF9jb25uLT5kYXRhX3R4X2hhc2gudGZtKQorCQkJCXRjcF9jb25uLT5kYXRhX3R4X2hhc2gudGZtID0KKwkJCQkgICAgY3J5cHRvX2FsbG9jX2hhc2goImNyYzMyYyIsIDAsCisJCQkJCQkgICAgICBDUllQVE9fQUxHX0FTWU5DKTsKKwkJCWlmIChJU19FUlIodGNwX2Nvbm4tPmRhdGFfdHhfaGFzaC50Zm0pKQorCQkJCXJldHVybiBQVFJfRVJSKHRjcF9jb25uLT5kYXRhX3R4X2hhc2gudGZtKTsKKwkJCWlmICghdGNwX2Nvbm4tPmRhdGFfcnhfaGFzaC50Zm0pCisJCQkJdGNwX2Nvbm4tPmRhdGFfcnhfaGFzaC50Zm0gPQorCQkJCSAgICBjcnlwdG9fYWxsb2NfaGFzaCgiY3JjMzJjIiwgMCwKKwkJCQkJCSAgICAgIENSWVBUT19BTEdfQVNZTkMpOworCQkJaWYgKElTX0VSUih0Y3BfY29ubi0+ZGF0YV9yeF9oYXNoLnRmbSkpIHsKKwkJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT5kYXRhX3R4X2hhc2gudGZtKTsKKwkJCQlyZXR1cm4gUFRSX0VSUih0Y3BfY29ubi0+ZGF0YV9yeF9oYXNoLnRmbSk7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAodGNwX2Nvbm4tPmRhdGFfdHhfdGZtKQotCQkJCWNyeXB0b19mcmVlX3RmbSh0Y3BfY29ubi0+ZGF0YV90eF90Zm0pOwotCQkJaWYgKHRjcF9jb25uLT5kYXRhX3J4X3RmbSkKLQkJCQljcnlwdG9fZnJlZV90Zm0odGNwX2Nvbm4tPmRhdGFfcnhfdGZtKTsKKwkJCWlmICh0Y3BfY29ubi0+ZGF0YV90eF9oYXNoLnRmbSkKKwkJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT5kYXRhX3R4X2hhc2gudGZtKTsKKwkJCWlmICh0Y3BfY29ubi0+ZGF0YV9yeF9oYXNoLnRmbSkKKwkJCQljcnlwdG9fZnJlZV9oYXNoKHRjcF9jb25uLT5kYXRhX3J4X2hhc2gudGZtKTsKIAkJfQogCQl0Y3BfY29ubi0+c2VuZHBhZ2UgPSBjb25uLT5kYXRhZGdzdF9lbiA/CiAJCQlzb2NrX25vX3NlbmRwYWdlIDogdGNwX2Nvbm4tPnNvY2stPm9wcy0+c2VuZHBhZ2U7CkBAIC0yMzYxLDggKzIzMjYsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNjc2lfaG9zdF90ZW1wbGF0ZSBpc2NzaV9zaHQgPSB7Ci0JLm5hbWUJCQk9ICJpU0NTSSBJbml0aWF0b3Igb3ZlciBUQ1AvSVAsIHYiCi0JCQkJICBJU0NTSV9UQ1BfVkVSU0lPTiwKKwkubmFtZQkJCT0gImlTQ1NJIEluaXRpYXRvciBvdmVyIFRDUC9JUCIsCiAJLnF1ZXVlY29tbWFuZCAgICAgICAgICAgPSBpc2NzaV9xdWV1ZWNvbW1hbmQsCiAJLmNoYW5nZV9xdWV1ZV9kZXB0aAk9IGlzY3NpX2NoYW5nZV9xdWV1ZV9kZXB0aCwKIAkuY2FuX3F1ZXVlCQk9IElTQ1NJX1hNSVRfQ01EU19NQVggLSAxLApAQCAtMjQxNCwxMCArMjM3OCw3IEBACiAJLmdldF9jb25uX3BhcmFtCQk9IGlzY3NpX3RjcF9jb25uX2dldF9wYXJhbSwKIAkuZ2V0X3Nlc3Npb25fcGFyYW0JPSBpc2NzaV9zZXNzaW9uX2dldF9wYXJhbSwKIAkuc3RhcnRfY29ubgkJPSBpc2NzaV9jb25uX3N0YXJ0LAotCS5zdG9wX2Nvbm4JCT0gaXNjc2lfY29ubl9zdG9wLAotCS8qIHRoZXNlIGFyZSBjYWxsZWQgYXMgcGFydCBvZiBjb25uIHJlY292ZXJ5ICovCi0JLnN1c3BlbmRfY29ubl9yZWN2CT0gaXNjc2lfdGNwX3N1c3BlbmRfY29ubl9yeCwKLQkudGVybWluYXRlX2Nvbm4JCT0gaXNjc2lfdGNwX3Rlcm1pbmF0ZV9jb25uLAorCS5zdG9wX2Nvbm4JCT0gaXNjc2lfdGNwX2Nvbm5fc3RvcCwKIAkvKiBJTyAqLwogCS5zZW5kX3BkdQkJPSBpc2NzaV9jb25uX3NlbmRfcGR1LAogCS5nZXRfc3RhdHMJCT0gaXNjc2lfY29ubl9nZXRfc3RhdHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmggYi9kcml2ZXJzL3Njc2kvaXNjc2lfdGNwLmgKaW5kZXggODA4MzAyOC4uZTM1NzAxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2lzY3NpX3RjcC5oCisrKyBiL2RyaXZlcnMvc2NzaS9pc2NzaV90Y3AuaApAQCAtNTEsNiArNTEsNyBAQAogI2RlZmluZSBJU0NTSV9TR19UQUJMRVNJWkUJCVNHX0FMTAogI2RlZmluZSBJU0NTSV9UQ1BfTUFYX0NNRF9MRU4JCTE2CiAKK3N0cnVjdCBjcnlwdG9faGFzaDsKIHN0cnVjdCBzb2NrZXQ7CiAKIC8qIFNvY2tldCBjb25uZWN0aW9uIHJlY2lldmUgaGVscGVyICovCkBAIC03OCwxNiArNzksMTQgQEAKIAljaGFyCQkJaGRyZXh0WzQqc2l6ZW9mKF9fdTE2KSArCiAJCQkJICAgIHNpemVvZihfX3UzMildOwogCWludAkJCWRhdGFfY29waWVkOwotCWNoYXIJCQkqZGF0YTsJCS8qIGRhdGEgcGxhY2Vob2xkZXIgKi8KLQlpbnQJCQlkYXRhX3NpemU7CS8qIGFjdHVhbCByZWN2X2RsZW5ndGggKi8KIAlpbnQJCQlzdG9wX3N0YWdlOwkvKiBjb25uX3N0b3AoKSBmbGFnOiAqCiAJCQkJCQkgKiBzdG9wIHRvIHJlY292ZXIsICAqCiAJCQkJCQkgKiBzdG9wIHRvIHRlcm1pbmF0ZSAqLwogCS8qIGlTQ1NJIGNvbm5lY3Rpb24td2lkZSBzZXF1ZW5jaW5nICovCiAJaW50CQkJaGRyX3NpemU7CS8qIFBEVSBoZWFkZXIgc2l6ZSAqLwogCi0Jc3RydWN0IGNyeXB0b190Zm0JKnJ4X3RmbTsJLyogQ1JDMzJDIChSeCkgKi8KLQlzdHJ1Y3QgY3J5cHRvX3RmbQkqZGF0YV9yeF90Zm07CS8qIENSQzMyQyAoUngpIGZvciBkYXRhICovCisJc3RydWN0IGNyeXB0b19oYXNoCSpyeF90Zm07CS8qIENSQzMyQyAoUngpICovCisJc3RydWN0IGhhc2hfZGVzYwlkYXRhX3J4X2hhc2g7CS8qIENSQzMyQyAoUngpIGZvciBkYXRhICovCiAKIAkvKiBjb250cm9sIGRhdGEgKi8KIAlzdHJ1Y3QgaXNjc2lfdGNwX3JlY3YJaW47CQkvKiBUQ1AgcmVjZWl2ZSBjb250ZXh0ICovCkBAIC05OSw4ICs5OCw4IEBACiAJdm9pZAkJCSgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKIAogCS8qIHhtaXQgKi8KLQlzdHJ1Y3QgY3J5cHRvX3RmbQkqdHhfdGZtOwkvKiBDUkMzMkMgKFR4KSAqLwotCXN0cnVjdCBjcnlwdG9fdGZtCSpkYXRhX3R4X3RmbTsJLyogQ1JDMzJDIChUeCkgZm9yIGRhdGEgKi8KKwlzdHJ1Y3QgY3J5cHRvX2hhc2gJKnR4X3RmbTsJLyogQ1JDMzJDIChUeCkgKi8KKwlzdHJ1Y3QgaGFzaF9kZXNjCWRhdGFfdHhfaGFzaDsJLyogQ1JDMzJDIChUeCkgZm9yIGRhdGEgKi8KIAogCS8qIE1JQiBjdXN0b20gc3RhdGlzdGljcyAqLwogCXVpbnQzMl90CQlzZW5kcGFnZV9mYWlsdXJlc19jbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWNvcmUuYyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCmluZGV4IDM4NmU1ZjIuLjQyN2I3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtY29yZS5jCkBAIC0xMjU2LDEwICsxMjU2LDE1IEBACiAJc3dhcF9idWZfbGUxNihpZCwgQVRBX0lEX1dPUkRTKTsKIAogCS8qIHNhbml0eSBjaGVjayAqLwotCWlmICgoY2xhc3MgPT0gQVRBX0RFVl9BVEEpICE9IChhdGFfaWRfaXNfYXRhKGlkKSB8IGF0YV9pZF9pc19jZmEoaWQpKSkgewotCQlyYyA9IC1FSU5WQUw7Ci0JCXJlYXNvbiA9ICJkZXZpY2UgcmVwb3J0cyBpbGxlZ2FsIHR5cGUiOwotCQlnb3RvIGVycl9vdXQ7CisJcmMgPSAtRUlOVkFMOworCXJlYXNvbiA9ICJkZXZpY2UgcmVwb3J0cyBpbGxlZ2FsIHR5cGUiOworCisJaWYgKGNsYXNzID09IEFUQV9ERVZfQVRBKSB7CisJCWlmICghYXRhX2lkX2lzX2F0YShpZCkgJiYgIWF0YV9pZF9pc19jZmEoaWQpKQorCQkJZ290byBlcnJfb3V0OworCX0gZWxzZSB7CisJCWlmIChhdGFfaWRfaXNfYXRhKGlkKSkKKwkJCWdvdG8gZXJyX291dDsKIAl9CiAKIAlpZiAocG9zdF9yZXNldCAmJiBjbGFzcyA9PSBBVEFfREVWX0FUQSkgewpAQCAtMjc0Niw3ICsyNzUxLDcgQEAKIAkJaWYgKChyYyA9IHNhdGFfc2NyX3JlYWQoYXAsIFNDUl9DT05UUk9MLCAmc2NvbnRyb2wpKSkKIAkJCXJldHVybiByYzsKIAotCQlzY29udHJvbCA9IChzY29udHJvbCAmIDB4MGYwKSB8IDB4MzAyOworCQlzY29udHJvbCA9IChzY29udHJvbCAmIDB4MGYwKSB8IDB4MzA0OwogCiAJCWlmICgocmMgPSBzYXRhX3Njcl93cml0ZShhcCwgU0NSX0NPTlRST0wsIHNjb250cm9sKSkpCiAJCQlyZXR1cm4gcmM7CkBAIC01MTg1LDI4ICs1MTkwLDYgQEAKIAkJaW91bm1hcChob3N0X3NldC0+bW1pb19iYXNlKTsKIH0KIAotCi0vKioKLSAqCWF0YV9ob3N0X3JlbW92ZSAtIFVucmVnaXN0ZXIgU0NTSSBob3N0IHN0cnVjdHVyZSB3aXRoIHVwcGVyIGxheWVycwotICoJQGFwOiBQb3J0IHRvIHVucmVnaXN0ZXIKLSAqCUBkb191bnJlZ2lzdGVyOiAxIGlmIHdlIGZ1bGx5IHVucmVnaXN0ZXIsIDAgdG8ganVzdCBzdG9wIHRoZSBwb3J0Ci0gKgotICoJTE9DS0lORzoKLSAqCUluaGVyaXRlZCBmcm9tIGNhbGxlci4KLSAqLwotCi1zdGF0aWMgdm9pZCBhdGFfaG9zdF9yZW1vdmUoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IGRvX3VucmVnaXN0ZXIpCi17Ci0Jc3RydWN0IFNjc2lfSG9zdCAqc2ggPSBhcC0+aG9zdDsKLQotCURQUklOVEsoIkVOVEVSXG4iKTsKLQotCWlmIChkb191bnJlZ2lzdGVyKQotCQlzY3NpX3JlbW92ZV9ob3N0KHNoKTsKLQotCWFwLT5vcHMtPnBvcnRfc3RvcChhcCk7Ci19Ci0KIC8qKgogICoJYXRhX2Rldl9pbml0IC0gSW5pdGlhbGl6ZSBhbiBhdGFfZGV2aWNlIHN0cnVjdHVyZQogICoJQGRldjogRGV2aWNlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCkBAIC01NTMyLDggKzU1MTUsMTEgQEAKIAogZXJyX291dDoKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlhdGFfaG9zdF9yZW1vdmUoaG9zdF9zZXQtPnBvcnRzW2ldLCAxKTsKLQkJc2NzaV9ob3N0X3B1dChob3N0X3NldC0+cG9ydHNbaV0tPmhvc3QpOworCQlzdHJ1Y3QgYXRhX3BvcnQgKmFwID0gaG9zdF9zZXQtPnBvcnRzW2ldOworCQlpZiAoYXApIHsKKwkJCWFwLT5vcHMtPnBvcnRfc3RvcChhcCk7CisJCQlzY3NpX2hvc3RfcHV0KGFwLT5ob3N0KTsKKwkJfQogCX0KIGVycl9mcmVlX3JldDoKIAlrZnJlZShob3N0X3NldCk7CkBAIC01NTU4LDcgKzU1NDQsNyBAQAogCWludCBpOwogCiAJaWYgKCFhcC0+b3BzLT5lcnJvcl9oYW5kbGVyKQotCQlyZXR1cm47CisJCWdvdG8gc2tpcF9laDsKIAogCS8qIHRlbGwgRUggd2UncmUgbGVhdmluZyAmIGZsdXNoIEVIICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoYXAtPmxvY2ssIGZsYWdzKTsKQEAgLTU1OTQsNiArNTU4MCw3IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmYXAtPmhvdHBsdWdfdGFzayk7CiAJZmx1c2hfd29ya3F1ZXVlKGF0YV9hdXhfd3EpOwogCisgc2tpcF9laDoKIAkvKiByZW1vdmUgdGhlIGFzc29jaWF0ZWQgU0NTSSBob3N0ICovCiAJc2NzaV9yZW1vdmVfaG9zdChhcC0+aG9zdCk7CiB9CkBAIC01NjYyLDcgKzU2NDksNyBAQAogCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWFwLT5vcHMtPnBvcnRfZGlzYWJsZShhcCk7Ci0JYXRhX2hvc3RfcmVtb3ZlKGFwLCAwKTsKKwlhcC0+b3BzLT5wb3J0X3N0b3AoYXApOwogCiAJRFBSSU5USygiRVhJVFxuIik7CiAJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliYXRhLWVoLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLWVoLmMKaW5kZXggNGI2YWEzMC4uMjlmNTkzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmF0YS1laC5jCisrKyBiL2RyaXZlcnMvc2NzaS9saWJhdGEtZWguYwpAQCAtNzY0LDEyICs3NjQsMjcgQEAKIAkJCSAgICAgICB1bnNpZ25lZCBpbnQgYWN0aW9uKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGF0YV9laF9pbmZvICplaGkgPSAmYXAtPmVoX2luZm87CisJc3RydWN0IGF0YV9laF9jb250ZXh0ICplaGMgPSAmYXAtPmVoX2NvbnRleHQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShhcC0+bG9jaywgZmxhZ3MpOwogCi0JYXRhX2VoX2NsZWFyX2FjdGlvbihkZXYsICZhcC0+ZWhfaW5mbywgYWN0aW9uKTsKKwkvKiBSZXNldCBpcyByZXByZXNlbnRlZCBieSBjb21iaW5hdGlvbiBvZiBhY3Rpb25zIGFuZCBFSEkKKwkgKiBmbGFncy4gIFN1Y2sgaW4gYWxsIHJlbGF0ZWQgYml0cyBiZWZvcmUgY2xlYXJpbmcgZWhfaW5mbyB0bworCSAqIGF2b2lkIGxvc2luZyByZXF1ZXN0ZWQgYWN0aW9uLgorCSAqLworCWlmIChhY3Rpb24gJiBBVEFfRUhfUkVTRVRfTUFTSykgeworCQllaGMtPmkuYWN0aW9uIHw9IGVoaS0+YWN0aW9uICYgQVRBX0VIX1JFU0VUX01BU0s7CisJCWVoYy0+aS5mbGFncyB8PSBlaGktPmZsYWdzICYgQVRBX0VISV9SRVNFVF9NT0RJRklFUl9NQVNLOwogCi0JaWYgKCEoYXAtPmVoX2NvbnRleHQuaS5mbGFncyAmIEFUQV9FSElfUVVJRVQpKQorCQkvKiBtYWtlIHN1cmUgYWxsIHJlc2V0IGFjdGlvbnMgYXJlIGNsZWFyZWQgJiBjbGVhciBFSEkgZmxhZ3MgKi8KKwkJYWN0aW9uIHw9IEFUQV9FSF9SRVNFVF9NQVNLOworCQllaGktPmZsYWdzICY9IH5BVEFfRUhJX1JFU0VUX01PRElGSUVSX01BU0s7CisJfQorCisJYXRhX2VoX2NsZWFyX2FjdGlvbihkZXYsIGVoaSwgYWN0aW9uKTsKKworCWlmICghKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUVVJRVQpKQogCQlhcC0+cGZsYWdzIHw9IEFUQV9QRkxBR19SRUNPVkVSRUQ7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKGFwLT5sb2NrLCBmbGFncyk7CkBAIC03OTAsNiArODA1LDEyIEBACiBzdGF0aWMgdm9pZCBhdGFfZWhfZG9uZShzdHJ1Y3QgYXRhX3BvcnQgKmFwLCBzdHJ1Y3QgYXRhX2RldmljZSAqZGV2LAogCQkJdW5zaWduZWQgaW50IGFjdGlvbikKIHsKKwkvKiBpZiByZXNldCBpcyBjb21wbGV0ZSwgY2xlYXIgYWxsIHJlc2V0IGFjdGlvbnMgJiByZXNldCBtb2RpZmllciAqLworCWlmIChhY3Rpb24gJiBBVEFfRUhfUkVTRVRfTUFTSykgeworCQlhY3Rpb24gfD0gQVRBX0VIX1JFU0VUX01BU0s7CisJCWFwLT5laF9jb250ZXh0LmkuZmxhZ3MgJj0gfkFUQV9FSElfUkVTRVRfTU9ESUZJRVJfTUFTSzsKKwl9CisKIAlhdGFfZWhfY2xlYXJfYWN0aW9uKGRldiwgJmFwLT5laF9jb250ZXh0LmksIGFjdGlvbik7CiB9CiAKQEAgLTEyNzYsOCArMTI5Nyw2IEBACiBzdGF0aWMgdm9pZCBhdGFfZWhfYXV0b3BzeShzdHJ1Y3QgYXRhX3BvcnQgKmFwKQogewogCXN0cnVjdCBhdGFfZWhfY29udGV4dCAqZWhjID0gJmFwLT5laF9jb250ZXh0OwotCXVuc2lnbmVkIGludCBhY3Rpb24gPSBlaGMtPmkuYWN0aW9uOwotCXN0cnVjdCBhdGFfZGV2aWNlICpmYWlsZWRfZGV2ID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgYWxsX2Vycl9tYXNrID0gMDsKIAlpbnQgdGFnLCBpc19pbyA9IDA7CiAJdTMyIHNlcnJvcjsKQEAgLTEyOTQsNyArMTMxMyw3IEBACiAJCWVoYy0+aS5zZXJyb3IgfD0gc2Vycm9yOwogCQlhdGFfZWhfYW5hbHl6ZV9zZXJyb3IoYXApOwogCX0gZWxzZSBpZiAocmMgIT0gLUVPUE5PVFNVUFApCi0JCWFjdGlvbiB8PSBBVEFfRUhfSEFSRFJFU0VUOworCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9IQVJEUkVTRVQ7CiAKIAkvKiBhbmFseXplIE5DUSBmYWlsdXJlICovCiAJYXRhX2VoX2FuYWx5emVfbmNxX2Vycm9yKGFwKTsKQEAgLTEzMTUsNyArMTMzNCw3IEBACiAJCXFjLT5lcnJfbWFzayB8PSBlaGMtPmkuZXJyX21hc2s7CiAKIAkJLyogYW5hbHl6ZSBURiAqLwotCQlhY3Rpb24gfD0gYXRhX2VoX2FuYWx5emVfdGYocWMsICZxYy0+cmVzdWx0X3RmKTsKKwkJZWhjLT5pLmFjdGlvbiB8PSBhdGFfZWhfYW5hbHl6ZV90ZihxYywgJnFjLT5yZXN1bHRfdGYpOwogCiAJCS8qIERFViBlcnJvcnMgYXJlIHByb2JhYmx5IHNwdXJpb3VzIGluIGNhc2Ugb2YgQVRBX0JVUyBlcnJvciAqLwogCQlpZiAocWMtPmVycl9tYXNrICYgQUNfRVJSX0FUQV9CVVMpCkBAIC0xMzI5LDExICsxMzQ4LDExIEBACiAJCS8qIFNFTlNFX1ZBTElEIHRydW1wcyBkZXYvdW5rbm93biBlcnJvciBhbmQgcmV2YWxpZGF0aW9uICovCiAJCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX1NFTlNFX1ZBTElEKSB7CiAJCQlxYy0+ZXJyX21hc2sgJj0gfihBQ19FUlJfREVWIHwgQUNfRVJSX09USEVSKTsKLQkJCWFjdGlvbiAmPSB+QVRBX0VIX1JFVkFMSURBVEU7CisJCQllaGMtPmkuYWN0aW9uICY9IH5BVEFfRUhfUkVWQUxJREFURTsKIAkJfQogCiAJCS8qIGFjY3VtdWxhdGUgZXJyb3IgaW5mbyAqLwotCQlmYWlsZWRfZGV2ID0gcWMtPmRldjsKKwkJZWhjLT5pLmRldiA9IHFjLT5kZXY7CiAJCWFsbF9lcnJfbWFzayB8PSBxYy0+ZXJyX21hc2s7CiAJCWlmIChxYy0+ZmxhZ3MgJiBBVEFfUUNGTEFHX0lPKQogCQkJaXNfaW8gPSAxOwpAQCAtMTM0MiwyNSArMTM2MSwyMiBAQAogCS8qIGVuZm9yY2UgZGVmYXVsdCBFSCBhY3Rpb25zICovCiAJaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOIHx8CiAJICAgIGFsbF9lcnJfbWFzayAmIChBQ19FUlJfSFNNIHwgQUNfRVJSX1RJTUVPVVQpKQotCQlhY3Rpb24gfD0gQVRBX0VIX1NPRlRSRVNFVDsKKwkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfU09GVFJFU0VUOwogCWVsc2UgaWYgKGFsbF9lcnJfbWFzaykKLQkJYWN0aW9uIHw9IEFUQV9FSF9SRVZBTElEQVRFOworCQllaGMtPmkuYWN0aW9uIHw9IEFUQV9FSF9SRVZBTElEQVRFOwogCiAJLyogaWYgd2UgaGF2ZSBvZmZlbmRpbmcgcWNzIGFuZCB0aGUgYXNzb2NpYXRlZCBmYWlsZWQgZGV2aWNlICovCi0JaWYgKGZhaWxlZF9kZXYpIHsKKwlpZiAoZWhjLT5pLmRldikgewogCQkvKiBzcGVlZCBkb3duICovCi0JCWFjdGlvbiB8PSBhdGFfZWhfc3BlZWRfZG93bihmYWlsZWRfZGV2LCBpc19pbywgYWxsX2Vycl9tYXNrKTsKKwkJZWhjLT5pLmFjdGlvbiB8PSBhdGFfZWhfc3BlZWRfZG93bihlaGMtPmkuZGV2LCBpc19pbywKKwkJCQkJCSAgIGFsbF9lcnJfbWFzayk7CiAKIAkJLyogcGVyZm9ybSBwZXItZGV2IEVIIGFjdGlvbiBvbmx5IG9uIHRoZSBvZmZlbmRpbmcgZGV2aWNlICovCi0JCWVoYy0+aS5kZXZfYWN0aW9uW2ZhaWxlZF9kZXYtPmRldm5vXSB8PQotCQkJYWN0aW9uICYgQVRBX0VIX1BFUkRFVl9NQVNLOwotCQlhY3Rpb24gJj0gfkFUQV9FSF9QRVJERVZfTUFTSzsKKwkJZWhjLT5pLmRldl9hY3Rpb25bZWhjLT5pLmRldi0+ZGV2bm9dIHw9CisJCQllaGMtPmkuYWN0aW9uICYgQVRBX0VIX1BFUkRFVl9NQVNLOworCQllaGMtPmkuYWN0aW9uICY9IH5BVEFfRUhfUEVSREVWX01BU0s7CiAJfQogCi0JLyogcmVjb3JkIGF1dG9wc3kgcmVzdWx0ICovCi0JZWhjLT5pLmRldiA9IGZhaWxlZF9kZXY7Ci0JZWhjLT5pLmFjdGlvbiB8PSBhY3Rpb247Ci0KIAlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIApAQCAtMTQ4Myw2ICsxNDk5LDkgQEAKIAlhdGFfcmVzZXRfZm5fdCByZXNldDsKIAlpbnQgaSwgZGlkX2ZvbGxvd3VwX3Nyc3QsIHJjOwogCisJLyogYWJvdXQgdG8gcmVzZXQgKi8KKwlhdGFfZWhfYWJvdXRfdG9fZG8oYXAsIE5VTEwsIGVoYy0+aS5hY3Rpb24gJiBBVEFfRUhfUkVTRVRfTUFTSyk7CisKIAkvKiBEZXRlcm1pbmUgd2hpY2ggcmVzZXQgdG8gdXNlIGFuZCByZWNvcmQgaW4gZWhjLT5pLmFjdGlvbi4KIAkgKiBwcmVyZXNldCgpIG1heSBleGFtaW5lIGFuZCBtb2RpZnkgaXQuCiAJICovCkBAIC0xNTMxLDggKzE1NTAsNyBAQAogCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgIiVzIHJlc2V0dGluZyBwb3J0XG4iLAogCQkJCXJlc2V0ID09IHNvZnRyZXNldCA/ICJzb2Z0IiA6ICJoYXJkIik7CiAKLQkvKiByZXNldCAqLwotCWF0YV9laF9hYm91dF90b19kbyhhcCwgTlVMTCwgQVRBX0VIX1JFU0VUX01BU0spOworCS8qIG1hcmsgdGhhdCB0aGlzIEVIIHNlc3Npb24gc3RhcnRlZCB3aXRoIHJlc2V0ICovCiAJZWhjLT5pLmZsYWdzIHw9IEFUQV9FSElfRElEX1JFU0VUOwogCiAJcmMgPSBhdGFfZG9fcmVzZXQoYXAsIHJlc2V0LCBjbGFzc2VzKTsKQEAgLTE1OTUsNyArMTYxMyw3IEBACiAJCQlwb3N0cmVzZXQoYXAsIGNsYXNzZXMpOwogCiAJCS8qIHJlc2V0IHN1Y2Nlc3NmdWwsIHNjaGVkdWxlIHJldmFsaWRhdGlvbiAqLwotCQlhdGFfZWhfZG9uZShhcCwgTlVMTCwgQVRBX0VIX1JFU0VUX01BU0spOworCQlhdGFfZWhfZG9uZShhcCwgTlVMTCwgZWhjLT5pLmFjdGlvbiAmIEFUQV9FSF9SRVNFVF9NQVNLKTsKIAkJZWhjLT5pLmFjdGlvbiB8PSBBVEFfRUhfUkVWQUxJREFURTsKIAl9CiAKQEAgLTE4NDgsMTUgKzE4NjYsMTYgQEAKIAlmb3IgKGkgPSAwOyBpIDwgYXRhX3BvcnRfbWF4X2RldmljZXMoYXApOyBpKyspIHsKIAkJc3RydWN0IGF0YV9kZXZpY2UgKmRldiA9ICZhcC0+ZGV2aWNlW2ldOwogCi0JCWlmIChhdGFfZGV2X2Fic2VudChkZXYpIHx8IGF0YV9kZXZfcmVhZHkoZGV2KSkKKwkJaWYgKCEoZGV2LT5mbGFncyAmIEFUQV9ERkxBR19TVVNQRU5ERUQpKQogCQkJYnJlYWs7CiAJfQogCiAJaWYgKGkgPT0gYXRhX3BvcnRfbWF4X2RldmljZXMoYXApKQogCQlyZXR1cm4gMTsKIAotCS8qIGFsd2F5cyB0aGF3IGZyb3plbiBwb3J0IGFuZCByZWNvdmVyIGZhaWxlZCBkZXZpY2VzICovCi0JaWYgKGFwLT5wZmxhZ3MgJiBBVEFfUEZMQUdfRlJPWkVOIHx8IGF0YV9wb3J0X25yX2VuYWJsZWQoYXApKQorCS8qIHRoYXcgZnJvemVuIHBvcnQsIHJlc3VtZSBsaW5rIGFuZCByZWNvdmVyIGZhaWxlZCBkZXZpY2VzICovCisJaWYgKChhcC0+cGZsYWdzICYgQVRBX1BGTEFHX0ZST1pFTikgfHwKKwkgICAgKGVoYy0+aS5mbGFncyAmIEFUQV9FSElfUkVTVU1FX0xJTkspIHx8IGF0YV9wb3J0X25yX2VuYWJsZWQoYXApKQogCQlyZXR1cm4gMDsKIAogCS8qIHNraXAgaWYgY2xhc3MgY29kZXMgZm9yIGFsbCB2YWNhbnQgc2xvdHMgYXJlIEFUQV9ERVZfTk9ORSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xpYmF0YS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwppbmRleCA3Y2VkNDFlLi5lOTJjMzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvbGliYXRhLXNjc2kuYwpAQCAtMjM1Myw2ICsyMzUzLDE5IEBACiAJCQlhdGFfZ2VuX2F0YV9kZXNjX3NlbnNlKHFjKTsKIAkJfQogCisJCS8qIFNDU0kgRUggYXV0b21hdGljYWxseSBsb2NrcyBkb29yIGlmIHNkZXYtPmxvY2tlZCBpcworCQkgKiBzZXQuICBTb21ldGltZXMgZG9vciBsb2NrIHJlcXVlc3QgY29udGludWVzIHRvCisJCSAqIGZhaWwsIGZvciBleGFtcGxlLCB3aGVuIG5vIG1lZGlhIGlzIHByZXNlbnQuICBUaGlzCisJCSAqIGNyZWF0ZXMgYSBsb29wIC0gU0NTSSBFSCBpc3N1ZXMgZG9vciBsb2NrIHdoaWNoCisJCSAqIGZhaWxzIGFuZCBnZXRzIGludm9rZWQgYWdhaW4gdG8gYWNxdWlyZSBzZW5zZSBkYXRhCisJCSAqIGZvciB0aGUgZmFpbGVkIGNvbW1hbmQuCisJCSAqCisJCSAqIElmIGRvb3IgbG9jayBmYWlscywgYWx3YXlzIGNsZWFyIHNkZXYtPmxvY2tlZCB0bworCQkgKiBhdm9pZCB0aGlzIGluZmluaXRlIGxvb3AuCisJCSAqLworCQlpZiAocWMtPmNkYlswXSA9PSBBTExPV19NRURJVU1fUkVNT1ZBTCkKKwkJCXFjLT5kZXYtPnNkZXYtPmxvY2tlZCA9IDA7CisKIAkJcWMtPnNjc2ljbWQtPnJlc3VsdCA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAkJcWMtPnNjc2lkb25lKGNtZCk7CiAJCWF0YV9xY19mcmVlKHFjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJpc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKaW5kZXggN2U2ZTAzMS4uNTg4NGNkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYmlzY3NpLmMKQEAgLTE4OSw2ICsxODksNyBAQAogewogCXN0cnVjdCBzY3NpX2NtbmQgKnNjID0gY3Rhc2stPnNjOwogCisJY3Rhc2stPnN0YXRlID0gSVNDU0lfVEFTS19DT01QTEVURUQ7CiAJY3Rhc2stPnNjID0gTlVMTDsKIAlsaXN0X2RlbF9pbml0KCZjdGFzay0+cnVubmluZyk7CiAJX19rZmlmb19wdXQoc2Vzc2lvbi0+Y21kcG9vbC5xdWV1ZSwgKHZvaWQqKSZjdGFzaywgc2l6ZW9mKHZvaWQqKSk7CkBAIC0yNzUsNiArMjc2LDI1IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgdm9pZCBpc2NzaV90bWZfcnNwKHN0cnVjdCBpc2NzaV9jb25uICpjb25uLCBzdHJ1Y3QgaXNjc2lfaGRyICpoZHIpCit7CisJc3RydWN0IGlzY3NpX3RtX3JzcCAqdG1mID0gKHN0cnVjdCBpc2NzaV90bV9yc3AgKiloZHI7CisKKwljb25uLT5leHBfc3RhdHNuID0gYmUzMl90b19jcHUoaGRyLT5zdGF0c24pICsgMTsKKwljb25uLT50bWZyc3BfcGR1c19jbnQrKzsKKworCWlmIChjb25uLT50bWFib3J0X3N0YXRlICE9IFRNQUJPUlRfSU5JVElBTCkKKwkJcmV0dXJuOworCisJaWYgKHRtZi0+cmVzcG9uc2UgPT0gSVNDU0lfVE1GX1JTUF9DT01QTEVURSkKKwkJY29ubi0+dG1hYm9ydF9zdGF0ZSA9IFRNQUJPUlRfU1VDQ0VTUzsKKwllbHNlIGlmICh0bWYtPnJlc3BvbnNlID09IElTQ1NJX1RNRl9SU1BfTk9fVEFTSykKKwkJY29ubi0+dG1hYm9ydF9zdGF0ZSA9IFRNQUJPUlRfTk9UX0ZPVU5EOworCWVsc2UKKwkJY29ubi0+dG1hYm9ydF9zdGF0ZSA9IFRNQUJPUlRfRkFJTEVEOworCXdha2VfdXAoJmNvbm4tPmVod2FpdCk7Cit9CisKIC8qKgogICogX19pc2NzaV9jb21wbGV0ZV9wZHUgLSBjb21wbGV0ZSBwZHUKICAqIEBjb25uOiBpc2NzaSBjb25uCkBAIC0zNDAsNiArMzYwLDEwIEBACiAKIAkJc3dpdGNoKG9wY29kZSkgewogCQljYXNlIElTQ1NJX09QX0xPR09VVF9SU1A6CisJCQlpZiAoZGF0YWxlbikgeworCQkJCXJjID0gSVNDU0lfRVJSX1BST1RPOworCQkJCWJyZWFrOworCQkJfQogCQkJY29ubi0+ZXhwX3N0YXRzbiA9IGJlMzJfdG9fY3B1KGhkci0+c3RhdHNuKSArIDE7CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBJU0NTSV9PUF9MT0dJTl9SU1A6CkBAIC0zNDgsNyArMzcyLDggQEAKIAkJCSAqIGxvZ2luIHJlbGF0ZWQgUERVJ3MgZXhwX3N0YXRzbiBpcyBoYW5kbGVkIGluCiAJCQkgKiB1c2Vyc3BhY2UKIAkJCSAqLwotCQkJcmMgPSBpc2NzaV9yZWN2X3BkdShjb25uLT5jbHNfY29ubiwgaGRyLCBkYXRhLCBkYXRhbGVuKTsKKwkJCWlmIChpc2NzaV9yZWN2X3BkdShjb25uLT5jbHNfY29ubiwgaGRyLCBkYXRhLCBkYXRhbGVuKSkKKwkJCQlyYyA9IElTQ1NJX0VSUl9DT05OX0ZBSUxFRDsKIAkJCWxpc3RfZGVsKCZtdGFzay0+cnVubmluZyk7CiAJCQlpZiAoY29ubi0+bG9naW5fbXRhc2sgIT0gbXRhc2spCiAJCQkJX19rZmlmb19wdXQoc2Vzc2lvbi0+bWdtdHBvb2wucXVldWUsCkBAIC0zNjAsMjUgKzM4NSwxNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCi0JCQljb25uLT5leHBfc3RhdHNuID0gYmUzMl90b19jcHUoaGRyLT5zdGF0c24pICsgMTsKLQkJCWNvbm4tPnRtZnJzcF9wZHVzX2NudCsrOwotCQkJaWYgKGNvbm4tPnRtYWJvcnRfc3RhdGUgPT0gVE1BQk9SVF9JTklUSUFMKSB7Ci0JCQkJY29ubi0+dG1hYm9ydF9zdGF0ZSA9Ci0JCQkJCSgoc3RydWN0IGlzY3NpX3RtX3JzcCAqKWhkciktPgotCQkJCQlyZXNwb25zZSA9PSBJU0NTSV9UTUZfUlNQX0NPTVBMRVRFID8KLQkJCQkJCVRNQUJPUlRfU1VDQ0VTUzpUTUFCT1JUX0ZBSUxFRDsKLQkJCQkvKiB1bmJsb2NrIGVoX2Fib3J0KCkgKi8KLQkJCQl3YWtlX3VwKCZjb25uLT5laHdhaXQpOwotCQkJfQorCQkJaXNjc2lfdG1mX3JzcChjb25uLCBoZHIpOwogCQkJYnJlYWs7CiAJCWNhc2UgSVNDU0lfT1BfTk9PUF9JTjoKLQkJCWlmIChoZHItPnR0dCAhPSBJU0NTSV9SRVNFUlZFRF9UQUcpIHsKKwkJCWlmIChoZHItPnR0dCAhPSBJU0NTSV9SRVNFUlZFRF9UQUcgfHwgZGF0YWxlbikgewogCQkJCXJjID0gSVNDU0lfRVJSX1BST1RPOwogCQkJCWJyZWFrOwogCQkJfQogCQkJY29ubi0+ZXhwX3N0YXRzbiA9IGJlMzJfdG9fY3B1KGhkci0+c3RhdHNuKSArIDE7CiAKLQkJCXJjID0gaXNjc2lfcmVjdl9wZHUoY29ubi0+Y2xzX2Nvbm4sIGhkciwgZGF0YSwgZGF0YWxlbik7CisJCQlpZiAoaXNjc2lfcmVjdl9wZHUoY29ubi0+Y2xzX2Nvbm4sIGhkciwgZGF0YSwgZGF0YWxlbikpCisJCQkJcmMgPSBJU0NTSV9FUlJfQ09OTl9GQUlMRUQ7CiAJCQlsaXN0X2RlbCgmbXRhc2stPnJ1bm5pbmcpOwogCQkJaWYgKGNvbm4tPmxvZ2luX210YXNrICE9IG10YXNrKQogCQkJCV9fa2ZpZm9fcHV0KHNlc3Npb24tPm1nbXRwb29sLnF1ZXVlLApAQCAtMzkxLDE0ICs0MDgsMjEgQEAKIAl9IGVsc2UgaWYgKGl0dCA9PSBJU0NTSV9SRVNFUlZFRF9UQUcpIHsKIAkJc3dpdGNoKG9wY29kZSkgewogCQljYXNlIElTQ1NJX09QX05PT1BfSU46Ci0JCQlpZiAoIWRhdGFsZW4pIHsKLQkJCQlyYyA9IGlzY3NpX2NoZWNrX2Fzc2lnbl9jbWRzbihzZXNzaW9uLAotCQkJCQkJIChzdHJ1Y3QgaXNjc2lfbm9waW4qKWhkcik7Ci0JCQkJaWYgKCFyYyAmJiBoZHItPnR0dCAhPSBJU0NTSV9SRVNFUlZFRF9UQUcpCi0JCQkJCXJjID0gaXNjc2lfcmVjdl9wZHUoY29ubi0+Y2xzX2Nvbm4sCi0JCQkJCQkJICAgIGhkciwgTlVMTCwgMCk7Ci0JCQl9IGVsc2UKKwkJCWlmIChkYXRhbGVuKSB7CiAJCQkJcmMgPSBJU0NTSV9FUlJfUFJPVE87CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXJjID0gaXNjc2lfY2hlY2tfYXNzaWduX2NtZHNuKHNlc3Npb24sCisJCQkJCQkgKHN0cnVjdCBpc2NzaV9ub3BpbiopaGRyKTsKKwkJCWlmIChyYykKKwkJCQlicmVhazsKKworCQkJaWYgKGhkci0+dHR0ID09IElTQ1NJX1JFU0VSVkVEX1RBRykKKwkJCQlicmVhazsKKworCQkJaWYgKGlzY3NpX3JlY3ZfcGR1KGNvbm4tPmNsc19jb25uLCBoZHIsIE5VTEwsIDApKQorCQkJCXJjID0gSVNDU0lfRVJSX0NPTk5fRkFJTEVEOwogCQkJYnJlYWs7CiAJCWNhc2UgSVNDU0lfT1BfUkVKRUNUOgogCQkJLyogd2UgbmVlZCBzdGggbGlrZSBpc2NzaV9yZWplY3RfcnNwKCkqLwpAQCAtNTY4LDIwICs1OTIsMjQgQEAKIAl9CiAKIAkvKiBwcm9jZXNzIGNvbW1hbmQgcXVldWUgKi8KLQl3aGlsZSAoX19rZmlmb19nZXQoY29ubi0+eG1pdHF1ZXVlLCAodm9pZCopJmNvbm4tPmN0YXNrLAotCQkJICAgc2l6ZW9mKHZvaWQqKSkpIHsKKwlzcGluX2xvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOworCXdoaWxlICghbGlzdF9lbXB0eSgmY29ubi0+eG1pdHF1ZXVlKSkgewogCQkvKgogCQkgKiBpc2NzaSB0Y3AgbWF5IHJlYWRkIHRoZSB0YXNrIHRvIHRoZSB4bWl0cXVldWUgdG8gc2VuZAogCQkgKiB3cml0ZSBkYXRhCiAJCSAqLwotCQlzcGluX2xvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwotCQlpZiAobGlzdF9lbXB0eSgmY29ubi0+Y3Rhc2stPnJ1bm5pbmcpKQotCQkJbGlzdF9hZGRfdGFpbCgmY29ubi0+Y3Rhc2stPnJ1bm5pbmcsICZjb25uLT5ydW5fbGlzdCk7CisJCWNvbm4tPmN0YXNrID0gbGlzdF9lbnRyeShjb25uLT54bWl0cXVldWUubmV4dCwKKwkJCQkJIHN0cnVjdCBpc2NzaV9jbWRfdGFzaywgcnVubmluZyk7CisJCWNvbm4tPmN0YXNrLT5zdGF0ZSA9IElTQ1NJX1RBU0tfUlVOTklORzsKKwkJbGlzdF9tb3ZlX3RhaWwoY29ubi0+eG1pdHF1ZXVlLm5leHQsICZjb25uLT5ydW5fbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKKwogCQlyYyA9IHR0LT54bWl0X2NtZF90YXNrKGNvbm4sIGNvbm4tPmN0YXNrKTsKIAkJaWYgKHJjKQogCQkJZ290byBhZ2FpbjsKKwkJc3Bpbl9sb2NrX2JoKCZjb25uLT5zZXNzaW9uLT5sb2NrKTsKIAl9CisJc3Bpbl91bmxvY2tfYmgoJmNvbm4tPnNlc3Npb24tPmxvY2spOwogCS8qIGRvbmUgd2l0aCB0aGlzIGN0YXNrICovCiAJY29ubi0+Y3Rhc2sgPSBOVUxMOwogCkBAIC02OTEsNiArNzE5LDcgQEAKIAlzYy0+U0NwLnBoYXNlID0gc2Vzc2lvbi0+YWdlOwogCXNjLT5TQ3AucHRyID0gKGNoYXIgKiljdGFzazsKIAorCWN0YXNrLT5zdGF0ZSA9IElTQ1NJX1RBU0tfUEVORElORzsKIAljdGFzay0+bXRhc2sgPSBOVUxMOwogCWN0YXNrLT5jb25uID0gY29ubjsKIAljdGFzay0+c2MgPSBzYzsKQEAgLTcwMCw3ICs3MjksNyBAQAogCiAJc2Vzc2lvbi0+dHQtPmluaXRfY21kX3Rhc2soY3Rhc2spOwogCi0JX19rZmlmb19wdXQoY29ubi0+eG1pdHF1ZXVlLCAodm9pZCopJmN0YXNrLCBzaXplb2Yodm9pZCopKTsKKwlsaXN0X2FkZF90YWlsKCZjdGFzay0+cnVubmluZywgJmNvbm4tPnhtaXRxdWV1ZSk7CiAJZGVidWdfc2NzaSgKIAkgICAgICAgImN0YXNrIGVucSBbJXMgY2lkICVkIHNjICVseCBpdHQgMHgleCBsZW4gJWQgY21kc24gJWQgd2luICVkXVxuIiwKIAkJc2MtPnNjX2RhdGFfZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UgPyAid3JpdGUiIDogInJlYWQiLApAQCAtOTc3LDMxICsxMDA2LDI3IEBACiAvKgogICogeG1pdCBtdXRleCBhbmQgc2Vzc2lvbiBsb2NrIG11c3QgYmUgaGVsZAogICovCi0jZGVmaW5lIGlzY3NpX3JlbW92ZV90YXNrKHRhc2t0eXBlKQkJCQkJXAotc3RhdGljIHN0cnVjdCBpc2NzaV8jI3Rhc2t0eXBlICoJCQkJCVwKLWlzY3NpX3JlbW92ZV8jI3Rhc2t0eXBlKHN0cnVjdCBrZmlmbyAqZmlmbywgdWludDMyX3QgaXR0KQkJXAotewkJCQkJCQkJCVwKLQlpbnQgaSwgbnJfdGFza3MgPSBfX2tmaWZvX2xlbihmaWZvKSAvIHNpemVvZih2b2lkKik7CQlcCi0Jc3RydWN0IGlzY3NpXyMjdGFza3R5cGUgKnRhc2s7CQkJCQlcCi0JCQkJCQkJCQlcCi0JZGVidWdfc2NzaSgic2VhcmNoaW5nICVkIHRhc2tzXG4iLCBucl90YXNrcyk7CQkJXAotCQkJCQkJCQkJXAotCWZvciAoaSA9IDA7IGkgPCBucl90YXNrczsgaSsrKSB7CQkJCVwKLQkJX19rZmlmb19nZXQoZmlmbywgKHZvaWQqKSZ0YXNrLCBzaXplb2Yodm9pZCopKTsJCVwKLQkJZGVidWdfc2NzaSgiY2hlY2sgdGFzayAldVxuIiwgdGFzay0+aXR0KTsJCVwKLQkJCQkJCQkJCVwKLQkJaWYgKHRhc2stPml0dCA9PSBpdHQpIHsJCQkJCVwKLQkJCWRlYnVnX3Njc2koIm1hdGNoZWQgdGFza1xuIik7CQkJXAotCQkJcmV0dXJuIHRhc2s7CQkJCQlcCi0JCX0JCQkJCQkJXAotCQkJCQkJCQkJXAotCQlfX2tmaWZvX3B1dChmaWZvLCAodm9pZCopJnRhc2ssIHNpemVvZih2b2lkKikpOwkJXAotCX0JCQkJCQkJCVwKLQlyZXR1cm4gTlVMTDsJCQkJCQkJXAotfQorc3RhdGljIHN0cnVjdCBpc2NzaV9tZ210X3Rhc2sgKgoraXNjc2lfcmVtb3ZlX21nbXRfdGFzayhzdHJ1Y3Qga2ZpZm8gKmZpZm8sIHVpbnQzMl90IGl0dCkKK3sKKwlpbnQgaSwgbnJfdGFza3MgPSBfX2tmaWZvX2xlbihmaWZvKSAvIHNpemVvZih2b2lkKik7CisJc3RydWN0IGlzY3NpX21nbXRfdGFzayAqdGFzazsKIAotaXNjc2lfcmVtb3ZlX3Rhc2sobWdtdF90YXNrKTsKLWlzY3NpX3JlbW92ZV90YXNrKGNtZF90YXNrKTsKKwlkZWJ1Z19zY3NpKCJzZWFyY2hpbmcgJWQgdGFza3NcbiIsIG5yX3Rhc2tzKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl90YXNrczsgaSsrKSB7CisJCV9fa2ZpZm9fZ2V0KGZpZm8sICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSk7CisJCWRlYnVnX3Njc2koImNoZWNrIHRhc2sgJXVcbiIsIHRhc2stPml0dCk7CisKKwkJaWYgKHRhc2stPml0dCA9PSBpdHQpIHsKKwkJCWRlYnVnX3Njc2koIm1hdGNoZWQgdGFza1xuIik7CisJCQlyZXR1cm4gdGFzazsKKwkJfQorCisJCV9fa2ZpZm9fcHV0KGZpZm8sICh2b2lkKikmdGFzaywgc2l6ZW9mKHZvaWQqKSk7CisJfQorCXJldHVybiBOVUxMOworfQogCiBzdGF0aWMgaW50IGlzY3NpX2N0YXNrX210YXNrX2NsZWFudXAoc3RydWN0IGlzY3NpX2NtZF90YXNrICpjdGFzaykKIHsKQEAgLTEwMjcsMTIgKzEwNTIsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpzYzsKIAotCWNvbm4tPnNlc3Npb24tPnR0LT5jbGVhbnVwX2NtZF90YXNrKGNvbm4sIGN0YXNrKTsKLQlpc2NzaV9jdGFza19tdGFza19jbGVhbnVwKGN0YXNrKTsKLQogCXNjID0gY3Rhc2stPnNjOwogCWlmICghc2MpCiAJCXJldHVybjsKKworCWNvbm4tPnNlc3Npb24tPnR0LT5jbGVhbnVwX2NtZF90YXNrKGNvbm4sIGN0YXNrKTsKKwlpc2NzaV9jdGFza19tdGFza19jbGVhbnVwKGN0YXNrKTsKKwogCXNjLT5yZXN1bHQgPSBlcnI7CiAJc2MtPnJlc2lkID0gc2MtPnJlcXVlc3RfYnVmZmxlbjsKIAlpc2NzaV9jb21wbGV0ZV9jb21tYW5kKGNvbm4tPnNlc3Npb24sIGN0YXNrKTsKQEAgLTEwNDMsNyArMTA2OSw2IEBACiAJc3RydWN0IGlzY3NpX2NtZF90YXNrICpjdGFzayA9IChzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKilzYy0+U0NwLnB0cjsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiA9IGN0YXNrLT5jb25uOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+c2Vzc2lvbjsKLQlzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKnBlbmRpbmdfY3Rhc2s7CiAJaW50IHJjOwogCiAJY29ubi0+ZWhfYWJvcnRfY250Kys7CkBAIC0xMDYxLDggKzEwODYsMTEgQEAKIAkJZ290byBmYWlsZWQ7CiAKIAkvKiBjdGFzayBjb21wbGV0ZWQgYmVmb3JlIHRpbWUgb3V0ICovCi0JaWYgKCFjdGFzay0+c2MpCi0JCWdvdG8gc3VjY2VzczsKKwlpZiAoIWN0YXNrLT5zYykgeworCQlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CisJCWRlYnVnX3Njc2koInNjIGNvbXBsZXRlZCB3aGlsZSBhYm9ydCBpbiBwcm9ncmVzc1xuIik7CisJCWdvdG8gc3VjY2Vzc19yZWxfbXV0ZXg7CisJfQogCiAJLyogd2hhdCBzaG91bGQgd2UgZG8gaGVyZSA/ICovCiAJaWYgKGNvbm4tPmN0YXNrID09IGN0YXNrKSB7CkBAIC0xMDcxLDE3ICsxMDk5LDggQEAKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0JLyogY2hlY2sgZm9yIHRoZSBlYXN5IHBlbmRpbmcgY21kIGFib3J0ICovCi0JcGVuZGluZ19jdGFzayA9IGlzY3NpX3JlbW92ZV9jbWRfdGFzayhjb25uLT54bWl0cXVldWUsIGN0YXNrLT5pdHQpOwotCWlmIChwZW5kaW5nX2N0YXNrKSB7Ci0JCS8qIGlzY3NpX3RjcCBxdWV1ZXMgd3JpdGUgdHJhbnNmZXJzIG9uIHRoZSB4bWl0cXVldWUgKi8KLQkJaWYgKGxpc3RfZW1wdHkoJnBlbmRpbmdfY3Rhc2stPnJ1bm5pbmcpKSB7Ci0JCQlkZWJ1Z19zY3NpKCJmb3VuZCBwZW5kaW5nIHRhc2tcbiIpOwotCQkJZ290byBzdWNjZXNzOwotCQl9IGVsc2UKLQkJCV9fa2ZpZm9fcHV0KGNvbm4tPnhtaXRxdWV1ZSwgKHZvaWQqKSZwZW5kaW5nX2N0YXNrLAotCQkJCSAgICBzaXplb2Yodm9pZCopKTsKLQl9CisJaWYgKGN0YXNrLT5zdGF0ZSA9PSBJU0NTSV9UQVNLX1BFTkRJTkcpCisJCWdvdG8gc3VjY2Vzc19jbGVhbnVwOwogCiAJY29ubi0+dG1hYm9ydF9zdGF0ZSA9IFRNQUJPUlRfSU5JVElBTDsKIApAQCAtMTA4OSwyNSArMTEwOCwzMSBAQAogCXJjID0gaXNjc2lfZXhlY19hYm9ydF90YXNrKHNjLCBjdGFzayk7CiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAotCWlzY3NpX2N0YXNrX210YXNrX2NsZWFudXAoY3Rhc2spOwogCWlmIChyYyB8fCBzYy0+U0NwLnBoYXNlICE9IHNlc3Npb24tPmFnZSB8fAogCSAgICBzZXNzaW9uLT5zdGF0ZSAhPSBJU0NTSV9TVEFURV9MT0dHRURfSU4pCiAJCWdvdG8gZmFpbGVkOworCWlzY3NpX2N0YXNrX210YXNrX2NsZWFudXAoY3Rhc2spOwogCi0JLyogY3Rhc2sgY29tcGxldGVkIGJlZm9yZSB0bWYgYWJvcnQgcmVzcG9uc2UgKi8KLQlpZiAoIWN0YXNrLT5zYykgewotCQlkZWJ1Z19zY3NpKCJzYyBjb21wbGV0ZWQgd2hpbGUgYWJvcnQgaW4gcHJvZ3Jlc3NcbiIpOwotCQlnb3RvIHN1Y2Nlc3M7Ci0JfQotCi0JaWYgKGNvbm4tPnRtYWJvcnRfc3RhdGUgIT0gVE1BQk9SVF9TVUNDRVNTKSB7CisJc3dpdGNoIChjb25uLT50bWFib3J0X3N0YXRlKSB7CisJY2FzZSBUTUFCT1JUX1NVQ0NFU1M6CisJCWdvdG8gc3VjY2Vzc19jbGVhbnVwOworCWNhc2UgVE1BQk9SVF9OT1RfRk9VTkQ6CisJCWlmICghY3Rhc2stPnNjKSB7CisJCQkvKiBjdGFzayBjb21wbGV0ZWQgYmVmb3JlIHRtZiBhYm9ydCByZXNwb25zZSAqLworCQkJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOworCQkJZGVidWdfc2NzaSgic2MgY29tcGxldGVkIHdoaWxlIGFib3J0IGluIHByb2dyZXNzXG4iKTsKKwkJCWdvdG8gc3VjY2Vzc19yZWxfbXV0ZXg7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJZGVmYXVsdDoKKwkJLyogdGltZWRvdXQgb3IgZmFpbGVkICovCiAJCXNwaW5fdW5sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKIAkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJCXNwaW5fbG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAJCWdvdG8gZmFpbGVkOwogCX0KIAotc3VjY2VzczoKK3N1Y2Nlc3NfY2xlYW51cDoKIAlkZWJ1Z19zY3NpKCJhYm9ydCBzdWNjZXNzIFtzYyAlbHggaXR0IDB4JXhdXG4iLCAobG9uZylzYywgY3Rhc2stPml0dCk7CiAJc3Bpbl91bmxvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCkBAIC0xMTIxLDYgKzExNDYsNyBAQAogCXNwaW5fdW5sb2NrKCZzZXNzaW9uLT5sb2NrKTsKIAl3cml0ZV91bmxvY2tfYmgoY29ubi0+cmVjdl9sb2NrKTsKIAorc3VjY2Vzc19yZWxfbXV0ZXg6CiAJbXV0ZXhfdW5sb2NrKCZjb25uLT54bWl0bXV0ZXgpOwogCXJldHVybiBTVUNDRVNTOwogCkBAIC0xMjYzLDYgKzEyODksNyBAQAogCQlpZiAoY21kX3Rhc2tfc2l6ZSkKIAkJCWN0YXNrLT5kZF9kYXRhID0gJmN0YXNrWzFdOwogCQljdGFzay0+aXR0ID0gY21kX2k7CisJCUlOSVRfTElTVF9IRUFEKCZjdGFzay0+cnVubmluZyk7CiAJfQogCiAJc3Bpbl9sb2NrX2luaXQoJnNlc3Npb24tPmxvY2spOwpAQCAtMTI4Miw2ICsxMzA5LDcgQEAKIAkJaWYgKG1nbXRfdGFza19zaXplKQogCQkJbXRhc2stPmRkX2RhdGEgPSAmbXRhc2tbMV07CiAJCW10YXNrLT5pdHQgPSBJU0NTSV9NR01UX0lUVF9PRkZTRVQgKyBjbWRfaTsKKwkJSU5JVF9MSVNUX0hFQUQoJm10YXNrLT5ydW5uaW5nKTsKIAl9CiAKIAlpZiAoc2NzaV9hZGRfaG9zdChzaG9zdCwgTlVMTCkpCkBAIC0xMzIyLDE1ICsxMzUwLDE4IEBACiB7CiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBpc2NzaV9zZXNzaW9uX3RvX3Nob3N0KGNsc19zZXNzaW9uKTsKIAlzdHJ1Y3QgaXNjc2lfc2Vzc2lvbiAqc2Vzc2lvbiA9IGlzY3NpX2hvc3RkYXRhKHNob3N0LT5ob3N0ZGF0YSk7CisJc3RydWN0IG1vZHVsZSAqb3duZXIgPSBjbHNfc2Vzc2lvbi0+dHJhbnNwb3J0LT5vd25lcjsKIAogCXNjc2lfcmVtb3ZlX2hvc3Qoc2hvc3QpOwogCiAJaXNjc2lfcG9vbF9mcmVlKCZzZXNzaW9uLT5tZ210cG9vbCwgKHZvaWQqKilzZXNzaW9uLT5tZ210X2NtZHMpOwogCWlzY3NpX3Bvb2xfZnJlZSgmc2Vzc2lvbi0+Y21kcG9vbCwgKHZvaWQqKilzZXNzaW9uLT5jbWRzKTsKIAorCWtmcmVlKHNlc3Npb24tPnRhcmdldG5hbWUpOworCiAJaXNjc2lfZGVzdHJveV9zZXNzaW9uKGNsc19zZXNzaW9uKTsKIAlzY3NpX2hvc3RfcHV0KHNob3N0KTsKLQltb2R1bGVfcHV0KGNsc19zZXNzaW9uLT50cmFuc3BvcnQtPm93bmVyKTsKKwltb2R1bGVfcHV0KG93bmVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlzY3NpX3Nlc3Npb25fdGVhcmRvd24pOwogCkBAIC0xMzYxLDEyICsxMzkyLDcgQEAKIAljb25uLT50bWFib3J0X3N0YXRlID0gVE1BQk9SVF9JTklUSUFMOwogCUlOSVRfTElTVF9IRUFEKCZjb25uLT5ydW5fbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNvbm4tPm1nbXRfcnVuX2xpc3QpOwotCi0JLyogaW5pdGlhbGl6ZSBnZW5lcmFsIHhtaXQgUERVIGNvbW1hbmRzIHF1ZXVlICovCi0JY29ubi0+eG1pdHF1ZXVlID0ga2ZpZm9fYWxsb2Moc2Vzc2lvbi0+Y21kc19tYXggKiBzaXplb2Yodm9pZCopLAotCQkJCQlHRlBfS0VSTkVMLCBOVUxMKTsKLQlpZiAoY29ubi0+eG1pdHF1ZXVlID09IEVSUl9QVFIoLUVOT01FTSkpCi0JCWdvdG8geG1pdHF1ZXVlX2FsbG9jX2ZhaWw7CisJSU5JVF9MSVNUX0hFQUQoJmNvbm4tPnhtaXRxdWV1ZSk7CiAKIAkvKiBpbml0aWFsaXplIGdlbmVyYWwgaW1tZWRpYXRlICYgbm9uLWltbWVkaWF0ZSBQRFUgY29tbWFuZHMgcXVldWUgKi8KIAljb25uLT5pbW1xdWV1ZSA9IGtmaWZvX2FsbG9jKHNlc3Npb24tPm1nbXRwb29sX21heCAqIHNpemVvZih2b2lkKiksCkBAIC0xMzk0LDcgKzE0MjAsNyBAQAogCWRhdGEgPSBrbWFsbG9jKERFRkFVTFRfTUFYX1JFQ1ZfREFUQV9TRUdNRU5UX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkYXRhKQogCQlnb3RvIGxvZ2luX210YXNrX2RhdGFfYWxsb2NfZmFpbDsKLQljb25uLT5sb2dpbl9tdGFzay0+ZGF0YSA9IGRhdGE7CisJY29ubi0+bG9naW5fbXRhc2stPmRhdGEgPSBjb25uLT5kYXRhID0gZGF0YTsKIAogCWluaXRfdGltZXIoJmNvbm4tPnRtYWJvcnRfdGltZXIpOwogCW11dGV4X2luaXQoJmNvbm4tPnhtaXRtdXRleCk7CkBAIC0xNDEwLDggKzE0MzYsNiBAQAogbWdtdHF1ZXVlX2FsbG9jX2ZhaWw6CiAJa2ZpZm9fZnJlZShjb25uLT5pbW1xdWV1ZSk7CiBpbW1xdWV1ZV9hbGxvY19mYWlsOgotCWtmaWZvX2ZyZWUoY29ubi0+eG1pdHF1ZXVlKTsKLXhtaXRxdWV1ZV9hbGxvY19mYWlsOgogCWlzY3NpX2Rlc3Ryb3lfY29ubihjbHNfY29ubik7CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNDMyLDEyICsxNDU2LDYgQEAKIAogCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KTsKIAltdXRleF9sb2NrKCZjb25uLT54bWl0bXV0ZXgpOwotCWlmIChjb25uLT5jX3N0YWdlID09IElTQ1NJX0NPTk5fSU5JVElBTF9TVEFHRSkgewotCQlpZiAoc2Vzc2lvbi0+dHQtPnN1c3BlbmRfY29ubl9yZWN2KQotCQkJc2Vzc2lvbi0+dHQtPnN1c3BlbmRfY29ubl9yZWN2KGNvbm4pOwotCi0JCXNlc3Npb24tPnR0LT50ZXJtaW5hdGVfY29ubihjb25uKTsKLQl9CiAKIAlzcGluX2xvY2tfYmgoJnNlc3Npb24tPmxvY2spOwogCWNvbm4tPmNfc3RhZ2UgPSBJU0NTSV9DT05OX0NMRUFOVVBfV0FJVDsKQEAgLTE0NzQsNyArMTQ5Miw4IEBACiAJfQogCiAJc3Bpbl9sb2NrX2JoKCZzZXNzaW9uLT5sb2NrKTsKLQlrZnJlZShjb25uLT5sb2dpbl9tdGFzay0+ZGF0YSk7CisJa2ZyZWUoY29ubi0+ZGF0YSk7CisJa2ZyZWUoY29ubi0+cGVyc2lzdGVudF9hZGRyZXNzKTsKIAlfX2tmaWZvX3B1dChzZXNzaW9uLT5tZ210cG9vbC5xdWV1ZSwgKHZvaWQqKSZjb25uLT5sb2dpbl9tdGFzaywKIAkJICAgIHNpemVvZih2b2lkKikpOwogCWxpc3RfZGVsKCZjb25uLT5pdGVtKTsKQEAgLTE0ODksNyArMTUwOCw2IEBACiAJCXNlc3Npb24tPmNtZHNuID0gc2Vzc2lvbi0+bWF4X2NtZHNuID0gc2Vzc2lvbi0+ZXhwX2NtZHNuID0gMTsKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAKLQlrZmlmb19mcmVlKGNvbm4tPnhtaXRxdWV1ZSk7CiAJa2ZpZm9fZnJlZShjb25uLT5pbW1xdWV1ZSk7CiAJa2ZpZm9fZnJlZShjb25uLT5tZ210cXVldWUpOwogCkBAIC0xNTcyLDcgKzE1OTAsNyBAQAogCXN0cnVjdCBpc2NzaV9jbWRfdGFzayAqY3Rhc2ssICp0bXA7CiAKIAkvKiBmbHVzaCBwZW5kaW5nICovCi0Jd2hpbGUgKF9fa2ZpZm9fZ2V0KGNvbm4tPnhtaXRxdWV1ZSwgKHZvaWQqKSZjdGFzaywgc2l6ZW9mKHZvaWQqKSkpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3Rhc2ssIHRtcCwgJmNvbm4tPnhtaXRxdWV1ZSwgcnVubmluZykgewogCQlkZWJ1Z19zY3NpKCJmYWlsaW5nIHBlbmRpbmcgc2MgJXAgaXR0IDB4JXhcbiIsIGN0YXNrLT5zYywKIAkJCSAgIGN0YXNrLT5pdHQpOwogCQlmYWlsX2NvbW1hbmQoY29ubiwgY3Rhc2ssIERJRF9CVVNfQlVTWSA8PCAxNik7CkBAIC0xNjE1LDggKzE2MzMsOSBAQAogCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3R4KTsKIAlzcGluX3VubG9ja19iaCgmc2Vzc2lvbi0+bG9jayk7CiAKLQlpZiAoc2Vzc2lvbi0+dHQtPnN1c3BlbmRfY29ubl9yZWN2KQotCQlzZXNzaW9uLT50dC0+c3VzcGVuZF9jb25uX3JlY3YoY29ubik7CisJd3JpdGVfbG9ja19iaChjb25uLT5yZWN2X2xvY2spOworCXNldF9iaXQoSVNDU0lfU1VTUEVORF9CSVQsICZjb25uLT5zdXNwZW5kX3J4KTsKKwl3cml0ZV91bmxvY2tfYmgoY29ubi0+cmVjdl9sb2NrKTsKIAogCW11dGV4X2xvY2soJmNvbm4tPnhtaXRtdXRleCk7CiAJLyoKQEAgLTE2MzUsNyArMTY1NCw2IEBACiAJCX0KIAl9CiAKLQlzZXNzaW9uLT50dC0+dGVybWluYXRlX2Nvbm4oY29ubik7CiAJLyoKIAkgKiBmbHVzaCBxdWV1ZXMuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2F0dHIuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCmluZGV4IDVjNjhjZGQuLmQzODRjMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfYXR0ci5jCkBAIC0yMjIsNyArMjIyLDcgQEAKIAlwbWJveHEtPm1iLm1ieENvbW1hbmQgPSBNQlhfRE9XTl9MSU5LOwogCXBtYm94cS0+bWIubWJ4T3duZXIgPSBPV05fSE9TVDsKIAotCW1ieHN0YXR1cyA9IGxwZmNfc2xpX2lzc3VlX21ib3hfd2FpdChwaGJhLCBwbWJveHEsIHBoYmEtPmZjX3JhdG92ICogMik7CisJbWJ4c3RhdHVzID0gbHBmY19zbGlfaXNzdWVfbWJveF93YWl0KHBoYmEsIHBtYm94cSwgTFBGQ19NQk9YX1RNTyAqIDIpOwogCiAJaWYgKChtYnhzdGF0dXMgPT0gTUJYX1NVQ0NFU1MpICYmIChwbWJveHEtPm1iLm1ieFN0YXR1cyA9PSAwKSkgewogCQltZW1zZXQoKHZvaWQgKilwbWJveHEsIDAsIHNpemVvZiAoTFBGQ19NQk9YUV90KSk7CkBAIC04ODQsNyArODg0LDcgQEAKIAkJICAgIHBoYmEtPnN5c2ZzX21ib3gubWJveCAgID09IE5VTEwgKSB7CiAJCQlzeXNmc19tYm94X2lkbGUocGhiYSk7CiAJCQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9CiAKQEAgLTEwMDAsMTQgKzEwMDAsMTUgQEAKIAkJCXNwaW5fdW5sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCQkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQgKHBoYmEsCiAJCQkJCQkgICAgICAgcGhiYS0+c3lzZnNfbWJveC5tYm94LAotCQkJCQkJICAgICAgIHBoYmEtPmZjX3JhdG92ICogMik7CisJCQkJbHBmY19tYm94X3Rtb192YWwocGhiYSwKKwkJCQkgICAgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYi5tYnhDb21tYW5kKSAqIEhaKTsKIAkJCXNwaW5fbG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJfQogCiAJCWlmIChyYyAhPSBNQlhfU1VDQ0VTUykgewogCQkJc3lzZnNfbWJveF9pZGxlKHBoYmEpOwogCQkJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKKwkJCXJldHVybiAgKHJjID09IE1CWF9USU1FT1VUKSA/IC1FVElNRSA6IC1FTk9ERVY7CiAJCX0KIAkJcGhiYS0+c3lzZnNfbWJveC5zdGF0ZSA9IFNNQk9YX1JFQURJTkc7CiAJfQpAQCAtMTAxNiw3ICsxMDE3LDcgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAgIm1ib3hfcmVhZDogQmFkIFN0YXRlXG4iKTsKIAkJc3lzZnNfbWJveF9pZGxlKHBoYmEpOwogCQlzcGluX3VubG9ja19pcnEoaG9zdC0+aG9zdF9sb2NrKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCW1lbWNweShidWYsICh1aW50OF90ICopICYgcGhiYS0+c3lzZnNfbWJveC5tYm94LT5tYiArIG9mZiwgY291bnQpOwpAQCAtMTIxMCw4ICsxMjExLDEwIEBACiAJc3RydWN0IGxwZmNfaGJhICpwaGJhID0gKHN0cnVjdCBscGZjX2hiYSAqKXNob3N0LT5ob3N0ZGF0YTsKIAlzdHJ1Y3QgbHBmY19zbGkgKnBzbGkgPSAmcGhiYS0+c2xpOwogCXN0cnVjdCBmY19ob3N0X3N0YXRpc3RpY3MgKmhzID0gJnBoYmEtPmxpbmtfc3RhdHM7CisJc3RydWN0IGxwZmNfbG5rX3N0YXQgKiBsc28gPSAmcHNsaS0+bG5rX3N0YXRfb2Zmc2V0czsKIAlMUEZDX01CT1hRX3QgKnBtYm94cTsKIAlNQUlMQk9YX3QgKnBtYjsKKwl1bnNpZ25lZCBsb25nIHNlY29uZHM7CiAJaW50IHJjID0gMDsKIAogCXBtYm94cSA9IG1lbXBvb2xfYWxsb2MocGhiYS0+bWJveF9tZW1fcG9vbCwgR0ZQX0tFUk5FTCk7CkBAIC0xMjcyLDIyICsxMjc1LDEwMyBAQAogCWhzLT5pbnZhbGlkX2NyY19jb3VudCA9IHBtYi0+dW4udmFyUmRMbmsuY3JjQ250OwogCWhzLT5lcnJvcl9mcmFtZXMgPSBwbWItPnVuLnZhclJkTG5rLmNyY0NudDsKIAorCWhzLT5saW5rX2ZhaWx1cmVfY291bnQgLT0gbHNvLT5saW5rX2ZhaWx1cmVfY291bnQ7CisJaHMtPmxvc3Nfb2Zfc3luY19jb3VudCAtPSBsc28tPmxvc3Nfb2Zfc3luY19jb3VudDsKKwlocy0+bG9zc19vZl9zaWduYWxfY291bnQgLT0gbHNvLT5sb3NzX29mX3NpZ25hbF9jb3VudDsKKwlocy0+cHJpbV9zZXFfcHJvdG9jb2xfZXJyX2NvdW50IC09IGxzby0+cHJpbV9zZXFfcHJvdG9jb2xfZXJyX2NvdW50OworCWhzLT5pbnZhbGlkX3R4X3dvcmRfY291bnQgLT0gbHNvLT5pbnZhbGlkX3R4X3dvcmRfY291bnQ7CisJaHMtPmludmFsaWRfY3JjX2NvdW50IC09IGxzby0+aW52YWxpZF9jcmNfY291bnQ7CisJaHMtPmVycm9yX2ZyYW1lcyAtPSBsc28tPmVycm9yX2ZyYW1lczsKKwogCWlmIChwaGJhLT5mY190b3BvbG9neSA9PSBUT1BPTE9HWV9MT09QKSB7CiAJCWhzLT5saXBfY291bnQgPSAocGhiYS0+ZmNfZXZlbnRUYWcgPj4gMSk7CisJCWhzLT5saXBfY291bnQgLT0gbHNvLT5saW5rX2V2ZW50czsKIAkJaHMtPm5vc19jb3VudCA9IC0xOwogCX0gZWxzZSB7CiAJCWhzLT5saXBfY291bnQgPSAtMTsKIAkJaHMtPm5vc19jb3VudCA9IChwaGJhLT5mY19ldmVudFRhZyA+PiAxKTsKKwkJaHMtPm5vc19jb3VudCAtPSBsc28tPmxpbmtfZXZlbnRzOwogCX0KIAogCWhzLT5kdW1wZWRfZnJhbWVzID0gLTE7CiAKLS8qIEZJWCBNRSAqLwotCS8qaHMtPlNlY29uZHNTaW5jZUxhc3RSZXNldCA9IChqaWZmaWVzIC0gbHBmY19sb2FkdGltZSkgLyBIWjsqLworCXNlY29uZHMgPSBnZXRfc2Vjb25kcygpOworCWlmIChzZWNvbmRzIDwgcHNsaS0+c3RhdHNfc3RhcnQpCisJCWhzLT5zZWNvbmRzX3NpbmNlX2xhc3RfcmVzZXQgPSBzZWNvbmRzICsKKwkJCQkoKHVuc2lnbmVkIGxvbmcpLTEgLSBwc2xpLT5zdGF0c19zdGFydCk7CisJZWxzZQorCQlocy0+c2Vjb25kc19zaW5jZV9sYXN0X3Jlc2V0ID0gc2Vjb25kcyAtIHBzbGktPnN0YXRzX3N0YXJ0OwogCiAJcmV0dXJuIGhzOwogfQogCitzdGF0aWMgdm9pZAorbHBmY19yZXNldF9zdGF0cyhzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCkKK3sKKwlzdHJ1Y3QgbHBmY19oYmEgKnBoYmEgPSAoc3RydWN0IGxwZmNfaGJhICopc2hvc3QtPmhvc3RkYXRhOworCXN0cnVjdCBscGZjX3NsaSAqcHNsaSA9ICZwaGJhLT5zbGk7CisJc3RydWN0IGxwZmNfbG5rX3N0YXQgKiBsc28gPSAmcHNsaS0+bG5rX3N0YXRfb2Zmc2V0czsKKwlMUEZDX01CT1hRX3QgKnBtYm94cTsKKwlNQUlMQk9YX3QgKnBtYjsKKwlpbnQgcmMgPSAwOworCisJcG1ib3hxID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYm94cSkKKwkJcmV0dXJuOworCW1lbXNldChwbWJveHEsIDAsIHNpemVvZihMUEZDX01CT1hRX3QpKTsKKworCXBtYiA9ICZwbWJveHEtPm1iOworCXBtYi0+bWJ4Q29tbWFuZCA9IE1CWF9SRUFEX1NUQVRVUzsKKwlwbWItPm1ieE93bmVyID0gT1dOX0hPU1Q7CisJcG1iLT51bi52YXJXb3Jkc1swXSA9IDB4MTsgLyogcmVzZXQgcmVxdWVzdCAqLworCXBtYm94cS0+Y29udGV4dDEgPSBOVUxMOworCisJaWYgKChwaGJhLT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAorCQkoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpKSkKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYm94cSwgTUJYX1BPTEwpOworCWVsc2UKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLCBwaGJhLT5mY19yYXRvdiAqIDIpOworCisJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCWlmIChyYyA9PSBNQlhfVElNRU9VVCkKKwkJCXBtYm94cS0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwkJZWxzZQorCQkJbWVtcG9vbF9mcmVlKHBtYm94cSwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CisJCXJldHVybjsKKwl9CisKKwltZW1zZXQocG1ib3hxLCAwLCBzaXplb2YoTFBGQ19NQk9YUV90KSk7CisJcG1iLT5tYnhDb21tYW5kID0gTUJYX1JFQURfTE5LX1NUQVQ7CisJcG1iLT5tYnhPd25lciA9IE9XTl9IT1NUOworCXBtYm94cS0+Y29udGV4dDEgPSBOVUxMOworCisJaWYgKChwaGJhLT5mY19mbGFnICYgRkNfT0ZGTElORV9NT0RFKSB8fAorCSAgICAoIShwc2xpLT5zbGlfZmxhZyAmIExQRkNfU0xJMl9BQ1RJVkUpKSkKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94KHBoYmEsIHBtYm94cSwgTUJYX1BPTEwpOworCWVsc2UKKwkJcmMgPSBscGZjX3NsaV9pc3N1ZV9tYm94X3dhaXQocGhiYSwgcG1ib3hxLCBwaGJhLT5mY19yYXRvdiAqIDIpOworCisJaWYgKHJjICE9IE1CWF9TVUNDRVNTKSB7CisJCWlmIChyYyA9PSBNQlhfVElNRU9VVCkKKwkJCXBtYm94cS0+bWJveF9jbXBsID0gbHBmY19zbGlfZGVmX21ib3hfY21wbDsKKwkJZWxzZQorCQkJbWVtcG9vbF9mcmVlKCBwbWJveHEsIHBoYmEtPm1ib3hfbWVtX3Bvb2wpOworCQlyZXR1cm47CisJfQorCisJbHNvLT5saW5rX2ZhaWx1cmVfY291bnQgPSBwbWItPnVuLnZhclJkTG5rLmxpbmtGYWlsdXJlQ250OworCWxzby0+bG9zc19vZl9zeW5jX2NvdW50ID0gcG1iLT51bi52YXJSZExuay5sb3NzU3luY0NudDsKKwlsc28tPmxvc3Nfb2Zfc2lnbmFsX2NvdW50ID0gcG1iLT51bi52YXJSZExuay5sb3NzU2lnbmFsQ250OworCWxzby0+cHJpbV9zZXFfcHJvdG9jb2xfZXJyX2NvdW50ID0gcG1iLT51bi52YXJSZExuay5wcmltU2VxRXJyQ250OworCWxzby0+aW52YWxpZF90eF93b3JkX2NvdW50ID0gcG1iLT51bi52YXJSZExuay5pbnZhbGlkWG1pdFdvcmQ7CisJbHNvLT5pbnZhbGlkX2NyY19jb3VudCA9IHBtYi0+dW4udmFyUmRMbmsuY3JjQ250OworCWxzby0+ZXJyb3JfZnJhbWVzID0gcG1iLT51bi52YXJSZExuay5jcmNDbnQ7CisJbHNvLT5saW5rX2V2ZW50cyA9IChwaGJhLT5mY19ldmVudFRhZyA+PiAxKTsKKworCXBzbGktPnN0YXRzX3N0YXJ0ID0gZ2V0X3NlY29uZHMoKTsKKworCXJldHVybjsKK30KIAogLyoKICAqIFRoZSBMUEZDIGRyaXZlciB0cmVhdHMgbGlua2Rvd24gaGFuZGxpbmcgYXMgdGFyZ2V0IGxvc3MgZXZlbnRzIHNvIHRoZXJlCkBAIC0xNDMxLDggKzE1MTUsNyBAQAogCSAqLwogCiAJLmdldF9mY19ob3N0X3N0YXRzID0gbHBmY19nZXRfc3RhdHMsCi0KLQkvKiB0aGUgTFBGQyBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IHJlc2V0dGluZyBzdGF0cyB5ZXQgKi8KKwkucmVzZXRfZmNfaG9zdF9zdGF0cyA9IGxwZmNfcmVzZXRfc3RhdHMsCiAKIAkuZGRfZmNycG9ydF9zaXplID0gc2l6ZW9mKHN0cnVjdCBscGZjX3Jwb3J0X2RhdGEpLAogCS5zaG93X3Jwb3J0X21heGZyYW1lX3NpemUgPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jcnRuLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAppbmRleCA1MTdlOWU0Li4yYTE3NjQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2NydG4uaApAQCAtMTI3LDYgKzEyNyw3IEBACiB2b2lkIGxwZmNfa2lsbF9ib2FyZChzdHJ1Y3QgbHBmY19oYmEgKiwgTFBGQ19NQk9YUV90ICopOwogdm9pZCBscGZjX21ib3hfcHV0KHN0cnVjdCBscGZjX2hiYSAqLCBMUEZDX01CT1hRX3QgKik7CiBMUEZDX01CT1hRX3QgKmxwZmNfbWJveF9nZXQoc3RydWN0IGxwZmNfaGJhICopOworaW50IGxwZmNfbWJveF90bW9fdmFsKHN0cnVjdCBscGZjX2hiYSAqLCBpbnQpOwogCiBpbnQgbHBmY19tZW1fYWxsb2Moc3RydWN0IGxwZmNfaGJhICopOwogdm9pZCBscGZjX21lbV9mcmVlKHN0cnVjdCBscGZjX2hiYSAqKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwppbmRleCBiNjVlZTU3YS4uYmJiNzMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19jdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfY3QuYwpAQCAtMTMxLDYgKzEzMSw3IEBACiAJfQogCiBjdF91bnNvbF9ldmVudF9leGl0X3Bpb2NicToKKwlsaXN0X2RlbCgmaGVhZCk7CiAJaWYgKHBtYnVmKSB7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYXRwLCBuZXh0X21hdHAsICZwbWJ1Zi0+bGlzdCwgbGlzdCkgewogCQkJbHBmY19tYnVmX2ZyZWUocGhiYSwgbWF0cC0+dmlydCwgbWF0cC0+cGh5cyk7CkBAIC00ODEsNyArNDgyLDcgQEAKIAkJaWYgKENUcnNwLT5Db21tYW5kUmVzcG9uc2UuYml0cy5DbWRSc3AgPT0KIAkJICAgIGJlMTZfdG9fY3B1KFNMSV9DVF9SRVNQT05TRV9GU19BQ0MpKSB7CiAJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRElTQ09WRVJZLAotCQkJCQkiJWQ6MDIzOSBOYW1lU2VydmVyIFJzcCAiCisJCQkJCSIlZDowMjA4IE5hbWVTZXJ2ZXIgUnNwICIKIAkJCQkJIkRhdGE6IHgleFxuIiwKIAkJCQkJcGhiYS0+YnJkX25vLAogCQkJCQlwaGJhLT5mY19mbGFnKTsKQEAgLTU4OCwxMyArNTg5LDkgQEAKIAogCWxwZmNfZGVjb2RlX2Zpcm13YXJlX3JldihwaGJhLCBmd3JldiwgMCk7CiAKLQlpZiAocGhiYS0+UG9ydFswXSkgewotCQlzcHJpbnRmKHN5bWJwLCAiRW11bGV4ICVzIFBvcnQgJXMgRlYlcyBEViVzIiwgcGhiYS0+TW9kZWxOYW1lLAotCQkJcGhiYS0+UG9ydCwgZndyZXYsIGxwZmNfcmVsZWFzZV92ZXJzaW9uKTsKLQl9IGVsc2UgewotCQlzcHJpbnRmKHN5bWJwLCAiRW11bGV4ICVzIEZWJXMgRFYlcyIsIHBoYmEtPk1vZGVsTmFtZSwKLQkJCWZ3cmV2LCBscGZjX3JlbGVhc2VfdmVyc2lvbik7Ci0JfQorCXNwcmludGYoc3ltYnAsICJFbXVsZXggJXMgRlYlcyBEViVzIiwgcGhiYS0+TW9kZWxOYW1lLAorCQlmd3JldiwgbHBmY19yZWxlYXNlX3ZlcnNpb24pOworCXJldHVybjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCmluZGV4IGI4OWY2Y2IuLjM1NjdkZTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTE4NDgsOSArMTg0OCwxMiBAQAogbHBmY19jbXBsX2Vsc19hY2Moc3RydWN0IGxwZmNfaGJhICogcGhiYSwgc3RydWN0IGxwZmNfaW9jYnEgKiBjbWRpb2NiLAogCQkgIHN0cnVjdCBscGZjX2lvY2JxICogcnNwaW9jYikKIHsKKwlJT0NCX3QgKmlyc3A7CiAJc3RydWN0IGxwZmNfbm9kZWxpc3QgKm5kbHA7CiAJTFBGQ19NQk9YUV90ICptYm94ID0gTlVMTDsKIAorCWlyc3AgPSAmcnNwaW9jYi0+aW9jYjsKKwogCW5kbHAgPSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgY21kaW9jYi0+Y29udGV4dDE7CiAJaWYgKGNtZGlvY2ItPmNvbnRleHRfdW4ubWJveCkKIAkJbWJveCA9IGNtZGlvY2ItPmNvbnRleHRfdW4ubWJveDsKQEAgLTE4OTMsOSArMTg5NiwxNSBAQAogCQkJbWVtcG9vbF9mcmVlKCBtYm94LCBwaGJhLT5tYm94X21lbV9wb29sKTsKIAkJfSBlbHNlIHsKIAkJCW1lbXBvb2xfZnJlZSggbWJveCwgcGhiYS0+bWJveF9tZW1fcG9vbCk7Ci0JCQlpZiAobmRscC0+bmxwX2ZsYWcgJiBOTFBfQUNDX1JFR0xPR0lOKSB7Ci0JCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7Ci0JCQkJbmRscCA9IE5VTEw7CisJCQkvKiBEbyBub3QgY2FsbCBOT19MSVNUIGZvciBscGZjX2Vsc19hYm9ydCdlZCBFTFMgY21kcyAqLworCQkJaWYgKCEoKGlyc3AtPnVscFN0YXR1cyA9PSBJT1NUQVRfTE9DQUxfUkVKRUNUKSAmJgorCQkJICAgICAgKChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX1NMSV9BQk9SVEVEKSB8fAorCQkJICAgICAgIChpcnNwLT51bi51bHBXb3JkWzRdID09IElPRVJSX0xJTktfRE9XTikgfHwKKwkJCSAgICAgICAoaXJzcC0+dW4udWxwV29yZFs0XSA9PSBJT0VSUl9TTElfRE9XTikpKSkgeworCQkJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9BQ0NfUkVHTE9HSU4pIHsKKwkJCQkJbHBmY19ubHBfbGlzdChwaGJhLCBuZGxwLCBOTFBfTk9fTElTVCk7CisJCQkJCW5kbHAgPSBOVUxMOworCQkJCX0KIAkJCX0KIAkJfQogCX0KQEAgLTI4MzksNyArMjg0OCw3IEBACiAKIAkvKiBYbWl0IEVMUyBSUFMgQUNDIHJlc3BvbnNlIHRhZyA8dWxwSW9UYWc+ICovCiAJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywKLQkJCSIlZDowMTI4IFhtaXQgRUxTIFJQUyBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCisJCQkiJWQ6MDExOCBYbWl0IEVMUyBSUFMgQUNDIHJlc3BvbnNlIHRhZyB4JXggIgogCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleCB4JXhcbiIsCiAJCQlwaGJhLT5icmRfbm8sCiAJCQllbHNpb2NiLT5pb2NiLnVscElvVGFnLApAQCAtMjk0OCw3ICsyOTU3LDcgQEAKIAogCS8qIFhtaXQgRUxTIFJQTCBBQ0MgcmVzcG9uc2UgdGFnIDx1bHBJb1RhZz4gKi8KIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfRUxTLAotCQkJIiVkOjAxMjggWG1pdCBFTFMgUlBMIEFDQyByZXNwb25zZSB0YWcgeCV4ICIKKwkJCSIlZDowMTIwIFhtaXQgRUxTIFJQTCBBQ0MgcmVzcG9uc2UgdGFnIHgleCAiCiAJCQkiRGF0YTogeCV4IHgleCB4JXggeCV4IHgleFxuIiwKIAkJCXBoYmEtPmJyZF9ubywKIAkJCWVsc2lvY2ItPmlvY2IudWxwSW9UYWcsCkBAIC0zMTA5LDcgKzMxMTgsNyBAQAogCXN0cnVjdCBscGZjX25vZGVsaXN0ICpuZGxwLCAqbmV4dF9uZGxwOwogCiAJLyogRkFOIHJlY2VpdmVkICovCi0JbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywgIiVkOjI2NSBGQU4gcmVjZWl2ZWRcbiIsCisJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX0VMUywgIiVkOjAyNjUgRkFOIHJlY2VpdmVkXG4iLAogCQkJCQkJCQlwaGJhLT5icmRfbm8pOwogCiAJaWNtZCA9ICZjbWRpb2NiLT5pb2NiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19oYmFkaXNjLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwppbmRleCA0ZDZjZjk5Li5iMmYxNTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2hiYWRpc2MuYwpAQCAtMTU1Nyw2ICsxNTU3LDggQEAKIAkJCW1iLT5tYm94X2NtcGwgPSBscGZjX3NsaV9kZWZfbWJveF9jbXBsOwogCQl9CiAJfQorCisJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYiwgbmV4dG1iLCAmcGhiYS0+c2xpLm1ib3hxLCBsaXN0KSB7CiAJCWlmICgobWItPm1iLm1ieENvbW1hbmQgPT0gTUJYX1JFR19MT0dJTjY0KSAmJgogCQkgICAobmRscCA9PSAoc3RydWN0IGxwZmNfbm9kZWxpc3QgKikgbWItPmNvbnRleHQyKSkgewpAQCAtMTU2OSw2ICsxNTcxLDcgQEAKIAkJCW1lbXBvb2xfZnJlZShtYiwgcGhiYS0+bWJveF9tZW1fcG9vbCk7CiAJCX0KIAl9CisJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlscGZjX2Vsc19hYm9ydChwaGJhLG5kbHAsMCk7CiAJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOwpAQCAtMTc4Miw3ICsxNzg1LDcgQEAKIAkJCQkvKiBMT0cgY2hhbmdlIHRvIFJFR0xPR0lOICovCiAJCQkJLyogRklORCBub2RlIERJRCByZWdsb2dpbiAqLwogCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19OT0RFLAotCQkJCQkJIiVkOjA5MzEgRklORCBub2RlIERJRCByZWdsb2dpbiIKKwkJCQkJCSIlZDowOTAxIEZJTkQgbm9kZSBESUQgcmVnbG9naW4iCiAJCQkJCQkiIERhdGE6IHglcCB4JXggeCV4IHgleFxuIiwKIAkJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsCkBAIC0xODA1LDcgKzE4MDgsNyBAQAogCQkJCS8qIExPRyBjaGFuZ2UgdG8gUFJMSSAqLwogCQkJCS8qIEZJTkQgbm9kZSBESUQgcHJsaSAqLwogCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19OT0RFLAotCQkJCQkJIiVkOjA5MzEgRklORCBub2RlIERJRCBwcmxpICIKKwkJCQkJCSIlZDowOTAyIEZJTkQgbm9kZSBESUQgcHJsaSAiCiAJCQkJCQkiRGF0YTogeCVwIHgleCB4JXggeCV4XG4iLAogCQkJCQkJcGhiYS0+YnJkX25vLAogCQkJCQkJbmRscCwgbmRscC0+bmxwX0RJRCwKQEAgLTE4MjgsNyArMTgzMSw3IEBACiAJCQkJLyogTE9HIGNoYW5nZSB0byBOUFIgKi8KIAkJCQkvKiBGSU5EIG5vZGUgRElEIG5wciAqLwogCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19OT0RFLAotCQkJCQkJIiVkOjA5MzEgRklORCBub2RlIERJRCBucHIgIgorCQkJCQkJIiVkOjA5MDMgRklORCBub2RlIERJRCBucHIgIgogCQkJCQkJIkRhdGE6IHglcCB4JXggeCV4IHgleFxuIiwKIAkJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJCW5kbHAsIG5kbHAtPm5scF9ESUQsCkBAIC0xODUxLDcgKzE4NTQsNyBAQAogCQkJCS8qIExPRyBjaGFuZ2UgdG8gVU5VU0VEICovCiAJCQkJLyogRklORCBub2RlIERJRCB1bnVzZWQgKi8KIAkJCQlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9JTkZPLCBMT0dfTk9ERSwKLQkJCQkJCSIlZDowOTMxIEZJTkQgbm9kZSBESUQgdW51c2VkICIKKwkJCQkJCSIlZDowOTA1IEZJTkQgbm9kZSBESUQgdW51c2VkICIKIAkJCQkJCSJEYXRhOiB4JXAgeCV4IHgleCB4JXhcbiIsCiAJCQkJCQlwaGJhLT5icmRfbm8sCiAJCQkJCQluZGxwLCBuZGxwLT5ubHBfRElELApAQCAtMjMzNSw3ICsyMzM4LDcgQEAKIAkJaW5pdGxpbmttYm94ID0gbWVtcG9vbF9hbGxvYyhwaGJhLT5tYm94X21lbV9wb29sLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFpbml0bGlua21ib3gpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0RJU0NPVkVSWSwKLQkJCQkJIiVkOjAyMjYgRGV2aWNlIERpc2NvdmVyeSAiCisJCQkJCSIlZDowMjA2IERldmljZSBEaXNjb3ZlcnkgIgogCQkJCQkiY29tcGxldGlvbiBlcnJvclxuIiwKIAkJCQkJcGhiYS0+YnJkX25vKTsKIAkJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfSEJBX0VSUk9SOwpAQCAtMjM2NSw3ICsyMzY4LDcgQEAKIAkJaWYgKCFjbGVhcmxhbWJveCkgewogCQkJY2xybGFlcnIgPSAxOwogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfRElTQ09WRVJZLAotCQkJCQkiJWQ6MDIyNiBEZXZpY2UgRGlzY292ZXJ5ICIKKwkJCQkJIiVkOjAyMDcgRGV2aWNlIERpc2NvdmVyeSAiCiAJCQkJCSJjb21wbGV0aW9uIGVycm9yXG4iLAogCQkJCQlwaGJhLT5icmRfbm8pOwogCQkJcGhiYS0+aGJhX3N0YXRlID0gTFBGQ19IQkFfRVJST1I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCmluZGV4IGVmNDdiODIuLmY2OTQ4ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfaW5pdC5jCkBAIC0xMzc5LDYgKzEzNzksNyBAQAogCS8qIHN0b3AgYWxsIHRpbWVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBoYmEgKi8KIAlscGZjX3N0b3BfdGltZXIocGhiYSk7CiAJcGhiYS0+d29ya19oYmFfZXZlbnRzID0gMDsKKwlwaGJhLT53b3JrX2hhID0gMDsKIAogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQkgICAgICAgS0VSTl9XQVJOSU5HLApAQCAtMTYxNiw3ICsxNjE3LDExIEBACiAJCWdvdG8gb3V0X2ZyZWVfaW9jYnE7CiAJfQogCi0JLyogV2UgY2FuIHJlbHkgb24gYSBxdWV1ZSBkZXB0aCBhdHRyaWJ1dGUgb25seSBhZnRlciBTTEkgSEJBIHNldHVwICovCisJLyoKKwkgKiBTZXQgaW5pdGlhbCBjYW5fcXVldWUgdmFsdWUgc2luY2UgMCBpcyBubyBsb25nZXIgc3VwcG9ydGVkIGFuZAorCSAqIHNjc2lfYWRkX2hvc3Qgd2lsbCBmYWlsLiBUaGlzIHdpbGwgYmUgYWRqdXN0ZWQgbGF0ZXIgYmFzZWQgb24gdGhlCisJICogbWF4IHhyaSB2YWx1ZSBkZXRlcm1pbmVkIGluIGhiYSBzZXR1cC4KKwkgKi8KIAlob3N0LT5jYW5fcXVldWUgPSBwaGJhLT5jZmdfaGJhX3F1ZXVlX2RlcHRoIC0gMTA7CiAKIAkvKiBUZWxsIHRoZSBtaWRsYXllciB3ZSBzdXBwb3J0IDE2IGJ5dGUgY29tbWFuZHMgKi8KQEAgLTE2NTYsNiArMTY2MSwxMiBAQAogCQlnb3RvIG91dF9mcmVlX2lycTsKIAl9CiAKKwkvKgorCSAqIGhiYSBzZXR1cCBtYXkgaGF2ZSBjaGFuZ2VkIHRoZSBoYmFfcXVldWVfZGVwdGggc28gd2UgbmVlZCB0byBhZGp1c3QKKwkgKiB0aGUgdmFsdWUgb2YgY2FuX3F1ZXVlLgorCSAqLworCWhvc3QtPmNhbl9xdWV1ZSA9IHBoYmEtPmNmZ19oYmFfcXVldWVfZGVwdGggLSAxMDsKKwogCWxwZmNfZGlzY292ZXJ5X3dhaXQocGhiYSk7CiAKIAlpZiAocGhiYS0+Y2ZnX3BvbGwgJiBESVNBQkxFX0ZDUF9SSU5HX0lOVCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19tYm94LmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwppbmRleCBlNDJmMjJhLi40ZDAxNmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYworKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX21ib3guYwpAQCAtNjUxLDMgKzY1MSwxOSBAQAogCiAJcmV0dXJuIG1icTsKIH0KKworaW50CitscGZjX21ib3hfdG1vX3ZhbChzdHJ1Y3QgbHBmY19oYmEgKnBoYmEsIGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIE1CWF9XUklURV9OVjoJLyogMHgwMyAqLworCWNhc2UgTUJYX1VQREFURV9DRkc6CS8qIDB4MUIgKi8KKwljYXNlIE1CWF9ET1dOX0xPQUQ6CS8qIDB4MUMgKi8KKwljYXNlIE1CWF9ERUxfTERfRU5UUlk6CS8qIDB4MUQgKi8KKwljYXNlIE1CWF9MT0FEX0FSRUE6CS8qIDB4ODEgKi8KKwljYXNlIE1CWF9GTEFTSF9XUl9VTEE6ICAvKiAweDk4ICovCisJY2FzZSBNQlhfTE9BRF9FWFBfUk9NOgkvKiAweDlDICovCisJCXJldHVybiBMUEZDX01CT1hfVE1PX0ZMQVNIX0NNRDsKKwl9CisJcmV0dXJuIExQRkNfTUJPWF9UTU87Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19ucG9ydGRpc2MuYwppbmRleCBiZDBiMGUyLi4yMDQ0OWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX25wb3J0ZGlzYy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfbnBvcnRkaXNjLmMKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAJLyogQWJvcnQgb3V0c3RhbmRpbmcgSS9PIG9uIE5Qb3J0IDxubHBfRElEPiAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19ESVNDT1ZFUlksCi0JCQkiJWQ6MDIwMSBBYm9ydCBvdXRzdGFuZGluZyBJL08gb24gTlBvcnQgeCV4ICIKKwkJCSIlZDowMjA1IEFib3J0IG91dHN0YW5kaW5nIEkvTyBvbiBOUG9ydCB4JXggIgogCQkJIkRhdGE6IHgleCB4JXggeCV4XG4iLAogCQkJcGhiYS0+YnJkX25vLCBuZGxwLT5ubHBfRElELCBuZGxwLT5ubHBfZmxhZywKIAkJCW5kbHAtPm5scF9zdGF0ZSwgbmRscC0+bmxwX3JwaSk7CkBAIC0zOTMsNiArMzkzLDIwIEBACiAJbWJveC0+Y29udGV4dDIgID0gbmRscDsKIAluZGxwLT5ubHBfZmxhZyB8PSAoTkxQX0FDQ19SRUdMT0dJTiB8IE5MUF9SQ1ZfUExPR0kpOwogCisJLyoKKwkgKiBJZiB0aGVyZSBpcyBhbiBvdXRzdGFuZGluZyBQTE9HSSBpc3N1ZWQsIGFib3J0IGl0IGJlZm9yZQorCSAqIHNlbmRpbmcgQUNDIHJzcCBmb3IgcmVjZWl2ZWQgUExPR0kuIElmIHBlbmRpbmcgcGxvZ2kKKwkgKiBpcyBub3QgY2FuY2VsZWQgaGVyZSwgdGhlIHBsb2dpIHdpbGwgYmUgcmVqZWN0ZWQgYnkKKwkgKiByZW1vdGUgcG9ydCBhbmQgd2lsbCBiZSByZXRyaWVkLiBPbiBhIGNvbmZpZ3VyYXRpb24gd2l0aAorCSAqIHNpbmdsZSBkaXNjb3ZlcnkgdGhyZWFkLCB0aGlzIHdpbGwgY2F1c2UgYSBodWdlIGRlbGF5IGluCisJICogZGlzY292ZXJ5LiBBbHNvIHRoaXMgd2lsbCBjYXVzZSBtdWx0aXBsZSBzdGF0ZSBtYWNoaW5lcworCSAqIHJ1bm5pbmcgaW4gcGFyYWxsZWwgZm9yIHRoaXMgbm9kZS4KKwkgKi8KKwlpZiAobmRscC0+bmxwX3N0YXRlID09IE5MUF9TVEVfUExPR0lfSVNTVUUpIHsKKwkJLyogc29mdHdhcmUgYWJvcnQgb3V0c3RhbmRpbmcgUExPR0kgKi8KKwkJbHBmY19lbHNfYWJvcnQocGhiYSwgbmRscCwgMSk7CisJfQorCiAJbHBmY19lbHNfcnNwX2FjYyhwaGJhLCBFTFNfQ01EX1BMT0dJLCBjbWRpb2NiLCBuZGxwLCBtYm94LCAwKTsKIAlyZXR1cm4gMTsKIApAQCAtMTYwMSw3ICsxNjE1LDEzIEBACiAKIAlscGZjX3Jjdl9wYWRpc2MocGhiYSwgbmRscCwgY21kaW9jYik7CiAKLQlpZiAoIShuZGxwLT5ubHBfZmxhZyAmIE5MUF9ERUxBWV9UTU8pKSB7CisJLyoKKwkgKiBEbyBub3Qgc3RhcnQgZGlzY292ZXJ5IGlmIGRpc2NvdmVyeSBpcyBhYm91dCB0byBzdGFydAorCSAqIG9yIGRpc2NvdmVyeSBpbiBwcm9ncmVzcyBmb3IgdGhpcyBub2RlLiBTdGFydGluZyBkaXNjb3ZlcnkKKwkgKiBoZXJlIHdpbGwgYWZmZWN0IHRoZSBjb3VudGluZyBvZiBkaXNjb3ZlcnkgdGhyZWFkcy4KKwkgKi8KKwlpZiAoKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfREVMQVlfVE1PKSkgJiYKKwkJKG5kbHAtPm5scF9mbGFnICYgTkxQX05QUl8yQl9ESVNDKSl7CiAJCWlmIChuZGxwLT5ubHBfZmxhZyAmIE5MUF9OUFJfQURJU0MpIHsKIAkJCW5kbHAtPm5scF9wcmV2X3N0YXRlID0gTkxQX1NURV9OUFJfTk9ERTsKIAkJCW5kbHAtPm5scF9zdGF0ZSA9IE5MUF9TVEVfQURJU0NfSVNTVUU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCmluZGV4IGE3NjBhNDQuLmE4ODE2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtODQxLDYgKzg0MiwyMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZAorbHBmY19ibG9ja19lcnJvcl9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCit7CisJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3QgPSBjbW5kLT5kZXZpY2UtPmhvc3Q7CisJc3RydWN0IGZjX3Jwb3J0ICpycG9ydCA9IHN0YXJnZXRfdG9fcnBvcnQoc2NzaV90YXJnZXQoY21uZC0+ZGV2aWNlKSk7CisKKwlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXdoaWxlIChycG9ydC0+cG9ydF9zdGF0ZSA9PSBGQ19QT1JUU1RBVEVfQkxPQ0tFRCkgeworCQlzcGluX3VubG9ja19pcnEoc2hvc3QtPmhvc3RfbG9jayk7CisJCW1zbGVlcCgxMDAwKTsKKwkJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOworCXJldHVybjsKK30KIAogc3RhdGljIGludAogbHBmY19hYm9ydF9oYW5kbGVyKHN0cnVjdCBzY3NpX2NtbmQgKmNtbmQpCkBAIC04NTUsNiArODcxLDcgQEAKIAl1bnNpZ25lZCBpbnQgbG9vcF9jb3VudCA9IDA7CiAJaW50IHJldCA9IFNVQ0NFU1M7CiAKKwlscGZjX2Jsb2NrX2Vycm9yX2hhbmRsZXIoY21uZCk7CiAJc3Bpbl9sb2NrX2lycShzaG9zdC0+aG9zdF9sb2NrKTsKIAogCWxwZmNfY21kID0gKHN0cnVjdCBscGZjX3Njc2lfYnVmICopY21uZC0+aG9zdF9zY3JpYmJsZTsKQEAgLTk1Nyw2ICs5NzQsNyBAQAogCWludCByZXQgPSBGQUlMRUQ7CiAJaW50IGNudCwgbG9vcGNudDsKIAorCWxwZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihjbW5kKTsKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCS8qCiAJICogSWYgdGFyZ2V0IGlzIG5vdCBpbiBhIE1BUFBFRCBzdGF0ZSwgZGVsYXkgdGhlIHJlc2V0IHVudGlsCkBAIC0xMDczLDYgKzEwOTEsNyBAQAogCWludCBjbnQsIGxvb3BjbnQ7CiAJc3RydWN0IGxwZmNfc2NzaV9idWYgKiBscGZjX2NtZDsKIAorCWxwZmNfYmxvY2tfZXJyb3JfaGFuZGxlcihjbW5kKTsKIAlzcGluX2xvY2tfaXJxKHNob3N0LT5ob3N0X2xvY2spOwogCiAJbHBmY19jbWQgPSBscGZjX2dldF9zY3NpX2J1ZihwaGJhKTsKQEAgLTExMDQsNyArMTEyMyw3IEBACiAJCQkJCSAgbmRscC0+cnBvcnQtPmRkX2RhdGEpOwogCQlpZiAocmV0ICE9IFNVQ0NFU1MpIHsKIAkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX0ZDUCwKLQkJCQkiJWQ6MDcxMyBCdXMgUmVzZXQgb24gdGFyZ2V0ICVkIGZhaWxlZFxuIiwKKwkJCQkiJWQ6MDcwMCBCdXMgUmVzZXQgb24gdGFyZ2V0ICVkIGZhaWxlZFxuIiwKIAkJCQlwaGJhLT5icmRfbm8sIGkpOwogCQkJZXJyX2NvdW50Kys7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5jCmluZGV4IDM1MGE2MjUuLjcwZjRkNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuYwpAQCAtMzIwLDcgKzMyMCw4IEBACiAJCQlrZnJlZShvbGRfYXJyKTsKIAkJCXJldHVybiBpb3RhZzsKIAkJfQotCX0KKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAKIAlscGZjX3ByaW50Zl9sb2cocGhiYSwgS0VSTl9FUlIsTE9HX1NMSSwKIAkJCSIlZDowMzE4IEZhaWxlZCB0byBhbGxvY2F0ZSBJT1RBRy5sYXN0IElPVEFHIGlzICVkXG4iLApAQCAtOTY5LDkgKzk3MCwxMSBAQAogCQkJICogcmVzb3VyY2VzIG5lZWQgdG8gYmUgcmVjb3ZlcmVkLgogCQkJICovCiAJCQlpZiAodW5saWtlbHkoaXJzcC0+dWxwQ29tbWFuZCA9PSBDTURfWFJJX0FCT1JURURfQ1gpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IElPQ0IgY21kIDB4JXggcHJvY2Vzc2VkLiIKLQkJCQkgICAgICAgIiBTa2lwcGluZyBjb21wbGV0aW9uXG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkJICAgICAgIGlyc3AtPnVscENvbW1hbmQpOworCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCisJCQkJCQkiJWQ6MDMxNCBJT0NCIGNtZCAweCV4IgorCQkJCQkJIiBwcm9jZXNzZWQuIFNraXBwaW5nIgorCQkJCQkJIiBjb21wbGV0aW9uIiwgcGhiYS0+YnJkX25vLAorCQkJCQkJaXJzcC0+dWxwQ29tbWFuZCk7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTExMDQsNyArMTEwNyw3IEBACiAJCWlmICh1bmxpa2VseShpcnNwLT51bHBTdGF0dXMpKSB7CiAJCQkvKiBSc3AgcmluZyA8cmluZ25vPiBlcnJvcjogSU9DQiAqLwogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fV0FSTklORywgTE9HX1NMSSwKLQkJCQkiJWQ6MDMyNiBSc3AgUmluZyAlZCBlcnJvcjogSU9DQiBEYXRhOiAiCisJCQkJIiVkOjAzMzYgUnNwIFJpbmcgJWQgZXJyb3I6IElPQ0IgRGF0YTogIgogCQkJCSJ4JXggeCV4IHgleCB4JXggeCV4IHgleCB4JXggeCV4XG4iLAogCQkJCXBoYmEtPmJyZF9ubywgcHJpbmctPnJpbmdubywKIAkJCQlpcnNwLT51bi51bHBXb3JkWzBdLCBpcnNwLT51bi51bHBXb3JkWzFdLApAQCAtMTEyMiw5ICsxMTI1LDExIEBACiAJCQkgKiByZXNvdXJjZXMgbmVlZCB0byBiZSByZWNvdmVyZWQuCiAJCQkgKi8KIAkJCWlmICh1bmxpa2VseShpcnNwLT51bHBDb21tYW5kID09IENNRF9YUklfQUJPUlRFRF9DWCkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogSU9DQiBjbWQgMHgleCBwcm9jZXNzZWQuICIKLQkJCQkgICAgICAgIlNraXBwaW5nIGNvbXBsZXRpb25cbiIsIF9fRlVOQ1RJT05fXywKLQkJCQkgICAgICAgaXJzcC0+dWxwQ29tbWFuZCk7CisJCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fSU5GTywgTE9HX1NMSSwKKwkJCQkJCSIlZDowMzMzIElPQ0IgY21kIDB4JXgiCisJCQkJCQkiIHByb2Nlc3NlZC4gU2tpcHBpbmciCisJCQkJCQkiIGNvbXBsZXRpb25cbiIsIHBoYmEtPmJyZF9ubywKKwkJCQkJCWlyc3AtPnVscENvbW1hbmQpOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0xMTU1LDcgKzExNjAsNyBAQAogCQkJfSBlbHNlIHsKIAkJCQkvKiBVbmtub3duIElPQ0IgY29tbWFuZCAqLwogCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0VSUiwgTE9HX1NMSSwKLQkJCQkJIiVkOjAzMjEgVW5rbm93biBJT0NCIGNvbW1hbmQgIgorCQkJCQkiJWQ6MDMzNCBVbmtub3duIElPQ0IgY29tbWFuZCAiCiAJCQkJCSJEYXRhOiB4JXgsIHgleCB4JXggeCV4IHgleFxuIiwKIAkJCQkJcGhiYS0+YnJkX25vLCB0eXBlLCBpcnNwLT51bHBDb21tYW5kLAogCQkJCQlpcnNwLT51bHBTdGF0dXMsIGlyc3AtPnVscElvVGFnLApAQCAtMTIzOCw3ICsxMjQzLDcgQEAKIAkJbHBmY19wcmludGZfbG9nKHBoYmEsCiAJCQkJS0VSTl9FUlIsCiAJCQkJTE9HX1NMSSwKLQkJCQkiJWQ6MDMxMiBSaW5nICVkIGhhbmRsZXI6IHBvcnRSc3BQdXQgJWQgIgorCQkJCSIlZDowMzAzIFJpbmcgJWQgaGFuZGxlcjogcG9ydFJzcFB1dCAlZCAiCiAJCQkJImlzIGJpZ2dlciB0aGVuIHJzcCByaW5nICVkXG4iLAogCQkJCXBoYmEtPmJyZF9ubywKIAkJCQlwcmluZy0+cmluZ25vLCBwb3J0UnNwUHV0LCBwb3J0UnNwTWF4KTsKQEAgLTEzODMsNyArMTM4OCw3IEBACiAJCQkJCWxwZmNfcHJpbnRmX2xvZyhwaGJhLAogCQkJCQkJS0VSTl9FUlIsCiAJCQkJCQlMT0dfU0xJLAotCQkJCQkJIiVkOjAzMjEgVW5rbm93biBJT0NCIGNvbW1hbmQgIgorCQkJCQkJIiVkOjAzMzUgVW5rbm93biBJT0NCIGNvbW1hbmQgIgogCQkJCQkJIkRhdGE6IHgleCB4JXggeCV4IHgleFxuIiwKIAkJCQkJCXBoYmEtPmJyZF9ubywKIAkJCQkJCWlyc3AtPnVscENvbW1hbmQsCkBAIC0xMzk5LDExICsxNDA0LDExIEBACiAJCQkJCQkJCSBuZXh0X2lvY2IsCiAJCQkJCQkJCSAmc2F2ZXEtPmxpc3QsCiAJCQkJCQkJCSBsaXN0KSB7CisJCQkJCQlsaXN0X2RlbCgmcnNwaW9jYnAtPmxpc3QpOwogCQkJCQkJbHBmY19zbGlfcmVsZWFzZV9pb2NicShwaGJhLAogCQkJCQkJCQkgICAgIHJzcGlvY2JwKTsKIAkJCQkJfQogCQkJCX0KLQogCQkJCWxwZmNfc2xpX3JlbGVhc2VfaW9jYnEocGhiYSwgc2F2ZXEpOwogCQkJfQogCQl9CkBAIC0xNzExLDE1ICsxNzE2LDEzIEBACiAJcGhiYS0+ZmNfbXlESUQgPSAwOwogCXBoYmEtPmZjX3ByZXZESUQgPSAwOwogCi0JcHNsaS0+c2xpX2ZsYWcgPSAwOwotCiAJLyogVHVybiBvZmYgcGFyaXR5IGNoZWNraW5nIGFuZCBzZXJyIGR1cmluZyB0aGUgcGh5c2ljYWwgcmVzZXQgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChwaGJhLT5wY2lkZXYsIFBDSV9DT01NQU5ELCAmY2ZnX3ZhbHVlKTsKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGhiYS0+cGNpZGV2LCBQQ0lfQ09NTUFORCwKIAkJCSAgICAgIChjZmdfdmFsdWUgJgogCQkJICAgICAgIH4oUENJX0NPTU1BTkRfUEFSSVRZIHwgUENJX0NPTU1BTkRfU0VSUikpKTsKIAotCXBzbGktPnNsaV9mbGFnICY9IH5MUEZDX1NMSTJfQUNUSVZFOworCXBzbGktPnNsaV9mbGFnICY9IH4oTFBGQ19TTEkyX0FDVElWRSB8IExQRkNfUFJPQ0VTU19MQSk7CiAJLyogTm93IHRvZ2dsZSBJTklURkYgYml0IGluIHRoZSBIb3N0IENvbnRyb2wgUmVnaXN0ZXIgKi8KIAl3cml0ZWwoSENfSU5JVEZGLCBwaGJhLT5IQ3JlZ2FkZHIpOwogCW1kZWxheSgxKTsKQEAgLTE3NjAsNyArMTc2Myw3IEBACiAKIAkvKiBSZXN0YXJ0IEhCQSAqLwogCWxwZmNfcHJpbnRmX2xvZyhwaGJhLCBLRVJOX0lORk8sIExPR19TTEksCi0JCQkiJWQ6MDMyOCBSZXN0YXJ0IEhCQSBEYXRhOiB4JXggeCV4XG4iLCBwaGJhLT5icmRfbm8sCisJCQkiJWQ6MDMzNyBSZXN0YXJ0IEhCQSBEYXRhOiB4JXggeCV4XG4iLCBwaGJhLT5icmRfbm8sCiAJCQlwaGJhLT5oYmFfc3RhdGUsIHBzbGktPnNsaV9mbGFnKTsKIAogCXdvcmQwID0gMDsKQEAgLTE3OTIsNiArMTc5NSw5IEBACiAKIAlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAorCW1lbXNldCgmcHNsaS0+bG5rX3N0YXRfb2Zmc2V0cywgMCwgc2l6ZW9mKHBzbGktPmxua19zdGF0X29mZnNldHMpKTsKKwlwc2xpLT5zdGF0c19zdGFydCA9IGdldF9zZWNvbmRzKCk7CisKIAlpZiAoc2tpcF9wb3N0KQogCQltZGVsYXkoMTAwKTsKIAllbHNlCkBAIC0xOTAyLDYgKzE5MDgsOSBAQAogCX0KIAogCXdoaWxlIChyZXNldGNvdW50IDwgMiAmJiAhZG9uZSkgeworCQlzcGluX2xvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CisJCXBoYmEtPnNsaS5zbGlfZmxhZyB8PSBMUEZDX1NMSV9NQk9YX0FDVElWRTsKKwkJc3Bpbl91bmxvY2tfaXJxKHBoYmEtPmhvc3QtPmhvc3RfbG9jayk7CiAJCXBoYmEtPmhiYV9zdGF0ZSA9IExQRkNfU1RBVEVfVU5LTk9XTjsKIAkJbHBmY19zbGlfYnJkcmVzdGFydChwaGJhKTsKIAkJbXNsZWVwKDI1MDApOwpAQCAtMTkwOSw2ICsxOTE4LDkgQEAKIAkJaWYgKHJjKQogCQkJYnJlYWs7CiAKKwkJc3Bpbl9sb2NrX2lycShwaGJhLT5ob3N0LT5ob3N0X2xvY2spOworCQlwaGJhLT5zbGkuc2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOworCQlzcGluX3VubG9ja19pcnEocGhiYS0+aG9zdC0+aG9zdF9sb2NrKTsKIAkJcmVzZXRjb3VudCsrOwogCiAJLyogQ2FsbCBwcmUgQ09ORklHX1BPUlQgbWFpbGJveCBjb21tYW5kIGluaXRpYWxpemF0aW9uLiAgQSB2YWx1ZSBvZiAwCkBAIC0yMTk0LDcgKzIyMDYsOCBAQAogCQkJcmV0dXJuIChNQlhfTk9UX0ZJTklTSEVEKTsKIAkJfQogCQkvKiB0aW1lb3V0IGFjdGl2ZSBtYm94IGNvbW1hbmQgKi8KLQkJbW9kX3RpbWVyKCZwc2xpLT5tYm94X3RtbywgamlmZmllcyArIEhaICogTFBGQ19NQk9YX1RNTyk7CisJCW1vZF90aW1lcigmcHNsaS0+bWJveF90bW8sIChqaWZmaWVzICsKKwkJCSAgICAgICAoSFogKiBscGZjX21ib3hfdG1vX3ZhbChwaGJhLCBtYi0+bWJ4Q29tbWFuZCkpKSk7CiAJfQogCiAJLyogTWFpbGJveCBjbWQgPGNtZD4gaXNzdWUgKi8KQEAgLTIyNTQsNyArMjI2Nyw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNQlhfUE9MTDoKLQkJaSA9IDA7CiAJCXBzbGktPm1ib3hfYWN0aXZlID0gTlVMTDsKIAkJaWYgKHBzbGktPnNsaV9mbGFnICYgTFBGQ19TTEkyX0FDVElWRSkgewogCQkJLyogRmlyc3QgcmVhZCBtYm94IHN0YXR1cyB3b3JkICovCkBAIC0yMjY4LDExICsyMjgwLDE0IEBACiAJCS8qIFJlYWQgdGhlIEhCQSBIb3N0IEF0dGVudGlvbiBSZWdpc3RlciAqLwogCQloYV9jb3B5ID0gcmVhZGwocGhiYS0+SEFyZWdhZGRyKTsKIAorCQlpID0gbHBmY19tYm94X3Rtb192YWwocGhiYSwgbWItPm1ieENvbW1hbmQpOworCQlpICo9IDEwMDA7IC8qIENvbnZlcnQgdG8gbXMgKi8KKwogCQkvKiBXYWl0IGZvciBjb21tYW5kIHRvIGNvbXBsZXRlICovCiAJCXdoaWxlICgoKHdvcmQwICYgT1dOX0NISVApID09IE9XTl9DSElQKSB8fAogCQkgICAgICAgKCEoaGFfY29weSAmIEhBX01CQVRUKSAmJgogCQkJKHBoYmEtPmhiYV9zdGF0ZSA+IExQRkNfV0FSTV9TVEFSVCkpKSB7Ci0JCQlpZiAoaSsrID49IDEwMCkgeworCQkJaWYgKGktLSA8PSAwKSB7CiAJCQkJcHNsaS0+c2xpX2ZsYWcgJj0gfkxQRkNfU0xJX01CT1hfQUNUSVZFOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocGhiYS0+aG9zdC0+aG9zdF9sb2NrLAogCQkJCQkJICAgICAgIGRydnJfZmxhZyk7CkBAIC0yMjkwLDcgKzIzMDUsNyBAQAogCiAJCQkvKiBDYW4gYmUgaW4gaW50ZXJydXB0IGNvbnRleHQsIGRvIG5vdCBzbGVlcCAqLwogCQkJLyogKG9yIG1pZ2h0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQpICovCi0JCQltZGVsYXkoaSk7CisJCQltZGVsYXkoMSk7CiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKHBoYmEtPmhvc3QtPmhvc3RfbG9jaywgZHJ2cl9mbGFnKTsKIApAQCAtMzAwNSw3ICszMDIwLDcgQEAKIAogCQlpZiAodGltZWxlZnQgPT0gMCkgewogCQkJbHBmY19wcmludGZfbG9nKHBoYmEsIEtFUk5fRVJSLCBMT0dfU0xJLAotCQkJCQkiJWQ6MDMyOSBJT0NCIHdhaXQgdGltZW91dCBlcnJvciAtIG5vICIKKwkJCQkJIiVkOjAzMzggSU9DQiB3YWl0IHRpbWVvdXQgZXJyb3IgLSBubyAiCiAJCQkJCSJ3YWtlIHJlc3BvbnNlIERhdGEgeCV4XG4iLAogCQkJCQlwaGJhLT5icmRfbm8sIHRpbWVvdXQpOwogCQkJcmV0dmFsID0gSU9DQl9USU1FRE9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2xpLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCmluZGV4IGQ4ZWYwZDIuLmUyNmRlNjgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zbGkuaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3NsaS5oCkBAIC0xNzIsNiArMTcyLDE4IEBACiAJdWludDMyX3QgbWJveF9idXN5OwkgLyogTWFpbGJveCBjbWQgYnVzeSAqLwogfTsKIAorLyogU3RydWN0dXJlIHRvIHN0b3JlIGxpbmsgc3RhdHVzIHZhbHVlcyB3aGVuIHBvcnQgc3RhdHMgYXJlIHJlc2V0ICovCitzdHJ1Y3QgbHBmY19sbmtfc3RhdCB7CisJdWludDMyX3QgbGlua19mYWlsdXJlX2NvdW50OworCXVpbnQzMl90IGxvc3Nfb2Zfc3luY19jb3VudDsKKwl1aW50MzJfdCBsb3NzX29mX3NpZ25hbF9jb3VudDsKKwl1aW50MzJfdCBwcmltX3NlcV9wcm90b2NvbF9lcnJfY291bnQ7CisJdWludDMyX3QgaW52YWxpZF90eF93b3JkX2NvdW50OworCXVpbnQzMl90IGludmFsaWRfY3JjX2NvdW50OworCXVpbnQzMl90IGVycm9yX2ZyYW1lczsKKwl1aW50MzJfdCBsaW5rX2V2ZW50czsKK307CisKIC8qIFN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgU0xJIGluZm9ybWF0aW9uICovCiBzdHJ1Y3QgbHBmY19zbGkgewogCXVpbnQzMl90IG51bV9yaW5nczsKQEAgLTIwMSw2ICsyMTMsOCBAQAogCXN0cnVjdCBscGZjX2lvY2JxICoqIGlvY2JxX2xvb2t1cDsgLyogYXJyYXkgdG8gbG9va3VwIElPQ0IgYnkgSU9UQUcgKi8KIAlzaXplX3QgaW9jYnFfbG9va3VwX2xlbjsgICAgICAgICAgIC8qIGN1cnJlbnQgbGVuZ3Mgb2YgdGhlIGFycmF5ICovCiAJdWludDE2X3QgIGxhc3RfaW90YWc7ICAgICAgICAgICAgICAvKiBsYXN0IGFsbG9jYXRlZCBJT1RBRyAqLworCXVuc2lnbmVkIGxvbmcgIHN0YXRzX3N0YXJ0OyAgICAgICAgLyogaW4gc2Vjb25kcyAqLworCXN0cnVjdCBscGZjX2xua19zdGF0IGxua19zdGF0X29mZnNldHM7CiB9OwogCiAvKiBHaXZlbiBhIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSByaW5nLCBhbmQgdGhlIHNsb3QgbnVtYmVyIG9mCkBAIC0yMTEsMyArMjI1LDkgQEAKIAogI2RlZmluZSBMUEZDX01CT1hfVE1PICAgICAgICAgICAzMAkvKiBTZWMgdG1vIGZvciBvdXRzdGFuZGluZyBtYm94CiAJCQkJCSAgIGNvbW1hbmQgKi8KKyNkZWZpbmUgTFBGQ19NQk9YX1RNT19GTEFTSF9DTUQgMzAwICAgICAvKiBTZWMgdG1vIGZvciBvdXRzdGFuZGluZyBGTEFTSCB3cml0ZQorCQkJCQkgKiBvciBlcmFzZSBjbWRzLiBUaGlzIGlzIGVzcGVjaWFsbHkKKwkJCQkJICogbG9uZyBiZWNhdXNlIG9mIHRoZSBwb3RlbnRpYWwgb2YKKwkJCQkJICogbXVsdGlwbGUgZmxhc2ggZXJhc2VzIHRoYXQgY2FuIGJlCisJCQkJCSAqIHNwYXduZWQuCisJCQkJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY192ZXJzaW9uLmggYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAppbmRleCAxMGU4OWM2Li5jNzA5MWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX3ZlcnNpb24uaApAQCAtMTgsNyArMTgsNyBAQAogICogaW5jbHVkZWQgd2l0aCB0aGlzIHBhY2thZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jZGVmaW5lIExQRkNfRFJJVkVSX1ZFUlNJT04gIjguMS43IgorI2RlZmluZSBMUEZDX0RSSVZFUl9WRVJTSU9OICI4LjEuOSIKIAogI2RlZmluZSBMUEZDX0RSSVZFUl9OQU1FICJscGZjIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWFjNTNjOTQuYyBiL2RyaXZlcnMvc2NzaS9tYWM1M2M5NC5jCmluZGV4IDg5ZWYzNGQuLjY0MjJkZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tYWM1M2M5NC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tYWM1M2M5NC5jCkBAIC00MzEsNyArNDMxLDcgQEAKIAlzdHJ1Y3QgZnNjX3N0YXRlICpzdGF0ZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0OwogCXZvaWQgKmRtYV9jbWRfc3BhY2U7Ci0JdW5zaWduZWQgY2hhciAqY2xrcHJvcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpjbGtwcm9wOwogCWludCBwcm9wbGVuLCByYyA9IC1FTk9ERVY7CiAKIAlpZiAobWFjaW9fcmVzb3VyY2VfY291bnQobWRldikgIT0gMiB8fCBtYWNpb19pcnFfY291bnQobWRldikgIT0gMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FfY29tbW9uLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaAppbmRleCA0Njc1MzQzLi44Y2QwYmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaAorKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYV9jb21tb24uaApAQCAtMzcsNiArMzcsMTIgQEAKICNkZWZpbmUgTFNJX01BWF9DSEFOTkVMUwkJMTYKICNkZWZpbmUgTFNJX01BWF9MT0dJQ0FMX0RSSVZFU182NExECSg2NCsxKQogCisjZGVmaW5lIEhCQV9TSUdOQVRVUkVfNjRfQklUCQkweDI5OQorI2RlZmluZSBQQ0lfQ09ORl9BTUlTSUc2NAkJMHhhNAorCisjZGVmaW5lIE1FR0FfU0NTSV9JTlFfRVZQRAkJMQorI2RlZmluZSBNRUdBX0lOVkFMSURfRklFTERfSU5fQ0RCCTB4MjQKKwogCiAvKioKICAqIHNjYl90IC0gc2NzaSBjb21tYW5kIGNvbnRyb2wgYmxvY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9pb2N0bC5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX2lvY3RsLmgKaW5kZXggYmRhZWUxNC4uYjhhYTM0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX2lvY3RsLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX2lvY3RsLmgKQEAgLTEzMiw2ICsxMzIsMTAgQEAKIC8qIERyaXZlciBEYXRhOiAqLwogCXZvaWQgX191c2VyICoJCXVzZXJfZGF0YTsKIAl1aW50MzJfdAkJdXNlcl9kYXRhX2xlbjsKKworCS8qIDY0Yml0IGFsaWdubWVudCAqLworCXVpbnQzMl90ICAgICAgICAgICAgICAgIHBhZF9mb3JfNjRiaXRfYWxpZ247CisKIAltcmFpZF9wYXNzdGhydV90CV9fdXNlciAqdXNlcl9wdGhydTsKIAogCW1yYWlkX3Bhc3N0aHJ1X3QJKnB0aHJ1MzI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guYwppbmRleCA5MjcxNTEzLi5jZDk4MmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5jCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqCSAgIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICogRklMRQkJOiBtZWdhcmFpZF9tYm94LmMKLSAqIFZlcnNpb24JOiB2Mi4yMC40LjggKEFwciAxMSAyMDA2KQorICogVmVyc2lvbgk6IHYyLjIwLjQuOSAoSnVsIDE2IDIwMDYpCiAgKgogICogQXV0aG9yczoKICAqIAlBdHVsIE11a2tlcgkJPEF0dWwuTXVra2VyQGxzaWwuY29tPgpAQCAtNzIwLDYgKzcyMCw3IEBACiAJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwogCW1yYWlkX2RldmljZV90CQkqcmFpZF9kZXY7CiAJaW50CQkJaTsKKwl1aW50MzJfdAkJbWFnaWM2NDsKIAogCiAJYWRhcHRlci0+aXRvCT0gTUJPWF9USU1FT1VUOwpAQCAtODYzLDEyICs4NjQsMzMgQEAKIAogCS8vIFNldCB0aGUgRE1BIG1hc2sgdG8gNjQtYml0LiBBbGwgc3VwcG9ydGVkIGNvbnRyb2xsZXJzIGFzIGNhcGFibGUgb2YKIAkvLyBETUEgaW4gdGhpcyByYW5nZQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGFkYXB0ZXItPnBkZXYsIERNQV82NEJJVF9NQVNLKSAhPSAwKSB7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkYXB0ZXItPnBkZXYsIFBDSV9DT05GX0FNSVNJRzY0LCAmbWFnaWM2NCk7CiAKLQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKLQkJCSJtZWdhcmFpZDogY291bGQgbm90IHNldCBETUEgbWFzayBmb3IgNjQtYml0LlxuIikpOworCWlmICgoKG1hZ2ljNjQgPT0gSEJBX1NJR05BVFVSRV82NF9CSVQpICYmCisJCSgoYWRhcHRlci0+cGRldi0+c3Vic3lzdGVtX2RldmljZSAhPQorCQlQQ0lfU1VCU1lTX0lEX01FR0FSQUlEX1NBVEFfMTUwXzYpIHx8CisJCShhZGFwdGVyLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICE9CisJCVBDSV9TVUJTWVNfSURfTUVHQVJBSURfU0FUQV8xNTBfNCkpKSB8fAorCQkoYWRhcHRlci0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDICYmCisJCWFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1ZFUkRFKSB8fAorCQkoYWRhcHRlci0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfTFNJX0xPR0lDICYmCisJCWFkYXB0ZXItPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0RPQlNPTikgfHwKKwkJKGFkYXB0ZXItPnBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQyAmJgorCQlhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9MSU5EU0FZKSB8fAorCQkoYWRhcHRlci0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVMTCAmJgorCQlhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QRVJDNF9ESV9FVkVSR0xBREVTKSB8fAorCQkoYWRhcHRlci0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfREVMTCAmJgorCQlhZGFwdGVyLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9QRVJDNEVfRElfS09CVUspKSB7CisJCWlmIChwY2lfc2V0X2RtYV9tYXNrKGFkYXB0ZXItPnBkZXYsIERNQV82NEJJVF9NQVNLKSkgeworCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKKwkJCQkibWVnYXJhaWQ6IERNQSBtYXNrIGZvciA2NC1iaXQgZmFpbGVkXG4iKSk7CiAKLQkJZ290byBvdXRfZnJlZV9zeXNmc19yZXM7CisJCQlpZiAocGNpX3NldF9kbWFfbWFzayAoYWRhcHRlci0+cGRldiwgRE1BXzMyQklUX01BU0spKSB7CisJCQkJY29uX2xvZyhDTF9BTk4sIChLRVJOX1dBUk5JTkcKKwkJCQkJIm1lZ2FyYWlkOiAzMi1iaXQgRE1BIG1hc2sgZmFpbGVkXG4iKSk7CisJCQkJZ290byBvdXRfZnJlZV9zeXNmc19yZXM7CisJCQl9CisJCX0KIAl9CiAKIAkvLyBzZXR1cCB0YXNrbGV0IGZvciBEUEMKQEAgLTE2MjIsNiArMTY0NCwxNCBAQAogCQkJCXJkZXYtPmxhc3RfZGlzcCB8PSAoMUwgPDwgU0NQMkNIQU5ORUwoc2NwKSk7CiAJCQl9CiAKKwkJCWlmIChzY3AtPmNtbmRbMV0gJiBNRUdBX1NDU0lfSU5RX0VWUEQpIHsKKwkJCQlzY3AtPnNlbnNlX2J1ZmZlclswXSA9IDB4NzA7CisJCQkJc2NwLT5zZW5zZV9idWZmZXJbMl0gPSBJTExFR0FMX1JFUVVFU1Q7CisJCQkJc2NwLT5zZW5zZV9idWZmZXJbMTJdID0gTUVHQV9JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJCQlzY3AtPnJlc3VsdCA9IENIRUNLX0NPTkRJVElPTiA8PCAxOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCiAJCQkvKiBGYWxsIHRocm91Z2ggKi8KIAogCQljYXNlIFJFQURfQ0FQQUNJVFk6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5oIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21ib3guaAppbmRleCA4NjhmYjBlLi4yYjVhMzI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbWJveC5oCisrKyBiL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC9tZWdhcmFpZF9tYm94LmgKQEAgLTIxLDggKzIxLDggQEAKICNpbmNsdWRlICJtZWdhcmFpZF9pb2N0bC5oIgogCiAKLSNkZWZpbmUgTUVHQVJBSURfVkVSU0lPTgkiMi4yMC40LjgiCi0jZGVmaW5lIE1FR0FSQUlEX0VYVF9WRVJTSU9OCSIoUmVsZWFzZSBEYXRlOiBNb24gQXByIDExIDEyOjI3OjIyIEVTVCAyMDA2KSIKKyNkZWZpbmUgTUVHQVJBSURfVkVSU0lPTgkiMi4yMC40LjkiCisjZGVmaW5lIE1FR0FSQUlEX0VYVF9WRVJTSU9OCSIoUmVsZWFzZSBEYXRlOiBTdW4gSnVsIDE2IDEyOjI3OjIyIEVTVCAyMDA2KSIKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmMgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbW0uYwppbmRleCBlOGY1MzRmLi5kODViOWE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbW0uYworKysgYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbW0uYwpAQCAtMTAsNyArMTAsNyBAQAogICoJICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqCiAgKiBGSUxFCQk6IG1lZ2FyYWlkX21tLmMKLSAqIFZlcnNpb24JOiB2Mi4yMC4yLjYgKE1hciA3IDIwMDUpCisgKiBWZXJzaW9uCTogdjIuMjAuMi43IChKdWwgMTYgMjAwNikKICAqCiAgKiBDb21tb24gbWFuYWdlbWVudCBtb2R1bGUKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmggYi9kcml2ZXJzL3Njc2kvbWVnYXJhaWQvbWVnYXJhaWRfbW0uaAppbmRleCAzZDllNjdkLi5jODc2MmIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmgKKysrIGIvZHJpdmVycy9zY3NpL21lZ2FyYWlkL21lZ2FyYWlkX21tLmgKQEAgLTI3LDkgKzI3LDkgQEAKICNpbmNsdWRlICJtZWdhcmFpZF9pb2N0bC5oIgogCiAKLSNkZWZpbmUgTFNJX0NPTU1PTl9NT0RfVkVSU0lPTgkiMi4yMC4yLjYiCisjZGVmaW5lIExTSV9DT01NT05fTU9EX1ZFUlNJT04JIjIuMjAuMi43IgogI2RlZmluZSBMU0lfQ09NTU9OX01PRF9FWFRfVkVSU0lPTglcCi0JCSIoUmVsZWFzZSBEYXRlOiBNb24gTWFyIDcgMDA6MDE6MDMgRVNUIDIwMDUpIgorCQkiKFJlbGVhc2UgRGF0ZTogU3VuIEp1bCAxNiAwMDowMTowMyBFU1QgMjAwNikiCiAKIAogI2RlZmluZSBMU0lfREJHTFZMCQkJZGJnbGV2ZWwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9tZXNoLmMgYi9kcml2ZXJzL3Njc2kvbWVzaC5jCmluZGV4IDU1NzI5ODEuLjU5MmI1MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9tZXNoLmMKKysrIGIvZHJpdmVycy9zY3NpL21lc2guYwpAQCAtMTg1MCw3ICsxODUwLDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lc2ggPSBtYWNpb19nZXRfb2Zfbm9kZShtZGV2KTsKIAlzdHJ1Y3QgcGNpX2RldiogcGRldiA9IG1hY2lvX2dldF9wY2lfZGV2KG1kZXYpOwotCWludCB0Z3QsICpjZnAsIG1pbnBlcjsKKwlpbnQgdGd0LCBtaW5wZXI7CisJY29uc3QgaW50ICpjZnA7CiAJc3RydWN0IG1lc2hfc3RhdGUgKm1zOwogCXN0cnVjdCBTY3NpX0hvc3QgKm1lc2hfaG9zdDsKIAl2b2lkICpkbWFfY21kX3NwYWNlOwpAQCAtMTkzOSw3ICsxOTQwLDcgQEAKIAkgICAgICAgCW1zLT50Z3RzW3RndF0uY3VycmVudF9yZXEgPSBOVUxMOwogICAgICAgIAl9CiAKLQlpZiAoKGNmcCA9IChpbnQgKikgZ2V0X3Byb3BlcnR5KG1lc2gsICJjbG9jay1mcmVxdWVuY3kiLCBOVUxMKSkpCisJaWYgKChjZnAgPSBnZXRfcHJvcGVydHkobWVzaCwgImNsb2NrLWZyZXF1ZW5jeSIsIE5VTEwpKSkKICAgICAgICAJCW1zLT5jbGtfZnJlcSA9ICpjZnA7CiAJZWxzZSB7CiAgICAgICAgCQlwcmludGsoS0VSTl9JTkZPICJtZXNoOiBhc3N1bWluZyA1ME1IeiBjbG9jayBmcmVxdWVuY3lcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BkY19hZG1hLmMgYi9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYwppbmRleCBkMWYzOGMzLi5lZmM4ZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYworKysgYi9kcml2ZXJzL3Njc2kvcGRjX2FkbWEuYwpAQCAtMTgzLDcgKzE4Myw4IEBACiAJewogCQkuc2h0CQk9ICZhZG1hX2F0YV9zaHQsCiAJCS5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0xBVkVfUE9TUyB8IEFUQV9GTEFHX1NSU1QgfAotCQkJCSAgQVRBX0ZMQUdfTk9fTEVHQUNZIHwgQVRBX0ZMQUdfTU1JTywKKwkJCQkgIEFUQV9GTEFHX05PX0xFR0FDWSB8IEFUQV9GTEFHX01NSU8gfAorCQkJCSAgQVRBX0ZMQUdfUElPX1BPTExJTkcsCiAJCS5waW9fbWFzawk9IDB4MTAsIC8qIHBpbzQgKi8KIAkJLnVkbWFfbWFzawk9IDB4MWYsIC8qIHVkbWEwLTQgKi8KIAkJLnBvcnRfb3BzCT0gJmFkbWFfYXRhX29wcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9kZWYuaAppbmRleCAxMzllYTBlLi4wOTMwMjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfZGVmLmgKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2RlZi5oCkBAIC00ODcsNiArNDg3LDcgQEAKICNkZWZpbmUgTUJBX0lQX1JDVl9CVUZGRVJfRU1QVFkgMHg4MDI2CS8qIElQIHJlY2VpdmUgYnVmZmVyIHF1ZXVlIGVtcHR5LiAqLwogI2RlZmluZSBNQkFfSVBfSERSX0RBVEFfU1BMSVQJMHg4MDI3CS8qIElQIGhlYWRlci9kYXRhIHNwbGl0dGluZyBmZWF0dXJlICovCiAJCQkJCS8qIHVzZWQuICovCisjZGVmaW5lIE1CQV9UUkFDRV9OT1RJRklDQVRJT04JMHg4MDI4CS8qIFRyYWNlL0RpYWdub3N0aWMgbm90aWZpY2F0aW9uLiAqLwogI2RlZmluZSBNQkFfUE9JTlRfVE9fUE9JTlQJMHg4MDMwCS8qIFBvaW50IHRvIHBvaW50IG1vZGUuICovCiAjZGVmaW5lIE1CQV9DTVBMVF8xXzE2QklUCTB4ODAzMQkvKiBDb21wbGV0aW9uIDEgMTZiaXQgSU9TQi4gKi8KICNkZWZpbmUgTUJBX0NNUExUXzJfMTZCSVQJMHg4MDMyCS8qIENvbXBsZXRpb24gMiAxNmJpdCBJT1NCLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pbml0LmMKaW5kZXggOTc1OGRiYS4uODU5NjQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2luaXQuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW5pdC5jCkBAIC0zMDYzLDYgKzMwNjMsNyBAQAogaW50CiBxbGEyeDAwX2Fib3J0X2lzcChzY3NpX3FsYV9ob3N0X3QgKmhhKQogeworCWludCBydmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCXVpbnQxNl90ICAgICAgIGNudDsKIAlzcmJfdCAgICAgICAgICAqc3A7CkBAIC0zMTE5LDYgKzMxMjAsMTYgQEAKIAogCQkJaGEtPmlzcF9hYm9ydF9jbnQgPSAwOwogCQkJY2xlYXJfYml0KElTUF9BQk9SVF9SRVRSWSwgJmhhLT5kcGNfZmxhZ3MpOworCisJCQlpZiAoaGEtPmVmdCkgeworCQkJCXJ2YWwgPSBxbGEyeDAwX3RyYWNlX2NvbnRyb2woaGEsIFRDX0VOQUJMRSwKKwkJCQkgICAgaGEtPmVmdF9kbWEsIEVGVF9OVU1fQlVGRkVSUyk7CisJCQkJaWYgKHJ2YWwpIHsKKwkJCQkJcWxhX3ByaW50ayhLRVJOX1dBUk5JTkcsIGhhLAorCQkJCQkgICAgIlVuYWJsZSB0byByZWluaXRpYWxpemUgRUZUICIKKwkJCQkJICAgICIoJWQpLlxuIiwgcnZhbCk7CisJCQkJfQorCQkJfQogCQl9IGVsc2UgewkvKiBmYWlsZWQgdGhlIElTUCBhYm9ydCAqLwogCQkJaGEtPmZsYWdzLm9ubGluZSA9IDE7CiAJCQlpZiAodGVzdF9iaXQoSVNQX0FCT1JUX1JFVFJZLCAmaGEtPmRwY19mbGFncykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaW9jYi5jCmluZGV4IDJiNjBhMjcuLmM1YjNjNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pb2NiLmMKKysrIGIvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lvY2IuYwpAQCAtNDcxLDYgKzQ3MSw3IEBACiAJCQltcmsyNC0+bnBvcnRfaGFuZGxlID0gY3B1X3RvX2xlMTYobG9vcF9pZCk7CiAJCQltcmsyNC0+bHVuWzFdID0gTFNCKGx1bik7CiAJCQltcmsyNC0+bHVuWzJdID0gTVNCKGx1bik7CisJCQlob3N0X3RvX2ZjcF9zd2FwKG1yazI0LT5sdW4sIHNpemVvZihtcmsyNC0+bHVuKSk7CiAJCX0gZWxzZSB7CiAJCQlTRVRfVEFSR0VUX0lEKGhhLCBtcmstPnRhcmdldCwgbG9vcF9pZCk7CiAJCQltcmstPmx1biA9IGNwdV90b19sZTE2KGx1bik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfaXNyLmMKaW5kZXggNzk1YmYxNS4uZGUwNjEzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX2lzci5jCisrKyBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV9pc3IuYwpAQCAtNTg3LDYgKzU4NywxMSBAQAogCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IERpc2NhcmQgUk5EIEZyYW1lIC0tICUwNHggJTA0eCAiCiAJCSAgICAiJTA0eC5cbiIsIGhhLT5ob3N0X25vLCBtYlsxXSwgbWJbMl0sIG1iWzNdKSk7CiAJCWJyZWFrOworCisJY2FzZSBNQkFfVFJBQ0VfTk9USUZJQ0FUSU9OOgorCQlERUJVRzIocHJpbnRrKCJzY3NpKCVsZCk6IFRyYWNlIE5vdGlmaWNhdGlvbiAtLSAlMDR4ICUwNHguXG4iLAorCQloYS0+aG9zdF9ubywgbWJbMV0sIG1iWzJdKSk7CisJCWJyZWFrOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX29zLmMgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwppbmRleCBlYzdlYmI2Li42NWNiZTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfb3MuYwpAQCAtNzQ0LDcgKzc0NCw2IEBACiB7CiAJc2NzaV9xbGFfaG9zdF90ICpoYSA9IHRvX3FsYV9ob3N0KGNtZC0+ZGV2aWNlLT5ob3N0KTsKIAlmY19wb3J0X3QgKmZjcG9ydCA9IChzdHJ1Y3QgZmNfcG9ydCAqKSBjbWQtPmRldmljZS0+aG9zdGRhdGE7Ci0Jc3JiX3QgKnNwOwogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGlkLCBsdW47CiAJdW5zaWduZWQgbG9uZyBzZXJpYWw7CkBAIC03NTUsOCArNzU0LDcgQEAKIAlsdW4gPSBjbWQtPmRldmljZS0+bHVuOwogCXNlcmlhbCA9IGNtZC0+c2VyaWFsX251bWJlcjsKIAotCXNwID0gKHNyYl90ICopIENNRF9TUChjbWQpOwotCWlmICghc3AgfHwgIWZjcG9ydCkKKwlpZiAoIWZjcG9ydCkKIAkJcmV0dXJuIHJldDsKIAogCXFsYV9wcmludGsoS0VSTl9JTkZPLCBoYSwKQEAgLTg3NSw3ICs4NzMsNiBAQAogewogCXNjc2lfcWxhX2hvc3RfdCAqaGEgPSB0b19xbGFfaG9zdChjbWQtPmRldmljZS0+aG9zdCk7CiAJZmNfcG9ydF90ICpmY3BvcnQgPSAoc3RydWN0IGZjX3BvcnQgKikgY21kLT5kZXZpY2UtPmhvc3RkYXRhOwotCXNyYl90ICpzcDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBpZCwgbHVuOwogCXVuc2lnbmVkIGxvbmcgc2VyaWFsOwpAQCAtODg2LDggKzg4Myw3IEBACiAJbHVuID0gY21kLT5kZXZpY2UtPmx1bjsKIAlzZXJpYWwgPSBjbWQtPnNlcmlhbF9udW1iZXI7CiAKLQlzcCA9IChzcmJfdCAqKSBDTURfU1AoY21kKTsKLQlpZiAoIXNwIHx8ICFmY3BvcnQpCisJaWYgKCFmY3BvcnQpCiAJCXJldHVybiByZXQ7CiAKIAlxbGFfcHJpbnRrKEtFUk5fSU5GTywgaGEsCkBAIC05MzYsNyArOTMyLDYgQEAKIHsKIAlzY3NpX3FsYV9ob3N0X3QgKmhhID0gdG9fcWxhX2hvc3QoY21kLT5kZXZpY2UtPmhvc3QpOwogCWZjX3BvcnRfdCAqZmNwb3J0ID0gKHN0cnVjdCBmY19wb3J0ICopIGNtZC0+ZGV2aWNlLT5ob3N0ZGF0YTsKLQlzcmJfdCAqc3A7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgaWQsIGx1bjsKIAl1bnNpZ25lZCBsb25nIHNlcmlhbDsKQEAgLTk0Nyw4ICs5NDIsNyBAQAogCWx1biA9IGNtZC0+ZGV2aWNlLT5sdW47CiAJc2VyaWFsID0gY21kLT5zZXJpYWxfbnVtYmVyOwogCi0Jc3AgPSAoc3JiX3QgKikgQ01EX1NQKGNtZCk7Ci0JaWYgKCFzcCB8fCAhZmNwb3J0KQorCWlmICghZmNwb3J0KQogCQlyZXR1cm4gcmV0OwogCiAJcWxhX3ByaW50ayhLRVJOX0lORk8sIGhhLApAQCAtMjI0NCw5ICsyMjM4LDYgQEAKIAogCQkJbmV4dF9sb29waWQgPSAwOwogCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmY3BvcnQsICZoYS0+ZmNwb3J0cywgbGlzdCkgewotCQkJCWlmIChmY3BvcnQtPnBvcnRfdHlwZSAhPSBGQ1RfVEFSR0VUKQotCQkJCQljb250aW51ZTsKLQogCQkJCS8qCiAJCQkJICogSWYgdGhlIHBvcnQgaXMgbm90IE9OTElORSB0aGVuIHRyeSB0byBsb2dpbgogCQkJCSAqIHRvIGl0IGlmIHdlIGhhdmVuJ3QgcnVuIG91dCBvZiByZXRyaWVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaCBiL2RyaXZlcnMvc2NzaS9xbGEyeHh4L3FsYV92ZXJzaW9uLmgKaW5kZXggZDJkNjgzNC4uOTcxMjU5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTJ4eHgvcWxhX3ZlcnNpb24uaAorKysgYi9kcml2ZXJzL3Njc2kvcWxhMnh4eC9xbGFfdmVyc2lvbi5oCkBAIC03LDkgKzcsOSBAQAogLyoKICAqIERyaXZlciB2ZXJzaW9uCiAgKi8KLSNkZWZpbmUgUUxBMlhYWF9WRVJTSU9OICAgICAgIjguMDEuMDUtazMiCisjZGVmaW5lIFFMQTJYWFhfVkVSU0lPTiAgICAgICI4LjAxLjA3LWsxIgogCiAjZGVmaW5lIFFMQV9EUklWRVJfTUFKT1JfVkVSCTgKICNkZWZpbmUgUUxBX0RSSVZFUl9NSU5PUl9WRVIJMQotI2RlZmluZSBRTEFfRFJJVkVSX1BBVENIX1ZFUgk1CisjZGVmaW5lIFFMQV9EUklWRVJfUEFUQ0hfVkVSCTcKICNkZWZpbmUgUUxBX0RSSVZFUl9CRVRBX1ZFUgkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jIGIvZHJpdmVycy9zY3NpL3NhdGFfbXYuYwppbmRleCAxMDUzYzdjLi5mYTM4YTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2F0YV9tdi5jCisrKyBiL2RyaXZlcnMvc2NzaS9zYXRhX212LmMKQEAgLTE5NjEsOCArMTk2MSw3IEBACiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwMCk7CiAJZG8gewogCQlzYXRhX3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVTLCAmc3N0YXR1cyk7Ci0JCXNzdGF0dXMgJj0gMHgzOwotCQlpZiAoKHNzdGF0dXMgPT0gMykgfHwgKHNzdGF0dXMgPT0gMCkpCisJCWlmICgoKHNzdGF0dXMgJiAweDMpID09IDMpIHx8ICgoc3N0YXR1cyAmIDB4MykgPT0gMCkpCiAJCQlicmVhazsKIAogCQlfX21zbGVlcCgxLCBjYW5fc2xlZXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfcHJvbWlzZS5jCmluZGV4IDY0NjMxYmQuLjQ3NzZmNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zYXRhX3Byb21pc2UuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9wcm9taXNlLmMKQEAgLTI2OSw4ICsyNjksMTUgQEAKIAl7IFBDSV9WRU5ET1JfSURfUFJPTUlTRSwgMHg2NjI5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAogCSAgYm9hcmRfMjA2MTkgfSwKIAorLyogVE9ETzogcmVtb3ZlIGFsbCBhc3NvY2lhdGVkIGJvYXJkXzIwNzcxIGNvZGUsIGFzIGl0IGNvbXBsZXRlbHkKKyAqIGR1cGxpY2F0ZXMgYm9hcmRfMjAzN3ggY29kZSwgdW5sZXNzIHJlYXNvbiBmb3Igc2VwYXJhdGlvbiBjYW4gYmUKKyAqIGRpdmluZWQuCisgKi8KKyNpZiAwCiAJeyBQQ0lfVkVORE9SX0lEX1BST01JU0UsIDB4MzU3MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwKIAkgIGJvYXJkXzIwNzcxIH0sCisjZW5kaWYKKwogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYyBiL2RyaXZlcnMvc2NzaS9zYXRhX3NpbDI0LmMKaW5kZXggMmUwZjRhNC4uM2YzNjhjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc2lsMjQuYworKysgYi9kcml2ZXJzL3Njc2kvc2F0YV9zaWwyNC5jCkBAIC0xMTA2LDcgKzExMDYsNiBAQAogCiAJcHJvYmVfZW50LT5pcnEgPSBwZGV2LT5pcnE7CiAJcHJvYmVfZW50LT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKLQlwcm9iZV9lbnQtPm1taW9fYmFzZSA9IHBvcnRfYmFzZTsKIAlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IGhwcml2OwogCiAJaHByaXYtPmhvc3RfYmFzZSA9IGhvc3RfYmFzZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3N2dy5jIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKaW5kZXggN2QwODU4MC4uNmI3MGMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfc3Z3LmMKQEAgLTI2OCw3ICsyNjgsNyBAQAogCS8qIE1hdGNoIGl0IHRvIGEgcG9ydCBub2RlICovCiAJaW5kZXggPSAoYXAgPT0gYXAtPmhvc3Rfc2V0LT5wb3J0c1swXSkgPyAwIDogMTsKIAlmb3IgKG5wID0gbnAtPmNoaWxkOyBucCAhPSBOVUxMOyBucCA9IG5wLT5zaWJsaW5nKSB7Ci0JCXUzMiAqcmVnID0gKHUzMiAqKWdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOworCQljb25zdCB1MzIgKnJlZyA9IGdldF9wcm9wZXJ0eShucCwgInJlZyIsIE5VTEwpOwogCQlpZiAoIXJlZykKIAkJCWNvbnRpbnVlOwogCQlpZiAoaW5kZXggPT0gKnJlZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zYXRhX3ZpYS5jIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKaW5kZXggMDNiYWVjMi4uYTM3MjdhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9zY3NpL3NhdGFfdmlhLmMKQEAgLTc0LDggKzc0LDEwIEBACiBzdGF0aWMgaW50IHN2aWFfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KTsKIHN0YXRpYyB1MzIgc3ZpYV9zY3JfcmVhZCAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZyk7CiBzdGF0aWMgdm9pZCBzdmlhX3Njcl93cml0ZSAoc3RydWN0IGF0YV9wb3J0ICphcCwgdW5zaWduZWQgaW50IHNjX3JlZywgdTMyIHZhbCk7CitzdGF0aWMgdm9pZCB2dDY0MjBfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN2aWFfcGNpX3RibFtdID0geworCXsgMHgxMTA2LCAweDA1OTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMCB9LAogCXsgMHgxMTA2LCAweDMxNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMCB9LAogCXsgMHgxMTA2LCAweDMyNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHZ0NjQyMSB9LAogCkBAIC0xMDcsNyArMTA5LDM4IEBACiAJLmJpb3NfcGFyYW0JCT0gYXRhX3N0ZF9iaW9zX3BhcmFtLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHN2aWFfc2F0YV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0YV9wb3J0X29wZXJhdGlvbnMgdnQ2NDIwX3NhdGFfb3BzID0geworCS5wb3J0X2Rpc2FibGUJCT0gYXRhX3BvcnRfZGlzYWJsZSwKKworCS50Zl9sb2FkCQk9IGF0YV90Zl9sb2FkLAorCS50Zl9yZWFkCQk9IGF0YV90Zl9yZWFkLAorCS5jaGVja19zdGF0dXMJCT0gYXRhX2NoZWNrX3N0YXR1cywKKwkuZXhlY19jb21tYW5kCQk9IGF0YV9leGVjX2NvbW1hbmQsCisJLmRldl9zZWxlY3QJCT0gYXRhX3N0ZF9kZXZfc2VsZWN0LAorCisJLmJtZG1hX3NldHVwICAgICAgICAgICAgPSBhdGFfYm1kbWFfc2V0dXAsCisJLmJtZG1hX3N0YXJ0ICAgICAgICAgICAgPSBhdGFfYm1kbWFfc3RhcnQsCisJLmJtZG1hX3N0b3AJCT0gYXRhX2JtZG1hX3N0b3AsCisJLmJtZG1hX3N0YXR1cwkJPSBhdGFfYm1kbWFfc3RhdHVzLAorCisJLnFjX3ByZXAJCT0gYXRhX3FjX3ByZXAsCisJLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAorCS5kYXRhX3hmZXIJCT0gYXRhX3Bpb19kYXRhX3hmZXIsCisKKwkuZnJlZXplCQkJPSBhdGFfYm1kbWFfZnJlZXplLAorCS50aGF3CQkJPSBhdGFfYm1kbWFfdGhhdywKKwkuZXJyb3JfaGFuZGxlcgkJPSB2dDY0MjBfZXJyb3JfaGFuZGxlciwKKwkucG9zdF9pbnRlcm5hbF9jbWQJPSBhdGFfYm1kbWFfcG9zdF9pbnRlcm5hbF9jbWQsCisKKwkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKKwkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCisKKwkucG9ydF9zdGFydAkJPSBhdGFfcG9ydF9zdGFydCwKKwkucG9ydF9zdG9wCQk9IGF0YV9wb3J0X3N0b3AsCisJLmhvc3Rfc3RvcAkJPSBhdGFfaG9zdF9zdG9wLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdGFfcG9ydF9vcGVyYXRpb25zIHZ0NjQyMV9zYXRhX29wcyA9IHsKIAkucG9ydF9kaXNhYmxlCQk9IGF0YV9wb3J0X2Rpc2FibGUsCiAKIAkudGZfbG9hZAkJPSBhdGFfdGZfbG9hZCwKQEAgLTE0MSwxMyArMTc0LDEzIEBACiAJLmhvc3Rfc3RvcAkJPSBhdGFfaG9zdF9zdG9wLAogfTsKIAotc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHN2aWFfcG9ydF9pbmZvID0geworc3RhdGljIHN0cnVjdCBhdGFfcG9ydF9pbmZvIHZ0NjQyMF9wb3J0X2luZm8gPSB7CiAJLnNodAkJPSAmc3ZpYV9zaHQsCiAJLmhvc3RfZmxhZ3MJPSBBVEFfRkxBR19TQVRBIHwgQVRBX0ZMQUdfTk9fTEVHQUNZLAogCS5waW9fbWFzawk9IDB4MWYsCiAJLm13ZG1hX21hc2sJPSAweDA3LAogCS51ZG1hX21hc2sJPSAweDdmLAotCS5wb3J0X29wcwk9ICZzdmlhX3NhdGFfb3BzLAorCS5wb3J0X29wcwk9ICZ2dDY0MjBfc2F0YV9vcHMsCiB9OwogCiBNT0RVTEVfQVVUSE9SKCJKZWZmIEdhcnppayIpOwpAQCAtMTcwLDYgKzIwMyw4MSBAQAogCW91dGwodmFsLCBhcC0+aW9hZGRyLnNjcl9hZGRyICsgKDQgKiBzY19yZWcpKTsKIH0KIAorLyoqCisgKgl2dDY0MjBfcHJlcmVzZXQgLSBwcmVyZXNldCBmb3IgdnQ2NDIwCisgKglAYXA6IHRhcmdldCBBVEEgcG9ydAorICoKKyAqCVNDUiByZWdpc3RlcnMgb24gdnQ2NDIwIGFyZSBwaWVjZXMgb2Ygc2hpdCBhbmQgbWF5IGhhbmcgdGhlCisgKgl3aG9sZSBtYWNoaW5lIGNvbXBsZXRlbHkgaWYgYWNjZXNzZWQgd2l0aCB0aGUgd3JvbmcgdGltaW5nLgorICoJVG8gYXZvaWQgc3VjaCBjYXRhc3Ryb3BoZSwgdnQ2NDIwIGRvZXNuJ3QgcHJvdmlkZSBnZW5lcmljIFNDUgorICoJYWNjZXNzIG9wZXJhdGlvbnMsIGJ1dCB1c2VzIFNTdGF0dXMgYW5kIFNDb250cm9sIG9ubHkgZHVyaW5nCisgKglib290IHByb2JpbmcgaW4gY29udHJvbGxlZCB3YXkuCisgKgorICoJQXMgdGhlIG9sZCAocHJlIEVIIHVwZGF0ZSkgcHJvYmluZyBjb2RlIGlzIHByb3ZlbiB0byB3b3JrLCB3ZQorICoJc3RyaWN0bHkgZm9sbG93IHRoZSBhY2Nlc3MgcGF0dGVybi4KKyAqCisgKglMT0NLSU5HOgorICoJS2VybmVsIHRocmVhZCBjb250ZXh0IChtYXkgc2xlZXApCisgKgorICoJUkVUVVJOUzoKKyAqCTAgb24gc3VjY2VzcywgLWVycm5vIG90aGVyd2lzZS4KKyAqLworc3RhdGljIGludCB2dDY0MjBfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKK3sKKwlzdHJ1Y3QgYXRhX2VoX2NvbnRleHQgKmVoYyA9ICZhcC0+ZWhfY29udGV4dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgKEhaICogNSk7CisJdTMyIHNzdGF0dXMsIHNjb250cm9sOworCWludCBvbmxpbmU7CisKKwkvKiBkb24ndCBkbyBhbnkgU0NSIHN0dWZmIGlmIHdlJ3JlIG5vdCBsb2FkaW5nICovCisJaWYgKCFBVEFfUEZMQUdfTE9BRElORykKKwkJZ290byBza2lwX3NjcjsKKworCS8qIFJlc3VtZSBwaHkuICBUaGlzIGlzIHRoZSBvbGQgcmVzdW1lIHNlcXVlbmNlIGZyb20KKwkgKiBfX3NhdGFfcGh5X3Jlc2V0KCkuCisJICovCisJc3ZpYV9zY3Jfd3JpdGUoYXAsIFNDUl9DT05UUk9MLCAweDMwMCk7CisJc3ZpYV9zY3JfcmVhZChhcCwgU0NSX0NPTlRST0wpOyAvKiBmbHVzaCAqLworCisJLyogd2FpdCBmb3IgcGh5IHRvIGJlY29tZSByZWFkeSwgaWYgbmVjZXNzYXJ5ICovCisJZG8geworCQltc2xlZXAoMjAwKTsKKwkJaWYgKChzdmlhX3Njcl9yZWFkKGFwLCBTQ1JfU1RBVFVTKSAmIDB4ZikgIT0gMSkKKwkJCWJyZWFrOworCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCS8qIG9wZW4gY29kZSBzYXRhX3ByaW50X2xpbmtfc3RhdHVzKCkgKi8KKwlzc3RhdHVzID0gc3ZpYV9zY3JfcmVhZChhcCwgU0NSX1NUQVRVUyk7CisJc2NvbnRyb2wgPSBzdmlhX3Njcl9yZWFkKGFwLCBTQ1JfQ09OVFJPTCk7CisKKwlvbmxpbmUgPSAoc3N0YXR1cyAmIDB4ZikgPT0gMHgzOworCisJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0lORk8sCisJCQkiU0FUQSBsaW5rICVzIDEuNSBHYnBzIChTU3RhdHVzICVYIFNDb250cm9sICVYKVxuIiwKKwkJCW9ubGluZSA/ICJ1cCIgOiAiZG93biIsIHNzdGF0dXMsIHNjb250cm9sKTsKKworCS8qIFNTdGF0dXMgaXMgcmVhZCBvbmUgbW9yZSB0aW1lICovCisJc3ZpYV9zY3JfcmVhZChhcCwgU0NSX1NUQVRVUyk7CisKKwlpZiAoIW9ubGluZSkgeworCQkvKiB0ZWxsIEVIIHRvIGJhaWwgKi8KKwkJZWhjLT5pLmFjdGlvbiAmPSB+QVRBX0VIX1JFU0VUX01BU0s7CisJCXJldHVybiAwOworCX0KKworIHNraXBfc2NyOgorCS8qIHdhaXQgZm9yICFCU1kgKi8KKwlhdGFfYnVzeV9zbGVlcChhcCwgQVRBX1RNT1VUX0JPT1RfUVVJQ0ssIEFUQV9UTU9VVF9CT09UKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2dDY0MjBfZXJyb3JfaGFuZGxlcihzdHJ1Y3QgYXRhX3BvcnQgKmFwKQoreworCXJldHVybiBhdGFfYm1kbWFfZHJpdmVfZWgoYXAsIHZ0NjQyMF9wcmVyZXNldCwgYXRhX3N0ZF9zb2Z0cmVzZXQsCisJCQkJICBOVUxMLCBhdGFfc3RkX3Bvc3RyZXNldCk7Cit9CisKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3ZpYV9iYXJfc2l6ZXNbXSA9IHsKIAk4LCA0LCA4LCA0LCAxNiwgMjU2CiB9OwpAQCAtMjEwLDcgKzMxOCw3IEBACiBzdGF0aWMgc3RydWN0IGF0YV9wcm9iZV9lbnQgKnZ0NjQyMF9pbml0X3Byb2JlX2VudChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgYXRhX3Byb2JlX2VudCAqcHJvYmVfZW50OwotCXN0cnVjdCBhdGFfcG9ydF9pbmZvICpwcGkgPSAmc3ZpYV9wb3J0X2luZm87CisJc3RydWN0IGF0YV9wb3J0X2luZm8gKnBwaSA9ICZ2dDY0MjBfcG9ydF9pbmZvOwogCiAJcHJvYmVfZW50ID0gYXRhX3BjaV9pbml0X25hdGl2ZV9tb2RlKHBkZXYsICZwcGksIEFUQV9QT1JUX1BSSU1BUlkgfCBBVEFfUE9SVF9TRUNPTkRBUlkpOwogCWlmICghcHJvYmVfZW50KQpAQCAtMjM5LDcgKzM0Nyw3IEBACiAKIAlwcm9iZV9lbnQtPnNodAkJPSAmc3ZpYV9zaHQ7CiAJcHJvYmVfZW50LT5ob3N0X2ZsYWdzCT0gQVRBX0ZMQUdfU0FUQSB8IEFUQV9GTEFHX05PX0xFR0FDWTsKLQlwcm9iZV9lbnQtPnBvcnRfb3BzCT0gJnN2aWFfc2F0YV9vcHM7CisJcHJvYmVfZW50LT5wb3J0X29wcwk9ICZ2dDY0MjFfc2F0YV9vcHM7CiAJcHJvYmVfZW50LT5uX3BvcnRzCT0gTl9QT1JUUzsKIAlwcm9iZV9lbnQtPmlycQkJPSBwZGV2LT5pcnE7CiAJcHJvYmVfZW50LT5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV9lcnJvci5jCmluZGV4IDZhNWI3MzEuLjNkMzU1ZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2Vycm9yLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfZXJyb3IuYwpAQCAtNDYwLDEyICs0NjAsMTMgQEAKICAqIFJldHVybiB2YWx1ZToKICAqICAgIFNVQ0NFU1Mgb3IgRkFJTEVEIG9yIE5FRURTX1JFVFJZCiAgKiovCi1zdGF0aWMgaW50IHNjc2lfc2VuZF9laF9jbW5kKHN0cnVjdCBzY3NpX2NtbmQgKnNjbWQsIGludCB0aW1lb3V0LCBpbnQgY29weV9zZW5zZSkKK3N0YXRpYyBpbnQgc2NzaV9zZW5kX2VoX2NtbmQoc3RydWN0IHNjc2lfY21uZCAqc2NtZCwgdW5zaWduZWQgY2hhciAqY21uZCwKKwkJCSAgICAgaW50IGNtbmRfc2l6ZSwgaW50IHRpbWVvdXQsIGludCBjb3B5X3NlbnNlKQogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHNjbWQtPmRldmljZTsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpzaG9zdCA9IHNkZXYtPmhvc3Q7CiAJaW50IG9sZF9yZXN1bHQgPSBzY21kLT5yZXN1bHQ7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCXVuc2lnbmVkIGxvbmcgdGltZWxlZnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBjaGFyIG9sZF9jbW5kW01BWF9DT01NQU5EX1NJWkVdOwpAQCAtNDkwLDYgKzQ5MSw5IEBACiAJb2xkX2NtZF9sZW4gPSBzY21kLT5jbWRfbGVuOwogCW9sZF91c2Vfc2cgPSBzY21kLT51c2Vfc2c7CiAKKwltZW1zZXQoc2NtZC0+Y21uZCwgMCwgc2l6ZW9mKHNjbWQtPmNtbmQpKTsKKwltZW1jcHkoc2NtZC0+Y21uZCwgY21uZCwgY21uZF9zaXplKTsKKwogCWlmIChjb3B5X3NlbnNlKSB7CiAJCWludCBnZnBfbWFzayA9IEdGUF9BVE9NSUM7CiAKQEAgLTYxMCw4ICs2MTQsNyBAQAogCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGdlbmVyaWNfc2Vuc2VbNl0gPQogCQl7UkVRVUVTVF9TRU5TRSwgMCwgMCwgMCwgMjUyLCAwfTsKIAotCW1lbWNweShzY21kLT5jbW5kLCBnZW5lcmljX3NlbnNlLCBzaXplb2YoZ2VuZXJpY19zZW5zZSkpOwotCXJldHVybiBzY3NpX3NlbmRfZWhfY21uZChzY21kLCBTRU5TRV9USU1FT1VULCAxKTsKKwlyZXR1cm4gc2NzaV9zZW5kX2VoX2NtbmQoc2NtZCwgZ2VuZXJpY19zZW5zZSwgNiwgU0VOU0VfVElNRU9VVCwgMSk7CiB9CiAKIC8qKgpAQCAtNzM2LDEwICs3MzksNyBAQAogCWludCByZXRyeV9jbnQgPSAxLCBydG47CiAKIHJldHJ5X3R1cjoKLQltZW1jcHkoc2NtZC0+Y21uZCwgdHVyX2NvbW1hbmQsIHNpemVvZih0dXJfY29tbWFuZCkpOwotCi0KLQlydG4gPSBzY3NpX3NlbmRfZWhfY21uZChzY21kLCBTRU5TRV9USU1FT1VULCAwKTsKKwlydG4gPSBzY3NpX3NlbmRfZWhfY21uZChzY21kLCB0dXJfY29tbWFuZCwgNiwgU0VOU0VfVElNRU9VVCwgMCk7CiAKIAlTQ1NJX0xPR19FUlJPUl9SRUNPVkVSWSgzLCBwcmludGsoIiVzOiBzY21kICVwIHJ0biAleFxuIiwKIAkJX19GVU5DVElPTl9fLCBzY21kLCBydG4pKTsKQEAgLTgzOSw4ICs4MzksOCBAQAogCWlmIChzY21kLT5kZXZpY2UtPmFsbG93X3Jlc3RhcnQpIHsKIAkJaW50IHJ0bjsKIAotCQltZW1jcHkoc2NtZC0+Y21uZCwgc3R1X2NvbW1hbmQsIHNpemVvZihzdHVfY29tbWFuZCkpOwotCQlydG4gPSBzY3NpX3NlbmRfZWhfY21uZChzY21kLCBTVEFSVF9VTklUX1RJTUVPVVQsIDApOworCQlydG4gPSBzY3NpX3NlbmRfZWhfY21uZChzY21kLCBzdHVfY29tbWFuZCwgNiwKKwkJCQkJU1RBUlRfVU5JVF9USU1FT1VULCAwKTsKIAkJaWYgKHJ0biA9PSBTVUNDRVNTKQogCQkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYyBiL2RyaXZlcnMvc2NzaS9zY3NpX2lvY3RsLmMKaW5kZXggYTg5YzQxMS4uMzIyOTNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfaW9jdGwuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9pb2N0bC5jCkBAIC0xMTAsMTEgKzExMCw4IEBACiAJCQkJICAgICAgIHNzaGRyLmFzYywgc3NoZHIuYXNjcSk7CiAJCQlicmVhazsKIAkJY2FzZSBOT1RfUkVBRFk6CS8qIFRoaXMgaGFwcGVucyBpZiB0aGVyZSBpcyBubyBkaXNjIGluIGRyaXZlICovCi0JCQlpZiAoc2Rldi0+cmVtb3ZhYmxlICYmIChjbWRbMF0gIT0gVEVTVF9VTklUX1JFQURZKSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIkRldmljZSBub3QgcmVhZHkuIE1ha2Ugc3VyZSIKLQkJCQkgICAgICAgIiB0aGVyZSBpcyBhIGRpc2MgaW4gdGhlIGRyaXZlLlxuIik7CisJCQlpZiAoc2Rldi0+cmVtb3ZhYmxlKQogCQkJCWJyZWFrOwotCQkJfQogCQljYXNlIFVOSVRfQVRURU5USU9OOgogCQkJaWYgKHNkZXYtPnJlbW92YWJsZSkgewogCQkJCXNkZXYtPmNoYW5nZWQgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwppbmRleCA3YjllOGZhLi4yZWNkMTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuYwpAQCAtMzQsNiArMzQsNyBAQAogI2RlZmluZSBJU0NTSV9TRVNTSU9OX0FUVFJTIDExCiAjZGVmaW5lIElTQ1NJX0NPTk5fQVRUUlMgMTEKICNkZWZpbmUgSVNDU0lfSE9TVF9BVFRSUyAwCisjZGVmaW5lIElTQ1NJX1RSQU5TUE9SVF9WRVJTSU9OICIxLjEtNjQ2IgogCiBzdHJ1Y3QgaXNjc2lfaW50ZXJuYWwgewogCWludCBkYWVtb25fcGlkOwpAQCAtNjM0LDEzICs2MzUsMTMgQEAKIH0KIAogc3RhdGljIGludAotaXNjc2lfYnJvYWRjYXN0X3NrYihzdHJ1Y3QgbWVtcG9vbF96b25lICp6b25lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoraXNjc2lfYnJvYWRjYXN0X3NrYihzdHJ1Y3QgbWVtcG9vbF96b25lICp6b25lLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBnZnBfdCBnZnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKIAlza2JfZ2V0KHNrYik7Ci0JcmMgPSBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgR0ZQX0tFUk5FTCk7CisJcmMgPSBuZXRsaW5rX2Jyb2FkY2FzdChubHMsIHNrYiwgMCwgMSwgZ2ZwKTsKIAlpZiAocmMgPCAwKSB7CiAJCW1lbXBvb2xfZnJlZShza2IsIHpvbmUtPnBvb2wpOwogCQlwcmludGsoS0VSTl9FUlIgImlzY3NpOiBjYW4gbm90IGJyb2FkY2FzdCBza2IgKCVkKVxuIiwgcmMpOwpAQCAtNzQ5LDcgKzc1MCw3IEBACiAJZXYtPnIuY29ubmVycm9yLmNpZCA9IGNvbm4tPmNpZDsKIAlldi0+ci5jb25uZXJyb3Iuc2lkID0gaXNjc2lfY29ubl9nZXRfc2lkKGNvbm4pOwogCi0JaXNjc2lfYnJvYWRjYXN0X3NrYihjb25uLT56X2Vycm9yLCBza2IpOworCWlzY3NpX2Jyb2FkY2FzdF9za2IoY29ubi0+el9lcnJvciwgc2tiLCBHRlBfQVRPTUlDKTsKIAogCWRldl9wcmludGsoS0VSTl9JTkZPLCAmY29ubi0+ZGV2LCAiaXNjc2k6IGRldGVjdGVkIGNvbm4gZXJyb3IgKCVkKVxuIiwKIAkJICAgZXJyb3IpOwpAQCAtODk1LDcgKzg5Niw3IEBACiAJICogdGhpcyB3aWxsIG9jY3VyIGlmIHRoZSBkYWVtb24gaXMgbm90IHVwLCBzbyB3ZSBqdXN0IHdhcm4KIAkgKiB0aGUgdXNlciBhbmQgd2hlbiB0aGUgZGFlbW9uIGlzIHJlc3RhcnRlZCBpdCB3aWxsIGhhbmRsZSBpdAogCSAqLwotCXJjID0gaXNjc2lfYnJvYWRjYXN0X3NrYihjb25uLT56X3BkdSwgc2tiKTsKKwlyYyA9IGlzY3NpX2Jyb2FkY2FzdF9za2IoY29ubi0+el9wZHUsIHNrYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJjIDwgMCkKIAkJZGV2X3ByaW50ayhLRVJOX0VSUiwgJmNvbm4tPmRldiwgIkNhbm5vdCBub3RpZnkgdXNlcnNwYWNlIG9mICIKIAkJCSAgInNlc3Npb24gZGVzdHJ1Y3Rpb24gZXZlbnQuIENoZWNrIGlzY3NpIGRhZW1vblxuIik7CkBAIC05NTgsNyArOTU5LDcgQEAKIAkgKiB0aGlzIHdpbGwgb2NjdXIgaWYgdGhlIGRhZW1vbiBpcyBub3QgdXAsIHNvIHdlIGp1c3Qgd2FybgogCSAqIHRoZSB1c2VyIGFuZCB3aGVuIHRoZSBkYWVtb24gaXMgcmVzdGFydGVkIGl0IHdpbGwgaGFuZGxlIGl0CiAJICovCi0JcmMgPSBpc2NzaV9icm9hZGNhc3Rfc2tiKGNvbm4tPnpfcGR1LCBza2IpOworCXJjID0gaXNjc2lfYnJvYWRjYXN0X3NrYihjb25uLT56X3BkdSwgc2tiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmMgPCAwKQogCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCAmY29ubi0+ZGV2LCAiQ2Fubm90IG5vdGlmeSB1c2Vyc3BhY2Ugb2YgIgogCQkJICAic2Vzc2lvbiBjcmVhdGlvbiBldmVudC4gQ2hlY2sgaXNjc2kgZGFlbW9uXG4iKTsKQEAgLTE2MTMsNiArMTYxNCw5IEBACiB7CiAJaW50IGVycjsKIAorCXByaW50ayhLRVJOX0lORk8gIkxvYWRpbmcgaVNDU0kgdHJhbnNwb3J0IGNsYXNzIHYlcy4iLAorCQlJU0NTSV9UUkFOU1BPUlRfVkVSU0lPTik7CisKIAllcnIgPSBjbGFzc19yZWdpc3RlcigmaXNjc2lfdHJhbnNwb3J0X2NsYXNzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwpAQCAtMTY3OCwzICsxNjgyLDQgQEAKIAkgICAgICAiQWxleCBBaXptYW4gPGl0bjc4MEB5YWhvby5jb20+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oImlTQ1NJIFRyYW5zcG9ydCBJbnRlcmZhY2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKElTQ1NJX1RSQU5TUE9SVF9WRVJTSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZy5jIGIvZHJpdmVycy9zY3NpL3NnLmMKaW5kZXggNjVlZWYzMzguLjM0ZjkzNDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2cuYworKysgYi9kcml2ZXJzL3Njc2kvc2cuYwpAQCAtMTgsOCArMTgsOCBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IHNnX3ZlcnNpb25fbnVtID0gMzA1MzM7CS8qIDIgZGlnaXRzIGZvciBlYWNoIGNvbXBvbmVudCAqLwotI2RlZmluZSBTR19WRVJTSU9OX1NUUiAiMy41LjMzIgorc3RhdGljIGludCBzZ192ZXJzaW9uX251bSA9IDMwNTM0OwkvKiAyIGRpZ2l0cyBmb3IgZWFjaCBjb21wb25lbnQgKi8KKyNkZWZpbmUgU0dfVkVSU0lPTl9TVFIgIjMuNS4zNCIKIAogLyoKICAqICBELiBQLiBHaWxiZXJ0IChkZ2lsYmVydEBpbnRlcmxvZy5jb20sIGRvdWdnQHRyaW9kZS5uZXQuYXUpLCBub3RlczoKQEAgLTYwLDcgKzYwLDcgQEAKIAogI2lmZGVmIENPTkZJR19TQ1NJX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci1zdGF0aWMgY2hhciAqc2dfdmVyc2lvbl9kYXRlID0gIjIwMDUwOTA4IjsKK3N0YXRpYyBjaGFyICpzZ192ZXJzaW9uX2RhdGUgPSAiMjAwNjA4MTgiOwogCiBzdGF0aWMgaW50IHNnX3Byb2NfaW5pdCh2b2lkKTsKIHN0YXRpYyB2b2lkIHNnX3Byb2NfY2xlYW51cCh2b2lkKTsKQEAgLTExNjQsNyArMTE2NCw3IEBACiAJCWxlbiA9IHZtYS0+dm1fZW5kIC0gc2E7CiAJCWxlbiA9IChsZW4gPCBzZy0+bGVuZ3RoKSA/IGxlbiA6IHNnLT5sZW5ndGg7CiAJCWlmIChvZmZzZXQgPCBsZW4pIHsKLQkJCXBhZ2UgPSBzZy0+cGFnZTsKKwkJCXBhZ2UgPSB2aXJ0X3RvX3BhZ2UocGFnZV9hZGRyZXNzKHNnLT5wYWdlKSArIG9mZnNldCk7CiAJCQlnZXRfcGFnZShwYWdlKTsJLyogaW5jcmVtZW50IHBhZ2UgY291bnQgKi8KIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvc3ltNTNjOHh4XzIvc3ltX2dsdWUuYyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCmluZGV4IDhjNTA1MDcuLjczOWQzZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCisrKyBiL2RyaXZlcnMvc2NzaS9zeW01M2M4eHhfMi9zeW1fZ2x1ZS5jCkBAIC0yMDg0LDcgKzIwODQsNyBAQAogCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg2MCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMsIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzE1MTAsCi0JICBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwVUwgfSwKKwkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19TVE9SQUdFX1NDU0k8PDgsICAweGZmZmYwMCwgMFVMIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9OQ1JfNTNDODk2LAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMFVMIH0sCiAJeyBQQ0lfVkVORE9SX0lEX0xTSV9MT0dJQywgUENJX0RFVklDRV9JRF9OQ1JfNTNDODk1LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggYTFkMzIyZi4uODUxZTQ4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC00NTgsMTEgKzQ1OCwxMSBAQAogICogZ3Jvd2luZyAqaHVnZSosIHdlIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIGNvbGxhcHNlIHNvbWUgNzAgZW50cmllcwogICogaW4gdGhlIFBDSSB0YWJsZSBpbnRvIG9uZSwgZm9yIHNhbml0eSdzIGFuZCBjb21wYWN0bmVzcydzIHNha2UuCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCB0aW1lZGlhX3NpbmdsZV9wb3J0W10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdGltZWRpYV9zaW5nbGVfcG9ydFtdID0gewogCTB4NDAyNSwgMHg0MDI3LCAweDQwMjgsIDB4NTAyNSwgMHg1MDI3LCAwCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgdGltZWRpYV9kdWFsX3BvcnRbXSA9IHsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0aW1lZGlhX2R1YWxfcG9ydFtdID0gewogCTB4MDAwMiwgMHg0MDM2LCAweDQwMzcsIDB4NDAzOCwgMHg0MDc4LCAweDQwNzksIDB4NDA4NSwKIAkweDQwODgsIDB4NDA4OSwgMHg1MDM3LCAweDUwNzgsIDB4NTA3OSwgMHg1MDg1LCAweDYwNzksIAogCTB4NzA3OSwgMHg4MDc5LCAweDgxMzcsIDB4ODEzOCwgMHg4MjM3LCAweDgyMzgsIDB4OTA3OSwgCkBAIC00NzAsMzUgKzQ3MCwzNCBAQAogCTB4RDA3OSwgMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHRpbWVkaWFfcXVhZF9wb3J0W10gPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdGltZWRpYV9xdWFkX3BvcnRbXSA9IHsKIAkweDQwNTUsIDB4NDA1NiwgMHg0MDk1LCAweDQwOTYsIDB4NTA1NiwgMHg4MTU2LCAweDgxNTcsIAogCTB4ODI1NiwgMHg4MjU3LCAweDkwNTYsIDB4OTE1NiwgMHg5MTU3LCAweDkxNTgsIDB4OTE1OSwgCiAJMHg5MjU2LCAweDkyNTcsIDB4QTA1NiwgMHhBMTU3LCAweEExNTgsIDB4QTE1OSwgMHhCMDU2LAogCTB4QjE1NywgMAogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHRpbWVkaWFfZWlnaHRfcG9ydFtdID0geworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHRpbWVkaWFfZWlnaHRfcG9ydFtdID0gewogCTB4NDA2NSwgMHg0MDY2LCAweDUwNjUsIDB4NTA2NiwgMHg4MTY2LCAweDkwNjYsIDB4OTE2NiwgCiAJMHg5MTY3LCAweDkxNjgsIDB4QTA2NiwgMHhBMTY3LCAweEExNjgsIDAKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdGltZWRpYV9zdHJ1Y3QgewogCWludCBudW07Ci0JdW5zaWduZWQgc2hvcnQgKmlkczsKKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqaWRzOwogfSB0aW1lZGlhX2RhdGFbXSA9IHsKIAl7IDEsIHRpbWVkaWFfc2luZ2xlX3BvcnQgfSwKIAl7IDIsIHRpbWVkaWFfZHVhbF9wb3J0IH0sCiAJeyA0LCB0aW1lZGlhX3F1YWRfcG9ydCB9LAotCXsgOCwgdGltZWRpYV9laWdodF9wb3J0IH0sCi0JeyAwLCBOVUxMIH0KKwl7IDgsIHRpbWVkaWFfZWlnaHRfcG9ydCB9CiB9OwogCiBzdGF0aWMgaW50IHBjaV90aW1lZGlhX2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQl1bnNpZ25lZCBzaG9ydCAqaWRzOworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICppZHM7CiAJaW50IGksIGo7CiAKLQlmb3IgKGkgPSAwOyB0aW1lZGlhX2RhdGFbaV0ubnVtOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0aW1lZGlhX2RhdGEpOyBpKyspIHsKIAkJaWRzID0gdGltZWRpYV9kYXRhW2ldLmlkczsKIAkJZm9yIChqID0gMDsgaWRzW2pdOyBqKyspCiAJCQlpZiAoZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IGlkc1tqXSkKQEAgLTkzNiw2ICs5MzUsNyBAQAogCXBibl9iMV84XzEzODI0MDAsCiAKIAlwYm5fYjJfMV8xMTUyMDAsCisJcGJuX2IyXzJfMTE1MjAwLAogCXBibl9iMl84XzExNTIwMCwKIAogCXBibl9iMl8xXzQ2MDgwMCwKQEAgLTEyNDMsNiArMTI0MywxMiBAQAogCQkuYmFzZV9iYXVkCT0gMTE1MjAwLAogCQkudWFydF9vZmZzZXQJPSA4LAogCX0sCisJW3Bibl9iMl8yXzExNTIwMF0gPSB7CisJCS5mbGFncwkJPSBGTF9CQVNFMiwKKwkJLm51bV9wb3J0cwk9IDIsCisJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCisJCS51YXJ0X29mZnNldAk9IDgsCisJfSwKIAlbcGJuX2IyXzhfMTE1MjAwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0UyLAogCQkubnVtX3BvcnRzCT0gOCwKQEAgLTIzNDAsNiArMjM0NiwxMyBAQAogCQlwYm5fYjBfMV8xMTUyMDAgfSwKIAogCS8qCisJICogSW50YVNoaWVsZCBJUy0yMDAKKwkgKi8KKwl7CVBDSV9WRU5ET1JfSURfSU5UQVNISUVMRCwgUENJX0RFVklDRV9JRF9JTlRBU0hJRUxEX0lTMjAwLAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLAkvKiAxMzVhLjA4MTEgKi8KKwkJcGJuX2IyXzJfMTE1MjAwIH0sCisKKwkvKgogCSAqIFRoZXNlIGVudHJpZXMgbWF0Y2ggZGV2aWNlcyB3aXRoIGNsYXNzIENPTU1VTklDQVRJT05fU0VSSUFMLAogCSAqIENPTU1VTklDQVRJT05fTU9ERU0gb3IgQ09NTVVOSUNBVElPTl9NVUxUSVNFUklBTAogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvcG1hY196aWxvZy5jCmluZGV4IGJmZDJhMjIuLmEzYjk5Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3BtYWNfemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9wbWFjX3ppbG9nLmMKQEAgLTE0MDAsOCArMTQwMCw4IEBACiBzdGF0aWMgaW50IF9faW5pdCBwbXpfaW5pdF9wb3J0KHN0cnVjdCB1YXJ0X3BtYWNfcG9ydCAqdWFwKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSB1YXAtPm5vZGU7Ci0JY2hhciAqY29ubjsKLQlzdHJ1Y3Qgc2xvdF9uYW1lc19wcm9wIHsKKwljb25zdCBjaGFyICpjb25uOworCWNvbnN0IHN0cnVjdCBzbG90X25hbWVzX3Byb3AgewogCQlpbnQJY291bnQ7CiAJCWNoYXIJbmFtZVsxXTsKIAl9ICpzbG90czsKQEAgLTE0NTgsNyArMTQ1OCw3IEBACiAJCXVhcC0+ZmxhZ3MgfD0gUE1BQ1pJTE9HX0ZMQUdfSVNfSVJEQTsKIAl1YXAtPnBvcnRfdHlwZSA9IFBNQUNfU0NDX0FTWU5DOwogCS8qIDE5OTkgUG93ZXJib29rIEczIGhhcyBzbG90LW5hbWVzIHByb3BlcnR5IGluc3RlYWQgKi8KLQlzbG90cyA9IChzdHJ1Y3Qgc2xvdF9uYW1lc19wcm9wICopZ2V0X3Byb3BlcnR5KG5wLCAic2xvdC1uYW1lcyIsICZsZW4pOworCXNsb3RzID0gZ2V0X3Byb3BlcnR5KG5wLCAic2xvdC1uYW1lcyIsICZsZW4pOwogCWlmIChzbG90cyAmJiBzbG90cy0+Y291bnQgPiAwKSB7CiAJCWlmIChzdHJjbXAoc2xvdHMtPm5hbWUsICJJckRBIikgPT0gMCkKIAkJCXVhcC0+ZmxhZ3MgfD0gUE1BQ1pJTE9HX0ZMQUdfSVNfSVJEQTsKQEAgLTE0NzAsNyArMTQ3MCw4IEBACiAJaWYgKFpTX0lTX0lOVE1PREVNKHVhcCkpIHsKIAkJc3RydWN0IGRldmljZV9ub2RlKiBpMmNfbW9kZW0gPSBmaW5kX2RldmljZXMoImkyYy1tb2RlbSIpOwogCQlpZiAoaTJjX21vZGVtKSB7Ci0JCQljaGFyKiBtaWQgPSBnZXRfcHJvcGVydHkoaTJjX21vZGVtLCAibW9kZW0taWQiLCBOVUxMKTsKKwkJCWNvbnN0IGNoYXIqIG1pZCA9CisJCQkJZ2V0X3Byb3BlcnR5KGkyY19tb2RlbSwgIm1vZGVtLWlkIiwgTlVMTCk7CiAJCQlpZiAobWlkKSBzd2l0Y2goKm1pZCkgewogCQkJY2FzZSAweDA0IDoKIAkJCWNhc2UgMHgwNSA6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zM2MyNDEwLmMKaW5kZXggMzkyYmZmYy4uOTU3MzhhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvczNjMjQxMC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTAuYwpAQCAtMTYyMSw3ICsxNjIxLDcgQEAKIHN0YXRpYyBpbnQgczNjMjQxMl9zZXJpYWxfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWRiZygiczNjMjQ0MF9zZXJpYWxfcHJvYmU6IGRldj0lcFxuIiwgZGV2KTsKLQlyZXR1cm4gczNjMjR4eF9zZXJpYWxfcHJvYmUoZGV2LCAmczNjMjQ0MF91YXJ0X2luZik7CisJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX3Byb2JlKGRldiwgJnMzYzI0MTJfdWFydF9pbmYpOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2MyNDEyX3NlcmlhbF9kcnYgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jIGIvZHJpdmVycy9zZXJpYWwvc2VyaWFsX2NvcmUuYwppbmRleCA4MGVmN2Q0Li4zNzJlNDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zZXJpYWxfY29yZS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NlcmlhbF9jb3JlLmMKQEAgLTIzNzcsNiArMjM3Nyw5IEBACiAJCXJldHVybiAocG9ydDEtPmlvYmFzZSA9PSBwb3J0Mi0+aW9iYXNlKSAmJgogCQkgICAgICAgKHBvcnQxLT5odWI2ICAgPT0gcG9ydDItPmh1YjYpOwogCWNhc2UgVVBJT19NRU06CisJY2FzZSBVUElPX01FTTMyOgorCWNhc2UgVVBJT19BVToKKwljYXNlIFVQSU9fVFNJOgogCQlyZXR1cm4gKHBvcnQxLT5tYXBiYXNlID09IHBvcnQyLT5tYXBiYXNlKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCmluZGV4IDMwMTU3MzMuLmNiZWRlMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jCkBAIC0xNTc5LDcgKzE1NzksNyBAQAogCWg4MzAwX3NjaV9lbmFibGUocG9ydCwgc2NpX2VuYWJsZSk7CiAjZW5kaWYKICNlbGlmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotCXBvcnQtPnVhcnRjbGsgPSBjdXJyZW50X2NwdV9pbmZvLm1vZHVsZV9jbG9jayAqIDE2OworCXBvcnQtPnVhcnRjbGsgPSBjdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jayAqIDE2OwogI2Vsc2UKIAl7CiAJCXN0cnVjdCBjbGsgKmNsayA9IGNsa19nZXQoIm1vZHVsZV9jbGsiKTsKQEAgLTE3MjAsNyArMTcyMCw3IEBACiAjaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCiAJCQlzY2lwb3J0LT5wb3J0LnVhcnRjbGsgPSBDT05GSUdfQ1BVX0NMT0NLOwogI2VsaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0JCQlzY2lwb3J0LT5wb3J0LnVhcnRjbGsgPSBjdXJyZW50X2NwdV9pbmZvLm1vZHVsZV9jbG9jayAqIDE2OworCQkJc2NpcG9ydC0+cG9ydC51YXJ0Y2xrID0gY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgKiAxNjsKICNlbHNlCiAJCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KCJtb2R1bGVfY2xrIik7CiAJCQlzY2lwb3J0LT5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAqIDE2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuc2FiLmMgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwppbmRleCBkYzY3M2UxLi5jZmUyMGY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW5zYWIuYwpAQCAtODg2LDYgKzg4NiwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGJhdWQsIHF1b3Q7CiAKKwkvKgorCSAqIFRoZSBjb25zb2xlIGZyYW1ld29yayBjYWxscyB1cyBmb3IgZWFjaCBhbmQgZXZlcnkgcG9ydAorCSAqIHJlZ2lzdGVyZWQuIERlZmVyIHRoZSBjb25zb2xlIHNldHVwIHVudGlsIHRoZSByZXF1ZXN0ZWQKKwkgKiBwb3J0IGhhcyBiZWVuIHByb3Blcmx5IGRpc2NvdmVyZWQuIEEgYml0IG9mIGEgaGFjaywKKwkgKiB0aG91Z2guLi4KKwkgKi8KKwlpZiAodXAtPnBvcnQudHlwZSAhPSBQT1JUX1NVTlNBQikKKwkJcmV0dXJuIC0xOworCiAJcHJpbnRrKCJDb25zb2xlOiB0dHlTJWQgKFNBQjgyNTMyKVxuIiwKIAkgICAgICAgKHN1bnNhYl9yZWcubWlub3IgLSA2NCkgKyBjb24tPmluZGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKaW5kZXggNDdiYzNkNS4uZDM0ZjMzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCkBAIC0xMTQ2LDYgKzExNDYsOSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGJhdWQsIGJyZzsKIAorCWlmICh1cC0+cG9ydC50eXBlICE9IFBPUlRfU1VOWklMT0cpCisJCXJldHVybiAtMTsKKwogCXByaW50ayhLRVJOX0lORk8gIkNvbnNvbGU6IHR0eVMlZCAoU3VuWmlsb2cgenMlZClcbiIsCiAJICAgICAgIChzdW56aWxvZ19yZWcubWlub3IgLSA2NCkgKyBjb24tPmluZGV4LCBjb24tPmluZGV4KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL0tjb25maWcKaW5kZXggMmVlNzQyZC4uMDA1MDQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9LY29uZmlnCkBAIC0yNCw3ICsyNCw3IEBACiAJZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQxMAogCWRlZmF1bHQgeSBpZiBQWEEyN3gKIAlkZWZhdWx0IHkgaWYgQVJDSF9FUDkzWFgKLQlkZWZhdWx0IHkgaWYgQVJDSF9BVDkxUk05MjAwCisJZGVmYXVsdCB5IGlmIChBUkNIX0FUOTFSTTkyMDAgfHwgQVJDSF9BVDkxU0FNOTI2MSkKIAkjIFBQQzoKIAlkZWZhdWx0IHkgaWYgU1RCMDN4eHgKIAlkZWZhdWx0IHkgaWYgUFBDX01QQzUyeHgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCBmN2JkZDk0Li4yMTg2MjFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC01MTcsMTkgKzUxNywxOSBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldl9sb29rdXBfbWlub3IoaW50IG1pbm9yKQogewotCXN0cnVjdCBkZXZpY2UgKmRldmljZTsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IE5VTEw7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBOVUxMOwogCiAJZG93bigmdXNiX2RldmljZV9jbGFzcy0+c2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldmljZSwgJnVzYl9kZXZpY2VfY2xhc3MtPmRldmljZXMsIG5vZGUpIHsKLQkJaWYgKGRldmljZS0+ZGV2dCA9PSBNS0RFVihVU0JfREVWSUNFX01BSk9SLCBtaW5vcikpIHsKLQkJCXVkZXYgPSBkZXZpY2UtPnBsYXRmb3JtX2RhdGE7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGFzc19kZXYsICZ1c2JfZGV2aWNlX2NsYXNzLT5jaGlsZHJlbiwgbm9kZSkgeworCQlpZiAoY2xhc3NfZGV2LT5kZXZ0ID09IE1LREVWKFVTQl9ERVZJQ0VfTUFKT1IsIG1pbm9yKSkgeworCQkJZGV2ID0gY2xhc3NfZGV2LT5jbGFzc19kYXRhOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJdXAoJnVzYl9kZXZpY2VfY2xhc3MtPnNlbSk7CiAKLQlyZXR1cm4gdWRldjsKKwlyZXR1cm4gZGV2OwogfTsKIAogLyoKQEAgLTE1ODAsMTYgKzE1ODAsMTYgQEAKIHsKIAlpbnQgbWlub3IgPSAoKGRldi0+YnVzLT5idXNudW0tMSkgKiAxMjgpICsgKGRldi0+ZGV2bnVtLTEpOwogCi0JZGV2LT51c2Jmc19kZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9kZXZpY2VfY2xhc3MsICZkZXYtPmRldiwKLQkJCQlNS0RFVihVU0JfREVWSUNFX01BSk9SLCBtaW5vciksCisJZGV2LT5jbGFzc19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKHVzYl9kZXZpY2VfY2xhc3MsIE5VTEwsCisJCQkJTUtERVYoVVNCX0RFVklDRV9NQUpPUiwgbWlub3IpLCAmZGV2LT5kZXYsCiAJCQkJInVzYmRldiVkLiVkIiwgZGV2LT5idXMtPmJ1c251bSwgZGV2LT5kZXZudW0pOwogCi0JZGV2LT51c2Jmc19kZXYtPnBsYXRmb3JtX2RhdGEgPSBkZXY7CisJZGV2LT5jbGFzc19kZXYtPmNsYXNzX2RhdGEgPSBkZXY7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYmRldl9yZW1vdmUoc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKLQlkZXZpY2VfdW5yZWdpc3RlcihkZXYtPnVzYmZzX2Rldik7CisJY2xhc3NfZGV2aWNlX3VucmVnaXN0ZXIoZGV2LT5jbGFzc19kZXYpOwogfQogCiBzdGF0aWMgaW50IHVzYmRldl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKaW5kZXggYWJlZTBmNS4uOGRlNGY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTE5NCwxMyArMTk0LDE0IEBACiAJCSsrdGVtcDsKIAllbHNlCiAJCXRlbXAgPSBuYW1lOwotCWludGYtPnVzYl9kZXYgPSBkZXZpY2VfY3JlYXRlKHVzYl9jbGFzcy0+Y2xhc3MsICZpbnRmLT5kZXYsCi0JCQkJICAgICAgTUtERVYoVVNCX01BSk9SLCBtaW5vciksICIlcyIsIHRlbXApOwotCWlmIChJU19FUlIoaW50Zi0+dXNiX2RldikpIHsKKwlpbnRmLT5jbGFzc19kZXYgPSBjbGFzc19kZXZpY2VfY3JlYXRlKHVzYl9jbGFzcy0+Y2xhc3MsIE5VTEwsCisJCQkJCSAgICAgIE1LREVWKFVTQl9NQUpPUiwgbWlub3IpLAorCQkJCQkgICAgICAmaW50Zi0+ZGV2LCAiJXMiLCB0ZW1wKTsKKwlpZiAoSVNfRVJSKGludGYtPmNsYXNzX2RldikpIHsKIAkJc3Bpbl9sb2NrICgmbWlub3JfbG9jayk7CiAJCXVzYl9taW5vcnNbaW50Zi0+bWlub3JdID0gTlVMTDsKIAkJc3Bpbl91bmxvY2sgKCZtaW5vcl9sb2NrKTsKLQkJcmV0dmFsID0gUFRSX0VSUihpbnRmLT51c2JfZGV2KTsKKwkJcmV0dmFsID0gUFRSX0VSUihpbnRmLT5jbGFzc19kZXYpOwogCX0KIGV4aXQ6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTI0MSw4ICsyNDIsOCBAQAogCXNwaW5fdW5sb2NrICgmbWlub3JfbG9jayk7CiAKIAlzbnByaW50ZihuYW1lLCBCVVNfSURfU0laRSwgY2xhc3NfZHJpdmVyLT5uYW1lLCBpbnRmLT5taW5vciAtIG1pbm9yX2Jhc2UpOwotCWRldmljZV9kZXN0cm95KHVzYl9jbGFzcy0+Y2xhc3MsIE1LREVWKFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpKTsKLQlpbnRmLT51c2JfZGV2ID0gTlVMTDsKKwljbGFzc19kZXZpY2VfZGVzdHJveSh1c2JfY2xhc3MtPmNsYXNzLCBNS0RFVihVU0JfTUFKT1IsIGludGYtPm1pbm9yKSk7CisJaW50Zi0+Y2xhc3NfZGV2ID0gTlVMTDsKIAlpbnRmLT5taW5vciA9IC0xOwogCWRlc3Ryb3lfdXNiX2NsYXNzKCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDM2M2IyYWQuLjFhMzJkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0yMDcsNyArMjA3LDcgQEAKIAogY29uZmlnIFVTQl9HQURHRVRfRFVNTVlfSENECiAJYm9vbGVhbiAiRHVtbXkgSENEIChERVZFTE9QTUVOVCkiCi0JZGVwZW5kcyBvbiBVU0IgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiAoVVNCPXkgfHwgKFVTQj1tICYmIFVTQl9HQURHRVQ9bSkpICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBVU0JfR0FER0VUX0RVQUxTUEVFRAogCWhlbHAKIAkgIFRoaXMgaG9zdCBjb250cm9sbGVyIGRyaXZlciBlbXVsYXRlcyBVU0IsIGxvb3BpbmcgYWxsIGRhdGEgdHJhbnNmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggMWM0NTlmZi4uY2ZlYmNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTU3LDE5ICs1NywyMyBAQAogCiAvKgogICogVGhpcyBjb250cm9sbGVyIGlzIHNpbXBsZSBhbmQgUElPLW9ubHkuICBJdCdzIHVzZWQgaW4gbWFueSBBVDkxLXNlcmllcwotICogQVJNdjRUIGNvbnRyb2xsZXJzLCBpbmNsdWRpbmcgdGhlIGF0OTFybTkyMDAgKGFybTkyMFQsIHdpdGggTU1VKSwKLSAqIGF0OTFzYW05MjYxIChhcm05MjZlanMsIHdpdGggTU1VKSwgYW5kIHNldmVyYWwgbm8tbW11IHZlcnNpb25zLgorICogZnVsbCBzcGVlZCBVU0IgY29udHJvbGxlcnMsIGluY2x1ZGluZyB0aGUgYXQ5MXJtOTIwMCAoYXJtOTIwVCwgd2l0aCBNTVUpLAorICogYXQ5MXNhbTkyNnggKGFybTkyNmVqcywgd2l0aCBNTVUpLCBhbmQgc2V2ZXJhbCBuby1tbXUgdmVyc2lvbnMuCiAgKgogICogVGhpcyBkcml2ZXIgZXhwZWN0cyB0aGUgYm9hcmQgaGFzIGJlZW4gd2lyZWQgd2l0aCB0d28gR1BJT3Mgc3VwcHBvcnRpbmcKICAqIGEgVkJVUyBzZW5zaW5nIElSUSwgYW5kIGEgRCsgcHVsbHVwLiAgKFRoZXkgbWF5IGJlIG9taXR0ZWQsIGJ1dCB0aGUKLSAqIHRlc3RpbmcgaGFzbid0IGNvdmVyZWQgc3VjaCBjYXNlcy4pICBUaGUgcHVsbHVwIGlzIG1vc3QgaW1wb3J0YW50OyBpdAorICogdGVzdGluZyBoYXNuJ3QgY292ZXJlZCBzdWNoIGNhc2VzLikKKyAqCisgKiBUaGUgcHVsbHVwIGlzIG1vc3QgaW1wb3J0YW50IChzbyBpdCdzIGludGVncmF0ZWQgb24gc2FtOTI2eCBwYXJ0cykuICBJdAogICogcHJvdmlkZXMgc29mdHdhcmUgY29udHJvbCBvdmVyIHdoZXRoZXIgdGhlIGhvc3QgZW51bWVyYXRlcyB0aGUgZGV2aWNlLgorICoKICAqIFRoZSBWQlVTIHNlbnNpbmcgaGVscHMgZHVyaW5nIGVudW1lcmF0aW9uLCBhbmQgYWxsb3dzIGJvdGggVVNCIGNsb2NrcwogICogKGFuZCB0aGUgdHJhbnNjZWl2ZXIpIHRvIHN0YXkgZ2F0ZWQgb2ZmIHVudGlsIHRoZXkncmUgbmVjZXNzYXJ5LCBzYXZpbmcKLSAqIHBvd2VyLiAgRHVyaW5nIFVTQiBzdXNwZW5kLCB0aGUgNDggTUh6IGNsb2NrIGlzIGdhdGVkIG9mZi4KKyAqIHBvd2VyLiAgRHVyaW5nIFVTQiBzdXNwZW5kLCB0aGUgNDggTUh6IGNsb2NrIGlzIGdhdGVkIG9mZiBpbiBoYXJkd2FyZTsKKyAqIGl0IG1heSBhbHNvIGJlIGdhdGVkIG9mZiBieSBzb2Z0d2FyZSBkdXJpbmcgc29tZSBMaW51eCBzbGVlcCBzdGF0ZXMuCiAgKi8KIAotI2RlZmluZQlEUklWRVJfVkVSU0lPTgkiOCBNYXJjaCAyMDA1IgorI2RlZmluZQlEUklWRVJfVkVSU0lPTgkiMyBNYXkgMjAwNiIKIAogc3RhdGljIGNvbnN0IGNoYXIgZHJpdmVyX25hbWUgW10gPSAiYXQ5MV91ZGMiOwogc3RhdGljIGNvbnN0IGNoYXIgZXAwbmFtZVtdID0gImVwMCI7CkBAIC0zMTYsOSArMzIwLDE1IEBACiAgKgogICogVGhlcmUgYXJlIGFsc28gc3RhdGUgYml0cyBsaWtlIEZPUkNFU1RBTEwsIEVQRURTLCBESVIsIGFuZCBFUFRZUEUKICAqIHRoYXQgc2hvdWxkbid0IG5vcm1hbGx5IGJlIGNoYW5nZWQuCisgKgorICogTk9URSBhdDkxc2FtOTI2MCBkb2NzIG1lbnRpb24gc3luY2ggYmV0d2VlbiBVRFBDSyBhbmQgTUNLIGNsb2NrIGRvbWFpbnMsCisgKiBpbXBseWluZyBhIG5lZWQgdG8gd2FpdCBmb3Igb25lIHdyaXRlIHRvIGNvbXBsZXRlICh0ZXN0IHJlbGV2YW50IGJpdHMpCisgKiBiZWZvcmUgc3RhcnRpbmcgdGhlIG5leHQgd3JpdGUuICBUaGlzIHNob3VsZG4ndCBiZSBhbiBpc3N1ZSBnaXZlbiBob3cKKyAqIGluZnJlcXVlbnRseSB3ZSB3cml0ZSwgZXhjZXB0IG1heWJlIGZvciB3cml0ZS10aGVuLXJlYWQgaWRpb21zLgogICovCiAjZGVmaW5lCVNFVF9GWAkoQVQ5MV9VRFBfVFhQS1RSRFkpCi0jZGVmaW5lCUNMUl9GWAkoUlhfREFUQV9SRUFEWSB8IEFUOTFfVURQX1JYU0VUVVAgfCBBVDkxX1VEUF9TVEFMTFNFTlQgfCBBVDkxX1VEUF9UWENPTVApCisjZGVmaW5lCUNMUl9GWAkoUlhfREFUQV9SRUFEWSB8IEFUOTFfVURQX1JYU0VUVVAgXAorCQl8IEFUOTFfVURQX1NUQUxMU0VOVCB8IEFUOTFfVURQX1RYQ09NUCkKIAogLyogcHVsbCBPVVQgcGFja2V0IGRhdGEgZnJvbSB0aGUgZW5kcG9pbnQncyBmaWZvICovCiBzdGF0aWMgaW50IHJlYWRfZmlmbyAoc3RydWN0IGF0OTFfZXAgKmVwLCBzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXEpCkBAIC00NzIsNyArNDgyLDggQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGludCBhdDkxX2VwX2VuYWJsZShzdHJ1Y3QgdXNiX2VwICpfZXAsIGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKK3N0YXRpYyBpbnQgYXQ5MV9lcF9lbmFibGUoc3RydWN0IHVzYl9lcCAqX2VwLAorCQkJCWNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZGVzYykKIHsKIAlzdHJ1Y3QgYXQ5MV9lcAkqZXAgPSBjb250YWluZXJfb2YoX2VwLCBzdHJ1Y3QgYXQ5MV9lcCwgZXApOwogCXN0cnVjdCBhdDkxX3VkYwkqZGV2ID0gZXAtPnVkYzsKQEAgLTU4MiwxMSArNTkzLDEyIEBACiAgKiBpbnRlcmVzdGluZyBmb3IgcmVxdWVzdCBvciBidWZmZXIgYWxsb2NhdGlvbi4KICAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0ICphdDkxX2VwX2FsbG9jX3JlcXVlc3QgKHN0cnVjdCB1c2JfZXAgKl9lcCwgdW5zaWduZWQgaW50IGdmcF9mbGFncykKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKgorYXQ5MV9lcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKl9lcCwgdW5zaWduZWQgaW50IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3QgYXQ5MV9yZXF1ZXN0ICpyZXE7CiAKLQlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGF0OTFfcmVxdWVzdCksIFNMQUJfS0VSTkVMKTsKKwlyZXEgPSBrY2FsbG9jKDEsIHNpemVvZiAoc3RydWN0IGF0OTFfcmVxdWVzdCksIGdmcF9mbGFncyk7CiAJaWYgKCFyZXEpCiAJCXJldHVybiBOVUxMOwogCkBAIC04NjIsNiArODc0LDcgQEAKIAlpZiAodWRjLT5nYWRnZXQuc3BlZWQgPT0gVVNCX1NQRUVEX1VOS05PV04pCiAJCWRyaXZlciA9IE5VTEw7CiAJdWRjLT5nYWRnZXQuc3BlZWQgPSBVU0JfU1BFRURfVU5LTk9XTjsKKwl1ZGMtPnN1c3BlbmRlZCA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VORFBPSU5UUzsgaSsrKSB7CiAJCXN0cnVjdCBhdDkxX2VwICplcCA9ICZ1ZGMtPmVwW2ldOwpAQCAtODg5LDggKzkwMiw4IEBACiAJCXJldHVybjsKIAl1ZGMtPmNsb2NrZWQgPSAwOwogCXVkYy0+Z2FkZ2V0LnNwZWVkID0gVVNCX1NQRUVEX1VOS05PV047Ci0JY2xrX2Rpc2FibGUodWRjLT5pY2xrKTsKIAljbGtfZGlzYWJsZSh1ZGMtPmZjbGspOworCWNsa19kaXNhYmxlKHVkYy0+aWNsayk7CiB9CiAKIC8qCkBAIC05MTEsOSArOTI0LDYgQEAKIAkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfVFhWQywgQVQ5MV9VRFBfVFhWQ19UWFZESVMpOwogCQlhdDkxX3NldF9ncGlvX3ZhbHVlKHVkYy0+Ym9hcmQucHVsbHVwX3BpbiwgMCk7CiAJCWNsa19vZmYodWRjKTsKLQotCQkvLyBSRVZJU0lUOiAgd2l0aCB0cmFuc2NlaXZlciBkaXNhYmxlZCwgd2lsbCBELSBmbG9hdAotCQkvLyBzbyB0aGF0IGEgaG9zdCB3b3VsZCBmYWxzZWx5IGRldGVjdCBhIGRldmljZT8KIAl9CiB9CiAKQEAgLTEyOTAsNyArMTMwMCw4IEBACiAJCQlpZiAodWRjLT53YWl0X2Zvcl9hZGRyX2FjaykgewogCQkJCXUzMgl0bXA7CiAKLQkJCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9GQUREUiwgQVQ5MV9VRFBfRkVOIHwgdWRjLT5hZGRyKTsKKwkJCQlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9GQUREUiwKKwkJCQkJCUFUOTFfVURQX0ZFTiB8IHVkYy0+YWRkcik7CiAJCQkJdG1wID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9HTEJfU1RBVCk7CiAJCQkJdG1wICY9IH5BVDkxX1VEUF9GQURERU47CiAJCQkJaWYgKHVkYy0+YWRkcikKQEAgLTEzNjEsOSArMTM3MiwxMCBAQAogCXUzMgkJCXJlc2NhbnMgPSA1OwogCiAJd2hpbGUgKHJlc2NhbnMtLSkgewotCQl1MzIJc3RhdHVzID0gYXQ5MV91ZHBfcmVhZChBVDkxX1VEUF9JU1IpOworCQl1MzIgc3RhdHVzOwogCi0JCXN0YXR1cyAmPSBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0lNUik7CisJCXN0YXR1cyA9IGF0OTFfdWRwX3JlYWQoQVQ5MV9VRFBfSVNSKQorCQkJJiBhdDkxX3VkcF9yZWFkKEFUOTFfVURQX0lNUik7CiAJCWlmICghc3RhdHVzKQogCQkJYnJlYWs7CiAKQEAgLTEzNzksMTggKzEzOTEsMTcgQEAKIAkJCXN0b3BfYWN0aXZpdHkodWRjKTsKIAogCQkJLyogZW5hYmxlIGVwMCAqLwotCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfQ1NSKDApLCBBVDkxX1VEUF9FUEVEUyB8IEFUOTFfVURQX0VQVFlQRV9DVFJMKTsKKwkJCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX0NTUigwKSwKKwkJCQkJQVQ5MV9VRFBfRVBFRFMgfCBBVDkxX1VEUF9FUFRZUEVfQ1RSTCk7CiAJCQl1ZGMtPmdhZGdldC5zcGVlZCA9IFVTQl9TUEVFRF9GVUxMOwogCQkJdWRjLT5zdXNwZW5kZWQgPSAwOwogCQkJYXQ5MV91ZHBfd3JpdGUoQVQ5MV9VRFBfSUVSLCBBVDkxX1VEUF9FUCgwKSk7CiAKIAkJCS8qCiAJCQkgKiBOT1RFOiAgdGhpcyBkcml2ZXIga2VlcHMgY2xvY2tzIG9mZiB1bmxlc3MgdGhlCi0JCQkgKiBVU0IgaG9zdCBpcyBwcmVzZW50LiAgVGhhdCBzYXZlcyBwb3dlciwgYW5kIGFsc28KLQkJCSAqIGVsaW1pbmF0ZXMgSVJRcyAocmVzZXQsIHJlc3VtZSwgc3VzcGVuZCkgdGhhdCBjYW4KLQkJCSAqIG90aGVyd2lzZSBmbG9vZCBmcm9tIHRoZSBjb250cm9sbGVyLiAgSWYgeW91cgotCQkJICogYm9hcmQgZG9lc24ndCBzdXBwb3J0IFZCVVMgZGV0ZWN0aW9uLCBzdXNwZW5kIGFuZAotCQkJICogcmVzdW1lIGlycSBsb2dpYyBtYXkgbmVlZCBtb3JlIGF0dGVudGlvbi4uLgorCQkJICogVVNCIGhvc3QgaXMgcHJlc2VudC4gIFRoYXQgc2F2ZXMgcG93ZXIsIGJ1dCBmb3IKKwkJCSAqIGJvYXJkcyB0aGF0IGRvbid0IHN1cHBvcnQgVkJVUyBkZXRlY3Rpb24sIGJvdGgKKwkJCSAqIGNsb2NrcyBuZWVkIHRvIGJlIGFjdGl2ZSBtb3N0IG9mIHRoZSB0aW1lLgogCQkJICovCiAKIAkJLyogaG9zdCBpbml0aWF0ZWQgc3VzcGVuZCAoMyttcyBidXMgaWRsZSkgKi8KQEAgLTE0NTIsMTMgKzE0NjMsMTkgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQgbm9wX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIG5vdGhpbmcgdG8gZnJlZSAqLworfQorCiBzdGF0aWMgc3RydWN0IGF0OTFfdWRjIGNvbnRyb2xsZXIgPSB7CiAJLmdhZGdldCA9IHsKLQkJLm9wcyA9ICZhdDkxX3VkY19vcHMsCi0JCS5lcDAgPSAmY29udHJvbGxlci5lcFswXS5lcCwKLQkJLm5hbWUgPSBkcml2ZXJfbmFtZSwKLQkJLmRldiA9IHsKLQkJCS5idXNfaWQgPSAiZ2FkZ2V0IgorCQkub3BzCT0gJmF0OTFfdWRjX29wcywKKwkJLmVwMAk9ICZjb250cm9sbGVyLmVwWzBdLmVwLAorCQkubmFtZQk9IGRyaXZlcl9uYW1lLAorCQkuZGV2CT0geworCQkJLmJ1c19pZCA9ICJnYWRnZXQiLAorCQkJLnJlbGVhc2UgPSBub3BfcmVsZWFzZSwKIAkJfQogCX0sCiAJLmVwWzBdID0gewpAQCAtMTQ2OCw3ICsxNDg1LDggQEAKIAkJfSwKIAkJLnVkYwkJPSAmY29udHJvbGxlciwKIAkJLm1heHBhY2tldAk9IDgsCi0JCS5jcmVnCQk9ICh2b2lkIF9faW9tZW0gKikoQVQ5MV9WQV9CQVNFX1VEUCArIEFUOTFfVURQX0NTUigwKSksCisJCS5jcmVnCQk9ICh2b2lkIF9faW9tZW0gKikoQVQ5MV9WQV9CQVNFX1VEUAorCQkJCQkrIEFUOTFfVURQX0NTUigwKSksCiAJCS5pbnRfbWFzawk9IDEgPDwgMCwKIAl9LAogCS5lcFsxXSA9IHsKQEAgLTE0NzksNyArMTQ5Nyw4IEBACiAJCS51ZGMJCT0gJmNvbnRyb2xsZXIsCiAJCS5pc19waW5ncG9uZwk9IDEsCiAJCS5tYXhwYWNrZXQJPSA2NCwKLQkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQICsgQVQ5MV9VRFBfQ1NSKDEpKSwKKwkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQCisJCQkJCSsgQVQ5MV9VRFBfQ1NSKDEpKSwKIAkJLmludF9tYXNrCT0gMSA8PCAxLAogCX0sCiAJLmVwWzJdID0gewpAQCAtMTQ5MCw3ICsxNTA5LDggQEAKIAkJLnVkYwkJPSAmY29udHJvbGxlciwKIAkJLmlzX3Bpbmdwb25nCT0gMSwKIAkJLm1heHBhY2tldAk9IDY0LAotCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAgKyBBVDkxX1VEUF9DU1IoMikpLAorCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAKKwkJCQkJKyBBVDkxX1VEUF9DU1IoMikpLAogCQkuaW50X21hc2sJPSAxIDw8IDIsCiAJfSwKIAkuZXBbM10gPSB7CkBAIC0xNTAxLDcgKzE1MjEsOCBAQAogCQl9LAogCQkudWRjCQk9ICZjb250cm9sbGVyLAogCQkubWF4cGFja2V0CT0gOCwKLQkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQICsgQVQ5MV9VRFBfQ1NSKDMpKSwKKwkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQCisJCQkJCSsgQVQ5MV9VRFBfQ1NSKDMpKSwKIAkJLmludF9tYXNrCT0gMSA8PCAzLAogCX0sCiAJLmVwWzRdID0gewpAQCAtMTUxMiw3ICsxNTMzLDggQEAKIAkJLnVkYwkJPSAmY29udHJvbGxlciwKIAkJLmlzX3Bpbmdwb25nCT0gMSwKIAkJLm1heHBhY2tldAk9IDI1NiwKLQkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQICsgQVQ5MV9VRFBfQ1NSKDQpKSwKKwkJLmNyZWcJCT0gKHZvaWQgX19pb21lbSAqKShBVDkxX1ZBX0JBU0VfVURQCisJCQkJCSsgQVQ5MV9VRFBfQ1NSKDQpKSwKIAkJLmludF9tYXNrCT0gMSA8PCA0LAogCX0sCiAJLmVwWzVdID0gewpAQCAtMTUyMywxMCArMTU0NSwxMSBAQAogCQkudWRjCQk9ICZjb250cm9sbGVyLAogCQkuaXNfcGluZ3BvbmcJPSAxLAogCQkubWF4cGFja2V0CT0gMjU2LAotCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAgKyBBVDkxX1VEUF9DU1IoNSkpLAorCQkuY3JlZwkJPSAodm9pZCBfX2lvbWVtICopKEFUOTFfVkFfQkFTRV9VRFAKKwkJCQkJKyBBVDkxX1VEUF9DU1IoNSkpLAogCQkuaW50X21hc2sJPSAxIDw8IDUsCiAJfSwKLQkvKiBlcDYgYW5kIGVwNyBhcmUgYWxzbyByZXNlcnZlZCAqLworCS8qIGVwNiBhbmQgZXA3IGFyZSBhbHNvIHJlc2VydmVkIChjdXN0b20gc2lsaWNvbiBtaWdodCB1c2UgdGhlbSkgKi8KIH07CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhdDkxX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKl91ZGMsIHN0cnVjdCBwdF9yZWdzICpyKQpAQCAtMTU5Myw2ICsxNjE2LDcgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJdWRjLT5lbmFibGVkID0gMDsKKwlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRFIsIH4wKTsKIAlwdWxsdXAodWRjLCAwKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKQEAgLTE2MjQsNiArMTY0OCwxNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKSB7CisJCURCRygiaW52YWxpZCBudW1fcmVzb3VyY2VzIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlpZiAoKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfTUVNKQorCQkJfHwgKHBkZXYtPnJlc291cmNlWzFdLmZsYWdzICE9IElPUkVTT1VSQ0VfSVJRKSkgeworCQlEQkcoImludmFsaWQgcmVzb3VyY2UgdHlwZSIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihBVDkxX0JBU0VfVURQLCBTWl8xNkssIGRyaXZlcl9uYW1lKSkgewogCQlEQkcoInNvbWVvbmUncyB1c2luZyBVREMgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTE2NDksMTkgKzE2ODMsMjYgQEAKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBmYWlsMDsKIAotCS8qIGRpc2FibGUgZXZlcnl0aGluZyB1bnRpbCB0aGVyZSdzIGEgZ2FkZ2V0IGRyaXZlciBhbmQgdmJ1cyAqLwotCXB1bGx1cCh1ZGMsIDApOworCS8qIGRvbid0IGRvIGFueXRoaW5nIHVudGlsIHdlIGhhdmUgYm90aCBnYWRnZXQgZHJpdmVyIGFuZCBWQlVTICovCisJY2xrX2VuYWJsZSh1ZGMtPmljbGspOworCWF0OTFfdWRwX3dyaXRlKEFUOTFfVURQX1RYVkMsIEFUOTFfVURQX1RYVkNfVFhWRElTKTsKKwlhdDkxX3VkcF93cml0ZShBVDkxX1VEUF9JRFIsIDB4ZmZmZmZmZmYpOworCWNsa19kaXNhYmxlKHVkYy0+aWNsayk7CiAKIAkvKiByZXF1ZXN0IFVEQyBhbmQgbWF5YmUgVkJVUyBpcnFzICovCi0JaWYgKHJlcXVlc3RfaXJxKEFUOTFfSURfVURQLCBhdDkxX3VkY19pcnEsIElSUUZfRElTQUJMRUQsIGRyaXZlcl9uYW1lLCB1ZGMpKSB7Ci0JCURCRygicmVxdWVzdCBpcnEgJWQgZmFpbGVkXG4iLCBBVDkxX0lEX1VEUCk7CisJdWRjLT51ZHBfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAocmVxdWVzdF9pcnEodWRjLT51ZHBfaXJxLCBhdDkxX3VkY19pcnEsCisJCQlJUlFGX0RJU0FCTEVELCBkcml2ZXJfbmFtZSwgdWRjKSkgeworCQlEQkcoInJlcXVlc3QgaXJxICVkIGZhaWxlZFxuIiwgdWRjLT51ZHBfaXJxKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGZhaWwxOwogCX0KIAlpZiAodWRjLT5ib2FyZC52YnVzX3BpbiA+IDApIHsKLQkJaWYgKHJlcXVlc3RfaXJxKHVkYy0+Ym9hcmQudmJ1c19waW4sIGF0OTFfdmJ1c19pcnEsIElSUUZfRElTQUJMRUQsIGRyaXZlcl9uYW1lLCB1ZGMpKSB7Ci0JCQlEQkcoInJlcXVlc3QgdmJ1cyBpcnEgJWQgZmFpbGVkXG4iLCB1ZGMtPmJvYXJkLnZidXNfcGluKTsKLQkJCWZyZWVfaXJxKEFUOTFfSURfVURQLCB1ZGMpOworCQlpZiAocmVxdWVzdF9pcnEodWRjLT5ib2FyZC52YnVzX3BpbiwgYXQ5MV92YnVzX2lycSwKKwkJCQlJUlFGX0RJU0FCTEVELCBkcml2ZXJfbmFtZSwgdWRjKSkgeworCQkJREJHKCJyZXF1ZXN0IHZidXMgaXJxICVkIGZhaWxlZFxuIiwKKwkJCQkJdWRjLT5ib2FyZC52YnVzX3Bpbik7CisJCQlmcmVlX2lycSh1ZGMtPnVkcF9pcnEsIHVkYyk7CiAJCQlyZXR2YWwgPSAtRUJVU1k7CiAJCQlnb3RvIGZhaWwxOwogCQl9CkBAIC0xNjcwLDYgKzE3MTEsNyBAQAogCQl1ZGMtPnZidXMgPSAxOwogCX0KIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB1ZGMpOworCWRldmljZV9pbml0X3dha2V1cChkZXYsIDEpOwogCWNyZWF0ZV9kZWJ1Z19maWxlKHVkYyk7CiAKIAlJTkZPKCIlcyB2ZXJzaW9uICVzXG4iLCBkcml2ZXJfbmFtZSwgRFJJVkVSX1ZFUlNJT04pOwpAQCAtMTY3OCwxNCArMTcyMCwxNCBAQAogZmFpbDE6CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CiBmYWlsMDoKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MV9WQV9CQVNFX1VEUCwgU1pfMTZLKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MV9CQVNFX1VEUCwgU1pfMTZLKTsKIAlEQkcoIiVzIHByb2JlIGZhaWxlZCwgJWRcbiIsIGRyaXZlcl9uYW1lLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGF0OTF1ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IGF0OTF1ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKIAlEQkcoInJlbW92ZVxuIik7CiAKQEAgLTE2OTQsMTAgKzE3MzYsMTEgQEAKIAlpZiAodWRjLT5kcml2ZXIgIT0gMCkKIAkJdXNiX2dhZGdldF91bnJlZ2lzdGVyX2RyaXZlcih1ZGMtPmRyaXZlcik7CiAKKwlkZXZpY2VfaW5pdF93YWtldXAoJnBkZXYtPmRldiwgMCk7CiAJcmVtb3ZlX2RlYnVnX2ZpbGUodWRjKTsKIAlpZiAodWRjLT5ib2FyZC52YnVzX3BpbiA+IDApCiAJCWZyZWVfaXJxKHVkYy0+Ym9hcmQudmJ1c19waW4sIHVkYyk7Ci0JZnJlZV9pcnEoQVQ5MV9JRF9VRFAsIHVkYyk7CisJZnJlZV9pcnEodWRjLT51ZHBfaXJxLCB1ZGMpOwogCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGMtPmdhZGdldC5kZXYpOwogCXJlbGVhc2VfbWVtX3JlZ2lvbihBVDkxX0JBU0VfVURQLCBTWl8xNkspOwogCkBAIC0xNzA4LDMxICsxNzUxLDM2IEBACiB9CiAKICNpZmRlZiBDT05GSUdfUE0KLXN0YXRpYyBpbnQgYXQ5MXVkY19zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCitzdGF0aWMgaW50IGF0OTF1ZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGF0OTFfdWRjICp1ZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpbnQJCXdha2UgPSB1ZGMtPmRyaXZlciAmJiBkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KTsKIAotCS8qCi0JICogVGhlICJzYWZlIiBzdXNwZW5kIHRyYW5zaXRpb25zIGFyZSBvcHBvcnR1bmlzdGljIC4uLiBlLmcuIHdoZW4KLQkgKiB0aGUgVVNCIGxpbmsgaXMgc3VzcGVuZGVkICg0OE1IeiBjbG9jayBhdXRvZ2F0ZWQgb2ZmKSwgb3Igd2hlbgotCSAqIGl0J3MgZGlzY29ubmVjdGVkIChwcm9ncmFtbWF0aWNhbGx5IGdhdGVkIG9mZiwgZWxzZXdoZXJlKS4KLQkgKiBUaGVuIHdlIGNhbiBzdXNwZW5kLCBhbmQgdGhlIGNoaXAgY2FuIGVudGVyIHNsb3cgY2xvY2sgbW9kZS4KLQkgKgotCSAqIFRoZSBwcm9ibGVtIGNhc2UgaXMgc29tZSBjb21wb25lbnQgKHVzZXIgbW9kZT8pIHN1c3BlbmRpbmcgdGhpcwotCSAqIGRldmljZSB3aGlsZSBpdCdzIGFjdGl2ZSwgd2l0aCB0aGUgNDggTUh6IGNsb2NrIGluIHVzZS4gIFRoZXJlCi0JICogYXJlIHR3byBiYXNpYyBhcHByb2FjaGVzOiAgKGEpIHZldG8gc3VzcGVuZCBsZXZlbHMgaW52b2x2aW5nIHNsb3cKLQkgKiBjbG9jayBtb2RlLCAoYikgZGlzY29ubmVjdCwgc28gNDggTUh6IHdpbGwgbm8gbG9uZ2VyIGJlIGluIHVzZQotCSAqIGFuZCB3ZSBjYW4gZW50ZXIgc2xvdyBjbG9jayBtb2RlLiAgVGhpcyB1c2VzIChiKSBmb3Igbm93LCBzaW5jZQotCSAqIGl0J3Mgc2ltcGxlc3QgdW50aWwgQVQ5MSBQTSBleGlzdHMgYW5kIHN1cHBvcnRzIHRoZSBvdGhlciBvcHRpb24uCisJLyogVW5sZXNzIHdlIGNhbiBhY3Qgbm9ybWFsbHkgdG8gdGhlIGhvc3QgKGxldHRpbmcgaXQgd2FrZSB1cyB1cAorCSAqIHdoZW5ldmVyIGl0IGhhcyB3b3JrIGZvciB1cykgZm9yY2UgZGlzY29ubmVjdC4gIFdha2V1cCByZXF1aXJlcworCSAqIFBMTEIgZm9yIFVTQiBldmVudHMgKHNpZ25hbGluZyBmb3IgcmVzZXQsIHdha2V1cCwgb3IgaW5jb21pbmcKKwkgKiB0b2tlbnMpIGFuZCBWQlVTIGlycXMgKG9uIHN5c3RlbXMgd2hpY2ggc3VwcG9ydCB0aGVtKS4KIAkgKi8KLQlpZiAodWRjLT52YnVzICYmICF1ZGMtPnN1c3BlbmRlZCkKKwlpZiAoKCF1ZGMtPnN1c3BlbmRlZCAmJiB1ZGMtPmFkZHIpCisJCQl8fCAhd2FrZQorCQkJfHwgYXQ5MV9zdXNwZW5kX2VudGVyaW5nX3Nsb3dfY2xvY2soKSkgewogCQlwdWxsdXAodWRjLCAwKTsKKwkJZGlzYWJsZV9pcnFfd2FrZSh1ZGMtPnVkcF9pcnEpOworCX0gZWxzZQorCQllbmFibGVfaXJxX3dha2UodWRjLT51ZHBfaXJxKTsKKworCWlmICh1ZGMtPmJvYXJkLnZidXNfcGluID4gMCkgeworCQlpZiAod2FrZSkKKwkJCWVuYWJsZV9pcnFfd2FrZSh1ZGMtPmJvYXJkLnZidXNfcGluKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnFfd2FrZSh1ZGMtPmJvYXJkLnZidXNfcGluKTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYXQ5MXVkY19yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBhdDkxdWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBhdDkxX3VkYyAqdWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgYXQ5MV91ZGMgKnVkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCiAJLyogbWF5YmUgcmVjb25uZWN0IHRvIGhvc3Q7IGlmIHNvLCBjbG9ja3Mgb24gKi8KIAlwdWxsdXAodWRjLCAxKTsKQEAgLTE3NDgsNyArMTc5Niw3IEBACiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChhdDkxdWRjX3JlbW92ZSksCiAJLnNodXRkb3duCT0gYXQ5MXVkY19zaHV0ZG93biwKIAkuc3VzcGVuZAk9IGF0OTF1ZGNfc3VzcGVuZCwKLQkucmVzdW1lIAk9IGF0OTF1ZGNfcmVzdW1lLAorCS5yZXN1bWUJCT0gYXQ5MXVkY19yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gKGNoYXIgKikgZHJpdmVyX25hbWUsCiAJCS5vd25lcgk9IFRISVNfTU9EVUxFLApAQCAtMTc2Nyw2ICsxODE1LDYgQEAKIH0KIG1vZHVsZV9leGl0KHVkY19leGl0X21vZHVsZSk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiQVQ5MVJNOTIwMCB1ZGMgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkFUOTEgdWRjIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiVGhvbWFzIFJhdGhib25lLCBEYXZpZCBCcm93bmVsbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaAppbmRleCA1YTQ3OTljLi44ODJhZjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuaApAQCAtMTQxLDYgKzE0MSw3IEBACiAJc3RydWN0IGNsawkJCSppY2xrLCAqZmNsazsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQkqcGRldjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJCSpwZGU7CisJaW50CQkJCXVkcF9pcnE7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhdDkxX3VkYyAqdG9fdWRjKHN0cnVjdCB1c2JfZ2FkZ2V0ICpnKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCmluZGV4IDRiZTQ3MTkuLjdkMWMyMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKQEAgLTYwOSw3ICs2MDksOCBAQAogCWlmICghZHVtLT5kcml2ZXIpCiAJCXJldHVybiAtRVNIVVRET1dOOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZkdW0tPmxvY2ssIGZsYWdzKTsKKwlsb2NhbF9pcnFfc2F2ZSAoZmxhZ3MpOworCXNwaW5fbG9jayAoJmR1bS0+bG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSAocmVxLCAmZXAtPnF1ZXVlLCBxdWV1ZSkgewogCQlpZiAoJnJlcS0+cmVxID09IF9yZXEpIHsKIAkJCWxpc3RfZGVsX2luaXQgKCZyZXEtPnF1ZXVlKTsKQEAgLTYxOCw3ICs2MTksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmR1bS0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrICgmZHVtLT5sb2NrKTsKIAogCWlmIChyZXR2YWwgPT0gMCkgewogCQlkZXZfZGJnICh1ZGNfZGV2KGR1bSksCkBAIC02MjYsNiArNjI3LDcgQEAKIAkJCQlyZXEsIF9lcC0+bmFtZSwgX3JlcS0+bGVuZ3RoLCBfcmVxLT5idWYpOwogCQlfcmVxLT5jb21wbGV0ZSAoX2VwLCBfcmVxKTsKIAl9CisJbG9jYWxfaXJxX3Jlc3RvcmUgKGZsYWdzKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZXRoZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCmluZGV4IDRmZTFiZWMuLjMwMjk5YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0xMTcsNiArMTE3LDggQEAKIAlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXAsICpvdXRfZXAsICpzdGF0dXNfZXA7CiAJY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yCiAJCQkJKmluLCAqb3V0LCAqc3RhdHVzOworCisJc3BpbmxvY2tfdAkJcmVxX2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl0eF9yZXFzLCByeF9yZXFzOwogCiAJc3RydWN0IG5ldF9kZXZpY2UJKm5ldDsKQEAgLTEwNjYsMjEgKzEwNjgsMzEgQEAKIAkgKi8KIAlpZiAoZGV2LT5pbikgewogCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5pbl9lcCk7CisJCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7CiAJCXdoaWxlIChsaWtlbHkgKCFsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkpIHsKIAkJCXJlcSA9IGNvbnRhaW5lcl9vZiAoZGV2LT50eF9yZXFzLm5leHQsCiAJCQkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOwogCQkJbGlzdF9kZWwgKCZyZXEtPmxpc3QpOworCisJCQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7CiAJCQl1c2JfZXBfZnJlZV9yZXF1ZXN0IChkZXYtPmluX2VwLCByZXEpOworCQkJc3Bpbl9sb2NrKCZkZXYtPnJlcV9sb2NrKTsKIAkJfQorCQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7CiAJfQogCWlmIChkZXYtPm91dCkgewogCQl1c2JfZXBfZGlzYWJsZSAoZGV2LT5vdXRfZXApOworCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwogCQl3aGlsZSAobGlrZWx5ICghbGlzdF9lbXB0eSAoJmRldi0+cnhfcmVxcykpKSB7CiAJCQlyZXEgPSBjb250YWluZXJfb2YgKGRldi0+cnhfcmVxcy5uZXh0LAogCQkJCQkJc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKIAkJCWxpc3RfZGVsICgmcmVxLT5saXN0KTsKKworCQkJc3Bpbl91bmxvY2soJmRldi0+cmVxX2xvY2spOwogCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdCAoZGV2LT5vdXRfZXAsIHJlcSk7CisJCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwogCQl9CisJCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKIAl9CiAKIAlpZiAoZGV2LT5zdGF0dXMpIHsKQEAgLTE2NTksOSArMTY3MSw5IEBACiAJaWYgKHJldHZhbCkgewogCQlERUJVRyAoZGV2LCAicnggc3VibWl0IC0tPiAlZFxuIiwgcmV0dmFsKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7Ci0JCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJCXNwaW5fbG9jaygmZGV2LT5yZXFfbG9jayk7CiAJCWxpc3RfYWRkICgmcmVxLT5saXN0LCAmZGV2LT5yeF9yZXFzKTsKLQkJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCQlzcGluX3VubG9jaygmZGV2LT5yZXFfbG9jayk7CiAJfQogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNzMwLDggKzE3NDIsOSBAQAogCQlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKIAlpZiAoIW5ldGlmX3J1bm5pbmcgKGRldi0+bmV0KSkgewogY2xlYW46Ci0JCS8qIG5vYm9keSByZWFkaW5nIHJ4X3JlcXMsIHNvIG5vIGRldi0+bG9jayAqLworCQlzcGluX2xvY2soJmRldi0+cmVxX2xvY2spOwogCQlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+cnhfcmVxcyk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKIAkJcmVxID0gTlVMTDsKIAl9CiAJaWYgKHJlcSkKQEAgLTE3ODIsMTUgKzE3OTUsMTggQEAKIHsKIAlpbnQgc3RhdHVzOwogCisJc3Bpbl9sb2NrKCZkZXYtPnJlcV9sb2NrKTsKIAlzdGF0dXMgPSBwcmVhbGxvYyAoJmRldi0+dHhfcmVxcywgZGV2LT5pbl9lcCwgbiwgZ2ZwX2ZsYWdzKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwogCXN0YXR1cyA9IHByZWFsbG9jICgmZGV2LT5yeF9yZXFzLCBkZXYtPm91dF9lcCwgbiwgZ2ZwX2ZsYWdzKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJZ290byBmYWlsOwotCXJldHVybiAwOworCWdvdG8gZG9uZTsKIGZhaWw6CiAJREVCVUcgKGRldiwgImNhbid0IGFsbG9jIHJlcXVlc3RzXG4iKTsKK2RvbmU6CisJc3Bpbl91bmxvY2soJmRldi0+cmVxX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTE4MDAsMjEgKzE4MTYsMjEgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIAogCS8qIGZpbGwgdW51c2VkIHJ4cSBzbG90cyB3aXRoIHNvbWUgc2tiICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOwogCXdoaWxlICghbGlzdF9lbXB0eSAoJmRldi0+cnhfcmVxcykpIHsKIAkJcmVxID0gY29udGFpbmVyX29mIChkZXYtPnJ4X3JlcXMubmV4dCwKIAkJCQlzdHJ1Y3QgdXNiX3JlcXVlc3QsIGxpc3QpOwogCQlsaXN0X2RlbF9pbml0ICgmcmVxLT5saXN0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CiAKIAkJaWYgKHJ4X3N1Ym1pdCAoZGV2LCByZXEsIGdmcF9mbGFncykgPCAwKSB7CiAJCQlkZWZlcl9rZXZlbnQgKGRldiwgV09SS19SWF9NRU1PUlkpOwogCQkJcmV0dXJuOwogCQl9CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+cmVxX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZXRoX3dvcmsgKHZvaWQgKl9kZXYpCkBAIC0xODQ4LDkgKzE4NjQsOSBAQAogCX0KIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAotCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CisJc3Bpbl9sb2NrKCZkZXYtPnJlcV9sb2NrKTsKIAlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7Ci0Jc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOworCXNwaW5fdW5sb2NrKCZkZXYtPnJlcV9sb2NrKTsKIAlkZXZfa2ZyZWVfc2tiX2FueSAoc2tiKTsKIAogCWF0b21pY19kZWMgKCZkZXYtPnR4X3FsZW4pOwpAQCAtMTg5NiwxMiArMTkxMiwxMiBAQAogCQkvKiBpZ25vcmVzIFVTQl9DRENfUEFDS0VUX1RZUEVfRElSRUNURUQgKi8KIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CiAJcmVxID0gY29udGFpbmVyX29mIChkZXYtPnR4X3JlcXMubmV4dCwgc3RydWN0IHVzYl9yZXF1ZXN0LCBsaXN0KTsKIAlsaXN0X2RlbCAoJnJlcS0+bGlzdCk7CiAJaWYgKGxpc3RfZW1wdHkgKCZkZXYtPnR4X3JlcXMpKQogCQluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CiAKIAkvKiBubyBidWZmZXIgY29waWVzIG5lZWRlZCwgdW5sZXNzIHRoZSBuZXR3b3JrIHN0YWNrIGRpZCBpdAogCSAqIG9yIHRoZSBoYXJkd2FyZSBjYW4ndCB1c2Ugc2tiIGJ1ZmZlcnMuCkBAIC0xOTU1LDExICsxOTcxLDExIEBACiBkcm9wOgogCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJZGV2X2tmcmVlX3NrYl9hbnkgKHNrYik7Ci0JCXNwaW5fbG9ja19pcnFzYXZlICgmZGV2LT5sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnJlcV9sb2NrLCBmbGFncyk7CiAJCWlmIChsaXN0X2VtcHR5ICgmZGV2LT50eF9yZXFzKSkKIAkJCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOwogCQlsaXN0X2FkZCAoJnJlcS0+bGlzdCwgJmRldi0+dHhfcmVxcyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5yZXFfbG9jaywgZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIzNzgsNiArMjM5NCw3IEBACiAJCXJldHVybiBzdGF0dXM7CiAJZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlzcGluX2xvY2tfaW5pdCAoJmRldi0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQgKCZkZXYtPnJlcV9sb2NrKTsKIAlJTklUX1dPUksgKCZkZXYtPndvcmssIGV0aF93b3JrLCBkZXYpOwogCUlOSVRfTElTVF9IRUFEICgmZGV2LT50eF9yZXFzKTsKIAlJTklUX0xJU1RfSEVBRCAoJmRldi0+cnhfcmVxcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKaW5kZXggODViMGI0YS4uZDYzMTc3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwpAQCAtODkyLDcgKzg5Miw3IEBACiAjZGVmaW5lCVBDSV9EUklWRVIJCWVoY2lfcGNpX2RyaXZlcgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfUFBDXzgzeHgKKyNpZmRlZiBDT05GSUdfTVBDODM0eAogI2luY2x1ZGUgImVoY2ktZnNsLmMiCiAjZGVmaW5lCVBMQVRGT1JNX0RSSVZFUgkJZWhjaV9mc2xfZHJpdmVyCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCmluZGV4IGNkYmFmYjcuLjg1Y2MwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYwpAQCAtNCw3ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQgU0FOIFBlb3BsZSAoUHR5KSBMdGQuCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IFRoaWJhdXQgVkFSRU5FIDx2YXJlbmV0QHBhcmlzYy1saW51eC5vcmc+CiAgKgotICogQVQ5MVJNOTIwMCBCdXMgR2x1ZQorICogQVQ5MSBCdXMgR2x1ZQogICoKICAqIEJhc2VkIG9uIGZyYWdtZW50cyBvZiAyLjQgZHJpdmVyIGJ5IFJpY2sgQnJvbnNvbi4KICAqIEJhc2VkIG9uIG9oY2ktb21hcC5jCkBAIC0xOSwxMiArMTksMTMgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogCi0jaWZuZGVmIENPTkZJR19BUkNIX0FUOTFSTTkyMDAKLSNlcnJvciAiQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCBtdXN0IGJlIGRlZmluZWQuIgorI2lmbmRlZiBDT05GSUdfQVJDSF9BVDkxCisjZXJyb3IgIkNPTkZJR19BUkNIX0FUOTEgbXVzdCBiZSBkZWZpbmVkLiIKICNlbmRpZgogCiAvKiBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uIGNsb2NrcyAqLwogc3RhdGljIHN0cnVjdCBjbGsgKmljbGssICpmY2xrOworc3RhdGljIGludCBjbG9ja2VkOwogCiBleHRlcm4gaW50IHVzYl9kaXNhYmxlZCh2b2lkKTsKIApAQCAtMzUsMTMgKzM2LDE0IEBACiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBvaGNpX3JlZ3MgX19pb21lbSAqcmVncyA9IGhjZC0+cmVnczsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgInN0YXJ0aW5nIEFUOTFSTTkyMDAgT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAic3RhcnRcbiIpOwogCiAJLyoKIAkgKiBTdGFydCB0aGUgVVNCIGNsb2Nrcy4KIAkgKi8KIAljbGtfZW5hYmxlKGljbGspOwogCWNsa19lbmFibGUoZmNsayk7CisJY2xvY2tlZCA9IDE7CiAKIAkvKgogCSAqIFRoZSBVU0IgaG9zdCBjb250cm9sbGVyIG11c3QgcmVtYWluIGluIHJlc2V0LgpAQCAtNTQsNyArNTYsNyBAQAogCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgb2hjaV9yZWdzIF9faW9tZW0gKnJlZ3MgPSBoY2QtPnJlZ3M7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdG9wcGluZyBBVDkxUk05MjAwIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCWRldl9kYmcoJnBkZXYtPmRldiwgInN0b3BcbiIpOwogCiAJLyoKIAkgKiBQdXQgdGhlIFVTQiBob3N0IGNvbnRyb2xsZXIgaW50byByZXNldC4KQEAgLTY2LDYgKzY4LDcgQEAKIAkgKi8KIAljbGtfZGlzYWJsZShmY2xrKTsKIAljbGtfZGlzYWJsZShpY2xrKTsKKwljbG9ja2VkID0gMDsKIH0KIAogCkBAIC03OCwxNCArODEsMTUgQEAKIAogCiAvKioKLSAqIHVzYl9oY2RfYXQ5MV9wcm9iZSAtIGluaXRpYWxpemUgQVQ5MVJNOTIwMC1iYXNlZCBIQ0RzCisgKiB1c2JfaGNkX2F0OTFfcHJvYmUgLSBpbml0aWFsaXplIEFUOTEtYmFzZWQgSENEcwogICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCiAgKgogICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKICAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CiAgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCiAgKi8KLWludCB1c2JfaGNkX2F0OTFfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiX2hjZF9hdDkxX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKKwkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IHJldHZhbDsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gTlVMTDsKQEAgLTk1LDEyICs5OSwxMyBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAoKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfTUVNKSB8fCAocGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpKSB7CisJaWYgKChwZGV2LT5yZXNvdXJjZVswXS5mbGFncyAhPSBJT1JFU09VUkNFX01FTSkKKwkJCXx8IChwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkpIHsKIAkJcHJfZGVidWcoImhjZCBwcm9iZTogaW52YWxpZCByZXNvdXJjZSB0eXBlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCAiYXQ5MXJtOTIwMCIpOworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKGRyaXZlciwgJnBkZXYtPmRldiwgImF0OTEiKTsKIAlpZiAoIWhjZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJaGNkLT5yc3JjX3N0YXJ0ID0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQ7CkBAIC0xNDksMjEgKzE1NCwyMyBAQAogLyogbWF5IGJlIGNhbGxlZCB3aXRoIGNvbnRyb2xsZXIsIGJ1cywgYW5kIGRldmljZXMgYWN0aXZlICovCiAKIC8qKgotICogdXNiX2hjZF9hdDkxX3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIEFUOTFSTTkyMDAtYmFzZWQgSENEcworICogdXNiX2hjZF9hdDkxX3JlbW92ZSAtIHNodXRkb3duIHByb2Nlc3NpbmcgZm9yIEFUOTEtYmFzZWQgSENEcwogICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyByZW1vdmVkCiAgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKICAqCiAgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfYXQ5MV9wcm9iZSgpLCBmaXJzdCBpbnZva2luZwogICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKLSAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKiBjb250ZXh0LCAicm1tb2QiIG9yIHNvbWV0aGluZyBzaW1pbGFyLgogICoKICAqLwotc3RhdGljIGludCB1c2JfaGNkX2F0OTFfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCB1c2JfaGNkX2F0OTFfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCWF0OTFfc3RvcF9oYyhwZGV2KTsKIAlpb3VubWFwKGhjZC0+cmVncyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CisJZGlzYWJsZV9pcnFfd2FrZShoY2QtPmlycSk7CiAKIAljbGtfcHV0KGZjbGspOwogCWNsa19wdXQoaWNsayk7CkBAIC0xNzgsMTkgKzE4NSwyMSBAQAogc3RhdGljIGludCBfX2RldmluaXQKIG9oY2lfYXQ5MV9zdGFydCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKLS8vCXN0cnVjdCBhdDkxX29oY2lfZGF0YQkqYm9hcmQgPSBoY2QtPnNlbGYuY29udHJvbGxlci0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgYXQ5MV91c2JoX2RhdGEJKmJvYXJkID0gaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCXN0cnVjdCB1c2JfZGV2aWNlCSpyb290ID0gaGNkLT5zZWxmLnJvb3RfaHViOwogCWludAkJCXJldDsKIAogCWlmICgocmV0ID0gb2hjaV9pbml0KG9oY2kpKSA8IDApCiAJCXJldHVybiByZXQ7CiAKKwlyb290LT5tYXhjaGlsZCA9IGJvYXJkLT5wb3J0czsKKwogCWlmICgocmV0ID0gb2hjaV9ydW4ob2hjaSkpIDwgMCkgewogCQllcnIoImNhbid0IHN0YXJ0ICVzIiwgaGNkLT5zZWxmLmJ1c19uYW1lKTsKIAkJb2hjaV9zdG9wKGhjZCk7CiAJCXJldHVybiByZXQ7CiAJfQotLy8JaGNkLT5zZWxmLnJvb3RfaHViLT5tYXhjaGlsZCA9IGJvYXJkLT5wb3J0czsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk4LDcgKzIwNyw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfYXQ5MV9oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0JCWhjZF9uYW1lLAotCS5wcm9kdWN0X2Rlc2MgPQkJIkFUOTFSTTkyMDAgT0hDSSIsCisJLnByb2R1Y3RfZGVzYyA9CQkiQVQ5MSBPSENJIiwKIAkuaGNkX3ByaXZfc2l6ZSA9CXNpemVvZihzdHJ1Y3Qgb2hjaV9oY2QpLAogCiAJLyoKQEAgLTI0MCwzMyArMjQ5LDU0IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgb2hjaV9oY2RfYXQ5MV9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiB1c2JfaGNkX2F0OTFfcHJvYmUoJm9oY2lfYXQ5MV9oY19kcml2ZXIsIGRldik7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOworCXJldHVybiB1c2JfaGNkX2F0OTFfcHJvYmUoJm9oY2lfYXQ5MV9oY19kcml2ZXIsIHBkZXYpOwogfQogCi1zdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG9oY2lfaGNkX2F0OTFfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXJldHVybiB1c2JfaGNkX2F0OTFfcmVtb3ZlKHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldiksIGRldik7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDApOworCXJldHVybiB1c2JfaGNkX2F0OTFfcmVtb3ZlKHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpLCBwZGV2KTsKIH0KIAogI2lmZGVmIENPTkZJR19QTQogCi0vKiBSRVZJU0lUIHN1c3BlbmQvcmVzdW1lIGxvb2sgInRvbyIgc2ltcGxlIGhlcmUgKi8KLQogc3RhdGljIGludAotb2hjaV9oY2RfYXQ5MV9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQorb2hjaV9oY2RfYXQ5MV9kcnZfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKLQljbGtfZGlzYWJsZShmY2xrKTsKLQljbGtfZGlzYWJsZShpY2xrKTsKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKKworCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJZW5hYmxlX2lycV93YWtlKGhjZC0+aXJxKTsKKwllbHNlCisJCWRpc2FibGVfaXJxX3dha2UoaGNkLT5pcnEpOworCisJLyoKKwkgKiBUaGUgaW50ZWdyYXRlZCB0cmFuc2NlaXZlcnMgc2VlbSB1bmFibGUgdG8gbm90aWNlIGRpc2Nvbm5lY3QsCisJICogcmVjb25uZWN0LCBvciB3YWtldXAgd2l0aG91dCB0aGUgNDggTUh6IGNsb2NrIGFjdGl2ZS4gIHNvIGZvcgorCSAqIGNvcnJlY3RuZXNzLCBhbHdheXMgZGlzY2FyZCBjb25uZWN0aW9uIHN0YXRlICh1c2luZyByZXNldCkuCisJICoKKwkgKiBSRVZJU0lUOiBzb21lIGJvYXJkcyB3aWxsIGJlIGFibGUgdG8gdHVybiBWQlVTIG9mZi4uLgorCSAqLworCWlmIChhdDkxX3N1c3BlbmRfZW50ZXJpbmdfc2xvd19jbG9jaygpKSB7CisJCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKKwkJY2xrX2Rpc2FibGUoZmNsayk7CisJCWNsa19kaXNhYmxlKGljbGspOworCQljbG9ja2VkID0gMDsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKLQljbGtfZW5hYmxlKGljbGspOwotCWNsa19lbmFibGUoZmNsayk7CisJaWYgKCFjbG9ja2VkKSB7CisJCWNsa19lbmFibGUoaWNsayk7CisJCWNsa19lbmFibGUoZmNsayk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzUsNyArMzA1LDcgQEAKICNkZWZpbmUgb2hjaV9oY2RfYXQ5MV9kcnZfcmVzdW1lICBOVUxMCiAjZW5kaWYKIAotTU9EVUxFX0FMSUFTKCJhdDkxcm05MjAwLW9oY2kiKTsKK01PRFVMRV9BTElBUygiYXQ5MV9vaGNpIik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9oY2lfaGNkX2F0OTFfZHJpdmVyID0gewogCS5wcm9iZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9wcm9iZSwKQEAgLTI4Myw3ICszMTMsNyBAQAogCS5zdXNwZW5kCT0gb2hjaV9oY2RfYXQ5MV9kcnZfc3VzcGVuZCwKIAkucmVzdW1lCQk9IG9oY2lfaGNkX2F0OTFfZHJ2X3Jlc3VtZSwKIAkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiYXQ5MXJtOTIwMC1vaGNpIiwKKwkJLm5hbWUJPSAiYXQ5MV9vaGNpIiwKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKaW5kZXggODIyOTE0ZS4uZjdhOTc1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwpAQCAtMTEwLDcgKzExMCw2IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwogCSI6IENsb2NrIHRvIFVTQiBob3N0IGhhcyBiZWVuIGVuYWJsZWQgXG4iKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBhdTF4eHhfc3RvcF9vaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IGFmZWY1YWMuLjk0ZDhjZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTkxMyw3ICs5MTMsNyBAQAogI2luY2x1ZGUgIm9oY2ktcHBjLXNvYy5jIgogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9BVDkxUk05MjAwCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9BVDkxUk05MjAwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX0FUOTFTQU05MjYxKQogI2luY2x1ZGUgIm9oY2ktYXQ5MS5jIgogI2VuZGlmCiAKQEAgLTkyNyw2ICs5MjcsNyBAQAogICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX1NPQ19BVTFYMDApIFwKICAgICAgIHx8IGRlZmluZWQgKENPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX1NPQykgXAogICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX0FSQ0hfQVQ5MVJNOTIwMCkgXAorICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX0FSQ0hfQVQ5MVNBTTkyNjEpIFwKIAkpCiAjZXJyb3IgIm1pc3NpbmcgYnVzIGdsdWUgZm9yIG9oY2ktaGNkIgogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLXEuYwppbmRleCBjOWQ3MmFjLi40MzFlOGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktcS5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1xLmMKQEAgLTM3Miw3ICszNzIsNyBAQAogCQkgKiBuZWVkIHRvIGNoYW5nZSBhbnkgdG9nZ2xlcyBpbiB0aGlzIFVSQiAqLwogCQl0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgdWhjaV90ZCwgbGlzdCk7CiAJCWlmICh0b2dnbGUgPiAxIHx8IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHRkKSkgPT0gdG9nZ2xlKSB7Ci0JCQl0ZCA9IGxpc3RfZW50cnkodXJicC0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgdWhjaV90ZCwKKwkJCXRkID0gbGlzdF9lbnRyeSh1cmJwLT50ZF9saXN0LnByZXYsIHN0cnVjdCB1aGNpX3RkLAogCQkJCQlsaXN0KTsKIAkJCXRvZ2dsZSA9IHVoY2lfdG9nZ2xlKHRkX3Rva2VuKHRkKSkgXiAxOwogCkBAIC05NDMsNyArOTQzLDkgQEAKIAkJCS8qIFdlIHJlY2VpdmVkIGEgc2hvcnQgcGFja2V0ICovCiAJCQlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCiAJCQkJcmV0ID0gLUVSRU1PVEVJTzsKLQkJCWVsc2UgaWYgKGN0cmxzdGF0ICYgVERfQ1RSTF9TUEQpCisKKwkJCS8qIEZpeHVwIG5lZWRlZCBvbmx5IGlmIHRoaXMgaXNuJ3QgdGhlIFVSQidzIGxhc3QgVEQgKi8KKwkJCWVsc2UgaWYgKCZ0ZC0+bGlzdCAhPSB1cmJwLT50ZF9saXN0LnByZXYpCiAJCQkJcmV0ID0gMTsKIAkJfQogCkBAIC0xMzQ2LDcgKzEzNDgsNyBAQAogCQl9CiAKIAkJdWhjaV9naXZlYmFja191cmIodWhjaSwgcWgsIHVyYiwgcmVncyk7Ci0JCWlmIChzdGF0dXMgPCAwKQorCQlpZiAoc3RhdHVzIDwgMCAmJiBxaC0+dHlwZSAhPSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKQogCQkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9hcHBsZXRvdWNoLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9hcHBsZXRvdWNoLmMKaW5kZXggOWUzZjEzOS4uMDQ0ZmFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYwpAQCAtNTk3LDkgKzU5Nyw5IEBACiAJaWYgKGRldikgewogCQl1c2Jfa2lsbF91cmIoZGV2LT51cmIpOwogCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShkZXYtPmlucHV0KTsKLQkJdXNiX2ZyZWVfdXJiKGRldi0+dXJiKTsKIAkJdXNiX2J1ZmZlcl9mcmVlKGRldi0+dWRldiwgZGV2LT5kYXRhbGVuLAogCQkJCWRldi0+ZGF0YSwgZGV2LT51cmItPnRyYW5zZmVyX2RtYSk7CisJCXVzYl9mcmVlX3VyYihkZXYtPnVyYik7CiAJCWtmcmVlKGRldik7CiAJfQogCXByaW50ayhLRVJOX0lORk8gImlucHV0OiBhcHBsZXRvdWNoIGRpc2Nvbm5lY3RlZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKaW5kZXggMDVkMmQ2MC4uMzcxOWZjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYwpAQCAtMTExLDE0ICsxMTEsMjggQEAKICNkZWZpbmUgTkFNRV9CVUZTSVpFICAgICAgODAgICAgLyogc2l6ZSBvZiBwcm9kdWN0IG5hbWUsIHBhdGggYnVmZmVycyAqLwogI2RlZmluZSBEQVRBX0JVRlNJWkUgICAgICA2MyAgICAvKiBzaXplIG9mIFVSQiBkYXRhIGJ1ZmZlcnMgKi8KIAorLyoKKyAqIER1cGxpY2F0ZSBldmVudCBmaWx0ZXJpbmcgdGltZS4KKyAqIFNlcXVlbnRpYWwsIGlkZW50aWNhbCBLSU5EX0ZJTFRFUkVEIGlucHV0cyB3aXRoIGxlc3MgdGhhbgorICogRklMVEVSX1RJTUUgbWlsbGlzZWNvbmRzIGJldHdlZW4gdGhlbSBhcmUgY29uc2lkZXJlZCBhcyByZXBlYXQKKyAqIGV2ZW50cy4gVGhlIGhhcmR3YXJlIGdlbmVyYXRlcyA1IGV2ZW50cyBmb3IgdGhlIGZpcnN0IGtleXByZXNzCisgKiBhbmQgd2UgaGF2ZSB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IGZvciBhbiBhY2N1cmF0ZSByZXBlYXQKKyAqIGJlaGF2aW91ci4KKyAqLworI2RlZmluZSBGSUxURVJfVElNRQk2MCAvKiBtc2VjICovCisKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNoYW5uZWxfbWFzazsKLW1vZHVsZV9wYXJhbShjaGFubmVsX21hc2ssIHVsb25nLCAwNDQ0KTsKK21vZHVsZV9wYXJhbShjaGFubmVsX21hc2ssIHVsb25nLCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoY2hhbm5lbF9tYXNrLCAiQml0bWFzayBvZiByZW1vdGUgY29udHJvbCBjaGFubmVscyB0byBpZ25vcmUiKTsKIAogc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJFbmFibGUgZXh0cmEgZGVidWcgbWVzc2FnZXMgYW5kIGluZm9ybWF0aW9uIik7CiAKK3N0YXRpYyBpbnQgcmVwZWF0X2ZpbHRlciA9IEZJTFRFUl9USU1FOworbW9kdWxlX3BhcmFtKHJlcGVhdF9maWx0ZXIsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlcGVhdF9maWx0ZXIsICJSZXBlYXQgZmlsdGVyIHRpbWUsIGRlZmF1bHQgPSA2MCBtc2VjIik7CisKICNkZWZpbmUgZGJnaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZykgZGV2X2luZm8oZGV2ICwgZm9ybWF0ICwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKICN1bmRlZiBlcnIKICNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgZm9ybWF0ICwgIyMgYXJnKQpAQCAtMTQzLDE5ICsxNTcsNiBAQAogc3RhdGljIGNoYXIgaW5pdDFbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCB9Owogc3RhdGljIGNoYXIgaW5pdDJbXSA9IHsgMHgwMSwgMHgwMCwgMHgyMCwgMHgxNCwgMHgyMCwgMHgyMCwgMHgyMCB9OwogCi0vKiBBY2NlbGVyYXRpb24gY3VydmUgZm9yIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkICovCi1zdGF0aWMgY29uc3QgY2hhciBhY2NlbFtdID0geyAxLCAyLCA0LCA2LCA5LCAxMywgMjAgfTsKLQotLyogRHVwbGljYXRlIGV2ZW50IGZpbHRlcmluZyB0aW1lLgotICogU2VxdWVudGlhbCwgaWRlbnRpY2FsIEtJTkRfRklMVEVSRUQgaW5wdXRzIHdpdGggbGVzcyB0aGFuCi0gKiBGSUxURVJfVElNRSBqaWZmaWVzIGJldHdlZW4gdGhlbSBhcmUgY29uc2lkZXJlZCBhcyByZXBlYXQKLSAqIGV2ZW50cy4gVGhlIGhhcmR3YXJlIGdlbmVyYXRlcyA1IGV2ZW50cyBmb3IgdGhlIGZpcnN0IGtleXByZXNzCi0gKiBhbmQgd2UgaGF2ZSB0byB0YWtlIHRoaXMgaW50byBhY2NvdW50IGZvciBhbiBhY2N1cmF0ZSByZXBlYXQKLSAqIGJlaGF2aW91ci4KLSAqIChIWiAvIDIwKSA9PSA1MCBtcyBhbmQgd29ya3Mgd2VsbCBmb3IgbWUuCi0gKi8KLSNkZWZpbmUgRklMVEVSX1RJTUUgKEhaIC8gMjApCi0KIHN0cnVjdCBhdGlfcmVtb3RlIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwpAQCAtNDEzLDYgKzQxNCw0MyBAQAogfQogCiAvKgorICoJYXRpX3JlbW90ZV9jb21wdXRlX2FjY2VsCisgKgorICogSW1wbGVtZW50cyBhY2NlbGVyYXRpb24gY3VydmUgZm9yIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkCisgKiBJZiBlbGFwc2VkIHRpbWUgc2luY2UgbGFzdCBldmVudCBpcyA+IDEvNCBzZWNvbmQsIHVzZXIgInN0b3BwZWQiLAorICogc28gcmVzZXQgYWNjZWxlcmF0aW9uLiBPdGhlcndpc2UsIHVzZXIgaXMgcHJvYmFibHkgaG9sZGluZyB0aGUgY29udHJvbAorICogcGFkIGRvd24sIHNvIHdlIGluY3JlYXNlIGFjY2VsZXJhdGlvbiwgcmFtcGluZyB1cCBvdmVyIHR3byBzZWNvbmRzIHRvCisgKiBhIG1heGltdW0gc3BlZWQuCisgKi8KK3N0YXRpYyBpbnQgYXRpX3JlbW90ZV9jb21wdXRlX2FjY2VsKHN0cnVjdCBhdGlfcmVtb3RlICphdGlfcmVtb3RlKQoreworCXN0YXRpYyBjb25zdCBjaGFyIGFjY2VsW10gPSB7IDEsIDIsIDQsIDYsIDksIDEzLCAyMCB9OworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlpbnQgYWNjOworCisJaWYgKHRpbWVfYWZ0ZXIobm93LCBhdGlfcmVtb3RlLT5vbGRfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjUwKSkpIHsKKwkJYWNjID0gMTsKKwkJYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgPSBub3c7CisJfQorCWVsc2UgaWYgKHRpbWVfYmVmb3JlKG5vdywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEyNSkpKQorCQlhY2MgPSBhY2NlbFswXTsKKwllbHNlIGlmICh0aW1lX2JlZm9yZShub3csIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyNTApKSkKKwkJYWNjID0gYWNjZWxbMV07CisJZWxzZSBpZiAodGltZV9iZWZvcmUobm93LCBhdGlfcmVtb3RlLT5hY2NfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSkpCisJCWFjYyA9IGFjY2VsWzJdOworCWVsc2UgaWYgKHRpbWVfYmVmb3JlKG5vdywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkKKwkJYWNjID0gYWNjZWxbM107CisJZWxzZSBpZiAodGltZV9iZWZvcmUobm93LCBhdGlfcmVtb3RlLT5hY2NfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMTUwMCkpKQorCQlhY2MgPSBhY2NlbFs0XTsKKwllbHNlIGlmICh0aW1lX2JlZm9yZShub3csIGF0aV9yZW1vdGUtPmFjY19qaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMDAwKSkpCisJCWFjYyA9IGFjY2VsWzVdOworCWVsc2UKKwkJYWNjID0gYWNjZWxbNl07CisKKwlyZXR1cm4gYWNjOworfQorCisvKgogICoJYXRpX3JlbW90ZV9yZXBvcnRfaW5wdXQKICAqLwogc3RhdGljIHZvaWQgYXRpX3JlbW90ZV9pbnB1dF9yZXBvcnQoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKQEAgLTQ2NSw5ICs1MDMsOSBAQAogCiAJaWYgKGF0aV9yZW1vdGVfdGJsW2luZGV4XS5raW5kID09IEtJTkRfRklMVEVSRUQpIHsKIAkJLyogRmlsdGVyIGR1cGxpY2F0ZSBldmVudHMgd2hpY2ggaGFwcGVuICJ0b28gY2xvc2UiIHRvZ2V0aGVyLiAqLwotCQlpZiAoKGF0aV9yZW1vdGUtPm9sZF9kYXRhWzBdID09IGRhdGFbMV0pICYmCi0JCQkoYXRpX3JlbW90ZS0+b2xkX2RhdGFbMV0gPT0gZGF0YVsyXSkgJiYKLQkJCXRpbWVfYmVmb3JlKGppZmZpZXMsIGF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzICsgRklMVEVSX1RJTUUpKSB7CisJCWlmIChhdGlfcmVtb3RlLT5vbGRfZGF0YVswXSA9PSBkYXRhWzFdICYmCisJCSAgICBhdGlfcmVtb3RlLT5vbGRfZGF0YVsxXSA9PSBkYXRhWzJdICYmCisJCSAgICB0aW1lX2JlZm9yZShqaWZmaWVzLCBhdGlfcmVtb3RlLT5vbGRfamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMocmVwZWF0X2ZpbHRlcikpKSB7CiAJCQlhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQrKzsKIAkJfSBlbHNlIHsKIAkJCWF0aV9yZW1vdGUtPnJlcGVhdF9jb3VudCA9IDA7CkBAIC00NzcsNzUgKzUxNSw2MSBAQAogCQlhdGlfcmVtb3RlLT5vbGRfZGF0YVsxXSA9IGRhdGFbMl07CiAJCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKIAotCQlpZiAoKGF0aV9yZW1vdGUtPnJlcGVhdF9jb3VudCA+IDApCi0JCSAgICAmJiAoYXRpX3JlbW90ZS0+cmVwZWF0X2NvdW50IDwgNSkpCisJCWlmIChhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQgPiAwICYmCisJCSAgICBhdGlfcmVtb3RlLT5yZXBlYXRfY291bnQgPCA1KQogCQkJcmV0dXJuOwogCiAKIAkJaW5wdXRfcmVncyhkZXYsIHJlZ3MpOwogCQlpbnB1dF9ldmVudChkZXYsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS50eXBlLAogCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmNvZGUsIDEpOworCQlpbnB1dF9zeW5jKGRldik7CiAJCWlucHV0X2V2ZW50KGRldiwgYXRpX3JlbW90ZV90YmxbaW5kZXhdLnR5cGUsCiAJCQlhdGlfcmVtb3RlX3RibFtpbmRleF0uY29kZSwgMCk7CiAJCWlucHV0X3N5bmMoZGV2KTsKIAotCQlyZXR1cm47Ci0JfQorCX0gZWxzZSB7CiAKLQkvKgotCSAqIE90aGVyIGV2ZW50IGtpbmRzIGFyZSBmcm9tIHRoZSBkaXJlY3Rpb25hbCBjb250cm9sIHBhZCwgYW5kIGhhdmUgYW4KLQkgKiBhY2NlbGVyYXRpb24gZmFjdG9yIGFwcGxpZWQgdG8gdGhlbS4gIFdpdGhvdXQgdGhpcyBhY2NlbGVyYXRpb24sIHRoZQotCSAqIGNvbnRyb2wgcGFkIGlzIG1vc3RseSB1bnVzYWJsZS4KLQkgKgotCSAqIElmIGVsYXBzZWQgdGltZSBzaW5jZSBsYXN0IGV2ZW50IGlzID4gMS80IHNlY29uZCwgdXNlciAic3RvcHBlZCIsCi0JICogc28gcmVzZXQgYWNjZWxlcmF0aW9uLiBPdGhlcndpc2UsIHVzZXIgaXMgcHJvYmFibHkgaG9sZGluZyB0aGUgY29udHJvbAotCSAqIHBhZCBkb3duLCBzbyB3ZSBpbmNyZWFzZSBhY2NlbGVyYXRpb24sIHJhbXBpbmcgdXAgb3ZlciB0d28gc2Vjb25kcyB0bwotCSAqIGEgbWF4aW11bSBzcGVlZC4gIFRoZSBhY2NlbGVyYXRpb24gY3VydmUgaXMgI2RlZmluZWQgYWJvdmUuCi0JICovCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgYXRpX3JlbW90ZS0+b2xkX2ppZmZpZXMgKyAoSFogPj4gMikpKSB7Ci0JCWFjYyA9IDE7Ci0JCWF0aV9yZW1vdGUtPmFjY19qaWZmaWVzID0gamlmZmllczsKLQl9Ci0JZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPj4gMykpKSAgYWNjID0gYWNjZWxbMF07Ci0JZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPj4gMikpKSAgYWNjID0gYWNjZWxbMV07Ci0JZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPj4gMSkpKSAgYWNjID0gYWNjZWxbMl07Ci0JZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyBIWikpICAgICAgICAgYWNjID0gYWNjZWxbM107Ci0JZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyBIWisoSFo+PjEpKSkgYWNjID0gYWNjZWxbNF07Ci0JZWxzZSBpZiAodGltZV9iZWZvcmUoamlmZmllcywgYXRpX3JlbW90ZS0+YWNjX2ppZmZpZXMgKyAoSFogPDwgMSkpKSAgYWNjID0gYWNjZWxbNV07Ci0JZWxzZSBhY2MgPSBhY2NlbFs2XTsKKwkJLyoKKwkJICogT3RoZXIgZXZlbnQga2luZHMgYXJlIGZyb20gdGhlIGRpcmVjdGlvbmFsIGNvbnRyb2wgcGFkLCBhbmQgaGF2ZSBhbgorCQkgKiBhY2NlbGVyYXRpb24gZmFjdG9yIGFwcGxpZWQgdG8gdGhlbS4gIFdpdGhvdXQgdGhpcyBhY2NlbGVyYXRpb24sIHRoZQorCQkgKiBjb250cm9sIHBhZCBpcyBtb3N0bHkgdW51c2FibGUuCisJCSAqLworCQlhY2MgPSBhdGlfcmVtb3RlX2NvbXB1dGVfYWNjZWwoYXRpX3JlbW90ZSk7CiAKLQlpbnB1dF9yZWdzKGRldiwgcmVncyk7Ci0Jc3dpdGNoIChhdGlfcmVtb3RlX3RibFtpbmRleF0ua2luZCkgewotCWNhc2UgS0lORF9BQ0NFTDoKLQkJaW5wdXRfZXZlbnQoZGV2LCBhdGlfcmVtb3RlX3RibFtpbmRleF0udHlwZSwKLQkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLAotCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLnZhbHVlICogYWNjKTsKLQkJYnJlYWs7Ci0JY2FzZSBLSU5EX0xVOgotCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIC1hY2MpOwotCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIC1hY2MpOwotCQlicmVhazsKLQljYXNlIEtJTkRfUlU6Ci0JCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgYWNjKTsKLQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCAtYWNjKTsKLQkJYnJlYWs7Ci0JY2FzZSBLSU5EX0xEOgotCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIC1hY2MpOwotCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIGFjYyk7Ci0JCWJyZWFrOwotCWNhc2UgS0lORF9SRDoKLQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCBhY2MpOwotCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1ksIGFjYyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRldl9kYmcoJmF0aV9yZW1vdGUtPmludGVyZmFjZS0+ZGV2LCAiYXRpX3JlbW90ZSBraW5kPSVkXG4iLAotCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQpOwotCX0KLQlpbnB1dF9zeW5jKGRldik7CisJCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKKwkJc3dpdGNoIChhdGlfcmVtb3RlX3RibFtpbmRleF0ua2luZCkgeworCQljYXNlIEtJTkRfQUNDRUw6CisJCQlpbnB1dF9ldmVudChkZXYsIGF0aV9yZW1vdGVfdGJsW2luZGV4XS50eXBlLAorCQkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS5jb2RlLAorCQkJCWF0aV9yZW1vdGVfdGJsW2luZGV4XS52YWx1ZSAqIGFjYyk7CisJCQlicmVhazsKKwkJY2FzZSBLSU5EX0xVOgorCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCAtYWNjKTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgLWFjYyk7CisJCQlicmVhazsKKwkJY2FzZSBLSU5EX1JVOgorCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9YLCBhY2MpOworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCAtYWNjKTsKKwkJCWJyZWFrOworCQljYXNlIEtJTkRfTEQ6CisJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1gsIC1hY2MpOworCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9ZLCBhY2MpOworCQkJYnJlYWs7CisJCWNhc2UgS0lORF9SRDoKKwkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWCwgYWNjKTsKKwkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfWSwgYWNjKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZygmYXRpX3JlbW90ZS0+aW50ZXJmYWNlLT5kZXYsICJhdGlfcmVtb3RlIGtpbmQ9JWRcbiIsCisJCQkJYXRpX3JlbW90ZV90YmxbaW5kZXhdLmtpbmQpOworCQl9CisJCWlucHV0X3N5bmMoZGV2KTsKIAotCWF0aV9yZW1vdGUtPm9sZF9qaWZmaWVzID0gamlmZmllczsKLQlhdGlfcmVtb3RlLT5vbGRfZGF0YVswXSA9IGRhdGFbMV07Ci0JYXRpX3JlbW90ZS0+b2xkX2RhdGFbMV0gPSBkYXRhWzJdOworCQlhdGlfcmVtb3RlLT5vbGRfamlmZmllcyA9IGppZmZpZXM7CisJCWF0aV9yZW1vdGUtPm9sZF9kYXRhWzBdID0gZGF0YVsxXTsKKwkJYXRpX3JlbW90ZS0+b2xkX2RhdGFbMV0gPSBkYXRhWzJdOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCmluZGV4IDhlYTljOTEuLmEyYzU2YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYwpAQCAtMTQxMSwxNyArMTQxMSw1NCBAQAogCQl3YXJuKCJ0aW1lb3V0IGluaXRpYWxpemluZyByZXBvcnRzIik7CiB9CiAKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HVENPCQkweDA3OGMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzkwCQkweDAwOTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMAkJMHgwMTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEJCTB4MDEwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAzCQkweDAxMDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNAkJMHgwMTA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUJCTB4MDEwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTA2CQkweDAxMDYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwNwkJMHgwMTA3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgJCTB4MDEwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAwCQkweDAyMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwMQkJMHgwMjAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIJCTB4MDIwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjAzCQkweDAyMDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNAkJMHgwMjA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUJCTB4MDIwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMjA2CQkweDAyMDYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzIwNwkJMHgwMjA3CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDAJCTB4MDMwMAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzAxCQkweDAzMDEKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwMgkJMHgwMzAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMJCTB4MDMwMworI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA0CQkweDAzMDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwNQkJMHgwMzA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYJCTB4MDMwNgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMzA3CQkweDAzMDcKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzMwOAkJMHgwMzA4CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18zMDkJCTB4MDMwOQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAwCQkweDA0MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwMQkJMHgwNDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDIJCTB4MDQwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNDAzCQkweDA0MDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzQwNAkJMHgwNDA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT180MDUJCTB4MDQwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAwCQkweDA1MDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwMQkJMHgwNTAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT181MDIJCTB4MDUwMgorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fNTAzCQkweDA1MDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzUwNAkJMHgwNTA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwCQkweDEwMDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDEJCTB4MTAwMQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwMgkJMHgxMDAyCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzCQkweDEwMDMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9HVENPXzEwMDQJCTB4MTAwNAorI2RlZmluZSBVU0JfREVWSUNFX0lEX0dUQ09fMTAwNQkJMHgxMDA1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2CQkweDEwMDYKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX1dBQ09NCQkweDA1NmEKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QRU5QQVJUTkVSCTB4MDAwMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFCTB4MDAxMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUwkweDAwMjAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9QTAkJMHgwMDMwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMgkweDAwNDAKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9WT0xJVE8JMHgwMDYwCi0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfV0FDT01fUFRVCQkweDAwMDMKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MzCTB4MDBCMAotI2RlZmluZSBVU0JfREVWSUNFX0lEX1dBQ09NX0NJTlRJUQkweDAwM0YKLSNkZWZpbmUgVVNCX0RFVklDRV9JRF9XQUNPTV9EVEYgICAgICAgICAweDAwQzAKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX0FDRUNBRAkJMHgwNDYwCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQUNFQ0FEX0ZMQUlSCTB4MDAwNApAQCAtMTU4OCw2ICsxNjI1LDUxIEBACiAJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF84XzhfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfUE9XRVJNQVRFLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0dSSUZGSU4sIFVTQl9ERVZJQ0VfSURfU09VTkRLTk9CLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT185MCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDEsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzEwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMTA3LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDgsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18yMDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzIwNiwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMjA3LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwMSwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDMsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzA1LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDYsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzMwNywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fMzA4LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18zMDksIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzQwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNDAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzQwMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNDA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT180MDUsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzUwMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNTAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT181MDIsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR1RDTywgVVNCX0RFVklDRV9JRF9HVENPXzUwMywgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fNTA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAxLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAyLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDAzLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA0LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA1LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dUQ08sIFVTQl9ERVZJQ0VfSURfR1RDT18xMDA2LCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0tCR0VBUiwgVVNCX0RFVklDRV9JRF9LQkdFQVJfSkFNU1RVRElPLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZLCBISURfUVVJUktfSUdOT1JFIH0sCkBAIC0xNjE3LDQ5ICsxNjk5LDYgQEAKIAl7IFVTQl9WRU5ET1JfSURfVkVSTklFUiwgVVNCX0RFVklDRV9JRF9WRVJOSUVSX0dPVEVNUCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfU0tJUCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfQ1lDTE9QUywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QRU5QQVJUTkVSLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9HUkFQSElSRSArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fR1JBUEhJUkUgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgMSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9JTlRVT1MgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUyArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TICsgNCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1BMICsgNywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9QTCArIDgsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUEwgKyA5LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAyLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA1LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzIgKyA3LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1ZPTElUTywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9WT0xJVE8gKyAxLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX1ZPTElUTyArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fVk9MSVRPICsgMywgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9WT0xJVE8gKyA0LCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0dSQVBISVJFICsgNSwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9HUkFQSElSRSArIDYsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fUFRVLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0lOVFVPUzMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDEsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDIsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDMsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDQsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fSU5UVU9TMyArIDUsIEhJRF9RVUlSS19JR05PUkUgfSwKLQl7IFVTQl9WRU5ET1JfSURfV0FDT00sIFVTQl9ERVZJQ0VfSURfV0FDT01fQ0lOVElRLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX1dBQ09NLCBVU0JfREVWSUNFX0lEX1dBQ09NX0RURiwgSElEX1FVSVJLX0lHTk9SRSB9LAotCXsgVVNCX1ZFTkRPUl9JRF9XQUNPTSwgVVNCX0RFVklDRV9JRF9XQUNPTV9EVEYgKyAzLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18yMCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfWUVBTElOSywgVVNCX0RFVklDRV9JRF9ZRUFMSU5LX1AxS19QNEtfQjJLLCBISURfUVVJUktfSUdOT1JFIH0sCkBAIC0xNzc4LDYgKzE4MTcsMTAgQEAKIAljaGFyICpyZGVzYzsKIAlpbnQgbiwgbGVuLCBpbnNpemUgPSAwOwogCisgICAgICAgIC8qIElnbm9yZSBhbGwgV2Fjb20gZGV2aWNlcyAqLworICAgICAgICBpZiAoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yID09IFVTQl9WRU5ET1JfSURfV0FDT00pCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisKIAlmb3IgKG4gPSAwOyBoaWRfYmxhY2tsaXN0W25dLmlkVmVuZG9yOyBuKyspCiAJCWlmICgoaGlkX2JsYWNrbGlzdFtuXS5pZFZlbmRvciA9PSBsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpKSAmJgogCQkJKGhpZF9ibGFja2xpc3Rbbl0uaWRQcm9kdWN0ID09IGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1pbnB1dC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKaW5kZXggMDI4ZTFhZC4uNzIwODgzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkLWlucHV0LmMKQEAgLTYwNyw3ICs2MDcsOCBAQAogCiAJfQogCi0JaWYgKHVzYWdlLT5oYXRfbWluIDwgdXNhZ2UtPmhhdF9tYXggfHwgdXNhZ2UtPmhhdF9kaXIpIHsKKwlpZiAodXNhZ2UtPnR5cGUgPT0gRVZfQUJTICYmCisJICAgICh1c2FnZS0+aGF0X21pbiA8IHVzYWdlLT5oYXRfbWF4IHx8IHVzYWdlLT5oYXRfZGlyKSkgewogCQlpbnQgaTsKIAkJZm9yIChpID0gdXNhZ2UtPmNvZGU7IGkgPCB1c2FnZS0+Y29kZSArIDIgJiYgaSA8PSBtYXg7IGkrKykgewogCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXQsIGksIC0xLCAxLCAwLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jIGIvZHJpdmVycy91c2IvaW5wdXQvaGlkZGV2LmMKaW5kZXggNzA0NzdmMC4uZjZiODM5YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCkBAIC00OSw3ICs0OSw3IEBACiAJaW50IG9wZW47CiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKIAlzdHJ1Y3QgaGlkX2RldmljZSAqaGlkOwotCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiB9OwogCiBzdHJ1Y3QgaGlkZGV2X2xpc3QgewpAQCAtNTksNyArNTksNyBAQAogCXVuc2lnbmVkIGZsYWdzOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiAJc3RydWN0IGhpZGRldiAqaGlkZGV2OwotCXN0cnVjdCBoaWRkZXZfbGlzdCAqbmV4dDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiB9OwogCiBzdGF0aWMgc3RydWN0IGhpZGRldiAqaGlkZGV2X3RhYmxlW0hJRERFVl9NSU5PUlNdOwpAQCAtNzMsMTIgKzczLDE1IEBACiBzdGF0aWMgc3RydWN0IGhpZF9yZXBvcnQgKgogaGlkZGV2X2xvb2t1cF9yZXBvcnQoc3RydWN0IGhpZF9kZXZpY2UgKmhpZCwgc3RydWN0IGhpZGRldl9yZXBvcnRfaW5mbyAqcmluZm8pCiB7Ci0JdW5zaWduZWQgZmxhZ3MgPSByaW5mby0+cmVwb3J0X2lkICYgfkhJRF9SRVBPUlRfSURfTUFTSzsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSByaW5mby0+cmVwb3J0X2lkICYgfkhJRF9SRVBPUlRfSURfTUFTSzsKKwl1bnNpZ25lZCBpbnQgcmlkID0gcmluZm8tPnJlcG9ydF9pZCAmIEhJRF9SRVBPUlRfSURfTUFTSzsKIAlzdHJ1Y3QgaGlkX3JlcG9ydF9lbnVtICpyZXBvcnRfZW51bTsKKwlzdHJ1Y3QgaGlkX3JlcG9ydCAqcmVwb3J0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKIAlpZiAocmluZm8tPnJlcG9ydF90eXBlIDwgSElEX1JFUE9SVF9UWVBFX01JTiB8fAotCSAgICByaW5mby0+cmVwb3J0X3R5cGUgPiBISURfUkVQT1JUX1RZUEVfTUFYKSByZXR1cm4gTlVMTDsKKwkgICAgcmluZm8tPnJlcG9ydF90eXBlID4gSElEX1JFUE9SVF9UWVBFX01BWCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlyZXBvcnRfZW51bSA9IGhpZC0+cmVwb3J0X2VudW0gKwogCQkocmluZm8tPnJlcG9ydF90eXBlIC0gSElEX1JFUE9SVF9UWVBFX01JTik7CkBAIC04OCwyMSArOTEsMjUgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEhJRF9SRVBPUlRfSURfRklSU1Q6Ci0JCWxpc3QgPSByZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QubmV4dDsKLQkJaWYgKGxpc3QgPT0gJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCkKKwkJaWYgKGxpc3RfZW1wdHkoJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCkpCiAJCQlyZXR1cm4gTlVMTDsKLQkJcmluZm8tPnJlcG9ydF9pZCA9ICgoc3RydWN0IGhpZF9yZXBvcnQgKikgbGlzdCktPmlkOworCisJCWxpc3QgPSByZXBvcnRfZW51bS0+cmVwb3J0X2xpc3QubmV4dDsKKwkJcmVwb3J0ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJCXJpbmZvLT5yZXBvcnRfaWQgPSByZXBvcnQtPmlkOwogCQlicmVhazsKIAogCWNhc2UgSElEX1JFUE9SVF9JRF9ORVhUOgotCQlsaXN0ID0gKHN0cnVjdCBsaXN0X2hlYWQgKikKLQkJCXJlcG9ydF9lbnVtLT5yZXBvcnRfaWRfaGFzaFtyaW5mby0+cmVwb3J0X2lkICYgSElEX1JFUE9SVF9JRF9NQVNLXTsKLQkJaWYgKGxpc3QgPT0gTlVMTCkKKwkJcmVwb3J0ID0gcmVwb3J0X2VudW0tPnJlcG9ydF9pZF9oYXNoW3JpZF07CisJCWlmICghcmVwb3J0KQogCQkJcmV0dXJuIE5VTEw7Ci0JCWxpc3QgPSBsaXN0LT5uZXh0OworCisJCWxpc3QgPSByZXBvcnQtPmxpc3QubmV4dDsKIAkJaWYgKGxpc3QgPT0gJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCkKIAkJCXJldHVybiBOVUxMOwotCQlyaW5mby0+cmVwb3J0X2lkID0gKChzdHJ1Y3QgaGlkX3JlcG9ydCAqKSBsaXN0KS0+aWQ7CisKKwkJcmVwb3J0ID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgaGlkX3JlcG9ydCwgbGlzdCk7CisJCXJpbmZvLT5yZXBvcnRfaWQgPSByZXBvcnQtPmlkOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC0xMjUsMTIgKzEzMiwxMyBAQAogCXN0cnVjdCBoaWRfZmllbGQgKmZpZWxkOwogCiAJaWYgKHVyZWYtPnJlcG9ydF90eXBlIDwgSElEX1JFUE9SVF9UWVBFX01JTiB8fAotCSAgICB1cmVmLT5yZXBvcnRfdHlwZSA+IEhJRF9SRVBPUlRfVFlQRV9NQVgpIHJldHVybiBOVUxMOworCSAgICB1cmVmLT5yZXBvcnRfdHlwZSA+IEhJRF9SRVBPUlRfVFlQRV9NQVgpCisJCXJldHVybiBOVUxMOwogCiAJcmVwb3J0X2VudW0gPSBoaWQtPnJlcG9ydF9lbnVtICsKIAkJKHVyZWYtPnJlcG9ydF90eXBlIC0gSElEX1JFUE9SVF9UWVBFX01JTik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCwgbGlzdCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcG9ydCwgJnJlcG9ydF9lbnVtLT5yZXBvcnRfbGlzdCwgbGlzdCkgewogCQlmb3IgKGkgPSAwOyBpIDwgcmVwb3J0LT5tYXhmaWVsZDsgaSsrKSB7CiAJCQlmaWVsZCA9IHJlcG9ydC0+ZmllbGRbaV07CiAJCQlmb3IgKGogPSAwOyBqIDwgZmllbGQtPm1heHVzYWdlOyBqKyspIHsKQEAgLTE0Miw2ICsxNTAsNyBAQAogCQkJCX0KIAkJCX0KIAkJfQorCX0KIAogCXJldHVybiBOVUxMOwogfQpAQCAtMTUwLDkgKzE1OSw5IEBACiAJCQkgICAgICBzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAqdXJlZikKIHsKIAlzdHJ1Y3QgaGlkZGV2ICpoaWRkZXYgPSBoaWQtPmhpZGRldjsKLQlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBoaWRkZXYtPmxpc3Q7CisJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0OwogCi0Jd2hpbGUgKGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpc3QsICZoaWRkZXYtPmxpc3QsIG5vZGUpIHsKIAkJaWYgKHVyZWYtPmZpZWxkX2luZGV4ICE9IEhJRF9GSUVMRF9JTkRFWF9OT05FIHx8CiAJCSAgICAobGlzdC0+ZmxhZ3MgJiBISURERVZfRkxBR19SRVBPUlQpICE9IDApIHsKIAkJCWxpc3QtPmJ1ZmZlcltsaXN0LT5oZWFkXSA9ICp1cmVmOwpAQCAtMTYwLDggKzE2OSw2IEBACiAJCQkJKEhJRERFVl9CVUZGRVJfU0laRSAtIDEpOwogCQkJa2lsbF9mYXN5bmMoJmxpc3QtPmZhc3luYywgU0lHSU8sIFBPTExfSU4pOwogCQl9Ci0KLQkJbGlzdCA9IGxpc3QtPm5leHQ7CiAJfQogCiAJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZoaWRkZXYtPndhaXQpOwpAQCAtMTgwLDcgKzE4Nyw3IEBACiAJdXJlZi5yZXBvcnRfdHlwZSA9CiAJICAodHlwZSA9PSBISURfSU5QVVRfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9JTlBVVCA6CiAJICAoKHR5cGUgPT0gSElEX09VVFBVVF9SRVBPUlQpID8gSElEX1JFUE9SVF9UWVBFX09VVFBVVCA6Ci0JICAgKCh0eXBlID09IEhJRF9GRUFUVVJFX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfRkVBVFVSRTowKSk7CisJICAgKCh0eXBlID09IEhJRF9GRUFUVVJFX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfRkVBVFVSRSA6IDApKTsKIAl1cmVmLnJlcG9ydF9pZCA9IGZpZWxkLT5yZXBvcnQtPmlkOwogCXVyZWYuZmllbGRfaW5kZXggPSBmaWVsZC0+aW5kZXg7CiAJdXJlZi51c2FnZV9pbmRleCA9ICh1c2FnZSAtIGZpZWxkLT51c2FnZSk7CkBAIC0yMDAsNyArMjA3LDcgQEAKIAl1cmVmLnJlcG9ydF90eXBlID0KIAkgICh0eXBlID09IEhJRF9JTlBVVF9SRVBPUlQpID8gSElEX1JFUE9SVF9UWVBFX0lOUFVUIDoKIAkgICgodHlwZSA9PSBISURfT1VUUFVUX1JFUE9SVCkgPyBISURfUkVQT1JUX1RZUEVfT1VUUFVUIDoKLQkgICAoKHR5cGUgPT0gSElEX0ZFQVRVUkVfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9GRUFUVVJFOjApKTsKKwkgICAoKHR5cGUgPT0gSElEX0ZFQVRVUkVfUkVQT1JUKSA/IEhJRF9SRVBPUlRfVFlQRV9GRUFUVVJFIDogMCkpOwogCXVyZWYucmVwb3J0X2lkID0gcmVwb3J0LT5pZDsKIAl1cmVmLmZpZWxkX2luZGV4ID0gSElEX0ZJRUxEX0lOREVYX05PTkU7CiAKQEAgLTIxMyw3ICsyMjAsOSBAQAogewogCWludCByZXR2YWw7CiAJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCiAJcmV0dmFsID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZsaXN0LT5mYXN5bmMpOworCiAJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwogfQogCkBAIC0yMjQsMTQgKzIzMyw5IEBACiBzdGF0aWMgaW50IGhpZGRldl9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7CiAJc3RydWN0IGhpZGRldl9saXN0ICpsaXN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBoaWRkZXZfbGlzdCAqKmxpc3RwdHI7CiAKLQlsaXN0cHRyID0gJmxpc3QtPmhpZGRldi0+bGlzdDsKIAloaWRkZXZfZmFzeW5jKC0xLCBmaWxlLCAwKTsKLQotCXdoaWxlICgqbGlzdHB0ciAmJiAoKmxpc3RwdHIgIT0gbGlzdCkpCi0JCWxpc3RwdHIgPSAmKCgqbGlzdHB0ciktPm5leHQpOwotCSpsaXN0cHRyID0gKCpsaXN0cHRyKS0+bmV4dDsKKwlsaXN0X2RlbCgmbGlzdC0+bm9kZSk7CiAKIAlpZiAoIS0tbGlzdC0+aGlkZGV2LT5vcGVuKSB7CiAJCWlmIChsaXN0LT5oaWRkZXYtPmV4aXN0KQpAQCAtMjQ4LDcgKzI1Miw4IEBACiAvKgogICogb3BlbiBmaWxlIG9wCiAgKi8KLXN0YXRpYyBpbnQgaGlkZGV2X29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSkgeworc3RhdGljIGludCBoaWRkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3Q7CiAKIAlpbnQgaSA9IGltaW5vcihpbm9kZSkgLSBISURERVZfTUlOT1JfQkFTRTsKQEAgLTI2MCw5ICsyNjUsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWxpc3QtPmhpZGRldiA9IGhpZGRldl90YWJsZVtpXTsKLQlsaXN0LT5uZXh0ID0gaGlkZGV2X3RhYmxlW2ldLT5saXN0OwotCWhpZGRldl90YWJsZVtpXS0+bGlzdCA9IGxpc3Q7Ci0KKwlsaXN0X2FkZF90YWlsKCZsaXN0LT5ub2RlLCAmaGlkZGV2X3RhYmxlW2ldLT5saXN0KTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBsaXN0OwogCiAJaWYgKCFsaXN0LT5oaWRkZXYtPm9wZW4rKykKQEAgLTM2Miw2ICszNjUsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBoaWRkZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlzdHJ1Y3QgaGlkZGV2X2xpc3QgKmxpc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKIAlwb2xsX3dhaXQoZmlsZSwgJmxpc3QtPmhpZGRldi0+d2FpdCwgd2FpdCk7CiAJaWYgKGxpc3QtPmhlYWQgIT0gbGlzdC0+dGFpbCkKIAkJcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CkBAIC0zODIsNyArMzg2LDcgQEAKIAlzdHJ1Y3QgaGlkZGV2X2NvbGxlY3Rpb25faW5mbyBjaW5mbzsKIAlzdHJ1Y3QgaGlkZGV2X3JlcG9ydF9pbmZvIHJpbmZvOwogCXN0cnVjdCBoaWRkZXZfZmllbGRfaW5mbyBmaW5mbzsKLQlzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZl9tdWx0aSAqdXJlZl9tdWx0aT1OVUxMOworCXN0cnVjdCBoaWRkZXZfdXNhZ2VfcmVmX211bHRpICp1cmVmX211bHRpID0gTlVMTDsKIAlzdHJ1Y3QgaGlkZGV2X3VzYWdlX3JlZiAqdXJlZjsKIAlzdHJ1Y3QgaGlkZGV2X2RldmluZm8gZGluZm87CiAJc3RydWN0IGhpZF9yZXBvcnQgKnJlcG9ydDsKQEAgLTc2NCwxNSArNzY4LDE1IEBACiAJfQogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmaGlkZGV2LT53YWl0KTsKLQotCWhpZGRldl90YWJsZVtoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OwotCisJSU5JVF9MSVNUX0hFQUQoJmhpZGRldi0+bGlzdCk7CiAJaGlkZGV2LT5oaWQgPSBoaWQ7CiAJaGlkZGV2LT5leGlzdCA9IDE7CiAKIAloaWQtPm1pbm9yID0gaGlkLT5pbnRmLT5taW5vcjsKIAloaWQtPmhpZGRldiA9IGhpZGRldjsKIAorCWhpZGRldl90YWJsZVtoaWQtPmludGYtPm1pbm9yIC0gSElEREVWX01JTk9SX0JBU0VdID0gaGlkZGV2OworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2J0b3VjaHNjcmVlbi5jCmluZGV4IDNiMTc1YWEuLmEzMzhiZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYwpAQCAtMjg2LDcgKzI4Niw3IEBACiBzdGF0aWMgaW50IGl0bV9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKIHsKIAkqeCA9ICgocGt0WzBdICYgMHgxRikgPDwgNykgfCAocGt0WzNdICYgMHg3Rik7Ci0JKnggPSAoKHBrdFsxXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFs0XSAmIDB4N0YpOworCSp5ID0gKChwa3RbMV0gJiAweDFGKSA8PCA3KSB8IChwa3RbNF0gJiAweDdGKTsKIAkqcHJlc3MgPSAoKHBrdFsyXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFs1XSAmIDB4N0YpOwogCSp0b3VjaCA9IH5wa3RbN10gJiAweDIwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC95ZWFsaW5rLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC95ZWFsaW5rLmMKaW5kZXggNTc1YTRlNi4uN2I0NWZkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuYwpAQCAtODEwLDEyICs4MTAsOSBAQAogCWlmICh5bGQgPT0gTlVMTCkKIAkJcmV0dXJuIGVycjsKIAotICAgICAgICBpZiAoeWxkLT51cmJfaXJxKSB7Ci0JCXVzYl9raWxsX3VyYih5bGQtPnVyYl9pcnEpOwotCQl1c2JfZnJlZV91cmIoeWxkLT51cmJfaXJxKTsKLQl9Ci0gICAgICAgIGlmICh5bGQtPnVyYl9jdGwpCi0JCXVzYl9mcmVlX3VyYih5bGQtPnVyYl9jdGwpOworCXVzYl9raWxsX3VyYih5bGQtPnVyYl9pcnEpOwkvKiBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpbiBjb3JlL3VyYiAqLworCXVzYl9raWxsX3VyYih5bGQtPnVyYl9jdGwpOwkvKiBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpbiBjb3JlL3VyYiAqLworCiAgICAgICAgIGlmICh5bGQtPmlkZXYpIHsKIAkJaWYgKGVycikKIAkJCWlucHV0X2ZyZWVfZGV2aWNlKHlsZC0+aWRldik7CkBAIC04MzEsNiArODI4LDkgQEAKIAlpZiAoeWxkLT5pcnFfZGF0YSkKIAkJdXNiX2J1ZmZlcl9mcmVlKHlsZC0+dWRldiwgVVNCX1BLVF9MRU4sCiAJCQkJeWxkLT5pcnFfZGF0YSwgeWxkLT5pcnFfZG1hKTsKKworCXVzYl9mcmVlX3VyYih5bGQtPnVyYl9pcnEpOwkvKiBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpbiBjb3JlL3VyYiAqLworCXVzYl9mcmVlX3VyYih5bGQtPnVyYl9jdGwpOwkvKiBwYXJhbWV0ZXIgdmFsaWRhdGlvbiBpbiBjb3JlL3VyYiAqLwogCWtmcmVlKHlsZCk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYyBiL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYwppbmRleCBlMDkxZDMyLi45YzQ2NzQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCkBAIC0xMiw4ICsxMiwxMyBAQAogKgl0aGUgc2luZ2xlIEkvTyBwb3J0cyBvZiB0aGUgZGV2aWNlLgogKgogKglTdXBwb3J0ZWQgdmVuZG9yczoJQUsgTW9kdWwtQnVzIENvbXB1dGVyIEdtYkgKLSoJU3VwcG9ydGVkIGRldmljZXM6CUNZN0M2MzAwMUEtUEMgKHRvIGJlIGNvbnRpbnVlZC4uLikKLSoJU3VwcG9ydGVkIGZ1bmN0aW9uczoJUmVhZC9Xcml0ZSBQb3J0cyAodG8gYmUgY29udGludWVkLi4uKQorKgkJCQkoRmlybXdhcmUgIlBvcnQtQ2hpcCIpCisqCisqCVN1cHBvcnRlZCBkZXZpY2VzOglDWTdDNjMwMDFBLVBDCisqCQkJCUNZN0M2MzAwMUMtUFhDCisqCQkJCUNZN0M2MzAwMUMtU1hDCisqCisqCVN1cHBvcnRlZCBmdW5jdGlvbnM6CVJlYWQvV3JpdGUgUG9ydHMKICoKICoKICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMjAzLDcgKzIwOCw3IEBACiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbml0aWFsaXplIGl0ICovCiAJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewotCQlkZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwgIk91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5IVxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IDczOGJkN2MuLmUxNjU4MmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0zNDM1LDYgKzM0MzUsOCBAQAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2lzdXNiX3RhYmxlIFtdID0gewogCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkwMCkgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA5MDEpIH0sCisJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwOTAyKSB9LAogCXsgVVNCX0RFVklDRSgweDE4MmQsIDB4MDIxYykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxODJkLCAweDAyNjkpIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYnRlc3QuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCmluZGV4IDc4NmUxZGIuLjk4M2UxMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jCkBAIC0xMjQyLDExICsxMjQyLDEyIEBACiBzdGF0aWMgaW50IGN0cmxfb3V0IChzdHJ1Y3QgdXNidGVzdF9kZXYgKmRldiwKIAkJdW5zaWduZWQgY291bnQsIHVuc2lnbmVkIGxlbmd0aCwgdW5zaWduZWQgdmFyeSkKIHsKLQl1bnNpZ25lZAkJaSwgaiwgbGVuLCByZXR2YWw7CisJdW5zaWduZWQJCWksIGosIGxlbjsKKwlpbnQJCQlyZXR2YWw7CiAJdTgJCQkqYnVmOwogCWNoYXIJCQkqd2hhdCA9ICI/IjsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKLQkKKwogCWlmIChsZW5ndGggPCAxIHx8IGxlbmd0aCA+IDB4ZmZmZiB8fCB2YXJ5ID49IGxlbmd0aCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmggYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5oCmluZGV4IGE1NDc1MmMuLjAwNjQzODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmgKKysrIGIvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuaApAQCAtMTMxLDYgKzEzMSw3IEBACiAjZGVmaW5lCVZFTkRPUl9DT1JFR0EJCTB4MDdhYQogI2RlZmluZQlWRU5ET1JfRExJTksJCTB4MjAwMQogI2RlZmluZQlWRU5ET1JfRUxDT04JCTB4MGRiNworI2RlZmluZQlWRU5ET1JfRUxFQ09NCQkweDA1NmUKICNkZWZpbmUJVkVORE9SX0VMU0EJCTB4MDVjYwogI2RlZmluZQlWRU5ET1JfR0lHQUJZVEUJCTB4MTA0NAogI2RlZmluZQlWRU5ET1JfSEFXS0lORwkJMHgwZTY2CkBAIC0yMzMsNiArMjM0LDggQEAKIAkJREVGQVVMVF9HUElPX1JFU0VUICkKIFBFR0FTVVNfREVWKCAiR09MRFBGRUlMIFVTQiBBZGFwdGVyIiwgVkVORE9SX0VMQ09OLCAweDAwMDIsCiAJCURFRkFVTFRfR1BJT19SRVNFVCB8IFBFR0FTVVNfSUkgfCBIQVNfSE9NRV9QTkEgKQorUEVHQVNVU19ERVYoICJFTEVDT00gVVNCIEV0aGVybmV0IExELVVTQjIwIiwgVkVORE9SX0VMRUNPTSwgIDB4NDAxMCwKKwkJREVGQVVMVF9HUElPX1JFU0VUICB8IFBFR0FTVVNfSUkgKQogUEVHQVNVU19ERVYoICJFYXNpRG9jayBFdGhlcm5ldCIsIFZFTkRPUl9NT0JJTElUWSwgMHgwMzA0LAogCQlERUZBVUxUX0dQSU9fUkVTRVQgKQogUEVHQVNVU19ERVYoICJFbHNhIE1pY29saW5rIFVTQjJFdGhlcm5ldCIsIFZFTkRPUl9FTFNBLCAweDMwMDAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwppbmRleCBlNWU2ZTRmLi5hNzI2ODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKQEAgLTE3NSw2ICsxNzUsOCBAQAogc3RhdGljIHZvaWQgcnRsODE1MF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIHN0YXRpYyBpbnQgcnRsODE1MF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCSAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCk7CitzdGF0aWMgaW50IHJ0bDgxNTBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpOworc3RhdGljIGludCBydGw4MTUwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lIFtdID0gInJ0bDgxNTAiOwogCkBAIC0xODMsNiArMTg1LDggQEAKIAkucHJvYmUgPQlydGw4MTUwX3Byb2JlLAogCS5kaXNjb25uZWN0ID0JcnRsODE1MF9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9CXJ0bDgxNTBfdGFibGUsCisJLnN1c3BlbmQgPQlydGw4MTUwX3N1c3BlbmQsCisJLnJlc3VtZSA9CXJ0bDgxNTBfcmVzdW1lCiB9OwogCiAvKgpAQCAtMjM4LDkgKzI0MiwxMSBAQAogCXVzYl9maWxsX2NvbnRyb2xfdXJiKGRldi0+Y3RybF91cmIsIGRldi0+dWRldiwKIAkJCSB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKGNoYXIgKikgJmRldi0+ZHIsCiAJCQkgJmRldi0+cnhfY3JlZywgc2l6ZSwgY3RybF9jYWxsYmFjaywgZGV2KTsKLQlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkKKwlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgeworCQlpZiAocmV0ID09IC1FTk9ERVYpCisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKIAkJZXJyKCJjb250cm9sIHJlcXVlc3Qgc3VibWlzc2lvbiBmYWlsZWQ6ICVkIiwgcmV0KTsKLQllbHNlCisJfSBlbHNlCiAJCXNldF9iaXQoUlhfUkVHX1NFVCwgJmRldi0+ZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKQEAgLTQxNiw2ICs0MjIsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKIAl1MTYgcnhfc3RhdDsKKwlpbnQgc3RhdHVzOwogCiAJZGV2ID0gdXJiLT5jb250ZXh0OwogCWlmICghZGV2KQpAQCAtNDY1LDcgKzQ3MiwxMCBAQAogZ29vbjoKIAl1c2JfZmlsbF9idWxrX3VyYihkZXYtPnJ4X3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2YnVsa3BpcGUoZGV2LT51ZGV2LCAxKSwKIAkJICAgICAgZGV2LT5yeF9za2ItPmRhdGEsIFJUTDgxNTBfTVRVLCByZWFkX2J1bGtfY2FsbGJhY2ssIGRldik7Ci0JaWYgKHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfQVRPTUlDKSkgeworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoc3RhdHVzID09IC1FTk9ERVYpCisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOworCWVsc2UgaWYgKHN0YXR1cykgewogCQlzZXRfYml0KFJYX1VSQl9GQUlMLCAmZGV2LT5mbGFncyk7CiAJCWdvdG8gcmVzY2hlZDsKIAl9IGVsc2UgewpAQCAtNDgxLDYgKzQ5MSw3IEBACiB7CiAJcnRsODE1MF90ICpkZXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgc3RhdHVzOwogCiAJZGV2ID0gKHJ0bDgxNTBfdCAqKWRhdGE7CiAKQEAgLTQ5OSwxMCArNTEwLDEzIEBACiAJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT5yeF91cmIsIGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCiAJCSAgICAgIGRldi0+cnhfc2tiLT5kYXRhLCBSVEw4MTUwX01UVSwgcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOwogdHJ5X2FnYWluOgotCWlmICh1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0FUT01JQykpIHsKKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihkZXYtPnJ4X3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cyA9PSAtRU5PREVWKSB7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2LT5uZXRkZXYpOworCX0gZWxzZSBpZiAoc3RhdHVzKSB7CiAJCXNldF9iaXQoUlhfVVJCX0ZBSUwsICZkZXYtPmZsYWdzKTsKIAkJZ290byB0bHNjaGVkOwotCSB9IGVsc2UgeworCX0gZWxzZSB7CiAJCWNsZWFyX2JpdChSWF9VUkJfRkFJTCwgJmRldi0+ZmxhZ3MpOwogCX0KIApAQCAtNTc0LDEyICs1ODgsNDMgQEAKIAogcmVzdWJtaXQ6CiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgU0xBQl9BVE9NSUMpOwotCWlmIChzdGF0dXMpCisJaWYgKHN0YXR1cyA9PSAtRU5PREVWKQorCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKKwllbHNlIGlmIChzdGF0dXMpCiAJCWVyciAoImNhbid0IHJlc3VibWl0IGludHIsICVzLSVzL2lucHV0MCwgc3RhdHVzICVkIiwKIAkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCiAJCQkJZGV2LT51ZGV2LT5kZXZwYXRoLCBzdGF0dXMpOwogfQogCitzdGF0aWMgaW50IHJ0bDgxNTBfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJcnRsODE1MF90ICpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhkZXYtPm5ldGRldikpIHsKKwkJdXNiX2tpbGxfdXJiKGRldi0+cnhfdXJiKTsKKwkJdXNiX2tpbGxfdXJiKGRldi0+aW50cl91cmIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBydGw4MTUwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlydGw4MTUwX3QgKmRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwluZXRpZl9kZXZpY2VfYXR0YWNoKGRldi0+bmV0ZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhkZXYtPm5ldGRldikpIHsKKwkJZGV2LT5yeF91cmItPnN0YXR1cyA9IDA7CisJCWRldi0+cnhfdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJcmVhZF9idWxrX2NhbGxiYWNrKGRldi0+cnhfdXJiLCBOVUxMKTsKKworCQlkZXYtPmludHJfdXJiLT5zdGF0dXMgPSAwOworCQlkZXYtPmludHJfdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJaW50cl9jYWxsYmFjayhkZXYtPmludHJfdXJiLCBOVUxMKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAKIC8qCiAqKgpAQCAtNjkwLDkgKzczNSwxNCBAQAogCXVzYl9maWxsX2J1bGtfdXJiKGRldi0+dHhfdXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIDIpLAogCQkgICAgICBza2ItPmRhdGEsIGNvdW50LCB3cml0ZV9idWxrX2NhbGxiYWNrLCBkZXYpOwogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT50eF91cmIsIEdGUF9BVE9NSUMpKSkgewotCQl3YXJuKCJmYWlsZWQgdHhfdXJiICVkXG4iLCByZXMpOwotCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCQkvKiBDYW4gd2UgZ2V0L2hhbmRsZSBFUElQRSBoZXJlPyAqLworCQlpZiAocmVzID09IC1FTk9ERVYpCisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKKwkJZWxzZSB7CisJCQl3YXJuKCJmYWlsZWQgdHhfdXJiICVkXG4iLCByZXMpOworCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJCX0KIAl9IGVsc2UgewogCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKQEAgLTcyOSwxNiArNzc5LDI1IEBACiAJCiAJdXNiX2ZpbGxfYnVsa191cmIoZGV2LT5yeF91cmIsIGRldi0+dWRldiwgdXNiX3JjdmJ1bGtwaXBlKGRldi0+dWRldiwgMSksCiAJCSAgICAgIGRldi0+cnhfc2tiLT5kYXRhLCBSVEw4MTUwX01UVSwgcmVhZF9idWxrX2NhbGxiYWNrLCBkZXYpOwotCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5yeF91cmIsIEdGUF9LRVJORUwpKSkKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+cnhfdXJiLCBHRlBfS0VSTkVMKSkpIHsKKwkJaWYgKHJlcyA9PSAtRU5PREVWKQorCQkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYtPm5ldGRldik7CiAJCXdhcm4oIiVzOiByeF91cmIgc3VibWl0IGZhaWxlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHJlcyk7CisJCXJldHVybiByZXM7CisJfQogCXVzYl9maWxsX2ludF91cmIoZGV2LT5pbnRyX3VyYiwgZGV2LT51ZGV2LCB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsIDMpLAogCQkgICAgIGRldi0+aW50cl9idWZmLCBJTlRCVUZTSVpFLCBpbnRyX2NhbGxiYWNrLAogCQkgICAgIGRldiwgZGV2LT5pbnRyX2ludGVydmFsKTsKLQlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50cl91cmIsIEdGUF9LRVJORUwpKSkKKwlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50cl91cmIsIEdGUF9LRVJORUwpKSkgeworCQlpZiAocmVzID09IC1FTk9ERVYpCisJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldi0+bmV0ZGV2KTsKIAkJd2FybigiJXM6IGludHJfdXJiIHN1Ym1pdCBmYWlsZWQ6ICVkIiwgX19GVU5DVElPTl9fLCByZXMpOwotCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisJCXVzYl9raWxsX3VyYihkZXYtPnJ4X3VyYik7CisJCXJldHVybiByZXM7CisJfQogCWVuYWJsZV9uZXRfdHJhZmZpYyhkZXYpOwogCXNldF9jYXJyaWVyKG5ldGRldik7CisJbmV0aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKIAogCXJldHVybiByZXM7CiB9CkBAIC05MTMsNiArOTcyLDcgQEAKIAlpZiAoZGV2KSB7CiAJCXNldF9iaXQoUlRMODE1MF9VTlBMVUcsICZkZXYtPmZsYWdzKTsKIAkJdGFza2xldF9kaXNhYmxlKCZkZXYtPnRsKTsKKwkJdGFza2xldF9raWxsKCZkZXYtPnRsKTsKIAkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2LT5uZXRkZXYpOwogCQl1bmxpbmtfYWxsX3VyYnMoZGV2KTsKIAkJZnJlZV9hbGxfdXJicyhkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwppbmRleCBhYzMzYmQ0Li5mNWI5NDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvS2NvbmZpZwpAQCAtNjIsMTUgKzYyLDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFpcnByaW1lLgogCi1jb25maWcgVVNCX1NFUklBTF9BTllEQVRBCi0JdHJpc3RhdGUgIlVTQiBBbnlEYXRhIENETUEgV2lyZWxlc3MgRHJpdmVyIgotCWRlcGVuZHMgb24gVVNCX1NFUklBTAotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIGEgQW55RGF0YSBDRE1BIGRldmljZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYW55ZGF0YS4KLQogY29uZmlnIFVTQl9TRVJJQUxfQVJLMzExNgogCXRyaXN0YXRlICJVU0IgQVJLIE1pY3JvIDMxMTYgVVNCIFNlcmlhbCBEcml2ZXIgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBVU0JfU0VSSUFMICYmIEVYUEVSSU1FTlRBTApAQCAtNTAyLDE1ICs0OTMsMTggQEAKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrZXlzcGFuX3BkYS4KIAogY29uZmlnIFVTQl9TRVJJQUxfT1BUSU9OCi0JdHJpc3RhdGUgIlVTQiBkcml2ZXIgZm9yIEdTTSBtb2RlbXMiCisJdHJpc3RhdGUgIlVTQiBkcml2ZXIgZm9yIEdTTSBhbmQgQ0RNQSBtb2RlbXMiCiAJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCiAJaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhbiAiT3B0aW9uIiBHU00gUENNQ0lBIGNhcmQKLQkgIChvciBhbiBPRU0gdmVyc2lvbjogYnJhbmRlZCBIdWF3ZWksIEF1ZGlvdm94LCBvciBOb3ZhdGVsKS4KKwkgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBHU00gb3IgQ0RNQSBtb2RlbSB0aGF0J3MgY29ubmVjdGVkIHRvIFVTQi4KIAotCSAgVGhlc2UgY2FyZHMgZmVhdHVyZSBhIGJ1aWx0LWluIE9IQ0ktVVNCIGFkYXB0ZXIgYW5kIGFuCi0JICBpbnRlcm5hbGx5LWNvbm5lY3RlZCBHU00gbW9kZW0uIFRoZSBVU0IgYnVzIGlzIG5vdAotCSAgYWNjZXNzaWJsZSBleHRlcm5hbGx5LgorCSAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBzZXZlcmFsIFBDTUNJQSBjYXJkcyB3aGljaCBoYXZlIGEKKwkgIGJ1aWx0LWluIE9IQ0ktVVNCIGFkYXB0ZXIgYW5kIGFuIGludGVybmFsbHktY29ubmVjdGVkIEdTTSBtb2RlbS4KKwkgIFRoZSBVU0IgYnVzIG9uIHRoZXNlIGNhcmRzIGlzIG5vdCBhY2Nlc3NpYmxlIGV4dGVybmFsbHkuCisKKwkgIFN1cHBvcnRlZCBkZXZpY2VzIGluY2x1ZGUgKHNvbWUgb2Y/KSB0aG9zZSBtYWRlIGJ5OgorCSAgT3B0aW9uLCBIdWF3ZWksIEF1ZGlvdm94LCBTaWVycmEgV2lyZWxlc3MsIE5vdmF0ZWwgV2lyZWxlc3MsIG9yCisJICBBbnlkYXRhLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvcHRpb24uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKaW5kZXggMzVkNGFjYy4uOGVmZWQyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpAQCAtMTIsNyArMTIsNiBAQAogdXNic2VyaWFsLW9ianMJOj0gdXNiLXNlcmlhbC5vIGdlbmVyaWMubyBidXMubyAkKHVzYnNlcmlhbC1vYmoteSkKIAogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQUlSUFJJTUUpCQkrPSBhaXJwcmltZS5vCi1vYmotJChDT05GSUdfVVNCX1NFUklBTF9BTllEQVRBKQkJKz0gYW55ZGF0YS5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9BUkszMTE2KQkJKz0gYXJrMzExNi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9CRUxLSU4pCQkJKz0gYmVsa2luX3NhLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0NQMjEwMSkJCQkrPSBjcDIxMDEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FueWRhdGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hbnlkYXRhLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxODQzZWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FueWRhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQW55RGF0YSBDRE1BIFNlcmlhbCBVU0IgZHJpdmVyCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQHN1c2UuZGU+Ci0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbgotICoJMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0gewotCXsgVVNCX0RFVklDRSgweDE2ZDUsIDB4NjUwMSkgfSwJLyogQWlyRGF0YSBDRE1BIGRldmljZSAqLwotCXsgfSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi0vKiBpZiBvdmVycmlkZGVuIGJ5IHRoZSB1c2VyLCB0aGVuIHVzZSB0aGVpciB2YWx1ZSBmb3IgdGhlIHNpemUgb2YgdGhlCi0gKiByZWFkIGFuZCB3cml0ZSB1cmJzICovCi1zdGF0aWMgaW50IGJ1ZmZlcl9zaXplOwotc3RhdGljIGludCBkZWJ1ZzsKLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFueWRhdGFfZHJpdmVyID0gewotCS5uYW1lID0JCSJhbnlkYXRhIiwKLQkucHJvYmUgPQl1c2Jfc2VyaWFsX3Byb2JlLAotCS5kaXNjb25uZWN0ID0JdXNiX3NlcmlhbF9kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9CWlkX3RhYmxlLAotCS5ub19keW5hbWljX2lkID0gCTEsCi19OwotCi1zdGF0aWMgaW50IGFueWRhdGFfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQljaGFyICpidWZmZXI7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKLQotCWlmIChidWZmZXJfc2l6ZSkgewotCQkvKiBvdmVycmlkZSB0aGUgZGVmYXVsdCBidWZmZXIgc2l6ZXMgKi8KLQkJYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghYnVmZmVyKSB7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlrZnJlZSAocG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcik7Ci0JCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBidWZmZXI7Ci0JCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX3NpemU7Ci0KLQkJYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghYnVmZmVyKSB7Ci0JCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAotCQkJCV9fRlVOQ1RJT05fXyk7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCQlrZnJlZSAocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOwotCQlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciA9IGJ1ZmZlcjsKLQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYnVmZmVyX3NpemU7Ci0JCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBidWZmZXJfc2l6ZTsKLQl9Ci0KLQkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwotCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKLQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJCSAgCSAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCSAgdXNiX3NlcmlhbF9nZW5lcmljX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwotCWlmIChyZXN1bHQpCi0JCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgYW55ZGF0YV9kZXZpY2UgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm93bmVyID0JVEhJU19NT0RVTEUsCi0JCS5uYW1lID0JCSJhbnlkYXRhIiwKLQl9LAotCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKLQkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCi0JLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCi0JLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAotCS5udW1fcG9ydHMgPQkJMSwKLQkub3BlbiA9CQkJYW55ZGF0YV9vcGVuLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYW55ZGF0YV9pbml0KHZvaWQpCi17Ci0JaW50IHJldHZhbDsKLQotCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJmFueWRhdGFfZGV2aWNlKTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmYW55ZGF0YV9kcml2ZXIpOwotCWlmIChyZXR2YWwpCi0JCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYW55ZGF0YV9kZXZpY2UpOwotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBhbnlkYXRhX2V4aXQodm9pZCkKLXsKLQl1c2JfZGVyZWdpc3RlcigmYW55ZGF0YV9kcml2ZXIpOwotCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYW55ZGF0YV9kZXZpY2UpOwotfQotCi1tb2R1bGVfaW5pdChhbnlkYXRhX2luaXQpOwotbW9kdWxlX2V4aXQoYW55ZGF0YV9leGl0KTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKLW1vZHVsZV9wYXJhbShidWZmZXJfc2l6ZSwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoYnVmZmVyX3NpemUsICJTaXplIG9mIHRoZSB0cmFuc2ZlciBidWZmZXJzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCmluZGV4IGI0NThhZWQuLmM2MTE1YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5jCkBAIC0zMDYsNiArMzA2LDggQEAKIAogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfY29tYmluZWQgW10gPSB7CisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FNQzIzMl9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0NBTlVTQl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0FDVFpXQVZFX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfSVJUUkFOU19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX0lQTFVTX1BJRCkgfSwKQEAgLTMzNyw2ICszMzksNyBAQAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9NVFhPUkJfNl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BFUkxFX1VMVFJBUE9SVF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1BJRUdST1VQX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVE5DX1hfUElEKSB9LAogCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDFfUElEKSB9LAogCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDJfUElEKSB9LAogCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIxMDNfUElEKSB9LApAQCAtNTAzLDYgKzUwNiw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1lFSV9TRVJWT0NFTlRFUjMxX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEhPUkxBQlNfUElEKSB9LAogCXsgVVNCX0RFVklDRShURVNUT19WSUQsIFRFU1RPX1VTQl9JTlRFUkZBQ0VfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9HQU1NQV9TQ09VVF9QSUQpIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKaW5kZXggMDRlZjkwZi4uNzcyOTk5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmgKQEAgLTMyLDYgKzMyLDEyIEBACiAjZGVmaW5lIEZURElfTkZfUklDX1BJRAkweDAwMDEJLyogUHJvZHVjdCBJZCAqLwogCiAKKy8qIHd3dy5jYW51c2IuY29tIExhd2ljZWwgQ0FOVVNCIGRldmljZSAqLworI2RlZmluZSBGVERJX0NBTlVTQl9QSUQgMHhGRkE4IC8qIFByb2R1Y3QgSWQgKi8KKworLyogQWxwaGFNaWNybyBDb21wb25lbnRzIEFNQy0yMzJVU0IwMSBkZXZpY2UgKi8KKyNkZWZpbmUgRlRESV9BTUMyMzJfUElEIDB4RkYwMCAvKiBQcm9kdWN0IElkICovCisKIC8qIEFDVCBTb2x1dGlvbnMgSG9tZVBybyBaV2F2ZSBpbnRlcmZhY2UgKGh0dHA6Ly93d3cuYWN0LXNvbHV0aW9ucy5jb20vSG9tZVByby5odG0pICovCiAjZGVmaW5lIEZURElfQUNUWldBVkVfUElECTB4RjJEMAogCkBAIC0xODIsNiArMTg4LDEwIEBACiAvKiBodHRwOi8vaG9tZS5lYXJ0aGxpbmsubmV0L35qcmhlZXMvVVNCVUlSVC9pbmRleC5odG0gKi8KICNkZWZpbmUgRlRESV9VU0JfVUlSVF9QSUQJMHhGODUwCS8qIFByb2R1Y3QgSWQgKi8KIAorLyogVE5DLVggVVNCLXRvLXBhY2tldC1yYWRpbyBhZGFwdGVyLCB2ZXJzaW9ucyBwcmlvciB0byAzLjAgKERMUCBtb2R1bGUpICovCisKKyNkZWZpbmUgRlRESV9UTkNfWF9QSUQJCTB4RUJFMAorCiAvKgogICogRUxWIFVTQiBkZXZpY2VzIHN1Ym1pdHRlZCBieSBDaHJpc3RpYW4gQWJ0IG9mIEVMViAod3d3LmVsdi5kZSkuCiAgKiBBbGwgb2YgdGhlc2UgZGV2aWNlcyB1c2UgRlRESSdzIHZlbmRvciBJRCAoMHgwNDAzKS4KQEAgLTQ1Nyw2ICs0NjcsMTEgQEAKICNkZWZpbmUgVEVTVE9fVklECQkJMHgxMjhECiAjZGVmaW5lIFRFU1RPX1VTQl9JTlRFUkZBQ0VfUElECQkweDAwMDEKIAorLyoKKyAqIEdhbW1hIFNjb3V0IChodHRwOi8vZ2FtbWEtc2NvdXQuY29tLykuIFN1Ym1pdHRlZCBieSByc2NAcnVudHV4LmNvbS4KKyAqLworI2RlZmluZSBGVERJX0dBTU1BX1NDT1VUX1BJRAkJMHhENjc4CS8qIEdhbW1hIFNjb3V0IG9ubGluZSAqLworCiAvKiBDb21tYW5kcyAqLwogI2RlZmluZSBGVERJX1NJT19SRVNFVCAJCTAgLyogUmVzZXQgdGhlIHBvcnQgKi8KICNkZWZpbmUgRlRESV9TSU9fTU9ERU1fQ1RSTCAJMSAvKiBTZXQgdGhlIG1vZGVtIGNvbnRyb2wgcmVnaXN0ZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDU5YzVkOTkuLjk4NDBiYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtMjUwLDYgKzI1MCw5IEBACiAJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDU4KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MDRDNSwgMHgxMDc5KSB9LCAvKiBGVUpJVFNVIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MDREQSwgMHgyNTAwKSB9LCAvKiBQYW5hc29uaWMgVVNCIFN5bmMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNERELCAweDkxMDIpIH0sIC8qIFNIQVJQIFdTMDAzU0ggVVNCIE1vZGVtICovCisJeyBVU0JfREVWSUNFKDB4MDRERCwgMHg5MTIxKSB9LCAvKiBTSEFSUCBXUzAwNFNIIFVTQiBNb2RlbSAqLworCXsgVVNCX0RFVklDRSgweDA0REQsIDB4OTEyMykgfSwgLyogU0hBUlAgV1MwMDdTSCBVU0IgTW9kZW0gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDApIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDEpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNEU4LCAweDVGMDIpIH0sIC8qIFNhbXN1bmcgTkVYaU8gVVNCIFN5bmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwppbmRleCBmMDUzMGMxLi5jODU2ZTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCkBAIC05LDQwICs5LDE0IEBACiAKICAgUG9ydGlvbnMgY29waWVkIGZyb20gdGhlIEtleXNwYW4gZHJpdmVyIGJ5IEh1Z2ggQmxlbWluZ3MgPGh1Z2hAYmxlbWluZ3Mub3JnPgogCi0gIEhpc3Rvcnk6Ci0KLSAgMjAwNS0wNS0xOSAgdjAuMSAgIEluaXRpYWwgdmVyc2lvbiwgYmFzZWQgb24gaW5jb21wbGV0ZSBkb2NzCi0gICAgICAgICAgICAgICAgICAgICBhbmQgYW5hbHlzaXMgb2YgbWlzYmVoYXZpb3Igd2l0aCB0aGUgc3RhbmRhcmQgZHJpdmVyCi0gIDIwMDUtMDUtMjAgIHYwLjIgICBFeHRlbmRlZCB0aGUgaW5wdXQgYnVmZmVyIHRvIGF2b2lkIGxvc2luZwotICAgICAgICAgICAgICAgICAgICAgcmFuZG9tIDY0LWJ5dGUgY2h1bmtzIG9mIGRhdGEKLSAgMjAwNS0wNS0yMSAgdjAuMyAgIGltcGxlbWVudGVkIGNoYXJzX2luX2J1ZmZlcigpCi0gICAgICAgICAgICAgICAgICAgICB0dXJuZWQgb24gbG93X2xhdGVuY3kKLSAgICAgICAgICAgICAgICAgICAgIHNpbXBsaWZpZWQgdGhlIGNvZGUgc29tZXdoYXQKLSAgMjAwNS0wNS0yNCAgdjAuNCAgIG9wdGlvbl93cml0ZSgpIHNvbWV0aW1lcyBkZWFkbG9ja2VkIHVuZGVyIGhlYXZ5IGxvYWQKLSAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgc29tZSBkZWFkIGNvZGUKLSAgICAgICAgICAgICAgICAgICAgIGFkZGVkIHNwb25zb3Igbm90aWNlCi0gICAgICAgICAgICAgICAgICAgICBjb2Rpbmcgc3R5bGUgY2xlYW4tdXAKLSAgMjAwNS0wNi0yMCAgdjAuNC4xIGFkZCBtaXNzaW5nIGJyYWNlcyA6LS8KLSAgICAgICAgICAgICAgICAgICAgIGtpbGxlZCBlbmQtb2YtbGluZSB3aGl0ZXNwYWNlCi0gIDIwMDUtMDctMTUgIHYwLjQuMiByZW5hbWUgV0xBTiBwcm9kdWN0IHRvIEZVU0lPTiwgYWRkIEZVU0lPTjIKLSAgMjAwNS0wOS0xMCAgdjAuNC4zIGFkZGVkIEhVQVdFSSBFNjAwIGNhcmQgYW5kIEF1ZGlvdm94IEFpckNhcmQKLSAgMjAwNS0wOS0yMCAgdjAuNC40IGluY3JlYXNlZCByZWN2IGJ1ZmZlciBzaXplOiB0aGUgY2FyZCBzb21ldGltZXMKLSAgICAgICAgICAgICAgICAgICAgIHdhbnRzIHRvIHNlbmQgPjIwMDAgYnl0ZXMuCi0gIDIwMDYtMDQtMTAgIHYwLjUgICBmaXhlZCB0d28gYXJyYXkgb3ZlcnJ1biBlcnJvcnMgOi0vCi0gIDIwMDYtMDQtMjEgIHYwLjUuMSBhZGRlZCBzdXBwb3J0IGZvciBTaWVycmEgV2lyZWxlc3MgTUM4NzU1Ci0gIDIwMDYtMDUtMTUgIHYwLjYgICByZS1lbmFibGUgbXVsdGktcG9ydCBzdXBwb3J0Ci0gIDIwMDYtMDYtMDEgIHYwLjYuMSBhZGQgQ09CUkEKLSAgMjAwNi0wNi0wMSAgdjAuNi4yIGFkZCBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBzdHVmZgotICAyMDA2LTA2LTAxICB2MC42LjMgYWRkIE5vdmF0ZWwgV2lyZWxlc3MKLSAgMjAwNi0wNi0wMSAgdjAuNyAgIE9wdGlvbiA9PiBHU00KLSAgMjAwNi0wNi0wMSAgdjAuNy4xIGFkZCBDT0JSQTIKKyAgSGlzdG9yeTogc2VlIHRoZSBnaXQgbG9nLgogCiAgIFdvcmsgc3BvbnNvcmVkIGJ5OiBTaWdvcyBHbWJILCBHZXJtYW55IDxpbmZvQHNpZ29zLmRlPgogCiAgIFRoaXMgZHJpdmVyIGV4aXN0cyBiZWNhdXNlIHRoZSAibm9ybWFsIiBzZXJpYWwgZHJpdmVyIGRvZXNuJ3Qgd29yayB0b28gd2VsbAogICB3aXRoIEdTTSBtb2RlbXMuIElzc3VlczoKICAgLSBkYXRhIGxvc3MgLS0gb25lIHNpbmdsZSBSZWNlaXZlIFVSQiBpcyBub3QgbmVhcmx5IGVub3VnaAotICAtIG5vbnN0YW5kYXJkIGZsb3cgKE9wdGlvbiBkZXZpY2VzKSBhbmQgbXVsdGlwbGV4IChTaWVycmEpIGNvbnRyb2wKKyAgLSBub25zdGFuZGFyZCBmbG93IChPcHRpb24gZGV2aWNlcykgY29udHJvbAogICAtIGNvbnRyb2xsaW5nIHRoZSBiYXVkIHJhdGUgZG9lc24ndCBtYWtlIHNlbnNlCiAKICAgVGhpcyBkcml2ZXIgaXMgbmFtZWQgIm9wdGlvbiIgYmVjYXVzZSB0aGUgbW9zdCBjb21tb24gZGV2aWNlIGl0J3MKQEAgLTk2LDggKzcwLDggQEAKICNkZWZpbmUgT1BUSU9OX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAweDBBRjAKICNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRCAgICAgICAgICAgICAgICAweDEyRDEKICNkZWZpbmUgQVVESU9WT1hfVkVORE9SX0lEICAgICAgICAgICAgICAweDBGM0QKLSNkZWZpbmUgU0lFUlJBV0lSRUxFU1NfVkVORE9SX0lEICAgICAgICAweDExOTkKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCAgICAgICAweDE0MTAKKyNkZWZpbmUgQU5ZREFUQV9WRU5ET1JfSUQgICAgICAgICAgICAgICAweDE2ZDUKIAogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9PTEQgICAgICAgICAgICAgIDB4NTAwMAogI2RlZmluZSBPUFRJT05fUFJPRFVDVF9GVVNJT04gICAgICAgICAgIDB4NjAwMApAQCAtMTA2LDggKzgwLDggQEAKICNkZWZpbmUgT1BUSU9OX1BST0RVQ1RfQ09CUkEyICAgICAgICAgICAweDY2MDAKICNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfRTYwMCAgICAgICAgICAgICAweDEwMDEKICNkZWZpbmUgQVVESU9WT1hfUFJPRFVDVF9BSVJDQVJEICAgICAgICAweDAxMTIKLSNkZWZpbmUgU0lFUlJBV0lSRUxFU1NfUFJPRFVDVF9NQzg3NTUgICAweDY4MDIKICNkZWZpbmUgTk9WQVRFTFdJUkVMRVNTX1BST0RVQ1RfVTc0MCAgICAweDE0MDAKKyNkZWZpbmUgQU5ZREFUQV9QUk9EVUNUX0lEICAgICAgICAgICAgICAweDY1MDEKIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG9wdGlvbl9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfT0xEKSB9LApAQCAtMTE3LDggKzkxLDggQEAKIAl7IFVTQl9ERVZJQ0UoT1BUSU9OX1ZFTkRPUl9JRCwgT1BUSU9OX1BST0RVQ1RfQ09CUkEyKSB9LAogCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FNjAwKSB9LAogCXsgVVNCX0RFVklDRShBVURJT1ZPWF9WRU5ET1JfSUQsIEFVRElPVk9YX1BST0RVQ1RfQUlSQ0FSRCkgfSwKLQl7IFVTQl9ERVZJQ0UoU0lFUlJBV0lSRUxFU1NfVkVORE9SX0lELCBTSUVSUkFXSVJFTEVTU19QUk9EVUNUX01DODc1NSkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCxOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzQwKSB9LAorCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0lEKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMTMxLDEwICsxMDUsNyBAQAogCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9FNjAwKSB9LAogCXsgVVNCX0RFVklDRShBVURJT1ZPWF9WRU5ET1JfSUQsIEFVRElPVk9YX1BST0RVQ1RfQUlSQ0FSRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTk9WQVRFTFdJUkVMRVNTX1ZFTkRPUl9JRCxOT1ZBVEVMV0lSRUxFU1NfUFJPRFVDVF9VNzQwKSB9LAotCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwotfTsKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzM1tdID0gewotCXsgVVNCX0RFVklDRShTSUVSUkFXSVJFTEVTU19WRU5ET1JfSUQsIFNJRVJSQVdJUkVMRVNTX1BST0RVQ1RfTUM4NzU1KSB9LAorCXsgVVNCX0RFVklDRShBTllEQVRBX1ZFTkRPUl9JRCwgQU5ZREFUQV9QUk9EVUNUX0lEKSB9LAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApAQCAtMTUxLDM3ICsxMjIsMTEgQEAKIC8qIFRoZSBjYXJkIGhhcyB0aHJlZSBzZXBhcmF0ZSBpbnRlcmZhY2VzLCB3aGljaCB0aGUgc2VyaWFsIGRyaXZlcgogICogcmVjb2duaXplcyBzZXBhcmF0ZWx5LCB0aHVzIG51bV9wb3J0PTEuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgb3B0aW9uXzNwb3J0X2RldmljZSA9IHsKLQkuZHJpdmVyID0gewotCQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkJLm5hbWUgPQkJIm9wdGlvbiIsCi0JfSwKLQkuZGVzY3JpcHRpb24gICAgICAgPSAiR1NNIG1vZGVtICgzLXBvcnQpIiwKLQkuaWRfdGFibGUgICAgICAgICAgPSBvcHRpb25faWRzMywKLQkubnVtX2ludGVycnVwdF9pbiAgPSBOVU1fRE9OVF9DQVJFLAotCS5udW1fYnVsa19pbiAgICAgICA9IE5VTV9ET05UX0NBUkUsCi0JLm51bV9idWxrX291dCAgICAgID0gTlVNX0RPTlRfQ0FSRSwKLQkubnVtX3BvcnRzICAgICAgICAgPSAzLAotCS5vcGVuICAgICAgICAgICAgICA9IG9wdGlvbl9vcGVuLAotCS5jbG9zZSAgICAgICAgICAgICA9IG9wdGlvbl9jbG9zZSwKLQkud3JpdGUgICAgICAgICAgICAgPSBvcHRpb25fd3JpdGUsCi0JLndyaXRlX3Jvb20gICAgICAgID0gb3B0aW9uX3dyaXRlX3Jvb20sCi0JLmNoYXJzX2luX2J1ZmZlciAgID0gb3B0aW9uX2NoYXJzX2luX2J1ZmZlciwKLQkudGhyb3R0bGUgICAgICAgICAgPSBvcHRpb25fcnhfdGhyb3R0bGUsCi0JLnVudGhyb3R0bGUgICAgICAgID0gb3B0aW9uX3J4X3VudGhyb3R0bGUsCi0JLnNldF90ZXJtaW9zICAgICAgID0gb3B0aW9uX3NldF90ZXJtaW9zLAotCS5icmVha19jdGwgICAgICAgICA9IG9wdGlvbl9icmVha19jdGwsCi0JLnRpb2NtZ2V0ICAgICAgICAgID0gb3B0aW9uX3Rpb2NtZ2V0LAotCS50aW9jbXNldCAgICAgICAgICA9IG9wdGlvbl90aW9jbXNldCwKLQkuYXR0YWNoICAgICAgICAgICAgPSBvcHRpb25fc3RhcnR1cCwKLQkuc2h1dGRvd24gICAgICAgICAgPSBvcHRpb25fc2h1dGRvd24sCi0JLnJlYWRfaW50X2NhbGxiYWNrID0gb3B0aW9uX2luc3RhdF9jYWxsYmFjaywKLX07CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgb3B0aW9uXzFwb3J0X2RldmljZSA9IHsKIAkuZHJpdmVyID0gewogCQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkJLm5hbWUgPQkJIm9wdGlvbiIsCisJCS5uYW1lID0JCSJvcHRpb24xIiwKIAl9LAogCS5kZXNjcmlwdGlvbiAgICAgICA9ICJHU00gbW9kZW0gKDEtcG9ydCkiLAogCS5pZF90YWJsZSAgICAgICAgICA9IG9wdGlvbl9pZHMxLApAQCAtMjQ1LDkgKzE5MCw2IEBACiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3Rlcigmb3B0aW9uXzFwb3J0X2RldmljZSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfMXBvcnRfZGV2aWNlX3JlZ2lzdGVyOwotCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJm9wdGlvbl8zcG9ydF9kZXZpY2UpOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZmFpbGVkXzNwb3J0X2RldmljZV9yZWdpc3RlcjsKIAlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJm9wdGlvbl9kcml2ZXIpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbGVkX2RyaXZlcl9yZWdpc3RlcjsKQEAgLTI1Nyw4ICsxOTksNiBAQAogCXJldHVybiAwOwogCiBmYWlsZWRfZHJpdmVyX3JlZ2lzdGVyOgotCXVzYl9zZXJpYWxfZGVyZWdpc3RlciAoJm9wdGlvbl8zcG9ydF9kZXZpY2UpOwotZmFpbGVkXzNwb3J0X2RldmljZV9yZWdpc3RlcjoKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZvcHRpb25fMXBvcnRfZGV2aWNlKTsKIGZhaWxlZF8xcG9ydF9kZXZpY2VfcmVnaXN0ZXI6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTI2Nyw3ICsyMDcsNiBAQAogc3RhdGljIHZvaWQgX19leGl0IG9wdGlvbl9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIgKCZvcHRpb25fZHJpdmVyKTsKLQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZvcHRpb25fM3BvcnRfZGV2aWNlKTsKIAl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIgKCZvcHRpb25fMXBvcnRfZGV2aWNlKTsKIH0KIApAQCAtNjU2LDcgKzU5NSw2IEBACiAKIAlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKIAotCiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKaW5kZXggMjU5ZGIzMS4uNjVlNGQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYwpAQCAtNzksOCArNzksOCBAQAogCXsgVVNCX0RFVklDRShTQUdFTV9WRU5ET1JfSUQsIFNBR0VNX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKExFQURURUtfVkVORE9SX0lELCBMRUFEVEVLXzk1MzFfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoU1BFRUREUkFHT05fVkVORE9SX0lELCBTUEVFRERSQUdPTl9QUk9EVUNUX0lEKSB9LAotCXsgVVNCX0RFVklDRShPVElfVkVORE9SX0lELCBPVElfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoREFUQVBJTE9UX1UyX1ZFTkRPUl9JRCwgREFUQVBJTE9UX1UyX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEJFTEtJTl9WRU5ET1JfSUQsIEJFTEtJTl9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAppbmRleCBkOWMxZTZlLi41NTE5NWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5oCkBAIC04MiwxMCArODIsMTAgQEAKICNkZWZpbmUgU1BFRUREUkFHT05fVkVORE9SX0lECTB4MGU1NQogI2RlZmluZSBTUEVFRERSQUdPTl9QUk9EVUNUX0lECTB4MTEwYgogCi0vKiBPdXJzIFRlY2hub2xvZ3kgSW5jIERLVS01IGNsb25lLCBjaGlwc2V0OiBQcm9saWZpYyBUZWNobm9sb2d5IEluYyAqLwotI2RlZmluZSBPVElfVkVORE9SX0lECTB4MGVhMAotI2RlZmluZSBPVElfUFJPRFVDVF9JRAkweDY4NTgKLQogLyogREFUQVBJTE9UIFVuaXZlcnNhbC0yIFBob25lIENhYmxlICovCiAjZGVmaW5lIERBVEFQSUxPVF9VMl9WRU5ET1JfSUQJMHgwNzMxCiAjZGVmaW5lIERBVEFQSUxPVF9VMl9QUk9EVUNUX0lECTB4MjAwMworCisvKiBCZWxraW4gIkY1VTI1NyIgU2VyaWFsIEFkYXB0ZXIgKi8KKyNkZWZpbmUgQkVMS0lOX1ZFTkRPUl9JRAkweDA1MGQKKyNkZWZpbmUgQkVMS0lOX1BST0RVQ1RfSUQJMHgwMjU3CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCAxMmMxNjk0Li5lMDZhNDFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTQ2NCw4ICs0NjQsMTAgQEAKIAkJbGVuZ3RoICs9IHNwcmludGYgKHBhZ2UrbGVuZ3RoLCAiIHBhdGg6JXMiLCB0bXApOwogCQkJCiAJCWxlbmd0aCArPSBzcHJpbnRmIChwYWdlK2xlbmd0aCwgIlxuIik7Ci0JCWlmICgobGVuZ3RoICsgYmVnaW4pID4gKG9mZiArIGNvdW50KSkKKwkJaWYgKChsZW5ndGggKyBiZWdpbikgPiAob2ZmICsgY291bnQpKSB7CisJCQl1c2Jfc2VyaWFsX3B1dChzZXJpYWwpOwogCQkJZ290byBkb25lOworCQl9CiAJCWlmICgobGVuZ3RoICsgYmVnaW4pIDwgb2ZmKSB7CiAJCQliZWdpbiArPSBsZW5ndGg7CiAJCQlsZW5ndGggPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKaW5kZXggYTVjYTQ0OS4uYjEzMGUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xNDUsNiArMTQ1LDEzIEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9JR05PUkVfUkVTSURVRSApLAogCisvKiBSZXBvcnRlZCBieSBNYXJpbyBSZXR0aWcgPG1hcmlvcmV0dGlnQHdlYi5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNDIxLCAweDA0MmUsIDB4MDEwMCwgMHgwMTAwLAorCQkiTm9raWEiLAorCQkiTm9raWEgMzI1MCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQlVU19GTF9JR05PUkVfUkVTSURVRSB8IFVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCiAvKiBSZXBvcnRlZCBieSBTdW1lZGhhIFN3YW15IDxzdW1lZGhhc3dhbXlAZ21haWwuY29tPiBhbmQKICAqIEVpbmFyIFRoLiBFaW5hcnNzb24gPGVpbmFydGhlcmVkQGdtYWlsLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwNDIxLCAweDA0NDQsIDB4MDEwMCwgMHgwMTAwLApAQCAtMjM0LDE2ICsyNDEsNiBAQAogCQkiRmluZWNhbSBTNSIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLCBVU19GTF9GSVhfSU5RVUlSWSksCiAKLS8qIFBhdGNoIGZvciBLeW9jZXJhIEZpbmVjYW0gTDMKLSAqIFN1Ym1pdHRlZCBieSBNaWNoYWVsIEtyYXV0aCA8bWljaGFlbC5rcmF1dGhAd2ViLmRlPgotICogYW5kIEFsZXNzYW5kcm8gRnJhY2NoZXR0aSA8YWwuZnJhY2NoZXR0aUB0aW4uaXQ+Ci0gKi8KLVVOVVNVQUxfREVWKCAgMHgwNDgyLCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAotCQkiS3lvY2VyYSIsCi0JCSJGaW5lY2FtIEwzIiwKLQkJVVNfU0NfU0NTSSwgVVNfUFJfQlVMSywgTlVMTCwKLQkJVVNfRkxfRklYX0lOUVVJUlkpLAotCiAvKiBSZXBvcnRlZCBieSBQYXVsIFN0ZXdhcnQgPHN0ZXdhcnRAd2V0bG9naWMubmV0PgogICogVGhpcyBlbnRyeSBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgZGV2aWNlIHJlcG9ydHMgU3ViPWZmICovCiBVTlVTVUFMX0RFViggIDB4MDRhNCwgMHgwMDA0LCAweDAwMDEsIDB4MDAwMSwKQEAgLTU5Miw2ICs1ODksMTMgQEAKICAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKICAgICAgICAgICAgICAgICBVU19GTF9GSVhfSU5RVUlSWSApLAogCisvKiBmbG9wcHkgcmVwb3J0cyBtdWx0aXBsZSBsdW5zICovCitVTlVTVUFMX0RFViggIDB4MDU1ZCwgMHgyMDIwLCAweDAwMDAsIDB4MDIxMCwKKyAgICAgICAgICAgICAgICJTQU1TVU5HIiwKKyAgICAgICAgICAgICAgICJTRkQtMzIxVSBbRlcgMENdIiwKKyAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorICAgICAgICAgICAgICAgVVNfRkxfU0lOR0xFX0xVTiApLAorCiAJCQogVU5VU1VBTF9ERVYoICAweDA1N2IsIDB4MDAwMCwgMHgwMDAwLCAweDAyOTksIAogCQkiWS1FIERhdGEiLApAQCAtNjI3LDE4ICs2MzEsNiBAQAogCQkiRGlnaXRhbCBDYW1lcmEgRVgtMjAgRFNDIiwKIAkJVVNfU0NfODA3MCwgVVNfUFJfREVWSUNFLCBOVUxMLCAwICksCiAKLS8qIFRoZSBlbnRyeSB3YXMgaGVyZSBiZWZvcmUgSSB0b29rIG92ZXIsIGFuZCBoYWQgVVNfU0NfUkJDLiBJdCB0dXJucwotICogb3V0IHRoYXQgaXNuJ3QgbmVlZGVkLiBBZGRpdGlvbmFsbHksIFRvcnN0ZW4gRXJpa3Nzb24KLSAqIDxUb3JzdGVuLkVyaWtzc29uQGJlcmdpYW5za2Euc2U+IGlzIGFibGUgdG8gdXNlIGhpcyBkZXZpY2UgZmluZQotICogd2l0aG91dCB0aGlzIGVudHJ5IGF0IGFsbCAtIGJ1dCBJIGRvbid0IHN1c3BlY3QgdGhhdCB3aWxsIGJlIHRydWUKLSAqIGZvciBhbGwgdXNlcnMgKHRoZSBwcm90b2NvbCBpcyBsaWtlbHkgbmVlZGVkKSwgc28gaXMgc3RheWluZyBhdAotICogdGhpcyB0aW1lLiAtIFBoaWwgRGlib3dpdHogPHBoaWxAaXBvbS5jb20+Ci0gKi8KLVVOVVNVQUxfREVWKCAgMHgwNTlmLCAweGE2MDEsIDB4MDIwMCwgMHgwMjAwLCAKLQkJIkxhQ2llIiwKLQkJIlVTQiBIYXJkIERpc2siLAotCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0NCLCBOVUxMLCAwICksCi0KIC8qIFN1Ym1pdHRlZCBieSBKb2VsIEJvdXJxdWFyZCA8bnVtbG9ja0BmcmVlc3VyZi5jaD4KICAqIFNvbWUgdmVyc2lvbnMgb2YgdGhpcyBkZXZpY2UgbmVlZCB0aGUgU3ViQ2xhc3MgYW5kIFByb3RvY29sIG92ZXJyaWRlcwogICogd2hpbGUgb3RoZXJzIGRvbid0LgpAQCAtMTEwNiw3ICsxMDk4LDE1IEBACiAgICAgICAgICAgICAgICAgIk9wdGlvIFMvUzQiLAogICAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogICAgICAgICAgICAgICAgIFVTX0ZMX0ZJWF9JTlFVSVJZICksCi0JCQorCisvKiBUaGlzIGlzIGEgdmlydHVhbCB3aW5kb3dzIGRyaXZlciBDRCwgd2hpY2ggdGhlIHpkMTIxMXJ3IGRyaXZlciBhdXRvbWF0aWNhbGx5CisgKiBjb252ZXJ0cyBpbnRvIGEgV0xBTiBkZXZpY2UuICovCitVTlVTVUFMX0RFViggMHgwYWNlLCAweDIwMTEsIDB4MDEwMSwgMHgwMTAxLAorICAgICAgICAgICAgICAgICJaeVhFTCIsCisgICAgICAgICAgICAgICAgIkctMjIwRiBVU0ItV0xBTiBJbnN0YWxsIiwKKyAgICAgICAgICAgICAgICBVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKyAgICAgICAgICAgICAgICBVU19GTF9JR05PUkVfREVWSUNFICksCisKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwCiBVTlVTVUFMX0RFViggIDB4MGJmNiwgMHhhMDAxLCAweDAxMDAsIDB4MDExMCwKIAkJIkFUSSIsCkBAIC0xMjM3LDYgKzEyMzcsMTYgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0lHTk9SRV9SRVNJRFVFIHwgVVNfRkxfR09fU0xPVyB8IFVTX0ZMX01BWF9TRUNUT1JTXzY0KSwKIAorLyogRGF2aWQgS3VlaGxpbmcgPGR2ZGtobG5nQGdteC5kZT46CisgKiBmb3IgTVAzLVBsYXllciBBVk9YIFdTWC0zMDBFUiAoYm91Z2h0IGluIEphcGFuKS4gIFJlcG9ydHMgbG90cyBvZiBTQ1NJCisgKiBlcnJvcnMgd2hlbiB0cnlpbmcgdG8gd3JpdGUuCisgKi8KK1VOVVNVQUxfREVWKCAgMHgwZjE5LCAweDAxMDUsIDB4MDEwMCwgMHgwMTAwLAorCQkiQy1NRVgiLAorCQkiQS1WT1giLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgKSwKKwogLyogUmVwb3J0ZWQgYnkgTWljaGFlbCBTdGF0dG1hbm4gPG1pY2hhZWxAc3RhdHRtYW5uLmNvbT4gKi8KIFVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGQwMDgsIDB4MDAwMCwgMHgwMDAwLAogCQkiU29ueSBFcmljc3NvbiIsCkBAIC0xMjQ0LDExICsxMjU0LDE4IEBACiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogCQlVU19GTF9OT19XUF9ERVRFQ1QgKSwKIAorLyogUmVwb3J0ZWQgYnkgRW1tYW51ZWwgVmFzaWxha2lzIDxldmFzQGZvcnRobmV0LmdyPiAqLworVU5VU1VBTF9ERVYoICAweDBmY2UsIDB4ZTAzMSwgMHgwMDAwLCAweDAwMDAsCisJCSJTb255IEVyaWNzc29uIiwKKwkJIk02MDBpIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCiAvKiBSZXBvcnRlZCBieSBLZXZpbiBDZXJuZWtlZSA8a3BjLXVzYmRldkBnZWxhdG8udWl1Yy5lZHU+CiAgKiBUZXN0ZWQgb24gaGFyZHdhcmUgdmVyc2lvbiAxLjEwLgogICogRW50cnkgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBvdmVycmlkZS4KICAqLwotVU5VU1VBTF9ERVYoICAweDEwMTksIDB4MGM1NSwgMHgwMDAwLCAweDk5OTksCitVTlVTVUFMX0RFViggIDB4MTAxOSwgMHgwYzU1LCAweDAxMTAsIDB4MDExMCwKIAkJIkRlc2tub3RlIiwKIAkJIlVDUi02MVMyQiIsCiAJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCB1c2Jfc3Rvcl91Y3I2MXMyYl9pbml0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKaW5kZXggNWVlMTliZS4uOGQ3YmRjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCkBAIC00ODMsNyArNDgzLDcgQEAKIH0KIAogLyogR2V0IHRoZSB1bnVzdWFsX2RldnMgZW50cmllcyBhbmQgdGhlIHN0cmluZyBkZXNjcmlwdG9ycyAqLwotc3RhdGljIHZvaWQgZ2V0X2RldmljZV9pbmZvKHN0cnVjdCB1c19kYXRhICp1cywgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorc3RhdGljIGludCBnZXRfZGV2aWNlX2luZm8oc3RydWN0IHVzX2RhdGEgKnVzLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHVzLT5wdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICppZGVzYyA9CkBAIC01MDAsNiArNTAwLDExIEBACiAJCQl1bnVzdWFsX2Rldi0+dXNlVHJhbnNwb3J0OwogCXVzLT5mbGFncyA9IFVTQl9VU19PUklHX0ZMQUdTKGlkLT5kcml2ZXJfaW5mbyk7CiAKKwlpZiAodXMtPmZsYWdzICYgVVNfRkxfSUdOT1JFX0RFVklDRSkgeworCQlwcmludGsoS0VSTl9JTkZPIFVTQl9TVE9SQUdFICJkZXZpY2UgaWdub3JlZFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCS8qCiAJICogVGhpcyBmbGFnIGlzIG9ubHkgbmVlZGVkIHdoZW4gd2UncmUgaW4gaGlnaC1zcGVlZCwgc28gbGV0J3MKIAkgKiBkaXNhYmxlIGl0IGlmIHdlJ3JlIGluIGZ1bGwtc3BlZWQKQEAgLTU0MSw2ICs1NDYsOCBAQAogCQkJCW1zZ3NbbXNnXSwKIAkJCQlVVFNfUkVMRUFTRSk7CiAJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qIEdldCB0aGUgdHJhbnNwb3J0IHNldHRpbmdzICovCkBAIC05NjksNyArOTc2LDkgQEAKIAkgKiBvZiB0aGUgbWF0Y2ggZnJvbSB0aGUgdXNiX2RldmljZV9pZCB0YWJsZSwgc28gd2UgY2FuIGZpbmQgdGhlCiAJICogY29ycmVzcG9uZGluZyBlbnRyeSBpbiB0aGUgcHJpdmF0ZSB0YWJsZS4KIAkgKi8KLQlnZXRfZGV2aWNlX2luZm8odXMsIGlkKTsKKwlyZXN1bHQgPSBnZXRfZGV2aWNlX2luZm8odXMsIGlkKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIEJhZERldmljZTsKIAogCS8qIEdldCB0aGUgdHJhbnNwb3J0LCBwcm90b2NvbCwgYW5kIHBpcGUgc2V0dGluZ3MgKi8KIAlyZXN1bHQgPSBnZXRfdHJhbnNwb3J0KHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwppbmRleCA2NTMzYjBmLi43MDJlYjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9LY29uZmlnCkBAIC04Niw5ICs4NiwxMSBAQAogICAgICAgIGRlZmF1bHQgbgogCiBjb25maWcgRkJfQkFDS0xJR0hUCi0gICAgICAgYm9vbAotICAgICAgIGRlcGVuZHMgb24gRkIKLSAgICAgICBkZWZhdWx0IG4KKwlib29sCisJZGVwZW5kcyBvbiBGQgorCXNlbGVjdCBCQUNLTElHSFRfTENEX1NVUFBPUlQKKwlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQorCWRlZmF1bHQgbgogCiBjb25maWcgRkJfTU9ERV9IRUxQRVJTCiAgICAgICAgIGJvb2wgIkVuYWJsZSBWaWRlbyBNb2RlIEhhbmRsaW5nIEhlbHBlcnMiCkBAIC00MjAsNyArNDIyLDcgQEAKIAogY29uZmlnIEZCX0NPTlRST0wKIAlib29sICJBcHBsZSBcImNvbnRyb2xcIiBkaXNwbGF5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBQUENfUE1BQworCWRlcGVuZHMgb24gKEZCID0geSkgJiYgUFBDX1BNQUMgJiYgUFBDMzIKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCkBAIC00MzEsNyArNDMzLDcgQEAKIAogY29uZmlnIEZCX1BMQVRJTlVNCiAJYm9vbCAiQXBwbGUgXCJwbGF0aW51bVwiIGRpc3BsYXkgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIChGQiA9IHkpICYmIFBQQ19QTUFDCisJZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBQUENfUE1BQyAmJiBQUEMzMgogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKQEAgLTQ0Miw3ICs0NDQsNyBAQAogCiBjb25maWcgRkJfVkFMS1lSSUUKIAlib29sICJBcHBsZSBcInZhbGt5cmllXCIgZGlzcGxheSBzdXBwb3J0IgotCWRlcGVuZHMgb24gKEZCID0geSkgJiYgKE1BQyB8fCBQUENfUE1BQykKKwlkZXBlbmRzIG9uIChGQiA9IHkpICYmIChNQUMgfHwgKFBQQ19QTUFDICYmIFBQQzMyKSkKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCkBAIC00NTMsNyArNDU1LDcgQEAKIAogY29uZmlnIEZCX0NUNjU1NTAKIAlib29sICJDaGlwcyA2NTU1MCBkaXNwbGF5IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBQUEMKKwlkZXBlbmRzIG9uIChGQiA9IHkpICYmIFBQQzMyCiAJc2VsZWN0IEZCX0NGQl9GSUxMUkVDVAogCXNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVApAQCAtNTUyLDcgKzU1NCw3IEBACiAKIGNvbmZpZyBGQl9JTUFDCiAJYm9vbCAiSW50ZWwtYmFzZWQgTWFjaW50b3NoIEZyYW1lYnVmZmVyIFN1cHBvcnQiCi0JZGVwZW5kcyBvbiAoRkIgPSB5KSAmJiBYODYKKwlkZXBlbmRzIG9uIChGQiA9IHkpICYmIFg4NiAmJiBFRkkKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCkBAIC03MjEsMTAgKzcyMyw4IEBACiAKIGNvbmZpZyBGQl9OVklESUFfQkFDS0xJR0hUCiAJYm9vbCAiU3VwcG9ydCBmb3IgYmFja2xpZ2h0IGNvbnRyb2wiCi0JZGVwZW5kcyBvbiBGQl9OVklESUEgJiYgUFBDX1BNQUMKKwlkZXBlbmRzIG9uIEZCX05WSURJQSAmJiBQTUFDX0JBQ0tMSUdIVAogCXNlbGVjdCBGQl9CQUNLTElHSFQKLQlzZWxlY3QgQkFDS0xJR0hUX0xDRF9TVVBQT1JUCi0Jc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIGJhY2tsaWdodCBvZiB5b3VyIGRpc3BsYXkuCkBAIC03NjksMTAgKzc2OSw4IEBACiAKIGNvbmZpZyBGQl9SSVZBX0JBQ0tMSUdIVAogCWJvb2wgIlN1cHBvcnQgZm9yIGJhY2tsaWdodCBjb250cm9sIgotCWRlcGVuZHMgb24gRkJfUklWQSAmJiBQUENfUE1BQworCWRlcGVuZHMgb24gRkJfUklWQSAmJiBQTUFDX0JBQ0tMSUdIVAogCXNlbGVjdCBGQl9CQUNLTElHSFQKLQlzZWxlY3QgQkFDS0xJR0hUX0xDRF9TVVBQT1JUCi0Jc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIGJhY2tsaWdodCBvZiB5b3VyIGRpc3BsYXkuCkBAIC0xMDI1LDEwICsxMDIzLDggQEAKIAogY29uZmlnIEZCX1JBREVPTl9CQUNLTElHSFQKIAlib29sICJTdXBwb3J0IGZvciBiYWNrbGlnaHQgY29udHJvbCIKLQlkZXBlbmRzIG9uIEZCX1JBREVPTiAmJiBQUENfUE1BQworCWRlcGVuZHMgb24gRkJfUkFERU9OICYmIFBNQUNfQkFDS0xJR0hUCiAJc2VsZWN0IEZCX0JBQ0tMSUdIVAotCXNlbGVjdCBCQUNLTElHSFRfTENEX1NVUFBPUlQKLQlzZWxlY3QgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29udHJvbCB0aGUgYmFja2xpZ2h0IG9mIHlvdXIgZGlzcGxheS4KQEAgLTEwNTksMTAgKzEwNTUsOCBAQAogCiBjb25maWcgRkJfQVRZMTI4X0JBQ0tMSUdIVAogCWJvb2wgIlN1cHBvcnQgZm9yIGJhY2tsaWdodCBjb250cm9sIgotCWRlcGVuZHMgb24gRkJfQVRZMTI4ICYmIFBQQ19QTUFDCisJZGVwZW5kcyBvbiBGQl9BVFkxMjggJiYgUE1BQ19CQUNLTElHSFQKIAlzZWxlY3QgRkJfQkFDS0xJR0hUCi0Jc2VsZWN0IEJBQ0tMSUdIVF9MQ0RfU1VQUE9SVAotCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSBiYWNrbGlnaHQgb2YgeW91ciBkaXNwbGF5LgpAQCAtMTExMSwxMCArMTEwNSw4IEBACiAKIGNvbmZpZyBGQl9BVFlfQkFDS0xJR0hUCiAJYm9vbCAiU3VwcG9ydCBmb3IgYmFja2xpZ2h0IGNvbnRyb2wiCi0JZGVwZW5kcyBvbiBGQl9BVFkgJiYgUFBDX1BNQUMKKwlkZXBlbmRzIG9uIEZCX0FUWSAmJiBQTUFDX0JBQ0tMSUdIVAogCXNlbGVjdCBGQl9CQUNLTElHSFQKLQlzZWxlY3QgQkFDS0xJR0hUX0xDRF9TVVBQT1JUCi0Jc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbnRyb2wgdGhlIGJhY2tsaWdodCBvZiB5b3VyIGRpc3BsYXkuCkBAIC0xNjIwLDcgKzE2MTIsNyBAQAogCXNvdXJjZSAiZHJpdmVycy92aWRlby9sb2dvL0tjb25maWciCiBlbmRpZgogCi1pZiBGQiAmJiBTWVNGUworaWYgU1lTRlMKIAlzb3VyY2UgImRyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWciCiBlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCA5NTU2M2M5Li40ODFjNmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKICMgRWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIGEgbGlzdCBvZiBmaWxlcy4KIAorb2JqLXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9IGZiX25vdGlmeS5vCiBvYmotJChDT05GSUdfRkIpICAgICAgICAgICAgICAgICAgKz0gZmIubwogZmIteSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDo9IGZibWVtLm8gZmJtb24ubyBmYmNtYXAubyBmYnN5c2ZzLm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVkYi5vIGZiY3Z0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vUzN0cmlvZmIuYyBiL2RyaXZlcnMvdmlkZW8vUzN0cmlvZmIuYwppbmRleCBhZmQxNDZmLi4zOTcwMDVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL1MzdHJpb2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9TM3RyaW9mYi5jCkBAIC0zNDksMzAgKzM0OSwzMCBAQAogICAgIHMzdHJpb19uYW1lW3NpemVvZihzM3RyaW9fbmFtZSktMV0gPSAnXDAnOwogICAgIHN0cmNweShmYl9maXguaWQsIHMzdHJpb19uYW1lKTsKIAotICAgIGlmKChwcCA9IChpbnQgKilnZXRfcHJvcGVydHkoZHAsICJ2ZW5kb3ItaWQiLCAmbGVuKSkgIT0gTlVMTAorICAgIGlmKChwcCA9IGdldF9wcm9wZXJ0eShkcCwgInZlbmRvci1pZCIsICZsZW4pKSAhPSBOVUxMCiAJJiYgKnBwIT1QQ0lfVkVORE9SX0lEX1MzKSB7CiAJcHJpbnRrKCIlczogY2FuJ3QgZmluZCBTMyBUcmlvIGJvYXJkXG4iLCBkcC0+ZnVsbF9uYW1lKTsKIAlyZXR1cm47CiAgICAgfQogCi0gICAgaWYoKHBwID0gKGludCAqKWdldF9wcm9wZXJ0eShkcCwgImRldmljZS1pZCIsICZsZW4pKSAhPSBOVUxMCisgICAgaWYoKHBwID0gZ2V0X3Byb3BlcnR5KGRwLCAiZGV2aWNlLWlkIiwgJmxlbikpICE9IE5VTEwKIAkmJiAqcHAhPVBDSV9ERVZJQ0VfSURfUzNfVFJJTykgewogCXByaW50aygiJXM6IGNhbid0IGZpbmQgUzMgVHJpbyBib2FyZFxuIiwgZHAtPmZ1bGxfbmFtZSk7CiAJcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgocHAgPSAoaW50ICopZ2V0X3Byb3BlcnR5KGRwLCAiZGVwdGgiLCAmbGVuKSkgIT0gTlVMTAorICAgIGlmICgocHAgPSBnZXRfcHJvcGVydHkoZHAsICJkZXB0aCIsICZsZW4pKSAhPSBOVUxMCiAJJiYgbGVuID09IHNpemVvZihpbnQpICYmICpwcCAhPSA4KSB7CiAJcHJpbnRrKCIlczogY2FuJ3QgdXNlIGRlcHRoID0gJWRcbiIsIGRwLT5mdWxsX25hbWUsICpwcCk7CiAJcmV0dXJuOwogICAgIH0KLSAgICBpZiAoKHBwID0gKGludCAqKWdldF9wcm9wZXJ0eShkcCwgIndpZHRoIiwgJmxlbikpICE9IE5VTEwKKyAgICBpZiAoKHBwID0gZ2V0X3Byb3BlcnR5KGRwLCAid2lkdGgiLCAmbGVuKSkgIT0gTlVMTAogCSYmIGxlbiA9PSBzaXplb2YoaW50KSkKIAlmYl92YXIueHJlcyA9IGZiX3Zhci54cmVzX3ZpcnR1YWwgPSAqcHA7Ci0gICAgaWYgKChwcCA9IChpbnQgKilnZXRfcHJvcGVydHkoZHAsICJoZWlnaHQiLCAmbGVuKSkgIT0gTlVMTAorICAgIGlmICgocHAgPSBnZXRfcHJvcGVydHkoZHAsICJoZWlnaHQiLCAmbGVuKSkgIT0gTlVMTAogCSYmIGxlbiA9PSBzaXplb2YoaW50KSkKIAlmYl92YXIueXJlcyA9IGZiX3Zhci55cmVzX3ZpcnR1YWwgPSAqcHA7Ci0gICAgaWYgKChwcCA9IChpbnQgKilnZXRfcHJvcGVydHkoZHAsICJsaW5lYnl0ZXMiLCAmbGVuKSkgIT0gTlVMTAorICAgIGlmICgocHAgPSBnZXRfcHJvcGVydHkoZHAsICJsaW5lYnl0ZXMiLCAmbGVuKSkgIT0gTlVMTAogCSYmIGxlbiA9PSBzaXplb2YoaW50KSkKIAlmYl9maXgubGluZV9sZW5ndGggPSAqcHA7CiAgICAgZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eTEyOGZiLmMKaW5kZXggYzY0YTcxNy4uMjc2YTIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvYXR5MTI4ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9hdHkxMjhmYi5jCkBAIC00NTUsNyArNDU1LDEwIEBACiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9maWZvKHUxNiBlbnRyaWVzLCBzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIpOwogc3RhdGljIHZvaWQgd2FpdF9mb3JfaWRsZShzdHJ1Y3QgYXR5MTI4ZmJfcGFyICpwYXIpOwogc3RhdGljIHUzMiBkZXB0aF90b19kc3QodTMyIGRlcHRoKTsKKworI2lmZGVmIENPTkZJR19GQl9BVFkxMjhfQkFDS0xJR0hUCiBzdGF0aWMgdm9pZCBhdHkxMjhfYmxfc2V0X3Bvd2VyKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcG93ZXIpOworI2VuZGlmCiAKICNkZWZpbmUgQklPU19JTjgodikgIAkocmVhZGIoYmlvcyArICh2KSkpCiAjZGVmaW5lIEJJT1NfSU4xNih2KSAJKHJlYWRiKGJpb3MgKyAodikpIHwgXApAQCAtMTc5OCwxMCArMTgwMSwxNCBAQAogc3RhdGljIHZvaWQgYXR5MTI4X2JsX3NldF9wb3dlcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHBvd2VyKQogewogCW11dGV4X2xvY2soJmluZm8tPmJsX211dGV4KTsKLQl1cCgmaW5mby0+YmxfZGV2LT5zZW0pOwotCWluZm8tPmJsX2Rldi0+cHJvcHMtPnBvd2VyID0gcG93ZXI7Ci0JX19hdHkxMjhfYmxfdXBkYXRlX3N0YXR1cyhpbmZvLT5ibF9kZXYpOwotCWRvd24oJmluZm8tPmJsX2Rldi0+c2VtKTsKKworCWlmIChpbmZvLT5ibF9kZXYpIHsKKwkJZG93bigmaW5mby0+YmxfZGV2LT5zZW0pOworCQlpbmZvLT5ibF9kZXYtPnByb3BzLT5wb3dlciA9IHBvd2VyOworCQlfX2F0eTEyOF9ibF91cGRhdGVfc3RhdHVzKGluZm8tPmJsX2Rldik7CisJCXVwKCZpbmZvLT5ibF9kZXYtPnNlbSk7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiB9CiAKQEAgLTE4MjUsNyArMTgzMiw3IEBACiAJYmQgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsIHBhciwgJmF0eTEyOF9ibF9kYXRhKTsKIAlpZiAoSVNfRVJSKGJkKSkgewogCQlpbmZvLT5ibF9kZXYgPSBOVUxMOwotCQlwcmludGsoImF0eTEyODogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJhdHkxMjg6IEJhY2tsaWdodCByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE4MzYsMTEgKzE4NDMsMTEgQEAKIAkJMjE5ICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9MRVZFTCk7CiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiAKLQl1cCgmYmQtPnNlbSk7CisJZG93bigmYmQtPnNlbSk7CiAJYmQtPnByb3BzLT5icmlnaHRuZXNzID0gYXR5MTI4X2JsX2RhdGEubWF4X2JyaWdodG5lc3M7CiAJYmQtPnByb3BzLT5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CiAJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQlkb3duKCZiZC0+c2VtKTsKKwl1cCgmYmQtPnNlbSk7CiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKIAltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CkBAIC0xOTEwLDkgKzE5MTcsNiBAQAogCXU4IGNoaXBfcmV2OwogCXUzMiBkYWM7CiAKLQlpZiAoIXBhci0+dnJhbV9zaXplKQkvKiBtYXkgaGF2ZSBhbHJlYWR5IGJlZW4gcHJvYmVkICovCi0JCXBhci0+dnJhbV9zaXplID0gYXR5X2xkX2xlMzIoQ09ORklHX01FTVNJWkUpICYgMHgwM0ZGRkZGRjsKLQogCS8qIEdldCB0aGUgY2hpcCByZXZpc2lvbiAqLwogCWNoaXBfcmV2ID0gKGF0eV9sZF9sZTMyKENPTkZJR19DTlRMKSA+PiAxNikgJiAweDFGOwogCkBAIC0yMDI1LDkgKzIwMjksNiBAQAogCiAJYXR5MTI4X2luaXRfZW5naW5lKHBhcik7CiAKLQlpZiAocmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbykgPCAwKQotCQlyZXR1cm4gMDsKLQogCXBhci0+cG1fcmVnID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKIAlwYXItPnBkZXYgPSBwZGV2OwogCXBhci0+YXNsZWVwID0gMDsKQEAgLTIwMzcsNiArMjAzOCw5IEBACiAJYXR5MTI4X2JsX2luaXQocGFyKTsKICNlbmRpZgogCisJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkKKwkJcmV0dXJuIDA7CisKIAlwcmludGsoS0VSTl9JTkZPICJmYiVkOiAlcyBmcmFtZSBidWZmZXIgZGV2aWNlIG9uICVzXG4iLAogCSAgICAgICBpbmZvLT5ub2RlLCBpbmZvLT5maXguaWQsIHZpZGVvX2NhcmQpOwogCkBAIC0yMDg2LDcgKzIwOTAsNiBAQAogCXBhciA9IGluZm8tPnBhcjsKIAogCWluZm8tPnBzZXVkb19wYWxldHRlID0gcGFyLT5wc2V1ZG9fcGFsZXR0ZTsKLQlpbmZvLT5maXggPSBhdHkxMjhmYl9maXg7CiAKIAkvKiBWaXJ0dWFsaXplIG1taW8gcmVnaW9uICovCiAJaW5mby0+Zml4Lm1taW9fc3RhcnQgPSByZWdfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYyBiL2RyaXZlcnMvdmlkZW8vYXR5L2F0eWZiX2Jhc2UuYwppbmRleCAxNTA3ZDE5Li4xOWE3MWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9hdHlmYl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvYXR5ZmJfYmFzZS5jCkBAIC0yMjAwLDEwICsyMjAwLDE0IEBACiBzdGF0aWMgdm9pZCBhdHlfYmxfc2V0X3Bvd2VyKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgcG93ZXIpCiB7CiAJbXV0ZXhfbG9jaygmaW5mby0+YmxfbXV0ZXgpOwotCXVwKCZpbmZvLT5ibF9kZXYtPnNlbSk7Ci0JaW5mby0+YmxfZGV2LT5wcm9wcy0+cG93ZXIgPSBwb3dlcjsKLQlfX2F0eV9ibF91cGRhdGVfc3RhdHVzKGluZm8tPmJsX2Rldik7Ci0JZG93bigmaW5mby0+YmxfZGV2LT5zZW0pOworCisJaWYgKGluZm8tPmJsX2RldikgeworCQlkb3duKCZpbmZvLT5ibF9kZXYtPnNlbSk7CisJCWluZm8tPmJsX2Rldi0+cHJvcHMtPnBvd2VyID0gcG93ZXI7CisJCV9fYXR5X2JsX3VwZGF0ZV9zdGF0dXMoaW5mby0+YmxfZGV2KTsKKwkJdXAoJmluZm8tPmJsX2Rldi0+c2VtKTsKKwl9CisKIAltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKIH0KIApAQCAtMjIyMyw3ICsyMjI3LDcgQEAKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgcGFyLCAmYXR5X2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7Ci0JCXByaW50aygiYXR5OiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImF0eTogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjIzNCwxMSArMjIzOCwxMSBAQAogCQkweEZGICogRkJfQkFDS0xJR0hUX01BWCAvIE1BWF9MRVZFTCk7CiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiAKLQl1cCgmYmQtPnNlbSk7CisJZG93bigmYmQtPnNlbSk7CiAJYmQtPnByb3BzLT5icmlnaHRuZXNzID0gYXR5X2JsX2RhdGEubWF4X2JyaWdodG5lc3M7CiAJYmQtPnByb3BzLT5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CiAJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQlkb3duKCZiZC0+c2VtKTsKKwl1cCgmYmQtPnNlbSk7CiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKIAltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CkBAIC0yODEyLDcgKzI4MTYsNyBAQAogCWlmIChwYXItPmxvY2tfYmxhbmsgfHwgcGFyLT5hc2xlZXApCiAJCXJldHVybiAwOwogCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCisjaWZkZWYgQ09ORklHX0ZCX0FUWV9CQUNLTElHSFQKIAlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykgJiYgYmxhbmsgPiBGQl9CTEFOS19OT1JNQUwpCiAJCWF0eV9ibF9zZXRfcG93ZXIoaW5mbywgRkJfQkxBTktfUE9XRVJET1dOKTsKICNlbGlmIGRlZmluZWQoQ09ORklHX0ZCX0FUWV9HRU5FUklDX0xDRCkKQEAgLTI4NDQsNyArMjg0OCw3IEBACiAJfQogCWF0eV9zdF9sZTMyKENSVENfR0VOX0NOVEwsIGdlbl9jbnRsLCBwYXIpOwogCi0jaWZkZWYgQ09ORklHX1BNQUNfQkFDS0xJR0hUCisjaWZkZWYgQ09ORklHX0ZCX0FUWV9CQUNLTElHSFQKIAlpZiAobWFjaGluZV9pcyhwb3dlcm1hYykgJiYgYmxhbmsgPD0gRkJfQkxBTktfTk9STUFMKQogCQlhdHlfYmxfc2V0X3Bvd2VyKGluZm8sIEZCX0JMQU5LX1VOQkxBTkspOwogI2VsaWYgZGVmaW5lZChDT05GSUdfRkJfQVRZX0dFTkVSSUNfTENEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2JhY2tsaWdodC5jCmluZGV4IDE3NTVkZGQuLjU4NWViN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFja2xpZ2h0LmMKQEAgLTE5NSwxMSArMTk1LDExIEBACiAJCTIxNyAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfUkFERU9OX0xFVkVMKTsKIAltdXRleF91bmxvY2soJnJpbmZvLT5pbmZvLT5ibF9tdXRleCk7CiAKLQl1cCgmYmQtPnNlbSk7CisJZG93bigmYmQtPnNlbSk7CiAJYmQtPnByb3BzLT5icmlnaHRuZXNzID0gcmFkZW9uX2JsX2RhdGEubWF4X2JyaWdodG5lc3M7CiAJYmQtPnByb3BzLT5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CiAJYmQtPnByb3BzLT51cGRhdGVfc3RhdHVzKGJkKTsKLQlkb3duKCZiZC0+c2VtKTsKKwl1cCgmYmQtPnNlbSk7CiAKICNpZmRlZiBDT05GSUdfUE1BQ19CQUNLTElHSFQKIAltdXRleF9sb2NrKCZwbWFjX2JhY2tsaWdodF9tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fYmFzZS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwppbmRleCA4ZDg1ZmM1Li4wZWQ1NzdlN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9iYXNlLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX2Jhc2UuYwpAQCAtMjY2LDYgKzI2Niw4IEBACiAjaWZkZWYgQ09ORklHX01UUlIKIHN0YXRpYyBpbnQgbm9tdHJyID0gMDsKICNlbmRpZgorc3RhdGljIGludCBmb3JjZV9zbGVlcDsKK3N0YXRpYyBpbnQgaWdub3JlX2Rldmxpc3Q7CiAKIC8qCiAgKiBwcm90b3R5cGVzCkBAIC00MTEsMTEgKzQxMywxMSBAQAogc3RhdGljIGludCBfX2RldmluaXQgcmFkZW9uX3JlYWRfeHRhbF9PRiAoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSByaW5mby0+b2Zfbm9kZTsKLQl1MzIgKnZhbDsKKwljb25zdCB1MzIgKnZhbDsKIAogCWlmIChkcCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl2YWwgPSAodTMyICopIGdldF9wcm9wZXJ0eShkcCwgIkFUWSxSZWZDTEsiLCBOVUxMKTsKKwl2YWwgPSBnZXRfcHJvcGVydHkoZHAsICJBVFksUmVmQ0xLIiwgTlVMTCk7CiAJaWYgKCF2YWwgfHwgISp2YWwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicmFkZW9uZmI6IE5vIEFUWSxSZWZDTEsgcHJvcGVydHkgIVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDIzLDExICs0MjUsMTEgQEAKIAogCXJpbmZvLT5wbGwucmVmX2NsayA9ICgqdmFsKSAvIDEwOwogCi0JdmFsID0gKHUzMiAqKSBnZXRfcHJvcGVydHkoZHAsICJBVFksU0NMSyIsIE5VTEwpOworCXZhbCA9IGdldF9wcm9wZXJ0eShkcCwgIkFUWSxTQ0xLIiwgTlVMTCk7CiAJaWYgKHZhbCAmJiAqdmFsKQogCQlyaW5mby0+cGxsLnNjbGsgPSAoKnZhbCkgLyAxMDsKIAotCXZhbCA9ICh1MzIgKikgZ2V0X3Byb3BlcnR5KGRwLCAiQVRZLE1DTEsiLCBOVUxMKTsKKwl2YWwgPSBnZXRfcHJvcGVydHkoZHAsICJBVFksTUNMSyIsIE5VTEwpOwogCWlmICh2YWwgJiYgKnZhbCkKIAkJcmluZm8tPnBsbC5tY2xrID0gKCp2YWwpIC8gMTA7CiAKQEAgLTIzMjcsOSArMjMyOSw5IEBACiAJCS8qIC0yIGlzIHNwZWNpYWw6IG1lYW5zICBPTiBvbiBtb2JpbGl0eSBjaGlwcyBhbmQgZG8gbm90CiAJCSAqIGNoYW5nZSBvbiBvdGhlcnMKIAkJICovCi0JCXJhZGVvbmZiX3BtX2luaXQocmluZm8sIHJpbmZvLT5pc19tb2JpbGl0eSA/IDEgOiAtMSk7CisJCXJhZGVvbmZiX3BtX2luaXQocmluZm8sIHJpbmZvLT5pc19tb2JpbGl0eSA/IDEgOiAtMSwgaWdub3JlX2Rldmxpc3QsIGZvcmNlX3NsZWVwKTsKIAl9IGVsc2UKLQkJcmFkZW9uZmJfcG1faW5pdChyaW5mbywgZGVmYXVsdF9keW5jbGspOworCQlyYWRlb25mYl9wbV9pbml0KHJpbmZvLCBkZWZhdWx0X2R5bmNsaywgaWdub3JlX2Rldmxpc3QsIGZvcmNlX3NsZWVwKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKIApAQCAtMjQ3Nyw2ICsyNDc5LDEyIEBACiAJCQlmb3JjZV9tZWFzdXJlX3BsbCA9IDE7CiAJCX0gZWxzZSBpZiAoIXN0cm5jbXAodGhpc19vcHQsICJpZ25vcmVfZWRpZCIsIDExKSkgewogCQkJaWdub3JlX2VkaWQgPSAxOworI2lmIGRlZmluZWQoQ09ORklHX1BNKSAmJiBkZWZpbmVkKENPTkZJR19YODYpCisJIAl9IGVsc2UgaWYgKCFzdHJuY21wKHRoaXNfb3B0LCAiZm9yY2Vfc2xlZXAiLCAxMSkpIHsKKwkJCWZvcmNlX3NsZWVwID0gMTsKKwkJfSBlbHNlIGlmICghc3RybmNtcCh0aGlzX29wdCwgImlnbm9yZV9kZXZsaXN0IiwgMTQpKSB7CisJCQlpZ25vcmVfZGV2bGlzdCA9IDE7CisjZW5kaWYKIAkJfSBlbHNlCiAJCQltb2RlX29wdGlvbiA9IHRoaXNfb3B0OwogCX0KQEAgLTI1MzIsMyArMjU0MCw5IEBACiBNT0RVTEVfUEFSTV9ERVNDKHBhbmVsX3lyZXMsICJpbnQ6IHNldCBwYW5lbCB5cmVzIik7CiBtb2R1bGVfcGFyYW0obW9kZV9vcHRpb24sIGNoYXJwLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MobW9kZV9vcHRpb24sICJTcGVjaWZ5IHJlc29sdXRpb24gYXMgXCI8eHJlcz54PHlyZXM+Wy08YnBwPl1bQDxyZWZyZXNoPl1cIiAiKTsKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorbW9kdWxlX3BhcmFtKGZvcmNlX3NsZWVwLCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2Vfc2xlZXAsICJib29sOiBmb3JjZSBEMiBzbGVlcCBtb2RlIG9uIGFsbCBoYXJkd2FyZSIpOworbW9kdWxlX3BhcmFtKGlnbm9yZV9kZXZsaXN0LCBib29sLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2Rldmxpc3QsICJib29sOiBpZ25vcmUgd29ya2Fyb3VuZHMgZm9yIGJ1Z3MgaW4gc3BlY2lmaWMgbGFwdG9wcyIpOworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX21vbml0b3IuYwppbmRleCA5OGMwNWJjLi5lYTUzMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fbW9uaXRvci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9tb25pdG9yLmMKQEAgLTY0LDEzICs2NCwxMyBAQAogewogICAgICAgICBzdGF0aWMgY2hhciAqcHJvcG5hbWVzW10gPSB7ICJERlAsRURJRCIsICJMQ0QsRURJRCIsICJFRElEIiwKIAkJCQkgICAgICJFRElEMSIsICJFRElEMiIsICBOVUxMIH07Ci0JdTggKnBlZGlkID0gTlVMTDsKLQl1OCAqcG10ID0gTlVMTDsKKwljb25zdCB1OCAqcGVkaWQgPSBOVUxMOworCWNvbnN0IHU4ICpwbXQgPSBOVUxMOwogCXU4ICp0bXA7CiAgICAgICAgIGludCBpLCBtdCA9IE1UX05PTkU7ICAKIAkKIAlSVFJBQ0UoImFuYWx5emluZyBPRiBwcm9wZXJ0aWVzLi4uXG4iKTsKLQlwbXQgPSAodTggKilnZXRfcHJvcGVydHkoZHAsICJkaXNwbGF5LXR5cGUiLCBOVUxMKTsKKwlwbXQgPSBnZXRfcHJvcGVydHkoZHAsICJkaXNwbGF5LXR5cGUiLCBOVUxMKTsKIAlpZiAoIXBtdCkKIAkJcmV0dXJuIE1UX05PTkU7CiAJUlRSQUNFKCJkaXNwbGF5LXR5cGU6ICVzXG4iLCBwbXQpOwpAQCAtODksNyArODksNyBAQAogCX0KIAogCWZvciAoaSA9IDA7IHByb3BuYW1lc1tpXSAhPSBOVUxMOyArK2kpIHsKLQkJcGVkaWQgPSAodTggKilnZXRfcHJvcGVydHkoZHAsIHByb3BuYW1lc1tpXSwgTlVMTCk7CisJCXBlZGlkID0gZ2V0X3Byb3BlcnR5KGRwLCBwcm9wbmFtZXNbaV0sIE5VTEwpOwogCQlpZiAocGVkaWQgIT0gTlVMTCkKIAkJCWJyZWFrOwogCX0KQEAgLTEyNCwxNCArMTI0LDE0IEBACiAJCXJldHVybiBNVF9OT05FOwogCiAJaWYgKHJpbmZvLT5oYXNfQ1JUQzIpIHsKLQkJY2hhciAqcG5hbWU7CisJCWNvbnN0IGNoYXIgKnBuYW1lOwogCQlpbnQgbGVuLCBzZWNvbmQgPSAwOwogCiAJCWRwID0gZHAtPmNoaWxkOwogCQlkbyB7CiAJCQlpZiAoIWRwKQogCQkJCXJldHVybiBNVF9OT05FOwotCQkJcG5hbWUgPSAoY2hhciAqKWdldF9wcm9wZXJ0eShkcCwgIm5hbWUiLCBOVUxMKTsKKwkJCXBuYW1lID0gZ2V0X3Byb3BlcnR5KGRwLCAibmFtZSIsIE5VTEwpOwogCQkJaWYgKCFwbmFtZSkKIAkJCQlyZXR1cm4gTVRfTk9ORTsKIAkJCWxlbiA9IHN0cmxlbihwbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25fcG0uYyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCmluZGV4IGM3MDkxNzYuLmUzMDhlZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jCkBAIC0yNyw2ICsyNyw5OSBAQAogCiAjaW5jbHVkZSAiYXRpX2lkcy5oIgogCitzdGF0aWMgdm9pZCByYWRlb25fcmVpbml0aWFsaXplX00xMChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOworCisvKgorICogV29ya2Fyb3VuZHMgZm9yIGJ1Z3MgaW4gUEMgbGFwdG9wczoKKyAqIC0gZW5hYmxlIEQyIHNsZWVwIGluIHNvbWUgSUJNIFRoaW5rcGFkcworICogLSBzcGVjaWFsIGNhc2UgZm9yIFNhbXN1bmcgUDM1CisgKgorICogV2hpdGVsaXN0IGJ5IHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlIGJlY2F1c2UKKyAqIGl0cyB0aGUgc3Vic3lzdGVtIHZlbmRvcidzIGZhdWx0IQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KQorc3RydWN0IHJhZGVvbl9kZXZpY2VfaWQgeworICAgICAgICBjb25zdCBjaGFyICppZGVudDsgICAgICAgICAgICAgICAgICAgICAvKiAoYXJiaXRyYXJ5KSBOYW1lICovCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IHN1YnN5c3RlbV92ZW5kb3I7IC8qIFN1YnN5c3RlbSBWZW5kb3IgSUQgKi8KKyAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgc3Vic3lzdGVtX2RldmljZTsgLyogU3Vic3lzdGVtIERldmljZSBJRCAqLworCWNvbnN0IGVudW0gcmFkZW9uX3BtX21vZGUgcG1fbW9kZV9tb2RpZmllcjsgLyogbW9kaWZ5IHBtX21vZGUgKi8KKwljb25zdCByZWluaXRfZnVuY3Rpb25fcHRyIG5ld19yZWluaXRfZnVuYzsgICAvKiBjaGFuZ2VkIHJlaW5pdF9mdW5jICovCit9OworCisjZGVmaW5lIEJVR0ZJWChtb2RlbCwgc3YsIHNkLCBwbSwgZm4pIHsgXAorCS5pZGVudCA9IG1vZGVsLCBcCisJLnN1YnN5c3RlbV92ZW5kb3IgPSBzdiwgXAorCS5zdWJzeXN0ZW1fZGV2aWNlID0gc2QsIFwKKwkucG1fbW9kZV9tb2RpZmllciA9IHBtLCBcCisJLm5ld19yZWluaXRfZnVuYyAgPSBmbiAgXAorfQorCitzdGF0aWMgc3RydWN0IHJhZGVvbl9kZXZpY2VfaWQgcmFkZW9uX3dvcmthcm91bmRfbGlzdFtdID0geworCUJVR0ZJWCgiSUJNIFRoaW5rcGFkIFIzMiIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCAweDE5MDUsCisJICAgICAgIHJhZGVvbl9wbV9kMiwgTlVMTCksCisJQlVHRklYKCJJQk0gVGhpbmtwYWQgUjQwIiwKKwkgICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDUyNiwKKwkgICAgICAgcmFkZW9uX3BtX2QyLCBOVUxMKSwKKwlCVUdGSVgoIklCTSBUaGlua3BhZCBSNDAiLAorCSAgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNTI3LAorCSAgICAgICByYWRlb25fcG1fZDIsIE5VTEwpLAorCUJVR0ZJWCgiSUJNIFRoaW5rcGFkIFI1MC9SNTEvVDQwL1Q0MSIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCAweDA1MzEsCisJICAgICAgIHJhZGVvbl9wbV9kMiwgTlVMTCksCisJQlVHRklYKCJJQk0gVGhpbmtwYWQgUjUxL1Q0MC9UNDEvVDQyIiwKKwkgICAgICAgUENJX1ZFTkRPUl9JRF9JQk0sIDB4MDUzMCwKKwkgICAgICAgcmFkZW9uX3BtX2QyLCBOVUxMKSwKKwlCVUdGSVgoIklCTSBUaGlua3BhZCBUMzAiLAorCSAgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNTE3LAorCSAgICAgICByYWRlb25fcG1fZDIsIE5VTEwpLAorCUJVR0ZJWCgiSUJNIFRoaW5rcGFkIFQ0MHAiLAorCSAgICAgICBQQ0lfVkVORE9SX0lEX0lCTSwgMHgwNTRkLAorCSAgICAgICByYWRlb25fcG1fZDIsIE5VTEwpLAorCUJVR0ZJWCgiSUJNIFRoaW5rcGFkIFQ0MiIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCAweDA1NTAsCisJICAgICAgIHJhZGVvbl9wbV9kMiwgTlVMTCksCisJQlVHRklYKCJJQk0gVGhpbmtwYWQgWDMxL1gzMiIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfSUJNLCAweDA1MmYsCisJICAgICAgIHJhZGVvbl9wbV9kMiwgTlVMTCksCisJQlVHRklYKCJTYW1zdW5nIFAzNSIsCisJICAgICAgIFBDSV9WRU5ET1JfSURfU0FNU1VORywgMHhjMDBjLAorCSAgICAgICByYWRlb25fcG1fb2ZmLCByYWRlb25fcmVpbml0aWFsaXplX00xMCksCisJeyAuaWRlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBpbnQgcmFkZW9uX2FwcGx5X3dvcmthcm91bmRzKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZV9pZCAqaWQ7CisKKwlmb3IgKGlkID0gcmFkZW9uX3dvcmthcm91bmRfbGlzdDsgaWQtPmlkZW50ICE9IE5VTEw7IGlkKysgKQorCQlpZiAoKGlkLT5zdWJzeXN0ZW1fdmVuZG9yID09IHJpbmZvLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICkgJiYKKwkJICAgIChpZC0+c3Vic3lzdGVtX2RldmljZSA9PSByaW5mby0+cGRldi0+c3Vic3lzdGVtX2RldmljZSApKSB7CisKKwkJCS8qIHdlIGZvdW5kIGEgZGV2aWNlIHRoYXQgcmVxdWlyZXMgd29ya2Fyb3VuZCAqLworCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhZGVvbmZiOiAlcyBkZXRlY3RlZCIKKwkJCSAgICAgICAiLCBlbmFibGluZyB3b3JrYXJvdW5kXG4iLCBpZC0+aWRlbnQpOworCisJCQlyaW5mby0+cG1fbW9kZSB8PSBpZC0+cG1fbW9kZV9tb2RpZmllcjsKKworCQkJaWYgKGlkLT5uZXdfcmVpbml0X2Z1bmMgIT0gTlVMTCkKKwkJCQlyaW5mby0+cmVpbml0X2Z1bmMgPSBpZC0+bmV3X3JlaW5pdF9mdW5jOworCisJCQlyZXR1cm4gMTsKKwkJfQorCXJldHVybiAwOyAgLyogbm90IGZvdW5kICovCit9CisKKyNlbHNlICAvKiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfWDg2KSAqLworc3RhdGljIGlubGluZSBpbnQgcmFkZW9uX2FwcGx5X3dvcmthcm91bmRzKHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbykKK3sKKyAgICAgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUE0pICYmIGRlZmluZWQoQ09ORklHX1g4NikgKi8KKworCisKIHN0YXRpYyB2b2lkIHJhZGVvbl9wbV9kaXNhYmxlX2R5bmFtaWNfbW9kZShzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCiB7CiAJdTMyIHRtcDsKQEAgLTg1MiwxOCArOTQ1LDI2IEBACiAJLyogYmVjYXVzZSBib3RoIElOUExMIGFuZCBPVVRQTEwgdGFrZSB0aGUgc2FtZSBsb2NrLCB0aGF0J3Mgd2h5LiAqLwogCXRtcCA9IElOUExMKCBwbGxNQ0xLX01JU0MpIHwgTUNMS19NSVNDX19FTl9NQ0xLX1RSSVNUQVRFX0lOX1NVU1BFTkQ7CiAJT1VUUExMKCBwbGxNQ0xLX01JU0MsIHRtcCk7Ci0JCi0JLyogQUdQIFBMTCBjb250cm9sICovCi0JaWYgKHJpbmZvLT5mYW1pbHkgPD0gQ0hJUF9GQU1JTFlfUlYyODApIHsKLQkJT1VUUkVHKEJVU19DTlRMMSwgSU5SRUcoQlVTX0NOVEwxKSB8ICBCVVNfQ05UTDFfX0FHUENMS19WQUxJRCk7CiAKLQkJT1VUUkVHKEJVU19DTlRMMSwKLQkJICAgICAgIChJTlJFRyhCVVNfQ05UTDEpICYgfkJVU19DTlRMMV9fTU9CSUxFX1BMQVRGT1JNX1NFTF9NQVNLKQotCQkgICAgICAgfCAoMjw8QlVTX0NOVEwxX19NT0JJTEVfUExBVEZPUk1fU0VMX19TSElGVCkpOwkvLyA0NDBCWAotCX0gZWxzZSB7Ci0JCU9VVFJFRyhCVVNfQ05UTDEsIElOUkVHKEJVU19DTlRMMSkpOwotCQlPVVRSRUcoQlVTX0NOVEwxLCAoSU5SRUcoQlVTX0NOVEwxKSAmIH4weDQwMDApIHwgMHg4MDAwKTsKKwkvKiBCVVNfQ05UTDFfX01PQklMRV9QTEFUT1JNX1NFTCBzZXR0aW5nIGlzIG5vcnRoYnJpZGdlIGNoaXBzZXQKKwkgKiBhbmQgcmFkZW9uIGNoaXAgZGVwZW5kZW50LiBUaHVzIHdlIG9ubHkgZW5hYmxlIGl0IG9uIE1hYyBmb3IKKwkgKiBub3cgKHVudGlsIHdlIGdldCBtb3JlIGluZm8gb24gaG93IHRvIGNvbXB1dGUgdGhlIGNvcnJlY3QKKwkgKiB2YWx1ZSBmb3IgdmFyaW91cyBYODYgYnJpZGdlcykuCisJICovCisjaWZkZWYgQ09ORklHX1BQQ19QTUFDCisJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CisJCS8qIEFHUCBQTEwgY29udHJvbCAqLworCQlpZiAocmluZm8tPmZhbWlseSA8PSBDSElQX0ZBTUlMWV9SVjI4MCkgeworCQkJT1VUUkVHKEJVU19DTlRMMSwgSU5SRUcoQlVTX0NOVEwxKSB8ICBCVVNfQ05UTDFfX0FHUENMS19WQUxJRCk7CisJCQlPVVRSRUcoQlVTX0NOVEwxLAorCQkJICAgICAgIChJTlJFRyhCVVNfQ05UTDEpICYgfkJVU19DTlRMMV9fTU9CSUxFX1BMQVRGT1JNX1NFTF9NQVNLKQorCQkJICAgICAgIHwgKDI8PEJVU19DTlRMMV9fTU9CSUxFX1BMQVRGT1JNX1NFTF9fU0hJRlQpKTsJLy8gNDQwQlgKKwkJfSBlbHNlIHsKKwkJCU9VVFJFRyhCVVNfQ05UTDEsIElOUkVHKEJVU19DTlRMMSkpOworCQkJT1VUUkVHKEJVU19DTlRMMSwgKElOUkVHKEJVU19DTlRMMSkgJiB+MHg0MDAwKSB8IDB4ODAwMCk7CisJCX0KIAl9CisjZW5kaWYKIAogCU9VVFJFRyhDUlRDX09GRlNFVF9DTlRMLCAoSU5SRUcoQ1JUQ19PRkZTRVRfQ05UTCkKIAkJCQkgICYgfkNSVENfT0ZGU0VUX0NOVExfX0NSVENfU1RFUkVPX1NZTkNfT1VUX0VOKSk7CkBAIC0xMTY3LDcgKzEyNjgsNyBAQAogCQkJICAweDIxMzIwMDMyLCAweGExMzIwMDMyLCAweDIxMzIwMDMyLCAweGZmZmZmZmZmLAogCQkJICAweDMxMzIwMDMyIH07CiAKLQkJdTMyICptcnRhYmxlID0gZGVmYXVsdF9tcnRhYmxlOworCQljb25zdCB1MzIgKm1ydGFibGUgPSBkZWZhdWx0X21ydGFibGU7CiAJCWludCBpLCBtcnRhYmxlX3NpemUgPSBBUlJBWV9TSVpFKGRlZmF1bHRfbXJ0YWJsZSk7CiAKIAkJbWRlbGF5KDMwKTsKQEAgLTExODYsNyArMTI4Nyw3IEBACiAJCWlmIChyaW5mby0+b2Zfbm9kZSAhPSBOVUxMKSB7CiAJCQlpbnQgc2l6ZTsKIAotCQkJbXJ0YWJsZSA9ICh1MzIgKilnZXRfcHJvcGVydHkocmluZm8tPm9mX25vZGUsICJBVFksTVJUIiwgJnNpemUpOworCQkJbXJ0YWJsZSA9IGdldF9wcm9wZXJ0eShyaW5mby0+b2Zfbm9kZSwgIkFUWSxNUlQiLCAmc2l6ZSk7CiAJCQlpZiAobXJ0YWJsZSkKIAkJCQltcnRhYmxlX3NpemUgPSBzaXplID4+IDI7CiAJCQllbHNlCkBAIC0yNzEzLDcgKzI4MTQsNyBAQAogCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXZvaWQgcmFkZW9uZmJfcG1faW5pdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8sIGludCBkeW5jbGspCit2b2lkIHJhZGVvbmZiX3BtX2luaXQoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvLCBpbnQgZHluY2xrLCBpbnQgaWdub3JlX2Rldmxpc3QsIGludCBmb3JjZV9zbGVlcCkKIHsKIAkvKiBGaW5kIFBNIHJlZ2lzdGVycyBpbiBjb25maWcgc3BhY2UgaWYgYW55Ki8KIAlyaW5mby0+cG1fcmVnID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShyaW5mby0+cGRldiwgUENJX0NBUF9JRF9QTSk7CkBAIC0yNzI5LDIyICsyODMwLDEzIEBACiAJfQogCiAjaWYgZGVmaW5lZChDT05GSUdfUE0pCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpCiAJLyogQ2hlY2sgaWYgd2UgY2FuIHBvd2VyIG1hbmFnZSBvbiBzdXNwZW5kL3Jlc3VtZS4gV2UgY2FuIGRvCiAJICogRDIgb24gTTYsIE03IGFuZCBNOSwgYW5kIHdlIGNhbiByZXN1bWUgZnJvbSBEMyBjb2xkIGEgZmV3IG90aGVyCiAJICogIk1hYyIgY2FyZHMsIGJ1dCB0aGF0J3MgYWxsLiBXZSBuZWVkIG1vcmUgaW5mb3MgYWJvdXQgd2hhdCB0aGUKIAkgKiBCSU9TIGRvZXMgdGhvLiBSaWdodCBub3csIGFsbCB0aGlzIFBNIHN0dWZmIGlzIHBtYWMtb25seSBmb3IgdGhhdAogCSAqIHJlYXNvbi4gLS1CZW5ICiAJICovCi0JLyogU3BlY2lhbCBjYXNlIGZvciBTYW1zdW5nIFAzNSBsYXB0b3BzCi0JICovCi0JaWYgKChyaW5mby0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRJKSAmJgotCSAgICAocmluZm8tPnBkZXYtPmRldmljZSA9PSBQQ0lfQ0hJUF9SVjM1MF9OUCkgJiYKLQkgICAgKHJpbmZvLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0FNU1VORykgJiYKLQkgICAgKHJpbmZvLT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4YzAwYykpIHsKLQkJcmluZm8tPnJlaW5pdF9mdW5jID0gcmFkZW9uX3JlaW5pdGlhbGl6ZV9NMTA7Ci0JCXJpbmZvLT5wbV9tb2RlIHw9IHJhZGVvbl9wbV9vZmY7Ci0JfQotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKQogCWlmIChtYWNoaW5lX2lzKHBvd2VybWFjKSAmJiByaW5mby0+b2Zfbm9kZSkgewogCQlpZiAocmluZm8tPmlzX21vYmlsaXR5ICYmIHJpbmZvLT5wbV9yZWcgJiYKIAkJICAgIHJpbmZvLT5mYW1pbHkgPD0gQ0hJUF9GQU1JTFlfUlYyNTApCkBAIC0yNzkwLDYgKzI4ODIsMTggQEAKIAl9CiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUFBDX1BNQUMpICovCiAjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfUE0pICovCisKKwlpZiAoaWdub3JlX2Rldmxpc3QpCisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAicmFkZW9uZmI6IHNraXBwaW5nIHRlc3QgZm9yIGRldmljZSB3b3JrYXJvdW5kc1xuIik7CisJZWxzZQorCQlyYWRlb25fYXBwbHlfd29ya2Fyb3VuZHMocmluZm8pOworCisJaWYgKGZvcmNlX3NsZWVwKSB7CisJCXByaW50ayhLRVJOX0RFQlVHCisJCSAgICAgICAicmFkZW9uZmI6IGZvcmNlZnVsbHkgZW5hYmxpbmcgRDIgc2xlZXAgbW9kZVxuIik7CisJCXJpbmZvLT5wbV9tb2RlIHw9IHJhZGVvbl9wbV9kMjsKKwl9CiB9CiAKIHZvaWQgcmFkZW9uZmJfcG1fZXhpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uZmIuaAppbmRleCAzODY1N2IyLi5kNWZmMjI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2F0eS9yYWRlb25mYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbmZiLmgKQEAgLTI3Myw2ICsyNzMsOCBAQAogCXJhZGVvbl9wbV9vZmYJPSAweDAwMDAwMDAyLAkvKiBDYW4gcmVzdW1lIGZyb20gRDMgY29sZCAqLwogfTsKIAordHlwZWRlZiB2b2lkICgqcmVpbml0X2Z1bmN0aW9uX3B0cikoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKKwogc3RydWN0IHJhZGVvbmZiX2luZm8gewogCXN0cnVjdCBmYl9pbmZvCQkqaW5mbzsKIApAQCAtMzM4LDcgKzM0MCw3IEBACiAJaW50CQkJZHluY2xrOwogCWludAkJCW5vX3NjaGVkdWxlOwogCWVudW0gcmFkZW9uX3BtX21vZGUJcG1fbW9kZTsKLQl2b2lkCQkJKCpyZWluaXRfZnVuYykoc3RydWN0IHJhZGVvbmZiX2luZm8gKnJpbmZvKTsKKwlyZWluaXRfZnVuY3Rpb25fcHRyICAgICByZWluaXRfZnVuYzsKIAogCS8qIExvY2sgb24gcmVnaXN0ZXIgYWNjZXNzICovCiAJc3BpbmxvY2tfdAkJcmVnX2xvY2s7CkBAIC02MDAsNyArNjAyLDcgQEAKIC8qIFBNIEZ1bmN0aW9ucyAqLwogZXh0ZXJuIGludCByYWRlb25mYl9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIGV4dGVybiBpbnQgcmFkZW9uZmJfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Ci1leHRlcm4gdm9pZCByYWRlb25mYl9wbV9pbml0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IGR5bmNsayk7CitleHRlcm4gdm9pZCByYWRlb25mYl9wbV9pbml0KHN0cnVjdCByYWRlb25mYl9pbmZvICpyaW5mbywgaW50IGR5bmNsaywgaW50IGlnbm9yZV9kZXZsaXN0LCBpbnQgZm9yY2Vfc2xlZXApOwogZXh0ZXJuIHZvaWQgcmFkZW9uZmJfcG1fZXhpdChzdHJ1Y3QgcmFkZW9uZmJfaW5mbyAqcmluZm8pOwogCiAvKiBNb25pdG9yIHByb2JlIGZ1bmN0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9hdTExMDBmYi5jIGIvZHJpdmVycy92aWRlby9hdTExMDBmYi5jCmluZGV4IGE5MmE5MWYuLmYyNWQ1ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXUxMTAwZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2F1MTEwMGZiLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJCQlpbmZvLT5maXgudmlzdWFsID0gRkJfVklTVUFMX1RSVUVDT0xPUjsKIAkJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPnZhci54cmVzX3ZpcnR1YWwgPDwgMTsgLyogZGVwdGg9MTYgKi8KLQl9CisJCX0KIAl9IGVsc2UgewogCQkvKiBtb25vICovCiAJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfTU9OTzEwOwpAQCAtMTY0LDIwICsxNjQsMTYgQEAKIAl9CiAKIAlpbmZvLT5zY3JlZW5fc2l6ZSA9IGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIGluZm8tPnZhci55cmVzX3ZpcnR1YWw7CisJaW5mby0+dmFyLnJvdGF0ZSA9ICgoZmJkZXYtPnBhbmVsLT5jb250cm9sX2Jhc2UmTENEX0NPTlRST0xfU01fTUFTSykgXAorCQkJCT4+IExDRF9DT05UUk9MX1NNX0JJVCkgKiA5MDsKIAogCS8qIERldGVybWluZSBCUFAgbW9kZSBhbmQgZm9ybWF0ICovCi0JZmJkZXYtPnJlZ3MtPmxjZF9jb250cm9sID0gZmJkZXYtPnBhbmVsLT5jb250cm9sX2Jhc2UgfAotCQkJICAgICgoaW5mby0+dmFyLnJvdGF0ZS85MCkgPDwgTENEX0NPTlRST0xfU01fQklUKTsKLQorCWZiZGV2LT5yZWdzLT5sY2RfY29udHJvbCA9IGZiZGV2LT5wYW5lbC0+Y29udHJvbF9iYXNlOworCWZiZGV2LT5yZWdzLT5sY2RfaG9yenRpbWluZyA9IGZiZGV2LT5wYW5lbC0+aG9yenRpbWluZzsKKwlmYmRldi0+cmVncy0+bGNkX3ZlcnR0aW1pbmcgPSBmYmRldi0+cGFuZWwtPnZlcnR0aW1pbmc7CisJZmJkZXYtPnJlZ3MtPmxjZF9jbGtjb250cm9sID0gZmJkZXYtPnBhbmVsLT5jbGtjb250cm9sX2Jhc2U7CiAJZmJkZXYtPnJlZ3MtPmxjZF9pbnRlbmFibGUgPSAwOwogCWZiZGV2LT5yZWdzLT5sY2RfaW50c3RhdHVzID0gMDsKLQotCWZiZGV2LT5yZWdzLT5sY2RfaG9yenRpbWluZyA9IGZiZGV2LT5wYW5lbC0+aG9yenRpbWluZzsKLQotCWZiZGV2LT5yZWdzLT5sY2RfdmVydHRpbWluZyA9IGZiZGV2LT5wYW5lbC0+dmVydHRpbWluZzsKLQotCWZiZGV2LT5yZWdzLT5sY2RfY2xrY29udHJvbCA9IGZiZGV2LT5wYW5lbC0+Y2xrY29udHJvbF9iYXNlOwotCiAJZmJkZXYtPnJlZ3MtPmxjZF9kbWFhZGRyMCA9IExDRF9ETUFfU0FfTihmYmRldi0+ZmJfcGh5cyk7CiAKIAlpZiAocGFuZWxfaXNfZHVhbChmYmRldi0+cGFuZWwpKSB7CkBAIC0yMDYsNiArMjAyLDggQEAKIAogCS8qIFJlc3VtZSBjb250cm9sbGVyICovCiAJZmJkZXYtPnJlZ3MtPmxjZF9jb250cm9sIHw9IExDRF9DT05UUk9MX0dPOworCW1kZWxheSgxMCk7CisJYXUxMTAwZmJfZmJfYmxhbmsoVkVTQV9OT19CTEFOS0lORywgaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDAyMmY5ZDMuLjAyZjE1MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMTAsNyArMTAsNyBAQAogCiBjb25maWcgQkFDS0xJR0hUX0NMQVNTX0RFVklDRQogICAgICAgICB0cmlzdGF0ZSAiTG93bGV2ZWwgQmFja2xpZ2h0IGNvbnRyb2xzIgotCWRlcGVuZHMgb24gQkFDS0xJR0hUX0xDRF9TVVBQT1JUICYmIEZCCisJZGVwZW5kcyBvbiBCQUNLTElHSFRfTENEX1NVUFBPUlQKIAlkZWZhdWx0IG0KIAloZWxwCiAJICBUaGlzIGZyYW1ld29yayBhZGRzIHN1cHBvcnQgZm9yIGxvdy1sZXZlbCBjb250cm9sIG9mIHRoZSBMQ0QKQEAgLTI2LDcgKzI2LDcgQEAKIAogY29uZmlnIExDRF9DTEFTU19ERVZJQ0UKICAgICAgICAgdHJpc3RhdGUgIkxvd2xldmVsIExDRCBjb250cm9scyIKLQlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9MQ0RfU1VQUE9SVCAmJiBGQgorCWRlcGVuZHMgb24gQkFDS0xJR0hUX0xDRF9TVVBQT1JUCiAJZGVmYXVsdCBtCiAJaGVscAogCSAgVGhpcyBmcmFtZXdvcmsgYWRkcyBzdXBwb3J0IGZvciBsb3ctbGV2ZWwgY29udHJvbCBvZiBMQ0QuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbWRhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvbWRhY29uLmMKaW5kZXggNTJlZDEyYi4uZWI0ZDAzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL21kYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9tZGFjb24uYwpAQCAtMTk3LDcgKzE5Nyw3IEBACiBfX3NldHVwKCJtZGFjb249IiwgbWRhY29uX3NldHVwKTsKICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCBtZGFfZGV0ZWN0KHZvaWQpCitzdGF0aWMgaW50IG1kYV9kZXRlY3Qodm9pZCkKIHsKIAlpbnQgY291bnQ9MDsKIAl1MTYgKnAsIHBfc2F2ZTsKQEAgLTI4Miw3ICsyODIsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgbWRhX2luaXRpYWxpemUodm9pZCkKK3N0YXRpYyB2b2lkIG1kYV9pbml0aWFsaXplKHZvaWQpCiB7CiAJd3JpdGVfbWRhX2IoOTcsIDB4MDApOwkJLyogaG9yaXpvbnRhbCB0b3RhbCAqLwogCXdyaXRlX21kYV9iKDgwLCAweDAxKTsJCS8qIGhvcml6b250YWwgZGlzcGxheWVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZiX25vdGlmeS5jIGIvZHJpdmVycy92aWRlby9mYl9ub3RpZnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzAyMDM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9mYl9ub3RpZnkuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogIGxpbnV4L2RyaXZlcnMvdmlkZW8vZmJfbm90aWZ5LmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2IEFudG9uaW5vIERhcGxhcyA8YWRhcGxhc0Bwb2wubmV0PgorICoKKyAqCTIwMDEgLSBEb2N1bWVudGVkIHdpdGggRG9jQm9vaworICoJLSBCcmFkIERvdWdsYXMgPGJyYWRAbmVydW8uY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQoZmJfbm90aWZpZXJfbGlzdCk7CisKKy8qKgorICoJZmJfcmVnaXN0ZXJfY2xpZW50IC0gcmVnaXN0ZXIgYSBjbGllbnQgbm90aWZpZXIKKyAqCUBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCisgKi8KK2ludCBmYl9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmZiX25vdGlmaWVyX2xpc3QsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0woZmJfcmVnaXN0ZXJfY2xpZW50KTsKKworLyoqCisgKglmYl91bnJlZ2lzdGVyX2NsaWVudCAtIHVucmVnaXN0ZXIgYSBjbGllbnQgbm90aWZpZXIKKyAqCUBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCisgKi8KK2ludCBmYl91bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZmYl9ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MKGZiX3VucmVnaXN0ZXJfY2xpZW50KTsKKworLyoqCisgKiBmYl9ub3RpZmllcl9jYWxsX2NoYWluIC0gbm90aWZ5IGNsaWVudHMgb2YgZmJfZXZlbnRzCisgKgorICovCitpbnQgZmJfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZmJfbm90aWZpZXJfbGlzdCwgdmFsLCB2KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGZiX25vdGlmaWVyX2NhbGxfY2hhaW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9mYm1lbS5jIGIvZHJpdmVycy92aWRlby9mYm1lbS5jCmluZGV4IDRmYzlkZjQuLjE3OTYxZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZmJtZW0uYworKysgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKQEAgLTUyLDcgKzUyLDYgQEAKIAogI2RlZmluZSBGQlBJWE1BUFNJWkUJKDEwMjQgKiA4KQogCi1zdGF0aWMgQkxPQ0tJTkdfTk9USUZJRVJfSEVBRChmYl9ub3RpZmllcl9saXN0KTsKIHN0cnVjdCBmYl9pbmZvICpyZWdpc3RlcmVkX2ZiW0ZCX01BWF07CiBpbnQgbnVtX3JlZ2lzdGVyZWRfZmI7CiAKQEAgLTc5MSw4ICs3OTAsNyBAQAogCiAJCSAgICBldmVudC5pbmZvID0gaW5mbzsKIAkJICAgIGV2ZW50LmRhdGEgPSAmbW9kZTE7Ci0JCSAgICByZXQgPSBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LAotCQkJCQkgICAgICBGQl9FVkVOVF9NT0RFX0RFTEVURSwgJmV2ZW50KTsKKwkJICAgIHJldCA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfTU9ERV9ERUxFVEUsICZldmVudCk7CiAJCX0KIAogCQlpZiAoIXJldCkKQEAgLTgzNyw4ICs4MzUsNyBAQAogCiAJCQkJaW5mby0+ZmxhZ3MgJj0gfkZCSU5GT19NSVNDX1VTRVJFVkVOVDsKIAkJCQlldmVudC5pbmZvID0gaW5mbzsKLQkJCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LAotCQkJCQkJZXZudCwgJmV2ZW50KTsKKwkJCQlmYl9ub3RpZmllcl9jYWxsX2NoYWluKGV2bnQsICZldmVudCk7CiAJCQl9CiAJCX0KIAl9CkBAIC04NjEsOCArODU4LDcgQEAKIAogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZXZlbnQuZGF0YSA9ICZibGFuazsKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZmJfbm90aWZpZXJfbGlzdCwKLQkJCQlGQl9FVkVOVF9CTEFOSywgJmV2ZW50KTsKKwkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9CTEFOSywgJmV2ZW50KTsKIAl9CiAKICAJcmV0dXJuIHJldDsKQEAgLTkzMyw4ICs5MjksNyBAQAogCQljb24yZmIuZnJhbWVidWZmZXIgPSAtMTsKIAkJZXZlbnQuaW5mbyA9IGluZm87CiAJCWV2ZW50LmRhdGEgPSAmY29uMmZiOwotCQlibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LAotCQkJCSAgICBGQl9FVkVOVF9HRVRfQ09OU09MRV9NQVAsICZldmVudCk7CisJCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfR0VUX0NPTlNPTEVfTUFQLCAmZXZlbnQpOwogCQlyZXR1cm4gY29weV90b191c2VyKGFyZ3AsICZjb24yZmIsCiAJCQkJICAgIHNpemVvZihjb24yZmIpKSA/IC1FRkFVTFQgOiAwOwogCWNhc2UgRkJJT1BVVF9DT04yRkJNQVA6CkBAIC05NTIsOSArOTQ3LDggQEAKIAkJICAgIHJldHVybiAtRUlOVkFMOwogCQlldmVudC5pbmZvID0gaW5mbzsKIAkJZXZlbnQuZGF0YSA9ICZjb24yZmI7Ci0JCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LAotCQkJCQkgICBGQl9FVkVOVF9TRVRfQ09OU09MRV9NQVAsCi0JCQkJCSAgICZldmVudCk7CisJCXJldHVybiBmYl9ub3RpZmllcl9jYWxsX2NoYWluKEZCX0VWRU5UX1NFVF9DT05TT0xFX01BUCwKKwkJCQkJICAgICAgJmV2ZW50KTsKIAljYXNlIEZCSU9CTEFOSzoKIAkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwogCQlpbmZvLT5mbGFncyB8PSBGQklORk9fTUlTQ19VU0VSRVZFTlQ7CkBAIC0xMzMwLDggKzEzMjQsNyBAQAogCXJlZ2lzdGVyZWRfZmJbaV0gPSBmYl9pbmZvOwogCiAJZXZlbnQuaW5mbyA9IGZiX2luZm87Ci0JYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZmJfbm90aWZpZXJfbGlzdCwKLQkJCSAgICBGQl9FVkVOVF9GQl9SRUdJU1RFUkVELCAmZXZlbnQpOworCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfRkJfUkVHSVNURVJFRCwgJmV2ZW50KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2NSwzMCArMTM1OCwxMSBAQAogCWZiX2NsZWFudXBfY2xhc3NfZGV2aWNlKGZiX2luZm8pOwogCWNsYXNzX2RldmljZV9kZXN0cm95KGZiX2NsYXNzLCBNS0RFVihGQl9NQUpPUiwgaSkpOwogCWV2ZW50LmluZm8gPSBmYl9pbmZvOwotCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmZiX25vdGlmaWVyX2xpc3QsCi0JCQkJICAgICBGQl9FVkVOVF9GQl9VTlJFR0lTVEVSRUQsICZldmVudCk7CisJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9GQl9VTlJFR0lTVEVSRUQsICZldmVudCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICoJZmJfcmVnaXN0ZXJfY2xpZW50IC0gcmVnaXN0ZXIgYSBjbGllbnQgbm90aWZpZXIKLSAqCUBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCi0gKi8KLWludCBmYl9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKLXsKLQlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmZiX25vdGlmaWVyX2xpc3QsIG5iKTsKLX0KLQotLyoqCi0gKglmYl91bnJlZ2lzdGVyX2NsaWVudCAtIHVucmVnaXN0ZXIgYSBjbGllbnQgbm90aWZpZXIKLSAqCUBuYjogbm90aWZpZXIgYmxvY2sgdG8gY2FsbGJhY2sgb24gZXZlbnRzCi0gKi8KLWludCBmYl91bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQotewotCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZmYl9ub3RpZmllcl9saXN0LCBuYik7Ci19Ci0KLS8qKgogICoJZmJfc2V0X3N1c3BlbmQgLSBsb3cgbGV2ZWwgZHJpdmVyIHNpZ25hbHMgc3VzcGVuZAogICoJQGluZm86IGZyYW1lYnVmZmVyIGFmZmVjdGVkCiAgKglAc3RhdGU6IDAgPSByZXN1bWluZywgIT0wID0gc3VzcGVuZGluZwpAQCAtMTQwMywxMyArMTM3NywxMSBAQAogCiAJZXZlbnQuaW5mbyA9IGluZm87CiAJaWYgKHN0YXRlKSB7Ci0JCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmZiX25vdGlmaWVyX2xpc3QsCi0JCQkJRkJfRVZFTlRfU1VTUEVORCwgJmV2ZW50KTsKKwkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9TVVNQRU5ELCAmZXZlbnQpOwogCQlpbmZvLT5zdGF0ZSA9IEZCSU5GT19TVEFURV9TVVNQRU5ERUQ7CiAJfSBlbHNlIHsKIAkJaW5mby0+c3RhdGUgPSBGQklORk9fU1RBVEVfUlVOTklORzsKLQkJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmZmJfbm90aWZpZXJfbGlzdCwKLQkJCQlGQl9FVkVOVF9SRVNVTUUsICZldmVudCk7CisJCWZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfUkVTVU1FLCAmZXZlbnQpOwogCX0KIH0KIApAQCAtMTQ4MCw5ICsxNDUyLDcgQEAKIAogCWlmICghbGlzdF9lbXB0eSgmaW5mby0+bW9kZWxpc3QpKSB7CiAJCWV2ZW50LmluZm8gPSBpbmZvOwotCQllcnIgPSBibG9ja2luZ19ub3RpZmllcl9jYWxsX2NoYWluKCZmYl9ub3RpZmllcl9saXN0LAotCQkJCQkgICBGQl9FVkVOVF9ORVdfTU9ERUxJU1QsCi0JCQkJCSAgICZldmVudCk7CisJCWVyciA9IGZiX25vdGlmaWVyX2NhbGxfY2hhaW4oRkJfRVZFTlRfTkVXX01PREVMSVNULCAmZXZlbnQpOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNTk0LDggKzE1NjQsNiBAQAogRVhQT1JUX1NZTUJPTChmYl9wYW5fZGlzcGxheSk7CiBFWFBPUlRfU1lNQk9MKGZiX2dldF9idWZmZXJfb2Zmc2V0KTsKIEVYUE9SVF9TWU1CT0woZmJfc2V0X3N1c3BlbmQpOwotRVhQT1JUX1NZTUJPTChmYl9yZWdpc3Rlcl9jbGllbnQpOwotRVhQT1JUX1NZTUJPTChmYl91bnJlZ2lzdGVyX2NsaWVudCk7CiBFWFBPUlRfU1lNQk9MKGZiX2dldF9vcHRpb25zKTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9pbWFjZmIuYyBiL2RyaXZlcnMvdmlkZW8vaW1hY2ZiLmMKaW5kZXggZmYyMzNiOC4uMThlYTRhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbWFjZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2ltYWNmYi5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvZWZpLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtMjgsNyArMzAsNyBAQAogCU1fSTIwLAogCU1fTUlOSSwKIAlNX01BQ0JPT0ssCi0JTV9ORVcKKwlNX1VOS05PV04KIH0gTUFDX1RZUEU7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNTIsMTAgKzU0LDM2IEBACiB9OwogCiBzdGF0aWMgaW50IGludmVyc2U7Ci1zdGF0aWMgaW50IG1vZGVsCQk9IE1fTkVXOworc3RhdGljIGludCBtb2RlbAkJPSBNX1VOS05PV047CiBzdGF0aWMgaW50IG1hbnVhbF9oZWlnaHQ7CiBzdGF0aWMgaW50IG1hbnVhbF93aWR0aDsKIAorc3RhdGljIGludCBzZXRfc3lzdGVtKHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJpbWFjZmI6ICVzIGRldGVjdGVkIC0gc2V0IHN5c3RlbSB0byAlbGRcbiIsCisJCWlkLT5pZGVudCwgKGxvbmcpaWQtPmRyaXZlcl9kYXRhKTsKKworCW1vZGVsID0gKGxvbmcpaWQtPmRyaXZlcl9kYXRhOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIGRtaV9zeXN0ZW1fdGFibGVbXSA9IHsKKwl7IHNldF9zeXN0ZW0sICJpTWFjNCwxIiwgeworCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJpTWFjNCwxIikgfSwgKHZvaWQqKU1fSTE3fSwKKwl7IHNldF9zeXN0ZW0sICJNYWNCb29rUHJvMSwxIiwgeworCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rUHJvMSwxIikgfSwgKHZvaWQqKU1fSTE3fSwKKwl7IHNldF9zeXN0ZW0sICJNYWNCb29rMSwxIiwgeworCSAgRE1JX01BVENIKERNSV9CSU9TX1ZFTkRPUiwiQXBwbGUgQ29tcHV0ZXIsIEluYy4iKSwKKwkgIERNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCJNYWNCb29rMSwxIil9LCAodm9pZCAqKU1fTUFDQk9PS30sCisJeyBzZXRfc3lzdGVtLCAiTWFjbWluaTEsMSIsIHsKKwkgIERNSV9NQVRDSChETUlfQklPU19WRU5ET1IsIkFwcGxlIENvbXB1dGVyLCBJbmMuIiksCisJICBETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwiTWFjbWluaTEsMSIpfSwgKHZvaWQgKilNX01JTkl9LAorCXt9LAorfTsKKwogI2RlZmluZQlERUZBVUxUX0ZCX01FTQkxMDI0KjEwMjQqMTYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDksNyArMTc3LDYgQEAKIAkJc2NyZWVuX2luZm8ubGZiX2xpbmVsZW5ndGggPSAxNDcyICogNDsKIAkJc2NyZWVuX2luZm8ubGZiX2Jhc2UgPSAweDgwMDEwMDAwOwogCQlicmVhazsKLQljYXNlIE1fTkVXOgogCWNhc2UgTV9JMjA6CiAJCXNjcmVlbl9pbmZvLmxmYl93aWR0aCA9IDE2ODA7CiAJCXNjcmVlbl9pbmZvLmxmYl9oZWlnaHQgPSAxMDUwOwpAQCAtMjA3LDYgKzIzNCwxMCBAQAogCQlzaXplX3JlbWFwID0gc2l6ZV90b3RhbDsKIAlpbWFjZmJfZml4LnNtZW1fbGVuID0gc2l6ZV9yZW1hcDsKIAorI2lmbmRlZiBfX2kzODZfXworCXNjcmVlbl9pbmZvLmltYWNwbV9zZWcgPSAwOworI2VuZGlmCisKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbWFjZmJfZml4LnNtZW1fc3RhcnQsIHNpemVfdG90YWwsICJpbWFjZmIiKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiaW1hY2ZiOiBjYW5ub3QgcmVzZXJ2ZSB2aWRlbyBtZW1vcnkgYXQgMHglbHhcbiIsCkBAIC0zMjQsOCArMzU1LDE2IEBACiAJaW50IHJldDsKIAljaGFyICpvcHRpb24gPSBOVUxMOwogCi0JLyogaWdub3JlIGVycm9yIHJldHVybiBvZiBmYl9nZXRfb3B0aW9ucyAqLwotCWZiX2dldF9vcHRpb25zKCJpbWFjZmIiLCAmb3B0aW9uKTsKKwlpZiAoIWVmaV9lbmFibGVkKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIWRtaV9jaGVja19zeXN0ZW0oZG1pX3N5c3RlbV90YWJsZSkpCisJCXJldHVybiAtRU5PREVWOworCWlmIChtb2RlbCA9PSBNX1VOS05PV04pCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKGZiX2dldF9vcHRpb25zKCJpbWFjZmIiLCAmb3B0aW9uKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlpbWFjZmJfc2V0dXAob3B0aW9uKTsKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmltYWNmYl9kcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvZzQ1MF9wbGwuYwppbmRleCA0NDAyNzJhLi43Yzc2ZTA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL21hdHJveC9nNDUwX3BsbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWF0cm94L2c0NTBfcGxsLmMKQEAgLTMzMSw3ICszMzEsMTUgQEAKIAkJCQkJdG1wIHw9IE0xMDY0X1hQSVhDTEtDVFJMX1BMTF9VUDsKIAkJCQl9CiAJCQkJbWF0cm94ZmJfREFDX291dChQTUlORk8gTTEwNjRfWFBJWENMS0NUUkwsIHRtcCk7CisjaWZkZWYgX19wb3dlcnBjX18KKwkJCQkvKiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBqaXR0ZXIgb24gUG93ZXJQQworCQkJCSAqIChPcGVuRmlybXdhcmUpIHN5c3RlbXMsIGJ1dCBhcHBhcmVudGx5CisJCQkJICogaW50cm9kdWNlcyBqaXR0ZXIsIGF0IGxlYXN0IG9uIGEgeDg2LTY0CisJCQkJICogdXNpbmcgRFZJLgorCQkJCSAqIEEgc2ltcGxlIHdvcmthcm91bmQgaXMgZGlzYWJsZSBmb3Igbm9uLVBQQy4KKwkJCQkgKi8KIAkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YRFZJQ0xLQ1RSTCwgMCk7CisjZW5kaWYgLyogX19wb3dlcnBjX18gKi8KIAkJCQltYXRyb3hmYl9EQUNfb3V0KFBNSU5GTyBNMTA2NF9YUFdSQ1RSTCwgeHB3cmN0cmwpOwogCiAJCQkJbWF0cm94ZmJfREFDX3VubG9ja19pcnFyZXN0b3JlKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X2JhY2tsaWdodC5jIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKaW5kZXggYjQ1ZjU3Ny4uNWI3NWFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfYmFja2xpZ2h0LmMKQEAgLTExMywxMCArMTEzLDE0IEBACiB2b2lkIG52aWRpYV9ibF9zZXRfcG93ZXIoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBwb3dlcikKIHsKIAltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0JdXAoJmluZm8tPmJsX2Rldi0+c2VtKTsKLQlpbmZvLT5ibF9kZXYtPnByb3BzLT5wb3dlciA9IHBvd2VyOwotCV9fbnZpZGlhX2JsX3VwZGF0ZV9zdGF0dXMoaW5mby0+YmxfZGV2KTsKLQlkb3duKCZpbmZvLT5ibF9kZXYtPnNlbSk7CisKKwlpZiAoaW5mby0+YmxfZGV2KSB7CisJCWRvd24oJmluZm8tPmJsX2Rldi0+c2VtKTsKKwkJaW5mby0+YmxfZGV2LT5wcm9wcy0+cG93ZXIgPSBwb3dlcjsKKwkJX19udmlkaWFfYmxfdXBkYXRlX3N0YXR1cyhpbmZvLT5ibF9kZXYpOworCQl1cCgmaW5mby0+YmxfZGV2LT5zZW0pOworCX0KKwogCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwogfQogCkBAIC0xNDAsNyArMTQ0LDcgQEAKIAliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIobmFtZSwgcGFyLCAmbnZpZGlhX2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7Ci0JCXByaW50aygibnZpZGlhOiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm52aWRpYTogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTUxLDExICsxNTUsMTEgQEAKIAkJMHg1MzQgKiBGQl9CQUNLTElHSFRfTUFYIC8gTUFYX0xFVkVMKTsKIAltdXRleF91bmxvY2soJmluZm8tPmJsX211dGV4KTsKIAotCXVwKCZiZC0+c2VtKTsKKwlkb3duKCZiZC0+c2VtKTsKIAliZC0+cHJvcHMtPmJyaWdodG5lc3MgPSBudmlkaWFfYmxfZGF0YS5tYXhfYnJpZ2h0bmVzczsKIAliZC0+cHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKIAliZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMoYmQpOwotCWRvd24oJmJkLT5zZW0pOworCXVwKCZiZC0+c2VtKTsKIAogI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAogCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X29mLmMgYi9kcml2ZXJzL3ZpZGVvL252aWRpYS9udl9vZi5jCmluZGV4IDgyMDkxMDYuLmQ5YWY4OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252X29mLmMKKysrIGIvZHJpdmVycy92aWRlby9udmlkaWEvbnZfb2YuYwpAQCAtMzIsNyArMzIsNyBAQAogewogCXN0cnVjdCBudmlkaWFfcGFyICpwYXIgPSBpbmZvLT5wYXI7CiAJc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsICpkcDsKLQl1bnNpZ25lZCBjaGFyICpwZWRpZCA9IE5VTEw7CisJY29uc3QgdW5zaWduZWQgY2hhciAqcGVkaWQgPSBOVUxMOwogCXN0YXRpYyBjaGFyICpwcm9wbmFtZXNbXSA9IHsKIAkJIkRGUCxFRElEIiwgIkxDRCxFRElEIiwgIkVESUQiLCAiRURJRDEiLAogCQkiRURJRCxCIiwgIkVESUQsQSIsIE5VTEwgfTsKQEAgLTQyLDIwICs0MiwxOSBAQAogCWlmIChwYXJlbnQgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCWlmIChwYXItPnR3b0hlYWRzKSB7Ci0JCWNoYXIgKnBuYW1lOworCQljb25zdCBjaGFyICpwbmFtZTsKIAkJaW50IGxlbjsKIAogCQlmb3IgKGRwID0gTlVMTDsKIAkJICAgICAoZHAgPSBvZl9nZXRfbmV4dF9jaGlsZChwYXJlbnQsIGRwKSkgIT0gTlVMTDspIHsKLQkJCXBuYW1lID0gKGNoYXIgKilnZXRfcHJvcGVydHkoZHAsICJuYW1lIiwgTlVMTCk7CisJCQlwbmFtZSA9IGdldF9wcm9wZXJ0eShkcCwgIm5hbWUiLCBOVUxMKTsKIAkJCWlmICghcG5hbWUpCiAJCQkJY29udGludWU7CiAJCQlsZW4gPSBzdHJsZW4ocG5hbWUpOwogCQkJaWYgKChwbmFtZVtsZW4tMV0gPT0gJ0EnICYmIGNvbm4gPT0gMSkgfHwKIAkJCSAgICAocG5hbWVbbGVuLTFdID09ICdCJyAmJiBjb25uID09IDIpKSB7CiAJCQkJZm9yIChpID0gMDsgcHJvcG5hbWVzW2ldICE9IE5VTEw7ICsraSkgewotCQkJCQlwZWRpZCA9ICh1bnNpZ25lZCBjaGFyICopCi0JCQkJCQlnZXRfcHJvcGVydHkoZHAsIHByb3BuYW1lc1tpXSwKKwkJCQkJcGVkaWQgPSBnZXRfcHJvcGVydHkoZHAsIHByb3BuYW1lc1tpXSwKIAkJCQkJCQkgICAgIE5VTEwpOwogCQkJCQlpZiAocGVkaWQgIT0gTlVMTCkKIAkJCQkJCWJyZWFrOwpAQCAtNjcsOCArNjYsNyBAQAogCX0KIAlpZiAocGVkaWQgPT0gTlVMTCkgewogCQlmb3IgKGkgPSAwOyBwcm9wbmFtZXNbaV0gIT0gTlVMTDsgKytpKSB7Ci0JCQlwZWRpZCA9ICh1bnNpZ25lZCBjaGFyICopCi0JCQkJZ2V0X3Byb3BlcnR5KHBhcmVudCwgcHJvcG5hbWVzW2ldLCBOVUxMKTsKKwkJCXBlZGlkID0gZ2V0X3Byb3BlcnR5KHBhcmVudCwgcHJvcG5hbWVzW2ldLCBOVUxMKTsKIAkJCWlmIChwZWRpZCAhPSBOVUxMKQogCQkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL252aWRpYS9udmlkaWEuYyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCmluZGV4IDlmMjA2NmYuLmQ0Zjg1MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbnZpZGlhL252aWRpYS5jCkBAIC0zNCwxMCArMzQsNiBAQAogI2luY2x1ZGUgIm52X3Byb3RvLmgiCiAjaW5jbHVkZSAibnZfZG1hLmgiCiAKLSNpZm5kZWYgQ09ORklHX1BDSQkJLyogc2FuaXR5IGNoZWNrICovCi0jZXJyb3IgVGhpcyBkcml2ZXIgcmVxdWlyZXMgUENJIHN1cHBvcnQuCi0jZW5kaWYKLQogI3VuZGVmIENPTkZJR19GQl9OVklESUFfREVCVUcKICNpZmRlZiBDT05GSUdfRkJfTlZJRElBX0RFQlVHCiAjZGVmaW5lIE5WVFJBQ0UgICAgICAgICAgcHJpbnRrCkBAIC0xMzAzLDIwICsxMjk5LDE5IEBACiAKIAludmlkaWFfc2F2ZV92Z2EocGFyLCAmcGFyLT5TYXZlZFJlZyk7CiAKKwlwY2lfc2V0X2RydmRhdGEocGQsIGluZm8pOworCW52aWRpYV9ibF9pbml0KHBhcik7CiAJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJlcnJvciByZWdpc3RlcmluZyBuVmlkaWEgZnJhbWVidWZmZXJcbiIpOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcF9mYjsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGQsIGluZm8pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlgKIAkgICAgICAgIlBDSSBuVmlkaWEgJXMgZnJhbWVidWZmZXIgKCVkTUIgQCAweCVsWClcbiIsCiAJICAgICAgIGluZm8tPmZpeC5pZCwKIAkgICAgICAgcGFyLT5GYk1hcFNpemUgLyAoMTAyNCAqIDEwMjQpLCBpbmZvLT5maXguc21lbV9zdGFydCk7CiAKLQludmlkaWFfYmxfaW5pdChwYXIpOwotCiAJTlZUUkFDRV9MRUFWRSgpOwogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29mZmIuYyBiL2RyaXZlcnMvdmlkZW8vb2ZmYi5jCmluZGV4IGNlNWYzMDMuLmJhZDBlOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb2ZmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb2ZmYi5jCkBAIC02Miw4ICs2Miw2IEBACiAgICAgICogIEludGVyZmFjZSB1c2VkIGJ5IHRoZSB3b3JsZAogICAgICAqLwogCi1pbnQgb2ZmYl9pbml0KHZvaWQpOwotCiBzdGF0aWMgaW50IG9mZmJfc2V0Y29scmVnKHVfaW50IHJlZ25vLCB1X2ludCByZWQsIHVfaW50IGdyZWVuLCB1X2ludCBibHVlLAogCQkJICB1X2ludCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKIHN0YXRpYyBpbnQgb2ZmYl9ibGFuayhpbnQgYmxhbmssIHN0cnVjdCBmYl9pbmZvICppbmZvKTsKQEAgLTcyLDExICs3MCw2IEBACiBleHRlcm4gYm9vdF9pbmZvc190ICpib290X2luZm9zOwogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIG9mZmJfaW5pdF9ub2RyaXZlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKik7Ci1zdGF0aWMgdm9pZCBvZmZiX2luaXRfZmIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lLAotCQkJIGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLCBpbnQgcGl0Y2gsCi0JCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKTsKLQogc3RhdGljIHN0cnVjdCBmYl9vcHMgb2ZmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5mYl9zZXRjb2xyZWcJPSBvZmZiX3NldGNvbHJlZywKQEAgLTIyOSwxMjMgKzIyMiwxNyBAQAogCXJldHVybiAwOwogfQogCi0gICAgLyoKLSAgICAgKiAgSW5pdGlhbGlzYXRpb24KLSAgICAgKi8KIAotaW50IF9faW5pdCBvZmZiX2luaXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm9mZmJfbWFwX3JlZyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wLCBpbnQgaW5kZXgsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZHAgPSBOVUxMLCAqYm9vdF9kaXNwID0gTlVMTDsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKIAotCWlmIChmYl9nZXRfb3B0aW9ucygib2ZmYiIsIE5VTEwpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWZvciAoZHAgPSBOVUxMOyAoZHAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShkcCwgImRpc3BsYXkiKSk7KSB7Ci0JCWlmIChnZXRfcHJvcGVydHkoZHAsICJsaW51eCxvcGVuZWQiLCBOVUxMKSAmJgotCQkgICAgZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdC1kaXNwbGF5IiwgTlVMTCkpIHsKLQkJCWJvb3RfZGlzcCA9IGRwOwotCQkJb2ZmYl9pbml0X25vZHJpdmVyKGRwKTsKLQkJfQotCX0KLQlmb3IgKGRwID0gTlVMTDsgKGRwID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZHAsICJkaXNwbGF5IikpOykgewotCQlpZiAoZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsb3BlbmVkIiwgTlVMTCkgJiYKLQkJICAgIGRwICE9IGJvb3RfZGlzcCkKLQkJCW9mZmJfaW5pdF9ub2RyaXZlcihkcCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgX19pbml0IG9mZmJfaW5pdF9ub2RyaXZlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwKQotewotCXVuc2lnbmVkIGludCBsZW47Ci0JaW50IGksIHdpZHRoID0gNjQwLCBoZWlnaHQgPSA0ODAsIGRlcHRoID0gOCwgcGl0Y2ggPSA2NDA7Ci0JdW5zaWduZWQgaW50IGZsYWdzLCByc2l6ZSwgYWRkcl9wcm9wID0gMDsKLQl1bnNpZ25lZCBsb25nIG1heF9zaXplID0gMDsKLQl1NjQgcnN0YXJ0LCBhZGRyZXNzID0gT0ZfQkFEX0FERFI7Ci0JdTMyICpwcCwgKmFkZHJwLCAqdXA7Ci0JdTY0IGFzaXplOwotCi0JcHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtZGVwdGgiLCAmbGVuKTsKLQlpZiAocHAgPT0gTlVMTCkKLQkJcHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRwLCAiZGVwdGgiLCAmbGVuKTsKLQlpZiAocHAgJiYgbGVuID09IHNpemVvZih1MzIpKQotCQlkZXB0aCA9ICpwcDsKLQotCXBwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LXdpZHRoIiwgJmxlbik7Ci0JaWYgKHBwID09IE5VTEwpCi0JCXBwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgIndpZHRoIiwgJmxlbik7Ci0JaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKLQkJd2lkdGggPSAqcHA7Ci0KLQlwcCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC1oZWlnaHQiLCAmbGVuKTsKLQlpZiAocHAgPT0gTlVMTCkKLQkJcHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRwLCAiaGVpZ2h0IiwgJmxlbik7Ci0JaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKLQkJaGVpZ2h0ID0gKnBwOwotCi0JcHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtbGluZWJ5dGVzIiwgJmxlbik7Ci0JaWYgKHBwID09IE5VTEwpCi0JCXBwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgImxpbmVieXRlcyIsICZsZW4pOwotCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikpCi0JCXBpdGNoID0gKnBwOwotCWVsc2UKLQkJcGl0Y2ggPSB3aWR0aCAqICgoZGVwdGggKyA3KSAvIDgpOwotCi0JcnNpemUgPSAodW5zaWduZWQgbG9uZylwaXRjaCAqICh1bnNpZ25lZCBsb25nKWhlaWdodDsKLQotCS8qIE9rLCBub3cgd2UgdHJ5IHRvIGZpZ3VyZSBvdXQgdGhlIGFkZHJlc3Mgb2YgdGhlIGZyYW1lYnVmZmVyLgotCSAqCi0JICogVW5mb3J0dW5hdGVseSwgT3BlbiBGaXJtd2FyZSBkb2Vzbid0IHByb3ZpZGUgYSBzdGFuZGFyZCB3YXkgdG8gZG8KLQkgKiBzby4gQWxsIHdlIGNhbiBkbyBpcyBhIGRvZGd5IGhldXJpc3RpYyB0aGF0IGhhcHBlbnMgdG8gd29yayBpbgotCSAqIHByYWN0aWNlLiBPbiBtb3N0IG1hY2hpbmVzLCB0aGUgImFkZHJlc3MiIHByb3BlcnR5IGNvbnRhaW5zIHdoYXQKLQkgKiB3ZSBuZWVkLCB0aG91Z2ggbm90IG9uIE1hdHJveCBjYXJkcyBmb3VuZCBpbiBJQk0gbWFjaGluZXMuIFdoYXQgSSd2ZQotCSAqIGZvdW5kIHRoYXQgYXBwZWFycyB0byBnaXZlIGdvb2QgcmVzdWx0cyBpcyB0byBnbyB0aHJvdWdoIHRoZSBQQ0kKLQkgKiByYW5nZXMgYW5kIHBpY2sgb25lIHRoYXQgaXMgYm90aCBiaWcgZW5vdWdoIGFuZCBpZiBwb3NzaWJsZSBlbmNsb3NlcwotCSAqIHRoZSAiYWRkcmVzcyIgcHJvcGVydHkuIElmIG5vbmUgbWF0Y2gsIHdlIHBpY2sgdGhlIGJpZ2dlc3QKLQkgKi8KLQl1cCA9ICh1MzIgKilnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC1hZGRyIiwgJmxlbik7Ci0JaWYgKHVwID09IE5VTEwpCi0JCXVwID0gKHUzMiAqKWdldF9wcm9wZXJ0eShkcCwgImFkZHJlc3MiLCAmbGVuKTsKLQlpZiAodXAgJiYgbGVuID09IHNpemVvZih1MzIpKQotCQlhZGRyX3Byb3AgPSAqdXA7Ci0KLQlmb3IgKGkgPSAwOyAoYWRkcnAgPSBvZl9nZXRfYWRkcmVzcyhkcCwgaSwgJmFzaXplLCAmZmxhZ3MpKQotCQkgICAgICE9IE5VTEw7IGkrKykgewotCQlpbnQgbWF0Y2hfYWRkcnAgPSAwOwotCi0JCWlmICghKGZsYWdzICYgSU9SRVNPVVJDRV9NRU0pKQotCQkJY29udGludWU7Ci0JCWlmIChhc2l6ZSA8IHJzaXplKQotCQkJY29udGludWU7Ci0JCXJzdGFydCA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKGRwLCBhZGRycCk7Ci0JCWlmIChyc3RhcnQgPT0gT0ZfQkFEX0FERFIpCi0JCQljb250aW51ZTsKLQkJaWYgKGFkZHJfcHJvcCAmJiAocnN0YXJ0IDw9IGFkZHJfcHJvcCkgJiYKLQkJICAgICgocnN0YXJ0ICsgYXNpemUpID49IChhZGRyX3Byb3AgKyByc2l6ZSkpKQotCQkJbWF0Y2hfYWRkcnAgPSAxOwotCQlpZiAobWF0Y2hfYWRkcnApIHsKLQkJCWFkZHJlc3MgPSBhZGRyX3Byb3A7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocnNpemUgPiBtYXhfc2l6ZSkgewotCQkJbWF4X3NpemUgPSByc2l6ZTsKLQkJCWFkZHJlc3MgPSBPRl9CQURfQUREUjsKLSAJCX0KLQotCQlpZiAoYWRkcmVzcyA9PSBPRl9CQURfQUREUikKLQkJCWFkZHJlc3MgPSByc3RhcnQ7Ci0JfQotCWlmIChhZGRyZXNzID09IE9GX0JBRF9BRERSICYmIGFkZHJfcHJvcCkKLQkJYWRkcmVzcyA9ICh1NjQpYWRkcl9wcm9wOwotCWlmIChhZGRyZXNzICE9IE9GX0JBRF9BRERSKSB7Ci0JCS8qIGtsdWRnZSBmb3IgdmFsa3lyaWUgKi8KLQkJaWYgKHN0cmNtcChkcC0+bmFtZSwgInZhbGt5cmllIikgPT0gMCkKLQkJCWFkZHJlc3MgKz0gMHgxMDAwOwotCQlvZmZiX2luaXRfZmIoZHAtPm5hbWUsIGRwLT5mdWxsX25hbWUsIHdpZHRoLCBoZWlnaHQsIGRlcHRoLAotCQkJICAgICBwaXRjaCwgYWRkcmVzcywgZHApOwotCX0KKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgaW5kZXgsICZyKSkKKwkJcmV0dXJuIDA7CisJaWYgKChyLnN0YXJ0ICsgb2Zmc2V0ICsgc2l6ZSkgPiByLmVuZCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIGlvcmVtYXAoci5zdGFydCArIG9mZnNldCwgc2l6ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvZmZiX2luaXRfZmIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZnVsbF9uYW1lLApAQCAtNDAyLDQ1ICsyODksMzkgQEAKIAogCXBhci0+Y21hcF90eXBlID0gY21hcF91bmtub3duOwogCWlmIChkZXB0aCA9PSA4KSB7Ci0KIAkJLyogUGFsZXR0ZSBoYWNrcyBkaXNhYmxlZCBmb3Igbm93ICovCi0jaWYgMAogCQlpZiAoZHAgJiYgIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlMTI4IiwgMTEpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHJlZ2Jhc2UgPSBkcC0+YWRkcnNbMl0uYWRkcmVzczsKLQkJCXBhci0+Y21hcF9hZHIgPSBpb3JlbWFwKHJlZ2Jhc2UsIDB4MUZGRik7Ci0JCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfcjEyODsKKwkJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDIsIDAsIDB4MWZmZik7CisJCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfcjEyODsKIAkJfSBlbHNlIGlmIChkcCAmJiAoIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlTTNwQSIsIDEyKQogCQkJCSAgfHwgIXN0cm5jbXAobmFtZSwgIkFUWSxSYWdlTTNwMTJBIiwgMTQpKSkgewotCQkJdW5zaWduZWQgbG9uZyByZWdiYXNlID0KLQkJCSAgICBkcC0+cGFyZW50LT5hZGRyc1syXS5hZGRyZXNzOwotCQkJcGFyLT5jbWFwX2FkciA9IGlvcmVtYXAocmVnYmFzZSwgMHgxRkZGKTsKLQkJCXBhci0+Y21hcF90eXBlID0gY21hcF9NM0E7CisJCQlwYXItPmNtYXBfYWRyID0gb2ZmYl9tYXBfcmVnKGRwLCAyLCAwLCAweDFmZmYpOworCQkJaWYgKHBhci0+Y21hcF9hZHIpCisJCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX00zQTsKIAkJfSBlbHNlIGlmIChkcCAmJiAhc3RybmNtcChuYW1lLCAiQVRZLFJhZ2VNM3BCIiwgMTIpKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHJlZ2Jhc2UgPQotCQkJICAgIGRwLT5wYXJlbnQtPmFkZHJzWzJdLmFkZHJlc3M7Ci0JCQlwYXItPmNtYXBfYWRyID0gaW9yZW1hcChyZWdiYXNlLCAweDFGRkYpOwotCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX00zQjsKKwkJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDIsIDAsIDB4MWZmZik7CisJCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfTTNCOwogCQl9IGVsc2UgaWYgKGRwICYmICFzdHJuY21wKG5hbWUsICJBVFksUmFnZTYiLCA5KSkgewotCQkJdW5zaWduZWQgbG9uZyByZWdiYXNlID0gZHAtPmFkZHJzWzFdLmFkZHJlc3M7Ci0JCQlwYXItPmNtYXBfYWRyID0gaW9yZW1hcChyZWdiYXNlLCAweDFGRkYpOwotCQkJcGFyLT5jbWFwX3R5cGUgPSBjbWFwX3JhZGVvbjsKKwkJCXBhci0+Y21hcF9hZHIgPSBvZmZiX21hcF9yZWcoZHAsIDEsIDAsIDB4MWZmZik7CisJCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfcmFkZW9uOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKG5hbWUsICJBVFksIiwgNCkpIHsKIAkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9IGFkZHJlc3MgJiAweGZmMDAwMDAwVUw7CiAJCQlwYXItPmNtYXBfYWRyID0KIAkJCSAgICBpb3JlbWFwKGJhc2UgKyAweDdmZjAwMCwgMHgxMDAwKSArIDB4Y2MwOwogCQkJcGFyLT5jbWFwX2RhdGEgPSBwYXItPmNtYXBfYWRyICsgMTsKIAkJCXBhci0+Y21hcF90eXBlID0gY21hcF9tNjQ7Ci0JCX0gZWxzZSBpZiAoZGV2aWNlX2lzX2NvbXBhdGlibGUoZHAsICJwY2kxMDE0LGI3IikpIHsKLQkJCXVuc2lnbmVkIGxvbmcgcmVnYmFzZSA9IGRwLT5hZGRyc1swXS5hZGRyZXNzOwotCQkJcGFyLT5jbWFwX2FkciA9IGlvcmVtYXAocmVnYmFzZSArIDB4NjAwMCwgMHgxMDAwKTsKLQkJCXBhci0+Y21hcF90eXBlID0gY21hcF9neHQyMDAwOworCQl9IGVsc2UgaWYgKGRwICYmIGRldmljZV9pc19jb21wYXRpYmxlKGRwLCAicGNpMTAxNCxiNyIpKSB7CisJCQlwYXItPmNtYXBfYWRyID0gb2ZmYl9tYXBfcmVnKGRwLCAwLCAweDYwMDAsIDB4MTAwMCk7CisJCQlpZiAocGFyLT5jbWFwX2FkcikKKwkJCQlwYXItPmNtYXBfdHlwZSA9IGNtYXBfZ3h0MjAwMDsKIAkJfQotI2VuZGlmCi0JCWZpeC0+dmlzdWFsID0gcGFyLT5jbWFwX2FkciA/IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUgotCQkgICAgOiBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SOworCQlmaXgtPnZpc3VhbCA9IChwYXItPmNtYXBfdHlwZSAhPSBjbWFwX3Vua25vd24pID8KKwkJCUZCX1ZJU1VBTF9QU0VVRE9DT0xPUiA6IEZCX1ZJU1VBTF9TVEFUSUNfUFNFVURPQ09MT1I7CiAJfSBlbHNlCi0JCWZpeC0+dmlzdWFsID0JLyogcGFyLT5jbWFwX2FkciA/IEZCX1ZJU1VBTF9ESVJFQ1RDT0xPUgotCQkJCSAgIDogKi8gRkJfVklTVUFMX1RSVUVDT0xPUjsKKwkJZml4LT52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCiAJdmFyLT54b2Zmc2V0ID0gdmFyLT55b2Zmc2V0ID0gMDsKIAlzd2l0Y2ggKGRlcHRoKSB7CkBAIC01MjAsNSArNDAxLDEzOSBAQAogCSAgICAgICBpbmZvLT5ub2RlLCBmdWxsX25hbWUpOwogfQogCisKK3N0YXRpYyB2b2lkIF9faW5pdCBvZmZiX2luaXRfbm9kcml2ZXIoc3RydWN0IGRldmljZV9ub2RlICpkcCwgaW50IG5vX3JlYWxfbm9kZSkKK3sKKwl1bnNpZ25lZCBpbnQgbGVuOworCWludCBpLCB3aWR0aCA9IDY0MCwgaGVpZ2h0ID0gNDgwLCBkZXB0aCA9IDgsIHBpdGNoID0gNjQwOworCXVuc2lnbmVkIGludCBmbGFncywgcnNpemUsIGFkZHJfcHJvcCA9IDA7CisJdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSA9IDA7CisJdTY0IHJzdGFydCwgYWRkcmVzcyA9IE9GX0JBRF9BRERSOworCWNvbnN0IHUzMiAqcHAsICphZGRycCwgKnVwOworCXU2NCBhc2l6ZTsKKworCXBwID0gZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtZGVwdGgiLCAmbGVuKTsKKwlpZiAocHAgPT0gTlVMTCkKKwkJcHAgPSBnZXRfcHJvcGVydHkoZHAsICJkZXB0aCIsICZsZW4pOworCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikpCisJCWRlcHRoID0gKnBwOworCisJcHAgPSBnZXRfcHJvcGVydHkoZHAsICJsaW51eCxib290eC13aWR0aCIsICZsZW4pOworCWlmIChwcCA9PSBOVUxMKQorCQlwcCA9IGdldF9wcm9wZXJ0eShkcCwgIndpZHRoIiwgJmxlbik7CisJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKKwkJd2lkdGggPSAqcHA7CisKKwlwcCA9IGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3R4LWhlaWdodCIsICZsZW4pOworCWlmIChwcCA9PSBOVUxMKQorCQlwcCA9IGdldF9wcm9wZXJ0eShkcCwgImhlaWdodCIsICZsZW4pOworCWlmIChwcCAmJiBsZW4gPT0gc2l6ZW9mKHUzMikpCisJCWhlaWdodCA9ICpwcDsKKworCXBwID0gZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtbGluZWJ5dGVzIiwgJmxlbik7CisJaWYgKHBwID09IE5VTEwpCisJCXBwID0gZ2V0X3Byb3BlcnR5KGRwLCAibGluZWJ5dGVzIiwgJmxlbik7CisJaWYgKHBwICYmIGxlbiA9PSBzaXplb2YodTMyKSkKKwkJcGl0Y2ggPSAqcHA7CisJZWxzZQorCQlwaXRjaCA9IHdpZHRoICogKChkZXB0aCArIDcpIC8gOCk7CisKKwlyc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXBpdGNoICogKHVuc2lnbmVkIGxvbmcpaGVpZ2h0OworCisJLyogT2ssIG5vdyB3ZSB0cnkgdG8gZmlndXJlIG91dCB0aGUgYWRkcmVzcyBvZiB0aGUgZnJhbWVidWZmZXIuCisJICoKKwkgKiBVbmZvcnR1bmF0ZWx5LCBPcGVuIEZpcm13YXJlIGRvZXNuJ3QgcHJvdmlkZSBhIHN0YW5kYXJkIHdheSB0byBkbworCSAqIHNvLiBBbGwgd2UgY2FuIGRvIGlzIGEgZG9kZ3kgaGV1cmlzdGljIHRoYXQgaGFwcGVucyB0byB3b3JrIGluCisJICogcHJhY3RpY2UuIE9uIG1vc3QgbWFjaGluZXMsIHRoZSAiYWRkcmVzcyIgcHJvcGVydHkgY29udGFpbnMgd2hhdAorCSAqIHdlIG5lZWQsIHRob3VnaCBub3Qgb24gTWF0cm94IGNhcmRzIGZvdW5kIGluIElCTSBtYWNoaW5lcy4gV2hhdCBJJ3ZlCisJICogZm91bmQgdGhhdCBhcHBlYXJzIHRvIGdpdmUgZ29vZCByZXN1bHRzIGlzIHRvIGdvIHRocm91Z2ggdGhlIFBDSQorCSAqIHJhbmdlcyBhbmQgcGljayBvbmUgdGhhdCBpcyBib3RoIGJpZyBlbm91Z2ggYW5kIGlmIHBvc3NpYmxlIGVuY2xvc2VzCisJICogdGhlICJhZGRyZXNzIiBwcm9wZXJ0eS4gSWYgbm9uZSBtYXRjaCwgd2UgcGljayB0aGUgYmlnZ2VzdAorCSAqLworCXVwID0gZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsYm9vdHgtYWRkciIsICZsZW4pOworCWlmICh1cCA9PSBOVUxMKQorCQl1cCA9IGdldF9wcm9wZXJ0eShkcCwgImFkZHJlc3MiLCAmbGVuKTsKKwlpZiAodXAgJiYgbGVuID09IHNpemVvZih1MzIpKQorCQlhZGRyX3Byb3AgPSAqdXA7CisKKwkvKiBIYWNrIGZvciB3aGVuIEJvb3RYIGlzIHBhc3NpbmcgdXMgKi8KKwlpZiAobm9fcmVhbF9ub2RlKQorCQlnb3RvIHNraXBfYWRkcjsKKworCWZvciAoaSA9IDA7IChhZGRycCA9IG9mX2dldF9hZGRyZXNzKGRwLCBpLCAmYXNpemUsICZmbGFncykpCisJCSAgICAgIT0gTlVMTDsgaSsrKSB7CisJCWludCBtYXRjaF9hZGRycCA9IDA7CisKKwkJaWYgKCEoZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkpCisJCQljb250aW51ZTsKKwkJaWYgKGFzaXplIDwgcnNpemUpCisJCQljb250aW51ZTsKKwkJcnN0YXJ0ID0gb2ZfdHJhbnNsYXRlX2FkZHJlc3MoZHAsIGFkZHJwKTsKKwkJaWYgKHJzdGFydCA9PSBPRl9CQURfQUREUikKKwkJCWNvbnRpbnVlOworCQlpZiAoYWRkcl9wcm9wICYmIChyc3RhcnQgPD0gYWRkcl9wcm9wKSAmJgorCQkgICAgKChyc3RhcnQgKyBhc2l6ZSkgPj0gKGFkZHJfcHJvcCArIHJzaXplKSkpCisJCQltYXRjaF9hZGRycCA9IDE7CisJCWlmIChtYXRjaF9hZGRycCkgeworCQkJYWRkcmVzcyA9IGFkZHJfcHJvcDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChyc2l6ZSA+IG1heF9zaXplKSB7CisJCQltYXhfc2l6ZSA9IHJzaXplOworCQkJYWRkcmVzcyA9IE9GX0JBRF9BRERSOworIAkJfQorCisJCWlmIChhZGRyZXNzID09IE9GX0JBRF9BRERSKQorCQkJYWRkcmVzcyA9IHJzdGFydDsKKwl9Cisgc2tpcF9hZGRyOgorCWlmIChhZGRyZXNzID09IE9GX0JBRF9BRERSICYmIGFkZHJfcHJvcCkKKwkJYWRkcmVzcyA9ICh1NjQpYWRkcl9wcm9wOworCWlmIChhZGRyZXNzICE9IE9GX0JBRF9BRERSKSB7CisJCS8qIGtsdWRnZSBmb3IgdmFsa3lyaWUgKi8KKwkJaWYgKHN0cmNtcChkcC0+bmFtZSwgInZhbGt5cmllIikgPT0gMCkKKwkJCWFkZHJlc3MgKz0gMHgxMDAwOworCQlvZmZiX2luaXRfZmIobm9fcmVhbF9ub2RlID8gImJvb3R4IiA6IGRwLT5uYW1lLAorCQkJICAgICBub19yZWFsX25vZGUgPyAiZGlzcGxheSIgOiBkcC0+ZnVsbF9uYW1lLAorCQkJICAgICB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgcGl0Y2gsIGFkZHJlc3MsCisJCQkgICAgIG5vX3JlYWxfbm9kZSA/IGRwIDogTlVMTCk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBvZmZiX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRwID0gTlVMTCwgKmJvb3RfZGlzcCA9IE5VTEw7CisKKwlpZiAoZmJfZ2V0X29wdGlvbnMoIm9mZmIiLCBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBDaGVjayBpZiB3ZSBoYXZlIGEgTWFjT1MgZGlzcGxheSB3aXRob3V0IGEgbm9kZSBzcGVjICovCisJaWYgKGdldF9wcm9wZXJ0eShvZl9jaG9zZW4sICJsaW51eCxib290eC1ub3NjcmVlbiIsIE5VTEwpICE9IE5VTEwpIHsKKwkJLyogVGhlIG9sZCBjb2RlIHRyaWVkIHRvIHdvcmsgb3V0IHdoaWNoIG5vZGUgd2FzIHRoZSBNYWNPUworCQkgKiBkaXNwbGF5IGJhc2VkIG9uIHRoZSBhZGRyZXNzLiBJJ20gZHJvcHBpbmcgdGhhdCBzaW5jZSB0aGUKKwkJICogbGFjayBvZiBhIG5vZGUgc3BlYyBvbmx5IGhhcHBlbnMgd2l0aCBvbGQgQm9vdFggdmVyc2lvbnMKKwkJICogKHVzZXJzIGNhbiB1cGRhdGUpIGFuZCB3aXRoIHRoaXMgY29kZSwgdGhleSdsbCBzdGlsbCBnZXQKKwkJICogYSBkaXNwbGF5IChqdXN0IG5vdCB0aGUgcGFsZXR0ZSBoYWNrcykuCisJCSAqLworCQlvZmZiX2luaXRfbm9kcml2ZXIob2ZfY2hvc2VuLCAxKTsKKwl9CisKKwlmb3IgKGRwID0gTlVMTDsgKGRwID0gb2ZfZmluZF9ub2RlX2J5X3R5cGUoZHAsICJkaXNwbGF5IikpOykgeworCQlpZiAoZ2V0X3Byb3BlcnR5KGRwLCAibGludXgsb3BlbmVkIiwgTlVMTCkgJiYKKwkJICAgIGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LGJvb3QtZGlzcGxheSIsIE5VTEwpKSB7CisJCQlib290X2Rpc3AgPSBkcDsKKwkJCW9mZmJfaW5pdF9ub2RyaXZlcihkcCwgMCk7CisJCX0KKwl9CisJZm9yIChkcCA9IE5VTEw7IChkcCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKGRwLCAiZGlzcGxheSIpKTspIHsKKwkJaWYgKGdldF9wcm9wZXJ0eShkcCwgImxpbnV4LG9wZW5lZCIsIE5VTEwpICYmCisJCSAgICBkcCAhPSBib290X2Rpc3ApCisJCQlvZmZiX2luaXRfbm9kcml2ZXIoZHAsIDApOworCX0KKworCXJldHVybiAwOworfQorCisKIG1vZHVsZV9pbml0KG9mZmJfaW5pdCk7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3JpdmEvZmJkZXYuYyBiL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jCmluZGV4IDMzZGRkYmEuLjY3ZDFlMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcml2YS9mYmRldi5jCkBAIC0zNTUsMTAgKzM1NSwxNCBAQAogc3RhdGljIHZvaWQgcml2YV9ibF9zZXRfcG93ZXIoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCBwb3dlcikKIHsKIAltdXRleF9sb2NrKCZpbmZvLT5ibF9tdXRleCk7Ci0JdXAoJmluZm8tPmJsX2Rldi0+c2VtKTsKLQlpbmZvLT5ibF9kZXYtPnByb3BzLT5wb3dlciA9IHBvd2VyOwotCV9fcml2YV9ibF91cGRhdGVfc3RhdHVzKGluZm8tPmJsX2Rldik7Ci0JZG93bigmaW5mby0+YmxfZGV2LT5zZW0pOworCisJaWYgKGluZm8tPmJsX2RldikgeworCQlkb3duKCZpbmZvLT5ibF9kZXYtPnNlbSk7CisJCWluZm8tPmJsX2Rldi0+cHJvcHMtPnBvd2VyID0gcG93ZXI7CisJCV9fcml2YV9ibF91cGRhdGVfc3RhdHVzKGluZm8tPmJsX2Rldik7CisJCXVwKCZpbmZvLT5ibF9kZXYtPnNlbSk7CisJfQorCiAJbXV0ZXhfdW5sb2NrKCZpbmZvLT5ibF9tdXRleCk7CiB9CiAKQEAgLTM4Miw3ICszODYsNyBAQAogCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihuYW1lLCBwYXIsICZyaXZhX2JsX2RhdGEpOwogCWlmIChJU19FUlIoYmQpKSB7CiAJCWluZm8tPmJsX2RldiA9IE5VTEw7Ci0JCXByaW50aygicml2YTogQmFja2xpZ2h0IHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJyaXZhOiBCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0zOTMsMTEgKzM5NywxMSBAQAogCQkweDUzNCAqIEZCX0JBQ0tMSUdIVF9NQVggLyBNQVhfTEVWRUwpOwogCW11dGV4X3VubG9jaygmaW5mby0+YmxfbXV0ZXgpOwogCi0JdXAoJmJkLT5zZW0pOworCWRvd24oJmJkLT5zZW0pOwogCWJkLT5wcm9wcy0+YnJpZ2h0bmVzcyA9IHJpdmFfYmxfZGF0YS5tYXhfYnJpZ2h0bmVzczsKIAliZC0+cHJvcHMtPnBvd2VyID0gRkJfQkxBTktfVU5CTEFOSzsKIAliZC0+cHJvcHMtPnVwZGF0ZV9zdGF0dXMoYmQpOwotCWRvd24oJmJkLT5zZW0pOworCXVwKCZiZC0+c2VtKTsKIAogI2lmZGVmIENPTkZJR19QTUFDX0JBQ0tMSUdIVAogCW11dGV4X2xvY2soJnBtYWNfYmFja2xpZ2h0X211dGV4KTsKQEAgLTE4MzEsMTQgKzE4MzUsMTMgQEAKIAlOVlRSQUNFX0VOVEVSKCk7CiAJZHAgPSBwY2lfZGV2aWNlX3RvX09GX25vZGUocGQpOwogCWZvciAoOyBkcCAhPSBOVUxMOyBkcCA9IGRwLT5jaGlsZCkgewotCQlkaXNwdHlwZSA9ICh1bnNpZ25lZCBjaGFyICopZ2V0X3Byb3BlcnR5KGRwLCAiZGlzcGxheS10eXBlIiwgTlVMTCk7CisJCWRpc3B0eXBlID0gZ2V0X3Byb3BlcnR5KGRwLCAiZGlzcGxheS10eXBlIiwgTlVMTCk7CiAJCWlmIChkaXNwdHlwZSA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWlmIChzdHJuY21wKGRpc3B0eXBlLCAiTENEIiwgMykgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmb3IgKGkgPSAwOyBwcm9wbmFtZXNbaV0gIT0gTlVMTDsgKytpKSB7Ci0JCQlwZWRpZCA9ICh1bnNpZ25lZCBjaGFyICopCi0JCQkJZ2V0X3Byb3BlcnR5KGRwLCBwcm9wbmFtZXNbaV0sIE5VTEwpOworCQkJcGVkaWQgPSBnZXRfcHJvcGVydHkoZHAsIHByb3BuYW1lc1tpXSwgTlVMTCk7CiAJCQlpZiAocGVkaWQgIT0gTlVMTCkgewogCQkJCXBhci0+RURJRCA9IHBlZGlkOwogCQkJCU5WVFJBQ0UoIkxDRCBmb3VuZC5cbiIpOwpAQCAtMjEzMiw2ICsyMTM1LDkgQEAKIAogCWZiX2Rlc3Ryb3lfbW9kZWRiKGluZm8tPm1vbnNwZWNzLm1vZGVkYik7CiAJaW5mby0+bW9uc3BlY3MubW9kZWRiID0gTlVMTDsKKworCXBjaV9zZXRfZHJ2ZGF0YShwZCwgaW5mbyk7CisJcml2YV9ibF9pbml0KGluZm8tPnBhcik7CiAJcmV0ID0gcmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWApAQCAtMjEzOSw4ICsyMTQ1LDYgQEAKIAkJZ290byBlcnJfaW91bm1hcF9zY3JlZW5fYmFzZTsKIAl9CiAKLQlwY2lfc2V0X2RydmRhdGEocGQsIGluZm8pOwotCiAJcHJpbnRrKEtFUk5fSU5GTyBQRlgKIAkJIlBDSSBuVmlkaWEgJXMgZnJhbWVidWZmZXIgdmVyICVzICglZE1CIEAgMHglbFgpXG4iLAogCQlpbmZvLT5maXguaWQsCkBAIC0yMTQ4LDggKzIxNTIsNiBAQAogCQlpbmZvLT5maXguc21lbV9sZW4gLyAoMTAyNCAqIDEwMjQpLAogCQlpbmZvLT5maXguc21lbV9zdGFydCk7CiAKLQlyaXZhX2JsX2luaXQoaW5mby0+cGFyKTsKLQogCU5WVFJBQ0VfTEVBVkUoKTsKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZnMvOXAvY29udi5jIGIvZnMvOXAvY29udi5jCmluZGV4IDFlODk4MTQuLjU2ZDg4YzEgMTAwNjQ0Ci0tLSBhL2ZzLzlwL2NvbnYuYworKysgYi9mcy85cC9jb252LmMKQEAgLTY3Myw4ICs2NzMsMTAgQEAKIAlzdHJ1Y3QgY2J1ZiAqYnVmcCA9ICZidWZmZXI7CiAKIAlzaXplID0gNCArIDIgKyBzdHJsZW4obmFtZSkgKyA0ICsgMTsJLyogZmlkWzRdIG5hbWVbc10gcGVybVs0XSBtb2RlWzFdICovCi0JaWYgKGV4dGVuZGVkICYmIGV4dGVuc2lvbiE9TlVMTCkKLQkJc2l6ZSArPSAyICsgc3RybGVuKGV4dGVuc2lvbik7CS8qIGV4dGVuc2lvbltzXSAqLworCWlmIChleHRlbmRlZCkgeworCQlzaXplICs9IDIgKwkJCS8qIGV4dGVuc2lvbltzXSAqLworCQkgICAgKGV4dGVuc2lvbiA9PSBOVUxMID8gMCA6IHN0cmxlbihleHRlbnNpb24pKTsKKwl9CiAKIAlmYyA9IHY5ZnNfY3JlYXRlX2NvbW1vbihidWZwLCBzaXplLCBUQ1JFQVRFKTsKIAlpZiAoSVNfRVJSKGZjKSkKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggMmY1ODBhMS4uZWFlNTBjOSAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTQzNCwxMSArNDM0LDExIEBACiAJcmVzdWx0ID0gdjlmc190X3JlbW92ZSh2OXNlcywgZmlkLCAmZmNhbGwpOwogCWlmIChyZXN1bHQgPCAwKSB7CiAJCVBSSU5UX0ZDQUxMX0VSUk9SKCJyZW1vdmUgZmFpbHMiLCBmY2FsbCk7Ci0JfSBlbHNlIHsKLQkJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKLQkJdjlmc19maWRfZGVzdHJveSh2OWZpZCk7CiAJfQogCisJdjlmc19wdXRfaWRwb29sKGZpZCwgJnY5c2VzLT5maWRwb29sKTsKKwl2OWZzX2ZpZF9kZXN0cm95KHY5ZmlkKTsKKwogCWtmcmVlKGZjYWxsKTsKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggM2YwMGE5Zi4uNTMwNTgxNiAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC0zMjUsOCArMzI1LDggQEAKIHNvdXJjZSAiZnMveGZzL0tjb25maWciCiAKIGNvbmZpZyBPQ0ZTMl9GUwotCXRyaXN0YXRlICJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gTkVUICYmIFNZU0ZTICYmIEVYUEVSSU1FTlRBTAorCXRyaXN0YXRlICJPQ0ZTMiBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gTkVUICYmIFNZU0ZTCiAJc2VsZWN0IENPTkZJR0ZTX0ZTCiAJc2VsZWN0IEpCRAogCXNlbGVjdCBDUkMzMgpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9zdXBlci5jIGIvZnMvYWRmcy9zdXBlci5jCmluZGV4IGJhMWM4OGEuLjgyMDExMDEgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvc3VwZXIuYworKysgYi9mcy9hZGZzL3N1cGVyLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCWlmIChhZGZzX2NoZWNrbWFwKHNiLCBkbSkpCiAJCXJldHVybiBkbTsKIAotCWFkZnNfZXJyb3Ioc2IsIE5VTEwsICJtYXAgY29ycnVwdGVkIik7CisJYWRmc19lcnJvcihzYiwgIm1hcCBjb3JydXB0ZWQiKTsKIAogZXJyb3JfZnJlZToKIAl3aGlsZSAoLS16b25lID49IDApCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggZmNhZWVhZC4uNTBjZmNhNSAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtNTEyLDcgKzUxMiwxMSBAQAogCXdjaGFyX3QgdW5pOwogCWludCB1bmlsZW4sIHV0ZmxlbjsKIAljaGFyICpyZXN1bHQ7Ci0JaW50IG1heGxlbiA9IGluX2xlbjsgLyogVGhlIHV0ZjgtPm5scyBjb252ZXJzaW9uIGNhbid0IG1ha2UgbW9yZSBjaGFycyAqLworCS8qIFRoZSB1dGY4LT5ubHMgY29udmVyc2lvbiB3b24ndCBtYWtlIHRoZSBmaW5hbCBubHMgc3RyaW5nIGJpZ2dlcgorCSAqIHRoYW4gdGhlIHV0ZiBvbmUsIGJ1dCBpZiB0aGUgc3RyaW5nIGlzIHB1cmUgYXNjaWkgdGhleSdsbCBoYXZlIHRoZQorCSAqIHNhbWUgd2lkdGggYW5kIGFuIGV4dHJhIGNoYXIgaXMgbmVlZGVkIHRvIHNhdmUgdGhlIGFkZGl0aW9uYWwgXDAKKwkgKi8KKwlpbnQgbWF4bGVuID0gaW5fbGVuICsgMTsKIAogCWJlZnNfZGVidWcoc2IsICItLS0+IHV0ZjJubHMoKSIpOwogCkBAIC01ODgsNyArNTkyLDEwIEBACiAJd2NoYXJfdCB1bmk7CiAJaW50IHVuaWxlbiwgdXRmbGVuOwogCWNoYXIgKnJlc3VsdDsKLQlpbnQgbWF4bGVuID0gMyAqIGluX2xlbjsKKwkvKiBUaGVyZSdyZSBubHMgY2hhcmFjdGVycyB0aGF0IHdpbGwgdHJhbnNsYXRlIHRvIDMtY2hhcnMtd2lkZSBVVEYtOAorCSAqIGNoYXJhY3RlcnMsIGEgYWRkaXRpb25hbCBieXRlIGlzIG5lZWRlZCB0byBzYXZlIHRoZSBmaW5hbCBcMAorCSAqIGluIHNwZWNpYWwgY2FzZXMgKi8KKwlpbnQgbWF4bGVuID0gKDMgKiBpbl9sZW4pICsgMTsKIAogCWJlZnNfZGVidWcoc2IsICItLS0+IG5sczJ1dGYoKVxuIik7CiAKZGlmZiAtLWdpdCBhL2ZzL2Jsb2NrX2Rldi5jIGIvZnMvYmxvY2tfZGV2LmMKaW5kZXggMzc1MzQ1Ny4uMDQ1Zjk4OCAxMDA2NDQKLS0tIGEvZnMvYmxvY2tfZGV2LmMKKysrIGIvZnMvYmxvY2tfZGV2LmMKQEAgLTg4NCw2ICs4ODQsNjEgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmRfc2V0X3NpemUpOwogCitzdGF0aWMgaW50IF9fYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IGlub2RlICpiZF9pbm9kZSA9IGJkZXYtPmJkX2lub2RlOworCXN0cnVjdCBnZW5kaXNrICpkaXNrID0gYmRldi0+YmRfZGlzazsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9tdXRleCwgc3ViY2xhc3MpOworCWxvY2tfa2VybmVsKCk7CisJaWYgKCEtLWJkZXYtPmJkX29wZW5lcnMpIHsKKwkJc3luY19ibG9ja2RldihiZGV2KTsKKwkJa2lsbF9iZGV2KGJkZXYpOworCX0KKwlpZiAoYmRldi0+YmRfY29udGFpbnMgPT0gYmRldikgeworCQlpZiAoZGlzay0+Zm9wcy0+cmVsZWFzZSkKKwkJCXJldCA9IGRpc2stPmZvcHMtPnJlbGVhc2UoYmRfaW5vZGUsIE5VTEwpOworCX0gZWxzZSB7CisJCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgsCisJCQkJICBzdWJjbGFzcyArIDEpOworCQliZGV2LT5iZF9jb250YWlucy0+YmRfcGFydF9jb3VudC0tOworCQltdXRleF91bmxvY2soJmJkZXYtPmJkX2NvbnRhaW5zLT5iZF9tdXRleCk7CisJfQorCWlmICghYmRldi0+YmRfb3BlbmVycykgeworCQlzdHJ1Y3QgbW9kdWxlICpvd25lciA9IGRpc2stPmZvcHMtPm93bmVyOworCisJCXB1dF9kaXNrKGRpc2spOworCQltb2R1bGVfcHV0KG93bmVyKTsKKworCQlpZiAoYmRldi0+YmRfY29udGFpbnMgIT0gYmRldikgeworCQkJa29iamVjdF9wdXQoJmJkZXYtPmJkX3BhcnQtPmtvYmopOworCQkJYmRldi0+YmRfcGFydCA9IE5VTEw7CisJCX0KKwkJYmRldi0+YmRfZGlzayA9IE5VTEw7CisJCWJkZXYtPmJkX2lub2RlLT5pX2RhdGEuYmFja2luZ19kZXZfaW5mbyA9ICZkZWZhdWx0X2JhY2tpbmdfZGV2X2luZm87CisJCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKQorCQkJX19ibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zLCBzdWJjbGFzcyArIDEpOworCQliZGV2LT5iZF9jb250YWlucyA9IE5VTEw7CisJfQorCXVubG9ja19rZXJuZWwoKTsKKwltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKKwliZHB1dChiZGV2KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgQkRfTVVURVhfTk9STUFMKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrZGV2X3B1dCk7CisKK2ludCBibGtkZXZfcHV0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQoreworCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgQkRfTVVURVhfUEFSVElUSU9OKTsKK30KK0VYUE9SVF9TWU1CT0woYmxrZGV2X3B1dF9wYXJ0aXRpb24pOworCiBzdGF0aWMgaW50CiBibGtkZXZfZ2V0X3dob2xlKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIG1vZGVfdCBtb2RlLCB1bnNpZ25lZCBmbGFncyk7CiAKQEAgLTk4MCw3ICsxMDM1LDcgQEAKIAliZGV2LT5iZF9kaXNrID0gTlVMTDsKIAliZGV2LT5iZF9pbm9kZS0+aV9kYXRhLmJhY2tpbmdfZGV2X2luZm8gPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwogCWlmIChiZGV2ICE9IGJkZXYtPmJkX2NvbnRhaW5zKQotCQlibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zKTsKKwkJX19ibGtkZXZfcHV0KGJkZXYtPmJkX2NvbnRhaW5zLCBCRF9NVVRFWF9XSE9MRSk7CiAJYmRldi0+YmRfY29udGFpbnMgPSBOVUxMOwogCXB1dF9kaXNrKGRpc2spOwogCW1vZHVsZV9wdXQob3duZXIpOwpAQCAtMTA3OSw2MyArMTEzNCw2IEBACiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludCBfX2Jsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IHN1YmNsYXNzKQotewotCWludCByZXQgPSAwOwotCXN0cnVjdCBpbm9kZSAqYmRfaW5vZGUgPSBiZGV2LT5iZF9pbm9kZTsKLQlzdHJ1Y3QgZ2VuZGlzayAqZGlzayA9IGJkZXYtPmJkX2Rpc2s7Ci0KLQltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfbXV0ZXgsIHN1YmNsYXNzKTsKLQlsb2NrX2tlcm5lbCgpOwotCWlmICghLS1iZGV2LT5iZF9vcGVuZXJzKSB7Ci0JCXN5bmNfYmxvY2tkZXYoYmRldik7Ci0JCWtpbGxfYmRldihiZGV2KTsKLQl9Ci0JaWYgKGJkZXYtPmJkX2NvbnRhaW5zID09IGJkZXYpIHsKLQkJaWYgKGRpc2stPmZvcHMtPnJlbGVhc2UpCi0JCQlyZXQgPSBkaXNrLT5mb3BzLT5yZWxlYXNlKGJkX2lub2RlLCBOVUxMKTsKLQl9IGVsc2UgewotCQltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfY29udGFpbnMtPmJkX211dGV4LAotCQkJCSAgc3ViY2xhc3MgKyAxKTsKLQkJYmRldi0+YmRfY29udGFpbnMtPmJkX3BhcnRfY291bnQtLTsKLQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgpOwotCX0KLQlpZiAoIWJkZXYtPmJkX29wZW5lcnMpIHsKLQkJc3RydWN0IG1vZHVsZSAqb3duZXIgPSBkaXNrLT5mb3BzLT5vd25lcjsKLQotCQlwdXRfZGlzayhkaXNrKTsKLQkJbW9kdWxlX3B1dChvd25lcik7Ci0KLQkJaWYgKGJkZXYtPmJkX2NvbnRhaW5zICE9IGJkZXYpIHsKLQkJCWtvYmplY3RfcHV0KCZiZGV2LT5iZF9wYXJ0LT5rb2JqKTsKLQkJCWJkZXYtPmJkX3BhcnQgPSBOVUxMOwotCQl9Ci0JCWJkZXYtPmJkX2Rpc2sgPSBOVUxMOwotCQliZGV2LT5iZF9pbm9kZS0+aV9kYXRhLmJhY2tpbmdfZGV2X2luZm8gPSAmZGVmYXVsdF9iYWNraW5nX2Rldl9pbmZvOwotCQlpZiAoYmRldiAhPSBiZGV2LT5iZF9jb250YWlucykKLQkJCV9fYmxrZGV2X3B1dChiZGV2LT5iZF9jb250YWlucywgc3ViY2xhc3MgKyAxKTsKLQkJYmRldi0+YmRfY29udGFpbnMgPSBOVUxMOwotCX0KLQl1bmxvY2tfa2VybmVsKCk7Ci0JbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9tdXRleCk7Ci0JYmRwdXQoYmRldik7Ci0JcmV0dXJuIHJldDsKLX0KLQotaW50IGJsa2Rldl9wdXQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKLXsKLQlyZXR1cm4gX19ibGtkZXZfcHV0KGJkZXYsIEJEX01VVEVYX05PUk1BTCk7Ci19Ci0KLUVYUE9SVF9TWU1CT0woYmxrZGV2X3B1dCk7Ci0KLWludCBibGtkZXZfcHV0X3BhcnRpdGlvbihzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXJldHVybiBfX2Jsa2Rldl9wdXQoYmRldiwgQkRfTVVURVhfUEFSVElUSU9OKTsKLX0KLQotRVhQT1JUX1NZTUJPTChibGtkZXZfcHV0X3BhcnRpdGlvbik7Ci0KIHN0YXRpYyBpbnQgYmxrZGV2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IElfQkRFVihmaWxwLT5mX21hcHBpbmctPmhvc3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnVmZmVyLmMgYi9mcy9idWZmZXIuYwppbmRleCAzNjYwZGNiLi43MTY0OWVmIDEwMDY0NAotLS0gYS9mcy9idWZmZXIuYworKysgYi9mcy9idWZmZXIuYwpAQCAtNDcwLDEzICs0NzAsMTggQEAKICAgIHBhc3MgZG9lcyB0aGUgYWN0dWFsIEkvTy4gKi8KIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGludCBkZXN0cm95X2RpcnR5X2J1ZmZlcnMpCiB7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBiZGV2LT5iZF9pbm9kZS0+aV9tYXBwaW5nOworCisJaWYgKG1hcHBpbmctPm5ycGFnZXMgPT0gMCkKKwkJcmV0dXJuOworCiAJaW52YWxpZGF0ZV9iaF9scnVzKCk7CiAJLyoKIAkgKiBGSVhNRTogd2hhdCBhYm91dCBkZXN0cm95X2RpcnR5X2J1ZmZlcnM/CiAJICogV2UgcmVhbGx5IHdhbnQgdG8gdXNlIGludmFsaWRhdGVfaW5vZGVfcGFnZXMyKCkgZm9yCiAJICogdGhhdCwgYnV0IG5vdCB1bnRpbCB0aGF0J3MgY2xlYW5lZCB1cC4KIAkgKi8KLQlpbnZhbGlkYXRlX2lub2RlX3BhZ2VzKGJkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcpOworCWludmFsaWRhdGVfaW5vZGVfcGFnZXMobWFwcGluZyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9jaWZzL0NIQU5HRVMgYi9mcy9jaWZzL0NIQU5HRVMKaW5kZXggYTYxZDE3ZS4uMGZlYjNiZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9DSEFOR0VTCisrKyBiL2ZzL2NpZnMvQ0hBTkdFUwpAQCAtMSwzICsxLDEzIEBACitWZXJzaW9uIDEuNDUKKy0tLS0tLS0tLS0tLQorRG8gbm90IHRpbWUgb3V0IGxvY2t3IGNhbGxzIHdoZW4gdXNpbmcgcG9zaXggZXh0ZW5zaW9ucy4gRG8gbm90Cit0aW1lIG91dCByZXF1ZXN0cyBpZiBzZXJ2ZXIgc3RpbGwgcmVzcG9uZGluZyByZWFzb25hYmx5IGZhc3QKK29uIHJlcXVlc3RzIG9uIG90aGVyIHRocmVhZHMuICBJbXByb3ZlIFBPU0lYIGxvY2tpbmcgZW11bGF0aW9uLAorKGxvY2sgY2FuY2VsIG5vdyB3b3JrcywgYW5kIHVubG9jayBvZiBtZXJnZWQgcmFuZ2Ugd29ya3MgZXZlbgordG8gV2luZG93cyBzZXJ2ZXJzIG5vdykuICBGaXggb29wcyBvbiBtb3VudCB0byBsYW5tYW4gc2VydmVycworKHdpbjl4LCBvcy8yIGV0Yy4pIHdoZW4gbnVsbCBwYXNzd29yZC4gIERvIG5vdCBzZW5kIGxpc3R4YXR0cgorKFNNQiB0byBxdWVyeSBhbGwgRUFzKSBpZiBub3VzZXJfeGF0dHIgc3BlY2lmaWVkLgorCiBWZXJzaW9uIDEuNDQKIC0tLS0tLS0tLS0tLQogUmV3cml0dGVuIHNlc3Npb25zZXR1cCBzdXBwb3J0LCBpbmNsdWRpbmcgc3VwcG9ydCBmb3IgbGVnYWN5IFNNQgpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9SRUFETUUgYi9mcy9jaWZzL1JFQURNRQppbmRleCA3OTg2ZDBkLi41ZjBlMWJkIDEwMDY0NAotLS0gYS9mcy9jaWZzL1JFQURNRQorKysgYi9mcy9jaWZzL1JFQURNRQpAQCAtNDA4LDcgKzQwOCw3IEBACiAgIHVzZXJfeGF0dHIgICAgQWxsb3cgZ2V0dGluZyBhbmQgc2V0dGluZyB1c2VyIHhhdHRycyBhcyBPUy8yIEVBcyAoZXh0ZW5kZWQKIAkJYXR0cmlidXRlcykgdG8gdGhlIHNlcnZlciAoZGVmYXVsdCkgZS5nLiB2aWEgc2V0ZmF0dHIgCiAJCWFuZCBnZXRmYXR0ciB1dGlsaXRpZXMuIAotICBub3VzZXJfeGF0dHIgIERvIG5vdCBhbGxvdyBnZXRmYXR0ci9zZXRmYXR0ciB0byBnZXQvc2V0IHhhdHRycyAKKyAgbm91c2VyX3hhdHRyICBEbyBub3QgYWxsb3cgZ2V0ZmF0dHIvc2V0ZmF0dHIgdG8gZ2V0L3NldC9saXN0IHhhdHRycyAKICAgbWFwY2hhcnMgICAgICBUcmFuc2xhdGUgc2l4IG9mIHRoZSBzZXZlbiByZXNlcnZlZCBjaGFyYWN0ZXJzIChub3QgYmFja3NsYXNoKQogCQkJKj88Pnw6CiAJCXRvIHRoZSByZW1hcCByYW5nZSAoYWJvdmUgMHhGMDAwKSwgd2hpY2ggYWxzbwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZW5jcnlwdC5jIGIvZnMvY2lmcy9jaWZzZW5jcnlwdC5jCmluZGV4IGE4OWVmYWYuLjRiYzI1MGIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2VuY3J5cHQuYworKysgYi9mcy9jaWZzL2NpZnNlbmNyeXB0LmMKQEAgLTI3Nyw3ICsyNzcsOCBAQAogCQlyZXR1cm47CiAKIAltZW1zZXQocGFzc3dvcmRfd2l0aF9wYWQsIDAsIENJRlNfRU5DUFdEX1NJWkUpOwotCXN0cm5jcHkocGFzc3dvcmRfd2l0aF9wYWQsIHNlcy0+cGFzc3dvcmQsIENJRlNfRU5DUFdEX1NJWkUpOworCWlmKHNlcy0+cGFzc3dvcmQpCisJCXN0cm5jcHkocGFzc3dvcmRfd2l0aF9wYWQsIHNlcy0+cGFzc3dvcmQsIENJRlNfRU5DUFdEX1NJWkUpOwogCiAJaWYoKHNlcy0+c2VydmVyLT5zZWNNb2RlICYgU0VDTU9ERV9QV19FTkNSWVBUKSA9PSAwKQogCQlpZihleHRlbmRlZF9zZWN1cml0eSAmIENJRlNTRUNfTUFZX1BMTlRYVCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZnMuYyBiL2ZzL2NpZnMvY2lmc2ZzLmMKaW5kZXggYzI4ZWRlNS4uM2NkNzUwMCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZnMuYworKysgYi9mcy9jaWZzL2NpZnNmcy5jCkBAIC00MDIsNyArNDAyLDYgQEAKIH07CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogc3RhdGljIHZvaWQgY2lmc191bW91bnRfYmVnaW4oc3RydWN0IHZmc21vdW50ICogdmZzbW50LCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGNpZnNfc2JfaW5mbyAqY2lmc19zYjsKQEAgLTQyMiw3ICs0MjEsNyBAQAogCQl0Y29uLT50aWRTdGF0dXMgPSBDaWZzRXhpdGluZzsKIAl1cCgmdGNvbi0+dGNvblNlbSk7CiAKLQkvKiBjYW5jZWxfYnJsX3JlcXVlc3RzKHRjb24pOyAqLworCS8qIGNhbmNlbF9icmxfcmVxdWVzdHModGNvbik7ICovIC8qIEJCIG1hcmsgYWxsIGJybCBtaWRzIGFzIGV4aXRpbmcgKi8KIAkvKiBjYW5jZWxfbm90aWZ5X3JlcXVlc3RzKHRjb24pOyAqLwogCWlmKHRjb24tPnNlcyAmJiB0Y29uLT5zZXMtPnNlcnZlcikKIAl7CkBAIC00MzgsNyArNDM3LDYgQEAKIAogCXJldHVybjsKIH0KLSNlbmRpZgkKIAogc3RhdGljIGludCBjaWZzX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKIHsKQEAgLTQ1Nyw5ICs0NTUsNyBAQAogICAgdW5sZXNzIGxhdGVyIHdlIGFkZCBsYXp5IGNsb3NlIG9mIGlub2RlcyBvciB1bmxlc3MgdGhlIGtlcm5lbCBmb3JnZXRzIHRvIGNhbGwKICAgIHVzIHdpdGggdGhlIHNhbWUgbnVtYmVyIG9mIHJlbGVhc2VzIChjbG9zZXMpIGFzIG9wZW5zICovCiAJLnNob3dfb3B0aW9ucyA9IGNpZnNfc2hvd19vcHRpb25zLAotI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogCS51bW91bnRfYmVnaW4gICA9IGNpZnNfdW1vdW50X2JlZ2luLAotI2VuZGlmCiAJLnJlbW91bnRfZnMgPSBjaWZzX3JlbW91bnQsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5oIGIvZnMvY2lmcy9jaWZzZnMuaAppbmRleCA4Zjc1YzZmLi4zOWVlOGVmIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5oCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmgKQEAgLTEwMCw1ICsxMDAsNSBAQAogZXh0ZXJuIHNzaXplX3QJY2lmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqLCBjaGFyICosIHNpemVfdCk7CiBleHRlcm4gaW50IGNpZnNfaW9jdGwgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGVwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLSNkZWZpbmUgQ0lGU19WRVJTSU9OICAgIjEuNDQiCisjZGVmaW5lIENJRlNfVkVSU0lPTiAgICIxLjQ1IgogI2VuZGlmCQkJCS8qIF9DSUZTRlNfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jaWZzZ2xvYi5oIGIvZnMvY2lmcy9jaWZzZ2xvYi5oCmluZGV4IDZkN2NmNWYuLmIyNDAwNmMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc2dsb2IuaAorKysgYi9mcy9jaWZzL2NpZnNnbG9iLmgKQEAgLTMsNiArMyw3IEBACiAgKgogICogICBDb3B5cmlnaHQgKEMpIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgIENvcnAuLCAyMDAyLDIwMDYKICAqICAgQXV0aG9yKHMpOiBTdGV2ZSBGcmVuY2ggKHNmcmVuY2hAdXMuaWJtLmNvbSkKKyAqICAgICAgICAgICAgICBKZXJlbXkgQWxsaXNvbiAoanJhQHNhbWJhLm9yZykKICAqCiAgKiAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZApAQCAtMTU4LDcgKzE1OSw4IEBACiAJLyogMTZ0aCBieXRlIG9mIFJGQzEwMDEgd29ya3N0YXRpb24gbmFtZSBpcyBhbHdheXMgbnVsbCAqLwogCWNoYXIgd29ya3N0YXRpb25fUkZDMTAwMV9uYW1lW1NFUlZFUl9OQU1FX0xFTl9XSVRIX05VTExdOwogCV9fdTMyIHNlcXVlbmNlX251bWJlcjsgLyogbmVlZGVkIGZvciBDSUZTIFBEVSBzaWduYXR1cmUgKi8KLQljaGFyIG1hY19zaWduaW5nX2tleVtDSUZTX1NFU1NfS0VZX1NJWkUgKyAxNl07IAorCWNoYXIgbWFjX3NpZ25pbmdfa2V5W0NJRlNfU0VTU19LRVlfU0laRSArIDE2XTsKKwl1bnNpZ25lZCBsb25nIGxzdHJwOyAvKiB3aGVuIHdlIGdvdCBsYXN0IHJlc3BvbnNlIGZyb20gdGhpcyBzZXJ2ZXIgKi8KIH07CiAKIC8qCkBAIC0yNjYsMTQgKzI2OCwxNCBAQAogfTsKIAogLyoKLSAqIFRoaXMgaW5mbyBoYW5ncyBvZmYgdGhlIGNpZnNGaWxlSW5mbyBzdHJ1Y3R1cmUuICBUaGlzIGlzIHVzZWQgdG8gdHJhY2sKLSAqIGJ5dGUgc3RyZWFtIGxvY2tzIG9uIHRoZSBmaWxlCisgKiBUaGlzIGluZm8gaGFuZ3Mgb2ZmIHRoZSBjaWZzRmlsZUluZm8gc3RydWN0dXJlLCBwb2ludGVkIHRvIGJ5IGxsaXN0LgorICogVGhpcyBpcyB1c2VkIHRvIHRyYWNrIGJ5dGUgc3RyZWFtIGxvY2tzIG9uIHRoZSBmaWxlCiAgKi8KIHN0cnVjdCBjaWZzTG9ja0luZm8gewotCXN0cnVjdCBjaWZzTG9ja0luZm8gKm5leHQ7Ci0JaW50IHN0YXJ0OwotCWludCBsZW5ndGg7Ci0JaW50IHR5cGU7CisJc3RydWN0IGxpc3RfaGVhZCBsbGlzdDsJLyogcG9pbnRlciB0byBuZXh0IGNpZnNMb2NrSW5mbyAqLworCV9fdTY0IG9mZnNldDsKKwlfX3U2NCBsZW5ndGg7CisJX191OCB0eXBlOwogfTsKIAogLyoKQEAgLTMwNCw2ICszMDYsOCBAQAogCS8qIGxvY2sgc2NvcGUgaWQgKDAgaWYgbm9uZSkgKi8KIAlzdHJ1Y3QgZmlsZSAqIHBmaWxlOyAvKiBuZWVkZWQgZm9yIHdyaXRlcGFnZSAqLwogCXN0cnVjdCBpbm9kZSAqIHBJbm9kZTsgLyogbmVlZGVkIGZvciBvcGxvY2sgYnJlYWsgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIGxvY2tfc2VtOworCXN0cnVjdCBsaXN0X2hlYWQgbGxpc3Q7IC8qIGxpc3Qgb2YgYnl0ZSByYW5nZSBsb2NrcyB3ZSBoYXZlLiAqLwogCXVuc2lnbmVkIGNsb3NlUGVuZDoxOwkvKiBmaWxlIGlzIG1hcmtlZCB0byBjbG9zZSAqLwogCXVuc2lnbmVkIGludmFsaWRIYW5kbGU6MTsgIC8qIGZpbGUgY2xvc2VkIHZpYSBzZXNzaW9uIGFiZW5kICovCiAJYXRvbWljX3Qgd3J0UGVuZGluZzsgICAvKiBoYW5kbGUgaW4gdXNlIC0gZGVmZXIgY2xvc2UgKi8KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IGE1ZGRjNjIuLmIzNWM1NWMgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtNTAsNiArNTAsMTAgQEAKIGV4dGVybiBpbnQgU2VuZFJlY2VpdmUyKGNvbnN0IHVuc2lnbmVkIGludCAvKiB4aWQgKi8gLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKiwKIAkJCXN0cnVjdCBrdmVjICosIGludCAvKiBudmVjIHRvIHNlbmQgKi8sIAogCQkJaW50ICogLyogdHlwZSBvZiBidWYgcmV0dXJuZWQgKi8gLCBjb25zdCBpbnQgbG9uZ19vcCk7CitleHRlcm4gaW50IFNlbmRSZWNlaXZlQmxvY2tpbmdMb2NrKGNvbnN0IHVuc2lnbmVkIGludCAvKiB4aWQgKi8gLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICosCisJCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBpbnB1dCAqLyAsCisJCQkJc3RydWN0IHNtYl9oZHIgKiAvKiBvdXQgKi8gLAorCQkJCWludCAqIC8qIGJ5dGVzIHJldHVybmVkICovKTsKIGV4dGVybiBpbnQgY2hlY2tTTUJoZHIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkKTsKIGV4dGVybiBpbnQgY2hlY2tTTUIoc3RydWN0IHNtYl9oZHIgKnNtYiwgX191MTYgbWlkLCBpbnQgbGVuZ3RoKTsKIGV4dGVybiBpbnQgaXNfdmFsaWRfb3Bsb2NrX2JyZWFrKHN0cnVjdCBzbWJfaGRyICpzbWIsIHN0cnVjdCBUQ1BfU2VydmVyX0luZm8gKik7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNzbWIuYyBiL2ZzL2NpZnMvY2lmc3NtYi5jCmluZGV4IDE5Njc4YzUuLjA3NWQ4ZmIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3NtYi5jCisrKyBiL2ZzL2NpZnMvY2lmc3NtYi5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAkJLyogQkIgZ2V0IHNlcnZlciB0aW1lIGZvciB0aW1lIGNvbnZlcnNpb25zIGFuZCBhZGQKIAkJY29kZSB0byB1c2UgaXQgYW5kIHRpbWV6b25lIHNpbmNlIHRoaXMgaXMgbm90IFVUQyAqLwkKIAotCQlpZiAocnNwLT5FbmNyeXB0aW9uS2V5TGVuZ3RoID09IENJRlNfQ1JZUFRPX0tFWV9TSVpFKSB7CisJCWlmIChyc3AtPkVuY3J5cHRpb25LZXlMZW5ndGggPT0gY3B1X3RvX2xlMTYoQ0lGU19DUllQVE9fS0VZX1NJWkUpKSB7CiAJCQltZW1jcHkoc2VydmVyLT5jcnlwdEtleSwgcnNwLT5FbmNyeXB0aW9uS2V5LAogCQkJCUNJRlNfQ1JZUFRPX0tFWV9TSVpFKTsKIAkJfSBlbHNlIGlmIChzZXJ2ZXItPnNlY01vZGUgJiBTRUNNT0RFX1BXX0VOQ1JZUFQpIHsKQEAgLTE0NjAsOCArMTQ2MCwxMyBAQAogCXBTTUItPmhkci5zbWJfYnVmX2xlbmd0aCArPSBjb3VudDsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihjb3VudCk7CiAKLQlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKKwlpZiAod2FpdEZsYWcpIHsKKwkJcmMgPSBTZW5kUmVjZWl2ZUJsb2NraW5nTG9jayh4aWQsIHRjb24sIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAorCQkJKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQpOworCX0gZWxzZSB7CisJCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAogCQkJIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCB0aW1lb3V0KTsKKwl9CiAJY2lmc19zdGF0c19pbmMoJnRjb24tPm51bV9sb2Nrcyk7CiAJaWYgKHJjKSB7CiAJCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIExvY2sgPSAlZCIsIHJjKSk7CkBAIC0xNDg0LDYgKzE0ODksNyBAQAogCWNoYXIgKmRhdGFfb2Zmc2V0OwogCXN0cnVjdCBjaWZzX3Bvc2l4X2xvY2sgKnBhcm1fZGF0YTsKIAlpbnQgcmMgPSAwOworCWludCB0aW1lb3V0ID0gMDsKIAlpbnQgYnl0ZXNfcmV0dXJuZWQgPSAwOwogCV9fdTE2IHBhcmFtcywgcGFyYW1fb2Zmc2V0LCBvZmZzZXQsIGJ5dGVfY291bnQsIGNvdW50OwogCkBAIC0xNTAzLDcgKzE1MDksNiBAQAogCXBTTUItPk1heFNldHVwQ291bnQgPSAwOwogCXBTTUItPlJlc2VydmVkID0gMDsKIAlwU01CLT5GbGFncyA9IDA7Ci0JcFNNQi0+VGltZW91dCA9IDA7CiAJcFNNQi0+UmVzZXJ2ZWQyID0gMDsKIAlwYXJhbV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3Qgc21iX2NvbV90cmFuc2FjdGlvbjJfc2ZpX3JlcSwgRmlkKSAtIDQ7CiAJb2Zmc2V0ID0gcGFyYW1fb2Zmc2V0ICsgcGFyYW1zOwpAQCAtMTUyOSw4ICsxNTM0LDEzIEBACiAJCQkoKChjaGFyICopICZwU01CLT5oZHIuUHJvdG9jb2wpICsgb2Zmc2V0KTsKIAogCXBhcm1fZGF0YS0+bG9ja190eXBlID0gY3B1X3RvX2xlMTYobG9ja190eXBlKTsKLQlpZih3YWl0RmxhZykKKwlpZih3YWl0RmxhZykgeworCQl0aW1lb3V0ID0gMzsgIC8qIGJsb2NraW5nIG9wZXJhdGlvbiwgbm8gdGltZW91dCAqLwogCQlwYXJtX2RhdGEtPmxvY2tfZmxhZ3MgPSBjcHVfdG9fbGUxNigxKTsKKwkJcFNNQi0+VGltZW91dCA9IGNwdV90b19sZTMyKC0xKTsKKwl9IGVsc2UKKwkJcFNNQi0+VGltZW91dCA9IDA7CisKIAlwYXJtX2RhdGEtPnBpZCA9IGNwdV90b19sZTMyKGN1cnJlbnQtPnRnaWQpOwogCXBhcm1fZGF0YS0+c3RhcnQgPSBjcHVfdG9fbGU2NChwTG9ja0RhdGEtPmZsX3N0YXJ0KTsKIAlwYXJtX2RhdGEtPmxlbmd0aCA9IGNwdV90b19sZTY0KGxlbik7ICAvKiBub3JtYWxpemUgbmVnYXRpdmUgbnVtYmVycyAqLwpAQCAtMTU0MSw4ICsxNTUxLDE0IEBACiAJcFNNQi0+UmVzZXJ2ZWQ0ID0gMDsKIAlwU01CLT5oZHIuc21iX2J1Zl9sZW5ndGggKz0gYnl0ZV9jb3VudDsKIAlwU01CLT5CeXRlQ291bnQgPSBjcHVfdG9fbGUxNihieXRlX2NvdW50KTsKLQlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKLQkJCShzdHJ1Y3Qgc21iX2hkciAqKSBwU01CciwgJmJ5dGVzX3JldHVybmVkLCAwKTsKKwlpZiAod2FpdEZsYWcpIHsKKwkJcmMgPSBTZW5kUmVjZWl2ZUJsb2NraW5nTG9jayh4aWQsIHRjb24sIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAorCQkJKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQpOworCX0gZWxzZSB7CisJCXJjID0gU2VuZFJlY2VpdmUoeGlkLCB0Y29uLT5zZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLAorCQkJKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIHRpbWVvdXQpOworCX0KKwogCWlmIChyYykgewogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBQb3NpeCBMb2NrID0gJWQiLCByYykpOwogCX0gZWxzZSBpZiAoZ2V0X2ZsYWcpIHsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY29ubmVjdC5jIGIvZnMvY2lmcy9jb25uZWN0LmMKaW5kZXggODc2ZWI5ZS4uNWQzOTRjNyAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jb25uZWN0LmMKKysrIGIvZnMvY2lmcy9jb25uZWN0LmMKQEAgLTE4Miw2ICsxODIsNyBAQAogCiAJd2hpbGUgKChzZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzRXhpdGluZykgJiYgKHNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kKSkKIAl7CisJCXRyeV90b19mcmVlemUoKTsKIAkJaWYoc2VydmVyLT5wcm90b2NvbFR5cGUgPT0gSVBWNikgewogCQkJcmMgPSBpcHY2X2Nvbm5lY3QoJnNlcnZlci0+YWRkci5zb2NrQWRkcjYsJnNlcnZlci0+c3NvY2tldCk7CiAJCX0gZWxzZSB7CkBAIC02MTIsNiArNjEzLDEwIEBACiAjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCiAJCQkJbWlkX2VudHJ5LT53aGVuX3JlY2VpdmVkID0gamlmZmllczsKICNlbmRpZgorCQkJCS8qIHNvIHdlIGRvIG5vdCB0aW1lIG91dCByZXF1ZXN0cyB0byAgc2VydmVyCisJCQkJd2hpY2ggaXMgc3RpbGwgcmVzcG9uZGluZyAoc2luY2Ugc2VydmVyIGNvdWxkCisJCQkJYmUgYnVzeSBidXQgbm90IGRlYWQpICovCisJCQkJc2VydmVyLT5sc3RycCA9IGppZmZpZXM7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KQEAgLTEyNjYsMzMgKzEyNzEsMzUgQEAKIAogCXJlYWRfbG9jaygmR2xvYmFsU01CU2VzbG9jayk7CiAJbGlzdF9mb3JfZWFjaCh0bXAsICZHbG9iYWxUcmVlQ29ubmVjdGlvbkxpc3QpIHsKLQkJY0ZZSSgxLCAoIk5leHQgdGNvbiAtICIpKTsKKwkJY0ZZSSgxLCAoIk5leHQgdGNvbiIpKTsKIAkJdGNvbiA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvLCBjaWZzQ29ubmVjdGlvbkxpc3QpOwogCQlpZiAodGNvbi0+c2VzKSB7CiAJCQlpZiAodGNvbi0+c2VzLT5zZXJ2ZXIpIHsKIAkJCQljRllJKDEsCi0JCQkJICAgICAoIiBvbGQgaXAgYWRkcjogJXggPT0gbmV3IGlwICV4ID8iLAorCQkJCSAgICAgKCJvbGQgaXAgYWRkcjogJXggPT0gbmV3IGlwICV4ID8iLAogCQkJCSAgICAgIHRjb24tPnNlcy0+c2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLgogCQkJCSAgICAgIHNfYWRkciwgbmV3X3RhcmdldF9pcF9hZGRyKSk7CiAJCQkJaWYgKHRjb24tPnNlcy0+c2VydmVyLT5hZGRyLnNvY2tBZGRyLnNpbl9hZGRyLgogCQkJCSAgICBzX2FkZHIgPT0gbmV3X3RhcmdldF9pcF9hZGRyKSB7Ci0JLyogQkIgbG9jayB0Y29uIGFuZCBzZXJ2ZXIgYW5kIHRjcCBzZXNzaW9uIGFuZCBpbmNyZW1lbnQgdXNlIGNvdW50IGhlcmU/ICovCisJLyogQkIgbG9jayB0Y29uLCBzZXJ2ZXIgYW5kIHRjcCBzZXNzaW9uIGFuZCBpbmNyZW1lbnQgdXNlIGNvdW50IGhlcmU/ICovCiAJCQkJCS8qIGZvdW5kIGEgbWF0Y2ggb24gdGhlIFRDUCBzZXNzaW9uICovCiAJCQkJCS8qIEJCIGNoZWNrIGlmIHJlY29ubmVjdGlvbiBuZWVkZWQgKi8KLQkJCQkJY0ZZSSgxLCgiTWF0Y2hlZCBpcCwgb2xkIFVOQzogJXMgPT0gbmV3OiAlcyA/IiwKKwkJCQkJY0ZZSSgxLCgiSVAgbWF0Y2gsIG9sZCBVTkM6ICVzIG5ldzogJXMiLAogCQkJCQkgICAgICB0Y29uLT50cmVlTmFtZSwgdW5jTmFtZSkpOwogCQkJCQlpZiAoc3RybmNtcAogCQkJCQkgICAgKHRjb24tPnRyZWVOYW1lLCB1bmNOYW1lLAogCQkJCQkgICAgIE1BWF9UUkVFX1NJWkUpID09IDApIHsKIAkJCQkJCWNGWUkoMSwKLQkJCQkJCSAgICAgKCJNYXRjaGVkIFVOQywgb2xkIHVzZXI6ICVzID09IG5ldzogJXMgPyIsCisJCQkJCQkgICAgICgiYW5kIG9sZCB1c3I6ICVzIG5ldzogJXMiLAogCQkJCQkJICAgICAgdGNvbi0+dHJlZU5hbWUsIHVuY05hbWUpKTsKIAkJCQkJCWlmIChzdHJuY21wCiAJCQkJCQkgICAgKHRjb24tPnNlcy0+dXNlck5hbWUsCiAJCQkJCQkgICAgIHVzZXJOYW1lLAogCQkJCQkJICAgICBNQVhfVVNFUk5BTUVfU0laRSkgPT0gMCkgewogCQkJCQkJCXJlYWRfdW5sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKLQkJCQkJCQlyZXR1cm4gdGNvbjsvKiBhbHNvIG1hdGNoZWQgdXNlciAoc21iIHNlc3Npb24pKi8KKwkJCQkJCQkvKiBtYXRjaGVkIHNtYiBzZXNzaW9uCisJCQkJCQkJKHVzZXIgbmFtZSAqLworCQkJCQkJCXJldHVybiB0Y29uOwogCQkJCQkJfQogCQkJCQl9CiAJCQkJfQpAQCAtMTk2OSw3ICsxOTc2LDE4IEBACiAJCQkJfQogCQkJCQkKIAkJCQljRllJKDEsKCJOZWdvdGlhdGUgY2FwcyAweCV4IiwoaW50KWNhcCkpOwotCisjaWZkZWYgQ09ORklHX0NJRlNfREVCVUcyCisJCQkJaWYoY2FwICYgQ0lGU19VTklYX0ZDTlRMX0NBUCkKKwkJCQkJY0ZZSSgxLCgiRkNOVEwgY2FwIikpOworCQkJCWlmKGNhcCAmIENJRlNfVU5JWF9FWFRBVFRSX0NBUCkKKwkJCQkJY0ZZSSgxLCgiRVhUQVRUUiBjYXAiKSk7CisJCQkJaWYoY2FwICYgQ0lGU19VTklYX1BPU0lYX1BBVEhOQU1FU19DQVApCisJCQkJCWNGWUkoMSwoIlBPU0lYIHBhdGggY2FwIikpOworCQkJCWlmKGNhcCAmIENJRlNfVU5JWF9YQVRUUl9DQVApCisJCQkJCWNGWUkoMSwoIlhBVFRSIGNhcCIpKTsKKwkJCQlpZihjYXAgJiBDSUZTX1VOSVhfUE9TSVhfQUNMX0NBUCkKKwkJCQkJY0ZZSSgxLCgiUE9TSVggQUNMIGNhcCIpKTsKKyNlbmRpZiAvKiBDSUZTX0RFQlVHMiAqLwogCQkJCWlmIChDSUZTU01CU2V0RlNVbml4SW5mbyh4aWQsIHRjb24sIGNhcCkpIHsKIAkJCQkJY0ZZSSgxLCgic2V0dGluZyBjYXBhYmlsaXRpZXMgZmFpbGVkIikpOwogCQkJCX0KZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZGlyLmMgYi9mcy9jaWZzL2Rpci5jCmluZGV4IGJhNGNiZTkuLjkxNDIzOWQ1IDEwMDY0NAotLS0gYS9mcy9jaWZzL2Rpci5jCisrKyBiL2ZzL2NpZnMvZGlyLmMKQEAgLTI2Nyw2ICsyNjcsMTAgQEAKIAkJCXBDaWZzRmlsZS0+aW52YWxpZEhhbmRsZSA9IEZBTFNFOwogCQkJcENpZnNGaWxlLT5jbG9zZVBlbmQgICAgID0gRkFMU0U7CiAJCQlpbml0X01VVEVYKCZwQ2lmc0ZpbGUtPmZoX3NlbSk7CisJCQlpbml0X01VVEVYKCZwQ2lmc0ZpbGUtPmxvY2tfc2VtKTsKKwkJCUlOSVRfTElTVF9IRUFEKCZwQ2lmc0ZpbGUtPmxsaXN0KTsKKwkJCWF0b21pY19zZXQoJnBDaWZzRmlsZS0+d3J0UGVuZGluZywwKTsKKwogCQkJLyogc2V0IHRoZSBmb2xsb3dpbmcgaW4gb3BlbiBub3cgCiAJCQkJcENpZnNGaWxlLT5wZmlsZSA9IGZpbGU7ICovCiAJCQl3cml0ZV9sb2NrKCZHbG9iYWxTTUJTZXNsb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvZmlsZS5jIGIvZnMvY2lmcy9maWxlLmMKaW5kZXggOTQ0ZDJiOS4uZTljNWJhOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9maWxlLmMKKysrIGIvZnMvY2lmcy9maWxlLmMKQEAgLTUsNiArNSw3IEBACiAgKiAKICAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDAzCiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCisgKiAgICAgICAgICAgICAgSmVyZW15IEFsbGlzb24gKGpyYUBzYW1iYS5vcmcpCiAgKgogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKQEAgLTQ3LDYgKzQ4LDggQEAKIAlwcml2YXRlX2RhdGEtPm5ldGZpZCA9IG5ldGZpZDsKIAlwcml2YXRlX2RhdGEtPnBpZCA9IGN1cnJlbnQtPnRnaWQ7CQogCWluaXRfTVVURVgoJnByaXZhdGVfZGF0YS0+Zmhfc2VtKTsKKwlpbml0X01VVEVYKCZwcml2YXRlX2RhdGEtPmxvY2tfc2VtKTsKKwlJTklUX0xJU1RfSEVBRCgmcHJpdmF0ZV9kYXRhLT5sbGlzdCk7CiAJcHJpdmF0ZV9kYXRhLT5wZmlsZSA9IGZpbGU7IC8qIG5lZWRlZCBmb3Igd3JpdGVwYWdlICovCiAJcHJpdmF0ZV9kYXRhLT5wSW5vZGUgPSBpbm9kZTsKIAlwcml2YXRlX2RhdGEtPmludmFsaWRIYW5kbGUgPSBGQUxTRTsKQEAgLTQ3Myw2ICs0NzYsOCBAQAogCWNpZnNfc2IgPSBDSUZTX1NCKGlub2RlLT5pX3NiKTsKIAlwVGNvbiA9IGNpZnNfc2ItPnRjb247CiAJaWYgKHBTTUJGaWxlKSB7CisJCXN0cnVjdCBjaWZzTG9ja0luZm8gKmxpLCAqdG1wOworCiAJCXBTTUJGaWxlLT5jbG9zZVBlbmQgPSBUUlVFOwogCQlpZiAocFRjb24pIHsKIAkJCS8qIG5vIHNlbnNlIHJlY29ubmVjdGluZyB0byBjbG9zZSBhIGZpbGUgdGhhdCBpcwpAQCAtNDk2LDYgKzUwMSwxNiBAQAogCQkJCQkJICBwU01CRmlsZS0+bmV0ZmlkKTsKIAkJCX0KIAkJfQorCisJCS8qIERlbGV0ZSBhbnkgb3V0c3RhbmRpbmcgbG9jayByZWNvcmRzLgorCQkgICBXZSdsbCBsb3NlIHRoZW0gd2hlbiB0aGUgZmlsZSBpcyBjbG9zZWQgYW55d2F5LiAqLworCQlkb3duKCZwU01CRmlsZS0+bG9ja19zZW0pOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobGksIHRtcCwgJnBTTUJGaWxlLT5sbGlzdCwgbGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZsaS0+bGxpc3QpOworCQkJa2ZyZWUobGkpOworCQl9CisJCXVwKCZwU01CRmlsZS0+bG9ja19zZW0pOworCiAJCXdyaXRlX2xvY2soJkdsb2JhbFNNQlNlc2xvY2spOwogCQlsaXN0X2RlbCgmcFNNQkZpbGUtPmZsaXN0KTsKIAkJbGlzdF9kZWwoJnBTTUJGaWxlLT50bGlzdCk7CkBAIC01NzAsNiArNTg1LDIxIEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHN0b3JlX2ZpbGVfbG9jayhzdHJ1Y3QgY2lmc0ZpbGVJbmZvICpmaWQsIF9fdTY0IGxlbiwKKwkJCQlfX3U2NCBvZmZzZXQsIF9fdTggbG9ja1R5cGUpCit7CisJc3RydWN0IGNpZnNMb2NrSW5mbyAqbGkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lmc0xvY2tJbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxpID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWxpLT5vZmZzZXQgPSBvZmZzZXQ7CisJbGktPmxlbmd0aCA9IGxlbjsKKwlsaS0+dHlwZSA9IGxvY2tUeXBlOworCWRvd24oJmZpZC0+bG9ja19zZW0pOworCWxpc3RfYWRkKCZsaS0+bGxpc3QsICZmaWQtPmxsaXN0KTsKKwl1cCgmZmlkLT5sb2NrX3NlbSk7CisJcmV0dXJuIDA7Cit9CisKIGludCBjaWZzX2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKnBmTG9jaykKIHsKIAlpbnQgcmMsIHhpZDsKQEAgLTU4MSw2ICs2MTEsNyBAQAogCXN0cnVjdCBjaWZzVGNvbkluZm8gKnBUY29uOwogCV9fdTE2IG5ldGZpZDsKIAlfX3U4IGxvY2tUeXBlID0gTE9DS0lOR19BTkRYX0xBUkdFX0ZJTEVTOworCWludCBwb3NpeF9sb2NraW5nOwogCiAJbGVuZ3RoID0gMSArIHBmTG9jay0+ZmxfZW5kIC0gcGZMb2NrLT5mbF9zdGFydDsKIAlyYyA9IC1FQUNDRVM7CkBAIC02MzksMTUgKzY3MCwxNCBAQAogCX0KIAluZXRmaWQgPSAoKHN0cnVjdCBjaWZzRmlsZUluZm8gKilmaWxlLT5wcml2YXRlX2RhdGEpLT5uZXRmaWQ7CiAKKwlwb3NpeF9sb2NraW5nID0gKGNpZnNfc2ItPnRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpICYmCisJCQkoQ0lGU19VTklYX0ZDTlRMX0NBUCAmIGxlNjRfdG9fY3B1KGNpZnNfc2ItPnRjb24tPmZzVW5peEluZm8uQ2FwYWJpbGl0eSkpOwogCiAJLyogQkIgYWRkIGNvZGUgaGVyZSB0byBub3JtYWxpemUgb2Zmc2V0IGFuZCBsZW5ndGggdG8KIAlhY2NvdW50IGZvciBuZWdhdGl2ZSBsZW5ndGggd2hpY2ggd2UgY2FuIG5vdCBhY2NlcHQgb3ZlciB0aGUKIAl3aXJlICovCiAJaWYgKElTX0dFVExLKGNtZCkpIHsKLQkJaWYoZXhwZXJpbUVuYWJsZWQgJiYgCi0JCSAgIChjaWZzX3NiLT50Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgotCQkgICAoQ0lGU19VTklYX0ZDTlRMX0NBUCAmIAotCQkJbGU2NF90b19jcHUoY2lmc19zYi0+dGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKKwkJaWYocG9zaXhfbG9ja2luZykgewogCQkJaW50IHBvc2l4X2xvY2tfdHlwZTsKIAkJCWlmKGxvY2tUeXBlICYgTE9DS0lOR19BTkRYX1NIQVJFRF9MT0NLKQogCQkJCXBvc2l4X2xvY2tfdHlwZSA9IENJRlNfUkRMQ0s7CkBAIC02ODMsMTAgKzcxMywxNSBAQAogCQlGcmVlWGlkKHhpZCk7CiAJCXJldHVybiByYzsKIAl9Ci0JaWYgKGV4cGVyaW1FbmFibGVkICYmCi0JCShjaWZzX3NiLT50Y29uLT5zZXMtPmNhcGFiaWxpdGllcyAmIENBUF9VTklYKSAmJgotCQkoQ0lGU19VTklYX0ZDTlRMX0NBUCAmCi0JCQkgbGU2NF90b19jcHUoY2lmc19zYi0+dGNvbi0+ZnNVbml4SW5mby5DYXBhYmlsaXR5KSkpIHsKKworCWlmICghbnVtTG9jayAmJiAhbnVtVW5sb2NrKSB7CisJCS8qIGlmIG5vIGxvY2sgb3IgdW5sb2NrIHRoZW4gbm90aGluZworCQl0byBkbyBzaW5jZSB3ZSBkbyBub3Qga25vdyB3aGF0IGl0IGlzICovCisJCUZyZWVYaWQoeGlkKTsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KKworCWlmIChwb3NpeF9sb2NraW5nKSB7CiAJCWludCBwb3NpeF9sb2NrX3R5cGU7CiAJCWlmKGxvY2tUeXBlICYgTE9DS0lOR19BTkRYX1NIQVJFRF9MT0NLKQogCQkJcG9zaXhfbG9ja190eXBlID0gQ0lGU19SRExDSzsKQEAgLTY5NSwxOCArNzMwLDQ2IEBACiAJCQogCQlpZihudW1VbmxvY2sgPT0gMSkKIAkJCXBvc2l4X2xvY2tfdHlwZSA9IENJRlNfVU5MQ0s7Ci0JCWVsc2UgaWYobnVtTG9jayA9PSAwKSB7Ci0JCQkvKiBpZiBubyBsb2NrIG9yIHVubG9jayB0aGVuIG5vdGhpbmcKLQkJCXRvIGRvIHNpbmNlIHdlIGRvIG5vdCBrbm93IHdoYXQgaXQgaXMgKi8KLQkJCUZyZWVYaWQoeGlkKTsKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJfQorCiAJCXJjID0gQ0lGU1NNQlBvc2l4TG9jayh4aWQsIHBUY29uLCBuZXRmaWQsIDAgLyogc2V0ICovLAogCQkJCSAgICAgIGxlbmd0aCwgcGZMb2NrLAogCQkJCSAgICAgIHBvc2l4X2xvY2tfdHlwZSwgd2FpdF9mbGFnKTsKLQl9IGVsc2UKLQkJcmMgPSBDSUZTU01CTG9jayh4aWQsIHBUY29uLCBuZXRmaWQsIGxlbmd0aCwgcGZMb2NrLT5mbF9zdGFydCwKLQkJCQludW1VbmxvY2ssIG51bUxvY2ssIGxvY2tUeXBlLCB3YWl0X2ZsYWcpOworCX0gZWxzZSB7CisJCXN0cnVjdCBjaWZzRmlsZUluZm8gKmZpZCA9IChzdHJ1Y3QgY2lmc0ZpbGVJbmZvICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJCWlmIChudW1Mb2NrKSB7CisJCQlyYyA9IENJRlNTTUJMb2NrKHhpZCwgcFRjb24sIG5ldGZpZCwgbGVuZ3RoLCBwZkxvY2stPmZsX3N0YXJ0LAorCQkJCQkwLCBudW1Mb2NrLCBsb2NrVHlwZSwgd2FpdF9mbGFnKTsKKworCQkJaWYgKHJjID09IDApIHsKKwkJCQkvKiBGb3IgV2luZG93cyBsb2NrcyB3ZSBtdXN0IHN0b3JlIHRoZW0uICovCisJCQkJcmMgPSBzdG9yZV9maWxlX2xvY2soZmlkLCBsZW5ndGgsCisJCQkJCQlwZkxvY2stPmZsX3N0YXJ0LCBsb2NrVHlwZSk7CisJCQl9CisJCX0gZWxzZSBpZiAobnVtVW5sb2NrKSB7CisJCQkvKiBGb3IgZWFjaCBzdG9yZWQgbG9jayB0aGF0IHRoaXMgdW5sb2NrIG92ZXJsYXBzCisJCQkgICBjb21wbGV0ZWx5LCB1bmxvY2sgaXQuICovCisJCQlpbnQgc3RvcmVkX3JjID0gMDsKKwkJCXN0cnVjdCBjaWZzTG9ja0luZm8gKmxpLCAqdG1wOworCisJCQlkb3duKCZmaWQtPmxvY2tfc2VtKTsKKwkJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaSwgdG1wLCAmZmlkLT5sbGlzdCwgbGxpc3QpIHsKKwkJCQlpZiAocGZMb2NrLT5mbF9zdGFydCA8PSBsaS0+b2Zmc2V0ICYmCisJCQkJCQlsZW5ndGggPj0gbGktPmxlbmd0aCkgeworCQkJCQlzdG9yZWRfcmMgPSBDSUZTU01CTG9jayh4aWQsIHBUY29uLCBuZXRmaWQsCisJCQkJCQkJbGktPmxlbmd0aCwgbGktPm9mZnNldCwKKwkJCQkJCQkxLCAwLCBsaS0+dHlwZSwgRkFMU0UpOworCQkJCQlpZiAoc3RvcmVkX3JjKQorCQkJCQkJcmMgPSBzdG9yZWRfcmM7CisKKwkJCQkJbGlzdF9kZWwoJmxpLT5sbGlzdCk7CisJCQkJCWtmcmVlKGxpKTsKKwkJCQl9CisJCQl9CisJCXVwKCZmaWQtPmxvY2tfc2VtKTsKKwkJfQorCX0KKwogCWlmIChwZkxvY2stPmZsX2ZsYWdzICYgRkxfUE9TSVgpCiAJCXBvc2l4X2xvY2tfZmlsZV93YWl0KGZpbGUsIHBmTG9jayk7CiAJRnJlZVhpZCh4aWQpOwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9uZXRtaXNjLmMgYi9mcy9jaWZzL25ldG1pc2MuYwppbmRleCBiNjZlZmY1Li5jZTg3NTUwIDEwMDY0NAotLS0gYS9mcy9jaWZzL25ldG1pc2MuYworKysgYi9mcy9jaWZzL25ldG1pc2MuYwpAQCAtNzIsNiArNzIsNyBAQAogCXtFUlJpbnZsZXZlbCwtRU9QTk9UU1VQUH0sCiAJe0VSUmRpcm5vdGVtcHR5LCAtRU5PVEVNUFRZfSwKIAl7RVJSbm90bG9ja2VkLCAtRU5PTENLfSwKKwl7RVJSY2FuY2VsdmlvbGF0aW9uLCAtRU5PTENLfSwKIAl7RVJSYWxyZWFkeWV4aXN0cywgLUVFWElTVH0sCiAJe0VSUm1vcmVkYXRhLCAtRU9WRVJGTE9XfSwKIAl7RVJSZWFzbm90c3VwcG9ydGVkLC1FT1BOT1RTVVBQfSwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvcmVhZGRpci5jIGIvZnMvY2lmcy9yZWFkZGlyLmMKaW5kZXggMDNiYmNiMy4uOWFlYjU4YSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9yZWFkZGlyLmMKKysrIGIvZnMvY2lmcy9yZWFkZGlyLmMKQEAgLTgyLDcgKzgyLDYgQEAKIAkJCWlmKCpwdG1wX2lub2RlID09IE5VTEwpCiAJCQkJcmV0dXJuIHJjOwogCQkJcmMgPSAxOwotCQkJZF9pbnN0YW50aWF0ZSh0bXBfZGVudHJ5LCAqcHRtcF9pbm9kZSk7CiAJCX0KIAl9IGVsc2UgewogCQl0bXBfZGVudHJ5ID0gZF9hbGxvYyhmaWxlLT5mX2RlbnRyeSwgcXN0cmluZyk7CkBAIC05OSw5ICs5OCw3IEBACiAJCQl0bXBfZGVudHJ5LT5kX29wID0gJmNpZnNfZGVudHJ5X29wczsKIAkJaWYoKnB0bXBfaW5vZGUgPT0gTlVMTCkKIAkJCXJldHVybiByYzsKLQkJcmMgPSAxOwotCQlkX2luc3RhbnRpYXRlKHRtcF9kZW50cnksICpwdG1wX2lub2RlKTsKLQkJZF9yZWhhc2godG1wX2RlbnRyeSk7CisJCXJjID0gMjsKIAl9CiAKIAl0bXBfZGVudHJ5LT5kX3RpbWUgPSBqaWZmaWVzOwpAQCAtNTU2LDcgKzU1Myw3IEBACiAJCUZJTkRfRklMRV9TVEFOREFSRF9JTkZPICogcEZpbmREYXRhID0KIAkJCShGSU5EX0ZJTEVfU1RBTkRBUkRfSU5GTyAqKWN1cnJlbnRfZW50cnk7CiAJCWZpbGVuYW1lID0gJnBGaW5kRGF0YS0+RmlsZU5hbWVbMF07Ci0JCWxlbiA9IGxlMzJfdG9fY3B1KHBGaW5kRGF0YS0+RmlsZU5hbWVMZW5ndGgpOworCQlsZW4gPSBwRmluZERhdGEtPkZpbGVOYW1lTGVuZ3RoOwogCX0gZWxzZSB7CiAJCWNGWUkoMSwoIlVua25vd24gZmluZGZpcnN0IGxldmVsICVkIixjZmlsZS0+c3JjaF9pbmYuaW5mb19sZXZlbCkpOwogCX0KQEAgLTg3MCw2ICs4NjcsMTIgQEAKIAkJCQlwZmluZEVudHJ5LCAmb2JqX3R5cGUsIHJjKTsKIAllbHNlCiAJCWZpbGxfaW5faW5vZGUodG1wX2lub2RlLCAxIC8qIE5UICovLCBwZmluZEVudHJ5LCAmb2JqX3R5cGUsIHJjKTsKKworCWlmKHJjKSAvKiBuZXcgaW5vZGUgLSBuZWVkcyB0byBiZSB0aWVkIHRvIGRlbnRyeSAqLyB7CisJCWRfaW5zdGFudGlhdGUodG1wX2RlbnRyeSwgdG1wX2lub2RlKTsKKwkJaWYocmMgPT0gMikKKwkJCWRfcmVoYXNoKHRtcF9kZW50cnkpOworCX0KIAkKIAkKIAlyYyA9IGZpbGxkaXIoZGlyZW50cnkscXN0cmluZy5uYW1lLHFzdHJpbmcubGVuLGZpbGUtPmZfcG9zLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9zZXNzLmMgYi9mcy9jaWZzL3Nlc3MuYwppbmRleCA3MjAyZDUzLi5kMTcwNWFiIDEwMDY0NAotLS0gYS9mcy9jaWZzL3Nlc3MuYworKysgYi9mcy9jaWZzL3Nlc3MuYwpAQCAtMzcyLDcgKzM3Miw3IEBACiAKIAkJLyogbm8gY2FwYWJpbGl0aWVzIGZsYWdzIGluIG9sZCBsYW5tYW4gbmVnb3RpYXRpb24gKi8KIAotCQlwU01CLT5vbGRfcmVxLlBhc3N3b3JkTGVuZ3RoID0gQ0lGU19TRVNTX0tFWV9TSVpFOyAKKwkJcFNNQi0+b2xkX3JlcS5QYXNzd29yZExlbmd0aCA9IGNwdV90b19sZTE2KENJRlNfU0VTU19LRVlfU0laRSk7IAogCQkvKiBCQiBjYWxjdWxhdGUgaGFzaCB3aXRoIHBhc3N3b3JkICovCiAJCS8qIGFuZCBjb3B5IGludG8gYmNjICovCiAKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvc21iZXJyLmggYi9mcy9jaWZzL3NtYmVyci5oCmluZGV4IGNkNDFjNjcuLjIxMmMzYzIgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvc21iZXJyLmgKKysrIGIvZnMvY2lmcy9zbWJlcnIuaApAQCAtOTUsNiArOTUsNyBAQAogI2RlZmluZSBFUlJpbnZsZXZlbAkJMTI0CiAjZGVmaW5lIEVSUmRpcm5vdGVtcHR5CQkxNDUKICNkZWZpbmUgRVJSbm90bG9ja2VkCQkxNTgKKyNkZWZpbmUgRVJSY2FuY2VsdmlvbGF0aW9uCTE3MwogI2RlZmluZSBFUlJhbHJlYWR5ZXhpc3RzCTE4MwogI2RlZmluZSBFUlJiYWRwaXBlCQkyMzAKICNkZWZpbmUgRVJScGlwZWJ1c3kJCTIzMQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy90cmFuc3BvcnQuYyBiL2ZzL2NpZnMvdHJhbnNwb3J0LmMKaW5kZXggMTdiYTMyOS4uNDhkNDdiNCAxMDA2NDQKLS0tIGEvZnMvY2lmcy90cmFuc3BvcnQuYworKysgYi9mcy9jaWZzL3RyYW5zcG9ydC5jCkBAIC0zLDcgKzMsOCBAQAogICoKICAqICAgQ29weXJpZ2h0IChDKSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzICBDb3JwLiwgMjAwMiwyMDA1CiAgKiAgIEF1dGhvcihzKTogU3RldmUgRnJlbmNoIChzZnJlbmNoQHVzLmlibS5jb20pCi0gKgorICogICBKZXJlbXkgQWxsaXNvbiAoanJhQHNhbWJhLm9yZykgMjAwNi4KKyAqICAgIAogICogICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKICAqICAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtMzYsNyArMzcsNyBAQAogZXh0ZXJuIGttZW1fY2FjaGVfdCAqY2lmc19vcGxvY2tfY2FjaGVwOwogCiBzdGF0aWMgc3RydWN0IG1pZF9xX2VudHJ5ICoKLUFsbG9jTWlkUUVudHJ5KHN0cnVjdCBzbWJfaGRyICpzbWJfYnVmZmVyLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKK0FsbG9jTWlkUUVudHJ5KGNvbnN0IHN0cnVjdCBzbWJfaGRyICpzbWJfYnVmZmVyLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcykKIHsKIAlzdHJ1Y3QgbWlkX3FfZW50cnkgKnRlbXA7CiAKQEAgLTIwMyw2ICsyMDQsMTAgQEAKIAkJcmMgPSAwOwogCX0KIAorCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQorCSAgIHNpZGUgZWZmZWN0IG9mIHRoaXMgY2FsbC4gKi8KKwlzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCA9IHNtYl9idWZfbGVuZ3RoOworCiAJcmV0dXJuIHJjOwogfQogCkBAIC0yMTcsNiArMjIyLDcgQEAKIAl1bnNpZ25lZCBpbnQgbGVuID0gaW92WzBdLmlvdl9sZW47CiAJdW5zaWduZWQgaW50IHRvdGFsX2xlbjsKIAlpbnQgZmlyc3RfdmVjID0gMDsKKwl1bnNpZ25lZCBpbnQgc21iX2J1Zl9sZW5ndGggPSBzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aDsKIAkKIAlpZihzc29ja2V0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PVFNPQ0s7IC8qIEJCIGV2ZW50dWFsbHkgYWRkIHJlY29ubmVjdCBjb2RlIGhlcmUgKi8KQEAgLTI5Myw5ICsyOTksMTIzIEBACiAJfSBlbHNlCiAJCXJjID0gMDsKIAorCS8qIERvbid0IHdhbnQgdG8gbW9kaWZ5IHRoZSBidWZmZXIgYXMgYQorCSAgIHNpZGUgZWZmZWN0IG9mIHRoaXMgY2FsbC4gKi8KKwlzbWJfYnVmZmVyLT5zbWJfYnVmX2xlbmd0aCA9IHNtYl9idWZfbGVuZ3RoOworCiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywgY29uc3QgaW50IGxvbmdfb3ApCit7CisJaWYobG9uZ19vcCA9PSAtMSkgeworCQkvKiBvcGxvY2sgYnJlYWtzIG11c3Qgbm90IGJlIGhlbGQgdXAgKi8KKwkJYXRvbWljX2luYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsKKwl9IGVsc2UgeworCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsgCisJCXdoaWxlKDEpIHsgICAgICAgIAorCQkJaWYoYXRvbWljX3JlYWQoJnNlcy0+c2VydmVyLT5pbkZsaWdodCkgPj0gCisJCQkJCWNpZnNfbWF4X3BlbmRpbmcpeworCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJCQkJYXRvbWljX2luYygmc2VzLT5zZXJ2ZXItPm51bV93YWl0ZXJzKTsKKyNlbmRpZgorCQkJCXdhaXRfZXZlbnQoc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSwKKwkJCQkJYXRvbWljX3JlYWQoJnNlcy0+c2VydmVyLT5pbkZsaWdodCkKKwkJCQkJIDwgY2lmc19tYXhfcGVuZGluZyk7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPm51bV93YWl0ZXJzKTsKKyNlbmRpZgorCQkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJfSBlbHNlIHsKKwkJCQlpZihzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQkJCXJldHVybiAtRU5PRU5UOworCQkJCX0KKworCQkJCS8qIGNhbiBub3QgY291bnQgbG9ja2luZyBjb21tYW5kcyBhZ2FpbnN0IHRvdGFsIHNpbmNlCisJCQkJICAgdGhleSBhcmUgYWxsb3dlZCB0byBibG9jayBvbiBzZXJ2ZXIgKi8KKwkJCQkJCisJCQkJLyogdXBkYXRlICMgb2YgcmVxdWVzdHMgb24gdGhlIHdpcmUgdG8gc2VydmVyICovCisJCQkJaWYgKGxvbmdfb3AgPCAzKQorCQkJCQlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOworCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NhdGVfbWlkKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLCBzdHJ1Y3Qgc21iX2hkciAqaW5fYnVmLAorCQkJc3RydWN0IG1pZF9xX2VudHJ5ICoqcHBtaWRRKQoreworCWlmIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKSB7CisJCXJldHVybiAtRU5PRU5UOworCX0gZWxzZSBpZiAoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmVlZFJlY29ubmVjdCkgeworCQljRllJKDEsKCJ0Y3Agc2Vzc2lvbiBkZWFkIC0gcmV0dXJuIHRvIGNhbGxlciB0byByZXRyeSIpKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfSBlbHNlIGlmIChzZXMtPnN0YXR1cyAhPSBDaWZzR29vZCkgeworCQkvKiBjaGVjayBpZiBTTUIgc2Vzc2lvbiBpcyBiYWQgYmVjYXVzZSB3ZSBhcmUgc2V0dGluZyBpdCB1cCAqLworCQlpZigoaW5fYnVmLT5Db21tYW5kICE9IFNNQl9DT01fU0VTU0lPTl9TRVRVUF9BTkRYKSAmJiAKKwkJCShpbl9idWYtPkNvbW1hbmQgIT0gU01CX0NPTV9ORUdPVElBVEUpKSB7CisJCQlyZXR1cm4gLUVBR0FJTjsKKwkJfSAvKiBlbHNlIG9rIC0gd2UgYXJlIHNldHRpbmcgdXAgc2Vzc2lvbiAqLworCX0KKwkqcHBtaWRRID0gQWxsb2NNaWRRRW50cnkoaW5fYnVmLCBzZXMpOworCWlmICgqcHBtaWRRID09IE5VTEwpIHsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdhaXRfZm9yX3Jlc3BvbnNlKHN0cnVjdCBjaWZzU2VzSW5mbyAqc2VzLCAKKwkJCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkUSwKKwkJCXVuc2lnbmVkIGxvbmcgdGltZW91dCwKKwkJCXVuc2lnbmVkIGxvbmcgdGltZV90b193YWl0KQoreworCXVuc2lnbmVkIGxvbmcgY3Vycl90aW1lb3V0OworCisJZm9yICg7OykgeworCQljdXJyX3RpbWVvdXQgPSB0aW1lb3V0ICsgamlmZmllczsKKwkJd2FpdF9ldmVudChzZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKKwkJCSghKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHx8IAorCQkJdGltZV9hZnRlcihqaWZmaWVzLCBjdXJyX3RpbWVvdXQpIHx8IAorCQkJKChzZXMtPnNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kKSAmJgorCQkJIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNOZXcpKSk7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgY3Vycl90aW1lb3V0KSAmJgorCQkJKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgJiYKKwkJCSgoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzR29vZCkgfHwKKwkJCSAoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzTmV3KSkpIHsKKworCQkJdW5zaWduZWQgbG9uZyBscnQ7CisKKwkJCS8qIFdlIHRpbWVkIG91dC4gSXMgdGhlIHNlcnZlciBzdGlsbAorCQkJICAgc2VuZGluZyByZXBsaWVzID8gKi8KKwkJCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCQkJbHJ0ID0gc2VzLT5zZXJ2ZXItPmxzdHJwOworCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKKworCQkJLyogQ2FsY3VsYXRlIHRpbWVfdG9fd2FpdCBwYXN0IGxhc3QgcmVjZWl2ZSB0aW1lLgorCQkJIEFsdGhvdWdoIHdlIHByZWZlciBub3QgdG8gdGltZSBvdXQgaWYgdGhlIAorCQkJIHNlcnZlciBpcyBzdGlsbCByZXNwb25kaW5nIC0gd2Ugd2lsbCB0aW1lCisJCQkgb3V0IGlmIHRoZSBzZXJ2ZXIgdGFrZXMgbW9yZSB0aGFuIDE1IChvciA0NSAKKwkJCSBvciAxODApIHNlY29uZHMgdG8gcmVzcG9uZCB0byB0aGlzIHJlcXVlc3QKKwkJCSBhbmQgaGFzIG5vdCByZXNwb25kZWQgdG8gYW55IHJlcXVlc3QgZnJvbSAKKwkJCSBvdGhlciB0aHJlYWRzIG9uIHRoZSBjbGllbnQgd2l0aGluIDEwIHNlY29uZHMgKi8KKwkJCWxydCArPSB0aW1lX3RvX3dhaXQ7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBscnQpKSB7CisJCQkJLyogTm8gcmVwbGllcyBmb3IgdGltZV90b193YWl0LiAqLworCQkJCWNFUlJPUigxLCgic2VydmVyIG5vdCByZXNwb25kaW5nIikpOworCQkJCXJldHVybiAtMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisJfQorfQorCiBpbnQKIFNlbmRSZWNlaXZlMihjb25zdCB1bnNpZ25lZCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlcywgCiAJICAgICBzdHJ1Y3Qga3ZlYyAqaW92LCBpbnQgbl92ZWMsIGludCAqIHBSZXNwQnVmVHlwZSAvKiByZXQgKi8sIApAQCAtMzIzLDc1ICs0NDMsMjcgQEAKIAkvKiBFbnN1cmUgdGhhdCB3ZSBkbyBub3Qgc2VuZCBtb3JlIHRoYW4gNTAgb3ZlcmxhcHBpbmcgcmVxdWVzdHMgCiAJICAgdG8gdGhlIHNhbWUgc2VydmVyLiBXZSBtYXkgbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBsYXRlciBvcgogCSAgIHVzZSBzZXMtPm1heFJlcSAqLwotCWlmKGxvbmdfb3AgPT0gLTEpIHsKLQkJLyogb3Bsb2NrIGJyZWFrcyBtdXN0IG5vdCBiZSBoZWxkIHVwICovCi0JCWF0b21pY19pbmMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7IAotCQl3aGlsZSgxKSB7ICAgICAgICAKLQkJCWlmKGF0b21pY19yZWFkKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpID49IAotCQkJCQljaWZzX21heF9wZW5kaW5nKXsKLQkJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCQkJCWF0b21pY19pbmMoJnNlcy0+c2VydmVyLT5udW1fd2FpdGVycyk7Ci0jZW5kaWYKLQkJCQl3YWl0X2V2ZW50KHNlcy0+c2VydmVyLT5yZXF1ZXN0X3EsCi0JCQkJCWF0b21pY19yZWFkKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpCi0JCQkJCSA8IGNpZnNfbWF4X3BlbmRpbmcpOwotI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTMgotCQkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5udW1fd2FpdGVycyk7Ci0jZW5kaWYKLQkJCQlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykgewotCQkJCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwotCQkJCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7Ci0JCQkJCXJldHVybiAtRU5PRU5UOwotCQkJCX0KIAotCQkJLyogY2FuIG5vdCBjb3VudCBsb2NraW5nIGNvbW1hbmRzIGFnYWluc3QgdG90YWwgc2luY2UKLQkJCSAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gYmxvY2sgb24gc2VydmVyICovCi0JCQkJCQotCQkJCWlmKGxvbmdfb3AgPCAzKSB7Ci0JCQkJLyogdXBkYXRlICMgb2YgcmVxdWVzdHMgb24gdGhlIHdpcmUgdG8gc2VydmVyICovCi0JCQkJCWF0b21pY19pbmMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7Ci0JCQkJfQotCQkJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KKwlyYyA9IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzZXMsIGxvbmdfb3ApOworCWlmIChyYykgeworCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7CisJCXJldHVybiByYzsKIAl9CisKIAkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBzaWduIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgd2Ugc2VuZCBvbiB0aGlzIHNvY2tldCAKIAkgICBhbmQgYXZvaWQgcmFjZXMgaW5zaWRlIHRjcCBzZW5kbXNnIGNvZGUgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uCiAJICAgb2Ygc21iIGRhdGEgKi8KIAogCWRvd24oJnNlcy0+c2VydmVyLT50Y3BTZW0pOyAKIAotCWlmIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNFeGl0aW5nKSB7Ci0JCXJjID0gLUVOT0VOVDsKLQkJZ290byBvdXRfdW5sb2NrMjsKLQl9IGVsc2UgaWYgKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpIHsKLQkJY0ZZSSgxLCgidGNwIHNlc3Npb24gZGVhZCAtIHJldHVybiB0byBjYWxsZXIgdG8gcmV0cnkiKSk7Ci0JCXJjID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrMjsKLQl9IGVsc2UgaWYgKHNlcy0+c3RhdHVzICE9IENpZnNHb29kKSB7Ci0JCS8qIGNoZWNrIGlmIFNNQiBzZXNzaW9uIGlzIGJhZCBiZWNhdXNlIHdlIGFyZSBzZXR0aW5nIGl0IHVwICovCi0JCWlmKChpbl9idWYtPkNvbW1hbmQgIT0gU01CX0NPTV9TRVNTSU9OX1NFVFVQX0FORFgpICYmIAotCQkJKGluX2J1Zi0+Q29tbWFuZCAhPSBTTUJfQ09NX05FR09USUFURSkpIHsKLQkJCXJjID0gLUVBR0FJTjsKLQkJCWdvdG8gb3V0X3VubG9jazI7Ci0JCX0gLyogZWxzZSBvayAtIHdlIGFyZSBzZXR0aW5nIHVwIHNlc3Npb24gKi8KLQl9Ci0JbWlkUSA9IEFsbG9jTWlkUUVudHJ5KGluX2J1Ziwgc2VzKTsKLQlpZiAobWlkUSA9PSBOVUxMKSB7CisJcmMgPSBhbGxvY2F0ZV9taWQoc2VzLCBpbl9idWYsICZtaWRRKTsKKwlpZiAocmMpIHsKIAkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOwogCQljaWZzX3NtYWxsX2J1Zl9yZWxlYXNlKGluX2J1Zik7Ci0JCS8qIElmIG5vdCBsb2NrIHJlcSwgdXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi8KLQkJaWYobG9uZ19vcCA8IDMpIHsKLQkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IAotCQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7Ci0JCX0KLQkJcmV0dXJuIC1FTk9NRU07CisJCS8qIFVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCisJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IAorCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwkJcmV0dXJuIHJjOwogCX0KIAogIAlyYyA9IGNpZnNfc2lnbl9zbWIyKGlvdiwgbl92ZWMsIHNlcy0+c2VydmVyLCAmbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsKQEAgLTQwNiwzMiArNDc4LDIzIEBACiAJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7CiAJbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKICNlbmRpZgotCWlmKHJjIDwgMCkgewotCQlEZWxldGVNaWRRRW50cnkobWlkUSk7Ci0JCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKLQkJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOwotCQkvKiBJZiBub3QgbG9jayByZXEsIHVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCi0JCWlmKGxvbmdfb3AgPCAzKSB7Ci0JCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKLQkJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwotCQl9Ci0JCXJldHVybiByYzsKLQl9IGVsc2UgewotCQl1cCgmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7Ci0JCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKLQl9CisKKwl1cCgmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7CisJY2lmc19zbWFsbF9idWZfcmVsZWFzZShpbl9idWYpOworCisJaWYocmMgPCAwKQorCQlnb3RvIG91dDsKIAogCWlmIChsb25nX29wID09IC0xKQotCQlnb3RvIGNpZnNfbm9fcmVzcG9uc2VfZXhpdDI7CisJCWdvdG8gb3V0OwogCWVsc2UgaWYgKGxvbmdfb3AgPT0gMikgLyogd3JpdGVzIHBhc3QgZW5kIG9mIGZpbGUgY2FuIHRha2UgbG9vbmcgdGltZSAqLwogCQl0aW1lb3V0ID0gMTgwICogSFo7CiAJZWxzZSBpZiAobG9uZ19vcCA9PSAxKQogCQl0aW1lb3V0ID0gNDUgKiBIWjsgLyogc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAKIAkJCXNlcnZlcnMgb3Bsb2NrIGJyZWFrIHRpbWVvdXQgKGFib3V0IDQzIHNlY29uZHMpICovCi0JZWxzZSBpZiAobG9uZ19vcCA+IDIpIHsKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCX0gZWxzZQorCWVsc2UKIAkJdGltZW91dCA9IDE1ICogSFo7CisKIAkvKiB3YWl0IGZvciAxNSBzZWNvbmRzIG9yIHVudGlsIHdva2VuIHVwIGR1ZSB0byByZXNwb25zZSBhcnJpdmluZyBvciAKIAkgICBkdWUgdG8gbGFzdCBjb25uZWN0aW9uIHRvIHRoaXMgc2VydmVyIGJlaW5nIHVubW91bnRlZCAqLwogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewpAQCAtNDQxLDE5ICs1MDQsNyBAQAogCX0gICAKIAogCS8qIE5vIHVzZXIgaW50ZXJydXB0cyBpbiB3YWl0IC0gd3JlYWtzIGhhdm9jIHdpdGggcGVyZm9ybWFuY2UgKi8KLQlpZih0aW1lb3V0ICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7Ci0JCXRpbWVvdXQgKz0gamlmZmllczsKLQkJd2FpdF9ldmVudChzZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKLQkJCSghKG1pZFEtPm1pZFN0YXRlICYgTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSkgfHwgCi0JCQl0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpIHx8IAotCQkJKChzZXMtPnNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kKSAmJgotCQkJIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNOZXcpKSk7Ci0JfSBlbHNlIHsKLQkJd2FpdF9ldmVudChzZXMtPnNlcnZlci0+cmVzcG9uc2VfcSwKLQkJCSghKG1pZFEtPm1pZFN0YXRlICYgTUlEX1JFUVVFU1RfU1VCTUlUVEVEKSkgfHwgCi0JCQkoKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0dvb2QpICYmCi0JCQkgKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc05ldykpKTsKLQl9CisJd2FpdF9mb3JfcmVzcG9uc2Uoc2VzLCBtaWRRLCB0aW1lb3V0LCAxMCAqIEhaKTsKIAogCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOwogCWlmIChtaWRRLT5yZXNwX2J1ZikgewpAQCAtNDgxLDExICs1MzIsOSBAQAogCQl9CiAJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CiAJCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKLQkJLyogSWYgbm90IGxvY2sgcmVxLCB1cGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLwotCQlpZihsb25nX29wIDwgMykgewotCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCi0JCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKLQkJfQorCQkvKiBVcGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLworCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKKwkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CiAJCXJldHVybiByYzsKIAl9CiAgIApAQCAtNTM2LDI0ICs1ODUsMTIgQEAKIAkJCWNGWUkoMSwoIkJhZCBNSUQgc3RhdGU/IikpOwogCQl9CiAJfQotY2lmc19ub19yZXNwb25zZV9leGl0MjoKKworb3V0OgorCiAJRGVsZXRlTWlkUUVudHJ5KG1pZFEpOwotCi0JaWYobG9uZ19vcCA8IDMpIHsKLQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCi0JCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwotCX0KLQotCXJldHVybiByYzsKLQotb3V0X3VubG9jazI6Ci0JdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOwotCWNpZnNfc21hbGxfYnVmX3JlbGVhc2UoaW5fYnVmKTsKLQkvKiBJZiBub3QgbG9jayByZXEsIHVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCi0JaWYobG9uZ19vcCA8IDMpIHsKLQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCi0JCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwotCX0KKwlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKKwl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTU4Myw4NSArNjIwLDM0IEBACiAJLyogRW5zdXJlIHRoYXQgd2UgZG8gbm90IHNlbmQgbW9yZSB0aGFuIDUwIG92ZXJsYXBwaW5nIHJlcXVlc3RzIAogCSAgIHRvIHRoZSBzYW1lIHNlcnZlci4gV2UgbWF5IG1ha2UgdGhpcyBjb25maWd1cmFibGUgbGF0ZXIgb3IKIAkgICB1c2Ugc2VzLT5tYXhSZXEgKi8KLQlpZihsb25nX29wID09IC0xKSB7Ci0JCS8qIG9wbG9jayBicmVha3MgbXVzdCBub3QgYmUgaGVsZCB1cCAqLwotCQlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOwotCX0gZWxzZSB7Ci0JCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOyAKLQkJd2hpbGUoMSkgeyAgICAgICAgCi0JCQlpZihhdG9taWNfcmVhZCgmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KSA+PSAKLQkJCQkJY2lmc19tYXhfcGVuZGluZyl7Ci0JCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKLQkJCQlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+bnVtX3dhaXRlcnMpOwotI2VuZGlmCi0JCQkJd2FpdF9ldmVudChzZXMtPnNlcnZlci0+cmVxdWVzdF9xLAotCQkJCQlhdG9taWNfcmVhZCgmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KQotCQkJCQkgPCBjaWZzX21heF9wZW5kaW5nKTsKLSNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKLQkJCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+bnVtX3dhaXRlcnMpOwotI2VuZGlmCi0JCQkJc3Bpbl9sb2NrKCZHbG9iYWxNaWRfTG9jayk7Ci0JCQl9IGVsc2UgewotCQkJCWlmKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpIHsKLQkJCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJCQkJcmV0dXJuIC1FTk9FTlQ7Ci0JCQkJfQogCi0JCQkvKiBjYW4gbm90IGNvdW50IGxvY2tpbmcgY29tbWFuZHMgYWdhaW5zdCB0b3RhbCBzaW5jZQotCQkJICAgdGhleSBhcmUgYWxsb3dlZCB0byBibG9jayBvbiBzZXJ2ZXIgKi8KLQkJCQkJCi0JCQkJaWYobG9uZ19vcCA8IDMpIHsKLQkJCQkvKiB1cGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB0aGUgd2lyZSB0byBzZXJ2ZXIgKi8KLQkJCQkJYXRvbWljX2luYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsKLQkJCQl9Ci0JCQkJc3Bpbl91bmxvY2soJkdsb2JhbE1pZF9Mb2NrKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KKwlyYyA9IHdhaXRfZm9yX2ZyZWVfcmVxdWVzdChzZXMsIGxvbmdfb3ApOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCiAJLyogbWFrZSBzdXJlIHRoYXQgd2Ugc2lnbiBpbiB0aGUgc2FtZSBvcmRlciB0aGF0IHdlIHNlbmQgb24gdGhpcyBzb2NrZXQgCiAJICAgYW5kIGF2b2lkIHJhY2VzIGluc2lkZSB0Y3Agc2VuZG1zZyBjb2RlIHRoYXQgY291bGQgY2F1c2UgY29ycnVwdGlvbgogCSAgIG9mIHNtYiBkYXRhICovCiAKIAlkb3duKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsgCiAKLQlpZiAoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykgewotCQlyYyA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9IGVsc2UgaWYgKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc05lZWRSZWNvbm5lY3QpIHsKLQkJY0ZZSSgxLCgidGNwIHNlc3Npb24gZGVhZCAtIHJldHVybiB0byBjYWxsZXIgdG8gcmV0cnkiKSk7Ci0JCXJjID0gLUVBR0FJTjsKLQkJZ290byBvdXRfdW5sb2NrOwotCX0gZWxzZSBpZiAoc2VzLT5zdGF0dXMgIT0gQ2lmc0dvb2QpIHsKLQkJLyogY2hlY2sgaWYgU01CIHNlc3Npb24gaXMgYmFkIGJlY2F1c2Ugd2UgYXJlIHNldHRpbmcgaXQgdXAgKi8KLQkJaWYoKGluX2J1Zi0+Q29tbWFuZCAhPSBTTUJfQ09NX1NFU1NJT05fU0VUVVBfQU5EWCkgJiYgCi0JCQkoaW5fYnVmLT5Db21tYW5kICE9IFNNQl9DT01fTkVHT1RJQVRFKSkgewotCQkJcmMgPSAtRUFHQUlOOwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9IC8qIGVsc2Ugb2sgLSB3ZSBhcmUgc2V0dGluZyB1cCBzZXNzaW9uICovCi0JfQotCW1pZFEgPSBBbGxvY01pZFFFbnRyeShpbl9idWYsIHNlcyk7Ci0JaWYgKG1pZFEgPT0gTlVMTCkgeworCXJjID0gYWxsb2NhdGVfbWlkKHNlcywgaW5fYnVmLCAmbWlkUSk7CisJaWYgKHJjKSB7CiAJCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKLQkJLyogSWYgbm90IGxvY2sgcmVxLCB1cGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLwotCQlpZihsb25nX29wIDwgMykgewotCQkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCi0JCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKLQkJfQotCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogVXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi8KKwkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCisJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOworCQlyZXR1cm4gcmM7CiAJfQogCiAJaWYgKGluX2J1Zi0+c21iX2J1Zl9sZW5ndGggPiBDSUZTTWF4QnVmU2l6ZSArIE1BWF9DSUZTX0hEUl9TSVpFIC0gNCkgewotCQl1cCgmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7CiAJCWNFUlJPUigxLCAoIklsbGVnYWwgbGVuZ3RoLCBncmVhdGVyIHRoYW4gbWF4aW11bSBmcmFtZSwgJWQiLAogCQkJaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCkpOwogCQlEZWxldGVNaWRRRW50cnkobWlkUSk7Ci0JCS8qIElmIG5vdCBsb2NrIHJlcSwgdXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi8KLQkJaWYobG9uZ19vcCA8IDMpIHsKLQkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IAotCQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7Ci0JCX0KKwkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOworCQkvKiBVcGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLworCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKKwkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtNjc3LDI3ICs2NjMsMTkgQEAKIAlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKIAltaWRRLT53aGVuX3NlbnQgPSBqaWZmaWVzOwogI2VuZGlmCi0JaWYocmMgPCAwKSB7Ci0JCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKLQkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOwotCQkvKiBJZiBub3QgbG9jayByZXEsIHVwZGF0ZSAjIG9mIHJlcXVlc3RzIG9uIHdpcmUgdG8gc2VydmVyICovCi0JCWlmKGxvbmdfb3AgPCAzKSB7Ci0JCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKLQkJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwotCQl9Ci0JCXJldHVybiByYzsKLQl9IGVsc2UKLQkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOworCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKKworCWlmKHJjIDwgMCkKKwkJZ290byBvdXQ7CisKIAlpZiAobG9uZ19vcCA9PSAtMSkKLQkJZ290byBjaWZzX25vX3Jlc3BvbnNlX2V4aXQ7CisJCWdvdG8gb3V0OwogCWVsc2UgaWYgKGxvbmdfb3AgPT0gMikgLyogd3JpdGVzIHBhc3QgZW5kIG9mIGZpbGUgY2FuIHRha2UgbG9vbmcgdGltZSAqLwogCQl0aW1lb3V0ID0gMTgwICogSFo7CiAJZWxzZSBpZiAobG9uZ19vcCA9PSAxKQogCQl0aW1lb3V0ID0gNDUgKiBIWjsgLyogc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAKIAkJCXNlcnZlcnMgb3Bsb2NrIGJyZWFrIHRpbWVvdXQgKGFib3V0IDQzIHNlY29uZHMpICovCi0JZWxzZSBpZiAobG9uZ19vcCA+IDIpIHsKLQkJdGltZW91dCA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwotCX0gZWxzZQorCWVsc2UKIAkJdGltZW91dCA9IDE1ICogSFo7CiAJLyogd2FpdCBmb3IgMTUgc2Vjb25kcyBvciB1bnRpbCB3b2tlbiB1cCBkdWUgdG8gcmVzcG9uc2UgYXJyaXZpbmcgb3IgCiAJICAgZHVlIHRvIGxhc3QgY29ubmVjdGlvbiB0byB0aGlzIHNlcnZlciBiZWluZyB1bm1vdW50ZWQgKi8KQEAgLTcwOCwxOSArNjg2LDcgQEAKIAl9ICAgCiAKIAkvKiBObyB1c2VyIGludGVycnVwdHMgaW4gd2FpdCAtIHdyZWFrcyBoYXZvYyB3aXRoIHBlcmZvcm1hbmNlICovCi0JaWYodGltZW91dCAhPSBNQVhfU0NIRURVTEVfVElNRU9VVCkgewotCQl0aW1lb3V0ICs9IGppZmZpZXM7Ci0JCXdhaXRfZXZlbnQoc2VzLT5zZXJ2ZXItPnJlc3BvbnNlX3EsCi0JCQkoIShtaWRRLT5taWRTdGF0ZSAmIE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHx8IAotCQkJdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSB8fCAKLQkJCSgoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzR29vZCkgJiYKLQkJCSAoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzTmV3KSkpOwotCX0gZWxzZSB7Ci0JCXdhaXRfZXZlbnQoc2VzLT5zZXJ2ZXItPnJlc3BvbnNlX3EsCi0JCQkoIShtaWRRLT5taWRTdGF0ZSAmIE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHx8IAotCQkJKChzZXMtPnNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNHb29kKSAmJgotCQkJIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzICE9IENpZnNOZXcpKSk7Ci0JfQorCXdhaXRfZm9yX3Jlc3BvbnNlKHNlcywgbWlkUSwgdGltZW91dCwgMTAgKiBIWik7CiAKIAlzcGluX2xvY2soJkdsb2JhbE1pZF9Mb2NrKTsKIAlpZiAobWlkUS0+cmVzcF9idWYpIHsKQEAgLTc0OCwxMSArNzE0LDkgQEAKIAkJfQogCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOwogCQlEZWxldGVNaWRRRW50cnkobWlkUSk7Ci0JCS8qIElmIG5vdCBsb2NrIHJlcSwgdXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi8KLQkJaWYobG9uZ19vcCA8IDMpIHsKLQkJCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IAotCQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7Ci0JCX0KKwkJLyogVXBkYXRlICMgb2YgcmVxdWVzdHMgb24gd2lyZSB0byBzZXJ2ZXIgKi8KKwkJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluRmxpZ2h0KTsgCisJCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCQlyZXR1cm4gcmM7CiAJfQogICAKQEAgLTc5OSwyMyArNzYzLDI1MyBAQAogCQkJY0VSUk9SKDEsKCJCYWQgTUlEIHN0YXRlPyIpKTsKIAkJfQogCX0KLWNpZnNfbm9fcmVzcG9uc2VfZXhpdDoKLQlEZWxldGVNaWRRRW50cnkobWlkUSk7CiAKLQlpZihsb25nX29wIDwgMykgewotCQlhdG9taWNfZGVjKCZzZXMtPnNlcnZlci0+aW5GbGlnaHQpOyAKLQkJd2FrZV91cCgmc2VzLT5zZXJ2ZXItPnJlcXVlc3RfcSk7Ci0JfQorb3V0OgorCisJRGVsZXRlTWlkUUVudHJ5KG1pZFEpOworCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IAorCXdha2VfdXAoJnNlcy0+c2VydmVyLT5yZXF1ZXN0X3EpOwogCiAJcmV0dXJuIHJjOworfQogCi1vdXRfdW5sb2NrOgorLyogU2VuZCBhbiBOVF9DQU5DRUwgU01CIHRvIGNhdXNlIHRoZSBQT1NJWCBibG9ja2luZyBsb2NrIHRvIHJldHVybi4gKi8KKworc3RhdGljIGludAorc2VuZF9udF9jYW5jZWwoc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwgc3RydWN0IHNtYl9oZHIgKmluX2J1ZiwKKwkJc3RydWN0IG1pZF9xX2VudHJ5ICptaWRRKQoreworCWludCByYyA9IDA7CisJc3RydWN0IGNpZnNTZXNJbmZvICpzZXMgPSB0Y29uLT5zZXM7CisJX191MTYgbWlkID0gaW5fYnVmLT5NaWQ7CisKKwloZWFkZXJfYXNzZW1ibGUoaW5fYnVmLCBTTUJfQ09NX05UX0NBTkNFTCwgdGNvbiwgMCk7CisJaW5fYnVmLT5NaWQgPSBtaWQ7CisJZG93bigmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7IAorCXJjID0gY2lmc19zaWduX3NtYihpbl9idWYsIHNlcy0+c2VydmVyLCAmbWlkUS0+c2VxdWVuY2VfbnVtYmVyKTsKKwlpZiAocmMpIHsKKwkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOworCQlyZXR1cm4gcmM7CisJfQorCXJjID0gc21iX3NlbmQoc2VzLT5zZXJ2ZXItPnNzb2NrZXQsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCwKKwkgICAgICAoc3RydWN0IHNvY2thZGRyICopICYoc2VzLT5zZXJ2ZXItPmFkZHIuc29ja0FkZHIpKTsKIAl1cCgmc2VzLT5zZXJ2ZXItPnRjcFNlbSk7Ci0JLyogSWYgbm90IGxvY2sgcmVxLCB1cGRhdGUgIyBvZiByZXF1ZXN0cyBvbiB3aXJlIHRvIHNlcnZlciAqLwotCWlmKGxvbmdfb3AgPCAzKSB7Ci0JCWF0b21pY19kZWMoJnNlcy0+c2VydmVyLT5pbkZsaWdodCk7IAotCQl3YWtlX3VwKCZzZXMtPnNlcnZlci0+cmVxdWVzdF9xKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIFdlIHNlbmQgYSBMT0NLSU5HWF9DQU5DRUxfTE9DSyB0byBjYXVzZSB0aGUgV2luZG93cworICAgYmxvY2tpbmcgbG9jayB0byByZXR1cm4uICovCisKK3N0YXRpYyBpbnQKK3NlbmRfbG9ja19jYW5jZWwoY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkJCXN0cnVjdCBzbWJfaGRyICppbl9idWYsCisJCQlzdHJ1Y3Qgc21iX2hkciAqb3V0X2J1ZikKK3sKKwlpbnQgYnl0ZXNfcmV0dXJuZWQ7CisJc3RydWN0IGNpZnNTZXNJbmZvICpzZXMgPSB0Y29uLT5zZXM7CisJTE9DS19SRVEgKnBTTUIgPSAoTE9DS19SRVEgKilpbl9idWY7CisKKwkvKiBXZSBqdXN0IG1vZGlmeSB0aGUgY3VycmVudCBpbl9idWYgdG8gY2hhbmdlCisJICAgdGhlIHR5cGUgb2YgbG9jayBmcm9tIExPQ0tJTkdfQU5EWF9TSEFSRURfTE9DSworCSAgIG9yIExPQ0tJTkdfQU5EWF9FWENMVVNJVkVfTE9DSyB0bworCSAgIExPQ0tJTkdfQU5EWF9DQU5DRUxfTE9DSy4gKi8KKworCXBTTUItPkxvY2tUeXBlID0gTE9DS0lOR19BTkRYX0NBTkNFTF9MT0NLfExPQ0tJTkdfQU5EWF9MQVJHRV9GSUxFUzsKKwlwU01CLT5UaW1lb3V0ID0gMDsKKwlwU01CLT5oZHIuTWlkID0gR2V0TmV4dE1pZChzZXMtPnNlcnZlcik7CisKKwlyZXR1cm4gU2VuZFJlY2VpdmUoeGlkLCBzZXMsIGluX2J1Ziwgb3V0X2J1ZiwKKwkJCSZieXRlc19yZXR1cm5lZCwgMCk7Cit9CisKK2ludAorU2VuZFJlY2VpdmVCbG9ja2luZ0xvY2soY29uc3QgdW5zaWduZWQgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKKwkgICAgc3RydWN0IHNtYl9oZHIgKmluX2J1Ziwgc3RydWN0IHNtYl9oZHIgKm91dF9idWYsCisJICAgIGludCAqcGJ5dGVzX3JldHVybmVkKQoreworCWludCByYyA9IDA7CisJaW50IHJzdGFydCA9IDA7CisJdW5zaWduZWQgaW50IHJlY2VpdmVfbGVuOworCXN0cnVjdCBtaWRfcV9lbnRyeSAqbWlkUTsKKwlzdHJ1Y3QgY2lmc1Nlc0luZm8gKnNlczsKKworCWlmICh0Y29uID09IE5VTEwgfHwgdGNvbi0+c2VzID09IE5VTEwpIHsKKwkJY0VSUk9SKDEsKCJOdWxsIHNtYiBzZXNzaW9uIikpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJc2VzID0gdGNvbi0+c2VzOworCisJaWYoc2VzLT5zZXJ2ZXIgPT0gTlVMTCkgeworCQljRVJST1IoMSwoIk51bGwgdGNwIHNlc3Npb24iKSk7CisJCXJldHVybiAtRUlPOwogCX0KIAorCWlmKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgPT0gQ2lmc0V4aXRpbmcpCisJCXJldHVybiAtRU5PRU5UOworCisJLyogRW5zdXJlIHRoYXQgd2UgZG8gbm90IHNlbmQgbW9yZSB0aGFuIDUwIG92ZXJsYXBwaW5nIHJlcXVlc3RzIAorCSAgIHRvIHRoZSBzYW1lIHNlcnZlci4gV2UgbWF5IG1ha2UgdGhpcyBjb25maWd1cmFibGUgbGF0ZXIgb3IKKwkgICB1c2Ugc2VzLT5tYXhSZXEgKi8KKworCXJjID0gd2FpdF9mb3JfZnJlZV9yZXF1ZXN0KHNlcywgMyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwkvKiBtYWtlIHN1cmUgdGhhdCB3ZSBzaWduIGluIHRoZSBzYW1lIG9yZGVyIHRoYXQgd2Ugc2VuZCBvbiB0aGlzIHNvY2tldCAKKwkgICBhbmQgYXZvaWQgcmFjZXMgaW5zaWRlIHRjcCBzZW5kbXNnIGNvZGUgdGhhdCBjb3VsZCBjYXVzZSBjb3JydXB0aW9uCisJICAgb2Ygc21iIGRhdGEgKi8KKworCWRvd24oJnNlcy0+c2VydmVyLT50Y3BTZW0pOyAKKworCXJjID0gYWxsb2NhdGVfbWlkKHNlcywgaW5fYnVmLCAmbWlkUSk7CisJaWYgKHJjKSB7CisJCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKKwkJcmV0dXJuIHJjOworCX0KKworCWlmIChpbl9idWYtPnNtYl9idWZfbGVuZ3RoID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSAtIDQpIHsKKwkJdXAoJnNlcy0+c2VydmVyLT50Y3BTZW0pOworCQljRVJST1IoMSwgKCJJbGxlZ2FsIGxlbmd0aCwgZ3JlYXRlciB0aGFuIG1heGltdW0gZnJhbWUsICVkIiwKKwkJCWluX2J1Zi0+c21iX2J1Zl9sZW5ndGgpKTsKKwkJRGVsZXRlTWlkUUVudHJ5KG1pZFEpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlyYyA9IGNpZnNfc2lnbl9zbWIoaW5fYnVmLCBzZXMtPnNlcnZlciwgJm1pZFEtPnNlcXVlbmNlX251bWJlcik7CisKKwltaWRRLT5taWRTdGF0ZSA9IE1JRF9SRVFVRVNUX1NVQk1JVFRFRDsKKyNpZmRlZiBDT05GSUdfQ0lGU19TVEFUUzIKKwlhdG9taWNfaW5jKCZzZXMtPnNlcnZlci0+aW5TZW5kKTsKKyNlbmRpZgorCXJjID0gc21iX3NlbmQoc2VzLT5zZXJ2ZXItPnNzb2NrZXQsIGluX2J1ZiwgaW5fYnVmLT5zbWJfYnVmX2xlbmd0aCwKKwkJICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSAmKHNlcy0+c2VydmVyLT5hZGRyLnNvY2tBZGRyKSk7CisjaWZkZWYgQ09ORklHX0NJRlNfU1RBVFMyCisJYXRvbWljX2RlYygmc2VzLT5zZXJ2ZXItPmluU2VuZCk7CisJbWlkUS0+d2hlbl9zZW50ID0gamlmZmllczsKKyNlbmRpZgorCXVwKCZzZXMtPnNlcnZlci0+dGNwU2VtKTsKKworCWlmKHJjIDwgMCkgeworCQlEZWxldGVNaWRRRW50cnkobWlkUSk7CisJCXJldHVybiByYzsKKwl9CisKKwkvKiBXYWl0IGZvciBhIHJlcGx5IC0gYWxsb3cgc2lnbmFscyB0byBpbnRlcnJ1cHQuICovCisJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoc2VzLT5zZXJ2ZXItPnJlc3BvbnNlX3EsCisJCSghKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkpIHx8IAorCQkoKHNlcy0+c2VydmVyLT50Y3BTdGF0dXMgIT0gQ2lmc0dvb2QpICYmCisJCSAoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyAhPSBDaWZzTmV3KSkpOworCisJLyogV2VyZSB3ZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbCA/ICovCisJaWYgKChyYyA9PSAtRVJFU1RBUlRTWVMpICYmCisJCShtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVRVUVTVF9TVUJNSVRURUQpICYmCisJCSgoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzR29vZCkgfHwKKwkJIChzZXMtPnNlcnZlci0+dGNwU3RhdHVzID09IENpZnNOZXcpKSkgeworCisJCWlmIChpbl9idWYtPkNvbW1hbmQgPT0gU01CX0NPTV9UUkFOU0FDVElPTjIpIHsKKwkJCS8qIFBPU0lYIGxvY2suIFdlIHNlbmQgYSBOVF9DQU5DRUwgU01CIHRvIGNhdXNlIHRoZQorCQkJICAgYmxvY2tpbmcgbG9jayB0byByZXR1cm4uICovCisKKwkJCXJjID0gc2VuZF9udF9jYW5jZWwodGNvbiwgaW5fYnVmLCBtaWRRKTsKKwkJCWlmIChyYykgeworCQkJCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBXaW5kb3dzIGxvY2suIFdlIHNlbmQgYSBMT0NLSU5HWF9DQU5DRUxfTE9DSworCQkJICAgdG8gY2F1c2UgdGhlIGJsb2NraW5nIGxvY2sgdG8gcmV0dXJuLiAqLworCisJCQlyYyA9IHNlbmRfbG9ja19jYW5jZWwoeGlkLCB0Y29uLCBpbl9idWYsIG91dF9idWYpOworCisJCQkvKiBJZiB3ZSBnZXQgLUVOT0xDSyBiYWNrIHRoZSBsb2NrIG1heSBoYXZlCisJCQkgICBhbHJlYWR5IGJlZW4gcmVtb3ZlZC4gRG9uJ3QgZXhpdCBpbiB0aGlzIGNhc2UuICovCisJCQlpZiAocmMgJiYgcmMgIT0gLUVOT0xDSykgeworCQkJCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CisJCX0KKworCQkvKiBXYWl0IDUgc2Vjb25kcyBmb3IgdGhlIHJlc3BvbnNlLiAqLworCQlpZiAod2FpdF9mb3JfcmVzcG9uc2Uoc2VzLCBtaWRRLCA1ICogSFosIDUgKiBIWik9PTApIHsKKwkJCS8qIFdlIGdvdCB0aGUgcmVzcG9uc2UgLSByZXN0YXJ0IHN5c3RlbSBjYWxsLiAqLworCQkJcnN0YXJ0ID0gMTsKKwkJfQorCX0KKworCXNwaW5fbG9jaygmR2xvYmFsTWlkX0xvY2spOworCWlmIChtaWRRLT5yZXNwX2J1ZikgeworCQlzcGluX3VubG9jaygmR2xvYmFsTWlkX0xvY2spOworCQlyZWNlaXZlX2xlbiA9IG1pZFEtPnJlc3BfYnVmLT5zbWJfYnVmX2xlbmd0aDsKKwl9IGVsc2UgeworCQljRVJST1IoMSwoIk5vIHJlc3BvbnNlIGZvciBjbWQgJWQgbWlkICVkIiwKKwkJCSAgbWlkUS0+Y29tbWFuZCwgbWlkUS0+bWlkKSk7CisJCWlmKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVFVRVNUX1NVQk1JVFRFRCkgeworCQkJaWYoc2VzLT5zZXJ2ZXItPnRjcFN0YXR1cyA9PSBDaWZzRXhpdGluZykKKwkJCQlyYyA9IC1FSE9TVERPV047CisJCQllbHNlIHsKKwkJCQlzZXMtPnNlcnZlci0+dGNwU3RhdHVzID0gQ2lmc05lZWRSZWNvbm5lY3Q7CisJCQkJbWlkUS0+bWlkU3RhdGUgPSBNSURfUkVUUllfTkVFREVEOworCQkJfQorCQl9CisKKwkJaWYgKHJjICE9IC1FSE9TVERPV04pIHsKKwkJCWlmKG1pZFEtPm1pZFN0YXRlID09IE1JRF9SRVRSWV9ORUVERUQpIHsKKwkJCQlyYyA9IC1FQUdBSU47CisJCQkJY0ZZSSgxLCgibWFya2luZyByZXF1ZXN0IGZvciByZXRyeSIpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmMgPSAtRUlPOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrKCZHbG9iYWxNaWRfTG9jayk7CisJCURlbGV0ZU1pZFFFbnRyeShtaWRRKTsKKwkJcmV0dXJuIHJjOworCX0KKyAgCisJaWYgKHJlY2VpdmVfbGVuID4gQ0lGU01heEJ1ZlNpemUgKyBNQVhfQ0lGU19IRFJfU0laRSkgeworCQljRVJST1IoMSwgKCJGcmFtZSB0b28gbGFyZ2UgcmVjZWl2ZWQuICBMZW5ndGg6ICVkICBYaWQ6ICVkIiwKKwkJCXJlY2VpdmVfbGVuLCB4aWQpKTsKKwkJcmMgPSAtRUlPOworCX0gZWxzZSB7CQkvKiByY3ZkIGZyYW1lIGlzIG9rICovCisKKwkJaWYgKG1pZFEtPnJlc3BfYnVmICYmIG91dF9idWYKKwkJICAgICYmIChtaWRRLT5taWRTdGF0ZSA9PSBNSURfUkVTUE9OU0VfUkVDRUlWRUQpKSB7CisJCQlvdXRfYnVmLT5zbWJfYnVmX2xlbmd0aCA9IHJlY2VpdmVfbGVuOworCQkJbWVtY3B5KChjaGFyICopb3V0X2J1ZiArIDQsCisJCQkgICAgICAgKGNoYXIgKiltaWRRLT5yZXNwX2J1ZiArIDQsCisJCQkgICAgICAgcmVjZWl2ZV9sZW4pOworCisJCQlkdW1wX3NtYihvdXRfYnVmLCA5Mik7CisJCQkvKiBjb252ZXJ0IHRoZSBsZW5ndGggaW50byBhIG1vcmUgdXNhYmxlIGZvcm0gKi8KKwkJCWlmKChyZWNlaXZlX2xlbiA+IDI0KSAmJgorCQkJICAgKHNlcy0+c2VydmVyLT5zZWNNb2RlICYgKFNFQ01PREVfU0lHTl9SRVFVSVJFRCB8CisJCQkJCVNFQ01PREVfU0lHTl9FTkFCTEVEKSkpIHsKKwkJCQlyYyA9IGNpZnNfdmVyaWZ5X3NpZ25hdHVyZShvdXRfYnVmLAorCQkJCQkJc2VzLT5zZXJ2ZXItPm1hY19zaWduaW5nX2tleSwKKwkJCQkJCW1pZFEtPnNlcXVlbmNlX251bWJlcisxKTsKKwkJCQlpZihyYykgeworCQkJCQljRVJST1IoMSwoIlVuZXhwZWN0ZWQgU01CIHNpZ25hdHVyZSIpKTsKKwkJCQkJLyogQkIgRklYTUUgYWRkIGNvZGUgdG8ga2lsbCBzZXNzaW9uICovCisJCQkJfQorCQkJfQorCisJCQkqcGJ5dGVzX3JldHVybmVkID0gb3V0X2J1Zi0+c21iX2J1Zl9sZW5ndGg7CisKKwkJCS8qIEJCIHNwZWNpYWwgY2FzZSByZWNvbm5lY3QgdGlkIGFuZCB1aWQgaGVyZT8gKi8KKwkJCXJjID0gbWFwX3NtYl90b19saW51eF9lcnJvcihvdXRfYnVmKTsKKworCQkJLyogY29udmVydCBCeXRlQ291bnQgaWYgbmVjZXNzYXJ5ICovCisJCQlpZiAocmVjZWl2ZV9sZW4gPj0KKwkJCSAgICBzaXplb2YgKHN0cnVjdCBzbWJfaGRyKSAtCisJCQkgICAgNCAvKiBkbyBub3QgY291bnQgUkZDMTAwMSBoZWFkZXIgKi8gICsKKwkJCSAgICAoMiAqIG91dF9idWYtPldvcmRDb3VudCkgKyAyIC8qIGJjYyAqLyApCisJCQkJQkNDKG91dF9idWYpID0gbGUxNl90b19jcHUoQkNDX0xFKG91dF9idWYpKTsKKwkJfSBlbHNlIHsKKwkJCXJjID0gLUVJTzsKKwkJCWNFUlJPUigxLCgiQmFkIE1JRCBzdGF0ZT8iKSk7CisJCX0KKwl9CisJRGVsZXRlTWlkUUVudHJ5KG1pZFEpOworCWlmIChyc3RhcnQgJiYgcmMgPT0gLUVBQ0NFUykKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAlyZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9mcy9jaWZzL3hhdHRyLmMgYi9mcy9jaWZzL3hhdHRyLmMKaW5kZXggNzc1NGQ2NC4uMDY3NjQ4YiAxMDA2NDQKLS0tIGEvZnMvY2lmcy94YXR0ci5jCisrKyBiL2ZzL2NpZnMveGF0dHIuYwpAQCAtMzMwLDExICszMzAsMTUgQEAKIAlzYiA9IGRpcmVudHJ5LT5kX2lub2RlLT5pX3NiOwogCWlmKHNiID09IE5VTEwpCiAJCXJldHVybiAtRUlPOwotCXhpZCA9IEdldFhpZCgpOwogCiAJY2lmc19zYiA9IENJRlNfU0Ioc2IpOwogCXBUY29uID0gY2lmc19zYi0+dGNvbjsKIAorCWlmKGNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9OT19YQVRUUikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJeGlkID0gR2V0WGlkKCk7CisKIAlmdWxsX3BhdGggPSBidWlsZF9wYXRoX2Zyb21fZGVudHJ5KGRpcmVudHJ5KTsKIAlpZihmdWxsX3BhdGggPT0gTlVMTCkgewogCQlGcmVlWGlkKHhpZCk7CmRpZmYgLS1naXQgYS9mcy9jb2RhL2ZpbGUuYyBiL2ZzL2NvZGEvZmlsZS5jCmluZGV4IGNjNjZjNjguLmRiZmJjZmEgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZmlsZS5jCisrKyBiL2ZzL2NvZGEvZmlsZS5jCkBAIC0xMzYsMTAgKzEzNiw4IEBACiAJY29kYV92ZnNfc3RhdC5vcGVuKys7CiAKIAljZmkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY29kYV9maWxlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNmaSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJaWYgKCFjZmkpCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAogCWxvY2tfa2VybmVsKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmMKaW5kZXggZGYwMjU0NS4uODE2ZThlZiAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvZGlyLmMKKysrIGIvZnMvY29uZmlnZnMvZGlyLmMKQEAgLTg2LDYgKzg2LDMyIEBACiAJcmV0dXJuIHNkOwogfQogCisvKgorICoKKyAqIFJldHVybiAtRUVYSVNUIGlmIHRoZXJlIGlzIGFscmVhZHkgYSBjb25maWdmcyBlbGVtZW50IHdpdGggdGhlIHNhbWUKKyAqIG5hbWUgZm9yIHRoZSBzYW1lIHBhcmVudC4KKyAqCisgKiBjYWxsZWQgd2l0aCBwYXJlbnQgaW5vZGUncyBpX211dGV4IGhlbGQKKyAqLworaW50IGNvbmZpZ2ZzX2RpcmVudF9leGlzdHMoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqcGFyZW50X3NkLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmV3KQoreworCXN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBzZDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICZwYXJlbnRfc2QtPnNfY2hpbGRyZW4sIHNfc2libGluZykgeworCQlpZiAoc2QtPnNfZWxlbWVudCkgeworCQkJY29uc3QgdW5zaWduZWQgY2hhciAqZXhpc3RpbmcgPSBjb25maWdmc19nZXRfbmFtZShzZCk7CisJCQlpZiAoc3RyY21wKGV4aXN0aW5nLCBuZXcpKQorCQkJCWNvbnRpbnVlOworCQkJZWxzZQorCQkJCXJldHVybiAtRUVYSVNUOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKwogaW50IGNvbmZpZ2ZzX21ha2VfZGlyZW50KHN0cnVjdCBjb25maWdmc19kaXJlbnQgKiBwYXJlbnRfc2QsCiAJCQkgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwgdm9pZCAqIGVsZW1lbnQsCiAJCQkgdW1vZGVfdCBtb2RlLCBpbnQgdHlwZSkKQEAgLTEzNiw4ICsxNjIsMTAgQEAKIAlpbnQgZXJyb3I7CiAJdW1vZGVfdCBtb2RlID0gU19JRkRJUnwgU19JUldYVSB8IFNfSVJVR08gfCBTX0lYVUdPOwogCi0JZXJyb3IgPSBjb25maWdmc19tYWtlX2RpcmVudChwLT5kX2ZzZGF0YSwgZCwgaywgbW9kZSwKLQkJCQkgICAgIENPTkZJR0ZTX0RJUik7CisJZXJyb3IgPSBjb25maWdmc19kaXJlbnRfZXhpc3RzKHAtPmRfZnNkYXRhLCBkLT5kX25hbWUubmFtZSk7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBjb25maWdmc19tYWtlX2RpcmVudChwLT5kX2ZzZGF0YSwgZCwgaywgbW9kZSwKKwkJCQkJICAgICBDT05GSUdGU19ESVIpOwogCWlmICghZXJyb3IpIHsKIAkJZXJyb3IgPSBjb25maWdmc19jcmVhdGUoZCwgbW9kZSwgaW5pdF9kaXIpOwogCQlpZiAoIWVycm9yKSB7CmRpZmYgLS1naXQgYS9mcy9lZnMvc3ltbGluay5jIGIvZnMvZWZzL3N5bWxpbmsuYwppbmRleCBlMjQ5Y2Y3Li4xZDMwZDJmIDEwMDY0NAotLS0gYS9mcy9lZnMvc3ltbGluay5jCisrKyBiL2ZzL2Vmcy9zeW1saW5rLmMKQEAgLTIyLDcgKzIyLDcgQEAKICAgCiAJZXJyID0gLUVOQU1FVE9PTE9ORzsKIAlpZiAoc2l6ZSA+IDIgKiBFRlNfQkxPQ0tTSVpFKQotCQlnb3RvIGZhaWw7CisJCWdvdG8gZmFpbF9ub3Rsb2NrZWQ7CiAgIAogCWxvY2tfa2VybmVsKCk7CiAJLyogcmVhZCBmaXJzdCA1MTIgYnl0ZXMgb2YgbGluayB0YXJnZXQgKi8KQEAgLTQ3LDYgKzQ3LDcgQEAKIAlyZXR1cm4gMDsKIGZhaWw6CiAJdW5sb2NrX2tlcm5lbCgpOworZmFpbF9ub3Rsb2NrZWQ6CiAJU2V0UGFnZUVycm9yKHBhZ2UpOwogCWt1bm1hcChwYWdlKTsKIAl1bmxvY2tfcGFnZShwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL2V2ZW50cG9sbC5jIGIvZnMvZXZlbnRwb2xsLmMKaW5kZXggMTlmZmIwNC4uM2EzNTY3NCAxMDA2NDQKLS0tIGEvZnMvZXZlbnRwb2xsLmMKKysrIGIvZnMvZXZlbnRwb2xsLmMKQEAgLTExNjgsNyArMTE2OCw3IEBACiBlZXhpdF8xOgogCiAJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IGVwX3VubGluayglcCwgJXApID0gJWRcbiIsCi0JCSAgICAgY3VycmVudCwgZXAsIGVwaS0+ZmlsZSwgZXJyb3IpKTsKKwkJICAgICBjdXJyZW50LCBlcCwgZXBpLT5mZmQuZmlsZSwgZXJyb3IpKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTEyMzYsNyArMTIzNiw3IEBACiAJc3RydWN0IGV2ZW50cG9sbCAqZXAgPSBlcGktPmVwOwogCiAJRE5QUklOVEsoMywgKEtFUk5fSU5GTyAiWyVwXSBldmVudHBvbGw6IHBvbGxfY2FsbGJhY2soJXApIGVwaT0lcCBlcD0lcFxuIiwKLQkJICAgICBjdXJyZW50LCBlcGktPmZpbGUsIGVwaSwgZXApKTsKKwkJICAgICBjdXJyZW50LCBlcGktPmZmZC5maWxlLCBlcGksIGVwKSk7CiAKIAl3cml0ZV9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA4MzQ0YmE3Li41NDEzNWRmIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00ODYsOCArNDg2LDYgQEAKIAkJaWYgKCEobmQubW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9FWEVDKSAmJgogCQkgICAgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQkJaW50IGVyciA9IHZmc19wZXJtaXNzaW9uKCZuZCwgTUFZX0VYRUMpOwotCQkJaWYgKCFlcnIgJiYgIShpbm9kZS0+aV9tb2RlICYgMDExMSkpCi0JCQkJZXJyID0gLUVBQ0NFUzsKIAkJCWZpbGUgPSBFUlJfUFRSKGVycik7CiAJCQlpZiAoIWVycikgewogCQkJCWZpbGUgPSBuYW1laWRhdGFfdG9fZmlscCgmbmQsIE9fUkRPTkxZKTsKQEAgLTc1Myw3ICs3NTEsNyBAQAogCiAJCXdyaXRlX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKIAkJc3Bpbl9sb2NrKCZvbGRzaWdoYW5kLT5zaWdsb2NrKTsKLQkJc3Bpbl9sb2NrKCZuZXdzaWdoYW5kLT5zaWdsb2NrKTsKKwkJc3Bpbl9sb2NrX25lc3RlZCgmbmV3c2lnaGFuZC0+c2lnbG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwogCiAJCXJjdV9hc3NpZ25fcG9pbnRlcihjdXJyZW50LT5zaWdoYW5kLCBuZXdzaWdoYW5kKTsKIAkJcmVjYWxjX3NpZ3BlbmRpbmcoKTsKQEAgLTkyMiwxMiArOTIwLDYgQEAKIAlpbnQgcmV0dmFsOwogCiAJbW9kZSA9IGlub2RlLT5pX21vZGU7Ci0JLyoKLQkgKiBDaGVjayBleGVjdXRlIHBlcm1zIGFnYWluIC0gaWYgdGhlIGNhbGxlciBoYXMgQ0FQX0RBQ19PVkVSUklERSwKLQkgKiBnZW5lcmljX3Blcm1pc3Npb24gbGV0cyBhIG5vbi1leGVjdXRhYmxlIHRocm91Z2gKLQkgKi8KLQlpZiAoIShtb2RlICYgMDExMSkpCS8qIHdpdGggYXQgbGVhc3QgX29uZV8gZXhlY3V0ZSBiaXQgc2V0ICovCi0JCXJldHVybiAtRUFDQ0VTOwogCWlmIChicHJtLT5maWxlLT5mX29wID09IE5VTEwpCiAJCXJldHVybiAtRUFDQ0VTOwogCmRpZmYgLS1naXQgYS9mcy9leHQyL2JhbGxvYy5jIGIvZnMvZXh0Mi9iYWxsb2MuYwppbmRleCBkNDg3MDQzLi5iMTk4MWQwIDEwMDY0NAotLS0gYS9mcy9leHQyL2JhbGxvYy5jCisrKyBiL2ZzL2V4dDIvYmFsbG9jLmMKQEAgLTUzOSw3ICs1MzksNiBAQAogCiAjZW5kaWYgIC8qICBFWFQyRlNfREVCVUcgICovCiAKLS8qIFN1cGVyYmxvY2sgbXVzdCBiZSBsb2NrZWQgKi8KIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlX2Jsb2NrcyAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCiB7CiAJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqIGRlc2M7CmRpZmYgLS1naXQgYS9mcy9leHQyL2lhbGxvYy5jIGIvZnMvZXh0Mi9pYWxsb2MuYwppbmRleCBkZTg1YzYxLi42OTVmNjljIDEwMDY0NAotLS0gYS9mcy9leHQyL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDIvaWFsbG9jLmMKQEAgLTYzNyw3ICs2MzcsNiBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLS8qIFN1cGVyYmxvY2sgbXVzdCBiZSBsb2NrZWQgKi8KIHVuc2lnbmVkIGxvbmcgZXh0Ml9jb3VudF9mcmVlX2lub2RlcyAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCiB7CiAJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqZGVzYzsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvc3VwZXIuYyBiL2ZzL2V4dDIvc3VwZXIuYwppbmRleCBmMjcwMmNkLi40Mjg2ZmY2IDEwMDY0NAotLS0gYS9mcy9leHQyL3N1cGVyLmMKKysrIGIvZnMvZXh0Mi9zdXBlci5jCkBAIC0yNTEsNiArMjUxLDQ0IEBACiAjZW5kaWYKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpleHQyX2dldF9kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqdm9ianApCit7CisJX191MzIgKm9ianAgPSB2b2JqcDsKKwl1bnNpZ25lZCBsb25nIGlubyA9IG9ianBbMF07CisJX191MzIgZ2VuZXJhdGlvbiA9IG9ianBbMV07CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZGVudHJ5ICpyZXN1bHQ7CisKKwlpZiAoaW5vIDwgRVhUMl9GSVJTVF9JTk8oc2IpICYmIGlubyAhPSBFWFQyX1JPT1RfSU5PKQorCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwlpZiAoaW5vID4gbGUzMl90b19jcHUoRVhUMl9TQihzYiktPnNfZXMtPnNfaW5vZGVzX2NvdW50KSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVTVEFMRSk7CisKKwkvKiBpZ2V0IGlzbid0IHJlYWxseSByaWdodCBpZiB0aGUgaW5vZGUgaXMgY3VycmVudGx5IHVuYWxsb2NhdGVkISEKKwkgKiBleHQyX3JlYWRfaW5vZGUgY3VycmVudGx5IGRvZXMgYXBwcm9wcmlhdGUgY2hlY2tzLCBidXQKKwkgKiBpdCBtaWdodCBiZSAibmVhdGVyIiB0byBjYWxsIGV4dDJfZ2V0X2lub2RlIGZpcnN0IGFuZCBjaGVjaworCSAqIGlmIHRoZSBpbm9kZSBpcyB2YWxpZC4uLi4uCisJICovCisJaW5vZGUgPSBpZ2V0KHNiLCBpbm8pOworCWlmIChpbm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSB8fAorCSAgICAoZ2VuZXJhdGlvbiAmJiBpbm9kZS0+aV9nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pKSB7CisJCS8qIHdlIGRpZG4ndCBmaW5kIHRoZSByaWdodCBpbm9kZS4uICovCisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwl9CisJLyogbm93IHRvIGZpbmQgYSBkZW50cnkuCisJICogSWYgcG9zc2libGUsIGdldCBhIHdlbGwtY29ubmVjdGVkIG9uZQorCSAqLworCXJlc3VsdCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7CisJaWYgKCFyZXN1bHQpIHsKKwkJaXB1dChpbm9kZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCiAvKiBZZXMsIG1vc3Qgb2YgdGhlc2UgYXJlIGxlZnQgYXMgTlVMTCEhCiAgKiBBIE5VTEwgdmFsdWUgaW1wbGllcyB0aGUgZGVmYXVsdCwgd2hpY2ggd29ya3Mgd2l0aCBleHQyLWxpa2UgZmlsZQogICogc3lzdGVtcywgYnV0IGNhbiBiZSBpbXByb3ZlZCB1cG9uLgpAQCAtMjU4LDYgKzI5Niw3IEBACiAgKi8KIHN0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXh0Ml9leHBvcnRfb3BzID0gewogCS5nZXRfcGFyZW50ID0gZXh0Ml9nZXRfcGFyZW50LAorCS5nZXRfZGVudHJ5ID0gZXh0Ml9nZXRfZGVudHJ5LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3NiX2Jsb2NrKHZvaWQgKipkYXRhKQpAQCAtNzc1LDcgKzgxNCw3IEBACiAJaWYgKEVYVDJfSU5PREVfU0laRShzYikgPT0gMCkKIAkJZ290byBjYW50ZmluZF9leHQyOwogCXNiaS0+c19pbm9kZXNfcGVyX2Jsb2NrID0gc2ItPnNfYmxvY2tzaXplIC8gRVhUMl9JTk9ERV9TSVpFKHNiKTsKLQlpZiAoc2JpLT5zX2lub2Rlc19wZXJfYmxvY2sgPT0gMCkKKwlpZiAoc2JpLT5zX2lub2Rlc19wZXJfYmxvY2sgPT0gMCB8fCBzYmktPnNfaW5vZGVzX3Blcl9ncm91cCA9PSAwKQogCQlnb3RvIGNhbnRmaW5kX2V4dDI7CiAJc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgPSBzYmktPnNfaW5vZGVzX3Blcl9ncm91cCAvCiAJCQkJCXNiaS0+c19pbm9kZXNfcGVyX2Jsb2NrOwpAQCAtMTA0NCw3ICsxMDgzLDYgQEAKIAl1bnNpZ25lZCBsb25nIG92ZXJoZWFkOwogCWludCBpOwogCi0JbG9ja19zdXBlcihzYik7CiAJaWYgKHRlc3Rfb3B0IChzYiwgTUlOSVhfREYpKQogCQlvdmVyaGVhZCA9IDA7CiAJZWxzZSB7CkBAIC0xMDg1LDcgKzExMjMsNiBAQAogCWJ1Zi0+Zl9maWxlcyA9IGxlMzJfdG9fY3B1KHNiaS0+c19lcy0+c19pbm9kZXNfY291bnQpOwogCWJ1Zi0+Zl9mZnJlZSA9IGV4dDJfY291bnRfZnJlZV9pbm9kZXMgKHNiKTsKIAlidWYtPmZfbmFtZWxlbiA9IEVYVDJfTkFNRV9MRU47Ci0JdW5sb2NrX3N1cGVyKHNiKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggYTUwNGE0MC4uMDYzZDk5NCAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC0xMjY5LDEyICsxMjY5LDEyIEBACiAJCWdvYWwgPSBsZTMyX3RvX2NwdShlcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKIAlncm91cF9ubyA9IChnb2FsIC0gbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykpIC8KIAkJCUVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYik7CisJZ29hbF9ncm91cCA9IGdyb3VwX25vOworcmV0cnlfYWxsb2M6CiAJZ2RwID0gZXh0M19nZXRfZ3JvdXBfZGVzYyhzYiwgZ3JvdXBfbm8sICZnZHBfYmgpOwogCWlmICghZ2RwKQogCQlnb3RvIGlvX2Vycm9yOwogCi0JZ29hbF9ncm91cCA9IGdyb3VwX25vOwotcmV0cnk6CiAJZnJlZV9ibG9ja3MgPSBsZTE2X3RvX2NwdShnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50KTsKIAkvKgogCSAqIGlmIHRoZXJlIGlzIG5vdCBlbm91Z2ggZnJlZSBibG9ja3MgdG8gbWFrZSBhIG5ldyByZXNldmF0aW9uCkBAIC0xMzQ5LDcgKzEzNDksNyBAQAogCWlmIChteV9yc3YpIHsKIAkJbXlfcnN2ID0gTlVMTDsKIAkJZ3JvdXBfbm8gPSBnb2FsX2dyb3VwOwotCQlnb3RvIHJldHJ5OworCQlnb3RvIHJldHJ5X2FsbG9jOwogCX0KIAkvKiBObyBzcGFjZSBsZWZ0IG9uIHRoZSBkZXZpY2UgKi8KIAkqZXJycCA9IC1FTk9TUEM7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggZjgwNGQ1ZS4uODRiZTAyZSAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtOTI1LDcgKzkyNSw3IEBACiAJc2V0X2J1ZmZlcl9uZXcoYmhfcmVzdWx0KTsKIGdvdF9pdDoKIAltYXBfYmgoYmhfcmVzdWx0LCBpbm9kZS0+aV9zYiwgbGUzMl90b19jcHUoY2hhaW5bZGVwdGgtMV0ua2V5KSk7Ci0JaWYgKGJsb2Nrc190b19ib3VuZGFyeSA9PSAwKQorCWlmIChjb3VudCA+IGJsb2Nrc190b19ib3VuZGFyeSkKIAkJc2V0X2J1ZmZlcl9ib3VuZGFyeShiaF9yZXN1bHQpOwogCWVyciA9IGNvdW50OwogCS8qIENsZWFuIHVwIGFuZCBleGl0ICovCkBAIC0xMDA5LDExICsxMDA5LDE0IEBACiAJYnVmZmVyX3RyYWNlX2luaXQoJmR1bW15LmJfaGlzdG9yeSk7CiAJZXJyID0gZXh0M19nZXRfYmxvY2tzX2hhbmRsZShoYW5kbGUsIGlub2RlLCBibG9jaywgMSwKIAkJCQkJJmR1bW15LCBjcmVhdGUsIDEpOwotCWlmIChlcnIgPT0gMSkgeworCS8qCisJICogZXh0M19nZXRfYmxvY2tzX2hhbmRsZSgpIHJldHVybnMgbnVtYmVyIG9mIGJsb2NrcworCSAqIG1hcHBlZC4gMCBpbiBjYXNlIG9mIGEgSE9MRS4KKwkgKi8KKwlpZiAoZXJyID4gMCkgeworCQlpZiAoZXJyID4gMSkKKwkJCVdBUk5fT04oMSk7CiAJCWVyciA9IDA7Ci0JfSBlbHNlIGlmIChlcnIgPj0gMCkgewotCQlXQVJOX09OKDEpOwotCQllcnIgPSAtRUlPOwogCX0KIAkqZXJycCA9IGVycjsKIAlpZiAoIWVyciAmJiBidWZmZXJfbWFwcGVkKCZkdW1teSkpIHsKQEAgLTExNTgsNyArMTE2MSw3IEBACiAJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJZ290byBvdXQ7CiAJfQotCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkpCisJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBOT0JIKSAmJiBleHQzX3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkpCiAJCXJldCA9IG5vYmhfcHJlcGFyZV93cml0ZShwYWdlLCBmcm9tLCB0bywgZXh0M19nZXRfYmxvY2spOwogCWVsc2UKIAkJcmV0ID0gYmxvY2tfcHJlcGFyZV93cml0ZShwYWdlLCBmcm9tLCB0bywgZXh0M19nZXRfYmxvY2spOwpAQCAtMTI0NCw3ICsxMjQ3LDcgQEAKIAlpZiAobmV3X2lfc2l6ZSA+IEVYVDNfSShpbm9kZSktPmlfZGlza3NpemUpCiAJCUVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBuZXdfaV9zaXplOwogCi0JaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBOT0JIKSkKKwlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PQkgpICYmIGV4dDNfc2hvdWxkX3dyaXRlYmFja19kYXRhKGlub2RlKSkKIAkJcmV0ID0gbm9iaF9jb21taXRfd3JpdGUoZmlsZSwgcGFnZSwgZnJvbSwgdG8pOwogCWVsc2UKIAkJcmV0ID0gZ2VuZXJpY19jb21taXRfd3JpdGUoZmlsZSwgcGFnZSwgZnJvbSwgdG8pOwpAQCAtMTQ5NCw3ICsxNDk3LDcgQEAKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAKLQlpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PQkgpKQorCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkgJiYgZXh0M19zaG91bGRfd3JpdGViYWNrX2RhdGEoaW5vZGUpKQogCQlyZXQgPSBub2JoX3dyaXRlcGFnZShwYWdlLCBleHQzX2dldF9ibG9jaywgd2JjKTsKIAllbHNlCiAJCXJldCA9IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBleHQzX2dldF9ibG9jaywgd2JjKTsKQEAgLTI0MDIsMTQgKzI0MDUsMTUgQEAKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBleHQzX2dyb3VwX2Rlc2MgKiBnZHA7CiAKLQotCWlmICgoaW5vICE9IEVYVDNfUk9PVF9JTk8gJiYgaW5vICE9IEVYVDNfSk9VUk5BTF9JTk8gJiYKLQkJaW5vICE9IEVYVDNfUkVTSVpFX0lOTyAmJiBpbm8gPCBFWFQzX0ZJUlNUX0lOTyhzYikpIHx8Ci0JCWlubyA+IGxlMzJfdG9fY3B1KEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2lub2Rlc19jb3VudCkpIHsKLQkJZXh0M19lcnJvcihzYiwgImV4dDNfZ2V0X2lub2RlX2Jsb2NrIiwKLQkJCSAgICAiYmFkIGlub2RlIG51bWJlcjogJWx1IiwgaW5vKTsKKwlpZiAoIWV4dDNfdmFsaWRfaW51bShzYiwgaW5vKSkgeworCQkvKgorCQkgKiBUaGlzIGVycm9yIGlzIGFscmVhZHkgY2hlY2tlZCBmb3IgaW4gbmFtZWkuYyB1bmxlc3Mgd2UgYXJlCisJCSAqIGxvb2tpbmcgYXQgYW4gTkZTIGZpbGVoYW5kbGUsIGluIHdoaWNoIGNhc2Ugbm8gZXJyb3IKKwkJICogcmVwb3J0IGlzIG5lZWRlZAorCQkgKi8KIAkJcmV0dXJuIDA7CiAJfQorCiAJYmxvY2tfZ3JvdXAgPSAoaW5vIC0gMSkgLyBFWFQzX0lOT0RFU19QRVJfR1JPVVAoc2IpOwogCWlmIChibG9ja19ncm91cCA+PSBFWFQzX1NCKHNiKS0+c19ncm91cHNfY291bnQpIHsKIAkJZXh0M19lcnJvcihzYiwiZXh0M19nZXRfaW5vZGVfYmxvY2siLCJncm91cCA+PSBncm91cHMgY291bnQiKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvbmFtZWkuYyBiL2ZzL2V4dDMvbmFtZWkuYwppbmRleCBkOTE3NmRiLi4yYWE3MTAxIDEwMDY0NAotLS0gYS9mcy9leHQzL25hbWVpLmMKKysrIGIvZnMvZXh0My9uYW1laS5jCkBAIC0xMDAwLDcgKzEwMDAsMTIgQEAKIAlpZiAoYmgpIHsKIAkJdW5zaWduZWQgbG9uZyBpbm8gPSBsZTMyX3RvX2NwdShkZS0+aW5vZGUpOwogCQlicmVsc2UgKGJoKTsKLQkJaW5vZGUgPSBpZ2V0KGRpci0+aV9zYiwgaW5vKTsKKwkJaWYgKCFleHQzX3ZhbGlkX2ludW0oZGlyLT5pX3NiLCBpbm8pKSB7CisJCQlleHQzX2Vycm9yKGRpci0+aV9zYiwgImV4dDNfbG9va3VwIiwKKwkJCQkgICAiYmFkIGlub2RlIG51bWJlcjogJWx1IiwgaW5vKTsKKwkJCWlub2RlID0gTlVMTDsKKwkJfSBlbHNlCisJCQlpbm9kZSA9IGlnZXQoZGlyLT5pX3NiLCBpbm8pOwogCiAJCWlmICghaW5vZGUpCiAJCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKQEAgLTEwMjgsNyArMTAzMywxMyBAQAogCQlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKIAlpbm8gPSBsZTMyX3RvX2NwdShkZS0+aW5vZGUpOwogCWJyZWxzZShiaCk7Ci0JaW5vZGUgPSBpZ2V0KGNoaWxkLT5kX2lub2RlLT5pX3NiLCBpbm8pOworCisJaWYgKCFleHQzX3ZhbGlkX2ludW0oY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubykpIHsKKwkJZXh0M19lcnJvcihjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgImV4dDNfZ2V0X3BhcmVudCIsCisJCQkgICAiYmFkIGlub2RlIG51bWJlcjogJWx1IiwgaW5vKTsKKwkJaW5vZGUgPSBOVUxMOworCX0gZWxzZQorCQlpbm9kZSA9IGlnZXQoY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubyk7CiAKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gRVJSX1BUUigtRUFDQ0VTKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCA4MTNkNTg5Li4zNTU5MDg2IDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC01NTQsNiArNTU0LDQ3IEBACiAJcmV0dXJuIDA7CiB9CiAKKworc3RhdGljIHN0cnVjdCBkZW50cnkgKmV4dDNfZ2V0X2RlbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICp2b2JqcCkKK3sKKwlfX3UzMiAqb2JqcCA9IHZvYmpwOworCXVuc2lnbmVkIGxvbmcgaW5vID0gb2JqcFswXTsKKwlfX3UzMiBnZW5lcmF0aW9uID0gb2JqcFsxXTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBkZW50cnkgKnJlc3VsdDsKKworCWlmIChpbm8gPCBFWFQzX0ZJUlNUX0lOTyhzYikgJiYgaW5vICE9IEVYVDNfUk9PVF9JTk8pCisJCXJldHVybiBFUlJfUFRSKC1FU1RBTEUpOworCWlmIChpbm8gPiBsZTMyX3RvX2NwdShFWFQzX1NCKHNiKS0+c19lcy0+c19pbm9kZXNfY291bnQpKQorCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKworCS8qIGlnZXQgaXNuJ3QgcmVhbGx5IHJpZ2h0IGlmIHRoZSBpbm9kZSBpcyBjdXJyZW50bHkgdW5hbGxvY2F0ZWQhIQorCSAqCisJICogZXh0M19yZWFkX2lub2RlIHdpbGwgcmV0dXJuIGEgYmFkX2lub2RlIGlmIHRoZSBpbm9kZSBoYWQgYmVlbgorCSAqIGRlbGV0ZWQsIHNvIHdlIHNob3VsZCBiZSBzYWZlLgorCSAqCisJICogQ3VycmVudGx5IHdlIGRvbid0IGtub3cgdGhlIGdlbmVyYXRpb24gZm9yIHBhcmVudCBkaXJlY3RvcnksIHNvCisJICogYSBnZW5lcmF0aW9uIG9mIDAgbWVhbnMgImFjY2VwdCBhbnkiCisJICovCisJaW5vZGUgPSBpZ2V0KHNiLCBpbm8pOworCWlmIChpbm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSB8fAorCSAgICAoZ2VuZXJhdGlvbiAmJiBpbm9kZS0+aV9nZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pKSB7CisJCWlwdXQoaW5vZGUpOworCQlyZXR1cm4gRVJSX1BUUigtRVNUQUxFKTsKKwl9CisJLyogbm93IHRvIGZpbmQgYSBkZW50cnkuCisJICogSWYgcG9zc2libGUsIGdldCBhIHdlbGwtY29ubmVjdGVkIG9uZQorCSAqLworCXJlc3VsdCA9IGRfYWxsb2NfYW5vbihpbm9kZSk7CisJaWYgKCFyZXN1bHQpIHsKKwkJaXB1dChpbm9kZSk7CisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCX0KKwlyZXR1cm4gcmVzdWx0OworfQorCiAjaWZkZWYgQ09ORklHX1FVT1RBCiAjZGVmaW5lIFFUWVBFMk5BTUUodCkgKCh0KT09VVNSUVVPVEE/InVzZXIiOiJncm91cCIpCiAjZGVmaW5lIFFUWVBFMk1PUFQob24sIHQpICgodCk9PVVTUlFVT1RBPygob24pIyNVU1JKUVVPVEEpOigob24pIyNHUlBKUVVPVEEpKQpAQCAtNjIyLDYgKzY2Myw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgZXh0M19leHBvcnRfb3BzID0gewogCS5nZXRfcGFyZW50ID0gZXh0M19nZXRfcGFyZW50LAorCS5nZXRfZGVudHJ5ID0gZXh0M19nZXRfZGVudHJ5LAogfTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19sb29rdXAuYwppbmRleCAyOWNjZTQ1Li40Mzg4NmZhIDEwMDY0NAotLS0gYS9mcy9mcmVldnhmcy92eGZzX2xvb2t1cC5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfbG9va3VwLmMKQEAgLTI0Niw2ICsyNDYsOCBAQAogCXVfbG9uZwkJCXBhZ2UsIG5wYWdlcywgYmxvY2ssIHBibG9ja3MsIG5ibG9ja3MsIG9mZnNldDsKIAlsb2ZmX3QJCQlwb3M7CiAKKwlsb2NrX2tlcm5lbCgpOworCiAJc3dpdGNoICgobG9uZylmcC0+Zl9wb3MpIHsKIAljYXNlIDA6CiAJCWlmIChmaWxsZXIocmV0cCwgIi4iLCAxLCBmcC0+Zl9wb3MsIGlwLT5pX2lubywgRFRfRElSKSA8IDApCmRpZmYgLS1naXQgYS9mcy9mdXNlL2NvbnRyb2wuYyBiL2ZzL2Z1c2UvY29udHJvbC5jCmluZGV4IGEzYmNlM2EuLjQ2ZmU2MGIgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvY29udHJvbC5jCisrKyBiL2ZzL2Z1c2UvY29udHJvbC5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAogLyoKICAqIEFkZCBhIGNvbm5lY3Rpb24gdG8gdGhlIGNvbnRyb2wgZmlsZXN5c3RlbSAoaWYgaXQgZXhpc3RzKS4gIENhbGxlcgotICogbXVzdCBob3N0IGZ1c2VfbXV0ZXgKKyAqIG11c3QgaG9sZCBmdXNlX211dGV4CiAgKi8KIGludCBmdXNlX2N0bF9hZGRfY29ubihzdHJ1Y3QgZnVzZV9jb25uICpmYykKIHsKQEAgLTEzOSw3ICsxMzksNyBAQAogCiAvKgogICogUmVtb3ZlIGEgY29ubmVjdGlvbiBmcm9tIHRoZSBjb250cm9sIGZpbGVzeXN0ZW0gKGlmIGl0IGV4aXN0cykuCi0gKiBDYWxsZXIgbXVzdCBob3N0IGZ1c2VfbXV0ZXgKKyAqIENhbGxlciBtdXN0IGhvbGQgZnVzZV9tdXRleAogICovCiB2b2lkIGZ1c2VfY3RsX3JlbW92ZV9jb25uKHN0cnVjdCBmdXNlX2Nvbm4gKmZjKQogewpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9kaXIuYyBiL2ZzL2Z1c2UvZGlyLmMKaW5kZXggNzJhNzRjZC4uNDA5Y2U2YSAxMDA2NDQKLS0tIGEvZnMvZnVzZS9kaXIuYworKysgYi9mcy9mdXNlL2Rpci5jCkBAIC0xNCw2ICsxNCwzMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KIAorI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKK3N0YXRpYyBpbmxpbmUgdm9pZCBmdXNlX2RlbnRyeV9zZXR0aW1lKHN0cnVjdCBkZW50cnkgKmVudHJ5LCB1NjQgdGltZSkKK3sKKwllbnRyeS0+ZF90aW1lID0gdGltZTsKK30KKworc3RhdGljIGlubGluZSB1NjQgZnVzZV9kZW50cnlfdGltZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSkKK3sKKwlyZXR1cm4gZW50cnktPmRfdGltZTsKK30KKyNlbHNlCisvKgorICogT24gMzIgYml0IGFyY2hzIHN0b3JlIHRoZSBoaWdoIDMyIGJpdHMgb2YgdGltZSBpbiBkX2ZzZGF0YQorICovCitzdGF0aWMgdm9pZCBmdXNlX2RlbnRyeV9zZXR0aW1lKHN0cnVjdCBkZW50cnkgKmVudHJ5LCB1NjQgdGltZSkKK3sKKwllbnRyeS0+ZF90aW1lID0gdGltZTsKKwllbnRyeS0+ZF9mc2RhdGEgPSAodm9pZCAqKSAodW5zaWduZWQgbG9uZykgKHRpbWUgPj4gMzIpOworfQorCitzdGF0aWMgdTY0IGZ1c2VfZGVudHJ5X3RpbWUoc3RydWN0IGRlbnRyeSAqZW50cnkpCit7CisJcmV0dXJuICh1NjQpIGVudHJ5LT5kX3RpbWUgKworCQkoKHU2NCkgKHVuc2lnbmVkIGxvbmcpIGVudHJ5LT5kX2ZzZGF0YSA8PCAzMik7Cit9CisjZW5kaWYKKwogLyoKICAqIEZVU0UgY2FjaGVzIGRlbnRyaWVzIGFuZCBhdHRyaWJ1dGVzIHdpdGggc2VwYXJhdGUgdGltZW91dC4gIFRoZQogICogdGltZSBpbiBqaWZmaWVzIHVudGlsIHRoZSBkZW50cnkvYXR0cmlidXRlcyBhcmUgdmFsaWQgaXMgc3RvcmVkIGluCkBAIC0yMywxMCArNTAsMTMgQEAKIC8qCiAgKiBDYWxjdWxhdGUgdGhlIHRpbWUgaW4gamlmZmllcyB1bnRpbCBhIGRlbnRyeS9hdHRyaWJ1dGVzIGFyZSB2YWxpZAogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lX3RvX2ppZmZpZXModW5zaWduZWQgbG9uZyBzZWMsIHVuc2lnbmVkIGxvbmcgbnNlYykKK3N0YXRpYyB1NjQgdGltZV90b19qaWZmaWVzKHVuc2lnbmVkIGxvbmcgc2VjLCB1bnNpZ25lZCBsb25nIG5zZWMpCiB7Ci0Jc3RydWN0IHRpbWVzcGVjIHRzID0ge3NlYywgbnNlY307Ci0JcmV0dXJuIGppZmZpZXMgKyB0aW1lc3BlY190b19qaWZmaWVzKCZ0cyk7CisJaWYgKHNlYyB8fCBuc2VjKSB7CisJCXN0cnVjdCB0aW1lc3BlYyB0cyA9IHtzZWMsIG5zZWN9OworCQlyZXR1cm4gZ2V0X2ppZmZpZXNfNjQoKSArIHRpbWVzcGVjX3RvX2ppZmZpZXMoJnRzKTsKKwl9IGVsc2UKKwkJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zNSw3ICs2NSw4IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZ1c2VfY2hhbmdlX3RpbWVvdXQoc3RydWN0IGRlbnRyeSAqZW50cnksIHN0cnVjdCBmdXNlX2VudHJ5X291dCAqbykKIHsKLQllbnRyeS0+ZF90aW1lID0gdGltZV90b19qaWZmaWVzKG8tPmVudHJ5X3ZhbGlkLCBvLT5lbnRyeV92YWxpZF9uc2VjKTsKKwlmdXNlX2RlbnRyeV9zZXR0aW1lKGVudHJ5LAorCQl0aW1lX3RvX2ppZmZpZXMoby0+ZW50cnlfdmFsaWQsIG8tPmVudHJ5X3ZhbGlkX25zZWMpKTsKIAlpZiAoZW50cnktPmRfaW5vZGUpCiAJCWdldF9mdXNlX2lub2RlKGVudHJ5LT5kX2lub2RlKS0+aV90aW1lID0KIAkJCXRpbWVfdG9famlmZmllcyhvLT5hdHRyX3ZhbGlkLCBvLT5hdHRyX3ZhbGlkX25zZWMpOwpAQCAtNDcsNyArNzgsNyBAQAogICovCiB2b2lkIGZ1c2VfaW52YWxpZGF0ZV9hdHRyKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JZ2V0X2Z1c2VfaW5vZGUoaW5vZGUpLT5pX3RpbWUgPSBqaWZmaWVzIC0gMTsKKwlnZXRfZnVzZV9pbm9kZShpbm9kZSktPmlfdGltZSA9IDA7CiB9CiAKIC8qCkBAIC02MCw3ICs5MSw3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGZ1c2VfaW52YWxpZGF0ZV9lbnRyeV9jYWNoZShzdHJ1Y3QgZGVudHJ5ICplbnRyeSkKIHsKLQllbnRyeS0+ZF90aW1lID0gamlmZmllcyAtIDE7CisJZnVzZV9kZW50cnlfc2V0dGltZShlbnRyeSwgMCk7CiB9CiAKIC8qCkBAIC0xMDIsNyArMTMzLDcgQEAKIAogCWlmIChpbm9kZSAmJiBpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlyZXR1cm4gMDsKLQllbHNlIGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGVudHJ5LT5kX3RpbWUpKSB7CisJZWxzZSBpZiAoZnVzZV9kZW50cnlfdGltZShlbnRyeSkgPCBnZXRfamlmZmllc182NCgpKSB7CiAJCWludCBlcnI7CiAJCXN0cnVjdCBmdXNlX2VudHJ5X291dCBvdXRhcmc7CiAJCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOwpAQCAtNjY2LDcgKzY5Nyw3IEBACiAJaWYgKCFmdXNlX2FsbG93X3Rhc2soZmMsIGN1cnJlbnQpKQogCQlyZXR1cm4gLUVBQ0NFUzsKIAlpZiAoZ2V0X25vZGVfaWQoaW5vZGUpICE9IEZVU0VfUk9PVF9JRCAmJgotCSAgICB0aW1lX2JlZm9yZV9lcShqaWZmaWVzLCBmaS0+aV90aW1lKSkKKwkgICAgZmktPmlfdGltZSA+PSBnZXRfamlmZmllc182NCgpKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBmdXNlX2RvX2dldGF0dHIoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA2MzYxNGVkLi41YzRmY2QxIDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtMzk1LDE0ICszOTUsMTYgQEAKIAlzdHJ1Y3QgZnVzZV9yZWFkcGFnZXNfZGF0YSBkYXRhOwogCWludCBlcnI7CiAKKwllcnIgPSAtRUlPOwogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQotCQlyZXR1cm4gLUVJTzsKKwkJZ290byBjbGVhbl9wYWdlc191cDsKIAogCWRhdGEuZmlsZSA9IGZpbGU7CiAJZGF0YS5pbm9kZSA9IGlub2RlOwogCWRhdGEucmVxID0gZnVzZV9nZXRfcmVxKGZjKTsKKwllcnIgPSBQVFJfRVJSKGRhdGEucmVxKTsKIAlpZiAoSVNfRVJSKGRhdGEucmVxKSkKLQkJcmV0dXJuIFBUUl9FUlIoZGF0YS5yZXEpOworCQlnb3RvIGNsZWFuX3BhZ2VzX3VwOwogCiAJZXJyID0gcmVhZF9jYWNoZV9wYWdlcyhtYXBwaW5nLCBwYWdlcywgZnVzZV9yZWFkcGFnZXNfZmlsbCwgJmRhdGEpOwogCWlmICghZXJyKSB7CkBAIC00MTIsNiArNDE0LDEwIEBACiAJCQlmdXNlX3B1dF9yZXF1ZXN0KGZjLCBkYXRhLnJlcSk7CiAJfQogCXJldHVybiBlcnI7CisKK2NsZWFuX3BhZ2VzX3VwOgorCXB1dF9wYWdlc19saXN0KHBhZ2VzKTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgc2l6ZV90IGZ1c2Vfc2VuZF93cml0ZShzdHJ1Y3QgZnVzZV9yZXEgKnJlcSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Z1c2VfaS5oIGIvZnMvZnVzZS9mdXNlX2kuaAppbmRleCAwZGJmOTY2Li42OWM3NzUwIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Z1c2VfaS5oCisrKyBiL2ZzL2Z1c2UvZnVzZV9pLmgKQEAgLTU5LDcgKzU5LDcgQEAKIAlzdHJ1Y3QgZnVzZV9yZXEgKmZvcmdldF9yZXE7CiAKIAkvKiogVGltZSBpbiBqaWZmaWVzIHVudGlsIHRoZSBmaWxlIGF0dHJpYnV0ZXMgYXJlIHZhbGlkICovCi0JdW5zaWduZWQgbG9uZyBpX3RpbWU7CisJdTY0IGlfdGltZTsKIH07CiAKIC8qKiBGVVNFIHNwZWNpZmljIGZpbGUgZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9pbm9kZS5jIGIvZnMvZnVzZS9pbm9kZS5jCmluZGV4IGRjYWFhYmQuLjdkMjUwOTIgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvaW5vZGUuYworKysgYi9mcy9mdXNlL2lub2RlLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlmaSA9IGdldF9mdXNlX2lub2RlKGlub2RlKTsKLQlmaS0+aV90aW1lID0gamlmZmllcyAtIDE7CisJZmktPmlfdGltZSA9IDA7CiAJZmktPm5vZGVpZCA9IDA7CiAJZmktPm5sb29rdXAgPSAwOwogCWZpLT5mb3JnZXRfcmVxID0gZnVzZV9yZXF1ZXN0X2FsbG9jKCk7CmRpZmYgLS1naXQgYS9mcy9pbm90aWZ5X3VzZXIuYyBiL2ZzL2lub3RpZnlfdXNlci5jCmluZGV4IGYyMzg2NDQuLjAxN2NiMGYgMTAwNjQ0Ci0tLSBhL2ZzL2lub3RpZnlfdXNlci5jCisrKyBiL2ZzL2lub3RpZnlfdXNlci5jCkBAIC0xODcsNyArMTg3LDcgQEAKIHsKIAlzdHJ1Y3QgaW5vdGlmeV9rZXJuZWxfZXZlbnQgKmtldmVudDsKIAotCWtldmVudCA9IGttZW1fY2FjaGVfYWxsb2MoZXZlbnRfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwlrZXZlbnQgPSBrbWVtX2NhY2hlX2FsbG9jKGV2ZW50X2NhY2hlcCwgR0ZQX05PRlMpOwogCWlmICh1bmxpa2VseSgha2V2ZW50KSkKIAkJcmV0dXJuIE5VTEw7CiAKZGlmZiAtLWdpdCBhL2ZzL2lvcHJpby5jIGIvZnMvaW9wcmlvLmMKaW5kZXggOTNhYTU3MS4uNzhiMWRlYSAxMDA2NDQKLS0tIGEvZnMvaW9wcmlvLmMKKysrIGIvZnMvaW9wcmlvLmMKQEAgLTQ0LDYgKzQ0LDkgQEAKIAl0YXNrLT5pb3ByaW8gPSBpb3ByaW87CiAKIAlpb2MgPSB0YXNrLT5pb19jb250ZXh0OworCS8qIHNlZSB3bWIoKSBpbiBjdXJyZW50X2lvX2NvbnRleHQoKSAqLworCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOworCiAJaWYgKGlvYyAmJiBpb2MtPnNldF9pb3ByaW8pCiAJCWlvYy0+c2V0X2lvcHJpbyhpb2MsIGlvcHJpbyk7CiAKQEAgLTExMSw5ICsxMTQsOSBAQAogCQkJCQljb250aW51ZTsKIAkJCQlyZXQgPSBzZXRfdGFza19pb3ByaW8ocCwgaW9wcmlvKTsKIAkJCQlpZiAocmV0KQotCQkJCQlicmVhazsKKwkJCQkJZ290byBmcmVlX3VpZDsKIAkJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7Ci0KK2ZyZWVfdWlkOgogCQkJaWYgKHdobykKIAkJCQlmcmVlX3VpZCh1c2VyKTsKIAkJCWJyZWFrOwpAQCAtMTM3LDYgKzE0MCwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK2ludCBpb3ByaW9fYmVzdCh1bnNpZ25lZCBzaG9ydCBhcHJpbywgdW5zaWduZWQgc2hvcnQgYnByaW8pCit7CisJdW5zaWduZWQgc2hvcnQgYWNsYXNzID0gSU9QUklPX1BSSU9fQ0xBU1MoYXByaW8pOworCXVuc2lnbmVkIHNob3J0IGJjbGFzcyA9IElPUFJJT19QUklPX0NMQVNTKGJwcmlvKTsKKworCWlmICghaW9wcmlvX3ZhbGlkKGFwcmlvKSkKKwkJcmV0dXJuIGJwcmlvOworCWlmICghaW9wcmlvX3ZhbGlkKGJwcmlvKSkKKwkJcmV0dXJuIGFwcmlvOworCisJaWYgKGFjbGFzcyA9PSBJT1BSSU9fQ0xBU1NfTk9ORSkKKwkJYWNsYXNzID0gSU9QUklPX0NMQVNTX0JFOworCWlmIChiY2xhc3MgPT0gSU9QUklPX0NMQVNTX05PTkUpCisJCWJjbGFzcyA9IElPUFJJT19DTEFTU19CRTsKKworCWlmIChhY2xhc3MgPT0gYmNsYXNzKQorCQlyZXR1cm4gbWluKGFwcmlvLCBicHJpbyk7CisJaWYgKGFjbGFzcyA+IGJjbGFzcykKKwkJcmV0dXJuIGJwcmlvOworCWVsc2UKKwkJcmV0dXJuIGFwcmlvOworfQorCiBhc21saW5rYWdlIGxvbmcgc3lzX2lvcHJpb19nZXQoaW50IHdoaWNoLCBpbnQgd2hvKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7CmRpZmYgLS1naXQgYS9mcy9qYmQvY29tbWl0LmMgYi9mcy9qYmQvY29tbWl0LmMKaW5kZXggMDk3MTgxNC4uNDJkYTYwNyAxMDA2NDQKLS0tIGEvZnMvamJkL2NvbW1pdC5jCisrKyBiL2ZzL2piZC9jb21taXQuYwpAQCAtMjYxLDcgKzI2MSw3IEBACiAJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gamgyYmgoamgpOwogCiAJCQlqYmRfbG9ja19iaF9zdGF0ZShiaCk7Ci0JCQlrZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSk7CisJCQlqYmRfc2xhYl9mcmVlKGpoLT5iX2NvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCWpoLT5iX2NvbW1pdHRlZF9kYXRhID0gTlVMTDsKIAkJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwogCQl9CkBAIC03NDUsMTQgKzc0NSwxNCBAQAogCQkgKiBPdGhlcndpc2UsIHdlIGNhbiBqdXN0IHRocm93IGF3YXkgdGhlIGZyb3plbiBkYXRhIG5vdy4KIAkJICovCiAJCWlmIChqaC0+Yl9jb21taXR0ZWRfZGF0YSkgewotCQkJa2ZyZWUoamgtPmJfY29tbWl0dGVkX2RhdGEpOworCQkJamJkX3NsYWJfZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQlqaC0+Yl9jb21taXR0ZWRfZGF0YSA9IE5VTEw7CiAJCQlpZiAoamgtPmJfZnJvemVuX2RhdGEpIHsKIAkJCQlqaC0+Yl9jb21taXR0ZWRfZGF0YSA9IGpoLT5iX2Zyb3plbl9kYXRhOwogCQkJCWpoLT5iX2Zyb3plbl9kYXRhID0gTlVMTDsKIAkJCX0KIAkJfSBlbHNlIGlmIChqaC0+Yl9mcm96ZW5fZGF0YSkgewotCQkJa2ZyZWUoamgtPmJfZnJvemVuX2RhdGEpOworCQkJamJkX3NsYWJfZnJlZShqaC0+Yl9mcm96ZW5fZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQlqaC0+Yl9mcm96ZW5fZGF0YSA9IE5VTEw7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZnMvamJkL2pvdXJuYWwuYyBiL2ZzL2piZC9qb3VybmFsLmMKaW5kZXggOGM5YjI4ZC4uZjY2NzI0YyAxMDA2NDQKLS0tIGEvZnMvamJkL2pvdXJuYWwuYworKysgYi9mcy9qYmQvam91cm5hbC5jCkBAIC04NCw2ICs4NCw3IEBACiAKIHN0YXRpYyBpbnQgam91cm5hbF9jb252ZXJ0X3N1cGVyYmxvY2tfdjEoam91cm5hbF90ICosIGpvdXJuYWxfc3VwZXJibG9ja190ICopOwogc3RhdGljIHZvaWQgX19qb3VybmFsX2Fib3J0X3NvZnQgKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IGVycm5vKTsKK3N0YXRpYyBpbnQgam91cm5hbF9jcmVhdGVfamJkX3NsYWIoc2l6ZV90IHNsYWJfc2l6ZSk7CiAKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb24gdXNlZCB0byBtYW5hZ2UgY29tbWl0IHRpbWVvdXRzCkBAIC0zMjgsMTAgKzMyOSwxMCBAQAogCQljaGFyICp0bXA7CiAKIAkJamJkX3VubG9ja19iaF9zdGF0ZShiaF9pbik7Ci0JCXRtcCA9IGpiZF9yZXBfa21hbGxvYyhiaF9pbi0+Yl9zaXplLCBHRlBfTk9GUyk7CisJCXRtcCA9IGpiZF9zbGFiX2FsbG9jKGJoX2luLT5iX3NpemUsIEdGUF9OT0ZTKTsKIAkJamJkX2xvY2tfYmhfc3RhdGUoYmhfaW4pOwogCQlpZiAoamhfaW4tPmJfZnJvemVuX2RhdGEpIHsKLQkJCWtmcmVlKHRtcCk7CisJCQlqYmRfc2xhYl9mcmVlKHRtcCwgYmhfaW4tPmJfc2l6ZSk7CiAJCQlnb3RvIHJlcGVhdDsKIAkJfQogCkBAIC0xMDY5LDE3ICsxMDcwLDE3IEBACiBpbnQgam91cm5hbF9sb2FkKGpvdXJuYWxfdCAqam91cm5hbCkKIHsKIAlpbnQgZXJyOworCWpvdXJuYWxfc3VwZXJibG9ja190ICpzYjsKIAogCWVyciA9IGxvYWRfc3VwZXJibG9jayhqb3VybmFsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CiAJLyogSWYgdGhpcyBpcyBhIFYyIHN1cGVyYmxvY2ssIHRoZW4gd2UgaGF2ZSB0byBjaGVjayB0aGUKIAkgKiBmZWF0dXJlcyBmbGFncyBvbiBpdC4gKi8KIAogCWlmIChqb3VybmFsLT5qX2Zvcm1hdF92ZXJzaW9uID49IDIpIHsKLQkJam91cm5hbF9zdXBlcmJsb2NrX3QgKnNiID0gam91cm5hbC0+al9zdXBlcmJsb2NrOwotCiAJCWlmICgoc2ItPnNfZmVhdHVyZV9yb19jb21wYXQgJgogCQkgICAgIH5jcHVfdG9fYmUzMihKRlNfS05PV05fUk9DT01QQVRfRkVBVFVSRVMpKSB8fAogCQkgICAgKHNiLT5zX2ZlYXR1cmVfaW5jb21wYXQgJgpAQCAtMTA5MCw2ICsxMDkxLDEzIEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhIHNsYWIgZm9yIHRoaXMgYmxvY2tzaXplCisJICovCisJZXJyID0gam91cm5hbF9jcmVhdGVfamJkX3NsYWIoY3B1X3RvX2JlMzIoc2ItPnNfYmxvY2tzaXplKSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwogCS8qIExldCB0aGUgcmVjb3ZlcnkgY29kZSBjaGVjayB3aGV0aGVyIGl0IG5lZWRzIHRvIHJlY292ZXIgYW55CiAJICogZGF0YSBmcm9tIHRoZSBqb3VybmFsLiAqLwogCWlmIChqb3VybmFsX3JlY292ZXIoam91cm5hbCkpCkBAIC0xNjEyLDYgKzE2MjAsNzcgQEAKIH0KIAogLyoKKyAqIGpiZCBzbGFiIG1hbmFnZW1lbnQ6IGNyZWF0ZSAxaywgMmssIDRrLCA4ayBzbGFicyBhcyBuZWVkZWQKKyAqIGFuZCBhbGxvY2F0ZSBmcm96ZW4gYW5kIGNvbW1pdCBidWZmZXJzIGZyb20gdGhlc2Ugc2xhYnMuCisgKgorICogUmVhc29uIGZvciBkb2luZyB0aGlzIGlzIHRvIGF2b2lkLCBTTEFCX0RFQlVHIC0gc2luY2UgaXQgY291bGQKKyAqIGNhdXNlIGJoIHRvIGNyb3NzIHBhZ2UgYm91bmRhcnkuCisgKi8KKworI2RlZmluZSBKQkRfTUFYX1NMQUJTIDUKKyNkZWZpbmUgSkJEX1NMQUJfSU5ERVgoc2l6ZSkgIChzaXplID4+IDExKQorCitzdGF0aWMga21lbV9jYWNoZV90ICpqYmRfc2xhYltKQkRfTUFYX1NMQUJTXTsKK3N0YXRpYyBjb25zdCBjaGFyICpqYmRfc2xhYl9uYW1lc1tKQkRfTUFYX1NMQUJTXSA9IHsKKwkiamJkXzFrIiwgImpiZF8yayIsICJqYmRfNGsiLCBOVUxMLCAiamJkXzhrIgorfTsKKworc3RhdGljIHZvaWQgam91cm5hbF9kZXN0cm95X2piZF9zbGFicyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEpCRF9NQVhfU0xBQlM7IGkrKykgeworCQlpZiAoamJkX3NsYWJbaV0pCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koamJkX3NsYWJbaV0pOworCQlqYmRfc2xhYltpXSA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGpvdXJuYWxfY3JlYXRlX2piZF9zbGFiKHNpemVfdCBzbGFiX3NpemUpCit7CisJaW50IGkgPSBKQkRfU0xBQl9JTkRFWChzbGFiX3NpemUpOworCisJQlVHX09OKGkgPj0gSkJEX01BWF9TTEFCUyk7CisKKwkvKgorCSAqIENoZWNrIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHNsYWIgY3JlYXRlZCBmb3IgdGhpcyBzaXplCisJICovCisJaWYgKGpiZF9zbGFiW2ldKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogQ3JlYXRlIGEgc2xhYiBhbmQgZm9yY2UgYWxpZ25tZW50IHRvIGJlIHNhbWUgYXMgc2xhYnNpemUgLQorCSAqIHRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCBhbGxvY2F0aW9ucyB3b24ndCBjcm9zcyB0aGUgcGFnZQorCSAqIGJvdW5kYXJ5LgorCSAqLworCWpiZF9zbGFiW2ldID0ga21lbV9jYWNoZV9jcmVhdGUoamJkX3NsYWJfbmFtZXNbaV0sCisJCQkJc2xhYl9zaXplLCBzbGFiX3NpemUsIDAsIE5VTEwsIE5VTEwpOworCWlmICghamJkX3NsYWJbaV0pIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkpCRDogbm8gbWVtb3J5IGZvciBqYmRfc2xhYiBjYWNoZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlyZXR1cm4gMDsKK30KKwordm9pZCAqIGpiZF9zbGFiX2FsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKK3sKKwlpbnQgaWR4OworCisJaWR4ID0gSkJEX1NMQUJfSU5ERVgoc2l6ZSk7CisJQlVHX09OKGpiZF9zbGFiW2lkeF0gPT0gTlVMTCk7CisJcmV0dXJuIGttZW1fY2FjaGVfYWxsb2MoamJkX3NsYWJbaWR4XSwgZmxhZ3MgfCBfX0dGUF9OT0ZBSUwpOworfQorCit2b2lkIGpiZF9zbGFiX2ZyZWUodm9pZCAqcHRyLCAgc2l6ZV90IHNpemUpCit7CisJaW50IGlkeDsKKworCWlkeCA9IEpCRF9TTEFCX0lOREVYKHNpemUpOworCUJVR19PTihqYmRfc2xhYltpZHhdID09IE5VTEwpOworCWttZW1fY2FjaGVfZnJlZShqYmRfc2xhYltpZHhdLCBwdHIpOworfQorCisvKgogICogSm91cm5hbF9oZWFkIHN0b3JhZ2UgbWFuYWdlbWVudAogICovCiBzdGF0aWMga21lbV9jYWNoZV90ICpqb3VybmFsX2hlYWRfY2FjaGU7CkBAIC0xNzk5LDEzICsxODc4LDEzIEBACiAJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGZyZWVpbmcgIgogCQkJCQkJImJfZnJvemVuX2RhdGFcbiIsCiAJCQkJCQlfX0ZVTkNUSU9OX18pOwotCQkJCWtmcmVlKGpoLT5iX2Zyb3plbl9kYXRhKTsKKwkJCQlqYmRfc2xhYl9mcmVlKGpoLT5iX2Zyb3plbl9kYXRhLCBiaC0+Yl9zaXplKTsKIAkJCX0KIAkJCWlmIChqaC0+Yl9jb21taXR0ZWRfZGF0YSkgewogCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBmcmVlaW5nICIKIAkJCQkJCSJiX2NvbW1pdHRlZF9kYXRhXG4iLAogCQkJCQkJX19GVU5DVElPTl9fKTsKLQkJCQlrZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSk7CisJCQkJamJkX3NsYWJfZnJlZShqaC0+Yl9jb21taXR0ZWRfZGF0YSwgYmgtPmJfc2l6ZSk7CiAJCQl9CiAJCQliaC0+Yl9wcml2YXRlID0gTlVMTDsKIAkJCWpoLT5iX2JoID0gTlVMTDsJLyogZGVidWcsIHJlYWxseSAqLwpAQCAtMTk2MSw2ICsyMDQwLDcgQEAKIAlqb3VybmFsX2Rlc3Ryb3lfcmV2b2tlX2NhY2hlcygpOwogCWpvdXJuYWxfZGVzdHJveV9qb3VybmFsX2hlYWRfY2FjaGUoKTsKIAlqb3VybmFsX2Rlc3Ryb3lfaGFuZGxlX2NhY2hlKCk7CisJam91cm5hbF9kZXN0cm95X2piZF9zbGFicygpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBqb3VybmFsX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2piZC90cmFuc2FjdGlvbi5jIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKaW5kZXggNTA4YjJlYS4uZjUxNjlhOSAxMDA2NDQKLS0tIGEvZnMvamJkL3RyYW5zYWN0aW9uLmMKKysrIGIvZnMvamJkL3RyYW5zYWN0aW9uLmMKQEAgLTY2Niw4ICs2NjYsOSBAQAogCQkJaWYgKCFmcm96ZW5fYnVmZmVyKSB7CiAJCQkJSkJVRkZFUl9UUkFDRShqaCwgImFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyIik7CiAJCQkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7Ci0JCQkJZnJvemVuX2J1ZmZlciA9IGpiZF9rbWFsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLAotCQkJCQkJCSAgICBHRlBfTk9GUyk7CisJCQkJZnJvemVuX2J1ZmZlciA9CisJCQkJCWpiZF9zbGFiX2FsbG9jKGpoMmJoKGpoKS0+Yl9zaXplLAorCQkJCQkJCSBHRlBfTk9GUyk7CiAJCQkJaWYgKCFmcm96ZW5fYnVmZmVyKSB7CiAJCQkJCXByaW50ayhLRVJOX0VNRVJHCiAJCQkJCSAgICAgICAiJXM6IE9PTSBmb3IgZnJvemVuX2J1ZmZlclxuIiwKQEAgLTcyNiw3ICs3MjcsNyBAQAogCiBvdXQ6CiAJaWYgKHVubGlrZWx5KGZyb3plbl9idWZmZXIpKQkvKiBJdCdzIHVzdWFsbHkgTlVMTCAqLwotCQlrZnJlZShmcm96ZW5fYnVmZmVyKTsKKwkJamJkX3NsYWJfZnJlZShmcm96ZW5fYnVmZmVyLCBiaC0+Yl9zaXplKTsKIAogCUpCVUZGRVJfVFJBQ0UoamgsICJleGl0Iik7CiAJcmV0dXJuIGVycm9yOwpAQCAtODc5LDcgKzg4MCw3IEBACiAKIHJlcGVhdDoKIAlpZiAoIWpoLT5iX2NvbW1pdHRlZF9kYXRhKSB7Ci0JCWNvbW1pdHRlZF9kYXRhID0gamJkX2ttYWxsb2MoamgyYmgoamgpLT5iX3NpemUsIEdGUF9OT0ZTKTsKKwkJY29tbWl0dGVkX2RhdGEgPSBqYmRfc2xhYl9hbGxvYyhqaDJiaChqaCktPmJfc2l6ZSwgR0ZQX05PRlMpOwogCQlpZiAoIWNvbW1pdHRlZF9kYXRhKSB7CiAJCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IE5vIG1lbW9yeSBmb3IgY29tbWl0dGVkIGRhdGFcbiIsCiAJCQkJX19GVU5DVElPTl9fKTsKQEAgLTkwNiw3ICs5MDcsNyBAQAogb3V0OgogCWpvdXJuYWxfcHV0X2pvdXJuYWxfaGVhZChqaCk7CiAJaWYgKHVubGlrZWx5KGNvbW1pdHRlZF9kYXRhKSkKLQkJa2ZyZWUoY29tbWl0dGVkX2RhdGEpOworCQlqYmRfc2xhYl9mcmVlKGNvbW1pdHRlZF9kYXRhLCBiaC0+Yl9zaXplKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9qZmZzMl9mc19pLmggYi9mcy9qZmZzMi9qZmZzMl9mc19pLmgKaW5kZXggMmUwY2M4ZS4uM2E1NjYwNyAxMDA2NDQKLS0tIGEvZnMvamZmczIvamZmczJfZnNfaS5oCisrKyBiL2ZzL2pmZnMyL2pmZnMyX2ZzX2kuaApAQCAtNDEsMTEgKzQxLDcgQEAKIAogCXVpbnQxNl90IGZsYWdzOwogCXVpbnQ4X3QgdXNlcmNvbXByOwotI2lmICFkZWZpbmVkIChfX0VDT1MpCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiw1LDIpCiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKLSNlbmRpZgotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0pGRlMyX0ZTX1BPU0lYX0FDTAogCXN0cnVjdCBwb3NpeF9hY2wgKmlfYWNsX2FjY2VzczsKIAlzdHJ1Y3QgcG9zaXhfYWNsICppX2FjbF9kZWZhdWx0OwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZWxpc3QuYyBiL2ZzL2pmZnMyL25vZGVsaXN0LmMKaW5kZXggNzY3NWIzMy4uNWE2YjRkNiAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZWxpc3QuYworKysgYi9mcy9qZmZzMi9ub2RlbGlzdC5jCkBAIC0yMSw2ICsyMSw5IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgIm5vZGVsaXN0LmgiCiAKK3N0YXRpYyB2b2lkIGpmZnMyX29ic29sZXRlX25vZGVfZnJhZyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywKKwkJCQkgICAgIHN0cnVjdCBqZmZzMl9ub2RlX2ZyYWcgKnRoaXMpOworCiB2b2lkIGpmZnMyX2FkZF9mZF90b19saXN0KHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKm5ldywgc3RydWN0IGpmZnMyX2Z1bGxfZGlyZW50ICoqbGlzdCkKIHsKIAlzdHJ1Y3QgamZmczJfZnVsbF9kaXJlbnQgKipwcmV2ID0gbGlzdDsKQEAgLTg3LDcgKzkwLDggQEAKIAl9CiB9CiAKLXZvaWQgamZmczJfb2Jzb2xldGVfbm9kZV9mcmFnKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLCBzdHJ1Y3QgamZmczJfbm9kZV9mcmFnICp0aGlzKQorc3RhdGljIHZvaWQgamZmczJfb2Jzb2xldGVfbm9kZV9mcmFnKHN0cnVjdCBqZmZzMl9zYl9pbmZvICpjLAorCQkJCSAgICAgc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqdGhpcykKIHsKIAlpZiAodGhpcy0+bm9kZSkgewogCQl0aGlzLT5ub2RlLT5mcmFncy0tOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvbm9kZWxpc3QuaCBiL2ZzL2pmZnMyL25vZGVsaXN0LmgKaW5kZXggY2FlOTJjMS4uMGRkZmQ3MCAxMDA2NDQKLS0tIGEvZnMvamZmczIvbm9kZWxpc3QuaAorKysgYi9mcy9qZmZzMi9ub2RlbGlzdC5oCkBAIC0zMzQsNyArMzM0LDYgQEAKIHN0cnVjdCByYl9ub2RlICpyYl9uZXh0KHN0cnVjdCByYl9ub2RlICopOwogc3RydWN0IHJiX25vZGUgKnJiX3ByZXYoc3RydWN0IHJiX25vZGUgKik7CiB2b2lkIHJiX3JlcGxhY2Vfbm9kZShzdHJ1Y3QgcmJfbm9kZSAqdmljdGltLCBzdHJ1Y3QgcmJfbm9kZSAqbmV3LCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCk7Ci12b2lkIGpmZnMyX29ic29sZXRlX25vZGVfZnJhZyhzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqdGhpcyk7CiBpbnQgamZmczJfYWRkX2Z1bGxfZG5vZGVfdG9faW5vZGUoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvICpmLCBzdHJ1Y3QgamZmczJfZnVsbF9kbm9kZSAqZm4pOwogdm9pZCBqZmZzMl90cnVuY2F0ZV9mcmFndHJlZSAoc3RydWN0IGpmZnMyX3NiX2luZm8gKmMsIHN0cnVjdCByYl9yb290ICpsaXN0LCB1aW50MzJfdCBzaXplKTsKIGludCBqZmZzMl9hZGRfb2xkZXJfZnJhZ190b19mcmFndHJlZShzdHJ1Y3QgamZmczJfc2JfaW5mbyAqYywgc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYsIHN0cnVjdCBqZmZzMl90bXBfZG5vZGVfaW5mbyAqdG4pOwpkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VtbWFyeS5jIGIvZnMvamZmczIvc3VtbWFyeS5jCmluZGV4IGMxOWJkNDcuLmU1MmNlZjUyIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9zdW1tYXJ5LmMKKysrIGIvZnMvamZmczIvc3VtbWFyeS5jCkBAIC0yNTIsNiArMjUyLDExIEBACiAJdW5pb24gamZmczJfbm9kZV91bmlvbiAqbm9kZTsKIAlzdHJ1Y3QgamZmczJfZXJhc2VibG9jayAqamViOwogCisJaWYgKGMtPnN1bW1hcnktPnN1bV9zaXplID09IEpGRlMyX1NVTU1BUllfTk9TVU1fU0laRSkgeworCQlkYmdfc3VtbWFyeSgiU3VtbWFyeSBpcyBkaXNhYmxlZCBmb3IgdGhpcyBqZWIhIFNraXBwaW5nIHN1bW1hcnkgaW5mbyFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKIAlub2RlID0gaW52ZWNzWzBdLmlvdl9iYXNlOwogCWplYiA9ICZjLT5ibG9ja3Nbb2ZzIC8gYy0+c2VjdG9yX3NpemVdOwogCW9mcyAtPSBqZWItPm9mZnNldDsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL3hhdHRyLmMgYi9mcy9qZmZzMi94YXR0ci5jCmluZGV4IDI1YmMxYWUuLjRkYTA5Y2UgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL3hhdHRyLmMKKysrIGIvZnMvamZmczIveGF0dHIuYwpAQCAtMTIxNSw3ICsxMjE1LDYgQEAKIAlyYyA9IGpmZnMyX3Jlc2VydmVfc3BhY2VfZ2MoYywgdG90bGVuLCAmbGVuZ3RoLCBKRkZTMl9TVU1NQVJZX1hBVFRSX1NJWkUpOwogCWlmIChyYykgewogCQlKRkZTMl9XQVJOSU5HKCJqZmZzMl9yZXNlcnZlX3NwYWNlX2djKCk9JWQsIHJlcXVlc3Q9JXVcbiIsIHJjLCB0b3RsZW4pOwotCQlyYyA9IHJjID8gcmMgOiAtRUJBREZEOwogCQlnb3RvIG91dDsKIAl9CiAJcmMgPSBzYXZlX3hhdHRyX2RhdHVtKGMsIHhkKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9pbm9kZS5jIGIvZnMvamZzL2lub2RlLmMKaW5kZXggNDNlM2Y1Ni4uYTIyM2NmNCAxMDA2NDQKLS0tIGEvZnMvamZzL2lub2RlLmMKKysrIGIvZnMvamZzL2lub2RlLmMKQEAgLTE2OCwxNiArMTY4LDE1IEBACiAJc2V0X2NmbGFnKENPTU1JVF9EaXJ0eSwgaW5vZGUpOwogfQogCi1zdGF0aWMgaW50Ci1qZnNfZ2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlwLCBzZWN0b3JfdCBsYmxvY2ssIHVuc2lnbmVkIGxvbmcgbWF4X2Jsb2NrcywKLQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQoraW50IGpmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppcCwgc2VjdG9yX3QgbGJsb2NrLAorCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQogewogCXM2NCBsYmxvY2s2NCA9IGxibG9jazsKIAlpbnQgcmMgPSAwOwogCXhhZF90IHhhZDsKIAlzNjQgeGFkZHI7CiAJaW50IHhmbGFnOwotCXMzMiB4bGVuID0gbWF4X2Jsb2NrczsKKwlzMzIgeGxlbiA9IGJoX3Jlc3VsdC0+Yl9zaXplID4+IGlwLT5pX2Jsa2JpdHM7CiAKIAkvKgogCSAqIFRha2UgYXBwcm9wcmlhdGUgbG9jayBvbiBpbm9kZQpAQCAtMTg4LDcgKzE4Nyw3IEBACiAJCUlSRUFEX0xPQ0soaXApOwogCiAJaWYgKCgobGJsb2NrNjQgPDwgaXAtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpIDwgaXAtPmlfc2l6ZSkgJiYKLQkgICAgKCF4dExvb2t1cChpcCwgbGJsb2NrNjQsIG1heF9ibG9ja3MsICZ4ZmxhZywgJnhhZGRyLCAmeGxlbiwgMCkpICYmCisJICAgICgheHRMb29rdXAoaXAsIGxibG9jazY0LCB4bGVuLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDApKSAmJgogCSAgICB4YWRkcikgewogCQlpZiAoeGZsYWcgJiBYQURfTk9UUkVDT1JERUQpIHsKIAkJCWlmICghY3JlYXRlKQpAQCAtMjU1LDEzICsyNTQsNiBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIGludCBqZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaXAsIHNlY3Rvcl90IGxibG9jaywKLQkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKLXsKLQlyZXR1cm4gamZzX2dldF9ibG9ja3MoaXAsIGxibG9jaywgYmhfcmVzdWx0LT5iX3NpemUgPj4gaXAtPmlfYmxrYml0cywKLQkJCWJoX3Jlc3VsdCwgY3JlYXRlKTsKLX0KLQogc3RhdGljIGludCBqZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gbm9iaF93cml0ZXBhZ2UocGFnZSwgamZzX2dldF9ibG9jaywgd2JjKTsKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW5vZGUuaCBiL2ZzL2pmcy9qZnNfaW5vZGUuaAppbmRleCBiNWM3ZGE2Li4xZmM0OGRmIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2lub2RlLmgKKysrIGIvZnMvamZzL2pmc19pbm9kZS5oCkBAIC0zMiw2ICszMiw3IEBACiBleHRlcm4gdm9pZCBqZnNfZnJlZV96ZXJvX2xpbmsoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmpmc19nZXRfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gdm9pZCBqZnNfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgamZzX2dldF9ibG9jayhzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfYW9wczsKIGV4dGVybiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9mcy9qZnMvc3VwZXIuYyBiL2ZzL2pmcy9zdXBlci5jCmluZGV4IDRmNmNmZWIuLjE0M2JjZDEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9zdXBlci5jCisrKyBiL2ZzL2pmcy9zdXBlci5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcG9zaXhfYWNsLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAKQEAgLTI5OCw3ICsyOTksNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotI2lmIGRlZmluZWQoQ09ORklHX1FVT1RBKQorI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF9xdW90YToKIAkJY2FzZSBPcHRfdXNycXVvdGE6CiAJCQkqZmxhZyB8PSBKRlNfVVNSUVVPVEE7CkBAIC01OTcsNyArNTk4LDcgQEAKIAlpZiAoc2JpLT5mbGFnICYgSkZTX05PSU5URUdSSVRZKQogCQlzZXFfcHV0cyhzZXEsICIsbm9pbnRlZ3JpdHkiKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX1FVT1RBKQorI2lmZGVmIENPTkZJR19RVU9UQQogCWlmIChzYmktPmZsYWcgJiBKRlNfVVNSUVVPVEEpCiAJCXNlcV9wdXRzKHNlcSwgIix1c3JxdW90YSIpOwogCkBAIC02MDgsNiArNjA5LDExMyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1FVT1RBCisKKy8qIFJlYWQgZGF0YSBmcm9tIHF1b3RhZmlsZSAtIGF2b2lkIHBhZ2VjYWNoZSBhbmQgc3VjaCBiZWNhdXNlIHdlIGNhbm5vdCBhZmZvcmQKKyAqIGFjcXVpcmluZyB0aGUgbG9ja3MuLi4gQXMgcXVvdGEgZmlsZXMgYXJlIG5ldmVyIHRydW5jYXRlZCBhbmQgcXVvdGEgY29kZQorICogaXRzZWxmIHNlcmlhbGl6ZXMgdGhlIG9wZXJhdGlvbnMgKGFuZCBub29uZSBlbHNlIHNob3VsZCB0b3VjaCB0aGUgZmlsZXMpCisgKiB3ZSBkb24ndCBoYXZlIHRvIGJlIGFmcmFpZCBvZiByYWNlcyAqLworc3RhdGljIHNzaXplX3QgamZzX3F1b3RhX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGNoYXIgKmRhdGEsCisJCQkgICAgICBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdOworCXNlY3Rvcl90IGJsayA9IG9mZiA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwlpbnQgZXJyID0gMDsKKwlpbnQgb2Zmc2V0ID0gb2ZmICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOworCWludCB0b2NvcHk7CisJc2l6ZV90IHRvcmVhZDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgdG1wX2JoOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKworCWlmIChvZmYgPiBpX3NpemUpCisJCXJldHVybiAwOworCWlmIChvZmYrbGVuID4gaV9zaXplKQorCQlsZW4gPSBpX3NpemUtb2ZmOworCXRvcmVhZCA9IGxlbjsKKwl3aGlsZSAodG9yZWFkID4gMCkgeworCQl0b2NvcHkgPSBzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgPCB0b3JlYWQgPworCQkJCXNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA6IHRvcmVhZDsKKworCQl0bXBfYmguYl9zdGF0ZSA9IDA7CisJCXRtcF9iaC5iX3NpemUgPSAxIDw8IGlub2RlLT5pX2Jsa2JpdHM7CisJCWVyciA9IGpmc19nZXRfYmxvY2soaW5vZGUsIGJsaywgJnRtcF9iaCwgMCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCQlpZiAoIWJ1ZmZlcl9tYXBwZWQoJnRtcF9iaCkpCS8qIEEgaG9sZT8gKi8KKwkJCW1lbXNldChkYXRhLCAwLCB0b2NvcHkpOworCQllbHNlIHsKKwkJCWJoID0gc2JfYnJlYWQoc2IsIHRtcF9iaC5iX2Jsb2NrbnIpOworCQkJaWYgKCFiaCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCW1lbWNweShkYXRhLCBiaC0+Yl9kYXRhK29mZnNldCwgdG9jb3B5KTsKKwkJCWJyZWxzZShiaCk7CisJCX0KKwkJb2Zmc2V0ID0gMDsKKwkJdG9yZWFkIC09IHRvY29weTsKKwkJZGF0YSArPSB0b2NvcHk7CisJCWJsaysrOworCX0KKwlyZXR1cm4gbGVuOworfQorCisvKiBXcml0ZSB0byBxdW90YWZpbGUgKi8KK3N0YXRpYyBzc2l6ZV90IGpmc19xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkYXRhLCBzaXplX3QgbGVuLCBsb2ZmX3Qgb2ZmKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBzYl9kcW9wdChzYiktPmZpbGVzW3R5cGVdOworCXNlY3Rvcl90IGJsayA9IG9mZiA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwlpbnQgZXJyID0gMDsKKwlpbnQgb2Zmc2V0ID0gb2ZmICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpOworCWludCB0b2NvcHk7CisJc2l6ZV90IHRvd3JpdGUgPSBsZW47CisJc3RydWN0IGJ1ZmZlcl9oZWFkIHRtcF9iaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXdoaWxlICh0b3dyaXRlID4gMCkgeworCQl0b2NvcHkgPSBzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgPCB0b3dyaXRlID8KKwkJCQlzYi0+c19ibG9ja3NpemUgLSBvZmZzZXQgOiB0b3dyaXRlOworCisJCXRtcF9iaC5iX3N0YXRlID0gMDsKKwkJdG1wX2JoLmJfc2l6ZSA9IDEgPDwgaW5vZGUtPmlfYmxrYml0czsKKwkJZXJyID0gamZzX2dldF9ibG9jayhpbm9kZSwgYmxrLCAmdG1wX2JoLCAxKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlpZiAob2Zmc2V0IHx8IHRvY29weSAhPSBzYi0+c19ibG9ja3NpemUpCisJCQliaCA9IHNiX2JyZWFkKHNiLCB0bXBfYmguYl9ibG9ja25yKTsKKwkJZWxzZQorCQkJYmggPSBzYl9nZXRibGsoc2IsIHRtcF9iaC5iX2Jsb2NrbnIpOworCQlpZiAoIWJoKSB7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBvdXQ7CisJCX0KKwkJbG9ja19idWZmZXIoYmgpOworCQltZW1jcHkoYmgtPmJfZGF0YStvZmZzZXQsIGRhdGEsIHRvY29weSk7CisJCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOworCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKKwkJbWFya19idWZmZXJfZGlydHkoYmgpOworCQl1bmxvY2tfYnVmZmVyKGJoKTsKKwkJYnJlbHNlKGJoKTsKKwkJb2Zmc2V0ID0gMDsKKwkJdG93cml0ZSAtPSB0b2NvcHk7CisJCWRhdGEgKz0gdG9jb3B5OworCQlibGsrKzsKKwl9CitvdXQ6CisJaWYgKGxlbiA9PSB0b3dyaXRlKQorCQlyZXR1cm4gZXJyOworCWlmIChpbm9kZS0+aV9zaXplIDwgb2ZmK2xlbi10b3dyaXRlKQorCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9mZitsZW4tdG93cml0ZSk7CisJaW5vZGUtPmlfdmVyc2lvbisrOworCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmV0dXJuIGxlbiAtIHRvd3JpdGU7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgamZzX3N1cGVyX29wZXJhdGlvbnMgPSB7CiAJLmFsbG9jX2lub2RlCT0gamZzX2FsbG9jX2lub2RlLAogCS5kZXN0cm95X2lub2RlCT0gamZzX2Rlc3Ryb3lfaW5vZGUsCkBAIC02MjEsNyArNzI5LDExIEBACiAJLnVubG9ja2ZzICAgICAgID0gamZzX3VubG9ja2ZzLAogCS5zdGF0ZnMJCT0gamZzX3N0YXRmcywKIAkucmVtb3VudF9mcwk9IGpmc19yZW1vdW50LAotCS5zaG93X29wdGlvbnMJPSBqZnNfc2hvd19vcHRpb25zCisJLnNob3dfb3B0aW9ucwk9IGpmc19zaG93X29wdGlvbnMsCisjaWZkZWYgQ09ORklHX1FVT1RBCisJLnF1b3RhX3JlYWQJPSBqZnNfcXVvdGFfcmVhZCwKKwkucXVvdGFfd3JpdGUJPSBqZnNfcXVvdGFfd3JpdGUsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgamZzX2V4cG9ydF9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvbG9ja2Qvc3ZjbG9jay5jIGIvZnMvbG9ja2Qvc3ZjbG9jay5jCmluZGV4IGJhZjVhZTUuLmM5ZDQxOTcgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y2xvY2suYworKysgYi9mcy9sb2NrZC9zdmNsb2NrLmMKQEAgLTYzOCw5ICs2MzgsNiBAQAogCWlmICh0YXNrLT50a19zdGF0dXMgPCAwKSB7CiAJCS8qIFJQQyBlcnJvcjogUmUtaW5zZXJ0IGZvciByZXRyYW5zbWlzc2lvbiAqLwogCQl0aW1lb3V0ID0gMTAgKiBIWjsKLQl9IGVsc2UgaWYgKGJsb2NrLT5iX2RvbmUpIHsKLQkJLyogQmxvY2sgYWxyZWFkeSByZW1vdmVkLCBraWxsIGl0IGZvciByZWFsICovCi0JCXRpbWVvdXQgPSAwOwogCX0gZWxzZSB7CiAJCS8qIENhbGwgd2FzIHN1Y2Nlc3NmdWwsIG5vdyB3YWl0IGZvciBjbGllbnQgY2FsbGJhY2sgKi8KIAkJdGltZW91dCA9IDYwICogSFo7CkBAIC03MDksMTMgKzcwNiwxMCBAQAogCQkJYnJlYWs7CiAJICAgICAgICBpZiAodGltZV9hZnRlcihibG9jay0+Yl93aGVuLGppZmZpZXMpKQogCQkJYnJlYWs7Ci0JCWRwcmludGsoIm5sbXN2Y19yZXRyeV9ibG9ja2VkKCVwLCB3aGVuPSVsZCwgZG9uZT0lZClcbiIsCi0JCQlibG9jaywgYmxvY2stPmJfd2hlbiwgYmxvY2stPmJfZG9uZSk7CisJCWRwcmludGsoIm5sbXN2Y19yZXRyeV9ibG9ja2VkKCVwLCB3aGVuPSVsZClcbiIsCisJCQlibG9jaywgYmxvY2stPmJfd2hlbik7CiAJCWtyZWZfZ2V0KCZibG9jay0+Yl9jb3VudCk7Ci0JCWlmIChibG9jay0+Yl9kb25lKQotCQkJbmxtc3ZjX3VubGlua19ibG9jayhibG9jayk7Ci0JCWVsc2UKLQkJCW5sbXN2Y19ncmFudF9ibG9ja2VkKGJsb2NrKTsKKwkJbmxtc3ZjX2dyYW50X2Jsb2NrZWQoYmxvY2spOwogCQlubG1zdmNfcmVsZWFzZV9ibG9jayhibG9jayk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmNzdWJzLmMgYi9mcy9sb2NrZC9zdmNzdWJzLmMKaW5kZXggMmE0ZGY5Yi4uMDFiNGRiOWUgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Y3N1YnMuYworKysgYi9mcy9sb2NrZC9zdmNzdWJzLmMKQEAgLTIzNywxOSArMjM3LDIyIEBACiBubG1fdHJhdmVyc2VfZmlsZXMoc3RydWN0IG5sbV9ob3N0ICpob3N0LCBpbnQgYWN0aW9uKQogewogCXN0cnVjdCBubG1fZmlsZQkqZmlsZSwgKipmcDsKLQlpbnQJCWk7CisJaW50IGksIHJldCA9IDA7CiAKIAltdXRleF9sb2NrKCZubG1fZmlsZV9tdXRleCk7CiAJZm9yIChpID0gMDsgaSA8IEZJTEVfTlJIQVNIOyBpKyspIHsKIAkJZnAgPSBubG1fZmlsZXMgKyBpOwogCQl3aGlsZSAoKGZpbGUgPSAqZnApICE9IE5VTEwpIHsKKwkJCWZpbGUtPmZfY291bnQrKzsKKwkJCW11dGV4X3VubG9jaygmbmxtX2ZpbGVfbXV0ZXgpOworCiAJCQkvKiBUcmF2ZXJzZSBsb2NrcywgYmxvY2tzIGFuZCBzaGFyZXMgb2YgdGhpcyBmaWxlCiAJCQkgKiBhbmQgdXBkYXRlIGZpbGUtPmZfbG9ja3MgY291bnQgKi8KLQkJCWlmIChubG1faW5zcGVjdF9maWxlKGhvc3QsIGZpbGUsIGFjdGlvbikpIHsKLQkJCQltdXRleF91bmxvY2soJm5sbV9maWxlX211dGV4KTsKLQkJCQlyZXR1cm4gMTsKLQkJCX0KKwkJCWlmIChubG1faW5zcGVjdF9maWxlKGhvc3QsIGZpbGUsIGFjdGlvbikpCisJCQkJcmV0ID0gMTsKIAorCQkJbXV0ZXhfbG9jaygmbmxtX2ZpbGVfbXV0ZXgpOworCQkJZmlsZS0+Zl9jb3VudC0tOwogCQkJLyogTm8gbW9yZSByZWZlcmVuY2VzIHRvIHRoaXMgZmlsZS4gTGV0IGdvIG9mIGl0LiAqLwogCQkJaWYgKCFmaWxlLT5mX2Jsb2NrcyAmJiAhZmlsZS0+Zl9sb2NrcwogCQkJICYmICFmaWxlLT5mX3NoYXJlcyAmJiAhZmlsZS0+Zl9jb3VudCkgewpAQCAtMjYyLDcgKzI2NSw3IEBACiAJCX0KIAl9CiAJbXV0ZXhfdW5sb2NrKCZubG1fZmlsZV9tdXRleCk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2xvY2tzLmMgYi9mcy9sb2Nrcy5jCmluZGV4IGIwYjQxYTYuLmQ3YzUzMzkgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tzLmMKKysrIGIvZnMvbG9ja3MuYwpAQCAtMTQyMSw4ICsxNDIxLDkgQEAKIAlpZiAoIWxlYXNlc19lbmFibGUpCiAJCWdvdG8gb3V0OwogCi0JZXJyb3IgPSBsZWFzZV9hbGxvYyhmaWxwLCBhcmcsICZmbCk7Ci0JaWYgKGVycm9yKQorCWVycm9yID0gLUVOT01FTTsKKwlmbCA9IGxvY2tzX2FsbG9jX2xvY2soKTsKKwlpZiAoZmwgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKIAlsb2Nrc19jb3B5X2xvY2soZmwsIGxlYXNlKTsKQEAgLTE0MzAsNiArMTQzMSw3IEBACiAJbG9ja3NfaW5zZXJ0X2xvY2soYmVmb3JlLCBmbCk7CiAKIAkqZmxwID0gZmw7CisJZXJyb3IgPSAwOwogb3V0OgogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jCmluZGV4IDllYTkxYzUuLjMzMGZmOWYgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKKysrIGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtMjA0LDYgKzIwNCw4IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgYnVmZmVyIG1hcCB0byBrZWVwIHRoZSBzdXBlcmJsb2NrIHNtYWxsLgogCSAqLworCWlmIChzYmktPnNfaW1hcF9ibG9ja3MgPT0gMCB8fCBzYmktPnNfem1hcF9ibG9ja3MgPT0gMCkKKwkJZ290byBvdXRfaWxsZWdhbF9zYjsKIAlpID0gKHNiaS0+c19pbWFwX2Jsb2NrcyArIHNiaS0+c196bWFwX2Jsb2NrcykgKiBzaXplb2YoYmgpOwogCW1hcCA9IGttYWxsb2MoaSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtYXApCkBAIC0yNjMsNyArMjY1LDcgQEAKIAogb3V0X25vX2JpdG1hcDoKIAlwcmludGsoIk1JTklYLWZzOiBiYWQgc3VwZXJibG9jayBvciB1bmFibGUgdG8gcmVhZCBiaXRtYXBzXG4iKTsKLSAgICBvdXRfZnJlZW1hcDoKK291dF9mcmVlbWFwOgogCWZvciAoaSA9IDA7IGkgPCBzYmktPnNfaW1hcF9ibG9ja3M7IGkrKykKIAkJYnJlbHNlKHNiaS0+c19pbWFwW2ldKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2JpLT5zX3ptYXBfYmxvY2tzOyBpKyspCkBAIC0yNzYsMTEgKzI3OCwxNiBAQAogCQlwcmludGsoIk1JTklYLWZzOiBjYW4ndCBhbGxvY2F0ZSBtYXBcbiIpOwogCWdvdG8gb3V0X3JlbGVhc2U7CiAKK291dF9pbGxlZ2FsX3NiOgorCWlmICghc2lsZW50KQorCQlwcmludGsoIk1JTklYLWZzOiBiYWQgc3VwZXJibG9ja1xuIik7CisJZ290byBvdXRfcmVsZWFzZTsKKwogb3V0X25vX2ZzOgogCWlmICghc2lsZW50KQogCQlwcmludGsoIlZGUzogQ2FuJ3QgZmluZCBhIE1pbml4IG9yIE1pbml4IFYyIGZpbGVzeXN0ZW0gIgogCQkJIm9uIGRldmljZSAlc1xuIiwgcy0+c19pZCk7Ci0gICAgb3V0X3JlbGVhc2U6CitvdXRfcmVsZWFzZToKIAlicmVsc2UoYmgpOwogCWdvdG8gb3V0OwogCkBAIC0yOTAsNyArMjk3LDcgQEAKIAogb3V0X2JhZF9zYjoKIAlwcmludGsoIk1JTklYLWZzOiB1bmFibGUgdG8gcmVhZCBzdXBlcmJsb2NrXG4iKTsKLSBvdXQ6CitvdXQ6CiAJcy0+c19mc19pbmZvID0gTlVMTDsKIAlrZnJlZShzYmkpOwogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZWkuYyBiL2ZzL25hbWVpLmMKaW5kZXggZTAxMDcwZC4uNDMyZDZiYyAxMDA2NDQKLS0tIGEvZnMvbmFtZWkuYworKysgYi9mcy9uYW1laS5jCkBAIC0xNTksNyArMTU5LDcgQEAKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiB2b2lkIHB1dG5hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQogCQlhdWRpdF9wdXRuYW1lKG5hbWUpOwogCWVsc2UKIAkJX19wdXRuYW1lKG5hbWUpOwpAQCAtMjI3LDEwICsyMjcsMTAgQEAKIAogaW50IHBlcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogeworCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAJaW50IHJldHZhbCwgc3VibWFzazsKIAogCWlmIChtYXNrICYgTUFZX1dSSVRFKSB7Ci0JCXVtb2RlX3QgbW9kZSA9IGlub2RlLT5pX21vZGU7CiAKIAkJLyoKIAkJICogTm9ib2R5IGdldHMgd3JpdGUgYWNjZXNzIHRvIGEgcmVhZC1vbmx5IGZzLgpAQCAtMjQ3LDYgKzI0NywxMyBAQAogCX0KIAogCisJLyoKKwkgKiBNQVlfRVhFQyBvbiByZWd1bGFyIGZpbGVzIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmc6IFdlIG92ZXJyaWRlCisJICogZmlsZXN5c3RlbSBleGVjdXRlIHBlcm1pc3Npb25zIGlmIHRoZSBtb2RlIGJpdHMgYXJlbid0IHNldC4KKwkgKi8KKwlpZiAoKG1hc2sgJiBNQVlfRVhFQykgJiYgU19JU1JFRyhtb2RlKSAmJiAhKG1vZGUgJiBTX0lYVUdPKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAkvKiBPcmRpbmFyeSBwZXJtaXNzaW9uIHJvdXRpbmVzIGRvIG5vdCB1bmRlcnN0YW5kIE1BWV9BUFBFTkQuICovCiAJc3VibWFzayA9IG1hc2sgJiB+TUFZX0FQUEVORDsKIAlpZiAoaW5vZGUtPmlfb3AgJiYgaW5vZGUtPmlfb3AtPnBlcm1pc3Npb24pCkBAIC0xMTI1LDcgKzExMzIsNyBAQAogCXJldHZhbCA9IGxpbmtfcGF0aF93YWxrKG5hbWUsIG5kKTsKIG91dDoKIAlpZiAobGlrZWx5KHJldHZhbCA9PSAwKSkgewotCQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCAmJiBuZCAmJiBuZC0+ZGVudHJ5ICYmCisJCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpICYmIG5kICYmIG5kLT5kZW50cnkgJiYKIAkJCQluZC0+ZGVudHJ5LT5kX2lub2RlKSkKIAkJYXVkaXRfaW5vZGUobmFtZSwgbmQtPmRlbnRyeS0+ZF9pbm9kZSk7CiAJfQpAQCAtMTM1Nyw3ICsxMzY0LDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlCVUdfT04odmljdGltLT5kX3BhcmVudC0+ZF9pbm9kZSAhPSBkaXIpOwotCWF1ZGl0X2lub2RlX2NoaWxkKHZpY3RpbS0+ZF9uYW1lLm5hbWUsIHZpY3RpbS0+ZF9pbm9kZSwgZGlyLT5pX2lubyk7CisJYXVkaXRfaW5vZGVfY2hpbGQodmljdGltLT5kX25hbWUubmFtZSwgdmljdGltLT5kX2lub2RlLCBkaXIpOwogCiAJZXJyb3IgPSBwZXJtaXNzaW9uKGRpcixNQVlfV1JJVEUgfCBNQVlfRVhFQywgTlVMTCk7CiAJaWYgKGVycm9yKQpAQCAtMTY1OSw2ICsxNjY2LDcgQEAKIAkgKiBJdCBhbHJlYWR5IGV4aXN0cy4KIAkgKi8KIAltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJYXVkaXRfaW5vZGVfdXBkYXRlKHBhdGguZGVudHJ5LT5kX2lub2RlKTsKIAogCWVycm9yID0gLUVFWElTVDsKIAlpZiAoZmxhZyAmIE9fRVhDTCkKQEAgLTE2NjksNiArMTY3Nyw3IEBACiAJCWlmIChmbGFnICYgT19OT0ZPTExPVykKIAkJCWdvdG8gZXhpdF9kcHV0OwogCX0KKwogCWVycm9yID0gLUVOT0VOVDsKIAlpZiAoIXBhdGguZGVudHJ5LT5kX2lub2RlKQogCQlnb3RvIGV4aXRfZHB1dDsKQEAgLTE3NjUsNiArMTc3NCw4IEBACiAJaWYgKG5kLT5sYXN0X3R5cGUgIT0gTEFTVF9OT1JNKQogCQlnb3RvIGZhaWw7CiAJbmQtPmZsYWdzICY9IH5MT09LVVBfUEFSRU5UOworCW5kLT5mbGFncyB8PSBMT09LVVBfQ1JFQVRFOworCW5kLT5pbnRlbnQub3Blbi5mbGFncyA9IE9fRVhDTDsKIAogCS8qCiAJICogRG8gdGhlIGZpbmFsIGxvb2t1cC4KZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCBmZWNkM2IwOS4uNzZjYTFjYiAxMDA2NDQKLS0tIGEvZnMvbmZzL2RpcmVjdC5jCisrKyBiL2ZzL25mcy9kaXJlY3QuYwpAQCAtMTAwLDI1ICsxMDAsNiBAQAogCXJldHVybiBhdG9taWNfZGVjX2FuZF90ZXN0KCZkcmVxLT5pb19jb3VudCk7CiB9CiAKLS8qCi0gKiAic2l6ZSIgaXMgbmV2ZXIgbGFyZ2VyIHRoYW4gcnNpemUgb3Igd3NpemUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IG5mc19kaXJlY3RfY291bnRfcGFnZXModW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHNpemVfdCBzaXplKQotewotCWludCBwYWdlX2NvdW50OwotCi0JcGFnZV9jb3VudCA9ICh1c2VyX2FkZHIgKyBzaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQlwYWdlX2NvdW50IC09IHVzZXJfYWRkciA+PiBQQUdFX1NISUZUOwotCUJVR19PTihwYWdlX2NvdW50IDwgMCk7Ci0KLQlyZXR1cm4gcGFnZV9jb3VudDsKLX0KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbmZzX21heF9wYWdlcyh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQlyZXR1cm4gKHNpemUgKyBQQUdFX0NBQ0hFX1NJWkUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwotfQotCiAvKioKICAqIG5mc19kaXJlY3RfSU8gLSBORlMgYWRkcmVzcyBzcGFjZSBvcGVyYXRpb24gZm9yIGRpcmVjdCBJL08KICAqIEBydzogZGlyZWN0aW9uIChyZWFkIG9yIHdyaXRlKQpAQCAtMjc2LDI4ICsyNTcsMjQgQEAKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4ID0gZHJlcS0+Y3R4OwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBjdHgtPmRlbnRyeS0+ZF9pbm9kZTsKIAlzaXplX3QgcnNpemUgPSBORlNfU0VSVkVSKGlub2RlKS0+cnNpemU7Ci0JdW5zaWduZWQgaW50IHJwYWdlcyA9IG5mc19tYXhfcGFnZXMocnNpemUpOwogCXVuc2lnbmVkIGludCBwZ2Jhc2U7CiAJaW50IHJlc3VsdDsKIAlzc2l6ZV90IHN0YXJ0ZWQgPSAwOwogCiAJZ2V0X2RyZXEoZHJlcSk7CiAKLQlwZ2Jhc2UgPSB1c2VyX2FkZHIgJiB+UEFHRV9NQVNLOwogCWRvIHsKIAkJc3RydWN0IG5mc19yZWFkX2RhdGEgKmRhdGE7CiAJCXNpemVfdCBieXRlczsKIAorCQlwZ2Jhc2UgPSB1c2VyX2FkZHIgJiB+UEFHRV9NQVNLOworCQlieXRlcyA9IG1pbihyc2l6ZSxjb3VudCk7CisKIAkJcmVzdWx0ID0gLUVOT01FTTsKLQkJZGF0YSA9IG5mc19yZWFkZGF0YV9hbGxvYyhycGFnZXMpOworCQlkYXRhID0gbmZzX3JlYWRkYXRhX2FsbG9jKHBnYmFzZSArIGJ5dGVzKTsKIAkJaWYgKHVubGlrZWx5KCFkYXRhKSkKIAkJCWJyZWFrOwogCi0JCWJ5dGVzID0gcnNpemU7Ci0JCWlmIChjb3VudCA8IHJzaXplKQotCQkJYnl0ZXMgPSBjb3VudDsKLQotCQlkYXRhLT5ucGFnZXMgPSBuZnNfZGlyZWN0X2NvdW50X3BhZ2VzKHVzZXJfYWRkciwgYnl0ZXMpOwogCQlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCXJlc3VsdCA9IGdldF91c2VyX3BhZ2VzKGN1cnJlbnQsIGN1cnJlbnQtPm1tLCB1c2VyX2FkZHIsCiAJCQkJCWRhdGEtPm5wYWdlcywgMSwgMCwgZGF0YS0+cGFnZXZlYywgTlVMTCk7CkBAIC0zNDQsOCArMzIxLDEwIEBACiAJCXN0YXJ0ZWQgKz0gYnl0ZXM7CiAJCXVzZXJfYWRkciArPSBieXRlczsKIAkJcG9zICs9IGJ5dGVzOworCQkvKiBGSVhNRTogUmVtb3ZlIHRoaXMgdW5uZWNlc3NhcnkgbWF0aCBmcm9tIGZpbmFsIHBhdGNoICovCiAJCXBnYmFzZSArPSBieXRlczsKIAkJcGdiYXNlICY9IH5QQUdFX01BU0s7CisJCUJVR19PTihwZ2Jhc2UgIT0gKHVzZXJfYWRkciAmIH5QQUdFX01BU0spKTsKIAogCQljb3VudCAtPSBieXRlczsKIAl9IHdoaWxlIChjb3VudCAhPSAwKTsKQEAgLTUyNCw3ICs1MDMsNyBAQAogCiBzdGF0aWMgdm9pZCBuZnNfYWxsb2NfY29tbWl0X2RhdGEoc3RydWN0IG5mc19kaXJlY3RfcmVxICpkcmVxKQogewotCWRyZXEtPmNvbW1pdF9kYXRhID0gbmZzX2NvbW1pdF9hbGxvYygwKTsKKwlkcmVxLT5jb21taXRfZGF0YSA9IG5mc19jb21taXRfYWxsb2MoKTsKIAlpZiAoZHJlcS0+Y29tbWl0X2RhdGEgIT0gTlVMTCkKIAkJZHJlcS0+Y29tbWl0X2RhdGEtPnJlcSA9IChzdHJ1Y3QgbmZzX3BhZ2UgKikgZHJlcTsKIH0KQEAgLTYwNSwyOCArNTg0LDI0IEBACiAJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCA9IGRyZXEtPmN0eDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gY3R4LT5kZW50cnktPmRfaW5vZGU7CiAJc2l6ZV90IHdzaXplID0gTkZTX1NFUlZFUihpbm9kZSktPndzaXplOwotCXVuc2lnbmVkIGludCB3cGFnZXMgPSBuZnNfbWF4X3BhZ2VzKHdzaXplKTsKIAl1bnNpZ25lZCBpbnQgcGdiYXNlOwogCWludCByZXN1bHQ7CiAJc3NpemVfdCBzdGFydGVkID0gMDsKIAogCWdldF9kcmVxKGRyZXEpOwogCi0JcGdiYXNlID0gdXNlcl9hZGRyICYgflBBR0VfTUFTSzsKIAlkbyB7CiAJCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YTsKIAkJc2l6ZV90IGJ5dGVzOwogCisJCXBnYmFzZSA9IHVzZXJfYWRkciAmIH5QQUdFX01BU0s7CisJCWJ5dGVzID0gbWluKHdzaXplLGNvdW50KTsKKwogCQlyZXN1bHQgPSAtRU5PTUVNOwotCQlkYXRhID0gbmZzX3dyaXRlZGF0YV9hbGxvYyh3cGFnZXMpOworCQlkYXRhID0gbmZzX3dyaXRlZGF0YV9hbGxvYyhwZ2Jhc2UgKyBieXRlcyk7CiAJCWlmICh1bmxpa2VseSghZGF0YSkpCiAJCQlicmVhazsKIAotCQlieXRlcyA9IHdzaXplOwotCQlpZiAoY291bnQgPCB3c2l6ZSkKLQkJCWJ5dGVzID0gY291bnQ7Ci0KLQkJZGF0YS0+bnBhZ2VzID0gbmZzX2RpcmVjdF9jb3VudF9wYWdlcyh1c2VyX2FkZHIsIGJ5dGVzKTsKIAkJZG93bl9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCQlyZXN1bHQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwgdXNlcl9hZGRyLAogCQkJCQlkYXRhLT5ucGFnZXMsIDAsIDAsIGRhdGEtPnBhZ2V2ZWMsIE5VTEwpOwpAQCAtNjc2LDggKzY1MSwxMSBAQAogCQlzdGFydGVkICs9IGJ5dGVzOwogCQl1c2VyX2FkZHIgKz0gYnl0ZXM7CiAJCXBvcyArPSBieXRlczsKKworCQkvKiBGSVhNRTogUmVtb3ZlIHRoaXMgdXNlbGVzcyBtYXRoIGZyb20gdGhlIGZpbmFsIHBhdGNoICovCiAJCXBnYmFzZSArPSBieXRlczsKIAkJcGdiYXNlICY9IH5QQUdFX01BU0s7CisJCUJVR19PTihwZ2Jhc2UgIT0gKHVzZXJfYWRkciAmIH5QQUdFX01BU0spKTsKIAogCQljb3VudCAtPSBieXRlczsKIAl9IHdoaWxlIChjb3VudCAhPSAwKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9maWxlLmMgYi9mcy9uZnMvZmlsZS5jCmluZGV4IGNjMmI4NzQuLjQ4ZTg5MjggMTAwNjQ0Ci0tLSBhL2ZzL25mcy9maWxlLmMKKysrIGIvZnMvbmZzL2ZpbGUuYwpAQCAtMzEyLDcgKzMxMiwxMyBAQAogCiBzdGF0aWMgaW50IG5mc19yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcCkKIHsKLQlyZXR1cm4gIW5mc193Yl9wYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UpOworCWlmIChnZnAgJiBfX0dGUF9GUykKKwkJcmV0dXJuICFuZnNfd2JfcGFnZShwYWdlLT5tYXBwaW5nLT5ob3N0LCBwYWdlKTsKKwllbHNlCisJCS8qCisJCSAqIEF2b2lkIGRlYWRsb2NrIG9uIG5mc193YWl0X29uX3JlcXVlc3QoKS4KKwkJICovCisJCXJldHVybiAwOwogfQogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIG5mc19maWxlX2FvcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9uZnMvaWRtYXAuYyBiL2ZzL25mcy9pZG1hcC5jCmluZGV4IGI4MWU3ZWQuLjA3YTVkZDUgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pZG1hcC5jCisrKyBiL2ZzL25mcy9pZG1hcC5jCkBAIC0xMzAsOSArMTMwLDcgQEAKIAogCWlmICghaWRtYXApCiAJCXJldHVybjsKLQlkcHV0KGlkbWFwLT5pZG1hcF9kZW50cnkpOwotCWlkbWFwLT5pZG1hcF9kZW50cnkgPSBOVUxMOwotCXJwY191bmxpbmsoaWRtYXAtPmlkbWFwX3BhdGgpOworCXJwY191bmxpbmsoaWRtYXAtPmlkbWFwX2RlbnRyeSk7CiAJY2xwLT5jbF9pZG1hcCA9IE5VTEw7CiAJa2ZyZWUoaWRtYXApOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL25hbWVzcGFjZS5jIGIvZnMvbmZzL25hbWVzcGFjZS5jCmluZGV4IDE5Yjk4Y2EuLjg2YjMxNjkgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uZnMvbmFtZXNwYWNlLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkJbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAkJYnVmbGVuIC09IG5hbWVsZW4gKyAxOwogCQlpZiAoYnVmbGVuIDwgMCkKLQkJCWdvdG8gRWxvbmc7CisJCQlnb3RvIEVsb25nX3VubG9jazsKIAkJZW5kIC09IG5hbWVsZW47CiAJCW1lbWNweShlbmQsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG5hbWVsZW4pOwogCQkqLS1lbmQgPSAnLyc7CkBAIC02OCw2ICs2OCw4IEBACiAJZW5kIC09IG5hbWVsZW47CiAJbWVtY3B5KGVuZCwgYmFzZSwgbmFtZWxlbik7CiAJcmV0dXJuIGVuZDsKK0Vsb25nX3VubG9jazoKKwlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogRWxvbmc6CiAJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CiB9CmRpZmYgLS1naXQgYS9mcy9uZnMvbmZzNHByb2MuYyBiL2ZzL25mcy9uZnM0cHJvYy5jCmluZGV4IGU2ZWU5N2YuLmIxNDE0NWIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0cHJvYy5jCisrKyBiL2ZzL25mcy9uZnM0cHJvYy5jCkBAIC05NzAsNyArOTcwLDcgQEAKIAlzdGF0dXMgPSAtRU5PTUVNOwogCW9wZW5kYXRhID0gbmZzNF9vcGVuZGF0YV9hbGxvYyhkZW50cnksIHNwLCBmbGFncywgc2F0dHIpOwogCWlmIChvcGVuZGF0YSA9PSBOVUxMKQotCQlnb3RvIGVycl9wdXRfc3RhdGVfb3duZXI7CisJCWdvdG8gZXJyX3JlbGVhc2VfcndzZW07CiAKIAlzdGF0dXMgPSBfbmZzNF9wcm9jX29wZW4ob3BlbmRhdGEpOwogCWlmIChzdGF0dXMgIT0gMCkKQEAgLTk4OSwxMSArOTg5LDExIEBACiAJcmV0dXJuIDA7CiBlcnJfb3BlbmRhdGFfZnJlZToKIAluZnM0X29wZW5kYXRhX2ZyZWUob3BlbmRhdGEpOworZXJyX3JlbGVhc2VfcndzZW06CisJdXBfcmVhZCgmY2xwLT5jbF9zZW0pOwogZXJyX3B1dF9zdGF0ZV9vd25lcjoKIAluZnM0X3B1dF9zdGF0ZV9vd25lcihzcCk7CiBvdXRfZXJyOgotCS8qIE5vdGU6IGNscC0+Y2xfc2VtIG11c3QgYmUgcmVsZWFzZWQgYmVmb3JlIG5mczRfcHV0X29wZW5fc3RhdGUoKSEgKi8KLQl1cF9yZWFkKCZjbHAtPmNsX3NlbSk7CiAJKnJlcyA9IE5VTEw7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI2NjgsNyArMjY2OCw3IEBACiAJbmZzNF9zZXRfY2FjaGVkX2FjbChpbm9kZSwgYWNsKTsKIH0KIAotc3RhdGljIGlubGluZSBzc2l6ZV90IG5mczRfZ2V0X2FjbF91bmNhY2hlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCitzdGF0aWMgc3NpemVfdCBfX25mczRfZ2V0X2FjbF91bmNhY2hlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2VzW05GUzRBQ0xfTUFYUEFHRVNdOwogCXN0cnVjdCBuZnNfZ2V0YWNsYXJncyBhcmdzID0gewpAQCAtMjcyMSw2ICsyNzIxLDE5IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgbmZzNF9nZXRfYWNsX3VuY2FjaGVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OworCXNzaXplX3QgcmV0OworCWRvIHsKKwkJcmV0ID0gX19uZnM0X2dldF9hY2xfdW5jYWNoZWQoaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKKwkJaWYgKHJldCA+PSAwKQorCQkJYnJlYWs7CisJCXJldCA9IG5mczRfaGFuZGxlX2V4Y2VwdGlvbihORlNfU0VSVkVSKGlub2RlKSwgcmV0LCAmZXhjZXB0aW9uKTsKKwl9IHdoaWxlIChleGNlcHRpb24ucmV0cnkpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IG5mczRfcHJvY19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKIHsKIAlzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyID0gTkZTX1NFUlZFUihpbm9kZSk7CkBAIC0yNzM3LDcgKzI3NTAsNyBAQAogCXJldHVybiBuZnM0X2dldF9hY2xfdW5jYWNoZWQoaW5vZGUsIGJ1ZiwgYnVmbGVuKTsKIH0KIAotc3RhdGljIGludCBuZnM0X3Byb2Nfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4pCitzdGF0aWMgaW50IF9fbmZzNF9wcm9jX3NldF9hY2woc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuKQogewogCXN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIgPSBORlNfU0VSVkVSKGlub2RlKTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZXNbTkZTNEFDTF9NQVhQQUdFU107CkBAIC0yNzYzLDYgKzI3NzYsMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG5mczRfcHJvY19zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwlzdHJ1Y3QgbmZzNF9leGNlcHRpb24gZXhjZXB0aW9uID0geyB9OworCWludCBlcnI7CisJZG8geworCQllcnIgPSBuZnM0X2hhbmRsZV9leGNlcHRpb24oTkZTX1NFUlZFUihpbm9kZSksCisJCQkJX19uZnM0X3Byb2Nfc2V0X2FjbChpbm9kZSwgYnVmLCBidWZsZW4pLAorCQkJCSZleGNlcHRpb24pOworCX0gd2hpbGUgKGV4Y2VwdGlvbi5yZXRyeSk7CisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludAogbmZzNF9hc3luY19oYW5kbGVfZXJyb3Ioc3RydWN0IHJwY190YXNrICp0YXNrLCBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQogewpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggMTc1MGQ5OS4uNzMwZWM4ZiAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC0zMzU1LDcgKzMzNTUsNyBAQAogCXN0cnVjdCBrdmVjCSppb3YgPSByY3ZidWYtPmhlYWQ7CiAJdW5zaWduZWQgaW50CW5yLCBwZ2xlbiA9IHJjdmJ1Zi0+cGFnZV9sZW47CiAJdWludDMyX3QJKmVuZCwgKmVudHJ5LCAqcCwgKmthZGRyOwotCXVpbnQzMl90CWxlbiwgYXR0cmxlbjsKKwl1aW50MzJfdAlsZW4sIGF0dHJsZW4sIHhsZW47CiAJaW50IAkJaGRybGVuLCByZWN2ZCwgc3RhdHVzOwogCiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHIsIE9QX1JFQURESVIpOwpAQCAtMzM3NywxMCArMzM3NywxMCBAQAogCiAJQlVHX09OKHBnbGVuICsgcmVhZGRpci0+cGdiYXNlID4gUEFHRV9DQUNIRV9TSVpFKTsKIAlrYWRkciA9IHAgPSAodWludDMyX3QgKikga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCWVuZCA9ICh1aW50MzJfdCAqKSAoKGNoYXIgKilwICsgcGdsZW4gKyByZWFkZGlyLT5wZ2Jhc2UpOworCWVuZCA9IHAgKyAoKHBnbGVuICsgcmVhZGRpci0+cGdiYXNlKSA+PiAyKTsKIAllbnRyeSA9IHA7CiAJZm9yIChuciA9IDA7ICpwKys7IG5yKyspIHsKLQkJaWYgKHAgKyAzID4gZW5kKQorCQlpZiAoZW5kIC0gcCA8IDMpCiAJCQlnb3RvIHNob3J0X3BrdDsKIAkJZHByaW50aygiY29va2llID0gJUx1LCAiLCAqKCh1bnNpZ25lZCBsb25nIGxvbmcgKilwKSk7CiAJCXAgKz0gMjsJCQkvKiBjb29raWUgKi8KQEAgLTMzODksMTggKzMzODksMTkgQEAKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5GUzogZ2lhbnQgZmlsZW5hbWUgaW4gcmVhZGRpciAobGVuIDB4JXgpXG4iLCBsZW4pOwogCQkJZ290byBlcnJfdW5tYXA7CiAJCX0KKwkJeGxlbiA9IFhEUl9RVUFETEVOKGxlbik7CisJCWlmIChlbmQgLSBwIDwgeGxlbiArIDEpCisJCQlnb3RvIHNob3J0X3BrdDsKIAkJZHByaW50aygiZmlsZW5hbWUgPSAlKnNcbiIsIGxlbiwgKGNoYXIgKilwKTsKLQkJcCArPSBYRFJfUVVBRExFTihsZW4pOwotCQlpZiAocCArIDEgPiBlbmQpCi0JCQlnb3RvIHNob3J0X3BrdDsKKwkJcCArPSB4bGVuOwogCQlsZW4gPSBudG9obCgqcCsrKTsJLyogYml0bWFwIGxlbmd0aCAqLworCQlpZiAoZW5kIC0gcCA8IGxlbiArIDEpCisJCQlnb3RvIHNob3J0X3BrdDsKIAkJcCArPSBsZW47Ci0JCWlmIChwICsgMSA+IGVuZCkKLQkJCWdvdG8gc2hvcnRfcGt0OwogCQlhdHRybGVuID0gWERSX1FVQURMRU4obnRvaGwoKnArKykpOwotCQlwICs9IGF0dHJsZW47CQkvKiBhdHRyaWJ1dGVzICovCi0JCWlmIChwICsgMiA+IGVuZCkKKwkJaWYgKGVuZCAtIHAgPCBhdHRybGVuICsgMikKIAkJCWdvdG8gc2hvcnRfcGt0OworCQlwICs9IGF0dHJsZW47CQkvKiBhdHRyaWJ1dGVzICovCiAJCWVudHJ5ID0gcDsKIAl9CiAJaWYgKCFuciAmJiAoZW50cnlbMF0gIT0gMCB8fCBlbnRyeVsxXSA9PSAwKSkKZGlmZiAtLWdpdCBhL2ZzL25mcy9yZWFkLmMgYi9mcy9uZnMvcmVhZC5jCmluZGV4IDUyYmY2MzQuLmYwYWZmODIgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9yZWFkLmMKKysrIGIvZnMvbmZzL3JlYWQuYwpAQCAtNDMsMTMgKzQzLDE1IEBACiAKICNkZWZpbmUgTUlOX1BPT0xfUkVBRAkoMzIpCiAKLXN0cnVjdCBuZnNfcmVhZF9kYXRhICpuZnNfcmVhZGRhdGFfYWxsb2ModW5zaWduZWQgaW50IHBhZ2Vjb3VudCkKK3N0cnVjdCBuZnNfcmVhZF9kYXRhICpuZnNfcmVhZGRhdGFfYWxsb2Moc2l6ZV90IGxlbikKIHsKKwl1bnNpZ25lZCBpbnQgcGFnZWNvdW50ID0gKGxlbiArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CiAJc3RydWN0IG5mc19yZWFkX2RhdGEgKnAgPSBtZW1wb29sX2FsbG9jKG5mc19yZGF0YV9tZW1wb29sLCBTTEFCX05PRlMpOwogCiAJaWYgKHApIHsKIAkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwogCQlJTklUX0xJU1RfSEVBRCgmcC0+cGFnZXMpOworCQlwLT5ucGFnZXMgPSBwYWdlY291bnQ7CiAJCWlmIChwYWdlY291bnQgPD0gQVJSQVlfU0laRShwLT5wYWdlX2FycmF5KSkKIAkJCXAtPnBhZ2V2ZWMgPSBwLT5wYWdlX2FycmF5OwogCQllbHNlIHsKQEAgLTYzLDcgKzY1LDcgQEAKIAlyZXR1cm4gcDsKIH0KIAotdm9pZCBuZnNfcmVhZGRhdGFfZnJlZShzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqcCkKK3N0YXRpYyB2b2lkIG5mc19yZWFkZGF0YV9mcmVlKHN0cnVjdCBuZnNfcmVhZF9kYXRhICpwKQogewogCWlmIChwICYmIChwLT5wYWdldmVjICE9ICZwLT5wYWdlX2FycmF5WzBdKSkKIAkJa2ZyZWUocC0+cGFnZXZlYyk7CkBAIC0xMTYsMTAgKzExOCwxNyBAQAogCXBhZ2VzID0gJmRhdGEtPmFyZ3MucGFnZXNbYmFzZSA+PiBQQUdFX0NBQ0hFX1NISUZUXTsKIAliYXNlICY9IH5QQUdFX0NBQ0hFX01BU0s7CiAJcGdsZW4gPSBQQUdFX0NBQ0hFX1NJWkUgLSBiYXNlOwotCWlmIChwZ2xlbiA8IHJlbWFpbmRlcikKKwlmb3IgKDs7KSB7CisJCWlmIChyZW1haW5kZXIgPD0gcGdsZW4pIHsKKwkJCW1lbWNsZWFyX2hpZ2hwYWdlX2ZsdXNoKCpwYWdlcywgYmFzZSwgcmVtYWluZGVyKTsKKwkJCWJyZWFrOworCQl9CiAJCW1lbWNsZWFyX2hpZ2hwYWdlX2ZsdXNoKCpwYWdlcywgYmFzZSwgcGdsZW4pOwotCWVsc2UKLQkJbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2goKnBhZ2VzLCBiYXNlLCByZW1haW5kZXIpOworCQlwYWdlcysrOworCQlyZW1haW5kZXIgLT0gcGdsZW47CisJCXBnbGVuID0gUEFHRV9DQUNIRV9TSVpFOworCQliYXNlID0gMDsKKwl9CiB9CiAKIC8qCkBAIC0xMzMsNyArMTQyLDcgQEAKIAlpbnQJCXJlc3VsdDsKIAlzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqcmRhdGE7CiAKLQlyZGF0YSA9IG5mc19yZWFkZGF0YV9hbGxvYygxKTsKKwlyZGF0YSA9IG5mc19yZWFkZGF0YV9hbGxvYyhjb3VudCk7CiAJaWYgKCFyZGF0YSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5NSw5ICsyMDQsMTEgQEAKIAlORlNfSShpbm9kZSktPmNhY2hlX3ZhbGlkaXR5IHw9IE5GU19JTk9fSU5WQUxJRF9BVElNRTsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAKLQluZnNfcmVhZHBhZ2VfdHJ1bmNhdGVfdW5pbml0aWFsaXNlZF9wYWdlKHJkYXRhKTsKLQlpZiAocmRhdGEtPnJlcy5lb2YgfHwgcmRhdGEtPnJlcy5jb3VudCA9PSByZGF0YS0+YXJncy5jb3VudCkKKwlpZiAocmRhdGEtPnJlcy5lb2YgfHwgcmRhdGEtPnJlcy5jb3VudCA9PSByZGF0YS0+YXJncy5jb3VudCkgewogCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCWlmIChyZGF0YS0+cmVzLmVvZiAmJiBjb3VudCAhPSAwKQorCQkJbWVtY2xlYXJfaGlnaHBhZ2VfZmx1c2gocGFnZSwgcmRhdGEtPmFyZ3MucGdiYXNlLCBjb3VudCk7CisJfQogCXJlc3VsdCA9IDA7CiAKIGlvX2Vycm9yOgpAQCAtMzI5LDI1ICszNDAsMjUgQEAKIAlzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSA9IG5mc19saXN0X2VudHJ5KGhlYWQtPm5leHQpOwogCXN0cnVjdCBwYWdlICpwYWdlID0gcmVxLT53Yl9wYWdlOwogCXN0cnVjdCBuZnNfcmVhZF9kYXRhICpkYXRhOwotCXVuc2lnbmVkIGludCByc2l6ZSA9IE5GU19TRVJWRVIoaW5vZGUpLT5yc2l6ZTsKLQl1bnNpZ25lZCBpbnQgbmJ5dGVzLCBvZmZzZXQ7CisJc2l6ZV90IHJzaXplID0gTkZTX1NFUlZFUihpbm9kZSktPnJzaXplLCBuYnl0ZXM7CisJdW5zaWduZWQgaW50IG9mZnNldDsKIAlpbnQgcmVxdWVzdHMgPSAwOwogCUxJU1RfSEVBRChsaXN0KTsKIAogCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7CiAKIAluYnl0ZXMgPSByZXEtPndiX2J5dGVzOwotCWZvcig7OykgewotCQlkYXRhID0gbmZzX3JlYWRkYXRhX2FsbG9jKDEpOworCWRvIHsKKwkJc2l6ZV90IGxlbiA9IG1pbihuYnl0ZXMscnNpemUpOworCisJCWRhdGEgPSBuZnNfcmVhZGRhdGFfYWxsb2MobGVuKTsKIAkJaWYgKCFkYXRhKQogCQkJZ290byBvdXRfYmFkOwogCQlJTklUX0xJU1RfSEVBRCgmZGF0YS0+cGFnZXMpOwogCQlsaXN0X2FkZCgmZGF0YS0+cGFnZXMsICZsaXN0KTsKIAkJcmVxdWVzdHMrKzsKLQkJaWYgKG5ieXRlcyA8PSByc2l6ZSkKLQkJCWJyZWFrOwotCQluYnl0ZXMgLT0gcnNpemU7Ci0JfQorCQluYnl0ZXMgLT0gbGVuOworCX0gd2hpbGUobmJ5dGVzICE9IDApOwogCWF0b21pY19zZXQoJnJlcS0+d2JfY29tcGxldGUsIHJlcXVlc3RzKTsKIAogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwpAQCAtMzk1LDcgKzQwNiw3IEBACiAJaWYgKE5GU19TRVJWRVIoaW5vZGUpLT5yc2l6ZSA8IFBBR0VfQ0FDSEVfU0laRSkKIAkJcmV0dXJuIG5mc19wYWdlaW5fbXVsdGkoaGVhZCwgaW5vZGUpOwogCi0JZGF0YSA9IG5mc19yZWFkZGF0YV9hbGxvYyhORlNfU0VSVkVSKGlub2RlKS0+cnBhZ2VzKTsKKwlkYXRhID0gbmZzX3JlYWRkYXRhX2FsbG9jKE5GU19TRVJWRVIoaW5vZGUpLT5yc2l6ZSk7CiAJaWYgKCFkYXRhKQogCQlnb3RvIG91dF9iYWQ7CiAKQEAgLTQ3Niw2ICs0ODcsOCBAQAogCXVuc2lnbmVkIGludCBiYXNlID0gZGF0YS0+YXJncy5wZ2Jhc2U7CiAJc3RydWN0IHBhZ2UgKipwYWdlczsKIAorCWlmIChkYXRhLT5yZXMuZW9mKQorCQljb3VudCA9IGRhdGEtPmFyZ3MuY291bnQ7CiAJaWYgKHVubGlrZWx5KGNvdW50ID09IDApKQogCQlyZXR1cm47CiAJcGFnZXMgPSAmZGF0YS0+YXJncy5wYWdlc1tiYXNlID4+IFBBR0VfQ0FDSEVfU0hJRlRdOwpAQCAtNDgzLDExICs0OTYsNyBAQAogCWNvdW50ICs9IGJhc2U7CiAJZm9yICg7Y291bnQgPj0gUEFHRV9DQUNIRV9TSVpFOyBjb3VudCAtPSBQQUdFX0NBQ0hFX1NJWkUsIHBhZ2VzKyspCiAJCVNldFBhZ2VVcHRvZGF0ZSgqcGFnZXMpOwotCS8qCi0JICogV2FzIHRoaXMgYW4gZW9mIG9yIGEgc2hvcnQgcmVhZD8gSWYgdGhlIGxhdHRlciwgZG9uJ3QgbWFyayB0aGUgcGFnZQotCSAqIGFzIHVwdG9kYXRlIHlldC4KLQkgKi8KLQlpZiAoY291bnQgPiAwICYmIChkYXRhLT5yZXMuZW9mIHx8IGRhdGEtPmFyZ3MuY291bnQgPT0gZGF0YS0+cmVzLmNvdW50KSkKKwlpZiAoY291bnQgIT0gMCkKIAkJU2V0UGFnZVVwdG9kYXRlKCpwYWdlcyk7CiB9CiAKQEAgLTUwMiw2ICs1MTEsOCBAQAogCWNvdW50ICs9IGJhc2U7CiAJZm9yICg7Y291bnQgPj0gUEFHRV9DQUNIRV9TSVpFOyBjb3VudCAtPSBQQUdFX0NBQ0hFX1NJWkUsIHBhZ2VzKyspCiAJCVNldFBhZ2VFcnJvcigqcGFnZXMpOworCWlmIChjb3VudCAhPSAwKQorCQlTZXRQYWdlRXJyb3IoKnBhZ2VzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggODZiYWM2YS4uNzA4NGFjOSAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTkwLDIyICs5MCwxMyBAQAogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQobmZzX3dyaXRlX2Nvbmdlc3Rpb24pOwogCi1zdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKm5mc19jb21taXRfYWxsb2ModW5zaWduZWQgaW50IHBhZ2Vjb3VudCkKK3N0cnVjdCBuZnNfd3JpdGVfZGF0YSAqbmZzX2NvbW1pdF9hbGxvYyh2b2lkKQogewogCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqcCA9IG1lbXBvb2xfYWxsb2MobmZzX2NvbW1pdF9tZW1wb29sLCBTTEFCX05PRlMpOwogCiAJaWYgKHApIHsKIAkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwogCQlJTklUX0xJU1RfSEVBRCgmcC0+cGFnZXMpOwotCQlpZiAocGFnZWNvdW50IDw9IEFSUkFZX1NJWkUocC0+cGFnZV9hcnJheSkpCi0JCQlwLT5wYWdldmVjID0gcC0+cGFnZV9hcnJheTsKLQkJZWxzZSB7Ci0JCQlwLT5wYWdldmVjID0ga2NhbGxvYyhwYWdlY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX05PRlMpOwotCQkJaWYgKCFwLT5wYWdldmVjKSB7Ci0JCQkJbWVtcG9vbF9mcmVlKHAsIG5mc19jb21taXRfbWVtcG9vbCk7Ci0JCQkJcCA9IE5VTEw7Ci0JCQl9Ci0JCX0KIAl9CiAJcmV0dXJuIHA7CiB9CkBAIC0xMTcsMTMgKzEwOCwxNSBAQAogCW1lbXBvb2xfZnJlZShwLCBuZnNfY29tbWl0X21lbXBvb2wpOwogfQogCi1zdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKm5mc193cml0ZWRhdGFfYWxsb2ModW5zaWduZWQgaW50IHBhZ2Vjb3VudCkKK3N0cnVjdCBuZnNfd3JpdGVfZGF0YSAqbmZzX3dyaXRlZGF0YV9hbGxvYyhzaXplX3QgbGVuKQogeworCXVuc2lnbmVkIGludCBwYWdlY291bnQgPSAobGVuICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKIAlzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKnAgPSBtZW1wb29sX2FsbG9jKG5mc193ZGF0YV9tZW1wb29sLCBTTEFCX05PRlMpOwogCiAJaWYgKHApIHsKIAkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwogCQlJTklUX0xJU1RfSEVBRCgmcC0+cGFnZXMpOworCQlwLT5ucGFnZXMgPSBwYWdlY291bnQ7CiAJCWlmIChwYWdlY291bnQgPD0gQVJSQVlfU0laRShwLT5wYWdlX2FycmF5KSkKIAkJCXAtPnBhZ2V2ZWMgPSBwLT5wYWdlX2FycmF5OwogCQllbHNlIHsKQEAgLTEzNyw3ICsxMzAsNyBAQAogCXJldHVybiBwOwogfQogCi12b2lkIG5mc193cml0ZWRhdGFfZnJlZShzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKnApCitzdGF0aWMgdm9pZCBuZnNfd3JpdGVkYXRhX2ZyZWUoc3RydWN0IG5mc193cml0ZV9kYXRhICpwKQogewogCWlmIChwICYmIChwLT5wYWdldmVjICE9ICZwLT5wYWdlX2FycmF5WzBdKSkKIAkJa2ZyZWUocC0+cGFnZXZlYyk7CkBAIC0yMDgsNyArMjAxLDcgQEAKIAlpbnQJCXJlc3VsdCwgd3JpdHRlbiA9IDA7CiAJc3RydWN0IG5mc193cml0ZV9kYXRhICp3ZGF0YTsKIAotCXdkYXRhID0gbmZzX3dyaXRlZGF0YV9hbGxvYygxKTsKKwl3ZGF0YSA9IG5mc193cml0ZWRhdGFfYWxsb2Mod3NpemUpOwogCWlmICghd2RhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCkBAIC01OTcsOCArNTkwLDggQEAKIAkJcmVxID0gbmZzX2xpc3RfZW50cnkoaGVhZC0+bmV4dCk7CiAJCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7CiAJCW5mc19pbm9kZV9yZW1vdmVfcmVxdWVzdChyZXEpOwotCQluZnNfY2xlYXJfcGFnZV93cml0ZWJhY2socmVxKTsKIAkJZGVjX3pvbmVfcGFnZV9zdGF0ZShyZXEtPndiX3BhZ2UsIE5SX1VOU1RBQkxFX05GUyk7CisJCW5mc19jbGVhcl9wYWdlX3dyaXRlYmFjayhyZXEpOwogCX0KIH0KIApAQCAtOTk5LDI0ICs5OTIsMjQgQEAKIAlzdHJ1Y3QgbmZzX3BhZ2UgKnJlcSA9IG5mc19saXN0X2VudHJ5KGhlYWQtPm5leHQpOwogCXN0cnVjdCBwYWdlICpwYWdlID0gcmVxLT53Yl9wYWdlOwogCXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YTsKLQl1bnNpZ25lZCBpbnQgd3NpemUgPSBORlNfU0VSVkVSKGlub2RlKS0+d3NpemU7Ci0JdW5zaWduZWQgaW50IG5ieXRlcywgb2Zmc2V0OworCXNpemVfdCB3c2l6ZSA9IE5GU19TRVJWRVIoaW5vZGUpLT53c2l6ZSwgbmJ5dGVzOworCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJaW50IHJlcXVlc3RzID0gMDsKIAlMSVNUX0hFQUQobGlzdCk7CiAKIAluZnNfbGlzdF9yZW1vdmVfcmVxdWVzdChyZXEpOwogCiAJbmJ5dGVzID0gcmVxLT53Yl9ieXRlczsKLQlmb3IgKDs7KSB7Ci0JCWRhdGEgPSBuZnNfd3JpdGVkYXRhX2FsbG9jKDEpOworCWRvIHsKKwkJc2l6ZV90IGxlbiA9IG1pbihuYnl0ZXMsIHdzaXplKTsKKworCQlkYXRhID0gbmZzX3dyaXRlZGF0YV9hbGxvYyhsZW4pOwogCQlpZiAoIWRhdGEpCiAJCQlnb3RvIG91dF9iYWQ7CiAJCWxpc3RfYWRkKCZkYXRhLT5wYWdlcywgJmxpc3QpOwogCQlyZXF1ZXN0cysrOwotCQlpZiAobmJ5dGVzIDw9IHdzaXplKQotCQkJYnJlYWs7Ci0JCW5ieXRlcyAtPSB3c2l6ZTsKLQl9CisJCW5ieXRlcyAtPSBsZW47CisJfSB3aGlsZSAobmJ5dGVzICE9IDApOwogCWF0b21pY19zZXQoJnJlcS0+d2JfY29tcGxldGUsIHJlcXVlc3RzKTsKIAogCUNsZWFyUGFnZUVycm9yKHBhZ2UpOwpAQCAtMTA3MCw3ICsxMDYzLDcgQEAKIAlzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEJKmRhdGE7CiAJdW5zaWduZWQgaW50CQljb3VudDsKIAotCWRhdGEgPSBuZnNfd3JpdGVkYXRhX2FsbG9jKE5GU19TRVJWRVIoaW5vZGUpLT53cGFnZXMpOworCWRhdGEgPSBuZnNfd3JpdGVkYXRhX2FsbG9jKE5GU19TRVJWRVIoaW5vZGUpLT53c2l6ZSk7CiAJaWYgKCFkYXRhKQogCQlnb3RvIG91dF9iYWQ7CiAKQEAgLTEzNzgsNyArMTM3MSw3IEBACiAJc3RydWN0IG5mc193cml0ZV9kYXRhCSpkYXRhOwogCXN0cnVjdCBuZnNfcGFnZSAgICAgICAgICpyZXE7CiAKLQlkYXRhID0gbmZzX2NvbW1pdF9hbGxvYyhORlNfU0VSVkVSKGlub2RlKS0+d3BhZ2VzKTsKKwlkYXRhID0gbmZzX2NvbW1pdF9hbGxvYygpOwogCiAJaWYgKCFkYXRhKQogCQlnb3RvIG91dF9iYWQ7CkBAIC0xMzkzLDggKzEzODYsOCBAQAogCQlyZXEgPSBuZnNfbGlzdF9lbnRyeShoZWFkLT5uZXh0KTsKIAkJbmZzX2xpc3RfcmVtb3ZlX3JlcXVlc3QocmVxKTsKIAkJbmZzX21hcmtfcmVxdWVzdF9jb21taXQocmVxKTsKLQkJbmZzX2NsZWFyX3BhZ2Vfd3JpdGViYWNrKHJlcSk7CiAJCWRlY196b25lX3BhZ2Vfc3RhdGUocmVxLT53Yl9wYWdlLCBOUl9VTlNUQUJMRV9ORlMpOworCQluZnNfY2xlYXJfcGFnZV93cml0ZWJhY2socmVxKTsKIAl9CiAJcmV0dXJuIC1FTk9NRU07CiB9CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRyZWNvdmVyLmMgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKaW5kZXggMDZkYTc1MC4uZTM1ZDdlNSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCisrKyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwpAQCAtMzMsNyArMzMsNyBAQAogKgogKi8KIAotCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc3VucnBjL3N2Yy5oPgogI2luY2x1ZGUgPGxpbnV4L25mc2QvbmZzZC5oPgogI2luY2x1ZGUgPGxpbnV4L25mczQuaD4KQEAgLTg3LDM0ICs4NywzNSBAQAogbmZzNF9tYWtlX3JlY19jbGlkbmFtZShjaGFyICpkbmFtZSwgc3RydWN0IHhkcl9uZXRvYmogKmNsbmFtZSkKIHsKIAlzdHJ1Y3QgeGRyX25ldG9iaiBja3N1bTsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CiAJaW50IHN0YXR1cyA9IG5mc2Vycl9yZXNvdXJjZTsKIAogCWRwcmludGsoIk5GU0Q6IG5mczRfbWFrZV9yZWNfY2xpZG5hbWUgZm9yICUuKnNcbiIsCiAJCQljbG5hbWUtPmxlbiwgY2xuYW1lLT5kYXRhKTsKLQl0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKCJtZDUiLCBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVApOwotCWlmICh0Zm0gPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0JY2tzdW0ubGVuID0gY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZSh0Zm0pOworCWRlc2MuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7CisJZGVzYy50Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaCgibWQ1IiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihkZXNjLnRmbSkpCisJCWdvdG8gb3V0X25vX3RmbTsKKwlja3N1bS5sZW4gPSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGRlc2MudGZtKTsKIAlja3N1bS5kYXRhID0ga21hbGxvYyhja3N1bS5sZW4sIEdGUF9LRVJORUwpOwogCWlmIChja3N1bS5kYXRhID09IE5VTEwpCiAgCQlnb3RvIG91dDsKLQljcnlwdG9fZGlnZXN0X2luaXQodGZtKTsKIAogCXNnWzBdLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UoY2xuYW1lLT5kYXRhKTsKIAlzZ1swXS5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShjbG5hbWUtPmRhdGEpOwogCXNnWzBdLmxlbmd0aCA9IGNsbmFtZS0+bGVuOwogCi0JY3J5cHRvX2RpZ2VzdF91cGRhdGUodGZtLCBzZywgMSk7Ci0JY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIGNrc3VtLmRhdGEpOworCWlmIChjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsIHNnLCBzZy0+bGVuZ3RoLCBja3N1bS5kYXRhKSkKKwkJZ290byBvdXQ7CiAKIAltZDVfdG9faGV4KGRuYW1lLCBja3N1bS5kYXRhKTsKIAogCWtmcmVlKGNrc3VtLmRhdGEpOwogCXN0YXR1cyA9IG5mc19vazsKIG91dDoKLQljcnlwdG9fZnJlZV90Zm0odGZtKTsKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKK291dF9ub190Zm06CiAJcmV0dXJuIHN0YXR1czsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNmaC5jIGIvZnMvbmZzZC9uZnNmaC5jCmluZGV4IGVjYzQzOWQuLjUwMWQ4MzggMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzZmguYworKysgYi9mcy9uZnNkL25mc2ZoLmMKQEAgLTE4Nyw2ICsxODcsMTEgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKKwkJLyogU2V0IHVzZXIgY3JlZHMgZm9yIHRoaXMgZXhwb3J0cG9pbnQgKi8KKwkJZXJyb3IgPSBuZnNlcnJubyhuZnNkX3NldHVzZXIocnFzdHAsIGV4cCkpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dDsKKwogCQkvKgogCQkgKiBMb29rIHVwIHRoZSBkZW50cnkgdXNpbmcgdGhlIE5GUyBmaWxlIGhhbmRsZS4KIAkJICovCkBAIC0yNDEsMTYgKzI0NiwxNyBAQAogCQlkcHJpbnRrKCJuZnNkOiBmaF92ZXJpZnkgLSBqdXN0IGNoZWNraW5nXG4iKTsKIAkJZGVudHJ5ID0gZmhwLT5maF9kZW50cnk7CiAJCWV4cCA9IGZocC0+ZmhfZXhwb3J0OworCQkvKiBTZXQgdXNlciBjcmVkcyBmb3IgdGhpcyBleHBvcnRwb2ludDsgbmVjZXNzYXJ5IGV2ZW4KKwkJICogaW4gdGhlICJqdXN0IGNoZWNraW5nIiBjYXNlIGJlY2F1c2UgdGhpcyBtYXkgYmUgYQorCQkgKiBmaWxlaGFuZGxlIHRoYXQgd2FzIGNyZWF0ZWQgYnkgZmhfY29tcG9zZSwgYW5kIHRoYXQKKwkJICogaXMgYWJvdXQgdG8gYmUgdXNlZCBpbiBhbm90aGVyIG5mc3Y0IGNvbXBvdW5kCisJCSAqIG9wZXJhdGlvbiAqLworCQllcnJvciA9IG5mc2Vycm5vKG5mc2Rfc2V0dXNlcihycXN0cCwgZXhwKSk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0OwogCX0KIAljYWNoZV9nZXQoJmV4cC0+aCk7CiAKLQkvKiBTZXQgdXNlciBjcmVkcyBmb3IgdGhpcyBleHBvcnRwb2ludDsgbmVjZXNzYXJ5IGV2ZW4gaW4gdGhlICJqdXN0Ci0JICogY2hlY2tpbmciIGNhc2UgYmVjYXVzZSB0aGlzIG1heSBiZSBhIGZpbGVoYW5kbGUgdGhhdCB3YXMgY3JlYXRlZCBieQotCSAqIGZoX2NvbXBvc2UsIGFuZCB0aGF0IGlzIGFib3V0IHRvIGJlIHVzZWQgaW4gYW5vdGhlciBuZnN2NCBjb21wb3VuZAotCSAqIG9wZXJhdGlvbiAqLwotCWVycm9yID0gbmZzZXJybm8obmZzZF9zZXR1c2VyKHJxc3RwLCBleHApKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwogCiAJZXJyb3IgPSBuZnNkX21vZGVfY2hlY2socnFzdHAsIGRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlLCB0eXBlKTsKIAlpZiAoZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9NYWtlZmlsZSBiL2ZzL29jZnMyL01ha2VmaWxlCmluZGV4IDdkM2JlODQuLjlmYjgxMzJmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQAogCWZpbGUubyAJCQlcCiAJaGVhcnRiZWF0Lm8gCQlcCiAJaW5vZGUubyAJCVwKKwlpb2N0bC5vIAkJXAogCWpvdXJuYWwubyAJCVwKIAlsb2NhbGFsbG9jLm8gCQlcCiAJbW1hcC5vIAkJCVwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IGVkYWFiMDUuLmY0M2JjNWYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtMTcxNywxNyArMTcxNywyOSBAQAogCiAJCQlvY2ZzMl9yZW1vdmVfZnJvbV9jYWNoZShpbm9kZSwgZWJfYmgpOwogCi0JCQlCVUdfT04oZWItPmhfc3ViYWxsb2Nfc2xvdCk7CiAJCQlCVUdfT04oZWwtPmxfcmVjc1swXS5lX2NsdXN0ZXJzKTsKIAkJCUJVR19PTihlbC0+bF9yZWNzWzBdLmVfY3Bvcyk7CiAJCQlCVUdfT04oZWwtPmxfcmVjc1swXS5lX2Jsa25vKTsKLQkJCXN0YXR1cyA9IG9jZnMyX2ZyZWVfZXh0ZW50X2Jsb2NrKGhhbmRsZSwKLQkJCQkJCQkgdGMtPnRjX2V4dF9hbGxvY19pbm9kZSwKLQkJCQkJCQkgdGMtPnRjX2V4dF9hbGxvY19iaCwKLQkJCQkJCQkgZWIpOwotCQkJaWYgKHN0YXR1cyA8IDApIHsKLQkJCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCQkJZ290byBiYWlsOworCQkJaWYgKGViLT5oX3N1YmFsbG9jX3Nsb3QgPT0gMCkgeworCQkJCS8qCisJCQkJICogVGhpcyBjb2RlIG9ubHkgdW5kZXJzdGFuZHMgaG93IHRvCisJCQkJICogbG9jayB0aGUgc3ViYWxsb2NhdG9yIGluIHNsb3QgMCwKKwkJCQkgKiB3aGljaCBpcyBmaW5lIGJlY2F1c2UgYWxsb2NhdGlvbiBpcworCQkJCSAqIG9ubHkgZXZlciBkb25lIG91dCBvZiB0aGF0CisJCQkJICogc3ViYWxsb2NhdG9yIHRvby4gQSBmdXR1cmUgdmVyc2lvbgorCQkJCSAqIG1pZ2h0IGNoYW5nZSB0aGF0IGhvd2V2ZXIsIHNvIGF2b2lkCisJCQkJICogYSBmcmVlIGlmIHdlIGRvbid0IGtub3cgaG93IHRvCisJCQkJICogaGFuZGxlIGl0LiBUaGlzIHdheSBhbiBmcyBpbmNvbXBhdAorCQkJCSAqIGJpdCB3aWxsIG5vdCBiZSBuZWNlc3NhcnkuCisJCQkJICovCisJCQkJc3RhdHVzID0gb2NmczJfZnJlZV9leHRlbnRfYmxvY2soaGFuZGxlLAorCQkJCQkJCQkgdGMtPnRjX2V4dF9hbGxvY19pbm9kZSwKKwkJCQkJCQkJIHRjLT50Y19leHRfYWxsb2NfYmgsCisJCQkJCQkJCSBlYik7CisJCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJCQlnb3RvIGJhaWw7CisJCQkJfQogCQkJfQogCQl9CiAJCWJyZWxzZShlYl9iaCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9hb3BzLmMgYi9mcy9vY2ZzMi9hb3BzLmMKaW5kZXggZjFkMWMzNC4uM2Q3YzA4MiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvYW9wcy5jCisrKyBiL2ZzL29jZnMyL2FvcHMuYwpAQCAtMzkxLDMxICszOTEsMjggQEAKIHN0YXRpYyBpbnQgb2NmczJfY29tbWl0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCSAgICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQogewotCWludCByZXQsIGV4dGVuZGluZyA9IDAsIGxvY2tsZXZlbCA9IDA7Ci0JbG9mZl90IG5ld19pX3NpemU7CisJaW50IHJldDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAlzdHJ1Y3Qgb2NmczJfam91cm5hbF9oYW5kbGUgKmhhbmRsZSA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGk7CiAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJXUsICV1KVxuIiwgZmlsZSwgcGFnZSwgZnJvbSwgdG8pOwogCiAJLyogTk9URTogb2NmczJfZmlsZV9haW9fd3JpdGUgaGFzIGVuc3VyZWQgdGhhdCBpdCdzIHNhZmUgZm9yCi0JICogdXMgdG8gc2FtcGxlIGlub2RlLT5pX3NpemUgaGVyZSB3aXRob3V0IHRoZSBtZXRhZGF0YSBsb2NrOgorCSAqIHVzIHRvIGNvbnRpbnVlIGhlcmUgd2l0aG91dCByZWNoZWNraW5nIHRoZSBJL08gYWdhaW5zdAorCSAqIGNoYW5nZWQgaW5vZGUgdmFsdWVzLgogCSAqCiAJICogMSkgV2UncmUgY3VycmVudGx5IGhvbGRpbmcgdGhlIGlub2RlIGFsbG9jIGxvY2ssIHNvIG5vCiAJICogICAgbm9kZXMgY2FuIGNoYW5nZSBpdCB1bmRlcm5lYXRoIHVzLgogCSAqCiAJICogMikgV2UndmUgaGFkIHRvIHRha2UgdGhlIG1ldGFkYXRhIGxvY2sgYXQgbGVhc3Qgb25jZQotCSAqICAgIGFscmVhZHkgdG8gY2hlY2sgZm9yIGV4dGVuZGluZyB3cml0ZXMsIGhlbmNlIGluc3VyaW5nCi0JICogICAgdGhhdCBvdXIgY3VycmVudCBjb3B5IGlzIGFsc28gdXAgdG8gZGF0ZS4KKwkgKiAgICBhbHJlYWR5IHRvIGNoZWNrIGZvciBleHRlbmRpbmcgd3JpdGVzLCBzdWlkIHJlbW92YWwsIGV0Yy4KKwkgKiAgICBUaGUgbWV0YSBkYXRhIHVwZGF0ZSBjb2RlIHRoZW4gZW5zdXJlcyB0aGF0IHdlIGRvbid0IGdldCBhCisJICogICAgc3RhbGUgaW5vZGUgYWxsb2NhdGlvbiBpbWFnZSAoaV9zaXplLCBpX2NsdXN0ZXJzLCBldGMpLgogCSAqLwotCW5ld19pX3NpemUgPSAoKGxvZmZfdClwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIHRvOwotCWlmIChuZXdfaV9zaXplID4gaV9zaXplX3JlYWQoaW5vZGUpKSB7Ci0JCWV4dGVuZGluZyA9IDE7Ci0JCWxvY2tsZXZlbCA9IDE7Ci0JfQogCi0JcmV0ID0gb2NmczJfbWV0YV9sb2NrX3dpdGhfcGFnZShpbm9kZSwgTlVMTCwgJmRpX2JoLCBsb2NrbGV2ZWwsIHBhZ2UpOworCXJldCA9IG9jZnMyX21ldGFfbG9ja193aXRoX3BhZ2UoaW5vZGUsIE5VTEwsICZkaV9iaCwgMSwgcGFnZSk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBvdXQ7CkBAIC00MjcsMjMgKzQyNCwyMCBAQAogCQlnb3RvIG91dF91bmxvY2tfbWV0YTsKIAl9CiAKLQlpZiAoZXh0ZW5kaW5nKSB7Ci0JCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3dhbGtfcGFnZV90cmFucyhpbm9kZSwgcGFnZSwgZnJvbSwgdG8pOwotCQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKLQkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKLQkJCWhhbmRsZSA9IE5VTEw7Ci0JCQlnb3RvIG91dF91bmxvY2tfZGF0YTsKLQkJfQorCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3dhbGtfcGFnZV90cmFucyhpbm9kZSwgcGFnZSwgZnJvbSwgdG8pOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJCWdvdG8gb3V0X3VubG9ja19kYXRhOworCX0KIAotCQkvKiBNYXJrIG91ciBidWZmZXIgZWFybHkuIFdlJ2QgcmF0aGVyIGNhdGNoIHRoaXMgZXJyb3IgdXAgaGVyZQotCQkgKiBhcyBvcHBvc2VkIHRvIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb21taXRfd3JpdGUgd2hpY2ggd291bGQKLQkJICogcmVxdWlyZSB1cyB0byBzZXQgYmFjayBpbm9kZS0+aV9zaXplLiAqLwotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIGlub2RlLCBkaV9iaCwKLQkJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwotCQlpZiAocmV0IDwgMCkgewotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXRfY29tbWl0OwotCQl9CisJLyogTWFyayBvdXIgYnVmZmVyIGVhcmx5LiBXZSdkIHJhdGhlciBjYXRjaCB0aGlzIGVycm9yIHVwIGhlcmUKKwkgKiBhcyBvcHBvc2VkIHRvIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjb21taXRfd3JpdGUgd2hpY2ggd291bGQKKwkgKiByZXF1aXJlIHVzIHRvIHNldCBiYWNrIGlub2RlLT5pX3NpemUuICovCisJcmV0ID0gb2NmczJfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgZGlfYmgsCisJCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXRfY29tbWl0OwogCX0KIAogCS8qIG1pZ2h0IHVwZGF0ZSBpX3NpemUgKi8KQEAgLTQ1MywzNyArNDQ3LDI4IEBACiAJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAKLQlpZiAoZXh0ZW5kaW5nKSB7Ci0JCWxvZmZfdCBzaXplID0gKHU2NCkgaV9zaXplX3JlYWQoaW5vZGUpOwotCQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9Ci0JCQkoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CiAKLQkJLyogb2NmczJfbWFya19pbm9kZV9kaXJ0eSBpcyB0b28gaGVhdnkgdG8gdXNlIGhlcmUuICovCi0JCWlub2RlLT5pX2Jsb2NrcyA9IG9jZnMyX2FsaWduX2J5dGVzX3RvX3NlY3RvcnMoc2l6ZSk7Ci0JCWlub2RlLT5pX2N0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJLyogb2NmczJfbWFya19pbm9kZV9kaXJ0eSgpIGlzIHRvbyBoZWF2eSB0byB1c2UgaGVyZS4gKi8KKwlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOworCWRpLT5pX210aW1lID0gZGktPmlfY3RpbWUgPSBjcHVfdG9fbGU2NChpbm9kZS0+aV9tdGltZS50dl9zZWMpOworCWRpLT5pX210aW1lX25zZWMgPSBkaS0+aV9jdGltZV9uc2VjID0gY3B1X3RvX2xlMzIoaW5vZGUtPmlfbXRpbWUudHZfbnNlYyk7CiAKLQkJZGktPmlfc2l6ZSA9IGNwdV90b19sZTY0KHNpemUpOwotCQlkaS0+aV9jdGltZSA9IGRpLT5pX210aW1lID0gCi0JCQkJY3B1X3RvX2xlNjQoaW5vZGUtPmlfbXRpbWUudHZfc2VjKTsKLQkJZGktPmlfY3RpbWVfbnNlYyA9IGRpLT5pX210aW1lX25zZWMgPSAKLQkJCQljcHVfdG9fbGUzMihpbm9kZS0+aV9tdGltZS50dl9uc2VjKTsKKwlpbm9kZS0+aV9ibG9ja3MgPSBvY2ZzMl9hbGlnbl9ieXRlc190b19zZWN0b3JzKCh1NjQpKGlfc2l6ZV9yZWFkKGlub2RlKSkpOworCWRpLT5pX3NpemUgPSBjcHVfdG9fbGU2NCgodTY0KWlfc2l6ZV9yZWFkKGlub2RlKSk7CiAKLQkJcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGRpX2JoKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0X2NvbW1pdDsKLQkJfQorCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dF9jb21taXQ7CiAJfQogCi0JQlVHX09OKGV4dGVuZGluZyAmJiAoaV9zaXplX3JlYWQoaW5vZGUpICE9IG5ld19pX3NpemUpKTsKLQogb3V0X2NvbW1pdDoKLQlpZiAoaGFuZGxlKQotCQlvY2ZzMl9jb21taXRfdHJhbnMoaGFuZGxlKTsKKwlvY2ZzMl9jb21taXRfdHJhbnMoaGFuZGxlKTsKIG91dF91bmxvY2tfZGF0YToKIAlvY2ZzMl9kYXRhX3VubG9jayhpbm9kZSwgMSk7CiBvdXRfdW5sb2NrX21ldGE6Ci0Jb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIGxvY2tsZXZlbCk7CisJb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIDEpOwogb3V0OgogCWlmIChkaV9iaCkKIAkJYnJlbHNlKGRpX2JoKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMgYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5jCmluZGV4IDlhMjRhZGYuLmM5MDM3NDEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmMKKysrIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uYwpAQCAtMTAwLDYgKzEwMCw5IEBACiAJbWxvZ19lbnRyeSgiKGJsb2NrPSglbGx1KSwgbnI9KCVkKSwgZmxhZ3M9JWQsIGlub2RlPSVwKVxuIiwKIAkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jaywgbnIsIGZsYWdzLCBpbm9kZSk7CiAKKwlCVUdfT04oKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKSAmJgorCSAgICAgICAoIWlub2RlIHx8ICEoZmxhZ3MgJiBPQ0ZTMl9CSF9DQUNIRUQpKSk7CisKIAlpZiAob3NiID09IE5VTEwgfHwgb3NiLT5zYiA9PSBOVUxMIHx8IGJocyA9PSBOVUxMKSB7CiAJCXN0YXR1cyA9IC1FSU5WQUw7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTE0MCw2ICsxNDMsMzAgQEAKIAkJYmggPSBiaHNbaV07CiAJCWlnbm9yZV9jYWNoZSA9IDA7CiAKKwkJLyogVGhlcmUgYXJlIHRocmVlIHJlYWQtYWhlYWQgY2FzZXMgaGVyZSB3aGljaCB3ZSBuZWVkIHRvCisJCSAqIGJlIGNvbmNlcm5lZCB3aXRoLiBBbGwgdGhyZWUgYXNzdW1lIGEgYnVmZmVyIGhhcworCQkgKiBwcmV2aW91c2x5IGJlZW4gc3VibWl0dGVkIHdpdGggT0NGUzJfQkhfUkVBREFIRUFECisJCSAqIGFuZCBpdCBoYXNuJ3QgeWV0IGNvbXBsZXRlZCBJL08uCisJCSAqCisJCSAqIDEpIFRoZSBjdXJyZW50IHJlcXVlc3QgaXMgc3luYyB0byBkaXNrLiBUaGlzIHJhcmVseQorCQkgKiAgICBoYXBwZW5zIHRoZXNlIGRheXMsIGFuZCBuZXZlciB3aGVuIHBlcmZvcm1hbmNlCisJCSAqICAgIG1hdHRlcnMgLSB0aGUgY29kZSBjYW4ganVzdCB3YWl0IG9uIHRoZSBidWZmZXIKKwkJICogICAgbG9jayBhbmQgcmUtc3VibWl0LgorCQkgKgorCQkgKiAyKSBUaGUgY3VycmVudCByZXF1ZXN0IGlzIGNhY2hlZCwgYnV0IG5vdAorCQkgKiAgICByZWFkYWhlYWQuIG9jZnMyX2J1ZmZlcl91cHRvZGF0ZSgpIHdpbGwgcmV0dXJuCisJCSAqICAgIGZhbHNlIGFueXdheSwgc28gd2UnbGwgd2luZCB1cCB3YWl0aW5nIG9uIHRoZQorCQkgKiAgICBidWZmZXIgbG9jayB0byBkbyBJL08uIFdlIHJlLWNoZWNrIHRoZSByZXF1ZXN0CisJCSAqICAgIHdpdGggYWZ0ZXIgZ2V0dGluZyB0aGUgbG9jayB0byBhdm9pZCBhIHJlLXN1Ym1pdC4KKwkJICoKKwkJICogMykgVGhlIGN1cnJlbnQgcmVxdWVzdCBpcyByZWFkYWhlYWQgKGFuZCBzbyBtdXN0CisJCSAqICAgIGFsc28gYmUgYSBjYWNoaW5nIG9uZSkuIFdlIHNob3J0IGNpcmN1aXQgaWYgdGhlCisJCSAqICAgIGJ1ZmZlciBpcyBsb2NrZWQgKHVuZGVyIEkvTykgYW5kIGlmIGl0J3MgaW4gdGhlCisJCSAqICAgIHVwdG9kYXRlIGNhY2hlLiBUaGUgcmUtY2hlY2sgZnJvbSAjMiBjYXRjaGVzIHRoZQorCQkgKiAgICBjYXNlIHRoYXQgdGhlIHByZXZpb3VzIHJlYWQtYWhlYWQgY29tcGxldGVzIGp1c3QKKwkJICogICAgYmVmb3JlIG91ciBpcy1pdC1pbi1mbGlnaHQgY2hlY2suCisJCSAqLworCiAJCWlmIChmbGFncyAmIE9DRlMyX0JIX0NBQ0hFRCAmJgogCQkgICAgIW9jZnMyX2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpKSB7CiAJCQltbG9nKE1MX1VQVE9EQVRFLApAQCAtMTY5LDYgKzE5NiwxNCBAQAogCQkJCWNvbnRpbnVlOwogCQkJfQogCisJCQkvKiBBIHJlYWQtYWhlYWQgcmVxdWVzdCB3YXMgbWFkZSAtIGlmIHRoZQorCQkJICogYnVmZmVyIGlzIGFscmVhZHkgdW5kZXIgcmVhZC1haGVhZCBmcm9tIGEKKwkJCSAqIHByZXZpb3VzbHkgc3VibWl0dGVkIHJlcXVlc3QgdGhhbiB3ZSBhcmUKKwkJCSAqIGRvbmUgaGVyZS4gKi8KKwkJCWlmICgoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpCisJCQkgICAgJiYgb2NmczJfYnVmZmVyX3JlYWRfYWhlYWQoaW5vZGUsIGJoKSkKKwkJCQljb250aW51ZTsKKwogCQkJbG9ja19idWZmZXIoYmgpOwogCQkJaWYgKGJ1ZmZlcl9qYmQoYmgpKSB7CiAjaWZkZWYgQ0FUQ0hfQkhfSkJEX1JBQ0VTCkBAIC0xODEsMTMgKzIxNiwyMiBAQAogCQkJCWNvbnRpbnVlOwogI2VuZGlmCiAJCQl9CisKKwkJCS8qIFJlLWNoZWNrIG9jZnMyX2J1ZmZlcl91cHRvZGF0ZSgpIGFzIGEKKwkJCSAqIHByZXZpb3VzbHkgcmVhZC1haGVhZCBidWZmZXIgbWF5IGhhdmUKKwkJCSAqIGNvbXBsZXRlZCBJL08gd2hpbGUgd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGUKKwkJCSAqIGJ1ZmZlciBsb2NrLiAqLworCQkJaWYgKChmbGFncyAmIE9DRlMyX0JIX0NBQ0hFRCkKKwkJCSAgICAmJiAhKGZsYWdzICYgT0NGUzJfQkhfUkVBREFIRUFEKQorCQkJICAgICYmIG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShpbm9kZSwgYmgpKSB7CisJCQkJdW5sb2NrX2J1ZmZlcihiaCk7CisJCQkJY29udGludWU7CisJCQl9CisKIAkJCWNsZWFyX2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQlnZXRfYmgoYmgpOyAvKiBmb3IgZW5kX2J1ZmZlcl9yZWFkX3N5bmMoKSAqLwogCQkJYmgtPmJfZW5kX2lvID0gZW5kX2J1ZmZlcl9yZWFkX3N5bmM7Ci0JCQlpZiAoZmxhZ3MgJiBPQ0ZTMl9CSF9SRUFEQUhFQUQpCi0JCQkJc3VibWl0X2JoKFJFQURBLCBiaCk7Ci0JCQllbHNlCi0JCQkJc3VibWl0X2JoKFJFQUQsIGJoKTsKKwkJCXN1Ym1pdF9iaChSRUFELCBiaCk7CiAJCQljb250aW51ZTsKIAkJfQogCX0KQEAgLTE5NywzNCArMjQxLDM5IEBACiAJZm9yIChpID0gKG5yIC0gMSk7IGkgPj0gMDsgaS0tKSB7CiAJCWJoID0gYmhzW2ldOwogCi0JCS8qIFdlIGtub3cgdGhpcyBjYW4ndCBoYXZlIGNoYW5nZWQgYXMgd2UgaG9sZCB0aGUKLQkJICogaW5vZGUgc2VtLiBBdm9pZCBkb2luZyBhbnkgd29yayBvbiB0aGUgYmggaWYgdGhlCi0JCSAqIGpvdXJuYWwgaGFzIGl0LiAqLwotCQlpZiAoIWJ1ZmZlcl9qYmQoYmgpKQotCQkJd2FpdF9vbl9idWZmZXIoYmgpOworCQlpZiAoIShmbGFncyAmIE9DRlMyX0JIX1JFQURBSEVBRCkpIHsKKwkJCS8qIFdlIGtub3cgdGhpcyBjYW4ndCBoYXZlIGNoYW5nZWQgYXMgd2UgaG9sZCB0aGUKKwkJCSAqIGlub2RlIHNlbS4gQXZvaWQgZG9pbmcgYW55IHdvcmsgb24gdGhlIGJoIGlmIHRoZQorCQkJICogam91cm5hbCBoYXMgaXQuICovCisJCQlpZiAoIWJ1ZmZlcl9qYmQoYmgpKQorCQkJCXdhaXRfb25fYnVmZmVyKGJoKTsKIAotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKLQkJCS8qIFN0YXR1cyB3b24ndCBiZSBjbGVhcmVkIGZyb20gaGVyZSBvbiBvdXQsCi0JCQkgKiBzbyB3ZSBjYW4gc2FmZWx5IHJlY29yZCB0aGlzIGFuZCBsb29wIGJhY2sKLQkJCSAqIHRvIGNsZWFudXAgdGhlIG90aGVyIGJ1ZmZlcnMuIERvbid0IG5lZWQgdG8KLQkJCSAqIHJlbW92ZSB0aGUgY2x1c3RlcmVkIHVwdG9kYXRlIGluZm9ybWF0aW9uCi0JCQkgKiBmb3IgdGhpcyBiaCBhcyBpdCdzIG5vdCBtYXJrZWQgbG9jYWxseQotCQkJICogdXB0b2RhdGUuICovCi0JCQlzdGF0dXMgPSAtRUlPOwotCQkJYnJlbHNlKGJoKTsKLQkJCWJoc1tpXSA9IE5VTEw7Ci0JCQljb250aW51ZTsKKwkJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgeworCQkJCS8qIFN0YXR1cyB3b24ndCBiZSBjbGVhcmVkIGZyb20gaGVyZSBvbiBvdXQsCisJCQkJICogc28gd2UgY2FuIHNhZmVseSByZWNvcmQgdGhpcyBhbmQgbG9vcCBiYWNrCisJCQkJICogdG8gY2xlYW51cCB0aGUgb3RoZXIgYnVmZmVycy4gRG9uJ3QgbmVlZCB0bworCQkJCSAqIHJlbW92ZSB0aGUgY2x1c3RlcmVkIHVwdG9kYXRlIGluZm9ybWF0aW9uCisJCQkJICogZm9yIHRoaXMgYmggYXMgaXQncyBub3QgbWFya2VkIGxvY2FsbHkKKwkJCQkgKiB1cHRvZGF0ZS4gKi8KKwkJCQlzdGF0dXMgPSAtRUlPOworCQkJCWJyZWxzZShiaCk7CisJCQkJYmhzW2ldID0gTlVMTDsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJfQogCisJCS8qIEFsd2F5cyBzZXQgdGhlIGJ1ZmZlciBpbiB0aGUgY2FjaGUsIGV2ZW4gaWYgaXQgd2FzCisJCSAqIGEgZm9yY2VkIHJlYWQsIG9yIHJlYWQtYWhlYWQgd2hpY2ggaGFzbid0IHlldAorCQkgKiBjb21wbGV0ZWQuICovCiAJCWlmIChpbm9kZSkKIAkJCW9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoaW5vZGUsIGJoKTsKIAl9CiAJaWYgKGlub2RlKQogCQltdXRleF91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9pb19tdXRleCk7CiAKLQltbG9nKE1MX0JIX0lPLCAiYmxvY2s9KCVsbHUpLCBucj0oJWQpLCBjYWNoZWQ9JXNcbiIsIAorCW1sb2coTUxfQkhfSU8sICJibG9jaz0oJWxsdSksIG5yPSglZCksIGNhY2hlZD0lcywgZmxhZ3M9MHgleFxuIiwgCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrLCBuciwKLQkgICAgICghKGZsYWdzICYgT0NGUzJfQkhfQ0FDSEVEKSB8fCBpZ25vcmVfY2FjaGUpID8gIm5vIiA6ICJ5ZXMiKTsKKwkgICAgICghKGZsYWdzICYgT0NGUzJfQkhfQ0FDSEVEKSB8fCBpZ25vcmVfY2FjaGUpID8gIm5vIiA6ICJ5ZXMiLCBmbGFncyk7CiAKIGJhaWw6CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmggYi9mcy9vY2ZzMi9idWZmZXJfaGVhZF9pby5oCmluZGV4IDZlY2I5MDkuLjZjYzIwOTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2J1ZmZlcl9oZWFkX2lvLmgKKysrIGIvZnMvb2NmczIvYnVmZmVyX2hlYWRfaW8uaApAQCAtNDksNyArNDksNyBAQAogCiAKICNkZWZpbmUgT0NGUzJfQkhfQ0FDSEVEICAgICAgICAgICAgMQotI2RlZmluZSBPQ0ZTMl9CSF9SRUFEQUhFQUQgICAgICAgICA4CS8qIHVzZSB0aGlzIHRvIHBhc3MgUkVBREEgZG93biB0byBzdWJtaXRfYmggKi8KKyNkZWZpbmUgT0NGUzJfQkhfUkVBREFIRUFEICAgICAgICAgOAogCiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9yZWFkX2Jsb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqIG9zYiwgdTY0IG9mZiwKIAkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwgaW50IGZsYWdzLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYyBiL2ZzL29jZnMyL2NsdXN0ZXIvaGVhcnRiZWF0LmMKaW5kZXggNTA0NTk1ZC4uMzA1Y2JhMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9oZWFydGJlYXQuYworKysgYi9mcy9vY2ZzMi9jbHVzdGVyL2hlYXJ0YmVhdC5jCkBAIC0zMjAsOCArMzIwLDEyIEBACiAJCW1heF9wYWdlcyA9IHEtPm1heF9od19zZWdtZW50czsKIAltYXhfcGFnZXMtLTsgLyogSGFuZGxlIEkvT3MgdGhhdCBzdHJhZGRsZSBhIHBhZ2UgKi8KIAotCW1heF9zZWN0b3JzID0gbWF4X3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gOSk7Ci0KKwlpZiAobWF4X3BhZ2VzKSB7CisJCW1heF9zZWN0b3JzID0gbWF4X3BhZ2VzIDw8IChQQUdFX1NISUZUIC0gOSk7CisJfSBlbHNlIHsKKwkJLyogSWYgQklPIGNvbnRhaW5zIDEgb3IgbGVzcyB0aGFuIDEgcGFnZS4gKi8KKwkJbWF4X3NlY3RvcnMgPSBxLT5tYXhfc2VjdG9yczsKKwl9CiAJLyogV2h5IGlzIGZscygpIDEtYmFzZWQ/Pz8/ICovCiAJcG93X3R3b19zZWN0b3JzID0gMSA8PCAoZmxzKG1heF9zZWN0b3JzKSAtIDEpOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kaXIuYyBiL2ZzL29jZnMyL2Rpci5jCmluZGV4IDNkNDk0ZDEuLjA0ZTAxOTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2Rpci5jCisrKyBiL2ZzL29jZnMyL2Rpci5jCkBAIC03NCwxNCArNzQsMTQgQEAKIGludCBvY2ZzMl9yZWFkZGlyKHN0cnVjdCBmaWxlICogZmlscCwgdm9pZCAqIGRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCiB7CiAJaW50IGVycm9yID0gMDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCwgYmxrOwotCWludCBpLCBudW0sIHN0b3JlZDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCwgYmxrLCBsYXN0X3JhX2JsayA9IDA7CisJaW50IGksIHN0b3JlZDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCwgKiB0bXA7CiAJc3RydWN0IG9jZnMyX2Rpcl9lbnRyeSAqIGRlOwogCWludCBlcnI7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiID0gaW5vZGUtPmlfc2I7Ci0JaW50IGhhdmVfZGlza19sb2NrID0gMDsKKwl1bnNpZ25lZCBpbnQgcmFfc2VjdG9ycyA9IDE2OwogCiAJbWxvZ19lbnRyeSgiZGlyaW5vPSVsbHVcbiIsCiAJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKQEAgLTk1LDkgKzk1LDggQEAKIAkJCW1sb2dfZXJybm8oZXJyb3IpOwogCQkvKiB3ZSBoYXZlbid0IGdvdCBhbnkgeWV0LCBzbyBwcm9wYWdhdGUgdGhlIGVycm9yLiAqLwogCQlzdG9yZWQgPSBlcnJvcjsKLQkJZ290byBiYWlsOworCQlnb3RvIGJhaWxfbm9sb2NrOwogCX0KLQloYXZlX2Rpc2tfbG9jayA9IDE7CiAKIAlvZmZzZXQgPSBmaWxwLT5mX3BvcyAmIChzYi0+c19ibG9ja3NpemUgLSAxKTsKIApAQCAtMTEzLDE2ICsxMTIsMjEgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogRG8gdGhlIHJlYWRhaGVhZCAoOGspCi0JCSAqLwotCQlpZiAoIW9mZnNldCkgewotCQkJZm9yIChpID0gMTYgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSksIG51bSA9IDA7CisJCS8qIFRoZSBpZGVhIGhlcmUgaXMgdG8gYmVnaW4gd2l0aCA4ayByZWFkLWFoZWFkIGFuZCB0byBzdGF5CisJCSAqIDRrIGFoZWFkIG9mIG91ciBjdXJyZW50IHBvc2l0aW9uLgorCQkgKgorCQkgKiBUT0RPOiBVc2UgdGhlIHBhZ2VjYWNoZSBmb3IgdGhpcy4gV2UganVzdCBuZWVkIHRvCisJCSAqIG1ha2Ugc3VyZSBpdCdzIGNsdXN0ZXItc2FmZS4uLiAqLworCQlpZiAoIWxhc3RfcmFfYmxrCisJCSAgICB8fCAoKChsYXN0X3JhX2JsayAtIGJsaykgPDwgOSkgPD0gKHJhX3NlY3RvcnMgLyAyKSkpIHsKKwkJCWZvciAoaSA9IHJhX3NlY3RvcnMgPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gOSk7CiAJCQkgICAgIGkgPiAwOyBpLS0pIHsKIAkJCQl0bXAgPSBvY2ZzMl9icmVhZChpbm9kZSwgKytibGssICZlcnIsIDEpOwogCQkJCWlmICh0bXApCiAJCQkJCWJyZWxzZSh0bXApOwogCQkJfQorCQkJbGFzdF9yYV9ibGsgPSBibGs7CisJCQlyYV9zZWN0b3JzID0gODsKIAkJfQogCiByZXZhbGlkYXRlOgpAQCAtMTk0LDkgKzE5OCw5IEBACiAKIAlzdG9yZWQgPSAwOwogYmFpbDoKLQlpZiAoaGF2ZV9kaXNrX2xvY2spCi0JCW9jZnMyX21ldGFfdW5sb2NrKGlub2RlLCAwKTsKKwlvY2ZzMl9tZXRhX3VubG9jayhpbm9kZSwgMCk7CiAKK2JhaWxfbm9sb2NrOgogCW1sb2dfZXhpdChzdG9yZWQpOwogCiAJcmV0dXJuIHN0b3JlZDsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG1hc3QuYyBiL2ZzL29jZnMyL2RsbS9kbG1hc3QuYwppbmRleCA0Mjc3NWUyLi5mMTNhNGJhIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtYXN0LmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbWFzdC5jCkBAIC0zNjcsMTIgKzM2NywxMCBAQAogCQkJZ290byBkb19hc3Q7CiAJfQogCi0JbWxvZyhNTF9FUlJPUiwgImdvdCAlc2FzdCBmb3IgdW5rbm93biBsb2NrISAgY29va2llPSV1OiVsbHUsICIKLQkJICAgICAgICJuYW1lPSUuKnMsIG5hbWVsZW49JXVcbiIsIAotCQkgICAgICAgcGFzdC0+dHlwZSA9PSBETE1fQVNUID8gIiIgOiAiYiIsIAotCQkgICAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGNvb2tpZSksCi0JCSAgICAgICBkbG1fZ2V0X2xvY2tfY29va2llX3NlcShjb29raWUpLAotCQkgICAgICAgbG9ja2xlbiwgbmFtZSwgbG9ja2xlbik7CisJbWxvZygwLCAiZ290ICVzYXN0IGZvciB1bmtub3duIGxvY2shICBjb29raWU9JXU6JWxsdSwgIgorCSAgICAgIm5hbWU9JS4qcywgbmFtZWxlbj0ldVxuIiwgcGFzdC0+dHlwZSA9PSBETE1fQVNUID8gIiIgOiAiYiIsIAorCSAgICAgZGxtX2dldF9sb2NrX2Nvb2tpZV9ub2RlKGNvb2tpZSksIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKGNvb2tpZSksCisJICAgICBsb2NrbGVuLCBuYW1lLCBsb2NrbGVuKTsKIAogCXJldCA9IERMTV9OT1JNQUw7CiB1bmxvY2tfb3V0OgpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jIGIvZnMvb2NmczIvZGxtL2RsbW1hc3Rlci5jCmluZGV4IDFiODM0NmQuLjk1MDMyNDAgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbS9kbG1tYXN0ZXIuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtbWFzdGVyLmMKQEAgLTIzNzUsNyArMjM3NSw2IEBACiAJbWxvZygwLCAicmV0dXJuaW5nICVkXG4iLCByZXQpOwogCXJldHVybiByZXQ7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChkbG1fbWlncmF0ZV9sb2NrcmVzKTsKIAogaW50IGRsbV9sb2NrX2Jhc3RzX2ZsdXNoZWQoc3RydWN0IGRsbV9jdHh0ICpkbG0sIHN0cnVjdCBkbG1fbG9jayAqbG9jaykKIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYyBiL2ZzL29jZnMyL2RsbS9kbG11bmxvY2suYwppbmRleCBiMGMzMTM0Li4zN2JlNGIyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtdW5sb2NrLmMKKysrIGIvZnMvb2NmczIvZGxtL2RsbXVubG9jay5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAllbHNlCiAJCXN0YXR1cyA9IGRsbV9nZXRfdW5sb2NrX2FjdGlvbnMoZGxtLCByZXMsIGxvY2ssIGxrc2IsICZhY3Rpb25zKTsKIAotCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKKwlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwgJiYgKHN0YXR1cyAhPSBETE1fQ0FOQ0VMR1JBTlQgfHwgIW1hc3Rlcl9ub2RlKSkKIAkJZ290byBsZWF2ZTsKIAogCS8qIEJ5IG5vdyB0aGlzIGhhcyBiZWVuIG1hc2tlZCBvdXQgb2YgY2FuY2VsIHJlcXVlc3RzLiAqLwpAQCAtMTgzLDggKzE4Myw3IEBACiAJCXNwaW5fbG9jaygmbG9jay0+c3BpbmxvY2spOwogCQkvKiBpZiB0aGUgbWFzdGVyIHRvbGQgdXMgdGhlIGxvY2sgd2FzIGFscmVhZHkgZ3JhbnRlZCwKIAkJICogbGV0IHRoZSBhc3QgaGFuZGxlIGFsbCBvZiB0aGVzZSBhY3Rpb25zICovCi0JCWlmIChzdGF0dXMgPT0gRExNX05PUk1BTCAmJgotCQkgICAgbGtzYi0+c3RhdHVzID09IERMTV9DQU5DRUxHUkFOVCkgeworCQlpZiAoc3RhdHVzID09IERMTV9DQU5DRUxHUkFOVCkgewogCQkJYWN0aW9ucyAmPSB+KERMTV9VTkxPQ0tfUkVNT1ZFX0xPQ0t8CiAJCQkJICAgICBETE1fVU5MT0NLX1JFR1JBTlRfTE9DS3wKIAkJCQkgICAgIERMTV9VTkxPQ0tfQ0xFQVJfQ09OVkVSVF9UWVBFKTsKQEAgLTM0OSwxNCArMzQ4LDkgQEAKIAkJCQkJdmVjLCB2ZWNsZW4sIG93bmVyLCAmc3RhdHVzKTsKIAlpZiAodG1wcmV0ID49IDApIHsKIAkJLy8gc3VjY2Vzc2Z1bGx5IHNlbnQgYW5kIHJlY2VpdmVkCi0JCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKQotCQkJcmV0ID0gRExNX05PUk1BTDsKLQkJZWxzZSBpZiAoc3RhdHVzID09IERMTV9GT1JXQVJEKSB7CisJCWlmIChzdGF0dXMgPT0gRExNX0ZPUldBUkQpCiAJCQltbG9nKDAsICJtYXN0ZXIgd2FzIGluLXByb2dyZXNzLiAgcmV0cnlcbiIpOwotCQkJcmV0ID0gRExNX0ZPUldBUkQ7Ci0JCX0gZWxzZQotCQkJcmV0ID0gc3RhdHVzOwotCQlsa3NiLT5zdGF0dXMgPSBzdGF0dXM7CisJCXJldCA9IHN0YXR1czsKIAl9IGVsc2UgewogCQltbG9nX2Vycm5vKHRtcHJldCk7CiAJCWlmIChkbG1faXNfaG9zdF9kb3duKHRtcHJldCkpIHsKQEAgLTM3Miw3ICszNjYsNiBAQAogCQkJLyogc29tZXRoaW5nIGJhZC4gIHRoaXMgd2lsbCBCVUcgaW4gb2NmczIgKi8KIAkJCXJldCA9IGRsbV9lcnJfdG9fZGxtX3N0YXR1cyh0bXByZXQpOwogCQl9Ci0JCWxrc2ItPnN0YXR1cyA9IHJldDsKIAl9CiAKIAlyZXR1cm4gcmV0OwpAQCAtNDgzLDYgKzQ3NiwxMCBAQAogCiAJLyogbG9jayB3YXMgZm91bmQgb24gcXVldWUgKi8KIAlsa3NiID0gbG9jay0+bGtzYjsKKwlpZiAoZmxhZ3MgJiAoTEtNX1ZBTEJMS3xMS01fUFVUX0xWQikgJiYKKwkgICAgbG9jay0+bWwudHlwZSAhPSBMS01fRVhNT0RFKQorCQlmbGFncyAmPSB+KExLTV9WQUxCTEt8TEtNX1BVVF9MVkIpOworCiAJLyogdW5sb2NrYXN0IG9ubHkgY2FsbGVkIG9uIG9yaWdpbmF0aW5nIG5vZGUgKi8KIAlpZiAoZmxhZ3MgJiBMS01fUFVUX0xWQikgewogCQlsa3NiLT5mbGFncyB8PSBETE1fTEtTQl9QVVRfTFZCOwpAQCAtNTA3LDExICs1MDQsOCBAQAogCQkJICAgICAgICJjb29raWU9JXU6JWxsdVxuIiwKIAkJCSAgICAgICBkbG1fZ2V0X2xvY2tfY29va2llX25vZGUodW5sb2NrLT5jb29raWUpLAogCQkJICAgICAgIGRsbV9nZXRfbG9ja19jb29raWVfc2VxKHVubG9jay0+Y29va2llKSk7Ci0JZWxzZSB7Ci0JCS8qIHNlbmQgdGhlIGxrc2ItPnN0YXR1cyBiYWNrIHRvIHRoZSBvdGhlciBub2RlICovCi0JCXN0YXR1cyA9IGxrc2ItPnN0YXR1czsKKwllbHNlCiAJCWRsbV9sb2NrX3B1dChsb2NrKTsKLQl9CiAKIGxlYXZlOgogCWlmIChyZXMpCkBAIC01MzMsMjYgKzUyNywyMiBAQAogCiAJaWYgKGRsbV9sb2NrX29uX2xpc3QoJnJlcy0+YmxvY2tlZCwgbG9jaykpIHsKIAkJLyogY2FuY2VsIHRoaXMgb3V0cmlnaHQgKi8KLQkJbGtzYi0+c3RhdHVzID0gRExNX05PUk1BTDsKIAkJc3RhdHVzID0gRExNX05PUk1BTDsKIAkJKmFjdGlvbnMgPSAoRExNX1VOTE9DS19DQUxMX0FTVCB8CiAJCQkgICAgRExNX1VOTE9DS19SRU1PVkVfTE9DSyk7CiAJfSBlbHNlIGlmIChkbG1fbG9ja19vbl9saXN0KCZyZXMtPmNvbnZlcnRpbmcsIGxvY2spKSB7CiAJCS8qIGNhbmNlbCB0aGUgcmVxdWVzdCwgcHV0IGJhY2sgb24gZ3JhbnRlZCAqLwotCQlsa3NiLT5zdGF0dXMgPSBETE1fTk9STUFMOwogCQlzdGF0dXMgPSBETE1fTk9STUFMOwogCQkqYWN0aW9ucyA9IChETE1fVU5MT0NLX0NBTExfQVNUIHwKIAkJCSAgICBETE1fVU5MT0NLX1JFTU9WRV9MT0NLIHwKIAkJCSAgICBETE1fVU5MT0NLX1JFR1JBTlRfTE9DSyB8CiAJCQkgICAgRExNX1VOTE9DS19DTEVBUl9DT05WRVJUX1RZUEUpOwogCX0gZWxzZSBpZiAoZGxtX2xvY2tfb25fbGlzdCgmcmVzLT5ncmFudGVkLCBsb2NrKSkgewotCQkvKiB0b28gbGF0ZSwgYWxyZWFkeSBncmFudGVkLiAgRExNX0NBTkNFTEdSQU5UICovCi0JCWxrc2ItPnN0YXR1cyA9IERMTV9DQU5DRUxHUkFOVDsKLQkJc3RhdHVzID0gRExNX05PUk1BTDsKKwkJLyogdG9vIGxhdGUsIGFscmVhZHkgZ3JhbnRlZC4gKi8KKwkJc3RhdHVzID0gRExNX0NBTkNFTEdSQU5UOwogCQkqYWN0aW9ucyA9IERMTV9VTkxPQ0tfQ0FMTF9BU1Q7CiAJfSBlbHNlIHsKIAkJbWxvZyhNTF9FUlJPUiwgImxvY2sgdG8gY2FuY2VsIGlzIG5vdCBvbiBhbnkgbGlzdCFcbiIpOwotCQlsa3NiLT5zdGF0dXMgPSBETE1fSVZMT0NLSUQ7CiAJCXN0YXR1cyA9IERMTV9JVkxPQ0tJRDsKIAkJKmFjdGlvbnMgPSAwOwogCX0KQEAgLTU2OSwxMyArNTU5LDExIEBACiAKIAkvKiB1bmxvY2sgcmVxdWVzdCAqLwogCWlmICghZGxtX2xvY2tfb25fbGlzdCgmcmVzLT5ncmFudGVkLCBsb2NrKSkgewotCQlsa3NiLT5zdGF0dXMgPSBETE1fREVOSUVEOwogCQlzdGF0dXMgPSBETE1fREVOSUVEOwogCQlkbG1fZXJyb3Ioc3RhdHVzKTsKIAkJKmFjdGlvbnMgPSAwOwogCX0gZWxzZSB7CiAJCS8qIHVubG9jayBncmFudGVkIGxvY2sgKi8KLQkJbGtzYi0+c3RhdHVzID0gRExNX05PUk1BTDsKIAkJc3RhdHVzID0gRExNX05PUk1BTDsKIAkJKmFjdGlvbnMgPSAoRExNX1VOTE9DS19GUkVFX0xPQ0sgfAogCQkJICAgIERMTV9VTkxPQ0tfQ0FMTF9BU1QgfApAQCAtNjMyLDYgKzYyMCw4IEBACiAKIAlzcGluX2xvY2soJnJlcy0+c3BpbmxvY2spOwogCWlzX21hc3RlciA9IChyZXMtPm93bmVyID09IGRsbS0+bm9kZV9udW0pOworCWlmIChmbGFncyAmIExLTV9WQUxCTEsgJiYgbG9jay0+bWwudHlwZSAhPSBMS01fRVhNT0RFKQorCQlmbGFncyAmPSB+TEtNX1ZBTEJMSzsKIAlzcGluX3VubG9jaygmcmVzLT5zcGlubG9jayk7CiAKIAlpZiAoaXNfbWFzdGVyKSB7CkBAIC02NjUsNyArNjU1LDcgQEAKIAl9CiAKIAlpZiAoY2FsbF9hc3QpIHsKLQkJbWxvZygwLCAiY2FsbGluZyB1bmxvY2thc3QoJXAsICVkKVxuIiwgZGF0YSwgbGtzYi0+c3RhdHVzKTsKKwkJbWxvZygwLCAiY2FsbGluZyB1bmxvY2thc3QoJXAsICVkKVxuIiwgZGF0YSwgc3RhdHVzKTsKIAkJaWYgKGlzX21hc3RlcikgewogCQkJLyogaXQgaXMgcG9zc2libGUgdGhhdCB0aGVyZSBpcyBvbmUgbGFzdCBiYXN0IAogCQkJICogcGVuZGluZy4gIG1ha2Ugc3VyZSBpdCBpcyBmbHVzaGVkLCB0aGVuCkBAIC02NzcsOSArNjY3LDEyIEBACiAJCQl3YWl0X2V2ZW50KGRsbS0+YXN0X3dxLCAKIAkJCQkgICBkbG1fbG9ja19iYXN0c19mbHVzaGVkKGRsbSwgbG9jaykpOwogCQl9Ci0JCSgqdW5sb2NrYXN0KShkYXRhLCBsa3NiLT5zdGF0dXMpOworCQkoKnVubG9ja2FzdCkoZGF0YSwgc3RhdHVzKTsKIAl9CiAKKwlpZiAoc3RhdHVzID09IERMTV9DQU5DRUxHUkFOVCkKKwkJc3RhdHVzID0gRExNX05PUk1BTDsKKwogCWlmIChzdGF0dXMgPT0gRExNX05PUk1BTCkgewogCQltbG9nKDAsICJraWNraW5nIHRoZSB0aHJlYWRcbiIpOwogCQlkbG1fa2lja190aHJlYWQoZGxtLCByZXMpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5jIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCmluZGV4IDc2MmViMWYuLjE1MWI0MTcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuYworKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKQEAgLTEzMzAsNiArMTMzMCw3IEBACiAJCWNwdV90b19iZTY0KG9jZnMyX3BhY2tfdGltZXNwZWMoJmlub2RlLT5pX2N0aW1lKSk7CiAJbHZiLT5sdmJfaW10aW1lX3BhY2tlZCA9CiAJCWNwdV90b19iZTY0KG9jZnMyX3BhY2tfdGltZXNwZWMoJmlub2RlLT5pX210aW1lKSk7CisJbHZiLT5sdmJfaWF0dHIgICAgPSBjcHVfdG9fYmUzMihvaS0+aXBfYXR0cik7CiAKIAltbG9nX21ldGFfbHZiKDAsIGxvY2tyZXMpOwogCkBAIC0xMzYwLDYgKzEzNjEsOSBAQAogCW9pLT5pcF9jbHVzdGVycyA9IGJlMzJfdG9fY3B1KGx2Yi0+bHZiX2ljbHVzdGVycyk7CiAJaV9zaXplX3dyaXRlKGlub2RlLCBiZTY0X3RvX2NwdShsdmItPmx2Yl9pc2l6ZSkpOwogCisJb2ktPmlwX2F0dHIgPSBiZTMyX3RvX2NwdShsdmItPmx2Yl9pYXR0cik7CisJb2NmczJfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKKwogCS8qIGZhc3Qtc3ltbGlua3MgYXJlIGEgc3BlY2lhbCBjYXNlICovCiAJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgIW9pLT5pcF9jbHVzdGVycykKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKQEAgLTI4OTksOCArMjkwMyw5IEBACiAJICAgICBiZTMyX3RvX2NwdShsdmItPmx2Yl9pdWlkKSwgYmUzMl90b19jcHUobHZiLT5sdmJfaWdpZCksCiAJICAgICBiZTE2X3RvX2NwdShsdmItPmx2Yl9pbW9kZSkpOwogCW1sb2cobGV2ZWwsICJubGluayAldSwgYXRpbWVfcGFja2VkIDB4JWxseCwgY3RpbWVfcGFja2VkIDB4JWxseCwgIgotCSAgICAgIm10aW1lX3BhY2tlZCAweCVsbHhcbiIsIGJlMTZfdG9fY3B1KGx2Yi0+bHZiX2lubGluayksCisJICAgICAibXRpbWVfcGFja2VkIDB4JWxseCBpYXR0ciAweCV4XG4iLCBiZTE2X3RvX2NwdShsdmItPmx2Yl9pbmxpbmspLAogCSAgICAgKGxvbmcgbG9uZyliZTY0X3RvX2NwdShsdmItPmx2Yl9pYXRpbWVfcGFja2VkKSwKIAkgICAgIChsb25nIGxvbmcpYmU2NF90b19jcHUobHZiLT5sdmJfaWN0aW1lX3BhY2tlZCksCi0JICAgICAobG9uZyBsb25nKWJlNjRfdG9fY3B1KGx2Yi0+bHZiX2ltdGltZV9wYWNrZWQpKTsKKwkgICAgIChsb25nIGxvbmcpYmU2NF90b19jcHUobHZiLT5sdmJfaW10aW1lX3BhY2tlZCksCisJICAgICBiZTMyX3RvX2NwdShsdmItPmx2Yl9pYXR0cikpOwogfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZ2x1ZS5oIGIvZnMvb2NmczIvZGxtZ2x1ZS5oCmluZGV4IDhmMmQxZGIuLjI0M2FlODYgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2RsbWdsdWUuaAorKysgYi9mcy9vY2ZzMi9kbG1nbHVlLmgKQEAgLTI3LDcgKzI3LDcgQEAKICNpZm5kZWYgRExNR0xVRV9ICiAjZGVmaW5lIERMTUdMVUVfSAogCi0jZGVmaW5lIE9DRlMyX0xWQl9WRVJTSU9OIDIKKyNkZWZpbmUgT0NGUzJfTFZCX1ZFUlNJT04gMwogCiBzdHJ1Y3Qgb2NmczJfbWV0YV9sdmIgewogCV9fYmUzMiAgICAgICBsdmJfdmVyc2lvbjsKQEAgLTQwLDcgKzQwLDggQEAKIAlfX2JlNjQgICAgICAgbHZiX2lzaXplOwogCV9fYmUxNiAgICAgICBsdmJfaW1vZGU7CiAJX19iZTE2ICAgICAgIGx2Yl9pbmxpbms7Ci0JX19iZTMyICAgICAgIGx2Yl9yZXNlcnZlZFszXTsKKwlfX2JlMzIgICAgICAgbHZiX2lhdHRyOworCV9fYmUzMiAgICAgICBsdmJfcmVzZXJ2ZWRbMl07CiB9OwogCiAvKiBvY2ZzMl9tZXRhX2xvY2tfZnVsbCgpIGFuZCBvY2ZzMl9kYXRhX2xvY2tfZnVsbCgpICdhcmdfZmxhZ3MnIGZsYWdzICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9maWxlLmMgYi9mcy9vY2ZzMi9maWxlLmMKaW5kZXggYTk1NTljOC4uMmJiZmExNyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZmlsZS5jCisrKyBiL2ZzL29jZnMyL2ZpbGUuYwpAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgImZpbGUuaCIKICNpbmNsdWRlICJzeXNmaWxlLmgiCiAjaW5jbHVkZSAiaW5vZGUuaCIKKyNpbmNsdWRlICJpb2N0bC5oIgogI2luY2x1ZGUgImpvdXJuYWwuaCIKICNpbmNsdWRlICJtbWFwLmgiCiAjaW5jbHVkZSAic3ViYWxsb2MuaCIKQEAgLTEyMjcsMTAgKzEyMjgsMTIgQEAKIAkub3BlbgkJPSBvY2ZzMl9maWxlX29wZW4sCiAJLmFpb19yZWFkCT0gb2NmczJfZmlsZV9haW9fcmVhZCwKIAkuYWlvX3dyaXRlCT0gb2NmczJfZmlsZV9haW9fd3JpdGUsCisJLmlvY3RsCQk9IG9jZnMyX2lvY3RsLAogfTsKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBvY2ZzMl9kb3BzID0gewogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBvY2ZzMl9yZWFkZGlyLAogCS5mc3luYwkJPSBvY2ZzMl9zeW5jX2ZpbGUsCisJLmlvY3RsCQk9IG9jZnMyX2lvY3RsLAogfTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2lub2RlLmMgYi9mcy9vY2ZzMi9pbm9kZS5jCmluZGV4IDMyN2E1YjcuLjdiY2Y2OTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2lub2RlLmMKKysrIGIvZnMvb2NmczIvaW5vZGUuYwpAQCAtNzEsNiArNzEsMjYgQEAKIAkJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpmZV9iaCk7CiAKK3ZvaWQgb2NmczJfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gT0NGUzJfSShpbm9kZSktPmlwX2F0dHI7CisKKwlpbm9kZS0+aV9mbGFncyAmPSB+KFNfSU1NVVRBQkxFIHwKKwkJU19TWU5DIHwgU19BUFBFTkQgfCBTX05PQVRJTUUgfCBTX0RJUlNZTkMpOworCisJaWYgKGZsYWdzICYgT0NGUzJfSU1NVVRBQkxFX0ZMKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX0lNTVVUQUJMRTsKKworCWlmIChmbGFncyAmIE9DRlMyX1NZTkNfRkwpCisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfU1lOQzsKKwlpZiAoZmxhZ3MgJiBPQ0ZTMl9BUFBFTkRfRkwpCisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfQVBQRU5EOworCWlmIChmbGFncyAmIE9DRlMyX05PQVRJTUVfRkwpCisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9BVElNRTsKKwlpZiAoZmxhZ3MgJiBPQ0ZTMl9ESVJTWU5DX0ZMKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX0RJUlNZTkM7Cit9CisKIHN0cnVjdCBpbm9kZSAqb2NmczJfaWxvb2t1cF9mb3Jfdm90ZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkgICAgIHU2NCBibGtubywKIAkJCQkgICAgIGludCBkZWxldGVfdm90ZSkKQEAgLTI2MCw3ICsyODAsNiBAQAogCQlpbm9kZS0+aV9ibG9ja3MgPQogCQkJb2NmczJfYWxpZ25fYnl0ZXNfdG9fc2VjdG9ycyhsZTY0X3RvX2NwdShmZS0+aV9zaXplKSk7CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmb2NmczJfYW9wczsKLQlpbm9kZS0+aV9mbGFncyB8PSBTX05PQVRJTUU7CiAJaW5vZGUtPmlfYXRpbWUudHZfc2VjID0gbGU2NF90b19jcHUoZmUtPmlfYXRpbWUpOwogCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSBsZTMyX3RvX2NwdShmZS0+aV9hdGltZV9uc2VjKTsKIAlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBsZTY0X3RvX2NwdShmZS0+aV9tdGltZSk7CkBAIC0yNzYsNiArMjk1LDcgQEAKIAogCU9DRlMyX0koaW5vZGUpLT5pcF9jbHVzdGVycyA9IGxlMzJfdG9fY3B1KGZlLT5pX2NsdXN0ZXJzKTsKIAlPQ0ZTMl9JKGlub2RlKS0+aXBfb3JwaGFuZWRfc2xvdCA9IE9DRlMyX0lOVkFMSURfU0xPVDsKKwlPQ0ZTMl9JKGlub2RlKS0+aXBfYXR0ciA9IGxlMzJfdG9fY3B1KGZlLT5pX2F0dHIpOwogCiAJaWYgKGNyZWF0ZV9pbm8pCiAJCWlub2RlLT5pX2lubyA9IGlub19mcm9tX2Jsa25vKGlub2RlLT5pX3NiLApAQCAtMzMwLDYgKzM1MCw5IEBACiAJb2NmczJfaW5vZGVfbG9ja19yZXNfaW5pdCgmT0NGUzJfSShpbm9kZSktPmlwX2RhdGFfbG9ja3JlcywKIAkJCQkgIE9DRlMyX0xPQ0tfVFlQRV9EQVRBLCBpbm9kZSk7CiAKKwlvY2ZzMl9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOworCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9BVElNRTsKKwogCXN0YXR1cyA9IDA7CiBiYWlsOgogCW1sb2dfZXhpdChzdGF0dXMpOwpAQCAtMTAyNywxMiArMTA1MCw4IEBACiAJdTY0IHBfYmxrbm87CiAJaW50IHJlYWRmbGFncyA9IE9DRlMyX0JIX0NBQ0hFRDsKIAotI2lmIDAKLQkvKiBvbmx5IHR1cm4gdGhpcyBvbiBpZiB3ZSBrbm93IHdlIGNhbiBkZWFsIHdpdGggcmVhZF9ibG9jawotCSAqIHJldHVybmluZyBub3RoaW5nICovCiAJaWYgKHJlYWRhKQogCQlyZWFkZmxhZ3MgfD0gT0NGUzJfQkhfUkVBREFIRUFEOwotI2VuZGlmCiAKIAlpZiAoKCh1NjQpYmxvY2sgPDwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHMpID49CiAJICAgIGlfc2l6ZV9yZWFkKGlub2RlKSkgewpAQCAtMTEzMSw2ICsxMTUwLDcgQEAKIAogCXNwaW5fbG9jaygmT0NGUzJfSShpbm9kZSktPmlwX2xvY2spOwogCWZlLT5pX2NsdXN0ZXJzID0gY3B1X3RvX2xlMzIoT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzKTsKKwlmZS0+aV9hdHRyID0gY3B1X3RvX2xlMzIoT0NGUzJfSShpbm9kZSktPmlwX2F0dHIpOwogCXNwaW5fdW5sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAKIAlmZS0+aV9zaXplID0gY3B1X3RvX2xlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKQEAgLTExNjksNiArMTE4OSw4IEBACiAJc3Bpbl9sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAKIAlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShmZS0+aV9jbHVzdGVycyk7CisJT0NGUzJfSShpbm9kZSktPmlwX2F0dHIgPSBsZTMyX3RvX2NwdShmZS0+aV9hdHRyKTsKKwlvY2ZzMl9zZXRfaW5vZGVfZmxhZ3MoaW5vZGUpOwogCWlfc2l6ZV93cml0ZShpbm9kZSwgbGU2NF90b19jcHUoZmUtPmlfc2l6ZSkpOwogCWlub2RlLT5pX25saW5rID0gbGUxNl90b19jcHUoZmUtPmlfbGlua3NfY291bnQpOwogCWlub2RlLT5pX3VpZCA9IGxlMzJfdG9fY3B1KGZlLT5pX3VpZCk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5oIGIvZnMvb2NmczIvaW5vZGUuaAppbmRleCAzNTE0MGY2Li40ZDFlNTM5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5oCisrKyBiL2ZzL29jZnMyL2lub2RlLmgKQEAgLTU2LDYgKzU2LDcgQEAKIAlzdHJ1Y3Qgb2NmczJfam91cm5hbF9oYW5kbGUJKmlwX2hhbmRsZTsKIAogCXUzMgkJCQlpcF9mbGFnczsgLyogc2VlIGJlbG93ICovCisJdTMyCQkJCWlwX2F0dHI7IC8qIGlub2RlIGF0dHJpYnV0ZXMgKi8KIAogCS8qIHByb3RlY3RlZCBieSByZWNvdmVyeV9sb2NrLiAqLwogCXN0cnVjdCBpbm9kZQkJCSppcF9uZXh0X29ycGhhbjsKQEAgLTE0Miw0ICsxNDMsNiBAQAogaW50IG9jZnMyX2Fpb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qga2lvY2IgKnJlcSwgc3RydWN0IGlvY2IgKmlvY2IpOwogaW50IG9jZnMyX2Fpb193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGtpb2NiICpyZXEsIHN0cnVjdCBpb2NiICppb2NiKTsKIAordm9pZCBvY2ZzMl9zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICppbm9kZSk7CisKICNlbmRpZiAvKiBPQ0ZTMl9JTk9ERV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pb2N0bC5jIGIvZnMvb2NmczIvaW9jdGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjYzY2VmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIvaW9jdGwuYwpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIGxpbnV4L2ZzL29jZnMyL2lvY3RsLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSGVyYmVydCBQb2V0emwKKyAqIGFkYXB0ZWQgZnJvbSBSZW15IENhcmQncyBleHQyL2lvY3RsLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgorCisjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfSU5PREUKKyNpbmNsdWRlIDxjbHVzdGVyL21hc2tsb2cuaD4KKworI2luY2x1ZGUgIm9jZnMyLmgiCisjaW5jbHVkZSAiYWxsb2MuaCIKKyNpbmNsdWRlICJkbG1nbHVlLmgiCisjaW5jbHVkZSAiaW5vZGUuaCIKKyNpbmNsdWRlICJqb3VybmFsLmgiCisKKyNpbmNsdWRlICJvY2ZzMl9mcy5oIgorI2luY2x1ZGUgImlvY3RsLmgiCisKKyNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+CisKK3N0YXRpYyBpbnQgb2NmczJfZ2V0X2lub2RlX2F0dHIoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgKmZsYWdzKQoreworCWludCBzdGF0dXM7CisKKwlzdGF0dXMgPSBvY2ZzMl9tZXRhX2xvY2soaW5vZGUsIE5VTEwsIE5VTEwsIDApOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisJKmZsYWdzID0gT0NGUzJfSShpbm9kZSktPmlwX2F0dHI7CisJb2NmczJfbWV0YV91bmxvY2soaW5vZGUsIDApOworCisJbWxvZ19leGl0KHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBvY2ZzMl9zZXRfaW5vZGVfYXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1bnNpZ25lZCBmbGFncywKKwkJCQl1bnNpZ25lZCBtYXNrKQoreworCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvY2ZzMl9pbm9kZSA9IE9DRlMyX0koaW5vZGUpOworCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl9qb3VybmFsX2hhbmRsZSAqaGFuZGxlID0gTlVMTDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKKwl1bnNpZ25lZCBvbGRmbGFnczsKKwlpbnQgc3RhdHVzOworCisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJc3RhdHVzID0gb2NmczJfbWV0YV9sb2NrKGlub2RlLCBOVUxMLCAmYmgsIDEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCXN0YXR1cyA9IC1FUk9GUzsKKwlpZiAoSVNfUkRPTkxZKGlub2RlKSkKKwkJZ290byBiYWlsX3VubG9jazsKKworCXN0YXR1cyA9IC1FQUNDRVM7CisJaWYgKChjdXJyZW50LT5mc3VpZCAhPSBpbm9kZS0+aV91aWQpICYmICFjYXBhYmxlKENBUF9GT1dORVIpKQorCQlnb3RvIGJhaWxfdW5sb2NrOworCisJaWYgKCFTX0lTRElSKGlub2RlLT5pX21vZGUpKQorCQlmbGFncyAmPSB+T0NGUzJfRElSU1lOQ19GTDsKKworCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgTlVMTCwgT0NGUzJfSU5PREVfVVBEQVRFX0NSRURJVFMpOworCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQlzdGF0dXMgPSBQVFJfRVJSKGhhbmRsZSk7CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsX3VubG9jazsKKwl9CisKKwlvbGRmbGFncyA9IG9jZnMyX2lub2RlLT5pcF9hdHRyOworCWZsYWdzID0gZmxhZ3MgJiBtYXNrOworCWZsYWdzIHw9IG9sZGZsYWdzICYgfm1hc2s7CisKKwkvKgorCSAqIFRoZSBJTU1VVEFCTEUgYW5kIEFQUEVORF9PTkxZIGZsYWdzIGNhbiBvbmx5IGJlIGNoYW5nZWQgYnkKKwkgKiB0aGUgcmVsZXZhbnQgY2FwYWJpbGl0eS4KKwkgKi8KKwlzdGF0dXMgPSAtRVBFUk07CisJaWYgKChvbGRmbGFncyAmIE9DRlMyX0lNTVVUQUJMRV9GTCkgfHwgKChmbGFncyBeIG9sZGZsYWdzKSAmCisJCShPQ0ZTMl9BUFBFTkRfRkwgfCBPQ0ZTMl9JTU1VVEFCTEVfRkwpKSkgeworCQlpZiAoIWNhcGFibGUoQ0FQX0xJTlVYX0lNTVVUQUJMRSkpCisJCQlnb3RvIGJhaWxfdW5sb2NrOworCX0KKworCW9jZnMyX2lub2RlLT5pcF9hdHRyID0gZmxhZ3M7CisJb2NmczJfc2V0X2lub2RlX2ZsYWdzKGlub2RlKTsKKworCXN0YXR1cyA9IG9jZnMyX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSwgYmgpOworCWlmIChzdGF0dXMgPCAwKQorCQltbG9nX2Vycm5vKHN0YXR1cyk7CisKKwlvY2ZzMl9jb21taXRfdHJhbnMoaGFuZGxlKTsKK2JhaWxfdW5sb2NrOgorCW9jZnMyX21ldGFfdW5sb2NrKGlub2RlLCAxKTsKK2JhaWw6CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwlpZiAoYmgpCisJCWJyZWxzZShiaCk7CisKKwltbG9nX2V4aXQoc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCitpbnQgb2NmczJfaW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCwKKwl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJaW50IHN0YXR1czsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBPQ0ZTMl9JT0NfR0VURkxBR1M6CisJCXN0YXR1cyA9IG9jZnMyX2dldF9pbm9kZV9hdHRyKGlub2RlLCAmZmxhZ3MpOworCQlpZiAoc3RhdHVzIDwgMCkKKwkJCXJldHVybiBzdGF0dXM7CisKKwkJZmxhZ3MgJj0gT0NGUzJfRkxfVklTSUJMRTsKKwkJcmV0dXJuIHB1dF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKSBhcmcpOworCWNhc2UgT0NGUzJfSU9DX1NFVEZMQUdTOgorCQlpZiAoZ2V0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopIGFyZykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gb2NmczJfc2V0X2lub2RlX2F0dHIoaW5vZGUsIGZsYWdzLAorCQkJT0NGUzJfRkxfTU9ESUZJQUJMRSk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pb2N0bC5oIGIvZnMvb2NmczIvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTdjODI5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIvaW9jdGwuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogaW9jdGwuaAorICoKKyAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSGVyYmVydCBQb2V0emwKKyAqCisgKi8KKworI2lmbmRlZiBPQ0ZTMl9JT0NUTF9ICisjZGVmaW5lIE9DRlMyX0lPQ1RMX0gKKworaW50IG9jZnMyX2lvY3RsKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHAsCisJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworCisjZW5kaWYgLyogT0NGUzJfSU9DVExfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IDBkMTk3M2VhMy4uMWYxN2E0ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jCisrKyBiL2ZzL29jZnMyL2xvY2FsYWxsb2MuYwpAQCAtODQwLDYgKzg0MCwxMiBAQAogCiAJbWxvZygwLCAiQWxsb2NhdGluZyAldSBjbHVzdGVycyBmb3IgYSBuZXcgd2luZG93LlxuIiwKIAkgICAgIG9jZnMyX2xvY2FsX2FsbG9jX3dpbmRvd19iaXRzKG9zYikpOworCisJLyogSW5zdHJ1Y3QgdGhlIGFsbG9jYXRpb24gY29kZSB0byB0cnkgdGhlIG1vc3QgcmVjZW50bHkgdXNlZAorCSAqIGNsdXN0ZXIgZ3JvdXAuIFdlJ2xsIHJlLXJlY29yZCB0aGUgZ3JvdXAgdXNlZCB0aGlzIHBhc3MKKwkgKiBiZWxvdy4gKi8KKwlhYy0+YWNfbGFzdF9ncm91cCA9IG9zYi0+bGFfbGFzdF9nZDsKKwogCS8qIHdlIHVzZWQgdGhlIGdlbmVyaWMgc3ViYWxsb2MgcmVzZXJ2ZSBmdW5jdGlvbiwgYnV0IHdlIHNldAogCSAqIGV2ZXJ5dGhpbmcgdXAgbmljZWx5LCBzbyB0aGVyZSdzIG5vIHJlYXNvbiB3aHkgd2UgY2FuJ3QgdXNlCiAJICogdGhlIG1vcmUgc3BlY2lmaWMgY2x1c3RlciBhcGkgdG8gY2xhaW0gYml0cy4gKi8KQEAgLTg1Miw2ICs4NTgsOCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJb3NiLT5sYV9sYXN0X2dkID0gYWMtPmFjX2xhc3RfZ3JvdXA7CisKIAlsYS0+bGFfYm1fb2ZmID0gY3B1X3RvX2xlMzIoY2x1c3Rlcl9vZmYpOwogCWFsbG9jLT5pZDEuYml0bWFwMS5pX3RvdGFsID0gY3B1X3RvX2xlMzIoY2x1c3Rlcl9jb3VudCk7CiAJLyoganVzdCBpbiBjYXNlLi4uIEluIHRoZSBmdXR1cmUgd2hlbiB3ZSBmaW5kIHNwYWNlIG91cnNlbHZlcywKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDA2NzM4NjIuLjBkM2U5MzkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtNTYsNiArNTYsNyBAQAogI2luY2x1ZGUgImpvdXJuYWwuaCIKICNpbmNsdWRlICJuYW1laS5oIgogI2luY2x1ZGUgInN1YmFsbG9jLmgiCisjaW5jbHVkZSAic3VwZXIuaCIKICNpbmNsdWRlICJzeW1saW5rLmgiCiAjaW5jbHVkZSAic3lzZmlsZS5oIgogI2luY2x1ZGUgInVwdG9kYXRlLmgiCkBAIC0zMTAsMTMgKzMxMSw2IEBACiAJLyogZ2V0IG91ciBzdXBlciBibG9jayAqLwogCW9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CiAKLQlpZiAoU19JU0RJUihtb2RlKSAmJiAoZGlyLT5pX25saW5rID49IE9DRlMyX0xJTktfTUFYKSkgewotCQltbG9nKE1MX0VSUk9SLCAiaW5vZGUgJWxsdSBoYXMgaV9ubGluayBvZiAldVxuIiwKLQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sIGRpci0+aV9ubGluayk7Ci0JCXN0YXR1cyA9IC1FTUxJTks7Ci0JCWdvdG8gbGVhdmU7Ci0JfQotCiAJaGFuZGxlID0gb2NmczJfYWxsb2NfaGFuZGxlKG9zYik7CiAJaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAJCXN0YXR1cyA9IC1FTk9NRU07CkBAIC0zMzEsNiArMzI1LDExIEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCisJaWYgKFNfSVNESVIobW9kZSkgJiYgKGRpci0+aV9ubGluayA+PSBPQ0ZTMl9MSU5LX01BWCkpIHsKKwkJc3RhdHVzID0gLUVNTElOSzsKKwkJZ290byBsZWF2ZTsKKwl9CisKIAlkaXJmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIHBhcmVudF9mZV9iaC0+Yl9kYXRhOwogCWlmICghZGlyZmUtPmlfbGlua3NfY291bnQpIHsKIAkJLyogY2FuJ3QgbWFrZSBhIGZpbGUgaW4gYSBkZWxldGVkIGRpcmVjdG9yeS4gKi8KQEAgLTY0MywxMSArNjQyLDYgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCWlmIChpbm9kZS0+aV9ubGluayA+PSBPQ0ZTMl9MSU5LX01BWCkgewotCQllcnIgPSAtRU1MSU5LOwotCQlnb3RvIGJhaWw7Ci0JfQotCiAJaGFuZGxlID0gb2NmczJfYWxsb2NfaGFuZGxlKG9zYik7CiAJaWYgKGhhbmRsZSA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC02NjEsNiArNjU1LDExIEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwlpZiAoIWRpci0+aV9ubGluaykgeworCQllcnIgPSAtRU5PRU5UOworCQlnb3RvIGJhaWw7CisJfQorCiAJZXJyID0gb2NmczJfY2hlY2tfZGlyX2Zvcl9lbnRyeShkaXIsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJCWRlbnRyeS0+ZF9uYW1lLmxlbik7CiAJaWYgKGVycikKQEAgLTE5NjQsMTMgKzE5NjMsOCBAQAogCQkJCX0KIAkJCQludW0rKzsKIAotCQkJCS8qIFhYWDogcXVlc3Rpb25hYmxlIHJlYWRhaGVhZCBzdHVmZiBoZXJlICovCiAJCQkJYmggPSBvY2ZzMl9icmVhZChkaXIsIGIrKywgJmVyciwgMSk7CiAJCQkJYmhfdXNlW3JhX21heF0gPSBiaDsKLSNpZiAwCQkvLyA/Pz8KLQkJCQlpZiAoYmgpCi0JCQkJCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICZiaCk7Ci0jZW5kaWYKIAkJCX0KIAkJfQogCQlpZiAoKGJoID0gYmhfdXNlW3JhX3B0cisrXSkgPT0gTlVMTCkKQEAgLTE5NzgsNiArMTk3MiwxMCBAQAogCQl3YWl0X29uX2J1ZmZlcihiaCk7CiAJCWlmICghYnVmZmVyX3VwdG9kYXRlKGJoKSkgewogCQkJLyogcmVhZCBlcnJvciwgc2tpcCBibG9jayAmIGhvcGUgZm9yIHRoZSBiZXN0ICovCisJCQlvY2ZzMl9lcnJvcihkaXItPmlfc2IsICJyZWFkaW5nIGRpcmVjdG9yeSAlbGx1LCAiCisJCQkJICAgICJvZmZzZXQgJWx1XG4iLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKU9DRlMyX0koZGlyKS0+aXBfYmxrbm8sCisJCQkJICAgIGJsb2NrKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlnb3RvIG5leHQ7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IGNkNGE2ZjIuLjA0NjJhN2YgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtMTk3LDcgKzE5Nyw2IEBACiAJc3RydWN0IG9jZnMyX25vZGVfbWFwIHJlY292ZXJ5X21hcDsKIAlzdHJ1Y3Qgb2NmczJfbm9kZV9tYXAgdW1vdW50X21hcDsKIAotCXUzMiBudW1fY2x1c3RlcnM7CiAJdTY0IHJvb3RfYmxrbm87CiAJdTY0IHN5c3RlbV9kaXJfYmxrbm87CiAJdTY0IGJpdG1hcF9ibGtubzsKQEAgLTIzNyw2ICsyMzYsNyBAQAogCiAJZW51bSBvY2ZzMl9sb2NhbF9hbGxvY19zdGF0ZSBsb2NhbF9hbGxvY19zdGF0ZTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmxvY2FsX2FsbG9jX2JoOworCXU2NCBsYV9sYXN0X2dkOwogCiAJLyogTmV4dCB0d28gZmllbGRzIGFyZSBmb3IgbG9jYWwgbm9kZSBzbG90IHJlY292ZXJ5IGR1cmluZwogCSAqIG1vdW50LiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggYzViMWFjNS4uMzMzMGE1ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0xMTQsNiArMTE0LDI2IEBACiAjZGVmaW5lIE9DRlMyX0NIQUlOX0ZMCQkoMHgwMDAwMDQwMCkJLyogQ2hhaW4gYWxsb2NhdG9yICovCiAjZGVmaW5lIE9DRlMyX0RFQUxMT0NfRkwJKDB4MDAwMDA4MDApCS8qIFRydW5jYXRlIGxvZyAqLwogCisvKiBJbm9kZSBhdHRyaWJ1dGVzLCBrZWVwIGluIHN5bmMgd2l0aCBFWFQyICovCisjZGVmaW5lIE9DRlMyX1NFQ1JNX0ZMCQkoMHgwMDAwMDAwMSkJLyogU2VjdXJlIGRlbGV0aW9uICovCisjZGVmaW5lIE9DRlMyX1VOUk1fRkwJCSgweDAwMDAwMDAyKQkvKiBVbmRlbGV0ZSAqLworI2RlZmluZSBPQ0ZTMl9DT01QUl9GTAkJKDB4MDAwMDAwMDQpCS8qIENvbXByZXNzIGZpbGUgKi8KKyNkZWZpbmUgT0NGUzJfU1lOQ19GTAkJKDB4MDAwMDAwMDgpCS8qIFN5bmNocm9ub3VzIHVwZGF0ZXMgKi8KKyNkZWZpbmUgT0NGUzJfSU1NVVRBQkxFX0ZMCSgweDAwMDAwMDEwKQkvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBPQ0ZTMl9BUFBFTkRfRkwJCSgweDAwMDAwMDIwKQkvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KKyNkZWZpbmUgT0NGUzJfTk9EVU1QX0ZMCQkoMHgwMDAwMDA0MCkJLyogZG8gbm90IGR1bXAgZmlsZSAqLworI2RlZmluZSBPQ0ZTMl9OT0FUSU1FX0ZMCSgweDAwMDAwMDgwKQkvKiBkbyBub3QgdXBkYXRlIGF0aW1lICovCisjZGVmaW5lIE9DRlMyX0RJUlNZTkNfRkwJKDB4MDAwMTAwMDApCS8qIGRpcnN5bmMgYmVoYXZpb3VyIChkaXJlY3RvcmllcyBvbmx5KSAqLworCisjZGVmaW5lIE9DRlMyX0ZMX1ZJU0lCTEUJKDB4MDAwMTAwRkYpCS8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLworI2RlZmluZSBPQ0ZTMl9GTF9NT0RJRklBQkxFCSgweDAwMDEwMEZGKQkvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KKworLyoKKyAqIGlvY3RsIGNvbW1hbmRzCisgKi8KKyNkZWZpbmUgT0NGUzJfSU9DX0dFVEZMQUdTCV9JT1IoJ2YnLCAxLCBsb25nKQorI2RlZmluZSBPQ0ZTMl9JT0NfU0VURkxBR1MJX0lPVygnZicsIDIsIGxvbmcpCisKIC8qCiAgKiBKb3VybmFsIEZsYWdzIChvY2ZzMl9kaW5vZGUuaWQxLmpvdXJuYWwxLmlfZmxhZ3MpCiAgKi8KQEAgLTM5OSw3ICs0MTksOSBAQAogCV9fbGUzMiBpX2F0aW1lX25zZWM7CiAJX19sZTMyIGlfY3RpbWVfbnNlYzsKIAlfX2xlMzIgaV9tdGltZV9uc2VjOwotLyo3MCovCV9fbGU2NCBpX3Jlc2VydmVkMVs5XTsKKwlfX2xlMzIgaV9hdHRyOworCV9fbGUzMiBpX3Jlc2VydmVkMTsKKy8qNzAqLwlfX2xlNjQgaV9yZXNlcnZlZDJbOF07CiAvKkI4Ki8JdW5pb24gewogCQlfX2xlNjQgaV9wYWQxOwkJLyogR2VuZXJpYyB3YXkgdG8gcmVmZXIgdG8gdGhpcwogCQkJCQkgICA2NGJpdCB1bmlvbiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggMTk1NTIzMC4uOWQ5MWU2NiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC03MCwxMiArNzAsNiBAQAogCQkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdyb3VwX2JoLAogCQkJCSAgICB1MzIgYml0c193YW50ZWQsIHUzMiBtaW5fYml0cywKIAkJCQkgICAgdTE2ICpiaXRfb2ZmLCB1MTYgKmJpdHNfZm91bmQpOwotc3RhdGljIGludCBvY2ZzMl9zZWFyY2hfY2hhaW4oc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAotCQkJICAgICAgdTMyIGJpdHNfd2FudGVkLAotCQkJICAgICAgdTMyIG1pbl9iaXRzLAotCQkJICAgICAgdTE2ICpiaXRfb2ZmLAotCQkJICAgICAgdW5zaWduZWQgaW50ICpudW1fYml0cywKLQkJCSAgICAgIHU2NCAqYmdfYmxrbm8pOwogc3RhdGljIGludCBvY2ZzMl9jbGFpbV9zdWJhbGxvY19iaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAogCQkJCSAgICAgdTMyIGJpdHNfd2FudGVkLApAQCAtODUsMTEgKzc5LDYgQEAKIAkJCQkgICAgIHU2NCAqYmdfYmxrbm8pOwogc3RhdGljIGludCBvY2ZzMl90ZXN0X2JnX2JpdF9hbGxvY2F0YWJsZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJnX2JoLAogCQkJCQkgaW50IG5yKTsKLXN0YXRpYyBpbnQgb2NmczJfYmxvY2tfZ3JvdXBfZmluZF9jbGVhcl9iaXRzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAotCQkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmdfYmgsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50IGJpdHNfd2FudGVkLAotCQkJCQkgICAgIHUxNiAqYml0X29mZiwKLQkJCQkJICAgICB1MTYgKmJpdHNfZm91bmQpOwogc3RhdGljIGlubGluZSBpbnQgb2NmczJfYmxvY2tfZ3JvdXBfc2V0X2JpdHMoc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpoYW5kbGUsCiAJCQkJCSAgICAgc3RydWN0IGlub2RlICphbGxvY19pbm9kZSwKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqYmcsCkBAIC0xNDMsNiArMTMyLDY0IEBACiAJcmV0dXJuICh1MzIpbGUxNl90b19jcHUoY2wtPmNsX2NwZykgKiAodTMyKWxlMTZfdG9fY3B1KGNsLT5jbF9icGMpOwogfQogCisvKiBzb21ld2hhdCBtb3JlIGV4cGVuc2l2ZSB0aGFuIG91ciBvdGhlciBjaGVja3MsIHNvIHVzZSBzcGFyaW5nbHkuICovCitzdGF0aWMgaW50IG9jZnMyX2NoZWNrX2dyb3VwX2Rlc2NyaXB0b3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGksCisJCQkJCXN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICpnZCkKK3sKKwl1bnNpZ25lZCBpbnQgbWF4X2JpdHM7CisKKwlpZiAoIU9DRlMyX0lTX1ZBTElEX0dST1VQX0RFU0MoZ2QpKSB7CisJCU9DRlMyX1JPX09OX0lOVkFMSURfR1JPVVBfREVTQyhzYiwgZ2QpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZGktPmlfYmxrbm8gIT0gZ2QtPmJnX3BhcmVudF9kaW5vZGUpIHsKKwkJb2NmczJfZXJyb3Ioc2IsICJHcm91cCBkZXNjcmlwdG9yICMgJWxsdSBoYXMgYmFkIHBhcmVudCAiCisJCQkgICAgInBvaW50ZXIgKCVsbHUsIGV4cGVjdGVkICVsbHUpIiwKKwkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWxlNjRfdG9fY3B1KGdkLT5iZ19ibGtubyksCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShnZC0+YmdfcGFyZW50X2Rpbm9kZSksCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShkaS0+aV9ibGtubykpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwltYXhfYml0cyA9IGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9jaGFpbi5jbF9jcGcpICogbGUxNl90b19jcHUoZGktPmlkMi5pX2NoYWluLmNsX2JwYyk7CisJaWYgKGxlMTZfdG9fY3B1KGdkLT5iZ19iaXRzKSA+IG1heF9iaXRzKSB7CisJCW9jZnMyX2Vycm9yKHNiLCAiR3JvdXAgZGVzY3JpcHRvciAjICVsbHUgaGFzIGJpdCBjb3VudCBvZiAldSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShnZC0+YmdfYmxrbm8pLAorCQkJICAgIGxlMTZfdG9fY3B1KGdkLT5iZ19iaXRzKSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChsZTE2X3RvX2NwdShnZC0+YmdfY2hhaW4pID49CisJICAgIGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9jaGFpbi5jbF9uZXh0X2ZyZWVfcmVjKSkgeworCQlvY2ZzMl9lcnJvcihzYiwgIkdyb3VwIGRlc2NyaXB0b3IgIyAlbGx1IGhhcyBiYWQgY2hhaW4gJXUiLAorCQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZ2QtPmJnX2Jsa25vKSwKKwkJCSAgICBsZTE2X3RvX2NwdShnZC0+YmdfY2hhaW4pKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGxlMTZfdG9fY3B1KGdkLT5iZ19mcmVlX2JpdHNfY291bnQpID4gbGUxNl90b19jcHUoZ2QtPmJnX2JpdHMpKSB7CisJCW9jZnMyX2Vycm9yKHNiLCAiR3JvdXAgZGVzY3JpcHRvciAjICVsbHUgaGFzIGJpdCBjb3VudCAldSBidXQgIgorCQkJICAgICJjbGFpbXMgdGhhdCAldSBhcmUgZnJlZSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShnZC0+YmdfYmxrbm8pLAorCQkJICAgIGxlMTZfdG9fY3B1KGdkLT5iZ19iaXRzKSwKKwkJCSAgICBsZTE2X3RvX2NwdShnZC0+YmdfZnJlZV9iaXRzX2NvdW50KSk7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChsZTE2X3RvX2NwdShnZC0+YmdfYml0cykgPiAoOCAqIGxlMTZfdG9fY3B1KGdkLT5iZ19zaXplKSkpIHsKKwkJb2NmczJfZXJyb3Ioc2IsICJHcm91cCBkZXNjcmlwdG9yICMgJWxsdSBoYXMgYml0IGNvdW50ICV1IGJ1dCAiCisJCQkgICAgIm1heCBiaXRtYXAgYml0cyBvZiAldSIsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsZTY0X3RvX2NwdShnZC0+YmdfYmxrbm8pLAorCQkJICAgIGxlMTZfdG9fY3B1KGdkLT5iZ19iaXRzKSwKKwkJCSAgICA4ICogbGUxNl90b19jcHUoZ2QtPmJnX3NpemUpKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgb2NmczJfYmxvY2tfZ3JvdXBfZmlsbChzdHJ1Y3Qgb2NmczJfam91cm5hbF9oYW5kbGUgKmhhbmRsZSwKIAkJCQkgIHN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUsCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJnX2JoLApAQCAtNjYzLDYgKzcxMCw3IEBACiBzdGF0aWMgaW50IG9jZnMyX2Jsb2NrX2dyb3VwX2ZpbmRfY2xlYXJfYml0cyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJnX2JoLAogCQkJCQkgICAgIHVuc2lnbmVkIGludCBiaXRzX3dhbnRlZCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgdG90YWxfYml0cywKIAkJCQkJICAgICB1MTYgKmJpdF9vZmYsCiAJCQkJCSAgICAgdTE2ICpiaXRzX2ZvdW5kKQogewpAQCAtNjc5LDEwICs3MjcsOCBAQAogCWZvdW5kID0gc3RhcnQgPSBiZXN0X29mZnNldCA9IGJlc3Rfc2l6ZSA9IDA7CiAJYml0bWFwID0gYmctPmJnX2JpdG1hcDsKIAotCXdoaWxlKChvZmZzZXQgPSBvY2ZzMl9maW5kX25leHRfemVyb19iaXQoYml0bWFwLAotCQkJCQkJIGxlMTZfdG9fY3B1KGJnLT5iZ19iaXRzKSwKLQkJCQkJCSBzdGFydCkpICE9IC0xKSB7Ci0JCWlmIChvZmZzZXQgPT0gbGUxNl90b19jcHUoYmctPmJnX2JpdHMpKQorCXdoaWxlKChvZmZzZXQgPSBvY2ZzMl9maW5kX25leHRfemVyb19iaXQoYml0bWFwLCB0b3RhbF9iaXRzLCBzdGFydCkpICE9IC0xKSB7CisJCWlmIChvZmZzZXQgPT0gdG90YWxfYml0cykKIAkJCWJyZWFrOwogCiAJCWlmICghb2NmczJfdGVzdF9iZ19iaXRfYWxsb2NhdGFibGUoYmdfYmgsIG9mZnNldCkpIHsKQEAgLTkxMSwxNCArOTU3LDM1IEBACiB7CiAJaW50IHNlYXJjaCA9IC1FTk9TUEM7CiAJaW50IHJldDsKLQlzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqYmcgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfZ3JvdXBfZGVzYyAqZ2QgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKIAl1MTYgdG1wX29mZiwgdG1wX2ZvdW5kOworCXVuc2lnbmVkIGludCBtYXhfYml0cywgZ2RfY2x1c3Rlcl9vZmY7CiAKIAlCVUdfT04oIW9jZnMyX2lzX2NsdXN0ZXJfYml0bWFwKGlub2RlKSk7CiAKLQlpZiAoYmctPmJnX2ZyZWVfYml0c19jb3VudCkgeworCWlmIChnZC0+YmdfZnJlZV9iaXRzX2NvdW50KSB7CisJCW1heF9iaXRzID0gbGUxNl90b19jcHUoZ2QtPmJnX2JpdHMpOworCisJCS8qIFRhaWwgZ3JvdXBzIGluIGNsdXN0ZXIgYml0bWFwcyB3aGljaCBhcmVuJ3QgY3BnCisJCSAqIGFsaWduZWQgYXJlIHByb25lIHRvIHBhcnRpYWwgZXh0ZW50aW9uIGJ5IGEgZmFpbGVkCisJCSAqIGZzIHJlc2l6ZS4gSWYgdGhlIGZpbGUgc3lzdGVtIHJlc2l6ZSBuZXZlciBnb3QgdG8KKwkJICogdXBkYXRlIHRoZSBkaW5vZGUgY2x1c3RlciBjb3VudCwgdGhlbiB3ZSBkb24ndCB3YW50CisJCSAqIHRvIHRydXN0IGFueSBjbHVzdGVycyBwYXN0IGl0LCByZWdhcmRsZXNzIG9mIHdoYXQKKwkJICogdGhlIGdyb3VwIGRlc2NyaXB0b3Igc2F5cy4gKi8KKwkJZ2RfY2x1c3Rlcl9vZmYgPSBvY2ZzMl9ibG9ja3NfdG9fY2x1c3RlcnMoaW5vZGUtPmlfc2IsCisJCQkJCQkJICBsZTY0X3RvX2NwdShnZC0+YmdfYmxrbm8pKTsKKwkJaWYgKChnZF9jbHVzdGVyX29mZiArIG1heF9iaXRzKSA+CisJCSAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMpIHsKKwkJCW1heF9iaXRzID0gT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzIC0gZ2RfY2x1c3Rlcl9vZmY7CisJCQltbG9nKDAsICJEZXNjICVsbHUsIGJnX2JpdHMgJXUsIGNsdXN0ZXJzICV1LCB1c2UgJXVcbiIsCisJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbGU2NF90b19jcHUoZ2QtPmJnX2Jsa25vKSwKKwkJCSAgICAgbGUxNl90b19jcHUoZ2QtPmJnX2JpdHMpLAorCQkJICAgICBPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMsIG1heF9iaXRzKTsKKwkJfQorCiAJCXJldCA9IG9jZnMyX2Jsb2NrX2dyb3VwX2ZpbmRfY2xlYXJfYml0cyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCiAJCQkJCQkJZ3JvdXBfYmgsIGJpdHNfd2FudGVkLAorCQkJCQkJCW1heF9iaXRzLAogCQkJCQkJCSZ0bXBfb2ZmLCAmdG1wX2ZvdW5kKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CkBAIC05NTEsMTcgKzEwMTgsMTA5IEBACiAJaWYgKGJnLT5iZ19mcmVlX2JpdHNfY291bnQpCiAJCXJldCA9IG9jZnMyX2Jsb2NrX2dyb3VwX2ZpbmRfY2xlYXJfYml0cyhPQ0ZTMl9TQihpbm9kZS0+aV9zYiksCiAJCQkJCQkJZ3JvdXBfYmgsIGJpdHNfd2FudGVkLAorCQkJCQkJCWxlMTZfdG9fY3B1KGJnLT5iZ19iaXRzKSwKIAkJCQkJCQliaXRfb2ZmLCBiaXRzX2ZvdW5kKTsKIAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgb2NmczJfYWxsb2NfZGlub2RlX3VwZGF0ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgICAgc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpoYW5kbGUsCisJCQkJICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqZGlfYmgsCisJCQkJICAgICAgIHUzMiBudW1fYml0cywKKwkJCQkgICAgICAgdTE2IGNoYWluKQoreworCWludCByZXQ7CisJdTMyIHRtcF91c2VkOworCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKikgZGlfYmgtPmJfZGF0YTsKKwlzdHJ1Y3Qgb2NmczJfY2hhaW5fbGlzdCAqY2wgPSAoc3RydWN0IG9jZnMyX2NoYWluX2xpc3QgKikgJmRpLT5pZDIuaV9jaGFpbjsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgaW5vZGUsIGRpX2JoLAorCQkJCSAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKKwlpZiAocmV0IDwgMCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXRtcF91c2VkID0gbGUzMl90b19jcHUoZGktPmlkMS5iaXRtYXAxLmlfdXNlZCk7CisJZGktPmlkMS5iaXRtYXAxLmlfdXNlZCA9IGNwdV90b19sZTMyKG51bV9iaXRzICsgdG1wX3VzZWQpOworCWxlMzJfYWRkX2NwdSgmY2wtPmNsX3JlY3NbY2hhaW5dLmNfZnJlZSwgLW51bV9iaXRzKTsKKworCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBkaV9iaCk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfc2VhcmNoX29uZV9ncm91cChzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCisJCQkJICB1MzIgYml0c193YW50ZWQsCisJCQkJICB1MzIgbWluX2JpdHMsCisJCQkJICB1MTYgKmJpdF9vZmYsCisJCQkJICB1bnNpZ25lZCBpbnQgKm51bV9iaXRzLAorCQkJCSAgdTY0IGdkX2Jsa25vLAorCQkJCSAgdTE2ICpiaXRzX2xlZnQpCit7CisJaW50IHJldDsKKwl1MTYgZm91bmQ7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpncm91cF9iaCA9IE5VTEw7CisJc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKmdkOworCXN0cnVjdCBpbm9kZSAqYWxsb2NfaW5vZGUgPSBhYy0+YWNfaW5vZGU7CisJc3RydWN0IG9jZnMyX2pvdXJuYWxfaGFuZGxlICpoYW5kbGUgPSBhYy0+YWNfaGFuZGxlOworCisJcmV0ID0gb2NmczJfcmVhZF9ibG9jayhPQ0ZTMl9TQihhbGxvY19pbm9kZS0+aV9zYiksIGdkX2Jsa25vLAorCQkJICAgICAgICZncm91cF9iaCwgT0NGUzJfQkhfQ0FDSEVELCBhbGxvY19pbm9kZSk7CisJaWYgKHJldCA8IDApIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCWdkID0gKHN0cnVjdCBvY2ZzMl9ncm91cF9kZXNjICopIGdyb3VwX2JoLT5iX2RhdGE7CisJaWYgKCFPQ0ZTMl9JU19WQUxJRF9HUk9VUF9ERVNDKGdkKSkgeworCQlPQ0ZTMl9ST19PTl9JTlZBTElEX0dST1VQX0RFU0MoYWxsb2NfaW5vZGUtPmlfc2IsIGdkKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gYWMtPmFjX2dyb3VwX3NlYXJjaChhbGxvY19pbm9kZSwgZ3JvdXBfYmgsIGJpdHNfd2FudGVkLCBtaW5fYml0cywKKwkJCQkgIGJpdF9vZmYsICZmb3VuZCk7CisJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkqbnVtX2JpdHMgPSBmb3VuZDsKKworCXJldCA9IG9jZnMyX2FsbG9jX2Rpbm9kZV91cGRhdGVfY291bnRzKGFsbG9jX2lub2RlLCBoYW5kbGUsIGFjLT5hY19iaCwKKwkJCQkJICAgICAgICpudW1fYml0cywKKwkJCQkJICAgICAgIGxlMTZfdG9fY3B1KGdkLT5iZ19jaGFpbikpOworCWlmIChyZXQgPCAwKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gb2NmczJfYmxvY2tfZ3JvdXBfc2V0X2JpdHMoaGFuZGxlLCBhbGxvY19pbm9kZSwgZ2QsIGdyb3VwX2JoLAorCQkJCQkgKmJpdF9vZmYsICpudW1fYml0cyk7CisJaWYgKHJldCA8IDApCisJCW1sb2dfZXJybm8ocmV0KTsKKworCSpiaXRzX2xlZnQgPSBsZTE2X3RvX2NwdShnZC0+YmdfZnJlZV9iaXRzX2NvdW50KTsKKworb3V0OgorCWJyZWxzZShncm91cF9iaCk7CisKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IG9jZnMyX3NlYXJjaF9jaGFpbihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMsCiAJCQkgICAgICB1MzIgYml0c193YW50ZWQsCiAJCQkgICAgICB1MzIgbWluX2JpdHMsCiAJCQkgICAgICB1MTYgKmJpdF9vZmYsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgKm51bV9iaXRzLAotCQkJICAgICAgdTY0ICpiZ19ibGtubykKKwkJCSAgICAgIHU2NCAqYmdfYmxrbm8sCisJCQkgICAgICB1MTYgKmJpdHNfbGVmdCkKIHsKIAlpbnQgc3RhdHVzOwogCXUxNiBjaGFpbiwgdG1wX2JpdHM7CkBAIC05ODgsOSArMTE0Nyw5IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAJYmcgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKLQlpZiAoIU9DRlMyX0lTX1ZBTElEX0dST1VQX0RFU0MoYmcpKSB7Ci0JCU9DRlMyX1JPX09OX0lOVkFMSURfR1JPVVBfREVTQyhhbGxvY19pbm9kZS0+aV9zYiwgYmcpOwotCQlzdGF0dXMgPSAtRUlPOworCXN0YXR1cyA9IG9jZnMyX2NoZWNrX2dyb3VwX2Rlc2NyaXB0b3IoYWxsb2NfaW5vZGUtPmlfc2IsIGZlLCBiZyk7CisJaWYgKHN0YXR1cykgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAKQEAgLTEwMTgsOSArMTE3Nyw5IEBACiAJCQlnb3RvIGJhaWw7CiAJCX0KIAkJYmcgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKLQkJaWYgKCFPQ0ZTMl9JU19WQUxJRF9HUk9VUF9ERVNDKGJnKSkgewotCQkJT0NGUzJfUk9fT05fSU5WQUxJRF9HUk9VUF9ERVNDKGFsbG9jX2lub2RlLT5pX3NiLCBiZyk7Ci0JCQlzdGF0dXMgPSAtRUlPOworCQlzdGF0dXMgPSBvY2ZzMl9jaGVja19ncm91cF9kZXNjcmlwdG9yKGFsbG9jX2lub2RlLT5pX3NiLCBmZSwgYmcpOworCQlpZiAoc3RhdHVzKSB7CisJCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCQlnb3RvIGJhaWw7CiAJCX0KIAl9CkBAIC0xMDk5LDYgKzEyNTgsNyBAQAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmZS0+aV9ibGtubyk7CiAKIAkqYmdfYmxrbm8gPSBsZTY0X3RvX2NwdShiZy0+YmdfYmxrbm8pOworCSpiaXRzX2xlZnQgPSBsZTE2X3RvX2NwdShiZy0+YmdfZnJlZV9iaXRzX2NvdW50KTsKIGJhaWw6CiAJaWYgKGdyb3VwX2JoKQogCQlicmVsc2UoZ3JvdXBfYmgpOwpAQCAtMTEyMCw2ICsxMjgwLDggQEAKIHsKIAlpbnQgc3RhdHVzOwogCXUxNiB2aWN0aW0sIGk7CisJdTE2IGJpdHNfbGVmdCA9IDA7CisJdTY0IGhpbnRfYmxrbm8gPSBhYy0+YWNfbGFzdF9ncm91cDsKIAlzdHJ1Y3Qgb2NmczJfY2hhaW5fbGlzdCAqY2w7CiAJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZmU7CiAKQEAgLTExNDYsNiArMTMwOCwyOCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJaWYgKGhpbnRfYmxrbm8pIHsKKwkJLyogQXR0ZW1wdCB0byBzaG9ydC1jaXJjdWl0IHRoZSB1c3VhbCBzZWFyY2ggbWVjaGFuaXNtCisJCSAqIGJ5IGp1bXBpbmcgc3RyYWlnaHQgdG8gdGhlIG1vc3QgcmVjZW50bHkgdXNlZAorCQkgKiBhbGxvY2F0aW9uIGdyb3VwLiBUaGlzIGhlbHBzIHVzIG1hbnRhaW4gc29tZQorCQkgKiBjb250aWd1b3VzbmVzcyBhY3Jvc3MgYWxsb2NhdGlvbnMuICovCisJCXN0YXR1cyA9IG9jZnMyX3NlYXJjaF9vbmVfZ3JvdXAoYWMsIGJpdHNfd2FudGVkLCBtaW5fYml0cywKKwkJCQkJCWJpdF9vZmYsIG51bV9iaXRzLAorCQkJCQkJaGludF9ibGtubywgJmJpdHNfbGVmdCk7CisJCWlmICghc3RhdHVzKSB7CisJCQkvKiBCZSBjYXJlZnVsIHRvIHVwZGF0ZSAqYmdfYmxrbm8gaGVyZSBhcyB0aGUKKwkJCSAqIGNhbGxlciBpcyBleHBlY3RpbmcgaXQgdG8gYmUgZmlsbGVkIGluLCBhbmQKKwkJCSAqIG9jZnMyX3NlYXJjaF9vbmVfZ3JvdXAoKSB3b24ndCBkbyB0aGF0IGZvcgorCQkJICogdXMuICovCisJCQkqYmdfYmxrbm8gPSBoaW50X2Jsa25vOworCQkJZ290byBzZXRfaGludDsKKwkJfQorCQlpZiAoc3RhdHVzIDwgMCAmJiBzdGF0dXMgIT0gLUVOT1NQQykgeworCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQkJZ290byBiYWlsOworCQl9CisJfQorCiAJY2wgPSAoc3RydWN0IG9jZnMyX2NoYWluX2xpc3QgKikgJmZlLT5pZDIuaV9jaGFpbjsKIAogCXZpY3RpbSA9IG9jZnMyX2ZpbmRfdmljdGltX2NoYWluKGNsKTsKQEAgLTExNTMsOSArMTMzNyw5IEBACiAJYWMtPmFjX2FsbG93X2NoYWluX3JlbGluayA9IDE7CiAKIAlzdGF0dXMgPSBvY2ZzMl9zZWFyY2hfY2hhaW4oYWMsIGJpdHNfd2FudGVkLCBtaW5fYml0cywgYml0X29mZiwKLQkJCQkgICAgbnVtX2JpdHMsIGJnX2Jsa25vKTsKKwkJCQkgICAgbnVtX2JpdHMsIGJnX2Jsa25vLCAmYml0c19sZWZ0KTsKIAlpZiAoIXN0YXR1cykKLQkJZ290byBiYWlsOworCQlnb3RvIHNldF9oaW50OwogCWlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRU5PU1BDKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKIAkJZ290byBiYWlsOwpAQCAtMTE3Nyw4ICsxMzYxLDggQEAKIAogCQlhYy0+YWNfY2hhaW4gPSBpOwogCQlzdGF0dXMgPSBvY2ZzMl9zZWFyY2hfY2hhaW4oYWMsIGJpdHNfd2FudGVkLCBtaW5fYml0cywKLQkJCQkJICAgIGJpdF9vZmYsIG51bV9iaXRzLAotCQkJCQkgICAgYmdfYmxrbm8pOworCQkJCQkgICAgYml0X29mZiwgbnVtX2JpdHMsIGJnX2Jsa25vLAorCQkJCQkgICAgJmJpdHNfbGVmdCk7CiAJCWlmICghc3RhdHVzKQogCQkJYnJlYWs7CiAJCWlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRU5PU1BDKSB7CkBAIC0xMTg2LDggKzEzNzAsMTkgQEAKIAkJCWdvdG8gYmFpbDsKIAkJfQogCX0KLWJhaWw6CiAKK3NldF9oaW50OgorCWlmIChzdGF0dXMgIT0gLUVOT1NQQykgeworCQkvKiBJZiB0aGUgbmV4dCBzZWFyY2ggb2YgdGhpcyBncm91cCBpcyBub3QgbGlrZWx5IHRvCisJCSAqIHlpZWxkIGEgc3VpdGFibGUgZXh0ZW50LCB0aGVuIHdlIHJlc2V0IHRoZSBsYXN0CisJCSAqIGdyb3VwIGhpbnQgc28gYXMgdG8gbm90IHdhc3RlIGEgZGlzayByZWFkICovCisJCWlmIChiaXRzX2xlZnQgPCBtaW5fYml0cykKKwkJCWFjLT5hY19sYXN0X2dyb3VwID0gMDsKKwkJZWxzZQorCQkJYWMtPmFjX2xhc3RfZ3JvdXAgPSAqYmdfYmxrbm87CisJfQorCitiYWlsOgogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0xMzQxLDcgKzE1MzYsNyBAQAogewogCWludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGJpdHNfd2FudGVkID0gYWMtPmFjX2JpdHNfd2FudGVkIC0gYWMtPmFjX2JpdHNfZ2l2ZW47Ci0JdTY0IGJnX2Jsa25vOworCXU2NCBiZ19ibGtubyA9IDA7CiAJdTE2IGJnX2JpdF9vZmY7CiAKIAltbG9nX2VudHJ5X3ZvaWQoKTsKQEAgLTE0OTQsOSArMTY4OSw5IEBACiAJfQogCiAJZ3JvdXAgPSAoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKikgZ3JvdXBfYmgtPmJfZGF0YTsKLQlpZiAoIU9DRlMyX0lTX1ZBTElEX0dST1VQX0RFU0MoZ3JvdXApKSB7Ci0JCU9DRlMyX1JPX09OX0lOVkFMSURfR1JPVVBfREVTQyhhbGxvY19pbm9kZS0+aV9zYiwgZ3JvdXApOwotCQlzdGF0dXMgPSAtRUlPOworCXN0YXR1cyA9IG9jZnMyX2NoZWNrX2dyb3VwX2Rlc2NyaXB0b3IoYWxsb2NfaW5vZGUtPmlfc2IsIGZlLCBncm91cCk7CisJaWYgKHN0YXR1cykgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CiAJCWdvdG8gYmFpbDsKIAl9CiAJQlVHX09OKChjb3VudCArIHN0YXJ0X2JpdCkgPiBsZTE2X3RvX2NwdShncm91cC0+YmdfYml0cykpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuaCBiL2ZzL29jZnMyL3N1YmFsbG9jLmgKaW5kZXggYTc2YzgyYS4uYzc4NzgzOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuaAorKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5oCkBAIC00OSw2ICs0OSw4IEBACiAJdTE2ICAgIGFjX2NoYWluOwogCWludCAgICBhY19hbGxvd19jaGFpbl9yZWxpbms7CiAJZ3JvdXBfc2VhcmNoX3QgKmFjX2dyb3VwX3NlYXJjaDsKKworCXU2NCAgICBhY19sYXN0X2dyb3VwOwogfTsKIAogdm9pZCBvY2ZzMl9mcmVlX2FsbG9jX2NvbnRleHQoc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1cGVyLmMgYi9mcy9vY2ZzMi9zdXBlci5jCmluZGV4IDM4MjcwNmEuLmQxN2UzM2UgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1cGVyLmMKKysrIGIvZnMvb2NmczIvc3VwZXIuYwpAQCAtMTQ0Miw4ICsxNDQyLDEzIEBACiAKIAlvc2ItPmJpdG1hcF9ibGtubyA9IE9DRlMyX0koaW5vZGUpLT5pcF9ibGtubzsKIAorCS8qIFdlIGRvbid0IGhhdmUgYSBjbHVzdGVyIGxvY2sgb24gdGhlIGJpdG1hcCBoZXJlIGJlY2F1c2UKKwkgKiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gc3RhdGljIGluZm9ybWF0aW9uIGFuZCB0aGUgZXh0cmEKKwkgKiBjb21wbGV4aXR5IGF0IG1vdW50IHRpbWUgaXNuJ3Qgd29yaHQgaXQuIERvbid0IHBhc3MgdGhlCisJICogaW5vZGUgaW4gdG8gdGhlIHJlYWQgZnVuY3Rpb24gdGhvdWdoIGFzIHdlIGRvbid0IHdhbnQgaXQgdG8KKwkgKiBiZSBwdXQgaW4gdGhlIGNhY2hlLiAqLwogCXN0YXR1cyA9IG9jZnMyX3JlYWRfYmxvY2sob3NiLCBvc2ItPmJpdG1hcF9ibGtubywgJmJpdG1hcF9iaCwgMCwKLQkJCQkgIGlub2RlKTsKKwkJCQkgIE5VTEwpOwogCWlwdXQoaW5vZGUpOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTE0NTIsNyArMTQ1Nyw2IEBACiAKIAlkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGJpdG1hcF9iaC0+Yl9kYXRhOwogCW9zYi0+Yml0bWFwX2NwZyA9IGxlMTZfdG9fY3B1KGRpLT5pZDIuaV9jaGFpbi5jbF9jcGcpOwotCW9zYi0+bnVtX2NsdXN0ZXJzID0gbGUzMl90b19jcHUoZGktPmlkMS5iaXRtYXAxLmlfdG90YWwpOwogCWJyZWxzZShiaXRtYXBfYmgpOwogCW1sb2coMCwgImNsdXN0ZXIgYml0bWFwIGlub2RlOiAlbGx1LCBjbHVzdGVycyBwZXIgZ3JvdXA6ICV1XG4iLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylvc2ItPmJpdG1hcF9ibGtubywgb3NiLT5iaXRtYXBfY3BnKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3VwdG9kYXRlLmMgYi9mcy9vY2ZzMi91cHRvZGF0ZS5jCmluZGV4IGI4YTAwYTcuLjk3MDdlZDcgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3VwdG9kYXRlLmMKKysrIGIvZnMvb2NmczIvdXB0b2RhdGUuYwpAQCAtMjA2LDcgKzIwNiwxMCBAQAogfQogCiAvKiBXYXJuaW5nOiBldmVuIGlmIGl0IHJldHVybnMgdHJ1ZSwgdGhpcyBkb2VzICpub3QqIGd1YXJhbnRlZSB0aGF0Ci0gKiB0aGUgYmxvY2sgaXMgc3RvcmVkIGluIG91ciBpbm9kZSBtZXRhZGF0YSBjYWNoZS4gKi8KKyAqIHRoZSBibG9jayBpcyBzdG9yZWQgaW4gb3VyIGlub2RlIG1ldGFkYXRhIGNhY2hlLiAKKyAqIAorICogVGhpcyBjYW4gYmUgY2FsbGVkIHVuZGVyIGxvY2tfYnVmZmVyKCkKKyAqLwogaW50IG9jZnMyX2J1ZmZlcl91cHRvZGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpAQCAtMjI2LDYgKzIyOSwxNiBAQAogCXJldHVybiBvY2ZzMl9idWZmZXJfY2FjaGVkKE9DRlMyX0koaW5vZGUpLCBiaCk7CiB9CiAKKy8qIAorICogRGV0ZXJtaW5lIHdoZXRoZXIgYSBidWZmZXIgaXMgY3VycmVudGx5IG91dCBvbiBhIHJlYWQtYWhlYWQgcmVxdWVzdC4KKyAqIGlwX2lvX3NlbSBzaG91bGQgYmUgaGVsZCB0byBzZXJpYWxpemUgc3VibWl0dGVycyB3aXRoIHRoZSBsb2dpYyBoZXJlLgorICovCitpbnQgb2NmczJfYnVmZmVyX3JlYWRfYWhlYWQoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQoreworCXJldHVybiBidWZmZXJfbG9ja2VkKGJoKSAmJiBvY2ZzMl9idWZmZXJfY2FjaGVkKE9DRlMyX0koaW5vZGUpLCBiaCk7Cit9CisKIC8qIFJlcXVpcmVzIGlwX2xvY2sgKi8KIHN0YXRpYyB2b2lkIG9jZnMyX2FwcGVuZF9jYWNoZV9hcnJheShzdHJ1Y3Qgb2NmczJfY2FjaGluZ19pbmZvICpjaSwKIAkJCQkgICAgIHNlY3Rvcl90IGJsb2NrKQpAQCAtNDAzLDcgKzQxNiwxMSBAQAogICoKICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG1heSBhY3R1YWxseSBmYWlsIHRvIGluc2VydCB0aGUgYmxvY2sgaWYKICAqIG1lbW9yeSBjYW5ub3QgYmUgYWxsb2NhdGVkLiBUaGlzIGlzIG5vdCBmYXRhbCBob3dldmVyIChidXQgbWF5Ci0gKiByZXN1bHQgaW4gYSBwZXJmb3JtYW5jZSBwZW5hbHR5KSAqLworICogcmVzdWx0IGluIGEgcGVyZm9ybWFuY2UgcGVuYWx0eSkKKyAqCisgKiBSZWFkYWhlYWQgYnVmZmVycyBjYW4gYmUgcGFzc2VkIGluIGhlcmUgYmVmb3JlIHRoZSBJL08gcmVxdWVzdCBpcworICogY29tcGxldGVkLgorICovCiB2b2lkIG9jZnMyX3NldF9idWZmZXJfdXB0b2RhdGUoc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvdXB0b2RhdGUuaCBiL2ZzL29jZnMyL3VwdG9kYXRlLmgKaW5kZXggMDFjZDMyZC4uMmU3MzIwNiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvdXB0b2RhdGUuaAorKysgYi9mcy9vY2ZzMi91cHRvZGF0ZS5oCkBAIC00MCw1ICs0MCw3IEBACiAJCQkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiB2b2lkIG9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOworaW50IG9jZnMyX2J1ZmZlcl9yZWFkX2FoZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7CiAKICNlbmRpZiAvKiBPQ0ZTMl9VUFRPREFURV9IICovCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL0tjb25maWcgYi9mcy9wYXJ0aXRpb25zL0tjb25maWcKaW5kZXggYzlhNDc4MC4uZTQ3OGYxOSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9LY29uZmlnCisrKyBiL2ZzL3BhcnRpdGlvbnMvS2NvbmZpZwpAQCAtOTksNyArOTksNyBAQAogCiBjb25maWcgTUFDX1BBUlRJVElPTgogCWJvb2wgIk1hY2ludG9zaCBwYXJ0aXRpb24gbWFwIHN1cHBvcnQiIGlmIFBBUlRJVElPTl9BRFZBTkNFRAotCWRlZmF1bHQgeSBpZiBNQUMKKwlkZWZhdWx0IHkgaWYgKE1BQyB8fCBQUENfUE1BQykKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3b3VsZCBsaWtlIHRvIHVzZSBoYXJkIGRpc2tzIHVuZGVyIExpbnV4IHdoaWNoCiAJICB3ZXJlIHBhcnRpdGlvbmVkIG9uIGEgTWFjaW50b3NoLgpkaWZmIC0tZ2l0IGEvZnMvcGFydGl0aW9ucy9zdW4uYyBiL2ZzL3BhcnRpdGlvbnMvc3VuLmMKaW5kZXggYWJlOTFjYS4uMGE1OTI3YyAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9zdW4uYworKysgYi9mcy9wYXJ0aXRpb25zL3N1bi5jCkBAIC03NCw3ICs3NCw3IEBACiAJc3BjID0gYmUxNl90b19jcHUobGFiZWwtPm50cmtzKSAqIGJlMTZfdG9fY3B1KGxhYmVsLT5uc2VjdCk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKywgcCsrKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3Rfc2VjdG9yOwotCQlpbnQgbnVtX3NlY3RvcnM7CisJCXVuc2lnbmVkIGludCBudW1fc2VjdG9yczsKIAogCQlzdF9zZWN0b3IgPSBiZTMyX3RvX2NwdShwLT5zdGFydF9jeWxpbmRlcikgKiBzcGM7CiAJCW51bV9zZWN0b3JzID0gYmUzMl90b19jcHUocC0+bnVtX3NlY3RvcnMpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX21pc2MuYyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKaW5kZXggOWYyY2ZjMy4uOTQyMTU2MiAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX21pc2MuYworKysgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkJIk1hcHBlZDogICAgICAgJThsdSBrQlxuIgogCQkiU2xhYjogICAgICAgICAlOGx1IGtCXG4iCiAJCSJQYWdlVGFibGVzOiAgICU4bHUga0JcbiIKLQkJIk5GUyBVbnN0YWJsZTogJThsdSBrQlxuIgorCQkiTkZTX1Vuc3RhYmxlOiAlOGx1IGtCXG4iCiAJCSJCb3VuY2U6ICAgICAgICU4bHUga0JcbiIKIAkJIkNvbW1pdExpbWl0OiAgJThsdSBrQlxuIgogCQkiQ29tbWl0dGVkX0FTOiAlOGx1IGtCXG4iCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggZjMxOGI1OC4uMTYyN2VkZCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtNDgsOCArNDgsOCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CiAJLyogZnJlZWluZyBwcmVhbGxvY2F0aW9uIG9ubHkgaW52b2x2ZXMgcmVsb2dnaW5nIGJsb2NrcyB0aGF0CiAJICogYXJlIGFscmVhZHkgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uICBwcmVhbGxvY2F0aW9uIGdldHMKIAkgKiBmcmVlZCBhdCB0aGUgZW5kIG9mIGVhY2ggdHJhbnNhY3Rpb24sIHNvIGl0IGlzIGltcG9zc2libGUgZm9yCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCAxMmRmZGNmLi41MmYxZTIxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTM5LDE0ICszOSwxMCBAQAogCiAJLyogVGhlID0gMCBoYXBwZW5zIHdoZW4gd2UgYWJvcnQgY3JlYXRpbmcgYSBuZXcgaW5vZGUgZm9yIHNvbWUgcmVhc29uIGxpa2UgbGFjayBvZiBzcGFjZS4uICovCiAJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiBJX05FVykgJiYgSU5PREVfUEtFWShpbm9kZSktPmtfb2JqZWN0aWQgIT0gMCkgewkvKiBhbHNvIGhhbmRsZXMgYmFkX2lub2RlIGNhc2UgKi8KLQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCiAJCXJlaXNlcmZzX2RlbGV0ZV94YXR0cnMoaW5vZGUpOwogCi0JCWlmIChqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCkpIHsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlpZiAoam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBqYmVnaW5fY291bnQpKQogCQkJZ290byBvdXQ7Ci0JCX0KIAkJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKIAogCQllcnIgPSByZWlzZXJmc19kZWxldGVfb2JqZWN0KCZ0aCwgaW5vZGUpOwpAQCAtNTcsMTIgKzUzLDggQEAKIAkJaWYgKCFlcnIpIAogCQkJRFFVT1RfRlJFRV9JTk9ERShpbm9kZSk7CiAKLQkJaWYgKGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCkpIHsKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlpZiAoam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KSkKIAkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAkJLyogY2hlY2sgcmV0dXJuIHZhbHVlIGZyb20gcmVpc2VyZnNfZGVsZXRlX29iamVjdCBhZnRlcgogCQkgKiBlbmRpbmcgdGhlIHRyYW5zYWN0aW9uCkBAIC0yMzQ4LDYgKzIzNDAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZW5kX2luZGV4ID0gaW5vZGUtPmlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCWludCBlcnJvciA9IDA7CiAJdW5zaWduZWQgbG9uZyBibG9jazsKKwlzZWN0b3JfdCBsYXN0X2Jsb2NrOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqaGVhZCwgKmJoOwogCWludCBwYXJ0aWFsID0gMDsKIAlpbnQgbnIgPSAwOwpAQCAtMjM5NSwxMCArMjM4OCwxOSBAQAogCX0KIAliaCA9IGhlYWQ7CiAJYmxvY2sgPSBwYWdlLT5pbmRleCA8PCAoUEFHRV9DQUNIRV9TSElGVCAtIHMtPnNfYmxvY2tzaXplX2JpdHMpOworCWxhc3RfYmxvY2sgPSAoaV9zaXplX3JlYWQoaW5vZGUpIC0gMSkgPj4gaW5vZGUtPmlfYmxrYml0czsKIAkvKiBmaXJzdCBtYXAgYWxsIHRoZSBidWZmZXJzLCBsb2dnaW5nIGFueSBkaXJlY3QgaXRlbXMgd2UgZmluZCAqLwogCWRvIHsKLQkJaWYgKChjaGVja2VkIHx8IGJ1ZmZlcl9kaXJ0eShiaCkpICYmICghYnVmZmVyX21hcHBlZChiaCkgfHwKLQkJCQkJCSAgICAgIChidWZmZXJfbWFwcGVkKGJoKQorCQlpZiAoYmxvY2sgPiBsYXN0X2Jsb2NrKSB7CisJCQkvKgorCQkJICogVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIGJsb2NrIHNpemUgaXMgbGVzcyB0aGFuCisJCQkgKiB0aGUgcGFnZSBzaXplLiAgVGhlIGNvcnJlc3BvbmRpbmcgYnl0ZXMgaW4gdGhlIHBhZ2UKKwkJCSAqIHdlcmUgemVybyBmaWxsZWQgYWJvdmUKKwkJCSAqLworCQkJY2xlYXJfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCXNldF9idWZmZXJfdXB0b2RhdGUoYmgpOworCQl9IGVsc2UgaWYgKChjaGVja2VkIHx8IGJ1ZmZlcl9kaXJ0eShiaCkpICYmCisJCSAgICAgICAgICAgKCFidWZmZXJfbWFwcGVkKGJoKSB8fCAoYnVmZmVyX21hcHBlZChiaCkKIAkJCQkJCSAgICAgICAmJiBiaC0+Yl9ibG9ja25yID09CiAJCQkJCQkgICAgICAgMCkpKSB7CiAJCQkvKiBub3QgbWFwcGVkIHlldCwgb3IgaXQgcG9pbnRzIHRvIGEgZGlyZWN0IGl0ZW0sIHNlYXJjaApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvaW9jdGwuYyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKaW5kZXggNzQ1Yzg4MS4uYTk4NmI1ZSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvaW9jdGwuYworKysgYi9mcy9yZWlzZXJmcy9pb2N0bC5jCkBAIC0xMTYsMTIgKzExNiwxMiBAQAogCWlmIChSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfbm9wYWNrX21hc2spIHsKIAkJcmV0dXJuIDA7CiAJfQotCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOwogCiAJLyogd2UgbmVlZCB0byBtYWtlIHN1cmUgbm9ib2R5IGlzIGNoYW5naW5nIHRoZSBmaWxlIHNpemUgYmVuZWF0aAogCSAqKiB1cwogCSAqLwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAogCXdyaXRlX2Zyb20gPSBpbm9kZS0+aV9zaXplICYgKGJsb2Nrc2l6ZSAtIDEpOwogCS8qIGlmIHdlIGFyZSBvbiBhIGJsb2NrIGJvdW5kYXJ5LCB3ZSBhcmUgYWxyZWFkeSB1bnBhY2tlZC4gICovCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0ci5jIGIvZnMvcmVpc2VyZnMveGF0dHIuYwppbmRleCAzOWZlZGFhLi5kOTM1ZmI5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0ci5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogCWludCByZXMgPSAtRU5PVERJUjsKIAlpZiAoIWZpbGUtPmZfb3AgfHwgIWZpbGUtPmZfb3AtPnJlYWRkaXIpCiAJCWdvdG8gb3V0OwotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwogLy8gICAgICAgIGRvd24oJmlub2RlLT5pX3pvbWJpZSk7CiAJcmVzID0gLUVOT0VOVDsKIAlpZiAoIUlTX0RFQURESVIoaW5vZGUpKSB7CmRpZmYgLS1naXQgYS9mcy9zdXBlci5jIGIvZnMvc3VwZXIuYwppbmRleCA2ZDRlODE3Li41YzRjOTRkIDEwMDY0NAotLS0gYS9mcy9zdXBlci5jCisrKyBiL2ZzL3N1cGVyLmMKQEAgLTQ5LDYgKzQ5LDcgQEAKIAogLyoqCiAgKglhbGxvY19zdXBlcgktCWNyZWF0ZSBuZXcgc3VwZXJibG9jaworICoJQHR5cGU6CWZpbGVzeXN0ZW0gdHlwZSBzdXBlcmJsb2NrIHNob3VsZCBiZWxvbmcgdG8KICAqCiAgKglBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIGEgbmV3ICZzdHJ1Y3Qgc3VwZXJfYmxvY2suICBhbGxvY19zdXBlcigpCiAgKglyZXR1cm5zIGEgcG9pbnRlciBuZXcgc3VwZXJibG9jayBvciAlTlVMTCBpZiBhbGxvY2F0aW9uIGhhZCBmYWlsZWQuCmRpZmYgLS1naXQgYS9mcy91ZGYvaWFsbG9jLmMgYi9mcy91ZGYvaWFsbG9jLmMKaW5kZXggMzg3M2M2Ny4uMzMzMjM0NyAxMDA2NDQKLS0tIGEvZnMvdWRmL2lhbGxvYy5jCisrKyBiL2ZzL3VkZi9pYWxsb2MuYwpAQCAtNzUsNiArNzUsMTIgQEAKIAl9CiAJKmVyciA9IC1FTk9TUEM7CiAKKwlVREZfSV9VTklRVUUoaW5vZGUpID0gMDsKKwlVREZfSV9MRU5FWFRFTlRTKGlub2RlKSA9IDA7CisJVURGX0lfTkVYVF9BTExPQ19CTE9DSyhpbm9kZSkgPSAwOworCVVERl9JX05FWFRfQUxMT0NfR09BTChpbm9kZSkgPSAwOworCVVERl9JX1NUUkFUNDA5Nihpbm9kZSkgPSAwOworCiAJYmxvY2sgPSB1ZGZfbmV3X2Jsb2NrKGRpci0+aV9zYiwgTlVMTCwgVURGX0lfTE9DQVRJT04oZGlyKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0sCiAJCXN0YXJ0LCBlcnIpOwogCWlmICgqZXJyKQpAQCAtODQsMTEgKzkwLDYgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOwotCVVERl9JX1VOSVFVRShpbm9kZSkgPSAwOwotCVVERl9JX0xFTkVYVEVOVFMoaW5vZGUpID0gMDsKLQlVREZfSV9ORVhUX0FMTE9DX0JMT0NLKGlub2RlKSA9IDA7Ci0JVURGX0lfTkVYVF9BTExPQ19HT0FMKGlub2RlKSA9IDA7Ci0JVURGX0lfU1RSQVQ0MDk2KGlub2RlKSA9IDA7CiAJaWYgKFVERl9TQl9MVklEQkgoc2IpKQogCXsKIAkJc3RydWN0IGxvZ2ljYWxWb2xIZWFkZXJEZXNjICpsdmhkOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL3N1cGVyLmMgYi9mcy91ZGYvc3VwZXIuYwppbmRleCA0ZGY4MjJjLi5mY2NlMWEyIDEwMDY0NAotLS0gYS9mcy91ZGYvc3VwZXIuYworKysgYi9mcy91ZGYvc3VwZXIuYwpAQCAtMTE1LDYgKzExNSwxMyBAQAogCWVpID0gKHN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqKWttZW1fY2FjaGVfYWxsb2ModWRmX2lub2RlX2NhY2hlcCwgU0xBQl9LRVJORUwpOwogCWlmICghZWkpCiAJCXJldHVybiBOVUxMOworCisJZWktPmlfdW5pcXVlID0gMDsKKwllaS0+aV9sZW5FeHRlbnRzID0gMDsKKwllaS0+aV9uZXh0X2FsbG9jX2Jsb2NrID0gMDsKKwllaS0+aV9uZXh0X2FsbG9jX2dvYWwgPSAwOworCWVpLT5pX3N0cmF0NDA5NiA9IDA7CisKIAlyZXR1cm4gJmVpLT52ZnNfaW5vZGU7CiB9CiAKQEAgLTE2NTIsNyArMTY1OSw3IEBACiAJCWlwdXQoaW5vZGUpOwogCQlnb3RvIGVycm9yX291dDsKIAl9Ci0Jc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOworCXNiLT5zX21heGJ5dGVzID0gMTw8MzA7CiAJcmV0dXJuIDA7CiAKIGVycm9yX291dDoKZGlmZiAtLWdpdCBhL2ZzL3VkZi90cnVuY2F0ZS5jIGIvZnMvdWRmL3RydW5jYXRlLmMKaW5kZXggZTFiMGU4Yy4uMGFiZDY2YyAxMDA2NDQKLS0tIGEvZnMvdWRmL3RydW5jYXRlLmMKKysrIGIvZnMvdWRmL3RydW5jYXRlLmMKQEAgLTIzOSwzOCArMjM5LDUyIEBACiAJewogCQlpZiAob2Zmc2V0KQogCQl7Ci0JCQlleHRvZmZzZXQgLT0gYWRzaXplOwotCQkJZXR5cGUgPSB1ZGZfbmV4dF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgJmVsb2MsICZlbGVuLCAmYmgsIDEpOwotCQkJaWYgKGV0eXBlID09IChFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgPj4gMzApKQotCQkJewotCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJZWxlbiA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCB8IChlbGVuICsgb2Zmc2V0KTsKLQkJCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwgYmgsIDApOwotCQkJfQotCQkJZWxzZSBpZiAoZXR5cGUgPT0gKEVYVF9OT1RfUkVDT1JERURfQUxMT0NBVEVEID4+IDMwKSkKLQkJCXsKLQkJCQlrZXJuZWxfbGJfYWRkciBuZWxvYyA9IHsgMCwgMCB9OwotCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJbmVsZW4gPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfAotCQkJCQkoKGVsZW4gKyBvZmZzZXQgKyBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSAmCi0JCQkJCX4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBuZWxvYywgbmVsZW4sIGJoLCAxKTsKLQkJCQl1ZGZfYWRkX2FleHQoaW5vZGUsICZibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCAoZXR5cGUgPDwgMzApIHwgZWxlbiwgJmJoLCAxKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQlpZiAoZWxlbiAmIChpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSkKLQkJCQl7Ci0JCQkJCWV4dG9mZnNldCAtPSBhZHNpemU7Ci0JCQkJCWVsZW4gPSBFWFRfUkVDT1JERURfQUxMT0NBVEVEIHwKLQkJCQkJCSgoZWxlbiArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpICYKLQkJCQkJCX4oaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwgYmgsIDEpOwotCQkJCX0KKwkJCS8qCisJCQkgKiAgT0ssIHRoZXJlIGlzIG5vdCBleHRlbnQgY292ZXJpbmcgaW5vZGUtPmlfc2l6ZSBhbmQKKwkJCSAqICBubyBleHRlbnQgYWJvdmUgaW5vZGUtPmlfc2l6ZSA9PiB0cnVuY2F0ZSBpcworCQkJICogIGV4dGVuZGluZyB0aGUgZmlsZSBieSAnb2Zmc2V0Jy4KKwkJCSAqLworCQkJaWYgKCghYmggJiYgZXh0b2Zmc2V0ID09IHVkZl9maWxlX2VudHJ5X2FsbG9jX29mZnNldChpbm9kZSkpIHx8CisJCQkgICAgKGJoICYmIGV4dG9mZnNldCA9PSBzaXplb2Yoc3RydWN0IGFsbG9jRXh0RGVzYykpKSB7CisJCQkJLyogRmlsZSBoYXMgbm8gZXh0ZW50cyBhdCBhbGwhICovCiAJCQkJbWVtc2V0KCZlbG9jLCAweDAwLCBzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKIAkJCQllbGVuID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwgb2Zmc2V0OwogCQkJCXVkZl9hZGRfYWV4dChpbm9kZSwgJmJsb2MsICZleHRvZmZzZXQsIGVsb2MsIGVsZW4sICZiaCwgMSk7CiAJCQl9CisJCQllbHNlIHsKKwkJCQlleHRvZmZzZXQgLT0gYWRzaXplOworCQkJCWV0eXBlID0gdWRmX25leHRfYWV4dChpbm9kZSwgJmJsb2MsICZleHRvZmZzZXQsICZlbG9jLCAmZWxlbiwgJmJoLCAxKTsKKwkJCQlpZiAoZXR5cGUgPT0gKEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCA+PiAzMCkpCisJCQkJeworCQkJCQlleHRvZmZzZXQgLT0gYWRzaXplOworCQkJCQllbGVuID0gRVhUX05PVF9SRUNPUkRFRF9OT1RfQUxMT0NBVEVEIHwgKGVsZW4gKyBvZmZzZXQpOworCQkJCQl1ZGZfd3JpdGVfYWV4dChpbm9kZSwgYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwgYmgsIDApOworCQkJCX0KKwkJCQllbHNlIGlmIChldHlwZSA9PSAoRVhUX05PVF9SRUNPUkRFRF9BTExPQ0FURUQgPj4gMzApKQorCQkJCXsKKwkJCQkJa2VybmVsX2xiX2FkZHIgbmVsb2MgPSB7IDAsIDAgfTsKKwkJCQkJZXh0b2Zmc2V0IC09IGFkc2l6ZTsKKwkJCQkJbmVsZW4gPSBFWFRfTk9UX1JFQ09SREVEX05PVF9BTExPQ0FURUQgfAorCQkJCQkJKChlbGVuICsgb2Zmc2V0ICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgJgorCQkJCQkJfihpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSAxKSk7CisJCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBuZWxvYywgbmVsZW4sIGJoLCAxKTsKKwkJCQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgZWxvYywgKGV0eXBlIDw8IDMwKSB8IGVsZW4sICZiaCwgMSk7CisJCQkJfQorCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlmIChlbGVuICYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKQorCQkJCQl7CisJCQkJCQlleHRvZmZzZXQgLT0gYWRzaXplOworCQkJCQkJZWxlbiA9IEVYVF9SRUNPUkRFRF9BTExPQ0FURUQgfAorCQkJCQkJCSgoZWxlbiArIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpICYKKwkJCQkJCQl+KGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsKKwkJCQkJCXVkZl93cml0ZV9hZXh0KGlub2RlLCBibG9jLCAmZXh0b2Zmc2V0LCBlbG9jLCBlbGVuLCBiaCwgMSk7CisJCQkJCX0KKwkJCQkJbWVtc2V0KCZlbG9jLCAweDAwLCBzaXplb2Yoa2VybmVsX2xiX2FkZHIpKTsKKwkJCQkJZWxlbiA9IEVYVF9OT1RfUkVDT1JERURfTk9UX0FMTE9DQVRFRCB8IG9mZnNldDsKKwkJCQkJdWRmX2FkZF9hZXh0KGlub2RlLCAmYmxvYywgJmV4dG9mZnNldCwgZWxvYywgZWxlbiwgJmJoLCAxKTsKKwkJCQl9CisJCQl9CiAJCX0KIAl9CiAJVURGX0lfTEVORVhURU5UUyhpbm9kZSkgPSBpbm9kZS0+aV9zaXplOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL2JhbGxvYy5jIGIvZnMvdWZzL2JhbGxvYy5jCmluZGV4IGIwMTgwNGIuLmI4MjM4MTQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9iYWxsb2MuYworKysgYi9mcy91ZnMvYmFsbG9jLmMKQEAgLTI0OCw3ICsyNDgsNyBAQAogCiAJCWlmIChsaWtlbHkoY3VyX2luZGV4ICE9IGluZGV4KSkgewogCQkJcGFnZSA9IHVmc19nZXRfbG9ja2VkX3BhZ2UobWFwcGluZywgaW5kZXgpOwotCQkJaWYgKElTX0VSUihwYWdlKSkKKwkJCWlmICghcGFnZSB8fCBJU19FUlIocGFnZSkpIC8qIGl0IHdhcyB0cnVuY2F0ZWQgb3IgRUlPICovCiAJCQkJY29udGludWU7CiAJCX0gZWxzZQogCQkJcGFnZSA9IGxvY2tlZF9wYWdlOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL2lub2RlLmMgYi9mcy91ZnMvaW5vZGUuYwppbmRleCBlN2M4NjE1Li4zMGM2ZThhOSAxMDA2NDQKLS0tIGEvZnMvdWZzL2lub2RlLmMKKysrIGIvZnMvdWZzL2lub2RlLmMKQEAgLTE2OSwxOCArMTY5LDIwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgYnVmZmVyX2hlYWQgKgogdWZzX2NsZWFyX2ZyYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGJlZywKLQkJdW5zaWduZWQgaW50IG4pCisJCXVuc2lnbmVkIGludCBuLCBzZWN0b3JfdCB3YW50KQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcmVzLCAqYmg7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpyZXMgPSBOVUxMLCAqYmg7CiAJc2VjdG9yX3QgZW5kID0gYmVnICsgbjsKIAotCXJlcyA9IHNiX2dldGJsayhpbm9kZS0+aV9zYiwgYmVnKTsKLQl1ZnNfY2xlYXJfZnJhZyhpbm9kZSwgcmVzKTsKLQlmb3IgKCsrYmVnOyBiZWcgPCBlbmQ7ICsrYmVnKSB7CisJZm9yICg7IGJlZyA8IGVuZDsgKytiZWcpIHsKIAkJYmggPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIGJlZyk7CiAJCXVmc19jbGVhcl9mcmFnKGlub2RlLCBiaCk7Ci0JCWJyZWxzZShiaCk7CisJCWlmICh3YW50ICE9IGJlZykKKwkJCWJyZWxzZShiaCk7CisJCWVsc2UKKwkJCXJlcyA9IGJoOwogCX0KKwlCVUdfT04oIXJlcyk7CiAJcmV0dXJuIHJlczsKIH0KIApAQCAtMjY1LDcgKzI2Nyw5IEBACiAJCQlsYXN0ZnJhZyA9IHVmc2ktPmlfbGFzdGZyYWc7CiAJCQkKIAkJfQotCQlnb2FsID0gZnMzMl90b19jcHUoc2IsIHVmc2ktPmlfdTEuaV9kYXRhW2xhc3RibG9ja10pICsgdXNwaS0+c19mcGI7CisJCXRtcCA9IGZzMzJfdG9fY3B1KHNiLCB1ZnNpLT5pX3UxLmlfZGF0YVtsYXN0YmxvY2tdKTsKKwkJaWYgKHRtcCkKKwkJCWdvYWwgPSB0bXAgKyB1c3BpLT5zX2ZwYjsKIAkJdG1wID0gdWZzX25ld19mcmFnbWVudHMgKGlub2RlLCBwLCBmcmFnbWVudCAtIGJsb2Nrb2ZmLCAKIAkJCQkJIGdvYWwsIHJlcXVpcmVkICsgYmxvY2tvZmYsCiAJCQkJCSBlcnIsIGxvY2tlZF9wYWdlKTsKQEAgLTI3NywxMyArMjgxLDE1IEBACiAJCXRtcCA9IHVmc19uZXdfZnJhZ21lbnRzKGlub2RlLCBwLCBmcmFnbWVudCAtIChibG9ja29mZiAtIGxhc3RibG9ja29mZiksCiAJCQkJCWZzMzJfdG9fY3B1KHNiLCAqcCksIHJlcXVpcmVkICsgIChibG9ja29mZiAtIGxhc3RibG9ja29mZiksCiAJCQkJCWVyciwgbG9ja2VkX3BhZ2UpOwotCX0KKwl9IGVsc2UgLyogKGxhc3RibG9jayA+IGJsb2NrKSAqLyB7CiAJLyoKIAkgKiBXZSB3aWxsIGFsbG9jYXRlIG5ldyBibG9jayBiZWZvcmUgbGFzdCBhbGxvY2F0ZWQgYmxvY2sKIAkgKi8KLQllbHNlIC8qIChsYXN0YmxvY2sgPiBibG9jaykgKi8gewotCQlpZiAobGFzdGJsb2NrICYmICh0bXAgPSBmczMyX3RvX2NwdShzYiwgdWZzaS0+aV91MS5pX2RhdGFbbGFzdGJsb2NrLTFdKSkpCi0JCQlnb2FsID0gdG1wICsgdXNwaS0+c19mcGI7CisJCWlmIChibG9jaykgeworCQkJdG1wID0gZnMzMl90b19jcHUoc2IsIHVmc2ktPmlfdTEuaV9kYXRhW2Jsb2NrLTFdKTsKKwkJCWlmICh0bXApCisJCQkJZ29hbCA9IHRtcCArIHVzcGktPnNfZnBiOworCQl9CiAJCXRtcCA9IHVmc19uZXdfZnJhZ21lbnRzKGlub2RlLCBwLCBmcmFnbWVudCAtIGJsb2Nrb2ZmLAogCQkJCQlnb2FsLCB1c3BpLT5zX2ZwYiwgZXJyLCBsb2NrZWRfcGFnZSk7CiAJfQpAQCAtMjk2LDcgKzMwMiw3IEBACiAJfQogCiAJaWYgKCFwaHlzKSB7Ci0JCXJlc3VsdCA9IHVmc19jbGVhcl9mcmFncyhpbm9kZSwgdG1wICsgYmxvY2tvZmYsIHJlcXVpcmVkKTsKKwkJcmVzdWx0ID0gdWZzX2NsZWFyX2ZyYWdzKGlub2RlLCB0bXAsIHJlcXVpcmVkLCB0bXAgKyBibG9ja29mZik7CiAJfSBlbHNlIHsKIAkJKnBoeXMgPSB0bXAgKyBibG9ja29mZjsKIAkJcmVzdWx0ID0gTlVMTDsKQEAgLTM4Myw3ICszODksNyBAQAogCQl9CiAJfQogCi0JaWYgKGJsb2NrICYmICh0bXAgPSBmczMyX3RvX2NwdShzYiwgKChfX2ZzMzIqKWJoLT5iX2RhdGEpW2Jsb2NrLTFdKSArIHVzcGktPnNfZnBiKSkKKwlpZiAoYmxvY2sgJiYgKHRtcCA9IGZzMzJfdG9fY3B1KHNiLCAoKF9fZnMzMiopYmgtPmJfZGF0YSlbYmxvY2stMV0pKSkKIAkJZ29hbCA9IHRtcCArIHVzcGktPnNfZnBiOwogCWVsc2UKIAkJZ29hbCA9IGJoLT5iX2Jsb2NrbnIgKyB1c3BpLT5zX2ZwYjsKQEAgLTM5Nyw3ICs0MDMsOCBAQAogCiAKIAlpZiAoIXBoeXMpIHsKLQkJcmVzdWx0ID0gdWZzX2NsZWFyX2ZyYWdzKGlub2RlLCB0bXAgKyBibG9ja29mZiwgdXNwaS0+c19mcGIpOworCQlyZXN1bHQgPSB1ZnNfY2xlYXJfZnJhZ3MoaW5vZGUsIHRtcCwgdXNwaS0+c19mcGIsCisJCQkJCSB0bXAgKyBibG9ja29mZik7CiAJfSBlbHNlIHsKIAkJKnBoeXMgPSB0bXAgKyBibG9ja29mZjsKIAkJKm5ldyA9IDE7CmRpZmYgLS1naXQgYS9mcy91ZnMvbmFtZWkuYyBiL2ZzL3Vmcy9uYW1laS5jCmluZGV4IGFiZDVmMjMuLmQzNDRiNDEgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCisrKyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC0xMjksNyArMTI5LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAogCWlmIChsID4gc2ItPnNfYmxvY2tzaXplKQotCQlnb3RvIG91dDsKKwkJZ290byBvdXRfbm90bG9ja2VkOwogCiAJbG9ja19rZXJuZWwoKTsKIAlpbm9kZSA9IHVmc19uZXdfaW5vZGUoZGlyLCBTX0lGTE5LIHwgU19JUldYVUdPKTsKQEAgLTE1NSw2ICsxNTUsNyBAQAogCWVyciA9IHVmc19hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKK291dF9ub3Rsb2NrZWQ6CiAJcmV0dXJuIGVycjsKIAogb3V0X2ZhaWw6CmRpZmYgLS1naXQgYS9mcy91ZnMvdHJ1bmNhdGUuYyBiL2ZzL3Vmcy90cnVuY2F0ZS5jCmluZGV4IGM5YjU1ODcuLmVhMTFkMDQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy90cnVuY2F0ZS5jCisrKyBiL2ZzL3Vmcy90cnVuY2F0ZS5jCkBAIC0zNzUsMTcgKzM3NSwxNSBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKIAlzdHJ1Y3QgdWZzX3NiX3ByaXZhdGVfaW5mbyAqdXNwaSA9IFVGU19TQihpbm9kZS0+aV9zYiktPnNfdXNwaTsKLQlzdHJ1Y3QgdWZzX2lub2RlX2luZm8gKnVmc2kgPSBVRlNfSShpbm9kZSk7CiAJdW5zaWduZWQgbGFzdGZyYWcsIGksIGVuZDsKIAlzdHJ1Y3QgcGFnZSAqbGFzdHBhZ2U7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAogCWxhc3RmcmFnID0gKGlfc2l6ZV9yZWFkKGlub2RlKSArIHVzcGktPnNfZnNpemUgLSAxKSA+PiB1c3BpLT5zX2ZzaGlmdDsKIAotCWlmICghbGFzdGZyYWcpIHsKLQkJdWZzaS0+aV9sYXN0ZnJhZyA9IDA7CisJaWYgKCFsYXN0ZnJhZykKIAkJZ290byBvdXQ7Ci0JfQorCiAJbGFzdGZyYWctLTsKIAogCWxhc3RwYWdlID0gdWZzX2dldF9sb2NrZWRfcGFnZShtYXBwaW5nLCBsYXN0ZnJhZyA+PgpAQCAtNDAwLDI1ICszOTgsMjUgQEAKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZW5kOyArK2kpCiAgICAgICAgICAgICAgICBiaCA9IGJoLT5iX3RoaXNfcGFnZTsKIAotICAgICAgIGlmICghYnVmZmVyX21hcHBlZChiaCkpIHsKLSAgICAgICAgICAgICAgIGVyciA9IHVmc19nZXRmcmFnX2Jsb2NrKGlub2RlLCBsYXN0ZnJhZywgYmgsIDEpOwogCi0gICAgICAgICAgICAgICBpZiAodW5saWtlbHkoZXJyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgZ290byBvdXRfdW5sb2NrOworICAgICAgIGVyciA9IHVmc19nZXRmcmFnX2Jsb2NrKGlub2RlLCBsYXN0ZnJhZywgYmgsIDEpOwogCi0gICAgICAgICAgICAgICBpZiAoYnVmZmVyX25ldyhiaCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJfYnVmZmVyX25ldyhiaCk7Ci0gICAgICAgICAgICAgICAgICAgICAgIHVubWFwX3VuZGVybHlpbmdfbWV0YWRhdGEoYmgtPmJfYmRldiwKLQkJCQkJCSBiaC0+Yl9ibG9ja25yKTsKLQkJICAgICAgIC8qCi0JCQkqIHdlIGRvIG5vdCB6ZXJvaXplIGZyYWdtZW50LCBiZWNhdXNlIG9mCi0JCQkqIGlmIGl0IG1hcGVkIHRvIGhvbGUsIGl0IGFscmVhZHkgY29udGFpbnMgemVyb2VzCi0JCQkqLwotICAgICAgICAgICAgICAgICAgICAgICBzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgbWFya19idWZmZXJfZGlydHkoYmgpOwotICAgICAgICAgICAgICAgICAgICAgICBzZXRfcGFnZV9kaXJ0eShsYXN0cGFnZSk7Ci0gICAgICAgICAgICAgICB9CisgICAgICAgaWYgKHVubGlrZWx5KGVycikpCisJICAgICAgIGdvdG8gb3V0X3VubG9jazsKKworICAgICAgIGlmIChidWZmZXJfbmV3KGJoKSkgeworCSAgICAgICBjbGVhcl9idWZmZXJfbmV3KGJoKTsKKwkgICAgICAgdW5tYXBfdW5kZXJseWluZ19tZXRhZGF0YShiaC0+Yl9iZGV2LAorCQkJCQkgYmgtPmJfYmxvY2tucik7CisJICAgICAgIC8qCisJCSogd2UgZG8gbm90IHplcm9pemUgZnJhZ21lbnQsIGJlY2F1c2Ugb2YKKwkJKiBpZiBpdCBtYXBlZCB0byBob2xlLCBpdCBhbHJlYWR5IGNvbnRhaW5zIHplcm9lcworCQkqLworCSAgICAgICBzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKKwkgICAgICAgbWFya19idWZmZXJfZGlydHkoYmgpOworCSAgICAgICBzZXRfcGFnZV9kaXJ0eShsYXN0cGFnZSk7CiAgICAgICAgfQorCiBvdXRfdW5sb2NrOgogICAgICAgIHVmc19wdXRfbG9ja2VkX3BhZ2UobGFzdHBhZ2UpOwogb3V0OgpAQCAtNDQwLDIzICs0MzgsMTEgQEAKIAlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JaWYgKGlub2RlLT5pX3NpemUgPiBvbGRfaV9zaXplKSB7Ci0JCS8qCi0JCSAqIGlmIHdlIGV4cGFuZCBmaWxlIHdlIHNob3VsZCBjYXJlIGFib3V0Ci0JCSAqIGFsbG9jYXRpb24gb2YgYmxvY2sgZm9yIGxhc3QgYnl0ZSBmaXJzdCBvZiBhbGwKLQkJICovCi0JCWVyciA9IHVmc19hbGxvY19sYXN0YmxvY2soaW5vZGUpOworCWVyciA9IHVmc19hbGxvY19sYXN0YmxvY2soaW5vZGUpOwogCi0JCWlmIChlcnIpIHsKLQkJCWlfc2l6ZV93cml0ZShpbm9kZSwgb2xkX2lfc2l6ZSk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBnbyBhd2F5LCBiZWNhdXNlIG9mIHdlIGV4cGFuZCBmaWxlLCBhbmQgd2UgZG8gbm90Ci0JCSAqIG5lZWQgZnJlZSBibG9ja3MsIGFuZCB6ZXJvaXplcyBwYWdlCi0JCSAqLwotCQlsb2NrX2tlcm5lbCgpOwotCQlnb3RvIGFsbW9zdF9lbmQ7CisJaWYgKGVycikgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9sZF9pX3NpemUpOworCQlnb3RvIG91dDsKIAl9CiAKIAlibG9ja190cnVuY2F0ZV9wYWdlKGlub2RlLT5pX21hcHBpbmcsIGlub2RlLT5pX3NpemUsIHVmc19nZXRmcmFnX2Jsb2NrKTsKQEAgLTQ3NywyMSArNDYzLDggQEAKIAkJeWllbGQoKTsKIAl9CiAKLQlpZiAoaW5vZGUtPmlfc2l6ZSA8IG9sZF9pX3NpemUpIHsKLQkJLyoKLQkJICogbm93IHdlIHNob3VsZCBoYXZlIGVub3VnaCBzcGFjZQotCQkgKiB0byBhbGxvY2F0ZSBibG9jayBmb3IgbGFzdCBieXRlCi0JCSAqLwotCQllcnIgPSB1ZnNfYWxsb2NfbGFzdGJsb2NrKGlub2RlKTsKLQkJaWYgKGVycikKLQkJCS8qCi0JCQkgKiBsb29rcyBsaWtlIGFsbCB0aGUgc2FtZSAtIHdlIGhhdmUgbm8gc3BhY2UsCi0JCQkgKiBidXQgd2UgdHJ1bmNhdGUgZmlsZSBhbHJlYWR5Ci0JCQkgKi8KLQkJCWlub2RlLT5pX3NpemUgPSAodWZzaS0+aV9sYXN0ZnJhZyAtIDEpICogdXNwaS0+c19mc2l6ZTsKLQl9Ci1hbG1vc3RfZW5kOgogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCXVmc2ktPmlfbGFzdGZyYWcgPSBESVJFQ1RfRlJBR01FTlQ7CiAJdW5sb2NrX2tlcm5lbCgpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogb3V0OgpkaWZmIC0tZ2l0IGEvZnMvdWZzL3V0aWwuYyBiL2ZzL3Vmcy91dGlsLmMKaW5kZXggMzM3Y2YyYy4uMjJmODIwYSAxMDA2NDQKLS0tIGEvZnMvdWZzL3V0aWwuYworKysgYi9mcy91ZnMvdXRpbC5jCkBAIC0yNTEsMTIgKzI1MSwxMiBAQAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCi10cnlfYWdhaW46CiAJcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGluZGV4KTsKIAlpZiAoIXBhZ2UpIHsKIAkJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCwKIAkJCQkgICAgICAgKGZpbGxlcl90KiltYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UsCiAJCQkJICAgICAgIE5VTEwpOworCiAJCWlmIChJU19FUlIocGFnZSkpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAidWZzX2NoYW5nZV9ibG9ja25yOiAiCiAJCQkgICAgICAgInJlYWRfY2FjaGVfcGFnZSBlcnJvcjogaW5vICVsdSwgaW5kZXg6ICVsdVxuIiwKQEAgLTI2Niw2ICsyNjYsMTQgQEAKIAogCQlsb2NrX3BhZ2UocGFnZSk7CiAKKwkJaWYgKHVubGlrZWx5KHBhZ2UtPm1hcHBpbmcgPT0gTlVMTCkpIHsKKwkJCS8qIFRydW5jYXRlIGdvdCB0aGVyZSBmaXJzdCAqLworCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCQlwYWdlID0gTlVMTDsKKwkJCWdvdG8gb3V0OworCQl9CisKIAkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkgfHwgUGFnZUVycm9yKHBhZ2UpKSB7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKQEAgLTI3NSwxNSArMjgzLDggQEAKIAkJCSAgICAgICBtYXBwaW5nLT5ob3N0LT5pX2lubywgaW5kZXgpOwogCiAJCQlwYWdlID0gRVJSX1BUUigtRUlPKTsKLQkJCWdvdG8gb3V0OwogCQl9CiAJfQotCi0JaWYgKHVubGlrZWx5KCFwYWdlLT5tYXBwaW5nIHx8ICFwYWdlX2hhc19idWZmZXJzKHBhZ2UpKSkgewotCQl1bmxvY2tfcGFnZShwYWdlKTsKLQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlnb3RvIHRyeV9hZ2FpbjsvKndlIHJlYWxseSBuZWVkIHRoZXNlIGJ1ZmZlcnMqLwotCX0KIG91dDoKIAlyZXR1cm4gcGFnZTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwppbmRleCBjNDBmODFiLi4zNGRjYjQzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCkBAIC0xMzkwLDExICsxMzkwLDE5IEBACiAKIAlpb2NiLT5wcml2YXRlID0geGZzX2FsbG9jX2lvZW5kKGlub2RlLCBJT01BUF9VTldSSVRURU4pOwogCi0JcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPX293bl9sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKLQkJaW9tYXAuaW9tYXBfdGFyZ2V0LT5idF9iZGV2LAotCQlpb3YsIG9mZnNldCwgbnJfc2VncywKLQkJeGZzX2dldF9ibG9ja3NfZGlyZWN0LAotCQl4ZnNfZW5kX2lvX2RpcmVjdCk7CisJaWYgKHJ3ID09IFdSSVRFKSB7CisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19vd25fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsCisJCQlpb21hcC5pb21hcF90YXJnZXQtPmJ0X2JkZXYsCisJCQlpb3YsIG9mZnNldCwgbnJfc2VncywKKwkJCXhmc19nZXRfYmxvY2tzX2RpcmVjdCwKKwkJCXhmc19lbmRfaW9fZGlyZWN0KTsKKwl9IGVsc2UgeworCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU9fbm9fbG9ja2luZyhydywgaW9jYiwgaW5vZGUsCisJCQlpb21hcC5pb21hcF90YXJnZXQtPmJ0X2JkZXYsCisJCQlpb3YsIG9mZnNldCwgbnJfc2VncywKKwkJCXhmc19nZXRfYmxvY2tzX2RpcmVjdCwKKwkJCXhmc19lbmRfaW9fZGlyZWN0KTsKKwl9CiAKIAlpZiAodW5saWtlbHkocmV0IDw9IDAgJiYgaW9jYi0+cHJpdmF0ZSkpCiAJCXhmc19kZXN0cm95X2lvZW5kKGlvY2ItPnByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmggYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAppbmRleCBjZWRhM2EyLi43ODU4NzAzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19idWYuaApAQCAtMjQ2LDggKzI0Niw4IEBACiAjZGVmaW5lIEJVRl9CVVNZCQlYQkZfRE9OVF9CTE9DSwogCiAjZGVmaW5lIFhGU19CVUZfQkZMQUdTKGJwKQkoKGJwKS0+Yl9mbGFncykKLSNkZWZpbmUgWEZTX0JVRl9aRVJPRkxBR1MoYnApCVwKLQkoKGJwKS0+Yl9mbGFncyAmPSB+KFhCRl9SRUFEfFhCRl9XUklURXxYQkZfQVNZTkN8WEJGX0RFTFdSSSkpCisjZGVmaW5lIFhGU19CVUZfWkVST0ZMQUdTKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSBcCisJCX4oWEJGX1JFQUR8WEJGX1dSSVRFfFhCRl9BU1lOQ3xYQkZfREVMV1JJfFhCRl9PUkRFUkVEKSkKIAogI2RlZmluZSBYRlNfQlVGX1NUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyB8PSBYRlNfQl9TVEFMRSkKICNkZWZpbmUgWEZTX0JVRl9VTlNUQUxFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEZTX0JfU1RBTEUpCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCmluZGV4IDVkOWNmZDkuLmVlNzg4YjEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jCkBAIC0yNjQsNyArMjY0LDkgQEAKIAkJCQkJZG1mbGFncywgJmxvY2t0eXBlKTsKIAkJaWYgKHJldCkgewogCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQkJCWdvdG8gdW5sb2NrX211dGV4OworCQkJaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpCisJCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC0yNzIsNiArMjc0LDkgQEAKIAkJYmh2X3ZvcF9mbHVzaGludmFsX3BhZ2VzKHZwLCBjdG9vZmYob2ZmdG9jdCgqb2Zmc2V0KSksCiAJCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7CiAKKwlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKIAl4ZnNfcndfZW50ZXJfdHJhY2UoWEZTX1JFQURfRU5URVIsICZpcC0+aV9pb2NvcmUsCiAJCQkJKHZvaWQgKilpb3ZwLCBzZWdzLCAqb2Zmc2V0LCBpb2ZsYWdzKTsKIAlyZXQgPSBfX2dlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBpb3ZwLCBzZWdzLCBvZmZzZXQpOwpAQCAtMjgxLDEwICsyODYsNiBAQAogCQlYRlNfU1RBVFNfQUREKHhzX3JlYWRfYnl0ZXMsIHJldCk7CiAKIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwotCi11bmxvY2tfbXV0ZXg6Ci0JaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpCi0JCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM5MCw2ICszOTEsOCBAQAogCXhmc19pbm9kZV90CQkqaXAgPSBYRlNfQkhWVE9JKGJkcCk7CiAJeGZzX21vdW50X3QJCSptcCA9IGlwLT5pX21vdW50OwogCXNzaXplX3QJCQlyZXQ7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBvdXRmaWxwLT5mX21hcHBpbmctPmhvc3Q7CisJeGZzX2ZzaXplX3QJCWlzaXplOwogCiAJWEZTX1NUQVRTX0lOQyh4c193cml0ZV9jYWxscyk7CiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQpAQCAtNDE2LDYgKzQxOSwyMCBAQAogCWlmIChyZXQgPiAwKQogCQlYRlNfU1RBVFNfQUREKHhzX3dyaXRlX2J5dGVzLCByZXQpOwogCisJaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJaWYgKHVubGlrZWx5KHJldCA8IDAgJiYgcmV0ICE9IC1FRkFVTFQgJiYgKnBwb3MgPiBpc2l6ZSkpCisJCSpwcG9zID0gaXNpemU7CisKKwlpZiAoKnBwb3MgPiBpcC0+aV9kLmRpX3NpemUpIHsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCWlmICgqcHBvcyA+IGlwLT5pX2QuZGlfc2l6ZSkgeworCQkJaXAtPmlfZC5kaV9zaXplID0gKnBwb3M7CisJCQlpX3NpemVfd3JpdGUoaW5vZGUsICpwcG9zKTsKKwkJCWlwLT5pX3VwZGF0ZV9jb3JlID0gMTsKKwkJCWlwLT5pX3VwZGF0ZV9zaXplID0gMTsKKwkJfQorCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCX0KIAl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKaW5kZXggOWJkZWY5ZC4uNDc1NGYzNCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCkBAIC0zMTQsNiArMzE0LDEzIEBACiAJCXJldHVybjsKIAl9CiAKKwlpZiAoeGZzX3JlYWRvbmx5X2J1ZnRhcmcobXAtPm1fZGRldl90YXJncCkpIHsKKwkJeGZzX2ZzX2Ntbl9lcnIoQ0VfTk9URSwgbXAsCisJCSAgIkRpc2FibGluZyBiYXJyaWVycywgdW5kZXJseWluZyBkZXZpY2UgaXMgcmVhZG9ubHkiKTsKKwkJbXAtPm1fZmxhZ3MgJj0gflhGU19NT1VOVF9CQVJSSUVSOworCQlyZXR1cm47CisJfQorCiAJZXJyb3IgPSB4ZnNfYmFycmllcl90ZXN0KG1wKTsKIAlpZiAoZXJyb3IpIHsKIAkJeGZzX2ZzX2Ntbl9lcnIoQ0VfTk9URSwgbXAsCmRpZmYgLS1naXQgYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jIGIvZnMveGZzL3F1b3RhL3hmc19xbV9iaHYuYwppbmRleCBlOTVlOTlmLi5kYjg4NzJiIDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtX2Jodi5jCisrKyBiL2ZzL3hmcy9xdW90YS94ZnNfcW1fYmh2LmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCWlmIChlcnJvciB8fCAhdm5vZGUpCiAJCXJldHVybiBlcnJvcjsKIAotCW1wID0gWEZTX0JIVlRPTShiaHYpOworCW1wID0geGZzX3Zmc3RvbShiaHZ0b3ZmcyhiaHYpKTsKIAlpcCA9IHhmc192dG9pKHZub2RlKTsKIAogCWlmICghKGlwLT5pX2QuZGlfZmxhZ3MgJiBYRlNfRElGTEFHX1BST0pJTkhFUklUKSkKQEAgLTIxNywxNyArMjE3LDI0IEBACiAJCXJldHVybiAwOwogCWRwID0gJmRxcC0+cV9jb3JlOwogCi0JbGltaXQgPSBkcC0+ZF9ibGtfc29mdGxpbWl0ID8gZHAtPmRfYmxrX3NvZnRsaW1pdCA6IGRwLT5kX2Jsa19oYXJkbGltaXQ7CisJbGltaXQgPSBkcC0+ZF9ibGtfc29mdGxpbWl0ID8KKwkJYmU2NF90b19jcHUoZHAtPmRfYmxrX3NvZnRsaW1pdCkgOgorCQliZTY0X3RvX2NwdShkcC0+ZF9ibGtfaGFyZGxpbWl0KTsKIAlpZiAobGltaXQgJiYgc3RhdHAtPmZfYmxvY2tzID4gbGltaXQpIHsKIAkJc3RhdHAtPmZfYmxvY2tzID0gbGltaXQ7Ci0JCXN0YXRwLT5mX2JmcmVlID0gKHN0YXRwLT5mX2Jsb2NrcyA+IGRwLT5kX2Jjb3VudCkgPwotCQkJCQkoc3RhdHAtPmZfYmxvY2tzIC0gZHAtPmRfYmNvdW50KSA6IDA7CisJCXN0YXRwLT5mX2JmcmVlID0KKwkJCShzdGF0cC0+Zl9ibG9ja3MgPiBiZTY0X3RvX2NwdShkcC0+ZF9iY291bnQpKSA/CisJCQkgKHN0YXRwLT5mX2Jsb2NrcyAtIGJlNjRfdG9fY3B1KGRwLT5kX2Jjb3VudCkpIDogMDsKIAl9Ci0JbGltaXQgPSBkcC0+ZF9pbm9fc29mdGxpbWl0ID8gZHAtPmRfaW5vX3NvZnRsaW1pdCA6IGRwLT5kX2lub19oYXJkbGltaXQ7CisKKwlsaW1pdCA9IGRwLT5kX2lub19zb2Z0bGltaXQgPworCQliZTY0X3RvX2NwdShkcC0+ZF9pbm9fc29mdGxpbWl0KSA6CisJCWJlNjRfdG9fY3B1KGRwLT5kX2lub19oYXJkbGltaXQpOwogCWlmIChsaW1pdCAmJiBzdGF0cC0+Zl9maWxlcyA+IGxpbWl0KSB7CiAJCXN0YXRwLT5mX2ZpbGVzID0gbGltaXQ7Ci0JCXN0YXRwLT5mX2ZmcmVlID0gKHN0YXRwLT5mX2ZpbGVzID4gZHAtPmRfaWNvdW50KSA/Ci0JCQkJCShzdGF0cC0+Zl9mZnJlZSAtIGRwLT5kX2ljb3VudCkgOiAwOworCQlzdGF0cC0+Zl9mZnJlZSA9CisJCQkoc3RhdHAtPmZfZmlsZXMgPiBiZTY0X3RvX2NwdShkcC0+ZF9pY291bnQpKSA/CisJCQkgKHN0YXRwLT5mX2ZmcmVlIC0gYmU2NF90b19jcHUoZHAtPmRfaWNvdW50KSkgOiAwOwogCX0KIAogCXhmc19xbV9kcXB1dChkcXApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvYy5jIGIvZnMveGZzL3hmc19hbGxvYy5jCmluZGV4IGVlZjY3NjMuLmQyYmJjZDggMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2FsbG9jLmMKQEAgLTE4MzUsNDAgKzE4MzUsNDcgQEAKIAkJCQkmYWdicCkpKQogCQkJcmV0dXJuIGVycm9yOwogCQlpZiAoIXBhZy0+cGFnZl9pbml0KSB7CisJCQlBU1NFUlQoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKTsKKwkJCUFTU0VSVCghKGZsYWdzICYgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORykpOwogCQkJYXJncy0+YWdicCA9IE5VTEw7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZQogCQlhZ2JwID0gTlVMTDsKIAotCS8qIElmIHRoaXMgaXMgYSBtZXRhZGF0YSBwcmVmZXJyZWQgcGFnIGFuZCB3ZSBhcmUgdXNlciBkYXRhCisJLyoKKwkgKiBJZiB0aGlzIGlzIGEgbWV0YWRhdGEgcHJlZmVycmVkIHBhZyBhbmQgd2UgYXJlIHVzZXIgZGF0YQogCSAqIHRoZW4gdHJ5IHNvbWV3aGVyZSBlbHNlIGlmIHdlIGFyZSBub3QgYmVpbmcgYXNrZWQgdG8KIAkgKiB0cnkgaGFyZGVyIGF0IHRoaXMgcG9pbnQKIAkgKi8KLQlpZiAocGFnLT5wYWdmX21ldGFkYXRhICYmIGFyZ3MtPnVzZXJkYXRhICYmIGZsYWdzKSB7CisJaWYgKHBhZy0+cGFnZl9tZXRhZGF0YSAmJiBhcmdzLT51c2VyZGF0YSAmJgorCSAgICAoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSkgeworCQlBU1NFUlQoIShmbGFncyAmIFhGU19BTExPQ19GTEFHX0ZSRUVJTkcpKTsKIAkJYXJncy0+YWdicCA9IE5VTEw7CiAJCXJldHVybiAwOwogCX0KIAotCW5lZWQgPSBYRlNfTUlOX0ZSRUVMSVNUX1BBRyhwYWcsIG1wKTsKLQlkZWx0YSA9IG5lZWQgPiBwYWctPnBhZ2ZfZmxjb3VudCA/IG5lZWQgLSBwYWctPnBhZ2ZfZmxjb3VudCA6IDA7Ci0JLyoKLQkgKiBJZiBpdCBsb29rcyBsaWtlIHRoZXJlIGlzbid0IGEgbG9uZyBlbm91Z2ggZXh0ZW50LCBvciBlbm91Z2gKLQkgKiB0b3RhbCBibG9ja3MsIHJlamVjdCBpdC4KLQkgKi8KLQlsb25nZXN0ID0gKHBhZy0+cGFnZl9sb25nZXN0ID4gZGVsdGEpID8KLQkJKHBhZy0+cGFnZl9sb25nZXN0IC0gZGVsdGEpIDoKLQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fCBwYWctPnBhZ2ZfbG9uZ2VzdCA+IDApOwotCWlmIChhcmdzLT5taW5sZW4gKyBhcmdzLT5hbGlnbm1lbnQgKyBhcmdzLT5taW5hbGlnbnNsb3AgLSAxID4gbG9uZ2VzdCB8fAotCSAgICAoIShmbGFncyAmIFhGU19BTExPQ19GTEFHX0ZSRUVJTkcpICYmCi0JICAgICAoaW50KShwYWctPnBhZ2ZfZnJlZWJsa3MgKyBwYWctPnBhZ2ZfZmxjb3VudCAtCi0JCSAgIG5lZWQgLSBhcmdzLT50b3RhbCkgPAotCSAgICAgKGludClhcmdzLT5taW5sZWZ0KSkgewotCQlpZiAoYWdicCkKLQkJCXhmc190cmFuc19icmVsc2UodHAsIGFnYnApOwotCQlhcmdzLT5hZ2JwID0gTlVMTDsKLQkJcmV0dXJuIDA7CisJaWYgKCEoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19GUkVFSU5HKSkgeworCQluZWVkID0gWEZTX01JTl9GUkVFTElTVF9QQUcocGFnLCBtcCk7CisJCWRlbHRhID0gbmVlZCA+IHBhZy0+cGFnZl9mbGNvdW50ID8gbmVlZCAtIHBhZy0+cGFnZl9mbGNvdW50IDogMDsKKwkJLyoKKwkJICogSWYgaXQgbG9va3MgbGlrZSB0aGVyZSBpc24ndCBhIGxvbmcgZW5vdWdoIGV4dGVudCwgb3IgZW5vdWdoCisJCSAqIHRvdGFsIGJsb2NrcywgcmVqZWN0IGl0LgorCQkgKi8KKwkJbG9uZ2VzdCA9IChwYWctPnBhZ2ZfbG9uZ2VzdCA+IGRlbHRhKSA/CisJCQkocGFnLT5wYWdmX2xvbmdlc3QgLSBkZWx0YSkgOgorCQkJKHBhZy0+cGFnZl9mbGNvdW50ID4gMCB8fCBwYWctPnBhZ2ZfbG9uZ2VzdCA+IDApOworCQlpZiAoKGFyZ3MtPm1pbmxlbiArIGFyZ3MtPmFsaWdubWVudCArIGFyZ3MtPm1pbmFsaWduc2xvcCAtIDEpID4KKwkJCQlsb25nZXN0IHx8CisJCSAgICAoKGludCkocGFnLT5wYWdmX2ZyZWVibGtzICsgcGFnLT5wYWdmX2ZsY291bnQgLQorCQkJICAgbmVlZCAtIGFyZ3MtPnRvdGFsKSA8IChpbnQpYXJncy0+bWlubGVmdCkpIHsKKwkJCWlmIChhZ2JwKQorCQkJCXhmc190cmFuc19icmVsc2UodHAsIGFnYnApOworCQkJYXJncy0+YWdicCA9IE5VTEw7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KKwogCS8qCiAJICogR2V0IHRoZSBhLmcuIGZyZWVzcGFjZSBidWZmZXIuCiAJICogQ2FuIGZhaWwgaWYgd2UncmUgbm90IGJsb2NraW5nIG9uIGxvY2tzLCBhbmQgaXQncyBoZWxkLgpAQCAtMTg3OCw2ICsxODg1LDggQEAKIAkJCQkmYWdicCkpKQogCQkJcmV0dXJuIGVycm9yOwogCQlpZiAoYWdicCA9PSBOVUxMKSB7CisJCQlBU1NFUlQoZmxhZ3MgJiBYRlNfQUxMT0NfRkxBR19UUllMT0NLKTsKKwkJCUFTU0VSVCghKGZsYWdzICYgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORykpOwogCQkJYXJncy0+YWdicCA9IE5VTEw7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMTg4NywyMiArMTg5NiwyNCBAQAogCSAqLwogCWFnZiA9IFhGU19CVUZfVE9fQUdGKGFnYnApOwogCW5lZWQgPSBYRlNfTUlOX0ZSRUVMSVNUKGFnZiwgbXApOwotCWRlbHRhID0gbmVlZCA+IGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZsY291bnQpID8KLQkJKG5lZWQgLSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGNvdW50KSkgOiAwOwogCS8qCiAJICogSWYgdGhlcmUgaXNuJ3QgZW5vdWdoIHRvdGFsIG9yIHNpbmdsZS1leHRlbnQsIHJlamVjdCBpdC4KIAkgKi8KLQlsb25nZXN0ID0gYmUzMl90b19jcHUoYWdmLT5hZ2ZfbG9uZ2VzdCk7Ci0JbG9uZ2VzdCA9IChsb25nZXN0ID4gZGVsdGEpID8gKGxvbmdlc3QgLSBkZWx0YSkgOgotCQkoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCkgPiAwIHx8IGxvbmdlc3QgPiAwKTsKLQlpZiAoYXJncy0+bWlubGVuICsgYXJncy0+YWxpZ25tZW50ICsgYXJncy0+bWluYWxpZ25zbG9wIC0gMSA+IGxvbmdlc3QgfHwKLQkgICAgICghKGZsYWdzICYgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORykgJiYKLQkJKGludCkoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZnJlZWJsa3MpICsKLQkJICAgYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCkgLSBuZWVkIC0gYXJncy0+dG90YWwpIDwKLQkgICAgIChpbnQpYXJncy0+bWlubGVmdCkpIHsKLQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdicCk7Ci0JCWFyZ3MtPmFnYnAgPSBOVUxMOwotCQlyZXR1cm4gMDsKKwlpZiAoIShmbGFncyAmIFhGU19BTExPQ19GTEFHX0ZSRUVJTkcpKSB7CisJCWRlbHRhID0gbmVlZCA+IGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZsY291bnQpID8KKwkJCShuZWVkIC0gYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCkpIDogMDsKKwkJbG9uZ2VzdCA9IGJlMzJfdG9fY3B1KGFnZi0+YWdmX2xvbmdlc3QpOworCQlsb25nZXN0ID0gKGxvbmdlc3QgPiBkZWx0YSkgPyAobG9uZ2VzdCAtIGRlbHRhKSA6CisJCQkoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCkgPiAwIHx8IGxvbmdlc3QgPiAwKTsKKwkJaWYgKChhcmdzLT5taW5sZW4gKyBhcmdzLT5hbGlnbm1lbnQgKyBhcmdzLT5taW5hbGlnbnNsb3AgLSAxKSA+CisJCQkJbG9uZ2VzdCB8fAorCQkgICAgKChpbnQpKGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZyZWVibGtzKSArCisJCSAgICAgYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCkgLSBuZWVkIC0gYXJncy0+dG90YWwpIDwKKwkJCQkoaW50KWFyZ3MtPm1pbmxlZnQpKSB7CisJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBhZ2JwKTsKKwkJCWFyZ3MtPmFnYnAgPSBOVUxMOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAJLyoKIAkgKiBNYWtlIHRoZSBmcmVlbGlzdCBzaG9ydGVyIGlmIGl0J3MgdG9vIGxvbmcuCkBAIC0xOTUwLDEyICsxOTYxLDExIEBACiAJCSAqIG9uIGEgY29tcGxldGVseSBmdWxsIGFnLgogCQkgKi8KIAkJaWYgKHRhcmdzLmFnYm5vID09IE5VTExBR0JMT0NLKSB7Ci0JCQlpZiAoIShmbGFncyAmIFhGU19BTExPQ19GTEFHX0ZSRUVJTkcpKSB7Ci0JCQkJeGZzX3RyYW5zX2JyZWxzZSh0cCwgYWdmbGJwKTsKLQkJCQlhcmdzLT5hZ2JwID0gTlVMTDsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWJyZWFrOworCQkJaWYgKGZsYWdzICYgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORykKKwkJCQlicmVhazsKKwkJCXhmc190cmFuc19icmVsc2UodHAsIGFnZmxicCk7CisJCQlhcmdzLT5hZ2JwID0gTlVMTDsKKwkJCXJldHVybiAwOwogCQl9CiAJCS8qCiAJCSAqIFB1dCBlYWNoIGFsbG9jYXRlZCBibG9jayBvbiB0aGUgbGlzdC4KQEAgLTI0NDIsMzEgKzI0NTIsMjYgQEAKIAl4ZnNfZnNibG9ja190CWJubywJLyogc3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mIGV4dGVudCAqLwogCXhmc19leHRsZW5fdAlsZW4pCS8qIGxlbmd0aCBvZiBleHRlbnQgKi8KIHsKLSNpZmRlZiBERUJVRwotCXhmc19hZ2ZfdAkqYWdmOwkvKiBhLmcuIGZyZWVzcGFjZSBoZWFkZXIgKi8KLSNlbmRpZgotCXhmc19hbGxvY19hcmdfdAlhcmdzOwkvKiBhbGxvY2F0aW9uIGFyZ3VtZW50IHN0cnVjdHVyZSAqLworCXhmc19hbGxvY19hcmdfdAlhcmdzOwogCWludAkJZXJyb3I7CiAKIAlBU1NFUlQobGVuICE9IDApOworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKHhmc19hbGxvY19hcmdfdCkpOwogCWFyZ3MudHAgPSB0cDsKIAlhcmdzLm1wID0gdHAtPnRfbW91bnRwOwogCWFyZ3MuYWdubyA9IFhGU19GU0JfVE9fQUdOTyhhcmdzLm1wLCBibm8pOwogCUFTU0VSVChhcmdzLmFnbm8gPCBhcmdzLm1wLT5tX3NiLnNiX2FnY291bnQpOwogCWFyZ3MuYWdibm8gPSBYRlNfRlNCX1RPX0FHQk5PKGFyZ3MubXAsIGJubyk7Ci0JYXJncy5hbGlnbm1lbnQgPSAxOwotCWFyZ3MubWlubGVuID0gYXJncy5taW5sZWZ0ID0gYXJncy5taW5hbGlnbnNsb3AgPSAwOwogCWRvd25fcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOwogCWFyZ3MucGFnID0gJmFyZ3MubXAtPm1fcGVyYWdbYXJncy5hZ25vXTsKIAlpZiAoKGVycm9yID0geGZzX2FsbG9jX2ZpeF9mcmVlbGlzdCgmYXJncywgWEZTX0FMTE9DX0ZMQUdfRlJFRUlORykpKQogCQlnb3RvIGVycm9yMDsKICNpZmRlZiBERUJVRwogCUFTU0VSVChhcmdzLmFnYnAgIT0gTlVMTCk7Ci0JYWdmID0gWEZTX0JVRl9UT19BR0YoYXJncy5hZ2JwKTsKLQlBU1NFUlQoYXJncy5hZ2JubyArIGxlbiA8PSBiZTMyX3RvX2NwdShhZ2YtPmFnZl9sZW5ndGgpKTsKKwlBU1NFUlQoKGFyZ3MuYWdibm8gKyBsZW4pIDw9CisJCWJlMzJfdG9fY3B1KFhGU19CVUZfVE9fQUdGKGFyZ3MuYWdicCktPmFnZl9sZW5ndGgpKTsKICNlbmRpZgotCWVycm9yID0geGZzX2ZyZWVfYWdfZXh0ZW50KHRwLCBhcmdzLmFnYnAsIGFyZ3MuYWdubywgYXJncy5hZ2JubywKLQkJbGVuLCAwKTsKKwllcnJvciA9IHhmc19mcmVlX2FnX2V4dGVudCh0cCwgYXJncy5hZ2JwLCBhcmdzLmFnbm8sIGFyZ3MuYWdibm8sIGxlbiwgMCk7CiBlcnJvcjA6CiAJdXBfcmVhZCgmYXJncy5tcC0+bV9wZXJhZ2xvY2spOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuaCBiL2ZzL3hmcy94ZnNfYWxsb2MuaAppbmRleCA2NTA1OTFmLi41YTQyNTYxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmgKKysrIGIvZnMveGZzL3hmc19hbGxvYy5oCkBAIC00NCw2ICs0NCwyNiBAQAogI2RlZmluZQlYRlNfQUxMT0NfRkxBR19GUkVFSU5HCTB4MDAwMDAwMDIgIC8qIGluZGljYXRlIGNhbGxlciBpcyBmcmVlaW5nIGV4dGVudHMqLwogCiAvKgorICogSW4gb3JkZXIgdG8gYXZvaWQgRU5PU1BDLXJlbGF0ZWQgZGVhZGxvY2sgY2F1c2VkIGJ5CisgKiBvdXQtb2Ytb3JkZXIgbG9ja2luZyBvZiBBR0YgYnVmZmVyIChQViA5NDczOTUpLCB3ZSBwbGFjZQorICogY29uc3RyYWludHMgb24gdGhlIHJlbGF0aW9uc2hpcCBhbW9uZyBhY3R1YWwgYWxsb2NhdGlvbnMgZm9yCisgKiBkYXRhIGJsb2NrcywgZnJlZWxpc3QgYmxvY2tzLCBhbmQgcG90ZW50aWFsIGZpbGUgZGF0YSBibWFwCisgKiBidHJlZSBibG9ja3MuIEhvd2V2ZXIsIHRoZXNlIHJlc3RyaWN0aW9ucyBtYXkgcmVzdWx0IGluIG5vCisgKiBhY3R1YWwgc3BhY2UgYWxsb2NhdGVkIGZvciBhIGRlbGF5ZWQgZXh0ZW50LCBmb3IgZXhhbXBsZSwgYSBkYXRhCisgKiBibG9jayBpbiBhIGNlcnRhaW4gQUcgaXMgYWxsb2NhdGVkIGJ1dCB0aGVyZSBpcyBubyBhZGRpdGlvbmFsCisgKiBibG9jayBmb3IgdGhlIGFkZGl0aW9uYWwgYm1hcCBidHJlZSBibG9jayBkdWUgdG8gYSBzcGxpdCBvZiB0aGUKKyAqIGJtYXAgYnRyZWUgb2YgdGhlIGZpbGUuIFRoZSByZXN1bHQgb2YgdGhpcyBtYXkgbGVhZCB0byBhbgorICogaW5maW5pdGUgbG9vcCBpbiB4ZnNzeW5jZCB3aGVuIHRoZSBmaWxlIGdldHMgZmx1c2hlZCB0byBkaXNrIGFuZAorICogYWxsIGRlbGF5ZWQgZXh0ZW50cyBuZWVkIHRvIGJlIGFjdHVhbGx5IGFsbG9jYXRlZC4gVG8gZ2V0IGFyb3VuZAorICogdGhpcywgd2UgZXhwbGljaXRseSBzZXQgYXNpZGUgYSBmZXcgYmxvY2tzIHdoaWNoIHdpbGwgbm90IGJlCisgKiByZXNlcnZlZCBpbiBkZWxheWVkIGFsbG9jYXRpb24uIENvbnNpZGVyaW5nIHRoZSBtaW5pbXVtIG51bWJlciBvZgorICogbmVlZGVkIGZyZWVsaXN0IGJsb2NrcyBpcyA0IGZzYnMgX3BlciBBR18sIGEgcG90ZW50aWFsIHNwbGl0IG9mIGZpbGUncyBibWFwCisgKiBidHJlZSByZXF1aXJlcyAxIGZzYiwgc28gd2Ugc2V0IHRoZSBudW1iZXIgb2Ygc2V0LWFzaWRlIGJsb2NrcworICogdG8gNCArIDQqYWdjb3VudC4KKyAqLworI2RlZmluZSBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKSAgKDQgKyAoKG1wKS0+bV9zYi5zYl9hZ2NvdW50ICogNCkpCisKKy8qCiAgKiBBcmd1bWVudCBzdHJ1Y3R1cmUgZm9yIHhmc19hbGxvYyByb3V0aW5lcy4KICAqIFRoaXMgaXMgdHVybmVkIGludG8gYSBzdHJ1Y3R1cmUgdG8gYXZvaWQgaGF2aW5nIDIwIGFyZ3VtZW50cyBwYXNzZWQKICAqIGRvd24gc2V2ZXJhbCBsZXZlbHMgb2YgdGhlIHN0YWNrLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCAzYTYxMzc1Li5iZjQ2ZmFlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtNDk5Myw3ICs0OTkzLDcgQEAKIAkJCQlibWEuZmlyc3RibG9jayA9ICpmaXJzdGJsb2NrOwogCQkJCWJtYS5hbGVuID0gYWxlbjsKIAkJCQlibWEub2ZmID0gYW9mZjsKLQkJCQlibWEuY29udiA9IChmbGFncyAmIFhGU19CTUFQSV9DT05WRVJUKTsKKwkJCQlibWEuY29udiA9ICEhKGZsYWdzICYgWEZTX0JNQVBJX0NPTlZFUlQpOwogCQkJCWJtYS53YXNkZWwgPSB3YXNkZWxheTsKIAkJCQlibWEubWlubGVuID0gbWlubGVuOwogCQkJCWJtYS5sb3cgPSBmbGlzdC0+eGJmX2xvdzsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZnNvcHMuYyBiL2ZzL3hmcy94ZnNfZnNvcHMuYwppbmRleCAwNzc2MjliLi5jMDY0ZTcyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2Zzb3BzLmMKKysrIGIvZnMveGZzL3hmc19mc29wcy5jCkBAIC00NjIsNyArNDYyLDcgQEAKIAogCXhmc19pY3NiX3N5bmNfY291bnRlcnNfbGF6eShtcCk7CiAJcyA9IFhGU19TQl9MT0NLKG1wKTsKLQljbnQtPmZyZWVkYXRhID0gbXAtPm1fc2Iuc2JfZmRibG9ja3M7CisJY250LT5mcmVlZGF0YSA9IG1wLT5tX3NiLnNiX2ZkYmxvY2tzIC0gWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CiAJY250LT5mcmVlcnR4ID0gbXAtPm1fc2Iuc2JfZnJleHRlbnRzOwogCWNudC0+ZnJlZWlubyA9IG1wLT5tX3NiLnNiX2lmcmVlOwogCWNudC0+YWxsb2Npbm8gPSBtcC0+bV9zYi5zYl9pY291bnQ7CkBAIC01MTksMTUgKzUxOSwxOSBAQAogCQl9CiAJCW1wLT5tX3Jlc2Jsa3MgPSByZXF1ZXN0OwogCX0gZWxzZSB7CisJCV9faW50NjRfdAlmcmVlOworCisJCWZyZWUgPSAgbXAtPm1fc2Iuc2JfZmRibG9ja3MgLSBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKTsKIAkJZGVsdGEgPSByZXF1ZXN0IC0gbXAtPm1fcmVzYmxrczsKLQkJbGNvdW50ZXIgPSBtcC0+bV9zYi5zYl9mZGJsb2NrcyAtIGRlbHRhOworCQlsY291bnRlciA9IGZyZWUgLSBkZWx0YTsKIAkJaWYgKGxjb3VudGVyIDwgMCkgewogCQkJLyogV2UgY2FuJ3Qgc2F0aXNmeSB0aGUgcmVxdWVzdCwganVzdCBnZXQgd2hhdCB3ZSBjYW4gKi8KLQkJCW1wLT5tX3Jlc2Jsa3MgKz0gbXAtPm1fc2Iuc2JfZmRibG9ja3M7Ci0JCQltcC0+bV9yZXNibGtzX2F2YWlsICs9IG1wLT5tX3NiLnNiX2ZkYmxvY2tzOwotCQkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgPSAwOworCQkJbXAtPm1fcmVzYmxrcyArPSBmcmVlOworCQkJbXAtPm1fcmVzYmxrc19hdmFpbCArPSBmcmVlOworCQkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgPSBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKTsKIAkJfSBlbHNlIHsKLQkJCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0gbGNvdW50ZXI7CisJCQltcC0+bV9zYi5zYl9mZGJsb2NrcyA9CisJCQkJbGNvdW50ZXIgKyBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKTsKIAkJCW1wLT5tX3Jlc2Jsa3MgPSByZXF1ZXN0OwogCQkJbXAtPm1fcmVzYmxrc19hdmFpbCArPSBkZWx0YTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IDg2YzFiZjAuLjFmOGVjZmYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTMzNCwxMCArMzM0LDkgQEAKICNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKQogCW5pID0gMDsKICNlbGlmIGRlZmluZWQoREVCVUcpCi0JbmkgPSAoaW1hcF9mbGFncyAmIFhGU19JTUFQX0JVTEtTVEFUKSA/IDAgOgotCQkoQkJUT0IoaW1hcC5pbV9sZW4pID4+IG1wLT5tX3NiLnNiX2lub2RlbG9nKTsKKwluaSA9IEJCVE9CKGltYXAuaW1fbGVuKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZzsKICNlbHNlCS8qIHVzdWFsIGNhc2UgKi8KLQluaSA9IChpbWFwX2ZsYWdzICYgWEZTX0lNQVBfQlVMS1NUQVQpID8gMCA6IDE7CisJbmkgPSAxOwogI2VuZGlmCiAKIAlmb3IgKGkgPSAwOyBpIDwgbmk7IGkrKykgewpAQCAtMzQ4LDExICszNDcsMTUgQEAKIAkJCQkJKGkgPDwgbXAtPm1fc2Iuc2JfaW5vZGVsb2cpKTsKIAkJZGlfb2sgPSBJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV9tYWdpYywgQVJDSF9DT05WRVJUKSA9PSBYRlNfRElOT0RFX01BR0lDICYmCiAJCQkgICAgWEZTX0RJTk9ERV9HT09EX1ZFUlNJT04oSU5UX0dFVChkaXAtPmRpX2NvcmUuZGlfdmVyc2lvbiwgQVJDSF9DT05WRVJUKSk7Ci0JCWlmICh1bmxpa2VseShYRlNfVEVTVF9FUlJPUighZGlfb2ssIG1wLCBYRlNfRVJSVEFHX0lUT0JQX0lOT1RPQlAsCi0JCQkJIFhGU19SQU5ET01fSVRPQlBfSU5PVE9CUCkpKSB7CisJCWlmICh1bmxpa2VseShYRlNfVEVTVF9FUlJPUighZGlfb2ssIG1wLAorCQkJCQkJWEZTX0VSUlRBR19JVE9CUF9JTk9UT0JQLAorCQkJCQkJWEZTX1JBTkRPTV9JVE9CUF9JTk9UT0JQKSkpIHsKKwkJCWlmIChpbWFwX2ZsYWdzICYgWEZTX0lNQVBfQlVMS1NUQVQpIHsKKwkJCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CisJCQkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOworCQkJfQogI2lmZGVmIERFQlVHCi0JCQlpZiAoIShpbWFwX2ZsYWdzICYgWEZTX0lNQVBfQlVMS1NUQVQpKQotCQkJCWNtbl9lcnIoQ0VfQUxFUlQsCisJCQljbW5fZXJyKENFX0FMRVJULAogCQkJCQkiRGV2aWNlICVzIC0gYmFkIGlub2RlIG1hZ2ljL3ZzbiAiCiAJCQkJCSJkYWRkciAlbGxkICMlZCAobWFnaWM9JXgpIiwKIAkJCQlYRlNfQlVGVEFSR19OQU1FKG1wLT5tX2RkZXZfdGFyZ3ApLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuYyBiL2ZzL3hmcy94ZnNfbG9nLmMKaW5kZXggZTczMDMyOC4uMjFhYzFhNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuYworKysgYi9mcy94ZnMveGZzX2xvZy5jCkBAIC0xNDEzLDcgKzE0MTMsNyBAQAogCW9wcyA9IGljbG9nLT5pY19oZWFkZXIuaF9udW1fbG9nb3BzOwogCUlOVF9TRVQoaWNsb2ctPmljX2hlYWRlci5oX251bV9sb2dvcHMsIEFSQ0hfQ09OVkVSVCwgb3BzKTsKIAotCWJwCSAgICA9IGljbG9nLT5pY19icDsKKwlicCA9IGljbG9nLT5pY19icDsKIAlBU1NFUlQoWEZTX0JVRl9GU1BSSVZBVEUyKGJwLCB1bnNpZ25lZCBsb25nKSA9PSAodW5zaWduZWQgbG9uZykxKTsKIAlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCAodW5zaWduZWQgbG9uZykyKTsKIAlYRlNfQlVGX1NFVF9BRERSKGJwLCBCTE9DS19MU04oSU5UX0dFVChpY2xvZy0+aWNfaGVhZGVyLmhfbHNuLCBBUkNIX0NPTlZFUlQpKSk7CkBAIC0xNDMwLDE1ICsxNDMwLDE0IEBACiAJfQogCVhGU19CVUZfU0VUX1BUUihicCwgKHhmc19jYWRkcl90KSAmKGljbG9nLT5pY19oZWFkZXIpLCBjb3VudCk7CiAJWEZTX0JVRl9TRVRfRlNQUklWQVRFKGJwLCBpY2xvZyk7CS8qIHNhdmUgZm9yIGxhdGVyICovCisJWEZTX0JVRl9aRVJPRkxBR1MoYnApOwogCVhGU19CVUZfQlVTWShicCk7CiAJWEZTX0JVRl9BU1lOQyhicCk7CiAJLyoKIAkgKiBEbyBhbiBvcmRlcmVkIHdyaXRlIGZvciB0aGUgbG9nIGJsb2NrLgotCSAqCi0JICogSXQgbWF5IG5vdCBiZSBuZWVkZWQgdG8gZmx1c2ggdGhlIGZpcnN0IHNwbGl0IGJsb2NrIGluIHRoZSBsb2cgd3JhcAotCSAqIGNhc2UsIGJ1dCBkbyBpdCBhbnl3YXlzIHRvIGJlIHNhZmUgLUFLCisJICogSXRzIHVubmVjZXNzYXJ5IHRvIGZsdXNoIHRoZSBmaXJzdCBzcGxpdCBibG9jayBpbiB0aGUgbG9nIHdyYXAgY2FzZS4KIAkgKi8KLQlpZiAobG9nLT5sX21wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCisJaWYgKCFzcGxpdCAmJiAobG9nLT5sX21wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpKQogCQlYRlNfQlVGX09SREVSRUQoYnApOwogCiAJQVNTRVJUKFhGU19CVUZfQUREUihicCkgPD0gbG9nLT5sX2xvZ0JCc2l6ZS0xKTsKQEAgLTE0NjAsNyArMTQ1OSw3IEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAJaWYgKHNwbGl0KSB7Ci0JCWJwCQk9IGljbG9nLT5pY19sb2ctPmxfeGJ1ZjsKKwkJYnAgPSBpY2xvZy0+aWNfbG9nLT5sX3hidWY7CiAJCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURTIoYnAsIHVuc2lnbmVkIGxvbmcpID09CiAJCQkJCQkJKHVuc2lnbmVkIGxvbmcpMSk7CiAJCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsICh1bnNpZ25lZCBsb25nKTIpOwpAQCAtMTQ2OCw2ICsxNDY3LDcgQEAKIAkJWEZTX0JVRl9TRVRfUFRSKGJwLCAoeGZzX2NhZGRyX3QpKChfX3BzaW50X3QpJihpY2xvZy0+aWNfaGVhZGVyKSsKIAkJCQkJICAgIChfX3BzaW50X3QpY291bnQpLCBzcGxpdCk7CiAJCVhGU19CVUZfU0VUX0ZTUFJJVkFURShicCwgaWNsb2cpOworCQlYRlNfQlVGX1pFUk9GTEFHUyhicCk7CiAJCVhGU19CVUZfQlVTWShicCk7CiAJCVhGU19CVUZfQVNZTkMoYnApOwogCQlpZiAobG9nLT5sX21wLT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmMgYi9mcy94ZnMveGZzX21vdW50LmMKaW5kZXggNGJlNWMwYi4uOWRmYWUxOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5jCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuYwpAQCAtMTI0MywyNCArMTI0Myw2IEBACiAJeGZzX3RyYW5zX2xvZ19idWYodHAsIGJwLCBmaXJzdCwgbGFzdCk7CiB9CiAKLS8qCi0gKiBJbiBvcmRlciB0byBhdm9pZCBFTk9TUEMtcmVsYXRlZCBkZWFkbG9jayBjYXVzZWQgYnkKLSAqIG91dC1vZi1vcmRlciBsb2NraW5nIG9mIEFHRiBidWZmZXIgKFBWIDk0NzM5NSksIHdlIHBsYWNlCi0gKiBjb25zdHJhaW50cyBvbiB0aGUgcmVsYXRpb25zaGlwIGFtb25nIGFjdHVhbCBhbGxvY2F0aW9ucyBmb3IKLSAqIGRhdGEgYmxvY2tzLCBmcmVlbGlzdCBibG9ja3MsIGFuZCBwb3RlbnRpYWwgZmlsZSBkYXRhIGJtYXAKLSAqIGJ0cmVlIGJsb2Nrcy4gSG93ZXZlciwgdGhlc2UgcmVzdHJpY3Rpb25zIG1heSByZXN1bHQgaW4gbm8KLSAqIGFjdHVhbCBzcGFjZSBhbGxvY2F0ZWQgZm9yIGEgZGVsYXllZCBleHRlbnQsIGZvciBleGFtcGxlLCBhIGRhdGEKLSAqIGJsb2NrIGluIGEgY2VydGFpbiBBRyBpcyBhbGxvY2F0ZWQgYnV0IHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwKLSAqIGJsb2NrIGZvciB0aGUgYWRkaXRpb25hbCBibWFwIGJ0cmVlIGJsb2NrIGR1ZSB0byBhIHNwbGl0IG9mIHRoZQotICogYm1hcCBidHJlZSBvZiB0aGUgZmlsZS4gVGhlIHJlc3VsdCBvZiB0aGlzIG1heSBsZWFkIHRvIGFuCi0gKiBpbmZpbml0ZSBsb29wIGluIHhmc3N5bmNkIHdoZW4gdGhlIGZpbGUgZ2V0cyBmbHVzaGVkIHRvIGRpc2sgYW5kCi0gKiBhbGwgZGVsYXllZCBleHRlbnRzIG5lZWQgdG8gYmUgYWN0dWFsbHkgYWxsb2NhdGVkLiBUbyBnZXQgYXJvdW5kCi0gKiB0aGlzLCB3ZSBleHBsaWNpdGx5IHNldCBhc2lkZSBhIGZldyBibG9ja3Mgd2hpY2ggd2lsbCBub3QgYmUKLSAqIHJlc2VydmVkIGluIGRlbGF5ZWQgYWxsb2NhdGlvbi4gQ29uc2lkZXJpbmcgdGhlIG1pbmltdW0gbnVtYmVyIG9mCi0gKiBuZWVkZWQgZnJlZWxpc3QgYmxvY2tzIGlzIDQgZnNicywgYSBwb3RlbnRpYWwgc3BsaXQgb2YgZmlsZSdzIGJtYXAKLSAqIGJ0cmVlIHJlcXVpcmVzIDEgZnNiLCBzbyB3ZSBzZXQgdGhlIG51bWJlciBvZiBzZXQtYXNpZGUgYmxvY2tzIHRvIDguCi0qLwotI2RlZmluZSBTRVRfQVNJREVfQkxPQ0tTIDgKIAogLyoKICAqIHhmc19tb2RfaW5jb3JlX3NiX3VubG9ja2VkKCkgaXMgYSB1dGlsaXR5IHJvdXRpbmUgY29tbW9uIHVzZWQgdG8gYXBwbHkKQEAgLTEzMDYsNyArMTI4OCw4IEBACiAJCXJldHVybiAwOwogCWNhc2UgWEZTX1NCU19GREJMT0NLUzoKIAotCQlsY291bnRlciA9IChsb25nIGxvbmcpbXAtPm1fc2Iuc2JfZmRibG9ja3MgLSBTRVRfQVNJREVfQkxPQ0tTOworCQlsY291bnRlciA9IChsb25nIGxvbmcpCisJCQltcC0+bV9zYi5zYl9mZGJsb2NrcyAtIFhGU19BTExPQ19TRVRfQVNJREUobXApOwogCQlyZXNfdXNlZCA9IChsb25nIGxvbmcpKG1wLT5tX3Jlc2Jsa3MgLSBtcC0+bV9yZXNibGtzX2F2YWlsKTsKIAogCQlpZiAoZGVsdGEgPiAwKSB7CQkvKiBQdXR0aW5nIGJsb2NrcyBiYWNrICovCkBAIC0xMzQwLDcgKzEzMjMsNyBAQAogCQkJfQogCQl9CiAKLQkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgPSBsY291bnRlciArIFNFVF9BU0lERV9CTE9DS1M7CisJCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0gbGNvdW50ZXIgKyBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBYRlNfU0JTX0ZSRVhURU5UUzoKIAkJbGNvdW50ZXIgPSAobG9uZyBsb25nKW1wLT5tX3NiLnNiX2ZyZXh0ZW50czsKQEAgLTIwMjEsNyArMjAwNCw4IEBACiAgKiB3aGVuIHdlIGdldCBuZWFyIEVOT1NQQy4KICAqLwogI2RlZmluZSBYRlNfSUNTQl9JTk9fQ05UUl9SRUVOQUJMRQk2NAotI2RlZmluZSBYRlNfSUNTQl9GREJMS19DTlRSX1JFRU5BQkxFCTUxMgorI2RlZmluZSBYRlNfSUNTQl9GREJMS19DTlRSX1JFRU5BQkxFKG1wKSBcCisJCSg1MTIgKyBYRlNfQUxMT0NfU0VUX0FTSURFKG1wKSkKIFNUQVRJQyB2b2lkCiB4ZnNfaWNzYl9iYWxhbmNlX2NvdW50ZXIoCiAJeGZzX21vdW50X3QJKm1wLApAQCAtMjA1NSw3ICsyMDM5LDcgQEAKIAljYXNlIFhGU19TQlNfRkRCTE9DS1M6CiAJCWNvdW50ID0gbXAtPm1fc2Iuc2JfZmRibG9ja3M7CiAJCXJlc2lkID0gZG9fZGl2KGNvdW50LCB3ZWlnaHQpOwotCQlpZiAoY291bnQgPCBYRlNfSUNTQl9GREJMS19DTlRSX1JFRU5BQkxFKQorCQlpZiAoY291bnQgPCBYRlNfSUNTQl9GREJMS19DTlRSX1JFRU5BQkxFKG1wKSkKIAkJCWdvdG8gb3V0OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMjExMCwxMSArMjA5NCwxMSBAQAogCWNhc2UgWEZTX1NCU19GREJMT0NLUzoKIAkJQlVHX09OKChtcC0+bV9yZXNibGtzIC0gbXAtPm1fcmVzYmxrc19hdmFpbCkgIT0gMCk7CiAKLQkJbGNvdW50ZXIgPSBpY3NicC0+aWNzYl9mZGJsb2NrczsKKwkJbGNvdW50ZXIgPSBpY3NicC0+aWNzYl9mZGJsb2NrcyAtIFhGU19BTExPQ19TRVRfQVNJREUobXApOwogCQlsY291bnRlciArPSBkZWx0YTsKIAkJaWYgKHVubGlrZWx5KGxjb3VudGVyIDwgMCkpCiAJCQlnb3RvIHNsb3dfcGF0aDsKLQkJaWNzYnAtPmljc2JfZmRibG9ja3MgPSBsY291bnRlcjsKKwkJaWNzYnAtPmljc2JfZmRibG9ja3MgPSBsY291bnRlciArIFhGU19BTExPQ19TRVRfQVNJREUobXApOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlCVUcoKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdmZzb3BzLmMgYi9mcy94ZnMveGZzX3Zmc29wcy5jCmluZGV4IDZjOTYzOTEuLmEzNDc5NmUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdmZzb3BzLmMKKysrIGIvZnMveGZzL3hmc192ZnNvcHMuYwpAQCAtNTE1LDcgKzUxNSw3IEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGVycm9yMjsKIAotCWlmICgobXAtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgJiYgISh2ZnNwLT52ZnNfZmxhZyAmIFZGU19SRE9OTFkpKQorCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9CQVJSSUVSKQogCQl4ZnNfbW91bnRmc19jaGVja19iYXJyaWVycyhtcCk7CiAKIAllcnJvciA9IFhGU19JT0lOSVQodmZzcCwgYXJncywgZmxhZ3MpOwpAQCAtODExLDcgKzgxMSw4IEBACiAJc3RhdHAtPmZfYnNpemUgPSBzYnAtPnNiX2Jsb2Nrc2l6ZTsKIAlsc2l6ZSA9IHNicC0+c2JfbG9nc3RhcnQgPyBzYnAtPnNiX2xvZ2Jsb2NrcyA6IDA7CiAJc3RhdHAtPmZfYmxvY2tzID0gc2JwLT5zYl9kYmxvY2tzIC0gbHNpemU7Ci0Jc3RhdHAtPmZfYmZyZWUgPSBzdGF0cC0+Zl9iYXZhaWwgPSBzYnAtPnNiX2ZkYmxvY2tzOworCXN0YXRwLT5mX2JmcmVlID0gc3RhdHAtPmZfYmF2YWlsID0KKwkJCQlzYnAtPnNiX2ZkYmxvY2tzIC0gWEZTX0FMTE9DX1NFVF9BU0lERShtcCk7CiAJZmFrZWlub3MgPSBzdGF0cC0+Zl9iZnJlZSA8PCBzYnAtPnNiX2lub3BibG9nOwogI2lmIFhGU19CSUdfSU5VTVMKIAlmYWtlaW5vcyArPSBtcC0+bV9pbm9hZGQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL0tidWlsZCBiL2luY2x1ZGUvS2J1aWxkCmluZGV4IGNiMjUzNDguLjJkMDNmOTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvS2J1aWxkCisrKyBiL2luY2x1ZGUvS2J1aWxkCkBAIC0xLDIgKzEsOSBAQAotaGVhZGVyLXkgKz0gYXNtLWdlbmVyaWMvIGxpbnV4LyBzY3NpLyBzb3VuZC8gbXRkLyByZG1hLyB2aWRlby8KLWhlYWRlci15ICs9IGFzbS0kKEFSQ0gpLyAKK2hlYWRlci15ICs9IGFzbS1nZW5lcmljLworaGVhZGVyLXkgKz0gbGludXgvCitoZWFkZXIteSArPSBzY3NpLworaGVhZGVyLXkgKz0gc291bmQvCitoZWFkZXIteSArPSBtdGQvCitoZWFkZXIteSArPSByZG1hLworaGVhZGVyLXkgKz0gdmlkZW8vCisKK2hlYWRlci15ICs9IGFzbS0kKEFSQ0gpLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvS2J1aWxkIGIvaW5jbHVkZS9hc20tYWxwaGEvS2J1aWxkCmluZGV4IGU1N2ZkNTcuLmI3YzhmMTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS1hbHBoYS9LYnVpbGQKQEAgLTEsNSArMSwxMSBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAotdW5pZmRlZi15ICs9IGNvbnNvbGUuaCBmcHUuaCBzeXNpbmZvLmgKK2hlYWRlci15ICs9IGdlbnRyYXAuaAoraGVhZGVyLXkgKz0gcmVnZGVmLmgKK2hlYWRlci15ICs9IHBhbC5oCitoZWFkZXIteSArPSByZWcuaAogCi1oZWFkZXIteSArPSBnZW50cmFwLmggcmVnZGVmLmggcGFsLmggcmVnLmgKK3VuaWZkZWYteSArPSBjb25zb2xlLmgKK3VuaWZkZWYteSArPSBmcHUuaAordW5pZmRlZi15ICs9IHN5c2luZm8uaAordW5pZmRlZi15ICs9IGNvbXBpbGVyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFscGhhL2NvbXBpbGVyLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9jb21waWxlci5oCmluZGV4IDAwYzZmNTcuLmQyNzY4Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvY29tcGlsZXIuaApAQCAtOTAsNiArOTAsNyBAQAogICBfX2FzbV9fKCJzdHcgJTEsJTAiIDogIj1tIihtZW0pIDogInIiKHZhbCkpCiAjZW5kaWYKIAorI2lmZGVmIF9fS0VSTkVMX18KIC8qIFNvbWUgaWRpb3RzIG92ZXIgaW4gPGxpbnV4L2NvbXBpbGVyLmg+IHRob3VnaHQgaW5saW5lIHNob3VsZCBpbXBseQogICAgYWx3YXlzX2lubGluZS4gIFRoaXMgYnJlYWtzIHN0dWZmLiAgV2UnbGwgaW5jbHVkZSB0aGlzIGZpbGUgd2hlbmV2ZXIKICAgIHdlIHJ1biBpbnRvIHN1Y2ggcHJvYmxlbXMuICAqLwpAQCAtMTAxLDQgKzEwMiw2IEBACiAjdW5kZWYgX19hbHdheXNfaW5saW5lCiAjZGVmaW5lIF9fYWx3YXlzX2lubGluZQkJaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLyogX19BTFBIQV9DT01QSUxFUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmggYi9pbmNsdWRlL2FzbS1hbHBoYS9wYWdlLmgKaW5kZXggOGM3Y2Q1MC4uZDJiZWQzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYWxwaGEvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFscGhhL3BhZ2UuaApAQCAtMSw2ICsxLDggQEAKICNpZm5kZWYgX0FMUEhBX1BBR0VfSAogI2RlZmluZSBfQUxQSEFfUEFHRV9ICiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKICNpbmNsdWRlIDxhc20vcGFsLmg+CiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCkBAIC04LDggKzEwLDYgQEAKICNkZWZpbmUgUEFHRV9TSVpFCSgxVUwgPDwgUEFHRV9TSElGVCkKICNkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKIAotI2lmZGVmIF9fS0VSTkVMX18KLQogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2RlZmluZSBTVFJJQ1RfTU1fVFlQRUNIRUNLUwpAQCAtOTIsOSArOTIsOSBAQAogCiAjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkJKFZNX1JFQUQgfCBWTV9XUklURSB8IFZNX0VYRUMgfCBcCiAJCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQUxQSEFfUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9lcDkzeHgtcmVncy5oCmluZGV4IDhjMzIyOTcuLjU5M2Y1NjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvZXA5M3h4LXJlZ3MuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBFUDkzWFhfRE1BX0JBU0UJCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDAwMDAwKQogCiAjZGVmaW5lIEVQOTNYWF9FVEhFUk5FVF9CQVNFCQkoRVA5M1hYX0FIQl9WSVJUX0JBU0UgKyAweDAwMDEwMDAwKQorI2RlZmluZSBFUDkzWFhfRVRIRVJORVRfUEhZU19CQVNFCShFUDkzWFhfQUhCX1BIWVNfQkFTRSArIDB4MDAwMTAwMDApCiAKICNkZWZpbmUgRVA5M1hYX1VTQl9CQVNFCQkJKEVQOTNYWF9BSEJfVklSVF9CQVNFICsgMHgwMDAyMDAwMCkKICNkZWZpbmUgRVA5M1hYX1VTQl9QSFlTX0JBU0UJCShFUDkzWFhfQUhCX1BIWVNfQkFTRSArIDB4MDAwMjAwMDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWVwOTN4eC9wbGF0Zm9ybS5oCmluZGV4IGQ3YTM0Y2UuLmI0YThkZWI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvcGxhdGZvcm0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1lcDkzeHgvcGxhdGZvcm0uaApAQCAtMTEsNSArMTEsMTEgQEAKIHZvaWQgZXA5M3h4X2Nsb2NrX2luaXQodm9pZCk7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBlcDkzeHhfdGltZXI7CiAKK3N0cnVjdCBlcDkzeHhfZXRoX2RhdGEKK3sKKwl1bnNpZ25lZCBjaGFyCWRldl9hZGRyWzZdOworCXVuc2lnbmVkIGNoYXIJcGh5X2lkOworfTsKKwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMzEtaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmgKaW5kZXggOGZmNzNkNC4uNzEzNWFkNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmgKQEAgLTkxLDcgKzkxLDYgQEAKICNkZWZpbmUgTlJfSVJRUwkJCU5SX0lPUDMzMV9JUlFTCiAKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVE4MDMzMSkKIC8qCiAgKiBJbnRlcnJ1cHRzIGF2YWlsYWJsZSBvbiB0aGUgSVE4MDMzMSBib2FyZAogICovCkBAIC0xMTEsNyArMTEwLDYgQEAKICNkZWZpbmUJSVJRX0lRODAzMzFfSU5UQwlJUlFfSU9QMzMxX1hJTlQyCiAjZGVmaW5lCUlSUV9JUTgwMzMxX0lOVEQJSVJRX0lPUDMzMV9YSU5UMwogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19NQUNIX0lRODAzMzIpCiAvKgogICogSW50ZXJydXB0cyBhdmFpbGFibGUgb24gdGhlIElRODAzMzIgYm9hcmQKICAqLwpAQCAtMTMxLDYgKzEyOSw0IEBACiAjZGVmaW5lCUlSUV9JUTgwMzMyX0lOVEMJSVJRX0lPUDMzMV9YSU5UMgogI2RlZmluZQlJUlFfSVE4MDMzMl9JTlRECUlSUV9JT1AzMzFfWElOVDMKIAotI2VuZGlmCi0KICNlbmRpZiAvLyBfSU9QMzMxX0lSUV9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCmluZGV4IDNjNGViOWYuLmY4MzAwM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKQEAgLTQ4LDggKzQ4LDYgQEAKIH07CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbXB1cmF0ZTsKLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGNsb2NrczsKLWV4dGVybiBzcGlubG9ja190IGNsb2NrZndfbG9jazsKIAogZXh0ZXJuIGludCBjbGtfaW5pdChzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyAqIGN1c3RvbV9jbG9ja3MpOwogZXh0ZXJuIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS9zc3AuaAppbmRleCA5NDk4NzhjLi5lYTIwMDU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvc3NwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3NzcC5oCkBAIC00MCw4ICs0MCw4IEBACiB9OwogCiBpbnQgc3NwX3dyaXRlX3dvcmQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIGRhdGEpOwotaW50IHNzcF9yZWFkX3dvcmQoc3RydWN0IHNzcF9kZXYgKmRldik7Ci12b2lkIHNzcF9mbHVzaChzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKK2ludCBzc3BfcmVhZF93b3JkKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiAqZGF0YSk7CitpbnQgc3NwX2ZsdXNoKHN0cnVjdCBzc3BfZGV2ICpkZXYpOwogdm9pZCBzc3BfZW5hYmxlKHN0cnVjdCBzc3BfZGV2ICpkZXYpOwogdm9pZCBzc3BfZGlzYWJsZShzdHJ1Y3Qgc3NwX2RldiAqZGV2KTsKIHZvaWQgc3NwX3NhdmVfc3RhdGUoc3RydWN0IHNzcF9kZXYgKmRldiwgc3RydWN0IHNzcF9zdGF0ZSAqc3NwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYW51YmlzLWNwbGQuaAppbmRleCA1Njc1YjE3Li40MGU4ZTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1jcGxkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtY3BsZC5oCkBAIC05LDkgKzksNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKgogKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX0FOVUJJU0NQTERfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtaXJxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaAppbmRleCA4MmYxNWRiLi40YjVmNDIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1pcnEuaApAQCAtOSw5ICs5LDcgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICovCisqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfQU5VQklTSVJRX0gKICNkZWZpbmUgX19BU01fQVJDSF9BTlVCSVNJUlFfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hbnViaXMtbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaAppbmRleCBkNTI5ZmZkLi4wNThhMjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2FudWJpcy1tYXAuaApAQCAtOSw4ICs5LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgogKi8KIAogLyogbmVlZHMgYXJjaC9tYXAuaCBpbmNsdWRpbmcgd2l0aCB0aGlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2F1ZGlvLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2F1ZGlvLmgKaW5kZXggMGQyNzZlNi4uN2UwMjIyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9hdWRpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYXVkaW8uaApAQCAtOSwxMCArOSw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqCTIwLU5vdi0yMDA0IEJKRCAgQ3JlYXRlZCBmaWxlCi0gKgkwNy1NYXItMjAwNSBCSkQgIEFkZGVkIHN1c3BlbmQvcmVzdW1lIGNhbGxzCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfQVVESU9fSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWNwbGQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1jcGxkLmgKaW5kZXggZTI4Y2E1MS4uODk2OWNmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWNwbGQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtY3BsZC5oCkBAIC04LDExICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDI1LU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlLCBhZGRlZCBDVFJMMSByZWdpc3RlcnMKLSAqICAzMC1BdWctMjAwNCBCSkQgIFVwZGF0ZWQgZGVmaW5pdGlvbnMgZnJvbSAyLjQuMjYgcG9ydAotICogIDMwLUF1Zy0yMDA0IEJKRCAgQWRkZWQgQ1RSTDMgYW5kIENUUkw0IGRlZmluaXRpb25zCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfQkFTVENQTERfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oCmluZGV4IGI3OWI0N2YuLjE1ZmZhNjZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LWlycS5oCkBAIC04LDExICs4LDcgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDE0LVNlcC0yMDA0IEJKRCAgRml4ZWQgSVJRX1VTQk9DIGRlZmluaXRpb24KLSAqICAwNi1KYW4tMjAwMyBCSkQgIExpbnV4IDIuNi4wIHZlcnNpb24KLSAqLworKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX0JBU1RJUlFfSAogI2RlZmluZSBfX0FTTV9BUkNIX0JBU1RJUlFfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LW1hcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LW1hcC5oCmluZGV4IDI5YzA3ZTMuLjcyN2NlZjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtbWFwLmgKQEAgLTgsMTAgKzgsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgMDYtSmFuLTIwMDMgQkpEICBMaW51eCAyLjYuMCB2ZXJzaW9uLCBtb3ZlZCBiYXN0IHNwZWNpZmljcyBmcm9tIGFyY2gvbWFwLmgKLSAqICAxMi1NYXItMjAwNCBCSkQgIEZpeGVkIGhlYWRlciBpbmNsdWRlIHByb3RlY3Rpb24KICovCiAKIC8qIG5lZWRzIGFyY2gvbWFwLmggaW5jbHVkaW5nIHdpdGggdGhpcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LXBtdS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9iYXN0LXBtdS5oCmluZGV4IDc1OGM1YzUuLjgyODM2MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvYmFzdC1wbXUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2Jhc3QtcG11LmgKQEAgLTksOSArOSw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqCTA4LU9jdC0yMDAzCUJKRAlJbml0aWFsIGNyZWF0aW9uCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfQkFTVFBNVV9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RlYnVnLW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RlYnVnLW1hY3JvLlMKaW5kZXggYjdkMTVkMS4uOTMwNjQ4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kZWJ1Zy1tYWNyby5TCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZGVidWctbWFjcm8uUwpAQCAtMTAsOSArMTAsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCiAqLwogCiAjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaAppbmRleCA3Mjk2NGY5Li4zNjYxZTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKQEAgLTEsMTggKzEsMTMgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWJhc3QvZG1hLmgKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoQykgMjAwMywyMDA0LDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogU2Ftc3VuZyBTM0MyNDEwWCBETUEgc3VwcG9ydAorICogU2Ftc3VuZyBTM0MyNDFYWCBETUEgc3VwcG9ydAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogID8/LU1heS0yMDAzIEJKRCAgIENyZWF0ZWQgZmlsZQotICogID8/LUp1bi0yMDAzIEJKRCAgIEFkZGVkIG1vcmUgZG1hIGZ1bmN0aW9uYWxpdHkgdG8gZ28gd2l0aCBhcmNoCi0gKiAgMTAtTm92LTIwMDQgQkpEICAgQWRkZWQgc3lzX2RldmljZSBzdXBwb3J0CiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKQEAgLTIxLDI4ICsxNiwyNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgImhhcmR3YXJlLmgiCiAKLQogLyoKICAqIFRoaXMgaXMgdGhlIG1heGltdW0gRE1BIGFkZHJlc3MocGh5c2ljYWwgYWRkcmVzcykgdGhhdCBjYW4gYmUgRE1BZCB0by4KICAqCiAgKi8KLSNkZWZpbmUgTUFYX0RNQV9BRERSRVNTCQkweDIwMDAwMDAwCisjZGVmaW5lIE1BWF9ETUFfQUREUkVTUwkJMHg0MDAwMDAwMAogI2RlZmluZSBNQVhfRE1BX1RSQU5TRkVSX1NJWkUgICAweDEwMDAwMCAvKiBEYXRhIFVuaXQgaXMgaGFsZiB3b3JkICAqLwogCi0KIC8qIHdlIGhhdmUgNCBkbWEgY2hhbm5lbHMgKi8KICNkZWZpbmUgUzNDMjQxMF9ETUFfQ0hBTk5FTFMgICAgICAgICg0KQogCiAvKiB0eXBlcyAqLwogCi10eXBlZGVmIGVudW0geworZW51bSBzM2MyNDEwX2RtYV9zdGF0ZSB7CiAJUzNDMjQxMF9ETUFfSURMRSwKIAlTM0MyNDEwX0RNQV9SVU5OSU5HLAogCVMzQzI0MTBfRE1BX1BBVVNFRAotfSBzM2MyNDEwX2RtYV9zdGF0ZV90OworfTsKIAogCi0vKiBzM2MyNDEwX2RtYV9sb2Fkc3RfdAorLyogZW51bSBzM2MyNDEwX2RtYV9sb2Fkc3QKICAqCiAgKiBUaGlzIHJlcHJlc2VudHMgdGhlIHN0YXRlIG9mIHRoZSBETUEgZW5naW5lLCB3cnQgdG8gdGhlIGxvYWRlZCAvIHJ1bm5pbmcKICAqIHRyYW5zZmVycy4gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgd2F5IG9mIGtub3dpbmcgZXhhY3RseSB0aGUgc3RhdGUgb2YKQEAgLTcwLDQ0ICs2Myw0MCBAQAogICogY3VycmVudGx5IHJ1bm5pbmcuCiAqLwogCi10eXBlZGVmIGVudW0geworZW51bSBzM2MyNDEwX2RtYV9sb2Fkc3QgewogCVMzQzI0MTBfRE1BTE9BRF9OT05FLAogCVMzQzI0MTBfRE1BTE9BRF8xTE9BREVELAogCVMzQzI0MTBfRE1BTE9BRF8xUlVOTklORywKIAlTM0MyNDEwX0RNQUxPQURfMUxPQURFRF8xUlVOTklORywKLX0gczNjMjQxMF9kbWFfbG9hZHN0X3Q7Cit9OwogCi10eXBlZGVmIGVudW0geworZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHsKIAlTM0MyNDEwX1JFU19PSywKIAlTM0MyNDEwX1JFU19FUlIsCiAJUzNDMjQxMF9SRVNfQUJPUlQKLX0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdF90OwotCi0KLXR5cGVkZWYgZW51bSBzM2MyNDEwX2RtYXNyY19lIHMzYzI0MTBfZG1hc3JjX3Q7Ci0KLWVudW0gczNjMjQxMF9kbWFzcmNfZSB7Ci0JUzNDMjQxMF9ETUFTUkNfSFcsICAgICAgLyogc291cmNlIGlzIG1lbW9yeSAqLwotCVMzQzI0MTBfRE1BU1JDX01FTSAgICAgIC8qIHNvdXJjZSBpcyBoYXJkd2FyZSAqLwogfTsKIAotLyogZW51bSBzM2MyNDEwX2NoYW5fb3BfZQorZW51bSBzM2MyNDEwX2RtYXNyYyB7CisJUzNDMjQxMF9ETUFTUkNfSFcsCQkvKiBzb3VyY2UgaXMgbWVtb3J5ICovCisJUzNDMjQxMF9ETUFTUkNfTUVNCQkvKiBzb3VyY2UgaXMgaGFyZHdhcmUgKi8KK307CisKKy8qIGVudW0gczNjMjQxMF9jaGFuX29wCiAgKgogICogb3BlcmF0aW9uIGNvZGVzIHBhc3NlZCB0byB0aGUgRE1BIGNvZGUgYnkgdGhlIHVzZXIsIGFuZCBhbHNvIHVzZWQKICAqIHRvIGluZm9ybSB0aGUgY3VycmVudCBjaGFubmVsIG93bmVyIG9mIGFueSBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0gc3RhdGUKICovCiAKLWVudW0gczNjMjQxMF9jaGFuX29wX2UgeworZW51bSBzM2MyNDEwX2NoYW5fb3AgewogCVMzQzI0MTBfRE1BT1BfU1RBUlQsCiAJUzNDMjQxMF9ETUFPUF9TVE9QLAogCVMzQzI0MTBfRE1BT1BfUEFVU0UsCiAJUzNDMjQxMF9ETUFPUF9SRVNVTUUsCiAJUzNDMjQxMF9ETUFPUF9GTFVTSCwKLQlTM0MyNDEwX0RNQU9QX1RJTUVPVVQsICAgICAgICAgICAvKiBpbnRlcm5hbCBzaWduYWwgdG8gaGFuZGxlciAqLworCVMzQzI0MTBfRE1BT1BfVElNRU9VVCwJCS8qIGludGVybmFsIHNpZ25hbCB0byBoYW5kbGVyICovCisJUzNDMjQxMF9ETUFPUF9TVEFSVEVELAkJLyogaW5kaWNhdGUgY2hhbm5lbCBzdGFydGVkICovCiB9OwogCi10eXBlZGVmIGVudW0gczNjMjQxMF9jaGFuX29wX2UgczNjMjQxMF9jaGFuX29wX3Q7Ci0KIC8qIGZsYWdzICovCiAKICNkZWZpbmUgUzNDMjQxMF9ETUFGX1NMT1cgICAgICAgICAoMTw8MCkgICAvKiBzbG93LCBzbyBkb24ndCB3b3JyeSBhYm91dApAQCAtMTE2LDEwNCArMTA1LDEwMCBAQAogCiAvKiBkbWEgYnVmZmVyICovCiAKLXR5cGVkZWYgc3RydWN0IHMzYzI0MTBfZG1hX2J1Zl9zIHMzYzI0MTBfZG1hX2J1Zl90OwotCiBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHsKIAljaGFyICAgICAgICAgICAgICAgICpuYW1lOwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50IHMzYzI0MTBfZG1hX2NsaWVudF90OwotCiAvKiBzM2MyNDEwX2RtYV9idWZfcwogICoKICAqIGludGVybmFsbHkgdXNlZCBidWZmZXIgc3RydWN0dXJlIHRvIGRlc2NyaWJlIGEgcXVldWVkIG9yIHJ1bm5pbmcKICAqIGJ1ZmZlci4KICovCiAKLXN0cnVjdCBzM2MyNDEwX2RtYV9idWZfcyB7Ci0JczNjMjQxMF9kbWFfYnVmX3QgICAqbmV4dDsKLQlpbnQgICAgICAgICAgICAgICAgICBtYWdpYzsgICAgICAgIC8qIG1hZ2ljICovCi0JaW50ICAgICAgICAgICAgICAgICAgc2l6ZTsgICAgICAgICAvKiBidWZmZXIgc2l6ZSBpbiBieXRlcyAqLwotCWRtYV9hZGRyX3QgICAgICAgICAgIGRhdGE7ICAgICAgICAgLyogc3RhcnQgb2YgRE1BIGRhdGEgKi8KLQlkbWFfYWRkcl90ICAgICAgICAgICBwdHI7ICAgICAgICAgIC8qIHdoZXJlIHRoZSBETUEgZ290IHRvIFsxXSAqLwotCXZvaWQgICAgICAgICAgICAgICAgKmlkOyAgICAgICAgICAgLyogY2xpZW50J3MgaWQgKi8KK3N0cnVjdCBzM2MyNDEwX2RtYV9idWY7CitzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmIHsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmCSpuZXh0OworCWludAkJCSBtYWdpYzsJCS8qIG1hZ2ljICovCisJaW50CQkJIHNpemU7CQkvKiBidWZmZXIgc2l6ZSBpbiBieXRlcyAqLworCWRtYV9hZGRyX3QJCSBkYXRhOwkJLyogc3RhcnQgb2YgRE1BIGRhdGEgKi8KKwlkbWFfYWRkcl90CQkgcHRyOwkJLyogd2hlcmUgdGhlIERNQSBnb3QgdG8gWzFdICovCisJdm9pZAkJCSppZDsJCS8qIGNsaWVudCdzIGlkICovCiB9OwogCiAvKiBbMV0gaXMgdGhpcyB1cGRhdGVkIGZvciBib3RoIHJlY3Yvc2VuZCBtb2Rlcz8gKi8KIAotdHlwZWRlZiBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbl9zIHMzYzI0MTBfZG1hX2NoYW5fdDsKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuOwogCiAvKiBzM2MyNDEwX2RtYV9jYmZuX3QKICAqCiAgKiBidWZmZXIgY2FsbGJhY2sgcm91dGluZSB0eXBlCiAqLwogCi10eXBlZGVmIHZvaWQgKCpzM2MyNDEwX2RtYV9jYmZuX3QpKHMzYzI0MTBfZG1hX2NoYW5fdCAqLCB2b2lkICpidWYsIGludCBzaXplLAotCQkJCSAgIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHRfdCByZXN1bHQpOwordHlwZWRlZiB2b2lkICgqczNjMjQxMF9kbWFfY2Jmbl90KShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqLAorCQkJCSAgIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCQkJICAgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlc3VsdCk7CiAKLXR5cGVkZWYgaW50ICAoKnMzYzI0MTBfZG1hX29wZm5fdCkoczNjMjQxMF9kbWFfY2hhbl90ICosCi0JCQkJICAgczNjMjQxMF9jaGFuX29wX3QgKTsKK3R5cGVkZWYgaW50ICAoKnMzYzI0MTBfZG1hX29wZm5fdCkoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKiwKKwkJCQkgICBlbnVtIHMzYzI0MTBfY2hhbl9vcCApOwogCi1zdHJ1Y3QgczNjMjQxMF9kbWFfc3RhdHNfcyB7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBsb2FkczsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIHRpbWVvdXRfbG9uZ2VzdDsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIHRpbWVvdXRfc2hvcnRlc3Q7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICB0aW1lb3V0X2F2ZzsKLQl1bnNpZ25lZCBsb25nICAgICAgICAgIHRpbWVvdXRfZmFpbGVkOworc3RydWN0IHMzYzI0MTBfZG1hX3N0YXRzIHsKKwl1bnNpZ25lZCBsb25nCQlsb2FkczsKKwl1bnNpZ25lZCBsb25nCQl0aW1lb3V0X2xvbmdlc3Q7CisJdW5zaWduZWQgbG9uZwkJdGltZW91dF9zaG9ydGVzdDsKKwl1bnNpZ25lZCBsb25nCQl0aW1lb3V0X2F2ZzsKKwl1bnNpZ25lZCBsb25nCQl0aW1lb3V0X2ZhaWxlZDsKIH07CiAKLXR5cGVkZWYgc3RydWN0IHMzYzI0MTBfZG1hX3N0YXRzX3MgczNjMjQxMF9kbWFfc3RhdHNfdDsKLQotLyogc3RydWN0IHMzYzI0MTBfZG1hX2NoYW5fcworLyogc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4KICAqCiAgKiBmdWxsIHN0YXRlIGluZm9ybWF0aW9uIGZvciBlYWNoIERNQSBjaGFubmVsCiAqLwogCi1zdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbl9zIHsKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHsKIAkvKiBjaGFubmVsIHN0YXRlIGZsYWdzIGFuZCBpbmZvcm1hdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgbnVtYmVyOyAgICAgIC8qIG51bWJlciBvZiB0aGlzIGRtYSBjaGFubmVsICovCi0JdW5zaWduZWQgY2hhciAgICAgICAgICBpbl91c2U7ICAgICAgLyogY2hhbm5lbCBhbGxvY2F0ZWQgKi8KLQl1bnNpZ25lZCBjaGFyICAgICAgICAgIGlycV9jbGFpbWVkOyAvKiBpcnEgY2xhaW1lZCBmb3IgY2hhbm5lbCAqLwotCXVuc2lnbmVkIGNoYXIgICAgICAgICAgaXJxX2VuYWJsZWQ7IC8qIGlycSBlbmFibGVkIGZvciBjaGFubmVsICovCi0JdW5zaWduZWQgY2hhciAgICAgICAgICB4ZmVyX3VuaXQ7ICAgLyogc2l6ZSBvZiBhbiB0cmFuc2ZlciAqLworCXVuc2lnbmVkIGNoYXIJCSBudW1iZXI7ICAgICAgLyogbnVtYmVyIG9mIHRoaXMgZG1hIGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBjaGFyCQkgaW5fdXNlOyAgICAgIC8qIGNoYW5uZWwgYWxsb2NhdGVkICovCisJdW5zaWduZWQgY2hhcgkJIGlycV9jbGFpbWVkOyAvKiBpcnEgY2xhaW1lZCBmb3IgY2hhbm5lbCAqLworCXVuc2lnbmVkIGNoYXIJCSBpcnFfZW5hYmxlZDsgLyogaXJxIGVuYWJsZWQgZm9yIGNoYW5uZWwgKi8KKwl1bnNpZ25lZCBjaGFyCQkgeGZlcl91bml0OyAgIC8qIHNpemUgb2YgYW4gdHJhbnNmZXIgKi8KIAogCS8qIGNoYW5uZWwgc3RhdGUgKi8KIAotCXMzYzI0MTBfZG1hX3N0YXRlX3QgICAgc3RhdGU7Ci0JczNjMjQxMF9kbWFfbG9hZHN0X3QgICBsb2FkX3N0YXRlOwotCXMzYzI0MTBfZG1hX2NsaWVudF90ICAqY2xpZW50OworCWVudW0gczNjMjQxMF9kbWFfc3RhdGUJIHN0YXRlOworCWVudW0gczNjMjQxMF9kbWFfbG9hZHN0CSBsb2FkX3N0YXRlOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudDsKIAogCS8qIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLwotCXMzYzI0MTBfZG1hc3JjX3QgICAgICAgc291cmNlOwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgZGV2X2FkZHI7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgICBsb2FkX3RpbWVvdXQ7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICBmbGFnczsgICAgICAgIC8qIGNoYW5uZWwgZmxhZ3MgKi8KKwllbnVtIHMzYzI0MTBfZG1hc3JjCSBzb3VyY2U7CisJdW5zaWduZWQgbG9uZwkJIGRldl9hZGRyOworCXVuc2lnbmVkIGxvbmcJCSBsb2FkX3RpbWVvdXQ7CisJdW5zaWduZWQgaW50CQkgZmxhZ3M7CQkvKiBjaGFubmVsIGZsYWdzICovCiAKIAkvKiBjaGFubmVsJ3MgaGFyZHdhcmUgcG9zaXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gKi8KLQl2b2lkIF9faW9tZW0gICAgICAgICAgICpyZWdzOyAgICAgICAgLyogY2hhbm5lbHMgcmVnaXN0ZXJzICovCi0Jdm9pZCBfX2lvbWVtICAgICAgICAgICAqYWRkcl9yZWc7ICAgIC8qIGRhdGEgYWRkcmVzcyByZWdpc3RlciAqLwotCXVuc2lnbmVkIGludCAgICAgICAgICAgaXJxOyAgICAgICAgICAvKiBjaGFubmVsIGlycSAqLwotCXVuc2lnbmVkIGxvbmcgICAgICAgICAgZGNvbjsgICAgICAgICAvKiBkZWZhdWx0IHZhbHVlIG9mIERDT04gKi8KKwl2b2lkIF9faW9tZW0JCSpyZWdzOwkJLyogY2hhbm5lbHMgcmVnaXN0ZXJzICovCisJdm9pZCBfX2lvbWVtCQkqYWRkcl9yZWc7CS8qIGRhdGEgYWRkcmVzcyByZWdpc3RlciAqLworCXVuc2lnbmVkIGludAkJIGlycTsJCS8qIGNoYW5uZWwgaXJxICovCisJdW5zaWduZWQgbG9uZwkJIGRjb247CQkvKiBkZWZhdWx0IHZhbHVlIG9mIERDT04gKi8KIAogCS8qIGRyaXZlciBoYW5kbGVzICovCi0JczNjMjQxMF9kbWFfY2Jmbl90ICAgICBjYWxsYmFja19mbjsgIC8qIGJ1ZmZlciBkb25lIGNhbGxiYWNrICovCi0JczNjMjQxMF9kbWFfb3Bmbl90ICAgICBvcF9mbjsgICAgICAgIC8qIGNoYW5uZWwgb3BlcmF0aW9uIGNhbGxiYWNrICovCisJczNjMjQxMF9kbWFfY2Jmbl90CSBjYWxsYmFja19mbjsJLyogYnVmZmVyIGRvbmUgY2FsbGJhY2sgKi8KKwlzM2MyNDEwX2RtYV9vcGZuX3QJIG9wX2ZuOwkJLyogY2hhbm5lbCBvcCBjYWxsYmFjayAqLwogCiAJLyogc3RhdHMgZ2F0aGVyaW5nICovCi0JczNjMjQxMF9kbWFfc3RhdHNfdCAgICpzdGF0czsKLQlzM2MyNDEwX2RtYV9zdGF0c190ICAgIHN0YXRzX3N0b3JlOworCXN0cnVjdCBzM2MyNDEwX2RtYV9zdGF0cyAqc3RhdHM7CisJc3RydWN0IHMzYzI0MTBfZG1hX3N0YXRzICBzdGF0c19zdG9yZTsKIAogCS8qIGJ1ZmZlciBsaXN0IGFuZCBpbmZvcm1hdGlvbiAqLwotCXMzYzI0MTBfZG1hX2J1Zl90ICAgICAgKmN1cnI7ICAgICAgICAvKiBjdXJyZW50IGRtYSBidWZmZXIgKi8KLQlzM2MyNDEwX2RtYV9idWZfdCAgICAgICpuZXh0OyAgICAgICAgLyogbmV4dCBidWZmZXIgdG8gbG9hZCAqLwotCXMzYzI0MTBfZG1hX2J1Zl90ICAgICAgKmVuZDsgICAgICAgICAvKiBlbmQgb2YgcXVldWUgKi8KKwlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmCSpjdXJyOwkJLyogY3VycmVudCBkbWEgYnVmZmVyICovCisJc3RydWN0IHMzYzI0MTBfZG1hX2J1ZgkqbmV4dDsJCS8qIG5leHQgYnVmZmVyIHRvIGxvYWQgKi8KKwlzdHJ1Y3QgczNjMjQxMF9kbWFfYnVmCSplbmQ7CQkvKiBlbmQgb2YgcXVldWUgKi8KIAogCS8qIHN5c3RlbSBkZXZpY2UgKi8KIAlzdHJ1Y3Qgc3lzX2RldmljZQlkZXY7CiB9OwogCiAvKiB0aGUgY3VycmVudGx5IGFsbG9jYXRlZCBjaGFubmVsIGluZm9ybWF0aW9uICovCi1leHRlcm4gczNjMjQxMF9kbWFfY2hhbl90IHMzYzI0MTBfY2hhbnNbXTsKK2V4dGVybiBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiBzM2MyNDEwX2NoYW5zW107CiAKIC8qIG5vdGUsIHdlIGRvbid0IHJlYWxseSB1c2UgZG1hX2RldmljZV90IGF0IHRoZSBtb21lbnQgKi8KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBkbWFfZGV2aWNlX3Q7CkBAIC0yMjYsNyArMjExLDcgQEAKICovCiAKIGV4dGVybiBpbnQgczNjMjQxMF9kbWFfcmVxdWVzdChkbWFjaF90IGNoYW5uZWwsCi0JCQkgICAgICAgczNjMjQxMF9kbWFfY2xpZW50X3QgKiwgdm9pZCAqZGV2KTsKKwkJCSAgICAgICBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICosIHZvaWQgKmRldik7CiAKIAogLyogczNjMjQxMF9kbWFfY3RybApAQCAtMjM0LDcgKzIxOSw3IEBACiAgKiBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBkbWEgY2hhbm5lbAogKi8KIAotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9jdHJsKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9jaGFuX29wX3Qgb3ApOworZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9jdHJsKGRtYWNoX3QgY2hhbm5lbCwgZW51bSBzM2MyNDEwX2NoYW5fb3Agb3ApOwogCiAvKiBzM2MyNDEwX2RtYV9zZXRmbGFncwogICoKQEAgLTI0OSw3ICsyMzQsNyBAQAogICogZnJlZSB0aGUgZG1hIGNoYW5uZWwgKHdpbGwgYWxzbyBhYm9ydCBhbnkgb3V0c3RhbmRpbmcgb3BlcmF0aW9ucykKICovCiAKLWV4dGVybiBpbnQgczNjMjQxMF9kbWFfZnJlZShkbWFjaF90IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NsaWVudF90ICopOworZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9mcmVlKGRtYWNoX3QgY2hhbm5lbCwgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqKTsKIAogLyogczNjMjQxMF9kbWFfZW5xdWV1ZQogICoKQEAgLTI3Myw3ICsyNTgsNyBAQAogICogY29uZmlndXJlIHRoZSBkZXZpY2Ugd2UncmUgdGFsa2luZyB0bwogKi8KIAotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9kZXZjb25maWcoaW50IGNoYW5uZWwsIHMzYzI0MTBfZG1hc3JjX3Qgc291cmNlLAorZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9kZXZjb25maWcoaW50IGNoYW5uZWwsIGVudW0gczNjMjQxMF9kbWFzcmMgc291cmNlLAogCQkJCSBpbnQgaHdjZmcsIHVuc2lnbmVkIGxvbmcgZGV2YWRkcik7CiAKIC8qIHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2ZiLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2ZiLmgKaW5kZXggNDc5MDQ5MS4uNzExNjE3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9mYi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZmIuaApAQCAtNywxMyArNyw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICoJMDctU2VwLTIwMDQJUlRQCUNyZWF0ZWQgZmlsZQotICoJMDMtTm92LTIwMDQJQkpECVVwZGF0ZWQgYW5kIG1pbm9yIGNsZWFudXBzCi0gKgkwMy1BdWctMjAwNSAgICAgUlRQICAgICBSZW5hbWVkIHRvIGZiLmgKLSAqCTI2LU9jdC0yMDA1CUJKRAlDaGFuZ2VkIG5hbWUgb2YgcGxhdGRhdGEgaW5pdAogKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fRkJfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9oYXJkd2FyZS5oCmluZGV4IGEyMzMwYmYuLjg3MWY4YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaGFyZHdhcmUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2hhcmR3YXJlLmgKQEAgLTgsMTYgKzgsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBDaGFuZ2Vsb2c6Ci0gKiAgMjEtTWF5LTIwMDMgQkpEICBDcmVhdGVkIGZpbGUKLSAqICAwNi1KdW4tMjAwMyBCSkQgIEFkZGVkIENQVSBmcmVxdWVuY3kgc2V0dGluZ3MKLSAqICAwMy1TZXAtMjAwMyBCSkQgIExpbnV4IHYyLjYgc3VwcG9ydAotICogIDEyLU1hci0yMDA0IEJKRCAgRml4ZWQgaW5jbHVkZSBwcm90ZWN0aW9uLCBmaXhlZCB0eXBlIG9mIGNsb2NrIHZhcnMKLSAqICAxNC1TZXAtMjAwNCBCSkQgIEFkZGVkIG1pc2NjciBhbmQgZ2V0cGluIHRvIGdwaW8KLSAqICAwMS1PY3QtMjAwNCBCSkQgIEFkZGVkIHRoZSBuZXcgZ3BpbyBmdW5jdGlvbnMKLSAqICAxNi1PY3QtMjAwNCBCSkQgIFJlbW92ZWQgdGhlIGNsb2NrIHZhcmlhYmxlcwotICogIDE1LUphbi0yMDA2IExDVlIgQWRkZWQgczNjMjQwMF9ncGlvX2dldGlycSgpCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pZGxlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lkbGUuaAppbmRleCA3NDkyMjdjLi5lZWQ0NTA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lkbGUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lkbGUuaApAQCAtOCwxMCArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBTM0MyNDEwIENQVSBJZGxlIGNvbnRyb2xzCi0gKgotICogIENoYW5nZWxvZzoKLSAqCTI4LU9jdC0yMDA0ICBCSkQgIEluaXRpYWwgdmVyc2lvbgotICoKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9JRExFX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaWljLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lpYy5oCmluZGV4IDUxODU0N2YuLmVkM2Q2YzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaWljLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9paWMuaApAQCAtOCwxMCArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqCTA1LU9jdC0yMDA0IEJKRCAgQ3JlYXRlZCBmaWxlCi0gKgkxOS1PY3QtMjAwNCBCSkQJIFVwZGF0ZWQgZm9yIHMzYzI0NDAKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9JSUNfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pby5oCmluZGV4IDE2ZmJjOGEuLjZiMzVhNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lvLmgKQEAgLTQsMTMgKzQsNyBAQAogICoKICAqIENvcHlyaWdodCAoQykgMTk5NyBSdXNzZWxsIEtpbmcKICAqCSAgICAgKEMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKgotICogTW9kaWZpY2F0aW9uczoKLSAqICAwNi1EZWMtMTk5NwlSTUsJQ3JlYXRlZC4KLSAqICAwMi1TZXAtMjAwMyBCSkQJTW9kaWZpZWQgZm9yIFMzQzI0MTAKLSAqICAxMC1NYXItMjAwNSBMQ1ZSCUNoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCi0gKiAgMTMtT2N0LTIwMDUgQkpECUZpeGVkIHByb2JsZW1zIHdpdGggTERSSC9TVFJIIG9mZnNldCByYW5nZQotICovCisqLwogCiAjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKICNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaAppbmRleCBkOTc3M2Q2Li4zOWE2OTgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2lycXMuaApAQCAtNiwxNCArNiw3IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqICAxMi1NYXktMjAwMyBCSkQgIENyZWF0ZWQgZmlsZQotICogIDA4LUphbi0yMDAzIEJKRCAgTGludXggMi42LjAgdmVyc2lvbiwgbW92ZWQgQkFTVCBiaXRzIG91dAotICogIDEyLU1hci0yMDA0IEJKRCAgRml4ZWQgYnVnIGluIGhlYWRlciBwcm90ZWN0aW9uCi0gKiAgMTAtRmViLTIwMDUgQkpEICBBZGRlZCBjYW1lcmEgSVJRIGZyb20gZ3VpbGxhdW1lLmdvdXJhdEBuZXh2aXNpb24udHYKLSAqICAyOC1GZWItMjAwNSBCSkQgIFVwZGF0ZWQgczNjMjQ0MCBJUlFzCi0gKi8KKyovCiAKIAogI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKaW5kZXggZmFlMjc2Ni4uMjdiYTBhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCkBAIC04LDEzICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDEyLU1heS0yMDAzIEJKRCAgIENyZWF0ZWQgZmlsZQotICogIDA2LUphbi0yMDAzIEJKRCAgIExpbnV4IDIuNi4wIHZlcnNpb24sIG1vdmVkIGJhc3Qgc3BlY2lmaWNzIG91dAotICogIDEwLUZlYi0yMDA1IEJKRCAgIEFkZGVkIENBTUlGIGRlZmluaXRpb24gZnJvbSBndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi50dgotICogIDEwLU1hci0yMDA1IExDVlIgIEFkZGVkIHN1cHBvcnQgdG8gUzNDMjQwMCwgY2hhbmdlZCB7VkEsU1p9IG5hbWVzCi0gKiAgMTUtSmFuLTIwMDYgTENWUiAgQWRkZWQgUzNDMjRYWF9QQSBtYWNyb3MgZm9yIGNvbW1vbiBTM0MyNFhYIHJlc291cmNlcwogKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX01BUF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21lbW9yeS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tZW1vcnkuaAppbmRleCA2YWI4MzRhLi40YmU2YTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21lbW9yeS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWVtb3J5LmgKQEAgLTEsNiArMSw0IEBACi0vKgotICogIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWVtb3J5LmgKLSAqCisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21lbW9yeS5oCiAgKiAgZnJvbSBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1ycGMvbWVtb3J5LmgKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk2LDE5OTcsMTk5OCBSdXNzZWxsIEtpbmcuCkBAIC04LDE2ICs2LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIENoYW5nZWxvZzoKLSAqICAgMjAtT2N0LTE5OTYgUk1LCUNyZWF0ZWQKLSAqICAgMzEtRGVjLTE5OTcgUk1LCUZpeGVkIGRlZmluaXRpb25zIHRvIHJlZHVjZSB3YXJuaW5ncwotICogICAxMS1KYW4tMTk5OCBSTUsJVW5pbmxpbmVkIHRvIHJlZHVjZSBoaXRzIG9uIGNhY2hlCi0gKiAgIDA4LUZlYi0xOTk4IFJNSwlBZGRlZCBfX3ZpcnRfdG9fYnVzIGFuZCBfX2J1c190b192aXJ0Ci0gKiAgIDIxLU1hci0xOTk5IFJNSwlSZW5hbWVkIHRvIG1lbW9yeS5oCi0gKgkJIFJNSwlBZGRlZCBUQVNLX1NJWkUgYW5kIFBBR0VfT0ZGU0VUCi0gKiAgIDA1LUFwci0yMDA0IEJKRCAgICBDb3BpZWQgYW5kIGFsdGVyZWQgZm9yIGFyY2gtczNjMjQxMAotICogICAxNy1NYXItMjAwNSBMQ1ZSICAgTW9kaWZpZWQgZm9yIFMzQzI0MDAKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9uYW5kLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL25hbmQuaAppbmRleCA5MTQ4YWMwNC4uZTM1MGFlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9uYW5kLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9uYW5kLmgKQEAgLTgsOSArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqCTIzLVNlcC0yMDA0IEJKRCAgQ3JlYXRlZCBmaWxlCiAqLwogCiAvKiBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9vc2lyaXMtbWFwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1tYXAuaAppbmRleCA3YzRiMGNkLi5lMmQ0MDYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1tYXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1tYXAuaApAQCAtOSw4ICs5LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgogKi8KIAogLyogbmVlZHMgYXJjaC9tYXAuaCBpbmNsdWRpbmcgd2l0aCB0aGlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtYWRjLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtYWRjLmgKaW5kZXggMTViZmMyZi4uYzdiOTBiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWFkYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1hZGMuaApAQCAtNyw5ICs3LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFMzQzI0MTAgQURDIHJlZ2lzdGVycwotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgICAyNy0wOS0yMDA0ICAgICBTQUggICAgIENyZWF0ZWQgZmlsZQogKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfQURDX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1jbG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKaW5kZXggYTdjNjFmZS4uYjJmNDY5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWNsb2NrLmgKQEAgLTgsMTggKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBjbG9jayByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgICAxOC1BdWctMjAwNCBCZW4gRG9va3MgICAgICAgICBBZGRlZCAyNDQwIGRlZmluaXRpb25zCi0gKiAgICAwOC1BdWctMjAwNCBIZXJiZXJ0IFD2dHpsICAgICBBZGRlZCBDTEtDT04gZGVmaW5pdGlvbnMKLSAqICAgIDE5LTA2LTIwMDMgIEJlbiBEb29rcyAgICAgICAgIENyZWF0ZWQgZmlsZQotICogICAgMTItMDMtMjAwNCAgQmVuIERvb2tzICAgICAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KLSAqICAgIDI5LVNlcC0yMDA0IEJlbiBEb29rcwkgICAgRml4ZWQgdXNhZ2UgZm9yIGFzc2VtYmx5IGluY2x1c2lvbgotICogICAgMTAtRmViLTIwMDUgQmVuIERvb2tzCSAgICBGaXhlZCBDQU1ESVZOIGFkZHJlc3MgKEd1aWxsYXVtZSBHb3VyYXQpCi0gKiAgICAxMC1NYXItMjAwNSBMdWNhcyBWaWxsYSBSZWFsICBDaGFuZ2VkIFMzQzI0MTBfVkEgdG8gUzNDMjRYWF9WQQotICogICAgMjctQXVnLTIwMDUgQmVuIERvb2tzCSAgICBBZGQgY2xvY2stc2xvdyBpbmZvCi0gKiAgICAyMC1PY3QtMjAwNSBCZW4gRG9va3MJICAgIEZpeGVkIG92ZXJmbG93IGluIFBMTCAoR3VpbGxhdW1lIEdvdXJhdCkKLSAqICAgIDIwLU9jdC0yMDA1IEJlbiBEb29rcwkgICAgQWRkIG1hc2tzIGZvciBEQ0xLIChHdWlsbGF1bWUgR291cmF0KQogKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19DTE9DSwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKaW5kZXggNmRkMTdmMGYuLjkzYzQ5NDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW8uaApAQCAtOCwyMSArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBTM0MyNDEwIEdQSU8gcmVnaXN0ZXIgZGVmaW5pdGlvbnMKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTktMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDIzLTA2LTIwMDMgICAgIEJKRCAgICAgVXBkYXRlZCBHU1RBVFVTIHJlZ2lzdGVycwotICogICAgMTItMDMtMjAwNCAgICAgQkpEICAgICBVcGRhdGVkIGluY2x1ZGUgcHJvdGVjdGlvbgotICogICAgMjAtMDctMjAwNCAgICAgQkpEICAgICBBZGRlZCBHUElPIHBpbiBudW1iZXJzLCBhZGRlZCBQb3J0IEEgZGVmaW5pdGlvbnMKLSAqICAgIDA0LTEwLTIwMDQgICAgIEJKRCAgICAgRml4ZWQgbnVtYmVyIG9mIGJ1Z3MsIGFkZGVkIEVYVCBJUlEgZmlsdGVyIGRlZnMKLSAqICAgIDE3LTEwLTIwMDQgICAgIEJKRCAgICAgQWRkZWQgR1NUQVRVUzEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKLSAqICAgIDE4LTExLTIwMDQgICAgIEJKRCAgICAgRml4ZWQgZGVmaW5pdGlvbnMgb2YgR1BFMywgR1BFNCwgR1BFNSBhbmQgR1BFNgotICogICAgMTgtMTEtMjAwNCAgICAgQkpEICAgICBBZGRlZCBTM0MyNDQwIEFDOTcgY29udHJvbHMKLSAqICAgIDEwLU1hci0yMDA1ICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKLSAqICAgIDI4LU1hci0yMDA1ICAgIExDVlIgICAgRml4ZWQgZGVmaW5pdGlvbiBvZiBHUEIxMAotICogICAgMjYtT2N0LTIwMDUgICAgQkpEICAgICBBZGRlZCBnZW5lcmljIGNvbmZpZ3VyYXRpb24gdHlwZXMKLSAqICAgIDI3LU5vdi0yMDA1ICAgIExDVlIgICAgQWRkZWQgZGVmaW5pdGlvbnMgdG8gUzNDMjQwMCByZWdpc3RlcnMKLSAqICAgIDE1LUphbi0yMDA2ICAgIExDVlIgICAgV3JpdHRlbiBTM0MyNFhYX0dQSU9fQkFTRSgpIG1hY3JvCiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ncGlvai5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW9qLmgKaW5kZXggMThlZGFlNS4uOTFjZWZhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW9qLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWdwaW9qLmgKQEAgLTgsMTAgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQ0MCBHUElPIEogcmVnaXN0ZXIgZGVmaW5pdGlvbnMKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTEtQXVnLTIwMDQgICAgIEJKRCAgICAgQ3JlYXRlZCBmaWxlCi0gKiAgICAxMC1GZWItMjAwNSAgICAgQkpEICAgICBGaXggR1BKMTIgZGVmaW5pdGlvbiAoR3VpbGxhdW1lIEdvdXJhdCkKICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlpYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlpYy5oCmluZGV4IGZlZDMyODguLjJhZTI5NTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paWMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaWljLmgKQEAgLTgsMTAgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBJMkMgQ29udHJvbGxlcgotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKgkwMy1PY3QtMjAwNCAgQkpEICBJbml0aWFsIGluY2x1ZGUgZm9yIExpbnV4Ci0gKgkwOC1Ob3YtMjAwNCAgQkpEICBBZGRlZCBTM0MyNDQwIGZpbHRlciByZWdpc3RlcgogKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSUlDX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1paXMuaAppbmRleCA3ZmRkZTliLi43MmNkMjUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaWlzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlpcy5oCkBAIC04LDE3ICs4LDcgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFMzQzI0MTAgSUlTIHJlZ2lzdGVyIGRlZmluaXRpb24KLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTktMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDI2LTA2LTIwMDMgICAgIEJKRCAgICAgRmluaXNoZWQgb2ZmIGRlZmluaXRpb25zIGZvciByZWdpc3RlciBhZGRyZXNzZXMKLSAqICAgIDEyLTAzLTIwMDQgICAgIEJKRCAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KLSAqICAgIDA3LTAzLTIwMDUgICAgIEJKRCAgICAgQWRkZWQgRklGTyBzaXplIGZsYWdzIGFuZCBTM0MyNDQwIE1QTEwKLSAqICAgIDA1LTA0LTIwMDUgICAgIExDVlIgICAgQWRkZWQgSUlTRkNPTiBkZWZpbml0aW9ucyBmb3IgdGhlIFMzQzI0MDAKLSAqICAgIDE4LTA3LTIwMDUgICAgIERBICAgICAgQ2hhbmdlIElJU0NPTl9NUExMIHRvIElJU01PRF9NUExMCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIENvcnJlY3QgSUlTTU9EXzI1NkZTIGFuZCBJSVNNT0RfMzg0RlMKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIElJU0NPTl9QU0NFTgotICovCisqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19JSVNfSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfSUlTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1pcnEuaAppbmRleCA1NzJmY2E1Li4yOWZiOGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWlycS5oCkBAIC02LDE0ICs2LDcgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICoKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTktMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDEyLTAzLTIwMDQgICAgIEJKRCAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KLSAqICAgIDEwLTAzLTIwMDUgICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKLSAqLworKi8KIAogCiAjaWZuZGVmIF9fX0FTTV9BUkNIX1JFR1NfSVJRX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1sY2QuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1sY2QuaAppbmRleCBiNmIxYjRlLi5iMzA2ZDZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbGNkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWxjZC5oCkBAIC02LDE0ICs2LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICoKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTItMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDI2LTA2LTIwMDMgICAgIEJKRCAgICAgVXBkYXRlZCBMQ0RDT04gcmVnaXN0ZXIgZGVmaW5pdGlvbnMKLSAqICAgIDEyLTAzLTIwMDQgICAgIEJKRCAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KLSAqICAgIDEwLTAzLTIwMDUgICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW1lbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW1lbS5oCmluZGV4IGEyZDdkMGMuLjM3NWRjYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1tZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbWVtLmgKQEAgLTgsMTIgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBNZW1vcnkgQ29udHJvbCByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKgkyOS1TZXAtMjAwNCAgQkpEICBJbml0aWFsIGluY2x1ZGUgZm9yIExpbnV4Ci0gKiAgICAgIDEwLU1hci0yMDA1ICBMQ1ZSIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCi0gKiAgICAgIDA0LUFwci0yMDA1ICBMQ1ZSIEFkZGVkIFMzQzI0MDAgRFJBTS9CQU5LU0laRV9NQVNLIGRlZmluaXRpb25zCi0gKgogKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fTUVNUkVHU19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbmFuZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLW5hbmQuaAppbmRleCBjMTQ3MGM2Li5iODI0ZDM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbmFuZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1uYW5kLmgKQEAgLTgsMTAgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBOQU5EIHJlZ2lzdGVyIGRlZmluaXRpb25zCi0gKgotICogIENoYW5nZWxvZzoKLSAqICAgIDE4LUF1Zy0yMDA0ICAgIEJKRCAgICAgQ29waWVkIGZpbGUgZnJvbSAyLjQgYW5kIHVwZGF0ZWQKLSAqICAgIDAxLU1heS0yMDA1ICAgIEJKRCAgICAgQWRkZWQgZGVmaW5pdGlvbnMgZm9yIHMzYzI0NDAgY29udHJvbGxlcgogKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19OQU5ECmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtcG93ZXIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1wb3dlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzE5ZWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtcG93ZXIuaApAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLXMzYzI0MTAvcmVncy1wb3dlci5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLDIwMDQsMjAwNSwyMDA2IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgorICoJCSAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNFhYIHBvd2VyIGNvbnRyb2wgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyovCisKKyNpZm5kZWYgX19BU01fQVJNX1JFR1NfUFdSCisjZGVmaW5lIF9fQVNNX0FSTV9SRUdTX1BXUiBfX0ZJTEVfXworCisjZGVmaW5lIFMzQzI0WFhfUFdSUkVHKHgpICgoeCkgKyBTM0MyNFhYX1ZBX0NMS1BXUikKKworI2RlZmluZSBTM0MyNDEyX1BXUk1PREVDT04JUzNDMjRYWF9QV1JSRUcoMHgyMCkKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkcJCVMzQzI0WFhfUFdSUkVHKDB4MjQpCisKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkdfQkFURl9JR05PUkUJCSgwPDwwKQorI2RlZmluZSBTM0MyNDEyX1BXUkNGR19CQVRGX1NMRUVQCQkoMzw8MCkKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkdfQkFURl9NQVNLCQkoMzw8MCkKKworI2RlZmluZSBTM0MyNDEyX1BXUkNGR19TVEFOREJZV0ZJX0lHTk9SRQkoMDw8NikKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9JRExFCQkoMTw8NikKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9TVE9QCQkoMjw8NikKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9TTEVFUAkJKDM8PDYpCisjZGVmaW5lIFMzQzI0MTJfUFdSQ0ZHX1NUQU5EQllXRklfTUFTSwkJKDM8PDYpCisKKyNkZWZpbmUgUzNDMjQxMl9QV1JDRkdfUlRDX01BU0tJUlEJCSgxPDw4KQorI2RlZmluZSBTM0MyNDEyX1BXUkNGR19OQU5EX05PUlNUCQkoMTw8OSkKKworI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX1BXUiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXJ0Yy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXJ0Yy5oCmluZGV4IDIyODk4M2YuLmNkODhmZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1ydGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtcnRjLmgKQEAgLTgsMTcgKzgsMTIgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqIFMzQzI0MTAgSW50ZXJuYWwgUlRDIHJlZ2lzdGVyIGRlZmluaXRpb24KLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTktMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDEyLTAzLTIwMDQgICAgIEJKRCAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KLSAqICAgIDE1LTAxLTIwMDUgICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEgKHMzYzI0MDAgc3VwcG9ydCkKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9SRUdTX1JUQ19ICiAjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19SVENfSCBfX0ZJTEVfXwogCi0jZGVmaW5lIFMzQzI0MTBfUlRDUkVHKHgpICgoeCkgKyBTM0MyNFhYX1ZBX1JUQykKKyNkZWZpbmUgUzNDMjQxMF9SVENSRUcoeCkgKHgpCiAKICNkZWZpbmUgUzNDMjQxMF9SVENDT04JICAgICAgUzNDMjQxMF9SVENSRUcoMHg0MCkKICNkZWZpbmUgUzNDMjQxMF9SVENDT05fUlRDRU4gICgxPDwwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNkaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNkaS5oCmluZGV4IGNhOWEyNmYuLjA2ZTcxNmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZGkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2RpLmgKQEAgLTgsMTEgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBNTUMvU0RJTyByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgICAxOC1BdWctMjAwNCBCZW4gRG9va3MgICAgICBDcmVhdGVkIGluaXRpYWwgZmlsZQotICogICAgMjktTm92LTIwMDQgS29lbiBNYXJ0ZW5zICAgQWRkZWQgc29tZSBtaXNzaW5nIGRlZmluZXMsIGZpeGVkIGR1cGxpY2F0ZXMKLSAqICAgIDI5LU5vdi0yMDA0IEJlbiBEb29rcwkgVXBkYXRlZCBLb2VuJ3MgcGF0Y2gKICovCiAKICNpZm5kZWYgX19BU01fQVJNX1JFR1NfU0RJCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc2VyaWFsLmgKaW5kZXggOTNmNjUxYS4uMTljNzdkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zZXJpYWwuaApAQCAtMjcsMTAgKzI3LDcgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAgMTAtTWFyLTIwMDUgTENWUiAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEgKHMzYzI0MDAgc3VwcG9ydCkKLSAqLworKi8KIAogI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAogI2RlZmluZSBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNwaS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXNwaS5oCmluZGV4IDMzODIxNzguLjM1NTIyODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1zcGkuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtc3BpLmgKQEAgLTcsMTMgKzcsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBTUEkgcmVnaXN0ZXIgZGVmaW5pdGlvbgotICoKLSAqICBDaGFuZ2Vsb2c6Ci0gKiAgICAyMC0wNC0yMDA0ICAgICBLRiAgICAgIENyZWF0ZWQgZmlsZQotICogICAgMDQtMTAtMjAwNCAgICAgQkpEICAgICBSZW1vdmVkIFZBIGFkZHJlc3MgKG5vIGxvbmdlciBtYXBwZWQpCi0gKgkJCSAgICAgdGlkaWVkIGZpbGUgZm9yIHN1Ym1pc3Npb24KLSAqICAgIDAzLTA0LTIwMDUgICAgIExDVlIgICAgQWRkZWQgUzNDMjQwMF9TUFBJTl9uQ1MgZGVmaW5pdGlvbgotICovCisqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19TUElfSAogI2RlZmluZSBfX0FTTV9BUkNIX1JFR1NfU1BJX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy10aW1lci5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXRpbWVyLmgKaW5kZXggMTY5MDY0ZS4uNzMxOTE4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXRpbWVyLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXRpbWVyLmgKQEAgLTgsMTMgKzgsNiBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCBUaW1lciBjb25maWd1cmF0aW9uCi0gKgotICogIENoYW5nZWxvZzoKLSAqICAgIDA1LTA2LTIwMDMgICAgIEJKRCAgICAgQ3JlYXRlZCBmaWxlCi0gKiAgICAyNi0wNi0yMDAzICAgICBCSkQgICAgIEFkZGVkIG1vcmUgdGltZXIgZGVmaW5pdGlvbnMgdG8gbXV4IC8gY29udHJvbAotICogICAgMTItMDMtMjAwNCAgICAgQkpEICAgICBVcGRhdGVkIGluY2x1ZGUgcHJvdGVjdGlvbgotICogICAgMTAtMDItMjAwNSAgICAgQkpEICAgICBBZGRlZCBTM0MyNDEwX1RDRkcxX01VWDRfU0hJRlQgKEd1aWxsYXVtZSBHb3VyYXQpCi0gKiAgICAxMC0wMy0yMDA1ICAgICBMQ1ZSICAgIENoYW5nZWQgUzNDMjQxMF9WQSB0byBTM0MyNFhYX1ZBCiAqLwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy11ZGMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy11ZGMuaAppbmRleCBiZjMxNWI3Li4zYWEzMWEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtdWRjLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLXVkYy5oCkBAIC02LDEzICs2LDcgQEAKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgogICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIENoYW5nZWxvZzoKLSAqICAgIDAxLTA4LTIwMDQJSW5pdGlhbCBjcmVhdGlvbgotICogICAgMTItMDktMjAwNAlDbGVhbnVwIGZvciBzdWJtaXNzaW9uCi0gKiAgICAyNC0xMC0yMDA0CUZpeGVkIFMzQzI0MTBfVURDX01BWFBfUkVHIGRlZmluaXRpb24KLSAqICAgIDEwLTAzLTIwMDUJQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKLSAqLworKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfVURDX0gKICNkZWZpbmUgX19BU01fQVJDSF9SRUdTX1VEQ19ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy13YXRjaGRvZy5oCmluZGV4IGQxOTljYTYuLmY0ZmZmNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy13YXRjaGRvZy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy13YXRjaGRvZy5oCkBAIC0xLDQgKzEsNCBAQAotLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3JlZ3Mwd2F0Y2hkb2cuaAorLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1zM2MyNDEwL3JlZ3Mtd2F0Y2hkb2cuaAogICoKICAqIENvcHlyaWdodCAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KICAqCQkgICAgICBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLwpAQCAtOCwxMSArOCw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKiBTM0MyNDEwIFdhdGNoZG9nIHRpbWVyIGNvbnRyb2wKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMjEtMDYtMjAwMyAgICAgQkpEICAgICBDcmVhdGVkIGZpbGUKLSAqICAgIDEyLTAzLTIwMDQgICAgIEJKRCAgICAgVXBkYXRlZCBpbmNsdWRlIHByb3RlY3Rpb24KLSAqICAgIDEwLTAzLTIwMDUgICAgIExDVlIgICAgQ2hhbmdlZCBTM0MyNDEwX1ZBIHRvIFMzQzI0WFhfVkEKICovCiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvc3lzdGVtLmgKaW5kZXggOWIwZDg1MC4uNzE4MjQ2ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3N5c3RlbS5oCkBAIC04LDE0ICs4LDcgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDEyLU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlCi0gKiAgMTQtTWF5LTIwMDMgQkpEICBSZW1vdmVkIGlkbGUgdG8gYWlkIGRlYnVnZ2luZwotICogIDEyLUp1bi0yMDAzIEJKRCAgQWRkZWQgcmVzZXQgdmlhIHdhdGNoZG9nCi0gKiAgMDQtU2VwLTIwMDMgQkpEICBNb3ZlZCB0byB2Mi42Ci0gKiAgMjgtT2N0LTIwMDQgQkpEICBBZGRlZCBvdmVyLXJpZGUgZm9yIGlkbGUsIGFuZCBmaXhlZCByZXNldCBwYW5pYygpCi0gKi8KKyovCiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdGltZXguaAppbmRleCAzNTU4YTNhLi43MDNjMzM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3RpbWV4LmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC90aW1leC5oCkBAIC04LDEyICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDAyLVNlcC0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlCi0gKiAgMDUtSmFuLTIwMDQgQkpEICBVcGRhdGVkIGZvciBMaW51eCAyLjYuMAotICogIDIyLU5vdi0yMDA0IEJKRCAgRml4ZWQgQ0xPQ0tfVElDS19SQVRFCi0gKiAgMTAtSmFuLTIwMDQgQkpEICBSZW1vdmVkIHMzYzI0MTBfY2xvY2tfdGlja19yYXRlCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfVElNRVhfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91bmNvbXByZXNzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaAppbmRleCA4ZTE1MmEwLi44MWIzZTkxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3VuY29tcHJlc3MuaApAQCAtOCwxNSArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqICAyMi1NYXktMjAwMyBCSkQgIENyZWF0ZWQKLSAqICAwOC1TZXAtMjAwMyBCSkQgIE1vdmVkIHRvIGxpbnV4IHYyLjYKLSAqICAxMi1NYXItMjAwNCBCSkQgIFVwZGF0ZWQgaGVhZGVyIHByb3RlY3Rpb24KLSAqICAxMi1PY3QtMjAwNCBCSkQgIFRha2UgYWNjb3VudCBvZiBkZWJ1ZyB1YXJ0IGNvbmZpZ3VyYXRpb24KLSAqICAxNS1Ob3YtMjAwNCBCSkQgIEZpeGVkIHVhcnQgY29uZmlndXJhdGlvbgotICogIDIyLUZlYi0yMDA1IEJKRCAgQWRkZWQgd2F0Y2hkb2cgdG8gdW5jb21wcmVzcwotICogIDA0LUFwci0yMDA1IExDVlIgQWRkZWQgc3VwcG9ydCB0byBTM0MyNDAwIChubyBjcHVpZCBhdCBHU1RBVFVTMSkKICovCiAKICNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdXNiLWNvbnRyb2wuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdXNiLWNvbnRyb2wuaAppbmRleCBiZDQzYjU2Li4zNTcyMzU2OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC91c2ItY29udHJvbC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdXNiLWNvbnRyb2wuaApAQCAtOCwxMSArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqICAxMS1TZXAtMjAwNCBCSkQgIENyZWF0ZWQgZmlsZQotICogIDIxLVNlcC0yMDA0IEJKRCAgVXBkYXRlZCBwb3J0IGluZm8KLSAqICAwOS1BdWctMjAwNSBCSkQgIFJlbmFtZWQgczNjMjQxMF9yZXBvcnRfb2MgczNjMjQxMF91c2JfcmVwb3J0X29jCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZtYWxsb2MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdm1hbGxvYy5oCmluZGV4IDMzOTYzY2QuLjBhZTNiZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdm1hbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdm1hbGxvYy5oCkBAIC0xMCwxMSArMTAsNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKgogICogUzNDMjQxMCB2bWFsbG9jIGRlZmluaXRpb24KLSAqCi0gKiAgQ2hhbmdlbG9nOgotICogICAgMTItTWFyLTIwMDQgQkpECUZpeGVkIGhlYWRlciwgYWRkZWQgaW5jbHVkZSBwcm90ZWN0aW9uCi0gKiAgICAxMj1NYXItMjAwNCBCSkQJRml4ZWQgVk1BTExPQ19FTkQgZGVmaW5pdGlvbnMKLSAqLworKi8KIAogI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAogI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oCmluZGV4IDBlZTM3M2EuLmEzNDFiMWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1jcGxkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC92cjEwMDAtY3BsZC5oCkBAIC04LDEwICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDI1LU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlLCBhZGRlZCBDVFJMMSByZWdpc3RlcnMKLSAqICAxOS1NYXItMjAwNCBCSkQgIEFkZGVkIFZSMTAwMCBDUExEIGRlZmluaXRpb25zCiAqLwogCiAjaWZuZGVmIF9fQVNNX0FSQ0hfVlIxMDAwQ1BMRF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1pcnEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWlycS5oCmluZGV4IDY5NGY3NzEuLmMzOWEwZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWlycS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLWlycS5oCkBAIC04LDExICs4LDcgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDA2LUphbi0yMDAzIEJKRCAgTGludXggMi42LjAgdmVyc2lvbgotICogIDE5LU1hci0yMDA0IEJKRCAgVXBkYXRlcyBmb3IgVlIxMDAwCi0gKi8KKyovCiAKICNpZm5kZWYgX19BU01fQVJDSF9WUjEwMDBJUlFfSAogI2RlZmluZSBfX0FTTV9BUkNIX1ZSMTAwMElSUV9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3ZyMTAwMC1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCmluZGV4IDg2N2M5MzUuLjFmZTRkYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvdnIxMDAwLW1hcC5oCkBAIC04LDEyICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogQ2hhbmdlbG9nOgotICogIDA2LUphbi0yMDAzIEJKRCAgTGludXggMi42LjAgdmVyc2lvbiwgc3BsaXQgc3BlY2lmaWNzIGZyb20gYXJjaC9tYXAuaAotICogIDEyLU1hci0yMDA0IEJKRCAgRml4ZWQgaGVhZGVyIGluY2x1ZGUgcHJvdGVjdGlvbgotICogIDE5LU1hci0yMDA0IEJKRCAgQ29waWVkIHRvIFZSMTAwMCBtYWNoaW5lIGhlYWRlcnMuCi0gKiAgMTktSmFuLTIwMDUgQkpEICBVcGRhdGVkIG1hcCBkZWZpbml0aW9ucwogKi8KIAogLyogbmVlZHMgYXJjaC9tYXAuaCBpbmNsdWRpbmcgd2l0aCB0aGlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaAppbmRleCBmZTBjNzQ0Li5lNGEyNTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKQEAgLTI0NywxNCArMjQ3LDEyIEBACiAgKi8KICNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAogCWRvIHsJCQkJCQkJXAotCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCiAJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAotCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsJCQlcCisJCWZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB2YWRkciwgZHN0LCBsZW4sIDEpO1wKIAl9IHdoaWxlICgwKQogCiAjZGVmaW5lIGNvcHlfZnJvbV91c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgXAogCWRvIHsJCQkJCQkJXAotCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgdmFkZHIsIHBhZ2VfdG9fcGZuKHBhZ2UpKTtcCiAJCW1lbWNweShkc3QsIHNyYywgbGVuKTsJCQkJXAogCX0gd2hpbGUgKDApCiAKQEAgLTI4NSwxMCArMjgzLDI0IEBACiAJCV9fY3B1Y19mbHVzaF91c2VyX3JhbmdlKGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIHZtYS0+dm1fZmxhZ3MpOwogCX0KIH0KKworc3RhdGljIGlubGluZSB2b2lkCitmbHVzaF9wdHJhY2VfYWNjZXNzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSB1bnNpZ25lZCBsb25nIHVhZGRyLCB2b2lkICprYWRkciwKKwkJCSB1bnNpZ25lZCBsb25nIGxlbiwgaW50IHdyaXRlKQoreworCWlmIChjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2bWEtPnZtX21tLT5jcHVfdm1fbWFzaykpIHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FkZHI7CisJCV9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlKGFkZHIsIGFkZHIgKyBsZW4pOworCX0KK30KICNlbHNlCiBleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CiBleHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwogZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyB1c2VyX2FkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKTsKK2V4dGVybiB2b2lkIGZsdXNoX3B0cmFjZV9hY2Nlc3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgdWFkZHIsIHZvaWQgKmthZGRyLAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgd3JpdGUpOwogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZWxmLmggYi9pbmNsdWRlL2FzbS1hcm0vZWxmLmgKaW5kZXggNzEwNjFjYS4uYWU3YmFhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9lbGYuaApAQCAtOCw3ICs4LDkgQEAKIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgorI2lmZGVmIF9fS0VSTkVMCiAjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjZW5kaWYKIAogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2ZyZWdfdFszXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zc3AuaCBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zc3AuaAppbmRleCAyOGFhMTFiLi4zYjQyZTE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc3NwLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3NzcC5oCkBAIC0xNiw4ICsxNiw4IEBACiB9OwogCiBpbnQgc3NwX3dyaXRlX3dvcmQodTE2IGRhdGEpOwotaW50IHNzcF9yZWFkX3dvcmQodm9pZCk7Ci12b2lkIHNzcF9mbHVzaCh2b2lkKTsKK2ludCBzc3BfcmVhZF93b3JkKHUxNiAqZGF0YSk7CitpbnQgc3NwX2ZsdXNoKHZvaWQpOwogdm9pZCBzc3BfZW5hYmxlKHZvaWQpOwogdm9pZCBzc3BfZGlzYWJsZSh2b2lkKTsKIHZvaWQgc3NwX3NhdmVfc3RhdGUoc3RydWN0IHNzcF9zdGF0ZSAqc3NwKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKaW5kZXggYjM0NzlmYy4uYmY3YjlkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKQEAgLTI5MSw1ICsyOTEsMTIgQEAKICAqLwogI2RlZmluZSB4bGF0ZV9kZXZfa21lbV9wdHIocCkJcAogCisvKgorICogUmVnaXN0ZXIgSVNBIG1lbW9yeSBhbmQgcG9ydCBsb2NhdGlvbnMgZm9yIGdsaWJjIGlvcGwvaW5iL291dGIKKyAqIGVtdWxhdGlvbi4KKyAqLworZXh0ZXJuIHZvaWQgcmVnaXN0ZXJfaXNhX3BvcnRzKHVuc2lnbmVkIGludCBtbWlvLCB1bnNpZ25lZCBpbnQgaW8sCisJCQkgICAgICAgdW5zaWduZWQgaW50IGlvX3NoaWZ0KTsKKwogI2VuZGlmCS8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgkvKiBfX0FTTV9BUk1fSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaCBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKaW5kZXggNjNkMTJmMC4uYjcyMTI3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCkBAIC0xOTMsOCArMTkzLDggQEAKICNkZWZpbmUgQVJDSF9TTEFCX01JTkFMSUdOIDgKICNlbmRpZgogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9wcm9jaW5mby5oIGIvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKaW5kZXggZWRiN2I2NS4uOTFhMzFhZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3Byb2NpbmZvLmgKQEAgLTU1LDUgKzU1LDYgQEAKICNkZWZpbmUgSFdDQVBfVkZQCTY0CiAjZGVmaW5lIEhXQ0FQX0VEU1AJMTI4CiAjZGVmaW5lIEhXQ0FQX0pBVkEJMjU2CisjZGVmaW5lIEhXQ0FQX0lXTU1YVAk1MTIKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWFybS9zcGlubG9jay5oCmluZGV4IDQwNmNhOTdhLi4wMWI3YzI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3BpbmxvY2suaApAQCAtMTk5LDcgKzE5OSwyMSBAQAogCTogImNjIik7CiB9CiAKLSNkZWZpbmUgX19yYXdfcmVhZF90cnlsb2NrKGxvY2spIGdlbmVyaWNfX3Jhd19yZWFkX3RyeWxvY2sobG9jaykKK3N0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKnJ3KQoreworCXVuc2lnbmVkIGxvbmcgdG1wLCB0bXAyID0gMTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fKAorIjE6CWxkcmV4CSUwLCBbJTJdXG4iCisiCWFkZHMJJTAsICUwLCAjMVxuIgorIglzdHJleHBsCSUxLCAlMCwgWyUyXVxuIgorCTogIj0mciIgKHRtcCksICIrciIgKHRtcDIpCisJOiAiciIgKCZydy0+bG9jaykKKwk6ICJjYyIpOworCisJc21wX21iKCk7CisJcmV0dXJuIHRtcDIgPT0gMDsKK30KIAogLyogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCiAjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkJCSgoeCktPmxvY2sgPCAweDgwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQgYi9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZAppbmRleCA3MDU5NGIyLi4zYzA2YmUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZApAQCAtMSwzICsxLDEyIEBACi1oZWFkZXIteSArPSBhdG9taWMuaCBlcnJuby1iYXNlLmggZXJybm8uaCBmY250bC5oIGlvY3RsLmggaXBjLmggbW1hbi5oIFwKLQlzaWduYWwuaCBzdGF0ZnMuaAotdW5pZmRlZi15IDo9IHJlc291cmNlLmggc2lnaW5mby5oCitoZWFkZXIteSArPSBhdG9taWMuaAoraGVhZGVyLXkgKz0gZXJybm8tYmFzZS5oCitoZWFkZXIteSArPSBlcnJuby5oCitoZWFkZXIteSArPSBmY250bC5oCitoZWFkZXIteSArPSBpb2N0bC5oCitoZWFkZXIteSArPSBpcGMuaAoraGVhZGVyLXkgKz0gbW1hbi5oCitoZWFkZXIteSArPSBzaWduYWwuaAoraGVhZGVyLXkgKz0gc3RhdGZzLmgKKwordW5pZmRlZi15ICs9IHJlc291cmNlLmgKK3VuaWZkZWYteSArPSBzaWdpbmZvLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbSBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQppbmRleCA2YjE2ZGRhLi5hODRjM2Q4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCkBAIC0xLDggKzEsMzQgQEAKLXVuaWZkZWYteSArPSBhLm91dC5oIGF1eHZlYy5oIGJ5dGVvcmRlci5oIGVycm5vLmggZmNudGwuaCBpb2N0bC5oCVwKLQlpb2N0bHMuaCBpcGNidWYuaCBtbWFuLmggbXNnYnVmLmggcGFyYW0uaCBwb2xsLmgJCVwKLQlwb3NpeF90eXBlcy5oIHB0cmFjZS5oIHJlc291cmNlLmggc2VtYnVmLmggc2htYnVmLmggc2htcGFyYW0uaAlcCi0Jc2lnY29udGV4dC5oIHNpZ2luZm8uaCBzaWduYWwuaCBzb2NrZXQuaCBzb2NraW9zLmggc3RhdC5oCVwKLQlzdGF0ZnMuaCB0ZXJtYml0cy5oIHRlcm1pb3MuaCB0aW1leC5oIHR5cGVzLmggdW5pc3RkLmggdXNlci5oCit1bmlmZGVmLXkgKz0gYS5vdXQuaAordW5pZmRlZi15ICs9IGF1eHZlYy5oCit1bmlmZGVmLXkgKz0gYnl0ZW9yZGVyLmgKK3VuaWZkZWYteSArPSBlcnJuby5oCit1bmlmZGVmLXkgKz0gZmNudGwuaAordW5pZmRlZi15ICs9IGlvY3RsLmgKK3VuaWZkZWYteSArPSBpb2N0bHMuaAordW5pZmRlZi15ICs9IGlwY2J1Zi5oCit1bmlmZGVmLXkgKz0gbW1hbi5oCit1bmlmZGVmLXkgKz0gbXNnYnVmLmgKK3VuaWZkZWYteSArPSBwYXJhbS5oCit1bmlmZGVmLXkgKz0gcG9sbC5oCit1bmlmZGVmLXkgKz0gcG9zaXhfdHlwZXMuaAordW5pZmRlZi15ICs9IHB0cmFjZS5oCit1bmlmZGVmLXkgKz0gcmVzb3VyY2UuaAordW5pZmRlZi15ICs9IHNlbWJ1Zi5oCit1bmlmZGVmLXkgKz0gc2htYnVmLmgKK3VuaWZkZWYteSArPSBzaWdjb250ZXh0LmgKK3VuaWZkZWYteSArPSBzaWdpbmZvLmgKK3VuaWZkZWYteSArPSBzaWduYWwuaAordW5pZmRlZi15ICs9IHNvY2tldC5oCit1bmlmZGVmLXkgKz0gc29ja2lvcy5oCit1bmlmZGVmLXkgKz0gc3RhdC5oCit1bmlmZGVmLXkgKz0gc3RhdGZzLmgKK3VuaWZkZWYteSArPSB0ZXJtYml0cy5oCit1bmlmZGVmLXkgKz0gdGVybWlvcy5oCit1bmlmZGVmLXkgKz0gdHlwZXMuaAordW5pZmRlZi15ICs9IHVuaXN0ZC5oCit1bmlmZGVmLXkgKz0gdXNlci5oCiAKICMgVGhlc2UgcHJvYmFibHkgc2hvdWxkbid0IGJlIGV4cG9ydGVkCi11bmlmZGVmLXkgKz0gZWxmLmggcGFnZS5oCit1bmlmZGVmLXkgKz0gc2htcGFyYW0uaAordW5pZmRlZi15ICs9IGVsZi5oCit1bmlmZGVmLXkgKz0gcGFnZS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfcmVhZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlODc0NjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2F1ZGl0X3JlYWQuaApAQCAtMCwwICsxLDggQEAKK19fTlJfcmVhZGxpbmssCitfX05SX3F1b3RhY3RsLAorX19OUl9saXN0eGF0dHIsCitfX05SX2xsaXN0eGF0dHIsCitfX05SX2ZsaXN0eGF0dHIsCitfX05SX2dldHhhdHRyLAorX19OUl9sZ2V0eGF0dHIsCitfX05SX2ZnZXR4YXR0ciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvYXVkaXRfd3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTBkMzY3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9hdWRpdF93cml0ZS5oCkBAIC0wLDAgKzEsMTEgQEAKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaD4KK19fTlJfYWNjdCwKK19fTlJfc3dhcG9uLAorX19OUl9xdW90YWN0bCwKK19fTlJfdHJ1bmNhdGUsCisjaWZkZWYgX19OUl90cnVuY2F0ZTY0CitfX05SX3RydW5jYXRlNjQsCisjZW5kaWYKKyNpZmRlZiBfX05SX2JpbmQKK19fTlJfYmluZCwJCS8qIGJpbmQgY2FuIGFmZmVjdCBmcyBvYmplY3Qgb25seSBpbiBvbmUgd2F5Li4uICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvS2J1aWxkIGIvaW5jbHVkZS9hc20taTM4Ni9LYnVpbGQKaW5kZXggYzA2NGE4ZS4uYjc1YTM0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9LYnVpbGQKQEAgLTEsNSArMSwxMCBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAotaGVhZGVyLXkgKz0gYm9vdC5oIGNwdWZlYXR1cmUuaCBkZWJ1Z3JlZy5oIGxkdC5oIHNldHVwLmggdWNvbnRleHQuaAoraGVhZGVyLXkgKz0gYm9vdC5oCitoZWFkZXIteSArPSBkZWJ1Z3JlZy5oCitoZWFkZXIteSArPSBsZHQuaAoraGVhZGVyLXkgKz0gdWNvbnRleHQuaAogCi11bmlmZGVmLXkgKz0gbXRyci5oIHZtODYuaAordW5pZmRlZi15ICs9IG10cnIuaAordW5pZmRlZi15ICs9IHNldHVwLmgKK3VuaWZkZWYteSArPSB2bTg2LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvYWx0ZXJuYXRpdmUuaCBiL2luY2x1ZGUvYXNtLWkzODYvYWx0ZXJuYXRpdmUuaAppbmRleCA5NmFkYmFiZS4uYjAxYTdlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9hbHRlcm5hdGl2ZS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvYWx0ZXJuYXRpdmUuaApAQCAtODgsOSArODgsNiBAQAogLyoKICAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSBmb3IgU01QLgogICoKLSAqIGFsdGVybmF0aXZlX3NtcCgpIHRha2VzIHR3byB2ZXJzaW9ucyAoU01QIGZpcnN0LCBVUCBzZWNvbmQpIGFuZCBpcwotICogZm9yIG1vcmUgY29tcGxleCBzdHVmZiBzdWNoIGFzIHNwaW5sb2Nrcy4KLSAqCiAgKiBUaGUgTE9DS19QUkVGSVggbWFjcm8gZGVmaW5lZCBoZXJlIHJlcGxhY2VzIHRoZSBMT0NLIGFuZAogICogTE9DS19QUkVGSVggbWFjcm9zIHVzZWQgZXZlcnl3aGVyZSBpbiB0aGUgc291cmNlIHRyZWUuCiAgKgpAQCAtMTEwLDIxICsxMDcsNiBAQAogICovCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIGFsdGVybmF0aXZlX3NtcChzbXBpbnN0ciwgdXBpbnN0ciwgYXJncy4uLikJCQlcCi0JYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIHNtcGluc3RyICJcbjY2MjpcbiIgCQkJXAotCQkgICAgICAiLnNlY3Rpb24gLnNtcF9hbHRpbnN0cnVjdGlvbnMsXCJhXCJcbiIJCVwKLQkJICAgICAgIiAgLmFsaWduIDRcbiIJCQkJCVwKLQkJICAgICAgIiAgLmxvbmcgNjYxYlxuIiAgICAgICAgICAgIC8qIGxhYmVsICovCQlcCi0JCSAgICAgICIgIC5sb25nIDY2M2ZcbiIJCSAgLyogbmV3IGluc3RydWN0aW9uICovCVwKLQkJICAgICAgIiAgLmJ5dGUgMHg2OFxuIiAgICAgICAgICAgIC8qIFg4Nl9GRUFUVVJFX1VQICovCVwKLQkJICAgICAgIiAgLmJ5dGUgNjYyYi02NjFiXG4iICAgICAgIC8qIHNvdXJjZWxlbiAqLwlcCi0JCSAgICAgICIgIC5ieXRlIDY2NGYtNjYzZlxuIiAgICAgICAvKiByZXBsYWNlbWVudGxlbiAqLwlcCi0JCSAgICAgICIucHJldmlvdXNcbiIJCQkJCVwKLQkJICAgICAgIi5zZWN0aW9uIC5zbXBfYWx0aW5zdHJfcmVwbGFjZW1lbnQsXCJhd3hcIlxuIiAgIAlcCi0JCSAgICAgICI2NjM6XG5cdCIgdXBpbnN0ciAiXG4iICAgICAvKiByZXBsYWNlbWVudCAqLwlcCi0JCSAgICAgICI2NjQ6XG5cdC5maWxsIDY2MmItNjYxYiwxLDB4NDJcbiIgLyogc3BhY2UgZm9yIG9yaWdpbmFsICovIFwKLQkJICAgICAgIi5wcmV2aW91cyIgOiBhcmdzKQotCiAjZGVmaW5lIExPQ0tfUFJFRklYIFwKIAkJIi5zZWN0aW9uIC5zbXBfbG9ja3MsXCJhXCJcbiIJXAogCQkiICAuYWxpZ24gNFxuIgkJCVwKQEAgLTEzMyw4ICsxMTUsNiBAQAogCSAgICAgICAJIjY2MTpcblx0bG9jazsgIgogCiAjZWxzZSAvKiAhIENPTkZJR19TTVAgKi8KLSNkZWZpbmUgYWx0ZXJuYXRpdmVfc21wKHNtcGluc3RyLCB1cGluc3RyLCBhcmdzLi4uKSBcCi0JYXNtIHZvbGF0aWxlICh1cGluc3RyIDogYXJncykKICNkZWZpbmUgTE9DS19QUkVGSVggIiIKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2VsZi5oIGIvaW5jbHVkZS9hc20taTM4Ni9lbGYuaAppbmRleCAxZWFjOTJjLi5kYjQzNDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZWxmLmgKQEAgLTcsMTAgKzcsNyBAQAogCiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgogI2luY2x1ZGUgPGFzbS91c2VyLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCS8qIGZvciBzYXZlc2VnbWVudCAqLwogI2luY2x1ZGUgPGFzbS9hdXh2ZWMuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgogCiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogCkBAIC00OCw2ICs0NSwxMiBAQAogI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgogI2RlZmluZSBFTEZfQVJDSAlFTV8zODYKIAorI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBmb3Igc2F2ZXNlZ21lbnQgKi8KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorCiAvKiBTVlI0L2kzODYgQUJJIChwYWdlcyAzLTMxLCAzLTMyKSBzYXlzIHRoYXQgd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgJWVkeAogICAgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgcmVnaXN0ZXJlZCB1c2luZyBgYXRleGl0Jy4KICAgIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYyBsaW5rZXIgdG8gY2FsbCBEVF9GSU5JIGZ1bmN0aW9ucyBmb3IKQEAgLTExMSw3ICsxMTQsNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAgKHN5c3RlbV91dHNuYW1lLm1hY2hpbmUpCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIGRvIHsgfSB3aGlsZSAoMCkKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYva3Byb2Jlcy5oIGIvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKaW5kZXggMDczMGEyMC4uODc3NGQwNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9rcHJvYmVzLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKICNkZWZpbmUgSlBST0JFX0VOVFJZKHBlbnRyeSkJKGtwcm9iZV9vcGNvZGVfdCAqKXBlbnRyeQogI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKICNkZWZpbmUgIEFSQ0hfSU5BQ1RJVkVfS1BST0JFX0NPVU5UIDAKKyNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCWRvIHsgfSB3aGlsZSAoMCkKIAogdm9pZCBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7CiB2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L21hY2hfbXBzcGVjLmgKaW5kZXggNmI1ZGFkYy4uNTFjOWE5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvbWFjaF9tcHNwZWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9tYWNoX21wc3BlYy5oCkBAIC0zLDYgKzMsMTAgQEAKIAogI2RlZmluZSBNQVhfSVJRX1NPVVJDRVMgMjU2CiAKKyNpZiBDT05GSUdfQkFTRV9TTUFMTCA9PSAwCisjZGVmaW5lIE1BWF9NUF9CVVNTRVMgMjU2CisjZWxzZQogI2RlZmluZSBNQVhfTVBfQlVTU0VTIDMyCisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfTVBTUEVDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmggYi9pbmNsdWRlL2FzbS1pMzg2L21tem9uZS5oCmluZGV4IGUzM2U5ZjkuLjIyY2IwN2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvbW16b25lLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9tbXpvbmUuaApAQCAtMTQsNyArMTQsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQogCSNpbmNsdWRlIDxhc20vbnVtYXEuaD4KLSNlbHNlCS8qIHN1bW1pdCBvciBnZW5lcmljIGFyY2ggKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0FDUElfU1JBVCkvKiBzdW1taXQgb3IgZ2VuZXJpYyBhcmNoICovCiAJI2luY2x1ZGUgPGFzbS9zcmF0Lmg+CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9yd2xvY2suaCBiL2luY2x1ZGUvYXNtLWkzODYvcndsb2NrLmgKaW5kZXggOTZiMGJlZi4uODdjMDY5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9yd2xvY2suaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3J3bG9jay5oCkBAIC0yMSwyMyArMjEsMjEgQEAKICNkZWZpbmUgUldfTE9DS19CSUFTX1NUUgkiMHgwMTAwMDAwMCIKIAogI2RlZmluZSBfX2J1aWxkX3JlYWRfbG9ja19wdHIocncsIGhlbHBlcikgICBcCi0JYWx0ZXJuYXRpdmVfc21wKCJsb2NrOyBzdWJsICQxLCglMClcblx0IiBcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgc3VibCAkMSwoJTApXG5cdCIgXAogCQkJImpucyAxZlxuIiBcCiAJCQkiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAotCQkJIjE6XG4iLCBcCi0JCQkic3VibCAkMSwoJTApXG5cdCIsIFwKLQkJCToiYSIgKHJ3KSA6ICJtZW1vcnkiKQorCQkJIjE6XG4iIFwKKwkJCTo6ImEiIChydykgOiAibWVtb3J5IikKIAogI2RlZmluZSBfX2J1aWxkX3JlYWRfbG9ja19jb25zdChydywgaGVscGVyKSAgIFwKLQlhbHRlcm5hdGl2ZV9zbXAoImxvY2s7IHN1YmwgJDEsJTBcblx0IiBcCisJYXNtIHZvbGF0aWxlKExPQ0tfUFJFRklYICIgc3VibCAkMSwlMFxuXHQiIFwKIAkJCSJqbnMgMWZcbiIgXAogCQkJInB1c2hsICUlZWF4XG5cdCIgXAogCQkJImxlYWwgJTAsJSVlYXhcblx0IiBcCiAJCQkiY2FsbCAiIGhlbHBlciAiXG5cdCIgXAogCQkJInBvcGwgJSVlYXhcblx0IiBcCi0JCQkiMTpcbiIsIFwKLQkJCSJzdWJsICQxLCUwXG5cdCIsIFwKLQkJCSIrbSIgKCoodm9sYXRpbGUgaW50ICopcncpIDogOiAibWVtb3J5IikKKwkJCSIxOlxuIiBcCisJCQk6IittIiAoKih2b2xhdGlsZSBpbnQgKilydykgOiA6ICJtZW1vcnkiKQogCiAjZGVmaW5lIF9fYnVpbGRfcmVhZF9sb2NrKHJ3LCBoZWxwZXIpCWRvIHsgXAogCQkJCQkJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKHJ3KSkgXApAQCAtNDcsMjMgKzQ1LDIxIEBACiAJCQkJCX0gd2hpbGUgKDApCiAKICNkZWZpbmUgX19idWlsZF93cml0ZV9sb2NrX3B0cihydywgaGVscGVyKSBcCi0JYWx0ZXJuYXRpdmVfc21wKCJsb2NrOyBzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwoJTApXG5cdCIgXAorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiIHN1YmwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCglMClcblx0IiBcCiAJCQkianogMWZcbiIgXAogCQkJImNhbGwgIiBoZWxwZXIgIlxuXHQiIFwKLQkJCSIxOlxuIiwgXAotCQkJInN1YmwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCglMClcblx0IiwgXAotCQkJOiJhIiAocncpIDogIm1lbW9yeSIpCisJCQkiMTpcbiIgXAorCQkJOjoiYSIgKHJ3KSA6ICJtZW1vcnkiKQogCiAjZGVmaW5lIF9fYnVpbGRfd3JpdGVfbG9ja19jb25zdChydywgaGVscGVyKSBcCi0JYWx0ZXJuYXRpdmVfc21wKCJsb2NrOyBzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwlMFxuXHQiIFwKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiBzdWJsICQiIFJXX0xPQ0tfQklBU19TVFIgIiwlMFxuXHQiIFwKIAkJCSJqeiAxZlxuIiBcCiAJCQkicHVzaGwgJSVlYXhcblx0IiBcCiAJCQkibGVhbCAlMCwlJWVheFxuXHQiIFwKIAkJCSJjYWxsICIgaGVscGVyICJcblx0IiBcCiAJCQkicG9wbCAlJWVheFxuXHQiIFwKLQkJCSIxOlxuIiwgXAotCQkJInN1YmwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCUwXG5cdCIsIFwKLQkJCSIrbSIgKCoodm9sYXRpbGUgaW50ICopcncpIDogOiAibWVtb3J5IikKKwkJCSIxOlxuIiBcCisJCQk6IittIiAoKih2b2xhdGlsZSBpbnQgKilydykgOiA6ICJtZW1vcnkiKQogCiAjZGVmaW5lIF9fYnVpbGRfd3JpdGVfbG9jayhydywgaGVscGVyKQlkbyB7IFwKIAkJCQkJCWlmIChfX2J1aWx0aW5fY29uc3RhbnRfcChydykpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaAppbmRleCBmNzM3ZTQyLi4yNzM0OTA5ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NldHVwLmgKQEAgLTYsNiArNiw3IEBACiAjaWZuZGVmIF9pMzg2X1NFVFVQX0gKICNkZWZpbmUgX2kzODZfU0VUVVBfSAogCisjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogCiAvKgpAQCAtMTMsNiArMTQsNyBAQAogICovCiAjZGVmaW5lIE1BWE1FTV9QRk4JUEZOX0RPV04oTUFYTUVNKQogI2RlZmluZSBNQVhfTk9OUEFFX1BGTgkoMSA8PCAyMCkKKyNlbmRpZgogCiAjZGVmaW5lIFBBUkFNX1NJWkUgNDA5NgogI2RlZmluZSBDT01NQU5EX0xJTkVfU0laRSAyNTYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NpZ25hbC5oCmluZGV4IDM4MjRhNTAuLmMzZThhZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc2lnbmFsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9zaWduYWwuaApAQCAtMiw3ICsyLDYgQEAKICNkZWZpbmUgX0FTTWkzODZfU0lHTkFMX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogCkBAIC0xMCw2ICs5LDkgQEAKIHN0cnVjdCBzaWdpbmZvOwogCiAjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCiAvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQogICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCmluZGV4IGQ4MTZjNjIuLmQxMDIwMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfc3RyaW5nIFwKIAkiXG4xOlx0IiBcCi0JImxvY2sgOyBkZWNiICUwXG5cdCIgXAorCUxPQ0tfUFJFRklYICIgOyBkZWNiICUwXG5cdCIgXAogCSJqbnMgM2ZcbiIgXAogCSIyOlx0IiBcCiAJInJlcDtub3Bcblx0IiBcCkBAIC0zOCw3ICszOCw3IEBACiAgKi8KICNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrX3N0cmluZ19mbGFncyBcCiAJIlxuMTpcdCIgXAotCSJsb2NrIDsgZGVjYiAlMFxuXHQiIFwKKwlMT0NLX1BSRUZJWCAiIDsgZGVjYiAlMFxuXHQiIFwKIAkiam5zIDVmXG4iIFwKIAkiMjpcdCIgXAogCSJ0ZXN0bCAkMHgyMDAsICUxXG5cdCIgXApAQCAtNTcsMTUgKzU3LDkgQEAKIAkiam1wIDRiXG4iIFwKIAkiNTpcblx0IgogCi0jZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19zdHJpbmdfdXAgXAotCSJcblx0ZGVjYiAlMCIKLQogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlhbHRlcm5hdGl2ZV9zbXAoCi0JCV9fcmF3X3NwaW5fbG9ja19zdHJpbmcsCi0JCV9fcmF3X3NwaW5fbG9ja19zdHJpbmdfdXAsCi0JCSIrbSIgKGxvY2stPnNsb2NrKSA6IDogIm1lbW9yeSIpOworCWFzbShfX3Jhd19zcGluX2xvY2tfc3RyaW5nIDogIittIiAobG9jay0+c2xvY2spIDogOiAibWVtb3J5Iik7CiB9CiAKIC8qCkBAIC03NiwxMCArNzAsNyBAQAogI2lmbmRlZiBDT05GSUdfUFJPVkVfTE9DS0lORwogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9ja19mbGFncyhyYXdfc3BpbmxvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlhbHRlcm5hdGl2ZV9zbXAoCi0JCV9fcmF3X3NwaW5fbG9ja19zdHJpbmdfZmxhZ3MsCi0JCV9fcmF3X3NwaW5fbG9ja19zdHJpbmdfdXAsCi0JCSIrbSIgKGxvY2stPnNsb2NrKSA6ICJyIiAoZmxhZ3MpIDogIm1lbW9yeSIpOworCWFzbShfX3Jhd19zcGluX2xvY2tfc3RyaW5nX2ZsYWdzIDogIittIiAobG9jay0+c2xvY2spIDogInIiIChmbGFncykgOiAibWVtb3J5Iik7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWkzODYvc3lzdGVtLmgKaW5kZXggNDk5MjhlYi4uMDk4YmNlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3N5c3RlbS5oCkBAIC0xMSw5ICsxMSwxNCBAQAogc3RydWN0IHRhc2tfc3RydWN0OwkvKiBvbmUgb2YgdGhlIHN0cmFuZ2VyIGFzcGVjdHMgb2YgQyBmb3J3YXJkIGRlY2xhcmF0aW9ucy4uICovCiBleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICogRkFTVENBTEwoX19zd2l0Y2hfdG8oc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5leHQpKTsKIAorLyoKKyAqIFNhdmluZyBlZmxhZ3MgaXMgaW1wb3J0YW50LiBJdCBzd2l0Y2hlcyBub3Qgb25seSBJT1BMIGJldHdlZW4gdGFza3MsCisgKiBpdCBhbHNvIHByb3RlY3RzIG90aGVyIHRhc2tzIGZyb20gTlQgbGVha2luZyB0aHJvdWdoIHN5c2VudGVyIGV0Yy4KKyAqLwogI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJCVwKIAl1bnNpZ25lZCBsb25nIGVzaSxlZGk7CQkJCQkJXAotCWFzbSB2b2xhdGlsZSgicHVzaGwgJSVlYnBcblx0IgkJCQkJXAorCWFzbSB2b2xhdGlsZSgicHVzaGZsXG5cdCIJCS8qIFNhdmUgZmxhZ3MgKi8JXAorCQkgICAgICJwdXNobCAlJWVicFxuXHQiCQkJCQlcCiAJCSAgICAgIm1vdmwgJSVlc3AsJTBcblx0IgkvKiBzYXZlIEVTUCAqLwkJXAogCQkgICAgICJtb3ZsICU1LCUlZXNwXG5cdCIJLyogcmVzdG9yZSBFU1AgKi8JXAogCQkgICAgICJtb3ZsICQxZiwlMVxuXHQiCQkvKiBzYXZlIEVJUCAqLwkJXApAQCAtMjEsNiArMjYsNyBAQAogCQkgICAgICJqbXAgX19zd2l0Y2hfdG9cbiIJCQkJXAogCQkgICAgICIxOlx0IgkJCQkJCVwKIAkJICAgICAicG9wbCAlJWVicFxuXHQiCQkJCQlcCisJCSAgICAgInBvcGZsIgkJCQkJCVwKIAkJICAgICA6Ij1tIiAocHJldi0+dGhyZWFkLmVzcCksIj1tIiAocHJldi0+dGhyZWFkLmVpcCksCVwKIAkJICAgICAgIj1hIiAobGFzdCksIj1TIiAoZXNpKSwiPUQiIChlZGkpCQkJXAogCQkgICAgIDoibSIgKG5leHQtPnRocmVhZC5lc3ApLCJtIiAobmV4dC0+dGhyZWFkLmVpcCksCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvdW53aW5kLmggYi9pbmNsdWRlL2FzbS1pMzg2L3Vud2luZC5oCmluZGV4IDY5ZjBmMWQuLjRjMWEwYjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWkzODYvdW53aW5kLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni91bndpbmQuaApAQCAtODcsNiArODcsNyBAQAogI2Vsc2UKIAogI2RlZmluZSBVTldfUEMoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQorI2RlZmluZSBVTldfU1AoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3Vud191c2VyX21vZGUoY29uc3Qgdm9pZCAqaW5mbykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvS2J1aWxkIGIvaW5jbHVkZS9hc20taWE2NC9LYnVpbGQKaW5kZXggODVkNmY4MC4uMTU4MThhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20taWE2NC9LYnVpbGQKQEAgLTEsNyArMSwxNyBAQAogaW5jbHVkZSBpbmNsdWRlL2FzbS1nZW5lcmljL0tidWlsZC5hc20KIAotaGVhZGVyLXkgKz0gYnJlYWsuaCBmcHUuaCBmcHN3YS5oIGdjY19pbnRyaW4uaCBpYTY0cmVncy5oCQlcCi0JIGludGVsX2ludHJpbi5oIGludHJpbnNpY3MuaCBwZXJmbW9uX2RlZmF1bHRfc21wbC5oCVwKLQkgcHRyYWNlX29mZnNldHMuaCByc2UuaCBzZXR1cC5oIHVjb250ZXh0LmgKK2hlYWRlci15ICs9IGJyZWFrLmgKK2hlYWRlci15ICs9IGZwdS5oCitoZWFkZXIteSArPSBmcHN3YS5oCitoZWFkZXIteSArPSBnY2NfaW50cmluLmgKK2hlYWRlci15ICs9IGlhNjRyZWdzLmgKK2hlYWRlci15ICs9IGludGVsX2ludHJpbi5oCitoZWFkZXIteSArPSBpbnRyaW5zaWNzLmgKK2hlYWRlci15ICs9IHBlcmZtb25fZGVmYXVsdF9zbXBsLmgKK2hlYWRlci15ICs9IHB0cmFjZV9vZmZzZXRzLmgKK2hlYWRlci15ICs9IHJzZS5oCitoZWFkZXIteSArPSBzZXR1cC5oCitoZWFkZXIteSArPSB1Y29udGV4dC5oCiAKIHVuaWZkZWYteSArPSBwZXJmbW9uLmgKK3VuaWZkZWYteSArPSB1c3RhY2suaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaAppbmRleCAyNDE4YTc4Li45Mzg5MDQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaApAQCAtMTI1LDUgKzEyNSw2IEBACiB9CiBleHRlcm4gdm9pZCBpbnZhbGlkYXRlX3N0YWNrZWRfcmVncyh2b2lkKTsKIGV4dGVybiB2b2lkIGZsdXNoX3JlZ2lzdGVyX3N0YWNrKHZvaWQpOworZXh0ZXJuIHZvaWQgZmx1c2hfaW5zbl9zbG90KHN0cnVjdCBrcHJvYmUgKnApOwogCiAjZW5kaWYJCQkJLyogX0FTTV9LUFJPQkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKaW5kZXggODk0YmM0ZC4uNmEzM2EwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKQEAgLTU2LDYgKzU2LDExIEBACiAgIGV4dGVybiBzdHJ1Y3QgcGFnZSAqdm1lbV9tYXA7CiAgIGV4dGVybiBpbnQgZmluZF9sYXJnZXN0X2hvbGUgKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKTsKICAgZXh0ZXJuIGludCBjcmVhdGVfbWVtX21hcF9wYWdlX3RhYmxlICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZyk7CisgIGV4dGVybiBpbnQgdm1lbW1hcF9maW5kX25leHRfdmFsaWRfcGZuKGludCwgaW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCB2bWVtbWFwX2ZpbmRfbmV4dF92YWxpZF9wZm4oaW50IG5vZGUsIGludCBpKQoreworCXJldHVybiBpICsgMTsKK30KICNlbmRpZgotCiAjZW5kaWYgLyogbWVtaW5pdF9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21tYW4uaCBiL2luY2x1ZGUvYXNtLWlhNjQvbW1hbi5oCmluZGV4IDZiYTE3OWYuLmM3M2I4NzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbW1hbi5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbW1hbi5oCkBAIC0yMiw0ICsyMiwxMiBAQAogI2RlZmluZSBNQ0xfQ1VSUkVOVAkxCQkvKiBsb2NrIGFsbCBjdXJyZW50IG1hcHBpbmdzICovCiAjZGVmaW5lIE1DTF9GVVRVUkUJMgkJLyogbG9jayBhbGwgZnV0dXJlIG1hcHBpbmdzICovCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisjaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBhcmNoX21tYXBfY2hlY2sJaWE2NF9tbWFwX2NoZWNrCitpbnQgaWE2NF9tbWFwX2NoZWNrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKwogI2VuZGlmIC8qIF9BU01fSUE2NF9NTUFOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGFnZS5oIGIvaW5jbHVkZS9hc20taWE2NC9wYWdlLmgKaW5kZXggZjVhOTQ5ZS4uOTQ3Y2I3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wYWdlLmgKQEAgLTcsNiArNyw3IEBACiAgKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+CiAgKi8KIAorIyBpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxhc20vaW50cmluc2ljcy5oPgogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgpAQCAtNjQsNyArNjUsNiBAQAogIyBkZWZpbmUgX19wYSh4KQkJKCh4KSAtIFBBR0VfT0ZGU0VUKQogIyBkZWZpbmUgX192YSh4KQkJKCh4KSArIFBBR0VfT0ZGU0VUKQogI2Vsc2UgLyogIV9fQVNTRU1CTFkgKi8KLSMgaWZkZWYgX19LRVJORUxfXwogIyAgZGVmaW5lIFNUUklDVF9NTV9UWVBFQ0hFQ0tTCiAKIGV4dGVybiB2b2lkIGNsZWFyX3BhZ2UgKHZvaWQgKnBhZ2UpOwpAQCAtMTc0LDcgKzE3NCw2IEBACiAJcmV0dXJuIG9yZGVyOwogfQogCi0jIGVuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNpZmRlZiBTVFJJQ1RfTU1fVFlQRUNIRUNLUwpAQCAtMjI4LDQgKzIyNyw1IEBACiAJCQkJCSAoKChjdXJyZW50LT5wZXJzb25hbGl0eSAmIFJFQURfSU1QTElFU19FWEVDKSAhPSAwKQlcCiAJCQkJCSAgPyBWTV9FWEVDIDogMCkpCiAKKyMgZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9BU01fSUE2NF9QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCmluZGV4IDM3ZTUyYTIuLjIwYThkNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaApAQCAtMTQzMyw3ICsxNDMzLDEyIEBACiB9IHBhbF92ZXJzaW9uX3VfdDsKIAogCi0vKiBSZXR1cm4gUEFMIHZlcnNpb24gaW5mb3JtYXRpb24gKi8KKy8qCisgKiBSZXR1cm4gUEFMIHZlcnNpb24gaW5mb3JtYXRpb24uICBXaGlsZSB0aGUgZG9jdW1lbnRhdGlvbiBzdGF0ZXMgdGhhdAorICogUEFMX1ZFUlNJT04gY2FuIGJlIGNhbGxlZCBpbiBlaXRoZXIgcGh5c2ljYWwgb3IgdmlydHVhbCBtb2RlLCBzb21lCisgKiBpbXBsZW1lbnRhdGlvbnMgb25seSBhbGxvdyBwaHlzaWNhbCBjYWxscy4gIFdlIGRvbid0IGNhbGwgaXQgdmVyeSBvZnRlbiwKKyAqIHNvIHRoZSBvdmVyaGVhZCBpc24ndCB3b3J0aCBlbGltaW5hdGluZy4KKyAqLwogc3RhdGljIGlubGluZSBzNjQKIGlhNjRfcGFsX3ZlcnNpb24gKHBhbF92ZXJzaW9uX3VfdCAqcGFsX21pbl92ZXJzaW9uLCBwYWxfdmVyc2lvbl91X3QgKnBhbF9jdXJfdmVyc2lvbikKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1pYTY0L3B0cmFjZS5oCmluZGV4IDQxNWFiYjIuLjE0MTQzMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wdHJhY2UuaApAQCAtNTYsNiArNTYsOCBAQAogCiAKICNpbmNsdWRlIDxhc20vZnB1Lmg+CisKKyNpZmRlZiBfX0tFUk5FTF9fCiAjaWZuZGVmIEFTTV9PRkZTRVRTX0MKICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNlbmRpZgpAQCAtNzksMTAgKzgxLDkgQEAKIAogI2RlZmluZSBLRVJORUxfU1RBQ0tfU0laRQkJSUE2NF9TVEtfT0ZGU0VUCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCi0jaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogLyoKICAqIFRoaXMgc3RydWN0IGRlZmluZXMgdGhlIHdheSB0aGUgcmVnaXN0ZXJzIGFyZSBzYXZlZCBvbiBzeXN0ZW0KQEAgLTIyOSw2ICsyMzAsOSBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCiAjZGVmaW5lIF9fQVJDSF9TWVNfUFRSQUNFCTEKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3NuX3NhbC5oCmluZGV4IGJkNDQ1MmIuLmJhODI2YjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc24vc25fc2FsLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbi9zbl9zYWwuaApAQCAtNzA2LDEyICs3MDYsOSBAQAogc25fY2hhbmdlX21lbXByb3RlY3QodTY0IHBhZGRyLCB1NjQgbGVuLCB1NjQgcGVybXMsIHU2NCAqbmFzaWRfYXJyYXkpCiB7CiAJc3RydWN0IGlhNjRfc2FsX3JldHZhbCByZXRfc3R1ZmY7Ci0JdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CiAKLQlsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOwogCWlhNjRfc2FsX29lbWNhbGxfbm9sb2NrKCZyZXRfc3R1ZmYsIFNOX1NBTF9NRU1QUk9URUNULCBwYWRkciwgbGVuLAogCQkJCSh1NjQpbmFzaWRfYXJyYXksIHBlcm1zLCAwLCAwLCAwKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwogCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOwogfQogI2RlZmluZSBTTl9NRU1QUk9UX0FDQ0VTU19DTEFTU18wCQkweDE0YTA4MApAQCAtMTE0MywxMiArMTE0MCw5IEBACiBzbl9pbmplY3RfZXJyb3IodTY0IHBhZGRyLCB1NjQgKmRhdGEsIHU2NCAqZWNjKQogewogCXN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgcmV0X3N0dWZmOwotCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwogCi0JbG9jYWxfaXJxX3NhdmUoaXJxX2ZsYWdzKTsKIAlpYTY0X3NhbF9vZW1jYWxsX25vbG9jaygmcmV0X3N0dWZmLCBTTl9TQUxfSU5KRUNUX0VSUk9SLCBwYWRkciwgKHU2NClkYXRhLAogCQkJCSh1NjQpZWNjLCAwLCAwLCAwLCAwKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShpcnFfZmxhZ3MpOwogCXJldHVybiByZXRfc3R1ZmYuc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwLmgKaW5kZXggOWJkMmY5Yi4uNmY4MDdlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zbi94cC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24veHAuaApAQCAtNjAsMjMgKzYwLDM3IEBACiAgKiB0aGUgYnRlX2NvcHkoKSBvbmNlIGluIHRoZSBob3BlIHRoYXQgdGhlIGZhaWx1cmUgd2FzIGR1ZSB0byBhIHRlbXBvcmFyeQogICogYWJlcnJhdGlvbiAoaS5lLiwgdGhlIGxpbmsgZ29pbmcgZG93biB0ZW1wb3JhcmlseSkuCiAgKgotICogU2VlIGJ0ZV9jb3B5IGZvciBkZWZpbml0aW9uIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzLgorICogCXNyYyAtIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHNvdXJjZSBvZiB0aGUgdHJhbnNmZXIuCisgKgl2ZHN0IC0gdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgdHJhbnNmZXIuCisgKglsZW4gLSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgZnJvbSBzb3VyY2UgdG8gZGVzdGluYXRpb24uCisgKgltb2RlIC0gc2VlIGJ0ZV9jb3B5KCkgZm9yIGRlZmluaXRpb24uCisgKglub3RpZmljYXRpb24gLSBzZWUgYnRlX2NvcHkoKSBmb3IgZGVmaW5pdGlvbi4KICAqCiAgKiBOb3RlOiB4cF9idGVfY29weSgpIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHNwaW5sb2NrLgogICovCiBzdGF0aWMgaW5saW5lIGJ0ZV9yZXN1bHRfdAoteHBfYnRlX2NvcHkodTY0IHNyYywgdTY0IGRlc3QsIHU2NCBsZW4sIHU2NCBtb2RlLCB2b2lkICpub3RpZmljYXRpb24pCit4cF9idGVfY29weSh1NjQgc3JjLCB1NjQgdmRzdCwgdTY0IGxlbiwgdTY0IG1vZGUsIHZvaWQgKm5vdGlmaWNhdGlvbikKIHsKIAlidGVfcmVzdWx0X3QgcmV0OworCXU2NCBwZHN0ID0gaWE2NF90cGEodmRzdCk7CiAKIAotCXJldCA9IGJ0ZV9jb3B5KHNyYywgZGVzdCwgbGVuLCBtb2RlLCBub3RpZmljYXRpb24pOworCS8qCisJICogRW5zdXJlIHRoYXQgdGhlIHBoeXNpY2FsbHkgbWFwcGVkIG1lbW9yeSBpcyBjb250aWd1b3VzLgorCSAqCisJICogV2UgZG8gdGhpcyBieSBlbnN1cmluZyB0aGF0IHRoZSBtZW1vcnkgaXMgZnJvbSByZWdpb24gNyBvbmx5LgorCSAqIElmIHRoZSBuZWVkIHNob3VsZCBhcmlzZSB0byB1c2UgbWVtb3J5IGZyb20gb25lIG9mIHRoZSBvdGhlcgorCSAqIHJlZ2lvbnMsIHRoZW4gbW9kaWZ5IHRoZSBCVUdfT04oKSBzdGF0ZW1lbnQgdG8gZW5zdXJlIHRoYXQgdGhlCisJICogbWVtb3J5IGZyb20gdGhhdCByZWdpb24gaXMgYWx3YXlzIHBoeXNpY2FsbHkgY29udGlndW91cy4KKwkgKi8KKwlCVUdfT04oUkVHSU9OX05VTUJFUih2ZHN0KSAhPSBSR05fS0VSTkVMKTsKIAorCXJldCA9IGJ0ZV9jb3B5KHNyYywgcGRzdCwgbGVuLCBtb2RlLCBub3RpZmljYXRpb24pOwogCWlmIChyZXQgIT0gQlRFX1NVQ0NFU1MpIHsKIAkJaWYgKCFpbl9pbnRlcnJ1cHQoKSkgewogCQkJY29uZF9yZXNjaGVkKCk7CiAJCX0KLQkJcmV0ID0gYnRlX2NvcHkoc3JjLCBkZXN0LCBsZW4sIG1vZGUsIG5vdGlmaWNhdGlvbik7CisJCXJldCA9IGJ0ZV9jb3B5KHNyYywgcGRzdCwgbGVuLCBtb2RlLCBub3RpZmljYXRpb24pOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oIGIvaW5jbHVkZS9hc20taWE2NC9zbi94cGMuaAppbmRleCA4NDA2ZjFlLi4zNWUxMzg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3NuL3hwYy5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvc24veHBjLmgKQEAgLTY4Myw3ICs2ODMsOSBAQAogZXh0ZXJuIHN0cnVjdCB4cGNfcnN2ZF9wYWdlICp4cGNfcnN2ZF9wYWdlOwogZXh0ZXJuIHN0cnVjdCB4cGNfdmFyc19wYXJ0ICp4cGNfdmFyc19wYXJ0OwogZXh0ZXJuIHN0cnVjdCB4cGNfcGFydGl0aW9uIHhwY19wYXJ0aXRpb25zW1hQX01BWF9QQVJUSVRJT05TICsgMV07Ci1leHRlcm4gY2hhciB4cGNfcmVtb3RlX2NvcHlfYnVmZmVyW107CitleHRlcm4gY2hhciAqeHBjX3JlbW90ZV9jb3B5X2J1ZmZlcjsKK2V4dGVybiB2b2lkICp4cGNfcmVtb3RlX2NvcHlfYnVmZmVyX2Jhc2U7CitleHRlcm4gdm9pZCAqeHBjX2ttYWxsb2NfY2FjaGVsaW5lX2FsaWduZWQoc2l6ZV90LCBnZnBfdCwgdm9pZCAqKik7CiBleHRlcm4gc3RydWN0IHhwY19yc3ZkX3BhZ2UgKnhwY19yc3ZkX3BhZ2VfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHhwY19hbGxvd19JUElfb3BzKHZvaWQpOwogZXh0ZXJuIHZvaWQgeHBjX3Jlc3RyaWN0X0lQSV9vcHModm9pZCk7CkBAIC0xMTI0LDggKzExMjYsOCBAQAogI2RlZmluZSBYUENfR0VUX0lQSV9GTEFHUyhfYW1vLCBfYykJKCh1OCkgKCgoX2FtbykgPj4gKChfYykgKiA4KSkgJiAweGZmKSkKICNkZWZpbmUgWFBDX1NFVF9JUElfRkxBR1MoX2FtbywgX2MsIF9mKQkoX2FtbykgfD0gKCh1NjQpIChfZikgPDwgKChfYykgKiA4KSkKIAotI2RlZmluZQlYUENfQU5ZX09QRU5DTE9TRV9JUElfRkxBR1NfU0VUKF9hbW8pICgoX2FtbykgJiAweDBmMGYwZjBmMGYwZjBmMGYpCi0jZGVmaW5lIFhQQ19BTllfTVNHX0lQSV9GTEFHU19TRVQoX2FtbykgICAgICAgKChfYW1vKSAmIDB4MTAxMDEwMTAxMDEwMTAxMCkKKyNkZWZpbmUJWFBDX0FOWV9PUEVOQ0xPU0VfSVBJX0ZMQUdTX1NFVChfYW1vKSAoKF9hbW8pICYgX19JQTY0X1VMX0NPTlNUKDB4MGYwZjBmMGYwZjBmMGYwZikpCisjZGVmaW5lIFhQQ19BTllfTVNHX0lQSV9GTEFHU19TRVQoX2FtbykgICAgICAgKChfYW1vKSAmIF9fSUE2NF9VTF9DT05TVCgweDEwMTAxMDEwMTAxMDEwMTApKQogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaCBiL2luY2x1ZGUvYXNtLWlhNjQvc3lzdGVtLmgKaW5kZXggZmM5Njc3Yi4uMzg0ZmJmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3N5c3RlbS5oCkBAIC0yNCw3ICsyNCw3IEBACiAgKiAweGEwMDAwMDAwMDAwMDAwMDArMipQRVJDUFVfUEFHRV9TSVpFCiAgKiAtIDB4YTAwMDAwMDAwMDAwMDAwMCszKlBFUkNQVV9QQUdFX1NJWkUgcmVtYWluIHVubWFwcGVkIChndWFyZCBwYWdlKQogICovCi0jZGVmaW5lIEtFUk5FTF9TVEFSVAkJIChHQVRFX0FERFIrMHgxMDAwMDAwMDApCisjZGVmaW5lIEtFUk5FTF9TVEFSVAkJIChHQVRFX0FERFIrX19JQTY0X1VMX0NPTlNUKDB4MTAwMDAwMDAwKSkKICNkZWZpbmUgUEVSQ1BVX0FERFIJCSgtUEVSQ1BVX1BBR0VfU0laRSkKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCmluZGV4IGJiMGViNzIuLmY1ODE2NjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaApAQCAtMjg2LDggKzI4Niw3IEBACiAvKiAxMjk0LCAxMjk1IHJlc2VydmVkIGZvciBwc2VsZWN0L3Bwb2xsICovCiAjZGVmaW5lIF9fTlJfdW5zaGFyZQkJCTEyOTYKICNkZWZpbmUgX19OUl9zcGxpY2UJCQkxMjk3Ci0jZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkxMjk4Ci0jZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CQkxMjk5CisvKiAxMjk4LCAxMjk5IHJlc2VydmVkIGZvciBzZXRfcm9idXN0X2xpc3QvZ2V0X3JvYnVzdF9saXN0ICovCiAjZGVmaW5lIF9fTlJfc3luY19maWxlX3JhbmdlCQkxMzAwCiAjZGVmaW5lIF9fTlJfdGVlCQkJMTMwMQogI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkJMTMwMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91c3RhY2suaCBiL2luY2x1ZGUvYXNtLWlhNjQvdXN0YWNrLmgKaW5kZXggZGE1NWM5MS4uYTM0OTQ2NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91c3RhY2suaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VzdGFjay5oCkBAIC01LDEyICs1LDE1IEBACiAgKiBDb25zdGFudHMgZm9yIHRoZSB1c2VyIHN0YWNrIHNpemUKICAqLwogCisjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIC8qIFRoZSBhYnNvbHV0ZSBoYXJkIGxpbWl0IGZvciBzdGFjayBzaXplIGlzIDEvMiBvZiB0aGUgbWFwcGFibGUgc3BhY2UgaW4gdGhlIHJlZ2lvbiAqLwogI2RlZmluZSBNQVhfVVNFUl9TVEFDS19TSVpFCShSR05fTUFQX0xJTUlULzIpCi0vKiBNYWtlIGEgZGVmYXVsdCBzdGFjayBzaXplIG9mIDJHQiAqLwotI2RlZmluZSBERUZBVUxUX1VTRVJfU1RBQ0tfU0laRQkoMVVMIDw8IDMxKQogI2RlZmluZSBTVEFDS19UT1AJCSgweDYwMDAwMDAwMDAwMDAwMDBVTCArIFJHTl9NQVBfTElNSVQpCisjZW5kaWYKKworLyogTWFrZSBhIGRlZmF1bHQgc3RhY2sgc2l6ZSBvZiAyR2lCICovCisjZGVmaW5lIERFRkFVTFRfVVNFUl9TVEFDS19TSVpFCSgxVUwgPDwgMzEpCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfVVNUQUNLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvcGFnZS5oIGIvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmgKaW5kZXggZGIwMTdmOC4uZmNjMTY1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay9wYWdlLmgKQEAgLTIsNiArMiw4IEBACiAjZGVmaW5lIF9NNjhLX1BBR0VfSAogCiAKKyNpZmRlZiBfX0tFUk5FTF9fCisKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjaWZuZGVmIENPTkZJR19TVU4zCiAjZGVmaW5lIFBBR0VfU0hJRlQJKDEyKQpAQCAtMTUsOCArMTcsNiBAQAogI2VuZGlmCiAjZGVmaW5lIFBBR0VfTUFTSwkofihQQUdFX1NJWkUtMSkpCiAKLSNpZmRlZiBfX0tFUk5FTF9fCi0KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAogI2lmIFBBR0VfU0hJRlQgPCAxMwpAQCAtMTc1LDggKzE3NSw4IEBACiAjZGVmaW5lIFZNX0RBVEFfREVGQVVMVF9GTEFHUwkoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQyB8IFwKIAkJCQkgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRFIHwgVk1fTUFZRVhFQykKIAotI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLQogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BhZ2UuaD4KIAorI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKwogI2VuZGlmIC8qIF9NNjhLX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAppbmRleCA2ZWQxMTUxLi4yMTlkMzU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtMTQsOCArMTQsNiBAQAogCiAjaW5jbHVkZSA8c3BhY2VzLmg+CiAKLSNlbmRpZgotCiAvKgogICogUEFHRV9TSElGVCBkZXRlcm1pbmVzIHRoZSBwYWdlIHNpemUKICAqLwpAQCAtMzQsOCArMzIsNiBAQAogI2RlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQogI2RlZmluZSBQQUdFX01BU0sgICAgICAgKH4oKDEgPDwgUEFHRV9TSElGVCkgLSAxKSkKIAotCi0jaWZkZWYgX19LRVJORUxfXwogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogZXh0ZXJuIHZvaWQgY2xlYXJfcGFnZSh2b2lkICogcGFnZSk7CkBAIC0xNjgsOCArMTY0LDYgQEAKICNkZWZpbmUgVU5DQUNfQUREUihhZGRyKQkoKGFkZHIpIC0gUEFHRV9PRkZTRVQgKyBVTkNBQ19CQVNFKQogI2RlZmluZSBDQUNfQUREUihhZGRyKQkJKChhZGRyKSAtIFVOQ0FDX0JBU0UgKyBQQUdFX09GRlNFVCkKIAotI2VuZGlmIC8qIGRlZmluZWQgKF9fS0VSTkVMX18pICovCi0KICNpZmRlZiBDT05GSUdfTElNSVRFRF9ETUEKICNkZWZpbmUgV0FOVF9QQUdFX1ZJUlRVQUwKICNlbmRpZgpAQCAtMTc3LDQgKzE3MSw2IEBACiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogZGVmaW5lZCAoX19LRVJORUxfXykgKi8KKwogI2VuZGlmIC8qIF9BU01fUEFHRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oIGIvaW5jbHVkZS9hc20tcGFyaXNjL3BhZ2UuaAppbmRleCAwNjk1YmM5Li41N2Q2ZDgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2MvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBhcmlzYy9wYWdlLmgKQEAgLTEsMjIgKzEsMTQgQEAKICNpZm5kZWYgX1BBUklTQ19QQUdFX0gKICNkZWZpbmUgX1BBUklTQ19QQUdFX0gKIAotI2lmICFkZWZpbmVkKF9fS0VSTkVMX18pCi0vKiB0aGlzIGlzIGZvciB1c2Vyc3BhY2UgYXBwbGljYXRpb25zICg0ayBwYWdlIHNpemUpICovCi0jIGRlZmluZSBQQUdFX1NISUZUCTEyCS8qIDRrICovCi0jIGRlZmluZSBQQUdFX1NJWkUJKDFVTCA8PCBQQUdFX1NISUZUKQotIyBkZWZpbmUgUEFHRV9NQVNLCSh+KFBBR0VfU0laRS0xKSkKLSNlbmRpZgotCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzRLQikKLSMgZGVmaW5lIFBBR0VfU0hJRlQJMTIJLyogNGsgKi8KKyMgZGVmaW5lIFBBR0VfU0hJRlQJMTIKICNlbGlmIGRlZmluZWQoQ09ORklHX1BBUklTQ19QQUdFX1NJWkVfMTZLQikKLSMgZGVmaW5lIFBBR0VfU0hJRlQJMTQJLyogMTZrICovCisjIGRlZmluZSBQQUdFX1NISUZUCTE0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19QQVJJU0NfUEFHRV9TSVpFXzY0S0IpCi0jIGRlZmluZSBQQUdFX1NISUZUCTE2CS8qIDY0ayAqLworIyBkZWZpbmUgUEFHRV9TSElGVAkxNgogI2Vsc2UKICMgZXJyb3IgInVua25vd24gZGVmYXVsdCBrZXJuZWwgcGFnZSBzaXplIgogI2VuZGlmCkBAIC0xODgsOSArMTgwLDkgQEAKICNkZWZpbmUgVk1fREFUQV9ERUZBVUxUX0ZMQUdTCShWTV9SRUFEIHwgVk1fV1JJVEUgfCBWTV9FWEVDIHwgXAogCQkJCSBWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUgfCBWTV9NQVlFWEVDKQogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLwotCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFnZS5oPgogCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYgLyogX1BBUklTQ19QQUdFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvS2J1aWxkIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9LYnVpbGQKaW5kZXggYWM2MWQ3ZS4uOTgyNzg0OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9LYnVpbGQKQEAgLTEsMTAgKzEsNDEgQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCiAKLXVuaWZkZWYteSArPSBhLm91dC5oIGFzbS1jb21wYXQuaCBib290eC5oIGJ5dGVvcmRlci5oIGNwdXRhYmxlLmggZWxmLmgJXAotCW52cmFtLmggcGFyYW0uaCBwb3NpeF90eXBlcy5oIHB0cmFjZS5oIHNlY2NvbXAuaCBzaWduYWwuaAlcCi0JdGVybWlvcy5oIHR5cGVzLmggdW5pc3RkLmgKK2hlYWRlci15ICs9IGF1eHZlYy5oCitoZWFkZXIteSArPSBpb2N0bHMuaAoraGVhZGVyLXkgKz0gbW1hbi5oCitoZWFkZXIteSArPSBzZW1idWYuaAoraGVhZGVyLXkgKz0gc2lnaW5mby5oCitoZWFkZXIteSArPSBzdGF0LmgKK2hlYWRlci15ICs9IGVycm5vLmgKK2hlYWRlci15ICs9IGlwY2J1Zi5oCitoZWFkZXIteSArPSBtc2didWYuaAoraGVhZGVyLXkgKz0gc2htYnVmLmgKK2hlYWRlci15ICs9IHNvY2tldC5oCitoZWFkZXIteSArPSB0ZXJtYml0cy5oCitoZWFkZXIteSArPSBmY250bC5oCitoZWFkZXIteSArPSBpcGMuaAoraGVhZGVyLXkgKz0gcG9sbC5oCitoZWFkZXIteSArPSBzaG1wYXJhbS5oCitoZWFkZXIteSArPSBzb2NraW9zLmgKK2hlYWRlci15ICs9IHVjb250ZXh0LmgKK2hlYWRlci15ICs9IGlvY3RsLmgKK2hlYWRlci15ICs9IGxpbmthZ2UuaAoraGVhZGVyLXkgKz0gcmVzb3VyY2UuaAoraGVhZGVyLXkgKz0gc2lnY29udGV4dC5oCitoZWFkZXIteSArPSBzdGF0ZnMuaAogCi1oZWFkZXIteSArPSBhdXh2ZWMuaCBpb2N0bHMuaCBtbWFuLmggc2VtYnVmLmggc2lnaW5mby5oIHN0YXQuaCBlcnJuby5oCVwKLQlpcGNidWYuaCBtc2didWYuaCBzaG1idWYuaCBzb2NrZXQuaCB0ZXJtYml0cy5oIGZjbnRsLmggaXBjLmgJXAotCXBvbGwuaCBzaG1wYXJhbS5oIHNvY2tpb3MuaCB1Y29udGV4dC5oIGlvY3RsLmggbGlua2FnZS5oCVwKLQlyZXNvdXJjZS5oIHNpZ2NvbnRleHQuaCBzdGF0ZnMuaAordW5pZmRlZi15ICs9IGEub3V0LmgKK3VuaWZkZWYteSArPSBhc20tY29tcGF0LmgKK3VuaWZkZWYteSArPSBib290eC5oCit1bmlmZGVmLXkgKz0gYnl0ZW9yZGVyLmgKK3VuaWZkZWYteSArPSBjcHV0YWJsZS5oCit1bmlmZGVmLXkgKz0gZWxmLmgKK3VuaWZkZWYteSArPSBudnJhbS5oCit1bmlmZGVmLXkgKz0gcGFyYW0uaAordW5pZmRlZi15ICs9IHBvc2l4X3R5cGVzLmgKK3VuaWZkZWYteSArPSBwdHJhY2UuaAordW5pZmRlZi15ICs9IHNlY2NvbXAuaAordW5pZmRlZi15ICs9IHNpZ25hbC5oCit1bmlmZGVmLXkgKz0gdGVybWlvcy5oCit1bmlmZGVmLXkgKz0gdHlwZXMuaAordW5pZmRlZi15ICs9IHVuaXN0ZC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JhY2tsaWdodC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9iYWNrbGlnaHQuaAppbmRleCA1OGQ0YjZmLi44Y2Y1YzM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2JhY2tsaWdodC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvYmFja2xpZ2h0LmgKQEAgLTMwLDggKzMwLDEyIEBACiAJcG1hY19iYWNrbGlnaHRfa2V5KDEpOwogfQogCitleHRlcm4gdm9pZCBwbWFjX2JhY2tsaWdodF9zZXRfbGVnYWN5X2JyaWdodG5lc3NfcG11KGludCBicmlnaHRuZXNzKTsKIGV4dGVybiBpbnQgcG1hY19iYWNrbGlnaHRfc2V0X2xlZ2FjeV9icmlnaHRuZXNzKGludCBicmlnaHRuZXNzKTsKIGV4dGVybiBpbnQgcG1hY19iYWNrbGlnaHRfZ2V0X2xlZ2FjeV9icmlnaHRuZXNzKHZvaWQpOwogCitleHRlcm4gdm9pZCBwbWFjX2JhY2tsaWdodF9lbmFibGUodm9pZCk7CitleHRlcm4gdm9pZCBwbWFjX2JhY2tsaWdodF9kaXNhYmxlKHZvaWQpOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2NwdXRhYmxlLmgKaW5kZXggMWJhM2M5OS4uMTI3MDdhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9jcHV0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvY3B1dGFibGUuaApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBQUENfRkVBVFVSRV9TTVQJCQkweDAwMDA0MDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX0lDQUNIRV9TTk9PUAkweDAwMDAyMDAwCiAjZGVmaW5lIFBQQ19GRUFUVVJFX0FSQ0hfMl8wNQkJMHgwMDAwMTAwMAorI2RlZmluZSBQUENfRkVBVFVSRV9QQTZUCQkweDAwMDAwODAwCiAKICNkZWZpbmUgUFBDX0ZFQVRVUkVfVFJVRV9MRQkJMHgwMDAwMDAwMgogI2RlZmluZSBQUENfRkVBVFVSRV9QUENfTEUJCTB4MDAwMDAwMDEKQEAgLTM2LDYgKzM3LDcgQEAKIHN0cnVjdCBjcHVfc3BlYzsKIAogdHlwZWRlZgl2b2lkICgqY3B1X3NldHVwX3QpKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwordHlwZWRlZgl2b2lkICgqY3B1X3Jlc3RvcmVfdCkodm9pZCk7CiAKIGVudW0gcG93ZXJwY19vcHJvZmlsZV90eXBlIHsKIAlQUENfT1BST0ZJTEVfSU5WQUxJRCA9IDAsCkBAIC02NSw2ICs2Nyw4IEBACiAJICogQkhULCBTUEQsIGV0Yy4uLiBmcm9tIGhlYWQuUyBiZWZvcmUgYnJhbmNoaW5nIHRvIGlkZW50aWZ5X21hY2hpbmUKIAkgKi8KIAljcHVfc2V0dXBfdAljcHVfc2V0dXA7CisJLyogVXNlZCB0byByZXN0b3JlIGNwdSBzZXR1cCBvbiBzZWNvbmRhcnkgcHJvY2Vzc29ycyBhbmQgYXQgcmVzdW1lICovCisJY3B1X3Jlc3RvcmVfdAljcHVfcmVzdG9yZTsKIAogCS8qIFVzZWQgYnkgb3Byb2ZpbGUgdXNlcnNwYWNlIHRvIHNlbGVjdCB0aGUgcmlnaHQgY291bnRlcnMgKi8KIAljaGFyCQkqb3Byb2ZpbGVfY3B1X3R5cGU7CkBAIC0xNDUsNyArMTQ5LDcgQEAKIAogI2RlZmluZSBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjJfQkFTRSAoQ1BVX0ZUUl9TTEIgfCBcCiAJCQkJCUNQVV9GVFJfVExCSUVMIHwgQ1BVX0ZUUl9OT0VYRUNVVEUgfCBcCi0JCQkJCUNQVV9GVFJfTk9EU0lTUkFMSUdOIHwgQ1BVX0ZUUl9DVFJMKQorCQkJCQlDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogaVNlcmllcyBkb2Vzbid0IHN1cHBvcnQgbGFyZ2UgcGFnZXMgKi8KICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKQEAgLTMxMCwyNCArMzE0LDI5IEBACiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfSUFCUiB8IFwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfQ1RSTCkKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI0CShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCi0JICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfTU1DUkEpCisJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKKwkgICAgQ1BVX0ZUUl9NTUNSQSkKICNkZWZpbmUgQ1BVX0ZUUlNfUFBDOTcwCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCi0JICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKKwkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfQ0FOX05BUCB8IENQVV9GVFJfTU1DUkEpCiAjZGVmaW5lIENQVV9GVFJTX1BPV0VSNQkoQ1BVX0ZUUl9TUExJVF9JRF9DQUNIRSB8IENQVV9GVFJfVVNFX1RCIHwgXAotCSAgICBDUFVfRlRSX0hQVEVfVEFCTEUgfCBDUFVfRlRSX1BQQ0FTX0FSQ0hfVjIgfCBcCisJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IENQVV9GVFJfQ1RSTCB8IFwKIAkgICAgQ1BVX0ZUUl9NTUNSQSB8IENQVV9GVFJfU01UIHwgXAogCSAgICBDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSB8IENQVV9GVFJfTE9DS0xFU1NfVExCSUUgfCBcCiAJICAgIENQVV9GVFJfUFVSUikKICNkZWZpbmUgQ1BVX0ZUUlNfUE9XRVI2IChDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCi0JICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKKwkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX01NQ1JBIHwgQ1BVX0ZUUl9TTVQgfCBcCiAJICAgIENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFIHwgQ1BVX0ZUUl9MT0NLTEVTU19UTEJJRSB8IFwKIAkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFIHwgQ1BVX0ZUUl9SRUFMX0xFKQogI2RlZmluZSBDUFVfRlRSU19DRUxMCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCi0JICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMiB8IFwKKwkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgQ1BVX0ZUUl9DVFJMIHwgXAogCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfTU1DUkEgfCBDUFVfRlRSX1NNVCB8IFwKLQkgICAgQ1BVX0ZUUl9DVFJMIHwgQ1BVX0ZUUl9QQVVTRV9aRVJPIHwgQ1BVX0ZUUl9DSV9MQVJHRV9QQUdFKQorCSAgICBDUFVfRlRSX1BBVVNFX1pFUk8gfCBDUFVfRlRSX0NJX0xBUkdFX1BBR0UpCisjZGVmaW5lIENQVV9GVFJTX1BBNlQgKENQVV9GVFJfU1BMSVRfSURfQ0FDSEUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKKwkgICAgQ1BVX0ZUUl9IUFRFX1RBQkxFIHwgQ1BVX0ZUUl9QUENBU19BUkNIX1YyIHwgXAorCSAgICBDUFVfRlRSX0FMVElWRUNfQ09NUCB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSB8IFwKKwkgICAgQ1BVX0ZUUl9QVVJSIHwgQ1BVX0ZUUl9SRUFMX0xFKQogI2RlZmluZSBDUFVfRlRSU19DT01QQVRJQkxFCShDUFVfRlRSX1NQTElUX0lEX0NBQ0hFIHwgQ1BVX0ZUUl9VU0VfVEIgfCBcCiAJICAgIENQVV9GVFJfSFBURV9UQUJMRSB8IENQVV9GVFJfUFBDQVNfQVJDSF9WMikKICNlbmRpZgpAQCAtMzM2LDcgKzM0NSw3IEBACiAjZGVmaW5lIENQVV9GVFJTX1BPU1NJQkxFCVwKIAkgICAgKENQVV9GVFJTX1BPV0VSMyB8IENQVV9GVFJTX1JTNjQgfCBDUFVfRlRSU19QT1dFUjQgfAlcCiAJICAgIENQVV9GVFJTX1BQQzk3MCB8IENQVV9GVFJTX1BPV0VSNSB8IENQVV9GVFJTX1BPV0VSNiB8CVwKLQkgICAgQ1BVX0ZUUlNfQ0VMTCB8IENQVV9GVFJfQ0lfTEFSR0VfUEFHRSkKKwkgICAgQ1BVX0ZUUlNfQ0VMTCB8IENQVV9GVFJTX1BBNlQpCiAjZWxzZQogZW51bSB7CiAJQ1BVX0ZUUlNfUE9TU0lCTEUgPQpAQCAtMzc1LDcgKzM4NCw3IEBACiAjZGVmaW5lIENQVV9GVFJTX0FMV0FZUwkJXAogCSAgICAoQ1BVX0ZUUlNfUE9XRVIzICYgQ1BVX0ZUUlNfUlM2NCAmIENQVV9GVFJTX1BPV0VSNCAmCVwKIAkgICAgQ1BVX0ZUUlNfUFBDOTcwICYgQ1BVX0ZUUlNfUE9XRVI1ICYgQ1BVX0ZUUlNfUE9XRVI2ICYJXAotCSAgICBDUFVfRlRSU19DRUxMICYgQ1BVX0ZUUlNfUE9TU0lCTEUpCisJICAgIENQVV9GVFJTX0NFTEwgJiBDUFVfRlRSU19QQTZUICYgQ1BVX0ZUUlNfUE9TU0lCTEUpCiAjZWxzZQogZW51bSB7CiAJQ1BVX0ZUUlNfQUxXQVlTID0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2VlaC5oCmluZGV4IDRkZjNlODAuLjZhNzg0MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZWVoLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9lZWguaApAQCAtMjA1LDYgKzIwNSw3IEBACiAJbGMgfD0gbGMgPDwgODsKIAlsYyB8PSBsYyA8PCAxNjsKIAorCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luYyIgOiA6IDogIm1lbW9yeSIpOwogCXdoaWxlKG4gJiYgIUVFSF9DSEVDS19BTElHTihwLCA0KSkgewogCQkqKCh2b2xhdGlsZSB1OCAqKXApID0gYzsKIAkJcCsrOwpAQCAtMjI5LDYgKzIzMCw3IEBACiAJdm9pZCAqZGVzdHNhdmUgPSBkZXN0OwogCXVuc2lnbmVkIGxvbmcgbnNhdmUgPSBuOwogCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7CiAJd2hpbGUobiAmJiAoIUVFSF9DSEVDS19BTElHTih2c3JjLCA0KSB8fCAhRUVIX0NIRUNLX0FMSUdOKGRlc3QsIDQpKSkgewogCQkqKCh1OCAqKWRlc3QpID0gKigodm9sYXRpbGUgdTggKil2c3JjKTsKIAkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJlaWVpbyIgOiA6IDogIm1lbW9yeSIpOwpAQCAtMjY2LDYgKzI2OCw3IEBACiB7CiAJdm9pZCAqdmRlc3QgPSAodm9pZCBfX2ZvcmNlICopIGRlc3Q7CiAKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN5bmMiIDogOiA6ICJtZW1vcnkiKTsKIAl3aGlsZShuICYmICghRUVIX0NIRUNLX0FMSUdOKHZkZXN0LCA0KSB8fCAhRUVIX0NIRUNLX0FMSUdOKHNyYywgNCkpKSB7CiAJCSooKHZvbGF0aWxlIHU4ICopdmRlc3QpID0gKigodTggKilzcmMpOwogCQlzcmMrKzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvZnV0ZXguaAppbmRleCBmMWIzYzAwLi45MzY0MjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2Z1dGV4LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9mdXRleC5oCkBAIC04NCw3ICs4NCwzMyBAQAogc3RhdGljIGlubGluZSBpbnQKIGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQogewotCXJldHVybiAtRU5PU1lTOworCWludCBwcmV2OworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisgICAgICAgIExXU1lOQ19PTl9TTVAKKyIxOiAgICAgbHdhcnggICAlMCwwLCUyICAgICAgICAgIyBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pY1xuXAorICAgICAgICBjbXB3ICAgIDAsJTAsJTNcblwKKyAgICAgICAgYm5lLSAgICAzZlxuIgorICAgICAgICBQUEM0MDVfRVJSNzcoMCwlMikKKyIyOiAgICAgc3R3Y3guICAlNCwwLCUyXG5cCisgICAgICAgIGJuZS0gICAgMWJcbiIKKyAgICAgICAgSVNZTkNfT05fU01QCisiMzoJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuXAorNDoJbGkJJTAsJTVcblwKKwliCTNiXG5cCisJLnByZXZpb3VzXG5cCisJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXAorCS5hbGlnbiAzXG5cCisJIiBQUENfTE9ORyAiMWIsNGIsMmIsNGJcblwKKwkucHJldmlvdXMiIFwKKyAgICAgICAgOiAiPSZyIiAocHJldiksICIrbSIgKCp1YWRkcikKKyAgICAgICAgOiAiciIgKHVhZGRyKSwgInIiIChvbGR2YWwpLCAiciIgKG5ld3ZhbCksICJpIiAoLUVGQVVMVCkKKyAgICAgICAgOiAiY2MiLCAibWVtb3J5Iik7CisKKyAgICAgICAgcmV0dXJuIHByZXY7CiB9CiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9odmNhbGwuaAppbmRleCAwZDNjNGU4Li4yNTdkMWNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2h2Y2FsbC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaHZjYWxsLmgKQEAgLTE2NCw5ICsxNjQsMTUgQEAKICNkZWZpbmUgSF9WSU9fU0lHTkFMCQkweDEwNAogI2RlZmluZSBIX1NFTkRfQ1JRCQkweDEwOAogI2RlZmluZSBIX0NPUFlfUkRNQQkJMHgxMTAKKyNkZWZpbmUgSF9SRUdJU1RFUl9MT0dJQ0FMX0xBTgkweDExNAorI2RlZmluZSBIX0ZSRUVfTE9HSUNBTF9MQU4JMHgxMTgKKyNkZWZpbmUgSF9BRERfTE9HSUNBTF9MQU5fQlVGRkVSIDB4MTFDCisjZGVmaW5lIEhfU0VORF9MT0dJQ0FMX0xBTgkweDEyMAorI2RlZmluZSBIX01VTFRJQ0FTVF9DVFJMCTB4MTMwCiAjZGVmaW5lIEhfU0VUX1hEQUJSCQkweDEzNAogI2RlZmluZSBIX1NUVUZGX1RDRQkJMHgxMzgKICNkZWZpbmUgSF9QVVRfVENFX0lORElSRUNUCTB4MTNDCisjZGVmaW5lIEhfQ0hBTkdFX0xPR0lDQUxfTEFOX01BQyAweDE0QwogI2RlZmluZSBIX1ZURVJNX1BBUlRORVJfSU5GTwkweDE1MAogI2RlZmluZSBIX1JFR0lTVEVSX1ZURVJNCTB4MTU0CiAjZGVmaW5lIEhfRlJFRV9WVEVSTQkJMHgxNTgKQEAgLTE5NiwxMDIgKzIwMiw1OSBAQAogI2RlZmluZSBIX0dFVF9IQ0FfSU5GTyAgICAgICAgICAweDFCOAogI2RlZmluZSBIX0dFVF9QRVJGX0NPVU5UICAgICAgICAweDFCQwogI2RlZmluZSBIX01BTkFHRV9UUkFDRSAgICAgICAgICAweDFDMAorI2RlZmluZSBIX0ZSRUVfTE9HSUNBTF9MQU5fQlVGRkVSIDB4MUQ0CiAjZGVmaW5lIEhfUVVFUllfSU5UX1NUQVRFICAgICAgIDB4MUU0CiAjZGVmaW5lIEhfUE9MTF9QRU5ESU5HCQkweDFEOAogI2RlZmluZSBIX0pPSU4JCQkweDI5OAogI2RlZmluZSBIX1ZBU0lfU1RBVEUgICAgICAgICAgICAweDJBNAogI2RlZmluZSBIX0VOQUJMRV9DUlEJCTB4MkIwCisjZGVmaW5lIE1BWF9IQ0FMTF9PUENPREUJSF9FTkFCTEVfQ1JRCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKLS8qIHBscGFyX2hjYWxsKCkgLS0gR2VuZXJpYyBjYWxsIGludGVyZmFjZSB1c2luZyBhYm92ZSBvcGNvZGVzCisvKioKKyAqIHBscGFyX2hjYWxsX25vcmV0czogLSBNYWtlIGEgcHNlcmllcyBoeXBlcnZpc29yIGNhbGwgd2l0aCBubyByZXR1cm4gYXJndW1lbnRzCisgKiBAb3Bjb2RlOiBUaGUgaHlwZXJ2aXNvciBjYWxsIHRvIG1ha2UuCiAgKgotICogVGhlIGFjdHVhbCBjYWxsIGludGVyZmFjZSBpcyBhIGh5cGVydmlzb3IgY2FsbCBpbnN0cnVjdGlvbiB3aXRoCi0gKiB0aGUgb3Bjb2RlIGluIFIzIGFuZCBpbnB1dCBhcmdzIGluIFI0LVI3LgotICogU3RhdHVzIGlzIHJldHVybmVkIGluIFIzIHdpdGggdmFyaWFibGUgb3V0cHV0IHZhbHVlcyBpbiBSNC1SMTEuCi0gKiBPbmx5IEhfUFRFX1JFQUQgd2l0aCBIX1JFQURfNCB1c2VzIFI2LVIxMSBzbyB3ZSBpZ25vcmUgaXQgZm9yIG5vdwotICogYW5kIHJldHVybiBvbmx5IHR3byBvdXQgYXJncyB3aGljaCBNVVNUIEFMV0FZUyBCRSBQUk9WSURFRC4KLSAqLwotbG9uZyBwbHBhcl9oY2FsbCh1bnNpZ25lZCBsb25nIG9wY29kZSwKLQkJIHVuc2lnbmVkIGxvbmcgYXJnMSwKLQkJIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJIHVuc2lnbmVkIGxvbmcgYXJnMywKLQkJIHVuc2lnbmVkIGxvbmcgYXJnNCwKLQkJIHVuc2lnbmVkIGxvbmcgKm91dDEsCi0JCSB1bnNpZ25lZCBsb25nICpvdXQyLAotCQkgdW5zaWduZWQgbG9uZyAqb3V0Myk7Ci0KLS8qIFNhbWUgYXMgcGxwYXJfaGNhbGwgYnV0IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgcmV0dXJuIG5vIHZhbHVlcwotICogb3RoZXIgdGhhbiBzdGF0dXMuICBTbGlnaHRseSBtb3JlIGVmZmljaWVudC4KKyAqIFRoaXMgY2FsbCBzdXBwb3J0cyB1cCB0byA3IGFyZ3VtZW50cyBhbmQgb25seSByZXR1cm5zIHRoZSBzdGF0dXMgb2YKKyAqIHRoZSBoY2FsbC4gVXNlIHRoaXMgdmVyc2lvbiB3aGVyZSBwb3NzaWJsZSwgaXRzIHNsaWdodGx5IGZhc3RlciB0aGFuCisgKiB0aGUgb3RoZXIgcGxwYXJfaGNhbGxzLgogICovCiBsb25nIHBscGFyX2hjYWxsX25vcmV0cyh1bnNpZ25lZCBsb25nIG9wY29kZSwgLi4uKTsKIAotLyoKLSAqIFNwZWNpYWwgaGNhbGwgaW50ZXJmYWNlIGZvciBpYm12ZXRoIHN1cHBvcnQuCi0gKiBUYWtlcyA4IGlucHV0IHBhcm1zLiBSZXR1cm5zIGEgcmMgYW5kIHN0b3JlcyB0aGUKLSAqIFI0IHJldHVybiB2YWx1ZSBpbiAqb3V0MS4KLSAqLwotbG9uZyBwbHBhcl9oY2FsbF84YXJnXzJyZXQodW5zaWduZWQgbG9uZyBvcGNvZGUsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzEsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzMsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzQsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzUsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzYsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzcsCi0JCQkgICB1bnNpZ25lZCBsb25nIGFyZzgsCi0JCQkgICB1bnNpZ25lZCBsb25nICpvdXQxKTsKLQotLyogcGxwYXJfaGNhbGxfNG91dCgpCisvKioKKyAqIHBscGFyX2hjYWxsOiAtIE1ha2UgYSBwc2VyaWVzIGh5cGVydmlzb3IgY2FsbAorICogQG9wY29kZTogVGhlIGh5cGVydmlzb3IgY2FsbCB0byBtYWtlLgorICogQHJldGJ1ZjogQnVmZmVyIHRvIHN0b3JlIHVwIHRvIDQgcmV0dXJuIGFyZ3VtZW50cyBpbi4KICAqCi0gKiBzYW1lIGFzIHBscGFyX2hjYWxsIGV4Y2VwdCB3aXRoIDQgb3V0cHV0IGFyZ3VtZW50cy4KKyAqIFRoaXMgY2FsbCBzdXBwb3J0cyB1cCB0byA2IGFyZ3VtZW50cyBhbmQgNCByZXR1cm4gYXJndW1lbnRzLiBVc2UKKyAqIFBMUEFSX0hDQUxMX0JVRlNJWkUgdG8gc2l6ZSB0aGUgcmV0dXJuIGFyZ3VtZW50IGJ1ZmZlci4KICAqCisgKiBVc2VkIGZvciBhbGwgYnV0IHRoZSBjcmF6aWVzdCBvZiBwaHlwIGludGVyZmFjZXMgKHNlZSBwbHBhcl9oY2FsbDkpCiAgKi8KLWxvbmcgcGxwYXJfaGNhbGxfNG91dCh1bnNpZ25lZCBsb25nIG9wY29kZSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLAotCQkgICAgICB1bnNpZ25lZCBsb25nIGFyZzIsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnMywKLQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmc0LAotCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQxLAotCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQyLAotCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQzLAotCQkgICAgICB1bnNpZ25lZCBsb25nICpvdXQ0KTsKKyNkZWZpbmUgUExQQVJfSENBTExfQlVGU0laRSA0Citsb25nIHBscGFyX2hjYWxsKHVuc2lnbmVkIGxvbmcgb3Bjb2RlLCB1bnNpZ25lZCBsb25nICpyZXRidWYsIC4uLik7CiAKLWxvbmcgcGxwYXJfaGNhbGxfN2FyZ183cmV0KHVuc2lnbmVkIGxvbmcgb3Bjb2RlLAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmcxLAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmcyLAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmczLAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmc0LAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmc1LAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmc2LAotCQkJICAgdW5zaWduZWQgbG9uZyBhcmc3LAotCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDIsCi0JCQkgICB1bnNpZ25lZCBsb25nICpvdXQzLAotCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDUsCi0JCQkgICB1bnNpZ25lZCBsb25nICpvdXQ2LAotCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0Nyk7CisvKioKKyAqIHBscGFyX2hjYWxsOTogLSBNYWtlIGEgcHNlcmllcyBoeXBlcnZpc29yIGNhbGwgd2l0aCB1cCB0byA5IHJldHVybiBhcmd1bWVudHMKKyAqIEBvcGNvZGU6IFRoZSBoeXBlcnZpc29yIGNhbGwgdG8gbWFrZS4KKyAqIEByZXRidWY6IEJ1ZmZlciB0byBzdG9yZSB1cCB0byA5IHJldHVybiBhcmd1bWVudHMgaW4uCisgKgorICogVGhpcyBjYWxsIHN1cHBvcnRzIHVwIHRvIDkgYXJndW1lbnRzIGFuZCA5IHJldHVybiBhcmd1bWVudHMuIFVzZQorICogUExQQVJfSENBTEw5X0JVRlNJWkUgdG8gc2l6ZSB0aGUgcmV0dXJuIGFyZ3VtZW50IGJ1ZmZlci4KKyAqLworI2RlZmluZSBQTFBBUl9IQ0FMTDlfQlVGU0laRSA5Citsb25nIHBscGFyX2hjYWxsOSh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyAqcmV0YnVmLCAuLi4pOwogCi1sb25nIHBscGFyX2hjYWxsXzlhcmdfOXJldCh1bnNpZ25lZCBsb25nIG9wY29kZSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnNywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnOCwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnOSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDEsCi0JCQkgICB1bnNpZ25lZCBsb25nICpvdXQyLAotCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0MywKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDQsCi0JCQkgICB1bnNpZ25lZCBsb25nICpvdXQ1LAotCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0NiwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgKm91dDcsCi0JCQkgICB1bnNpZ25lZCBsb25nICpvdXQ4LAotCQkJICAgdW5zaWduZWQgbG9uZyAqb3V0OSk7CisvKiBGb3IgaGNhbGwgaW5zdHJ1bWVudGF0aW9uLiAgT25lIHN0cnVjdHVyZSBwZXItaGNhbGwsIHBlci1DUFUgKi8KK3N0cnVjdCBoY2FsbF9zdGF0cyB7CisJdW5zaWduZWQgbG9uZwludW1fY2FsbHM7CS8qIG51bWJlciBvZiBjYWxscyAob24gdGhpcyBDUFUpICovCisJdW5zaWduZWQgbG9uZwl0Yl90b3RhbDsJLyogdG90YWwgd2FsbCB0aW1lIChtZnRiKSBvZiBjYWxscy4gKi8KKwl1bnNpZ25lZCBsb25nCXB1cnJfdG90YWw7CS8qIHRvdGFsIGNwdSB0aW1lIChQVVJSKSBvZiBjYWxscy4gKi8KK307Cit2b2lkIHVwZGF0ZV9oY2FsbF9zdGF0cyh1bnNpZ25lZCBsb25nIG9wY29kZSwgdW5zaWduZWQgbG9uZyB0Yl9kZWx0YSwKKwkJCXVuc2lnbmVkIGxvbmcgcHVycl9kZWx0YSk7CisjZGVmaW5lIEhDQUxMX1NUQVRfQVJSQVlfU0laRQkoKE1BWF9IQ0FMTF9PUENPREUgPj4gMikgKyAxKQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pYm1lYnVzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2libWVidXMuaAppbmRleCA3YTQyNzIzLi43YWIxOTVhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pYm1lYnVzLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pYm1lYnVzLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgaWJtZWJ1c19idXNfdHlwZTsKIAogc3RydWN0IGlibWVidXNfZGV2IHsJCi0JY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBvZl9kZXZpY2Ugb2ZkZXY7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaAppbmRleCBiMDliNDJhLi5jODM5MGY5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pZGUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lkZS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vbXBjOHh4Lmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2lmbmRlZiBNQVhfSFdJRlMKICNpZmRlZiBfX3Bvd2VycGM2NF9fCkBAIC0yMSwxNSArMjIsMTQgQEAKICNlbmRpZgogI2VuZGlmCiAKKyNkZWZpbmUgX19pZGVfbW1faW5zdyhwLCBhLCBjKQlfaW5zd19ucygodm9sYXRpbGUgdTE2IF9faW9tZW0gKikocCksIChhKSwgKGMpKQorI2RlZmluZSBfX2lkZV9tbV9pbnNsKHAsIGEsIGMpCV9pbnNsX25zKCh2b2xhdGlsZSB1MzIgX19pb21lbSAqKShwKSwgKGEpLCAoYykpCisjZGVmaW5lIF9faWRlX21tX291dHN3KHAsIGEsIGMpCV9vdXRzd19ucygodm9sYXRpbGUgdTE2IF9faW9tZW0gKikocCksIChhKSwgKGMpKQorI2RlZmluZSBfX2lkZV9tbV9vdXRzbChwLCBhLCBjKQlfb3V0c2xfbnMoKHZvbGF0aWxlIHUzMiBfX2lvbWVtICopKHApLCAoYSksIChjKSkKKwogI2lmbmRlZiAgX19wb3dlcnBjNjRfXwogI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLWV4dGVybiB2b2lkIF9faWRlX21tX2luc3codm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpOwotZXh0ZXJuIHZvaWQgX19pZGVfbW1fb3V0c3codm9pZCBfX2lvbWVtICpwb3J0LCB2b2lkICphZGRyLCB1MzIgY291bnQpOwotZXh0ZXJuIHZvaWQgX19pZGVfbW1faW5zbCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7Ci1leHRlcm4gdm9pZCBfX2lkZV9tbV9vdXRzbCh2b2lkIF9faW9tZW0gKnBvcnQsIHZvaWQgKmFkZHIsIHUzMiBjb3VudCk7CiAKIHN0cnVjdCBpZGVfbWFjaGRlcF9jYWxscyB7CiAgICAgICAgIGludCAgICAgICAgICgqZGVmYXVsdF9pcnEpKHVuc2lnbmVkIGxvbmcgYmFzZSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmgKaW5kZXggYTk0OTZmMy4uNDZiYWUxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaApAQCAtMTksMjAgKzE5LDEyIEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KLSNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMgCi0jaW5jbHVkZSA8YXNtL2lzZXJpZXMvaXNlcmllc19pby5oPgotI2VuZGlmICAKKyNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9zeW5jaC5oPgogI2luY2x1ZGUgPGFzbS9kZWxheS5oPgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9tYXAuaD4KIAotI2RlZmluZSBfX2lkZV9tbV9pbnN3KHAsIGEsIGMpIF9pbnN3X25zKCh2b2xhdGlsZSB1MTYgX19pb21lbSAqKShwKSwgKGEpLCAoYykpCi0jZGVmaW5lIF9faWRlX21tX2luc2wocCwgYSwgYykgX2luc2xfbnMoKHZvbGF0aWxlIHUzMiBfX2lvbWVtICopKHApLCAoYSksIChjKSkKLSNkZWZpbmUgX19pZGVfbW1fb3V0c3cocCwgYSwgYykgX291dHN3X25zKCh2b2xhdGlsZSB1MTYgX19pb21lbSAqKShwKSwgKGEpLCAoYykpCi0jZGVmaW5lIF9faWRlX21tX291dHNsKHAsIGEsIGMpIF9vdXRzbF9ucygodm9sYXRpbGUgdTMyIF9faW9tZW0gKikocCksIChhKSwgKGMpKQotCi0KICNkZWZpbmUgU0lPX0NPTkZJR19SQQkweDM5OAogI2RlZmluZSBTSU9fQ09ORklHX1JECTB4Mzk5CiAKQEAgLTQyLDM5ICszNCw1MyBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGNpX2lvX2Jhc2U7CiAKICNpZmRlZiBDT05GSUdfUFBDX0lTRVJJRVMKLS8qIF9fcmF3XyogYWNjZXNzb3JzIGFyZW4ndCBzdXBwb3J0ZWQgb24gaVNlcmllcyAqLwotI2RlZmluZSBfX3Jhd19yZWFkYihhZGRyKQl7IEJVRygpOyAwOyB9Ci0jZGVmaW5lIF9fcmF3X3JlYWR3KGFkZHIpICAgICAgIHsgQlVHKCk7IDA7IH0KLSNkZWZpbmUgX19yYXdfcmVhZGwoYWRkcikgICAgICAgeyBCVUcoKTsgMDsgfQotI2RlZmluZSBfX3Jhd19yZWFkcShhZGRyKSAgICAgICB7IEJVRygpOyAwOyB9Ci0jZGVmaW5lIF9fcmF3X3dyaXRlYih2LCBhZGRyKSAgIHsgQlVHKCk7IDA7IH0KLSNkZWZpbmUgX19yYXdfd3JpdGV3KHYsIGFkZHIpICAgeyBCVUcoKTsgMDsgfQotI2RlZmluZSBfX3Jhd193cml0ZWwodiwgYWRkcikgICB7IEJVRygpOyAwOyB9Ci0jZGVmaW5lIF9fcmF3X3dyaXRlcSh2LCBhZGRyKSAgIHsgQlVHKCk7IDA7IH0KLSNkZWZpbmUgcmVhZGIoYWRkcikJCWlTZXJpZXNfUmVhZF9CeXRlKGFkZHIpCi0jZGVmaW5lIHJlYWR3KGFkZHIpCQlpU2VyaWVzX1JlYWRfV29yZChhZGRyKQotI2RlZmluZSByZWFkbChhZGRyKQkJaVNlcmllc19SZWFkX0xvbmcoYWRkcikKLSNkZWZpbmUgd3JpdGViKGRhdGEsIGFkZHIpCWlTZXJpZXNfV3JpdGVfQnl0ZSgoZGF0YSksKGFkZHIpKQotI2RlZmluZSB3cml0ZXcoZGF0YSwgYWRkcikJaVNlcmllc19Xcml0ZV9Xb3JkKChkYXRhKSwoYWRkcikpCi0jZGVmaW5lIHdyaXRlbChkYXRhLCBhZGRyKQlpU2VyaWVzX1dyaXRlX0xvbmcoKGRhdGEpLChhZGRyKSkKLSNkZWZpbmUgbWVtc2V0X2lvKGEsYixjKQlpU2VyaWVzX21lbXNldF9pbygoYSksKGIpLChjKSkKLSNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLGIsYykJaVNlcmllc19tZW1jcHlfZnJvbWlvKChhKSwgKGIpLCAoYykpCi0jZGVmaW5lIG1lbWNweV90b2lvKGEsYixjKQlpU2VyaWVzX21lbWNweV90b2lvKChhKSwgKGIpLCAoYykpCiAKLSNkZWZpbmUgaW5iKGFkZHIpCQlyZWFkYigoKHZvaWQgX19pb21lbSAqKShsb25nKShhZGRyKSkpCi0jZGVmaW5lIGludyhhZGRyKQkJcmVhZHcoKCh2b2lkIF9faW9tZW0gKikobG9uZykoYWRkcikpKQotI2RlZmluZSBpbmwoYWRkcikJCXJlYWRsKCgodm9pZCBfX2lvbWVtICopKGxvbmcpKGFkZHIpKSkKLSNkZWZpbmUgb3V0YihkYXRhLGFkZHIpCQl3cml0ZWIoZGF0YSwoKHZvaWQgX19pb21lbSAqKShsb25nKShhZGRyKSkpCi0jZGVmaW5lIG91dHcoZGF0YSxhZGRyKQkJd3JpdGV3KGRhdGEsKCh2b2lkIF9faW9tZW0gKikobG9uZykoYWRkcikpKQotI2RlZmluZSBvdXRsKGRhdGEsYWRkcikJCXdyaXRlbChkYXRhLCgodm9pZCBfX2lvbWVtICopKGxvbmcpKGFkZHIpKSkKLS8qCi0gKiBUaGUgKl9ucyB2ZXJzaW9ucyBiZWxvdyBkb24ndCBkbyBieXRlLXN3YXBwaW5nLgotICogTmVpdGhlciBkbyB0aGUgc3RhbmRhcmQgdmVyc2lvbnMgbm93LCB0aGVzZSBhcmUganVzdCBoZXJlCi0gKiBmb3Igb2xkZXIgY29kZS4KLSAqLwotI2RlZmluZSBpbnN3X25zKHBvcnQsIGJ1ZiwgbnMpCV9pbnN3X25zKCh1MTYgX19pb21lbSAqKSgocG9ydCkrcGNpX2lvX2Jhc2UpLCAoYnVmKSwgKG5zKSkKLSNkZWZpbmUgaW5zbF9ucyhwb3J0LCBidWYsIG5sKQlfaW5zbF9ucygodTMyIF9faW9tZW0gKikoKHBvcnQpK3BjaV9pb19iYXNlKSwgKGJ1ZiksIChubCkpCi0jZWxzZQorZXh0ZXJuIGludCBpbl84KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZCBvdXRfOCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIsIGludCB2YWwpOworZXh0ZXJuIGludCBpbl9sZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIGludCBpbl9iZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHZvaWQgb3V0X2xlMTYodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkciwgaW50IHZhbCk7CitleHRlcm4gdm9pZCBvdXRfYmUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKTsKK2V4dGVybiB1bnNpZ25lZCBpbl9sZTMyKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGluX2JlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZCBvdXRfbGUzMih2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKTsKK2V4dGVybiB2b2lkIG91dF9iZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIsIGludCB2YWwpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5fbGU2NChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5fYmU2NChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHZvaWQgb3V0X2xlNjQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCk7CitleHRlcm4gdm9pZCBvdXRfYmU2NCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsKTsKKworZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3Jhd19yZWFkdyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGludCBfX3Jhd19yZWFkbChjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgX19yYXdfcmVhZHEoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkIF9fcmF3X3dyaXRlYih1bnNpZ25lZCBjaGFyIHYsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CitleHRlcm4gdm9pZCBfX3Jhd193cml0ZXcodW5zaWduZWQgc2hvcnQgdiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkIF9fcmF3X3dyaXRlbCh1bnNpZ25lZCBpbnQgdiwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKK2V4dGVybiB2b2lkIF9fcmF3X3dyaXRlcSh1bnNpZ25lZCBsb25nIHYsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqYWRkcik7CisKK2V4dGVybiB2b2lkIG1lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmFkZHIsIGludCBjLCB1bnNpZ25lZCBsb25nIG4pOworZXh0ZXJuIHZvaWQgbWVtY3B5X2Zyb21pbyh2b2lkICpkZXN0LCBjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbik7CitleHRlcm4gdm9pZCBtZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbik7CisKKyNlbHNlIC8qIENPTkZJR19QUENfSVNFUklFUyAqLworCisjZGVmaW5lIGluXzgoYWRkcikJCV9faW5fOCgoYWRkcikpCisjZGVmaW5lIG91dF84KGFkZHIsIHZhbCkJX19vdXRfOCgoYWRkciksICh2YWwpKQorI2RlZmluZSBpbl9sZTE2KGFkZHIpCQlfX2luX2xlMTYoKGFkZHIpKQorI2RlZmluZSBpbl9iZTE2KGFkZHIpCQlfX2luX2JlMTYoKGFkZHIpKQorI2RlZmluZSBvdXRfbGUxNihhZGRyLCB2YWwpCV9fb3V0X2xlMTYoKGFkZHIpLCAodmFsKSkKKyNkZWZpbmUgb3V0X2JlMTYoYWRkciwgdmFsKQlfX291dF9iZTE2KChhZGRyKSwgKHZhbCkpCisjZGVmaW5lIGluX2xlMzIoYWRkcikJCV9faW5fbGUzMigoYWRkcikpCisjZGVmaW5lIGluX2JlMzIoYWRkcikJCV9faW5fYmUzMigoYWRkcikpCisjZGVmaW5lIG91dF9sZTMyKGFkZHIsIHZhbCkJX19vdXRfbGUzMigoYWRkciksICh2YWwpKQorI2RlZmluZSBvdXRfYmUzMihhZGRyLCB2YWwpCV9fb3V0X2JlMzIoKGFkZHIpLCAodmFsKSkKKyNkZWZpbmUgaW5fbGU2NChhZGRyKQkJX19pbl9sZTY0KChhZGRyKSkKKyNkZWZpbmUgaW5fYmU2NChhZGRyKQkJX19pbl9iZTY0KChhZGRyKSkKKyNkZWZpbmUgb3V0X2xlNjQoYWRkciwgdmFsKQlfX291dF9sZTY0KChhZGRyKSwgKHZhbCkpCisjZGVmaW5lIG91dF9iZTY0KGFkZHIsIHZhbCkJX19vdXRfYmU2NCgoYWRkciksICh2YWwpKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgX19yYXdfcmVhZGIoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKQogewpAQCAtMTA4LDIzICsxMTQsMTEgQEAKIHsKIAkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19mb3JjZSAqKWFkZHIgPSB2OwogfQotI2RlZmluZSByZWFkYihhZGRyKQkJZWVoX3JlYWRiKGFkZHIpCi0jZGVmaW5lIHJlYWR3KGFkZHIpCQllZWhfcmVhZHcoYWRkcikKLSNkZWZpbmUgcmVhZGwoYWRkcikJCWVlaF9yZWFkbChhZGRyKQotI2RlZmluZSByZWFkcShhZGRyKQkJZWVoX3JlYWRxKGFkZHIpCi0jZGVmaW5lIHdyaXRlYihkYXRhLCBhZGRyKQllZWhfd3JpdGViKChkYXRhKSwgKGFkZHIpKQotI2RlZmluZSB3cml0ZXcoZGF0YSwgYWRkcikJZWVoX3dyaXRldygoZGF0YSksIChhZGRyKSkKLSNkZWZpbmUgd3JpdGVsKGRhdGEsIGFkZHIpCWVlaF93cml0ZWwoKGRhdGEpLCAoYWRkcikpCi0jZGVmaW5lIHdyaXRlcShkYXRhLCBhZGRyKQllZWhfd3JpdGVxKChkYXRhKSwgKGFkZHIpKQogI2RlZmluZSBtZW1zZXRfaW8oYSxiLGMpCWVlaF9tZW1zZXRfaW8oKGEpLChiKSwoYykpCiAjZGVmaW5lIG1lbWNweV9mcm9taW8oYSxiLGMpCWVlaF9tZW1jcHlfZnJvbWlvKChhKSwoYiksKGMpKQogI2RlZmluZSBtZW1jcHlfdG9pbyhhLGIsYykJZWVoX21lbWNweV90b2lvKChhKSwoYiksKGMpKQotI2RlZmluZSBpbmIocG9ydCkJCWVlaF9pbmIoKHVuc2lnbmVkIGxvbmcpcG9ydCkKLSNkZWZpbmUgb3V0Yih2YWwsIHBvcnQpCQllZWhfb3V0Yih2YWwsICh1bnNpZ25lZCBsb25nKXBvcnQpCi0jZGVmaW5lIGludyhwb3J0KQkJZWVoX2ludygodW5zaWduZWQgbG9uZylwb3J0KQotI2RlZmluZSBvdXR3KHZhbCwgcG9ydCkJCWVlaF9vdXR3KHZhbCwgKHVuc2lnbmVkIGxvbmcpcG9ydCkKLSNkZWZpbmUgaW5sKHBvcnQpCQllZWhfaW5sKCh1bnNpZ25lZCBsb25nKXBvcnQpCi0jZGVmaW5lIG91dGwodmFsLCBwb3J0KQkJZWVoX291dGwodmFsLCAodW5zaWduZWQgbG9uZylwb3J0KQorCisjZW5kaWYgLyogQ09ORklHX1BQQ19JU0VSSUVTICovCiAKIC8qCiAgKiBUaGUgaW5zdy9vdXRzdy9pbnNsL291dHNsIG1hY3JvcyBkb24ndCBkbyBieXRlLXN3YXBwaW5nLgpAQCAtMTM0LDMyICsxMjgsNDMgQEAKICNkZWZpbmUgaW5zYihwb3J0LCBidWYsIG5zKQllZWhfaW5zYigocG9ydCksIChidWYpLCAobnMpKQogI2RlZmluZSBpbnN3KHBvcnQsIGJ1ZiwgbnMpCWVlaF9pbnN3X25zKChwb3J0KSwgKGJ1ZiksIChucykpCiAjZGVmaW5lIGluc2wocG9ydCwgYnVmLCBubCkJZWVoX2luc2xfbnMoKHBvcnQpLCAoYnVmKSwgKG5sKSkKLSNkZWZpbmUgaW5zd19ucyhwb3J0LCBidWYsIG5zKQllZWhfaW5zd19ucygocG9ydCksIChidWYpLCAobnMpKQotI2RlZmluZSBpbnNsX25zKHBvcnQsIGJ1ZiwgbmwpCWVlaF9pbnNsX25zKChwb3J0KSwgKGJ1ZiksIChubCkpCiAKICNkZWZpbmUgb3V0c2IocG9ydCwgYnVmLCBucykgIF9vdXRzYigodTggX19pb21lbSAqKSgocG9ydCkrcGNpX2lvX2Jhc2UpLCAoYnVmKSwgKG5zKSkKICNkZWZpbmUgb3V0c3cocG9ydCwgYnVmLCBucykgIF9vdXRzd19ucygodTE2IF9faW9tZW0gKikoKHBvcnQpK3BjaV9pb19iYXNlKSwgKGJ1ZiksIChucykpCiAjZGVmaW5lIG91dHNsKHBvcnQsIGJ1ZiwgbmwpICBfb3V0c2xfbnMoKHUzMiBfX2lvbWVtICopKChwb3J0KStwY2lfaW9fYmFzZSksIChidWYpLCAobmwpKQogCi0jZW5kaWYKKyNkZWZpbmUgcmVhZGIoYWRkcikJCWVlaF9yZWFkYihhZGRyKQorI2RlZmluZSByZWFkdyhhZGRyKQkJZWVoX3JlYWR3KGFkZHIpCisjZGVmaW5lIHJlYWRsKGFkZHIpCQllZWhfcmVhZGwoYWRkcikKKyNkZWZpbmUgcmVhZHEoYWRkcikJCWVlaF9yZWFkcShhZGRyKQorI2RlZmluZSB3cml0ZWIoZGF0YSwgYWRkcikJZWVoX3dyaXRlYigoZGF0YSksIChhZGRyKSkKKyNkZWZpbmUgd3JpdGV3KGRhdGEsIGFkZHIpCWVlaF93cml0ZXcoKGRhdGEpLCAoYWRkcikpCisjZGVmaW5lIHdyaXRlbChkYXRhLCBhZGRyKQllZWhfd3JpdGVsKChkYXRhKSwgKGFkZHIpKQorI2RlZmluZSB3cml0ZXEoZGF0YSwgYWRkcikJZWVoX3dyaXRlcSgoZGF0YSksIChhZGRyKSkKKyNkZWZpbmUgaW5iKHBvcnQpCQllZWhfaW5iKCh1bnNpZ25lZCBsb25nKXBvcnQpCisjZGVmaW5lIG91dGIodmFsLCBwb3J0KQkJZWVoX291dGIodmFsLCAodW5zaWduZWQgbG9uZylwb3J0KQorI2RlZmluZSBpbncocG9ydCkJCWVlaF9pbncoKHVuc2lnbmVkIGxvbmcpcG9ydCkKKyNkZWZpbmUgb3V0dyh2YWwsIHBvcnQpCQllZWhfb3V0dyh2YWwsICh1bnNpZ25lZCBsb25nKXBvcnQpCisjZGVmaW5lIGlubChwb3J0KQkJZWVoX2lubCgodW5zaWduZWQgbG9uZylwb3J0KQorI2RlZmluZSBvdXRsKHZhbCwgcG9ydCkJCWVlaF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpcG9ydCkKIAogI2RlZmluZSByZWFkYl9yZWxheGVkKGFkZHIpIHJlYWRiKGFkZHIpCiAjZGVmaW5lIHJlYWR3X3JlbGF4ZWQoYWRkcikgcmVhZHcoYWRkcikKICNkZWZpbmUgcmVhZGxfcmVsYXhlZChhZGRyKSByZWFkbChhZGRyKQogI2RlZmluZSByZWFkcV9yZWxheGVkKGFkZHIpIHJlYWRxKGFkZHIpCiAKLWV4dGVybiB2b2lkIF9pbnNiKHZvbGF0aWxlIHU4IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKTsKLWV4dGVybiB2b2lkIF9vdXRzYih2b2xhdGlsZSB1OCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBucyk7Ci1leHRlcm4gdm9pZCBfaW5zdyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBpbnQgbnMpOwotZXh0ZXJuIHZvaWQgX291dHN3KHZvbGF0aWxlIHUxNiBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBucyk7Ci1leHRlcm4gdm9pZCBfaW5zbCh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBpbnQgbmwpOwotZXh0ZXJuIHZvaWQgX291dHNsKHZvbGF0aWxlIHUzMiBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBubCk7Ci1leHRlcm4gdm9pZCBfaW5zd19ucyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBpbnQgbnMpOwotZXh0ZXJuIHZvaWQgX291dHN3X25zKHZvbGF0aWxlIHUxNiBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBucyk7Ci1leHRlcm4gdm9pZCBfaW5zbF9ucyh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBpbnQgbmwpOwotZXh0ZXJuIHZvaWQgX291dHNsX25zKHZvbGF0aWxlIHUzMiBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGludCBubCk7CitleHRlcm4gdm9pZCBfaW5zYih2b2xhdGlsZSB1OCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgX291dHNiKHZvbGF0aWxlIHU4IF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBfaW5zd19ucyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIF9vdXRzd19ucyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIF9pbnNsX25zKHZvbGF0aWxlIHUzMiBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgX291dHNsX25zKHZvbGF0aWxlIHUzMiBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGxvbmcgY291bnQpOwogCi0jZGVmaW5lIG1taW93YigpCitzdGF0aWMgaW5saW5lIHZvaWQgbW1pb3diKHZvaWQpCit7CisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzeW5jIiA6IDogOiAibWVtb3J5Iik7CisJZ2V0X3BhY2EoKS0+aW9fc3luYyA9IDA7Cit9CiAKIC8qCiAgKiBvdXRwdXQgcGF1c2UgdmVyc2lvbnMgbmVlZCBhIGRlbGF5IGF0IGxlYXN0IGZvciB0aGUKQEAgLTE3MiwxNCArMTc3LDYgQEAKICNkZWZpbmUgaW5sX3AocG9ydCkgICAgICAgICAgICAgaW5sKHBvcnQpCiAjZGVmaW5lIG91dGxfcCh2YWwsIHBvcnQpICAgICAgICh1ZGVsYXkoMSksIG91dGwoKHZhbCksIChwb3J0KSkpCiAKLS8qCi0gKiBUaGUgKl9ucyB2ZXJzaW9ucyBiZWxvdyBkb24ndCBkbyBieXRlLXN3YXBwaW5nLgotICogTmVpdGhlciBkbyB0aGUgc3RhbmRhcmQgdmVyc2lvbnMgbm93LCB0aGVzZSBhcmUganVzdCBoZXJlCi0gKiBmb3Igb2xkZXIgY29kZS4KLSAqLwotI2RlZmluZSBvdXRzd19ucyhwb3J0LCBidWYsIG5zKQlfb3V0c3dfbnMoKHUxNiBfX2lvbWVtICopKChwb3J0KStwY2lfaW9fYmFzZSksIChidWYpLCAobnMpKQotI2RlZmluZSBvdXRzbF9ucyhwb3J0LCBidWYsIG5sKQlfb3V0c2xfbnMoKHUzMiBfX2lvbWVtICopKChwb3J0KStwY2lfaW9fYmFzZSksIChidWYpLCAobmwpKQotCiAKICNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgfigwVUwpCiAKQEAgLTI3MSw4NiArMjY4LDkyIEBACiAgKiBhbmQgc2hvdWxkIG5vdCBiZSB1c2VkIGRpcmVjdGx5IGJ5IGRldmljZSBkcml2ZXJzLiAgVXNlIGluYi9yZWFkYgogICogaW5zdGVhZC4KICAqLwotc3RhdGljIGlubGluZSBpbnQgaW5fOChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIpCitzdGF0aWMgaW5saW5lIGludCBfX2luXzgoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgY2hhciBfX2lvbWVtICphZGRyKQogewogCWludCByZXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGJ6JVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgbGJ6JVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKIAkJCSAgICAgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRfOCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRfOCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YiVVMCVYMCAlMSwlMDsgc3luYyIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3RiJVUwJVgwICUxLCUwIgogCQkJICAgICA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CisJZ2V0X3BhY2EoKS0+aW9fc3luYyA9IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGluX2xlMTYoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IF9faW5fbGUxNihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyKQogewogCWludCByZXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGhicnggJTAsMCwlMTsgdHdpIDAsJTAsMDsgaXN5bmMiCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IGxoYnJ4ICUwLDAsJTE7IHR3aSAwLCUwLDA7IGlzeW5jIgogCQkJICAgICA6ICI9ciIgKHJldCkgOiAiciIgKGFkZHIpLCAibSIgKCphZGRyKSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaW5fYmUxNihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSBpbnQgX19pbl9iZTE2KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIpCiB7CiAJaW50IHJldDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsaHolVTElWDEgJTAsJTE7IHR3aSAwLCUwLDA7IGlzeW5jIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBsaHolVTElWDEgJTAsJTE7IHR3aSAwLCUwLDA7IGlzeW5jIgogCQkJICAgICA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG91dF9sZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRfbGUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhicnggJTEsMCwlMjsgc3luYyIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3RoYnJ4ICUxLDAsJTIiCiAJCQkgICAgIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpLCAiciIgKGFkZHIpKTsKKwlnZXRfcGFjYSgpLT5pb19zeW5jID0gMTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG91dF9iZTE2KHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IF9faW9tZW0gKmFkZHIsIGludCB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRfYmUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGglVTAlWDAgJTEsJTA7IHN5bmMiCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IHN0aCVVMCVYMCAlMSwlMCIKIAkJCSAgICAgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOworCWdldF9wYWNhKCktPmlvX3N5bmMgPSAxOwogfQogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGluX2xlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgX19pbl9sZTMyKGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgcmV0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImx3YnJ4ICUwLDAsJTE7IHR3aSAwLCUwLDA7IGlzeW5jIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBsd2JyeCAlMCwwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKIAkJCSAgICAgOiAiPXIiIChyZXQpIDogInIiIChhZGRyKSwgIm0iICgqYWRkcikpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW5fYmUzMihjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBfX2luX2JlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCByZXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHd6JVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgbHd6JVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKIAkJCSAgICAgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRfbGUzMih2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIF9fb3V0X2xlMzIodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3YnJ4ICUxLDAsJTI7IHN5bmMiIDogIj1tIiAoKmFkZHIpCisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IHN0d2JyeCAlMSwwLCUyIiA6ICI9bSIgKCphZGRyKQogCQkJICAgICA6ICJyIiAodmFsKSwgInIiIChhZGRyKSk7CisJZ2V0X3BhY2EoKS0+aW9fc3luYyA9IDE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBvdXRfYmUzMih2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIF9fb3V0X2JlMzIodm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkciwgaW50IHZhbCkKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3R3JVUwJVgwICUxLCUwOyBzeW5jIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBzdHclVTAlWDAgJTEsJTAiCiAJCQkgICAgIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKKwlnZXRfcGFjYSgpLT5pb19zeW5jID0gMTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGluX2xlNjQoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2lvbWVtICphZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9faW5fbGU2NChjb25zdCB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyB0bXAsIHJldDsKIAogCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkJICAgICAic3luY1xuIgogCQkJICAgICAibGQgJTEsMCglMilcbiIKIAkJCSAgICAgInR3aSAwLCUxLDBcbiIKIAkJCSAgICAgImlzeW5jXG4iCkBAIC0zNjUsMTYgKzM2OCwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBpbl9iZTY0KGNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX2luX2JlNjQoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2lvbWVtICphZGRyKQogewogCXVuc2lnbmVkIGxvbmcgcmV0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImxkJVUxJVgxICUwLCUxOyB0d2kgMCwlMCwwOyBpc3luYyIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgbGQlVTElWDEgJTAsJTE7IHR3aSAwLCUwLDA7IGlzeW5jIgogCQkJICAgICA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG91dF9sZTY0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHZvaWQgX19vdXRfbGU2NCh2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9faW9tZW0gKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCXVuc2lnbmVkIGxvbmcgdG1wOwogCkBAIC0zODYsMTkgKzM4OSwxOSBAQAogCQkJICAgICAicmxkaWNsICUxLCUxLDMyLDBcbiIKIAkJCSAgICAgInJsd2ltaSAlMCwlMSw4LDgsMzFcbiIKIAkJCSAgICAgInJsd2ltaSAlMCwlMSwyNCwxNiwyM1xuIgotCQkJICAgICAic3RkICUwLDAoJTMpXG4iCi0JCQkgICAgICJzeW5jIgorCQkJICAgICAic3luY1xuIgorCQkJICAgICAic3RkICUwLDAoJTMpIgogCQkJICAgICA6ICI9JnIiICh0bXApICwgIj0mciIgKHZhbCkgOiAiMSIgKHZhbCkgLCAiYiIgKGFkZHIpICwgIm0iICgqYWRkcikpOworCWdldF9wYWNhKCktPmlvX3N5bmMgPSAxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgb3V0X2JlNjQodm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2lvbWVtICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX291dF9iZTY0KHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgX19pb21lbSAqYWRkciwgdW5zaWduZWQgbG9uZyB2YWwpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ZCVVMCVYMCAlMSwlMDsgc3luYyIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOworCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBzdGQlVTAlWDAgJTEsJTAiIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKKwlnZXRfcGFjYSgpLT5pb19zeW5jID0gMTsKIH0KIAotI2lmbmRlZiBDT05GSUdfUFBDX0lTRVJJRVMgCiAjaW5jbHVkZSA8YXNtL2VlaC5oPgotI2VuZGlmCiAKIC8qKgogICoJY2hlY2tfc2lnbmF0dXJlCQktCWZpbmQgQklPUyBzaWduYXR1cmVzCkBAIC00MTQsNyArNDE3LDYgQEAKIAljb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBsZW5ndGgpCiB7CiAJaW50IHJldHZhbCA9IDA7Ci0jaWZuZGVmIENPTkZJR19QUENfSVNFUklFUyAKIAlkbyB7CiAJCWlmIChyZWFkYihpb19hZGRyKSAhPSAqc2lnbmF0dXJlKQogCQkJZ290byBvdXQ7CkBAIC00MjQsNyArNDI2LDYgQEAKIAl9IHdoaWxlIChsZW5ndGgpOwogCXJldHZhbCA9IDE7CiBvdXQ6Ci0jZW5kaWYKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lwaWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXBpYy5oCmluZGV4IDBmZTM5NmEuLjUzMDc5ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXBpYy5oCkBAIC02OSw5ICs2OSw2IEBACiAJSVBJQ19NQ1BfTVUgICA9IDcsCiB9OwogCi1leHRlcm4gdm9pZCBpcGljX2luaXQocGh5c19hZGRyX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCi0JCXVuc2lnbmVkIGludCBpcnFfb2Zmc2V0LAotCQl1bnNpZ25lZCBjaGFyICpzZW5zZXMsIHVuc2lnbmVkIGludCBzZW5zZXNfY291bnQpOwogZXh0ZXJuIGludCBpcGljX3NldF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgcHJpb3JpdHkpOwogZXh0ZXJuIHZvaWQgaXBpY19zZXRfaGlnaGVzdF9wcmlvcml0eSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGlwaWNfc2V0X2RlZmF1bHRfcHJpb3JpdHkodm9pZCk7CkBAIC03OSw3ICs3NiwxNiBAQAogZXh0ZXJuIHZvaWQgaXBpY19kaXNhYmxlX21jcChlbnVtIGlwaWNfbWNwX2lycSBtY3BfaXJxKTsKIGV4dGVybiB1MzIgaXBpY19nZXRfbWNwX3N0YXR1cyh2b2lkKTsKIGV4dGVybiB2b2lkIGlwaWNfY2xlYXJfbWNwX3N0YXR1cyh1MzIgbWFzayk7CisKKyNpZmRlZiBDT05GSUdfUFBDX01FUkdFCitleHRlcm4gdm9pZCBpcGljX2luaXQoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOworZXh0ZXJuIHVuc2lnbmVkIGludCBpcGljX2dldF9pcnEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworI2Vsc2UKK2V4dGVybiB2b2lkIGlwaWNfaW5pdChwaHlzX2FkZHJfdCBwaHlzX2FkZHIsIHVuc2lnbmVkIGludCBmbGFncywKKwkJdW5zaWduZWQgaW50IGlycV9vZmZzZXQsCisJCXVuc2lnbmVkIGNoYXIgKnNlbnNlcywgdW5zaWduZWQgaW50IHNlbnNlc19jb3VudCk7CiBleHRlcm4gaW50IGlwaWNfZ2V0X2lycShzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0lQSUNfSF9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXJxLmgKaW5kZXggZDkwM2E2Mi4uNGRhNDFlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pcnEuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lycS5oCkBAIC0xMzcsNyArMTM3LDcgQEAKIGV4dGVybiBzdHJ1Y3QgaXJxX21hcF9lbnRyeSBpcnFfbWFwW05SX0lSUVNdOwogCiAKLS8qKioKKy8qKgogICogaXJxX2FsbG9jX2hvc3QgLSBBbGxvY2F0ZSBhIG5ldyBpcnFfaG9zdCBkYXRhIHN0cnVjdHVyZQogICogQG5vZGU6IGRldmljZS10cmVlIG5vZGUgb2YgdGhlIGludGVycnVwdCBjb250cm9sbGVyCiAgKiBAcmV2bWFwX3R5cGU6IHR5cGUgb2YgcmV2ZXJzZSBtYXBwaW5nIHRvIHVzZQpAQCAtMTU5LDE0ICsxNTksMTQgQEAKIAkJCQkgICAgICAgaXJxX2h3X251bWJlcl90IGludmFsX2lycSk7CiAKIAotLyoqKgorLyoqCiAgKiBpcnFfZmluZF9ob3N0IC0gTG9jYXRlcyBhIGhvc3QgZm9yIGEgZ2l2ZW4gZGV2aWNlIG5vZGUKICAqIEBub2RlOiBkZXZpY2UtdHJlZSBub2RlIG9mIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlcgogICovCiBleHRlcm4gc3RydWN0IGlycV9ob3N0ICppcnFfZmluZF9ob3N0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSk7CiAKIAotLyoqKgorLyoqCiAgKiBpcnFfc2V0X2RlZmF1bHRfaG9zdCAtIFNldCBhICJkZWZhdWx0IiBob3N0CiAgKiBAaG9zdDogZGVmYXVsdCBob3N0IHBvaW50ZXIKICAqCkBAIC0xNzgsNyArMTc4LDcgQEAKIGV4dGVybiB2b2lkIGlycV9zZXRfZGVmYXVsdF9ob3N0KHN0cnVjdCBpcnFfaG9zdCAqaG9zdCk7CiAKIAotLyoqKgorLyoqCiAgKiBpcnFfc2V0X3ZpcnFfY291bnQgLSBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHZpcnQgaXJxcwogICogQGNvdW50OiBudW1iZXIgb2YgbGludXggdmlydHVhbCBpcnFzLCBjYXBwZWQgd2l0aCBOUl9JUlFTCiAgKgpAQCAtMTg4LDcgKzE4OCw3IEBACiBleHRlcm4gdm9pZCBpcnFfc2V0X3ZpcnFfY291bnQodW5zaWduZWQgaW50IGNvdW50KTsKIAogCi0vKioqCisvKioKICAqIGlycV9jcmVhdGVfbWFwcGluZyAtIE1hcCBhIGhhcmR3YXJlIGludGVycnVwdCBpbnRvIGxpbnV4IHZpcnEgc3BhY2UKICAqIEBob3N0OiBob3N0IG93bmluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdCBvciBOVUxMIGZvciBkZWZhdWx0IGhvc3QKICAqIEBod2lycTogaGFyZHdhcmUgaXJxIG51bWJlciBpbiB0aGF0IGhvc3Qgc3BhY2UKQEAgLTIwMiwxMyArMjAyLDEzIEBACiAJCQkJICAgICAgIGlycV9od19udW1iZXJfdCBod2lycSk7CiAKIAotLyoqKgorLyoqCiAgKiBpcnFfZGlzcG9zZV9tYXBwaW5nIC0gVW5tYXAgYW4gaW50ZXJydXB0CiAgKiBAdmlycTogbGludXggdmlycSBudW1iZXIgb2YgdGhlIGludGVycnVwdCB0byB1bm1hcAogICovCiBleHRlcm4gdm9pZCBpcnFfZGlzcG9zZV9tYXBwaW5nKHVuc2lnbmVkIGludCB2aXJxKTsKIAotLyoqKgorLyoqCiAgKiBpcnFfZmluZF9tYXBwaW5nIC0gRmluZCBhIGxpbnV4IHZpcnEgZnJvbSBhbiBodyBpcnEgbnVtYmVyLgogICogQGhvc3Q6IGhvc3Qgb3duaW5nIHRoaXMgaGFyZHdhcmUgaW50ZXJydXB0CiAgKiBAaHdpcnE6IGhhcmR3YXJlIGlycSBudW1iZXIgaW4gdGhhdCBob3N0IHNwYWNlCkBAIC0yMjEsNyArMjIxLDcgQEAKIAkJCQkgICAgIGlycV9od19udW1iZXJfdCBod2lycSk7CiAKIAotLyoqKgorLyoqCiAgKiBpcnFfcmFkaXhfcmV2bWFwIC0gRmluZCBhIGxpbnV4IHZpcnEgZnJvbSBhIGh3IGlycSBudW1iZXIuCiAgKiBAaG9zdDogaG9zdCBvd25pbmcgdGhpcyBoYXJkd2FyZSBpbnRlcnJ1cHQKICAqIEBod2lycTogaGFyZHdhcmUgaXJxIG51bWJlciBpbiB0aGF0IGhvc3Qgc3BhY2UKQEAgLTIzMiw3ICsyMzIsNyBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBpcnFfcmFkaXhfcmV2bWFwKHN0cnVjdCBpcnFfaG9zdCAqaG9zdCwKIAkJCQkgICAgIGlycV9od19udW1iZXJfdCBod2lycSk7CiAKLS8qKioKKy8qKgogICogaXJxX2xpbmVhcl9yZXZtYXAgLSBGaW5kIGEgbGludXggdmlycSBmcm9tIGEgaHcgaXJxIG51bWJlci4KICAqIEBob3N0OiBob3N0IG93bmluZyB0aGlzIGhhcmR3YXJlIGludGVycnVwdAogICogQGh3aXJxOiBoYXJkd2FyZSBpcnEgbnVtYmVyIGluIHRoYXQgaG9zdCBzcGFjZQpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAKIAogCi0vKioqCisvKioKICAqIGlycV9hbGxvY192aXJ0IC0gQWxsb2NhdGUgdmlydHVhbCBpcnEgbnVtYmVycwogICogQGhvc3Q6IGhvc3Qgb3duaW5nIHRoZXNlIG5ldyB2aXJ0dWFsIGlycXMKICAqIEBjb3VudDogbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG51bWJlcnMgdG8gYWxsb2NhdGUKQEAgLTI2MSw3ICsyNjEsNyBAQAogCQkJCSAgIHVuc2lnbmVkIGludCBjb3VudCwKIAkJCQkgICB1bnNpZ25lZCBpbnQgaGludCk7CiAKLS8qKioKKy8qKgogICogaXJxX2ZyZWVfdmlydCAtIEZyZWUgdmlydHVhbCBpcnEgbnVtYmVycwogICogQHZpcnE6IHZpcnR1YWwgaXJxIG51bWJlciBvZiB0aGUgZmlyc3QgaW50ZXJydXB0IHRvIGZyZWUKICAqIEBjb3VudDogbnVtYmVyIG9mIGludGVycnVwdHMgdG8gZnJlZQpAQCAtMzAwLDcgKzMwMCw3IEBACiAKIC8qIC0tIEVuZCBPRiBoZWxwZXJzIC0tICovCiAKLS8qKioKKy8qKgogICogaXJxX2Vhcmx5X2luaXQgLSBJbml0IGlycSByZW1hcHBpbmcgc3Vic3lzdGVtCiAgKi8KIGV4dGVybiB2b2lkIGlycV9lYXJseV9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2h2X2NhbGxfeG0uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9odl9jYWxsX3htLmgKaW5kZXggY2E5MjAyYy4uMzkyYWMzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2h2X2NhbGxfeG0uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaHZfY2FsbF94bS5oCkBAIC0xNiwyMyArMTYsNiBAQAogI2RlZmluZSBIdkNhbGxYbVNldFRjZQkJCUh2Q2FsbFhtICsgMTEKICNkZWZpbmUgSHZDYWxsWG1TZXRUY2VzCQkJSHZDYWxsWG0gKyAxMwogCi0vKgotICogU3RydWN0dXJlIHBhc3NlZCB0byBIdkNhbGxYbV9nZXRUY2VUYWJsZVBhcm1zCi0gKi8KLXN0cnVjdCBpb21tdV90YWJsZV9jYiB7Ci0JdW5zaWduZWQgbG9uZwlpdGNfYnVzbm87CS8qIEJ1cyBudW1iZXIgZm9yIHRoaXMgdGNlIHRhYmxlICovCi0JdW5zaWduZWQgbG9uZwlpdGNfc3RhcnQ7CS8qIFdpbGwgYmUgTlVMTCBmb3Igc2Vjb25kYXJ5ICovCi0JdW5zaWduZWQgbG9uZwlpdGNfdG90YWxzaXplOwkvKiBTaXplIChpbiBwYWdlcykgb2Ygd2hvbGUgdGFibGUgKi8KLQl1bnNpZ25lZCBsb25nCWl0Y19vZmZzZXQ7CS8qIEluZGV4IGludG8gcmVhbCB0Y2UgdGFibGUgb2YgdGhlCi0JCQkJCSAgIHN0YXJ0IG9mIG91ciBzZWN0aW9uICovCi0JdW5zaWduZWQgbG9uZwlpdGNfc2l6ZTsJLyogU2l6ZSAoaW4gcGFnZXMpIG9mIG91ciBzZWN0aW9uICovCi0JdW5zaWduZWQgbG9uZwlpdGNfaW5kZXg7CS8qIEluZGV4IG9mIHRoaXMgdGNlIHRhYmxlICovCi0JdW5zaWduZWQgc2hvcnQJaXRjX21heHRhYmxlczsJLyogTWF4IG51bSBvZiB0YWJsZXMgZm9yIHBhcnRpdGlvbiAqLwotCXVuc2lnbmVkIGNoYXIJaXRjX3ZpcnRidXM7CS8qIEZsYWcgdG8gaW5kaWNhdGUgdmlydHVhbCBidXMgKi8KLQl1bnNpZ25lZCBjaGFyCWl0Y19zbG90bm87CS8qIElPQSBUY2UgU2xvdCBJbmRleCAqLwotCXVuc2lnbmVkIGNoYXIJaXRjX3JzdmRbNF07Ci19OwotCiBzdGF0aWMgaW5saW5lIHZvaWQgSHZDYWxsWG1fZ2V0VGNlVGFibGVQYXJtcyh1NjQgY2IpCiB7CiAJSHZDYWxsMShIdkNhbGxYbUdldFRjZVRhYmxlUGFybXMsIGNiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9odl9scF9jb25maWcuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9odl9scF9jb25maWcuaAppbmRleCBkZjhiMjA3Li5hMDA2ZmQxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaHZfbHBfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2h2X2xwX2NvbmZpZy5oCkBAIC0yNSw3ICsyNSw2IEBACiAKICNpbmNsdWRlIDxhc20vaXNlcmllcy9odl9jYWxsX3NjLmg+CiAjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vaXNlcmllcy9pdF9scF9uYWNhLmg+CiAKIGVudW0gewogCUh2Q2FsbENmZ19DdXIJPSAwLApAQCAtNDQsMTYgKzQzLDggQEAKICNkZWZpbmUgSHZDYWxsQ2ZnR2V0SG9zdGluZ0xwSW5kZXgJCQlIdkNhbGxDZmcgKyAzMgogCiBleHRlcm4gSHZMcEluZGV4IEh2THBDb25maWdfZ2V0THBJbmRleF9vdXRsaW5lKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIEh2THBJbmRleAlIdkxwQ29uZmlnX2dldExwSW5kZXgodm9pZCkKLXsKLQlyZXR1cm4gaXRMcE5hY2EueExwSW5kZXg7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgSHZMcEluZGV4CUh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgodm9pZCkKLXsKLQlyZXR1cm4gaXRMcE5hY2EueFByaW1hcnlMcEluZGV4OwotfQorZXh0ZXJuIEh2THBJbmRleCBIdkxwQ29uZmlnX2dldExwSW5kZXgodm9pZCk7CitleHRlcm4gSHZMcEluZGV4IEh2THBDb25maWdfZ2V0UHJpbWFyeUxwSW5kZXgodm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdTY0IEh2THBDb25maWdfZ2V0TXNDaHVua3Modm9pZCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pc2VyaWVzX2lvLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXNlcmllc19pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjkwMDliLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy9pc2VyaWVzX2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lTRVJJRVNfSU9fSAotI2RlZmluZSBfQVNNX1BPV0VSUENfSVNFUklFU19JU0VSSUVTX0lPX0gKLQotCi0jaWZkZWYgQ09ORklHX1BQQ19JU0VSSUVTCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLS8qCi0gKiBDcmVhdGVkIGJ5IEFsbGFuIFRyYXV0bWFuIG9uIFRodSBEZWMgMjggMjAwMC4KLSAqCi0gKiBSZW1hcHMgdGhlIGlvLmggZm9yIHRoZSBpU2VyaWVzIElvCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEFsbGFuIEggVHJhdXRtYW4sIElCTSBDb3Jwb3JhdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlOgotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKiBDaGFuZ2UgQWN0aXZpdHk6Ci0gKiAgIENyZWF0ZWQgRGVjZW1iZXIgMjgsIDIwMDAKLSAqIEVuZCBDaGFuZ2UgQWN0aXZpdHkKLSAqLwotCi0jaWZkZWYgQ09ORklHX1BDSQotZXh0ZXJuIHU4ICAgaVNlcmllc19SZWFkX0J5dGUoY29uc3Qgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogSW9BZGRyZXNzKTsKLWV4dGVybiB1MTYgIGlTZXJpZXNfUmVhZF9Xb3JkKGNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqIElvQWRkcmVzcyk7Ci1leHRlcm4gdTMyICBpU2VyaWVzX1JlYWRfTG9uZyhjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBJb0FkZHJlc3MpOwotZXh0ZXJuIHZvaWQgaVNlcmllc19Xcml0ZV9CeXRlKHU4ICBJb0RhdGEsIHZvbGF0aWxlIHZvaWQgX19pb21lbSAqIElvQWRkcmVzcyk7Ci1leHRlcm4gdm9pZCBpU2VyaWVzX1dyaXRlX1dvcmQodTE2IElvRGF0YSwgdm9sYXRpbGUgdm9pZCBfX2lvbWVtICogSW9BZGRyZXNzKTsKLWV4dGVybiB2b2lkIGlTZXJpZXNfV3JpdGVfTG9uZyh1MzIgSW9EYXRhLCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKiBJb0FkZHJlc3MpOwotCi1leHRlcm4gdm9pZCBpU2VyaWVzX21lbXNldF9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIGNoYXIgeCwgc2l6ZV90IG4pOwotZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1jcHlfdG9pbyh2b2xhdGlsZSB2b2lkIF9faW9tZW0gKmRlc3QsIHZvaWQgKnNvdXJjZSwKLQkJc2l6ZV90IG4pOwotZXh0ZXJuIHZvaWQgaVNlcmllc19tZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsCi0JCWNvbnN0IHZvbGF0aWxlIHZvaWQgX19pb21lbSAqc291cmNlLCBzaXplX3Qgbik7Ci0jZWxzZQotc3RhdGljIGlubGluZSB1OCBpU2VyaWVzX1JlYWRfQnl0ZShjb25zdCB2b2xhdGlsZSB2b2lkIF9faW9tZW0gKklvQWRkcmVzcykKLXsKLQlyZXR1cm4gMHhmZjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGlTZXJpZXNfV3JpdGVfQnl0ZSh1OCBJb0RhdGEsCi0JCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqSW9BZGRyZXNzKQotewotfQotI2VuZGlmCS8qIENPTkZJR19QQ0kgKi8KLQotI2VuZGlmIC8qIENPTkZJR19QUENfSVNFUklFUyAqLwotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19JU0VSSUVTX0lTRVJJRVNfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL2l0X2xwX3F1ZXVlLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfbHBfcXVldWUuaAppbmRleCAyODRjNWE3Li4zZjY4MTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfbHBfcXVldWUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvaXRfbHBfcXVldWUuaApAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAotc3RydWN0IEh2THBFdmVudDsKLQogI2RlZmluZSBJVF9MUF9NQVhfUVVFVUVTCTgKIAogI2RlZmluZSBJVF9MUF9OT1RfVVNFRAkJMAkvKiBRdWV1ZSB3aWxsIG5vdCBiZSB1c2VkIGJ5IFBMSUMgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy92aW8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvaXNlcmllcy92aW8uaAppbmRleCA3MmE5N2QzLi43YTk1ZDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2lzZXJpZXMvdmlvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pc2VyaWVzL3Zpby5oCkBAIC0xMjIsNiArMTIyLDM0IEBACiAJdmlvcmNfb3BlblJlamVjdGVkID0gMHgwMzAxCiB9OwogCisvKgorICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgZXZlbnRzIHRoYXQgZmxvdyBiZXR3ZWVuIHVzIGFuZCBPUy80MDAgZm9yIGNoYXJpbworICogZXZlbnRzLiAgWW91IGNhbid0IG1lc3Mgd2l0aCB0aGlzIHVubGVzcyB0aGUgT1MvNDAwIHNpZGUgY2hhbmdlcyB0b28uCisgKi8KK3N0cnVjdCB2aW9jaGFybHBldmVudCB7CisJc3RydWN0IEh2THBFdmVudCBldmVudDsKKwl1MzIgcmVzZXJ2ZWQ7CisJdTE2IHZlcnNpb247CisJdTE2IHN1YnR5cGVfcmVzdWx0X2NvZGU7CisJdTggdmlydHVhbF9kZXZpY2U7CisJdTggbGVuOworCXU4IGRhdGFbVklPQ0hBUl9NQVhfREFUQV07Cit9OworCisjZGVmaW5lIFZJT0NIQVJfV0lORE9XCQkxMAorCitlbnVtIHZpb2NoYXJzdWJ0eXBlIHsKKwl2aW9jaGFyb3BlbiA9IDB4MDAwMSwKKwl2aW9jaGFyY2xvc2UgPSAweDAwMDIsCisJdmlvY2hhcmRhdGEgPSAweDAwMDMsCisJdmlvY2hhcmFjayA9IDB4MDAwNCwKKwl2aW9jaGFyY29uZmlnID0gMHgwMDA1Cit9OworCitlbnVtIHZpb2NoYXJfcmMgeworCXZpb2NoYXJfcmNfZWJ1c3kgPSAxCit9OworCiBzdHJ1Y3QgZGV2aWNlOwogCiBleHRlcm4gc3RydWN0IGRldmljZSAqaVNlcmllc192aW9fZGV2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rZHVtcC5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9rZHVtcC5oCmluZGV4IGRjMTU3NGMuLjEwZThlYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMva2R1bXAuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2tkdW1wLmgKQEAgLTcsNyArNyw3IEBACiAvKiBIb3cgbWFueSBieXRlcyB0byByZXNlcnZlIGF0IHplcm8gZm9yIGtkdW1wLiBUaGUgcmVzZXJ2ZSBsaW1pdCBzaG91bGQKICAqIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlIHRyYW1wb2xpbmUncyBlbmQgYWRkcmVzcy4KICAqIFJlc2VydmUgdG8gdGhlIGVuZCBvZiB0aGUgRldOTUkgYXJlYSwgc2VlIGhlYWRfNjQuUyAqLwotI2RlZmluZSBLRFVNUF9SRVNFUlZFX0xJTUlUCTB4ODAwMAorI2RlZmluZSBLRFVNUF9SRVNFUlZFX0xJTUlUCTB4MTAwMDAgLyogNjRLICovCiAKICNpZmRlZiBDT05GSUdfQ1JBU0hfRFVNUAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2tleGVjLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2tleGVjLmgKaW5kZXggOGY3ZmQ1Yy4uMTFjYmRmOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rZXhlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMva2V4ZWMuaApAQCAtMzIsNiArMzIsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgogCiAjaWZkZWYgQ09ORklHX0tFWEVDCiAKQEAgLTEwOSw3ICsxMTAsNiBAQAogCiAjZGVmaW5lIE1BWF9OT1RFX0JZVEVTIDEwMjQKIAotI2lmZGVmIF9fcG93ZXJwYzY0X18KIGV4dGVybiB2b2lkIGtleGVjX3NtcF93YWl0KHZvaWQpOwkvKiBnZXQgYW5kIGNsZWFyIG5hY2EgcGh5c2lkLCB3YWl0IGZvcgogCQkJCQkgIG1hc3RlciB0byBjb3B5IG5ldyBjb2RlIHRvIDAgKi8KIGV4dGVybiBpbnQgY3Jhc2hpbmdfY3B1OwpAQCAtMTE5LDcgKzExOSw2IEBACiB7CiAJcmV0dXJuIGNwdV9pc3NldChjcHUsY3B1c19pbl9zcik7CiB9Ci0jZW5kaWYgLyogX19wb3dlcnBjNjQgX18gKi8KIAogc3RydWN0IGtpbWFnZTsKIHN0cnVjdCBwdF9yZWdzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2twcm9iZXMuaAppbmRleCAyZDBhZjUyLi4zNGUxZjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2twcm9iZXMuaApAQCAtNTEsNiArNTEsNyBAQAogCiAjZGVmaW5lIEFSQ0hfU1VQUE9SVFNfS1JFVFBST0JFUwogI2RlZmluZSAgQVJDSF9JTkFDVElWRV9LUFJPQkVfQ09VTlQgMQorI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJZG8geyB9IHdoaWxlICgwKQogCiB2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOwogZXh0ZXJuIHZvaWQgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9scHBhY2EuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbHBwYWNhLmgKaW5kZXggNGRjNTE0YS4uODIxZWEwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9scHBhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2xwcGFjYS5oCkBAIC0yNyw3ICsyNyw5IEBACiAvLwogLy8KIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21tdS5oPgogCiAvKiBUaGUgSHlwZXJ2aXNvciBiYXJmcyBpZiB0aGUgbHBwYWNhIGNyb3NzZXMgYSBwYWdlIGJvdW5kYXJ5LiAgQSAxawogICogYWxpZ25tZW50IGlzIHN1ZmZpY2llbnQgdG8gcHJldmVudCB0aGlzICovCkBAIC0xMTQsNyArMTE2LDcgQEAKIAogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBDQUNIRV9MSU5FXzMgMHgwMTAwIC0gMHgwMDdGOiBUaGlzIGxpbmUgaXMgc2hhcmVkIHdpdGggb3RoZXIgcHJvY2Vzc29ycworLy8gQ0FDSEVfTElORV8zIDB4MDEwMCAtIDB4MDE3RjogVGhpcyBsaW5lIGlzIHNoYXJlZCB3aXRoIG90aGVyIHByb2Nlc3NvcnMKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAkvLyBUaGlzIGlzIHRoZSB5aWVsZF9jb3VudC4gIEFuICJvZGQiIHZhbHVlIChsb3cgYml0IG9uKSBtZWFucyB0aGF0CiAJLy8gdGhlIHByb2Nlc3NvciBpcyB5aWVsZGVkIChlaXRoZXIgYmVjYXVzZSBvZiBhbiBPUyB5aWVsZCBvciBhIFBMSUMKQEAgLTEyNiwxMiArMTI4LDI5IEBACiAJdTgJcmVzZXJ2ZWQ2WzEyNF07CQkvLyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgIHgwNC14N0YKIAogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gQ0FDSEVfTElORV80LTUgMHgwMTAwIC0gMHgwMUZGIENvbnRhaW5zIFBNQyBpbnRlcnJ1cHQgZGF0YQorLy8gQ0FDSEVfTElORV80LTUgMHgwMTgwIC0gMHgwMjdGIENvbnRhaW5zIFBNQyBpbnRlcnJ1cHQgZGF0YQogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCXU4CXBtY19zYXZlX2FyZWFbMjU2XTsJLy8gUE1DIGludGVycnVwdCBBcmVhICAgICAgICAgICB4MDAteEZGCiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDB4NDAwKSkpOwogCiBleHRlcm4gc3RydWN0IGxwcGFjYSBscHBhY2FbXTsKIAorLyoKKyAqIFNMQiBzaGFkb3cgYnVmZmVyIHN0cnVjdHVyZSBhcyBkZWZpbmVkIGluIHRoZSBQQVBSLiAgVGhlIHNhdmVfYXJlYQorICogY29udGFpbnMgYWRqYWNlbnQgRVNJRCBhbmQgVlNJRCBwYWlycyBmb3IgZWFjaCBzaGFkb3dlZCBTTEIuICBUaGUKKyAqIEVTSUQgaXMgc3RvcmVkIGluIHRoZSBsb3dlciA2NGJpdHMsIHRoZW4gdGhlIFZTSUQuCisgKi8KK3N0cnVjdCBzbGJfc2hhZG93IHsKKwl1MzIJcGVyc2lzdGVudDsJCS8vIE51bWJlciBvZiBwZXJzaXN0ZW50IFNMQnMJeDAwLXgwMworCXUzMglidWZmZXJfbGVuZ3RoOwkJLy8gVG90YWwgc2hhZG93IGJ1ZmZlciBsZW5ndGgJeDA0LXgwNworCXU2NAlyZXNlcnZlZDsJCS8vIEFsaWdubWVudAkJCXgwOC14MGYKKwlzdHJ1Y3QJeworCQl1NjQgICAgIGVzaWQ7CisJCXU2NAl2c2lkOworCX0gc2F2ZV9hcmVhW1NMQl9OVU1fQk9MVEVEXTsJLy8JCQkJeDEwLXg0MAorfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKK2V4dGVybiBzdHJ1Y3Qgc2xiX3NoYWRvdyBzbGJfc2hhZG93W107CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX0xQUEFDQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21wYzg2eHguaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODZ4eC5oCmluZGV4IGYyNjAzODIuLmI4NWRmNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODZ4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBjODZ4eC5oCkBAIC0yMyw4ICsyMyw2IEBACiAjZGVmaW5lIF9JU0FfTUVNX0JBU0UgICBpc2FfbWVtX2Jhc2UKICNpZmRlZiBDT05GSUdfUENJCiAjZGVmaW5lIFBDSV9EUkFNX09GRlNFVCBwY2lfZHJhbV9vZmZzZXQKLSNlbHNlCi0jZGVmaW5lIFBDSV9EUkFNX09GRlNFVCAwCiAjZW5kaWYKIAogI2RlZmluZSBDUFUwX0JPT1RfUkVMRUFTRSAweDAxMDAwMDAwCkBAIC0zMyw3ICszMSw2IEBACiAjZGVmaW5lIE1DTV9QT1JUX0NPTkZJR19PRkZTRVQgMHgxMDEwCiAKIC8qIE9mZnNldCBmcm9tIENDU1JCQVIgKi8KLSNkZWZpbmUgTVBDODZ4eF9PUEVOUElDX09GRlNFVAkoMHg0MDAwMCkKICNkZWZpbmUgTVBDODZ4eF9NQ01fT0ZGU0VUICAgICAgKDB4MDAwMDApCiAjZGVmaW5lIE1QQzg2eHhfTUNNX1NJWkUgICAgICAgICgweDAyMDAwKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL21waWMuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBpYy5oCmluZGV4IGViMjQxYzkuLmE5Zjk2MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBpYy5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvbXBpYy5oCkBAIC00MSw2ICs0MSw3IEBACiAjZGVmaW5lIE1QSUNfR1JFR19JUElfVkVDVE9SX1BSSV8xCTB4MDAwYjAKICNkZWZpbmUgTVBJQ19HUkVHX0lQSV9WRUNUT1JfUFJJXzIJMHgwMDBjMAogI2RlZmluZSBNUElDX0dSRUdfSVBJX1ZFQ1RPUl9QUklfMwkweDAwMGQwCisjZGVmaW5lIE1QSUNfR1JFR19JUElfU1RSSURFCQkweDEwCiAjZGVmaW5lIE1QSUNfR1JFR19TUFVSSU9VUwkJMHgwMDBlMAogI2RlZmluZSBNUElDX0dSRUdfVElNRVJfRlJFUQkJMHgwMDBmMAogCkBAIC02OCw2ICs2OSw3IEBACiAjZGVmaW5lIE1QSUNfQ1BVX0lQSV9ESVNQQVRDSF8xCQkweDAwMDUwCiAjZGVmaW5lIE1QSUNfQ1BVX0lQSV9ESVNQQVRDSF8yCQkweDAwMDYwCiAjZGVmaW5lIE1QSUNfQ1BVX0lQSV9ESVNQQVRDSF8zCQkweDAwMDcwCisjZGVmaW5lIE1QSUNfQ1BVX0lQSV9ESVNQQVRDSF9TVFJJREUJMHgwMDAxMAogI2RlZmluZSBNUElDX0NQVV9DVVJSRU5UX1RBU0tfUFJJCTB4MDAwODAKICNkZWZpbmUgCU1QSUNfQ1BVX1RBU0tQUklfTUFTSwkJCTB4MDAwMDAwMGYKICNkZWZpbmUgTVBJQ19DUFVfV0hPQU1JCQkJMHgwMDA5MApAQCAtMTE0LDYgKzExNiwxMDMgQEAKICNkZWZpbmUgTVBJQ19WRUNfVElNRVJfMQkyNDgKICNkZWZpbmUgTVBJQ19WRUNfVElNRVJfMAkyNDcKIAorLyoKKyAqIFRzaTEwOCBpbXBsZW1lbnRhdGlvbiBvZiBNUElDIGhhcyBtYW55IGRpZmZlcmVuY2VzIGZyb20gdGhlIG9yaWdpbmFsIG9uZQorICovCisKKy8qCisgKiBHbG9iYWwgcmVnaXN0ZXJzCisgKi8KKworI2RlZmluZSBUU0kxMDhfR1JFR19CQVNFCQkweDAwMDAwCisjZGVmaW5lIFRTSTEwOF9HUkVHX0ZFQVRVUkVfMAkJMHgwMDAwMAorI2RlZmluZSBUU0kxMDhfR1JFR19HTE9CQUxfQ09ORl8wCTB4MDAwMDQKKyNkZWZpbmUgVFNJMTA4X0dSRUdfVkVORE9SX0lECQkweDAwMDBjCisjZGVmaW5lIFRTSTEwOF9HUkVHX0lQSV9WRUNUT1JfUFJJXzAJMHgwMDIwNAkJLyogRG9vcmJlbGwgMCAqLworI2RlZmluZSBUU0kxMDhfR1JFR19JUElfU1RSSURFCQkweDBjCisjZGVmaW5lIFRTSTEwOF9HUkVHX1NQVVJJT1VTCQkweDAwMDEwCisjZGVmaW5lIFRTSTEwOF9HUkVHX1RJTUVSX0ZSRVEJCTB4MDAwMTQKKworLyoKKyAqIFRpbWVyIHJlZ2lzdGVycworICovCisjZGVmaW5lIFRTSTEwOF9USU1FUl9CQVNFCQkweDAwMzAKKyNkZWZpbmUgVFNJMTA4X1RJTUVSX1NUUklERQkJMHgxMAorI2RlZmluZSBUU0kxMDhfVElNRVJfQ1VSUkVOVF9DTlQJMHgwMDAwMAorI2RlZmluZSBUU0kxMDhfVElNRVJfQkFTRV9DTlQJCTB4MDAwMDQKKyNkZWZpbmUgVFNJMTA4X1RJTUVSX1ZFQ1RPUl9QUkkJCTB4MDAwMDgKKyNkZWZpbmUgVFNJMTA4X1RJTUVSX0RFU1RJTkFUSU9OCTB4MDAwMGMKKworLyoKKyAqIFBlci1Qcm9jZXNzb3IgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgVFNJMTA4X0NQVV9CQVNFCQkJMHgwMDMwMAorI2RlZmluZSBUU0kxMDhfQ1BVX1NUUklERQkJMHgwMDA0MAorI2RlZmluZSBUU0kxMDhfQ1BVX0lQSV9ESVNQQVRDSF8wCTB4MDAyMDAKKyNkZWZpbmUgVFNJMTA4X0NQVV9JUElfRElTUEFUQ0hfU1RSSURFCTB4MDAwMDAKKyNkZWZpbmUgVFNJMTA4X0NQVV9DVVJSRU5UX1RBU0tfUFJJCTB4MDAwMDAKKyNkZWZpbmUgVFNJMTA4X0NQVV9XSE9BTUkJCTB4ZmZmZmZmZmYKKyNkZWZpbmUgVFNJMTA4X0NQVV9JTlRBQ0sJCTB4MDAwMDQKKyNkZWZpbmUgVFNJMTA4X0NQVV9FT0kJCQkweDAwMDA4CisKKy8qCisgKiBQZXItc291cmNlIHJlZ2lzdGVycworICovCisjZGVmaW5lIFRTSTEwOF9JUlFfQkFTRQkJCTB4MDAxMDAKKyNkZWZpbmUgVFNJMTA4X0lSUV9TVFJJREUJCTB4MDAwMDgKKyNkZWZpbmUgVFNJMTA4X0lSUV9WRUNUT1JfUFJJCQkweDAwMDAwCisjZGVmaW5lIFRTSTEwOF9WRUNQUklfVkVDVE9SX01BU0sJMHgwMDAwMDBmZgorI2RlZmluZSBUU0kxMDhfVkVDUFJJX1BPTEFSSVRZX1BPU0lUSVZFCTB4MDEwMDAwMDAKKyNkZWZpbmUgVFNJMTA4X1ZFQ1BSSV9QT0xBUklUWV9ORUdBVElWRQkweDAwMDAwMDAwCisjZGVmaW5lIFRTSTEwOF9WRUNQUklfU0VOU0VfTEVWRUwJMHgwMjAwMDAwMAorI2RlZmluZSBUU0kxMDhfVkVDUFJJX1NFTlNFX0VER0UJMHgwMDAwMDAwMAorI2RlZmluZSBUU0kxMDhfVkVDUFJJX1BPTEFSSVRZX01BU0sJMHgwMTAwMDAwMAorI2RlZmluZSBUU0kxMDhfVkVDUFJJX1NFTlNFX01BU0sJMHgwMjAwMDAwMAorI2RlZmluZSBUU0kxMDhfSVJRX0RFU1RJTkFUSU9OCQkweDAwMDA0CisKKy8qIHdlaXJkIG1waWMgcmVnaXN0ZXIgaW5kaWNlcyBhbmQgbWFzayBiaXRzIGluIHRoZSBIVyBpbmZvIGFycmF5ICovCitlbnVtIHsKKwlNUElDX0lEWF9HUkVHX0JBU0UgPSAwLAorCU1QSUNfSURYX0dSRUdfRkVBVFVSRV8wLAorCU1QSUNfSURYX0dSRUdfR0xPQkFMX0NPTkZfMCwKKwlNUElDX0lEWF9HUkVHX1ZFTkRPUl9JRCwKKwlNUElDX0lEWF9HUkVHX0lQSV9WRUNUT1JfUFJJXzAsCisJTVBJQ19JRFhfR1JFR19JUElfU1RSSURFLAorCU1QSUNfSURYX0dSRUdfU1BVUklPVVMsCisJTVBJQ19JRFhfR1JFR19USU1FUl9GUkVRLAorCisJTVBJQ19JRFhfVElNRVJfQkFTRSwKKwlNUElDX0lEWF9USU1FUl9TVFJJREUsCisJTVBJQ19JRFhfVElNRVJfQ1VSUkVOVF9DTlQsCisJTVBJQ19JRFhfVElNRVJfQkFTRV9DTlQsCisJTVBJQ19JRFhfVElNRVJfVkVDVE9SX1BSSSwKKwlNUElDX0lEWF9USU1FUl9ERVNUSU5BVElPTiwKKworCU1QSUNfSURYX0NQVV9CQVNFLAorCU1QSUNfSURYX0NQVV9TVFJJREUsCisJTVBJQ19JRFhfQ1BVX0lQSV9ESVNQQVRDSF8wLAorCU1QSUNfSURYX0NQVV9JUElfRElTUEFUQ0hfU1RSSURFLAorCU1QSUNfSURYX0NQVV9DVVJSRU5UX1RBU0tfUFJJLAorCU1QSUNfSURYX0NQVV9XSE9BTUksCisJTVBJQ19JRFhfQ1BVX0lOVEFDSywKKwlNUElDX0lEWF9DUFVfRU9JLAorCisJTVBJQ19JRFhfSVJRX0JBU0UsCisJTVBJQ19JRFhfSVJRX1NUUklERSwKKwlNUElDX0lEWF9JUlFfVkVDVE9SX1BSSSwKKworCU1QSUNfSURYX1ZFQ1BSSV9WRUNUT1JfTUFTSywKKwlNUElDX0lEWF9WRUNQUklfUE9MQVJJVFlfUE9TSVRJVkUsCisJTVBJQ19JRFhfVkVDUFJJX1BPTEFSSVRZX05FR0FUSVZFLAorCU1QSUNfSURYX1ZFQ1BSSV9TRU5TRV9MRVZFTCwKKwlNUElDX0lEWF9WRUNQUklfU0VOU0VfRURHRSwKKwlNUElDX0lEWF9WRUNQUklfUE9MQVJJVFlfTUFTSywKKwlNUElDX0lEWF9WRUNQUklfU0VOU0VfTUFTSywKKwlNUElDX0lEWF9JUlFfREVTVElOQVRJT04sCisJTVBJQ19JRFhfRU5ECit9OworCisKICNpZmRlZiBDT05GSUdfTVBJQ19CUk9LRU5fVTMKIC8qIEZpeHVwIHRhYmxlIGVudHJ5ICovCiBzdHJ1Y3QgbXBpY19pcnFfZml4dXAKQEAgLTE3MSwxNSArMjcwLDI5IEBACiAJdm9sYXRpbGUgdTMyIF9faW9tZW0JKmNwdXJlZ3NbTVBJQ19NQVhfQ1BVU107CiAJdm9sYXRpbGUgdTMyIF9faW9tZW0JKmlzdXNbTVBJQ19NQVhfSVNVXTsKIAorI2lmZGVmIENPTkZJR19NUElDX1dFSVJECisJLyogUG9pbnRlciB0byBIVyBpbmZvIGFycmF5ICovCisJdTMyCQkJKmh3X3NldDsKKyNlbmRpZgorCiAJLyogbGluayAqLwogCXN0cnVjdCBtcGljCQkqbmV4dDsKIH07CiAKKy8qCisgKiBNUElDIGZsYWdzIChwYXNzZWQgdG8gbXBpY19hbGxvYykKKyAqCisgKiBUaGUgdG9wIDQgYml0cyBjb250YWluIGFuIE1QSUMgYmh3IGlkIHRoYXQgaXMgdXNlZCB0byBpbmRleCB0aGUKKyAqIHJlZ2lzdGVyIG9mZnNldHMgYW5kIHNvbWUgbWFza3Mgd2hlbiBDT05GSUdfTVBJQ19XRUlSRCBpcyBzZXQuCisgKiBOb3RlIHNldHRpbmcgYW55IElEIChsZWF2aW5nIHRob3NlIGJpdHMgdG8gMCkgbWVhbnMgc3RhbmRhcmQgTVBJQworICovCisKIC8qIFRoaXMgaXMgdGhlIHByaW1hcnkgY29udHJvbGxlciwgb25seSB0aGF0IG9uZSBoYXMgSVBJcyBhbmQKICAqIGhhcyBhZmluaXR5IGNvbnRyb2wuIEEgbm9uLXByaW1hcnkgTVBJQyBhbHdheXMgdXNlcyBDUFUwCiAgKiByZWdpc3RlcnMgb25seQogICovCiAjZGVmaW5lIE1QSUNfUFJJTUFSWQkJCTB4MDAwMDAwMDEKKwogLyogU2V0IHRoaXMgZm9yIGEgYmlnLWVuZGlhbiBNUElDICovCiAjZGVmaW5lIE1QSUNfQklHX0VORElBTgkJCTB4MDAwMDAwMDIKIC8qIEJyb2tlbiBVMyBNUElDICovCkBAIC0xODgsNiArMzAxLDE4IEBACiAjZGVmaW5lIE1QSUNfQlJPS0VOX0lQSQkJCTB4MDAwMDAwMDgKIC8qIE1QSUMgd2FudHMgYSByZXNldCAqLwogI2RlZmluZSBNUElDX1dBTlRTX1JFU0VUCQkweDAwMDAwMDEwCisvKiBTcHVyaW91cyB2ZWN0b3IgcmVxdWlyZXMgRU9JICovCisjZGVmaW5lIE1QSUNfU1BWX0VPSQkJCTB4MDAwMDAwMjAKKy8qIE5vIHBhc3N0aHJvdWdoIGRpc2FibGUgKi8KKyNkZWZpbmUgTVBJQ19OT19QVEhST1VfRElTCQkweDAwMDAwMDQwCisKKy8qIE1QSUMgSFcgbW9kaWZpY2F0aW9uIElEICovCisjZGVmaW5lIE1QSUNfUkVHU0VUX01BU0sJCTB4ZjAwMDAwMDAKKyNkZWZpbmUgTVBJQ19SRUdTRVQodmFsKQkJKCgodmFsKSAmIDB4ZiApIDw8IDI4KQorI2RlZmluZSBNUElDX0dFVF9SRUdTRVQoZmxhZ3MpCQkoKChmbGFncykgPj4gMjgpICYgMHhmKQorCisjZGVmaW5lCU1QSUNfUkVHU0VUX1NUQU5EQVJECQlNUElDX1JFR1NFVCgwKQkvKiBPcmlnaW5hbCBNUElDICovCisjZGVmaW5lCU1QSUNfUkVHU0VUX1RTSTEwOAkJTVBJQ19SRUdTRVQoMSkJLyogVHNpMTA4LzEwOSBQSUMgKi8KIAogLyogQWxsb2NhdGUgdGhlIGNvbnRyb2xsZXIgc3RydWN0dXJlIGFuZCBzZXR1cCB0aGUgbGludXggaXJxIGRlc2NzCiAgKiBmb3IgdGhlIHJhbmdlIGlmIGludGVycnVwdHMgcGFzc2VkIGluLiBObyBIVyBpbml0aWFsaXphdGlvbiBpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWNhLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAppbmRleCAyZDQ1ODVmLi4wYTRlNWM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3BhY2EuaApAQCAtMjMsNiArMjMsNyBAQAogcmVnaXN0ZXIgc3RydWN0IHBhY2Ffc3RydWN0ICpsb2NhbF9wYWNhIGFzbSgicjEzIik7CiAjZGVmaW5lIGdldF9wYWNhKCkJbG9jYWxfcGFjYQogI2RlZmluZSBnZXRfbHBwYWNhKCkJKGdldF9wYWNhKCktPmxwcGFjYV9wdHIpCisjZGVmaW5lIGdldF9zbGJfc2hhZG93KCkJKGdldF9wYWNhKCktPnNsYl9zaGFkb3dfcHRyKQogCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiAKQEAgLTkzLDExICs5NCwxNCBAQAogCXU2NCBzYXZlZF9yMTsJCQkvKiByMSBzYXZlIGZvciBSVEFTIGNhbGxzICovCiAJdTY0IHNhdmVkX21zcjsJCQkvKiBNU1Igc2F2ZWQgaGVyZSBieSBlbnRlcl9ydGFzICovCiAJdTggcHJvY19lbmFibGVkOwkJLyogaXJxIHNvZnQtZW5hYmxlIGZsYWcgKi8KKwl1OCBpb19zeW5jOwkJCS8qIHdyaXRlbCgpIG5lZWRzIHNwaW5fdW5sb2NrIHN5bmMgKi8KIAogCS8qIFN0dWZmIGZvciBhY2N1cmF0ZSB0aW1lIGFjY291bnRpbmcgKi8KIAl1NjQgdXNlcl90aW1lOwkJCS8qIGFjY3VtdWxhdGVkIHVzZXJtb2RlIFRCIHRpY2tzICovCiAJdTY0IHN5c3RlbV90aW1lOwkJLyogYWNjdW11bGF0ZWQgc3lzdGVtIFRCIHRpY2tzICovCiAJdTY0IHN0YXJ0cHVycjsJCQkvKiBQVVJSL1RCIHZhbHVlIHNuYXBzaG90ICovCisKKwlzdHJ1Y3Qgc2xiX3NoYWRvdyAqc2xiX3NoYWRvd19wdHI7CiB9OwogCiBleHRlcm4gc3RydWN0IHBhY2Ffc3RydWN0IHBhY2FbXTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGFnZS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKaW5kZXggZmI1OTdiMy4uYjRkMzhiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wYWdlLmgKQEAgLTU1LDEyICs1NSw2IEBACiAjZGVmaW5lIFBBR0VfT0ZGU0VUICAgICBBU01fQ09OU1QoQ09ORklHX0tFUk5FTF9TVEFSVCkKICNkZWZpbmUgS0VSTkVMQkFTRSAgICAgIChQQUdFX09GRlNFVCArIFBIWVNJQ0FMX1NUQVJUKQogCi0jaWZkZWYgQ09ORklHX0RJU0NPTlRJR01FTQotI2RlZmluZSBwYWdlX3RvX3BmbihwYWdlKQlkaXNjb250aWdtZW1fcGFnZV90b19wZm4ocGFnZSkKLSNkZWZpbmUgcGZuX3RvX3BhZ2UocGZuKQlkaXNjb250aWdtZW1fcGZuX3RvX3BhZ2UocGZuKQotI2RlZmluZSBwZm5fdmFsaWQocGZuKQkJZGlzY29udGlnbWVtX3Bmbl92YWxpZChwZm4pCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19GTEFUTUVNCiAjZGVmaW5lIHBmbl92YWxpZChwZm4pCQkoKHBmbikgPCBtYXhfbWFwbnIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKaW5kZXggOWYwOTE3Yy4uYWU2M2RiNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wZ2FsbG9jLmgKQEAgLTExNyw3ICsxMTcsNyBAQAogCXB0ZV9mcmVlX2tlcm5lbChwYWdlX2FkZHJlc3MocHRlcGFnZSkpOwogfQogCi0jZGVmaW5lIFBHRl9DQUNIRU5VTV9NQVNLCTB4ZgorI2RlZmluZSBQR0ZfQ0FDSEVOVU1fTUFTSwkweDMKIAogdHlwZWRlZiBzdHJ1Y3QgcGd0YWJsZV9mcmVlIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHBjLXBjaS5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKaW5kZXggY2Y3OWJjNy4uMTExNTc1NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcGMtcGNpLmgKQEAgLTY5LDYgKzY5LDE3IEBACiB2b2lkIGVlaF9zbG90X2Vycm9yX2RldGFpbCAoc3RydWN0IHBjaV9kbiAqcGRuLCBpbnQgc2V2ZXJpdHkpOwogCiAvKioKKyAqIHJ0YXNfcGNpX2VuYWJsZW8gLSBlbmFibGUgSU8gdHJhbnNmZXJzIGZvciB0aGlzIHNsb3QKKyAqIEBwZG46ICAgICAgIHBjaSBkZXZpY2Ugbm9kZQorICogQGZ1bmN0aW9uOiAgZWl0aGVyIEVFSF9USEFXX01NSU8gb3IgRUVIX1RIQVdfRE1BIAorICoKKyAqIEVuYWJsZSBJL08gdHJhbnNmZXJzIHRvIHRoaXMgc2xvdCAKKyAqLworI2RlZmluZSBFRUhfVEhBV19NTUlPIDIKKyNkZWZpbmUgRUVIX1RIQVdfRE1BICAzCitpbnQgcnRhc19wY2lfZW5hYmxlKHN0cnVjdCBwY2lfZG4gKnBkbiwgaW50IGZ1bmN0aW9uKTsKKworLyoqCiAgKiBydGFzX3NldF9zbG90X3Jlc2V0IC0tIHVuZnJlZXplIGEgZnJvemVuIHNsb3QKICAqCiAgKiBDbGVhciB0aGUgRUVILWZyb3plbiBjb25kaXRpb24gb24gYSBzbG90LiAgVGhpcyByb3V0aW5lCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9wcm9jZXNzb3IuaAppbmRleCAyMmU1NGEyLi42Y2I2ZmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb2Nlc3Nvci5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvY2Vzc29yLmgKQEAgLTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgX0NIUlBfTW90b3JvbGEJMHgwNAkvKiBtb3Rvcm9sYSBjaHJwLCB0aGUgY29icmEgKi8KICNkZWZpbmUgX0NIUlBfSUJNCTB4MDUJLyogSUJNIGNocnAsIHRoZSBsb25ndHJhaWwgYW5kIGxvbmd0cmFpbCAyICovCiAjZGVmaW5lIF9DSFJQX1BlZ2Fzb3MJMHgwNgkvKiBHZW5lc2kvYnBsYW4ncyBQZWdhc29zIGFuZCBQZWdhc29zMiAqLworI2RlZmluZSBfQ0hSUF9icmlxCTB4MDcJLyogVG90YWxJbXBhY3QncyBicmlRICovCiAKICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoQ09ORklHX1BQQzMyKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3Byb20uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCmluZGV4IGIwOTVhMjguLjUyNDYyOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCisrKyBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHJvbS5oCkBAIC03Miw4ICs3Miw4IEBACiB9OwogCiBzdHJ1Y3QgZGV2aWNlX25vZGUgewotCWNoYXIJKm5hbWU7Ci0JY2hhcgkqdHlwZTsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKnR5cGU7CiAJcGhhbmRsZQlub2RlOwogCXBoYW5kbGUgbGludXhfcGhhbmRsZTsKIAljaGFyCSpmdWxsX25hbWU7CkBAIC0xNjAsNyArMTYwLDcgQEAKIGV4dGVybiB2b2lkIGVhcmx5X2luaXRfZGV2dHJlZSh2b2lkICopOwogZXh0ZXJuIGludCBkZXZpY2VfaXNfY29tcGF0aWJsZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldmljZSwgY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgbWFjaGluZV9pc19jb21wYXRpYmxlKGNvbnN0IGNoYXIgKmNvbXBhdCk7Ci1leHRlcm4gdm9pZCAqZ2V0X3Byb3BlcnR5KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKK2V4dGVybiBjb25zdCB2b2lkICpnZXRfcHJvcGVydHkoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCBjb25zdCBjaGFyICpuYW1lLAogCQlpbnQgKmxlbnApOwogZXh0ZXJuIHZvaWQgcHJpbnRfcHJvcGVydGllcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpOwogZXh0ZXJuIGludCBwcm9tX25fYWRkcl9jZWxscyhzdHJ1Y3QgZGV2aWNlX25vZGUqIG5wKTsKQEAgLTE5Nyw4ICsxOTcsOCBAQAogICovCiAKIAotLyogSGVscGVyIHRvIHJlYWQgYSBiaWcgbnVtYmVyICovCi1zdGF0aWMgaW5saW5lIHU2NCBvZl9yZWFkX251bWJlcih1MzIgKmNlbGwsIGludCBzaXplKQorLyogSGVscGVyIHRvIHJlYWQgYSBiaWcgbnVtYmVyOyBzaXplIGlzIGluIGNlbGxzIChub3QgYnl0ZXMpICovCitzdGF0aWMgaW5saW5lIHU2NCBvZl9yZWFkX251bWJlcihjb25zdCB1MzIgKmNlbGwsIGludCBzaXplKQogewogCXU2NCByID0gMDsKIAl3aGlsZSAoc2l6ZS0tKQpAQCAtMjA2LDE4ICsyMDYsMjggQEAKIAlyZXR1cm4gcjsKIH0KIAorLyogTGlrZSBvZl9yZWFkX251bWJlciwgYnV0IHdlIHdhbnQgYW4gdW5zaWduZWQgbG9uZyByZXN1bHQgKi8KKyNpZmRlZiBDT05GSUdfUFBDMzIKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBvZl9yZWFkX3Vsb25nKGNvbnN0IHUzMiAqY2VsbCwgaW50IHNpemUpCit7CisJcmV0dXJuIGNlbGxbc2l6ZS0xXTsKK30KKyNlbHNlCisjZGVmaW5lIG9mX3JlYWRfdWxvbmcoY2VsbCwgc2l6ZSkJb2ZfcmVhZF9udW1iZXIoY2VsbCwgc2l6ZSkKKyNlbmRpZgorCiAvKiBUcmFuc2xhdGUgYW4gT0YgYWRkcmVzcyBibG9jayBpbnRvIGEgQ1BVIHBoeXNpY2FsIGFkZHJlc3MKICAqLwogI2RlZmluZSBPRl9CQURfQUREUgkoKHU2NCktMSkKLWV4dGVybiB1NjQgb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgdTMyICphZGRyKTsKK2V4dGVybiB1NjQgb2ZfdHJhbnNsYXRlX2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpucCwgY29uc3QgdTMyICphZGRyKTsKIAogLyogRXh0cmFjdCBhbiBhZGRyZXNzIGZyb20gYSBkZXZpY2UsIHJldHVybnMgdGhlIHJlZ2lvbiBzaXplIGFuZAogICogdGhlIGFkZHJlc3Mgc3BhY2UgZmxhZ3MgdG9vLiBUaGUgUENJIHZlcnNpb24gdXNlcyBhIEJBUiBudW1iZXIKICAqIGluc3RlYWQgb2YgYW4gYWJzb2x1dGUgaW5kZXgKICAqLwotZXh0ZXJuIHUzMiAqb2ZfZ2V0X2FkZHJlc3Moc3RydWN0IGRldmljZV9ub2RlICpkZXYsIGludCBpbmRleCwKK2V4dGVybiBjb25zdCB1MzIgKm9mX2dldF9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgaW5kZXgsCiAJCQkgICB1NjQgKnNpemUsIHVuc2lnbmVkIGludCAqZmxhZ3MpOwotZXh0ZXJuIHUzMiAqb2ZfZ2V0X3BjaV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyX25vLAorZXh0ZXJuIGNvbnN0IHUzMiAqb2ZfZ2V0X3BjaV9hZGRyZXNzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZGV2LCBpbnQgYmFyX25vLAogCQkJICAgICAgIHU2NCAqc2l6ZSwgdW5zaWduZWQgaW50ICpmbGFncyk7CiAKIC8qIEdldCBhbiBhZGRyZXNzIGFzIGEgcmVzb3VyY2UuIE5vdGUgdGhhdCBpZiB5b3VyIGFkZHJlc3MgaXMKQEAgLTIzNCw3ICsyNDQsNyBAQAogLyogUGFyc2UgdGhlIGlibSxkbWEtd2luZG93IHByb3BlcnR5IG9mIGFuIE9GIG5vZGUgaW50byB0aGUgYnVzbm8sIHBoeXMgYW5kCiAgKiBzaXplIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgb2ZfcGFyc2VfZG1hX3dpbmRvdyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB1bnNpZ25lZCBjaGFyICpkbWFfd2luZG93X3Byb3AsCit2b2lkIG9mX3BhcnNlX2RtYV93aW5kb3coc3RydWN0IGRldmljZV9ub2RlICpkbiwgY29uc3Qgdm9pZCAqZG1hX3dpbmRvd19wcm9wLAogCQl1bnNpZ25lZCBsb25nICpidXNubywgdW5zaWduZWQgbG9uZyAqcGh5cywgdW5zaWduZWQgbG9uZyAqc2l6ZSk7CiAKIGV4dGVybiB2b2lkIGtkdW1wX21vdmVfZGV2aWNlX3RyZWUodm9pZCk7CkBAIC0yNTksNyArMjY5LDcgQEAKIAl1MzIgc3BlY2lmaWVyW09GX01BWF9JUlFfU1BFQ107CS8qIFNwZWNpZmllciBjb3B5ICovCiB9OwogCi0vKioqCisvKioKICAqIG9mX2lycV9tYXBfaW5pdCAtIEluaXRpYWxpemUgdGhlIGlycSByZW1hcHBlcgogICogQGZsYWdzOglmbGFncyBkZWZpbmluZyB3b3JrYXJvdW5kcyB0byBlbmFibGUKICAqCkBAIC0yNzIsMTAgKzI4MiwxMSBAQAogCiBleHRlcm4gdm9pZCBvZl9pcnFfbWFwX2luaXQodW5zaWduZWQgaW50IGZsYWdzKTsKIAotLyoqKgorLyoqCiAgKiBvZl9pcnFfbWFwX3JhdyAtIExvdyBsZXZlbCBpbnRlcnJ1cHQgdHJlZSBwYXJzaW5nCiAgKiBAcGFyZW50Ogl0aGUgZGV2aWNlIGludGVycnVwdCBwYXJlbnQKICAqIEBpbnRzcGVjOglpbnRlcnJ1cHQgc3BlY2lmaWVyICgiaW50ZXJydXB0cyIgcHJvcGVydHkgb2YgdGhlIGRldmljZSkKKyAqIEBvaW50c2l6ZTogICBzaXplIG9mIHRoZSBwYXNzZWQgaW4gaW50ZXJydXB0IHNwZWNpZmllcgogICogQGFkZHI6CWFkZHJlc3Mgc3BlY2lmaWVyIChzdGFydCBvZiAicmVnIiBwcm9wZXJ0eSBvZiB0aGUgZGV2aWNlKQogICogQG91dF9pcnE6CXN0cnVjdHVyZSBvZl9pcnEgZmlsbGVkIGJ5IHRoaXMgZnVuY3Rpb24KICAqCkBAIC0yODgsMTEgKzI5OSwxMiBAQAogICoKICAqLwogCi1leHRlcm4gaW50IG9mX2lycV9tYXBfcmF3KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LCB1MzIgKmludHNwZWMsIHUzMiAqYWRkciwKK2V4dGVybiBpbnQgb2ZfaXJxX21hcF9yYXcoc3RydWN0IGRldmljZV9ub2RlICpwYXJlbnQsIGNvbnN0IHUzMiAqaW50c3BlYywKKwkJCSAgdTMyIG9pbnRzaXplLCBjb25zdCB1MzIgKmFkZHIsCiAJCQkgIHN0cnVjdCBvZl9pcnEgKm91dF9pcnEpOwogCiAKLS8qKioKKy8qKgogICogb2ZfaXJxX21hcF9vbmUgLSBSZXNvbHZlIGFuIGludGVycnVwdCBmb3IgYSBkZXZpY2UKICAqIEBkZXZpY2U6CXRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJydXB0IGlzIHRvIGJlIHJlc29sdmVkCiAgKiBAaW5kZXg6ICAgICAJaW5kZXggb2YgdGhlIGludGVycnVwdCB0byByZXNvbHZlCkBAIC0zMDUsNyArMzE3LDcgQEAKIGV4dGVybiBpbnQgb2ZfaXJxX21hcF9vbmUoc3RydWN0IGRldmljZV9ub2RlICpkZXZpY2UsIGludCBpbmRleCwKIAkJCSAgc3RydWN0IG9mX2lycSAqb3V0X2lycSk7CiAKLS8qKioKKy8qKgogICogb2ZfaXJxX21hcF9wY2kgLSBSZXNvbHZlIHRoZSBpbnRlcnJ1cHQgZm9yIGEgUENJIGRldmljZQogICogQHBkZXY6CXRoZSBkZXZpY2Ugd2hvc2UgaW50ZXJydXB0IGlzIHRvIGJlIHJlc29sdmVkCiAgKiBAb3V0X2lycToJc3RydWN0dXJlIG9mX2lycSBmaWxsZWQgYnkgdGhpcyBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvcHRyYWNlLmgKaW5kZXggZGM0Y2I5Yy4uNDQzNWVmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3B0cmFjZS5oCkBAIC0yMTUsMTIgKzIxNSwxMCBAQAogI2RlZmluZSBQVFJBQ0VfR0VUVlJSRUdTCTE4CiAjZGVmaW5lIFBUUkFDRV9TRVRWUlJFR1MJMTkKIAotI2lmbmRlZiBfX3Bvd2VycGM2NF9fCiAvKiBHZXQvc2V0IGFsbCB0aGUgdXBwZXIgMzItYml0cyBvZiB0aGUgU1BFIHJlZ2lzdGVycywgYWNjdW11bGF0b3IsIGFuZAogICogc3BlZnNjciwgaW4gb25lIGdvICovCiAjZGVmaW5lIFBUUkFDRV9HRVRFVlJSRUdTCTIwCiAjZGVmaW5lIFBUUkFDRV9TRVRFVlJSRUdTCTIxCi0jZW5kaWYgLyogX19wb3dlcnBjNjRfXyAqLwogCiAvKgogICogR2V0IG9yIHNldCBhIGRlYnVnIHJlZ2lzdGVyLiBUaGUgZmlyc3QgMTYgYXJlIERBQlIgcmVnaXN0ZXJzIGFuZCB0aGUKQEAgLTIzNSw3ICsyMzMsNiBAQAogI2RlZmluZSBQUENfUFRSQUNFX0dFVEZQUkVHUwkweDk3CS8qIEdldCBGUFJzIDAgLSAzMSAqLwogI2RlZmluZSBQUENfUFRSQUNFX1NFVEZQUkVHUwkweDk2CS8qIFNldCBGUFJzIDAgLSAzMSAqLwogCi0jaWZkZWYgX19wb3dlcnBjNjRfXwogLyogQ2FsbHMgdG8gdHJhY2UgYSA2NGJpdCBwcm9ncmFtIGZyb20gYSAzMmJpdCBwcm9ncmFtICovCiAjZGVmaW5lIFBQQ19QVFJBQ0VfUEVFS1RFWFRfMzI2NCAweDk1CiAjZGVmaW5lIFBQQ19QVFJBQ0VfUEVFS0RBVEFfMzI2NCAweDk0CkBAIC0yNDMsNiArMjQwLDUgQEAKICNkZWZpbmUgUFBDX1BUUkFDRV9QT0tFREFUQV8zMjY0IDB4OTIKICNkZWZpbmUgUFBDX1BUUkFDRV9QRUVLVVNSXzMyNjQgIDB4OTEKICNkZWZpbmUgUFBDX1BUUkFDRV9QT0tFVVNSXzMyNjQgIDB4OTAKLSNlbmRpZiAvKiBfX3Bvd2VycGM2NF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3JlZy5oCmluZGV4IGNmNzM0NzUuLjNhOWZjYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9yZWcuaApAQCAtNTkyLDYgKzU5Miw3IEBACiAjZGVmaW5lIFBWXzYzMHAJMHgwMDQxCiAjZGVmaW5lIFBWXzk3ME1QCTB4MDA0NAogI2RlZmluZSBQVl9CRQkJMHgwMDcwCisjZGVmaW5lIFBWX1BBNlQJCTB4MDA5MAogCiAvKgogICogTnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIFNMQi4gSWYgdGhpcyBldmVyIGNoYW5nZXMgd2Ugc2hvdWxkIGhhbmRsZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9ydGFzLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3J0YXMuaAppbmRleCBhMzNjNmFjLi5kMzRmOWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3J0YXMuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3J0YXMuaApAQCAtMTcwLDYgKzE3MCw3IEBACiBleHRlcm4gaW50IHJ0YXNfZ2V0X3Bvd2VyX2xldmVsKGludCBwb3dlcmRvbWFpbiwgaW50ICpsZXZlbCk7CiBleHRlcm4gaW50IHJ0YXNfc2V0X3Bvd2VyX2xldmVsKGludCBwb3dlcmRvbWFpbiwgaW50IGxldmVsLCBpbnQgKnNldGxldmVsKTsKIGV4dGVybiBpbnQgcnRhc19zZXRfaW5kaWNhdG9yKGludCBpbmRpY2F0b3IsIGludCBpbmRleCwgaW50IG5ld192YWx1ZSk7CitleHRlcm4gaW50IHJ0YXNfc2V0X2luZGljYXRvcl9mYXN0KGludCBpbmRpY2F0b3IsIGludCBpbmRleCwgaW50IG5ld192YWx1ZSk7CiBleHRlcm4gdm9pZCBydGFzX3Byb2dyZXNzKGNoYXIgKnMsIHVuc2lnbmVkIHNob3J0IGhleCk7CiBleHRlcm4gdm9pZCBydGFzX2luaXRpYWxpemUodm9pZCk7CiAKQEAgLTIyOSw1ICsyMzAsMjEgQEAKIAogI2RlZmluZSBHTE9CQUxfSU5URVJSVVBUX1FVRVVFIDkwMDUKIAorLyoqCisgKiBydGFzX2NvbmZpZ19hZGRyIC0gRm9ybWF0IGEgYnVzbm8sIGRldmZuIGFuZCByZWcgZm9yIFJUQVMuCisgKiBAYnVzbm86IFRoZSBidXMgbnVtYmVyLgorICogQGRldmZuOiBUaGUgZGV2aWNlIGFuZCBmdW5jdGlvbiBudW1iZXIgYXMgZW5jb2RlZCBieSBQQ0lfREVWRk4oKS4KKyAqIEByZWc6IFRoZSByZWdpc3RlciBudW1iZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBlbmNvZGVzIHRoZSBnaXZlbiBidXNubywgZGV2Zm4gYW5kIHJlZ2lzdGVyIG51bWJlciBhcworICogcmVxdWlyZWQgZm9yIFJUQVMgY2FsbHMgdGhhdCB0YWtlIGEgImNvbmZpZ19hZGRyIiBwYXJhbWV0ZXIuCisgKiBTZWUgUEFQUiByZXF1aXJlbWVudCA3LjMuNC0xIGZvciBtb3JlIGluZm8uCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHJ0YXNfY29uZmlnX2FkZHIoaW50IGJ1c25vLCBpbnQgZGV2Zm4sIGludCByZWcpCit7CisJcmV0dXJuICgocmVnICYgMHhmMDApIDw8IDIwKSB8ICgoYnVzbm8gJiAweGZmKSA8PCAxNikgfAorCQkJKGRldmZuIDw8IDgpIHwgKHJlZyAmIDB4ZmYpOworfQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9QT1dFUlBDX1JUQVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc211LmgKaW5kZXggNTFlNjVmYy4uZTQ5ZjY0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcG93ZXJwYy9zbXUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NtdS5oCkBAIC01MTcsNyArNTE3LDcgQEAKICAqIFRoaXMgcmV0dXJucyB0aGUgcG9pbnRlciB0byBhbiBTTVUgInNkYiIgcGFydGl0aW9uIGRhdGEgb3IgTlVMTAogICogaWYgbm90IGZvdW5kLiBUaGUgZGF0YSBmb3JtYXQgaXMgZGVzY3JpYmVkIGJlbG93CiAgKi8KLWV4dGVybiBzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpzbXVfZ2V0X3NkYl9wYXJ0aXRpb24oaW50IGlkLAorZXh0ZXJuIGNvbnN0IHN0cnVjdCBzbXVfc2RicF9oZWFkZXIgKnNtdV9nZXRfc2RiX3BhcnRpdGlvbihpbnQgaWQsCiAJCQkJCXVuc2lnbmVkIGludCAqc2l6ZSk7CiAKIC8qIEdldCAic2RiIiBwYXJ0aXRpb24gZGF0YSBmcm9tIGFuIFNNVSBzYXRlbGxpdGUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BpbmxvY2suaAppbmRleCA4OTVjYjZkLi5jMzFlNDM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGlubG9jay5oCkBAIC0zNiw2ICszNiwxOSBAQAogI2RlZmluZSBMT0NLX1RPS0VOCTEKICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKyNkZWZpbmUgQ0xFQVJfSU9fU1lOQwkoZ2V0X3BhY2EoKS0+aW9fc3luYyA9IDApCisjZGVmaW5lIFNZTkNfSU8JCWRvIHsJCQkJCQlcCisJCQkJaWYgKHVubGlrZWx5KGdldF9wYWNhKCktPmlvX3N5bmMpKSB7CVwKKwkJCQkJbWIoKTsJCQkJXAorCQkJCQlnZXRfcGFjYSgpLT5pb19zeW5jID0gMDsJXAorCQkJCX0JCQkJCVwKKwkJCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBDTEVBUl9JT19TWU5DCisjZGVmaW5lIFNZTkNfSU8KKyNlbmRpZgorCiAvKgogICogVGhpcyByZXR1cm5zIHRoZSBvbGQgdmFsdWUgaW4gdGhlIGxvY2ssIHNvIHdlIHN1Y2NlZWRlZAogICogaW4gZ2V0dGluZyB0aGUgbG9jayBpZiB0aGUgcmV0dXJuIHZhbHVlIGlzIDAuCkBAIC02MSw2ICs3NCw3IEBACiAKIHN0YXRpYyBpbnQgX19pbmxpbmVfXyBfX3Jhd19zcGluX3RyeWxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CisJQ0xFQVJfSU9fU1lOQzsKIAlyZXR1cm4gX19zcGluX3RyeWxvY2sobG9jaykgPT0gMDsKIH0KIApAQCAtOTEsNiArMTA1LDcgQEAKIAogc3RhdGljIHZvaWQgX19pbmxpbmVfXyBfX3Jhd19zcGluX2xvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CisJQ0xFQVJfSU9fU1lOQzsKIAl3aGlsZSAoMSkgewogCQlpZiAobGlrZWx5KF9fc3Bpbl90cnlsb2NrKGxvY2spID09IDApKQogCQkJYnJlYWs7CkBAIC0xMDcsNiArMTIyLDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzX2RpczsKIAorCUNMRUFSX0lPX1NZTkM7CiAJd2hpbGUgKDEpIHsKIAkJaWYgKGxpa2VseShfX3NwaW5fdHJ5bG9jayhsb2NrKSA9PSAwKSkKIAkJCWJyZWFrOwpAQCAtMTI0LDYgKzE0MCw3IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19yYXdfc3Bpbl91bmxvY2socmF3X3NwaW5sb2NrX3QgKmxvY2spCiB7CisJU1lOQ19JTzsKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIyBfX3Jhd19zcGluX3VubG9ja1xuXHQiCiAJCQkJTFdTWU5DX09OX1NNUDogOiA6Im1lbW9yeSIpOwogCWxvY2stPnNsb2NrID0gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwdS5oCmluZGV4IGMwMmQxMDUuLmI0MmI1M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3B1LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcHUuaApAQCAtMTA2LDcgKzEwNiw3IEBACiBzdHJ1Y3Qgc3B1X3J1bnF1ZXVlOwogCiBzdHJ1Y3Qgc3B1IHsKLQljaGFyICpuYW1lOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJdW5zaWduZWQgbG9uZyBsb2NhbF9zdG9yZV9waHlzOwogCXU4ICpsb2NhbF9zdG9yZTsKIAl1bnNpZ25lZCBsb25nIHByb2JsZW1fcGh5czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3N5c3RlbS5oCmluZGV4IDczMDdhYTcuLjRiNDFkZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zeXN0ZW0uaApAQCAtNTMsNiArNTMsMTUgQEAKICNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlKDApCiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCisvKgorICogVGhpcyBpcyBhIGJhcnJpZXIgd2hpY2ggcHJldmVudHMgZm9sbG93aW5nIGluc3RydWN0aW9ucyBmcm9tIGJlaW5nCisgKiBzdGFydGVkIHVudGlsIHRoZSB2YWx1ZSBvZiB0aGUgYXJndW1lbnQgeCBpcyBrbm93bi4gIEZvciBleGFtcGxlLCBpZgorICogeCBpcyBhIHZhcmlhYmxlIGxvYWRlZCBmcm9tIG1lbW9yeSwgdGhpcyBwcmV2ZW50cyBmb2xsb3dpbmcKKyAqIGluc3RydWN0aW9ucyBmcm9tIGJlaW5nIGV4ZWN1dGVkIHVudGlsIHRoZSBsb2FkIGhhcyBiZWVuIHBlcmZvcm1lZC4KKyAqLworI2RlZmluZSBkYXRhX2JhcnJpZXIoeCkJXAorCWFzbSB2b2xhdGlsZSgidHdpIDAsJTAsMDsgaXN5bmMiIDogOiAiciIgKHgpIDogIm1lbW9yeSIpOworCiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiBzdHJ1Y3QgcHRfcmVnczsKIApAQCAtMTY4LDExICsxNzcsNiBAQAogZXh0ZXJuIHUzMiBib29rZV93ZHRfcGVyaW9kOwogI2VuZGlmIC8qIENPTkZJR19CT09LRV9XRFQgKi8KIAotLyogRUJDRElDIC0+IEFTQ0lJIGNvbnZlcnNpb24gZm9yIFswLTlBLVpdIG9uIGlTZXJpZXMgKi8KLWV4dGVybiB1bnNpZ25lZCBjaGFyIGUyYSh1bnNpZ25lZCBjaGFyKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyKiBzdHJuZTJhKHVuc2lnbmVkIGNoYXIgKmRlc3QsCi0JCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNyYywgc2l6ZV90IG4pOwotCiBzdHJ1Y3QgZGV2aWNlX25vZGU7CiBleHRlcm4gdm9pZCBub3RlX3Njc2lfaG9zdChzdHJ1Y3QgZGV2aWNlX25vZGUgKiwgdm9pZCAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90aW1lLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaAppbmRleCBkY2RlNDQxLi41Nzg1YWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RpbWUuaApAQCAtMzAsMTAgKzMwLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHRiX3RpY2tzX3Blcl9zZWM7CiBleHRlcm4gdTY0IHRiX3RvX3hzOwogZXh0ZXJuIHVuc2lnbmVkICAgICAgdGJfdG9fdXM7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB0Yl9sYXN0X3N0YW1wOwotZXh0ZXJuIHU2NCB0Yl9sYXN0X2ppZmZ5OwotCi1ERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgbG9uZywgbGFzdF9qaWZmeSk7CiAKIHN0cnVjdCBydGNfdGltZTsKIGV4dGVybiB2b2lkIHRvX3RtKGludCB0aW0sIHN0cnVjdCBydGNfdGltZSAqIHRtKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4LmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RzaTEwOC5oCmluZGV4IGM0YzI3OGQuLjJjNzAyZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdHNpMTA4LmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90c2kxMDguaApAQCAtMSwxNiArMSwxOCBAQAogLyoKLSAqIGluY2x1ZGUvYXNtLXBwYy90c2kxMDguaAotICoKICAqIGNvbW1vbiByb3V0aW5lIGFuZCBtZW1vcnkgbGF5b3V0IGZvciBUdW5kcmEgVFNJMTA4KEdyZW5kZWwpIGhvc3QgYnJpZGdlCiAgKiBtZW1vcnkgY29udHJvbGxlci4KICAqCiAgKiBBdXRob3I6IEphY29iIFBhbiAoamFjb2IucGFuQGZyZWVzY2FsZS5jb20pCiAgKgkgICBBbGV4IEJvdW5pbmUgKGFsZXhhbmRyZWJAdHVuZHJhLmNvbSkKLSAqIDIwMDQgKGMpIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4gIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgotICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0KLSAqIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcwotICogb3IgaW1wbGllZC4KKyAqCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICAqLworCiAjaWZuZGVmIF9fUFBDX0tFUk5FTF9UU0kxMDhfSAogI2RlZmluZSBfX1BQQ19LRVJORUxfVFNJMTA4X0gKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy90c2kxMDhfaXJxLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL3RzaTEwOF9pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTRkMDRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy90c2kxMDhfaXJxLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgVHVuZHJhIFNlbWljb25kdWN0b3IgQ29ycC4KKyAqIEFsZXggQm91bmluZSwgPGFsZXhhbmRyZWIgYXQgdHVuZHJhLmNvbSkuCisgKgorICogU2VlIGZpbGUgQ1JFRElUUyBmb3IgbGlzdCBvZiBwZW9wbGUgd2hvIGNvbnRyaWJ1dGVkIHRvIHRoaXMKKyAqIHByb2plY3QuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIGRlZmluaXRpb25zIGZvciBpbnRlcnJ1cHQgY29udHJvbGxlciBpbml0aWFsaXphdGlvbiBhbmQgZXh0ZXJuYWwgaW50ZXJydXB0CisgKiBkZW11bHRpcGxleGluZyBvbiBUU0kxMDhFTVUvU1ZCIGJvYXJkcy4KKyAqLworCisjaWZuZGVmIF9BU01fUFBDX1RTSTEwOF9JUlFfSAorI2RlZmluZSBfQVNNX1BQQ19UU0kxMDhfSVJRX0gKKworLyoKKyAqIFRzaTEwOCBpbnRlcnJ1cHRzCisgKi8KKyNpZm5kZWYgVFNJMTA4X0lSUV9SRUdfQkFTRQorI2RlZmluZSBUU0kxMDhfSVJRX1JFR19CQVNFCQkwCisjZW5kaWYKKworI2RlZmluZSBUU0kxMDhfSVJRKHgpCQkoVFNJMTA4X0lSUV9SRUdfQkFTRSArICh4KSkKKworI2RlZmluZSBUU0kxMDhfTUFYX1ZFQ1RPUlMJKDM2ICsgNCkJLyogMzYgc291cmNlcyArIFBDSSBJTlQgZGVtdXggKi8KKyNkZWZpbmUgTUFYX1RBU0tfUFJJTwkweEYKKworI2RlZmluZSBUU0kxMDhfSVJRX1NQVVJJT1VTCShUU0kxMDhfTUFYX1ZFQ1RPUlMpCisKKyNkZWZpbmUgREVGQVVMVF9QUklPX0xWTAkxMAkvKiBpbml0aWFsIHByaW9yaXR5IGxldmVsICovCisKKy8qIEludGVycnVwdCB2ZWN0b3JzIGFzc2lnbm1lbnQgdG8gZXh0ZXJuYWwgYW5kIGludGVybmFsCisgKiBzb3VyY2VzIG9mIHJlcXVlc3RzLiAqLworCisvKiBFWFRFUk5BTCBJTlRFUlJVUFQgU09VUkNFUyAqLworCisjZGVmaW5lIElSUV9UU0kxMDhfRVhUX0lOVDAJVFNJMTA4X0lSUSgwKQkvKiBFeHRlcm5hbCBTb3VyY2UgYXQgSU5UWzBdICovCisjZGVmaW5lIElSUV9UU0kxMDhfRVhUX0lOVDEJVFNJMTA4X0lSUSgxKQkvKiBFeHRlcm5hbCBTb3VyY2UgYXQgSU5UWzFdICovCisjZGVmaW5lIElSUV9UU0kxMDhfRVhUX0lOVDIJVFNJMTA4X0lSUSgyKQkvKiBFeHRlcm5hbCBTb3VyY2UgYXQgSU5UWzJdICovCisjZGVmaW5lIElSUV9UU0kxMDhfRVhUX0lOVDMJVFNJMTA4X0lSUSgzKQkvKiBFeHRlcm5hbCBTb3VyY2UgYXQgSU5UWzNdICovCisKKy8qIElOVEVSTkFMIElOVEVSUlVQVCBTT1VSQ0VTICovCisKKyNkZWZpbmUgSVJRX1RTSTEwOF9SRVNFUlZFRDAJVFNJMTA4X0lSUSg0KQkvKiBSZXNlcnZlZCBJUlEgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9SRVNFUlZFRDEJVFNJMTA4X0lSUSg1KQkvKiBSZXNlcnZlZCBJUlEgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9SRVNFUlZFRDIJVFNJMTA4X0lSUSg2KQkvKiBSZXNlcnZlZCBJUlEgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9SRVNFUlZFRDMJVFNJMTA4X0lSUSg3KQkvKiBSZXNlcnZlZCBJUlEgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9ETUEwCQlUU0kxMDhfSVJRKDgpCS8qIERNQTAgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9ETUExCQlUU0kxMDhfSVJRKDkpCS8qIERNQTEgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9ETUEyCQlUU0kxMDhfSVJRKDEwKQkvKiBETUEyICovCisjZGVmaW5lIElSUV9UU0kxMDhfRE1BMwkJVFNJMTA4X0lSUSgxMSkJLyogRE1BMyAqLworI2RlZmluZSBJUlFfVFNJMTA4X1VBUlQwCVRTSTEwOF9JUlEoMTIpCS8qIFVBUlQwICovCisjZGVmaW5lIElSUV9UU0kxMDhfVUFSVDEJVFNJMTA4X0lSUSgxMykJLyogVUFSVDEgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9JMkMJCVRTSTEwOF9JUlEoMTQpCS8qIEkyQyAqLworI2RlZmluZSBJUlFfVFNJMTA4X0dQSU8JCVRTSTEwOF9JUlEoMTUpCS8qIEdQSU8gKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9HSUdFMAlUU0kxMDhfSVJRKDE2KQkvKiBHSUdFMCAqLworI2RlZmluZSBJUlFfVFNJMTA4X0dJR0UxCVRTSTEwOF9JUlEoMTcpCS8qIEdJR0UxICovCisjZGVmaW5lIElSUV9UU0kxMDhfUkVTRVJWRUQ0CVRTSTEwOF9JUlEoMTgpCS8qIFJlc2VydmVkIElSUSAqLworI2RlZmluZSBJUlFfVFNJMTA4X0hMUAkJVFNJMTA4X0lSUSgxOSkJLyogSExQICovCisjZGVmaW5lIElSUV9UU0kxMDhfU0RSQU0JVFNJMTA4X0lSUSgyMCkJLyogU0RDICovCisjZGVmaW5lIElSUV9UU0kxMDhfUFJPQ19JRglUU0kxMDhfSVJRKDIxKQkvKiBQcm9jZXNzb3IgSUYgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9SRVNFUlZFRDUJVFNJMTA4X0lSUSgyMikJLyogUmVzZXJ2ZWQgSVJRICovCisjZGVmaW5lIElSUV9UU0kxMDhfUENJCQlUU0kxMDhfSVJRKDIzKQkvKiBQQ0kvWCBibG9jayAqLworCisjZGVmaW5lIElSUV9UU0kxMDhfTUJPWDAJVFNJMTA4X0lSUSgyNCkJLyogTWFpbGJveCAwIHJlZ2lzdGVyICovCisjZGVmaW5lIElSUV9UU0kxMDhfTUJPWDEJVFNJMTA4X0lSUSgyNSkJLyogTWFpbGJveCAxIHJlZ2lzdGVyICovCisjZGVmaW5lIElSUV9UU0kxMDhfTUJPWDIJVFNJMTA4X0lSUSgyNikJLyogTWFpbGJveCAyIHJlZ2lzdGVyICovCisjZGVmaW5lIElSUV9UU0kxMDhfTUJPWDMJVFNJMTA4X0lSUSgyNykJLyogTWFpbGJveCAzIHJlZ2lzdGVyICovCisKKyNkZWZpbmUgSVJRX1RTSTEwOF9EQkVMTDAJVFNJMTA4X0lSUSgyOCkJLyogRG9vcmJlbGwgMCAqLworI2RlZmluZSBJUlFfVFNJMTA4X0RCRUxMMQlUU0kxMDhfSVJRKDI5KQkvKiBEb29yYmVsbCAxICovCisjZGVmaW5lIElSUV9UU0kxMDhfREJFTEwyCVRTSTEwOF9JUlEoMzApCS8qIERvb3JiZWxsIDIgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9EQkVMTDMJVFNJMTA4X0lSUSgzMSkJLyogRG9vcmJlbGwgMyAqLworCisjZGVmaW5lIElSUV9UU0kxMDhfVElNRVIwCVRTSTEwOF9JUlEoMzIpCS8qIEdsb2JhbCBUaW1lciAwICovCisjZGVmaW5lIElSUV9UU0kxMDhfVElNRVIxCVRTSTEwOF9JUlEoMzMpCS8qIEdsb2JhbCBUaW1lciAxICovCisjZGVmaW5lIElSUV9UU0kxMDhfVElNRVIyCVRTSTEwOF9JUlEoMzQpCS8qIEdsb2JhbCBUaW1lciAyICovCisjZGVmaW5lIElSUV9UU0kxMDhfVElNRVIzCVRTSTEwOF9JUlEoMzUpCS8qIEdsb2JhbCBUaW1lciAzICovCisKKy8qCisgKiBQQ0kgYnVzIElOVEEjIC0gSU5URCMgbGluZXMgZGVtdWx0aXBsZXhvcgorICovCisjZGVmaW5lIElSUV9QQ0lfSU5UQURfQkFTRQlUU0kxMDhfSVJRKDM2KQorI2RlZmluZSBJUlFfUENJX0lOVEEJCShJUlFfUENJX0lOVEFEX0JBU0UgKyAwKQorI2RlZmluZSBJUlFfUENJX0lOVEIJCShJUlFfUENJX0lOVEFEX0JBU0UgKyAxKQorI2RlZmluZSBJUlFfUENJX0lOVEMJCShJUlFfUENJX0lOVEFEX0JBU0UgKyAyKQorI2RlZmluZSBJUlFfUENJX0lOVEQJCShJUlFfUENJX0lOVEFEX0JBU0UgKyAzKQorI2RlZmluZSBOVU1fUENJX0lSUVMJCSg0KQorCisvKiBudW1iZXIgb2YgZW50cmllcyBpbiB2ZWN0b3IgZGlzcGF0Y2ggdGFibGUgKi8KKyNkZWZpbmUgSVJRX1RTSTEwOF9UQUJfU0laRQkoVFNJMTA4X01BWF9WRUNUT1JTICsgMSkKKworLyogTWFwcGluZyBvZiBNUElDIG91dHB1dHMgdG8gcHJvY2Vzc29ycycgaW50ZXJydXB0IHBpbnMgKi8KKworI2RlZmluZSBJRElSX0lOVF9PVVQwCQkweDEKKyNkZWZpbmUgSURJUl9JTlRfT1VUMQkJMHgyCisjZGVmaW5lIElESVJfSU5UX09VVDIJCTB4NAorI2RlZmluZSBJRElSX0lOVF9PVVQzCQkweDgKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElSUSBsaW5lIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyAqLworCisvKiBJbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZXMgKi8KK3R5cGVkZWYgZW51bSB7CisJVFNJMTA4X0lSUV9ESVJFQ1RFRCwKKwlUU0kxMDhfSVJRX0RJU1RSSUJVVEVELAorfSBUU0kxMDhfSVJRX01PREU7CisjZW5kaWYJCQkJLyogIF9BU01fUFBDX1RTSTEwOF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy92aW8uaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvdmlvLmgKaW5kZXggZGM5YmQxMDEuLjRiNTFkNDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvdmlvLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy92aW8uaApAQCAtNDYsOCArNDYsOCBAQAogICovCiBzdHJ1Y3QgdmlvX2RldiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICppb21tdV90YWJsZTsgICAgIC8qIHZpb19tYXBfKiB1c2VzIHRoaXMgKi8KLQljaGFyICpuYW1lOwotCWNoYXIgKnR5cGU7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICp0eXBlOwogCXVpbnQzMl90IHVuaXRfYWRkcmVzczsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCXN0cnVjdCBkZXZpY2UgZGV2OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2NwbTIuaCBiL2luY2x1ZGUvYXNtLXBwYy9jcG0yLmgKaW5kZXggYzcwMzQ0Yi4uZjZhN2ZmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL2NwbTIuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvY3BtMi5oCkBAIC0xMDkzLDUgKzEwOTMsMTAwIEBACiAKICNkZWZpbmUgRkNDX1BTTVJfUk1JSQkoKHVpbnQpMHgwMDAyMDAwMCkJLyogVXNlIFJNSUkgaW50ZXJmYWNlICovCiAKKy8qIEZDQyBpb3AgJiBjbG9jayBjb25maWd1cmF0aW9uLiBCU1AgY29kZSBpcyByZXNwb25zaWJsZSB0byBkZWZpbmUgRnhfUlhDTEsgJiBGeF9UWENMSworICogaW4gb3JkZXIgdG8gdXNlIGNsb2NrLWNvbXB1dGluZyBzdHVmZiBiZWxvdyBmb3IgdGhlIEZDQyB4CisgKi8KKworLyogQXV0b21hdGljYWxseSBnZW5lcmF0ZXMgcmVnaXN0ZXIgY29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUgUENfQ0xLKHgpCSgodWludCkoMTw8KHgtMSkpKQkvKiBGQ0MgQ0xLIEkvTyBwb3J0cyAqLworCisjZGVmaW5lIENNWEZDUl9SRjFDUyh4KQkoKHVpbnQpKCh4LTUpPDwyNykpCS8qIEZDQzEgUmVjZWl2ZSBDbG9jayBTb3VyY2UgKi8KKyNkZWZpbmUgQ01YRkNSX1RGMUNTKHgpCSgodWludCkoKHgtNSk8PDI0KSkJLyogRkNDMSBUcmFuc21pdCBDbG9jayBTb3VyY2UgKi8KKyNkZWZpbmUgQ01YRkNSX1JGMkNTKHgpCSgodWludCkoKHgtOSk8PDE5KSkJLyogRkNDMiBSZWNlaXZlIENsb2NrIFNvdXJjZSAqLworI2RlZmluZSBDTVhGQ1JfVEYyQ1MoeCkgKCh1aW50KSgoeC05KTw8MTYpKQkvKiBGQ0MyIFRyYW5zbWl0IENsb2NrIFNvdXJjZSAqLworI2RlZmluZSBDTVhGQ1JfUkYzQ1MoeCkJKCh1aW50KSgoeC05KTw8MTEpKQkvKiBGQ0MzIFJlY2VpdmUgQ2xvY2sgU291cmNlICovCisjZGVmaW5lIENNWEZDUl9URjNDUyh4KSAoKHVpbnQpKCh4LTkpPDw4KSkJLyogRkNDMyBUcmFuc21pdCBDbG9jayBTb3VyY2UgKi8KKworI2RlZmluZSBQQ19GMVJYQ0xLCVBDX0NMSyhGMV9SWENMSykKKyNkZWZpbmUgUENfRjFUWENMSwlQQ19DTEsoRjFfVFhDTEspCisjZGVmaW5lIENNWDFfQ0xLX1JPVVRFCShDTVhGQ1JfUkYxQ1MoRjFfUlhDTEspIHwgQ01YRkNSX1RGMUNTKEYxX1RYQ0xLKSkKKyNkZWZpbmUgQ01YMV9DTEtfTUFTSwkoKHVpbnQpMHhmZjAwMDAwMCkKKworI2RlZmluZSBQQ19GMlJYQ0xLCVBDX0NMSyhGMl9SWENMSykKKyNkZWZpbmUgUENfRjJUWENMSwlQQ19DTEsoRjJfVFhDTEspCisjZGVmaW5lIENNWDJfQ0xLX1JPVVRFCShDTVhGQ1JfUkYyQ1MoRjJfUlhDTEspIHwgQ01YRkNSX1RGMkNTKEYyX1RYQ0xLKSkKKyNkZWZpbmUgQ01YMl9DTEtfTUFTSwkoKHVpbnQpMHgwMGZmMDAwMCkKKworI2RlZmluZSBQQ19GM1JYQ0xLCVBDX0NMSyhGM19SWENMSykKKyNkZWZpbmUgUENfRjNUWENMSwlQQ19DTEsoRjNfVFhDTEspCisjZGVmaW5lIENNWDNfQ0xLX1JPVVRFCShDTVhGQ1JfUkYzQ1MoRjNfUlhDTEspIHwgQ01YRkNSX1RGM0NTKEYzX1RYQ0xLKSkKKyNkZWZpbmUgQ01YM19DTEtfTUFTSwkoKHVpbnQpMHgwMDAwZmYwMCkKKworI2RlZmluZSBDUE1VWF9DTEtfTUFTSyAoQ01YM19DTEtfTUFTSyB8IENNWDJfQ0xLX01BU0spCisjZGVmaW5lIENQTVVYX0NMS19ST1VURSAoQ01YM19DTEtfUk9VVEUgfCBDTVgyX0NMS19ST1VURSkKKworI2RlZmluZSBDTEtfVFJYIChQQ19GM1RYQ0xLIHwgUENfRjNSWENMSyB8IFBDX0YyVFhDTEsgfCBQQ19GMlJYQ0xLKQorCisvKiBJL08gUGluIGFzc2lnbm1lbnQgZm9yIEZDQzEuICBJIGRvbid0IHlldCBrbm93IHRoZSBiZXN0IHdheSB0byBkbyB0aGlzLAorICogYnV0IHRoZXJlIGlzIGxpdHRsZSB2YXJpYXRpb24gYW1vbmcgdGhlIGNob2ljZXMuCisgKi8KKyNkZWZpbmUgUEExX0NPTAkJMHgwMDAwMDAwMVUKKyNkZWZpbmUgUEExX0NSUwkJMHgwMDAwMDAwMlUKKyNkZWZpbmUgUEExX1RYRVIJMHgwMDAwMDAwNFUKKyNkZWZpbmUgUEExX1RYRU4JMHgwMDAwMDAwOFUKKyNkZWZpbmUgUEExX1JYRFYJMHgwMDAwMDAxMFUKKyNkZWZpbmUgUEExX1JYRVIJMHgwMDAwMDAyMFUKKyNkZWZpbmUgUEExX1RYREFUCTB4MDAwMDNjMDBVCisjZGVmaW5lIFBBMV9SWERBVAkweDAwMDNjMDAwVQorI2RlZmluZSBQQTFfUFNPUkEwCShQQTFfUlhEQVQgfCBQQTFfVFhEQVQpCisjZGVmaW5lIFBBMV9QU09SQTEJKFBBMV9DT0wgfCBQQTFfQ1JTIHwgUEExX1RYRVIgfCBQQTFfVFhFTiB8IFwKKwkJUEExX1JYRFYgfCBQQTFfUlhFUikKKyNkZWZpbmUgUEExX0RJUkEwCShQQTFfUlhEQVQgfCBQQTFfQ1JTIHwgUEExX0NPTCB8IFBBMV9SWEVSIHwgUEExX1JYRFYpCisjZGVmaW5lIFBBMV9ESVJBMQkoUEExX1RYREFUIHwgUEExX1RYRU4gfCBQQTFfVFhFUikKKworCisvKiBJL08gUGluIGFzc2lnbm1lbnQgZm9yIEZDQzIuICBJIGRvbid0IHlldCBrbm93IHRoZSBiZXN0IHdheSB0byBkbyB0aGlzLAorICogYnV0IHRoZXJlIGlzIGxpdHRsZSB2YXJpYXRpb24gYW1vbmcgdGhlIGNob2ljZXMuCisgKi8KKyNkZWZpbmUgUEIyX1RYRVIJMHgwMDAwMDAwMVUKKyNkZWZpbmUgUEIyX1JYRFYJMHgwMDAwMDAwMlUKKyNkZWZpbmUgUEIyX1RYRU4JMHgwMDAwMDAwNFUKKyNkZWZpbmUgUEIyX1JYRVIJMHgwMDAwMDAwOFUKKyNkZWZpbmUgUEIyX0NPTAkJMHgwMDAwMDAxMFUKKyNkZWZpbmUgUEIyX0NSUwkJMHgwMDAwMDAyMFUKKyNkZWZpbmUgUEIyX1RYREFUCTB4MDAwMDAzYzBVCisjZGVmaW5lIFBCMl9SWERBVAkweDAwMDAzYzAwVQorI2RlZmluZSBQQjJfUFNPUkIwCShQQjJfUlhEQVQgfCBQQjJfVFhEQVQgfCBQQjJfQ1JTIHwgUEIyX0NPTCB8IFwKKwkJUEIyX1JYRVIgfCBQQjJfUlhEViB8IFBCMl9UWEVSKQorI2RlZmluZSBQQjJfUFNPUkIxCShQQjJfVFhFTikKKyNkZWZpbmUgUEIyX0RJUkIwCShQQjJfUlhEQVQgfCBQQjJfQ1JTIHwgUEIyX0NPTCB8IFBCMl9SWEVSIHwgUEIyX1JYRFYpCisjZGVmaW5lIFBCMl9ESVJCMQkoUEIyX1RYREFUIHwgUEIyX1RYRU4gfCBQQjJfVFhFUikKKworCisvKiBJL08gUGluIGFzc2lnbm1lbnQgZm9yIEZDQzMuICBJIGRvbid0IHlldCBrbm93IHRoZSBiZXN0IHdheSB0byBkbyB0aGlzLAorICogYnV0IHRoZXJlIGlzIGxpdHRsZSB2YXJpYXRpb24gYW1vbmcgdGhlIGNob2ljZXMuCisgKi8KKyNkZWZpbmUgUEIzX1JYRFYJMHgwMDAwNDAwMFUKKyNkZWZpbmUgUEIzX1JYRVIJMHgwMDAwODAwMFUKKyNkZWZpbmUgUEIzX1RYRVIJMHgwMDAxMDAwMFUKKyNkZWZpbmUgUEIzX1RYRU4JMHgwMDAyMDAwMFUKKyNkZWZpbmUgUEIzX0NPTAkJMHgwMDA0MDAwMFUKKyNkZWZpbmUgUEIzX0NSUwkJMHgwMDA4MDAwMFUKKyNkZWZpbmUgUEIzX1RYREFUCTB4MGYwMDAwMDBVCisjZGVmaW5lIFBDM19UWERBVAkweDAwMDAwMDEwVQorI2RlZmluZSBQQjNfUlhEQVQJMHgwMGYwMDAwMFUKKyNkZWZpbmUgUEIzX1BTT1JCMAkoUEIzX1JYREFUIHwgUEIzX1RYREFUIHwgUEIzX0NSUyB8IFBCM19DT0wgfCBcCisJCVBCM19SWEVSIHwgUEIzX1JYRFYgfCBQQjNfVFhFUiB8IFBCM19UWEVOKQorI2RlZmluZSBQQjNfUFNPUkIxCTAKKyNkZWZpbmUgUEIzX0RJUkIwCShQQjNfUlhEQVQgfCBQQjNfQ1JTIHwgUEIzX0NPTCB8IFBCM19SWEVSIHwgUEIzX1JYRFYpCisjZGVmaW5lIFBCM19ESVJCMQkoUEIzX1RYREFUIHwgUEIzX1RYRU4gfCBQQjNfVFhFUikKKyNkZWZpbmUgUEMzX0RJUkMxCShQQzNfVFhEQVQpCisKKy8qIEhhbmR5IG1hY3JvIHRvIHNwZWNpZnkgbWVtIGZvciBGQ0NzKi8KKyNkZWZpbmUgRkNDX01FTV9PRkZTRVQoeCkgKENQTV9GQ0NfU1BFQ0lBTF9CQVNFICsgKHgqMTI4KSkKKyNkZWZpbmUgRkNDMV9NRU1fT0ZGU0VUIEZDQ19NRU1fT0ZGU0VUKDApCisjZGVmaW5lIEZDQzJfTUVNX09GRlNFVCBGQ0NfTUVNX09GRlNFVCgxKQorI2RlZmluZSBGQ0MyX01FTV9PRkZTRVQgRkNDX01FTV9PRkZTRVQoMikKKwogI2VuZGlmIC8qIF9fQ1BNMl9fICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL2lvLmggYi9pbmNsdWRlL2FzbS1wcGMvaW8uaAppbmRleCA4OWM2ZjFiLi4zZDlhOWU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvaW8uaApAQCAtNjMsNyArNjMsNyBAQAogCWludCByZXQ7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJImxieiVVMSVYMSAlMCwlMTtcbiIKKwkJInN5bmM7IGxieiVVMSVYMSAlMCwlMTtcbiIKIAkJInR3aSAwLCUwLDA7XG4iCiAJCSJpc3luYyIgOiAiPXIiIChyZXQpIDogIm0iICgqYWRkcikpOwogCXJldHVybiByZXQ7CkBAIC03OCw3ICs3OCw3IEBACiB7CiAJaW50IHJldDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsaGJyeCAlMCwwLCUxO1xuIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBsaGJyeCAlMCwwLCUxO1xuIgogCQkJICAgICAidHdpIDAsJTAsMDtcbiIKIAkJCSAgICAgImlzeW5jIiA6ICI9ciIgKHJldCkgOgogCQkJICAgICAgInIiIChhZGRyKSwgIm0iICgqYWRkcikpOwpAQCAtODksNyArODksNyBAQAogewogCWludCByZXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGh6JVUxJVgxICUwLCUxO1xuIgorCV9fYXNtX18gX192b2xhdGlsZV9fKCJzeW5jOyBsaHolVTElWDEgJTAsJTE7XG4iCiAJCQkgICAgICJ0d2kgMCwlMCwwO1xuIgogCQkJICAgICAiaXN5bmMiIDogIj1yIiAocmV0KSA6ICJtIiAoKmFkZHIpKTsKIAlyZXR1cm4gcmV0OwpAQCAtOTcsMjAgKzk3LDIwIEBACiAKIGV4dGVybiBpbmxpbmUgdm9pZCBvdXRfbGUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGhicnggJTEsMCwlMjsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3RoYnJ4ICUxLDAsJTIiIDogIj1tIiAoKmFkZHIpIDoKIAkJCSAgICAgICJyIiAodmFsKSwgInIiIChhZGRyKSk7CiB9CiAKIGV4dGVybiBpbmxpbmUgdm9pZCBvdXRfYmUxNih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGglVTAlWDAgJTEsJTA7IGVpZWlvIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oInN5bmM7IHN0aCVVMCVYMCAlMSwlMCIgOiAiPW0iICgqYWRkcikgOiAiciIgKHZhbCkpOwogfQogCiBleHRlcm4gaW5saW5lIHVuc2lnbmVkIGluX2xlMzIoY29uc3Qgdm9sYXRpbGUgdW5zaWduZWQgX19pb21lbSAqYWRkcikKIHsKIAl1bnNpZ25lZCByZXQ7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMTtcbiIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgbHdicnggJTAsMCwlMTtcbiIKIAkJCSAgICAgInR3aSAwLCUwLDA7XG4iCiAJCQkgICAgICJpc3luYyIgOiAiPXIiIChyZXQpIDoKIAkJCSAgICAgInIiIChhZGRyKSwgIm0iICgqYWRkcikpOwpAQCAtMTIxLDcgKzEyMSw3IEBACiB7CiAJdW5zaWduZWQgcmV0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImx3eiVVMSVYMSAlMCwlMTtcbiIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgbHd6JVUxJVgxICUwLCUxO1xuIgogCQkJICAgICAidHdpIDAsJTAsMDtcbiIKIAkJCSAgICAgImlzeW5jIiA6ICI9ciIgKHJldCkgOiAibSIgKCphZGRyKSk7CiAJcmV0dXJuIHJldDsKQEAgLTEyOSwxMyArMTI5LDEzIEBACiAKIGV4dGVybiBpbmxpbmUgdm9pZCBvdXRfbGUzMih2b2xhdGlsZSB1bnNpZ25lZCBfX2lvbWVtICphZGRyLCBpbnQgdmFsKQogewotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTEsMCwlMjsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDoKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3R3YnJ4ICUxLDAsJTIiIDogIj1tIiAoKmFkZHIpIDoKIAkJCSAgICAgInIiICh2YWwpLCAiciIgKGFkZHIpKTsKIH0KIAogZXh0ZXJuIGlubGluZSB2b2lkIG91dF9iZTMyKHZvbGF0aWxlIHVuc2lnbmVkIF9faW9tZW0gKmFkZHIsIGludCB2YWwpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oInN0dyVVMCVYMCAlMSwlMDsgZWllaW8iIDogIj1tIiAoKmFkZHIpIDogInIiICh2YWwpKTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3luYzsgc3R3JVUwJVgwICUxLCUwIiA6ICI9bSIgKCphZGRyKSA6ICJyIiAodmFsKSk7CiB9CiAjaWYgZGVmaW5lZCAoQ09ORklHXzgyNjBfUENJOSkKICNkZWZpbmUgcmVhZGIoYWRkcikgaW5fOCgodm9sYXRpbGUgdTggKikoYWRkcikpCkBAIC0yNTksNiArMjU5LDcgQEAKIHsJCQkJCQkJXAogCXVuc2lnbmVkIGludCB4OwkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCSJzeW5jXG4iCQkJCVwKIAkJIjA6IglvcCAiCSUwLDAsJTFcbiIJCVwKIAkJIjE6CXR3aQkwLCUwLDBcbiIJCVwKIAkJIjI6CWlzeW5jXG4iCQkJXApAQCAtMjg0LDYgKzI4NSw3IEBACiBleHRlcm4gX19pbmxpbmVfXyB2b2lkIG5hbWUodW5zaWduZWQgaW50IHZhbCwgdW5zaWduZWQgaW50IHBvcnQpIFwKIHsJCQkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCisJCSJzeW5jXG4iCQkJCVwKIAkJIjA6IiBvcCAiICUwLDAsJTFcbiIJCQlcCiAJCSIxOglzeW5jXG4iCQkJCVwKIAkJIjI6XG4iCQkJCQlcCkBAIC0zMjUsMjYgKzMyNywxMiBAQAogI2RlZmluZSBpbmxfcChwb3J0KQkJaW5sKChwb3J0KSkKICNkZWZpbmUgb3V0bF9wKHZhbCwgcG9ydCkJb3V0bCgodmFsKSwgKHBvcnQpKQogCi1leHRlcm4gdm9pZCBfaW5zYih2b2xhdGlsZSB1OCBfX2lvbWVtICpwb3J0LCB2b2lkICpidWYsIGludCBucyk7Ci1leHRlcm4gdm9pZCBfb3V0c2Iodm9sYXRpbGUgdTggX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOwotZXh0ZXJuIHZvaWQgX2luc3codm9sYXRpbGUgdTE2IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKTsKLWV4dGVybiB2b2lkIF9vdXRzdyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOwotZXh0ZXJuIHZvaWQgX2luc2wodm9sYXRpbGUgdTMyIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKLWV4dGVybiB2b2lkIF9vdXRzbCh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbmwpOwotZXh0ZXJuIHZvaWQgX2luc3dfbnModm9sYXRpbGUgdTE2IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5zKTsKLWV4dGVybiB2b2lkIF9vdXRzd19ucyh2b2xhdGlsZSB1MTYgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbnMpOwotZXh0ZXJuIHZvaWQgX2luc2xfbnModm9sYXRpbGUgdTMyIF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKLWV4dGVybiB2b2lkIF9vdXRzbF9ucyh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgbmwpOwotCi0vKgotICogVGhlICpfbnMgdmVyc2lvbnMgYmVsb3cgZG9uJ3QgZG8gYnl0ZS1zd2FwcGluZy4KLSAqIE5laXRoZXIgZG8gdGhlIHN0YW5kYXJkIHZlcnNpb25zIG5vdywgdGhlc2UgYXJlIGp1c3QgaGVyZQotICogZm9yIG9sZGVyIGNvZGUuCi0gKi8KLSNkZWZpbmUgaW5zd19ucyhwb3J0LCBidWYsIG5zKQlfaW5zd19ucygocG9ydCkrX19fSU9fQkFTRSwgKGJ1ZiksIChucykpCi0jZGVmaW5lIG91dHN3X25zKHBvcnQsIGJ1ZiwgbnMpCV9vdXRzd19ucygocG9ydCkrX19fSU9fQkFTRSwgKGJ1ZiksIChucykpCi0jZGVmaW5lIGluc2xfbnMocG9ydCwgYnVmLCBubCkJX2luc2xfbnMoKHBvcnQpK19fX0lPX0JBU0UsIChidWYpLCAobmwpKQotI2RlZmluZSBvdXRzbF9ucyhwb3J0LCBidWYsIG5sKQlfb3V0c2xfbnMoKHBvcnQpK19fX0lPX0JBU0UsIChidWYpLCAobmwpKQorZXh0ZXJuIHZvaWQgX2luc2Iodm9sYXRpbGUgdTggX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIF9vdXRzYih2b2xhdGlsZSB1OCBfX2lvbWVtICpwb3J0LCBjb25zdCB2b2lkICpidWYsIGxvbmcgY291bnQpOworZXh0ZXJuIHZvaWQgX2luc3dfbnModm9sYXRpbGUgdTE2IF9faW9tZW0gKnBvcnQsIHZvaWQgKmJ1ZiwgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBfb3V0c3dfbnModm9sYXRpbGUgdTE2IF9faW9tZW0gKnBvcnQsIGNvbnN0IHZvaWQgKmJ1ZiwgbG9uZyBjb3VudCk7CitleHRlcm4gdm9pZCBfaW5zbF9ucyh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCBsb25nIGNvdW50KTsKK2V4dGVybiB2b2lkIF9vdXRzbF9ucyh2b2xhdGlsZSB1MzIgX19pb21lbSAqcG9ydCwgY29uc3Qgdm9pZCAqYnVmLCBsb25nIGNvdW50KTsKIAogCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIH4wCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaAppbmRleCA0YjkzNDgxZS4uMjM1NzlkNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzgyNjAuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MC5oCkBAIC04Miw2ICs4Miw3IEBACiAJTVBDODJ4eF9DUE1fU01DMiwKIAlNUEM4Mnh4X0NQTV9VU0IsCiAJTVBDODJ4eF9TRUMxLAorCU1QQzgyeHhfTURJT19CQiwKIAlOVU1fUFBDX1NZU19ERVZTLAogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcHBjL21wYzgyNjBfcGNpOS5oIGIvaW5jbHVkZS9hc20tcHBjL21wYzgyNjBfcGNpOS5oCmluZGV4IDI2YjNmNmUuLjlmNzE3NjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9tcGM4MjYwX3BjaTkuaAorKysgYi9pbmNsdWRlL2FzbS1wcGMvbXBjODI2MF9wY2k5LmgKQEAgLTMwLDggKzMwLDYgQEAKICN1bmRlZiBpbmIKICN1bmRlZiBpbncKICN1bmRlZiBpbmwKLSN1bmRlZiBpbnN3X25zCi0jdW5kZWYgaW5zbF9ucwogI3VuZGVmIG1lbWNweV9mcm9taW8KIAogZXh0ZXJuIGludCByZWFkYih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICphZGRyKTsKQEAgLTQzLDggKzQxLDYgQEAKIGV4dGVybiBpbnQgaW5iKHVuc2lnbmVkIHBvcnQpOwogZXh0ZXJuIGludCBpbncodW5zaWduZWQgcG9ydCk7CiBleHRlcm4gdW5zaWduZWQgaW5sKHVuc2lnbmVkIHBvcnQpOwotZXh0ZXJuIHZvaWQgaW5zd19ucyh1bnNpZ25lZCBwb3J0LCB2b2lkICpidWYsIGludCBucyk7Ci1leHRlcm4gdm9pZCBpbnNsX25zKHVuc2lnbmVkIHBvcnQsIHZvaWQgKmJ1ZiwgaW50IG5sKTsKIGV4dGVybiB2b2lkICptZW1jcHlfZnJvbWlvKHZvaWQgKmRlc3QsIHVuc2lnbmVkIGxvbmcgc3JjLCBzaXplX3QgY291bnQpOwogCiAjZW5kaWYgLyogIV9fQ09ORklHXzgyNjBfUENJOV9ERUZTICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmggYi9pbmNsdWRlL2FzbS1wcGMvbXBjOHh4LmgKaW5kZXggYWRjY2UzMy4uZDNhMmYyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tcHBjL21wYzh4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9tcGM4eHguaApAQCAtMTEwLDYgKzExMCw3IEBACiAJTVBDOHh4X0NQTV9TTUMxLAogCU1QQzh4eF9DUE1fU01DMiwKIAlNUEM4eHhfQ1BNX1VTQiwKKwlNUEM4eHhfTURJT19GRUMsCiAJTlVNX1BQQ19TWVNfREVWUywKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaCBiL2luY2x1ZGUvYXNtLXBwYy9yZWdfYm9va2UuaAppbmRleCA0OTQ0YzBmLi42MDJmYmFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wcGMvcmVnX2Jvb2tlLmgKKysrIGIvaW5jbHVkZS9hc20tcHBjL3JlZ19ib29rZS5oCkBAIC0zMDAsMTQgKzMwMCwxNCBAQAogI2RlZmluZSBEQlNSX0lDCQkweDgwMDAwMDAwCS8qIEluc3RydWN0aW9uIENvbXBsZXRpb24gKi8KICNkZWZpbmUgREJTUl9CVAkJMHg0MDAwMDAwMAkvKiBCcmFuY2ggdGFrZW4gKi8KICNkZWZpbmUgREJTUl9USUUJMHgxMDAwMDAwMAkvKiBUcmFwIEluc3RydWN0aW9uIGRlYnVnIEV2ZW50ICovCi0jZGVmaW5lIERCU1JfSUFDMQkweDAwODAwMDAwCS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSAxIEV2ZW50ICovCi0jZGVmaW5lIERCU1JfSUFDMgkweDAwNDAwMDAwCS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSAyIEV2ZW50ICovCi0jZGVmaW5lIERCU1JfSUFDMwkweDAwMjAwMDAwCS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSAzIEV2ZW50ICovCi0jZGVmaW5lIERCU1JfSUFDNAkweDAwMTAwMDAwCS8qIEluc3RydWN0aW9uIEFkZHJlc3MgQ29tcGFyZSA0IEV2ZW50ICovCi0jZGVmaW5lIERCU1JfREFDMVIJMHgwMDA4MDAwMAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAxIFJlYWQgRXZlbnQgKi8KLSNkZWZpbmUgREJTUl9EQUMxVwkweDAwMDQwMDAwCS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDEgV3JpdGUgRXZlbnQgKi8KLSNkZWZpbmUgREJTUl9EQUMyUgkweDAwMDIwMDAwCS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDIgUmVhZCBFdmVudCAqLwotI2RlZmluZSBEQlNSX0RBQzJXCTB4MDAwMTAwMDAJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMiBXcml0ZSBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzEJMHgwNDAwMDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMSBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzIJMHgwMjAwMDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMiBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzMJMHgwMDA4MDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgMyBFdmVudCAqLworI2RlZmluZSBEQlNSX0lBQzQJMHgwMDA0MDAwMAkvKiBJbnN0cnVjdGlvbiBBZGRyZXNzIENvbXBhcmUgNCBFdmVudCAqLworI2RlZmluZSBEQlNSX0RBQzFSCTB4MDEwMDAwMDAJLyogRGF0YSBBZGRyZXNzIENvbXBhcmUgMSBSZWFkIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMVcJMHgwMDgwMDAwMAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAxIFdyaXRlIEV2ZW50ICovCisjZGVmaW5lIERCU1JfREFDMlIJMHgwMDQwMDAwMAkvKiBEYXRhIEFkZHJlc3MgQ29tcGFyZSAyIFJlYWQgRXZlbnQgKi8KKyNkZWZpbmUgREJTUl9EQUMyVwkweDAwMjAwMDAwCS8qIERhdGEgQWRkcmVzcyBDb21wYXJlIDIgV3JpdGUgRXZlbnQgKi8KICNlbmRpZgogCiAvKiBCaXQgZGVmaW5pdGlvbnMgcmVsYXRlZCB0byB0aGUgRVNSLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9LYnVpbGQgYi9pbmNsdWRlL2FzbS1zMzkwL0tidWlsZAppbmRleCBlZDg5NTVmLi4wODg5NjlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL0tidWlsZAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL0tidWlsZApAQCAtMSw0ICsxLDEyIEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCi11bmlmZGVmLXkgKz0gY21iLmggZGVidWcuaAotaGVhZGVyLXkgKz0gZGFzZC5oIHFldGguaCB0YXBlMzkwLmggdWNvbnRleHQuaCB2dG9jLmggejkwY3J5cHQuaAoraGVhZGVyLXkgKz0gZGFzZC5oCitoZWFkZXIteSArPSBtb253cml0ZXIuaAoraGVhZGVyLXkgKz0gcWV0aC5oCitoZWFkZXIteSArPSB0YXBlMzkwLmgKK2hlYWRlci15ICs9IHVjb250ZXh0LmgKK2hlYWRlci15ICs9IHZ0b2MuaAoraGVhZGVyLXkgKz0gejkwY3J5cHQuaAorCit1bmlmZGVmLXkgKz0gY21iLmgKK3VuaWZkZWYteSArPSBkZWJ1Zy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2FwcGxkYXRhLmggYi9pbmNsdWRlL2FzbS1zMzkwL2FwcGxkYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE3NzA3MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYXBwbGRhdGEuaApAQCAtMCwwICsxLDkwIEBACisvKgorICogaW5jbHVkZS9hc20tczM5MC9hcHBsZGF0YS5oCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNgorICoKKyAqIEF1dGhvcihzKTogTWVsaXNzYSBIb3dsYW5kIDxtZWxpc3NhaEB1cy5pYm0uY29tPgorICovCisKKyNpZm5kZWYgX0FTTV9TMzkwX0FQUExEQVRBX0gKKyNkZWZpbmUgX0FTTV9TMzkwX0FQUExEQVRBX0gKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZuZGVmIENPTkZJR182NEJJVAorCisjZGVmaW5lIEFQUExEQVRBX1NUQVJUX0lOVEVSVkFMX1JFQwkweDAwCS8qIEZ1bmN0aW9uIGNvZGVzIGZvciAqLworI2RlZmluZSBBUFBMREFUQV9TVE9QX1JFQwkJMHgwMQkvKiBESUFHIDB4REMJICAgICAgKi8KKyNkZWZpbmUgQVBQTERBVEFfR0VOX0VWRU5UX1JFQwkJMHgwMgorI2RlZmluZSBBUFBMREFUQV9TVEFSVF9DT05GSUdfUkVDCTB4MDMKKworLyoKKyAqIFBhcmFtZXRlciBsaXN0IGZvciBESUFHTk9TRSBYJ0RDJworICovCitzdHJ1Y3QgYXBwbGRhdGFfcGFyYW1ldGVyX2xpc3QgeworCXUxNiBkaWFnOwkJLyogVGhlIERJQUdOT1NFIGNvZGUgWCcwMERDJwkgICAgICAqLworCXU4ICBmdW5jdGlvbjsJCS8qIFRoZSBmdW5jdGlvbiBjb2RlIGZvciB0aGUgRElBR05PU0UgKi8KKwl1OCAgcGFybGlzdF9sZW5ndGg7CS8qIExlbmd0aCBvZiB0aGUgcGFyYW1ldGVyIGxpc3QgICAgICAgKi8KKwl1MzIgcHJvZHVjdF9pZF9hZGRyOwkvKiBBZGRyZXNzIG9mIHRoZSAxNi1ieXRlIHByb2R1Y3QgSUQgICovCisJdTE2IHJlc2VydmVkOworCXUxNiBidWZmZXJfbGVuZ3RoOwkvKiBMZW5ndGggb2YgdGhlIGFwcGxpY2F0aW9uIGRhdGEgYnVmZmVyICAqLworCXUzMiBidWZmZXJfYWRkcjsJLyogQWRkcmVzcyBvZiB0aGUgYXBwbGljYXRpb24gZGF0YSBidWZmZXIgKi8KK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KKworI2RlZmluZSBBUFBMREFUQV9TVEFSVF9JTlRFUlZBTF9SRUMJMHg4MAorI2RlZmluZSBBUFBMREFUQV9TVE9QX1JFQwkJMHg4MQorI2RlZmluZSBBUFBMREFUQV9HRU5fRVZFTlRfUkVDCQkweDgyCisjZGVmaW5lIEFQUExEQVRBX1NUQVJUX0NPTkZJR19SRUMJMHg4MworCisvKgorICogUGFyYW1ldGVyIGxpc3QgZm9yIERJQUdOT1NFIFgnREMnCisgKi8KK3N0cnVjdCBhcHBsZGF0YV9wYXJhbWV0ZXJfbGlzdCB7CisJdTE2IGRpYWc7CisJdTggIGZ1bmN0aW9uOworCXU4ICBwYXJsaXN0X2xlbmd0aDsKKwl1MzIgdW51c2VkMDE7CisJdTE2IHJlc2VydmVkOworCXUxNiBidWZmZXJfbGVuZ3RoOworCXUzMiB1bnVzZWQwMjsKKwl1NjQgcHJvZHVjdF9pZF9hZGRyOworCXU2NCBidWZmZXJfYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZW5kaWYgLyogQ09ORklHXzY0QklUICovCisKK3N0cnVjdCBhcHBsZGF0YV9wcm9kdWN0X2lkIHsKKwljaGFyIHByb2RfbnJbN107CS8qIHByb2R1Y3QgbnVtYmVyICovCisJdTE2ICBwcm9kX2ZuOwkJLyogcHJvZHVjdCBmdW5jdGlvbiAqLworCXU4ICAgcmVjb3JkX25yOyAJLyogcmVjb3JkIG51bWJlciAqLworCXUxNiAgdmVyc2lvbl9ucjsJLyogdmVyc2lvbiAqLworCXUxNiAgcmVsZWFzZV9ucjsJLyogcmVsZWFzZSAqLworCXUxNiAgbW9kX2x2bDsJCS8qIG1vZGlmaWNhdGlvbiBsZXZlbCAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGFwcGxkYXRhX2FzbShzdHJ1Y3QgYXBwbGRhdGFfcHJvZHVjdF9pZCAqaWQsCisJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZm4sIHZvaWQgKmJ1ZmZlciwKKwkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBsZW5ndGgpCit7CisJc3RydWN0IGFwcGxkYXRhX3BhcmFtZXRlcl9saXN0IHBhcm1fbGlzdDsKKwlpbnQgcnk7CisKKwlpZiAoIU1BQ0hJTkVfSVNfVk0pCisJCXJldHVybiAtRU5PU1lTOworCXBhcm1fbGlzdC5kaWFnID0gMHhkYzsKKwlwYXJtX2xpc3QuZnVuY3Rpb24gPSBmbjsKKwlwYXJtX2xpc3QucGFybGlzdF9sZW5ndGggPSBzaXplb2YocGFybV9saXN0KTsKKwlwYXJtX2xpc3QuYnVmZmVyX2xlbmd0aCA9IGxlbmd0aDsKKwlwYXJtX2xpc3QucHJvZHVjdF9pZF9hZGRyID0gKHVuc2lnbmVkIGxvbmcpIGlkOworCXBhcm1fbGlzdC5idWZmZXJfYWRkciA9IHZpcnRfdG9fcGh5cyhidWZmZXIpOworCWFzbSB2b2xhdGlsZSgKKwkJImRpYWcgJTEsJTAsMHhkYyIKKwkJOiAiPWQiIChyeSkKKwkJOiAiZCIgKCZwYXJtX2xpc3QpLCAibSIgKHBhcm1fbGlzdCksICJtIiAoKmlkKQorCQk6ICJjYyIpOworCXJldHVybiByeTsKK30KKworI2VuZGlmIC8qIF9BU01fUzM5MF9BUFBMREFUQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2Npby5oIGIvaW5jbHVkZS9hc20tczM5MC9jaW8uaAppbmRleCAyOGZkZDZlLi5kYTA2M2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2Npby5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY2lvLmgKQEAgLTI3MCw2ICsyNzAsMTEgQEAKIAlfX3UzMiB2cmRjY3JmdCA6IDg7ICAgIC8qIHJlYWwgZGV2aWNlIGZlYXR1cmUgKG91dHB1dCkgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCxhbGlnbmVkKDQpKSk7CiAKK3N0cnVjdCBjY3dfZGV2X2lkIHsKKwl1OCBzc2lkOworCXUxNiBkZXZubzsKK307CisKIGV4dGVybiBpbnQgZGlhZzIxMChzdHJ1Y3QgZGlhZzIxMCAqYWRkcik7CiAKIGV4dGVybiB2b2lkIHdhaXRfY29uc19kZXYodm9pZCk7CkBAIC0yODAsNiArMjg1LDggQEAKIAogZXh0ZXJuIHZvaWQgY3NzX3NjaGVkdWxlX3JlcHJvYmUodm9pZCk7CiAKK2V4dGVybiB2b2lkIHJlaXBsX2Njd19kZXYoc3RydWN0IGNjd19kZXZfaWQgKmlkKTsKKwogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oIGIvaW5jbHVkZS9hc20tczM5MC9kZWJ1Zy5oCmluZGV4IDdmMWVmOTkuLmMwMGRkMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZGVidWcuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RlYnVnLmgKQEAgLTEwLDcgKzEwLDYgQEAKICNkZWZpbmUgREVCVUdfSAogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAogLyogTm90ZToKICAqIHN0cnVjdCBfX2RlYnVnX2VudHJ5IG11c3QgYmUgZGVmaW5lZCBvdXRzaWRlIG9mICNpZmRlZiBfX0tFUk5FTF9fIApAQCAtMzUsNiArMzQsNyBAQAogI2RlZmluZSBfX0RFQlVHX0ZFQVRVUkVfVkVSU0lPTiAgICAgIDIgIC8qIHZlcnNpb24gb2YgZGVidWcgZmVhdHVyZSAqLwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kbWEuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZG1hLmgKaW5kZXggMDI3MjBjNC4uNzQyNWM2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RtYS5oCkBAIC0xMSw2ICsxMSw2IEBACiAKICNkZWZpbmUgTUFYX0RNQV9BRERSRVNTICAgICAgICAgMHg4MDAwMDAwMAogCi0jZGVmaW5lIGZyZWVfZG1hKHgpCisjZGVmaW5lIGZyZWVfZG1hKHgpCWRvIHsgfSB3aGlsZSAoMCkKIAogI2VuZGlmIC8qIF9BU01fRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvZWxmLmggYi9pbmNsdWRlL2FzbS1zMzkwL2VsZi5oCmluZGV4IDcxMDY0NmUuLmMwZDYyOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZWxmLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9lbGYuaApAQCAtOTMsMTkgKzkzLDYgQEAKICNkZWZpbmUgUl8zOTBfTlVNCTYxCiAKIC8qCi0gKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBmb3IgdGFza19zdHJ1Y3QgKi8KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CQkvKiBmb3Igc2F2ZV9hY2Nlc3NfcmVncyAqLwotCi0KLXR5cGVkZWYgczM5MF9mcF9yZWdzIGVsZl9mcHJlZ3NldF90OwotdHlwZWRlZiBzMzkwX3JlZ3MgZWxmX2dyZWdzZXRfdDsKLQotLyoKICAqIFRoZXNlIGFyZSB1c2VkIHRvIHNldCBwYXJhbWV0ZXJzIGluIHRoZSBjb3JlIGR1bXBzLgogICovCiAjaWZuZGVmIF9fczM5MHhfXwpAQCAtMTE3LDYgKzEwNCwyMCBAQAogI2RlZmluZSBFTEZfQVJDSAlFTV9TMzkwCiAKIC8qCisgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgorICovCisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisjaW5jbHVkZSA8YXNtL3VzZXIuaD4KKwordHlwZWRlZiBzMzkwX2ZwX3JlZ3MgZWxmX2ZwcmVnc2V0X3Q7Cit0eXBlZGVmIHMzOTBfcmVncyBlbGZfZ3JlZ3NldF90OworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CS8qIGZvciB0YXNrX3N0cnVjdCAqLworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4JCS8qIGZvciBzYXZlX2FjY2Vzc19yZWdzICovCisKKy8qCiAgKiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGxvYWQgc29tZXRoaW5nIGZvciB0aGUgd3JvbmcgYXJjaGl0ZWN0dXJlLgogICovCiAjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpIFwKQEAgLTE5OCw3ICsxOTksNiBAQAogCiAjZGVmaW5lIEVMRl9QTEFURk9STSAoTlVMTCkKIAotI2lmZGVmIF9fS0VSTkVMX18KICNpZm5kZWYgX19zMzkweF9fCiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eSgoaWJjczIpP1BFUl9TVlI0OlBFUl9MSU5VWCkKICNlbHNlIC8qIF9fczM5MHhfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oIGIvaW5jbHVkZS9hc20tczM5MC9mdXRleC5oCmluZGV4IGZmZWRmMTQuLjVlMjYxZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZnV0ZXguaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2Z1dGV4LmgKQEAgLTcsNzUgKzcsMjEgQEAKICNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaWZuZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX2Z1dGV4X2F0b21pY19maXh1cCBcCi0JCSAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJCQlcCi0JCSAgICAgIiAgIC5hbGlnbiA0XG4iCQkJCQlcCi0JCSAgICAgIiAgIC5sb25nICAwYiw0YiwyYiw0YiwzYiw0YlxuIgkJCVwKLQkJICAgICAiLnByZXZpb3VzIgotI2Vsc2UgLyogX19zMzkweF9fICovCi0jZGVmaW5lIF9fZnV0ZXhfYXRvbWljX2ZpeHVwIFwKLQkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgkJCVwKLQkJICAgICAiICAgLmFsaWduIDhcbiIJCQkJCVwKLQkJICAgICAiICAgLnF1YWQgIDBiLDRiLDJiLDRiLDNiLDRiXG4iCQkJXAotCQkgICAgICIucHJldmlvdXMiCi0jZW5kaWYgLyogX19zMzkweF9fICovCi0KLSNkZWZpbmUgX19mdXRleF9hdG9taWNfb3AoaW5zbiwgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKQlcCi0JYXNtIHZvbGF0aWxlKCIgICBzYWNmIDI1NlxuIgkJCQkJXAotCQkgICAgICIwOiBsICAgJTEsMCglNilcbiIJCQkJXAotCQkgICAgICIxOiAiIGluc24JCQkJCQlcCi0JCSAgICAgIjI6IGNzICAlMSwlMiwwKCU2KVxuIgkJCQlcCi0JCSAgICAgIjM6IGpsICAxYlxuIgkJCQkJXAotCQkgICAgICIgICBsaGkgJTAsMFxuIgkJCQkJXAotCQkgICAgICI0OiBzYWNmIDBcbiIJCQkJCVwKLQkJICAgICBfX2Z1dGV4X2F0b21pY19maXh1cAkJCQlcCi0JCSAgICAgOiAiPWQiIChyZXQpLCAiPSZkIiAob2xkdmFsKSwgIj0mZCIgKG5ld3ZhbCksCVwKLQkJICAgICAgICI9bSIgKCp1YWRkcikJCQkJCVwKLQkJICAgICA6ICIwIiAoLUVGQVVMVCksICJkIiAob3BhcmcpLCAiYSIgKHVhZGRyKSwJCVwKLQkJICAgICAgICJtIiAoKnVhZGRyKSA6ICJjYyIgKTsKLQogc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfYXRvbWljX29wX2ludXNlciAoaW50IGVuY29kZWRfb3AsIGludCBfX3VzZXIgKnVhZGRyKQogewogCWludCBvcCA9IChlbmNvZGVkX29wID4+IDI4KSAmIDc7CiAJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OwogCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOwogCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7Ci0JaW50IG9sZHZhbCA9IDAsIG5ld3ZhbCwgcmV0OworCWludCBvbGR2YWwsIHJldDsKKwogCWlmIChlbmNvZGVkX29wICYgKEZVVEVYX09QX09QQVJHX1NISUZUIDw8IDI4KSkKIAkJb3BhcmcgPSAxIDw8IG9wYXJnOwogCiAJaWYgKCEgYWNjZXNzX29rIChWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaW5jX3ByZWVtcHRfY291bnQoKTsKLQotCXN3aXRjaCAob3ApIHsKLQljYXNlIEZVVEVYX09QX1NFVDoKLQkJX19mdXRleF9hdG9taWNfb3AoImxyICUyLCU1XG4iLAotCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBGVVRFWF9PUF9BREQ6Ci0JCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlMVxuYXIgJTIsJTVcbiIsCi0JCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOwotCQlicmVhazsKLQljYXNlIEZVVEVYX09QX09SOgotCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTFcbm9yICUyLCU1XG4iLAotCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBGVVRFWF9PUF9BTkROOgotCQlfX2Z1dGV4X2F0b21pY19vcCgibHIgJTIsJTFcbm5yICUyLCU1XG4iLAotCQkJCSAgcmV0LCBvbGR2YWwsIG5ld3ZhbCwgdWFkZHIsIG9wYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBGVVRFWF9PUF9YT1I6Ci0JCV9fZnV0ZXhfYXRvbWljX29wKCJsciAlMiwlMVxueHIgJTIsJTVcbiIsCi0JCQkJICByZXQsIG9sZHZhbCwgbmV3dmFsLCB1YWRkciwgb3BhcmcpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSAtRU5PU1lTOwotCX0KLQotCWRlY19wcmVlbXB0X2NvdW50KCk7CisJcmV0ID0gdWFjY2Vzcy5mdXRleF9hdG9taWNfb3Aob3AsIHVhZGRyLCBvcGFyZywgJm9sZHZhbCk7CiAKIAlpZiAoIXJldCkgewogCQlzd2l0Y2ggKGNtcCkgewpAQCAtOTEsMzIgKzM3LDEzIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKGludCBfX3VzZXIgKnVhZGRyLCBpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQorc3RhdGljIGlubGluZSBpbnQgZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWMoaW50IF9fdXNlciAqdWFkZHIsCisJCQkJCQlpbnQgb2xkdmFsLCBpbnQgbmV3dmFsKQogewotCWludCByZXQ7Ci0KIAlpZiAoISBhY2Nlc3Nfb2sgKFZFUklGWV9XUklURSwgdWFkZHIsIHNpemVvZihpbnQpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JYXNtIHZvbGF0aWxlKCIgICBzYWNmIDI1NlxuIgotCQkgICAgICIgICBjcyAgICUxLCU0LDAoJTUpXG4iCi0JCSAgICAgIjA6IGxyICAgJTAsJTFcbiIKLQkJICAgICAiMTogc2FjZiAwXG4iCi0jaWZuZGVmIF9fczM5MHhfXwotCQkgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCSAgICAgIiAgIC5hbGlnbiA0XG4iCi0JCSAgICAgIiAgIC5sb25nICAwYiwxYlxuIgotCQkgICAgICIucHJldmlvdXMiCi0jZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJICAgICAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkgICAgICIgICAuYWxpZ24gOFxuIgotCQkgICAgICIgICAucXVhZCAgMGIsMWJcbiIKLQkJICAgICAiLnByZXZpb3VzIgotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCQkgICAgIDogIj1kIiAocmV0KSwgIitkIiAob2xkdmFsKSwgIj1tIiAoKnVhZGRyKQotCQkgICAgIDogIjAiICgtRUZBVUxUKSwgImQiIChuZXd2YWwpLCAiYSIgKHVhZGRyKSwgIm0iICgqdWFkZHIpCi0JCSAgICAgOiAiY2MiLCAibWVtb3J5IiApOwotCXJldHVybiBvbGR2YWw7CisKKwlyZXR1cm4gdWFjY2Vzcy5mdXRleF9hdG9taWNfY21weGNoZyh1YWRkciwgb2xkdmFsLCBuZXd2YWwpOwogfQogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9pby5oIGIvaW5jbHVkZS9hc20tczM5MC9pby5oCmluZGV4IGQ0NjE0YjMuLmE2Y2MyN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2lvLmgKQEAgLTExNiw3ICsxMTYsNyBAQAogI2RlZmluZSBvdXRiKHgsYWRkcikgKCh2b2lkKSB3cml0ZWIoeCxhZGRyKSkKICNkZWZpbmUgb3V0Yl9wKHgsYWRkcikgb3V0Yih4LGFkZHIpCiAKLSNkZWZpbmUgbW1pb3diKCkKKyNkZWZpbmUgbW1pb3diKCkJZG8geyB9IHdoaWxlICgwKQogCiAvKgogICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9rZGVidWcuaCBiL2luY2x1ZGUvYXNtLXMzOTAva2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjYzY4MAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAva2RlYnVnLmgKQEAgLTAsMCArMSw1OSBAQAorI2lmbmRlZiBfUzM5MF9LREVCVUdfSAorI2RlZmluZSBfUzM5MF9LREVCVUdfSAorCisvKgorICogRmViIDIwMDYgUG9ydGVkIHRvIHMzOTAgPGdydW5keW1AdXMuaWJtLmNvbT4KKyAqLworI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKK3N0cnVjdCBwdF9yZWdzOworCitzdHJ1Y3QgZGllX2FyZ3MgeworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworCWNvbnN0IGNoYXIgKnN0cjsKKwlsb25nIGVycjsKKwlpbnQgdHJhcG5yOworCWludCBzaWducjsKK307CisKKy8qIE5vdGUgLSB5b3Ugc2hvdWxkIG5ldmVyIHVucmVnaXN0ZXIgYmVjYXVzZSB0aGF0IGNhbiByYWNlIHdpdGggTk1Jcy4KKyAqIElmIHlvdSByZWFsbHkgd2FudCB0byBkbyBpdCBmaXJzdCB1bnJlZ2lzdGVyIC0gdGhlbiBzeW5jaHJvbml6ZV9zY2hlZAorICogIC0gdGhlbiBmcmVlLgorICovCitleHRlcm4gaW50IHJlZ2lzdGVyX2RpZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfZGllX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKTsKK2V4dGVybiBpbnQgcmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CitleHRlcm4gaW50IHVucmVnaXN0ZXJfcGFnZV9mYXVsdF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKik7CitleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHMzOTBkaWVfY2hhaW47CisKKworZW51bSBkaWVfdmFsIHsKKwlESUVfT09QUyA9IDEsCisJRElFX0JQVCwKKwlESUVfU1NURVAsCisJRElFX1BBTklDLAorCURJRV9OTUksCisJRElFX0RJRSwKKwlESUVfTk1JV0FUQ0hET0csCisJRElFX0tFUk5FTERFQlVHLAorCURJRV9UUkFQLAorCURJRV9HUEYsCisJRElFX0NBTEwsCisJRElFX05NSV9JUEksCisJRElFX1BBR0VfRkFVTFQsCit9OworCitzdGF0aWMgaW5saW5lIGludCBub3RpZnlfZGllKGVudW0gZGllX3ZhbCB2YWwsIGNvbnN0IGNoYXIgKnN0ciwKKwkJCXN0cnVjdCBwdF9yZWdzICpyZWdzLCBsb25nIGVyciwgaW50IHRyYXAsIGludCBzaWcpCit7CisJc3RydWN0IGRpZV9hcmdzIGFyZ3MgPSB7CisJCS5yZWdzID0gcmVncywKKwkJLnN0ciA9IHN0ciwKKwkJLmVyciA9IGVyciwKKwkJLnRyYXBuciA9IHRyYXAsCisJCS5zaWduciA9IHNpZworCX07CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZzMzkwZGllX2NoYWluLCB2YWwsICZhcmdzKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLXMzOTAva3Byb2Jlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NDdmZjAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2twcm9iZXMuaApAQCAtMCwwICsxLDExNCBAQAorI2lmbmRlZiBfQVNNX1MzOTBfS1BST0JFU19ICisjZGVmaW5lIF9BU01fUzM5MF9LUFJPQkVTX0gKKy8qCisgKiAgS2VybmVsIFByb2JlcyAoS1Byb2JlcykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIENvcHlyaWdodCAoQykgSUJNIENvcnBvcmF0aW9uLCAyMDAyLCAyMDA2CisgKgorICogMjAwMi1PY3QJQ3JlYXRlZCBieSBWYW1zaSBLcmlzaG5hIFMgPHZhbXNpX2tyaXNobmFAaW4uaWJtLmNvbT4gS2VybmVsCisgKgkJUHJvYmVzIGluaXRpYWwgaW1wbGVtZW50YXRpb24gKCBpbmNsdWRlcyBzdWdnZXN0aW9ucyBmcm9tCisgKgkJUnVzdHkgUnVzc2VsbCkuCisgKiAyMDA0LU5vdglNb2RpZmllZCBmb3IgUFBDNjQgYnkgQW5hbnRoIE4gTWF2aW5ha2F5YW5haGFsbGkKKyAqCQk8YW5hbnRoQGluLmlibS5jb20+CisgKiAyMDA1LURlYwlVc2VkIGFzIGEgdGVtcGxhdGUgZm9yIHMzOTAgYnkgTWlrZSBHcnVuZHkKKyAqCQk8Z3J1bmR5bUB1cy5pYm0uY29tPgorICovCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKworI2RlZmluZSAgX19BUkNIX1dBTlRfS1BST0JFU19JTlNOX1NMT1QKK3N0cnVjdCBwdF9yZWdzOworc3RydWN0IGtwcm9iZTsKKwordHlwZWRlZiB1MTYga3Byb2JlX29wY29kZV90OworI2RlZmluZSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OCTB4MDAwMgorCisvKiBNYXhpbXVtIGluc3RydWN0aW9uIHNpemUgaXMgMyAoMTZiaXQpIGhhbGZ3b3JkczogKi8KKyNkZWZpbmUgTUFYX0lOU05fU0laRQkJMHgwMDAzCisjZGVmaW5lIE1BWF9TVEFDS19TSVpFCQk2NAorI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKSAoKChNQVhfU1RBQ0tfU0laRSkgPCBcCisJKCgodW5zaWduZWQgbG9uZyljdXJyZW50X3RocmVhZF9pbmZvKCkpICsgVEhSRUFEX1NJWkUgLSAoQUREUikpKSBcCisJPyAoTUFYX1NUQUNLX1NJWkUpIFwKKwk6ICgoKHVuc2lnbmVkIGxvbmcpY3VycmVudF90aHJlYWRfaW5mbygpKSArIFRIUkVBRF9TSVpFIC0gKEFERFIpKSkKKworI2RlZmluZSBKUFJPQkVfRU5UUlkocGVudHJ5KSAoa3Byb2JlX29wY29kZV90ICopKHBlbnRyeSkKKworI2RlZmluZSBBUkNIX1NVUFBPUlRTX0tSRVRQUk9CRVMKKyNkZWZpbmUgQVJDSF9JTkFDVElWRV9LUFJPQkVfQ09VTlQgMAorCisjZGVmaW5lIEtQUk9CRV9TV0FQX0lOU1QJMHgxMAorCisjZGVmaW5lIEZJWFVQX1BTV19OT1JNQUwJMHgwOAorI2RlZmluZSBGSVhVUF9CUkFOQ0hfTk9UX1RBS0VOCTB4MDQKKyNkZWZpbmUgRklYVVBfUkVUVVJOX1JFR0lTVEVSCTB4MDIKKyNkZWZpbmUgRklYVVBfTk9UX1JFUVVJUkVECTB4MDEKKworLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KK3N0cnVjdCBhcmNoX3NwZWNpZmljX2luc24geworCS8qIGNvcHkgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlrcHJvYmVfb3Bjb2RlX3QgKmluc247CisJaW50IGZpeHVwOworCWludCBpbGVuOworCWludCByZWc7Cit9OworCitzdHJ1Y3QgaW5zX3JlcGxhY2VfYXJncyB7CisJa3Byb2JlX29wY29kZV90ICpwdHI7CisJa3Byb2JlX29wY29kZV90IG9sZDsKKwlrcHJvYmVfb3Bjb2RlX3QgbmV3OworfTsKK3N0cnVjdCBwcmV2X2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSAqa3A7CisJdW5zaWduZWQgbG9uZyBzdGF0dXM7CisJdW5zaWduZWQgbG9uZyBzYXZlZF9wc3c7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfaW1hc2s7CisJdW5zaWduZWQgbG9uZyBrcHJvYmVfc2F2ZWRfY3RsWzNdOworfTsKKworLyogcGVyLWNwdSBrcHJvYmUgY29udHJvbCBibG9jayAqLworc3RydWN0IGtwcm9iZV9jdGxibGsgeworCXVuc2lnbmVkIGxvbmcga3Byb2JlX3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9zYXZlZF9pbWFzazsKKwl1bnNpZ25lZCBsb25nIGtwcm9iZV9zYXZlZF9jdGxbM107CisJc3RydWN0IHB0X3JlZ3MganByb2JlX3NhdmVkX3JlZ3M7CisJdW5zaWduZWQgbG9uZyBqcHJvYmVfc2F2ZWRfcjE0OworCXVuc2lnbmVkIGxvbmcganByb2JlX3NhdmVkX3IxNTsKKwlzdHJ1Y3QgcHJldl9rcHJvYmUgcHJldl9rcHJvYmU7CisJa3Byb2JlX29wY29kZV90IGpwcm9iZXNfc3RhY2tbTUFYX1NUQUNLX1NJWkVdOworfTsKKwordm9pZCBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7Cit2b2lkIGtyZXRwcm9iZV90cmFtcG9saW5lKHZvaWQpOworaW50ICBpc19wcm9oaWJpdGVkX29wY29kZShrcHJvYmVfb3Bjb2RlX3QgKmluc3RydWN0aW9uKTsKK3ZvaWQgZ2V0X2luc3RydWN0aW9uX3R5cGUoc3RydWN0IGFyY2hfc3BlY2lmaWNfaW5zbiAqYWluc24pOworCisjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQlkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgkvKiBfQVNNX1MzOTBfS1BST0JFU19IICovCisKKyNpZmRlZiBDT05GSUdfS1BST0JFUworCitleHRlcm4gaW50IGtwcm9iZV9leGNlcHRpb25zX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQkJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKTsKKyNlbHNlCS8qICFDT05GSUdfS1BST0JFUyAqLworc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2V4Y2VwdGlvbnNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCmluZGV4IDU5NmM4YjEuLjE4Njk1ZDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCkBAIC0zNSw2ICszNSw3IEBACiAjZGVmaW5lIF9fTENfSU9fTkVXX1BTVyAgICAgICAgICAgICAgICAgMHgwMWYwCiAjZW5kaWYgLyogIV9fczM5MHhfXyAqLwogCisjZGVmaW5lIF9fTENfSVBMX1BBUk1CTE9DS19QVFIJCTB4MDE0CiAjZGVmaW5lIF9fTENfRVhUX1BBUkFNUyAgICAgICAgICAgICAgICAgMHgwODAKICNkZWZpbmUgX19MQ19DUFVfQUREUkVTUyAgICAgICAgICAgICAgICAweDA4NAogI2RlZmluZSBfX0xDX0VYVF9JTlRfQ09ERSAgICAgICAgICAgICAgIDB4MDg2CkBAIC00Nyw2ICs0OCw3IEBACiAjZGVmaW5lIF9fTENfUEVSX0FUTUlECQkJMHgwOTYKICNkZWZpbmUgX19MQ19QRVJfQUREUkVTUwkJMHgwOTgKICNkZWZpbmUgX19MQ19QRVJfQUNDRVNTX0lECQkweDBBMQorI2RlZmluZSBfX0xDX0FSX01PREVfSUQJCQkweDBBMwogCiAjZGVmaW5lIF9fTENfU1VCQ0hBTk5FTF9JRCAgICAgICAgICAgICAgMHgwQjgKICNkZWZpbmUgX19MQ19TVUJDSEFOTkVMX05SICAgICAgICAgICAgICAweDBCQQpAQCAtMTA2LDE4ICsxMDgsMjggQEAKICNkZWZpbmUgX19MQ19JTlRfQ0xPQ0sJCQkweERFOAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCi0jZGVmaW5lIF9fTENfUEFOSUNfTUFHSUMgICAgICAgICAgICAgICAgMHhFMDAKIAorI2RlZmluZSBfX0xDX1BBTklDX01BR0lDCQkweEUwMAogI2lmbmRlZiBfX3MzOTB4X18KICNkZWZpbmUgX19MQ19QRkFVTFRfSU5UUEFSTSAgICAgICAgICAgICAweDA4MAogI2RlZmluZSBfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEgICAgICAgIDB4MEQ4CisjZGVmaW5lIF9fTENfQ0xPQ0tfQ09NUF9TQVZFX0FSRUEJMHgwRTAKKyNkZWZpbmUgX19MQ19QU1dfU0FWRV9BUkVBCQkweDEwMAorI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTA4CiAjZGVmaW5lIF9fTENfQVJFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxMjAKKyNkZWZpbmUgX19MQ19GUFJFR1NfU0FWRV9BUkVBCQkweDE2MAogI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTgwCiAjZGVmaW5lIF9fTENfQ1JFR1NfU0FWRV9BUkVBICAgICAgICAgICAgMHgxQzAKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogI2RlZmluZSBfX0xDX1BGQVVMVF9JTlRQQVJNICAgICAgICAgICAgIDB4MTFCOAorI2RlZmluZSBfX0xDX0ZQUkVHU19TQVZFX0FSRUEJCTB4MTIwMAogI2RlZmluZSBfX0xDX0dQUkVHU19TQVZFX0FSRUEgICAgICAgICAgIDB4MTI4MAorI2RlZmluZSBfX0xDX1BTV19TQVZFX0FSRUEJCTB4MTMwMAorI2RlZmluZSBfX0xDX1BSRUZJWF9TQVZFX0FSRUEJCTB4MTMxOAorI2RlZmluZSBfX0xDX0ZQX0NSRUdfU0FWRV9BUkVBCQkweDEzMUMKKyNkZWZpbmUgX19MQ19UT0RSRUdfU0FWRV9BUkVBCQkweDEzMjQKICNkZWZpbmUgX19MQ19DUFVfVElNRVJfU0FWRV9BUkVBICAgICAgICAweDEzMjgKKyNkZWZpbmUgX19MQ19DTE9DS19DT01QX1NBVkVfQVJFQQkweDEzMzEKICNkZWZpbmUgX19MQ19BUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzNDAKICNkZWZpbmUgX19MQ19DUkVHU19TQVZFX0FSRUEgICAgICAgICAgICAweDEzODAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvbW9ud3JpdGVyLmggYi9pbmNsdWRlL2FzbS1zMzkwL21vbndyaXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwY2JmOTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL21vbndyaXRlci5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1zMzkwL21vbndyaXRlci5oCisgKgorICogQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMjAwNgorICogQ2hhcmFjdGVyIGRldmljZSBkcml2ZXIgZm9yIHdyaXRpbmcgei9WTSBBUFBMREFUQSBtb25pdG9yIHJlY29yZHMKKyAqIFZlcnNpb24gMS4wCisgKiBBdXRob3Iocyk6IE1lbGlzc2EgSG93bGFuZCA8bWVsaXNzYWhAdXMuaWJtLmNvbT4KKyAqCisgKi8KKworI2lmbmRlZiBfQVNNXzM5MF9NT05XUklURVJfSAorI2RlZmluZSBfQVNNXzM5MF9NT05XUklURVJfSAorCisvKiBtb25fZnVuY3Rpb24gdmFsdWVzICovCisjZGVmaW5lIE1PTldSSVRFX1NUQVJUX0lOVEVSVkFMCTB4MDAgLyogc3RhcnQgaW50ZXJ2YWwgcmVjb3JkaW5nICovCisjZGVmaW5lIE1PTldSSVRFX1NUT1BfSU5URVJWQUwJMHgwMSAvKiBzdG9wIGludGVydmFsIG9yIGNvbmZpZyByZWNvcmRpbmcgKi8KKyNkZWZpbmUgTU9OV1JJVEVfR0VOX0VWRU5UCTB4MDIgLyogZ2VuZXJhdGUgZXZlbnQgcmVjb3JkICovCisjZGVmaW5lIE1PTldSSVRFX1NUQVJUX0NPTkZJRwkweDAzIC8qIHN0YXJ0IGNvbmZpZ3VyYXRpb24gcmVjb3JkaW5nICovCisKKy8qIHRoZSBoZWFkZXIgdGhlIGFwcCB1c2VzIGluIGl0cyB3cml0ZSgpIGRhdGEgKi8KK3N0cnVjdCBtb253cml0ZV9oZHIgeworCXVuc2lnbmVkIGNoYXIgbW9uX2Z1bmN0aW9uOworCXVuc2lnbmVkIHNob3J0IGFwcGxpZDsKKwl1bnNpZ25lZCBjaGFyIHJlY29yZF9udW07CisJdW5zaWduZWQgc2hvcnQgdmVyc2lvbjsKKwl1bnNpZ25lZCBzaG9ydCByZWxlYXNlOworCXVuc2lnbmVkIHNob3J0IG1vZF9sZXZlbDsKKwl1bnNpZ25lZCBzaG9ydCBkYXRhbGVuOworCXVuc2lnbmVkIGNoYXIgaGRybGVuOworCit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZW5kaWYgLyogX0FTTV8zOTBfTU9OV1JJVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcGdhbGxvYy5oIGIvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKaW5kZXggYTc4ZTg1My4uODAzYmM3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wZ2FsbG9jLmgKQEAgLTIyLDYgKzIyLDE2IEBACiBleHRlcm4gdm9pZCBkaWFnMTAodW5zaWduZWQgbG9uZyBhZGRyKTsKIAogLyoKKyAqIFBhZ2UgYWxsb2NhdGlvbiBvcmRlcnMuCisgKi8KKyNpZm5kZWYgX19zMzkweF9fCisjIGRlZmluZSBQR0RfQUxMT0NfT1JERVIJMQorI2Vsc2UgLyogX19zMzkweF9fICovCisjIGRlZmluZSBQTURfQUxMT0NfT1JERVIJMgorIyBkZWZpbmUgUEdEX0FMTE9DX09SREVSCTIKKyNlbmRpZiAvKiBfX3MzOTB4X18gKi8KKworLyoKICAqIEFsbG9jYXRlIGFuZCBmcmVlIHBhZ2UgdGFibGVzLiBUaGUgeHh4X2tlcm5lbCgpIHZlcnNpb25zIGFyZQogICogdXNlZCB0byBhbGxvY2F0ZSBhIGtlcm5lbCBwYWdlIHRhYmxlIC0gdGhpcyB0dXJucyBvbiBBU04gYml0cwogICogaWYgYW55LgpAQCAtMjksMzAgKzM5LDIzIEBACiAKIHN0YXRpYyBpbmxpbmUgcGdkX3QgKnBnZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQlwZ2RfdCAqcGdkOworCXBnZF90ICpwZ2QgPSAocGdkX3QgKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCBQR0RfQUxMT0NfT1JERVIpOwogCWludCBpOwogCisJaWYgKCFwZ2QpCisJCXJldHVybiBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBQVFJTX1BFUl9QR0Q7IGkrKykKICNpZm5kZWYgX19zMzkweF9fCi0JcGdkID0gKHBnZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwxKTsKLSAgICAgICAgaWYgKHBnZCAhPSBOVUxMKQotCQlmb3IgKGkgPSAwOyBpIDwgVVNFUl9QVFJTX1BFUl9QR0Q7IGkrKykKLQkJCXBtZF9jbGVhcihwbWRfb2Zmc2V0KHBnZCArIGksIGkqUEdESVJfU0laRSkpOwotI2Vsc2UgLyogX19zMzkweF9fICovCi0JcGdkID0gKHBnZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwyKTsKLSAgICAgICAgaWYgKHBnZCAhPSBOVUxMKQotCQlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUEdEOyBpKyspCi0JCQlwZ2RfY2xlYXIocGdkICsgaSk7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCisJCXBtZF9jbGVhcihwbWRfb2Zmc2V0KHBnZCArIGksIGkqUEdESVJfU0laRSkpOworI2Vsc2UKKwkJcGdkX2NsZWFyKHBnZCArIGkpOworI2VuZGlmCiAJcmV0dXJuIHBnZDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHBnZF9mcmVlKHBnZF90ICpwZ2QpCiB7Ci0jaWZuZGVmIF9fczM5MHhfXwotICAgICAgICBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwZ2QsIDEpOwotI2Vsc2UgLyogX19zMzkweF9fICovCi0gICAgICAgIGZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpIHBnZCwgMik7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCisJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcGdkLCBQR0RfQUxMT0NfT1JERVIpOwogfQogCiAjaWZuZGVmIF9fczM5MHhfXwpAQCAtNjgsMjAgKzcxLDE5IEBACiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIHN0YXRpYyBpbmxpbmUgcG1kX3QgKiBwbWRfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHZtYWRkcikKIHsKLQlwbWRfdCAqcG1kOwotICAgICAgICBpbnQgaTsKKwlwbWRfdCAqcG1kID0gKHBtZF90ICopIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgUE1EX0FMTE9DX09SREVSKTsKKwlpbnQgaTsKIAotCXBtZCA9IChwbWRfdCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDIpOwotCWlmIChwbWQgIT0gTlVMTCkgewotCQlmb3IgKGk9MDsgaSA8IFBUUlNfUEVSX1BNRDsgaSsrKQotCQkJcG1kX2NsZWFyKHBtZCtpKTsKLQl9CisJaWYgKCFwbWQpCisJCXJldHVybiBOVUxMOworCWZvciAoaT0wOyBpIDwgUFRSU19QRVJfUE1EOyBpKyspCisJCXBtZF9jbGVhcihwbWQgKyBpKTsKIAlyZXR1cm4gcG1kOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcG1kX2ZyZWUgKHBtZF90ICpwbWQpCiB7Ci0JZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZykgcG1kLCAyKTsKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwbWQsIFBNRF9BTExPQ19PUkRFUik7CiB9CiAKICNkZWZpbmUgX19wbWRfZnJlZV90bGIodGxiLHBtZCkJCQlcCkBAIC0xMjMsMTUgKzEyNSwxNCBAQAogc3RhdGljIGlubGluZSBwdGVfdCAqCiBwdGVfYWxsb2Nfb25lX2tlcm5lbChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyB2bWFkZHIpCiB7Ci0JcHRlX3QgKnB0ZTsKLSAgICAgICAgaW50IGk7CisJcHRlX3QgKnB0ZSA9IChwdGVfdCAqKSBfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTHxfX0dGUF9SRVBFQVQpOworCWludCBpOwogCi0JcHRlID0gKHB0ZV90ICopX19nZXRfZnJlZV9wYWdlKEdGUF9LRVJORUx8X19HRlBfUkVQRUFUKTsKLQlpZiAocHRlICE9IE5VTEwpIHsKLQkJZm9yIChpPTA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykgewotCQkJcHRlX2NsZWFyKG1tLCB2bWFkZHIsIHB0ZStpKTsKLQkJCXZtYWRkciArPSBQQUdFX1NJWkU7Ci0JCX0KKwlpZiAoIXB0ZSkKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChpPTA7IGkgPCBQVFJTX1BFUl9QVEU7IGkrKykgeworCQlwdGVfY2xlYXIobW0sIHZtYWRkciwgcHRlICsgaSk7CisJCXZtYWRkciArPSBQQUdFX1NJWkU7CiAJfQogCXJldHVybiBwdGU7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcGd0YWJsZS5oCmluZGV4IDI0MzEyMzguLjFhMDcwMjhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaApAQCAtODksMTkgKzg5LDYgQEAKICMgZGVmaW5lIFBUUlNfUEVSX1BHRCAgICAyMDQ4CiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKLS8qCi0gKiBwZ2QgZW50cmllcyB1c2VkIHVwIGJ5IHVzZXIva2VybmVsOgotICovCi0jaWZuZGVmIF9fczM5MHhfXwotIyBkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QgIDUxMgotIyBkZWZpbmUgVVNFUl9QR0RfUFRSUyAgICAgIDUxMgotIyBkZWZpbmUgS0VSTkVMX1BHRF9QVFJTICAgIDUxMgotI2Vsc2UgLyogX19zMzkweF9fICovCi0jIGRlZmluZSBVU0VSX1BUUlNfUEVSX1BHRCAgMjA0OAotIyBkZWZpbmUgVVNFUl9QR0RfUFRSUyAgICAgIDIwNDgKLSMgZGVmaW5lIEtFUk5FTF9QR0RfUFRSUyAgICAyMDQ4Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0KICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTICAwCiAKICNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKQEAgLTIxNiwxMiArMjAzLDE0IEBACiAjZGVmaW5lIF9QQUdFX1JPICAgICAgICAweDIwMCAgICAgICAgICAvKiBIVyByZWFkLW9ubHkgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBfUEFHRV9JTlZBTElEICAgMHg0MDAgICAgICAgICAgLyogSFcgaW52YWxpZCAgICAgICAgICAgICAgICAgICAgICAgKi8KIAotLyogTWFzayBhbmQgZm91ciBkaWZmZXJlbnQga2luZHMgb2YgaW52YWxpZCBwYWdlcy4gKi8KLSNkZWZpbmUgX1BBR0VfSU5WQUxJRF9NQVNLCTB4NjAxCi0jZGVmaW5lIF9QQUdFX0lOVkFMSURfRU1QVFkJMHg0MDAKLSNkZWZpbmUgX1BBR0VfSU5WQUxJRF9OT05FCTB4NDAxCi0jZGVmaW5lIF9QQUdFX0lOVkFMSURfU1dBUAkweDYwMAotI2RlZmluZSBfUEFHRV9JTlZBTElEX0ZJTEUJMHg2MDEKKy8qIE1hc2sgYW5kIHNpeCBkaWZmZXJlbnQgdHlwZXMgb2YgcGFnZXMuICovCisjZGVmaW5lIF9QQUdFX1RZUEVfTUFTSwkJMHg2MDEKKyNkZWZpbmUgX1BBR0VfVFlQRV9FTVBUWQkweDQwMAorI2RlZmluZSBfUEFHRV9UWVBFX05PTkUJCTB4NDAxCisjZGVmaW5lIF9QQUdFX1RZUEVfU1dBUAkJMHg2MDAKKyNkZWZpbmUgX1BBR0VfVFlQRV9GSUxFCQkweDYwMQorI2RlZmluZSBfUEFHRV9UWVBFX1JPCQkweDIwMAorI2RlZmluZSBfUEFHRV9UWVBFX1JXCQkweDAwMAogCiAjaWZuZGVmIF9fczM5MHhfXwogCkBAIC0yODAsMTUgKzI2OSwxNCBAQAogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAvKgotICogTm8gbWFwcGluZyBhdmFpbGFibGUKKyAqIFBhZ2UgcHJvdGVjdGlvbiBkZWZpbml0aW9ucy4KICAqLwotI2RlZmluZSBQQUdFX05PTkVfU0hBUkVEICBfX3BncHJvdChfUEFHRV9JTlZBTElEX05PTkUpCi0jZGVmaW5lIFBBR0VfTk9ORV9QUklWQVRFIF9fcGdwcm90KF9QQUdFX0lOVkFMSURfTk9ORSkKLSNkZWZpbmUgUEFHRV9ST19TSEFSRUQJICBfX3BncHJvdChfUEFHRV9STykKLSNkZWZpbmUgUEFHRV9ST19QUklWQVRFCSAgX19wZ3Byb3QoX1BBR0VfUk8pCi0jZGVmaW5lIFBBR0VfQ09QWQkgIF9fcGdwcm90KF9QQUdFX1JPKQotI2RlZmluZSBQQUdFX1NIQVJFRAkgIF9fcGdwcm90KDApCi0jZGVmaW5lIFBBR0VfS0VSTkVMCSAgX19wZ3Byb3QoMCkKKyNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1RZUEVfTk9ORSkKKyNkZWZpbmUgUEFHRV9STwkJX19wZ3Byb3QoX1BBR0VfVFlQRV9STykKKyNkZWZpbmUgUEFHRV9SVwkJX19wZ3Byb3QoX1BBR0VfVFlQRV9SVykKKworI2RlZmluZSBQQUdFX0tFUk5FTAlQQUdFX1JXCisjZGVmaW5lIFBBR0VfQ09QWQlQQUdFX1JPCiAKIC8qCiAgKiBUaGUgUzM5MCBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yIGV4ZWN1dGUsIGFuZCBjb25zaWRlcnMgdGhhdCB0aGUKQEAgLTI5NiwyMyArMjg0LDIzIEBACiAgKiB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KICAqLwogICAgICAgICAgLyp4d3IqLwotI2RlZmluZSBfX1AwMDAgIFBBR0VfTk9ORV9QUklWQVRFCi0jZGVmaW5lIF9fUDAwMSAgUEFHRV9ST19QUklWQVRFCi0jZGVmaW5lIF9fUDAxMCAgUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDAxMSAgUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDEwMCAgUEFHRV9ST19QUklWQVRFCi0jZGVmaW5lIF9fUDEwMSAgUEFHRV9ST19QUklWQVRFCi0jZGVmaW5lIF9fUDExMCAgUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDExMSAgUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKKyNkZWZpbmUgX19QMDAxCVBBR0VfUk8KKyNkZWZpbmUgX19QMDEwCVBBR0VfUk8KKyNkZWZpbmUgX19QMDExCVBBR0VfUk8KKyNkZWZpbmUgX19QMTAwCVBBR0VfUk8KKyNkZWZpbmUgX19QMTAxCVBBR0VfUk8KKyNkZWZpbmUgX19QMTEwCVBBR0VfUk8KKyNkZWZpbmUgX19QMTExCVBBR0VfUk8KIAotI2RlZmluZSBfX1MwMDAgIFBBR0VfTk9ORV9TSEFSRUQKLSNkZWZpbmUgX19TMDAxICBQQUdFX1JPX1NIQVJFRAotI2RlZmluZSBfX1MwMTAgIFBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMSAgUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTAwICBQQUdFX1JPX1NIQVJFRAotI2RlZmluZSBfX1MxMDEgIFBBR0VfUk9fU0hBUkVECi0jZGVmaW5lIF9fUzExMCAgUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMTExICBQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JPCisjZGVmaW5lIF9fUzAxMAlQQUdFX1JXCisjZGVmaW5lIF9fUzAxMQlQQUdFX1JXCisjZGVmaW5lIF9fUzEwMAlQQUdFX1JPCisjZGVmaW5lIF9fUzEwMQlQQUdFX1JPCisjZGVmaW5lIF9fUzExMAlQQUdFX1JXCisjZGVmaW5lIF9fUzExMQlQQUdFX1JXCiAKIC8qCiAgKiBDZXJ0YWluIGFyY2hpdGVjdHVyZXMgbmVlZCB0byBkbyBzcGVjaWFsIHRoaW5ncyB3aGVuIFBURXMKQEAgLTM3NywxOCArMzY1LDE4IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkKIHsKLQlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSURfTUFTSykgPT0gX1BBR0VfSU5WQUxJRF9FTVBUWTsKKwlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX1RZUEVfTUFTSykgPT0gX1BBR0VfVFlQRV9FTVBUWTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgcHRlX3ByZXNlbnQocHRlX3QgcHRlKQogewogCXJldHVybiAhKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpIHx8Ci0JCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9JTlZBTElEX01BU0spID09IF9QQUdFX0lOVkFMSURfTk9ORTsKKwkJKHB0ZV92YWwocHRlKSAmIF9QQUdFX1RZUEVfTUFTSykgPT0gX1BBR0VfVFlQRV9OT05FOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCiB7Ci0JcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9JTlZBTElEX01BU0spID09IF9QQUdFX0lOVkFMSURfRklMRTsKKwlyZXR1cm4gKHB0ZV92YWwocHRlKSAmIF9QQUdFX1RZUEVfTUFTSykgPT0gX1BBR0VfVFlQRV9GSUxFOwogfQogCiAjZGVmaW5lIHB0ZV9zYW1lKGEsYikJKHB0ZV92YWwoYSkgPT0gcHRlX3ZhbChiKSkKQEAgLTQ2MSw3ICs0NDksNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewotCXB0ZV92YWwoKnB0ZXApID0gX1BBR0VfSU5WQUxJRF9FTVBUWTsKKwlwdGVfdmFsKCpwdGVwKSA9IF9QQUdFX1RZUEVfRU1QVFk7CiB9CiAKIC8qCkBAIC00NzcsNyArNDY1LDcgQEAKIAogc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkKIHsKLQkvKiBEbyBub3QgY2xvYmJlciBfUEFHRV9JTlZBTElEX05PTkUgcGFnZXMhICAqLworCS8qIERvIG5vdCBjbG9iYmVyIF9QQUdFX1RZUEVfTk9ORSBwYWdlcyEgICovCiAJaWYgKCEocHRlX3ZhbChwdGUpICYgX1BBR0VfSU5WQUxJRCkpCiAJCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9STzsKIAlyZXR1cm4gcHRlOwpAQCAtNTU2LDI2ICs1NDQsMzAgQEAKIAlyZXR1cm4gcHRlOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX2lwdGUodW5zaWduZWQgbG9uZyBhZGRyZXNzLCBwdGVfdCAqcHRlcCkKK3sKKwlpZiAoIShwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0lOVkFMSUQpKSB7CisjaWZuZGVmIF9fczM5MHhfXworCQkvKiBTMzkwIGhhcyAxbWIgc2VnbWVudHMsIHdlIGFyZSBlbXVsYXRpbmcgNE1CIHNlZ21lbnRzICovCisJCXB0ZV90ICpwdG8gPSAocHRlX3QgKikgKCgodW5zaWduZWQgbG9uZykgcHRlcCkgJiAweDdmZmZmYzAwKTsKKyNlbHNlCisJCS8qIGlwdGUgaW4gemFyY2ggbW9kZSBjYW4gZG8gdGhlIG1hdGggKi8KKwkJcHRlX3QgKnB0byA9IHB0ZXA7CisjZW5kaWYKKwkJYXNtIHZvbGF0aWxlICgiaXB0ZSAlMiwlMyIKKwkJCSAgICAgIDogIj1tIiAoKnB0ZXApIDogIm0iICgqcHRlcCksCisJCQkJImEiIChwdG8pLCAiYSIgKGFkZHJlc3MpICk7CisJfQorCXB0ZV92YWwoKnB0ZXApID0gX1BBR0VfVFlQRV9FTVBUWTsKK30KKwogc3RhdGljIGlubGluZSBwdGVfdAogcHRlcF9jbGVhcl9mbHVzaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnB0ZXApCiB7CiAJcHRlX3QgcHRlID0gKnB0ZXA7Ci0jaWZuZGVmIF9fczM5MHhfXwotCWlmICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpKSB7Ci0JCS8qIFMzOTAgaGFzIDFtYiBzZWdtZW50cywgd2UgYXJlIGVtdWxhdGluZyA0TUIgc2VnbWVudHMgKi8KLQkJcHRlX3QgKnB0byA9IChwdGVfdCAqKSAoKCh1bnNpZ25lZCBsb25nKSBwdGVwKSAmIDB4N2ZmZmZjMDApOwotCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImlwdGUgJTIsJTMiCi0JCQkJICAgICAgOiAiPW0iICgqcHRlcCkgOiAibSIgKCpwdGVwKSwKLQkJCQkgICAgICAgICJhIiAocHRvKSwgImEiIChhZGRyZXNzKSApOwotCX0KLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotCWlmICghKHB0ZV92YWwocHRlKSAmIF9QQUdFX0lOVkFMSUQpKSAKLQkJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpcHRlICUyLCUzIgotCQkJCSAgICAgIDogIj1tIiAoKnB0ZXApIDogIm0iICgqcHRlcCksCi0JCQkJICAgICAgICAiYSIgKHB0ZXApLCAiYSIgKGFkZHJlc3MpICk7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0JcHRlX3ZhbCgqcHRlcCkgPSBfUEFHRV9JTlZBTElEX0VNUFRZOworCisJX19wdGVwX2lwdGUoYWRkcmVzcywgcHRlcCk7CiAJcmV0dXJuIHB0ZTsKIH0KIApAQCAtNzU1LDcgKzc0Nyw3IEBACiB7CiAJcHRlX3QgcHRlOwogCW9mZnNldCAmPSBfX1NXUF9PRkZTRVRfTUFTSzsKLQlwdGVfdmFsKHB0ZSkgPSBfUEFHRV9JTlZBTElEX1NXQVAgfCAoKHR5cGUgJiAweDFmKSA8PCAyKSB8CisJcHRlX3ZhbChwdGUpID0gX1BBR0VfVFlQRV9TV0FQIHwgKCh0eXBlICYgMHgxZikgPDwgMikgfAogCQkoKG9mZnNldCAmIDFVTCkgPDwgNykgfCAoKG9mZnNldCAmIH4xVUwpIDw8IDExKTsKIAlyZXR1cm4gcHRlOwogfQpAQCAtNzc4LDcgKzc3MCw3IEBACiAKICNkZWZpbmUgcGdvZmZfdG9fcHRlKF9fb2ZmKSBcCiAJKChwdGVfdCkgeyAoKCgoX19vZmYpICYgMHg3ZikgPDwgMSkgKyAoKChfX29mZikgPj4gNykgPDwgMTIpKSBcCi0JCSAgIHwgX1BBR0VfSU5WQUxJRF9GSUxFIH0pCisJCSAgIHwgX1BBR0VfVFlQRV9GSUxFIH0pCiAKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCmluZGV4IDViNzFkMzcuLmEzYTRlNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaApAQCAtMzM5LDQgKzMzOSwyMSBAQAogCiAjZW5kaWYKIAorLyoKKyAqIEhlbHBlciBtYWNybyBmb3IgZXhjZXB0aW9uIHRhYmxlIGVudHJpZXMKKyAqLworI2lmbmRlZiBfX3MzOTB4X18KKyNkZWZpbmUgRVhfVEFCTEUoX2ZhdWx0LF90YXJnZXQpCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCSIJLmFsaWduIDRcbiIJCQkJXAorCSIJLmxvbmcgICIgI19mYXVsdCAiLCIgI190YXJnZXQgIlxuIglcCisJIi5wcmV2aW91c1xuIgorI2Vsc2UKKyNkZWZpbmUgRVhfVEFCTEUoX2ZhdWx0LF90YXJnZXQpCQkJXAorCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCQkJXAorCSIJLmFsaWduIDhcbiIJCQkJXAorCSIJLnF1YWQgICIgI19mYXVsdCAiLCIgI190YXJnZXQgIlxuIglcCisJIi5wcmV2aW91c1xuIgorI2VuZGlmCisKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9fQVNNX1MzOTBfUFJPQ0VTU09SX0ggICAgICAgICAgICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NldHVwLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NldHVwLmgKaW5kZXggMTllMzE5Ny4uZjE5NTk3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaApAQCAtMTQsOCArMTQsNiBAQAogCiAjZGVmaW5lIFBBUk1BUkVBCQkweDEwNDAwCiAjZGVmaW5lIENPTU1BTkRfTElORV9TSVpFIAk4OTYKLSNkZWZpbmUgUkFNRElTS19PUklHSU4JCTB4ODAwMDAwCi0jZGVmaW5lIFJBTURJU0tfU0laRQkJMHg4MDAwMDAKICNkZWZpbmUgTUVNT1JZX0NIVU5LUwkJMTYJLyogbWF4IDB4N2ZmZiAqLwogI2RlZmluZSBJUExfUEFSTUJMT0NLX09SSUdJTgkweDIwMDAKIApAQCAtNDYsMTAgKzQ0LDEyIEBACiAjZGVmaW5lIE1BQ0hJTkVfSEFTX0lFRUUJKG1hY2hpbmVfZmxhZ3MgJiAyKQogI2RlZmluZSBNQUNISU5FX0hBU19DU1AJCShtYWNoaW5lX2ZsYWdzICYgOCkKICNkZWZpbmUgTUFDSElORV9IQVNfRElBRzQ0CSgxKQorI2RlZmluZSBNQUNISU5FX0hBU19NVkNPUwkoMCkKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogI2RlZmluZSBNQUNISU5FX0hBU19JRUVFCSgxKQogI2RlZmluZSBNQUNISU5FX0hBU19DU1AJCSgxKQogI2RlZmluZSBNQUNISU5FX0hBU19ESUFHNDQJKG1hY2hpbmVfZmxhZ3MgJiAzMikKKyNkZWZpbmUgTUFDSElORV9IQVNfTVZDT1MJKG1hY2hpbmVfZmxhZ3MgJiA1MTIpCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKIApAQCAtNzAsNTIgKzcwLDc2IEBACiAjZGVmaW5lIFNFVF9DT05TT0xFXzMyMTUJZG8geyBjb25zb2xlX21vZGUgPSAyOyB9IHdoaWxlICgwKQogI2RlZmluZSBTRVRfQ09OU09MRV8zMjcwCWRvIHsgY29uc29sZV9tb2RlID0gMzsgfSB3aGlsZSAoMCkKIAotc3RydWN0IGlwbF9saXN0X2hlYWRlciB7Ci0JdTMyIGxlbmd0aDsKLQl1OCAgcmVzZXJ2ZWRbM107CisKK3N0cnVjdCBpcGxfbGlzdF9oZHIgeworCXUzMiBsZW47CisJdTggIHJlc2VydmVkMVszXTsKIAl1OCAgdmVyc2lvbjsKKwl1MzIgYmxrMF9sZW47CisJdTggIHBidDsKKwl1OCAgZmxhZ3M7CisJdTE2IHJlc2VydmVkMjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBpcGxfYmxvY2tfZmNwIHsKLQl1MzIgbGVuZ3RoOwotCXU4ICBwYnQ7Ci0JdTggIHJlc2VydmVkMVszMjItMV07CisJdTggIHJlc2VydmVkMVszMTMtMV07CisJdTggIG9wdDsKKwl1OCAgcmVzZXJ2ZWQyWzNdOworCXUxNiByZXNlcnZlZDM7CiAJdTE2IGRldm5vOwotCXU4ICByZXNlcnZlZDJbNF07CisJdTggIHJlc2VydmVkNFs0XTsKIAl1NjQgd3dwbjsKIAl1NjQgbHVuOwogCXUzMiBib290cHJvZzsKLQl1OCAgcmVzZXJ2ZWQzWzEyXTsKKwl1OCAgcmVzZXJ2ZWQ1WzEyXTsKIAl1NjQgYnJfbGJhOwogCXUzMiBzY3BfZGF0YV9sZW47Ci0JdTggIHJlc2VydmVkNFsyNjBdOworCXU4ICByZXNlcnZlZDZbMjYwXTsKIAl1OCAgc2NwX2RhdGFbXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLXN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrIHsKLQl1bmlvbiB7Ci0JCXUzMiBsZW5ndGg7Ci0JCXN0cnVjdCBpcGxfbGlzdF9oZWFkZXIgaGVhZGVyOwotCX0gaGRyOwotCXN0cnVjdCBpcGxfYmxvY2tfZmNwIGZjcDsKK3N0cnVjdCBpcGxfYmxvY2tfY2N3IHsKKwl1OCAgbG9hZF9wYXJhbVs4XTsKKwl1OCAgcmVzZXJ2ZWQxWzg0XTsKKwl1OCAgcmVzZXJ2ZWQyWzJdOworCXUxNiBkZXZubzsKKwl1OCAgdm1fZmxhZ3M7CisJdTggIHJlc2VydmVkM1szXTsKKwl1MzIgdm1fcGFybV9sZW47CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi0jZGVmaW5lIElQTF9NQVhfU1VQUE9SVEVEX1ZFUlNJT04gKDApCitzdHJ1Y3QgaXBsX3BhcmFtZXRlcl9ibG9jayB7CisJc3RydWN0IGlwbF9saXN0X2hkciBoZHI7CisJdW5pb24geworCQlzdHJ1Y3QgaXBsX2Jsb2NrX2ZjcCBmY3A7CisJCXN0cnVjdCBpcGxfYmxvY2tfY2N3IGNjdzsKKwl9IGlwbF9pbmZvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBJUExfVFlQRV9GQ1AgKDApCisjZGVmaW5lIElQTF9QQVJNX0JMS19GQ1BfTEVOIChzaXplb2Yoc3RydWN0IGlwbF9saXN0X2hkcikgKyBcCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwbF9ibG9ja19mY3ApKQorCisjZGVmaW5lIElQTF9QQVJNX0JMS19DQ1dfTEVOIChzaXplb2Yoc3RydWN0IGlwbF9saXN0X2hkcikgKyBcCisJCQkgICAgICBzaXplb2Yoc3RydWN0IGlwbF9ibG9ja19jY3cpKQorCisjZGVmaW5lIElQTF9NQVhfU1VQUE9SVEVEX1ZFUlNJT04gKDApCiAKIC8qCiAgKiBJUEwgdmFsaWRpdHkgZmxhZ3MgYW5kIHBhcmFtZXRlcnMgYXMgZGV0ZWN0ZWQgaW4gaGVhZC5TCiAgKi8KLWV4dGVybiB1MzIgaXBsX3BhcmFtZXRlcl9mbGFnczsKK2V4dGVybiB1MzIgaXBsX2ZsYWdzOwogZXh0ZXJuIHUxNiBpcGxfZGV2bm87CiAKLSNkZWZpbmUgSVBMX0RFVk5PX1ZBTElECQkoaXBsX3BhcmFtZXRlcl9mbGFncyAmIDEpCi0jZGVmaW5lIElQTF9QQVJNQkxPQ0tfVkFMSUQJKGlwbF9wYXJhbWV0ZXJfZmxhZ3MgJiAyKQordm9pZCBkb19yZWlwbCh2b2lkKTsKKworZW51bSB7CisJSVBMX0RFVk5PX1ZBTElECT0gMSwKKwlJUExfUEFSTUJMT0NLX1ZBTElEID0gMiwKK307CiAKICNkZWZpbmUgSVBMX1BBUk1CTE9DS19TVEFSVAkoKHN0cnVjdCBpcGxfcGFyYW1ldGVyX2Jsb2NrICopIFwKIAkJCQkgSVBMX1BBUk1CTE9DS19PUklHSU4pCi0jZGVmaW5lIElQTF9QQVJNQkxPQ0tfU0laRQkoSVBMX1BBUk1CTE9DS19TVEFSVC0+aGRyLmxlbmd0aCkKKyNkZWZpbmUgSVBMX1BBUk1CTE9DS19TSVpFCShJUExfUEFSTUJMT0NLX1NUQVJULT5oZHIubGVuKQogCiAjZWxzZSAvKiBfX0FTU0VNQkxZX18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKaW5kZXggNjU3NjQ2MC4uOWZiMDJlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zbXAuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCkBAIC0xMDQsNyArMTA0LDcgQEAKICNkZWZpbmUgc21wX2NwdV9ub3RfcnVubmluZyhjcHUpCTEKICNkZWZpbmUgc21wX2dldF9jcHUoY3B1KSAoeyAwOyB9KQogI2RlZmluZSBzbXBfcHV0X2NwdShjcHUpICh7IDA7IH0pCi0jZGVmaW5lIHNtcF9zZXR1cF9jcHVfcG9zc2libGVfbWFwKCkKKyNkZWZpbmUgc21wX3NldHVwX2NwdV9wb3NzaWJsZV9tYXAoKQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCmluZGV4IDBiN2MwY2EuLmUyMDQ3YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCkBAIC00Nyw3ICs0Nyw3IEBACiAJCVMzOTBfbG93Y29yZS51c2VyX2FzY2UgOiBTMzkwX2xvd2NvcmUua2VybmVsX2FzY2U7CVwKIAlhc20gdm9sYXRpbGUgKCJsY3RsZyA3LDcsJTAiIDogOiAibSIgKF9fcHRvKSApOwkJCVwKIH0pCi0jZWxzZQorI2Vsc2UgLyogX19zMzkweF9fICovCiAjZGVmaW5lIHNldF9mcyh4KSBcCiAoewkJCQkJCQkJCVwKIAl1bnNpZ25lZCBsb25nIF9fcHRvOwkJCQkJCVwKQEAgLTU2LDcgKzU2LDcgQEAKIAkJUzM5MF9sb3djb3JlLnVzZXJfYXNjZSA6IFMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZTsJXAogCWFzbSB2b2xhdGlsZSAoImxjdGwgIDcsNywlMCIgOiA6ICJtIiAoX19wdG8pICk7CQkJXAogfSkKLSNlbmRpZgorI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKSAoKGEpLmFyNCA9PSAoYikuYXI0KQogCkBAIC04NSw3NiArODUsNTEgQEAKICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnNuLCBmaXh1cDsKIH07CiAKLSNpZm5kZWYgX19zMzkweF9fCi0jZGVmaW5lIF9fdWFjY2Vzc19maXh1cCBcCi0JIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIJXAotCSIyOiBsaGkgICAgJTAsJTRcbiIJCVwKLQkiICAgYnJhcyAgIDEsM2ZcbiIJCVwKLQkiICAgLmxvbmcgIDFiXG4iCQlcCi0JIjM6IGwgICAgICAxLDAoMSlcbiIJCVwKLQkiICAgYnIgICAgIDFcbiIJCQlcCi0JIi5wcmV2aW91c1xuIgkJCVwKLQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIglcCi0JIiAgIC5hbGlnbiA0XG4iCQkJXAotCSIgICAubG9uZyAgMGIsMmJcbiIJCVwKLQkiLnByZXZpb3VzIgotI2RlZmluZSBfX3VhY2Nlc3NfY2xvYmJlciAiY2MiLCAiMSIKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBfX3VhY2Nlc3NfZml4dXAgXAotCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCVwKLQkiMjogbGdoaSAgICUwLCU0XG4iCQlcCi0JIiAgIGpnICAgICAxYlxuIgkJXAotCSIucHJldmlvdXNcbiIJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIJXAotCSIgICAuYWxpZ24gOFxuIgkJCVwKLQkiICAgLnF1YWQgIDBiLDJiXG4iCQlcCi0JIi5wcmV2aW91cyIKLSNkZWZpbmUgX191YWNjZXNzX2Nsb2JiZXIgImNjIgotI2VuZGlmIC8qIF9fczM5MHhfXyAqLworc3RydWN0IHVhY2Nlc3Nfb3BzIHsKKwlzaXplX3QgKCpjb3B5X2Zyb21fdXNlcikoc2l6ZV90LCBjb25zdCB2b2lkIF9fdXNlciAqLCB2b2lkICopOworCXNpemVfdCAoKmNvcHlfZnJvbV91c2VyX3NtYWxsKShzaXplX3QsIGNvbnN0IHZvaWQgX191c2VyICosIHZvaWQgKik7CisJc2l6ZV90ICgqY29weV90b191c2VyKShzaXplX3QsIHZvaWQgX191c2VyICosIGNvbnN0IHZvaWQgKik7CisJc2l6ZV90ICgqY29weV90b191c2VyX3NtYWxsKShzaXplX3QsIHZvaWQgX191c2VyICosIGNvbnN0IHZvaWQgKik7CisJc2l6ZV90ICgqY29weV9pbl91c2VyKShzaXplX3QsIHZvaWQgX191c2VyICosIGNvbnN0IHZvaWQgX191c2VyICopOworCXNpemVfdCAoKmNsZWFyX3VzZXIpKHNpemVfdCwgdm9pZCBfX3VzZXIgKik7CisJc2l6ZV90ICgqc3Rybmxlbl91c2VyKShzaXplX3QsIGNvbnN0IGNoYXIgX191c2VyICopOworCXNpemVfdCAoKnN0cm5jcHlfZnJvbV91c2VyKShzaXplX3QsIGNvbnN0IGNoYXIgX191c2VyICosIGNoYXIgKik7CisJaW50ICgqZnV0ZXhfYXRvbWljX29wKShpbnQgb3AsIGludCBfX3VzZXIgKiwgaW50IG9wYXJnLCBpbnQgKm9sZCk7CisJaW50ICgqZnV0ZXhfYXRvbWljX2NtcHhjaGcpKGludCBfX3VzZXIgKiwgaW50IG9sZCwgaW50IG5ldyk7Cit9OworCitleHRlcm4gc3RydWN0IHVhY2Nlc3Nfb3BzIHVhY2Nlc3M7CitleHRlcm4gc3RydWN0IHVhY2Nlc3Nfb3BzIHVhY2Nlc3Nfc3RkOworZXh0ZXJuIHN0cnVjdCB1YWNjZXNzX29wcyB1YWNjZXNzX212Y29zOworCitzdGF0aWMgaW5saW5lIGludCBfX3B1dF91c2VyX2ZuKHNpemVfdCBzaXplLCB2b2lkIF9fdXNlciAqcHRyLCB2b2lkICp4KQoreworCXNpemUgPSB1YWNjZXNzLmNvcHlfdG9fdXNlcl9zbWFsbChzaXplLCBwdHIsIHgpOworCXJldHVybiBzaXplID8gLUVGQVVMVCA6IHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IF9fZ2V0X3VzZXJfZm4oc2l6ZV90IHNpemUsIGNvbnN0IHZvaWQgX191c2VyICpwdHIsIHZvaWQgKngpCit7CisJc2l6ZSA9IHVhY2Nlc3MuY29weV9mcm9tX3VzZXJfc21hbGwoc2l6ZSwgcHRyLCB4KTsKKwlyZXR1cm4gc2l6ZSA/IC1FRkFVTFQgOiBzaXplOworfQogCiAvKgogICogVGhlc2UgYXJlIHRoZSBtYWluIHNpbmdsZS12YWx1ZSB0cmFuc2ZlciByb3V0aW5lcy4gIFRoZXkgYXV0b21hdGljYWxseQogICogdXNlIHRoZSByaWdodCBzaXplIGlmIHdlIGp1c3QgaGF2ZSB0aGUgcmlnaHQgcG9pbnRlciB0eXBlLgogICovCi0jaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKLSNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgcHRyLCBlcnIpIFwKLSh7CQkJCQkJCQlcCi0JZXJyID0gMDsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIjA6IG12Y3MgIDAoJTEsJTIpLCUzLCUwXG4iCQkJXAotCQkiMTpcbiIJCQkJCQlcCi0JCV9fdWFjY2Vzc19maXh1cAkJCQkJXAotCQk6ICIrJmQiIChlcnIpCQkJCQlcCi0JCTogImQiIChzaXplb2YoKihwdHIpKSksICJhIiAocHRyKSwgIlEiICh4KSwJXAotCQkgICJLIiAoLUVGQVVMVCkJCQkJCVwKLQkJOiBfX3VhY2Nlc3NfY2xvYmJlciApOwkJCQlcCi19KQotI2Vsc2UKLSNkZWZpbmUgX19wdXRfdXNlcl9hc20oeCwgcHRyLCBlcnIpIFwKLSh7CQkJCQkJCQlcCi0JZXJyID0gMDsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKAkJCQkJCVwKLQkJIjA6IG12Y3MgIDAoJTEsJTIpLDAoJTMpLCUwXG4iCQkJXAotCQkiMTpcbiIJCQkJCQlcCi0JCV9fdWFjY2Vzc19maXh1cAkJCQkJXAotCQk6ICIrJmQiIChlcnIpCQkJCQlcCi0JCTogImQiIChzaXplb2YoKihwdHIpKSksICJhIiAocHRyKSwgImEiICgmKHgpKSwJXAotCQkgICJLIiAoLUVGQVVMVCksICJtIiAoeCkJCQlcCi0JCTogX191YWNjZXNzX2Nsb2JiZXIgKTsJCQkJXAotfSkKLSNlbmRpZgotCiAjZGVmaW5lIF9fcHV0X3VzZXIoeCwgcHRyKSBcCiAoewkJCQkJCQkJXAogCV9fdHlwZW9mX18oKihwdHIpKSBfX3ggPSAoeCk7CQkJCVwKLQlpbnQgX19wdV9lcnI7CQkJCQkJXAorCWludCBfX3B1X2VyciA9IC1FRkFVTFQ7CQkJCQlcCiAgICAgICAgIF9fY2hrX3VzZXJfcHRyKHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogCXN3aXRjaCAoc2l6ZW9mICgqKHB0cikpKSB7CQkJCVwKIAljYXNlIDE6CQkJCQkJCVwKIAljYXNlIDI6CQkJCQkJCVwKIAljYXNlIDQ6CQkJCQkJCVwKIAljYXNlIDg6CQkJCQkJCVwKLQkJX19wdXRfdXNlcl9hc20oX194LCBwdHIsIF9fcHVfZXJyKTsJCVwKKwkJX19wdV9lcnIgPSBfX3B1dF91c2VyX2ZuKHNpemVvZiAoKihwdHIpKSwJXAorCQkJCQkgcHRyLCAmX194KTsJCVwKIAkJYnJlYWs7CQkJCQkJXAogCWRlZmF1bHQ6CQkJCQkJXAogCQlfX3B1dF91c2VyX2JhZCgpOwkJCQlcCkBAIC0xNzIsNjAgKzE0NywzNiBAQAogCiBleHRlcm4gaW50IF9fcHV0X3VzZXJfYmFkKHZvaWQpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAKLSNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQotI2RlZmluZSBfX2dldF91c2VyX2FzbSh4LCBwdHIsIGVycikgXAotKHsJCQkJCQkJCVwKLQllcnIgPSAwOwkJCQkJCVwKLQlhc20gdm9sYXRpbGUgKAkJCQkJCVwKLQkJIjA6IG12Y3AgICVPMSglMiwlUjEpLDAoJTMpLCUwXG4iCQlcCi0JCSIxOlxuIgkJCQkJCVwKLQkJX191YWNjZXNzX2ZpeHVwCQkJCQlcCi0JCTogIismZCIgKGVyciksICI9USIgKHgpCQkJCVwKLQkJOiAiZCIgKHNpemVvZigqKHB0cikpKSwgImEiIChwdHIpLAkJXAotCQkgICJLIiAoLUVGQVVMVCkJCQkJCVwKLQkJOiBfX3VhY2Nlc3NfY2xvYmJlciApOwkJCQlcCi19KQotI2Vsc2UKLSNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCwgcHRyLCBlcnIpIFwKLSh7CQkJCQkJCQlcCi0JZXJyID0gMDsJCQkJCQlcCi0JYXNtIHZvbGF0aWxlICgJCQkJCQlcCi0JCSIwOiBtdmNwICAwKCUyLCU1KSwwKCUzKSwlMFxuIgkJCVwKLQkJIjE6XG4iCQkJCQkJXAotCQlfX3VhY2Nlc3NfZml4dXAJCQkJCVwKLQkJOiAiKyZkIiAoZXJyKSwgIj1tIiAoeCkJCQkJXAotCQk6ICJkIiAoc2l6ZW9mKCoocHRyKSkpLCAiYSIgKHB0ciksCQlcCi0JCSAgIksiICgtRUZBVUxUKSwgImEiICgmKHgpKQkJCVwKLQkJOiBfX3VhY2Nlc3NfY2xvYmJlciApOwkJCQlcCi19KQotI2VuZGlmCi0KICNkZWZpbmUgX19nZXRfdXNlcih4LCBwdHIpCQkJCQlcCiAoewkJCQkJCQkJXAotCWludCBfX2d1X2VycjsJCQkJCQlcCi0gICAgICAgIF9fY2hrX3VzZXJfcHRyKHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWludCBfX2d1X2VyciA9IC1FRkFVTFQ7CQkJCQlcCisJX19jaGtfdXNlcl9wdHIocHRyKTsJCQkJCVwKIAlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJCVwKIAljYXNlIDE6IHsJCQkJCQlcCiAJCXVuc2lnbmVkIGNoYXIgX194OwkJCQlcCi0JCV9fZ2V0X3VzZXJfYXNtKF9feCwgcHRyLCBfX2d1X2Vycik7CQlcCisJCV9fZ3VfZXJyID0gX19nZXRfdXNlcl9mbihzaXplb2YgKCoocHRyKSksCVwKKwkJCQkJIHB0ciwgJl9feCk7CQlcCiAJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkgKikgJl9feDsJXAogCQlicmVhazsJCQkJCQlcCiAJfTsJCQkJCQkJXAogCWNhc2UgMjogewkJCQkJCVwKIAkJdW5zaWduZWQgc2hvcnQgX194OwkJCQlcCi0JCV9fZ2V0X3VzZXJfYXNtKF9feCwgcHRyLCBfX2d1X2Vycik7CQlcCisJCV9fZ3VfZXJyID0gX19nZXRfdXNlcl9mbihzaXplb2YgKCoocHRyKSksCVwKKwkJCQkJIHB0ciwgJl9feCk7CQlcCiAJCSh4KSA9ICooX19mb3JjZSBfX3R5cGVvZl9fKCoocHRyKSkgKikgJl9feDsJXAogCQlicmVhazsJCQkJCQlcCiAJfTsJCQkJCQkJXAogCWNhc2UgNDogewkJCQkJCVwKIAkJdW5zaWduZWQgaW50IF9feDsJCQkJXAotCQlfX2dldF91c2VyX2FzbShfX3gsIHB0ciwgX19ndV9lcnIpOwkJXAorCQlfX2d1X2VyciA9IF9fZ2V0X3VzZXJfZm4oc2l6ZW9mICgqKHB0cikpLAlcCisJCQkJCSBwdHIsICZfX3gpOwkJXAogCQkoeCkgPSAqKF9fZm9yY2UgX190eXBlb2ZfXygqKHB0cikpICopICZfX3g7CVwKIAkJYnJlYWs7CQkJCQkJXAogCX07CQkJCQkJCVwKIAljYXNlIDg6IHsJCQkJCQlcCiAJCXVuc2lnbmVkIGxvbmcgbG9uZyBfX3g7CQkJCVwKLQkJX19nZXRfdXNlcl9hc20oX194LCBwdHIsIF9fZ3VfZXJyKTsJCVwKKwkJX19ndV9lcnIgPSBfX2dldF91c2VyX2ZuKHNpemVvZiAoKihwdHIpKSwJXAorCQkJCQkgcHRyLCAmX194KTsJCVwKIAkJKHgpID0gKihfX2ZvcmNlIF9fdHlwZW9mX18oKihwdHIpKSAqKSAmX194OwlcCiAJCWJyZWFrOwkJCQkJCVwKIAl9OwkJCQkJCQlcCkBAIC0yNDcsOCArMTk4LDYgQEAKICNkZWZpbmUgX19wdXRfdXNlcl91bmFsaWduZWQgX19wdXRfdXNlcgogI2RlZmluZSBfX2dldF91c2VyX3VuYWxpZ25lZCBfX2dldF91c2VyCiAKLWV4dGVybiBsb25nIF9fY29weV90b191c2VyX2FzbShjb25zdCB2b2lkICpmcm9tLCBsb25nIG4sIHZvaWQgX191c2VyICp0byk7Ci0KIC8qKgogICogX19jb3B5X3RvX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgaW50byB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCiAgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4gdXNlciBzcGFjZS4KQEAgLTI2Niw3ICsyMTUsMTAgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwogX19jb3B5X3RvX3VzZXIodm9pZCBfX3VzZXIgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIG4pCiB7Ci0JcmV0dXJuIF9fY29weV90b191c2VyX2FzbShmcm9tLCBuLCB0byk7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pICYmIChuIDw9IDI1NikpCisJCXJldHVybiB1YWNjZXNzLmNvcHlfdG9fdXNlcl9zbWFsbChuLCB0bywgZnJvbSk7CisJZWxzZQorCQlyZXR1cm4gdWFjY2Vzcy5jb3B5X3RvX3VzZXIobiwgdG8sIGZyb20pOwogfQogCiAjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCkBAIC0yOTQsOCArMjQ2LDYgQEAKIAlyZXR1cm4gbjsKIH0KIAotZXh0ZXJuIGxvbmcgX19jb3B5X2Zyb21fdXNlcl9hc20odm9pZCAqdG8sIGxvbmcgbiwgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20pOwotCiAvKioKICAqIF9fY29weV9mcm9tX3VzZXI6IC0gQ29weSBhIGJsb2NrIG9mIGRhdGEgZnJvbSB1c2VyIHNwYWNlLCB3aXRoIGxlc3MgY2hlY2tpbmcuCiAgKiBAdG86ICAgRGVzdGluYXRpb24gYWRkcmVzcywgaW4ga2VybmVsIHNwYWNlLgpAQCAtMzE2LDcgKzI2NiwxMCBAQAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCiBfX2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkIF9fdXNlciAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQogewotCXJldHVybiBfX2NvcHlfZnJvbV91c2VyX2FzbSh0bywgbiwgZnJvbSk7CisJaWYgKF9fYnVpbHRpbl9jb25zdGFudF9wKG4pICYmIChuIDw9IDI1NikpCisJCXJldHVybiB1YWNjZXNzLmNvcHlfZnJvbV91c2VyX3NtYWxsKG4sIGZyb20sIHRvKTsKKwllbHNlCisJCXJldHVybiB1YWNjZXNzLmNvcHlfZnJvbV91c2VyKG4sIGZyb20sIHRvKTsKIH0KIAogLyoqCkBAIC0zNDYsMTMgKzI5OSwxMCBAQAogCXJldHVybiBuOwogfQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyBfX2NvcHlfaW5fdXNlcl9hc20oY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIGxvbmcgbiwKLQkJCQkJCQl2b2lkIF9fdXNlciAqdG8pOwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9fY29weV9pbl91c2VyKHZvaWQgX191c2VyICp0bywgY29uc3Qgdm9pZCBfX3VzZXIgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKIHsKLQlyZXR1cm4gX19jb3B5X2luX3VzZXJfYXNtKGZyb20sIG4sIHRvKTsKKwlyZXR1cm4gdWFjY2Vzcy5jb3B5X2luX3VzZXIobiwgdG8sIGZyb20pOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKQEAgLTM2MCwzNCArMzEwLDI4IEBACiB7CiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAoX19hY2Nlc3Nfb2soZnJvbSxuKSAmJiBfX2FjY2Vzc19vayh0byxuKSkKLQkJbiA9IF9fY29weV9pbl91c2VyX2FzbShmcm9tLCBuLCB0byk7CisJCW4gPSBfX2NvcHlfaW5fdXNlcih0bywgZnJvbSwgbik7CiAJcmV0dXJuIG47CiB9CiAKIC8qCiAgKiBDb3B5IGEgbnVsbCB0ZXJtaW5hdGVkIHN0cmluZyBmcm9tIHVzZXJzcGFjZS4KICAqLwotZXh0ZXJuIGxvbmcgX19zdHJuY3B5X2Zyb21fdXNlcl9hc20obG9uZyBjb3VudCwgY2hhciAqZHN0LAotCQkJCQljb25zdCBjaGFyIF9fdXNlciAqc3JjKTsKLQogc3RhdGljIGlubGluZSBsb25nCiBzdHJuY3B5X2Zyb21fdXNlcihjaGFyICpkc3QsIGNvbnN0IGNoYXIgX191c2VyICpzcmMsIGxvbmcgY291bnQpCiB7CiAgICAgICAgIGxvbmcgcmVzID0gLUVGQVVMVDsKICAgICAgICAgbWlnaHRfc2xlZXAoKTsKICAgICAgICAgaWYgKGFjY2Vzc19vayhWRVJJRllfUkVBRCwgc3JjLCAxKSkKLSAgICAgICAgICAgICAgICByZXMgPSBfX3N0cm5jcHlfZnJvbV91c2VyX2FzbShjb3VudCwgZHN0LCBzcmMpOworCQlyZXMgPSB1YWNjZXNzLnN0cm5jcHlfZnJvbV91c2VyKGNvdW50LCBzcmMsIGRzdCk7CiAgICAgICAgIHJldHVybiByZXM7CiB9CiAKLQotZXh0ZXJuIGxvbmcgX19zdHJubGVuX3VzZXJfYXNtKGxvbmcgY291bnQsIGNvbnN0IGNoYXIgX191c2VyICpzcmMpOwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIHN0cm5sZW5fdXNlcihjb25zdCBjaGFyIF9fdXNlciAqIHNyYywgdW5zaWduZWQgbG9uZyBuKQogewogCW1pZ2h0X3NsZWVwKCk7Ci0JcmV0dXJuIF9fc3Rybmxlbl91c2VyX2FzbShuLCBzcmMpOworCXJldHVybiB1YWNjZXNzLnN0cm5sZW5fdXNlcihuLCBzcmMpOwogfQogCiAvKioKQEAgLTQxMCwxMiArMzU0LDEwIEBACiAgKiBaZXJvIFVzZXJzcGFjZQogICovCiAKLWV4dGVybiBsb25nIF9fY2xlYXJfdXNlcl9hc20odm9pZCBfX3VzZXIgKnRvLCBsb25nIG4pOwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIF9fY2xlYXJfdXNlcih2b2lkIF9fdXNlciAqdG8sIHVuc2lnbmVkIGxvbmcgbikKIHsKLQlyZXR1cm4gX19jbGVhcl91c2VyX2FzbSh0bywgbik7CisJcmV0dXJuIHVhY2Nlc3MuY2xlYXJfdXNlcihuLCB0byk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpAQCAtNDIzLDcgKzM2NSw3IEBACiB7CiAJbWlnaHRfc2xlZXAoKTsKIAlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgdG8sIG4pKQotCQluID0gX19jbGVhcl91c2VyX2FzbSh0bywgbik7CisJCW4gPSB1YWNjZXNzLmNsZWFyX3VzZXIobiwgdG8pOwogCXJldHVybiBuOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAppbmRleCBhYTdhMjQzLi4wMmI5NDJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKQEAgLTI1LDE3ICsyNSwxMiBAQAogI2RlZmluZSBfX05SX3VubGluayAgICAgICAgICAgICAgMTAKICNkZWZpbmUgX19OUl9leGVjdmUgICAgICAgICAgICAgIDExCiAjZGVmaW5lIF9fTlJfY2hkaXIgICAgICAgICAgICAgICAxMgotI2RlZmluZSBfX05SX3RpbWUgICAgICAgICAgICAgICAgMTMKICNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgIDE0CiAjZGVmaW5lIF9fTlJfY2htb2QgICAgICAgICAgICAgICAxNQotI2RlZmluZSBfX05SX2xjaG93biAgICAgICAgICAgICAgMTYKICNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgIDE5CiAjZGVmaW5lIF9fTlJfZ2V0cGlkICAgICAgICAgICAgICAyMAogI2RlZmluZSBfX05SX21vdW50ICAgICAgICAgICAgICAgMjEKICNkZWZpbmUgX19OUl91bW91bnQgICAgICAgICAgICAgIDIyCi0jZGVmaW5lIF9fTlJfc2V0dWlkICAgICAgICAgICAgICAyMwotI2RlZmluZSBfX05SX2dldHVpZCAgICAgICAgICAgICAgMjQKLSNkZWZpbmUgX19OUl9zdGltZSAgICAgICAgICAgICAgIDI1CiAjZGVmaW5lIF9fTlJfcHRyYWNlICAgICAgICAgICAgICAyNgogI2RlZmluZSBfX05SX2FsYXJtICAgICAgICAgICAgICAgMjcKICNkZWZpbmUgX19OUl9wYXVzZSAgICAgICAgICAgICAgIDI5CkBAIC01MSwxMSArNDYsNyBAQAogI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgNDIKICNkZWZpbmUgX19OUl90aW1lcyAgICAgICAgICAgICAgIDQzCiAjZGVmaW5lIF9fTlJfYnJrICAgICAgICAgICAgICAgICA0NQotI2RlZmluZSBfX05SX3NldGdpZCAgICAgICAgICAgICAgNDYKLSNkZWZpbmUgX19OUl9nZXRnaWQgICAgICAgICAgICAgIDQ3CiAjZGVmaW5lIF9fTlJfc2lnbmFsICAgICAgICAgICAgICA0OAotI2RlZmluZSBfX05SX2dldGV1aWQgICAgICAgICAgICAgNDkKLSNkZWZpbmUgX19OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwCiAjZGVmaW5lIF9fTlJfYWNjdCAgICAgICAgICAgICAgICA1MQogI2RlZmluZSBfX05SX3Vtb3VudDIgICAgICAgICAgICAgNTIKICNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgIDU0CkBAIC02OSwxOCArNjAsMTMgQEAKICNkZWZpbmUgX19OUl9nZXRwZ3JwICAgICAgICAgICAgIDY1CiAjZGVmaW5lIF9fTlJfc2V0c2lkICAgICAgICAgICAgICA2NgogI2RlZmluZSBfX05SX3NpZ2FjdGlvbiAgICAgICAgICAgNjcKLSNkZWZpbmUgX19OUl9zZXRyZXVpZCAgICAgICAgICAgIDcwCi0jZGVmaW5lIF9fTlJfc2V0cmVnaWQgICAgICAgICAgICA3MQogI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgICAgICAgICAgNzIKICNkZWZpbmUgX19OUl9zaWdwZW5kaW5nICAgICAgICAgIDczCiAjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgICAgICAgICA3NAogI2RlZmluZSBfX05SX3NldHJsaW1pdCAgICAgICAgICAgNzUKLSNkZWZpbmUgX19OUl9nZXRybGltaXQgICAgICAgICAgIDc2CiAjZGVmaW5lIF9fTlJfZ2V0cnVzYWdlICAgICAgICAgICA3NwogI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAgICAgICAgNzgKICNkZWZpbmUgX19OUl9zZXR0aW1lb2ZkYXkgICAgICAgIDc5Ci0jZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzICAgICAgICAgICA4MAotI2RlZmluZSBfX05SX3NldGdyb3VwcyAgICAgICAgICAgODEKICNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgIDgzCiAjZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICA4NQogI2RlZmluZSBfX05SX3VzZWxpYiAgICAgICAgICAgICAgODYKQEAgLTkyLDEyICs3OCwxMCBAQAogI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAgOTIKICNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgICAgICAgICAgIDkzCiAjZGVmaW5lIF9fTlJfZmNobW9kICAgICAgICAgICAgICA5NAotI2RlZmluZSBfX05SX2ZjaG93biAgICAgICAgICAgICAgOTUKICNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAgICAgICAgIDk2CiAjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgICAgICAgICA5NwogI2RlZmluZSBfX05SX3N0YXRmcyAgICAgICAgICAgICAgOTkKICNkZWZpbmUgX19OUl9mc3RhdGZzICAgICAgICAgICAgMTAwCi0jZGVmaW5lIF9fTlJfaW9wZXJtICAgICAgICAgICAgIDEwMQogI2RlZmluZSBfX05SX3NvY2tldGNhbGwgICAgICAgICAxMDIKICNkZWZpbmUgX19OUl9zeXNsb2cgICAgICAgICAgICAgMTAzCiAjZGVmaW5lIF9fTlJfc2V0aXRpbWVyICAgICAgICAgIDEwNApAQCAtMTMxLDExICsxMTUsNyBAQAogI2RlZmluZSBfX05SX3N5c2ZzICAgICAgICAgICAgICAxMzUKICNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAgICAgICAgMTM2CiAjZGVmaW5lIF9fTlJfYWZzX3N5c2NhbGwgICAgICAgIDEzNyAvKiBTeXNjYWxsIGZvciBBbmRyZXcgRmlsZSBTeXN0ZW0gKi8KLSNkZWZpbmUgX19OUl9zZXRmc3VpZCAgICAgICAgICAgMTM4Ci0jZGVmaW5lIF9fTlJfc2V0ZnNnaWQgICAgICAgICAgIDEzOQotI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAxNDAKICNkZWZpbmUgX19OUl9nZXRkZW50cyAgICAgICAgICAgMTQxCi0jZGVmaW5lIF9fTlJfX25ld3NlbGVjdCAgICAgICAgIDE0MgogI2RlZmluZSBfX05SX2Zsb2NrICAgICAgICAgICAgICAxNDMKICNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgMTQ0CiAjZGVmaW5lIF9fTlJfcmVhZHYgICAgICAgICAgICAgIDE0NQpAQCAtMTU3LDEzICsxMzcsOSBAQAogI2RlZmluZSBfX05SX3NjaGVkX3JyX2dldF9pbnRlcnZhbCAgICAgIDE2MQogI2RlZmluZSBfX05SX25hbm9zbGVlcCAgICAgICAgICAxNjIKICNkZWZpbmUgX19OUl9tcmVtYXAgICAgICAgICAgICAgMTYzCi0jZGVmaW5lIF9fTlJfc2V0cmVzdWlkICAgICAgICAgIDE2NAotI2RlZmluZSBfX05SX2dldHJlc3VpZCAgICAgICAgICAxNjUKICNkZWZpbmUgX19OUl9xdWVyeV9tb2R1bGUgICAgICAgMTY3CiAjZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgIDE2OAogI2RlZmluZSBfX05SX25mc3NlcnZjdGwgICAgICAgICAxNjkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQgICAgICAgICAgMTcwCi0jZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkICAgICAgICAgIDE3MQogI2RlZmluZSBfX05SX3ByY3RsICAgICAgICAgICAgICAxNzIKICNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gICAgICAgMTczCiAjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgIDE3NApAQCAtMTc0LDcgKzE1MCw2IEBACiAjZGVmaW5lIF9fTlJfcnRfc2lnc3VzcGVuZCAgICAgIDE3OQogI2RlZmluZSBfX05SX3ByZWFkNjQgICAgICAgICAgICAxODAKICNkZWZpbmUgX19OUl9wd3JpdGU2NCAgICAgICAgICAgMTgxCi0jZGVmaW5lIF9fTlJfY2hvd24gICAgICAgICAgICAgIDE4MgogI2RlZmluZSBfX05SX2dldGN3ZCAgICAgICAgICAgICAxODMKICNkZWZpbmUgX19OUl9jYXBnZXQgICAgICAgICAgICAgMTg0CiAjZGVmaW5lIF9fTlJfY2Fwc2V0ICAgICAgICAgICAgIDE4NQpAQCAtMTgzLDM5ICsxNTgsMTEgQEAKICNkZWZpbmUgX19OUl9nZXRwbXNnCQkxODgKICNkZWZpbmUgX19OUl9wdXRwbXNnCQkxODkKICNkZWZpbmUgX19OUl92Zm9yawkJMTkwCi0jZGVmaW5lIF9fTlJfdWdldHJsaW1pdAkJMTkxCS8qIFN1UyBjb21wbGlhbnQgZ2V0cmxpbWl0ICovCi0jZGVmaW5lIF9fTlJfbW1hcDIJCTE5MgotI2RlZmluZSBfX05SX3RydW5jYXRlNjQJCTE5MwotI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0CTE5NAotI2RlZmluZSBfX05SX3N0YXQ2NAkJMTk1Ci0jZGVmaW5lIF9fTlJfbHN0YXQ2NAkJMTk2Ci0jZGVmaW5lIF9fTlJfZnN0YXQ2NAkJMTk3Ci0jZGVmaW5lIF9fTlJfbGNob3duMzIJCTE5OAotI2RlZmluZSBfX05SX2dldHVpZDMyCQkxOTkKLSNkZWZpbmUgX19OUl9nZXRnaWQzMgkJMjAwCi0jZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyCQkyMDEKLSNkZWZpbmUgX19OUl9nZXRlZ2lkMzIJCTIwMgotI2RlZmluZSBfX05SX3NldHJldWlkMzIJCTIwMwotI2RlZmluZSBfX05SX3NldHJlZ2lkMzIJCTIwNAotI2RlZmluZSBfX05SX2dldGdyb3VwczMyCTIwNQotI2RlZmluZSBfX05SX3NldGdyb3VwczMyCTIwNgotI2RlZmluZSBfX05SX2ZjaG93bjMyCQkyMDcKLSNkZWZpbmUgX19OUl9zZXRyZXN1aWQzMgkyMDgKLSNkZWZpbmUgX19OUl9nZXRyZXN1aWQzMgkyMDkKLSNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMgkyMTAKLSNkZWZpbmUgX19OUl9nZXRyZXNnaWQzMgkyMTEKLSNkZWZpbmUgX19OUl9jaG93bjMyCQkyMTIKLSNkZWZpbmUgX19OUl9zZXR1aWQzMgkJMjEzCi0jZGVmaW5lIF9fTlJfc2V0Z2lkMzIJCTIxNAotI2RlZmluZSBfX05SX3NldGZzdWlkMzIJCTIxNQotI2RlZmluZSBfX05SX3NldGZzZ2lkMzIJCTIxNgogI2RlZmluZSBfX05SX3Bpdm90X3Jvb3QgICAgICAgICAyMTcKICNkZWZpbmUgX19OUl9taW5jb3JlICAgICAgICAgICAgMjE4CiAjZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgIDIxOQogI2RlZmluZSBfX05SX2dldGRlbnRzNjQJCTIyMAotI2RlZmluZSBfX05SX2ZjbnRsNjQJCTIyMQogI2RlZmluZSBfX05SX3JlYWRhaGVhZAkJMjIyCi0jZGVmaW5lIF9fTlJfc2VuZGZpbGU2NAkJMjIzCiAjZGVmaW5lIF9fTlJfc2V0eGF0dHIJCTIyNAogI2RlZmluZSBfX05SX2xzZXR4YXR0cgkJMjI1CiAjZGVmaW5lIF9fTlJfZnNldHhhdHRyCQkyMjYKQEAgLTI1Niw3ICsyMDMsNiBAQAogI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcwkoX19OUl90aW1lcl9jcmVhdGUrNykKICNkZWZpbmUgX19OUl9jbG9ja19uYW5vc2xlZXAJKF9fTlJfdGltZXJfY3JlYXRlKzgpCiAvKiBOdW1iZXIgMjYzIGlzIHJlc2VydmVkIGZvciB2c2VydmVyICovCi0jZGVmaW5lIF9fTlJfZmFkdmlzZTY0XzY0CTI2NAogI2RlZmluZSBfX05SX3N0YXRmczY0CQkyNjUKICNkZWZpbmUgX19OUl9mc3RhdGZzNjQJCTI2NgogI2RlZmluZSBfX05SX3JlbWFwX2ZpbGVfcGFnZXMJMjY3CkBAIC0yODUsNyArMjMxLDYgQEAKICNkZWZpbmUgX19OUl9ta25vZGF0CQkyOTAKICNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjkxCiAjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyOTIKLSNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCTI5MwogI2RlZmluZSBfX05SX3VubGlua2F0CQkyOTQKICNkZWZpbmUgX19OUl9yZW5hbWVhdAkJMjk1CiAjZGVmaW5lIF9fTlJfbGlua2F0CQkyOTYKQEAgLTMxMCw2MiArMjU1LDY1IEBACiAgKiBoYXZlIGEgZGlmZmVyZW50IG5hbWUgYWx0aG91Z2ggdGhleSBkbyB0aGUgc2FtZSAoZS5nLiBfX05SX2Nob3duMzIKICAqIGlzIF9fTlJfY2hvd24gb24gNjQgYml0KS4KICAqLwotI2lmZGVmIF9fczM5MHhfXwotI3VuZGVmICBfX05SX3RpbWUKLSN1bmRlZiAgX19OUl9sY2hvd24KLSN1bmRlZiAgX19OUl9zZXR1aWQKLSN1bmRlZiAgX19OUl9nZXR1aWQKLSN1bmRlZiAgX19OUl9zdGltZQotI3VuZGVmICBfX05SX3NldGdpZAotI3VuZGVmICBfX05SX2dldGdpZAotI3VuZGVmICBfX05SX2dldGV1aWQKLSN1bmRlZiAgX19OUl9nZXRlZ2lkCi0jdW5kZWYgIF9fTlJfc2V0cmV1aWQKLSN1bmRlZiAgX19OUl9zZXRyZWdpZAotI3VuZGVmICBfX05SX2dldHJsaW1pdAotI3VuZGVmICBfX05SX2dldGdyb3VwcwotI3VuZGVmICBfX05SX3NldGdyb3VwcwotI3VuZGVmICBfX05SX2ZjaG93bgotI3VuZGVmICBfX05SX2lvcGVybQotI3VuZGVmICBfX05SX3NldGZzdWlkCi0jdW5kZWYgIF9fTlJfc2V0ZnNnaWQKLSN1bmRlZiAgX19OUl9fbGxzZWVrCi0jdW5kZWYgIF9fTlJfX25ld3NlbGVjdAotI3VuZGVmICBfX05SX3NldHJlc3VpZAotI3VuZGVmICBfX05SX2dldHJlc3VpZAotI3VuZGVmICBfX05SX3NldHJlc2dpZAotI3VuZGVmICBfX05SX2dldHJlc2dpZAotI3VuZGVmICBfX05SX2Nob3duCi0jdW5kZWYgIF9fTlJfdWdldHJsaW1pdAotI3VuZGVmICBfX05SX21tYXAyCi0jdW5kZWYgIF9fTlJfdHJ1bmNhdGU2NAotI3VuZGVmICBfX05SX2Z0cnVuY2F0ZTY0Ci0jdW5kZWYgIF9fTlJfc3RhdDY0Ci0jdW5kZWYgIF9fTlJfbHN0YXQ2NAotI3VuZGVmICBfX05SX2ZzdGF0NjQKLSN1bmRlZiAgX19OUl9sY2hvd24zMgotI3VuZGVmICBfX05SX2dldHVpZDMyCi0jdW5kZWYgIF9fTlJfZ2V0Z2lkMzIKLSN1bmRlZiAgX19OUl9nZXRldWlkMzIKLSN1bmRlZiAgX19OUl9nZXRlZ2lkMzIKLSN1bmRlZiAgX19OUl9zZXRyZXVpZDMyCi0jdW5kZWYgIF9fTlJfc2V0cmVnaWQzMgotI3VuZGVmICBfX05SX2dldGdyb3VwczMyCi0jdW5kZWYgIF9fTlJfc2V0Z3JvdXBzMzIKLSN1bmRlZiAgX19OUl9mY2hvd24zMgotI3VuZGVmICBfX05SX3NldHJlc3VpZDMyCi0jdW5kZWYgIF9fTlJfZ2V0cmVzdWlkMzIKLSN1bmRlZiAgX19OUl9zZXRyZXNnaWQzMgotI3VuZGVmICBfX05SX2dldHJlc2dpZDMyCi0jdW5kZWYgIF9fTlJfY2hvd24zMgotI3VuZGVmICBfX05SX3NldHVpZDMyCi0jdW5kZWYgIF9fTlJfc2V0Z2lkMzIKLSN1bmRlZiAgX19OUl9zZXRmc3VpZDMyCi0jdW5kZWYgIF9fTlJfc2V0ZnNnaWQzMgotI3VuZGVmICBfX05SX2ZjbnRsNjQKLSN1bmRlZiAgX19OUl9zZW5kZmlsZTY0Ci0jdW5kZWYgIF9fTlJfZmFkdmlzZTY0XzY0Ci0jdW5kZWYgIF9fTlJfZnN0YXRhdDY0CisjaWZuZGVmIF9fczM5MHhfXworCisjZGVmaW5lIF9fTlJfdGltZQkJIDEzCisjZGVmaW5lIF9fTlJfbGNob3duCQkgMTYKKyNkZWZpbmUgX19OUl9zZXR1aWQJCSAyMworI2RlZmluZSBfX05SX2dldHVpZAkJIDI0CisjZGVmaW5lIF9fTlJfc3RpbWUJCSAyNQorI2RlZmluZSBfX05SX3NldGdpZAkJIDQ2CisjZGVmaW5lIF9fTlJfZ2V0Z2lkCQkgNDcKKyNkZWZpbmUgX19OUl9nZXRldWlkCQkgNDkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkCQkgNTAKKyNkZWZpbmUgX19OUl9zZXRyZXVpZAkJIDcwCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQJCSA3MQorI2RlZmluZSBfX05SX2dldHJsaW1pdAkJIDc2CisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzCQkgODAKKyNkZWZpbmUgX19OUl9zZXRncm91cHMJCSA4MQorI2RlZmluZSBfX05SX2ZjaG93bgkJIDk1CisjZGVmaW5lIF9fTlJfaW9wZXJtCQkxMDEKKyNkZWZpbmUgX19OUl9zZXRmc3VpZAkJMTM4CisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQJCTEzOQorI2RlZmluZSBfX05SX19sbHNlZWsJCTE0MAorI2RlZmluZSBfX05SX19uZXdzZWxlY3QgCTE0MgorI2RlZmluZSBfX05SX3NldHJlc3VpZAkJMTY0CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkCQkxNjUKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQJCTE3MAorI2RlZmluZSBfX05SX2dldHJlc2dpZAkJMTcxCisjZGVmaW5lIF9fTlJfY2hvd24JCTE4MgorI2RlZmluZSBfX05SX3VnZXRybGltaXQJCTE5MQkvKiBTdVMgY29tcGxpYW50IGdldHJsaW1pdCAqLworI2RlZmluZSBfX05SX21tYXAyCQkxOTIKKyNkZWZpbmUgX19OUl90cnVuY2F0ZTY0CQkxOTMKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGU2NAkxOTQKKyNkZWZpbmUgX19OUl9zdGF0NjQJCTE5NQorI2RlZmluZSBfX05SX2xzdGF0NjQJCTE5NgorI2RlZmluZSBfX05SX2ZzdGF0NjQJCTE5NworI2RlZmluZSBfX05SX2xjaG93bjMyCQkxOTgKKyNkZWZpbmUgX19OUl9nZXR1aWQzMgkJMTk5CisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIJCTIwMAorI2RlZmluZSBfX05SX2dldGV1aWQzMgkJMjAxCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyCQkyMDIKKyNkZWZpbmUgX19OUl9zZXRyZXVpZDMyCQkyMDMKKyNkZWZpbmUgX19OUl9zZXRyZWdpZDMyCQkyMDQKKyNkZWZpbmUgX19OUl9nZXRncm91cHMzMgkyMDUKKyNkZWZpbmUgX19OUl9zZXRncm91cHMzMgkyMDYKKyNkZWZpbmUgX19OUl9mY2hvd24zMgkJMjA3CisjZGVmaW5lIF9fTlJfc2V0cmVzdWlkMzIJMjA4CisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIJMjA5CisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkMzIJMjEwCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIJMjExCisjZGVmaW5lIF9fTlJfY2hvd24zMgkJMjEyCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIJCTIxMworI2RlZmluZSBfX05SX3NldGdpZDMyCQkyMTQKKyNkZWZpbmUgX19OUl9zZXRmc3VpZDMyCQkyMTUKKyNkZWZpbmUgX19OUl9zZXRmc2dpZDMyCQkyMTYKKyNkZWZpbmUgX19OUl9mY250bDY0CQkyMjEKKyNkZWZpbmUgX19OUl9zZW5kZmlsZTY0CQkyMjMKKyNkZWZpbmUgX19OUl9mYWR2aXNlNjRfNjQJMjY0CisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0CQkyOTMKKworI2Vsc2UKIAogI2RlZmluZSBfX05SX3NlbGVjdAkJMTQyCiAjZGVmaW5lIF9fTlJfZ2V0cmxpbWl0CQkxOTEJLyogU3VTIGNvbXBsaWFudCBnZXRybGltaXQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvejkwY3J5cHQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvejkwY3J5cHQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzFhMjQzOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3o5MGNyeXB0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMTIgKzAsMCBAQAotLyoKLSAqICBpbmNsdWRlL2FzbS1zMzkwL3o5MGNyeXB0LmgKLSAqCi0gKiAgejkwY3J5cHQgMS4zLjMgKHVzZXItdmlzaWJsZSBoZWFkZXIpCi0gKgotICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDUgSUJNIENvcnBvcmF0aW9uCi0gKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCi0gKiAgICAgICAgICAgICBFcmljIFJvc3NtYW4gKGVkcm9zc21hQHVzLmlibS5jb20pCi0gKgotICogIEhvdHBsdWcgJiBtaXNjIGRldmljZSBzdXBwb3J0OiBKb2NoZW4gUm9laHJpZyAocm9laHJpZ0BkZS5pYm0uY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQotICogYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9TMzkwX1o5MENSWVBUX0gKLSNkZWZpbmUgX19BU01fUzM5MF9aOTBDUllQVF9ICi0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLQotI2RlZmluZSB6OTBjcnlwdF9WRVJTSU9OIDEKLSNkZWZpbmUgejkwY3J5cHRfUkVMRUFTRSAzCS8vIDIgPSBQQ0lYQ0MsIDMgPSByZXdyaXRlIGZvciBjb2Rpbmcgc3RhbmRhcmRzCi0jZGVmaW5lIHo5MGNyeXB0X1ZBUklBTlQgMwkvLyAzID0gQ0VYMkEgc3VwcG9ydAotCi0vKioKLSAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG8KLSAqCi0gKiBSZXF1aXJlbWVudHM6Ci0gKiAtIG91dHB1dGRhdGFsZW5ndGggaXMgYXQgbGVhc3QgYXMgbGFyZ2UgYXMgaW5wdXRkYXRhbGVuZ3RoLgotICogLSBBbGwga2V5IHBhcnRzIGFyZSByaWdodCBqdXN0aWZpZWQgaW4gdGhlaXIgZmllbGRzLCBwYWRkZWQgb24KLSAqICAgdGhlIGxlZnQgd2l0aCB6ZXJvZXMuCi0gKiAtIGxlbmd0aChiX2tleSkgPSBpbnB1dGRhdGFsZW5ndGgKLSAqIC0gbGVuZ3RoKG5fbW9kdWx1cykgPSBpbnB1dGRhdGFsZW5ndGgKLSAqLwotc3RydWN0IGljYV9yc2FfbW9kZXhwbyB7Ci0JY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7Ci0JdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7Ci0JY2hhciBfX3VzZXIgKgliX2tleTsKLQljaGFyIF9fdXNlciAqCW5fbW9kdWx1czsKLX07Ci0KLS8qKgotICogc3RydWN0IGljYV9yc2FfbW9kZXhwb19jcnQKLSAqCi0gKiBSZXF1aXJlbWVudHM6Ci0gKiAtIGlucHV0ZGF0YWxlbmd0aCBpcyBldmVuLgotICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KLSAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCi0gKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgotICogLSBsZW5ndGgoYnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAotICogLSBsZW5ndGgoYnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCi0gKiAtIGxlbmd0aChucF9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4Ci0gKiAtIGxlbmd0aChucV9rZXkpCT0gaW5wdXRkYXRhbGVuZ3RoLzIKLSAqIC0gbGVuZ3RoKHVfbXVsdF9pbnYpID0gaW5wdXRkYXRhbGVuZ3RoLzIgKyA4Ci0gKi8KLXN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0IHsKLQljaGFyIF9fdXNlciAqCWlucHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJaW5wdXRkYXRhbGVuZ3RoOwotCWNoYXIgX191c2VyICoJb3V0cHV0ZGF0YTsKLQl1bnNpZ25lZCBpbnQJb3V0cHV0ZGF0YWxlbmd0aDsKLQljaGFyIF9fdXNlciAqCWJwX2tleTsKLQljaGFyIF9fdXNlciAqCWJxX2tleTsKLQljaGFyIF9fdXNlciAqCW5wX3ByaW1lOwotCWNoYXIgX191c2VyICoJbnFfcHJpbWU7Ci0JY2hhciBfX3VzZXIgKgl1X211bHRfaW52OwotfTsKLQotI2RlZmluZSBaOTBfSU9DVExfTUFHSUMgJ3onICAvLyBOT1RFOiAgTmVlZCB0byBhbGxvY2F0ZSBmcm9tIGxpbnV4IGZvbGtzCi0KLS8qKgotICogSW50ZXJmYWNlIG5vdGVzOgotICoKLSAqIFRoZSBpb2N0bCgpcyB3aGljaCBhcmUgaW1wbGVtZW50ZWQgKGFsb25nIHdpdGggcmVsZXZhbnQgZGV0YWlscykKLSAqIGFyZToKLSAqCi0gKiAgIElDQVJTQU1PREVYUE8KLSAqICAgICBQZXJmb3JtIGFuIFJTQSBvcGVyYXRpb24gdXNpbmcgYSBNb2R1bHVzLUV4cG9uZW50IHBhaXIKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwbyBzdHJ1Y3QgYXMgaXRzIGFyZy4KLSAqCi0gKiAgICAgTk9URTogcGxlYXNlIHJlZmVyIHRvIHRoZSBjb21tZW50cyBwcmVjZWRpbmcgdGhpcyBzdHJ1Y3R1cmUKLSAqICAgICAgICAgICBmb3IgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIHRoZSBjb250ZW50cyBvZiB0aGUKLSAqICAgICAgICAgICBibG9jawotICoKLSAqICAgSUNBUlNBQ1JUCi0gKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgQ2hpbmVzZS1SZW1haW5kZXIgVGhlb3JlbSBrZXkKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwb19jcnQgc3RydWN0IGFzIGl0cyBhcmcuCi0gKgotICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCi0gKiAgICAgICAgICAgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGZvciB0aGUgY29udGVudHMgb2YgdGhlCi0gKiAgICAgICAgICAgYmxvY2sKLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBkZXZpY2UgdHlwZXMgdG9nZXRoZXIuCi0gKgotICogICBaOTBTVEFUX1BDSUNBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0FzLgotICoKLSAqICAgWjkwU1RBVF9QQ0lDQ0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIFBDSUNDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMMkNPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDIgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfUENJWENDTUNMM0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIE1DTDMgUENJWENDcy4KLSAqCi0gKiAgIFo5MFNUQVRfQ0VYMkNDT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQ3MuCi0gKgotICogICBaOTBTVEFUX0NFWDJBQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgQ0VYMkFzLgotICoKLSAqICAgWjkwU1RBVF9SRVFVRVNUUV9DT1VOVAotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyB3YWl0aW5nIHRvIGJlCi0gKiAgICAgc2VudCB0byBhIGRldmljZS4KLSAqCi0gKiAgIFo5MFNUQVRfUEVORElOR1FfQ09VTlQKLSAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIGVudHJpZXMgc2VudCB0byBhCi0gKiAgICAgZGV2aWNlIGF3YWl0aW5nIHRoZSByZXBseS4KLSAqCi0gKiAgIFo5MFNUQVRfVE9UQUxPUEVOX0NPVU5UCi0gKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBvcGVuIGZpbGUgaGFuZGxlcy4KLSAqCi0gKiAgIFo5MFNUQVRfRE9NQUlOX0lOREVYCi0gKiAgICAgUmV0dXJuIHRoZSBpbnRlZ2VyIHZhbHVlIG9mIHRoZSBDcnlwdG9ncmFwaGljIERvbWFpbi4KLSAqCi0gKiAgIFo5MFNUQVRfU1RBVFVTX01BU0sKLSAqICAgICBSZXR1cm4gYW4gNjQgZWxlbWVudCBhcnJheSBvZiB1bnNpZ25lZCBjaGFycyBmb3IgdGhlIHN0YXR1cyBvZgotICogICAgIGFsbCBkZXZpY2VzLgotICogICAgICAgMHgwMTogUENJQ0EKLSAqICAgICAgIDB4MDI6IFBDSUNDCi0gKiAgICAgICAweDAzOiBQQ0lYQ0NfTUNMMgotICogICAgICAgMHgwNDogUENJWENDX01DTDMKLSAqICAgICAgIDB4MDU6IENFWDJDCi0gKiAgICAgICAweDA2OiBDRVgyQQotICogICAgICAgMHgwZDogZGV2aWNlIGlzIGRpc2FibGVkIHZpYSB0aGUgcHJvYyBmaWxlc3lzdGVtCi0gKgotICogICBaOTBTVEFUX1FERVBUSF9NQVNLCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBxdWV1ZQotICogICAgIGRlcHRoIG9mIGFsbCBkZXZpY2VzLgotICoKLSAqICAgWjkwU1RBVF9QRVJERVZfUkVRQ05UCi0gKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlcnMgZm9yIHRoZSBudW1iZXIKLSAqICAgICBvZiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3RzIHBlciBkZXZpY2Ugc2luY2UgdGhlIGRldmljZQotICogICAgIHdhcyBkZXRlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUuCi0gKgotICogICBJQ0FaOTBTVEFUVVMgKGRlcHJlY2F0ZWQpCi0gKiAgICAgUmV0dXJuIHNvbWUgZGV2aWNlIGRyaXZlciBzdGF0dXMgaW4gYSBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QKLSAqICAgICBUaGlzIHRha2VzIGFuIGljYV96OTBfc3RhdHVzIHN0cnVjdCBhcyBpdHMgYXJnLgotICoKLSAqICAgICBOT1RFOiB0aGlzIGlvY3RsKCkgaXMgZGVwcmVjYXRlZCwgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKLSAqICAgICAgICAgICBzaW5nbGUgaW9jdGwoKXMgZm9yIGVhY2ggdHlwZSBvZiBzdGF0dXMgYmVpbmcgcmVxdWVzdGVkCi0gKgotICogICBaOTBTVEFUX1BDSVhDQ0NPVU5UIChkZXByZWNhdGVkKQotICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lYQ0NzIChNQ0wyICsgTUNMMykuCi0gKiAgICAgVGhpcyBpcyBERVBSRUNBVEVEIG5vdyB0aGF0IE1DTDMgUENJWENDcyBhcmUgdHJlYXRlZCBkaWZmZXJlbnRseSBmcm9tCi0gKiAgICAgTUNMMiBQQ0lYQ0NzLgotICoKLSAqICAgWjkwUVVJRVNDRSAobm90IHJlY29tbWVuZGVkKQotICogICAgIFF1aWVzY2UgdGhlIGRyaXZlci4gIFRoaXMgaXMgaW50ZW5kZWQgdG8gc3RvcCBhbGwgbmV3Ci0gKiAgICAgcmVxdWVzdHMgZnJvbSBiZWluZyBwcm9jZXNzZWQuICBJdHMgdXNlIGlzIE5PVCByZWNvbW1lbmRlZCwKLSAqICAgICBleGNlcHQgaW4gY2lyY3Vtc3RhbmNlcyB3aGVyZSB0aGVyZSBpcyBubyBvdGhlciB3YXkgdG8gc3RvcAotICogICAgIGNhbGxlcnMgZnJvbSBhY2Nlc3NpbmcgdGhlIGRyaXZlci4gIEl0cyBvcmlnaW5hbCB1c2Ugd2FzIHRvCi0gKiAgICAgYWxsb3cgdGhlIGRyaXZlciB0byBiZSAiZHJhaW5lZCIgb2Ygd29yayBpbiBwcmVwYXJhdGlvbiBmb3IKLSAqICAgICBhIHN5c3RlbSBzaHV0ZG93bi4KLSAqCi0gKiAgICAgTk9URTogb25jZSBpc3N1ZWQsIHRoaXMgYmFuIG9uIG5ldyB3b3JrIGNhbm5vdCBiZSB1bmRvbmUKLSAqICAgICAgICAgICBleGNlcHQgYnkgdW5sb2FkaW5nIGFuZCByZWxvYWRpbmcgdGhlIGRyaXZlci4KLSAqLwotCi0vKioKLSAqIFN1cHBvcnRlZCBpb2N0bCBjYWxscwotICovCi0jZGVmaW5lIElDQVJTQU1PREVYUE8JX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA1LCAwKQotI2RlZmluZSBJQ0FSU0FDUlQJX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwgWjkwX0lPQ1RMX01BR0lDLCAweDA2LCAwKQotCi0vKiBERVBSRUNBVEVEIHN0YXR1cyBjYWxscyAoYm91bmQgZm9yIHJlbW92YWwgYXQgc29tZSBwb2ludCkgKi8KLSNkZWZpbmUgSUNBWjkwU1RBVFVTCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDEwLCBzdHJ1Y3QgaWNhX3o5MF9zdGF0dXMpCi0jZGVmaW5lIFo5MFNUQVRfUENJWENDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDMsIGludCkKLQotLyogdW5yZWxhdGVkIHRvIElDQSBjYWxsZXJzICovCi0jZGVmaW5lIFo5MFFVSUVTQ0UJX0lPKFo5MF9JT0NUTF9NQUdJQywgMHgxMSkKLQotLyogTmV3IHN0YXR1cyBjYWxscyAqLwotI2RlZmluZSBaOTBTVEFUX1RPVEFMQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDAsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QQ0lDQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQxLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUENJQ0NDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0MiwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDJDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YiwgaW50KQotI2RlZmluZSBaOTBTVEFUX1BDSVhDQ01DTDNDT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YywgaW50KQotI2RlZmluZSBaOTBTVEFUX0NFWDJDQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NGQsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9DRVgyQUNPVU5UCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDRlLCBpbnQpCi0jZGVmaW5lIFo5MFNUQVRfUkVRVUVTVFFfQ09VTlQJX0lPUihaOTBfSU9DVExfTUFHSUMsIDB4NDQsIGludCkKLSNkZWZpbmUgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NSwgaW50KQotI2RlZmluZSBaOTBTVEFUX1RPVEFMT1BFTl9DT1VOVCBfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NiwgaW50KQotI2RlZmluZSBaOTBTVEFUX0RPTUFJTl9JTkRFWAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0NywgaW50KQotI2RlZmluZSBaOTBTVEFUX1NUQVRVU19NQVNLCV9JT1IoWjkwX0lPQ1RMX01BR0lDLCAweDQ4LCBjaGFyWzY0XSkKLSNkZWZpbmUgWjkwU1RBVF9RREVQVEhfTUFTSwlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0OSwgY2hhcls2NF0pCi0jZGVmaW5lIFo5MFNUQVRfUEVSREVWX1JFUUNOVAlfSU9SKFo5MF9JT0NUTF9NQUdJQywgMHg0YSwgaW50WzY0XSkKLQotI2VuZGlmIC8qIF9fQVNNX1MzOTBfWjkwQ1JZUFRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC96Y3J5cHQuaCBiL2luY2x1ZGUvYXNtLXMzOTAvemNyeXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI0NGM2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvemNyeXB0LmgKQEAgLTAsMCArMSwyODUgQEAKKy8qCisgKiAgaW5jbHVkZS9hc20tczM5MC96Y3J5cHQuaAorICoKKyAqICB6Y3J5cHQgMi4xLjAgKHVzZXItdmlzaWJsZSBoZWFkZXIpCisgKgorICogIENvcHlyaWdodCAoQykgIDIwMDEsIDIwMDYgSUJNIENvcnBvcmF0aW9uCisgKiAgQXV0aG9yKHMpOiBSb2JlcnQgQnVycm91Z2hzCisgKgkgICAgICAgRXJpYyBSb3NzbWFuIChlZHJvc3NtYUB1cy5pYm0uY29tKQorICoKKyAqICBIb3RwbHVnICYgbWlzYyBkZXZpY2Ugc3VwcG9ydDogSm9jaGVuIFJvZWhyaWcgKHJvZWhyaWdAZGUuaWJtLmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19BU01fUzM5MF9aQ1JZUFRfSAorI2RlZmluZSBfX0FTTV9TMzkwX1pDUllQVF9ICisKKyNkZWZpbmUgWkNSWVBUX1ZFUlNJT04gMgorI2RlZmluZSBaQ1JZUFRfUkVMRUFTRSAxCisjZGVmaW5lIFpDUllQVF9WQVJJQU5UIDAKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworLyoqCisgKiBzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvCisgKgorICogUmVxdWlyZW1lbnRzOgorICogLSBvdXRwdXRkYXRhbGVuZ3RoIGlzIGF0IGxlYXN0IGFzIGxhcmdlIGFzIGlucHV0ZGF0YWxlbmd0aC4KKyAqIC0gQWxsIGtleSBwYXJ0cyBhcmUgcmlnaHQganVzdGlmaWVkIGluIHRoZWlyIGZpZWxkcywgcGFkZGVkIG9uCisgKiAgIHRoZSBsZWZ0IHdpdGggemVyb2VzLgorICogLSBsZW5ndGgoYl9rZXkpID0gaW5wdXRkYXRhbGVuZ3RoCisgKiAtIGxlbmd0aChuX21vZHVsdXMpID0gaW5wdXRkYXRhbGVuZ3RoCisgKi8KK3N0cnVjdCBpY2FfcnNhX21vZGV4cG8geworCWNoYXIgX191c2VyICoJaW5wdXRkYXRhOworCXVuc2lnbmVkIGludAlpbnB1dGRhdGFsZW5ndGg7CisJY2hhciBfX3VzZXIgKglvdXRwdXRkYXRhOworCXVuc2lnbmVkIGludAlvdXRwdXRkYXRhbGVuZ3RoOworCWNoYXIgX191c2VyICoJYl9rZXk7CisJY2hhciBfX3VzZXIgKgluX21vZHVsdXM7Cit9OworCisvKioKKyAqIHN0cnVjdCBpY2FfcnNhX21vZGV4cG9fY3J0CisgKgorICogUmVxdWlyZW1lbnRzOgorICogLSBpbnB1dGRhdGFsZW5ndGggaXMgZXZlbi4KKyAqIC0gb3V0cHV0ZGF0YWxlbmd0aCBpcyBhdCBsZWFzdCBhcyBsYXJnZSBhcyBpbnB1dGRhdGFsZW5ndGguCisgKiAtIEFsbCBrZXkgcGFydHMgYXJlIHJpZ2h0IGp1c3RpZmllZCBpbiB0aGVpciBmaWVsZHMsIHBhZGRlZCBvbgorICogICB0aGUgbGVmdCB3aXRoIHplcm9lcy4KKyAqIC0gbGVuZ3RoKGJwX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMiArIDgKKyAqIC0gbGVuZ3RoKGJxX2tleSkJPSBpbnB1dGRhdGFsZW5ndGgvMgorICogLSBsZW5ndGgobnBfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAorICogLSBsZW5ndGgobnFfa2V5KQk9IGlucHV0ZGF0YWxlbmd0aC8yCisgKiAtIGxlbmd0aCh1X211bHRfaW52KSA9IGlucHV0ZGF0YWxlbmd0aC8yICsgOAorICovCitzdHJ1Y3QgaWNhX3JzYV9tb2RleHBvX2NydCB7CisJY2hhciBfX3VzZXIgKglpbnB1dGRhdGE7CisJdW5zaWduZWQgaW50CWlucHV0ZGF0YWxlbmd0aDsKKwljaGFyIF9fdXNlciAqCW91dHB1dGRhdGE7CisJdW5zaWduZWQgaW50CW91dHB1dGRhdGFsZW5ndGg7CisJY2hhciBfX3VzZXIgKglicF9rZXk7CisJY2hhciBfX3VzZXIgKglicV9rZXk7CisJY2hhciBfX3VzZXIgKglucF9wcmltZTsKKwljaGFyIF9fdXNlciAqCW5xX3ByaW1lOworCWNoYXIgX191c2VyICoJdV9tdWx0X2ludjsKK307CisKKy8qKgorICogQ1BSQlgKKyAqCSAgTm90ZSB0aGF0IGFsbCBzaG9ydHMgYW5kIGludHMgYXJlIGJpZy1lbmRpYW4uCisgKgkgIEFsbCBwb2ludGVyIGZpZWxkcyBhcmUgMTYgYnl0ZXMgbG9uZywgYW5kIG1lYW4gbm90aGluZy4KKyAqCisgKgkgIEEgcmVxdWVzdCBDUFJCIGlzIGZvbGxvd2VkIGJ5IGEgcmVxdWVzdF9wYXJhbWV0ZXJfYmxvY2suCisgKgorICoJICBUaGUgcmVxdWVzdCAob3IgcmVwbHkpIHBhcmFtZXRlciBibG9jayBpcyBvcmdhbml6ZWQgdGh1czoKKyAqCSAgICBmdW5jdGlvbiBjb2RlCisgKgkgICAgVlVEIGJsb2NrCisgKgkgICAga2V5IGJsb2NrCisgKi8KK3N0cnVjdCBpY2FfQ1BSQlggeworCXVuc2lnbmVkIHNob3J0CWNwcmJfbGVuOwkvKiBDUFJCIGxlbmd0aAkgICAgICAyMjAJICovCisJdW5zaWduZWQgY2hhcgljcHJiX3Zlcl9pZDsJLyogQ1BSQiB2ZXJzaW9uIGlkLiAgIDB4MDIJICovCisJdW5zaWduZWQgY2hhcglwYWRfMDAwWzNdOwkvKiBBbGlnbm1lbnQgcGFkIGJ5dGVzCQkgKi8KKwl1bnNpZ25lZCBjaGFyCWZ1bmNfaWRbMl07CS8qIGZ1bmN0aW9uIGlkCSAgICAgIDB4NTQzMgkgKi8KKwl1bnNpZ25lZCBjaGFyCWNwcmJfZmxhZ3NbNF07CS8qIEZsYWdzCQkJICovCisJdW5zaWduZWQgaW50CXJlcV9wYXJtbDsJLyogcmVxdWVzdCBwYXJhbWV0ZXIgYnVmZmVyIGxlbgkgKi8KKwl1bnNpZ25lZCBpbnQJcmVxX2RhdGFsOwkvKiByZXF1ZXN0IGRhdGEgYnVmZmVyCQkgKi8KKwl1bnNpZ25lZCBpbnQJcnBsX21zZ2JsOwkvKiByZXBseSAgbWVzc2FnZSBibG9jayBsZW5ndGgJICovCisJdW5zaWduZWQgaW50CXJwbGRfcGFybWw7CS8qIHJlcGxpZWQgcGFyYW1ldGVyIGJsb2NrIGxlbgkgKi8KKwl1bnNpZ25lZCBpbnQJcnBsX2RhdGFsOwkvKiByZXBseSBkYXRhIGJsb2NrIGxlbgkJICovCisJdW5zaWduZWQgaW50CXJwbGRfZGF0YWw7CS8qIHJlcGxpZWQgZGF0YSBibG9jayBsZW4JICovCisJdW5zaWduZWQgaW50CXJlcV9leHRibDsJLyogcmVxdWVzdCBleHRlbnNpb24gYmxvY2sgbGVuCSAqLworCXVuc2lnbmVkIGNoYXIJcGFkXzAwMVs0XTsJLyogcmVzZXJ2ZWQJCQkgKi8KKwl1bnNpZ25lZCBpbnQJcnBsZF9leHRibDsJLyogcmVwbGllZCBleHRlbnNpb24gYmxvY2sgbGVuCSAqLworCXVuc2lnbmVkIGNoYXIJcGFkeDAwMFsxNiAtIHNpemVvZiAoY2hhciAqKV07CisJdW5zaWduZWQgY2hhciAqCXJlcV9wYXJtYjsJLyogcmVxdWVzdCBwYXJtIGJsb2NrICdhZGRyZXNzJwkgKi8KKwl1bnNpZ25lZCBjaGFyCXBhZHgwMDFbMTYgLSBzaXplb2YgKGNoYXIgKildOworCXVuc2lnbmVkIGNoYXIgKglyZXFfZGF0YWI7CS8qIHJlcXVlc3QgZGF0YSBibG9jayAnYWRkcmVzcycJICovCisJdW5zaWduZWQgY2hhcglwYWR4MDAyWzE2IC0gc2l6ZW9mIChjaGFyICopXTsKKwl1bnNpZ25lZCBjaGFyICoJcnBsX3Bhcm1iOwkvKiByZXBseSBwYXJtIGJsb2NrICdhZGRyZXNzJwkgKi8KKwl1bnNpZ25lZCBjaGFyCXBhZHgwMDNbMTYgLSBzaXplb2YgKGNoYXIgKildOworCXVuc2lnbmVkIGNoYXIgKglycGxfZGF0YWI7CS8qIHJlcGx5IGRhdGEgYmxvY2sgJ2FkZHJlc3MnCSAqLworCXVuc2lnbmVkIGNoYXIJcGFkeDAwNFsxNiAtIHNpemVvZiAoY2hhciAqKV07CisJdW5zaWduZWQgY2hhciAqCXJlcV9leHRiOwkvKiByZXF1ZXN0IGV4dGVuc2lvbiBibG9jayAnYWRkcicqLworCXVuc2lnbmVkIGNoYXIJcGFkeDAwNVsxNiAtIHNpemVvZiAoY2hhciAqKV07CisJdW5zaWduZWQgY2hhciAqCXJwbF9leHRiOwkvKiByZXBseSBleHRlbnNpb24gYmxvY2sgJ2FkZHJlcycqLworCXVuc2lnbmVkIHNob3J0CWNjcF9ydGNvZGU7CS8qIHNlcnZlciByZXR1cm4gY29kZQkJICovCisJdW5zaWduZWQgc2hvcnQJY2NwX3JzY29kZTsJLyogc2VydmVyIHJlYXNvbiBjb2RlCQkgKi8KKwl1bnNpZ25lZCBpbnQJbWFjX2RhdGFfbGVuOwkvKiBNYWMgRGF0YSBMZW5ndGgJCSAqLworCXVuc2lnbmVkIGNoYXIJbG9nb25faWRbOF07CS8qIExvZ29uIElkZW50aWZpZXIJCSAqLworCXVuc2lnbmVkIGNoYXIJbWFjX3ZhbHVlWzhdOwkvKiBNYWMgVmFsdWUJCQkgKi8KKwl1bnNpZ25lZCBjaGFyCW1hY19jb250ZW50X2ZsZ3M7LyogTWFjIGNvbnRlbnQgZmxhZyBieXRlCSAqLworCXVuc2lnbmVkIGNoYXIJcGFkXzAwMjsJLyogQWxpZ25tZW50CQkJICovCisJdW5zaWduZWQgc2hvcnQJZG9tYWluOwkJLyogRG9tYWluCQkJICovCisJdW5zaWduZWQgY2hhcgl1c2FnZV9kb21haW5bNF07LyogVXNhZ2UgZG9tYWluCQkJICovCisJdW5zaWduZWQgY2hhcgljbnRybF9kb21haW5bNF07LyogQ29udHJvbCBkb21haW4JCSAqLworCXVuc2lnbmVkIGNoYXIJUzM5MGVuZl9tYXNrWzRdOy8qIFMvMzkwIGVuZm9yY2VtZW50IG1hc2sJICovCisJdW5zaWduZWQgY2hhcglwYWRfMDA0WzM2XTsJLyogcmVzZXJ2ZWQJCQkgKi8KK307CisKKy8qKgorICogeGNSQgorICovCitzdHJ1Y3QgaWNhX3hjUkIgeworCXVuc2lnbmVkIHNob3J0CWFnZW50X0lEOworCXVuc2lnbmVkIGludAl1c2VyX2RlZmluZWQ7CisJdW5zaWduZWQgc2hvcnQJcmVxdWVzdF9JRDsKKwl1bnNpZ25lZCBpbnQJcmVxdWVzdF9jb250cm9sX2Jsa19sZW5ndGg7CisJdW5zaWduZWQgY2hhcglwYWRkaW5nMVsxNiAtIHNpemVvZiAoY2hhciAqKV07CisJY2hhciBfX3VzZXIgKglyZXF1ZXN0X2NvbnRyb2xfYmxrX2FkZHI7CisJdW5zaWduZWQgaW50CXJlcXVlc3RfZGF0YV9sZW5ndGg7CisJY2hhcgkJcGFkZGluZzJbMTYgLSBzaXplb2YgKGNoYXIgKildOworCWNoYXIgX191c2VyICoJcmVxdWVzdF9kYXRhX2FkZHJlc3M7CisJdW5zaWduZWQgaW50CXJlcGx5X2NvbnRyb2xfYmxrX2xlbmd0aDsKKwljaGFyCQlwYWRkaW5nM1sxNiAtIHNpemVvZiAoY2hhciAqKV07CisJY2hhciBfX3VzZXIgKglyZXBseV9jb250cm9sX2Jsa19hZGRyOworCXVuc2lnbmVkIGludAlyZXBseV9kYXRhX2xlbmd0aDsKKwljaGFyCQlwYWRkaW5nNFsxNiAtIHNpemVvZiAoY2hhciAqKV07CisJY2hhciBfX3VzZXIgKglyZXBseV9kYXRhX2FkZHI7CisJdW5zaWduZWQgc2hvcnQJcHJpb3JpdHlfd2luZG93OworCXVuc2lnbmVkIGludAlzdGF0dXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2RlZmluZSBBVVRPU0VMRUNUICgodW5zaWduZWQgaW50KTB4RkZGRkZGRkYpCisKKyNkZWZpbmUgWkNSWVBUX0lPQ1RMX01BR0lDICd6JworCisvKioKKyAqIEludGVyZmFjZSBub3RlczoKKyAqCisgKiBUaGUgaW9jdGwoKXMgd2hpY2ggYXJlIGltcGxlbWVudGVkIChhbG9uZyB3aXRoIHJlbGV2YW50IGRldGFpbHMpCisgKiBhcmU6CisgKgorICogICBJQ0FSU0FNT0RFWFBPCisgKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgTW9kdWx1cy1FeHBvbmVudCBwYWlyCisgKiAgICAgVGhpcyB0YWtlcyBhbiBpY2FfcnNhX21vZGV4cG8gc3RydWN0IGFzIGl0cyBhcmcuCisgKgorICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCisgKgkgICAgIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZQorICoJICAgICBibG9jaworICoKKyAqICAgSUNBUlNBQ1JUCisgKiAgICAgUGVyZm9ybSBhbiBSU0Egb3BlcmF0aW9uIHVzaW5nIGEgQ2hpbmVzZS1SZW1haW5kZXIgVGhlb3JlbSBrZXkKKyAqICAgICBUaGlzIHRha2VzIGFuIGljYV9yc2FfbW9kZXhwb19jcnQgc3RydWN0IGFzIGl0cyBhcmcuCisgKgorICogICAgIE5PVEU6IHBsZWFzZSByZWZlciB0byB0aGUgY29tbWVudHMgcHJlY2VkaW5nIHRoaXMgc3RydWN0dXJlCisgKgkgICAgIGZvciB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgdGhlIGNvbnRlbnRzIG9mIHRoZQorICoJICAgICBibG9jaworICoKKyAqICAgWjkwU1RBVF9UT1RBTENPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIGRldmljZSB0eXBlcyB0b2dldGhlci4KKyAqCisgKiAgIFo5MFNUQVRfUENJQ0FDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBQQ0lDQXMuCisgKgorICogICBaOTBTVEFUX1BDSUNDQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJQ0NzLgorICoKKyAqICAgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgTUNMMiBQQ0lYQ0NzLgorICoKKyAqICAgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgTUNMMyBQQ0lYQ0NzLgorICoKKyAqICAgWjkwU1RBVF9DRVgyQ0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgYWxsIENFWDJDcy4KKyAqCisgKiAgIFo5MFNUQVRfQ0VYMkFDT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIGFsbCBDRVgyQXMuCisgKgorICogICBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UCisgKiAgICAgUmV0dXJuIGFuIGludGVnZXIgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdhaXRpbmcgdG8gYmUKKyAqICAgICBzZW50IHRvIGEgZGV2aWNlLgorICoKKyAqICAgWjkwU1RBVF9QRU5ESU5HUV9DT1VOVAorICogICAgIFJldHVybiBhbiBpbnRlZ2VyIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBzZW50IHRvIGEKKyAqICAgICBkZXZpY2UgYXdhaXRpbmcgdGhlIHJlcGx5LgorICoKKyAqICAgWjkwU1RBVF9UT1RBTE9QRU5fQ09VTlQKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiB0aGUgbnVtYmVyIG9mIG9wZW4gZmlsZSBoYW5kbGVzLgorICoKKyAqICAgWjkwU1RBVF9ET01BSU5fSU5ERVgKKyAqICAgICBSZXR1cm4gdGhlIGludGVnZXIgdmFsdWUgb2YgdGhlIENyeXB0b2dyYXBoaWMgRG9tYWluLgorICoKKyAqICAgWjkwU1RBVF9TVEFUVVNfTUFTSworICogICAgIFJldHVybiBhbiA2NCBlbGVtZW50IGFycmF5IG9mIHVuc2lnbmVkIGNoYXJzIGZvciB0aGUgc3RhdHVzIG9mCisgKiAgICAgYWxsIGRldmljZXMuCisgKgkgMHgwMTogUENJQ0EKKyAqCSAweDAyOiBQQ0lDQworICoJIDB4MDM6IFBDSVhDQ19NQ0wyCisgKgkgMHgwNDogUENJWENDX01DTDMKKyAqCSAweDA1OiBDRVgyQworICoJIDB4MDY6IENFWDJBCisgKgkgMHgwZDogZGV2aWNlIGlzIGRpc2FibGVkIHZpYSB0aGUgcHJvYyBmaWxlc3lzdGVtCisgKgorICogICBaOTBTVEFUX1FERVBUSF9NQVNLCisgKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgY2hhcnMgZm9yIHRoZSBxdWV1ZQorICogICAgIGRlcHRoIG9mIGFsbCBkZXZpY2VzLgorICoKKyAqICAgWjkwU1RBVF9QRVJERVZfUkVRQ05UCisgKiAgICAgUmV0dXJuIGFuIDY0IGVsZW1lbnQgYXJyYXkgb2YgdW5zaWduZWQgaW50ZWdlcnMgZm9yIHRoZSBudW1iZXIKKyAqICAgICBvZiBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHJlcXVlc3RzIHBlciBkZXZpY2Ugc2luY2UgdGhlIGRldmljZQorICogICAgIHdhcyBkZXRlY3RlZCBhbmQgbWFkZSBhdmFpbGFibGUuCisgKgorICogICBJQ0FaOTBTVEFUVVMgKGRlcHJlY2F0ZWQpCisgKiAgICAgUmV0dXJuIHNvbWUgZGV2aWNlIGRyaXZlciBzdGF0dXMgaW4gYSBpY2FfejkwX3N0YXR1cyBzdHJ1Y3QKKyAqICAgICBUaGlzIHRha2VzIGFuIGljYV96OTBfc3RhdHVzIHN0cnVjdCBhcyBpdHMgYXJnLgorICoKKyAqICAgICBOT1RFOiB0aGlzIGlvY3RsKCkgaXMgZGVwcmVjYXRlZCwgYW5kIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGgKKyAqCSAgICAgc2luZ2xlIGlvY3RsKClzIGZvciBlYWNoIHR5cGUgb2Ygc3RhdHVzIGJlaW5nIHJlcXVlc3RlZAorICoKKyAqICAgWjkwU1RBVF9QQ0lYQ0NDT1VOVCAoZGVwcmVjYXRlZCkKKyAqICAgICBSZXR1cm4gYW4gaW50ZWdlciBjb3VudCBvZiBhbGwgUENJWENDcyAoTUNMMiArIE1DTDMpLgorICogICAgIFRoaXMgaXMgREVQUkVDQVRFRCBub3cgdGhhdCBNQ0wzIFBDSVhDQ3MgYXJlIHRyZWF0ZWQgZGlmZmVyZW50bHkgZnJvbQorICogICAgIE1DTDIgUENJWENDcy4KKyAqCisgKiAgIFo5MFFVSUVTQ0UgKG5vdCByZWNvbW1lbmRlZCkKKyAqICAgICBRdWllc2NlIHRoZSBkcml2ZXIuICBUaGlzIGlzIGludGVuZGVkIHRvIHN0b3AgYWxsIG5ldworICogICAgIHJlcXVlc3RzIGZyb20gYmVpbmcgcHJvY2Vzc2VkLiAgSXRzIHVzZSBpcyBOT1QgcmVjb21tZW5kZWQsCisgKiAgICAgZXhjZXB0IGluIGNpcmN1bXN0YW5jZXMgd2hlcmUgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIHN0b3AKKyAqICAgICBjYWxsZXJzIGZyb20gYWNjZXNzaW5nIHRoZSBkcml2ZXIuICBJdHMgb3JpZ2luYWwgdXNlIHdhcyB0bworICogICAgIGFsbG93IHRoZSBkcml2ZXIgdG8gYmUgImRyYWluZWQiIG9mIHdvcmsgaW4gcHJlcGFyYXRpb24gZm9yCisgKiAgICAgYSBzeXN0ZW0gc2h1dGRvd24uCisgKgorICogICAgIE5PVEU6IG9uY2UgaXNzdWVkLCB0aGlzIGJhbiBvbiBuZXcgd29yayBjYW5ub3QgYmUgdW5kb25lCisgKgkgICAgIGV4Y2VwdCBieSB1bmxvYWRpbmcgYW5kIHJlbG9hZGluZyB0aGUgZHJpdmVyLgorICovCisKKy8qKgorICogU3VwcG9ydGVkIGlvY3RsIGNhbGxzCisgKi8KKyNkZWZpbmUgSUNBUlNBTU9ERVhQTwlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBaQ1JZUFRfSU9DVExfTUFHSUMsIDB4MDUsIDApCisjZGVmaW5lIElDQVJTQUNSVAlfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBaQ1JZUFRfSU9DVExfTUFHSUMsIDB4MDYsIDApCisjZGVmaW5lIFpTRUNTRU5EQ1BSQglfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCBaQ1JZUFRfSU9DVExfTUFHSUMsIDB4ODEsIDApCisKKy8qIE5ldyBzdGF0dXMgY2FsbHMgKi8KKyNkZWZpbmUgWjkwU1RBVF9UT1RBTENPVU5UCV9JT1IoWkNSWVBUX0lPQ1RMX01BR0lDLCAweDQwLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUENJQ0FDT1VOVAlfSU9SKFpDUllQVF9JT0NUTF9NQUdJQywgMHg0MSwgaW50KQorI2RlZmluZSBaOTBTVEFUX1BDSUNDQ09VTlQJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NDIsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NNQ0wyQ09VTlQJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NGIsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9QQ0lYQ0NNQ0wzQ09VTlQJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NGMsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9DRVgyQ0NPVU5UCV9JT1IoWkNSWVBUX0lPQ1RMX01BR0lDLCAweDRkLCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfQ0VYMkFDT1VOVAlfSU9SKFpDUllQVF9JT0NUTF9NQUdJQywgMHg0ZSwgaW50KQorI2RlZmluZSBaOTBTVEFUX1JFUVVFU1RRX0NPVU5UCV9JT1IoWkNSWVBUX0lPQ1RMX01BR0lDLCAweDQ0LCBpbnQpCisjZGVmaW5lIFo5MFNUQVRfUEVORElOR1FfQ09VTlQJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NDUsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9UT1RBTE9QRU5fQ09VTlQgX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NDYsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9ET01BSU5fSU5ERVgJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NDcsIGludCkKKyNkZWZpbmUgWjkwU1RBVF9TVEFUVVNfTUFTSwlfSU9SKFpDUllQVF9JT0NUTF9NQUdJQywgMHg0OCwgY2hhcls2NF0pCisjZGVmaW5lIFo5MFNUQVRfUURFUFRIX01BU0sJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NDksIGNoYXJbNjRdKQorI2RlZmluZSBaOTBTVEFUX1BFUkRFVl9SRVFDTlQJX0lPUihaQ1JZUFRfSU9DVExfTUFHSUMsIDB4NGEsIGludFs2NF0pCisKKyNlbmRpZiAvKiBfX0FTTV9TMzkwX1pDUllQVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKaW5kZXggYTU1NTllMy4uNWEwNTdiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BhZ2UuaApAQCAtMTA0LDcgKzEwNCw3IEBACiAKIC8qIFBGTiBzdGFydCBudW1iZXIsIGJlY2F1c2Ugb2YgX19NRU1PUllfU1RBUlQgKi8KICNkZWZpbmUgUEZOX1NUQVJUCQkoX19NRU1PUllfU1RBUlQgPj4gUEFHRV9TSElGVCkKLSNkZWZpbmUgQVJDSF9QRk5fT0ZGU0VUCQkoRlBOX1NUQVJUKQorI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQJCShQRk5fU1RBUlQpCiAjZGVmaW5lIHZpcnRfdG9fcGFnZShrYWRkcikJcGZuX3RvX3BhZ2UoX19wYShrYWRkcikgPj4gUEFHRV9TSElGVCkKICNkZWZpbmUgcGZuX3ZhbGlkKHBmbikJCSgoKHBmbikgLSBQRk5fU1RBUlQpIDwgbWF4X21hcG5yKQogI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpCXBmbl92YWxpZChfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9idWcuaCBiL2luY2x1ZGUvYXNtLXNoNjQvYnVnLmgKaW5kZXggODFmNzIyZS4uZjNhOWM5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9idWcuaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2J1Zy5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBfX0FTTV9TSDY0X0JVR19ICiAjZGVmaW5lIF9fQVNNX1NINjRfQlVHX0gKIAotCisjaWZkZWYgQ09ORklHX0JVRwogLyoKICAqIFRlbGwgdGhlIHVzZXIgdGhlcmUgaXMgc29tZSBwcm9ibGVtLCB0aGVuIGZvcmNlIGEgc2VnZmF1bHQgKGluIHByb2Nlc3MKICAqIGNvbnRleHQpIG9yIGEgcGFuaWMgKGludGVycnVwdCBjb250ZXh0KS4KQEAgLTExLDE3ICsxMSw5IEBACiAJKih2b2xhdGlsZSBpbnQgKikwID0gMDsgXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IFwKLQlpZiAodW5saWtlbHkoKGNvbmRpdGlvbikhPTApKSBcCi0JCUJVRygpOyBcCi19IHdoaWxlKDApCisjZGVmaW5lIEhBVkVfQVJDSF9CVUcKKyNlbmRpZgogCi0jZGVmaW5lIFdBUk5fT04oY29uZGl0aW9uKSBkbyB7IFwKLQlpZiAodW5saWtlbHkoKGNvbmRpdGlvbikhPTApKSB7IFwKLQkJcHJpbnRrKCJCYWRuZXNzIGluICVzIGF0ICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7IFwKLQkJZHVtcF9zdGFjaygpOyBcCi0JfSBcCi19IHdoaWxlICgwKQorI2luY2x1ZGUgPGFzbS1nZW5lcmljL2J1Zy5oPgogCiAjZW5kaWYgLyogX19BU01fU0g2NF9CVUdfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tc2g2NC9ieXRlb3JkZXIuaAppbmRleCBmNjAyZWJlLi43NDE5ZDc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvYnl0ZW9yZGVyLmgKQEAgLTE0LDcgKzE0LDcgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi1zdGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCitzdGF0aWMgaW5saW5lIF9fYXR0cmlidXRlX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCiB7CiAJX19hc21fXygiYnl0ZXJldgklMCwgJTBcblx0IgogCQkic2hhcmkJCSUwLCAzMiwgJTAiCkBAIC0yMyw3ICsyMyw3IEBACiAJcmV0dXJuIHg7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYoX191MTYgeCkKK3N0YXRpYyBpbmxpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2FiMTYoX191MTYgeCkKIHsKIAlfX2FzbV9fKCJieXRlcmV2CSUwLCAlMFxuXHQiCiAJCSJzaGFyaQkJJTAsIDQ4LCAlMCIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNoNjQvZG1hLW1hcHBpbmcuaAppbmRleCBhNzRhNDllLi42OGUyN2E4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9kbWEtbWFwcGluZy5oCkBAIC0xMjYsMjIgKzEyNiwzMCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKIAkJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2luZ2xlIikpKTsKK3sKKwlkbWFfc3luY19zaW5nbGUoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpOworfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAogCQkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi0JX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zaW5nbGUiKSkpOworeworCWRtYV9zeW5jX3NpbmdsZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcik7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKIAkJCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2ciKSkpOworeworCWRtYV9zeW5jX3NnKGRldiwgc2csIG5lbGVtcywgZGlyKTsKK30KIAogc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAogCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAogCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi0JX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zZyIpKSk7Cit7CisJZG1hX3N5bmNfc2coZGV2LCBzZywgbmVsZW1zLCBkaXIpOworfQogCiBzdGF0aWMgaW5saW5lIGludCBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC9pby5oIGIvaW5jbHVkZS9hc20tc2g2NC9pby5oCmluZGV4IGRlZTRmNzcuLjI1MmZlZGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L2lvLmgKQEAgLTEyMyw2ICsxMjMsMTMgQEAKIHZvaWQgb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKIHZvaWQgaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwogCisjZGVmaW5lIF9fcmF3X3JlYWRiCQlyZWFkYgorI2RlZmluZSBfX3Jhd19yZWFkdwkJcmVhZHcKKyNkZWZpbmUgX19yYXdfcmVhZGwJCXJlYWRsCisjZGVmaW5lIF9fcmF3X3dyaXRlYgkJd3JpdGViCisjZGVmaW5lIF9fcmF3X3dyaXRldwkJd3JpdGV3CisjZGVmaW5lIF9fcmF3X3dyaXRlbAkJd3JpdGVsCisKIHZvaWQgbWVtY3B5X3RvaW8odm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgbG9uZyBjb3VudCk7CiB2b2lkIG1lbWNweV9mcm9taW8odm9pZCAqdG8sIHZvaWQgX19pb21lbSAqZnJvbSwgbG9uZyBjb3VudCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1zaDY0L3B0cmFjZS5oCmluZGV4IDU2MTkwZjUuLmE2ZDRkYTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC9wdHJhY2UuaApAQCAtMjgsNyArMjgsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5zciAmIDB4NDAwMDAwMDApPT0wKQogI2RlZmluZSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpICgocmVncyktPnBjKQotI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKKyNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSAoKHVuc2lnbmVkIGxvbmcpaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSkKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc2g2NC9zeXN0ZW0uaAppbmRleCA4N2VmNmYxLi5iMTU5OGMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaDY0L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQvc3lzdGVtLmgKQEAgLTY0LDcgKzY0LDcgQEAKICNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAotI2RlZmluZSBzZXRfcm1iKHZhciwgdmFsdWUpIGRvIHsgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNldF9ybWIodmFyLCB2YWx1ZSkgZG8geyAodm9pZCl4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIHNldF9ybWIodmFyLCB2YWx1ZSkKIAogLyogSW50ZXJydXB0IENvbnRyb2wgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tc2g2NC91YWNjZXNzLmgKaW5kZXggZjQ5MzZkOC4uNjQ0YzY3YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91YWNjZXNzLmgKQEAgLTEyOCwyNSArMTI4LDIwIEBACiAKICNkZWZpbmUgX19nZXRfdXNlcl9ub2NoZWNrKHgscHRyLHNpemUpCQkJCVwKICh7CQkJCQkJCQlcCi0JbG9uZyBfX2d1X2FkZHIgPSAobG9uZykocHRyKTsJCQkJXAotCWxvbmcgX19ndV9lcnI7CQkJCQkJXAotCV9fdHlwZW9mKCoocHRyKSkgX19ndV92YWw7CQkJCVwKLQlfX2FzbV9fICgiIjoiPXIiIChfX2d1X3ZhbCkpOwkJCQlcCi0JX19hc21fXyAoIiI6Ij1yIiAoX19ndV9lcnIpKTsJCQkJXAotCV9fZ2V0X3VzZXJfc2l6ZSgodm9pZCAqKSZfX2d1X3ZhbCwgX19ndV9hZGRyLCAoc2l6ZSksIF9fZ3VfZXJyKTsgXAotCSh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpIF9fZ3VfdmFsOwkJCVwKKwlsb25nIF9fZ3VfZXJyLCBfX2d1X3ZhbDsJCQkJXAorCV9fZ2V0X3VzZXJfc2l6ZSgodm9pZCAqKSZfX2d1X3ZhbCwgKGxvbmcpKHB0ciksCQlcCisJCQkoc2l6ZSksIF9fZ3VfZXJyKTsJCQlcCisJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSlfX2d1X3ZhbDsJCQlcCiAJX19ndV9lcnI7CQkJCQkJXAogfSkKIAogI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCVwKICh7CQkJCQkJCQlcCiAJbG9uZyBfX2d1X2FkZHIgPSAobG9uZykocHRyKTsJCQkJXAotCWxvbmcgX19ndV9lcnIgPSAtRUZBVUxUOwkJCQlcCi0JX190eXBlb2YoKihwdHIpKSBfX2d1X3ZhbDsJCQkJXAotCV9fYXNtX18gKCIiOiI9ciIgKF9fZ3VfdmFsKSk7CQkJCVwKLQlfX2FzbV9fICgiIjoiPXIiIChfX2d1X2VycikpOwkJCQlcCisJbG9uZyBfX2d1X2VyciA9IC1FRkFVTFQsIF9fZ3VfdmFsOwkJCVwKIAlpZiAoX19hY2Nlc3Nfb2soX19ndV9hZGRyLCAoc2l6ZSkpKQkJCVwKLQkJX19nZXRfdXNlcl9zaXplKCh2b2lkICopJl9fZ3VfdmFsLCBfX2d1X2FkZHIsIChzaXplKSwgX19ndV9lcnIpOyBcCisJCV9fZ2V0X3VzZXJfc2l6ZSgodm9pZCAqKSZfX2d1X3ZhbCwgX19ndV9hZGRyLAlcCisJCQkJKHNpemUpLCBfX2d1X2Vycik7CQlcCiAJKHgpID0gKF9fdHlwZW9mX18oKihwdHIpKSkgX19ndV92YWw7CQkJXAogCV9fZ3VfZXJyOwkJCQkJCVwKIH0pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYy9LYnVpbGQgYi9pbmNsdWRlL2FzbS1zcGFyYy9LYnVpbGQKaW5kZXggZTJhNTdmZC4uYjIyYjY3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvS2J1aWxkCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjL0tidWlsZApAQCAtMSw2ICsxLDIyIEBACiBpbmNsdWRlIGluY2x1ZGUvYXNtLWdlbmVyaWMvS2J1aWxkLmFzbQogCi11bmlmZGVmLXkgKz0gZmJpby5oIHBlcmZjdHIuaCBwc3IuaAotaGVhZGVyLXkgKz0gYXBjLmggYXNpLmggYXV4aW8uaCBicHAuaCBoZWFkLmggaXBjLmgganNmbGFzaC5oCVwKLQlvcGVucHJvbWlvLmggcGJtLmggcGNvbmYuaCBwZ3RzdW40LmggcmVnLmggdHJhcHMuaAlcCi0JdHVyYm9zcGFyYy5oIHZmY19pb2N0bHMuaCB3aW5tYWNyby5oCitoZWFkZXIteSArPSBhcGMuaAoraGVhZGVyLXkgKz0gYXNpLmgKK2hlYWRlci15ICs9IGF1eGlvLmgKK2hlYWRlci15ICs9IGJwcC5oCitoZWFkZXIteSArPSBoZWFkLmgKK2hlYWRlci15ICs9IGlwYy5oCitoZWFkZXIteSArPSBqc2ZsYXNoLmgKK2hlYWRlci15ICs9IG9wZW5wcm9taW8uaAoraGVhZGVyLXkgKz0gcGJtLmgKK2hlYWRlci15ICs9IHBjb25mLmgKK2hlYWRlci15ICs9IHBndHN1bjQuaAoraGVhZGVyLXkgKz0gcmVnLmgKK2hlYWRlci15ICs9IHRyYXBzLmgKK2hlYWRlci15ICs9IHR1cmJvc3BhcmMuaAoraGVhZGVyLXkgKz0gdmZjX2lvY3Rscy5oCitoZWFkZXIteSArPSB3aW5tYWNyby5oCisKK3VuaWZkZWYteSArPSBmYmlvLmgKK3VuaWZkZWYteSArPSBwZXJmY3RyLmgKK3VuaWZkZWYteSArPSBwc3IuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvbW1hbi5oIGIvaW5jbHVkZS9hc20tc3BhcmMvbW1hbi5oCmluZGV4IDg4ZDE4ODYuLmI3ZGM0MGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjL21tYW4uaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9tbWFuLmgKQEAgLTM1LDQgKzM1LDEyIEBACiAKICNkZWZpbmUgTUFEVl9GUkVFCTB4NQkJLyogKFNvbGFyaXMpIGNvbnRlbnRzIGNhbiBiZSBmcmVlZCAqLwogCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgYXJjaF9tbWFwX2NoZWNrCXNwYXJjX21tYXBfY2hlY2sKK2ludCBzcGFyY19tbWFwX2NoZWNrKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCisJCXVuc2lnbmVkIGxvbmcgZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fU1BBUkNfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvS2J1aWxkIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKaW5kZXggOTI4NGMzYy4uNGI1OWNlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9LYnVpbGQKQEAgLTQsNyArNCwyNiBAQAogQVJDSERFRiA6PSBkZWZpbmVkIF9fc3BhcmNfXyAmJiBkZWZpbmVkIF9fYXJjaDY0X18KIEFMVEFSQ0hERUYgOj0gZGVmaW5lZCBfX3NwYXJjX18gJiYgIWRlZmluZWQgX19hcmNoNjRfXwogCi11bmlmZGVmLXkgKz0gZmJpby5oIHBlcmZjdHIuaAotaGVhZGVyLXkgKz0gYXBiLmggYXNpLmggYmJjLmggYnBwLmggZGlzcGxheTdzZWcuaCBlbnZjdHJsLmggZmxvcHB5LmgJXAotCWlwYy5oIGtkZWJ1Zy5oIG1vc3Rlay5oIG9wZW5wcm9tLmggb3BlbnByb21pby5oIHBhcnBvcnQuaAlcCi0JcGNvbmYuaCBwc3Jjb21wYXQuaCBwc3RhdGUuaCByZWcuaCB1Y3R4LmggdXRyYXAuaCB3YXRjaGRvZy5oCitoZWFkZXIteSArPSBhcGIuaAoraGVhZGVyLXkgKz0gYXNpLmgKK2hlYWRlci15ICs9IGJiYy5oCitoZWFkZXIteSArPSBicHAuaAoraGVhZGVyLXkgKz0gZGlzcGxheTdzZWcuaAoraGVhZGVyLXkgKz0gZW52Y3RybC5oCitoZWFkZXIteSArPSBmbG9wcHkuaAoraGVhZGVyLXkgKz0gaXBjLmgKK2hlYWRlci15ICs9IGtkZWJ1Zy5oCitoZWFkZXIteSArPSBtb3N0ZWsuaAoraGVhZGVyLXkgKz0gb3BlbnByb20uaAoraGVhZGVyLXkgKz0gb3BlbnByb21pby5oCitoZWFkZXIteSArPSBwYXJwb3J0LmgKK2hlYWRlci15ICs9IHBjb25mLmgKK2hlYWRlci15ICs9IHBzcmNvbXBhdC5oCitoZWFkZXIteSArPSBwc3RhdGUuaAoraGVhZGVyLXkgKz0gcmVnLmgKK2hlYWRlci15ICs9IHVjdHguaAoraGVhZGVyLXkgKz0gdXRyYXAuaAoraGVhZGVyLXkgKz0gd2F0Y2hkb2cuaAorCit1bmlmZGVmLXkgKz0gZmJpby5oCit1bmlmZGVmLXkgKz0gcGVyZmN0ci5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCmluZGV4IDE1MDY1YWYuLmM5ZjVjMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQva3Byb2Jlcy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjZGVmaW5lIEpQUk9CRV9FTlRSWShwZW50cnkpCShrcHJvYmVfb3Bjb2RlX3QgKilwZW50cnkKICNkZWZpbmUgYXJjaF9yZW1vdmVfa3Byb2JlKHApCWRvIHt9IHdoaWxlICgwKQogI2RlZmluZSAgQVJDSF9JTkFDVElWRV9LUFJPQkVfQ09VTlQgMAorI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJZG8geyB9IHdoaWxlICgwKQogCiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCiBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvbW1hbi5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKaW5kZXggNmZkODc4ZS4uOGNjMTg2MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9tbWFuLmgKQEAgLTM1LDQgKzM1LDEyIEBACiAKICNkZWZpbmUgTUFEVl9GUkVFCTB4NQkJLyogKFNvbGFyaXMpIGNvbnRlbnRzIGNhbiBiZSBmcmVlZCAqLwogCisjaWZkZWYgX19LRVJORUxfXworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgYXJjaF9tbWFwX2NoZWNrCXNwYXJjNjRfbW1hcF9jaGVjaworaW50IHNwYXJjNjRfbW1hcF9jaGVjayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKTsKKyNlbmRpZgorI2VuZGlmCisKICNlbmRpZiAvKiBfX1NQQVJDNjRfTU1BTl9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKaW5kZXggMDNmNWJjOS4uZWJmZTM5NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc3BhcmM2NC9wZ3RhYmxlLmgKQEAgLTIzNCw3ICsyMzQsNyBAQAogCXN6X2JpdHMgPSAwVUw7CiAJaWYgKF9QQUdFX1NaQklUU180VSAhPSAwVUwgfHwgX1BBR0VfU1pCSVRTXzRWICE9IDBVTCkgewogCQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIlxuNjYxOglzZXRoaQkJJXVoaSglMSksICUwXG4iCisJCSJcbjY2MToJc2V0aGkJCSUldWhpKCUxKSwgJTBcbiIKIAkJIglzbGx4CQklMCwgMzIsICUwXG4iCiAJCSIJLnNlY3Rpb24JLnN1bjR2XzJpbnNuX3BhdGNoLCBcImF4XCJcbiIKIAkJIgkud29yZAkJNjYxYlxuIgpAQCAtMzM5LDcgKzMzOSw3IEBACiAJIgkuc2VjdGlvbgkuc3VuNHZfMmluc25fcGF0Y2gsIFwiYXhcIlxuIgogCSIJLndvcmQJCTY2MWJcbiIKIAkiCWFuZG4JCSUwLCAlNCwgJTBcbiIKLQkiCW9yCQklMCwgJTMsICUwXG4iCisJIglvcgkJJTAsICU1LCAlMFxuIgogCSIJLnByZXZpb3VzXG4iCiAJOiAiPXIiICh2YWwpCiAJOiAiMCIgKHZhbCksICJpIiAoX1BBR0VfQ1BfNFUgfCBfUEFHRV9DVl80VSksICJpIiAoX1BBR0VfRV80VSksCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmcC1tYWNoaW5lLmgKaW5kZXggNTAxNWJiOGQuLjg5ZDQyNDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNwYXJjNjQvc2ZwLW1hY2hpbmUuaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NmcC1tYWNoaW5lLmgKQEAgLTM0LDcgKzM0LDcgQEAKICNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpCQkJCQlcCiAgIF9GUF9NVUxfTUVBVF8xX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKICNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCQkJCQlcCi0gIF9GUF9NVUxfTUVBVF8yX3dpZGVfM211bChfRlBfV0ZSQUNCSVRTX1EsUixYLFksdW11bF9wcG1tKQorICBfRlBfTVVMX01FQVRfMl93aWRlKF9GUF9XRlJBQ0JJVFNfUSxSLFgsWSx1bXVsX3BwbW0pCiAKICNkZWZpbmUgX0ZQX0RJVl9NRUFUX1MoUixYLFkpCV9GUF9ESVZfTUVBVF8xX2ltbShTLFIsWCxZLF9GUF9ESVZfSEVMUF9pbW0pCiAjZGVmaW5lIF9GUF9ESVZfTUVBVF9EKFIsWCxZKQlfRlBfRElWX01FQVRfMV91ZGl2X25vcm0oRCxSLFgsWSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9LYnVpbGQgYi9pbmNsdWRlL2FzbS14ODZfNjQvS2J1aWxkCmluZGV4IGRjNGQxMDEuLjQwZjJmMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L0tidWlsZApAQCAtNCw4ICs0LDE4IEBACiBBUkNIREVGIDo9IGRlZmluZWQgX194ODZfNjRfXwogQUxUQVJDSERFRiA6PSBkZWZpbmVkIF9faTM4Nl9fCiAKLWhlYWRlci15ICs9IGJvb3QuaCBib290c2V0dXAuaCBjcHVmZWF0dXJlLmggZGVidWdyZWcuaCBsZHQuaCBcCi0JIG1zci5oIHByY3RsLmggc2V0dXAuaCBzaWdjb250ZXh0MzIuaCB1Y29udGV4dC5oIFwKLQkgdnN5c2NhbGwzMi5oCitoZWFkZXIteSArPSBib290LmgKK2hlYWRlci15ICs9IGJvb3RzZXR1cC5oCitoZWFkZXIteSArPSBjcHVmZWF0dXJlLmgKK2hlYWRlci15ICs9IGRlYnVncmVnLmgKK2hlYWRlci15ICs9IGxkdC5oCitoZWFkZXIteSArPSBtc3IuaAoraGVhZGVyLXkgKz0gcHJjdGwuaAoraGVhZGVyLXkgKz0gc2V0dXAuaAoraGVhZGVyLXkgKz0gc2lnY29udGV4dDMyLmgKK2hlYWRlci15ICs9IHVjb250ZXh0LmgKK2hlYWRlci15ICs9IHZzeXNjYWxsMzIuaAogCi11bmlmZGVmLXkgKz0gbWNlLmggbXRyci5oIHZzeXNjYWxsLmgKK3VuaWZkZWYteSArPSBtY2UuaAordW5pZmRlZi15ICs9IG10cnIuaAordW5pZmRlZi15ICs9IHZzeXNjYWxsLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9hbHRlcm5hdGl2ZS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2FsdGVybmF0aXZlLmgKaW5kZXggYWE2N2JmZC4uYTU4NDgyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2FsdGVybmF0aXZlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2FsdGVybmF0aXZlLmgKQEAgLTQsNiArNCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vY3B1ZmVhdHVyZS5oPgogCiBzdHJ1Y3QgYWx0X2luc3RyIHsKIAl1OCAqaW5zdHI7IAkJLyogb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KQEAgLTEwMiw5ICsxMDMsNiBAQAogLyoKICAqIEFsdGVybmF0aXZlIGlubGluZSBhc3NlbWJseSBmb3IgU01QLgogICoKLSAqIGFsdGVybmF0aXZlX3NtcCgpIHRha2VzIHR3byB2ZXJzaW9ucyAoU01QIGZpcnN0LCBVUCBzZWNvbmQpIGFuZCBpcwotICogZm9yIG1vcmUgY29tcGxleCBzdHVmZiBzdWNoIGFzIHNwaW5sb2Nrcy4KLSAqCiAgKiBUaGUgTE9DS19QUkVGSVggbWFjcm8gZGVmaW5lZCBoZXJlIHJlcGxhY2VzIHRoZSBMT0NLIGFuZAogICogTE9DS19QUkVGSVggbWFjcm9zIHVzZWQgZXZlcnl3aGVyZSBpbiB0aGUgc291cmNlIHRyZWUuCiAgKgpAQCAtMTI0LDIxICsxMjIsNiBAQAogICovCiAKICNpZmRlZiBDT05GSUdfU01QCi0jZGVmaW5lIGFsdGVybmF0aXZlX3NtcChzbXBpbnN0ciwgdXBpbnN0ciwgYXJncy4uLikJCQlcCi0JYXNtIHZvbGF0aWxlICgiNjYxOlxuXHQiIHNtcGluc3RyICJcbjY2MjpcbiIJCQlcCi0JCSAgICAgICIuc2VjdGlvbiAuc21wX2FsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJXAotCQkgICAgICAiICAuYWxpZ24gOFxuIgkJCQkJXAotCQkgICAgICAiICAucXVhZCA2NjFiXG4iICAgICAgICAgICAgLyogbGFiZWwgKi8JCVwKLQkJICAgICAgIiAgLnF1YWQgNjYzZlxuIgkJICAvKiBuZXcgaW5zdHJ1Y3Rpb24gKi8JXAotCQkgICAgICAiICAuYnl0ZSAweDY2XG4iICAgICAgICAgICAgLyogWDg2X0ZFQVRVUkVfVVAgKi8JXAotCQkgICAgICAiICAuYnl0ZSA2NjJiLTY2MWJcbiIgICAgICAgLyogc291cmNlbGVuICovCVwKLQkJICAgICAgIiAgLmJ5dGUgNjY0Zi02NjNmXG4iICAgICAgIC8qIHJlcGxhY2VtZW50bGVuICovCVwKLQkJICAgICAgIi5wcmV2aW91c1xuIgkJCQkJXAotCQkgICAgICAiLnNlY3Rpb24gLnNtcF9hbHRpbnN0cl9yZXBsYWNlbWVudCxcImF3eFwiXG4iCVwKLQkJICAgICAgIjY2Mzpcblx0IiB1cGluc3RyICJcbiIgICAgIC8qIHJlcGxhY2VtZW50ICovCVwKLQkJICAgICAgIjY2NDpcblx0LmZpbGwgNjYyYi02NjFiLDEsMHg0MlxuIiAvKiBzcGFjZSBmb3Igb3JpZ2luYWwgKi8gXAotCQkgICAgICAiLnByZXZpb3VzIiA6IGFyZ3MpCi0KICNkZWZpbmUgTE9DS19QUkVGSVggXAogCQkiLnNlY3Rpb24gLnNtcF9sb2NrcyxcImFcIlxuIglcCiAJCSIgIC5hbGlnbiA4XG4iCQkJXApAQCAtMTQ3LDggKzEzMCw2IEBACiAJICAgICAgIAkiNjYxOlxuXHRsb2NrOyAiCiAKICNlbHNlIC8qICEgQ09ORklHX1NNUCAqLwotI2RlZmluZSBhbHRlcm5hdGl2ZV9zbXAoc21waW5zdHIsIHVwaW5zdHIsIGFyZ3MuLi4pIFwKLQlhc20gdm9sYXRpbGUgKHVwaW5zdHIgOiBhcmdzKQogI2RlZmluZSBMT0NLX1BSRUZJWCAiIgogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxnYXJ5LmggYi9pbmNsdWRlL2FzbS14ODZfNjQvY2FsZ2FyeS5oCmluZGV4IGZiZmI1MDEuLjRlMzkxOTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9jYWxnYXJ5LmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2NhbGdhcnkuaApAQCAtNjAsOSArNjAsNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGRldGVjdF9jYWxnYXJ5KHZvaWQpIHsgcmV0dXJuOyB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgYnVzX3RvX3BoYih1bnNpZ25lZCBjaGFyIGJ1c25vKQotewotCXJldHVybiAoKGJ1c25vICUgMTUgPT0gMCkgPyAwIDogYnVzbm8gLyAyICsgMSk7Ci19Ci0KICNlbmRpZiAvKiBfQVNNX1g4Nl82NF9DQUxHQVJZX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaAppbmRleCBiNGY4ZjRhNC4uYTQwNmZjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lbGYuaApAQCAtNyw4ICs3LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vdXNlci5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vY29tcGF0Lmg+CiAKIC8qIHg4Ni02NCByZWxvY2F0aW9uIHR5cGVzICovCiAjZGVmaW5lIFJfWDg2XzY0X05PTkUJCTAJLyogTm8gcmVsb2MgKi8KQEAgLTM5LDE4ICszNywyMyBAQAogdHlwZWRlZiBzdHJ1Y3QgdXNlcl9pMzg3X3N0cnVjdCBlbGZfZnByZWdzZXRfdDsKIAogLyoKLSAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgd2UgZG9uJ3QgbG9hZCBzb21ldGhpbmcgZm9yIHRoZSB3cm9uZyBhcmNoaXRlY3R1cmUuCi0gKi8KLSNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgXAotCSgoeCktPmVfbWFjaGluZSA9PSBFTV9YODZfNjQpCi0KLS8qCiAgKiBUaGVzZSBhcmUgdXNlZCB0byBzZXQgcGFyYW1ldGVycyBpbiB0aGUgY29yZSBkdW1wcy4KICAqLwogI2RlZmluZSBFTEZfQ0xBU1MJRUxGQ0xBU1M2NAogI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMkxTQgogI2RlZmluZSBFTEZfQVJDSAlFTV9YODZfNjQKIAorI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2NvbXBhdC5oPgorCisvKgorICogVGhpcyBpcyB1c2VkIHRvIGVuc3VyZSB3ZSBkb24ndCBsb2FkIHNvbWV0aGluZyBmb3IgdGhlIHdyb25nIGFyY2hpdGVjdHVyZS4KKyAqLworI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSBcCisJKCh4KS0+ZV9tYWNoaW5lID09IEVNX1g4Nl82NCkKKworCiAvKiBTVlI0L2kzODYgQUJJIChwYWdlcyAzLTMxLCAzLTMyKSBzYXlzIHRoYXQgd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgJWVkeAogICAgY29udGFpbnMgYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gd2hpY2ggbWlnaHQgYmUgcmVnaXN0ZXJlZCB1c2luZyBgYXRleGl0Jy4KICAgIFRoaXMgcHJvdmlkZXMgYSBtZWFuIGZvciB0aGUgZHluYW1pYyBsaW5rZXIgdG8gY2FsbCBEVF9GSU5JIGZ1bmN0aW9ucyBmb3IKQEAgLTE0MSw3ICsxNDQsNiBAQAogLyogSSdtIG5vdCBzdXJlIGlmIHdlIGNhbiB1c2UgJy0nIGhlcmUgKi8KICNkZWZpbmUgRUxGX1BMQVRGT1JNICAoIng4Nl82NCIpCiAKLSNpZmRlZiBfX0tFUk5FTF9fCiBleHRlcm4gdm9pZCBzZXRfcGVyc29uYWxpdHlfNjRiaXQodm9pZCk7CiAjZGVmaW5lIFNFVF9QRVJTT05BTElUWShleCwgaWJjczIpIHNldF9wZXJzb25hbGl0eV82NGJpdCgpCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L2twcm9iZXMuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9rcHJvYmVzLmgKaW5kZXggZDM2ZmViZC4uY2Y1MzE3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQva3Byb2Jlcy5oCkBAIC00Nyw2ICs0Nyw3IEBACiAKIHZvaWQga3JldHByb2JlX3RyYW1wb2xpbmUodm9pZCk7CiBleHRlcm4gdm9pZCBhcmNoX3JlbW92ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCk7CisjZGVmaW5lIGZsdXNoX2luc25fc2xvdChwKQlkbyB7IH0gd2hpbGUgKDApCiAKIC8qIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBjb3B5IG9mIG9yaWdpbmFsIGluc3RydWN0aW9uKi8KIHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9wYWdlLmgKaW5kZXggZjdiZjg3NS4uMTBmMzQ2MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcGFnZS5oCkBAIC0xOSw3ICsxOSw3IEBACiAjZGVmaW5lIEVYQ0VQVElPTl9TVEFDS19PUkRFUiAwCiAjZGVmaW5lIEVYQ0VQVElPTl9TVEtTWiAoUEFHRV9TSVpFIDw8IEVYQ0VQVElPTl9TVEFDS19PUkRFUikKIAotI2RlZmluZSBERUJVR19TVEFDS19PUkRFUiBFWENFUFRJT05fU1RBQ0tfT1JERVIKKyNkZWZpbmUgREVCVUdfU1RBQ0tfT1JERVIgKEVYQ0VQVElPTl9TVEFDS19PUkRFUiArIDEpCiAjZGVmaW5lIERFQlVHX1NUS1NaIChQQUdFX1NJWkUgPDwgREVCVUdfU1RBQ0tfT1JERVIpCiAKICNkZWZpbmUgSVJRU1RBQ0tfT1JERVIgMgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3Byb2Nlc3Nvci5oCmluZGV4IDNiM2MxMjEuLmRlOWMzMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvY2Vzc29yLmgKQEAgLTIzMiw4ICsyMzIsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGlvX2JpdG1hcFtJT19CSVRNQVBfTE9OR1MgKyAxXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgX19fX2NhY2hlbGluZV9hbGlnbmVkOwogCisKIGV4dGVybiBzdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YTsKIERFQ0xBUkVfUEVSX0NQVShzdHJ1Y3QgdHNzX3N0cnVjdCxpbml0X3Rzcyk7CisvKiBTYXZlIHRoZSBvcmlnaW5hbCBpc3QgdmFsdWVzIGZvciBjaGVja2luZyBzdGFjayBwb2ludGVycyBkdXJpbmcgZGVidWdnaW5nICovCitzdHJ1Y3Qgb3JpZ19pc3QgeworCXVuc2lnbmVkIGxvbmcgaXN0WzddOworfTsKK0RFQ0xBUkVfUEVSX0NQVShzdHJ1Y3Qgb3JpZ19pc3QsIG9yaWdfaXN0KTsKIAogI2lmZGVmIENPTkZJR19YODZfVlNNUAogI2RlZmluZSBBUkNIX01JTl9UQVNLQUxJR04JKDEgPDwgSU5URVJOT0RFX0NBQ0hFX1NISUZUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NpZ25hbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3NpZ25hbC5oCmluZGV4IGNlZjdhN2QuLjNlZGUyYTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc2lnbmFsLmgKQEAgLTMsMTMgKzMsMTMgQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAKIC8qIEF2b2lkIHRvbyBtYW55IGhlYWRlciBvcmRlcmluZyBwcm9ibGVtcy4gICovCiBzdHJ1Y3Qgc2lnaW5mbzsKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAvKiBNb3N0IHRoaW5ncyBzaG91bGQgYmUgY2xlYW4gZW5vdWdoIHRvIHJlZGVmaW5lIHRoaXMgYXQgd2lsbCwgaWYgY2FyZQogICAgaXMgdGFrZW4gdG8gbWFrZSBsaWJjIG1hdGNoLiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaAppbmRleCA4ZDM0MjE5Li4yNDhhNzlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaApAQCAtMjEsNyArMjEsNyBAQAogCiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19zdHJpbmcgXAogCSJcbjE6XHQiIFwKLQkibG9jayA7IGRlY2wgJTBcblx0IiBcCisJTE9DS19QUkVGSVggIiA7IGRlY2wgJTBcblx0IiBcCiAJImpzIDJmXG4iIFwKIAlMT0NLX1NFQ1RJT05fU1RBUlQoIiIpIFwKIAkiMjpcdCIgXApAQCAtNDAsMTAgKzQwLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fbG9jayhyYXdfc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlhbHRlcm5hdGl2ZV9zbXAoCi0JCV9fcmF3X3NwaW5fbG9ja19zdHJpbmcsCi0JCV9fcmF3X3NwaW5fbG9ja19zdHJpbmdfdXAsCi0JCSI9bSIgKGxvY2stPnNsb2NrKSA6IDogIm1lbW9yeSIpOworCWFzbSB2b2xhdGlsZShfX3Jhd19zcGluX2xvY2tfc3RyaW5nIDogIj1tIiAobG9jay0+c2xvY2spIDogOiAibWVtb3J5Iik7CiB9CiAKICNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19zcGluX2xvY2sobG9jaykKQEAgLTEyNSwxMiArMTIyLDEyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3Jhd19yZWFkX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewotCWFzbSB2b2xhdGlsZSgibG9jayA7IGluY2wgJTAiIDoiPW0iIChydy0+bG9jaykgOiA6ICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoTE9DS19QUkVGSVggIiA7IGluY2wgJTAiIDoiPW0iIChydy0+bG9jaykgOiA6ICJtZW1vcnkiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3dyaXRlX3VubG9jayhyYXdfcndsb2NrX3QgKnJ3KQogewotCWFzbSB2b2xhdGlsZSgibG9jayA7IGFkZGwgJCIgUldfTE9DS19CSUFTX1NUUiAiLCUwIgorCWFzbSB2b2xhdGlsZShMT0NLX1BSRUZJWCAiIDsgYWRkbCAkIiBSV19MT0NLX0JJQVNfU1RSICIsJTAiCiAJCQkJOiAiPW0iIChydy0+bG9jaykgOiA6ICJtZW1vcnkiKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zd2lvdGxiLmgKaW5kZXggNWY5YTAxOC4uYmE5NGFiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3N3aW90bGIuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3dpb3RsYi5oCkBAIC00Miw2ICs0Miw4IEBACiBleHRlcm4gaW50IHN3aW90bGJfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOwogZXh0ZXJuIHZvaWQgc3dpb3RsYl9pbml0KHZvaWQpOwogCitleHRlcm4gaW50IHN3aW90bGJfZm9yY2U7CisKICNpZmRlZiBDT05GSUdfU1dJT1RMQgogZXh0ZXJuIGludCBzd2lvdGxiOwogI2Vsc2UKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAppbmRleCA5NDM4N2M5Li44MGZkNDhlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCkBAIC04MjEsOCArODIxLDYgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfdmZvcmsoc3RydWN0IHB0X3JlZ3MgcmVncyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX3BpcGUoaW50ICpmaWxkZXMpOwogCi0jZW5kaWYgLyogX19LRVJORUxfU1lTQ0FMTFNfXyAqLwotCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpAQCAtODM4LDkgKzgzNiw5IEBACiAJCQkJc3RydWN0IHNpZ2FjdGlvbiBfX3VzZXIgKm9hY3QsCiAJCQkJc2l6ZV90IHNpZ3NldHNpemUpOwogCi0jZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisjZW5kaWYgIC8qIF9fQVNTRU1CTFlfXyAqLwogCi0jZW5kaWYgLyogX19OT19TVFVCUyAqLworI2VuZGlmIC8qIF9fS0VSTkVMX1NZU0NBTExTX18gKi8KIAogLyoKICAqICJDb25kaXRpb25hbCIgc3lzY2FsbHMKQEAgLTg1MCw1ICs4NDgsOCBAQAogICovCiAjZGVmaW5lIGNvbmRfc3lzY2FsbCh4KSBhc20oIi53ZWFrXHQiICN4ICJcblx0LnNldFx0IiAjeCAiLHN5c19uaV9zeXNjYWxsIikKIAorI2VuZGlmIC8qIF9fTk9fU1RVQlMgKi8KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KLSNlbmRpZgorCisjZW5kaWYgLyogX0FTTV9YODZfNjRfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvdW53aW5kLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdW53aW5kLmgKaW5kZXggZjNlNzEyNC4uMWY2ZTliZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3Vud2luZC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC91bndpbmQuaApAQCAtOTUsNiArOTUsNyBAQAogI2Vsc2UKIAogI2RlZmluZSBVTldfUEMoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQorI2RlZmluZSBVTldfU1AoZnJhbWUpICgodm9pZCkoZnJhbWUpLCAwKQogCiBzdGF0aWMgaW5saW5lIGludCBhcmNoX3Vud191c2VyX21vZGUoY29uc3Qgdm9pZCAqaW5mbykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC92c3lzY2FsbC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKaW5kZXggYTg1ZTE2Zi4uMTQ2YjI0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmgKQEAgLTEsOCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2XzY0X1ZTWVNDQUxMX0hfCiAjZGVmaW5lIF9BU01fWDg2XzY0X1ZTWVNDQUxMX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+Ci0KIGVudW0gdnN5c2NhbGxfbnVtIHsKIAlfX05SX3ZnZXR0aW1lb2ZkYXksCiAJX19OUl92dGltZSwKQEAgLTE0LDYgKzEyLDcgQEAKICNkZWZpbmUgVlNZU0NBTExfQUREUih2c3lzY2FsbF9ucikgKFZTWVNDQUxMX1NUQVJUK1ZTWVNDQUxMX1NJWkUqKHZzeXNjYWxsX25yKSkKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9zZXFsb2NrLmg+CiAKICNkZWZpbmUgX19zZWN0aW9uX3Z4dGltZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi52eHRpbWUiKSwgYWxpZ25lZCgxNikpKQogI2RlZmluZSBfX3NlY3Rpb25fd2FsbF9qaWZmaWVzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLndhbGxfamlmZmllcyIpLCBhbGlnbmVkKDE2KSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NyeXB0by9hbGdhcGkuaCBiL2luY2x1ZGUvY3J5cHRvL2FsZ2FwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDhhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by9hbGdhcGkuaApAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENyeXB0b2dyYXBoaWMgQVBJIGZvciBhbGdvcml0aG1zIChpLmUuLCBsb3ctbGV2ZWwgQVBJKS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSAKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworI2lmbmRlZiBfQ1JZUFRPX0FMR0FQSV9ICisjZGVmaW5lIF9DUllQVE9fQUxHQVBJX0gKKworI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgorCitzdHJ1Y3QgbW9kdWxlOworc3RydWN0IHNlcV9maWxlOworCitzdHJ1Y3QgY3J5cHRvX3R5cGUgeworCXVuc2lnbmVkIGludCAoKmN0eHNpemUpKHN0cnVjdCBjcnlwdG9fYWxnICphbGcpOworCWludCAoKmluaXQpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOworCXZvaWQgKCpleGl0KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKKwl2b2lkICgqc2hvdykoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKTsKK307CisKK3N0cnVjdCBjcnlwdG9faW5zdGFuY2UgeworCXN0cnVjdCBjcnlwdG9fYWxnIGFsZzsKKworCXN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGw7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKKworCXZvaWQgKl9fY3R4W10gQ1JZUFRPX01JTkFMSUdOX0FUVFI7Cit9OworCitzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGhsaXN0X2hlYWQgaW5zdGFuY2VzOworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKworCXN0cnVjdCBjcnlwdG9faW5zdGFuY2UgKigqYWxsb2MpKHZvaWQgKnBhcmFtLCB1bnNpZ25lZCBpbnQgbGVuKTsKKwl2b2lkICgqZnJlZSkoc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7CisKKwljaGFyIG5hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07Cit9OworCitzdHJ1Y3QgY3J5cHRvX3NwYXduIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGNyeXB0b19hbGcgKmFsZzsKKwlzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0OworfTsKKworc3RydWN0IHNjYXR0ZXJfd2FsayB7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworfTsKKworc3RydWN0IGJsa2NpcGhlcl93YWxrIHsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCQl9IHBoeXM7CisKKwkJc3RydWN0IHsKKwkJCXU4ICpwYWdlOworCQkJdTggKmFkZHI7CisJCX0gdmlydDsKKwl9IHNyYywgZHN0OworCisJc3RydWN0IHNjYXR0ZXJfd2FsayBpbjsKKwl1bnNpZ25lZCBpbnQgbmJ5dGVzOworCisJc3RydWN0IHNjYXR0ZXJfd2FsayBvdXQ7CisJdW5zaWduZWQgaW50IHRvdGFsOworCisJdm9pZCAqcGFnZTsKKwl1OCAqYnVmZmVyOworCXU4ICppdjsKKworCWludCBmbGFnczsKK307CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgY3J5cHRvX2Jsa2NpcGhlcl90eXBlOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjcnlwdG9fdHlwZSBjcnlwdG9faGFzaF90eXBlOworCit2b2lkIGNyeXB0b19tb2RfcHV0KHN0cnVjdCBjcnlwdG9fYWxnICphbGcpOworCitpbnQgY3J5cHRvX3JlZ2lzdGVyX3RlbXBsYXRlKHN0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKnRtcGwpOwordm9pZCBjcnlwdG9fdW5yZWdpc3Rlcl90ZW1wbGF0ZShzdHJ1Y3QgY3J5cHRvX3RlbXBsYXRlICp0bXBsKTsKK3N0cnVjdCBjcnlwdG9fdGVtcGxhdGUgKmNyeXB0b19sb29rdXBfdGVtcGxhdGUoY29uc3QgY2hhciAqbmFtZSk7CisKK2ludCBjcnlwdG9faW5pdF9zcGF3bihzdHJ1Y3QgY3J5cHRvX3NwYXduICpzcGF3biwgc3RydWN0IGNyeXB0b19hbGcgKmFsZywKKwkJICAgICAgc3RydWN0IGNyeXB0b19pbnN0YW5jZSAqaW5zdCk7Cit2b2lkIGNyeXB0b19kcm9wX3NwYXduKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduKTsKK3N0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fc3Bhd25fdGZtKHN0cnVjdCBjcnlwdG9fc3Bhd24gKnNwYXduKTsKKworc3RydWN0IGNyeXB0b19hbGcgKmNyeXB0b19nZXRfYXR0cl9hbGcodm9pZCAqcGFyYW0sIHVuc2lnbmVkIGludCBsZW4sCisJCQkJICAgICAgIHUzMiB0eXBlLCB1MzIgbWFzayk7CitzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICpjcnlwdG9fYWxsb2NfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgICAgc3RydWN0IGNyeXB0b19hbGcgKmFsZyk7CisKK2ludCBibGtjaXBoZXJfd2Fsa19kb25lKHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCXN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaywgaW50IGVycik7CitpbnQgYmxrY2lwaGVyX3dhbGtfdmlydChzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsCisJCQlzdHJ1Y3QgYmxrY2lwaGVyX3dhbGsgKndhbGspOworaW50IGJsa2NpcGhlcl93YWxrX3BoeXMoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJc3RydWN0IGJsa2NpcGhlcl93YWxrICp3YWxrKTsKKworc3RhdGljIGlubGluZSB2b2lkICpjcnlwdG9fdGZtX2N0eF9hbGlnbmVkKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpY3J5cHRvX3RmbV9jdHgodGZtKTsKKwl1bnNpZ25lZCBsb25nIGFsaWduID0gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKHRmbSk7CisKKwlpZiAoYWxpZ24gPD0gY3J5cHRvX3RmbV9jdHhfYWxpZ25tZW50KCkpCisJCWFsaWduID0gMTsKKwlyZXR1cm4gKHZvaWQgKilBTElHTihhZGRyLCBhbGlnbik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqY3J5cHRvX2luc3RhbmNlX2N0eChzdHJ1Y3QgY3J5cHRvX2luc3RhbmNlICppbnN0KQoreworCXJldHVybiBpbnN0LT5fX2N0eDsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpjcnlwdG9fYmxrY2lwaGVyX2N0eChzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2N0eCgmdGZtLT5iYXNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpjcnlwdG9fYmxrY2lwaGVyX2N0eF9hbGlnbmVkKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fY3R4X2FsaWduZWQoJnRmbS0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNpcGhlcl9hbGcgKmNyeXB0b19jaXBoZXJfYWxnKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuICZjcnlwdG9fY2lwaGVyX3RmbSh0Zm0pLT5fX2NydF9hbGctPmNyYV9jaXBoZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqY3J5cHRvX2hhc2hfY3R4X2FsaWduZWQoc3RydWN0IGNyeXB0b19oYXNoICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fY3R4X2FsaWduZWQoJnRmbS0+YmFzZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBibGtjaXBoZXJfd2Fsa19pbml0KHN0cnVjdCBibGtjaXBoZXJfd2FsayAqd2FsaywKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXdhbGstPmluLnNnID0gc3JjOworCXdhbGstPm91dC5zZyA9IGRzdDsKKwl3YWxrLT50b3RhbCA9IG5ieXRlczsKK30KKworI2VuZGlmCS8qIF9DUllQVE9fQUxHQVBJX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9jcnlwdG8vdHdvZmlzaC5oIGIvaW5jbHVkZS9jcnlwdG8vdHdvZmlzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDg1MjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2NyeXB0by90d29maXNoLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBfQ1JZUFRPX1RXT0ZJU0hfSAorI2RlZmluZSBfQ1JZUFRPX1RXT0ZJU0hfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBURl9NSU5fS0VZX1NJWkUgMTYKKyNkZWZpbmUgVEZfTUFYX0tFWV9TSVpFIDMyCisjZGVmaW5lIFRGX0JMT0NLX1NJWkUgMTYKKworc3RydWN0IGNyeXB0b190Zm07CisKKy8qIFN0cnVjdHVyZSBmb3IgYW4gZXhwYW5kZWQgVHdvZmlzaCBrZXkuICBzIGNvbnRhaW5zIHRoZSBrZXktZGVwZW5kZW50CisgKiBTLWJveGVzIGNvbXBvc2VkIHdpdGggdGhlIE1EUyBtYXRyaXg7IHcgY29udGFpbnMgdGhlIGVpZ2h0ICJ3aGl0ZW5pbmciCisgKiBzdWJrZXlzLCBLWzBdIHRocm91Z2ggS1s3XS4JayBob2xkcyB0aGUgcmVtYWluaW5nLCAicm91bmQiIHN1YmtleXMuICBOb3RlCisgKiB0aGF0IGtbaV0gY29ycmVzcG9uZHMgdG8gd2hhdCB0aGUgVHdvZmlzaCBwYXBlciBjYWxscyBLW2krOF0uICovCitzdHJ1Y3QgdHdvZmlzaF9jdHggeworCXUzMiBzWzRdWzI1Nl0sIHdbOF0sIGtbMzJdOworfTsKKworaW50IHR3b2Zpc2hfc2V0a2V5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlfbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDJiOGE3ZDYuLjdkMDc2ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xLDYzICsxLDM0MyBAQAotaGVhZGVyLXkgOj0gYnl0ZW9yZGVyLyBkdmIvIGhkbGMvIGlzZG4vIG5mc2QvIHJhaWQvIHN1bnJwYy8gdGNfYWN0LwlcCi0JbmV0ZmlsdGVyLyBuZXRmaWx0ZXJfYXJwLyBuZXRmaWx0ZXJfYnJpZGdlLyBuZXRmaWx0ZXJfaXB2NC8JXAotCW5ldGZpbHRlcl9pcHY2LworaGVhZGVyLXkgKz0gYnl0ZW9yZGVyLworaGVhZGVyLXkgKz0gZHZiLworaGVhZGVyLXkgKz0gaGRsYy8KK2hlYWRlci15ICs9IGlzZG4vCitoZWFkZXIteSArPSBuZnNkLworaGVhZGVyLXkgKz0gcmFpZC8KK2hlYWRlci15ICs9IHN1bnJwYy8KK2hlYWRlci15ICs9IHRjX2FjdC8KK2hlYWRlci15ICs9IG5ldGZpbHRlci8KK2hlYWRlci15ICs9IG5ldGZpbHRlcl9hcnAvCitoZWFkZXIteSArPSBuZXRmaWx0ZXJfYnJpZGdlLworaGVhZGVyLXkgKz0gbmV0ZmlsdGVyX2lwdjQvCitoZWFkZXIteSArPSBuZXRmaWx0ZXJfaXB2Ni8KIAotaGVhZGVyLXkgKz0gYWZmc19mcy5oIGFmZnNfaGFyZGJsb2Nrcy5oIGFpb19hYmkuaCBhLm91dC5oIGFyY2ZiLmgJXAotCWF0bWFwaS5oIGF0bWJyMjY4NC5oIGF0bWNsaXAuaCBhdG1fZW5pLmggYXRtX2hlLmgJCVwKLQlhdG1faWR0NzcxMDUuaCBhdG1pb2MuaCBhdG1sZWMuaCBhdG1tcGMuaCBhdG1fbmljc3Rhci5oCQlcCi0JYXRtcHBwLmggYXRtc2FwLmggYXRtc3ZjLmggYXRtX3phdG0uaCBhdXRvX2ZzNC5oIGF1eHZlYy5oCVwKLQlhd2Vfdm9pY2UuaCBheDI1LmggYjFsbGkuaCBiYXljb20uaCBiZnNfZnMuaCBibGtwZy5oCQlcCi0JYnBxZXRoZXIuaCBjZGsuaCBjaGlvLmggY29kYV9wc2Rldi5oIGNvZmYuaCBjb21zdGF0cy5oCQlcCi0JY29uc29sZW1hcC5oIGN5Y3hfY2ZtLmggZG0taW9jdGwuaCBkbi5oIGRxYmxrX3YxLmgJCVwKLQlkcWJsa192Mi5oIGRxYmxrX3hmcy5oIGVmc19mc19zYi5oIGVsZi1mZHBpYy5oIGVsZi5oIGVsZi1lbS5oCVwKLQlmYWR2aXNlLmggZmQuaCBmZHJlZy5oIGZ0YXBlLWhlYWRlci1zZWdtZW50LmggZnRhcGUtdmVuZG9ycy5oCVwKLQlmdXNlLmggZnV0ZXguaCBnZW5ldGxpbmsuaCBnZW5fc3RhdHMuaCBnaWdhc2V0X2Rldi5oIGhkc21hcnQuaAlcCi0JaHBmc19mcy5oIGh5c2RuX2lmLmggaTJjLWRldi5oIGk4ay5oIGljbXAuaAkJCVwKLQlpZl9hcmNuZXQuaCBpZl9hcnAuaCBpZl9ib25kaW5nLmggaWZfY2FibGVtb2RlbS5oIGlmX2ZjLmgJXAotCWlmX2ZkZGkuaCBpZi5oIGlmX2hpcHBpLmggaWZfaW5maW5pYmFuZC5oIGlmX3BhY2tldC5oCQlcCi0JaWZfcGxpcC5oIGlmX3BwcC5oIGlmX3NsaXAuaCBpZl9zdHJpcC5oIGlmX3R1bm5lbC5oIGluNi5oCVwKLQlpbl9yb3V0ZS5oIGlvY3RsLmggaXAuaCBpcG1pX21zZ2RlZnMuaCBpcF9tcF9hbGcuaCBpcHNlYy5oCVwKLQlpcHguaCBpcmRhLmggaXNkbl9kaXZlcnRpZi5oIGlzb19mcy5oIGl0ZV9ncGlvLmggaXhqdXNlci5oCVwKLQlqZmZzMi5oIGtleWN0bC5oIGxpbWl0cy5oIG1ham9yLmggbWF0cm94ZmIuaCBtZXllLmggbWluaXhfZnMuaAlcCi0JbW10aW1lci5oIG1xdWV1ZS5oIG10aW8uaCBuY3Bfbm8uaCBuZXRmaWx0ZXJfYXJwLmggbmV0cm9tLmgJXAotCW5mczIuaCBuZnM0X21vdW50LmggbmZzX21vdW50Lmggb3BlbnByb21fZnMuaCBwYXJhbS5oCQlcCi0JcGNpX2lkcy5oIHBjaV9yZWdzLmggcGVyc29uYWxpdHkuaCBwZmtleXYyLmggcGcuaCBwa3RfY2xzLmgJXAotCXBrdF9zY2hlZC5oIHBvc2l4X3R5cGVzLmggcHBkZXYuaCBwcmN0bC5oIHBzMmVzZGkuaCBxaWMxMTcuaAlcCi0JcW54dHlwZXMuaCBxdW90YWlvX3YxLmggcXVvdGFpb192Mi5oIHJhZGVvbmZiLmggcmF3LmgJCVwKLQlyZXNvdXJjZS5oIHJvc2UuaCBzY3RwLmggc21ibm8uaCBzbm1wLmggc29ja2lvcy5oIHNvbS5oCQlcCi0Jc291bmQuaCBzdGRkZWYuaCBzeW5jbGluay5oIHRlbGVwaG9ueS5oIHRlcm1pb3MuaCB0aWNhYmxlLmgJXAotCXRpbWVzLmggdGlvY2wuaCB0aXBjLmggdG9zaGliYS5oIHVsdHJhc291bmQuaCB1bi5oIHV0aW1lLmgJXAotCXV0c25hbWUuaCB2aWRlb19kZWNvZGVyLmggdmlkZW9fZW5jb2Rlci5oIHZpZGVvdGV4dC5oIHZ0LmgJXAotCXdhdmVmcm9udC5oIHdpcmVsZXNzLmggeGF0dHIuaCB4MjUuaCB6b3Jyb19pZHMuaAoraGVhZGVyLXkgKz0gYWZmc19mcy5oCitoZWFkZXIteSArPSBhZmZzX2hhcmRibG9ja3MuaAoraGVhZGVyLXkgKz0gYWlvX2FiaS5oCitoZWFkZXIteSArPSBhLm91dC5oCitoZWFkZXIteSArPSBhcmNmYi5oCitoZWFkZXIteSArPSBhdG1hcGkuaAoraGVhZGVyLXkgKz0gYXRtYnIyNjg0LmgKK2hlYWRlci15ICs9IGF0bWNsaXAuaAoraGVhZGVyLXkgKz0gYXRtX2VuaS5oCitoZWFkZXIteSArPSBhdG1faGUuaAoraGVhZGVyLXkgKz0gYXRtX2lkdDc3MTA1LmgKK2hlYWRlci15ICs9IGF0bWlvYy5oCitoZWFkZXIteSArPSBhdG1sZWMuaAoraGVhZGVyLXkgKz0gYXRtbXBjLmgKK2hlYWRlci15ICs9IGF0bV9uaWNzdGFyLmgKK2hlYWRlci15ICs9IGF0bXBwcC5oCitoZWFkZXIteSArPSBhdG1zYXAuaAoraGVhZGVyLXkgKz0gYXRtc3ZjLmgKK2hlYWRlci15ICs9IGF0bV96YXRtLmgKK2hlYWRlci15ICs9IGF1dG9fZnM0LmgKK2hlYWRlci15ICs9IGF1eHZlYy5oCitoZWFkZXIteSArPSBhd2Vfdm9pY2UuaAoraGVhZGVyLXkgKz0gYXgyNS5oCitoZWFkZXIteSArPSBiMWxsaS5oCitoZWFkZXIteSArPSBiYXljb20uaAoraGVhZGVyLXkgKz0gYmZzX2ZzLmgKK2hlYWRlci15ICs9IGJsa3BnLmgKK2hlYWRlci15ICs9IGJwcWV0aGVyLmgKK2hlYWRlci15ICs9IGNkay5oCitoZWFkZXIteSArPSBjaGlvLmgKK2hlYWRlci15ICs9IGNvZGFfcHNkZXYuaAoraGVhZGVyLXkgKz0gY29mZi5oCitoZWFkZXIteSArPSBjb21zdGF0cy5oCitoZWFkZXIteSArPSBjb25zb2xlbWFwLmgKK2hlYWRlci15ICs9IGN5Y3hfY2ZtLmgKK2hlYWRlci15ICs9IGRtLWlvY3RsLmgKK2hlYWRlci15ICs9IGRuLmgKK2hlYWRlci15ICs9IGRxYmxrX3YxLmgKK2hlYWRlci15ICs9IGRxYmxrX3YyLmgKK2hlYWRlci15ICs9IGRxYmxrX3hmcy5oCitoZWFkZXIteSArPSBlZnNfZnNfc2IuaAoraGVhZGVyLXkgKz0gZWxmLWZkcGljLmgKK2hlYWRlci15ICs9IGVsZi5oCitoZWFkZXIteSArPSBlbGYtZW0uaAoraGVhZGVyLXkgKz0gZmFkdmlzZS5oCitoZWFkZXIteSArPSBmZC5oCitoZWFkZXIteSArPSBmZHJlZy5oCitoZWFkZXIteSArPSBmdGFwZS1oZWFkZXItc2VnbWVudC5oCitoZWFkZXIteSArPSBmdGFwZS12ZW5kb3JzLmgKK2hlYWRlci15ICs9IGZ1c2UuaAoraGVhZGVyLXkgKz0gZnV0ZXguaAoraGVhZGVyLXkgKz0gZ2VuZXRsaW5rLmgKK2hlYWRlci15ICs9IGdlbl9zdGF0cy5oCitoZWFkZXIteSArPSBnaWdhc2V0X2Rldi5oCitoZWFkZXIteSArPSBoZHNtYXJ0LmgKK2hlYWRlci15ICs9IGhwZnNfZnMuaAoraGVhZGVyLXkgKz0gaHlzZG5faWYuaAoraGVhZGVyLXkgKz0gaTJjLWRldi5oCitoZWFkZXIteSArPSBpOGsuaAoraGVhZGVyLXkgKz0gaWNtcC5oCitoZWFkZXIteSArPSBpZl9hcmNuZXQuaAoraGVhZGVyLXkgKz0gaWZfYXJwLmgKK2hlYWRlci15ICs9IGlmX2JvbmRpbmcuaAoraGVhZGVyLXkgKz0gaWZfY2FibGVtb2RlbS5oCitoZWFkZXIteSArPSBpZl9mYy5oCitoZWFkZXIteSArPSBpZl9mZGRpLmgKK2hlYWRlci15ICs9IGlmLmgKK2hlYWRlci15ICs9IGlmX2hpcHBpLmgKK2hlYWRlci15ICs9IGlmX2luZmluaWJhbmQuaAoraGVhZGVyLXkgKz0gaWZfcGFja2V0LmgKK2hlYWRlci15ICs9IGlmX3BsaXAuaAoraGVhZGVyLXkgKz0gaWZfcHBwLmgKK2hlYWRlci15ICs9IGlmX3NsaXAuaAoraGVhZGVyLXkgKz0gaWZfc3RyaXAuaAoraGVhZGVyLXkgKz0gaWZfdHVubmVsLmgKK2hlYWRlci15ICs9IGluNi5oCitoZWFkZXIteSArPSBpbl9yb3V0ZS5oCitoZWFkZXIteSArPSBpb2N0bC5oCitoZWFkZXIteSArPSBpcC5oCitoZWFkZXIteSArPSBpcG1pX21zZ2RlZnMuaAoraGVhZGVyLXkgKz0gaXBfbXBfYWxnLmgKK2hlYWRlci15ICs9IGlwc2VjLmgKK2hlYWRlci15ICs9IGlweC5oCitoZWFkZXIteSArPSBpcmRhLmgKK2hlYWRlci15ICs9IGlzZG5fZGl2ZXJ0aWYuaAoraGVhZGVyLXkgKz0gaXNvX2ZzLmgKK2hlYWRlci15ICs9IGl0ZV9ncGlvLmgKK2hlYWRlci15ICs9IGl4anVzZXIuaAoraGVhZGVyLXkgKz0gamZmczIuaAoraGVhZGVyLXkgKz0ga2V5Y3RsLmgKK2hlYWRlci15ICs9IGxpbWl0cy5oCitoZWFkZXIteSArPSBtYWpvci5oCitoZWFkZXIteSArPSBtYXRyb3hmYi5oCitoZWFkZXIteSArPSBtZXllLmgKK2hlYWRlci15ICs9IG1pbml4X2ZzLmgKK2hlYWRlci15ICs9IG1tdGltZXIuaAoraGVhZGVyLXkgKz0gbXF1ZXVlLmgKK2hlYWRlci15ICs9IG10aW8uaAoraGVhZGVyLXkgKz0gbmNwX25vLmgKK2hlYWRlci15ICs9IG5ldGZpbHRlcl9hcnAuaAoraGVhZGVyLXkgKz0gbmV0cm9tLmgKK2hlYWRlci15ICs9IG5mczIuaAoraGVhZGVyLXkgKz0gbmZzNF9tb3VudC5oCitoZWFkZXIteSArPSBuZnNfbW91bnQuaAoraGVhZGVyLXkgKz0gb3BlbnByb21fZnMuaAoraGVhZGVyLXkgKz0gcGFyYW0uaAoraGVhZGVyLXkgKz0gcGNpX2lkcy5oCitoZWFkZXIteSArPSBwY2lfcmVncy5oCitoZWFkZXIteSArPSBwZXJzb25hbGl0eS5oCitoZWFkZXIteSArPSBwZmtleXYyLmgKK2hlYWRlci15ICs9IHBnLmgKK2hlYWRlci15ICs9IHBrdF9jbHMuaAoraGVhZGVyLXkgKz0gcGt0X3NjaGVkLmgKK2hlYWRlci15ICs9IHBvc2l4X3R5cGVzLmgKK2hlYWRlci15ICs9IHBwZGV2LmgKK2hlYWRlci15ICs9IHByY3RsLmgKK2hlYWRlci15ICs9IHBzMmVzZGkuaAoraGVhZGVyLXkgKz0gcWljMTE3LmgKK2hlYWRlci15ICs9IHFueHR5cGVzLmgKK2hlYWRlci15ICs9IHF1b3RhaW9fdjEuaAoraGVhZGVyLXkgKz0gcXVvdGFpb192Mi5oCitoZWFkZXIteSArPSByYWRlb25mYi5oCitoZWFkZXIteSArPSByYXcuaAoraGVhZGVyLXkgKz0gcmVzb3VyY2UuaAoraGVhZGVyLXkgKz0gcm9zZS5oCitoZWFkZXIteSArPSBzY3RwLmgKK2hlYWRlci15ICs9IHNtYm5vLmgKK2hlYWRlci15ICs9IHNubXAuaAoraGVhZGVyLXkgKz0gc29ja2lvcy5oCitoZWFkZXIteSArPSBzb20uaAoraGVhZGVyLXkgKz0gc291bmQuaAoraGVhZGVyLXkgKz0gc3RkZGVmLmgKK2hlYWRlci15ICs9IHN5bmNsaW5rLmgKK2hlYWRlci15ICs9IHRlbGVwaG9ueS5oCitoZWFkZXIteSArPSB0ZXJtaW9zLmgKK2hlYWRlci15ICs9IHRpY2FibGUuaAoraGVhZGVyLXkgKz0gdGltZXMuaAoraGVhZGVyLXkgKz0gdGlvY2wuaAoraGVhZGVyLXkgKz0gdGlwYy5oCitoZWFkZXIteSArPSB0b3NoaWJhLmgKK2hlYWRlci15ICs9IHVsdHJhc291bmQuaAoraGVhZGVyLXkgKz0gdW4uaAoraGVhZGVyLXkgKz0gdXRpbWUuaAoraGVhZGVyLXkgKz0gdXRzbmFtZS5oCitoZWFkZXIteSArPSB2aWRlb19kZWNvZGVyLmgKK2hlYWRlci15ICs9IHZpZGVvX2VuY29kZXIuaAoraGVhZGVyLXkgKz0gdmlkZW90ZXh0LmgKK2hlYWRlci15ICs9IHZ0LmgKK2hlYWRlci15ICs9IHdhdmVmcm9udC5oCitoZWFkZXIteSArPSB3aXJlbGVzcy5oCitoZWFkZXIteSArPSB4YXR0ci5oCitoZWFkZXIteSArPSB4MjUuaAoraGVhZGVyLXkgKz0gem9ycm9faWRzLmgKIAotdW5pZmRlZi15ICs9IGFjY3QuaCBhZGIuaCBhZGZzX2ZzLmggYWdwZ2FydC5oIGFwbV9iaW9zLmggYXRhbGsuaAlcCi0JYXRtYXJwLmggYXRtZGV2LmggYXRtLmggYXRtX3RjcC5oIGF1ZGl0LmggYXV0b19mcy5oIGJpbmZtdHMuaAlcCi0JY2FwYWJpbGl0eS5oIGNhcGkuaCBjY2lzc19pb2N0bC5oIGNkcm9tLmggY200MDAwX2NzLmgJCVwKLQljbl9wcm9jLmggY29kYS5oIGNvbm5lY3Rvci5oIGNyYW1mc19mcy5oIGN1ZGEuaCBjeWNsYWRlcy5oCVwKLQlkY2NwLmggZGlyZW50LmggZGl2ZXJ0LmggZWxmY29yZS5oIGVycm5vLmggZXJycXVldWUuaAkJXAotCWV0aHRvb2wuaCBldmVudHBvbGwuaCBleHQyX2ZzLmggZXh0M19mcy5oIGZiLmggZmNudGwuaAkJXAotCWZpbHRlci5oIGZsYXQuaCBmcy5oIGZ0YXBlLmggZ2FtZXBvcnQuaCBnZW5lcmljX3NlcmlhbC5oCVwKLQlnZW5oZC5oIGhheWVzZXNwLmggaGRsY2Rydi5oIGhkbGMuaCBoZHJlZy5oIGhpZGRldi5oIGhwZXQuaAlcCi0JaTJjLmggaTJvLWRldi5oIGljbXB2Ni5oIGlmX2JyaWRnZS5oIGlmX2VjLmgJCQlcCi0JaWZfZXFsLmggaWZfZXRoZXIuaCBpZl9mcmFkLmggaWZfbHRhbGsuaCBpZl9wcHBveC5oCQlcCi0JaWZfc2hhcGVyLmggaWZfdHIuaCBpZl90dW4uaCBpZl92bGFuLmggaWZfd2FucGlwZS5oIGlnbXAuaAlcCi0JaW5ldF9kaWFnLmggaW4uaCBpbm90aWZ5LmggaW5wdXQuaCBpcGMuaCBpcG1pLmggaXB2Ni5oCQlcCi0JaXB2Nl9yb3V0ZS5oIGlzZG4uaCBpc2RuaWYuaCBpc2RuX3BwcC5oIGlzaWNvbS5oIGpiZC5oCQlcCi0Jam95c3RpY2suaCBrZGV2X3QuaCBrZC5oIGtlcm5lbGNhcGkuaCBrZXJuZWwuaCBrZXlib2FyZC5oCVwKLQlsbGMuaCBsb29wLmggbHAuaCBtZW1wb2xpY3kuaCBtaWkuaCBtbWFuLmggbXJvdXRlLmggbXNkb3NfZnMuaAlcCi0JbXNnLmggbmJkLmggbmNwX2ZzLmggbmNwLmggbmNwX21vdW50LmggbmV0ZGV2aWNlLmgJCVwKLQluZXRmaWx0ZXJfYnJpZGdlLmggbmV0ZmlsdGVyX2RlY25ldC5oIG5ldGZpbHRlci5oCQlcCi0JbmV0ZmlsdGVyX2lwdjQuaCBuZXRmaWx0ZXJfaXB2Ni5oIG5ldGZpbHRlcl9sb2dnaW5nLmggbmV0LmgJXAotCW5ldGxpbmsuaCBuZnMzLmggbmZzNC5oIG5mc2FjbC5oIG5mc19mcy5oIG5mcy5oIG5mc19pZG1hcC5oCVwKLQluX3IzOTY0LmggbnVidXMuaCBudnJhbS5oIHBhcnBvcnQuaCBwYXRjaGtleS5oIHBjaS5oIHBrdGNkdmQuaAlcCi0JcG11LmggcG9sbC5oIHBwcF9kZWZzLmggcHBwLWNvbXAuaCBwdHJhY2UuaCBxbng0X2ZzLmggcXVvdGEuaAlcCi0JcmFuZG9tLmggcmVib290LmggcmVpc2VyZnNfZnMuaCByZWlzZXJmc194YXR0ci5oIHJvbWZzX2ZzLmgJXAotCXJvdXRlLmggcnRjLmggcnRuZXRsaW5rLmggc2NjLmggc2NoZWQuaCBzZGxhLmgJCQlcCi0Jc2VsaW51eF9uZXRsaW5rLmggc2VtLmggc2VyaWFsX2NvcmUuaCBzZXJpYWwuaCBzZXJpby5oIHNobS5oCVwKLQlzaWduYWwuaCBzbWJfZnMuaCBzbWIuaCBzbWJfbW91bnQuaCBzb2NrZXQuaCBzb25ldC5oIHNvbnlwaS5oCVwKLQlzb3VuZGNhcmQuaCBzdGF0Lmggc3lzY3RsLmggdGNwLmggdGltZS5oIHRpbWV4LmggdHR5LmggdHlwZXMuaAlcCi0JdWRmX2ZzX2kuaCB1ZHAuaCB1aW5wdXQuaCB1aW8uaCB1bmlzdGQuaCB1c2JfY2g5LmgJCVwKLQl1c2JkZXZpY2VfZnMuaCB1c2VyLmggdmlkZW9kZXYyLmggdmlkZW9kZXYuaCB3YWl0LmgJCVwKLQl3YW5yb3V0ZXIuaCB3YXRjaGRvZy5oIHhmcm0uaCB6ZnRhcGUuaAordW5pZmRlZi15ICs9IGFjY3QuaAordW5pZmRlZi15ICs9IGFkYi5oCit1bmlmZGVmLXkgKz0gYWRmc19mcy5oCit1bmlmZGVmLXkgKz0gYWdwZ2FydC5oCit1bmlmZGVmLXkgKz0gYXBtX2Jpb3MuaAordW5pZmRlZi15ICs9IGF0YWxrLmgKK3VuaWZkZWYteSArPSBhdG1hcnAuaAordW5pZmRlZi15ICs9IGF0bWRldi5oCit1bmlmZGVmLXkgKz0gYXRtLmgKK3VuaWZkZWYteSArPSBhdG1fdGNwLmgKK3VuaWZkZWYteSArPSBhdWRpdC5oCit1bmlmZGVmLXkgKz0gYXV0b19mcy5oCit1bmlmZGVmLXkgKz0gYmluZm10cy5oCit1bmlmZGVmLXkgKz0gY2FwYWJpbGl0eS5oCit1bmlmZGVmLXkgKz0gY2FwaS5oCit1bmlmZGVmLXkgKz0gY2Npc3NfaW9jdGwuaAordW5pZmRlZi15ICs9IGNkcm9tLmgKK3VuaWZkZWYteSArPSBjbTQwMDBfY3MuaAordW5pZmRlZi15ICs9IGNuX3Byb2MuaAordW5pZmRlZi15ICs9IGNvZGEuaAordW5pZmRlZi15ICs9IGNvbm5lY3Rvci5oCit1bmlmZGVmLXkgKz0gY3JhbWZzX2ZzLmgKK3VuaWZkZWYteSArPSBjdWRhLmgKK3VuaWZkZWYteSArPSBjeWNsYWRlcy5oCit1bmlmZGVmLXkgKz0gZGNjcC5oCit1bmlmZGVmLXkgKz0gZGlyZW50LmgKK3VuaWZkZWYteSArPSBkaXZlcnQuaAordW5pZmRlZi15ICs9IGVsZmNvcmUuaAordW5pZmRlZi15ICs9IGVycm5vLmgKK3VuaWZkZWYteSArPSBlcnJxdWV1ZS5oCit1bmlmZGVmLXkgKz0gZXRodG9vbC5oCit1bmlmZGVmLXkgKz0gZXZlbnRwb2xsLmgKK3VuaWZkZWYteSArPSBleHQyX2ZzLmgKK3VuaWZkZWYteSArPSBleHQzX2ZzLmgKK3VuaWZkZWYteSArPSBmYi5oCit1bmlmZGVmLXkgKz0gZmNudGwuaAordW5pZmRlZi15ICs9IGZpbHRlci5oCit1bmlmZGVmLXkgKz0gZmxhdC5oCit1bmlmZGVmLXkgKz0gZnMuaAordW5pZmRlZi15ICs9IGZ0YXBlLmgKK3VuaWZkZWYteSArPSBnYW1lcG9ydC5oCit1bmlmZGVmLXkgKz0gZ2VuZXJpY19zZXJpYWwuaAordW5pZmRlZi15ICs9IGdlbmhkLmgKK3VuaWZkZWYteSArPSBoYXllc2VzcC5oCit1bmlmZGVmLXkgKz0gaGRsY2Rydi5oCit1bmlmZGVmLXkgKz0gaGRsYy5oCit1bmlmZGVmLXkgKz0gaGRyZWcuaAordW5pZmRlZi15ICs9IGhpZGRldi5oCit1bmlmZGVmLXkgKz0gaHBldC5oCit1bmlmZGVmLXkgKz0gaTJjLmgKK3VuaWZkZWYteSArPSBpMm8tZGV2LmgKK3VuaWZkZWYteSArPSBpY21wdjYuaAordW5pZmRlZi15ICs9IGlmX2JyaWRnZS5oCit1bmlmZGVmLXkgKz0gaWZfZWMuaAordW5pZmRlZi15ICs9IGlmX2VxbC5oCit1bmlmZGVmLXkgKz0gaWZfZXRoZXIuaAordW5pZmRlZi15ICs9IGlmX2ZyYWQuaAordW5pZmRlZi15ICs9IGlmX2x0YWxrLmgKK3VuaWZkZWYteSArPSBpZl9wcHBveC5oCit1bmlmZGVmLXkgKz0gaWZfc2hhcGVyLmgKK3VuaWZkZWYteSArPSBpZl90ci5oCit1bmlmZGVmLXkgKz0gaWZfdHVuLmgKK3VuaWZkZWYteSArPSBpZl92bGFuLmgKK3VuaWZkZWYteSArPSBpZl93YW5waXBlLmgKK3VuaWZkZWYteSArPSBpZ21wLmgKK3VuaWZkZWYteSArPSBpbmV0X2RpYWcuaAordW5pZmRlZi15ICs9IGluLmgKK3VuaWZkZWYteSArPSBpbm90aWZ5LmgKK3VuaWZkZWYteSArPSBpbnB1dC5oCit1bmlmZGVmLXkgKz0gaXBjLmgKK3VuaWZkZWYteSArPSBpcG1pLmgKK3VuaWZkZWYteSArPSBpcHY2LmgKK3VuaWZkZWYteSArPSBpcHY2X3JvdXRlLmgKK3VuaWZkZWYteSArPSBpc2RuLmgKK3VuaWZkZWYteSArPSBpc2RuaWYuaAordW5pZmRlZi15ICs9IGlzZG5fcHBwLmgKK3VuaWZkZWYteSArPSBpc2ljb20uaAordW5pZmRlZi15ICs9IGpiZC5oCit1bmlmZGVmLXkgKz0gam95c3RpY2suaAordW5pZmRlZi15ICs9IGtkZXZfdC5oCit1bmlmZGVmLXkgKz0ga2QuaAordW5pZmRlZi15ICs9IGtlcm5lbGNhcGkuaAordW5pZmRlZi15ICs9IGtlcm5lbC5oCit1bmlmZGVmLXkgKz0ga2V5Ym9hcmQuaAordW5pZmRlZi15ICs9IGxsYy5oCit1bmlmZGVmLXkgKz0gbG9vcC5oCit1bmlmZGVmLXkgKz0gbHAuaAordW5pZmRlZi15ICs9IG1lbXBvbGljeS5oCit1bmlmZGVmLXkgKz0gbWlpLmgKK3VuaWZkZWYteSArPSBtbWFuLmgKK3VuaWZkZWYteSArPSBtcm91dGUuaAordW5pZmRlZi15ICs9IG1zZG9zX2ZzLmgKK3VuaWZkZWYteSArPSBtc2cuaAordW5pZmRlZi15ICs9IG5iZC5oCit1bmlmZGVmLXkgKz0gbmNwX2ZzLmgKK3VuaWZkZWYteSArPSBuY3AuaAordW5pZmRlZi15ICs9IG5jcF9tb3VudC5oCit1bmlmZGVmLXkgKz0gbmV0ZGV2aWNlLmgKK3VuaWZkZWYteSArPSBuZXRmaWx0ZXJfYnJpZGdlLmgKK3VuaWZkZWYteSArPSBuZXRmaWx0ZXJfZGVjbmV0LmgKK3VuaWZkZWYteSArPSBuZXRmaWx0ZXIuaAordW5pZmRlZi15ICs9IG5ldGZpbHRlcl9pcHY0LmgKK3VuaWZkZWYteSArPSBuZXRmaWx0ZXJfaXB2Ni5oCit1bmlmZGVmLXkgKz0gbmV0ZmlsdGVyX2xvZ2dpbmcuaAordW5pZmRlZi15ICs9IG5ldC5oCit1bmlmZGVmLXkgKz0gbmV0bGluay5oCit1bmlmZGVmLXkgKz0gbmZzMy5oCit1bmlmZGVmLXkgKz0gbmZzNC5oCit1bmlmZGVmLXkgKz0gbmZzYWNsLmgKK3VuaWZkZWYteSArPSBuZnNfZnMuaAordW5pZmRlZi15ICs9IG5mcy5oCit1bmlmZGVmLXkgKz0gbmZzX2lkbWFwLmgKK3VuaWZkZWYteSArPSBuX3IzOTY0LmgKK3VuaWZkZWYteSArPSBudWJ1cy5oCit1bmlmZGVmLXkgKz0gbnZyYW0uaAordW5pZmRlZi15ICs9IHBhcnBvcnQuaAordW5pZmRlZi15ICs9IHBhdGNoa2V5LmgKK3VuaWZkZWYteSArPSBwY2kuaAordW5pZmRlZi15ICs9IHBrdGNkdmQuaAordW5pZmRlZi15ICs9IHBtdS5oCit1bmlmZGVmLXkgKz0gcG9sbC5oCit1bmlmZGVmLXkgKz0gcHBwX2RlZnMuaAordW5pZmRlZi15ICs9IHBwcC1jb21wLmgKK3VuaWZkZWYteSArPSBwdHJhY2UuaAordW5pZmRlZi15ICs9IHFueDRfZnMuaAordW5pZmRlZi15ICs9IHF1b3RhLmgKK3VuaWZkZWYteSArPSByYW5kb20uaAordW5pZmRlZi15ICs9IHJlYm9vdC5oCit1bmlmZGVmLXkgKz0gcmVpc2VyZnNfZnMuaAordW5pZmRlZi15ICs9IHJlaXNlcmZzX3hhdHRyLmgKK3VuaWZkZWYteSArPSByb21mc19mcy5oCit1bmlmZGVmLXkgKz0gcm91dGUuaAordW5pZmRlZi15ICs9IHJ0Yy5oCit1bmlmZGVmLXkgKz0gcnRuZXRsaW5rLmgKK3VuaWZkZWYteSArPSBzY2MuaAordW5pZmRlZi15ICs9IHNjaGVkLmgKK3VuaWZkZWYteSArPSBzZGxhLmgKK3VuaWZkZWYteSArPSBzZWxpbnV4X25ldGxpbmsuaAordW5pZmRlZi15ICs9IHNlbS5oCit1bmlmZGVmLXkgKz0gc2VyaWFsX2NvcmUuaAordW5pZmRlZi15ICs9IHNlcmlhbC5oCit1bmlmZGVmLXkgKz0gc2VyaW8uaAordW5pZmRlZi15ICs9IHNobS5oCit1bmlmZGVmLXkgKz0gc2lnbmFsLmgKK3VuaWZkZWYteSArPSBzbWJfZnMuaAordW5pZmRlZi15ICs9IHNtYi5oCit1bmlmZGVmLXkgKz0gc21iX21vdW50LmgKK3VuaWZkZWYteSArPSBzb2NrZXQuaAordW5pZmRlZi15ICs9IHNvbmV0LmgKK3VuaWZkZWYteSArPSBzb255cGkuaAordW5pZmRlZi15ICs9IHNvdW5kY2FyZC5oCit1bmlmZGVmLXkgKz0gc3RhdC5oCit1bmlmZGVmLXkgKz0gc3lzY3RsLmgKK3VuaWZkZWYteSArPSB0Y3AuaAordW5pZmRlZi15ICs9IHRpbWUuaAordW5pZmRlZi15ICs9IHRpbWV4LmgKK3VuaWZkZWYteSArPSB0dHkuaAordW5pZmRlZi15ICs9IHR5cGVzLmgKK3VuaWZkZWYteSArPSB1ZGZfZnNfaS5oCit1bmlmZGVmLXkgKz0gdWRwLmgKK3VuaWZkZWYteSArPSB1aW5wdXQuaAordW5pZmRlZi15ICs9IHVpby5oCit1bmlmZGVmLXkgKz0gdW5pc3RkLmgKK3VuaWZkZWYteSArPSB1c2JfY2g5LmgKK3VuaWZkZWYteSArPSB1c2JkZXZpY2VfZnMuaAordW5pZmRlZi15ICs9IHVzZXIuaAordW5pZmRlZi15ICs9IHZpZGVvZGV2Mi5oCit1bmlmZGVmLXkgKz0gdmlkZW9kZXYuaAordW5pZmRlZi15ICs9IHdhaXQuaAordW5pZmRlZi15ICs9IHdhbnJvdXRlci5oCit1bmlmZGVmLXkgKz0gd2F0Y2hkb2cuaAordW5pZmRlZi15ICs9IHhmcm0uaAordW5pZmRlZi15ICs9IHpmdGFwZS5oCiAKLW9iamhkci15IDo9IHZlcnNpb24uaAorb2JqaGRyLXkgKz0gdmVyc2lvbi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oIGIvaW5jbHVkZS9saW51eC9hdG1kZXYuaAppbmRleCA0MTc4OGEzLi4yMDk2ZTVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F0bWRldi5oCisrKyBiL2luY2x1ZGUvbGludXgvYXRtZGV2LmgKQEAgLTcsNyArNyw2IEBACiAjZGVmaW5lIExJTlVYX0FUTURFVl9ICiAKIAotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgpAQCAtMjEwLDYgKzIwOSw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+IC8qIHdhaXRfcXVldWVfaGVhZF90ICovCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPiAvKiBzdHJ1Y3QgdGltZXZhbCAqLwogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IGIyN2Q3ZGUuLjQwYTZjMjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTEzMiw2ICsxMzIsMTAgQEAKICNkZWZpbmUgQVVESVRfQ0xBU1NfRElSX1dSSVRFXzMyIDEKICNkZWZpbmUgQVVESVRfQ0xBU1NfQ0hBVFRSIDIKICNkZWZpbmUgQVVESVRfQ0xBU1NfQ0hBVFRSXzMyIDMKKyNkZWZpbmUgQVVESVRfQ0xBU1NfUkVBRCA0CisjZGVmaW5lIEFVRElUX0NMQVNTX1JFQURfMzIgNQorI2RlZmluZSBBVURJVF9DTEFTU19XUklURSA2CisjZGVmaW5lIEFVRElUX0NMQVNTX1dSSVRFXzMyIDcKIAogLyogVGhpcyBiaXRtYXNrIGlzIHVzZWQgdG8gdmFsaWRhdGUgdXNlciBpbnB1dC4gIEl0IHJlcHJlc2VudHMgYWxsIGJpdHMgdGhhdAogICogYXJlIGN1cnJlbnRseSB1c2VkIGluIGFuIGF1ZGl0IGZpZWxkIGNvbnN0YW50IHVuZGVyc3Rvb2QgYnkgdGhlIGtlcm5lbC4KQEAgLTE3Nyw2ICsxODEsNyBAQAogI2RlZmluZSBBVURJVF9FWElUCTEwMwogI2RlZmluZSBBVURJVF9TVUNDRVNTICAgMTA0CS8qIGV4aXQgPj0gMDsgdmFsdWUgaWdub3JlZCAqLwogI2RlZmluZSBBVURJVF9XQVRDSAkxMDUKKyNkZWZpbmUgQVVESVRfUEVSTQkxMDYKIAogI2RlZmluZSBBVURJVF9BUkcwICAgICAgMjAwCiAjZGVmaW5lIEFVRElUX0FSRzEgICAgICAoQVVESVRfQVJHMCsxKQpAQCAtMjUyLDYgKzI1NywxMSBAQAogI2RlZmluZSBBVURJVF9BUkNIX1Y4NTAJCShFTV9WODUwfF9fQVVESVRfQVJDSF9MRSkKICNkZWZpbmUgQVVESVRfQVJDSF9YODZfNjQJKEVNX1g4Nl82NHxfX0FVRElUX0FSQ0hfNjRCSVR8X19BVURJVF9BUkNIX0xFKQogCisjZGVmaW5lIEFVRElUX1BFUk1fRVhFQwkJMQorI2RlZmluZSBBVURJVF9QRVJNX1dSSVRFCTIKKyNkZWZpbmUgQVVESVRfUEVSTV9SRUFECQk0CisjZGVmaW5lIEFVRElUX1BFUk1fQVRUUgkJOAorCiBzdHJ1Y3QgYXVkaXRfc3RhdHVzIHsKIAlfX3UzMgkJbWFzazsJCS8qIEJpdCBtYXNrIGZvciB2YWxpZCBlbnRyaWVzICovCiAJX191MzIJCWVuYWJsZWQ7CS8qIDEgPSBlbmFibGVkLCAwID0gZGlzYWJsZWQgKi8KQEAgLTMxNCw2ICszMjQsNyBAQAogI2RlZmluZSBBVURJVFNDX0ZBSUxVUkUgMgogI2RlZmluZSBBVURJVFNDX1JFU1VMVCh4KSAoICgobG9uZykoeCkpPDA/QVVESVRTQ19GQUlMVVJFOkFVRElUU0NfU1VDQ0VTUyApCiBleHRlcm4gaW50IF9faW5pdCBhdWRpdF9yZWdpc3Rlcl9jbGFzcyhpbnQgY2xhc3MsIHVuc2lnbmVkICpsaXN0KTsKK2V4dGVybiBpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKTsKICNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCiAvKiBUaGVzZSBhcmUgZGVmaW5lZCBpbiBhdWRpdHNjLmMgKi8KIAkJCQkvKiBQdWJsaWMgQVBJICovCkBAIC0zMjcsMjEgKzMzOCwzMSBAQAogZXh0ZXJuIHZvaWQgYXVkaXRfcHV0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIF9fYXVkaXRfaW5vZGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCXVuc2lnbmVkIGxvbmcgcGlubyk7CisJCQkJY29uc3Qgc3RydWN0IGlub2RlICpwYXJlbnQpOworZXh0ZXJuIHZvaWQgX19hdWRpdF9pbm9kZV91cGRhdGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CitzdGF0aWMgaW5saW5lIGludCBhdWRpdF9kdW1teV9jb250ZXh0KHZvaWQpCit7CisJdm9pZCAqcCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisJcmV0dXJuICFwIHx8ICooaW50ICopcDsKK30KIHN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9nZXRuYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKIAkJX19hdWRpdF9nZXRuYW1lKG5hbWUpOwogfQogc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpIHsKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQogCQlfX2F1ZGl0X2lub2RlKG5hbWUsIGlub2RlKTsKIH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9pbm9kZV9jaGlsZChjb25zdCBjaGFyICpkbmFtZSwgCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCAKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGlubykgewotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKLQkJX19hdWRpdF9pbm9kZV9jaGlsZChkbmFtZSwgaW5vZGUsIHBpbm8pOworCQkJCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBpbm9kZSAqcGFyZW50KSB7CisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQorCQlfX2F1ZGl0X2lub2RlX2NoaWxkKGRuYW1lLCBpbm9kZSwgcGFyZW50KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9pbm9kZV91cGRhdGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkgeworCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKKwkJX19hdWRpdF9pbm9kZV91cGRhdGUoaW5vZGUpOwogfQogCiAJCQkJLyogUHJpdmF0ZSBBUEkgKGZvciBhdWRpdC5jIG9ubHkpICovCkBAIC0zNjUsNTcgKzM4Niw2MSBAQAogCiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9pcGNfb2JqKHN0cnVjdCBrZXJuX2lwY19wZXJtICppcGNwKQogewotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpCiAJCXJldHVybiBfX2F1ZGl0X2lwY19vYmooaXBjcCk7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9pcGNfc2V0X3Blcm0odW5zaWduZWQgbG9uZyBxYnl0ZXMsIHVpZF90IHVpZCwgZ2lkX3QgZ2lkLCBtb2RlX3QgbW9kZSkKIHsKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQogCQlyZXR1cm4gX19hdWRpdF9pcGNfc2V0X3Blcm0ocWJ5dGVzLCB1aWQsIGdpZCwgbW9kZSk7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV9vcGVuKGludCBvZmxhZywgbW9kZV90IG1vZGUsIHN0cnVjdCBtcV9hdHRyIF9fdXNlciAqdV9hdHRyKQogewotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpCiAJCXJldHVybiBfX2F1ZGl0X21xX29wZW4ob2ZsYWcsIG1vZGUsIHVfYXR0cik7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV90aW1lZHNlbmQobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgbXNnX3ByaW8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnVfYWJzX3RpbWVvdXQpCiB7Ci0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQpKQorCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKIAkJcmV0dXJuIF9fYXVkaXRfbXFfdGltZWRzZW5kKG1xZGVzLCBtc2dfbGVuLCBtc2dfcHJpbywgdV9hYnNfdGltZW91dCk7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV90aW1lZHJlY2VpdmUobXFkX3QgbXFkZXMsIHNpemVfdCBtc2dfbGVuLCB1bnNpZ25lZCBpbnQgX191c2VyICp1X21zZ19wcmlvLCBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICp1X2Fic190aW1lb3V0KQogewotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpCiAJCXJldHVybiBfX2F1ZGl0X21xX3RpbWVkcmVjZWl2ZShtcWRlcywgbXNnX2xlbiwgdV9tc2dfcHJpbywgdV9hYnNfdGltZW91dCk7CiAJcmV0dXJuIDA7CiB9CiBzdGF0aWMgaW5saW5lIGludCBhdWRpdF9tcV9ub3RpZnkobXFkX3QgbXFkZXMsIGNvbnN0IHN0cnVjdCBzaWdldmVudCBfX3VzZXIgKnVfbm90aWZpY2F0aW9uKQogewotCWlmICh1bmxpa2VseShjdXJyZW50LT5hdWRpdF9jb250ZXh0KSkKKwlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpCiAJCXJldHVybiBfX2F1ZGl0X21xX25vdGlmeShtcWRlcywgdV9ub3RpZmljYXRpb24pOwogCXJldHVybiAwOwogfQogc3RhdGljIGlubGluZSBpbnQgYXVkaXRfbXFfZ2V0c2V0YXR0cihtcWRfdCBtcWRlcywgc3RydWN0IG1xX2F0dHIgKm1xc3RhdCkKIHsKLQlpZiAodW5saWtlbHkoY3VycmVudC0+YXVkaXRfY29udGV4dCkpCisJaWYgKHVubGlrZWx5KCFhdWRpdF9kdW1teV9jb250ZXh0KCkpKQogCQlyZXR1cm4gX19hdWRpdF9tcV9nZXRzZXRhdHRyKG1xZGVzLCBtcXN0YXQpOwogCXJldHVybiAwOwogfQorZXh0ZXJuIGludCBhdWRpdF9uX3J1bGVzOwogI2Vsc2UKICNkZWZpbmUgYXVkaXRfYWxsb2ModCkgKHsgMDsgfSkKICNkZWZpbmUgYXVkaXRfZnJlZSh0KSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfc3lzY2FsbF9lbnRyeSh0YSxhLGIsYyxkLGUpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9zeXNjYWxsX2V4aXQoZixyKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfZHVtbXlfY29udGV4dCgpIDEKICNkZWZpbmUgYXVkaXRfZ2V0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfcHV0bmFtZShuKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgX19hdWRpdF9pbm9kZShuLGkpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBfX2F1ZGl0X2lub2RlX2NoaWxkKGQsaSxwKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19hdWRpdF9pbm9kZV91cGRhdGUoaSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2lub2RlKG4saSkgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X2lub2RlX2NoaWxkKGQsaSxwKSBkbyB7IDsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgYXVkaXRfaW5vZGVfdXBkYXRlKGkpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdHNjX2dldF9zdGFtcChjLHQscykgZG8geyBCVUcoKTsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfZ2V0X2xvZ2ludWlkKGMpICh7IC0xOyB9KQogI2RlZmluZSBhdWRpdF9pcGNfb2JqKGkpICh7IDA7IH0pCkBAIC00MzAsNiArNDU1LDcgQEAKICNkZWZpbmUgYXVkaXRfbXFfdGltZWRyZWNlaXZlKGQsbCxwLHQpICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X21xX25vdGlmeShkLG4pICh7IDA7IH0pCiAjZGVmaW5lIGF1ZGl0X21xX2dldHNldGF0dHIoZCxzKSAoeyAwOyB9KQorI2RlZmluZSBhdWRpdF9uX3J1bGVzIDAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FVRElUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L2J5dGVvcmRlci9LYnVpbGQKaW5kZXggODRhNTdkNC4uNTY0OTlhYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL0tidWlsZApAQCAtMSwyICsxLDcgQEAKLXVuaWZkZWYteSArPSBnZW5lcmljLmggc3dhYmIuaCBzd2FiLmgKLWhlYWRlci15ICs9IGJpZ19lbmRpYW4uaCBsaXR0bGVfZW5kaWFuLmggcGRwX2VuZGlhbi5oCitoZWFkZXIteSArPSBiaWdfZW5kaWFuLmgKK2hlYWRlci15ICs9IGxpdHRsZV9lbmRpYW4uaAoraGVhZGVyLXkgKz0gcGRwX2VuZGlhbi5oCisKK3VuaWZkZWYteSArPSBnZW5lcmljLmgKK3VuaWZkZWYteSArPSBzd2FiYi5oCit1bmlmZGVmLXkgKz0gc3dhYi5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NuX3Byb2MuaCBiL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCmluZGV4IGRiYjc3NjkuLjFjODZkNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCisrKyBiL2luY2x1ZGUvbGludXgvY25fcHJvYy5oCkBAIC01Nyw3ICs1Nyw4IEBACiAJCVBST0NfRVZFTlRfRVhJVCA9IDB4ODAwMDAwMDAKIAl9IHdoYXQ7CiAJX191MzIgY3B1OwotCXN0cnVjdCB0aW1lc3BlYyB0aW1lc3RhbXA7CisJX191NjQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpIHRpbWVzdGFtcF9uczsKKwkJLyogTnVtYmVyIG9mIG5hbm8gc2Vjb25kcyBzaW5jZSBzeXN0ZW0gYm9vdCAqLwogCXVuaW9uIHsgLyogbXVzdCBiZSBsYXN0IGZpZWxkIG9mIHByb2NfZXZlbnQgc3RydWN0ICovCiAJCXN0cnVjdCB7CiAJCQlfX3UzMiBlcnI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaAppbmRleCAyNjlkMDAwLi5iZWEwMjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKQEAgLTIxNiw2ICsyMTYsNyBAQAogQ09NUEFUSUJMRV9JT0NUTChWVF9SRVNJWkVYKQogQ09NUEFUSUJMRV9JT0NUTChWVF9MT0NLU1dJVENIKQogQ09NUEFUSUJMRV9JT0NUTChWVF9VTkxPQ0tTV0lUQ0gpCitDT01QQVRJQkxFX0lPQ1RMKFZUX0dFVEhJRk9OVE1BU0spCiAvKiBMaXR0bGUgcCAoL2Rldi9ydGMsIC9kZXYvZW52Y3RybCwgZXRjLikgKi8KIENPTVBBVElCTEVfSU9DVEwoUlRDX0FJRV9PTikKIENPTVBBVElCTEVfSU9DVEwoUlRDX0FJRV9PRkYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oIGIvaW5jbHVkZS9saW51eC9jcnlwdG8uaAppbmRleCA3Zjk0NjI0Li44ZjJmZmE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NyeXB0by5oCisrKyBiL2luY2x1ZGUvbGludXgvY3J5cHRvLmgKQEAgLTE3LDIwICsxNywzNiBAQAogI2lmbmRlZiBfTElOVVhfQ1JZUFRPX0gKICNkZWZpbmUgX0xJTlVYX0NSWVBUT19ICiAKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAvKgogICogQWxnb3JpdGhtIG1hc2tzIGFuZCB0eXBlcy4KICAqLwotI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfTUFTSwkJMHgwMDAwMDBmZgorI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfTUFTSwkJMHgwMDAwMDAwZgogI2RlZmluZSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSCQkweDAwMDAwMDAxCiAjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9ESUdFU1QJCTB4MDAwMDAwMDIKLSNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTCTB4MDAwMDAwMDQKKyNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0hBU0gJCTB4MDAwMDAwMDMKKyNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUgkweDAwMDAwMDA0CisjZGVmaW5lIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUwkweDAwMDAwMDA1CisKKyNkZWZpbmUgQ1JZUFRPX0FMR19UWVBFX0hBU0hfTUFTSwkweDAwMDAwMDBlCisKKyNkZWZpbmUgQ1JZUFRPX0FMR19MQVJWQUwJCTB4MDAwMDAwMTAKKyNkZWZpbmUgQ1JZUFRPX0FMR19ERUFECQkJMHgwMDAwMDAyMAorI2RlZmluZSBDUllQVE9fQUxHX0RZSU5HCQkweDAwMDAwMDQwCisjZGVmaW5lIENSWVBUT19BTEdfQVNZTkMJCTB4MDAwMDAwODAKKworLyoKKyAqIFNldCB0aGlzIGJpdCBpZiBhbmQgb25seSBpZiB0aGUgYWxnb3JpdGhtIHJlcXVpcmVzIGFub3RoZXIgYWxnb3JpdGhtIG9mCisgKiB0aGUgc2FtZSB0eXBlIHRvIGhhbmRsZSBjb3JuZXIgY2FzZXMuCisgKi8KKyNkZWZpbmUgQ1JZUFRPX0FMR19ORUVEX0ZBTExCQUNLCTB4MDAwMDAxMDAKIAogLyoKICAqIFRyYW5zZm9ybSBtYXNrcyBhbmQgdmFsdWVzIChmb3IgY3J0X2ZsYWdzKS4KQEAgLTYxLDggKzc3LDM3IEBACiAjZGVmaW5lIENSWVBUT19ESVJfRU5DUllQVAkJMQogI2RlZmluZSBDUllQVE9fRElSX0RFQ1JZUFQJCTAKIAorLyoKKyAqIFRoZSBtYWNybyBDUllQVE9fTUlOQUxJR05fQVRUUiAoYWxvbmcgd2l0aCB0aGUgdm9pZCAqIHR5cGUgaW4gdGhlIGFjdHVhbAorICogZGVjbGFyYXRpb24pIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlIGNyeXB0b190Zm0gY29udGV4dCBzdHJ1Y3R1cmUgaXMKKyAqIGFsaWduZWQgY29ycmVjdGx5IGZvciB0aGUgZ2l2ZW4gYXJjaGl0ZWN0dXJlIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFsaWdubWVudAorICogZmF1bHRzIGZvciBDIGRhdGEgdHlwZXMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGlzIHJlcXVpcmVkIG9uIHBsYXRmb3JtcyBzdWNoCisgKiBhcyBhcm0gd2hlcmUgcG9pbnRlcnMgYXJlIDMyLWJpdCBhbGlnbmVkIGJ1dCB0aGVyZSBhcmUgZGF0YSB0eXBlcyBzdWNoIGFzCisgKiB1NjQgd2hpY2ggcmVxdWlyZSA2NC1iaXQgYWxpZ25tZW50LgorICovCisjaWYgZGVmaW5lZChBUkNIX0tNQUxMT0NfTUlOQUxJR04pCisjZGVmaW5lIENSWVBUT19NSU5BTElHTiBBUkNIX0tNQUxMT0NfTUlOQUxJR04KKyNlbGlmIGRlZmluZWQoQVJDSF9TTEFCX01JTkFMSUdOKQorI2RlZmluZSBDUllQVE9fTUlOQUxJR04gQVJDSF9TTEFCX01JTkFMSUdOCisjZW5kaWYKKworI2lmZGVmIENSWVBUT19NSU5BTElHTgorI2RlZmluZSBDUllQVE9fTUlOQUxJR05fQVRUUiBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oQ1JZUFRPX01JTkFMSUdOKSkpCisjZWxzZQorI2RlZmluZSBDUllQVE9fTUlOQUxJR05fQVRUUgorI2VuZGlmCisKIHN0cnVjdCBzY2F0dGVybGlzdDsKK3N0cnVjdCBjcnlwdG9fYmxrY2lwaGVyOworc3RydWN0IGNyeXB0b19oYXNoOwogc3RydWN0IGNyeXB0b190Zm07CitzdHJ1Y3QgY3J5cHRvX3R5cGU7CisKK3N0cnVjdCBibGtjaXBoZXJfZGVzYyB7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKKwl2b2lkICppbmZvOworCXUzMiBmbGFnczsKK307CiAKIHN0cnVjdCBjaXBoZXJfZGVzYyB7CiAJc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKQEAgLTcyLDMwICsxMTcsNTAgQEAKIAl2b2lkICppbmZvOwogfTsKIAorc3RydWN0IGhhc2hfZGVzYyB7CisJc3RydWN0IGNyeXB0b19oYXNoICp0Zm07CisJdTMyIGZsYWdzOworfTsKKwogLyoKICAqIEFsZ29yaXRobXM6IG1vZHVsYXIgY3J5cHRvIGFsZ29yaXRobSBpbXBsZW1lbnRhdGlvbnMsIG1hbmFnZWQKICAqIHZpYSBjcnlwdG9fcmVnaXN0ZXJfYWxnKCkgYW5kIGNyeXB0b191bnJlZ2lzdGVyX2FsZygpLgogICovCitzdHJ1Y3QgYmxrY2lwaGVyX2FsZyB7CisJaW50ICgqc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAorCSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CisJaW50ICgqZW5jcnlwdCkoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcyk7CisJaW50ICgqZGVjcnlwdCkoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcyk7CisKKwl1bnNpZ25lZCBpbnQgbWluX2tleXNpemU7CisJdW5zaWduZWQgaW50IG1heF9rZXlzaXplOworCXVuc2lnbmVkIGludCBpdnNpemU7Cit9OworCiBzdHJ1Y3QgY2lwaGVyX2FsZyB7CiAJdW5zaWduZWQgaW50IGNpYV9taW5fa2V5c2l6ZTsKIAl1bnNpZ25lZCBpbnQgY2lhX21heF9rZXlzaXplOwogCWludCAoKmNpYV9zZXRrZXkpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIGNvbnN0IHU4ICprZXksCi0JICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbiwgdTMyICpmbGFncyk7CisJICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CiAJdm9pZCAoKmNpYV9lbmNyeXB0KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKTsKIAl2b2lkICgqY2lhX2RlY3J5cHQpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOwogCiAJdW5zaWduZWQgaW50ICgqY2lhX2VuY3J5cHRfZWNiKShjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCi0JCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpOworCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKSBfX2RlcHJlY2F0ZWQ7CiAJdW5zaWduZWQgaW50ICgqY2lhX2RlY3J5cHRfZWNiKShjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCi0JCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpOworCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKSBfX2RlcHJlY2F0ZWQ7CiAJdW5zaWduZWQgaW50ICgqY2lhX2VuY3J5cHRfY2JjKShjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCi0JCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpOworCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKSBfX2RlcHJlY2F0ZWQ7CiAJdW5zaWduZWQgaW50ICgqY2lhX2RlY3J5cHRfY2JjKShjb25zdCBzdHJ1Y3QgY2lwaGVyX2Rlc2MgKmRlc2MsCiAJCQkJCXU4ICpkc3QsIGNvbnN0IHU4ICpzcmMsCi0JCQkJCXVuc2lnbmVkIGludCBuYnl0ZXMpOworCQkJCQl1bnNpZ25lZCBpbnQgbmJ5dGVzKSBfX2RlcHJlY2F0ZWQ7CiB9OwogCiBzdHJ1Y3QgZGlnZXN0X2FsZyB7CkBAIC0xMDUsNyArMTcwLDIwIEBACiAJCQkgICB1bnNpZ25lZCBpbnQgbGVuKTsKIAl2b2lkICgqZGlhX2ZpbmFsKShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqb3V0KTsKIAlpbnQgKCpkaWFfc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBjb25zdCB1OCAqa2V5LAotCSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4sIHUzMiAqZmxhZ3MpOworCSAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pOworfTsKKworc3RydWN0IGhhc2hfYWxnIHsKKwlpbnQgKCppbml0KShzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjKTsKKwlpbnQgKCp1cGRhdGUpKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpOworCWludCAoKmZpbmFsKShzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KTsKKwlpbnQgKCpkaWdlc3QpKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICpvdXQpOworCWludCAoKnNldGtleSkoc3RydWN0IGNyeXB0b19oYXNoICp0Zm0sIGNvbnN0IHU4ICprZXksCisJCSAgICAgIHVuc2lnbmVkIGludCBrZXlsZW4pOworCisJdW5zaWduZWQgaW50IGRpZ2VzdHNpemU7CiB9OwogCiBzdHJ1Y3QgY29tcHJlc3NfYWxnIHsKQEAgLTExNSwzMCArMTkzLDQwIEBACiAJCQkgICAgICB1bnNpZ25lZCBpbnQgc2xlbiwgdTggKmRzdCwgdW5zaWduZWQgaW50ICpkbGVuKTsKIH07CiAKKyNkZWZpbmUgY3JhX2Jsa2NpcGhlcgljcmFfdS5ibGtjaXBoZXIKICNkZWZpbmUgY3JhX2NpcGhlcgljcmFfdS5jaXBoZXIKICNkZWZpbmUgY3JhX2RpZ2VzdAljcmFfdS5kaWdlc3QKKyNkZWZpbmUgY3JhX2hhc2gJY3JhX3UuaGFzaAogI2RlZmluZSBjcmFfY29tcHJlc3MJY3JhX3UuY29tcHJlc3MKIAogc3RydWN0IGNyeXB0b19hbGcgewogCXN0cnVjdCBsaXN0X2hlYWQgY3JhX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBjcmFfdXNlcnM7CisKIAl1MzIgY3JhX2ZsYWdzOwogCXVuc2lnbmVkIGludCBjcmFfYmxvY2tzaXplOwogCXVuc2lnbmVkIGludCBjcmFfY3R4c2l6ZTsKIAl1bnNpZ25lZCBpbnQgY3JhX2FsaWdubWFzazsKIAogCWludCBjcmFfcHJpb3JpdHk7CisJYXRvbWljX3QgY3JhX3JlZmNudDsKIAogCWNoYXIgY3JhX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CiAJY2hhciBjcmFfZHJpdmVyX25hbWVbQ1JZUFRPX01BWF9BTEdfTkFNRV07CiAKKwljb25zdCBzdHJ1Y3QgY3J5cHRvX3R5cGUgKmNyYV90eXBlOworCiAJdW5pb24geworCQlzdHJ1Y3QgYmxrY2lwaGVyX2FsZyBibGtjaXBoZXI7CiAJCXN0cnVjdCBjaXBoZXJfYWxnIGNpcGhlcjsKIAkJc3RydWN0IGRpZ2VzdF9hbGcgZGlnZXN0OworCQlzdHJ1Y3QgaGFzaF9hbGcgaGFzaDsKIAkJc3RydWN0IGNvbXByZXNzX2FsZyBjb21wcmVzczsKIAl9IGNyYV91OwogCiAJaW50ICgqY3JhX2luaXQpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pOwogCXZvaWQgKCpjcmFfZXhpdCkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7CisJdm9pZCAoKmNyYV9kZXN0cm95KShzdHJ1Y3QgY3J5cHRvX2FsZyAqYWxnKTsKIAkKIAlzdHJ1Y3QgbW9kdWxlICpjcmFfbW9kdWxlOwogfTsKQEAgLTE1MywyMCArMjQxLDM5IEBACiAgKiBBbGdvcml0aG0gcXVlcnkgaW50ZXJmYWNlLgogICovCiAjaWZkZWYgQ09ORklHX0NSWVBUTwotaW50IGNyeXB0b19hbGdfYXZhaWxhYmxlKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiBmbGFncyk7CitpbnQgY3J5cHRvX2FsZ19hdmFpbGFibGUoY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKQorCV9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlczsKK2ludCBjcnlwdG9faGFzX2FsZyhjb25zdCBjaGFyICpuYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spOwogI2Vsc2UKK3N0YXRpYyBpbnQgY3J5cHRvX2FsZ19hdmFpbGFibGUoY29uc3QgY2hhciAqbmFtZSwgdTMyIGZsYWdzKTsKKwlfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXM7CiBzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYWxnX2F2YWlsYWJsZShjb25zdCBjaGFyICpuYW1lLCB1MzIgZmxhZ3MpCiB7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19oYXNfYWxnKGNvbnN0IGNoYXIgKm5hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwlyZXR1cm4gMDsKK30KICNlbmRpZgogCiAvKgogICogVHJhbnNmb3JtczogdXNlci1pbnN0YW50aWF0ZWQgb2JqZWN0cyB3aGljaCBlbmNhcHN1bGF0ZSBhbGdvcml0aG1zCi0gKiBhbmQgY29yZSBwcm9jZXNzaW5nIGxvZ2ljLiAgTWFuYWdlZCB2aWEgY3J5cHRvX2FsbG9jX3RmbSgpIGFuZAotICogY3J5cHRvX2ZyZWVfdGZtKCksIGFzIHdlbGwgYXMgdGhlIHZhcmlvdXMgaGVscGVycyBiZWxvdy4KKyAqIGFuZCBjb3JlIHByb2Nlc3NpbmcgbG9naWMuICBNYW5hZ2VkIHZpYSBjcnlwdG9fYWxsb2NfKigpIGFuZAorICogY3J5cHRvX2ZyZWVfKigpLCBhcyB3ZWxsIGFzIHRoZSB2YXJpb3VzIGhlbHBlcnMgYmVsb3cuCiAgKi8KIAorc3RydWN0IGJsa2NpcGhlcl90Zm0geworCXZvaWQgKml2OworCWludCAoKnNldGtleSkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKKwkJICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CisJaW50ICgqZW5jcnlwdCkoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLCB1bnNpZ25lZCBpbnQgbmJ5dGVzKTsKKwlpbnQgKCpkZWNyeXB0KShzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgKmRlc2MsIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAorCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsIHVuc2lnbmVkIGludCBuYnl0ZXMpOworfTsKKwogc3RydWN0IGNpcGhlcl90Zm0gewogCXZvaWQgKmNpdF9pdjsKIAl1bnNpZ25lZCBpbnQgY2l0X2l2c2l6ZTsKQEAgLTE5MCwyMCArMjk3LDIwIEBACiAJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKIAkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICppdik7CiAJdm9pZCAoKmNpdF94b3JfYmxvY2spKHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworCXZvaWQgKCpjaXRfZW5jcnlwdF9vbmUpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOworCXZvaWQgKCpjaXRfZGVjcnlwdF9vbmUpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpOwogfTsKIAotc3RydWN0IGRpZ2VzdF90Zm0gewotCXZvaWQgKCpkaXRfaW5pdCkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSk7Ci0Jdm9pZCAoKmRpdF91cGRhdGUpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0JICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2cpOwotCXZvaWQgKCpkaXRfZmluYWwpKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICpvdXQpOwotCXZvaWQgKCpkaXRfZGlnZXN0KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnNnLCB1OCAqb3V0KTsKLQlpbnQgKCpkaXRfc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAotCSAgICAgICAgICAgICAgICAgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pOwotI2lmZGVmIENPTkZJR19DUllQVE9fSE1BQwotCXZvaWQgKmRpdF9obWFjX2Jsb2NrOwotI2VuZGlmCitzdHJ1Y3QgaGFzaF90Zm0geworCWludCAoKmluaXQpKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MpOworCWludCAoKnVwZGF0ZSkoc3RydWN0IGhhc2hfZGVzYyAqZGVzYywKKwkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5zZyk7CisJaW50ICgqZmluYWwpKHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsIHU4ICpvdXQpOworCWludCAoKmRpZ2VzdCkoc3RydWN0IGhhc2hfZGVzYyAqZGVzYywgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgICAgdW5zaWduZWQgaW50IG5zZywgdTggKm91dCk7CisJaW50ICgqc2V0a2V5KShzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSwgY29uc3QgdTggKmtleSwKKwkJICAgICAgdW5zaWduZWQgaW50IGtleWxlbik7CisJdW5zaWduZWQgaW50IGRpZ2VzdHNpemU7CiB9OwogCiBzdHJ1Y3QgY29tcHJlc3NfdGZtIHsKQEAgLTIxNSw4ICszMjIsOSBAQAogCSAgICAgICAgICAgICAgICAgICAgICB1OCAqZHN0LCB1bnNpZ25lZCBpbnQgKmRsZW4pOwogfTsKIAorI2RlZmluZSBjcnRfYmxrY2lwaGVyCWNydF91LmJsa2NpcGhlcgogI2RlZmluZSBjcnRfY2lwaGVyCWNydF91LmNpcGhlcgotI2RlZmluZSBjcnRfZGlnZXN0CWNydF91LmRpZ2VzdAorI2RlZmluZSBjcnRfaGFzaAljcnRfdS5oYXNoCiAjZGVmaW5lIGNydF9jb21wcmVzcwljcnRfdS5jb21wcmVzcwogCiBzdHJ1Y3QgY3J5cHRvX3RmbSB7CkBAIC0yMjQsMzAgKzMzMiw0MyBAQAogCXUzMiBjcnRfZmxhZ3M7CiAJCiAJdW5pb24geworCQlzdHJ1Y3QgYmxrY2lwaGVyX3RmbSBibGtjaXBoZXI7CiAJCXN0cnVjdCBjaXBoZXJfdGZtIGNpcGhlcjsKLQkJc3RydWN0IGRpZ2VzdF90Zm0gZGlnZXN0OworCQlzdHJ1Y3QgaGFzaF90Zm0gaGFzaDsKIAkJc3RydWN0IGNvbXByZXNzX3RmbSBjb21wcmVzczsKIAl9IGNydF91OwogCQogCXN0cnVjdCBjcnlwdG9fYWxnICpfX2NydF9hbGc7CiAKLQljaGFyIF9fY3J0X2N0eFtdIF9fYXR0cmlidXRlX18gKChfX2FsaWduZWRfXykpOworCXZvaWQgKl9fY3J0X2N0eFtdIENSWVBUT19NSU5BTElHTl9BVFRSOworfTsKKworI2RlZmluZSBjcnlwdG9fY2lwaGVyIGNyeXB0b190Zm0KKyNkZWZpbmUgY3J5cHRvX2NvbXAgY3J5cHRvX3RmbQorCitzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciB7CisJc3RydWN0IGNyeXB0b190Zm0gYmFzZTsKK307CisKK3N0cnVjdCBjcnlwdG9faGFzaCB7CisJc3RydWN0IGNyeXB0b190Zm0gYmFzZTsKK307CisKK2VudW0geworCUNSWVBUT0FfVU5TUEVDLAorCUNSWVBUT0FfQUxHLAorfTsKKworc3RydWN0IGNyeXB0b19hdHRyX2FsZyB7CisJY2hhciBuYW1lW0NSWVBUT19NQVhfQUxHX05BTUVdOwogfTsKIAogLyogCiAgKiBUcmFuc2Zvcm0gdXNlciBpbnRlcmZhY2UuCiAgKi8KICAKLS8qCi0gKiBjcnlwdG9fYWxsb2NfdGZtKCkgd2lsbCBmaXJzdCBhdHRlbXB0IHRvIGxvY2F0ZSBhbiBhbHJlYWR5IGxvYWRlZCBhbGdvcml0aG0uCi0gKiBJZiB0aGF0IGZhaWxzIGFuZCB0aGUga2VybmVsIHN1cHBvcnRzIGR5bmFtaWNhbGx5IGxvYWRhYmxlIG1vZHVsZXMsIGl0Ci0gKiB3aWxsIHRoZW4gYXR0ZW1wdCB0byBsb2FkIGEgbW9kdWxlIG9mIHRoZSBzYW1lIG5hbWUgb3IgYWxpYXMuICBBIHJlZmNvdW50Ci0gKiBpcyBncmFiYmVkIG9uIHRoZSBhbGdvcml0aG0gd2hpY2ggaXMgdGhlbiBhc3NvY2lhdGVkIHdpdGggdGhlIG5ldyB0cmFuc2Zvcm0uCi0gKgotICogY3J5cHRvX2ZyZWVfdGZtKCkgZnJlZXMgdXAgdGhlIHRyYW5zZm9ybSBhbmQgYW55IGFzc29jaWF0ZWQgcmVzb3VyY2VzLAotICogdGhlbiBkcm9wcyB0aGUgcmVmY291bnQgb24gdGhlIGFzc29jaWF0ZWQgYWxnb3JpdGhtLgotICovCiBzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX3RmbShjb25zdCBjaGFyICphbGdfbmFtZSwgdTMyIHRmbV9mbGFncyk7CitzdHJ1Y3QgY3J5cHRvX3RmbSAqY3J5cHRvX2FsbG9jX2Jhc2UoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLCB1MzIgbWFzayk7CiB2b2lkIGNyeXB0b19mcmVlX3RmbShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKTsKIAogLyoKQEAgLTI1OCw2ICszNzksMTYgQEAKIAlyZXR1cm4gdGZtLT5fX2NydF9hbGctPmNyYV9uYW1lOwogfQogCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNyeXB0b190Zm1fYWxnX2RyaXZlcl9uYW1lKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIHRmbS0+X19jcnRfYWxnLT5jcmFfZHJpdmVyX25hbWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b190Zm1fYWxnX3ByaW9yaXR5KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIHRmbS0+X19jcnRfYWxnLT5jcmFfcHJpb3JpdHk7Cit9CisKIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqY3J5cHRvX3RmbV9hbGdfbW9kbmFtZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCXJldHVybiBtb2R1bGVfbmFtZSh0Zm0tPl9fY3J0X2FsZy0+Y3JhX21vZHVsZSk7CkBAIC0yNjgsMTggKzM5OSwyMyBAQAogCXJldHVybiB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2ZsYWdzICYgQ1JZUFRPX0FMR19UWVBFX01BU0s7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY3J5cHRvX3RmbV9hbGdfbWluX2tleXNpemUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKKwlfX2RlcHJlY2F0ZWQ7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fdGZtX2FsZ19taW5fa2V5c2l6ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQogewogCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7CiAJcmV0dXJuIHRmbS0+X19jcnRfYWxnLT5jcmFfY2lwaGVyLmNpYV9taW5fa2V5c2l6ZTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludCBjcnlwdG9fdGZtX2FsZ19tYXhfa2V5c2l6ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKQorCV9fZGVwcmVjYXRlZDsKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b190Zm1fYWxnX21heF9rZXlzaXplKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7CiAJQlVHX09OKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSAhPSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSKTsKIAlyZXR1cm4gdGZtLT5fX2NydF9hbGctPmNyYV9jaXBoZXIuY2lhX21heF9rZXlzaXplOwogfQogCitzdGF0aWMgdW5zaWduZWQgaW50IGNyeXB0b190Zm1fYWxnX2l2c2l6ZShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtKSBfX2RlcHJlY2F0ZWQ7CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fdGZtX2FsZ19pdnNpemUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIpOwpAQCAtMzAyLDYgKzQzOCwyMSBAQAogCXJldHVybiB0Zm0tPl9fY3J0X2FsZy0+Y3JhX2FsaWdubWFzazsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgY3J5cHRvX3RmbV9nZXRfZmxhZ3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gdGZtLT5jcnRfZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fdGZtX3NldF9mbGFncyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1MzIgZmxhZ3MpCit7CisJdGZtLT5jcnRfZmxhZ3MgfD0gZmxhZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fdGZtX2NsZWFyX2ZsYWdzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHUzMiBmbGFncykKK3sKKwl0Zm0tPmNydF9mbGFncyAmPSB+ZmxhZ3M7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCAqY3J5cHRvX3RmbV9jdHgoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKIAlyZXR1cm4gdGZtLT5fX2NydF9jdHg7CkBAIC0zMTYsNTAgKzQ2NywzNzQgQEAKIC8qCiAgKiBBUEkgd3JhcHBlcnMuCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZGlnZXN0X2luaXQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKl9fY3J5cHRvX2Jsa2NpcGhlcl9jYXN0KAorCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCiB7Ci0JQlVHX09OKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSAhPSBDUllQVE9fQUxHX1RZUEVfRElHRVNUKTsKLQl0Zm0tPmNydF9kaWdlc3QuZGl0X2luaXQodGZtKTsKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICopdGZtOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2RpZ2VzdF91cGRhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBuc2cpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICpjcnlwdG9fYmxrY2lwaGVyX2Nhc3QoCisJc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKIHsKLQlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpOwotCXRmbS0+Y3J0X2RpZ2VzdC5kaXRfdXBkYXRlKHRmbSwgc2csIG5zZyk7CisJQlVHX09OKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSAhPSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSKTsKKwlyZXR1cm4gX19jcnlwdG9fYmxrY2lwaGVyX2Nhc3QodGZtKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19kaWdlc3RfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmNyeXB0b19hbGxvY19ibGtjaXBoZXIoCisJY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykKIHsKLQlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpOwotCXRmbS0+Y3J0X2RpZ2VzdC5kaXRfZmluYWwodGZtLCBvdXQpOworCXR5cGUgJj0gfkNSWVBUT19BTEdfVFlQRV9NQVNLOworCXR5cGUgfD0gQ1JZUFRPX0FMR19UWVBFX0JMS0NJUEhFUjsKKwltYXNrIHw9IENSWVBUT19BTEdfVFlQRV9NQVNLOworCisJcmV0dXJuIF9fY3J5cHRvX2Jsa2NpcGhlcl9jYXN0KGNyeXB0b19hbGxvY19iYXNlKGFsZ19uYW1lLCB0eXBlLCBtYXNrKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZGlnZXN0X2RpZ2VzdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5zZywgdTggKm91dCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19ibGtjaXBoZXJfdGZtKAorCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0pCiB7Ci0JQlVHX09OKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSAhPSBDUllQVE9fQUxHX1RZUEVfRElHRVNUKTsKLQl0Zm0tPmNydF9kaWdlc3QuZGl0X2RpZ2VzdCh0Zm0sIHNnLCBuc2csIG91dCk7CisJcmV0dXJuICZ0Zm0tPmJhc2U7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZnJlZV9ibGtjaXBoZXIoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSkKK3sKKwljcnlwdG9fZnJlZV90Zm0oY3J5cHRvX2Jsa2NpcGhlcl90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19oYXNfYmxrY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJdHlwZSAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7CisJdHlwZSB8PSBDUllQVE9fQUxHX1RZUEVfQkxLQ0lQSEVSOworCW1hc2sgfD0gQ1JZUFRPX0FMR19UWVBFX01BU0s7CisKKwlyZXR1cm4gY3J5cHRvX2hhc19hbGcoYWxnX25hbWUsIHR5cGUsIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmNyeXB0b19ibGtjaXBoZXJfbmFtZShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2FsZ19uYW1lKGNyeXB0b19ibGtjaXBoZXJfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBibGtjaXBoZXJfdGZtICpjcnlwdG9fYmxrY2lwaGVyX2NydCgKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtKQoreworCXJldHVybiAmY3J5cHRvX2Jsa2NpcGhlcl90Zm0odGZtKS0+Y3J0X2Jsa2NpcGhlcjsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYmxrY2lwaGVyX2FsZyAqY3J5cHRvX2Jsa2NpcGhlcl9hbGcoCisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSkKK3sKKwlyZXR1cm4gJmNyeXB0b19ibGtjaXBoZXJfdGZtKHRmbSktPl9fY3J0X2FsZy0+Y3JhX2Jsa2NpcGhlcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX2Jsa2NpcGhlcl9hbGcodGZtKS0+aXZzaXplOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSgKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoY3J5cHRvX2Jsa2NpcGhlcl90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19ibGtjaXBoZXJfYWxpZ25tYXNrKAorCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2FsaWdubWFzayhjcnlwdG9fYmxrY2lwaGVyX3RmbSh0Zm0pKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgY3J5cHRvX2Jsa2NpcGhlcl9nZXRfZmxhZ3Moc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9nZXRfZmxhZ3MoY3J5cHRvX2Jsa2NpcGhlcl90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fYmxrY2lwaGVyX3NldF9mbGFncyhzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAorCQkJCQkgICAgICB1MzIgZmxhZ3MpCit7CisJY3J5cHRvX3RmbV9zZXRfZmxhZ3MoY3J5cHRvX2Jsa2NpcGhlcl90Zm0odGZtKSwgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2Jsa2NpcGhlcl9jbGVhcl9mbGFncyhzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAorCQkJCQkJdTMyIGZsYWdzKQoreworCWNyeXB0b190Zm1fY2xlYXJfZmxhZ3MoY3J5cHRvX2Jsa2NpcGhlcl90Zm0odGZtKSwgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYmxrY2lwaGVyX3NldGtleShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAorCQkJCQkgIGNvbnN0IHU4ICprZXksIHVuc2lnbmVkIGludCBrZXlsZW4pCit7CisJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfY3J0KHRmbSktPnNldGtleShjcnlwdG9fYmxrY2lwaGVyX3RmbSh0Zm0pLAorCQkJCQkJIGtleSwga2V5bGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCWRlc2MtPmluZm8gPSBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLT50Zm0pLT5pdjsKKwlyZXR1cm4gY3J5cHRvX2Jsa2NpcGhlcl9jcnQoZGVzYy0+dGZtKS0+ZW5jcnlwdChkZXNjLCBkc3QsIHNyYywgbmJ5dGVzKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KHN0cnVjdCBibGtjaXBoZXJfZGVzYyAqZGVzYywKKwkJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLT50Zm0pLT5lbmNyeXB0KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkJCSAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJZGVzYy0+aW5mbyA9IGNyeXB0b19ibGtjaXBoZXJfY3J0KGRlc2MtPnRmbSktPml2OworCXJldHVybiBjcnlwdG9fYmxrY2lwaGVyX2NydChkZXNjLT50Zm0pLT5kZWNyeXB0KGRlc2MsIGRzdCwgc3JjLCBuYnl0ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHRfaXYoc3RydWN0IGJsa2NpcGhlcl9kZXNjICpkZXNjLAorCQkJCQkgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCBuYnl0ZXMpCit7CisJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfY3J0KGRlc2MtPnRmbSktPmRlY3J5cHQoZGVzYywgZHN0LCBzcmMsIG5ieXRlcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fYmxrY2lwaGVyX3NldF9pdihzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAorCQkJCQkgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCW1lbWNweShjcnlwdG9fYmxrY2lwaGVyX2NydCh0Zm0pLT5pdiwgc3JjLCBsZW4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2Jsa2NpcGhlcl9nZXRfaXYoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwKKwkJCQkJICAgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbikKK3sKKwltZW1jcHkoZHN0LCBjcnlwdG9fYmxrY2lwaGVyX2NydCh0Zm0pLT5pdiwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqX19jcnlwdG9fY2lwaGVyX2Nhc3Qoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdG9fY2lwaGVyICopdGZtOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fY2lwaGVyICpjcnlwdG9fY2lwaGVyX2Nhc3Qoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9DSVBIRVIpOworCXJldHVybiBfX2NyeXB0b19jaXBoZXJfY2FzdCh0Zm0pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fY2lwaGVyICpjcnlwdG9fYWxsb2NfY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLAorCQkJCQkJCXUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwl0eXBlICY9IH5DUllQVE9fQUxHX1RZUEVfTUFTSzsKKwl0eXBlIHw9IENSWVBUT19BTEdfVFlQRV9DSVBIRVI7CisJbWFzayB8PSBDUllQVE9fQUxHX1RZUEVfTUFTSzsKKworCXJldHVybiBfX2NyeXB0b19jaXBoZXJfY2FzdChjcnlwdG9fYWxsb2NfYmFzZShhbGdfbmFtZSwgdHlwZSwgbWFzaykpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fdGZtICpjcnlwdG9fY2lwaGVyX3RmbShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCXJldHVybiB0Zm07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlwdG9fZnJlZV9jaXBoZXIoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSkKK3sKKwljcnlwdG9fZnJlZV90Zm0oY3J5cHRvX2NpcGhlcl90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19oYXNfY2lwaGVyKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJdHlwZSAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7CisJdHlwZSB8PSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSOworCW1hc2sgfD0gQ1JZUFRPX0FMR19UWVBFX01BU0s7CisKKwlyZXR1cm4gY3J5cHRvX2hhc19hbGcoYWxnX25hbWUsIHR5cGUsIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjaXBoZXJfdGZtICpjcnlwdG9fY2lwaGVyX2NydChzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCXJldHVybiAmY3J5cHRvX2NpcGhlcl90Zm0odGZtKS0+Y3J0X2NpcGhlcjsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX2NpcGhlcl9ibG9ja3NpemUoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGNyeXB0b19jaXBoZXJfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9fY2lwaGVyX2FsaWdubWFzayhzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2FsZ19hbGlnbm1hc2soY3J5cHRvX2NpcGhlcl90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNyeXB0b19jaXBoZXJfZ2V0X2ZsYWdzKHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fZ2V0X2ZsYWdzKGNyeXB0b19jaXBoZXJfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2NpcGhlcl9zZXRfZmxhZ3Moc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwKKwkJCQkJICAgdTMyIGZsYWdzKQoreworCWNyeXB0b190Zm1fc2V0X2ZsYWdzKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19jaXBoZXJfY2xlYXJfZmxhZ3Moc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwKKwkJCQkJICAgICB1MzIgZmxhZ3MpCit7CisJY3J5cHRvX3RmbV9jbGVhcl9mbGFncyhjcnlwdG9fY2lwaGVyX3RmbSh0Zm0pLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jaXBoZXJfc2V0a2V5KHN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQga2V5bGVuKQoreworCXJldHVybiBjcnlwdG9fY2lwaGVyX2NydCh0Zm0pLT5jaXRfc2V0a2V5KGNyeXB0b19jaXBoZXJfdGZtKHRmbSksCisJCQkJCQkgIGtleSwga2V5bGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19jaXBoZXJfZW5jcnlwdF9vbmUoc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwKKwkJCQkJICAgICB1OCAqZHN0LCBjb25zdCB1OCAqc3JjKQoreworCWNyeXB0b19jaXBoZXJfY3J0KHRmbSktPmNpdF9lbmNyeXB0X29uZShjcnlwdG9fY2lwaGVyX3RmbSh0Zm0pLAorCQkJCQkJZHN0LCBzcmMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2NpcGhlcl9kZWNyeXB0X29uZShzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLAorCQkJCQkgICAgIHU4ICpkc3QsIGNvbnN0IHU4ICpzcmMpCit7CisJY3J5cHRvX2NpcGhlcl9jcnQodGZtKS0+Y2l0X2RlY3J5cHRfb25lKGNyeXB0b19jaXBoZXJfdGZtKHRmbSksCisJCQkJCQlkc3QsIHNyYyk7Cit9CisKK3ZvaWQgY3J5cHRvX2RpZ2VzdF9pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pIF9fZGVwcmVjYXRlZF9mb3JfbW9kdWxlczsKK3ZvaWQgY3J5cHRvX2RpZ2VzdF91cGRhdGUoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5zZykKKwlfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXM7Cit2b2lkIGNyeXB0b19kaWdlc3RfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKm91dCkKKwlfX2RlcHJlY2F0ZWRfZm9yX21vZHVsZXM7Cit2b2lkIGNyeXB0b19kaWdlc3RfZGlnZXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisJCQkgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHVuc2lnbmVkIGludCBuc2csIHU4ICpvdXQpCisJX19kZXByZWNhdGVkX2Zvcl9tb2R1bGVzOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9faGFzaCAqX19jcnlwdG9faGFzaF9jYXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJcmV0dXJuIChzdHJ1Y3QgY3J5cHRvX2hhc2ggKil0Zm07Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19oYXNoICpjcnlwdG9faGFzaF9jYXN0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0pCit7CisJQlVHX09OKChjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgXiBDUllQVE9fQUxHX1RZUEVfSEFTSCkgJgorCSAgICAgICBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLKTsKKwlyZXR1cm4gX19jcnlwdG9faGFzaF9jYXN0KHRmbSk7Cit9CisKK3N0YXRpYyBpbnQgY3J5cHRvX2RpZ2VzdF9zZXRrZXkoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgY29uc3QgdTggKmtleSwKKwkJCQl1bnNpZ25lZCBpbnQga2V5bGVuKSBfX2RlcHJlY2F0ZWQ7CiBzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fZGlnZXN0X3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKIHsKLQlCVUdfT04oY3J5cHRvX3RmbV9hbGdfdHlwZSh0Zm0pICE9IENSWVBUT19BTEdfVFlQRV9ESUdFU1QpOwotCWlmICh0Zm0tPmNydF9kaWdlc3QuZGl0X3NldGtleSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT1NZUzsKLQlyZXR1cm4gdGZtLT5jcnRfZGlnZXN0LmRpdF9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7CisJcmV0dXJuIHRmbS0+Y3J0X2hhc2guc2V0a2V5KGNyeXB0b19oYXNoX2Nhc3QodGZtKSwga2V5LCBrZXlsZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY2lwaGVyX3NldGtleShzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19oYXNoICpjcnlwdG9fYWxsb2NfaGFzaChjb25zdCBjaGFyICphbGdfbmFtZSwKKwkJCQkJCSAgICB1MzIgdHlwZSwgdTMyIG1hc2spCiB7Ci0JQlVHX09OKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSAhPSBDUllQVE9fQUxHX1RZUEVfQ0lQSEVSKTsKLQlyZXR1cm4gdGZtLT5jcnRfY2lwaGVyLmNpdF9zZXRrZXkodGZtLCBrZXksIGtleWxlbik7CisJdHlwZSAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7CisJdHlwZSB8PSBDUllQVE9fQUxHX1RZUEVfSEFTSDsKKwltYXNrIHw9IENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0s7CisKKwlyZXR1cm4gX19jcnlwdG9faGFzaF9jYXN0KGNyeXB0b19hbGxvY19iYXNlKGFsZ19uYW1lLCB0eXBlLCBtYXNrKSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19oYXNoX3RmbShzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gJnRmbS0+YmFzZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19mcmVlX2hhc2goc3RydWN0IGNyeXB0b19oYXNoICp0Zm0pCit7CisJY3J5cHRvX2ZyZWVfdGZtKGNyeXB0b19oYXNoX3RmbSh0Zm0pKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2hhc19oYXNoKGNvbnN0IGNoYXIgKmFsZ19uYW1lLCB1MzIgdHlwZSwgdTMyIG1hc2spCit7CisJdHlwZSAmPSB+Q1JZUFRPX0FMR19UWVBFX01BU0s7CisJdHlwZSB8PSBDUllQVE9fQUxHX1RZUEVfSEFTSDsKKwltYXNrIHw9IENSWVBUT19BTEdfVFlQRV9IQVNIX01BU0s7CisKKwlyZXR1cm4gY3J5cHRvX2hhc19hbGcoYWxnX25hbWUsIHR5cGUsIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBoYXNoX3RmbSAqY3J5cHRvX2hhc2hfY3J0KHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtKQoreworCXJldHVybiAmY3J5cHRvX2hhc2hfdGZtKHRmbSktPmNydF9oYXNoOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcnlwdG9faGFzaF9ibG9ja3NpemUoc3RydWN0IGNyeXB0b19oYXNoICp0Zm0pCit7CisJcmV0dXJuIGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShjcnlwdG9faGFzaF90Zm0odGZtKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNyeXB0b19oYXNoX2FsaWdubWFzayhzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9hbGdfYWxpZ25tYXNrKGNyeXB0b19oYXNoX3RmbSh0Zm0pKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX2hhc2hfY3J0KHRmbSktPmRpZ2VzdHNpemU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGNyeXB0b19oYXNoX2dldF9mbGFncyhzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbSkKK3sKKwlyZXR1cm4gY3J5cHRvX3RmbV9nZXRfZmxhZ3MoY3J5cHRvX2hhc2hfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2hhc2hfc2V0X2ZsYWdzKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtLCB1MzIgZmxhZ3MpCit7CisJY3J5cHRvX3RmbV9zZXRfZmxhZ3MoY3J5cHRvX2hhc2hfdGZtKHRmbSksIGZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19oYXNoX2NsZWFyX2ZsYWdzKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtLCB1MzIgZmxhZ3MpCit7CisJY3J5cHRvX3RmbV9jbGVhcl9mbGFncyhjcnlwdG9faGFzaF90Zm0odGZtKSwgZmxhZ3MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9faGFzaF9pbml0KHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MpCit7CisJcmV0dXJuIGNyeXB0b19oYXNoX2NydChkZXNjLT50Zm0pLT5pbml0KGRlc2MpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9faGFzaF91cGRhdGUoc3RydWN0IGhhc2hfZGVzYyAqZGVzYywKKwkJCQkgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICAgICB1bnNpZ25lZCBpbnQgbmJ5dGVzKQoreworCXJldHVybiBjcnlwdG9faGFzaF9jcnQoZGVzYy0+dGZtKS0+dXBkYXRlKGRlc2MsIHNnLCBuYnl0ZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9faGFzaF9maW5hbChzdHJ1Y3QgaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQoreworCXJldHVybiBjcnlwdG9faGFzaF9jcnQoZGVzYy0+dGZtKS0+ZmluYWwoZGVzYywgb3V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2hhc2hfZGlnZXN0KHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsCisJCQkJICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCSAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKm91dCkKK3sKKwlyZXR1cm4gY3J5cHRvX2hhc2hfY3J0KGRlc2MtPnRmbSktPmRpZ2VzdChkZXNjLCBzZywgbmJ5dGVzLCBvdXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9faGFzaF9zZXRrZXkoc3RydWN0IGNyeXB0b19oYXNoICpoYXNoLAorCQkJCSAgICAgY29uc3QgdTggKmtleSwgdW5zaWduZWQgaW50IGtleWxlbikKK3sKKwlyZXR1cm4gY3J5cHRvX2hhc2hfY3J0KGhhc2gpLT5zZXRrZXkoaGFzaCwga2V5LCBrZXlsZW4pOworfQorCitzdGF0aWMgaW50IGNyeXB0b19jaXBoZXJfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkJIHVuc2lnbmVkIGludCBuYnl0ZXMpIF9fZGVwcmVjYXRlZDsKIHN0YXRpYyBpbmxpbmUgaW50IGNyeXB0b19jaXBoZXJfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLApAQCAtMzY5LDE2ICs4NDQsMjMgQEAKIAlyZXR1cm4gdGZtLT5jcnRfY2lwaGVyLmNpdF9lbmNyeXB0KHRmbSwgZHN0LCBzcmMsIG5ieXRlcyk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCitzdGF0aWMgaW50IGNyeXB0b19jaXBoZXJfZW5jcnlwdF9pdihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICppdikgX19kZXByZWNhdGVkOwogc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NpcGhlcl9lbmNyeXB0X2l2KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKml2KQogewogCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7Ci0JQlVHX09OKHRmbS0+Y3J0X2NpcGhlci5jaXRfbW9kZSA9PSBDUllQVE9fVEZNX01PREVfRUNCKTsKIAlyZXR1cm4gdGZtLT5jcnRfY2lwaGVyLmNpdF9lbmNyeXB0X2l2KHRmbSwgZHN0LCBzcmMsIG5ieXRlcywgaXYpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAorc3RhdGljIGludCBjcnlwdG9fY2lwaGVyX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCQkgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCisJCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc3JjLAorCQkJCSB1bnNpZ25lZCBpbnQgbmJ5dGVzKSBfX2RlcHJlY2F0ZWQ7CiBzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY2lwaGVyX2RlY3J5cHQoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNyYywKQEAgLTM4OCwxNiArODcwLDIxIEBACiAJcmV0dXJuIHRmbS0+Y3J0X2NpcGhlci5jaXRfZGVjcnlwdCh0Zm0sIGRzdCwgc3JjLCBuYnl0ZXMpOwogfQogCitzdGF0aWMgaW50IGNyeXB0b19jaXBoZXJfZGVjcnlwdF9pdihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmRzdCwKKwkJCQkgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCisJCQkJICAgIHVuc2lnbmVkIGludCBuYnl0ZXMsIHU4ICppdikgX19kZXByZWNhdGVkOwogc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NpcGhlcl9kZWNyeXB0X2l2KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgdTggKml2KQogewogCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NJUEhFUik7Ci0JQlVHX09OKHRmbS0+Y3J0X2NpcGhlci5jaXRfbW9kZSA9PSBDUllQVE9fVEZNX01PREVfRUNCKTsKIAlyZXR1cm4gdGZtLT5jcnRfY2lwaGVyLmNpdF9kZWNyeXB0X2l2KHRmbSwgZHN0LCBzcmMsIG5ieXRlcywgaXYpOwogfQogCitzdGF0aWMgdm9pZCBjcnlwdG9fY2lwaGVyX3NldF9pdihzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAorCQkJCSBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKSBfX2RlcHJlY2F0ZWQ7CiBzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2NpcGhlcl9zZXRfaXYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgbGVuKQogewpAQCAtNDA1LDYgKzg5Miw4IEBACiAJbWVtY3B5KHRmbS0+Y3J0X2NpcGhlci5jaXRfaXYsIHNyYywgbGVuKTsKIH0KIAorc3RhdGljIHZvaWQgY3J5cHRvX2NpcGhlcl9nZXRfaXYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwkJCQkgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbikgX19kZXByZWNhdGVkOwogc3RhdGljIGlubGluZSB2b2lkIGNyeXB0b19jaXBoZXJfZ2V0X2l2KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmRzdCwgdW5zaWduZWQgaW50IGxlbikKIHsKQEAgLTQxMiwzNCArOTAxLDcwIEBACiAJbWVtY3B5KGRzdCwgdGZtLT5jcnRfY2lwaGVyLmNpdF9pdiwgbGVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY3J5cHRvX2NvbXBfY29tcHJlc3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b19jb21wICpfX2NyeXB0b19jb21wX2Nhc3Qoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlyZXR1cm4gKHN0cnVjdCBjcnlwdG9fY29tcCAqKXRmbTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY3J5cHRvX2NvbXAgKmNyeXB0b19jb21wX2Nhc3Qoc3RydWN0IGNyeXB0b190Zm0gKnRmbSkKK3sKKwlCVUdfT04oKGNyeXB0b190Zm1fYWxnX3R5cGUodGZtKSBeIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUykgJgorCSAgICAgICBDUllQVE9fQUxHX1RZUEVfTUFTSyk7CisJcmV0dXJuIF9fY3J5cHRvX2NvbXBfY2FzdCh0Zm0pOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjcnlwdG9fY29tcCAqY3J5cHRvX2FsbG9jX2NvbXAoY29uc3QgY2hhciAqYWxnX25hbWUsCisJCQkJCQkgICAgdTMyIHR5cGUsIHUzMiBtYXNrKQoreworCXR5cGUgJj0gfkNSWVBUT19BTEdfVFlQRV9NQVNLOworCXR5cGUgfD0gQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTOworCW1hc2sgfD0gQ1JZUFRPX0FMR19UWVBFX01BU0s7CisKKwlyZXR1cm4gX19jcnlwdG9fY29tcF9jYXN0KGNyeXB0b19hbGxvY19iYXNlKGFsZ19uYW1lLCB0eXBlLCBtYXNrKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNyeXB0b190Zm0gKmNyeXB0b19jb21wX3RmbShzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbSkKK3sKKwlyZXR1cm4gdGZtOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5cHRvX2ZyZWVfY29tcChzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbSkKK3sKKwljcnlwdG9fZnJlZV90Zm0oY3J5cHRvX2NvbXBfdGZtKHRmbSkpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9faGFzX2NvbXAoY29uc3QgY2hhciAqYWxnX25hbWUsIHUzMiB0eXBlLCB1MzIgbWFzaykKK3sKKwl0eXBlICY9IH5DUllQVE9fQUxHX1RZUEVfTUFTSzsKKwl0eXBlIHw9IENSWVBUT19BTEdfVFlQRV9DT01QUkVTUzsKKwltYXNrIHw9IENSWVBUT19BTEdfVFlQRV9NQVNLOworCisJcmV0dXJuIGNyeXB0b19oYXNfYWxnKGFsZ19uYW1lLCB0eXBlLCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpjcnlwdG9fY29tcF9uYW1lKHN0cnVjdCBjcnlwdG9fY29tcCAqdGZtKQoreworCXJldHVybiBjcnlwdG9fdGZtX2FsZ19uYW1lKGNyeXB0b19jb21wX3RmbSh0Zm0pKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY29tcHJlc3NfdGZtICpjcnlwdG9fY29tcF9jcnQoc3RydWN0IGNyeXB0b19jb21wICp0Zm0pCit7CisJcmV0dXJuICZjcnlwdG9fY29tcF90Zm0odGZtKS0+Y3J0X2NvbXByZXNzOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcF9jb21wcmVzcyhzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHU4ICpzcmMsIHVuc2lnbmVkIGludCBzbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmRzdCwgdW5zaWduZWQgaW50ICpkbGVuKQogewotCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTKTsKLQlyZXR1cm4gdGZtLT5jcnRfY29tcHJlc3MuY290X2NvbXByZXNzKHRmbSwgc3JjLCBzbGVuLCBkc3QsIGRsZW4pOworCXJldHVybiBjcnlwdG9fY29tcF9jcnQodGZtKS0+Y290X2NvbXByZXNzKHRmbSwgc3JjLCBzbGVuLCBkc3QsIGRsZW4pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcF9kZWNvbXByZXNzKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCitzdGF0aWMgaW5saW5lIGludCBjcnlwdG9fY29tcF9kZWNvbXByZXNzKHN0cnVjdCBjcnlwdG9fY29tcCAqdGZtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1OCAqc3JjLCB1bnNpZ25lZCBpbnQgc2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKmRzdCwgdW5zaWduZWQgaW50ICpkbGVuKQogewotCUJVR19PTihjcnlwdG9fdGZtX2FsZ190eXBlKHRmbSkgIT0gQ1JZUFRPX0FMR19UWVBFX0NPTVBSRVNTKTsKLQlyZXR1cm4gdGZtLT5jcnRfY29tcHJlc3MuY290X2RlY29tcHJlc3ModGZtLCBzcmMsIHNsZW4sIGRzdCwgZGxlbik7CisJcmV0dXJuIGNyeXB0b19jb21wX2NydCh0Zm0pLT5jb3RfZGVjb21wcmVzcyh0Zm0sIHNyYywgc2xlbiwgZHN0LCBkbGVuKTsKIH0KIAotLyoKLSAqIEhNQUMgc3VwcG9ydC4KLSAqLwotI2lmZGVmIENPTkZJR19DUllQVE9fSE1BQwotdm9pZCBjcnlwdG9faG1hY19pbml0KHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHU4ICprZXksIHVuc2lnbmVkIGludCAqa2V5bGVuKTsKLXZvaWQgY3J5cHRvX2htYWNfdXBkYXRlKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB1bnNpZ25lZCBpbnQgbnNnKTsKLXZvaWQgY3J5cHRvX2htYWNfZmluYWwoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgdTggKmtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICprZXlsZW4sIHU4ICpvdXQpOwotdm9pZCBjcnlwdG9faG1hYyhzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLCB1OCAqa2V5LCB1bnNpZ25lZCBpbnQgKmtleWxlbiwKLSAgICAgICAgICAgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IG5zZywgdTggKm91dCk7Ci0jZW5kaWYJLyogQ09ORklHX0NSWVBUT19ITUFDICovCi0KICNlbmRpZgkvKiBfTElOVVhfQ1JZUFRPX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kZWJ1Z19sb2Nrcy5oIGIvaW5jbHVkZS9saW51eC9kZWJ1Z19sb2Nrcy5oCmluZGV4IDZhNzA0NzguLjg4ZGFmYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZGVidWdfbG9ja3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RlYnVnX2xvY2tzLmgKQEAgLTEsNiArMSw4IEBACiAjaWZuZGVmIF9fTElOVVhfREVCVUdfTE9DS0lOR19ICiAjZGVmaW5lIF9fTElOVVhfREVCVUdfTE9DS0lOR19ICiAKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKwogZXh0ZXJuIGludCBkZWJ1Z19sb2NrczsKIGV4dGVybiBpbnQgZGVidWdfbG9ja3Nfc2lsZW50OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RlbGF5YWNjdC5oIGIvaW5jbHVkZS9saW51eC9kZWxheWFjY3QuaAppbmRleCA3ZThiNjAxLi41NjFlMmE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RlbGF5YWNjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvZGVsYXlhY2N0LmgKQEAgLTU1LDE0ICs1NSwxOCBAQAogewogCS8qIHJlaW5pdGlhbGl6ZSBpbiBjYXNlIHBhcmVudCdzIG5vbi1udWxsIHBvaW50ZXIgd2FzIGR1cCdlZCovCiAJdHNrLT5kZWxheXMgPSBOVUxMOwotCWlmICh1bmxpa2VseShkZWxheWFjY3Rfb24pKQorCWlmIChkZWxheWFjY3Rfb24pCiAJCV9fZGVsYXlhY2N0X3Rza19pbml0KHRzayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWFjY3RfdHNrX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCisvKiBGcmVlIHRzay0+ZGVsYXlzLiBDYWxsZWQgZnJvbSBiYWQgZm9yayBhbmQgX19wdXRfdGFza19zdHJ1Y3QKKyAqIHdoZXJlIHRoZXJlJ3Mgbm8gcmlzayBvZiB0c2stPmRlbGF5cyBiZWluZyBhY2Nlc3NlZCBlbHNld2hlcmUKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRlbGF5YWNjdF90c2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKIAlpZiAodHNrLT5kZWxheXMpCi0JCV9fZGVsYXlhY2N0X3Rza19leGl0KHRzayk7CisJCWttZW1fY2FjaGVfZnJlZShkZWxheWFjY3RfY2FjaGUsIHRzay0+ZGVsYXlzKTsKKwl0c2stPmRlbGF5cyA9IE5VTEw7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheWFjY3RfYmxraW9fc3RhcnQodm9pZCkKQEAgLTgwLDkgKzg0LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IGRlbGF5YWNjdF9hZGRfdHNrKHN0cnVjdCB0YXNrc3RhdHMgKmQsCiAJCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewotCWlmIChsaWtlbHkoIWRlbGF5YWNjdF9vbikpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghdHNrLT5kZWxheXMpCisJaWYgKCFkZWxheWFjY3Rfb24gfHwgIXRzay0+ZGVsYXlzKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gX19kZWxheWFjY3RfYWRkX3RzayhkLCB0c2spOwogfQpAQCAtMTAzLDcgKzEwNSw3IEBACiB7fQogc3RhdGljIGlubGluZSB2b2lkIGRlbGF5YWNjdF90c2tfaW5pdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgZGVsYXlhY2N0X3Rza19leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorc3RhdGljIGlubGluZSB2b2lkIGRlbGF5YWNjdF90c2tfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgZGVsYXlhY2N0X2Jsa2lvX3N0YXJ0KHZvaWQpCiB7fQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kdmIvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9kdmIvS2J1aWxkCmluZGV4IDYzOTczYWY3Mi4uZDk3YjNhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kdmIvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvZHZiL0tidWlsZApAQCAtMSwyICsxLDkgQEAKLWhlYWRlci15ICs9IGNhLmggZnJvbnRlbmQuaCBuZXQuaCBvc2QuaCB2ZXJzaW9uLmgKLXVuaWZkZWYteSA6PSBhdWRpby5oIGRteC5oIHZpZGVvLmgKK2hlYWRlci15ICs9IGNhLmgKK2hlYWRlci15ICs9IGZyb250ZW5kLmgKK2hlYWRlci15ICs9IG5ldC5oCitoZWFkZXIteSArPSBvc2QuaAoraGVhZGVyLXkgKz0gdmVyc2lvbi5oCisKK3VuaWZkZWYteSArPSBhdWRpby5oCit1bmlmZGVmLXkgKz0gZG14LmgKK3VuaWZkZWYteSArPSB2aWRlby5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCmluZGV4IDU2MDdlNjQuLjlmOWNjZTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCkBAIC00OTIsNiArNDkyLDE1IEBACiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IGV4dDNfaW5vZGVfaW5mbywgdmZzX2lub2RlKTsKIH0KKworc3RhdGljIGlubGluZSBpbnQgZXh0M192YWxpZF9pbnVtKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgaW5vKQoreworCXJldHVybiBpbm8gPT0gRVhUM19ST09UX0lOTyB8fAorCQlpbm8gPT0gRVhUM19KT1VSTkFMX0lOTyB8fAorCQlpbm8gPT0gRVhUM19SRVNJWkVfSU5PIHx8CisJCShpbm8gPj0gRVhUM19GSVJTVF9JTk8oc2IpICYmCisJCSBpbm8gPD0gbGUzMl90b19jcHUoRVhUM19TQihzYiktPnNfZXMtPnNfaW5vZGVzX2NvdW50KSk7Cit9CiAjZWxzZQogLyogQXNzdW1lIHRoYXQgdXNlciBtb2RlIHByb2dyYW1zIGFyZSBwYXNzaW5nIGluIGFuIGV4dDNmcyBzdXBlcmJsb2NrLCBub3QKICAqIGEga2VybmVsIHN0cnVjdCBzdXBlcl9ibG9jay4gIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxsIHRoZSBmZWF0dXJlLXRlc3QKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmIuaCBiL2luY2x1ZGUvbGludXgvZmIuaAppbmRleCA0MDVmNDRlLi4yZjMzNWU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZiLmgKKysrIGIvaW5jbHVkZS9saW51eC9mYi5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTElOVVhfRkJfSAogI2RlZmluZSBfTElOVVhfRkJfSAogCi0jaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKIC8qIERlZmluaXRpb25zIG9mIGZyYW1lIGJ1ZmZlcnMJCQkJCQkqLwpAQCAtMzgxLDYgKzM4MCw3IEBACiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKQEAgLTUyNCw3ICs1MjQsNyBAQAogCiBleHRlcm4gaW50IGZiX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIGV4dGVybiBpbnQgZmJfdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7Ci0KK2V4dGVybiBpbnQgZmJfbm90aWZpZXJfY2FsbF9jaGFpbih1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7CiAvKgogICogUGl4bWFwIHN0cnVjdHVyZSBkZWZpbml0aW9uCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDI1NjEwMjAuLjU1NWJjMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTU3MCwxMyArNTcwLDE0IEBACiAgKiAzOiBxdW90YSBmaWxlCiAgKgogICogVGhlIGxvY2tpbmcgb3JkZXIgYmV0d2VlbiB0aGVzZSBjbGFzc2VzIGlzCi0gKiBwYXJlbnQgLT4gY2hpbGQgLT4gbm9ybWFsIC0+IHF1b3RhCisgKiBwYXJlbnQgLT4gY2hpbGQgLT4gbm9ybWFsIC0+IHhhdHRyIC0+IHF1b3RhCiAgKi8KIGVudW0gaW5vZGVfaV9tdXRleF9sb2NrX2NsYXNzCiB7CiAJSV9NVVRFWF9OT1JNQUwsCiAJSV9NVVRFWF9QQVJFTlQsCiAJSV9NVVRFWF9DSElMRCwKKwlJX01VVEVYX1hBVFRSLAogCUlfTVVURVhfUVVPVEEKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnNfZW5ldF9wZC5oIGIvaW5jbHVkZS9saW51eC9mc19lbmV0X3BkLmgKaW5kZXggNzgzYzQ3Ni4uNzRlZDM1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc19lbmV0X3BkLmgKKysrIGIvaW5jbHVkZS9saW51eC9mc19lbmV0X3BkLmgKQEAgLTY5LDM0ICs2OSwyMSBAQAogCWZzaW9wX3BvcnRlLAogfTsKIAotc3RydWN0IGZzX21paV9idXNfaW5mbyB7Ci0JaW50IG1ldGhvZDsJCS8qIG1paSBtZXRob2QgICAgICAgICAgICAgICAgICAqLwotCWludCBpZDsJCQkvKiB0aGUgaWQgb2YgdGhlIG1paV9idXMgICAgICAgKi8KLQlpbnQgZGlzYWJsZV9hbmVnOwkvKiBpZiB0aGUgY29udHJvbGxlciBuZWVkcyB0byBuZWdvdGhpYXRlIHNwZWVkICYgZHVwbGV4ICovCi0JaW50IGxwYTsgCQkvKiB0aGUgZGVmYXVsdCBib2FyZC1zcGVjaWZpYyB2YWxsdWVzIHdpbGwgYmUgYXBwbGllZCBvdGhlcndpc2UgKi8KLQotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCWludCBkdXBsZXg7Ci0JCQlpbnQgc3BlZWQ7Ci0JCX0gZml4ZWQ7Ci0KLQkJc3RydWN0IHsKLQkJCS8qIG5vdGhpbmcgKi8KLQkJfSBmZWM7Ci0JCQotCQlzdHJ1Y3QgewotCQkJLyogbm90aGluZyAqLwotCQl9IHNjYzsKLQotCQlzdHJ1Y3QgewotCQkJaW50IG1kaW9fcG9ydDsJLyogcG9ydCAmIGJpdCBmb3IgTURJTyAqLwotCQkJaW50IG1kaW9fYml0OwotCQkJaW50IG1kY19wb3J0OwkvKiBwb3J0ICYgYml0IGZvciBNREMgICovCi0JCQlpbnQgbWRjX2JpdDsKLQkJCWludCBkZWxheTsJLyogZGVsYXkgaW4gdXMgICAgICAgICAqLwotCQl9IGJpdGJhbmc7Ci0JfSBpOworc3RydWN0IGZzX21paV9iaXQgeworCXUzMiBvZmZzZXQ7CisJdTggYml0OworCXU4IHBvbGFyaXR5OworfTsKK3N0cnVjdCBmc19taWlfYmJfcGxhdGZvcm1faW5mbyB7CisJc3RydWN0IGZzX21paV9iaXQgCW1kaW9fZGlyOworCXN0cnVjdCBmc19taWlfYml0IAltZGlvX2RhdDsKKwlzdHJ1Y3QgZnNfbWlpX2JpdAltZGNfZGF0OworCWludCBtZGlvX3BvcnQ7CS8qIHBvcnQgJiBiaXQgZm9yIE1ESU8gKi8KKwlpbnQgbWRpb19iaXQ7CisJaW50IG1kY19wb3J0OwkvKiBwb3J0ICYgYml0IGZvciBNREMgICovCisJaW50IG1kY19iaXQ7CisJaW50IGRlbGF5OwkvKiBkZWxheSBpbiB1cyAgICAgICAgICovCisJaW50IGlycVszMl07IAkvKiBpcnFzIHBlciBwaHkncyAqLwogfTsKIAogc3RydWN0IGZzX3BsYXRmb3JtX2luZm8gewpAQCAtMTE5LDYgKzEwNiw3IEBACiAJdTMyIGRldmljZV9mbGFnczsKIAogCWludCBwaHlfYWRkcjsJCS8qIHRoZSBwaHkgYWRkcmVzcyAoLTEgbm8gcGh5KSAqLworCWNvbnN0IGNoYXIqCWJ1c19pZDsKIAlpbnQgcGh5X2lycTsJCS8qIHRoZSBwaHkgaXJxIChpZiBpdCBleGlzdHMpICAqLwogCiAJY29uc3Qgc3RydWN0IGZzX21paV9idXNfaW5mbyAqYnVzX2luZm87CkBAIC0xMzAsNiArMTE4LDEwIEBACiAJaW50IG5hcGlfd2VpZ2h0OwkvKiBOQVBJIHdlaWdodCAgICAgICAgICAgICAgICAgKi8KIAogCWludCB1c2Vfcm1paTsJCS8qIHVzZSBSTUlJIG1vZGUgCSAgICAgICAqLworCWludCBoYXNfcGh5OyAgICAgICAgICAgIC8qIGlmIHRoZSBuZXR3b3JrIGlzIHBoeSBjb250YWluZXIgYXMgd2VsbC4uLiovCiB9OwotCitzdHJ1Y3QgZnNfbWlpX2ZlY19wbGF0Zm9ybV9pbmZvIHsKKwl1MzIgaXJxWzMyXTsKKwl1MzIgbWlpX3NwZWVkOworfTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oIGIvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCmluZGV4IGNjNWRlYzcuLmQ0ZjIxOWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKQEAgLTY3LDcgKzY3LDcgQEAKIAlpZiAoc291cmNlKSB7CiAJCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoc291cmNlLCBJTl9NT1ZFX1NFTEYsIDAsIE5VTEwsIE5VTEwpOwogCX0KLQlhdWRpdF9pbm9kZV9jaGlsZChuZXdfbmFtZSwgc291cmNlLCBuZXdfZGlyLT5pX2lubyk7CisJYXVkaXRfaW5vZGVfY2hpbGQobmV3X25hbWUsIHNvdXJjZSwgbmV3X2Rpcik7CiB9CiAKIC8qCkBAIC05OCw3ICs5OCw3IEBACiAJaW5vZGVfZGlyX25vdGlmeShpbm9kZSwgRE5fQ1JFQVRFKTsKIAlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBJTl9DUkVBVEUsIDAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCQkJICBkZW50cnktPmRfaW5vZGUpOwotCWF1ZGl0X2lub2RlX2NoaWxkKGRlbnRyeS0+ZF9uYW1lLm5hbWUsIGRlbnRyeS0+ZF9pbm9kZSwgaW5vZGUtPmlfaW5vKTsKKwlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUsIGlub2RlKTsKIH0KIAogLyoKQEAgLTEwOSw3ICsxMDksNyBAQAogCWlub2RlX2Rpcl9ub3RpZnkoaW5vZGUsIEROX0NSRUFURSk7CiAJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChpbm9kZSwgSU5fQ1JFQVRFIHwgSU5fSVNESVIsIDAsIAogCQkJCSAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlKTsKLQlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfaW5vZGUsIGlub2RlLT5pX2lubyk7CisJYXVkaXRfaW5vZGVfY2hpbGQoZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX2lub2RlLCBpbm9kZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z1dGV4LmggYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKaW5kZXggMzRjM2EyMS4uZDA5N2I1YjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnV0ZXguaAorKysgYi9pbmNsdWRlL2xpbnV4L2Z1dGV4LmgKQEAgLTk2LDcgKzk2LDggQEAKIGxvbmcgZG9fZnV0ZXgodTMyIF9fdXNlciAqdWFkZHIsIGludCBvcCwgdTMyIHZhbCwgdW5zaWduZWQgbG9uZyB0aW1lb3V0LAogCSAgICAgIHUzMiBfX3VzZXIgKnVhZGRyMiwgdTMyIHZhbDIsIHUzMiB2YWwzKTsKIAotZXh0ZXJuIGludCBoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vycik7CitleHRlcm4gaW50CitoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IHBpKTsKIAogI2lmZGVmIENPTkZJR19GVVRFWAogZXh0ZXJuIHZvaWQgZXhpdF9yb2J1c3RfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ocnRpbWVyLmggYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAppbmRleCBlNGJjY2JjLi40ZmMzNzlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hydGltZXIuaApAQCAtODAsNiArODAsNyBAQAogICogQGdldF9zb2Z0aXJxX3RpbWU6CWZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZSBjdXJyZW50IHRpbWUgZnJvbSB0aGUgc29mdGlycQogICogQGN1cnJfdGltZXI6CQl0aGUgdGltZXIgd2hpY2ggaXMgZXhlY3V0aW5nIGEgY2FsbGJhY2sgcmlnaHQgbm93CiAgKiBAc29mdGlycV90aW1lOgl0aGUgdGltZSB3aGVuIHJ1bm5pbmcgdGhlIGhydGltZXIgcXVldWUgaW4gdGhlIHNvZnRpcnEKKyAqIEBsb2NrX2tleToJCXRoZSBsb2NrX2NsYXNzX2tleSBmb3IgdXNlIHdpdGggbG9ja2RlcAogICovCiBzdHJ1Y3QgaHJ0aW1lcl9iYXNlIHsKIAljbG9ja2lkX3QJCWluZGV4OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZGUuaCBiL2luY2x1ZGUvbGludXgvaWRlLmgKaW5kZXggZGM3YWJlZi4uOTk2MjA0NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lkZS5oCkBAIC01NzEsNiArNTcxLDcgQEAKIAl1OAl3YWl0aW5nX2Zvcl9kbWE7CS8qIGRtYSBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgKi8KIAl1OAl1bm1hc2s7CQkJLyogb2theSB0byB1bm1hc2sgb3RoZXIgaXJxcyAqLwogCXU4CWJzd2FwOwkJCS8qIGJ5dGUgc3dhcCBkYXRhICovCisJdTgJbm9mbHVzaDsJCS8qIGRvbid0IGF0dGVtcHQgZmx1c2hlcyAqLwogCXU4CWRzY19vdmVybGFwOwkJLyogRFNDIG92ZXJsYXAgKi8KIAl1OAluaWNlMTsJCQkvKiBnaXZlIHBvdGVudGlhbCBleGNlc3MgYmFuZHdpZHRoICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oIGIvaW5jbHVkZS9saW51eC9pZl92bGFuLmgKaW5kZXggMzgzNjI3YS4uYWIyNzQwODMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWZfdmxhbi5oCkBAIC0xNTUsNiArMTU1LDExIEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzOwogCisJaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKwogCXNrYi0+ZGV2ID0gZ3JwLT52bGFuX2RldmljZXNbdmxhbl90YWcgJiBWTEFOX1ZJRF9NQVNLXTsKIAlpZiAoc2tiLT5kZXYgPT0gTlVMTCkgewogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnB1dC5oIGIvaW5jbHVkZS9saW51eC9pbnB1dC5oCmluZGV4IDU2ZjFlMGUuLmIzMjUzYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5wdXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lucHV0LmgKQEAgLTg5Myw3ICs4OTMsNiBAQAogCiAJaW50ICgqb3Blbikoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKIAl2b2lkICgqY2xvc2UpKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7Ci0JaW50ICgqYWNjZXB0KShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlKTsKIAlpbnQgKCpmbHVzaCkoc3RydWN0IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiAJaW50ICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOwogCWludCAoKnVwbG9hZF9lZmZlY3QpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0KTsKQEAgLTk2MSw2ICs5NjAsMjYgQEAKIAogc3RydWN0IGlucHV0X2hhbmRsZTsKIAorLyoqCisgKiBzdHJ1Y3QgaW5wdXRfaGFuZGxlciAtIGltcGxlbWVudHMgb25lIG9mIGludGVyZmFjZXMgZm9yIGlucHV0IGRldmljZXMKKyAqIEBwcml2YXRlOiBkcml2ZXItc3BlY2lmaWMgZGF0YQorICogQGV2ZW50OiBldmVudCBoYW5kbGVyCisgKiBAY29ubmVjdDogY2FsbGVkIHdoZW4gYXR0YWNoaW5nIGEgaGFuZGxlciB0byBhbiBpbnB1dCBkZXZpY2UKKyAqIEBkaXNjb25uZWN0OiBkaXNjb25uZWN0cyBhIGhhbmRsZXIgZnJvbSBpbnB1dCBkZXZpY2UKKyAqIEBzdGFydDogc3RhcnRzIGhhbmRsZXIgZm9yIGdpdmVuIGhhbmRsZS4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkKKyAqCWlucHV0IGNvcmUgcmlnaHQgYWZ0ZXIgY29ubmVjdCgpIG1ldGhvZCBhbmQgYWxzbyB3aGVuIGEgcHJvY2VzcworICoJdGhhdCAiZ3JhYmJlZCIgYSBkZXZpY2UgcmVsZWFzZXMgaXQKKyAqIEBmb3BzOiBmaWxlIG9wZXJhdGlvbnMgdGhpcyBkcml2ZXIgaW1wbGVtZW50cworICogQG1pbm9yOiBiZWdpbm5pbmcgb2YgcmFuZ2Ugb2YgMzIgbWlub3JzIGZvciBkZXZpY2VzIHRoaXMgZHJpdmVyCisgKgljYW4gcHJvdmlkZQorICogQG5hbWU6IG5hbWUgb2YgdGhlIGhhbmRsZXIsIHRvIGJlIHNob3duIGluIC9wcm9jL2J1cy9pbnB1dC9oYW5kbGVycworICogQGlkX3RhYmxlOiBwb2ludGVyIHRvIGEgdGFibGUgb2YgaW5wdXRfZGV2aWNlX2lkcyB0aGlzIGRyaXZlciBjYW4KKyAqCWhhbmRsZQorICogQGJsYWNrbGlzdDogcHJvaW50ZXIgdG8gYSB0YWJsZSBvZiBpbnB1dF9kZXZpY2VfaWRzIHRoaXMgZHJpdmVyIHNob3VsZAorICoJaWdub3JlIGV2ZW4gaWYgdGhleSBtYXRjaCBAaWRfdGFibGUKKyAqIEBoX2xpc3Q6IGxpc3Qgb2YgaW5wdXQgaGFuZGxlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGhhbmRsZXIKKyAqIEBub2RlOiBmb3IgcGxhY2luZyB0aGUgZHJpdmVyIG9udG8gaW5wdXRfaGFuZGxlcl9saXN0CisgKi8KIHN0cnVjdCBpbnB1dF9oYW5kbGVyIHsKIAogCXZvaWQgKnByaXZhdGU7CkBAIC05NjgsNiArOTg3LDcgQEAKIAl2b2lkICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9oYW5kbGUgKmhhbmRsZSwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOwogCXN0cnVjdCBpbnB1dF9oYW5kbGUqICgqY29ubmVjdCkoc3RydWN0IGlucHV0X2hhbmRsZXIgKmhhbmRsZXIsIHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGlucHV0X2RldmljZV9pZCAqaWQpOwogCXZvaWQgKCpkaXNjb25uZWN0KShzdHJ1Y3QgaW5wdXRfaGFuZGxlICpoYW5kbGUpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlKTsKIAogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZvcHM7CiAJaW50IG1pbm9yOwpAQCAtMTAzMCwxMCArMTA1MCwxMCBAQAogaW50IGlucHV0X29wZW5fZGV2aWNlKHN0cnVjdCBpbnB1dF9oYW5kbGUgKik7CiB2b2lkIGlucHV0X2Nsb3NlX2RldmljZShzdHJ1Y3QgaW5wdXRfaGFuZGxlICopOwogCi1pbnQgaW5wdXRfYWNjZXB0X3Byb2Nlc3Moc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBpbnQgaW5wdXRfZmx1c2hfZGV2aWNlKHN0cnVjdCBpbnB1dF9oYW5kbGUqIGhhbmRsZSwgc3RydWN0IGZpbGUqIGZpbGUpOwogCiB2b2lkIGlucHV0X2V2ZW50KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOwordm9pZCBpbnB1dF9pbmplY3RfZXZlbnQoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9yZXBvcnRfa2V5KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9wcmlvLmggYi9pbmNsdWRlL2xpbnV4L2lvcHJpby5oCmluZGV4IDg4ZDU5NjEuLjhlMjA0MmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9wcmlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9pb3ByaW8uaApAQCAtNTksMjcgKzU5LDYgQEAKIC8qCiAgKiBGb3IgaW5oZXJpdGFuY2UsIHJldHVybiB0aGUgaGlnaGVzdCBvZiB0aGUgdHdvIGdpdmVuIHByaW9yaXRpZXMKICAqLwotc3RhdGljIGlubGluZSBpbnQgaW9wcmlvX2Jlc3QodW5zaWduZWQgc2hvcnQgYXByaW8sIHVuc2lnbmVkIHNob3J0IGJwcmlvKQotewotCXVuc2lnbmVkIHNob3J0IGFjbGFzcyA9IElPUFJJT19QUklPX0NMQVNTKGFwcmlvKTsKLQl1bnNpZ25lZCBzaG9ydCBiY2xhc3MgPSBJT1BSSU9fUFJJT19DTEFTUyhicHJpbyk7Ci0KLQlpZiAoIWlvcHJpb192YWxpZChhcHJpbykpCi0JCXJldHVybiBicHJpbzsKLQlpZiAoIWlvcHJpb192YWxpZChicHJpbykpCi0JCXJldHVybiBhcHJpbzsKLQotCWlmIChhY2xhc3MgPT0gSU9QUklPX0NMQVNTX05PTkUpCi0JCWFjbGFzcyA9IElPUFJJT19DTEFTU19CRTsKLQlpZiAoYmNsYXNzID09IElPUFJJT19DTEFTU19OT05FKQotCQliY2xhc3MgPSBJT1BSSU9fQ0xBU1NfQkU7Ci0KLQlpZiAoYWNsYXNzID09IGJjbGFzcykKLQkJcmV0dXJuIG1pbihhcHJpbywgYnByaW8pOwotCWlmIChhY2xhc3MgPiBiY2xhc3MpCi0JCXJldHVybiBicHJpbzsKLQllbHNlCi0JCXJldHVybiBhcHJpbzsKLX0KK2V4dGVybiBpbnQgaW9wcmlvX2Jlc3QodW5zaWduZWQgc2hvcnQgYXByaW8sIHVuc2lnbmVkIHNob3J0IGJwcmlvKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBiNDhlYWUzLi5mYmY2ZDkwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTQ3LDggKzQ3LDggQEAKICNkZWZpbmUgSVJRX1dBSVRJTkcJCTB4MDAyMDAwMDAJLyogSVJRIG5vdCB5ZXQgc2VlbiAtIGZvciBhdXRvZGV0ZWN0aW9uICovCiAjZGVmaW5lIElSUV9MRVZFTAkJMHgwMDQwMDAwMAkvKiBJUlEgbGV2ZWwgdHJpZ2dlcmVkICovCiAjZGVmaW5lIElSUV9NQVNLRUQJCTB4MDA4MDAwMDAJLyogSVJRIG1hc2tlZCAtIHNob3VsZG4ndCBiZSBzZWVuIGFnYWluICovCisjZGVmaW5lIElSUV9QRVJfQ1BVCQkweDAxMDAwMDAwCS8qIElSUSBpcyBwZXIgQ1BVICovCiAjaWZkZWYgQ09ORklHX0lSUV9QRVJfQ1BVCi0jIGRlZmluZSBJUlFfUEVSX0NQVQkJMHgwMTAwMDAwMAkvKiBJUlEgaXMgcGVyIENQVSAqLwogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKICNlbHNlCiAjIGRlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpIDAKQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgSVJRX05PUkVRVUVTVAkJMHgwNDAwMDAwMAkvKiBJUlEgY2Fubm90IGJlIHJlcXVlc3RlZCAqLwogI2RlZmluZSBJUlFfTk9BVVRPRU4JCTB4MDgwMDAwMDAJLyogSVJRIHdpbGwgbm90IGJlIGVuYWJsZWQgb24gcmVxdWVzdCBpcnEgKi8KICNkZWZpbmUgSVJRX0RFTEFZRURfRElTQUJMRQkweDEwMDAwMDAwCS8qIElSUSBkaXNhYmxlIChtYXNraW5nKSBoYXBwZW5zIGRlbGF5ZWQuICovCisjZGVmaW5lIElSUV9XQUtFVVAJCTB4MjAwMDAwMDAJLyogSVJRIHRyaWdnZXJzIHN5c3RlbSB3YWtldXAgKi8KIAogc3RydWN0IHByb2NfZGlyX2VudHJ5OwogCkBAIC0xMjQsNiArMTI1LDcgQEAKICAqIEBhY3Rpb246CQl0aGUgaXJxIGFjdGlvbiBjaGFpbgogICogQHN0YXR1czoJCXN0YXR1cyBpbmZvcm1hdGlvbgogICogQGRlcHRoOgkJZGlzYWJsZS1kZXB0aCwgZm9yIG5lc3RlZCBpcnFfZGlzYWJsZSgpIGNhbGxzCisgKiBAd2FrZV9kZXB0aDoJCWVuYWJsZSBkZXB0aCwgZm9yIG11bHRpcGxlIHNldF9pcnFfd2FrZSgpIGNhbGxlcnMKICAqIEBpcnFfY291bnQ6CQlzdGF0cyBmaWVsZCB0byBkZXRlY3Qgc3RhbGxlZCBpcnFzCiAgKiBAaXJxc191bmhhbmRsZWQ6CXN0YXRzIGZpZWxkIGZvciBzcHVyaW91cyB1bmhhbmRsZWQgaW50ZXJydXB0cwogICogQGxvY2s6CQlsb2NraW5nIGZvciBTTVAKQEAgLTE0Nyw2ICsxNDksNyBAQAogCXVuc2lnbmVkIGludAkJc3RhdHVzOwkJLyogSVJRIHN0YXR1cyAqLwogCiAJdW5zaWduZWQgaW50CQlkZXB0aDsJCS8qIG5lc3RlZCBpcnEgZGlzYWJsZXMgKi8KKwl1bnNpZ25lZCBpbnQJCXdha2VfZGVwdGg7CS8qIG5lc3RlZCB3YWtlIGVuYWJsZXMgKi8KIAl1bnNpZ25lZCBpbnQJCWlycV9jb3VudDsJLyogRm9yIGRldGVjdGluZyBicm9rZW4gSVJRcyAqLwogCXVuc2lnbmVkIGludAkJaXJxc191bmhhbmRsZWQ7CiAJc3BpbmxvY2tfdAkJbG9jazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvamJkLmggYi9pbmNsdWRlL2xpbnV4L2piZC5oCmluZGV4IDIwZWIzNDQuLmEwNGMxNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9qYmQuaApAQCAtNzIsNiArNzIsOSBAQAogI2VuZGlmCiAKIGV4dGVybiB2b2lkICogX19qYmRfa21hbGxvYyAoY29uc3QgY2hhciAqd2hlcmUsIHNpemVfdCBzaXplLCBnZnBfdCBmbGFncywgaW50IHJldHJ5KTsKK2V4dGVybiB2b2lkICogamJkX3NsYWJfYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKK2V4dGVybiB2b2lkIGpiZF9zbGFiX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisKICNkZWZpbmUgamJkX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpIFwKIAlfX2piZF9rbWFsbG9jKF9fRlVOQ1RJT05fXywgKHNpemUpLCAoZmxhZ3MpLCBqb3VybmFsX29vbV9yZXRyeSkKICNkZWZpbmUgamJkX3JlcF9rbWFsbG9jKHNpemUsIGZsYWdzKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ppZmZpZXMuaCBiL2luY2x1ZGUvbGludXgvamlmZmllcy5oCmluZGV4IDA0MzM3NjkuLjMyOWViY2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamlmZmllcy5oCisrKyBiL2luY2x1ZGUvbGludXgvamlmZmllcy5oCkBAIC00Nyw4ICs0Nyw4IEBACiAgKiAgIC0gKE5PTSAvIERFTikgZml0cyBpbiAoMzIgLSBMU0gpIGJpdHMuCiAgKiAgIC0gKE5PTSAlIERFTikgZml0cyBpbiAoMzIgLSBMU0gpIGJpdHMuCiAgKi8KLSNkZWZpbmUgU0hfRElWKE5PTSxERU4sTFNIKSAoICAgKChOT00gLyBERU4pIDw8IExTSCkgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKChOT00gJSBERU4pIDw8IExTSCkgKyBERU4gLyAyKSAvIERFTikKKyNkZWZpbmUgU0hfRElWKE5PTSxERU4sTFNIKSAoICAgKCgoTk9NKSAvIChERU4pKSA8PCAoTFNIKSkgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoKCgoTk9NKSAlIChERU4pKSA8PCAoTFNIKSkgKyAoREVOKSAvIDIpIC8gKERFTikpCiAKIC8qIEhaIGlzIHRoZSByZXF1ZXN0ZWQgdmFsdWUuIEFDVEhaIGlzIGFjdHVhbCBIWiAoIjw8IDgiIGlzIGZvciBhY2N1cmFjeSkgKi8KICNkZWZpbmUgQUNUSFogKFNIX0RJViAoQ0xPQ0tfVElDS19SQVRFLCBMQVRDSCwgOCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaAppbmRleCAxODFjNjljLi44NTFhYTFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTIxMCw2ICsyMTAsNyBAQAogZXh0ZXJuIHZvaWQgZHVtcF9zdGFjayh2b2lkKTsKIAogI2lmZGVmIERFQlVHCisvKiBJZiB5b3UgYXJlIHdyaXRpbmcgYSBkcml2ZXIsIHBsZWFzZSB1c2UgZGV2X2RiZyBpbnN0ZWFkICovCiAjZGVmaW5lIHByX2RlYnVnKGZtdCxhcmcuLi4pIFwKIAlwcmludGsoS0VSTl9ERUJVRyBmbXQsIyNhcmcpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rb2JqZWN0LmggYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAppbmRleCAwNTAzYjJlLi4yZDIyOTMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2tvYmplY3QuaApAQCAtNDYsOCArNDYsNiBAQAogCUtPQkpfVU1PVU5UCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwNSwJLyogdW1vdW50IGV2ZW50IGZvciBibG9jayBkZXZpY2VzIChicm9rZW4pICovCiAJS09CSl9PRkZMSU5FCT0gKF9fZm9yY2Uga29iamVjdF9hY3Rpb25fdCkgMHgwNiwJLyogZGV2aWNlIG9mZmxpbmUgKi8KIAlLT0JKX09OTElORQk9IChfX2ZvcmNlIGtvYmplY3RfYWN0aW9uX3QpIDB4MDcsCS8qIGRldmljZSBvbmxpbmUgKi8KLQlLT0JKX1VORE9DSwk9IChfX2ZvcmNlIGtvYmplY3RfYWN0aW9uX3QpIDB4MDgsIAkvKiB1bmRvY2tpbmcgKi8KLQlLT0JKX0RPQ0sJPSAoX19mb3JjZSBrb2JqZWN0X2FjdGlvbl90KSAweDA5LAkvKiBkb2NrICovCiB9OwogCiBzdHJ1Y3Qga29iamVjdCB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t0aW1lLmggYi9pbmNsdWRlL2xpbnV4L2t0aW1lLmgKaW5kZXggZWQzMzk2ZC4uODRlZWVjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rdGltZS5oCisrKyBiL2luY2x1ZGUvbGludXgva3RpbWUuaApAQCAtNTYsNyArNTYsOCBAQAogI2VuZGlmCiB9IGt0aW1lX3Q7CiAKLSNkZWZpbmUgS1RJTUVfTUFYCQkJKH4oKHU2NCkxIDw8IDYzKSkKKyNkZWZpbmUgS1RJTUVfTUFYCQkJKChzNjQpfigodTY0KTEgPDwgNjMpKQorI2RlZmluZSBLVElNRV9TRUNfTUFYCQkJKEtUSU1FX01BWCAvIE5TRUNfUEVSX1NFQykKIAogLyoKICAqIGt0aW1lX3QgZGVmaW5pdGlvbnMgd2hlbiB1c2luZyB0aGUgNjQtYml0IHNjYWxhciByZXByZXNlbnRhdGlvbjoKQEAgLTczLDYgKzc0LDEwIEBACiAgKi8KIHN0YXRpYyBpbmxpbmUga3RpbWVfdCBrdGltZV9zZXQoY29uc3QgbG9uZyBzZWNzLCBjb25zdCB1bnNpZ25lZCBsb25nIG5zZWNzKQogeworI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQorCWlmICh1bmxpa2VseShzZWNzID49IEtUSU1FX1NFQ19NQVgpKQorCQlyZXR1cm4gKGt0aW1lX3QpeyAudHY2NCA9IEtUSU1FX01BWCB9OworI2VuZGlmCiAJcmV0dXJuIChrdGltZV90KSB7IC50djY0ID0gKHM2NClzZWNzICogTlNFQ19QRVJfU0VDICsgKHM2NCluc2VjcyB9OwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oIGIvaW5jbHVkZS9saW51eC9saWJhdGEuaAppbmRleCA2Y2M0OTdhLi42NmMzMTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpYmF0YS5oCisrKyBiL2luY2x1ZGUvbGludXgvbGliYXRhLmgKQEAgLTI2NSwxMiArMjY1LDE0IEBACiAKIAkvKiBhdGFfZWhfaW5mby0+ZmxhZ3MgKi8KIAlBVEFfRUhJX0hPVFBMVUdHRUQJPSAoMSA8PCAwKSwgIC8qIGNvdWxkIGhhdmUgYmVlbiBob3RwbHVnZ2VkICovCi0JQVRBX0VISV9SRVNVTUVfTElOSwk9ICgxIDw8IDEpLCAgLyogbmVlZCB0byByZXN1bWUgbGluayAqLworCUFUQV9FSElfUkVTVU1FX0xJTksJPSAoMSA8PCAxKSwgIC8qIHJlc3VtZSBsaW5rIChyZXNldCBtb2RpZmllcikgKi8KIAlBVEFfRUhJX05PX0FVVE9QU1kJPSAoMSA8PCAyKSwgIC8qIG5vIGF1dG9wc3kgKi8KIAlBVEFfRUhJX1FVSUVUCQk9ICgxIDw8IDMpLCAgLyogYmUgcXVpZXQgKi8KIAogCUFUQV9FSElfRElEX1JFU0VUCT0gKDEgPDwgMTYpLCAvKiBhbHJlYWR5IHJlc2V0IHRoaXMgcG9ydCAqLwogCisJQVRBX0VISV9SRVNFVF9NT0RJRklFUl9NQVNLID0gQVRBX0VISV9SRVNVTUVfTElOSywKKwogCS8qIG1heCByZXBlYXQgaWYgZXJyb3IgY29uZGl0aW9uIGlzIHN0aWxsIHNldCBhZnRlciAtPmVycm9yX2hhbmRsZXIgKi8KIAlBVEFfRUhfTUFYX1JFUEVBVAk9IDUsCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaCBiL2luY2x1ZGUvbGludXgvbG9ja2QvbG9ja2QuaAppbmRleCBhYTRmZTkwLi4wZDkyYzQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkL2xvY2tkLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZC9sb2NrZC5oCkBAIC0xMjMsNyArMTIzLDYgQEAKIAl1bnNpZ25lZCBpbnQJCWJfaWQ7CQkvKiBibG9jayBpZCAqLwogCXVuc2lnbmVkIGNoYXIJCWJfcXVldWVkOwkvKiByZS1xdWV1ZWQgKi8KIAl1bnNpZ25lZCBjaGFyCQliX2dyYW50ZWQ7CS8qIFZGUyBncmFudGVkIGxvY2sgKi8KLQl1bnNpZ25lZCBjaGFyCQliX2RvbmU7CQkvKiBjYWxsYmFjayBjb21wbGV0ZSAqLwogCXN0cnVjdCBubG1fZmlsZSAqCWJfZmlsZTsJCS8qIGZpbGUgaW4gcXVlc3Rpb24gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA5OTA5NTdlLi5mMGIxMzVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0zMzYsNiArMzM2LDcgQEAKIH0KIAogdm9pZCBwdXRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSk7Cit2b2lkIHB1dF9wYWdlc19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VzKTsKIAogdm9pZCBzcGxpdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmggYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKaW5kZXggYzFmMDIxZS4uYmEwOTVhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaApAQCAtNzcsNyArNzcsNyBAQAogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJc3RydWN0IGNsYXNzX2RldmljZQljbGFzc19kZXY7CiAJaW50CQkJaW5kZXg7Ci0Jc3RydWN0IG1tY19ob3N0X29wcwkqb3BzOworCWNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgKm9wczsKIAl1bnNpZ25lZCBpbnQJCWZfbWluOwogCXVuc2lnbmVkIGludAkJZl9tYXg7CiAJdTMyCQkJb2NyX2F2YWlsOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmggYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAppbmRleCAwM2ExNGEzLi42MjdlMmMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9tbWMuaApAQCAtMTA1LDYgKzEwNSw4IEBACiBleHRlcm4gaW50IG1tY193YWl0X2Zvcl9hcHBfY21kKHN0cnVjdCBtbWNfaG9zdCAqLCB1bnNpZ25lZCBpbnQsCiAJc3RydWN0IG1tY19jb21tYW5kICosIGludCk7CiAKK2V4dGVybiB2b2lkIG1tY19zZXRfZGF0YV90aW1lb3V0KHN0cnVjdCBtbWNfZGF0YSAqLCBjb25zdCBzdHJ1Y3QgbW1jX2NhcmQgKiwgaW50KTsKKwogZXh0ZXJuIGludCBfX21tY19jbGFpbV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKIAogc3RhdGljIGlubGluZSB2b2lkIG1tY19jbGFpbV9ob3N0KHN0cnVjdCBtbWNfaG9zdCAqaG9zdCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDY1NmI1ODguLmY0NTE2M2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNzcsNiArNzcsNyBAQAogc3RydWN0IHBlcl9jcHVfcGFnZXNldCB7CiAJc3RydWN0IHBlcl9jcHVfcGFnZXMgcGNwWzJdOwkvKiAwOiBob3QuICAxOiBjb2xkICovCiAjaWZkZWYgQ09ORklHX1NNUAorCXM4IHN0YXRfdGhyZXNob2xkOwogCXM4IHZtX3N0YXRfZGlmZltOUl9WTV9aT05FX1NUQVRfSVRFTVNdOwogI2VuZGlmCiB9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAppbmRleCBmNjk3NzcwLi5mN2NhMGIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKQEAgLTE0OCw2ICsxNDgsMTcgQEAKICNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfVFlQRQkJMHgwNAogI2RlZmluZSBDQ1dfREVWSUNFX0lEX01BVENIX0RFVklDRV9NT0RFTAkweDA4CiAKKy8qIHMzOTAgQVAgYnVzIGRldmljZXMgKi8KK3N0cnVjdCBhcF9kZXZpY2VfaWQgeworCV9fdTE2IG1hdGNoX2ZsYWdzOwkvKiB3aGljaCBmaWVsZHMgdG8gbWF0Y2ggYWdhaW5zdCAqLworCV9fdTggZGV2X3R5cGU7CQkvKiBkZXZpY2UgdHlwZSAqLworCV9fdTggcGFkMTsKKwlfX3UzMiBwYWQyOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOworfTsKKworI2RlZmluZSBBUF9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX1RZUEUJCTB4MDEKKwogCiAjZGVmaW5lIFBOUF9JRF9MRU4JOAogI2RlZmluZSBQTlBfTUFYX0RFVklDRVMJOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tdGQvY2ZpLmggYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAppbmRleCAwOWJmYWU2Li4xMjM5NDhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaAorKysgYi9pbmNsdWRlL2xpbnV4L210ZC9jZmkuaApAQCAtMTk5LDYgKzE5OSwxOCBAQAogCXVpbnQ4X3QgIFRvcEJvdHRvbTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKKy8qIFZlbmRvci1TcGVjaWZpYyBQUkkgZm9yIEF0bWVsIGNoaXBzIChjb21tYW5kIHNldCAweDAwMDIpICovCisKK3N0cnVjdCBjZmlfcHJpX2F0bWVsIHsKKwl1aW50OF90IHByaVszXTsKKwl1aW50OF90IE1ham9yVmVyc2lvbjsKKwl1aW50OF90IE1pbm9yVmVyc2lvbjsKKwl1aW50OF90IEZlYXR1cmVzOworCXVpbnQ4X3QgQm90dG9tQm9vdDsKKwl1aW50OF90IEJ1cnN0TW9kZTsKKwl1aW50OF90IFBhZ2VNb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKwogc3RydWN0IGNmaV9wcmlfcXVlcnkgewogCXVpbnQ4X3QgIE51bUZpZWxkczsKIAl1aW50MzJfdCBQcm90RmllbGRbMV07IC8qIE5vdCBob3N0IG9yZGVyZWQgKi8KQEAgLTQ2NCw2ICs0NzYsNyBAQAogI2RlZmluZSBDRklfSURfQU5ZICAweGZmZmYKIAogI2RlZmluZSBDRklfTUZSX0FNRCAweDAwMDEKKyNkZWZpbmUgQ0ZJX01GUl9BVE1FTCAweDAwMUYKICNkZWZpbmUgQ0ZJX01GUl9TVCAgMHgwMDIwIAkvKiBTVE1pY3JvZWxlY3Ryb25pY3MgKi8KIAogdm9pZCBjZmlfZml4dXAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBjZmlfZml4dXAqIGZpeHVwcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA3NWYwMmQ4Li5hMmU3NDczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTMyMCw2ICszMjAsOSBAQAogI2RlZmluZSBORVRJRl9GX1RTT19FQ04JCShTS0JfR1NPX1RDUF9FQ04gPDwgTkVUSUZfRl9HU09fU0hJRlQpCiAjZGVmaW5lIE5FVElGX0ZfVFNPNgkJKFNLQl9HU09fVENQVjYgPDwgTkVUSUZfRl9HU09fU0hJRlQpCiAKKwkvKiBMaXN0IG9mIGZlYXR1cmVzIHdpdGggc29mdHdhcmUgZmFsbGJhY2tzLiAqLworI2RlZmluZSBORVRJRl9GX0dTT19TT0ZUV0FSRQkoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTT19FQ04gfCBORVRJRl9GX1RTTzYpCisKICNkZWZpbmUgTkVUSUZfRl9HRU5fQ1NVTQkoTkVUSUZfRl9OT19DU1VNIHwgTkVUSUZfRl9IV19DU1VNKQogI2RlZmluZSBORVRJRl9GX0FMTF9DU1VNCShORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX0dFTl9DU1VNKQogCkBAIC0zMzksNyArMzQyLDcgQEAKIAkvKiBJbnN0YW5jZSBkYXRhIG1hbmFnZWQgYnkgdGhlIGNvcmUgb2YgV2lyZWxlc3MgRXh0ZW5zaW9ucy4gKi8KIAlzdHJ1Y3QgaXdfcHVibGljX2RhdGEgKgl3aXJlbGVzc19kYXRhOwogCi0Jc3RydWN0IGV0aHRvb2xfb3BzICpldGh0b29sX29wczsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKmV0aHRvb2xfb3BzOwogCiAJLyoKIAkgKiBUaGlzIG1hcmtzIHRoZSBlbmQgb2YgdGhlICJ2aXNpYmxlIiBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUuIEFsbApAQCAtMTAxMiw2ICsxMDE1LDMwIEBACiAJCXVubGlrZWx5KHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX0hXKSk7CiB9CiAKKy8qIE9uIGJvbmRpbmcgc2xhdmVzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnRseSBhY3RpdmUgc2xhdmUsIHN1cHByZXNzCisgKiBkdXBsaWNhdGVzIGV4Y2VwdCBmb3IgODAyLjNhZCBFVEhfUF9TTE9XIGFuZCBhbGIgbm9uLW1jYXN0L2JjYXN0LgorICovCitzdGF0aWMgaW5saW5lIGludCBza2JfYm9uZF9zaG91bGRfZHJvcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBza2ItPmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFzdGVyID0gZGV2LT5tYXN0ZXI7CisKKwlpZiAobWFzdGVyICYmCisJICAgIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfSU5BQ1RJVkUpKSB7CisJCWlmIChtYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgeworCQkJaWYgKHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX0JST0FEQ0FTVCAmJgorCQkJICAgIHNrYi0+cGt0X3R5cGUgIT0gUEFDS0VUX01VTFRJQ0FTVCkKKwkJCQlyZXR1cm4gMDsKKwkJfQorCQlpZiAobWFzdGVyLT5wcml2X2ZsYWdzICYgSUZGX01BU1RFUl84MDIzQUQgJiYKKwkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9TTE9XKSkKKwkJCXJldHVybiAwOworCisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmCS8qIF9MSU5VWF9ERVZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCmluZGV4IGQwNjMxMWEuLjlhMjg1Y2VjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCkBAIC0xLDExICsxLDM4IEBACi1oZWFkZXIteSA6PSBuZl9jb25udHJhY2tfc2N0cC5oIG5mX2Nvbm50cmFja190dXBsZV9jb21tb24uaAkJXAotCSAgICBuZm5ldGxpbmtfY29ubnRyYWNrLmggbmZuZXRsaW5rX2xvZy5oIG5mbmV0bGlua19xdWV1ZS5oCVwKLQkgICAgeHRfQ0xBU1NJRlkuaCB4dF9jb21tZW50LmggeHRfY29ubmJ5dGVzLmggeHRfY29ubm1hcmsuaAlcCi0JICAgIHh0X0NPTk5NQVJLLmggeHRfY29ubnRyYWNrLmggeHRfZGNjcC5oIHh0X2VzcC5oCQlcCi0JICAgIHh0X2hlbHBlci5oIHh0X2xlbmd0aC5oIHh0X2xpbWl0LmggeHRfbWFjLmggeHRfbWFyay5oCVwKLQkgICAgeHRfTUFSSy5oIHh0X211bHRpcG9ydC5oIHh0X05GUVVFVUUuaCB4dF9wa3R0eXBlLmgJCVwKLQkgICAgeHRfcG9saWN5LmggeHRfcmVhbG0uaCB4dF9zY3RwLmggeHRfc3RhdGUuaCB4dF9zdHJpbmcuaAlcCi0JICAgIHh0X3RjcG1zcy5oIHh0X3RjcHVkcC5oCitoZWFkZXIteSArPSBuZl9jb25udHJhY2tfc2N0cC5oCitoZWFkZXIteSArPSBuZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmgKK2hlYWRlci15ICs9IG5mbmV0bGlua19jb25udHJhY2suaAoraGVhZGVyLXkgKz0gbmZuZXRsaW5rX2xvZy5oCitoZWFkZXIteSArPSBuZm5ldGxpbmtfcXVldWUuaAoraGVhZGVyLXkgKz0geHRfQ0xBU1NJRlkuaAoraGVhZGVyLXkgKz0geHRfY29tbWVudC5oCitoZWFkZXIteSArPSB4dF9jb25uYnl0ZXMuaAoraGVhZGVyLXkgKz0geHRfY29ubm1hcmsuaAoraGVhZGVyLXkgKz0geHRfQ09OTk1BUksuaAoraGVhZGVyLXkgKz0geHRfY29ubnRyYWNrLmgKK2hlYWRlci15ICs9IHh0X2RjY3AuaAoraGVhZGVyLXkgKz0geHRfZXNwLmgKK2hlYWRlci15ICs9IHh0X2hlbHBlci5oCitoZWFkZXIteSArPSB4dF9sZW5ndGguaAoraGVhZGVyLXkgKz0geHRfbGltaXQuaAoraGVhZGVyLXkgKz0geHRfbWFjLmgKK2hlYWRlci15ICs9IHh0X21hcmsuaAoraGVhZGVyLXkgKz0geHRfTUFSSy5oCitoZWFkZXIteSArPSB4dF9tdWx0aXBvcnQuaAoraGVhZGVyLXkgKz0geHRfTkZRVUVVRS5oCitoZWFkZXIteSArPSB4dF9wa3R0eXBlLmgKK2hlYWRlci15ICs9IHh0X3BvbGljeS5oCitoZWFkZXIteSArPSB4dF9yZWFsbS5oCitoZWFkZXIteSArPSB4dF9zY3RwLmgKK2hlYWRlci15ICs9IHh0X3N0YXRlLmgKK2hlYWRlci15ICs9IHh0X3N0cmluZy5oCitoZWFkZXIteSArPSB4dF90Y3Btc3MuaAoraGVhZGVyLXkgKz0geHRfdGNwdWRwLmgKK2hlYWRlci15ICs9IHh0X1NFQ01BUksuaAoraGVhZGVyLXkgKz0geHRfQ09OTlNFQ01BUksuaAogCi11bmlmZGVmLXkgOj0gbmZfY29ubnRyYWNrX2NvbW1vbi5oIG5mX2Nvbm50cmFja19mdHAuaAkJXAotCW5mX2Nvbm50cmFja190Y3AuaCBuZm5ldGxpbmsuaCB4X3RhYmxlcy5oIHh0X3BoeXNkZXYuaAordW5pZmRlZi15ICs9IG5mX2Nvbm50cmFja19jb21tb24uaAordW5pZmRlZi15ICs9IG5mX2Nvbm50cmFja19mdHAuaAordW5pZmRlZi15ICs9IG5mX2Nvbm50cmFja190Y3AuaAordW5pZmRlZi15ICs9IG5mbmV0bGluay5oCit1bmlmZGVmLXkgKz0geF90YWJsZXMuaAordW5pZmRlZi15ICs9IHh0X3BoeXNkZXYuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9LYnVpbGQKaW5kZXggMTk4ZWM1ZS4uNGYxM2RmYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvS2J1aWxkCkBAIC0xLDIgKzEsMyBAQAotaGVhZGVyLXkgOj0gYXJwdF9tYW5nbGUuaAotdW5pZmRlZi15IDo9IGFycF90YWJsZXMuaAoraGVhZGVyLXkgKz0gYXJwdF9tYW5nbGUuaAorCit1bmlmZGVmLXkgKz0gYXJwX3RhYmxlcy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oCmluZGV4IDMxZjAyYmEwMy4uNDI3YzY3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKQEAgLTYsNyArNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KICNpZiBkZWZpbmVkKF9fS0VSTkVMX18pICYmIGRlZmluZWQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpCi0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjZW5kaWYKIApAQCAtNDksMTUgKzQ4LDI1IEBACiAKIC8qIE9ubHkgdXNlZCBpbiBicl9mb3J3YXJkLmMgKi8KIHN0YXRpYyBpbmxpbmUKLXZvaWQgbmZfYnJpZGdlX21heWJlX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCitpbnQgbmZfYnJpZGdlX21heWJlX2NvcHlfaGVhZGVyKHN0cnVjdCBza19idWZmICpza2IpCiB7CisJaW50IGVycjsKKwogCWlmIChza2ItPm5mX2JyaWRnZSkgewogCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKSkgeworCQkJZXJyID0gc2tiX2Nvdyhza2IsIDE4KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKIAkJCW1lbWNweShza2ItPmRhdGEgLSAxOCwgc2tiLT5uZl9icmlkZ2UtPmRhdGEsIDE4KTsKIAkJCXNrYl9wdXNoKHNrYiwgNCk7Ci0JCX0gZWxzZQorCQl9IGVsc2UgeworCQkJZXJyID0gc2tiX2Nvdyhza2IsIDE2KTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKIAkJCW1lbWNweShza2ItPmRhdGEgLSAxNiwgc2tiLT5uZl9icmlkZ2UtPmRhdGEsIDE2KTsKKwkJfQogCX0KKwlyZXR1cm4gMDsKIH0KIAogLyogVGhpcyBpcyBjYWxsZWQgYnkgdGhlIElQIGZyYWdtZW50aW5nIGNvZGUgYW5kIGl0IGVuc3VyZXMgdGhlcmUgaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvS2J1aWxkCmluZGV4IDViMWFiYTYuLjc2ZmY0YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2JyaWRnZS9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL0tidWlsZApAQCAtMSw0ICsxLDE3IEBACi1oZWFkZXIteSArPSBlYnRfYW1vbmcuaCBlYnRfYXJwLmggZWJ0X2FycHJlcGx5LmggZWJ0X2lwLmggZWJ0X2xpbWl0LmgJXAotCWVidF9sb2cuaCBlYnRfbWFya19tLmggZWJ0X21hcmtfdC5oIGVidF9uYXQuaCBlYnRfcGt0dHlwZS5oCVwKLQllYnRfcmVkaXJlY3QuaCBlYnRfc3RwLmggZWJ0X3Vsb2cuaCBlYnRfdmxhbi5oCi11bmlmZGVmLXkgOj0gZWJ0YWJsZXMuaCBlYnRfODAyXzMuaAoraGVhZGVyLXkgKz0gZWJ0X2Ftb25nLmgKK2hlYWRlci15ICs9IGVidF9hcnAuaAoraGVhZGVyLXkgKz0gZWJ0X2FycHJlcGx5LmgKK2hlYWRlci15ICs9IGVidF9pcC5oCitoZWFkZXIteSArPSBlYnRfbGltaXQuaAoraGVhZGVyLXkgKz0gZWJ0X2xvZy5oCitoZWFkZXIteSArPSBlYnRfbWFya19tLmgKK2hlYWRlci15ICs9IGVidF9tYXJrX3QuaAoraGVhZGVyLXkgKz0gZWJ0X25hdC5oCitoZWFkZXIteSArPSBlYnRfcGt0dHlwZS5oCitoZWFkZXIteSArPSBlYnRfcmVkaXJlY3QuaAoraGVhZGVyLXkgKz0gZWJ0X3N0cC5oCitoZWFkZXIteSArPSBlYnRfdWxvZy5oCitoZWFkZXIteSArPSBlYnRfdmxhbi5oCisKK3VuaWZkZWYteSArPSBlYnRhYmxlcy5oCit1bmlmZGVmLXkgKz0gZWJ0XzgwMl8zLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQKaW5kZXggMDRlNGQyNy4uNTkxYzFhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9LYnVpbGQKQEAgLTEsMjEgKzEsNjMgQEAKK2hlYWRlci15ICs9IGlwX2Nvbm50cmFja19oZWxwZXIuaAoraGVhZGVyLXkgKz0gaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaAoraGVhZGVyLXkgKz0gaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX3R5cGVzLmgKK2hlYWRlci15ICs9IGlwX2Nvbm50cmFja19wcm90b2NvbC5oCitoZWFkZXIteSArPSBpcF9jb25udHJhY2tfc2N0cC5oCitoZWFkZXIteSArPSBpcF9jb25udHJhY2tfdGNwLmgKK2hlYWRlci15ICs9IGlwX2Nvbm50cmFja190ZnRwLmgKK2hlYWRlci15ICs9IGlwX25hdF9wcHRwLmgKK2hlYWRlci15ICs9IGlwdF9hZGRydHlwZS5oCitoZWFkZXIteSArPSBpcHRfYWguaAoraGVhZGVyLXkgKz0gaXB0X0NMQVNTSUZZLmgKK2hlYWRlci15ICs9IGlwdF9DTFVTVEVSSVAuaAoraGVhZGVyLXkgKz0gaXB0X2NvbW1lbnQuaAoraGVhZGVyLXkgKz0gaXB0X2Nvbm5ieXRlcy5oCitoZWFkZXIteSArPSBpcHRfY29ubm1hcmsuaAoraGVhZGVyLXkgKz0gaXB0X0NPTk5NQVJLLmgKK2hlYWRlci15ICs9IGlwdF9jb25udHJhY2suaAoraGVhZGVyLXkgKz0gaXB0X2RjY3AuaAoraGVhZGVyLXkgKz0gaXB0X2RzY3AuaAoraGVhZGVyLXkgKz0gaXB0X0RTQ1AuaAoraGVhZGVyLXkgKz0gaXB0X2Vjbi5oCitoZWFkZXIteSArPSBpcHRfRUNOLmgKK2hlYWRlci15ICs9IGlwdF9lc3AuaAoraGVhZGVyLXkgKz0gaXB0X2hhc2hsaW1pdC5oCitoZWFkZXIteSArPSBpcHRfaGVscGVyLmgKK2hlYWRlci15ICs9IGlwdF9pcHJhbmdlLmgKK2hlYWRlci15ICs9IGlwdF9sZW5ndGguaAoraGVhZGVyLXkgKz0gaXB0X2xpbWl0LmgKK2hlYWRlci15ICs9IGlwdF9MT0cuaAoraGVhZGVyLXkgKz0gaXB0X21hYy5oCitoZWFkZXIteSArPSBpcHRfbWFyay5oCitoZWFkZXIteSArPSBpcHRfTUFSSy5oCitoZWFkZXIteSArPSBpcHRfbXVsdGlwb3J0LmgKK2hlYWRlci15ICs9IGlwdF9ORlFVRVVFLmgKK2hlYWRlci15ICs9IGlwdF9vd25lci5oCitoZWFkZXIteSArPSBpcHRfcGh5c2Rldi5oCitoZWFkZXIteSArPSBpcHRfcGt0dHlwZS5oCitoZWFkZXIteSArPSBpcHRfcG9saWN5LmgKK2hlYWRlci15ICs9IGlwdF9yZWFsbS5oCitoZWFkZXIteSArPSBpcHRfcmVjZW50LmgKK2hlYWRlci15ICs9IGlwdF9SRUpFQ1QuaAoraGVhZGVyLXkgKz0gaXB0X1NBTUUuaAoraGVhZGVyLXkgKz0gaXB0X3NjdHAuaAoraGVhZGVyLXkgKz0gaXB0X3N0YXRlLmgKK2hlYWRlci15ICs9IGlwdF9zdHJpbmcuaAoraGVhZGVyLXkgKz0gaXB0X3RjcG1zcy5oCitoZWFkZXIteSArPSBpcHRfVENQTVNTLmgKK2hlYWRlci15ICs9IGlwdF90b3MuaAoraGVhZGVyLXkgKz0gaXB0X1RPUy5oCitoZWFkZXIteSArPSBpcHRfdHRsLmgKK2hlYWRlci15ICs9IGlwdF9UVEwuaAoraGVhZGVyLXkgKz0gaXB0X1VMT0cuaAogCi1oZWFkZXIteSA6PSBpcF9jb25udHJhY2tfaGVscGVyLmggaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzX2FzbjEuaAlcCi0JICAgIGlwX2Nvbm50cmFja19oZWxwZXJfaDMyM190eXBlcy5oIGlwX2Nvbm50cmFja19wcm90b2NvbC5oCVwKLQkgICAgaXBfY29ubnRyYWNrX3NjdHAuaCBpcF9jb25udHJhY2tfdGNwLmggaXBfY29ubnRyYWNrX3RmdHAuaAlcCi0JICAgIGlwX25hdF9wcHRwLmggaXB0X2FkZHJ0eXBlLmggaXB0X2FoLmgJXAotCSAgICBpcHRfQ0xBU1NJRlkuaCBpcHRfQ0xVU1RFUklQLmggaXB0X2NvbW1lbnQuaAkJXAotCSAgICBpcHRfY29ubmJ5dGVzLmggaXB0X2Nvbm5tYXJrLmggaXB0X0NPTk5NQVJLLmgJCVwKLQkgICAgaXB0X2Nvbm50cmFjay5oIGlwdF9kY2NwLmggaXB0X2RzY3AuaCBpcHRfRFNDUC5oIGlwdF9lY24uaAlcCi0JICAgIGlwdF9FQ04uaCBpcHRfZXNwLmggaXB0X2hhc2hsaW1pdC5oIGlwdF9oZWxwZXIuaAkJXAotCSAgICBpcHRfaXByYW5nZS5oIGlwdF9sZW5ndGguaCBpcHRfbGltaXQuaCBpcHRfTE9HLmggaXB0X21hYy5oCVwKLQkgICAgaXB0X21hcmsuaCBpcHRfTUFSSy5oIGlwdF9tdWx0aXBvcnQuaCBpcHRfTkZRVUVVRS5oCQlcCi0JICAgIGlwdF9vd25lci5oIGlwdF9waHlzZGV2LmggaXB0X3BrdHR5cGUuaCBpcHRfcG9saWN5LmgJXAotCSAgICBpcHRfcmVhbG0uaCBpcHRfcmVjZW50LmggaXB0X1JFSkVDVC5oIGlwdF9TQU1FLmgJCVwKLQkgICAgaXB0X3NjdHAuaCBpcHRfc3RhdGUuaCBpcHRfc3RyaW5nLmggaXB0X3RjcG1zcy5oCQlcCi0JICAgIGlwdF9UQ1BNU1MuaCBpcHRfdG9zLmggaXB0X1RPUy5oIGlwdF90dGwuaCBpcHRfVFRMLmgJXAotCSAgICBpcHRfVUxPRy5oCi0KLXVuaWZkZWYteSA6PSBpcF9jb25udHJhY2suaCBpcF9jb25udHJhY2tfaDMyMy5oIGlwX2Nvbm50cmFja19pcmMuaAlcCi0JaXBfY29ubnRyYWNrX3BwdHAuaCBpcF9jb25udHJhY2tfcHJvdG9fZ3JlLmgJCQlcCi0JaXBfY29ubnRyYWNrX3R1cGxlLmggaXBfbmF0LmggaXBfbmF0X3J1bGUuaCBpcF9xdWV1ZS5oCQlcCi0JaXBfdGFibGVzLmgKK3VuaWZkZWYteSArPSBpcF9jb25udHJhY2suaAordW5pZmRlZi15ICs9IGlwX2Nvbm50cmFja19oMzIzLmgKK3VuaWZkZWYteSArPSBpcF9jb25udHJhY2tfaXJjLmgKK3VuaWZkZWYteSArPSBpcF9jb25udHJhY2tfcHB0cC5oCit1bmlmZGVmLXkgKz0gaXBfY29ubnRyYWNrX3Byb3RvX2dyZS5oCit1bmlmZGVmLXkgKz0gaXBfY29ubnRyYWNrX3R1cGxlLmgKK3VuaWZkZWYteSArPSBpcF9uYXQuaAordW5pZmRlZi15ICs9IGlwX25hdF9ydWxlLmgKK3VuaWZkZWYteSArPSBpcF9xdWV1ZS5oCit1bmlmZGVmLXkgKz0gaXBfdGFibGVzLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQKaW5kZXggOTEzZGRiZi4uOWRkOTc4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2Ni9LYnVpbGQKQEAgLTEsNiArMSwyMSBAQAotaGVhZGVyLXkgKz0gaXA2dF9ITC5oIGlwNnRfTE9HLmggaXA2dF9NQVJLLmggaXA2dF9SRUpFQ1QuaCBpcDZ0X2FoLmgJXAotCWlwNnRfZXNwLmggaXA2dF9mcmFnLmggaXA2dF9obC5oIGlwNnRfaXB2NmhlYWRlci5oCQlcCi0JaXA2dF9sZW5ndGguaCBpcDZ0X2xpbWl0LmggaXA2dF9tYWMuaCBpcDZ0X21hcmsuaAkJXAotCWlwNnRfbXVsdGlwb3J0LmggaXA2dF9vcHRzLmggaXA2dF9vd25lci5oIGlwNnRfcG9saWN5LmgJCVwKLQlpcDZ0X3BoeXNkZXYuaCBpcDZ0X3J0LmgKLXVuaWZkZWYteSA6PSBpcDZfdGFibGVzLmgKK2hlYWRlci15ICs9IGlwNnRfSEwuaAoraGVhZGVyLXkgKz0gaXA2dF9MT0cuaAoraGVhZGVyLXkgKz0gaXA2dF9NQVJLLmgKK2hlYWRlci15ICs9IGlwNnRfUkVKRUNULmgKK2hlYWRlci15ICs9IGlwNnRfYWguaAoraGVhZGVyLXkgKz0gaXA2dF9lc3AuaAoraGVhZGVyLXkgKz0gaXA2dF9mcmFnLmgKK2hlYWRlci15ICs9IGlwNnRfaGwuaAoraGVhZGVyLXkgKz0gaXA2dF9pcHY2aGVhZGVyLmgKK2hlYWRlci15ICs9IGlwNnRfbGVuZ3RoLmgKK2hlYWRlci15ICs9IGlwNnRfbGltaXQuaAoraGVhZGVyLXkgKz0gaXA2dF9tYWMuaAoraGVhZGVyLXkgKz0gaXA2dF9tYXJrLmgKK2hlYWRlci15ICs9IGlwNnRfbXVsdGlwb3J0LmgKK2hlYWRlci15ICs9IGlwNnRfb3B0cy5oCitoZWFkZXIteSArPSBpcDZ0X293bmVyLmgKK2hlYWRlci15ICs9IGlwNnRfcG9saWN5LmgKK2hlYWRlci15ICs9IGlwNnRfcGh5c2Rldi5oCitoZWFkZXIteSArPSBpcDZ0X3J0LmgKKwordW5pZmRlZi15ICs9IGlwNl90YWJsZXMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggNTVlYTg1My4uNmMyMDY2YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC05LDYgKzksMzYgQEAKICNpZm5kZWYgX0xJTlVYX05GU19GU19ICiAjZGVmaW5lIF9MSU5VWF9ORlNfRlNfSAogCisvKgorICogRW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0IGZvciBuZnMgY2xpZW50LgorICogUmVxdWlyZXMgUlBDX0RFQlVHLgorICovCisjaWZkZWYgUlBDX0RFQlVHCisjIGRlZmluZSBORlNfREVCVUcKKyNlbmRpZgorCisvKiBEZWZhdWx0IHRpbWVvdXQgdmFsdWVzICovCisjZGVmaW5lIE5GU19NQVhfVURQX1RJTUVPVVQJKDYwKkhaKQorI2RlZmluZSBORlNfTUFYX1RDUF9USU1FT1VUCSg2MDAqSFopCisKKy8qCisgKiBzdXBlcmJsb2NrIG1hZ2ljIG51bWJlciBmb3IgTkZTCisgKi8KKyNkZWZpbmUgTkZTX1NVUEVSX01BR0lDCQkJMHg2OTY5CisKKy8qCisgKiBXaGVuIGZsdXNoaW5nIGEgY2x1c3RlciBvZiBkaXJ0eSBwYWdlcywgdGhlcmUgY2FuIGJlIGRpZmZlcmVudAorICogc3RyYXRlZ2llczoKKyAqLworI2RlZmluZSBGTFVTSF9TWU5DCQkxCS8qIGZpbGUgYmVpbmcgc3luY2VkLCBvciBjb250ZW50aW9uICovCisjZGVmaW5lIEZMVVNIX1NUQUJMRQkJNAkvKiBjb21taXQgdG8gc3RhYmxlIHN0b3JhZ2UgKi8KKyNkZWZpbmUgRkxVU0hfTE9XUFJJCQk4CS8qIGxvdyBwcmlvcml0eSBiYWNrZ3JvdW5kIGZsdXNoICovCisjZGVmaW5lIEZMVVNIX0hJR0hQUkkJCTE2CS8qIGhpZ2ggcHJpb3JpdHkgbWVtb3J5IHJlY2xhaW0gZmx1c2ggKi8KKyNkZWZpbmUgRkxVU0hfTk9DT01NSVQJCTMyCS8qIERvbid0IHNlbmQgdGhlIE5GU3YzL3Y0IENPTU1JVCAqLworI2RlZmluZSBGTFVTSF9JTlZBTElEQVRFCTY0CS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUgKi8KKworI2lmZGVmIF9fS0VSTkVMX18KKwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CkBAIC0zMSw0MSArNjEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CiAKIC8qCi0gKiBFbmFibGUgZGVidWdnaW5nIHN1cHBvcnQgZm9yIG5mcyBjbGllbnQuCi0gKiBSZXF1aXJlcyBSUENfREVCVUcuCi0gKi8KLSNpZmRlZiBSUENfREVCVUcKLSMgZGVmaW5lIE5GU19ERUJVRwotI2VuZGlmCi0KLS8qIERlZmF1bHQgdGltZW91dCB2YWx1ZXMgKi8KLSNkZWZpbmUgTkZTX01BWF9VRFBfVElNRU9VVAkoNjAqSFopCi0jZGVmaW5lIE5GU19NQVhfVENQX1RJTUVPVVQJKDYwMCpIWikKLQotLyoKLSAqIHN1cGVyYmxvY2sgbWFnaWMgbnVtYmVyIGZvciBORlMKLSAqLwotI2RlZmluZSBORlNfU1VQRVJfTUFHSUMJCQkweDY5NjkKLQotLyoKICAqIFRoZXNlIGFyZSB0aGUgZGVmYXVsdCBmbGFncyBmb3Igc3dhcCByZXF1ZXN0cwogICovCiAjZGVmaW5lIE5GU19SUENfU1dBUEZMQUdTCQkoUlBDX1RBU0tfU1dBUFBFUnxSUENfVEFTS19ST09UQ1JFRFMpCiAKIC8qCi0gKiBXaGVuIGZsdXNoaW5nIGEgY2x1c3RlciBvZiBkaXJ0eSBwYWdlcywgdGhlcmUgY2FuIGJlIGRpZmZlcmVudAotICogc3RyYXRlZ2llczoKLSAqLwotI2RlZmluZSBGTFVTSF9TWU5DCQkxCS8qIGZpbGUgYmVpbmcgc3luY2VkLCBvciBjb250ZW50aW9uICovCi0jZGVmaW5lIEZMVVNIX1NUQUJMRQkJNAkvKiBjb21taXQgdG8gc3RhYmxlIHN0b3JhZ2UgKi8KLSNkZWZpbmUgRkxVU0hfTE9XUFJJCQk4CS8qIGxvdyBwcmlvcml0eSBiYWNrZ3JvdW5kIGZsdXNoICovCi0jZGVmaW5lIEZMVVNIX0hJR0hQUkkJCTE2CS8qIGhpZ2ggcHJpb3JpdHkgbWVtb3J5IHJlY2xhaW0gZmx1c2ggKi8KLSNkZWZpbmUgRkxVU0hfTk9DT01NSVQJCTMyCS8qIERvbid0IHNlbmQgdGhlIE5GU3YzL3Y0IENPTU1JVCAqLwotI2RlZmluZSBGTFVTSF9JTlZBTElEQVRFCTY0CS8qIEludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUgKi8KLQotI2lmZGVmIF9fS0VSTkVMX18KLQotLyoKICAqIE5GU3YzL3Y0IEFjY2VzcyBtb2RlIGNhY2hlIGVudHJ5CiAgKi8KIHN0cnVjdCBuZnNfYWNjZXNzX2VudHJ5IHsKQEAgLTQyNyw3ICs0MjcsNyBAQAogZXh0ZXJuIHZvaWQgbmZzX3dyaXRlZGF0YV9yZWxlYXNlKHZvaWQgKik7CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORlNfVjMpIHx8IGRlZmluZWQoQ09ORklHX05GU19WNCkKLXN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqbmZzX2NvbW1pdF9hbGxvYyh1bnNpZ25lZCBpbnQgcGFnZWNvdW50KTsKK3N0cnVjdCBuZnNfd3JpdGVfZGF0YSAqbmZzX2NvbW1pdF9hbGxvYyh2b2lkKTsKIHZvaWQgbmZzX2NvbW1pdF9mcmVlKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqcCk7CiAjZW5kaWYKIApAQCAtNDc2LDEwICs0NzYsOSBAQAogfQogCiAvKgotICogQWxsb2NhdGUgYW5kIGZyZWUgbmZzX3dyaXRlX2RhdGEgc3RydWN0dXJlcworICogQWxsb2NhdGUgbmZzX3dyaXRlX2RhdGEgc3RydWN0dXJlcwogICovCi1leHRlcm4gc3RydWN0IG5mc193cml0ZV9kYXRhICpuZnNfd3JpdGVkYXRhX2FsbG9jKHVuc2lnbmVkIGludCBwYWdlY291bnQpOwotZXh0ZXJuIHZvaWQgbmZzX3dyaXRlZGF0YV9mcmVlKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqcCk7CitleHRlcm4gc3RydWN0IG5mc193cml0ZV9kYXRhICpuZnNfd3JpdGVkYXRhX2FsbG9jKHNpemVfdCBsZW4pOwogCiAvKgogICogbGludXgvZnMvbmZzL3JlYWQuYwpAQCAtNDkxLDEwICs0OTAsOSBAQAogZXh0ZXJuIHZvaWQgbmZzX3JlYWRkYXRhX3JlbGVhc2Uodm9pZCAqZGF0YSk7CiAKIC8qCi0gKiBBbGxvY2F0ZSBhbmQgZnJlZSBuZnNfcmVhZF9kYXRhIHN0cnVjdHVyZXMKKyAqIEFsbG9jYXRlIG5mc19yZWFkX2RhdGEgc3RydWN0dXJlcwogICovCi1leHRlcm4gc3RydWN0IG5mc19yZWFkX2RhdGEgKm5mc19yZWFkZGF0YV9hbGxvYyh1bnNpZ25lZCBpbnQgcGFnZWNvdW50KTsKLWV4dGVybiB2b2lkIG5mc19yZWFkZGF0YV9mcmVlKHN0cnVjdCBuZnNfcmVhZF9kYXRhICpwKTsKK2V4dGVybiBzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqbmZzX3JlYWRkYXRhX2FsbG9jKHNpemVfdCBsZW4pOwogCiAvKgogICogbGludXgvZnMvbmZzM3Byb2MuYwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfeGRyLmggYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAppbmRleCAyZDNmYjY0Li40MWU1YTE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25mc194ZHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc194ZHIuaApAQCAtNjU5LDcgKzY1OSw3IEBACiBzdHJ1Y3QgbmZzNF9zZXRjbGllbnRpZCB7CiAJY29uc3QgbmZzNF92ZXJpZmllciAqCQlzY192ZXJpZmllcjsgICAgICAvKiByZXF1ZXN0ICovCiAJdW5zaWduZWQgaW50CQkJc2NfbmFtZV9sZW47Ci0JY2hhcgkJCQlzY19uYW1lWzMyXTsJICAvKiByZXF1ZXN0ICovCisJY2hhcgkJCQlzY19uYW1lWzQ4XTsJICAvKiByZXF1ZXN0ICovCiAJdTMyCQkJCXNjX3Byb2c7ICAgICAgICAgIC8qIHJlcXVlc3QgKi8KIAl1bnNpZ25lZCBpbnQJCQlzY19uZXRpZF9sZW47CiAJY2hhcgkJCQlzY19uZXRpZFs0XTsJICAvKiByZXF1ZXN0ICovCkBAIC03MjksNyArNzI5LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXBhZ2VzOwkvKiBDb2FsZXNjZWQgcmVhZCByZXF1ZXN0cyAqLwogCXN0cnVjdCBuZnNfcGFnZQkJKnJlcTsJLyogbXVsdGkgb3BzIHBlciBuZnNfcGFnZSAqLwogCXN0cnVjdCBwYWdlCQkqKnBhZ2V2ZWM7Ci0JdW5zaWduZWQgaW50CQlucGFnZXM7CS8qIGFjdGl2ZSBwYWdlcyBpbiBwYWdldmVjICovCisJdW5zaWduZWQgaW50CQlucGFnZXM7CS8qIE1heCBsZW5ndGggb2YgcGFnZXZlYyAqLwogCXN0cnVjdCBuZnNfcmVhZGFyZ3MgYXJnczsKIAlzdHJ1Y3QgbmZzX3JlYWRyZXMgIHJlczsKICNpZmRlZiBDT05GSUdfTkZTX1Y0CkBAIC03NDgsNyArNzQ4LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCXBhZ2VzOwkJLyogQ29hbGVzY2VkIHJlcXVlc3RzIHdlIHdpc2ggdG8gZmx1c2ggKi8KIAlzdHJ1Y3QgbmZzX3BhZ2UJCSpyZXE7CQkvKiBtdWx0aSBvcHMgcGVyIG5mc19wYWdlICovCiAJc3RydWN0IHBhZ2UJCSoqcGFnZXZlYzsKLQl1bnNpZ25lZCBpbnQJCW5wYWdlczsJCS8qIGFjdGl2ZSBwYWdlcyBpbiBwYWdldmVjICovCisJdW5zaWduZWQgaW50CQlucGFnZXM7CQkvKiBNYXggbGVuZ3RoIG9mIHBhZ2V2ZWMgKi8KIAlzdHJ1Y3QgbmZzX3dyaXRlYXJncwlhcmdzOwkJLyogYXJndW1lbnQgc3RydWN0ICovCiAJc3RydWN0IG5mc193cml0ZXJlcwlyZXM7CQkvKiByZXN1bHQgc3RydWN0ICovCiAjaWZkZWYgQ09ORklHX05GU19WNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNkL0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmZzZC9LYnVpbGQKaW5kZXggYzhjNTQ1Ni4uZDljNTQ1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L25mc2QvS2J1aWxkCkBAIC0xLDIgKzEsNyBAQAotdW5pZmRlZi15IDo9IGNvbnN0LmggZXhwb3J0Lmggc3RhdHMuaCBzeXNjYWxsLmggbmZzZmguaCBkZWJ1Zy5oIGF1dGguaAotCit1bmlmZGVmLXkgKz0gY29uc3QuaAordW5pZmRlZi15ICs9IGV4cG9ydC5oCit1bmlmZGVmLXkgKz0gc3RhdHMuaAordW5pZmRlZi15ICs9IHN5c2NhbGwuaAordW5pZmRlZi15ICs9IG5mc2ZoLmgKK3VuaWZkZWYteSArPSBkZWJ1Zy5oCit1bmlmZGVmLXkgKz0gYXV0aC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25vZGUuaCBiL2luY2x1ZGUvbGludXgvbm9kZS5oCmluZGV4IDgxZGNlYzguLmJjMDAxYmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbm9kZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbm9kZS5oCkBAIC0zMCwxMiArMzAsMjAgQEAKIAogZXh0ZXJuIGludCByZWdpc3Rlcl9ub2RlKHN0cnVjdCBub2RlICosIGludCwgc3RydWN0IG5vZGUgKik7CiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpOworI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gaW50IHJlZ2lzdGVyX29uZV9ub2RlKGludCBuaWQpOwogZXh0ZXJuIHZvaWQgdW5yZWdpc3Rlcl9vbmVfbm9kZShpbnQgbmlkKTsKLSNpZmRlZiBDT05GSUdfTlVNQQogZXh0ZXJuIGludCByZWdpc3Rlcl9jcHVfdW5kZXJfbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbmlkKTsKIGV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jcHVfdW5kZXJfbm9kZSh1bnNpZ25lZCBpbnQgY3B1LCB1bnNpZ25lZCBpbnQgbmlkKTsKICNlbHNlCitzdGF0aWMgaW5saW5lIGludCByZWdpc3Rlcl9vbmVfbm9kZShpbnQgbmlkKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSBpbnQgdW5yZWdpc3Rlcl9vbmVfbm9kZShpbnQgbmlkKQoreworCXJldHVybiAwOworfQogc3RhdGljIGlubGluZSBpbnQgcmVnaXN0ZXJfY3B1X3VuZGVyX25vZGUodW5zaWduZWQgaW50IGNwdSwgdW5zaWduZWQgaW50IG5pZCkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggYzA5Mzk2ZC4uN2EyNDkxNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTY0OCw2ICs2NDgsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2MgkJMHgwOTYyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTYzCQkweDA5NjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjUJCTB4MDk2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2NgkJMHgwOTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTY4CQkweDA5NjgKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTExCQkweDU1MTEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTEzCQkweDU1MTMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTE3CQkweDU1MTcKQEAgLTEyOTIsNiArMTI5NCw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMAkweDMwOTkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODY1M18wCTB4MzEwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjIyCQkweDMxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNV9VU0JfMgkweDMxMDQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzM0NfMAkweDMxMDkKICNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2MQkJMHgzMTEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1hNMjY2CQkweDMxMTYKQEAgLTE3MjYsNiArMTcyOSw5IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfRE9NRVgJCTB4MTM0YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RPTUVYX0RNWDMxOTFECTB4MDAwMQogCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5UQVNISUVMRAkweDEzNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRBU0hJRUxEX0lTMjAwCTB4MGQ4MAorCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfUVVBVEVDSAkJMHgxMzVDCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9RU0MxMDAJMHgwMDEwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9EU0MxMDAJMHgwMDIwCkBAIC0yMTQyLDYgKzIxNDgsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODIwX1VQX0hCCTB4MjUwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODUwX0hCCTB4MjUzMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODYwX0hCCTB4MjUzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTAxX01DSAkweDI1NGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSEIJMHgyNTYwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVHX0lHCTB4MjU2MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODY1X0hCCTB4MjU3MApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHkuaCBiL2luY2x1ZGUvbGludXgvcGh5LmgKaW5kZXggMzMxNTIxYS4uOTQ0N2E1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BoeS5oCkBAIC0zNzgsNiArMzc4LDcgQEAKIAkJc3RydWN0IG1paV9pb2N0bF9kYXRhICptaWlfZGF0YSwgaW50IGNtZCk7CiBpbnQgcGh5X3N0YXJ0X2ludGVycnVwdHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CiB2b2lkIHBoeV9wcmludF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldik7CitzdHJ1Y3QgcGh5X2RldmljZSogcGh5X2RldmljZV9jcmVhdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsIGludCBwaHlfaWQpOwogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIG1kaW9fYnVzX3R5cGU7CiAjZW5kaWYgLyogX19QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbXUuaCBiL2luY2x1ZGUvbGludXgvcG11LmgKaW5kZXggMmVkODA3ZC4uNzgzMTc3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtdS5oCkBAIC0yMzEsNyArMjMxLDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgcG11X3Bvd2VyX2ZsYWdzOwogCiAvKiBCYWNrbGlnaHQgKi8KLWV4dGVybiBpbnQgZGlzYWJsZV9rZXJuZWxfYmFja2xpZ2h0OwotZXh0ZXJuIHZvaWQgcG11X2JhY2tsaWdodF9pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSopOworZXh0ZXJuIHZvaWQgcG11X2JhY2tsaWdodF9pbml0KHZvaWQpOwogCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL0tidWlsZCBiL2luY2x1ZGUvbGludXgvcmFpZC9LYnVpbGQKaW5kZXggNzNmYTI3YS4uMjQxNWE2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvS2J1aWxkCkBAIC0xICsxLDIgQEAKLWhlYWRlci15ICs9IG1kX3AuaCBtZF91LmgKK2hlYWRlci15ICs9IG1kX3AuaAoraGVhZGVyLXkgKz0gbWRfdS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjYXR0ZXJsaXN0LmggYi9pbmNsdWRlL2xpbnV4L3NjYXR0ZXJsaXN0LmgKaW5kZXggNjZmZjU0NS4uNGVmYmQ5YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2F0dGVybGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2NhdHRlcmxpc3QuaApAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2dfc2V0X2J1ZihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCB2b2lkICpidWYsCitzdGF0aWMgaW5saW5lIHZvaWQgc2dfc2V0X2J1ZihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBjb25zdCB2b2lkICpidWYsCiAJCQkgICAgICB1bnNpZ25lZCBpbnQgYnVmbGVuKQogewogCXNnLT5wYWdlID0gdmlydF90b19wYWdlKGJ1Zik7CkBAIC0xMyw3ICsxMyw3IEBACiAJc2ctPmxlbmd0aCA9IGJ1ZmxlbjsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNnX2luaXRfb25lKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHZvaWQgKmJ1ZiwKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZ19pbml0X29uZShzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBjb25zdCB2b2lkICpidWYsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGJ1ZmxlbikKIHsKIAltZW1zZXQoc2csIDAsIHNpemVvZigqc2cpKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA2YWZhNzJlLi4zNGVkMGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC05OTQsNyArOTk0LDYgQEAKIAkgKi8KIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpzcGxpY2VfcGlwZTsKICNpZmRlZglDT05GSUdfVEFTS19ERUxBWV9BQ0NUCi0Jc3BpbmxvY2tfdCBkZWxheXNfbG9jazsKIAlzdHJ1Y3QgdGFza19kZWxheV9pbmZvICpkZWxheXM7CiAjZW5kaWYKIH07CkBAIC0xNTU4LDYgKzE1NTcsMTQgQEAKIH0KIAogLyoKKyAqIFNvbWV0aW1lcyB3ZSBtYXkgbmVlZCB0byBjYW5jZWwgdGhlIHByZXZpb3VzICdmcmVlemUnIHJlcXVlc3QKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRvX25vdF9mcmVlemUoc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCXAtPmZsYWdzICY9IH5QRl9GUkVFWkU7Cit9CisKKy8qCiAgKiBXYWtlIHVwIGEgZnJvemVuIHByb2Nlc3MKICAqLwogc3RhdGljIGlubGluZSBpbnQgdGhhd19wcm9jZXNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCBmNzUzMDM4Li42YmMyYWFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xMTA5LDYgKzExMDksMTYgQEAKICAqCUBuYW1lIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBzZWN1cml0eSBtb2R1bGUgYmVpbmcgdW5zdGFja2VkLgogICoJQG9wcyBjb250YWlucyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIG9mIHRoZSBtb2R1bGUgdG8gdW5zdGFjay4KICAqIAorICogQHNlY2lkX3RvX3NlY2N0eDoKKyAqCUNvbnZlcnQgc2VjaWQgdG8gc2VjdXJpdHkgY29udGV4dC4KKyAqCUBzZWNpZCBjb250YWlucyB0aGUgc2VjdXJpdHkgSUQuCisgKglAc2VjZGF0YSBjb250YWlucyB0aGUgcG9pbnRlciB0aGF0IHN0b3JlcyB0aGUgY29udmVydGVkIHNlY3VyaXR5IGNvbnRleHQuCisgKgorICogQHJlbGVhc2Vfc2VjY3R4OgorICoJUmVsZWFzZSB0aGUgc2VjdXJpdHkgY29udGV4dC4KKyAqCUBzZWNkYXRhIGNvbnRhaW5zIHRoZSBzZWN1cml0eSBjb250ZXh0LgorICoJQHNlY2xlbiBjb250YWlucyB0aGUgbGVuZ3RoIG9mIHRoZSBzZWN1cml0eSBjb250ZXh0LgorICoKICAqIFRoaXMgaXMgdGhlIG1haW4gc2VjdXJpdHkgc3RydWN0dXJlLgogICovCiBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyB7CkBAIC0xMjg5LDYgKzEyOTksOCBAQAogCiAgCWludCAoKmdldHByb2NhdHRyKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSk7CiAgCWludCAoKnNldHByb2NhdHRyKShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNoYXIgKm5hbWUsIHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSk7CisJaW50ICgqc2VjaWRfdG9fc2VjY3R4KSh1MzIgc2VjaWQsIGNoYXIgKipzZWNkYXRhLCB1MzIgKnNlY2xlbik7CisJdm9pZCAoKnJlbGVhc2Vfc2VjY3R4KShjaGFyICpzZWNkYXRhLCB1MzIgc2VjbGVuKTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCiAJaW50ICgqdW5peF9zdHJlYW1fY29ubmVjdCkgKHN0cnVjdCBzb2NrZXQgKiBzb2NrLApAQCAtMTMxNyw3ICsxMzI5LDcgQEAKIAlpbnQgKCpzb2NrZXRfc2h1dGRvd24pIChzdHJ1Y3Qgc29ja2V0ICogc29jaywgaW50IGhvdyk7CiAJaW50ICgqc29ja2V0X3NvY2tfcmN2X3NrYikgKHN0cnVjdCBzb2NrICogc2ssIHN0cnVjdCBza19idWZmICogc2tiKTsKIAlpbnQgKCpzb2NrZXRfZ2V0cGVlcnNlY19zdHJlYW0pIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4sIHVuc2lnbmVkIGxlbik7Ci0JaW50ICgqc29ja2V0X2dldHBlZXJzZWNfZGdyYW0pIChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICoqc2VjZGF0YSwgdTMyICpzZWNsZW4pOworCWludCAoKnNvY2tldF9nZXRwZWVyc2VjX2RncmFtKSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpzZWNpZCk7CiAJaW50ICgqc2tfYWxsb2Nfc2VjdXJpdHkpIChzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5KTsKIAl2b2lkICgqc2tfZnJlZV9zZWN1cml0eSkgKHN0cnVjdCBzb2NrICpzayk7CiAJdW5zaWduZWQgaW50ICgqc2tfZ2V0c2lkKSAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgZmxvd2kgKmZsLCB1OCBkaXIpOwpAQCAtMjA1OSw2ICsyMDcxLDE2IEBACiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+bmV0bGlua19yZWN2KHNrYiwgY2FwKTsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KHUzMiBzZWNpZCwgY2hhciAqKnNlY2RhdGEsIHUzMiAqc2VjbGVuKQoreworCXJldHVybiBzZWN1cml0eV9vcHMtPnNlY2lkX3RvX3NlY2N0eChzZWNpZCwgc2VjZGF0YSwgc2VjbGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNlY3VyaXR5X3JlbGVhc2Vfc2VjY3R4KGNoYXIgKnNlY2RhdGEsIHUzMiBzZWNsZW4pCit7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+cmVsZWFzZV9zZWNjdHgoc2VjZGF0YSwgc2VjbGVuKTsKK30KKwogLyogcHJvdG90eXBlcyAqLwogZXh0ZXJuIGludCBzZWN1cml0eV9pbml0CSh2b2lkKTsKIGV4dGVybiBpbnQgcmVnaXN0ZXJfc2VjdXJpdHkJKHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpOwpAQCAtMjcyNSw2ICsyNzQ3LDE0IEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eCh1MzIgc2VjaWQsIGNoYXIgKipzZWNkYXRhLCB1MzIgKnNlY2xlbikKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChjaGFyICpzZWNkYXRhLCB1MzIgc2VjbGVuKQoreworfQogI2VuZGlmCS8qIENPTkZJR19TRUNVUklUWSAqLwogCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksKQEAgLTI4NDAsMTAgKzI4NzAsOSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVyc2VjX3N0cmVhbShzb2NrLCBvcHR2YWwsIG9wdGxlbiwgbGVuKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY2hhciAqKnNlY2RhdGEsCi0JCQkJCQkgICB1MzIgKnNlY2xlbikKK3N0YXRpYyBpbmxpbmUgaW50IHNlY3VyaXR5X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBza19idWZmICpza2IsIHUzMiAqc2VjaWQpCiB7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+c29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc2tiLCBzZWNkYXRhLCBzZWNsZW4pOworCXJldHVybiBzZWN1cml0eV9vcHMtPnNvY2tldF9nZXRwZWVyc2VjX2RncmFtKHNvY2ssIHNrYiwgc2VjaWQpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9za19hbGxvYyhzdHJ1Y3Qgc29jayAqc2ssIGludCBmYW1pbHksIGdmcF90IHByaW9yaXR5KQpAQCAtMjk2OCw4ICsyOTk3LDcgQEAKIAlyZXR1cm4gLUVOT1BST1RPT1BUOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICoqc2VjZGF0YSwKLQkJCQkJCSAgIHUzMiAqc2VjbGVuKQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc29ja2V0X2dldHBlZXJzZWNfZGdyYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyICpzZWNpZCkKIHsKIAlyZXR1cm4gLUVOT1BST1RPT1BUOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCBiL2luY2x1ZGUvbGludXgvc2tidWZmLmgKaW5kZXggNDMwN2U3Ni4uNzU1ZTljZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9za2J1ZmYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCkBAIC02MDQsMTIgKzYwNCwxNyBAQAogCXJldHVybiBsaXN0Xy0+cWxlbjsKIH0KIAotZXh0ZXJuIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBza2JfcXVldWVfbG9ja19rZXk7Ci0KKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBzcGxpdCBvdXQgbG9jayBjbGFzcyBmb3IgZWFjaCBpbnZvY2F0aW9uOworICogdGhpcyBpcyBuZWVkZWQgZm9yIG5vdyBzaW5jZSBhIHdob2xlIGxvdCBvZiB1c2VycyBvZiB0aGUgc2tiLXF1ZXVlCisgKiBpbmZyYXN0cnVjdHVyZSBpbiBkcml2ZXJzIGhhdmUgZGlmZmVyZW50IGxvY2tpbmcgdXNhZ2UgKGluIGhhcmRpcnEpCisgKiB0aGFuIHRoZSBuZXR3b3JraW5nIGNvcmUgKGluIHNvZnRpcnEgb25seSkuIEluIHRoZSBsb25nIHJ1biBlaXRoZXIgdGhlCisgKiBuZXR3b3JrIGxheWVyIG9yIGRyaXZlcnMgc2hvdWxkIG5lZWQgYW5ub3RhdGlvbiB0byBjb25zb2xpZGF0ZSB0aGUKKyAqIG1haW4gdHlwZXMgb2YgdXNhZ2UgaW50byAzIGNsYXNzZXMuCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBza2JfcXVldWVfaGVhZF9pbml0KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJmxpc3QtPmxvY2spOwotCWxvY2tkZXBfc2V0X2NsYXNzKCZsaXN0LT5sb2NrLCAmc2tiX3F1ZXVlX2xvY2tfa2V5KTsKIAlsaXN0LT5wcmV2ID0gbGlzdC0+bmV4dCA9IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3Q7CiAJbGlzdC0+cWxlbiA9IDA7CiB9CkBAIC0xMDM1LDYgKzEwNDAsMjEgQEAKIH0KIAogLyoqCisgKglwc2tiX3RyaW1fdW5pcXVlIC0gcmVtb3ZlIGVuZCBmcm9tIGEgcGFnZWQgdW5pcXVlIChub3QgY2xvbmVkKSBidWZmZXIKKyAqCUBza2I6IGJ1ZmZlciB0byBhbHRlcgorICoJQGxlbjogbmV3IGxlbmd0aAorICoKKyAqCVRoaXMgaXMgaWRlbnRpY2FsIHRvIHBza2JfdHJpbSBleGNlcHQgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoYXQKKyAqCXRoZSBza2IgaXMgbm90IGNsb25lZCBzbyB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGFuIGVycm9yIGR1ZSB0byBvdXQtCisgKglvZi1tZW1vcnkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBwc2tiX3RyaW1fdW5pcXVlKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGVyciA9IHBza2JfdHJpbShza2IsIGxlbik7CisJQlVHX09OKGVycik7Cit9CisKKy8qKgogICoJc2tiX29ycGhhbiAtIG9ycGhhbiBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIG9ycGhhbgogICoKQEAgLTEwNzYsNyArMTA5Niw3IEBACiAgKgl0aGUgaGVhZHJvb20gdGhleSB0aGluayB0aGV5IG5lZWQgd2l0aG91dCBhY2NvdW50aW5nIGZvciB0aGUKICAqCWJ1aWx0IGluIHNwYWNlLiBUaGUgYnVpbHQgaW4gc3BhY2UgaXMgdXNlZCBmb3Igb3B0aW1pc2F0aW9ucy4KICAqCi0gKgklTlVMTCBpcyByZXR1cm5lZCBpbiB0aGVyZSBpcyBubyBmcmVlIG1lbW9yeS4KKyAqCSVOVUxMIGlzIHJldHVybmVkIGlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpfX2Rldl9hbGxvY19za2IodW5zaWduZWQgaW50IGxlbmd0aCwKIAkJCQkJICAgICAgZ2ZwX3QgZ2ZwX21hc2spCkBAIC0xMDk2LDcgKzExMTYsNyBAQAogICoJdGhlIGhlYWRyb29tIHRoZXkgdGhpbmsgdGhleSBuZWVkIHdpdGhvdXQgYWNjb3VudGluZyBmb3IgdGhlCiAgKglidWlsdCBpbiBzcGFjZS4gVGhlIGJ1aWx0IGluIHNwYWNlIGlzIHVzZWQgZm9yIG9wdGltaXNhdGlvbnMuCiAgKgotICoJJU5VTEwgaXMgcmV0dXJuZWQgaW4gdGhlcmUgaXMgbm8gZnJlZSBtZW1vcnkuIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24KKyAqCSVOVUxMIGlzIHJldHVybmVkIGlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LiBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uCiAgKglhbGxvY2F0ZXMgbWVtb3J5IGl0IGNhbiBiZSBjYWxsZWQgZnJvbSBhbiBpbnRlcnJ1cHQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKmRldl9hbGxvY19za2IodW5zaWduZWQgaW50IGxlbmd0aCkKQEAgLTExMDQsNiArMTEyNCwyOCBAQAogCXJldHVybiBfX2Rldl9hbGxvY19za2IobGVuZ3RoLCBHRlBfQVRPTUlDKTsKIH0KIAorZXh0ZXJuIHN0cnVjdCBza19idWZmICpfX25ldGRldl9hbGxvY19za2Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgaW50IGxlbmd0aCwgZ2ZwX3QgZ2ZwX21hc2spOworCisvKioKKyAqCW5ldGRldl9hbGxvY19za2IgLSBhbGxvY2F0ZSBhbiBza2J1ZmYgZm9yIHJ4IG9uIGEgc3BlY2lmaWMgZGV2aWNlCisgKglAZGV2OiBuZXR3b3JrIGRldmljZSB0byByZWNlaXZlIG9uCisgKglAbGVuZ3RoOiBsZW5ndGggdG8gYWxsb2NhdGUKKyAqCisgKglBbGxvY2F0ZSBhIG5ldyAmc2tfYnVmZiBhbmQgYXNzaWduIGl0IGEgdXNhZ2UgY291bnQgb2Ygb25lLiBUaGUKKyAqCWJ1ZmZlciBoYXMgdW5zcGVjaWZpZWQgaGVhZHJvb20gYnVpbHQgaW4uIFVzZXJzIHNob3VsZCBhbGxvY2F0ZQorICoJdGhlIGhlYWRyb29tIHRoZXkgdGhpbmsgdGhleSBuZWVkIHdpdGhvdXQgYWNjb3VudGluZyBmb3IgdGhlCisgKglidWlsdCBpbiBzcGFjZS4gVGhlIGJ1aWx0IGluIHNwYWNlIGlzIHVzZWQgZm9yIG9wdGltaXNhdGlvbnMuCisgKgorICoJJU5VTEwgaXMgcmV0dXJuZWQgaWYgdGhlcmUgaXMgbm8gZnJlZSBtZW1vcnkuIEFsdGhvdWdoIHRoaXMgZnVuY3Rpb24KKyAqCWFsbG9jYXRlcyBtZW1vcnkgaXQgY2FuIGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdC4KKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqbmV0ZGV2X2FsbG9jX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQl1bnNpZ25lZCBpbnQgbGVuZ3RoKQoreworCXJldHVybiBfX25ldGRldl9hbGxvY19za2IoZGV2LCBsZW5ndGgsIEdGUF9BVE9NSUMpOworfQorCiAvKioKICAqCXNrYl9jb3cgLSBjb3B5IGhlYWRlciBvZiBza2Igd2hlbiBpdCBpcyByZXF1aXJlZAogICoJQHNrYjogYnVmZmVyIHRvIGNvdwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvS2J1aWxkIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvS2J1aWxkCmluZGV4IDBkMWQ3NjguLmZiNDM4ZjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9LYnVpbGQKQEAgLTEgKzEgQEAKLXVuaWZkZWYteSA6PSBkZWJ1Zy5oCit1bmlmZGVmLXkgKz0gZGVidWcuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2tyYjUuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19rcmI1LmgKaW5kZXggMTI3OTI4MC4uZTMwYmEyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvZ3NzX2tyYjUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfa3JiNS5oCkBAIC00Niw4ICs0Niw4IEBACiAJdW5zaWduZWQgY2hhcgkJc2VlZFsxNl07CiAJaW50CQkJc2lnbmFsZzsKIAlpbnQJCQlzZWFsYWxnOwotCXN0cnVjdCBjcnlwdG9fdGZtCSplbmM7Ci0Jc3RydWN0IGNyeXB0b190Zm0JKnNlcTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlcgkqZW5jOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyCSpzZXE7CiAJczMyCQkJZW5kdGltZTsKIAl1MzIJCQlzZXFfc2VuZDsKIAlzdHJ1Y3QgeGRyX25ldG9iagltZWNoX3VzZWQ7CkBAIC0xMzYsMjYgKzEzNiwyNyBAQAogCiAKIHUzMgota3JiNV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICoga2V5LAora3JiNV9lbmNyeXB0KHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICprZXksCiAJICAgICB2b2lkICppdiwgdm9pZCAqaW4sIHZvaWQgKm91dCwgaW50IGxlbmd0aCk7CiAKIHUzMgota3JiNV9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fdGZtICoga2V5LAora3JiNV9kZWNyeXB0KHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICprZXksCiAJICAgICB2b2lkICppdiwgdm9pZCAqaW4sIHZvaWQgKm91dCwgaW50IGxlbmd0aCk7IAogCiBpbnQKLWdzc19lbmNyeXB0X3hkcl9idWYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgc3RydWN0IHhkcl9idWYgKm91dGJ1ZiwgaW50IG9mZnNldCwKLQkJc3RydWN0IHBhZ2UgKipwYWdlcyk7Citnc3NfZW5jcnlwdF94ZHJfYnVmKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHN0cnVjdCB4ZHJfYnVmICpvdXRidWYsCisJCSAgICBpbnQgb2Zmc2V0LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKIAogaW50Ci1nc3NfZGVjcnlwdF94ZHJfYnVmKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHN0cnVjdCB4ZHJfYnVmICppbmJ1ZiwgaW50IG9mZnNldCk7Citnc3NfZGVjcnlwdF94ZHJfYnVmKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHN0cnVjdCB4ZHJfYnVmICppbmJ1ZiwKKwkJICAgIGludCBvZmZzZXQpOwogCiBzMzIKLWtyYjVfbWFrZV9zZXFfbnVtKHN0cnVjdCBjcnlwdG9fdGZtICoga2V5LAora3JiNV9tYWtlX3NlcV9udW0oc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmtleSwKIAkJaW50IGRpcmVjdGlvbiwKIAkJczMyIHNlcW51bSwgdW5zaWduZWQgY2hhciAqY2tzdW0sIHVuc2lnbmVkIGNoYXIgKmJ1Zik7CiAKIHMzMgota3JiNV9nZXRfc2VxX251bShzdHJ1Y3QgY3J5cHRvX3RmbSAqIGtleSwKK2tyYjVfZ2V0X3NlcV9udW0oc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmtleSwKIAkgICAgICAgdW5zaWduZWQgY2hhciAqY2tzdW0sCiAJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50ICpkaXJlY3Rpb24sIHMzMiAqIHNlcW51bSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9nc3Nfc3BrbTMuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19zcGttMy5oCmluZGV4IDMzNmUyMTguLjJjZjNmYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19zcGttMy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2dzc19zcGttMy5oCkBAIC0xOSw5ICsxOSw5IEBACiAJdW5zaWduZWQgaW50CQlyZXFfZmxhZ3MgOwogCXN0cnVjdCB4ZHJfbmV0b2JqCXNoYXJlX2tleTsKIAlpbnQJCQljb25mX2FsZzsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSoJZGVyaXZlZF9jb25mX2tleTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlcgkqZGVyaXZlZF9jb25mX2tleTsKIAlpbnQJCQlpbnRnX2FsZzsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSoJZGVyaXZlZF9pbnRlZ19rZXk7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIJKmRlcml2ZWRfaW50ZWdfa2V5OwogCWludAkJCWtleWVzdGJfYWxnOyAgIC8qIGFsZyB1c2VkIHRvIGdldCBzaGFyZV9rZXkgKi8KIAlpbnQJCQlvd2ZfYWxnOyAgIC8qIG9uZSB3YXkgZnVuY3Rpb24gKi8KIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvcnBjX3BpcGVfZnMuaAppbmRleCAyYzIxODljLi5hNDgxNDcyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9ycGNfcGlwZV9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3JwY19waXBlX2ZzLmgKQEAgLTQyLDkgKzQyLDkgQEAKIGV4dGVybiBpbnQgcnBjX3F1ZXVlX3VwY2FsbChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHJwY19waXBlX21zZyAqKTsKIAogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnJwY19ta2RpcihjaGFyICosIHN0cnVjdCBycGNfY2xudCAqKTsKLWV4dGVybiBpbnQgcnBjX3JtZGlyKGNoYXIgKik7CitleHRlcm4gaW50IHJwY19ybWRpcihzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIHN0cnVjdCBkZW50cnkgKnJwY19ta3BpcGUoY2hhciAqLCB2b2lkICosIHN0cnVjdCBycGNfcGlwZV9vcHMgKiwgaW50IGZsYWdzKTsKLWV4dGVybiBpbnQgcnBjX3VubGluayhjaGFyICopOworZXh0ZXJuIGludCBycGNfdW5saW5rKHN0cnVjdCBkZW50cnkgKik7CiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpycGNfZ2V0X21vdW50KHZvaWQpOwogZXh0ZXJuIHZvaWQgcnBjX3B1dF9tb3VudCh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCmluZGV4IGU4YmJlODEuLjNhMGNjYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTM3LDcgKzM3LDcgQEAKIAogI2RlZmluZSBSUENfTUlOX1JFU1ZQT1JUCSgxVSkKICNkZWZpbmUgUlBDX01BWF9SRVNWUE9SVAkoNjU1MzVVKQotI2RlZmluZSBSUENfREVGX01JTl9SRVNWUE9SVAkoNjUwVSkKKyNkZWZpbmUgUlBDX0RFRl9NSU5fUkVTVlBPUlQJKDY2NVUpCiAjZGVmaW5lIFJQQ19ERUZfTUFYX1JFU1ZQT1JUCSgxMDIzVSkKIAogLyoKQEAgLTIyOSw3ICsyMjksNyBAQAogaW50CQkJeHBydF9yZXNlcnZlX3hwcnRfY29uZyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogaW50CQkJeHBydF9wcmVwYXJlX3RyYW5zbWl0KHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiB2b2lkCQkJeHBydF90cmFuc21pdChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwotdm9pZAkJCXhwcnRfYWJvcnRfdHJhbnNtaXQoc3RydWN0IHJwY190YXNrICp0YXNrKTsKK3ZvaWQJCQl4cHJ0X2VuZF90cmFuc21pdChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogaW50CQkJeHBydF9hZGp1c3RfdGltZW91dChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSk7CiB2b2lkCQkJeHBydF9yZWxlYXNlX3hwcnQoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogdm9pZAkJCXhwcnRfcmVsZWFzZV94cHJ0X2Nvbmcoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y19hY3QvS2J1aWxkIGIvaW5jbHVkZS9saW51eC90Y19hY3QvS2J1aWxkCmluZGV4IDUyNTFhNTAuLjc4ZGZiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdGNfYWN0L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L3RjX2FjdC9LYnVpbGQKQEAgLTEgKzEsNCBAQAotaGVhZGVyLXkgKz0gdGNfZ2FjdC5oIHRjX2lwdC5oIHRjX21pcnJlZC5oIHRjX3BlZGl0LmgKK2hlYWRlci15ICs9IHRjX2dhY3QuaAoraGVhZGVyLXkgKz0gdGNfaXB0LmgKK2hlYWRlci15ICs9IHRjX21pcnJlZC5oCitoZWFkZXIteSArPSB0Y19wZWRpdC5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjX2VtYXRjaC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L3RjX2VtYXRjaC9LYnVpbGQKaW5kZXggMzgxZTkzMC4uNGE1OGExYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y19lbWF0Y2gvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvdGNfZW1hdGNoL0tidWlsZApAQCAtMSArMSw0IEBACi1oZWFkZXJzLXkgOj0gdGNfZW1fY21wLmggdGNfZW1fbWV0YS5oIHRjX2VtX25ieXRlLmggdGNfZW1fdGV4dC5oCitoZWFkZXIteSArPSB0Y19lbV9jbXAuaAoraGVhZGVyLXkgKz0gdGNfZW1fbWV0YS5oCitoZWFkZXIteSArPSB0Y19lbV9uYnl0ZS5oCitoZWFkZXIteSArPSB0Y19lbV90ZXh0LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXguaCBiL2luY2x1ZGUvbGludXgvdGltZXguaAppbmRleCAxOWJiNjUzLi5kNTQzZDM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1leC5oCkBAIC01Nyw3ICs1Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogCiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWV4Lmg+CiAKIC8qCiAgKiBTSElGVF9LRyBhbmQgU0hJRlRfS0YgZXN0YWJsaXNoIHRoZSBkYW1waW5nIG9mIHRoZSBQTEwgYW5kIGFyZSBjaG9zZW4KQEAgLTE5MSw2ICsxOTAsOCBAQAogI2RlZmluZSBUSU1FX0JBRAlUSU1FX0VSUk9SIC8qIGJ3IGNvbXBhdCAqLwogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS90aW1leC5oPgorCiAvKgogICoga2VybmVsIHZhcmlhYmxlcwogICogTm90ZTogbWF4aW11bSBlcnJvciA9IE5UUCBzeW5jaCBkaXN0YW5jZSA9IGRpc3BlcnNpb24gKyBkZWxheSAvIDI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCBlNDIxZDVlLi4wNDgyN2NhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTU5LDYgKzU5LDcgQEAKIAlzdHJ1Y3QgdHR5X2J1ZmZlciAqaGVhZDsJLyogUXVldWUgaGVhZCAqLwogCXN0cnVjdCB0dHlfYnVmZmVyICp0YWlsOwkvKiBBY3RpdmUgYnVmZmVyICovCiAJc3RydWN0IHR0eV9idWZmZXIgKmZyZWU7CS8qIEZyZWUgcXVldWUgaGVhZCAqLworCWludCBtZW1vcnlfdXNlZDsJCS8qIEJ1ZmZlciBzcGFjZSB1c2VkIGV4Y2x1ZGluZyBmcmVlIHF1ZXVlICovCiB9OwogLyoKICAqIFRoZSBwdHkgdXNlcyBjaGFyX2J1ZiBhbmQgZmxhZ19idWYgYXMgYSBjb250aWd1b3VzIGJ1ZmZlcgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggYzk0NGU4Zi4uZDJiZDBjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0xMDMsOCArMTAzLDcgQEAKICAqIEBjb25kaXRpb246IGJpbmRpbmcgc3RhdGUgb2YgdGhlIGludGVyZmFjZTogbm90IGJvdW5kLCBiaW5kaW5nCiAgKgkoaW4gcHJvYmUoKSksIGJvdW5kIHRvIGEgZHJpdmVyLCBvciB1bmJpbmRpbmcgKGluIGRpc2Nvbm5lY3QoKSkKICAqIEBkZXY6IGRyaXZlciBtb2RlbCdzIHZpZXcgb2YgdGhpcyBkZXZpY2UKLSAqIEB1c2JfZGV2OiBpZiBhbiBpbnRlcmZhY2UgaXMgYm91bmQgdG8gdGhlIFVTQiBtYWpvciwgdGhpcyB3aWxsIHBvaW50Ci0gKgl0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gZm9yIHRoYXQgZGV2aWNlLgorICogQGNsYXNzX2RldjogZHJpdmVyIG1vZGVsJ3MgY2xhc3MgdmlldyBvZiB0aGlzIGRldmljZS4KICAqCiAgKiBVU0IgZGV2aWNlIGRyaXZlcnMgYXR0YWNoIHRvIGludGVyZmFjZXMgb24gYSBwaHlzaWNhbCBkZXZpY2UuICBFYWNoCiAgKiBpbnRlcmZhY2UgZW5jYXBzdWxhdGVzIGEgc2luZ2xlIGhpZ2ggbGV2ZWwgZnVuY3Rpb24sIHN1Y2ggYXMgZmVlZGluZwpAQCAtMTQ0LDcgKzE0Myw3IEBACiAJCQkJCSAqIGJvdW5kIHRvICovCiAJZW51bSB1c2JfaW50ZXJmYWNlX2NvbmRpdGlvbiBjb25kaXRpb247CQkvKiBzdGF0ZSBvZiBiaW5kaW5nICovCiAJc3RydWN0IGRldmljZSBkZXY7CQkvKiBpbnRlcmZhY2Ugc3BlY2lmaWMgZGV2aWNlIGluZm8gKi8KLQlzdHJ1Y3QgZGV2aWNlICp1c2JfZGV2OwkJLyogcG9pbnRlciB0byB0aGUgdXNiIGNsYXNzJ3MgZGV2aWNlLCBpZiBhbnkgKi8KKwlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CiB9OwogI2RlZmluZQl0b191c2JfaW50ZXJmYWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSwgZGV2KQogI2RlZmluZQlpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpIFwKQEAgLTM2MSw3ICszNjAsNyBAQAogCWNoYXIgKnNlcmlhbDsJCQkvKiBpU2VyaWFsTnVtYmVyIHN0cmluZywgaWYgcHJlc2VudCAqLwogCiAJc3RydWN0IGxpc3RfaGVhZCBmaWxlbGlzdDsKLQlzdHJ1Y3QgZGV2aWNlICp1c2Jmc19kZXY7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwogCXN0cnVjdCBkZW50cnkgKnVzYmZzX2RlbnRyeTsJLyogdXNiZnMgZGVudHJ5IGVudHJ5IGZvciB0aGUgZGV2aWNlICovCiAKIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaCBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKaW5kZXggZjM4ZjQzZi4uZTdmYzVmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCkBAIC00NCw3ICs0NCw5IEBACiAJVVNfRkxBRyhOT19XUF9ERVRFQ1QsCTB4MDAwMDAyMDApCQkJXAogCQkvKiBEb24ndCBjaGVjayBmb3Igd3JpdGUtcHJvdGVjdCAqLwkJXAogCVVTX0ZMQUcoTUFYX1NFQ1RPUlNfNjQsCTB4MDAwMDA0MDApCQkJXAotCQkvKiBTZXRzIG1heF9zZWN0b3JzIHRvIDY0ICAgICovCisJCS8qIFNldHMgbWF4X3NlY3RvcnMgdG8gNjQgICAgKi8JCQlcCisJVVNfRkxBRyhJR05PUkVfREVWSUNFLAkweDAwMDAwODAwKQkJCVwKKwkJLyogRG9uJ3QgY2xhaW0gZGV2aWNlICovCiAKICNkZWZpbmUgVVNfRkxBRyhuYW1lLCB2YWx1ZSkJVVNfRkxfIyNuYW1lID0gdmFsdWUgLAogZW51bSB7IFVTX0RPX0FMTF9GTEFHUyB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCmluZGV4IDQxYmM3ZTkuLjhkYmE5N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKQEAgLTEyLDEwICsxMiwxMCBAQAogI2lmbmRlZiBfX0xJTlVYX1ZJREVPREVWX0gKICNkZWZpbmUgX19MSU5VWF9WSURFT0RFVl9ICiAKLSNkZWZpbmUgSEFWRV9WNEwxIDEKLQogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfVklERU9fVjRMMV9DT01QQVQpIHx8ICFkZWZpbmVkIChfX0tFUk5FTF9fKQorCiBzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eQogewogCWNoYXIgbmFtZVszMl07CkBAIC0zMzYsNiArMzM2LDggQEAKICNkZWZpbmUgVklEX0hBUkRXQVJFX1NOOUMxMDIJMzgKICNkZWZpbmUgVklEX0hBUkRXQVJFX0FSVgkzOQogCisjZW5kaWYgLyogQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUICovCisKICNlbmRpZiAvKiBfX0xJTlVYX1ZJREVPREVWX0ggKi8KIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCmluZGV4IGE2MjY3M2QuLmUzNzE1ZDcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKKysrIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaApAQCAtMjIsOCArMjIsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2RlZmluZSBIQVZFX1Y0TDIgMQotCiAvKgogICogQ29tbW9uIHN0dWZmIGZvciBib3RoIFY0TDEgYW5kIFY0TDIKICAqIE1vdmVkIGZyb20gdmlkZW9kZXYuaApAQCAtNzE2LDcgKzcxNCw3IEBACiAJCV9fczY0IHZhbHVlNjQ7CiAJCXZvaWQgKnJlc2VydmVkOwogCX07Ci19OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scwogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92bXN0YXQuaCBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKaW5kZXggMWFiODA2Yy4uMmQ5YjFiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92bXN0YXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCkBAIC00MSwyMyArNDEsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fY291bnRfdm1fZXZlbnQoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0pCiB7Ci0JX19nZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMuZXZlbnRbaXRlbV0pKys7CisJX19nZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dKys7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF92bV9ldmVudChlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSkKIHsKLQlnZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMuZXZlbnRbaXRlbV0pKys7CisJZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzKS5ldmVudFtpdGVtXSsrOwogCXB1dF9jcHUoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fY291bnRfdm1fZXZlbnRzKGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtLCBsb25nIGRlbHRhKQogewotCV9fZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dKSArPSBkZWx0YTsKKwlfX2dldF9jcHVfdmFyKHZtX2V2ZW50X3N0YXRlcykuZXZlbnRbaXRlbV0gKz0gZGVsdGE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF92bV9ldmVudHMoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0sIGxvbmcgZGVsdGEpCiB7Ci0JZ2V0X2NwdV92YXIodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dKSArPSBkZWx0YTsKKwlnZXRfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dICs9IGRlbHRhOwogCXB1dF9jcHUoKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dC5oIGIvaW5jbHVkZS9saW51eC92dC5oCmluZGV4IDhhYjMzNGEuLmJhODA2ZTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0LmgKQEAgLTYwLDUgKzYwLDYgQEAKICNkZWZpbmUgVlRfUkVTSVpFWCAgICAgIDB4NTYwQSAgLyogc2V0IGtlcm5lbCdzIGlkZWEgb2Ygc2NyZWVuc2l6ZSArIG1vcmUgKi8KICNkZWZpbmUgVlRfTE9DS1NXSVRDSCAgIDB4NTYwQiAgLyogZGlzYWxsb3cgdnQgc3dpdGNoaW5nICovCiAjZGVmaW5lIFZUX1VOTE9DS1NXSVRDSCAweDU2MEMgIC8qIGFsbG93IHZ0IHN3aXRjaGluZyAqLworI2RlZmluZSBWVF9HRVRISUZPTlRNQVNLIDB4NTYwRCAgLyogcmV0dXJuIGhpIGZvbnQgbWFzayAqLwogCiAjZW5kaWYgLyogX0xJTlVYX1ZUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAppbmRleCA2MmRhZTFhLi44MTA0NjJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwotI2lmZGVmIENPTkZJR19WSURFT19WNEwxCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbHNlCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC0xOTQsNyArMTk0LDcgQEAKIAogCiAJaW50ICgqdmlkaW9jX292ZXJsYXkpIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpKTsKLSNpZmRlZiBIQVZFX1Y0TDEKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAkJCS8qIGJ1ZmZlciB0eXBlIGlzIHN0cnVjdCB2aWRpb19tYnVmICogKi8KIAlpbnQgKCp2aWRpb2NnbWJ1ZikgIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2aWRlb19tYnVmICpwKTsKICNlbmRpZgpAQCAtMzM1LDE3ICszMzUsMjAgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpKTsKIAogCi0jaWZkZWYgSEFWRV9WNEwxCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAogZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UqIHZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUqKTsKIAogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KQotc3RhdGljIGlubGluZSB2b2lkCitzdGF0aWMgaW5saW5lIGludAogdmlkZW9fZGV2aWNlX2NyZWF0ZV9maWxlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZmZCwKIAkJCSBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cikKIHsKLQljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoJnZmZC0+Y2xhc3NfZGV2LCBhdHRyKTsKKwlpbnQgcmV0ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZ2ZmQtPmNsYXNzX2RldiwgYXR0cik7CisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzIGVycm9yOiAlZFxuIiwgX19GVU5DVElPTl9fLCByZXQpOworCXJldHVybiByZXQ7CiB9CiBzdGF0aWMgaW5saW5lIHZvaWQKIHZpZGVvX2RldmljZV9yZW1vdmVfZmlsZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQsCkBAIC0zNTQsNiArMzU3LDggQEAKIAljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoJnZmZC0+Y2xhc3NfZGV2LCBhdHRyKTsKIH0KIAorI2VuZGlmIC8qIENPTkZJR19WSURFT19WNEwxX0NPTVBBVCAqLworCiAjaWZkZWYgT0JTT0xFVEVfT1dORVIgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCiAvKiBoZWxwZXIgZnVuY3Rpb25zIHRvIGFjY2VzcyBkcml2ZXIgcHJpdmF0ZSBkYXRhLiAqLwogc3RhdGljIGlubGluZSB2b2lkICp2aWRlb19nZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYpCkBAIC0zNjksNiArMzc0LDUgQEAKIAogZXh0ZXJuIGludCB2aWRlb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKLSNlbmRpZiAvKiBIQVZFX1Y0TDEgKi8KIAogI2VuZGlmIC8qIF9WNEwyX0RFVl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL210ZC9LYnVpbGQgYi9pbmNsdWRlL210ZC9LYnVpbGQKaW5kZXggZTFkYTJhNS4uMTNlN2EzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tdGQvS2J1aWxkCisrKyBiL2luY2x1ZGUvbXRkL0tidWlsZApAQCAtMSwyICsxLDYgQEAKLXVuaWZkZWYteSA6PSBtdGQtYWJpLmgKLWhlYWRlci15IDo9IGluZnRsLXVzZXIuaCBqZmZzMi11c2VyLmggbXRkLXVzZXIuaCBuZnRsLXVzZXIuaAoraGVhZGVyLXkgKz0gaW5mdGwtdXNlci5oCitoZWFkZXIteSArPSBqZmZzMi11c2VyLmgKK2hlYWRlci15ICs9IG10ZC11c2VyLmgKK2hlYWRlci15ICs9IG5mdGwtdXNlci5oCisKK3VuaWZkZWYteSArPSBtdGQtYWJpLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbXRkL210ZC1hYmkuaCBiL2luY2x1ZGUvbXRkL210ZC1hYmkuaAppbmRleCAxZGEzZjdmLi5iMGE2N2I3IDEwMDY0NAotLS0gYS9pbmNsdWRlL210ZC9tdGQtYWJpLmgKKysrIGIvaW5jbHVkZS9tdGQvbXRkLWFiaS5oCkBAIC0zNCw2ICszNCw3IEBACiAjZGVmaW5lIE1URF9XUklURUFCTEUJCTB4NDAwCS8qIERldmljZSBpcyB3cml0ZWFibGUgKi8KICNkZWZpbmUgTVREX0JJVF9XUklURUFCTEUJMHg4MDAJLyogU2luZ2xlIGJpdHMgY2FuIGJlIGZsaXBwZWQgKi8KICNkZWZpbmUgTVREX05PX0VSQVNFCQkweDEwMDAJLyogTm8gZXJhc2UgbmVjZXNzYXJ5ICovCisjZGVmaW5lIE1URF9TVFVQSURfTE9DSwkJMHgyMDAwCS8qIEFsd2F5cyBsb2NrZWQgYWZ0ZXIgcmVzZXQgKi8KIAogLy8gU29tZSBjb21tb24gZGV2aWNlcyAvIGNvbWJpbmF0aW9ucyBvZiBjYXBhYmlsaXRpZXMKICNkZWZpbmUgTVREX0NBUF9ST00JCTAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FmX3VuaXguaCBiL2luY2x1ZGUvbmV0L2FmX3VuaXguaAppbmRleCAyZmVjODI3Li5jMDM5OGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9hZl91bml4LmgKKysrIGIvaW5jbHVkZS9uZXQvYWZfdW5peC5oCkBAIC01NCwxNSArNTQsMTMgQEAKIAlzdHJ1Y3QgdWNyZWQJCWNyZWRzOwkJLyogU2tiIGNyZWRlbnRpYWxzCSovCiAJc3RydWN0IHNjbV9mcF9saXN0CSpmcDsJCS8qIFBhc3NlZCBmaWxlcwkJKi8KICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwotCWNoYXIJCQkqc2VjZGF0YTsJLyogU2VjdXJpdHkgY29udGV4dAkqLwotCXUzMgkJCXNlY2xlbjsJCS8qIFNlY3VyaXR5IGxlbmd0aAkqLworCXUzMgkJCXNlY2lkOwkJLyogU2VjdXJpdHkgSUQJCSovCiAjZW5kaWYKIH07CiAKICNkZWZpbmUgVU5JWENCKHNrYikgCSgqKHN0cnVjdCB1bml4X3NrYl9wYXJtcyopJigoc2tiKS0+Y2IpKQogI2RlZmluZSBVTklYQ1JFRFMoc2tiKQkoJlVOSVhDQigoc2tiKSkuY3JlZHMpCi0jZGVmaW5lIFVOSVhTRUNEQVRBKHNrYikJKCZVTklYQ0IoKHNrYikpLnNlY2RhdGEpCi0jZGVmaW5lIFVOSVhTRUNMRU4oc2tiKQkJKCZVTklYQ0IoKHNrYikpLnNlY2xlbikKKyNkZWZpbmUgVU5JWFNJRChza2IpCSgmVU5JWENCKChza2IpKS5zZWNpZCkKIAogI2RlZmluZSB1bml4X3N0YXRlX3Jsb2NrKHMpCXNwaW5fbG9jaygmdW5peF9zayhzKS0+bG9jaykKICNkZWZpbmUgdW5peF9zdGF0ZV9ydW5sb2NrKHMpCXNwaW5fdW5sb2NrKCZ1bml4X3NrKHMpLT5sb2NrKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYWguaCBiL2luY2x1ZGUvbmV0L2FoLmgKaW5kZXggY2VmZjAwYS4uOGYyNTdjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYWguaAorKysgYi9pbmNsdWRlL25ldC9haC5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTkVUX0FIX0gKICNkZWZpbmUgX05FVF9BSF9ICiAKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogCiAvKiBUaGlzIGlzIHRoZSBtYXhpbXVtIHRydW5jYXRlZCBJQ1YgbGVuZ3RoIHRoYXQgd2Uga25vdyBvZi4gKi8KQEAgLTE0LDIyICsxNSwyOSBAQAogCWludAkJCWljdl9mdWxsX2xlbjsKIAlpbnQJCQlpY3ZfdHJ1bmNfbGVuOwogCi0Jdm9pZAkJCSgqaWN2KShzdHJ1Y3QgYWhfZGF0YSosCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHU4ICppY3YpOwotCi0Jc3RydWN0IGNyeXB0b190Zm0JKnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2gJKnRmbTsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotYWhfaG1hY19kaWdlc3Qoc3RydWN0IGFoX2RhdGEgKmFocCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmF1dGhfZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IGFoX21hY19kaWdlc3Qoc3RydWN0IGFoX2RhdGEgKmFocCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQl1OCAqYXV0aF9kYXRhKQogewotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBhaHAtPnRmbTsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJaW50IGVycjsKKworCWRlc2MudGZtID0gYWhwLT50Zm07CisJZGVzYy5mbGFncyA9IDA7CiAKIAltZW1zZXQoYXV0aF9kYXRhLCAwLCBhaHAtPmljdl90cnVuY19sZW4pOwotCWNyeXB0b19obWFjX2luaXQodGZtLCBhaHAtPmtleSwgJmFocC0+a2V5X2xlbik7Ci0Jc2tiX2ljdl93YWxrKHNrYiwgdGZtLCAwLCBza2ItPmxlbiwgY3J5cHRvX2htYWNfdXBkYXRlKTsKLQljcnlwdG9faG1hY19maW5hbCh0Zm0sIGFocC0+a2V5LCAmYWhwLT5rZXlfbGVuLCBhaHAtPndvcmtfaWN2KTsKLQltZW1jcHkoYXV0aF9kYXRhLCBhaHAtPndvcmtfaWN2LCBhaHAtPmljdl90cnVuY19sZW4pOworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoJmRlc2MpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIG91dDsKKwllcnIgPSBza2JfaWN2X3dhbGsoc2tiLCAmZGVzYywgMCwgc2tiLT5sZW4sIGNyeXB0b19oYXNoX3VwZGF0ZSk7CisJaWYgKHVubGlrZWx5KGVycikpCisJCWdvdG8gb3V0OworCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBhaHAtPndvcmtfaWN2KTsKKworb3V0OgorCXJldHVybiBlcnI7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZXNwLmggYi9pbmNsdWRlL25ldC9lc3AuaAppbmRleCA5MGNkOTRmLi4wNjQzNjZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9lc3AuaAorKysgYi9pbmNsdWRlL25ldC9lc3AuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX05FVF9FU1BfSAogI2RlZmluZSBfTkVUX0VTUF9ICiAKKyNpbmNsdWRlIDxsaW51eC9jcnlwdG8uaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgogI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgogCkBAIC0yMSw3ICsyMiw3IEBACiAJCSAqID49IGNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pLiAqLwogCQlpbnQJCQlpdmxlbjsKIAkJaW50CQkJcGFkbGVuOwkJLyogMC4uMjU1ICovCi0JCXN0cnVjdCBjcnlwdG9fdGZtCSp0Zm07CQkvKiBjcnlwdG8gaGFuZGxlICovCisJCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyCSp0Zm07CQkvKiBjcnlwdG8gaGFuZGxlICovCiAJfSBjb25mOwogCiAJLyogSW50ZWdyaXR5LiBJdCBpcyBhY3RpdmUgd2hlbiBpY3ZfZnVsbF9sZW4gIT0gMCAqLwpAQCAtMzQsNyArMzUsNyBAQAogCQl2b2lkCQkJKCppY3YpKHN0cnVjdCBlc3BfZGF0YSosCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTggKmljdik7Ci0JCXN0cnVjdCBjcnlwdG9fdGZtCSp0Zm07CisJCXN0cnVjdCBjcnlwdG9faGFzaAkqdGZtOwogCX0gYXV0aDsKIH07CiAKQEAgLTQyLDE4ICs0MywyMiBAQAogZXh0ZXJuIGludCBza2JfY293X2RhdGEoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHRhaWxiaXRzLCBzdHJ1Y3Qgc2tfYnVmZiAqKnRyYWlsZXIpOwogZXh0ZXJuIHZvaWQgKnBza2JfcHV0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICp0YWlsLCBpbnQgbGVuKTsKIAotc3RhdGljIGlubGluZSB2b2lkCi1lc3BfaG1hY19kaWdlc3Qoc3RydWN0IGVzcF9kYXRhICplc3AsIHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgaW50IGxlbiwgdTggKmF1dGhfZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IGVzcF9tYWNfZGlnZXN0KHN0cnVjdCBlc3BfZGF0YSAqZXNwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBpbnQgb2Zmc2V0LCBpbnQgbGVuKQogewotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBlc3AtPmF1dGgudGZtOwotCWNoYXIgKmljdiA9IGVzcC0+YXV0aC53b3JrX2ljdjsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CisJaW50IGVycjsKIAotCW1lbXNldChhdXRoX2RhdGEsIDAsIGVzcC0+YXV0aC5pY3ZfdHJ1bmNfbGVuKTsKLQljcnlwdG9faG1hY19pbml0KHRmbSwgZXNwLT5hdXRoLmtleSwgJmVzcC0+YXV0aC5rZXlfbGVuKTsKLQlza2JfaWN2X3dhbGsoc2tiLCB0Zm0sIG9mZnNldCwgbGVuLCBjcnlwdG9faG1hY191cGRhdGUpOwotCWNyeXB0b19obWFjX2ZpbmFsKHRmbSwgZXNwLT5hdXRoLmtleSwgJmVzcC0+YXV0aC5rZXlfbGVuLCBpY3YpOwotCW1lbWNweShhdXRoX2RhdGEsIGljdiwgZXNwLT5hdXRoLmljdl90cnVuY19sZW4pOworCWRlc2MudGZtID0gZXNwLT5hdXRoLnRmbTsKKwlkZXNjLmZsYWdzID0gMDsKKworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoJmRlc2MpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlyZXR1cm4gZXJyOworCWVyciA9IHNrYl9pY3Zfd2Fsayhza2IsICZkZXNjLCBvZmZzZXQsIGxlbiwgY3J5cHRvX2hhc2hfdXBkYXRlKTsKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gY3J5cHRvX2hhc2hfZmluYWwoJmRlc2MsIGVzcC0+YXV0aC53b3JrX2ljdik7CiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExLmggYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAppbmRleCBlY2M0Mjg2Li5iMTc0ZWJiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9pZWVlODAyMTEuaApAQCAtMjQwLDYgKzI0MCwxMSBAQAogI2RlZmluZSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FICgxPDwxMCkKICNkZWZpbmUgV0xBTl9DQVBBQklMSVRZX0RTU1NfT0ZETSAoMTw8MTMpCiAKKy8qIDgwMi4xMWcgRVJQIGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KKyNkZWZpbmUgV0xBTl9FUlBfTk9OX0VSUF9QUkVTRU5UICgxPDwwKQorI2RlZmluZSBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTiAoMTw8MSkKKyNkZWZpbmUgV0xBTl9FUlBfQkFSS0VSX1BSRUFNQkxFICgxPDwyKQorCiAvKiBTdGF0dXMgY29kZXMgKi8KIGVudW0gaWVlZTgwMjExX3N0YXR1c2NvZGUgewogCVdMQU5fU1RBVFVTX1NVQ0NFU1MgPSAwLApAQCAtNzQ3LDYgKzc1Miw4IEBACiAjZGVmaW5lIE5FVFdPUktfSEFTX0lCU1NfREZTICAgICAgICAgICAgKDE8PDgpCiAjZGVmaW5lIE5FVFdPUktfSEFTX1RQQ19SRVBPUlQgICAgICAgICAgKDE8PDkpCiAKKyNkZWZpbmUgTkVUV09SS19IQVNfRVJQX1ZBTFVFICAgICAgICAgICAoMTw8MTApCisKICNkZWZpbmUgUU9TX1FVRVVFX05VTSAgICAgICAgICAgICAgICAgICA0CiAjZGVmaW5lIFFPU19PVUlfTEVOICAgICAgICAgICAgICAgICAgICAgMwogI2RlZmluZSBRT1NfT1VJX1RZUEUgICAgICAgICAgICAgICAgICAgIDIKQEAgLTEyNTIsNiArMTI1OSw4IEBACiAJCQkgICAgICBpbnQgdG90YWxfbGVuLCBpbnQgZW5jcnlwdF9tcGR1KTsKIAogLyogaWVlZTgwMjExX3J4LmMgKi8KK2V4dGVybiB2b2lkIGllZWU4MDIxMV9yeF9hbnkoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpOwogZXh0ZXJuIGludCBpZWVlODAyMTFfcngoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpyeF9zdGF0cyk7CiAvKiBtYWtlIHN1cmUgdG8gc2V0IHN0YXRzLT5sZW4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaCBiL2luY2x1ZGUvbmV0L2llZWU4MDIxMXNvZnRtYWMuaAppbmRleCAwMGFkODEwLi40MjViM2E1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pZWVlODAyMTFzb2Z0bWFjLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExc29mdG1hYy5oCkBAIC04Niw5ICs4Niw2IEBACiAJCiAJLyogQlNTSUQgd2UncmUgdHJ5aW5nIHRvIGFzc29jaWF0ZSB0byAqLwogCWNoYXIgYnNzaWRbRVRIX0FMRU5dOwotCi0JLyogUmF0ZXMgc3VwcG9ydGVkIGJ5IHRoZSBuZXR3b3JrICovCi0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfcmF0ZXNpbmZvIHN1cHBvcnRlZF9yYXRlczsKIAkKIAkvKiBzb21lIGZsYWdzLgogCSAqIHN0YXRpY19lc3NpZCBpcyB2YWxpZCBpZiB0aGUgZXNzaWQgaXMgY29uc3RhbnQsCkBAIC0xMDMsNiArMTAwLDcgQEAKIAkgKiBic3NmaXhlZCBpcyB1c2VkIGZvciBTSU9DU0lXQVAuCiAJICovCiAJdTggc3RhdGljX2Vzc2lkOjEsCisJICAgc2hvcnRfcHJlYW1ibGVfYXZhaWxhYmxlOjEsCiAJICAgYXNzb2NpYXRpbmc6MSwKIAkgICBhc3NvY193YWl0OjEsCiAJICAgYnNzdmFsaWQ6MSwKQEAgLTExNSw2ICsxMTMsMTkgQEAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGltZW91dDsKIH07CiAKK3N0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2Jzc19pbmZvIHsKKwkvKiBSYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIG5ldHdvcmsgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gc3VwcG9ydGVkX3JhdGVzOworCisJLyogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciBmcmFtZXMgY2FuIGN1cnJlbnRseSBiZSB0cmFuc21pdHRlZCB3aXRoCisJICogc2hvcnQgcHJlYW1ibGUgKG9ubHkgdXNlIHRoaXMgdmFyaWFibGUgZHVyaW5nIFRYIGF0IENDSyByYXRlcykgKi8KKwl1OCBzaG9ydF9wcmVhbWJsZToxOworCisJLyogVGhpcyBpbmRpY2F0ZXMgd2hldGhlciBwcm90ZWN0aW9uIChlLmcuIHNlbGYtQ1RTKSBzaG91bGQgYmUgdXNlZAorCSAqIHdoZW4gdHJhbnNtaXR0aW5nIHdpdGggT0ZETSBtb2R1bGF0aW9uICovCisJdTggdXNlX3Byb3RlY3Rpb246MTsKK307CisKIGVudW0gewogCUlFRUU4MDIxMVNPRlRNQUNfQVVUSF9PUEVOX1JFUVVFU1QJPSAxLAogCUlFRUU4MDIxMVNPRlRNQUNfQVVUSF9PUEVOX1JFU1BPTlNFCT0gMiwKQEAgLTE1Nyw2ICsxNjgsMTAgQEAKICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUNBU1QJCSgxIDw8IDIpIC8qIG1jYXN0X3JhdGUgKi8KICNkZWZpbmUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfTUdUX01DQVNUCQkoMSA8PCAzKSAvKiBtZ3RfbWNhc3RfcmF0ZSAqLwogCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIR19SQVRFUwkJKDEgPDwgMCkgLyogc3VwcG9ydGVkX3JhdGVzICovCisjZGVmaW5lIElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIR19TSE9SVF9QUkVBTUJMRQkoMSA8PCAxKSAvKiBzaG9ydF9wcmVhbWJsZSAqLworI2RlZmluZSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfUFJPVEVDVElPTgkJKDEgPDwgMikgLyogdXNlX3Byb3RlY3Rpb24gKi8KKwogc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlIHsKIAkvKiA4MDIuMTEgc3RydWN0dXJlIGZvciBkYXRhIHN0dWZmICovCiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWU7CkBAIC0yMDAsMTAgKzIxNSwxNiBAQAogCSAqIFRoZSBkcml2ZXIganVzdCBuZWVkcyB0byByZWFkIHRoZW0uCiAJICovCiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyB0eHJhdGVzOwotCS8qIElmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gc3R1ZmYgb24gVFggcmF0ZSBjaGFuZ2VzLCBhc3NpZ24gdGhpcyBjYWxsYmFjay4gKi8KKworCS8qIElmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gc3R1ZmYgb24gVFggcmF0ZSBjaGFuZ2VzLCBhc3NpZ24gdGhpcworCSAqIGNhbGxiYWNrLiBTZWUgSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEcgZm9yIGNoYW5nZSBmbGFncy4gKi8KIAl2b2lkICgqdHhyYXRlc19jaGFuZ2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgICAgdTMyIGNoYW5nZXMsIC8qIHNlZSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIRyBmbGFncyAqLwotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgKnJhdGVzX2JlZm9yZV9jaGFuZ2UpOworCQkJICAgICAgIHUzMiBjaGFuZ2VzKTsKKworCS8qIElmIHRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gc3R1ZmYgd2hlbiBCU1MgcHJvcGVydGllcyBjaGFuZ2UsIGFzc2lnbgorCSAqIHRoaXMgY2FsbGJhY2suIHNlZSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEcgZm9yIGNoYW5nZSBmbGFncy4gKi8KKwl2b2lkICgqYnNzaW5mb19jaGFuZ2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgdTMyIGNoYW5nZXMpOwogCiAJLyogcHJpdmF0ZSBzdHVmZiBmb2xsb3dzICovCiAJLyogdGhpcyBsb2NrIHByb3RlY3RzIHRoaXMgc3RydWN0dXJlICovCkBAIC0yMTYsNiArMjM3LDcgQEAKIAkKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19zY2FuaW5mbyAqc2NhbmluZm87CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXNzb2NfaW5mbyBhc3NvY2luZm87CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYnNzX2luZm8gYnNzaW5mbzsKIAogCXN0cnVjdCBsaXN0X2hlYWQgYXV0aF9xdWV1ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50czsKQEAgLTI1Nyw2ICsyNzksMTQgQEAKICAqIE5vdGUgdGhhdCB0aGUgcmF0ZXMgbmVlZCB0byBiZSBzb3J0ZWQuICovCiBleHRlcm4gdm9pZCBpZWVlODAyMTFzb2Z0bWFjX3NldF9yYXRlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBjb3VudCwgdTggKnJhdGVzKTsKIAorLyogRmluZHMgdGhlIGhpZ2hlc3QgcmF0ZSB3aGljaCBpczoKKyAqICAxLiBQcmVzZW50IGluIHJpIChvcHRpb25hbGx5IGEgYmFzaWMgcmF0ZSkKKyAqICAyLiBTdXBwb3J0ZWQgYnkgdGhlIGRldmljZQorICogIDMuIExlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgdXNlci1kZWZpbmVkIHJhdGUKKyAqLworZXh0ZXJuIHU4IGllZWU4MDIxMXNvZnRtYWNfaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gKnJpLCBpbnQgYmFzaWNfb25seSk7CisKIC8qIEhlbHBlciBmdW5jdGlvbiB3aGljaCBhZHZpc2VzIHlvdSB0aGUgcmF0ZSBhdCB3aGljaCBhIGZyYW1lIHNob3VsZCBiZQogICogdHJhbnNtaXR0ZWQgYXQuICovCiBzdGF0aWMgaW5saW5lIHU4IGllZWU4MDIxMXNvZnRtYWNfc3VnZ2VzdF90eHJhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCkBAIC0yNzksNiArMzA5LDI0IEBACiAJCXJldHVybiB0eHJhdGVzLT5tY2FzdF9yYXRlOwogfQogCisvKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggYWR2aXNlcyB5b3Ugd2hlbiBpdCBpcyBzYWZlIHRvIHRyYW5zbWl0IHdpdGggc2hvcnQKKyAqIHByZWFtYmxlLgorICogWW91IHNob3VsZCBvbmx5IGNhbGwgdGhpcyBmdW5jdGlvbiB3aGVuIHRyYW5zbWl0dGluZyBhdCBDQ0sgcmF0ZXMuICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFzb2Z0bWFjX3Nob3J0X3ByZWFtYmxlX29rKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAorCQkJCQkJICAgIGludCBpc19tdWx0aWNhc3QsCisJCQkJCQkgICAgaW50IGlzX21ndCkKK3sKKwlyZXR1cm4gKGlzX211bHRpY2FzdCAmJiBpc19tZ3QpID8gMCA6IG1hYy0+YnNzaW5mby5zaG9ydF9wcmVhbWJsZTsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGFkdmlzZXMgeW91IHdoZXRoZXIgcHJvdGVjdGlvbiAoZS5nLiBzZWxmLUNUUykgaXMKKyAqIG5lZWRlZC4gMSA9IHByb3RlY3Rpb24gbmVlZGVkLCAwID0gbm8gcHJvdGVjdGlvbiBuZWVkZWQKKyAqIE9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gd2hlbiB0cmFuc21pdHRpbmcgd2l0aCBPRkRNIG1vZHVsYXRpb24uICovCitzdGF0aWMgaW5saW5lIGludCBpZWVlODAyMTFzb2Z0bWFjX3Byb3RlY3Rpb25fbmVlZGVkKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKQoreworCXJldHVybiBtYWMtPmJzc2luZm8udXNlX3Byb3RlY3Rpb247Cit9CisKIC8qIFN0YXJ0IHRoZSBTb2Z0TUFDLiBDYWxsIHRoaXMgYWZ0ZXIgeW91IGluaXRpYWxpemVkIHRoZSBkZXZpY2UKICAqIGFuZCBpdCBpcyByZWFkeSB0byBydW4uCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwNl9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKaW5kZXggYWIyOWRhZi4uOTZiMGU2NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKKysrIGIvaW5jbHVkZS9uZXQvaXA2X3JvdXRlLmgKQEAgLTEzOSwxNiArMTM5LDIyIEBACiAvKgogICoJU3RvcmUgYSBkZXN0aW5hdGlvbiBjYWNoZSBlbnRyeSBpbiBhIHNvY2tldAogICovCi1zdGF0aWMgaW5saW5lIHZvaWQgaXA2X2RzdF9zdG9yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQkgICAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pcDZfZHN0X3N0b3JlKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAorCQkJCSAgIHN0cnVjdCBpbjZfYWRkciAqZGFkZHIpCiB7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBydDZfaW5mbyAqcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIGRzdDsKIAotCXdyaXRlX2xvY2soJnNrLT5za19kc3RfbG9jayk7CiAJc2tfc2V0dXBfY2FwcyhzaywgZHN0KTsKIAlucC0+ZGFkZHJfY2FjaGUgPSBkYWRkcjsKIAlucC0+ZHN0X2Nvb2tpZSA9IHJ0LT5ydDZpX25vZGUgPyBydC0+cnQ2aV9ub2RlLT5mbl9zZXJudW0gOiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXA2X2RzdF9zdG9yZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCQkgc3RydWN0IGluNl9hZGRyICpkYWRkcikKK3sKKwl3cml0ZV9sb2NrKCZzay0+c2tfZHN0X2xvY2spOworCV9faXA2X2RzdF9zdG9yZShzaywgZHN0LCBkYWRkcik7CiAJd3JpdGVfdW5sb2NrKCZzay0+c2tfZHN0X2xvY2spOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcGNvbXAuaCBiL2luY2x1ZGUvbmV0L2lwY29tcC5oCmluZGV4IGU2NTFhNTcuLjg3YzFhZjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwY29tcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwY29tcC5oCkBAIC0xLDExICsxLDE0IEBACiAjaWZuZGVmIF9ORVRfSVBDT01QX0gKICNkZWZpbmUgX05FVF9JUENPTVBfSAogCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2RlZmluZSBJUENPTVBfU0NSQVRDSF9TSVpFICAgICA2NTQwMAogCiBzdHJ1Y3QgaXBjb21wX2RhdGEgewogCXUxNiB0aHJlc2hvbGQ7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKip0Zm1zOworCXN0cnVjdCBjcnlwdG9fY29tcCAqKnRmbXM7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBhOGZkZjc5Li5lY2U3ZThhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC00NjgsNiArNDY4LDkgQEAKIGV4dGVybiBpbnQJCQlpcDZfZHN0X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAogCQkJCQkgICAgICAgc3RydWN0IGZsb3dpICpmbCk7CitleHRlcm4gaW50CQkJaXA2X3NrX2RzdF9sb29rdXAoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICBzdHJ1Y3QgZHN0X2VudHJ5ICoqZHN0LAorCQkJCQkJICBzdHJ1Y3QgZmxvd2kgKmZsKTsKIAogLyoKICAqCXNrYiBwcm9jZXNzaW5nIGZ1bmN0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZG1hLmggYi9pbmNsdWRlL25ldC9uZXRkbWEuaAppbmRleCBjZWFlNWVlLi43ZjUzY2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRkbWEuaAorKysgYi9pbmNsdWRlL25ldC9uZXRkbWEuaApAQCAtMjksNyArMjksNyBAQAogewogCXN0cnVjdCBkbWFfY2hhbiAqY2hhbjsKIAlyY3VfcmVhZF9sb2NrKCk7Ci0JY2hhbiA9IHJjdV9kZXJlZmVyZW5jZShfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YS5uZXRfZG1hKSk7CisJY2hhbiA9IHJjdV9kZXJlZmVyZW5jZShfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YSkubmV0X2RtYSk7CiAJaWYgKGNoYW4pCiAJCWRtYV9jaGFuX2dldChjaGFuKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGV2ZW50LmggYi9pbmNsdWRlL25ldC9uZXRldmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZDIxNjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC9uZXRldmVudC5oCkBAIC0wLDAgKzEsMzMgQEAKKyNpZm5kZWYgX05FVF9FVkVOVF9ICisjZGVmaW5lIF9ORVRfRVZFTlRfSAorCisvKgorICoJR2VuZXJpYyBuZXRldmVudCBub3RpZmllcnMKKyAqCisgKglBdXRob3JzOgorICogICAgICBUb20gVHVja2VyICAgICAgICAgICAgICA8dG9tQG9wZW5ncmlkY29tcHV0aW5nLmNvbT4KKyAqICAgICAgU3RldmUgV2lzZSAgICAgICAgICAgICAgPHN3aXNlQG9wZW5ncmlkY29tcHV0aW5nLmNvbT4KKyAqCisgKiAJQ2hhbmdlczoKKyAqLworI2lmZGVmIF9fS0VSTkVMX18KKworI2luY2x1ZGUgPG5ldC9kc3QuaD4KKworc3RydWN0IG5ldGV2ZW50X3JlZGlyZWN0IHsKKwlzdHJ1Y3QgZHN0X2VudHJ5ICpvbGQ7CisJc3RydWN0IGRzdF9lbnRyeSAqbmV3OworfTsKKworZW51bSBuZXRldmVudF9ub3RpZl90eXBlIHsKKwlORVRFVkVOVF9ORUlHSF9VUERBVEUgPSAxLCAvKiBhcmcgaXMgc3RydWN0IG5laWdoYm91ciBwdHIgKi8KKwlORVRFVkVOVF9QTVRVX1VQREFURSwJICAgLyogYXJnIGlzIHN0cnVjdCBkc3RfZW50cnkgcHRyICovCisJTkVURVZFTlRfUkVESVJFQ1QsCSAgIC8qIGFyZyBpcyBzdHJ1Y3QgbmV0ZXZlbnRfcmVkaXJlY3QgcHRyICovCit9OworCitleHRlcm4gaW50IHJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCB1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOworZXh0ZXJuIGludCBjYWxsX25ldGV2ZW50X25vdGlmaWVycyh1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdik7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yZWQuaCBiL2luY2x1ZGUvbmV0L3JlZC5oCmluZGV4IDVjY2RiYjMuLmE0ZWIzNzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JlZC5oCisrKyBiL2luY2x1ZGUvbmV0L3JlZC5oCkBAIC0yMTIsNyArMjEyLDcgQEAKIAkJICogU2VlbXMsIGl0IGlzIHRoZSBiZXN0IHNvbHV0aW9uIHRvCiAJCSAqIHByb2JsZW0gb2YgdG9vIGNvYXJzZSBleHBvbmVudCB0YWJ1bGF0aW9uLgogCQkgKi8KLQkJdXNfaWRsZSA9IChwLT5xYXZnICogdXNfaWRsZSkgPj4gcC0+U2NlbGxfbG9nOworCQl1c19pZGxlID0gKHAtPnFhdmcgKiAodTY0KXVzX2lkbGUpID4+IHAtPlNjZWxsX2xvZzsKIAogCQlpZiAodXNfaWRsZSA8IChwLT5xYXZnID4+IDEpKQogCQkJcmV0dXJuIHAtPnFhdmcgLSB1c19pZGxlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2NtLmggYi9pbmNsdWRlL25ldC9zY20uaAppbmRleCAwMmRhYTA5Li41NjM3ZDVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY20uaAorKysgYi9pbmNsdWRlL25ldC9zY20uaApAQCAtMyw2ICszLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbWl0cy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKIC8qIFdlbGwsIHdlIHNob3VsZCBoYXZlIGF0IGxlYXN0IG9uZSBkZXNjcmlwdG9yIG9wZW4KICAqIHRvIGFjY2VwdCBwYXNzZWQgRkRzIDgpCkBAIC0yMCw4ICsyMSw3IEBACiAJc3RydWN0IHVjcmVkCQljcmVkczsJCS8qIFNrYiBjcmVkZW50aWFscwkqLwogCXN0cnVjdCBzY21fZnBfbGlzdAkqZnA7CQkvKiBQYXNzZWQgZmlsZXMJCSovCiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksKLQljaGFyCQkJKnNlY2RhdGE7CS8qIFNlY3VyaXR5IGNvbnRleHQJKi8KLQl1MzIJCQlzZWNsZW47CQkvKiBTZWN1cml0eSBsZW5ndGgJKi8KKwl1MzIJCQlzZWNpZDsJCS8qIFBhc3NlZCBzZWN1cml0eSBJRCAJKi8KICNlbmRpZgogCXVuc2lnbmVkIGxvbmcJCXNlcTsJCS8qIENvbm5lY3Rpb24gc2Vxbm8JKi8KIH07CkBAIC0zMiw2ICszMiwxNiBAQAogZXh0ZXJuIHZvaWQgX19zY21fZGVzdHJveShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtKTsKIGV4dGVybiBzdHJ1Y3Qgc2NtX2ZwX2xpc3QgKiBzY21fZnBfZHVwKHN0cnVjdCBzY21fZnBfbGlzdCAqZnBsKTsKIAorI2lmZGVmIENPTkZJR19TRUNVUklUWV9ORVRXT1JLCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHVuaXhfZ2V0X3BlZXJzZWNfZGdyYW0oc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKK3sKKwlzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzb2NrLCBOVUxMLCAmc2NtLT5zZWNpZCk7Cit9CisjZWxzZQorc3RhdGljIF9faW5saW5lX18gdm9pZCB1bml4X2dldF9wZWVyc2VjX2RncmFtKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzY21fY29va2llICpzY20pCit7IH0KKyNlbmRpZiAvKiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSyAqLworCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNjbV9kZXN0cm95KHN0cnVjdCBzY21fY29va2llICpzY20pCiB7CiAJaWYgKHNjbSAmJiBzY20tPmZwKQpAQCAtNDcsNiArNTcsNyBAQAogCXNjbS0+Y3JlZHMucGlkID0gcC0+dGdpZDsKIAlzY20tPmZwID0gTlVMTDsKIAlzY20tPnNlcSA9IDA7CisJdW5peF9nZXRfcGVlcnNlY19kZ3JhbShzb2NrLCBzY20pOwogCWlmIChtc2ctPm1zZ19jb250cm9sbGVuIDw9IDApCiAJCXJldHVybiAwOwogCXJldHVybiBfX3NjbV9zZW5kKHNvY2ssIG1zZywgc2NtKTsKQEAgLTU1LDggKzY2LDE4IEBACiAjaWZkZWYgQ09ORklHX1NFQ1VSSVRZX05FVFdPUksKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY21fcGFzc2VjKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm1zZywgc3RydWN0IHNjbV9jb29raWUgKnNjbSkKIHsKLQlpZiAodGVzdF9iaXQoU09DS19QQVNTU0VDLCAmc29jay0+ZmxhZ3MpICYmIHNjbS0+c2VjZGF0YSAhPSBOVUxMKQotCQlwdXRfY21zZyhtc2csIFNPTF9TT0NLRVQsIFNDTV9TRUNVUklUWSwgc2NtLT5zZWNsZW4sIHNjbS0+c2VjZGF0YSk7CisJY2hhciAqc2VjZGF0YTsKKwl1MzIgc2VjbGVuOworCWludCBlcnI7CisKKwlpZiAodGVzdF9iaXQoU09DS19QQVNTU0VDLCAmc29jay0+ZmxhZ3MpKSB7CisJCWVyciA9IHNlY3VyaXR5X3NlY2lkX3RvX3NlY2N0eChzY20tPnNlY2lkLCAmc2VjZGF0YSwgJnNlY2xlbik7CisKKwkJaWYgKCFlcnIpIHsKKwkJCXB1dF9jbXNnKG1zZywgU09MX1NPQ0tFVCwgU0NNX1NFQ1VSSVRZLCBzZWNsZW4sIHNlY2RhdGEpOworCQkJc2VjdXJpdHlfcmVsZWFzZV9zZWNjdHgoc2VjZGF0YSwgc2VjbGVuKTsKKwkJfQorCX0KIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2NtX3Bhc3NlYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBzY21fY29va2llICpzY20pCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9jb25zdGFudHMuaAppbmRleCBjNTE1NDFlLi41NzE2NmJmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL2NvbnN0YW50cy5oCisrKyBiL2luY2x1ZGUvbmV0L3NjdHAvY29uc3RhbnRzLmgKQEAgLTMxMiw5ICszMTIsOSBAQAogCQkJCSAqLwogCiAjaWYgZGVmaW5lZCAoQ09ORklHX1NDVFBfSE1BQ19NRDUpCi0jZGVmaW5lIFNDVFBfQ09PS0lFX0hNQUNfQUxHICJtZDUiCisjZGVmaW5lIFNDVFBfQ09PS0lFX0hNQUNfQUxHICJobWFjKG1kNSkiCiAjZWxpZiBkZWZpbmVkIChDT05GSUdfU0NUUF9ITUFDX1NIQTEpCi0jZGVmaW5lIFNDVFBfQ09PS0lFX0hNQUNfQUxHICJzaGExIgorI2RlZmluZSBTQ1RQX0NPT0tJRV9ITUFDX0FMRyAiaG1hYyhzaGExKSIKICNlbHNlCiAjZGVmaW5lIFNDVFBfQ09PS0lFX0hNQUNfQUxHIE5VTEwKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc2N0cC9zY3RwLmggYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAppbmRleCBhOTY2M2I0Li4xYzFhYmNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaAorKysgYi9pbmNsdWRlL25ldC9zY3RwL3NjdHAuaApAQCAtMzMwLDE3ICszMzAsNiBAQAogCiAjZW5kaWYgLyogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpICovCiAKLS8qIFNvbWUgd3JhcHBlcnMsIGluIGNhc2UgY3J5cHRvIG5vdCBhdmFpbGFibGUuICovCi0jaWYgZGVmaW5lZCAoQ09ORklHX0NSWVBUT19ITUFDKQotI2RlZmluZSBzY3RwX2NyeXB0b19hbGxvY190Zm0gY3J5cHRvX2FsbG9jX3RmbQotI2RlZmluZSBzY3RwX2NyeXB0b19mcmVlX3RmbSBjcnlwdG9fZnJlZV90Zm0KLSNkZWZpbmUgc2N0cF9jcnlwdG9faG1hYyBjcnlwdG9faG1hYwotI2Vsc2UKLSNkZWZpbmUgc2N0cF9jcnlwdG9fYWxsb2NfdGZtKHguLi4pIE5VTEwKLSNkZWZpbmUgc2N0cF9jcnlwdG9fZnJlZV90Zm0oeC4uLikKLSNkZWZpbmUgc2N0cF9jcnlwdG9faG1hYyh4Li4uKQotI2VuZGlmCi0KIAogLyogTWFwIGFuIGFzc29jaWF0aW9uIHRvIGFuIGFzc29jX2lkLiAqLwogc3RhdGljIGlubGluZSBzY3RwX2Fzc29jX3Qgc2N0cF9hc3NvYzJpZChjb25zdCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKQEAgLTQwNCwxOSArMzkzLDYgQEAKIAlyZXR1cm4gKChoZWFkLT5uZXh0ICE9IGhlYWQpICYmIChoZWFkLT5uZXh0ID09IGhlYWQtPnByZXYpKTsKIH0KIAotLyogQ2FsY3VsYXRlIHRoZSBzaXplIChpbiBieXRlcykgb2NjdXBpZWQgYnkgdGhlIGRhdGEgb2YgYW4gaW92ZWMuICAqLwotc3RhdGljIGlubGluZSBzaXplX3QgZ2V0X3VzZXJfaW92X3NpemUoc3RydWN0IGlvdmVjICppb3YsIGludCBpb3ZsZW4pCi17Ci0Jc2l6ZV90IHJldHZhbCA9IDA7Ci0KLQlmb3IgKDsgaW92bGVuID4gMDsgLS1pb3ZsZW4pIHsKLQkJcmV0dmFsICs9IGlvdi0+aW92X2xlbjsKLQkJaW92Kys7Ci0JfQotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQogLyogR2VuZXJhdGUgYSByYW5kb20gaml0dGVyIGluIHRoZSByYW5nZSBvZiAtNTAlIH4gKzUwJSBvZiBpbnB1dCBSVE8uICovCiBzdGF0aWMgaW5saW5lIF9fczMyIHNjdHBfaml0dGVyKF9fdTMyIHJ0bykKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc20uaCBiL2luY2x1ZGUvbmV0L3NjdHAvc20uaAppbmRleCAxZWFjM2QwLi5kZTMxM2RlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zY3RwL3NtLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zbS5oCkBAIC0yMjEsOCArMjIxLDcgQEAKIAkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAogCQkJCSAgICAgIF9fdTMyIHRzbik7CiBzdHJ1Y3Qgc2N0cF9jaHVuayAqc2N0cF9tYWtlX2Fib3J0X3VzZXIoY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKLQkJCQkgICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBtc2doZHIgKik7CisJCQkJCWNvbnN0IHN0cnVjdCBtc2doZHIgKiwgc2l6ZV90IG1zZ19sZW4pOwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hYm9ydF92aW9sYXRpb24oY29uc3Qgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKIAkJCQkgICBjb25zdCBzdHJ1Y3Qgc2N0cF9jaHVuayAqLAogCQkJCSAgIGNvbnN0IF9fdTggKiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjdHAvc3RydWN0cy5oIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKaW5kZXggZTVhYTdmZi4uMDQxMmU3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKKysrIGIvaW5jbHVkZS9uZXQvc2N0cC9zdHJ1Y3RzLmgKQEAgLTg3LDYgKzg3LDcgQEAKIHN0cnVjdCBzY3RwX3VscHE7CiBzdHJ1Y3Qgc2N0cF9lcF9jb21tb247CiBzdHJ1Y3Qgc2N0cF9zc25tYXA7CitzdHJ1Y3QgY3J5cHRvX2hhc2g7CiAKIAogI2luY2x1ZGUgPG5ldC9zY3RwL3Rzbm1hcC5oPgpAQCAtMjY0LDcgKzI2NSw3IEBACiAJc3RydWN0IHNjdHBfcGYgKnBmOwogCiAJLyogQWNjZXNzIHRvIEhNQUMgdHJhbnNmb3JtLiAqLwotCXN0cnVjdCBjcnlwdG9fdGZtICpobWFjOworCXN0cnVjdCBjcnlwdG9faGFzaCAqaG1hYzsKIAogCS8qIFdoYXQgaXMgb3VyIGJhc2UgZW5kcG9pbnRlcj8gKi8KIAlzdHJ1Y3Qgc2N0cF9lbmRwb2ludCAqZXA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC90Y3AuaCBiL2luY2x1ZGUvbmV0L3RjcC5oCmluZGV4IDA3MjBiZGQuLjdhMDkzZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3RjcC5oCisrKyBiL2luY2x1ZGUvbmV0L3RjcC5oCkBAIC05MTQsNiArOTE0LDkgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9kb25lKHN0cnVjdCBzb2NrICpzaykKIHsKKwlpZihzay0+c2tfc3RhdGUgPT0gVENQX1NZTl9TRU5UIHx8IHNrLT5za19zdGF0ZSA9PSBUQ1BfU1lOX1JFQ1YpCisJCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9BVFRFTVBURkFJTFMpOworCiAJdGNwX3NldF9zdGF0ZShzaywgVENQX0NMT1NFKTsKIAl0Y3BfY2xlYXJfeG1pdF90aW1lcnMoc2spOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC94ZnJtLmggYi9pbmNsdWRlL25ldC94ZnJtLmgKaW5kZXggOWM1ZWU5Zi4uM2VjZDlmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQveGZybS5oCisrKyBiL2luY2x1ZGUvbmV0L3hmcm0uaApAQCAtOCw3ICs4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvcGZrZXl2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2luNi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC04NTUsNiArODU0LDcgQEAKIAogc3RydWN0IHhmcm1fYWxnb19kZXNjIHsKIAljaGFyICpuYW1lOworCWNoYXIgKmNvbXBhdDsKIAl1OCBhdmFpbGFibGU6MTsKIAl1bmlvbiB7CiAJCXN0cnVjdCB4ZnJtX2FsZ29fYXV0aF9pbmZvIGF1dGg7CkBAIC05ODQsMTEgKzk4NCwxMyBAQAogZXh0ZXJuIHN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqeGZybV9lYWxnX2dldF9ieW5hbWUoY2hhciAqbmFtZSwgaW50IHByb2JlKTsKIGV4dGVybiBzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKnhmcm1fY2FsZ19nZXRfYnluYW1lKGNoYXIgKm5hbWUsIGludCBwcm9iZSk7CiAKLXN0cnVjdCBjcnlwdG9fdGZtOwotdHlwZWRlZiB2b2lkIChpY3ZfdXBkYXRlX2ZuX3QpKHN0cnVjdCBjcnlwdG9fdGZtICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCB1bnNpZ25lZCBpbnQpOworc3RydWN0IGhhc2hfZGVzYzsKK3N0cnVjdCBzY2F0dGVybGlzdDsKK3R5cGVkZWYgaW50IChpY3ZfdXBkYXRlX2ZuX3QpKHN0cnVjdCBoYXNoX2Rlc2MgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosCisJCQkgICAgICB1bnNpZ25lZCBpbnQpOwogCi1leHRlcm4gdm9pZCBza2JfaWN2X3dhbGsoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKLQkJCSBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpY3ZfdXBkYXRlX2ZuX3QgaWN2X3VwZGF0ZSk7CitleHRlcm4gaW50IHNrYl9pY3Zfd2Fsayhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaGFzaF9kZXNjICp0Zm0sCisJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpY3ZfdXBkYXRlX2ZuX3QgaWN2X3VwZGF0ZSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhmcm1fYWRkcl9jbXAoeGZybV9hZGRyZXNzX3QgKmEsIHhmcm1fYWRkcmVzc190ICpiLAogCQkJCWludCBmYW1pbHkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvS2J1aWxkIGIvaW5jbHVkZS9yZG1hL0tidWlsZAppbmRleCBlYjcxMGJhLi5lN2MwNDMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvS2J1aWxkCisrKyBiL2luY2x1ZGUvcmRtYS9LYnVpbGQKQEAgLTEgKzEgQEAKLWhlYWRlci15IDo9IGliX3VzZXJfbWFkLmgKK2hlYWRlci15ICs9IGliX3VzZXJfbWFkLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmggYi9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCmluZGV4IDBmZjY3MzkuLjgxYjYyMzA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfYWRkci5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9hZGRyLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAl1bnNpZ25lZCBjaGFyIHNyY19kZXZfYWRkcltNQVhfQUREUl9MRU5dOwogCXVuc2lnbmVkIGNoYXIgZHN0X2Rldl9hZGRyW01BWF9BRERSX0xFTl07CiAJdW5zaWduZWQgY2hhciBicm9hZGNhc3RbTUFYX0FERFJfTEVOXTsKLQllbnVtIGliX25vZGVfdHlwZSBkZXZfdHlwZTsKKwllbnVtIHJkbWFfbm9kZV90eXBlIGRldl90eXBlOwogfTsKIAogLyoqCkBAIC03Miw2ICs3Miw5IEBACiAKIHZvaWQgcmRtYV9hZGRyX2NhbmNlbChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqYWRkcik7CiAKK2ludCByZG1hX2NvcHlfYWRkcihzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqZHN0X2Rldl9hZGRyKTsKKwogc3RhdGljIGlubGluZSBpbnQgaXBfYWRkcl9zaXplKHN0cnVjdCBzb2NrYWRkciAqYWRkcikKIHsKIAlyZXR1cm4gYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2ID8KQEAgLTExMyw0ICsxMTYsMTYgQEAKIAltZW1jcHkoZGV2X2FkZHItPmRzdF9kZXZfYWRkciArIDQsIGdpZCwgc2l6ZW9mICpnaWQpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaXdfYWRkcl9nZXRfc2dpZChzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIsCisJCQkJICAgIHVuaW9uIGliX2dpZCAqZ2lkKQoreworCW1lbWNweShnaWQsIGRldl9hZGRyLT5zcmNfZGV2X2FkZHIsIHNpemVvZiAqZ2lkKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGl3X2FkZHJfZ2V0X2RnaWQoc3RydWN0IHJkbWFfZGV2X2FkZHIgKmRldl9hZGRyLAorCQkJCSAgICB1bmlvbiBpYl9naWQgKmdpZCkKK3sKKwltZW1jcHkoZ2lkLCBkZXZfYWRkci0+ZHN0X2Rldl9hZGRyLCBzaXplb2YgKmdpZCk7Cit9CisKICNlbmRpZiAvKiBJQl9BRERSX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl9zYS5oIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKaW5kZXggYzk5ZTQ0Mi4uOTc3MTViMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3NhLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3NhLmgKQEAgLTEsNiArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDA0IFRvcHNwaW4gQ29tbXVuaWNhdGlvbnMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChjKSAyMDA1IFZvbHRhaXJlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA2IEludGVsIENvcnBvcmF0aW9uLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bwogICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQpAQCAtMzYsOCArMzcsMTEgQEAKICNpZm5kZWYgSUJfU0FfSAogI2RlZmluZSBJQl9TQV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KIAorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKwogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KICNpbmNsdWRlIDxyZG1hL2liX21hZC5oPgogCkBAIC03OSw4ICs4Myw4IEBACiB9OwogCiBlbnVtIGliX3NhX3NlbGVjdG9yIHsKLQlJQl9TQV9HVEUgID0gMCwKLQlJQl9TQV9MVEUgID0gMSwKKwlJQl9TQV9HVCAgID0gMCwKKwlJQl9TQV9MVCAgID0gMSwKIAlJQl9TQV9FUSAgID0gMiwKIAkvKgogCSAqIFRoZSBtZWFuaW5nIG9mICJiZXN0IiBkZXBlbmRzIG9uIHRoZSBhdHRyaWJ1dGU6IGZvcgpAQCAtMjUwLDExICsyNTQsMjggQEAKIAl1NjQJCWRhdGE2NFsyXTsKIH07CiAKK3N0cnVjdCBpYl9zYV9jbGllbnQgeworCWF0b21pY190IHVzZXJzOworCXN0cnVjdCBjb21wbGV0aW9uIGNvbXA7Cit9OworCisvKioKKyAqIGliX3NhX3JlZ2lzdGVyX2NsaWVudCAtIFJlZ2lzdGVyIGFuIFNBIGNsaWVudC4KKyAqLwordm9pZCBpYl9zYV9yZWdpc3Rlcl9jbGllbnQoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50KTsKKworLyoqCisgKiBpYl9zYV91bnJlZ2lzdGVyX2NsaWVudCAtIERlcmVnaXN0ZXIgYW4gU0EgY2xpZW50LgorICogQGNsaWVudDogQ2xpZW50IG9iamVjdCB0byBkZXJlZ2lzdGVyLgorICovCit2b2lkIGliX3NhX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCk7CisKIHN0cnVjdCBpYl9zYV9xdWVyeTsKIAogdm9pZCBpYl9zYV9jYW5jZWxfcXVlcnkoaW50IGlkLCBzdHJ1Y3QgaWJfc2FfcXVlcnkgKnF1ZXJ5KTsKIAotaW50IGliX3NhX3BhdGhfcmVjX2dldChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAoraW50IGliX3NhX3BhdGhfcmVjX2dldChzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQsCisJCSAgICAgICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAogCQkgICAgICAgc3RydWN0IGliX3NhX3BhdGhfcmVjICpyZWMsCiAJCSAgICAgICBpYl9zYV9jb21wX21hc2sgY29tcF9tYXNrLAogCQkgICAgICAgaW50IHRpbWVvdXRfbXMsIGdmcF90IGdmcF9tYXNrLApAQCAtMjY0LDcgKzI4NSw4IEBACiAJCSAgICAgICB2b2lkICpjb250ZXh0LAogCQkgICAgICAgc3RydWN0IGliX3NhX3F1ZXJ5ICoqcXVlcnkpOwogCi1pbnQgaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgdTggcG9ydF9udW0sCitpbnQgaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KHN0cnVjdCBpYl9zYV9jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKIAkJCSAgICAgdTggbWV0aG9kLAogCQkJICAgICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZWMsCiAJCQkgICAgIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCkBAIC0yNzUsNyArMjk3LDggQEAKIAkJCSAgICAgdm9pZCAqY29udGV4dCwKIAkJCSAgICAgc3RydWN0IGliX3NhX3F1ZXJ5ICoqcXVlcnkpOwogCi1pbnQgaWJfc2Ffc2VydmljZV9yZWNfcXVlcnkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKK2ludCBpYl9zYV9zZXJ2aWNlX3JlY19xdWVyeShzdHJ1Y3QgaWJfc2FfY2xpZW50ICpjbGllbnQsCisJCQkgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKIAkJCSB1OCBtZXRob2QsCiAJCQkgc3RydWN0IGliX3NhX3NlcnZpY2VfcmVjICpyZWMsCiAJCQkgaWJfc2FfY29tcF9tYXNrIGNvbXBfbWFzaywKQEAgLTI4OCw2ICszMTEsNyBAQAogCiAvKioKICAqIGliX3NhX21jbWVtYmVyX3JlY19zZXQgLSBTdGFydCBhbiBNQ01lbWJlciBzZXQgcXVlcnkKKyAqIEBjbGllbnQ6U0EgY2xpZW50CiAgKiBAZGV2aWNlOmRldmljZSB0byBzZW5kIHF1ZXJ5IG9uCiAgKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyIHRvIHNlbmQgcXVlcnkgb24KICAqIEByZWM6TUNNZW1iZXIgUmVjb3JkIHRvIHNlbmQgaW4gcXVlcnkKQEAgLTMxMSw3ICszMzUsOCBAQAogICogY2FuY2VsIHRoZSBxdWVyeS4KICAqLwogc3RhdGljIGlubGluZSBpbnQKLWliX3NhX21jbWVtYmVyX3JlY19zZXQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKK2liX3NhX21jbWVtYmVyX3JlY19zZXQoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50LAorCQkgICAgICAgc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKIAkJICAgICAgIHN0cnVjdCBpYl9zYV9tY21lbWJlcl9yZWMgKnJlYywKIAkJICAgICAgIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCiAJCSAgICAgICBpbnQgdGltZW91dF9tcywgZ2ZwX3QgZ2ZwX21hc2ssCkBAIC0zMjEsNyArMzQ2LDcgQEAKIAkJICAgICAgIHZvaWQgKmNvbnRleHQsCiAJCSAgICAgICBzdHJ1Y3QgaWJfc2FfcXVlcnkgKipxdWVyeSkKIHsKLQlyZXR1cm4gaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KGRldmljZSwgcG9ydF9udW0sCisJcmV0dXJuIGliX3NhX21jbWVtYmVyX3JlY19xdWVyeShjbGllbnQsIGRldmljZSwgcG9ydF9udW0sCiAJCQkJCUlCX01HTVRfTUVUSE9EX1NFVCwKIAkJCQkJcmVjLCBjb21wX21hc2ssCiAJCQkJCXRpbWVvdXRfbXMsIGdmcF9tYXNrLCBjYWxsYmFjaywKQEAgLTMzMCw2ICszNTUsNyBAQAogCiAvKioKICAqIGliX3NhX21jbWVtYmVyX3JlY19kZWxldGUgLSBTdGFydCBhbiBNQ01lbWJlciBkZWxldGUgcXVlcnkKKyAqIEBjbGllbnQ6U0EgY2xpZW50CiAgKiBAZGV2aWNlOmRldmljZSB0byBzZW5kIHF1ZXJ5IG9uCiAgKiBAcG9ydF9udW06IHBvcnQgbnVtYmVyIHRvIHNlbmQgcXVlcnkgb24KICAqIEByZWM6TUNNZW1iZXIgUmVjb3JkIHRvIHNlbmQgaW4gcXVlcnkKQEAgLTM1Myw3ICszNzksOCBAQAogICogY2FuY2VsIHRoZSBxdWVyeS4KICAqLwogc3RhdGljIGlubGluZSBpbnQKLWliX3NhX21jbWVtYmVyX3JlY19kZWxldGUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLCB1OCBwb3J0X251bSwKK2liX3NhX21jbWVtYmVyX3JlY19kZWxldGUoc3RydWN0IGliX3NhX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIHU4IHBvcnRfbnVtLAogCQkJICBzdHJ1Y3QgaWJfc2FfbWNtZW1iZXJfcmVjICpyZWMsCiAJCQkgIGliX3NhX2NvbXBfbWFzayBjb21wX21hc2ssCiAJCQkgIGludCB0aW1lb3V0X21zLCBnZnBfdCBnZnBfbWFzaywKQEAgLTM2Myw3ICszOTAsNyBAQAogCQkJICB2b2lkICpjb250ZXh0LAogCQkJICBzdHJ1Y3QgaWJfc2FfcXVlcnkgKipxdWVyeSkKIHsKLQlyZXR1cm4gaWJfc2FfbWNtZW1iZXJfcmVjX3F1ZXJ5KGRldmljZSwgcG9ydF9udW0sCisJcmV0dXJuIGliX3NhX21jbWVtYmVyX3JlY19xdWVyeShjbGllbnQsIGRldmljZSwgcG9ydF9udW0sCiAJCQkJCUlCX1NBX01FVEhPRF9ERUxFVEUsCiAJCQkJCXJlYywgY29tcF9tYXNrLAogCQkJCQl0aW1lb3V0X21zLCBnZnBfbWFzaywgY2FsbGJhY2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3VzZXJfdmVyYnMuaAppbmRleCA3YjUzNzIwLi5kYjFiODE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdXNlcl92ZXJicy5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl91c2VyX3ZlcmJzLmgKQEAgLTI3NSw2ICsyNzUsOCBAQAogCiBzdHJ1Y3QgaWJfdXZlcmJzX3Jlc2l6ZV9jcV9yZXNwIHsKIAlfX3UzMiBjcWU7CisJX191MzIgcmVzZXJ2ZWQ7CisJX191NjQgZHJpdmVyX2RhdGFbMF07CiB9OwogCiBzdHJ1Y3QgaWJfdXZlcmJzX3BvbGxfY3EgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmggYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAppbmRleCBlZTFmM2EzLi44ZWFjYzM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaAorKysgYi9pbmNsdWRlL3JkbWEvaWJfdmVyYnMuaApAQCAtNTYsMTIgKzU2LDIyIEBACiAJfSBnbG9iYWw7CiB9OwogCi1lbnVtIGliX25vZGVfdHlwZSB7Ci0JSUJfTk9ERV9DQSAJPSAxLAotCUlCX05PREVfU1dJVENILAotCUlCX05PREVfUk9VVEVSCitlbnVtIHJkbWFfbm9kZV90eXBlIHsKKwkvKiBJQiB2YWx1ZXMgbWFwIHRvIE5vZGVJbmZvOk5vZGVUeXBlLiAqLworCVJETUFfTk9ERV9JQl9DQSAJPSAxLAorCVJETUFfTk9ERV9JQl9TV0lUQ0gsCisJUkRNQV9OT0RFX0lCX1JPVVRFUiwKKwlSRE1BX05PREVfUk5JQwogfTsKIAorZW51bSByZG1hX3RyYW5zcG9ydF90eXBlIHsKKwlSRE1BX1RSQU5TUE9SVF9JQiwKKwlSRE1BX1RSQU5TUE9SVF9JV0FSUAorfTsKKworZW51bSByZG1hX3RyYW5zcG9ydF90eXBlCityZG1hX25vZGVfZ2V0X3RyYW5zcG9ydChlbnVtIHJkbWFfbm9kZV90eXBlIG5vZGVfdHlwZSkgX19hdHRyaWJ1dGVfY29uc3RfXzsKKwogZW51bSBpYl9kZXZpY2VfY2FwX2ZsYWdzIHsKIAlJQl9ERVZJQ0VfUkVTSVpFX01BWF9XUgkJPSAxLAogCUlCX0RFVklDRV9CQURfUEtFWV9DTlRSCQk9ICgxPDwxKSwKQEAgLTc4LDYgKzg4LDkgQEAKIAlJQl9ERVZJQ0VfUkNfUk5SX05BS19HRU4JPSAoMTw8MTIpLAogCUlCX0RFVklDRV9TUlFfUkVTSVpFCQk9ICgxPDwxMyksCiAJSUJfREVWSUNFX05fTk9USUZZX0NRCQk9ICgxPDwxNCksCisJSUJfREVWSUNFX1pFUk9fU1RBRwkJPSAoMTw8MTUpLAorCUlCX0RFVklDRV9TRU5EX1dfSU5WCQk9ICgxPDwxNiksCisJSUJfREVWSUNFX01FTV9XSU5ET1cJCT0gKDE8PDE3KQogfTsKIAogZW51bSBpYl9hdG9taWNfY2FwIHsKQEAgLTgzNSw2ICs4NDgsOCBAQAogCXU4ICAgICAgICAgICAgICAgICAgICAgKmxtY19jYWNoZTsKIH07CiAKK3N0cnVjdCBpd19jbV92ZXJiczsKKwogc3RydWN0IGliX2RldmljZSB7CiAJc3RydWN0IGRldmljZSAgICAgICAgICAgICAgICAqZG1hX2RldmljZTsKIApAQCAtODUxLDYgKzg2Niw4IEBACiAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKIAorCXN0cnVjdCBpd19jbV92ZXJicwkgICAgICppd2NtOworCiAJaW50CQkgICAgICAgICAgICgqcXVlcnlfZGV2aWNlKShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCiAJCQkJCQkgICBzdHJ1Y3QgaWJfZGV2aWNlX2F0dHIgKmRldmljZV9hdHRyKTsKIAlpbnQJCSAgICAgICAgICAgKCpxdWVyeV9wb3J0KShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsCkBAIC04ODgsNyArOTA1LDggQEAKIAkJCQkJCSBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKm1vZGlmeV9zcnEpKHN0cnVjdCBpYl9zcnEgKnNycSwKIAkJCQkJCSBzdHJ1Y3QgaWJfc3JxX2F0dHIgKnNycV9hdHRyLAotCQkJCQkJIGVudW0gaWJfc3JxX2F0dHJfbWFzayBzcnFfYXR0cl9tYXNrKTsKKwkJCQkJCSBlbnVtIGliX3NycV9hdHRyX21hc2sgc3JxX2F0dHJfbWFzaywKKwkJCQkJCSBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAoKnF1ZXJ5X3NycSkoc3RydWN0IGliX3NycSAqc3JxLAogCQkJCQkJc3RydWN0IGliX3NycV9hdHRyICpzcnFfYXR0cik7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCpkZXN0cm95X3NycSkoc3RydWN0IGliX3NycSAqc3JxKTsKQEAgLTkwMCw3ICs5MTgsOCBAQAogCQkJCQkJc3RydWN0IGliX3VkYXRhICp1ZGF0YSk7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgKCptb2RpZnlfcXApKHN0cnVjdCBpYl9xcCAqcXAsCiAJCQkJCQlzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwKLQkJCQkJCWludCBxcF9hdHRyX21hc2spOworCQkJCQkJaW50IHFwX2F0dHJfbWFzaywKKwkJCQkJCXN0cnVjdCBpYl91ZGF0YSAqdWRhdGEpOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgICgqcXVlcnlfcXApKHN0cnVjdCBpYl9xcCAqcXAsCiAJCQkJCSAgICAgICBzdHJ1Y3QgaWJfcXBfYXR0ciAqcXBfYXR0ciwKIAkJCQkJICAgICAgIGludCBxcF9hdHRyX21hc2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaXdfY20uaCBiL2luY2x1ZGUvcmRtYS9pd19jbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWZhOWIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL3JkbWEvaXdfY20uaApAQCAtMCwwICsxLDI1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNSBOZXR3b3JrIEFwcGxpYW5jZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA1IE9wZW4gR3JpZCBDb21wdXRpbmcsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYSBjaG9pY2Ugb2Ygb25lIG9mIHR3bworICogbGljZW5zZXMuICBZb3UgbWF5IGNob29zZSB0byBiZSBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSBWZXJzaW9uIDIsIGF2YWlsYWJsZSBmcm9tIHRoZSBmaWxlCisgKiBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLCBvciB0aGUKKyAqIE9wZW5JQi5vcmcgQlNEIGxpY2Vuc2UgYmVsb3c6CisgKgorICogICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAqICAgICB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcKKyAqICAgICBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIuCisgKgorICogICAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyAqIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4KKyAqIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyAqIFNPRlRXQVJFLgorICovCisjaWZuZGVmIElXX0NNX0gKKyNkZWZpbmUgSVdfQ01fSAorCisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxyZG1hL2liX2NtLmg+CisKK3N0cnVjdCBpd19jbV9pZDsKKworZW51bSBpd19jbV9ldmVudF90eXBlIHsKKwlJV19DTV9FVkVOVF9DT05ORUNUX1JFUVVFU1QgPSAxLCAvKiBjb25uZWN0IHJlcXVlc3QgcmVjZWl2ZWQgKi8KKwlJV19DTV9FVkVOVF9DT05ORUNUX1JFUExZLAkgLyogcmVwbHkgZnJvbSBhY3RpdmUgY29ubmVjdCByZXF1ZXN0ICovCisJSVdfQ01fRVZFTlRfRVNUQUJMSVNIRUQsCSAvKiBwYXNzaXZlIHNpZGUgYWNjZXB0IHN1Y2Nlc3NmdWwgKi8KKwlJV19DTV9FVkVOVF9ESVNDT05ORUNULAkJIC8qIG9yZGVybHkgc2h1dGRvd24gKi8KKwlJV19DTV9FVkVOVF9DTE9TRQkJIC8qIGNsb3NlIGNvbXBsZXRlICovCit9OworCitlbnVtIGl3X2NtX2V2ZW50X3N0YXR1cyB7CisJSVdfQ01fRVZFTlRfU1RBVFVTX09LID0gMCwJIC8qIHJlcXVlc3Qgc3VjY2Vzc2Z1bCAqLworCUlXX0NNX0VWRU5UX1NUQVRVU19BQ0NFUFRFRCA9IDAsIC8qIGNvbm5lY3QgcmVxdWVzdCBhY2NlcHRlZCAqLworCUlXX0NNX0VWRU5UX1NUQVRVU19SRUpFQ1RFRCwJIC8qIGNvbm5lY3QgcmVxdWVzdCByZWplY3RlZCAqLworCUlXX0NNX0VWRU5UX1NUQVRVU19USU1FT1VULAkgLyogdGhlIG9wZXJhdGlvbiB0aW1lZCBvdXQgKi8KKwlJV19DTV9FVkVOVF9TVEFUVVNfUkVTRVQsCSAvKiByZXNldCBmcm9tIHJlbW90ZSBwZWVyICovCisJSVdfQ01fRVZFTlRfU1RBVFVTX0VJTlZBTCwJIC8qIGFzeW5jaHJvbm91cyBmYWlsdXJlIGZvciBiYWQgcGFybSAqLworfTsKKworc3RydWN0IGl3X2NtX2V2ZW50IHsKKwllbnVtIGl3X2NtX2V2ZW50X3R5cGUgZXZlbnQ7CisJZW51bSBpd19jbV9ldmVudF9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBzb2NrYWRkcl9pbiBsb2NhbF9hZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVfYWRkcjsKKwl2b2lkICpwcml2YXRlX2RhdGE7CisJdTggcHJpdmF0ZV9kYXRhX2xlbjsKKwl2b2lkKiBwcm92aWRlcl9kYXRhOworfTsKKworLyoqCisgKiBpd19jbV9oYW5kbGVyIC0gRnVuY3Rpb24gdG8gYmUgY2FsbGVkIGJ5IHRoZSBJVyBDTSB3aGVuIGRlbGl2ZXJpbmcgZXZlbnRzCisgKiB0byB0aGUgY2xpZW50LgorICoKKyAqIEBjbV9pZDogVGhlIElXIENNIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC4KKyAqIEBldmVudDogUG9pbnRlciB0byB0aGUgZXZlbnQgc3RydWN0dXJlLgorICovCit0eXBlZGVmIGludCAoKml3X2NtX2hhbmRsZXIpKHN0cnVjdCBpd19jbV9pZCAqY21faWQsCisJCQkgICAgIHN0cnVjdCBpd19jbV9ldmVudCAqZXZlbnQpOworCisvKioKKyAqIGl3X2V2ZW50X2hhbmRsZXIgLSBGdW5jdGlvbiBjYWxsZWQgYnkgdGhlIHByb3ZpZGVyIHdoZW4gZGVsaXZlcmluZyBwcm92aWRlcgorICogZXZlbnRzIHRvIHRoZSBJVyBDTS4gIFJldHVybnMgZWl0aGVyIDAgaW5kaWNhdGluZyB0aGUgZXZlbnQgd2FzIHByb2Nlc3NlZAorICogb3IgLWVycm5vIGlmIHRoZSBldmVudCBjb3VsZCBub3QgYmUgcHJvY2Vzc2VkLgorICoKKyAqIEBjbV9pZDogVGhlIElXIENNIGlkZW50aWZpZXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudC4KKyAqIEBldmVudDogUG9pbnRlciB0byB0aGUgZXZlbnQgc3RydWN0dXJlLgorICovCit0eXBlZGVmIGludCAoKml3X2V2ZW50X2hhbmRsZXIpKHN0cnVjdCBpd19jbV9pZCAqY21faWQsCisJCQkJIHN0cnVjdCBpd19jbV9ldmVudCAqZXZlbnQpOworCitzdHJ1Y3QgaXdfY21faWQgeworCWl3X2NtX2hhbmRsZXIJCWNtX2hhbmRsZXI7ICAgICAgLyogY2xpZW50IGNhbGxiYWNrIGZ1bmN0aW9uICovCisJdm9pZAkJICAgICAgICAqY29udGV4dDsJIC8qIGNsaWVudCBjYiBjb250ZXh0ICovCisJc3RydWN0IGliX2RldmljZQkqZGV2aWNlOworCXN0cnVjdCBzb2NrYWRkcl9pbiAgICAgIGxvY2FsX2FkZHI7CisJc3RydWN0IHNvY2thZGRyX2luCXJlbW90ZV9hZGRyOworCXZvaWQJCQkqcHJvdmlkZXJfZGF0YTsJIC8qIHByb3ZpZGVyIHByaXZhdGUgZGF0YSAqLworCWl3X2V2ZW50X2hhbmRsZXIgICAgICAgIGV2ZW50X2hhbmRsZXI7ICAgLyogY2IgZm9yIHByb3ZpZGVyCisJCQkJCQkgICAgZXZlbnRzICovCisJLyogVXNlZCBieSBwcm92aWRlciB0byBhZGQgYW5kIHJlbW92ZSByZWZzIG9uIElXIGNtX2lkICovCisJdm9pZCAoKmFkZF9yZWYpKHN0cnVjdCBpd19jbV9pZCAqKTsKKwl2b2lkICgqcmVtX3JlZikoc3RydWN0IGl3X2NtX2lkICopOworfTsKKworc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0geworCWNvbnN0IHZvaWQgKnByaXZhdGVfZGF0YTsKKwl1MTYgcHJpdmF0ZV9kYXRhX2xlbjsKKwl1MzIgb3JkOworCXUzMiBpcmQ7CisJdTMyIHFwbjsKK307CisKK3N0cnVjdCBpd19jbV92ZXJicyB7CisJdm9pZAkJKCphZGRfcmVmKShzdHJ1Y3QgaWJfcXAgKnFwKTsKKworCXZvaWQJCSgqcmVtX3JlZikoc3RydWN0IGliX3FwICpxcCk7CisKKwlzdHJ1Y3QgaWJfcXAgKgkoKmdldF9xcCkoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJCSAgaW50IHFwbik7CisKKwlpbnQJCSgqY29ubmVjdCkoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwKKwkJCQkgICBzdHJ1Y3QgaXdfY21fY29ubl9wYXJhbSAqY29ubl9wYXJhbSk7CisKKwlpbnQJCSgqYWNjZXB0KShzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLAorCQkJCSAgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pOworCisJaW50CQkoKnJlamVjdCkoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwKKwkJCQkgIGNvbnN0IHZvaWQgKnBkYXRhLCB1OCBwZGF0YV9sZW4pOworCisJaW50CQkoKmNyZWF0ZV9saXN0ZW4pKHN0cnVjdCBpd19jbV9pZCAqY21faWQsCisJCQkJCSBpbnQgYmFja2xvZyk7CisKKwlpbnQJCSgqZGVzdHJveV9saXN0ZW4pKHN0cnVjdCBpd19jbV9pZCAqY21faWQpOworfTsKKworLyoqCisgKiBpd19jcmVhdGVfY21faWQgLSBDcmVhdGUgYW4gSVcgQ00gaWRlbnRpZmllci4KKyAqCisgKiBAZGV2aWNlOiBUaGUgSUIgZGV2aWNlIG9uIHdoaWNoIHRvIGNyZWF0ZSB0aGUgSVcgQ00gaWRlbnRpZXIuCisgKiBAZXZlbnRfaGFuZGxlcjogVXNlciBjYWxsYmFjayBpbnZva2VkIHRvIHJlcG9ydCBldmVudHMgYXNzb2NpYXRlZCB3aXRoIHRoZQorICogICByZXR1cm5lZCBJVyBDTSBpZGVudGlmaWVyLgorICogQGNvbnRleHQ6IFVzZXIgc3BlY2lmaWVkIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZC4KKyAqLworc3RydWN0IGl3X2NtX2lkICppd19jcmVhdGVfY21faWQoc3RydWN0IGliX2RldmljZSAqZGV2aWNlLAorCQkJCSBpd19jbV9oYW5kbGVyIGNtX2hhbmRsZXIsIHZvaWQgKmNvbnRleHQpOworCisvKioKKyAqIGl3X2Rlc3Ryb3lfY21faWQgLSBEZXN0cm95IGFuIElXIENNIGlkZW50aWZpZXIuCisgKgorICogQGNtX2lkOiBUaGUgcHJldmlvdXNseSBjcmVhdGVkIElXIENNIGlkZW50aWZpZXIgdG8gZGVzdHJveS4KKyAqCisgKiBUaGUgY2xpZW50IGNhbiBhc3N1bWUgdGhhdCBubyBldmVudHMgd2lsbCBiZSBkZWxpdmVyZWQgZm9yIHRoZSBDTSBJRCBhZnRlcgorICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLgorICovCit2b2lkIGl3X2Rlc3Ryb3lfY21faWQoc3RydWN0IGl3X2NtX2lkICpjbV9pZCk7CisKKy8qKgorICogaXdfY21fYmluZF9xcCAtIFVuYmluZCB0aGUgc3BlY2lmaWVkIElXIENNIGlkZW50aWZpZXIgYW5kIFFQCisgKgorICogQGNtX2lkOiBUaGUgSVcgQ00gaWRlbmZpZXIgdG8gdW5iaW5kIGZyb20gdGhlIFFQLgorICogQHFwOiBUaGUgUVAKKyAqCisgKiBUaGlzIGlzIGNhbGxlZCBieSB0aGUgcHJvdmlkZXIgd2hlbiBkZXN0cm95aW5nIHRoZSBRUCB0byBlbnN1cmUKKyAqIHRoYXQgYW55IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgSVdDTSBhcmUgcmVsZWFzZWQuIEl0IG1heSBhbHNvCisgKiBiZSBjYWxsZWQgYnkgdGhlIElXQ00gd2hlbiBkZXN0cm95aW5nIGEgQ01fSUQgdG8gdGhhdCBhbnkKKyAqIHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgcHJvdmlkZXIgYXJlIHJlbGVhc2VkLgorICovCit2b2lkIGl3X2NtX3VuYmluZF9xcChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfcXAgKnFwKTsKKworLyoqCisgKiBpd19jbV9nZXRfcXAgLSBSZXR1cm4gdGhlIGliX3FwIGFzc29jaWF0ZWQgd2l0aCBhIFFQTgorICoKKyAqIEBpYl9kZXZpY2U6IFRoZSBJQiBkZXZpY2UKKyAqIEBxcG46IFRoZSBxdWV1ZSBwYWlyIG51bWJlcgorICovCitzdHJ1Y3QgaWJfcXAgKml3X2NtX2dldF9xcChzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UsIGludCBxcG4pOworCisvKioKKyAqIGl3X2NtX2xpc3RlbiAtIExpc3RlbiBmb3IgaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0cyBvbiB0aGUKKyAqIHNwZWNpZmllZCBJVyBDTSBpZC4KKyAqCisgKiBAY21faWQ6IFRoZSBJVyBDTSBpZGVudGlmaWVyLgorICogQGJhY2tsb2c6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBvdXRzdGFuZGluZyB1bi1hY2NlcHRlZCBpbmJvdW5kIGxpc3RlbgorICogICByZXF1ZXN0cyB0byBxdWV1ZS4KKyAqCisgKiBUaGUgc291cmNlIGFkZHJlc3MgYW5kIHBvcnQgbnVtYmVyIGFyZSBzcGVjaWZpZWQgaW4gdGhlIElXIENNIGlkZW50aWZpZXIKKyAqIHN0cnVjdHVyZS4KKyAqLworaW50IGl3X2NtX2xpc3RlbihzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBpbnQgYmFja2xvZyk7CisKKy8qKgorICogaXdfY21fYWNjZXB0IC0gQ2FsbGVkIHRvIGFjY2VwdCBhbiBpbmNvbWluZyBjb25uZWN0IHJlcXVlc3QuCisgKgorICogQGNtX2lkOiBUaGUgSVcgQ00gaWRlbnRpZmllciBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3Rpb24gcmVxdWVzdC4KKyAqIEBpd19wYXJhbTogUG9pbnRlciB0byBhIHN0cnVjdHVyZSBjb250YWluaW5nIGNvbm5lY3Rpb24gZXN0YWJsaXNobWVudAorICogICBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBzcGVjaWZpZWQgY21faWQgd2lsbCBoYXZlIGJlZW4gcHJvdmlkZWQgaW4gdGhlIGV2ZW50IGRhdGEgZm9yIGEKKyAqIENPTk5FQ1RfUkVRVUVTVCBldmVudC4gU3Vic2VxdWVudCBldmVudHMgcmVsYXRlZCB0byB0aGlzIGNvbm5lY3Rpb24gd2lsbCBiZQorICogZGVsaXZlcmVkIHRvIHRoZSBzcGVjaWZpZWQgSVcgQ00gaWRlbnRpZmllciBwcmlvciBhbmQgbWF5IG9jY3VyIHByaW9yIHRvCisgKiB0aGUgcmV0dXJuIG9mIHRoaXMgZnVuY3Rpb24uIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLCB0aGUKKyAqIGNsaWVudCBjYW4gYXNzdW1lIHRoYXQgbm8gZXZlbnRzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBzcGVjaWZpZWQgSVcgQ00KKyAqIGlkZW50aWZpZXIuCisgKi8KK2ludCBpd19jbV9hY2NlcHQoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgc3RydWN0IGl3X2NtX2Nvbm5fcGFyYW0gKml3X3BhcmFtKTsKKworLyoqCisgKiBpd19jbV9yZWplY3QgLSBSZWplY3QgYW4gaW5jb21pbmcgY29ubmVjdGlvbiByZXF1ZXN0LgorICoKKyAqIEBjbV9pZDogQ29ubmVjdGlvbiBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVxdWVzdC4KKyAqIEBwcml2YXRlX2RhYTogUG9pbnRlciB0byBkYXRhIHRvIGRlbGl2ZXIgdG8gdGhlIHJlbW90ZSBwZWVyIGFzIHBhcnQgb2YgdGhlCisgKiAgIHJlamVjdCBtZXNzYWdlLgorICogQHByaXZhdGVfZGF0YV9sZW46IFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gdGhlIHByaXZhdGVfZGF0YSBwYXJhbWV0ZXIuCisgKgorICogVGhlIGNsaWVudCBjYW4gYXNzdW1lIHRoYXQgbm8gZXZlbnRzIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBzcGVjaWZpZWQgSVcKKyAqIENNIGlkZW50aWZpZXIgZm9sbG93aW5nIHRoZSByZXR1cm4gb2YgdGhpcyBmdW5jdGlvbi4gVGhlIHByaXZhdGVfZGF0YQorICogYnVmZmVyIGlzIGF2YWlsYWJsZSBmb3IgcmV1c2Ugd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKi8KK2ludCBpd19jbV9yZWplY3Qoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgY29uc3Qgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkgdTggcHJpdmF0ZV9kYXRhX2xlbik7CisKKy8qKgorICogaXdfY21fY29ubmVjdCAtIENhbGxlZCB0byByZXF1ZXN0IGEgY29ubmVjdGlvbiB0byBhIHJlbW90ZSBwZWVyLgorICoKKyAqIEBjbV9pZDogVGhlIElXIENNIGlkZW50aWZpZXIgZm9yIHRoZSBjb25uZWN0aW9uLgorICogQGl3X3BhcmFtOiBQb2ludGVyIHRvIGEgc3RydWN0dXJlIGNvbnRhaW5pbmcgY29ubmVjdGlvbiAgZXN0YWJsaXNobWVudAorICogICBwYXJhbWV0ZXJzLgorICoKKyAqIEV2ZW50cyBtYXkgYmUgZGVsaXZlcmVkIHRvIHRoZSBzcGVjaWZpZWQgSVcgQ00gaWRlbnRpZmllciBwcmlvciB0byB0aGUKKyAqIHJldHVybiBvZiB0aGlzIGZ1bmN0aW9uLiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBub24temVybyB2YWx1ZSwgdGhlCisgKiBjbGllbnQgY2FuIGFzc3VtZSB0aGF0IG5vIGV2ZW50cyB3aWxsIGJlIGRlbGl2ZXJlZCB0byB0aGUgc3BlY2lmaWVkIElXIENNCisgKiBpZGVudGlmaWVyLgorICovCitpbnQgaXdfY21fY29ubmVjdChzdHJ1Y3QgaXdfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaXdfY21fY29ubl9wYXJhbSAqaXdfcGFyYW0pOworCisvKioKKyAqIGl3X2NtX2Rpc2Nvbm5lY3QgLSBDbG9zZSB0aGUgc3BlY2lmaWVkIGNvbm5lY3Rpb24uCisgKgorICogQGNtX2lkOiBUaGUgSVcgQ00gaWRlbnRpZmllciB0byBjbG9zZS4KKyAqIEBhYnJ1cHQ6IElmIDAsIHRoZSBjb25uZWN0aW9uIHdpbGwgYmUgY2xvc2VkIGdyYWNlZnVsbHksIG90aGVyd2lzZSwgdGhlCisgKiAgIGNvbm5lY3Rpb24gd2lsbCBiZSByZXNldC4KKyAqCisgKiBUaGUgSVcgQ00gaWRlbnRpZmllciBpcyBzdGlsbCBhY3RpdmUgdW50aWwgdGhlIElXX0NNX0VWRU5UX0NMT1NFIGV2ZW50IGlzCisgKiBkZWxpdmVyZWQuCisgKi8KK2ludCBpd19jbV9kaXNjb25uZWN0KHN0cnVjdCBpd19jbV9pZCAqY21faWQsIGludCBhYnJ1cHQpOworCisvKioKKyAqIGl3X2NtX2luaXRfcXBfYXR0ciAtIENhbGxlZCB0byBpbml0aWFsaXplIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBRUAorICogYXNzb2NpYXRlZCB3aXRoIGEgSVcgQ00gaWRlbnRpZmllci4KKyAqCisgKiBAY21faWQ6IFRoZSBJVyBDTSBpZGVudGlmaWVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgUVAKKyAqIEBxcF9hdHRyOiBQb2ludGVyIHRvIHRoZSBRUCBhdHRyaWJ1dGVzIHN0cnVjdHVyZS4KKyAqIEBxcF9hdHRyX21hc2s6IFBvaW50ZXIgdG8gYSBiaXQgdmVjdG9yIHNwZWNpZnlpbmcgd2hpY2ggUVAgYXR0cmlidXRlcyBhcmUKKyAqICAgdmFsaWQuCisgKi8KK2ludCBpd19jbV9pbml0X3FwX2F0dHIoc3RydWN0IGl3X2NtX2lkICpjbV9pZCwgc3RydWN0IGliX3FwX2F0dHIgKnFwX2F0dHIsCisJCSAgICAgICBpbnQgKnFwX2F0dHJfbWFzayk7CisKKyNlbmRpZiAvKiBJV19DTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oIGIvaW5jbHVkZS9yZG1hL3JkbWFfY20uaAppbmRleCA0MDJjNjNkLi5kZWI1YTBhIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCisrKyBiL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKQEAgLTExNyw2ICsxMTcsMTQgQEAKIHN0cnVjdCByZG1hX2NtX2lkICpyZG1hX2NyZWF0ZV9pZChyZG1hX2NtX2V2ZW50X2hhbmRsZXIgZXZlbnRfaGFuZGxlciwKIAkJCQkgIHZvaWQgKmNvbnRleHQsIGVudW0gcmRtYV9wb3J0X3NwYWNlIHBzKTsKIAorLyoqCisgICogcmRtYV9kZXN0cm95X2lkIC0gRGVzdHJveXMgYW4gUkRNQSBpZGVudGlmaWVyLgorICAqCisgICogQGlkOiBSRE1BIGlkZW50aWZpZXIuCisgICoKKyAgKiBOb3RlOiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gaGFzIHRoZSBlZmZlY3Qgb2YgY2FuY2VsaW5nIGluLWZsaWdodAorICAqIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgaWQuCisgICovCiB2b2lkIHJkbWFfZGVzdHJveV9pZChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQpOwogCiAvKioKQEAgLTIzNyw2ICsyNDUsMTAgQEAKICAqIFR5cGljYWxseSwgdGhpcyByb3V0aW5lIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSBsaXN0ZW5lciB0byBhY2NlcHQgYSBjb25uZWN0aW9uCiAgKiByZXF1ZXN0LiAgSXQgbXVzdCBhbHNvIGJlIGNhbGxlZCBvbiB0aGUgYWN0aXZlIHNpZGUgb2YgYSBjb25uZWN0aW9uIGlmIHRoZQogICogdXNlciBpcyBwZXJmb3JtaW5nIHRoZWlyIG93biBRUCB0cmFuc2l0aW9ucy4KKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBlcnJvciwgYSByZWplY3QgbWVzc2FnZSBpcyBzZW50IHRvIHRoZSByZW1vdGUgc2lkZSBhbmQgdGhlCisgKiBzdGF0ZSBvZiB0aGUgcXAgYXNzb2NpYXRlZCB3aXRoIHRoZSBpZCBpcyBtb2RpZmllZCB0byBlcnJvciwgc3VjaCB0aGF0IGFueQorICogcHJldmlvdXNseSBwb3N0ZWQgcmVjZWl2ZSBidWZmZXJzIHdvdWxkIGJlIGZsdXNoZWQuCiAgKi8KIGludCByZG1hX2FjY2VwdChzdHJ1Y3QgcmRtYV9jbV9pZCAqaWQsIHN0cnVjdCByZG1hX2Nvbm5fcGFyYW0gKmNvbm5fcGFyYW0pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvS2J1aWxkIGIvaW5jbHVkZS9zY3NpL0tidWlsZAppbmRleCAxNGEwMzNkLi43NDRmODUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvS2J1aWxkCisrKyBiL2luY2x1ZGUvc2NzaS9LYnVpbGQKQEAgLTEsMiArMSw0IEBACiBoZWFkZXIteSArPSBzY3NpLmgKLXVuaWZkZWYteSA6PSBzY3NpX2lvY3RsLmggc2cuaAorCit1bmlmZGVmLXkgKz0gc2NzaV9pb2N0bC5oCit1bmlmZGVmLXkgKz0gc2cuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL2xpYmlzY3NpLmggYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAppbmRleCBiYTI3NjA4Li40MTkwNGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvbGliaXNjc2kuaApAQCAtNjAsNiArNjAsNyBAQAogI2RlZmluZSBUTUFCT1JUX1NVQ0NFU1MJCQkweDEKICNkZWZpbmUgVE1BQk9SVF9GQUlMRUQJCQkweDIKICNkZWZpbmUgVE1BQk9SVF9USU1FRE9VVAkJMHgzCisjZGVmaW5lIFRNQUJPUlRfTk9UX0ZPVU5ECQkweDQKIAogLyogQ29ubmVjdGlvbiBzdXNwZW5kICJiaXQiICovCiAjZGVmaW5lIElTQ1NJX1NVU1BFTkRfQklUCQkxCkBAIC04Myw2ICs4NCwxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJcnVubmluZzsKIH07CiAKK2VudW0geworCUlTQ1NJX1RBU0tfQ09NUExFVEVELAorCUlTQ1NJX1RBU0tfUEVORElORywKKwlJU0NTSV9UQVNLX1JVTk5JTkcsCit9OworCiBzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgewogCS8qCiAJICogQmVjdWFlIExMRHMgYWxsb2NhdGUgdGhlaXIgaGRyIGRpZmZlcmVudGx5LCB0aGlzIGlzIGEgcG9pbnRlciB0bwpAQCAtMTAxLDYgKzEwOCw4IEBACiAJc3RydWN0IGlzY3NpX2Nvbm4JKmNvbm47CQkvKiB1c2VkIGNvbm5lY3Rpb24gICAgKi8KIAlzdHJ1Y3QgaXNjc2lfbWdtdF90YXNrCSptdGFzazsJCS8qIHRtZiBtdGFzayBpbiBwcm9nciAqLwogCisJLyogc3RhdGUgc2V0L3Rlc3RlZCB1bmRlciBzZXNzaW9uLT5sb2NrICovCisJaW50CQkJc3RhdGU7CiAJc3RydWN0IGxpc3RfaGVhZAlydW5uaW5nOwkvKiBydW5uaW5nIGNtZCBsaXN0ICovCiAJdm9pZAkJCSpkZF9kYXRhOwkvKiBkcml2ZXIvdHJhbnNwb3J0IGRhdGEgKi8KIH07CkBAIC0xMjYsNiArMTM1LDE0IEBACiAJaW50CQkJaWQ7CQkvKiBDSUQgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWl0ZW07CQkvKiBtYWludGFpbnMgbGlzdCBvZiBjb25ucyAqLwogCWludAkJCWNfc3RhZ2U7CS8qIGNvbm5lY3Rpb24gc3RhdGUgKi8KKwkvKgorCSAqIFByZWFsbG9jYXRlZCBidWZmZXIgZm9yIHBkdXMgdGhhdCBoYXZlIGRhdGEgYnV0IGRvIG5vdAorCSAqIG9yaWdpbmF0ZSBmcm9tIHNjc2ktbWwuIFdlIG5ldmVyIGhhdmUgdHdvIHBkdXMgdXNpbmcgdGhlCisJICogYnVmZmVyIGF0IHRoZSBzYW1lIHRpbWUuIEl0IGlzIG9ubHkgYWxsb2NhdGVkIHRvCisJICogdGhlIGRlZmF1bHQgbWF4IHJlY3Ygc2l6ZSBiZWNhdXNlIHRoZSBwZHVzIHdlIHN1cHBvcnQKKwkgKiBzaG91bGQgYWx3YXlzIGZpdCBpbiB0aGlzIGJ1ZmZlcgorCSAqLworCWNoYXIJCQkqZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfbWdtdF90YXNrCSpsb2dpbl9tdGFzazsJLyogbXRhc2sgdXNlZCBmb3IgbG9naW4vdGV4dCAqLwogCXN0cnVjdCBpc2NzaV9tZ210X3Rhc2sJKm10YXNrOwkJLyogeG1pdCBtdGFzayBpbiBwcm9ncmVzcyAqLwogCXN0cnVjdCBpc2NzaV9jbWRfdGFzawkqY3Rhc2s7CQkvKiB4bWl0IGN0YXNrIGluIHByb2dyZXNzICovCkBAIC0xMzQsNyArMTUxLDcgQEAKIAlzdHJ1Y3Qga2ZpZm8JCSppbW1xdWV1ZTsJLyogaW1tZWRpYXRlIHhtaXQgcXVldWUgKi8KIAlzdHJ1Y3Qga2ZpZm8JCSptZ210cXVldWU7CS8qIG1nbXQgKGNvbnRyb2wpIHhtaXQgcXVldWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCW1nbXRfcnVuX2xpc3Q7CS8qIGxpc3Qgb2YgY29udHJvbCB0YXNrcyAqLwotCXN0cnVjdCBrZmlmbwkJKnhtaXRxdWV1ZTsJLyogZGF0YS1wYXRoIGNtZCBxdWV1ZSAqLworCXN0cnVjdCBsaXN0X2hlYWQJeG1pdHF1ZXVlOwkvKiBkYXRhLXBhdGggY21kIHF1ZXVlICovCiAJc3RydWN0IGxpc3RfaGVhZAlydW5fbGlzdDsJLyogbGlzdCBvZiBjbWRzIGluIHByb2dyZXNzICovCiAJc3RydWN0IHdvcmtfc3RydWN0CXhtaXR3b3JrOwkvKiBwZXItY29ubi4geG1pdCB3b3JrcXVldWUgKi8KIAkvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3Njc2lfdHJhbnNwb3J0X2lzY3NpLmggYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAppbmRleCA1YTNkZjFkLi4zOWU4MzMyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90cmFuc3BvcnRfaXNjc2kuaApAQCAtNTcsOCArNTcsNiBAQAogICogQHN0b3BfY29ubjoJCXN1c3BlbmQvcmVjb3Zlci90ZXJtaW5hdGUgY29ubmVjdGlvbgogICogQHNlbmRfcGR1OgkJc2VuZCBpU0NTSSBQRFUsIExvZ2luLCBMb2dvdXQsIE5PUC1PdXQsIFJlamVjdCwgVGV4dC4KICAqIEBzZXNzaW9uX3JlY292ZXJ5X3RpbWVkb3V0OiBub3RpZnkgTExEIGEgYmxvY2sgZHVyaW5nIHJlY292ZXJ5IHRpbWVkIG91dAotICogQHN1c3BlbmRfY29ubl9yZWN2OglzdXNlcGVuZCB0aGUgcmVjdiBzaWRlIG9mIHRoZSBjb25uZWN0aW9uCi0gKiBAdGVybWluY2F0ZV9jb25uOglkZXN0cm95IHNvY2tldCBjb25uZWN0aW9uLiBDYWxsZWQgd2l0aCBtdXRleCBsb2NrLgogICogQGluaXRfY21kX3Rhc2s6CUluaXRpYWxpemUgYSBpc2NzaV9jbWRfdGFzayBhbmQgYW55IGludGVybmFsIHN0cnVjdHMuCiAgKgkJCUNhbGxlZCBmcm9tIHF1ZXVlY29tbWFuZCB3aXRoIHNlc3Npb24gbG9jayBoZWxkLgogICogQGluaXRfbWdtdF90YXNrOglJbml0aWFsaXplIGEgaXNjc2lfbWdtdF90YXNrIGFuZCBhbnkgaW50ZXJuYWwgc3RydWN0cy4KQEAgLTExMiw4ICsxMTAsNiBAQAogCQkJIGNoYXIgKmRhdGEsIHVpbnQzMl90IGRhdGFfc2l6ZSk7CiAJdm9pZCAoKmdldF9zdGF0cykgKHN0cnVjdCBpc2NzaV9jbHNfY29ubiAqY29ubiwKIAkJCSAgIHN0cnVjdCBpc2NzaV9zdGF0cyAqc3RhdHMpOwotCXZvaWQgKCpzdXNwZW5kX2Nvbm5fcmVjdikgKHN0cnVjdCBpc2NzaV9jb25uICpjb25uKTsKLQl2b2lkICgqdGVybWluYXRlX2Nvbm4pIChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubik7CiAJdm9pZCAoKmluaXRfY21kX3Rhc2spIChzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKmN0YXNrKTsKIAl2b2lkICgqaW5pdF9tZ210X3Rhc2spIChzdHJ1Y3QgaXNjc2lfY29ubiAqY29ubiwKIAkJCQlzdHJ1Y3QgaXNjc2lfbWdtdF90YXNrICptdGFzaywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvc291bmQvS2J1aWxkIGIvaW5jbHVkZS9zb3VuZC9LYnVpbGQKaW5kZXggM2E1YTNkZi4uZmQwNTRhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9LYnVpbGQKKysrIGIvaW5jbHVkZS9zb3VuZC9LYnVpbGQKQEAgLTEsMiArMSwxMCBAQAotaGVhZGVyLXkgOj0gYXNvdW5kX2ZtLmggaGRzcC5oIGhkc3BtLmggc2ZudF9pbmZvLmggc3NjYXBlX2lvY3RsLmgKLXVuaWZkZWYteSA6PSBhc2VxdWVuY2VyLmggYXNvdW5kLmggZW11MTBrMS5oIHNiMTZfY3NwLmggCitoZWFkZXIteSArPSBhc291bmRfZm0uaAoraGVhZGVyLXkgKz0gaGRzcC5oCitoZWFkZXIteSArPSBoZHNwbS5oCitoZWFkZXIteSArPSBzZm50X2luZm8uaAoraGVhZGVyLXkgKz0gc3NjYXBlX2lvY3RsLmgKKwordW5pZmRlZi15ICs9IGFzZXF1ZW5jZXIuaAordW5pZmRlZi15ICs9IGFzb3VuZC5oCit1bmlmZGVmLXkgKz0gZW11MTBrMS5oCit1bmlmZGVmLXkgKz0gc2IxNl9jc3AuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9LYnVpbGQgYi9pbmNsdWRlL3ZpZGVvL0tidWlsZAppbmRleCA3NmE2MDczLi5hMTRmOWMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL3ZpZGVvL0tidWlsZAorKysgYi9pbmNsdWRlL3ZpZGVvL0tidWlsZApAQCAtMSArMSBAQAotdW5pZmRlZi15IDo9IHNpc2ZiLmgKK3VuaWZkZWYteSArPSBzaXNmYi5oCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggYTA5OWZjNi4uOWE3NjU2ZiAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtMTgyLDIzICsxODIsNiBAQAogCiAJICBTYXkgTiBpZiB1bnN1cmUuCiAKLWNvbmZpZyBTWVNDVEwKLQlib29sICJTeXNjdGwgc3VwcG9ydCIgaWYgRU1CRURERUQKLQlkZWZhdWx0IHkKLQktLS1oZWxwLS0tCi0JICBUaGUgc3lzY3RsIGludGVyZmFjZSBwcm92aWRlcyBhIG1lYW5zIG9mIGR5bmFtaWNhbGx5IGNoYW5naW5nCi0JICBjZXJ0YWluIGtlcm5lbCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMgb24gdGhlIGZseSB3aXRob3V0IHJlcXVpcmluZwotCSAgYSByZWNvbXBpbGUgb2YgdGhlIGtlcm5lbCBvciByZWJvb3Qgb2YgdGhlIHN5c3RlbS4gIFRoZSBwcmltYXJ5Ci0JICBpbnRlcmZhY2UgY29uc2lzdHMgb2YgYSBzeXN0ZW0gY2FsbCwgYnV0IGlmIHlvdSBzYXkgWSB0byAiL3Byb2MKLQkgIGZpbGUgc3lzdGVtIHN1cHBvcnQiLCBhIHRyZWUgb2YgbW9kaWZpYWJsZSBzeXNjdGwgZW50cmllcyB3aWxsIGJlCi0JICBnZW5lcmF0ZWQgYmVuZWF0aCB0aGUgL3Byb2Mvc3lzIGRpcmVjdG9yeS4gVGhleSBhcmUgZXhwbGFpbmVkIGluIHRoZQotCSAgZmlsZXMgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9zeXNjdGwvPi4gIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzCi0JICBvcHRpb24gd2lsbCBlbmxhcmdlIHRoZSBrZXJuZWwgYnkgYXQgbGVhc3QgOCBLQi4KLQotCSAgQXMgaXQgaXMgZ2VuZXJhbGx5IGEgZ29vZCB0aGluZywgeW91IHNob3VsZCBzYXkgWSBoZXJlIHVubGVzcwotCSAgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGluc3RhbGwvcmVzY3VlIGRpc2tzIG9yIHlvdXIgc3lzdGVtIGlzIHZlcnkKLQkgIGxpbWl0ZWQgaW4gbWVtb3J5LgotCiBjb25maWcgQVVESVQKIAlib29sICJBdWRpdGluZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gTkVUCkBAIC0yNjEsMTMgKzI0NCw2IEBACiAKIHNvdXJjZSAidXNyL0tjb25maWciCiAKLWNvbmZpZyBVSUQxNgotCWJvb2wgIkVuYWJsZSAxNi1iaXQgVUlEIHN5c3RlbSBjYWxscyIgaWYgRU1CRURERUQKLQlkZXBlbmRzIG9uIEFSTSB8fCBDUklTIHx8IEZSViB8fCBIODMwMCB8fCBYODZfMzIgfHwgTTY4SyB8fCAoUzM5MCAmJiAhNjRCSVQpIHx8IFNVUEVSSCB8fCBTUEFSQzMyIHx8IChTUEFSQzY0ICYmIFNQQVJDMzJfQ09NUEFUKSB8fCBVTUwgfHwgKFg4Nl82NCAmJiBJQTMyX0VNVUxBVElPTikKLQlkZWZhdWx0IHkKLQloZWxwCi0JICBUaGlzIGVuYWJsZXMgdGhlIGxlZ2FjeSAxNi1iaXQgVUlEIHN5c2NhbGwgd3JhcHBlcnMuCi0KIGNvbmZpZyBDQ19PUFRJTUlaRV9GT1JfU0laRQogCWJvb2wgIk9wdGltaXplIGZvciBzaXplIChMb29rIG91dCBmb3IgYnJva2VuIGNvbXBpbGVycyEpIgogCWRlZmF1bHQgeQpAQCAtMjg5LDYgKzI2NSwzMCBAQAogICAgICAgICAgIGVudmlyb25tZW50cyB3aGljaCBjYW4gdG9sZXJhdGUgYSAibm9uLXN0YW5kYXJkIiBrZXJuZWwuCiAgICAgICAgICAgT25seSB1c2UgdGhpcyBpZiB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgogCitjb25maWcgVUlEMTYKKwlib29sICJFbmFibGUgMTYtYml0IFVJRCBzeXN0ZW0gY2FsbHMiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBBUk0gfHwgQ1JJUyB8fCBGUlYgfHwgSDgzMDAgfHwgWDg2XzMyIHx8IE02OEsgfHwgKFMzOTAgJiYgITY0QklUKSB8fCBTVVBFUkggfHwgU1BBUkMzMiB8fCAoU1BBUkM2NCAmJiBTUEFSQzMyX0NPTVBBVCkgfHwgVU1MIHx8IChYODZfNjQgJiYgSUEzMl9FTVVMQVRJT04pCisJZGVmYXVsdCB5CisJaGVscAorCSAgVGhpcyBlbmFibGVzIHRoZSBsZWdhY3kgMTYtYml0IFVJRCBzeXNjYWxsIHdyYXBwZXJzLgorCitjb25maWcgU1lTQ1RMCisJYm9vbCAiU3lzY3RsIHN1cHBvcnQiIGlmIEVNQkVEREVECisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgVGhlIHN5c2N0bCBpbnRlcmZhY2UgcHJvdmlkZXMgYSBtZWFucyBvZiBkeW5hbWljYWxseSBjaGFuZ2luZworCSAgY2VydGFpbiBrZXJuZWwgcGFyYW1ldGVycyBhbmQgdmFyaWFibGVzIG9uIHRoZSBmbHkgd2l0aG91dCByZXF1aXJpbmcKKwkgIGEgcmVjb21waWxlIG9mIHRoZSBrZXJuZWwgb3IgcmVib290IG9mIHRoZSBzeXN0ZW0uICBUaGUgcHJpbWFyeQorCSAgaW50ZXJmYWNlIGNvbnNpc3RzIG9mIGEgc3lzdGVtIGNhbGwsIGJ1dCBpZiB5b3Ugc2F5IFkgdG8gIi9wcm9jCisJICBmaWxlIHN5c3RlbSBzdXBwb3J0IiwgYSB0cmVlIG9mIG1vZGlmaWFibGUgc3lzY3RsIGVudHJpZXMgd2lsbCBiZQorCSAgZ2VuZXJhdGVkIGJlbmVhdGggdGhlIC9wcm9jL3N5cyBkaXJlY3RvcnkuIFRoZXkgYXJlIGV4cGxhaW5lZCBpbiB0aGUKKwkgIGZpbGVzIGluIDxmaWxlOkRvY3VtZW50YXRpb24vc3lzY3RsLz4uICBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcworCSAgb3B0aW9uIHdpbGwgZW5sYXJnZSB0aGUga2VybmVsIGJ5IGF0IGxlYXN0IDggS0IuCisKKwkgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3MKKwkgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5CisJICBsaW1pdGVkIGluIG1lbW9yeS4KKwogY29uZmlnIEtBTExTWU1TCiAJIGJvb2wgIkxvYWQgYWxsIHN5bWJvbHMgZm9yIGRlYnVnZ2luZy9ra3N5bW9vcHMiIGlmIEVNQkVEREVECiAJIGRlZmF1bHQgeQpAQCAtMzYzLDEwICszNjMsNiBAQAogCSAga2VybmVsIGRhdGEgc3RydWN0dXJlcy4gVGhpcyBzYXZlcyBtZW1vcnkgb24gc21hbGwgbWFjaGluZXMsCiAJICBidXQgbWF5IHJlZHVjZSBwZXJmb3JtYW5jZS4KIAotY29uZmlnIFJUX01VVEVYRVMKLQlib29sZWFuCi0Jc2VsZWN0IFBMSVNUCi0KIGNvbmZpZyBGVVRFWAogCWJvb2wgIkVuYWJsZSBmdXRleCBzdXBwb3J0IiBpZiBFTUJFRERFRAogCWRlZmF1bHQgeQpAQCAtNDE0LDYgKzQxMCwxMCBAQAogCiBlbmRtZW51CQkjIEdlbmVyYWwgc2V0dXAKIAorY29uZmlnIFJUX01VVEVYRVMKKwlib29sZWFuCisJc2VsZWN0IFBMSVNUCisKIGNvbmZpZyBUSU5ZX1NITUVNCiAJZGVmYXVsdCAhU0hNRU0KIAlib29sCmRpZmYgLS1naXQgYS9pcGMvbXNnLmMgYi9pcGMvbXNnLmMKaW5kZXggY2Q5MmQzNC4uMmI0ZmNjZiAxMDA2NDQKLS0tIGEvaXBjL21zZy5jCisrKyBiL2lwYy9tc2cuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBsaW51eC9pcGMvbXNnLmMKLSAqIENvcHlyaWdodCAoQykgMTk5MiBLcmlzaG5hIEJhbGFzdWJyYW1hbmlhbiAKKyAqIENvcHlyaWdodCAoQykgMTk5MiBLcmlzaG5hIEJhbGFzdWJyYW1hbmlhbgogICoKICAqIFJlbW92ZWQgYWxsIHRoZSByZW1haW5pbmcga2VybmVsZCBtZXNzCiAgKiBDYXRjaCB0aGUgLUVGQVVMVCBzdHVmZiBwcm9wZXJseQpAQCAtNDEsMjIgKzQxLDI0IEBACiBpbnQgbXNnX2N0bG1uYiA9IE1TR01OQjsKIGludCBtc2dfY3RsbW5pID0gTVNHTU5JOwogCi0vKiBvbmUgbXNnX3JlY2VpdmVyIHN0cnVjdHVyZSBmb3IgZWFjaCBzbGVlcGluZyByZWNlaXZlciAqLworLyoKKyAqIG9uZSBtc2dfcmVjZWl2ZXIgc3RydWN0dXJlIGZvciBlYWNoIHNsZWVwaW5nIHJlY2VpdmVyOgorICovCiBzdHJ1Y3QgbXNnX3JlY2VpdmVyIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJfbGlzdDsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QqIHJfdHNrOworCXN0cnVjdCBsaXN0X2hlYWQJcl9saXN0OworCXN0cnVjdCB0YXNrX3N0cnVjdAkqcl90c2s7CiAKLQlpbnQgcl9tb2RlOwotCWxvbmcgcl9tc2d0eXBlOwotCWxvbmcgcl9tYXhzaXplOworCWludAkJCXJfbW9kZTsKKwlsb25nCQkJcl9tc2d0eXBlOworCWxvbmcJCQlyX21heHNpemU7CiAKLQlzdHJ1Y3QgbXNnX21zZyogdm9sYXRpbGUgcl9tc2c7CisJdm9sYXRpbGUgc3RydWN0IG1zZ19tc2cJKnJfbXNnOwogfTsKIAogLyogb25lIG1zZ19zZW5kZXIgZm9yIGVhY2ggc2xlZXBpbmcgc2VuZGVyICovCiBzdHJ1Y3QgbXNnX3NlbmRlciB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCB0YXNrX3N0cnVjdCogdHNrOworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRzazsKIH07CiAKICNkZWZpbmUgU0VBUkNIX0FOWQkJMQpAQCAtNjQsNDUgKzY2LDQyIEBACiAjZGVmaW5lIFNFQVJDSF9OT1RFUVVBTAkJMwogI2RlZmluZSBTRUFSQ0hfTEVTU0VRVUFMCTQKIAotc3RhdGljIGF0b21pY190IG1zZ19ieXRlcyA9IEFUT01JQ19JTklUKDApOwotc3RhdGljIGF0b21pY190IG1zZ19oZHJzID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3QgbXNnX2J5dGVzID0JQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgYXRvbWljX3QgbXNnX2hkcnMgPQlBVE9NSUNfSU5JVCgwKTsKIAogc3RhdGljIHN0cnVjdCBpcGNfaWRzIG1zZ19pZHM7CiAKLSNkZWZpbmUgbXNnX2xvY2soaWQpCSgoc3RydWN0IG1zZ19xdWV1ZSopaXBjX2xvY2soJm1zZ19pZHMsaWQpKQotI2RlZmluZSBtc2dfdW5sb2NrKG1zcSkJaXBjX3VubG9jaygmKG1zcSktPnFfcGVybSkKLSNkZWZpbmUgbXNnX3JtaWQoaWQpCSgoc3RydWN0IG1zZ19xdWV1ZSopaXBjX3JtaWQoJm1zZ19pZHMsaWQpKQotI2RlZmluZSBtc2dfY2hlY2tpZChtc3EsIG1zZ2lkKQlcCi0JaXBjX2NoZWNraWQoJm1zZ19pZHMsJm1zcS0+cV9wZXJtLG1zZ2lkKQotI2RlZmluZSBtc2dfYnVpbGRpZChpZCwgc2VxKSBcCi0JaXBjX2J1aWxkaWQoJm1zZ19pZHMsIGlkLCBzZXEpCisjZGVmaW5lIG1zZ19sb2NrKGlkKQkJKChzdHJ1Y3QgbXNnX3F1ZXVlICopaXBjX2xvY2soJm1zZ19pZHMsIGlkKSkKKyNkZWZpbmUgbXNnX3VubG9jayhtc3EpCQlpcGNfdW5sb2NrKCYobXNxKS0+cV9wZXJtKQorI2RlZmluZSBtc2dfcm1pZChpZCkJCSgoc3RydWN0IG1zZ19xdWV1ZSAqKWlwY19ybWlkKCZtc2dfaWRzLCBpZCkpCisjZGVmaW5lIG1zZ19jaGVja2lkKG1zcSwgbXNnaWQpCWlwY19jaGVja2lkKCZtc2dfaWRzLCAmbXNxLT5xX3Blcm0sIG1zZ2lkKQorI2RlZmluZSBtc2dfYnVpbGRpZChpZCwgc2VxKQlpcGNfYnVpbGRpZCgmbXNnX2lkcywgaWQsIHNlcSkKIAotc3RhdGljIHZvaWQgZnJlZXF1ZSAoc3RydWN0IG1zZ19xdWV1ZSAqbXNxLCBpbnQgaWQpOwotc3RhdGljIGludCBuZXdxdWUgKGtleV90IGtleSwgaW50IG1zZ2ZsZyk7CitzdGF0aWMgdm9pZCBmcmVlcXVlKHN0cnVjdCBtc2dfcXVldWUgKm1zcSwgaW50IGlkKTsKK3N0YXRpYyBpbnQgbmV3cXVlKGtleV90IGtleSwgaW50IG1zZ2ZsZyk7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQgc3lzdmlwY19tc2dfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqaXQpOwogI2VuZGlmCiAKLXZvaWQgX19pbml0IG1zZ19pbml0ICh2b2lkKQordm9pZCBfX2luaXQgbXNnX2luaXQodm9pZCkKIHsKLQlpcGNfaW5pdF9pZHMoJm1zZ19pZHMsbXNnX2N0bG1uaSk7CisJaXBjX2luaXRfaWRzKCZtc2dfaWRzLCBtc2dfY3RsbW5pKTsKIAlpcGNfaW5pdF9wcm9jX2ludGVyZmFjZSgic3lzdmlwYy9tc2ciLAogCQkJCSIgICAgICAga2V5ICAgICAgbXNxaWQgcGVybXMgICAgICBjYnl0ZXMgICAgICAgcW51bSBsc3BpZCBscnBpZCAgIHVpZCAgIGdpZCAgY3VpZCAgY2dpZCAgICAgIHN0aW1lICAgICAgcnRpbWUgICAgICBjdGltZVxuIiwKIAkJCQkmbXNnX2lkcywKIAkJCQlzeXN2aXBjX21zZ19wcm9jX3Nob3cpOwogfQogCi1zdGF0aWMgaW50IG5ld3F1ZSAoa2V5X3Qga2V5LCBpbnQgbXNnZmxnKQorc3RhdGljIGludCBuZXdxdWUoa2V5X3Qga2V5LCBpbnQgbXNnZmxnKQogewotCWludCBpZDsKLQlpbnQgcmV0dmFsOwogCXN0cnVjdCBtc2dfcXVldWUgKm1zcTsKKwlpbnQgaWQsIHJldHZhbDsKIAotCW1zcSAgPSBpcGNfcmN1X2FsbG9jKHNpemVvZigqbXNxKSk7Ci0JaWYgKCFtc3EpIAorCW1zcSA9IGlwY19yY3VfYWxsb2Moc2l6ZW9mKCptc3EpKTsKKwlpZiAoIW1zcSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltc3EtPnFfcGVybS5tb2RlID0gKG1zZ2ZsZyAmIFNfSVJXWFVHTyk7CisJbXNxLT5xX3Blcm0ubW9kZSA9IG1zZ2ZsZyAmIFNfSVJXWFVHTzsKIAltc3EtPnFfcGVybS5rZXkgPSBrZXk7CiAKIAltc3EtPnFfcGVybS5zZWN1cml0eSA9IE5VTEw7CkBAIC0xMTMsMTMgKzExMiwxMyBAQAogCX0KIAogCWlkID0gaXBjX2FkZGlkKCZtc2dfaWRzLCAmbXNxLT5xX3Blcm0sIG1zZ19jdGxtbmkpOwotCWlmKGlkID09IC0xKSB7CisJaWYgKGlkID09IC0xKSB7CiAJCXNlY3VyaXR5X21zZ19xdWV1ZV9mcmVlKG1zcSk7CiAJCWlwY19yY3VfcHV0cmVmKG1zcSk7CiAJCXJldHVybiAtRU5PU1BDOwogCX0KIAotCW1zcS0+cV9pZCA9IG1zZ19idWlsZGlkKGlkLG1zcS0+cV9wZXJtLnNlcSk7CisJbXNxLT5xX2lkID0gbXNnX2J1aWxkaWQoaWQsIG1zcS0+cV9wZXJtLnNlcSk7CiAJbXNxLT5xX3N0aW1lID0gbXNxLT5xX3J0aW1lID0gMDsKIAltc3EtPnFfY3RpbWUgPSBnZXRfc2Vjb25kcygpOwogCW1zcS0+cV9jYnl0ZXMgPSBtc3EtPnFfcW51bSA9IDA7CkBAIC0xMzMsNDQgKzEzMiw0NCBAQAogCXJldHVybiBtc3EtPnFfaWQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzc19hZGQoc3RydWN0IG1zZ19xdWV1ZSogbXNxLCBzdHJ1Y3QgbXNnX3NlbmRlciogbXNzKQorc3RhdGljIGlubGluZSB2b2lkIHNzX2FkZChzdHJ1Y3QgbXNnX3F1ZXVlICptc3EsIHN0cnVjdCBtc2dfc2VuZGVyICptc3MpCiB7Ci0JbXNzLT50c2s9Y3VycmVudDsKLQljdXJyZW50LT5zdGF0ZT1UQVNLX0lOVEVSUlVQVElCTEU7Ci0JbGlzdF9hZGRfdGFpbCgmbXNzLT5saXN0LCZtc3EtPnFfc2VuZGVycyk7CisJbXNzLT50c2sgPSBjdXJyZW50OworCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCWxpc3RfYWRkX3RhaWwoJm1zcy0+bGlzdCwgJm1zcS0+cV9zZW5kZXJzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHNzX2RlbChzdHJ1Y3QgbXNnX3NlbmRlciogbXNzKQorc3RhdGljIGlubGluZSB2b2lkIHNzX2RlbChzdHJ1Y3QgbXNnX3NlbmRlciAqbXNzKQogewotCWlmKG1zcy0+bGlzdC5uZXh0ICE9IE5VTEwpCisJaWYgKG1zcy0+bGlzdC5uZXh0ICE9IE5VTEwpCiAJCWxpc3RfZGVsKCZtc3MtPmxpc3QpOwogfQogCi1zdGF0aWMgdm9pZCBzc193YWtldXAoc3RydWN0IGxpc3RfaGVhZCogaCwgaW50IGtpbGwpCitzdGF0aWMgdm9pZCBzc193YWtldXAoc3RydWN0IGxpc3RfaGVhZCAqaCwgaW50IGtpbGwpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCiAJdG1wID0gaC0+bmV4dDsKIAl3aGlsZSAodG1wICE9IGgpIHsKLQkJc3RydWN0IG1zZ19zZW5kZXIqIG1zczsKLQkJCi0JCW1zcyA9IGxpc3RfZW50cnkodG1wLHN0cnVjdCBtc2dfc2VuZGVyLGxpc3QpOworCQlzdHJ1Y3QgbXNnX3NlbmRlciAqbXNzOworCisJCW1zcyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbXNnX3NlbmRlciwgbGlzdCk7CiAJCXRtcCA9IHRtcC0+bmV4dDsKLQkJaWYoa2lsbCkKLQkJCW1zcy0+bGlzdC5uZXh0PU5VTEw7CisJCWlmIChraWxsKQorCQkJbXNzLT5saXN0Lm5leHQgPSBOVUxMOwogCQl3YWtlX3VwX3Byb2Nlc3MobXNzLT50c2spOwogCX0KIH0KIAotc3RhdGljIHZvaWQgZXhwdW5nZV9hbGwoc3RydWN0IG1zZ19xdWV1ZSogbXNxLCBpbnQgcmVzKQorc3RhdGljIHZvaWQgZXhwdW5nZV9hbGwoc3RydWN0IG1zZ19xdWV1ZSAqbXNxLCBpbnQgcmVzKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKIAogCXRtcCA9IG1zcS0+cV9yZWNlaXZlcnMubmV4dDsKIAl3aGlsZSAodG1wICE9ICZtc3EtPnFfcmVjZWl2ZXJzKSB7Ci0JCXN0cnVjdCBtc2dfcmVjZWl2ZXIqIG1zcjsKLQkJCi0JCW1zciA9IGxpc3RfZW50cnkodG1wLHN0cnVjdCBtc2dfcmVjZWl2ZXIscl9saXN0KTsKKwkJc3RydWN0IG1zZ19yZWNlaXZlciAqbXNyOworCisJCW1zciA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbXNnX3JlY2VpdmVyLCByX2xpc3QpOwogCQl0bXAgPSB0bXAtPm5leHQ7CiAJCW1zci0+cl9tc2cgPSBOVUxMOwogCQl3YWtlX3VwX3Byb2Nlc3MobXNyLT5yX3Rzayk7CkBAIC0xNzgsMjYgKzE3NywyOCBAQAogCQltc3ItPnJfbXNnID0gRVJSX1BUUihyZXMpOwogCX0KIH0KLS8qIAotICogZnJlZXF1ZSgpIHdha2VzIHVwIHdhaXRlcnMgb24gdGhlIHNlbmRlciBhbmQgcmVjZWl2ZXIgd2FpdGluZyBxdWV1ZSwgCi0gKiByZW1vdmVzIHRoZSBtZXNzYWdlIHF1ZXVlIGZyb20gbWVzc2FnZSBxdWV1ZSBJRCAKKworLyoKKyAqIGZyZWVxdWUoKSB3YWtlcyB1cCB3YWl0ZXJzIG9uIHRoZSBzZW5kZXIgYW5kIHJlY2VpdmVyIHdhaXRpbmcgcXVldWUsCisgKiByZW1vdmVzIHRoZSBtZXNzYWdlIHF1ZXVlIGZyb20gbWVzc2FnZSBxdWV1ZSBJRAogICogYXJyYXksIGFuZCBjbGVhbnMgdXAgYWxsIHRoZSBtZXNzYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBxdWV1ZS4KICAqCiAgKiBtc2dfaWRzLm11dGV4IGFuZCB0aGUgc3BpbmxvY2sgZm9yIHRoaXMgbWVzc2FnZSBxdWV1ZSBpcyBob2xkCiAgKiBiZWZvcmUgZnJlZXF1ZSgpIGlzIGNhbGxlZC4gbXNnX2lkcy5tdXRleCByZW1haW5zIGxvY2tlZCBvbiBleGl0LgogICovCi1zdGF0aWMgdm9pZCBmcmVlcXVlIChzdHJ1Y3QgbXNnX3F1ZXVlICptc3EsIGludCBpZCkKK3N0YXRpYyB2b2lkIGZyZWVxdWUoc3RydWN0IG1zZ19xdWV1ZSAqbXNxLCBpbnQgaWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCi0JZXhwdW5nZV9hbGwobXNxLC1FSURSTSk7Ci0Jc3Nfd2FrZXVwKCZtc3EtPnFfc2VuZGVycywxKTsKKwlleHB1bmdlX2FsbChtc3EsIC1FSURSTSk7CisJc3Nfd2FrZXVwKCZtc3EtPnFfc2VuZGVycywgMSk7CiAJbXNxID0gbXNnX3JtaWQoaWQpOwogCW1zZ191bmxvY2sobXNxKTsKLQkJCisKIAl0bXAgPSBtc3EtPnFfbWVzc2FnZXMubmV4dDsKLQl3aGlsZSh0bXAgIT0gJm1zcS0+cV9tZXNzYWdlcykgewotCQlzdHJ1Y3QgbXNnX21zZyogbXNnID0gbGlzdF9lbnRyeSh0bXAsc3RydWN0IG1zZ19tc2csbV9saXN0KTsKKwl3aGlsZSAodG1wICE9ICZtc3EtPnFfbWVzc2FnZXMpIHsKKwkJc3RydWN0IG1zZ19tc2cgKm1zZyA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbXNnX21zZywgbV9saXN0KTsKKwogCQl0bXAgPSB0bXAtPm5leHQ7CiAJCWF0b21pY19kZWMoJm1zZ19oZHJzKTsKIAkJZnJlZV9tc2cobXNnKTsKQEAgLTIwNywxMCArMjA4LDEwIEBACiAJaXBjX3JjdV9wdXRyZWYobXNxKTsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5c19tc2dnZXQgKGtleV90IGtleSwgaW50IG1zZ2ZsZykKK2FzbWxpbmthZ2UgbG9uZyBzeXNfbXNnZ2V0KGtleV90IGtleSwgaW50IG1zZ2ZsZykKIHsKLQlpbnQgaWQsIHJldCA9IC1FUEVSTTsKIAlzdHJ1Y3QgbXNnX3F1ZXVlICptc3E7CisJaW50IGlkLCByZXQgPSAtRVBFUk07CiAJCiAJbXV0ZXhfbG9jaygmbXNnX2lkcy5tdXRleCk7CiAJaWYgKGtleSA9PSBJUENfUFJJVkFURSkgCkBAIC0yMjQsMzEgKzIyNSwzNCBAQAogCQlyZXQgPSAtRUVYSVNUOwogCX0gZWxzZSB7CiAJCW1zcSA9IG1zZ19sb2NrKGlkKTsKLQkJQlVHX09OKG1zcT09TlVMTCk7CisJCUJVR19PTihtc3EgPT0gTlVMTCk7CiAJCWlmIChpcGNwZXJtcygmbXNxLT5xX3Blcm0sIG1zZ2ZsZykpCiAJCQlyZXQgPSAtRUFDQ0VTOwogCQllbHNlIHsKIAkJCWludCBxaWQgPSBtc2dfYnVpbGRpZChpZCwgbXNxLT5xX3Blcm0uc2VxKTsKLQkJICAgIAlyZXQgPSBzZWN1cml0eV9tc2dfcXVldWVfYXNzb2NpYXRlKG1zcSwgbXNnZmxnKTsKKworCQkJcmV0ID0gc2VjdXJpdHlfbXNnX3F1ZXVlX2Fzc29jaWF0ZShtc3EsIG1zZ2ZsZyk7CiAJCQlpZiAoIXJldCkKIAkJCQlyZXQgPSBxaWQ7CiAJCX0KIAkJbXNnX3VubG9jayhtc3EpOwogCX0KIAltdXRleF91bmxvY2soJm1zZ19pZHMubXV0ZXgpOworCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGNvcHlfbXNxaWRfdG9fdXNlcih2b2lkIF9fdXNlciAqYnVmLCBzdHJ1Y3QgbXNxaWQ2NF9kcyAqaW4sIGludCB2ZXJzaW9uKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCitjb3B5X21zcWlkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmJ1Ziwgc3RydWN0IG1zcWlkNjRfZHMgKmluLCBpbnQgdmVyc2lvbikKIHsKIAlzd2l0Y2godmVyc2lvbikgewogCWNhc2UgSVBDXzY0OgotCQlyZXR1cm4gY29weV90b191c2VyIChidWYsIGluLCBzaXplb2YoKmluKSk7CisJCXJldHVybiBjb3B5X3RvX3VzZXIoYnVmLCBpbiwgc2l6ZW9mKCppbikpOwogCWNhc2UgSVBDX09MRDoKLQkgICAgeworCXsKIAkJc3RydWN0IG1zcWlkX2RzIG91dDsKIAotCQltZW1zZXQoJm91dCwwLHNpemVvZihvdXQpKTsKKwkJbWVtc2V0KCZvdXQsIDAsIHNpemVvZihvdXQpKTsKIAogCQlpcGM2NF9wZXJtX3RvX2lwY19wZXJtKCZpbi0+bXNnX3Blcm0sICZvdXQubXNnX3Blcm0pOwogCkBAIC0yNTYsMTggKzI2MCwxOCBAQAogCQlvdXQubXNnX3J0aW1lCQk9IGluLT5tc2dfcnRpbWU7CiAJCW91dC5tc2dfY3RpbWUJCT0gaW4tPm1zZ19jdGltZTsKIAotCQlpZihpbi0+bXNnX2NieXRlcyA+IFVTSFJUX01BWCkKKwkJaWYgKGluLT5tc2dfY2J5dGVzID4gVVNIUlRfTUFYKQogCQkJb3V0Lm1zZ19jYnl0ZXMJPSBVU0hSVF9NQVg7CiAJCWVsc2UKIAkJCW91dC5tc2dfY2J5dGVzCT0gaW4tPm1zZ19jYnl0ZXM7CiAJCW91dC5tc2dfbGNieXRlcwkJPSBpbi0+bXNnX2NieXRlczsKIAotCQlpZihpbi0+bXNnX3FudW0gPiBVU0hSVF9NQVgpCisJCWlmIChpbi0+bXNnX3FudW0gPiBVU0hSVF9NQVgpCiAJCQlvdXQubXNnX3FudW0JPSBVU0hSVF9NQVg7CiAJCWVsc2UKIAkJCW91dC5tc2dfcW51bQk9IGluLT5tc2dfcW51bTsKIAotCQlpZihpbi0+bXNnX3FieXRlcyA+IFVTSFJUX01BWCkKKwkJaWYgKGluLT5tc2dfcWJ5dGVzID4gVVNIUlRfTUFYKQogCQkJb3V0Lm1zZ19xYnl0ZXMJPSBVU0hSVF9NQVg7CiAJCWVsc2UKIAkJCW91dC5tc2dfcWJ5dGVzCT0gaW4tPm1zZ19xYnl0ZXM7CkBAIC0yNzYsOCArMjgwLDggQEAKIAkJb3V0Lm1zZ19sc3BpZAkJPSBpbi0+bXNnX2xzcGlkOwogCQlvdXQubXNnX2xycGlkCQk9IGluLT5tc2dfbHJwaWQ7CiAKLQkJcmV0dXJuIGNvcHlfdG9fdXNlciAoYnVmLCAmb3V0LCBzaXplb2Yob3V0KSk7Ci0JICAgIH0KKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihidWYsICZvdXQsIHNpemVvZihvdXQpKTsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtMjkwLDE0ICsyOTQsMTUgQEAKIAltb2RlX3QJCW1vZGU7CiB9OwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgY29weV9tc3FpZF9mcm9tX3VzZXIoc3RydWN0IG1zcV9zZXRidWYgKm91dCwgdm9pZCBfX3VzZXIgKmJ1ZiwgaW50IHZlcnNpb24pCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKK2NvcHlfbXNxaWRfZnJvbV91c2VyKHN0cnVjdCBtc3Ffc2V0YnVmICpvdXQsIHZvaWQgX191c2VyICpidWYsIGludCB2ZXJzaW9uKQogewogCXN3aXRjaCh2ZXJzaW9uKSB7CiAJY2FzZSBJUENfNjQ6Ci0JICAgIHsKKwl7CiAJCXN0cnVjdCBtc3FpZDY0X2RzIHRidWY7CiAKLQkJaWYgKGNvcHlfZnJvbV91c2VyICgmdGJ1ZiwgYnVmLCBzaXplb2YgKHRidWYpKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0YnVmLCBidWYsIHNpemVvZih0YnVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAogCQlvdXQtPnFieXRlcwkJPSB0YnVmLm1zZ19xYnl0ZXM7CkBAIC0zMDYsNjAgKzMxMSw2MSBAQAogCQlvdXQtPm1vZGUJCT0gdGJ1Zi5tc2dfcGVybS5tb2RlOwogCiAJCXJldHVybiAwOwotCSAgICB9CisJfQogCWNhc2UgSVBDX09MRDoKLQkgICAgeworCXsKIAkJc3RydWN0IG1zcWlkX2RzIHRidWZfb2xkOwogCi0JCWlmIChjb3B5X2Zyb21fdXNlciAoJnRidWZfb2xkLCBidWYsIHNpemVvZiAodGJ1Zl9vbGQpKSkKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0YnVmX29sZCwgYnVmLCBzaXplb2YodGJ1Zl9vbGQpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCiAJCW91dC0+dWlkCQk9IHRidWZfb2xkLm1zZ19wZXJtLnVpZDsKIAkJb3V0LT5naWQJCT0gdGJ1Zl9vbGQubXNnX3Blcm0uZ2lkOwogCQlvdXQtPm1vZGUJCT0gdGJ1Zl9vbGQubXNnX3Blcm0ubW9kZTsKIAotCQlpZih0YnVmX29sZC5tc2dfcWJ5dGVzID09IDApCisJCWlmICh0YnVmX29sZC5tc2dfcWJ5dGVzID09IDApCiAJCQlvdXQtPnFieXRlcwk9IHRidWZfb2xkLm1zZ19scWJ5dGVzOwogCQllbHNlCiAJCQlvdXQtPnFieXRlcwk9IHRidWZfb2xkLm1zZ19xYnl0ZXM7CiAKIAkJcmV0dXJuIDA7Ci0JICAgIH0KKwl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogfQogCi1hc21saW5rYWdlIGxvbmcgc3lzX21zZ2N0bCAoaW50IG1zcWlkLCBpbnQgY21kLCBzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICpidWYpCithc21saW5rYWdlIGxvbmcgc3lzX21zZ2N0bChpbnQgbXNxaWQsIGludCBjbWQsIHN0cnVjdCBtc3FpZF9kcyBfX3VzZXIgKmJ1ZikKIHsKLQlpbnQgZXJyLCB2ZXJzaW9uOwotCXN0cnVjdCBtc2dfcXVldWUgKm1zcTsKLQlzdHJ1Y3QgbXNxX3NldGJ1ZiBzZXRidWY7CiAJc3RydWN0IGtlcm5faXBjX3Blcm0gKmlwY3A7Ci0JCisJc3RydWN0IG1zcV9zZXRidWYgc2V0YnVmOworCXN0cnVjdCBtc2dfcXVldWUgKm1zcTsKKwlpbnQgZXJyLCB2ZXJzaW9uOworCiAJaWYgKG1zcWlkIDwgMCB8fCBjbWQgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXZlcnNpb24gPSBpcGNfcGFyc2VfdmVyc2lvbigmY21kKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBJUENfSU5GTzogCi0JY2FzZSBNU0dfSU5GTzogCi0JeyAKKwljYXNlIElQQ19JTkZPOgorCWNhc2UgTVNHX0lORk86CisJewogCQlzdHJ1Y3QgbXNnaW5mbyBtc2dpbmZvOwogCQlpbnQgbWF4X2lkOworCiAJCWlmICghYnVmKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCS8qIFdlIG11c3Qgbm90IHJldHVybiBrZXJuZWwgc3RhY2sgZGF0YS4KKwkJLyoKKwkJICogV2UgbXVzdCBub3QgcmV0dXJuIGtlcm5lbCBzdGFjayBkYXRhLgogCQkgKiBkdWUgdG8gcGFkZGluZywgaXQncyBub3QgZW5vdWdoCiAJCSAqIHRvIHNldCBhbGwgbWVtYmVyIGZpZWxkcy4KIAkJICovCi0KIAkJZXJyID0gc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ2N0bChOVUxMLCBjbWQpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQltZW1zZXQoJm1zZ2luZm8sMCxzaXplb2YobXNnaW5mbykpOwkKKwkJbWVtc2V0KCZtc2dpbmZvLCAwLCBzaXplb2YobXNnaW5mbykpOwogCQltc2dpbmZvLm1zZ21uaSA9IG1zZ19jdGxtbmk7CiAJCW1zZ2luZm8ubXNnbWF4ID0gbXNnX2N0bG1heDsKIAkJbXNnaW5mby5tc2dtbmIgPSBtc2dfY3RsbW5iOwpAQCAtMzc3LDM2ICszODMsMzcgQEAKIAkJfQogCQltYXhfaWQgPSBtc2dfaWRzLm1heF9pZDsKIAkJbXV0ZXhfdW5sb2NrKCZtc2dfaWRzLm11dGV4KTsKLQkJaWYgKGNvcHlfdG9fdXNlciAoYnVmLCAmbXNnaW5mbywgc2l6ZW9mKHN0cnVjdCBtc2dpbmZvKSkpCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmbXNnaW5mbywgc2l6ZW9mKHN0cnVjdCBtc2dpbmZvKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0dXJuIChtYXhfaWQgPCAwKSA/IDA6IG1heF9pZDsKKwkJcmV0dXJuIChtYXhfaWQgPCAwKSA/IDAgOiBtYXhfaWQ7CiAJfQogCWNhc2UgTVNHX1NUQVQ6CiAJY2FzZSBJUENfU1RBVDoKIAl7CiAJCXN0cnVjdCBtc3FpZDY0X2RzIHRidWY7CiAJCWludCBzdWNjZXNzX3JldHVybjsKKwogCQlpZiAoIWJ1ZikKIAkJCXJldHVybiAtRUZBVUxUOwotCQlpZihjbWQgPT0gTVNHX1NUQVQgJiYgbXNxaWQgPj0gbXNnX2lkcy5lbnRyaWVzLT5zaXplKQorCQlpZiAoY21kID09IE1TR19TVEFUICYmIG1zcWlkID49IG1zZ19pZHMuZW50cmllcy0+c2l6ZSkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCW1lbXNldCgmdGJ1ZiwwLHNpemVvZih0YnVmKSk7CisJCW1lbXNldCgmdGJ1ZiwgMCwgc2l6ZW9mKHRidWYpKTsKIAogCQltc3EgPSBtc2dfbG9jayhtc3FpZCk7CiAJCWlmIChtc3EgPT0gTlVMTCkKIAkJCXJldHVybiAtRUlOVkFMOwogCi0JCWlmKGNtZCA9PSBNU0dfU1RBVCkgeworCQlpZiAoY21kID09IE1TR19TVEFUKSB7CiAJCQlzdWNjZXNzX3JldHVybiA9IG1zZ19idWlsZGlkKG1zcWlkLCBtc3EtPnFfcGVybS5zZXEpOwogCQl9IGVsc2UgewogCQkJZXJyID0gLUVJRFJNOwotCQkJaWYgKG1zZ19jaGVja2lkKG1zcSxtc3FpZCkpCisJCQlpZiAobXNnX2NoZWNraWQobXNxLCBtc3FpZCkpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJc3VjY2Vzc19yZXR1cm4gPSAwOwogCQl9CiAJCWVyciA9IC1FQUNDRVM7Ci0JCWlmIChpcGNwZXJtcyAoJm1zcS0+cV9wZXJtLCBTX0lSVUdPKSkKKwkJaWYgKGlwY3Blcm1zKCZtc3EtPnFfcGVybSwgU19JUlVHTykpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJZXJyID0gc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ2N0bChtc3EsIGNtZCk7CkBAIC00MzAsNyArNDM3LDcgQEAKIAljYXNlIElQQ19TRVQ6CiAJCWlmICghYnVmKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCWlmIChjb3B5X21zcWlkX2Zyb21fdXNlciAoJnNldGJ1ZiwgYnVmLCB2ZXJzaW9uKSkKKwkJaWYgKGNvcHlfbXNxaWRfZnJvbV91c2VyKCZzZXRidWYsIGJ1ZiwgdmVyc2lvbikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJYnJlYWs7CiAJY2FzZSBJUENfUk1JRDoKQEAgLTQ0MSwxMiArNDQ4LDEyIEBACiAKIAltdXRleF9sb2NrKCZtc2dfaWRzLm11dGV4KTsKIAltc3EgPSBtc2dfbG9jayhtc3FpZCk7Ci0JZXJyPS1FSU5WQUw7CisJZXJyID0gLUVJTlZBTDsKIAlpZiAobXNxID09IE5VTEwpCiAJCWdvdG8gb3V0X3VwOwogCiAJZXJyID0gLUVJRFJNOwotCWlmIChtc2dfY2hlY2tpZChtc3EsbXNxaWQpKQorCWlmIChtc2dfY2hlY2tpZChtc3EsIG1zcWlkKSkKIAkJZ290byBvdXRfdW5sb2NrX3VwOwogCWlwY3AgPSAmbXNxLT5xX3Blcm07CiAKQEAgLTQ1NCwxNSArNDYxLDE2IEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrX3VwOwogCWlmIChjbWQ9PUlQQ19TRVQpIHsKLQkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKHNldGJ1Zi5xYnl0ZXMsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsIHNldGJ1Zi5tb2RlKTsKKwkJZXJyID0gYXVkaXRfaXBjX3NldF9wZXJtKHNldGJ1Zi5xYnl0ZXMsIHNldGJ1Zi51aWQsIHNldGJ1Zi5naWQsCisJCQkJCSBzZXRidWYubW9kZSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bmxvY2tfdXA7CiAJfQogCiAJZXJyID0gLUVQRVJNOwotCWlmIChjdXJyZW50LT5ldWlkICE9IGlwY3AtPmN1aWQgJiYgCisJaWYgKGN1cnJlbnQtPmV1aWQgIT0gaXBjcC0+Y3VpZCAmJgogCSAgICBjdXJyZW50LT5ldWlkICE9IGlwY3AtPnVpZCAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkgICAgLyogV2UgX2NvdWxkXyBjaGVjayBmb3IgQ0FQX0NIT1dOIGFib3ZlLCBidXQgd2UgZG9uJ3QgKi8KKwkJLyogV2UgX2NvdWxkXyBjaGVjayBmb3IgQ0FQX0NIT1dOIGFib3ZlLCBidXQgd2UgZG9uJ3QgKi8KIAkJZ290byBvdXRfdW5sb2NrX3VwOwogCiAJZXJyID0gc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ2N0bChtc3EsIGNtZCk7CkBAIC00ODAsMjIgKzQ4OCwyMiBAQAogCiAJCWlwY3AtPnVpZCA9IHNldGJ1Zi51aWQ7CiAJCWlwY3AtPmdpZCA9IHNldGJ1Zi5naWQ7Ci0JCWlwY3AtPm1vZGUgPSAoaXBjcC0+bW9kZSAmIH5TX0lSV1hVR08pIHwgCi0JCQkoU19JUldYVUdPICYgc2V0YnVmLm1vZGUpOworCQlpcGNwLT5tb2RlID0gKGlwY3AtPm1vZGUgJiB+U19JUldYVUdPKSB8CisJCQkgICAgIChTX0lSV1hVR08gJiBzZXRidWYubW9kZSk7CiAJCW1zcS0+cV9jdGltZSA9IGdldF9zZWNvbmRzKCk7CiAJCS8qIHNsZWVwaW5nIHJlY2VpdmVycyBtaWdodCBiZSBleGNsdWRlZCBieQogCQkgKiBzdHJpY3RlciBwZXJtaXNzaW9ucy4KIAkJICovCi0JCWV4cHVuZ2VfYWxsKG1zcSwtRUFHQUlOKTsKKwkJZXhwdW5nZV9hbGwobXNxLCAtRUFHQUlOKTsKIAkJLyogc2xlZXBpbmcgc2VuZGVycyBtaWdodCBiZSBhYmxlIHRvIHNlbmQKIAkJICogZHVlIHRvIGEgbGFyZ2VyIHF1ZXVlIHNpemUuCiAJCSAqLwotCQlzc193YWtldXAoJm1zcS0+cV9zZW5kZXJzLDApOworCQlzc193YWtldXAoJm1zcS0+cV9zZW5kZXJzLCAwKTsKIAkJbXNnX3VubG9jayhtc3EpOwogCQlicmVhazsKIAl9CiAJY2FzZSBJUENfUk1JRDoKLQkJZnJlZXF1ZSAobXNxLCBtc3FpZCk7IAorCQlmcmVlcXVlKG1zcSwgbXNxaWQpOwogCQlicmVhazsKIAl9CiAJZXJyID0gMDsKQEAgLTUxMCw0MSArNTE4LDQ0IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCB0ZXN0bXNnKHN0cnVjdCBtc2dfbXNnKiBtc2csbG9uZyB0eXBlLGludCBtb2RlKQorc3RhdGljIGludCB0ZXN0bXNnKHN0cnVjdCBtc2dfbXNnICptc2csIGxvbmcgdHlwZSwgaW50IG1vZGUpCiB7CiAJc3dpdGNoKG1vZGUpCiAJewogCQljYXNlIFNFQVJDSF9BTlk6CiAJCQlyZXR1cm4gMTsKIAkJY2FzZSBTRUFSQ0hfTEVTU0VRVUFMOgotCQkJaWYobXNnLT5tX3R5cGUgPD10eXBlKQorCQkJaWYgKG1zZy0+bV90eXBlIDw9dHlwZSkKIAkJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwogCQljYXNlIFNFQVJDSF9FUVVBTDoKLQkJCWlmKG1zZy0+bV90eXBlID09IHR5cGUpCisJCQlpZiAobXNnLT5tX3R5cGUgPT0gdHlwZSkKIAkJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwogCQljYXNlIFNFQVJDSF9OT1RFUVVBTDoKLQkJCWlmKG1zZy0+bV90eXBlICE9IHR5cGUpCisJCQlpZiAobXNnLT5tX3R5cGUgIT0gdHlwZSkKIAkJCQlyZXR1cm4gMTsKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcGlwZWxpbmVkX3NlbmQoc3RydWN0IG1zZ19xdWV1ZSogbXNxLCBzdHJ1Y3QgbXNnX21zZyogbXNnKQorc3RhdGljIGlubGluZSBpbnQgcGlwZWxpbmVkX3NlbmQoc3RydWN0IG1zZ19xdWV1ZSAqbXNxLCBzdHJ1Y3QgbXNnX21zZyAqbXNnKQogewotCXN0cnVjdCBsaXN0X2hlYWQqIHRtcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0bXA7CiAKIAl0bXAgPSBtc3EtPnFfcmVjZWl2ZXJzLm5leHQ7CiAJd2hpbGUgKHRtcCAhPSAmbXNxLT5xX3JlY2VpdmVycykgewotCQlzdHJ1Y3QgbXNnX3JlY2VpdmVyKiBtc3I7Ci0JCW1zciA9IGxpc3RfZW50cnkodG1wLHN0cnVjdCBtc2dfcmVjZWl2ZXIscl9saXN0KTsKKwkJc3RydWN0IG1zZ19yZWNlaXZlciAqbXNyOworCisJCW1zciA9IGxpc3RfZW50cnkodG1wLCBzdHJ1Y3QgbXNnX3JlY2VpdmVyLCByX2xpc3QpOwogCQl0bXAgPSB0bXAtPm5leHQ7Ci0JCWlmKHRlc3Rtc2cobXNnLG1zci0+cl9tc2d0eXBlLG1zci0+cl9tb2RlKSAmJgotCQkgICAhc2VjdXJpdHlfbXNnX3F1ZXVlX21zZ3Jjdihtc3EsIG1zZywgbXNyLT5yX3RzaywgbXNyLT5yX21zZ3R5cGUsIG1zci0+cl9tb2RlKSkgeworCQlpZiAodGVzdG1zZyhtc2csIG1zci0+cl9tc2d0eXBlLCBtc3ItPnJfbW9kZSkgJiYKKwkJICAgICFzZWN1cml0eV9tc2dfcXVldWVfbXNncmN2KG1zcSwgbXNnLCBtc3ItPnJfdHNrLAorCQkJCQkgICAgICAgbXNyLT5yX21zZ3R5cGUsIG1zci0+cl9tb2RlKSkgeworCiAJCQlsaXN0X2RlbCgmbXNyLT5yX2xpc3QpOwotCQkJaWYobXNyLT5yX21heHNpemUgPCBtc2ctPm1fdHMpIHsKKwkJCWlmIChtc3ItPnJfbWF4c2l6ZSA8IG1zZy0+bV90cykgewogCQkJCW1zci0+cl9tc2cgPSBOVUxMOwogCQkJCXdha2VfdXBfcHJvY2Vzcyhtc3ItPnJfdHNrKTsKIAkJCQlzbXBfbWIoKTsKQEAgLTU1Niw2ICs1NjcsNyBAQAogCQkJCXdha2VfdXBfcHJvY2Vzcyhtc3ItPnJfdHNrKTsKIAkJCQlzbXBfbWIoKTsKIAkJCQltc3ItPnJfbXNnID0gbXNnOworCiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAJCX0KQEAgLTU2Myw0MCArNTc1LDQxIEBACiAJcmV0dXJuIDA7CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNfbXNnc25kIChpbnQgbXNxaWQsIHN0cnVjdCBtc2didWYgX191c2VyICptc2dwLCBzaXplX3QgbXNnc3osIGludCBtc2dmbGcpCithc21saW5rYWdlIGxvbmcKK3N5c19tc2dzbmQoaW50IG1zcWlkLCBzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqbXNncCwgc2l6ZV90IG1zZ3N6LCBpbnQgbXNnZmxnKQogewogCXN0cnVjdCBtc2dfcXVldWUgKm1zcTsKIAlzdHJ1Y3QgbXNnX21zZyAqbXNnOwogCWxvbmcgbXR5cGU7CiAJaW50IGVycjsKLQkKKwogCWlmIChtc2dzeiA+IG1zZ19jdGxtYXggfHwgKGxvbmcpIG1zZ3N6IDwgMCB8fCBtc3FpZCA8IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChnZXRfdXNlcihtdHlwZSwgJm1zZ3AtPm10eXBlKSkKLQkJcmV0dXJuIC1FRkFVTFQ7IAorCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAobXR5cGUgPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW1zZyA9IGxvYWRfbXNnKG1zZ3AtPm10ZXh0LCBtc2dzeik7Ci0JaWYoSVNfRVJSKG1zZykpCisJaWYgKElTX0VSUihtc2cpKQogCQlyZXR1cm4gUFRSX0VSUihtc2cpOwogCiAJbXNnLT5tX3R5cGUgPSBtdHlwZTsKIAltc2ctPm1fdHMgPSBtc2dzejsKIAogCW1zcSA9IG1zZ19sb2NrKG1zcWlkKTsKLQllcnI9LUVJTlZBTDsKLQlpZihtc3E9PU5VTEwpCisJZXJyID0gLUVJTlZBTDsKKwlpZiAobXNxID09IE5VTEwpCiAJCWdvdG8gb3V0X2ZyZWU7CiAKIAllcnI9IC1FSURSTTsKLQlpZiAobXNnX2NoZWNraWQobXNxLG1zcWlkKSkKKwlpZiAobXNnX2NoZWNraWQobXNxLCBtc3FpZCkpCiAJCWdvdG8gb3V0X3VubG9ja19mcmVlOwogCiAJZm9yICg7OykgewogCQlzdHJ1Y3QgbXNnX3NlbmRlciBzOwogCi0JCWVycj0tRUFDQ0VTOworCQllcnIgPSAtRUFDQ0VTOwogCQlpZiAoaXBjcGVybXMoJm1zcS0+cV9wZXJtLCBTX0lXVUdPKSkKIAkJCWdvdG8gb3V0X3VubG9ja19mcmVlOwogCkBAIC02MDQsMTQgKzYxNywxNCBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrX2ZyZWU7CiAKLQkJaWYobXNnc3ogKyBtc3EtPnFfY2J5dGVzIDw9IG1zcS0+cV9xYnl0ZXMgJiYKKwkJaWYgKG1zZ3N6ICsgbXNxLT5xX2NieXRlcyA8PSBtc3EtPnFfcWJ5dGVzICYmCiAJCQkJMSArIG1zcS0+cV9xbnVtIDw9IG1zcS0+cV9xYnl0ZXMpIHsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLyogcXVldWUgZnVsbCwgd2FpdDogKi8KLQkJaWYobXNnZmxnJklQQ19OT1dBSVQpIHsKLQkJCWVycj0tRUFHQUlOOworCQlpZiAobXNnZmxnICYgSVBDX05PV0FJVCkgeworCQkJZXJyID0gLUVBR0FJTjsKIAkJCWdvdG8gb3V0X3VubG9ja19mcmVlOwogCQl9CiAJCXNzX2FkZChtc3EsICZzKTsKQEAgLTYyNiw5ICs2MzksOSBAQAogCQkJZ290byBvdXRfdW5sb2NrX2ZyZWU7CiAJCX0KIAkJc3NfZGVsKCZzKTsKLQkJCisKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQllcnI9LUVSRVNUQVJUTk9IQU5EOworCQkJZXJyID0gLUVSRVNUQVJUTk9IQU5EOwogCQkJZ290byBvdXRfdW5sb2NrX2ZyZWU7CiAJCX0KIAl9CkBAIC02MzYsNDcgKzY0OSw0NyBAQAogCW1zcS0+cV9sc3BpZCA9IGN1cnJlbnQtPnRnaWQ7CiAJbXNxLT5xX3N0aW1lID0gZ2V0X3NlY29uZHMoKTsKIAotCWlmKCFwaXBlbGluZWRfc2VuZChtc3EsbXNnKSkgeworCWlmICghcGlwZWxpbmVkX3NlbmQobXNxLCBtc2cpKSB7CiAJCS8qIG5vb25lIGlzIHdhaXRpbmcgZm9yIHRoaXMgbWVzc2FnZSwgZW5xdWV1ZSBpdCAqLwotCQlsaXN0X2FkZF90YWlsKCZtc2ctPm1fbGlzdCwmbXNxLT5xX21lc3NhZ2VzKTsKKwkJbGlzdF9hZGRfdGFpbCgmbXNnLT5tX2xpc3QsICZtc3EtPnFfbWVzc2FnZXMpOwogCQltc3EtPnFfY2J5dGVzICs9IG1zZ3N6OwogCQltc3EtPnFfcW51bSsrOwotCQlhdG9taWNfYWRkKG1zZ3N6LCZtc2dfYnl0ZXMpOworCQlhdG9taWNfYWRkKG1zZ3N6LCAmbXNnX2J5dGVzKTsKIAkJYXRvbWljX2luYygmbXNnX2hkcnMpOwogCX0KLQkKKwogCWVyciA9IDA7CiAJbXNnID0gTlVMTDsKIAogb3V0X3VubG9ja19mcmVlOgogCW1zZ191bmxvY2sobXNxKTsKIG91dF9mcmVlOgotCWlmKG1zZyE9TlVMTCkKKwlpZiAobXNnICE9IE5VTEwpCiAJCWZyZWVfbXNnKG1zZyk7CiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgY29udmVydF9tb2RlKGxvbmcqIG1zZ3R5cCwgaW50IG1zZ2ZsZykKK3N0YXRpYyBpbmxpbmUgaW50IGNvbnZlcnRfbW9kZShsb25nICptc2d0eXAsIGludCBtc2dmbGcpCiB7Ci0JLyogCisJLyoKIAkgKiAgZmluZCBtZXNzYWdlIG9mIGNvcnJlY3QgdHlwZS4KIAkgKiAgbXNndHlwID0gMCA9PiBnZXQgZmlyc3QuCiAJICogIG1zZ3R5cCA+IDAgPT4gZ2V0IGZpcnN0IG1lc3NhZ2Ugb2YgbWF0Y2hpbmcgdHlwZS4KLQkgKiAgbXNndHlwIDwgMCA9PiBnZXQgbWVzc2FnZSB3aXRoIGxlYXN0IHR5cGUgbXVzdCBiZSA8IGFicyhtc2d0eXBlKS4gIAorCSAqICBtc2d0eXAgPCAwID0+IGdldCBtZXNzYWdlIHdpdGggbGVhc3QgdHlwZSBtdXN0IGJlIDwgYWJzKG1zZ3R5cGUpLgogCSAqLwotCWlmKCptc2d0eXA9PTApCisJaWYgKCptc2d0eXAgPT0gMCkKIAkJcmV0dXJuIFNFQVJDSF9BTlk7Ci0JaWYoKm1zZ3R5cDwwKSB7Ci0JCSptc2d0eXA9LSgqbXNndHlwKTsKKwlpZiAoKm1zZ3R5cCA8IDApIHsKKwkJKm1zZ3R5cCA9IC0qbXNndHlwOwogCQlyZXR1cm4gU0VBUkNIX0xFU1NFUVVBTDsKIAl9Ci0JaWYobXNnZmxnICYgTVNHX0VYQ0VQVCkKKwlpZiAobXNnZmxnICYgTVNHX0VYQ0VQVCkKIAkJcmV0dXJuIFNFQVJDSF9OT1RFUVVBTDsKIAlyZXR1cm4gU0VBUkNIX0VRVUFMOwogfQogCi1hc21saW5rYWdlIGxvbmcgc3lzX21zZ3JjdiAoaW50IG1zcWlkLCBzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqbXNncCwgc2l6ZV90IG1zZ3N6LAotCQkJICAgIGxvbmcgbXNndHlwLCBpbnQgbXNnZmxnKQorYXNtbGlua2FnZSBsb25nIHN5c19tc2dyY3YoaW50IG1zcWlkLCBzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqbXNncCwgc2l6ZV90IG1zZ3N6LAorCQkJICAgbG9uZyBtc2d0eXAsIGludCBtc2dmbGcpCiB7CiAJc3RydWN0IG1zZ19xdWV1ZSAqbXNxOwogCXN0cnVjdCBtc2dfbXNnICptc2c7CkBAIC02ODQsNDQgKzY5Nyw1MSBAQAogCiAJaWYgKG1zcWlkIDwgMCB8fCAobG9uZykgbXNnc3ogPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltb2RlID0gY29udmVydF9tb2RlKCZtc2d0eXAsbXNnZmxnKTsKKwltb2RlID0gY29udmVydF9tb2RlKCZtc2d0eXAsIG1zZ2ZsZyk7CiAKIAltc3EgPSBtc2dfbG9jayhtc3FpZCk7Ci0JaWYobXNxPT1OVUxMKQorCWlmIChtc3EgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltc2cgPSBFUlJfUFRSKC1FSURSTSk7Ci0JaWYgKG1zZ19jaGVja2lkKG1zcSxtc3FpZCkpCisJaWYgKG1zZ19jaGVja2lkKG1zcSwgbXNxaWQpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlmb3IgKDs7KSB7CiAJCXN0cnVjdCBtc2dfcmVjZWl2ZXIgbXNyX2Q7Ci0JCXN0cnVjdCBsaXN0X2hlYWQqIHRtcDsKKwkJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwogCiAJCW1zZyA9IEVSUl9QVFIoLUVBQ0NFUyk7Ci0JCWlmIChpcGNwZXJtcyAoJm1zcS0+cV9wZXJtLCBTX0lSVUdPKSkKKwkJaWYgKGlwY3Blcm1zKCZtc3EtPnFfcGVybSwgU19JUlVHTykpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKIAkJbXNnID0gRVJSX1BUUigtRUFHQUlOKTsKIAkJdG1wID0gbXNxLT5xX21lc3NhZ2VzLm5leHQ7CiAJCXdoaWxlICh0bXAgIT0gJm1zcS0+cV9tZXNzYWdlcykgewogCQkJc3RydWN0IG1zZ19tc2cgKndhbGtfbXNnOwotCQkJd2Fsa19tc2cgPSBsaXN0X2VudHJ5KHRtcCxzdHJ1Y3QgbXNnX21zZyxtX2xpc3QpOwotCQkJaWYodGVzdG1zZyh3YWxrX21zZyxtc2d0eXAsbW9kZSkgJiYKLQkJCSAgICFzZWN1cml0eV9tc2dfcXVldWVfbXNncmN2KG1zcSwgd2Fsa19tc2csIGN1cnJlbnQsIG1zZ3R5cCwgbW9kZSkpIHsKKworCQkJd2Fsa19tc2cgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IG1zZ19tc2csIG1fbGlzdCk7CisJCQlpZiAodGVzdG1zZyh3YWxrX21zZywgbXNndHlwLCBtb2RlKSAmJgorCQkJICAgICFzZWN1cml0eV9tc2dfcXVldWVfbXNncmN2KG1zcSwgd2Fsa19tc2csIGN1cnJlbnQsCisJCQkJCQkgICAgICAgbXNndHlwLCBtb2RlKSkgeworCiAJCQkJbXNnID0gd2Fsa19tc2c7Ci0JCQkJaWYobW9kZSA9PSBTRUFSQ0hfTEVTU0VRVUFMICYmIHdhbGtfbXNnLT5tX3R5cGUgIT0gMSkgewotCQkJCQltc2c9d2Fsa19tc2c7Ci0JCQkJCW1zZ3R5cD13YWxrX21zZy0+bV90eXBlLTE7CisJCQkJaWYgKG1vZGUgPT0gU0VBUkNIX0xFU1NFUVVBTCAmJgorCQkJCQkJd2Fsa19tc2ctPm1fdHlwZSAhPSAxKSB7CisJCQkJCW1zZyA9IHdhbGtfbXNnOworCQkJCQltc2d0eXAgPSB3YWxrX21zZy0+bV90eXBlIC0gMTsKIAkJCQl9IGVsc2UgewotCQkJCQltc2c9d2Fsa19tc2c7CisJCQkJCW1zZyA9IHdhbGtfbXNnOwogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CiAJCQl0bXAgPSB0bXAtPm5leHQ7CiAJCX0KLQkJaWYoIUlTX0VSUihtc2cpKSB7Ci0JCQkvKiBGb3VuZCBhIHN1aXRhYmxlIG1lc3NhZ2UuIFVubGluayBpdCBmcm9tIHRoZSBxdWV1ZS4gKi8KKwkJaWYgKCFJU19FUlIobXNnKSkgeworCQkJLyoKKwkJCSAqIEZvdW5kIGEgc3VpdGFibGUgbWVzc2FnZS4KKwkJCSAqIFVubGluayBpdCBmcm9tIHRoZSBxdWV1ZS4KKwkJCSAqLwogCQkJaWYgKChtc2dzeiA8IG1zZy0+bV90cykgJiYgIShtc2dmbGcgJiBNU0dfTk9FUlJPUikpIHsKIAkJCQltc2cgPSBFUlJfUFRSKC1FMkJJRyk7CiAJCQkJZ290byBvdXRfdW5sb2NrOwpAQCAtNzMxLDkgKzc1MSw5IEBACiAJCQltc3EtPnFfcnRpbWUgPSBnZXRfc2Vjb25kcygpOwogCQkJbXNxLT5xX2xycGlkID0gY3VycmVudC0+dGdpZDsKIAkJCW1zcS0+cV9jYnl0ZXMgLT0gbXNnLT5tX3RzOwotCQkJYXRvbWljX3N1Yihtc2ctPm1fdHMsJm1zZ19ieXRlcyk7CisJCQlhdG9taWNfc3ViKG1zZy0+bV90cywgJm1zZ19ieXRlcyk7CiAJCQlhdG9taWNfZGVjKCZtc2dfaGRycyk7Ci0JCQlzc193YWtldXAoJm1zcS0+cV9zZW5kZXJzLDApOworCQkJc3Nfd2FrZXVwKCZtc3EtPnFfc2VuZGVycywgMCk7CiAJCQltc2dfdW5sb2NrKG1zcSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzQyLDEzICs3NjIsMTMgQEAKIAkJCW1zZyA9IEVSUl9QVFIoLUVOT01TRyk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KLQkJbGlzdF9hZGRfdGFpbCgmbXNyX2Qucl9saXN0LCZtc3EtPnFfcmVjZWl2ZXJzKTsKKwkJbGlzdF9hZGRfdGFpbCgmbXNyX2Qucl9saXN0LCAmbXNxLT5xX3JlY2VpdmVycyk7CiAJCW1zcl9kLnJfdHNrID0gY3VycmVudDsKIAkJbXNyX2Qucl9tc2d0eXBlID0gbXNndHlwOwogCQltc3JfZC5yX21vZGUgPSBtb2RlOwotCQlpZihtc2dmbGcgJiBNU0dfTk9FUlJPUikKKwkJaWYgKG1zZ2ZsZyAmIE1TR19OT0VSUk9SKQogCQkJbXNyX2Qucl9tYXhzaXplID0gSU5UX01BWDsKLQkJIGVsc2UKKwkJZWxzZQogCQkJbXNyX2Qucl9tYXhzaXplID0gbXNnc3o7CiAJCW1zcl9kLnJfbXNnID0gRVJSX1BUUigtRUFHQUlOKTsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CkBAIC03NzMsMTcgKzc5MywxNyBAQAogCQkgKiB3YWtlX3VwX3Byb2Nlc3MoKS4gVGhlcmUgaXMgYSByYWNlIHdpdGggZXhpdCgpLCBzZWUKIAkJICogaXBjL21xdWV1ZS5jIGZvciB0aGUgZGV0YWlscy4KIAkJICovCi0JCW1zZyA9IChzdHJ1Y3QgbXNnX21zZyopIG1zcl9kLnJfbXNnOworCQltc2cgPSAoc3RydWN0IG1zZ19tc2cqKW1zcl9kLnJfbXNnOwogCQl3aGlsZSAobXNnID09IE5VTEwpIHsKIAkJCWNwdV9yZWxheCgpOwotCQkJbXNnID0gKHN0cnVjdCBtc2dfbXNnKikgbXNyX2Qucl9tc2c7CisJCQltc2cgPSAoc3RydWN0IG1zZ19tc2cgKiltc3JfZC5yX21zZzsKIAkJfQogCiAJCS8qIExvY2tsZXNzIHJlY2VpdmUsIHBhcnQgMzoKIAkJICogSWYgdGhlcmUgaXMgYSBtZXNzYWdlIG9yIGFuIGVycm9yIHRoZW4gYWNjZXB0IGl0IHdpdGhvdXQKIAkJICogbG9ja2luZy4KIAkJICovCi0JCWlmKG1zZyAhPSBFUlJfUFRSKC1FQUdBSU4pKSB7CisJCWlmIChtc2cgIT0gRVJSX1BUUigtRUFHQUlOKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzk4LDcgKzgxOCw3IEBACiAJCSAqIFJlcGVhdCB0ZXN0IGFmdGVyIGFjcXVpcmluZyB0aGUgc3BpbmxvY2suCiAJCSAqLwogCQltc2cgPSAoc3RydWN0IG1zZ19tc2cqKW1zcl9kLnJfbXNnOwotCQlpZihtc2cgIT0gRVJSX1BUUigtRUFHQUlOKSkKKwkJaWYgKG1zZyAhPSBFUlJfUFRSKC1FQUdBSU4pKQogCQkJZ290byBvdXRfdW5sb2NrOwogCiAJCWxpc3RfZGVsKCZtc3JfZC5yX2xpc3QpOwpAQCAtODEwLDE0ICs4MzAsMTUgQEAKIAkJfQogCX0KIAlpZiAoSVNfRVJSKG1zZykpCi0gICAgICAgCQlyZXR1cm4gUFRSX0VSUihtc2cpOworCQlyZXR1cm4gUFRSX0VSUihtc2cpOwogCiAJbXNnc3ogPSAobXNnc3ogPiBtc2ctPm1fdHMpID8gbXNnLT5tX3RzIDogbXNnc3o7CiAJaWYgKHB1dF91c2VyIChtc2ctPm1fdHlwZSwgJm1zZ3AtPm10eXBlKSB8fAogCSAgICBzdG9yZV9tc2cobXNncC0+bXRleHQsIG1zZywgbXNnc3opKSB7Ci0JCSAgICBtc2dzeiA9IC1FRkFVTFQ7CisJCW1zZ3N6ID0gLUVGQVVMVDsKIAl9CiAJZnJlZV9tc2cobXNnKTsKKwogCXJldHVybiBtc2dzejsKIH0KIApAQCAtODI3LDIwICs4NDgsMjAgQEAKIAlzdHJ1Y3QgbXNnX3F1ZXVlICptc3EgPSBpdDsKIAogCXJldHVybiBzZXFfcHJpbnRmKHMsCi0JCQkgICIlMTBkICUxMGQgICU0byAgJTEwbHUgJTEwbHUgJTV1ICU1dSAlNXUgJTV1ICU1dSAlNXUgJTEwbHUgJTEwbHUgJTEwbHVcbiIsCi0JCQkgIG1zcS0+cV9wZXJtLmtleSwKLQkJCSAgbXNxLT5xX2lkLAotCQkJICBtc3EtPnFfcGVybS5tb2RlLAotCQkJICBtc3EtPnFfY2J5dGVzLAotCQkJICBtc3EtPnFfcW51bSwKLQkJCSAgbXNxLT5xX2xzcGlkLAotCQkJICBtc3EtPnFfbHJwaWQsCi0JCQkgIG1zcS0+cV9wZXJtLnVpZCwKLQkJCSAgbXNxLT5xX3Blcm0uZ2lkLAotCQkJICBtc3EtPnFfcGVybS5jdWlkLAotCQkJICBtc3EtPnFfcGVybS5jZ2lkLAotCQkJICBtc3EtPnFfc3RpbWUsCi0JCQkgIG1zcS0+cV9ydGltZSwKLQkJCSAgbXNxLT5xX2N0aW1lKTsKKwkJCSIlMTBkICUxMGQgICU0byAgJTEwbHUgJTEwbHUgJTV1ICU1dSAlNXUgJTV1ICU1dSAlNXUgJTEwbHUgJTEwbHUgJTEwbHVcbiIsCisJCQltc3EtPnFfcGVybS5rZXksCisJCQltc3EtPnFfaWQsCisJCQltc3EtPnFfcGVybS5tb2RlLAorCQkJbXNxLT5xX2NieXRlcywKKwkJCW1zcS0+cV9xbnVtLAorCQkJbXNxLT5xX2xzcGlkLAorCQkJbXNxLT5xX2xycGlkLAorCQkJbXNxLT5xX3Blcm0udWlkLAorCQkJbXNxLT5xX3Blcm0uZ2lkLAorCQkJbXNxLT5xX3Blcm0uY3VpZCwKKwkJCW1zcS0+cV9wZXJtLmNnaWQsCisJCQltc3EtPnFfc3RpbWUsCisJCQltc3EtPnFfcnRpbWUsCisJCQltc3EtPnFfY3RpbWUpOwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXQuYyBiL2tlcm5lbC9hdWRpdC5jCmluZGV4IGQ0MTdjYTEuLjk2M2ZkMTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9hdWRpdC5jCisrKyBiL2tlcm5lbC9hdWRpdC5jCkBAIC02OTAsOSArNjkwLDcgQEAKIC8qIEluaXRpYWxpemUgYXVkaXQgc3VwcG9ydCBhdCBib290IHRpbWUuICovCiBzdGF0aWMgaW50IF9faW5pdCBhdWRpdF9pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAogCWludCBpOwotI2VuZGlmCiAKIAlwcmludGsoS0VSTl9JTkZPICJhdWRpdDogaW5pdGlhbGl6aW5nIG5ldGxpbmsgc29ja2V0ICglcylcbiIsCiAJICAgICAgIGF1ZGl0X2RlZmF1bHQgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKTsKQEAgLTcxNywxMCArNzE1LDEwIEBACiAJYXVkaXRfaWggPSBpbm90aWZ5X2luaXQoJmF1ZGl0X2lub3RpZnlfb3BzKTsKIAlpZiAoSVNfRVJSKGF1ZGl0X2loKSkKIAkJYXVkaXRfcGFuaWMoImNhbm5vdCBpbml0aWFsaXplIGlub3RpZnkgaGFuZGxlIik7CisjZW5kaWYKIAogCWZvciAoaSA9IDA7IGkgPCBBVURJVF9JTk9ERV9CVUNLRVRTOyBpKyspCiAJCUlOSVRfTElTVF9IRUFEKCZhdWRpdF9pbm9kZV9oYXNoW2ldKTsKLSNlbmRpZgogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDMwLDYgKzEwMjgsOSBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmhleCA9ICIwMTIzNDU2Nzg5QUJDREVGIjsKIAorCWlmICghYWIpCisJCXJldHVybjsKKwogCUJVR19PTighYWItPnNrYik7CiAJc2tiID0gYWItPnNrYjsKIAlhdmFpbCA9IHNrYl90YWlscm9vbShza2IpOwpAQCAtMTA2Miw2ICsxMDYzLDkgQEAKIAl1bnNpZ25lZCBjaGFyICpwdHI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAorCWlmICghYWIpCisJCXJldHVybjsKKwogCUJVR19PTighYWItPnNrYik7CiAJc2tiID0gYWItPnNrYjsKIAlhdmFpbCA9IHNrYl90YWlscm9vbShza2IpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmggYi9rZXJuZWwvYXVkaXQuaAppbmRleCA2YWEzM2I4Li5hMzM3MDIzIDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuaAorKysgYi9rZXJuZWwvYXVkaXQuaApAQCAtMTA0LDYgKzEwNCw3IEBACiAJcmV0dXJuIChpbm8gJiAoQVVESVRfSU5PREVfQlVDS0VUUy0xKSk7CiB9CiAKK2V4dGVybiBpbnQgYXVkaXRfbWF0Y2hfY2xhc3MoaW50IGNsYXNzLCB1bnNpZ25lZCBzeXNjYWxsKTsKIGV4dGVybiBpbnQgYXVkaXRfY29tcGFyYXRvcihjb25zdCB1MzIgbGVmdCwgY29uc3QgdTMyIG9wLCBjb25zdCB1MzIgcmlnaHQpOwogZXh0ZXJuIGludCBhdWRpdF9jb21wYXJlX2RuYW1lX3BhdGgoY29uc3QgY2hhciAqZG5hbWUsIGNvbnN0IGNoYXIgKnBhdGgsCiAJCQkJICAgIGludCAqZGlybGVuKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9hdWRpdGZpbHRlci5jIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKaW5kZXggNWI0ZTE2Mi4uYTQ0ODc5YiAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0ZmlsdGVyLmMKKysrIGIva2VybmVsL2F1ZGl0ZmlsdGVyLmMKQEAgLTMwMiw2ICszMDIsMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IGF1ZGl0X21hdGNoX2NsYXNzKGludCBjbGFzcywgdW5zaWduZWQgc3lzY2FsbCkKK3sKKwlpZiAodW5saWtlbHkoc3lzY2FsbCA+PSBBVURJVF9CSVRNQVNLX1NJWkUgKiBzaXplb2YoX191MzIpKSkKKwkJcmV0dXJuIDA7CisJaWYgKHVubGlrZWx5KGNsYXNzID49IEFVRElUX1NZU0NBTExfQ0xBU1NFUyB8fCAhY2xhc3Nlc1tjbGFzc10pKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gY2xhc3Nlc1tjbGFzc11bQVVESVRfV09SRChzeXNjYWxsKV0gJiBBVURJVF9CSVQoc3lzY2FsbCk7Cit9CisKIC8qIENvbW1vbiB1c2VyLXNwYWNlIHRvIGtlcm5lbCBydWxlIHRyYW5zbGF0aW9uLiAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgYXVkaXRfZW50cnkgKmF1ZGl0X3RvX2VudHJ5X2NvbW1vbihzdHJ1Y3QgYXVkaXRfcnVsZSAqcnVsZSkKIHsKQEAgLTQwNCw2ICs0MTMsNyBAQAogCQljYXNlIEFVRElUX1BFUlM6CiAJCWNhc2UgQVVESVRfQVJDSDoKIAkJY2FzZSBBVURJVF9NU0dUWVBFOgorCQljYXNlIEFVRElUX1BQSUQ6CiAJCWNhc2UgQVVESVRfREVWTUFKT1I6CiAJCWNhc2UgQVVESVRfREVWTUlOT1I6CiAJCWNhc2UgQVVESVRfRVhJVDoKQEAgLTQxMyw2ICs0MjMsMTAgQEAKIAkJY2FzZSBBVURJVF9BUkcyOgogCQljYXNlIEFVRElUX0FSRzM6CiAJCQlicmVhazsKKwkJY2FzZSBBVURJVF9QRVJNOgorCQkJaWYgKGYtPnZhbCAmIH4xNSkKKwkJCQlnb3RvIGV4aXRfZnJlZTsKKwkJCWJyZWFrOwogCQljYXNlIEFVRElUX0lOT0RFOgogCQkJZXJyID0gYXVkaXRfdG9faW5vZGUoJmVudHJ5LT5ydWxlLCBmKTsKIAkJCWlmIChlcnIpCkBAIC00NDIsNiArNDU2LDcgQEAKIAkJY2FzZSBBVURJVF9FUVVBTDoKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgorCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gZXhpdF9mcmVlOwogCQl9CiAJfQpAQCAtNTY2LDYgKzU4MSwxMCBAQAogCQkJZW50cnktPnJ1bGUuYnVmbGVuICs9IGYtPnZhbDsKIAkJCWVudHJ5LT5ydWxlLmZpbHRlcmtleSA9IHN0cjsKIAkJCWJyZWFrOworCQljYXNlIEFVRElUX1BFUk06CisJCQlpZiAoZi0+dmFsICYgfjE1KQorCQkJCWdvdG8gZXhpdF9mcmVlOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQpAQCAtNTc5LDYgKzU5OCw3IEBACiAJCWNhc2UgQVVESVRfRVFVQUw6CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKKwkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGV4aXRfZnJlZTsKIAkJfQogCX0KQEAgLTkxMSw3ICs5MzEsNyBAQAogCQl9CiAKIAkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSk7Ci0JCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhdWRpdCB1cGRhdGVkIHJ1bGVzIHNwZWNpZnlpbmcgd2F0Y2g9Iik7CisJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICJhdWRpdCB1cGRhdGVkIHJ1bGVzIHNwZWNpZnlpbmcgcGF0aD0iKTsKIAkJYXVkaXRfbG9nX3VudHJ1c3RlZHN0cmluZyhhYiwgb3dhdGNoLT5wYXRoKTsKIAkJYXVkaXRfbG9nX2Zvcm1hdChhYiwgIiB3aXRoIGRldj0ldSBpbm89JWx1XG4iLCBkZXYsIGlubyk7CiAJCWF1ZGl0X2xvZ19lbmQoYWIpOwpAQCAtOTM0LDE5ICs5NTQsMjggQEAKIAlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKncsICpuZXh0dzsKIAlzdHJ1Y3QgYXVkaXRfa3J1bGUgKnIsICpuZXh0cjsKIAlzdHJ1Y3QgYXVkaXRfZW50cnkgKmU7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYWI7CiAKIAltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCXBhcmVudC0+ZmxhZ3MgfD0gQVVESVRfUEFSRU5UX0lOVkFMSUQ7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHcsIG5leHR3LCAmcGFyZW50LT53YXRjaGVzLCB3bGlzdCkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUociwgbmV4dHIsICZ3LT5ydWxlcywgcmxpc3QpIHsKIAkJCWUgPSBjb250YWluZXJfb2Yociwgc3RydWN0IGF1ZGl0X2VudHJ5LCBydWxlKTsKKworCQkJYWIgPSBhdWRpdF9sb2dfc3RhcnQoTlVMTCwgR0ZQX0tFUk5FTCwgQVVESVRfQ09ORklHX0NIQU5HRSk7CisJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiYXVkaXQgaW1wbGljaXRseSByZW1vdmVkIHJ1bGUgcGF0aD0iKTsKKwkJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHctPnBhdGgpOworCQkJaWYgKHItPmZpbHRlcmtleSkgeworCQkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIga2V5PSIpOworCQkJCWF1ZGl0X2xvZ191bnRydXN0ZWRzdHJpbmcoYWIsIHItPmZpbHRlcmtleSk7CisJCQl9IGVsc2UKKwkJCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIGtleT0obnVsbCkiKTsKKwkJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIgbGlzdD0lZCIsIHItPmxpc3Rucik7CisJCQlhdWRpdF9sb2dfZW5kKGFiKTsKKwogCQkJbGlzdF9kZWwoJnItPnJsaXN0KTsKIAkJCWxpc3RfZGVsX3JjdSgmZS0+bGlzdCk7CiAJCQljYWxsX3JjdSgmZS0+cmN1LCBhdWRpdF9mcmVlX3J1bGVfcmN1KTsKLQotCQkJYXVkaXRfbG9nKE5VTEwsIEdGUF9LRVJORUwsIEFVRElUX0NPTkZJR19DSEFOR0UsCi0JCQkJICJhdWRpdCBpbXBsaWNpdGx5IHJlbW92ZWQgcnVsZSBmcm9tIGxpc3Q9JWRcbiIsCi0JCQkJICBBVURJVF9GSUxURVJfRVhJVCk7CiAJCX0KIAkJYXVkaXRfcmVtb3ZlX3dhdGNoKHcpOwogCX0KQEAgLTExMzQsNiArMTE2MywxNCBAQAogCXN0cnVjdCBhdWRpdF93YXRjaCAqd2F0Y2ggPSBlbnRyeS0+cnVsZS53YXRjaDsKIAlzdHJ1Y3QgbmFtZWlkYXRhICpuZHAsICpuZHc7CiAJaW50IGgsIGVyciwgcHV0bmRfbmVlZGVkID0gMDsKKyNpZmRlZiBDT05GSUdfQVVESVRTWVNDQUxMCisJaW50IGRvbnRfY291bnQgPSAwOworCisJLyogSWYgZWl0aGVyIG9mIHRoZXNlLCBkb24ndCBjb3VudCB0b3dhcmRzIHRvdGFsICovCisJaWYgKGVudHJ5LT5ydWxlLmxpc3RuciA9PSBBVURJVF9GSUxURVJfVVNFUiB8fAorCQllbnRyeS0+cnVsZS5saXN0bnIgPT0gQVVESVRfRklMVEVSX1RZUEUpCisJCWRvbnRfY291bnQgPSAxOworI2VuZGlmCiAKIAlpZiAoaW5vZGVfZikgewogCQloID0gYXVkaXRfaGFzaF9pbm8oaW5vZGVfZi0+dmFsKTsKQEAgLTExNzQsNiArMTIxMSwxMCBAQAogCX0gZWxzZSB7CiAJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgbGlzdCk7CiAJfQorI2lmZGVmIENPTkZJR19BVURJVFNZU0NBTEwKKwlpZiAoIWRvbnRfY291bnQpCisJCWF1ZGl0X25fcnVsZXMrKzsKKyNlbmRpZgogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIAogCWlmIChwdXRuZF9uZWVkZWQpCkBAIC0xMTk4LDYgKzEyMzksMTQgQEAKIAlzdHJ1Y3QgYXVkaXRfd2F0Y2ggKndhdGNoLCAqdG1wX3dhdGNoID0gZW50cnktPnJ1bGUud2F0Y2g7CiAJTElTVF9IRUFEKGlub3RpZnlfbGlzdCk7CiAJaW50IGgsIHJldCA9IDA7CisjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAorCWludCBkb250X2NvdW50ID0gMDsKKworCS8qIElmIGVpdGhlciBvZiB0aGVzZSwgZG9uJ3QgY291bnQgdG93YXJkcyB0b3RhbCAqLworCWlmIChlbnRyeS0+cnVsZS5saXN0bnIgPT0gQVVESVRfRklMVEVSX1VTRVIgfHwKKwkJZW50cnktPnJ1bGUubGlzdG5yID09IEFVRElUX0ZJTFRFUl9UWVBFKQorCQlkb250X2NvdW50ID0gMTsKKyNlbmRpZgogCiAJaWYgKGlub2RlX2YpIHsKIAkJaCA9IGF1ZGl0X2hhc2hfaW5vKGlub2RlX2YtPnZhbCk7CkBAIC0xMjM1LDYgKzEyODQsMTAgQEAKIAlsaXN0X2RlbF9yY3UoJmUtPmxpc3QpOwogCWNhbGxfcmN1KCZlLT5yY3UsIGF1ZGl0X2ZyZWVfcnVsZV9yY3UpOwogCisjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAorCWlmICghZG9udF9jb3VudCkKKwkJYXVkaXRfbl9ydWxlcy0tOworI2VuZGlmCiAJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCiAJaWYgKCFsaXN0X2VtcHR5KCZpbm90aWZ5X2xpc3QpKQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggYWU0MGFjOC4uMWJkODgyNyAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC04NSw2ICs4NSw5IEBACiAvKiBJbmRpY2F0ZXMgdGhhdCBhdWRpdCBzaG91bGQgbG9nIHRoZSBmdWxsIHBhdGhuYW1lLiAqLwogI2RlZmluZSBBVURJVF9OQU1FX0ZVTEwgLTEKIAorLyogbnVtYmVyIG9mIGF1ZGl0IHJ1bGVzICovCitpbnQgYXVkaXRfbl9ydWxlczsKKwogLyogV2hlbiBmcy9uYW1laS5jOmdldG5hbWUoKSBpcyBjYWxsZWQsIHdlIHN0b3JlIHRoZSBwb2ludGVyIGluIG5hbWUgYW5kCiAgKiB3ZSBkb24ndCBsZXQgcHV0bmFtZSgpIGZyZWUgaXQgKGluc3RlYWQgd2UgZnJlZSBhbGwgb2YgdGhlIHNhdmVkCiAgKiBwb2ludGVycyBhdCBzeXNjYWxsIGV4aXQgdGltZSkuCkBAIC0xNzQsNiArMTc3LDcgQEAKIAogLyogVGhlIHBlci10YXNrIGF1ZGl0IGNvbnRleHQuICovCiBzdHJ1Y3QgYXVkaXRfY29udGV4dCB7CisJaW50CQkgICAgZHVtbXk7CS8qIG11c3QgYmUgdGhlIGZpcnN0IGVsZW1lbnQgKi8KIAlpbnQJCSAgICBpbl9zeXNjYWxsOwkvKiAxIGlmIHRhc2sgaXMgaW4gYSBzeXNjYWxsICovCiAJZW51bSBhdWRpdF9zdGF0ZSAgICBzdGF0ZTsKIAl1bnNpZ25lZCBpbnQJICAgIHNlcmlhbDsgICAgIC8qIHNlcmlhbCBudW1iZXIgZm9yIHJlY29yZCAqLwpAQCAtMjA1LDYgKzIwOSw1NCBAQAogI2VuZGlmCiB9OwogCisjZGVmaW5lIEFDQ19NT0RFKHgpICgiXDAwNFwwMDJcMDA2XDAwNiJbKHgpJk9fQUNDTU9ERV0pCitzdGF0aWMgaW5saW5lIGludCBvcGVuX2FyZyhpbnQgZmxhZ3MsIGludCBtYXNrKQoreworCWludCBuID0gQUNDX01PREUoZmxhZ3MpOworCWlmIChmbGFncyAmIChPX1RSVU5DIHwgT19DUkVBVCkpCisJCW4gfD0gQVVESVRfUEVSTV9XUklURTsKKwlyZXR1cm4gbiAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbnQgYXVkaXRfbWF0Y2hfcGVybShzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY3R4LCBpbnQgbWFzaykKK3sKKwl1bnNpZ25lZCBuID0gY3R4LT5tYWpvcjsKKwlzd2l0Y2ggKGF1ZGl0X2NsYXNzaWZ5X3N5c2NhbGwoY3R4LT5hcmNoLCBuKSkgeworCWNhc2UgMDoJLyogbmF0aXZlICovCisJCWlmICgobWFzayAmIEFVRElUX1BFUk1fV1JJVEUpICYmCisJCSAgICAgYXVkaXRfbWF0Y2hfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEUsIG4pKQorCQkJcmV0dXJuIDE7CisJCWlmICgobWFzayAmIEFVRElUX1BFUk1fUkVBRCkgJiYKKwkJICAgICBhdWRpdF9tYXRjaF9jbGFzcyhBVURJVF9DTEFTU19SRUFELCBuKSkKKwkJCXJldHVybiAxOworCQlpZiAoKG1hc2sgJiBBVURJVF9QRVJNX0FUVFIpICYmCisJCSAgICAgYXVkaXRfbWF0Y2hfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBuKSkKKwkJCXJldHVybiAxOworCQlyZXR1cm4gMDsKKwljYXNlIDE6IC8qIDMyYml0IG9uIGJpYXJjaCAqLworCQlpZiAoKG1hc2sgJiBBVURJVF9QRVJNX1dSSVRFKSAmJgorCQkgICAgIGF1ZGl0X21hdGNoX2NsYXNzKEFVRElUX0NMQVNTX1dSSVRFXzMyLCBuKSkKKwkJCXJldHVybiAxOworCQlpZiAoKG1hc2sgJiBBVURJVF9QRVJNX1JFQUQpICYmCisJCSAgICAgYXVkaXRfbWF0Y2hfY2xhc3MoQVVESVRfQ0xBU1NfUkVBRF8zMiwgbikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKChtYXNrICYgQVVESVRfUEVSTV9BVFRSKSAmJgorCQkgICAgIGF1ZGl0X21hdGNoX2NsYXNzKEFVRElUX0NMQVNTX0NIQVRUUl8zMiwgbikpCisJCQlyZXR1cm4gMTsKKwkJcmV0dXJuIDA7CisJY2FzZSAyOiAvKiBvcGVuICovCisJCXJldHVybiBtYXNrICYgQUNDX01PREUoY3R4LT5hcmd2WzFdKTsKKwljYXNlIDM6IC8qIG9wZW5hdCAqLworCQlyZXR1cm4gbWFzayAmIEFDQ19NT0RFKGN0eC0+YXJndlsyXSk7CisJY2FzZSA0OiAvKiBzb2NrZXRjYWxsICovCisJCXJldHVybiAoKG1hc2sgJiBBVURJVF9QRVJNX1dSSVRFKSAmJiBjdHgtPmFyZ3ZbMF0gPT0gU1lTX0JJTkQpOworCWNhc2UgNTogLyogZXhlY3ZlICovCisJCXJldHVybiBtYXNrICYgQVVESVRfUEVSTV9FWEVDOworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogLyogRGV0ZXJtaW5lIGlmIGFueSBjb250ZXh0IG5hbWUgZGF0YSBtYXRjaGVzIGEgcnVsZSdzIHdhdGNoIGRhdGEgKi8KIC8qIENvbXBhcmUgYSB0YXNrX3N0cnVjdCB3aXRoIGFuIGF1ZGl0X3J1bGUuICBSZXR1cm4gMSBvbiBtYXRjaCwgMAogICogb3RoZXJ3aXNlLiAqLwpAQCAtMzkzLDYgKzQ0NSw5IEBACiAJCQkvKiBpZ25vcmUgdGhpcyBmaWVsZCBmb3IgZmlsdGVyaW5nICovCiAJCQlyZXN1bHQgPSAxOwogCQkJYnJlYWs7CisJCWNhc2UgQVVESVRfUEVSTToKKwkJCXJlc3VsdCA9IGF1ZGl0X21hdGNoX3Blcm0oY3R4LCBmLT52YWwpOworCQkJYnJlYWs7CiAJCX0KIAogCQlpZiAoIXJlc3VsdCkKQEAgLTUxNCw3ICs1NjksNyBAQAogCWNvbnRleHQtPnJldHVybl92YWxpZCA9IHJldHVybl92YWxpZDsKIAljb250ZXh0LT5yZXR1cm5fY29kZSAgPSByZXR1cm5fY29kZTsKIAotCWlmIChjb250ZXh0LT5pbl9zeXNjYWxsICYmICFjb250ZXh0LT5hdWRpdGFibGUpIHsKKwlpZiAoY29udGV4dC0+aW5fc3lzY2FsbCAmJiAhY29udGV4dC0+ZHVtbXkgJiYgIWNvbnRleHQtPmF1ZGl0YWJsZSkgewogCQllbnVtIGF1ZGl0X3N0YXRlIHN0YXRlOwogCiAJCXN0YXRlID0gYXVkaXRfZmlsdGVyX3N5c2NhbGwodHNrLCBjb250ZXh0LCAmYXVkaXRfZmlsdGVyX2xpc3RbQVVESVRfRklMVEVSX0VYSVRdKTsKQEAgLTUzMCwxNyArNTg1LDcgQEAKIAl9CiAKIGdldF9jb250ZXh0OgotCWNvbnRleHQtPnBpZCA9IHRzay0+cGlkOwotCWNvbnRleHQtPnBwaWQgPSBzeXNfZ2V0cHBpZCgpOwkvKiBzaWMuICB0c2sgPT0gY3VycmVudCBpbiBhbGwgY2FzZXMgKi8KLQljb250ZXh0LT51aWQgPSB0c2stPnVpZDsKLQljb250ZXh0LT5naWQgPSB0c2stPmdpZDsKLQljb250ZXh0LT5ldWlkID0gdHNrLT5ldWlkOwotCWNvbnRleHQtPnN1aWQgPSB0c2stPnN1aWQ7Ci0JY29udGV4dC0+ZnN1aWQgPSB0c2stPmZzdWlkOwotCWNvbnRleHQtPmVnaWQgPSB0c2stPmVnaWQ7Ci0JY29udGV4dC0+c2dpZCA9IHRzay0+c2dpZDsKLQljb250ZXh0LT5mc2dpZCA9IHRzay0+ZnNnaWQ7Ci0JY29udGV4dC0+cGVyc29uYWxpdHkgPSB0c2stPnBlcnNvbmFsaXR5OworCiAJdHNrLT5hdWRpdF9jb250ZXh0ID0gTlVMTDsKIAlyZXR1cm4gY29udGV4dDsKIH0KQEAgLTc0OSw2ICs3OTQsMTcgQEAKIAljb25zdCBjaGFyICp0dHk7CiAKIAkvKiB0c2sgPT0gY3VycmVudCAqLworCWNvbnRleHQtPnBpZCA9IHRzay0+cGlkOworCWNvbnRleHQtPnBwaWQgPSBzeXNfZ2V0cHBpZCgpOwkvKiBzaWMuICB0c2sgPT0gY3VycmVudCBpbiBhbGwgY2FzZXMgKi8KKwljb250ZXh0LT51aWQgPSB0c2stPnVpZDsKKwljb250ZXh0LT5naWQgPSB0c2stPmdpZDsKKwljb250ZXh0LT5ldWlkID0gdHNrLT5ldWlkOworCWNvbnRleHQtPnN1aWQgPSB0c2stPnN1aWQ7CisJY29udGV4dC0+ZnN1aWQgPSB0c2stPmZzdWlkOworCWNvbnRleHQtPmVnaWQgPSB0c2stPmVnaWQ7CisJY29udGV4dC0+c2dpZCA9IHRzay0+c2dpZDsKKwljb250ZXh0LT5mc2dpZCA9IHRzay0+ZnNnaWQ7CisJY29udGV4dC0+cGVyc29uYWxpdHkgPSB0c2stPnBlcnNvbmFsaXR5OwogCiAJYWIgPSBhdWRpdF9sb2dfc3RhcnQoY29udGV4dCwgR0ZQX0tFUk5FTCwgQVVESVRfU1lTQ0FMTCk7CiAJaWYgKCFhYikKQEAgLTEwNjYsNyArMTEyMiw4IEBACiAJY29udGV4dC0+YXJndlszXSAgICA9IGE0OwogCiAJc3RhdGUgPSBjb250ZXh0LT5zdGF0ZTsKLQlpZiAoc3RhdGUgPT0gQVVESVRfU0VUVVBfQ09OVEVYVCB8fCBzdGF0ZSA9PSBBVURJVF9CVUlMRF9DT05URVhUKQorCWNvbnRleHQtPmR1bW15ID0gIWF1ZGl0X25fcnVsZXM7CisJaWYgKCFjb250ZXh0LT5kdW1teSAmJiAoc3RhdGUgPT0gQVVESVRfU0VUVVBfQ09OVEVYVCB8fCBzdGF0ZSA9PSBBVURJVF9CVUlMRF9DT05URVhUKSkKIAkJc3RhdGUgPSBhdWRpdF9maWx0ZXJfc3lzY2FsbCh0c2ssIGNvbnRleHQsICZhdWRpdF9maWx0ZXJfbGlzdFtBVURJVF9GSUxURVJfRU5UUlldKTsKIAlpZiAobGlrZWx5KHN0YXRlID09IEFVRElUX0RJU0FCTEVEKSkKIAkJcmV0dXJuOwpAQCAtMTE5OSwxNCArMTI1NiwxOCBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIGF1ZGl0X2lub2RlX2NvbnRleHQoaW50IGlkeCwgY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKKy8qIENvcHkgaW5vZGUgZGF0YSBpbnRvIGFuIGF1ZGl0X25hbWVzLiAqLworc3RhdGljIHZvaWQgYXVkaXRfY29weV9pbm9kZShzdHJ1Y3QgYXVkaXRfbmFtZXMgKm5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Jc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwotCi0Jc2VsaW51eF9nZXRfaW5vZGVfc2lkKGlub2RlLCAmY29udGV4dC0+bmFtZXNbaWR4XS5vc2lkKTsKKwluYW1lLT5pbm8gICA9IGlub2RlLT5pX2lubzsKKwluYW1lLT5kZXYgICA9IGlub2RlLT5pX3NiLT5zX2RldjsKKwluYW1lLT5tb2RlICA9IGlub2RlLT5pX21vZGU7CisJbmFtZS0+dWlkICAgPSBpbm9kZS0+aV91aWQ7CisJbmFtZS0+Z2lkICAgPSBpbm9kZS0+aV9naWQ7CisJbmFtZS0+cmRldiAgPSBpbm9kZS0+aV9yZGV2OworCXNlbGludXhfZ2V0X2lub2RlX3NpZChpbm9kZSwgJm5hbWUtPm9zaWQpOwogfQogCi0KIC8qKgogICogYXVkaXRfaW5vZGUgLSBzdG9yZSB0aGUgaW5vZGUgYW5kIGRldmljZSBmcm9tIGEgbG9va3VwCiAgKiBAbmFtZTogbmFtZSBiZWluZyBhdWRpdGVkCkBAIC0xMjQwLDIwICsxMzAxLDE0IEBACiAJCSsrY29udGV4dC0+aW5vX2NvdW50OwogI2VuZGlmCiAJfQotCWNvbnRleHQtPm5hbWVzW2lkeF0uaW5vICAgPSBpbm9kZS0+aV9pbm87Ci0JY29udGV4dC0+bmFtZXNbaWR4XS5kZXYJICA9IGlub2RlLT5pX3NiLT5zX2RldjsKLQljb250ZXh0LT5uYW1lc1tpZHhdLm1vZGUgID0gaW5vZGUtPmlfbW9kZTsKLQljb250ZXh0LT5uYW1lc1tpZHhdLnVpZCAgID0gaW5vZGUtPmlfdWlkOwotCWNvbnRleHQtPm5hbWVzW2lkeF0uZ2lkICAgPSBpbm9kZS0+aV9naWQ7Ci0JY29udGV4dC0+bmFtZXNbaWR4XS5yZGV2ICA9IGlub2RlLT5pX3JkZXY7Ci0JYXVkaXRfaW5vZGVfY29udGV4dChpZHgsIGlub2RlKTsKKwlhdWRpdF9jb3B5X2lub2RlKCZjb250ZXh0LT5uYW1lc1tpZHhdLCBpbm9kZSk7CiB9CiAKIC8qKgogICogYXVkaXRfaW5vZGVfY2hpbGQgLSBjb2xsZWN0IGlub2RlIGluZm8gZm9yIGNyZWF0ZWQvcmVtb3ZlZCBvYmplY3RzCiAgKiBAZG5hbWU6IGlub2RlJ3MgZGVudHJ5IG5hbWUKICAqIEBpbm9kZTogaW5vZGUgYmVpbmcgYXVkaXRlZAotICogQHBpbm86IGlub2RlIG51bWJlciBvZiBkZW50cnkgcGFyZW50CisgKiBAcGFyZW50OiBpbm9kZSBvZiBkZW50cnkgcGFyZW50CiAgKgogICogRm9yIHN5c2NhbGxzIHRoYXQgY3JlYXRlIG9yIHJlbW92ZSBmaWxlc3lzdGVtIG9iamVjdHMsIGF1ZGl0X2lub2RlCiAgKiBjYW4gb25seSBjb2xsZWN0IGluZm9ybWF0aW9uIGZvciB0aGUgZmlsZXN5c3RlbSBvYmplY3QncyBwYXJlbnQuCkBAIC0xMjY0LDcgKzEzMTksNyBAQAogICogdW5zdWNjZXNzZnVsIGF0dGVtcHRzLgogICovCiB2b2lkIF9fYXVkaXRfaW5vZGVfY2hpbGQoY29uc3QgY2hhciAqZG5hbWUsIGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgdW5zaWduZWQgbG9uZyBwaW5vKQorCQkJIGNvbnN0IHN0cnVjdCBpbm9kZSAqcGFyZW50KQogewogCWludCBpZHg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwpAQCAtMTI3OCw3ICsxMzMzLDcgQEAKIAlpZiAoIWRuYW1lKQogCQlnb3RvIHVwZGF0ZV9jb250ZXh0OwogCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udGV4dC0+bmFtZV9jb3VudDsgaWR4KyspCi0JCWlmIChjb250ZXh0LT5uYW1lc1tpZHhdLmlubyA9PSBwaW5vKSB7CisJCWlmIChjb250ZXh0LT5uYW1lc1tpZHhdLmlubyA9PSBwYXJlbnQtPmlfaW5vKSB7CiAJCQljb25zdCBjaGFyICpuYW1lID0gY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lOwogCiAJCQlpZiAoIW5hbWUpCkBAIC0xMzAyLDE2ICsxMzU3LDQ3IEBACiAJY29udGV4dC0+bmFtZXNbaWR4XS5uYW1lX2xlbiA9IEFVRElUX05BTUVfRlVMTDsKIAljb250ZXh0LT5uYW1lc1tpZHhdLm5hbWVfcHV0ID0gMDsJLyogZG9uJ3QgY2FsbCBfX3B1dG5hbWUoKSAqLwogCi0JaWYgKGlub2RlKSB7Ci0JCWNvbnRleHQtPm5hbWVzW2lkeF0uaW5vICAgPSBpbm9kZS0+aV9pbm87Ci0JCWNvbnRleHQtPm5hbWVzW2lkeF0uZGV2CSAgPSBpbm9kZS0+aV9zYi0+c19kZXY7Ci0JCWNvbnRleHQtPm5hbWVzW2lkeF0ubW9kZSAgPSBpbm9kZS0+aV9tb2RlOwotCQljb250ZXh0LT5uYW1lc1tpZHhdLnVpZCAgID0gaW5vZGUtPmlfdWlkOwotCQljb250ZXh0LT5uYW1lc1tpZHhdLmdpZCAgID0gaW5vZGUtPmlfZ2lkOwotCQljb250ZXh0LT5uYW1lc1tpZHhdLnJkZXYgID0gaW5vZGUtPmlfcmRldjsKLQkJYXVkaXRfaW5vZGVfY29udGV4dChpZHgsIGlub2RlKTsKLQl9IGVsc2UKLQkJY29udGV4dC0+bmFtZXNbaWR4XS5pbm8gICA9ICh1bnNpZ25lZCBsb25nKS0xOworCWlmICghaW5vZGUpCisJCWNvbnRleHQtPm5hbWVzW2lkeF0uaW5vID0gKHVuc2lnbmVkIGxvbmcpLTE7CisJZWxzZQorCQlhdWRpdF9jb3B5X2lub2RlKCZjb250ZXh0LT5uYW1lc1tpZHhdLCBpbm9kZSk7CisKKwkvKiBBIHBhcmVudCB3YXMgbm90IGZvdW5kIGluIGF1ZGl0X25hbWVzLCBzbyBjb3B5IHRoZSBpbm9kZSBkYXRhIGZvciB0aGUKKwkgKiBwcm92aWRlZCBwYXJlbnQuICovCisJaWYgKCFmb3VuZF9uYW1lKSB7CisJCWlkeCA9IGNvbnRleHQtPm5hbWVfY291bnQrKzsKKyNpZiBBVURJVF9ERUJVRworCQljb250ZXh0LT5pbm9fY291bnQrKzsKKyNlbmRpZgorCQlhdWRpdF9jb3B5X2lub2RlKCZjb250ZXh0LT5uYW1lc1tpZHhdLCBwYXJlbnQpOworCX0KK30KKworLyoqCisgKiBhdWRpdF9pbm9kZV91cGRhdGUgLSB1cGRhdGUgaW5vZGUgaW5mbyBmb3IgbGFzdCBjb2xsZWN0ZWQgbmFtZQorICogQGlub2RlOiBpbm9kZSBiZWluZyBhdWRpdGVkCisgKgorICogV2hlbiBvcGVuKCkgaXMgY2FsbGVkIG9uIGFuIGV4aXN0aW5nIG9iamVjdCB3aXRoIHRoZSBPX0NSRUFUIGZsYWcsIHRoZSBpbm9kZQorICogZGF0YSBhdWRpdCBpbml0aWFsbHkgY29sbGVjdHMgaXMgaW5jb3JyZWN0LiAgVGhpcyBhZGRpdGlvbmFsIGhvb2sgZW5zdXJlcworICogYXVkaXQgaGFzIHRoZSBpbm9kZSBkYXRhIGZvciB0aGUgYWN0dWFsIG9iamVjdCB0byBiZSBvcGVuZWQuCisgKi8KK3ZvaWQgX19hdWRpdF9pbm9kZV91cGRhdGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisJaW50IGlkeDsKKworCWlmICghY29udGV4dC0+aW5fc3lzY2FsbCB8fCAhaW5vZGUpCisJCXJldHVybjsKKworCWlmIChjb250ZXh0LT5uYW1lX2NvdW50ID09IDApIHsKKwkJY29udGV4dC0+bmFtZV9jb3VudCsrOworI2lmIEFVRElUX0RFQlVHCisJCWNvbnRleHQtPmlub19jb3VudCsrOworI2VuZGlmCisJfQorCWlkeCA9IGNvbnRleHQtPm5hbWVfY291bnQgLSAxOworCisJYXVkaXRfY29weV9pbm9kZSgmY29udGV4dC0+bmFtZXNbaWR4XSwgaW5vZGUpOwogfQogCiAvKioKQEAgLTE2NDIsNyArMTcyOCw3IEBACiAJdW5zaWduZWQgbG9uZyBwLCBuZXh0OwogCXZvaWQgKnRvOwogCi0JaWYgKGxpa2VseSghYXVkaXRfZW5hYmxlZCB8fCAhY29udGV4dCkpCisJaWYgKGxpa2VseSghYXVkaXRfZW5hYmxlZCB8fCAhY29udGV4dCB8fCBjb250ZXh0LT5kdW1teSkpCiAJCXJldHVybiAwOwogCiAJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpICsgUEFHRV9TSVpFICogTUFYX0FSR19QQUdFUyAtIGJwcm0tPnAsCkBAIC0xNjgwLDcgKzE3NjYsNyBAQAogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9zb2NrZXRjYWxsICpheDsKIAlzdHJ1Y3QgYXVkaXRfY29udGV4dCAqY29udGV4dCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CiAKLQlpZiAobGlrZWx5KCFjb250ZXh0KSkKKwlpZiAobGlrZWx5KCFjb250ZXh0IHx8IGNvbnRleHQtPmR1bW15KSkKIAkJcmV0dXJuIDA7CiAKIAlheCA9IGttYWxsb2Moc2l6ZW9mKCpheCkgKyBuYXJncyAqIHNpemVvZih1bnNpZ25lZCBsb25nKSwgR0ZQX0tFUk5FTCk7CkBAIC0xNzA4LDcgKzE3OTQsNyBAQAogCXN0cnVjdCBhdWRpdF9hdXhfZGF0YV9zb2NrYWRkciAqYXg7CiAJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmNvbnRleHQgPSBjdXJyZW50LT5hdWRpdF9jb250ZXh0OwogCi0JaWYgKGxpa2VseSghY29udGV4dCkpCisJaWYgKGxpa2VseSghY29udGV4dCB8fCBjb250ZXh0LT5kdW1teSkpCiAJCXJldHVybiAwOwogCiAJYXggPSBrbWFsbG9jKHNpemVvZigqYXgpICsgbGVuLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jcHVzZXQuYyBiL2tlcm5lbC9jcHVzZXQuYwppbmRleCAxYTY0OWYyLi40ZWE2ZjBkIDEwMDY0NAotLS0gYS9rZXJuZWwvY3B1c2V0LmMKKysrIGIva2VybmVsL2NwdXNldC5jCkBAIC04MTYsNiArODE2LDEwIEBACiAJc3RydWN0IGNwdXNldCB0cmlhbGNzOwogCWludCByZXR2YWwsIGNwdXNfdW5jaGFuZ2VkOwogCisJLyogdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgdHJhY2tzIGNwdV9vbmxpbmVfbWFwOyBpdCdzIHJlYWQtb25seSAqLworCWlmIChjcyA9PSAmdG9wX2NwdXNldCkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAl0cmlhbGNzID0gKmNzOwogCXJldHZhbCA9IGNwdWxpc3RfcGFyc2UoYnVmLCB0cmlhbGNzLmNwdXNfYWxsb3dlZCk7CiAJaWYgKHJldHZhbCA8IDApCkBAIC0yMDMzLDYgKzIwMzcsMzMgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKgorICogVGhlIHRvcF9jcHVzZXQgdHJhY2tzIHdoYXQgQ1BVcyBhbmQgTWVtb3J5IE5vZGVzIGFyZSBvbmxpbmUsCisgKiBwZXJpb2QuICBUaGlzIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBtYWtlIGNwdXNldHMgdHJhbnNwYXJlbnQKKyAqIChvZiBubyBhZmZlY3QpIG9uIHN5c3RlbXMgdGhhdCBhcmUgYWN0aXZlbHkgdXNpbmcgQ1BVIGhvdHBsdWcKKyAqIGJ1dCBtYWtpbmcgbm8gYWN0aXZlIHVzZSBvZiBjcHVzZXRzLgorICoKKyAqIFRoaXMgaGFuZGxlcyBDUFUgaG90cGx1ZyAoY3B1aHApIGV2ZW50cy4gIElmIHNvbWVkYXkgTWVtb3J5CisgKiBOb2RlcyBjYW4gYmUgaG90cGx1Z2dlZCAoZHluYW1pY2FsbHkgY2hhbmdpbmcgbm9kZV9vbmxpbmVfbWFwKQorICogdGhlbiB3ZSBzaG91bGQgaGFuZGxlIHRoYXQgdG9vLCBwZXJoYXBzIGluIGEgc2ltaWxhciB3YXkuCisgKi8KKworI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQorc3RhdGljIGludCBjcHVzZXRfaGFuZGxlX2NwdWhwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBwaGFzZSwgdm9pZCAqY3B1KQoreworCW11dGV4X2xvY2soJm1hbmFnZV9tdXRleCk7CisJbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOworCisJdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgPSBjcHVfb25saW5lX21hcDsKKworCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qKgogICogY3B1c2V0X2luaXRfc21wIC0gaW5pdGlhbGl6ZSBjcHVzX2FsbG93ZWQKICAqCkBAIC0yMDQzLDYgKzIwNzQsOCBAQAogewogCXRvcF9jcHVzZXQuY3B1c19hbGxvd2VkID0gY3B1X29ubGluZV9tYXA7CiAJdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgPSBub2RlX29ubGluZV9tYXA7CisKKwlob3RjcHVfbm90aWZpZXIoY3B1c2V0X2hhbmRsZV9jcHVocCwgMCk7CiB9CiAKIC8qKgpAQCAtMjM4Nyw3ICsyNDIwLDcgQEAKIGludCBjcHVzZXRfZXhjbF9ub2Rlc19vdmVybGFwKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKIAljb25zdCBzdHJ1Y3QgY3B1c2V0ICpjczEsICpjczI7CS8qIG15IGFuZCBwJ3MgY3B1c2V0IGFuY2VzdG9ycyAqLwotCWludCBvdmVybGFwID0gMDsJCS8qIGRvIGNwdXNldHMgb3ZlcmxhcD8gKi8KKwlpbnQgb3ZlcmxhcCA9IDE7CQkvKiBkbyBjcHVzZXRzIG92ZXJsYXA/ICovCiAKIAl0YXNrX2xvY2soY3VycmVudCk7CiAJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfRVhJVElORykgewpkaWZmIC0tZ2l0IGEva2VybmVsL2RlbGF5YWNjdC5jIGIva2VybmVsL2RlbGF5YWNjdC5jCmluZGV4IGYwNTM5MmQuLjM2NzUyZjEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9kZWxheWFjY3QuYworKysgYi9rZXJuZWwvZGVsYXlhY2N0LmMKQEAgLTE5LDE1ICsxOSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgogCi1pbnQgZGVsYXlhY2N0X29uIF9fcmVhZF9tb3N0bHk7CS8qIERlbGF5IGFjY291bnRpbmcgdHVybmVkIG9uL29mZiAqLworaW50IGRlbGF5YWNjdF9vbiBfX3JlYWRfbW9zdGx5ID0gMTsJLyogRGVsYXkgYWNjb3VudGluZyB0dXJuZWQgb24vb2ZmICovCiBrbWVtX2NhY2hlX3QgKmRlbGF5YWNjdF9jYWNoZTsKIAotc3RhdGljIGludCBfX2luaXQgZGVsYXlhY2N0X3NldHVwX2VuYWJsZShjaGFyICpzdHIpCitzdGF0aWMgaW50IF9faW5pdCBkZWxheWFjY3Rfc2V0dXBfZGlzYWJsZShjaGFyICpzdHIpCiB7Ci0JZGVsYXlhY2N0X29uID0gMTsKKwlkZWxheWFjY3Rfb24gPSAwOwogCXJldHVybiAxOwogfQotX19zZXR1cCgiZGVsYXlhY2N0IiwgZGVsYXlhY2N0X3NldHVwX2VuYWJsZSk7CitfX3NldHVwKCJub2RlbGF5YWNjdCIsIGRlbGF5YWNjdF9zZXR1cF9kaXNhYmxlKTsKIAogdm9pZCBkZWxheWFjY3RfaW5pdCh2b2lkKQogewpAQCAtNDEsMjQgKzQxLDExIEBACiAKIHZvaWQgX19kZWxheWFjY3RfdHNrX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7Ci0Jc3Bpbl9sb2NrX2luaXQoJnRzay0+ZGVsYXlzX2xvY2spOwotCS8qIE5vIG5lZWQgdG8gYWNxdWlyZSB0c2stPmRlbGF5c19sb2NrIGZvciBhbGxvY2F0aW9uIGhlcmUgdW5sZXNzCi0JICAgX19kZWxheWFjY3RfdHNrX2luaXQgY2FsbGVkIGFmdGVyIHRzayBpcyBhdHRhY2hlZCB0byB0YXNrbGlzdAotCSovCiAJdHNrLT5kZWxheXMgPSBrbWVtX2NhY2hlX3phbGxvYyhkZWxheWFjY3RfY2FjaGUsIFNMQUJfS0VSTkVMKTsKIAlpZiAodHNrLT5kZWxheXMpCiAJCXNwaW5fbG9ja19pbml0KCZ0c2stPmRlbGF5cy0+bG9jayk7CiB9CiAKLXZvaWQgX19kZWxheWFjY3RfdHNrX2V4aXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0Jc3RydWN0IHRhc2tfZGVsYXlfaW5mbyAqZGVsYXlzID0gdHNrLT5kZWxheXM7Ci0Jc3Bpbl9sb2NrKCZ0c2stPmRlbGF5c19sb2NrKTsKLQl0c2stPmRlbGF5cyA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJnRzay0+ZGVsYXlzX2xvY2spOwotCWttZW1fY2FjaGVfZnJlZShkZWxheWFjY3RfY2FjaGUsIGRlbGF5cyk7Ci19Ci0KIC8qCiAgKiBTdGFydCBhY2NvdW50aW5nIGZvciBhIGRlbGF5IHN0YXRpc3RpYyB1c2luZwogICogaXRzIHN0YXJ0aW5nIHRpbWVzdGFtcCAoQHN0YXJ0KQpAQCAtMTE4LDggKzEwNSw2IEBACiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCXVuc2lnbmVkIGxvbmcgdDEsdDIsdDM7CiAKLQlzcGluX2xvY2soJnRzay0+ZGVsYXlzX2xvY2spOwotCiAJLyogVGhvdWdoIHRzay0+ZGVsYXlzIGFjY2Vzc2VkIGxhdGVyLCBlYXJseSBleGl0IGF2b2lkcwogCSAqIHVubmVjZXNzYXJ5IHJldHVybmluZyBvZiBvdGhlciBkYXRhCiAJICovCkBAIC0xNjEsNyArMTQ2LDYgQEAKIAlzcGluX3VubG9jaygmdHNrLT5kZWxheXMtPmxvY2spOwogCiBkb25lOgotCXNwaW5fdW5sb2NrKCZ0c2stPmRlbGF5c19sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2V4aXQuYyBiL2tlcm5lbC9leGl0LmMKaW5kZXggZGJhMTk0YS4uZDg5MTg4MyAxMDA2NDQKLS0tIGEva2VybmVsL2V4aXQuYworKysgYi9rZXJuZWwvZXhpdC5jCkBAIC05MDgsNyArOTA4LDYgQEAKIAkJYXVkaXRfZnJlZSh0c2spOwogCXRhc2tzdGF0c19leGl0X3NlbmQodHNrLCB0aWRzdGF0cywgZ3JvdXBfZGVhZCwgbXljcHUpOwogCXRhc2tzdGF0c19leGl0X2ZyZWUodGlkc3RhdHMpOwotCWRlbGF5YWNjdF90c2tfZXhpdCh0c2spOwogCiAJZXhpdF9tbSh0c2spOwogCkBAIC0xMDU0LDcgKzEwNTMsNyBAQAogCSAqIERvIG5vdCBjb25zaWRlciB0aHJlYWQgZ3JvdXAgbGVhZGVycyB0aGF0IGFyZQogCSAqIGluIGEgbm9uLWVtcHR5IHRocmVhZCBncm91cDoKIAkgKi8KLQlpZiAoY3VycmVudC0+dGdpZCAhPSBwLT50Z2lkICYmIGRlbGF5X2dyb3VwX2xlYWRlcihwKSkKKwlpZiAoZGVsYXlfZ3JvdXBfbGVhZGVyKHApKQogCQlyZXR1cm4gMjsKIAogCWlmIChzZWN1cml0eV90YXNrX3dhaXQocCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvZm9yay5jIGIva2VybmVsL2ZvcmsuYwppbmRleCAxYjBmN2IxLi5mOWIwMTRlIDEwMDY0NAotLS0gYS9rZXJuZWwvZm9yay5jCisrKyBiL2tlcm5lbC9mb3JrLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogCXNlY3VyaXR5X3Rhc2tfZnJlZSh0c2spOwogCWZyZWVfdWlkKHRzay0+dXNlcik7CiAJcHV0X2dyb3VwX2luZm8odHNrLT5ncm91cF9pbmZvKTsKKwlkZWxheWFjY3RfdHNrX2ZyZWUodHNrKTsKIAogCWlmICghcHJvZmlsZV9oYW5kb2ZmX3Rhc2sodHNrKSkKIAkJZnJlZV90YXNrKHRzayk7CkBAIC0xMDExLDcgKzEwMTIsNyBAQAogCXJldHZhbCA9IC1FRkFVTFQ7CiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfUEFSRU5UX1NFVFRJRCkKIAkJaWYgKHB1dF91c2VyKHAtPnBpZCwgcGFyZW50X3RpZHB0cikpCi0JCQlnb3RvIGJhZF9mb3JrX2NsZWFudXA7CisJCQlnb3RvIGJhZF9mb3JrX2NsZWFudXBfZGVsYXlzX2JpbmZtdDsKIAogCUlOSVRfTElTVF9IRUFEKCZwLT5jaGlsZHJlbik7CiAJSU5JVF9MSVNUX0hFQUQoJnAtPnNpYmxpbmcpOwpAQCAtMTI3Nyw3ICsxMjc4LDggQEAKIGJhZF9mb3JrX2NsZWFudXBfY3B1c2V0OgogI2VuZGlmCiAJY3B1c2V0X2V4aXQocCk7Ci1iYWRfZm9ya19jbGVhbnVwOgorYmFkX2ZvcmtfY2xlYW51cF9kZWxheXNfYmluZm10OgorCWRlbGF5YWNjdF90c2tfZnJlZShwKTsKIAlpZiAocC0+YmluZm10KQogCQltb2R1bGVfcHV0KHAtPmJpbmZtdC0+bW9kdWxlKTsKIGJhZF9mb3JrX2NsZWFudXBfcHV0X2RvbWFpbjoKQEAgLTEzODcsOCArMTM4OSwxMCBAQAogCiAJCWlmIChjbG9uZV9mbGFncyAmIENMT05FX1ZGT1JLKSB7CiAJCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ2Zm9yayk7Ci0JCQlpZiAodW5saWtlbHkgKGN1cnJlbnQtPnB0cmFjZSAmIFBUX1RSQUNFX1ZGT1JLX0RPTkUpKQorCQkJaWYgKHVubGlrZWx5IChjdXJyZW50LT5wdHJhY2UgJiBQVF9UUkFDRV9WRk9SS19ET05FKSkgeworCQkJCWN1cnJlbnQtPnB0cmFjZV9tZXNzYWdlID0gbnI7CiAJCQkJcHRyYWNlX25vdGlmeSAoKFBUUkFDRV9FVkVOVF9WRk9SS19ET05FIDw8IDgpIHwgU0lHVFJBUCk7CisJCQl9CiAJCX0KIAl9IGVsc2UgewogCQlmcmVlX3BpZChwaWQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2Z1dGV4LmMgYi9rZXJuZWwvZnV0ZXguYwppbmRleCBjZjBjOGUyLi45ZDI2MGU4MyAxMDA2NDQKLS0tIGEva2VybmVsL2Z1dGV4LmMKKysrIGIva2VybmVsL2Z1dGV4LmMKQEAgLTI5Nyw3ICsyOTcsNyBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCi0JaWYgKGF0dGVtcHQgPj0gMiB8fCAhKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyZXNzKSkgfHwKKwlpZiAoYXR0ZW1wdCA+IDIgfHwgISh2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcmVzcykpIHx8CiAJICAgIHZtYS0+dm1fc3RhcnQgPiBhZGRyZXNzIHx8ICEodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKQEAgLTM5Nyw3ICszOTcsNyBAQAogCQlwID0gTlVMTDsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KLQlpZiAocC0+c3RhdGUgPT0gRVhJVF9aT01CSUUgfHwgcC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkgeworCWlmIChwLT5leGl0X3N0YXRlICE9IDApIHsKIAkJcCA9IE5VTEw7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CkBAIC00MTUsMTUgKzQxNSwxNSBAQAogICovCiB2b2lkIGV4aXRfcGlfc3RhdGVfbGlzdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCiB7Ci0Jc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0LCAqaGVhZCA9ICZjdXJyLT5waV9zdGF0ZV9saXN0OwogCXN0cnVjdCBmdXRleF9waV9zdGF0ZSAqcGlfc3RhdGU7CisJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKIAl1bmlvbiBmdXRleF9rZXkga2V5OwogCiAJLyoKIAkgKiBXZSBhcmUgYSBaT01CSUUgYW5kIG5vYm9keSBjYW4gZW5xdWV1ZSBpdHNlbGYgb24KIAkgKiBwaV9zdGF0ZV9saXN0IGFueW1vcmUsIGJ1dCB3ZSBoYXZlIHRvIGJlIGNhcmVmdWwKLQkgKiB2ZXJzdXMgd2FpdGVycyB1bnF1ZXVlaW5nIHRoZW1zZWxmcworCSAqIHZlcnN1cyB3YWl0ZXJzIHVucXVldWVpbmcgdGhlbXNlbHZlczoKIAkgKi8KIAlzcGluX2xvY2tfaXJxKCZjdXJyLT5waV9sb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKQEAgLTQzMSwyMSArNDMxLDI0IEBACiAJCW5leHQgPSBoZWFkLT5uZXh0OwogCQlwaV9zdGF0ZSA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IGZ1dGV4X3BpX3N0YXRlLCBsaXN0KTsKIAkJa2V5ID0gcGlfc3RhdGUtPmtleTsKKwkJaGIgPSBoYXNoX2Z1dGV4KCZrZXkpOwogCQlzcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOwogCi0JCWhiID0gaGFzaF9mdXRleCgma2V5KTsKIAkJc3Bpbl9sb2NrKCZoYi0+bG9jayk7CiAKIAkJc3Bpbl9sb2NrX2lycSgmY3Vyci0+cGlfbG9jayk7CisJCS8qCisJCSAqIFdlIGRyb3BwZWQgdGhlIHBpLWxvY2ssIHNvIHJlLWNoZWNrIHdoZXRoZXIgdGhpcworCQkgKiB0YXNrIHN0aWxsIG93bnMgdGhlIFBJLXN0YXRlOgorCQkgKi8KIAkJaWYgKGhlYWQtPm5leHQgIT0gbmV4dCkgewogCQkJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbGlzdF9kZWxfaW5pdCgmcGlfc3RhdGUtPmxpc3QpOwotCiAJCVdBUk5fT04ocGlfc3RhdGUtPm93bmVyICE9IGN1cnIpOwotCisJCVdBUk5fT04obGlzdF9lbXB0eSgmcGlfc3RhdGUtPmxpc3QpKTsKKwkJbGlzdF9kZWxfaW5pdCgmcGlfc3RhdGUtPmxpc3QpOwogCQlwaV9zdGF0ZS0+b3duZXIgPSBOVUxMOwogCQlzcGluX3VubG9ja19pcnEoJmN1cnItPnBpX2xvY2spOwogCkBAIC00NzAsNyArNDczLDcgQEAKIAloZWFkID0gJmhiLT5jaGFpbjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0aGlzLCBuZXh0LCBoZWFkLCBsaXN0KSB7Ci0JCWlmIChtYXRjaF9mdXRleCAoJnRoaXMtPmtleSwgJm1lLT5rZXkpKSB7CisJCWlmIChtYXRjaF9mdXRleCgmdGhpcy0+a2V5LCAmbWUtPmtleSkpIHsKIAkJCS8qCiAJCQkgKiBBbm90aGVyIHdhaXRlciBhbHJlYWR5IGV4aXN0cyAtIGJ1bXAgdXAKIAkJCSAqIHRoZSByZWZjb3VudCBhbmQgcmV0dXJuIGl0cyBwaV9zdGF0ZToKQEAgLTQ4Miw2ICs0ODUsOCBAQAogCQkJaWYgKHVubGlrZWx5KCFwaV9zdGF0ZSkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKKwkJCVdBUk5fT04oIWF0b21pY19yZWFkKCZwaV9zdGF0ZS0+cmVmY291bnQpKTsKKwogCQkJYXRvbWljX2luYygmcGlfc3RhdGUtPnJlZmNvdW50KTsKIAkJCW1lLT5waV9zdGF0ZSA9IHBpX3N0YXRlOwogCkBAIC00OTAsMTAgKzQ5NSwxMyBAQAogCX0KIAogCS8qCi0JICogV2UgYXJlIHRoZSBmaXJzdCB3YWl0ZXIgLSB0cnkgdG8gbG9vayB1cCB0aGUgcmVhbCBvd25lciBhbmQKLQkgKiBhdHRhY2ggdGhlIG5ldyBwaV9zdGF0ZSB0byBpdDoKKwkgKiBXZSBhcmUgdGhlIGZpcnN0IHdhaXRlciAtIHRyeSB0byBsb29rIHVwIHRoZSByZWFsIG93bmVyIGFuZCBhdHRhY2gKKwkgKiB0aGUgbmV3IHBpX3N0YXRlIHRvIGl0LCBidXQgYmFpbCBvdXQgd2hlbiB0aGUgb3duZXIgZGllZCBiaXQgaXMgc2V0CisJICogYW5kIFRJRCA9IDA6CiAJICovCiAJcGlkID0gdXZhbCAmIEZVVEVYX1RJRF9NQVNLOworCWlmICghcGlkICYmICh1dmFsICYgRlVURVhfT1dORVJfRElFRCkpCisJCXJldHVybiAtRVNSQ0g7CiAJcCA9IGZ1dGV4X2ZpbmRfZ2V0X3Rhc2socGlkKTsKIAlpZiAoIXApCiAJCXJldHVybiAtRVNSQ0g7CkBAIC01MTAsNiArNTE4LDcgQEAKIAlwaV9zdGF0ZS0+a2V5ID0gbWUtPmtleTsKIAogCXNwaW5fbG9ja19pcnEoJnAtPnBpX2xvY2spOworCVdBUk5fT04oIWxpc3RfZW1wdHkoJnBpX3N0YXRlLT5saXN0KSk7CiAJbGlzdF9hZGQoJnBpX3N0YXRlLT5saXN0LCAmcC0+cGlfc3RhdGVfbGlzdCk7CiAJcGlfc3RhdGUtPm93bmVyID0gcDsKIAlzcGluX3VubG9ja19pcnEoJnAtPnBpX2xvY2spOwpAQCAtNTczLDIwICs1ODIsMjkgQEAKIAkgKiBrZXB0IGVuYWJsZWQgd2hpbGUgdGhlcmUgaXMgUEkgc3RhdGUgYXJvdW5kLiBXZSBtdXN0IGFsc28KIAkgKiBwcmVzZXJ2ZSB0aGUgb3duZXIgZGllZCBiaXQuKQogCSAqLwotCW5ld3ZhbCA9ICh1dmFsICYgRlVURVhfT1dORVJfRElFRCkgfCBGVVRFWF9XQUlURVJTIHwgbmV3X293bmVyLT5waWQ7CisJaWYgKCEodXZhbCAmIEZVVEVYX09XTkVSX0RJRUQpKSB7CisJCW5ld3ZhbCA9IEZVVEVYX1dBSVRFUlMgfCBuZXdfb3duZXItPnBpZDsKIAotCWluY19wcmVlbXB0X2NvdW50KCk7Ci0JY3VydmFsID0gZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWModWFkZHIsIHV2YWwsIG5ld3ZhbCk7Ci0JZGVjX3ByZWVtcHRfY291bnQoKTsKKwkJaW5jX3ByZWVtcHRfY291bnQoKTsKKwkJY3VydmFsID0gZnV0ZXhfYXRvbWljX2NtcHhjaGdfaW5hdG9taWModWFkZHIsIHV2YWwsIG5ld3ZhbCk7CisJCWRlY19wcmVlbXB0X2NvdW50KCk7CisJCWlmIChjdXJ2YWwgPT0gLUVGQVVMVCkKKwkJCXJldHVybiAtRUZBVUxUOworCQlpZiAoY3VydmFsICE9IHV2YWwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKLQlpZiAoY3VydmFsID09IC1FRkFVTFQpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmIChjdXJ2YWwgIT0gdXZhbCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJc3Bpbl9sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKKwlXQVJOX09OKGxpc3RfZW1wdHkoJnBpX3N0YXRlLT5saXN0KSk7CisJbGlzdF9kZWxfaW5pdCgmcGlfc3RhdGUtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycSgmcGlfc3RhdGUtPm93bmVyLT5waV9sb2NrKTsKIAotCWxpc3RfZGVsX2luaXQoJnBpX3N0YXRlLT5vd25lci0+cGlfc3RhdGVfbGlzdCk7CisJc3Bpbl9sb2NrX2lycSgmbmV3X293bmVyLT5waV9sb2NrKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZwaV9zdGF0ZS0+bGlzdCkpOwogCWxpc3RfYWRkKCZwaV9zdGF0ZS0+bGlzdCwgJm5ld19vd25lci0+cGlfc3RhdGVfbGlzdCk7CiAJcGlfc3RhdGUtPm93bmVyID0gbmV3X293bmVyOworCXNwaW5fdW5sb2NrX2lycSgmbmV3X293bmVyLT5waV9sb2NrKTsKKwogCXJ0X211dGV4X3VubG9jaygmcGlfc3RhdGUtPnBpX211dGV4KTsKIAogCXJldHVybiAwOwpAQCAtNzI5LDggKzc0NywxMCBAQAogCQkgKi8KIAkJaWYgKGF0dGVtcHQrKykgewogCQkJaWYgKGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkcjIsCi0JCQkJCSAgICAgICBhdHRlbXB0KSkKKwkJCQkJCWF0dGVtcHQpKSB7CisJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCQlnb3RvIG91dDsKKwkJCX0KIAkJCWdvdG8gcmV0cnk7CiAJCX0KIApAQCAtOTMwLDYgKzk1MCw3IEBACiAJLyogSW4gdGhlIGNvbW1vbiBjYXNlIHdlIGRvbid0IHRha2UgdGhlIHNwaW5sb2NrLCB3aGljaCBpcyBuaWNlLiAqLwogIHJldHJ5OgogCWxvY2tfcHRyID0gcS0+bG9ja19wdHI7CisJYmFycmllcigpOwogCWlmIChsb2NrX3B0ciAhPSAwKSB7CiAJCXNwaW5fbG9jayhsb2NrX3B0cik7CiAJCS8qCkBAIC0xMDk5LDkgKzExMjAsMTAgQEAKICAqIGlmIHRoZXJlIGFyZSB3YWl0ZXJzIHRoZW4gaXQgd2lsbCBibG9jaywgaXQgZG9lcyBQSSwgZXRjLiAoRHVlIHRvCiAgKiByYWNlcyB0aGUga2VybmVsIG1pZ2h0IHNlZSBhIDAgdmFsdWUgb2YgdGhlIGZ1dGV4IHRvby4pCiAgKi8KLXN0YXRpYyBpbnQgZG9fZnV0ZXhfbG9ja19waSh1MzIgX191c2VyICp1YWRkciwgaW50IGRldGVjdCwgaW50IHRyeWxvY2ssCi0JCQkgICAgc3RydWN0IGhydGltZXJfc2xlZXBlciAqdG8pCitzdGF0aWMgaW50IGZ1dGV4X2xvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIGludCBkZXRlY3QsIHVuc2lnbmVkIGxvbmcgc2VjLAorCQkJIGxvbmcgbnNlYywgaW50IHRyeWxvY2spCiB7CisJc3RydWN0IGhydGltZXJfc2xlZXBlciB0aW1lb3V0LCAqdG8gPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CiAJc3RydWN0IGZ1dGV4X2hhc2hfYnVja2V0ICpoYjsKIAl1MzIgdXZhbCwgbmV3dmFsLCBjdXJ2YWw7CkBAIC0xMTExLDYgKzExMzMsMTMgQEAKIAlpZiAocmVmaWxsX3BpX3N0YXRlX2NhY2hlKCkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJaWYgKHNlYyAhPSBNQVhfU0NIRURVTEVfVElNRU9VVCkgeworCQl0byA9ICZ0aW1lb3V0OworCQlocnRpbWVyX2luaXQoJnRvLT50aW1lciwgQ0xPQ0tfUkVBTFRJTUUsIEhSVElNRVJfQUJTKTsKKwkJaHJ0aW1lcl9pbml0X3NsZWVwZXIodG8sIGN1cnJlbnQpOworCQl0by0+dGltZXIuZXhwaXJlcyA9IGt0aW1lX3NldChzZWMsIG5zZWMpOworCX0KKwogCXEucGlfc3RhdGUgPSBOVUxMOwogIHJldHJ5OgogCWRvd25fcmVhZCgmY3Vyci0+bW0tPm1tYXBfc2VtKTsKQEAgLTEyMzYsNiArMTI2NSw3IEBACiAJCS8qIE93bmVyIGRpZWQ/ICovCiAJCWlmIChxLnBpX3N0YXRlLT5vd25lciAhPSBOVUxMKSB7CiAJCQlzcGluX2xvY2tfaXJxKCZxLnBpX3N0YXRlLT5vd25lci0+cGlfbG9jayk7CisJCQlXQVJOX09OKGxpc3RfZW1wdHkoJnEucGlfc3RhdGUtPmxpc3QpKTsKIAkJCWxpc3RfZGVsX2luaXQoJnEucGlfc3RhdGUtPmxpc3QpOwogCQkJc3Bpbl91bmxvY2tfaXJxKCZxLnBpX3N0YXRlLT5vd25lci0+cGlfbG9jayk7CiAJCX0gZWxzZQpAQCAtMTI0NCw2ICsxMjc0LDcgQEAKIAkJcS5waV9zdGF0ZS0+b3duZXIgPSBjdXJyZW50OwogCiAJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnBpX2xvY2spOworCQlXQVJOX09OKCFsaXN0X2VtcHR5KCZxLnBpX3N0YXRlLT5saXN0KSk7CiAJCWxpc3RfYWRkKCZxLnBpX3N0YXRlLT5saXN0LCAmY3VycmVudC0+cGlfc3RhdGVfbGlzdCk7CiAJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+cGlfbG9jayk7CiAKQEAgLTEyODQsNyArMTMxNSw3IEBACiAJaWYgKCFkZXRlY3QgJiYgcmV0ID09IC1FREVBRExLICYmIDApCiAJCWZvcmNlX3NpZyhTSUdLSUxMLCBjdXJyZW50KTsKIAotCXJldHVybiByZXQ7CisJcmV0dXJuIHJldCAhPSAtRUlOVFIgPyByZXQgOiAtRVJFU1RBUlROT0lOVFI7CiAKICBvdXRfdW5sb2NrX3JlbGVhc2Vfc2VtOgogCXF1ZXVlX3VubG9jaygmcSwgaGIpOwpAQCAtMTMwMSw5ICsxMzMyLDEwIEBACiAJICogc3RpbGwgaG9sZGluZyB0aGUgbW1hcF9zZW0uCiAJICovCiAJaWYgKGF0dGVtcHQrKykgewotCQlpZiAoZnV0ZXhfaGFuZGxlX2ZhdWx0KCh1bnNpZ25lZCBsb25nKXVhZGRyLCBhdHRlbXB0KSkKKwkJaWYgKGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkciwgYXR0ZW1wdCkpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dF91bmxvY2tfcmVsZWFzZV9zZW07Ci0KKwkJfQogCQlnb3RvIHJldHJ5X2xvY2tlZDsKIAl9CiAKQEAgLTEzMTgsNzYgKzEzNTAsNiBAQAogfQogCiAvKgotICogUmVzdGFydCBoYW5kbGVyCi0gKi8KLXN0YXRpYyBsb25nIGZ1dGV4X2xvY2tfcGlfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydCkKLXsKLQlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHRpbWVvdXQsICp0byA9IE5VTEw7Ci0JaW50IHJldDsKLQotCXJlc3RhcnQtPmZuID0gZG9fbm9fcmVzdGFydF9zeXNjYWxsOwotCi0JaWYgKHJlc3RhcnQtPmFyZzIgfHwgcmVzdGFydC0+YXJnMykgewotCQl0byA9ICZ0aW1lb3V0OwotCQlocnRpbWVyX2luaXQoJnRvLT50aW1lciwgQ0xPQ0tfUkVBTFRJTUUsIEhSVElNRVJfQUJTKTsKLQkJaHJ0aW1lcl9pbml0X3NsZWVwZXIodG8sIGN1cnJlbnQpOwotCQl0by0+dGltZXIuZXhwaXJlcy50djY0ID0gKCh1NjQpcmVzdGFydC0+YXJnMSA8PCAzMikgfAotCQkJKHU2NCkgcmVzdGFydC0+YXJnMDsKLQl9Ci0KLQlwcl9kZWJ1ZygibG9ja19waSByZXN0YXJ0OiAlcCwgJWQgKCVkKVxuIiwKLQkJICh1MzIgX191c2VyICopcmVzdGFydC0+YXJnMCwgY3VycmVudC0+cGlkKTsKLQotCXJldCA9IGRvX2Z1dGV4X2xvY2tfcGkoKHUzMiBfX3VzZXIgKilyZXN0YXJ0LT5hcmcwLCByZXN0YXJ0LT5hcmcxLAotCQkJICAgICAgIDAsIHRvKTsKLQotCWlmIChyZXQgIT0gLUVJTlRSKQotCQlyZXR1cm4gcmV0OwotCi0JcmVzdGFydC0+Zm4gPSBmdXRleF9sb2NrX3BpX3Jlc3RhcnQ7Ci0KLQkvKiBUaGUgb3RoZXIgdmFsdWVzIGFyZSBmaWxsZWQgaW4gKi8KLQlyZXR1cm4gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKLX0KLQotLyoKLSAqIENhbGxlZCBmcm9tIHRoZSBzeXNjYWxsIGVudHJ5IGJlbG93LgotICovCi1zdGF0aWMgaW50IGZ1dGV4X2xvY2tfcGkodTMyIF9fdXNlciAqdWFkZHIsIGludCBkZXRlY3QsIHVuc2lnbmVkIGxvbmcgc2VjLAotCQkJIGxvbmcgbnNlYywgaW50IHRyeWxvY2spCi17Ci0Jc3RydWN0IGhydGltZXJfc2xlZXBlciB0aW1lb3V0LCAqdG8gPSBOVUxMOwotCXN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0OwotCWludCByZXQ7Ci0KLQlpZiAoc2VjICE9IE1BWF9TQ0hFRFVMRV9USU1FT1VUKSB7Ci0JCXRvID0gJnRpbWVvdXQ7Ci0JCWhydGltZXJfaW5pdCgmdG8tPnRpbWVyLCBDTE9DS19SRUFMVElNRSwgSFJUSU1FUl9BQlMpOwotCQlocnRpbWVyX2luaXRfc2xlZXBlcih0bywgY3VycmVudCk7Ci0JCXRvLT50aW1lci5leHBpcmVzID0ga3RpbWVfc2V0KHNlYywgbnNlYyk7Ci0JfQotCi0JcmV0ID0gZG9fZnV0ZXhfbG9ja19waSh1YWRkciwgZGV0ZWN0LCB0cnlsb2NrLCB0byk7Ci0KLQlpZiAocmV0ICE9IC1FSU5UUikKLQkJcmV0dXJuIHJldDsKLQotCXByX2RlYnVnKCJsb2NrX3BpIGludGVycnVwdGVkOiAlcCwgJWQgKCVkKVxuIiwgdWFkZHIsIGN1cnJlbnQtPnBpZCk7Ci0KLQlyZXN0YXJ0ID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKLQlyZXN0YXJ0LT5mbiA9IGZ1dGV4X2xvY2tfcGlfcmVzdGFydDsKLQlyZXN0YXJ0LT5hcmcwID0gKHVuc2lnbmVkIGxvbmcpIHVhZGRyOwotCXJlc3RhcnQtPmFyZzEgPSBkZXRlY3Q7Ci0JaWYgKHRvKSB7Ci0JCXJlc3RhcnQtPmFyZzIgPSB0by0+dGltZXIuZXhwaXJlcy50djY0ICYgMHhGRkZGRkZGRjsKLQkJcmVzdGFydC0+YXJnMyA9IHRvLT50aW1lci5leHBpcmVzLnR2NjQgPj4gMzI7Ci0JfSBlbHNlCi0JCXJlc3RhcnQtPmFyZzIgPSByZXN0YXJ0LT5hcmczID0gMDsKLQotCXJldHVybiAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOwotfQotCi0vKgogICogVXNlcnNwYWNlIGF0dGVtcHRlZCBhIFRJRCAtPiAwIGF0b21pYyB0cmFuc2l0aW9uLCBhbmQgZmFpbGVkLgogICogVGhpcyBpcyB0aGUgaW4ta2VybmVsIHNsb3dwYXRoOiB3ZSBsb29rIHVwIHRoZSBQSSBzdGF0ZSAoaWYgYW55KSwKICAqIGFuZCBkbyB0aGUgcnQtbXV0ZXggdW5sb2NrLgpAQCAtMTQyNyw5ICsxMzg5LDExIEBACiAJICogYWdhaW4uIElmIGl0IHN1Y2NlZWRzIHRoZW4gd2UgY2FuIHJldHVybiB3aXRob3V0IHdha2luZwogCSAqIGFueW9uZSBlbHNlIHVwOgogCSAqLwotCWluY19wcmVlbXB0X2NvdW50KCk7Ci0JdXZhbCA9IGZ1dGV4X2F0b21pY19jbXB4Y2hnX2luYXRvbWljKHVhZGRyLCBjdXJyZW50LT5waWQsIDApOwotCWRlY19wcmVlbXB0X2NvdW50KCk7CisJaWYgKCEodXZhbCAmIEZVVEVYX09XTkVSX0RJRUQpKSB7CisJCWluY19wcmVlbXB0X2NvdW50KCk7CisJCXV2YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwgY3VycmVudC0+cGlkLCAwKTsKKwkJZGVjX3ByZWVtcHRfY291bnQoKTsKKwl9CiAKIAlpZiAodW5saWtlbHkodXZhbCA9PSAtRUZBVUxUKSkKIAkJZ290byBwaV9mYXVsdGVkOwpAQCAtMTQ2Miw5ICsxNDI2LDExIEBACiAJLyoKIAkgKiBObyB3YWl0ZXJzIC0ga2VybmVsIHVubG9ja3MgdGhlIGZ1dGV4OgogCSAqLwotCXJldCA9IHVubG9ja19mdXRleF9waSh1YWRkciwgdXZhbCk7Ci0JaWYgKHJldCA9PSAtRUZBVUxUKQotCQlnb3RvIHBpX2ZhdWx0ZWQ7CisJaWYgKCEodXZhbCAmIEZVVEVYX09XTkVSX0RJRUQpKSB7CisJCXJldCA9IHVubG9ja19mdXRleF9waSh1YWRkciwgdXZhbCk7CisJCWlmIChyZXQgPT0gLUVGQVVMVCkKKwkJCWdvdG8gcGlfZmF1bHRlZDsKKwl9CiAKIG91dF91bmxvY2s6CiAJc3Bpbl91bmxvY2soJmhiLT5sb2NrKTsKQEAgLTE0ODEsOSArMTQ0NywxMCBAQAogCSAqIHN0aWxsIGhvbGRpbmcgdGhlIG1tYXBfc2VtLgogCSAqLwogCWlmIChhdHRlbXB0KyspIHsKLQkJaWYgKGZ1dGV4X2hhbmRsZV9mYXVsdCgodW5zaWduZWQgbG9uZyl1YWRkciwgYXR0ZW1wdCkpCisJCWlmIChmdXRleF9oYW5kbGVfZmF1bHQoKHVuc2lnbmVkIGxvbmcpdWFkZHIsIGF0dGVtcHQpKSB7CisJCQlyZXQgPSAtRUZBVUxUOwogCQkJZ290byBvdXRfdW5sb2NrOwotCisJCX0KIAkJZ290byByZXRyeV9sb2NrZWQ7CiAJfQogCkBAIC0xNjgzLDkgKzE2NTAsOSBAQAogICogUHJvY2VzcyBhIGZ1dGV4LWxpc3QgZW50cnksIGNoZWNrIHdoZXRoZXIgaXQncyBvd25lZCBieSB0aGUKICAqIGR5aW5nIHRhc2ssIGFuZCBkbyBub3RpZmljYXRpb24gaWYgc286CiAgKi8KLWludCBoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycikKK2ludCBoYW5kbGVfZnV0ZXhfZGVhdGgodTMyIF9fdXNlciAqdWFkZHIsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciwgaW50IHBpKQogewotCXUzMiB1dmFsLCBudmFsOworCXUzMiB1dmFsLCBudmFsLCBtdmFsOwogCiByZXRyeToKIAlpZiAoZ2V0X3VzZXIodXZhbCwgdWFkZHIpKQpAQCAtMTcwMiwyMSArMTY2OSw0NSBAQAogCQkgKiB0aHJlYWQtZGVhdGguKSBUaGUgcmVzdCBvZiB0aGUgY2xlYW51cCBpcyBkb25lIGluCiAJCSAqIHVzZXJzcGFjZS4KIAkJICovCi0JCW52YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwgdXZhbCwKLQkJCQkJCSAgICAgdXZhbCB8IEZVVEVYX09XTkVSX0RJRUQpOworCQltdmFsID0gKHV2YWwgJiBGVVRFWF9XQUlURVJTKSB8IEZVVEVYX09XTkVSX0RJRUQ7CisJCW52YWwgPSBmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyh1YWRkciwgdXZhbCwgbXZhbCk7CisKIAkJaWYgKG52YWwgPT0gLUVGQVVMVCkKIAkJCXJldHVybiAtMTsKIAogCQlpZiAobnZhbCAhPSB1dmFsKQogCQkJZ290byByZXRyeTsKIAotCQlpZiAodXZhbCAmIEZVVEVYX1dBSVRFUlMpCi0JCQlmdXRleF93YWtlKHVhZGRyLCAxKTsKKwkJLyoKKwkJICogV2FrZSByb2J1c3Qgbm9uLVBJIGZ1dGV4ZXMgaGVyZS4gVGhlIHdha2V1cCBvZgorCQkgKiBQSSBmdXRleGVzIGhhcHBlbnMgaW4gZXhpdF9waV9zdGF0ZSgpOgorCQkgKi8KKwkJaWYgKCFwaSkgeworCQkJaWYgKHV2YWwgJiBGVVRFWF9XQUlURVJTKQorCQkJCWZ1dGV4X3dha2UodWFkZHIsIDEpOworCQl9CiAJfQogCXJldHVybiAwOwogfQogCiAvKgorICogRmV0Y2ggYSByb2J1c3QtbGlzdCBwb2ludGVyLiBCaXQgMCBzaWduYWxzIFBJIGZ1dGV4ZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGZldGNoX3JvYnVzdF9lbnRyeShzdHJ1Y3Qgcm9idXN0X2xpc3QgX191c2VyICoqZW50cnksCisJCQkJICAgICBzdHJ1Y3Qgcm9idXN0X2xpc3QgX191c2VyICoqaGVhZCwgaW50ICpwaSkKK3sKKwl1bnNpZ25lZCBsb25nIHVlbnRyeTsKKworCWlmIChnZXRfdXNlcih1ZW50cnksICh1bnNpZ25lZCBsb25nICopaGVhZCkpCisJCXJldHVybiAtRUZBVUxUOworCisJKmVudHJ5ID0gKHZvaWQgKikodWVudHJ5ICYgfjFVTCk7CisJKnBpID0gdWVudHJ5ICYgMTsKKworCXJldHVybiAwOworfQorCisvKgogICogV2FsayBjdXJyLT5yb2J1c3RfbGlzdCAodmVyeSBjYXJlZnVsbHksIGl0J3MgYSB1c2Vyc3BhY2UgbGlzdCEpCiAgKiBhbmQgbWFyayBhbnkgbG9ja3MgZm91bmQgdGhlcmUgZGVhZCwgYW5kIG5vdGlmeSBhbnkgd2FpdGVycy4KICAqCkBAIC0xNzI2LDE0ICsxNzE3LDE0IEBACiB7CiAJc3RydWN0IHJvYnVzdF9saXN0X2hlYWQgX191c2VyICpoZWFkID0gY3Vyci0+cm9idXN0X2xpc3Q7CiAJc3RydWN0IHJvYnVzdF9saXN0IF9fdXNlciAqZW50cnksICpwZW5kaW5nOwotCXVuc2lnbmVkIGludCBsaW1pdCA9IFJPQlVTVF9MSVNUX0xJTUlUOworCXVuc2lnbmVkIGludCBsaW1pdCA9IFJPQlVTVF9MSVNUX0xJTUlULCBwaSwgcGlwOwogCXVuc2lnbmVkIGxvbmcgZnV0ZXhfb2Zmc2V0OwogCiAJLyoKIAkgKiBGZXRjaCB0aGUgbGlzdCBoZWFkICh3aGljaCB3YXMgcmVnaXN0ZXJlZCBlYXJsaWVyLCB2aWEKIAkgKiBzeXNfc2V0X3JvYnVzdF9saXN0KCkpOgogCSAqLwotCWlmIChnZXRfdXNlcihlbnRyeSwgJmhlYWQtPmxpc3QubmV4dCkpCisJaWYgKGZldGNoX3JvYnVzdF9lbnRyeSgmZW50cnksICZoZWFkLT5saXN0Lm5leHQsICZwaSkpCiAJCXJldHVybjsKIAkvKgogCSAqIEZldGNoIHRoZSByZWxhdGl2ZSBmdXRleCBvZmZzZXQ6CkBAIC0xNzQ0LDEwICsxNzM1LDExIEBACiAJICogRmV0Y2ggYW55IHBvc3NpYmx5IHBlbmRpbmcgbG9jay1hZGQgZmlyc3QsIGFuZCBoYW5kbGUgaXQKIAkgKiBpZiBpdCBleGlzdHM6CiAJICovCi0JaWYgKGdldF91c2VyKHBlbmRpbmcsICZoZWFkLT5saXN0X29wX3BlbmRpbmcpKQorCWlmIChmZXRjaF9yb2J1c3RfZW50cnkoJnBlbmRpbmcsICZoZWFkLT5saXN0X29wX3BlbmRpbmcsICZwaXApKQogCQlyZXR1cm47CisKIAlpZiAocGVuZGluZykKLQkJaGFuZGxlX2Z1dGV4X2RlYXRoKCh2b2lkICopcGVuZGluZyArIGZ1dGV4X29mZnNldCwgY3Vycik7CisJCWhhbmRsZV9mdXRleF9kZWF0aCgodm9pZCAqKXBlbmRpbmcgKyBmdXRleF9vZmZzZXQsIGN1cnIsIHBpcCk7CiAKIAl3aGlsZSAoZW50cnkgIT0gJmhlYWQtPmxpc3QpIHsKIAkJLyoKQEAgLTE3NTYsMTIgKzE3NDgsMTIgQEAKIAkJICovCiAJCWlmIChlbnRyeSAhPSBwZW5kaW5nKQogCQkJaWYgKGhhbmRsZV9mdXRleF9kZWF0aCgodm9pZCAqKWVudHJ5ICsgZnV0ZXhfb2Zmc2V0LAotCQkJCQkJY3VycikpCisJCQkJCQljdXJyLCBwaSkpCiAJCQkJcmV0dXJuOwogCQkvKgogCQkgKiBGZXRjaCB0aGUgbmV4dCBlbnRyeSBpbiB0aGUgbGlzdDoKIAkJICovCi0JCWlmIChnZXRfdXNlcihlbnRyeSwgJmVudHJ5LT5uZXh0KSkKKwkJaWYgKGZldGNoX3JvYnVzdF9lbnRyeSgmZW50cnksICZlbnRyeS0+bmV4dCwgJnBpKSkKIAkJCXJldHVybjsKIAkJLyoKIAkJICogQXZvaWQgZXhjZXNzaXZlbHkgbG9uZyBvciBjaXJjdWxhciBsaXN0czoKZGlmZiAtLWdpdCBhL2tlcm5lbC9mdXRleF9jb21wYXQuYyBiL2tlcm5lbC9mdXRleF9jb21wYXQuYwppbmRleCBkMWQ5MmI0Li5jNWNjYTNmIDEwMDY0NAotLS0gYS9rZXJuZWwvZnV0ZXhfY29tcGF0LmMKKysrIGIva2VybmVsL2Z1dGV4X2NvbXBhdC5jCkBAIC0xMiw2ICsxMiwyMyBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorCisvKgorICogRmV0Y2ggYSByb2J1c3QtbGlzdCBwb2ludGVyLiBCaXQgMCBzaWduYWxzIFBJIGZ1dGV4ZXM6CisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitmZXRjaF9yb2J1c3RfZW50cnkoY29tcGF0X3VwdHJfdCAqdWVudHJ5LCBzdHJ1Y3Qgcm9idXN0X2xpc3QgX191c2VyICoqZW50cnksCisJCSAgIGNvbXBhdF91cHRyX3QgKmhlYWQsIGludCAqcGkpCit7CisJaWYgKGdldF91c2VyKCp1ZW50cnksIGhlYWQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCSplbnRyeSA9IGNvbXBhdF9wdHIoKCp1ZW50cnkpICYgfjEpOworCSpwaSA9ICh1bnNpZ25lZCBpbnQpKCp1ZW50cnkpICYgMTsKKworCXJldHVybiAwOworfQorCiAvKgogICogV2FsayBjdXJyLT5yb2J1c3RfbGlzdCAodmVyeSBjYXJlZnVsbHksIGl0J3MgYSB1c2Vyc3BhY2UgbGlzdCEpCiAgKiBhbmQgbWFyayBhbnkgbG9ja3MgZm91bmQgdGhlcmUgZGVhZCwgYW5kIG5vdGlmeSBhbnkgd2FpdGVycy4KQEAgLTIyLDE3ICszOSwxNiBAQAogewogCXN0cnVjdCBjb21wYXRfcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKmhlYWQgPSBjdXJyLT5jb21wYXRfcm9idXN0X2xpc3Q7CiAJc3RydWN0IHJvYnVzdF9saXN0IF9fdXNlciAqZW50cnksICpwZW5kaW5nOworCXVuc2lnbmVkIGludCBsaW1pdCA9IFJPQlVTVF9MSVNUX0xJTUlULCBwaSwgcGlwOwogCWNvbXBhdF91cHRyX3QgdWVudHJ5LCB1cGVuZGluZzsKLQl1bnNpZ25lZCBpbnQgbGltaXQgPSBST0JVU1RfTElTVF9MSU1JVDsKIAljb21wYXRfbG9uZ190IGZ1dGV4X29mZnNldDsKIAogCS8qCiAJICogRmV0Y2ggdGhlIGxpc3QgaGVhZCAod2hpY2ggd2FzIHJlZ2lzdGVyZWQgZWFybGllciwgdmlhCiAJICogc3lzX3NldF9yb2J1c3RfbGlzdCgpKToKIAkgKi8KLQlpZiAoZ2V0X3VzZXIodWVudHJ5LCAmaGVhZC0+bGlzdC5uZXh0KSkKKwlpZiAoZmV0Y2hfcm9idXN0X2VudHJ5KCZ1ZW50cnksICZlbnRyeSwgJmhlYWQtPmxpc3QubmV4dCwgJnBpKSkKIAkJcmV0dXJuOwotCWVudHJ5ID0gY29tcGF0X3B0cih1ZW50cnkpOwogCS8qCiAJICogRmV0Y2ggdGhlIHJlbGF0aXZlIGZ1dGV4IG9mZnNldDoKIAkgKi8KQEAgLTQyLDExICs1OCwxMSBAQAogCSAqIEZldGNoIGFueSBwb3NzaWJseSBwZW5kaW5nIGxvY2stYWRkIGZpcnN0LCBhbmQgaGFuZGxlIGl0CiAJICogaWYgaXQgZXhpc3RzOgogCSAqLwotCWlmIChnZXRfdXNlcih1cGVuZGluZywgJmhlYWQtPmxpc3Rfb3BfcGVuZGluZykpCisJaWYgKGZldGNoX3JvYnVzdF9lbnRyeSgmdXBlbmRpbmcsICZwZW5kaW5nLAorCQkJICAgICAgICZoZWFkLT5saXN0X29wX3BlbmRpbmcsICZwaXApKQogCQlyZXR1cm47Ci0JcGVuZGluZyA9IGNvbXBhdF9wdHIodXBlbmRpbmcpOwogCWlmICh1cGVuZGluZykKLQkJaGFuZGxlX2Z1dGV4X2RlYXRoKCh2b2lkICopcGVuZGluZyArIGZ1dGV4X29mZnNldCwgY3Vycik7CisJCWhhbmRsZV9mdXRleF9kZWF0aCgodm9pZCAqKXBlbmRpbmcgKyBmdXRleF9vZmZzZXQsIGN1cnIsIHBpcCk7CiAKIAl3aGlsZSAoY29tcGF0X3B0cih1ZW50cnkpICE9ICZoZWFkLT5saXN0KSB7CiAJCS8qCkBAIC01NSwxNSArNzEsMTUgQEAKIAkJICovCiAJCWlmIChlbnRyeSAhPSBwZW5kaW5nKQogCQkJaWYgKGhhbmRsZV9mdXRleF9kZWF0aCgodm9pZCAqKWVudHJ5ICsgZnV0ZXhfb2Zmc2V0LAotCQkJCQkJY3VycikpCisJCQkJCQljdXJyLCBwaSkpCiAJCQkJcmV0dXJuOwogCiAJCS8qCiAJCSAqIEZldGNoIHRoZSBuZXh0IGVudHJ5IGluIHRoZSBsaXN0OgogCQkgKi8KLQkJaWYgKGdldF91c2VyKHVlbnRyeSwgKGNvbXBhdF91cHRyX3QgKikmZW50cnktPm5leHQpKQorCQlpZiAoZmV0Y2hfcm9idXN0X2VudHJ5KCZ1ZW50cnksICZlbnRyeSwKKwkJCQkgICAgICAgKGNvbXBhdF91cHRyX3QgKikmZW50cnktPm5leHQsICZwaSkpCiAJCQlyZXR1cm47Ci0JCWVudHJ5ID0gY29tcGF0X3B0cih1ZW50cnkpOwogCQkvKgogCQkgKiBBdm9pZCBleGNlc3NpdmVseSBsb25nIG9yIGNpcmN1bGFyIGxpc3RzOgogCQkgKi8KZGlmZiAtLWdpdCBhL2tlcm5lbC9ocnRpbWVyLmMgYi9rZXJuZWwvaHJ0aW1lci5jCmluZGV4IGQxNzc2NmQuLjIxYzM4YTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ocnRpbWVyLmMKKysrIGIva2VybmVsL2hydGltZXIuYwpAQCAtMTg3LDcgKzE4Nyw3IEBACiB7CiAJc3RydWN0IGhydGltZXJfYmFzZSAqbmV3X2Jhc2U7CiAKLQluZXdfYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXNbYmFzZS0+aW5kZXhdKTsKKwluZXdfYmFzZSA9ICZfX2dldF9jcHVfdmFyKGhydGltZXJfYmFzZXMpW2Jhc2UtPmluZGV4XTsKIAogCWlmIChiYXNlICE9IG5ld19iYXNlKSB7CiAJCS8qCkBAIC04MzUsNyArODM1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgaHJ0aW1lcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKK3N0YXRpYyBpbnQgX19jcHVpbml0IGhydGltZXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQogewogCWxvbmcgY3B1ID0gKGxvbmcpaGNwdTsKQEAgLTg1OSw3ICs4NTksNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBocnRpbWVyc19uYiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBocnRpbWVyc19uYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGhydGltZXJfY3B1X25vdGlmeSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggOTMzNmYyZS4uYWMxZjg1MCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTI1Miw3ICsyNTIsNyBAQAogCW1hc2tfYWNrX2lycShkZXNjLCBpcnEpOwogCiAJaWYgKHVubGlrZWx5KGRlc2MtPnN0YXR1cyAmIElSUV9JTlBST0dSRVNTKSkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAlkZXNjLT5zdGF0dXMgJj0gfihJUlFfUkVQTEFZIHwgSVJRX1dBSVRJTkcpOwogCWtzdGF0X2NwdShjcHUpLmlycXNbaXJxXSsrOwogCkBAIC0yNjMsNyArMjYzLDcgQEAKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKHVubGlrZWx5KCFhY3Rpb24gfHwgKGRlc2MtPnN0YXR1cyAmIElSUV9ESVNBQkxFRCkpKSB7CiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfUEVORElORzsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlkZXNjLT5zdGF0dXMgfD0gSVJRX0lOUFJPR1JFU1M7CkBAIC0yNzYsOSArMjc2LDkgQEAKIAogCXNwaW5fbG9jaygmZGVzYy0+bG9jayk7CiAJZGVzYy0+c3RhdHVzICY9IH5JUlFfSU5QUk9HUkVTUzsKLW91dDoKIAlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfRElTQUJMRUQpICYmIGRlc2MtPmNoaXAtPnVubWFzaykKIAkJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CitvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9oYW5kbGUuYyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKaW5kZXggZmM0ZTkwNi4uNDhhNTNmNiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9oYW5kbGUuYworKysgYi9rZXJuZWwvaXJxL2hhbmRsZS5jCkBAIC0yMCw2ICsyMCwxMSBAQAogCiAvKioKICAqIGhhbmRsZV9iYWRfaXJxIC0gaGFuZGxlIHNwdXJpb3VzIGFuZCB1bmhhbmRsZWQgaXJxcworICogQGlycTogICAgICAgdGhlIGludGVycnVwdCBudW1iZXIKKyAqIEBkZXNjOiAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKyAqIEByZWdzOiAgICAgIHBvaW50ZXIgdG8gYSByZWdpc3RlciBzdHJ1Y3R1cmUKKyAqCisgKiBIYW5kbGVzIHNwdXJpb3VzIGFuZCB1bmhhbmRsZWQgSVJRJ3MuIEl0IGFsc28gcHJpbnRzIGEgZGVidWdtZXNzYWdlLgogICovCiB2b2lkIGZhc3RjYWxsCiBoYW5kbGVfYmFkX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9tYW5hZ2UuYyBiL2tlcm5lbC9pcnEvbWFuYWdlLmMKaW5kZXggNGU0NjE0My4uOTJiZTUxOSAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9tYW5hZ2UuYworKysgYi9rZXJuZWwvaXJxL21hbmFnZS5jCkBAIC0xMzcsMTYgKzEzNyw0MCBAQAogICoJQGlycToJaW50ZXJydXB0IHRvIGNvbnRyb2wKICAqCUBvbjoJZW5hYmxlL2Rpc2FibGUgcG93ZXIgbWFuYWdlbWVudCB3YWtldXAKICAqCi0gKglFbmFibGUvZGlzYWJsZSBwb3dlciBtYW5hZ2VtZW50IHdha2V1cCBtb2RlCisgKglFbmFibGUvZGlzYWJsZSBwb3dlciBtYW5hZ2VtZW50IHdha2V1cCBtb2RlLCB3aGljaCBpcworICoJZGlzYWJsZWQgYnkgZGVmYXVsdC4gIEVuYWJsZXMgYW5kIGRpc2FibGVzIG11c3QgbWF0Y2gsCisgKglqdXN0IGFzIHRoZXkgbWF0Y2ggZm9yIG5vbi13YWtldXAgbW9kZSBzdXBwb3J0LgorICoKKyAqCVdha2V1cCBtb2RlIGxldHMgdGhpcyBJUlEgd2FrZSB0aGUgc3lzdGVtIGZyb20gc2xlZXAKKyAqCXN0YXRlcyBsaWtlICJzdXNwZW5kIHRvIFJBTSIuCiAgKi8KIGludCBzZXRfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogewogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYyA9IGlycV9kZXNjICsgaXJxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FTlhJTzsKKwlpbnQgKCpzZXRfd2FrZSkodW5zaWduZWQsIHVuc2lnbmVkKSA9IGRlc2MtPmNoaXAtPnNldF93YWtlOwogCisJLyogd2FrZXVwLWNhcGFibGUgaXJxcyBjYW4gYmUgc2hhcmVkIGJldHdlZW4gZHJpdmVycyB0aGF0CisJICogZG9uJ3QgbmVlZCB0byBoYXZlIHRoZSBzYW1lIHNsZWVwIG1vZGUgYmVoYXZpb3JzLgorCSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKGRlc2MtPmNoaXAtPnNldF93YWtlKQorCWlmIChvbikgeworCQlpZiAoZGVzYy0+d2FrZV9kZXB0aCsrID09IDApCisJCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1dBS0VVUDsKKwkJZWxzZQorCQkJc2V0X3dha2UgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChkZXNjLT53YWtlX2RlcHRoID09IDApIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYmFsYW5jZWQgSVJRICVkICIKKwkJCQkJIndha2UgZGlzYWJsZVxuIiwgaXJxKTsKKwkJCVdBUk5fT04oMSk7CisJCX0gZWxzZSBpZiAoLS1kZXNjLT53YWtlX2RlcHRoID09IDApCisJCQlkZXNjLT5zdGF0dXMgJj0gfklSUV9XQUtFVVA7CisJCWVsc2UKKwkJCXNldF93YWtlID0gTlVMTDsKKwl9CisJaWYgKHNldF93YWtlKQogCQlyZXQgPSBkZXNjLT5jaGlwLT5zZXRfd2FrZShpcnEsIG9uKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcmVzZW5kLmMgYi9rZXJuZWwvaXJxL3Jlc2VuZC5jCmluZGV4IDg3MmY5MWJhLi4zNWYxMGY3IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL3Jlc2VuZC5jCisrKyBiL2tlcm5lbC9pcnEvcmVzZW5kLmMKQEAgLTYzLDggKzYzLDcgQEAKIAlkZXNjLT5jaGlwLT5lbmFibGUoaXJxKTsKIAogCWlmICgoc3RhdHVzICYgKElSUV9QRU5ESU5HIHwgSVJRX1JFUExBWSkpID09IElSUV9QRU5ESU5HKSB7Ci0JCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1BFTkRJTkc7Ci0JCWRlc2MtPnN0YXR1cyA9IHN0YXR1cyB8IElSUV9SRVBMQVk7CisJCWRlc2MtPnN0YXR1cyA9IChzdGF0dXMgJiB+SVJRX1BFTkRJTkcpIHwgSVJRX1JFUExBWTsKIAogCQlpZiAoIWRlc2MtPmNoaXAgfHwgIWRlc2MtPmNoaXAtPnJldHJpZ2dlciB8fAogCQkJCQkhZGVzYy0+Y2hpcC0+cmV0cmlnZ2VyKGlycSkpIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDFkMzJkZWYuLjVjNDcwYzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMTk3LDExICsxOTcsMTIgQEAKIHsKIAlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvICpzdWJfaW5mbyA9IGRhdGE7CiAJcGlkX3QgcGlkOworCWludCB3YWl0ID0gc3ViX2luZm8tPndhaXQ7CiAKIAkvKiBDTE9ORV9WRk9SSzogd2FpdCB1bnRpbCB0aGUgdXNlcm1vZGUgaGVscGVyIGhhcyBleGVjdmUnZAogCSAqIHN1Y2Nlc3NmdWxseSBXZSBuZWVkIHRoZSBkYXRhIHN0cnVjdHVyZXMgdG8gc3RheSBhcm91bmQKIAkgKiB1bnRpbCB0aGF0IGlzIGRvbmUuICAqLwotCWlmIChzdWJfaW5mby0+d2FpdCkKKwlpZiAod2FpdCkKIAkJcGlkID0ga2VybmVsX3RocmVhZCh3YWl0X2Zvcl9oZWxwZXIsIHN1Yl9pbmZvLAogCQkJCSAgICBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwgU0lHQ0hMRCk7CiAJZWxzZQpAQCAtMjExLDcgKzIxMiw3IEBACiAJaWYgKHBpZCA8IDApIHsKIAkJc3ViX2luZm8tPnJldHZhbCA9IHBpZDsKIAkJY29tcGxldGUoc3ViX2luZm8tPmNvbXBsZXRlKTsKLQl9IGVsc2UgaWYgKCFzdWJfaW5mby0+d2FpdCkKKwl9IGVsc2UgaWYgKCF3YWl0KQogCQljb21wbGV0ZShzdWJfaW5mby0+Y29tcGxldGUpOwogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCA2NGFhYjA4Li4zZjU3ZGZkIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTM5Myw2ICszOTMsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGFkZF9hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICphcCwgc3RydWN0IGtwcm9iZSAqcCkKIHsKIAljb3B5X2twcm9iZShwLCBhcCk7CisJZmx1c2hfaW5zbl9zbG90KGFwKTsKIAlhcC0+YWRkciA9IHAtPmFkZHI7CiAJYXAtPnByZV9oYW5kbGVyID0gYWdncl9wcmVfaGFuZGxlcjsKIAlhcC0+ZmF1bHRfaGFuZGxlciA9IGFnZ3JfZmF1bHRfaGFuZGxlcjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKaW5kZXggMGQzNTVmMi4uZWFiMDQzYyAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKQEAgLTI3LDcgKzI3LDcgQEAKICAqIFN0YWNrLXRyYWNlOiB0aWdodGx5IHBhY2tlZCBhcnJheSBvZiBzdGFjayBiYWNrdHJhY2UKICAqIGFkZHJlc3Nlcy4gUHJvdGVjdGVkIGJ5IHRoZSBoYXNoX2xvY2suCiAgKi8KLSNkZWZpbmUgTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMJMTMxMDcyVUwKKyNkZWZpbmUgTUFYX1NUQUNLX1RSQUNFX0VOVFJJRVMJMjYyMTQ0VUwKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWxsX2xvY2tfY2xhc3NlczsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCBkOGEwYmNhLi44MDEwYjliIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KIAogaW50IHBhbmljX29uX29vcHM7CiBpbnQgdGFpbnRlZDsKQEAgLTE3Miw3ICsxNzMsNyBAQAogCiB2b2lkIGFkZF90YWludCh1bnNpZ25lZCBmbGFnKQogewotCWRlYnVnX2xvY2tzX29mZigpOyAvKiBjYW4ndCB0cnVzdCB0aGUgaW50ZWdyaXR5IG9mIHRoZSBrZXJuZWwgYW55bW9yZSAqLworCWRlYnVnX2xvY2tzID0gMDsgLyogY2FuJ3QgdHJ1c3QgdGhlIGludGVncml0eSBvZiB0aGUga2VybmVsIGFueW1vcmUgKi8KIAl0YWludGVkIHw9IGZsYWc7CiB9CiBFWFBPUlRfU1lNQk9MKGFkZF90YWludCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvS2NvbmZpZyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCmluZGV4IGFlNDRhNzAuLjYxOWVjYWIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9LY29uZmlnCisrKyBiL2tlcm5lbC9wb3dlci9LY29uZmlnCkBAIC01Niw3ICs1Niw3IEBACiAKIGNvbmZpZyBTT0ZUV0FSRV9TVVNQRU5ECiAJYm9vbCAiU29mdHdhcmUgU3VzcGVuZCIKLQlkZXBlbmRzIG9uIFBNICYmIFNXQVAgJiYgKFg4NiAmJiAoIVNNUCB8fCBTVVNQRU5EX1NNUCkpIHx8ICgoRlJWIHx8IFBQQzMyKSAmJiAhU01QKQorCWRlcGVuZHMgb24gUE0gJiYgU1dBUCAmJiAoKFg4NiAmJiAoIVNNUCB8fCBTVVNQRU5EX1NNUCkgJiYgIVg4Nl9QQUUpIHx8ICgoRlJWIHx8IFBQQzMyKSAmJiAhU01QKSkKIAktLS1oZWxwLS0tCiAJICBFbmFibGUgdGhlIHBvc3NpYmlsaXR5IG9mIHN1c3BlbmRpbmcgdGhlIG1hY2hpbmUuCiAJICBJdCBkb2Vzbid0IG5lZWQgQUNQSSBvciBBUE0uCkBAIC03OCw2ICs3OCwxMCBAQAogCiAJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiB0YWtlIGEgbG9vayBhdCA8ZmlsZTpEb2N1bWVudGF0aW9uL3Bvd2VyL3N3c3VzcC50eHQ+LgogCisJICAoRm9yIG5vdywgc3dzdXNwIGlzIGluY29tcGF0aWJsZSB3aXRoIFBBRSBha2EgSElHSE1FTV82NEcgb24gaTM4Ni4KKwkgIHdlIG5lZWQgaWRlbnRpdHkgbWFwcGluZyBmb3IgcmVzdW1lIHRvIHdvcmssIGFuZCB0aGF0IGlzIHRyaXZpYWwKKwkgIHRvIGdldCB3aXRoIDRNQiBwYWdlcywgYnV0IGxlc3MgdGhhbiB0cml2aWFsIG9uIFBBRSkuCisKIGNvbmZpZyBQTV9TVERfUEFSVElUSU9OCiAJc3RyaW5nICJEZWZhdWx0IHJlc3VtZSBwYXJ0aXRpb24iCiAJZGVwZW5kcyBvbiBTT0ZUV0FSRV9TVVNQRU5ECmRpZmYgLS1naXQgYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jIGIva2VybmVsL3Bvd2VyL3Byb2Nlc3MuYwppbmRleCBiMmE1ZjY3Li43MmU3MmQyIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvcHJvY2Vzcy5jCisrKyBiL2tlcm5lbC9wb3dlci9wcm9jZXNzLmMKQEAgLTY2LDEzICs2NiwyNSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgY2FuY2VsX2ZyZWV6aW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGZyZWV6aW5nKHApKSB7CisJCXByX2RlYnVnKCIgIGNsZWFuIHVwOiAlc1xuIiwgcC0+Y29tbSk7CisJCWRvX25vdF9mcmVlemUocCk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CisJCXJlY2FsY19zaWdwZW5kaW5nX3RzayhwKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOworCX0KK30KKwogLyogMCA9IHN1Y2Nlc3MsIGVsc2UgIyBvZiBwcm9jZXNzZXMgdGhhdCB3ZSBmYWlsZWQgdG8gc3RvcCAqLwogaW50IGZyZWV6ZV9wcm9jZXNzZXModm9pZCkKIHsKIAlpbnQgdG9kbywgbnJfdXNlciwgdXNlcl9mcm96ZW47CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqZywgKnA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXByaW50ayggIlN0b3BwaW5nIHRhc2tzOiAiICk7CiAJc3RhcnRfdGltZSA9IGppZmZpZXM7CkBAIC04NSw2ICs5NywxMCBAQAogCQkJCWNvbnRpbnVlOwogCQkJaWYgKGZyb3plbihwKSkKIAkJCQljb250aW51ZTsKKwkJCWlmIChwLT5zdGF0ZSA9PSBUQVNLX1RSQUNFRCAmJiBmcm96ZW4ocC0+cGFyZW50KSkgeworCQkJCWNhbmNlbF9mcmVlemluZyhwKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWlmIChwLT5tbSAmJiAhKHAtPmZsYWdzICYgUEZfQk9SUk9XRURfTU0pKSB7CiAJCQkJLyogVGhlIHRhc2sgaXMgYSB1c2VyLXNwYWNlIG9uZS4KIAkJCQkgKiBGcmVlemUgaXQgdW5sZXNzIHRoZXJlJ3MgYSB2Zm9yayBjb21wbGV0aW9uCkBAIC0xMjYsMTMgKzE0Miw3IEBACiAJCWRvX2VhY2hfdGhyZWFkKGcsIHApIHsKIAkJCWlmIChmcmVlemVhYmxlKHApICYmICFmcm96ZW4ocCkpCiAJCQkJcHJpbnRrKEtFUk5fRVJSICIgICVzXG4iLCBwLT5jb21tKTsKLQkJCWlmIChmcmVlemluZyhwKSkgewotCQkJCXByX2RlYnVnKCIgIGNsZWFuIHVwOiAlc1xuIiwgcC0+Y29tbSk7Ci0JCQkJcC0+ZmxhZ3MgJj0gflBGX0ZSRUVaRTsKLQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcC0+c2lnaGFuZC0+c2lnbG9jaywgZmxhZ3MpOwotCQkJCXJlY2FsY19zaWdwZW5kaW5nX3RzayhwKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwLT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JCQl9CisJCQljYW5jZWxfZnJlZXppbmcocCk7CiAJCX0gd2hpbGVfZWFjaF90aHJlYWQoZywgcCk7CiAJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJcmV0dXJuIHRvZG87CmRpZmYgLS1naXQgYS9rZXJuZWwvcHJpbnRrLmMgYi9rZXJuZWwvcHJpbnRrLmMKaW5kZXggNjVjYTA2OC4uMTE0OTM2NSAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtNzk5LDYgKzc5OSw5IEBACiAJCXVwKCZzZWNvbmRhcnlfY29uc29sZV9zZW0pOwogCQlyZXR1cm47CiAJfQorCisJY29uc29sZV9tYXlfc2NoZWR1bGUgPSAwOworCiAJZm9yICggOyA7ICkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKIAkJd2FrZV9rbG9nZCB8PSBsb2dfc3RhcnQgLSBsb2dfZW5kOwpAQCAtODEyLDcgKzgxNSw2IEBACiAJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAl9CiAJY29uc29sZV9sb2NrZWQgPSAwOwotCWNvbnNvbGVfbWF5X3NjaGVkdWxlID0gMDsKIAl1cCgmY29uc29sZV9zZW0pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvZ2J1Zl9sb2NrLCBmbGFncyk7CiAJaWYgKHdha2Vfa2xvZ2QgJiYgIW9vcHNfaW5fcHJvZ3Jlc3MgJiYgd2FpdHF1ZXVlX2FjdGl2ZSgmbG9nX3dhaXQpKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1cGRhdGUuYyBiL2tlcm5lbC9yY3VwZGF0ZS5jCmluZGV4IDc1OTgwNWMuLjUyM2U0NjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9yY3VwZGF0ZS5jCisrKyBiL2tlcm5lbC9yY3VwZGF0ZS5jCkBAIC0yNDEsMTIgKzI0MSwxNiBAQAogCQluZXh0ID0gcmRwLT5kb25lbGlzdCA9IGxpc3QtPm5leHQ7CiAJCWxpc3QtPmZ1bmMobGlzdCk7CiAJCWxpc3QgPSBuZXh0OwotCQlyZHAtPnFsZW4tLTsKIAkJaWYgKCsrY291bnQgPj0gcmRwLT5ibGltaXQpCiAJCQlicmVhazsKIAl9CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCXJkcC0+cWxlbiAtPSBjb3VudDsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiAJaWYgKHJkcC0+YmxpbWl0ID09IElOVF9NQVggJiYgcmRwLT5xbGVuIDw9IHFsb3dtYXJrKQogCQlyZHAtPmJsaW1pdCA9IGJsaW1pdDsKKwogCWlmICghcmRwLT5kb25lbGlzdCkKIAkJcmRwLT5kb25ldGFpbCA9ICZyZHAtPmRvbmVsaXN0OwogCWVsc2UKQEAgLTU0OCw3ICs1NTIsNyBAQAogCXRhc2tsZXRfaW5pdCgmcGVyX2NwdShyY3VfdGFza2xldCwgY3B1KSwgcmN1X3Byb2Nlc3NfY2FsbGJhY2tzLCAwVUwpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCitzdGF0aWMgaW50IF9fY3B1aW5pdCByY3VfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCiAJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwpAQCAtNTY1LDcgKzU2OSw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIHJjdV9uYiA9IHsKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSByY3VfbmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwJPSByY3VfY3B1X25vdGlmeSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZXNvdXJjZS5jIGIva2VybmVsL3Jlc291cmNlLmMKaW5kZXggMGRkM2E4NS4uNDYyODY0MyAxMDA2NDQKLS0tIGEva2VybmVsL3Jlc291cmNlLmMKKysrIGIva2VybmVsL3Jlc291cmNlLmMKQEAgLTI0NCw2ICsyNDQsNyBAQAogCiAJc3RhcnQgPSByZXMtPnN0YXJ0OwogCWVuZCA9IHJlcy0+ZW5kOworCUJVR19PTihzdGFydCA+PSBlbmQpOwogCiAJcmVhZF9sb2NrKCZyZXNvdXJjZV9sb2NrKTsKIAlmb3IgKHAgPSBpb21lbV9yZXNvdXJjZS5jaGlsZDsgcCA7IHAgPSBwLT5zaWJsaW5nKSB7CkBAIC0yNTQsMTUgKzI1NSwxNyBAQAogCQkJcCA9IE5VTEw7CiAJCQlicmVhazsKIAkJfQotCQlpZiAocC0+c3RhcnQgPj0gc3RhcnQpCisJCWlmICgocC0+ZW5kID49IHN0YXJ0KSAmJiAocC0+c3RhcnQgPCBlbmQpKQogCQkJYnJlYWs7CiAJfQogCXJlYWRfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKIAlpZiAoIXApCiAJCXJldHVybiAtMTsKIAkvKiBjb3B5IGRhdGEgKi8KLQlyZXMtPnN0YXJ0ID0gcC0+c3RhcnQ7Ci0JcmVzLT5lbmQgPSBwLT5lbmQ7CisJaWYgKHJlcy0+c3RhcnQgPCBwLT5zdGFydCkKKwkJcmVzLT5zdGFydCA9IHAtPnN0YXJ0OworCWlmIChyZXMtPmVuZCA+IHAtPmVuZCkKKwkJcmVzLT5lbmQgPSBwLT5lbmQ7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC9ydG11dGV4LmMgYi9rZXJuZWwvcnRtdXRleC5jCmluZGV4IGQyZWYxM2IuLjNlMTNhMWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ydG11dGV4LmMKKysrIGIva2VybmVsL3J0bXV0ZXguYwpAQCAtNyw2ICs3LDggQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBUaW1lc3lzIENvcnAuLCBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAdGltZXN5cy5jb20+CiAgKiAgQ29weXJpZ2h0IChDKSAyMDA1IEtpaG9uIFRlY2hub2xvZ2llcyBJbmMuLCBTdGV2ZW4gUm9zdGVkdAogICogIENvcHlyaWdodCAoQykgMjAwNiBFc2JlbiBOaWVsc2VuCisgKgorICogIFNlZSBEb2N1bWVudGF0aW9uL3J0LW11dGV4LWRlc2lnbi50eHQgZm9yIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCBiNDRiOWE0Li5hMjM0ZmJlIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNDE2MiwxMCArNDE2Miw4IEBACiAJCXJlYWRfdW5sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAJCXJldHVybiAtRVNSQ0g7CiAJfQotCWdldF90YXNrX3N0cnVjdChwKTsKLQlyZWFkX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCXJldHZhbCA9IHNjaGVkX3NldHNjaGVkdWxlcihwLCBwb2xpY3ksICZscGFyYW0pOwotCXB1dF90YXNrX3N0cnVjdChwKTsKKwlyZWFkX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTQ0NTYsOSArNDQ1NCw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IF9fcmVzY2hlZF9sZWdhbCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgX19yZXNjaGVkX2xlZ2FsKGludCBleHBlY3RlZF9wcmVlbXB0X2NvdW50KQogewotCWlmICh1bmxpa2VseShwcmVlbXB0X2NvdW50KCkpKQorCWlmICh1bmxpa2VseShwcmVlbXB0X2NvdW50KCkgIT0gZXhwZWN0ZWRfcHJlZW1wdF9jb3VudCkpCiAJCXJldHVybiAwOwogCWlmICh1bmxpa2VseShzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX1JVTk5JTkcpKQogCQlyZXR1cm4gMDsKQEAgLTQ0ODQsNyArNDQ4Miw3IEBACiAKIGludCBfX3NjaGVkIGNvbmRfcmVzY2hlZCh2b2lkKQogewotCWlmIChuZWVkX3Jlc2NoZWQoKSAmJiBfX3Jlc2NoZWRfbGVnYWwoKSkgeworCWlmIChuZWVkX3Jlc2NoZWQoKSAmJiBfX3Jlc2NoZWRfbGVnYWwoMCkpIHsKIAkJX19jb25kX3Jlc2NoZWQoKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNDUxMCw3ICs0NTA4LDcgQEAKIAkJcmV0ID0gMTsKIAkJc3Bpbl9sb2NrKGxvY2spOwogCX0KLQlpZiAobmVlZF9yZXNjaGVkKCkgJiYgX19yZXNjaGVkX2xlZ2FsKCkpIHsKKwlpZiAobmVlZF9yZXNjaGVkKCkgJiYgX19yZXNjaGVkX2xlZ2FsKDEpKSB7CiAJCXNwaW5fcmVsZWFzZSgmbG9jay0+ZGVwX21hcCwgMSwgX1RISVNfSVBfKTsKIAkJX3Jhd19zcGluX3VubG9jayhsb2NrKTsKIAkJcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOwpAQCAtNDUyNiw3ICs0NTI0LDcgQEAKIHsKIAlCVUdfT04oIWluX3NvZnRpcnEoKSk7CiAKLQlpZiAobmVlZF9yZXNjaGVkKCkgJiYgX19yZXNjaGVkX2xlZ2FsKCkpIHsKKwlpZiAobmVlZF9yZXNjaGVkKCkgJiYgX19yZXNjaGVkX2xlZ2FsKDApKSB7CiAJCXJhd19sb2NhbF9pcnFfZGlzYWJsZSgpOwogCQlfbG9jYWxfYmhfZW5hYmxlKCk7CiAJCXJhd19sb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC02NDk0LDcgKzY0OTIsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05VTU5PREVTOyBpKyspCiAJCWluaXRfbnVtYV9zY2hlZF9ncm91cHNfcG93ZXIoc2NoZWRfZ3JvdXBfbm9kZXNbaV0pOwogCi0JaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihzY2hlZF9ncm91cF9hbGxub2Rlcyk7CisJaWYgKHNjaGVkX2dyb3VwX2FsbG5vZGVzKSB7CisJCWludCBncm91cCA9IGNwdV90b19hbGxub2Rlc19ncm91cChmaXJzdF9jcHUoKmNwdV9tYXApKTsKKwkJc3RydWN0IHNjaGVkX2dyb3VwICpzZyA9ICZzY2hlZF9ncm91cF9hbGxub2Rlc1tncm91cF07CisKKwkJaW5pdF9udW1hX3NjaGVkX2dyb3Vwc19wb3dlcihzZyk7CisJfQogI2VuZGlmCiAKIAkvKiBBdHRhY2ggdGhlIGRvbWFpbnMgKi8KQEAgLTY3NjEsNiArNjc2NCwxMSBAQAogCX0KIAogCXNldF9sb2FkX3dlaWdodCgmaW5pdF90YXNrKTsKKworI2lmZGVmIENPTkZJR19SVF9NVVRFWEVTCisJcGxpc3RfaGVhZF9pbml0KCZpbml0X3Rhc2sucGlfd2FpdGVycywgJmluaXRfdGFzay5waV9sb2NrKTsKKyNlbmRpZgorCiAJLyoKIAkgKiBUaGUgYm9vdCBpZGxlIHRocmVhZCBkb2VzIGxhenkgTU1VIHN3aXRjaGluZyBhcyB3ZWxsOgogCSAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDdmZTg3NGQuLmJmZGI1Njg2IDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC03OTEsMjIgKzc5MSwzMSBAQAogLyoKICAqIEZvcmNlIGEgc2lnbmFsIHRoYXQgdGhlIHByb2Nlc3MgY2FuJ3QgaWdub3JlOiBpZiBuZWNlc3NhcnkKICAqIHdlIHVuYmxvY2sgdGhlIHNpZ25hbCBhbmQgY2hhbmdlIGFueSBTSUdfSUdOIHRvIFNJR19ERkwuCisgKgorICogTm90ZTogSWYgd2UgdW5ibG9jayB0aGUgc2lnbmFsLCB3ZSBhbHdheXMgcmVzZXQgaXQgdG8gU0lHX0RGTCwKKyAqIHNpbmNlIHdlIGRvIG5vdCB3YW50IHRvIGhhdmUgYSBzaWduYWwgaGFuZGxlciB0aGF0IHdhcyBibG9ja2VkCisgKiBiZSBpbnZva2VkIHdoZW4gdXNlciBzcGFjZSBoYWQgZXhwbGljaXRseSBibG9ja2VkIGl0LgorICoKKyAqIFdlIGRvbid0IHdhbnQgdG8gaGF2ZSByZWN1cnNpdmUgU0lHU0VHVidzIGV0YywgZm9yIGV4YW1wbGUuCiAgKi8KLQogaW50CiBmb3JjZV9zaWdfaW5mbyhpbnQgc2lnLCBzdHJ1Y3Qgc2lnaW5mbyAqaW5mbywgc3RydWN0IHRhc2tfc3RydWN0ICp0KQogewogCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOwotCWludCByZXQ7CisJaW50IHJldCwgYmxvY2tlZCwgaWdub3JlZDsKKwlzdHJ1Y3Qga19zaWdhY3Rpb24gKmFjdGlvbjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7Ci0JaWYgKHQtPnNpZ2hhbmQtPmFjdGlvbltzaWctMV0uc2Euc2FfaGFuZGxlciA9PSBTSUdfSUdOKSB7Ci0JCXQtPnNpZ2hhbmQtPmFjdGlvbltzaWctMV0uc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CisJYWN0aW9uID0gJnQtPnNpZ2hhbmQtPmFjdGlvbltzaWctMV07CisJaWdub3JlZCA9IGFjdGlvbi0+c2Euc2FfaGFuZGxlciA9PSBTSUdfSUdOOworCWJsb2NrZWQgPSBzaWdpc21lbWJlcigmdC0+YmxvY2tlZCwgc2lnKTsKKwlpZiAoYmxvY2tlZCB8fCBpZ25vcmVkKSB7CisJCWFjdGlvbi0+c2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CisJCWlmIChibG9ja2VkKSB7CisJCQlzaWdkZWxzZXQoJnQtPmJsb2NrZWQsIHNpZyk7CisJCQlyZWNhbGNfc2lncGVuZGluZ190c2sodCk7CisJCX0KIAl9Ci0JaWYgKHNpZ2lzbWVtYmVyKCZ0LT5ibG9ja2VkLCBzaWcpKSB7Ci0JCXNpZ2RlbHNldCgmdC0+YmxvY2tlZCwgc2lnKTsKLQl9Ci0JcmVjYWxjX3NpZ3BlbmRpbmdfdHNrKHQpOwogCXJldCA9IHNwZWNpZmljX3NlbmRfc2lnX2luZm8oc2lnLCBpbmZvLCB0KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0LT5zaWdoYW5kLT5zaWdsb2NrLCBmbGFncyk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0aXJxLmMgYi9rZXJuZWwvc29mdGlycS5jCmluZGV4IDBmMDhhODQuLjM3ODljYTkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0aXJxLmMKKysrIGIva2VybmVsL3NvZnRpcnEuYwpAQCAtNjUsNiArNjUsNyBAQAogICogVGhpcyBvbmUgaXMgZm9yIHNvZnRpcnEuYy1pbnRlcm5hbCB1c2UsCiAgKiB3aGVyZSBoYXJkaXJxcyBhcmUgZGlzYWJsZWQgbGVnaXRpbWF0ZWx5OgogICovCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiBzdGF0aWMgdm9pZCBfX2xvY2FsX2JoX2Rpc2FibGUodW5zaWduZWQgbG9uZyBpcCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtODAsNiArODEsMTMgQEAKIAkJdHJhY2Vfc29mdGlycXNfb2ZmKGlwKTsKIAlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQorI2Vsc2UgLyogIUNPTkZJR19UUkFDRV9JUlFGTEFHUyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fbG9jYWxfYmhfZGlzYWJsZSh1bnNpZ25lZCBsb25nIGlwKQoreworCWFkZF9wcmVlbXB0X2NvdW50KFNPRlRJUlFfT0ZGU0VUKTsKKwliYXJyaWVyKCk7Cit9CisjZW5kaWYgLyogQ09ORklHX1RSQUNFX0lSUUZMQUdTICovCiAKIHZvaWQgbG9jYWxfYmhfZGlzYWJsZSh2b2lkKQogewpAQCAtMTIxLDEyICsxMjksMTYgQEAKIAogdm9pZCBsb2NhbF9iaF9lbmFibGUodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJV0FSTl9PTl9PTkNFKGluX2lycSgpKTsKKyNlbmRpZgogCVdBUk5fT05fT05DRShpcnFzX2Rpc2FibGVkKCkpOwogCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworI2VuZGlmCiAJLyoKIAkgKiBBcmUgc29mdGlycXMgZ29pbmcgdG8gYmUgdHVybmVkIG9uIG5vdzoKIAkgKi8KQEAgLTE0MiwxOCArMTU0LDIyIEBACiAJCWRvX3NvZnRpcnEoKTsKIAogCWRlY19wcmVlbXB0X2NvdW50KCk7CisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCiAJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGxvY2FsX2JoX2VuYWJsZSk7CiAKIHZvaWQgbG9jYWxfYmhfZW5hYmxlX2lwKHVuc2lnbmVkIGxvbmcgaXApCiB7CisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCVdBUk5fT05fT05DRShpbl9pcnEoKSk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisjZW5kaWYKIAkvKgogCSAqIEFyZSBzb2Z0aXJxcyBnb2luZyB0byBiZSB0dXJuZWQgb24gbm93OgogCSAqLwpAQCAtMTY5LDcgKzE4NSw5IEBACiAJCWRvX3NvZnRpcnEoKTsKIAogCWRlY19wcmVlbXB0X2NvdW50KCk7CisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCiAJcHJlZW1wdF9jaGVja19yZXNjaGVkKCk7CiB9CiBFWFBPUlRfU1lNQk9MKGxvY2FsX2JoX2VuYWJsZV9pcCk7CkBAIC01NDcsNyArNTY1LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAorc3RhdGljIGludCBfX2NwdWluaXQgY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiAJCQkJICB2b2lkICpoY3B1KQogewpAQCAtNTg3LDcgKzYwNSw3IEBACiAJcmV0dXJuIE5PVElGWV9PSzsKIH0KIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2RldmluaXRkYXRhIGNwdV9uZmIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgY3B1X25mYiA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGNwdV9jYWxsYmFjawogfTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NvZnRsb2NrdXAuYyBiL2tlcm5lbC9zb2Z0bG9ja3VwLmMKaW5kZXggNmI3NmNhYS4uMDNlNmEyYiAxMDA2NDQKLS0tIGEva2VybmVsL3NvZnRsb2NrdXAuYworKysgYi9rZXJuZWwvc29mdGxvY2t1cC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIC8qCiAgKiBDcmVhdGUvZGVzdHJveSB3YXRjaGRvZyB0aHJlYWRzIGFzIENQVXMgY29tZSBhbmQgZ286CiAgKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0CitzdGF0aWMgaW50IF9fY3B1aW5pdAogY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlpbnQgaG90Y3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKQEAgLTE0Miw3ICsxNDIsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSBjcHVfbmZiID0geworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIGNwdV9uZmIgPSB7CiAJLm5vdGlmaWVyX2NhbGwgPSBjcHVfY2FsbGJhY2sKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zcGlubG9jay5jIGIva2VybmVsL3NwaW5sb2NrLmMKaW5kZXggYmZkNmFkOS4uZmI1MjRiMCAxMDA2NDQKLS0tIGEva2VybmVsL3NwaW5sb2NrLmMKKysrIGIva2VybmVsL3NwaW5sb2NrLmMKQEAgLTcyLDcgKzcyLDcgQEAKICAqIG5vdCByZS1lbmFibGVkIGR1cmluZyBsb2NrLWFjcXVpcmUgKHdoaWNoIHRoZSBwcmVlbXB0LXNwaW4tb3BzIGRvKToKICAqLwogI2lmICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKSB8fCAhZGVmaW5lZChDT05GSUdfU01QKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfUFJPVkVfTE9DS0lORykKKwlkZWZpbmVkKENPTkZJR19ERUJVR19MT0NLX0FMTE9DKQogCiB2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zdG9wX21hY2hpbmUuYyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwppbmRleCBkY2ZiNWQ3Li41MWNhY2QxIDEwMDY0NAotLS0gYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKKysrIGIva2VybmVsL3N0b3BfbWFjaGluZS5jCkBAIC0xMTEsNyArMTExLDYgQEAKIAkvKiBJZiBzb21lIGZhaWxlZCwga2lsbCB0aGVtIGFsbC4gKi8KIAlpZiAocmV0IDwgMCkgewogCQlzdG9wbWFjaGluZV9zZXRfc3RhdGUoU1RPUE1BQ0hJTkVfRVhJVCk7Ci0JCXVwKCZzdG9wbWFjaGluZV9tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQogCmRpZmYgLS1naXQgYS9rZXJuZWwvdGFza3N0YXRzLmMgYi9rZXJuZWwvdGFza3N0YXRzLmMKaW5kZXggZjQ1MTc5Yy4uZTc4MTg3NiAxMDA2NDQKLS0tIGEva2VybmVsL3Rhc2tzdGF0cy5jCisrKyBiL2tlcm5lbC90YXNrc3RhdHMuYwpAQCAtMTIxLDQ2ICsxMjEsNDUgQEAKIC8qCiAgKiBTZW5kIHRhc2tzdGF0cyBkYXRhIGluIEBza2IgdG8gbGlzdGVuZXJzIHJlZ2lzdGVyZWQgZm9yIEBjcHUncyBleGl0IGRhdGEKICAqLwotc3RhdGljIGludCBzZW5kX2NwdV9saXN0ZW5lcnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGNwdSkKK3N0YXRpYyB2b2lkIHNlbmRfY3B1X2xpc3RlbmVycyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgY3B1KQogewogCXN0cnVjdCBnZW5sbXNnaGRyICpnZW5saGRyID0gbmxtc2dfZGF0YSgoc3RydWN0IG5sbXNnaGRyICopc2tiLT5kYXRhKTsKIAlzdHJ1Y3QgbGlzdGVuZXJfbGlzdCAqbGlzdGVuZXJzOwogCXN0cnVjdCBsaXN0ZW5lciAqcywgKnRtcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25leHQsICpza2JfY3VyID0gc2tiOwogCXZvaWQgKnJlcGx5ID0gZ2VubG1zZ19kYXRhKGdlbmxoZHIpOwotCWludCByYywgcmV0LCBkZWxjb3VudCA9IDA7CisJaW50IHJjLCBkZWxjb3VudCA9IDA7CiAKIAlyYyA9IGdlbmxtc2dfZW5kKHNrYiwgcmVwbHkpOwogCWlmIChyYyA8IDApIHsKIAkJbmxtc2dfZnJlZShza2IpOwotCQlyZXR1cm4gcmM7CisJCXJldHVybjsKIAl9CiAKIAlyYyA9IDA7CiAJbGlzdGVuZXJzID0gJnBlcl9jcHUobGlzdGVuZXJfYXJyYXksIGNwdSk7CiAJZG93bl9yZWFkKCZsaXN0ZW5lcnMtPnNlbSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHMsIHRtcCwgJmxpc3RlbmVycy0+bGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJmxpc3RlbmVycy0+bGlzdCwgbGlzdCkgewogCQlza2JfbmV4dCA9IE5VTEw7CiAJCWlmICghbGlzdF9pc19sYXN0KCZzLT5saXN0LCAmbGlzdGVuZXJzLT5saXN0KSkgewogCQkJc2tiX25leHQgPSBza2JfY2xvbmUoc2tiX2N1ciwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIXNrYl9uZXh0KSB7Ci0JCQkJbmxtc2dfZnJlZShza2JfY3VyKTsKLQkJCQlyYyA9IC1FTk9NRU07CisJCQlpZiAoIXNrYl9uZXh0KQogCQkJCWJyZWFrOwotCQkJfQogCQl9Ci0JCXJldCA9IGdlbmxtc2dfdW5pY2FzdChza2JfY3VyLCBzLT5waWQpOwotCQlpZiAocmV0ID09IC1FQ09OTlJFRlVTRUQpIHsKKwkJcmMgPSBnZW5sbXNnX3VuaWNhc3Qoc2tiX2N1ciwgcy0+cGlkKTsKKwkJaWYgKHJjID09IC1FQ09OTlJFRlVTRUQpIHsKIAkJCXMtPnZhbGlkID0gMDsKIAkJCWRlbGNvdW50Kys7Ci0JCQlyYyA9IHJldDsKIAkJfQogCQlza2JfY3VyID0gc2tiX25leHQ7CiAJfQogCXVwX3JlYWQoJmxpc3RlbmVycy0+c2VtKTsKIAorCWlmIChza2JfY3VyKQorCQlubG1zZ19mcmVlKHNrYl9jdXIpOworCiAJaWYgKCFkZWxjb3VudCkKLQkJcmV0dXJuIHJjOworCQlyZXR1cm47CiAKIAkvKiBEZWxldGUgaW52YWxpZGF0ZWQgZW50cmllcyAqLwogCWRvd25fd3JpdGUoJmxpc3RlbmVycy0+c2VtKTsKQEAgLTE3MSwxMyArMTcwLDEyIEBACiAJCX0KIAl9CiAJdXBfd3JpdGUoJmxpc3RlbmVycy0+c2VtKTsKLQlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgZmlsbF9waWQocGlkX3QgcGlkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBpZHRzaywKIAkJc3RydWN0IHRhc2tzdGF0cyAqc3RhdHMpCiB7Ci0JaW50IHJjOworCWludCByYyA9IDA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBwaWR0c2s7CiAKIAlpZiAoIXBpZHRzaykgewpAQCAtMTk2LDEyICsxOTQsMTAgQEAKIAkgKiBFYWNoIGFjY291bnRpbmcgc3Vic3lzdGVtIGFkZHMgY2FsbHMgdG8gaXRzIGZ1bmN0aW9ucyB0bwogCSAqIGZpbGwgaW4gcmVsZXZhbnQgcGFydHMgb2Ygc3RydWN0IHRhc2tzdHNhdHMgYXMgZm9sbG93cwogCSAqCi0JICoJcmMgPSBwZXItdGFzay1mb28oc3RhdHMsIHRzayk7Ci0JICoJaWYgKHJjKQotCSAqCQlnb3RvIGVycjsKKwkgKglwZXItdGFzay1mb28oc3RhdHMsIHRzayk7CiAJICovCiAKLQlyYyA9IGRlbGF5YWNjdF9hZGRfdHNrKHN0YXRzLCB0c2spOworCWRlbGF5YWNjdF9hZGRfdHNrKHN0YXRzLCB0c2spOwogCXN0YXRzLT52ZXJzaW9uID0gVEFTS1NUQVRTX1ZFUlNJT047CiAKIAkvKiBEZWZpbmUgZXJyOiBsYWJlbCBoZXJlIGlmIG5lZWRlZCAqLwpkaWZmIC0tZ2l0IGEva2VybmVsL3RpbWVyLmMgYi9rZXJuZWwvdGltZXIuYwppbmRleCAwNTgwOWMyLi4xZDdkZDYyIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZXIuYworKysgYi9rZXJuZWwvdGltZXIuYwpAQCAtODQsNyArODQsNyBAQAogCiB0dmVjX2Jhc2VfdCBib290X3R2ZWNfYmFzZXM7CiBFWFBPUlRfU1lNQk9MKGJvb3RfdHZlY19iYXNlcyk7Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUodHZlY19iYXNlX3QgKiwgdHZlY19iYXNlcykgPSB7ICZib290X3R2ZWNfYmFzZXMgfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh0dmVjX2Jhc2VfdCAqLCB0dmVjX2Jhc2VzKSA9ICZib290X3R2ZWNfYmFzZXM7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcnVubmluZ190aW1lcih0dmVjX2Jhc2VfdCAqYmFzZSwKIAkJCQkJc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQpAQCAtNDA4LDcgKzQwOCw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIGNhc2NhZGVzIGFsbCB2ZWN0b3JzIGFuZCBleGVjdXRlcyBhbGwgZXhwaXJlZCB0aW1lcgogICogdmVjdG9ycy4KICAqLwotI2RlZmluZSBJTkRFWChOKSAoYmFzZS0+dGltZXJfamlmZmllcyA+PiAoVFZSX0JJVFMgKyBOICogVFZOX0JJVFMpKSAmIFRWTl9NQVNLCisjZGVmaW5lIElOREVYKE4pICgoYmFzZS0+dGltZXJfamlmZmllcyA+PiAoVFZSX0JJVFMgKyAoTikgKiBUVk5fQklUUykpICYgVFZOX01BU0spCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX3J1bl90aW1lcnModHZlY19iYXNlX3QgKmJhc2UpCiB7CkBAIC0xMzI0LDQ2ICsxMzI0LDE5IEBACiB9CiAKIC8qCi0gKiBBY2Nlc3NpbmcgLT5ncm91cF9sZWFkZXItPnJlYWxfcGFyZW50IGlzIG5vdCBTTVAtc2FmZSwgaXQgY291bGQKLSAqIGNoYW5nZSBmcm9tIHVuZGVyIHVzLiBIb3dldmVyLCByYXRoZXIgdGhhbiBnZXR0aW5nIGFueSBsb2NrCi0gKiB3ZSBjYW4gdXNlIGFuIG9wdGltaXN0aWMgYWxnb3JpdGhtOiBnZXQgdGhlIHBhcmVudAotICogcGlkLCBhbmQgZ28gYmFjayBhbmQgY2hlY2sgdGhhdCB0aGUgcGFyZW50IGlzIHN0aWxsCi0gKiB0aGUgc2FtZS4gSWYgaXQgaGFzIGNoYW5nZWQgKHdoaWNoIGlzIGV4dHJlbWVseSB1bmxpa2VseQotICogaW5kZWVkKSwgd2UganVzdCB0cnkgYWdhaW4uLgotICoKLSAqIE5PVEUhIFRoaXMgZGVwZW5kcyBvbiB0aGUgZmFjdCB0aGF0IGV2ZW4gaWYgd2UgX2RvXwotICogZ2V0IGFuIG9sZCB2YWx1ZSBvZiAicGFyZW50Iiwgd2UgY2FuIGhhcHBpbHkgZGVyZWZlcmVuY2UKLSAqIHRoZSBwb2ludGVyIChpdCB3YXMgYW5kIHJlbWFpbnMgYSBkZXJlZmVyZW5jYWJsZSBrZXJuZWwgcG9pbnRlcgotICogbm8gbWF0dGVyIHdoYXQpOiB3ZSBqdXN0IGNhbid0IG5lY2Vzc2FyaWx5IHRydXN0IHRoZSByZXN1bHQKLSAqIHVudGlsIHdlIGtub3cgdGhhdCB0aGUgcGFyZW50IHBvaW50ZXIgaXMgdmFsaWQuCi0gKgotICogTk9URTI6IC0+Z3JvdXBfbGVhZGVyIG5ldmVyIGNoYW5nZXMgZnJvbSB1bmRlciB1cy4KKyAqIEFjY2Vzc2luZyAtPnJlYWxfcGFyZW50IGlzIG5vdCBTTVAtc2FmZSwgaXQgY291bGQKKyAqIGNoYW5nZSBmcm9tIHVuZGVyIHVzLiBIb3dldmVyLCB3ZSBjYW4gdXNlIGEgc3RhbGUKKyAqIHZhbHVlIG9mIC0+cmVhbF9wYXJlbnQgdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzZWUKKyAqIHJlbGVhc2VfdGFzaygpLT5jYWxsX3JjdShkZWxheWVkX3B1dF90YXNrX3N0cnVjdCkuCiAgKi8KIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cHBpZCh2b2lkKQogewogCWludCBwaWQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICptZSA9IGN1cnJlbnQ7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICpwYXJlbnQ7CiAKLQlwYXJlbnQgPSBtZS0+Z3JvdXBfbGVhZGVyLT5yZWFsX3BhcmVudDsKLQlmb3IgKDs7KSB7Ci0JCXBpZCA9IHBhcmVudC0+dGdpZDsKLSNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BSRUVNUFQpCi17Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkID0gcGFyZW50OworCXJjdV9yZWFkX2xvY2soKTsKKwlwaWQgPSByY3VfZGVyZWZlcmVuY2UoY3VycmVudC0+cmVhbF9wYXJlbnQpLT50Z2lkOworCXJjdV9yZWFkX3VubG9jaygpOwogCi0JCS8qCi0JCSAqIE1ha2Ugc3VyZSB3ZSByZWFkIHRoZSBwaWQgYmVmb3JlIHJlLXJlYWRpbmcgdGhlCi0JCSAqIHBhcmVudCBwb2ludGVyOgotCQkgKi8KLQkJc21wX3JtYigpOwotCQlwYXJlbnQgPSBtZS0+Z3JvdXBfbGVhZGVyLT5yZWFsX3BhcmVudDsKLQkJaWYgKG9sZCAhPSBwYXJlbnQpCi0JCQljb250aW51ZTsKLX0KLSNlbmRpZgotCQlicmVhazsKLQl9CiAJcmV0dXJuIHBpZDsKIH0KIApAQCAtMTY4OCw3ICsxNjYxLDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfSE9UUExVR19DUFUgKi8KIAotc3RhdGljIGludCBfX2RldmluaXQgdGltZXJfY3B1X25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCitzdGF0aWMgaW50IF9fY3B1aW5pdCB0aW1lcl9jcHVfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqc2VsZiwKIAkJCQl1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAlsb25nIGNwdSA9IChsb25nKWhjcHU7CkBAIC0xNzA4LDcgKzE2ODEsNyBAQAogCXJldHVybiBOT1RJRllfT0s7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19kZXZpbml0ZGF0YSB0aW1lcnNfbmIgPSB7CitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIF9fY3B1aW5pdGRhdGEgdGltZXJzX25iID0gewogCS5ub3RpZmllcl9jYWxsCT0gdGltZXJfY3B1X25vdGlmeSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC93b3JrcXVldWUuYyBiL2tlcm5lbC93b3JrcXVldWUuYwppbmRleCBlZWJiMWQ4Li44MzVmZTI4IDEwMDY0NAotLS0gYS9rZXJuZWwvd29ya3F1ZXVlLmMKKysrIGIva2VybmVsL3dvcmtxdWV1ZS5jCkBAIC02OCw3ICs2OCw3IEBACiAKIC8qIEFsbCB0aGUgcGVyLWNwdSB3b3JrcXVldWVzIG9uIHRoZSBzeXN0ZW0sIGZvciBob3RwbHVnIGNwdSB0byBhZGQvcmVtb3ZlCiAgICB0aHJlYWRzIHRvIGVhY2ggb25lIGFzIGNwdXMgY29tZS9nby4gKi8KLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sod29ya3F1ZXVlX2xvY2spOworc3RhdGljIERFRklORV9NVVRFWCh3b3JrcXVldWVfbXV0ZXgpOwogc3RhdGljIExJU1RfSEVBRCh3b3JrcXVldWVzKTsKIAogc3RhdGljIGludCBzaW5nbGV0aHJlYWRfY3B1OwpAQCAtOTMsOSArOTMsMTIgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjd3EtPmxvY2ssIGZsYWdzKTsKIH0KIAotLyoKLSAqIFF1ZXVlIHdvcmsgb24gYSB3b3JrcXVldWUuIFJldHVybiBub24temVybyBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5Ci0gKiBhZGRlZC4KKy8qKgorICogcXVldWVfd29yayAtIHF1ZXVlIHdvcmsgb24gYSB3b3JrcXVldWUKKyAqIEB3cTogd29ya3F1ZXVlIHRvIHVzZQorICogQHdvcms6IHdvcmsgdG8gcXVldWUKKyAqCisgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIGl0IHdhcyBzdWNjZXNzZnVsbHkgYWRkZWQuCiAgKgogICogV2UgcXVldWUgdGhlIHdvcmsgdG8gdGhlIENQVSBpdCB3YXMgc3VibWl0dGVkLCBidXQgdGhlcmUgaXMgbm8KICAqIGd1YXJhbnRlZSB0aGF0IGl0IHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoYXQgQ1BVLgpAQCAtMTI4LDYgKzEzMSwxNCBAQAogCV9fcXVldWVfd29yayhwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpLCB3b3JrKTsKIH0KIAorLyoqCisgKiBxdWV1ZV9kZWxheWVkX3dvcmsgLSBxdWV1ZSB3b3JrIG9uIGEgd29ya3F1ZXVlIGFmdGVyIGRlbGF5CisgKiBAd3E6IHdvcmtxdWV1ZSB0byB1c2UKKyAqIEB3b3JrOiB3b3JrIHRvIHF1ZXVlCisgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCisgKgorICogUmV0dXJucyBub24temVybyBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICovCiBpbnQgZmFzdGNhbGwgcXVldWVfZGVsYXllZF93b3JrKHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKIAkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKQEAgLTE1MCw2ICsxNjEsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHF1ZXVlX2RlbGF5ZWRfd29yayk7CiAKKy8qKgorICogcXVldWVfZGVsYXllZF93b3JrX29uIC0gcXVldWUgd29yayBvbiBzcGVjaWZpYyBDUFUgYWZ0ZXIgZGVsYXkKKyAqIEBjcHU6IENQVSBudW1iZXIgdG8gZXhlY3V0ZSB3b3JrIG9uCisgKiBAd3E6IHdvcmtxdWV1ZSB0byB1c2UKKyAqIEB3b3JrOiB3b3JrIHRvIHF1ZXVlCisgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQgYmVmb3JlIHF1ZXVlaW5nCisgKgorICogUmV0dXJucyBub24temVybyBpZiBpdCB3YXMgc3VjY2Vzc2Z1bGx5IGFkZGVkLgorICovCiBpbnQgcXVldWVfZGVsYXllZF93b3JrX29uKGludCBjcHUsIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cSwKIAkJCXN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaywgdW5zaWduZWQgbG9uZyBkZWxheSkKIHsKQEAgLTI3NSw4ICsyOTUsOSBAQAogCX0KIH0KIAotLyoKKy8qKgogICogZmx1c2hfd29ya3F1ZXVlIC0gZW5zdXJlIHRoYXQgYW55IHNjaGVkdWxlZCB3b3JrIGhhcyBydW4gdG8gY29tcGxldGlvbi4KKyAqIEB3cTogd29ya3F1ZXVlIHRvIGZsdXNoCiAgKgogICogRm9yY2VzIGV4ZWN1dGlvbiBvZiB0aGUgd29ya3F1ZXVlIGFuZCBibG9ja3MgdW50aWwgaXRzIGNvbXBsZXRpb24uCiAgKiBUaGlzIGlzIHR5cGljYWxseSB1c2VkIGluIGRyaXZlciBzaHV0ZG93biBoYW5kbGVycy4KQEAgLTI5OSwxMCArMzIwLDEwIEBACiAJfSBlbHNlIHsKIAkJaW50IGNwdTsKIAotCQlsb2NrX2NwdV9ob3RwbHVnKCk7CisJCW11dGV4X2xvY2soJndvcmtxdWV1ZV9tdXRleCk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQkJZmx1c2hfY3B1X3dvcmtxdWV1ZShwZXJfY3B1X3B0cih3cS0+Y3B1X3dxLCBjcHUpKTsKLQkJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChmbHVzaF93b3JrcXVldWUpOwpAQCAtMzUwLDggKzM3MSw3IEBACiAJfQogCiAJd3EtPm5hbWUgPSBuYW1lOwotCS8qIFdlIGRvbid0IG5lZWQgdGhlIGRpc3RyYWN0aW9uIG9mIENQVXMgYXBwZWFyaW5nIGFuZCB2YW5pc2hpbmcuICovCi0JbG9ja19jcHVfaG90cGx1ZygpOworCW11dGV4X2xvY2soJndvcmtxdWV1ZV9tdXRleCk7CiAJaWYgKHNpbmdsZXRocmVhZCkgewogCQlJTklUX0xJU1RfSEVBRCgmd3EtPmxpc3QpOwogCQlwID0gY3JlYXRlX3dvcmtxdWV1ZV90aHJlYWQod3EsIHNpbmdsZXRocmVhZF9jcHUpOwpAQCAtMzYwLDkgKzM4MCw3IEBACiAJCWVsc2UKIAkJCXdha2VfdXBfcHJvY2VzcyhwKTsKIAl9IGVsc2UgewotCQlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKIAkJbGlzdF9hZGQoJndxLT5saXN0LCAmd29ya3F1ZXVlcyk7Ci0JCXNwaW5fdW5sb2NrKCZ3b3JrcXVldWVfbG9jayk7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiAJCQlwID0gY3JlYXRlX3dvcmtxdWV1ZV90aHJlYWQod3EsIGNwdSk7CiAJCQlpZiAocCkgewpAQCAtMzcyLDcgKzM5MCw3IEBACiAJCQkJZGVzdHJveSA9IDE7CiAJCX0KIAl9Ci0JdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwogCiAJLyoKIAkgKiBXYXMgdGhlcmUgYW55IGVycm9yIGR1cmluZyBzdGFydHVwPyBJZiB5ZXMgdGhlbiBjbGVhbiB1cDoKQEAgLTQwMCw2ICs0MTgsMTIgQEAKIAkJa3RocmVhZF9zdG9wKHApOwogfQogCisvKioKKyAqIGRlc3Ryb3lfd29ya3F1ZXVlIC0gc2FmZWx5IHRlcm1pbmF0ZSBhIHdvcmtxdWV1ZQorICogQHdxOiB0YXJnZXQgd29ya3F1ZXVlCisgKgorICogU2FmZWx5IGRlc3Ryb3kgYSB3b3JrcXVldWUuIEFsbCB3b3JrIGN1cnJlbnRseSBwZW5kaW5nIHdpbGwgYmUgZG9uZSBmaXJzdC4KKyAqLwogdm9pZCBkZXN0cm95X3dvcmtxdWV1ZShzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3EpCiB7CiAJaW50IGNwdTsKQEAgLTQwNywxNyArNDMxLDE1IEBACiAJZmx1c2hfd29ya3F1ZXVlKHdxKTsKIAogCS8qIFdlIGRvbid0IG5lZWQgdGhlIGRpc3RyYWN0aW9uIG9mIENQVXMgYXBwZWFyaW5nIGFuZCB2YW5pc2hpbmcuICovCi0JbG9ja19jcHVfaG90cGx1ZygpOworCW11dGV4X2xvY2soJndvcmtxdWV1ZV9tdXRleCk7CiAJaWYgKGlzX3NpbmdsZV90aHJlYWRlZCh3cSkpCiAJCWNsZWFudXBfd29ya3F1ZXVlX3RocmVhZCh3cSwgc2luZ2xldGhyZWFkX2NwdSk7CiAJZWxzZSB7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQogCQkJY2xlYW51cF93b3JrcXVldWVfdGhyZWFkKHdxLCBjcHUpOwotCQlzcGluX2xvY2soJndvcmtxdWV1ZV9sb2NrKTsKIAkJbGlzdF9kZWwoJndxLT5saXN0KTsKLQkJc3Bpbl91bmxvY2soJndvcmtxdWV1ZV9sb2NrKTsKIAl9Ci0JdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwogCWZyZWVfcGVyY3B1KHdxLT5jcHVfd3EpOwogCWtmcmVlKHdxKTsKIH0KQEAgLTQyNSwxOCArNDQ3LDQxIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa2V2ZW50ZF93cTsKIAorLyoqCisgKiBzY2hlZHVsZV93b3JrIC0gcHV0IHdvcmsgdGFzayBpbiBnbG9iYWwgd29ya3F1ZXVlCisgKiBAd29yazogam9iIHRvIGJlIGRvbmUKKyAqCisgKiBUaGlzIHB1dHMgYSBqb2IgaW4gdGhlIGtlcm5lbC1nbG9iYWwgd29ya3F1ZXVlLgorICovCiBpbnQgZmFzdGNhbGwgc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJcmV0dXJuIHF1ZXVlX3dvcmsoa2V2ZW50ZF93cSwgd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKHNjaGVkdWxlX3dvcmspOwogCisvKioKKyAqIHNjaGVkdWxlX2RlbGF5ZWRfd29yayAtIHB1dCB3b3JrIHRhc2sgaW4gZ2xvYmFsIHdvcmtxdWV1ZSBhZnRlciBkZWxheQorICogQHdvcms6IGpvYiB0byBiZSBkb25lCisgKiBAZGVsYXk6IG51bWJlciBvZiBqaWZmaWVzIHRvIHdhaXQKKyAqCisgKiBBZnRlciB3YWl0aW5nIGZvciBhIGdpdmVuIHRpbWUgdGhpcyBwdXRzIGEgam9iIGluIHRoZSBrZXJuZWwtZ2xvYmFsCisgKiB3b3JrcXVldWUuCisgKi8KIGludCBmYXN0Y2FsbCBzY2hlZHVsZV9kZWxheWVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrLCB1bnNpZ25lZCBsb25nIGRlbGF5KQogewogCXJldHVybiBxdWV1ZV9kZWxheWVkX3dvcmsoa2V2ZW50ZF93cSwgd29yaywgZGVsYXkpOwogfQogRVhQT1JUX1NZTUJPTChzY2hlZHVsZV9kZWxheWVkX3dvcmspOwogCisvKioKKyAqIHNjaGVkdWxlX2RlbGF5ZWRfd29ya19vbiAtIHF1ZXVlIHdvcmsgaW4gZ2xvYmFsIHdvcmtxdWV1ZSBvbiBDUFUgYWZ0ZXIgZGVsYXkKKyAqIEBjcHU6IGNwdSB0byB1c2UKKyAqIEB3b3JrOiBqb2IgdG8gYmUgZG9uZQorICogQGRlbGF5OiBudW1iZXIgb2YgamlmZmllcyB0byB3YWl0CisgKgorICogQWZ0ZXIgd2FpdGluZyBmb3IgYSBnaXZlbiB0aW1lIHRoaXMgcHV0cyBhIGpvYiBpbiB0aGUga2VybmVsLWdsb2JhbAorICogd29ya3F1ZXVlIG9uIHRoZSBzcGVjaWZpZWQgQ1BVLgorICovCiBpbnQgc2NoZWR1bGVfZGVsYXllZF93b3JrX29uKGludCBjcHUsCiAJCQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmssIHVuc2lnbmVkIGxvbmcgZGVsYXkpCiB7CkBAIC00NjUsMTEgKzUxMCwxMyBAQAogCWlmICghd29ya3MpCiAJCXJldHVybiAtRU5PTUVNOwogCisJbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQlJTklUX1dPUksocGVyX2NwdV9wdHIod29ya3MsIGNwdSksIGZ1bmMsIGluZm8pOwogCQlfX3F1ZXVlX3dvcmsocGVyX2NwdV9wdHIoa2V2ZW50ZF93cS0+Y3B1X3dxLCBjcHUpLAogCQkJCXBlcl9jcHVfcHRyKHdvcmtzLCBjcHUpKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwogCWZsdXNoX3dvcmtxdWV1ZShrZXZlbnRkX3dxKTsKIAlmcmVlX3BlcmNwdSh3b3Jrcyk7CiAJcmV0dXJuIDA7CkBAIC01ODUsNiArNjMyLDcgQEAKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfVVBfUFJFUEFSRToKKwkJbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKIAkJLyogQ3JlYXRlIGEgbmV3IHdvcmtxdWV1ZSB0aHJlYWQgZm9yIGl0LiAqLwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHdxLCAmd29ya3F1ZXVlcywgbGlzdCkgewogCQkJaWYgKCFjcmVhdGVfd29ya3F1ZXVlX3RocmVhZCh3cSwgaG90Y3B1KSkgewpAQCAtNjAzLDYgKzY1MSw3IEBACiAJCQlrdGhyZWFkX2JpbmQoY3dxLT50aHJlYWQsIGhvdGNwdSk7CiAJCQl3YWtlX3VwX3Byb2Nlc3MoY3dxLT50aHJlYWQpOwogCQl9CisJCW11dGV4X3VubG9jaygmd29ya3F1ZXVlX211dGV4KTsKIAkJYnJlYWs7CiAKIAljYXNlIENQVV9VUF9DQU5DRUxFRDoKQEAgLTYxNCw2ICs2NjMsMTUgQEAKIAkJCQkgICAgIGFueV9vbmxpbmVfY3B1KGNwdV9vbmxpbmVfbWFwKSk7CiAJCQljbGVhbnVwX3dvcmtxdWV1ZV90aHJlYWQod3EsIGhvdGNwdSk7CiAJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOworCQlicmVhazsKKworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJbXV0ZXhfbG9jaygmd29ya3F1ZXVlX211dGV4KTsKKwkJYnJlYWs7CisKKwljYXNlIENQVV9ET1dOX0ZBSUxFRDoKKwkJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwogCQlicmVhazsKIAogCWNhc2UgQ1BVX0RFQUQ6CkBAIC02MjEsNiArNjc5LDcgQEAKIAkJCWNsZWFudXBfd29ya3F1ZXVlX3RocmVhZCh3cSwgaG90Y3B1KTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3cSwgJndvcmtxdWV1ZXMsIGxpc3QpCiAJCQl0YWtlX292ZXJfd29yayh3cSwgaG90Y3B1KTsKKwkJbXV0ZXhfdW5sb2NrKCZ3b3JrcXVldWVfbXV0ZXgpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnIGIvbGliL0tjb25maWcKaW5kZXggZjYyOTkzNC4uNzM0Y2U5NSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcKKysrIGIvbGliL0tjb25maWcKQEAgLTM4LDYgKzM4LDExIEBACiAJICByZXF1aXJlIE0gaGVyZS4gIFNlZSBDYXN0YWdub2xpOTMuCiAJICBNb2R1bGUgd2lsbCBiZSBsaWJjcmMzMmMuCiAKK2NvbmZpZyBBVURJVF9HRU5FUklDCisJYm9vbAorCWRlcGVuZHMgb24gQVVESVQgJiYgIUFVRElUX0FSQ0gKKwlkZWZhdWx0IHkKKwogIwogIyBjb21wcmVzc2lvbiBzdXBwb3J0IGlzIHNlbGVjdCdlZCBpZiBuZWVkZWQKICMKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBiZTk3MTlhLi5lZjFkMzdhIDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC00OSw2ICs0OSw3IEBACiBvYmotJChDT05GSUdfVEVYVFNFQVJDSF9CTSkgKz0gdHNfYm0ubwogb2JqLSQoQ09ORklHX1RFWFRTRUFSQ0hfRlNNKSArPSB0c19mc20ubwogb2JqLSQoQ09ORklHX1NNUCkgKz0gcGVyY3B1X2NvdW50ZXIubworb2JqLSQoQ09ORklHX0FVRElUX0dFTkVSSUMpICs9IGF1ZGl0Lm8KIAogb2JqLSQoQ09ORklHX1NXSU9UTEIpICs9IHN3aW90bGIubwogCmRpZmYgLS1naXQgYS9saWIvYXVkaXQuYyBiL2xpYi9hdWRpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjE2MjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvYXVkaXQuYwpAQCAtMCwwICsxLDUzIEBACisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKK3N0YXRpYyB1bnNpZ25lZCBkaXJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaD4KK34wVQorfTsKKworc3RhdGljIHVuc2lnbmVkIHJlYWRfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9yZWFkLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCB3cml0ZV9jbGFzc1tdID0geworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2F1ZGl0X3dyaXRlLmg+Cit+MFUKK307CisKK3N0YXRpYyB1bnNpZ25lZCBjaGF0dHJfY2xhc3NbXSA9IHsKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9hdWRpdF9jaGFuZ2VfYXR0ci5oPgorfjBVCit9OworCitpbnQgYXVkaXRfY2xhc3NpZnlfc3lzY2FsbChpbnQgYWJpLCB1bnNpZ25lZCBzeXNjYWxsKQoreworCXN3aXRjaChzeXNjYWxsKSB7CisJY2FzZSBfX05SX29wZW46CisJCXJldHVybiAyOworCWNhc2UgX19OUl9vcGVuYXQ6CisJCXJldHVybiAzOworI2lmZGVmIF9fTlJfc29ja2V0Y2FsbAorCWNhc2UgX19OUl9zb2NrZXRjYWxsOgorCQlyZXR1cm4gNDsKKyNlbmRpZgorCWNhc2UgX19OUl9leGVjdmU6CisJCXJldHVybiA1OworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKworc3RhdGljIGludCBfX2luaXQgYXVkaXRfY2xhc3Nlc19pbml0KHZvaWQpCit7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfV1JJVEUsIHdyaXRlX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19SRUFELCByZWFkX2NsYXNzKTsKKwlhdWRpdF9yZWdpc3Rlcl9jbGFzcyhBVURJVF9DTEFTU19ESVJfV1JJVEUsIGRpcl9jbGFzcyk7CisJYXVkaXRfcmVnaXN0ZXJfY2xhc3MoQVVESVRfQ0xBU1NfQ0hBVFRSLCBjaGF0dHJfY2xhc3MpOworCXJldHVybiAwOworfQorCitfX2luaXRjYWxsKGF1ZGl0X2NsYXNzZXNfaW5pdCk7CmRpZmYgLS1naXQgYS9saWIva29iamVjdF91ZXZlbnQuYyBiL2xpYi9rb2JqZWN0X3VldmVudC5jCmluZGV4IDJiMTUzMGYuLjdmMjBlN2IgMTAwNjQ0Ci0tLSBhL2xpYi9rb2JqZWN0X3VldmVudC5jCisrKyBiL2xpYi9rb2JqZWN0X3VldmVudC5jCkBAIC01MCwxMCArNTAsNiBAQAogCQlyZXR1cm4gIm9mZmxpbmUiOwogCWNhc2UgS09CSl9PTkxJTkU6CiAJCXJldHVybiAib25saW5lIjsKLQljYXNlIEtPQkpfRE9DSzoKLQkJcmV0dXJuICJkb2NrIjsKLQljYXNlIEtPQkpfVU5ET0NLOgotCQlyZXR1cm4gInVuZG9jayI7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvbGliL3NwaW5sb2NrX2RlYnVnLmMgYi9saWIvc3BpbmxvY2tfZGVidWcuYwppbmRleCAzZDljNGRjLi41OGM1NzdkIDEwMDY0NAotLS0gYS9saWIvc3BpbmxvY2tfZGVidWcuYworKysgYi9saWIvc3BpbmxvY2tfZGVidWcuYwpAQCAtMTYyLDYgKzE2Miw3IEBACiAKICNkZWZpbmUgUldMT0NLX0JVR19PTihjb25kLCBsb2NrLCBtc2cpIGlmICh1bmxpa2VseShjb25kKSkgcndsb2NrX2J1Zyhsb2NrLCBtc2cpCiAKKyNpZiAwCQkvKiBfX3dyaXRlX2xvY2tfZGVidWcoKSBjYW4gbG9jayB1cCAtIG1heWJlIHRoaXMgY2FuIHRvbz8gKi8KIHN0YXRpYyB2b2lkIF9fcmVhZF9sb2NrX2RlYnVnKHJ3bG9ja190ICpsb2NrKQogewogCWludCBwcmludF9vbmNlID0gMTsKQEAgLTE4NCwxMiArMTg1LDEyIEBACiAJCX0KIAl9CiB9CisjZW5kaWYKIAogdm9pZCBfcmF3X3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlSV0xPQ0tfQlVHX09OKGxvY2stPm1hZ2ljICE9IFJXTE9DS19NQUdJQywgbG9jaywgImJhZCBtYWdpYyIpOwotCWlmICh1bmxpa2VseSghX19yYXdfcmVhZF90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpKQotCQlfX3JlYWRfbG9ja19kZWJ1Zyhsb2NrKTsKKwlfX3Jhd19yZWFkX2xvY2soJmxvY2stPnJhd19sb2NrKTsKIH0KIAogaW50IF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKQpAQCAtMjM1LDYgKzIzNiw3IEBACiAJbG9jay0+b3duZXJfY3B1ID0gLTE7CiB9CiAKKyNpZiAwCQkvKiBUaGlzIGNhbiBjYXVzZSBsb2NrdXBzICovCiBzdGF0aWMgdm9pZCBfX3dyaXRlX2xvY2tfZGVidWcocndsb2NrX3QgKmxvY2spCiB7CiAJaW50IHByaW50X29uY2UgPSAxOwpAQCAtMjU3LDEyICsyNTksMTIgQEAKIAkJfQogCX0KIH0KKyNlbmRpZgogCiB2b2lkIF9yYXdfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykKIHsKIAlkZWJ1Z193cml0ZV9sb2NrX2JlZm9yZShsb2NrKTsKLQlpZiAodW5saWtlbHkoIV9fcmF3X3dyaXRlX3RyeWxvY2soJmxvY2stPnJhd19sb2NrKSkpCi0JCV9fd3JpdGVfbG9ja19kZWJ1Zyhsb2NrKTsKKwlfX3Jhd193cml0ZV9sb2NrKCZsb2NrLT5yYXdfbG9jayk7CiAJZGVidWdfd3JpdGVfbG9ja19hZnRlcihsb2NrKTsKIH0KIApkaWZmIC0tZ2l0IGEvbGliL3RzX2JtLmMgYi9saWIvdHNfYm0uYwppbmRleCAwMTEwZTQ0Li5kOTA4MjJjIDEwMDY0NAotLS0gYS9saWIvdHNfYm0uYworKysgYi9saWIvdHNfYm0uYwpAQCAtMTExLDE1ICsxMTEsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBjb21wdXRlX3ByZWZpeF90Ymwoc3RydWN0IHRzX2JtICpibSwgY29uc3QgdTggKnBhdHRlcm4sCi0JCQkgICAgICAgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyB2b2lkIGNvbXB1dGVfcHJlZml4X3RibChzdHJ1Y3QgdHNfYm0gKmJtKQogewogCWludCBpLCBqLCBnOwogCiAJZm9yIChpID0gMDsgaSA8IEFTSVpFOyBpKyspCi0JCWJtLT5iYWRfc2hpZnRbaV0gPSBsZW47Ci0JZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykKLQkJYm0tPmJhZF9zaGlmdFtwYXR0ZXJuW2ldXSA9IGxlbiAtIDEgLSBpOworCQlibS0+YmFkX3NoaWZ0W2ldID0gYm0tPnBhdGxlbjsKKwlmb3IgKGkgPSAwOyBpIDwgYm0tPnBhdGxlbiAtIDE7IGkrKykKKwkJYm0tPmJhZF9zaGlmdFtibS0+cGF0dGVybltpXV0gPSBibS0+cGF0bGVuIC0gMSAtIGk7CiAKIAkvKiBDb21wdXRlIHRoZSBnb29kIHNoaWZ0IGFycmF5LCB1c2VkIHRvIG1hdGNoIHJlb2N1cnJlbmNlcyAKIAkgKiBvZiBhIHN1YnBhdHRlcm4gKi8KQEAgLTE1MCw4ICsxNDksOCBAQAogCWJtID0gdHNfY29uZmlnX3ByaXYoY29uZik7CiAJYm0tPnBhdGxlbiA9IGxlbjsKIAlibS0+cGF0dGVybiA9ICh1OCAqKSBibS0+Z29vZF9zaGlmdCArIHByZWZpeF90YmxfbGVuOwotCWNvbXB1dGVfcHJlZml4X3RibChibSwgcGF0dGVybiwgbGVuKTsKIAltZW1jcHkoYm0tPnBhdHRlcm4sIHBhdHRlcm4sIGxlbik7CisJY29tcHV0ZV9wcmVmaXhfdGJsKGJtKTsKIAogCXJldHVybiBjb25mOwogfQpkaWZmIC0tZ2l0IGEvbGliL3psaWJfaW5mbGF0ZS9pbmZsYXRlLmMgYi9saWIvemxpYl9pbmZsYXRlL2luZmxhdGUuYwppbmRleCA3ZjkyMmRjLi5mY2ViOTdjIDEwMDY0NAotLS0gYS9saWIvemxpYl9pbmZsYXRlL2luZmxhdGUuYworKysgYi9saWIvemxpYl9pbmZsYXRlL2luZmxhdGUuYwpAQCAtMzQ3LDcgKzM0NywxMCBAQAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBvcmRlclsxOV0gPSAvKiBwZXJtdXRhdGlvbiBvZiBjb2RlIGxlbmd0aHMgKi8KICAgICAgICAgezE2LCAxNywgMTgsIDAsIDgsIDcsIDksIDYsIDEwLCA1LCAxMSwgNCwgMTIsIDMsIDEzLCAyLCAxNCwgMSwgMTV9OwogCi0gICAgaWYgKHN0cm0gPT0gTlVMTCB8fCBzdHJtLT5zdGF0ZSA9PSBOVUxMIHx8IHN0cm0tPm5leHRfb3V0ID09IE5VTEwgfHwKKyAgICAvKiBEbyBub3QgY2hlY2sgZm9yIHN0cm0tPm5leHRfb3V0ID09IE5VTEwgaGVyZSBhcyBwcGMgekltYWdlCisgICAgICAgaW5mbGF0ZXMgdG8gc3RybS0+bmV4dF9vdXQgPSAwICovCisKKyAgICBpZiAoc3RybSA9PSBOVUxMIHx8IHN0cm0tPnN0YXRlID09IE5VTEwgfHwKICAgICAgICAgKHN0cm0tPm5leHRfaW4gPT0gTlVMTCAmJiBzdHJtLT5hdmFpbF9pbiAhPSAwKSkKICAgICAgICAgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOwogCmRpZmYgLS1naXQgYS9tbS9mYWR2aXNlLmMgYi9tbS9mYWR2aXNlLmMKaW5kZXggNjBhNWQ1NS4uMTY4Yzc4YSAxMDA2NDQKLS0tIGEvbW0vZmFkdmlzZS5jCisrKyBiL21tL2ZhZHZpc2UuYwpAQCAtNzMsNyArNzMsNiBAQAogCQlmaWxlLT5mX3JhLnJhX3BhZ2VzID0gYmRpLT5yYV9wYWdlcyAqIDI7CiAJCWJyZWFrOwogCWNhc2UgUE9TSVhfRkFEVl9XSUxMTkVFRDoKLQljYXNlIFBPU0lYX0ZBRFZfTk9SRVVTRToKIAkJaWYgKCFtYXBwaW5nLT5hX29wcy0+cmVhZHBhZ2UpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlicmVhazsKQEAgLTk0LDYgKzkzLDggQEAKIAkJaWYgKHJldCA+IDApCiAJCQlyZXQgPSAwOwogCQlicmVhazsKKwljYXNlIFBPU0lYX0ZBRFZfTk9SRVVTRToKKwkJYnJlYWs7CiAJY2FzZSBQT1NJWF9GQURWX0RPTlRORUVEOgogCQlpZiAoIWJkaV93cml0ZV9jb25nZXN0ZWQobWFwcGluZy0+YmFja2luZ19kZXZfaW5mbykpCiAJCQlmaWxlbWFwX2ZsdXNoKG1hcHBpbmcpOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGQwODdmYzMuLmI5YTYwYzQgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXAuYworKysgYi9tbS9maWxlbWFwLmMKQEAgLTg0OSw4ICs4NDksNiBAQAogCQlyZXR1cm47CiAKIAlyYS0+cmFfcGFnZXMgLz0gNDsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWR1Y2luZyByZWFkYWhlYWQgc2l6ZSB0byAlbHVLXG4iLAotCQkJcmEtPnJhX3BhZ2VzIDw8IChQQUdFX0NBQ0hFX1NISUZUIC0gMTApKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCAwMWM5ZmI5Li5jMzczMTk1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTUyLDYgKzUyLDkgQEAKIAlpbnQgbnJfcGFnZXMgPSBQQUdFU19QRVJfU0VDVElPTjsKIAlpbnQgcmV0OwogCisJaWYgKHBmbl92YWxpZChwaHlzX3N0YXJ0X3BmbikpCisJCXJldHVybiAtRUVYSVNUOworCiAJcmV0ID0gc3BhcnNlX2FkZF9vbmVfc2VjdGlvbih6b25lLCBwaHlzX3N0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCiAJaWYgKHJldCA8IDApCkBAIC03NiwxNSArNzksMjIgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGk7CiAJaW50IGVyciA9IDA7CisJaW50IHN0YXJ0X3NlYywgZW5kX3NlYzsKKwkvKiBkdXJpbmcgaW5pdGlhbGl6ZSBtZW1fbWFwLCBhbGlnbiBob3QtYWRkZWQgcmFuZ2UgdG8gc2VjdGlvbiAqLworCXN0YXJ0X3NlYyA9IHBmbl90b19zZWN0aW9uX25yKHBoeXNfc3RhcnRfcGZuKTsKKwllbmRfc2VjID0gcGZuX3RvX3NlY3Rpb25fbnIocGh5c19zdGFydF9wZm4gKyBucl9wYWdlcyAtIDEpOwogCi0JZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpICs9IFBBR0VTX1BFUl9TRUNUSU9OKSB7Ci0JCWVyciA9IF9fYWRkX3NlY3Rpb24oem9uZSwgcGh5c19zdGFydF9wZm4gKyBpKTsKKwlmb3IgKGkgPSBzdGFydF9zZWM7IGkgPD0gZW5kX3NlYzsgaSsrKSB7CisJCWVyciA9IF9fYWRkX3NlY3Rpb24oem9uZSwgaSA8PCBQRk5fU0VDVElPTl9TSElGVCk7CiAKLQkJLyogV2Ugd2FudCB0byBrZWVwIGFkZGluZyB0aGUgcmVzdCBvZiB0aGUKLQkJICogc2VjdGlvbnMgaWYgdGhlIGZpcnN0IG9uZXMgYWxyZWFkeSBleGlzdAorCQkvKgorCQkgKiBFRVhJU1QgaXMgZmluYWxseSBkZWFsZWQgd2l0aCBieSBpb3Jlc291cmNlIGNvbGxpc2lvbgorCQkgKiBjaGVjay4gc2VlIGFkZF9tZW1vcnkoKSA9PiByZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2UoKQorCQkgKiBXYXJuaW5nIHdpbGwgYmUgcHJpbnRlZCBpZiB0aGVyZSBpcyBjb2xsaXNpb24uCiAJCSAqLwogCQlpZiAoZXJyICYmIChlcnIgIT0gLUVFWElTVCkpCiAJCQlicmVhazsKKwkJZXJyID0gMDsKIAl9CiAKIAlyZXR1cm4gZXJyOwpAQCAtMTU2LDcgKzE2Niw3IEBACiAJcmVzLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07IC8qIHdlIGp1c3QgbmVlZCBzeXN0ZW0gcmFtICovCiAJc2VjdGlvbl9lbmQgPSByZXMuZW5kOwogCi0Jd2hpbGUgKGZpbmRfbmV4dF9zeXN0ZW1fcmFtKCZyZXMpID49IDApIHsKKwl3aGlsZSAoKHJlcy5zdGFydCA8IHJlcy5lbmQpICYmIChmaW5kX25leHRfc3lzdGVtX3JhbSgmcmVzKSA+PSAwKSkgewogCQlzdGFydF9wZm4gPSAodW5zaWduZWQgbG9uZykocmVzLnN0YXJ0ID4+IFBBR0VfU0hJRlQpOwogCQlucl9wYWdlcyA9ICh1bnNpZ25lZCBsb25nKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKChyZXMuZW5kICsgMSAtIHJlcy5zdGFydCkgPj4gUEFHRV9TSElGVCk7CkBAIC0yMTMsMTAgKzIyMyw5IEBACiB9CiAKIC8qIGFkZCB0aGlzIG1lbW9yeSB0byBpb21lbSByZXNvdXJjZSAqLwotc3RhdGljIHZvaWQgcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHU2NCBzdGFydCwgdTY0IHNpemUpCitzdGF0aWMgc3RydWN0IHJlc291cmNlICpyZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQogCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOwogCUJVR19PTighcmVzKTsKIApAQCAtMjI4LDcgKzIzNywxOCBAQAogCQlwcmludGsoIlN5c3RlbSBSQU0gcmVzb3VyY2UgJWxseCAtICVsbHggY2Fubm90IGJlIGFkZGVkXG4iLAogCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwogCQlrZnJlZShyZXMpOworCQlyZXMgPSBOVUxMOwogCX0KKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlX21lbW9yeV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKK3sKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKKwlrZnJlZShyZXMpOworCXJldHVybjsKIH0KIAogCkBAIC0yMzcsOCArMjU3LDEzIEBACiB7CiAJcGdfZGF0YV90ICpwZ2RhdCA9IE5VTEw7CiAJaW50IG5ld19wZ2RhdCA9IDA7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAorCXJlcyA9IHJlZ2lzdGVyX21lbW9yeV9yZXNvdXJjZShzdGFydCwgc2l6ZSk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRUVYSVNUOworCiAJaWYgKCFub2RlX29ubGluZShuaWQpKSB7CiAJCXBnZGF0ID0gaG90YWRkX25ld19wZ2RhdChuaWQsIHN0YXJ0KTsKIAkJaWYgKCFwZ2RhdCkKQEAgLTI2OCwxNCArMjkzLDEzIEBACiAJCUJVR19PTihyZXQpOwogCX0KIAotCS8qIHJlZ2lzdGVyIHRoaXMgbWVtb3J5IGFzIHJlc291cmNlICovCi0JcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHN0YXJ0LCBzaXplKTsKLQogCXJldHVybiByZXQ7CiBlcnJvcjoKIAkvKiByb2xsYmFjayBwZ2RhdCBhbGxvY2F0aW9uIGFuZCBvdGhlcnMgKi8KIAlpZiAobmV3X3BnZGF0KQogCQlyb2xsYmFja19ub2RlX2hvdGFkZChuaWQsIHBnZGF0KTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbW9yeV9yZXNvdXJjZShyZXMpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL21tL21lbXBvbGljeS5jIGIvbW0vbWVtcG9saWN5LmMKaW5kZXggZTA3ZTI3ZS4uYTk5NjNjZSAxMDA2NDQKLS0tIGEvbW0vbWVtcG9saWN5LmMKKysrIGIvbW0vbWVtcG9saWN5LmMKQEAgLTExNzYsNyArMTE3NiwxNSBAQAogCWlmICh2bWEpIHsKIAkJdW5zaWduZWQgbG9uZyBvZmY7CiAKLQkJb2ZmID0gdm1hLT52bV9wZ29mZjsKKwkJLyoKKwkJICogZm9yIHNtYWxsIHBhZ2VzLCB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4KKwkJICogc2hpZnQgYW5kIFBBR0VfU0hJRlQsIHNvIHRoZSBiaXQtc2hpZnQgaXMgc2FmZS4KKwkJICogZm9yIGh1Z2UgcGFnZXMsIHNpbmNlIHZtX3Bnb2ZmIGlzIGluIHVuaXRzIG9mIHNtYWxsCisJCSAqIHBhZ2VzLCB3ZSBuZWVkIHRvIHNoaWZ0IG9mZiB0aGUgYWx3YXlzIDAgYml0cyB0byBnZXQKKwkJICogYSB1c2VmdWwgb2Zmc2V0LgorCQkgKi8KKwkJQlVHX09OKHNoaWZ0IDwgUEFHRV9TSElGVCk7CisJCW9mZiA9IHZtYS0+dm1fcGdvZmYgPj4gKHNoaWZ0IC0gUEFHRV9TSElGVCk7CiAJCW9mZiArPSAoYWRkciAtIHZtYS0+dm1fc3RhcnQpID4+IHNoaWZ0OwogCQlyZXR1cm4gb2Zmc2V0X2lsX25vZGUocG9sLCB2bWEsIG9mZik7CiAJfSBlbHNlCmRpZmYgLS1naXQgYS9tbS9tZW1wb29sLmMgYi9tbS9tZW1wb29sLmMKaW5kZXggZmU2ZTA1Mi4uY2NkOGNiOCAxMDA2NDQKLS0tIGEvbW0vbWVtcG9vbC5jCisrKyBiL21tL21lbXBvb2wuYwpAQCAtMjM4LDggKzIzOCwxMyBAQAogCWluaXRfd2FpdCgmd2FpdCk7CiAJcHJlcGFyZV90b193YWl0KCZwb29sLT53YWl0LCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCXNtcF9tYigpOwotCWlmICghcG9vbC0+Y3Vycl9ucikKLQkJaW9fc2NoZWR1bGUoKTsKKwlpZiAoIXBvb2wtPmN1cnJfbnIpIHsKKwkJLyoKKwkJICogRklYTUU6IHRoaXMgc2hvdWxkIGJlIGlvX3NjaGVkdWxlKCkuICBUaGUgdGltZW91dCBpcyB0aGVyZQorCQkgKiBhcyBhIHdvcmthcm91bmQgZm9yIHNvbWUgRE0gcHJvYmxlbXMgaW4gMi42LjE4LgorCQkgKi8KKwkJaW9fc2NoZWR1bGVfdGltZW91dCg1KkhaKTsKKwl9CiAJZmluaXNoX3dhaXQoJnBvb2wtPndhaXQsICZ3YWl0KTsKIAogCWdvdG8gcmVwZWF0X2FsbG9jOwpkaWZmIC0tZ2l0IGEvbW0vbW1hcC5jIGIvbW0vbW1hcC5jCmluZGV4IGMxODY4ZWMuLmU2NmEwYjUgMTAwNjQ0Ci0tLSBhL21tL21tYXAuYworKysgYi9tbS9tbWFwLmMKQEAgLTMwLDYgKzMwLDEwIEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CiAKKyNpZm5kZWYgYXJjaF9tbWFwX2NoZWNrCisjZGVmaW5lIGFyY2hfbW1hcF9jaGVjayhhZGRyLCBsZW4sIGZsYWdzKQkoMCkKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCB1bm1hcF9yZWdpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByZXYsCiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKQEAgLTkxMyw2ICs5MTcsMTAgQEAKIAlpZiAoIWxlbikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwllcnJvciA9IGFyY2hfbW1hcF9jaGVjayhhZGRyLCBsZW4sIGZsYWdzKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwogCS8qIENhcmVmdWwgYWJvdXQgb3ZlcmZsb3dzLi4gKi8KIAlsZW4gPSBQQUdFX0FMSUdOKGxlbik7CiAJaWYgKCFsZW4gfHwgbGVuID4gVEFTS19TSVpFKQpAQCAtMTg1OSw2ICsxODY3LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCByYl9ub2RlICoqIHJiX2xpbmssICogcmJfcGFyZW50OwogCXBnb2ZmX3QgcGdvZmYgPSBhZGRyID4+IFBBR0VfU0hJRlQ7CisJaW50IGVycm9yOwogCiAJbGVuID0gUEFHRV9BTElHTihsZW4pOwogCWlmICghbGVuKQpAQCAtMTg2Nyw2ICsxODc2LDEyIEBACiAJaWYgKChhZGRyICsgbGVuKSA+IFRBU0tfU0laRSB8fCAoYWRkciArIGxlbikgPCBhZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWZsYWdzID0gVk1fREFUQV9ERUZBVUxUX0ZMQUdTIHwgVk1fQUNDT1VOVCB8IG1tLT5kZWZfZmxhZ3M7CisKKwllcnJvciA9IGFyY2hfbW1hcF9jaGVjayhhZGRyLCBsZW4sIGZsYWdzKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwogCS8qCiAJICogbWxvY2sgTUNMX0ZVVFVSRT8KIAkgKi8KQEAgLTE5MDcsOCArMTkyMiw2IEBACiAJaWYgKHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnkobGVuID4+IFBBR0VfU0hJRlQpKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWZsYWdzID0gVk1fREFUQV9ERUZBVUxUX0ZMQUdTIHwgVk1fQUNDT1VOVCB8IG1tLT5kZWZfZmxhZ3M7Ci0KIAkvKiBDYW4gd2UganVzdCBleHBhbmQgYW4gb2xkIHByaXZhdGUgYW5vbnltb3VzIG1hcHBpbmc/ICovCiAJaWYgKHZtYV9tZXJnZShtbSwgcHJldiwgYWRkciwgYWRkciArIGxlbiwgZmxhZ3MsCiAJCQkJCU5VTEwsIE5VTEwsIHBnb2ZmLCBOVUxMKSkKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCAwZjIwODQzLi4yMWJhMDYwIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC0xMTA2LDcgKzExMDYsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBfX2RldmluaXQgY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCitzdGF0aWMgaW50IF9fY3B1aW5pdCBjcHV1cF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmhjcHUpCiB7CiAJbG9uZyBjcHUgPSAobG9uZyloY3B1OwpAQCAtMzIyNCw3ICszMjI0LDcgQEAKIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9hbGxvYyk7CiAKIC8qKgotICoga21lbV9jYWNoZV9hbGxvYyAtIEFsbG9jYXRlIGFuIG9iamVjdC4gVGhlIG1lbW9yeSBpcyBzZXQgdG8gemVyby4KKyAqIGttZW1fY2FjaGVfemFsbG9jIC0gQWxsb2NhdGUgYW4gb2JqZWN0LiBUaGUgbWVtb3J5IGlzIHNldCB0byB6ZXJvLgogICogQGNhY2hlOiBUaGUgY2FjaGUgdG8gYWxsb2NhdGUgZnJvbS4KICAqIEBmbGFnczogU2VlIGttYWxsb2MoKS4KICAqCmRpZmYgLS1naXQgYS9tbS9zd2FwLmMgYi9tbS9zd2FwLmMKaW5kZXggOGZkMDk1Yy4uNjg3Njg2YSAxMDA2NDQKLS0tIGEvbW0vc3dhcC5jCisrKyBiL21tL3N3YXAuYwpAQCAtNTQsNiArNTQsMjYgQEAKIH0KIEVYUE9SVF9TWU1CT0wocHV0X3BhZ2UpOwogCisvKioKKyAqIHB1dF9wYWdlc19saXN0KCk6IHJlbGVhc2UgYSBsaXN0IG9mIHBhZ2VzCisgKgorICogUmVsZWFzZSBhIGxpc3Qgb2YgcGFnZXMgd2hpY2ggYXJlIHN0cnVuZyB0b2dldGhlciBvbiBwYWdlLmxydS4gIEN1cnJlbnRseQorICogdXNlZCBieSByZWFkX2NhY2hlX3BhZ2VzKCkgYW5kIHJlbGF0ZWQgZXJyb3IgcmVjb3ZlcnkgY29kZS4KKyAqCisgKiBAcGFnZXM6IGxpc3Qgb2YgcGFnZXMgdGhyZWFkZWQgb24gcGFnZS0+bHJ1CisgKi8KK3ZvaWQgcHV0X3BhZ2VzX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqcGFnZXMpCit7CisJd2hpbGUgKCFsaXN0X2VtcHR5KHBhZ2VzKSkgeworCQlzdHJ1Y3QgcGFnZSAqdmljdGltOworCisJCXZpY3RpbSA9IGxpc3RfZW50cnkocGFnZXMtPnByZXYsIHN0cnVjdCBwYWdlLCBscnUpOworCQlsaXN0X2RlbCgmdmljdGltLT5scnUpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UodmljdGltKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKHB1dF9wYWdlc19saXN0KTsKKwogLyoKICAqIFdyaXRlYmFjayBpcyBhYm91dCB0byBlbmQgYWdhaW5zdCBhIHBhZ2Ugd2hpY2ggaGFzIGJlZW4gbWFya2VkIGZvciBpbW1lZGlhdGUKICAqIHJlY2xhaW0uICBJZiBpdCBzdGlsbCBhcHBlYXJzIHRvIGJlIHJlY2xhaW1hYmxlLCBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZQpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggZTcwZDZjNi4uZjFmNWVjNyAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC00NDIsMTEgKzQ0MiwxMiBAQAogCiAJCWlmICghKHN3YXBfaW5mb1tpXS5mbGFncyAmIFNXUF9XUklURU9LKSkKIAkJCWNvbnRpbnVlOworCiAJCWlmICghZGV2aWNlKSB7CiAJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKIAkJCXJldHVybiBpOwogCQl9Ci0JCWlub2RlID0gc3dhcF9pbmZvLT5zd2FwX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCQlpbm9kZSA9IHN3YXBfaW5mb1tpXS5zd2FwX2ZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOwogCQlpZiAoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJgogCQkgICAgZGV2aWNlID09IE1LREVWKGltYWpvcihpbm9kZSksIGltaW5vcihpbm9kZSkpKSB7CiAJCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKZGlmZiAtLWdpdCBhL21tL3RydW5jYXRlLmMgYi9tbS90cnVuY2F0ZS5jCmluZGV4IGNmMWIwMTUuLmM2YWI1NWUgMTAwNjQ0Ci0tLSBhL21tL3RydW5jYXRlLmMKKysrIGIvbW0vdHJ1bmNhdGUuYwpAQCAtNjgsMTAgKzY4LDEwIEBACiAJCXJldHVybiAwOwogCiAJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JaWYgKFBhZ2VEaXJ0eShwYWdlKSkgewotCQl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKFBhZ2VEaXJ0eShwYWdlKSkKKwkJZ290byBmYWlsZWQ7CisJaWYgKHBhZ2VfY291bnQocGFnZSkgIT0gMikJLyogY2FsbGVyJ3MgcmVmICsgcGFnZWNhY2hlIHJlZiAqLworCQlnb3RvIGZhaWxlZDsKIAogCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSk7CiAJX19yZW1vdmVfZnJvbV9wYWdlX2NhY2hlKHBhZ2UpOwpAQCAtNzksNiArNzksOSBAQAogCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwogCXJldHVybiAxOworZmFpbGVkOgorCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCBkZmRmMjQxLi5jMWI1ZjQxIDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAKIHZvaWQgX19nZXRfem9uZV9jb3VudHModW5zaWduZWQgbG9uZyAqYWN0aXZlLCB1bnNpZ25lZCBsb25nICppbmFjdGl2ZSwKIAkJCXVuc2lnbmVkIGxvbmcgKmZyZWUsIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpCkBAIC0xMTQsMTcgKzExNSw3MiBAQAogCiAjaWZkZWYgQ09ORklHX1NNUAogCi0jZGVmaW5lIFNUQVRfVEhSRVNIT0xEIDMyCitzdGF0aWMgaW50IGNhbGN1bGF0ZV90aHJlc2hvbGQoc3RydWN0IHpvbmUgKnpvbmUpCit7CisJaW50IHRocmVzaG9sZDsKKwlpbnQgbWVtOwkvKiBtZW1vcnkgaW4gMTI4IE1CIHVuaXRzICovCisKKwkvKgorCSAqIFRoZSB0aHJlc2hvbGQgc2NhbGVzIHdpdGggdGhlIG51bWJlciBvZiBwcm9jZXNzb3JzIGFuZCB0aGUgYW1vdW50CisJICogb2YgbWVtb3J5IHBlciB6b25lLiBNb3JlIG1lbW9yeSBtZWFucyB0aGF0IHdlIGNhbiBkZWZlciB1cGRhdGVzIGZvcgorCSAqIGxvbmdlciwgbW9yZSBwcm9jZXNzb3JzIGNvdWxkIGxlYWQgdG8gbW9yZSBjb250ZW50aW9uLgorIAkgKiBmbHMoKSBpcyB1c2VkIHRvIGhhdmUgYSBjaGVhcCB3YXkgb2YgbG9nYXJpdGhtaWMgc2NhbGluZy4KKwkgKgorCSAqIFNvbWUgc2FtcGxlIHRocmVzaG9sZHM6CisJICoKKwkgKiBUaHJlc2hvbGQJUHJvY2Vzc29ycwkoZmxzKQlab25lc2l6ZQlmbHMobWVtKzEpCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogOAkJMQkJMQkwLjktMSBHQgk0CisJICogMTYJCTIJCTIJMC45LTEgR0IJNAorCSAqIDIwIAkJMgkJMgkxLTIgR0IJCTUKKwkgKiAyNAkJMgkJMgkyLTQgR0IJCTYKKwkgKiAyOAkJMgkJMgk0LTggR0IJCTcKKwkgKiAzMgkJMgkJMgk4LTE2IEdCCQk4CisJICogNAkJMgkJMgk8MTI4TQkJMQorCSAqIDMwCQk0CQkzCTItNCBHQgkJNQorCSAqIDQ4CQk0CQkzCTgtMTYgR0IJCTgKKwkgKiAzMgkJOAkJNAkxLTIgR0IJCTQKKwkgKiAzMgkJOAkJNAkwLjktMUdCCQk0CisJICogMTAJCTE2CQk1CTwxMjhNCQkxCisJICogNDAJCTE2CQk1CTkwME0JCTQKKwkgKiA3MAkJNjQJCTcJMi00IEdCCQk1CisJICogODQJCTY0CQk3CTQtOCBHQgkJNgorCSAqIDEwOAkJNTEyCQk5CTQtOCBHQgkJNgorCSAqIDEyNQkJMTAyNAkJMTAJOC0xNiBHQgkJOAorCSAqIDEyNQkJMTAyNAkJMTAJMTYtMzIgR0IJOQorCSAqLworCisJbWVtID0gem9uZS0+cHJlc2VudF9wYWdlcyA+PiAoMjcgLSBQQUdFX1NISUZUKTsKKworCXRocmVzaG9sZCA9IDIgKiBmbHMobnVtX29ubGluZV9jcHVzKCkpICogKDEgKyBmbHMobWVtKSk7CisKKwkvKgorCSAqIE1heGltdW0gdGhyZXNob2xkIGlzIDEyNQorCSAqLworCXRocmVzaG9sZCA9IG1pbigxMjUsIHRocmVzaG9sZCk7CisKKwlyZXR1cm4gdGhyZXNob2xkOworfQogCiAvKgotICogRGV0ZXJtaW5lIHBvaW50ZXIgdG8gY3VycmVudGx5IHZhbGlkIGRpZmZlcmVudGlhbCBieXRlIGdpdmVuIGEgem9uZSBhbmQKLSAqIHRoZSBpdGVtIG51bWJlci4KLSAqCi0gKiBQcmVlbXB0aW9uIG11c3QgYmUgb2ZmCisgKiBSZWZyZXNoIHRoZSB0aHJlc2hvbGRzIGZvciBlYWNoIHpvbmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgczggKmRpZmZfcG9pbnRlcihzdHJ1Y3Qgem9uZSAqem9uZSwgZW51bSB6b25lX3N0YXRfaXRlbSBpdGVtKQorc3RhdGljIHZvaWQgcmVmcmVzaF96b25lX3N0YXRfdGhyZXNob2xkcyh2b2lkKQogewotCXJldHVybiAmem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKS0+dm1fc3RhdF9kaWZmW2l0ZW1dOworCXN0cnVjdCB6b25lICp6b25lOworCWludCBjcHU7CisJaW50IHRocmVzaG9sZDsKKworCWZvcl9lYWNoX3pvbmUoem9uZSkgeworCisJCWlmICghem9uZS0+cHJlc2VudF9wYWdlcykKKwkJCWNvbnRpbnVlOworCisJCXRocmVzaG9sZCA9IGNhbGN1bGF0ZV90aHJlc2hvbGQoem9uZSk7CisKKwkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisJCQl6b25lX3BjcCh6b25lLCBjcHUpLT5zdGF0X3RocmVzaG9sZCA9IHRocmVzaG9sZDsKKwl9CiB9CiAKIC8qCkBAIC0xMzMsMTcgKzE4OSwxNiBAQAogdm9pZCBfX21vZF96b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSwKIAkJCQlpbnQgZGVsdGEpCiB7Ci0JczggKnA7CisJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzOCAqcCA9IHBjcC0+dm1fc3RhdF9kaWZmICsgaXRlbTsKIAlsb25nIHg7CiAKLQlwID0gZGlmZl9wb2ludGVyKHpvbmUsIGl0ZW0pOwogCXggPSBkZWx0YSArICpwOwogCi0JaWYgKHVubGlrZWx5KHggPiBTVEFUX1RIUkVTSE9MRCB8fCB4IDwgLVNUQVRfVEhSRVNIT0xEKSkgeworCWlmICh1bmxpa2VseSh4ID4gcGNwLT5zdGF0X3RocmVzaG9sZCB8fCB4IDwgLXBjcC0+c3RhdF90aHJlc2hvbGQpKSB7CiAJCXpvbmVfcGFnZV9zdGF0ZV9hZGQoeCwgem9uZSwgaXRlbSk7CiAJCXggPSAwOwogCX0KLQogCSpwID0geDsKIH0KIEVYUE9SVF9TWU1CT0woX19tb2Rfem9uZV9wYWdlX3N0YXRlKTsKQEAgLTE3MiwxMCArMjI3LDEyIEBACiAgKiBObyBvdmVyZmxvdyBjaGVjayBpcyBuZWNlc3NhcnkgYW5kIHRoZXJlZm9yZSB0aGUgZGlmZmVyZW50aWFsIGNhbiBiZQogICogaW5jcmVtZW50ZWQgb3IgZGVjcmVtZW50ZWQgaW4gcGxhY2Ugd2hpY2ggbWF5IGFsbG93IHRoZSBjb21waWxlcnMgdG8KICAqIGdlbmVyYXRlIGJldHRlciBjb2RlLgotICoKICAqIFRoZSBpbmNyZW1lbnQgb3IgZGVjcmVtZW50IGlzIGtub3duIGFuZCB0aGVyZWZvcmUgb25lIGJvdW5kYXJ5IGNoZWNrIGNhbgogICogYmUgb21pdHRlZC4KICAqCisgKiBOT1RFOiBUaGVzZSBmdW5jdGlvbnMgYXJlIHZlcnkgcGVyZm9ybWFuY2Ugc2Vuc2l0aXZlLiBDaGFuZ2Ugb25seQorICogd2l0aCBjYXJlLgorICoKICAqIFNvbWUgcHJvY2Vzc29ycyBoYXZlIGluYy9kZWMgaW5zdHJ1Y3Rpb25zIHRoYXQgYXJlIGF0b21pYyB2cyBhbiBpbnRlcnJ1cHQuCiAgKiBIb3dldmVyLCB0aGUgY29kZSBtdXN0IGZpcnN0IGRldGVybWluZSB0aGUgZGlmZmVyZW50aWFsIGxvY2F0aW9uIGluIGEgem9uZQogICogYmFzZWQgb24gdGhlIHByb2Nlc3NvciBudW1iZXIgYW5kIHRoZW4gaW5jL2RlYyB0aGUgY291bnRlci4gVGhlcmUgaXMgbm8KQEAgLTE4NSwxMyArMjQyLDE2IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9faW5jX3pvbmVfc3RhdGUoc3RydWN0IHpvbmUgKnpvbmUsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKIHsKLQlzOCAqcCA9IGRpZmZfcG9pbnRlcih6b25lLCBpdGVtKTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB6b25lX3BjcCh6b25lLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXM4ICpwID0gcGNwLT52bV9zdGF0X2RpZmYgKyBpdGVtOwogCiAJKCpwKSsrOwogCi0JaWYgKHVubGlrZWx5KCpwID4gU1RBVF9USFJFU0hPTEQpKSB7Ci0JCXpvbmVfcGFnZV9zdGF0ZV9hZGQoKnAsIHpvbmUsIGl0ZW0pOwotCQkqcCA9IDA7CisJaWYgKHVubGlrZWx5KCpwID4gcGNwLT5zdGF0X3RocmVzaG9sZCkpIHsKKwkJaW50IG92ZXJzdGVwID0gcGNwLT5zdGF0X3RocmVzaG9sZCAvIDI7CisKKwkJem9uZV9wYWdlX3N0YXRlX2FkZCgqcCArIG92ZXJzdGVwLCB6b25lLCBpdGVtKTsKKwkJKnAgPSAtb3ZlcnN0ZXA7CiAJfQogfQogCkBAIC0yMDQsMTMgKzI2NCwxNiBAQAogdm9pZCBfX2RlY196b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKIHsKIAlzdHJ1Y3Qgem9uZSAqem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKLQlzOCAqcCA9IGRpZmZfcG9pbnRlcih6b25lLCBpdGVtKTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB6b25lX3BjcCh6b25lLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXM4ICpwID0gcGNwLT52bV9zdGF0X2RpZmYgKyBpdGVtOwogCiAJKCpwKS0tOwogCi0JaWYgKHVubGlrZWx5KCpwIDwgLVNUQVRfVEhSRVNIT0xEKSkgewotCQl6b25lX3BhZ2Vfc3RhdGVfYWRkKCpwLCB6b25lLCBpdGVtKTsKLQkJKnAgPSAwOworCWlmICh1bmxpa2VseSgqcCA8IC0gcGNwLT5zdGF0X3RocmVzaG9sZCkpIHsKKwkJaW50IG92ZXJzdGVwID0gcGNwLT5zdGF0X3RocmVzaG9sZCAvIDI7CisKKwkJem9uZV9wYWdlX3N0YXRlX2FkZCgqcCAtIG92ZXJzdGVwLCB6b25lLCBpdGVtKTsKKwkJKnAgPSBvdmVyc3RlcDsKIAl9CiB9CiBFWFBPUlRfU1lNQk9MKF9fZGVjX3pvbmVfcGFnZV9zdGF0ZSk7CkBAIC0yMzksMTkgKzMwMiw5IEBACiB2b2lkIGRlY196b25lX3BhZ2Vfc3RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0gem9uZV9zdGF0X2l0ZW0gaXRlbSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCB6b25lICp6b25lOwotCXM4ICpwOwogCi0Jem9uZSA9IHBhZ2Vfem9uZShwYWdlKTsKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcCA9IGRpZmZfcG9pbnRlcih6b25lLCBpdGVtKTsKLQotCSgqcCktLTsKLQotCWlmICh1bmxpa2VseSgqcCA8IC1TVEFUX1RIUkVTSE9MRCkpIHsKLQkJem9uZV9wYWdlX3N0YXRlX2FkZCgqcCwgem9uZSwgaXRlbSk7Ci0JCSpwID0gMDsKLQl9CisJX19kZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIGl0ZW0pOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZGVjX3pvbmVfcGFnZV9zdGF0ZSk7CkBAIC01MjUsNiArNTc4LDEwIEBACiAJCQkJCSAgIHBhZ2VzZXQtPnBjcFtqXS5oaWdoLAogCQkJCQkgICBwYWdlc2V0LT5wY3Bbal0uYmF0Y2gpOwogCQkJfQorI2lmZGVmIENPTkZJR19TTVAKKwkJCXNlcV9wcmludGYobSwgIlxuICB2bSBzdGF0cyB0aHJlc2hvbGQ6ICVkIiwKKwkJCQkJcGFnZXNldC0+c3RhdF90aHJlc2hvbGQpOworI2VuZGlmCiAJCX0KIAkJc2VxX3ByaW50ZihtLAogCQkJICAgIlxuICBhbGxfdW5yZWNsYWltYWJsZTogJXUiCkBAIC02MTMsMyArNjcwLDM1IEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIFVzZSB0aGUgY3B1IG5vdGlmaWVyIHRvIGluc3VyZSB0aGF0IHRoZSB0aHJlc2hvbGRzIGFyZSByZWNhbGN1bGF0ZWQKKyAqIHdoZW4gbmVjZXNzYXJ5LgorICovCitzdGF0aWMgaW50IF9fY3B1aW5pdCB2bXN0YXRfY3B1dXBfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZmIsCisJCXVuc2lnbmVkIGxvbmcgYWN0aW9uLAorCQl2b2lkICpoY3B1KQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJCWNhc2UgQ1BVX1VQX1BSRVBBUkU6CisJCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgorCQljYXNlIENQVV9ERUFEOgorCQkJcmVmcmVzaF96b25lX3N0YXRfdGhyZXNob2xkcygpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBfX2NwdWluaXRkYXRhIHZtc3RhdF9ub3RpZmllciA9CisJeyAmdm1zdGF0X2NwdXVwX2NhbGxiYWNrLCBOVUxMLCAwIH07CisKK2ludCBfX2luaXQgc2V0dXBfdm1zdGF0KHZvaWQpCit7CisJcmVmcmVzaF96b25lX3N0YXRfdGhyZXNob2xkcygpOworCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmdm1zdGF0X25vdGlmaWVyKTsKKwlyZXR1cm4gMDsKK30KK21vZHVsZV9pbml0KHNldHVwX3Ztc3RhdCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCBjNmNlYzVhLi40OTU5YTRlIDEwMDY0NAotLS0gYS9uZXQvS2NvbmZpZworKysgYi9uZXQvS2NvbmZpZwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAKIGNvbmZpZyBORVRfRElWRVJUCiAJYm9vbCAiRnJhbWUgRGl2ZXJ0ZXIgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBCUk9LRU4KIAktLS1oZWxwLS0tCiAJICBUaGUgRnJhbWUgRGl2ZXJ0ZXIgYWxsb3dzIHlvdSB0byBkaXZlcnQgcGFja2V0cyBmcm9tIHRoZQogCSAgbmV0d29yaywgdGhhdCBhcmUgbm90IGFpbWVkIGF0IHRoZSBpbnRlcmZhY2UgcmVjZWl2aW5nIGl0IChpbgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jbGlwLmMgYi9uZXQvYXRtL2NsaXAuYwppbmRleCA3Y2U3YmZlLi43YWYyYzQxIDEwMDY0NAotLS0gYS9uZXQvYXRtL2NsaXAuYworKysgYi9uZXQvYXRtL2NsaXAuYwpAQCAtNTAwLDkgKzUwMCwxMSBAQAogCQl9IGVsc2UgewogCQkJdW5zaWduZWQgaW50IGxlbiA9IHNrYi0+bGVuOwogCisJCQlza2JfZ2V0KHNrYik7CiAJCQljbGlwX3B1c2godmNjLCBza2IpOwogCQkJUFJJVihza2ItPmRldiktPnN0YXRzLnJ4X3BhY2tldHMtLTsKIAkJCVBSSVYoc2tiLT5kZXYpLT5zdGF0cy5yeF9ieXRlcyAtPSBsZW47CisJCQlrZnJlZV9za2Ioc2tiKTsKIAkJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9wcm9jLmMgYi9uZXQvYXRtL3Byb2MuYwppbmRleCAzZjk1YjA4Li45MWZlNWY1IDEwMDY0NAotLS0gYS9uZXQvYXRtL3Byb2MuYworKysgYi9uZXQvYXRtL3Byb2MuYwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXZvaWQgX19leGl0IGF0bV9wcm9jX2V4aXQodm9pZCkKK3ZvaWQgYXRtX3Byb2NfZXhpdCh2b2lkKQogewogCWF0bV9wcm9jX2RpcnNfcmVtb3ZlKCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IDZjY2QzMmIuLjg2NGZiYmMgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC00MCwxMSArNDAsMTUgQEAKIAllbHNlIHsKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCQkvKiBpcF9yZWZyYWcgY2FsbHMgaXBfZnJhZ21lbnQsIGRvZXNuJ3QgY29weSB0aGUgTUFDIGhlYWRlci4gKi8KLQkJbmZfYnJpZGdlX21heWJlX2NvcHlfaGVhZGVyKHNrYik7CisJCWlmIChuZl9icmlkZ2VfbWF5YmVfY29weV9oZWFkZXIoc2tiKSkKKwkJCWtmcmVlX3NrYihza2IpOworCQllbHNlCiAjZW5kaWYKLQkJc2tiX3B1c2goc2tiLCBFVEhfSExFTik7CisJCXsKKwkJCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCi0JCWRldl9xdWV1ZV94bWl0KHNrYik7CisJCQlkZXZfcXVldWVfeG1pdChza2IpOworCQl9CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2lmLmMgYi9uZXQvYnJpZGdlL2JyX2lmLmMKaW5kZXggZjU1ZWY2OC4uYjEyMTFkNTM0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX2lmLmMKKysrIGIvbmV0L2JyaWRnZS9icl9pZi5jCkBAIC0zODYsMTIgKzM4NiwxNyBAQAogCQkJY2hlY2tzdW0gPSAwOwogCiAJCWlmIChmZWF0dXJlICYgTkVUSUZfRl9HU08pCi0JCQlmZWF0dXJlIHw9IE5FVElGX0ZfVFNPOworCQkJZmVhdHVyZSB8PSBORVRJRl9GX0dTT19TT0ZUV0FSRTsKIAkJZmVhdHVyZSB8PSBORVRJRl9GX0dTTzsKIAogCQlmZWF0dXJlcyAmPSBmZWF0dXJlOwogCX0KIAorCWlmICghKGNoZWNrc3VtICYgTkVUSUZfRl9BTExfQ1NVTSkpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX1NHOworCWlmICghKGZlYXR1cmVzICYgTkVUSUZfRl9TRykpCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX0dTT19NQVNLOworCiAJYnItPmRldi0+ZmVhdHVyZXMgPSBmZWF0dXJlcyB8IGNoZWNrc3VtIHwgTkVUSUZfRl9MTFRYIHwKIAkJCSAgICBORVRJRl9GX0dTT19ST0JVU1Q7CiB9CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX25ldGxpbmsuYyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCmluZGV4IDA2YWJiNjYuLjUzMDg2ZmIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCisrKyBiL25ldC9icmlkZ2UvYnJfbmV0bGluay5jCkBAIC04NSw3ICs4NSw3IEBACiAJCWdvdG8gZXJyX291dDsKIAogCWVyciA9IGJyX2ZpbGxfaWZpbmZvKHNrYiwgcG9ydCwgY3VycmVudC0+cGlkLCAwLCBldmVudCwgMCk7Ci0JaWYgKGVycikKKwlpZiAoZXJyIDwgMCkKIAkJZ290byBlcnJfa2ZyZWU7CiAKIAlORVRMSU5LX0NCKHNrYikuZHN0X2dyb3VwID0gUlROTEdSUF9MSU5LOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jIGIvbmV0L2JyaWRnZS9icl9zdHBfYnBkdS5jCmluZGV4IGE3YmEwY2MuLjA2OGQ4YWYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfc3RwX2JwZHUuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9icGR1LmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogCWJ1ZlsxXSA9IDA7CiAJYnVmWzJdID0gMDsKIAlidWZbM10gPSBCUERVX1RZUEVfVENOOwotCWJyX3NlbmRfYnBkdShwLCBidWYsIDcpOworCWJyX3NlbmRfYnBkdShwLCBidWYsIDQpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKaW5kZXggMDI2OTNhMi4uOWY5NTBkYiAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCkBAIC03NCw2ICs3NCw5IEBACiAJaWYgKHRpbWVyX3BlbmRpbmcoJnViLT50aW1lcikpCiAJCWRlbF90aW1lcigmdWItPnRpbWVyKTsKIAorCWlmICghdWItPnNrYikKKwkJcmV0dXJuOworCiAJLyogbGFzdCBubG1zZyBuZWVkcyBOTE1TR19ET05FICovCiAJaWYgKHViLT5xbGVuID4gMSkKIAkJdWItPmxhc3RubGgtPm5sbXNnX3R5cGUgPSBOTE1TR19ET05FOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvTWFrZWZpbGUgYi9uZXQvY29yZS9NYWtlZmlsZQppbmRleCBlOWJkMjQ2Li4yNjQ1YmE0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9NYWtlZmlsZQorKysgYi9uZXQvY29yZS9NYWtlZmlsZQpAQCAtNyw3ICs3LDcgQEAKIAogb2JqLSQoQ09ORklHX1NZU0NUTCkgKz0gc3lzY3RsX25ldF9jb3JlLm8KIAotb2JqLXkJCSAgICAgKz0gZGV2Lm8gZXRodG9vbC5vIGRldl9tY2FzdC5vIGRzdC5vIFwKK29iai15CQkgICAgICs9IGRldi5vIGV0aHRvb2wubyBkZXZfbWNhc3QubyBkc3QubyBuZXRldmVudC5vIFwKIAkJCW5laWdoYm91ci5vIHJ0bmV0bGluay5vIHV0aWxzLm8gbGlua193YXRjaC5vIGZpbHRlci5vCiAKIG9iai0kKENPTkZJR19YRlJNKSArPSBmbG93Lm8KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNGQyYjUxNi4uZDRhMWVjMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExNiw2ICsxMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KIAogLyoKICAqCVRoZSBsaXN0IG9mIHBhY2tldCB0eXBlcyB3ZSB3aWxsIHJlY2VpdmUgKGFzIG9wcG9zZWQgdG8gZGlzY2FyZCkKQEAgLTYzMiwxNCArNjMzLDIyIEBACiAgKglAbmFtZTogbmFtZSBzdHJpbmcKICAqCiAgKglOZXR3b3JrIGRldmljZSBuYW1lcyBuZWVkIHRvIGJlIHZhbGlkIGZpbGUgbmFtZXMgdG8KLSAqCXRvIGFsbG93IHN5c2ZzIHRvIHdvcmsKKyAqCXRvIGFsbG93IHN5c2ZzIHRvIHdvcmsuICBXZSBhbHNvIGRpc2FsbG93IGFueSBraW5kIG9mCisgKgl3aGl0ZXNwYWNlLgogICovCiBpbnQgZGV2X3ZhbGlkX25hbWUoY29uc3QgY2hhciAqbmFtZSkKIHsKLQlyZXR1cm4gISgqbmFtZSA9PSAnXDAnIAotCQkgfHwgIXN0cmNtcChuYW1lLCAiLiIpCi0JCSB8fCAhc3RyY21wKG5hbWUsICIuLiIpCi0JCSB8fCBzdHJjaHIobmFtZSwgJy8nKSk7CisJaWYgKCpuYW1lID09ICdcMCcpCisJCXJldHVybiAwOworCWlmICghc3RyY21wKG5hbWUsICIuIikgfHwgIXN0cmNtcChuYW1lLCAiLi4iKSkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKm5hbWUpIHsKKwkJaWYgKCpuYW1lID09ICcvJyB8fCBpc3NwYWNlKCpuYW1lKSkKKwkJCXJldHVybiAwOworCQluYW1lKys7CisJfQorCXJldHVybiAxOwogfQogCiAvKioKQEAgLTExNjYsMTEgKzExNzUsNiBAQAogCQlnb3RvIG91dF9zZXRfc3VtbWVkOwogCiAJaWYgKHVubGlrZWx5KHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUpKSB7Ci0JCXN0YXRpYyBpbnQgd2FybmVkOwotCi0JCVdBUk5fT04oIXdhcm5lZCk7Ci0JCXdhcm5lZCA9IDE7Ci0KIAkJLyogTGV0IEdTTyBmaXggdXAgdGhlIGNoZWNrc3VtLiAqLwogCQlnb3RvIG91dF9zZXRfc3VtbWVkOwogCX0KQEAgLTEyMjAsMTEgKzEyMjQsNiBAQAogCV9fc2tiX3B1bGwoc2tiLCBza2ItPm1hY19sZW4pOwogCiAJaWYgKHVubGlrZWx5KHNrYi0+aXBfc3VtbWVkICE9IENIRUNLU1VNX0hXKSkgewotCQlzdGF0aWMgaW50IHdhcm5lZDsKLQotCQlXQVJOX09OKCF3YXJuZWQpOwotCQl3YXJuZWQgPSAxOwotCiAJCWlmIChza2JfaGVhZGVyX2Nsb25lZChza2IpICYmCiAJCSAgICAoZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpKSkKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CkBAIC0xNjI5LDI2ICsxNjI4LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCiAJaWYgKGRldi0+bWFzdGVyKSB7Ci0JCS8qCi0JCSAqIE9uIGJvbmRpbmcgc2xhdmVzIG90aGVyIHRoYW4gdGhlIGN1cnJlbnRseSBhY3RpdmUKLQkJICogc2xhdmUsIHN1cHByZXNzIGR1cGxpY2F0ZXMgZXhjZXB0IGZvciA4MDIuM2FkCi0JCSAqIEVUSF9QX1NMT1cgYW5kIGFsYiBub24tbWNhc3QvYmNhc3QuCi0JCSAqLwotCQlpZiAoZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX0lOQUNUSVZFKSB7Ci0JCQlpZiAoZGV2LT5tYXN0ZXItPnByaXZfZmxhZ3MgJiBJRkZfTUFTVEVSX0FMQikgewotCQkJCWlmIChza2ItPnBrdF90eXBlICE9IFBBQ0tFVF9CUk9BRENBU1QgJiYKLQkJCQkgICAgc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfTVVMVElDQVNUKQotCQkJCQlnb3RvIGtlZXA7Ci0JCQl9Ci0KLQkJCWlmIChkZXYtPm1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfODAyM0FEICYmCi0JCQkgICAgc2tiLT5wcm90b2NvbCA9PSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX1NMT1cpKQotCQkJCWdvdG8ga2VlcDsKLQkJCisJCWlmIChza2JfYm9uZF9zaG91bGRfZHJvcChza2IpKSB7CiAJCQlrZnJlZV9za2Ioc2tiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9Ci1rZWVwOgogCQlza2ItPmRldiA9IGRldi0+bWFzdGVyOwogCX0KIApAQCAtMzQyOSwxMiArMzQxMiw5IEBACiAJdW5zaWduZWQgaW50IGNwdSwgaSwgbjsKIAlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CiAKLQlsb2NrX2NwdV9ob3RwbHVnKCk7Ci0KIAlpZiAobmV0X2RtYV9jb3VudCA9PSAwKSB7CiAJCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQkJcmN1X2Fzc2lnbl9wb2ludGVyKHBlcl9jcHUoc29mdG5ldF9kYXRhLm5ldF9kbWEsIGNwdSksIE5VTEwpOwotCQl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKwkJCXJjdV9hc3NpZ25fcG9pbnRlcihwZXJfY3B1KHNvZnRuZXRfZGF0YSwgY3B1KS5uZXRfZG1hLCBOVUxMKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzQ0NywxNSArMzQyNywxMyBAQAogCQkgICArIChpIDwgKG51bV9vbmxpbmVfY3B1cygpICUgbmV0X2RtYV9jb3VudCkgPyAxIDogMCkpOwogCiAJCXdoaWxlKG4pIHsKLQkJCXBlcl9jcHUoc29mdG5ldF9kYXRhLm5ldF9kbWEsIGNwdSkgPSBjaGFuOworCQkJcGVyX2NwdShzb2Z0bmV0X2RhdGEsIGNwdSkubmV0X2RtYSA9IGNoYW47CiAJCQljcHUgPSBuZXh0X2NwdShjcHUsIGNwdV9vbmxpbmVfbWFwKTsKIAkJCW4tLTsKIAkJfQogCQlpKys7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwotCi0JdW5sb2NrX2NwdV9ob3RwbHVnKCk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZHN0LmMgYi9uZXQvY29yZS9kc3QuYwppbmRleCA0NzBjMDViLi4xYTVlNDlkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kc3QuYworKysgYi9uZXQvY29yZS9kc3QuYwpAQCAtOTUsMTIgKzk1LDExIEBACiAJCWRzdF9nY190aW1lcl9pbmMgPSBEU1RfR0NfSU5DOwogCQlkc3RfZ2NfdGltZXJfZXhwaXJlcyA9IERTVF9HQ19NSU47CiAJfQotCWRzdF9nY190aW1lci5leHBpcmVzID0gamlmZmllcyArIGRzdF9nY190aW1lcl9leHBpcmVzOwogI2lmIFJUX0NBQ0hFX0RFQlVHID49IDIKIAlwcmludGsoImRzdF90b3RhbDogJWQvJWQgJWxkXG4iLAogCSAgICAgICBhdG9taWNfcmVhZCgmZHN0X3RvdGFsKSwgZGVsYXllZCwgIGRzdF9nY190aW1lcl9leHBpcmVzKTsKICNlbmRpZgotCWFkZF90aW1lcigmZHN0X2djX3RpbWVyKTsKKwltb2RfdGltZXIoJmRzdF9nY190aW1lciwgamlmZmllcyArIGRzdF9nY190aW1lcl9leHBpcmVzKTsKIAogb3V0OgogCXNwaW5fdW5sb2NrKCZkc3RfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9ldGh0b29sLmMgYi9uZXQvY29yZS9ldGh0b29sLmMKaW5kZXggMjc5N2UyOC4uZTBjYTA0ZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZXRodG9vbC5jCisrKyBiL25ldC9jb3JlL2V0aHRvb2wuYwpAQCAtMTQzLDcgKzE0Myw3IEBACiBzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKLQlzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwogCiAJaWYgKCFvcHMtPmdldF9kcnZpbmZvKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC0xNjksNyArMTY5LDcgQEAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcmVncyByZWdzOwotCXN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CiAJdm9pZCAqcmVnYnVmOwogCWludCByZWdsZW4sIHJldDsKIApAQCAtMjgyLDcgKzI4Miw3IEBACiBzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfZWVwcm9tIGVlcHJvbTsKLQlzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwogCXU4ICpkYXRhOwogCWludCByZXQ7CiAKQEAgLTMyNyw3ICszMjcsNyBAQAogc3RhdGljIGludCBldGh0b29sX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX2VlcHJvbSBlZXByb207Ci0Jc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKIAl1OCAqZGF0YTsKIAlpbnQgcmV0OwogCkBAIC02NDAsNyArNjQwLDcgQEAKIHN0YXRpYyBpbnQgZXRodG9vbF9zZWxmX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3Rlc3QgdGVzdDsKLQlzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwogCXU2NCAqZGF0YTsKIAlpbnQgcmV0OwogCkBAIC02NzMsNyArNjczLDcgQEAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MgZ3N0cmluZ3M7Ci0Jc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCWNvbnN0IHN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKIAl1OCAqZGF0YTsKIAlpbnQgcmV0OwogCkBAIC03MzMsNyArNzMzLDcgQEAKIHN0YXRpYyBpbnQgZXRodG9vbF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3N0YXRzIHN0YXRzOwotCXN0cnVjdCBldGh0b29sX29wcyAqb3BzID0gZGV2LT5ldGh0b29sX29wczsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CiAJdTY0ICpkYXRhOwogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggN2FkNjgxZi4uZmUyMTEzZiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxuZXQvbmVpZ2hib3VyLmg+CiAjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisjaW5jbHVkZSA8bmV0L25ldGV2ZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC03NTQsNiArNzU1LDcgQEAKIAkJCW5laWdoLT5udWRfc3RhdGUgPSBOVURfU1RBTEU7CiAJCQluZWlnaC0+dXBkYXRlZCA9IGppZmZpZXM7CiAJCQluZWlnaF9zdXNwZWN0KG5laWdoKTsKKwkJCW5vdGlmeSA9IDE7CiAJCX0KIAl9IGVsc2UgaWYgKHN0YXRlICYgTlVEX0RFTEFZKSB7CiAJCWlmICh0aW1lX2JlZm9yZV9lcShub3csIApAQCAtNzYyLDYgKzc2NCw3IEBACiAJCQluZWlnaC0+bnVkX3N0YXRlID0gTlVEX1JFQUNIQUJMRTsKIAkJCW5laWdoLT51cGRhdGVkID0gamlmZmllczsKIAkJCW5laWdoX2Nvbm5lY3QobmVpZ2gpOworCQkJbm90aWZ5ID0gMTsKIAkJCW5leHQgPSBuZWlnaC0+Y29uZmlybWVkICsgbmVpZ2gtPnBhcm1zLT5yZWFjaGFibGVfdGltZTsKIAkJfSBlbHNlIHsKIAkJCU5FSUdIX1BSSU5USzIoIm5laWdoICVwIGlzIHByb2JlZC5cbiIsIG5laWdoKTsKQEAgLTgxOSw2ICs4MjIsOCBAQAogb3V0OgogCQl3cml0ZV91bmxvY2soJm5laWdoLT5sb2NrKTsKIAl9CisJaWYgKG5vdGlmeSkKKwkJY2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfTkVJR0hfVVBEQVRFLCBuZWlnaCk7CiAKICNpZmRlZiBDT05GSUdfQVJQRAogCWlmIChub3RpZnkgJiYgbmVpZ2gtPnBhcm1zLT5hcHBfcHJvYmVzKQpAQCAtOTI2LDkgKzkzMSw3IEBACiB7CiAJdTggb2xkOwogCWludCBlcnI7Ci0jaWZkZWYgQ09ORklHX0FSUEQKIAlpbnQgbm90aWZ5ID0gMDsKLSNlbmRpZgogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IHVwZGF0ZV9pc3JvdXRlciA9IDA7CiAKQEAgLTk0OCw5ICs5NTEsNyBAQAogCQkJbmVpZ2hfc3VzcGVjdChuZWlnaCk7CiAJCW5laWdoLT5udWRfc3RhdGUgPSBuZXc7CiAJCWVyciA9IDA7Ci0jaWZkZWYgQ09ORklHX0FSUEQKIAkJbm90aWZ5ID0gb2xkICYgTlVEX1ZBTElEOwotI2VuZGlmCiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTAyMiw5ICsxMDIzLDcgQEAKIAkJaWYgKCEobmV3ICYgTlVEX0NPTk5FQ1RFRCkpCiAJCQluZWlnaC0+Y29uZmlybWVkID0gamlmZmllcyAtCiAJCQkJICAgICAgKG5laWdoLT5wYXJtcy0+YmFzZV9yZWFjaGFibGVfdGltZSA8PCAxKTsKLSNpZmRlZiBDT05GSUdfQVJQRAogCQlub3RpZnkgPSAxOwotI2VuZGlmCiAJfQogCWlmIChuZXcgPT0gb2xkKQogCQlnb3RvIG91dDsKQEAgLTEwNTYsNiArMTA1NSw5IEBACiAJCQkobmVpZ2gtPmZsYWdzICYgfk5URl9ST1VURVIpOwogCX0KIAl3cml0ZV91bmxvY2tfYmgoJm5laWdoLT5sb2NrKTsKKworCWlmIChub3RpZnkpCisJCWNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKE5FVEVWRU5UX05FSUdIX1VQREFURSwgbmVpZ2gpOwogI2lmZGVmIENPTkZJR19BUlBECiAJaWYgKG5vdGlmeSAmJiBuZWlnaC0+cGFybXMtPmFwcF9wcm9iZXMpCiAJCW5laWdoX2FwcF9ub3RpZnkobmVpZ2gpOwpAQCAtMTQzMCw2ICsxNDMyLDkgQEAKIAlrZnJlZSh0YmwtPnBoYXNoX2J1Y2tldHMpOwogCXRibC0+cGhhc2hfYnVja2V0cyA9IE5VTEw7CiAKKwlmcmVlX3BlcmNwdSh0YmwtPnN0YXRzKTsKKwl0YmwtPnN0YXRzID0gTlVMTDsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9uZXRldmVudC5jIGIvbmV0L2NvcmUvbmV0ZXZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWQwMmMzCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L2NvcmUvbmV0ZXZlbnQuYwpAQCAtMCwwICsxLDY5IEBACisvKgorICoJTmV0d29yayBldmVudCBub3RpZmllcnMKKyAqCisgKglBdXRob3JzOgorICogICAgICBUb20gVHVja2VyICAgICAgICAgICAgIDx0b21Ab3BlbmdyaWRjb21wdXRpbmcuY29tPgorICogICAgICBTdGV2ZSBXaXNlICAgICAgICAgICAgIDxzd2lzZUBvcGVuZ3JpZGNvbXB1dGluZy5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogICAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgICBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqICAgICAgMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglGaXhlczoKKyAqLworCisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKworc3RhdGljIEFUT01JQ19OT1RJRklFUl9IRUFEKG5ldGV2ZW50X25vdGlmX2NoYWluKTsKKworLyoqCisgKglyZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllciAtIHJlZ2lzdGVyIGEgbmV0ZXZlbnQgbm90aWZpZXIgYmxvY2sKKyAqCUBuYjogbm90aWZpZXIKKyAqCisgKglSZWdpc3RlciBhIG5vdGlmaWVyIHRvIGJlIGNhbGxlZCB3aGVuIGEgbmV0ZXZlbnQgb2NjdXJzLgorICoJVGhlIG5vdGlmaWVyIHBhc3NlZCBpcyBsaW5rZWQgaW50byB0aGUga2VybmVsIHN0cnVjdHVyZXMgYW5kIG11c3QKKyAqCW5vdCBiZSByZXVzZWQgdW50aWwgaXQgaGFzIGJlZW4gdW5yZWdpc3RlcmVkLiBBIG5lZ2F0aXZlIGVycm5vIGNvZGUKKyAqCWlzIHJldHVybmVkIG9uIGEgZmFpbHVyZS4KKyAqLworaW50IHJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJaW50IGVycjsKKworCWVyciA9IGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmbmV0ZXZlbnRfbm90aWZfY2hhaW4sIG5iKTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqCW5ldGV2ZW50X3VucmVnaXN0ZXJfbm90aWZpZXIgLSB1bnJlZ2lzdGVyIGEgbmV0ZXZlbnQgbm90aWZpZXIgYmxvY2sKKyAqCUBuYjogbm90aWZpZXIKKyAqCisgKglVbnJlZ2lzdGVyIGEgbm90aWZpZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIGJ5CisgKglyZWdpc3Rlcl9uZWlnaF9ub3RpZmllcigpLiBUaGUgbm90aWZpZXIgaXMgdW5saW5rZWQgaW50byB0aGUKKyAqCWtlcm5lbCBzdHJ1Y3R1cmVzIGFuZCBtYXkgdGhlbiBiZSByZXVzZWQuIEEgbmVnYXRpdmUgZXJybm8gY29kZQorICoJaXMgcmV0dXJuZWQgb24gYSBmYWlsdXJlLgorICovCisKK2ludCB1bnJlZ2lzdGVyX25ldGV2ZW50X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZuZXRldmVudF9ub3RpZl9jaGFpbiwgbmIpOworfQorCisvKioKKyAqCWNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzIC0gY2FsbCBhbGwgbmV0ZXZlbnQgbm90aWZpZXIgYmxvY2tzCisgKiAgICAgIEB2YWw6IHZhbHVlIHBhc3NlZCB1bm1vZGlmaWVkIHRvIG5vdGlmaWVyIGZ1bmN0aW9uCisgKiAgICAgIEB2OiAgIHBvaW50ZXIgcGFzc2VkIHVubW9kaWZpZWQgdG8gbm90aWZpZXIgZnVuY3Rpb24KKyAqCisgKglDYWxsIGFsbCBuZWlnaGJvdXIgbm90aWZpZXIgYmxvY2tzLiAgUGFyYW1ldGVycyBhbmQgcmV0dXJuIHZhbHVlCisgKglhcmUgYXMgZm9yIG5vdGlmaWVyX2NhbGxfY2hhaW4oKS4KKyAqLworCitpbnQgY2FsbF9uZXRldmVudF9ub3RpZmllcnModW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYpCit7CisJcmV0dXJuIGF0b21pY19ub3RpZmllcl9jYWxsX2NoYWluKCZuZXRldmVudF9ub3RpZl9jaGFpbiwgdmFsLCB2KTsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfbmV0ZXZlbnRfbm90aWZpZXIpOworRVhQT1JUX1NZTUJPTF9HUEwodW5yZWdpc3Rlcl9uZXRldmVudF9ub3RpZmllcik7CitFWFBPUlRfU1lNQk9MX0dQTChjYWxsX25ldGV2ZW50X25vdGlmaWVycyk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDY3ZWQxNGQuLjZhNzMyMGIgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yMTQ5LDYgKzIxNDksOCBAQAogCXNrYi0+bWFjLnJhdyA9ICgodTggKikgaXBoKSAtIDE0IC0gcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZih1MzIpOwogCXNrYi0+ZGV2ID0gb2RldjsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CisJc2tiLT5uaC5pcGggPSBpcGg7CisJc2tiLT5oLnVoID0gdWRwaDsKIAogCWlmIChwa3RfZGV2LT5uZnJhZ3MgPD0gMCkKIAkJcGdoID0gKHN0cnVjdCBwa3RnZW5faGRyICopc2tiX3B1dChza2IsIGRhdGFsZW4pOwpAQCAtMjQ2MCw2ICsyNDYyLDggQEAKIAlza2ItPnByb3RvY29sID0gcHJvdG9jb2w7CiAJc2tiLT5kZXYgPSBvZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKKwlza2ItPm5oLmlwdjZoID0gaXBoOworCXNrYi0+aC51aCA9IHVkcGg7CiAKIAlpZiAocGt0X2Rldi0+bmZyYWdzIDw9IDApCiAJCXBnaCA9IChzdHJ1Y3QgcGt0Z2VuX2hkciAqKXNrYl9wdXQoc2tiLCBkYXRhbGVuKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggMjBlNWJiNy4uMzBjYzFiYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTM5NCw2ICszOTQsOSBAQAogCX0KIAogCWlmIChpZGFbSUZMQV9BRERSRVNTIC0gMV0pIHsKKwkJc3RydWN0IHNvY2thZGRyICpzYTsKKwkJaW50IGxlbjsKKwogCQlpZiAoIWRldi0+c2V0X21hY19hZGRyZXNzKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJCWdvdG8gb3V0OwpAQCAtNDA1LDcgKzQwOCwxNyBAQAogCQlpZiAoaWRhW0lGTEFfQUREUkVTUyAtIDFdLT5ydGFfbGVuICE9IFJUQV9MRU5HVEgoZGV2LT5hZGRyX2xlbikpCiAJCQlnb3RvIG91dDsKIAotCQllcnIgPSBkZXYtPnNldF9tYWNfYWRkcmVzcyhkZXYsIFJUQV9EQVRBKGlkYVtJRkxBX0FERFJFU1MgLSAxXSkpOworCQlsZW4gPSBzaXplb2Yoc2FfZmFtaWx5X3QpICsgZGV2LT5hZGRyX2xlbjsKKwkJc2EgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2EpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIG91dDsKKwkJfQorCQlzYS0+c2FfZmFtaWx5ID0gZGV2LT50eXBlOworCQltZW1jcHkoc2EtPnNhX2RhdGEsIFJUQV9EQVRBKGlkYVtJRkxBX0FERFJFU1MgLSAxXSksCisJCSAgICAgICBkZXYtPmFkZHJfbGVuKTsKKwkJZXJyID0gZGV2LT5zZXRfbWFjX2FkZHJlc3MoZGV2LCBzYSk7CisJCWtmcmVlKHNhKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gb3V0OwogCQlzZW5kX2FkZHJfbm90aWZ5ID0gMTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NrYnVmZi5jIGIvbmV0L2NvcmUvc2tidWZmLmMKaW5kZXggNDc2YWEzOS4uYzU0ZjM2NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2tidWZmLmMKKysrIGIvbmV0L2NvcmUvc2tidWZmLmMKQEAgLTcxLDEzICs3MSw2IEBACiBzdGF0aWMga21lbV9jYWNoZV90ICpza2J1ZmZfZmNsb25lX2NhY2hlIF9fcmVhZF9tb3N0bHk7CiAKIC8qCi0gKiBsb2NrZGVwOiBsb2NrIGNsYXNzIGtleSB1c2VkIGJ5IHNrYl9xdWV1ZV9oZWFkX2luaXQoKToKLSAqLwotc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHNrYl9xdWV1ZV9sb2NrX2tleTsKLQotRVhQT1JUX1NZTUJPTChza2JfcXVldWVfbG9ja19rZXkpOwotCi0vKgogICoJS2VlcCBvdXQtb2YtbGluZSB0byBwcmV2ZW50IGtlcm5lbCBibG9hdC4KICAqCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcyBpcyBub3QgdXNlZCBiZWNhdXNlIGl0IGlzIG5vdCBhbHdheXMKICAqCXJlbGlhYmxlLgpAQCAtMjU2LDYgKzI0OSwzMSBAQAogCWdvdG8gb3V0OwogfQogCisvKioKKyAqCV9fbmV0ZGV2X2FsbG9jX3NrYiAtIGFsbG9jYXRlIGFuIHNrYnVmZiBmb3Igcnggb24gYSBzcGVjaWZpYyBkZXZpY2UKKyAqCUBkZXY6IG5ldHdvcmsgZGV2aWNlIHRvIHJlY2VpdmUgb24KKyAqCUBsZW5ndGg6IGxlbmd0aCB0byBhbGxvY2F0ZQorICoJQGdmcF9tYXNrOiBnZXRfZnJlZV9wYWdlcyBtYXNrLCBwYXNzZWQgdG8gYWxsb2Nfc2tiCisgKgorICoJQWxsb2NhdGUgYSBuZXcgJnNrX2J1ZmYgYW5kIGFzc2lnbiBpdCBhIHVzYWdlIGNvdW50IG9mIG9uZS4gVGhlCisgKglidWZmZXIgaGFzIHVuc3BlY2lmaWVkIGhlYWRyb29tIGJ1aWx0IGluLiBVc2VycyBzaG91bGQgYWxsb2NhdGUKKyAqCXRoZSBoZWFkcm9vbSB0aGV5IHRoaW5rIHRoZXkgbmVlZCB3aXRob3V0IGFjY291bnRpbmcgZm9yIHRoZQorICoJYnVpbHQgaW4gc3BhY2UuIFRoZSBidWlsdCBpbiBzcGFjZSBpcyB1c2VkIGZvciBvcHRpbWlzYXRpb25zLgorICoKKyAqCSVOVUxMIGlzIHJldHVybmVkIGlmIHRoZXJlIGlzIG5vIGZyZWUgbWVtb3J5LgorICovCitzdHJ1Y3Qgc2tfYnVmZiAqX19uZXRkZXZfYWxsb2Nfc2tiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGludCBsZW5ndGgsIGdmcF90IGdmcF9tYXNrKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBhbGxvY19za2IobGVuZ3RoICsgTkVUX1NLQl9QQUQsIGdmcF9tYXNrKTsKKwlpZiAobGlrZWx5KHNrYikpIHsKKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfU0tCX1BBRCk7CisJCXNrYi0+ZGV2ID0gZGV2OworCX0KKwlyZXR1cm4gc2tiOworfQogCiBzdGF0aWMgdm9pZCBza2JfZHJvcF9saXN0KHN0cnVjdCBza19idWZmICoqbGlzdHApCiB7CkBAIC04NDYsNyArODY0LDExIEBACiAJICAgIHVubGlrZWx5KChlcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNrYiwgMCwgMCwgR0ZQX0FUT01JQykpKSkKIAkJcmV0dXJuIGVycjsKIAotCWZvciAoaSA9IDA7IGkgPCBuZnJhZ3M7IGkrKykgeworCWkgPSAwOworCWlmIChvZmZzZXQgPj0gbGVuKQorCQlnb3RvIGRyb3BfcGFnZXM7CisKKwlmb3IgKDsgaSA8IG5mcmFnczsgaSsrKSB7CiAJCWludCBlbmQgPSBvZmZzZXQgKyBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemU7CiAKIAkJaWYgKGVuZCA8IGxlbikgewpAQCAtODU0LDkgKzg3Niw5IEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCWlmIChsZW4gPiBvZmZzZXQpCi0JCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2krK10uc2l6ZSA9IGxlbiAtIG9mZnNldDsKKwkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpKytdLnNpemUgPSBsZW4gLSBvZmZzZXQ7CiAKK2Ryb3BfcGFnZXM6CiAJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MgPSBpOwogCiAJCWZvciAoOyBpIDwgbmZyYWdzOyBpKyspCkBAIC04NjQsNyArODg2LDcgQEAKIAogCQlpZiAoc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3QpCiAJCQlza2JfZHJvcF9mcmFnbGlzdChza2IpOwotCQlicmVhazsKKwkJZ290byBkb25lOwogCX0KIAogCWZvciAoZnJhZ3AgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7IChmcmFnID0gKmZyYWdwKTsKQEAgLTg3OSw2ICs5MDEsNyBAQAogCQkJCXJldHVybiAtRU5PTUVNOwogCiAJCQluZnJhZy0+bmV4dCA9IGZyYWctPm5leHQ7CisJCQlrZnJlZV9za2IoZnJhZyk7CiAJCQlmcmFnID0gbmZyYWc7CiAJCQkqZnJhZ3AgPSBmcmFnOwogCQl9CkBAIC04OTcsNiArOTIwLDcgQEAKIAkJYnJlYWs7CiAJfQogCitkb25lOgogCWlmIChsZW4gPiBza2JfaGVhZGxlbihza2IpKSB7CiAJCXNrYi0+ZGF0YV9sZW4gLT0gc2tiLT5sZW4gLSBsZW47CiAJCXNrYi0+bGVuICAgICAgID0gbGVuOwpAQCAtMjA0Miw2ICsyMDY2LDcgQEAKIEVYUE9SVF9TWU1CT0woa2ZyZWVfc2tiKTsKIEVYUE9SVF9TWU1CT0woX19wc2tiX3B1bGxfdGFpbCk7CiBFWFBPUlRfU1lNQk9MKF9fYWxsb2Nfc2tiKTsKK0VYUE9SVF9TWU1CT0woX19uZXRkZXZfYWxsb2Nfc2tiKTsKIEVYUE9SVF9TWU1CT0wocHNrYl9jb3B5KTsKIEVYUE9SVF9TWU1CT0wocHNrYl9leHBhbmRfaGVhZCk7CiBFWFBPUlRfU1lNQk9MKHNrYl9jaGVja3N1bSk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS91dGlscy5jIGIvbmV0L2NvcmUvdXRpbHMuYwppbmRleCA0Zjk2ZjM4Li5lMzFjOTBlMCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0xMzAsMTIgKzEzMCwxMyBAQAogc3RhdGljIGludCBuZXRfcmFuZG9tX3Jlc2VlZCh2b2lkKQogewogCWludCBpOwotCXVuc2lnbmVkIGxvbmcgc2VlZFtOUl9DUFVTXTsKKwl1bnNpZ25lZCBsb25nIHNlZWQ7CiAKLQlnZXRfcmFuZG9tX2J5dGVzKHNlZWQsIHNpemVvZihzZWVkKSk7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKIAkJc3RydWN0IG5ybmRfc3RhdGUgKnN0YXRlID0gJnBlcl9jcHUobmV0X3JhbmRfc3RhdGUsaSk7Ci0JCV9fbmV0X3NyYW5kb20oc3RhdGUsIHNlZWRbaV0pOworCisJCWdldF9yYW5kb21fYnl0ZXMoJnNlZWQsIHNpemVvZihzZWVkKSk7CisJCV9fbmV0X3NyYW5kb20oc3RhdGUsIHNlZWQpOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL3dpcmVsZXNzLmMgYi9uZXQvY29yZS93aXJlbGVzcy5jCmluZGV4IGQyYmM3MmQuLmRlMGJkZTQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3dpcmVsZXNzLmMKKysrIGIvbmV0L2NvcmUvd2lyZWxlc3MuYwpAQCAtODIsNiArODIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCQkvKiBmb3IgX19pbml0ICovCiAjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CQkvKiBBUlBIUkRfRVRIRVIgKi8KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgkJLyogY29tcGFyZV9ldGhlcl9hZGRyICovCisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgkJLyogUHJldHR5IG9idmlvdXMgKi8KICNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgkJLyogTmV3IGRyaXZlciBBUEkgKi8KQEAgLTE4NDIsNiArMTg0MywxOCBAQAogICovCiAKICNpZmRlZiBXRV9FVkVOVF9SVE5FVExJTksKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdpcmVsZXNzX25sZXZlbnRfcXVldWU7CisKK3N0YXRpYyB2b2lkIHdpcmVsZXNzX25sZXZlbnRfcHJvY2Vzcyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJndpcmVsZXNzX25sZXZlbnRfcXVldWUpKSkKKwkJbmV0bGlua19icm9hZGNhc3QocnRubCwgc2tiLCAwLCBSVE5MR1JQX0xJTkssIEdGUF9BVE9NSUMpOworfQorCitzdGF0aWMgREVDTEFSRV9UQVNLTEVUKHdpcmVsZXNzX25sZXZlbnRfdGFza2xldCwgd2lyZWxlc3NfbmxldmVudF9wcm9jZXNzLCAwKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIEZpbGwgYSBydG5ldGxpbmsgbWVzc2FnZSB3aXRoIG91ciBldmVudCBkYXRhLgpAQCAtMTkwNCw4ICsxOTE3LDE3IEBACiAJCXJldHVybjsKIAl9CiAJTkVUTElOS19DQihza2IpLmRzdF9ncm91cCA9IFJUTkxHUlBfTElOSzsKLQluZXRsaW5rX2Jyb2FkY2FzdChydG5sLCBza2IsIDAsIFJUTkxHUlBfTElOSywgR0ZQX0FUT01JQyk7CisJc2tiX3F1ZXVlX3RhaWwoJndpcmVsZXNzX25sZXZlbnRfcXVldWUsIHNrYik7CisJdGFza2xldF9zY2hlZHVsZSgmd2lyZWxlc3NfbmxldmVudF90YXNrbGV0KTsKIH0KKworc3RhdGljIGludCBfX2luaXQgd2lyZWxlc3NfbmxldmVudF9pbml0KHZvaWQpCit7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2lyZWxlc3NfbmxldmVudF9xdWV1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbCh3aXJlbGVzc19ubGV2ZW50X2luaXQpOwogI2VuZGlmCS8qIFdFX0VWRU5UX1JUTkVUTElOSyAqLwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwppbmRleCBjMzliZmY3Li4wOTBiYzM5IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgbmV0L2RjY3AvY2NpZHMvY2NpZDMuYwogICoKICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgotICogIENvcHlyaWdodCAoYykgMjAwNS02IElhbiBNY0RvbmFsZCA8aW1jZG56bEBnbWFpbC5jb20+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LTYgSWFuIE1jRG9uYWxkIDxpYW4ubWNkb25hbGRAamFuZGkuY28ubno+CiAgKgogICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCiAgKgpAQCAtMzQyLDYgKzM0Miw4IEBACiAJCW5ld19wYWNrZXQtPmRjY3BodHhfY2N2YWwgPQogCQkJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfY2N2YWwgPQogCQkJCWhjdHgtPmNjaWQzaGN0eF9sYXN0X3dpbl9jb3VudDsKKwkJdGltZXZhbF9hZGRfdXNlY3MoJmhjdHgtPmNjaWQzaGN0eF90X25vbSwKKwkJCQkgIGhjdHgtPmNjaWQzaGN0eF90X2lwaSk7CiAJfQogb3V0OgogCXJldHVybiByYzsKQEAgLTQxMyw3ICs0MTUsOCBAQAogCWNhc2UgVEZSQ19TU1RBVEVfTk9fRkJBQ0s6CiAJY2FzZSBURlJDX1NTVEFURV9GQkFDSzoKIAkJaWYgKGxlbiA+IDApIHsKLQkJCWhjdHgtPmNjaWQzaGN0eF90X25vbSA9IG5vdzsKKwkJCXRpbWV2YWxfc3ViX3VzZWNzKCZoY3R4LT5jY2lkM2hjdHhfdF9ub20sCisJCQkJICBoY3R4LT5jY2lkM2hjdHhfdF9pcGkpOwogCQkJY2NpZDNfY2FsY19uZXdfdF9pcGkoaGN0eCk7CiAJCQljY2lkM19jYWxjX25ld19kZWx0YShoY3R4KTsKIAkJCXRpbWV2YWxfYWRkX3VzZWNzKCZoY3R4LT5jY2lkM2hjdHhfdF9ub20sCkBAIC03NTcsOCArNzYwLDcgQEAKIAl9CiAKIAloY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2sgPSBub3c7Ci0JaGNyeC0+Y2NpZDNoY3J4X2xhc3RfY291bnRlcgkgICAgID0gcGFja2V0LT5kY2NwaHJ4X2NjdmFsOwotCWhjcngtPmNjaWQzaGNyeF9zZXFub19sYXN0X2NvdW50ZXIgICA9IHBhY2tldC0+ZGNjcGhyeF9zZXFubzsKKwloY3J4LT5jY2lkM2hjcnhfY2N2YWxfbGFzdF9jb3VudGVyICAgPSBwYWNrZXQtPmRjY3BocnhfY2N2YWw7CiAJaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YJICAgICA9IDA7CiAKIAkvKiBDb252ZXJ0IHRvIG11bHRpcGxlcyBvZiAxMHVzICovCkBAIC03ODIsNyArNzg0LDcgQEAKIAlpZiAoIShzay0+c2tfc3RhdGUgPT0gRENDUF9PUEVOIHx8IHNrLT5za19zdGF0ZSA9PSBEQ0NQX1BBUlRPUEVOKSkKIAkJcmV0dXJuIDA7CiAKLQlEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF9jY3ZhbCA9IGhjcngtPmNjaWQzaGNyeF9sYXN0X2NvdW50ZXI7CisJRENDUF9TS0JfQ0Ioc2tiKS0+ZGNjcGRfY2N2YWwgPSBoY3J4LT5jY2lkM2hjcnhfY2N2YWxfbGFzdF9jb3VudGVyOwogCiAJaWYgKGRjY3BfcGFja2V0X3dpdGhvdXRfYWNrKHNrYikpCiAJCXJldHVybiAwOwpAQCAtODU0LDYgKzg1NiwxMSBAQAogCQlpbnRlcnZhbCA9IDE7CiAJfQogZm91bmQ6CisJaWYgKCF0YWlsKSB7CisJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6IHRhaWwgaXMgbnVsbFxuIiwKKwkJICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIH4wOworCX0KIAlydHQgPSB0aW1ldmFsX2RlbHRhKCZ0c3RhbXAsICZ0YWlsLT5kY2NwaHJ4X3RzdGFtcCkgKiA0IC8gaW50ZXJ2YWw7CiAJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCwgYXBwcm94aW1hdGVkIFJUVCB0byAldXVzXG4iLAogCQkgICAgICAgZGNjcF9yb2xlKHNrKSwgc2ssIHJ0dCk7CkBAIC04NjQsOSArODcxLDIwIEBACiAJZGVsdGEgPSB0aW1ldmFsX2RlbHRhKCZ0c3RhbXAsICZoY3J4LT5jY2lkM2hjcnhfdHN0YW1wX2xhc3RfZmVlZGJhY2spOwogCXhfcmVjdiA9IHVzZWNzX2RpdihoY3J4LT5jY2lkM2hjcnhfYnl0ZXNfcmVjdiwgZGVsdGEpOwogCisJaWYgKHhfcmVjdiA9PSAwKQorCQl4X3JlY3YgPSBoY3J4LT5jY2lkM2hjcnhfeF9yZWN2OworCiAJdG1wMSA9ICh1NjQpeF9yZWN2ICogKHU2NClydHQ7CiAJZG9fZGl2KHRtcDEsMTAwMDAwMDApOwogCXRtcDIgPSAodTMyKXRtcDE7CisKKwlpZiAoIXRtcDIpIHsKKwkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICJ0bXAyID0gMCAiCisJCSAgICIlczogeF9yZWN2ID0gJXUsIHJ0dCA9JXVcbiIsCisJCSAgIF9fRlVOQ1RJT05fXywgeF9yZWN2LCBydHQpOworCQlyZXR1cm4gfjA7CisJfQorCiAJZnZhbCA9IChoY3J4LT5jY2lkM2hjcnhfcyAqIDEwMDAwMCkgLyB0bXAyOwogCS8qIGRvIG5vdCBhbHRlciBvcmRlciBhYm92ZSBvciB5b3Ugd2lsbCBnZXQgb3ZlcmZsb3cgb24gMzIgYml0ICovCiAJcCA9IHRmcmNfY2FsY194X3JldmVyc2VfbG9va3VwKGZ2YWwpOwpAQCAtODgyLDMxICs5MDAsMTAxIEBACiBzdGF0aWMgdm9pZCBjY2lkM19oY19yeF91cGRhdGVfbGkoc3RydWN0IHNvY2sgKnNrLCB1NjQgc2VxX2xvc3MsIHU4IHdpbl9sb3NzKQogewogCXN0cnVjdCBjY2lkM19oY19yeF9zb2NrICpoY3J4ID0gY2NpZDNfaGNfcnhfc2soc2spOworCXN0cnVjdCBkY2NwX2xpX2hpc3RfZW50cnkgKm5leHQsICpoZWFkOworCXU2NCBzZXFfdGVtcDsKIAotCWlmIChzZXFfbG9zcyAhPSBEQ0NQX01BWF9TRVFOTyArIDEgJiYKLQkgICAgbGlzdF9lbXB0eSgmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QpKSB7Ci0JCXN0cnVjdCBkY2NwX2xpX2hpc3RfZW50cnkgKmxpX3RhaWw7Ci0KLQkJbGlfdGFpbCA9IGRjY3BfbGlfaGlzdF9pbnRlcnZhbF9uZXcoY2NpZDNfbGlfaGlzdCwKLQkJCQkJCSAgICAmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QsCi0JCQkJCQkgICAgc2VxX2xvc3MsIHdpbl9sb3NzKTsKLQkJaWYgKGxpX3RhaWwgPT0gTlVMTCkKKwlpZiAobGlzdF9lbXB0eSgmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QpKSB7CisJCWlmICghZGNjcF9saV9oaXN0X2ludGVydmFsX25ldyhjY2lkM19saV9oaXN0LAorCQkgICAmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QsIHNlcV9sb3NzLCB3aW5fbG9zcykpCiAJCQlyZXR1cm47Ci0JCWxpX3RhaWwtPmRjY3BsaWhfaW50ZXJ2YWwgPSBjY2lkM19oY19yeF9jYWxjX2ZpcnN0X2xpKHNrKTsKLQl9IGVsc2UKLQkJICAgIExJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiJXM6IEZJWE1FOiBmaW5kIGVuZCBvZiAiCi0JCQkJICAgImludGVydmFsXG4iLCBfX0ZVTkNUSU9OX18pOworCisJCW5leHQgPSAoc3RydWN0IGRjY3BfbGlfaGlzdF9lbnRyeSAqKQorCQkgICBoY3J4LT5jY2lkM2hjcnhfbGlfaGlzdC5uZXh0OworCQluZXh0LT5kY2NwbGloX2ludGVydmFsID0gY2NpZDNfaGNfcnhfY2FsY19maXJzdF9saShzayk7CisJfSBlbHNlIHsKKwkJc3RydWN0IGRjY3BfbGlfaGlzdF9lbnRyeSAqZW50cnk7CisJCXN0cnVjdCBsaXN0X2hlYWQgKnRhaWw7CisKKwkJaGVhZCA9IChzdHJ1Y3QgZGNjcF9saV9oaXN0X2VudHJ5ICopCisJCSAgIGhjcngtPmNjaWQzaGNyeF9saV9oaXN0Lm5leHQ7CisJCS8qIEZJWE1FIHdpbiBjb3VudCBjaGVjayByZW1vdmVkIGFzIHdhcyB3cm9uZyAqLworCQkvKiBzaG91bGQgbWFrZSB0aGlzIGNoZWNrIHdpdGggcmVjZWl2ZSBoaXN0b3J5ICovCisJCS8qIGFuZCBjb21wYXJlIHRoZXJlIGFzIHBlciBzZWN0aW9uIDEwLjIgb2YgUkZDNDM0MiAqLworCisJCS8qIG5ldyBsb3NzIGV2ZW50IGRldGVjdGVkICovCisJCS8qIGNhbGN1bGF0ZSBsYXN0IGludGVydmFsIGxlbmd0aCAqLworCQlzZXFfdGVtcCA9IGRjY3BfZGVsdGFfc2Vxbm8oaGVhZC0+ZGNjcGxpaF9zZXFubywgc2VxX2xvc3MpOworCQllbnRyeSA9IGRjY3BfbGlfaGlzdF9lbnRyeV9uZXcoY2NpZDNfbGlfaGlzdCwgU0xBQl9BVE9NSUMpOworCisJCWlmIChlbnRyeSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9DUklUICIlczogb3V0IG9mIG1lbW9yeVxuIixfX0ZVTkNUSU9OX18pOworCQkJZHVtcF9zdGFjaygpOworCQkJcmV0dXJuOworCQl9CisKKwkJbGlzdF9hZGQoJmVudHJ5LT5kY2NwbGloX25vZGUsICZoY3J4LT5jY2lkM2hjcnhfbGlfaGlzdCk7CisKKwkJdGFpbCA9IGhjcngtPmNjaWQzaGNyeF9saV9oaXN0LnByZXY7CisJCWxpc3RfZGVsKHRhaWwpOworCQlrbWVtX2NhY2hlX2ZyZWUoY2NpZDNfbGlfaGlzdC0+ZGNjcGxpaF9zbGFiLCB0YWlsKTsKKworCQkvKiBDcmVhdGUgdGhlIG5ld2VzdCBpbnRlcnZhbCAqLworCQllbnRyeS0+ZGNjcGxpaF9zZXFubyA9IHNlcV9sb3NzOworCQllbnRyeS0+ZGNjcGxpaF9pbnRlcnZhbCA9IHNlcV90ZW1wOworCQllbnRyeS0+ZGNjcGxpaF93aW5fY291bnQgPSB3aW5fbG9zczsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGNjaWQzX2hjX3J4X2RldGVjdF9sb3NzKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbnQgY2NpZDNfaGNfcnhfZGV0ZWN0X2xvc3Moc3RydWN0IHNvY2sgKnNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqcGFja2V0KQogewogCXN0cnVjdCBjY2lkM19oY19yeF9zb2NrICpoY3J4ID0gY2NpZDNfaGNfcnhfc2soc2spOwotCXU4IHdpbl9sb3NzOwotCWNvbnN0IHU2NCBzZXFfbG9zcyA9IGRjY3BfcnhfaGlzdF9kZXRlY3RfbG9zcygmaGNyeC0+Y2NpZDNoY3J4X2hpc3QsCi0JCQkJCQkgICAgICAmaGNyeC0+Y2NpZDNoY3J4X2xpX2hpc3QsCi0JCQkJCQkgICAgICAmd2luX2xvc3MpOworCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnJ4X2hpc3QgPSBkY2NwX3J4X2hpc3RfaGVhZCgmaGNyeC0+Y2NpZDNoY3J4X2hpc3QpOworCXU2NCBzZXFubyA9IHBhY2tldC0+ZGNjcGhyeF9zZXFubzsKKwl1NjQgdG1wX3NlcW5vOworCWludCBsb3NzID0gMDsKKwl1OCBjY3ZhbDsKIAotCWNjaWQzX2hjX3J4X3VwZGF0ZV9saShzaywgc2VxX2xvc3MsIHdpbl9sb3NzKTsKKworCXRtcF9zZXFubyA9IGhjcngtPmNjaWQzaGNyeF9zZXFub19ub25sb3NzOworCisJaWYgKCFyeF9oaXN0IHx8CisJICAgZm9sbG93czQ4KHBhY2tldC0+ZGNjcGhyeF9zZXFubywgaGNyeC0+Y2NpZDNoY3J4X3NlcW5vX25vbmxvc3MpKSB7CisJCWhjcngtPmNjaWQzaGNyeF9zZXFub19ub25sb3NzID0gc2Vxbm87CisJCWhjcngtPmNjaWQzaGNyeF9jY3ZhbF9ub25sb3NzID0gcGFja2V0LT5kY2NwaHJ4X2NjdmFsOworCQlnb3RvIGRldGVjdF9vdXQ7CisJfQorCisKKwl3aGlsZSAoZGNjcF9kZWx0YV9zZXFubyhoY3J4LT5jY2lkM2hjcnhfc2Vxbm9fbm9ubG9zcywgc2Vxbm8pCisJICAgPiBURlJDX1JFQ1ZfTlVNX0xBVEVfTE9TUykgeworCQlsb3NzID0gMTsKKwkJY2NpZDNfaGNfcnhfdXBkYXRlX2xpKHNrLCBoY3J4LT5jY2lkM2hjcnhfc2Vxbm9fbm9ubG9zcywKKwkJICAgaGNyeC0+Y2NpZDNoY3J4X2NjdmFsX25vbmxvc3MpOworCQl0bXBfc2Vxbm8gPSBoY3J4LT5jY2lkM2hjcnhfc2Vxbm9fbm9ubG9zczsKKwkJZGNjcF9pbmNfc2Vxbm8oJnRtcF9zZXFubyk7CisJCWhjcngtPmNjaWQzaGNyeF9zZXFub19ub25sb3NzID0gdG1wX3NlcW5vOworCQlkY2NwX2luY19zZXFubygmdG1wX3NlcW5vKTsKKwkJd2hpbGUgKGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KCZoY3J4LT5jY2lkM2hjcnhfaGlzdCwKKwkJICAgdG1wX3NlcW5vLCAmY2N2YWwpKSB7CisJCSAgIAloY3J4LT5jY2lkM2hjcnhfc2Vxbm9fbm9ubG9zcyA9IHRtcF9zZXFubzsKKwkJCWhjcngtPmNjaWQzaGNyeF9jY3ZhbF9ub25sb3NzID0gY2N2YWw7CisJCQlkY2NwX2luY19zZXFubygmdG1wX3NlcW5vKTsKKwkJfQorCX0KKworCS8qIEZJWE1FIC0gdGhpcyBjb2RlIGNvdWxkIGJlIHNpbXBsaWZpZWQgd2l0aCBhYm92ZSB3aGlsZSAqLworCS8qIGJ1dCB3b3JrcyBhdCBtb21lbnQgKi8KKwlpZiAoZm9sbG93czQ4KHBhY2tldC0+ZGNjcGhyeF9zZXFubywgaGNyeC0+Y2NpZDNoY3J4X3NlcW5vX25vbmxvc3MpKSB7CisJCWhjcngtPmNjaWQzaGNyeF9zZXFub19ub25sb3NzID0gc2Vxbm87CisJCWhjcngtPmNjaWQzaGNyeF9jY3ZhbF9ub25sb3NzID0gcGFja2V0LT5kY2NwaHJ4X2NjdmFsOworCX0KKworZGV0ZWN0X291dDoKKwlkY2NwX3J4X2hpc3RfYWRkX3BhY2tldChjY2lkM19yeF9oaXN0LCAmaGNyeC0+Y2NpZDNoY3J4X2hpc3QsCisJCSAgICZoY3J4LT5jY2lkM2hjcnhfbGlfaGlzdCwgcGFja2V0LAorCQkgICBoY3J4LT5jY2lkM2hjcnhfc2Vxbm9fbm9ubG9zcyk7CisJcmV0dXJuIGxvc3M7CiB9CiAKIHN0YXRpYyB2b2lkIGNjaWQzX2hjX3J4X3BhY2tldF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKQEAgLTkxNiw4ICsxMDA0LDggQEAKIAlzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICpwYWNrZXQ7CiAJc3RydWN0IHRpbWV2YWwgbm93OwogCXU4IHdpbl9jb3VudDsKLQl1MzIgcF9wcmV2LCByX3NhbXBsZSwgdF9lbGFwc2VkOwotCWludCBpbnM7CisJdTMyIHBfcHJldiwgcnR0X3ByZXYsIHJfc2FtcGxlLCB0X2VsYXBzZWQ7CisJaW50IGxvc3M7CiAKIAlCVUdfT04oaGNyeCA9PSBOVUxMIHx8CiAJICAgICAgICEoaGNyeC0+Y2NpZDNoY3J4X3N0YXRlID09IFRGUkNfUlNUQVRFX05PX0RBVEEgfHwKQEAgLTkzMiw3ICsxMDIwLDcgQEAKIAljYXNlIERDQ1BfUEtUX0RBVEFBQ0s6CiAJCWlmIChvcHRfcmVjdi0+ZGNjcG9yX3RpbWVzdGFtcF9lY2hvID09IDApCiAJCQlicmVhazsKLQkJcF9wcmV2ID0gaGNyeC0+Y2NpZDNoY3J4X3J0dDsKKwkJcnR0X3ByZXYgPSBoY3J4LT5jY2lkM2hjcnhfcnR0OwogCQlkY2NwX3RpbWVzdGFtcChzaywgJm5vdyk7CiAJCXRpbWV2YWxfc3ViX3VzZWNzKCZub3csIG9wdF9yZWN2LT5kY2Nwb3JfdGltZXN0YW1wX2VjaG8gKiAxMCk7CiAJCXJfc2FtcGxlID0gdGltZXZhbF91c2Vjcygmbm93KTsKQEAgLTk1MSw4ICsxMDM5LDggQEAKIAkJCWhjcngtPmNjaWQzaGNyeF9ydHQgPSAoaGNyeC0+Y2NpZDNoY3J4X3J0dCAqIDkpIC8gMTAgKwogCQkJCQkgICAgICByX3NhbXBsZSAvIDEwOwogCi0JCWlmIChwX3ByZXYgIT0gaGNyeC0+Y2NpZDNoY3J4X3J0dCkKLQkJCWNjaWQzX3ByX2RlYnVnKCIlcywgTmV3IFJUVD0lbHV1cywgZWxhcHNlZCB0aW1lPSV1XG4iLAorCQlpZiAocnR0X3ByZXYgIT0gaGNyeC0+Y2NpZDNoY3J4X3J0dCkKKwkJCWNjaWQzX3ByX2RlYnVnKCIlcywgTmV3IFJUVD0ldXVzLCBlbGFwc2VkIHRpbWU9JXVcbiIsCiAJCQkJICAgICAgIGRjY3Bfcm9sZShzayksIGhjcngtPmNjaWQzaGNyeF9ydHQsCiAJCQkJICAgICAgIG9wdF9yZWN2LT5kY2Nwb3JfZWxhcHNlZF90aW1lKTsKIAkJYnJlYWs7CkBAIC05NzMsOCArMTA2MSw3IEBACiAKIAl3aW5fY291bnQgPSBwYWNrZXQtPmRjY3BocnhfY2N2YWw7CiAKLQlpbnMgPSBkY2NwX3J4X2hpc3RfYWRkX3BhY2tldChjY2lkM19yeF9oaXN0LCAmaGNyeC0+Y2NpZDNoY3J4X2hpc3QsCi0JCQkJICAgICAgJmhjcngtPmNjaWQzaGNyeF9saV9oaXN0LCBwYWNrZXQpOworCWxvc3MgPSBjY2lkM19oY19yeF9kZXRlY3RfbG9zcyhzaywgcGFja2V0KTsKIAogCWlmIChEQ0NQX1NLQl9DQihza2IpLT5kY2NwZF90eXBlID09IERDQ1BfUEtUX0FDSykKIAkJcmV0dXJuOwpAQCAtOTkxLDcgKzEwNzgsNyBAQAogCWNhc2UgVEZSQ19SU1RBVEVfREFUQToKIAkJaGNyeC0+Y2NpZDNoY3J4X2J5dGVzX3JlY3YgKz0gc2tiLT5sZW4gLQogCQkJCQkgICAgICBkY2NwX2hkcihza2IpLT5kY2NwaF9kb2ZmICogNDsKLQkJaWYgKGlucyAhPSAwKQorCQlpZiAobG9zcykKIAkJCWJyZWFrOwogCiAJCWRjY3BfdGltZXN0YW1wKHNrLCAmbm93KTsKQEAgLTEwMTIsNyArMTA5OSw2IEBACiAJY2NpZDNfcHJfZGVidWcoIiVzLCBzaz0lcCglcyksIGRhdGEgbG9zcyEgUmVhY3RpbmcuLi5cbiIsCiAJCSAgICAgICBkY2NwX3JvbGUoc2spLCBzaywgZGNjcF9zdGF0ZV9uYW1lKHNrLT5za19zdGF0ZSkpOwogCi0JY2NpZDNfaGNfcnhfZGV0ZWN0X2xvc3Moc2spOwogCXBfcHJldiA9IGhjcngtPmNjaWQzaGNyeF9wOwogCQogCS8qIENhbGN1bGF0ZSBsb3NzIGV2ZW50IHJhdGUgKi8KQEAgLTEwMjIsNiArMTEwOCw5IEBACiAJCS8qIFNjYWxpbmcgdXAgYnkgMTAwMDAwMCBhcyBmaXhlZCBkZWNpbWFsICovCiAJCWlmIChpX21lYW4gIT0gMCkKIAkJCWhjcngtPmNjaWQzaGNyeF9wID0gMTAwMDAwMCAvIGlfbWVhbjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9DUklUICIlczogZW1wdHkgbG9zcyBoaXN0XG4iLF9fRlVOQ1RJT05fXyk7CisJCWR1bXBfc3RhY2soKTsKIAl9CiAKIAlpZiAoaGNyeC0+Y2NpZDNoY3J4X3AgPiBwX3ByZXYpIHsKQEAgLTEyMzAsNyArMTMxOSw3IEBACiB9CiBtb2R1bGVfZXhpdChjY2lkM19tb2R1bGVfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIklhbiBNY0RvbmFsZCA8aWFtNEBjcy53YWlrYXRvLmFjLm56PiwgIgorTU9EVUxFX0FVVEhPUigiSWFuIE1jRG9uYWxkIDxpYW4ubWNkb25hbGRAamFuZGkuY28ubno+LCAiCiAJICAgICAgIkFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBnaG9zdHByb3RvY29scy5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRDQ1AgVEZSQyBDQ0lEMyBDQ0lEIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oIGIvbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAppbmRleCA1YWRlNGY2Li4wYTJjYjc1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9jY2lkcy9jY2lkMy5oCisrKyBiL25ldC9kY2NwL2NjaWRzL2NjaWQzLmgKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiAgbmV0L2RjY3AvY2NpZHMvY2NpZDMuaAogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgorICogIENvcHlyaWdodCAoYykgMjAwNS02IFRoZSBVbml2ZXJzaXR5IG9mIFdhaWthdG8sIEhhbWlsdG9uLCBOZXcgWmVhbGFuZC4KICAqCiAgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERDQ1AgcHJvdG9jb2wKICAqCiAgKiAgVGhpcyBjb2RlIGhhcyBiZWVuIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBXYWlrYXRvIFdBTkQKICAqICByZXNlYXJjaCBncm91cC4gRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBodHRwOi8vd3d3LndhbmQubmV0Lm56LwotICogIG9yIGUtbWFpbCBJYW4gTWNEb25hbGQgLSBpYW00QGNzLndhaWthdG8uYWMubnoKKyAqICBvciBlLW1haWwgSWFuIE1jRG9uYWxkIC0gaWFuLm1jZG9uYWxkQGphbmRpLmNvLm56CiAgKgogICogIFRoaXMgY29kZSBhbHNvIHVzZXMgY29kZSBmcm9tIEx1bGVhIFVuaXZlcnNpdHksIHJlcmVsZWFzZWQgYXMgR1BMIGJ5IGl0cwogICogIGF1dGhvcnM6CkBAIC0xMjAsOSArMTIwLDEwIEBACiAjZGVmaW5lIGNjaWQzaGNyeF94X3JlY3YJY2NpZDNoY3J4X3RmcmMudGZyY3J4X3hfcmVjdgogI2RlZmluZSBjY2lkM2hjcnhfcnR0CQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcnR0CiAjZGVmaW5lIGNjaWQzaGNyeF9wCQljY2lkM2hjcnhfdGZyYy50ZnJjcnhfcAotICAJdTY0CQkJY2NpZDNoY3J4X3NlcW5vX2xhc3RfY291bnRlcjo0OCwKKyAgCXU2NAkJCWNjaWQzaGNyeF9zZXFub19ub25sb3NzOjQ4LAorCQkJCWNjaWQzaGNyeF9jY3ZhbF9ub25sb3NzOjQsCiAJCQkJY2NpZDNoY3J4X3N0YXRlOjgsCi0JCQkJY2NpZDNoY3J4X2xhc3RfY291bnRlcjo0OworCQkJCWNjaWQzaGNyeF9jY3ZhbF9sYXN0X2NvdW50ZXI6NDsKICAgCXUzMgkJCWNjaWQzaGNyeF9ieXRlc19yZWN2OwogICAJc3RydWN0IHRpbWV2YWwJCWNjaWQzaGNyeF90c3RhbXBfbGFzdF9mZWVkYmFjazsKICAgCXN0cnVjdCB0aW1ldmFsCQljY2lkM2hjcnhfdHN0YW1wX2xhc3RfYWNrOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYyBiL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmMKaW5kZXggNWQ3YjdkOC4uOTA2YzgxYSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuYworKysgYi9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5jCkBAIC0yLDcgKzIsNyBAQAogICogIG5ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmMKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBVbml2ZXJzaXR5IG9mIFdhaWthdG8sIEhhbWlsdG9uLCBOZXcgWmVhbGFuZC4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSWFuIE1jRG9uYWxkIDxpYW00QGNzLndhaWthdG8uYWMubno+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LTYgSWFuIE1jRG9uYWxkIDxpYW4ubWNkb25hbGRAamFuZGkuY28ubno+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IEFybmFsZG8gQ2FydmFsaG8gZGUgTWVsbyA8YWNtZUBjb25lY3RpdmEuY29tLmJyPgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtMTIsNiArMTIsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxuZXQvc29jay5oPgogCiAjaW5jbHVkZSAibG9zc19pbnRlcnZhbC5oIgogCkBAIC05MCwxMyArOTEsMTMgQEAKIAl1MzIgd190b3QgID0gMDsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShsaV9lbnRyeSwgbGlfbmV4dCwgbGlzdCwgZGNjcGxpaF9ub2RlKSB7Ci0JCWlmIChpIDwgRENDUF9MSV9ISVNUX0lWQUxfRl9MRU5HVEgpIHsKKwkJaWYgKGxpX2VudHJ5LT5kY2NwbGloX2ludGVydmFsICE9IH4wKSB7CiAJCQlpX3RvdDAgKz0gbGlfZW50cnktPmRjY3BsaWhfaW50ZXJ2YWwgKiBkY2NwX2xpX2hpc3Rfd1tpXTsKIAkJCXdfdG90ICArPSBkY2NwX2xpX2hpc3Rfd1tpXTsKKwkJCWlmIChpICE9IDApCisJCQkJaV90b3QxICs9IGxpX2VudHJ5LT5kY2NwbGloX2ludGVydmFsICogZGNjcF9saV9oaXN0X3dbaSAtIDFdOwogCQl9CiAKLQkJaWYgKGkgIT0gMCkKLQkJCWlfdG90MSArPSBsaV9lbnRyeS0+ZGNjcGxpaF9pbnRlcnZhbCAqIGRjY3BfbGlfaGlzdF93W2kgLSAxXTsKIAogCQlpZiAoKytpID4gRENDUF9MSV9ISVNUX0lWQUxfRl9MRU5HVEgpCiAJCQlicmVhazsKQEAgLTEwNywzNyArMTA4LDM2IEBACiAKIAlpX3RvdCA9IG1heChpX3RvdDAsIGlfdG90MSk7CiAKLQkvKiBGSVhNRTogV2h5IGRvIHdlIGRvIHRoaXM/IC1JYW4gTWNEb25hbGQgKi8KLQlpZiAoaV90b3QgKiA0IDwgd190b3QpCi0JCWlfdG90ID0gd190b3QgKiA0OworCWlmICghd190b3QpIHsKKwkJTElNSVRfTkVUREVCVUcoS0VSTl9XQVJOSU5HICIlczogd190b3QgPSAwXG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gMTsKKwl9CiAKLQlyZXR1cm4gaV90b3QgKiA0IC8gd190b3Q7CisJcmV0dXJuIGlfdG90IC8gd190b3Q7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfbGlfaGlzdF9jYWxjX2lfbWVhbik7CiAKLXN0cnVjdCBkY2NwX2xpX2hpc3RfZW50cnkgKmRjY3BfbGlfaGlzdF9pbnRlcnZhbF9uZXcoc3RydWN0IGRjY3BfbGlfaGlzdCAqaGlzdCwKLQkJCQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQkJCSAgICAgY29uc3QgdTY0IHNlcV9sb3NzLAotCQkJCQkJICAgICBjb25zdCB1OCB3aW5fbG9zcykKK2ludCBkY2NwX2xpX2hpc3RfaW50ZXJ2YWxfbmV3KHN0cnVjdCBkY2NwX2xpX2hpc3QgKmhpc3QsCisgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBjb25zdCB1NjQgc2VxX2xvc3MsIGNvbnN0IHU4IHdpbl9sb3NzKQogewotCXN0cnVjdCBkY2NwX2xpX2hpc3RfZW50cnkgKnRhaWwgPSBOVUxMLCAqZW50cnk7CisJc3RydWN0IGRjY3BfbGlfaGlzdF9lbnRyeSAqZW50cnk7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDw9IERDQ1BfTElfSElTVF9JVkFMX0ZfTEVOR1RIOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgRENDUF9MSV9ISVNUX0lWQUxfRl9MRU5HVEg7IGkrKykgewogCQllbnRyeSA9IGRjY3BfbGlfaGlzdF9lbnRyeV9uZXcoaGlzdCwgU0xBQl9BVE9NSUMpOwogCQlpZiAoZW50cnkgPT0gTlVMTCkgewogCQkJZGNjcF9saV9oaXN0X3B1cmdlKGhpc3QsIGxpc3QpOwotCQkJcmV0dXJuIE5VTEw7CisJCQlkdW1wX3N0YWNrKCk7CisJCQlyZXR1cm4gMDsKIAkJfQotCQlpZiAodGFpbCA9PSBOVUxMKQotCQkJdGFpbCA9IGVudHJ5OworCQllbnRyeS0+ZGNjcGxpaF9pbnRlcnZhbCA9IH4wOwogCQlsaXN0X2FkZCgmZW50cnktPmRjY3BsaWhfbm9kZSwgbGlzdCk7CiAJfQogCiAJZW50cnktPmRjY3BsaWhfc2Vxbm8gICAgID0gc2VxX2xvc3M7CiAJZW50cnktPmRjY3BsaWhfd2luX2NvdW50ID0gd2luX2xvc3M7Ci0JcmV0dXJuIHRhaWw7CisJcmV0dXJuIDE7CiB9CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfbGlfaGlzdF9pbnRlcnZhbF9uZXcpOwpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuaCBiL25ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmgKaW5kZXggNDNiZjc4Mi4uMGFlODVmMCAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL2xvc3NfaW50ZXJ2YWwuaAorKysgYi9uZXQvZGNjcC9jY2lkcy9saWIvbG9zc19pbnRlcnZhbC5oCkBAIC00LDcgKzQsNyBAQAogICogIG5ldC9kY2NwL2NjaWRzL2xpYi9sb3NzX2ludGVydmFsLmgKICAqCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IFRoZSBVbml2ZXJzaXR5IG9mIFdhaWthdG8sIEhhbWlsdG9uLCBOZXcgWmVhbGFuZC4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSWFuIE1jRG9uYWxkIDxpYW00QGNzLndhaWthdG8uYWMubno+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1IElhbiBNY0RvbmFsZCA8aWFuLm1jZG9uYWxkQGphbmRpLmNvLm56PgogICogIENvcHlyaWdodCAoYykgMjAwNSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKQEAgLTUyLDkgKzUyLDYgQEAKIAogZXh0ZXJuIHUzMiBkY2NwX2xpX2hpc3RfY2FsY19pX21lYW4oc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiAKLWV4dGVybiBzdHJ1Y3QgZGNjcF9saV9oaXN0X2VudHJ5ICoKLQkJCWRjY3BfbGlfaGlzdF9pbnRlcnZhbF9uZXcoc3RydWN0IGRjY3BfbGlfaGlzdCAqaGlzdCwKLQkJCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQkJCSAgY29uc3QgdTY0IHNlcV9sb3NzLAotCQkJCQkJICBjb25zdCB1OCB3aW5fbG9zcyk7CitleHRlcm4gaW50IGRjY3BfbGlfaGlzdF9pbnRlcnZhbF9uZXcoc3RydWN0IGRjY3BfbGlfaGlzdCAqaGlzdCwKKyAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNvbnN0IHU2NCBzZXFfbG9zcywgY29uc3QgdTggd2luX2xvc3MpOwogI2VuZGlmIC8qIF9EQ0NQX0xJX0hJU1RfICovCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkcy9saWIvcGFja2V0X2hpc3RvcnkuYyBiL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5jCmluZGV4IGFkOThkNmEuLmI4NzZjOWMgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5jCisrKyBiL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5jCkBAIC0xLDEzICsxLDEzIEBACiAvKgotICogIG5ldC9kY2NwL3BhY2tldF9oaXN0b3J5LmgKKyAqICBuZXQvZGNjcC9wYWNrZXRfaGlzdG9yeS5jCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwNSBUaGUgVW5pdmVyc2l0eSBvZiBXYWlrYXRvLCBIYW1pbHRvbiwgTmV3IFplYWxhbmQuCisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LTYgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgogICoKICAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAogICoKICAqICBUaGlzIGNvZGUgaGFzIGJlZW4gZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIFdhaWthdG8gV0FORAogICogIHJlc2VhcmNoIGdyb3VwLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cud2FuZC5uZXQubnovCi0gKiAgb3IgZS1tYWlsIElhbiBNY0RvbmFsZCAtIGlhbTRAY3Mud2Fpa2F0by5hYy5uegorICogIG9yIGUtbWFpbCBJYW4gTWNEb25hbGQgLSBpYW4ubWNkb25hbGRAamFuZGkuY28ubnoKICAqCiAgKiAgVGhpcyBjb2RlIGFsc28gdXNlcyBjb2RlIGZyb20gTHVsZWEgVW5pdmVyc2l0eSwgcmVyZWxlYXNlZCBhcyBHUEwgYnkgaXRzCiAgKiAgYXV0aG9yczoKQEAgLTExMiw2NCArMTEyLDI3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcnhfaGlzdF9maW5kX2RhdGFfcGFja2V0KTsKIAotaW50IGRjY3BfcnhfaGlzdF9hZGRfcGFja2V0KHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsCit2b2lkIGRjY3BfcnhfaGlzdF9hZGRfcGFja2V0KHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsCiAJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqcnhfbGlzdCwKIAkJCSAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaV9saXN0LAotCQkJICAgIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnBhY2tldCkKKwkJCSAgICBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICpwYWNrZXQsCisJCQkgICAgdTY0IG5vbmxvc3Nfc2Vxbm8pCiB7Ci0Jc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqZW50cnksICpuZXh0LCAqaXRlcjsKKwlzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICplbnRyeSwgKm5leHQ7CiAJdTggbnVtX2xhdGVyID0gMDsKIAotCWl0ZXIgPSBkY2NwX3J4X2hpc3RfaGVhZChyeF9saXN0KTsKLQlpZiAoaXRlciA9PSBOVUxMKQotCQlkY2NwX3J4X2hpc3RfYWRkX2VudHJ5KHJ4X2xpc3QsIHBhY2tldCk7Ci0JZWxzZSB7Ci0JCWNvbnN0IHU2NCBzZXFubyA9IHBhY2tldC0+ZGNjcGhyeF9zZXFubzsKKwlsaXN0X2FkZCgmcGFja2V0LT5kY2NwaHJ4X25vZGUsIHJ4X2xpc3QpOwogCi0JCWlmIChhZnRlcjQ4KHNlcW5vLCBpdGVyLT5kY2NwaHJ4X3NlcW5vKSkKLQkJCWRjY3BfcnhfaGlzdF9hZGRfZW50cnkocnhfbGlzdCwgcGFja2V0KTsKLQkJZWxzZSB7Ci0JCQlpZiAoZGNjcF9yeF9oaXN0X2VudHJ5X2RhdGFfcGFja2V0KGl0ZXIpKQotCQkJCW51bV9sYXRlciA9IDE7Ci0KLQkJCWxpc3RfZm9yX2VhY2hfZW50cnlfY29udGludWUoaXRlciwgcnhfbGlzdCwKLQkJCQkJCSAgICAgZGNjcGhyeF9ub2RlKSB7Ci0JCQkJaWYgKGFmdGVyNDgoc2Vxbm8sIGl0ZXItPmRjY3Bocnhfc2Vxbm8pKSB7Ci0JCQkJCWRjY3BfcnhfaGlzdF9hZGRfZW50cnkoJml0ZXItPmRjY3Bocnhfbm9kZSwKLQkJCQkJCQkgICAgICAgcGFja2V0KTsKLQkJCQkJZ290byB0cmltX2hpc3Rvcnk7Ci0JCQkJfQotCi0JCQkJaWYgKGRjY3BfcnhfaGlzdF9lbnRyeV9kYXRhX3BhY2tldChpdGVyKSkKLQkJCQkJbnVtX2xhdGVyKys7Ci0KLQkJCQlpZiAobnVtX2xhdGVyID09IFRGUkNfUkVDVl9OVU1fTEFURV9MT1NTKSB7Ci0JCQkJCWRjY3BfcnhfaGlzdF9lbnRyeV9kZWxldGUoaGlzdCwgcGFja2V0KTsKLQkJCQkJcmV0dXJuIDE7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAobnVtX2xhdGVyIDwgVEZSQ19SRUNWX05VTV9MQVRFX0xPU1MpCi0JCQkJZGNjcF9yeF9oaXN0X2FkZF9lbnRyeShyeF9saXN0LCBwYWNrZXQpOwotCQkJLyoKLQkJCSAqIEZJWE1FOiBlbHNlIHdoYXQ/IHNob3VsZCB3ZSBkZXN0cm95IHRoZSBwYWNrZXQKLQkJCSAqIGxpa2UgYWJvdmU/Ci0JCQkgKi8KLQkJfQotCX0KLQotdHJpbV9oaXN0b3J5OgotCS8qCi0JICogVHJpbSBoaXN0b3J5IChyZW1vdmUgYWxsIHBhY2tldHMgYWZ0ZXIgdGhlIE5VTV9MQVRFX0xPU1MgKyAxCi0JICogZGF0YSBwYWNrZXRzKQotCSAqLwogCW51bV9sYXRlciA9IFRGUkNfUkVDVl9OVU1fTEFURV9MT1NTICsgMTsKIAogCWlmICghbGlzdF9lbXB0eShsaV9saXN0KSkgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIHJ4X2xpc3QsIGRjY3Bocnhfbm9kZSkgewogCQkJaWYgKG51bV9sYXRlciA9PSAwKSB7Ci0JCQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPmRjY3Bocnhfbm9kZSk7Ci0JCQkJZGNjcF9yeF9oaXN0X2VudHJ5X2RlbGV0ZShoaXN0LCBlbnRyeSk7CisJCQkJaWYgKGFmdGVyNDgobm9ubG9zc19zZXFubywKKwkJCQkgICBlbnRyeS0+ZGNjcGhyeF9zZXFubykpIHsKKwkJCQkJbGlzdF9kZWxfaW5pdCgmZW50cnktPmRjY3Bocnhfbm9kZSk7CisJCQkJCWRjY3BfcnhfaGlzdF9lbnRyeV9kZWxldGUoaGlzdCwgZW50cnkpOworCQkJCX0KIAkJCX0gZWxzZSBpZiAoZGNjcF9yeF9oaXN0X2VudHJ5X2RhdGFfcGFja2V0KGVudHJ5KSkKIAkJCQktLW51bV9sYXRlcjsKIAkJfQpAQCAtMjE3LDk0ICsxODAsMTAgQEAKIAkJCQktLW51bV9sYXRlcjsKIAkJfQogCX0KLQotCXJldHVybiAwOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChkY2NwX3J4X2hpc3RfYWRkX3BhY2tldCk7CiAKLXU2NCBkY2NwX3J4X2hpc3RfZGV0ZWN0X2xvc3Moc3RydWN0IGxpc3RfaGVhZCAqcnhfbGlzdCwKLQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlfbGlzdCwgdTggKndpbl9sb3NzKQotewotCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKmVudHJ5LCAqbmV4dCwgKnBhY2tldDsKLQlzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICphX2xvc3MgPSBOVUxMOwotCXN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKmJfbG9zcyA9IE5VTEw7Ci0JdTY0IHNlcV9sb3NzID0gRENDUF9NQVhfU0VRTk8gKyAxOwotCXU4IG51bV9sYXRlciA9IFRGUkNfUkVDVl9OVU1fTEFURV9MT1NTOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCByeF9saXN0LCBkY2NwaHJ4X25vZGUpIHsKLQkJaWYgKG51bV9sYXRlciA9PSAwKSB7Ci0JCQliX2xvc3MgPSBlbnRyeTsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGRjY3BfcnhfaGlzdF9lbnRyeV9kYXRhX3BhY2tldChlbnRyeSkpCi0JCQktLW51bV9sYXRlcjsKLQl9Ci0KLQlpZiAoYl9sb3NzID09IE5VTEwpCi0JCWdvdG8gb3V0OwotCi0JbnVtX2xhdGVyID0gMTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUoZW50cnksIG5leHQsIHJ4X2xpc3QsIGRjY3Bocnhfbm9kZSkgewotCQlpZiAobnVtX2xhdGVyID09IDApIHsKLQkJCWFfbG9zcyA9IGVudHJ5OwotCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoZGNjcF9yeF9oaXN0X2VudHJ5X2RhdGFfcGFja2V0KGVudHJ5KSkKLQkJCS0tbnVtX2xhdGVyOwotCX0KLQotCWlmIChhX2xvc3MgPT0gTlVMTCkgewotCQlpZiAobGlzdF9lbXB0eShsaV9saXN0KSkgewotCQkJLyogbm8gbG9zcyBldmVudCBoYXZlIG9jY3VyZWQgeWV0ICovCi0JCQlMSU1JVF9ORVRERUJVRygiJXM6IFRPRE86IGZpbmQgYSBsb3N0IGRhdGEgcGFja2V0IGJ5ICIKLQkJCQkgICAgICAgImNvbXBhcmluZyB0byBpbml0aWFsIHNlcW5vXG4iLAotCQkJCSAgICAgICBfX0ZVTkNUSU9OX18pOwotCQkJZ290byBvdXQ7Ci0JCX0gZWxzZSB7Ci0JCQlMSU1JVF9ORVRERUJVRygiJXM6IExlc3MgdGhhbiA0IGRhdGEgcGt0cyBpbiBoaXN0b3J5ISIsCi0JCQkJICAgICAgIF9fRlVOQ1RJT05fXyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qIExvY2F0ZSBhIGxvc3QgZGF0YSBwYWNrZXQgKi8KLQllbnRyeSA9IHBhY2tldCA9IGJfbG9zczsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUoZW50cnksIG5leHQsIHJ4X2xpc3QsIGRjY3Bocnhfbm9kZSkgewotCQl1NjQgZGVsdGEgPSBkY2NwX2RlbHRhX3NlcW5vKGVudHJ5LT5kY2NwaHJ4X3NlcW5vLAotCQkJCQkgICAgIHBhY2tldC0+ZGNjcGhyeF9zZXFubyk7Ci0KLQkJaWYgKGRlbHRhICE9IDApIHsKLQkJCWlmIChkY2NwX3J4X2hpc3RfZW50cnlfZGF0YV9wYWNrZXQocGFja2V0KSkKLQkJCQktLWRlbHRhOwotCQkJLyoKLQkJCSAqIEZJWE1FOiBjaGVjayB0aGlzLCBwcm9iYWJseSB0aGlzICUgdXNhZ2UgaXMgYmVjYXVzZQotCQkJICogaW4gZWFybGllciBkcmFmdHMgdGhlIG5kcCBjb3VudCB3YXMganVzdCA4IGJpdHMKLQkJCSAqIGxvbmcsIGJ1dCBub3cgaXQgY2FtIGJlIHVwIHRvIDI0IGJpdHMgbG9uZy4KLQkJCSAqLwotI2lmIDAKLQkJCWlmIChkZWx0YSAlIERDQ1BfTkRQX0xJTUlUICE9Ci0JCQkgICAgKHBhY2tldC0+ZGNjcGhyeF9uZHAgLQotCQkJICAgICBlbnRyeS0+ZGNjcGhyeF9uZHApICUgRENDUF9ORFBfTElNSVQpCi0jZW5kaWYKLQkJCWlmIChkZWx0YSAhPSBwYWNrZXQtPmRjY3BocnhfbmRwIC0gZW50cnktPmRjY3BocnhfbmRwKSB7Ci0JCQkJc2VxX2xvc3MgPSBlbnRyeS0+ZGNjcGhyeF9zZXFubzsKLQkJCQlkY2NwX2luY19zZXFubygmc2VxX2xvc3MpOwotCQkJfQotCQl9Ci0JCXBhY2tldCA9IGVudHJ5OwotCQlpZiAocGFja2V0ID09IGFfbG9zcykKLQkJCWJyZWFrOwotCX0KLW91dDoKLQlpZiAoc2VxX2xvc3MgIT0gRENDUF9NQVhfU0VRTk8gKyAxKQotCQkqd2luX2xvc3MgPSBhX2xvc3MtPmRjY3BocnhfY2N2YWw7Ci0JZWxzZQotCQkqd2luX2xvc3MgPSAwOyAvKiBQYXJhbm9pYSAqLwotCi0JcmV0dXJuIHNlcV9sb3NzOwotfQotCi1FWFBPUlRfU1lNQk9MX0dQTChkY2NwX3J4X2hpc3RfZGV0ZWN0X2xvc3MpOwotCiBzdHJ1Y3QgZGNjcF90eF9oaXN0ICpkY2NwX3R4X2hpc3RfbmV3KGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCA9IGttYWxsb2Moc2l6ZW9mKCpoaXN0KSwgR0ZQX0FUT01JQyk7CkBAIC0zNjUsNiArMjQ0LDI1IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGRjY3BfdHhfaGlzdF9maW5kX2VudHJ5KTsKIAoraW50IGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGNvbnN0IHU2NCBzZXEsCisgICB1OCAqY2N2YWwpCit7CisJc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqcGFja2V0ID0gTlVMTCwgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbGlzdCwgZGNjcGhyeF9ub2RlKQorCQlpZiAoZW50cnktPmRjY3Bocnhfc2Vxbm8gPT0gc2VxKSB7CisJCQlwYWNrZXQgPSBlbnRyeTsKKwkJCWJyZWFrOworCQl9CisKKwlpZiAocGFja2V0KQorCQkqY2N2YWwgPSBwYWNrZXQtPmRjY3BocnhfY2N2YWw7CisKKwlyZXR1cm4gcGFja2V0ICE9IE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKGRjY3BfcnhfaGlzdF9maW5kX2VudHJ5KTsKKwogdm9pZCBkY2NwX3R4X2hpc3RfcHVyZ2Vfb2xkZXIoc3RydWN0IGRjY3BfdHhfaGlzdCAqaGlzdCwKIAkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiAJCQkgICAgICBzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICpwYWNrZXQpCkBAIC0zOTEsNyArMjg5LDcgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoZGNjcF90eF9oaXN0X3B1cmdlKTsKIAotTU9EVUxFX0FVVEhPUigiSWFuIE1jRG9uYWxkIDxpYW00QGNzLndhaWthdG8uYWMubno+LCAiCitNT0RVTEVfQVVUSE9SKCJJYW4gTWNEb25hbGQgPGlhbi5tY2RvbmFsZEBqYW5kaS5jby5uej4sICIKIAkgICAgICAiQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGdob3N0cHJvdG9jb2xzLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRENDUCBURlJDIGxpYnJhcnkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi9wYWNrZXRfaGlzdG9yeS5oIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKaW5kZXggNjczYzIwOS4uMDY3Y2YxYyAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3BhY2tldF9oaXN0b3J5LmgKQEAgLTEsMTMgKzEsMTMgQEAKIC8qCiAgKiAgbmV0L2RjY3AvcGFja2V0X2hpc3RvcnkuaAogICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgVGhlIFVuaXZlcnNpdHkgb2YgV2Fpa2F0bywgSGFtaWx0b24sIE5ldyBaZWFsYW5kLgorICogIENvcHlyaWdodCAoYykgMjAwNS02IFRoZSBVbml2ZXJzaXR5IG9mIFdhaWthdG8sIEhhbWlsdG9uLCBOZXcgWmVhbGFuZC4KICAqCiAgKiAgQW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIERDQ1AgcHJvdG9jb2wKICAqCiAgKiAgVGhpcyBjb2RlIGhhcyBiZWVuIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBXYWlrYXRvIFdBTkQKICAqICByZXNlYXJjaCBncm91cC4gRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBodHRwOi8vd3d3LndhbmQubmV0Lm56LwotICogIG9yIGUtbWFpbCBJYW4gTWNEb25hbGQgLSBpYW00QGNzLndhaWthdG8uYWMubnoKKyAqICBvciBlLW1haWwgSWFuIE1jRG9uYWxkIC0gaWFuLm1jZG9uYWxkQGphbmRpLmNvLm56CiAgKgogICogIFRoaXMgY29kZSBhbHNvIHVzZXMgY29kZSBmcm9tIEx1bGVhIFVuaXZlcnNpdHksIHJlcmVsZWFzZWQgYXMgR1BMIGJ5IGl0cwogICogIGF1dGhvcnM6CkBAIC0xMDYsNiArMTA2LDggQEAKIGV4dGVybiBzdHJ1Y3QgZGNjcF90eF9oaXN0X2VudHJ5ICoKIAkJCWRjY3BfdHhfaGlzdF9maW5kX2VudHJ5KGNvbnN0IHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiAJCQkJCQljb25zdCB1NjQgc2VxKTsKK2V4dGVybiBpbnQgZGNjcF9yeF9oaXN0X2ZpbmRfZW50cnkoY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwgY29uc3QgdTY0IHNlcSwKKyAgIHU4ICpjY3ZhbCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX3R4X2hpc3RfYWRkX2VudHJ5KHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiAJCQkJCSAgc3RydWN0IGRjY3BfdHhfaGlzdF9lbnRyeSAqZW50cnkpCkBAIC0xNjQsMTIgKzE2Niw2IEBACiBleHRlcm4gdm9pZCBkY2NwX3J4X2hpc3RfcHVyZ2Uoc3RydWN0IGRjY3BfcnhfaGlzdCAqaGlzdCwKIAkJCSAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRjY3BfcnhfaGlzdF9hZGRfZW50cnkoc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKLQkJCQkJICBzdHJ1Y3QgZGNjcF9yeF9oaXN0X2VudHJ5ICplbnRyeSkKLXsKLQlsaXN0X2FkZCgmZW50cnktPmRjY3Bocnhfbm9kZSwgbGlzdCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqCiAJCWRjY3BfcnhfaGlzdF9oZWFkKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCiB7CkBAIC0xODgsMTAgKzE4NCwxMSBAQAogCSAgICAgICBlbnRyeS0+ZGNjcGhyeF90eXBlID09IERDQ1BfUEtUX0RBVEFBQ0s7CiB9CiAKLWV4dGVybiBpbnQgZGNjcF9yeF9oaXN0X2FkZF9wYWNrZXQoc3RydWN0IGRjY3BfcnhfaGlzdCAqaGlzdCwKK2V4dGVybiB2b2lkIGRjY3BfcnhfaGlzdF9hZGRfcGFja2V0KHN0cnVjdCBkY2NwX3J4X2hpc3QgKmhpc3QsCiAJCQkJICAgc3RydWN0IGxpc3RfaGVhZCAqcnhfbGlzdCwKIAkJCQkgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaV9saXN0LAotCQkJCSAgIHN0cnVjdCBkY2NwX3J4X2hpc3RfZW50cnkgKnBhY2tldCk7CisJCQkJICAgc3RydWN0IGRjY3BfcnhfaGlzdF9lbnRyeSAqcGFja2V0LAorCQkJCSAgIHU2NCBub25sb3NzX3NlcW5vKTsKIAogZXh0ZXJuIHU2NCBkY2NwX3J4X2hpc3RfZGV0ZWN0X2xvc3Moc3RydWN0IGxpc3RfaGVhZCAqcnhfbGlzdCwKIAkJCQkgICAgc3RydWN0IGxpc3RfaGVhZCAqbGlfbGlzdCwgdTggKndpbl9sb3NzKTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjLmggYi9uZXQvZGNjcC9jY2lkcy9saWIvdGZyYy5oCmluZGV4IDEzMGM0YzQuLjQ1ZjMwZjUgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjLmgKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3RmcmMuaApAQCAtNCw3ICs0LDcgQEAKICAqICBuZXQvZGNjcC9jY2lkcy9saWIvdGZyYy5oCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwNSBUaGUgVW5pdmVyc2l0eSBvZiBXYWlrYXRvLCBIYW1pbHRvbiwgTmV3IFplYWxhbmQuCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA1IElhbiBNY0RvbmFsZCA8aWFtNEBjcy53YWlrYXRvLmFjLm56PgorICogIENvcHlyaWdodCAoYykgMjAwNSBJYW4gTWNEb25hbGQgPGlhbi5tY2RvbmFsZEBqYW5kaS5jby5uej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAzIE5pbHMtRXJpayBNYXR0c3NvbiwgSm9hY2ltIEhhZ2dtYXJrLCBNYWdudXMgRXJpeHpvbgogICoKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMgYi9uZXQvZGNjcC9jY2lkcy9saWIvdGZyY19lcXVhdGlvbi5jCmluZGV4IDRmZDJlYmUuLjQ0MDc2ZTAgMTAwNjQ0Ci0tLSBhL25ldC9kY2NwL2NjaWRzL2xpYi90ZnJjX2VxdWF0aW9uLmMKKysrIGIvbmV0L2RjY3AvY2NpZHMvbGliL3RmcmNfZXF1YXRpb24uYwpAQCAtMiw3ICsyLDcgQEAKICAqICBuZXQvZGNjcC9jY2lkcy9saWIvdGZyY19lcXVhdGlvbi5jCiAgKgogICogIENvcHlyaWdodCAoYykgMjAwNSBUaGUgVW5pdmVyc2l0eSBvZiBXYWlrYXRvLCBIYW1pbHRvbiwgTmV3IFplYWxhbmQuCi0gKiAgQ29weXJpZ2h0IChjKSAyMDA1IElhbiBNY0RvbmFsZCA8aWFtNEBjcy53YWlrYXRvLmFjLm56PgorICogIENvcHlyaWdodCAoYykgMjAwNSBJYW4gTWNEb25hbGQgPGlhbi5tY2RvbmFsZEBqYW5kaS5jby5uej4KICAqICBDb3B5cmlnaHQgKGMpIDIwMDUgQXJuYWxkbyBDYXJ2YWxobyBkZSBNZWxvIDxhY21lQGNvbmVjdGl2YS5jb20uYnI+CiAgKiAgQ29weXJpZ2h0IChjKSAyMDAzIE5pbHMtRXJpayBNYXR0c3NvbiwgSm9hY2ltIEhhZ2dtYXJrLCBNYWdudXMgRXJpeHpvbgogICoKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2RjY3AuaCBiL25ldC9kY2NwL2RjY3AuaAppbmRleCBkMDBhMmY0Li5hNWM1NDc1IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9kY2NwLmgKKysrIGIvbmV0L2RjY3AvZGNjcC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqICBBbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRENDUCBwcm90b2NvbAogICogIENvcHlyaWdodCAoYykgMjAwNSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAY29uZWN0aXZhLmNvbS5icj4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSWFuIE1jRG9uYWxkIDxpYW00QGNzLndhaWthdG8uYWMubno+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA1LTYgSWFuIE1jRG9uYWxkIDxpYW4ubWNkb25hbGRAamFuZGkuY28ubno+CiAgKgogICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC04MSw2ICs4MSwxNCBAQAogCXJldHVybiBhZnRlcjQ4KHNlcTEsIHNlcTIpID8gc2VxMSA6IHNlcTI7CiB9CiAKKy8qIGlzIHNlcTEgbmV4dCBzZXFubyBhZnRlciBzZXEyICovCitzdGF0aWMgaW5saW5lIGludCBmb2xsb3dzNDgoY29uc3QgdTY0IHNlcTEsIGNvbnN0IHU2NCBzZXEyKQoreworCWludCBkaWZmID0gKHNlcTEgJiAweEZGRkYpIC0gKHNlcTIgJiAweEZGRkYpOworCisJcmV0dXJuIGRpZmY9PTE7Cit9CisKIGVudW0gewogCURDQ1BfTUlCX05VTSA9IDAsCiAJRENDUF9NSUJfQUNUSVZFT1BFTlMsCQkJLyogQWN0aXZlT3BlbnMgKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCA5ZjNkNGQ3Li42MTBjNzIyIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAlpcHY2X2FkZHJfY29weSgmbnAtPnNhZGRyLCBzYWRkcik7CiAJaW5ldC0+cmN2X3NhZGRyID0gTE9PUEJBQ0s0X0lQVjY7CiAKLQlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwpOworCV9faXA2X2RzdF9zdG9yZShzaywgZHN0LCBOVUxMKTsKIAogCWljc2stPmljc2tfZXh0X2hkcl9sZW4gPSAwOwogCWlmIChucC0+b3B0ICE9IE5VTEwpCkBAIC04NjMsNyArODYzLDcgQEAKIAkgKiBjb21tZW50IGluIHRoYXQgZnVuY3Rpb24gZm9yIHRoZSBnb3J5IGRldGFpbHMuIC1hY21lCiAJICovCiAKLQlpcDZfZHN0X3N0b3JlKG5ld3NrLCBkc3QsIE5VTEwpOworCV9faXA2X2RzdF9zdG9yZShuZXdzaywgZHN0LCBOVUxMKTsKIAluZXdzay0+c2tfcm91dGVfY2FwcyA9IGRzdC0+ZGV2LT5mZWF0dXJlcyAmIH4oTkVUSUZfRl9JUF9DU1VNIHwKIAkJCQkJCSAgICAgIE5FVElGX0ZfVFNPKTsKIAluZXdkcDYgPSAoc3RydWN0IGRjY3A2X3NvY2sgKiluZXdzazsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL29wdGlvbnMuYyBiL25ldC9kY2NwL29wdGlvbnMuYwppbmRleCBkYWY3MmJiLi4wN2EzNDY5IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9vcHRpb25zLmMKKysrIGIvbmV0L2RjY3Avb3B0aW9ucy5jCkBAIC00LDcgKzQsNyBAQAogICogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBEQ0NQIHByb3RvY29sCiAgKiAgQ29weXJpZ2h0IChjKSAyMDA1IEFyaXN0ZXUgU2VyZ2lvIFJvemFuc2tpIEZpbGhvIDxhcmlzQGNhdGhlZHJhbGxhYnMub3JnPgogICogIENvcHlyaWdodCAoYykgMjAwNSBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAZ2hvc3Rwcm90b2NvbHMubmV0PgotICogIENvcHlyaWdodCAoYykgMjAwNSBJYW4gTWNEb25hbGQgPGlhbTRAY3Mud2Fpa2F0by5hYy5uej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDUgSWFuIE1jRG9uYWxkIDxpYW4ubWNkb25hbGRAamFuZGkuY28ubno+CiAgKgogICogICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCmRpZmYgLS1naXQgYS9uZXQvZGVjbmV0L2RuX3JvdXRlLmMgYi9uZXQvZGVjbmV0L2RuX3JvdXRlLmMKaW5kZXggMTM1NTYxNC4uNzQzZTlmYyAxMDA2NDQKLS0tIGEvbmV0L2RlY25ldC9kbl9yb3V0ZS5jCisrKyBiL25ldC9kZWNuZXQvZG5fcm91dGUuYwpAQCAtOTI1LDggKzkyNSwxMyBAQAogCQlmb3IoZGV2X291dCA9IGRldl9iYXNlOyBkZXZfb3V0OyBkZXZfb3V0ID0gZGV2X291dC0+bmV4dCkgewogCQkJaWYgKCFkZXZfb3V0LT5kbl9wdHIpCiAJCQkJY29udGludWU7Ci0JCQlpZiAoZG5fZGV2X2lzbG9jYWwoZGV2X291dCwgb2xkZmxwLT5mbGRfc3JjKSkKLQkJCQlicmVhazsKKwkJCWlmICghZG5fZGV2X2lzbG9jYWwoZGV2X291dCwgb2xkZmxwLT5mbGRfc3JjKSkKKwkJCQljb250aW51ZTsKKwkJCWlmICgoZGV2X291dC0+ZmxhZ3MgJiBJRkZfTE9PUEJBQ0spICYmCisJCQkgICAgb2xkZmxwLT5mbGRfZHN0ICYmCisJCQkgICAgIWRuX2Rldl9pc2xvY2FsKGRldl9vdXQsIG9sZGZscC0+ZmxkX2RzdCkpCisJCQkJY29udGludWU7CisJCQlicmVhazsKIAkJfQogCQlyZWFkX3VubG9jaygmZGV2X2Jhc2VfbG9jayk7CiAJCWlmIChkZXZfb3V0ID09IE5VTEwpCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL0tjb25maWcgYi9uZXQvaWVlZTgwMjExL0tjb25maWcKaW5kZXggZGJiMDg1Mi4uZjdlODRlOSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9LY29uZmlnCisrKyBiL25ldC9pZWVlODAyMTEvS2NvbmZpZwpAQCAtNTgsNiArNTgsNyBAQAogCWRlcGVuZHMgb24gSUVFRTgwMjExICYmIE5FVF9SQURJTwogCXNlbGVjdCBDUllQVE8KIAlzZWxlY3QgQ1JZUFRPX01JQ0hBRUxfTUlDCisJc2VsZWN0IENSQzMyCiAJLS0taGVscC0tLQogCUluY2x1ZGUgc29mdHdhcmUgYmFzZWQgY2lwaGVyIHN1aXRlcyBpbiBzdXBwb3J0IG9mIElFRUUgODAyLjExaQogCShha2EgVEdpLCBXUEEsIFdQQTIsIFdQQS1QU0ssIGV0Yy4pIGZvciB1c2Ugd2l0aCBUS0lQIGVuYWJsZWQKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCBlZDkwYThhLi4zNWFhMzQyIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC05LDYgKzksNyBAQAogICogbW9yZSBkZXRhaWxzLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDgsNyArNDksNyBAQAogCiAJaW50IGtleV9pZHg7CiAKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9fY2lwaGVyICp0Zm07CiAKIAkvKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHZpcnRfdG9fcGFnZSgpIChjcnlwdG8gQVBJKSAqLwogCXU4IHR4X2IwW0FFU19CTE9DS19MRU5dLCB0eF9iW0FFU19CTE9DS19MRU5dLApAQCAtNTYsMjAgKzU3LDEwIEBACiAJdTggcnhfYjBbQUVTX0JMT0NLX0xFTl0sIHJ4X2JbQUVTX0JMT0NLX0xFTl0sIHJ4X2FbQUVTX0JMT0NLX0xFTl07CiB9OwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfY2NtcF9hZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtLAotCQkJCSAgICAgICBjb25zdCB1OCBwdFsxNl0sIHU4IGN0WzE2XSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfY2NtcF9hZXNfZW5jcnlwdChzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtLAorCQkJCQkgICAgICBjb25zdCB1OCBwdFsxNl0sIHU4IGN0WzE2XSkKIHsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc3JjLCBkc3Q7Ci0KLQlzcmMucGFnZSA9IHZpcnRfdG9fcGFnZShwdCk7Ci0Jc3JjLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKHB0KTsKLQlzcmMubGVuZ3RoID0gQUVTX0JMT0NLX0xFTjsKLQotCWRzdC5wYWdlID0gdmlydF90b19wYWdlKGN0KTsKLQlkc3Qub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoY3QpOwotCWRzdC5sZW5ndGggPSBBRVNfQkxPQ0tfTEVOOwotCi0JY3J5cHRvX2NpcGhlcl9lbmNyeXB0KHRmbSwgJmRzdCwgJnNyYywgQUVTX0JMT0NLX0xFTik7CisJY3J5cHRvX2NpcGhlcl9lbmNyeXB0X29uZSh0Zm0sIGN0LCBwdCk7CiB9CiAKIHN0YXRpYyB2b2lkICppZWVlODAyMTFfY2NtcF9pbml0KGludCBrZXlfaWR4KQpAQCAtODEsMTAgKzcyLDExIEBACiAJCWdvdG8gZmFpbDsKIAlwcml2LT5rZXlfaWR4ID0ga2V5X2lkeDsKIAotCXByaXYtPnRmbSA9IGNyeXB0b19hbGxvY190Zm0oImFlcyIsIDApOwotCWlmIChwcml2LT50Zm0gPT0gTlVMTCkgeworCXByaXYtPnRmbSA9IGNyeXB0b19hbGxvY19jaXBoZXIoImFlcyIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIocHJpdi0+dGZtKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X2NjbXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCiAJCSAgICAgICAiY3J5cHRvIEFQSSBhZXNcbiIpOworCQlwcml2LT50Zm0gPSBOVUxMOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC05Myw3ICs4NSw3IEBACiAgICAgICBmYWlsOgogCWlmIChwcml2KSB7CiAJCWlmIChwcml2LT50Zm0pCi0JCQljcnlwdG9fZnJlZV90Zm0ocHJpdi0+dGZtKTsKKwkJCWNyeXB0b19mcmVlX2NpcGhlcihwcml2LT50Zm0pOwogCQlrZnJlZShwcml2KTsKIAl9CiAKQEAgLTEwNCw3ICs5Niw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKl9wcml2ID0gcHJpdjsKIAlpZiAoX3ByaXYgJiYgX3ByaXYtPnRmbSkKLQkJY3J5cHRvX2ZyZWVfdGZtKF9wcml2LT50Zm0pOworCQljcnlwdG9fZnJlZV9jaXBoZXIoX3ByaXYtPnRmbSk7CiAJa2ZyZWUocHJpdik7CiB9CiAKQEAgLTExNSw3ICsxMDcsNyBAQAogCQliW2ldIF49IGFbaV07CiB9CiAKLXN0YXRpYyB2b2lkIGNjbXBfaW5pdF9ibG9ja3Moc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKK3N0YXRpYyB2b2lkIGNjbXBfaW5pdF9ibG9ja3Moc3RydWN0IGNyeXB0b19jaXBoZXIgKnRmbSwKIAkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhkciwKIAkJCSAgICAgdTggKiBwbiwgc2l6ZV90IGRsZW4sIHU4ICogYjAsIHU4ICogYXV0aCwgdTggKiBzMCkKIHsKQEAgLTI3MSw2ICsyNjMsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIGRlYWwgd2l0aCBzZXEgY291bnRlciB3cmFwcGluZyBjb3JyZWN0bHkuCisgKiByZWZlciB0byB0aW1lcl9hZnRlcigpIGZvciBqaWZmaWVzIHdyYXBwaW5nIGhhbmRsaW5nCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGNjbXBfcmVwbGF5X2NoZWNrKHU4ICpwbl9uLCB1OCAqcG5fbykKK3sKKwl1MzIgaXYzMl9uLCBpdjE2X247CisJdTMyIGl2MzJfbywgaXYxNl9vOworCisJaXYzMl9uID0gKHBuX25bMF0gPDwgMjQpIHwgKHBuX25bMV0gPDwgMTYpIHwgKHBuX25bMl0gPDwgOCkgfCBwbl9uWzNdOworCWl2MTZfbiA9IChwbl9uWzRdIDw8IDgpIHwgcG5fbls1XTsKKworCWl2MzJfbyA9IChwbl9vWzBdIDw8IDI0KSB8IChwbl9vWzFdIDw8IDE2KSB8IChwbl9vWzJdIDw8IDgpIHwgcG5fb1szXTsKKwlpdjE2X28gPSAocG5fb1s0XSA8PCA4KSB8IHBuX29bNV07CisKKwlpZiAoKHMzMilpdjMyX24gLSAoczMyKWl2MzJfbyA8IDAgfHwKKwkgICAgKGl2MzJfbiA9PSBpdjMyX28gJiYgaXYxNl9uIDw9IGl2MTZfbykpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IGllZWU4MDIxMV9jY21wX2RlY3J5cHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKmtleSA9IHByaXY7CkBAIC0zMjMsNyArMzM2LDcgQEAKIAlwbls1XSA9IHBvc1swXTsKIAlwb3MgKz0gODsKIAotCWlmIChtZW1jbXAocG4sIGtleS0+cnhfcG4sIENDTVBfUE5fTEVOKSA8PSAwKSB7CisJaWYgKGNjbXBfcmVwbGF5X2NoZWNrKHBuLCBrZXktPnJ4X3BuKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCiAJCQkgICAgICAgIiBwcmV2aW91cyBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgpAQCAtMzc3LDcgKzM5MCw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKmRhdGEgPSBwcml2OwogCWludCBrZXlpZHg7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IGRhdGEtPnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2NpcGhlciAqdGZtID0gZGF0YS0+dGZtOwogCiAJa2V5aWR4ID0gZGF0YS0+a2V5X2lkeDsKIAltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKCpkYXRhKSk7CmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggMzRkYmEwYi4uMjU5NTcyZCAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtOSw2ICs5LDcgQEAKICAqIG1vcmUgZGV0YWlscy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTUyLDggKzUzLDEwIEBACiAKIAlpbnQga2V5X2lkeDsKIAotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm1fYXJjNDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtX21pY2hhZWw7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnJ4X3RmbV9hcmM0OworCXN0cnVjdCBjcnlwdG9faGFzaCAqcnhfdGZtX21pY2hhZWw7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnR4X3RmbV9hcmM0OworCXN0cnVjdCBjcnlwdG9faGFzaCAqdHhfdGZtX21pY2hhZWw7CiAKIAkvKiBzY3JhdGNoIGJ1ZmZlcnMgZm9yIHZpcnRfdG9fcGFnZSgpIChjcnlwdG8gQVBJKSAqLwogCXU4IHJ4X2hkclsxNl0sIHR4X2hkclsxNl07CkBAIC04NSwxNyArODgsMzcgQEAKIAogCXByaXYtPmtleV9pZHggPSBrZXlfaWR4OwogCi0JcHJpdi0+dGZtX2FyYzQgPSBjcnlwdG9fYWxsb2NfdGZtKCJhcmM0IiwgMCk7Ci0JaWYgKHByaXYtPnRmbV9hcmM0ID09IE5VTEwpIHsKKwlwcml2LT50eF90Zm1fYXJjNCA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsCisJCQkJCQlDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHByaXYtPnR4X3RmbV9hcmM0KSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X3RraXA6IGNvdWxkIG5vdCBhbGxvY2F0ZSAiCisJCSAgICAgICAiY3J5cHRvIEFQSSBhcmM0XG4iKTsKKwkJcHJpdi0+dGZtX2FyYzQgPSBOVUxMOworCQlnb3RvIGZhaWw7CisJfQorCisJcHJpdi0+dHhfdGZtX21pY2hhZWwgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLAorCQkJCQkJIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIocHJpdi0+dHhfdGZtX21pY2hhZWwpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKKwkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXByaXYtPnJ4X3RmbV9hcmM0ID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwKKwkJCQkJCUNSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX2FyYzQpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKIAkJICAgICAgICJjcnlwdG8gQVBJIGFyYzRcbiIpOwogCQlnb3RvIGZhaWw7CiAJfQogCi0JcHJpdi0+dGZtX21pY2hhZWwgPSBjcnlwdG9fYWxsb2NfdGZtKCJtaWNoYWVsX21pYyIsIDApOwotCWlmIChwcml2LT50Zm1fbWljaGFlbCA9PSBOVUxMKSB7CisJcHJpdi0+cnhfdGZtX21pY2hhZWwgPSBjcnlwdG9fYWxsb2NfaGFzaCgibWljaGFlbF9taWMiLCAwLAorCQkJCQkJIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIocHJpdi0+cnhfdGZtX21pY2hhZWwpKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfdGtpcDogY291bGQgbm90IGFsbG9jYXRlICIKIAkJICAgICAgICJjcnlwdG8gQVBJIG1pY2hhZWxfbWljXG4iKTsKKwkJcHJpdi0+dGZtX21pY2hhZWwgPSBOVUxMOwogCQlnb3RvIGZhaWw7CiAJfQogCkBAIC0xMDMsMTAgKzEyNiwxNCBAQAogCiAgICAgICBmYWlsOgogCWlmIChwcml2KSB7Ci0JCWlmIChwcml2LT50Zm1fbWljaGFlbCkKLQkJCWNyeXB0b19mcmVlX3RmbShwcml2LT50Zm1fbWljaGFlbCk7Ci0JCWlmIChwcml2LT50Zm1fYXJjNCkKLQkJCWNyeXB0b19mcmVlX3RmbShwcml2LT50Zm1fYXJjNCk7CisJCWlmIChwcml2LT50eF90Zm1fbWljaGFlbCkKKwkJCWNyeXB0b19mcmVlX2hhc2gocHJpdi0+dHhfdGZtX21pY2hhZWwpOworCQlpZiAocHJpdi0+dHhfdGZtX2FyYzQpCisJCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIocHJpdi0+dHhfdGZtX2FyYzQpOworCQlpZiAocHJpdi0+cnhfdGZtX21pY2hhZWwpCisJCQljcnlwdG9fZnJlZV9oYXNoKHByaXYtPnJ4X3RmbV9taWNoYWVsKTsKKwkJaWYgKHByaXYtPnJ4X3RmbV9hcmM0KQorCQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKHByaXYtPnJ4X3RmbV9hcmM0KTsKIAkJa2ZyZWUocHJpdik7CiAJfQogCkBAIC0xMTYsMTAgKzE0MywxNiBAQAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3RraXBfZGVpbml0KHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90a2lwX2RhdGEgKl9wcml2ID0gcHJpdjsKLQlpZiAoX3ByaXYgJiYgX3ByaXYtPnRmbV9taWNoYWVsKQotCQljcnlwdG9fZnJlZV90Zm0oX3ByaXYtPnRmbV9taWNoYWVsKTsKLQlpZiAoX3ByaXYgJiYgX3ByaXYtPnRmbV9hcmM0KQotCQljcnlwdG9fZnJlZV90Zm0oX3ByaXYtPnRmbV9hcmM0KTsKKwlpZiAoX3ByaXYpIHsKKwkJaWYgKF9wcml2LT50eF90Zm1fbWljaGFlbCkKKwkJCWNyeXB0b19mcmVlX2hhc2goX3ByaXYtPnR4X3RmbV9taWNoYWVsKTsKKwkJaWYgKF9wcml2LT50eF90Zm1fYXJjNCkKKwkJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihfcHJpdi0+dHhfdGZtX2FyYzQpOworCQlpZiAoX3ByaXYtPnJ4X3RmbV9taWNoYWVsKQorCQkJY3J5cHRvX2ZyZWVfaGFzaChfcHJpdi0+cnhfdGZtX21pY2hhZWwpOworCQlpZiAoX3ByaXYtPnJ4X3RmbV9hcmM0KQorCQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKF9wcml2LT5yeF90Zm1fYXJjNCk7CisJfQogCWtmcmVlKHByaXYpOwogfQogCkBAIC0zMTgsNiArMzUxLDcgQEAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3RraXBfZW5jcnlwdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbiwgdm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3RraXBfZGF0YSAqdGtleSA9IHByaXY7CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0a2V5LT50eF90Zm1fYXJjNCB9OwogCWludCBsZW47CiAJdTggcmM0a2V5WzE2XSwgKnBvcywgKmljdjsKIAl1MzIgY3JjOwpAQCAtMzUxLDE4ICszODUsMTcgQEAKIAlpY3ZbMl0gPSBjcmMgPj4gMTY7CiAJaWN2WzNdID0gY3JjID4+IDI0OwogCi0JY3J5cHRvX2NpcGhlcl9zZXRrZXkodGtleS0+dGZtX2FyYzQsIHJjNGtleSwgMTYpOworCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRrZXktPnR4X3RmbV9hcmM0LCByYzRrZXksIDE2KTsKIAlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7CiAJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKIAlzZy5sZW5ndGggPSBsZW4gKyA0OwotCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh0a2V5LT50Zm1fYXJjNCwgJnNnLCAmc2csIGxlbiArIDQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgJnNnLCAmc2csIGxlbiArIDQpOwogfQogCiBzdGF0aWMgaW50IGllZWU4MDIxMV90a2lwX2RlY3J5cHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV90a2lwX2RhdGEgKnRrZXkgPSBwcml2OworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGtleS0+cnhfdGZtX2FyYzQgfTsKIAl1OCByYzRrZXlbMTZdOwogCXU4IGtleWlkeCwgKnBvczsKIAl1MzIgaXYzMjsKQEAgLTQxNCw4ICs0NDcsNyBAQAogCWl2MzIgPSBwb3NbNF0gfCAocG9zWzVdIDw8IDgpIHwgKHBvc1s2XSA8PCAxNikgfCAocG9zWzddIDw8IDI0KTsKIAlwb3MgKz0gODsKIAotCWlmIChpdjMyIDwgdGtleS0+cnhfaXYzMiB8fAotCSAgICAoaXYzMiA9PSB0a2V5LT5yeF9pdjMyICYmIGl2MTYgPD0gdGtleS0+cnhfaXYxNikpIHsKKwlpZiAodGtpcF9yZXBsYXlfY2hlY2soaXYzMiwgaXYxNiwgdGtleS0+cnhfaXYzMiwgdGtleS0+cnhfaXYxNikpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSIgTUFDX0ZNVAogCQkJICAgICAgICIgcHJldmlvdXMgVFNDICUwOHglMDR4IHJlY2VpdmVkIFRTQyAiCkBAIC00MzQsMTEgKzQ2NiwxOCBAQAogCiAJcGxlbiA9IHNrYi0+bGVuIC0gaGRyX2xlbiAtIDEyOwogCi0JY3J5cHRvX2NpcGhlcl9zZXRrZXkodGtleS0+dGZtX2FyYzQsIHJjNGtleSwgMTYpOworCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRrZXktPnJ4X3RmbV9hcmM0LCByYzRrZXksIDE2KTsKIAlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7CiAJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKIAlzZy5sZW5ndGggPSBwbGVuICsgNDsKLQljcnlwdG9fY2lwaGVyX2RlY3J5cHQodGtleS0+dGZtX2FyYzQsICZzZywgJnNnLCBwbGVuICsgNCk7CisJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHBsZW4gKyA0KSkgeworCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiOiBUS0lQOiBmYWlsZWQgdG8gZGVjcnlwdCAiCisJCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAorCQkJICAgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQl9CisJCXJldHVybiAtNzsKKwl9CiAKIAljcmMgPSB+Y3JjMzJfbGUofjAsIHBvcywgcGxlbik7CiAJaWN2WzBdID0gY3JjOwpAQCAtNDcyLDEyICs1MTEsMTMgQEAKIAlyZXR1cm4ga2V5aWR4OwogfQogCi1zdGF0aWMgaW50IG1pY2hhZWxfbWljKHN0cnVjdCBpZWVlODAyMTFfdGtpcF9kYXRhICp0a2V5LCB1OCAqIGtleSwgdTggKiBoZHIsCitzdGF0aWMgaW50IG1pY2hhZWxfbWljKHN0cnVjdCBjcnlwdG9faGFzaCAqdGZtX21pY2hhZWwsIHU4ICoga2V5LCB1OCAqIGhkciwKIAkJICAgICAgIHU4ICogZGF0YSwgc2l6ZV90IGRhdGFfbGVuLCB1OCAqIG1pYykKIHsKKwlzdHJ1Y3QgaGFzaF9kZXNjIGRlc2M7CiAJc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzJdOwogCi0JaWYgKHRrZXktPnRmbV9taWNoYWVsID09IE5VTEwpIHsKKwlpZiAodGZtX21pY2hhZWwgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJtaWNoYWVsX21pYzogdGZtX21pY2hhZWwgPT0gTlVMTFxuIik7CiAJCXJldHVybiAtMTsKIAl9CkBAIC00ODksMTIgKzUyOSwxMiBAQAogCXNnWzFdLm9mZnNldCA9IG9mZnNldF9pbl9wYWdlKGRhdGEpOwogCXNnWzFdLmxlbmd0aCA9IGRhdGFfbGVuOwogCi0JY3J5cHRvX2RpZ2VzdF9pbml0KHRrZXktPnRmbV9taWNoYWVsKTsKLQljcnlwdG9fZGlnZXN0X3NldGtleSh0a2V5LT50Zm1fbWljaGFlbCwga2V5LCA4KTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0a2V5LT50Zm1fbWljaGFlbCwgc2csIDIpOwotCWNyeXB0b19kaWdlc3RfZmluYWwodGtleS0+dGZtX21pY2hhZWwsIG1pYyk7CisJaWYgKGNyeXB0b19oYXNoX3NldGtleSh0Zm1fbWljaGFlbCwga2V5LCA4KSkKKwkJcmV0dXJuIC0xOwogCi0JcmV0dXJuIDA7CisJZGVzYy50Zm0gPSB0Zm1fbWljaGFlbDsKKwlkZXNjLmZsYWdzID0gMDsKKwlyZXR1cm4gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCBzZywgZGF0YV9sZW4gKyAxNiwgbWljKTsKIH0KIAogc3RhdGljIHZvaWQgbWljaGFlbF9taWNfaGRyKHN0cnVjdCBza19idWZmICpza2IsIHU4ICogaGRyKQpAQCAtNTI4LDcgKzU2OCw3IEBACiAJaWYgKHN0eXBlICYgSUVFRTgwMjExX1NUWVBFX1FPU19EQVRBKSB7CiAJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICpxb3NoZHIgPQogCQkJKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRycW9zICopc2tiLT5kYXRhOwotCQloZHJbMTJdID0gbGUxNl90b19jcHUocW9zaGRyLT5xb3NfY3RsKSAmIElFRUU4MDIxMV9RQ1RMX1RJRDsKKwkJaGRyWzEyXSA9IHFvc2hkci0+cW9zX2N0bCAmIGNwdV90b19sZTE2KElFRUU4MDIxMV9RQ1RMX1RJRCk7CiAJfSBlbHNlCiAJCWhkclsxMl0gPSAwOwkJLyogcHJpb3JpdHkgKi8KIApAQCAtNTUwLDcgKzU5MCw3IEBACiAKIAltaWNoYWVsX21pY19oZHIoc2tiLCB0a2V5LT50eF9oZHIpOwogCXBvcyA9IHNrYl9wdXQoc2tiLCA4KTsKLQlpZiAobWljaGFlbF9taWModGtleSwgJnRrZXktPmtleVsxNl0sIHRrZXktPnR4X2hkciwKKwlpZiAobWljaGFlbF9taWModGtleS0+dHhfdGZtX21pY2hhZWwsICZ0a2V5LT5rZXlbMTZdLCB0a2V5LT50eF9oZHIsCiAJCQlza2ItPmRhdGEgKyBoZHJfbGVuLCBza2ItPmxlbiAtIDggLSBoZHJfbGVuLCBwb3MpKQogCQlyZXR1cm4gLTE7CiAKQEAgLTU4OCw3ICs2MjgsNyBAQAogCQlyZXR1cm4gLTE7CiAKIAltaWNoYWVsX21pY19oZHIoc2tiLCB0a2V5LT5yeF9oZHIpOwotCWlmIChtaWNoYWVsX21pYyh0a2V5LCAmdGtleS0+a2V5WzI0XSwgdGtleS0+cnhfaGRyLAorCWlmIChtaWNoYWVsX21pYyh0a2V5LT5yeF90Zm1fbWljaGFlbCwgJnRrZXktPmtleVsyNF0sIHRrZXktPnJ4X2hkciwKIAkJCXNrYi0+ZGF0YSArIGhkcl9sZW4sIHNrYi0+bGVuIC0gOCAtIGhkcl9sZW4sIG1pYykpCiAJCXJldHVybiAtMTsKIAlpZiAobWVtY21wKG1pYywgc2tiLT5kYXRhICsgc2tiLT5sZW4gLSA4LCA4KSAhPSAwKSB7CkBAIC02MTgsMTQgKzY1OCwxOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfdGtpcF9kYXRhICp0a2V5ID0gcHJpdjsKIAlpbnQga2V5aWR4OwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSB0a2V5LT50Zm1fbWljaGFlbDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtMiA9IHRrZXktPnRmbV9hcmM0OworCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtID0gdGtleS0+dHhfdGZtX21pY2hhZWw7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTIgPSB0a2V5LT50eF90Zm1fYXJjNDsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbTMgPSB0a2V5LT5yeF90Zm1fbWljaGFlbDsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtNCA9IHRrZXktPnJ4X3RmbV9hcmM0OwogCiAJa2V5aWR4ID0gdGtleS0+a2V5X2lkeDsKIAltZW1zZXQodGtleSwgMCwgc2l6ZW9mKCp0a2V5KSk7CiAJdGtleS0+a2V5X2lkeCA9IGtleWlkeDsKLQl0a2V5LT50Zm1fbWljaGFlbCA9IHRmbTsKLQl0a2V5LT50Zm1fYXJjNCA9IHRmbTI7CisJdGtleS0+dHhfdGZtX21pY2hhZWwgPSB0Zm07CisJdGtleS0+dHhfdGZtX2FyYzQgPSB0Zm0yOworCXRrZXktPnJ4X3RmbV9taWNoYWVsID0gdGZtMzsKKwl0a2V5LT5yeF90Zm1fYXJjNCA9IHRmbTQ7CiAJaWYgKGxlbiA9PSBUS0lQX0tFWV9MRU4pIHsKIAkJbWVtY3B5KHRrZXktPmtleSwga2V5LCBUS0lQX0tFWV9MRU4pOwogCQl0a2V5LT5rZXlfc2V0ID0gMTsKZGlmZiAtLWdpdCBhL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3dlcC5jIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKaW5kZXggMGViZjIzNS4uOWVlZWMxMyAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKKysrIGIvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLmMKQEAgLTksNiArOSw3IEBACiAgKiBtb3JlIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0zMiw3ICszMyw4IEBACiAJdTgga2V5W1dFUF9LRVlfTEVOICsgMV07CiAJdTgga2V5X2xlbjsKIAl1OCBrZXlfaWR4OwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnR4X3RmbTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqcnhfdGZtOwogfTsKIAogc3RhdGljIHZvaWQgKnByaXNtMl93ZXBfaW5pdChpbnQga2V5aWR4KQpAQCAtNDQsMTMgKzQ2LDIwIEBACiAJCWdvdG8gZmFpbDsKIAlwcml2LT5rZXlfaWR4ID0ga2V5aWR4OwogCi0JcHJpdi0+dGZtID0gY3J5cHRvX2FsbG9jX3RmbSgiYXJjNCIsIDApOwotCWlmIChwcml2LT50Zm0gPT0gTlVMTCkgeworCXByaXYtPnR4X3RmbSA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoImVjYihhcmM0KSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIocHJpdi0+dHhfdGZtKSkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0X3dlcDogY291bGQgbm90IGFsbG9jYXRlICIKKwkJICAgICAgICJjcnlwdG8gQVBJIGFyYzRcbiIpOworCQlwcml2LT50Zm0gPSBOVUxMOworCQlnb3RvIGZhaWw7CisJfQorCisJcHJpdi0+cnhfdGZtID0gY3J5cHRvX2FsbG9jX2Jsa2NpcGhlcigiZWNiKGFyYzQpIiwgMCwgQ1JZUFRPX0FMR19BU1lOQyk7CisJaWYgKElTX0VSUihwcml2LT5yeF90Zm0pKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJpZWVlODAyMTFfY3J5cHRfd2VwOiBjb3VsZCBub3QgYWxsb2NhdGUgIgogCQkgICAgICAgImNyeXB0byBBUEkgYXJjNFxuIik7CiAJCWdvdG8gZmFpbDsKIAl9Ci0KIAkvKiBzdGFydCBXRVAgSVYgZnJvbSBhIHJhbmRvbSB2YWx1ZSAqLwogCWdldF9yYW5kb21fYnl0ZXMoJnByaXYtPml2LCA0KTsKIApAQCAtNTgsOCArNjcsMTAgQEAKIAogICAgICAgZmFpbDoKIAlpZiAocHJpdikgewotCQlpZiAocHJpdi0+dGZtKQotCQkJY3J5cHRvX2ZyZWVfdGZtKHByaXYtPnRmbSk7CisJCWlmIChwcml2LT50eF90Zm0pCisJCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIocHJpdi0+dHhfdGZtKTsKKwkJaWYgKHByaXYtPnJ4X3RmbSkKKwkJCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihwcml2LT5yeF90Zm0pOwogCQlrZnJlZShwcml2KTsKIAl9CiAJcmV0dXJuIE5VTEw7CkBAIC02OCw4ICs3OSwxMiBAQAogc3RhdGljIHZvaWQgcHJpc20yX3dlcF9kZWluaXQodm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgcHJpc20yX3dlcF9kYXRhICpfcHJpdiA9IHByaXY7Ci0JaWYgKF9wcml2ICYmIF9wcml2LT50Zm0pCi0JCWNyeXB0b19mcmVlX3RmbShfcHJpdi0+dGZtKTsKKwlpZiAoX3ByaXYpIHsKKwkJaWYgKF9wcml2LT50eF90Zm0pCisJCQljcnlwdG9fZnJlZV9ibGtjaXBoZXIoX3ByaXYtPnR4X3RmbSk7CisJCWlmIChfcHJpdi0+cnhfdGZtKQorCQkJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKF9wcml2LT5yeF90Zm0pOworCX0KIAlrZnJlZShwcml2KTsKIH0KIApAQCAtMTIwLDYgKzEzNSw3IEBACiBzdGF0aWMgaW50IHByaXNtMl93ZXBfZW5jcnlwdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX2xlbiwgdm9pZCAqcHJpdikKIHsKIAlzdHJ1Y3QgcHJpc20yX3dlcF9kYXRhICp3ZXAgPSBwcml2OworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gd2VwLT50eF90Zm0gfTsKIAl1MzIgY3JjLCBrbGVuLCBsZW47CiAJdTggKnBvcywgKmljdjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CkBAIC0xNTEsMTMgKzE2NywxMSBAQAogCWljdlsyXSA9IGNyYyA+PiAxNjsKIAlpY3ZbM10gPSBjcmMgPj4gMjQ7CiAKLQljcnlwdG9fY2lwaGVyX3NldGtleSh3ZXAtPnRmbSwga2V5LCBrbGVuKTsKKwljcnlwdG9fYmxrY2lwaGVyX3NldGtleSh3ZXAtPnR4X3RmbSwga2V5LCBrbGVuKTsKIAlzZy5wYWdlID0gdmlydF90b19wYWdlKHBvcyk7CiAJc2cub2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UocG9zKTsKIAlzZy5sZW5ndGggPSBsZW4gKyA0OwotCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh3ZXAtPnRmbSwgJnNnLCAmc2csIGxlbiArIDQpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgJnNnLCAmc2csIGxlbiArIDQpOwogfQogCiAvKiBQZXJmb3JtIFdFUCBkZWNyeXB0aW9uIG9uIGdpdmVuIGJ1ZmZlci4gQnVmZmVyIGluY2x1ZGVzIHdob2xlIFdFUCBwYXJ0IG9mCkBAIC0xNzAsNiArMTg0LDcgQEAKIHN0YXRpYyBpbnQgcHJpc20yX3dlcF9kZWNyeXB0KHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfbGVuLCB2b2lkICpwcml2KQogewogCXN0cnVjdCBwcmlzbTJfd2VwX2RhdGEgKndlcCA9IHByaXY7CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB3ZXAtPnJ4X3RmbSB9OwogCXUzMiBjcmMsIGtsZW4sIHBsZW47CiAJdTgga2V5W1dFUF9LRVlfTEVOICsgM107CiAJdTgga2V5aWR4LCAqcG9zLCBpY3ZbNF07CkBAIC0xOTQsMTEgKzIwOSwxMiBAQAogCS8qIEFwcGx5IFJDNCB0byBkYXRhIGFuZCBjb21wdXRlIENSQzMyIG92ZXIgZGVjcnlwdGVkIGRhdGEgKi8KIAlwbGVuID0gc2tiLT5sZW4gLSBoZHJfbGVuIC0gODsKIAotCWNyeXB0b19jaXBoZXJfc2V0a2V5KHdlcC0+dGZtLCBrZXksIGtsZW4pOworCWNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHdlcC0+cnhfdGZtLCBrZXksIGtsZW4pOwogCXNnLnBhZ2UgPSB2aXJ0X3RvX3BhZ2UocG9zKTsKIAlzZy5vZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShwb3MpOwogCXNnLmxlbmd0aCA9IHBsZW4gKyA0OwotCWNyeXB0b19jaXBoZXJfZGVjcnlwdCh3ZXAtPnRmbSwgJnNnLCAmc2csIHBsZW4gKyA0KTsKKwlpZiAoY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCAmc2csICZzZywgcGxlbiArIDQpKQorCQlyZXR1cm4gLTc7CiAKIAljcmMgPSB+Y3JjMzJfbGUofjAsIHBvcywgcGxlbik7CiAJaWN2WzBdID0gY3JjOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggNzJkNGQ0ZS4uNzcwNzA0MSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC03NzksMzMgKzc3OSw0NCBAQAogCXJldHVybiAwOwogfQogCi0vKiBGaWx0ZXIgb3V0IHVucmVsYXRlZCBwYWNrZXRzLCBjYWxsIGllZWU4MDIxMV9yeFtfbWd0XSAqLwotaW50IGllZWU4MDIxMV9yeF9hbnkoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsCisvKiBGaWx0ZXIgb3V0IHVucmVsYXRlZCBwYWNrZXRzLCBjYWxsIGllZWU4MDIxMV9yeFtfbWd0XQorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBvdmVyIHRoZSBza2IsIGl0IHNob3VsZCBub3QgYmUgdXNlZCBhZ2FpbiBhZnRlciBjYWxsaW5nCisgKiB0aGlzIGZ1bmN0aW9uLiAqLwordm9pZCBpZWVlODAyMTFfcnhfYW55KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLAogCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHMgKnN0YXRzKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJaW50IGlzX3BhY2tldF9mb3JfdXM7CiAJdTE2IGZjOwogCi0JaWYgKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKQotCQlyZXR1cm4gaWVlZTgwMjExX3J4KGllZWUsIHNrYiwgc3RhdHMpID8gMCA6IC1FSU5WQUw7CisJaWYgKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9NT05JVE9SKSB7CisJCWlmICghaWVlZTgwMjExX3J4KGllZWUsIHNrYiwgc3RhdHMpKQorCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcikpCisJCWdvdG8gZHJvcF9mcmVlOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopc2tiLT5kYXRhOwogCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOwogCiAJaWYgKChmYyAmIElFRUU4MDIxMV9GQ1RMX1ZFUlMpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlnb3RvIGRyb3BfZnJlZTsKIAkJCiAJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX0ZUWVBFKSB7CiAJY2FzZSBJRUVFODAyMTFfRlRZUEVfTUdNVDoKKwkJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyKSkKKwkJCWdvdG8gZHJvcF9mcmVlOwogCQlpZWVlODAyMTFfcnhfbWd0KGllZWUsIGhkciwgc3RhdHMpOwotCQlyZXR1cm4gMDsKKwkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKKwkJcmV0dXJuOwogCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0RBVEE6CiAJCWJyZWFrOwogCWNhc2UgSUVFRTgwMjExX0ZUWVBFX0NUTDoKLQkJcmV0dXJuIDA7CisJCXJldHVybjsKIAlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAogCWlzX3BhY2tldF9mb3JfdXMgPSAwOwpAQCAtODQ5LDggKzg2MCwxNCBAQAogCX0KIAogCWlmIChpc19wYWNrZXRfZm9yX3VzKQotCQlyZXR1cm4gKGllZWU4MDIxMV9yeChpZWVlLCBza2IsIHN0YXRzKSA/IDAgOiAtRUlOVkFMKTsKLQlyZXR1cm4gMDsKKwkJaWYgKCFpZWVlODAyMTFfcngoaWVlZSwgc2tiLCBzdGF0cykpCisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCXJldHVybjsKKworZHJvcF9mcmVlOgorCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJaWVlZS0+c3RhdHMucnhfZHJvcHBlZCsrOworCXJldHVybjsKIH0KIAogI2RlZmluZSBNR01UX0ZSQU1FX0ZJWEVEX1BBUlRfTEVOR1RICQkweDI0CkBAIC0xMDYxLDEzICsxMDc4LDE2IEBACiAKIAl3aGlsZSAobGVuZ3RoID49IHNpemVvZigqaW5mb19lbGVtZW50KSkgewogCQlpZiAoc2l6ZW9mKCppbmZvX2VsZW1lbnQpICsgaW5mb19lbGVtZW50LT5sZW4gPiBsZW5ndGgpIHsKLQkJCUlFRUU4MDIxMV9ERUJVR19NR01UKCJJbmZvIGVsZW06IHBhcnNlIGZhaWxlZDogIgotCQkJCQkgICAgICJpbmZvX2VsZW1lbnQtPmxlbiArIDIgPiBsZWZ0IDogIgotCQkJCQkgICAgICJpbmZvX2VsZW1lbnQtPmxlbisyPSV6ZCBsZWZ0PSVkLCBpZD0lZC5cbiIsCi0JCQkJCSAgICAgaW5mb19lbGVtZW50LT5sZW4gKwotCQkJCQkgICAgIHNpemVvZigqaW5mb19lbGVtZW50KSwKLQkJCQkJICAgICBsZW5ndGgsIGluZm9fZWxlbWVudC0+aWQpOwotCQkJcmV0dXJuIDE7CisJCQlJRUVFODAyMTFfRVJST1IoIkluZm8gZWxlbTogcGFyc2UgZmFpbGVkOiAiCisJCQkJCSJpbmZvX2VsZW1lbnQtPmxlbiArIDIgPiBsZWZ0IDogIgorCQkJCQkiaW5mb19lbGVtZW50LT5sZW4rMj0lemQgbGVmdD0lZCwgaWQ9JWQuXG4iLAorCQkJCQlpbmZvX2VsZW1lbnQtPmxlbiArCisJCQkJCXNpemVvZigqaW5mb19lbGVtZW50KSwKKwkJCQkJbGVuZ3RoLCBpbmZvX2VsZW1lbnQtPmlkKTsKKwkJCS8qIFdlIHN0b3AgcHJvY2Vzc2luZyBidXQgZG9uJ3QgcmV0dXJuIGFuIGVycm9yIGhlcmUKKwkJCSAqIGJlY2F1c2Ugc29tZSBtaXNiZWhhdmlvdXIgQVBzIGJyZWFrIHRoaXMgcnVsZS4gaWUuCisJCQkgKiBPcmlub2NvIEFQMTAwMC4gKi8KKwkJCWJyZWFrOwogCQl9CiAKIAkJc3dpdGNoIChpbmZvX2VsZW1lbnQtPmlkKSB7CkBAIC0xMTY2LDYgKzExODYsNyBAQAogCiAJCWNhc2UgTUZJRV9UWVBFX0VSUF9JTkZPOgogCQkJbmV0d29yay0+ZXJwX3ZhbHVlID0gaW5mb19lbGVtZW50LT5kYXRhWzBdOworCQkJbmV0d29yay0+ZmxhZ3MgfD0gTkVUV09SS19IQVNfRVJQX1ZBTFVFOwogCQkJSUVFRTgwMjExX0RFQlVHX01HTVQoIk1GSUVfVFlQRV9FUlBfU0VUOiAlZFxuIiwKIAkJCQkJICAgICBuZXR3b3JrLT5lcnBfdmFsdWUpOwogCQkJYnJlYWs7CkBAIC0xNzI5LDUgKzE3NTAsNiBAQAogCX0KIH0KIAorRVhQT1JUX1NZTUJPTF9HUEwoaWVlZTgwMjExX3J4X2FueSk7CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yeF9tZ3QpOwogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfcngpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL25ldC9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKaW5kZXggYmYwNDIxMy4uYWUyNTQ0OSAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9uZXQvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIAkJaGRyX2xlbiArPSAyOwogCiAJCXNrYi0+cHJpb3JpdHkgPSBpZWVlODAyMTFfY2xhc3NpZnkoc2tiKTsKLQkJaGVhZGVyLnFvc19jdGwgfD0gc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RQ1RMX1RJRDsKKwkJaGVhZGVyLnFvc19jdGwgfD0gY3B1X3RvX2xlMTYoc2tiLT5wcmlvcml0eSAmIElFRUU4MDIxMV9RQ1RMX1RJRCk7CiAJfQogCWhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihmYyk7CiAKQEAgLTUzMiwxMyArNTMyLDYgQEAKIAkJCXJldHVybiAwOwogCQl9CiAKLQkJaWYgKHJldCA9PSBORVRERVZfVFhfQlVTWSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogTkVUREVWX1RYX0JVU1kgcmV0dXJuZWQ7ICIKLQkJCSAgICAgICAiZHJpdmVyIHNob3VsZCByZXBvcnQgcXVldWUgZnVsbCB2aWEgIgotCQkJICAgICAgICJpZWVlX2RldmljZS0+aXNfcXVldWVfZnVsbC5cbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lKTsKLQkJfQotCiAJCWllZWU4MDIxMV90eGJfZnJlZSh0eGIpOwogCX0KIApkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKaW5kZXggNDQyMTVjZTYuLjU4OWY2ZDIgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2Fzc29jLmMKKysrIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXNzb2MuYwpAQCAtOTYsNyArOTYsNyBAQAogCW1hYy0+YXNzb2NpYXRlZCA9IDA7CiAJbWFjLT5hc3NvY2luZm8uYnNzdmFsaWQgPSAwOwogCW1hYy0+YXNzb2NpbmZvLmFzc29jaWF0aW5nID0gMDsKLQlpZWVlODAyMTFzb2Z0bWFjX2luaXRfdHhyYXRlcyhtYWMpOworCWllZWU4MDIxMXNvZnRtYWNfaW5pdF9ic3MobWFjKTsKIAlpZWVlODAyMTFzb2Z0bWFjX2NhbGxfZXZlbnRzX2xvY2tlZChtYWMsIElFRUU4MDIxMVNPRlRNQUNfRVZFTlRfRElTQVNTT0NJQVRFRCwgTlVMTCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWFjLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0zMzQsMTEgKzMzNCwxOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfYXNzb2NfcmVzcG9uc2UgKiByZXNwLAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX25ldHdvcmsgKm5ldCkKIHsKKwl1MTYgY2FwID0gbGUxNl90b19jcHUocmVzcC0+Y2FwYWJpbGl0eSk7CisJdTggZXJwX3ZhbHVlID0gbmV0LT5lcnBfdmFsdWU7CisKIAltYWMtPmFzc29jaW5mby5hc3NvY2lhdGluZyA9IDA7Ci0JbWFjLT5hc3NvY2luZm8uc3VwcG9ydGVkX3JhdGVzID0gbmV0LT5zdXBwb3J0ZWRfcmF0ZXM7CisJbWFjLT5ic3NpbmZvLnN1cHBvcnRlZF9yYXRlcyA9IG5ldC0+c3VwcG9ydGVkX3JhdGVzOwogCWllZWU4MDIxMXNvZnRtYWNfcmVjYWxjX3R4cmF0ZXMobWFjKTsKIAogCW1hYy0+YXNzb2NpYXRlZCA9IDE7CisKKwltYWMtPmFzc29jaW5mby5zaG9ydF9wcmVhbWJsZV9hdmFpbGFibGUgPQorCQkoY2FwICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSAhPSAwOworCWllZWU4MDIxMXNvZnRtYWNfcHJvY2Vzc19lcnAobWFjLCBlcnBfdmFsdWUpOworCiAJaWYgKG1hYy0+c2V0X2Jzc2lkX2ZpbHRlcikKIAkJbWFjLT5zZXRfYnNzaWRfZmlsdGVyKG1hYy0+ZGV2LCBuZXQtPmJzc2lkKTsKIAltZW1jcHkobWFjLT5pZWVlLT5ic3NpZCwgbmV0LT5ic3NpZCwgRVRIX0FMRU4pOwpAQCAtMzUxLDkgKzM1OSw5IEBACiBpbnQKIGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LAogCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlICogcmVzcCwKLQkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrICogX2llZWU4MDIxMV9uZXR3b3JrX2RvX25vdF91c2UpCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqIF9pZWVlODAyMTFfbmV0d29yaykKIHsKLQkvKiBOT1RFOiB0aGUgbmV0d29yayBwYXJhbWV0ZXIgaGFzIHRvIGJlIGlnbm9yZWQgYnkKKwkvKiBOT1RFOiB0aGUgbmV0d29yayBwYXJhbWV0ZXIgaGFzIHRvIGJlIG1vc3RseSBpZ25vcmVkIGJ5CiAJICogICAgICAgdGhpcyBjb2RlIGJlY2F1c2UgaXQgaXMgdGhlIGllZWU4MDIxMSdzIHBvaW50ZXIKIAkgKiAgICAgICB0byB0aGUgc3RydWN0LCBub3Qgb3VycyAod2UgbWFkZSBhIGNvcHkpCiAJICovCkBAIC0zODUsNiArMzkzLDExIEBACiAJLyogbm93IHRoYXQgd2Uga25vdyBpdCB3YXMgZm9yIHVzLCB3ZSBjYW4gY2FuY2VsIHRoZSB0aW1lb3V0ICovCiAJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWFjLT5hc3NvY2luZm8udGltZW91dCk7CiAKKwkvKiBpZiB0aGUgYXNzb2NpYXRpb24gcmVzcG9uc2UgaW5jbHVkZWQgYW4gRVJQIElFLCB1cGRhdGUgb3VyIHNhdmVkCisJICogY29weSAqLworCWlmIChfaWVlZTgwMjExX25ldHdvcmstPmZsYWdzICYgTkVUV09SS19IQVNfRVJQX1ZBTFVFKQorCQluZXR3b3JrLT5lcnBfdmFsdWUgPSBfaWVlZTgwMjExX25ldHdvcmstPmVycF92YWx1ZTsKKwogCXN3aXRjaCAoc3RhdHVzKSB7CiAJCWNhc2UgMDoKIAkJCWRwcmludGsoS0VSTl9JTkZPIFBGWCAiYXNzb2NpYXRlZCFcbiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfYXV0aC5jCmluZGV4IGViYzMzY2EuLjRjZWYzOWUgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2F1dGguYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19hdXRoLmMKQEAgLTExNiw2ICsxMTYsMTYgQEAKIAlrZnJlZShhdXRoKTsKIH0KIAorLyogU2VuZHMgYSByZXNwb25zZSB0byBhbiBhdXRoIGNoYWxsZW5nZSAoZm9yIHNoYXJlZCBrZXkgYXV0aCkuICovCitzdGF0aWMgdm9pZAoraWVlZTgwMjExc29mdG1hY19hdXRoX2NoYWxsZW5nZV9yZXNwb25zZSh2b2lkICpfYXEpCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfYXV0aF9xdWV1ZV9pdGVtICphcSA9IF9hcTsKKworCS8qIFNlbmQgb3VyIHJlc3BvbnNlICovCisJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShhcS0+bWFjLCBhcS0+bmV0LCBJRUVFODAyMTFfU1RZUEVfQVVUSCwgYXEtPnN0YXRlKTsKK30KKwogLyogSGFuZGxlIHRoZSBhdXRoIHJlc3BvbnNlIGZyb20gdGhlIEFQCiAgKiBUaGlzIHNob3VsZCBiZSByZWdpc3RlcmVkIHdpdGggaWVlZTgwMjExIGFzIGhhbmRsZV9hdXRoIAogICovCkBAIC0xOTcsMjQgKzIwNywzMCBAQAogCQljYXNlIElFRUU4MDIxMVNPRlRNQUNfQVVUSF9TSEFSRURfQ0hBTExFTkdFOgogCQkJLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBjaGFsbGVuZ2UgSUUgKi8KIAkJCWRhdGEgPSAodTggKilhdXRoLT5pbmZvX2VsZW1lbnQ7Ci0JCQlpZigqZGF0YSsrICE9IE1GSUVfVFlQRV9DSEFMTEVOR0UpeworCQkJaWYgKCpkYXRhKysgIT0gTUZJRV9UWVBFX0NIQUxMRU5HRSkgewogCQkJCXByaW50a2woS0VSTl9OT1RJQ0UgUEZYICJTaGFyZWQgS2V5IEF1dGhlbnRpY2F0aW9uIGZhaWxlZCBkdWUgdG8gYSBtaXNzaW5nIGNoYWxsZW5nZS5cbiIpOwogCQkJCWJyZWFrOwkKIAkJCX0KIAkJCS8qIFNhdmUgdGhlIGNoYWxsZW5nZSAqLwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCQkJbmV0LT5jaGFsbGVuZ2VfbGVuID0gKmRhdGErKzsgCQotCQkJaWYobmV0LT5jaGFsbGVuZ2VfbGVuID4gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pCisJCQlpZiAobmV0LT5jaGFsbGVuZ2VfbGVuID4gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU4pCiAJCQkJbmV0LT5jaGFsbGVuZ2VfbGVuID0gV0xBTl9BVVRIX0NIQUxMRU5HRV9MRU47Ci0JCQlpZihuZXQtPmNoYWxsZW5nZSAhPSBOVUxMKQorCQkJaWYgKG5ldC0+Y2hhbGxlbmdlICE9IE5VTEwpCiAJCQkJa2ZyZWUobmV0LT5jaGFsbGVuZ2UpOwogCQkJbmV0LT5jaGFsbGVuZ2UgPSBrbWFsbG9jKG5ldC0+Y2hhbGxlbmdlX2xlbiwgR0ZQX0FUT01JQyk7CiAJCQltZW1jcHkobmV0LT5jaGFsbGVuZ2UsIGRhdGEsIG5ldC0+Y2hhbGxlbmdlX2xlbik7CiAJCQlhcS0+c3RhdGUgPSBJRUVFODAyMTFTT0ZUTUFDX0FVVEhfU0hBUkVEX1JFU1BPTlNFOyAKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCi0JCQkvKiBTZW5kIG91ciByZXNwb25zZSAqLwotCQkJaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShtYWMsIGFxLT5uZXQsIElFRUU4MDIxMV9TVFlQRV9BVVRILCBhcS0+c3RhdGUpOworCQkJLyogV2UgcmV1c2UgdGhlIHdvcmsgc3RydWN0IGZyb20gdGhlIGF1dGggcmVxdWVzdCBoZXJlLgorCQkJICogSXQgaXMgc2FmZSB0byBkbyBzbyBhcyBlYWNoIG9uZSBpcyBwZXItcmVxdWVzdCwgYW5kCisJCQkgKiBhdCB0aGlzIHBvaW50IChkZWFsaW5nIHdpdGggYXV0aGVudGljYXRpb24gcmVzcG9uc2UpCisJCQkgKiB3ZSBoYXZlIG9idmlvdXNseSBhbHJlYWR5IHNlbnQgdGhlIGluaXRpYWwgYXV0aAorCQkJICogcmVxdWVzdC4gKi8KKwkJCWNhbmNlbF9kZWxheWVkX3dvcmsoJmFxLT53b3JrKTsKKwkJCUlOSVRfV09SSygmYXEtPndvcmssICZpZWVlODAyMTFzb2Z0bWFjX2F1dGhfY2hhbGxlbmdlX3Jlc3BvbnNlLCAodm9pZCAqKWFxKTsKKwkJCXNjaGVkdWxlX3dvcmsoJmFxLT53b3JrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1hYy0+bG9jaywgZmxhZ3MpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgSUVFRTgwMjExU09GVE1BQ19BVVRIX1NIQVJFRF9QQVNTOgogCQkJa2ZyZWUobmV0LT5jaGFsbGVuZ2UpOwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX2lvLmMKaW5kZXggNmFlNWExZC4uODJiZmRkYiAxMDA2NDQKLS0tIGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfaW8uYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19pby5jCkBAIC00NjcsMyArNDY3LDE3IEBACiAJa2ZyZWUocGt0KTsKIAlyZXR1cm4gMDsKIH0KKworLyogQmVhY29uIGhhbmRsaW5nICovCitpbnQgaWVlZTgwMjExc29mdG1hY19oYW5kbGVfYmVhY29uKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJc3RydWN0IGllZWU4MDIxMV9iZWFjb24gKmJlYWNvbiwKKwlzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYgKG1hYy0+YXNzb2NpYXRlZCAmJiBtZW1jbXAobmV0d29yay0+YnNzaWQsIG1hYy0+YXNzb2NpbmZvLmJzc2lkLCBFVEhfQUxFTikgPT0gMCkKKwkJaWVlZTgwMjExc29mdG1hY19wcm9jZXNzX2VycChtYWMsIG5ldHdvcmstPmVycF92YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfbW9kdWxlLmMgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYwppbmRleCA0YjJlNTdkLi5hZGRlYTFjIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYworKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19tb2R1bGUuYwpAQCAtNDQsNiArNDQsNyBAQAogCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9hc3NvY19yZXNwb25zZSA9IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2Fzc29jX3Jlc3BvbnNlOwogCXNvZnRtYWMtPmllZWUtPmhhbmRsZV9yZWFzc29jX3JlcXVlc3QgPSBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9yZWFzc29jX3JlcTsKIAlzb2Z0bWFjLT5pZWVlLT5oYW5kbGVfZGlzYXNzb2MgPSBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9kaXNhc3NvYzsKKyAJc29mdG1hYy0+aWVlZS0+aGFuZGxlX2JlYWNvbiA9IGllZWU4MDIxMXNvZnRtYWNfaGFuZGxlX2JlYWNvbjsKIAlzb2Z0bWFjLT5zY2FuaW5mbyA9IE5VTEw7CiAKIAlzb2Z0bWFjLT5hc3NvY2luZm8uc2Nhbl9yZXRyeSA9IElFRUU4MDIxMVNPRlRNQUNfQVNTT0NfU0NBTl9SRVRSWV9MSU1JVDsKQEAgLTE3OCwyMSArMTc5LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEZpbmRzIHRoZSBoaWdoZXN0IHJhdGUgd2hpY2ggaXM6Ci0gKiAgMS4gUHJlc2VudCBpbiByaSAob3B0aW9uYWxseSBhIGJhc2ljIHJhdGUpCi0gKiAgMi4gU3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UKLSAqICAzLiBMZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHVzZXItZGVmaW5lZCByYXRlCi0gKi8KLXN0YXRpYyB1OCBoaWdoZXN0X3N1cHBvcnRlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAordTggaWVlZTgwMjExc29mdG1hY19oaWdoZXN0X3N1cHBvcnRlZF9yYXRlKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjLAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mbyAqcmksIGludCBiYXNpY19vbmx5KQogewogCXU4IHVzZXJfcmF0ZSA9IG1hYy0+dHhyYXRlcy51c2VyX3JhdGU7CiAJaW50IGk7CiAKLQlpZiAocmktPmNvdW50ID09IDApIHsKLQkJZHByaW50ayhLRVJOX0VSUiBQRlggImVtcHR5IHJhdGVzaW5mbz9cbiIpOworCWlmIChyaS0+Y291bnQgPT0gMCkKIAkJcmV0dXJuIElFRUU4MDIxMV9DQ0tfUkFURV8xTUI7Ci0JfQogCiAJZm9yIChpID0gcmktPmNvdW50IC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJdTggcmF0ZSA9IHJpLT5yYXRlc1tpXTsKQEAgLTIwOCwzNiArMjAyLDYxIEBACiAJLyogSWYgd2UgaGF2ZW4ndCBmb3VuZCBhIHN1aXRhYmxlIHJhdGUgYnkgbm93LCBqdXN0IHRydXN0IHRoZSB1c2VyICovCiAJcmV0dXJuIHVzZXJfcmF0ZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZSk7CisKK3ZvaWQgaWVlZTgwMjExc29mdG1hY19wcm9jZXNzX2VycChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKKwl1OCBlcnBfdmFsdWUpCit7CisgCWludCB1c2VfcHJvdGVjdGlvbjsKKwlpbnQgc2hvcnRfcHJlYW1ibGU7CisgCXUzMiBjaGFuZ2VzID0gMDsKKworCS8qIEJhcmtlciBwcmVhbWJsZSBtb2RlICovCisJc2hvcnRfcHJlYW1ibGUgPSAoKGVycF92YWx1ZSAmIFdMQU5fRVJQX0JBUktFUl9QUkVBTUJMRSkgPT0gMAorCQkJICAmJiBtYWMtPmFzc29jaW5mby5zaG9ydF9wcmVhbWJsZV9hdmFpbGFibGUpID8gMSA6IDA7CisKKwkvKiBQcm90ZWN0aW9uIG5lZWRlZD8gKi8KKwl1c2VfcHJvdGVjdGlvbiA9IChlcnBfdmFsdWUgJiBXTEFOX0VSUF9VU0VfUFJPVEVDVElPTikgIT0gMDsKKworCWlmIChtYWMtPmJzc2luZm8uc2hvcnRfcHJlYW1ibGUgIT0gc2hvcnRfcHJlYW1ibGUpIHsKKwkJY2hhbmdlcyB8PSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfU0hPUlRfUFJFQU1CTEU7CisJCW1hYy0+YnNzaW5mby5zaG9ydF9wcmVhbWJsZSA9IHNob3J0X3ByZWFtYmxlOworCX0KKworCWlmIChtYWMtPmJzc2luZm8udXNlX3Byb3RlY3Rpb24gIT0gdXNlX3Byb3RlY3Rpb24pIHsKKwkJY2hhbmdlcyB8PSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfUFJPVEVDVElPTjsKKwkJbWFjLT5ic3NpbmZvLnVzZV9wcm90ZWN0aW9uID0gdXNlX3Byb3RlY3Rpb247CisJfQorCisJaWYgKG1hYy0+YnNzaW5mb19jaGFuZ2UgJiYgY2hhbmdlcykKKwkJbWFjLT5ic3NpbmZvX2NoYW5nZShtYWMtPmRldiwgY2hhbmdlcyk7Cit9CiAKIHZvaWQgaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzICp0eHJhdGVzID0gJm1hYy0+dHhyYXRlczsKLQlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY190eHJhdGVzIG9sZHJhdGVzOwogCXUzMiBjaGFuZ2UgPSAwOwogCi0JaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCi0JCW9sZHJhdGVzID0gbWFjLT50eHJhdGVzOwotCiAJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX0RFRkFVTFQ7Ci0JdHhyYXRlcy0+ZGVmYXVsdF9yYXRlID0gaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShtYWMsICZtYWMtPmFzc29jaW5mby5zdXBwb3J0ZWRfcmF0ZXMsIDApOworCXR4cmF0ZXMtPmRlZmF1bHRfcmF0ZSA9IGllZWU4MDIxMXNvZnRtYWNfaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShtYWMsICZtYWMtPmJzc2luZm8uc3VwcG9ydGVkX3JhdGVzLCAwKTsKIAogCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUX0ZCQUNLOwogCXR4cmF0ZXMtPmRlZmF1bHRfZmFsbGJhY2sgPSBsb3dlcl9yYXRlKG1hYywgdHhyYXRlcy0+ZGVmYXVsdF9yYXRlKTsKIAogCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19NQ0FTVDsKLQl0eHJhdGVzLT5tY2FzdF9yYXRlID0gaGlnaGVzdF9zdXBwb3J0ZWRfcmF0ZShtYWMsICZtYWMtPmFzc29jaW5mby5zdXBwb3J0ZWRfcmF0ZXMsIDEpOworCXR4cmF0ZXMtPm1jYXN0X3JhdGUgPSBpZWVlODAyMTFzb2Z0bWFjX2hpZ2hlc3Rfc3VwcG9ydGVkX3JhdGUobWFjLCAmbWFjLT5ic3NpbmZvLnN1cHBvcnRlZF9yYXRlcywgMSk7CiAKIAlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKLQkJbWFjLT50eHJhdGVzX2NoYW5nZShtYWMtPmRldiwgY2hhbmdlLCAmb2xkcmF0ZXMpOworCQltYWMtPnR4cmF0ZXNfY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2UpOwogCiB9CiAKLXZvaWQgaWVlZTgwMjExc29mdG1hY19pbml0X3R4cmF0ZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpCit2b2lkIGllZWU4MDIxMXNvZnRtYWNfaW5pdF9ic3Moc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBtYWMtPmllZWU7CiAJdTMyIGNoYW5nZSA9IDA7CiAJc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyAqdHhyYXRlcyA9ICZtYWMtPnR4cmF0ZXM7Ci0Jc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfdHhyYXRlcyBvbGRyYXRlczsKKwlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19ic3NfaW5mbyAqYnNzaW5mbyA9ICZtYWMtPmJzc2luZm87CiAKIAkvKiBUT0RPOiBXZSBuZWVkIHNvbWUga2luZCBvZiBzdGF0ZSBtYWNoaW5lIHRvIGxvd2VyIHRoZSBkZWZhdWx0IHJhdGVzCiAJICogICAgICAgaWYgd2UgbG9vc2UgdG9vIG1hbnkgcGFja2V0cy4KQEAgLTI0NSw4ICsyNjQsNiBAQAogCS8qIENoYW5nZSB0aGUgZGVmYXVsdCB0eHJhdGUgdG8gdGhlIGhpZ2hlc3QgcG9zc2libGUgdmFsdWUuCiAJICogVGhlIHR4cmF0ZSBtYWNoaW5lIHdpbGwgbG93ZXIgaXQsIGlmIGl0IGlzIHRvbyBoaWdoLgogCSAqLwotCWlmIChtYWMtPnR4cmF0ZXNfY2hhbmdlKQotCQlvbGRyYXRlcyA9IG1hYy0+dHhyYXRlczsKIAkvKiBGSVhNRTogV2UgZG9uJ3QgY29ycmVjdGx5IGhhbmRsZSBiYWNraW5nIGRvd24gdG8gbG93ZXIKIAkgICByYXRlcywgc28gODAxLjExZyBkZXZpY2VzIHN0YXJ0IG9mZiBhdCAxMU0gZm9yIG5vdy4gUGVvcGxlCiAJICAgY2FuIG1hbnVhbGx5IGNoYW5nZSBpdCBpZiB0aGV5IHJlYWxseSBuZWVkIHRvLCBidXQgMTFNIGlzCkBAIC0yNzIsNyArMjg5LDIzIEBACiAJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfVFhSQVRFQ0hHX01HVF9NQ0FTVDsKIAogCWlmIChtYWMtPnR4cmF0ZXNfY2hhbmdlKQotCQltYWMtPnR4cmF0ZXNfY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2UsICZvbGRyYXRlcyk7CisJCW1hYy0+dHhyYXRlc19jaGFuZ2UobWFjLT5kZXYsIGNoYW5nZSk7CisKKwljaGFuZ2UgPSAwOworCisJYnNzaW5mby0+c3VwcG9ydGVkX3JhdGVzLmNvdW50ID0gMDsKKwltZW1zZXQoYnNzaW5mby0+c3VwcG9ydGVkX3JhdGVzLnJhdGVzLCAwLAorCQlzaXplb2YoYnNzaW5mby0+c3VwcG9ydGVkX3JhdGVzLnJhdGVzKSk7CisJY2hhbmdlIHw9IElFRUU4MDIxMVNPRlRNQUNfQlNTSU5GT0NIR19SQVRFUzsKKworCWJzc2luZm8tPnNob3J0X3ByZWFtYmxlID0gMDsKKwljaGFuZ2UgfD0gSUVFRTgwMjExU09GVE1BQ19CU1NJTkZPQ0hHX1NIT1JUX1BSRUFNQkxFOworCisJYnNzaW5mby0+dXNlX3Byb3RlY3Rpb24gPSAwOworCWNoYW5nZSB8PSBJRUVFODAyMTFTT0ZUTUFDX0JTU0lORk9DSEdfUFJPVEVDVElPTjsKKworCWlmIChtYWMtPmJzc2luZm9fY2hhbmdlKQorCQltYWMtPmJzc2luZm9fY2hhbmdlKG1hYy0+ZGV2LCBjaGFuZ2UpOwogCiAJbWFjLT5ydW5uaW5nID0gMTsKIH0KQEAgLTI4Miw3ICszMTUsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAogCWllZWU4MDIxMXNvZnRtYWNfc3RhcnRfY2hlY2tfcmF0ZXMobWFjKTsKLQlpZWVlODAyMTFzb2Z0bWFjX2luaXRfdHhyYXRlcyhtYWMpOworCWllZWU4MDIxMXNvZnRtYWNfaW5pdF9ic3MobWFjKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGllZWU4MDIxMXNvZnRtYWNfc3RhcnQpOwogCkBAIC0zMzUsNyArMzY4LDYgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMXNvZnRtYWNfYWRkX3R4cmF0ZXNfYmFkbmVzcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKIAkJCQkJCSBpbnQgYW1vdW50KQogewotCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX3R4cmF0ZXMgb2xkcmF0ZXM7CiAJdTggZGVmYXVsdF9yYXRlID0gbWFjLT50eHJhdGVzLmRlZmF1bHRfcmF0ZTsKIAl1OCBkZWZhdWx0X2ZhbGxiYWNrID0gbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2s7CiAJdTMyIGNoYW5nZXMgPSAwOwpAQCAtMzQ4LDggKzM4MCw2IEBACiAJbWFjLT50eHJhdGVfYmFkbmVzcyArPSBhbW91bnQ7CiAJaWYgKG1hYy0+dHhyYXRlX2JhZG5lc3MgPD0gLTEwMDApIHsKIAkJLyogVmVyeSBzbWFsbCBiYWRuZXNzLiBUcnkgYSBmYXN0ZXIgYml0cmF0ZS4gKi8KLQkJaWYgKG1hYy0+dHhyYXRlc19jaGFuZ2UpCi0JCQltZW1jcHkoJm9sZHJhdGVzLCAmbWFjLT50eHJhdGVzLCBzaXplb2Yob2xkcmF0ZXMpKTsKIAkJZGVmYXVsdF9yYXRlID0gcmFpc2VfcmF0ZShtYWMsIGRlZmF1bHRfcmF0ZSk7CiAJCWNoYW5nZXMgfD0gSUVFRTgwMjExU09GVE1BQ19UWFJBVEVDSEdfREVGQVVMVDsKIAkJZGVmYXVsdF9mYWxsYmFjayA9IGdldF9mYWxsYmFja19yYXRlKG1hYywgZGVmYXVsdF9yYXRlKTsKQEAgLTM1OCw4ICszODgsNiBAQAogcHJpbnRrKCJCaXRyYXRlIHJhaXNlZCB0byAldVxuIiwgZGVmYXVsdF9yYXRlKTsKIAl9IGVsc2UgaWYgKG1hYy0+dHhyYXRlX2JhZG5lc3MgPj0gMTAwMDApIHsKIAkJLyogVmVyeSBoaWdoIGJhZG5lc3MuIFRyeSBhIHNsb3dlciBiaXRyYXRlLiAqLwotCQlpZiAobWFjLT50eHJhdGVzX2NoYW5nZSkKLQkJCW1lbWNweSgmb2xkcmF0ZXMsICZtYWMtPnR4cmF0ZXMsIHNpemVvZihvbGRyYXRlcykpOwogCQlkZWZhdWx0X3JhdGUgPSBsb3dlcl9yYXRlKG1hYywgZGVmYXVsdF9yYXRlKTsKIAkJY2hhbmdlcyB8PSBJRUVFODAyMTFTT0ZUTUFDX1RYUkFURUNIR19ERUZBVUxUOwogCQlkZWZhdWx0X2ZhbGxiYWNrID0gZ2V0X2ZhbGxiYWNrX3JhdGUobWFjLCBkZWZhdWx0X3JhdGUpOwpAQCAtMzcyLDcgKzQwMCw3IEBACiAJbWFjLT50eHJhdGVzLmRlZmF1bHRfZmFsbGJhY2sgPSBkZWZhdWx0X2ZhbGxiYWNrOwogCiAJaWYgKGNoYW5nZXMgJiYgbWFjLT50eHJhdGVzX2NoYW5nZSkKLQkJbWFjLT50eHJhdGVzX2NoYW5nZShtYWMtPmRldiwgY2hhbmdlcywgJm9sZHJhdGVzKTsKKwkJbWFjLT50eHJhdGVzX2NoYW5nZShtYWMtPmRldiwgY2hhbmdlcyk7CiB9CiAKIHZvaWQgaWVlZTgwMjExc29mdG1hY19mcmFnbWVudF9sb3N0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC00MTYsNyArNDQ0LDExIEBACiAJbWVtY3B5KCZzb2Z0bmV0LT5zdXBwb3J0ZWRfcmF0ZXMucmF0ZXNbc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLmNvdW50XSwgbmV0LT5yYXRlc19leCwgbmV0LT5yYXRlc19leF9sZW4pOwogCXNvZnRuZXQtPnN1cHBvcnRlZF9yYXRlcy5jb3VudCArPSBuZXQtPnJhdGVzX2V4X2xlbjsKIAlzb3J0KHNvZnRuZXQtPnN1cHBvcnRlZF9yYXRlcy5yYXRlcywgc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLmNvdW50LCBzaXplb2Yoc29mdG5ldC0+c3VwcG9ydGVkX3JhdGVzLnJhdGVzWzBdKSwgcmF0ZV9jbXAsIE5VTEwpOwotCQorCisJLyogd2Ugc2F2ZSB0aGUgRVJQIHZhbHVlIGJlY2F1c2UgaXQgaXMgbmVlZGVkIGF0IGFzc29jaWF0aW9uIHRpbWUsIGFuZAorCSAqIG1hbnkgQVAncyBkbyBub3QgaW5jbHVkZSBhbiBFUlAgSUUgaW4gdGhlIGFzc29jaWF0aW9uIHJlc3BvbnNlLiAqLworCXNvZnRuZXQtPmVycF92YWx1ZSA9IG5ldC0+ZXJwX3ZhbHVlOworCiAJc29mdG5ldC0+Y2FwYWJpbGl0aWVzID0gbmV0LT5jYXBhYmlsaXR5OwogCXJldHVybiBzb2Z0bmV0OwogfQpkaWZmIC0tZ2l0IGEvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfcHJpdi5oIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfcHJpdi5oCmluZGV4IGZhMWY4ZTMuLjA2NDJlMDkgMTAwNjQ0Ci0tLSBhL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3ByaXYuaAorKysgYi9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY19wcml2LmgKQEAgLTExNiw5ICsxMTYsMTEgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19lc3NpZCAqZXNzaWQpOwogCiAvKiBSYXRlcyByZWxhdGVkICovCit2b2lkIGllZWU4MDIxMXNvZnRtYWNfcHJvY2Vzc19lcnAoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsCisJdTggZXJwX3ZhbHVlKTsKIGludCBpZWVlODAyMTFzb2Z0bWFjX3JhdGVzaW5mb19yYXRlX3N1cHBvcnRlZChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19yYXRlc2luZm8gKnJpLCB1OCByYXRlKTsKIHU4IGllZWU4MDIxMXNvZnRtYWNfbG93ZXJfcmF0ZV9kZWx0YShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywgdTggcmF0ZSwgaW50IGRlbHRhKTsKLXZvaWQgaWVlZTgwMjExc29mdG1hY19pbml0X3R4cmF0ZXMoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMpOwordm9pZCBpZWVlODAyMTFzb2Z0bWFjX2luaXRfYnNzKHN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqbWFjKTsKIHZvaWQgaWVlZTgwMjExc29mdG1hY19yZWNhbGNfdHhyYXRlcyhzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYyk7CiBzdGF0aWMgaW5saW5lIHU4IGxvd2VyX3JhdGUoc3RydWN0IGllZWU4MDIxMXNvZnRtYWNfZGV2aWNlICptYWMsIHU4IHJhdGUpIHsKIAlyZXR1cm4gaWVlZTgwMjExc29mdG1hY19sb3dlcl9yYXRlX2RlbHRhKG1hYywgcmF0ZSwgMSk7CkBAIC0xMzMsNiArMTM1LDkgQEAKIC8qKiogcHJvdG90eXBlcyBmcm9tIF9pby5jICovCiBpbnQgaWVlZTgwMjExc29mdG1hY19zZW5kX21ndF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKm1hYywKIAl2b2lkKiBwdHJhcmcsIHUzMiB0eXBlLCB1MzIgYXJnKTsKK2ludCBpZWVlODAyMTFzb2Z0bWFjX2hhbmRsZV9iZWFjb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgaWVlZTgwMjExX2JlYWNvbiAqYmVhY29uLAorCXN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yayk7CiAKIC8qKiogcHJvdG90eXBlcyBmcm9tIF9hdXRoLmMgKi8KIC8qIGRvIHRoZXNlIGhhdmUgdG8gZ28gaW50byB0aGUgcHVibGljIGhlYWRlcj8gKi8KQEAgLTE4OSw2ICsxOTQsNyBAQAogCSAgICBhdXRoZW50aWNhdGVkOjEsCiAJICAgIGF1dGhfZGVzeW5jZWRfb25jZToxOwogCisJdTggZXJwX3ZhbHVlOwkJCQkvKiBTYXZlZCBFUlAgdmFsdWUgKi8KIAl1MTYgY2FwYWJpbGl0aWVzOwkJCS8qIENhcGFiaWxpdGllcyBiaXRmaWVsZCAqLwogCXU4IGNoYWxsZW5nZV9sZW47CQkJLyogQXV0aCBDaGFsbGVuZ2UgbGVuZ3RoICovCiAJY2hhciAqY2hhbGxlbmdlOwkJCS8qIENoYWxsZW5nZSBUZXh0ICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9LY29uZmlnIGIvbmV0L2lwdjQvS2NvbmZpZwppbmRleCA4NTE0MTA2Li4zYjVkNTA0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9LY29uZmlnCisrKyBiL25ldC9pcHY0L0tjb25maWcKQEAgLTM4Niw2ICszODYsNyBAQAogCXNlbGVjdCBDUllQVE8KIAlzZWxlY3QgQ1JZUFRPX0hNQUMKIAlzZWxlY3QgQ1JZUFRPX01ENQorCXNlbGVjdCBDUllQVE9fQ0JDCiAJc2VsZWN0IENSWVBUT19TSEExCiAJc2VsZWN0IENSWVBUT19ERVMKIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9haDQuYyBiL25ldC9pcHY0L2FoNC5jCmluZGV4IDEzNjZiYzYuLjJiOTg5NDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FoNC5jCisrKyBiL25ldC9pcHY0L2FoNC5jCkBAIC0xLDMgKzEsNCBAQAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CkBAIC05Nyw3ICs5OCwxMCBAQAogCWFoLT5zcGkgPSB4LT5pZC5zcGk7CiAJYWgtPnNlcV9ubyA9IGh0b25sKCsreC0+cmVwbGF5Lm9zZXEpOwogCXhmcm1fYWV2ZW50X2RvcmVwbGF5KHgpOwotCWFocC0+aWN2KGFocCwgc2tiLCBhaC0+YXV0aF9kYXRhKTsKKwllcnIgPSBhaF9tYWNfZGlnZXN0KGFocCwgc2tiLCBhaC0+YXV0aF9kYXRhKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycm9yOworCW1lbWNweShhaC0+YXV0aF9kYXRhLCBhaHAtPndvcmtfaWN2LCBhaHAtPmljdl90cnVuY19sZW4pOwogCiAJdG9wX2lwaC0+dG9zID0gaXBoLT50b3M7CiAJdG9wX2lwaC0+dHRsID0gaXBoLT50dGw7CkBAIC0xMTksNiArMTIzLDcgQEAKIHsKIAlpbnQgYWhfaGxlbjsKIAlpbnQgaWhsOworCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBpcGhkciAqaXBoOwogCXN0cnVjdCBpcF9hdXRoX2hkciAqYWg7CiAJc3RydWN0IGFoX2RhdGEgKmFocDsKQEAgLTE2Niw4ICsxNzEsMTEgQEAKIAkJCiAJCW1lbWNweShhdXRoX2RhdGEsIGFoLT5hdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbik7CiAJCXNrYl9wdXNoKHNrYiwgaWhsKTsKLQkJYWhwLT5pY3YoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOwotCQlpZiAobWVtY21wKGFoLT5hdXRoX2RhdGEsIGF1dGhfZGF0YSwgYWhwLT5pY3ZfdHJ1bmNfbGVuKSkgeworCQllcnIgPSBhaF9tYWNfZGlnZXN0KGFocCwgc2tiLCBhaC0+YXV0aF9kYXRhKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQllcnIgPSAtRUlOVkFMOworCQlpZiAobWVtY21wKGFocC0+d29ya19pY3YsIGF1dGhfZGF0YSwgYWhwLT5pY3ZfdHJ1bmNfbGVuKSkgewogCQkJeC0+c3RhdHMuaW50ZWdyaXR5X2ZhaWxlZCsrOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE3OSw3ICsxODcsNyBAQAogCXJldHVybiAwOwogCiBvdXQ6Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgYWg0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKQEAgLTIwNCw2ICsyMTIsNyBAQAogewogCXN0cnVjdCBhaF9kYXRhICphaHAgPSBOVUxMOwogCXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYWFsZ19kZXNjOworCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtOwogCiAJaWYgKCF4LT5hYWxnKQogCQlnb3RvIGVycm9yOwpAQCAtMjIxLDI0ICsyMzAsMjcgQEAKIAogCWFocC0+a2V5ID0geC0+YWFsZy0+YWxnX2tleTsKIAlhaHAtPmtleV9sZW4gPSAoeC0+YWFsZy0+YWxnX2tleV9sZW4rNykvODsKLQlhaHAtPnRmbSA9IGNyeXB0b19hbGxvY190Zm0oeC0+YWFsZy0+YWxnX25hbWUsIDApOwotCWlmICghYWhwLT50Zm0pCisJdGZtID0gY3J5cHRvX2FsbG9jX2hhc2goeC0+YWFsZy0+YWxnX25hbWUsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIodGZtKSkKIAkJZ290byBlcnJvcjsKLQlhaHAtPmljdiA9IGFoX2htYWNfZGlnZXN0OworCisJYWhwLT50Zm0gPSB0Zm07CisJaWYgKGNyeXB0b19oYXNoX3NldGtleSh0Zm0sIGFocC0+a2V5LCBhaHAtPmtleV9sZW4pKQorCQlnb3RvIGVycm9yOwogCQogCS8qCiAJICogTG9va3VwIHRoZSBhbGdvcml0aG0gZGVzY3JpcHRpb24gbWFpbnRhaW5lZCBieSB4ZnJtX2FsZ28sCiAJICogdmVyaWZ5IGNyeXB0byB0cmFuc2Zvcm0gcHJvcGVydGllcywgYW5kIHN0b3JlIGluZm9ybWF0aW9uCiAJICogd2UgbmVlZCBmb3IgQUggcHJvY2Vzc2luZy4gIFRoaXMgbG9va3VwIGNhbm5vdCBmYWlsIGhlcmUKLQkgKiBhZnRlciBhIHN1Y2Nlc3NmdWwgY3J5cHRvX2FsbG9jX3RmbSgpLgorCSAqIGFmdGVyIGEgc3VjY2Vzc2Z1bCBjcnlwdG9fYWxsb2NfaGFzaCgpLgogCSAqLwogCWFhbGdfZGVzYyA9IHhmcm1fYWFsZ19nZXRfYnluYW1lKHgtPmFhbGctPmFsZ19uYW1lLCAwKTsKIAlCVUdfT04oIWFhbGdfZGVzYyk7CiAKIAlpZiAoYWFsZ19kZXNjLT51aW5mby5hdXRoLmljdl9mdWxsYml0cy84ICE9Ci0JICAgIGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUoYWhwLT50Zm0pKSB7CisJICAgIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUodGZtKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJBSDogJXMgZGlnZXN0c2l6ZSAldSAhPSAlaHVcbiIsCi0JCSAgICAgICB4LT5hYWxnLT5hbGdfbmFtZSwgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZShhaHAtPnRmbSksCisJCSAgICAgICB4LT5hYWxnLT5hbGdfbmFtZSwgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZSh0Zm0pLAogCQkgICAgICAgYWFsZ19kZXNjLT51aW5mby5hdXRoLmljdl9mdWxsYml0cy84KTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0yNjIsNyArMjc0LDcgQEAKIGVycm9yOgogCWlmIChhaHApIHsKIAkJa2ZyZWUoYWhwLT53b3JrX2ljdik7Ci0JCWNyeXB0b19mcmVlX3RmbShhaHAtPnRmbSk7CisJCWNyeXB0b19mcmVlX2hhc2goYWhwLT50Zm0pOwogCQlrZnJlZShhaHApOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTI3Nyw3ICsyODksNyBAQAogCiAJa2ZyZWUoYWhwLT53b3JrX2ljdik7CiAJYWhwLT53b3JrX2ljdiA9IE5VTEw7Ci0JY3J5cHRvX2ZyZWVfdGZtKGFocC0+dGZtKTsKKwljcnlwdG9fZnJlZV9oYXNoKGFocC0+dGZtKTsKIAlhaHAtPnRmbSA9IE5VTEw7CiAJa2ZyZWUoYWhwKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2VzcDQuYyBiL25ldC9pcHY0L2VzcDQuYwppbmRleCBmYzJmOGNlLi5iNDI4NDg5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9lc3A0LmMKKysrIGIvbmV0L2lwdjQvZXNwNC5jCkBAIC0xLDMgKzEsNCBAQAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CkBAIC0xNiw3ICsxNyw4IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgaXBoZHIgKnRvcF9pcGg7CiAJc3RydWN0IGlwX2VzcF9oZHIgKmVzcGg7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjOwogCXN0cnVjdCBlc3BfZGF0YSAqZXNwOwogCXN0cnVjdCBza19idWZmICp0cmFpbGVyOwogCWludCBibGtzaXplOwpAQCAtMzYsNyArMzgsOSBAQAogCWVzcCA9IHgtPmRhdGE7CiAJYWxlbiA9IGVzcC0+YXV0aC5pY3ZfdHJ1bmNfbGVuOwogCXRmbSA9IGVzcC0+Y29uZi50Zm07Ci0JYmxrc2l6ZSA9IEFMSUdOKGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZSh0Zm0pLCA0KTsKKwlkZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmZsYWdzID0gMDsKKwlibGtzaXplID0gQUxJR04oY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUodGZtKSwgNCk7CiAJY2xlbiA9IEFMSUdOKGNsZW4gKyAyLCBibGtzaXplKTsKIAlpZiAoZXNwLT5jb25mLnBhZGxlbikKIAkJY2xlbiA9IEFMSUdOKGNsZW4sIGVzcC0+Y29uZi5wYWRsZW4pOwpAQCAtOTIsNyArOTYsNyBAQAogCXhmcm1fYWV2ZW50X2RvcmVwbGF5KHgpOwogCiAJaWYgKGVzcC0+Y29uZi5pdmxlbikKLQkJY3J5cHRvX2NpcGhlcl9zZXRfaXYodGZtLCBlc3AtPmNvbmYuaXZlYywgY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSkpOworCQljcnlwdG9fYmxrY2lwaGVyX3NldF9pdih0Zm0sIGVzcC0+Y29uZi5pdmVjLCBlc3AtPmNvbmYuaXZsZW4pOwogCiAJZG8gewogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJmVzcC0+c2didWZbMF07CkBAIC0xMDMsMjYgKzEwNywyNyBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCX0KIAkJc2tiX3RvX3NndmVjKHNrYiwgc2csIGVzcGgtPmVuY19kYXRhK2VzcC0+Y29uZi5pdmxlbi1za2ItPmRhdGEsIGNsZW4pOwotCQljcnlwdG9fY2lwaGVyX2VuY3J5cHQodGZtLCBzZywgc2csIGNsZW4pOworCQllcnIgPSBjcnlwdG9fYmxrY2lwaGVyX2VuY3J5cHQoJmRlc2MsIHNnLCBzZywgY2xlbik7CiAJCWlmICh1bmxpa2VseShzZyAhPSAmZXNwLT5zZ2J1ZlswXSkpCiAJCQlrZnJlZShzZyk7CiAJfSB3aGlsZSAoMCk7CiAKKwlpZiAodW5saWtlbHkoZXJyKSkKKwkJZ290byBlcnJvcjsKKwogCWlmIChlc3AtPmNvbmYuaXZsZW4pIHsKLQkJbWVtY3B5KGVzcGgtPmVuY19kYXRhLCBlc3AtPmNvbmYuaXZlYywgY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSkpOwotCQljcnlwdG9fY2lwaGVyX2dldF9pdih0Zm0sIGVzcC0+Y29uZi5pdmVjLCBjcnlwdG9fdGZtX2FsZ19pdnNpemUodGZtKSk7CisJCW1lbWNweShlc3BoLT5lbmNfZGF0YSwgZXNwLT5jb25mLml2ZWMsIGVzcC0+Y29uZi5pdmxlbik7CisJCWNyeXB0b19ibGtjaXBoZXJfZ2V0X2l2KHRmbSwgZXNwLT5jb25mLml2ZWMsIGVzcC0+Y29uZi5pdmxlbik7CiAJfQogCiAJaWYgKGVzcC0+YXV0aC5pY3ZfZnVsbF9sZW4pIHsKLQkJZXNwLT5hdXRoLmljdihlc3AsIHNrYiwgKHU4Killc3BoLXNrYi0+ZGF0YSwKLQkJICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpICsgZXNwLT5jb25mLml2bGVuK2NsZW4sIHRyYWlsZXItPnRhaWwpOwotCQlwc2tiX3B1dChza2IsIHRyYWlsZXIsIGFsZW4pOworCQllcnIgPSBlc3BfbWFjX2RpZ2VzdChlc3AsIHNrYiwgKHU4ICopZXNwaCAtIHNrYi0+ZGF0YSwKKwkJCQkgICAgIHNpemVvZigqZXNwaCkgKyBlc3AtPmNvbmYuaXZsZW4gKyBjbGVuKTsKKwkJbWVtY3B5KHBza2JfcHV0KHNrYiwgdHJhaWxlciwgYWxlbiksIGVzcC0+YXV0aC53b3JrX2ljdiwgYWxlbik7CiAJfQogCiAJaXBfc2VuZF9jaGVjayh0b3BfaXBoKTsKIAotCWVyciA9IDA7Ci0KIGVycm9yOgogCXJldHVybiBlcnI7CiB9CkBAIC0xMzcsOCArMTQyLDEwIEBACiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IGlwX2VzcF9oZHIgKmVzcGg7CiAJc3RydWN0IGVzcF9kYXRhICplc3AgPSB4LT5kYXRhOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0gPSBlc3AtPmNvbmYudGZtOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGZtIH07CiAJc3RydWN0IHNrX2J1ZmYgKnRyYWlsZXI7Ci0JaW50IGJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOworCWludCBibGtzaXplID0gQUxJR04oY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUodGZtKSwgNCk7CiAJaW50IGFsZW4gPSBlc3AtPmF1dGguaWN2X3RydW5jX2xlbjsKIAlpbnQgZWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSAtIGVzcC0+Y29uZi5pdmxlbiAtIGFsZW47CiAJaW50IG5mcmFnczsKQEAgLTE0Niw2ICsxNTMsNyBAQAogCXU4IG5leHRoZHJbMl07CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgcGFkbGVuOworCWludCBlcnI7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpKSkKIAkJZ290byBvdXQ7CkBAIC0xNTUsMTUgKzE2MywxNiBAQAogCiAJLyogSWYgaW50ZWdyaXR5IGNoZWNrIGlzIHJlcXVpcmVkLCBkbyB0aGlzLiAqLwogCWlmIChlc3AtPmF1dGguaWN2X2Z1bGxfbGVuKSB7Ci0JCXU4IHN1bVtlc3AtPmF1dGguaWN2X2Z1bGxfbGVuXTsKLQkJdTggc3VtMVthbGVuXTsKLQkJCi0JCWVzcC0+YXV0aC5pY3YoZXNwLCBza2IsIDAsIHNrYi0+bGVuLWFsZW4sIHN1bSk7CisJCXU4IHN1bVthbGVuXTsKIAotCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIHNrYi0+bGVuLWFsZW4sIHN1bTEsIGFsZW4pKQorCQllcnIgPSBlc3BfbWFjX2RpZ2VzdChlc3AsIHNrYiwgMCwgc2tiLT5sZW4gLSBhbGVuKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCWlmIChza2JfY29weV9iaXRzKHNrYiwgc2tiLT5sZW4gLSBhbGVuLCBzdW0sIGFsZW4pKQogCQkJQlVHKCk7CiAKLQkJaWYgKHVubGlrZWx5KG1lbWNtcChzdW0sIHN1bTEsIGFsZW4pKSkgeworCQlpZiAodW5saWtlbHkobWVtY21wKGVzcC0+YXV0aC53b3JrX2ljdiwgc3VtLCBhbGVuKSkpIHsKIAkJCXgtPnN0YXRzLmludGVncml0eV9mYWlsZWQrKzsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNzgsNyArMTg3LDcgQEAKIAogCS8qIEdldCBpdmVjLiBUaGlzIGNhbiBiZSB3cm9uZywgY2hlY2sgYWdhaW5zdCBhbm90aGVyIGltcGxzLiAqLwogCWlmIChlc3AtPmNvbmYuaXZsZW4pCi0JCWNyeXB0b19jaXBoZXJfc2V0X2l2KGVzcC0+Y29uZi50Zm0sIGVzcGgtPmVuY19kYXRhLCBjcnlwdG9fdGZtX2FsZ19pdnNpemUoZXNwLT5jb25mLnRmbSkpOworCQljcnlwdG9fYmxrY2lwaGVyX3NldF9pdih0Zm0sIGVzcGgtPmVuY19kYXRhLCBlc3AtPmNvbmYuaXZsZW4pOwogCiAJc2cgPSAmZXNwLT5zZ2J1ZlswXTsKIApAQCAtMTg4LDkgKzE5NywxMSBAQAogCQkJZ290byBvdXQ7CiAJfQogCXNrYl90b19zZ3ZlYyhza2IsIHNnLCBzaXplb2Yoc3RydWN0IGlwX2VzcF9oZHIpICsgZXNwLT5jb25mLml2bGVuLCBlbGVuKTsKLQljcnlwdG9fY2lwaGVyX2RlY3J5cHQoZXNwLT5jb25mLnRmbSwgc2csIHNnLCBlbGVuKTsKKwllcnIgPSBjcnlwdG9fYmxrY2lwaGVyX2RlY3J5cHQoJmRlc2MsIHNnLCBzZywgZWxlbik7CiAJaWYgKHVubGlrZWx5KHNnICE9ICZlc3AtPnNnYnVmWzBdKSkKIAkJa2ZyZWUoc2cpOworCWlmICh1bmxpa2VseShlcnIpKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKHNrYl9jb3B5X2JpdHMoc2tiLCBza2ItPmxlbi1hbGVuLTIsIG5leHRoZHIsIDIpKQogCQlCVUcoKTsKQEAgLTI1NCw3ICsyNjUsNyBAQAogc3RhdGljIHUzMiBlc3A0X2dldF9tYXhfc2l6ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcCA9IHgtPmRhdGE7Ci0JdTMyIGJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOworCXUzMiBibGtzaXplID0gQUxJR04oY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOwogCiAJaWYgKHgtPnByb3BzLm1vZGUpIHsKIAkJbXR1ID0gQUxJR04obXR1ICsgMiwgYmxrc2l6ZSk7CkBAIC0yOTMsMTEgKzMwNCwxMSBAQAogCWlmICghZXNwKQogCQlyZXR1cm47CiAKLQljcnlwdG9fZnJlZV90Zm0oZXNwLT5jb25mLnRmbSk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGVzcC0+Y29uZi50Zm0pOwogCWVzcC0+Y29uZi50Zm0gPSBOVUxMOwogCWtmcmVlKGVzcC0+Y29uZi5pdmVjKTsKIAllc3AtPmNvbmYuaXZlYyA9IE5VTEw7Ci0JY3J5cHRvX2ZyZWVfdGZtKGVzcC0+YXV0aC50Zm0pOworCWNyeXB0b19mcmVlX2hhc2goZXNwLT5hdXRoLnRmbSk7CiAJZXNwLT5hdXRoLnRmbSA9IE5VTEw7CiAJa2ZyZWUoZXNwLT5hdXRoLndvcmtfaWN2KTsKIAllc3AtPmF1dGgud29ya19pY3YgPSBOVUxMOwpAQCAtMzA3LDYgKzMxOCw3IEBACiBzdGF0aWMgaW50IGVzcF9pbml0X3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewogCXN0cnVjdCBlc3BfZGF0YSAqZXNwID0gTlVMTDsKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtOwogCiAJLyogbnVsbCBhdXRoIGFuZCBlbmNyeXB0aW9uIGNhbiBoYXZlIHplcm8gbGVuZ3RoIGtleXMgKi8KIAlpZiAoeC0+YWFsZykgewpAQCAtMzIyLDIyICszMzQsMjcgQEAKIAogCWlmICh4LT5hYWxnKSB7CiAJCXN0cnVjdCB4ZnJtX2FsZ29fZGVzYyAqYWFsZ19kZXNjOworCQlzdHJ1Y3QgY3J5cHRvX2hhc2ggKmhhc2g7CiAKIAkJZXNwLT5hdXRoLmtleSA9IHgtPmFhbGctPmFsZ19rZXk7CiAJCWVzcC0+YXV0aC5rZXlfbGVuID0gKHgtPmFhbGctPmFsZ19rZXlfbGVuKzcpLzg7Ci0JCWVzcC0+YXV0aC50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKHgtPmFhbGctPmFsZ19uYW1lLCAwKTsKLQkJaWYgKGVzcC0+YXV0aC50Zm0gPT0gTlVMTCkKKwkJaGFzaCA9IGNyeXB0b19hbGxvY19oYXNoKHgtPmFhbGctPmFsZ19uYW1lLCAwLAorCQkJCQkgQ1JZUFRPX0FMR19BU1lOQyk7CisJCWlmIChJU19FUlIoaGFzaCkpCiAJCQlnb3RvIGVycm9yOwotCQllc3AtPmF1dGguaWN2ID0gZXNwX2htYWNfZGlnZXN0OworCisJCWVzcC0+YXV0aC50Zm0gPSBoYXNoOworCQlpZiAoY3J5cHRvX2hhc2hfc2V0a2V5KGhhc2gsIGVzcC0+YXV0aC5rZXksIGVzcC0+YXV0aC5rZXlfbGVuKSkKKwkJCWdvdG8gZXJyb3I7CiAKIAkJYWFsZ19kZXNjID0geGZybV9hYWxnX2dldF9ieW5hbWUoeC0+YWFsZy0+YWxnX25hbWUsIDApOwogCQlCVUdfT04oIWFhbGdfZGVzYyk7CiAKIAkJaWYgKGFhbGdfZGVzYy0+dWluZm8uYXV0aC5pY3ZfZnVsbGJpdHMvOCAhPQotCQkgICAgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZShlc3AtPmF1dGgudGZtKSkgeworCQkgICAgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoKSkgewogCQkJTkVUREVCVUcoS0VSTl9JTkZPICJFU1A6ICVzIGRpZ2VzdHNpemUgJXUgIT0gJWh1XG4iLAogCQkJCSB4LT5hYWxnLT5hbGdfbmFtZSwKLQkJCQkgY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZShlc3AtPmF1dGgudGZtKSwKKwkJCQkgY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShoYXNoKSwKIAkJCQkgYWFsZ19kZXNjLT51aW5mby5hdXRoLmljdl9mdWxsYml0cy84KTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTM1MSwxMyArMzY4LDExIEBACiAJfQogCWVzcC0+Y29uZi5rZXkgPSB4LT5lYWxnLT5hbGdfa2V5OwogCWVzcC0+Y29uZi5rZXlfbGVuID0gKHgtPmVhbGctPmFsZ19rZXlfbGVuKzcpLzg7Ci0JaWYgKHgtPnByb3BzLmVhbGdvID09IFNBREJfRUFMR19OVUxMKQotCQllc3AtPmNvbmYudGZtID0gY3J5cHRvX2FsbG9jX3RmbSh4LT5lYWxnLT5hbGdfbmFtZSwgQ1JZUFRPX1RGTV9NT0RFX0VDQik7Ci0JZWxzZQotCQllc3AtPmNvbmYudGZtID0gY3J5cHRvX2FsbG9jX3RmbSh4LT5lYWxnLT5hbGdfbmFtZSwgQ1JZUFRPX1RGTV9NT0RFX0NCQyk7Ci0JaWYgKGVzcC0+Y29uZi50Zm0gPT0gTlVMTCkKKwl0Zm0gPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKHgtPmVhbGctPmFsZ19uYW1lLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpCiAJCWdvdG8gZXJyb3I7Ci0JZXNwLT5jb25mLml2bGVuID0gY3J5cHRvX3RmbV9hbGdfaXZzaXplKGVzcC0+Y29uZi50Zm0pOworCWVzcC0+Y29uZi50Zm0gPSB0Zm07CisJZXNwLT5jb25mLml2bGVuID0gY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKTsKIAllc3AtPmNvbmYucGFkbGVuID0gMDsKIAlpZiAoZXNwLT5jb25mLml2bGVuKSB7CiAJCWVzcC0+Y29uZi5pdmVjID0ga21hbGxvYyhlc3AtPmNvbmYuaXZsZW4sIEdGUF9LRVJORUwpOwpAQCAtMzY1LDcgKzM4MCw3IEBACiAJCQlnb3RvIGVycm9yOwogCQlnZXRfcmFuZG9tX2J5dGVzKGVzcC0+Y29uZi5pdmVjLCBlc3AtPmNvbmYuaXZsZW4pOwogCX0KLQlpZiAoY3J5cHRvX2NpcGhlcl9zZXRrZXkoZXNwLT5jb25mLnRmbSwgZXNwLT5jb25mLmtleSwgZXNwLT5jb25mLmtleV9sZW4pKQorCWlmIChjcnlwdG9fYmxrY2lwaGVyX3NldGtleSh0Zm0sIGVzcC0+Y29uZi5rZXksIGVzcC0+Y29uZi5rZXlfbGVuKSkKIAkJZ290byBlcnJvcjsKIAl4LT5wcm9wcy5oZWFkZXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBpcF9lc3BfaGRyKSArIGVzcC0+Y29uZi5pdmxlbjsKIAlpZiAoeC0+cHJvcHMubW9kZSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCA5YmU1M2E4Li41MTczODAwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKKysrIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCkBAIC0xNTksNyArMTU5LDcgQEAKIAogdm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqZmkpCiB7Ci0Jd3JpdGVfbG9jaygmZmliX2luZm9fbG9jayk7CisJd3JpdGVfbG9ja19iaCgmZmliX2luZm9fbG9jayk7CiAJaWYgKGZpICYmIC0tZmktPmZpYl90cmVlcmVmID09IDApIHsKIAkJaGxpc3RfZGVsKCZmaS0+ZmliX2hhc2gpOwogCQlpZiAoZmktPmZpYl9wcmVmc3JjKQpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCWZpLT5maWJfZGVhZCA9IDE7CiAJCWZpYl9pbmZvX3B1dChmaSk7CiAJfQotCXdyaXRlX3VubG9jaygmZmliX2luZm9fbG9jayk7CisJd3JpdGVfdW5sb2NrX2JoKCZmaWJfaW5mb19sb2NrKTsKIH0KIAogc3RhdGljIF9faW5saW5lX18gaW50IG5oX2NvbXAoY29uc3Qgc3RydWN0IGZpYl9pbmZvICpmaSwgY29uc3Qgc3RydWN0IGZpYl9pbmZvICpvZmkpCkBAIC01OTgsNyArNTk4LDcgQEAKIAl1bnNpZ25lZCBpbnQgb2xkX3NpemUgPSBmaWJfaGFzaF9zaXplOwogCXVuc2lnbmVkIGludCBpLCBieXRlczsKIAotCXdyaXRlX2xvY2soJmZpYl9pbmZvX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmZpYl9pbmZvX2xvY2spOwogCW9sZF9pbmZvX2hhc2ggPSBmaWJfaW5mb19oYXNoOwogCW9sZF9sYWRkcmhhc2ggPSBmaWJfaW5mb19sYWRkcmhhc2g7CiAJZmliX2hhc2hfc2l6ZSA9IG5ld19zaXplOwpAQCAtNjM5LDcgKzYzOSw3IEBACiAJfQogCWZpYl9pbmZvX2xhZGRyaGFzaCA9IG5ld19sYWRkcmhhc2g7CiAKLQl3cml0ZV91bmxvY2soJmZpYl9pbmZvX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmZmliX2luZm9fbG9jayk7CiAKIAlieXRlcyA9IG9sZF9zaXplICogc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkICopOwogCWZpYl9oYXNoX2ZyZWUob2xkX2luZm9faGFzaCwgYnl0ZXMpOwpAQCAtODIwLDcgKzgyMCw3IEBACiAKIAlmaS0+ZmliX3RyZWVyZWYrKzsKIAlhdG9taWNfaW5jKCZmaS0+ZmliX2NsbnRyZWYpOwotCXdyaXRlX2xvY2soJmZpYl9pbmZvX2xvY2spOworCXdyaXRlX2xvY2tfYmgoJmZpYl9pbmZvX2xvY2spOwogCWhsaXN0X2FkZF9oZWFkKCZmaS0+ZmliX2hhc2gsCiAJCSAgICAgICAmZmliX2luZm9faGFzaFtmaWJfaW5mb19oYXNoZm4oZmkpXSk7CiAJaWYgKGZpLT5maWJfcHJlZnNyYykgewpAQCAtODM5LDcgKzgzOSw3IEBACiAJCWhlYWQgPSAmZmliX2luZm9fZGV2aGFzaFtoYXNoXTsKIAkJaGxpc3RfYWRkX2hlYWQoJm5oLT5uaF9oYXNoLCBoZWFkKTsKIAl9IGVuZGZvcl9uZXh0aG9wcyhmaSkKLQl3cml0ZV91bmxvY2soJmZpYl9pbmZvX2xvY2spOworCXdyaXRlX3VubG9ja19iaCgmZmliX2luZm9fbG9jayk7CiAJcmV0dXJuIGZpOwogCiBlcnJfaW52YWw6CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfdHJpZS5jIGIvbmV0L2lwdjQvZmliX3RyaWUuYwppbmRleCAyM2ZiOWQ5Li4wMTgwMWMwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfdHJpZS5jCisrKyBiL25ldC9pcHY0L2ZpYl90cmllLmMKQEAgLTEyODEsMTggKzEyODEsMTggQEAKIAkJCSAgICAgc3RydWN0IGZpYl9yZXN1bHQgKnJlcykKIHsKIAlpbnQgZXJyLCBpOwotCXRfa2V5IG1hc2s7CisJX19iZTMyIG1hc2s7CiAJc3RydWN0IGxlYWZfaW5mbyAqbGk7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhoZWFkID0gJmwtPmxpc3Q7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobGksIG5vZGUsIGhoZWFkLCBobGlzdCkgewogCQlpID0gbGktPnBsZW47Ci0JCW1hc2sgPSBudG9obChpbmV0X21ha2VfbWFzayhpKSk7Ci0JCWlmIChsLT5rZXkgIT0gKGtleSAmIG1hc2spKQorCQltYXNrID0gaW5ldF9tYWtlX21hc2soaSk7CisJCWlmIChsLT5rZXkgIT0gKGtleSAmIG50b2hsKG1hc2spKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICgoZXJyID0gZmliX3NlbWFudGljX21hdGNoKCZsaS0+ZmFsaCwgZmxwLCByZXMsIGwtPmtleSwgbWFzaywgaSkpIDw9IDApIHsKKwkJaWYgKChlcnIgPSBmaWJfc2VtYW50aWNfbWF0Y2goJmxpLT5mYWxoLCBmbHAsIHJlcywgaHRvbmwobC0+a2V5KSwgbWFzaywgaSkpIDw9IDApIHsKIAkJCSpwbGVuID0gaTsKICNpZmRlZiBDT05GSUdfSVBfRklCX1RSSUVfU1RBVFMKIAkJCXQtPnN0YXRzLnNlbWFudGljX21hdGNoX3Bhc3NlZCsrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IDlmNGI3NTIuLjhlODExN2MgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTE3OTMsMjkgKzE3OTMsMzUgQEAKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAJdTMyIGdyb3VwID0gaW1yLT5pbXJfbXVsdGlhZGRyLnNfYWRkcjsKIAl1MzIgaWZpbmRleDsKKwlpbnQgcmV0ID0gLUVBRERSTk9UQVZBSUw7CiAKIAlydG5sX2xvY2soKTsKIAlpbl9kZXYgPSBpcF9tY19maW5kX2RldihpbXIpOwotCWlmICghaW5fZGV2KSB7Ci0JCXJ0bmxfdW5sb2NrKCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KIAlpZmluZGV4ID0gaW1yLT5pbXJfaWZpbmRleDsKIAlmb3IgKGltbHAgPSAmaW5ldC0+bWNfbGlzdDsgKGltbCA9ICppbWxwKSAhPSBOVUxMOyBpbWxwID0gJmltbC0+bmV4dCkgewotCQlpZiAoaW1sLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBncm91cCAmJgotCQkgICAgaW1sLT5tdWx0aS5pbXJfaWZpbmRleCA9PSBpZmluZGV4KSB7Ci0JCQkodm9pZCkgaXBfbWNfbGVhdmVfc3JjKHNrLCBpbWwsIGluX2Rldik7CisJCWlmIChpbWwtPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyICE9IGdyb3VwKQorCQkJY29udGludWU7CisJCWlmIChpZmluZGV4KSB7CisJCQlpZiAoaW1sLT5tdWx0aS5pbXJfaWZpbmRleCAhPSBpZmluZGV4KQorCQkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGltci0+aW1yX2FkZHJlc3Muc19hZGRyICYmIGltci0+aW1yX2FkZHJlc3Muc19hZGRyICE9CisJCQkJaW1sLT5tdWx0aS5pbXJfYWRkcmVzcy5zX2FkZHIpCisJCQljb250aW51ZTsKIAotCQkJKmltbHAgPSBpbWwtPm5leHQ7CisJCSh2b2lkKSBpcF9tY19sZWF2ZV9zcmMoc2ssIGltbCwgaW5fZGV2KTsKIAorCQkqaW1scCA9IGltbC0+bmV4dDsKKworCQlpZiAoaW5fZGV2KQogCQkJaXBfbWNfZGVjX2dyb3VwKGluX2RldiwgZ3JvdXApOwotCQkJcnRubF91bmxvY2soKTsKLQkJCXNvY2tfa2ZyZWVfcyhzaywgaW1sLCBzaXplb2YoKmltbCkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwkJcnRubF91bmxvY2soKTsKKwkJc29ja19rZnJlZV9zKHNrLCBpbWwsIHNpemVvZigqaW1sKSk7CisJCXJldHVybiAwOwogCX0KKwlpZiAoIWluX2RldikKKwkJcmV0ID0gLUVOT0RFVjsKIAlydG5sX3VubG9jaygpOwotCXJldHVybiAtRUFERFJOT1RBVkFJTDsKKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgaXBfbWNfc291cmNlKGludCBhZGQsIGludCBvbW9kZSwgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QKQEAgLTIxOTksMTMgKzIyMDUsMTMgQEAKIAkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCQlpbmV0LT5tY19saXN0ID0gaW1sLT5uZXh0OwogCi0JCWlmICgoaW5fZGV2ID0gaW5ldGRldl9ieV9pbmRleChpbWwtPm11bHRpLmltcl9pZmluZGV4KSkgIT0gTlVMTCkgewotCQkJKHZvaWQpIGlwX21jX2xlYXZlX3NyYyhzaywgaW1sLCBpbl9kZXYpOworCQlpbl9kZXYgPSBpbmV0ZGV2X2J5X2luZGV4KGltbC0+bXVsdGkuaW1yX2lmaW5kZXgpOworCQkodm9pZCkgaXBfbWNfbGVhdmVfc3JjKHNrLCBpbWwsIGluX2Rldik7CisJCWlmIChpbl9kZXYgIT0gTlVMTCkgewogCQkJaXBfbWNfZGVjX2dyb3VwKGluX2RldiwgaW1sLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkcik7CiAJCQlpbl9kZXZfcHV0KGluX2Rldik7CiAJCX0KIAkJc29ja19rZnJlZV9zKHNrLCBpbWwsIHNpemVvZigqaW1sKSk7Ci0KIAl9CiAJcnRubF91bmxvY2soKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX291dHB1dC5jIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKaW5kZXggN2M5ZjlhNi4uYTJlZGUxNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3V0cHV0LmMKKysrIGIvbmV0L2lwdjQvaXBfb3V0cHV0LmMKQEAgLTQ0MCw2ICs0NDAsNyBAQAogCWlwaCA9IHNrYi0+bmguaXBoOwogCiAJaWYgKHVubGlrZWx5KChpcGgtPmZyYWdfb2ZmICYgaHRvbnMoSVBfREYpKSAmJiAhc2tiLT5sb2NhbF9kZikpIHsKKwkJSVBfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJCWljbXBfc2VuZChza2IsIElDTVBfREVTVF9VTlJFQUNILCBJQ01QX0ZSQUdfTkVFREVELAogCQkJICBodG9ubChkc3RfbXR1KCZydC0+dS5kc3QpKSk7CiAJCWtmcmVlX3NrYihza2IpOwpAQCAtNTI2LDYgKzUyNyw4IEBACiAKIAkJCWVyciA9IG91dHB1dChza2IpOwogCisJCQlpZiAoIWVycikKKwkJCQlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0NSRUFURVMpOwogCQkJaWYgKGVyciB8fCAhZnJhZykKIAkJCQlicmVhazsKIApAQCAtNjQ5LDkgKzY1Miw2IEBACiAJCS8qCiAJCSAqCVB1dCB0aGlzIGZyYWdtZW50IGludG8gdGhlIHNlbmRpbmcgcXVldWUuCiAJCSAqLwotCi0JCUlQX0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUyk7Ci0KIAkJaXBoLT50b3RfbGVuID0gaHRvbnMobGVuICsgaGxlbik7CiAKIAkJaXBfc2VuZF9jaGVjayhpcGgpOwpAQCAtNjU5LDYgKzY1OSw4IEBACiAJCWVyciA9IG91dHB1dChza2IyKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZmFpbDsKKworCQlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0NSRUFURVMpOwogCX0KIAlrZnJlZV9za2Ioc2tiKTsKIAlJUF9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR09LUyk7CkBAIC05NDYsNyArOTQ4LDcgQEAKIAkJCQlza2JfcHJldi0+Y3N1bSA9IGNzdW1fc3ViKHNrYl9wcmV2LT5jc3VtLAogCQkJCQkJCSAgc2tiLT5jc3VtKTsKIAkJCQlkYXRhICs9IGZyYWdnYXA7Ci0JCQkJc2tiX3RyaW0oc2tiX3ByZXYsIG1heGZyYWdsZW4pOworCQkJCXBza2JfdHJpbV91bmlxdWUoc2tiX3ByZXYsIG1heGZyYWdsZW4pOwogCQkJfQogCiAJCQljb3B5ID0gZGF0YWxlbiAtIHRyYW5zaGRybGVuIC0gZnJhZ2dhcDsKQEAgLTExNDEsNyArMTE0Myw3IEBACiAJCQkJCWRhdGEsIGZyYWdnYXAsIDApOwogCQkJCXNrYl9wcmV2LT5jc3VtID0gY3N1bV9zdWIoc2tiX3ByZXYtPmNzdW0sCiAJCQkJCQkJICBza2ItPmNzdW0pOwotCQkJCXNrYl90cmltKHNrYl9wcmV2LCBtYXhmcmFnbGVuKTsKKwkJCQlwc2tiX3RyaW1fdW5pcXVlKHNrYl9wcmV2LCBtYXhmcmFnbGVuKTsKIAkJCX0KIAogCQkJLyoKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCmluZGV4IDg0ZjQzYTMuLjJkMDVjNDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKKysrIGIvbmV0L2lwdjQvaXBfc29ja2dsdWUuYwpAQCAtMTEyLDE0ICsxMTIsMTkgQEAKIHN0YXRpYyB2b2lkIGlwX2Ntc2dfcmVjdl9zZWN1cml0eShzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJY2hhciAqc2VjZGF0YTsKLQl1MzIgc2VjbGVuOworCXUzMiBzZWNsZW4sIHNlY2lkOwogCWludCBlcnI7CiAKLQllcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShza2IsICZzZWNkYXRhLCAmc2VjbGVuKTsKKwllcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShOVUxMLCBza2IsICZzZWNpZCk7CisJaWYgKGVycikKKwkJcmV0dXJuOworCisJZXJyID0gc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KHNlY2lkLCAmc2VjZGF0YSwgJnNlY2xlbik7CiAJaWYgKGVycikKIAkJcmV0dXJuOwogCiAJcHV0X2Ntc2cobXNnLCBTT0xfSVAsIFNDTV9TRUNVUklUWSwgc2VjbGVuLCBzZWNkYXRhKTsKKwlzZWN1cml0eV9yZWxlYXNlX3NlY2N0eChzZWNkYXRhLCBzZWNsZW4pOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29tcC5jIGIvbmV0L2lwdjQvaXBjb21wLmMKaW5kZXggYTBjMjhiMi4uNWJiOWM5ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb21wLmMKKysrIGIvbmV0L2lwdjQvaXBjb21wLmMKQEAgLTMyLDcgKzMyLDcgQEAKIAogc3RydWN0IGlwY29tcF90Zm1zIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKip0Zm1zOworCXN0cnVjdCBjcnlwdG9fY29tcCAqKnRmbXM7CiAJaW50IHVzZXJzOwogfTsKIApAQCAtNDYsNyArNDYsNyBAQAogCWludCBlcnIsIHBsZW4sIGRsZW47CiAJc3RydWN0IGlwY29tcF9kYXRhICppcGNkID0geC0+ZGF0YTsKIAl1OCAqc3RhcnQsICpzY3JhdGNoOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJc3RydWN0IGNyeXB0b19jb21wICp0Zm07CiAJaW50IGNwdTsKIAkKIAlwbGVuID0gc2tiLT5sZW47CkBAIC0xMDcsNyArMTA3LDcgQEAKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOwogCXN0cnVjdCBpcGNvbXBfZGF0YSAqaXBjZCA9IHgtPmRhdGE7CiAJdTggKnN0YXJ0LCAqc2NyYXRjaDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9fY29tcCAqdGZtOwogCWludCBjcHU7CiAJCiAJaWhsZW4gPSBpcGgtPmlobCAqIDQ7CkBAIC0zMDIsNyArMzAyLDcgQEAKIAlyZXR1cm4gc2NyYXRjaGVzOwogfQogCi1zdGF0aWMgdm9pZCBpcGNvbXBfZnJlZV90Zm1zKHN0cnVjdCBjcnlwdG9fdGZtICoqdGZtcykKK3N0YXRpYyB2b2lkIGlwY29tcF9mcmVlX3RmbXMoc3RydWN0IGNyeXB0b19jb21wICoqdGZtcykKIHsKIAlzdHJ1Y3QgaXBjb21wX3RmbXMgKnBvczsKIAlpbnQgY3B1OwpAQCAtMzI0LDI4ICszMjQsMjggQEAKIAkJcmV0dXJuOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gKnBlcl9jcHVfcHRyKHRmbXMsIGNwdSk7Ci0JCWNyeXB0b19mcmVlX3RmbSh0Zm0pOworCQlzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbSA9ICpwZXJfY3B1X3B0cih0Zm1zLCBjcHUpOworCQljcnlwdG9fZnJlZV9jb21wKHRmbSk7CiAJfQogCWZyZWVfcGVyY3B1KHRmbXMpOwogfQogCi1zdGF0aWMgc3RydWN0IGNyeXB0b190Zm0gKippcGNvbXBfYWxsb2NfdGZtcyhjb25zdCBjaGFyICphbGdfbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2NvbXAgKippcGNvbXBfYWxsb2NfdGZtcyhjb25zdCBjaGFyICphbGdfbmFtZSkKIHsKIAlzdHJ1Y3QgaXBjb21wX3RmbXMgKnBvczsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqKnRmbXM7CisJc3RydWN0IGNyeXB0b19jb21wICoqdGZtczsKIAlpbnQgY3B1OwogCiAJLyogVGhpcyBjYW4gYmUgYW55IHZhbGlkIENQVSBJRCBzbyB3ZSBkb24ndCBuZWVkIGxvY2tpbmcuICovCiAJY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmaXBjb21wX3RmbXNfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCQlzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbTsKIAogCQl0Zm1zID0gcG9zLT50Zm1zOwogCQl0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAotCQlpZiAoIXN0cmNtcChjcnlwdG9fdGZtX2FsZ19uYW1lKHRmbSksIGFsZ19uYW1lKSkgeworCQlpZiAoIXN0cmNtcChjcnlwdG9fY29tcF9uYW1lKHRmbSksIGFsZ19uYW1lKSkgewogCQkJcG9zLT51c2VycysrOwogCQkJcmV0dXJuIHRmbXM7CiAJCX0KQEAgLTM1OSwxMiArMzU5LDEzIEBACiAJSU5JVF9MSVNUX0hFQUQoJnBvcy0+bGlzdCk7CiAJbGlzdF9hZGQoJnBvcy0+bGlzdCwgJmlwY29tcF90Zm1zX2xpc3QpOwogCi0JcG9zLT50Zm1zID0gdGZtcyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3J5cHRvX3RmbSAqKTsKKwlwb3MtPnRmbXMgPSB0Zm1zID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBjcnlwdG9fY29tcCAqKTsKIAlpZiAoIXRmbXMpCiAJCWdvdG8gZXJyb3I7CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCAwKTsKKwkJc3RydWN0IGNyeXB0b19jb21wICp0Zm0gPSBjcnlwdG9fYWxsb2NfY29tcChhbGdfbmFtZSwgMCwKKwkJCQkJCQkgICAgQ1JZUFRPX0FMR19BU1lOQyk7CiAJCWlmICghdGZtKQogCQkJZ290byBlcnJvcjsKIAkJKnBlcl9jcHVfcHRyKHRmbXMsIGNwdSkgPSB0Zm07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19mdHAuYwppbmRleCBhMTlhMzNjLi4zN2ZhZmIxIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfZnRwLmMKQEAgLTQ2LDE0ICs0Niw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcG9ydHNbSVBfVlNfQVBQX01BWF9QT1JUU10gPSB7MjEsIDB9OwogbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCBpbnQsIE5VTEwsIDApOwotCi0vKgotICoJRGVidWcgbGV2ZWwKLSAqLwotI2lmZGVmIENPTkZJR19JUF9WU19ERUJVRwotc3RhdGljIGludCBkZWJ1Zz0wOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotI2VuZGlmCitNT0RVTEVfUEFSTV9ERVNDKHBvcnRzLCAiUG9ydHMgdG8gbW9uaXRvciBmb3IgRlRQIGNvbnRyb2wgY29tbWFuZHMiKTsKIAogCiAvKglEdW1teSB2YXJpYWJsZSAqLwpAQCAtMTc3LDcgKzE3MCw3IEBACiAJCQkJCSAgICZzdGFydCwgJmVuZCkgIT0gMSkKIAkJCXJldHVybiAxOwogCi0JCUlQX1ZTX0RCRygxLWRlYnVnLCAiUEFTViByZXNwb25zZSAoJXUuJXUuJXUuJXU6JWQpIC0+ICIKKwkJSVBfVlNfREJHKDcsICJQQVNWIHJlc3BvbnNlICgldS4ldS4ldS4ldTolZCkgLT4gIgogCQkJICAiJXUuJXUuJXUuJXU6JWQgZGV0ZWN0ZWRcbiIsCiAJCQkgIE5JUFFVQUQoZnJvbSksIG50b2hzKHBvcnQpLCBOSVBRVUFEKGNwLT5jYWRkciksIDApOwogCkBAIC0yODAsNyArMjczLDcgQEAKIAl3aGlsZSAoZGF0YSA8PSBkYXRhX2xpbWl0IC0gNikgewogCQlpZiAoc3RybmljbXAoZGF0YSwgIlBBU1ZcclxuIiwgNikgPT0gMCkgewogCQkJLyogUGFzc2l2ZSBtb2RlIG9uICovCi0JCQlJUF9WU19EQkcoMS1kZWJ1ZywgImdvdCBQQVNWIGF0ICV6ZCBvZiAlemRcbiIsCisJCQlJUF9WU19EQkcoNywgImdvdCBQQVNWIGF0ICV6ZCBvZiAlemRcbiIsCiAJCQkJICBkYXRhIC0gZGF0YV9zdGFydCwKIAkJCQkgIGRhdGFfbGltaXQgLSBkYXRhX3N0YXJ0KTsKIAkJCWNwLT5hcHBfZGF0YSA9ICZpcF92c19mdHBfcGFzdjsKQEAgLTMwMiw3ICsyOTUsNyBAQAogCQkJCSAgICZzdGFydCwgJmVuZCkgIT0gMSkKIAkJcmV0dXJuIDE7CiAKLQlJUF9WU19EQkcoMS1kZWJ1ZywgIlBPUlQgJXUuJXUuJXUuJXU6JWQgZGV0ZWN0ZWRcbiIsCisJSVBfVlNfREJHKDcsICJQT1JUICV1LiV1LiV1LiV1OiVkIGRldGVjdGVkXG4iLAogCQkgIE5JUFFVQUQodG8pLCBudG9ocyhwb3J0KSk7CiAKIAkvKiBQYXNzaXZlIG1vZGUgb2ZmICovCkBAIC0zMTEsNyArMzA0LDcgQEAKIAkvKgogCSAqIE5vdyB1cGRhdGUgb3IgY3JlYXRlIGEgY29ubmVjdGlvbiBlbnRyeSBmb3IgaXQKIAkgKi8KLQlJUF9WU19EQkcoMS1kZWJ1ZywgInByb3RvY29sICVzICV1LiV1LiV1LiV1OiVkICV1LiV1LiV1LiV1OiVkXG4iLAorCUlQX1ZTX0RCRyg3LCAicHJvdG9jb2wgJXMgJXUuJXUuJXUuJXU6JWQgJXUuJXUuJXUuJXU6JWRcbiIsCiAJCSAgaXBfdnNfcHJvdG9fbmFtZShpcGgtPnByb3RvY29sKSwKIAkJICBOSVBRVUFEKHRvKSwgbnRvaHMocG9ydCksIE5JUFFVQUQoY3AtPnZhZGRyKSwgMCk7CiAKQEAgLTM3MiwxMSArMzY1LDE3IEBACiAJZm9yIChpPTA7IGk8SVBfVlNfQVBQX01BWF9QT1JUUzsgaSsrKSB7CiAJCWlmICghcG9ydHNbaV0pCiAJCQljb250aW51ZTsKKwkJaWYgKHBvcnRzW2ldIDwgMCB8fCBwb3J0c1tpXSA+IDB4ZmZmZikgeworCQkJSVBfVlNfV0FSTklORygiaXBfdnNfZnRwOiBJZ25vcmluZyBpbnZhbGlkICIKKwkJCQkgICAgICAiY29uZmlndXJhdGlvbiBwb3J0WyVkXSA9ICVkXG4iLAorCQkJCSAgICAgIGksIHBvcnRzW2ldKTsKKwkJCWNvbnRpbnVlOworCQl9CiAJCXJldCA9IHJlZ2lzdGVyX2lwX3ZzX2FwcF9pbmMoYXBwLCBhcHAtPnByb3RvY29sLCBwb3J0c1tpXSk7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKLQkJSVBfVlNfREJHKDEtZGVidWcsICIlczogbG9hZGVkIHN1cHBvcnQgb24gcG9ydFslZF0gPSAlZFxuIiwKLQkJCSAgYXBwLT5uYW1lLCBpLCBwb3J0c1tpXSk7CisJCUlQX1ZTX0lORk8oIiVzOiBsb2FkZWQgc3VwcG9ydCBvbiBwb3J0WyVkXSA9ICVkXG4iLAorCQkgCSAgIGFwcC0+bmFtZSwgaSwgcG9ydHNbaV0pOwogCX0KIAogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA4MGM3M2NhLi44ZDFkN2E2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogCXN0cnVjdCBhcnB0X2VudHJ5ICplLCAqYmFjazsKIAljb25zdCBjaGFyICppbmRldiwgKm91dGRldjsKIAl2b2lkICp0YWJsZV9iYXNlOwotCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAKIAkvKiBBUlAgaGVhZGVyLCBwbHVzIDIgZGV2aWNlIGFkZHJlc3NlcywgcGx1cyAyIElQIGFkZHJlc3Nlcy4gICovCiAJaWYgKCFwc2tiX21heV9wdWxsKCgqcHNrYiksIChzaXplb2Yoc3RydWN0IGFycGhkcikgKwpAQCAtMjQ4LDYgKzI0OCw3IEBACiAJb3V0ZGV2ID0gb3V0ID8gb3V0LT5uYW1lIDogbnVsbGRldm5hbWU7CiAKIAlyZWFkX2xvY2tfYmgoJnRhYmxlLT5sb2NrKTsKKwlwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJdGFibGVfYmFzZSA9ICh2b2lkICopcHJpdmF0ZS0+ZW50cmllc1tzbXBfcHJvY2Vzc29yX2lkKCldOwogCWUgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSk7CiAJYmFjayA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwpAQCAtMTE3MCwyMSArMTE3MSwzNCBAQAogewogCWludCByZXQ7CiAKLQl4dF9wcm90b19pbml0KE5GX0FSUCk7CisJcmV0ID0geHRfcHJvdG9faW5pdChORl9BUlApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjE7CiAKIAkvKiBOb29uZSBlbHNlIHdpbGwgYmUgZG93bmluZyBzZW0gbm93LCBzbyB3ZSB3b24ndCBzbGVlcCAqLwotCXh0X3JlZ2lzdGVyX3RhcmdldCgmYXJwdF9zdGFuZGFyZF90YXJnZXQpOwotCXh0X3JlZ2lzdGVyX3RhcmdldCgmYXJwdF9lcnJvcl90YXJnZXQpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmYXJwdF9zdGFuZGFyZF90YXJnZXQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjI7CisJcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZhcnB0X2Vycm9yX3RhcmdldCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyMzsKIAogCS8qIFJlZ2lzdGVyIHNldHNvY2tvcHQgKi8KIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZhcnB0X3NvY2tvcHRzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkdXByaW50ZigiVW5hYmxlIHRvIHJlZ2lzdGVyIHNvY2tvcHRzLlxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjQ7CiAKIAlwcmludGsoImFycF90YWJsZXM6IChDKSAyMDAyIERhdmlkIFMuIE1pbGxlclxuIik7CiAJcmV0dXJuIDA7CisKK2VycjQ6CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmFycHRfZXJyb3JfdGFyZ2V0KTsKK2VycjM6CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmFycHRfc3RhbmRhcmRfdGFyZ2V0KTsKK2VycjI6CisJeHRfcHJvdG9fZmluaShORl9BUlApOworZXJyMToKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXJwX3RhYmxlc19maW5pKHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGxpbmsuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDMzODkxYmIuLjBkNGNjOTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jCkBAIC00MTUsMjEgKzQxNSwxOCBAQAogCQkJY2ItPmFyZ3NbMF0sICppZCk7CiAKIAlyZWFkX2xvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKKwlsYXN0ID0gKHN0cnVjdCBpcF9jb25udHJhY2sgKiljYi0+YXJnc1sxXTsKIAlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBpcF9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWxhc3QgPSAoc3RydWN0IGlwX2Nvbm50cmFjayAqKWNiLT5hcmdzWzFdOwogCQlsaXN0X2Zvcl9lYWNoX3ByZXYoaSwgJmlwX2Nvbm50cmFja19oYXNoW2NiLT5hcmdzWzBdXSkgewogCQkJaCA9IChzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlX2hhc2ggKikgaTsKIAkJCWlmIChESVJFQ1RJT04oaCkgIT0gSVBfQ1RfRElSX09SSUdJTkFMKQogCQkJCWNvbnRpbnVlOwogCQkJY3QgPSB0dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwotCQkJaWYgKGxhc3QgIT0gTlVMTCkgewotCQkJCWlmIChjdCA9PSBsYXN0KSB7Ci0JCQkJCWlwX2Nvbm50cmFja19wdXQobGFzdCk7Ci0JCQkJCWNiLT5hcmdzWzFdID0gMDsKLQkJCQkJbGFzdCA9IE5VTEw7Ci0JCQkJfSBlbHNlCisJCQlpZiAoY2ItPmFyZ3NbMV0pIHsKKwkJCQlpZiAoY3QgIT0gbGFzdCkKIAkJCQkJY29udGludWU7CisJCQkJY2ItPmFyZ3NbMV0gPSAwOwogCQkJfQogCQkJaWYgKGN0bmV0bGlua19maWxsX2luZm8oc2tiLCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgCWNiLT5ubGgtPm5sbXNnX3NlcSwKQEAgLTQ0MCwxNyArNDM3LDE3IEBACiAJCQkJZ290byBvdXQ7CiAJCQl9CiAJCX0KLQkJaWYgKGxhc3QgIT0gTlVMTCkgewotCQkJaXBfY29ubnRyYWNrX3B1dChsYXN0KTsKKwkJaWYgKGNiLT5hcmdzWzFdKSB7CiAJCQljYi0+YXJnc1sxXSA9IDA7CiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAl9CiBvdXQ6CiAJcmVhZF91bmxvY2tfYmgoJmlwX2Nvbm50cmFja19sb2NrKTsKKwlpZiAobGFzdCkKKwkJaXBfY29ubnRyYWNrX3B1dChsYXN0KTsKIAogCURFQlVHUCgibGVhdmluZywgbGFzdCBidWNrZXQ9JWx1IGlkPSV1XG4iLCBjYi0+YXJnc1swXSwgKmlkKTsKLQogCXJldHVybiBza2ItPmxlbjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMKaW5kZXggZmM4N2NlMC4uNGYyMjJkNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3NpcC5jCkBAIC00NDIsNyArNDQyLDcgQEAKIAkJc2lwW2ldLnR1cGxlLnNyYy51LnVkcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOwogCQlzaXBbaV0ubWFzay5zcmMudS51ZHAucG9ydCA9IDB4RkZGRjsKIAkJc2lwW2ldLm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKLQkJc2lwW2ldLm1heF9leHBlY3RlZCA9IDE7CisJCXNpcFtpXS5tYXhfZXhwZWN0ZWQgPSAyOwogCQlzaXBbaV0udGltZW91dCA9IDMgKiA2MDsgLyogMyBtaW51dGVzICovCiAJCXNpcFtpXS5tZSA9IFRISVNfTU9EVUxFOwogCQlzaXBbaV0uaGVscCA9IHNpcF9oZWxwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCmluZGV4IGZjNWJkZDUuLjA0ODUxNGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKQEAgLTIzMCw3ICsyMzAsNyBAQAogCWNvbnN0IGNoYXIgKmluZGV2LCAqb3V0ZGV2OwogCXZvaWQgKnRhYmxlX2Jhc2U7CiAJc3RydWN0IGlwdF9lbnRyeSAqZSwgKmJhY2s7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAogCS8qIEluaXRpYWxpemF0aW9uICovCiAJaXAgPSAoKnBza2IpLT5uaC5pcGg7CkBAIC0yNDcsNiArMjQ3LDcgQEAKIAogCXJlYWRfbG9ja19iaCgmdGFibGUtPmxvY2spOwogCUlQX05GX0FTU0VSVCh0YWJsZS0+dmFsaWRfaG9va3MgJiAoMSA8PCBob29rKSk7CisJcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCXRhYmxlX2Jhc2UgPSAodm9pZCAqKXByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAllID0gZ2V0X2VudHJ5KHRhYmxlX2Jhc2UsIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pOwogCkBAIC0yMjM5LDIyICsyMjQwLDM5IEBACiB7CiAJaW50IHJldDsKIAotCXh0X3Byb3RvX2luaXQoQUZfSU5FVCk7CisJcmV0ID0geHRfcHJvdG9faW5pdChBRl9JTkVUKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnIxOwogCiAJLyogTm9vbmUgZWxzZSB3aWxsIGJlIGRvd25pbmcgc2VtIG5vdywgc28gd2Ugd29uJ3Qgc2xlZXAgKi8KLQl4dF9yZWdpc3Rlcl90YXJnZXQoJmlwdF9zdGFuZGFyZF90YXJnZXQpOwotCXh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X2Vycm9yX3RhcmdldCk7Ci0JeHRfcmVnaXN0ZXJfbWF0Y2goJmljbXBfbWF0Y2hzdHJ1Y3QpOworCXJldCA9IHh0X3JlZ2lzdGVyX3RhcmdldCgmaXB0X3N0YW5kYXJkX3RhcmdldCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyMjsKKwlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmlwdF9lcnJvcl90YXJnZXQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjM7CisJcmV0ID0geHRfcmVnaXN0ZXJfbWF0Y2goJmljbXBfbWF0Y2hzdHJ1Y3QpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjQ7CiAKIAkvKiBSZWdpc3RlciBzZXRzb2Nrb3B0ICovCiAJcmV0ID0gbmZfcmVnaXN0ZXJfc29ja29wdCgmaXB0X3NvY2tvcHRzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkdXByaW50ZigiVW5hYmxlIHRvIHJlZ2lzdGVyIHNvY2tvcHRzLlxuIik7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjU7CiAKIAlwcmludGsoImlwX3RhYmxlczogKEMpIDIwMDAtMjAwNiBOZXRmaWx0ZXIgQ29yZSBUZWFtXG4iKTsKIAlyZXR1cm4gMDsKKworZXJyNToKKwl4dF91bnJlZ2lzdGVyX21hdGNoKCZpY21wX21hdGNoc3RydWN0KTsKK2VycjQ6CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwdF9lcnJvcl90YXJnZXQpOworZXJyMzoKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmaXB0X3N0YW5kYXJkX3RhcmdldCk7CitlcnIyOgorCXh0X3Byb3RvX2ZpbmkoQUZfSU5FVCk7CitlcnIxOgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcF90YWJsZXNfZmluaSh2b2lkKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYwppbmRleCBkN2RkN2ZlLi5kNDZmZDY3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9VTE9HLmMKQEAgLTExNSw2ICsxMTUsMTEgQEAKIAkJZGVsX3RpbWVyKCZ1Yi0+dGltZXIpOwogCX0KIAorCWlmICghdWItPnNrYikgeworCQlERUJVR1AoImlwdF9VTE9HOiB1bG9nX3NlbmQ6IG5vdGhpbmcgdG8gc2VuZFxuIik7CisJCXJldHVybjsKKwl9CisKIAkvKiBsYXN0IG5sbXNnIG5lZWRzIE5MTVNHX0RPTkUgKi8KIAlpZiAodWItPnFsZW4gPiAxKQogCQl1Yi0+bGFzdG5saC0+bmxtc2dfdHlwZSA9IE5MTVNHX0RPTkU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYwppbmRleCA5Mjk4MGFiLi4zYmQyMzY4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKQEAgLTQ1NCwxNSArNDU0LDEyIEBACiAJCWRoLT5yYXRlaW5mby5jcmVkaXRfY2FwID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnICogCiAJCQkJCQkJaGluZm8tPmNmZy5idXJzdCk7CiAJCWRoLT5yYXRlaW5mby5jb3N0ID0gdXNlcjJjcmVkaXRzKGhpbmZvLT5jZmcuYXZnKTsKLQotCQlzcGluX3VubG9ja19iaCgmaGluZm8tPmxvY2spOwotCQlyZXR1cm4gMTsKKwl9IGVsc2UgeworCQkvKiB1cGRhdGUgZXhwaXJhdGlvbiB0aW1lb3V0ICovCisJCWRoLT5leHBpcmVzID0gbm93ICsgbXNlY3NfdG9famlmZmllcyhoaW5mby0+Y2ZnLmV4cGlyZSk7CisJCXJhdGVpbmZvX3JlY2FsYyhkaCwgbm93KTsKIAl9CiAKLQkvKiB1cGRhdGUgZXhwaXJhdGlvbiB0aW1lb3V0ICovCi0JZGgtPmV4cGlyZXMgPSBub3cgKyBtc2Vjc190b19qaWZmaWVzKGhpbmZvLT5jZmcuZXhwaXJlKTsKLQotCXJhdGVpbmZvX3JlY2FsYyhkaCwgbm93KTsKIAlpZiAoZGgtPnJhdGVpbmZvLmNyZWRpdCA+PSBkaC0+cmF0ZWluZm8uY29zdCkgewogCQkvKiBXZSdyZSB1bmRlcmxpbWl0LiAqLwogCQlkaC0+cmF0ZWluZm8uY3JlZGl0IC09IGRoLT5yYXRlaW5mby5jb3N0OwpAQCAtNTA4LDYgKzUwNSw5IEBACiAJaWYgKCFyLT5jZmcuZXhwaXJlKQogCQlyZXR1cm4gMDsKIAorCWlmIChyLT5uYW1lW3NpemVvZihyLT5uYW1lKSAtIDFdICE9ICdcMCcpCisJCXJldHVybiAwOworCiAJLyogVGhpcyBpcyB0aGUgYmVzdCB3ZSd2ZSBnb3Q6IFdlIGNhbm5vdCByZWxlYXNlIGFuZCByZS1ncmFiIGxvY2ssCiAJICogc2luY2UgY2hlY2tlbnRyeSgpIGlzIGNhbGxlZCBiZWZvcmUgaXBfdGFibGVzLmMgZ3JhYnMgaXB0X211dGV4LiAgCiAJICogV2UgYWxzbyBjYW5ub3QgZ3JhYiB0aGUgaGFzaHRhYmxlIHNwaW5sb2NrLCBzaW5jZSBodGFibGVfY3JlYXRlIHdpbGwgCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yb3V0ZS5jIGIvbmV0L2lwdjQvcm91dGUuYwppbmRleCAyZGM2ZGJiMi4uYjg3M2NiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xMDQsNiArMTA0LDcgQEAKICNpbmNsdWRlIDxuZXQvaWNtcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAjaW5jbHVkZSA8bmV0L2lwX21wX2FsZy5oPgorI2luY2x1ZGUgPG5ldC9uZXRldmVudC5oPgogI2lmZGVmIENPTkZJR19TWVNDVEwKICNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNlbmRpZgpAQCAtMTEyNSw2ICsxMTI2LDcgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydGgsICoqcnRocDsKIAl1MzIgIHNrZXlzWzJdID0geyBzYWRkciwgMCB9OwogCWludCAgaWtleXNbMl0gPSB7IGRldi0+aWZpbmRleCwgMCB9OworCXN0cnVjdCBuZXRldmVudF9yZWRpcmVjdCBuZXRldmVudDsKIAogCWlmICghaW5fZGV2KQogCQlyZXR1cm47CkBAIC0xMjE2LDYgKzEyMTgsMTEgQEAKIAkJCQkJcnRfZHJvcChydCk7CiAJCQkJCWdvdG8gZG9fbmV4dDsKIAkJCQl9CisJCQkJCisJCQkJbmV0ZXZlbnQub2xkID0gJnJ0aC0+dS5kc3Q7CisJCQkJbmV0ZXZlbnQubmV3ID0gJnJ0LT51LmRzdDsKKwkJCQljYWxsX25ldGV2ZW50X25vdGlmaWVycyhORVRFVkVOVF9SRURJUkVDVCwgCisJCQkJCQkgICAgICAgICZuZXRldmVudCk7CiAKIAkJCQlydF9kZWwoaGFzaCwgcnRoKTsKIAkJCQlpZiAoIXJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0LCAmcnQpKQpAQCAtMTQ1Miw2ICsxNDU5LDcgQEAKIAkJfQogCQlkc3QtPm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBtdHU7CiAJCWRzdF9zZXRfZXhwaXJlcyhkc3QsIGlwX3J0X210dV9leHBpcmVzKTsKKwkJY2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfUE1UVV9VUERBVEUsIGRzdCk7CiAJfQogfQogCkBAIC0zMTQ5LDcgKzMxNTcsNyBAQAogCQkJCQlyaGFzaF9lbnRyaWVzLAogCQkJCQkobnVtX3BoeXNwYWdlcyA+PSAxMjggKiAxMDI0KSA/CiAJCQkJCTE1IDogMTcsCi0JCQkJCUhBU0hfSElHSE1FTSwKKwkJCQkJMCwKIAkJCQkJJnJ0X2hhc2hfbG9nLAogCQkJCQkmcnRfaGFzaF9tYXNrLAogCQkJCQkwKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcC5jIGIvbmV0L2lwdjQvdGNwLmMKaW5kZXggZjZhMmQ5Mi4uOTM0Mzk2YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwLmMKKysrIGIvbmV0L2lwdjQvdGNwLmMKQEAgLTExMzIsNyArMTEzMiw3IEBACiAJdHAtPnVjb3B5LmRtYV9jaGFuID0gTlVMTDsKIAlwcmVlbXB0X2Rpc2FibGUoKTsKIAlpZiAoKGxlbiA+IHN5c2N0bF90Y3BfZG1hX2NvcHlicmVhaykgJiYgIShmbGFncyAmIE1TR19QRUVLKSAmJgotCSAgICAhc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSAmJiBfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YS5uZXRfZG1hKSkgeworCSAgICAhc3lzY3RsX3RjcF9sb3dfbGF0ZW5jeSAmJiBfX2dldF9jcHVfdmFyKHNvZnRuZXRfZGF0YSkubmV0X2RtYSkgewogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXRwLT51Y29weS5waW5uZWRfbGlzdCA9IGRtYV9waW5faW92ZWNfcGFnZXMobXNnLT5tc2dfaW92LCBsZW4pOwogCX0gZWxzZQpAQCAtMTY1OSw3ICsxNjU5LDggQEAKIAkJCWNvbnN0IGludCB0bW8gPSB0Y3BfZmluX3RpbWUoc2spOwogCiAJCQlpZiAodG1vID4gVENQX1RJTUVXQUlUX0xFTikgewotCQkJCWluZXRfY3NrX3Jlc2V0X2tlZXBhbGl2ZV90aW1lcihzaywgdGNwX2Zpbl90aW1lKHNrKSk7CisJCQkJaW5ldF9jc2tfcmVzZXRfa2VlcGFsaXZlX3RpbWVyKHNrLAorCQkJCQkJdG1vIC0gVENQX1RJTUVXQUlUX0xFTik7CiAJCQl9IGVsc2UgewogCQkJCXRjcF90aW1lX3dhaXQoc2ssIFRDUF9GSU5fV0FJVDIsIHRtbyk7CiAJCQkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfY29uZy5jIGIvbmV0L2lwdjQvdGNwX2NvbmcuYwppbmRleCA1NzY1ZjlkLi43ZmYyZTQyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfY29uZy5jCisrKyBiL25ldC9pcHY0L3RjcF9jb25nLmMKQEAgLTE4OSw3ICsxODksNyBAQAogCQkJcmV0dXJuOwogCiAJCS8qIFdlIE1BWSBpbmNyZWFzZSBieSAyIGlmIGRpc2NvdmVyZWQgZGVsYXllZCBhY2sgKi8KLQkJaWYgKHN5c2N0bF90Y3BfYWJjID4gMSAmJiB0cC0+Ynl0ZXNfYWNrZWQgPiAyKnRwLT5tc3NfY2FjaGUpIHsKKwkJaWYgKHN5c2N0bF90Y3BfYWJjID4gMSAmJiB0cC0+Ynl0ZXNfYWNrZWQgPj0gMip0cC0+bXNzX2NhY2hlKSB7CiAJCQlpZiAodHAtPnNuZF9jd25kIDwgdHAtPnNuZF9jd25kX2NsYW1wKQogCQkJCXRwLT5zbmRfY3duZCsrOwogCQl9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaW5wdXQuYyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCmluZGV4IDczOGRhZDkuLjE1OWZhM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pbnB1dC5jCisrKyBiL25ldC9pcHY0L3RjcF9pbnB1dC5jCkBAIC04OSw3ICs4OSw3IEBACiBpbnQgc3lzY3RsX3RjcF9ub21ldHJpY3Nfc2F2ZTsKIAogaW50IHN5c2N0bF90Y3BfbW9kZXJhdGVfcmN2YnVmID0gMTsKLWludCBzeXNjdGxfdGNwX2FiYyA9IDE7CitpbnQgc3lzY3RsX3RjcF9hYmM7CiAKICNkZWZpbmUgRkxBR19EQVRBCQkweDAxIC8qIEluY29taW5nIGZyYW1lIGNvbnRhaW5lZCBkYXRhLgkJKi8KICNkZWZpbmUgRkxBR19XSU5fVVBEQVRFCQkweDAyIC8qIEluY29taW5nIEFDSyB3YXMgYSB3aW5kb3cgdXBkYXRlLgkqLwpAQCAtMjUwNSw4ICsyNTA1LDEzIEBACiAJaWYgKGJlZm9yZShhY2ssIHByaW9yX3NuZF91bmEpKQogCQlnb3RvIG9sZF9hY2s7CiAKLQlpZiAoc3lzY3RsX3RjcF9hYmMgJiYgaWNzay0+aWNza19jYV9zdGF0ZSA8IFRDUF9DQV9DV1IpCi0JCXRwLT5ieXRlc19hY2tlZCArPSBhY2sgLSBwcmlvcl9zbmRfdW5hOworCWlmIChzeXNjdGxfdGNwX2FiYykgeworCQlpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA8IFRDUF9DQV9DV1IpCisJCQl0cC0+Ynl0ZXNfYWNrZWQgKz0gYWNrIC0gcHJpb3Jfc25kX3VuYTsKKwkJZWxzZSBpZiAoaWNzay0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfTG9zcykKKwkJCS8qIHdlIGFzc3VtZSBqdXN0IG9uZSBzZWdtZW50IGxlZnQgbmV0d29yayAqLworCQkJdHAtPmJ5dGVzX2Fja2VkICs9IG1pbihhY2sgLSBwcmlvcl9zbmRfdW5hLCB0cC0+bXNzX2NhY2hlKTsKKwl9CiAKIAlpZiAoIShmbGFnJkZMQUdfU0xPV1BBVEgpICYmIGFmdGVyKGFjaywgcHJpb3Jfc25kX3VuYSkpIHsKIAkJLyogV2luZG93IGlzIGNvbnN0YW50LCBwdXJlIGZvcndhcmQgYWR2YW5jZS4KQEAgLTM1NDEsNyArMzU0Niw4IEBACiAJaWYgKGluZXRfY3NrKHNrKS0+aWNza19jYV9zdGF0ZSA9PSBUQ1BfQ0FfT3BlbiAmJgogCSAgICBzay0+c2tfc29ja2V0ICYmICF0ZXN0X2JpdChTT0NLX05PU1BBQ0UsICZzay0+c2tfc29ja2V0LT5mbGFncykpIHsKIAkJLyogTGltaXRlZCBieSBhcHBsaWNhdGlvbiBvciByZWNlaXZlciB3aW5kb3cuICovCi0JCXUzMiB3aW5fdXNlZCA9IG1heCh0cC0+c25kX2N3bmRfdXNlZCwgMlUpOworCQl1MzIgaW5pdF93aW4gPSB0Y3BfaW5pdF9jd25kKHRwLCBfX3NrX2RzdF9nZXQoc2spKTsKKwkJdTMyIHdpbl91c2VkID0gbWF4KHRwLT5zbmRfY3duZF91c2VkLCBpbml0X3dpbik7CiAJCWlmICh3aW5fdXNlZCA8IHRwLT5zbmRfY3duZCkgewogCQkJdHAtPnNuZF9zc3RocmVzaCA9IHRjcF9jdXJyZW50X3NzdGhyZXNoKHNrKTsKIAkJCXRwLT5zbmRfY3duZCA9ICh0cC0+c25kX2N3bmQgKyB3aW5fdXNlZCkgPj4gMTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9pcHY0LmMgYi9uZXQvaXB2NC90Y3BfaXB2NC5jCmluZGV4IGY2ZjM5ZTguLjRiMDRjM2UgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9pcHY0LmMKKysrIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwpAQCAtNDM4LDcgKzQzOCw2IEBACiAJCQkgICAgICAgSXQgY2FuIGYuZS4gaWYgU1lOcyBjcm9zc2VkLgogCQkJICAgICAqLwogCQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKLQkJCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9BVFRFTVBURkFJTFMpOwogCQkJc2stPnNrX2VyciA9IGVycjsKIAogCQkJc2stPnNrX2Vycm9yX3JlcG9ydChzayk7CkBAIC04NzQsNyArODczLDYgQEAKIGRyb3BfYW5kX2ZyZWU6CiAJcmVxc2tfZnJlZShyZXEpOwogZHJvcDoKLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfQVRURU1QVEZBSUxTKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2xwLmMgYi9uZXQvaXB2NC90Y3BfbHAuYwppbmRleCAxZjk3N2I2Li40OGYyOGQ2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfbHAuYworKysgYi9uZXQvaXB2NC90Y3BfbHAuYwpAQCAtMywxMyArMyw4IEBACiAgKgogICogVENQIExvdyBQcmlvcml0eSBpcyBhIGRpc3RyaWJ1dGVkIGFsZ29yaXRobSB3aG9zZSBnb2FsIGlzIHRvIHV0aWxpemUgb25seQogICogICB0aGUgZXhjZXNzIG5ldHdvcmsgYmFuZHdpZHRoIGFzIGNvbXBhcmVkIHRvIHRoZSBgYGZhaXIgc2hhcmVgYCBvZgotICogICBiYW5kd2lkdGggYXMgdGFyZ2V0ZWQgYnkgVENQLiBBdmFpbGFibGUgZnJvbToKLSAqICAgICBodHRwOi8vd3d3LmVjZS5yaWNlLmVkdS9+YWt1em1hL0RvYy9ha3V6bWEvVENQLUxQLnBkZgorICogICBiYW5kd2lkdGggYXMgdGFyZ2V0ZWQgYnkgVENQLgogICoKLSAqIE9yaWdpbmFsIEF1dGhvcjoKLSAqICAgQWxla3NhbmRhciBLdXptYW5vdmljIDxha3V6bWFAbm9ydGh3ZXN0ZXJuLmVkdT4KLSAqCi0gKiBTZWUgaHR0cDovL3d3dy1lY2UucmljZS5lZHUvbmV0d29ya3MvVENQLUxQLyBmb3IgdGhlaXIgaW1wbGVtZW50YXRpb24uCiAgKiBBcyBvZiAyLjYuMTMsIExpbnV4IHN1cHBvcnRzIHBsdWdnYWJsZSBjb25nZXN0aW9uIGNvbnRyb2wgYWxnb3JpdGhtcy4KICAqIER1ZSB0byB0aGUgbGltaXRhdGlvbiBvZiB0aGUgQVBJLCB3ZSB0YWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBmcm9tCiAgKiB0aGUgb3JpZ2luYWwgVENQLUxQIGltcGxlbWVudGF0aW9uOgpAQCAtMjQsMTEgKzE5LDIwIEBACiAgKiAgIG8gT1dEIGlzIGhhbmRsZWQgaW4gcmVsYXRpdmUgZm9ybWF0LCB3aGVyZSBsb2NhbCB0aW1lIHN0YW1wIHdpbGwgaW4KICAqICAgICB0Y3BfdGltZV9zdGFtcCBmb3JtYXQuCiAgKgotICogUG9ydCBmcm9tIDIuNC4xOSB0byAyLjYuMTYgYXMgbW9kdWxlIGJ5OgotICogICBXb25nIEhvaSBTaW5nIEVkaXNvbiA8aHN3b25nM2lAZ21haWwuY29tPgotICogICBIdW5nIEhpbmcgTHVuIDxobGh1bmczaUBnbWFpbC5jb20+CisgKiBPcmlnaW5hbCBBdXRob3I6CisgKiAgIEFsZWtzYW5kYXIgS3V6bWFub3ZpYyA8YWt1em1hQG5vcnRod2VzdGVybi5lZHU+CisgKiBBdmFpbGFibGUgZnJvbToKKyAqICAgaHR0cDovL3d3dy5lY2UucmljZS5lZHUvfmFrdXptYS9Eb2MvYWt1em1hL1RDUC1MUC5wZGYKKyAqIE9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGZvciAyLjQuMTk6CisgKiAgIGh0dHA6Ly93d3ctZWNlLnJpY2UuZWR1L25ldHdvcmtzL1RDUC1MUC8KICAqCi0gKiBWZXJzaW9uOiAkSWQ6IHRjcF9scC5jLHYgMS4yMiAyMDA2LTA1LTAyIDE4OjE4OjE5IGhzd29uZzNpIEV4cCAkCisgKiAyLjYueCBtb2R1bGUgQXV0aG9yczoKKyAqICAgV29uZyBIb2kgU2luZywgRWRpc29uIDxoc3dvbmczaUBnbWFpbC5jb20+CisgKiAgIEh1bmcgSGluZyBMdW4sIE1pa2UgPGhsaHVuZzNpQGdtYWlsLmNvbT4KKyAqIFNvdXJjZUZvcmdlIHByb2plY3QgcGFnZToKKyAqICAgaHR0cDovL3RjcC1scC1tb2Quc291cmNlZm9yZ2UubmV0LworICoKKyAqIFZlcnNpb246ICRJZDogdGNwX2xwLmMsdiAxLjI0IDIwMDYvMDkvMDUgMjA6MjI6NTMgaHN3b25nM2kgRXhwICQKICAqLwogCiAjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CkBAIC0xNTMsMTYgKzE1NywxOSBAQAogCWlmIChtIDwgMCkKIAkJbSA9IC1tOwogCi0JaWYgKHJoeiAhPSAwKSB7CisJaWYgKHJoeiA+IDApIHsKIAkJbSAtPSByaHogPj4gNjsJLyogbSBpcyBub3cgZXJyb3IgaW4gcmVtb3RlIEhaIGVzdCAqLwogCQlyaHogKz0gbTsJLyogNjMvNjQgb2xkICsgMS82NCBuZXcgKi8KIAl9IGVsc2UKIAkJcmh6ID0gbSA8PCA2OwogCi0JLyogcmVjb3JkIHRpbWUgZm9yIHN1Y2Nlc3NmdWwgcmVtb3RlIEhaIGNhbGMgKi8KLQlscC0+ZmxhZyB8PSBMUF9WQUxJRF9SSFo7Ci0KICBvdXQ6CisJLyogcmVjb3JkIHRpbWUgZm9yIHN1Y2Nlc3NmdWwgcmVtb3RlIEhaIGNhbGMgKi8KKwlpZiAocmh6ID4gMCkKKwkJbHAtPmZsYWcgfD0gTFBfVkFMSURfUkhaOworCWVsc2UKKwkJbHAtPmZsYWcgJj0gfkxQX1ZBTElEX1JIWjsKKwogCS8qIHJlY29yZCByZWZlcmVuY2UgdGltZSBzdGFtcCAqLwogCWxwLT5yZW1vdGVfcmVmX3RpbWUgPSB0cC0+cnhfb3B0LnJjdl90c3ZhbDsKIAlscC0+bG9jYWxfcmVmX3RpbWUgPSB0cC0+cnhfb3B0LnJjdl90c2VjcjsKQEAgLTMzMyw2ICszNDAsNiBAQAogbW9kdWxlX2luaXQodGNwX2xwX3JlZ2lzdGVyKTsKIG1vZHVsZV9leGl0KHRjcF9scF91bnJlZ2lzdGVyKTsKIAotTU9EVUxFX0FVVEhPUigiV29uZyBIb2kgU2luZyBFZGlzb24sIEh1bmcgSGluZyBMdW4iKTsKK01PRFVMRV9BVVRIT1IoIldvbmcgSG9pIFNpbmcgRWRpc29uLCBIdW5nIEhpbmcgTHVuIE1pa2UiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiVENQIExvdyBQcmlvcml0eSIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jIGIvbmV0L2lwdjQvdGNwX21pbmlzb2Nrcy5jCmluZGV4IDBjY2I3Y2IuLjYyNGUyYjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9taW5pc29ja3MuYworKysgYi9uZXQvaXB2NC90Y3BfbWluaXNvY2tzLmMKQEAgLTU4OSw4ICs1ODksMTAgQEAKIAkJLyogUkZDNzkzOiAic2Vjb25kIGNoZWNrIHRoZSBSU1QgYml0IiBhbmQKIAkJICoJICAgImZvdXJ0aCwgY2hlY2sgdGhlIFNZTiBiaXQiCiAJCSAqLwotCQlpZiAoZmxnICYgKFRDUF9GTEFHX1JTVHxUQ1BfRkxBR19TWU4pKQorCQlpZiAoZmxnICYgKFRDUF9GTEFHX1JTVHxUQ1BfRkxBR19TWU4pKSB7CisJCQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfQVRURU1QVEZBSUxTKTsKIAkJCWdvdG8gZW1icnlvbmljX3Jlc2V0OworCQl9CiAKIAkJLyogQUNLIHNlcXVlbmNlIHZlcmlmaWVkIGFib3ZlLCBqdXN0IG1ha2Ugc3VyZSBBQ0sgaXMKIAkJICogc2V0LiAgSWYgQUNLIG5vdCBzZXQsIGp1c3Qgc2lsZW50bHkgZHJvcCB0aGUgcGFja2V0LgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDVjMDhlYTIuLmI0ZjNmZmUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTIwMSw2ICsyMDEsNyBAQAogCQkgKiBTZWUgUkZDMTMyMyBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIGxpbWl0IHRvIDE0IAogCQkgKi8KIAkJc3BhY2UgPSBtYXhfdCh1MzIsIHN5c2N0bF90Y3Bfcm1lbVsyXSwgc3lzY3RsX3JtZW1fbWF4KTsKKwkJc3BhY2UgPSBtaW5fdCh1MzIsIHNwYWNlLCAqd2luZG93X2NsYW1wKTsKIAkJd2hpbGUgKHNwYWNlID4gNjU1MzUgJiYgKCpyY3Zfd3NjYWxlKSA8IDE0KSB7CiAJCQlzcGFjZSA+Pj0gMTsKIAkJCSgqcmN2X3dzY2FsZSkrKzsKQEAgLTQ2Niw3ICs0NjcsOCBAQAogCWlmIChza2ItPmxlbiAhPSB0Y3BfaGVhZGVyX3NpemUpCiAJCXRjcF9ldmVudF9kYXRhX3NlbnQodHAsIHNrYiwgc2spOwogCi0JVENQX0lOQ19TVEFUUyhUQ1BfTUlCX09VVFNFR1MpOworCWlmIChhZnRlcih0Y2ItPmVuZF9zZXEsIHRwLT5zbmRfbnh0KSB8fCB0Y2ItPnNlcSA9PSB0Y2ItPmVuZF9zZXEpCisJCVRDUF9JTkNfU1RBVFMoVENQX01JQl9PVVRTRUdTKTsKIAogCWVyciA9IGljc2stPmljc2tfYWZfb3BzLT5xdWV1ZV94bWl0KHNrYiwgMCk7CiAJaWYgKGxpa2VseShlcnIgPD0gMCkpCkBAIC0yMTU3LDEwICsyMTU5LDkgQEAKIAlza2Jfc2hpbmZvKGJ1ZmYpLT5nc29fc2l6ZSA9IDA7CiAJc2tiX3NoaW5mbyhidWZmKS0+Z3NvX3R5cGUgPSAwOwogCWJ1ZmYtPmNzdW0gPSAwOworCXRwLT5zbmRfbnh0ID0gdHAtPndyaXRlX3NlcTsKIAlUQ1BfU0tCX0NCKGJ1ZmYpLT5zZXEgPSB0cC0+d3JpdGVfc2VxKys7CiAJVENQX1NLQl9DQihidWZmKS0+ZW5kX3NlcSA9IHRwLT53cml0ZV9zZXE7Ci0JdHAtPnNuZF9ueHQgPSB0cC0+d3JpdGVfc2VxOwotCXRwLT5wdXNoZWRfc2VxID0gdHAtPndyaXRlX3NlcTsKIAogCS8qIFNlbmQgaXQgb2ZmLiAqLwogCVRDUF9TS0JfQ0IoYnVmZiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKQEAgLTIxNzAsNiArMjE3MSwxMiBAQAogCXNrX2NoYXJnZV9za2Ioc2ssIGJ1ZmYpOwogCXRwLT5wYWNrZXRzX291dCArPSB0Y3Bfc2tiX3Bjb3VudChidWZmKTsKIAl0Y3BfdHJhbnNtaXRfc2tiKHNrLCBidWZmLCAxLCBHRlBfS0VSTkVMKTsKKworCS8qIFdlIGNoYW5nZSB0cC0+c25kX254dCBhZnRlciB0aGUgdGNwX3RyYW5zbWl0X3NrYigpIGNhbGwKKwkgKiBpbiBvcmRlciB0byBtYWtlIHRoaXMgcGFja2V0IGdldCBjb3VudGVkIGluIHRjcE91dFNlZ3MuCisJICovCisJdHAtPnNuZF9ueHQgPSB0cC0+d3JpdGVfc2VxOworCXRwLT5wdXNoZWRfc2VxID0gdHAtPndyaXRlX3NlcTsKIAlUQ1BfSU5DX1NUQVRTKFRDUF9NSUJfQUNUSVZFT1BFTlMpOwogCiAJLyogVGltZXIgZm9yIHJlcGVhdGluZyB0aGUgU1lOIHVudGlsIGFuIGFuc3dlci4gKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9wcm9iZS5jIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKaW5kZXggZDdkNTE3YS4uZGFiMzdkMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX3Byb2JlLmMKKysrIGIvbmV0L2lwdjQvdGNwX3Byb2JlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogc3RhdGljIHNzaXplX3QgdGNwcHJvYmVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgICAgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQogewotCWludCBlcnJvciA9IDAsIGNudDsKKwlpbnQgZXJyb3IgPSAwLCBjbnQgPSAwOwogCXVuc2lnbmVkIGNoYXIgKnRidWY7CiAKIAlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQpAQCAtMTMwLDExICsxMzAsMTIgQEAKIAllcnJvciA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh0Y3B3LndhaXQsCiAJCQkJCSBfX2tmaWZvX2xlbih0Y3B3LmZpZm8pICE9IDApOwogCWlmIChlcnJvcikKLQkJcmV0dXJuIGVycm9yOworCQlnb3RvIG91dF9mcmVlOwogCiAJY250ID0ga2ZpZm9fZ2V0KHRjcHcuZmlmbywgdGJ1ZiwgbGVuKTsKIAllcnJvciA9IGNvcHlfdG9fdXNlcihidWYsIHRidWYsIGNudCk7CiAKK291dF9mcmVlOgogCXZmcmVlKHRidWYpOwogCiAJcmV0dXJuIGVycm9yID8gZXJyb3IgOiBjbnQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9LY29uZmlnIGIvbmV0L2lwdjYvS2NvbmZpZwppbmRleCBlOTIzZDRkLi4wYmEwNmMwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9LY29uZmlnCisrKyBiL25ldC9pcHY2L0tjb25maWcKQEAgLTc3LDYgKzc3LDcgQEAKIAlzZWxlY3QgQ1JZUFRPCiAJc2VsZWN0IENSWVBUT19ITUFDCiAJc2VsZWN0IENSWVBUT19NRDUKKwlzZWxlY3QgQ1JZUFRPX0NCQwogCXNlbGVjdCBDUllQVE9fU0hBMQogCXNlbGVjdCBDUllQVE9fREVTCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMjMxNmE0My4uYzc4NTJiMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC01NzgsNiArNTc4LDggQEAKIAlpZmEtPmZsYWdzID0gZmxhZ3MgfCBJRkFfRl9URU5UQVRJVkU7CiAJaWZhLT5jc3RhbXAgPSBpZmEtPnRzdGFtcCA9IGppZmZpZXM7CiAKKwlpZmEtPnJ0ID0gcnQ7CisKIAlpZmEtPmlkZXYgPSBpZGV2OwogCWluNl9kZXZfaG9sZChpZGV2KTsKIAkvKiBGb3IgY2FsbGVyICovCkBAIC02MDMsOCArNjA1LDYgQEAKIAl9CiAjZW5kaWYKIAotCWlmYS0+cnQgPSBydDsKLQogCWluNl9pZmFfaG9sZChpZmEpOwogCXdyaXRlX3VubG9jaygmaWRldi0+bG9jayk7CiBvdXQyOgpAQCAtMTg2OSwxNSArMTg2OSwyMSBAQAogLyoKICAqCU1hbnVhbCBjb25maWd1cmF0aW9uIG9mIGFkZHJlc3Mgb24gYW4gaW50ZXJmYWNlCiAgKi8KLXN0YXRpYyBpbnQgaW5ldDZfYWRkcl9hZGQoaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqcGZ4LCBpbnQgcGxlbikKK3N0YXRpYyBpbnQgaW5ldDZfYWRkcl9hZGQoaW50IGlmaW5kZXgsIHN0cnVjdCBpbjZfYWRkciAqcGZ4LCBpbnQgcGxlbiwKKwkJCSAgX191MzIgcHJlZmVyZWRfbGZ0LCBfX3UzMiB2YWxpZF9sZnQpCiB7CiAJc3RydWN0IGluZXQ2X2lmYWRkciAqaWZwOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlfX3U4IGlmYV9mbGFncyA9IDA7CiAJaW50IHNjb3BlOwogCiAJQVNTRVJUX1JUTkwoKTsKIAkKKwkvKiBjaGVjayB0aGUgbGlmZXRpbWUgKi8KKwlpZiAoIXZhbGlkX2xmdCB8fCBwcmVmZXJlZF9sZnQgPiB2YWxpZF9sZnQpCisJCXJldHVybiAtRUlOVkFMOworCiAJaWYgKChkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoaWZpbmRleCkpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCQpAQCAtMTg4OSwxMCArMTg5NSwyOSBAQAogCiAJc2NvcGUgPSBpcHY2X2FkZHJfc2NvcGUocGZ4KTsKIAotCWlmcCA9IGlwdjZfYWRkX2FkZHIoaWRldiwgcGZ4LCBwbGVuLCBzY29wZSwgSUZBX0ZfUEVSTUFORU5UKTsKKwlpZiAodmFsaWRfbGZ0ID09IElORklOSVRZX0xJRkVfVElNRSkKKwkJaWZhX2ZsYWdzIHw9IElGQV9GX1BFUk1BTkVOVDsKKwllbHNlIGlmICh2YWxpZF9sZnQgPj0gMHg3RkZGRkZGRi9IWikKKwkJdmFsaWRfbGZ0ID0gMHg3RkZGRkZGRi9IWjsKKworCWlmIChwcmVmZXJlZF9sZnQgPT0gMCkKKwkJaWZhX2ZsYWdzIHw9IElGQV9GX0RFUFJFQ0FURUQ7CisJZWxzZSBpZiAoKHByZWZlcmVkX2xmdCA+PSAweDdGRkZGRkZGL0haKSAmJgorCQkgKHByZWZlcmVkX2xmdCAhPSBJTkZJTklUWV9MSUZFX1RJTUUpKQorCQlwcmVmZXJlZF9sZnQgPSAweDdGRkZGRkZGL0haOworCisJaWZwID0gaXB2Nl9hZGRfYWRkcihpZGV2LCBwZngsIHBsZW4sIHNjb3BlLCBpZmFfZmxhZ3MpOworCiAJaWYgKCFJU19FUlIoaWZwKSkgeworCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CisJCWlmcC0+dmFsaWRfbGZ0ID0gdmFsaWRfbGZ0OworCQlpZnAtPnByZWZlcmVkX2xmdCA9IHByZWZlcmVkX2xmdDsKKwkJaWZwLT50c3RhbXAgPSBqaWZmaWVzOworCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKKwogCQlhZGRyY29uZl9kYWRfc3RhcnQoaWZwLCAwKTsKIAkJaW42X2lmYV9wdXQoaWZwKTsKKwkJYWRkcmNvbmZfdmVyaWZ5KDApOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE5NDUsNyArMTk3MCw4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJcnRubF9sb2NrKCk7Ci0JZXJyID0gaW5ldDZfYWRkcl9hZGQoaXJlcS5pZnI2X2lmaW5kZXgsICZpcmVxLmlmcjZfYWRkciwgaXJlcS5pZnI2X3ByZWZpeGxlbik7CisJZXJyID0gaW5ldDZfYWRkcl9hZGQoaXJlcS5pZnI2X2lmaW5kZXgsICZpcmVxLmlmcjZfYWRkciwgaXJlcS5pZnI2X3ByZWZpeGxlbiwKKwkJCSAgICAgSU5GSU5JVFlfTElGRV9USU1FLCBJTkZJTklUWV9MSUZFX1RJTUUpOwogCXJ0bmxfdW5sb2NrKCk7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTI3NzEsMTIgKzI3OTcsMTYgQEAKIAkJCQkJaWZwLT5pZGV2LT5uZF9wYXJtcy0+cmV0cmFuc190aW1lIC8gSFo7CiAjZW5kaWYKIAotCQkJaWYgKGFnZSA+PSBpZnAtPnZhbGlkX2xmdCkgeworCQkJaWYgKGlmcC0+dmFsaWRfbGZ0ICE9IElORklOSVRZX0xJRkVfVElNRSAmJgorCQkJICAgIGFnZSA+PSBpZnAtPnZhbGlkX2xmdCkgewogCQkJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCQkJCWluNl9pZmFfaG9sZChpZnApOwogCQkJCXJlYWRfdW5sb2NrKCZhZGRyY29uZl9oYXNoX2xvY2spOwogCQkJCWlwdjZfZGVsX2FkZHIoaWZwKTsKIAkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9IGVsc2UgaWYgKGlmcC0+cHJlZmVyZWRfbGZ0ID09IElORklOSVRZX0xJRkVfVElNRSkgeworCQkJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOworCQkJCWNvbnRpbnVlOwogCQkJfSBlbHNlIGlmIChhZ2UgPj0gaWZwLT5wcmVmZXJlZF9sZnQpIHsKIAkJCQkvKiBqaWZmaWVzIC0gaWZwLT50c2FtcCA+IGFnZSA+PSBpZnAtPnByZWZlcmVkX2xmdCAqLwogCQkJCWludCBkZXByZWNhdGUgPSAwOwpAQCAtMjg1Myw3ICsyODgzLDggQEAKIAkJcGZ4ID0gUlRBX0RBVEEocnRhW0lGQV9BRERSRVNTLTFdKTsKIAl9CiAJaWYgKHJ0YVtJRkFfTE9DQUwtMV0pIHsKLQkJaWYgKHBmeCAmJiBtZW1jbXAocGZ4LCBSVEFfREFUQShydGFbSUZBX0xPQ0FMLTFdKSwgc2l6ZW9mKCpwZngpKSkKKwkJaWYgKFJUQV9QQVlMT0FEKHJ0YVtJRkFfTE9DQUwtMV0pIDwgc2l6ZW9mKCpwZngpIHx8CisJCSAgICAocGZ4ICYmIG1lbWNtcChwZngsIFJUQV9EQVRBKHJ0YVtJRkFfTE9DQUwtMV0pLCBzaXplb2YoKnBmeCkpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlwZnggPSBSVEFfREFUQShydGFbSUZBX0xPQ0FMLTFdKTsKIAl9CkBAIC0yODY0LDExICsyODk1LDYxIEBACiB9CiAKIHN0YXRpYyBpbnQKK2luZXQ2X2FkZHJfbW9kaWZ5KGludCBpZmluZGV4LCBzdHJ1Y3QgaW42X2FkZHIgKnBmeCwKKwkJICBfX3UzMiBwcmVmZXJlZF9sZnQsIF9fdTMyIHZhbGlkX2xmdCkKK3sKKwlzdHJ1Y3QgaW5ldDZfaWZhZGRyICppZnAgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJaW50IGlmYV9mbGFncyA9IDA7CisKKwlpZiAoKGRldiA9IF9fZGV2X2dldF9ieV9pbmRleChpZmluZGV4KSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlpZiAoIShkZXYtPmZsYWdzJklGRl9VUCkpCisJCXJldHVybiAtRU5FVERPV047CisKKwlpZiAoIXZhbGlkX2xmdCB8fCAocHJlZmVyZWRfbGZ0ID4gdmFsaWRfbGZ0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZnAgPSBpcHY2X2dldF9pZmFkZHIocGZ4LCBkZXYsIDEpOworCWlmIChpZnAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZiAodmFsaWRfbGZ0ID09IElORklOSVRZX0xJRkVfVElNRSkKKwkJaWZhX2ZsYWdzID0gSUZBX0ZfUEVSTUFORU5UOworCWVsc2UgaWYgKHZhbGlkX2xmdCA+PSAweDdGRkZGRkZGL0haKQorCQl2YWxpZF9sZnQgPSAweDdGRkZGRkZGL0haOworCisJaWYgKHByZWZlcmVkX2xmdCA9PSAwKQorCQlpZmFfZmxhZ3MgPSBJRkFfRl9ERVBSRUNBVEVEOworCWVsc2UgaWYgKChwcmVmZXJlZF9sZnQgPj0gMHg3RkZGRkZGRi9IWikgJiYKKwkJIChwcmVmZXJlZF9sZnQgIT0gSU5GSU5JVFlfTElGRV9USU1FKSkKKwkJcHJlZmVyZWRfbGZ0ID0gMHg3RkZGRkZGRi9IWjsKKworCXNwaW5fbG9ja19iaCgmaWZwLT5sb2NrKTsKKwlpZnAtPmZsYWdzID0gKGlmcC0+ZmxhZ3MgJiB+KElGQV9GX0RFUFJFQ0FURUR8SUZBX0ZfUEVSTUFORU5UKSkgfCBpZmFfZmxhZ3M7CisKKwlpZnAtPnRzdGFtcCA9IGppZmZpZXM7CisJaWZwLT52YWxpZF9sZnQgPSB2YWxpZF9sZnQ7CisJaWZwLT5wcmVmZXJlZF9sZnQgPSBwcmVmZXJlZF9sZnQ7CisKKwlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKKwlpZiAoIShpZnAtPmZsYWdzJklGQV9GX1RFTlRBVElWRSkpCisJCWlwdjZfaWZhX25vdGlmeSgwLCBpZnApOworCWluNl9pZmFfcHV0KGlmcCk7CisKKwlhZGRyY29uZl92ZXJpZnkoMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaW5ldDZfcnRtX25ld2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5sbXNnaGRyICpubGgsIHZvaWQgKmFyZykKIHsKIAlzdHJ1Y3QgcnRhdHRyICAqKnJ0YSA9IGFyZzsKIAlzdHJ1Y3QgaWZhZGRybXNnICppZm0gPSBOTE1TR19EQVRBKG5saCk7CiAJc3RydWN0IGluNl9hZGRyICpwZng7CisJX191MzIgdmFsaWRfbGZ0ID0gSU5GSU5JVFlfTElGRV9USU1FLCBwcmVmZXJlZF9sZnQgPSBJTkZJTklUWV9MSUZFX1RJTUU7CiAKIAlwZnggPSBOVUxMOwogCWlmIChydGFbSUZBX0FERFJFU1MtMV0pIHsKQEAgLTI4NzcsMTQgKzI5NTgsMzQgQEAKIAkJcGZ4ID0gUlRBX0RBVEEocnRhW0lGQV9BRERSRVNTLTFdKTsKIAl9CiAJaWYgKHJ0YVtJRkFfTE9DQUwtMV0pIHsKLQkJaWYgKHBmeCAmJiBtZW1jbXAocGZ4LCBSVEFfREFUQShydGFbSUZBX0xPQ0FMLTFdKSwgc2l6ZW9mKCpwZngpKSkKKwkJaWYgKFJUQV9QQVlMT0FEKHJ0YVtJRkFfTE9DQUwtMV0pIDwgc2l6ZW9mKCpwZngpIHx8CisJCSAgICAocGZ4ICYmIG1lbWNtcChwZngsIFJUQV9EQVRBKHJ0YVtJRkFfTE9DQUwtMV0pLCBzaXplb2YoKnBmeCkpKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlwZnggPSBSVEFfREFUQShydGFbSUZBX0xPQ0FMLTFdKTsKIAl9CiAJaWYgKHBmeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBpbmV0Nl9hZGRyX2FkZChpZm0tPmlmYV9pbmRleCwgcGZ4LCBpZm0tPmlmYV9wcmVmaXhsZW4pOworCWlmIChydGFbSUZBX0NBQ0hFSU5GTy0xXSkgeworCQlzdHJ1Y3QgaWZhX2NhY2hlaW5mbyAqY2k7CisJCWlmIChSVEFfUEFZTE9BRChydGFbSUZBX0NBQ0hFSU5GTy0xXSkgPCBzaXplb2YoKmNpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQljaSA9IFJUQV9EQVRBKHJ0YVtJRkFfQ0FDSEVJTkZPLTFdKTsKKwkJdmFsaWRfbGZ0ID0gY2ktPmlmYV92YWxpZDsKKwkJcHJlZmVyZWRfbGZ0ID0gY2ktPmlmYV9wcmVmZXJlZDsKKwl9CisKKwlpZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX1JFUExBQ0UpIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gaW5ldDZfYWRkcl9tb2RpZnkoaWZtLT5pZmFfaW5kZXgsIHBmeCwKKwkJCQkJcHJlZmVyZWRfbGZ0LCB2YWxpZF9sZnQpOworCQlpZiAocmV0ID09IDAgfHwgIShubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIGluZXQ2X2FkZHJfYWRkKGlmbS0+aWZhX2luZGV4LCBwZngsIGlmbS0+aWZhX3ByZWZpeGxlbiwKKwkJCSAgICAgIHByZWZlcmVkX2xmdCwgdmFsaWRfbGZ0KTsKKwogfQogCiAvKiBNYXhpbXVtIGxlbmd0aCBvZiBpZmFfY2FjaGVpbmZvIGF0dHJpYnV0ZXMgKi8KQEAgLTMxMjEsNiArMzIyMiw2MiBAQAogCXJldHVybiBpbmV0Nl9kdW1wX2FkZHIoc2tiLCBjYiwgdHlwZSk7CiB9CiAKK3N0YXRpYyBpbnQgaW5ldDZfcnRtX2dldGFkZHIoc3RydWN0IHNrX2J1ZmYgKmluX3NrYiwKKwkJc3RydWN0IG5sbXNnaGRyKiBubGgsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgcnRhdHRyICoqcnRhID0gYXJnOworCXN0cnVjdCBpZmFkZHJtc2cgKmlmbSA9IE5MTVNHX0RBVEEobmxoKTsKKwlzdHJ1Y3QgaW42X2FkZHIgKmFkZHIgPSBOVUxMOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCXN0cnVjdCBpbmV0Nl9pZmFkZHIgKmlmYTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWludCBzaXplID0gTkxNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpICsgSU5FVDZfSUZBRERSX1JUQV9TUEFDRSk7CisJaW50IGVycjsKKworCWlmIChydGFbSUZBX0FERFJFU1MtMV0pIHsKKwkJaWYgKFJUQV9QQVlMT0FEKHJ0YVtJRkFfQUREUkVTUy0xXSkgPCBzaXplb2YoKmFkZHIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWFkZHIgPSBSVEFfREFUQShydGFbSUZBX0FERFJFU1MtMV0pOworCX0KKwlpZiAocnRhW0lGQV9MT0NBTC0xXSkgeworCQlpZiAoUlRBX1BBWUxPQUQocnRhW0lGQV9MT0NBTC0xXSkgPCBzaXplb2YoKmFkZHIpIHx8CisJCSAgICAoYWRkciAmJiBtZW1jbXAoYWRkciwgUlRBX0RBVEEocnRhW0lGQV9MT0NBTC0xXSksIHNpemVvZigqYWRkcikpKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlhZGRyID0gUlRBX0RBVEEocnRhW0lGQV9MT0NBTC0xXSk7CisJfQorCWlmIChhZGRyID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlmbS0+aWZhX2luZGV4KQorCQlkZXYgPSBfX2Rldl9nZXRfYnlfaW5kZXgoaWZtLT5pZmFfaW5kZXgpOworCisJaWYgKChpZmEgPSBpcHY2X2dldF9pZmFkZHIoYWRkciwgZGV2LCAxKSkgPT0gTlVMTCkKKwkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOworCisJaWYgKChza2IgPSBhbGxvY19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCkpID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT0JVRlM7CisJCWdvdG8gb3V0OworCX0KKworCU5FVExJTktfQ0Ioc2tiKS5kc3RfcGlkID0gTkVUTElOS19DQihpbl9za2IpLnBpZDsKKwllcnIgPSBpbmV0Nl9maWxsX2lmYWRkcihza2IsIGlmYSwgTkVUTElOS19DQihpbl9za2IpLnBpZCwKKwkJCQlubGgtPm5sbXNnX3NlcSwgUlRNX05FV0FERFIsIDApOworCWlmIChlcnIgPCAwKSB7CisJCWVyciA9IC1FTVNHU0laRTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwllcnIgPSBuZXRsaW5rX3VuaWNhc3QocnRubCwgc2tiLCBORVRMSU5LX0NCKGluX3NrYikucGlkLCBNU0dfRE9OVFdBSVQpOworCWlmIChlcnIgPiAwKQorCQllcnIgPSAwOworb3V0OgorCWluNl9pZmFfcHV0KGlmYSk7CisJcmV0dXJuIGVycjsKK291dF9mcmVlOgorCWtmcmVlX3NrYihza2IpOworCWdvdG8gb3V0OworfQorCiBzdGF0aWMgdm9pZCBpbmV0Nl9pZmFfbm90aWZ5KGludCBldmVudCwgc3RydWN0IGluZXQ2X2lmYWRkciAqaWZhKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zMzYzLDcgKzM1MjAsOCBAQAogCVtSVE1fR0VUTElOSyAtIFJUTV9CQVNFXSA9IHsgLmR1bXBpdAk9IGluZXQ2X2R1bXBfaWZpbmZvLCB9LAogCVtSVE1fTkVXQUREUiAtIFJUTV9CQVNFXSA9IHsgLmRvaXQJPSBpbmV0Nl9ydG1fbmV3YWRkciwgfSwKIAlbUlRNX0RFTEFERFIgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gaW5ldDZfcnRtX2RlbGFkZHIsIH0sCi0JW1JUTV9HRVRBRERSIC0gUlRNX0JBU0VdID0geyAuZHVtcGl0CT0gaW5ldDZfZHVtcF9pZmFkZHIsIH0sCisJW1JUTV9HRVRBRERSIC0gUlRNX0JBU0VdID0geyAuZG9pdAk9IGluZXQ2X3J0bV9nZXRhZGRyLAorCQkJCSAgICAgLmR1bXBpdAk9IGluZXQ2X2R1bXBfaWZhZGRyLCB9LAogCVtSVE1fR0VUTVVMVElDQVNUIC0gUlRNX0JBU0VdID0geyAuZHVtcGl0ID0gaW5ldDZfZHVtcF9pZm1jYWRkciwgfSwKIAlbUlRNX0dFVEFOWUNBU1QgLSBSVE1fQkFTRV0gPSB7IC5kdW1waXQJPSBpbmV0Nl9kdW1wX2lmYWNhZGRyLCB9LAogCVtSVE1fTkVXUk9VVEUgLSBSVE1fQkFTRV0gPSB7IC5kb2l0CT0gaW5ldDZfcnRtX25ld3JvdXRlLCB9LApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggNWEwYmE1OC4uYWM4NWU5YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC02NTgsNyArNjU4LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAotCQlpcDZfZHN0X3N0b3JlKHNrLCBkc3QsIE5VTEwpOworCQlfX2lwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9haDYuYyBiL25ldC9pcHY2L2FoNi5jCmluZGV4IDlkNDgzMWIuLjAwZmZhN2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FoNi5jCisrKyBiL25ldC9pcHY2L2FoNi5jCkBAIC0yMTMsNyArMjEzLDEwIEBACiAJYWgtPnNwaSA9IHgtPmlkLnNwaTsKIAlhaC0+c2VxX25vID0gaHRvbmwoKyt4LT5yZXBsYXkub3NlcSk7CiAJeGZybV9hZXZlbnRfZG9yZXBsYXkoeCk7Ci0JYWhwLT5pY3YoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOworCWVyciA9IGFoX21hY19kaWdlc3QoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOworCWlmIChlcnIpCisJCWdvdG8gZXJyb3JfZnJlZV9pcGg7CisJbWVtY3B5KGFoLT5hdXRoX2RhdGEsIGFocC0+d29ya19pY3YsIGFocC0+aWN2X3RydW5jX2xlbik7CiAKIAllcnIgPSAwOwogCkBAIC0yNTEsNiArMjU0LDcgQEAKIAl1MTYgaGRyX2xlbjsKIAl1MTYgYWhfaGxlbjsKIAlpbnQgbmV4dGhkcjsKKwlpbnQgZXJyID0gLUVJTlZBTDsKIAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfYXV0aF9oZHIpKSkKIAkJZ290byBvdXQ7CkBAIC0yOTIsOCArMjk2LDExIEBACiAJCW1lbWNweShhdXRoX2RhdGEsIGFoLT5hdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbik7CiAJCW1lbXNldChhaC0+YXV0aF9kYXRhLCAwLCBhaHAtPmljdl90cnVuY19sZW4pOwogCQlza2JfcHVzaChza2IsIGhkcl9sZW4pOwotCQlhaHAtPmljdihhaHAsIHNrYiwgYWgtPmF1dGhfZGF0YSk7Ci0JCWlmIChtZW1jbXAoYWgtPmF1dGhfZGF0YSwgYXV0aF9kYXRhLCBhaHAtPmljdl90cnVuY19sZW4pKSB7CisJCWVyciA9IGFoX21hY19kaWdlc3QoYWhwLCBza2IsIGFoLT5hdXRoX2RhdGEpOworCQlpZiAoZXJyKQorCQkJZ290byBmcmVlX291dDsKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKG1lbWNtcChhaHAtPndvcmtfaWN2LCBhdXRoX2RhdGEsIGFocC0+aWN2X3RydW5jX2xlbikpIHsKIAkJCUxJTUlUX05FVERFQlVHKEtFUk5fV0FSTklORyAiaXBzZWMgYWggYXV0aGVudGljYXRpb24gZXJyb3JcbiIpOwogCQkJeC0+c3RhdHMuaW50ZWdyaXR5X2ZhaWxlZCsrOwogCQkJZ290byBmcmVlX291dDsKQEAgLTMxMCw3ICszMTcsNyBAQAogZnJlZV9vdXQ6CiAJa2ZyZWUodG1wX2hkcik7CiBvdXQ6Ci0JcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgYWg2X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaW5ldDZfc2tiX3Bhcm0gKm9wdCwgCkBAIC0zMzgsNiArMzQ1LDcgQEAKIHsKIAlzdHJ1Y3QgYWhfZGF0YSAqYWhwID0gTlVMTDsKIAlzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmFhbGdfZGVzYzsKKwlzdHJ1Y3QgY3J5cHRvX2hhc2ggKnRmbTsKIAogCWlmICgheC0+YWFsZykKIAkJZ290byBlcnJvcjsKQEAgLTM1NSwyNCArMzYzLDI3IEBACiAKIAlhaHAtPmtleSA9IHgtPmFhbGctPmFsZ19rZXk7CiAJYWhwLT5rZXlfbGVuID0gKHgtPmFhbGctPmFsZ19rZXlfbGVuKzcpLzg7Ci0JYWhwLT50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKHgtPmFhbGctPmFsZ19uYW1lLCAwKTsKLQlpZiAoIWFocC0+dGZtKQorCXRmbSA9IGNyeXB0b19hbGxvY19oYXNoKHgtPmFhbGctPmFsZ19uYW1lLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKHRmbSkpCiAJCWdvdG8gZXJyb3I7Ci0JYWhwLT5pY3YgPSBhaF9obWFjX2RpZ2VzdDsKKworCWFocC0+dGZtID0gdGZtOworCWlmIChjcnlwdG9faGFzaF9zZXRrZXkodGZtLCBhaHAtPmtleSwgYWhwLT5rZXlfbGVuKSkKKwkJZ290byBlcnJvcjsKIAkKIAkvKgogCSAqIExvb2t1cCB0aGUgYWxnb3JpdGhtIGRlc2NyaXB0aW9uIG1haW50YWluZWQgYnkgeGZybV9hbGdvLAogCSAqIHZlcmlmeSBjcnlwdG8gdHJhbnNmb3JtIHByb3BlcnRpZXMsIGFuZCBzdG9yZSBpbmZvcm1hdGlvbgogCSAqIHdlIG5lZWQgZm9yIEFIIHByb2Nlc3NpbmcuICBUaGlzIGxvb2t1cCBjYW5ub3QgZmFpbCBoZXJlCi0JICogYWZ0ZXIgYSBzdWNjZXNzZnVsIGNyeXB0b19hbGxvY190Zm0oKS4KKwkgKiBhZnRlciBhIHN1Y2Nlc3NmdWwgY3J5cHRvX2FsbG9jX2hhc2goKS4KIAkgKi8KIAlhYWxnX2Rlc2MgPSB4ZnJtX2FhbGdfZ2V0X2J5bmFtZSh4LT5hYWxnLT5hbGdfbmFtZSwgMCk7CiAJQlVHX09OKCFhYWxnX2Rlc2MpOwogCiAJaWYgKGFhbGdfZGVzYy0+dWluZm8uYXV0aC5pY3ZfZnVsbGJpdHMvOCAhPQotCSAgICBjcnlwdG9fdGZtX2FsZ19kaWdlc3RzaXplKGFocC0+dGZtKSkgeworCSAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiQUg6ICVzIGRpZ2VzdHNpemUgJXUgIT0gJWh1XG4iLAotCQkgICAgICAgeC0+YWFsZy0+YWxnX25hbWUsIGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUoYWhwLT50Zm0pLAorCQkgICAgICAgeC0+YWFsZy0+YWxnX25hbWUsIGNyeXB0b19oYXNoX2RpZ2VzdHNpemUodGZtKSwKIAkJICAgICAgIGFhbGdfZGVzYy0+dWluZm8uYXV0aC5pY3ZfZnVsbGJpdHMvOCk7CiAJCWdvdG8gZXJyb3I7CiAJfQpAQCAtMzk2LDcgKzQwNyw3IEBACiBlcnJvcjoKIAlpZiAoYWhwKSB7CiAJCWtmcmVlKGFocC0+d29ya19pY3YpOwotCQljcnlwdG9fZnJlZV90Zm0oYWhwLT50Zm0pOworCQljcnlwdG9fZnJlZV9oYXNoKGFocC0+dGZtKTsKIAkJa2ZyZWUoYWhwKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC00MTEsNyArNDIyLDcgQEAKIAogCWtmcmVlKGFocC0+d29ya19pY3YpOwogCWFocC0+d29ya19pY3YgPSBOVUxMOwotCWNyeXB0b19mcmVlX3RmbShhaHAtPnRmbSk7CisJY3J5cHRvX2ZyZWVfaGFzaChhaHAtPnRmbSk7CiAJYWhwLT50Zm0gPSBOVUxMOwogCWtmcmVlKGFocCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jIGIvbmV0L2lwdjYvZGF0YWdyYW0uYwppbmRleCA5OWE2ZWIyLi4zYjU1YjRjIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9kYXRhZ3JhbS5jCisrKyBiL25ldC9pcHY2L2RhdGFncmFtLmMKQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkJfQogCiAJCQl0YyA9ICooaW50ICopQ01TR19EQVRBKGNtc2cpOwotCQkJaWYgKHRjIDwgMCB8fCB0YyA+IDB4ZmYpCisJCQlpZiAodGMgPCAtMSB8fCB0YyA+IDB4ZmYpCiAJCQkJZ290byBleGl0X2Y7CiAKIAkJCWVyciA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9lc3A2LmMgYi9uZXQvaXB2Ni9lc3A2LmMKaW5kZXggYTI3OGQ1ZS4uMmViZmQyOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXNwNi5jCisrKyBiL25ldC9pcHY2L2VzcDYuYwpAQCAtMjQsNiArMjQsNyBAQAogICogCVRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gbmV0L2lwdjQvZXNwLmMKICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KQEAgLTQ0LDcgKzQ1LDggQEAKIAlpbnQgaGRyX2xlbjsKIAlzdHJ1Y3QgaXB2NmhkciAqdG9wX2lwaDsKIAlzdHJ1Y3QgaXB2Nl9lc3BfaGRyICplc3BoOwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHJhaWxlcjsKIAlpbnQgYmxrc2l6ZTsKQEAgLTY3LDcgKzY5LDkgQEAKIAogCWFsZW4gPSBlc3AtPmF1dGguaWN2X3RydW5jX2xlbjsKIAl0Zm0gPSBlc3AtPmNvbmYudGZtOwotCWJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSwgNCk7CisJZGVzYy50Zm0gPSB0Zm07CisJZGVzYy5mbGFncyA9IDA7CisJYmxrc2l6ZSA9IEFMSUdOKGNyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplKHRmbSksIDQpOwogCWNsZW4gPSBBTElHTihjbGVuICsgMiwgYmxrc2l6ZSk7CiAJaWYgKGVzcC0+Y29uZi5wYWRsZW4pCiAJCWNsZW4gPSBBTElHTihjbGVuLCBlc3AtPmNvbmYucGFkbGVuKTsKQEAgLTk2LDcgKzEwMCw3IEBACiAJeGZybV9hZXZlbnRfZG9yZXBsYXkoeCk7CiAKIAlpZiAoZXNwLT5jb25mLml2bGVuKQotCQljcnlwdG9fY2lwaGVyX3NldF9pdih0Zm0sIGVzcC0+Y29uZi5pdmVjLCBjcnlwdG9fdGZtX2FsZ19pdnNpemUodGZtKSk7CisJCWNyeXB0b19ibGtjaXBoZXJfc2V0X2l2KHRmbSwgZXNwLT5jb25mLml2ZWMsIGVzcC0+Y29uZi5pdmxlbik7CiAKIAlkbyB7CiAJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmZXNwLT5zZ2J1ZlswXTsKQEAgLTEwNywyNCArMTExLDI1IEBACiAJCQkJZ290byBlcnJvcjsKIAkJfQogCQlza2JfdG9fc2d2ZWMoc2tiLCBzZywgZXNwaC0+ZW5jX2RhdGErZXNwLT5jb25mLml2bGVuLXNrYi0+ZGF0YSwgY2xlbik7Ci0JCWNyeXB0b19jaXBoZXJfZW5jcnlwdCh0Zm0sIHNnLCBzZywgY2xlbik7CisJCWVyciA9IGNyeXB0b19ibGtjaXBoZXJfZW5jcnlwdCgmZGVzYywgc2csIHNnLCBjbGVuKTsKIAkJaWYgKHVubGlrZWx5KHNnICE9ICZlc3AtPnNnYnVmWzBdKSkKIAkJCWtmcmVlKHNnKTsKIAl9IHdoaWxlICgwKTsKIAorCWlmICh1bmxpa2VseShlcnIpKQorCQlnb3RvIGVycm9yOworCiAJaWYgKGVzcC0+Y29uZi5pdmxlbikgewotCQltZW1jcHkoZXNwaC0+ZW5jX2RhdGEsIGVzcC0+Y29uZi5pdmVjLCBjcnlwdG9fdGZtX2FsZ19pdnNpemUodGZtKSk7Ci0JCWNyeXB0b19jaXBoZXJfZ2V0X2l2KHRmbSwgZXNwLT5jb25mLml2ZWMsIGNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pKTsKKwkJbWVtY3B5KGVzcGgtPmVuY19kYXRhLCBlc3AtPmNvbmYuaXZlYywgZXNwLT5jb25mLml2bGVuKTsKKwkJY3J5cHRvX2Jsa2NpcGhlcl9nZXRfaXYodGZtLCBlc3AtPmNvbmYuaXZlYywgZXNwLT5jb25mLml2bGVuKTsKIAl9CiAKIAlpZiAoZXNwLT5hdXRoLmljdl9mdWxsX2xlbikgewotCQllc3AtPmF1dGguaWN2KGVzcCwgc2tiLCAodTgqKWVzcGgtc2tiLT5kYXRhLAotCQkJc2l6ZW9mKHN0cnVjdCBpcHY2X2VzcF9oZHIpICsgZXNwLT5jb25mLml2bGVuK2NsZW4sIHRyYWlsZXItPnRhaWwpOwotCQlwc2tiX3B1dChza2IsIHRyYWlsZXIsIGFsZW4pOworCQllcnIgPSBlc3BfbWFjX2RpZ2VzdChlc3AsIHNrYiwgKHU4ICopZXNwaCAtIHNrYi0+ZGF0YSwKKwkJCQkgICAgIHNpemVvZigqZXNwaCkgKyBlc3AtPmNvbmYuaXZsZW4gKyBjbGVuKTsKKwkJbWVtY3B5KHBza2JfcHV0KHNrYiwgdHJhaWxlciwgYWxlbiksIGVzcC0+YXV0aC53b3JrX2ljdiwgYWxlbik7CiAJfQogCi0JZXJyID0gMDsKLQogZXJyb3I6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTEzNCw4ICsxMzksMTAgQEAKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoOwogCXN0cnVjdCBpcHY2X2VzcF9oZHIgKmVzcGg7CiAJc3RydWN0IGVzcF9kYXRhICplc3AgPSB4LT5kYXRhOworCXN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0gPSBlc3AtPmNvbmYudGZtOworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGZtIH07CiAJc3RydWN0IHNrX2J1ZmYgKnRyYWlsZXI7Ci0JaW50IGJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOworCWludCBibGtzaXplID0gQUxJR04oY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUodGZtKSwgNCk7CiAJaW50IGFsZW4gPSBlc3AtPmF1dGguaWN2X3RydW5jX2xlbjsKIAlpbnQgZWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCBpcHY2X2VzcF9oZHIpIC0gZXNwLT5jb25mLml2bGVuIC0gYWxlbjsKIApAQCAtMTU1LDE1ICsxNjIsMTYgQEAKIAogCS8qIElmIGludGVncml0eSBjaGVjayBpcyByZXF1aXJlZCwgZG8gdGhpcy4gKi8KICAgICAgICAgaWYgKGVzcC0+YXV0aC5pY3ZfZnVsbF9sZW4pIHsKLQkJdTggc3VtW2VzcC0+YXV0aC5pY3ZfZnVsbF9sZW5dOwotCQl1OCBzdW0xW2FsZW5dOworCQl1OCBzdW1bYWxlbl07CiAKLQkJZXNwLT5hdXRoLmljdihlc3AsIHNrYiwgMCwgc2tiLT5sZW4tYWxlbiwgc3VtKTsKKwkJcmV0ID0gZXNwX21hY19kaWdlc3QoZXNwLCBza2IsIDAsIHNrYi0+bGVuIC0gYWxlbik7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKIAotCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIHNrYi0+bGVuLWFsZW4sIHN1bTEsIGFsZW4pKQorCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIHNrYi0+bGVuIC0gYWxlbiwgc3VtLCBhbGVuKSkKIAkJCUJVRygpOwogCi0JCWlmICh1bmxpa2VseShtZW1jbXAoc3VtLCBzdW0xLCBhbGVuKSkpIHsKKwkJaWYgKHVubGlrZWx5KG1lbWNtcChlc3AtPmF1dGgud29ya19pY3YsIHN1bSwgYWxlbikpKSB7CiAJCQl4LT5zdGF0cy5pbnRlZ3JpdHlfZmFpbGVkKys7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CkBAIC0xODIsNyArMTkwLDcgQEAKIAogCS8qIEdldCBpdmVjLiBUaGlzIGNhbiBiZSB3cm9uZywgY2hlY2sgYWdhaW5zdCBhbm90aGVyIGltcGxzLiAqLwogCWlmIChlc3AtPmNvbmYuaXZsZW4pCi0JCWNyeXB0b19jaXBoZXJfc2V0X2l2KGVzcC0+Y29uZi50Zm0sIGVzcGgtPmVuY19kYXRhLCBjcnlwdG9fdGZtX2FsZ19pdnNpemUoZXNwLT5jb25mLnRmbSkpOworCQljcnlwdG9fYmxrY2lwaGVyX3NldF9pdih0Zm0sIGVzcGgtPmVuY19kYXRhLCBlc3AtPmNvbmYuaXZsZW4pOwogCiAgICAgICAgIHsKIAkJdTggbmV4dGhkclsyXTsKQEAgLTE5Nyw5ICsyMDUsMTEgQEAKIAkJCX0KIAkJfQogCQlza2JfdG9fc2d2ZWMoc2tiLCBzZywgc2l6ZW9mKHN0cnVjdCBpcHY2X2VzcF9oZHIpICsgZXNwLT5jb25mLml2bGVuLCBlbGVuKTsKLQkJY3J5cHRvX2NpcGhlcl9kZWNyeXB0KGVzcC0+Y29uZi50Zm0sIHNnLCBzZywgZWxlbik7CisJCXJldCA9IGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgc2csIHNnLCBlbGVuKTsKIAkJaWYgKHVubGlrZWx5KHNnICE9ICZlc3AtPnNnYnVmWzBdKSkKIAkJCWtmcmVlKHNnKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIG91dDsKIAogCQlpZiAoc2tiX2NvcHlfYml0cyhza2IsIHNrYi0+bGVuLWFsZW4tMiwgbmV4dGhkciwgMikpCiAJCQlCVUcoKTsKQEAgLTIyNSw3ICsyMzUsNyBAQAogc3RhdGljIHUzMiBlc3A2X2dldF9tYXhfc2l6ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG10dSkKIHsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcCA9IHgtPmRhdGE7Ci0JdTMyIGJsa3NpemUgPSBBTElHTihjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOworCXUzMiBibGtzaXplID0gQUxJR04oY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUoZXNwLT5jb25mLnRmbSksIDQpOwogCiAJaWYgKHgtPnByb3BzLm1vZGUpIHsKIAkJbXR1ID0gQUxJR04obXR1ICsgMiwgYmxrc2l6ZSk7CkBAIC0yNjYsMTEgKzI3NiwxMSBAQAogCWlmICghZXNwKQogCQlyZXR1cm47CiAKLQljcnlwdG9fZnJlZV90Zm0oZXNwLT5jb25mLnRmbSk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGVzcC0+Y29uZi50Zm0pOwogCWVzcC0+Y29uZi50Zm0gPSBOVUxMOwogCWtmcmVlKGVzcC0+Y29uZi5pdmVjKTsKIAllc3AtPmNvbmYuaXZlYyA9IE5VTEw7Ci0JY3J5cHRvX2ZyZWVfdGZtKGVzcC0+YXV0aC50Zm0pOworCWNyeXB0b19mcmVlX2hhc2goZXNwLT5hdXRoLnRmbSk7CiAJZXNwLT5hdXRoLnRmbSA9IE5VTEw7CiAJa2ZyZWUoZXNwLT5hdXRoLndvcmtfaWN2KTsKIAllc3AtPmF1dGgud29ya19pY3YgPSBOVUxMOwpAQCAtMjgwLDYgKzI5MCw3IEBACiBzdGF0aWMgaW50IGVzcDZfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKIAlzdHJ1Y3QgZXNwX2RhdGEgKmVzcCA9IE5VTEw7CisJc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbTsKIAogCS8qIG51bGwgYXV0aCBhbmQgZW5jcnlwdGlvbiBjYW4gaGF2ZSB6ZXJvIGxlbmd0aCBrZXlzICovCiAJaWYgKHgtPmFhbGcpIHsKQEAgLTI5OCwyNCArMzA5LDI5IEBACiAKIAlpZiAoeC0+YWFsZykgewogCQlzdHJ1Y3QgeGZybV9hbGdvX2Rlc2MgKmFhbGdfZGVzYzsKKwkJc3RydWN0IGNyeXB0b19oYXNoICpoYXNoOwogCiAJCWVzcC0+YXV0aC5rZXkgPSB4LT5hYWxnLT5hbGdfa2V5OwogCQllc3AtPmF1dGgua2V5X2xlbiA9ICh4LT5hYWxnLT5hbGdfa2V5X2xlbis3KS84OwotCQllc3AtPmF1dGgudGZtID0gY3J5cHRvX2FsbG9jX3RmbSh4LT5hYWxnLT5hbGdfbmFtZSwgMCk7Ci0JCWlmIChlc3AtPmF1dGgudGZtID09IE5VTEwpCisJCWhhc2ggPSBjcnlwdG9fYWxsb2NfaGFzaCh4LT5hYWxnLT5hbGdfbmFtZSwgMCwKKwkJCQkJIENSWVBUT19BTEdfQVNZTkMpOworCQlpZiAoSVNfRVJSKGhhc2gpKQogCQkJZ290byBlcnJvcjsKLQkJZXNwLT5hdXRoLmljdiA9IGVzcF9obWFjX2RpZ2VzdDsKKworCQllc3AtPmF1dGgudGZtID0gaGFzaDsKKwkJaWYgKGNyeXB0b19oYXNoX3NldGtleShoYXNoLCBlc3AtPmF1dGgua2V5LCBlc3AtPmF1dGgua2V5X2xlbikpCisJCQlnb3RvIGVycm9yOwogIAogCQlhYWxnX2Rlc2MgPSB4ZnJtX2FhbGdfZ2V0X2J5bmFtZSh4LT5hYWxnLT5hbGdfbmFtZSwgMCk7CiAJCUJVR19PTighYWFsZ19kZXNjKTsKICAKIAkJaWYgKGFhbGdfZGVzYy0+dWluZm8uYXV0aC5pY3ZfZnVsbGJpdHMvOCAhPQotCQkJY3J5cHRvX3RmbV9hbGdfZGlnZXN0c2l6ZShlc3AtPmF1dGgudGZtKSkgewotCQkJCXByaW50ayhLRVJOX0lORk8gIkVTUDogJXMgZGlnZXN0c2l6ZSAldSAhPSAlaHVcbiIsCi0JCQkJCXgtPmFhbGctPmFsZ19uYW1lLAotCQkJCQljcnlwdG9fdGZtX2FsZ19kaWdlc3RzaXplKGVzcC0+YXV0aC50Zm0pLAotCQkJCQlhYWxnX2Rlc2MtPnVpbmZvLmF1dGguaWN2X2Z1bGxiaXRzLzgpOwotCQkJCWdvdG8gZXJyb3I7CisJCSAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGhhc2gpKSB7CisJCQlORVRERUJVRyhLRVJOX0lORk8gIkVTUDogJXMgZGlnZXN0c2l6ZSAldSAhPSAlaHVcbiIsCisJCQkJIHgtPmFhbGctPmFsZ19uYW1lLAorCQkJCSBjcnlwdG9faGFzaF9kaWdlc3RzaXplKGhhc2gpLAorCQkJCSBhYWxnX2Rlc2MtPnVpbmZvLmF1dGguaWN2X2Z1bGxiaXRzLzgpOworCQkJZ290byBlcnJvcjsKIAkJfQogIAogCQllc3AtPmF1dGguaWN2X2Z1bGxfbGVuID0gYWFsZ19kZXNjLT51aW5mby5hdXRoLmljdl9mdWxsYml0cy84OwpAQCAtMzI3LDEzICszNDMsMTEgQEAKIAl9CiAJZXNwLT5jb25mLmtleSA9IHgtPmVhbGctPmFsZ19rZXk7CiAJZXNwLT5jb25mLmtleV9sZW4gPSAoeC0+ZWFsZy0+YWxnX2tleV9sZW4rNykvODsKLQlpZiAoeC0+cHJvcHMuZWFsZ28gPT0gU0FEQl9FQUxHX05VTEwpCi0JCWVzcC0+Y29uZi50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKHgtPmVhbGctPmFsZ19uYW1lLCBDUllQVE9fVEZNX01PREVfRUNCKTsKLQllbHNlCi0JCWVzcC0+Y29uZi50Zm0gPSBjcnlwdG9fYWxsb2NfdGZtKHgtPmVhbGctPmFsZ19uYW1lLCBDUllQVE9fVEZNX01PREVfQ0JDKTsKLQlpZiAoZXNwLT5jb25mLnRmbSA9PSBOVUxMKQorCXRmbSA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoeC0+ZWFsZy0+YWxnX25hbWUsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIodGZtKSkKIAkJZ290byBlcnJvcjsKLQllc3AtPmNvbmYuaXZsZW4gPSBjcnlwdG9fdGZtX2FsZ19pdnNpemUoZXNwLT5jb25mLnRmbSk7CisJZXNwLT5jb25mLnRmbSA9IHRmbTsKKwllc3AtPmNvbmYuaXZsZW4gPSBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pOwogCWVzcC0+Y29uZi5wYWRsZW4gPSAwOwogCWlmIChlc3AtPmNvbmYuaXZsZW4pIHsKIAkJZXNwLT5jb25mLml2ZWMgPSBrbWFsbG9jKGVzcC0+Y29uZi5pdmxlbiwgR0ZQX0tFUk5FTCk7CkBAIC0zNDEsNyArMzU1LDcgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCWdldF9yYW5kb21fYnl0ZXMoZXNwLT5jb25mLml2ZWMsIGVzcC0+Y29uZi5pdmxlbik7CiAJfQotCWlmIChjcnlwdG9fY2lwaGVyX3NldGtleShlc3AtPmNvbmYudGZtLCBlc3AtPmNvbmYua2V5LCBlc3AtPmNvbmYua2V5X2xlbikpCisJaWYgKGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KHRmbSwgZXNwLT5jb25mLmtleSwgZXNwLT5jb25mLmtleV9sZW4pKQogCQlnb3RvIGVycm9yOwogCXgtPnByb3BzLmhlYWRlcl9sZW4gPSBzaXplb2Yoc3RydWN0IGlwdjZfZXNwX2hkcikgKyBlc3AtPmNvbmYuaXZsZW47CiAJaWYgKHgtPnByb3BzLm1vZGUpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9leHRoZHJzLmMgYi9uZXQvaXB2Ni9leHRoZHJzLmMKaW5kZXggOWQwZWU3Zi4uODZkYWMxMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvZXh0aGRycy5jCisrKyBiL25ldC9pcHY2L2V4dGhkcnMuYwpAQCAtNjM1LDE0ICs2MzUsMTcgQEAKIAlzdHJ1Y3QgaXB2Nl90eG9wdGlvbnMgKm9wdDI7CiAJaW50IGVycjsKIAotCWlmIChuZXd0eXBlICE9IElQVjZfSE9QT1BUUyAmJiBvcHQtPmhvcG9wdCkKLQkJdG90X2xlbiArPSBDTVNHX0FMSUdOKGlwdjZfb3B0bGVuKG9wdC0+aG9wb3B0KSk7Ci0JaWYgKG5ld3R5cGUgIT0gSVBWNl9SVEhEUkRTVE9QVFMgJiYgb3B0LT5kc3Qwb3B0KQotCQl0b3RfbGVuICs9IENNU0dfQUxJR04oaXB2Nl9vcHRsZW4ob3B0LT5kc3Qwb3B0KSk7Ci0JaWYgKG5ld3R5cGUgIT0gSVBWNl9SVEhEUiAmJiBvcHQtPnNyY3J0KQotCQl0b3RfbGVuICs9IENNU0dfQUxJR04oaXB2Nl9vcHRsZW4ob3B0LT5zcmNydCkpOwotCWlmIChuZXd0eXBlICE9IElQVjZfRFNUT1BUUyAmJiBvcHQtPmRzdDFvcHQpCi0JCXRvdF9sZW4gKz0gQ01TR19BTElHTihpcHY2X29wdGxlbihvcHQtPmRzdDFvcHQpKTsKKwlpZiAob3B0KSB7CisJCWlmIChuZXd0eXBlICE9IElQVjZfSE9QT1BUUyAmJiBvcHQtPmhvcG9wdCkKKwkJCXRvdF9sZW4gKz0gQ01TR19BTElHTihpcHY2X29wdGxlbihvcHQtPmhvcG9wdCkpOworCQlpZiAobmV3dHlwZSAhPSBJUFY2X1JUSERSRFNUT1BUUyAmJiBvcHQtPmRzdDBvcHQpCisJCQl0b3RfbGVuICs9IENNU0dfQUxJR04oaXB2Nl9vcHRsZW4ob3B0LT5kc3Qwb3B0KSk7CisJCWlmIChuZXd0eXBlICE9IElQVjZfUlRIRFIgJiYgb3B0LT5zcmNydCkKKwkJCXRvdF9sZW4gKz0gQ01TR19BTElHTihpcHY2X29wdGxlbihvcHQtPnNyY3J0KSk7CisJCWlmIChuZXd0eXBlICE9IElQVjZfRFNUT1BUUyAmJiBvcHQtPmRzdDFvcHQpCisJCQl0b3RfbGVuICs9IENNU0dfQUxJR04oaXB2Nl9vcHRsZW4ob3B0LT5kc3Qxb3B0KSk7CisJfQorCiAJaWYgKG5ld29wdCAmJiBuZXdvcHRsZW4pCiAJCXRvdF9sZW4gKz0gQ01TR19BTElHTihuZXdvcHRsZW4pOwogCkBAIC02NTksMjUgKzY2MiwyNSBAQAogCW9wdDItPnRvdF9sZW4gPSB0b3RfbGVuOwogCXAgPSAoY2hhciAqKShvcHQyICsgMSk7CiAKLQllcnIgPSBpcHY2X3JlbmV3X29wdGlvbihvcHQtPmhvcG9wdCwgbmV3b3B0LCBuZXdvcHRsZW4sCisJZXJyID0gaXB2Nl9yZW5ld19vcHRpb24ob3B0ID8gb3B0LT5ob3BvcHQgOiBOVUxMLCBuZXdvcHQsIG5ld29wdGxlbiwKIAkJCQluZXd0eXBlICE9IElQVjZfSE9QT1BUUywKIAkJCQkmb3B0Mi0+aG9wb3B0LCAmcCk7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQllcnIgPSBpcHY2X3JlbmV3X29wdGlvbihvcHQtPmRzdDBvcHQsIG5ld29wdCwgbmV3b3B0bGVuLAorCWVyciA9IGlwdjZfcmVuZXdfb3B0aW9uKG9wdCA/IG9wdC0+ZHN0MG9wdCA6IE5VTEwsIG5ld29wdCwgbmV3b3B0bGVuLAogCQkJCW5ld3R5cGUgIT0gSVBWNl9SVEhEUkRTVE9QVFMsCiAJCQkJJm9wdDItPmRzdDBvcHQsICZwKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWVyciA9IGlwdjZfcmVuZXdfb3B0aW9uKG9wdC0+c3JjcnQsIG5ld29wdCwgbmV3b3B0bGVuLAorCWVyciA9IGlwdjZfcmVuZXdfb3B0aW9uKG9wdCA/IG9wdC0+c3JjcnQgOiBOVUxMLCBuZXdvcHQsIG5ld29wdGxlbiwKIAkJCQluZXd0eXBlICE9IElQVjZfUlRIRFIsCi0JCQkJKHN0cnVjdCBpcHY2X29wdF9oZHIgKiopb3B0Mi0+c3JjcnQsICZwKTsKKwkJCQkoc3RydWN0IGlwdjZfb3B0X2hkciAqKikmb3B0Mi0+c3JjcnQsICZwKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAotCWVyciA9IGlwdjZfcmVuZXdfb3B0aW9uKG9wdC0+ZHN0MW9wdCwgbmV3b3B0LCBuZXdvcHRsZW4sCisJZXJyID0gaXB2Nl9yZW5ld19vcHRpb24ob3B0ID8gb3B0LT5kc3Qxb3B0IDogTlVMTCwgbmV3b3B0LCBuZXdvcHRsZW4sCiAJCQkJbmV3dHlwZSAhPSBJUFY2X0RTVE9QVFMsCiAJCQkJJm9wdDItPmRzdDFvcHQsICZwKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaWNtcC5jIGIvbmV0L2lwdjYvaWNtcC5jCmluZGV4IDEwNDRiNmYuLjM1NmE4YTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2ljbXAuYworKysgYi9uZXQvaXB2Ni9pY21wLmMKQEAgLTQwMSw3ICs0MDEsNyBAQAogCWlmIChobGltaXQgPCAwKQogCQlobGltaXQgPSBpcHY2X2dldF9ob3BsaW1pdChkc3QtPmRldik7CiAKLQl0Y2xhc3MgPSBucC0+Y29yay50Y2xhc3M7CisJdGNsYXNzID0gbnAtPnRjbGFzczsKIAlpZiAodGNsYXNzIDwgMCkKIAkJdGNsYXNzID0gMDsKIApAQCAtNDk3LDcgKzQ5Nyw3IEBACiAJaWYgKGhsaW1pdCA8IDApCiAJCWhsaW1pdCA9IGlwdjZfZ2V0X2hvcGxpbWl0KGRzdC0+ZGV2KTsKIAotCXRjbGFzcyA9IG5wLT5jb3JrLnRjbGFzczsKKwl0Y2xhc3MgPSBucC0+dGNsYXNzOwogCWlmICh0Y2xhc3MgPCAwKQogCQl0Y2xhc3MgPSAwOwogCkBAIC03MTIsNiArNzEyLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBTcGVjaWFsIGxvY2stY2xhc3MgZm9yIF9faWNtcHY2X3NvY2tldDoKKyAqLworc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpY21wdjZfc29ja2V0X3NrX2RzdF9sb2NrX2tleTsKKwogaW50IF9faW5pdCBpY21wdjZfaW5pdChzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSAqb3BzKQogewogCXN0cnVjdCBzb2NrICpzazsKQEAgLTczMCw2ICs3MzUsMTQgQEAKIAogCQlzayA9IHBlcl9jcHUoX19pY21wdjZfc29ja2V0LCBpKS0+c2s7CiAJCXNrLT5za19hbGxvY2F0aW9uID0gR0ZQX0FUT01JQzsKKwkJLyoKKwkJICogU3BsaXQgb2ZmIHRoZWlyIGxvY2stY2xhc3MsIGJlY2F1c2Ugc2stPnNrX2RzdF9sb2NrCisJCSAqIGdldHMgdXNlZCBmcm9tIHNvZnRpcnFzLCB3aGljaCBpcyBzYWZlIGZvcgorCQkgKiBfX2ljbXB2Nl9zb2NrZXQgKGJlY2F1c2UgdGhvc2UgbmV2ZXIgZ2V0IGRpcmVjdGx5IHVzZWQKKwkJICogdmlhIHVzZXJzcGFjZSBzeXNjYWxscyksIGJ1dCB1bnNhZmUgZm9yIG5vcm1hbCBzb2NrZXRzLgorCQkgKi8KKwkJbG9ja2RlcF9zZXRfY2xhc3MoJnNrLT5za19kc3RfbG9jaywKKwkJCQkgICZpY21wdjZfc29ja2V0X3NrX2RzdF9sb2NrX2tleSk7CiAKIAkJLyogRW5vdWdoIHNwYWNlIGZvciAyIDY0SyBJQ01QIHBhY2tldHMsIGluY2x1ZGluZwogCQkgKiBza19idWZmIHN0cnVjdCBvdmVyaGVhZC4KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggNWM5NTBjYy4uYmY0OTEwNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTE4NSw3ICsxODUsNyBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCi0JCWlwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7CisJCV9faXA2X2RzdF9zdG9yZShzaywgZHN0LCBOVUxMKTsKIAl9CiAKIAlza2ItPmRzdCA9IGRzdF9jbG9uZShkc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IDNiYzc0Y2UuLjRmYjQ3YTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTM1Niw2ICszNTYsNyBAQAogCQlza2ItPmRldiA9IGRzdC0+ZGV2OwogCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9USU1FX0VYQ0VFRCwgSUNNUFY2X0VYQ19IT1BMSU1JVCwKIAkJCSAgICAwLCBza2ItPmRldik7CisJCUlQNl9JTkNfU1RBVFNfQkgoSVBTVEFUU19NSUJfSU5IRFJFUlJPUlMpOwogCiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm4gLUVUSU1FRE9VVDsKQEAgLTU5NSw2ICs1OTYsOSBAQAogCQkJfQogCQkJCiAJCQllcnIgPSBvdXRwdXQoc2tiKTsKKwkJCWlmKCFlcnIpCisJCQkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHQ1JFQVRFUyk7CisKIAkJCWlmIChlcnIgfHwgIWZyYWcpCiAJCQkJYnJlYWs7CiAKQEAgLTcwNiwxMiArNzEwLDExIEBACiAJCS8qCiAJCSAqCVB1dCB0aGlzIGZyYWdtZW50IGludG8gdGhlIHNlbmRpbmcgcXVldWUuCiAJCSAqLwotCi0JCUlQNl9JTkNfU1RBVFMoSVBTVEFUU19NSUJfRlJBR0NSRUFURVMpOwotCiAJCWVyciA9IG91dHB1dChmcmFnKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gZmFpbDsKKworCQlJUDZfSU5DX1NUQVRTKElQU1RBVFNfTUlCX0ZSQUdDUkVBVEVTKTsKIAl9CiAJa2ZyZWVfc2tiKHNrYik7CiAJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9GUkFHT0tTKTsKQEAgLTcyMyw0OCArNzI2LDUxIEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IGlwNl9kc3RfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKK3N0YXRpYyBzdHJ1Y3QgZHN0X2VudHJ5ICppcDZfc2tfZHN0X2NoZWNrKHN0cnVjdCBzb2NrICpzaywKKwkJCQkJICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsCisJCQkJCSAgc3RydWN0IGZsb3dpICpmbCkKIHsKLQlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgaXB2Nl9waW5mbyAqbnAgPSBpbmV0Nl9zayhzayk7CisJc3RydWN0IHJ0Nl9pbmZvICpydCA9IChzdHJ1Y3QgcnQ2X2luZm8gKilkc3Q7CiAKLQkqZHN0ID0gTlVMTDsKLQlpZiAoc2spIHsKLQkJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCQotCQkqZHN0ID0gc2tfZHN0X2NoZWNrKHNrLCBucC0+ZHN0X2Nvb2tpZSk7Ci0JCWlmICgqZHN0KSB7Ci0JCQlzdHJ1Y3QgcnQ2X2luZm8gKnJ0ID0gKHN0cnVjdCBydDZfaW5mbyopKmRzdDsKLQkKLQkJCS8qIFllcywgY2hlY2tpbmcgcm91dGUgdmFsaWRpdHkgaW4gbm90IGNvbm5lY3RlZAotCQkJICogY2FzZSBpcyBub3QgdmVyeSBzaW1wbGUuIFRha2UgaW50byBhY2NvdW50LAotCQkJICogdGhhdCB3ZSBkbyBub3Qgc3VwcG9ydCByb3V0aW5nIGJ5IHNvdXJjZSwgVE9TLAotCQkJICogYW5kIE1TR19ET05UUk9VVEUgCQktLUFOSyAoOTgwNzI2KQotCQkJICoKLQkJCSAqIDEuIElmIHJvdXRlIHdhcyBob3N0IHJvdXRlLCBjaGVjayB0aGF0Ci0JCQkgKiAgICBjYWNoZWQgZGVzdGluYXRpb24gaXMgY3VycmVudC4KLQkJCSAqICAgIElmIGl0IGlzIG5ldHdvcmsgcm91dGUsIHdlIHN0aWxsIG1heQotCQkJICogICAgY2hlY2sgaXRzIHZhbGlkaXR5IHVzaW5nIHNhdmVkIHBvaW50ZXIKLQkJCSAqICAgIHRvIHRoZSBsYXN0IHVzZWQgYWRkcmVzczogZGFkZHJfY2FjaGUuCi0JCQkgKiAgICBXZSBkbyBub3Qgd2FudCB0byBzYXZlIHdob2xlIGFkZHJlc3Mgbm93LAotCQkJICogICAgKGJlY2F1c2UgbWFpbiBjb25zdW1lciBvZiB0aGlzIHNlcnZpY2UKLQkJCSAqICAgIGlzIHRjcCwgd2hpY2ggaGFzIG5vdCB0aGlzIHByb2JsZW0pLAotCQkJICogICAgc28gdGhhdCB0aGUgbGFzdCB0cmljayB3b3JrcyBvbmx5IG9uIGNvbm5lY3RlZAotCQkJICogICAgc29ja2V0cy4KLQkJCSAqIDIuIG9pZiBhbHNvIHNob3VsZCBiZSB0aGUgc2FtZS4KLQkJCSAqLwotCQkJaWYgKCgocnQtPnJ0NmlfZHN0LnBsZW4gIT0gMTI4IHx8Ci0JCQkgICAgICAhaXB2Nl9hZGRyX2VxdWFsKCZmbC0+Zmw2X2RzdCwKLQkJCQkJICAgICAgICZydC0+cnQ2aV9kc3QuYWRkcikpCi0JCQkgICAgICYmIChucC0+ZGFkZHJfY2FjaGUgPT0gTlVMTCB8fAotCQkJCSAhaXB2Nl9hZGRyX2VxdWFsKCZmbC0+Zmw2X2RzdCwKLQkJCQkJCSAgbnAtPmRhZGRyX2NhY2hlKSkpCi0JCQkgICAgfHwgKGZsLT5vaWYgJiYgZmwtPm9pZiAhPSAoKmRzdCktPmRldi0+aWZpbmRleCkpIHsKLQkJCQlkc3RfcmVsZWFzZSgqZHN0KTsKLQkJCQkqZHN0ID0gTlVMTDsKLQkJCX0KLQkJfQorCWlmICghZHN0KQorCQlnb3RvIG91dDsKKworCS8qIFllcywgY2hlY2tpbmcgcm91dGUgdmFsaWRpdHkgaW4gbm90IGNvbm5lY3RlZAorCSAqIGNhc2UgaXMgbm90IHZlcnkgc2ltcGxlLiBUYWtlIGludG8gYWNjb3VudCwKKwkgKiB0aGF0IHdlIGRvIG5vdCBzdXBwb3J0IHJvdXRpbmcgYnkgc291cmNlLCBUT1MsCisJICogYW5kIE1TR19ET05UUk9VVEUgCQktLUFOSyAoOTgwNzI2KQorCSAqCisJICogMS4gSWYgcm91dGUgd2FzIGhvc3Qgcm91dGUsIGNoZWNrIHRoYXQKKwkgKiAgICBjYWNoZWQgZGVzdGluYXRpb24gaXMgY3VycmVudC4KKwkgKiAgICBJZiBpdCBpcyBuZXR3b3JrIHJvdXRlLCB3ZSBzdGlsbCBtYXkKKwkgKiAgICBjaGVjayBpdHMgdmFsaWRpdHkgdXNpbmcgc2F2ZWQgcG9pbnRlcgorCSAqICAgIHRvIHRoZSBsYXN0IHVzZWQgYWRkcmVzczogZGFkZHJfY2FjaGUuCisJICogICAgV2UgZG8gbm90IHdhbnQgdG8gc2F2ZSB3aG9sZSBhZGRyZXNzIG5vdywKKwkgKiAgICAoYmVjYXVzZSBtYWluIGNvbnN1bWVyIG9mIHRoaXMgc2VydmljZQorCSAqICAgIGlzIHRjcCwgd2hpY2ggaGFzIG5vdCB0aGlzIHByb2JsZW0pLAorCSAqICAgIHNvIHRoYXQgdGhlIGxhc3QgdHJpY2sgd29ya3Mgb25seSBvbiBjb25uZWN0ZWQKKwkgKiAgICBzb2NrZXRzLgorCSAqIDIuIG9pZiBhbHNvIHNob3VsZCBiZSB0aGUgc2FtZS4KKwkgKi8KKwlpZiAoKChydC0+cnQ2aV9kc3QucGxlbiAhPSAxMjggfHwKKwkgICAgICAhaXB2Nl9hZGRyX2VxdWFsKCZmbC0+Zmw2X2RzdCwgJnJ0LT5ydDZpX2RzdC5hZGRyKSkKKwkgICAgICYmIChucC0+ZGFkZHJfY2FjaGUgPT0gTlVMTCB8fAorCQkgIWlwdjZfYWRkcl9lcXVhbCgmZmwtPmZsNl9kc3QsIG5wLT5kYWRkcl9jYWNoZSkpKQorCSAgICB8fCAoZmwtPm9pZiAmJiBmbC0+b2lmICE9IGRzdC0+ZGV2LT5pZmluZGV4KSkgeworCQlkc3RfcmVsZWFzZShkc3QpOworCQlkc3QgPSBOVUxMOwogCX0KIAorb3V0OgorCXJldHVybiBkc3Q7Cit9CisKK3N0YXRpYyBpbnQgaXA2X2RzdF9sb29rdXBfdGFpbChzdHJ1Y3Qgc29jayAqc2ssCisJCQkgICAgICAgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKK3sKKwlpbnQgZXJyOworCiAJaWYgKCpkc3QgPT0gTlVMTCkKIAkJKmRzdCA9IGlwNl9yb3V0ZV9vdXRwdXQoc2ssIGZsKTsKIApAQCAtNzczLDcgKzc3OSw2IEBACiAKIAlpZiAoaXB2Nl9hZGRyX2FueSgmZmwtPmZsNl9zcmMpKSB7CiAJCWVyciA9IGlwdjZfZ2V0X3NhZGRyKCpkc3QsICZmbC0+Zmw2X2RzdCwgJmZsLT5mbDZfc3JjKTsKLQogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfZXJyX3JlbGVhc2U7CiAJfQpAQCAtNzg2LDggKzc5MSw0OCBAQAogCXJldHVybiBlcnI7CiB9CiAKKy8qKgorICoJaXA2X2RzdF9sb29rdXAgLSBwZXJmb3JtIHJvdXRlIGxvb2t1cCBvbiBmbG93CisgKglAc2s6IHNvY2tldCB3aGljaCBwcm92aWRlcyByb3V0ZSBpbmZvCisgKglAZHN0OiBwb2ludGVyIHRvIGRzdF9lbnRyeSAqIGZvciByZXN1bHQKKyAqCUBmbDogZmxvdyB0byBsb29rdXAKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgcm91dGUgbG9va3VwIG9uIHRoZSBnaXZlbiBmbG93LgorICoKKyAqCUl0IHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBvciBhIHN0YW5kYXJkIGVycm5vIGNvZGUgb24gZXJyb3IuCisgKi8KK2ludCBpcDZfZHN0X2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKipkc3QsIHN0cnVjdCBmbG93aSAqZmwpCit7CisJKmRzdCA9IE5VTEw7CisJcmV0dXJuIGlwNl9kc3RfbG9va3VwX3RhaWwoc2ssIGRzdCwgZmwpOworfQogRVhQT1JUX1NZTUJPTF9HUEwoaXA2X2RzdF9sb29rdXApOwogCisvKioKKyAqCWlwNl9za19kc3RfbG9va3VwIC0gcGVyZm9ybSBzb2NrZXQgY2FjaGVkIHJvdXRlIGxvb2t1cCBvbiBmbG93CisgKglAc2s6IHNvY2tldCB3aGljaCBwcm92aWRlcyB0aGUgZHN0IGNhY2hlIGFuZCByb3V0ZSBpbmZvCisgKglAZHN0OiBwb2ludGVyIHRvIGRzdF9lbnRyeSAqIGZvciByZXN1bHQKKyAqCUBmbDogZmxvdyB0byBsb29rdXAKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGEgcm91dGUgbG9va3VwIG9uIHRoZSBnaXZlbiBmbG93IHdpdGggdGhlCisgKglwb3NzaWJpbGl0eSBvZiB1c2luZyB0aGUgY2FjaGVkIHJvdXRlIGluIHRoZSBzb2NrZXQgaWYgaXQgaXMgdmFsaWQuCisgKglJdCB3aWxsIHRha2UgdGhlIHNvY2tldCBkc3QgbG9jayB3aGVuIG9wZXJhdGluZyBvbiB0aGUgZHN0IGNhY2hlLgorICoJQXMgYSByZXN1bHQsIHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBpbiBwcm9jZXNzIGNvbnRleHQuCisgKgorICoJSXQgcmV0dXJucyB6ZXJvIG9uIHN1Y2Nlc3MsIG9yIGEgc3RhbmRhcmQgZXJybm8gY29kZSBvbiBlcnJvci4KKyAqLworaW50IGlwNl9za19kc3RfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGRzdF9lbnRyeSAqKmRzdCwgc3RydWN0IGZsb3dpICpmbCkKK3sKKwkqZHN0ID0gTlVMTDsKKwlpZiAoc2spIHsKKwkJKmRzdCA9IHNrX2RzdF9jaGVjayhzaywgaW5ldDZfc2soc2spLT5kc3RfY29va2llKTsKKwkJKmRzdCA9IGlwNl9za19kc3RfY2hlY2soc2ssICpkc3QsIGZsKTsKKwl9CisKKwlyZXR1cm4gaXA2X2RzdF9sb29rdXBfdGFpbChzaywgZHN0LCBmbCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcDZfc2tfZHN0X2xvb2t1cCk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGlwNl91Zm9fYXBwZW5kX2RhdGEoc3RydWN0IHNvY2sgKnNrLAogCQkJaW50IGdldGZyYWcodm9pZCAqZnJvbSwgY2hhciAqdG8sIGludCBvZmZzZXQsIGludCBsZW4sCiAJCQlpbnQgb2RkLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKQEAgLTEwNTAsNyArMTA5NSw3IEBACiAJCQkJc2tiX3ByZXYtPmNzdW0gPSBjc3VtX3N1Yihza2JfcHJldi0+Y3N1bSwKIAkJCQkJCQkgIHNrYi0+Y3N1bSk7CiAJCQkJZGF0YSArPSBmcmFnZ2FwOwotCQkJCXNrYl90cmltKHNrYl9wcmV2LCBtYXhmcmFnbGVuKTsKKwkJCQlwc2tiX3RyaW1fdW5pcXVlKHNrYl9wcmV2LCBtYXhmcmFnbGVuKTsKIAkJCX0KIAkJCWNvcHkgPSBkYXRhbGVuIC0gdHJhbnNoZHJsZW4gLSBmcmFnZ2FwOwogCQkJaWYgKGNvcHkgPCAwKSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcGNvbXA2LmMgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKaW5kZXggN2U0ZDFjMS4uYTgxZTllOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXBjb21wNi5jCisrKyBiL25ldC9pcHY2L2lwY29tcDYuYwpAQCAtNTMsNyArNTMsNyBAQAogCiBzdHJ1Y3QgaXBjb21wNl90Zm1zIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKip0Zm1zOworCXN0cnVjdCBjcnlwdG9fY29tcCAqKnRmbXM7CiAJaW50IHVzZXJzOwogfTsKIApAQCAtNzAsNyArNzAsNyBAQAogCWludCBwbGVuLCBkbGVuOwogCXN0cnVjdCBpcGNvbXBfZGF0YSAqaXBjZCA9IHgtPmRhdGE7CiAJdTggKnN0YXJ0LCAqc2NyYXRjaDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9fY29tcCAqdGZtOwogCWludCBjcHU7CiAKIAlpZiAoc2tiX2xpbmVhcml6ZV9jb3coc2tiKSkKQEAgLTEyOSw3ICsxMjksNyBAQAogCXN0cnVjdCBpcGNvbXBfZGF0YSAqaXBjZCA9IHgtPmRhdGE7CiAJaW50IHBsZW4sIGRsZW47CiAJdTggKnN0YXJ0LCAqc2NyYXRjaDsKLQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCXN0cnVjdCBjcnlwdG9fY29tcCAqdGZtOwogCWludCBjcHU7CiAKIAloZHJfbGVuID0gc2tiLT5oLnJhdyAtIHNrYi0+ZGF0YTsKQEAgLTMwMSw3ICszMDEsNyBAQAogCXJldHVybiBzY3JhdGNoZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGlwY29tcDZfZnJlZV90Zm1zKHN0cnVjdCBjcnlwdG9fdGZtICoqdGZtcykKK3N0YXRpYyB2b2lkIGlwY29tcDZfZnJlZV90Zm1zKHN0cnVjdCBjcnlwdG9fY29tcCAqKnRmbXMpCiB7CiAJc3RydWN0IGlwY29tcDZfdGZtcyAqcG9zOwogCWludCBjcHU7CkBAIC0zMjMsMjggKzMyMywyOCBAQAogCQlyZXR1cm47CiAKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKLQkJY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJCXN0cnVjdCBjcnlwdG9fY29tcCAqdGZtID0gKnBlcl9jcHVfcHRyKHRmbXMsIGNwdSk7CisJCWNyeXB0b19mcmVlX2NvbXAodGZtKTsKIAl9CiAJZnJlZV9wZXJjcHUodGZtcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX3RmbSAqKmlwY29tcDZfYWxsb2NfdGZtcyhjb25zdCBjaGFyICphbGdfbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2NvbXAgKippcGNvbXA2X2FsbG9jX3RmbXMoY29uc3QgY2hhciAqYWxnX25hbWUpCiB7CiAJc3RydWN0IGlwY29tcDZfdGZtcyAqcG9zOwotCXN0cnVjdCBjcnlwdG9fdGZtICoqdGZtczsKKwlzdHJ1Y3QgY3J5cHRvX2NvbXAgKip0Zm1zOwogCWludCBjcHU7CiAKIAkvKiBUaGlzIGNhbiBiZSBhbnkgdmFsaWQgQ1BVIElEIHNvIHdlIGRvbid0IG5lZWQgbG9ja2luZy4gKi8KIAljcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsICZpcGNvbXA2X3RmbXNfbGlzdCwgbGlzdCkgewotCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtOworCQlzdHJ1Y3QgY3J5cHRvX2NvbXAgKnRmbTsKIAogCQl0Zm1zID0gcG9zLT50Zm1zOwogCQl0Zm0gPSAqcGVyX2NwdV9wdHIodGZtcywgY3B1KTsKIAotCQlpZiAoIXN0cmNtcChjcnlwdG9fdGZtX2FsZ19uYW1lKHRmbSksIGFsZ19uYW1lKSkgeworCQlpZiAoIXN0cmNtcChjcnlwdG9fY29tcF9uYW1lKHRmbSksIGFsZ19uYW1lKSkgewogCQkJcG9zLT51c2VycysrOwogCQkJcmV0dXJuIHRmbXM7CiAJCX0KQEAgLTM1OCwxMiArMzU4LDEzIEBACiAJSU5JVF9MSVNUX0hFQUQoJnBvcy0+bGlzdCk7CiAJbGlzdF9hZGQoJnBvcy0+bGlzdCwgJmlwY29tcDZfdGZtc19saXN0KTsKIAotCXBvcy0+dGZtcyA9IHRmbXMgPSBhbGxvY19wZXJjcHUoc3RydWN0IGNyeXB0b190Zm0gKik7CisJcG9zLT50Zm1zID0gdGZtcyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgY3J5cHRvX2NvbXAgKik7CiAJaWYgKCF0Zm1zKQogCQlnb3RvIGVycm9yOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewotCQlzdHJ1Y3QgY3J5cHRvX3RmbSAqdGZtID0gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgMCk7CisJCXN0cnVjdCBjcnlwdG9fY29tcCAqdGZtID0gY3J5cHRvX2FsbG9jX2NvbXAoYWxnX25hbWUsIDAsCisJCQkJCQkJICAgIENSWVBUT19BTEdfQVNZTkMpOwogCQlpZiAoIXRmbSkKIAkJCWdvdG8gZXJyb3I7CiAJCSpwZXJfY3B1X3B0cih0Zm1zLCBjcHUpID0gdGZtOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jIGIvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCmluZGV4IDQzMzI3MjYuLmE1ZWFhZjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYworKysgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogCQlicmVhazsKIAogCWNhc2UgSVBWNl9UQ0xBU1M6Ci0JCWlmICh2YWwgPCAwIHx8IHZhbCA+IDB4ZmYpCisJCWlmICh2YWwgPCAtMSB8fCB2YWwgPiAweGZmKQogCQkJZ290byBlX2ludmFsOwogCQlucC0+dGNsYXNzID0gdmFsOwogCQlyZXR2ID0gMDsKQEAgLTk0Nyw2ICs5NDcsOCBAQAogCiAJY2FzZSBJUFY2X1RDTEFTUzoKIAkJdmFsID0gbnAtPnRjbGFzczsKKwkJaWYgKHZhbCA8IDApCisJCQl2YWwgPSAwOwogCQlicmVhazsKIAogCWNhc2UgSVBWNl9SRUNWVENMQVNTOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggOWQ2OTdkNC4uNjM5ZWIyMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbWNhc3QuYworKysgYi9uZXQvaXB2Ni9tY2FzdC5jCkBAIC0yNjgsMTMgKzI2OCwxNCBAQAogCQkJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG1jX2xzdC0+aWZpbmRleCkpICE9IE5VTEwpIHsKIAkJCQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gaW42X2Rldl9nZXQoZGV2KTsKIAorCQkJCSh2b2lkKSBpcDZfbWNfbGVhdmVfc3JjKHNrLCBtY19sc3QsIGlkZXYpOwogCQkJCWlmIChpZGV2KSB7Ci0JCQkJCSh2b2lkKSBpcDZfbWNfbGVhdmVfc3JjKHNrLG1jX2xzdCxpZGV2KTsKIAkJCQkJX19pcHY2X2Rldl9tY19kZWMoaWRldiwgJm1jX2xzdC0+YWRkcik7CiAJCQkJCWluNl9kZXZfcHV0KGlkZXYpOwogCQkJCX0KIAkJCQlkZXZfcHV0KGRldik7Ci0JCQl9CisJCQl9IGVsc2UKKwkJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBOVUxMKTsKIAkJCXNvY2tfa2ZyZWVfcyhzaywgbWNfbHN0LCBzaXplb2YoKm1jX2xzdCkpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTMzNCwxMyArMzM1LDE0IEBACiAJCWlmIChkZXYpIHsKIAkJCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBpbjZfZGV2X2dldChkZXYpOwogCisJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBpZGV2KTsKIAkJCWlmIChpZGV2KSB7Ci0JCQkJKHZvaWQpIGlwNl9tY19sZWF2ZV9zcmMoc2ssIG1jX2xzdCwgaWRldik7CiAJCQkJX19pcHY2X2Rldl9tY19kZWMoaWRldiwgJm1jX2xzdC0+YWRkcik7CiAJCQkJaW42X2Rldl9wdXQoaWRldik7CiAJCQl9CiAJCQlkZXZfcHV0KGRldik7Ci0JCX0KKwkJfSBlbHNlCisJCQkodm9pZCkgaXA2X21jX2xlYXZlX3NyYyhzaywgbWNfbHN0LCBOVUxMKTsKIAogCQlzb2NrX2tmcmVlX3Moc2ssIG1jX2xzdCwgc2l6ZW9mKCptY19sc3QpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKaW5kZXggZjI2ODk4Yi4uYzlkNmIyMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCkBAIC0xMzk4LDIzICsxMzk4LDM5IEBACiB7CiAJaW50IHJldDsKIAotCXh0X3Byb3RvX2luaXQoQUZfSU5FVDYpOworCXJldCA9IHh0X3Byb3RvX2luaXQoQUZfSU5FVDYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjE7CiAKIAkvKiBOb29uZSBlbHNlIHdpbGwgYmUgZG93bmluZyBzZW0gbm93LCBzbyB3ZSB3b24ndCBzbGVlcCAqLwotCXh0X3JlZ2lzdGVyX3RhcmdldCgmaXA2dF9zdGFuZGFyZF90YXJnZXQpOwotCXh0X3JlZ2lzdGVyX3RhcmdldCgmaXA2dF9lcnJvcl90YXJnZXQpOwotCXh0X3JlZ2lzdGVyX21hdGNoKCZpY21wNl9tYXRjaHN0cnVjdCk7CisJcmV0ID0geHRfcmVnaXN0ZXJfdGFyZ2V0KCZpcDZ0X3N0YW5kYXJkX3RhcmdldCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyMjsKKwlyZXQgPSB4dF9yZWdpc3Rlcl90YXJnZXQoJmlwNnRfZXJyb3JfdGFyZ2V0KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnIzOworCXJldCA9IHh0X3JlZ2lzdGVyX21hdGNoKCZpY21wNl9tYXRjaHN0cnVjdCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyNDsKIAogCS8qIFJlZ2lzdGVyIHNldHNvY2tvcHQgKi8KIAlyZXQgPSBuZl9yZWdpc3Rlcl9zb2Nrb3B0KCZpcDZ0X3NvY2tvcHRzKTsKLQlpZiAocmV0IDwgMCkgewotCQlkdXByaW50ZigiVW5hYmxlIHRvIHJlZ2lzdGVyIHNvY2tvcHRzLlxuIik7Ci0JCXh0X3Byb3RvX2ZpbmkoQUZfSU5FVDYpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnI1OwogCiAJcHJpbnRrKCJpcDZfdGFibGVzOiAoQykgMjAwMC0yMDA2IE5ldGZpbHRlciBDb3JlIFRlYW1cbiIpOwogCXJldHVybiAwOworCitlcnI1OgorCXh0X3VucmVnaXN0ZXJfbWF0Y2goJmljbXA2X21hdGNoc3RydWN0KTsKK2VycjQ6CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwNnRfZXJyb3JfdGFyZ2V0KTsKK2VycjM6CisJeHRfdW5yZWdpc3Rlcl90YXJnZXQoJmlwNnRfc3RhbmRhcmRfdGFyZ2V0KTsKK2VycjI6CisJeHRfcHJvdG9fZmluaShBRl9JTkVUNik7CitlcnIxOgorCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZfdGFibGVzX2Zpbmkodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3Jhdy5jIGIvbmV0L2lwdjYvcmF3LmMKaW5kZXggZDU3ZTYxYy4uMTViODYyZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcmF3LmMKKysrIGIvbmV0L2lwdjYvcmF3LmMKQEAgLTc4MSw3ICs3ODEsNyBAQAogCX0KIAogCWlmICh0Y2xhc3MgPCAwKSB7Ci0JCXRjbGFzcyA9IG5wLT5jb3JrLnRjbGFzczsKKwkJdGNsYXNzID0gbnAtPnRjbGFzczsKIAkJaWYgKHRjbGFzcyA8IDApCiAJCQl0Y2xhc3MgPSAwOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3JvdXRlLmMgYi9uZXQvaXB2Ni9yb3V0ZS5jCmluZGV4IDg3YzM5YzkuLmQ5YmFjYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JvdXRlLmMKKysrIGIvbmV0L2lwdjYvcm91dGUuYwpAQCAtNTMsNiArNTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KICNpbmNsdWRlIDxuZXQveGZybS5oPgorI2luY2x1ZGUgPG5ldC9uZXRldmVudC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNzQyLDYgKzc0Myw3IEBACiAJCQlkc3QtPm1ldHJpY3NbUlRBWF9GRUFUVVJFUy0xXSB8PSBSVEFYX0ZFQVRVUkVfQUxMRlJBRzsKIAkJfQogCQlkc3QtPm1ldHJpY3NbUlRBWF9NVFUtMV0gPSBtdHU7CisJCWNhbGxfbmV0ZXZlbnRfbm90aWZpZXJzKE5FVEVWRU5UX1BNVFVfVVBEQVRFLCBkc3QpOwogCX0KIH0KIApAQCAtMTE1NSw2ICsxMTU3LDcgQEAKIAlzdHJ1Y3QgcnQ2X2luZm8gKnJ0LCAqbnJ0ID0gTlVMTDsKIAlpbnQgc3RyaWN0OwogCXN0cnVjdCBmaWI2X25vZGUgKmZuOworCXN0cnVjdCBuZXRldmVudF9yZWRpcmVjdCBuZXRldmVudDsKIAogCS8qCiAJICogR2V0IHRoZSAiY3VycmVudCIgcm91dGUgZm9yIHRoaXMgZGVzdGluYXRpb24gYW5kCkBAIC0xMjUyLDYgKzEyNTUsMTAgQEAKIAlpZiAoaXA2X2luc19ydChucnQsIE5VTEwsIE5VTEwsIE5VTEwpKQogCQlnb3RvIG91dDsKIAorCW5ldGV2ZW50Lm9sZCA9ICZydC0+dS5kc3Q7CisJbmV0ZXZlbnQubmV3ID0gJm5ydC0+dS5kc3Q7CisJY2FsbF9uZXRldmVudF9ub3RpZmllcnMoTkVURVZFTlRfUkVESVJFQ1QsICZuZXRldmVudCk7CisKIAlpZiAocnQtPnJ0NmlfZmxhZ3MmUlRGX0NBQ0hFKSB7CiAJCWlwNl9kZWxfcnQocnQsIE5VTEwsIE5VTEwsIE5VTEwpOwogCQlyZXR1cm47CkBAIC0xNTI1LDYgKzE1MzIsMTAgQEAKIAogc3RhdGljIGludCBpcDZfcGt0X2Rpc2NhcmQoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlpbnQgdHlwZSA9IGlwdjZfYWRkcl90eXBlKCZza2ItPm5oLmlwdjZoLT5kYWRkcik7CisJaWYgKHR5cGUgPT0gSVBWNl9BRERSX0FOWSB8fCB0eXBlID09IElQVjZfQUREUl9SRVNFUlZFRCkKKwkJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9JTkFERFJFUlJPUlMpOworCiAJSVA2X0lOQ19TVEFUUyhJUFNUQVRTX01JQl9PVVROT1JPVVRFUyk7CiAJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfTk9ST1VURSwgMCwgc2tiLT5kZXYpOwogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggOTIzOTg5ZC4uODAyYTFhNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0yNzAsNyArMjcwLDcgQEAKIAlpbmV0LT5yY3Zfc2FkZHIgPSBMT09QQkFDSzRfSVBWNjsKIAogCXNrLT5za19nc29fdHlwZSA9IFNLQl9HU09fVENQVjY7Ci0JaXA2X2RzdF9zdG9yZShzaywgZHN0LCBOVUxMKTsKKwlfX2lwNl9kc3Rfc3RvcmUoc2ssIGRzdCwgTlVMTCk7CiAKIAlpY3NrLT5pY3NrX2V4dF9oZHJfbGVuID0gMDsKIAlpZiAobnAtPm9wdCkKQEAgLTQyNyw3ICs0MjcsNiBAQAogCWNhc2UgVENQX1NZTl9SRUNWOiAgLyogQ2Fubm90IGhhcHBlbi4KIAkJCSAgICAgICBJdCBjYW4sIGl0IFNZTnMgYXJlIGNyb3NzZWQuIC0tQU5LICovIAogCQlpZiAoIXNvY2tfb3duZWRfYnlfdXNlcihzaykpIHsKLQkJCVRDUF9JTkNfU1RBVFNfQkgoVENQX01JQl9BVFRFTVBURkFJTFMpOwogCQkJc2stPnNrX2VyciA9IGVycjsKIAkJCXNrLT5za19lcnJvcl9yZXBvcnQoc2spOwkJLyogV2FrZSBwZW9wbGUgdXAgdG8gc2VlIHRoZSBlcnJvciAoc2VlIGNvbm5lY3QgaW4gc29jay5jKSAqLwogCkBAIC04MzEsNyArODMwLDYgQEAKIAlpZiAocmVxKQogCQlyZXFza19mcmVlKHJlcSk7CiAKLQlUQ1BfSU5DX1NUQVRTX0JIKFRDUF9NSUJfQVRURU1QVEZBSUxTKTsKIAlyZXR1cm4gMDsgLyogZG9uJ3Qgc2VuZCByZXNldCAqLwogfQogCkBAIC05NDYsOCArOTQ0LDggQEAKIAkgKiBjb21tZW50IGluIHRoYXQgZnVuY3Rpb24gZm9yIHRoZSBnb3J5IGRldGFpbHMuIC1hY21lCiAJICovCiAKLQlzay0+c2tfZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY2OwotCWlwNl9kc3Rfc3RvcmUobmV3c2ssIGRzdCwgTlVMTCk7CisJbmV3c2stPnNrX2dzb190eXBlID0gU0tCX0dTT19UQ1BWNjsKKwlfX2lwNl9kc3Rfc3RvcmUobmV3c2ssIGRzdCwgTlVMTCk7CiAKIAluZXd0Y3A2c2sgPSAoc3RydWN0IHRjcDZfc29jayAqKW5ld3NrOwogCWluZXRfc2sobmV3c2spLT5waW5ldDYgPSAmbmV3dGNwNnNrLT5pbmV0NjsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3VkcC5jIGIvbmV0L2lwdjYvdWRwLmMKaW5kZXggY2NjNTdmNC4uM2Q1NGYyNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdWRwLmMKKysrIGIvbmV0L2lwdjYvdWRwLmMKQEAgLTc4Miw3ICs3ODIsNyBAQAogCQljb25uZWN0ZWQgPSAwOwogCX0KIAotCWVyciA9IGlwNl9kc3RfbG9va3VwKHNrLCAmZHN0LCBmbCk7CisJZXJyID0gaXA2X3NrX2RzdF9sb29rdXAoc2ssICZkc3QsIGZsKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAlpZiAoZmluYWxfcCkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jIGIvbmV0L2lwdjYveGZybTZfb3V0cHV0LmMKaW5kZXggMGVlYTYwZS4uYzhjOGI0NGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCkBAIC0xMjUsNyArMTI1LDcgQEAKIAlpZiAoIXNrYl9pc19nc28oc2tiKSkKIAkJcmV0dXJuIHhmcm02X291dHB1dF9maW5pc2gyKHNrYik7CiAKLQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOworCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUFY2KTsKIAlzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJaWYgKHVubGlrZWx5KElTX0VSUihzZWdzKSkpCmRpZmYgLS1naXQgYS9uZXQvaXB4L2FmX2lweC5jIGIvbmV0L2lweC9hZl9pcHguYwppbmRleCBhYTM0ZmY0Li5iZWYzZjYxIDEwMDY0NAotLS0gYS9uZXQvaXB4L2FmX2lweC5jCisrKyBiL25ldC9pcHgvYWZfaXB4LmMKQEAgLTE2NDIsMTMgKzE2NDIsMTcgQEAKIAlpZiAoKHNrYiA9IHNrYl9zaGFyZV9jaGVjayhza2IsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCWlweAkJPSBpcHhfaGRyKHNrYik7Ci0JaXB4X3BrdHNpemUJPSBudG9ocyhpcHgtPmlweF9wa3RzaXplKTsKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlweGhkcikpKQorCQlnb3RvIGRyb3A7CisKKwlpcHhfcGt0c2l6ZSA9IG50b2hzKGlweF9oZHIoc2tiKS0+aXB4X3BrdHNpemUpOwogCQogCS8qIFRvbyBzbWFsbCBvciBpbnZhbGlkIGhlYWRlcj8gKi8KLQlpZiAoaXB4X3BrdHNpemUgPCBzaXplb2Yoc3RydWN0IGlweGhkcikgfHwgaXB4X3BrdHNpemUgPiBza2ItPmxlbikKKwlpZiAoaXB4X3BrdHNpemUgPCBzaXplb2Yoc3RydWN0IGlweGhkcikgfHwKKwkgICAgIXBza2JfbWF5X3B1bGwoc2tiLCBpcHhfcGt0c2l6ZSkpCiAJCWdvdG8gZHJvcDsKICAgICAgICAgICAgICAgICAgICAgICAgIAorCWlweCA9IGlweF9oZHIoc2tiKTsKIAlpZiAoaXB4LT5pcHhfY2hlY2tzdW0gIT0gSVBYX05PX0NIRUNLU1VNICYmCiAJICAgaXB4LT5pcHhfY2hlY2tzdW0gIT0gaXB4X2Nrc3VtKGlweCwgaXB4X3BrdHNpemUpKQogCQlnb3RvIGRyb3A7CmRpZmYgLS1naXQgYS9uZXQvbGFwYi9sYXBiX2lmYWNlLmMgYi9uZXQvbGFwYi9sYXBiX2lmYWNlLmMKaW5kZXggZDUwNGVlZC4uN2U2YmM0MSAxMDA2NDQKLS0tIGEvbmV0L2xhcGIvbGFwYl9pZmFjZS5jCisrKyBiL25ldC9sYXBiL2xhcGJfaWZhY2UuYwpAQCAtMjM4LDExICsyMzgsMTMgQEAKIAkJZ290byBvdXRfcHV0OwogCiAJaWYgKGxhcGItPnN0YXRlID09IExBUEJfU1RBVEVfMCkgewotCQlpZiAoKChwYXJtcy0+bW9kZSAmIExBUEJfRVhURU5ERUQpICYmCi0JCSAgICAgKHBhcm1zLT53aW5kb3cgPCAxIHx8IHBhcm1zLT53aW5kb3cgPiAxMjcpKSB8fAotCQkgICAgKHBhcm1zLT53aW5kb3cgPCAxIHx8IHBhcm1zLT53aW5kb3cgPiA3KSkKLQkJCWdvdG8gb3V0X3B1dDsKLQorCQlpZiAocGFybXMtPm1vZGUgJiBMQVBCX0VYVEVOREVEKSB7CisJCQlpZiAocGFybXMtPndpbmRvdyA8IDEgfHwgcGFybXMtPndpbmRvdyA+IDEyNykKKwkJCQlnb3RvIG91dF9wdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAocGFybXMtPndpbmRvdyA8IDEgfHwgcGFybXMtPndpbmRvdyA+IDcpCisJCQkJZ290byBvdXRfcHV0OworCQl9CiAJCWxhcGItPm1vZGUgICAgPSBwYXJtcy0+bW9kZTsKIAkJbGFwYi0+d2luZG93ICA9IHBhcm1zLT53aW5kb3c7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggZDZjZmU4NC4uMjY1MmVhZCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC03ODQsMjQgKzc4NCwyMCBAQAogCQljb3BpZWQgKz0gdXNlZDsKIAkJbGVuIC09IHVzZWQ7CiAKLQkJaWYgKHVzZWQgKyBvZmZzZXQgPCBza2ItPmxlbikKLQkJCWNvbnRpbnVlOwotCiAJCWlmICghKGZsYWdzICYgTVNHX1BFRUspKSB7CiAJCQlza19lYXRfc2tiKHNrLCBza2IsIDApOwogCQkJKnNlcSA9IDA7CiAJCX0KKworCQkvKiBGb3Igbm9uIHN0cmVhbSBwcm90Y29scyB3ZSBnZXQgb25lIHBhY2tldCBwZXIgcmVjdm1zZyBjYWxsICovCisJCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1NUUkVBTSkKKwkJCWdvdG8gY29weV91YWRkcjsKKworCQkvKiBQYXJ0aWFsIHJlYWQgKi8KKwkJaWYgKHVzZWQgKyBvZmZzZXQgPCBza2ItPmxlbikKKwkJCWNvbnRpbnVlOwogCX0gd2hpbGUgKGxlbiA+IDApOwogCi0JLyogCi0JICogQWNjb3JkaW5nIHRvIFVOSVg5OCwgbXNnX25hbWUvbXNnX25hbWVsZW4gYXJlIGlnbm9yZWQKLQkgKiBvbiBjb25uZWN0ZWQgc29ja2V0LiAtQU5LCi0JICogQnV0Li4uIGFmX2xsYyBzdGlsbCBkb2Vzbid0IGhhdmUgc2VwYXJhdGUgc2V0cyBvZiBtZXRob2RzIGZvcgotCSAqIFNPQ0tfREdSQU0gYW5kIFNPQ0tfU1RSRUFNIDotKCBTbyB3ZSBoYXZlIHRvIGRvIHRoaXMgdGVzdCwgd2lsbAotCSAqIGV2ZW50dWFsbHkgZml4IHRoaXMgdGhvIDotKSAtYWNtZQotCSAqLwotCWlmIChzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNKQotCQlnb3RvIGNvcHlfdWFkZHI7CiBvdXQ6CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gY29waWVkOwpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc2FwLmMgYi9uZXQvbGxjL2xsY19zYXAuYwppbmRleCAyMGM0ZWI1Li42MWNiOGNmIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19zYXAuYworKysgYi9uZXQvbGxjL2xsY19zYXAuYwpAQCAtNTEsMTAgKzUxLDEwIEBACiB7CiAJc3RydWN0IHNvY2thZGRyX2xsYyAqYWRkcjsKIAotCWlmIChza2ItPnNrLT5za190eXBlID09IFNPQ0tfU1RSRUFNKSAvKiBTZWUgVU5JWDk4ICovCi0JCXJldHVybjsKICAgICAgICAvKiBzYXZlIHByaW1pdGl2ZSBmb3IgdXNlIGJ5IHRoZSB1c2VyLiAqLwogCWFkZHIJCSAgPSBsbGNfdWlfc2tiX2NiKHNrYik7CisKKwltZW1zZXQoYWRkciwgMCwgc2l6ZW9mKCphZGRyKSk7CiAJYWRkci0+c2xsY19mYW1pbHkgPSBzay0+c2tfZmFtaWx5OwogCWFkZHItPnNsbGNfYXJwaHJkID0gc2tiLT5kZXYtPnR5cGU7CiAJYWRkci0+c2xsY190ZXN0ICAgPSBwcmltID09IExMQ19URVNUX1BSSU07CkBAIC0zMzAsNiArMzMwLDkgQEAKIAkJaWYgKGxsYy0+bGFkZHIubHNhcCAhPSBsYWRkci0+bHNhcCkKIAkJCWNvbnRpbnVlOwogCisJCWlmIChsbGMtPmRldiAhPSBza2ItPmRldikKKwkJCWNvbnRpbnVlOworCiAJCXNrYjEgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IxKQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggYWY0ODQ1OS4uNjUyN2Q0ZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYwpAQCAtNDI5LDkgKzQyOSw5IEBACiAJCQljYi0+YXJnc1swXSwgKmlkKTsKIAogCXJlYWRfbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOworCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKIAlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBuZl9jb25udHJhY2tfaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKIAkJbGlzdF9mb3JfZWFjaF9wcmV2KGksICZuZl9jb25udHJhY2tfaGFzaFtjYi0+YXJnc1swXV0pIHsKIAkJCWggPSAoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICopIGk7CiAJCQlpZiAoRElSRUNUSU9OKGgpICE9IElQX0NUX0RJUl9PUklHSU5BTCkKQEAgLTQ0MiwxMyArNDQyLDEwIEBACiAJCQkgKiB0aGVuIGR1bXAgZXZlcnl0aGluZy4gKi8KIAkJCWlmIChsM3Byb3RvICYmIEwzUFJPVE8oY3QpICE9IGwzcHJvdG8pCiAJCQkJY29udGludWU7Ci0JCQlpZiAobGFzdCAhPSBOVUxMKSB7Ci0JCQkJaWYgKGN0ID09IGxhc3QpIHsKLQkJCQkJbmZfY3RfcHV0KGxhc3QpOwotCQkJCQljYi0+YXJnc1sxXSA9IDA7Ci0JCQkJCWxhc3QgPSBOVUxMOwotCQkJCX0gZWxzZQorCQkJaWYgKGNiLT5hcmdzWzFdKSB7CisJCQkJaWYgKGN0ICE9IGxhc3QpCiAJCQkJCWNvbnRpbnVlOworCQkJCWNiLT5hcmdzWzFdID0gMDsKIAkJCX0KIAkJCWlmIChjdG5ldGxpbmtfZmlsbF9pbmZvKHNrYiwgTkVUTElOS19DQihjYi0+c2tiKS5waWQsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgIAljYi0+bmxoLT5ubG1zZ19zZXEsCkBAIC00NTksMTcgKzQ1NiwxNyBAQAogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9Ci0JCWlmIChsYXN0ICE9IE5VTEwpIHsKLQkJCW5mX2N0X3B1dChsYXN0KTsKKwkJaWYgKGNiLT5hcmdzWzFdKSB7CiAJCQljYi0+YXJnc1sxXSA9IDA7CiAJCQlnb3RvIHJlc3RhcnQ7CiAJCX0KIAl9CiBvdXQ6CiAJcmVhZF91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKKwlpZiAobGFzdCkKKwkJbmZfY3RfcHV0KGxhc3QpOwogCiAJREVCVUdQKCJsZWF2aW5nLCBsYXN0IGJ1Y2tldD0lbHUgaWQ9JXVcbiIsIGNiLT5hcmdzWzBdLCAqaWQpOwotCiAJcmV0dXJuIHNrYi0+bGVuOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCmluZGV4IDYxY2RkYTQuLmI1OWQzYjIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2xvZy5jCkBAIC0zNjYsNiArMzY2LDkgQEAKIAlpZiAodGltZXJfcGVuZGluZygmaW5zdC0+dGltZXIpKQogCQlkZWxfdGltZXIoJmluc3QtPnRpbWVyKTsKIAorCWlmICghaW5zdC0+c2tiKQorCQlyZXR1cm4gMDsKKwogCWlmIChpbnN0LT5xbGVuID4gMSkKIAkJaW5zdC0+bGFzdG5saC0+bmxtc2dfdHlwZSA9IE5MTVNHX0RPTkU7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfU0VDTUFSSy5jIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKaW5kZXggYzJjZTljNC4uZGU5NTM3YSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKKysrIGIvbmV0L25ldGZpbHRlci94dF9TRUNNQVJLLmMKQEAgLTU3LDYgKzU3LDggQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gKnNlbCA9ICZpbmZvLT51LnNlbDsKKwkKKwlzZWwtPnNlbGN0eFtTRUNNQVJLX1NFTENUWF9NQVggLSAxXSA9ICdcMCc7CiAKIAllcnIgPSBzZWxpbnV4X3N0cmluZ190b19zaWQoc2VsLT5zZWxjdHgsICZzZWwtPnNlbHNpZCk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9waHlzZGV2LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwppbmRleCBhOWY0ZjZmLi42M2E5NjU0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuYwpAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9waHlzZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9xdW90YS5jIGIvbmV0L25ldGZpbHRlci94dF9xdW90YS5jCmluZGV4IDRjZGJhNzQuLmJlOGQzYzIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfcXVvdGEuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3F1b3RhLmMKQEAgLTExLDYgKzExLDggQEAKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiU2FtIEpvaG5zdG9uIDxzYW1qQHNhbWoubmV0PiIpOworTU9EVUxFX0FMSUFTKCJpcHRfcXVvdGEiKTsKK01PRFVMRV9BTElBUygiaXA2dF9xdW90YSIpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHF1b3RhX2xvY2spOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jIGIvbmV0L25ldGZpbHRlci94dF9zdHJpbmcuYwppbmRleCAwZWJiNmFjLi4yNzUzMzBmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X3N0cmluZy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfc3RyaW5nLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAogCXJldHVybiAoc2tiX2ZpbmRfdGV4dCgoc3RydWN0IHNrX2J1ZmYgKilza2IsIGNvbmYtPmZyb21fb2Zmc2V0LCAKIAkJCSAgICAgY29uZi0+dG9fb2Zmc2V0LCBjb25mLT5jb25maWcsICZzdGF0ZSkgCi0JCQkgICAgICE9IFVJTlRfTUFYKSAmJiAhY29uZi0+aW52ZXJ0OworCQkJICAgICAhPSBVSU5UX01BWCkgXiBjb25mLT5pbnZlcnQ7CiB9CiAKICNkZWZpbmUgU1RSSU5HX1RFWFRfUFJJVihtKSAoKHN0cnVjdCB4dF9zdHJpbmdfaW5mbyAqKSBtKQpAQCAtNTUsNyArNTUsMTAgQEAKIAkvKiBEYW1uLCBjYW4ndCBoYW5kbGUgdGhpcyBjYXNlIHByb3Blcmx5IHdpdGggaXB0YWJsZXMuLi4gKi8KIAlpZiAoY29uZi0+ZnJvbV9vZmZzZXQgPiBjb25mLT50b19vZmZzZXQpCiAJCXJldHVybiAwOwotCisJaWYgKGNvbmYtPmFsZ29bWFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRSAtIDFdICE9ICdcMCcpCisJICAgIAlyZXR1cm4gMDsKKwlpZiAoY29uZi0+cGF0bGVuID4gWFRfU1RSSU5HX01BWF9QQVRURVJOX1NJWkUpCisJCXJldHVybiAwOwogCXRzX2NvbmYgPSB0ZXh0c2VhcmNoX3ByZXBhcmUoY29uZi0+YWxnbywgY29uZi0+cGF0dGVybiwgY29uZi0+cGF0bGVuLAogCQkJCSAgICAgR0ZQX0tFUk5FTCwgVFNfQVVUT0xPQUQpOwogCWlmIChJU19FUlIodHNfY29uZikpCmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKaW5kZXggYjg1YzFmOS4uOGI4NTAzNiAxMDA2NDQKLS0tIGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYwpAQCAtMTI3Myw4ICsxMjczLDcgQEAKIAlzdHJ1Y3QgbmV0bGlua19zb2NrICpubGs7CiAJdW5zaWduZWQgbG9uZyAqbGlzdGVuZXJzID0gTlVMTDsKIAotCWlmICghbmxfdGFibGUpCi0JCXJldHVybiBOVUxMOworCUJVR19PTighbmxfdGFibGUpOwogCiAJaWYgKHVuaXQ8MCB8fCB1bml0Pj1NQVhfTElOS1MpCiAJCXJldHVybiBOVUxMOwpAQCAtMTc0NSwxMSArMTc0NCw4IEBACiAJCW5ldGxpbmtfc2tiX3Bhcm1zX3Rvb19sYXJnZSgpOwogCiAJbmxfdGFibGUgPSBrY2FsbG9jKE1BWF9MSU5LUywgc2l6ZW9mKCpubF90YWJsZSksIEdGUF9LRVJORUwpOwotCWlmICghbmxfdGFibGUpIHsKLWVub21lbToKLQkJcHJpbnRrKEtFUk5fQ1JJVCAibmV0bGlua19pbml0OiBDYW5ub3QgYWxsb2NhdGUgbmxfdGFibGVcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9CisJaWYgKCFubF90YWJsZSkKKwkJZ290byBwYW5pYzsKIAogCWlmIChudW1fcGh5c3BhZ2VzID49ICgxMjggKiAxMDI0KSkKIAkJbWF4ID0gbnVtX3BoeXNwYWdlcyA+PiAoMjEgLSBQQUdFX1NISUZUKTsKQEAgLTE3NjksNyArMTc2NSw3IEBACiAJCQkJbmxfcGlkX2hhc2hfZnJlZShubF90YWJsZVtpXS5oYXNoLnRhYmxlLAogCQkJCQkJIDEgKiBzaXplb2YoKmhhc2gtPnRhYmxlKSk7CiAJCQlrZnJlZShubF90YWJsZSk7Ci0JCQlnb3RvIGVub21lbTsKKwkJCWdvdG8gcGFuaWM7CiAJCX0KIAkJbWVtc2V0KGhhc2gtPnRhYmxlLCAwLCAxICogc2l6ZW9mKCpoYXNoLT50YWJsZSkpOwogCQloYXNoLT5tYXhfc2hpZnQgPSBvcmRlcjsKQEAgLTE3ODYsNiArMTc4Miw4IEBACiAJcnRuZXRsaW5rX2luaXQoKTsKIG91dDoKIAlyZXR1cm4gZXJyOworcGFuaWM6CisJcGFuaWMoIm5ldGxpbmtfaW5pdDogQ2Fubm90IGFsbG9jYXRlIG5sX3RhYmxlXG4iKTsKIH0KIAogY29yZV9pbml0Y2FsbChuZXRsaW5rX3Byb3RvX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggZjljZWYzNi4uNDE3MmE1MiAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC02MjYsOCArNjI2LDYgQEAKIAkJaWYgKChpbnQpc25hcGxlbiA8IDApCiAJCQlzbmFwbGVuID0gMDsKIAl9Ci0JaWYgKHNuYXBsZW4gPiBza2ItPmxlbi1za2ItPmRhdGFfbGVuKQotCQlzbmFwbGVuID0gc2tiLT5sZW4tc2tiLT5kYXRhX2xlbjsKIAogCXNwaW5fbG9jaygmc2stPnNrX3JlY2VpdmVfcXVldWUubG9jayk7CiAJaCA9IChzdHJ1Y3QgdHBhY2tldF9oZHIgKilwYWNrZXRfbG9va3VwX2ZyYW1lKHBvLCBwby0+aGVhZCk7CkBAIC02NDQsNyArNjQyLDcgQEAKIAkJc3RhdHVzICY9IH5UUF9TVEFUVVNfTE9TSU5HOwogCXNwaW5fdW5sb2NrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZS5sb2NrKTsKIAotCW1lbWNweSgodTgqKWggKyBtYWNvZmYsIHNrYi0+ZGF0YSwgc25hcGxlbik7CisJc2tiX2NvcHlfYml0cyhza2IsIDAsICh1OCopaCArIG1hY29mZiwgc25hcGxlbik7CiAKIAloLT50cF9sZW4gPSBza2ItPmxlbjsKIAloLT50cF9zbmFwbGVuID0gc25hcGxlbjsKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfdTMyLmMgYi9uZXQvc2NoZWQvY2xzX3UzMi5jCmluZGV4IGVlYTM2NjkuLjBhNmNmYTAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfdTMyLmMKKysrIGIvbmV0L3NjaGVkL2Nsc191MzIuYwpAQCAtNzk2LDcgKzc5Niw3IEBACiB7CiAJcHJpbnRrKCJ1MzIgY2xhc3NpZmllclxuIik7CiAjaWZkZWYgQ09ORklHX0NMU19VMzJfUEVSRgotCXByaW50aygiICAgIFBlcmZvbWFuY2UgY291bnRlcnMgb25cbiIpOworCXByaW50aygiICAgIFBlcmZvcm1hbmNlIGNvdW50ZXJzIG9uXG4iKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1BPTElDRQogCXByaW50aygiICAgIE9MRCBwb2xpY2VyIG9uIFxuIik7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCBjNzg0NGJhLi5hMTllZmYxMiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAl9CiAjZW5kaWYKIAotCWVyciA9IC1FSU5WQUw7CisJZXJyID0gLUVOT0VOVDsKIAlpZiAob3BzID09IE5VTEwpCiAJCWdvdG8gZXJyX291dDsKIApkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwppbmRleCAwODM0YzJlLi42ZjkxNTE4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYworKysgYi9uZXQvc2NoZWQvc2NoX2dlbmVyaWMuYwpAQCAtMjM4LDkgKzIzOCw3IEBACiAKIHN0YXRpYyB2b2lkIGRldl93YXRjaGRvZ191cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCW5ldGlmX3R4X2xvY2tfYmgoZGV2KTsKIAlfX25ldGRldl93YXRjaGRvZ191cChkZXYpOwotCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOwogfQogCiBzdGF0aWMgdm9pZCBkZXZfd2F0Y2hkb2dfZG93bihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYyBiL25ldC9zY3RwL2VuZHBvaW50b2xhLmMKaW5kZXggZmZkYTFkNi4uMzVjNDlmZiAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvZW5kcG9pbnRvbGEuYworKysgYi9uZXQvc2N0cC9lbmRwb2ludG9sYS5jCkBAIC0xNzMsNyArMTczLDcgQEAKIAlTQ1RQX0FTU0VSVChlcC0+YmFzZS5kZWFkLCAiRW5kcG9pbnQgaXMgbm90IGRlYWQiLCByZXR1cm4pOwogCiAJLyogRnJlZSB1cCB0aGUgSE1BQyB0cmFuc2Zvcm0uICovCi0Jc2N0cF9jcnlwdG9fZnJlZV90Zm0oc2N0cF9zayhlcC0+YmFzZS5zayktPmhtYWMpOworCWNyeXB0b19mcmVlX2hhc2goc2N0cF9zayhlcC0+YmFzZS5zayktPmhtYWMpOwogCiAJLyogQ2xlYW51cC4gKi8KIAlzY3RwX2lucV9mcmVlKCZlcC0+YmFzZS5pbnF1ZXVlKTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwppbmRleCA0ZjExZjU4Li43NzQ1YmRlIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKKysrIGIvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCkBAIC04MDYsMzggKzgwNiwyNiBAQAogCiAvKiBIZWxwZXIgdG8gY3JlYXRlIEFCT1JUIHdpdGggYSBTQ1RQX0VSUk9SX1VTRVJfQUJPUlQgZXJyb3IuICAqLwogc3RydWN0IHNjdHBfY2h1bmsgKnNjdHBfbWFrZV9hYm9ydF91c2VyKGNvbnN0IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJCSAgIGNvbnN0IHN0cnVjdCBzY3RwX2NodW5rICpjaHVuaywKLQkJCQkgICBjb25zdCBzdHJ1Y3QgbXNnaGRyICptc2cpCisJCQkJCWNvbnN0IHN0cnVjdCBtc2doZHIgKm1zZywKKwkJCQkJc2l6ZV90IHBheWxlbikKIHsKIAlzdHJ1Y3Qgc2N0cF9jaHVuayAqcmV0dmFsOwotCXZvaWQgKnBheWxvYWQgPSBOVUxMLCAqcGF5b2ZmOwotCXNpemVfdCBwYXlsZW4gPSAwOwotCXN0cnVjdCBpb3ZlYyAqaW92ID0gTlVMTDsKLQlpbnQgaW92bGVuID0gMDsKKwl2b2lkICpwYXlsb2FkID0gTlVMTDsKKwlpbnQgZXJyOwogCi0JaWYgKG1zZykgewotCQlpb3YgPSBtc2ctPm1zZ19pb3Y7Ci0JCWlvdmxlbiA9IG1zZy0+bXNnX2lvdmxlbjsKLQkJcGF5bGVuID0gZ2V0X3VzZXJfaW92X3NpemUoaW92LCBpb3ZsZW4pOwotCX0KLQotCXJldHZhbCA9IHNjdHBfbWFrZV9hYm9ydChhc29jLCBjaHVuaywgc2l6ZW9mKHNjdHBfZXJyaGRyX3QpICsgcGF5bGVuKTsKKwlyZXR2YWwgPSBzY3RwX21ha2VfYWJvcnQoYXNvYywgTlVMTCwgc2l6ZW9mKHNjdHBfZXJyaGRyX3QpICsgcGF5bGVuKTsKIAlpZiAoIXJldHZhbCkKIAkJZ290byBlcnJfY2h1bms7CiAKIAlpZiAocGF5bGVuKSB7CiAJCS8qIFB1dCB0aGUgbXNnX2lvdiB0b2dldGhlciBpbnRvIHBheWxvYWQuICAqLwotCQlwYXlsb2FkID0ga21hbGxvYyhwYXlsZW4sIEdGUF9BVE9NSUMpOworCQlwYXlsb2FkID0ga21hbGxvYyhwYXlsZW4sIEdGUF9LRVJORUwpOwogCQlpZiAoIXBheWxvYWQpCiAJCQlnb3RvIGVycl9wYXlsb2FkOwotCQlwYXlvZmYgPSBwYXlsb2FkOwogCi0JCWZvciAoOyBpb3ZsZW4gPiAwOyAtLWlvdmxlbikgewotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBheW9mZiwgaW92LT5pb3ZfYmFzZSxpb3YtPmlvdl9sZW4pKQotCQkJCWdvdG8gZXJyX2NvcHk7Ci0JCQlwYXlvZmYgKz0gaW92LT5pb3ZfbGVuOwotCQkJaW92Kys7Ci0JCX0KKwkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlYyhwYXlsb2FkLCBtc2ctPm1zZ19pb3YsIHBheWxlbik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJfY29weTsKIAl9CiAKIAlzY3RwX2luaXRfY2F1c2UocmV0dmFsLCBTQ1RQX0VSUk9SX1VTRVJfQUJPUlQsIHBheWxvYWQsIHBheWxlbik7CkBAIC0xMjk0LDEwICsxMjgyLDggQEAKIAogCXJldHZhbCA9IGttYWxsb2MoKmNvb2tpZV9sZW4sIEdGUF9BVE9NSUMpOwogCi0JaWYgKCFyZXR2YWwpIHsKLQkJKmNvb2tpZV9sZW4gPSAwOworCWlmICghcmV0dmFsKQogCQlnb3RvIG5vZGF0YTsKLQl9CiAKIAkvKiBDbGVhciB0aGlzIG1lbW9yeSBzaW5jZSB3ZSBhcmUgc2VuZGluZyB0aGlzIGRhdGEgc3RydWN0dXJlCiAJICogb3V0IG9uIHRoZSBuZXR3b3JrLgpAQCAtMTMzMywxOSArMTMxOSwyOSBAQAogCSAgICAgICBudG9ocyhpbml0X2NodW5rLT5jaHVua19oZHItPmxlbmd0aCksIHJhd19hZGRycywgYWRkcnNfbGVuKTsKIAogICAJaWYgKHNjdHBfc2soZXAtPmJhc2Uuc2spLT5obWFjKSB7CisJCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKKwogCQkvKiBTaWduIHRoZSBtZXNzYWdlLiAgKi8KIAkJc2cucGFnZSA9IHZpcnRfdG9fcGFnZSgmY29va2llLT5jKTsKIAkJc2cub2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpKCZjb29raWUtPmMpICUgUEFHRV9TSVpFOwogCQlzZy5sZW5ndGggPSBib2R5c2l6ZTsKIAkJa2V5bGVuID0gU0NUUF9TRUNSRVRfU0laRTsKIAkJa2V5ID0gKGNoYXIgKillcC0+c2VjcmV0X2tleVtlcC0+Y3VycmVudF9rZXldOworICAJCWRlc2MudGZtID0gc2N0cF9zayhlcC0+YmFzZS5zayktPmhtYWM7CisgIAkJZGVzYy5mbGFncyA9IDA7CiAKLQkJc2N0cF9jcnlwdG9faG1hYyhzY3RwX3NrKGVwLT5iYXNlLnNrKS0+aG1hYywga2V5LCAma2V5bGVuLAotCQkJCSAmc2csIDEsIGNvb2tpZS0+c2lnbmF0dXJlKTsKKwkJaWYgKGNyeXB0b19oYXNoX3NldGtleShkZXNjLnRmbSwga2V5LCBrZXlsZW4pIHx8CisJCSAgICBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZzZywgYm9keXNpemUsIGNvb2tpZS0+c2lnbmF0dXJlKSkKKwkJCWdvdG8gZnJlZV9jb29raWU7CiAJfQogCi1ub2RhdGE6CiAJcmV0dXJuIHJldHZhbDsKKworZnJlZV9jb29raWU6CisJa2ZyZWUocmV0dmFsKTsKK25vZGF0YToKKwkqY29va2llX2xlbiA9IDA7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIFVucGFjayB0aGUgY29va2llIGZyb20gQ09PS0lFIEVDSE8gY2h1bmssIHJlY3JlYXRpbmcgdGhlIGFzc29jaWF0aW9uLiAgKi8KQEAgLTEzNjYsNiArMTM2Miw3IEBACiAJc2N0cF9zY29wZV90IHNjb3BlOwogCXN0cnVjdCBza19idWZmICpza2IgPSBjaHVuay0+c2tiOwogCXN0cnVjdCB0aW1ldmFsIHR2OworCXN0cnVjdCBoYXNoX2Rlc2MgZGVzYzsKIAogCS8qIEhlYWRlciBzaXplIGlzIHN0YXRpYyBkYXRhIHByaW9yIHRvIHRoZSBhY3R1YWwgY29va2llLCBpbmNsdWRpbmcKIAkgKiBhbnkgcGFkZGluZy4KQEAgLTE0MDEsMTcgKzEzOTgsMjUgQEAKIAlzZy5vZmZzZXQgPSAodW5zaWduZWQgbG9uZykoYmVhcl9jb29raWUpICUgUEFHRV9TSVpFOwogCXNnLmxlbmd0aCA9IGJvZHlzaXplOwogCWtleSA9IChjaGFyICopZXAtPnNlY3JldF9rZXlbZXAtPmN1cnJlbnRfa2V5XTsKKwlkZXNjLnRmbSA9IHNjdHBfc2soZXAtPmJhc2Uuc2spLT5obWFjOworCWRlc2MuZmxhZ3MgPSAwOwogCiAJbWVtc2V0KGRpZ2VzdCwgMHgwMCwgU0NUUF9TSUdOQVRVUkVfU0laRSk7Ci0Jc2N0cF9jcnlwdG9faG1hYyhzY3RwX3NrKGVwLT5iYXNlLnNrKS0+aG1hYywga2V5LCAma2V5bGVuLCAmc2csCi0JCQkgMSwgZGlnZXN0KTsKKwlpZiAoY3J5cHRvX2hhc2hfc2V0a2V5KGRlc2MudGZtLCBrZXksIGtleWxlbikgfHwKKwkgICAgY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCAmc2csIGJvZHlzaXplLCBkaWdlc3QpKSB7CisJCSplcnJvciA9IC1TQ1RQX0lFUlJPUl9OT01FTTsKKwkJZ290byBmYWlsOworCX0KIAogCWlmIChtZW1jbXAoZGlnZXN0LCBjb29raWUtPnNpZ25hdHVyZSwgU0NUUF9TSUdOQVRVUkVfU0laRSkpIHsKIAkJLyogVHJ5IHRoZSBwcmV2aW91cyBrZXkuICovCiAJCWtleSA9IChjaGFyICopZXAtPnNlY3JldF9rZXlbZXAtPmxhc3Rfa2V5XTsKIAkJbWVtc2V0KGRpZ2VzdCwgMHgwMCwgU0NUUF9TSUdOQVRVUkVfU0laRSk7Ci0JCXNjdHBfY3J5cHRvX2htYWMoc2N0cF9zayhlcC0+YmFzZS5zayktPmhtYWMsIGtleSwgJmtleWxlbiwKLQkJCQkgJnNnLCAxLCBkaWdlc3QpOworCQlpZiAoY3J5cHRvX2hhc2hfc2V0a2V5KGRlc2MudGZtLCBrZXksIGtleWxlbikgfHwKKwkJICAgIGNyeXB0b19oYXNoX2RpZ2VzdCgmZGVzYywgJnNnLCBib2R5c2l6ZSwgZGlnZXN0KSkgeworCQkJKmVycm9yID0gLVNDVFBfSUVSUk9SX05PTUVNOworCQkJZ290byBmYWlsOworCQl9CiAKIAkJaWYgKG1lbWNtcChkaWdlc3QsIGNvb2tpZS0+c2lnbmF0dXJlLCBTQ1RQX1NJR05BVFVSRV9TSVpFKSkgewogCQkJLyogWWlrZXMhICBTdGlsbCBiYWQgc2lnbmF0dXJlISAqLwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMgYi9uZXQvc2N0cC9zbV9zdGF0ZWZ1bnMuYwppbmRleCBlYWQzZjFiMC4uNWI1YWU3OSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKKysrIGIvbmV0L3NjdHAvc21fc3RhdGVmdW5zLmMKQEAgLTQwMzEsMTggKzQwMzEsMTIgQEAKIAkgKiBmcm9tIGl0cyB1cHBlciBsYXllciwgYnV0IHJldHJhbnNtaXRzIGRhdGEgdG8gdGhlIGZhciBlbmQKIAkgKiBpZiBuZWNlc3NhcnkgdG8gZmlsbCBnYXBzLgogCSAqLwotCXN0cnVjdCBtc2doZHIgKm1zZyA9IGFyZzsKLQlzdHJ1Y3Qgc2N0cF9jaHVuayAqYWJvcnQ7CisJc3RydWN0IHNjdHBfY2h1bmsgKmFib3J0ID0gYXJnOwogCXNjdHBfZGlzcG9zaXRpb25fdCByZXR2YWw7CiAKIAlyZXR2YWwgPSBTQ1RQX0RJU1BPU0lUSU9OX0NPTlNVTUU7CiAKLQkvKiBHZW5lcmF0ZSBBQk9SVCBjaHVuayB0byBzZW5kIHRoZSBwZWVyLiAgKi8KLQlhYm9ydCA9IHNjdHBfbWFrZV9hYm9ydF91c2VyKGFzb2MsIE5VTEwsIG1zZyk7Ci0JaWYgKCFhYm9ydCkKLQkJcmV0dmFsID0gU0NUUF9ESVNQT1NJVElPTl9OT01FTTsKLQllbHNlCi0JCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksoYWJvcnQpKTsKKwlzY3RwX2FkZF9jbWRfc2YoY29tbWFuZHMsIFNDVFBfQ01EX1JFUExZLCBTQ1RQX0NIVU5LKGFib3J0KSk7CiAKIAkvKiBFdmVuIGlmIHdlIGNhbid0IHNlbmQgdGhlIEFCT1JUIGR1ZSB0byBsb3cgbWVtb3J5IGRlbGV0ZSB0aGUKIAkgKiBUQ0IuICBUaGlzIGlzIGEgZGVwYXJ0dXJlIGZyb20gb3VyIHR5cGljYWwgTk9NRU0gaGFuZGxpbmcuCkBAIC00MTY2LDggKzQxNjAsNyBAQAogCXZvaWQgKmFyZywKIAlzY3RwX2NtZF9zZXFfdCAqY29tbWFuZHMpCiB7Ci0Jc3RydWN0IG1zZ2hkciAqbXNnID0gYXJnOwotCXN0cnVjdCBzY3RwX2NodW5rICphYm9ydDsKKwlzdHJ1Y3Qgc2N0cF9jaHVuayAqYWJvcnQgPSBhcmc7CiAJc2N0cF9kaXNwb3NpdGlvbl90IHJldHZhbDsKIAogCS8qIFN0b3AgVDEtaW5pdCB0aW1lciAqLwpAQCAtNDE3NSwxMiArNDE2OCw3IEBACiAJCQlTQ1RQX1RPKFNDVFBfRVZFTlRfVElNRU9VVF9UMV9JTklUKSk7CiAJcmV0dmFsID0gU0NUUF9ESVNQT1NJVElPTl9DT05TVU1FOwogCi0JLyogR2VuZXJhdGUgQUJPUlQgY2h1bmsgdG8gc2VuZCB0aGUgcGVlciAqLwotCWFib3J0ID0gc2N0cF9tYWtlX2Fib3J0X3VzZXIoYXNvYywgTlVMTCwgbXNnKTsKLQlpZiAoIWFib3J0KQotCQlyZXR2YWwgPSBTQ1RQX0RJU1BPU0lUSU9OX05PTUVNOwotCWVsc2UKLQkJc2N0cF9hZGRfY21kX3NmKGNvbW1hbmRzLCBTQ1RQX0NNRF9SRVBMWSwgU0NUUF9DSFVOSyhhYm9ydCkpOworCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfUkVQTFksIFNDVFBfQ0hVTksoYWJvcnQpKTsKIAogCXNjdHBfYWRkX2NtZF9zZihjb21tYW5kcywgU0NUUF9DTURfTkVXX1NUQVRFLAogCQkJU0NUUF9TVEFURShTQ1RQX1NUQVRFX0NMT1NFRCkpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCA1NDcyMmU2Li44NWNhZjc5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtMTI4OSw5ICsxMjg5LDEzIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoc29ja19mbGFnKHNrLCBTT0NLX0xJTkdFUikgJiYgIXNrLT5za19saW5nZXJ0aW1lKQotCQkJc2N0cF9wcmltaXRpdmVfQUJPUlQoYXNvYywgTlVMTCk7Ci0JCWVsc2UKKwkJaWYgKHNvY2tfZmxhZyhzaywgU09DS19MSU5HRVIpICYmICFzay0+c2tfbGluZ2VydGltZSkgeworCQkJc3RydWN0IHNjdHBfY2h1bmsgKmNodW5rOworCisJCQljaHVuayA9IHNjdHBfbWFrZV9hYm9ydF91c2VyKGFzb2MsIE5VTEwsIDApOworCQkJaWYgKGNodW5rKQorCQkJCXNjdHBfcHJpbWl0aXZlX0FCT1JUKGFzb2MsIGNodW5rKTsKKwkJfSBlbHNlCiAJCQlzY3RwX3ByaW1pdGl2ZV9TSFVURE9XTihhc29jLCBOVUxMKTsKIAl9CiAKQEAgLTE1MjAsOCArMTUyNCwxNiBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJCWlmIChzaW5mb19mbGFncyAmIFNDVFBfQUJPUlQpIHsKKwkJCXN0cnVjdCBzY3RwX2NodW5rICpjaHVuazsKKworCQkJY2h1bmsgPSBzY3RwX21ha2VfYWJvcnRfdXNlcihhc29jLCBtc2csIG1zZ19sZW4pOworCQkJaWYgKCFjaHVuaykgeworCQkJCWVyciA9IC1FTk9NRU07CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCiAJCQlTQ1RQX0RFQlVHX1BSSU5USygiQWJvcnRpbmcgYXNzb2NpYXRpb246ICVwXG4iLCBhc29jKTsKLQkJCXNjdHBfcHJpbWl0aXZlX0FCT1JUKGFzb2MsIG1zZyk7CisJCQlzY3RwX3ByaW1pdGl2ZV9BQk9SVChhc29jLCBjaHVuayk7CiAJCQllcnIgPSAwOwogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CkBAIC00ODg2LDcgKzQ4OTgsNyBAQAogaW50IHNjdHBfaW5ldF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbT1OVUxMOworCXN0cnVjdCBjcnlwdG9faGFzaCAqdGZtID0gTlVMTDsKIAlpbnQgZXJyID0gLUVJTlZBTDsKIAogCWlmICh1bmxpa2VseShiYWNrbG9nIDwgMCkpCkBAIC00ODk5LDcgKzQ5MTEsNyBAQAogCiAJLyogQWxsb2NhdGUgSE1BQyBmb3IgZ2VuZXJhdGluZyBjb29raWUuICovCiAJaWYgKHNjdHBfaG1hY19hbGcpIHsKLQkJdGZtID0gc2N0cF9jcnlwdG9fYWxsb2NfdGZtKHNjdHBfaG1hY19hbGcsIDApOworCQl0Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaChzY3RwX2htYWNfYWxnLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKIAkJaWYgKCF0Zm0pIHsKIAkJCWVyciA9IC1FTk9TWVM7CiAJCQlnb3RvIG91dDsKQEAgLTQ5MjUsNyArNDkzNyw3IEBACiAJc2N0cF9yZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnI7CiBjbGVhbnVwOgotCXNjdHBfY3J5cHRvX2ZyZWVfdGZtKHRmbSk7CisJY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOwogCWdvdG8gb3V0OwogfQogCmRpZmYgLS1naXQgYS9uZXQvc29ja2V0LmMgYi9uZXQvc29ja2V0LmMKaW5kZXggYjQ4NDhjZS4uNmQyNjFiZiAxMDA2NDQKLS0tIGEvbmV0L3NvY2tldC5jCisrKyBiL25ldC9zb2NrZXQuYwpAQCAtMTE3OCw3ICsxMTc4LDggQEAKICAqLwogCiAJaWYgKCEoc29jayA9IHNvY2tfYWxsb2MoKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic29ja2V0OiBubyBtb3JlIHNvY2tldHNcbiIpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAic29ja2V0OiBubyBtb3JlIHNvY2tldHNcbiIpOwogCQllcnIgPSAtRU5GSUxFOwkJLyogTm90IGV4YWN0bHkgYSBtYXRjaCwgYnV0IGl0cyB0aGUKIAkJCQkJICAgY2xvc2VzdCBwb3NpeCB0aGluZyAqLwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCA0YTlhYTkzLi5lZjFjZjViIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCkBAIC03MTgsOCArNzE4LDcgQEAKIAkJYXV0aCwgYXV0aC0+YXVfZmxhdm9yKTsKIAogCWdzc19hdXRoID0gY29udGFpbmVyX29mKGF1dGgsIHN0cnVjdCBnc3NfYXV0aCwgcnBjX2F1dGgpOwotCXJwY191bmxpbmsoZ3NzX2F1dGgtPnBhdGgpOwotCWRwdXQoZ3NzX2F1dGgtPmRlbnRyeSk7CisJcnBjX3VubGluayhnc3NfYXV0aC0+ZGVudHJ5KTsKIAlnc3NfYXV0aC0+ZGVudHJ5ID0gTlVMTDsKIAlnc3NfbWVjaF9wdXQoZ3NzX2F1dGgtPm1lY2gpOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9jcnlwdG8uYwppbmRleCA3NmI5NjllLi5lMTFhNDBiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X2NyeXB0by5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfY3J5cHRvLmMKQEAgLTM0LDYgKzM0LDcgQEAKICAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTQ5LDcgKzUwLDcgQEAKIAogdTMyCiBrcmI1X2VuY3J5cHQoCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSwKKwlzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqdGZtLAogCXZvaWQgKiBpdiwKIAl2b2lkICogaW4sCiAJdm9pZCAqIG91dCwKQEAgLTU4LDI2ICs1OSwyNyBAQAogCXUzMiByZXQgPSAtRUlOVkFMOwogICAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbMV07CiAJdTggbG9jYWxfaXZbMTZdID0gezB9OworCXN0cnVjdCBibGtjaXBoZXJfZGVzYyBkZXNjID0geyAudGZtID0gdGZtLCAuaW5mbyA9IGxvY2FsX2l2IH07CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAga3JiNV9lbmNyeXB0OiBpbnB1dCBkYXRhOlxuIik7CiAJcHJpbnRfaGV4bCgodTMyICopaW4sIGxlbmd0aCwgMCk7CiAKLQlpZiAobGVuZ3RoICUgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkgIT0gMCkKKwlpZiAobGVuZ3RoICUgY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUodGZtKSAhPSAwKQogCQlnb3RvIG91dDsKIAotCWlmIChjcnlwdG9fdGZtX2FsZ19pdnNpemUodGZtKSA+IDE2KSB7CisJaWYgKGNyeXB0b19ibGtjaXBoZXJfaXZzaXplKHRmbSkgPiAxNikgewogCQlkcHJpbnRrKCJSUEM6ICAgICAgZ3NzX2s1ZW5jcnlwdDogdGZtIGl2IHNpemUgdG8gbGFyZ2UgJWRcbiIsCi0JCSAgICAgICAgIGNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pKTsKKwkJICAgICAgICAgY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKSk7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmIChpdikKLQkJbWVtY3B5KGxvY2FsX2l2LCBpdiwgY3J5cHRvX3RmbV9hbGdfaXZzaXplKHRmbSkpOworCQltZW1jcHkobG9jYWxfaXYsIGl2LCBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pKTsKIAogCW1lbWNweShvdXQsIGluLCBsZW5ndGgpOwogCXNnX3NldF9idWYoc2csIG91dCwgbGVuZ3RoKTsKIAotCXJldCA9IGNyeXB0b19jaXBoZXJfZW5jcnlwdF9pdih0Zm0sIHNnLCBzZywgbGVuZ3RoLCBsb2NhbF9pdik7CisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KCZkZXNjLCBzZywgc2csIGxlbmd0aCk7CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAga3JiNV9lbmNyeXB0OiBvdXRwdXQgZGF0YTpcbiIpOwogCXByaW50X2hleGwoKHUzMiAqKW91dCwgbGVuZ3RoLCAwKTsKQEAgLTkwLDcgKzkyLDcgQEAKIAogdTMyCiBrcmI1X2RlY3J5cHQoCi0gICAgIHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCisgICAgIHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCiAgICAgIHZvaWQgKiBpdiwKICAgICAgdm9pZCAqIGluLAogICAgICB2b2lkICogb3V0LApAQCAtOTksMjUgKzEwMSwyNiBAQAogCXUzMiByZXQgPSAtRUlOVkFMOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAl1OCBsb2NhbF9pdlsxNl0gPSB7MH07CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2MgPSB7IC50Zm0gPSB0Zm0sIC5pbmZvID0gbG9jYWxfaXYgfTsKIAogCWRwcmludGsoIlJQQzogICAgICBrcmI1X2RlY3J5cHQ6IGlucHV0IGRhdGE6XG4iKTsKIAlwcmludF9oZXhsKCh1MzIgKilpbiwgbGVuZ3RoLCAwKTsKIAotCWlmIChsZW5ndGggJSBjcnlwdG9fdGZtX2FsZ19ibG9ja3NpemUodGZtKSAhPSAwKQorCWlmIChsZW5ndGggJSBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSh0Zm0pICE9IDApCiAJCWdvdG8gb3V0OwogCi0JaWYgKGNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pID4gMTYpIHsKKwlpZiAoY3J5cHRvX2Jsa2NpcGhlcl9pdnNpemUodGZtKSA+IDE2KSB7CiAJCWRwcmludGsoIlJQQzogICAgICBnc3NfazVkZWNyeXB0OiB0Zm0gaXYgc2l6ZSB0byBsYXJnZSAlZFxuIiwKLQkJCWNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pKTsKKwkJCWNyeXB0b19ibGtjaXBoZXJfaXZzaXplKHRmbSkpOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKGl2KQotCQltZW1jcHkobG9jYWxfaXYsaXYsIGNyeXB0b190Zm1fYWxnX2l2c2l6ZSh0Zm0pKTsKKwkJbWVtY3B5KGxvY2FsX2l2LGl2LCBjcnlwdG9fYmxrY2lwaGVyX2l2c2l6ZSh0Zm0pKTsKIAogCW1lbWNweShvdXQsIGluLCBsZW5ndGgpOwogCXNnX3NldF9idWYoc2csIG91dCwgbGVuZ3RoKTsKIAotCXJldCA9IGNyeXB0b19jaXBoZXJfZGVjcnlwdF9pdih0Zm0sIHNnLCBzZywgbGVuZ3RoLCBsb2NhbF9pdik7CisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0X2l2KCZkZXNjLCBzZywgc2csIGxlbmd0aCk7CiAKIAlkcHJpbnRrKCJSUEM6ICAgICAga3JiNV9kZWNyeXB0OiBvdXRwdXRfZGF0YTpcbiIpOwogCXByaW50X2hleGwoKHUzMiAqKW91dCwgbGVuZ3RoLCAwKTsKQEAgLTE5NywxMSArMjAwLDkgQEAKIHN0YXRpYyBpbnQKIGNoZWNrc3VtbWVyKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbSA9IChzdHJ1Y3QgY3J5cHRvX3RmbSAqKWRhdGE7CisJc3RydWN0IGhhc2hfZGVzYyAqZGVzYyA9IGRhdGE7CiAKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm0sIHNnLCAxKTsKLQotCXJldHVybiAwOworCXJldHVybiBjcnlwdG9faGFzaF91cGRhdGUoZGVzYywgc2csIHNnLT5sZW5ndGgpOwogfQogCiAvKiBjaGVja3N1bSB0aGUgcGxhaW50ZXh0IGRhdGEgYW5kIGhkcmxlbiBieXRlcyBvZiB0aGUgdG9rZW4gaGVhZGVyICovCkBAIC0yMTAsOCArMjExLDkgQEAKIAkJICAgaW50IGJvZHlfb2Zmc2V0LCBzdHJ1Y3QgeGRyX25ldG9iaiAqY2tzdW0pCiB7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY2tzdW1uYW1lOwotCXN0cnVjdCBjcnlwdG9fdGZtICAgICAgICAgICAgICAgKnRmbSA9IE5VTEw7IC8qIFhYWCBhZGQgdG8gY3R4PyAqLworCXN0cnVjdCBoYXNoX2Rlc2MgICAgICAgICAgICAgICAgZGVzYzsgLyogWFhYIGFkZCB0byBjdHg/ICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0ICAgICAgICAgICAgICBzZ1sxXTsKKwlpbnQgZXJyOwogCiAJc3dpdGNoIChja3N1bXR5cGUpIHsKIAkJY2FzZSBDS1NVTVRZUEVfUlNBX01ENToKQEAgLTIyMiwyNSArMjI0LDM1IEBACiAJCQkJIiB1bnN1cHBvcnRlZCBjaGVja3N1bSAlZCIsIGNrc3VtdHlwZSk7CiAJCQlyZXR1cm4gR1NTX1NfRkFJTFVSRTsKIAl9Ci0JaWYgKCEodGZtID0gY3J5cHRvX2FsbG9jX3RmbShja3N1bW5hbWUsIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCkpKQorCWRlc2MudGZtID0gY3J5cHRvX2FsbG9jX2hhc2goY2tzdW1uYW1lLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKGRlc2MudGZtKSkKIAkJcmV0dXJuIEdTU19TX0ZBSUxVUkU7Ci0JY2tzdW0tPmxlbiA9IGNyeXB0b190Zm1fYWxnX2RpZ2VzdHNpemUodGZtKTsKKwlja3N1bS0+bGVuID0gY3J5cHRvX2hhc2hfZGlnZXN0c2l6ZShkZXNjLnRmbSk7CisJZGVzYy5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKIAotCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOworCWVyciA9IGNyeXB0b19oYXNoX2luaXQoJmRlc2MpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OwogCXNnX3NldF9idWYoc2csIGhlYWRlciwgaGRybGVuKTsKLQljcnlwdG9fZGlnZXN0X3VwZGF0ZSh0Zm0sIHNnLCAxKTsKLQlwcm9jZXNzX3hkcl9idWYoYm9keSwgYm9keV9vZmZzZXQsIGJvZHktPmxlbiAtIGJvZHlfb2Zmc2V0LAotCQkJY2hlY2tzdW1tZXIsIHRmbSk7Ci0JY3J5cHRvX2RpZ2VzdF9maW5hbCh0Zm0sIGNrc3VtLT5kYXRhKTsKLQljcnlwdG9fZnJlZV90Zm0odGZtKTsKLQlyZXR1cm4gMDsKKwllcnIgPSBjcnlwdG9faGFzaF91cGRhdGUoJmRlc2MsIHNnLCBoZHJsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWVyciA9IHByb2Nlc3NfeGRyX2J1Zihib2R5LCBib2R5X29mZnNldCwgYm9keS0+bGVuIC0gYm9keV9vZmZzZXQsCisJCQkgICAgICBjaGVja3N1bW1lciwgJmRlc2MpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCWVyciA9IGNyeXB0b19oYXNoX2ZpbmFsKCZkZXNjLCBja3N1bS0+ZGF0YSk7CisKK291dDoKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gZXJyID8gR1NTX1NfRkFJTFVSRSA6IDA7CiB9CiAKIEVYUE9SVF9TWU1CT0wobWFrZV9jaGVja3N1bSk7CiAKIHN0cnVjdCBlbmNyeXB0b3JfZGVzYyB7CiAJdTggaXZbOF07IC8qIFhYWCBoYXJkLWNvZGVkIGJsb2Nrc2l6ZSAqLwotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJc3RydWN0IGJsa2NpcGhlcl9kZXNjIGRlc2M7CiAJaW50IHBvczsKIAlzdHJ1Y3QgeGRyX2J1ZiAqb3V0YnVmOwogCXN0cnVjdCBwYWdlICoqcGFnZXM7CkBAIC0yODUsOCArMjk3LDggQEAKIAlpZiAodGhpc2xlbiA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXJldCA9IGNyeXB0b19jaXBoZXJfZW5jcnlwdF9pdihkZXNjLT50Zm0sIGRlc2MtPm91dGZyYWdzLCBkZXNjLT5pbmZyYWdzLAotCQkJCQl0aGlzbGVuLCBkZXNjLT5pdik7CisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9lbmNyeXB0X2l2KCZkZXNjLT5kZXNjLCBkZXNjLT5vdXRmcmFncywKKwkJCQkJICBkZXNjLT5pbmZyYWdzLCB0aGlzbGVuKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCWlmIChmcmFnbGVuKSB7CkBAIC0zMDUsMTYgKzMxNywxOCBAQAogfQogCiBpbnQKLWdzc19lbmNyeXB0X3hkcl9idWYoc3RydWN0IGNyeXB0b190Zm0gKnRmbSwgc3RydWN0IHhkcl9idWYgKmJ1ZiwgaW50IG9mZnNldCwKLQkJc3RydWN0IHBhZ2UgKipwYWdlcykKK2dzc19lbmNyeXB0X3hkcl9idWYoc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKnRmbSwgc3RydWN0IHhkcl9idWYgKmJ1ZiwKKwkJICAgIGludCBvZmZzZXQsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgZW5jcnlwdG9yX2Rlc2MgZGVzYzsKIAotCUJVR19PTigoYnVmLT5sZW4gLSBvZmZzZXQpICUgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkgIT0gMCk7CisJQlVHX09OKChidWYtPmxlbiAtIG9mZnNldCkgJSBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSh0Zm0pICE9IDApOwogCiAJbWVtc2V0KGRlc2MuaXYsIDAsIHNpemVvZihkZXNjLml2KSk7Ci0JZGVzYy50Zm0gPSB0Zm07CisJZGVzYy5kZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmRlc2MuaW5mbyA9IGRlc2MuaXY7CisJZGVzYy5kZXNjLmZsYWdzID0gMDsKIAlkZXNjLnBvcyA9IG9mZnNldDsKIAlkZXNjLm91dGJ1ZiA9IGJ1ZjsKIAlkZXNjLnBhZ2VzID0gcGFnZXM7CkBAIC0zMjksNyArMzQzLDcgQEAKIAogc3RydWN0IGRlY3J5cHRvcl9kZXNjIHsKIAl1OCBpdls4XTsgLyogWFhYIGhhcmQtY29kZWQgYmxvY2tzaXplICovCi0Jc3RydWN0IGNyeXB0b190Zm0gKnRmbTsKKwlzdHJ1Y3QgYmxrY2lwaGVyX2Rlc2MgZGVzYzsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgZnJhZ3NbNF07CiAJaW50IGZyYWdubzsKIAlpbnQgZnJhZ2xlbjsKQEAgLTM1NSw4ICszNjksOCBAQAogCWlmICh0aGlzbGVuID09IDApCiAJCXJldHVybiAwOwogCi0JcmV0ID0gY3J5cHRvX2NpcGhlcl9kZWNyeXB0X2l2KGRlc2MtPnRmbSwgZGVzYy0+ZnJhZ3MsIGRlc2MtPmZyYWdzLAotCQkJCQl0aGlzbGVuLCBkZXNjLT5pdik7CisJcmV0ID0gY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0X2l2KCZkZXNjLT5kZXNjLCBkZXNjLT5mcmFncywKKwkJCQkJICBkZXNjLT5mcmFncywgdGhpc2xlbik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlpZiAoZnJhZ2xlbikgewpAQCAtMzczLDE1ICszODcsMTggQEAKIH0KIAogaW50Ci1nc3NfZGVjcnlwdF94ZHJfYnVmKHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sIHN0cnVjdCB4ZHJfYnVmICpidWYsIGludCBvZmZzZXQpCitnc3NfZGVjcnlwdF94ZHJfYnVmKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sIHN0cnVjdCB4ZHJfYnVmICpidWYsCisJCSAgICBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBkZWNyeXB0b3JfZGVzYyBkZXNjOwogCiAJLyogWFhYSkJGOiAqLwotCUJVR19PTigoYnVmLT5sZW4gLSBvZmZzZXQpICUgY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKHRmbSkgIT0gMCk7CisJQlVHX09OKChidWYtPmxlbiAtIG9mZnNldCkgJSBjcnlwdG9fYmxrY2lwaGVyX2Jsb2Nrc2l6ZSh0Zm0pICE9IDApOwogCiAJbWVtc2V0KGRlc2MuaXYsIDAsIHNpemVvZihkZXNjLml2KSk7Ci0JZGVzYy50Zm0gPSB0Zm07CisJZGVzYy5kZXNjLnRmbSA9IHRmbTsKKwlkZXNjLmRlc2MuaW5mbyA9IGRlc2MuaXY7CisJZGVzYy5kZXNjLmZsYWdzID0gMDsKIAlkZXNjLmZyYWdubyA9IDA7CiAJZGVzYy5mcmFnbGVuID0gMDsKIAlyZXR1cm4gcHJvY2Vzc194ZHJfYnVmKGJ1Ziwgb2Zmc2V0LCBidWYtPmxlbiAtIG9mZnNldCwgZGVjcnlwdG9yLCAmZGVzYyk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfbWVjaC5jCmluZGV4IDcwZTFlNTNhLi4zMjVlNzJlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X21lY2guYwpAQCAtMzQsNiArMzQsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC03OCwxMCArNzksMTAgQEAKIH0KIAogc3RhdGljIGlubGluZSBjb25zdCB2b2lkICoKLWdldF9rZXkoY29uc3Qgdm9pZCAqcCwgY29uc3Qgdm9pZCAqZW5kLCBzdHJ1Y3QgY3J5cHRvX3RmbSAqKnJlcykKK2dldF9rZXkoY29uc3Qgdm9pZCAqcCwgY29uc3Qgdm9pZCAqZW5kLCBzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqKnJlcykKIHsKIAlzdHJ1Y3QgeGRyX25ldG9iaglrZXk7Ci0JaW50CQkJYWxnLCBhbGdfbW9kZTsKKwlpbnQJCQlhbGc7CiAJY2hhcgkJCSphbGdfbmFtZTsKIAogCXAgPSBzaW1wbGVfZ2V0X2J5dGVzKHAsIGVuZCwgJmFsZywgc2l6ZW9mKGFsZykpOwpAQCAtOTMsMTggKzk0LDE5IEBACiAKIAlzd2l0Y2ggKGFsZykgewogCQljYXNlIEVOQ1RZUEVfREVTX0NCQ19SQVc6Ci0JCQlhbGdfbmFtZSA9ICJkZXMiOwotCQkJYWxnX21vZGUgPSBDUllQVE9fVEZNX01PREVfQ0JDOworCQkJYWxnX25hbWUgPSAiY2JjKGRlcykiOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoImdzc19rZXJiZXJvc19tZWNoOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gJWRcbiIsIGFsZyk7CiAJCQlnb3RvIG91dF9lcnJfZnJlZV9rZXk7CiAJfQotCWlmICghKCpyZXMgPSBjcnlwdG9fYWxsb2NfdGZtKGFsZ19uYW1lLCBhbGdfbW9kZSkpKSB7CisJKnJlcyA9IGNyeXB0b19hbGxvY19ibGtjaXBoZXIoYWxnX25hbWUsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoKnJlcykpIHsKIAkJcHJpbnRrKCJnc3Nfa2VyYmVyb3NfbWVjaDogdW5hYmxlIHRvIGluaXRpYWxpemUgY3J5cHRvIGFsZ29yaXRobSAlc1xuIiwgYWxnX25hbWUpOworCQkqcmVzID0gTlVMTDsKIAkJZ290byBvdXRfZXJyX2ZyZWVfa2V5OwogCX0KLQlpZiAoY3J5cHRvX2NpcGhlcl9zZXRrZXkoKnJlcywga2V5LmRhdGEsIGtleS5sZW4pKSB7CisJaWYgKGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KCpyZXMsIGtleS5kYXRhLCBrZXkubGVuKSkgewogCQlwcmludGsoImdzc19rZXJiZXJvc19tZWNoOiBlcnJvciBzZXR0aW5nIGtleSBmb3IgY3J5cHRvIGFsZ29yaXRobSAlc1xuIiwgYWxnX25hbWUpOwogCQlnb3RvIG91dF9lcnJfZnJlZV90Zm07CiAJfQpAQCAtMTEzLDcgKzExNSw3IEBACiAJcmV0dXJuIHA7CiAKIG91dF9lcnJfZnJlZV90Zm06Ci0JY3J5cHRvX2ZyZWVfdGZtKCpyZXMpOworCWNyeXB0b19mcmVlX2Jsa2NpcGhlcigqcmVzKTsKIG91dF9lcnJfZnJlZV9rZXk6CiAJa2ZyZWUoa2V5LmRhdGEpOwogCXAgPSBFUlJfUFRSKC1FSU5WQUwpOwpAQCAtMTcyLDkgKzE3NCw5IEBACiAJcmV0dXJuIDA7CiAKIG91dF9lcnJfZnJlZV9rZXkyOgotCWNyeXB0b19mcmVlX3RmbShjdHgtPnNlcSk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGN0eC0+c2VxKTsKIG91dF9lcnJfZnJlZV9rZXkxOgotCWNyeXB0b19mcmVlX3RmbShjdHgtPmVuYyk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKGN0eC0+ZW5jKTsKIG91dF9lcnJfZnJlZV9tZWNoOgogCWtmcmVlKGN0eC0+bWVjaF91c2VkLmRhdGEpOwogb3V0X2Vycl9mcmVlX2N0eDoKQEAgLTE4Nyw4ICsxODksOCBAQAogZ3NzX2RlbGV0ZV9zZWNfY29udGV4dF9rZXJiZXJvcyh2b2lkICppbnRlcm5hbF9jdHgpIHsKIAlzdHJ1Y3Qga3JiNV9jdHggKmtjdHggPSBpbnRlcm5hbF9jdHg7CiAKLQljcnlwdG9fZnJlZV90Zm0oa2N0eC0+c2VxKTsKLQljcnlwdG9fZnJlZV90Zm0oa2N0eC0+ZW5jKTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoa2N0eC0+c2VxKTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoa2N0eC0+ZW5jKTsKIAlrZnJlZShrY3R4LT5tZWNoX3VzZWQuZGF0YSk7CiAJa2ZyZWUoa2N0eCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlcW51bS5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZXFudW0uYwppbmRleCBjNTNlYWQzLi5jNjA0YmFmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlcW51bS5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfc2VxbnVtLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNlbmRpZgogCiBzMzIKLWtyYjVfbWFrZV9zZXFfbnVtKHN0cnVjdCBjcnlwdG9fdGZtICprZXksCitrcmI1X21ha2Vfc2VxX251bShzdHJ1Y3QgY3J5cHRvX2Jsa2NpcGhlciAqa2V5LAogCQlpbnQgZGlyZWN0aW9uLAogCQlzMzIgc2VxbnVtLAogCQl1bnNpZ25lZCBjaGFyICpja3N1bSwgdW5zaWduZWQgY2hhciAqYnVmKQpAQCAtNjIsNyArNjIsNyBAQAogfQogCiBzMzIKLWtyYjVfZ2V0X3NlcV9udW0oc3RydWN0IGNyeXB0b190Zm0gKmtleSwKK2tyYjVfZ2V0X3NlcV9udW0oc3RydWN0IGNyeXB0b19ibGtjaXBoZXIgKmtleSwKIAkgICAgICAgdW5zaWduZWQgY2hhciAqY2tzdW0sCiAJICAgICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKIAkgICAgICAgaW50ICpkaXJlY3Rpb24sIHMzMiAqIHNlcW51bSkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX2tyYjVfd3JhcC5jIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKaW5kZXggODlkMWYzZS4uZjE3OTQxNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKKysrIGIvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCQlnb3RvIG91dF9lcnI7CiAJfQogCi0JYmxvY2tzaXplID0gY3J5cHRvX3RmbV9hbGdfYmxvY2tzaXplKGtjdHgtPmVuYyk7CisJYmxvY2tzaXplID0gY3J5cHRvX2Jsa2NpcGhlcl9ibG9ja3NpemUoa2N0eC0+ZW5jKTsKIAlnc3Nfa3JiNV9hZGRfcGFkZGluZyhidWYsIG9mZnNldCwgYmxvY2tzaXplKTsKIAlCVUdfT04oKGJ1Zi0+bGVuIC0gb2Zmc2V0KSAlIGJsb2Nrc2l6ZSk7CiAJcGxhaW5sZW4gPSBibG9ja3NpemUgKyBidWYtPmxlbiAtIG9mZnNldDsKQEAgLTM0Niw3ICszNDYsNyBAQAogCS8qIENvcHkgdGhlIGRhdGEgYmFjayB0byB0aGUgcmlnaHQgcG9zaXRpb24uICBYWFg6IFdvdWxkIHByb2JhYmx5IGJlCiAJICogYmV0dGVyIHRvIGNvcHkgYW5kIGVuY3J5cHQgYXQgdGhlIHNhbWUgdGltZS4gKi8KIAotCWJsb2Nrc2l6ZSA9IGNyeXB0b190Zm1fYWxnX2Jsb2Nrc2l6ZShrY3R4LT5lbmMpOworCWJsb2Nrc2l6ZSA9IGNyeXB0b19ibGtjaXBoZXJfYmxvY2tzaXplKGtjdHgtPmVuYyk7CiAJZGF0YV9zdGFydCA9IHB0ciArIDIyICsgYmxvY2tzaXplOwogCW9yaWdfc3RhcnQgPSBidWYtPmhlYWRbMF0uaW92X2Jhc2UgKyBvZmZzZXQ7CiAJZGF0YV9sZW4gPSAoYnVmLT5oZWFkWzBdLmlvdl9iYXNlICsgYnVmLT5oZWFkWzBdLmlvdl9sZW4pIC0gZGF0YV9zdGFydDsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX21lY2guYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX21lY2guYwppbmRleCA4OGRjYjUyLi5iZGVkZjQ1NmIgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYXV0aF9nc3MvZ3NzX3Nwa20zX21lY2guYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19zcGttM19tZWNoLmMKQEAgLTM0LDYgKzM0LDcgQEAKICAqCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtODMsMTAgKzg0LDExIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgY29uc3Qgdm9pZCAqCi1nZXRfa2V5KGNvbnN0IHZvaWQgKnAsIGNvbnN0IHZvaWQgKmVuZCwgc3RydWN0IGNyeXB0b190Zm0gKipyZXMsIGludCAqcmVzYWxnKQorZ2V0X2tleShjb25zdCB2b2lkICpwLCBjb25zdCB2b2lkICplbmQsIHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICoqcmVzLAorCWludCAqcmVzYWxnKQogewogCXN0cnVjdCB4ZHJfbmV0b2JqCWtleSA9IHsgMCB9OwotCWludAkJCWFsZ19tb2RlLHNldGtleSA9IDA7CisJaW50CQkJc2V0a2V5ID0gMDsKIAljaGFyCQkJKmFsZ19uYW1lOwogCiAJcCA9IHNpbXBsZV9nZXRfYnl0ZXMocCwgZW5kLCByZXNhbGcsIHNpemVvZigqcmVzYWxnKSk7CkBAIC05OCwxNCArMTAwLDEyIEBACiAKIAlzd2l0Y2ggKCpyZXNhbGcpIHsKIAkJY2FzZSBOSURfZGVzX2NiYzoKLQkJCWFsZ19uYW1lID0gImRlcyI7Ci0JCQlhbGdfbW9kZSA9IENSWVBUT19URk1fTU9ERV9DQkM7CisJCQlhbGdfbmFtZSA9ICJjYmMoZGVzKSI7CiAJCQlzZXRrZXkgPSAxOwogCQkJYnJlYWs7CiAJCWNhc2UgTklEX2Nhc3Q1X2NiYzoKIAkJCS8qIFhYWFggaGVyZSBpbiBuYW1lIG9ubHksIG5vdCB1c2VkICovCi0JCQlhbGdfbmFtZSA9ICJjYXN0NSI7Ci0JCQlhbGdfbW9kZSA9IENSWVBUT19URk1fTU9ERV9DQkM7CisJCQlhbGdfbmFtZSA9ICJjYmMoY2FzdDUpIjsKIAkJCXNldGtleSA9IDA7IC8qIFhYWCB3aWxsIG5lZWQgdG8gc2V0IHRvIDEgKi8KIAkJCWJyZWFrOwogCQljYXNlIE5JRF9tZDU6CkBAIC0xMTMsMTkgKzExMywyMCBAQAogCQkJCWRwcmludGsoIlJQQzogU1BLTTMgZ2V0X2tleTogTklEX21kNSB6ZXJvIEtleSBsZW5ndGhcbiIpOwogCQkJfQogCQkJYWxnX25hbWUgPSAibWQ1IjsKLQkJCWFsZ19tb2RlID0gMDsKIAkJCXNldGtleSA9IDA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRwcmludGsoImdzc19zcGttM19tZWNoOiB1bnN1cHBvcnRlZCBhbGdvcml0aG0gJWRcbiIsICpyZXNhbGcpOwogCQkJZ290byBvdXRfZXJyX2ZyZWVfa2V5OwogCX0KLQlpZiAoISgqcmVzID0gY3J5cHRvX2FsbG9jX3RmbShhbGdfbmFtZSwgYWxnX21vZGUpKSkgeworCSpyZXMgPSBjcnlwdG9fYWxsb2NfYmxrY2lwaGVyKGFsZ19uYW1lLCAwLCBDUllQVE9fQUxHX0FTWU5DKTsKKwlpZiAoSVNfRVJSKCpyZXMpKSB7CiAJCXByaW50aygiZ3NzX3Nwa20zX21lY2g6IHVuYWJsZSB0byBpbml0aWFsaXplIGNyeXB0byBhbGdvcnRobSAlc1xuIiwgYWxnX25hbWUpOworCQkqcmVzID0gTlVMTDsKIAkJZ290byBvdXRfZXJyX2ZyZWVfa2V5OwogCX0KIAlpZiAoc2V0a2V5KSB7Ci0JCWlmIChjcnlwdG9fY2lwaGVyX3NldGtleSgqcmVzLCBrZXkuZGF0YSwga2V5LmxlbikpIHsKKwkJaWYgKGNyeXB0b19ibGtjaXBoZXJfc2V0a2V5KCpyZXMsIGtleS5kYXRhLCBrZXkubGVuKSkgewogCQkJcHJpbnRrKCJnc3Nfc3BrbTNfbWVjaDogZXJyb3Igc2V0dGluZyBrZXkgZm9yIGNyeXB0byBhbGdvcnRobSAlc1xuIiwgYWxnX25hbWUpOwogCQkJZ290byBvdXRfZXJyX2ZyZWVfdGZtOwogCQl9CkBAIC0xMzYsNyArMTM3LDcgQEAKIAlyZXR1cm4gcDsKIAogb3V0X2Vycl9mcmVlX3RmbToKLQljcnlwdG9fZnJlZV90Zm0oKnJlcyk7CisJY3J5cHRvX2ZyZWVfYmxrY2lwaGVyKCpyZXMpOwogb3V0X2Vycl9mcmVlX2tleToKIAlpZihrZXkubGVuID4gMCkKIAkJa2ZyZWUoa2V5LmRhdGEpOwpAQCAtMjA0LDkgKzIwNSw5IEBACiAJcmV0dXJuIDA7CiAKIG91dF9lcnJfZnJlZV9rZXkyOgotCWNyeXB0b19mcmVlX3RmbShjdHgtPmRlcml2ZWRfaW50ZWdfa2V5KTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3R4LT5kZXJpdmVkX2ludGVnX2tleSk7CiBvdXRfZXJyX2ZyZWVfa2V5MToKLQljcnlwdG9fZnJlZV90Zm0oY3R4LT5kZXJpdmVkX2NvbmZfa2V5KTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoY3R4LT5kZXJpdmVkX2NvbmZfa2V5KTsKIG91dF9lcnJfZnJlZV9zX2tleToKIAlrZnJlZShjdHgtPnNoYXJlX2tleS5kYXRhKTsKIG91dF9lcnJfZnJlZV9tZWNoOgpAQCAtMjIzLDggKzIyNCw4IEBACiBnc3NfZGVsZXRlX3NlY19jb250ZXh0X3Nwa20zKHZvaWQgKmludGVybmFsX2N0eCkgewogCXN0cnVjdCBzcGttM19jdHggKnNjdHggPSBpbnRlcm5hbF9jdHg7CiAKLQljcnlwdG9fZnJlZV90Zm0oc2N0eC0+ZGVyaXZlZF9pbnRlZ19rZXkpOwotCWNyeXB0b19mcmVlX3RmbShzY3R4LT5kZXJpdmVkX2NvbmZfa2V5KTsKKwljcnlwdG9fZnJlZV9ibGtjaXBoZXIoc2N0eC0+ZGVyaXZlZF9pbnRlZ19rZXkpOworCWNyeXB0b19mcmVlX2Jsa2NpcGhlcihzY3R4LT5kZXJpdmVkX2NvbmZfa2V5KTsKIAlrZnJlZShzY3R4LT5zaGFyZV9rZXkuZGF0YSk7CiAJa2ZyZWUoc2N0eC0+bWVjaF91c2VkLmRhdGEpOwogCWtmcmVlKHNjdHgpOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jYWNoZS5jIGIvbmV0L3N1bnJwYy9jYWNoZS5jCmluZGV4IDcwMjZiMDguLjAwY2IzODggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvY2FjaGUuYworKysgYi9uZXQvc3VucnBjL2NhY2hlLmMKQEAgLTcxLDcgKzcxLDEyIEBACiAJbmV3ID0gZGV0YWlsLT5hbGxvYygpOwogCWlmICghbmV3KQogCQlyZXR1cm4gTlVMTDsKKwkvKiBtdXN0IGZ1bGx5IGluaXRpYWxpc2UgJ25ldycsIGVsc2UKKwkgKiB3ZSBtaWdodCBnZXQgbG9zZSBpZiB3ZSBuZWVkIHRvCisJICogY2FjaGVfcHV0IGl0IHNvb24uCisJICovCiAJY2FjaGVfaW5pdChuZXcpOworCWRldGFpbC0+aW5pdChuZXcsIGtleSk7CiAKIAl3cml0ZV9sb2NrKCZkZXRhaWwtPmhhc2hfbG9jayk7CiAKQEAgLTg1LDcgKzkwLDYgQEAKIAkJCXJldHVybiB0bXA7CiAJCX0KIAl9Ci0JZGV0YWlsLT5pbml0KG5ldywga2V5KTsKIAluZXctPm5leHQgPSAqaGVhZDsKIAkqaGVhZCA9IG5ldzsKIAlkZXRhaWwtPmVudHJpZXMrKzsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2xudC5jIGIvbmV0L3N1bnJwYy9jbG50LmMKaW5kZXggNGJhMjcxZi4uM2UxOWQzMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9jbG50LmMKKysrIGIvbmV0L3N1bnJwYy9jbG50LmMKQEAgLTE4Myw4ICsxODMsNyBAQAogCiBvdXRfbm9fYXV0aDoKIAlpZiAoIUlTX0VSUihjbG50LT5jbF9kZW50cnkpKSB7Ci0JCXJwY19ybWRpcihjbG50LT5jbF9wYXRobmFtZSk7Ci0JCWRwdXQoY2xudC0+Y2xfZGVudHJ5KTsKKwkJcnBjX3JtZGlyKGNsbnQtPmNsX2RlbnRyeSk7CiAJCXJwY19wdXRfbW91bnQoKTsKIAl9CiBvdXRfbm9fcGF0aDoKQEAgLTI1MSwxMCArMjUwLDggQEAKIAluZXctPmNsX2F1dG9iaW5kID0gMDsKIAluZXctPmNsX29uZXNob3QgPSAwOwogCW5ldy0+Y2xfZGVhZCA9IDA7Ci0JaWYgKCFJU19FUlIobmV3LT5jbF9kZW50cnkpKSB7CisJaWYgKCFJU19FUlIobmV3LT5jbF9kZW50cnkpKQogCQlkZ2V0KG5ldy0+Y2xfZGVudHJ5KTsKLQkJcnBjX2dldF9tb3VudCgpOwotCX0KIAlycGNfaW5pdF9ydHQoJm5ldy0+Y2xfcnR0X2RlZmF1bHQsIGNsbnQtPmNsX3hwcnQtPnRpbWVvdXQudG9faW5pdHZhbCk7CiAJaWYgKG5ldy0+Y2xfYXV0aCkKIAkJYXRvbWljX2luYygmbmV3LT5jbF9hdXRoLT5hdV9jb3VudCk7CkBAIC0zMTcsMTEgKzMxNCwxNSBAQAogCQljbG50LT5jbF9hdXRoID0gTlVMTDsKIAl9CiAJaWYgKGNsbnQtPmNsX3BhcmVudCAhPSBjbG50KSB7CisJCWlmICghSVNfRVJSKGNsbnQtPmNsX2RlbnRyeSkpCisJCQlkcHV0KGNsbnQtPmNsX2RlbnRyeSk7CiAJCXJwY19kZXN0cm95X2NsaWVudChjbG50LT5jbF9wYXJlbnQpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KLQlpZiAoY2xudC0+Y2xfcGF0aG5hbWVbMF0pCi0JCXJwY19ybWRpcihjbG50LT5jbF9wYXRobmFtZSk7CisJaWYgKCFJU19FUlIoY2xudC0+Y2xfZGVudHJ5KSkgeworCQlycGNfcm1kaXIoY2xudC0+Y2xfZGVudHJ5KTsKKwkJcnBjX3B1dF9tb3VudCgpOworCX0KIAlpZiAoY2xudC0+Y2xfeHBydCkgewogCQl4cHJ0X2Rlc3Ryb3koY2xudC0+Y2xfeHBydCk7CiAJCWNsbnQtPmNsX3hwcnQgPSBOVUxMOwpAQCAtMzMxLDEwICszMzIsNiBAQAogb3V0X2ZyZWU6CiAJcnBjX2ZyZWVfaW9zdGF0cyhjbG50LT5jbF9tZXRyaWNzKTsKIAljbG50LT5jbF9tZXRyaWNzID0gTlVMTDsKLQlpZiAoIUlTX0VSUihjbG50LT5jbF9kZW50cnkpKSB7Ci0JCWRwdXQoY2xudC0+Y2xfZGVudHJ5KTsKLQkJcnBjX3B1dF9tb3VudCgpOwotCX0KIAlrZnJlZShjbG50KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTkyMSwyNiArOTE4LDQzIEBACiAJdGFzay0+dGtfc3RhdHVzID0geHBydF9wcmVwYXJlX3RyYW5zbWl0KHRhc2spOwogCWlmICh0YXNrLT50a19zdGF0dXMgIT0gMCkKIAkJcmV0dXJuOworCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfdHJhbnNtaXRfc3RhdHVzOwogCS8qIEVuY29kZSBoZXJlIHNvIHRoYXQgcnBjc2VjX2dzcyBjYW4gdXNlIGNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyLiAqLwogCWlmIChycGNfdGFza19uZWVkX2VuY29kZSh0YXNrKSkgewotCQl0YXNrLT50a19ycXN0cC0+cnFfYnl0ZXNfc2VudCA9IDA7CisJCUJVR19PTih0YXNrLT50a19ycXN0cC0+cnFfYnl0ZXNfc2VudCAhPSAwKTsKIAkJY2FsbF9lbmNvZGUodGFzayk7CiAJCS8qIERpZCB0aGUgZW5jb2RlIHJlc3VsdCBpbiBhbiBlcnJvciBjb25kaXRpb24/ICovCiAJCWlmICh0YXNrLT50a19zdGF0dXMgIT0gMCkKLQkJCWdvdG8gb3V0X25vc2VuZDsKKwkJCXJldHVybjsKIAl9Ci0JdGFzay0+dGtfYWN0aW9uID0gY2FsbF90cmFuc21pdF9zdGF0dXM7CiAJeHBydF90cmFuc21pdCh0YXNrKTsKIAlpZiAodGFzay0+dGtfc3RhdHVzIDwgMCkKIAkJcmV0dXJuOwotCWlmICghdGFzay0+dGtfbXNnLnJwY19wcm9jLT5wX2RlY29kZSkgewotCQl0YXNrLT50a19hY3Rpb24gPSBycGNfZXhpdF90YXNrOwotCQlycGNfd2FrZV91cF90YXNrKHRhc2spOwotCX0KLQlyZXR1cm47Ci1vdXRfbm9zZW5kOgotCS8qIHJlbGVhc2Ugc29ja2V0IHdyaXRlIGxvY2sgYmVmb3JlIGF0dGVtcHRpbmcgdG8gaGFuZGxlIGVycm9yICovCi0JeHBydF9hYm9ydF90cmFuc21pdCh0YXNrKTsKKwkvKgorCSAqIE9uIHN1Y2Nlc3MsIGVuc3VyZSB0aGF0IHdlIGNhbGwgeHBydF9lbmRfdHJhbnNtaXQoKSBiZWZvcmUgc2xlZXBpbmcKKwkgKiBpbiBvcmRlciB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIHNvY2tldCB0byBvdGhlciBSUEMgcmVxdWVzdHMuCisJICovCisJY2FsbF90cmFuc21pdF9zdGF0dXModGFzayk7CisJaWYgKHRhc2stPnRrX21zZy5ycGNfcHJvYy0+cF9kZWNvZGUgIT0gTlVMTCkKKwkJcmV0dXJuOworCXRhc2stPnRrX2FjdGlvbiA9IHJwY19leGl0X3Rhc2s7CisJcnBjX3dha2VfdXBfdGFzayh0YXNrKTsKK30KKworLyoKKyAqIDVhLglIYW5kbGUgY2xlYW51cCBhZnRlciBhIHRyYW5zbWlzc2lvbgorICovCitzdGF0aWMgdm9pZAorY2FsbF90cmFuc21pdF9zdGF0dXMoc3RydWN0IHJwY190YXNrICp0YXNrKQoreworCXRhc2stPnRrX2FjdGlvbiA9IGNhbGxfc3RhdHVzOworCS8qCisJICogU3BlY2lhbCBjYXNlOiBpZiB3ZSd2ZSBiZWVuIHdhaXRpbmcgb24gdGhlIHNvY2tldCdzIHdyaXRlX3NwYWNlKCkKKwkgKiBjYWxsYmFjaywgdGhlbiBkb24ndCBjYWxsIHhwcnRfZW5kX3RyYW5zbWl0KCkuCisJICovCisJaWYgKHRhc2stPnRrX3N0YXR1cyA9PSAtRUFHQUlOKQorCQlyZXR1cm47CisJeHBydF9lbmRfdHJhbnNtaXQodGFzayk7CiAJcnBjX3Rhc2tfZm9yY2VfcmVlbmNvZGUodGFzayk7CiB9CiAKQEAgLTk5MiwxOCArMTAwNiw3IEBACiB9CiAKIC8qCi0gKiA2YS4JSGFuZGxlIHRyYW5zbWlzc2lvbiBlcnJvcnMuCi0gKi8KLXN0YXRpYyB2b2lkCi1jYWxsX3RyYW5zbWl0X3N0YXR1cyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spCi17Ci0JaWYgKHRhc2stPnRrX3N0YXR1cyAhPSAtRUFHQUlOKQotCQlycGNfdGFza19mb3JjZV9yZWVuY29kZSh0YXNrKTsKLQljYWxsX3N0YXR1cyh0YXNrKTsKLX0KLQotLyoKLSAqIDZiLglIYW5kbGUgUlBDIHRpbWVvdXQKKyAqIDZhLglIYW5kbGUgUlBDIHRpbWVvdXQKICAqIAlXZSBkbyBub3QgcmVsZWFzZSB0aGUgcmVxdWVzdCBzbG90LCBzbyB3ZSBrZWVwIHVzaW5nIHRoZQogICoJc2FtZSBYSUQgZm9yIGFsbCByZXRyYW5zbWl0cy4KICAqLwpAQCAtMTE3OCw2ICsxMTgxLDE3IEBACiAJdTMyCSpwID0gaW92LT5pb3ZfYmFzZSwgbjsKIAlpbnQgZXJyb3IgPSAtRUFDQ0VTOwogCisJaWYgKCh0YXNrLT50a19ycXN0cC0+cnFfcmN2X2J1Zi5sZW4gJiAzKSAhPSAwKSB7CisJCS8qIFJGQy0xMDE0IHNheXMgdGhhdCB0aGUgcmVwcmVzZW50YXRpb24gb2YgWERSIGRhdGEgbXVzdCBiZSBhCisJCSAqIG11bHRpcGxlIG9mIGZvdXIgYnl0ZXMKKwkJICogLSBpZiBpdCBpc24ndCBwb2ludGVyIHN1YnRyYWN0aW9uIGluIHRoZSBORlMgY2xpZW50IG1heSBnaXZlCisJCSAqICAgdW5kZWZpbmVkIHJlc3VsdHMKKwkJICovCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJjYWxsX3ZlcmlmeTogWERSIHJlcHJlc2VudGF0aW9uIG5vdCBhIG11bHRpcGxlIG9mIgorCQkgICAgICAgIiA0IGJ5dGVzOiAweCV4XG4iLCB0YXNrLT50a19ycXN0cC0+cnFfcmN2X2J1Zi5sZW4pOworCQlnb3RvIG91dF9laW87CisJfQogCWlmICgobGVuIC09IDMpIDwgMCkKIAkJZ290byBvdXRfb3ZlcmZsb3c7CiAJcCArPSAxOwkvKiBza2lwIFhJRCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IGRjNmNiOTMuLjBiMWExYWMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTUzOSw2ICs1MzksNyBAQAogCQkJCXJwY19jbG9zZV9waXBlcyhkZW50cnktPmRfaW5vZGUpOwogCQkJCXNpbXBsZV91bmxpbmsoZGlyLCBkZW50cnkpOwogCQkJfQorCQkJaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0RFTEVURSk7CiAJCQlkcHV0KGRlbnRyeSk7CiAJCX0gd2hpbGUgKG4pOwogCQlnb3RvIHJlcGVhdDsKQEAgLTYxMCw4ICs2MTEsOCBAQAogCWludCBlcnJvcjsKIAogCXNocmlua19kY2FjaGVfcGFyZW50KGRlbnRyeSk7Ci0JaWYgKGRlbnRyeS0+ZF9pbm9kZSkKLQkJcnBjX2Nsb3NlX3BpcGVzKGRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKGRfdW5oYXNoZWQoZGVudHJ5KSkKKwkJcmV0dXJuIDA7CiAJaWYgKChlcnJvciA9IHNpbXBsZV9ybWRpcihkaXIsIGRlbnRyeSkpICE9IDApCiAJCXJldHVybiBlcnJvcjsKIAlpZiAoIWVycm9yKSB7CkBAIC02NjcsMTAgKzY2OCwxMSBAQAogCQkJUlBDQVVUSF9pbmZvLCBSUENBVVRIX0VPRik7CiAJaWYgKGVycm9yKQogCQlnb3RvIGVycl9kZXBvcHVsYXRlOworCWRnZXQoZGVudHJ5KTsKIG91dDoKIAltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CiAJcnBjX3JlbGVhc2VfcGF0aCgmbmQpOwotCXJldHVybiBkZ2V0KGRlbnRyeSk7CisJcmV0dXJuIGRlbnRyeTsKIGVycl9kZXBvcHVsYXRlOgogCXJwY19kZXBvcHVsYXRlKGRlbnRyeSk7CiAJX19ycGNfcm1kaXIoZGlyLCBkZW50cnkpOwpAQCAtNjgzLDI4ICs2ODUsMjAgQEAKIH0KIAogaW50Ci1ycGNfcm1kaXIoY2hhciAqcGF0aCkKK3JwY19ybWRpcihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IGRlbnRyeSAqcGFyZW50OwogCXN0cnVjdCBpbm9kZSAqZGlyOwogCWludCBlcnJvcjsKIAotCWlmICgoZXJyb3IgPSBycGNfbG9va3VwX3BhcmVudChwYXRoLCAmbmQpKSAhPSAwKQotCQlyZXR1cm4gZXJyb3I7Ci0JZGlyID0gbmQuZGVudHJ5LT5kX2lub2RlOworCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CisJZGlyID0gcGFyZW50LT5kX2lub2RlOwogCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuZC5sYXN0Lm5hbWUsIG5kLmRlbnRyeSwgbmQubGFzdC5sZW4pOwotCWlmIChJU19FUlIoZGVudHJ5KSkgewotCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKLQkJZ290byBvdXRfcmVsZWFzZTsKLQl9CiAJcnBjX2RlcG9wdWxhdGUoZGVudHJ5KTsKIAllcnJvciA9IF9fcnBjX3JtZGlyKGRpciwgZGVudHJ5KTsKIAlkcHV0KGRlbnRyeSk7Ci1vdXRfcmVsZWFzZToKIAltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JcnBjX3JlbGVhc2VfcGF0aCgmbmQpOworCWRwdXQocGFyZW50KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTczMSwxMCArNzI1LDExIEBACiAJcnBjaS0+ZmxhZ3MgPSBmbGFnczsKIAlycGNpLT5vcHMgPSBvcHM7CiAJaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0NSRUFURSk7CisJZGdldChkZW50cnkpOwogb3V0OgogCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKIAlycGNfcmVsZWFzZV9wYXRoKCZuZCk7Ci0JcmV0dXJuIGRnZXQoZGVudHJ5KTsKKwlyZXR1cm4gZGVudHJ5OwogZXJyX2RwdXQ6CiAJZHB1dChkZW50cnkpOwogCWRlbnRyeSA9IEVSUl9QVFIoLUVOT01FTSk7CkBAIC03NDQsMzIgKzczOSwyNiBAQAogfQogCiBpbnQKLXJwY191bmxpbmsoY2hhciAqcGF0aCkKK3JwY191bmxpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCXN0cnVjdCBuYW1laWRhdGEgbmQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OworCXN0cnVjdCBkZW50cnkgKnBhcmVudDsKIAlzdHJ1Y3QgaW5vZGUgKmRpcjsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gMDsKIAotCWlmICgoZXJyb3IgPSBycGNfbG9va3VwX3BhcmVudChwYXRoLCAmbmQpKSAhPSAwKQotCQlyZXR1cm4gZXJyb3I7Ci0JZGlyID0gbmQuZGVudHJ5LT5kX2lub2RlOworCXBhcmVudCA9IGRnZXRfcGFyZW50KGRlbnRyeSk7CisJZGlyID0gcGFyZW50LT5kX2lub2RlOwogCW11dGV4X2xvY2tfbmVzdGVkKCZkaXItPmlfbXV0ZXgsIElfTVVURVhfUEFSRU5UKTsKLQlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuZC5sYXN0Lm5hbWUsIG5kLmRlbnRyeSwgbmQubGFzdC5sZW4pOwotCWlmIChJU19FUlIoZGVudHJ5KSkgewotCQllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKLQkJZ290byBvdXRfcmVsZWFzZTsKLQl9Ci0JZF9kcm9wKGRlbnRyeSk7Ci0JaWYgKGRlbnRyeS0+ZF9pbm9kZSkgewotCQlycGNfY2xvc2VfcGlwZXMoZGVudHJ5LT5kX2lub2RlKTsKLQkJZXJyb3IgPSBzaW1wbGVfdW5saW5rKGRpciwgZGVudHJ5KTsKKwlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgeworCQlkX2Ryb3AoZGVudHJ5KTsKKwkJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgeworCQkJcnBjX2Nsb3NlX3BpcGVzKGRlbnRyeS0+ZF9pbm9kZSk7CisJCQllcnJvciA9IHNpbXBsZV91bmxpbmsoZGlyLCBkZW50cnkpOworCQl9CisJCWlub2RlX2Rpcl9ub3RpZnkoZGlyLCBETl9ERUxFVEUpOwogCX0KIAlkcHV0KGRlbnRyeSk7Ci0JaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0RFTEVURSk7Ci1vdXRfcmVsZWFzZToKIAltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JcnBjX3JlbGVhc2VfcGF0aCgmbmQpOworCWRwdXQocGFyZW50KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveHBydC5jIGIvbmV0L3N1bnJwYy94cHJ0LmMKaW5kZXggMzEzYjY4ZC4uZThjMmJjNCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy94cHJ0LmMKQEAgLTcwNywxMiArNzA3LDkgQEAKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkCi14cHJ0X2Fib3J0X3RyYW5zbWl0KHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3ZvaWQgeHBydF9lbmRfdHJhbnNtaXQoc3RydWN0IHJwY190YXNrICp0YXNrKQogewotCXN0cnVjdCBycGNfeHBydAkqeHBydCA9IHRhc2stPnRrX3hwcnQ7Ci0KLQl4cHJ0X3JlbGVhc2Vfd3JpdGUoeHBydCwgdGFzayk7CisJeHBydF9yZWxlYXNlX3dyaXRlKHRhc2stPnRrX3hwcnQsIHRhc2spOwogfQogCiAvKioKQEAgLTc2MSw4ICs3NTgsNiBAQAogCQkJdGFzay0+dGtfc3RhdHVzID0gLUVOT1RDT05OOwogCQllbHNlIGlmICghcmVxLT5ycV9yZWNlaXZlZCkKIAkJCXJwY19zbGVlcF9vbigmeHBydC0+cGVuZGluZywgdGFzaywgTlVMTCwgeHBydF90aW1lcik7Ci0KLQkJeHBydC0+b3BzLT5yZWxlYXNlX3hwcnQoeHBydCwgdGFzayk7CiAJCXNwaW5fdW5sb2NrX2JoKCZ4cHJ0LT50cmFuc3BvcnRfbG9jayk7CiAJCXJldHVybjsKIAl9CkBAIC03NzIsMTggKzc2Nyw4IEBACiAJICoJIHNjaGVkcSwgYW5kIGJlaW5nIHBpY2tlZCB1cCBieSBhIHBhcmFsbGVsIHJ1biBvZiBycGNpb2QoKS4KIAkgKi8KIAl0YXNrLT50a19zdGF0dXMgPSBzdGF0dXM7Ci0KLQlzd2l0Y2ggKHN0YXR1cykgewotCWNhc2UgLUVDT05OUkVGVVNFRDoKKwlpZiAoc3RhdHVzID09IC1FQ09OTlJFRlVTRUQpCiAJCXJwY19zbGVlcF9vbigmeHBydC0+c2VuZGluZywgdGFzaywgTlVMTCwgTlVMTCk7Ci0JY2FzZSAtRUFHQUlOOgotCWNhc2UgLUVOT1RDT05OOgotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXhwcnRfcmVsZWFzZV93cml0ZSh4cHJ0LCB0YXNrKTsKLQlyZXR1cm47CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkb194cHJ0X3Jlc2VydmUoc3RydWN0IHJwY190YXNrICp0YXNrKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy94cHJ0c29jay5jIGIvbmV0L3N1bnJwYy94cHJ0c29jay5jCmluZGV4IGVlNjc4ZWQuLjQ0MWJkNTMgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydHNvY2suYworKysgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKQEAgLTQxNCw2ICs0MTQsMzMgQEAKIH0KIAogLyoqCisgKiB4c190Y3BfcmVsZWFzZV94cHJ0IC0gY2xlYW4gdXAgYWZ0ZXIgYSB0Y3AgdHJhbnNtaXNzaW9uCisgKiBAeHBydDogdHJhbnNwb3J0CisgKiBAdGFzazogcnBjIHRhc2sKKyAqCisgKiBUaGlzIGNsZWFucyB1cCBpZiBhbiBlcnJvciBjYXVzZXMgdXMgdG8gYWJvcnQgdGhlIHRyYW5zbWlzc2lvbiBvZiBhIHJlcXVlc3QuCisgKiBJbiB0aGlzIGNhc2UsIHRoZSBzb2NrZXQgbWF5IG5lZWQgdG8gYmUgcmVzZXQgaW4gb3JkZXIgdG8gYXZvaWQgY29uZnVzaW5nCisgKiB0aGUgc2VydmVyLgorICovCitzdGF0aWMgdm9pZCB4c190Y3BfcmVsZWFzZV94cHJ0KHN0cnVjdCBycGNfeHBydCAqeHBydCwgc3RydWN0IHJwY190YXNrICp0YXNrKQoreworCXN0cnVjdCBycGNfcnFzdCAqcmVxOworCisJaWYgKHRhc2sgIT0geHBydC0+c25kX3Rhc2spCisJCXJldHVybjsKKwlpZiAodGFzayA9PSBOVUxMKQorCQlnb3RvIG91dF9yZWxlYXNlOworCXJlcSA9IHRhc2stPnRrX3Jxc3RwOworCWlmIChyZXEtPnJxX2J5dGVzX3NlbnQgPT0gMCkKKwkJZ290byBvdXRfcmVsZWFzZTsKKwlpZiAocmVxLT5ycV9ieXRlc19zZW50ID09IHJlcS0+cnFfc25kX2J1Zi5sZW4pCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJc2V0X2JpdChYUFJUX0NMT1NFX1dBSVQsICZ0YXNrLT50a194cHJ0LT5zdGF0ZSk7CitvdXRfcmVsZWFzZToKKwl4cHJ0X3JlbGVhc2VfeHBydCh4cHJ0LCB0YXNrKTsKK30KKworLyoqCiAgKiB4c19jbG9zZSAtIGNsb3NlIGEgc29ja2V0CiAgKiBAeHBydDogdHJhbnNwb3J0CiAgKgpAQCAtMTI1MCw3ICsxMjc3LDcgQEAKIAogc3RhdGljIHN0cnVjdCBycGNfeHBydF9vcHMgeHNfdGNwX29wcyA9IHsKIAkucmVzZXJ2ZV94cHJ0CQk9IHhwcnRfcmVzZXJ2ZV94cHJ0LAotCS5yZWxlYXNlX3hwcnQJCT0geHBydF9yZWxlYXNlX3hwcnQsCisJLnJlbGVhc2VfeHBydAkJPSB4c190Y3BfcmVsZWFzZV94cHJ0LAogCS5zZXRfcG9ydAkJPSB4c19zZXRfcG9ydCwKIAkuY29ubmVjdAkJPSB4c19jb25uZWN0LAogCS5idWZfYWxsb2MJCT0gcnBjX21hbGxvYywKZGlmZiAtLWdpdCBhL25ldC91bml4L2FmX3VuaXguYyBiL25ldC91bml4L2FmX3VuaXguYwppbmRleCA2ZjI5MDkyLi5kZTZlYzUxIDEwMDY0NAotLS0gYS9uZXQvdW5peC9hZl91bml4LmMKKysrIGIvbmV0L3VuaXgvYWZfdW5peC5jCkBAIC0xMjgsMjMgKzEyOCwxNyBAQAogI2RlZmluZSBVTklYX0FCU1RSQUNUKHNrKQkodW5peF9zayhzayktPmFkZHItPmhhc2ggIT0gVU5JWF9IQVNIX1NJWkUpCiAKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwotc3RhdGljIHZvaWQgdW5peF9nZXRfcGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIHZvaWQgdW5peF9nZXRfc2VjZGF0YShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWludCBlcnI7Ci0KLQllcnIgPSBzZWN1cml0eV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShza2IsIFVOSVhTRUNEQVRBKHNrYiksCi0JCQkJCSAgICAgICBVTklYU0VDTEVOKHNrYikpOwotCWlmIChlcnIpCi0JCSooVU5JWFNFQ0RBVEEoc2tiKSkgPSBOVUxMOworCW1lbWNweShVTklYU0lEKHNrYiksICZzY20tPnNlY2lkLCBzaXplb2YodTMyKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bml4X3NldF9zZWNkYXRhKHN0cnVjdCBzY21fY29va2llICpzY20sIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc2NtLT5zZWNkYXRhID0gKlVOSVhTRUNEQVRBKHNrYik7Ci0Jc2NtLT5zZWNsZW4gPSAqVU5JWFNFQ0xFTihza2IpOworCXNjbS0+c2VjaWQgPSAqVU5JWFNJRChza2IpOwogfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB1bml4X2dldF9wZWVyc2VjX2RncmFtKHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW5saW5lIHZvaWQgdW5peF9nZXRfc2VjZGF0YShzdHJ1Y3Qgc2NtX2Nvb2tpZSAqc2NtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogeyB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1bml4X3NldF9zZWNkYXRhKHN0cnVjdCBzY21fY29va2llICpzY20sIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMzIyLDggKzEzMTYsNyBAQAogCW1lbWNweShVTklYQ1JFRFMoc2tiKSwgJnNpb2NiLT5zY20tPmNyZWRzLCBzaXplb2Yoc3RydWN0IHVjcmVkKSk7CiAJaWYgKHNpb2NiLT5zY20tPmZwKQogCQl1bml4X2F0dGFjaF9mZHMoc2lvY2ItPnNjbSwgc2tiKTsKLQotCXVuaXhfZ2V0X3BlZXJzZWNfZGdyYW0oc2tiKTsKKwl1bml4X2dldF9zZWNkYXRhKHNpb2NiLT5zY20sIHNrYik7CiAKIAlza2ItPmgucmF3ID0gc2tiLT5kYXRhOwogCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsbGVuKSwgbXNnLT5tc2dfaW92LCBsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9hbGdvLmMgYi9uZXQveGZybS94ZnJtX2FsZ28uYwppbmRleCAwNGUxYWVhLi41YTBkYmViIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2FsZ28uYworKysgYi9uZXQveGZybS94ZnJtX2FsZ28uYwpAQCAtMzAsNyArMzAsOCBAQAogICovCiBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGFhbGdfbGlzdFtdID0gewogewotCS5uYW1lID0gImRpZ2VzdF9udWxsIiwKKwkubmFtZSA9ICJobWFjKGRpZ2VzdF9udWxsKSIsCisJLmNvbXBhdCA9ICJkaWdlc3RfbnVsbCIsCiAJCiAJLnVpbmZvID0gewogCQkuYXV0aCA9IHsKQEAgLTQ3LDcgKzQ4LDggQEAKIAl9CiB9LAogewotCS5uYW1lID0gIm1kNSIsCisJLm5hbWUgPSAiaG1hYyhtZDUpIiwKKwkuY29tcGF0ID0gIm1kNSIsCiAKIAkudWluZm8gPSB7CiAJCS5hdXRoID0gewpAQCAtNjQsNyArNjYsOCBAQAogCX0KIH0sCiB7Ci0JLm5hbWUgPSAic2hhMSIsCisJLm5hbWUgPSAiaG1hYyhzaGExKSIsCisJLmNvbXBhdCA9ICJzaGExIiwKIAogCS51aW5mbyA9IHsKIAkJLmF1dGggPSB7CkBAIC04MSw3ICs4NCw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJzaGEyNTYiLAorCS5uYW1lID0gImhtYWMoc2hhMjU2KSIsCisJLmNvbXBhdCA9ICJzaGEyNTYiLAogCiAJLnVpbmZvID0gewogCQkuYXV0aCA9IHsKQEAgLTk4LDcgKzEwMiw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJyaXBlbWQxNjAiLAorCS5uYW1lID0gImhtYWMocmlwZW1kMTYwKSIsCisJLmNvbXBhdCA9ICJyaXBlbWQxNjAiLAogCiAJLnVpbmZvID0gewogCQkuYXV0aCA9IHsKQEAgLTExOCw3ICsxMjMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjIGVhbGdfbGlzdFtdID0gewogewotCS5uYW1lID0gImNpcGhlcl9udWxsIiwKKwkubmFtZSA9ICJlY2IoY2lwaGVyX251bGwpIiwKKwkuY29tcGF0ID0gImNpcGhlcl9udWxsIiwKIAkKIAkudWluZm8gPSB7CiAJCS5lbmNyID0gewpAQCAtMTM1LDcgKzE0MSw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJkZXMiLAorCS5uYW1lID0gImNiYyhkZXMpIiwKKwkuY29tcGF0ID0gImRlcyIsCiAKIAkudWluZm8gPSB7CiAJCS5lbmNyID0gewpAQCAtMTUyLDcgKzE1OSw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJkZXMzX2VkZSIsCisJLm5hbWUgPSAiY2JjKGRlczNfZWRlKSIsCisJLmNvbXBhdCA9ICJkZXMzX2VkZSIsCiAKIAkudWluZm8gPSB7CiAJCS5lbmNyID0gewpAQCAtMTY5LDcgKzE3Nyw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJjYXN0MTI4IiwKKwkubmFtZSA9ICJjYmMoY2FzdDEyOCkiLAorCS5jb21wYXQgPSAiY2FzdDEyOCIsCiAKIAkudWluZm8gPSB7CiAJCS5lbmNyID0gewpAQCAtMTg2LDcgKzE5NSw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJibG93ZmlzaCIsCisJLm5hbWUgPSAiY2JjKGJsb3dmaXNoKSIsCisJLmNvbXBhdCA9ICJibG93ZmlzaCIsCiAKIAkudWluZm8gPSB7CiAJCS5lbmNyID0gewpAQCAtMjAzLDcgKzIxMyw4IEBACiAJfQogfSwKIHsKLQkubmFtZSA9ICJhZXMiLAorCS5uYW1lID0gImNiYyhhZXMpIiwKKwkuY29tcGF0ID0gImFlcyIsCiAKIAkudWluZm8gPSB7CiAJCS5lbmNyID0gewpAQCAtMjIwLDcgKzIzMSw4IEBACiAJfQogfSwKIHsKLSAgICAgICAgLm5hbWUgPSAic2VycGVudCIsCisgICAgICAgIC5uYW1lID0gImNiYyhzZXJwZW50KSIsCisgICAgICAgIC5jb21wYXQgPSAic2VycGVudCIsCiAKICAgICAgICAgLnVpbmZvID0gewogICAgICAgICAgICAgICAgIC5lbmNyID0gewpAQCAtMjM3LDcgKzI0OSw4IEBACiAgICAgICAgIH0KIH0sCiB7Ci0gICAgICAgIC5uYW1lID0gInR3b2Zpc2giLAorICAgICAgICAubmFtZSA9ICJjYmModHdvZmlzaCkiLAorICAgICAgICAuY29tcGF0ID0gInR3b2Zpc2giLAogICAgICAgICAgICAgICAgICAKICAgICAgICAgLnVpbmZvID0gewogICAgICAgICAgICAgICAgIC5lbmNyID0gewpAQCAtMzUwLDggKzM2Myw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTCh4ZnJtX2NhbGdfZ2V0X2J5aWQpOwogCiBzdGF0aWMgc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2dldF9ieW5hbWUoc3RydWN0IHhmcm1fYWxnb19kZXNjICpsaXN0LAotCQkJCQkgICAgICBpbnQgZW50cmllcywgY2hhciAqbmFtZSwKLQkJCQkJICAgICAgaW50IHByb2JlKQorCQkJCQkgICAgICBpbnQgZW50cmllcywgdTMyIHR5cGUsIHUzMiBtYXNrLAorCQkJCQkgICAgICBjaGFyICpuYW1lLCBpbnQgcHJvYmUpCiB7CiAJaW50IGksIHN0YXR1czsKIApAQCAtMzU5LDcgKzM3Miw4IEBACiAJCXJldHVybiBOVUxMOwogCiAJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewotCQlpZiAoc3RyY21wKG5hbWUsIGxpc3RbaV0ubmFtZSkpCisJCWlmIChzdHJjbXAobmFtZSwgbGlzdFtpXS5uYW1lKSAmJgorCQkgICAgKCFsaXN0W2ldLmNvbXBhdCB8fCBzdHJjbXAobmFtZSwgbGlzdFtpXS5jb21wYXQpKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChsaXN0W2ldLmF2YWlsYWJsZSkKQEAgLTM2OCw3ICszODIsNyBAQAogCQlpZiAoIXByb2JlKQogCQkJYnJlYWs7CiAKLQkJc3RhdHVzID0gY3J5cHRvX2FsZ19hdmFpbGFibGUobmFtZSwgMCk7CisJCXN0YXR1cyA9IGNyeXB0b19oYXNfYWxnKG5hbWUsIHR5cGUsIG1hc2sgfCBDUllQVE9fQUxHX0FTWU5DKTsKIAkJaWYgKCFzdGF0dXMpCiAJCQlicmVhazsKIApAQCAtMzgwLDE5ICszOTQsMjUgQEAKIAogc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2FhbGdfZ2V0X2J5bmFtZShjaGFyICpuYW1lLCBpbnQgcHJvYmUpCiB7Ci0JcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShhYWxnX2xpc3QsIGFhbGdfZW50cmllcygpLCBuYW1lLCBwcm9iZSk7CisJcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShhYWxnX2xpc3QsIGFhbGdfZW50cmllcygpLAorCQkJICAgICAgIENSWVBUT19BTEdfVFlQRV9IQVNILCBDUllQVE9fQUxHX1RZUEVfSEFTSF9NQVNLLAorCQkJICAgICAgIG5hbWUsIHByb2JlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fYWFsZ19nZXRfYnluYW1lKTsKIAogc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2VhbGdfZ2V0X2J5bmFtZShjaGFyICpuYW1lLCBpbnQgcHJvYmUpCiB7Ci0JcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShlYWxnX2xpc3QsIGVhbGdfZW50cmllcygpLCBuYW1lLCBwcm9iZSk7CisJcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShlYWxnX2xpc3QsIGVhbGdfZW50cmllcygpLAorCQkJICAgICAgIENSWVBUT19BTEdfVFlQRV9CTEtDSVBIRVIsIENSWVBUT19BTEdfVFlQRV9NQVNLLAorCQkJICAgICAgIG5hbWUsIHByb2JlKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHhmcm1fZWFsZ19nZXRfYnluYW1lKTsKIAogc3RydWN0IHhmcm1fYWxnb19kZXNjICp4ZnJtX2NhbGdfZ2V0X2J5bmFtZShjaGFyICpuYW1lLCBpbnQgcHJvYmUpCiB7Ci0JcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShjYWxnX2xpc3QsIGNhbGdfZW50cmllcygpLCBuYW1lLCBwcm9iZSk7CisJcmV0dXJuIHhmcm1fZ2V0X2J5bmFtZShjYWxnX2xpc3QsIGNhbGdfZW50cmllcygpLAorCQkJICAgICAgIENSWVBUT19BTEdfVFlQRV9DT01QUkVTUywgQ1JZUFRPX0FMR19UWVBFX01BU0ssCisJCQkgICAgICAgbmFtZSwgcHJvYmUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoeGZybV9jYWxnX2dldF9ieW5hbWUpOwogCkBAIC00MjcsMTkgKzQ0NywyMiBAQAogCUJVR19PTihpbl9zb2Z0aXJxKCkpOwogCiAJZm9yIChpID0gMDsgaSA8IGFhbGdfZW50cmllcygpOyBpKyspIHsKLQkJc3RhdHVzID0gY3J5cHRvX2FsZ19hdmFpbGFibGUoYWFsZ19saXN0W2ldLm5hbWUsIDApOworCQlzdGF0dXMgPSBjcnlwdG9faGFzX2hhc2goYWFsZ19saXN0W2ldLm5hbWUsIDAsCisJCQkJCSBDUllQVE9fQUxHX0FTWU5DKTsKIAkJaWYgKGFhbGdfbGlzdFtpXS5hdmFpbGFibGUgIT0gc3RhdHVzKQogCQkJYWFsZ19saXN0W2ldLmF2YWlsYWJsZSA9IHN0YXR1czsKIAl9CiAJCiAJZm9yIChpID0gMDsgaSA8IGVhbGdfZW50cmllcygpOyBpKyspIHsKLQkJc3RhdHVzID0gY3J5cHRvX2FsZ19hdmFpbGFibGUoZWFsZ19saXN0W2ldLm5hbWUsIDApOworCQlzdGF0dXMgPSBjcnlwdG9faGFzX2Jsa2NpcGhlcihlYWxnX2xpc3RbaV0ubmFtZSwgMCwKKwkJCQkJICAgICAgQ1JZUFRPX0FMR19BU1lOQyk7CiAJCWlmIChlYWxnX2xpc3RbaV0uYXZhaWxhYmxlICE9IHN0YXR1cykKIAkJCWVhbGdfbGlzdFtpXS5hdmFpbGFibGUgPSBzdGF0dXM7CiAJfQogCQogCWZvciAoaSA9IDA7IGkgPCBjYWxnX2VudHJpZXMoKTsgaSsrKSB7Ci0JCXN0YXR1cyA9IGNyeXB0b19hbGdfYXZhaWxhYmxlKGNhbGdfbGlzdFtpXS5uYW1lLCAwKTsKKwkJc3RhdHVzID0gY3J5cHRvX2hhc19jb21wKGNhbGdfbGlzdFtpXS5uYW1lLCAwLAorCQkJCQkgQ1JZUFRPX0FMR19BU1lOQyk7CiAJCWlmIChjYWxnX2xpc3RbaV0uYXZhaWxhYmxlICE9IHN0YXR1cykKIAkJCWNhbGdfbGlzdFtpXS5hdmFpbGFibGUgPSBzdGF0dXM7CiAJfQpAQCAtNDcxLDExICs0OTQsMTIgQEAKIAogLyogTW92ZSB0byBjb21tb24gYXJlYTogaXQgaXMgc2hhcmVkIHdpdGggQUguICovCiAKLXZvaWQgc2tiX2ljdl93YWxrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBjcnlwdG9fdGZtICp0Zm0sCi0JCSAgaW50IG9mZnNldCwgaW50IGxlbiwgaWN2X3VwZGF0ZV9mbl90IGljdl91cGRhdGUpCitpbnQgc2tiX2ljdl93YWxrKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBoYXNoX2Rlc2MgKmRlc2MsCisJCSBpbnQgb2Zmc2V0LCBpbnQgbGVuLCBpY3ZfdXBkYXRlX2ZuX3QgaWN2X3VwZGF0ZSkKIHsKIAlpbnQgc3RhcnQgPSBza2JfaGVhZGxlbihza2IpOwogCWludCBpLCBjb3B5ID0gc3RhcnQgLSBvZmZzZXQ7CisJaW50IGVycjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2c7CiAKIAkvKiBDaGVja3N1bSBoZWFkZXIuICovCkBAIC00ODcsMTAgKzUxMSwxMiBAQAogCQlzZy5vZmZzZXQgPSAodW5zaWduZWQgbG9uZykoc2tiLT5kYXRhICsgb2Zmc2V0KSAlIFBBR0VfU0laRTsKIAkJc2cubGVuZ3RoID0gY29weTsKIAkJCi0JCWljdl91cGRhdGUodGZtLCAmc2csIDEpOworCQllcnIgPSBpY3ZfdXBkYXRlKGRlc2MsICZzZywgY29weSk7CisJCWlmICh1bmxpa2VseShlcnIpKQorCQkJcmV0dXJuIGVycjsKIAkJCiAJCWlmICgobGVuIC09IGNvcHkpID09IDApCi0JCQlyZXR1cm47CisJCQlyZXR1cm4gMDsKIAkJb2Zmc2V0ICs9IGNvcHk7CiAJfQogCkBAIC01MTAsMTAgKzUzNiwxMiBAQAogCQkJc2cub2Zmc2V0ID0gZnJhZy0+cGFnZV9vZmZzZXQgKyBvZmZzZXQtc3RhcnQ7CiAJCQlzZy5sZW5ndGggPSBjb3B5OwogCQkJCi0JCQlpY3ZfdXBkYXRlKHRmbSwgJnNnLCAxKTsKKwkJCWVyciA9IGljdl91cGRhdGUoZGVzYywgJnNnLCBjb3B5KTsKKwkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCXJldHVybiBlcnI7CiAKIAkJCWlmICghKGxlbiAtPSBjb3B5KSkKLQkJCQlyZXR1cm47CisJCQkJcmV0dXJuIDA7CiAJCQlvZmZzZXQgKz0gY29weTsKIAkJfQogCQlzdGFydCA9IGVuZDsKQEAgLTUzMSwxNSArNTU5LDE5IEBACiAJCQlpZiAoKGNvcHkgPSBlbmQgLSBvZmZzZXQpID4gMCkgewogCQkJCWlmIChjb3B5ID4gbGVuKQogCQkJCQljb3B5ID0gbGVuOwotCQkJCXNrYl9pY3Zfd2FsayhsaXN0LCB0Zm0sIG9mZnNldC1zdGFydCwgY29weSwgaWN2X3VwZGF0ZSk7CisJCQkJZXJyID0gc2tiX2ljdl93YWxrKGxpc3QsIGRlc2MsIG9mZnNldC1zdGFydCwKKwkJCQkJCSAgIGNvcHksIGljdl91cGRhdGUpOworCQkJCWlmICh1bmxpa2VseShlcnIpKQorCQkJCQlyZXR1cm4gZXJyOwogCQkJCWlmICgobGVuIC09IGNvcHkpID09IDApCi0JCQkJCXJldHVybjsKKwkJCQkJcmV0dXJuIDA7CiAJCQkJb2Zmc2V0ICs9IGNvcHk7CiAJCQl9CiAJCQlzdGFydCA9IGVuZDsKIAkJfQogCX0KIAlCVUdfT04obGVuKTsKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNrYl9pY3Zfd2Fsayk7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcG9saWN5LmMgYi9uZXQveGZybS94ZnJtX3BvbGljeS5jCmluZGV4IGYzNWJjNjc2Li4zZGE2N2NhIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTExMzQsMTIgKzExMzQsMzMgQEAKIH0KIEVYUE9SVF9TWU1CT0woX194ZnJtX3JvdXRlX2ZvcndhcmQpOwogCisvKiBPcHRpbWl6ZSBsYXRlciB1c2luZyBjb29raWVzIGFuZCBnZW5lcmF0aW9uIGlkcy4gKi8KKwogc3RhdGljIHN0cnVjdCBkc3RfZW50cnkgKnhmcm1fZHN0X2NoZWNrKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgdTMyIGNvb2tpZSkKIHsKLQkvKiBJZiBpdCBpcyBtYXJrZWQgb2Jzb2xldGUsIHdoaWNoIGlzIGhvdyB3ZSBldmVuIGdldCBoZXJlLAotCSAqIHRoZW4gd2UgaGF2ZSBwdXJnZWQgaXQgZnJvbSB0aGUgcG9saWN5IGJ1bmRsZSBsaXN0IGFuZCB3ZQotCSAqIGRpZCB0aGF0IGZvciBhIGdvb2QgcmVhc29uLgorCS8qIENvZGUgKHN1Y2ggYXMgX194ZnJtNF9idW5kbGVfY3JlYXRlKCkpIHNldHMgZHN0LT5vYnNvbGV0ZQorCSAqIHRvICItMSIgdG8gZm9yY2UgYWxsIFhGUk0gZGVzdGluYXRpb25zIHRvIGdldCB2YWxpZGF0ZWQgYnkKKwkgKiBkc3Rfb3BzLT5jaGVjayBvbiBldmVyeSB1c2UuICBXZSBkbyB0aGlzIGJlY2F1c2Ugd2hlbiBhCisJICogbm9ybWFsIHJvdXRlIHJlZmVyZW5jZWQgYnkgYW4gWEZSTSBkc3QgaXMgb2Jzb2xldGVkIHdlIGRvCisJICogbm90IGdvIGxvb2tpbmcgYXJvdW5kIGZvciBhbGwgcGFyZW50IHJlZmVyZW5jaW5nIFhGUk0gZHN0cworCSAqIHNvIHRoYXQgd2UgY2FuIGludmFsaWRhdGUgdGhlbS4gIEl0IGlzIGp1c3QgdG9vIG11Y2ggd29yay4KKwkgKiBJbnN0ZWFkIHdlIG1ha2UgdGhlIGNoZWNrcyBoZXJlIG9uIGV2ZXJ5IHVzZS4gIEZvciBleGFtcGxlOgorCSAqCisJICoJWEZSTSBkc3QgQSAtLT4gSVB2NCBkc3QgWAorCSAqCisJICogWCBpcyB0aGUgInhkc3QtPnJvdXRlIiBvZiBBIChYIGlzIGFsc28gdGhlICJkc3QtPnBhdGgiIG9mIEEKKwkgKiBpbiB0aGlzIGV4YW1wbGUpLiAgSWYgWCBpcyBtYXJrZWQgb2Jzb2xldGUsICJBIiB3aWxsIG5vdAorCSAqIG5vdGljZS4gIFRoYXQncyB3aGF0IHdlIGFyZSB2YWxpZGF0aW5nIGhlcmUgdmlhIHRoZQorCSAqIHN0YWxlX2J1bmRsZSgpIGNoZWNrLgorCSAqCisJICogV2hlbiBhIHBvbGljeSdzIGJ1bmRsZSBpcyBwcnVuZWQsIHdlIGRzdF9mcmVlKCkgdGhlIFhGUk0KKwkgKiBkc3Qgd2hpY2ggY2F1c2VzIGl0J3MgLT5vYnNvbGV0ZSBmaWVsZCB0byBiZSBzZXQgdG8gYQorCSAqIHBvc2l0aXZlIG5vbi16ZXJvIGludGVnZXIuICBJZiBhbiBYRlJNIGRzdCBoYXMgYmVlbiBwcnVuZWQKKwkgKiBsaWtlIHRoaXMsIHdlIHdhbnQgdG8gZm9yY2UgYSBuZXcgcm91dGUgbG9va3VwLgogCSAqLworCWlmIChkc3QtPm9ic29sZXRlIDwgMCAmJiAhc3RhbGVfYnVuZGxlKGRzdCkpCisJCXJldHVybiBkc3Q7CisKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV91c2VyLmMgYi9uZXQveGZybS94ZnJtX3VzZXIuYwppbmRleCAzZTZhNzIyLi5mYTc5ZGRjIDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3VzZXIuYworKysgYi9uZXQveGZybS94ZnJtX3VzZXIuYwpAQCAtMTAsNiArMTAsNyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvY3J5cHRvLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTIxMiw2ICsyMTMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCW1lbWNweShwLCB1YWxnLCBsZW4pOworCXN0cmNweShwLT5hbGdfbmFtZSwgYWxnby0+bmFtZSk7CiAJKmFsZ3BwID0gcDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUgYi9zY3JpcHRzL0tidWlsZC5pbmNsdWRlCmluZGV4IDIxODBjODguLmJiMTljMTUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvS2J1aWxkLmluY2x1ZGUKKysrIGIvc2NyaXB0cy9LYnVpbGQuaW5jbHVkZQpAQCAtNzcsMTQgKzc3LDIwIEBACiAKICMgY2MtdmVyc2lvbgogIyBVc2FnZSBnY2MtdmVyIDo9ICQoY2FsbCBjYy12ZXJzaW9uLCAkKENDKSkKLWNjLXZlcnNpb24gPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXZlcnNpb24uc2ggXAotICAgICAgICAgICAgICAkKGlmICQoMSksICQoMSksICQoQ0MpKSkKK2NjLXZlcnNpb24gPSAkKHNoZWxsICQoQ09ORklHX1NIRUxMKSAkKHNyY3RyZWUpL3NjcmlwdHMvZ2NjLXZlcnNpb24uc2ggJChDQykpCiAKICMgY2MtaWZ2ZXJzaW9uCiAjIFVzYWdlOiAgRVhUUkFfQ0ZMQUdTICs9ICQoY2FsbCBjYy1pZnZlcnNpb24sIC1sdCwgMDQwMiwgLU8xKQogY2MtaWZ2ZXJzaW9uID0gJChzaGVsbCBpZiBbICQoY2FsbCBjYy12ZXJzaW9uLCAkKENDKSkgJCgxKSAkKDIpIF07IHRoZW4gXAogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICQoMyk7IGZpOykKIAorIyBsZC1vcHRpb24KKyMgVXNhZ2U6IGxkZmxhZ3MgKz0gJChjYWxsIGxkLW9wdGlvbiwgLVdsJChjb21tYSktLWhhc2gtc3R5bGU9Ym90aCkKK2xkLW9wdGlvbiA9ICQoc2hlbGwgaWYgJChDQykgJCgxKSBcCisJCQkgICAgIC1ub3N0ZGxpYiAtbyBsZHRlc3QkJCQkLm91dCAteGMgL2Rldi9udWxsIFwKKyAgICAgICAgICAgICA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuIGVjaG8gIiQoMSkiOyBlbHNlIGVjaG8gIiQoMikiOyBmaTsgXAorCSAgICAgcm0gLWYgbGR0ZXN0JCQkJC5vdXQpCisKICMjIwogIyBTaG9ydGhhbmQgZm9yICQoUSkkKE1BS0UpIC1mIHNjcmlwdHMvTWFrZWZpbGUuYnVpbGQgb2JqPQogIyBVc2FnZToKZGlmZiAtLWdpdCBhL3NjcmlwdHMvTWFrZWZpbGUuaGVhZGVyc2luc3QgYi9zY3JpcHRzL01ha2VmaWxlLmhlYWRlcnNpbnN0CmluZGV4IGFhOTk5MGEuLjEyZTFkYWYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuaGVhZGVyc2luc3QKKysrIGIvc2NyaXB0cy9NYWtlZmlsZS5oZWFkZXJzaW5zdApAQCAtOTMsMTQgKzkzLDE0IEBACiBlY2hvICJcI2lmbmRlZiAkJFNUVUJERUYiIDsJCQkJCQlcCiBlY2hvICJcI2RlZmluZSAkJFNUVUJERUYiIDsJCQkJCQlcCiBlY2hvICJcIyBpZiAkKEFSQ0hERUYpIiA7CQkJCQkJXAotaWYgWyAtciAkKHNyY3RyZWUpL2luY2x1ZGUvJChhcmNoYXNtKS8kQCBdOyB0aGVuCQkJXAoraWYgWyAtciAkKElOU1RBTExfSERSX1BBVEgpL2luY2x1ZGUvJChhcmNoYXNtKS8kQCBdOyB0aGVuCQlcCiAJZWNobyAiXCMgIGluY2x1ZGUgPCQoYXJjaGFzbSkvJEA+IiA7CQkJCVwKIGVsc2UJCQkJCQkJCQlcCiAJZWNobyAiXCMgIGVycm9yICQoYXJjaGFzbSkvJEAgZG9lcyBub3QgZXhpc3QgaW4iCQlcCiAJCQkidGhlICQoQVJDSCkgYXJjaGl0ZWN0dXJlIiA7CQkJXAogZmkgOwkJCQkJCQkJCVwKIGVjaG8gIlwjIGVsaWYgJChBTFRBUkNIREVGKSIgOwkJCQkJCVwKLWlmIFsgLXIgJChzcmN0cmVlKS9pbmNsdWRlLyQoYWx0YXJjaGFzbSkvJEAgXTsgdGhlbgkJCVwKK2lmIFsgLXIgJChJTlNUQUxMX0hEUl9QQVRIKS9pbmNsdWRlLyQoYWx0YXJjaGFzbSkvJEAgXTsgdGhlbgkJXAogCWVjaG8gIlwjICBpbmNsdWRlIDwkKGFsdGFyY2hhc20pLyRAPiIgOwkJCQlcCiBlbHNlCQkJCQkJCQkJXAogCWVjaG8gIlwjICBlcnJvciAkKGFsdGFyY2hhc20pLyRAIGRvZXMgbm90IGV4aXN0IGluIgkJXApAQCAtMTQ5LDcgKzE0OSw5IEBACiBoZHJpbnN0IDo9IC1yUiAtZiAkKHNyY3RyZWUpL3NjcmlwdHMvTWFrZWZpbGUuaGVhZGVyc2luc3Qgb2JqCiAKIC5QSE9OWTogYWx0YXJjaC1kaXIKLWFsdGFyY2gtZGlyOgorIyBBbGwgdGhlIGZpbGVzIGluIHRoZSBub3JtYWwgYXJjaCBkaXIgbXVzdCBiZSBjcmVhdGVkIGZpcnN0LCBzaW5jZSB3ZSB0ZXN0CisjIGZvciB0aGVpciBleGlzdGVuY2UuCithbHRhcmNoLWRpcjogJChzdWJkaXIteSkgJChoZWFkZXIteSkgJCh1bmlmZGVmLXkpICQob2JqaGRyLXkpCiAJJChRKSQoTUFLRSkgJChoZHJpbnN0KT1pbmNsdWRlL2FzbS0kKEFMVEFSQ0gpIGRzdD1pbmNsdWRlL2FzbS0kKEFMVEFSQ0gpCiAJJChRKSQoTUFLRSkgJChoZHJpbnN0KT1pbmNsdWRlL2FzbSBkc3Q9aW5jbHVkZS9hc20KIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZS5ob3N0IGIvc2NyaXB0cy9NYWtlZmlsZS5ob3N0CmluZGV4IDE4ZWNkNGQuLjA2MGY0YzUgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvTWFrZWZpbGUuaG9zdAorKysgYi9zY3JpcHRzL01ha2VmaWxlLmhvc3QKQEAgLTMwLDcgKzMwLDcgQEAKICMgbGlia2NvbmZpZy5zbyBhcyB0aGUgZXhlY3V0YWJsZSBjb25mLgogIyBOb3RlOiBTaGFyZWQgbGlicmFyaWVzIGNvbnNpc3Rpbmcgb2YgQysrIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkCiAKLV9faG9zdHByb2dzIDo9ICQoc29ydCAkKGhvc3Rwcm9ncy15KSQoaG9zdHByb2dzLW0pKQorX19ob3N0cHJvZ3MgOj0gJChzb3J0ICQoaG9zdHByb2dzLXkpICQoaG9zdHByb2dzLW0pKQogCiAjIGhvc3Rwcm9ncy15IDo9IHRvb2xzL2J1aWxkIG1heSBoYXZlIGJlZW4gc3BlY2lmaWVkLiBSZXRyZWl2ZSBkaXJlY3RvcnkKIGhvc3Qtb2JqZGlycyA6PSAkKGZvcmVhY2ggZiwkKF9faG9zdHByb2dzKSwgJChpZiAkKGRpciAkKGYpKSwkKGRpciAkKGYpKSkpCmRpZmYgLS1naXQgYS9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QgYi9zY3JpcHRzL01ha2VmaWxlLm1vZHBvc3QKaW5kZXggYTQ5NTUwMi4uMGE2NDY4OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZS5tb2Rwb3N0CisrKyBiL3NjcmlwdHMvTWFrZWZpbGUubW9kcG9zdApAQCAtNDAsNyArNDAsNyBAQAogaW5jbHVkZSBzY3JpcHRzL01ha2VmaWxlLmxpYgogCiBrZXJuZWxzeW1maWxlIDo9ICQob2JqdHJlZSkvTW9kdWxlLnN5bXZlcnMKLW1vZHVsZXN5bWZpbGUgOj0gJChLQlVJTERfRVhUTU9EKS9Nb2R1bGVzLnN5bXZlcnMKK21vZHVsZXN5bWZpbGUgOj0gJChLQlVJTERfRVhUTU9EKS9Nb2R1bGUuc3ltdmVycwogCiAjIFN0ZXAgMSksIGZpbmQgYWxsIG1vZHVsZXMgbGlzdGVkIGluICQoTU9EVkVSRElSKS8KIF9fbW9kdWxlcyA6PSAkKHNvcnQgJChzaGVsbCBncmVwIC1oICdcLmtvJyAvZGV2L251bGwgJCh3aWxkY2FyZCAkKE1PRFZFUkRJUikvKi5tb2QpKSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMvY2hlY2tzdGFjay5wbCBiL3NjcmlwdHMvY2hlY2tzdGFjay5wbAppbmRleCBiMzQ5MjQ2Li5mNzg0NGY2IDEwMDc1NQotLS0gYS9zY3JpcHRzL2NoZWNrc3RhY2sucGwKKysrIGIvc2NyaXB0cy9jaGVja3N0YWNrLnBsCkBAIC02Miw2ICs2Miw4IEBACiAJfSBlbHNpZiAoJGFyY2ggZXEgJ3BwYzY0JykgewogCQkjWFhYCiAJCSRyZSA9IHFyLy4qc3RkdS4qcjEsLSgkeHsxLDh9KVwocjFcKS9vOworCX0gZWxzaWYgKCRhcmNoIGVxICdwb3dlcnBjJykgeworCQkkcmUgPSBxci8uKnN0W2R3XXUuKnIxLC0oJHh7MSw4fSlcKHIxXCkvbzsKIAl9IGVsc2lmICgkYXJjaCA9fiAvXnMzOTB4PyQvKSB7CiAJCSMgICAxMTE2MDogICAgICAgYTcgZmIgZmYgNjAgICAgICAgICAgICAgYWdoaSAgICVyMTUsLTE2MAogCQkkcmUgPSBxci8uKmFnP2hpLipcJXIxNSwtKChbMC05XXsyfXxbMy05XSlbMC05XXsyfSkvbzsKZGlmZiAtLWdpdCBhL3NjcmlwdHMvaGRyY2hlY2suc2ggYi9zY3JpcHRzL2hkcmNoZWNrLnNoCmluZGV4IGIzYmI2ODMuLmI1Y2EzNWEgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvaGRyY2hlY2suc2gKKysrIGIvc2NyaXB0cy9oZHJjaGVjay5zaApAQCAtMSw4ICsxLDggQEAKICMhL2Jpbi9zaAogCi1mb3IgRklMRSBpbiBgZ3JlcCAnXiNpbmNsdWRlIDwnICQyIHwgY3V0IC1mMiAtZFw8IHwgY3V0IC1mMSAtZFw+IHwgZWdyZXAgXmxpbnV4XHxeYXNtYCA7IGRvCitmb3IgRklMRSBpbiBgZ3JlcCAnXlsgXHRdKiNbIFx0XSppbmNsdWRlWyBcdF0qPCcgJDIgfCBjdXQgLWYyIC1kXDwgfCBjdXQgLWYxIC1kXD4gfCBlZ3JlcCBebGludXhcfF5hc21gIDsgZG8KICAgICBpZiBbICEgLXIgJDEvJEZJTEUgXTsgdGhlbgotCWVjaG8gJDIgcmVxdWlyZXMgJEZJTEUsIHdoaWNoIGRvZXMgbm90IGV4aXN0CisJZWNobyAkMiByZXF1aXJlcyAkRklMRSwgd2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gZXhwb3J0ZWQgaGVhZGVycwogCWV4aXQgMQogICAgIGZpCiBkb25lCmRpZmYgLS1naXQgYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYyBiL3NjcmlwdHMva2NvbmZpZy9jb25mZGF0YS5jCmluZGV4IDJlZTQ4YzM3Li5hNjlkOGFjIDEwMDY0NAotLS0gYS9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYworKysgYi9zY3JpcHRzL2tjb25maWcvY29uZmRhdGEuYwpAQCAtMzU3LDcgKzM1Nyw3IEBACiAJCWZvciAoZSA9IHByb3AtPmV4cHI7IGU7IGUgPSBlLT5sZWZ0LmV4cHIpCiAJCQlpZiAoZS0+cmlnaHQuc3ltLT52aXNpYmxlICE9IG5vKQogCQkJCWZsYWdzICY9IGUtPnJpZ2h0LnN5bS0+ZmxhZ3M7Ci0JCXN5bS0+ZmxhZ3MgfD0gZmxhZ3MgJiBTWU1CT0xfREVGX1VTRVI7CisJCXN5bS0+ZmxhZ3MgJj0gZmxhZ3MgfCB+U1lNQk9MX0RFRl9VU0VSOwogCX0KIAogCXN5bV9jaGFuZ2VfY291bnQgKz0gY29uZl93YXJuaW5ncyB8fCBjb25mX3Vuc2F2ZWQ7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2tlcm5lbC1kb2MgYi9zY3JpcHRzL2tlcm5lbC1kb2MKaW5kZXggZjk0NjBhNi4uYzljYTBjMiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9rZXJuZWwtZG9jCisrKyBiL3NjcmlwdHMva2VybmVsLWRvYwpAQCAtMTUxOCw2ICsxNTE4LDcgQEAKICAgICAkcHJvdG90eXBlID1+IHMvXmFzbWxpbmthZ2UgKy8vOwogICAgICRwcm90b3R5cGUgPX4gcy9eaW5saW5lICsvLzsKICAgICAkcHJvdG90eXBlID1+IHMvXl9faW5saW5lX18gKy8vOworICAgICRwcm90b3R5cGUgPX4gcy9fX2RldmluaXQgKy8vOwogICAgICRwcm90b3R5cGUgPX4gcy9eI2RlZmluZSArLy87ICNhayBhZGRlZAogICAgICRwcm90b3R5cGUgPX4gcy9fX2F0dHJpYnV0ZV9fIFwoXChbYS16LF0qXClcKS8vOwogCmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggMzdmNjdjMjMuLmRlNzZkYTggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYworKysgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKQEAgLTUyLDYgKzUyLDIzIEBACiAgICAgICAgICAgICAgICAgc3ByaW50ZihzdHIgKyBzdHJsZW4oc3RyKSwgIioiKTsgICAgICAgICAgICAgICAgXAogfSB3aGlsZSgwKQogCisvKioKKyAqIENoZWNrIHRoYXQgc2l6ZW9mKGRldmljZV9pZCB0eXBlKSBhcmUgY29uc2lzdGVudCB3aXRoIHNpemUgb2Ygc2VjdGlvbgorICogaW4gLm8gZmlsZS4gSWYgaW4tY29uc2lzdGVudCB0aGVuIHVzZXJzcGFjZSBhbmQga2VybmVsIGRvZXMgbm90IGFncmVlCisgKiBvbiBhY3R1YWwgc2l6ZSB3aGljaCBpcyBhIGJ1Zy4KKyAqKi8KK3N0YXRpYyB2b2lkIGRldmljZV9pZF9zaXplX2NoZWNrKGNvbnN0IGNoYXIgKm1vZG5hbWUsIGNvbnN0IGNoYXIgKmRldmljZV9pZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGlkX3NpemUpCit7CisJaWYgKHNpemUgJSBpZF9zaXplIHx8IHNpemUgPCBpZF9zaXplKSB7CisJCWZhdGFsKCIlczogc2l6ZW9mKHN0cnVjdCAlc19kZXZpY2VfaWQpPSVsdSBpcyBub3QgYSBtb2R1bG8gIgorCQkgICAgICAib2YgdGhlIHNpemUgb2Ygc2VjdGlvbiBfX21vZF8lc19kZXZpY2VfdGFibGU9JWx1LlxuIgorCQkgICAgICAiRml4IGRlZmluaXRpb24gb2Ygc3RydWN0ICVzX2RldmljZV9pZCAiCisJCSAgICAgICJpbiBtb2RfZGV2aWNldGFibGUuaFxuIiwKKwkJICAgICAgbW9kbmFtZSwgZGV2aWNlX2lkLCBpZF9zaXplLCBkZXZpY2VfaWQsIHNpemUsIGRldmljZV9pZCk7CisJfQorfQorCiAvKiBVU0IgaXMgc3BlY2lhbCBiZWNhdXNlIHRoZSBiY2REZXZpY2UgY2FuIGJlIG1hdGNoZWQgYWdhaW5zdCBhIG51bWVyaWMgcmFuZ2UgKi8KIC8qIExvb2tzIGxpa2UgInVzYjp2TnBOZE5kY05kc2NOZHBOaWNOaXNjTmlwTiIgKi8KIHN0YXRpYyB2b2lkIGRvX3VzYl9lbnRyeShzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQsCkBAIC0xNTIsMTAgKzE2OSw4IEBACiAJdW5zaWduZWQgaW50IGk7CiAJY29uc3QgdW5zaWduZWQgbG9uZyBpZF9zaXplID0gc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX2lkKTsKIAotCWlmIChzaXplICUgaWRfc2l6ZSB8fCBzaXplIDwgaWRfc2l6ZSkgewotCQl3YXJuKCIlcyBpZHMgJWx1IGJhZCBzaXplICIKLQkJICAgICAiKGVhY2ggb24gJWx1KVxuIiwgbW9kLT5uYW1lLCBzaXplLCBpZF9zaXplKTsKLQl9CisJZGV2aWNlX2lkX3NpemVfY2hlY2sobW9kLT5uYW1lLCAidXNiIiwgc2l6ZSwgaWRfc2l6ZSk7CisKIAkvKiBMZWF2ZSBsYXN0IG9uZTogaXQncyB0aGUgdGVybWluYXRvci4gKi8KIAlzaXplIC09IGlkX3NpemU7CiAKQEAgLTI1MCw2ICsyNjUsMTQgQEAKIAlyZXR1cm4gMTsKIH0KIAorLyogbG9va3MgbGlrZTogImFwOnROIiAqLworc3RhdGljIGludCBkb19hcF9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKKwkJICAgICAgIHN0cnVjdCBhcF9kZXZpY2VfaWQgKmlkLCBjaGFyICphbGlhcykKK3sKKwlzcHJpbnRmKGFsaWFzLCAiYXA6dCUwMlgiLCBpZC0+ZGV2X3R5cGUpOworCXJldHVybiAxOworfQorCiAvKiBMb29rcyBsaWtlOiAic2VyaW86dHlOcHJOaWROZXhOIiAqLwogc3RhdGljIGludCBkb19zZXJpb19lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCSAgc3RydWN0IHNlcmlvX2RldmljZV9pZCAqaWQsIGNoYXIgKmFsaWFzKQpAQCAtMzc2LDcgKzM5OSw3IEBACiAJdW5zaWduZWQgaW50IGk7CiAKIAlmb3IgKGkgPSBtaW47IGkgPCBtYXg7IGkrKykKLQkJaWYgKGFycltpIC8gQklUU19QRVJfTE9OR10gJiAoMSA8PCAoaSVCSVRTX1BFUl9MT05HKSkpCisJCWlmIChhcnJbaSAvIEJJVFNfUEVSX0xPTkddICYgKDFMIDw8IChpJUJJVFNfUEVSX0xPTkcpKSkKIAkJCXNwcmludGYoYWxpYXMgKyBzdHJsZW4oYWxpYXMpLCAiJVgsKiIsIGkpOwogfQogCkBAIC00MzQsNiArNDU3LDcgQEAKIAogc3RhdGljIHZvaWQgZG9fdGFibGUodm9pZCAqc3ltdmFsLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCSAgICAgdW5zaWduZWQgbG9uZyBpZF9zaXplLAorCQkgICAgIGNvbnN0IGNoYXIgKmRldmljZV9pZCwKIAkJICAgICB2b2lkICpmdW5jdGlvbiwKIAkJICAgICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CkBAIC00NDEsMTAgKzQ2NSw3IEBACiAJY2hhciBhbGlhc1s1MDBdOwogCWludCAoKmRvX2VudHJ5KShjb25zdCBjaGFyICosIHZvaWQgKmVudHJ5LCBjaGFyICphbGlhcykgPSBmdW5jdGlvbjsKIAotCWlmIChzaXplICUgaWRfc2l6ZSB8fCBzaXplIDwgaWRfc2l6ZSkgewotCQl3YXJuKCIlcyBpZHMgJWx1IGJhZCBzaXplICIKLQkJICAgICAiKGVhY2ggb24gJWx1KVxuIiwgbW9kLT5uYW1lLCBzaXplLCBpZF9zaXplKTsKLQl9CisJZGV2aWNlX2lkX3NpemVfY2hlY2sobW9kLT5uYW1lLCBkZXZpY2VfaWQsIHNpemUsIGlkX3NpemUpOwogCS8qIExlYXZlIGxhc3Qgb25lOiBpdCdzIHRoZSB0ZXJtaW5hdG9yLiAqLwogCXNpemUgLT0gaWRfc2l6ZTsKIApAQCAtNDc2LDQwICs0OTcsNTUgQEAKIAkJKyBzeW0tPnN0X3ZhbHVlOwogCiAJaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcGNpX2RldmljZV90YWJsZSIpKQotCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2aWNlX2lkKSwKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBwY2lfZGV2aWNlX2lkKSwgInBjaSIsCiAJCQkgZG9fcGNpX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfdXNiX2RldmljZV90YWJsZSIpKQogCQkvKiBzcGVjaWFsIGNhc2UgdG8gaGFuZGxlIGJjZERldmljZSByYW5nZXMgKi8KIAkJZG9fdXNiX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfaWVlZTEzOTRfZGV2aWNlX3RhYmxlIikpCi0JCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLCBzaXplb2Yoc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCksCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgaWVlZTEzOTRfZGV2aWNlX2lkKSwgImllZWUxMzk0IiwKIAkJCSBkb19pZWVlMTM5NF9lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2Njd19kZXZpY2VfdGFibGUiKSkKLQkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3QgY2N3X2RldmljZV9pZCksCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgY2N3X2RldmljZV9pZCksICJjY3ciLAogCQkJIGRvX2Njd19lbnRyeSwgbW9kKTsKKwllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2FwX2RldmljZV90YWJsZSIpKQorCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKKwkJCSBzaXplb2Yoc3RydWN0IGFwX2RldmljZV9pZCksICJhcCIsCisJCQkgZG9fYXBfZW50cnksIG1vZCk7CiAJZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9zZXJpb19kZXZpY2VfdGFibGUiKSkKLQkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3Qgc2VyaW9fZGV2aWNlX2lkKSwKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBzZXJpb19kZXZpY2VfaWQpLCAic2VyaW8iLAogCQkJIGRvX3NlcmlvX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcG5wX2RldmljZV90YWJsZSIpKQotCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBwbnBfZGV2aWNlX2lkKSwKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBwbnBfZGV2aWNlX2lkKSwgInBucCIsCiAJCQkgZG9fcG5wX2VudHJ5LCBtb2QpOwogCWVsc2UgaWYgKHN5bV9pcyhzeW1uYW1lLCAiX19tb2RfcG5wX2NhcmRfZGV2aWNlX3RhYmxlIikpCi0JCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLCBzaXplb2Yoc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCksCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkKSwgInBucF9jYXJkIiwKIAkJCSBkb19wbnBfY2FyZF9lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3BjbWNpYV9kZXZpY2VfdGFibGUiKSkKLQkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCksCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgcGNtY2lhX2RldmljZV9pZCksICJwY21jaWEiLAogCQkJIGRvX3BjbWNpYV9lbnRyeSwgbW9kKTsKICAgICAgICAgZWxzZSBpZiAoc3ltX2lzKHN5bW5hbWUsICJfX21vZF9vZl9kZXZpY2VfdGFibGUiKSkKLQkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3Qgb2ZfZGV2aWNlX2lkKSwKKwkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsCisJCQkgc2l6ZW9mKHN0cnVjdCBvZl9kZXZpY2VfaWQpLCAib2YiLAogCQkJIGRvX29mX2VudHJ5LCBtb2QpOwogICAgICAgICBlbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX3Zpb19kZXZpY2VfdGFibGUiKSkKLQkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3QgdmlvX2RldmljZV9pZCksCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgdmlvX2RldmljZV9pZCksICJ2aW8iLAogCQkJIGRvX3Zpb19lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2kyY19kZXZpY2VfdGFibGUiKSkKLQkJZG9fdGFibGUoc3ltdmFsLCBzeW0tPnN0X3NpemUsIHNpemVvZihzdHJ1Y3QgaTJjX2RldmljZV9pZCksCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgaTJjX2RldmljZV9pZCksICJpMmMiLAogCQkJIGRvX2kyY19lbnRyeSwgbW9kKTsKIAllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2lucHV0X2RldmljZV90YWJsZSIpKQotCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQpLAorCQlkb190YWJsZShzeW12YWwsIHN5bS0+c3Rfc2l6ZSwKKwkJCSBzaXplb2Yoc3RydWN0IGlucHV0X2RldmljZV9pZCksICJpbnB1dCIsCiAJCQkgZG9faW5wdXRfZW50cnksIG1vZCk7CiB9CiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2R1bW15LmMgYi9zZWN1cml0eS9kdW1teS5jCmluZGV4IGJiYmZkYTcuLjU4YzZkMzkgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2R1bW15LmMKKysrIGIvc2VjdXJpdHkvZHVtbXkuYwpAQCAtNzkxLDggKzc5MSw3IEBACiAJcmV0dXJuIC1FTk9QUk9UT09QVDsKIH0KIAotc3RhdGljIGludCBkdW1teV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyICoqc2VjZGF0YSwKLQkJCQkJIHUzMiAqc2VjbGVuKQorc3RhdGljIGludCBkdW1teV9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnNlY2lkKQogewogCXJldHVybiAtRU5PUFJPVE9PUFQ7CiB9CkBAIC04NzYsNiArODc1LDE1IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgZHVtbXlfc2VjaWRfdG9fc2VjY3R4KHUzMiBzZWNpZCwgY2hhciAqKnNlY2RhdGEsIHUzMiAqc2VjbGVuKQoreworCXJldHVybiAtRU9QTk9UU1VQUDsKK30KKworc3RhdGljIHZvaWQgZHVtbXlfcmVsZWFzZV9zZWNjdHgoY2hhciAqc2VjZGF0YSwgdTMyIHNlY2xlbikKK3sKK30KKwogI2lmZGVmIENPTkZJR19LRVlTCiBzdGF0aWMgaW5saW5lIGludCBkdW1teV9rZXlfYWxsb2Moc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN0eCwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC0xMDI4LDYgKzEwMzYsOCBAQAogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgZF9pbnN0YW50aWF0ZSk7CiAgCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgZ2V0cHJvY2F0dHIpOwogIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHNldHByb2NhdHRyKTsKKyAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCBzZWNpZF90b19zZWNjdHgpOworIAlzZXRfdG9fZHVtbXlfaWZfbnVsbChvcHMsIHJlbGVhc2Vfc2VjY3R4KTsKICNpZmRlZiBDT05GSUdfU0VDVVJJVFlfTkVUV09SSwogCXNldF90b19kdW1teV9pZl9udWxsKG9wcywgdW5peF9zdHJlYW1fY29ubmVjdCk7CiAJc2V0X3RvX2R1bW15X2lmX251bGwob3BzLCB1bml4X21heV9zZW5kKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY2x2bC5jIGIvc2VjdXJpdHkvc2VjbHZsLmMKaW5kZXggYzI2ZGQ3ZC4uOGY2MjkxOSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VjbHZsLmMKKysrIGIvc2VjdXJpdHkvc2VjbHZsLmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqCShhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xOTcsMjYgKzE5OCwyNyBAQAogc3RhdGljIGludAogcGxhaW50ZXh0X3RvX3NoYTEodW5zaWduZWQgY2hhciAqaGFzaCwgY29uc3QgY2hhciAqcGxhaW50ZXh0LCB1bnNpZ25lZCBpbnQgbGVuKQogewotCXN0cnVjdCBjcnlwdG9fdGZtICp0Zm07CisJc3RydWN0IGhhc2hfZGVzYyBkZXNjOwogCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlpbnQgZXJyOworCiAJaWYgKGxlbiA+IFBBR0VfU0laRSkgewogCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiUGxhaW50ZXh0IHBhc3N3b3JkIHRvbyBsYXJnZSAoJWQgIgogCQkJICAgICAgImNoYXJhY3RlcnMpLiAgTGFyZ2VzdCBwb3NzaWJsZSBpcyAlbHUgIgogCQkJICAgICAgImJ5dGVzLlxuIiwgbGVuLCBQQUdFX1NJWkUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JdGZtID0gY3J5cHRvX2FsbG9jX3RmbSgic2hhMSIsIENSWVBUT19URk1fUkVRX01BWV9TTEVFUCk7Ci0JaWYgKHRmbSA9PSBOVUxMKSB7CisJZGVzYy50Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaCgic2hhMSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOworCWlmIChJU19FUlIoZGVzYy50Zm0pKSB7CiAJCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsCiAJCQkgICAgICAiRmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciBTSEExXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXNnX2luaXRfb25lKCZzZywgKHU4ICopcGxhaW50ZXh0LCBsZW4pOwotCWNyeXB0b19kaWdlc3RfaW5pdCh0Zm0pOwotCWNyeXB0b19kaWdlc3RfdXBkYXRlKHRmbSwgJnNnLCAxKTsKLQljcnlwdG9fZGlnZXN0X2ZpbmFsKHRmbSwgaGFzaCk7Ci0JY3J5cHRvX2ZyZWVfdGZtKHRmbSk7Ci0JcmV0dXJuIDA7CisJZGVzYy5mbGFncyA9IENSWVBUT19URk1fUkVRX01BWV9TTEVFUDsKKwllcnIgPSBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZzZywgbGVuLCBoYXNoKTsKKwljcnlwdG9fZnJlZV9oYXNoKGRlc2MudGZtKTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwppbmRleCBhOTFjOTYxLi41ZDFiOGM3IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCkBAIC0zNTI0LDI1ICszNTI0LDIxIEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBzZWxpbnV4X3NvY2tldF9nZXRwZWVyc2VjX2RncmFtKHN0cnVjdCBza19idWZmICpza2IsIGNoYXIgKipzZWNkYXRhLCB1MzIgKnNlY2xlbikKK3N0YXRpYyBpbnQgc2VsaW51eF9zb2NrZXRfZ2V0cGVlcnNlY19kZ3JhbShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgKnNlY2lkKQogeworCXUzMiBwZWVyX3NlY2lkID0gU0VDU0lEX05VTEw7CiAJaW50IGVyciA9IDA7Ci0JdTMyIHBlZXJfc2lkOwogCi0JaWYgKHNrYi0+c2stPnNrX2ZhbWlseSA9PSBQRl9VTklYKQotCQlzZWxpbnV4X2dldF9pbm9kZV9zaWQoU09DS19JTk9ERShza2ItPnNrLT5za19zb2NrZXQpLAotCQkJCSAgICAgICZwZWVyX3NpZCk7Ci0JZWxzZQotCQlwZWVyX3NpZCA9IHNlbGludXhfc29ja2V0X2dldHBlZXJfZGdyYW0oc2tiKTsKKwlpZiAoc29jayAmJiAoc29jay0+c2stPnNrX2ZhbWlseSA9PSBQRl9VTklYKSkKKwkJc2VsaW51eF9nZXRfaW5vZGVfc2lkKFNPQ0tfSU5PREUoc29jayksICZwZWVyX3NlY2lkKTsKKwllbHNlIGlmIChza2IpCisJCXBlZXJfc2VjaWQgPSBzZWxpbnV4X3NvY2tldF9nZXRwZWVyX2RncmFtKHNrYik7CiAKLQlpZiAocGVlcl9zaWQgPT0gU0VDU0lEX05VTEwpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChwZWVyX3NlY2lkID09IFNFQ1NJRF9OVUxMKQorCQllcnIgPSAtRUlOVkFMOworCSpzZWNpZCA9IHBlZXJfc2VjaWQ7CiAKLQllcnIgPSBzZWN1cml0eV9zaWRfdG9fY29udGV4dChwZWVyX3NpZCwgc2VjZGF0YSwgc2VjbGVuKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBzZWxpbnV4X3NrX2FsbG9jX3NlY3VyaXR5KHN0cnVjdCBzb2NrICpzaywgaW50IGZhbWlseSwgZ2ZwX3QgcHJpb3JpdHkpCkBAIC00NDA3LDYgKzQ0MDMsMTcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAorc3RhdGljIGludCBzZWxpbnV4X3NlY2lkX3RvX3NlY2N0eCh1MzIgc2VjaWQsIGNoYXIgKipzZWNkYXRhLCB1MzIgKnNlY2xlbikKK3sKKwlyZXR1cm4gc2VjdXJpdHlfc2lkX3RvX2NvbnRleHQoc2VjaWQsIHNlY2RhdGEsIHNlY2xlbik7Cit9CisKK3N0YXRpYyB2b2lkIHNlbGludXhfcmVsZWFzZV9zZWNjdHgoY2hhciAqc2VjZGF0YSwgdTMyIHNlY2xlbikKK3sKKwlpZiAoc2VjZGF0YSkKKwkJa2ZyZWUoc2VjZGF0YSk7Cit9CisKICNpZmRlZiBDT05GSUdfS0VZUwogCiBzdGF0aWMgaW50IHNlbGludXhfa2V5X2FsbG9jKHN0cnVjdCBrZXkgKmssIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLApAQCAtNDU4Nyw2ICs0NTk0LDkgQEAKIAkuZ2V0cHJvY2F0dHIgPSAgICAgICAgICAgICAgICAgIHNlbGludXhfZ2V0cHJvY2F0dHIsCiAJLnNldHByb2NhdHRyID0gICAgICAgICAgICAgICAgICBzZWxpbnV4X3NldHByb2NhdHRyLAogCisJLnNlY2lkX3RvX3NlY2N0eCA9CQlzZWxpbnV4X3NlY2lkX3RvX3NlY2N0eCwKKwkucmVsZWFzZV9zZWNjdHggPQkJc2VsaW51eF9yZWxlYXNlX3NlY2N0eCwKKwogICAgICAgICAudW5peF9zdHJlYW1fY29ubmVjdCA9CQlzZWxpbnV4X3NvY2tldF91bml4X3N0cmVhbV9jb25uZWN0LAogCS51bml4X21heV9zZW5kID0JCXNlbGludXhfc29ja2V0X3VuaXhfbWF5X3NlbmQsCiAKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwppbmRleCAwMTExOTkwLi5mMDM5NjBlIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCkBAIC02NDQsMTAgKzY0NCwxOCBAQAogCWtmcmVlKGxyYSk7CiAKIAlmb3IgKHJ0ID0gcC0+cmFuZ2VfdHI7IHJ0OyBydCA9IHJ0IC0+IG5leHQpIHsKLQkJa2ZyZWUobHJ0KTsKKwkJaWYgKGxydCkgeworCQkJZWJpdG1hcF9kZXN0cm95KCZscnQtPnJhbmdlLmxldmVsWzBdLmNhdCk7CisJCQllYml0bWFwX2Rlc3Ryb3koJmxydC0+cmFuZ2UubGV2ZWxbMV0uY2F0KTsKKwkJCWtmcmVlKGxydCk7CisJCX0KIAkJbHJ0ID0gcnQ7CiAJfQotCWtmcmVlKGxydCk7CisJaWYgKGxydCkgeworCQllYml0bWFwX2Rlc3Ryb3koJmxydC0+cmFuZ2UubGV2ZWxbMF0uY2F0KTsKKwkJZWJpdG1hcF9kZXN0cm95KCZscnQtPnJhbmdlLmxldmVsWzFdLmNhdCk7CisJCWtmcmVlKGxydCk7CisJfQogCiAJaWYgKHAtPnR5cGVfYXR0cl9tYXApIHsKIAkJZm9yIChpID0gMDsgaSA8IHAtPnBfdHlwZXMubnByaW07IGkrKykKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYyBiL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYwppbmRleCBkMmU4MGU2Li44NWU0Mjk4IDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCkBAIC04MzMsNiArODMzLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCisJY29udGV4dF9pbml0KCZuZXdjb250ZXh0KTsKKwogCVBPTElDWV9SRExPQ0s7CiAKIAlzY29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgc3NpZCk7CkBAIC04NTAsOCArODUyLDYgQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCWNvbnRleHRfaW5pdCgmbmV3Y29udGV4dCk7Ci0KIAkvKiBTZXQgdGhlIHVzZXIgaWRlbnRpdHkuICovCiAJc3dpdGNoIChzcGVjaWZpZWQpIHsKIAljYXNlIEFWVEFCX1RSQU5TSVRJT046CmRpZmYgLS1naXQgYS9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtdG9vbmllLmMgYi9zb3VuZC9hb2EvY29kZWNzL3NuZC1hb2EtY29kZWMtdG9vbmllLmMKaW5kZXggYmNjNTU1Ni4uM2M3ZDFkOCAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvZGVjcy9zbmQtYW9hLWNvZGVjLXRvb25pZS5jCisrKyBiL3NvdW5kL2FvYS9jb2RlY3Mvc25kLWFvYS1jb2RlYy10b29uaWUuYwpAQCAtNTEsNiArNTEsMTMgQEAKIAl7fQogfTsKIAorc3RhdGljIGludCB0b29uaWVfdXNhYmxlKHN0cnVjdCBjb2RlY19pbmZvX2l0ZW0gKmNpaSwKKwkJCSBzdHJ1Y3QgdHJhbnNmZXJfaW5mbyAqdGksCisJCQkgc3RydWN0IHRyYW5zZmVyX2luZm8gKm91dCkKK3sKKwlyZXR1cm4gMTsKK30KKwogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCB0b29uaWVfc3VzcGVuZChzdHJ1Y3QgY29kZWNfaW5mb19pdGVtICpjaWksIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKQEAgLTY5LDYgKzc2LDcgQEAKIAkuc3lzY2xvY2tfZmFjdG9yID0gMjU2LAogCS5idXNfZmFjdG9yID0gNjQsCiAJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLnVzYWJsZSA9IHRvb25pZV91c2FibGUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgPSB0b29uaWVfc3VzcGVuZCwKIAkucmVzdW1lID0gdG9vbmllX3Jlc3VtZSwKQEAgLTc5LDE5ICs4NywyMCBAQAogewogCXN0cnVjdCB0b29uaWUgKnRvb25pZSA9IGNvZGVjX3RvX3Rvb25pZShjb2RlYyk7CiAKKwkvKiBub3RoaW5nIGNvbm5lY3RlZD8gd2hhdCBhIGpva2UhICovCisJaWYgKHRvb25pZS0+Y29kZWMuY29ubmVjdGVkICE9IDEpCisJCXJldHVybiAtRU5PVENPTk47CisKIAlpZiAoYW9hX3NuZF9kZXZpY2VfbmV3KFNORFJWX0RFVl9MT1dMRVZFTCwgdG9vbmllLCAmb3BzKSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gY3JlYXRlIHRvb25pZSBzbmQgZGV2aWNlIVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCS8qIG5vdGhpbmcgY29ubmVjdGVkPyB3aGF0IGEgam9rZSEgKi8KLQlpZiAodG9vbmllLT5jb2RlYy5jb25uZWN0ZWQgIT0gMSkKLQkJcmV0dXJuIC1FTk9UQ09OTjsKLQogCWlmICh0b29uaWUtPmNvZGVjLnNvdW5kYnVzX2Rldi0+YXR0YWNoX2NvZGVjKHRvb25pZS0+Y29kZWMuc291bmRidXNfZGV2LAogCQkJCQkJICAgICBhb2FfZ2V0X2NhcmQoKSwKIAkJCQkJCSAgICAgJnRvb25pZV9jb2RlY19pbmZvLCB0b29uaWUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yIGNyZWF0aW5nIHRvb25pZSBwY21cbiIpOworCQlzbmRfZGV2aWNlX2ZyZWUoYW9hX2dldF9jYXJkKCksIHRvb25pZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvcmUvc25kLWFvYS1ncGlvLWZlYXR1cmUuYyBiL3NvdW5kL2FvYS9jb3JlL3NuZC1hb2EtZ3Bpby1mZWF0dXJlLmMKaW5kZXggN2FlMGMwYi4uN2MyNjA4OSAxMDA2NDQKLS0tIGEvc291bmQvYW9hL2NvcmUvc25kLWFvYS1ncGlvLWZlYXR1cmUuYworKysgYi9zb3VuZC9hb2EvY29yZS9zbmQtYW9hLWdwaW8tZmVhdHVyZS5jCkBAIC01Niw3ICs1Niw3IEBACiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmdwaW87CiAJdTMyICpyZWc7Ci0JY2hhciAqYXVkaW9fZ3BpbzsKKwljb25zdCBjaGFyICphdWRpb19ncGlvOwogCiAJKmdwaW9wdHIgPSAtMTsKIApAQCAtMTEyLDcgKzExMiwxMCBAQAogCiBzdGF0aWMgdm9pZCBnZXRfaXJxKHN0cnVjdCBkZXZpY2Vfbm9kZSAqIG5wLCBpbnQgKmlycXB0cikKIHsKLQkqaXJxcHRyID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobnAsIDApOworCWlmIChucCkKKwkJKmlycXB0ciA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKKwllbHNlCisJCSppcnFwdHIgPSBOT19JUlE7CiB9CiAKIC8qIDB4NCBpcyBvdXRlbmFibGUsIDB4MSBpcyBvdXQsIHRodXMgNCBvciA1ICovCkBAIC0zMjIsNyArMzI1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGlycSA9PSAtMSkKKwlpZiAoaXJxID09IE5PX0lSUSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZub3RpZi0+bXV0ZXgpOwpkaWZmIC0tZ2l0IGEvc291bmQvYW9hL2NvcmUvc25kLWFvYS1ncGlvLXBtZi5jIGIvc291bmQvYW9hL2NvcmUvc25kLWFvYS1ncGlvLXBtZi5jCmluZGV4IDNkNTdmZDFhLi4yODM2YzMyIDEwMDY0NAotLS0gYS9zb3VuZC9hb2EvY29yZS9zbmQtYW9hLWdwaW8tcG1mLmMKKysrIGIvc291bmQvYW9hL2NvcmUvc25kLWFvYS1ncGlvLXBtZi5jCkBAIC0xOCw3ICsxOCw3IEBACiAJCQkJCQkJXAogCWlmICh1bmxpa2VseSghcnQpKSByZXR1cm47CQkJCVwKIAlyYyA9IHBtZl9jYWxsX2Z1bmN0aW9uKHJ0LT5ub2RlLCAjbmFtZSAiLW11dGUiLCAmYXJncyk7CVwKLQlpZiAocmMpCQkJCQkJCVwKKwlpZiAocmMgJiYgcmMgIT0gLUVOT0RFVikJCQkJXAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJwbWZfZ3Bpb19zZXRfIiAjbmFtZQlcCiAJCSIgZmFpbGVkLCByYzogJWRcbiIsIHJjKTsJCQlcCiAJcnQtPmltcGxlbWVudGF0aW9uX3ByaXZhdGUgJj0gfigxPDxiaXQpOwkJXApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9vc3MvbWl4ZXJfb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwppbmRleCA3MWI1MDgwLi43NWE5NTA1IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYworKysgYi9zb3VuZC9jb3JlL29zcy9taXhlcl9vc3MuYwpAQCAtOTg4LDEzICs5ODgsMTIgQEAKIAlpZiAocHRyLT5pbmRleCA9PSAwICYmIChrY3RsID0gc25kX21peGVyX29zc190ZXN0X2lkKG1peGVyLCAiQ2FwdHVyZSBTb3VyY2UiLCAwKSkgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvOwogCi0JCXVpbmZvID0ga21hbGxvYyhzaXplb2YoKnVpbmZvKSwgR0ZQX0tFUk5FTCk7CisJCXVpbmZvID0ga3phbGxvYyhzaXplb2YoKnVpbmZvKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghIHVpbmZvKSB7CiAJCQl1cF9yZWFkKCZtaXhlci0+Y2FyZC0+Y29udHJvbHNfcndzZW0pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJCQotCQltZW1zZXQodWluZm8sIDAsIHNpemVvZigqdWluZm8pKTsKIAkJaWYgKGtjdGwtPmluZm8oa2N0bCwgdWluZm8pKSB7CiAJCQl1cF9yZWFkKCZtaXhlci0+Y2FyZC0+Y29udHJvbHNfcndzZW0pOwogCQkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMgYi9zb3VuZC9jb3JlL29zcy9wY21fb3NzLmMKaW5kZXggZjVmZjRmNC4uNDcyZmNlMCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9vc3MvcGNtX29zcy5jCisrKyBiL3NvdW5kL2NvcmUvb3NzL3BjbV9vc3MuYwpAQCAtMjIyOCw2ICsyMjI4LDggQEAKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IDI7IGlkeCsrKSB7CiAJCWlmIChzZXR1cFtpZHhdLmRpc2FibGUpCiAJCQljb250aW51ZTsKKwkJaWYgKCEgcGNtLT5zdHJlYW1zW2lkeF0uc3Vic3RyZWFtX2NvdW50KQorCQkJY29udGludWU7IC8qIG5vIG1hdGNoaW5nIHN1YnN0cmVhbSAqLwogCQlpZiAoaWR4ID09IFNORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0spIHsKIAkJCWlmICghIChmX21vZGUgJiBGTU9ERV9XUklURSkpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3NlcS9zZXFfZGV2aWNlLmMgYi9zb3VuZC9jb3JlL3NlcS9zZXFfZGV2aWNlLmMKaW5kZXggNDI2MGRlOS4uMTAyZmY1NCAxMDA2NDQKLS0tIGEvc291bmQvY29yZS9zZXEvc2VxX2RldmljZS5jCisrKyBiL3NvdW5kL2NvcmUvc2VxL3NlcV9kZXZpY2UuYwpAQCAtMzcyLDEwICszNzIsOSBAQAogewogCXN0cnVjdCBvcHNfbGlzdCAqb3BzOwogCi0Jb3BzID0ga21hbGxvYyhzaXplb2YoKm9wcyksIEdGUF9LRVJORUwpOworCW9wcyA9IGt6YWxsb2Moc2l6ZW9mKCpvcHMpLCBHRlBfS0VSTkVMKTsKIAlpZiAob3BzID09IE5VTEwpCiAJCXJldHVybiBvcHM7Ci0JbWVtc2V0KG9wcywgMCwgc2l6ZW9mKCpvcHMpKTsKIAogCS8qIHNldCB1cCBkcml2ZXIgZW50cnkgKi8KIAlzdHJsY3B5KG9wcy0+aWQsIGlkLCBzaXplb2Yob3BzLT5pZCkpOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9zZ2J1Zi5jIGIvc291bmQvY29yZS9zZ2J1Zi5jCmluZGV4IDZlNGQ0YWIuLmMzMDY2OWYgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvc2didWYuYworKysgYi9zb3VuZC9jb3JlL3NnYnVmLmMKQEAgLTY4LDIxICs2OCwxOCBAQAogCiAJZG1hYi0+YXJlYSA9IE5VTEw7CiAJZG1hYi0+YWRkciA9IDA7Ci0JZG1hYi0+cHJpdmF0ZV9kYXRhID0gc2didWYgPSBrbWFsbG9jKHNpemVvZigqc2didWYpLCBHRlBfS0VSTkVMKTsKKwlkbWFiLT5wcml2YXRlX2RhdGEgPSBzZ2J1ZiA9IGt6YWxsb2Moc2l6ZW9mKCpzZ2J1ZiksIEdGUF9LRVJORUwpOwogCWlmICghIHNnYnVmKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQoc2didWYsIDAsIHNpemVvZigqc2didWYpKTsKIAlzZ2J1Zi0+ZGV2ID0gZGV2aWNlOwogCXBhZ2VzID0gc25kX3NnYnVmX2FsaWduZWRfcGFnZXMoc2l6ZSk7CiAJc2didWYtPnRibHNpemUgPSBzZ2J1Zl9hbGlnbl90YWJsZShwYWdlcyk7Ci0Jc2didWYtPnRhYmxlID0ga21hbGxvYyhzaXplb2YoKnNnYnVmLT50YWJsZSkgKiBzZ2J1Zi0+dGJsc2l6ZSwgR0ZQX0tFUk5FTCk7CisJc2didWYtPnRhYmxlID0ga2NhbGxvYyhzZ2J1Zi0+dGJsc2l6ZSwgc2l6ZW9mKCpzZ2J1Zi0+dGFibGUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBzZ2J1Zi0+dGFibGUpCiAJCWdvdG8gX2ZhaWxlZDsKLQltZW1zZXQoc2didWYtPnRhYmxlLCAwLCBzaXplb2YoKnNnYnVmLT50YWJsZSkgKiBzZ2J1Zi0+dGJsc2l6ZSk7Ci0Jc2didWYtPnBhZ2VfdGFibGUgPSBrbWFsbG9jKHNpemVvZigqc2didWYtPnBhZ2VfdGFibGUpICogc2didWYtPnRibHNpemUsIEdGUF9LRVJORUwpOworCXNnYnVmLT5wYWdlX3RhYmxlID0ga2NhbGxvYyhzZ2J1Zi0+dGJsc2l6ZSwgc2l6ZW9mKCpzZ2J1Zi0+cGFnZV90YWJsZSksIEdGUF9LRVJORUwpOwogCWlmICghIHNnYnVmLT5wYWdlX3RhYmxlKQogCQlnb3RvIF9mYWlsZWQ7Ci0JbWVtc2V0KHNnYnVmLT5wYWdlX3RhYmxlLCAwLCBzaXplb2YoKnNnYnVmLT5wYWdlX3RhYmxlKSAqIHNnYnVmLT50YmxzaXplKTsKIAogCS8qIGFsbG9jYXRlIGVhY2ggcGFnZSAqLwogCWZvciAoaSA9IDA7IGkgPCBwYWdlczsgaSsrKSB7CmRpZmYgLS1naXQgYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jIGIvc291bmQvZHJpdmVycy92eC92eF9wY20uYwppbmRleCBjNGFmODQ5Li43ZTY1YTEwIDEwMDY0NAotLS0gYS9zb3VuZC9kcml2ZXJzL3Z4L3Z4X3BjbS5jCisrKyBiL3NvdW5kL2RyaXZlcnMvdngvdnhfcGNtLmMKQEAgLTEyNTIsMTggKzEyNTIsMTUgQEAKIAljaGlwLT5hdWRpb19pbmZvID0gcm1oLlN0YXRbMV07CiAKIAkvKiBhbGxvY2F0ZSBwaXBlcyAqLwotCWNoaXAtPnBsYXliYWNrX3BpcGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZ4X3BpcGUgKikgKiBjaGlwLT5hdWRpb19vdXRzLCBHRlBfS0VSTkVMKTsKKwljaGlwLT5wbGF5YmFja19waXBlcyA9IGtjYWxsb2MoY2hpcC0+YXVkaW9fb3V0cywgc2l6ZW9mKHN0cnVjdCB2eF9waXBlICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXAtPnBsYXliYWNrX3BpcGVzKQogCQlyZXR1cm4gLUVOT01FTTsKLQljaGlwLT5jYXB0dXJlX3BpcGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZ4X3BpcGUgKikgKiBjaGlwLT5hdWRpb19pbnMsIEdGUF9LRVJORUwpOworCWNoaXAtPmNhcHR1cmVfcGlwZXMgPSBrY2FsbG9jKGNoaXAtPmF1ZGlvX2lucywgc2l6ZW9mKHN0cnVjdCB2eF9waXBlICopLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNoaXAtPmNhcHR1cmVfcGlwZXMpIHsKIAkJa2ZyZWUoY2hpcC0+cGxheWJhY2tfcGlwZXMpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQltZW1zZXQoY2hpcC0+cGxheWJhY2tfcGlwZXMsIDAsIHNpemVvZihzdHJ1Y3QgdnhfcGlwZSAqKSAqIGNoaXAtPmF1ZGlvX291dHMpOwotCW1lbXNldChjaGlwLT5jYXB0dXJlX3BpcGVzLCAwLCBzaXplb2Yoc3RydWN0IHZ4X3BpcGUgKikgKiBjaGlwLT5hdWRpb19pbnMpOwotCiAJcHJlZmVycmVkID0gY2hpcC0+aWJsLnNpemU7CiAJY2hpcC0+aWJsLnNpemUgPSAwOwogCXZ4X3NldF9pYmwoY2hpcCwgJmNoaXAtPmlibCk7IC8qIHF1ZXJ5IHRoZSBpbmZvICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvS2NvbmZpZyBiL3NvdW5kL29zcy9LY29uZmlnCmluZGV4IGY0OTgwY2EuLjk3ZTM4YjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9LY29uZmlnCisrKyBiL3NvdW5kL29zcy9LY29uZmlnCkBAIC01LDYgKzUsMjAgQEAKICMKICMgUHJvbXB0IHVzZXIgZm9yIHByaW1hcnkgZHJpdmVycy4KIAorY29uZmlnIE9TU19PQlNPTEVURV9EUklWRVIKKwlib29sICJPYnNvbGV0ZSBPU1MgZHJpdmVycyIKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBvYnNvbGV0ZSBPU1MgZHJpdmVycyB0aGF0CisJICBhcmUgc2NoZWR1bGVkIGZvciByZW1vdmFsIGluIHRoZSBuZWFyIGZ1dHVyZSBzaW5jZSB0aGVyZQorCSAgYXJlIEFMU0EgZHJpdmVycyBmb3IgdGhlIHNhbWUgaGFyZHdhcmUuCisKKwkgIFBsZWFzZSBjb250YWN0IEFkcmlhbiBCdW5rIDxidW5rQHN0dXN0YS5kZT4gaWYgeW91IGhhZCB0bworCSAgc2F5IFkgaGVyZSBiZWNhdXNlIHlvdXIgc291bmRjYXJkIGlzIG5vdCBwcm9wZXJseSBzdXBwb3J0ZWQKKwkgIGJ5IEFMU0EuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBTT1VORF9CVDg3OAogCXRyaXN0YXRlICJCVDg3OCBhdWRpbyBkbWEiCiAJZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKQEAgLTIzLDcgKzM3LDcgQEAKIAogY29uZmlnIFNPVU5EX0VNVTEwSzEKIAl0cmlzdGF0ZSAiQ3JlYXRpdmUgU0JMaXZlISAoRU1VMTBLMSkiCi0JZGVwZW5kcyBvbiBTT1VORF9QUklNRSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSSAmJiBPU1NfT0JTT0xFVEVfRFJJVkVSCiAJLS0taGVscC0tLQogCSAgU2F5IFkgb3IgTSBpZiB5b3UgaGF2ZSBhIFBDSSBzb3VuZCBjYXJkIHVzaW5nIHRoZSBFTVUxMEsxIGNoaXBzZXQsCiAJICBzdWNoIGFzIHRoZSBDcmVhdGl2ZSBTQkxpdmUhLCBTQiBQQ0k1MTIgb3IgRW11LUFQUy4KQEAgLTMxLDcgKzQ1LDcgQEAKIAkgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyIGFuZCB0aGUgZGVncmVlIG9mIHN1cHBvcnQgZm9yCiAJICB0aGUgZGlmZmVyZW50IGNhcmQgbW9kZWxzIHBsZWFzZSBjaGVjazoKIAotCSAgICAgICAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZW11MTBrMS8+CisJCTxodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2VtdTEwazEvPgogCiAJICBJdCBpcyBub3cgcG9zc2libGUgdG8gbG9hZCBkc3AgbWljcm9jb2RlIHBhdGNoZXMgaW50byB0aGUgRU1VMTBLMQogCSAgY2hpcC4gIFRoZXNlIHBhdGNoZXMgYXJlIHVzZWQgdG8gaW1wbGVtZW50IHJlYWwgdGltZSBzb3VuZApAQCAtNDksNyArNjMsNyBAQAogCiBjb25maWcgU09VTkRfRlVTSU9OCiAJdHJpc3RhdGUgIkNyeXN0YWwgU291bmRGdXNpb24gKENTNDI4MC80NjF4KSIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIFBDSQorCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgUENJICYmIE9TU19PQlNPTEVURV9EUklWRVIKIAloZWxwCiAJICBUaGlzIG1vZHVsZSBkcml2ZXMgdGhlIENyeXN0YWwgU291bmRGdXNpb24gZGV2aWNlcyAoQ1M0MjgwLzQ2eHgKIAkgIHNlcmllcykgd2hlbiB3aXJlZCBhcyBuYXRpdmUgc291bmQgZHJpdmVycyB3aXRoIEFDOTcgY29kZWNzLiAgSWYKQEAgLTE0MCw3ICsxNTQsNyBAQAogCSAgc3lzdGVtIHN1cHBvcnQiIGFuZCAiU3lzY3RsIHN1cHBvcnQiLCBhbmQgYWZ0ZXIgdGhlIC9wcm9jIGZpbGUKIAkgIHN5c3RlbSBoYXMgYmVlbiBtb3VudGVkLCBleGVjdXRpbmcgdGhlIGNvbW1hbmQKIAotCSAgCWNvbW1hbmQJCQl3aGF0IGlzIGVuYWJsZWQKKwkJY29tbWFuZAkJCXdoYXQgaXMgZW5hYmxlZAogCiAJICBlY2hvIDA+L3Byb2MvQUxpNTQ1MQlwY20gb3V0IGlzIGFsc28gc2V0IHRvIFMvUERJRiBvdXQuIChEZWZhdWx0KS4KIApAQCAtNDQwLDcgKzQ1NCw3IEBACiAKIGNvbmZpZyBTT1VORF9BRDE4MTYKIAl0cmlzdGF0ZSAiQUQxODE2KEEpIGJhc2VkIGNhcmRzIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFNPVU5EX09TUworCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFNPVU5EX09TUyAmJiBPU1NfT0JTT0xFVEVfRFJJVkVSCiAJaGVscAogCSAgU2F5IE0gaGVyZSBpZiB5b3UgaGF2ZSBhIHNvdW5kIGNhcmQgYmFzZWQgb24gdGhlIEFuYWxvZyBEZXZpY2VzCiAJICBBRDE4MTYoQSkgY2hpcC4KQEAgLTQ1MCwyMSArNDY0LDIxIEBACiAKIGNvbmZpZyBTT1VORF9BRDE4ODkKIAl0cmlzdGF0ZSAiQUQxODg5IGJhc2VkIGNhcmRzIChBRDE4MTkgY29kZWMpIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMICYmIFNPVU5EX09TUyAmJiBQQ0kKKwlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBTT1VORF9PU1MgJiYgUENJICYmIE9TU19PQlNPTEVURV9EUklWRVIKIAloZWxwCiAJICBTYXkgTSBoZXJlIGlmIHlvdSBoYXZlIGEgc291bmQgY2FyZCBiYXNlZCBvbiB0aGUgQW5hbG9nIERldmljZXMKIAkgIEFEMTg4OSBjaGlwLgogCiBjb25maWcgU09VTkRfQURMSUIKIAl0cmlzdGF0ZSAiQWRsaWIgQ2FyZHMiCi0JZGVwZW5kcyBvbiBTT1VORF9PU1MKKwlkZXBlbmRzIG9uIFNPVU5EX09TUyAmJiBPU1NfT0JTT0xFVEVfRFJJVkVSCiAJaGVscAogCSAgSW5jbHVkZXMgQVNCIDY0IDRELiBJbmZvcm1hdGlvbiBvbiBwcm9ncmFtbWluZyBBZExpYiBjYXJkcyBpcwogCSAgYXZhaWxhYmxlIGF0IDxodHRwOi8vd3d3Lml0c25ldC5jb20vaG9tZS9sZHJhZ29uL1NwZWNzL2FkbGliLmh0bWw+LgogCiBjb25maWcgU09VTkRfQUNJX01JWEVSCiAJdHJpc3RhdGUgIkFDSSBtaXhlciAobWlyb1NPVU5EIFBDTTEtcHJvL1BDTTEyL1BDTTIwKSIKLQlkZXBlbmRzIG9uIFNPVU5EX09TUworCWRlcGVuZHMgb24gU09VTkRfT1NTICYmIE9TU19PQlNPTEVURV9EUklWRVIKIAktLS1oZWxwLS0tCiAJICBBQ0kgKEF1ZGlvIENvbW1hbmQgSW50ZXJmYWNlKSBpcyBhIHByb3RvY29sIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aAogCSAgdGhlIG1pY3JvY29udHJvbGxlciBvbiBzb21lIHNvdW5kIGNhcmRzIHByb2R1Y2VkIGJ5IG1pcm8gYW5kCkBAIC01ODYsNyArNjAwLDcgQEAKIAogY29uZmlnIFNPVU5EX05NMjU2CiAJdHJpc3RhdGUgIk5NMjU2QVYvTk0yNTZaWCBhdWRpbyBzdXBwb3J0IgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT1NTX09CU09MRVRFX0RSSVZFUgogCWhlbHAKIAkgIFNheSBNIGhlcmUgdG8gaW5jbHVkZSBhdWRpbyBzdXBwb3J0IGZvciB0aGUgTmVvTWFnaWMgMjU2QVYvMjU2WlgKIAkgIGNoaXBzZXRzLiBUaGVzZSBhcmUgdGhlIGF1ZGlvIGNoaXBzZXRzIGZvdW5kIGluIHRoZSBTb255CkBAIC03MDYsNyArNzIwLDcgQEAKIAogY29uZmlnIFNPVU5EX09QTDNTQTIKIAl0cmlzdGF0ZSAiWWFtYWhhIE9QTDMtU0EyIGFuZCBTQTMgYmFzZWQgUG5QIGNhcmRzIgotCWRlcGVuZHMgb24gU09VTkRfT1NTCisJZGVwZW5kcyBvbiBTT1VORF9PU1MgJiYgT1NTX09CU09MRVRFX0RSSVZFUgogCWhlbHAKIAkgIFNheSBZIG9yIE0gaWYgeW91IGhhdmUgYSBjYXJkIGJhc2VkIG9uIG9uZSBvZiB0aGVzZSBZYW1haGEgc291bmQKIAkgIGNoaXBzZXRzIG9yIHRoZSAiU0F4Iiwgd2hpY2ggaXMgYWN0dWFsbHkgYSBTQTMuIFJlYWQKQEAgLTgzOCw3ICs4NTIsNyBAQAogCiBjb25maWcgU09VTkRfVFZNSVhFUgogCXRyaXN0YXRlICJUViBjYXJkIChidDg0OCkgbWl4ZXIgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFNPVU5EX1BSSU1FICYmIEkyQworCWRlcGVuZHMgb24gU09VTkRfUFJJTUUgJiYgSTJDICYmIFZJREVPX1Y0TDEKIAloZWxwCiAJICBTdXBwb3J0IGZvciBhdWRpbyBtaXhlciBmYWNpbGl0aWVzIG9uIHRoZSBCVDg0OCBUViBmcmFtZS1ncmFiYmVyCiAJICBjYXJkLgpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2RtYXNvdW5kL2RtYXNvdW5kX2F3YWNzLmMgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYwppbmRleCA0MzU5OTAzLi45YWU2NTlmIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYworKysgYi9zb3VuZC9vc3MvZG1hc291bmQvZG1hc291bmRfYXdhY3MuYwpAQCAtMzQ3LDggKzM0Nyw4IEBACiBzZXR1cF9hdWRpb19ncGlvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIqIGNvbXBhdGlibGUsIGludCAqZ3Bpb19hZGRyLCBpbnQqIGdwaW9fcG9sKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7Ci0JdTMyKiBwcDsKLQkKKwljb25zdCB1MzIqIHBwOworCiAJbnAgPSBmaW5kX2RldmljZXMoImdwaW8iKTsKIAlpZiAoIW5wKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTM1Niw3ICszNTYsOCBAQAogCW5wID0gbnAtPmNoaWxkOwogCXdoaWxlKG5wICE9IDApIHsKIAkJaWYgKG5hbWUpIHsKLQkJCWNoYXIgKnByb3BlcnR5ID0gZ2V0X3Byb3BlcnR5KG5wLCJhdWRpby1ncGlvIixOVUxMKTsKKwkJCWNvbnN0IGNoYXIgKnByb3BlcnR5ID0KKwkJCQlnZXRfcHJvcGVydHkobnAsImF1ZGlvLWdwaW8iLE5VTEwpOwogCQkJaWYgKHByb3BlcnR5ICE9IDAgJiYgc3RyY21wKHByb3BlcnR5LG5hbWUpID09IDApCiAJCQkJYnJlYWs7CiAJCX0gZWxzZSBpZiAoY29tcGF0aWJsZSAmJiBkZXZpY2VfaXNfY29tcGF0aWJsZShucCwgY29tcGF0aWJsZSkpCkBAIC0zNjUsMTEgKzM2NiwxMSBAQAogCX0KIAlpZiAoIW5wKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlwcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobnAsICJBQVBMLGFkZHJlc3MiLCBOVUxMKTsKKwlwcCA9IGdldF9wcm9wZXJ0eShucCwgIkFBUEwsYWRkcmVzcyIsIE5VTEwpOwogCWlmICghcHApCiAJCXJldHVybiAtRU5PREVWOwogCSpncGlvX2FkZHIgPSAoKnBwKSAmIDB4MDAwMGZmZmY7Ci0JcHAgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5wLCAiYXVkaW8tZ3Bpby1hY3RpdmUtc3RhdGUiLCBOVUxMKTsKKwlwcCA9IGdldF9wcm9wZXJ0eShucCwgImF1ZGlvLWdwaW8tYWN0aXZlLXN0YXRlIiwgTlVMTCk7CiAJaWYgKHBwKQogCQkqZ3Bpb19wb2wgPSAqcHA7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL0tjb25maWcgYi9zb3VuZC9wY2kvS2NvbmZpZwppbmRleCBkN2FkMzJmLi5lNDljMGZlIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvS2NvbmZpZwpAQCAtMTYsMTYgKzE2LDE2IEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWQxODg5LgogCiBjb25maWcgU05EX0FMUzMwMAotICAgICAgICB0cmlzdGF0ZSAiQXZhbmNlIExvZ2ljIEFMUzMwMC9BTFMzMDArIgotICAgICAgICBkZXBlbmRzIG9uIFNORAotICAgICAgICBzZWxlY3QgU05EX1BDTQotICAgICAgICBzZWxlY3QgU05EX0FDOTdfQ09ERUMKLSAgICAgICAgc2VsZWN0IFNORF9PUEwzX0xJQgotICAgICAgICBoZWxwCi0gICAgICAgICAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBdmFuY2UgTG9naWMgQUxTMzAwL0FMUzMwMCsKKwl0cmlzdGF0ZSAiQXZhbmNlIExvZ2ljIEFMUzMwMC9BTFMzMDArIgorCWRlcGVuZHMgb24gU05ECisJc2VsZWN0IFNORF9QQ00KKwlzZWxlY3QgU05EX0FDOTdfQ09ERUMKKwlzZWxlY3QgU05EX09QTDNfTElCCisJaGVscAorCSAgU2F5ICdZJyBvciAnTScgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBdmFuY2UgTG9naWMgQUxTMzAwL0FMUzMwMCsKIAotICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKLSAgICAgICAgICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxzMzAwCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzbmQtYWxzMzAwCiAKIGNvbmZpZyBTTkRfQUxTNDAwMAogCXRyaXN0YXRlICJBdmFuY2UgTG9naWMgQUxTNDAwMCIKQEAgLTc4LDQ5ICs3OCw0OSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgc25kLWF0aWl4cC1tb2RlbS4KIAogY29uZmlnIFNORF9BVTg4MTAKLSAgICAgICAgdHJpc3RhdGUgIkF1cmVhbCBBZHZhbnRhZ2UiCi0gICAgICAgIGRlcGVuZHMgb24gU05ECisJdHJpc3RhdGUgIkF1cmVhbCBBZHZhbnRhZ2UiCisJZGVwZW5kcyBvbiBTTkQKIAlzZWxlY3QgU05EX01QVTQwMV9VQVJUCiAJc2VsZWN0IFNORF9BQzk3X0NPREVDCi0gICAgICAgIGhlbHAKKwloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgQXVyZWFsIEFkdmFudGFnZSBzb3VuZGNhcmRzLgogCiAJICBTdXBwb3J0ZWQgZmVhdHVyZXM6IEhhcmR3YXJlIE1peGVyLCBTUkMsIEVRIGFuZCBTUERJRiBvdXRwdXQuCi0gICAgICAgICAgM0Qgc3VwcG9ydCBjb2RlIGlzIGluIHBsYWNlLCBidXQgbm90IHlldCB1c2VhYmxlLiBGb3IgbW9yZSBpbmZvLCAKLSAgICAgICAgICBlbWFpbCB0aGUgQUxTQSBkZXZlbG9wZXIgbGlzdCwgb3IgPG1qYW5kZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0Pi4KKwkgIDNEIHN1cHBvcnQgY29kZSBpcyBpbiBwbGFjZSwgYnV0IG5vdCB5ZXQgdXNlYWJsZS4gRm9yIG1vcmUgaW5mbywKKwkgIGVtYWlsIHRoZSBBTFNBIGRldmVsb3BlciBsaXN0LCBvciA8bWphbmRlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYXU4ODEwLgotIAorCiBjb25maWcgU05EX0FVODgyMAotICAgICAgICB0cmlzdGF0ZSAiQXVyZWFsIFZvcnRleCIKLSAgICAgICAgZGVwZW5kcyBvbiBTTkQKKwl0cmlzdGF0ZSAiQXVyZWFsIFZvcnRleCIKKwlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX0FDOTdfQ09ERUMKLSAgICAgICAgaGVscAorCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBdXJlYWwgVm9ydGV4IHNvdW5kY2FyZHMuCiAKLSAgICAgICAgICBTdXBwb3J0ZWQgZmVhdHVyZXM6IEhhcmR3YXJlIE1peGVyIGFuZCBTUkMuIEZvciBtb3JlIGluZm8sIGVtYWlsIAotICAgICAgICAgIHRoZSBBTFNBIGRldmVsb3BlciBsaXN0LCBvciA8bWphbmRlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgorCSAgU3VwcG9ydGVkIGZlYXR1cmVzOiBIYXJkd2FyZSBNaXhlciBhbmQgU1JDLiBGb3IgbW9yZSBpbmZvLCBlbWFpbAorCSAgdGhlIEFMU0EgZGV2ZWxvcGVyIGxpc3QsIG9yIDxtamFuZGVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hdTg4MjAuCi0gCisKIGNvbmZpZyBTTkRfQVU4ODMwCi0gICAgICAgIHRyaXN0YXRlICJBdXJlYWwgVm9ydGV4IDIiCi0gICAgICAgIGRlcGVuZHMgb24gU05ECisJdHJpc3RhdGUgIkF1cmVhbCBWb3J0ZXggMiIKKwlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfTVBVNDAxX1VBUlQKIAlzZWxlY3QgU05EX0FDOTdfQ09ERUMKLSAgICAgICAgaGVscAorCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBBdXJlYWwgVm9ydGV4IDIgc291bmRjYXJkcy4KIAotICAgICAgICAgIFN1cHBvcnRlZCBmZWF0dXJlczogSGFyZHdhcmUgTWl4ZXIsIFNSQywgRVEgYW5kIFNQRElGIG91dHB1dC4KLSAgICAgICAgICAzRCBzdXBwb3J0IGNvZGUgaXMgaW4gcGxhY2UsIGJ1dCBub3QgeWV0IHVzZWFibGUuIEZvciBtb3JlIGluZm8sIAotICAgICAgICAgIGVtYWlsIHRoZSBBTFNBIGRldmVsb3BlciBsaXN0LCBvciA8bWphbmRlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+LgorCSAgU3VwcG9ydGVkIGZlYXR1cmVzOiBIYXJkd2FyZSBNaXhlciwgU1JDLCBFUSBhbmQgU1BESUYgb3V0cHV0LgorCSAgM0Qgc3VwcG9ydCBjb2RlIGlzIGluIHBsYWNlLCBidXQgbm90IHlldCB1c2VhYmxlLiBGb3IgbW9yZSBpbmZvLAorCSAgZW1haWwgdGhlIEFMU0EgZGV2ZWxvcGVyIGxpc3QsIG9yIDxtamFuZGVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4uCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHNuZC1hdTg4MzAuCi0gCisKIGNvbmZpZyBTTkRfQVpUMzMyOAogCXRyaXN0YXRlICJBenRlY2ggQVpGMzMyOCAvIFBDSTE2OCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFNORCAmJiBFWFBFUklNRU5UQUwKQEAgLTEzNSwxMCArMTM1LDEwIEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtYXp0MzMyOC4KIAogY29uZmlnIFNORF9CVDg3WAotICAgICAgICB0cmlzdGF0ZSAiQnQ4N3ggQXVkaW8gQ2FwdHVyZSIKLSAgICAgICAgZGVwZW5kcyBvbiBTTkQKKwl0cmlzdGF0ZSAiQnQ4N3ggQXVkaW8gQ2FwdHVyZSIKKwlkZXBlbmRzIG9uIFNORAogCXNlbGVjdCBTTkRfUENNCi0gICAgICAgIGhlbHAKKwloZWxwCiAJICBJZiB5b3Ugd2FudCB0byByZWNvcmQgYXVkaW8gZnJvbSBUViBjYXJkcyBiYXNlZCBvbgogCSAgQnJvb2t0cmVlIEJ0ODc4L0J0ODc5IGNoaXBzLCBzYXkgWSBoZXJlIGFuZCByZWFkCiAJICA8ZmlsZTpEb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQnQ4N3gudHh0Pi4KQEAgLTIwOSw3ICsyMDksNyBAQAogY29uZmlnIFNORF9DUzQ2WFhfTkVXX0RTUAogCWJvb2wgIkNpcnJ1cyBMb2dpYyAoU291bmQgRnVzaW9uKSBOZXcgRFNQIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTTkRfQ1M0NlhYCi0gICAgICAgIGRlZmF1bHQgeQorCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gdXNlIGEgbmV3IERTUCBpbWFnZSBmb3IgU1BESUYgYW5kIGR1YWwgY29kZWNzLgogCkBAIC0yMjUsNyArMjI1LDcgQEAKIAkgIHJlZmVycmVkIHRvIGFzIE5TIENTNTUzNSBJTyBvciBBTUQgQ1M1NTM1IElPIGNvbXBhbmlvbiBpbgogCSAgdmFyaW91cyBsaXRlcmF0dXJlLiBUaGlzIGRyaXZlciBhbHNvIHN1cHBvcnRzIHRoZSBDUzU1MzYgYXVkaW8KIAkgIGRldmljZS4gSG93ZXZlciwgZm9yIGJvdGggY2hpcHMsIG9uIGNlcnRhaW4gYm9hcmRzLCB5b3UgbWF5Ci0JICBuZWVkIHRvIHVzZSBhYzk3X3F1aXJrPWhwX29ubHkgaWYgeW91ciBib2FyZCBoYXMgcGh5c2ljYWxseSAKKwkgIG5lZWQgdG8gdXNlIGFjOTdfcXVpcms9aHBfb25seSBpZiB5b3VyIGJvYXJkIGhhcyBwaHlzaWNhbGx5CiAJICBtYXBwZWQgaGVhZHBob25lIG91dCB0byBtYXN0ZXIgb3V0cHV0LiBJZiB0aGF0IHdvcmtzIGZvciB5b3UsCiAJICBzZW5kIGxzcGNpIC12dnYgb3V0cHV0IHRvIHRoZSBtYWlsaW5nIGxpc3Qgc28gdGhhdCB5b3VyIGJvYXJkCiAJICBjYW4gYmUgaWRlbnRpZmllZCBpbiB0aGUgcXVpcmtzIGxpc3QuCkBAIC00NjgsMTEgKzQ2OCwxMyBAQAogCSAgRk04MDEgY2hpcCB3aXRoIGEgVEVBNTc1NyB0dW5lciBjb25uZWN0ZWQgdG8gR1BJTzEtMyBwaW5zIChNZWRpYQogCSAgRm9ydGUgU0YyNTYtUENTLTAyKSBpbnRvIHRoZSBzbmQtZm04MDEgZHJpdmVyLgogCisJICBUaGlzIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBvbGQgVjRMMSBBUEkuCisKIGNvbmZpZyBTTkRfRk04MDFfVEVBNTc1WAogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBTTkRfRk04MDFfVEVBNTc1WF9CT09MCiAJZGVmYXVsdCBTTkRfRk04MDEKLQlzZWxlY3QgVklERU9fREVWCisJc2VsZWN0IFZJREVPX1Y0TDEKIAogY29uZmlnIFNORF9IREFfSU5URUwKIAl0cmlzdGF0ZSAiSW50ZWwgSEQgQXVkaW8iCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMgYi9zb3VuZC9wY2kvYWM5Ny9hYzk3X2NvZGVjLmMKaW5kZXggMGFiZjI4MC4uNTFlODNkNyAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2FjOTcvYWM5N19jb2RlYy5jCisrKyBiL3NvdW5kL3BjaS9hYzk3L2FjOTdfY29kZWMuYwpAQCAtNTczLDcgKzU3Myw3IEBACiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgc25kX2FjOTdfY29udHJvbHNfbWljX2Jvb3N0ID0KLQlBQzk3X1NJTkdMRSgiTWljIEJvb3N0ICgrMjBkQikgU3dpdGNoIiwgQUM5N19NSUMsIDYsIDEsIDApOworCUFDOTdfU0lOR0xFKCJNaWMgQm9vc3QgKCsyMGRCKSIsIEFDOTdfTUlDLCA2LCAxLCAwKTsKIAogCiBzdGF0aWMgY29uc3QgY2hhciogc3RkX3JlY19zZWxbXSA9IHsiTWljIiwgIkNEIiwgIlZpZGVvIiwgIkF1eCIsICJMaW5lIiwgIk1peCIsICJNaXggTW9ubyIsICJQaG9uZSJ9OwpAQCAtNjE1LDcgKzYxNSw3IEBACiBBQzk3X1NJTkdMRSgiM0QgQ29udHJvbCAtIFN3aXRjaCIsIEFDOTdfR0VORVJBTF9QVVJQT1NFLCAxMywgMSwgMCksCiBBQzk3X1NJTkdMRSgiTG91ZG5lc3MgKGJhc3MgYm9vc3QpIiwgQUM5N19HRU5FUkFMX1BVUlBPU0UsIDEyLCAxLCAwKSwKIEFDOTdfRU5VTSgiTW9ubyBPdXRwdXQgU2VsZWN0Iiwgc3RkX2VudW1bMl0pLAotQUM5N19FTlVNKCJNaWMgU2VsZWN0IENhcHR1cmUgU3dpdGNoIiwgc3RkX2VudW1bM10pLAorQUM5N19FTlVNKCJNaWMgU2VsZWN0Iiwgc3RkX2VudW1bM10pLAogQUM5N19TSU5HTEUoIkFEQy9EQUMgTG9vcGJhY2siLCBBQzk3X0dFTkVSQUxfUFVSUE9TRSwgNywgMSwgMCkKIH07CiAKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2VjaG9hdWRpby5jCmluZGV4IDI3YThkYmUuLmMzZGFmYTIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vZWNob2F1ZGlvLmMKKysrIGIvc291bmQvcGNpL2VjaG9hdWRpby9lY2hvYXVkaW8uYwpAQCAtMjM2LDkgKzIzNiw5IEBACiAJY2hpcCA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKIAlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwogCi0JaWYgKCEocGlwZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdWRpb3BpcGUpLCBHRlBfS0VSTkVMKSkpCisJcGlwZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhdWRpb3BpcGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBpcGUpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChwaXBlLCAwLCBzaXplb2Yoc3RydWN0IGF1ZGlvcGlwZSkpOwogCXBpcGUtPmluZGV4ID0gLTE7CQkvKiBOb3QgY29uZmlndXJlZCB5ZXQgKi8KIAogCS8qIFNldCB1cCBodyBjYXBhYmlsaXRpZXMgYW5kIGNvbnRyYWludHMgKi8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9lbXUxMGsxL2VtdTEwazFfbWFpbi5jIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKaW5kZXggZjliNWMzZC4uNzlmMjRjZCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKKysrIGIvc291bmQvcGNpL2VtdTEwazEvZW11MTBrMV9tYWluLmMKQEAgLTkzNiw2ICs5MzYsMTcgQEAKIAkgLmNhMDE1MV9jaGlwID0gMSwKIAkgLnNwazcxID0gMSwKIAkgLnNwZGlmX2J1ZyA9IDF9ICwKKwkvKiBEZWxsIE9FTS9DcmVhdGl2ZSBMYWJzIEF1ZGlneSAyIFpTICovCisJLyogU2VlIEFMU0EgYnVnIzEzNjUgKi8KKwl7LnZlbmRvciA9IDB4MTEwMiwgLmRldmljZSA9IDB4MDAwNCwgLnN1YnN5c3RlbSA9IDB4MTAwMzExMDIsCisJIC5kcml2ZXIgPSAiQXVkaWd5MiIsIC5uYW1lID0gIkF1ZGlneSAyIFpTIFtTQjAzNTNdIiwKKwkgLmlkID0gIkF1ZGlneTIiLAorCSAuZW11MTBrMl9jaGlwID0gMSwKKwkgLmNhMDEwMl9jaGlwID0gMSwKKwkgLmNhMDE1MV9jaGlwID0gMSwKKwkgLnNwazcxID0gMSwKKwkgLnNwZGlmX2J1ZyA9IDEsCisJIC5hYzk3X2NoaXAgPSAxfSAsCiAJey52ZW5kb3IgPSAweDExMDIsIC5kZXZpY2UgPSAweDAwMDQsIC5zdWJzeXN0ZW0gPSAweDEwMDIxMTAyLAogCSAuZHJpdmVyID0gIkF1ZGlneTIiLCAubmFtZSA9ICJBdWRpZ3kgMiBQbGF0aW51bSBbU0IwMjQwUF0iLCAKIAkgLmlkID0gIkF1ZGlneTIiLApkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VtdTEwazEvaXJxLmMgYi9zb3VuZC9wY2kvZW11MTBrMS9pcnEuYwppbmRleCBhOGIzMTI4Li4xMDc2YWY0IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvZW11MTBrMS9pcnEuYworKysgYi9zb3VuZC9wY2kvZW11MTBrMS9pcnEuYwpAQCAtMzcsOSArMzcsMTMgQEAKIAlpbnQgaGFuZGxlZCA9IDA7CiAKIAl3aGlsZSAoKHN0YXR1cyA9IGlubChlbXUtPnBvcnQgKyBJUFIpKSAhPSAwKSB7Ci0JCS8vcHJpbnRrKCJlbXUxMGsxIGlycSAtIHN0YXR1cyA9IDB4JXhcbiIsIHN0YXR1cyk7CisJCS8vc25kX3ByaW50ayhLRVJOX0lORk8gImVtdTEwazEgaXJxIC0gc3RhdHVzID0gMHgleFxuIiwgc3RhdHVzKTsKIAkJb3JpZ19zdGF0dXMgPSBzdGF0dXM7CiAJCWhhbmRsZWQgPSAxOworCQlpZiAoKHN0YXR1cyAmIDB4ZmZmZmZmZmYpID09IDB4ZmZmZmZmZmYpIHsKKwkJCXNuZF9wcmludGsoS0VSTl9JTkZPICJzbmQtZW11MTBrMTogU3VzcGVjdGVkIHNvdW5kIGNhcmQgcmVtb3ZhbFxuIik7CisJCQlicmVhazsKKwkJfQogCQlpZiAoc3RhdHVzICYgSVBSX1BDSUVSUk9SKSB7CiAJCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJpbnRlcnJ1cHQ6IFBDSSBlcnJvclxuIik7CiAJCQlzbmRfZW11MTBrMV9pbnRyX2Rpc2FibGUoZW11LCBJTlRFX1BDSUVSUk9SRU5BQkxFKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BwYy9hd2Fjcy5jIGIvc291bmQvcHBjL2F3YWNzLmMKaW5kZXggODJkNzkxYi4uMDVkYWJlNCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2F3YWNzLmMKKysrIGIvc291bmQvcHBjL2F3YWNzLmMKQEAgLTgwMSwxMSArODAxLDEwIEBACiAJY2hpcC0+cmV2aXNpb24gPSAoaW5fbGUzMigmY2hpcC0+YXdhY3MtPmNvZGVjX3N0YXQpID4+IDEyKSAmIDB4ZjsKICNpZmRlZiBQTUFDX0FNUF9BVkFJTAogCWlmIChjaGlwLT5yZXZpc2lvbiA9PSAzICYmIGNoaXAtPmhhc19paWMgJiYgQ0hFQ0tfQ1VEQV9BTVAoKSkgewotCQlzdHJ1Y3QgYXdhY3NfYW1wICphbXAgPSBrbWFsbG9jKHNpemVvZigqYW1wKSwgR0ZQX0tFUk5FTCk7CisJCXN0cnVjdCBhd2Fjc19hbXAgKmFtcCA9IGt6YWxsb2Moc2l6ZW9mKCphbXApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgYW1wKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCWNoaXAtPm1peGVyX2RhdGEgPSBhbXA7Ci0JCW1lbXNldChhbXAsIDAsIHNpemVvZigqYW1wKSk7CiAJCWNoaXAtPm1peGVyX2ZyZWUgPSBhd2Fjc19hbXBfZnJlZTsKIAkJYXdhY3NfYW1wX3NldF92b2woYW1wLCAwLCA2MywgNjMsIDApOyAvKiBtdXRlIGFuZCB6ZXJvIHZvbCAqLwogCQlhd2Fjc19hbXBfc2V0X3ZvbChhbXAsIDEsIDYzLCA2MywgMCk7CmRpZmYgLS1naXQgYS9zb3VuZC9wcGMvZGFjYS5jIGIvc291bmQvcHBjL2RhY2EuYwppbmRleCA0NmVlYmY1Li41NzIwMmIwIDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvZGFjYS5jCisrKyBiL3NvdW5kL3BwYy9kYWNhLmMKQEAgLTI1OCwxMCArMjU4LDkgQEAKIAkJcmVxdWVzdF9tb2R1bGUoImkyYy1wb3dlcm1hYyIpOwogI2VuZGlmIC8qIENPTkZJR19LTU9EICovCQogCi0JbWl4ID0ga21hbGxvYyhzaXplb2YoKm1peCksIEdGUF9LRVJORUwpOworCW1peCA9IGt6YWxsb2Moc2l6ZW9mKCptaXgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoISBtaXgpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChtaXgsIDAsIHNpemVvZigqbWl4KSk7CiAJY2hpcC0+bWl4ZXJfZGF0YSA9IG1peDsKIAljaGlwLT5taXhlcl9mcmVlID0gZGFjYV9jbGVhbnVwOwogCW1peC0+YW1wX29uID0gMTsgLyogZGVmYXVsdCBvbiAqLwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL2tleXdlc3QuYyBiL3NvdW5kL3BwYy9rZXl3ZXN0LmMKaW5kZXggZmIwNTkzOC4uNTk0ODJhNCAxMDA2NDQKLS0tIGEvc291bmQvcHBjL2tleXdlc3QuYworKysgYi9zb3VuZC9wcGMva2V5d2VzdC5jCkBAIC02NCwxMSArNjQsMTAgQEAKIAlpZiAoc3RybmNtcChpMmNfZGV2aWNlX25hbWUoYWRhcHRlciksICJtYWMtaW8iLCA2KSkKIAkJcmV0dXJuIDA7IC8qIGlnbm9yZWQgKi8KIAotCW5ld19jbGllbnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOworCW5ld19jbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCksIEdGUF9LRVJORUwpOwogCWlmICghIG5ld19jbGllbnQpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtc2V0KG5ld19jbGllbnQsIDAsIHNpemVvZigqbmV3X2NsaWVudCkpOwogCW5ld19jbGllbnQtPmFkZHIgPSBrZXl3ZXN0X2N0eC0+YWRkcjsKIAlpMmNfc2V0X2NsaWVudGRhdGEobmV3X2NsaWVudCwga2V5d2VzdF9jdHgpOwogCW5ld19jbGllbnQtPmFkYXB0ZXIgPSBhZGFwdGVyOwpkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3Bvd2VybWFjLmMgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwppbmRleCBmYTlhNDRhLi4yMjY0NTc0IDEwMDY0NAotLS0gYS9zb3VuZC9wcGMvcG93ZXJtYWMuYworKysgYi9zb3VuZC9wcGMvcG93ZXJtYWMuYwpAQCAtMTgxLDIxICsxODEsMTQgQEAKIAlpZiAoKGVyciA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc25kX3BtYWNfZHJpdmVyKSkgPCAwKQogCQlyZXR1cm4gZXJyOwogCWRldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoU05EX1BNQUNfRFJJVkVSLCAtMSwgTlVMTCwgMCk7Ci0JaWYgKCFJU19FUlIoZGV2aWNlKSkgewotCQlpZiAocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2aWNlKSkKLQkJCXJldHVybiAwOwotCQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcihkZXZpY2UpOwotCQllcnIgPSAtRU5PREVWOwotCX0gZWxzZQotCQllcnIgPSBQVFJfRVJSKGRldmljZSk7Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNuZF9wbWFjX2RyaXZlcik7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIAogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYWxzYV9jYXJkX3BtYWNfZXhpdCh2b2lkKQogewotCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGRldmljZSk7CisJaWYgKCFJU19FUlIoZGV2aWNlKSkKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoZGV2aWNlKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmc25kX3BtYWNfZHJpdmVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvc291bmQvcHBjL3R1bWJsZXIuYyBiL3NvdW5kL3BwYy90dW1ibGVyLmMKaW5kZXggNjkyYzYxMS4uNmFlMmQ1YiAxMDA2NDQKLS0tIGEvc291bmQvcHBjL3R1bWJsZXIuYworKysgYi9zb3VuZC9wcGMvdHVtYmxlci5jCkBAIC0xMDM1LDcgKzEwMzUsNyBAQAogCQlyZXR1cm4gTlVMTDsKICAgCiAJZm9yIChucCA9IG5wLT5jaGlsZDsgbnA7IG5wID0gbnAtPnNpYmxpbmcpIHsKLQkJY2hhciAqcHJvcGVydHkgPSBnZXRfcHJvcGVydHkobnAsICJhdWRpby1ncGlvIiwgTlVMTCk7CisJCWNvbnN0IGNoYXIgKnByb3BlcnR5ID0gZ2V0X3Byb3BlcnR5KG5wLCAiYXVkaW8tZ3BpbyIsIE5VTEwpOwogCQlpZiAocHJvcGVydHkgJiYgc3RyY21wKHByb3BlcnR5LCBuYW1lKSA9PSAwKQogCQkJcmV0dXJuIG5wOwogCX0gIApAQCAtMTA2Miw3ICsxMDYyLDggQEAKIAkJCQlzdHJ1Y3QgcG1hY19ncGlvICpncCwgaW50IGlzX2NvbXBhdGlibGUpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwotCXUzMiAqYmFzZSwgYWRkcjsKKwljb25zdCB1MzIgKmJhc2U7CisJdTMyIGFkZHI7CiAKIAlpZiAoaXNfY29tcGF0aWJsZSkKIAkJbm9kZSA9IGZpbmRfY29tcGF0aWJsZV9hdWRpb19kZXZpY2UoZGV2aWNlKTsKQEAgLTEwNzQsOSArMTA3NSw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWJhc2UgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5vZGUsICJBQVBMLGFkZHJlc3MiLCBOVUxMKTsKKwliYXNlID0gZ2V0X3Byb3BlcnR5KG5vZGUsICJBQVBMLGFkZHJlc3MiLCBOVUxMKTsKIAlpZiAoISBiYXNlKSB7Ci0JCWJhc2UgPSAodTMyICopZ2V0X3Byb3BlcnR5KG5vZGUsICJyZWciLCBOVUxMKTsKKwkJYmFzZSA9IGdldF9wcm9wZXJ0eShub2RlLCAicmVnIiwgTlVMTCk7CiAJCWlmICghYmFzZSkgewogCQkJREJHKCIoRSkgY2Fubm90IGZpbmQgYWRkcmVzcyBmb3IgZGV2aWNlICVzICFcbiIsIGRldmljZSk7CiAJCQlzbmRfcHJpbnRkKCJjYW5ub3QgZmluZCBhZGRyZXNzIGZvciBkZXZpY2UgJXNcbiIsIGRldmljZSk7CkBAIC0xMDkwLDEzICsxMDkxLDEzIEBACiAKIAlncC0+YWRkciA9IGFkZHIgJiAweDAwMDBmZmZmOwogCS8qIFRyeSB0byBmaW5kIHRoZSBhY3RpdmUgc3RhdGUsIGRlZmF1bHQgdG8gMCAhICovCi0JYmFzZSA9ICh1MzIgKilnZXRfcHJvcGVydHkobm9kZSwgImF1ZGlvLWdwaW8tYWN0aXZlLXN0YXRlIiwgTlVMTCk7CisJYmFzZSA9IGdldF9wcm9wZXJ0eShub2RlLCAiYXVkaW8tZ3Bpby1hY3RpdmUtc3RhdGUiLCBOVUxMKTsKIAlpZiAoYmFzZSkgewogCQlncC0+YWN0aXZlX3N0YXRlID0gKmJhc2U7CiAJCWdwLT5hY3RpdmVfdmFsID0gKCpiYXNlKSA/IDB4NSA6IDB4NDsKIAkJZ3AtPmluYWN0aXZlX3ZhbCA9ICgqYmFzZSkgPyAweDQgOiAweDU7CiAJfSBlbHNlIHsKLQkJdTMyICpwcm9wID0gTlVMTDsKKwkJY29uc3QgdTMyICpwcm9wID0gTlVMTDsKIAkJZ3AtPmFjdGl2ZV9zdGF0ZSA9IDA7CiAJCWdwLT5hY3RpdmVfdmFsID0gMHg0OwogCQlncC0+aW5hY3RpdmVfdmFsID0gMHg1OwpAQCAtMTEwNSw3ICsxMTA2LDcgQEAKIAkJICogYXMgd2UgZG9uJ3QgeWV0IGhhdmUgYW4gaW50ZXJwcmV0ZXIgZm9yIHRoZXNlIHRoaW5ncwogCQkgKi8KIAkJaWYgKHBsYXRmb3JtKQotCQkJcHJvcCA9ICh1MzIgKilnZXRfcHJvcGVydHkobm9kZSwgcGxhdGZvcm0sIE5VTEwpOworCQkJcHJvcCA9IGdldF9wcm9wZXJ0eShub2RlLCBwbGF0Zm9ybSwgTlVMTCk7CiAJCWlmIChwcm9wKSB7CiAJCQlpZiAocHJvcFszXSA9PSAweDkgJiYgcHJvcFs0XSA9PSAweDkpIHsKIAkJCQlncC0+YWN0aXZlX3ZhbCA9IDB4ZDsKQEAgLTEzMTYsMTAgKzEzMTcsOSBAQAogCQlyZXF1ZXN0X21vZHVsZSgiaTJjLXBvd2VybWFjIik7CiAjZW5kaWYgLyogQ09ORklHX0tNT0QgKi8JCiAKLQltaXggPSBrbWFsbG9jKHNpemVvZigqbWl4KSwgR0ZQX0tFUk5FTCk7CisJbWl4ID0ga3phbGxvYyhzaXplb2YoKm1peCksIEdGUF9LRVJORUwpOwogCWlmICghIG1peCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KG1peCwgMCwgc2l6ZW9mKCptaXgpKTsKIAltaXgtPmhlYWRwaG9uZV9pcnEgPSAtMTsKIAogCWNoaXAtPm1peGVyX2RhdGEgPSBtaXg7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IGQzMmQ4M2QuLjFiN2Y0OTkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0yMjYwLDEwICsyMjYwLDkgQEAKIAl9CiAKIAkvKiBjcmVhdGUgYSBuZXcgcGNtICovCi0JYXMgPSBrbWFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKKwlhcyA9IGt6YWxsb2Moc2l6ZW9mKCphcyksIEdGUF9LRVJORUwpOwogCWlmICghIGFzKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoYXMsIDAsIHNpemVvZigqYXMpKTsKIAlhcy0+cGNtX2luZGV4ID0gY2hpcC0+cGNtX2RldnM7CiAJYXMtPmNoaXAgPSBjaGlwOwogCWFzLT5mbXRfdHlwZSA9IGZwLT5mbXRfdHlwZTsKQEAgLTI2MzMsMTMgKzI2MzIsMTIgQEAKIAkJCWNzZXAgPSBOVUxMOwogCQl9CiAKLQkJZnAgPSBrbWFsbG9jKHNpemVvZigqZnApLCBHRlBfS0VSTkVMKTsKKwkJZnAgPSBremFsbG9jKHNpemVvZigqZnApLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCEgZnApIHsKIAkJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBtYWxsb2NcbiIpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAotCQltZW1zZXQoZnAsIDAsIHNpemVvZigqZnApKTsKIAkJZnAtPmlmYWNlID0gaWZhY2Vfbm87CiAJCWZwLT5hbHRzZXR0aW5nID0gYWx0bm87CiAJCWZwLT5hbHRzZXRfaWR4ID0gaTsKZGlmZiAtLWdpdCBhL3Vzci9NYWtlZmlsZSBiL3Vzci9NYWtlZmlsZQppbmRleCBlOTM4MjQyLi41YjMxYzBiIDEwMDY0NAotLS0gYS91c3IvTWFrZWZpbGUKKysrIGIvdXNyL01ha2VmaWxlCkBAIC0zNSw2ICszNSw5IEBACiAgICAgICBjbWRfaW5pdGZzID0gJChpbml0cmFtZnMpIC1vICRAICQocmFtZnMtYXJncykgJChyYW1mcy1pbnB1dCkKIAogdGFyZ2V0cyA6PSBpbml0cmFtZnNfZGF0YS5jcGlvLmd6CisjIGRvIG5vdCB0cnkgdG8gdXBkYXRlIGZpbGVzIGluY2x1ZGVkIGluIGluaXRyYW1mcworJChkZXBzX2luaXRyYW1mcyk6IDsKKwogJChkZXBzX2luaXRyYW1mcyk6IGtsaWJjZGlycwogIyBXZSByZWJ1aWxkIGluaXRyYW1mc19kYXRhLmNwaW8uZ3ogaWY6CiAjIDEpIEFueSBpbmNsdWRlZCBmaWxlIGlzIG5ld2VyIHRoZW4gaW5pdHJhbWZzX2RhdGEuY3Bpby5nego=